Compass-ci
Threads by month
- ----- 2025 -----
- February
- January
- ----- 2024 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2023 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2022 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2021 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2020 -----
- December
- November
- October
- September
December 2020
- 26 participants
- 957 discussions

15 Dec '20
From: Lu Weitao <luweitaobe(a)163.com>
[Why]
Haven't define images relationship in mime.types
Signed-off-by: Lu Weitao <luweitaobe(a)163.com>
---
container/srv-http/root/etc/nginx/mime.types | 11 +++++++++++
1 file changed, 11 insertions(+)
diff --git a/container/srv-http/root/etc/nginx/mime.types b/container/srv-http/root/etc/nginx/mime.types
index a4ee74b..a8f7b0c 100644
--- a/container/srv-http/root/etc/nginx/mime.types
+++ b/container/srv-http/root/etc/nginx/mime.types
@@ -6,6 +6,17 @@ types {
text/yaml yaml;
text/plain txt time data sh log;
+ image/gif gif;
+ image/jpeg jpeg jpg;
+ image/png png;
+ image/svg+xml svg svgz;
+ image/tiff tif tiff;
+ image/vnd.wap.wbmp wbmp;
+ image/webp webp;
+ image/x-icon ico;
+ image/x-jng jng;
+ image/x-ms-bmp bmp;
+
application/json json;
application/x-gzip gz tgz cgz;
}
--
2.23.0
1
0
From: Lu Weitao <luweitaobe(a)163.com>
Signed-off-by: Lu Weitao <luweitaobe(a)163.com>
---
container/srv-http/Dockerfile | 4 ++++
1 file changed, 4 insertions(+)
diff --git a/container/srv-http/Dockerfile b/container/srv-http/Dockerfile
index 2821e57..8f9a36d 100644
--- a/container/srv-http/Dockerfile
+++ b/container/srv-http/Dockerfile
@@ -7,5 +7,9 @@ ADD root /
RUN apk add --no-cache php7 php7-fpm php7-session php7-json php7-exif php7-imagick php7-gd php7-fileinfo
RUN sed -i '/\[global\]/a daemonize = no' /etc/php7/php-fpm.conf
+RUN sed -i "s/user = nobody/user = nginx/g" /etc/php7/php-fpm.d/www.conf
+RUN sed -i "s/group = nobody/group = nginx/g" /etc/php7/php-fpm.d/www.conf
+
+RUN chown -R nginx:nginx /srv/_h5ai
ENTRYPOINT ["/sbin/entrypoint.sh"]
--
2.23.0
1
0
From: Lu Weitao <luweitaobe(a)163.com>
[Why]
Optimize result page style to make it more modern
[Example]
http://124.90.34.227:11300/result/iperf/2020-12-08/vm-2p8g/openeuler-20.03-…
Signed-off-by: Lu Weitao <luweitaobe(a)163.com>
---
.../root/etc/nginx/conf.d/default.conf | 5 +-
container/srv-http/root/srv/.htaccess | 165 +++++
container/srv-http/root/srv/_h5ai/.htaccess | 165 +++++
.../srv-http/root/srv/_h5ai/CHANGELOG.md | 598 ++++++++++++++++++
container/srv-http/root/srv/_h5ai/README.md | 72 +++
.../root/srv/_h5ai/private/cache/README.md | 9 +
.../root/srv/_h5ai/private/conf/l10n/af.json | 18 +
.../root/srv/_h5ai/private/conf/l10n/bg.json | 18 +
.../root/srv/_h5ai/private/conf/l10n/cs.json | 18 +
.../root/srv/_h5ai/private/conf/l10n/da.json | 18 +
.../root/srv/_h5ai/private/conf/l10n/de.json | 22 +
.../root/srv/_h5ai/private/conf/l10n/el.json | 18 +
.../root/srv/_h5ai/private/conf/l10n/en.json | 23 +
.../root/srv/_h5ai/private/conf/l10n/es.json | 22 +
.../root/srv/_h5ai/private/conf/l10n/et.json | 22 +
.../root/srv/_h5ai/private/conf/l10n/fi.json | 18 +
.../root/srv/_h5ai/private/conf/l10n/fr.json | 22 +
.../root/srv/_h5ai/private/conf/l10n/he.json | 17 +
.../root/srv/_h5ai/private/conf/l10n/hi.json | 18 +
.../root/srv/_h5ai/private/conf/l10n/hr.json | 18 +
.../root/srv/_h5ai/private/conf/l10n/hu.json | 16 +
.../root/srv/_h5ai/private/conf/l10n/it.json | 18 +
.../root/srv/_h5ai/private/conf/l10n/ja.json | 20 +
.../root/srv/_h5ai/private/conf/l10n/ko.json | 22 +
.../root/srv/_h5ai/private/conf/l10n/lv.json | 22 +
.../root/srv/_h5ai/private/conf/l10n/nb.json | 15 +
.../root/srv/_h5ai/private/conf/l10n/nl.json | 22 +
.../root/srv/_h5ai/private/conf/l10n/pl.json | 22 +
.../root/srv/_h5ai/private/conf/l10n/pt.json | 18 +
.../root/srv/_h5ai/private/conf/l10n/ro.json | 15 +
.../root/srv/_h5ai/private/conf/l10n/ru.json | 20 +
.../root/srv/_h5ai/private/conf/l10n/sk.json | 13 +
.../root/srv/_h5ai/private/conf/l10n/sl.json | 18 +
.../root/srv/_h5ai/private/conf/l10n/sr.json | 15 +
.../root/srv/_h5ai/private/conf/l10n/sv.json | 16 +
.../root/srv/_h5ai/private/conf/l10n/tr.json | 14 +
.../root/srv/_h5ai/private/conf/l10n/uk.json | 18 +
.../srv/_h5ai/private/conf/l10n/zh-cn.json | 23 +
.../srv/_h5ai/private/conf/l10n/zh-tw.json | 23 +
.../root/srv/_h5ai/private/conf/options.json | 392 ++++++++++++
.../root/srv/_h5ai/private/conf/types.json | 76 +++
.../srv/_h5ai/private/php/class-bootstrap.php | 45 ++
.../srv/_h5ai/private/php/core/class-api.php | 109 ++++
.../_h5ai/private/php/core/class-context.php | 294 +++++++++
.../_h5ai/private/php/core/class-fallback.php | 54 ++
.../_h5ai/private/php/core/class-filesize.php | 96 +++
.../srv/_h5ai/private/php/core/class-item.php | 91 +++
.../srv/_h5ai/private/php/core/class-json.php | 65 ++
.../_h5ai/private/php/core/class-logger.php | 28 +
.../_h5ai/private/php/core/class-request.php | 38 ++
.../_h5ai/private/php/core/class-session.php | 20 +
.../_h5ai/private/php/core/class-setup.php | 185 ++++++
.../_h5ai/private/php/core/class-theme.php | 32 +
.../srv/_h5ai/private/php/core/class-util.php | 89 +++
.../_h5ai/private/php/ext/class-archive.php | 183 ++++++
.../_h5ai/private/php/ext/class-custom.php | 65 ++
.../_h5ai/private/php/ext/class-search.php | 40 ++
.../srv/_h5ai/private/php/ext/class-thumb.php | 253 ++++++++
.../srv/_h5ai/private/php/pages/index.php | 2 +
.../root/srv/_h5ai/private/php/pages/info.php | 2 +
.../srv-http/root/srv/_h5ai/public/.htaccess | 13 +
.../root/srv/_h5ai/public/cache/README.md | 9 +
.../root/srv/_h5ai/public/css/styles.css | 2 +
.../root/srv/_h5ai/public/ext/README.md | 4 +
.../srv/_h5ai/public/images/fallback/file.png | Bin 0 -> 118 bytes
.../public/images/fallback/folder-parent.png | Bin 0 -> 108 bytes
.../_h5ai/public/images/fallback/folder.png | Bin 0 -> 99 bytes
.../public/images/favicon/favicon-152.png | Bin 0 -> 219 bytes
.../public/images/favicon/favicon-16-32.ico | Bin 0 -> 5430 bytes
.../public/images/favicon/favicon-16.png | Bin 0 -> 96 bytes
.../public/images/favicon/favicon-32.png | Bin 0 -> 120 bytes
.../_h5ai/public/images/favicon/favicon.svg | 3 +
.../srv/_h5ai/public/images/themes/README.md | 9 +
.../public/images/themes/comity/ar-apk.svg | 3 +
.../public/images/themes/comity/ar-deb.svg | 16 +
.../public/images/themes/comity/ar-rpm.svg | 11 +
.../public/images/themes/comity/txt-css.svg | 13 +
.../public/images/themes/comity/txt-go.svg | 29 +
.../public/images/themes/comity/txt-html.svg | 10 +
.../public/images/themes/comity/txt-js.svg | 3 +
.../public/images/themes/comity/txt-less.svg | 8 +
.../public/images/themes/comity/txt-md.svg | 3 +
.../public/images/themes/comity/txt-php.svg | 3 +
.../public/images/themes/comity/txt-py.svg | 8 +
.../public/images/themes/comity/txt-rb.svg | 3 +
.../public/images/themes/comity/txt-rust.svg | 3 +
.../images/themes/comity/txt-script.svg | 3 +
.../public/images/themes/comity/x-pdf.svg | 3 +
.../_h5ai/public/images/themes/default/ar.svg | 3 +
.../public/images/themes/default/aud.svg | 3 +
.../public/images/themes/default/bin.svg | 3 +
.../public/images/themes/default/file.svg | 3 +
.../images/themes/default/folder-page.svg | 3 +
.../images/themes/default/folder-parent.svg | 3 +
.../public/images/themes/default/folder.svg | 3 +
.../public/images/themes/default/img.svg | 3 +
.../public/images/themes/default/txt.svg | 3 +
.../public/images/themes/default/vid.svg | 3 +
.../_h5ai/public/images/themes/default/x.svg | 3 +
.../root/srv/_h5ai/public/images/ui/back.svg | 3 +
.../root/srv/_h5ai/public/images/ui/crumb.svg | 3 +
.../srv/_h5ai/public/images/ui/download.svg | 3 +
.../srv/_h5ai/public/images/ui/filter.svg | 5 +
.../_h5ai/public/images/ui/info-toggle.svg | 3 +
.../srv/_h5ai/public/images/ui/paypal.svg | 6 +
.../_h5ai/public/images/ui/preview-close.svg | 3 +
.../public/images/ui/preview-fullscreen.svg | 3 +
.../_h5ai/public/images/ui/preview-next.svg | 3 +
.../images/ui/preview-no-fullscreen.svg | 3 +
.../_h5ai/public/images/ui/preview-prev.svg | 3 +
.../_h5ai/public/images/ui/preview-raw.svg | 3 +
.../srv/_h5ai/public/images/ui/search.svg | 5 +
.../srv/_h5ai/public/images/ui/selected.svg | 3 +
.../srv/_h5ai/public/images/ui/sidebar.svg | 3 +
.../root/srv/_h5ai/public/images/ui/sort.svg | 3 +
.../srv/_h5ai/public/images/ui/spinner.svg | 6 +
.../_h5ai/public/images/ui/tree-indicator.svg | 3 +
.../_h5ai/public/images/ui/tree-toggle.svg | 3 +
.../_h5ai/public/images/ui/view-details.svg | 3 +
.../srv/_h5ai/public/images/ui/view-grid.svg | 3 +
.../srv/_h5ai/public/images/ui/view-icons.svg | 3 +
.../srv-http/root/srv/_h5ai/public/index.php | 17 +
.../root/srv/_h5ai/public/js/scripts.js | 5 +
123 files changed, 4082 insertions(+), 3 deletions(-)
create mode 100644 container/srv-http/root/srv/.htaccess
create mode 100644 container/srv-http/root/srv/_h5ai/.htaccess
create mode 100644 container/srv-http/root/srv/_h5ai/CHANGELOG.md
create mode 100644 container/srv-http/root/srv/_h5ai/README.md
create mode 100755 container/srv-http/root/srv/_h5ai/private/cache/README.md
create mode 100755 container/srv-http/root/srv/_h5ai/private/conf/l10n/af.json
create mode 100755 container/srv-http/root/srv/_h5ai/private/conf/l10n/bg.json
create mode 100755 container/srv-http/root/srv/_h5ai/private/conf/l10n/cs.json
create mode 100755 container/srv-http/root/srv/_h5ai/private/conf/l10n/da.json
create mode 100755 container/srv-http/root/srv/_h5ai/private/conf/l10n/de.json
create mode 100755 container/srv-http/root/srv/_h5ai/private/conf/l10n/el.json
create mode 100755 container/srv-http/root/srv/_h5ai/private/conf/l10n/en.json
create mode 100755 container/srv-http/root/srv/_h5ai/private/conf/l10n/es.json
create mode 100755 container/srv-http/root/srv/_h5ai/private/conf/l10n/et.json
create mode 100755 container/srv-http/root/srv/_h5ai/private/conf/l10n/fi.json
create mode 100755 container/srv-http/root/srv/_h5ai/private/conf/l10n/fr.json
create mode 100755 container/srv-http/root/srv/_h5ai/private/conf/l10n/he.json
create mode 100755 container/srv-http/root/srv/_h5ai/private/conf/l10n/hi.json
create mode 100755 container/srv-http/root/srv/_h5ai/private/conf/l10n/hr.json
create mode 100755 container/srv-http/root/srv/_h5ai/private/conf/l10n/hu.json
create mode 100755 container/srv-http/root/srv/_h5ai/private/conf/l10n/it.json
create mode 100755 container/srv-http/root/srv/_h5ai/private/conf/l10n/ja.json
create mode 100755 container/srv-http/root/srv/_h5ai/private/conf/l10n/ko.json
create mode 100755 container/srv-http/root/srv/_h5ai/private/conf/l10n/lv.json
create mode 100755 container/srv-http/root/srv/_h5ai/private/conf/l10n/nb.json
create mode 100755 container/srv-http/root/srv/_h5ai/private/conf/l10n/nl.json
create mode 100755 container/srv-http/root/srv/_h5ai/private/conf/l10n/pl.json
create mode 100755 container/srv-http/root/srv/_h5ai/private/conf/l10n/pt.json
create mode 100755 container/srv-http/root/srv/_h5ai/private/conf/l10n/ro.json
create mode 100755 container/srv-http/root/srv/_h5ai/private/conf/l10n/ru.json
create mode 100755 container/srv-http/root/srv/_h5ai/private/conf/l10n/sk.json
create mode 100755 container/srv-http/root/srv/_h5ai/private/conf/l10n/sl.json
create mode 100755 container/srv-http/root/srv/_h5ai/private/conf/l10n/sr.json
create mode 100755 container/srv-http/root/srv/_h5ai/private/conf/l10n/sv.json
create mode 100755 container/srv-http/root/srv/_h5ai/private/conf/l10n/tr.json
create mode 100755 container/srv-http/root/srv/_h5ai/private/conf/l10n/uk.json
create mode 100755 container/srv-http/root/srv/_h5ai/private/conf/l10n/zh-cn.json
create mode 100755 container/srv-http/root/srv/_h5ai/private/conf/l10n/zh-tw.json
create mode 100755 container/srv-http/root/srv/_h5ai/private/conf/options.json
create mode 100755 container/srv-http/root/srv/_h5ai/private/conf/types.json
create mode 100755 container/srv-http/root/srv/_h5ai/private/php/class-bootstrap.php
create mode 100755 container/srv-http/root/srv/_h5ai/private/php/core/class-api.php
create mode 100755 container/srv-http/root/srv/_h5ai/private/php/core/class-context.php
create mode 100755 container/srv-http/root/srv/_h5ai/private/php/core/class-fallback.php
create mode 100755 container/srv-http/root/srv/_h5ai/private/php/core/class-filesize.php
create mode 100755 container/srv-http/root/srv/_h5ai/private/php/core/class-item.php
create mode 100755 container/srv-http/root/srv/_h5ai/private/php/core/class-json.php
create mode 100755 container/srv-http/root/srv/_h5ai/private/php/core/class-logger.php
create mode 100755 container/srv-http/root/srv/_h5ai/private/php/core/class-request.php
create mode 100755 container/srv-http/root/srv/_h5ai/private/php/core/class-session.php
create mode 100755 container/srv-http/root/srv/_h5ai/private/php/core/class-setup.php
create mode 100755 container/srv-http/root/srv/_h5ai/private/php/core/class-theme.php
create mode 100755 container/srv-http/root/srv/_h5ai/private/php/core/class-util.php
create mode 100755 container/srv-http/root/srv/_h5ai/private/php/ext/class-archive.php
create mode 100755 container/srv-http/root/srv/_h5ai/private/php/ext/class-custom.php
create mode 100755 container/srv-http/root/srv/_h5ai/private/php/ext/class-search.php
create mode 100755 container/srv-http/root/srv/_h5ai/private/php/ext/class-thumb.php
create mode 100755 container/srv-http/root/srv/_h5ai/private/php/pages/index.php
create mode 100755 container/srv-http/root/srv/_h5ai/private/php/pages/info.php
create mode 100755 container/srv-http/root/srv/_h5ai/public/.htaccess
create mode 100755 container/srv-http/root/srv/_h5ai/public/cache/README.md
create mode 100755 container/srv-http/root/srv/_h5ai/public/css/styles.css
create mode 100755 container/srv-http/root/srv/_h5ai/public/ext/README.md
create mode 100755 container/srv-http/root/srv/_h5ai/public/images/fallback/file.png
create mode 100755 container/srv-http/root/srv/_h5ai/public/images/fallback/folder-parent.png
create mode 100755 container/srv-http/root/srv/_h5ai/public/images/fallback/folder.png
create mode 100755 container/srv-http/root/srv/_h5ai/public/images/favicon/favicon-152.png
create mode 100755 container/srv-http/root/srv/_h5ai/public/images/favicon/favicon-16-32.ico
create mode 100755 container/srv-http/root/srv/_h5ai/public/images/favicon/favicon-16.png
create mode 100755 container/srv-http/root/srv/_h5ai/public/images/favicon/favicon-32.png
create mode 100755 container/srv-http/root/srv/_h5ai/public/images/favicon/favicon.svg
create mode 100755 container/srv-http/root/srv/_h5ai/public/images/themes/README.md
create mode 100755 container/srv-http/root/srv/_h5ai/public/images/themes/comity/ar-apk.svg
create mode 100755 container/srv-http/root/srv/_h5ai/public/images/themes/comity/ar-deb.svg
create mode 100755 container/srv-http/root/srv/_h5ai/public/images/themes/comity/ar-rpm.svg
create mode 100755 container/srv-http/root/srv/_h5ai/public/images/themes/comity/txt-css.svg
create mode 100755 container/srv-http/root/srv/_h5ai/public/images/themes/comity/txt-go.svg
create mode 100755 container/srv-http/root/srv/_h5ai/public/images/themes/comity/txt-html.svg
create mode 100755 container/srv-http/root/srv/_h5ai/public/images/themes/comity/txt-js.svg
create mode 100755 container/srv-http/root/srv/_h5ai/public/images/themes/comity/txt-less.svg
create mode 100755 container/srv-http/root/srv/_h5ai/public/images/themes/comity/txt-md.svg
create mode 100755 container/srv-http/root/srv/_h5ai/public/images/themes/comity/txt-php.svg
create mode 100755 container/srv-http/root/srv/_h5ai/public/images/themes/comity/txt-py.svg
create mode 100755 container/srv-http/root/srv/_h5ai/public/images/themes/comity/txt-rb.svg
create mode 100755 container/srv-http/root/srv/_h5ai/public/images/themes/comity/txt-rust.svg
create mode 100755 container/srv-http/root/srv/_h5ai/public/images/themes/comity/txt-script.svg
create mode 100755 container/srv-http/root/srv/_h5ai/public/images/themes/comity/x-pdf.svg
create mode 100755 container/srv-http/root/srv/_h5ai/public/images/themes/default/ar.svg
create mode 100755 container/srv-http/root/srv/_h5ai/public/images/themes/default/aud.svg
create mode 100755 container/srv-http/root/srv/_h5ai/public/images/themes/default/bin.svg
create mode 100755 container/srv-http/root/srv/_h5ai/public/images/themes/default/file.svg
create mode 100755 container/srv-http/root/srv/_h5ai/public/images/themes/default/folder-page.svg
create mode 100755 container/srv-http/root/srv/_h5ai/public/images/themes/default/folder-parent.svg
create mode 100755 container/srv-http/root/srv/_h5ai/public/images/themes/default/folder.svg
create mode 100755 container/srv-http/root/srv/_h5ai/public/images/themes/default/img.svg
create mode 100755 container/srv-http/root/srv/_h5ai/public/images/themes/default/txt.svg
create mode 100755 container/srv-http/root/srv/_h5ai/public/images/themes/default/vid.svg
create mode 100755 container/srv-http/root/srv/_h5ai/public/images/themes/default/x.svg
create mode 100755 container/srv-http/root/srv/_h5ai/public/images/ui/back.svg
create mode 100755 container/srv-http/root/srv/_h5ai/public/images/ui/crumb.svg
create mode 100755 container/srv-http/root/srv/_h5ai/public/images/ui/download.svg
create mode 100755 container/srv-http/root/srv/_h5ai/public/images/ui/filter.svg
create mode 100755 container/srv-http/root/srv/_h5ai/public/images/ui/info-toggle.svg
create mode 100755 container/srv-http/root/srv/_h5ai/public/images/ui/paypal.svg
create mode 100755 container/srv-http/root/srv/_h5ai/public/images/ui/preview-close.svg
create mode 100755 container/srv-http/root/srv/_h5ai/public/images/ui/preview-fullscreen.svg
create mode 100755 container/srv-http/root/srv/_h5ai/public/images/ui/preview-next.svg
create mode 100755 container/srv-http/root/srv/_h5ai/public/images/ui/preview-no-fullscreen.svg
create mode 100755 container/srv-http/root/srv/_h5ai/public/images/ui/preview-prev.svg
create mode 100755 container/srv-http/root/srv/_h5ai/public/images/ui/preview-raw.svg
create mode 100755 container/srv-http/root/srv/_h5ai/public/images/ui/search.svg
create mode 100755 container/srv-http/root/srv/_h5ai/public/images/ui/selected.svg
create mode 100755 container/srv-http/root/srv/_h5ai/public/images/ui/sidebar.svg
create mode 100755 container/srv-http/root/srv/_h5ai/public/images/ui/sort.svg
create mode 100755 container/srv-http/root/srv/_h5ai/public/images/ui/spinner.svg
create mode 100755 container/srv-http/root/srv/_h5ai/public/images/ui/tree-indicator.svg
create mode 100755 container/srv-http/root/srv/_h5ai/public/images/ui/tree-toggle.svg
create mode 100755 container/srv-http/root/srv/_h5ai/public/images/ui/view-details.svg
create mode 100755 container/srv-http/root/srv/_h5ai/public/images/ui/view-grid.svg
create mode 100755 container/srv-http/root/srv/_h5ai/public/images/ui/view-icons.svg
create mode 100755 container/srv-http/root/srv/_h5ai/public/index.php
create mode 100755 container/srv-http/root/srv/_h5ai/public/js/scripts.js
diff --git a/container/srv-http/root/etc/nginx/conf.d/default.conf b/container/srv-http/root/etc/nginx/conf.d/default.conf
index 676418a..646eee3 100644
--- a/container/srv-http/root/etc/nginx/conf.d/default.conf
+++ b/container/srv-http/root/etc/nginx/conf.d/default.conf
@@ -3,8 +3,8 @@ server {
server_name "srv-http";
server_tokens off;
- root /usr/share/nginx/html;
- index index.html;
+ root /srv;
+ index index.html index.php /_h5ai/public/index.php;
charset utf-8,gbk;
@@ -24,7 +24,6 @@ server {
autoindex on;
autoindex_localtime on;
allow all;
- root /srv;
location ~* /[-_a-z]+$ {
add_header Content-Type text/plain;
}
diff --git a/container/srv-http/root/srv/.htaccess b/container/srv-http/root/srv/.htaccess
new file mode 100644
index 0000000..95e775b
--- /dev/null
+++ b/container/srv-http/root/srv/.htaccess
@@ -0,0 +1,165 @@
+## details here: https://github.com/h5bp/server-configs-apache
+
+
+
+## SECURITY ###################################################################
+
+DirectoryIndex disabled
+FileETag None
+ServerSignature Off
+
+# Apache < 2.3
+<IfModule !mod_authz_core.c>
+ Order allow,deny
+ Deny from all
+ Satisfy All
+</IfModule>
+
+# Apache ≥ 2.3
+<IfModule mod_authz_core.c>
+ Require all denied
+</IfModule>
+
+<IfModule mod_headers.c>
+ Header set X-Content-Type-Options "nosniff"
+ Header unset ETag
+ Header unset X-Powered-By
+</IfModule>
+
+<IfModule mod_autoindex.c>
+ Options -Indexes
+</IfModule>
+
+
+
+## COMPAT #####################################################################
+
+AddDefaultCharset utf-8
+
+<IfModule mod_mime.c>
+ AddCharset utf-8 .css .html .js .json .php .svg
+
+ AddType application/font-woff woff
+ AddType application/font-woff2 woff2
+ AddType application/json json
+ AddType application/javascript js
+ AddType application/vnd.ms-fontobject eot
+ AddType application/x-font-ttf ttc ttf
+ AddType image/jpeg jpeg jpg
+ AddType image/png png
+ AddType image/svg+xml svg svgz
+ AddType image/x-icon ico
+ AddType font/opentype otf
+ AddType text/css css
+ AddType text/html html
+</IfModule>
+
+
+
+## SPEED ######################################################################
+
+<IfModule mod_expires.c>
+ ExpiresActive on
+ ExpiresDefault "access plus 1 month"
+
+ ExpiresByType application/json "access plus 0 seconds"
+
+ ExpiresByType text/html "access plus 1 minute"
+
+ ExpiresByType image/x-icon "access plus 1 week"
+
+ ExpiresByType application/javascript "access plus 1 year"
+ ExpiresByType image/jpeg "access plus 1 year"
+ ExpiresByType image/png "access plus 1 year"
+ ExpiresByType image/svg+xml "access plus 1 year"
+ ExpiresByType text/css "access plus 1 year"
+</IfModule>
+
+<IfModule mod_deflate.c>
+ <IfModule mod_setenvif.c>
+ <IfModule mod_headers.c>
+ SetEnvIfNoCase ^(Accept-EncodXng|X-cept-Encoding|X{15}|~{15}|-{15})$ ^((gzip|deflate)\s*,?\s*)+|[X~-]{4,13}$ HAVE_Accept-Encoding
+ RequestHeader append Accept-Encoding "gzip,deflate" env=HAVE_Accept-Encoding
+ </IfModule>
+ </IfModule>
+
+ # Apache ≥ 2.3
+ <IfModule mod_authz_core.c>
+ # mod_filter as module only available for Apache ≥ 2.3.7
+ <IfModule mod_filter.c>
+ AddOutputFilterByType DEFLATE "application/atom+xml" \
+ "application/javascript" \
+ "application/json" \
+ "application/ld+json" \
+ "application/manifest+json" \
+ "application/rdf+xml" \
+ "application/rss+xml" \
+ "application/schema+json" \
+ "application/vnd.geo+json" \
+ "application/vnd.ms-fontobject" \
+ "application/x-font-ttf" \
+ "application/x-javascript" \
+ "application/x-web-app-manifest+json" \
+ "application/xhtml+xml" \
+ "application/xml" \
+ "font/eot" \
+ "font/opentype" \
+ "image/bmp" \
+ "image/svg+xml" \
+ "image/vnd.microsoft.icon" \
+ "image/x-icon" \
+ "text/cache-manifest" \
+ "text/css" \
+ "text/html" \
+ "text/javascript" \
+ "text/plain" \
+ "text/vcard" \
+ "text/vnd.rim.location.xloc" \
+ "text/vtt" \
+ "text/x-component" \
+ "text/x-cross-domain-policy" \
+ "text/xml"
+ </IfModule>
+ </IfModule>
+
+ # Apache < 2.3
+ <IfModule !mod_authz_core.c>
+ AddOutputFilterByType DEFLATE "application/atom+xml" \
+ "application/javascript" \
+ "application/json" \
+ "application/ld+json" \
+ "application/manifest+json" \
+ "application/rdf+xml" \
+ "application/rss+xml" \
+ "application/schema+json" \
+ "application/vnd.geo+json" \
+ "application/vnd.ms-fontobject" \
+ "application/x-font-ttf" \
+ "application/x-javascript" \
+ "application/x-web-app-manifest+json" \
+ "application/xhtml+xml" \
+ "application/xml" \
+ "font/eot" \
+ "font/opentype" \
+ "image/bmp" \
+ "image/svg+xml" \
+ "image/vnd.microsoft.icon" \
+ "image/x-icon" \
+ "text/cache-manifest" \
+ "text/css" \
+ "text/html" \
+ "text/javascript" \
+ "text/plain" \
+ "text/vcard" \
+ "text/vnd.rim.location.xloc" \
+ "text/vtt" \
+ "text/x-component" \
+ "text/x-cross-domain-policy" \
+ "text/xml"
+ </IfModule>
+
+ <IfModule mod_mime.c>
+ AddEncoding gzip gz
+ AddEncoding gzip svgz
+ </IfModule>
+</IfModule>
diff --git a/container/srv-http/root/srv/_h5ai/.htaccess b/container/srv-http/root/srv/_h5ai/.htaccess
new file mode 100644
index 0000000..95e775b
--- /dev/null
+++ b/container/srv-http/root/srv/_h5ai/.htaccess
@@ -0,0 +1,165 @@
+## details here: https://github.com/h5bp/server-configs-apache
+
+
+
+## SECURITY ###################################################################
+
+DirectoryIndex disabled
+FileETag None
+ServerSignature Off
+
+# Apache < 2.3
+<IfModule !mod_authz_core.c>
+ Order allow,deny
+ Deny from all
+ Satisfy All
+</IfModule>
+
+# Apache ≥ 2.3
+<IfModule mod_authz_core.c>
+ Require all denied
+</IfModule>
+
+<IfModule mod_headers.c>
+ Header set X-Content-Type-Options "nosniff"
+ Header unset ETag
+ Header unset X-Powered-By
+</IfModule>
+
+<IfModule mod_autoindex.c>
+ Options -Indexes
+</IfModule>
+
+
+
+## COMPAT #####################################################################
+
+AddDefaultCharset utf-8
+
+<IfModule mod_mime.c>
+ AddCharset utf-8 .css .html .js .json .php .svg
+
+ AddType application/font-woff woff
+ AddType application/font-woff2 woff2
+ AddType application/json json
+ AddType application/javascript js
+ AddType application/vnd.ms-fontobject eot
+ AddType application/x-font-ttf ttc ttf
+ AddType image/jpeg jpeg jpg
+ AddType image/png png
+ AddType image/svg+xml svg svgz
+ AddType image/x-icon ico
+ AddType font/opentype otf
+ AddType text/css css
+ AddType text/html html
+</IfModule>
+
+
+
+## SPEED ######################################################################
+
+<IfModule mod_expires.c>
+ ExpiresActive on
+ ExpiresDefault "access plus 1 month"
+
+ ExpiresByType application/json "access plus 0 seconds"
+
+ ExpiresByType text/html "access plus 1 minute"
+
+ ExpiresByType image/x-icon "access plus 1 week"
+
+ ExpiresByType application/javascript "access plus 1 year"
+ ExpiresByType image/jpeg "access plus 1 year"
+ ExpiresByType image/png "access plus 1 year"
+ ExpiresByType image/svg+xml "access plus 1 year"
+ ExpiresByType text/css "access plus 1 year"
+</IfModule>
+
+<IfModule mod_deflate.c>
+ <IfModule mod_setenvif.c>
+ <IfModule mod_headers.c>
+ SetEnvIfNoCase ^(Accept-EncodXng|X-cept-Encoding|X{15}|~{15}|-{15})$ ^((gzip|deflate)\s*,?\s*)+|[X~-]{4,13}$ HAVE_Accept-Encoding
+ RequestHeader append Accept-Encoding "gzip,deflate" env=HAVE_Accept-Encoding
+ </IfModule>
+ </IfModule>
+
+ # Apache ≥ 2.3
+ <IfModule mod_authz_core.c>
+ # mod_filter as module only available for Apache ≥ 2.3.7
+ <IfModule mod_filter.c>
+ AddOutputFilterByType DEFLATE "application/atom+xml" \
+ "application/javascript" \
+ "application/json" \
+ "application/ld+json" \
+ "application/manifest+json" \
+ "application/rdf+xml" \
+ "application/rss+xml" \
+ "application/schema+json" \
+ "application/vnd.geo+json" \
+ "application/vnd.ms-fontobject" \
+ "application/x-font-ttf" \
+ "application/x-javascript" \
+ "application/x-web-app-manifest+json" \
+ "application/xhtml+xml" \
+ "application/xml" \
+ "font/eot" \
+ "font/opentype" \
+ "image/bmp" \
+ "image/svg+xml" \
+ "image/vnd.microsoft.icon" \
+ "image/x-icon" \
+ "text/cache-manifest" \
+ "text/css" \
+ "text/html" \
+ "text/javascript" \
+ "text/plain" \
+ "text/vcard" \
+ "text/vnd.rim.location.xloc" \
+ "text/vtt" \
+ "text/x-component" \
+ "text/x-cross-domain-policy" \
+ "text/xml"
+ </IfModule>
+ </IfModule>
+
+ # Apache < 2.3
+ <IfModule !mod_authz_core.c>
+ AddOutputFilterByType DEFLATE "application/atom+xml" \
+ "application/javascript" \
+ "application/json" \
+ "application/ld+json" \
+ "application/manifest+json" \
+ "application/rdf+xml" \
+ "application/rss+xml" \
+ "application/schema+json" \
+ "application/vnd.geo+json" \
+ "application/vnd.ms-fontobject" \
+ "application/x-font-ttf" \
+ "application/x-javascript" \
+ "application/x-web-app-manifest+json" \
+ "application/xhtml+xml" \
+ "application/xml" \
+ "font/eot" \
+ "font/opentype" \
+ "image/bmp" \
+ "image/svg+xml" \
+ "image/vnd.microsoft.icon" \
+ "image/x-icon" \
+ "text/cache-manifest" \
+ "text/css" \
+ "text/html" \
+ "text/javascript" \
+ "text/plain" \
+ "text/vcard" \
+ "text/vnd.rim.location.xloc" \
+ "text/vtt" \
+ "text/x-component" \
+ "text/x-cross-domain-policy" \
+ "text/xml"
+ </IfModule>
+
+ <IfModule mod_mime.c>
+ AddEncoding gzip gz
+ AddEncoding gzip svgz
+ </IfModule>
+</IfModule>
diff --git a/container/srv-http/root/srv/_h5ai/CHANGELOG.md b/container/srv-http/root/srv/_h5ai/CHANGELOG.md
new file mode 100644
index 0000000..b575191
--- /dev/null
+++ b/container/srv-http/root/srv/_h5ai/CHANGELOG.md
@@ -0,0 +1,598 @@
+# Changelog
+
+
+## v0.29.2 - *2019-03-22*
+
+* update `babel-loader` to 7.1.1
+* update `eslint` to 5.15.3
+* update `ghu` to 0.13.0
+* update `jsdom` to 14.0.0
+* update `kjua` to 0.2.0
+* update `lolight` to 1.0.0
+* update `scar` to 1.2.0
+
+
+## v0.29.1 - *2019-01-20*
+
+* replace `babel-preset-es2015` with `babel-preset-env`
+* update `eslint` to 5.14.1
+* update `ghu` to 0.12.0
+* update `jsdom` to 9.2.0
+* update `kjua` to 0.1.2
+* update `lolight` to 0.6.0
+* update `marked` to 0.6.1
+* update `normalize.css` to 8.0.1
+* update `scar` to 1.0.0
+
+
+## v0.29.0 - *2016-08-12*
+
+* back to cleaner visual experience
+* add option to disable sidebar
+* add options to filter/search ignore case
+* replace PHP `getenv` calls with `$_SERVER` lookups
+* add `view.fallbackMode` option to generally serve only fallback mode
+* serve fallback mode for text browsers (`curl`, `links`, `lynx`, `w3m`)
+* change type `txt-svg` to `img-svg`, no thumbs but preview
+* fix a tree indentation glitch
+* fix shell command detection on Windows
+* fix Piwik anayltics
+* fix `.htaccess` auth issues
+* fix drag-select on scrollable content
+* fix download-all function
+* fix audio and video preview loading
+* fix thumbnail request issues
+* add `rust` type and icon
+* add `autoplay` option to audio and video preview
+* add `--dereference` to `shell-du` to follow sym links
+* remove *Install* section from `README.md`, causes too much trouble
+* remove peer5 support
+* update build process to use `node 6.0+`, no need for babel now
+* replace `jquery-qrcode` with [`kjua`](https://larsjung.de/kjua/)
+* replace `prism` with [`lolight`](https://larsjung.de/lolight/)
+* move deps to `package.json` (`normalize.css`, `kjua`, `lolight` and `marked`)
+* remove `jQuery`
+* remove `lodash`
+* remove [`modulejs`](https://larsjung.de/modulejs/) for now
+* reduce JS code by 60% (~250kb -> ~100kb)
+* update languages (`et`, `nl`, `pl`)
+
+
+## v0.28.0 - *2015-12-19*
+
+* now require PHP 5.5.0+
+* change index path to `/_h5ai/public/index.php`
+* now only `/_h5ai/public/` needs to be web-accessible
+* add support for custom script and style additions
+* add options to set font families
+* add search
+* add ignorecase sorting option to tree
+* add wide links in tree view
+* add IE edge mode
+* add frontend tests
+* fix some styles in IE10
+* fix preview bottom bar for small screen widths
+* lots of code cleanup and refactorings
+* change API
+* update build process, now uses [`ghu`](https://larsjung.de/ghu/)
+* switch from jshint and jscs to [`eslint`](http://eslint.org/)
+* update `jQuery` to 2.1.4
+* update `lodash` to 3.9.3 (add debounce and trim)
+* update `marked` to 0.3.5
+* update `modulejs` to 1.13.0
+* update `prism` to 2015-12-19
+* update h5bp styles to 5.2.0
+* update `normalize.css` to 3.0.3
+* remove `Moment.js`
+
+
+## v0.27.0 - *2015-04-06*
+
+* new layout
+* add editorconfig
+* drop support for IE9 (gets fallback)
+* update sidebar settings
+* add info sidebar
+* add opt-out for click'n'drag selection
+* add package name option for single selections
+* add initial support for Peer5
+* add option to down-sample images for preview
+* add option for natural sorting in tree sidebar
+* fix problems with files/folders named `0`
+* change font from `Ubuntu` to `Roboto` (smaller footprint, clearer for small sizes)
+* switch back to Google Fonts
+* improve PDF thumbnail quality
+* improve drag-select
+* improve image preview
+* prevent listing `_h5ai` folder and subfolders
+* update build process, now uses [`mkr`](https://larsjung.de/mkr/) and [`fQuery`](https://larsjung.de/fquery/)
+* update `jQuery` to 2.1.3
+* update `jQuery.qrcode` to 0.11.0
+* update `Lo-Dash` to 3.6.0
+* update `Modernizr` to 2.8.3
+* update `modulejs` to 1.4.0
+* update `Moment.js` to 2.9.0
+* update `Prism` to 2015-04-05
+* remove deprecated Google Analytics code
+* remove `jQuery.fracs`
+* remove `jQuery.scrollpanel`
+* remove `jQuery.mousewheel`
+* update languages (`af`, `es`, `ja`, `ko`, `ru`, `zh-cn`)
+
+
+## v0.26.1 - *2014-08-17*
+
+* fix links
+
+
+## v0.26.0 - *2014-08-16*
+
+* remove True Type fonts
+* outsource themes to [h5ai-themes](https://github.com/lrsjng/h5ai-themes)
+* add filesize fallback for large files and 32bit PHP
+* fix server detection
+* add config file tests to info page
+* remove JSON shim
+* add caching of command checks
+* update `jQuery.mousewheel` to 3.1.12
+* update `jQuery.qrcode` to 0.8.0
+* replace `markdown` with [`marked`](https://github.com/chjj/marked) 0.3.2
+* update `modulejs` to 0.4.5
+* update `Moment.js` to 2.8.1
+* replace `underscore` with [`Lo-Dash`](https://github.com/lodash/lodash) 2.4.1
+* replace `SyntaxHighlighter` with [`Prism`](http://prismjs.com) 2014-08-04
+
+
+## v0.25.2 - *2014-07-01*
+
+* add optional info page protection
+* fix `short_open_tag` issues for PHP < 5.4.0
+* fix default folder download (`alwaysVisible` option)
+* minor fixes
+
+
+## v0.25.1 - *2014-06-25*
+
+* fix broken paths for filenames containing '+' characters
+* fix Google Universal Analytics
+* fix file type check
+
+
+## v0.25.0 - *2014-06-22*
+
+* add sidebar
+* add initial theme support
+* add icons from [Evolvere Icon Theme](http://franksouza183.deviantart.com/art/Evolvere-Icon-theme-44071829…
+* add PHP variant to calc folder sizes
+* add scroll position reset on location change (issue [#279](https://github.com/lrsjng/h5ai/issues/279))
+* add option to hide unreadable files
+* add option where to place folders (top, inplace, bottom)
+* add markdown support for custom header and footer files
+* add video and audio preview via HTML5 elements (no fallback, works best in Chrome)
+* add filter reset on location change
+* add option to make download button always visible
+* add Google UA support
+* extend selectable icon sizes (add 128px, 192px, 256px, 384px)
+* improve preview GUI
+* disable thumbs in `cache` folder
+* fix QR code URI origin (issue [#287](https://github.com/lrsjng/h5ai/issues/287))
+* replace PHP backtick operator with `exec`
+* remove server side file manipulation extensions `dropbox`, `delete` and `rename`
+* update `H5BP` to 4.3.0
+* update `jQuery` to 2.1.1
+* update `json2.js` to 2014-02-04
+* update `markdown-js` to 0.5.0
+* update `Modernizr` to 2.8.2
+* update `Moment.js` to 2.6.0
+* update `Underscore.js` to 1.6.0
+* update languages (`bg`, `ko`, `pt`, `sl`, `sv`, `zh-cn`)
+
+
+## v0.24.1 - *2014-04-09*
+
+* security fixes! (issues [#268](https://github.com/lrsjng/h5ai/issues/268), [#269](https://github.com/lrsjng/h5ai/issues/269))
+* fix WinOS command detection
+* update languages (`fi`, `fr`, `hi`, `it`, `zh-tw`)
+
+
+## v0.24.0 - *2013-09-04*
+
+* updates image and text preview
+* adds variable icon sizes
+* adds optional natural sort of items
+* adds optional checkboxes to select items
+* adds text preview modes: none, fixed, markdown
+* optionally hide folders in main view
+* makes use of EXIF thumbnails optional
+* fixes file deletion of multiple files
+* fixes `setParentFolderLabels = false`
+* fixes shell-arg and RegExp escape issues
+* cleans code
+* updates info page `/_h5ai`
+* adds `aiff` to `audio` types
+* adds `da` translation by Ronnie Milbo
+* updates to `pl` translation by Mark
+
+
+## v0.23.0 - *2013-07-21*
+
+* removes `aai` mode!
+* drops support for IE7+8 (simple fallback, same as no javascript)
+* uses History API if available (way faster browsing)
+* faster thumbnail generation if EXIF thumbnails available
+* adds optional custom headers/footers that are propageted to all subfolders
+* optional hide parent folder links
+* some fixes on previews
+* speeds up packaged downloads
+* add line wrap and line highlighting (on hover) to text preview
+* new design (colors, images)
+* now uses scalable images for the interface
+* fixes filter (ignore parent folder, display of `no match`)
+* lots of small fixes
+* updates `H5BP` to 4.2.0
+* updates `jQuery` to 2.0.3
+* updates `jQuery.mousewheel` to 3.1.3
+* updates `Moment.js` to 2.1.0
+* updates `markdown-js` to 0.4.0-9c21acdf08
+* updates `json2.js` to 2013-05-26
+* adds `uk` translation by Viktor Matveenko
+* updates to `pl` translation by Mark
+
+
+## v0.22.1 - *2012-10-16*
+
+* bug fix concerning API requests in PHP mode
+* minor changes in responsive styles
+
+
+## v0.22 - *2012-10-14*
+
+* general changes h5ai directory layout and configuration
+* splits configuration file (`config.json`) into files `options.json`, `types.json` and `langs.json`
+* localization now in separate files
+* adds auto-refresh
+* adds drag'n'drop upload (PHP, experimental)
+* adds file deletion (PHP, experimental)
+* cleans and improves PHP code
+* PHP no longer respects htaccess restrictions (so be careful)
+* PHP ignore patterns might include paths now
+* improves separation between aai and php mode
+* improves performance in aai mode
+* adds optional binary prefixes for file sizes
+* improves filter: autofocus on keypress, clear on `ESC`
+* download packages now packaged relative to current folder
+* download package name changable
+* splits type `js` into `js` and `json`
+* prevents some errors with files > 2GB on 32bit OS
+* adds max subfolder size in tree view
+* adds ctrl-click file selection
+* adds Piwik analytics extension
+* temp download packages are now stored in the `cache`-folder and deleted as soon as possible
+* updates translations
+* adds `he` translation by [Tomer Cohen](https://github.com/tomer)
+* updates 3rd party libs
+
+
+## v0.21 - *2012-08-06*
+
+* fixes misaligned image previews
+* adds no JavaScript fallback to PHP version
+* fixes duplicate tree entries and empty main views
+* adds Google Analytics support (async)
+* improves filter (now ignorecase, now only checks if chars in right order)
+* adds keyboard support to image preview (space, enter, backspace, left, right, up, down, f, esc)
+* adds text file preview and highlighting with [SyntaxHighlighter](http://alexgorbatchev.com/SyntaxHighlighter/) (same keys as img preview)
+* adds Markdown preview with [markdown-js](https://github.com/evilstreak/markdown-js)
+* adds new type `markdown`
+* changes language code `gr` to `el`
+* adds localization for filter placeholder
+* adds `hu` translation by [Rodolffo](https://github.com/Rodolffo)
+* updates to [jQuery.qrcode](https://larsjung.de/qrcode/) 0.2
+* updates to [jQuery.scrollpanel](https://larsjung.de/scrollpanel/) 0.1
+* updates to [modulejs](https://larsjung.de/modulejs/) 0.2
+* updates to [Moment.js](http://momentjs.com) 1.7.0
+* updates to [Underscore.js](http://underscorejs.org) 1.3.3
+
+
+## v0.20 - *2012-05-11*
+
+* adds image preview
+* adds thumbnails for video and pdf
+* adds support for lighttpd, nginx and cherokee and maybe other webservers with PHP
+* adds folder size in PHP version via shell `du`
+* fixes some localization problems
+* updates info page at `/_h5ai/`
+* switches to JSHint
+
+
+## v0.19 - *2012-04-19*
+
+* adds lots of config options
+* changes in `config.js` and `h5ai.htaccess`
+* fixes js problems in IE 7+8
+* hides broken tree view in IE < 9, adds a message to the footer
+* removes hash changes since they break logical browser history
+* fixes thumbnail size for portrait images in icon view
+* fixes problems with file type recognition
+* adds an info page at `/_h5ai/`
+* sort order is preserved while browsing
+* removes PHP error messages on thumbnail generation
+* fixes PHP some problems with packed download
+* adds support for tarred downloads
+* changes crumb image for folders with an index file
+* adds `index.php` to use h5ai in non-Apache environments
+* switches from [Datejs](http://www.datejs.com) to [Moment.js](http://momentjs.com)
+* adds [underscore.js](http://underscorejs.org)
+* fixes mousewheel problems, updates [jQuery.mousewheel](https://github.com/brandonaaron/jquery-mousewheel) to 3.0.6
+* updates `lv` translation
+* adds `ro` translation by [Jakob Cosoroabă](https://github.com/midday)
+* adds `ja` translation by [metasta](https://github.com/metasta)
+* adds `nb` translation by [Sindre Sorhus](https://github.com/sindresorhus)
+* adds `sr` translation by [vBm](https://github.com/vBm)
+* adds `gr` translation by [xhmikosr](https://github.com/xhmikosr)
+
+
+## v0.18 - *2012-02-24*
+
+* adds optional QRCode display
+* adds optional filtering for displayed files and folders
+* updates design
+* improves zipped download
+* adds support for zipped download of htaccess restricted files
+* changes h5ai.htaccess
+* custom headers/footers are now optional and disabled by default
+* fixes problems with folder recognition in the JS version
+* fixes include problems in PHP version
+* fixes path problems on servers running on Windows in PHP version
+* fixes broken links in custom headers/footers while zipped download enabled
+* fixes problems with thumbnails for files with single or double quotes in filename
+* improves url hashes
+* updates year in `LICENSE.TXT`
+* updates es translation
+* adds `zh-tw` translation by [Yao Wei](https://github.com/medicalwei)
+* updates `zh-cn` translation
+
+
+## v0.17 - *2011-11-28*
+
+* h5ai is now located in `_h5ai` to reduce collisions
+* switches from HTML5 Boilerplate reset to normalization
+* adds some style changes for small devices
+* configuration (options, types, translations) now via `config.js`
+* icons for JS version are now configured via `config.js`
+* sort order configuration changed
+* sorting is now done without page reload
+* adds `customHeader` and `customFooter` to `config.js`
+* supports restricted folders to some extent
+* some style changes on tree and language menu
+* fixes total file/folder count in status bar
+* adds support for use with userdir (requires some manual changes)
+
+
+## v0.16 - *2011-11-02*
+
+* sorts translations in `options.js`
+* improves HTML head sections
+* refactors JavaScript and PHP a lot
+* improves/fixes file selection for zipped download
+* fixes scrollbar and header/footer link issues (didn't work when zipped download enabled)
+* adds support for ctrl-select
+* `dateFormat` in `options.js` changed, now affecting JS and PHP version
+* `dateFormat` is localizable by adding it to a translation in `options.js`
+* PHP version is now configurable via `php/config.php` (set custom doc root and other PHP related things)
+* image thumbs and zipped download is disabled by default now, but works fine if PHP is configured
+
+
+## v0.15.2 - *2011-09-18*
+
+* adds `it` translation by [Salvo Gentile](https://github.com/SalvoGentile) and [Marco Patriarca](https://github.com/Fexys)
+* switches build process from scripp to wepp
+
+
+## v0.15.1 - *2011-09-06*
+
+* fixes security issues with the zipped download feature
+* makes zipped download optional (but enabled by default)
+
+
+## v0.15 - *2011-09-04*
+
+* adds zipped download for selected files
+* cleans and refactores
+
+
+## v0.14.1 - *2011-09-01*
+
+* display meta information in bottom bar (icon view)
+* adds `zh-cn` translation by [Dongsheng Cai](https://github.com/dongsheng)
+* adds `pl` translation by Radosław Zając
+* adds `ru` translation by Богдан Илюхин
+
+
+## v0.14 - *2011-08-16*
+
+* adds image thumbnails for PHP version
+* new option `slideTree` to turn off auto slide in
+
+
+## v0.13.2 - *2011-08-12*
+
+* changes in `/h5ai/.htaccess` ... PHP configuration ...
+
+
+## v0.13.1 - *2011-08-12*
+
+* fixes initial tree display
+* adds sort order option
+* adds/fixes some translations
+* adds `lv` translation by Sandis Veinbergs
+
+
+## v0.13 - *2011-08-06*
+
+* adds PHP implementation! (should work with PHP 5.2+)
+* adds new options
+* changes layout of the bottom bar to display status information
+* adds language selector to the bottom bar
+* quotes keys in `options.js` to make it valid json
+* changes value of option `lang` from `undefined` to `null`
+* adds some new keys to `h5aiLangs`
+* adds browser caching rules for css and js
+* adds `pt` translation by [Jonnathan](https://github.com/jonnsl)
+* adds `bg` translation by George Andonov
+
+
+## v0.12.3 - *2011-07-30*
+
+* adds `tr` translation by [Batuhan Icoz](https://github.com/batuhanicoz)
+
+
+## v0.12.2 - *2011-07-30*
+
+* adds `es` translation by Jose David Calderon Serrano
+
+
+## v0.12.1 - *2011-07-29*
+
+* fixes unchecked use of console.log
+
+
+## v0.12 - *2011-07-28*
+
+* improves performance
+
+
+## v0.11 - *2011-07-27*
+
+* changes license to MIT license, see `LICENSE.txt`
+
+
+## v0.10.2 - *2011-07-26*
+
+* improves tree scrollbar
+
+
+## v0.10.1 - *2011-07-24*
+
+* fixes problems with ' in links
+
+
+## v0.10 - *2011-07-24*
+
+* fixes problems with XAMPP on Windows (see `dot.htaccess` comments for instructions)
+* fixes tree fade-in-fade-out effect for small displays ([issue #6](https://github.com/lrsjng/h5ai/issues/6))
+* adds custom scrollbar to tree ([issue #6](https://github.com/lrsjng/h5ai/issues/6))
+* fixes broken links caused by URI encoding/decoding ([issue #9](https://github.com/lrsjng/h5ai/issues/9))
+* adds "empty" to localization (hope Google Translate did a good job here)
+
+
+## v0.9 - *2011-07-18*
+
+* links hover states between crumb, extended view and tree
+* fixes size of tree view (now there's a ugly scrollbar, hopefully will be fixed)
+* refactores js to improve performance and cleaned code
+* adds caching for folder status codes and content
+* adds `fr` translation by [Nicolas](https://github.com/Nicosmos)
+* adds `nl` translation by [Stefan de Konink](https://github.com/skinkie)
+* adds `sv` translation by Oscar Carlsson
+
+
+## v0.8 - *2011-07-08*
+
+* removes slashes from folder labels
+* optionally rename parent folder entries to real folder names, see `options.js`
+* long breadcrumbs (multiple rows) no longer hide content
+* error folder icons are opaque now
+* refactores js a lot (again...)
+
+
+## v0.7 - *2011-07-07*
+
+* removes shadows
+* smarter tree side bar
+
+
+## v0.6 - *2011-07-05*
+
+* refactores js
+* adds localization, see `options.js`
+
+
+## v0.5.3 - *2011-07-04*
+
+* refactores js
+* adds basic options support via `options.js`
+* adds comments to `options.js`
+* adds optional tree sidebar
+
+
+## v0.5.2 - *2011-07-02*
+
+* details view adjusts to window width
+* links icon for *.gz and *.bz2
+
+
+## v0.5.1 - *2011-07-01*
+
+* disables tree sidebar for now, since it had unwanted side effects
+
+
+## v0.5 - *2011-07-01*
+
+* adds tree sidebar
+* some refactorings
+
+
+## v0.4 - *2011-06-27*
+
+* adds better fallback, in case JavaScript is disabled
+* rewrites js, fixed middle-button click etc. problems
+* refactors css
+* sorts, adds and moves icons and images
+* updates dot.access
+
+
+## v0.3.2 - *2011-06-24*
+
+* removes lib versions from file names
+* adds 'empty' indicator for icons view
+
+
+## v0.3.1 - *2011-06-24*
+
+* refactores js
+* adds `folderClick` and `fileClick` callback hooks
+* fixes .emtpy style
+
+
+## v0.3 - *2011-06-23*
+
+* includes build stuff, files previously found in the base directory are now located in folder `target`
+* styles and scripts are now minified
+* adds Modernizr 2.0.4 for future use
+* updates jQuery to version 1.6.1
+
+
+## v0.2.3 - *2011-06-17*
+
+* more refactoring in main.js
+
+
+## v0.2.2 - *2011-06-16*
+
+* refactores a lot, adds some comments
+* includes fixes from [NumEricR](https://github.com/NumEricR)
+* adds top/bottom message support, only basicly styled
+
+
+## v0.2.1 - *2011-06-16*
+
+* fixes croped filenames
+* fixes missing .png extension in header
+* adds some color to the links
+* adds changelog
+
+
+## v0.2 - *2011-06-15*
+
+* adds icon view
diff --git a/container/srv-http/root/srv/_h5ai/README.md b/container/srv-http/root/srv/_h5ai/README.md
new file mode 100644
index 0000000..66eb547
--- /dev/null
+++ b/container/srv-http/root/srv/_h5ai/README.md
@@ -0,0 +1,72 @@
+# h5ai
+
+[![license][license-img]][github] [![web][web-img]][web] [![github][github-img]][github]
+
+A modern HTTP web server index for Apache httpd, lighttpd, nginx and Cherokee.
+
+
+## Important
+
+* Do **not** install any files from the `src` folder, they need to be
+ preprocessed to work correctly!
+* Find a preprocessed package and detailed install instructions on the
+ [project page][web].
+* For bug reports and feature requests please use [issues][github-issues].
+
+
+## Build
+
+There are installation ready packages for the latest [releases][release] and
+[dev builds][develop]. But to build **h5ai** yourself either `git clone` or
+download the repository. From within the root folder run the following
+commands to find a fresh zipball in folder `build` (tested on linux only,
+requires [`node 6.0+`][node] to be installed).
+
+~~~sh
+> npm install
+> npm run build
+~~~
+
+
+## License
+
+The MIT License (MIT)
+
+Copyright (c) 2019 Lars Jung (https://larsjung.de)
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+
+
+## References
+
+**h5ai** profits from other projects, all of them licensed under the MIT license
+too. Exceptions are some [Material Design icons][material-design-icons] (CC BY 4.0).
+
+
+[web]: https://larsjung.de/h5ai/
+[github]: https://github.com/lrsjng/h5ai
+[github-issues]: https://github.com/lrsjng/h5ai/issues
+[release]: https://release.larsjung.de/h5ai/
+[develop]: https://release.larsjung.de/h5ai/develop/
+[node]: https://nodejs.org
+[material-design-icons]: https://github.com/google/material-design-icons
+
+[license-img]: https://img.shields.io/badge/license-MIT-a0a060.svg?style=flat-square
+[web-img]: https://img.shields.io/badge/web-larsjung.de/h5ai-a0a060.svg?style=flat-squ…
+[github-img]: https://img.shields.io/badge/github-lrsjng/h5ai-a0a060.svg?style=flat-square
diff --git a/container/srv-http/root/srv/_h5ai/private/cache/README.md b/container/srv-http/root/srv/_h5ai/private/cache/README.md
new file mode 100755
index 0000000..60bc416
--- /dev/null
+++ b/container/srv-http/root/srv/_h5ai/private/cache/README.md
@@ -0,0 +1,9 @@
+# Cache
+
+Private cache.
+
+This directory is used for server side caching. To use caching make this
+directory writable for your webserver.
+
+There is no critical data in here. You can savely remove any content. This
+will clear the cache.
diff --git a/container/srv-http/root/srv/_h5ai/private/conf/l10n/af.json b/container/srv-http/root/srv/_h5ai/private/conf/l10n/af.json
new file mode 100755
index 0000000..5150c7b
--- /dev/null
+++ b/container/srv-http/root/srv/_h5ai/private/conf/l10n/af.json
@@ -0,0 +1,18 @@
+{
+ "lang": "afrikaans",
+
+ "dateFormat": "YYYY-MM-DD HH:mm",
+ "details": "besonderhede",
+ "download": "aflaai",
+ "empty": "leeg",
+ "files": "lêers",
+ "filter": "filter",
+ "folders": "gidse",
+ "grid": "rooster",
+ "icons": "ikone",
+ "lastModified": "Laas verander",
+ "name": "Naam",
+ "noMatch": "geen resultaat",
+ "parentDirectory": "Hoër Vlak",
+ "size": "Grootte"
+}
diff --git a/container/srv-http/root/srv/_h5ai/private/conf/l10n/bg.json b/container/srv-http/root/srv/_h5ai/private/conf/l10n/bg.json
new file mode 100755
index 0000000..6808e62
--- /dev/null
+++ b/container/srv-http/root/srv/_h5ai/private/conf/l10n/bg.json
@@ -0,0 +1,18 @@
+{
+ "lang": "български",
+
+ "dateFormat": "DD-MM-YYYY HH:mm",
+ "details": "детайли",
+ "download": "изтегляне",
+ "empty": "празна",
+ "files": "файлове",
+ "filter": "филтър",
+ "folders": "директории",
+ "grid": "мрежа",
+ "icons": "икони",
+ "lastModified": "Последна промяна",
+ "name": "Име",
+ "noMatch": "няма съвпадение",
+ "parentDirectory": "Предходна директория",
+ "size": "Размер"
+}
diff --git a/container/srv-http/root/srv/_h5ai/private/conf/l10n/cs.json b/container/srv-http/root/srv/_h5ai/private/conf/l10n/cs.json
new file mode 100755
index 0000000..1e34e61
--- /dev/null
+++ b/container/srv-http/root/srv/_h5ai/private/conf/l10n/cs.json
@@ -0,0 +1,18 @@
+{
+ "lang": "čeština",
+
+ "dateFormat": "DD.MM.YYYY HH:mm",
+ "details": "Podrobnosti",
+ "download": "Stáhnout",
+ "empty": "Prázdná složka",
+ "files": "souborů",
+ "filter": "Filtr",
+ "folders": "složek",
+ "grid": "Seznam",
+ "icons": "Velké ikony",
+ "lastModified": "Datum změny",
+ "name": "Název",
+ "noMatch": "Žádná shoda",
+ "parentDirectory": "Nadřazený adresář",
+ "size": "Velikost"
+}
diff --git a/container/srv-http/root/srv/_h5ai/private/conf/l10n/da.json b/container/srv-http/root/srv/_h5ai/private/conf/l10n/da.json
new file mode 100755
index 0000000..3b8fa06
--- /dev/null
+++ b/container/srv-http/root/srv/_h5ai/private/conf/l10n/da.json
@@ -0,0 +1,18 @@
+{
+ "lang": "dansk",
+
+ "dateFormat": "DD-MM-YYYY HH:mm",
+ "details": "detaljer",
+ "download": "download",
+ "empty": "tom",
+ "files": "filer",
+ "filter": "filter",
+ "folders": "mapper",
+ "grid": "grid",
+ "icons": "ikoner",
+ "lastModified": "Sidst ændret",
+ "name": "Navn",
+ "noMatch": "ingen match",
+ "parentDirectory": "Overordnet mappe",
+ "size": "Størrelse"
+}
diff --git a/container/srv-http/root/srv/_h5ai/private/conf/l10n/de.json b/container/srv-http/root/srv/_h5ai/private/conf/l10n/de.json
new file mode 100755
index 0000000..6d8c613
--- /dev/null
+++ b/container/srv-http/root/srv/_h5ai/private/conf/l10n/de.json
@@ -0,0 +1,22 @@
+{
+ "lang": "deutsch",
+
+ "dateFormat": "DD.MM.YYYY HH:mm",
+ "details": "Details",
+ "download": "Download",
+ "empty": "leer",
+ "files": "Dateien",
+ "filter": "filtern",
+ "folders": "Ordner",
+ "grid": "Gitter",
+ "icons": "Icons",
+ "language": "Sprache",
+ "lastModified": "Geändert",
+ "name": "Name",
+ "noMatch": "keine Treffer",
+ "parentDirectory": "Übergeordnetes Verzeichnis",
+ "search": "suchen",
+ "size": "Größe",
+ "tree": "Baum",
+ "view": "Ansicht"
+}
diff --git a/container/srv-http/root/srv/_h5ai/private/conf/l10n/el.json b/container/srv-http/root/srv/_h5ai/private/conf/l10n/el.json
new file mode 100755
index 0000000..2d9c00d
--- /dev/null
+++ b/container/srv-http/root/srv/_h5ai/private/conf/l10n/el.json
@@ -0,0 +1,18 @@
+{
+ "lang": "ελληνικά",
+
+ "dateFormat": "DD/MM/YYYY HH:mm",
+ "details": "λεπτομέρειες",
+ "download": "μεταμόρφωση",
+ "empty": "κενό",
+ "files": "αρχεία",
+ "filter": "φίλτρο",
+ "folders": "φάκελοι",
+ "grid": "πλέγμα",
+ "icons": "εικονίδια",
+ "lastModified": "Τελευταία τροποποίηση",
+ "name": "Όνομα",
+ "noMatch": "κανένα αποτέλεσμα",
+ "parentDirectory": "Προηγούμενος Κατάλογος",
+ "size": "Μέγεθος"
+}
diff --git a/container/srv-http/root/srv/_h5ai/private/conf/l10n/en.json b/container/srv-http/root/srv/_h5ai/private/conf/l10n/en.json
new file mode 100755
index 0000000..05e9b4e
--- /dev/null
+++ b/container/srv-http/root/srv/_h5ai/private/conf/l10n/en.json
@@ -0,0 +1,23 @@
+/* only here as a reference, these values are the hardcoded defaults */
+{
+ "lang": "english",
+
+ "dateFormat": "YYYY-MM-DD HH:mm",
+ "details": "details",
+ "download": "download",
+ "empty": "empty",
+ "files": "files",
+ "filter": "filter",
+ "folders": "folders",
+ "grid": "grid",
+ "icons": "icons",
+ "language": "Language",
+ "lastModified": "Last modified",
+ "name": "Name",
+ "noMatch": "no match",
+ "parentDirectory": "Parent Directory",
+ "search": "search",
+ "size": "Size",
+ "tree": "Tree",
+ "view": "View"
+}
diff --git a/container/srv-http/root/srv/_h5ai/private/conf/l10n/es.json b/container/srv-http/root/srv/_h5ai/private/conf/l10n/es.json
new file mode 100755
index 0000000..e42a5b9
--- /dev/null
+++ b/container/srv-http/root/srv/_h5ai/private/conf/l10n/es.json
@@ -0,0 +1,22 @@
+{
+ "lang": "español",
+
+ "dateFormat": "DD/MM/YYYY HH:mm",
+ "details": "Detalles",
+ "download": "Descargar",
+ "empty": "vacío",
+ "files": "Archivos",
+ "filter": "Filtrar",
+ "folders": "Directorios",
+ "grid": "Cuadrícula",
+ "icons": "Íconos",
+ "language": "Idioma",
+ "lastModified": "Última modificación",
+ "name": "Nombre",
+ "noMatch": "Sin coincidencias",
+ "parentDirectory": "Directorio superior",
+ "search": "buscar",
+ "size": "Tamaño",
+ "tree": "Arbol",
+ "view": "Vista"
+}
diff --git a/container/srv-http/root/srv/_h5ai/private/conf/l10n/et.json b/container/srv-http/root/srv/_h5ai/private/conf/l10n/et.json
new file mode 100755
index 0000000..8f3d1dc
--- /dev/null
+++ b/container/srv-http/root/srv/_h5ai/private/conf/l10n/et.json
@@ -0,0 +1,22 @@
+{
+ "lang": "estonian",
+
+ "dateFormat": "DD-MM-YYYY HH.mm",
+ "details": "täpsem info",
+ "download": "laadi alla",
+ "empty": "tühi",
+ "files": "failid",
+ "filter": "filter",
+ "folders": "kataloogid",
+ "grid": "võre",
+ "icons": "ikoonid",
+ "language": "Keel",
+ "lastModified": "Viimati muudetud",
+ "name": "Nimi",
+ "noMatch": "ei leitud sobivat",
+ "parentDirectory": "Emakataloog",
+ "search": "otsi",
+ "size": "Suurus",
+ "tree": "Puu",
+ "view": "Vaade"
+}
diff --git a/container/srv-http/root/srv/_h5ai/private/conf/l10n/fi.json b/container/srv-http/root/srv/_h5ai/private/conf/l10n/fi.json
new file mode 100755
index 0000000..c19c0ed
--- /dev/null
+++ b/container/srv-http/root/srv/_h5ai/private/conf/l10n/fi.json
@@ -0,0 +1,18 @@
+{
+ "lang": "finnish",
+
+ "dateFormat": "DD.MM.YYYY HH:mm",
+ "details": "tiedot",
+ "download": "lataa",
+ "empty": "tyhjä",
+ "files": "tiedostoa",
+ "filter": "suodata",
+ "folders": "hakemistoa",
+ "grid": "ruudukko",
+ "icons": "ikonit",
+ "lastModified": "Viimeksi muokattu",
+ "name": "Nimi",
+ "noMatch": "ei osumia",
+ "parentDirectory": "Ylähakemisto",
+ "size": "Koko"
+}
diff --git a/container/srv-http/root/srv/_h5ai/private/conf/l10n/fr.json b/container/srv-http/root/srv/_h5ai/private/conf/l10n/fr.json
new file mode 100755
index 0000000..9a4ac45
--- /dev/null
+++ b/container/srv-http/root/srv/_h5ai/private/conf/l10n/fr.json
@@ -0,0 +1,22 @@
+{
+ "lang": "français",
+
+ "dateFormat": "DD/MM/YYYY HH:mm",
+ "details": "détails",
+ "download": "télécharger",
+ "empty": "vide",
+ "files": "Fichiers",
+ "filter": "filtrer",
+ "folders": "Répertoires",
+ "grid": "grille",
+ "icons": "icônes",
+ "language": "Langue",
+ "lastModified": "Dernière modification",
+ "name": "Nom",
+ "noMatch": "rien trouvé",
+ "parentDirectory": "Dossier parent",
+ "search": "rechercher",
+ "size": "Taille",
+ "tree": "Arborescence",
+ "view": "Disposition"
+}
diff --git a/container/srv-http/root/srv/_h5ai/private/conf/l10n/he.json b/container/srv-http/root/srv/_h5ai/private/conf/l10n/he.json
new file mode 100755
index 0000000..bb37f7f
--- /dev/null
+++ b/container/srv-http/root/srv/_h5ai/private/conf/l10n/he.json
@@ -0,0 +1,17 @@
+{
+ "lang": "עברית",
+
+ "dateFormat": "DD.MM.YYYY HH:mm",
+ "details": "פרטים",
+ "download": "הורדה",
+ "empty": "ריק",
+ "files": "קבצים",
+ "filter": "סינון",
+ "folders": "תיקיות",
+ "icons": "צלמיות",
+ "lastModified": "שינוי אחרון",
+ "name": "שם",
+ "noMatch": "אין תוצאות",
+ "parentDirectory": "תיקיית הורה",
+ "size": "גודל"
+}
diff --git a/container/srv-http/root/srv/_h5ai/private/conf/l10n/hi.json b/container/srv-http/root/srv/_h5ai/private/conf/l10n/hi.json
new file mode 100755
index 0000000..5941733
--- /dev/null
+++ b/container/srv-http/root/srv/_h5ai/private/conf/l10n/hi.json
@@ -0,0 +1,18 @@
+{
+ "lang": "हिंदी",
+
+ "dateFormat": "DD.MM.YYYY HH:mm",
+ "details": "विस्तार",
+ "download": "डाउनलोड",
+ "empty": "खाली",
+ "files": "फ़ाइलें",
+ "filter": "फ़िल्टर",
+ "folders": "फोल्डर",
+ "grid": "ग्रिड",
+ "icons": "आइकॉन",
+ "lastModified": "पिछला परिवर्तन",
+ "name": "नाम",
+ "noMatch": "कोई समानता नहीं",
+ "parentDirectory": "मूल डायरेक्टरी",
+ "size": "माप"
+}
diff --git a/container/srv-http/root/srv/_h5ai/private/conf/l10n/hr.json b/container/srv-http/root/srv/_h5ai/private/conf/l10n/hr.json
new file mode 100755
index 0000000..c044db4
--- /dev/null
+++ b/container/srv-http/root/srv/_h5ai/private/conf/l10n/hr.json
@@ -0,0 +1,18 @@
+{
+ "lang": "hrvatski",
+
+ "dateFormat": "YYYY-MM-DD HH:mm",
+ "details": "detalji",
+ "download": "preuzmi",
+ "empty": "prazno",
+ "files": "datoteka",
+ "filter": "filter",
+ "folders": "direktorij(a)",
+ "grid": "mreža",
+ "icons": "ikone",
+ "lastModified": "Posljednja izmjena",
+ "name": "Naziv",
+ "noMatch": "nema rezultata",
+ "parentDirectory": "Natrag",
+ "size": "Veličina"
+}
diff --git a/container/srv-http/root/srv/_h5ai/private/conf/l10n/hu.json b/container/srv-http/root/srv/_h5ai/private/conf/l10n/hu.json
new file mode 100755
index 0000000..b2c1b34
--- /dev/null
+++ b/container/srv-http/root/srv/_h5ai/private/conf/l10n/hu.json
@@ -0,0 +1,16 @@
+{
+ "lang": "magyar",
+
+ "dateFormat": "YYYY-MM-DD HH:mm",
+ "details": "részletek",
+ "download": "letöltés",
+ "empty": "üres",
+ "files": "fájlok",
+ "folders": "mappák",
+ "icons": "ikonok",
+ "lastModified": "Utoljára módosítva",
+ "name": "Név",
+ "noMatch": "nincs találat",
+ "parentDirectory": "Szülő könyvtár",
+ "size": "Méret"
+}
diff --git a/container/srv-http/root/srv/_h5ai/private/conf/l10n/it.json b/container/srv-http/root/srv/_h5ai/private/conf/l10n/it.json
new file mode 100755
index 0000000..cd83337
--- /dev/null
+++ b/container/srv-http/root/srv/_h5ai/private/conf/l10n/it.json
@@ -0,0 +1,18 @@
+{
+ "lang": "italiano",
+
+ "dateFormat": "DD-MM-YYYY HH:mm",
+ "details": "dettagli",
+ "download": "download",
+ "empty": "vuota",
+ "files": "file",
+ "filter": "filtra",
+ "folders": "cartelle",
+ "grid": "griglia",
+ "icons": "icone",
+ "lastModified": "Ultima modifica",
+ "name": "Nome",
+ "noMatch": "nessun risultato",
+ "parentDirectory": "Cartella Superiore",
+ "size": "Dimensione"
+}
diff --git a/container/srv-http/root/srv/_h5ai/private/conf/l10n/ja.json b/container/srv-http/root/srv/_h5ai/private/conf/l10n/ja.json
new file mode 100755
index 0000000..88266e7
--- /dev/null
+++ b/container/srv-http/root/srv/_h5ai/private/conf/l10n/ja.json
@@ -0,0 +1,20 @@
+{
+ "lang": "日本語",
+
+ "dateFormat": "YYYY-MM-DD HH:mm",
+ "details": "詳細",
+ "download": "ダウンロード",
+ "empty": "(空)",
+ "files": "ファイル",
+ "filter": "フィルター",
+ "folders": "フォルダー",
+ "grid": "グリッド",
+ "icons": "アイコン",
+ "language": "言語",
+ "lastModified": "最終変更日時",
+ "name": "名前",
+ "noMatch": "一致する項目が見つかりません",
+ "parentDirectory": "親ディレクトリへ",
+ "size": "サイズ",
+ "view": "ビュー"
+}
diff --git a/container/srv-http/root/srv/_h5ai/private/conf/l10n/ko.json b/container/srv-http/root/srv/_h5ai/private/conf/l10n/ko.json
new file mode 100755
index 0000000..8c48cdb
--- /dev/null
+++ b/container/srv-http/root/srv/_h5ai/private/conf/l10n/ko.json
@@ -0,0 +1,22 @@
+{
+ "lang": "한국어",
+
+ "dateFormat": "YYYY-MM-DD HH:mm",
+ "details": "자세히",
+ "download": "다운로드",
+ "empty": "빈 폴더",
+ "files": "파일",
+ "filter": "필터",
+ "folders": "폴더",
+ "grid": "그리드",
+ "icons": "아이콘",
+ "language": "언어",
+ "lastModified": "최근 수정일",
+ "name": "파일명",
+ "noMatch": "해당파일이 없습니다.",
+ "parentDirectory": "상위폴더",
+ "search": "검색",
+ "size": "크기",
+ "tree": "트리",
+ "view": "보기"
+}
diff --git a/container/srv-http/root/srv/_h5ai/private/conf/l10n/lv.json b/container/srv-http/root/srv/_h5ai/private/conf/l10n/lv.json
new file mode 100755
index 0000000..fa672ce
--- /dev/null
+++ b/container/srv-http/root/srv/_h5ai/private/conf/l10n/lv.json
@@ -0,0 +1,22 @@
+{
+ "lang": "latviešu",
+
+ "dateFormat": "YYYY-MM-DD HH:mm",
+ "details": "detaļas",
+ "download": "lejupielādēt",
+ "empty": "tukšs",
+ "files": "faili",
+ "filter": "filtrēt",
+ "folders": "mapes",
+ "grid": "režģis",
+ "icons": "ikonas",
+ "language": "Valoda",
+ "lastModified": "Pēdējoreiz modificēts",
+ "name": "Nosaukums",
+ "noMatch": "nav sakritības",
+ "parentDirectory": "Vecākdirektorijs",
+ "search": "meklēt",
+ "size": "Izmērs",
+ "tree": "Koks",
+ "view": "Skats"
+}
diff --git a/container/srv-http/root/srv/_h5ai/private/conf/l10n/nb.json b/container/srv-http/root/srv/_h5ai/private/conf/l10n/nb.json
new file mode 100755
index 0000000..44a1797
--- /dev/null
+++ b/container/srv-http/root/srv/_h5ai/private/conf/l10n/nb.json
@@ -0,0 +1,15 @@
+{
+ "lang": "norwegian",
+
+ "details": "detaljer",
+ "download": "last ned",
+ "empty": "tom",
+ "files": "filer",
+ "folders": "mapper",
+ "icons": "ikoner",
+ "lastModified": "Sist endret",
+ "name": "Navn",
+ "noMatch": "ingen treff",
+ "parentDirectory": "Overordnet mappe",
+ "size": "Størrelse"
+}
diff --git a/container/srv-http/root/srv/_h5ai/private/conf/l10n/nl.json b/container/srv-http/root/srv/_h5ai/private/conf/l10n/nl.json
new file mode 100755
index 0000000..8310f05
--- /dev/null
+++ b/container/srv-http/root/srv/_h5ai/private/conf/l10n/nl.json
@@ -0,0 +1,22 @@
+{
+ "lang": "nederlands",
+
+ "dateFormat": "YYYY-MM-DD HH:mm",
+ "details": "details",
+ "download": "download",
+ "empty": "leeg",
+ "files": "bestanden",
+ "filter": "filter",
+ "folders": "mappen",
+ "grid": "grid",
+ "icons": "iconen",
+ "language": "Taal",
+ "lastModified": "Laatste wijziging",
+ "name": "Naam",
+ "noMatch": "geen overeenkomst",
+ "parentDirectory": "Bovenliggende map",
+ "search": "zoeken",
+ "size": "Grootte",
+ "tree": "Boom",
+ "view": "Bekijk"
+}
diff --git a/container/srv-http/root/srv/_h5ai/private/conf/l10n/pl.json b/container/srv-http/root/srv/_h5ai/private/conf/l10n/pl.json
new file mode 100755
index 0000000..da56967
--- /dev/null
+++ b/container/srv-http/root/srv/_h5ai/private/conf/l10n/pl.json
@@ -0,0 +1,22 @@
+{
+ "lang": "polski",
+
+ "dateFormat": "YYYY-MM-DD HH:mm",
+ "details": "szczegóły",
+ "download": "pobierz",
+ "empty": "pusty",
+ "files": "plików",
+ "filter": "filtr",
+ "folders": "folderów",
+ "grid": "kafelki",
+ "icons": "ikony",
+ "language": "Język",
+ "lastModified": "Ostatnia modyfikacja",
+ "name": "Nazwa",
+ "noMatch": "nie znaleziono",
+ "parentDirectory": "Katalog nadrzędny",
+ "search": "szukaj",
+ "size": "Rozmiar",
+ "tree": "Drzewo",
+ "view": "Układ"
+}
diff --git a/container/srv-http/root/srv/_h5ai/private/conf/l10n/pt.json b/container/srv-http/root/srv/_h5ai/private/conf/l10n/pt.json
new file mode 100755
index 0000000..acd7fea
--- /dev/null
+++ b/container/srv-http/root/srv/_h5ai/private/conf/l10n/pt.json
@@ -0,0 +1,18 @@
+{
+ "lang": "português",
+
+ "dateFormat": "DD-MM-YYYY HH:mm",
+ "details": "detalhes",
+ "download": "descarregar",
+ "empty": "vazio",
+ "files": "arquivos",
+ "filter": "filtro",
+ "folders": "pastas",
+ "grid": "grelha",
+ "icons": "ícones",
+ "lastModified": "última modificação",
+ "name": "Nome",
+ "noMatch": "sem resultados",
+ "parentDirectory": "diretório acima",
+ "size": "Tamanho"
+}
diff --git a/container/srv-http/root/srv/_h5ai/private/conf/l10n/ro.json b/container/srv-http/root/srv/_h5ai/private/conf/l10n/ro.json
new file mode 100755
index 0000000..4981dfe
--- /dev/null
+++ b/container/srv-http/root/srv/_h5ai/private/conf/l10n/ro.json
@@ -0,0 +1,15 @@
+{
+ "lang": "română",
+
+ "details": "detalii",
+ "download": "descarcă",
+ "empty": "gol",
+ "files": "fişiere",
+ "folders": "dosar",
+ "icons": "pictograme",
+ "lastModified": "ultima modificare",
+ "name": "nume",
+ "noMatch": "0 rezultate",
+ "parentDirectory": "dosar părinte",
+ "size": "mărime"
+}
diff --git a/container/srv-http/root/srv/_h5ai/private/conf/l10n/ru.json b/container/srv-http/root/srv/_h5ai/private/conf/l10n/ru.json
new file mode 100755
index 0000000..8056a0d
--- /dev/null
+++ b/container/srv-http/root/srv/_h5ai/private/conf/l10n/ru.json
@@ -0,0 +1,20 @@
+{
+ "lang": "русский",
+
+ "dateFormat": "YYYY-MM-DD HH:mm",
+ "details": "Детали",
+ "download": "Скачать",
+ "empty": "Пусто",
+ "files": "Файлы",
+ "filter": "Фильтр",
+ "folders": "Папки",
+ "grid": "Сетка",
+ "icons": "Иконки",
+ "language": "Язык",
+ "lastModified": "Последние изменения",
+ "name": "Имя",
+ "noMatch": "Нет совпадений",
+ "parentDirectory": "Главная директория",
+ "size": "Размер",
+ "view": "Вид"
+}
diff --git a/container/srv-http/root/srv/_h5ai/private/conf/l10n/sk.json b/container/srv-http/root/srv/_h5ai/private/conf/l10n/sk.json
new file mode 100755
index 0000000..cfc9e45
--- /dev/null
+++ b/container/srv-http/root/srv/_h5ai/private/conf/l10n/sk.json
@@ -0,0 +1,13 @@
+{
+ "lang": "slovenčina",
+
+ "details": "podrobnosti",
+ "empty": "prázdny",
+ "files": "súborov",
+ "folders": "priečinkov",
+ "icons": "ikony",
+ "lastModified": "Upravené",
+ "name": "Názov",
+ "parentDirectory": "Nadriadený priečinok",
+ "size": "Velkosť"
+}
diff --git a/container/srv-http/root/srv/_h5ai/private/conf/l10n/sl.json b/container/srv-http/root/srv/_h5ai/private/conf/l10n/sl.json
new file mode 100755
index 0000000..5cdda21
--- /dev/null
+++ b/container/srv-http/root/srv/_h5ai/private/conf/l10n/sl.json
@@ -0,0 +1,18 @@
+{
+ "lang": "slovenščina",
+
+ "dateFormat": "DD. MM. YYYY HH:mm",
+ "details": "podrobnosti",
+ "download": "prenesi",
+ "empty": "prazno",
+ "files": "datoteke",
+ "filter": "filter",
+ "folders": "mape",
+ "grid": "mreža",
+ "icons": "ikone",
+ "lastModified": "Zadnja sprememba",
+ "name": "Ime",
+ "noMatch": "ni zadetkov",
+ "parentDirectory": "Nadrejena mapa",
+ "size": "Velikost"
+}
diff --git a/container/srv-http/root/srv/_h5ai/private/conf/l10n/sr.json b/container/srv-http/root/srv/_h5ai/private/conf/l10n/sr.json
new file mode 100755
index 0000000..845eeab
--- /dev/null
+++ b/container/srv-http/root/srv/_h5ai/private/conf/l10n/sr.json
@@ -0,0 +1,15 @@
+{
+ "lang": "srpski",
+
+ "details": "detalji",
+ "download": "download",
+ "empty": "prazno",
+ "files": "fajlovi",
+ "folders": "direktorijum",
+ "icons": "ikone",
+ "lastModified": "Poslednja modifikacija",
+ "name": "Ime",
+ "noMatch": "bez poklapanja",
+ "parentDirectory": "Roditeljski direktorijum",
+ "size": "Veličina"
+}
diff --git a/container/srv-http/root/srv/_h5ai/private/conf/l10n/sv.json b/container/srv-http/root/srv/_h5ai/private/conf/l10n/sv.json
new file mode 100755
index 0000000..75638e5
--- /dev/null
+++ b/container/srv-http/root/srv/_h5ai/private/conf/l10n/sv.json
@@ -0,0 +1,16 @@
+{
+ "lang": "svenska",
+
+ "details": "detaljerad",
+ "download": "ladda ner",
+ "empty": "tom",
+ "files": "filer",
+ "folders": "kataloger",
+ "grid": "rutnät",
+ "icons": "ikoner",
+ "lastModified": "Senast ändrad",
+ "name": "Filnamn",
+ "noMatch": "ingen matchning",
+ "parentDirectory": "Till överordnad mapp",
+ "size": "Filstorlek"
+}
diff --git a/container/srv-http/root/srv/_h5ai/private/conf/l10n/tr.json b/container/srv-http/root/srv/_h5ai/private/conf/l10n/tr.json
new file mode 100755
index 0000000..45cfc92
--- /dev/null
+++ b/container/srv-http/root/srv/_h5ai/private/conf/l10n/tr.json
@@ -0,0 +1,14 @@
+{
+ "lang": "türkçe",
+
+ "details": "detaylar",
+ "download": "indir",
+ "empty": "boş",
+ "files": "dosyalar",
+ "folders": "klasörler",
+ "icons": "ikonlar",
+ "lastModified": "Son Düzenleme",
+ "name": "İsim",
+ "parentDirectory": "Üst Dizin",
+ "size": "Boyut"
+}
diff --git a/container/srv-http/root/srv/_h5ai/private/conf/l10n/uk.json b/container/srv-http/root/srv/_h5ai/private/conf/l10n/uk.json
new file mode 100755
index 0000000..62908f5
--- /dev/null
+++ b/container/srv-http/root/srv/_h5ai/private/conf/l10n/uk.json
@@ -0,0 +1,18 @@
+{
+ "lang": "українська",
+
+ "dateFormat": "YYYY-MM-DD HH:mm",
+ "details": "Деталі",
+ "download": "Завантажити",
+ "empty": "Порожньо",
+ "files": "Файли(ів)",
+ "filter": "Фільтр",
+ "folders": "Тек(и)",
+ "grid": "Гратка",
+ "icons": "Піктограми",
+ "lastModified": "Останні зміни",
+ "name": "Ім'я",
+ "noMatch": "Немає співпадінь",
+ "parentDirectory": "Головна тека",
+ "size": "Розмір"
+}
diff --git a/container/srv-http/root/srv/_h5ai/private/conf/l10n/zh-cn.json b/container/srv-http/root/srv/_h5ai/private/conf/l10n/zh-cn.json
new file mode 100755
index 0000000..7cdba51
--- /dev/null
+++ b/container/srv-http/root/srv/_h5ai/private/conf/l10n/zh-cn.json
@@ -0,0 +1,23 @@
+{
+ "lang": "简体中文",
+
+ "dateFormat": "YYYY-MM-DD HH:mm",
+ "details": "详情",
+ "download": "下载",
+ "empty": "空文件夹",
+ "files": "文件",
+ "filter": "过滤",
+ "folders": "文件夹",
+ "grid": "网格",
+ "icons": "图标",
+ "language": "语言",
+ "lastModified": "修改时间",
+ "name": "文件名",
+ "noMatch": "无匹配项",
+ "parentDirectory": "父文件夹",
+ "search": "搜索",
+ "size": "大小",
+ "tree": "树形目录",
+ "view": "视图",
+ "info": "信息"
+}
diff --git a/container/srv-http/root/srv/_h5ai/private/conf/l10n/zh-tw.json b/container/srv-http/root/srv/_h5ai/private/conf/l10n/zh-tw.json
new file mode 100755
index 0000000..7567f0d
--- /dev/null
+++ b/container/srv-http/root/srv/_h5ai/private/conf/l10n/zh-tw.json
@@ -0,0 +1,23 @@
+{
+ "lang": "正體中文",
+
+ "dateFormat": "YYYY-MM-DD HH:mm",
+ "details": "詳細資料",
+ "download": "下載",
+ "empty": "空資料夾",
+ "files": "檔案",
+ "filter": "過濾",
+ "folders": "資料夾",
+ "grid": "網格",
+ "icons": "圖示",
+ "language": "語言",
+ "lastModified": "上次修改",
+ "name": "檔名",
+ "noMatch": "沒有符合的檔案",
+ "parentDirectory": "上層目錄",
+ "search": "搜尋",
+ "size": "大小",
+ "tree": "樹形目錄",
+ "view": "檢視",
+ "info": "資訊"
+}
diff --git a/container/srv-http/root/srv/_h5ai/private/conf/options.json b/container/srv-http/root/srv/_h5ai/private/conf/options.json
new file mode 100755
index 0000000..69a7add
--- /dev/null
+++ b/container/srv-http/root/srv/_h5ai/private/conf/options.json
@@ -0,0 +1,392 @@
+/* h5ai v0.29.2 - https://larsjung.de/h5ai/ */
+{
+ /*
+ Password hash.
+
+ SHA512 hash of the info page password, the preset password is the empty string.
+ Online hash generator: http://md5hashing.net/hashing/sha512
+ */
+ "passhash": "cf83e1357eefb8bdf1542850d66d8007d620e4050b5715dc83f4a921d36ce9ce47d0d13c5d85f2b0ff8318d2877eec2f63b931bd47417a81a538327af927da3e",
+
+
+
+ /*
+ Resources.
+
+ Additional script and style tags added to all pages. Paths not beginning
+ with "http://", "https://" or "/" will be looked up relative to
+ "_h5ai/public/ext/" (no check for existence).
+
+ - scripts: array of strings
+ - styles: array of strings
+ */
+ "resources": {
+ "scripts": [],
+ "styles": [
+ "//fonts.googleapis.com/css?family=Ubuntu:300,400,700%7CUbuntu+Mono:400,700"
+ ]
+ },
+
+
+
+ /*
+ General view options.
+
+ - binaryPrefix: boolean, set to true uses 1024B=1KiB when formatting file sizes (see http://en.wikipedia.org/wiki/Binary_prefix)
+ - disableSidebar: boolean, hides sidebar and toggle button
+ - fallbackMode: boolean, serve fallback mode
+ - fastBrowsing: boolean, use History API if available (no need to reload the whole page)
+ - fonts: array of strings, fonts to use in regular context
+ - fontsMono: array of strings, fonts to use in monopspaced context
+ - hidden: array of strings, don't list items matching these regular expressions
+ - hideFolders: boolean, hide all folders in the main view
+ - hideIf403: boolean, hide files and folders that are not readable by the server
+ - hideParentFolder: boolean, hide parent folder links in the main view
+ - maxIconSize: number, max size for icons in the main view
+ - modes: array of strings, subset of ["details", "grid", "icons"]
+ the first value indicates the default view mode. If only one value
+ is given the view mode is fixed and the selector buttons are hidden.
+ The user selected view mode is also stored local in modern browsers
+ so that it will be persistent.
+ - modeToggle: boolean, show a view mode toggle in the toolbar, or "next"
+ - setParentFolderLabels: boolean, set parent folder labels to real folder names
+ - sizes: array of numbers
+ the first value indicates the default view size. If only one value
+ is given the view size is fixed and the selector buttons are hidden.
+ The user selected view size is also stored local in modern browsers
+ so that it will be persistent.
+ - theme: string, name of one of the folders in "_h5ai/images/themes", defaults to "default"
+ - unmanaged: array of strings, don't manage folders containing one of those files
+ - unmanagedInNewWindow: boolean, open unmanaged links in new window/tab
+ */
+ "view": {
+ "binaryPrefix": false,
+ "disableSidebar": false,
+ "fallbackMode": false,
+ "fastBrowsing": true,
+ "fonts": ["Ubuntu", "Roboto", "Helvetica", "Arial", "sans-serif"],
+ "fontsMono": ["Ubuntu Mono", "Monaco", "Lucida Sans Typewriter", "monospace"],
+ "hidden": ["^\\.", "^_h5ai"],
+ "hideFolders": false,
+ "hideIf403": true,
+ "hideParentFolder": false,
+ "maxIconSize": 40,
+ "modes": ["details", "grid", "icons"],
+ "modeToggle": false,
+ "setParentFolderLabels": true,
+ "sizes": [20, 40, 60, 80, 100, 140, 180, 220, 260, 300],
+ "theme": "comity",
+ "unmanaged": ["index.html", "index.htm", "index.php"],
+ "unmanagedInNewWindow": false
+ },
+
+
+
+ /*** Extensions (in alphabetical order) ***/
+
+ /*
+ Watch and update current folder content.
+
+ - interval: number, update interval in milliseconds, at least 1000
+ */
+ "autorefresh": {
+ "enabled": false,
+ "interval": 5000
+ },
+
+ /*
+ Show a clickable breadcrumb.
+ */
+ "crumb": {
+ "enabled": true
+ },
+
+ /*
+ Allow customized header and footer files.
+ First checks for files "_h5ai.header.html" and "_h5ai.footer.html" in the current directory.
+ If not successful it checks all parent directories (starting in the current directory) for
+ files "_h5ai.headers.html" and "_h5ai.footers.html".
+ Note the different filenames: "header" (only current) - "headers" (current and sub directories)!
+ The file's content will be placed inside a <div/> tag above/below the main content.
+ If a file's extension is ".md" instead of ".html" its content will be interpreted as markdown.
+ */
+ "custom": {
+ "enabled": true
+ },
+
+ /*
+ Enable packaged download of selected entries.
+ To select files the "select"-extension needs to be enabled.
+
+ - type: string, "php-tar", "shell-tar" or "shell-zip"
+ - packageName: string, basename of the download package, null for current filename or foldername
+ - alwaysVisible: boolean, always show download button (defaults to download the current folder)
+ */
+ "download": {
+ "enabled": true,
+ "type": "php-tar",
+ "packageName": null,
+ "alwaysVisible": false
+ },
+
+ /*
+ Allow filtering the displayed files and folders in current folder.
+ Checks for substrings.
+
+ If advanced is enabled it checks entries for right order of characters,
+ i.e. "ab" matches "ab", "axb", "xaxbx" but not "ba". Space separated
+ sequences get OR-ed. Searches will be treated as JavaScript regular
+ expressions if you prefix them with "re:".
+
+ - advanced: boolean, use advanced pattern parsing
+ - debounceTime: number, debounce wait time in milliseconds
+ - ignorecase: boolean, ignore case
+ */
+ "filter": {
+ "enabled": false,
+ "advanced": true,
+ "debounceTime": 100,
+ "ignorecase": true
+ },
+
+ /*
+ Calc the size of folders.
+ This operation is real slow. The calculated sizes differ slightly for both
+ calculation types since "php" only adds the file size, while "shell-du"
+ also adds the sizes for the actual folder files.
+
+ - type: string, "php" (sloooow) or "shell-du" (sloow)
+ */
+ "foldersize": {
+ "enabled": true,
+ "type": "php"
+ },
+
+ /*
+ Adds Google Universial Analytics asynchronous tracking code.
+ see: https://developers.google.com/analytics/devguides/collection/analyticsjs/
+
+ - id: string, account ID
+ */
+ "google-analytics-ua": {
+ "enabled": false,
+ "id": "UA-000000-0"
+ },
+
+ /*
+ Enable a generic info side bar.
+
+ - show: boolean, initial visible to first time users
+ - qrcode: boolean, show a QR-Code
+ - qrColor: string, QR-Code fill color
+ */
+ "info": {
+ "enabled": true,
+ "show": false,
+ "qrcode": true,
+ "qrFill": "#999",
+ "qrBack": "#fff"
+ },
+
+ /*
+ Localization, for example "en", "de" etc. - see "_h5ai/conf/l10n" folder for
+ possible values. Adjust it to your needs. If lang is not found
+ it defaults to "en".
+
+ - lang: string, default language
+ - useBroserLang: boolean, try to use browser language
+ */
+ "l10n": {
+ "enabled": true,
+ "lang": "en",
+ "useBrowserLang": true
+ },
+
+ /*
+ Adds Piwik tracker javascript code.
+
+ - baseURL: string, do not include the protocol, e.g. "mydomain.tld/piwik"
+ - idSite: number
+ */
+ "piwik-analytics": {
+ "enabled": false,
+ "baseURL": "some/url",
+ "idSite": 1
+ },
+
+ /*
+ Play a audio preview on click.
+
+ - autoplay: start playing as soon as ready
+ - types: array of strings
+ */
+ "preview-aud": {
+ "enabled": true,
+ "autoplay": true,
+ "types": ["aud"]
+ },
+
+ /*
+ Show an image preview on click.
+
+ - types: array of strings
+ - size: number, sample size, or false for original size
+ */
+ "preview-img": {
+ "enabled": true,
+ "size": false,
+ "types": ["img", "img-bmp", "img-gif", "img-ico", "img-jpg", "img-png", "img-raw", "img-svg"]
+ },
+
+ /*
+ Show text file preview on click.
+
+ Available styles are:
+ 0: floating text
+ 1: fixed width text
+ 2: markdown
+ 3: syntax highlighting
+
+ - styles: dict string to int, maps types to styles
+ */
+ "preview-txt": {
+ "enabled": true,
+ "styles": {
+ "txt": 1,
+ "txt-authors": 1,
+ "txt-c": 3,
+ "txt-cpp": 3,
+ "txt-css": 3,
+ "txt-diff": 1,
+ "txt-go": 3,
+ "txt-h": 3,
+ "txt-hpp": 3,
+ "txt-install": 1,
+ "txt-js": 3,
+ "txt-json": 3,
+ "txt-less": 3,
+ "txt-license": 1,
+ "txt-log": 1,
+ "txt-makefile": 1,
+ "txt-md": 2,
+ "txt-py": 3,
+ "txt-rb": 3,
+ "txt-readme": 1,
+ "txt-rtf": 1,
+ "txt-rust": 3,
+ "txt-script": 3,
+ "txt-xml": 1
+ }
+ },
+
+ /*
+ Play a video preview on click.
+
+ - autoplay: start playing as soon as ready
+ - types: array of strings
+ */
+ "preview-vid": {
+ "enabled": true,
+ "autoplay": true,
+ "types": ["vid-avi", "vid-flv", "vid-mkv", "vid-mov", "vid-mp4", "vid-mpg", "vid-webm"]
+ },
+
+ /*
+ Allow searching files and folders in and below current folder.
+ Checks for substrings.
+
+ If advanced is enabled it checks entries for right order of characters,
+ i.e. "ab" matches "ab", "axb", "xaxbx" but not "ba". Space separated
+ sequences get OR-ed. Searches will be treated as JavaScript regular
+ expressions if you prefix them with "re:".
+
+ - advanced: boolean, use advanced pattern parsing
+ - debounceTime: number, debounce wait time in milliseconds
+ - ignorecase: boolean, ignore case
+ */
+ "search": {
+ "enabled": false,
+ "advanced": true,
+ "debounceTime": 300,
+ "ignorecase": true
+ },
+
+ /*
+ Make entries selectable.
+ At the moment only needed for packaged download.
+
+ - clickndrag: boolean, allow first mouse button + drag selection
+ - checkboxes: boolean, show a checkbox on mouse over item
+ */
+ "select": {
+ "enabled": true,
+ "clickndrag": true,
+ "checkboxes": true
+ },
+
+ /*
+ Default sort order.
+ "column" and "reverse" are locally stored.
+
+ - column: number, 0 for "Name", 1 for "Date", 2 for "Size"
+ - reverse: boolean, false for ascending, true for descending
+ - ignorecase: boolean, compare ignorecase
+ - natural: boolean, use natural sort order
+ - folders: number, where to place folders, 0 for "top", 1 for "in place", 2 for "bottom"
+ */
+ "sort": {
+ "enabled": true,
+ "column": 0,
+ "reverse": false,
+ "ignorecase": true,
+ "natural": true,
+ "folders": 0
+ },
+
+ /*
+ Show thumbnails for image files. Needs the "/_h5ai/cache" folder to be
+ writable for the web Server.
+
+ - img: array of strings
+ - mov: array of strings
+ - doc: array of strings
+ - delay: number, delay in milliseconds after "dom-ready" before thumb-requesting starts
+ - size: number, size in pixel of the generated thumbnails
+ - exif: boolean, use included EXIF thumbs if possible
+ - chunksize: int, number of thumbs per request
+ */
+ "thumbnails": {
+ "enabled": true,
+ "img": ["img-bmp", "img-gif", "img-ico", "img-jpg", "img-png"],
+ "mov": ["vid-avi", "vid-flv", "vid-mkv", "vid-mov", "vid-mp4", "vid-mpg", "vid-webm"],
+ "doc": ["x-pdf", "x-ps"],
+ "delay": 1,
+ "size": 240,
+ "exif": false,
+ "chunksize": 20
+ },
+
+ /*
+ Replace window title with current breadcrumb.
+ */
+ "title": {
+ "enabled": true
+ },
+
+ /*
+ Show a folder tree.
+ Note that this might affect performance significantly.
+
+ - show: boolean, initial visible to first time users
+ - maxSubfolders: number, max number of subfolders to show in tree
+ - naturalSort: boolean, use natural sort order for folders
+ - ignorecase: boolean, sort ignorecase
+ */
+ "tree": {
+ "enabled": true,
+ "show": true,
+ "maxSubfolders": 50,
+ "naturalSort": true,
+ "ignorecase": true
+ }
+}
diff --git a/container/srv-http/root/srv/_h5ai/private/conf/types.json b/container/srv-http/root/srv/_h5ai/private/conf/types.json
new file mode 100755
index 0000000..0b83a3e
--- /dev/null
+++ b/container/srv-http/root/srv/_h5ai/private/conf/types.json
@@ -0,0 +1,76 @@
+/* h5ai v0.29.2 - https://larsjung.de/h5ai/ */
+{
+ "ar": ["*.tar.bz2", "*.crx"],
+ "ar-apk": ["*.apk"],
+ "ar-deb": ["*.deb"],
+ "ar-gz": ["*.gz", "*.tar.gz", "*.tgz"],
+ "ar-rar": ["*.rar"],
+ "ar-rpm": ["*.rpm"],
+ "ar-tar": ["*.tar"],
+ "ar-zip": ["*.7z", "*.bz2", "*.jar", "*.lzma", "*.war", "*.z", "*.Z", "*.zip"],
+ "aud": ["*.aif", "*.aiff", "*.flac", "*.m4a", "*.mid", "*.mp3", "*.mpa", "*.ra", "*.ogg", "*.wav", "*.wma"],
+ "aud-pls": ["*.m3u", "*.m3u8", "*.pls"],
+ "bin": ["*.class", "*.o", "*.so"],
+ "bin-exe": ["*.bat", "*.cmd", "*.exe"],
+ "img": ["*.xpm"],
+ "img-bmp": ["*.bmp"],
+ "img-gif": ["*.gif"],
+ "img-ico": ["*.ico"],
+ "img-jpg": ["*.jpg", "*.jpeg"],
+ "img-png": ["*.png"],
+ "img-raw": ["*.cr2", "*.nef"],
+ "img-svg": ["*.svg"],
+ "img-tiff": ["*.tiff"],
+ "txt": ["*.text", "*.txt"],
+ "txt-build": ["*.pom", "build.xml", "pom.xml"],
+ "txt-c": ["*.c"],
+ "txt-cpp": ["*.cpp"],
+ "txt-css": ["*.css"],
+ "txt-diff": ["*.diff", "*.patch"],
+ "txt-go": ["*.go"],
+ "txt-h": ["*.h"],
+ "txt-html": ["*.htm", "*.html", "*.shtml", "*.xhtml"],
+ "txt-hpp": ["*.hpp"],
+ "txt-java": ["*.java"],
+ "txt-scala": ["*.scala"],
+ "txt-js": ["*.js"],
+ "txt-json": ["*.json"],
+ "txt-less": ["*.less"],
+ "txt-log": ["*.log", "changelog*"],
+ "txt-md": ["*.markdown", "*.md"],
+ "txt-php": ["*.php"],
+ "txt-py": ["*.py"],
+ "txt-rb": ["*.rb"],
+ "txt-rss": ["*.rss"],
+ "txt-rtf": ["*.rtf"],
+ "txt-rust": ["*.rs", "*.rlib"],
+ "txt-script": ["*.conf", "*.bsh", "*.csh", "*.ini", "*.ksh", "*.sh", "*.shar", "*.tcl", "*.zsh"],
+ "txt-source": [],
+ "txt-tex": ["*.tex"],
+ "txt-vcal": ["*.vcal"],
+ "txt-xml": ["*.xml"],
+ "vid": [],
+ "vid-avi": ["*.avi"],
+ "vid-flv": ["*.flv"],
+ "vid-mkv": ["*.mkv"],
+ "vid-mov": ["*.mov"],
+ "vid-mp4": ["*.mp4", "*.m4v"],
+ "vid-mpg": ["*.mpg"],
+ "vid-rm": ["*.rm"],
+ "vid-swf": ["*.swf"],
+ "vid-ts": ["*.ts"],
+ "vid-vob": ["*.vob"],
+ "vid-webm": ["*.webm"],
+ "vid-wmv": ["*.wmv"],
+ "x": [],
+ "x-bak": ["*.bak", "*~"],
+ "x-calc": ["*.ods", "*.ots", "*.xlr", "*.xls", "*.xlsx"],
+ "x-disc": ["*.cue", "*.iso"],
+ "x-doc": ["*.doc", "*.docx", "*.odm", "*.odt", "*.ott"],
+ "x-draw": ["*.drw"],
+ "x-eps": ["*.eps"],
+ "x-pdf": ["*.pdf"],
+ "x-pres": ["*.odp", "*.otp", "*.pps", "*.ppt", "*.pptx"],
+ "x-ps": ["*.ps"],
+ "x-psd": ["*.psd"]
+}
diff --git a/container/srv-http/root/srv/_h5ai/private/php/class-bootstrap.php b/container/srv-http/root/srv/_h5ai/private/php/class-bootstrap.php
new file mode 100755
index 0000000..4356523
--- /dev/null
+++ b/container/srv-http/root/srv/_h5ai/private/php/class-bootstrap.php
@@ -0,0 +1,45 @@
+<?php
+
+class Bootstrap {
+ private static $autopaths = ['core', 'ext'];
+
+ public static function run() {
+ spl_autoload_register(['Bootstrap', 'autoload']);
+ putenv('LANG=en_US.UTF-8');
+ setlocale(LC_CTYPE, 'en_US.UTF-8');
+ date_default_timezone_set(@date_default_timezone_get());
+ session_start();
+
+ $session = new Session($_SESSION);
+ $request = new Request($_REQUEST, file_get_contents('php://input'));
+ $setup = new Setup($request->query_boolean('refresh', false));
+ $context = new Context($session, $request, $setup);
+
+ if ($context->is_api_request()) {
+ (new Api($context))->apply();
+ } elseif ($context->is_info_request()) {
+ $public_href = $setup->get('PUBLIC_HREF');
+ $x_head_tags = $context->get_x_head_html();
+ $fallback_mode = false;
+ require __DIR__ . '/pages/info.php';
+ } else {
+ $public_href = $setup->get('PUBLIC_HREF');
+ $x_head_tags = $context->get_x_head_html();
+ $fallback_mode = $context->is_fallback_mode();
+ $fallback_html = (new Fallback($context))->get_html();
+ require __DIR__ . '/pages/index.php';
+ }
+ }
+
+ public static function autoload($class_name) {
+ $filename = 'class-' . strtolower($class_name) . '.php';
+
+ foreach (Bootstrap::$autopaths as $path) {
+ $file = __DIR__ . '/' . $path . '/' . $filename;
+ if (file_exists($file)) {
+ require_once $file;
+ return true;
+ }
+ }
+ }
+}
diff --git a/container/srv-http/root/srv/_h5ai/private/php/core/class-api.php b/container/srv-http/root/srv/_h5ai/private/php/core/class-api.php
new file mode 100755
index 0000000..30eadd1
--- /dev/null
+++ b/container/srv-http/root/srv/_h5ai/private/php/core/class-api.php
@@ -0,0 +1,109 @@
+<?php
+
+class Api {
+ private $context;
+ private $request;
+ private $setup;
+
+ public function __construct($context) {
+ $this->context = $context;
+ $this->request = $context->get_request();
+ $this->setup = $context->get_setup();
+ }
+
+ public function apply() {
+ $action = $this->request->query('action');
+ $supported = ['download', 'get', 'login', 'logout'];
+ Util::json_fail(Util::ERR_UNSUPPORTED, 'unsupported action', !in_array($action, $supported));
+
+ $methodname = 'on_' . $action;
+ $this->$methodname();
+ }
+
+ private function on_download() {
+ Util::json_fail(Util::ERR_DISABLED, 'download disabled', !$this->context->query_option('download.enabled', false));
+
+ $as = $this->request->query('as');
+ $type = $this->request->query('type');
+ $base_href = $this->request->query('baseHref');
+ $hrefs = $this->request->query('hrefs', '');
+
+ $archive = new Archive($this->context);
+
+ set_time_limit(0);
+ header('Content-Type: application/octet-stream');
+ header('Content-Disposition: attachment; filename="' . $as . '"');
+ header('Connection: close');
+ $ok = $archive->output($type, $base_href, $hrefs);
+
+ Util::json_fail(Util::ERR_FAILED, 'packaging failed', !$ok);
+ exit;
+ }
+
+ private function on_get() {
+ $response = [];
+
+ foreach (['langs', 'options', 'types'] as $name) {
+ if ($this->request->query_boolean($name, false)) {
+ $methodname = 'get_' . $name;
+ $response[$name] = $this->context->$methodname();
+ }
+ }
+
+ if ($this->request->query_boolean('setup', false)) {
+ $response['setup'] = $this->setup->to_jsono($this->context->is_admin());
+ }
+
+ if ($this->request->query_boolean('theme', false)) {
+ $theme = new Theme($this->context);
+ $response['theme'] = $theme->get_icons();
+ }
+
+ if ($this->request->query('items', false)) {
+ $href = $this->request->query('items.href');
+ $what = $this->request->query_numeric('items.what');
+ $response['items'] = $this->context->get_items($href, $what);
+ }
+
+ if ($this->request->query('custom', false)) {
+ Util::json_fail(Util::ERR_DISABLED, 'custom disabled', !$this->context->query_option('custom.enabled', false));
+ $href = $this->request->query('custom');
+ $custom = new Custom($this->context);
+ $response['custom'] = $custom->get_customizations($href);
+ }
+
+ if ($this->request->query('l10n', false)) {
+ Util::json_fail(Util::ERR_DISABLED, 'l10n disabled', !$this->context->query_option('l10n.enabled', false));
+ $iso_codes = $this->request->query_array('l10n');
+ $iso_codes = array_filter($iso_codes);
+ $response['l10n'] = $this->context->get_l10n($iso_codes);
+ }
+
+ if ($this->request->query('search', false)) {
+ Util::json_fail(Util::ERR_DISABLED, 'search disabled', !$this->context->query_option('search.enabled', false));
+ $href = $this->request->query('search.href');
+ $pattern = $this->request->query('search.pattern');
+ $ignorecase = $this->request->query_boolean('search.ignorecase', false);
+ $search = new Search($this->context);
+ $response['search'] = $search->get_items($href, $pattern, $ignorecase);
+ }
+
+ if ($this->request->query('thumbs', false)) {
+ Util::json_fail(Util::ERR_DISABLED, 'thumbnails disabled', !$this->context->query_option('thumbnails.enabled', false));
+ Util::json_fail(Util::ERR_UNSUPPORTED, 'thumbnails not supported', !$this->setup->get('HAS_PHP_JPEG'));
+ $thumbs = $this->request->query_array('thumbs');
+ $response['thumbs'] = $this->context->get_thumbs($thumbs);
+ }
+
+ Util::json_exit($response);
+ }
+
+ private function on_login() {
+ $pass = $this->request->query('pass');
+ Util::json_exit(['asAdmin' => $this->context->login_admin($pass)]);
+ }
+
+ private function on_logout() {
+ Util::json_exit(['asAdmin' => $this->context->logout_admin()]);
+ }
+}
diff --git a/container/srv-http/root/srv/_h5ai/private/php/core/class-context.php b/container/srv-http/root/srv/_h5ai/private/php/core/class-context.php
new file mode 100755
index 0000000..5484f8f
--- /dev/null
+++ b/container/srv-http/root/srv/_h5ai/private/php/core/class-context.php
@@ -0,0 +1,294 @@
+<?php
+
+class Context {
+ private static $DEFAULT_PASSHASH = 'cf83e1357eefb8bdf1542850d66d8007d620e4050b5715dc83f4a921d36ce9ce47d0d13c5d85f2b0ff8318d2877eec2f63b931bd47417a81a538327af927da3e';
+ private static $AS_ADMIN_SESSION_KEY = 'AS_ADMIN';
+
+ private $session;
+ private $request;
+ private $setup;
+ private $options;
+ private $passhash;
+
+ public function __construct($session, $request, $setup) {
+ $this->session = $session;
+ $this->request = $request;
+ $this->setup = $setup;
+
+ $this->options = Json::load($this->setup->get('CONF_PATH') . '/options.json');
+
+ $this->passhash = $this->query_option('passhash', '');
+ $this->options['hasCustomPasshash'] = strcasecmp($this->passhash, Context::$DEFAULT_PASSHASH) !== 0;
+ unset($this->options['passhash']);
+ }
+
+ public function get_session() {
+ return $this->session;
+ }
+
+ public function get_request() {
+ return $this->request;
+ }
+
+ public function get_setup() {
+ return $this->setup;
+ }
+
+ public function get_options() {
+ return $this->options;
+ }
+
+ public function query_option($keypath = '', $default = null) {
+ return Util::array_query($this->options, $keypath, $default);
+ }
+
+ public function get_types() {
+ return Json::load($this->setup->get('CONF_PATH') . '/types.json');
+ }
+
+ public function login_admin($pass) {
+ $this->session->set(Context::$AS_ADMIN_SESSION_KEY, strcasecmp(hash('sha512', $pass), $this->passhash) === 0);
+ return $this->session->get(Context::$AS_ADMIN_SESSION_KEY);
+ }
+
+ public function logout_admin() {
+ $this->session->set(Context::$AS_ADMIN_SESSION_KEY, false);
+ return $this->session->get(Context::$AS_ADMIN_SESSION_KEY);
+ }
+
+ public function is_admin() {
+ return $this->session->get(Context::$AS_ADMIN_SESSION_KEY);
+ }
+
+ public function is_api_request() {
+ return strtolower($this->setup->get('REQUEST_METHOD')) === 'post';
+ }
+
+ public function is_info_request() {
+ return Util::starts_with($this->setup->get('REQUEST_HREF') . '/', $this->setup->get('PUBLIC_HREF'));
+ }
+
+ public function is_text_browser() {
+ return preg_match('/curl|links|lynx|w3m/i', $this->setup->get('HTTP_USER_AGENT')) === 1;
+ }
+
+ public function is_fallback_mode() {
+ return $this->query_option('view.fallbackMode', false) || $this->is_text_browser();
+ }
+
+ public function to_href($path, $trailing_slash = true) {
+ $rel_path = substr($path, strlen($this->setup->get('ROOT_PATH')));
+ $parts = explode('/', $rel_path);
+ $encoded_parts = [];
+ foreach ($parts as $part) {
+ if ($part != '') {
+ $encoded_parts[] = rawurlencode($part);
+ }
+ }
+
+ return Util::normalize_path($this->setup->get('ROOT_HREF') . implode('/', $encoded_parts), $trailing_slash);
+ }
+
+ public function to_path($href) {
+ $rel_href = substr($href, strlen($this->setup->get('ROOT_HREF')));
+ return Util::normalize_path($this->setup->get('ROOT_PATH') . '/' . rawurldecode($rel_href));
+ }
+
+ public function is_hidden($name) {
+ // always hide
+ if ($name === '.' || $name === '..') {
+ return true;
+ }
+
+ foreach ($this->query_option('view.hidden', []) as $re) {
+ $re = Util::wrap_pattern($re);
+ if (preg_match($re, $name)) {
+ return true;
+ }
+ }
+
+ return false;
+ }
+
+ public function read_dir($path) {
+ $names = [];
+ if (is_dir($path)) {
+ foreach (scandir($path) as $name) {
+ if (
+ $this->is_hidden($name)
+ || $this->is_hidden($this->to_href($path) . $name)
+ || (!is_readable($path . '/' . $name) && $this->query_option('view.hideIf403', false))
+ ) {
+ continue;
+ }
+ $names[] = $name;
+ }
+ }
+ return $names;
+ }
+
+ public function is_managed_href($href) {
+ return $this->is_managed_path($this->to_path($href));
+ }
+
+ public function is_managed_path($path) {
+ if (!is_dir($path) || strpos($path, '../') !== false || strpos($path, '/..') !== false || $path === '..') {
+ return false;
+ }
+
+ if (strpos($path, $this->setup->get('PUBLIC_PATH')) === 0) {
+ return false;
+ }
+
+ if (strpos($path, $this->setup->get('PRIVATE_PATH')) === 0) {
+ return false;
+ }
+
+ foreach ($this->query_option('view.unmanaged', []) as $name) {
+ if (file_exists($path . '/' . $name)) {
+ return false;
+ }
+ }
+
+ while ($path !== $this->setup->get('ROOT_PATH')) {
+ if (@is_dir($path . '/_h5ai/private/conf')) {
+ return false;
+ }
+ $parent_path = Util::normalize_path(dirname($path));
+ if ($parent_path === $path) {
+ return false;
+ }
+ $path = $parent_path;
+ }
+ return true;
+ }
+
+ public function get_current_path() {
+ $current_href = Util::normalize_path($this->setup->get('REQUEST_HREF'), true);
+ $current_path = $this->to_path($current_href);
+
+ if (!is_dir($current_path)) {
+ $current_path = Util::normalize_path(dirname($current_path), false);
+ }
+
+ return $current_path;
+ }
+
+ public function get_items($href, $what) {
+ if (!$this->is_managed_href($href)) {
+ return [];
+ }
+
+ $cache = [];
+ $folder = Item::get($this, $this->to_path($href), $cache);
+
+ // add content of subfolders
+ if ($what >= 2 && $folder !== null) {
+ foreach ($folder->get_content($cache) as $item) {
+ $item->get_content($cache);
+ }
+ $folder = $folder->get_parent($cache);
+ }
+
+ // add content of this folder and all parent folders
+ while ($what >= 1 && $folder !== null) {
+ $folder->get_content($cache);
+ $folder = $folder->get_parent($cache);
+ }
+
+ uasort($cache, ['Item', 'cmp']);
+ $result = [];
+ foreach ($cache as $p => $item) {
+ $result[] = $item->to_json_object();
+ }
+
+ return $result;
+ }
+
+ public function get_langs() {
+ $langs = [];
+ $l10n_path = $this->setup->get('CONF_PATH') . '/l10n';
+ if (is_dir($l10n_path)) {
+ if ($dir = opendir($l10n_path)) {
+ while (($file = readdir($dir)) !== false) {
+ if (Util::ends_with($file, '.json')) {
+ $translations = Json::load($l10n_path . '/' . $file);
+ $langs[basename($file, '.json')] = $translations['lang'];
+ }
+ }
+ closedir($dir);
+ }
+ }
+ ksort($langs);
+ return $langs;
+ }
+
+ public function get_l10n($iso_codes) {
+ $results = [];
+
+ foreach ($iso_codes as $iso_code) {
+ $file = $this->setup->get('CONF_PATH') . '/l10n/' . $iso_code . '.json';
+ $results[$iso_code] = Json::load($file);
+ $results[$iso_code]['isoCode'] = $iso_code;
+ }
+
+ return $results;
+ }
+
+ public function get_thumbs($requests) {
+ $hrefs = [];
+
+ foreach ($requests as $req) {
+ $thumb = new Thumb($this);
+ $hrefs[] = $thumb->thumb($req['type'], $req['href'], $req['width'], $req['height']);
+ }
+
+ return $hrefs;
+ }
+
+ private function prefix_x_head_href($href) {
+ if (preg_match('@^(https?://|/)@i', $href)) {
+ return $href;
+ }
+
+ return $this->setup->get('PUBLIC_HREF') . 'ext/' . $href;
+ }
+
+ private function get_fonts_html() {
+ $fonts = $this->query_option('view.fonts', []);
+ $fonts_mono = $this->query_option('view.fontsMono', []);
+
+ $html = '<style class="x-head">';
+
+ if (sizeof($fonts) > 0) {
+ $html .= '#root,input,select{font-family:"' . implode('","', $fonts) . '"!important}';
+ }
+
+ if (sizeof($fonts_mono) > 0) {
+ $html .= 'pre,code{font-family:"' . implode('","', $fonts_mono) . '"!important}';
+ }
+
+ $html .= '</style>';
+
+ return $html;
+ }
+
+ public function get_x_head_html() {
+ $scripts = $this->query_option('resources.scripts', []);
+ $styles = $this->query_option('resources.styles', []);
+
+ $html = '';
+
+ foreach ($styles as $href) {
+ $html .= '<link rel="stylesheet" href="' . $this->prefix_x_head_href($href) . '" class="x-head">';
+ }
+
+ foreach ($scripts as $href) {
+ $html .= '<script src="' . $this->prefix_x_head_href($href) . '" class="x-head"></script>';
+ }
+
+ $html .= $this->get_fonts_html();
+
+ return $html;
+ }
+}
diff --git a/container/srv-http/root/srv/_h5ai/private/php/core/class-fallback.php b/container/srv-http/root/srv/_h5ai/private/php/core/class-fallback.php
new file mode 100755
index 0000000..7bd317f
--- /dev/null
+++ b/container/srv-http/root/srv/_h5ai/private/php/core/class-fallback.php
@@ -0,0 +1,54 @@
+<?php
+
+class Fallback {
+ private $context;
+
+ public function __construct($context) {
+ $this->context = $context;
+ }
+
+ public function get_html($path = null) {
+ if (!$path) {
+ $path = $this->context->get_current_path();
+ }
+ $fallback_images_href = $this->context->get_setup()->get('PUBLIC_HREF') . 'images/fallback/';
+
+ $cache = [];
+ $folder = Item::get($this->context, $path, $cache);
+ $items = $folder->get_content($cache);
+ uasort($items, ['Item', 'cmp']);
+
+ $html = '<table>';
+
+ $html .= '<tr>';
+ $html .= '<th class="fb-i"></th>';
+ $html .= '<th class="fb-n"><span>Name</span></th>';
+ $html .= '<th class="fb-d"><span>Last modified</span></th>';
+ $html .= '<th class="fb-s"><span>Size</span></th>';
+ $html .= '</tr>';
+
+ if ($folder->get_parent($cache)) {
+ $html .= '<tr>';
+ $html .= '<td class="fb-i"><img src="' . $fallback_images_href . 'folder-parent.png" alt="folder-parent"/></td>';
+ $html .= '<td class="fb-n"><a href="..">Parent Directory</a></td>';
+ $html .= '<td class="fb-d"></td>';
+ $html .= '<td class="fb-s"></td>';
+ $html .= '</tr>';
+ }
+
+ foreach ($items as $item) {
+ $type = $item->is_folder ? 'folder' : 'file';
+
+ $html .= '<tr>';
+ $html .= '<td class="fb-i"><img src="' . $fallback_images_href . $type . '.png" alt="' . $type . '"/></td>';
+ $html .= '<td class="fb-n"><a href="' . $item->href . '">' . basename($item->path) . '</a></td>';
+ $html .= '<td class="fb-d">' . date('Y-m-d H:i', $item->date) . '</td>';
+ $html .= '<td class="fb-s">' . ($item->size !== null ? intval($item->size / 1000) . ' KB' : '' ) . '</td>';
+ $html .= '</tr>';
+ }
+
+ $html .= '</table>';
+
+ return $html;
+ }
+}
diff --git a/container/srv-http/root/srv/_h5ai/private/php/core/class-filesize.php b/container/srv-http/root/srv/_h5ai/private/php/core/class-filesize.php
new file mode 100755
index 0000000..477f9e2
--- /dev/null
+++ b/container/srv-http/root/srv/_h5ai/private/php/core/class-filesize.php
@@ -0,0 +1,96 @@
+<?php
+
+class Filesize {
+ private static $cache = [];
+
+ public static function getSize($path, $withFoldersize, $withDu) {
+ $fs = new Filesize();
+ return $fs->size($path, $withFoldersize, $withDu);
+ }
+
+ public static function getCachedSize($path, $withFoldersize, $withDu) {
+ if (array_key_exists($path, Filesize::$cache)) {
+ return Filesize::$cache[$path];
+ }
+
+ $size = Filesize::getSize($path, $withFoldersize, $withDu);
+
+ Filesize::$cache[$path] = $size;
+ return $size;
+ }
+
+
+ private function __construct() {}
+
+ private function read_dir($path) {
+ $paths = [];
+ if (is_dir($path)) {
+ foreach (scandir($path) as $name) {
+ if ($name !== '.' && $name !== '..') {
+ $paths[] = $path . '/' . $name;
+ }
+ }
+ }
+ return $paths;
+ }
+
+ private function php_filesize($path, $recursive = false) {
+ // if (PHP_INT_SIZE < 8) {
+ // }
+ $size = @filesize($path);
+
+ if (!is_dir($path) || !$recursive) {
+ return $size;
+ }
+
+ foreach ($this->read_dir($path) as $p) {
+ $size += $this->php_filesize($p, true);
+ }
+ return $size;
+ }
+
+
+ private function exec($cmdv) {
+ $cmd = implode(' ', array_map('escapeshellarg', $cmdv));
+ $lines = [];
+ $rc = null;
+ exec($cmd, $lines, $rc);
+ return $lines;
+ }
+
+ private function exec_du_all($paths) {
+ $cmdv = array_merge(['du', '-sbL'], $paths);
+ $lines = $this->exec($cmdv);
+
+ $sizes = [];
+ foreach ($lines as $line) {
+ $parts = preg_split('/[\s]+/', $line, 2);
+ $size = intval($parts[0], 10);
+ $path = $parts[1];
+ $sizes[$path] = $size;
+ }
+ return $sizes;
+ }
+
+ private function exec_du($path) {
+ $sizes = $this->exec_du_all([$path]);
+ return $sizes[$path];
+ }
+
+
+ private function size($path, $withFoldersize = false, $withDu = false) {
+ if (is_file($path)) {
+ return $this->php_filesize($path);
+ }
+
+ if (is_dir($path) && $withFoldersize) {
+ if ($withDu) {
+ return $this->exec_du($path);
+ }
+
+ return $this->php_filesize($path, true);
+ }
+
+ return null;
+ }
+}
diff --git a/container/srv-http/root/srv/_h5ai/private/php/core/class-item.php b/container/srv-http/root/srv/_h5ai/private/php/core/class-item.php
new file mode 100755
index 0000000..2b9ce34
--- /dev/null
+++ b/container/srv-http/root/srv/_h5ai/private/php/core/class-item.php
@@ -0,0 +1,91 @@
+<?php
+
+class Item {
+ public static function cmp($item1, $item2) {
+ if ($item1->is_folder && !$item2->is_folder) {
+ return -1;
+ }
+ if (!$item1->is_folder && $item2->is_folder) {
+ return 1;
+ }
+
+ return strcasecmp($item1->path, $item2->path);
+ }
+
+ public static function get($context, $path, &$cache) {
+ if (!Util::starts_with($path, $context->get_setup()->get('ROOT_PATH'))) {
+ return null;
+ }
+
+ if (is_array($cache) && array_key_exists($path, $cache)) {
+ return $cache[$path];
+ }
+
+ $item = new Item($context, $path);
+
+ if (is_array($cache)) {
+ $cache[$path] = $item;
+ }
+ return $item;
+ }
+
+ public $context;
+ public $path;
+ public $href;
+ public $date;
+ public $size;
+ public $is_folder;
+ public $is_content_fetched;
+
+ private function __construct($context, $path) {
+ $this->context = $context;
+
+ $this->path = Util::normalize_path($path, false);
+ $this->is_folder = is_dir($this->path);
+ $this->href = $context->to_href($this->path, $this->is_folder);
+ $this->date = @filemtime($this->path);
+ $this->size = Util::filesize($context, $this->path);
+ $this->is_content_fetched = false;
+ }
+
+ public function to_json_object() {
+ $obj = [
+ 'href' => $this->href,
+ 'time' => $this->date * 1000, // seconds (PHP) to milliseconds (JavaScript)
+ 'size' => $this->size
+ ];
+
+ if ($this->is_folder) {
+ $obj['managed'] = $this->context->is_managed_href($this->href);
+ $obj['fetched'] = $this->is_content_fetched;
+ }
+
+ return $obj;
+ }
+
+ public function get_parent(&$cache) {
+ $parent_path = Util::normalize_path(dirname($this->path), false);
+ if ($parent_path !== $this->path && Util::starts_with($parent_path, $this->context->get_setup()->get('ROOT_PATH'))) {
+ return Item::get($this->context, $parent_path, $cache);
+ }
+ return null;
+ }
+
+ public function get_content(&$cache) {
+ $items = [];
+
+ if (!$this->context->is_managed_href($this->href)) {
+ return $items;
+ }
+
+ $files = $this->context->read_dir($this->path);
+ foreach ($files as $file) {
+ $item = Item::get($this->context, $this->path . '/' . $file, $cache);
+ $items[$item->path] = $item;
+ }
+
+ $this->is_content_fetched = true;
+
+ return $items;
+ }
+}
diff --git a/container/srv-http/root/srv/_h5ai/private/php/core/class-json.php b/container/srv-http/root/srv/_h5ai/private/php/core/class-json.php
new file mode 100755
index 0000000..f662b9f
--- /dev/null
+++ b/container/srv-http/root/srv/_h5ai/private/php/core/class-json.php
@@ -0,0 +1,65 @@
+<?php
+
+class Json {
+ const SINGLE = 1;
+ const MULTI = 2;
+
+ public static function load($path) {
+ if (!is_readable($path)) {
+ return [];
+ }
+
+ $json = file_get_contents($path);
+ return Json::decode($json);
+ }
+
+ public static function save($path, $obj) {
+ $json = json_encode($obj);
+ return file_put_contents($path, $json) !== false;
+ }
+
+ private static function decode($json) {
+ $json = Json::strip($json);
+ return json_decode($json, true);
+ }
+
+ private static function strip($commented_json) {
+ $insideString = false;
+ $insideComment = false;
+ $json = '';
+
+ for ($i = 0, $len = strlen($commented_json); $i < $len; $i += 1) {
+ $char = $commented_json[$i];
+ $charchar = $char . @$commented_json[$i + 1];
+ $prevChar = @$commented_json[$i - 1];
+
+ if (!$insideComment && $char === '"' && $prevChar !== "\\") {
+ $insideString = !$insideString;
+ }
+
+ if ($insideString) {
+ $json .= $char;
+ } elseif (!$insideComment && $charchar === '//') {
+ $insideComment = Json::SINGLE;
+ $i += 1;
+ } elseif (!$insideComment && $charchar === '/*') {
+ $insideComment = Json::MULTI;
+ $i += 1;
+ } elseif (!$insideComment) {
+ $json .= $char;
+ } elseif ($insideComment === Json::SINGLE && $charchar === "\r\n") {
+ $insideComment = false;
+ $json .= $charchar;
+ $i += 1;
+ } elseif ($insideComment === Json::SINGLE && $char === "\n") {
+ $insideComment = false;
+ $json .= $char;
+ } elseif ($insideComment === Json::MULTI && $charchar === '*/') {
+ $insideComment = false;
+ $i += 1;
+ }
+ }
+
+ return $json;
+ }
+}
diff --git a/container/srv-http/root/srv/_h5ai/private/php/core/class-logger.php b/container/srv-http/root/srv/_h5ai/private/php/core/class-logger.php
new file mode 100755
index 0000000..504bb3c
--- /dev/null
+++ b/container/srv-http/root/srv/_h5ai/private/php/core/class-logger.php
@@ -0,0 +1,28 @@
+<?php
+
+class Logger {
+ private static $start;
+ private static $prev;
+
+ private static function time() {
+ return microtime(true) * 1000; // sec * 1000 = ms
+ }
+
+ public static function init() {
+ self::$start = self::time();
+ self::$prev = self::$start;
+ register_shutdown_function(function () { Logger::log('shutdown'); });
+ Logger::log('--------------------------------');
+ }
+
+ public static function log($message=null, $obj=null) {
+ $now = self::time();
+ $message = number_format($now - self::$start, 3) . ' ' . number_format($now - self::$prev, 3) . ' ' . $message;
+
+ @error_log($message . ' ' . var_export($obj, true));
+
+ self::$prev = $now;
+ }
+}
+
+Logger::init();
diff --git a/container/srv-http/root/srv/_h5ai/private/php/core/class-request.php b/container/srv-http/root/srv/_h5ai/private/php/core/class-request.php
new file mode 100755
index 0000000..95bae09
--- /dev/null
+++ b/container/srv-http/root/srv/_h5ai/private/php/core/class-request.php
@@ -0,0 +1,38 @@
+<?php
+
+class Request {
+ private $params;
+
+ public function __construct($params, $body) {
+ $data = json_decode($body, true);
+ $this->params = $data !== null ? $data : $params;
+ }
+
+ public function query($keypath = '', $default = Util::NO_DEFAULT) {
+ $value = Util::array_query($this->params, $keypath, Util::NO_DEFAULT);
+
+ if ($value === Util::NO_DEFAULT) {
+ Util::json_fail(Util::ERR_MISSING_PARAM, 'parameter \'' . $keypath . '\' is missing', $default === Util::NO_DEFAULT);
+ return $default;
+ }
+
+ return $value;
+ }
+
+ public function query_boolean($keypath = '', $default = Util::NO_DEFAULT) {
+ $value = $this->query($keypath, $default);
+ return filter_var($value, FILTER_VALIDATE_BOOLEAN);
+ }
+
+ public function query_numeric($keypath = '', $default = Util::NO_DEFAULT) {
+ $value = $this->query($keypath, $default);
+ Util::json_fail(Util::ERR_ILLIGAL_PARAM, 'parameter \'' . $keypath . '\' is not numeric', !is_numeric($value));
+ return intval($value, 10);
+ }
+
+ public function query_array($keypath = '', $default = Util::NO_DEFAULT) {
+ $value = $this->query($keypath, $default);
+ Util::json_fail(Util::ERR_ILLIGAL_PARAM, 'parameter \'' . $keypath . '\' is no array', !is_array($value));
+ return $value;
+ }
+}
diff --git a/container/srv-http/root/srv/_h5ai/private/php/core/class-session.php b/container/srv-http/root/srv/_h5ai/private/php/core/class-session.php
new file mode 100755
index 0000000..630d78f
--- /dev/null
+++ b/container/srv-http/root/srv/_h5ai/private/php/core/class-session.php
@@ -0,0 +1,20 @@
+<?php
+
+class Session {
+ private static $KEY_PREFIX = '__H5AI__';
+ private $store;
+
+ public function __construct(&$store) {
+ $this->store = &$store;
+ }
+
+ public function set($key, $value) {
+ $key = Session::$KEY_PREFIX . $key;
+ $this->store[$key] = $value;
+ }
+
+ public function get($key, $default = null) {
+ $key = Session::$KEY_PREFIX . $key;
+ return array_key_exists($key, $this->store) ? $this->store[$key] : $default;
+ }
+}
diff --git a/container/srv-http/root/srv/_h5ai/private/php/core/class-setup.php b/container/srv-http/root/srv/_h5ai/private/php/core/class-setup.php
new file mode 100755
index 0000000..d0c3fb2
--- /dev/null
+++ b/container/srv-http/root/srv/_h5ai/private/php/core/class-setup.php
@@ -0,0 +1,185 @@
+<?php
+
+class Setup {
+ private $store;
+ private $refresh;
+
+ public function __construct($refresh = false) {
+ $this->store = [];
+ $this->refresh = $refresh;
+
+ $this->add_globals_and_envs();
+ $this->add_php_checks();
+ $this->add_app_metadata();
+ $this->add_server_metadata_and_check();
+ $this->add_paths();
+ $this->add_sys_cmd_checks();
+ }
+
+ private function set($key, $value) {
+ if (array_key_exists($key, $this->store)) {
+ Logger::log('setup key already taken', [
+ 'key' => $key,
+ 'value' => $value,
+ 'found' => $this->store[$key]
+ ]);
+ exit;
+ }
+ if (!is_string($value) && !is_bool($value)) {
+ Logger::log('setup value neither string nor boolean', [
+ 'key' => $key,
+ 'value' => $value
+ ]);
+ exit;
+ }
+
+ $this->store[$key] = $value;
+ }
+
+ public function get($key) {
+ if (!array_key_exists($key, $this->store)) {
+ Logger::log('setup key not found', ['key' => $key]);
+ exit;
+ }
+
+ return $this->store[$key];
+ }
+
+ private function add_globals_and_envs() {
+ $this->set('PHP_VERSION', PHP_VERSION);
+ $this->set('MIN_PHP_VERSION', MIN_PHP_VERSION);
+ $this->set('PHP_ARCH', (PHP_INT_SIZE * 8) . '-bit');
+
+ $this->set('REQUEST_METHOD', $_SERVER['REQUEST_METHOD']);
+ $this->set('REQUEST_HREF', parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH));
+ $this->set('SCRIPT_NAME', $_SERVER['SCRIPT_NAME']);
+ $this->set('SERVER_SOFTWARE', $_SERVER['SERVER_SOFTWARE']);
+ $this->set('HTTP_USER_AGENT', $_SERVER['HTTP_USER_AGENT']);
+ }
+
+ private function add_php_checks() {
+ $this->set('HAS_PHP_EXIF', function_exists('exif_thumbnail'));
+
+ $has_php_jpeg = false;
+ if (function_exists('gd_info')) {
+ $infos = gd_info();
+ $has_php_jpeg = array_key_exists('JPEG Support', $infos) && $infos['JPEG Support'];
+ }
+ $this->set('HAS_PHP_JPEG', $has_php_jpeg);
+ }
+
+ private function add_app_metadata() {
+ $this->set('NAME', 'h5ai');
+ $this->set('VERSION', H5AI_VERSION);
+ $this->set('FILE_PREFIX', '_h5ai');
+ }
+
+ private function add_server_metadata_and_check() {
+ $server_software = $this->get('SERVER_SOFTWARE');
+ $server_name = null;
+ $server_version = null;
+
+ if ($server_software && preg_match('#^(.*?)(?:/(.*?))?(?: |$)#', strtolower($server_software), $matches)) {
+ $server_name = $matches[1];
+ $server_version = count($matches) > 2 ? $matches[2] : '';
+ }
+
+ $this->set('SERVER_NAME', $server_name);
+ $this->set('SERVER_VERSION', $server_version);
+ $this->set('HAS_SERVER', in_array($server_name, ['apache', 'lighttpd', 'nginx', 'cherokee']));
+ }
+
+ private function add_paths() {
+ $script_name = $this->get('SCRIPT_NAME');
+ if ($this->get('SERVER_NAME') === 'lighttpd') {
+ $script_name = preg_replace('#^.*?//#', '/', $script_name);
+ }
+
+ $this->set('H5AI_HREF', Util::normalize_path(dirname(dirname($script_name)), true));
+ $this->set('H5AI_PATH', Util::normalize_path(dirname(dirname(dirname(dirname(__FILE__)))), false));
+
+ $this->set('ROOT_HREF', Util::normalize_path(dirname($this->get('H5AI_HREF')), true));
+ $this->set('ROOT_PATH', Util::normalize_path(dirname($this->get('H5AI_PATH')), false));
+
+ $this->set('PUBLIC_HREF', Util::normalize_path($this->get('H5AI_HREF') . '/public/', true));
+ $this->set('PUBLIC_PATH', Util::normalize_path($this->get('H5AI_PATH') . '/public/', false));
+
+ $this->set('INDEX_HREF', Util::normalize_path($this->get('PUBLIC_HREF') . '/index.php', false));
+ $this->set('CACHE_PUB_HREF', Util::normalize_path($this->get('PUBLIC_HREF') . '/cache', true));
+ $this->set('CACHE_PUB_PATH', Util::normalize_path($this->get('PUBLIC_PATH') . '/cache', false));
+ $this->set('HAS_WRITABLE_CACHE_PUB', @is_writable($this->get('CACHE_PUB_PATH')));
+
+ $this->set('PRIVATE_PATH', Util::normalize_path($this->get('H5AI_PATH') . '/private', false));
+ $this->set('CONF_PATH', Util::normalize_path($this->get('PRIVATE_PATH') . '/conf', false));
+ $this->set('CACHE_PRV_PATH', Util::normalize_path($this->get('PRIVATE_PATH') . '/cache', false));
+ $this->set('HAS_WRITABLE_CACHE_PRV', @is_writable($this->get('CACHE_PRV_PATH')));
+ }
+
+ private function add_sys_cmd_checks() {
+ $cmds_cache_path = Util::normalize_path($this->get('CACHE_PRV_PATH') . '/cmds.json', false);
+
+ $cmds = Json::load($cmds_cache_path);
+ if (sizeof($cmds) === 0 || $this->refresh) {
+ $cmds['command'] = Util::exec_0('command -v command');
+ $cmds['which'] = Util::exec_0('which which') || Util::exec_0('which which.exe');
+
+ $cmd = false;
+ if ($cmds['command']) {
+ $cmd = 'command -v';
+ } elseif ($cmds['which']) {
+ $cmd = 'which';
+ }
+
+ foreach (['avconv', 'convert', 'du', 'ffmpeg', 'gm', 'tar', 'zip'] as $c) {
+ $cmds[$c] = ($cmd !== false) && (Util::exec_0($cmd . ' ' . $c) || Util::exec_0($cmd . ' ' . $c . '.exe'));
+ }
+
+ Json::save($cmds_cache_path, $cmds);
+ }
+ foreach ($cmds as $c => $has) {
+ $this->set('HAS_CMD_' . strtoupper($c), $has);
+ }
+ }
+
+ public function to_jsono($as_admin = false) {
+ $keys = [
+ 'PUBLIC_HREF',
+ 'ROOT_HREF'
+ ];
+
+ if ($as_admin) {
+ $keys = array_merge($keys, [
+ 'VERSION',
+
+ 'PHP_VERSION',
+ 'MIN_PHP_VERSION',
+ 'PHP_ARCH',
+ 'HAS_PHP_EXIF',
+ 'HAS_PHP_JPEG',
+
+ 'SERVER_NAME',
+ 'SERVER_VERSION',
+ 'HAS_SERVER',
+
+ 'INDEX_HREF',
+
+ 'HAS_WRITABLE_CACHE_PUB',
+ 'HAS_WRITABLE_CACHE_PRV',
+
+ 'HAS_CMD_AVCONV',
+ 'HAS_CMD_CONVERT',
+ 'HAS_CMD_DU',
+ 'HAS_CMD_FFMPEG',
+ 'HAS_CMD_GM',
+ 'HAS_CMD_TAR',
+ 'HAS_CMD_ZIP'
+ ]);
+ }
+
+ $jsono = ['AS_ADMIN' => $as_admin];
+ foreach ($keys as $key) {
+ $jsono[$key] = $this->get($key);
+ }
+ return $jsono;
+ }
+}
diff --git a/container/srv-http/root/srv/_h5ai/private/php/core/class-theme.php b/container/srv-http/root/srv/_h5ai/private/php/core/class-theme.php
new file mode 100755
index 0000000..8fcaddd
--- /dev/null
+++ b/container/srv-http/root/srv/_h5ai/private/php/core/class-theme.php
@@ -0,0 +1,32 @@
+<?php
+
+class Theme {
+ private static $EXTENSIONS = ['svg', 'png', 'jpg'];
+ private $context;
+
+ public function __construct($context) {
+ $this->context = $context;
+ }
+
+ public function get_icons() {
+ $public_path = $this->context->get_setup()->get('PUBLIC_PATH');
+ $theme = $this->context->query_option('view.theme', '-NONE-');
+ $theme_path = $public_path . '/images/themes/' . $theme;
+
+ $icons = [];
+
+ if (is_dir($theme_path)) {
+ if ($dir = opendir($theme_path)) {
+ while (($name = readdir($dir)) !== false) {
+ $path_parts = pathinfo($name);
+ if (in_array(@$path_parts['extension'], Theme::$EXTENSIONS)) {
+ $icons[$path_parts['filename']] = $theme . '/' . $name;
+ }
+ }
+ closedir($dir);
+ }
+ }
+
+ return $icons;
+ }
+}
diff --git a/container/srv-http/root/srv/_h5ai/private/php/core/class-util.php b/container/srv-http/root/srv/_h5ai/private/php/core/class-util.php
new file mode 100755
index 0000000..ce6c802
--- /dev/null
+++ b/container/srv-http/root/srv/_h5ai/private/php/core/class-util.php
@@ -0,0 +1,89 @@
+<?php
+
+class Util {
+ const ERR_MISSING_PARAM = 'ERR_MISSING_PARAM';
+ const ERR_ILLIGAL_PARAM = 'ERR_ILLIGAL_PARAM';
+ const ERR_FAILED = 'ERR_FAILED';
+ const ERR_DISABLED = 'ERR_DISABLED';
+ const ERR_UNSUPPORTED = 'ERR_UNSUPPORTED';
+ const NO_DEFAULT = 'NO_*@+#?!_DEFAULT';
+ const RE_DELIMITER = '@';
+
+ public static function normalize_path($path, $trailing_slash = false) {
+ $path = preg_replace('#[\\\\/]+#', '/', $path);
+ return preg_match('#^(\w:)?/$#', $path) ? $path : (rtrim($path, '/') . ($trailing_slash ? '/' : ''));
+ }
+
+ public static function json_exit($obj = []) {
+ header('Content-type: application/json;charset=utf-8');
+ echo json_encode($obj);
+ exit;
+ }
+
+ public static function json_fail($err, $msg = '', $cond = true) {
+ if ($cond) {
+ Util::json_exit(['err' => $err, 'msg' => $msg]);
+ }
+ }
+
+ public static function array_query($array, $keypath = '', $default = Util::NO_DEFAULT) {
+ $value = $array;
+
+ $keys = array_filter(explode('.', $keypath));
+ foreach ($keys as $key) {
+ if (!is_array($value) || !array_key_exists($key, $value)) {
+ return $default;
+ }
+ $value = $value[$key];
+ }
+
+ return $value;
+ }
+
+ public static function starts_with($sequence, $head) {
+ return substr($sequence, 0, strlen($head)) === $head;
+ }
+
+ public static function ends_with($sequence, $tail) {
+ $len = strlen($tail);
+ return $len === 0 ? true : substr($sequence, -$len) === $tail;
+ }
+
+ public static function wrap_pattern($pattern) {
+ return Util::RE_DELIMITER . str_replace(Util::RE_DELIMITER, '\\' . Util::RE_DELIMITER, $pattern) . Util::RE_DELIMITER;
+ }
+
+ public static function passthru_cmd($cmd) {
+ $rc = null;
+ passthru($cmd, $rc);
+ return $rc;
+ }
+
+ public static function exec_cmdv($cmdv) {
+ if (!is_array($cmdv)) {
+ $cmdv = func_get_args();
+ }
+ $cmd = implode(' ', array_map('escapeshellarg', $cmdv));
+
+ $lines = [];
+ $rc = null;
+ exec($cmd, $lines, $rc);
+ return implode("\n", $lines);
+ }
+
+ public static function exec_0($cmd) {
+ $lines = [];
+ $rc = null;
+ try {
+ @exec($cmd, $lines, $rc);
+ return $rc === 0;
+ } catch (Exception $e) {}
+ return false;
+ }
+
+ public static function filesize($context, $path) {
+ $withFoldersize = $context->query_option('foldersize.enabled', false);
+ $withDu = $context->get_setup()->get('HAS_CMD_DU') && $context->query_option('foldersize.type', null) === 'shell-du';
+ return Filesize::getCachedSize($path, $withFoldersize, $withDu);
+ }
+}
diff --git a/container/srv-http/root/srv/_h5ai/private/php/ext/class-archive.php b/container/srv-http/root/srv/_h5ai/private/php/ext/class-archive.php
new file mode 100755
index 0000000..fec07de
--- /dev/null
+++ b/container/srv-http/root/srv/_h5ai/private/php/ext/class-archive.php
@@ -0,0 +1,183 @@
+<?php
+
+class Archive {
+ const NULL_BYTE = "\0";
+
+ private static $SEGMENT_SIZE = 16777216; // 1024 * 1024 * 16 = 16MiB
+ private static $TAR_PASSTHRU_CMD = 'cd [ROOTDIR] && tar --no-recursion -c -- [DIRS] [FILES]';
+ private static $ZIP_PASSTHRU_CMD = 'cd [ROOTDIR] && zip - -- [FILES]';
+
+ private $context;
+ private $base_path;
+ private $dirs;
+ private $files;
+
+ public function __construct($context) {
+ $this->context = $context;
+ }
+
+ public function output($type, $base_href, $hrefs) {
+ $this->base_path = $this->context->to_path($base_href);
+ if (!$this->context->is_managed_path($this->base_path)) {
+ return false;
+ }
+
+ $this->dirs = [];
+ $this->files = [];
+
+ $this->add_hrefs($hrefs);
+
+ if (count($this->dirs) === 0 && count($this->files) === 0) {
+ if ($type === 'php-tar') {
+ $this->add_dir($this->base_path, '/');
+ } else {
+ $this->add_dir($this->base_path, '.');
+ }
+ }
+
+ if ($type === 'php-tar') {
+ return $this->php_tar($this->dirs, $this->files);
+ } elseif ($type === 'shell-tar') {
+ return $this->shell_cmd(Archive::$TAR_PASSTHRU_CMD);
+ } elseif ($type === 'shell-zip') {
+ return $this->shell_cmd(Archive::$ZIP_PASSTHRU_CMD);
+ }
+ return false;
+ }
+
+ private function shell_cmd($cmd) {
+ $cmd = str_replace('[ROOTDIR]', escapeshellarg($this->base_path), $cmd);
+ $cmd = str_replace('[DIRS]', count($this->dirs) ? implode(' ', array_map('escapeshellarg', $this->dirs)) : '', $cmd);
+ $cmd = str_replace('[FILES]', count($this->files) ? implode(' ', array_map('escapeshellarg', $this->files)) : '', $cmd);
+ try {
+ Util::passthru_cmd($cmd);
+ } catch (Exeption $err) {
+ return false;
+ }
+ return true;
+ }
+
+ private function php_tar($dirs, $files) {
+ $filesizes = [];
+ $total_size = 512 * count($dirs);
+ foreach (array_keys($files) as $real_file) {
+ $size = filesize($real_file);
+
+ $filesizes[$real_file] = $size;
+ $total_size += 512 + $size;
+ if ($size % 512 != 0) {
+ $total_size += 512 - ($size % 512);
+ }
+ }
+
+ header('Content-Length: ' . $total_size);
+
+ foreach ($dirs as $real_dir => $archived_dir) {
+ echo $this->php_tar_header($archived_dir, 0, @filemtime($real_dir . DIRECTORY_SEPARATOR . '.'), 5);
+ }
+
+ foreach ($files as $real_file => $archived_file) {
+ $size = $filesizes[$real_file];
+
+ echo $this->php_tar_header($archived_file, $size, @filemtime($real_file), 0);
+ $this->print_file($real_file);
+
+ if ($size % 512 != 0) {
+ echo str_repeat(Archive::NULL_BYTE, 512 - ($size % 512));
+ }
+ }
+
+ return true;
+ }
+
+ private function php_tar_header($filename, $size, $mtime, $type) {
+ $name = substr(basename($filename), -99);
+ $prefix = substr(Util::normalize_path(dirname($filename)), -154);
+ if ($prefix === '.') {
+ $prefix = '';
+ }
+
+ $header =
+ str_pad($name, 100, Archive::NULL_BYTE) // filename [100]
+ . '0000755' . Archive::NULL_BYTE // file mode [8]
+ . '0000000' . Archive::NULL_BYTE // uid [8]
+ . '0000000' . Archive::NULL_BYTE // gid [8]
+ . str_pad(decoct($size), 11, '0', STR_PAD_LEFT) . Archive::NULL_BYTE // file size [12]
+ . str_pad(decoct($mtime), 11, '0', STR_PAD_LEFT) . Archive::NULL_BYTE // file modification time [12]
+ . ' ' // checksum [8]
+ . str_pad($type, 1) // file type [1]
+ . str_repeat(Archive::NULL_BYTE, 100) // linkname [100]
+ . 'ustar' . Archive::NULL_BYTE // magic [6]
+ . '00' // version [2]
+ . str_repeat(Archive::NULL_BYTE, 80) // uname, gname, defmajor, devminor [32 + 32 + 8 + 8]
+ . str_pad($prefix, 155, Archive::NULL_BYTE) // filename [155]
+ . str_repeat(Archive::NULL_BYTE, 12); // fill [12]
+ assert(strlen($header) === 512);
+
+ // checksum
+ $checksum = array_sum(array_map('ord', str_split($header)));
+ $checksum = str_pad(decoct($checksum), 6, '0', STR_PAD_LEFT) . Archive::NULL_BYTE . ' ';
+ $header = substr_replace($header, $checksum, 148, 8);
+
+ return $header;
+ }
+
+ private function print_file($file) {
+ // Send file content in segments to not hit PHP's memory limit (default: 128M)
+ if ($fd = fopen($file, 'rb')) {
+ while (!feof($fd)) {
+ print fread($fd, Archive::$SEGMENT_SIZE);
+ @ob_flush();
+ @flush();
+ }
+ fclose($fd);
+ }
+ }
+
+ private function add_hrefs($hrefs) {
+ foreach ($hrefs as $href) {
+ if (trim($href) === '') {
+ continue;
+ }
+
+ $d = Util::normalize_path(dirname($href), true);
+ $n = basename($href);
+
+ if ($this->context->is_managed_href($d) && !$this->context->is_hidden($n)) {
+
+ $real_file = $this->context->to_path($href);
+ $archived_file = preg_replace('!^' . preg_quote(Util::normalize_path($this->base_path, true)) . '!', '', $real_file);
+
+ if (is_dir($real_file)) {
+ $this->add_dir($real_file, $archived_file);
+ } else {
+ $this->add_file($real_file, $archived_file);
+ }
+ }
+ }
+ }
+
+ private function add_file($real_file, $archived_file) {
+ if (is_readable($real_file)) {
+ $this->files[$real_file] = $archived_file;
+ }
+ }
+
+ private function add_dir($real_dir, $archived_dir) {
+ if ($this->context->is_managed_path($real_dir)) {
+ $this->dirs[$real_dir] = $archived_dir;
+
+ $files = $this->context->read_dir($real_dir);
+ foreach ($files as $file) {
+ $real_file = $real_dir . '/' . $file;
+ $archived_file = $archived_dir . '/' . $file;
+
+ if (is_dir($real_file)) {
+ $this->add_dir($real_file, $archived_file);
+ } else {
+ $this->add_file($real_file, $archived_file);
+ }
+ }
+ }
+ }
+}
diff --git a/container/srv-http/root/srv/_h5ai/private/php/ext/class-custom.php b/container/srv-http/root/srv/_h5ai/private/php/ext/class-custom.php
new file mode 100755
index 0000000..ab1628e
--- /dev/null
+++ b/container/srv-http/root/srv/_h5ai/private/php/ext/class-custom.php
@@ -0,0 +1,65 @@
+<?php
+
+class Custom {
+ private static $EXTENSIONS = ['html', 'md'];
+ private $context;
+
+ public function __construct($context) {
+ $this->context = $context;
+ }
+
+ private function read_custom_file($path, $name, &$content, &$type) {
+ $file_prefix = $this->context->get_setup()->get('FILE_PREFIX');
+
+ foreach (Custom::$EXTENSIONS as $ext) {
+ $file = $path . '/' . $file_prefix . '.' . $name . '.' . $ext;
+ if (is_readable($file)) {
+ $content = file_get_contents($file);
+ $type = $ext;
+ return;
+ }
+ }
+ }
+
+ public function get_customizations($href) {
+ if (!$this->context->query_option('custom.enabled', false)) {
+ return [
+ 'header' => ['content' => null, 'type' => null],
+ 'footer' => ['content' => null, 'type' => null]
+ ];
+ }
+
+ $root_path = $this->context->get_setup()->get('FILE_PREFIX');
+ $path = $this->context->to_path($href);
+
+ $header = null;
+ $header_type = null;
+ $footer = null;
+ $footer_type = null;
+
+ $this->read_custom_file($path, 'header', $header, $header_type);
+ $this->read_custom_file($path, 'footer', $footer, $footer_type);
+
+ while ($header === null || $footer === null) {
+ if ($header === null) {
+ $this->read_custom_file($path, 'headers', $header, $header_type);
+ }
+ if ($footer === null) {
+ $this->read_custom_file($path, 'footers', $footer, $footer_type);
+ }
+ if ($path === $root_path) {
+ break;
+ }
+ $parent_path = Util::normalize_path(dirname($path));
+ if ($parent_path === $path) {
+ break;
+ }
+ $path = $parent_path;
+ }
+
+ return [
+ 'header' => ['content' => $header, 'type' => $header_type],
+ 'footer' => ['content' => $footer, 'type' => $footer_type]
+ ];
+ }
+}
diff --git a/container/srv-http/root/srv/_h5ai/private/php/ext/class-search.php b/container/srv-http/root/srv/_h5ai/private/php/ext/class-search.php
new file mode 100755
index 0000000..124954d
--- /dev/null
+++ b/container/srv-http/root/srv/_h5ai/private/php/ext/class-search.php
@@ -0,0 +1,40 @@
+<?php
+
+class Search {
+ private $context;
+
+ public function __construct($context) {
+ $this->context = $context;
+ }
+
+ public function get_paths($root, $pattern = null, $ignorecase = false) {
+ $paths = [];
+ if ($pattern && $this->context->is_managed_path($root)) {
+ $re = Util::wrap_pattern($pattern);
+ if ($ignorecase) {
+ $re .= 'i';
+ }
+ $names = $this->context->read_dir($root);
+ foreach ($names as $name) {
+ $path = $root . '/' . $name;
+ if (preg_match($re, @basename($path))) {
+ $paths[] = $path;
+ }
+ if (@is_dir($path)) {
+ $paths = array_merge($paths, $this->get_paths($path, $pattern, $ignorecase));
+ }
+ }
+ }
+ return $paths;
+ }
+
+ public function get_items($href, $pattern = null, $ignorecase = false) {
+ $cache = [];
+ $root = $this->context->to_path($href);
+ $paths = $this->get_paths($root, $pattern, $ignorecase);
+ $items = array_map(function ($path) {
+ return Item::get($this->context, $path, $cache)->to_json_object();
+ }, $paths);
+ return $items;
+ }
+}
diff --git a/container/srv-http/root/srv/_h5ai/private/php/ext/class-thumb.php b/container/srv-http/root/srv/_h5ai/private/php/ext/class-thumb.php
new file mode 100755
index 0000000..d52d3e8
--- /dev/null
+++ b/container/srv-http/root/srv/_h5ai/private/php/ext/class-thumb.php
@@ -0,0 +1,253 @@
+<?php
+
+class Thumb {
+ private static $FFMPEG_CMDV = ['ffmpeg', '-ss', '0:00:10', '-i', '[SRC]', '-an', '-vframes', '1', '[DEST]'];
+ private static $AVCONV_CMDV = ['avconv', '-ss', '0:00:10', '-i', '[SRC]', '-an', '-vframes', '1', '[DEST]'];
+ private static $CONVERT_CMDV = ['convert', '-density', '200', '-quality', '100', '-strip', '[SRC][0]', '[DEST]'];
+ private static $GM_CONVERT_CMDV = ['gm', 'convert', '-density', '200', '-quality', '100', '[SRC][0]', '[DEST]'];
+ private static $THUMB_CACHE = 'thumbs';
+
+ private $context;
+ private $setup;
+ private $thumbs_path;
+ private $thumbs_href;
+
+ public function __construct($context) {
+ $this->context = $context;
+ $this->setup = $context->get_setup();
+ $this->thumbs_path = $this->setup->get('CACHE_PUB_PATH') . '/' . Thumb::$THUMB_CACHE;
+ $this->thumbs_href = $this->setup->get('CACHE_PUB_HREF') . Thumb::$THUMB_CACHE;
+
+ if (!is_dir($this->thumbs_path)) {
+ @mkdir($this->thumbs_path, 0755, true);
+ }
+ }
+
+ public function thumb($type, $source_href, $width, $height) {
+ $source_path = $this->context->to_path($source_href);
+ if (!file_exists($source_path) || Util::starts_with($source_path, $this->setup->get('CACHE_PUB_PATH'))) {
+ return null;
+ }
+
+ $capture_path = $source_path;
+ if ($type === 'img') {
+ $capture_path = $source_path;
+ } elseif ($type === 'mov') {
+ if ($this->setup->get('HAS_CMD_AVCONV')) {
+ $capture_path = $this->capture(Thumb::$AVCONV_CMDV, $source_path);
+ } elseif ($this->setup->get('HAS_CMD_FFMPEG')) {
+ $capture_path = $this->capture(Thumb::$FFMPEG_CMDV, $source_path);
+ }
+ } elseif ($type === 'doc') {
+ if ($this->setup->get('HAS_CMD_CONVERT')) {
+ $capture_path = $this->capture(Thumb::$CONVERT_CMDV, $source_path);
+ } elseif ($this->setup->get('HAS_CMD_GM')) {
+ $capture_path = $this->capture(Thumb::$GM_CONVERT_CMDV, $source_path);
+ }
+ }
+
+ return $this->thumb_href($capture_path, $width, $height);
+ }
+
+ private function thumb_href($source_path, $width, $height) {
+ if (!file_exists($source_path)) {
+ return null;
+ }
+
+ $name = 'thumb-' . sha1($source_path) . '-' . $width . 'x' . $height . '.jpg';
+ $thumb_path = $this->thumbs_path . '/' . $name;
+ $thumb_href = $this->thumbs_href . '/' . $name;
+
+ if (!file_exists($thumb_path) || filemtime($source_path) >= filemtime($thumb_path)) {
+ $image = new Image();
+
+ $et = false;
+ if ($this->setup->get('HAS_PHP_EXIF') && $this->context->query_option('thumbnails.exif', false) === true && $height != 0) {
+ $et = @exif_thumbnail($source_path);
+ }
+ if($et !== false) {
+ file_put_contents($thumb_path, $et);
+ $image->set_source($thumb_path);
+ $image->normalize_exif_orientation($source_path);
+ } else {
+ $image->set_source($source_path);
+ }
+
+ $image->thumb($width, $height);
+ $image->save_dest_jpeg($thumb_path, 80);
+ }
+
+ return file_exists($thumb_path) ? $thumb_href : null;
+ }
+
+ private function capture($cmdv, $source_path) {
+ if (!file_exists($source_path)) {
+ return null;
+ }
+
+ $capture_path = $this->thumbs_path . '/capture-' . sha1($source_path) . '.jpg';
+
+ if (!file_exists($capture_path) || filemtime($source_path) >= filemtime($capture_path)) {
+ foreach ($cmdv as &$arg) {
+ $arg = str_replace('[SRC]', $source_path, $arg);
+ $arg = str_replace('[DEST]', $capture_path, $arg);
+ }
+
+ Util::exec_cmdv($cmdv);
+ }
+
+ return file_exists($capture_path) ? $capture_path : null;
+ }
+}
+
+class Image {
+ private $source_file;
+ private $source;
+ private $width;
+ private $height;
+ private $type;
+ private $dest;
+
+ public function __construct($filename = null) {
+ $this->source_file = null;
+ $this->source = null;
+ $this->width = null;
+ $this->height = null;
+ $this->type = null;
+
+ $this->dest = null;
+
+ $this->set_source($filename);
+ }
+
+ public function __destruct() {
+ $this->release_source();
+ $this->release_dest();
+ }
+
+ public function set_source($filename) {
+ $this->release_source();
+ $this->release_dest();
+
+ if (is_null($filename)) {
+ return;
+ }
+
+ $this->source_file = $filename;
+
+ list($this->width, $this->height, $this->type) = @getimagesize($this->source_file);
+
+ if (!$this->width || !$this->height) {
+ $this->source_file = null;
+ $this->width = null;
+ $this->height = null;
+ $this->type = null;
+ return;
+ }
+
+ $this->source = imagecreatefromstring(file_get_contents($this->source_file));
+ }
+
+ public function save_dest_jpeg($filename, $quality = 80) {
+ if (!is_null($this->dest)) {
+ @imagejpeg($this->dest, $filename, $quality);
+ @chmod($filename, 0775);
+ }
+ }
+
+ public function release_dest() {
+ if (!is_null($this->dest)) {
+ @imagedestroy($this->dest);
+ $this->dest = null;
+ }
+ }
+
+ public function release_source() {
+ if (!is_null($this->source)) {
+ @imagedestroy($this->source);
+ $this->source_file = null;
+ $this->source = null;
+ $this->width = null;
+ $this->height = null;
+ $this->type = null;
+ }
+ }
+
+ public function thumb($width, $height) {
+ if (is_null($this->source)) {
+ return;
+ }
+
+ $src_r = 1.0 * $this->width / $this->height;
+
+ if ($height == 0) {
+ if ($src_r >= 1) {
+ $height = 1.0 * $width / $src_r;
+ } else {
+ $height = $width;
+ $width = 1.0 * $height * $src_r;
+ }
+ if ($width > $this->width) {
+ $width = $this->width;
+ $height = $this->height;
+ }
+ }
+
+ $ratio = 1.0 * $width / $height;
+
+ if ($src_r <= $ratio) {
+ $src_w = $this->width;
+ $src_h = $src_w / $ratio;
+ $src_x = 0;
+ } else {
+ $src_h = $this->height;
+ $src_w = $src_h * $ratio;
+ $src_x = 0.5 * ($this->width - $src_w);
+ }
+
+ $width = intval($width);
+ $height = intval($height);
+ $src_x = intval($src_x);
+ $src_w = intval($src_w);
+ $src_h = intval($src_h);
+
+ $this->dest = imagecreatetruecolor($width, $height);
+ $icol = imagecolorallocate($this->dest, 255, 255, 255);
+ imagefill($this->dest, 0, 0, $icol);
+ imagecopyresampled($this->dest, $this->source, 0, 0, $src_x, 0, $width, $height, $src_w, $src_h);
+ }
+
+ public function rotate($angle) {
+ if (is_null($this->source) || ($angle !== 90 && $angle !== 180 && $angle !== 270)) {
+ return;
+ }
+
+ $this->source = imagerotate($this->source, $angle, 0);
+ if ( $angle === 90 || $angle === 270 ) {
+ list($this->width, $this->height) = [$this->height, $this->width];
+ }
+ }
+
+ public function normalize_exif_orientation($exif_source_file = null) {
+ if (is_null($this->source) || !function_exists('exif_read_data')) {
+ return;
+ }
+
+ if ($exif_source_file === null) {
+ $exif_source_file = $this->source_file;
+ }
+
+ $exif = exif_read_data($exif_source_file);
+ switch (@$exif['Orientation']) {
+ case 3:
+ $this->rotate(180);
+ break;
+ case 6:
+ $this->rotate(270);
+ break;
+ case 8:
+ $this->rotate(90);
+ break;
+ }
+ }
+}
diff --git a/container/srv-http/root/srv/_h5ai/private/php/pages/index.php b/container/srv-http/root/srv/_h5ai/private/php/pages/index.php
new file mode 100755
index 0000000..7885a87
--- /dev/null
+++ b/container/srv-http/root/srv/_h5ai/private/php/pages/index.php
@@ -0,0 +1,2 @@
+<?php header('Content-type: text/html;charset=utf-8'); ?><!DOCTYPE html><html class="no-js" lang="en"><head><meta charset="utf-8"><meta http-equiv="x-ua-compatible" content="ie=edge"><title>index - powered by h5ai v0.29.2 (https://larsjung.de/h5ai/)</title><meta name="description" content="index - powered by h5ai v0.29.2 (https://larsjung.de/h5ai/)"><meta name="viewport" content="width=device-width, initial-scale=1"><link rel="shortcut icon" href="<?= $public_href; ?>images/favicon/favicon-16-32.ico"><link rel="apple-touch-icon-precomposed" type="image/png" href="<?= $public_href; ?>images/favicon/favicon-152.png"><link rel="stylesheet" href="<?= $public_href; ?>css/styles.css"><?php if (!$fallback_mode) { ?><script src="<?= $public_href; ?>js/scripts.js" data-module="index"></script><?php } ?>
+<?= $x_head_tags; ?></head><body class="index" id="root"><div id="fallback-hints"><?php if (!$fallback_mode) { ?><span class="noJsMsg">Works best with JavaScript enabled!</span><span class="noBrowserMsg">Works best in <a href="http://browsehappy.com">modern browsers</a>!</span><?php } ?><span class="backlink"><a href="https://larsjung.de/h5ai/" title="h5ai v0.29.2 - Modern HTTP web server index.">powered by h5ai</a></span></div><div id="fallback"><?= $fallback_html; ?></div></body></html><!-- h5ai v0.29.2 - https://larsjung.de/h5ai/ -->
\ No newline at end of file
diff --git a/container/srv-http/root/srv/_h5ai/private/php/pages/info.php b/container/srv-http/root/srv/_h5ai/private/php/pages/info.php
new file mode 100755
index 0000000..59a8e08
--- /dev/null
+++ b/container/srv-http/root/srv/_h5ai/private/php/pages/info.php
@@ -0,0 +1,2 @@
+<?php header('Content-type: text/html;charset=utf-8'); ?><!DOCTYPE html><html class="no-js" lang="en"><head><meta charset="utf-8"><meta http-equiv="x-ua-compatible" content="ie=edge"><title>h5ai info page - v0.29.2</title><meta name="description" content="h5ai info page - v0.29.2"><meta name="viewport" content="width=device-width, initial-scale=1"><link rel="shortcut icon" href="<?= $public_href; ?>images/favicon/favicon-16-32.ico"><link rel="apple-touch-icon-precomposed" type="image/png" href="<?= $public_href; ?>images/favicon/favicon-152.png"><link rel="stylesheet" href="<?= $public_href; ?>css/styles.css"><?php if (!$fallback_mode) { ?><script src="<?= $public_href; ?>js/scripts.js" data-module="info"></script><?php } ?>
+<?= $x_head_tags; ?></head><body class="info" id="root"><div id="fallback-hints"><?php if (!$fallback_mode) { ?><span class="noJsMsg">Works best with JavaScript enabled!</span><span class="noBrowserMsg">Works best in <a href="http://browsehappy.com">modern browsers</a>!</span><?php } ?><span class="backlink"><a href="https://larsjung.de/h5ai/" title="h5ai v0.29.2 - Modern HTTP web server index.">powered by h5ai</a></span></div><div id="content"><h1 id="header"><a href="https://larsjung.de/h5ai/">h5ai</a></h1></div></body></html><!-- h5ai v0.29.2 - https://larsjung.de/h5ai/ -->
\ No newline at end of file
diff --git a/container/srv-http/root/srv/_h5ai/public/.htaccess b/container/srv-http/root/srv/_h5ai/public/.htaccess
new file mode 100755
index 0000000..3f14990
--- /dev/null
+++ b/container/srv-http/root/srv/_h5ai/public/.htaccess
@@ -0,0 +1,13 @@
+## make this folder accessible
+
+# Apache < 2.3
+<IfModule !mod_authz_core.c>
+ Order allow,deny
+ Allow from all
+ Satisfy All
+</IfModule>
+
+# Apache ≥ 2.3
+<IfModule mod_authz_core.c>
+ Require all granted
+</IfModule>
diff --git a/container/srv-http/root/srv/_h5ai/public/cache/README.md b/container/srv-http/root/srv/_h5ai/public/cache/README.md
new file mode 100755
index 0000000..fd2974c
--- /dev/null
+++ b/container/srv-http/root/srv/_h5ai/public/cache/README.md
@@ -0,0 +1,9 @@
+# Cache
+
+Public cache.
+
+This directory is used for server side caching. To use caching make this
+directory writable for your webserver.
+
+There is no critical data in here. You can savely remove any content. This
+will clear the cache.
diff --git a/container/srv-http/root/srv/_h5ai/public/css/styles.css b/container/srv-http/root/srv/_h5ai/public/css/styles.css
new file mode 100755
index 0000000..87bf906
--- /dev/null
+++ b/container/srv-http/root/srv/_h5ai/public/css/styles.css
@@ -0,0 +1,2 @@
+/* h5ai v0.29.2 - https://larsjung.de/h5ai/ */
+@charset "utf-8";/*! normalize.css v8.0.1 | MIT License | github.com/necolas/normalize.css */html{line-height:1.15;-webkit-text-size-adjust:100%}body{margin:0}main{display:block}h1{font-size:2em;margin:.67em 0}hr{box-sizing:content-box;height:0;overflow:visible}pre{font-family:monospace,monospace;font-size:1em}a{background-color:transparent}abbr[title]{border-bottom:0;text-decoration:underline;-webkit-text-decoration:underline dotted;text-decoration:underline dotted}b,strong{font-weight:bolder}code,kbd,samp{font-family:monospace,monospace;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-0.25em}sup{top:-0.5em}img{border-style:none}button,input,optgroup,select,textarea{font-family:inherit;font-size:100%;line-height:1.15;margin:0}button,input{overflow:visible}button,select{text-transform:none}button,[type="button"],[type="reset"],[type="submit"]{-webkit-appearance:button}button::-moz-focus-inner,[type="button"]::-moz-focus-inner,[type="reset"]::-moz-focus-inner,[type="submit"]::-moz-focus-inner{border-style:none;padding:0}button:-moz-focusring,[type="button"]:-moz-focusring,[type="reset"]:-moz-focusring,[type="submit"]:-moz-focusring{outline:1px dotted ButtonText}fieldset{padding:.35em .75em .625em}legend{box-sizing:border-box;color:inherit;display:table;max-width:100%;padding:0;white-space:normal}progress{vertical-align:baseline}textarea{overflow:auto}[type="checkbox"],[type="radio"]{box-sizing:border-box;padding:0}[type="number"]::-webkit-inner-spin-button,[type="number"]::-webkit-outer-spin-button{height:auto}[type="search"]{-webkit-appearance:textfield;outline-offset:-2px}[type="search"]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}details{display:block}summary{display:list-item}template{display:none}[hidden]{display:none}::-moz-selection{color:#fff;background:#ff4081;text-shadow:none}::selection{color:#fff;background:#ff4081;text-shadow:none}*:focus{outline:0}code,pre{font-family:"Ubuntu Mono","Monaco","Lucida Sans Typewriter","monospace";font-size:15px;font-weight:normal;color:rgba(0,0,0,0.87)}audio,canvas,iframe,img,svg,video{vertical-align:middle}textarea{resize:vertical}.hidden{display:none!important}.invisible{visibility:hidden}.clearfix:before,.clearfix:after{content:" ";display:table}.clearfix:after{clear:both}.raised{box-shadow:0 1px 10px 0 rgba(0,0,0,0.5)}.popup{box-shadow:0 1px 20px 0 rgba(0,0,0,0.5)}.rounded{border-radius:2px}.clear-appearance{-moz-appearance:none;-ms-appearance:none;-webkit-appearance:none}.eased-transition{transition:all .2s ease-in-out}.flex-base{display:flex;flex-wrap:nowrap;justify-content:flex-start;align-content:flex-start;align-items:stretch}.flex-column{display:flex;flex-wrap:nowrap;justify-content:flex-start;align-content:flex-start;align-items:stretch;flex-direction:column}.flex-row{display:flex;flex-wrap:nowrap;justify-content:flex-start;align-content:flex-start;align-items:stretch;flex-direction:row}.el-button{border-radius:2px;transition:all .2s ease-in-out;color:#fff;background:#42a5f5;cursor:pointer;text-decoration:none}.el-button:hover{box-shadow:0 1px 10px 0 rgba(0,0,0,0.5)}.el-input{border-radius:2px;-moz-appearance:none;-ms-appearance:none;-webkit-appearance:none;background:#fff;border:0;outline:0;background:#fafafa;border:1px solid rgba(0,0,0,0.05)}#cm-overlay{position:fixed;left:0;top:0;right:0;bottom:0;overflow:hidden;z-index:200}#cm-overlay .cm-panel{box-shadow:0 1px 20px 0 rgba(0,0,0,0.5);border-radius:2px;display:block;position:absolute;left:100px;top:100px;color:rgba(0,0,0,0.87);background:#fff;z-index:10;overflow:auto;min-width:200px}#cm-overlay .cm-panel ul{margin:0;padding:0;list-style:none;text-align:left}#cm-overlay .cm-label{padding:8px 16px;white-space:nowrap;font-weight:bold}#cm-overlay .cm-entry{padding:8px 16px;white-space:nowrap;cursor:pointer}#cm-overlay .cm-entry:hover{color:#42a5f5;background:rgba(0,0,0,0.03)}#cm-overlay .cm-icon{position:relative;top:-2px}#cm-overlay .cm-icon img{width:20px;height:20px}#cm-overlay .cm-icon.no-icon{opacity:0}#cm-overlay .cm-text{margin:0 0 0 12px}#cm-overlay .cm-sep{height:1px;margin:8px 0;padding:0;border-top:1px solid rgba(0,0,0,0.08)}#crumbbar{overflow:hidden;height:48px;font-size:16px;padding:0 8px}#crumbbar a,#crumbbar a:active,#crumbbar a:visited{color:rgba(0,0,0,0.87);cursor:pointer;text-decoration:none}#crumbbar a.active,#crumbbar a:active.active,#crumbbar a:visited.active{font-weight:bold}#crumbbar a:hover,#crumbbar a:active:hover,#crumbbar a:visited:hover{color:#42a5f5}#crumbbar a:focus,#crumbbar a:active:focus,#crumbbar a:visited:focus{outline:0}#crumbbar .crumb{transition:all .2s ease-in-out;display:inline-block}#crumbbar .sep{width:24px;height:24px;padding:12px 0;line-height:48px;display:inline-block;vertical-align:top}#crumbbar .crumb:first-of-type .sep{width:0}#crumbbar .label{line-height:48px;display:inline-block;vertical-align:top;padding:0 8px}#crumbbar .hint{width:20px;height:20px;padding:16px 0 0 0;line-height:48px;display:inline-block;vertical-align:top;position:relative;top:-2px}#content-header,#content-footer{margin:16px;padding:8px;color:rgba(0,0,0,0.87)}#content-header a,#content-footer a,#content-header a:active,#content-footer a:active,#content-header a:visited,#content-footer a:visited{color:#42a5f5;text-decoration:none;cursor:pointer}#content-header a:hover,#content-footer a:hover,#content-header a:active:hover,#content-footer a:active:hover,#content-header a:visited:hover,#content-footer a:visited:hover{color:#212121}#content-header h1,#content-footer h1,#content-header h2,#content-footer h2,#content-header h3,#content-footer h3,#content-header h4,#content-footer h4,#content-header h5,#content-footer h5,#content-header h6,#content-footer h6,#content-header p,#content-footer p{margin:.1em 0}#filter input{display:none;border:0;font-size:16px;color:rgba(0,0,0,0.87);background:transparent;outline:0;width:160px;padding:0 12px 0 4px;line-height:48px;vertical-align:top}#filter.active input{display:inline-block}#filter.pending input{color:rgba(0,0,0,0.26)}#info{overflow:auto;flex:0 0 auto;order:99;padding:32px 32px 32px 48px;white-space:nowrap;overflow-x:hidden;width:240px}#info .icon{width:240px;height:180px}#info .icon img{border-radius:2px;display:block;overflow:hidden;margin:0 auto;width:180px;height:180px}#info .icon .thumb{width:240px}#info .block{border-top:1px solid rgba(0,0,0,0.05);border-bottom:1px solid rgba(0,0,0,0.05);margin:0 0 24px 0;padding:24px 0}#info .label{font-size:16px;margin-bottom:16px}#info .time,#info .size,#info .content{line-height:20px;height:20px}#info .qrcode{margin:0 auto;width:200px}#info .qrcode img{display:block}#pv-content-aud{box-shadow:0 1px 10px 0 rgba(0,0,0,0.5);position:absolute;max-width:100%;max-height:100%}#pv-content-img{box-shadow:0 1px 10px 0 rgba(0,0,0,0.5);position:absolute;max-width:100%;max-height:100%;background-color:#f8f8f8;background-image:-webkit-linear-gradient(45deg,#e8e8e8 25%,transparent 25%,transparent 75%,#e8e8e8 75%,#e8e8e8),-webkit-linear-gradient(45deg,#e8e8e8 25%,transparent 25%,transparent 75%,#e8e8e8 75%,#e8e8e8);background-size:60px 60px;background-position:0 0,30px 30px}#pv-content-img.loading{opacity:.5;margin-top:32px;width:240px;height:240px;border-radius:1000px;overflow:hidden}#pv-content-txt{box-shadow:0 1px 10px 0 rgba(0,0,0,0.5);box-sizing:border-box;max-width:960px;text-align:left;background:#fff;margin:0 auto;padding:8px;overflow:auto}#pv-content-txt a,#pv-content-txt a:active,#pv-content-txt a:visited{color:#2080ff;text-decoration:none;cursor:pointer}#pv-content-txt a:hover,#pv-content-txt a:active:hover,#pv-content-txt a:visited:hover{color:#68a9ff}pre#pv-content-txt code{line-height:1.2em}div#pv-content-txt{font-size:1.1em;padding:8px 24px}div#pv-content-txt code{color:#008200}#pv-content-vid{box-shadow:0 1px 10px 0 rgba(0,0,0,0.5);position:absolute;max-width:100%;max-height:100%}#pv-content-vid:-webkit-full-screen{top:auto!important;left:auto!important}#pv-overlay{position:fixed;left:0;top:0;right:0;bottom:0;z-index:100;background:rgba(0,0,0,0.5);transition:background-color .3s ease-in-out;text-align:center}#pv-overlay.fullscreen{background:#212121}#pv-container{position:absolute}#pv-spinner{position:absolute}#pv-spinner .back{width:240px;height:240px;margin:-120px -120px;border-radius:120px;opacity:.5;overflow:hidden}#pv-spinner .spinner{width:100px;height:100px;margin:-50px -50px}#pv-prev-area,#pv-next-area{position:absolute;top:50%;cursor:pointer}#pv-prev-area img,#pv-next-area img{transition:all .2s ease-in-out;display:block;width:48px;height:48px;margin:-36px 0;padding:12px;opacity:.5}#pv-prev-area:hover img,#pv-next-area:hover img{box-shadow:0 1px 10px 0 rgba(0,0,0,0.5);opacity:1;background:rgba(27,27,27,0.8)}#pv-prev-area{left:0}#pv-prev-area img{border-radius:0 8px 8px 0;padding-left:48px}#pv-next-area{right:0}#pv-next-area img{border-radius:8px 0 0 8px;padding-right:48px}#pv-buttons{list-style:none;list-style-image:none;margin:0;padding:0}#pv-buttons img{position:relative;width:24px;height:24px;padding:12px}#pv-buttons .bar-label{transition:all .2s ease-in-out;display:block;color:#fff;height:48px;line-height:48px;padding:0 12px;opacity:.7}#pv-buttons .bar-button{transition:all .2s ease-in-out;display:block;line-height:48px;opacity:.7;cursor:pointer}#pv-buttons .bar-button:hover{opacity:1;background:rgba(255,255,255,0.1)}#pv-buttons .bar-left{float:left}#pv-buttons .bar-right{float:right}#pv-bottombar{box-shadow:0 1px 10px 0 rgba(0,0,0,0.5);position:fixed;z-index:5;left:0;right:0;bottom:0;background:#1b1b1b;height:48px}#pv-overlay.fullscreen #pv-bottombar{opacity:.5}@media only screen and (max-width:700px){#pv-prev-area,#pv-next-area{display:none!important}}#search input{display:none;border:0;font-size:16px;color:rgba(0,0,0,0.87);background:transparent;outline:0;width:160px;padding:0 12px 0 4px;line-height:48px;vertical-align:top}#search.active input{display:inline-block}#search.pending input{color:rgba(0,0,0,0.26)}#selection-rect{position:absolute;left:0;top:0;z-index:2;border:1px dashed rgba(0,0,0,0.15);background:rgba(0,0,0,0.1)}html.drag-select,html.drag-select *{cursor:move!important;-webkit-touch-callout:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}html.drag-select #view .item:hover,html.drag-select * #view .item:hover{box-shadow:none!important}#view .selector{display:none;position:absolute;left:0;top:0;width:22px;height:22px;background:#42a5f5;cursor:pointer;border-radius:0 0 2px 0;opacity:.6}#view .selector:hover{opacity:.8}#view .selector img{width:100%;height:100%}#view .item:hover .selector{display:block}#view .item.selected:not(.selecting),#view .item.selecting:not(.selected){color:#fff;background:#42a5f5}#view .item.selected:not(.selecting) .selector,#view .item.selecting:not(.selected) .selector{display:block;opacity:1}#view .item.selected:not(.selecting):hover,#view .item.selecting:not(.selected):hover{color:#fff;background:#42a5f5}#view .no-match{display:none;margin-top:36px;text-align:center;color:rgba(0,0,0,0.05);font-size:5em;font-weight:bold}#tree{overflow:auto;flex:0 0 auto;order:1;padding:32px 32px 32px 16px;white-space:nowrap;max-width:250px;overflow-x:hidden}#tree a,#tree a:active,#tree a.visited{display:block;margin-left:20px;padding:3px 0;text-decoration:none;color:rgba(0,0,0,0.87)}#tree a:hover,#tree a:active:hover,#tree a.visited:hover{color:#42a5f5}#tree .active>a{font-weight:bold}#tree .indicator{display:block;float:left;padding:3px 0;position:relative;top:-2px;cursor:pointer}#tree .indicator img{width:20px;height:20px;zoom:1}#tree .item{clear:left}#tree .item.open>.indicator img{-webkit-transform:rotate(90deg);transform:rotate(90deg)}#tree .item.unknown>.indicator{opacity:.3}#tree .item.none>.indicator{opacity:0;cursor:inherit}#tree .item.unknown>.content,#tree .item.none>.content,#tree .item.closed>.content{display:none}#tree .icon{position:relative;top:-2px}#tree .icon img{width:20px;height:20px}#tree .label{margin:0 0 0 4px}#tree .content{margin:0;padding:0 0 0 20px}#tree .summary{color:rgba(0,0,0,0.26);padding:0 0 0 8px}#root.info #content{flex:1 1 auto;order:50;color:rgba(0,0,0,0.87);text-align:center}#root.info code{margin:0 .2em;padding:2px 4px;border-radius:4px;letter-spacing:.05em;background:#fafafa;border:1px solid rgba(0,0,0,0.05);font-size:.9em}#root.info #header a{transition:all .2s ease-in-out;font-size:4em;font-weight:300;margin:.8em 0 0 0;color:rgba(0,0,0,0.87);text-decoration:none}#root.info #header a:hover{color:#42a5f5}#root.info #support{margin:24px auto;padding:18px 0 6px 0;width:292px;background:#fafafa;border:1px solid rgba(0,0,0,0.05);border-radius:4px}#root.info #support input[type="image"]{border:0;width:100px;padding:12px 48px}#root.info #pass{border-radius:2px;-moz-appearance:none;-ms-appearance:none;-webkit-appearance:none;background:#fff;border:0;outline:0;background:#fafafa;border:1px solid rgba(0,0,0,0.05);display:inline-block;margin:8px;padding:0 12px;line-height:28px;width:200px;vertical-align:top}#root.info #login,#root.info #logout{border-radius:2px;transition:all .2s ease-in-out;color:#fff;background:#42a5f5;cursor:pointer;text-decoration:none;display:inline-block;margin:8px;padding:0 12px;line-height:28px;vertical-align:top}#root.info #login:hover,#root.info #logout:hover{box-shadow:0 1px 10px 0 rgba(0,0,0,0.5)}#root.info #hint{margin:12px auto;width:320px}#root.info #tests{display:inline-block;text-align:left;list-style-type:none;margin:48px 0;padding:0}#root.info #tests .test{background:#fff;margin:12px 0 0 0;padding:8px 12px 12px 12px;border-bottom:1px solid rgba(0,0,0,0.05)}#root.info #tests .label{display:inline-block;width:250px;font-size:1.4em}#root.info #tests .result{display:inline-block;width:250px;text-align:right;font-size:1.4em;font-weight:bold}#root.info #tests .result.passed{color:#4caf50}#root.info #tests .result.failed{color:#f44336}#root.info #tests .info{margin:4px 0 0 0}#content{overflow:auto;flex:1 1 auto;order:50;position:relative}#fallback{display:none;max-width:960px;margin:16px auto;padding:32px 16px}#fallback table{display:block;width:100%;border-collapse:collapse;background:#fff}#fallback th,#fallback td{padding:6px;text-align:left;border:0;border-bottom:1px solid #f0f0f0}#fallback th{color:#aaa;font-weight:normal;line-height:36px}#fallback td{overflow:hidden;white-space:nowrap}#fallback a,#fallback a:active,#fallback a:visited{display:block;color:inherit;text-decoration:none;cursor:pointer}#fallback a:hover,#fallback a:active:hover,#fallback a:visited:hover{color:#42a5f5}#fallback .fb-i{width:20px;padding-left:12px}#fallback .fb-i img{width:20px;height:20px;position:relative;top:-1px}#fallback .fb-n{width:682px;max-width:682px}#fallback .fb-d{text-align:right;width:160px;min-width:160px}#fallback .fb-s{text-align:right;width:70px;min-width:70px;padding-right:12px}#fallback-hints{display:none;overflow:hidden;text-align:right;background:#fafafa;border-bottom:1px solid rgba(0,0,0,0.05)}#fallback-hints a,#fallback-hints a:active,#fallback-hints a:visited{transition:all .2s ease-in-out;display:inline-block;line-height:48px;color:rgba(0,0,0,0.54);text-decoration:none;outline:0}#fallback-hints a:hover,#fallback-hints a:active:hover,#fallback-hints a:visited:hover{color:#42a5f5}#fallback-hints .backlink{margin:0 16px}#fallback-hints .noJsMsg,#fallback-hints .noBrowserMsg{display:none;margin:0 16px;color:#f44336}html.no-js #root,html.no-browser #root{position:static;overflow:auto}html.no-js #fallback,html.no-browser #fallback,html.no-js #fallback-hints,html.no-browser #fallback-hints{display:block}html.no-js .noJsMsg{display:inline!important}html.no-browser .noBrowserMsg{display:inline!important}#mainrow{display:flex;flex-wrap:nowrap;justify-content:flex-start;align-content:flex-start;align-items:stretch;flex-direction:row;flex:1 1 auto;order:50;height:0}#notification{position:fixed;left:50%;width:200px;margin-left:-100px;z-index:100;padding:3px 6px 6px 6px;color:#fff;background:rgba(0,0,0,0.2);border-radius:0 0 4px 4px;text-align:center;overflow:hidden}#root{display:flex;flex-wrap:nowrap;justify-content:flex-start;align-content:flex-start;align-items:stretch;flex-direction:column;position:absolute;left:0;top:0;right:0;bottom:0;overflow:hidden;background:#fff;line-height:1.4}#root,input,select{font-family:"Ubuntu","Roboto","Helvetica","Arial","sans-serif";font-size:13px;font-weight:normal;color:rgba(0,0,0,0.87)}#sidebar{overflow-x:hidden;overflow-y:auto;flex:0 0 auto;order:0;background:#fafafa;border-right:1px solid rgba(0,0,0,0.05);padding:16px;position:absolute;top:48px;min-height:100%;z-index:1}#sidebar .block{display:block;margin:0 0 24px 0;width:168px}#sidebar .block h1{font-size:1em;margin:2px 0 6px 0}#sidebar .button{border-radius:2px;transition:all .2s ease-in-out;display:inline-block;margin:4px;color:rgba(0,0,0,0.87);cursor:pointer}#sidebar .button:hover{background:rgba(0,0,0,0.03)}#sidebar .button.active{background:rgba(0,0,0,0.03);box-shadow:inset 0 0 4px 0 rgba(0,0,0,0.4)}#sidebar .button img{width:24px;height:24px;padding:12px}#sidebar .select{border-radius:2px;background:transparent;overflow:hidden;outline:0;width:160px;margin:4px;line-height:48px}#sidebar input,#sidebar select{-moz-appearance:none;-ms-appearance:none;-webkit-appearance:none;background:transparent;width:100%;border:0 solid #000;cursor:pointer;outline:0}#sidebar input:hover,#sidebar select:hover{background:rgba(0,0,0,0.03)}#sidebar select{width:187px;padding:0 8px;height:48px;line-height:48px}#sidebar input[type='range']{border-radius:2px;width:144px;margin:4px;padding:8px;vertical-align:middle;height:32px;line-height:32px}#sidebar .range-track{-moz-appearance:none;-ms-appearance:none;-webkit-appearance:none;border-width:0;border-radius:20px;background:#e0e0e0;height:6px}#sidebar .range-thumb{-moz-appearance:none;-ms-appearance:none;-webkit-appearance:none;border-width:0;border-radius:20px;background:#616161;width:16px;height:16px}#sidebar input[type='range']::-webkit-slider-runnable-track{-moz-appearance:none;-ms-appearance:none;-webkit-appearance:none;border-width:0;border-radius:20px;background:#e0e0e0;height:6px}#sidebar input[type='range']::-moz-range-track{-moz-appearance:none;-ms-appearance:none;-webkit-appearance:none;border-width:0;border-radius:20px;background:#e0e0e0;height:6px}#sidebar input[type='range']::-ms-track{-moz-appearance:none;-ms-appearance:none;-webkit-appearance:none;border-width:0;border-radius:20px;background:#e0e0e0;height:6px}#sidebar input[type='range']::-ms-fill-lower{-moz-appearance:none;-ms-appearance:none;-webkit-appearance:none;border-width:0;border-radius:20px;background:#e0e0e0;height:6px}#sidebar input[type='range']::-ms-fill-upper{-moz-appearance:none;-ms-appearance:none;-webkit-appearance:none;border-width:0;border-radius:20px;background:#e0e0e0;height:6px}#sidebar input[type='range']::-webkit-slider-thumb{-moz-appearance:none;-ms-appearance:none;-webkit-appearance:none;border-width:0;border-radius:20px;background:#616161;width:16px;height:16px;margin-top:-5px}#sidebar input[type='range']::-moz-range-thumb{-moz-appearance:none;-ms-appearance:none;-webkit-appearance:none;border-width:0;border-radius:20px;background:#616161;width:16px;height:16px}#sidebar input[type='range']::-ms-thumb{-moz-appearance:none;-ms-appearance:none;-webkit-appearance:none;border-width:0;border-radius:20px;background:#616161;width:16px;height:16px}#sidebar #view-size{display:block}#topbar{display:flex;flex-wrap:nowrap;justify-content:flex-start;align-content:flex-start;align-items:stretch;flex-direction:row;overflow:hidden;flex:0 0 auto;order:1;background:#fafafa;border-bottom:1px solid rgba(0,0,0,0.05);z-index:1}#toolbar{overflow:hidden;flex:0 0 auto;order:1;height:48px}#toolbar .tool{transition:all .2s ease-in-out;display:inline-block;cursor:pointer}#toolbar .tool img{display:inline-block;width:24px;height:24px;padding:12px}#toolbar .tool:hover{background:rgba(0,0,0,0.03)}#flowbar{overflow:hidden;flex:1 1 auto;order:2;height:48px}#backlink{transition:all .2s ease-in-out;display:block;flex:0 0 auto;order:99;text-align:center;padding:6px 12px;overflow:hidden;height:36px}#backlink,#backlink:active,#backlink:visited{color:rgba(0,0,0,0.26);cursor:pointer;text-decoration:none}#backlink:hover{color:#42a5f5;background:rgba(0,0,0,0.03)}#backlink:focus{outline:0}#backlink div{line-height:18px;white-space:nowrap}#view.view-details{margin:32px}#view.view-details .header{position:relative;white-space:nowrap;display:list-item;border-bottom:1px solid rgba(0,0,0,0.07);border-radius:2px 2px 0 0}#view.view-details .header .label,#view.view-details .header .date,#view.view-details .header .size{transition:all .2s ease-in-out;line-height:24px;padding:0 8px 16px 8px;opacity:.4;outline:0}#view.view-details .header .label:hover,#view.view-details .header .date:hover,#view.view-details .header .size:hover{opacity:1;color:#42a5f5}#view.view-details .header .sort{display:none;position:relative;top:-2px;width:20px;height:20px;padding:0 4px}#view.view-details .header .ascending .sort{display:inline}#view.view-details .header .descending .sort{display:inline;-webkit-transform:rotate(180deg);transform:rotate(180deg);zoom:1}#view.view-details .item{overflow:hidden;border-bottom:1px solid rgba(0,0,0,0.07)}#view.view-details .item:hover{box-shadow:0 1px 10px 0 rgba(0,0,0,0.5);z-index:1}#view.view-details .item:last-child{border-radius:0 0 2px 2px}#view.view-details .square{display:inline-block;position:absolute;left:16px;top:-1px;padding:8px}#view.view-details .square .thumb{border-radius:2px;box-shadow:0 0 1px 0 rgba(0,0,0,0.2)}#view.view-details .label,#view.view-details .date,#view.view-details .size{padding:0 8px}#view.view-details .date{position:absolute;right:116px;top:0}#view.view-details .size{position:absolute;right:16px;top:0}#view.view-details .item .label,#view.view-details .item .date,#view.view-details .item .size{line-height:30px}#view.view-details .square{width:16px;height:16px}#view.view-details .square img{width:16px;height:16px}#view.view-details .label{margin:0 246px 0 48px}#view.view-details.width-0 .label{margin-right:4px}#view.view-details.width-0 .date{display:none}#view.view-details.width-0 .size{display:none}#view.view-details.width-1 .label{margin-right:64px}#view.view-details.width-1 .date{display:none}#view.view-grid{margin:28px}#view.view-grid .item{border-radius:2px;overflow:hidden;float:left;margin:8px}#view.view-grid .item:hover{box-shadow:0 1px 10px 0 rgba(0,0,0,0.5)}#view.view-grid .square{display:inline-block;vertical-align:top}#view.view-grid .label{display:inline-block;vertical-align:top;width:180px;padding:0 8px}#view.view-grid .date,#view.view-grid .size{display:none}#view.view-grid .label{line-height:48px}#view.view-grid .square{width:48px;height:48px}#view.view-grid .square img{width:48px;height:48px}#view.view-icons{margin:28px}#view.view-icons .item{border-radius:2px;overflow:hidden;float:left;margin:8px}#view.view-icons .item:hover{box-shadow:0 1px 10px 0 rgba(0,0,0,0.5)}#view.view-icons .landscape{display:block;background:#fafafa}#view.view-icons .label{padding:0 6px;line-height:24px;text-align:center}#view.view-icons .date,#view.view-icons .size{display:none}#view.view-icons .item{width:128px}#view.view-icons .landscape{width:128px;height:96px}#view.view-icons .landscape img{width:96px;height:96px}#view.view-icons .landscape .thumb{width:128px}#view a,#view a:active,#view a:visited{display:block;color:inherit;cursor:pointer;text-decoration:none}#view ul{margin:0;padding:0;list-style:none}#view .header{display:none}#view .item{position:relative;white-space:nowrap;background:#fff}#view .item:hover{color:#42a5f5;background:#fafafa}#view .folder-parent .date,#view .folder-parent .size{display:none}#view .icon{display:none;text-align:center}#view .icon img{position:relative;top:50%;-webkit-transform:translateY(-50%);transform:translateY(-50%)}#view .icon .thumb{max-width:none;max-height:none}#view .label{display:block;overflow:hidden;text-align:left;text-overflow:ellipsis}#view .date{text-align:right;width:130px}#view .size{text-align:right;width:80px}#view #view-hint{display:block;margin-top:36px;text-align:center;color:rgba(0,0,0,0.05);font-size:5em;font-weight:bold}@media only screen and (max-width:700px){#crumbbar .crumb:not(.active){display:none}#crumbbar .crumb.active .sep{width:0}#tree,#info{display:none!important}}@media print{*,*:before,*:after,*:first-letter ,*:first-line {background:transparent!important;color:#000!important;box-shadow:none!important;text-shadow:none!important}#toolbar,#sidebar,#tree,#info{display:none!important}}
\ No newline at end of file
diff --git a/container/srv-http/root/srv/_h5ai/public/ext/README.md b/container/srv-http/root/srv/_h5ai/public/ext/README.md
new file mode 100755
index 0000000..7f9460c
--- /dev/null
+++ b/container/srv-http/root/srv/_h5ai/public/ext/README.md
@@ -0,0 +1,4 @@
+# Extensions
+
+This directory is used for additional script and style files. You have to add
+them manualy to the `resources` section in `_h5ai/private/conf/options.json`.
diff --git a/container/srv-http/root/srv/_h5ai/public/images/fallback/file.png b/container/srv-http/root/srv/_h5ai/public/images/fallback/file.png
new file mode 100755
index 0000000000000000000000000000000000000000..c796a825dc0d1f519a95280ea35fa9202b11b3bf
GIT binary patch
literal 118
zcmeAS@N?(olHy`uVBq!ia0vp^A|TAc1|)ksWqE;=t*47)NCo5DGuFHe20TYDOxSZ+
z_?d3=DewOqpL{(U>zS2u`=n!`NVDOIGA5A*237@U#uK|ZbT&Br<NDBK^}P7>*$E2I
R*8&Y<@O1TaS?83{1OS-LCuslx
literal 0
HcmV?d00001
diff --git a/container/srv-http/root/srv/_h5ai/public/images/fallback/folder-parent.png b/container/srv-http/root/srv/_h5ai/public/images/fallback/folder-parent.png
new file mode 100755
index 0000000000000000000000000000000000000000..38da20dc9262f05651d048f7bbeabf65c50a917f
GIT binary patch
literal 108
zcmeAS@N?(olHy`uVBq!ia0vp^A|TAc1|)ksWqE;=v8Rh;NCji^0$T~z#Kc5i1s~JH
zPR`E%oi~b^@^VW)Yn#~gGEw1aoZP;)tU&YE7kPV_7+x9Y3kGj{{|cy`!PC{xWt~$(
F696kY9+Ch6
literal 0
HcmV?d00001
diff --git a/container/srv-http/root/srv/_h5ai/public/images/fallback/folder.png b/container/srv-http/root/srv/_h5ai/public/images/fallback/folder.png
new file mode 100755
index 0000000000000000000000000000000000000000..d4722e788e8e965c019daf82408d6b77f43def6f
GIT binary patch
literal 99
zcmeAS@N?(olHy`uVBq!ia0vp^A|TAc1|)ksWqE;=mZytjNCjiE#6blUlP~sWGGb!a
w9A-97k?t~>AY@~})+c3=^<YJ#vN!|7p(V4c9yRbW0d+BWy85}Sb4q9e0QU|UrvLx|
literal 0
HcmV?d00001
diff --git a/container/srv-http/root/srv/_h5ai/public/images/favicon/favicon-152.png b/container/srv-http/root/srv/_h5ai/public/images/favicon/favicon-152.png
new file mode 100755
index 0000000000000000000000000000000000000000..3666dfce1609fa22c165921b6c7c04c29333174a
GIT binary patch
literal 219
zcmeAS@N?(olHy`uVBq!ia0vp^GeDSy8A!f*V=Dxt_yc@GT!C~b65u!G*8>W%mIV0)
zGc^2vpzvi^xHC|o%+tj&q=ND78E;0W03K$?f`+y$PApgUYl(dDJ6-R7AV$SA{`sut
zNjG(7EKM=vPSc!uwkgspZF9mjoI+(K#z>(0z!_BFGwF-&J4?=amST}JZGkRe@O1Ta
JS?83{1OUMlPdESo
literal 0
HcmV?d00001
diff --git a/container/srv-http/root/srv/_h5ai/public/images/favicon/favicon-16-32.ico b/container/srv-http/root/srv/_h5ai/public/images/favicon/favicon-16-32.ico
new file mode 100755
index 0000000000000000000000000000000000000000..be172231b6902c8f86a2695285a78e4b0f745e6c
GIT binary patch
literal 5430
zcmeH~;SGX7422)+0E}?Ij9cguFoRpj1kT|YY<9ki{3xOELaxTdUeX-*a_xhUatT0#
z9oiP06Rro~2q2|t{h)rQcA~~h?wE8=0QFxSUDxF;F+a<eT*-<2i9qnP`>*f&VeS)a
zw)mCgS~b6=XMP0|LsJ+x?tAA*o}4p@abd`L^cr&T#0UZ_1gvkxOJClCmycC9{51iK
zlb5dD0WTk`Zun~g7AG%VyT|+Y;%wCo{+fWr$xGMn(f?kYt-8Tq6R<dy=r#VQN_^J#
p)bJJ(YqdXVwY<0Z*Ywt%5UYP8kQZYF_I2Z&N8A`WkIll2%O}^3O?3bO
literal 0
HcmV?d00001
diff --git a/container/srv-http/root/srv/_h5ai/public/images/favicon/favicon-16.png b/container/srv-http/root/srv/_h5ai/public/images/favicon/favicon-16.png
new file mode 100755
index 0000000000000000000000000000000000000000..d7dd0f9a7a2b31f352fdcd9dc472f68e832a0275
GIT binary patch
literal 96
zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`>Ygr+Ar*|t5;6)VCSUB$WW>a-
tIc#ARkz@+;;9E9}aWPwul)(oEhHuWskKC<%qk&o&JYD@<);T3K0RX3>7Rvwt
literal 0
HcmV?d00001
diff --git a/container/srv-http/root/srv/_h5ai/public/images/favicon/favicon-32.png b/container/srv-http/root/srv/_h5ai/public/images/favicon/favicon-32.png
new file mode 100755
index 0000000000000000000000000000000000000000..2f97d12e445524bb2af5951cf17593dd823938c3
GIT binary patch
literal 120
zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdzdrud~kP61P=e7$nDDWH&n6~A4
zV)2SP|GrCee~EWYnYnb<UE4fXj*X%UN5UEeq8W9Wftnz|g3VzH<Np0;D<4_gzXu6<
My85}Sb4q9e0Glo&W&i*H
literal 0
HcmV?d00001
diff --git a/container/srv-http/root/srv/_h5ai/public/images/favicon/favicon.svg b/container/srv-http/root/srv/_h5ai/public/images/favicon/favicon.svg
new file mode 100755
index 0000000..489efbe
--- /dev/null
+++ b/container/srv-http/root/srv/_h5ai/public/images/favicon/favicon.svg
@@ -0,0 +1,3 @@
+<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16">
+ <path fill="#555" d="M 1,2 1,14 15,14 15,4 9,4 7,2 z"/>
+</svg>
\ No newline at end of file
diff --git a/container/srv-http/root/srv/_h5ai/public/images/themes/README.md b/container/srv-http/root/srv/_h5ai/public/images/themes/README.md
new file mode 100755
index 0000000..650e0f7
--- /dev/null
+++ b/container/srv-http/root/srv/_h5ai/public/images/themes/README.md
@@ -0,0 +1,9 @@
+# Themes
+
+This directory will contain any themes you add. At the moment there are only
+icon themes supported. The folder structure is: `<theme-name>/<type>.<ext>`,
+with `<ext>` one of `svg`, `png` or `jpg`.
+
+To select a theme use the option `view > theme` in file `conf/options.json`.
+
+You will find the previously included icon themes [here](https://github.com/lrsjng/h5ai-themes).
diff --git a/container/srv-http/root/srv/_h5ai/public/images/themes/comity/ar-apk.svg b/container/srv-http/root/srv/_h5ai/public/images/themes/comity/ar-apk.svg
new file mode 100755
index 0000000..a7cc5cd
--- /dev/null
+++ b/container/srv-http/root/srv/_h5ai/public/images/themes/comity/ar-apk.svg
@@ -0,0 +1,3 @@
+<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 20 20">
+ <path fill="#a4c639" d="M14.5 3.2C14.4 3.2 14.2 3.3 14.1 3.5L13.3 5C12.3 4.4 11.2 4 10 4 8.8 4 7.7 4.3 6.8 4.9L5.9 3.5C5.8 3.3 5.6 3.2 5.5 3.3 5.4 3.3 5.4 3.2 5.3 3.3L5.2 3.3C5 3.5 4.9 3.8 5.1 4L6 5.6C4.8 6.7 4 8.2 4 10L16 10C16 8.3 15.3 6.7 14.1 5.6L15 4C15.1 3.8 15 3.5 14.8 3.3L14.7 3.3C14.7 3.2 14.6 3.2 14.5 3.2zM7.3 7C7.8 7 8.2 7.4 8.2 7.9 8.2 8.4 7.8 8.8 7.3 8.8 6.8 8.8 6.4 8.4 6.4 7.9 6.4 7.4 6.8 7 7.3 7zM12.7 7C13.2 7 13.6 7.4 13.6 7.9 13.6 8.4 13.2 8.8 12.7 8.8 12.2 8.8 11.8 8.4 11.8 7.9 11.8 7.4 12.2 7 12.7 7zM4 10.5L4 16 16 16 16 10.5 4 10.5z"/>
+</svg>
\ No newline at end of file
diff --git a/container/srv-http/root/srv/_h5ai/public/images/themes/comity/ar-deb.svg b/container/srv-http/root/srv/_h5ai/public/images/themes/comity/ar-deb.svg
new file mode 100755
index 0000000..f1efae9
--- /dev/null
+++ b/container/srv-http/root/srv/_h5ai/public/images/themes/comity/ar-deb.svg
@@ -0,0 +1,16 @@
+<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="-60 -75 20 20">
+ <g fill="#d70751" transform="matrix(0.06427071,0,0,0.06427071,-52.892053,-68.534728)">
+ <path d="m 64.525,62.053 c -4.125,0.058 0.78,2.125 6.165,2.954 1.488,-1.161 2.838,-2.336 4.04,-3.479 -3.354,0.821 -6.765,0.838 -10.205,0.525"/>
+ <path d="m 86.665,56.533 c 2.457,-3.389 4.246,-7.102 4.878,-10.939 -0.551,2.736 -2.035,5.099 -3.435,7.592 -7.711,4.854 -0.726,-2.883 -0.004,-5.824 -8.29,10.436 -1.138,6.257 -1.439,9.171"/>
+ <path d="m 94.839,35.268 c 0.497,-7.428 -1.462,-5.08 -2.121,-2.245 0.766,0.4 1.377,5.237 2.121,2.245"/>
+ <path d="m 48.883,-66.264 c 2.201,0.395 4.757,0.698 4.398,1.224 2.407,-0.528 2.954,-1.015 -4.398,-1.224"/>
+ <path d="m 53.281,-65.04 -1.556,0.32 1.448,-0.127 0.108,-0.193"/>
+ <path d="m 121.93,38.085 c 0.247,6.671 -1.95,9.907 -3.932,15.637 l -3.564,1.781 c -2.919,5.666 0.282,3.598 -1.807,8.105 -4.556,4.049 -13.823,12.67 -16.789,13.457 -2.163,-0.047 1.469,-2.554 1.943,-3.537 -6.097,4.188 -4.894,6.285 -14.217,8.83 L 83.291,81.751 C 60.29,92.569 28.344,71.129 28.765,41.875 28.519,43.732 28.067,43.268 27.557,44.019 26.371,28.967 34.509,13.849 48.232,7.676 61.659,1.03 77.395,3.758 87.012,12.72 81.73,5.8 71.217,-1.534 58.757,-0.848 46.549,-0.655 35.132,7.102 31.321,15.521 c -6.253,3.938 -6.979,15.177 -9.704,17.233 -3.665,26.943 6.896,38.583 24.762,52.275 2.812,1.896 0.792,2.184 1.173,3.627 C 41.616,85.877 36.18,81.68 31.711,76.542 c 2.372,3.473 4.931,6.847 8.239,9.499 -5.596,-1.897 -13.074,-13.563 -15.256,-14.038 9.647,17.274 39.142,30.295 54.587,23.836 -7.146,0.263 -16.226,0.146 -24.256,-2.822 -3.371,-1.734 -7.958,-5.331 -7.14,-6.003 21.079,7.875 42.854,5.965 61.09,-8.655 4.641,-3.614 9.709,-9.761 11.173,-9.846 -2.206,3.317 0.377,1.596 -1.318,4.523 4.625,-7.456 -2.008,-3.035 4.779,-12.877 l 2.507,3.453 c -0.931,-6.188 7.687,-13.704 6.813,-23.492 1.975,-2.994 2.206,3.22 0.107,10.107 2.912,-7.64 0.767,-8.867 1.516,-15.171 0.81,2.118 1.867,4.37 2.412,6.606 -1.895,-7.382 1.948,-12.433 2.898,-16.724 -0.937,-0.415 -2.928,3.264 -3.383,-5.457 0.065,-3.788 1.054,-1.985 1.435,-2.917 -0.744,-0.427 -2.694,-3.33 -3.88,-8.9 0.86,-1.308 2.3,3.393 3.47,3.586 -0.753,-4.429 -2.049,-7.805 -2.103,-11.202 -3.421,-7.149 -1.211,0.953 -3.985,-3.069 -3.641,-11.357 3.021,-2.637 3.47,-7.796 5.52,7.995 8.667,20.387 10.11,25.519 -1.103,-6.258 -2.883,-12.32 -5.058,-18.185 1.677,0.705 -2.699,-12.875 2.18,-3.882 -5.21,-19.172 -22.302,-37.087 -38.025,-45.493 1.924,1.76 4.354,3.971 3.481,4.317 -7.819,-4.656 -6.444,-5.018 -7.565,-6.985 -6.369,-2.591 -6.788,0.208 -11.007,0.004 -12.005,-6.368 -14.318,-5.69 -25.368,-9.681 l 0.502,2.349 c -7.953,-2.649 -9.265,1.005 -17.862,0.009 -0.523,-0.409 2.753,-1.479 5.452,-1.871 -7.69,1.015 -7.329,-1.515 -14.854,0.279 1.855,-1.301 3.815,-2.162 5.793,-3.269 -6.271,0.381 -14.971,3.649 -12.286,0.677 -10.235,4.569 -28.403,10.976 -38.597,20.535 l -0.321,-2.142 c -4.672,5.608 -20.371,16.748 -21.622,24.011 l -1.249,0.291 c -2.431,4.116 -4.004,8.781 -5.932,13.016 -3.18,5.417 -4.661,2.085 -4.208,2.934 -6.253,12.679 -9.359,23.332 -12.043,32.069 1.912,2.858 0.046,17.206 0.769,28.688 -3.141,56.709 39.8,111.77 86.737,124.48 6.88,2.459 17.11,2.364 25.813,2.618 -10.268,-2.937 -11.595,-1.556 -21.595,-5.044 -7.215,-3.398 -8.797,-7.277 -13.907,-11.711 l 2.022,3.573 c -10.021,-3.547 -5.829,-4.39 -13.982,-6.972 l 2.16,-2.82 C 11.175,156.251 5.82,151.022 4.355,148.126 l -3.553,0.14 c -4.27,-5.269 -6.545,-9.063 -6.379,-12.005 l -1.148,2.047 c -1.301,-2.235 -15.709,-19.759 -8.234,-15.679 -1.389,-1.271 -3.235,-2.067 -5.237,-5.703 l 1.522,-1.739 c -3.597,-4.627 -6.621,-10.562 -6.391,-12.536 1.919,2.592 3.25,3.075 4.568,3.52 -9.083,-22.539 -9.593,-1.242 -16.474,-22.942 l 1.456,-0.116 c -1.116,-1.682 -1.793,-3.506 -2.69,-5.298 l 0.633,-6.313 C -44.113,63.94 -39.401,39.351 -38.459,25.865 -37.804,20.38 -33,14.543 -29.345,5.388 l -2.227,-0.384 c 4.256,-7.423 24.301,-29.814 33.583,-28.662 4.499,-5.649 -0.892,-0.02 -1.772,-1.443 9.878,-10.223 12.984,-7.222 19.65,-9.061 7.19,-4.268 -6.17,1.664 -2.761,-1.628 12.427,-3.174 8.808,-7.216 25.021,-8.828 1.71,0.973 -3.969,1.503 -5.395,2.766 10.354,-5.066 32.769,-3.914 47.326,2.811 16.895,7.896 35.873,31.232 36.622,53.189 l 0.852,0.229 c -0.431,8.729 1.336,18.822 -1.727,28.094 l 2.1,-4.385"/>
+ <path d="m 19.5,67.715 -0.578,2.893 c 2.71,3.683 4.861,7.673 8.323,10.552 -2.49,-4.863 -4.341,-6.872 -7.745,-13.445"/>
+ <path d="m 25.909,67.464 c -1.435,-1.587 -2.284,-3.497 -3.235,-5.4 0.909,3.345 2.771,6.219 4.504,9.143 l -1.269,-3.743"/>
+ <path d="m 139.32,42.814 -0.605,1.52 c -1.111,7.892 -3.511,15.701 -7.189,22.941 4.06,-7.639 6.69,-15.995 7.79,-24.461"/>
+ <path d="m 49.698,-68.243 c 2.789,-1.022 6.855,-0.56 9.814,-1.233 -3.855,0.324 -7.693,0.517 -11.484,1.005 l 1.67,0.228"/>
+ <path d="m -48.219,-16.176 c 0.642,5.951 -4.477,8.26 1.134,4.337 3.007,-6.773 -1.175,-1.87 -1.134,-4.337"/>
+ <path d="m -54.812,11.362 c 1.292,-3.967 1.526,-6.349 2.02,-8.645 -3.571,4.566 -1.643,5.539 -2.02,8.645"/>
+ </g>
+</svg>
\ No newline at end of file
diff --git a/container/srv-http/root/srv/_h5ai/public/images/themes/comity/ar-rpm.svg b/container/srv-http/root/srv/_h5ai/public/images/themes/comity/ar-rpm.svg
new file mode 100755
index 0000000..4146098
--- /dev/null
+++ b/container/srv-http/root/srv/_h5ai/public/images/themes/comity/ar-rpm.svg
@@ -0,0 +1,11 @@
+<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 13.913043 15.22257">
+ <g fill="#000" transform="matrix(0.01974442,0,0,0.01974442,0.59799609,3.692127)">
+ <path d="m 242.1304,26.136154 c 12.57375,-1.931991 25.25548,-3.344345 37.9671,-4.013656 2.25826,-0.538041 4.59412,-0.428086 6.90119,-0.510544 18.03637,-0.575318 36.09759,-0.549286 54.12636,0.262939 32.54014,2.301468 64.91549,7.707276 96.30586,16.718582 l -0.13292,0.17627 c -4.60202,6.223907 -9.21752,12.438019 -13.73035,18.725891 -1.35219,0.249481 -2.53581,-0.605759 -3.74014,-1.036484 -23.8157,-9.827469 -49.16701,-15.53215 -74.68315,-18.619186 -41.97006,-4.297928 -84.93817,-0.844666 -125.2014,12.070068 -29.64401,9.587738 -58.27112,24.371842 -80.37665,46.666519 -15.66559,16.020307 -27.69327,36.744737 -29.32584,59.451997 -1.51913,10.82149 1.07187,21.62427 3.36382,32.12558 L 14.185699,205.68005 C 13.945419,188.13843 18.523071,170.78329 25.80806,154.91394 40.297989,124.01501 65.424713,99.327652 93.421997,80.42572 112.35318,67.714981 132.81692,57.345383 154.07152,49.122925 182.38751,38.052567 212.05559,30.488739 242.1304,26.136154 z"/>
+ <path d="m 301.70334,148.63515 c 1.94578,-3.16858 5.37183,-5.69597 9.26865,-5.22687 4.4046,0.11267 7.79878,3.75244 8.71124,7.87158 l 310.75082,55.27789 -1.03752,5.20607 -310.68332,-54.48095 c -2.47844,4.31216 -8.22775,6.5392 -12.74457,3.9928 -3.13145,-1.36889 -4.19975,-4.71973 -5.61303,-7.53113 l -19.12972,-3.06511 0.87691,-5.38129 19.60054,3.33701 z"/>
+ <path d="m 13.649231,221.30466 c 18.262405,-0.12262 36.52626,-0.0226 54.789398,-0.051 0.01808,0.6767 0.05426,2.03008 0.07234,2.70677 13.269959,-2.88977 26.908417,-4.11874 40.480651,-3.36956 9.88256,0.90474 18.95615,5.13992 27.79413,9.3441 -9.96293,6.16172 -20.10092,12.09585 -29.82344,18.61522 -10.834169,-8.36657 -25.559114,-8.37398 -38.193818,-4.71335 -0.157685,1.35187 -0.305954,2.70839 -0.319413,4.07715 0.0064,31.4396 0.01517,62.87977 -0.0037,94.32 -18.255799,-0.006 -36.511368,0.0168 -54.767029,-0.0115 -0.0388,-40.30612 0.01926,-80.61204 -0.02911,-120.91781 z"/>
+ <path d="m 155.75305,221.30997 c 16.07997,-0.13549 32.16204,-0.0238 48.2433,-0.0572 23.83194,-0.13529 48.05416,2.93651 70.20328,12.1031 13.75632,5.82483 27.06233,14.43199 35.03758,27.39059 6.05672,10.0663 8.17432,22.99054 3.41974,34.00478 -5.58125,13.21376 -17.53407,22.37564 -29.70006,29.22304 -22.30197,11.93273 -47.08825,18.27707 -72.31572,19.34199 l -0.0437,24.93099 -54.85077,7.52423 0.006,-154.46153 z"/>
+ <path d="m 350.73776,221.33231 c 62.75727,-0.19167 125.51848,-0.0234 188.27761,-0.0843 18.36058,0.076 37.02661,0.1922 54.8872,4.94194 5.14029,1.69319 11.99558,3.70666 13.34763,9.68171 0.13403,35.45186 0.05,70.91191 0.0409,106.36713 -18.26615,-0.004 -36.53138,-0.0113 -54.79609,0.004 -0.004,-35.17893 -0.0756,-70.3591 0.0357,-105.53679 -3.31824,-2.87891 -8.04874,-2.75609 -12.16869,-3.25885 -11.26521,-0.29326 -22.53945,-0.084 -33.80654,-0.11576 0.002,36.30307 0.0406,72.60642 -0.0191,108.90969 -18.292,-0.0171 -36.58319,0.005 -54.87403,-0.0112 -0.0542,-29.07907 -0.008,-58.15799 -0.0231,-87.23671 -0.14635,-6.3542 0.31845,-12.73225 -0.27677,-19.06588 -5.14636,-2.16309 -10.78398,-2.58689 -16.30214,-2.61335 -9.79776,-0.0158 -19.5944,0.007 -29.39029,-0.01 -0.048,36.31536 0.0591,72.63149 -0.0537,108.94673 -17.22348,-0.022 -34.44665,-0.0339 -51.66902,0.007 l -3.31752,-0.0131 c 0.28336,-40.07539 0.0678,-80.83315 0.108,-120.91222 z"/>
+ <path fill="#d72123" d="m 423.56764,57.495636 c 4.51283,-6.287872 9.12833,-12.501984 13.73035,-18.725891 42.14722,12.344238 82.84823,31.836792 116.09491,60.881943 13.59442,12.173292 25.88991,25.944912 35.33316,41.613512 11.1826,18.43936 18.26884,39.55612 19.02705,61.19006 -33.0565,-5.77759 -66.1038,-11.60446 -99.1558,-17.40172 4.06793,-12.93818 4.10266,-27.0249 1.31704,-40.22806 -5.16264,-22.81849 -19.7915,-42.41004 -37.43728,-57.282084 C 457.76711,75.165924 440.98531,65.246307 423.20515,57.986771 l 0.36249,-0.491135 z"/>
+ <path fill="#fff" d="m 210.67975,234.60013 c 14.04689,1.40957 26.7447,9.34711 36.33964,19.39103 8.27451,8.70258 14.12349,20.84611 12.10276,33.07682 -2.20877,12.25284 -10.73442,22.20633 -20.32152,29.61572 -8.32672,6.11266 -17.74312,11.38919 -28.12337,12.77234 -0.0358,-31.61874 -0.0407,-63.2376 0.002,-94.85591 z"/>
+ </g>
+</svg>
\ No newline at end of file
diff --git a/container/srv-http/root/srv/_h5ai/public/images/themes/comity/txt-css.svg b/container/srv-http/root/srv/_h5ai/public/images/themes/comity/txt-css.svg
new file mode 100755
index 0000000..487a535
--- /dev/null
+++ b/container/srv-http/root/srv/_h5ai/public/images/themes/comity/txt-css.svg
@@ -0,0 +1,13 @@
+<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 20 20">
+ <g transform="matrix(0.04742975,0,0,0.04742975,2.9426429,-1.9210171)">
+ <path fill="#1572b6" d="M 27.142,386.29 0.071,82.67 l 297.45,0 -27.096,303.571 -121.811,33.77 L 27.142,386.29 z m 0,0"/>
+ <path fill="#33a9dc" d="m 148.798,394.199 98.427,-27.288 23.157,-259.415 -121.584,0 0,286.703 z m 0,0"/>
+ <g transform="translate(55,142)">
+ <path fill="#ffffff" d="m 93.797,75.496 49.275,0 3.403,-38.132 -52.678,0 0,-37.239 0.129,0 93.246,0 -0.893,9.991 -9.152,102.616 -83.33,0 0,-37.236 z m 0,0"/>
+ <path fill="#ebebeb" d="m 94.02,172.204 -0.163,0.046 -41.472,-11.199 -2.652,-29.698 -20.151,0 -17.228,0 5.216,58.467 76.278,21.176 0.172,-0.048 0,-38.744 z m 0,0"/>
+ <path fill="#ffffff" d="m 139.907,111.156 -4.484,49.87 -41.532,11.21 0,38.742 76.339,-21.158 0.56,-6.29 6.478,-72.374 -37.361,0 z m 0,0"/>
+ <path fill="#ebebeb" d="m 93.926,0.125 0,23.128 0,14.019 0,0.092 -89.828,0 -0.119,0 -0.747,-8.37 -1.697,-18.878 -0.89,-9.991 93.281,0 z m 0,0"/>
+ <path fill="#ebebeb" d="m 93.797,75.5 0,23.129 0,14.017 0,0.092 -40.828,0 -0.119,0 -0.746,-8.369 -1.698,-18.878 -0.89,-9.991 44.281,0 z m 0,0"/>
+ </g>
+ </g>
+</svg>
\ No newline at end of file
diff --git a/container/srv-http/root/srv/_h5ai/public/images/themes/comity/txt-go.svg b/container/srv-http/root/srv/_h5ai/public/images/themes/comity/txt-go.svg
new file mode 100755
index 0000000..0d21bb0
--- /dev/null
+++ b/container/srv-http/root/srv/_h5ai/public/images/themes/comity/txt-go.svg
@@ -0,0 +1,29 @@
+<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 20 20">
+ <path fill="#f6d2a2" fill-rule="evenodd" stroke="#000" stroke-width="3" d="m 10.634,-238.979 c 0.764,15.751 16.499,8.463 23.626,3.539 6.765,-4.675 8.743,-0.789 9.337,-10.015 0.389,-6.064 1.088,-12.128 0.744,-18.216 -10.23,-0.927 -21.357,1.509 -29.744,7.602 -4.32,3.139 -12.42,13.158 -3.963,17.09" clip-rule="evenodd" stroke-linecap="round" transform="matrix(.03 0 0 .03 3.959 17.82)"/>
+ <path fill="#c6b198" fill-rule="evenodd" stroke="#000" stroke-width="3" d="m 10.634,-238.979 c 2.29,-0.852 4.717,-1.457 6.271,-3.528" clip-rule="evenodd" stroke-linecap="round" transform="matrix(.03 0 0 .03 3.959 17.82)"/>
+ <path fill="#6ad7e5" fill-rule="evenodd" stroke="#000" stroke-width="3" d="M46.997-426.619c-60.297-16.956-15.461-93.664 32.959-62.113l-32.959 62.113zM314.895-494.488c47.727-33.523 90.856 42.111 35.388 61.141l-35.388-61.141z" clip-rule="evenodd" stroke-linecap="round" transform="matrix(.03 0 0 .03 3.959 17.82)"/>
+ <path fill="#f6d2a2" fill-rule="evenodd" stroke="#000" stroke-width="3" d="m 325.161,-45.128999 c 12.123,7.501 34.282,30.182 16.096,41.1799995 -17.474,15.9990005 -27.254,-17.5609995 -42.591,-22.2109995 6.605,-8.97 14.977,-17.149 26.495,-18.969 z" clip-rule="evenodd" stroke-linecap="round" transform="matrix(.03 0 0 .03 3.959 17.82)"/>
+ <path fill="none" stroke="#000" stroke-width="3" d="m 341.257,-3.9499995 c -2.696,-5.361 -3.601,-11.6179995 -8.102,-15.9389995" clip-rule="evenodd" stroke-linecap="round" transform="matrix(.03 0 0 .03 3.959 17.82)"/>
+ <path fill="#f6d2a2" fill-rule="evenodd" stroke="#000" stroke-width="3" d="m 108.579,-19.496999 c -14.229,2.202 -22.238,15.0389995 -34.1,21.5579995 -11.178,6.665 -15.454,-2.13399996 -16.461,-3.92 -1.752,-0.799 -1.605,0.744 -4.309,-1.979 -10.362,-16.3539995 10.797,-28.3079995 21.815,-36.4319995 15.346,-3.102 24.963,10.202 33.055,20.773 z" clip-rule="evenodd" stroke-linecap="round" transform="matrix(.03 0 0 .03 3.959 17.82)"/>
+ <path fill="none" stroke="#000" stroke-width="3" d="m 58.019,-1.8599995 c 0.542,-6.233 5.484,-10.4069995 7.838,-15.6769995" clip-rule="evenodd" stroke-linecap="round" transform="matrix(.03 0 0 .03 3.959 17.82)"/>
+ <path fill-rule="evenodd" d="M49.513-447.805c-7.955-4.208-13.791-9.923-8.925-19.124 4.505-8.518 12.874-7.593 20.83-3.385l-11.905 22.509zM337.716-455.805c7.955-4.208 13.791-9.923 8.925-19.124-4.505-8.518-12.874-7.593-20.83-3.385l11.905 22.509z" clip-rule="evenodd" transform="matrix(.03 0 0 .03 3.959 17.82)"/>
+ <path fill="#f6d2a2" fill-rule="evenodd" stroke="#000" stroke-width="3" d="m 392.475,-240.979 c -0.764,15.751 -16.499,8.463 -23.626,3.539 -6.765,-4.675 -8.743,-0.789 -9.337,-10.015 -0.389,-6.064 -1.088,-12.128 -0.744,-18.216 10.23,-0.927 21.357,1.509 29.744,7.602 4.319,3.139 12.42,13.158 3.963,17.09" clip-rule="evenodd" stroke-linecap="round" transform="matrix(.03 0 0 .03 3.959 17.82)"/>
+ <path fill="#c6b198" fill-rule="evenodd" stroke="#000" stroke-width="3" d="m 392.475,-240.979 c -2.29,-0.852 -4.717,-1.457 -6.271,-3.528" clip-rule="evenodd" stroke-linecap="round" transform="matrix(.03 0 0 .03 3.959 17.82)"/>
+ <path fill="#6ad7e5" fill-rule="evenodd" stroke="#000" stroke-width="3" d="m 195.512,13.124 c 60.365,0 116.953,8.633 146.452,66.629 26.478,65.006 17.062,135.104 21.1,203.806 3.468,58.992 11.157,127.145 -16.21,181.812 -28.79,57.514 -100.73,71.982 -160,69.863 C 140.299,533.568 84.06,518.38 57.785,475.845 26.959,425.945 41.553,351.747 43.792,296.223 46.444,230.452 25.977,164.481 47.584,100.122 69.999,33.359 130.451,18.271 195.512,13.124" clip-rule="evenodd" stroke-linecap="round" transform="matrix(.03 0 0 .03 3.959 1.636)"/>
+ <path fill="#fff" fill-rule="evenodd" stroke="#000" stroke-width="2.908" d="m 206.169,-445.312 c 10.838,63.003 113.822,46.345 99.03,-17.197 -13.264,-56.98 -102.632,-41.208 -99.03,17.197" clip-rule="evenodd" stroke-linecap="round" transform="matrix(.03 0 0 .03 3.959 17.82)"/>
+ <path fill="#fff" fill-rule="evenodd" stroke="#000" stroke-width="2.821" d="m 83.103,-435.122 c 14.047,54.85 101.864,40.807 98.554,-14.213 -3.966,-65.895 -111.984,-53.18 -98.554,14.213" clip-rule="evenodd" stroke-linecap="round" transform="matrix(.03 0 0 .03 3.959 17.82)"/>
+ <path fill="#fff" fill-rule="evenodd" stroke="#000" stroke-width="3" d="m 218.594,-369.71 c 0.046,8.191 1.861,17.387 0.312,26.101 -2.091,3.952 -6.193,4.37 -9.729,5.967 -4.89,-0.767 -9.002,-3.978 -10.963,-8.552 -1.255,-9.946 0.468,-19.576 0.785,-29.526 l 19.595,6.01 z" clip-rule="evenodd" stroke-linecap="round" transform="matrix(.03 0 0 .03 3.959 17.82)"/>
+ <g fill-rule="evenodd" transform="matrix(.03 0 0 .03 3.959 1.636)" clip-rule="evenodd">
+ <ellipse cx="107.324" cy="95.404" ry="16.062" rx="14.829"/>
+ <ellipse cx="114.069" cy="99.029" fill="#fff" ry="4.082" rx="3.496"/>
+ </g>
+ <g fill-rule="evenodd" transform="matrix(.03 0 0 .03 3.959 1.636)" clip-rule="evenodd">
+ <ellipse cx="231.571" cy="91.404" ry="16.062" rx="14.582"/>
+ <ellipse cx="238.204" cy="95.029" fill="#fff" ry="4.082" rx="3.438"/>
+ </g>
+ <path fill="#fff" fill-rule="evenodd" stroke="#000" stroke-width="3" d="m 176.217,-370.602 c -6.47,15.68 3.608,47.035 21.163,23.908 -1.255,-9.946 0.468,-19.576 0.785,-29.526 l -21.948,5.618 z" clip-rule="evenodd" stroke-linecap="round" transform="matrix(.03 0 0 .03 3.959 17.82)"/>
+ <g fill-rule="evenodd" clip-rule="evenodd">
+ <path fill="#f6d2a2" stroke="#231f20" stroke-width="3" d="m 178.431,138.673 c -12.059,1.028 -21.916,15.366 -15.646,26.709 8.303,15.024 26.836,-1.329 38.379,0.203 13.285,0.272 24.17,14.047 34.84,2.49 11.867,-12.854 -5.109,-25.373 -18.377,-30.97 l -39.196,1.568 z" stroke-linecap="round" transform="matrix(.03 0 0 .03 3.959 1.636)"/>
+ <path d="m 176.913,138.045 c -0.893,-20.891 38.938,-23.503 43.642,-6.016 4.692,17.446 -41.681,21.498 -43.642,6.016 -1.565,-12.363 0,0 0,0 z" transform="matrix(.03 0 0 .03 3.959 1.636)"/>
+ </g>
+</svg>
\ No newline at end of file
diff --git a/container/srv-http/root/srv/_h5ai/public/images/themes/comity/txt-html.svg b/container/srv-http/root/srv/_h5ai/public/images/themes/comity/txt-html.svg
new file mode 100755
index 0000000..356e855
--- /dev/null
+++ b/container/srv-http/root/srv/_h5ai/public/images/themes/comity/txt-html.svg
@@ -0,0 +1,10 @@
+<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 20 20">
+ <g transform="matrix(0.03889348,0,0,0.03889348,0.04326912,-1.9134619)">
+ <polygon fill="#e44d26" points="437.367,100.62 404.321,470.819 255.778,512 107.644,470.877 74.633,100.62"/>
+ <polygon fill="#f16529" points="256,130.894 256,480.523 376.03,447.246 404.27,130.894"/>
+ <polygon fill="#ebebeb" points="143.219,188.488 154.38,313.627 256,313.627 256,268.217 195.91,268.217 191.76,221.716 256,221.716 256,176.305 255.843,176.305 142.132,176.305"/>
+ <polygon fill="#ebebeb" points="256,386.153 255.801,386.206 205.227,372.55 201.994,336.333 177.419,336.333 156.409,336.333 162.771,407.634 255.791,433.457 256,433.399"/>
+ <polygon fill="#ffffff" points="255.843,433.435 348.937,407.634 349.62,399.962 360.291,280.411 361.399,268.217 349.162,268.217 255.843,268.217 255.843,313.627 311.761,313.627 306.49,372.521 255.843,386.191"/>
+ <polygon fill="#ffffff" points="366.442,211.509 368.511,188.488 369.597,176.305 255.843,176.305 255.843,204.509 255.843,221.605 255.843,221.716 365.385,221.716 365.385,221.716 365.531,221.716"/>
+ </g>
+</svg>
\ No newline at end of file
diff --git a/container/srv-http/root/srv/_h5ai/public/images/themes/comity/txt-js.svg b/container/srv-http/root/srv/_h5ai/public/images/themes/comity/txt-js.svg
new file mode 100755
index 0000000..91a3279
--- /dev/null
+++ b/container/srv-http/root/srv/_h5ai/public/images/themes/comity/txt-js.svg
@@ -0,0 +1,3 @@
+<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 20 20">
+ <path fill="#fbc02d" stroke="#fbc02d" stroke-width="1" d="M 14.1875 4.6875 C 13.09018 4.6875104 12.199333 4.9405471 11.5625 5.46875 C 10.925664 5.9871904 10.624999 6.7055265 10.625 7.625 C 10.624999 8.0651846 10.696787 8.4682415 10.84375 8.78125 C 11.000508 9.0942712 11.192562 9.3375261 11.4375 9.5625 C 11.692232 9.7874849 11.989182 9.9997477 12.3125 10.15625 C 12.645612 10.302981 12.991037 10.435342 13.34375 10.5625 C 13.696455 10.679886 14.006917 10.810341 14.28125 10.9375 C 14.555575 11.054885 14.782593 11.165778 14.96875 11.3125 C 15.164694 11.449448 15.308271 11.605183 15.40625 11.78125 C 15.514016 11.957323 15.562494 12.16171 15.5625 12.40625 C 15.562494 12.817085 15.428715 13.150022 15.125 13.375 C 14.821273 13.599981 14.322474 13.718751 13.65625 13.71875 C 13.019412 13.718751 12.481931 13.646727 12.03125 13.5 C 11.580565 13.353276 11.23328 13.209228 10.96875 13.0625 L 10.40625 14.5625 C 10.52382 14.630973 10.679049 14.724461 10.875 14.8125 C 11.070949 14.890754 11.297967 14.952993 11.5625 15.03125 C 11.836828 15.109504 12.157087 15.169839 12.5 15.21875 C 12.852707 15.277443 13.234955 15.3125 13.65625 15.3125 C 14.910321 15.3125 15.853361 15.061368 16.5 14.5625 C 17.156424 14.053851 17.499993 13.325734 17.5 12.40625 C 17.499993 11.92695 17.418407 11.551332 17.28125 11.21875 C 17.144079 10.876394 16.952025 10.557047 16.6875 10.3125 C 16.432759 10.058181 16.132095 9.8635762 15.75 9.6875 C 15.377691 9.5016528 14.948821 9.3010768 14.46875 9.125 C 14.194416 9.0271889 13.922635 8.9201051 13.6875 8.8125 C 13.462155 8.7049074 13.270101 8.5959189 13.09375 8.46875 C 12.92719 8.3415943 12.785469 8.2190145 12.6875 8.0625 C 12.599319 7.896218 12.562497 7.693737 12.5625 7.46875 C 12.562497 7.0970525 12.694418 6.7991744 12.96875 6.59375 C 13.252873 6.3883426 13.656575 6.2812588 14.15625 6.28125 C 14.577537 6.2812588 14.983096 6.3396915 15.375 6.4375 C 15.776691 6.5353258 16.13563 6.6891556 16.46875 6.875 L 17.03125 5.375 C 16.747117 5.2087206 16.374665 5.0432042 15.875 4.90625 C 15.385121 4.7595342 14.82433 4.6875104 14.1875 4.6875 z M 6.9375 4.9375 L 6.9375 11.625 C 6.9374954 12.387977 6.8153722 12.936987 6.53125 13.25 C 6.2471196 13.563017 5.7832845 13.718751 5.15625 13.71875 C 4.7839439 13.718751 4.4250043 13.646727 4.0625 13.5 C 3.7097899 13.343494 3.4011857 13.166291 3.15625 13 L 2.5 14.46875 C 2.7547338 14.674167 3.1234709 14.876648 3.59375 15.0625 C 4.0738243 15.238567 4.6346149 15.3125 5.28125 15.3125 C 5.9768667 15.3125 6.5493124 15.217103 7 15.03125 C 7.460476 14.845398 7.829213 14.604047 8.09375 14.28125 C 8.3680731 13.958455 8.5484718 13.555398 8.65625 13.125 C 8.7640159 12.694607 8.8124936 12.248871 8.8125 11.75 L 8.8125 4.9375 L 6.9375 4.9375 z"/>
+</svg>
\ No newline at end of file
diff --git a/container/srv-http/root/srv/_h5ai/public/images/themes/comity/txt-less.svg b/container/srv-http/root/srv/_h5ai/public/images/themes/comity/txt-less.svg
new file mode 100755
index 0000000..fd15b02
--- /dev/null
+++ b/container/srv-http/root/srv/_h5ai/public/images/themes/comity/txt-less.svg
@@ -0,0 +1,8 @@
+<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 20 20">
+ <g fill="#5c6bc0" transform="matrix(0.02460339,0,0,0.02460339,1.0508613,-2.0358995)">
+ <path d="m 635.0385,526.8108 c 35.909,12.563 53.856,34.088 53.856,64.543 0,20.046 -7.443,35.957 -22.296,47.725 -14.838,11.776 -36.005,19.084 -63.557,19.084 -27.552,0 -53.037,-7.983 -76.51,-21.088 0.254,-6.95 2.091,-14.575 5.463,-22.852 3.372,-8.277 7.363,-14.853 11.936,-19.656 21.573,11.211 40.346,16.826 56.281,16.826 7.531,0 13.358,-1.264 17.414,-3.809 4.063,-2.536 6.083,-5.94 6.083,-10.217 0,-8.039 -6.226,-14.051 -18.638,-18.058 l -22.296,-8.421 c -33.73,-12.293 -50.596,-32.323 -50.596,-60.146 0,-20.316 7.085,-36.418 21.255,-48.33 14.17,-11.895 33.269,-22.137 57.283,-22.137 11.88,0 24.96,1.67 39.272,5.01 14.297,3.348 26.042,11.594 35.218,16.125 0.541,7.49 -0.962,15.712 -4.452,24.665 -3.515,8.961 -7.824,15.306 -12.969,19.052 -22.685,-10.162 -41.562,-15.243 -56.686,-15.243 -5.415,0 -9.494,1.201 -12.357,3.618 -2.831,2.41 -4.223,5.478 -4.223,9.224 0,6.417 5.121,11.49 15.386,15.235 l 25.133,8.85 z"/>
+ <path d="m 455.6835,526.8108 c 35.909,12.563 53.848,34.088 53.848,64.543 0,20.046 -7.443,35.957 -22.272,47.725 -14.853,11.776 -36.028,19.084 -63.572,19.084 -27.528,0 -53.045,-7.983 -76.51,-21.088 0.254,-6.95 2.091,-14.575 5.47,-22.852 3.372,-8.277 7.347,-14.853 11.936,-19.656 21.597,11.211 40.362,16.826 56.289,16.826 7.538,0 13.366,-1.264 17.406,-3.809 4.048,-2.536 6.083,-5.94 6.083,-10.217 0,-8.039 -6.226,-14.051 -18.638,-18.058 l -22.281,-8.421 c -33.738,-12.293 -50.611,-32.323 -50.611,-60.146 0,-20.316 7.085,-36.418 21.27,-48.33 14.162,-11.895 33.253,-22.137 57.267,-22.137 11.872,0 24.984,1.67 39.265,5.01 14.313,3.348 26.042,11.594 35.225,16.125 0.541,7.49 -0.962,15.712 -4.452,24.665 -3.507,8.961 -7.824,15.306 -12.961,19.052 -22.694,-10.162 -41.571,-15.243 -56.702,-15.243 -5.407,0 -9.502,1.201 -12.349,3.618 -2.823,2.41 -4.23,5.478 -4.23,9.224 0,6.417 5.128,11.49 15.394,15.235 l 25.125,8.85 z"/>
+ <path d="m 324.8885,529.6408 c 0,-12.293 -1.956,-23.656 -5.868,-34.089 -3.904,-10.432 -9.51,-19.378 -16.794,-26.868 -7.292,-7.49 -16.126,-13.367 -26.511,-17.645 -10.401,-4.27 -22.074,-10.711 -35.027,-10.711 -15.387,0 -28.816,6.966 -40.282,12.317 -11.466,5.344 -20.913,12.691 -28.332,22.05 -7.435,9.366 -12.969,20.388 -16.611,33.086 -3.642,12.699 -5.463,26.534 -5.463,41.499 0,15.49 1.479,29.818 4.453,42.914 2.966,13.08 8.03,24.435 15.18,34.073 7.156,9.621 16.467,17.104 27.941,22.439 11.474,5.344 25.715,9.447 42.716,9.447 31.305,0 57.752,-9.065 79.348,-24.292 -2.139,-15.49 -7.657,-27.807 -16.523,-36.896 -11.029,4.142 -20.786,7.108 -29.246,8.93 -8.468,1.798 -15.935,2.704 -22.383,2.704 -12.906,0 -22.193,-3.284 -27.83,-9.915 -5.631,-6.608 -8.72,-14.424 -9.267,-26.296 h 105.265 c 3.477,-11.243 5.234,-26.438 5.234,-42.747 z m -110.9,2.776 c 0.802,-13.645 3.292,-28.244 7.435,-34.255 4.151,-6.019 10.504,-9.025 19.083,-9.025 8.835,0 15.466,3.197 19.879,9.614 4.422,6.417 6.631,19.346 6.631,29.237 l 0.008,4.429 h -53.036 l 0,0 z"/>
+ <path d="m 129.3525,604.6078 h -10.933 c -11.887,0 -16.364,-6.25 -16.364,-18.805 V 355.05779 c 0,-13.875 -4.007,-23.616 -9.137,-29.229 -5.129,-5.598 -14.034,-5.542 -26.717,-5.542 h -24.69 l -2.91,-0.056 v 0.238 l -0.024,34.343 V 596.9678 c 0,19.258 4.326,33.349 12.022,42.318 7.705,8.953 20.722,13.422 39.074,13.422 12.691,0 27.131,-1.336 43.32,-4.016 0.811,-2.704 1.217,-8.492 1.217,-17.374 0,-8.906 -1.621,-17.788 -4.858,-26.71 z"/>
+ </g>
+</svg>
\ No newline at end of file
diff --git a/container/srv-http/root/srv/_h5ai/public/images/themes/comity/txt-md.svg b/container/srv-http/root/srv/_h5ai/public/images/themes/comity/txt-md.svg
new file mode 100755
index 0000000..a2fba14
--- /dev/null
+++ b/container/srv-http/root/srv/_h5ai/public/images/themes/comity/txt-md.svg
@@ -0,0 +1,3 @@
+<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 20 20">
+ <path fill="#ad1457" d="M12.078 10h2.3V6.007h2.32V10H19l-3.46 3.993zM1 13.993V6.007h2.32l2.355 2.917L8.03 6.007h2.32v7.986H8.03V9.398l-2.355 2.887L3.32 9.398v4.595z"/>
+</svg>
\ No newline at end of file
diff --git a/container/srv-http/root/srv/_h5ai/public/images/themes/comity/txt-php.svg b/container/srv-http/root/srv/_h5ai/public/images/themes/comity/txt-php.svg
new file mode 100755
index 0000000..84e1e22
--- /dev/null
+++ b/container/srv-http/root/srv/_h5ai/public/images/themes/comity/txt-php.svg
@@ -0,0 +1,3 @@
+<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 20 20">
+ <path fill="#6c7eb7" fill-rule="evenodd" d="M 8.625 5.65625 L 7.25 12.6875 L 8.90625 12.6875 L 9.6875 8.78125 L 11 8.78125 C 11.609 8.78125 11.587 9.03375 11.5 9.46875 L 10.90625 12.6875 L 12.65625 12.6875 L 13.25 9.125 C 13.424 8.255 12.892 7.55575 11.5 7.46875 L 9.9375 7.46875 L 10.28125 5.65625 L 8.625 5.65625 z M 2.34375 7.46875 L 0.9375 14.53125 L 2.59375 14.53125 L 2.9375 12.6875 L 4.5 12.6875 C 5.979 12.7745 7.65625 11.55675 7.65625 9.46875 C 7.65625 8.25075 6.9545 7.55575 5.5625 7.46875 L 2.34375 7.46875 z M 13.84375 7.46875 L 12.4375 14.5 L 14.09375 14.5 L 14.4375 12.6875 L 16 12.6875 C 17.47899 12.7745 19.125 11.556754 19.125 9.46875 C 19.125 8.2507462 18.454491 7.55575 17.0625 7.46875 L 13.84375 7.46875 z M 15.21875 8.75 L 16.34375 8.75 C 16.952746 8.75 17.40625 9.0092466 17.40625 9.53125 C 17.31925 11.010253 16.626745 11.288 15.84375 11.375 L 14.78125 11.375 L 15.21875 8.75 z M 3.71875 8.78125 L 4.875 8.78125 C 5.484 8.78125 5.90625 9.0405 5.90625 9.5625 C 5.81925 11.0415 5.12675 11.31925 4.34375 11.40625 L 3.28125 11.40625 L 3.71875 8.78125 z"/>
+</svg>
\ No newline at end of file
diff --git a/container/srv-http/root/srv/_h5ai/public/images/themes/comity/txt-py.svg b/container/srv-http/root/srv/_h5ai/public/images/themes/comity/txt-py.svg
new file mode 100755
index 0000000..d5dc003
--- /dev/null
+++ b/container/srv-http/root/srv/_h5ai/public/images/themes/comity/txt-py.svg
@@ -0,0 +1,8 @@
+<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 20 20">
+ <g transform="translate(-473.36088,-341.57095)">
+ <g transform="matrix(0.14489978,0,0,0.14489978,468.84945,333.83641)">
+ <path fill="#387eb8" d="M 99.75,67.46875 C 71.718268,67.468752 73.46875,79.625 73.46875,79.625 L 73.5,92.21875 l 26.75,0 0,3.78125 -37.375,0 c 0,0 -17.9375,-2.034276 -17.9375,26.25 -2e-6,28.28427 15.65625,27.28125 15.65625,27.28125 l 9.34375,0 0,-13.125 c 0,0 -0.503652,-15.65625 15.40625,-15.65625 15.9099,0 26.53125,0 26.53125,0 0,0 14.90625,0.24096 14.90625,-14.40625 0,-14.647206 0,-24.21875 0,-24.21875 0,-2e-6 2.26318,-14.65625 -27.03125,-14.65625 z M 85,75.9375 c 2.661429,-2e-6 4.8125,2.151071 4.8125,4.8125 2e-6,2.661429 -2.151071,4.8125 -4.8125,4.8125 -2.661429,2e-6 -4.8125,-2.151071 -4.8125,-4.8125 -2e-6,-2.661429 2.151071,-4.8125 4.8125,-4.8125 z"/>
+ <path fill="#ffe052" d="m 100.5461,177.31485 c 28.03174,0 26.28125,-12.15625 26.28125,-12.15625 l -0.0312,-12.59375 -26.75,0 0,-3.78125 37.375,0 c 0,0 17.9375,2.03427 17.9375,-26.25001 10e-6,-28.284267 -15.65625,-27.281247 -15.65625,-27.281247 l -9.34375,0 0,13.124997 c 0,0 0.50366,15.65625 -15.40625,15.65625 -15.909902,0 -26.531252,0 -26.531252,0 0,0 -14.90625,-0.24096 -14.90625,14.40626 0,14.6472 0,24.21875 0,24.21875 0,0 -2.26318,14.65625 27.031252,14.65625 z m 14.75,-8.46875 c -2.66143,0 -4.8125,-2.15107 -4.8125,-4.8125 0,-2.66143 2.15107,-4.8125 4.8125,-4.8125 2.66143,0 4.8125,2.15107 4.8125,4.8125 1e-5,2.66143 -2.15107,4.8125 -4.8125,4.8125 z"/>
+ </g>
+ </g>
+</svg>
\ No newline at end of file
diff --git a/container/srv-http/root/srv/_h5ai/public/images/themes/comity/txt-rb.svg b/container/srv-http/root/srv/_h5ai/public/images/themes/comity/txt-rb.svg
new file mode 100755
index 0000000..a642dc2
--- /dev/null
+++ b/container/srv-http/root/srv/_h5ai/public/images/themes/comity/txt-rb.svg
@@ -0,0 +1,3 @@
+<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 20 20">
+ <path fill="#e53935" d="M 10.707376,3.0220971 12.625,4.28125 11.5,7.90625 7.4375,11.6875 3.90625,12.46875 3.1875,10.46875 3,14.15625 c 0.07668,2.758421 2.05851,2.788289 2.90625,2.8125 L 5.875,17 16.96875,16.90625 17.0625,5.8125 C 17.122609,4.2480709 15.364825,3.0014165 14.375,3 z M 5.8700983,5.9390704 C 3.7805688,8.0101404 3.256183,9.918237 4.289943,10.960517 5.3229925,12.003507 7.2816787,11.165285 9.3712087,9.09421 11.460739,7.0231401 12.097651,5.0845033 11.06453,4.0415133 9.4255397,2.6480655 6.9773962,4.7208064 5.8700983,5.9390704 z"/>
+</svg>
\ No newline at end of file
diff --git a/container/srv-http/root/srv/_h5ai/public/images/themes/comity/txt-rust.svg b/container/srv-http/root/srv/_h5ai/public/images/themes/comity/txt-rust.svg
new file mode 100755
index 0000000..0a71e77
--- /dev/null
+++ b/container/srv-http/root/srv/_h5ai/public/images/themes/comity/txt-rust.svg
@@ -0,0 +1,3 @@
+<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 20 20">
+ <path fill="#795548" d="M18 9.9 17.3 9.5c0 0 0-0.1 0-0.1L17.9 8.8C17.9 8.8 18 8.6 18 8.5 18 8.4 17.9 8.4 17.9 8.4L17.1 8.1c0 0 0-0.1 0-0.1l0.4-0.7c0 0 0-0.1 0-0.3 0-0.1-0.1-0.1-0.1-0.1L16.5 6.7c0 0 0-0.1-0.1-0.1l0.3-0.7c0-0.1 0-0.1 0-0.3 0 0-0.1-0.1-0.1-0.1l-0.8 0c0 0-0.1-0.1-0.1-0.1L15.7 4.6c0-0.1 0-0.1 0-0.3 0 0-0.1-0.1-0.3 0l-0.8 0.1c0 0-0.1-0.1-0.1-0.1l0-0.8c0-0.1 0-0.1-0.1-0.1 0 0-0.1 0-0.3 0l-0.7 0.3c0 0-0.1 0-0.1-0.1L13.1 2.7c0-0.1 0-0.1-0.1-0.1-0.1 0-0.1 0-0.3 0l-0.7 0.4c0 0-0.1 0-0.1 0L11.6 2.3c0-0.1-0.1-0.1-0.1-0.1-0.1 0-0.1 0-0.3 0.1l-0.5 0.5c0 0-0.1 0-0.1 0L10.1 2.1C10.1 2 10 2 10 2 9.9 2 9.9 2 9.9 2.1l-0.4 0.7c0 0-0.1 0-0.1 0L8.8 2.3c0 0-0.1-0.1-0.3-0.1-0.1 0-0.1 0.1-0.1 0.1L8.1 2.9c0 0-0.1 0-0.1 0L7.3 2.5c0 0-0.1 0-0.3 0-0.1 0-0.1 0.1-0.1 0.1L6.7 3.5c0 0-0.1 0-0.1 0.1L5.9 3.4c-0.1 0-0.1 0-0.3 0 0 0-0.1 0.1-0.1 0.1l0 0.8c0 0-0.1 0.1-0.1 0.1L4.6 4.3c-0.1 0-0.1 0-0.3 0 0 0-0.1 0.1 0 0.3l0.1 0.8c0 0-0.1 0.1-0.1 0.1l-0.8 0c-0.1 0-0.1 0-0.1 0.1 0 0 0 0.1 0 0.3l0.3 0.7c0 0 0 0.1-0.1 0.1L2.7 6.9c-0.1 0-0.1 0-0.1 0.1 0 0.1 0 0.1 0 0.3l0.4 0.7c0 0 0 0.1 0 0.1L2.3 8.4c-0.1 0-0.1 0.1-0.1 0.1 0 0.1 0 0.1 0.1 0.3l0.5 0.5c0 0 0 0.1 0 0.1L2.1 9.9C2 9.9 2 10 2 10c0 0.1 0 0.1 0.1 0.1l0.7 0.4c0 0 0 0.1 0 0.1l-0.5 0.5c0 0-0.1 0.1-0.1 0.3 0 0.1 0.1 0.1 0.1 0.1l0.7 0.3c0 0 0 0.1 0 0.1l-0.4 0.7c0 0 0 0.1 0 0.3 0 0.1 0.1 0.1 0.1 0.1l0.8 0.1c0 0 0 0.1 0.1 0.1l-0.3 0.7c0 0.1 0 0.1 0 0.3 0 0 0.1 0.1 0.1 0.1l0.8 0c0 0 0.1 0.1 0.1 0.1l-0.1 0.8c0 0.1 0 0.1 0 0.3 0 0 0.1 0.1 0.3 0l0.8-0.1c0 0 0.1 0.1 0.1 0.1l0 0.8c0 0.1 0 0.1 0.1 0.1 0 0 0.1 0 0.3 0l0.7-0.3c0 0 0.1 0 0.1 0.1l0.1 0.8c0 0.1 0 0.1 0.1 0.1 0.1 0 0.1 0 0.3 0l0.7-0.4c0 0 0.1 0 0.1 0l0.3 0.7c0 0.1 0.1 0.1 0.1 0.1 0.1 0 0.1 0 0.3-0.1l0.5-0.5c0 0 0.1 0 0.1 0l0.4 0.7C9.9 17.9 10 18 10 18c0.1 0 0.1 0 0.1-0.1l0.4-0.7c0 0 0.1 0 0.1 0l0.5 0.5c0 0 0.1 0.1 0.3 0.1 0.1 0 0.1-0.1 0.1-0.1l0.3-0.7c0 0 0.1 0 0.1 0l0.7 0.4c0 0 0.1 0 0.3 0 0.1 0 0.1-0.1 0.1-0.1l0.1-0.8c0 0 0.1 0 0.1-0.1l0.7 0.3c0.1 0 0.1 0 0.3 0 0 0 0.1-0.1 0.1-0.1l0-0.8c0 0 0.1-0.1 0.1-0.1l0.8 0.1c0.1 0 0.1 0 0.3 0 0 0 0.1-0.1 0-0.3l-0.1-0.8c0 0 0.1-0.1 0.1-0.1l0.8 0c0.1 0 0.1 0 0.1-0.1 0 0 0-0.1 0-0.3l-0.3-0.7c0 0 0-0.1 0.1-0.1l0.8-0.1c0.1 0 0.1 0 0.1-0.1 0-0.1 0-0.1 0-0.3l-0.4-0.7c0 0 0-0.1 0-0.1l0.7-0.3c0.1 0 0.1-0.1 0.1-0.1 0-0.1 0-0.1-0.1-0.3l-0.5-0.5c0 0 0-0.1 0-0.1l0.7-0.4C18 10.1 18 10 18 10 18 9.9 18 9.9 17.9 9.9zm-4.5 5.6c-0.3 0-0.4-0.3-0.4-0.5 0-0.3 0.3-0.4 0.5-0.4 0.3 0 0.4 0.3 0.4 0.5 0 0.3-0.3 0.4-0.5 0.4zm-0.3-1.5c-0.3 0-0.4 0.1-0.5 0.3l-0.3 1.1C11.8 15.6 10.9 15.8 10 15.8c-0.8 0-1.8-0.1-2.4-0.5L7.3 14.2c0-0.3-0.3-0.4-0.5-0.3L5.8 14.2C5.7 13.9 5.5 13.7 5.4 13.5l4.7 0c0 0 0.1 0 0.1 0l0-1.6c0 0 0 0-0.1 0l-1.4 0 0-1.1 1.5 0c0.1 0 0.7 0 0.9 0.8 0 0.3 0.1 0.9 0.3 1.2 0.1 0.3 0.4 0.8 0.8 0.8l2.4 0c0 0 0 0 0.1 0-0.1 0.3-0.4 0.4-0.5 0.7l-1.1-0.4zm-6.6 1.5c-0.3 0-0.5-0.1-0.5-0.4 0-0.3 0.1-0.5 0.4-0.5 0.3 0 0.5 0.1 0.5 0.4 0 0.3-0.1 0.5-0.4 0.5zM4.8 8.1c0.1 0.3 0 0.5-0.3 0.7-0.3 0.1-0.5 0-0.7-0.3-0.1-0.3 0-0.5 0.3-0.7 0.3-0.1 0.5 0 0.7 0.3zM4.3 9.5 5.4 9.1C5.7 8.9 5.7 8.6 5.7 8.5l-0.3-0.5 0.8 0 0 3.8-1.6 0C4.4 11.2 4.3 10.7 4.3 10.1c0-0.3 0-0.4 0-0.7zm4.5-0.4 0-1.1 2 0c0.1 0 0.7 0.1 0.7 0.5 0 0.4-0.4 0.5-0.8 0.5l-1.8 0zM16 10c0 0.1 0 0.3 0 0.4l-0.5 0c0 0-0.1 0-0.1 0.1l0 0.3c0 0.7-0.4 0.8-0.7 0.8-0.3 0-0.7-0.1-0.7-0.3-0.1-0.9-0.5-1.2-0.9-1.6 0.5-0.4 1.2-0.9 1.2-1.6 0-0.8-0.5-1.4-0.9-1.5C12.7 6.2 12.2 6.2 12 6.2l-6.2 0C6.6 5.3 7.8 4.6 9.1 4.3l0.7 0.8c0.1 0.1 0.4 0.1 0.7 0l0.8-0.8c1.8 0.3 3.1 1.4 3.9 2.8l-0.5 1.2c-0.1 0.3 0 0.4 0.3 0.5l1.1 0.5c0 0.1 0 0.4 0 0.5zM9.7 3.6c0.1-0.1 0.5-0.1 0.7 0 0.1 0.1 0.1 0.5 0 0.7-0.1 0.1-0.5 0.1-0.7 0-0.1-0.1-0.1-0.5 0-0.7zm5.6 4.5C15.4 7.8 15.7 7.7 16 7.8 16.2 8 16.4 8.2 16.2 8.5 16.1 8.8 15.8 8.9 15.6 8.8 15.3 8.6 15.2 8.4 15.3 8.1z"/>
+</svg>
\ No newline at end of file
diff --git a/container/srv-http/root/srv/_h5ai/public/images/themes/comity/txt-script.svg b/container/srv-http/root/srv/_h5ai/public/images/themes/comity/txt-script.svg
new file mode 100755
index 0000000..f8704e8
--- /dev/null
+++ b/container/srv-http/root/srv/_h5ai/public/images/themes/comity/txt-script.svg
@@ -0,0 +1,3 @@
+<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 20 20">
+ <path fill="#1976d2" d="M 8.59375 3 L 8 5.09375 L 6.84375 5.8125 L 4.625 5.34375 L 3.21875 7.65625 L 4.84375 9.3125 L 4.84375 10.6875 L 3.21875 12.34375 L 4.625 14.65625 L 6.84375 14.1875 L 8 14.90625 L 8.59375 17 L 11.40625 17 L 12.09375 14.90625 L 13.15625 14.1875 L 15.375 14.65625 L 16.78125 12.34375 L 15.25 10.6875 L 15.25 9.3125 L 16.78125 7.65625 L 15.375 5.34375 L 13.15625 5.8125 L 12.09375 5.09375 L 11.40625 3 L 8.59375 3 z M 10 7.5 C 11.380712 7.5 12.5 8.6192881 12.5 10 C 12.5 11.380712 11.380712 12.5 10 12.5 C 8.6192881 12.5 7.5 11.380712 7.5 10 C 7.5 8.6192881 8.6192881 7.5 10 7.5 z"/>
+</svg>
\ No newline at end of file
diff --git a/container/srv-http/root/srv/_h5ai/public/images/themes/comity/x-pdf.svg b/container/srv-http/root/srv/_h5ai/public/images/themes/comity/x-pdf.svg
new file mode 100755
index 0000000..5266630
--- /dev/null
+++ b/container/srv-http/root/srv/_h5ai/public/images/themes/comity/x-pdf.svg
@@ -0,0 +1,3 @@
+<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 20 20">
+ <path fill="#e33" d="M 7.1837924,11.307953 C 7.6707878,10.353408 8.2243075,9.2777656 8.6673693,8.1977207 l 0,0 0.1750865,-0.4261233 C 8.2638361,5.5694562 7.9167872,3.8015945 8.2268175,2.65879 l 0,0 C 8.3103144,2.3606956 8.6554508,2.1799563 9.0244582,2.1799563 l 0,0 0.2246724,0.0031 0.041496,0 c 0.5051971,-0.00754 0.7430344,0.6351036 0.7700294,0.8848773 l 0,0 c 0.04457,0.4160895 -0.1480415,1.1202107 -0.1480415,1.1202107 l 0,0 c 0,-0.2842813 0.011293,-0.7436667 -0.1681885,-1.1402846 l 0,0 C 9.5354439,2.5891118 9.3358716,2.3148707 9.1570283,2.2715686 l 0,0 C 9.0667026,2.3318431 8.9787995,2.4566961 8.9486794,2.69706 l 0,0 c -0.062153,0.337009 -0.080934,0.7625005 -0.080934,0.9815213 l 0,0 c 0,0.7750507 0.1524795,1.7973568 0.4524699,2.8516732 l 0,0 C 9.376732,6.3670176 9.4262491,6.2102008 9.4658631,6.0633393 l 0,0 C 9.5273333,5.831768 9.9183329,4.2967327 9.9183329,4.2967327 l 0,0 c 0,0 -0.098522,2.0433649 -0.2359592,2.6615218 l 0,0 c -0.029539,0.130453 -0.062152,0.2598125 -0.095963,0.3922291 l 0,0 c 0.4945263,1.3812802 1.2909033,2.613824 2.2410503,3.5012084 l 0,0 c 0.374662,0.350187 0.847839,0.632591 1.295924,0.889897 l 0,0 c 0.977747,-0.140017 1.878312,-0.205837 2.629514,-0.197674 l 0,0 c 0.996584,0.01322 1.728324,0.160674 2.024539,0.452468 l 0,0 c 0.144967,0.141893 0.203958,0.313158 0.222161,0.505196 l 0,0 c 0.0046,0.07457 -0.03192,0.250406 -0.04265,0.294341 l 0,0 c 0.01063,-0.0533 0.01063,-0.315665 -0.789481,-0.571091 l 0,0 c -0.630087,-0.201452 -1.809285,-0.195167 -3.224454,-0.04454 l 0,0 c 1.636707,0.800785 3.231353,1.198664 3.736549,0.960177 l 0,0 c 0.123621,-0.06024 0.273628,-0.265462 0.273628,-0.265462 l 0,0 c 0,0 -0.08911,0.404778 -0.153163,0.505805 l 0,0 c -0.08162,0.109794 -0.241612,0.229069 -0.393496,0.26923 l 0,0 c -0.79828,0.212748 -2.875529,-0.279901 -4.686694,-1.314763 l 0,0 C 10.696554,12.63337 8.4743315,13.183748 6.69329,13.768015 l 0,0 c -1.7505467,3.067553 -3.0665588,4.476442 -4.1371905,3.940501 l 0,0 -0.3934914,-0.197673 C 2.0026124,17.419141 1.9780925,17.196419 2.0150773,17.015058 l 0,0 C 2.139895,16.40444 2.9055885,15.484427 4.443769,14.566287 l 0,0 c 0.1656275,-0.100408 0.9030766,-0.490141 0.9030766,-0.490141 l 0,0 c 0,0 -0.5459891,0.528424 -0.6740006,0.631965 l 0,0 c -1.2275229,1.005988 -2.1337362,2.2718 -2.1111425,2.762564 l 0,0 0.00437,0.04265 c 1.0430672,-0.148719 2.6069697,-2.271187 4.6177021,-6.205417 m 0.6369822,0.326336 C 7.4850166,12.266842 7.156801,12.852992 6.8536863,13.391448 l 0,0 C 8.5299255,12.689213 10.33419,12.239865 12.051848,11.920429 l 0,0 c -0.23094,-0.159484 -0.454977,-0.328215 -0.665855,-0.506443 l 0,0 C 10.440248,10.613209 9.7191732,9.6141206 9.196409,8.562942 l 0,0 C 8.8650521,9.4559636 8.4709445,10.40486 7.8207804,11.634266"/>
+</svg>
\ No newline at end of file
diff --git a/container/srv-http/root/srv/_h5ai/public/images/themes/default/ar.svg b/container/srv-http/root/srv/_h5ai/public/images/themes/default/ar.svg
new file mode 100755
index 0000000..e25cded
--- /dev/null
+++ b/container/srv-http/root/srv/_h5ai/public/images/themes/default/ar.svg
@@ -0,0 +1,3 @@
+<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 20 20">
+ <path fill="#555" d="M3 3v14h14V6l-3-3zm2 2h4v3h2V5h2l2 2v8H5z"/>
+</svg>
\ No newline at end of file
diff --git a/container/srv-http/root/srv/_h5ai/public/images/themes/default/aud.svg b/container/srv-http/root/srv/_h5ai/public/images/themes/default/aud.svg
new file mode 100755
index 0000000..dd955fc
--- /dev/null
+++ b/container/srv-http/root/srv/_h5ai/public/images/themes/default/aud.svg
@@ -0,0 +1,3 @@
+<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 20 20">
+ <path fill="#555" d="M6 4l9 6-9 6z"/>
+</svg>
\ No newline at end of file
diff --git a/container/srv-http/root/srv/_h5ai/public/images/themes/default/bin.svg b/container/srv-http/root/srv/_h5ai/public/images/themes/default/bin.svg
new file mode 100755
index 0000000..34f1f45
--- /dev/null
+++ b/container/srv-http/root/srv/_h5ai/public/images/themes/default/bin.svg
@@ -0,0 +1,3 @@
+<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 20 20">
+ <path fill="#555" d="M 8.59375 3 L 8 5.09375 L 6.84375 5.8125 L 4.625 5.34375 L 3.21875 7.65625 L 4.84375 9.3125 L 4.84375 10.6875 L 3.21875 12.34375 L 4.625 14.65625 L 6.84375 14.1875 L 8 14.90625 L 8.59375 17 L 11.40625 17 L 12.09375 14.90625 L 13.15625 14.1875 L 15.375 14.65625 L 16.78125 12.34375 L 15.25 10.6875 L 15.25 9.3125 L 16.78125 7.65625 L 15.375 5.34375 L 13.15625 5.8125 L 12.09375 5.09375 L 11.40625 3 L 8.59375 3 z M 10 7.5 C 11.380712 7.5 12.5 8.6192881 12.5 10 C 12.5 11.380712 11.380712 12.5 10 12.5 C 8.6192881 12.5 7.5 11.380712 7.5 10 C 7.5 8.6192881 8.6192881 7.5 10 7.5 z"/>
+</svg>
\ No newline at end of file
diff --git a/container/srv-http/root/srv/_h5ai/public/images/themes/default/file.svg b/container/srv-http/root/srv/_h5ai/public/images/themes/default/file.svg
new file mode 100755
index 0000000..66bcac7
--- /dev/null
+++ b/container/srv-http/root/srv/_h5ai/public/images/themes/default/file.svg
@@ -0,0 +1,3 @@
+<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 20 20">
+ <path fill="#555" d="M3 2v16h14V6l-4-4zm2 2h7l3 3v9H5z"/>
+</svg>
\ No newline at end of file
diff --git a/container/srv-http/root/srv/_h5ai/public/images/themes/default/folder-page.svg b/container/srv-http/root/srv/_h5ai/public/images/themes/default/folder-page.svg
new file mode 100755
index 0000000..4ca3ec2
--- /dev/null
+++ b/container/srv-http/root/srv/_h5ai/public/images/themes/default/folder-page.svg
@@ -0,0 +1,3 @@
+<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 20 20">
+ <path fill="#555" d="M2 3v14h16V5h-8L8 3H2zm14 4v8H8l8-8z"/>
+</svg>
\ No newline at end of file
diff --git a/container/srv-http/root/srv/_h5ai/public/images/themes/default/folder-parent.svg b/container/srv-http/root/srv/_h5ai/public/images/themes/default/folder-parent.svg
new file mode 100755
index 0000000..e114689
--- /dev/null
+++ b/container/srv-http/root/srv/_h5ai/public/images/themes/default/folder-parent.svg
@@ -0,0 +1,3 @@
+<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 20 20">
+ <path fill="#555" d="M9 4l-6 6 6 6 1.4-1.4L6.8 11H16V9H6.8l3.6-3.6z"/>
+</svg>
\ No newline at end of file
diff --git a/container/srv-http/root/srv/_h5ai/public/images/themes/default/folder.svg b/container/srv-http/root/srv/_h5ai/public/images/themes/default/folder.svg
new file mode 100755
index 0000000..3e971cf
--- /dev/null
+++ b/container/srv-http/root/srv/_h5ai/public/images/themes/default/folder.svg
@@ -0,0 +1,3 @@
+<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 20 20">
+ <path fill="#555" d="M2 3v14h16V5h-8L8 3z"/>
+</svg>
\ No newline at end of file
diff --git a/container/srv-http/root/srv/_h5ai/public/images/themes/default/img.svg b/container/srv-http/root/srv/_h5ai/public/images/themes/default/img.svg
new file mode 100755
index 0000000..e754e82
--- /dev/null
+++ b/container/srv-http/root/srv/_h5ai/public/images/themes/default/img.svg
@@ -0,0 +1,3 @@
+<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 20 20">
+ <path fill="#555" d="M8 8l3 4.712L13 11l4 5H3zm8-2a2 2 0 1 1-4 0 2 2 0 1 1 4 0z"/>
+</svg>
\ No newline at end of file
diff --git a/container/srv-http/root/srv/_h5ai/public/images/themes/default/txt.svg b/container/srv-http/root/srv/_h5ai/public/images/themes/default/txt.svg
new file mode 100755
index 0000000..d5c0dc9
--- /dev/null
+++ b/container/srv-http/root/srv/_h5ai/public/images/themes/default/txt.svg
@@ -0,0 +1,3 @@
+<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 20 20">
+ <path fill="#555" d="M4 3v2h12V3zm0 4v2h8V7zm0 4v2h12v-2zm0 4v2h6v-2z"/>
+</svg>
\ No newline at end of file
diff --git a/container/srv-http/root/srv/_h5ai/public/images/themes/default/vid.svg b/container/srv-http/root/srv/_h5ai/public/images/themes/default/vid.svg
new file mode 100755
index 0000000..dd955fc
--- /dev/null
+++ b/container/srv-http/root/srv/_h5ai/public/images/themes/default/vid.svg
@@ -0,0 +1,3 @@
+<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 20 20">
+ <path fill="#555" d="M6 4l9 6-9 6z"/>
+</svg>
\ No newline at end of file
diff --git a/container/srv-http/root/srv/_h5ai/public/images/themes/default/x.svg b/container/srv-http/root/srv/_h5ai/public/images/themes/default/x.svg
new file mode 100755
index 0000000..66bcac7
--- /dev/null
+++ b/container/srv-http/root/srv/_h5ai/public/images/themes/default/x.svg
@@ -0,0 +1,3 @@
+<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 20 20">
+ <path fill="#555" d="M3 2v16h14V6l-4-4zm2 2h7l3 3v9H5z"/>
+</svg>
\ No newline at end of file
diff --git a/container/srv-http/root/srv/_h5ai/public/images/ui/back.svg b/container/srv-http/root/srv/_h5ai/public/images/ui/back.svg
new file mode 100755
index 0000000..3275e21
--- /dev/null
+++ b/container/srv-http/root/srv/_h5ai/public/images/ui/back.svg
@@ -0,0 +1,3 @@
+<svg xmlns:svg="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" version="1.1">
+ <path d="M20 11h-12.17l5.59-5.59-1.42-1.41-8 8 8 8 1.41-1.41-5.58-5.59h12.17v-2z" fill="#555"/>
+</svg>
\ No newline at end of file
diff --git a/container/srv-http/root/srv/_h5ai/public/images/ui/crumb.svg b/container/srv-http/root/srv/_h5ai/public/images/ui/crumb.svg
new file mode 100755
index 0000000..8dfd404
--- /dev/null
+++ b/container/srv-http/root/srv/_h5ai/public/images/ui/crumb.svg
@@ -0,0 +1,3 @@
+<svg xmlns:svg="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" version="1.1">
+ <path d="M10 6l-1.4 1.4 4.6 4.6-4.6 4.6 1.4 1.4 6-6z" fill="#555"/>
+</svg>
\ No newline at end of file
diff --git a/container/srv-http/root/srv/_h5ai/public/images/ui/download.svg b/container/srv-http/root/srv/_h5ai/public/images/ui/download.svg
new file mode 100755
index 0000000..5721c4e
--- /dev/null
+++ b/container/srv-http/root/srv/_h5ai/public/images/ui/download.svg
@@ -0,0 +1,3 @@
+<svg xmlns:svg="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" version="1.1">
+ <path d="M19 9h-4v-6h-6v6h-4l7 7 7-7zm-14 9v2h14v-2h-14z" fill="#555"/>
+</svg>
\ No newline at end of file
diff --git a/container/srv-http/root/srv/_h5ai/public/images/ui/filter.svg b/container/srv-http/root/srv/_h5ai/public/images/ui/filter.svg
new file mode 100755
index 0000000..d6d4c78
--- /dev/null
+++ b/container/srv-http/root/srv/_h5ai/public/images/ui/filter.svg
@@ -0,0 +1,5 @@
+<svg xmlns:svg="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg" width="24" height="24" version="1.1">
+ <g transform="translate(0,-8)">
+ <path d="m15.8 22.3h-0.8l-0.3-0.3c1-1.1 1.6-2.6 1.6-4.2 0-3.6-2.9-6.5-6.5-6.5-3.6 0-6.5 2.9-6.5 6.5 0 3.6 2.9 6.5 6.5 6.5 1.6 0 3.1-0.6 4.2-1.6l0.3 0.3v0.8l5 5 1.5-1.5-5-5zm-6 0c-2.5 0-4.5-2-4.5-4.5 0-2.5 2-4.5 4.5-4.5 2.5 0 4.5 2 4.5 4.5 0 2.5-2 4.5-4.5 4.5z" fill="#555"/>
+ </g>
+</svg>
\ No newline at end of file
diff --git a/container/srv-http/root/srv/_h5ai/public/images/ui/info-toggle.svg b/container/srv-http/root/srv/_h5ai/public/images/ui/info-toggle.svg
new file mode 100755
index 0000000..ebc0e5c
--- /dev/null
+++ b/container/srv-http/root/srv/_h5ai/public/images/ui/info-toggle.svg
@@ -0,0 +1,3 @@
+<svg xmlns:svg="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg" width="24" height="24" version="1.1">
+ <path d="M 12 2 C 6.48 2 2 6.48 2 12 C 2 17.52 6.48 22 12 22 C 17.52 22 22 17.52 22 12 C 22 6.48 17.52 2 12 2 z M 11 7 L 13 7 L 13 9 L 11 9 L 11 7 z M 11 11 L 13 11 L 13 17 L 11 17 L 11 11 z" fill="#555"/>
+</svg>
\ No newline at end of file
diff --git a/container/srv-http/root/srv/_h5ai/public/images/ui/paypal.svg b/container/srv-http/root/srv/_h5ai/public/images/ui/paypal.svg
new file mode 100755
index 0000000..a17415e
--- /dev/null
+++ b/container/srv-http/root/srv/_h5ai/public/images/ui/paypal.svg
@@ -0,0 +1,6 @@
+<svg xmlns:svg="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg" width="296" height="76" version="1.1">
+ <g transform="translate(782.29881,-654.4062)">
+ <path d="m-618.9 654.6c-1.8 0-3.5 1.4-3.9 3.1L-634.2 707.6c-0.4 1.7 0.7 3.1 2.4 3.1l8.2 0c1.7 0 3.5-1.4 3.9-3.1L-616.9 695.5c0.4-1.7 2.1-3.1 3.9-3.1l2.3 0c10 0 17.7-2 23.3-6.1 5.5-4.1 8.3-9.5 8.3-16.2 0-2.9-0.5-5.4-1.6-7.3-1-2-2.6-3.6-4.5-4.8-2-1.2-4.4-2.1-7.1-2.6-2.7-0.5-5.9-0.7-9.6-0.7l-17.1 0zm115.3 0.3 0 2.3-0.9 0 0 1.1 0.9 0 0 4.2c0 1 0.2 1.7 0.6 2.1 0.4 0.4 1 0.7 1.8 0.7 0.2 0 0.5 0 0.8-0.1 0.3 0 0.6-0.1 0.8-0.2l0-1.2-0.1 0c-0.1 0-0.3 0.1-0.5 0.2-0.2 0.1-0.5 0.1-0.7 0.1-0.4 0-0.6-0.1-0.8-0.2-0.2-0.1-0.3-0.2-0.4-0.4-0.1-0.2-0.2-0.4-0.2-0.7 0-0.2 0-0.6 0-1l0-3.6 2.8 0 0-1.1-2.7 0 0-2.3-1.3 0zm-17 0.1c-1.7 0-3.4 1.3-3.8 2.9 0 0.1 0 0.1-0.1 0.2 0 0-0.2 0.8-0.5 2.2l-10 45.4c-0.2 1-0.4 1.7-0.4 1.9l0 0c-0.3 1.6 0.6 2.9 2.2 3l0 0 7.6 0c1.7 0 3.3-1.3 3.8-2.9 0-0.1 0.1-0.1 0.1-0.2l10.9-49.4c0.4-1.7-0.7-3.1-2.5-3.1l-7.3 0c0 0 0 0 0 0zm26.6 2c-0.5 0-0.9 0.1-1.3 0.3-0.4 0.2-0.8 0.5-1.2 0.8l0-0.9-1.3 0 0 7.9 1.3 0 0-5.9c0.4-0.3 0.7-0.5 1.1-0.7 0.4-0.2 0.7-0.2 1.1-0.2 0.4 0 0.7 0.1 0.9 0.2 0.2 0.1 0.4 0.2 0.5 0.4 0.1 0.2 0.2 0.5 0.2 0.8 0 0.3 0 0.6 0 1l0 4.5 1.3 0 0-5.1c0-0.1 0-0.3 0-0.4 0-0.1 0-0.3-0.1-0.4 0.4-0.3 0.8-0.5 1.1-0.7 0.4-0.2 0.7-0.3 1.1-0.3 0.4 0 0.7 0.1 0.9 0.2 0.2 0.1 0.4 0.3 0.5 0.5 0.1 0.2 0.2 0.4 0.2 0.8 0 0.3 0 0.6 0 1l0 4.5 1.3 0 0-5.2c0-0.9-0.2-1.7-0.6-2.2-0.4-0.5-1.1-0.8-1.9-0.8-0.5 0-1 0.1-1.4 0.3-0.4 0.2-1 0.5-1.5 1-0.2-0.4-0.5-0.7-0.8-0.9-0.4-0.2-0.8-0.3-1.4-0.3zm-112.8 8 2.7 0c3.1 0 5.5 0.5 7.1 1.6 1.6 1.1 2.3 2.7 2.3 4.9 0 3.3-1.2 5.9-3.7 7.7-2.4 1.8-5.9 2.7-10.3 2.7l-2 0c-1.8 0-2.9-1.4-2.5-3.1l2.4-10.6c0.4-1.7 2.1-3.1 3.9-3.1zm50.8 2.2c-3.3 0-6.6 0.3-9.9 0.8-2.4 0.4-2.7 0.4-4.2 0.8-3.1 0.7-3.6 3.8-3.6 3.8l-1 4.1c-0.6 2.6 0.9 2.5 1.6 2.3 1.4-0.4 2.1-0.8 4.8-1.4 2.6-0.6 5.4-1 7.7-1 3.3 0 5.7 0.3 7.4 1 1.6 0.7 2.5 1.9 2.5 3.7 0 0.4 0 0.8-0.1 1.2-0.1 0.3-0.4 0.6-1.2 0.8-4.7 0.3-8 0.7-12 1.3-4 0.6-7.4 1.5-10.3 2.8-3.1 1.4-5.4 3.2-7 5.5-1.6 2.3-2.3 5.2-2.3 8.5 0 3.2 1.1 5.7 3.3 7.7 2.2 2 5.1 2.9 8.6 2.9 2.2 0 3.9-0.2 5.1-0.5 1.2-0.3 2.5-0.7 3.9-1.3 1-0.4 2.2-1.1 3.4-1.9 1.2-0.8 2-1.3 3.1-2l0 0.1-0.3 1.3c0 0 0 0 0 0l0 0c-0.3 1.6 0.6 2.9 2.2 3l0 0 0.1 0c1 0 4.6 0 6.3 0l1.2 0c0.1 0 0.1 0 0.1 0 1.6-0.2 3.1-1.5 3.5-3.1l6-25.7c0.1-0.6 0.2-1.3 0.3-2.1 0.1-0.8 0.2-1.5 0.1-1.9 0-3.6-1.5-6.3-4.6-8.1-3.1-1.7-7.9-2.6-14.6-2.6zm2.8 23.6c0.3 0 0.4 0.1 0.3 1-0.1 0.5-1.1 4.9-1.6 6.9-0.1 0.6-1 1.5-1.3 1.7-1 0.6-2.1 1.2-3.2 1.6-1.5 0.6-2.9 0.9-4.2 0.9-2 0-3.6-0.3-4.6-0.9-1.1-0.6-1.6-1.6-1.6-3 0-1.7 0.4-3 1.2-4 0.8-1 2-1.8 3.5-2.4 1.5-0.5 3.3-0.9 5.4-1.2 1.9-0.2 5.5-0.7 6-0.7 0.1 0 0.2 0 0.3 0z" fill="#369"/>
+ <path d="m-749.8 654.4-17 0c-1.8 0-3.5 1.4-3.9 3.1l-11.5 49.9c-0.4 1.7 0.7 3.1 2.5 3.1l8.2 0c1.8 0 3.5-1.4 3.9-3.1l2.8-12.1c0.4-1.7 2.1-3.1 3.9-3.1l2.3 0c10 0 17.7-2 23.3-6.1 5.5-4.1 8.3-9.5 8.3-16.2 0-2.9-0.5-5.4-1.6-7.3-1-2-2.5-3.6-4.5-4.8-2-1.2-4.3-2.1-7.1-2.6-2.7-0.5-6-0.7-9.6-0.8zm-4.8 10.4 2.7 0c3.1 0 5.5 0.5 7.1 1.6 1.6 1 2.4 2.7 2.4 4.8 0 3.3-1.2 5.9-3.7 7.7-2.5 1.8-5.9 2.7-10.3 2.7l-2 0c-1.8 0-2.9-1.4-2.5-3.1l2.5-10.6c0.4-1.7 2.1-3.1 3.9-3.1zm50.7 2.3c-3.3 0-6.6 0.2-9.9 0.8-2.4 0.4-2.6 0.5-4.2 0.8-3.1 0.7-3.6 3.8-3.6 3.8l-1 4.1c-0.6 2.6 0.9 2.5 1.6 2.3 1.3-0.4 2.1-0.8 4.8-1.4 2.6-0.6 5.4-1 7.7-1 3.3 0 5.8 0.4 7.4 1.1 1.7 0.7 2.4 1.9 2.4 3.7 0 0.4 0 0.8-0.1 1.2-0.1 0.3-0.4 0.6-1.2 0.8-4.6 0.3-8 0.7-12 1.3-4 0.6-7.4 1.5-10.3 2.8-3.1 1.4-5.4 3.2-7 5.5-1.6 2.3-2.3 5.2-2.3 8.5 0 3.2 1.1 5.8 3.3 7.8 2.2 2 5.1 2.9 8.6 2.9 2.2 0 3.9-0.2 5.1-0.5 1.2-0.3 2.5-0.7 3.9-1.3 1-0.4 2.2-1.1 3.4-1.9 1.2-0.8 2-1.3 3.1-2l0 0.1-0.3 1.3c0 0 0 0 0 0-0.3 1.6 0.6 2.9 2.2 3.1l0 0 0.1 0c1 0 4.6 0 6.3 0l1.2 0c0.1 0 0.1 0 0.1-0.1 1.6-0.2 3.1-1.5 3.5-3l5.9-25.7c0.1-0.6 0.3-1.3 0.3-2.1 0.1-0.8 0.1-1.5 0.1-1.9 0-3.6-1.5-6.3-4.6-8.1-3.1-1.7-7.9-2.6-14.6-2.6zm60.2 0.6c-1.7 0-4 1.4-5.1 3.1 0 0-11.7 20-12.8 22-0.6 1.1-1.2 0.4-1.3 0-0.1-0.5-3.6-21.9-3.6-21.9-0.4-1.7-2.2-3.2-4.4-3.2l-7.3 0c-1.8 0-2.9 1.4-2.5 3.1 0 0 5.6 31.5 6.7 39 0.5 4.1-0.1 4.8-0.1 4.8l-7.2 12.6c-1.1 1.7-0.5 3.1 1.3 3.1l8.4 0c1.7 0 4.1-1.4 5.1-3.1l32.5-54.9c0 0 3.1-4.7 0.2-4.7-2 0-9.8 0-9.8 0zM-701.4 690.8c0.5 0 0.8-0.3 0.6 1-0.1 0.5-1.1 4.9-1.6 6.9-0.1 0.6-0.9 1.5-1.3 1.7-1 0.6-2.1 1.2-3.2 1.7-1.5 0.6-2.9 0.9-4.2 0.9-2 0-3.6-0.3-4.6-0.9-1.1-0.6-1.6-1.6-1.6-3 0-1.7 0.4-3 1.2-4 0.8-1 2-1.8 3.5-2.3 1.5-0.5 3.3-0.9 5.4-1.2 1.9-0.2 5.5-0.7 6-0.7z" fill="#1c3664"/>
+ </g>
+</svg>
\ No newline at end of file
diff --git a/container/srv-http/root/srv/_h5ai/public/images/ui/preview-close.svg b/container/srv-http/root/srv/_h5ai/public/images/ui/preview-close.svg
new file mode 100755
index 0000000..ef5f8a0
--- /dev/null
+++ b/container/srv-http/root/srv/_h5ai/public/images/ui/preview-close.svg
@@ -0,0 +1,3 @@
+<svg xmlns:svg="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" version="1.1">
+ <path d="M19 6.4l-1.4-1.4-5.6 5.6-5.6-5.6-1.4 1.4 5.6 5.6-5.6 5.6 1.4 1.4 5.6-5.6 5.6 5.6 1.4-1.4-5.6-5.6z" fill="#fff"/>
+</svg>
\ No newline at end of file
diff --git a/container/srv-http/root/srv/_h5ai/public/images/ui/preview-fullscreen.svg b/container/srv-http/root/srv/_h5ai/public/images/ui/preview-fullscreen.svg
new file mode 100755
index 0000000..bf04ad7
--- /dev/null
+++ b/container/srv-http/root/srv/_h5ai/public/images/ui/preview-fullscreen.svg
@@ -0,0 +1,3 @@
+<svg xmlns:svg="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" version="1.1">
+ <path d="M7 14h-2v5h5v-2h-3v-3zm-2-4h2v-3h3v-2h-5v5zm12 7h-3v2h5v-5h-2v3zm-3-12v2h3v3h2v-5h-5z" fill="#fff"/>
+</svg>
\ No newline at end of file
diff --git a/container/srv-http/root/srv/_h5ai/public/images/ui/preview-next.svg b/container/srv-http/root/srv/_h5ai/public/images/ui/preview-next.svg
new file mode 100755
index 0000000..1b72100
--- /dev/null
+++ b/container/srv-http/root/srv/_h5ai/public/images/ui/preview-next.svg
@@ -0,0 +1,3 @@
+<svg xmlns:svg="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" version="1.1">
+ <path d="M10 6l-1.4 1.4 4.6 4.6-4.6 4.6 1.4 1.4 6-6z" fill="#fff"/>
+</svg>
\ No newline at end of file
diff --git a/container/srv-http/root/srv/_h5ai/public/images/ui/preview-no-fullscreen.svg b/container/srv-http/root/srv/_h5ai/public/images/ui/preview-no-fullscreen.svg
new file mode 100755
index 0000000..d2a3efb
--- /dev/null
+++ b/container/srv-http/root/srv/_h5ai/public/images/ui/preview-no-fullscreen.svg
@@ -0,0 +1,3 @@
+<svg xmlns:svg="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" version="1.1">
+ <path d="M5 16h3v3h2v-5h-5v2zm3-8h-3v2h5v-5h-2v3zm6 11h2v-3h3v-2h-5v5zm2-11v-3h-2v5h5v-2h-3z" fill="#fff"/>
+</svg>
\ No newline at end of file
diff --git a/container/srv-http/root/srv/_h5ai/public/images/ui/preview-prev.svg b/container/srv-http/root/srv/_h5ai/public/images/ui/preview-prev.svg
new file mode 100755
index 0000000..a592b22
--- /dev/null
+++ b/container/srv-http/root/srv/_h5ai/public/images/ui/preview-prev.svg
@@ -0,0 +1,3 @@
+<svg xmlns:svg="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" version="1.1">
+ <path d="M14.6 18 16 16.6 11.4 12 16 7.4 14.6 6l-6 6z" fill="#fff"/>
+</svg>
\ No newline at end of file
diff --git a/container/srv-http/root/srv/_h5ai/public/images/ui/preview-raw.svg b/container/srv-http/root/srv/_h5ai/public/images/ui/preview-raw.svg
new file mode 100755
index 0000000..7a8a69d
--- /dev/null
+++ b/container/srv-http/root/srv/_h5ai/public/images/ui/preview-raw.svg
@@ -0,0 +1,3 @@
+<svg xmlns:svg="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" version="1.1">
+ <path d="M19 9h-4v-6h-6v6h-4l7 7 7-7zm-14 9v2h14v-2h-14z" fill="#fff"/>
+</svg>
\ No newline at end of file
diff --git a/container/srv-http/root/srv/_h5ai/public/images/ui/search.svg b/container/srv-http/root/srv/_h5ai/public/images/ui/search.svg
new file mode 100755
index 0000000..d6d4c78
--- /dev/null
+++ b/container/srv-http/root/srv/_h5ai/public/images/ui/search.svg
@@ -0,0 +1,5 @@
+<svg xmlns:svg="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg" width="24" height="24" version="1.1">
+ <g transform="translate(0,-8)">
+ <path d="m15.8 22.3h-0.8l-0.3-0.3c1-1.1 1.6-2.6 1.6-4.2 0-3.6-2.9-6.5-6.5-6.5-3.6 0-6.5 2.9-6.5 6.5 0 3.6 2.9 6.5 6.5 6.5 1.6 0 3.1-0.6 4.2-1.6l0.3 0.3v0.8l5 5 1.5-1.5-5-5zm-6 0c-2.5 0-4.5-2-4.5-4.5 0-2.5 2-4.5 4.5-4.5 2.5 0 4.5 2 4.5 4.5 0 2.5-2 4.5-4.5 4.5z" fill="#555"/>
+ </g>
+</svg>
\ No newline at end of file
diff --git a/container/srv-http/root/srv/_h5ai/public/images/ui/selected.svg b/container/srv-http/root/srv/_h5ai/public/images/ui/selected.svg
new file mode 100755
index 0000000..50ac249
--- /dev/null
+++ b/container/srv-http/root/srv/_h5ai/public/images/ui/selected.svg
@@ -0,0 +1,3 @@
+<svg xmlns:svg="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" version="1.1">
+ <path d="M9 16.2l-4.2-4.2-1.4 1.4 5.6 5.6 12-12-1.4-1.4z" fill="#fff"/>
+</svg>
\ No newline at end of file
diff --git a/container/srv-http/root/srv/_h5ai/public/images/ui/sidebar.svg b/container/srv-http/root/srv/_h5ai/public/images/ui/sidebar.svg
new file mode 100755
index 0000000..4e38c05
--- /dev/null
+++ b/container/srv-http/root/srv/_h5ai/public/images/ui/sidebar.svg
@@ -0,0 +1,3 @@
+<svg xmlns:svg="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" version="1.1">
+ <path d="M3 18h18v-2h-18v2zm0-5h18v-2h-18v2zm0-7v2h18v-2h-18z" fill="#555"/>
+</svg>
\ No newline at end of file
diff --git a/container/srv-http/root/srv/_h5ai/public/images/ui/sort.svg b/container/srv-http/root/srv/_h5ai/public/images/ui/sort.svg
new file mode 100755
index 0000000..5b0ed8d
--- /dev/null
+++ b/container/srv-http/root/srv/_h5ai/public/images/ui/sort.svg
@@ -0,0 +1,3 @@
+<svg xmlns:svg="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" version="1.1">
+ <path d="M18 9.7 16.6 8.3 12 12.9 7.4 8.3 6 9.7l6 6z" fill="#555"/>
+</svg>
\ No newline at end of file
diff --git a/container/srv-http/root/srv/_h5ai/public/images/ui/spinner.svg b/container/srv-http/root/srv/_h5ai/public/images/ui/spinner.svg
new file mode 100755
index 0000000..a5f7a7b
--- /dev/null
+++ b/container/srv-http/root/srv/_h5ai/public/images/ui/spinner.svg
@@ -0,0 +1,6 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32" width="32" height="32" fill="white">
+ <path opacity=".25" d="M16 0 A16 16 0 0 0 16 32 A16 16 0 0 0 16 0 M16 4 A12 12 0 0 1 16 28 A12 12 0 0 1 16 4"/>
+ <path d="M16 0 A16 16 0 0 1 32 16 L28 16 A12 12 0 0 0 16 4z">
+ <animateTransform attributeName="transform" type="rotate" from="0 16 16" to="360 16 16" dur="0.8s" repeatCount="indefinite" />
+ </path>
+</svg>
diff --git a/container/srv-http/root/srv/_h5ai/public/images/ui/tree-indicator.svg b/container/srv-http/root/srv/_h5ai/public/images/ui/tree-indicator.svg
new file mode 100755
index 0000000..8dfd404
--- /dev/null
+++ b/container/srv-http/root/srv/_h5ai/public/images/ui/tree-indicator.svg
@@ -0,0 +1,3 @@
+<svg xmlns:svg="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" version="1.1">
+ <path d="M10 6l-1.4 1.4 4.6 4.6-4.6 4.6 1.4 1.4 6-6z" fill="#555"/>
+</svg>
\ No newline at end of file
diff --git a/container/srv-http/root/srv/_h5ai/public/images/ui/tree-toggle.svg b/container/srv-http/root/srv/_h5ai/public/images/ui/tree-toggle.svg
new file mode 100755
index 0000000..9914792
--- /dev/null
+++ b/container/srv-http/root/srv/_h5ai/public/images/ui/tree-toggle.svg
@@ -0,0 +1,3 @@
+<svg xmlns:svg="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg" version="1.1" width="24" height="24" viewBox="0 0 24 24">
+ <path d="M4 3 4 6 7 6 7 3zm5 0 0 3 8 0 0-3zm-3 5 0 3 3 0 0-3zm5 0 0 3 9 0 0-3zm-5 5 0 3 3 0 0-3zm5 0 0 3 6 0 0-3zm-5 5 0 3 3 0 0-3zm5 0 0 3 8 0 0-3z" fill="#555"/>
+</svg>
\ No newline at end of file
diff --git a/container/srv-http/root/srv/_h5ai/public/images/ui/view-details.svg b/container/srv-http/root/srv/_h5ai/public/images/ui/view-details.svg
new file mode 100755
index 0000000..5e756e0
--- /dev/null
+++ b/container/srv-http/root/srv/_h5ai/public/images/ui/view-details.svg
@@ -0,0 +1,3 @@
+<svg xmlns:svg="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg" version="1.1" width="24" height="24" viewBox="0 0 24 24">
+ <path d="m4 4 0 4 16 0 0-4zm0 6 0 4 16 0 0-4zm0 6 0 4 16 0 0-4z" fill="#555"/>
+</svg>
\ No newline at end of file
diff --git a/container/srv-http/root/srv/_h5ai/public/images/ui/view-grid.svg b/container/srv-http/root/srv/_h5ai/public/images/ui/view-grid.svg
new file mode 100755
index 0000000..8f4c48c
--- /dev/null
+++ b/container/srv-http/root/srv/_h5ai/public/images/ui/view-grid.svg
@@ -0,0 +1,3 @@
+<svg xmlns:svg="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg" version="1.1" width="24" height="24" viewBox="0 0 24 24">
+ <path d="m4 4 0 4 7 0 0-4zm9 0 0 4 7 0 0-4zm-9 6 0 4 7 0 0-4zm9 0 0 4 7 0 0-4zm-9 6 0 4 7 0 0-4zm9 0 0 4 7 0 0-4z" fill="#555"/>
+</svg>
\ No newline at end of file
diff --git a/container/srv-http/root/srv/_h5ai/public/images/ui/view-icons.svg b/container/srv-http/root/srv/_h5ai/public/images/ui/view-icons.svg
new file mode 100755
index 0000000..8601293
--- /dev/null
+++ b/container/srv-http/root/srv/_h5ai/public/images/ui/view-icons.svg
@@ -0,0 +1,3 @@
+<svg xmlns:svg="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg" version="1.1" width="24" height="24" viewBox="0 0 24 24">
+ <path d="m4 4 0 7 7 0 0-7zm9 0 0 7 7 0 0-7zm-9 9 0 7 7 0 0-7zm9 0 0 7 7 0 0-7z" fill="#555"/>
+</svg>
\ No newline at end of file
diff --git a/container/srv-http/root/srv/_h5ai/public/index.php b/container/srv-http/root/srv/_h5ai/public/index.php
new file mode 100755
index 0000000..89f99e8
--- /dev/null
+++ b/container/srv-http/root/srv/_h5ai/public/index.php
@@ -0,0 +1,17 @@
+<?php
+
+define('H5AI_VERSION', '0.29.2');
+define('MIN_PHP_VERSION', '5.5.0');
+
+if (!function_exists('version_compare') || version_compare(PHP_VERSION, MIN_PHP_VERSION, '<')) {
+ header('Content-type: text/plain;charset=utf-8');
+ exit('[ERR] h5ai requires PHP ' . MIN_PHP_VERSION . ' or later, but found PHP ' . PHP_VERSION);
+}
+
+if (substr(H5AI_VERSION, 0, 1) === '{') {
+ header('Content-type: text/plain;charset=utf-8');
+ exit('[ERR] h5ai sources must be preprocessed to work correctly');
+}
+
+require_once __DIR__ . '/../private/php/class-bootstrap.php';
+Bootstrap::run();
diff --git a/container/srv-http/root/srv/_h5ai/public/js/scripts.js b/container/srv-http/root/srv/_h5ai/public/js/scripts.js
new file mode 100755
index 0000000..664fd61
--- /dev/null
+++ b/container/srv-http/root/srv/_h5ai/public/js/scripts.js
@@ -0,0 +1,5 @@
+/* h5ai v0.29.2 - https://larsjung.de/h5ai/ */
+!function(e){function t(e,t){if(!t)throw i.className=r,new Error(r+": "+e)}function n(e){return"function"==typeof e}if(!e||e.window!==e||!e.document)throw new Error("no-window");var r="no-browser",i=e.document.documentElement;i.className="",t("console",e.console&&n(e.console.log)),t("assign",e.Object&&n(e.Object.assign)),t("promise",n(e.Promise)),t("xhr",e.XMLHttpRequest)}(this),function(e){function t(r){if(n[r])return n[r].exports;var i=n[r]={exports:{},id:r,loaded:!1};return e[r].call(i.exports,i,i.exports,t),i.loaded=!0,i.exports}var n={};return t.m=e,t.c=n,t.p="",t(0)}([function(e,t,n){"use strict";n(1)},function(e,t,n){"use strict";var r=n(2),i=r.dom,o=r.awaitReady,a=n(7),s=i("script[data-module]").attr("data-module"),c={action:"get",setup:!0,options:!0,types:!0};if("index"===s)c.theme=!0,c.langs=!0;else{if("info"!==s)throw new Error("no-main-module: '"+s+"'");c.refresh=!0}a._update(c).then(function(){return o()}).then(function(){return n(9)("./"+s)})},function(e,t,n){"use strict";e.exports=Object.assign({},n(3),n(4),n(5),n(6))},function(e,t){"use strict";var n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},r=function(e){return void 0!==e&&null!==e},i=function(e,t){return("undefined"==typeof e?"undefined":n(e))===t},o=function(e){return i(e,"string")},a=function(e){return i(e,"function")},s=function(e){return i(e,"number")},c=function(e){return e&&e.hasOwnProperty("length")},u=function(e){return!e||o(e)?[]:(c(e)&&(e=Array.from(e)),Object.keys(e))},l=function(e){return u(e).map(function(t){return e[t]})},f=function(e,t){return u(e).forEach(function(n){return t(e[n],n)})},d=function(e,t){return l(e).filter(t)},p=function(e,t){return l(e).map(t)},h=function(e,t){return l(e).indexOf(t)>=0},g=function(e){return d(e,function(e){return!!e})},m=function(e,t){return!!e&&e instanceof t},v=function(e){return Array.from(e)},b=function(e,t){return t=l(t),d(e,function(e){return t.indexOf(e)<0})},w=function(e,t){return t=l(t),d(e,function(e){return t.indexOf(e)>=0})},y=function(e,t){return e<t?-1:e>t?1:0},x=function(e,t){var n=a(t)?t:function(e){return e[t]},r=function(e,t){return y(n(e),n(t))};return l(e).sort(r)},k=function(e,t){var n=null;return function(){clearTimeout(n),n=setTimeout(e,t)}};e.exports={is:r,isStr:o,isFn:a,isNum:s,hasLength:c,keys:u,values:l,each:f,filter:d,map:p,includes:h,compact:g,isInstanceOf:m,toArray:v,difference:b,intersection:w,cmp:y,sortBy:x,debounce:k}},function(e,t,n){(function(t){"use strict";function r(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t<e.length;t++)n[t]=e[t];return n}return Array.from(e)}var i=function(){function e(e,t){var n=[],r=!0,i=!1,o=void 0;try{for(var a,s=e[Symbol.iterator]();!(r=(a=s.next()).done)&&(n.push(a.value),!t||n.length!==t);r=!0);}catch(e){i=!0,o=e}finally{try{!r&&s.return&&s.return()}finally{if(i)throw o}}return n}return function(t,n){if(Array.isArray(t))return t;if(Symbol.iterator in Object(t))return e(t,n);throw new TypeError("Invalid attempt to destructure non-iterable instance")}}(),o=n(3),a=o.each,s=o.filter,c=o.hasLength,u=o.is,l=o.isStr,f=o.map,d=o.isInstanceOf,p=o.toArray,h=t.window,g=h.document,m=function(){var e=function(e){return g.createElement(e)},t=[[/^<t(head|body|foot)|^<c(ap|olg)/i,e("table")],[/^<col/i,e("colgroup")],[/^<tr/i,e("tbody")],[/^<t[dh]/i,e("tr")]],n=e("div"),r=function(e){var r=!0,o=!1,a=void 0;try{for(var s,c=t[Symbol.iterator]();!(r=(s=c.next()).done);r=!0){var u=s.value,l=i(u,2),f=l[0],d=l[1];if(f.test(e))return d}}catch(e){o=!0,a=e}finally{try{!r&&c.return&&c.return()}finally{if(o)throw a}}return n};return function(e){var t=r(e);t.innerHTML=e;var n=p(t.childNodes);return a(n,function(e){return t.removeChild(e)}),t.innerHTML="",n}}(),v=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:g;try{return p(t.querySelectorAll(e))}catch(e){return[]}},b=function(e){return d(e,h.Element)},w=function(e){return d(e,h.Document)},y=function(e){return u(e)&&e.window===e&&w(e.document)},x=function(e){return b(e)||w(e)||y(e)},k=function(e,t,n){return e.addEventListener(t,n)},_=function(e,t,n){return e.removeEventListener(t,n)},C=new Promise(function(e){/^(i|c|loade)/.test(g.readyState)?e():k(g,"DOMContentLoaded",function(){return e()})}),S=function(){return C},A=new Promise(function(e){k(h,"load",function(){return e()})}),T=function(){return A},E=function e(t){if(d(t,e))return t;var n=void 0;return l(t)?(t=t.trim(),n="<"===t[0]?m(t):v(t)):n=x(t)?[t]:c(t)?t:[t],n=s(n,x),Object.assign(Object.create(e.prototype),n,{length:n.length})};E.prototype={constructor:E,each:function(e){return a(this,e),this},map:function(e){return f(this,e)},find:function(e){var t;return E((t=[]).concat.apply(t,r(this.map(function(t){return v(e,t)}))))},on:function(e,t){return this.each(function(n){return k(n,e,t)})},off:function(e,t){return this.each(function(n){return _(n,e,t)})},attr:function(e,t){return void 0===t?this.length?this[0].getAttribute(e):void 0:this.each(function(n){return n.setAttribute(e,t)})},rmAttr:function(e){return this.each(function(t){return t.removeAttribute(e)})},prop:function(e,t){return void 0===t?this.length?this[0][e]:void 0:this.each(function(n){n[e]=t})},rmProp:function(e){return this.each(function(t){return delete t[e]})},val:function(e){return void 0===e?this.length?this[0].value:void 0:this.each(function(t){t.value=e})},html:function(e){return void 0===e?this.map(function(e){return e.innerHTML}).join(""):this.each(function(t){t.innerHTML=e})},text:function(e){return void 0===e?this.map(function(e){return e.textContent}).join(""):this.each(function(t){t.textContent=e})},clr:function(){return this.html("")},rm:function(){return this.each(function(e){var t=e.parentNode;t&&t.removeChild(e)})},rpl:function(e){return this.each(function(t){var n=t.parentNode;n&&n.replaceChild(E(e)[0],t)})},app:function(e){return this.each(function(t){E(e).each(function(e){return t.appendChild(e)})})},appTo:function(e){return E(e).app(this),this},pre:function(e){return this.each(function(t){E(e).each(function(e){var n=t.firstChild;n?t.insertBefore(e,n):t.appendChild(e)})})},preTo:function(e){return E(e).pre(this),this},cls:function(){return arguments.length?(this.each(function(e){e.className=""}),this.addCls.apply(this,arguments)):this.length?p(this[0].classList):[]},hasCls:function(e){return p(this).every(function(t){return t.classList.contains(e)})},addCls:function(){for(var e=arguments.length,t=Array(e),n=0;n<e;n++)t[n]=arguments[n];return this.each(function(e){var n=!0,r=!1,i=void 0;try{for(var o,a=t[Symbol.iterator]();!(n=(o=a.next()).done);n=!0){var s=o.value;e.classList.add(s)}}catch(e){r=!0,i=e}finally{try{!n&&a.return&&a.return()}finally{if(r)throw i}}})},rmCls:function(){for(var e=arguments.length,t=Array(e),n=0;n<e;n++)t[n]=arguments[n];return this.each(function(e){var n=!0,r=!1,i=void 0;try{for(var o,a=t[Symbol.iterator]();!(n=(o=a.next()).done);n=!0){var s=o.value;e.classList.remove(s)}}catch(e){r=!0,i=e}finally{try{!n&&a.return&&a.return()}finally{if(r)throw i}}})},tglCls:function(){for(var e=arguments.length,t=Array(e),n=0;n<e;n++)t[n]=arguments[n];return this.each(function(e){var n=!0,r=!1,i=void 0;try{for(var o,a=t[Symbol.iterator]();!(n=(o=a.next()).done);n=!0){var s=o.value;e.classList.contains(s)?e.classList.remove(s):e.classList.add(s)}}catch(e){r=!0,i=e}finally{try{!n&&a.return&&a.return()}finally{if(r)throw i}}})},parent:function(){return E(this.map(function(e){return e.parentNode}))},children:function(){var e;return E((e=[]).concat.apply(e,r(this.map(function(e){return p(e.children)}))))},hide:function(){return this.addCls("hidden")},show:function(){return this.rmCls("hidden")},isHidden:function(){return this.hasCls("hidden")},css:function(e){return this.each(function(t){return Object.assign(t.style,e)})}},e.exports={awaitReady:S,awaitLoad:T,dom:E}}).call(t,function(){return this}())},function(e,t){"use strict";var n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},r=/(^([+\-]?(?:0|[1-9]\d*)(?:\.\d*)?(?:[eE][+\-]?\d+)?)?$|^0x[0-9a-f]+$|\d+)/gi,i=/(^([\w ]+,?[\w ]+)?[\w ]+,?[\w ]+\d+:\d+(:\d+)?[\w ]?|^\d{1,4}[\/\-]\d{1,4}[\/\-]\d{1,4}|^\w+, \w+ \d+, \d{4})/,o=/^0x[0-9a-f]+$/i,a=/^0/,s=function(e,t){var s=String(e).trim(),c=String(t).trim(),u=s.replace(r,"\0$1\0").replace(/\0$/,"").replace(/^\0/,"").split("\0"),l=c.replace(r,"\0$1\0").replace(/\0$/,"").replace(/^\0/,"").split("\0"),f=parseInt(s.match(o),16)||1!==u.length&&s.match(i)&&Date.parse(s),d=parseInt(c.match(o),16)||f&&c.match(i)&&Date.parse(c)||null;if(d){if(f<d)return-1;if(f>d)return 1}for(var p=0,h=Math.max(u.length,l.length);p<h;p+=1){var g=!(u[p]||"").match(a)&&parseFloat(u[p])||u[p]||0,m=!(l[p]||"").match(a)&&parseFloat(l[p])||l[p]||0;if(isNaN(g)!==isNaN(m))return isNaN(g)?1:-1;if(("undefined"==typeof g?"undefined":n(g))!==("undefined"==typeof m?"undefined":n(m))&&(g=String(g),m=String(m)),g<m)return-1;if(g>m)return 1}return 0};e.exports={naturalCmp:s}},function(e,t){"use strict";var n=function(e){return e.replace(/[\-\[\]{}()*+?.,\\$\^|#\s]/g,"\\$&")},r=function(e,t){return t?"re:"===e.substr(0,3)?e.substr(3):e.trim().split(/\s+/).map(function(e){return e.split("").map(function(e){return n(e)}).join(".*?")}).join("|"):n(e)};e.exports={parsePattern:r}},function(e,t,n){"use strict";var r=n(8),i=r.request,o=e.exports={_update:function(e){return i(e).then(function(e){return Object.assign(o,e)})}}},function(e,t,n){(function(t){"use strict";var r=n(2),i=r.each,o=r.dom,a=t.window.XMLHttpRequest,s=function(e){return new Promise(function(t){var n=new a,r=function(){if(n.readyState===a.DONE)try{t(JSON.parse(n.responseText))}catch(e){t({err:e,txt:n.responseText})}};n.open("POST","?",!0),n.onreadystatechange=r,n.setRequestHeader("Content-Type","application/json;charset=utf-8"),n.send(JSON.stringify(e))})},c=function(e){var t=o('<form method="post" action="?" style="display:none;"/>');i(e,function(e,n){o('<input type="hidden"/>').attr("name",n).attr("value",e).appTo(t)}),t.appTo("body"),t[0].submit(),t.rm()};e.exports={request:s,formRequest:c}}).call(t,function(){return this}())},function(e,t,n){function r(e){return n(i(e))}function i(e){return o[e]||function(){throw new Error("Cannot find module '"+e+"'.")}()}var o={"./index":10,"./index.js":10,"./info":50,"./info.js":50};r.keys=function(){return Object.keys(o)},r.resolve=i,e.exports=r,r.id=9},function(e,t,n){(function(e){"use strict";n(11),n(24),n(25),n(26),n(27),n(29),n(30),n(31),n(32),n(34),n(36),n(37),n(44),n(45),n(46),n(47),n(48),n(49);var t=e.window.document.location.href;n(20).setLocation(t,!0)}).call(t,function(){return this}())},function(e,t,n){"use strict";var r=n(2),i=r.each,o=r.dom,a=n(12),s=n(13),c=n(14),u=n(15),l=n(17),f=n(18),d=Object.assign({modeToggle:!1},c.view),p='<div id="viewmode-settings" class="block"><h1 class="l10n-view">View</h1></div>',h='<div id="viewmode-[MODE]" class="button mode">\n <img src="'+s.image("view-[MODE]")+'" alt="viewmode-[MODE]"/>\n </div>',g='<input id="viewmode-size" type="range" min="0" max="0" value="0">',m='<div id="viewmode-toggle" class="tool">\n <img alt="viewmode"/>\n </div>',v=void 0,b=void 0,w=function(e,t){o("#viewmode-settings .mode").rmCls("active"),o("#viewmode-"+e).addCls("active"),o("#viewmode-size").val(b.indexOf(t)),"next"===d.modeToggle&&(e=v[(v.indexOf(e)+1)%v.length]),o("#viewmode-toggle img").attr("src",s.image("view-"+e))},y=function(){if(!(v.length<2&&b.length<2)){var e=o(p);if(v.length>1&&i(v,function(t){o(h.replace(/\[MODE\]/g,t)).on("click",function(){f.setMode(t)}).appTo(e)}),b.length>1){var t=b.length-1;o(g).attr("max",t).on("input",function(e){return f.setSize(b[e.target.valueAsNumber])}).on("change",function(e){return f.setSize(b[e.target.valueAsNumber])}).appTo(e)}e.appTo(u.$el)}},x=function(){var e=f.getMode(),t=(v.indexOf(e)+1)%v.length,n=v[t];f.setMode(n)},k=function(){d.modeToggle&&v.length>1&&o(m).on("click",x).appTo(l.$toolbar)},_=function(){v=f.getModes(),b=f.getSizes(),y(),k(),w(f.getMode(),f.getSize()),a.sub("view.mode.changed",w)};_()},function(e,t,n){(function(t){"use strict";var r=n(2),i=r.isStr,o=r.isFn,a=r.dom,s={},c=function(e,t){i(e)&&o(t)&&(s[e]||(s[e]=[]),s[e].push(t))},u=function(e){for(var t=arguments.length,n=Array(t>1?t-1:0),r=1;r<t;r++)n[r-1]=arguments[r];i(e)&&s[e]&&s[e].forEach(function(t){t.apply(e,n)})};a(t.window).on("resize",function(){return u("resize")}),e.exports={sub:c,pub:u}}).call(t,function(){return this}())},function(e,t,n){"use strict";var r=n(2),i=r.includes,o=n(7),a=n(14),s=a.publicHref+"images/",c=s+"ui/",u=s+"themes/",l=u+"default/",f=["file","folder","folder-page","folder-parent","ar","aud","bin","img","txt","vid","x"],d=function(e){return c+e+".svg"},p=function(e){var t=(e||"").split("-")[0],n=o.theme[e]||o.theme[t];return n?u+n:i(f,e)?l+e+".svg":i(f,t)?l+t+".svg":l+"file.svg"};e.exports={image:d,icon:p}},function(e,t,n){"use strict";var r=n(7);e.exports=Object.assign({},r.options,{publicHref:r.setup.PUBLIC_HREF,rootHref:r.setup.ROOT_HREF})},function(e,t,n){"use strict";var r=n(2),i=r.dom,o=n(13),a=n(14),s=n(16),c=n(17),u=Object.assign({disableSidebar:!1},a.view),l="sidebarIsVisible",f='<div id="sidebar"></div>',d='<div id="sidebar-toggle" class="tool">\n <img alt="sidebar"/>\n </div>',p=function(){var e=i(f).hide(),t=i(d),n=t.find("img"),r=function(r){var i=s.get(l);r&&(i=!i,s.put(l,i)),i?(t.addCls("active"),n.attr("src",o.image("back")),e.show()):(t.rmCls("active"),n.attr("src",o.image("sidebar")),e.hide())};return u.disableSidebar||(e.appTo(c.$mainrow),t.appTo(c.$toolbar).on("click",function(){return r(!0)}),r()),{$el:e}};e.exports=p()},function(e,t){(function(t){"use strict";var n=t.window.localStorage,r="_h5ai",i=function(){try{return JSON.parse(n[r])}catch(e){}return{}},o=function(e){n[r]=JSON.stringify(e)},a=function(e,t){var n=i();n[e]=t,o(n)},s=function(e){return i()[e]};e.exports={put:a,get:s}}).call(t,function(){return this}())},function(e,t,n){"use strict";var r=n(2),i=r.dom,o="body",a='<div id="topbar">\n <div id="toolbar"></div>\n <div id="flowbar"></div>\n <a id="backlink" href="https://larsjung.de/h5ai/" title="powered by h5ai - https://larsjung.de/h5ai/">\n <div>powered</div>\n <div>by h5ai</div>\n </a>\n </div>',s='<div id="mainrow">\n <div id="content"></div>\n </div>',c=function(){var e=i(o).attr("id","root").clr().app(a).app(s);return{$root:e,$topbar:e.find("#topbar"),$toolbar:e.find("#toolbar"),$flowbar:e.find("#flowbar"),$mainrow:e.find("#mainrow"),$content:e.find("#content")}};e.exports=c()},function(e,t,n){"use strict";var r=n(2),i=r.each,o=r.map,a=r.includes,s=r.intersection,c=r.dom,u=n(12),l=n(19),f=n(20),d=n(13),p=n(16),h=n(14),g=n(17),m=["details","grid","icons"],v=[20,40,60,80,100,150,200,250,300,350,400],b=Object.assign({binaryPrefix:!1,hideFolders:!1,hideParentFolder:!1,maxIconSize:40,modes:m,setParentFolderLabels:!1,sizes:v},h.view),w=b.sizes.sort(function(e,t){return e-t}),y=s(b.modes,m),x="view",k='<div id="view">\n <ul id="items" class="clearfix">\n <li class="header">\n <a class="icon"></a>\n <a class="label" href="#"><span class="l10n-name"/></a>\n <a class="date" href="#"><span class="l10n-lastModified"/></a>\n <a class="size" href="#"><span class="l10n-size"/></a>\n </li>\n </ul>\n <div id="view-hint"></div>\n </div>',_='<li class="item">\n <a>\n <span class="icon square"><img/></span>\n <span class="icon landscape"><img/></span>\n <span class="label"></span>\n <span class="date"></span>\n <span class="size"></span>\n </a>\n </li>',C=c(k),S=C.find("#items"),A=C.find("#view-hint"),T=function(e,t,n){return Math.min(n,Math.max(t,e))},E=function(e){var t=T(e,20,80),n=T(e,40,160),r=T(e,80,1e3),i=Math.round(4*r/3),o="!important;",a="#view.view-details.view-size-"+e,s="#view.view-grid.view-size-"+e,c="#view.view-icons.view-size-"+e,u=[a+" .item .label {line-height: "+(t+14)+"px "+o+"}",a+" .item .date {line-height: "+(t+14)+"px "+o+"}",a+" .item .size {line-height: "+(t+14)+"px "+o+"}",a+" .square {width: "+t+"px "+o+" height: "+t+"px "+o+"}",a+" .square img {width: "+t+"px "+o+" height: "+t+"px "+o+"}",a+" .label {margin-left: "+(t+32)+"px "+o+"}",s+" .item .label {line-height: "+n+"px "+o+"}",s+" .square {width: "+n+"px "+o+" height: "+n+"px "+o+"}",s+" .square img {width: "+n+"px "+o+" height: "+n+"px "+o+"}",c+" .item {width: "+i+"px "+o+"}",c+" .landscape {width: "+i+"px "+o+" height: "+r+"px "+o+"}",c+" .landscape img {width: "+r+"px "+o+" height: "+r+"px "+o+"}",c+" .landscape .thumb {width: "+i+"px "+o+"}"];return u.join("\n")},M=function(){var e=o(w,function(e){return E(e)});e.push("#view .icon img {max-width: "+b.maxIconSize+"px; max-height: "+b.maxIconSize+"px;}"),c("<style></style>").text(e.join("\n")).appTo("head")},D=function(e,t){var n=p.get(x);e=e||n&&n.mode,t=t||n&&n.size,e=a(b.modes,e)?e:b.modes[0],t=a(b.sizes,t)?t:b.sizes[0],p.put(x,{mode:e,size:t}),i(y,function(t){t===e?C.addCls("view-"+t):C.rmCls("view-"+t)}),i(w,function(e){e===t?C.addCls("view-size-"+e):C.rmCls("view-size-"+e)}),u.pub("view.mode.changed",e,t)},P=function(){return y},z=function(){return p.get(x).mode},L=function(e){return D(e,null)},$=function(){return w},H=function(){return p.get(x).size},O=function(e){return D(null,e)},B=function(e){var t=e.target._item;u.pub("item.mouseenter",t)},R=function(e){var t=e.target._item;u.pub("item.mouseleave",t)},N=function(e){var t=c(_),n=t.find("a"),r=t.find(".icon img"),i=t.find(".label"),o=t.find(".date"),a=t.find(".size");return t.addCls(e.isFolder()?"folder":"file").on("mouseenter",B).on("mouseleave",R),f.setLink(n,e),i.text(e.label).attr("title",e.label),o.attr("data-time",e.time).text(l.formatDate(e.time)),a.attr("data-bytes",e.size).text(l.formatSize(e.size)),e.icon=d.icon(e.type),e.isFolder()&&!e.isManaged&&(t.addCls("page"),e.icon=d.icon("folder-page")),e.isCurrentParentFolder()&&(e.icon=d.icon("folder-parent"),b.setParentFolderLabels||i.addCls("l10n-parentDirectory"),t.addCls("folder-parent")),r.attr("src",e.icon).attr("alt",e.type),e.$view=t,t[0]._item=e,t},I=function(){var e=S.find(".item").length===S.find(".folder-parent").length;e?A.show():A.hide()},j=function(e){var t=o(S.find(".item"),function(e){return e._item});S.find(".item").rm(),i(e,function(e){return S.app(N(e))}),g.$content[0].scrollLeft=0,g.$content[0].scrollTop=0,I(),u.pub("view.changed",e,t)},F=function(e,t){i(e,function(e){N(e).hide().appTo(S).show()}),i(t,function(e){e.$view.hide().rm()}),I(),u.pub("view.changed",e,t)},q=function(e){A.rmCls().addCls("l10n-"+e),I()},Y=function(e){e||(e=f.getItem());var t=[];e.parent&&!b.hideParentFolder&&t.push(e.parent),i(e.content,function(e){e.isFolder()&&b.hideFolders||t.push(e)}),q("empty"),j(t)},Z=function(e,t,n){var r=[];i(t,function(e){e.isFolder()&&b.hideFolders||r.push(e)}),q("empty"),F(r,n)},U=function(){var e=C[0].offsetWidth;C.rmCls("width-0").rmCls("width-1"),e<320?C.addCls("width-0"):e<480&&C.addCls("width-1")},V=function(){M(),D(),C.appTo(g.$content),A.hide(),l.setDefaultMetric(b.binaryPrefix),u.sub("location.changed",Y),u.sub("location.refreshed",Z),u.sub("resize",U),U()};V(),e.exports={$el:C,setItems:j,changeItems:F,setLocation:Y,setHint:q,getModes:P,getMode:z,setMode:L,getSizes:$,getSize:H,setSize:O}},function(e,t,n){"use strict";var r=n(2),i=r.isNum,o={t:1e3,k:1e3,u:["B","KB","MB","GB","TB","PB","EB","ZB","YB"]},a={t:1024,k:1024,u:["B","KiB","MiB","GiB","TiB","PiB","EiB","ZiB","YiB"]},s=o,c=[[/YYYY/,"Y",4],[/YY/,"Y",2],[/Y/,"Y",0],[/MM/,"M",2],[/M/,"M",0],[/DD/,"D",2],[/D/,"D",0],[/HH/,"H",2],[/H/,"H",0],[/mm/,"m",2],[/m/,"m",0],[/ss/,"s",2],[/s/,"s",0]],u="YYYY-MM-DD HH:mm",l=function(e){s=e?a:o},f=function(e,t){if(t=t||s,!i(e)||e<0)return"";for(var n=0,r=t.u.length-1;e>=t.t&&n<r;)e/=t.k,n+=1;return(n<=1?Math.round(e):e.toFixed(1)).toString()+" "+t.u[n]},d=function(e){u=e},p=function(e,t){var n=String(e);return t&&(n=("000"+n).substr(-t)),n},h=function(e,t){if(!e||!i(e))return"";t=t||u;var n=new Date(e),r={Y:n.getFullYear(),M:n.getMonth()+1,D:n.getDate(),H:n.getHours(),m:n.getMinutes(),s:n.getSeconds()};return c.forEach(function(e){t=t.replace(e[0],p(r[e[1]],e[2]))}),t};e.exports={setDefaultMetric:l,formatSize:f,setDefaultDateFormat:d,formatDate:h}},function(e,t,n){(function(t){"use strict";var r=n(2),i=r.each,o=r.values,a=r.difference,s=n(8),c=s.request,u=n(14),l=n(12),f=n(21),d=t.window,p=d.document,h=Object.assign({fastBrowsing:!0,unmanagedInNewWindow:!0},u.view),g=h.fastBrowsing?d.history:null,m=/^.*:\/\/[^\/]*|[^\/]*$/g,v=[[/\/+/g,"/"],[/ /g,"%20"],[/!/g,"%21"],[/#/g,"%23"],[/\$/g,"%24"],[/&/g,"%26"],[/'/g,"%27"],[/\(/g,"%28"],[/\)/g,"%29"],[/\*/g,"%2A"],[/\+/g,"%2B"],[/\,/g,"%2C"],[/:/g,"%3A"],[/;/g,"%3B"],[/\=/g,"%3D"],[/\?/g,"%3F"],[/@/g,"%40"],[/\[/g,"%5B"],[/\]/g,"%5D"]],b=null,w=function(e){return v.reduce(function(e,t){return e.replace(t[0],t[1])},e)},y=function(e){return e.replace(m,"")},x=function(){var e="/a b",t=p.createElement("a");return t.href=e,y(t.href)===e}(),k=function(e){var t=p.createElement("a"),n=void 0;return t.href=e,n=y(t.href),x&&(n=encodeURIComponent(n).replace(/%2F/gi,"/")),w(n)},_=function(){return p.domain},C=function(){return b},S=function(){return n(22).get(b)},A=function(){return c({action:"get",items:{href:b,what:1}}).then(function(e){var t=n(22),r=t.get(b);if(e){var o={};i(e.items,function(e){var n=t.get(e);o[n.absHref]=!0}),i(r.content,function(e){o[e.absHref]||t.remove(e.absHref)})}return r})},T=function(){var e=S(),t=o(e.content);l.pub("location.beforeRefresh"),A().then(function(){var n=o(e.content),r=a(n,t),i=a(t,n);l.pub("location.refreshed",e,r,i)})},E=function(e,t){l.pub("location.beforeChange"),e=k(e),b!==e&&(b=e,g&&(t?g.replaceState({absHref:b},"",b):g.pushState({absHref:b},"",b)));var n=S();n.isLoaded?(l.pub("location.changed",n),T()):(f.set("loading..."),A().then(function(){n.isLoaded=!0,f.set(),l.pub("location.changed",n)}))},M=function(e,t){e.attr("href",t.absHref),g&&t.isFolder()&&t.isManaged&&e.on("click",function(e){return E(t.absHref),e.preventDefault(),!1}),h.unmanagedInNewWindow&&!t.isManaged&&e.attr("target","_blank")},D=function(e){e.state&&e.state.absHref&&E(e.state.absHref,!0)};d.onpopstate=g?D:null,e.exports={forceEncoding:w,getDomain:_,getAbsHref:C,getItem:S,setLocation:E,refresh:T,setLink:M}}).call(t,function(){return this}())},function(e,t,n){"use strict";var r=n(2),i=r.dom,o=n(17),a=function(){var e=i('<div id="notification"></div>').hide().appTo(o.$root),t=function(t){t?e.html(t).show():e.hide()};return{set:t}};e.exports=a()},function(e,t,n){"use strict";var r=n(2),i=r.keys,o=r.each,a=r.filter,s=r.sortBy,c=r.isStr,u=r.isNum,l=n(8),f=n(20),d=n(14),p=n(23),h=/\/$/,g=/^(.*\/)([^\/]+\/?)$/,m={},v=function(e,t){return c(e)&&e.startsWith(t)},b=function(e){e=e.replace(h,"");try{e=decodeURIComponent(e)}catch(e){}return e},w=function(e){if("/"===e)return{parent:null,name:"/"};var t=g.exec(e);if(!t)return null;var n={parent:t[1],name:t[2]};return n.parent&&!v(n.parent,d.rootHref)&&(n.parent=null),n},y=function(e){if(c(e))e={href:e};else if(!e||!c(e.href))return null;var t=f.forceEncoding(e.href);if(!v(t,d.rootHref))return null;var n=m[t]||_(t);return u(e.time)&&(n.time=e.time),u(e.size)&&(n.size=e.size),e.managed&&(n.isManaged=!0),e.fetched&&(n.isContentFetched=!0),n},x=function e(t){t=f.forceEncoding(t);var n=m[t];n&&(delete m[t],n.parent&&delete n.parent.content[n.absHref],o(n.content,function(t){e(t.absHref)}))},k=function(e){return new Promise(function(t){var n=y(e);n.isContentFetched?t(n):l.request({action:"get",items:{href:n.absHref,what:1}}).then(function(e){e.items&&o(e.items,function(e){y(e)}),t(n)})})},_=function e(t){var n=w(t),r=Object.assign(Object.create(e.prototype),{absHref:t,type:p.getType(t),label:b("/"===t?f.getDomain():n.name),time:null,size:null,parent:null,isManaged:null,content:{}});return m[t]=r,n.parent&&(r.parent=y(n.parent),r.parent.content[r.absHref]=r,i(r.parent.content).length>1&&(r.parent.isContentFetched=!0)),r};_.prototype={constructor:_,isFolder:function(){return h.test(this.absHref)},isCurrentFolder:function(){return this.absHref===f.getAbsHref()},isInCurrentFolder:function(){return!!this.parent&&this.parent.isCurrentFolder()},isCurrentParentFolder:function(){var e=y(f.getAbsHref());return!!e&&this===e.parent},isDomain:function(){return"/"===this.absHref},isRoot:function(){return this.absHref===d.rootHref},isEmpty:function(){return 0===i(this.content).length},fetchContent:function(){return k(this.absHref)},getCrumb:function(){for(var e=this,t=[e];e.parent;)e=e.parent,t.unshift(e);return t},getSubfolders:function(){return s(a(this.content,function(e){return e.isFolder()}),function(e){return e.label.toLowerCase()})},getStats:function(){var e=0,t=0;o(this.content,function(n){n.isFolder()?e+=1:t+=1});for(var n=0,r=this;r.parent;)n+=1,r=r.parent;return{folders:e,files:t,depth:n}}},e.exports={get:y,remove:x}},function(e,t,n){"use strict";var r=n(2),i=r.each,o=r.map,a=n(7),s=/\/$/,c={},u=function(e){return e.replace(/[\-\[\]\/\{\}\(\)\+\?\.\\\^\$]/g,"\\$&")},l=function(e){i(e,function(e,t){var n="^("+o(e,function(e){return"("+u(e).replace(/\*/g,".*")+")"}).join("|")+")$";c[t]=new RegExp(n,"i")})},f=function(e){if(s.test(e))return"folder";var t=e.lastIndexOf("/"),n=t>=0?e.substr(t+1):e,r=void 0;return i(c,function(e,t){c[t].test(n)&&(r=t)}),r?r:"file"};l(Object.assign({},a.types)),e.exports={getType:f}},function(e,t,n){(function(e){"use strict";var t=n(12),r=n(20),i=n(14),o=e.window,a=Object.assign({enabled:!1,interval:5e3},i.autorefresh),s=null,c=function(){r.refresh()},u=function(){o.clearTimeout(s)},l=function(){o.clearTimeout(s),s=o.setTimeout(c,a.interval)},f=function(){a.enabled&&(a.interval=Math.max(1e3,a.interval),t.sub("location.beforeChange",u),t.sub("location.beforeRefresh",u),t.sub("location.changed",l),t.sub("location.refreshed",l))};f()}).call(t,function(){return this}())},function(e,t,n){"use strict";var r=n(2),i=r.each,o=r.dom,a=n(13),s=n(14),c=Object.assign({enabled:!1},s.contextmenu),u='<div id="cm-overlay"></div>',l='<div class="cm-panel"><ul></ul></div>',f='<li class="cm-sep"></li>',d='<li class="cm-entry"><span class="cm-icon"><img/></span><span class="cm-text"></span></li>',p='<li class="cm-label"><span class="cm-text"></span></li>',h=function(e){for(;!e._cmId&&e.parentNode;)e=e.parentNode;return e._cmId},g=function(e){var t=o(u),n=function(n){n.stopPropagation(),n.preventDefault();var r=h(n.target);n.target!==t[0]&&void 0===r||(t.rm(),e(r))};return t.on("contextmenu",n).on("click",n)},m=function(e){var t=o(l),n=t.find("ul"),r=void 0;return i(e,function(e){"-"===e.type?o(f).appTo(n):"l"===e.type?o(p).appTo(n).find(".cm-text").text(e.text):"e"===e.type&&(r=o(d).appTo(n),r[0]._cmId=e.id,r.find(".cm-text").text(e.text),e.icon?r.find(".cm-icon img").attr("src",a.icon(e.icon)):r.find(".cm-icon").addCls("no-icon"))}),t},v=function(e,t,n,r){var i=4;t.css({left:0,top:0,opacity:0}),e.show();var o=e[0].getBoundingClientRect(),a=t[0].getBoundingClientRect(),s=o.left,c=o.top,u=o.width,l=o.height,f=a.width,d=a.height,p=n,h=r;f>u-2*i&&(p=i,f=u-2*i),d>l-2*i&&(h=i,d=l-2*i),p<s+i&&(p=s+i),p+f>s+u-i&&(p=s+u-i-f),h<c+i&&(h=c+i),h+d>c+l-i&&(h=c+l-i-d),t.css({left:p+"px",top:h+"px",width:f+"px",height:d+"px",opacity:1})},b=function(e,t,n,r){var i=g(r),o=m(n);i.hide().app(o).appTo("body"),v(i,o,e,t)},w=function(){if(c.enabled){var e=[{type:"e",id:"e1",text:"testing context menus"},{type:"e",id:"e2",text:"another entry"},{type:"e",id:"e3",text:"one with icon",icon:"folder"},{type:"-"},{type:"e",id:"e4",text:"one with icon",icon:"x"},{type:"e",id:"e5",text:"one with icon",icon:"img"}];o("#view").on("contextmenu",function(t){t.preventDefault(),b(t.pageX,t.pageY,e)})}};w()},function(e,t,n){"use strict";var r=n(2),i=r.each,o=r.dom,a=n(12),s=n(20),c=n(13),u=n(14),l=n(17),f=Object.assign({enabled:!1},u.crumb),d='<div id="crumbbar"></div>',p='<a class="crumb">\n <img class="sep" src="'+c.image("crumb")+'" alt=">"/>\n <span class="label"></span>\n </a>',h='<img class="hint" src="'+c.icon("folder-page")+'" alt="has index page"/>',g=function(e){var t=o(p);return s.setLink(t,e),t.find(".label").text(e.label),e.isCurrentFolder()&&t.addCls("active"),e.isManaged||t.app(o(h)),e._$crumb=t,t[0]._item=e,t},m=function(e){var t=e._$crumb,n=o("#crumbbar");t&&t.parent()[0]===n[0]?(n.children().rmCls("active"),t.addCls("active")):(n.clr(),i(e.getCrumb(),function(e){n.app(g(e))}))},v=function(){f.enabled&&(o(d).appTo(l.$flowbar),a.sub("location.changed",m))};v()},function(e,t,n){"use strict";var r=n(28),i=n(2),o=i.each,a=i.dom,s=n(8),c=n(12),u=n(14),l=Object.assign({enabled:!1},u.custom),f=function(e,t){var n=a("#content-"+t);if(e&&e[t].content){var i=e[t].content;"md"===e[t].type&&(i=r(i)),n.html(i).show()}else n.hide()},d=function(e){s.request({action:"get",custom:e.absHref}).then(function(e){var t=e&&e.custom;o(["header","footer"],function(e){return f(t,e)})})},p=function(){l.enabled&&(a('<div id="content-header"></div>').hide().preTo("#content"),a('<div id="content-footer"></div>').hide().appTo("#content"),c.sub("location.changed",d))};p()},function(e,t,n){(function(t){!function(t){"use strict";function n(e){this.tokens=[],this.tokens.links=Object.create(null),this.options=e||b.defaults,this.rules=w.normal,this.options.pedantic?this.rules=w.pedantic:this.options.gfm&&(this.options.tables?this.rules=w.tables:this.rules=w.gfm)}function r(e,t){if(this.options=t||b.defaults,this.links=e,this.rules=y.normal,this.renderer=this.options.renderer||new i,this.renderer.options=this.options,!this.links)throw new Error("Tokens array requires a `links` property.");this.options.pedantic?this.rules=y.pedantic:this.options.gfm&&(this.options.breaks?this.rules=y.breaks:this.rules=y.gfm)}function i(e){this.options=e||b.defaults}function o(){}function a(e){this.tokens=[],this.token=null,this.options=e||b.defaults,this.options.renderer=this.options.renderer||new i,this.renderer=this.options.renderer,this.renderer.options=this.options,this.slugger=new s}function s(){this.seen={}}function c(e,t){if(t){if(c.escapeTest.test(e))return e.replace(c.escapeReplace,function(e){return c.replacements[e]})}else if(c.escapeTestNoEncode.test(e))return e.replace(c.escapeReplaceNoEncode,function(e){return c.replacements[e]});return e}function u(e){return e.replace(/&(#(?:\d+)|(?:#x[0-9A-Fa-f]+)|(?:\w+));?/gi,function(e,t){return t=t.toLowerCase(),"colon"===t?":":"#"===t.charAt(0)?"x"===t.charAt(1)?String.fromCharCode(parseInt(t.substring(2),16)):String.fromCharCode(+t.substring(1)):""})}function l(e,t){return e=e.source||e,t=t||"",{replace:function(t,n){return n=n.source||n,n=n.replace(/(^|[^\[])\^/g,"$1"),e=e.replace(t,n),this},getRegex:function(){return new RegExp(e,t)}}}function f(e,t,n){if(e){try{var r=decodeURIComponent(u(n)).replace(/[^\w:]/g,"").toLowerCase()}catch(e){return null}if(0===r.indexOf("javascript:")||0===r.indexOf("vbscript:")||0===r.indexOf("data:"))return null}t&&!k.test(n)&&(n=d(t,n));try{n=encodeURI(n).replace(/%25/g,"%")}catch(e){return null}return n}function d(e,t){return x[" "+e]||(/^[^:]+:\/*[^\/]*$/.test(e)?x[" "+e]=e+"/":x[" "+e]=m(e,"/",!0)),e=x[" "+e],"//"===t.slice(0,2)?e.replace(/:[\s\S]*/,":")+t:"/"===t.charAt(0)?e.replace(/(:\/*[^\/]*)[\s\S]*/,"$1")+t:e+t}function p(){}function h(e){for(var t,n,r=1;r<arguments.length;r++){t=arguments[r];for(n in t)Object.prototype.hasOwnProperty.call(t,n)&&(e[n]=t[n])}return e}function g(e,t){var n=e.replace(/\|/g,function(e,t,n){for(var r=!1,i=t;--i>=0&&"\\"===n[i];)r=!r;
+return r?"|":" |"}),r=n.split(/ \|/),i=0;if(r.length>t)r.splice(t);else for(;r.length<t;)r.push("");for(;i<r.length;i++)r[i]=r[i].trim().replace(/\\\|/g,"|");return r}function m(e,t,n){if(0===e.length)return"";for(var r=0;r<e.length;){var i=e.charAt(e.length-r-1);if(i!==t||n){if(i===t||!n)break;r++}else r++}return e.substr(0,e.length-r)}function v(e,t){if(e.indexOf(t[1])===-1)return-1;for(var n=0,r=0;r<e.length;r++)if("\\"===e[r])r++;else if(e[r]===t[0])n++;else if(e[r]===t[1]&&(n--,n<0))return r;return-1}function b(e,t,r){if("undefined"==typeof e||null===e)throw new Error("marked(): input parameter is undefined or null");if("string"!=typeof e)throw new Error("marked(): input parameter is of type "+Object.prototype.toString.call(e)+", string expected");if(r||"function"==typeof t){r||(r=t,t=null),t=h({},b.defaults,t||{});var i,o,s=t.highlight,u=0;try{i=n.lex(e,t)}catch(e){return r(e)}o=i.length;var l=function(e){if(e)return t.highlight=s,r(e);var n;try{n=a.parse(i,t)}catch(t){e=t}return t.highlight=s,e?r(e):r(null,n)};if(!s||s.length<3)return l();if(delete t.highlight,!o)return l();for(;u<i.length;u++)!function(e){return"code"!==e.type?--o||l():s(e.text,e.lang,function(t,n){return t?l(t):null==n||n===e.text?--o||l():(e.text=n,e.escaped=!0,void(--o||l()))})}(i[u])}else try{return t&&(t=h({},b.defaults,t)),a.parse(n.lex(e,t),t)}catch(e){if(e.message+="\nPlease report this to https://github.com/markedjs/marked.",(t||b.defaults).silent)return"<p>An error occurred:</p><pre>"+c(e.message+"",!0)+"</pre>";throw e}}var w={newline:/^\n+/,code:/^( {4}[^\n]+\n*)+/,fences:p,hr:/^ {0,3}((?:- *){3,}|(?:_ *){3,}|(?:\* *){3,})(?:\n+|$)/,heading:/^ *(#{1,6}) *([^\n]+?) *(?:#+ *)?(?:\n+|$)/,nptable:p,blockquote:/^( {0,3}> ?(paragraph|[^\n]*)(?:\n|$))+/,list:/^( {0,3})(bull) [\s\S]+?(?:hr|def|\n{2,}(?! )(?!\1bull )\n*|\s*$)/,html:"^ {0,3}(?:<(script|pre|style)[\\s>][\\s\\S]*?(?:</\\1>[^\\n]*\\n+|$)|comment[^\\n]*(\\n+|$)|<\\?[\\s\\S]*?\\?>\\n*|<![A-Z][\\s\\S]*?>\\n*|<!\\[CDATA\\[[\\s\\S]*?\\]\\]>\\n*|</?(tag)(?: +|\\n|/?>)[\\s\\S]*?(?:\\n{2,}|$)|<(?!script|pre|style)([a-z][\\w-]*)(?:attribute)*? */?>(?=\\h*\\n)[\\s\\S]*?(?:\\n{2,}|$)|</(?!script|pre|style)[a-z][\\w-]*\\s*>(?=\\h*\\n)[\\s\\S]*?(?:\\n{2,}|$))",def:/^ {0,3}\[(label)\]: *\n? *<?([^\s>]+)>?(?:(?: +\n? *| *\n *)(title))? *(?:\n+|$)/,table:p,lheading:/^([^\n]+)\n *(=|-){2,} *(?:\n+|$)/,paragraph:/^([^\n]+(?:\n(?!hr|heading|lheading| {0,3}>|<\/?(?:tag)(?: +|\n|\/?>)|<(?:script|pre|style|!--))[^\n]+)*)/,text:/^[^\n]+/};w._label=/(?!\s*\])(?:\\[\[\]]|[^\[\]])+/,w._title=/(?:"(?:\\"?|[^"\\])*"|'[^'\n]*(?:\n[^'\n]+)*\n?'|\([^()]*\))/,w.def=l(w.def).replace("label",w._label).replace("title",w._title).getRegex(),w.bullet=/(?:[*+-]|\d{1,9}\.)/,w.item=/^( *)(bull) ?[^\n]*(?:\n(?!\1bull ?)[^\n]*)*/,w.item=l(w.item,"gm").replace(/bull/g,w.bullet).getRegex(),w.list=l(w.list).replace(/bull/g,w.bullet).replace("hr","\\n+(?=\\1?(?:(?:- *){3,}|(?:_ *){3,}|(?:\\* *){3,})(?:\\n+|$))").replace("def","\\n+(?="+w.def.source+")").getRegex(),w._tag="address|article|aside|base|basefont|blockquote|body|caption|center|col|colgroup|dd|details|dialog|dir|div|dl|dt|fieldset|figcaption|figure|footer|form|frame|frameset|h[1-6]|head|header|hr|html|iframe|legend|li|link|main|menu|menuitem|meta|nav|noframes|ol|optgroup|option|p|param|section|source|summary|table|tbody|td|tfoot|th|thead|title|tr|track|ul",w._comment=/<!--(?!-?>)[\s\S]*?-->/,w.html=l(w.html,"i").replace("comment",w._comment).replace("tag",w._tag).replace("attribute",/ +[a-zA-Z:_][\w.:-]*(?: *= *"[^"\n]*"| *= *'[^'\n]*'| *= *[^\s"'=<>`]+)?/).getRegex(),w.paragraph=l(w.paragraph).replace("hr",w.hr).replace("heading",w.heading).replace("lheading",w.lheading).replace("tag",w._tag).getRegex(),w.blockquote=l(w.blockquote).replace("paragraph",w.paragraph).getRegex(),w.normal=h({},w),w.gfm=h({},w.normal,{fences:/^ {0,3}(`{3,}|~{3,})([^`\n]*)\n(?:|([\s\S]*?)\n)(?: {0,3}\1[~`]* *(?:\n+|$)|$)/,paragraph:/^/,heading:/^ *(#{1,6}) +([^\n]+?) *#* *(?:\n+|$)/}),w.gfm.paragraph=l(w.paragraph).replace("(?!","(?!"+w.gfm.fences.source.replace("\\1","\\2")+"|"+w.list.source.replace("\\1","\\3")+"|").getRegex(),w.tables=h({},w.gfm,{nptable:/^ *([^|\n ].*\|.*)\n *([-:]+ *\|[-| :]*)(?:\n((?:.*[^>\n ].*(?:\n|$))*)\n*|$)/,table:/^ *\|(.+)\n *\|?( *[-:]+[-| :]*)(?:\n((?: *[^>\n ].*(?:\n|$))*)\n*|$)/}),w.pedantic=h({},w.normal,{html:l("^ *(?:comment *(?:\\n|\\s*$)|<(tag)[\\s\\S]+?</\\1> *(?:\\n{2,}|\\s*$)|<tag(?:\"[^\"]*\"|'[^']*'|\\s[^'\"/>\\s]*)*?/?> *(?:\\n{2,}|\\s*$))").replace("comment",w._comment).replace(/tag/g,"(?!(?:a|em|strong|small|s|cite|q|dfn|abbr|data|time|code|var|samp|kbd|sub|sup|i|b|u|mark|ruby|rt|rp|bdi|bdo|span|br|wbr|ins|del|img)\\b)\\w+(?!:|[^\\w\\s@]*@)\\b").getRegex(),def:/^ *\[([^\]]+)\]: *<?([^\s>]+)>?(?: +(["(][^\n]+[")]))? *(?:\n+|$)/}),n.rules=w,n.lex=function(e,t){var r=new n(t);return r.lex(e)},n.prototype.lex=function(e){return e=e.replace(/\r\n|\r/g,"\n").replace(/\t/g," ").replace(/\u00a0/g," ").replace(/\u2424/g,"\n"),this.token(e,!0)},n.prototype.token=function(e,t){e=e.replace(/^ +$/gm,"");for(var n,r,i,o,a,s,c,u,l,f,d,p,h,v,b,y;e;)if((i=this.rules.newline.exec(e))&&(e=e.substring(i[0].length),i[0].length>1&&this.tokens.push({type:"space"})),i=this.rules.code.exec(e))e=e.substring(i[0].length),i=i[0].replace(/^ {4}/gm,""),this.tokens.push({type:"code",text:this.options.pedantic?i:m(i,"\n")});else if(i=this.rules.fences.exec(e))e=e.substring(i[0].length),this.tokens.push({type:"code",lang:i[2]?i[2].trim():i[2],text:i[3]||""});else if(i=this.rules.heading.exec(e))e=e.substring(i[0].length),this.tokens.push({type:"heading",depth:i[1].length,text:i[2]});else if(t&&(i=this.rules.nptable.exec(e))&&(s={type:"table",header:g(i[1].replace(/^ *| *\| *$/g,"")),align:i[2].replace(/^ *|\| *$/g,"").split(/ *\| */),cells:i[3]?i[3].replace(/\n$/,"").split("\n"):[]},s.header.length===s.align.length)){for(e=e.substring(i[0].length),d=0;d<s.align.length;d++)/^ *-+: *$/.test(s.align[d])?s.align[d]="right":/^ *:-+: *$/.test(s.align[d])?s.align[d]="center":/^ *:-+ *$/.test(s.align[d])?s.align[d]="left":s.align[d]=null;for(d=0;d<s.cells.length;d++)s.cells[d]=g(s.cells[d],s.header.length);this.tokens.push(s)}else if(i=this.rules.hr.exec(e))e=e.substring(i[0].length),this.tokens.push({type:"hr"});else if(i=this.rules.blockquote.exec(e))e=e.substring(i[0].length),this.tokens.push({type:"blockquote_start"}),i=i[0].replace(/^ *> ?/gm,""),this.token(i,t),this.tokens.push({type:"blockquote_end"});else if(i=this.rules.list.exec(e)){for(e=e.substring(i[0].length),o=i[2],v=o.length>1,c={type:"list_start",ordered:v,start:v?+o:"",loose:!1},this.tokens.push(c),i=i[0].match(this.rules.item),u=[],n=!1,h=i.length,d=0;d<h;d++)s=i[d],f=s.length,s=s.replace(/^ *([*+-]|\d+\.) */,""),~s.indexOf("\n ")&&(f-=s.length,s=this.options.pedantic?s.replace(/^ {1,4}/gm,""):s.replace(new RegExp("^ {1,"+f+"}","gm"),"")),d!==h-1&&(a=w.bullet.exec(i[d+1])[0],(o.length>1?1===a.length:a.length>1||this.options.smartLists&&a!==o)&&(e=i.slice(d+1).join("\n")+e,d=h-1)),r=n||/\n\n(?!\s*$)/.test(s),d!==h-1&&(n="\n"===s.charAt(s.length-1),r||(r=n)),r&&(c.loose=!0),b=/^\[[ xX]\] /.test(s),y=void 0,b&&(y=" "!==s[1],s=s.replace(/^\[[ xX]\] +/,"")),l={type:"list_item_start",task:b,checked:y,loose:r},u.push(l),this.tokens.push(l),this.token(s,!1),this.tokens.push({type:"list_item_end"});if(c.loose)for(h=u.length,d=0;d<h;d++)u[d].loose=!0;this.tokens.push({type:"list_end"})}else if(i=this.rules.html.exec(e))e=e.substring(i[0].length),this.tokens.push({type:this.options.sanitize?"paragraph":"html",pre:!this.options.sanitizer&&("pre"===i[1]||"script"===i[1]||"style"===i[1]),text:i[0]});else if(t&&(i=this.rules.def.exec(e)))e=e.substring(i[0].length),i[3]&&(i[3]=i[3].substring(1,i[3].length-1)),p=i[1].toLowerCase().replace(/\s+/g," "),this.tokens.links[p]||(this.tokens.links[p]={href:i[2],title:i[3]});else if(t&&(i=this.rules.table.exec(e))&&(s={type:"table",header:g(i[1].replace(/^ *| *\| *$/g,"")),align:i[2].replace(/^ *|\| *$/g,"").split(/ *\| */),cells:i[3]?i[3].replace(/(?: *\| *)?\n$/,"").split("\n"):[]},s.header.length===s.align.length)){for(e=e.substring(i[0].length),d=0;d<s.align.length;d++)/^ *-+: *$/.test(s.align[d])?s.align[d]="right":/^ *:-+: *$/.test(s.align[d])?s.align[d]="center":/^ *:-+ *$/.test(s.align[d])?s.align[d]="left":s.align[d]=null;for(d=0;d<s.cells.length;d++)s.cells[d]=g(s.cells[d].replace(/^ *\| *| *\| *$/g,""),s.header.length);this.tokens.push(s)}else if(i=this.rules.lheading.exec(e))e=e.substring(i[0].length),this.tokens.push({type:"heading",depth:"="===i[2]?1:2,text:i[1]});else if(t&&(i=this.rules.paragraph.exec(e)))e=e.substring(i[0].length),this.tokens.push({type:"paragraph",text:"\n"===i[1].charAt(i[1].length-1)?i[1].slice(0,-1):i[1]});else if(i=this.rules.text.exec(e))e=e.substring(i[0].length),this.tokens.push({type:"text",text:i[0]});else if(e)throw new Error("Infinite loop on byte: "+e.charCodeAt(0));return this.tokens};var y={escape:/^\\([!"#$%&'()*+,\-.\/:;<=>?@\[\]\\^_`{|}~])/,autolink:/^<(scheme:[^\s\x00-\x1f<>]*|email)>/,url:p,tag:"^comment|^</[a-zA-Z][\\w:-]*\\s*>|^<[a-zA-Z][\\w-]*(?:attribute)*?\\s*/?>|^<\\?[\\s\\S]*?\\?>|^<![a-zA-Z]+\\s[\\s\\S]*?>|^<!\\[CDATA\\[[\\s\\S]*?\\]\\]>",link:/^!?\[(label)\]\(href(?:\s+(title))?\s*\)/,reflink:/^!?\[(label)\]\[(?!\s*\])((?:\\[\[\]]?|[^\[\]\\])+)\]/,nolink:/^!?\[(?!\s*\])((?:\[[^\[\]]*\]|\\[\[\]]|[^\[\]])*)\](?:\[\])?/,strong:/^__([^\s_])__(?!_)|^\*\*([^\s*])\*\*(?!\*)|^__([^\s][\s\S]*?[^\s])__(?!_)|^\*\*([^\s][\s\S]*?[^\s])\*\*(?!\*)/,em:/^_([^\s_])_(?!_)|^\*([^\s*"<\[])\*(?!\*)|^_([^\s][\s\S]*?[^\s_])_(?!_|[^\spunctuation])|^_([^\s_][\s\S]*?[^\s])_(?!_|[^\spunctuation])|^\*([^\s"<\[][\s\S]*?[^\s*])\*(?!\*)|^\*([^\s*"<\[][\s\S]*?[^\s])\*(?!\*)/,code:/^(`+)([^`]|[^`][\s\S]*?[^`])\1(?!`)/,br:/^( {2,}|\\)\n(?!\s*$)/,del:p,text:/^(`+|[^`])[\s\S]*?(?=[\\<!\[`*]|\b_| {2,}\n|$)/};y._punctuation="!\"#$%&'()*+,\\-./:;<=>?@\\[^_{|}~",y.em=l(y.em).replace(/punctuation/g,y._punctuation).getRegex(),y._escapes=/\\([!"#$%&'()*+,\-.\/:;<=>?@\[\]\\^_`{|}~])/g,y._scheme=/[a-zA-Z][a-zA-Z0-9+.-]{1,31}/,y._email=/[a-zA-Z0-9.!#$%&'*+\/=?^_`{|}~-]+(@)[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)+(?![-_])/,y.autolink=l(y.autolink).replace("scheme",y._scheme).replace("email",y._email).getRegex(),y._attribute=/\s+[a-zA-Z:_][\w.:-]*(?:\s*=\s*"[^"]*"|\s*=\s*'[^']*'|\s*=\s*[^\s"'=<>`]+)?/,y.tag=l(y.tag).replace("comment",w._comment).replace("attribute",y._attribute).getRegex(),y._label=/(?:\[[^\[\]]*\]|\\[\[\]]?|`[^`]*`|[^\[\]\\])*?/,y._href=/\s*(<(?:\\[<>]?|[^\s<>\\])*>|[^\s\x00-\x1f]*)/,y._title=/"(?:\\"?|[^"\\])*"|'(?:\\'?|[^'\\])*'|\((?:\\\)?|[^)\\])*\)/,y.link=l(y.link).replace("label",y._label).replace("href",y._href).replace("title",y._title).getRegex(),y.reflink=l(y.reflink).replace("label",y._label).getRegex(),y.normal=h({},y),y.pedantic=h({},y.normal,{strong:/^__(?=\S)([\s\S]*?\S)__(?!_)|^\*\*(?=\S)([\s\S]*?\S)\*\*(?!\*)/,em:/^_(?=\S)([\s\S]*?\S)_(?!_)|^\*(?=\S)([\s\S]*?\S)\*(?!\*)/,link:l(/^!?\[(label)\]\((.*?)\)/).replace("label",y._label).getRegex(),reflink:l(/^!?\[(label)\]\s*\[([^\]]*)\]/).replace("label",y._label).getRegex()}),y.gfm=h({},y.normal,{escape:l(y.escape).replace("])","~|])").getRegex(),_extended_email:/[A-Za-z0-9._+-]+(@)[a-zA-Z0-9-_]+(?:\.[a-zA-Z0-9-_]*[a-zA-Z0-9])+(?![-_])/,url:/^((?:ftp|https?):\/\/|www\.)(?:[a-zA-Z0-9\-]+\.?)+[^\s<]*|^email/,_backpedal:/(?:[^?!.,:;*_~()&]+|\([^)]*\)|&(?![a-zA-Z0-9]+;$)|[?!.,:;*_~)]+(?!$))+/,del:/^~+(?=\S)([\s\S]*?\S)~+/,text:l(y.text).replace("]|","~]|").replace("|$","|https?://|ftp://|www\\.|[a-zA-Z0-9.!#$%&'*+/=?^_`{\\|}~-]+@|$").getRegex()}),y.gfm.url=l(y.gfm.url,"i").replace("email",y.gfm._extended_email).getRegex(),y.breaks=h({},y.gfm,{br:l(y.br).replace("{2,}","*").getRegex(),text:l(y.gfm.text).replace("{2,}","*").getRegex()}),r.rules=y,r.output=function(e,t,n){var i=new r(t,n);return i.output(e)},r.prototype.output=function(e){for(var t,n,i,o,a,s,u="";e;)if(a=this.rules.escape.exec(e))e=e.substring(a[0].length),u+=c(a[1]);else if(a=this.rules.tag.exec(e))!this.inLink&&/^<a /i.test(a[0])?this.inLink=!0:this.inLink&&/^<\/a>/i.test(a[0])&&(this.inLink=!1),!this.inRawBlock&&/^<(pre|code|kbd|script)(\s|>)/i.test(a[0])?this.inRawBlock=!0:this.inRawBlock&&/^<\/(pre|code|kbd|script)(\s|>)/i.test(a[0])&&(this.inRawBlock=!1),e=e.substring(a[0].length),u+=this.options.sanitize?this.options.sanitizer?this.options.sanitizer(a[0]):c(a[0]):a[0];else if(a=this.rules.link.exec(e)){var l=v(a[2],"()");if(l>-1){var f=a[2].length-l;a[2]=a[2].substring(0,l),a[0]=a[0].substring(0,a[0].length-f)}e=e.substring(a[0].length),this.inLink=!0,i=a[2],this.options.pedantic?(t=/^([^'"]*[^\s])\s+(['"])(.*)\2/.exec(i),t?(i=t[1],o=t[3]):o=""):o=a[3]?a[3].slice(1,-1):"",i=i.trim().replace(/^<([\s\S]*)>$/,"$1"),u+=this.outputLink(a,{href:r.escapes(i),title:r.escapes(o)}),this.inLink=!1}else if((a=this.rules.reflink.exec(e))||(a=this.rules.nolink.exec(e))){if(e=e.substring(a[0].length),t=(a[2]||a[1]).replace(/\s+/g," "),t=this.links[t.toLowerCase()],!t||!t.href){u+=a[0].charAt(0),e=a[0].substring(1)+e;continue}this.inLink=!0,u+=this.outputLink(a,t),this.inLink=!1}else if(a=this.rules.strong.exec(e))e=e.substring(a[0].length),u+=this.renderer.strong(this.output(a[4]||a[3]||a[2]||a[1]));else if(a=this.rules.em.exec(e))e=e.substring(a[0].length),u+=this.renderer.em(this.output(a[6]||a[5]||a[4]||a[3]||a[2]||a[1]));else if(a=this.rules.code.exec(e))e=e.substring(a[0].length),u+=this.renderer.codespan(c(a[2].trim(),!0));else if(a=this.rules.br.exec(e))e=e.substring(a[0].length),u+=this.renderer.br();else if(a=this.rules.del.exec(e))e=e.substring(a[0].length),u+=this.renderer.del(this.output(a[1]));else if(a=this.rules.autolink.exec(e))e=e.substring(a[0].length),"@"===a[2]?(n=c(this.mangle(a[1])),i="mailto:"+n):(n=c(a[1]),i=n),u+=this.renderer.link(i,null,n);else if(this.inLink||!(a=this.rules.url.exec(e))){if(a=this.rules.text.exec(e))e=e.substring(a[0].length),u+=this.inRawBlock?this.renderer.text(a[0]):this.renderer.text(c(this.smartypants(a[0])));else if(e)throw new Error("Infinite loop on byte: "+e.charCodeAt(0))}else{if("@"===a[2])n=c(a[0]),i="mailto:"+n;else{do s=a[0],a[0]=this.rules._backpedal.exec(a[0])[0];while(s!==a[0]);n=c(a[0]),i="www."===a[1]?"http://"+n:n}e=e.substring(a[0].length),u+=this.renderer.link(i,null,n)}return u},r.escapes=function(e){return e?e.replace(r.rules._escapes,"$1"):e},r.prototype.outputLink=function(e,t){var n=t.href,r=t.title?c(t.title):null;return"!"!==e[0].charAt(0)?this.renderer.link(n,r,this.output(e[1])):this.renderer.image(n,r,c(e[1]))},r.prototype.smartypants=function(e){return this.options.smartypants?e.replace(/---/g,"—").replace(/--/g,"–").replace(/(^|[-\u2014\/(\[{"\s])'/g,"$1‘").replace(/'/g,"’").replace(/(^|[-\u2014\/(\[{\u2018\s])"/g,"$1“").replace(/"/g,"”").replace(/\.{3}/g,"…"):e},r.prototype.mangle=function(e){if(!this.options.mangle)return e;for(var t,n="",r=e.length,i=0;i<r;i++)t=e.charCodeAt(i),Math.random()>.5&&(t="x"+t.toString(16)),n+="&#"+t+";";return n},i.prototype.code=function(e,t,n){var r=(t||"").match(/\S*/)[0];if(this.options.highlight){var i=this.options.highlight(e,r);null!=i&&i!==e&&(n=!0,e=i)}return r?'<pre><code class="'+this.options.langPrefix+c(r,!0)+'">'+(n?e:c(e,!0))+"</code></pre>\n":"<pre><code>"+(n?e:c(e,!0))+"</code></pre>"},i.prototype.blockquote=function(e){return"<blockquote>\n"+e+"</blockquote>\n"},i.prototype.html=function(e){return e},i.prototype.heading=function(e,t,n,r){return this.options.headerIds?"<h"+t+' id="'+this.options.headerPrefix+r.slug(n)+'">'+e+"</h"+t+">\n":"<h"+t+">"+e+"</h"+t+">\n"},i.prototype.hr=function(){return this.options.xhtml?"<hr/>\n":"<hr>\n"},i.prototype.list=function(e,t,n){var r=t?"ol":"ul",i=t&&1!==n?' start="'+n+'"':"";return"<"+r+i+">\n"+e+"</"+r+">\n"},i.prototype.listitem=function(e){return"<li>"+e+"</li>\n"},i.prototype.checkbox=function(e){return"<input "+(e?'checked="" ':"")+'disabled="" type="checkbox"'+(this.options.xhtml?" /":"")+"> "},i.prototype.paragraph=function(e){return"<p>"+e+"</p>\n"},i.prototype.table=function(e,t){return t&&(t="<tbody>"+t+"</tbody>"),"<table>\n<thead>\n"+e+"</thead>\n"+t+"</table>\n"},i.prototype.tablerow=function(e){return"<tr>\n"+e+"</tr>\n"},i.prototype.tablecell=function(e,t){var n=t.header?"th":"td",r=t.align?"<"+n+' align="'+t.align+'">':"<"+n+">";return r+e+"</"+n+">\n"},i.prototype.strong=function(e){return"<strong>"+e+"</strong>"},i.prototype.em=function(e){return"<em>"+e+"</em>"},i.prototype.codespan=function(e){return"<code>"+e+"</code>"},i.prototype.br=function(){return this.options.xhtml?"<br/>":"<br>"},i.prototype.del=function(e){return"<del>"+e+"</del>"},i.prototype.link=function(e,t,n){if(e=f(this.options.sanitize,this.options.baseUrl,e),null===e)return n;var r='<a href="'+c(e)+'"';return t&&(r+=' title="'+t+'"'),r+=">"+n+"</a>"},i.prototype.image=function(e,t,n){if(e=f(this.options.sanitize,this.options.baseUrl,e),null===e)return n;var r='<img src="'+e+'" alt="'+n+'"';return t&&(r+=' title="'+t+'"'),r+=this.options.xhtml?"/>":">"},i.prototype.text=function(e){return e},o.prototype.strong=o.prototype.em=o.prototype.codespan=o.prototype.del=o.prototype.text=function(e){return e},o.prototype.link=o.prototype.image=function(e,t,n){return""+n},o.prototype.br=function(){return""},a.parse=function(e,t){var n=new a(t);return n.parse(e)},a.prototype.parse=function(e){this.inline=new r(e.links,this.options),this.inlineText=new r(e.links,h({},this.options,{renderer:new o})),this.tokens=e.reverse();for(var t="";this.next();)t+=this.tok();return t},a.prototype.next=function(){return this.token=this.tokens.pop()},a.prototype.peek=function(){return this.tokens[this.tokens.length-1]||0},a.prototype.parseText=function(){for(var e=this.token.text;"text"===this.peek().type;)e+="\n"+this.next().text;return this.inline.output(e)},a.prototype.tok=function(){switch(this.token.type){case"space":return"";case"hr":return this.renderer.hr();case"heading":return this.renderer.heading(this.inline.output(this.token.text),this.token.depth,u(this.inlineText.output(this.token.text)),this.slugger);case"code":return this.renderer.code(this.token.text,this.token.lang,this.token.escaped);case"table":var e,t,n,r,i="",o="";for(n="",e=0;e<this.token.header.length;e++)n+=this.renderer.tablecell(this.inline.output(this.token.header[e]),{header:!0,align:this.token.align[e]});for(i+=this.renderer.tablerow(n),e=0;e<this.token.cells.length;e++){for(t=this.token.cells[e],n="",r=0;r<t.length;r++)n+=this.renderer.tablecell(this.inline.output(t[r]),{header:!1,align:this.token.align[r]});o+=this.renderer.tablerow(n)}return this.renderer.table(i,o);case"blockquote_start":for(o="";"blockquote_end"!==this.next().type;)o+=this.tok();return this.renderer.blockquote(o);case"list_start":o="";for(var a=this.token.ordered,s=this.token.start;"list_end"!==this.next().type;)o+=this.tok();return this.renderer.list(o,a,s);case"list_item_start":o="";var c=this.token.loose;for(this.token.task&&(o+=this.renderer.checkbox(this.token.checked));"list_item_end"!==this.next().type;)o+=c||"text"!==this.token.type?this.tok():this.parseText();return this.renderer.listitem(o);case"html":return this.renderer.html(this.token.text);case"paragraph":return this.renderer.paragraph(this.inline.output(this.token.text));case"text":return this.renderer.paragraph(this.parseText());default:var l='Token with "'+this.token.type+'" type was not found.';if(!this.options.silent)throw new Error(l);console.log(l)}},s.prototype.slug=function(e){var t=e.toLowerCase().trim().replace(/[\u2000-\u206F\u2E00-\u2E7F\\'!"#$%&()*+,.\/:;<=>?@[\]^`{|}~]/g,"").replace(/\s/g,"-");if(this.seen.hasOwnProperty(t)){var n=t;do this.seen[n]++,t=n+"-"+this.seen[n];while(this.seen.hasOwnProperty(t))}return this.seen[t]=0,t},c.escapeTest=/[&<>"']/,c.escapeReplace=/[&<>"']/g,c.replacements={"&":"&","<":"<",">":">",'"':""","'":"'"},c.escapeTestNoEncode=/[<>"']|&(?!#?\w+;)/,c.escapeReplaceNoEncode=/[<>"']|&(?!#?\w+;)/g;var x={},k=/^$|^[a-z][a-z0-9+.-]*:|^[?#]/i;p.exec=p,b.options=b.setOptions=function(e){return h(b.defaults,e),b},b.getDefaults=function(){return{baseUrl:null,breaks:!1,gfm:!0,headerIds:!0,headerPrefix:"",highlight:null,langPrefix:"language-",mangle:!0,pedantic:!1,renderer:new i,sanitize:!1,sanitizer:null,silent:!1,smartLists:!1,smartypants:!1,tables:!0,xhtml:!1}},b.defaults=b.getDefaults(),b.Parser=a,b.parser=a.parse,b.Renderer=i,b.TextRenderer=o,b.Lexer=n,b.lexer=n.lex,b.InlineLexer=r,b.inlineLexer=r.output,b.Slugger=s,b.parse=b,e.exports=b}(this||("undefined"!=typeof window?window:t))}).call(t,function(){return this}())},function(e,t,n){"use strict";var r=n(2),i=r.each,o=r.dom,a=n(8),s=n(12),c=n(20),u=n(13),l=n(14),f=Object.assign({enabled:!1,type:"php-tar",packageName:"package",alwaysVisible:!1},l.download),d='<div id="download" class="tool">\n <img src="'+u.image("download")+'" alt="download"/>\n </div>',p=[],h=void 0,g=function(e){p=e.slice(0),p.length?h.show():f.alwaysVisible||h.hide()},m=function(){var e=f.type,t=f.packageName,n="shell-zip"===e?"zip":"tar";t||(t=1===p.length?p[0].label:c.getItem().label);var r={action:"download",as:t+"."+n,type:e,baseHref:c.getAbsHref(),hrefs:""};i(p,function(e,t){r["hrefs["+t+"]"]=e.absHref}),a.formRequest(r)},v=function(){f.enabled&&(h=o(d).hide().appTo("#toolbar").on("click",m),f.alwaysVisible&&h.show(),s.sub("selection",g))};v()},function(e,t,n){"use strict";var r=n(2),i=r.filter,o=r.debounce,a=r.parsePattern,s=r.dom,c=n(12),u=n(20),l=n(13),f=n(14),d=n(18),p=Object.assign({enabled:!1,advanced:!1,debounceTime:100,ignorecase:!0},f.filter),h='<div id="filter" class="tool">\n <img src="'+l.image("filter")+'" alt="filter"/>\n <input class="l10n_ph-filter" type="text" value=""/>\n </div>',g=!1,m="",v=void 0,b=void 0,w=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"";if(e!==m){if(m=e,!e)return void d.setLocation();v.addCls("pending");var t=new RegExp(e,p.ignorecase?"i":""),n=i(u.getItem().content,function(e){return t.test(e.label)});v.rmCls("pending"),d.setHint("noMatch"),d.setItems(n)}},y=function(){g?(v.addCls("active"),b[0].focus(),w(a(b.val(),p.advanced))):(w(),v.rmCls("active"))},x=function(){g=!g,y()},k=function(){g=!1,b.val(""),y()},_=function(){p.enabled&&(v=s(h).appTo("#toolbar"),b=v.find("input"),v.find("img").on("click",x),b.on("keyup",o(y,p.debounceTime)),c.sub("location.changed",k))};_()},function(e,t,n){(function(e){"use strict";var t=n(2),r=t.map,i=n(12),o=n(14),a=e.window,s=Object.assign({enabled:!1,id:"UA-000000-0"},o["google-analytics-ua"]),c=function(){!function(e,t,n,r,i,o,a){e.GoogleAnalyticsObject=i,e[i]=e[i]||function(){(e[i].q=e[i].q||[]).push(arguments)},e[i].l=1*new Date,o=t.createElement(n),a=t.getElementsByTagName(n)[0],o.async=1,o.src=r,a.parentNode.insertBefore(o,a)}(window,document,"script","//www.google-analytics.com/analytics.js","ga")},u=function(){s.enabled&&(c(),a.ga("create",s.id,"auto"),i.sub("location.changed",function(e){var t=a.location;a.ga("send","pageview",{location:t.protocol+"//"+t.host+e.absHref,title:r(e.getCrumb(),function(e){return e.label}).join(" > ")})}))};u()}).call(t,function(){return this}())},function(e,t,n){(function(e){"use strict";var t=n(33),r=n(2),i=r.isNum,o=r.dom,a=n(12),s=n(19),c=n(13),u=n(14),l=n(16),f=Object.assign({enabled:!1,show:!1,qrcode:!0,qrColor:"#999"},u.info),d='<div id="info">\n <div class="icon"><img/></div>\n <div class="block">\n <div class="label"></div>\n <div class="time"></div>\n <div class="size"></div>\n <div class="content">\n <span class="folders"></span> <span class="l10n-folders"></span>,\n <span class="files"></span> <span class="l10n-files"></span>\n </div>\n </div>\n <div class="qrcode"/>\n </div>',p='<div class="block">\n <h1 class="l10n-info">Info</h1>\n <div id="view-info" class="button view">\n <img src="'+c.image("info-toggle")+'" alt="view-info"/>\n </div>\n </div>',h="ext/info",g=void 0,m=void 0,v=void 0,b=void 0,w=void 0,y=void 0,x=void 0,k=void 0,_=void 0,C=function(){l.get(h)?(o("#view-info").addCls("active"),o("#info").show()):(o("#view-info").rmCls("active"),o("#info").hide())},S=function(n){var r=n.thumbRational||n.icon,o=!!n.thumbRational;if(!n.isCurrentFolder()&&r||(r=c.icon("folder")),g.attr("src",r),o?g.addCls("thumb"):g.rmCls("thumb"),m.text(n.label),i(n.time)?v.text(s.formatDate(n.time)):v.text("."),i(n.size)?(b.text(s.formatSize(n.size)),b.show()):b.hide(),n.isContentFetched){var a=n.getStats();y.text(a.folders),x.text(a.files),w.show()}else w.hide();if(f.qrcode){var u=e.window.location;k.clr().app(t({render:"image",size:200,fill:f.qrFill,back:f.qrBack,text:u.protocol+"//"+u.host+n.absHref,crisp:!0,quiet:1}))}},A=function(e){S(e)},T=function(){S(_)},E=function(e){_=e,S(_)},M=function(){if(f.enabled){var e=o(d).hide().appTo("#mainrow");g=e.find(".icon img"),m=e.find(".label"),v=e.find(".time"),b=e.find(".size"),w=e.find(".content"),y=e.find(".folders"),x=e.find(".files"),k=e.find(".qrcode"),f.qrcode||k.rm(),o(p).appTo("#sidebar").find("#view-info").on("click",function(e){l.put(h,!l.get(h)),C(),a.pub("resize"),e.preventDefault()}),"boolean"!=typeof l.get(h)&&l.put(h,f.show),C(),a.sub("location.changed",E),a.sub("item.mouseenter",A),a.sub("item.mouseleave",T)}};M()}).call(t,function(){return this}())},function(e,t,n){var r,i,o;!function(t,n){e.exports=n()}(this,function(){return function(e){function t(r){if(n[r])return n[r].exports;var i=n[r]={exports:{},id:r,loaded:!1};return e[r].call(i.exports,i,i.exports,t),i.loaded=!0,i.exports}var n={};return t.m=e,t.c=n,t.p="",t(0)}([function(e,t,n){"use strict";var r=n(1),i=r.create_canvas,o=r.canvas_to_img,a=r.dpr,s=n(2),c=n(3),u=n(4);e.exports=function(e){var t=Object.assign({},s,e),n=c(t.text,t.ecLevel,t.minVersion,t.quiet),r=t.ratio||a,l=i(t.size,r),f=l.getContext("2d");return f.scale(r,r),u(n,f,t),"image"===t.render?o(l):l}},function(e,t){"use strict";var n=window,r=n.document,i=n.devicePixelRatio||1,o=function(e){return r.createElement(e)},a=function(e,t){return e.getAttribute(t)},s=function(e,t,n){return e.setAttribute(t,n)},c=function(e,t){var n=o("canvas");return s(n,"width",e*t),s(n,"height",e*t),n.style.width=e+"px",n.style.height=e+"px",n},u=function(e){var t=o("img");return s(t,"crossorigin","anonymous"),s(t,"src",e.toDataURL("image/png")),s(t,"width",a(e,"width")),s(t,"height",a(e,"height")),t.style.width=e.style.width,t.style.height=e.style.height,t};e.exports={create_canvas:c,canvas_to_img:u,dpr:i}},function(e,t){"use strict";e.exports={render:"image",crisp:!0,minVersion:1,ecLevel:"L",size:200,ratio:null,fill:"#333",back:"#fff",text:"no text",rounded:0,quiet:0,mode:"plain",mSize:30,mPosX:50,mPosY:50,label:"no label",fontname:"sans",fontcolor:"#333",image:null}},function(n,a){"use strict";var s="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},c=/code length overflow/i,u=function(){var n=function(){function e(t,n){if("undefined"==typeof t.length)throw new Error(t.length+"/"+n);var r=function(){for(var e=0;e<t.length&&0==t[e];)e+=1;for(var r=new Array(t.length-e+n),i=0;i<t.length-e;i+=1)r[i]=t[i+e];return r}(),i={};return i.getAt=function(e){return r[e]},i.getLength=function(){return r.length},i.multiply=function(t){for(var n=new Array(i.getLength()+t.getLength()-1),r=0;r<i.getLength();r+=1)for(var o=0;o<t.getLength();o+=1)n[r+o]^=a.gexp(a.glog(i.getAt(r))+a.glog(t.getAt(o)));return e(n,0)},i.mod=function(t){if(i.getLength()-t.getLength()<0)return i;for(var n=a.glog(i.getAt(0))-a.glog(t.getAt(0)),r=new Array(i.getLength()),o=0;o<i.getLength();o+=1)r[o]=i.getAt(o);for(var o=0;o<t.getLength();o+=1)r[o]^=a.gexp(a.glog(t.getAt(o))+n);return e(r,0).mod(t)},i}var t=function(t,n){var i=236,a=17,l=t,f=r[n],d=null,p=0,g=null,m=new Array,v={},b=function(e,t){p=4*l+17,d=function(e){for(var t=new Array(e),n=0;n<e;n+=1){t[n]=new Array(e);for(var r=0;r<e;r+=1)t[n][r]=null}return t}(p),w(0,0),w(p-7,0),w(0,p-7),k(),x(),C(e,t),l>=7&&_(e),null==g&&(g=T(l,f,m)),S(g,t)},w=function(e,t){for(var n=-1;n<=7;n+=1)if(!(e+n<=-1||p<=e+n))for(var r=-1;r<=7;r+=1)t+r<=-1||p<=t+r||(0<=n&&n<=6&&(0==r||6==r)||0<=r&&r<=6&&(0==n||6==n)||2<=n&&n<=4&&2<=r&&r<=4?d[e+n][t+r]=!0:d[e+n][t+r]=!1)},y=function(){for(var e=0,t=0,n=0;n<8;n+=1){b(!0,n);var r=o.getLostPoint(v);(0==n||e>r)&&(e=r,t=n)}return t},x=function(){for(var e=8;e<p-8;e+=1)null==d[e][6]&&(d[e][6]=e%2==0);for(var t=8;t<p-8;t+=1)null==d[6][t]&&(d[6][t]=t%2==0)},k=function(){for(var e=o.getPatternPosition(l),t=0;t<e.length;t+=1)for(var n=0;n<e.length;n+=1){var r=e[t],i=e[n];if(null==d[r][i])for(var a=-2;a<=2;a+=1)for(var s=-2;s<=2;s+=1)a==-2||2==a||s==-2||2==s||0==a&&0==s?d[r+a][i+s]=!0:d[r+a][i+s]=!1}},_=function(e){for(var t=o.getBCHTypeNumber(l),n=0;n<18;n+=1){var r=!e&&1==(t>>n&1);d[Math.floor(n/3)][n%3+p-8-3]=r}for(var n=0;n<18;n+=1){var r=!e&&1==(t>>n&1);d[n%3+p-8-3][Math.floor(n/3)]=r}},C=function(e,t){for(var n=f<<3|t,r=o.getBCHTypeInfo(n),i=0;i<15;i+=1){var a=!e&&1==(r>>i&1);i<6?d[i][8]=a:i<8?d[i+1][8]=a:d[p-15+i][8]=a}for(var i=0;i<15;i+=1){var a=!e&&1==(r>>i&1);i<8?d[8][p-i-1]=a:i<9?d[8][15-i-1+1]=a:d[8][15-i-1]=a}d[p-8][8]=!e},S=function(e,t){for(var n=-1,r=p-1,i=7,a=0,s=o.getMaskFunction(t),c=p-1;c>0;c-=2)for(6==c&&(c-=1);;){for(var u=0;u<2;u+=1)if(null==d[r][c-u]){var l=!1;a<e.length&&(l=1==(e[a]>>>i&1));var f=s(r,c-u);f&&(l=!l),d[r][c-u]=l,i-=1,i==-1&&(a+=1,i=7)}if(r+=n,r<0||p<=r){r-=n,n=-n;break}}},A=function(t,n){for(var r=0,i=0,a=0,s=new Array(n.length),c=new Array(n.length),u=0;u<n.length;u+=1){var l=n[u].dataCount,f=n[u].totalCount-l;i=Math.max(i,l),a=Math.max(a,f),s[u]=new Array(l);for(var d=0;d<s[u].length;d+=1)s[u][d]=255&t.getBuffer()[d+r];r+=l;var p=o.getErrorCorrectPolynomial(f),h=e(s[u],p.getLength()-1),g=h.mod(p);c[u]=new Array(p.getLength()-1);for(var d=0;d<c[u].length;d+=1){var m=d+g.getLength()-c[u].length;c[u][d]=m>=0?g.getAt(m):0}}for(var v=0,d=0;d<n.length;d+=1)v+=n[d].totalCount;for(var b=new Array(v),w=0,d=0;d<i;d+=1)for(var u=0;u<n.length;u+=1)d<s[u].length&&(b[w]=s[u][d],w+=1);for(var d=0;d<a;d+=1)for(var u=0;u<n.length;u+=1)d<c[u].length&&(b[w]=c[u][d],w+=1);return b},T=function(e,t,n){for(var r=s.getRSBlocks(e,t),u=c(),l=0;l<n.length;l+=1){var f=n[l];u.put(f.getMode(),4),u.put(f.getLength(),o.getLengthInBits(f.getMode(),e)),f.write(u)}for(var d=0,l=0;l<r.length;l+=1)d+=r[l].dataCount;if(u.getLengthInBits()>8*d)throw new Error("code length overflow. ("+u.getLengthInBits()+">"+8*d+")");for(u.getLengthInBits()+4<=8*d&&u.put(0,4);u.getLengthInBits()%8!=0;)u.putBit(!1);for(;!(u.getLengthInBits()>=8*d)&&(u.put(i,8),!(u.getLengthInBits()>=8*d));)u.put(a,8);return A(u,r)};return v.addData=function(e){var t=u(e);m.push(t),g=null},v.isDark=function(e,t){if(e<0||p<=e||t<0||p<=t)throw new Error(e+","+t);return d[e][t]},v.getModuleCount=function(){return p},v.make=function(){b(!1,y())},v.createTableTag=function(e,t){e=e||2,t="undefined"==typeof t?4*e:t;var n="";n+='<table style="',n+=" border-width: 0px; border-style: none;",n+=" border-collapse: collapse;",n+=" padding: 0px; margin: "+t+"px;",n+='">',n+="<tbody>";for(var r=0;r<v.getModuleCount();r+=1){n+="<tr>";for(var i=0;i<v.getModuleCount();i+=1)n+='<td style="',n+=" border-width: 0px; border-style: none;",n+=" border-collapse: collapse;",n+=" padding: 0px; margin: 0px;",n+=" width: "+e+"px;",n+=" height: "+e+"px;",n+=" background-color: ",n+=v.isDark(r,i)?"#000000":"#ffffff",n+=";",n+='"/>';n+="</tr>"}return n+="</tbody>",n+="</table>"},v.createImgTag=function(e,t){e=e||2,t="undefined"==typeof t?4*e:t;var n=v.getModuleCount()*e+2*t,r=t,i=n-t;return h(n,n,function(t,n){if(r<=t&&t<i&&r<=n&&n<i){var o=Math.floor((t-r)/e),a=Math.floor((n-r)/e);
+return v.isDark(a,o)?0:1}return 1})},v};t.stringToBytes=function(e){for(var t=new Array,n=0;n<e.length;n+=1){var r=e.charCodeAt(n);t.push(255&r)}return t},t.createStringToBytes=function(e,t){var n=function(){for(var n=d(e),r=function(){var e=n.read();if(e==-1)throw new Error;return e},i=0,o={};;){var a=n.read();if(a==-1)break;var s=r(),c=r(),u=r(),l=String.fromCharCode(a<<8|s),f=c<<8|u;o[l]=f,i+=1}if(i!=t)throw new Error(i+" != "+t);return o}(),r="?".charCodeAt(0);return function(e){for(var t=new Array,i=0;i<e.length;i+=1){var o=e.charCodeAt(i);if(o<128)t.push(o);else{var a=n[e.charAt(i)];"number"==typeof a?(255&a)==a?t.push(a):(t.push(a>>>8),t.push(255&a)):t.push(r)}}return t}};var n={MODE_NUMBER:1,MODE_ALPHA_NUM:2,MODE_8BIT_BYTE:4,MODE_KANJI:8},r={L:1,M:0,Q:3,H:2},i={PATTERN000:0,PATTERN001:1,PATTERN010:2,PATTERN011:3,PATTERN100:4,PATTERN101:5,PATTERN110:6,PATTERN111:7},o=function(){var t=[[],[6,18],[6,22],[6,26],[6,30],[6,34],[6,22,38],[6,24,42],[6,26,46],[6,28,50],[6,30,54],[6,32,58],[6,34,62],[6,26,46,66],[6,26,48,70],[6,26,50,74],[6,30,54,78],[6,30,56,82],[6,30,58,86],[6,34,62,90],[6,28,50,72,94],[6,26,50,74,98],[6,30,54,78,102],[6,28,54,80,106],[6,32,58,84,110],[6,30,58,86,114],[6,34,62,90,118],[6,26,50,74,98,122],[6,30,54,78,102,126],[6,26,52,78,104,130],[6,30,56,82,108,134],[6,34,60,86,112,138],[6,30,58,86,114,142],[6,34,62,90,118,146],[6,30,54,78,102,126,150],[6,24,50,76,102,128,154],[6,28,54,80,106,132,158],[6,32,58,84,110,136,162],[6,26,54,82,110,138,166],[6,30,58,86,114,142,170]],r=1335,o=7973,s=21522,c={},u=function(e){for(var t=0;0!=e;)t+=1,e>>>=1;return t};return c.getBCHTypeInfo=function(e){for(var t=e<<10;u(t)-u(r)>=0;)t^=r<<u(t)-u(r);return(e<<10|t)^s},c.getBCHTypeNumber=function(e){for(var t=e<<12;u(t)-u(o)>=0;)t^=o<<u(t)-u(o);return e<<12|t},c.getPatternPosition=function(e){return t[e-1]},c.getMaskFunction=function(e){switch(e){case i.PATTERN000:return function(e,t){return(e+t)%2==0};case i.PATTERN001:return function(e,t){return e%2==0};case i.PATTERN010:return function(e,t){return t%3==0};case i.PATTERN011:return function(e,t){return(e+t)%3==0};case i.PATTERN100:return function(e,t){return(Math.floor(e/2)+Math.floor(t/3))%2==0};case i.PATTERN101:return function(e,t){return e*t%2+e*t%3==0};case i.PATTERN110:return function(e,t){return(e*t%2+e*t%3)%2==0};case i.PATTERN111:return function(e,t){return(e*t%3+(e+t)%2)%2==0};default:throw new Error("bad maskPattern:"+e)}},c.getErrorCorrectPolynomial=function(t){for(var n=e([1],0),r=0;r<t;r+=1)n=n.multiply(e([1,a.gexp(r)],0));return n},c.getLengthInBits=function(e,t){if(1<=t&&t<10)switch(e){case n.MODE_NUMBER:return 10;case n.MODE_ALPHA_NUM:return 9;case n.MODE_8BIT_BYTE:return 8;case n.MODE_KANJI:return 8;default:throw new Error("mode:"+e)}else if(t<27)switch(e){case n.MODE_NUMBER:return 12;case n.MODE_ALPHA_NUM:return 11;case n.MODE_8BIT_BYTE:return 16;case n.MODE_KANJI:return 10;default:throw new Error("mode:"+e)}else{if(!(t<41))throw new Error("type:"+t);switch(e){case n.MODE_NUMBER:return 14;case n.MODE_ALPHA_NUM:return 13;case n.MODE_8BIT_BYTE:return 16;case n.MODE_KANJI:return 12;default:throw new Error("mode:"+e)}}},c.getLostPoint=function(e){for(var t=e.getModuleCount(),n=0,r=0;r<t;r+=1)for(var i=0;i<t;i+=1){for(var o=0,a=e.isDark(r,i),s=-1;s<=1;s+=1)if(!(r+s<0||t<=r+s))for(var c=-1;c<=1;c+=1)i+c<0||t<=i+c||0==s&&0==c||a==e.isDark(r+s,i+c)&&(o+=1);o>5&&(n+=3+o-5)}for(var r=0;r<t-1;r+=1)for(var i=0;i<t-1;i+=1){var u=0;e.isDark(r,i)&&(u+=1),e.isDark(r+1,i)&&(u+=1),e.isDark(r,i+1)&&(u+=1),e.isDark(r+1,i+1)&&(u+=1),0!=u&&4!=u||(n+=3)}for(var r=0;r<t;r+=1)for(var i=0;i<t-6;i+=1)e.isDark(r,i)&&!e.isDark(r,i+1)&&e.isDark(r,i+2)&&e.isDark(r,i+3)&&e.isDark(r,i+4)&&!e.isDark(r,i+5)&&e.isDark(r,i+6)&&(n+=40);for(var i=0;i<t;i+=1)for(var r=0;r<t-6;r+=1)e.isDark(r,i)&&!e.isDark(r+1,i)&&e.isDark(r+2,i)&&e.isDark(r+3,i)&&e.isDark(r+4,i)&&!e.isDark(r+5,i)&&e.isDark(r+6,i)&&(n+=40);for(var l=0,i=0;i<t;i+=1)for(var r=0;r<t;r+=1)e.isDark(r,i)&&(l+=1);var f=Math.abs(100*l/t/t-50)/5;return n+=10*f},c}(),a=function(){for(var e=new Array(256),t=new Array(256),n=0;n<8;n+=1)e[n]=1<<n;for(var n=8;n<256;n+=1)e[n]=e[n-4]^e[n-5]^e[n-6]^e[n-8];for(var n=0;n<255;n+=1)t[e[n]]=n;var r={};return r.glog=function(e){if(e<1)throw new Error("glog("+e+")");return t[e]},r.gexp=function(t){for(;t<0;)t+=255;for(;t>=256;)t-=255;return e[t]},r}(),s=function(){var e=[[1,26,19],[1,26,16],[1,26,13],[1,26,9],[1,44,34],[1,44,28],[1,44,22],[1,44,16],[1,70,55],[1,70,44],[2,35,17],[2,35,13],[1,100,80],[2,50,32],[2,50,24],[4,25,9],[1,134,108],[2,67,43],[2,33,15,2,34,16],[2,33,11,2,34,12],[2,86,68],[4,43,27],[4,43,19],[4,43,15],[2,98,78],[4,49,31],[2,32,14,4,33,15],[4,39,13,1,40,14],[2,121,97],[2,60,38,2,61,39],[4,40,18,2,41,19],[4,40,14,2,41,15],[2,146,116],[3,58,36,2,59,37],[4,36,16,4,37,17],[4,36,12,4,37,13],[2,86,68,2,87,69],[4,69,43,1,70,44],[6,43,19,2,44,20],[6,43,15,2,44,16],[4,101,81],[1,80,50,4,81,51],[4,50,22,4,51,23],[3,36,12,8,37,13],[2,116,92,2,117,93],[6,58,36,2,59,37],[4,46,20,6,47,21],[7,42,14,4,43,15],[4,133,107],[8,59,37,1,60,38],[8,44,20,4,45,21],[12,33,11,4,34,12],[3,145,115,1,146,116],[4,64,40,5,65,41],[11,36,16,5,37,17],[11,36,12,5,37,13],[5,109,87,1,110,88],[5,65,41,5,66,42],[5,54,24,7,55,25],[11,36,12,7,37,13],[5,122,98,1,123,99],[7,73,45,3,74,46],[15,43,19,2,44,20],[3,45,15,13,46,16],[1,135,107,5,136,108],[10,74,46,1,75,47],[1,50,22,15,51,23],[2,42,14,17,43,15],[5,150,120,1,151,121],[9,69,43,4,70,44],[17,50,22,1,51,23],[2,42,14,19,43,15],[3,141,113,4,142,114],[3,70,44,11,71,45],[17,47,21,4,48,22],[9,39,13,16,40,14],[3,135,107,5,136,108],[3,67,41,13,68,42],[15,54,24,5,55,25],[15,43,15,10,44,16],[4,144,116,4,145,117],[17,68,42],[17,50,22,6,51,23],[19,46,16,6,47,17],[2,139,111,7,140,112],[17,74,46],[7,54,24,16,55,25],[34,37,13],[4,151,121,5,152,122],[4,75,47,14,76,48],[11,54,24,14,55,25],[16,45,15,14,46,16],[6,147,117,4,148,118],[6,73,45,14,74,46],[11,54,24,16,55,25],[30,46,16,2,47,17],[8,132,106,4,133,107],[8,75,47,13,76,48],[7,54,24,22,55,25],[22,45,15,13,46,16],[10,142,114,2,143,115],[19,74,46,4,75,47],[28,50,22,6,51,23],[33,46,16,4,47,17],[8,152,122,4,153,123],[22,73,45,3,74,46],[8,53,23,26,54,24],[12,45,15,28,46,16],[3,147,117,10,148,118],[3,73,45,23,74,46],[4,54,24,31,55,25],[11,45,15,31,46,16],[7,146,116,7,147,117],[21,73,45,7,74,46],[1,53,23,37,54,24],[19,45,15,26,46,16],[5,145,115,10,146,116],[19,75,47,10,76,48],[15,54,24,25,55,25],[23,45,15,25,46,16],[13,145,115,3,146,116],[2,74,46,29,75,47],[42,54,24,1,55,25],[23,45,15,28,46,16],[17,145,115],[10,74,46,23,75,47],[10,54,24,35,55,25],[19,45,15,35,46,16],[17,145,115,1,146,116],[14,74,46,21,75,47],[29,54,24,19,55,25],[11,45,15,46,46,16],[13,145,115,6,146,116],[14,74,46,23,75,47],[44,54,24,7,55,25],[59,46,16,1,47,17],[12,151,121,7,152,122],[12,75,47,26,76,48],[39,54,24,14,55,25],[22,45,15,41,46,16],[6,151,121,14,152,122],[6,75,47,34,76,48],[46,54,24,10,55,25],[2,45,15,64,46,16],[17,152,122,4,153,123],[29,74,46,14,75,47],[49,54,24,10,55,25],[24,45,15,46,46,16],[4,152,122,18,153,123],[13,74,46,32,75,47],[48,54,24,14,55,25],[42,45,15,32,46,16],[20,147,117,4,148,118],[40,75,47,7,76,48],[43,54,24,22,55,25],[10,45,15,67,46,16],[19,148,118,6,149,119],[18,75,47,31,76,48],[34,54,24,34,55,25],[20,45,15,61,46,16]],t=function(e,t){var n={};return n.totalCount=e,n.dataCount=t,n},n={},i=function(t,n){switch(n){case r.L:return e[4*(t-1)+0];case r.M:return e[4*(t-1)+1];case r.Q:return e[4*(t-1)+2];case r.H:return e[4*(t-1)+3];default:return}};return n.getRSBlocks=function(e,n){var r=i(e,n);if("undefined"==typeof r)throw new Error("bad rs block @ typeNumber:"+e+"/errorCorrectLevel:"+n);for(var o=r.length/3,a=new Array,s=0;s<o;s+=1)for(var c=r[3*s+0],u=r[3*s+1],l=r[3*s+2],f=0;f<c;f+=1)a.push(t(u,l));return a},n}(),c=function(){var e=new Array,t=0,n={};return n.getBuffer=function(){return e},n.getAt=function(t){var n=Math.floor(t/8);return 1==(e[n]>>>7-t%8&1)},n.put=function(e,t){for(var r=0;r<t;r+=1)n.putBit(1==(e>>>t-r-1&1))},n.getLengthInBits=function(){return t},n.putBit=function(n){var r=Math.floor(t/8);e.length<=r&&e.push(0),n&&(e[r]|=128>>>t%8),t+=1},n},u=function(e){var r=n.MODE_8BIT_BYTE,i=t.stringToBytes(e),o={};return o.getMode=function(){return r},o.getLength=function(e){return i.length},o.write=function(e){for(var t=0;t<i.length;t+=1)e.put(i[t],8)},o},l=function(){var e=new Array,t={};return t.writeByte=function(t){e.push(255&t)},t.writeShort=function(e){t.writeByte(e),t.writeByte(e>>>8)},t.writeBytes=function(e,n,r){n=n||0,r=r||e.length;for(var i=0;i<r;i+=1)t.writeByte(e[i+n])},t.writeString=function(e){for(var n=0;n<e.length;n+=1)t.writeByte(e.charCodeAt(n))},t.toByteArray=function(){return e},t.toString=function(){var t="";t+="[";for(var n=0;n<e.length;n+=1)n>0&&(t+=","),t+=e[n];return t+="]"},t},f=function(){var e=0,t=0,n=0,r="",i={},o=function(e){r+=String.fromCharCode(a(63&e))},a=function(e){if(e<0);else{if(e<26)return 65+e;if(e<52)return 97+(e-26);if(e<62)return 48+(e-52);if(62==e)return 43;if(63==e)return 47}throw new Error("n:"+e)};return i.writeByte=function(r){for(e=e<<8|255&r,t+=8,n+=1;t>=6;)o(e>>>t-6),t-=6},i.flush=function(){if(t>0&&(o(e<<6-t),e=0,t=0),n%3!=0)for(var i=3-n%3,a=0;a<i;a+=1)r+="="},i.toString=function(){return r},i},d=function(e){var t=e,n=0,r=0,i=0,o={};o.read=function(){for(;i<8;){if(n>=t.length){if(0==i)return-1;throw new Error("unexpected end of file./"+i)}var e=t.charAt(n);if(n+=1,"="==e)return i=0,-1;e.match(/^\s$/)||(r=r<<6|a(e.charCodeAt(0)),i+=6)}var o=r>>>i-8&255;return i-=8,o};var a=function(e){if(65<=e&&e<=90)return e-65;if(97<=e&&e<=122)return e-97+26;if(48<=e&&e<=57)return e-48+52;if(43==e)return 62;if(47==e)return 63;throw new Error("c:"+e)};return o},p=function(e,t){var n=e,r=t,i=new Array(e*t),o={};o.setPixel=function(e,t,r){i[t*n+e]=r},o.write=function(e){e.writeString("GIF87a"),e.writeShort(n),e.writeShort(r),e.writeByte(128),e.writeByte(0),e.writeByte(0),e.writeByte(0),e.writeByte(0),e.writeByte(0),e.writeByte(255),e.writeByte(255),e.writeByte(255),e.writeString(","),e.writeShort(0),e.writeShort(0),e.writeShort(n),e.writeShort(r),e.writeByte(0);var t=2,i=s(t);e.writeByte(t);for(var o=0;i.length-o>255;)e.writeByte(255),e.writeBytes(i,o,255),o+=255;e.writeByte(i.length-o),e.writeBytes(i,o,i.length-o),e.writeByte(0),e.writeString(";")};var a=function(e){var t=e,n=0,r=0,i={};return i.write=function(e,i){if(e>>>i!=0)throw new Error("length over");for(;n+i>=8;)t.writeByte(255&(e<<n|r)),i-=8-n,e>>>=8-n,r=0,n=0;r|=e<<n,n+=i},i.flush=function(){n>0&&t.writeByte(r)},i},s=function(e){for(var t=1<<e,n=(1<<e)+1,r=e+1,o=c(),s=0;s<t;s+=1)o.add(String.fromCharCode(s));o.add(String.fromCharCode(t)),o.add(String.fromCharCode(n));var u=l(),f=a(u);f.write(t,r);var d=0,p=String.fromCharCode(i[d]);for(d+=1;d<i.length;){var h=String.fromCharCode(i[d]);d+=1,o.contains(p+h)?p+=h:(f.write(o.indexOf(p),r),o.size()<4095&&(o.size()==1<<r&&(r+=1),o.add(p+h)),p=h)}return f.write(o.indexOf(p),r),f.write(n,r),f.flush(),u.toByteArray()},c=function(){var e={},t=0,n={};return n.add=function(r){if(n.contains(r))throw new Error("dup key:"+r);e[r]=t,t+=1},n.size=function(){return t},n.indexOf=function(t){return e[t]},n.contains=function(t){return"undefined"!=typeof e[t]},n};return o},h=function(e,t,n,r){for(var i=p(e,t),o=0;o<t;o+=1)for(var a=0;a<e;a+=1)i.setPixel(a,o,n(a,o));var s=l();i.write(s);for(var c=f(),u=s.toByteArray(),d=0;d<u.length;d+=1)c.writeByte(u[d]);c.flush();var h="";return h+="<img",h+=' src="',h+="data:image/gif;base64,",h+=c,h+='"',h+=' width="',h+=e,h+='"',h+=' height="',h+=t,h+='"',r&&(h+=' alt="',h+=r,h+='"'),h+="/>"};return t}();return function(n){i=[],r=n,o="function"==typeof r?r.apply(t,i):r,!(void 0!==o&&(e.exports=o))}(function(){return n}),!function(e){e.stringToBytes=function(e){function t(e){for(var t=[],n=0;n<e.length;n++){var r=e.charCodeAt(n);r<128?t.push(r):r<2048?t.push(192|r>>6,128|63&r):r<55296||r>=57344?t.push(224|r>>12,128|r>>6&63,128|63&r):(n++,r=65536+((1023&r)<<10|1023&e.charCodeAt(n)),t.push(240|r>>18,128|r>>12&63,128|r>>6&63,128|63&r))}return t}return t(e)}}(n),n}(),l=function(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:1;n=Math.max(1,n);for(var r=n;r<=40;r+=1)try{var i=function(){var n=u(r,t);n.addData(e),n.make();var i=n.getModuleCount(),o=function(e,t){return e>=0&&e<i&&t>=0&&t<i&&n.isDark(e,t)};return{v:{text:e,level:t,version:r,moduleCount:i,isDark:o}}}();if("object"===("undefined"==typeof i?"undefined":s(i)))return i.v}catch(e){if(!(r<40&&c.test(e.message)))throw e}return null},f=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"L",n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:1,r=arguments.length>3&&void 0!==arguments[3]?arguments[3]:0,i=l(e,t,n);if(i){var o=i.isDark;i.moduleCount+=2*r,i.isDark=function(e,t){return o(e-r,t-r)}}return i};n.exports=f},function(e,t,n){"use strict";var r=n(5),i=n(6),o=function(e,t){e.fillStyle=t.back,e.fillRect(0,0,t.size,t.size)},a=function(e,t,n,r,i,o){e.isDark(i,o)&&t.rect(o*r,i*r,r,r)},s=function(e,t,n){if(e){var i=n.rounded>0&&n.rounded<=100?r:a,o=e.moduleCount,s=n.size/o,c=0;n.crisp&&(s=Math.floor(s),c=Math.floor((n.size-s*o)/2)),t.translate(c,c),t.beginPath();for(var u=0;u<o;u+=1)for(var l=0;l<o;l+=1)i(e,t,n,s,u,l);t.fillStyle=n.fill,t.fill(),t.translate(-c,-c)}},c=function(e,t,n){o(t,n),s(e,t,n),i(t,n)};e.exports=c},function(e,t){"use strict";var n=function(e){return{c:e,m:function(){var e;return(e=this.c).moveTo.apply(e,arguments),this},l:function(){var e;return(e=this.c).lineTo.apply(e,arguments),this},a:function(){var e;return(e=this.c).arcTo.apply(e,arguments),this}}},r=function(e,t,n,r,i,o,a,s,c,u){a?e.m(t+o,n):e.m(t,n),s?e.l(r-o,n).a(r,n,r,i,o):e.l(r,n),c?e.l(r,i-o).a(r,i,t,i,o):e.l(r,i),u?e.l(t+o,i).a(t,i,t,n,o):e.l(t,i),a?e.l(t,n+o).a(t,n,r,n,o):e.l(t,n)},i=function(e,t,n,r,i,o,a,s,c,u){a&&e.m(t+o,n).l(t,n).l(t,n+o).a(t,n,t+o,n,o),s&&e.m(r-o,n).l(r,n).l(r,n+o).a(r,n,r-o,n,o),c&&e.m(r-o,i).l(r,i).l(r,i-o).a(r,i,r-o,i,o),u&&e.m(t+o,i).l(t,i).l(t,i-o).a(t,i,t+o,i,o)},o=function(e,t,o,a,s,c){var u=c*a,l=s*a,f=u+a,d=l+a,p=.005*o.rounded*a,h=e.isDark,g=s-1,m=s+1,v=c-1,b=c+1,w=h(s,c),y=h(g,v),x=h(g,c),k=h(g,b),_=h(s,b),C=h(m,b),S=h(m,c),A=h(m,v),T=h(s,v);t=n(t),w?r(t,u,l,f,d,p,!x&&!T,!x&&!_,!S&&!_,!S&&!T):i(t,u,l,f,d,p,x&&T&&y,x&&_&&k,S&&_&&C,S&&T&&A)};e.exports=o},function(e,t){"use strict";var n=function(e,t){var n=t.size,r="bold "+.01*t.mSize*n+"px "+t.fontname;e.strokeStyle=t.back,e.lineWidth=.01*t.mSize*n*.1,e.fillStyle=t.fontcolor,e.font=r;var i=e.measureText(t.label).width,o=.01*t.mSize,a=i/n,s=(1-a)*t.mPosX*.01,c=(1-o)*t.mPosY*.01,u=s*n,l=c*n+.75*t.mSize*.01*n;e.strokeText(t.label,u,l),e.fillText(t.label,u,l)},r=function(e,t){var n=t.size,r=t.image.naturalWidth||1,i=t.image.naturalHeight||1,o=.01*t.mSize,a=o*r/i,s=(1-a)*t.mPosX*.01,c=(1-o)*t.mPosY*.01,u=s*n,l=c*n,f=a*n,d=o*n;e.draw_image(t.image,u,l,f,d)},i=function(e,t){var i=t.mode;"label"===i?n(e,t):"image"===i&&r(e,t)};e.exports=i}])})},function(e,t,n){(function(e){"use strict";var t=n(2),r=t.each,i=t.isStr,o=t.dom,a=n(8),s=n(12),c=n(19),u=n(35),l=n(14),f=n(16),d=e.window,p=Object.assign({enabled:!1,lang:"en",useBrowserLang:!0},l.l10n),h={isoCode:"en",lang:"english",dateFormat:"YYYY-MM-DD HH:mm",details:"details",download:"download",empty:"empty",files:"files",filter:"filter",folders:"folders",grid:"grid",icons:"icons",language:"Language",lastModified:"Last modified",name:"Name",noMatch:"no match",parentDirectory:"Parent Directory",search:"search",size:"Size",tree:"Tree",view:"View"},g='<div class="block">\n <h1 class="l10n-language">Language</h1>\n <div class="select">\n <select id="langs"/>\n </div>\n </div>',m="<option/>",v="ext/l10n",b={en:Object.assign({},h)},w=b.en,y=function(e){e&&(w=e);var t="selected";o("#langs option").rmAttr(t).rmProp(t),o("#langs ."+w.isoCode).attr(t,"").prop(t,!0),r(w,function(e,t){o(".l10n-"+t).text(e),o(".l10n_ph-"+t).attr("placeholder",e)}),c.setDefaultDateFormat(w.dateFormat),o("#items .item").each(function(e){o(e).find(".date").text(c.formatDate(e._item.time))})},x=function(e){return b[e]?Promise.resolve(b[e]):a.request({action:"get",l10n:[e]}).then(function(t){return b[e]=Object.assign({},h,t.l10n&&t.l10n[e],{isoCode:e}),b[e]})},k=function(e,t,n){var r=f.get(v);if(e[r])t=r;else if(n){var i=d.navigator.language||d.navigator.browserLanguage;i&&(e[i]?t=i:i.length>2&&e[i.substr(0,2)]&&(t=i.substr(0,2)))}e[t]||(t="en"),x(t).then(y)},_=function(e){var t=o(g),n=t.find("select").on("change",function(t){var n=t.target.value;f.put(v,n),k(e,n,!1)});r(e,function(e,t){o(m).attr("value",t).addCls(t).text(t+" - "+(i(e)?e:e.lang)).appTo(n)}),t.appTo("#sidebar")},C=function(){p.enabled&&_(u),s.sub("view.changed",function(){k(u,p.lang,p.useBrowserLang)})};C()}).call(t,function(){return this}())},function(e,t,n){"use strict";var r=n(7),i=r.langs;e.exports=Object.assign({},i)},function(e,t,n){(function(e){"use strict";var t=n(2),r=t.dom,i=t.awaitLoad,o=n(12),a=n(14),s=e.window,c=Object.assign({enabled:!1,baseURL:"not-set",idSite:0},a["piwik-analytics"]),u=function(){if(c.enabled){var e=("https:"===s.location.protocol?"https://":"http://")+c.baseURL+"/",t=[],n=null;r("<script></script>").attr("src",e+"piwik.js").appTo("body"),i().then(function(){if(n=s.Piwik&&s.Piwik.getTracker(e+"piwik.php",c.idSite))for(n.enableLinkTracking();t.length;)n.trackPageView(t.shift())}),o.sub("location.changed",function(e){var r=e.getCrumb().map(function(e){return e.label}).join(" > ");n?n.trackPageView(r):t.push(r)})}};u()}).call(t,function(){return this}())},function(e,t,n){"use strict";n(38),n(39),n(40),n(41),n(43)},function(e,t,n){(function(t){"use strict";var r=n(2),i=r.each,o=r.isFn,a=r.dom,s=r.includes,c=r.compact,u=n(12),l=n(13),f=n(14),d=n(16),p=t.window,h=Object.assign({enabled:!0},f.preview),g='<div id="pv-overlay">\n <div id="pv-container"></div>\n <div id="pv-spinner"><img class="back"/><img class="spinner" src="'+l.image("spinner")+'"/></div>\n <div id="pv-prev-area" class="hof"><img src="'+l.image("preview-prev")+'"/></div>\n <div id="pv-next-area" class="hof"><img src="'+l.image("preview-next")+'"/></div>\n <div id="pv-bottombar" class="clearfix hof">\n <ul id="pv-buttons">\n <li id="pv-bar-close" class="bar-right bar-button"><img src="'+l.image("preview-close")+'"/></li>\n <li id="pv-bar-raw" class="bar-right"><a class="bar-button" target="_blank"><img src="'+l.image("preview-raw")+'"/></a></li>\n <li id="pv-bar-fullscreen" class="bar-right bar-button"><img src="'+l.image("preview-fullscreen")+'"/></li>\n <li id="pv-bar-next" class="bar-right bar-button"><img src="'+l.image("preview-next")+'"/></li>\n <li id="pv-bar-idx" class="bar-right bar-label"></li>\n <li id="pv-bar-prev" class="bar-right bar-button"><img src="'+l.image("preview-prev")+'"/></li>\n </ul>\n </div>\n </div>',m="ext/preview",v=d.get(m)||!1,b=null,w=!1,y=null,x=null,k=function(){var e=a("#pv-container"),t=e[0],n=e.children()[0];if(t&&n){var r=t.offsetWidth,i=t.offsetHeight,o=n.offsetWidth,s=n.offsetHeight;a(n).css({left:.5*(r-o)+"px",top:.5*(i-s)+"px"})}},_=function(){var e=p.document.documentElement,t=e.clientWidth,n=e.clientHeight,r=v?0:20,i=v?0:48;a("#pv-container").css({width:t-2*r+"px",height:n-2*r-i+"px",left:r+"px",top:r+"px"}),a("#pv-spinner").css({left:.5*t+"px",top:.5*n+"px"}),v?(a("#pv-overlay").addCls("fullscreen"),a("#pv-bar-fullscreen").find("img").attr("src",l.image("preview-no-fullscreen"))):(a("#pv-overlay").rmCls("fullscreen"),a("#pv-bar-fullscreen").find("img").attr("src",l.image("preview-fullscreen"))),k(),o(x&&x.adjust)&&x.adjust()},C=function(e,t){a("#pv-bar-idx").text(e+"/"+t).show()},S=function(e){a("#pv-bar-raw").show().find("a").attr("href",e)},A=function(e){a("#pv-buttons .bar-left").rm(),i(e,function(e){a("<li></li>").addCls("bar-left").addCls("bar-label").text(e).appTo("#pv-buttons")})},T=function(){var e=a("#pv-overlay .hof");p.clearTimeout(b),e.show(),v&&(b=p.setTimeout(function(){return e.hide()},2e3))},E=function(){return x&&x.moveIdx(1)},M=function(){return x&&x.moveIdx(-1)},D=function(){v=!v,d.put(m,v),T(),_()},P=function(e){e.stopPropagation(),e.preventDefault()},z=function(e){var t=e.keyCode;27===t?(P(e),$()):8===t||37===t?(P(e),M()):13===t||32===t||39===t?(P(e),E()):70===t&&(P(e),D())},L=function(){A([]),a("#pv-container").clr(),a("#pv-overlay").show(),a(p).on("keydown",z),_()},$=function(){A([]),a("#pv-container").clr(),a("#pv-overlay").hide(),a(p).off("keydown",z)},H=function e(t,n,r){p.clearTimeout(y);var i=a("#pv-spinner");if(!t)return w=!1,void i.hide();if(!w&&r)return void(y=p.setTimeout(function(){return e(!0,n)},r));var o=i.find(".back");n?o.attr("src",n).show():o.hide(),w=!0,i.show()},O=function e(t,n,r,i){var o=Object.assign(Object.create(e.prototype),{items:t,load:r,adjust:i});return o.setIdx(n),o};O.prototype={setIdx:function(e){var t=this;this.idx=(e+this.items.length)%this.items.length,this.item=this.items[this.idx],C(this.idx+1,this.items.length),S(this.item.absHref),A([this.item.label]);var n=this.item;Promise.resolve().then(function(){i(a("#pv-container *"),function(e){"function"==typeof e.unload&&e.unload()}),a("#pv-container").hide().clr(),H(!0,n.thumbSquare||n.icon,200)}).then(function(){return t.load(n)}).then(function(e){n===t.item&&(a("#pv-container").clr().app(e).show(),H(!1),_())})},moveIdx:function(e){this.setIdx(this.idx+e)}};var B=function(e,t,n){var r=function(r){r.$view&&s(e,r.type)&&r.$view.find("a").on("click",function(i){i.preventDefault();var o=c(a("#items .item").map(function(t){var n=t._item;return s(e,n.type)?n:null}));x=O(o,o.indexOf(r),t,n),L()})};u.sub("view.changed",function(e){return i(e,r)})},R=function(){h.enabled&&(a(g).hide().appTo("body").on("keydown",z).on("mousemove",T).on("mousedown",T).on("click",function(e){"pv-overlay"!==e.target.id&&"pv-container"!==e.target.id||$()}).on("mousedown",P).on("mousemove",P).on("keydown",P).on("keypress",P),a("#pv-spinner").hide(),a("#pv-bar-prev, #pv-prev-area").on("click",M),a("#pv-bar-next, #pv-next-area").on("click",E),a("#pv-bar-close").on("click",$),a("#pv-bar-fullscreen").on("click",D),a(p).on("resize",_).on("load",_))};e.exports={setLabels:A,register:B,get item(){return x&&x.item}},R()}).call(t,function(){return this}())},function(e,t,n){"use strict";var r=n(2),i=r.dom,o=n(19),a=n(14),s=n(38),c=Object.assign({enabled:!1,autoplay:!0,types:[]},a["preview-aud"]),u='<audio id="pv-content-aud"/>',l=function(){var e=i("#pv-content-aud")[0];e&&s.setLabels([s.item.label,o.formatDate(1e3*e.duration,"m:ss")])},f=function(e){e.unload=function(){e.src="",e.load()}},d=function(e){return new Promise(function(t){var n=i(u).on("loadedmetadata",function(){return t(n)}).attr("controls","controls");c.autoplay&&n.attr("autoplay","autoplay"),f(n[0]),n.attr("src",e.absHref)})},p=function(){c.enabled&&s.register(c.types,d,l)};p()},function(e,t,n){"use strict";var r=n(2),i=r.dom,o=n(8),a=n(14),s=n(38),c=Object.assign({enabled:!1,size:null,types:[]},a["preview-img"]),u='<img id="pv-content-img"/>',l=function(){var e=i("#pv-content-img")[0];if(e){var t=e.offsetWidth,n=[s.item.label];if(!c.size){var r=e.naturalWidth,o=e.naturalHeight;n.push(String(r)+"x"+String(o)),n.push(String((100*t/r).toFixed(0))+"%")}s.setLabels(n)}},f=function(e){return o.request({action:"get",thumbs:[{type:"img",href:e,width:c.size,height:0}]}).then(function(e){return e&&e.thumbs&&e.thumbs[0]?e.thumbs[0]:null})},d=function(e){return Promise.resolve(e.absHref).then(function(e){return c.size?f(e):e}).then(function(e){return new Promise(function(t){var n=i(u).on("load",function(){return t(n)}).attr("src",e)})})},p=function(){c.enabled&&s.register(c.types,d,l)};p()},function(e,t,n){(function(e){"use strict";var t=n(42),r=n(28),i=n(2),o=i.keys,a=i.dom,s=n(14),c=n(38),u=e.window,l=u.XMLHttpRequest,f=Object.assign({enabled:!1,styles:{}},s["preview-txt"]),d='<pre id="pv-content-txt"></pre>',p='<div id="pv-content-txt"></div>',h=function(){var e=a("#pv-content-txt")[0];if(e){var t=a("#pv-container")[0];e.style.height=t.offsetHeight+"px",c.setLabels([c.item.label,c.item.size+" bytes"])}},g=function(e){return new Promise(function(t,n){var r=new l,i=function(){if(r.readyState===l.DONE)try{t(r.responseText||"")}catch(e){n(String(e))}};r.open("GET",e,!0),r.onreadystatechange=i,r.send()})},m=function(e){return g(e.absHref).catch(function(e){return"[request failed] "+e}).then(function(n){var i=f.styles[e.type];if(1===i)return a(d).text(n);if(2===i)return a(p).html(r(n));if(3===i){var o=a("<code></code>").text(n);return u.setTimeout(function(){t.el(o[0])},n.length<2e4?0:500),a(d).app(o)}return a(p).text(n)})},v=function(){f.enabled&&c.register(o(f.styles),m,h)};v()}).call(t,function(){return this}())},function(e,t,n){!function(t,n){e.exports=n()}(this,function(){var e=".lolight",t="ll-",n="_nam#2196f3}_num#ec407a}_str#43a047}_rex#ef6c00}_pct#666}_key#555;font-weight:bold}_com#aaa;font-style:italic}".replace(/_/g,"."+t).replace(/#/g,"{color:#"),r=/^(a(bstract|lias|nd|rguments|rray|s(m|sert)?|uto)|b(ase|egin|ool(ean)?|reak|yte)|c(ase|atch|har|hecked|lass|lone|ompl|onst|ontinue)|de(bugger|cimal|clare|f(ault|er)?|init|l(egate|ete)?)|do|double|e(cho|ls?if|lse(if)?|nd|nsure|num|vent|x(cept|ec|p(licit|ort)|te(nds|nsion|rn)))|f(allthrough|alse|inal(ly)?|ixed|loat|or(each)?|riend|rom|unc(tion)?)|global|goto|guard|i(f|mp(lements|licit|ort)|n(it|clude(_once)?|line|out|stanceof|t(erface|ernal)?)?|s)|l(ambda|et|ock|ong)|m(odule|utable)|NaN|n(amespace|ative|ext|ew|il|ot|ull)|o(bject|perator|r|ut|verride)|p(ackage|arams|rivate|rotected|rotocol|ublic)|r(aise|e(adonly|do|f|gister|peat|quire(_once)?|scue|strict|try|turn))|s(byte|ealed|elf|hort|igned|izeof|tatic|tring|truct|ubscript|uper|ynchronized|witch)|t(emplate|hen|his|hrows?|ransient|rue|ry|ype(alias|def|id|name|of))|u(n(checked|def(ined)?|ion|less|signed|til)|se|sing)|v(ar|irtual|oid|olatile)|w(char_t|hen|here|hile|ith)|xor|yield)$/,i="com",o="key",a="nam",s="num",c="pct",u="rex",l="spc",f="str",d="unk",p=[[s,/#([0-9a-f]{6}|[0-9a-f]{3})\b/],[i,/(\/\/|#).*?(?=\n|$)/],[i,/\/\*[\s\S]*?\*\//],[i,/<!--[\s\S]*?-->/],[u,/\/(\\\/|[^\n])*?\//],[f,/(['"`])(\\\1|[\s\S])*?\1/],[s,/[+-]?([0-9]*\.?[0-9]+|[0-9]+\.?[0-9]*)([eE][+-]?[0-9]+)?/],[c,/[\\.,:;+\-*\/=<>()[\]{}|?!&(a)~]/],[l,/\s+/],[a,/[\w$]+/],[d,/./]],h=function(e){if("string"!=typeof e)throw new Error("tok: no string");for(var t=[],n=p.length,i=!1;e;)for(var c=0;c<n;c+=1){var f=p[c][1].exec(e);if(f&&0===f.index){var d=p[c][0];if(d!==u||!i){var h=f[0];d===a&&r.test(h)&&(d=o),d===l?h.indexOf("\n")>=0&&(i=!1):i=d===s||d===a,e=e.slice(h.length),t.push([d,h]);break}}}return t},g=function(e,t){if("undefined"!=typeof document)t(document);else if(e)throw new Error("no doc")},m=function(e){g(!0,function(n){var r=h(e.textContent);e.innerHTML="",r.forEach(function(r){var i=n.createElement("span");i.className=t+r[0],i.textContent=r[1],e.appendChild(i)})})},v=function(t){g(!0,function(n){[].forEach.call(n.querySelectorAll(t||e),function(e){m(e)})})};return g(!1,function(e){var t=e.querySelector("head"),r=e.createElement("style");r.textContent=n,t.insertBefore(r,t.firstChild),/^(i|c|loade)/.test(e.readyState)?v():e.addEventListener("DOMContentLoaded",function(){v()})}),v.tok=h,v.el=m,v})},function(e,t,n){"use strict";var r=n(2),i=r.dom,o=n(14),a=n(38),s=Object.assign({enabled:!1,autoplay:!0,types:[]},o["preview-vid"]),c='<video id="pv-content-vid"/>',u=function(){var e=i("#pv-content-vid")[0];if(e){var t=e.offsetWidth,n=e.videoWidth,r=e.videoHeight;a.setLabels([a.item.label,String(n)+"x"+String(r),String((100*t/n).toFixed(0))+"%"])}},l=function(e){e.unload=function(){e.src="",e.load()}},f=function(e){return new Promise(function(t){var n=i(c).on("loadedmetadata",function(){return t(n)}).attr("controls","controls");s.autoplay&&n.attr("autoplay","autoplay"),l(n[0]),n.attr("src",e.absHref)})},d=function(){s.enabled&&a.register(s.types,f,u)};d()},function(e,t,n){"use strict";var r=n(2),i=r.map,o=r.debounce,a=r.parsePattern,s=r.dom,c=n(8),u=n(12),l=n(20),f=n(13),d=n(14),p=n(22),h=n(18),g=Object.assign({enabled:!1,advanced:!1,debounceTime:300,ignorecase:!0},d.search),m='<div id="search" class="tool">\n <img src="'+f.image("search")+'" alt="search"/>\n <input class="l10n_ph-search" type="text" value=""/>\n </div>',v=!1,b="",w=void 0,y=void 0,x=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"";if(e!==b){if(b=e,!e)return void h.setLocation();w.addCls("pending"),c.request({action:"get",search:{href:l.getAbsHref(),pattern:e,ignorecase:g.ignorecase}}).then(function(e){w.rmCls("pending"),h.setHint("noMatch"),h.setItems(i(e.search,function(e){return p.get(e)}))})}},k=function(){v?(w.addCls("active"),y[0].focus(),x(a(y.val(),g.advanced))):(x(),w.rmCls("active"))},_=function(){v=!v,k()},C=function(){v=!1,y.val(""),k()},S=function(){g.enabled&&(w=s(m).appTo("#toolbar"),y=w.find("input"),w.find("img").on("click",_),y.on("keyup",o(k,g.debounceTime)),u.sub("location.changed",C))};S()},function(e,t,n){(function(e){"use strict";var t=n(2),r=t.each,i=t.dom,o=n(12),a=n(13),s=n(14),c=e.window.document,u=Object.assign({enabled:!1,clickndrag:!1,checkboxes:!1},s.select),l='<span class="selector">\n <img src="'+a.image("selected")+'" alt="selected"/>\n </span>',f=i(c),d=i("html"),p=i('<div id="selection-rect"></div>'),h=Math.max,g=Math.min,m=Math.abs,v=0,b=0,w=function(){var e=i("#items .item.selected").map(function(e){return e._item});o.pub("selection",e)},y=function(e){var t=i(e);if(!t.length||t.isHidden())return null;var n=t[0].getBoundingClientRect();return{l:n.left,t:n.top,r:n.right,b:n.bottom}},x=function(e,t){return!!e&&!!t&&e.l===t.l&&e.t===t.t&&e.r===t.r&&e.b===t.b},k=function(e){var t=e[0];x(y(t),t&&t._rect)||e.each(function(e){e._rect=y(e)})},_=function(e,t){if(!e||!t)return!1;var n=h(e.l,t.l),r=g(e.r,t.r),i=h(e.t,t.t),o=g(e.b,t.b);return n<=r&&i<=o},C=function(e){var t=i("#content")[0],n=y(t),r=e.pageX-n.l+t.scrollLeft,o=e.pageY-n.t+t.scrollTop;return{x:r,y:o}},S=function(e){var t=C(e),n=t.x,r=t.y,o=g(v,n),a=g(b,r),s=m(v-n),c=m(b-r),u=e.ctrlKey||e.metaKey;if(!(!u&&s<4&&c<4)){u||i("#items .item").rmCls("selected"),d.addCls("drag-select"),p.show().css({left:o+"px",top:a+"px",width:s+"px",height:c+"px"});var l=y(p),f=i("#items .item:not(.folder-parent)");k(f),f.rmCls("selecting").each(function(e){_(l,e._rect)&&i(e).addCls("selecting")})}},A=function e(t){f.off("mousemove",S).off("mouseup",e),S(t),i("#items .item.selecting.selected").rmCls("selecting").rmCls("selected"),i("#items .item.selecting").rmCls("selecting").addCls("selected"),w(),d.rmCls("drag-select"),p.hide(),t.stopPropagation(),t.preventDefault()},T=function(e){if(!(0!==e.button||e.offsetX>=i("#content")[0].offsetWidth-16)){var t=C(e),n=t.x,r=t.y;v=n,b=r,f.on("mousemove",S).on("mouseup",A),S(e),e.preventDefault()}},E=function(e){for(;!e._item&&e.parentNode;)e=e.parentNode;return e._item},M=function(e){E(e.target).$view.tglCls("selected"),w(),e.stopPropagation(),e.preventDefault()},D=function(e){e.$view&&!e.isCurrentParentFolder()&&i(l).on("click",M).appTo(e.$view.find("a"))},P=function(e,t){u.checkboxes&&r(e,D),r(t,function(e){e.$view&&e.$view.rmCls("selected")}),w()},z=function(){u.enabled&&(u.clickndrag||u.checkboxes)&&(o.sub("view.changed",P),u.clickndrag&&(p.hide().appTo("#content"),i("#content").on("mousedown",T).on("drag",function(e){return e.preventDefault()}).on("dragstart",function(e){return e.preventDefault()})))};z()}).call(t,function(){return this}())},function(e,t,n){"use strict";var r=n(2),i=r.each,o=r.toArray,a=r.dom,s=r.cmp,c=r.naturalCmp,u=n(12),l=n(13),f=n(14),d=n(16),p=Object.assign({enabled:!1,column:0,reverse:!1,ignorecase:!0,natural:!1,folders:0},f.sort),h="ext/sort",g='<img src="'+l.image("sort")+'" class="sort" alt="sort order"/>',m=function(e){
+return e.isFolder()?p.folders:1},v={0:"label",1:"time",2:"size"},b={0:"label",1:"date",2:"size"},w=function(e,t,n,r){return function(i,o){var a=i._item,u=o._item,l=m(a)-m(u);if(0!==l)return l;var f=a[e],d=u[e];return(isNaN(f)||isNaN(d))&&(f=String(f),d=String(d),n&&(f=f.toLowerCase(),d=d.toLowerCase())),l=r?c(f,d):s(f,d),t?-l:l}},y=function(e,t){var n=a("#items li.header a"),r=a("#items li.header a."+b[e]),i=w(v[e],t,p.ignorecase,p.natural);d.put(h,{column:e,reverse:t}),n.rmCls("ascending").rmCls("descending"),r.addCls(t?"descending":"ascending"),a(o(a("#items .item:not(.folder-parent)")).sort(i)).appTo("#items")},x=function(){var e=d.get(h),t=e&&e.column||p.column,n=e&&e.reverse||p.reverse;y(t,n)},k=function(){var e=a("#items li.header");i(b,function(t,n){var r="0"===n?"app":"pre";e.find("a."+t)[r](g).on("click",function(e){y(n,a(e.currentTarget).hasCls("ascending")),e.preventDefault()})})},_=function(){p.enabled&&(k(),u.sub("view.changed",x))};_()},function(e,t,n){"use strict";var r=n(2),i=r.each,o=r.map,a=r.includes,s=n(8),c=n(12),u=n(14),l=Object.assign({enabled:!1,img:["img-bmp","img-gif","img-ico","img-jpg","img-png"],mov:["vid-avi","vid-flv","vid-mkv","vid-mov","vid-mp4","vid-mpg","vid-webm"],doc:["x-pdf","x-ps"],delay:1,size:100,exif:!1,chunksize:20},u.thumbnails),f=4/3,d=function(e,t){var n=null;if(a(l.img,t.type))n="img";else if(a(l.mov,t.type))n="mov";else{if(!a(l.doc,t.type))return;n="doc"}t.thumbSquare?t.$view.find(".icon.square img").addCls("thumb").attr("src",t.thumbSquare):e.push({type:n,href:t.absHref,ratio:1,callback:function(e){e&&t.$view&&(t.thumbSquare=e,t.$view.find(".icon.square img").addCls("thumb").attr("src",e))}}),t.thumbRational?t.$view.find(".icon.landscape img").addCls("thumb").attr("src",t.thumbRational):e.push({type:n,href:t.absHref,ratio:f,callback:function(e){e&&t.$view&&(t.thumbRational=e,t.$view.find(".icon.landscape img").addCls("thumb").attr("src",e))}})},p=function(e){var t=o(e,function(e){return{type:e.type,href:e.href,width:Math.round(l.size*e.ratio),height:l.size}});return s.request({action:"get",thumbs:t}).then(function(t){i(e,function(e,n){e.callback(t&&t.thumbs?t.thumbs[n]:null)})})},h=function(e){for(var t=e.length,n=l.chunksize,r=Promise.resolve(),i=function(t){r=r.then(function(){return p(e.slice(t,t+n))})},o=0;o<t;o+=n)i(o)},g=function(e){var t=[];i(e,function(e){return d(t,e)}),h(t)},m=function(e){setTimeout(function(){return g(e)},l.delay)},v=function(){l.enabled&&c.sub("view.changed",m)};v()},function(e,t,n){(function(e){"use strict";var t=n(12),r=n(14),i=e.window.document,o=Object.assign({enabled:!1},r.title),a=function(e){var t=e.getCrumb().map(function(e){return e.label}),n=t.join(" > ");t.length>1&&(n=t[t.length-1]+" - "+n),i.title=n},s=function(){o.enabled&&t.sub("location.changed",a)};s()}).call(t,function(){return this}())},function(e,t,n){"use strict";var r=n(2),i=r.each,o=r.dom,a=r.cmp,s=r.naturalCmp,c=n(12),u=n(20),l=n(13),f=n(14),d=n(16),p=Object.assign({enabled:!1,show:!0,maxSubfolders:50,naturalSort:!1,ignorecase:!0},f.tree),h='<div class="item folder">\n <span class="indicator">\n <img src="'+l.image("tree-indicator")+'"/>\n </span>\n <a>\n <span class="icon"><img src="'+l.icon("folder")+'"/></span>\n <span class="label"></span>\n </a>\n </span>',g='<div class="block">\n <h1 class="l10n-tree">Tree</h1>\n <div id="view-tree" class="button view">\n <img src="'+l.image("tree-toggle")+'" alt="view-tree"/>\n </div>\n </div>',m="ext/tree",v=function(e){for(;!e._item&&e.parentNode;)e=e.parentNode;return e._item},b=function(e){var t=v(e.target);"unknown"===t._treeState?t.fetchContent().then(function(){t._treeState="open",y(t)}):"open"===t._treeState?(t._treeState="closed",t._$tree.rmCls("open").addCls("closed")):"closed"===t._treeState&&(t._treeState="open",t._$tree.rmCls("closed").addCls("open"))},w=function(e,t){var n=e.label,r=t.label;return p.ignorecase&&(n=n.toLowerCase(),r=r.toLowerCase()),p.naturalSort?s(n,r):a(n,r)},y=function e(t){var n=t.getSubfolders(),r=n.length,a=p.maxSubfolders,s=o(h);if(s.find(".indicator").on("click",b),s.find(".label").text(t.label),u.setLink(s.find("a"),t),t.isCurrentFolder()&&s.addCls("active"),t.isManaged||s.find(".icon img").attr("src",l.icon("folder-page")),t._treeState=t._treeState||"none",t.isManaged&&!t.isContentFetched?t._treeState="unknown":r||(t._treeState="none"),s.addCls(t._treeState),r){var c=o('<div class="content"></div>').appTo(s);n.sort(w),i(n.slice(0,a),function(t){return c.app(e(t))}),r>a&&c.app('<div class="summary">… '+(r-a)+" more subfolders</div>")}return t._$tree&&t._$tree.rpl(s),t._$tree=s,s[0]._item=t,s},x=function e(t){return t._treeState="open",t.fetchContent().then(function(){return t.parent?e(t.parent):t})},k=function(){d.get(m)?(o("#view-tree").addCls("active"),o("#tree").show()):(o("#view-tree").rmCls("active"),o("#tree").hide())},_=function(e){x(e).then(function(e){o("#tree").clr().app(y(e)),k()})},C=function(){p.enabled&&(o('<div id="tree"></div>').hide().appTo("#mainrow"),o(g).appTo("#sidebar").find("#view-tree").on("click",function(e){d.put(m,!d.get(m)),k(),c.pub("resize"),e.preventDefault()}),"boolean"!=typeof d.get(m)&&d.put(m,p.show),k(),c.sub("location.changed",_))};C()},function(e,t,n){(function(e){"use strict";var t=n(2),r=t.dom,i=n(7),o=n(8),a=n(13),s='<ul id="tests"></ul>',c='<li class="test">\n <span class="label"></span>\n <span class="result"></span>\n <div class="info"></div>\n </li>',u='<div id="login-wrapper">\n <input id="pass" type="password" placeholder="password"/>\n <span id="login">login</span>\n <span id="logout">logout</span>\n <div id="hint">\n The preset password is the empty string, just click login.\n Change it in \'_h5ai/private/conf/options.json\'.\n </div>\n </div>',l='<div id="support">\n Show your support with a donation!\n <div class="paypal">\n <form action="https://www.paypal.com/cgi-bin/webscr" method="post" target="_blank">\n <input type="hidden" name="cmd" value="_s-xclick"/>\n <input type="hidden" name="hosted_button_id" value="8WSPKWT7YBTSQ"/>\n <input type="image" src="'+a.image("paypal")+'" name="submit" alt="PayPal"/>\n </form>\n </div>\n </div>',f=i.setup,d=function(e,t,n,i){var o=r(c).appTo("#tests");o.find(".label").text(e),o.find(".result").addCls(n?"passed":"failed").text(i?i:n?"yes":"no"),o.find(".info").html(t)},p=function(){f.AS_ADMIN&&(r(s).appTo("#content"),d("h5ai version","Only green if this is an official h5ai release",/^\d+\.\d+\.\d+$/.test(f.VERSION),f.VERSION),d("Index file found","Add <code>"+f.INDEX_HREF+"</code> to your index file list",f.INDEX_HREF),d("Options parsable","File <code>options.json</code> is readable and syntax is correct",null!==i.options),d("Types parsable","File <code>types.json</code> is readable and syntax is correct",null!==i.types),d("Server software","Server is one of apache, lighttpd, nginx or cherokee",f.HAS_SERVER,f.SERVER_NAME+" "+f.SERVER_VERSION),d("PHP version","PHP version >= "+f.MIN_PHP_VERSION,!0,f.PHP_VERSION),d("PHP arch","64-bit required to correctly display file/folder sizes > ~2GB","64-bit"===f.PHP_ARCH,f.PHP_ARCH),d("Public Cache directory","Web server has write access",f.HAS_WRITABLE_CACHE_PUB),d("Private Cache directory","Web server has write access",f.HAS_WRITABLE_CACHE_PRV),d("Image thumbs","PHP GD extension with JPEG support available",f.HAS_PHP_JPEG),d("Use EXIF thumbs","PHP EXIF extension available",f.HAS_PHP_EXIF),d("Movie thumbs","Command line program <code>avconv</code> or <code>ffmpeg</code> available",f.HAS_CMD_AVCONV||f.HAS_CMD_FFMPEG),d("PDF thumbs","Command line program <code>convert</code> or <code>gm</code> available",f.HAS_CMD_CONVERT||f.HAS_CMD_GM),d("Shell tar","Command line program <code>tar</code> available",f.HAS_CMD_TAR),d("Shell zip","Command line program <code>zip</code> available",f.HAS_CMD_ZIP),d("Shell du","Command line program <code>du</code> available",f.HAS_CMD_DU))},h=function(){e.window.location.reload()},g=function(){o.request({action:"login",pass:r("#pass").val()}).then(h)},m=function(){o.request({action:"logout"}).then(h)},v=function(e){13===e.which&&g()},b=function(){r(l).appTo("#content")},w=function(){r(u).appTo("#content"),f.AS_ADMIN?(r("#pass").rm(),r("#login").rm(),r("#logout").on("click",m)):(r("#pass").on("keydown",v)[0].focus(),r("#login").on("click",g),r("#logout").rm()),i.options.hasCustomPasshash&&r("#hint").rm()},y=function(){b(),w(),p()};y()}).call(t,function(){return this}())}]);
\ No newline at end of file
--
2.23.0
1
0
Signed-off-by: Ren Wen <15991987063(a)163.com>
---
src/scheduler/submit_job.cr | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/src/scheduler/submit_job.cr b/src/scheduler/submit_job.cr
index 4303b1d..c322d0f 100644
--- a/src/scheduler/submit_job.cr
+++ b/src/scheduler/submit_job.cr
@@ -37,6 +37,7 @@ class Sched
def submit_cluster_job(job, cluster_config)
job_messages = Array(Hash(String, String)).new
lab = job.lab
+ subqueue = job.subqueue
# collect all job ids
job_ids = [] of String
@@ -52,7 +53,7 @@ class Sched
# steps for each host
cluster_config["nodes"].as_h.each do |host, config|
queue = host.to_s
- job_id = add_task(queue, lab)
+ job_id = add_task("#{queue}/#{subqueue}", lab)
# return when job_id is '0'
# 2 Questions:
--
2.23.0
2
2

15 Dec '20
Signed-off-by: Wang Chenglong <18509160991(a)163.com>
---
doc/tutorial.md | 84 ++++++++++++++++++++++++++++++++-----------------
1 file changed, 55 insertions(+), 29 deletions(-)
diff --git a/doc/tutorial.md b/doc/tutorial.md
index e6f8491..88544f4 100644
--- a/doc/tutorial.md
+++ b/doc/tutorial.md
@@ -152,29 +152,34 @@ job yaml ���������������������������������������������[YAML](http://yaml.org/YAM
1. ������������ os ��������� rootfs������ openEuler ���������
- ������ docker ������ rootfs
-
+
1) ������ openEuler ��������������� docker ���������������
-
+
```bash
wget https://repo.openeuler.org/openEuler-20.03-LTS/docker_img/aarch64/openEuler…
- ```
- 2) ������ docker ������
+ ```
+ 2) ������ docker ������
```bash
docker load -i openEuler-docker.aarch64
```
- 3) ������ openEuler ������
+ 3) ������ openEuler ������
```bash
- docker run -id openeuler-20.03-lts
+ docker run -d --name initramfs-docker openeuler-20.03-lts
```
- 4) ������ docker ��� rootfs
+ 4) ������ docker ��� rootfs
```bash
- docker cp -a docker run -d openeuler-20.03-lts:/ openEuler-rootfs
+ docker cp -a initramfs-docker:/ openEuler-rootfs/
```
- - ������ qemu.img(qcow2������)������ rootfs (openEuler������)
+ {compass-ci} ������������������������ '.tar.xz' ��������� docker ������������������ rootfs ������������
+ ```bash
+ ./{compass-ci}/container/docker-rootfs/run openEuler-docker.aarch64.tar.xz /tmp/openeuler-rootfs-20.03
+ ```
- 1) ������ openEule r��������������������� qcow2 ������������
+ - ������ qemu.img(qcow2������)������ rootfs (openEuler������)
+
+ 1) ������ openEuler ��������������������� qcow2 ������������
```bash
wget https://repo.openeuler.org/openEuler-20.03-LTS/virtual_machine_img/aarch64/…
```
@@ -183,45 +188,66 @@ job yaml ���������������������������������������������[YAML](http://yaml.org/YAM
cd {compass-ci}/container/qcow2rootfs
./run openEuler-20.03-LTS.aarch64.qcow2.xz /tmp/openEuler-rootfs
```
+
2. ������rootfs
- 1. ������chroot��������������� rootfs (��������������� root ������)
+ 1. ������ chroot ��������������� rootfs (��������������� root ������)
```bash
chroot openEuler-rootfs
```
2. ���������������������������������������
a. ������ root ������
- b. ������ ssh ������
- c. ������������������
- d. ������������ docker ������ osimage ������������������������
- > 1. ������������������������
- > 2. ��� centos ������������������������rpm���
- > 3. ������ yum ������������
- > 4. ������ docker ������������������
-
- 3. ������ rootfs������������
- ```bash
- cd $rootfs
- find . | coip -o -Hnewc |gzip -9 > $os_name.cgz
- ```
+ b. ��������������� /sbin/init
+ > ���������������systemd������������
+ ```bash
+ ls -l /sbin/init
+ /sbin/init -> ../lib/systemd/systemd
+ ```
+ c. ������������ docker ������ osimage ���������������������
+ > ������ docker ������������������ /.dockerenv
+ d. ������������������
+ > openssh-server (ssh ������������������)
+ > ntpdate (������������)
+ > cifs-utils (cifs���������������������)
+ > nfs-utils (nfs���������������������)
+ > curl (���������url������)
+ ```bash
+ yum -y install openssh-server ntpdate cifs-utils nfs-utils curl
+ ```
+ e. ������������ docker ������ osimage ������������������������
+ > ������ docker ������������������ /.dockerenv
+
+ 3. ������rootfs
+ ```bash
+ cd $rootfs
+ find . | coip -o -Hnewc |gzip -9 > $os_name.cgz
+ ```
+
+ 4. ������������������/������������
+ ������������������ {compass-ci} ��������������������������� ��������� rootfs ������������������������������������������������������/���������������������������
+ ```bash
+ find /lib/modules/* | cpio -o -Hnewc | gzip -9 > /modules-$os_name.cgz
+ find /usr/src/kernels/* | cpio -o -Hnewc | gzip -9 > /headers-$os_name.cgz
+ ```
+
#### FAQ
-1. ������������ ���Unable to mount root fs on unknown-block���
+1. ������������ ���Unable to mount root fs on unknown-block���
- ������������
```bash
[ 0.390437] List of all partitions:
- [ 0.390806] No filesystem could mount root, tried:
+ [ 0.390806] No filesystem could mount root, tried:
[ 0.391489] Kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block(0,0)
...
[ 0.399404] Memory Limit: none
[ 0.399749] ---[ end Kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block(0,0) ]---
```
- ������������
-
+
1������������������������������������������������
2������������������������������������ 644 ���������
-
+
2. ������������������
-
+
- ������������
������������������������������������������������
--
2.23.0
2
4
[error]
Traceback (most recent call last):
5: from /home/lukaiyi/compass-ci/sbin/compare:72:in `<main>'
4: from /home/lukaiyi/compass-ci/lib/compare.rb:66:in `compare_group'
3: from /home/lukaiyi/compass-ci/lib/compare_matrixes.rb:389:in `compare_group_matrices'
2: from /home/lukaiyi/compass-ci/lib/compare_matrixes.rb:389:in `each'
1: from /home/lukaiyi/compass-ci/lib/compare_matrixes.rb:390:in `block in compare_group_matrices'
/home/lukaiyi/compass-ci/lib/compare_matrixes.rb:390:in `+': no implicit conversion of nil into String (TypeError)
[why]
get_matrix_str maybe return nil, if so, the line 390 will raise error like above.
386 def compare_group_matrices(group_matrices, suites_list, options)
387 result_str = ''
388 group_matrices_array = sort_by_matrix_size(group_matrices)
389 group_matrices_array.each do |matrice_kv|
390 result_str += get_matrix_str(matrice_kv[0], matrice_kv[1], suites_list, options)
391 end
392 result_str
393 end
---
lib/compare_matrixes.rb | 1 +
1 file changed, 1 insertion(+)
diff --git a/lib/compare_matrixes.rb b/lib/compare_matrixes.rb
index 0e08ec7..e8f52f1 100644
--- a/lib/compare_matrixes.rb
+++ b/lib/compare_matrixes.rb
@@ -402,6 +402,7 @@ def get_matrix_str(matrice_key, matrice_value, suites_list, options)
return compare_matrixes(m_list, suites_list.shift, m_titles, matrice_key, options: options) if options[:no_print]
print compare_matrixes(m_list, suites_list.shift, m_titles, matrice_key, options: options)
+ return ''
end
# big size first
--
2.23.0
2
1
remove h5ai link from upper right corner of result page
Signed-off-by: Lu Weitao <luweitaobe(a)163.com>
---
container/srv-http/root/srv/_h5ai/public/js/scripts.js | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/container/srv-http/root/srv/_h5ai/public/js/scripts.js b/container/srv-http/root/srv/_h5ai/public/js/scripts.js
index f4f2f84..62942b8 100755
--- a/container/srv-http/root/srv/_h5ai/public/js/scripts.js
+++ b/container/srv-http/root/srv/_h5ai/public/js/scripts.js
@@ -1028,7 +1028,7 @@
i = r.dom,
o = "body",
a =
- '<div id="topbar">\n <div id="toolbar"></div>\n <div id="flowbar"></div>\n <a id="backlink" href="https://larsjung.de/h5ai/" title="powered by h5ai - https://larsjung.de/h5ai/">\n <div>powered</div>\n <div>by h5ai</div>\n </a>\n </div>',
+ '<div id="topbar">\n <div id="toolbar"></div>\n <div id="flowbar"></div>\n </a>\n </div>',
s =
'<div id="mainrow">\n <div id="content"></div>\n </div>',
c = function() {
@@ -6274,4 +6274,4 @@
})()
));
},
-]);
\ No newline at end of file
+]);
--
2.23.0
2
3
[Why]
It's inconvenient for read and modify the file
container/srv-http/root/srv/_h5ai/public/js/script.js
because of the file had write as one line
[How]
Use the code formatter prettier format it
Signed-off-by: Lu Weitao <luweitaobe(a)163.com>
---
.../root/srv/_h5ai/public/js/scripts.js | 6282 ++++++++++++++++-
1 file changed, 6277 insertions(+), 5 deletions(-)
diff --git a/container/srv-http/root/srv/_h5ai/public/js/scripts.js b/container/srv-http/root/srv/_h5ai/public/js/scripts.js
index 664fd61..f4f2f84 100755
--- a/container/srv-http/root/srv/_h5ai/public/js/scripts.js
+++ b/container/srv-http/root/srv/_h5ai/public/js/scripts.js
@@ -1,5 +1,6277 @@
-/* h5ai v0.29.2 - https://larsjung.de/h5ai/ */
-!function(e){function t(e,t){if(!t)throw i.className=r,new Error(r+": "+e)}function n(e){return"function"==typeof e}if(!e||e.window!==e||!e.document)throw new Error("no-window");var r="no-browser",i=e.document.documentElement;i.className="",t("console",e.console&&n(e.console.log)),t("assign",e.Object&&n(e.Object.assign)),t("promise",n(e.Promise)),t("xhr",e.XMLHttpRequest)}(this),function(e){function t(r){if(n[r])return n[r].exports;var i=n[r]={exports:{},id:r,loaded:!1};return e[r].call(i.exports,i,i.exports,t),i.loaded=!0,i.exports}var n={};return t.m=e,t.c=n,t.p="",t(0)}([function(e,t,n){"use strict";n(1)},function(e,t,n){"use strict";var r=n(2),i=r.dom,o=r.awaitReady,a=n(7),s=i("script[data-module]").attr("data-module"),c={action:"get",setup:!0,options:!0,types:!0};if("index"===s)c.theme=!0,c.langs=!0;else{if("info"!==s)throw new Error("no-main-module: '"+s+"'");c.refresh=!0}a._update(c).then(function(){return o()}).then(function(){return n(9)("./"+s)})},function(e,t,n){"use strict";e.exports=Object.assign({},n(3),n(4),n(5),n(6))},function(e,t){"use strict";var n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},r=function(e){return void 0!==e&&null!==e},i=function(e,t){return("undefined"==typeof e?"undefined":n(e))===t},o=function(e){return i(e,"string")},a=function(e){return i(e,"function")},s=function(e){return i(e,"number")},c=function(e){return e&&e.hasOwnProperty("length")},u=function(e){return!e||o(e)?[]:(c(e)&&(e=Array.from(e)),Object.keys(e))},l=function(e){return u(e).map(function(t){return e[t]})},f=function(e,t){return u(e).forEach(function(n){return t(e[n],n)})},d=function(e,t){return l(e).filter(t)},p=function(e,t){return l(e).map(t)},h=function(e,t){return l(e).indexOf(t)>=0},g=function(e){return d(e,function(e){return!!e})},m=function(e,t){return!!e&&e instanceof t},v=function(e){return Array.from(e)},b=function(e,t){return t=l(t),d(e,function(e){return t.indexOf(e)<0})},w=function(e,t){return t=l(t),d(e,function(e){return t.indexOf(e)>=0})},y=function(e,t){return e<t?-1:e>t?1:0},x=function(e,t){var n=a(t)?t:function(e){return e[t]},r=function(e,t){return y(n(e),n(t))};return l(e).sort(r)},k=function(e,t){var n=null;return function(){clearTimeout(n),n=setTimeout(e,t)}};e.exports={is:r,isStr:o,isFn:a,isNum:s,hasLength:c,keys:u,values:l,each:f,filter:d,map:p,includes:h,compact:g,isInstanceOf:m,toArray:v,difference:b,intersection:w,cmp:y,sortBy:x,debounce:k}},function(e,t,n){(function(t){"use strict";function r(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t<e.length;t++)n[t]=e[t];return n}return Array.from(e)}var i=function(){function e(e,t){var n=[],r=!0,i=!1,o=void 0;try{for(var a,s=e[Symbol.iterator]();!(r=(a=s.next()).done)&&(n.push(a.value),!t||n.length!==t);r=!0);}catch(e){i=!0,o=e}finally{try{!r&&s.return&&s.return()}finally{if(i)throw o}}return n}return function(t,n){if(Array.isArray(t))return t;if(Symbol.iterator in Object(t))return e(t,n);throw new TypeError("Invalid attempt to destructure non-iterable instance")}}(),o=n(3),a=o.each,s=o.filter,c=o.hasLength,u=o.is,l=o.isStr,f=o.map,d=o.isInstanceOf,p=o.toArray,h=t.window,g=h.document,m=function(){var e=function(e){return g.createElement(e)},t=[[/^<t(head|body|foot)|^<c(ap|olg)/i,e("table")],[/^<col/i,e("colgroup")],[/^<tr/i,e("tbody")],[/^<t[dh]/i,e("tr")]],n=e("div"),r=function(e){var r=!0,o=!1,a=void 0;try{for(var s,c=t[Symbol.iterator]();!(r=(s=c.next()).done);r=!0){var u=s.value,l=i(u,2),f=l[0],d=l[1];if(f.test(e))return d}}catch(e){o=!0,a=e}finally{try{!r&&c.return&&c.return()}finally{if(o)throw a}}return n};return function(e){var t=r(e);t.innerHTML=e;var n=p(t.childNodes);return a(n,function(e){return t.removeChild(e)}),t.innerHTML="",n}}(),v=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:g;try{return p(t.querySelectorAll(e))}catch(e){return[]}},b=function(e){return d(e,h.Element)},w=function(e){return d(e,h.Document)},y=function(e){return u(e)&&e.window===e&&w(e.document)},x=function(e){return b(e)||w(e)||y(e)},k=function(e,t,n){return e.addEventListener(t,n)},_=function(e,t,n){return e.removeEventListener(t,n)},C=new Promise(function(e){/^(i|c|loade)/.test(g.readyState)?e():k(g,"DOMContentLoaded",function(){return e()})}),S=function(){return C},A=new Promise(function(e){k(h,"load",function(){return e()})}),T=function(){return A},E=function e(t){if(d(t,e))return t;var n=void 0;return l(t)?(t=t.trim(),n="<"===t[0]?m(t):v(t)):n=x(t)?[t]:c(t)?t:[t],n=s(n,x),Object.assign(Object.create(e.prototype),n,{length:n.length})};E.prototype={constructor:E,each:function(e){return a(this,e),this},map:function(e){return f(this,e)},find:function(e){var t;return E((t=[]).concat.apply(t,r(this.map(function(t){return v(e,t)}))))},on:function(e,t){return this.each(function(n){return k(n,e,t)})},off:function(e,t){return this.each(function(n){return _(n,e,t)})},attr:function(e,t){return void 0===t?this.length?this[0].getAttribute(e):void 0:this.each(function(n){return n.setAttribute(e,t)})},rmAttr:function(e){return this.each(function(t){return t.removeAttribute(e)})},prop:function(e,t){return void 0===t?this.length?this[0][e]:void 0:this.each(function(n){n[e]=t})},rmProp:function(e){return this.each(function(t){return delete t[e]})},val:function(e){return void 0===e?this.length?this[0].value:void 0:this.each(function(t){t.value=e})},html:function(e){return void 0===e?this.map(function(e){return e.innerHTML}).join(""):this.each(function(t){t.innerHTML=e})},text:function(e){return void 0===e?this.map(function(e){return e.textContent}).join(""):this.each(function(t){t.textContent=e})},clr:function(){return this.html("")},rm:function(){return this.each(function(e){var t=e.parentNode;t&&t.removeChild(e)})},rpl:function(e){return this.each(function(t){var n=t.parentNode;n&&n.replaceChild(E(e)[0],t)})},app:function(e){return this.each(function(t){E(e).each(function(e){return t.appendChild(e)})})},appTo:function(e){return E(e).app(this),this},pre:function(e){return this.each(function(t){E(e).each(function(e){var n=t.firstChild;n?t.insertBefore(e,n):t.appendChild(e)})})},preTo:function(e){return E(e).pre(this),this},cls:function(){return arguments.length?(this.each(function(e){e.className=""}),this.addCls.apply(this,arguments)):this.length?p(this[0].classList):[]},hasCls:function(e){return p(this).every(function(t){return t.classList.contains(e)})},addCls:function(){for(var e=arguments.length,t=Array(e),n=0;n<e;n++)t[n]=arguments[n];return this.each(function(e){var n=!0,r=!1,i=void 0;try{for(var o,a=t[Symbol.iterator]();!(n=(o=a.next()).done);n=!0){var s=o.value;e.classList.add(s)}}catch(e){r=!0,i=e}finally{try{!n&&a.return&&a.return()}finally{if(r)throw i}}})},rmCls:function(){for(var e=arguments.length,t=Array(e),n=0;n<e;n++)t[n]=arguments[n];return this.each(function(e){var n=!0,r=!1,i=void 0;try{for(var o,a=t[Symbol.iterator]();!(n=(o=a.next()).done);n=!0){var s=o.value;e.classList.remove(s)}}catch(e){r=!0,i=e}finally{try{!n&&a.return&&a.return()}finally{if(r)throw i}}})},tglCls:function(){for(var e=arguments.length,t=Array(e),n=0;n<e;n++)t[n]=arguments[n];return this.each(function(e){var n=!0,r=!1,i=void 0;try{for(var o,a=t[Symbol.iterator]();!(n=(o=a.next()).done);n=!0){var s=o.value;e.classList.contains(s)?e.classList.remove(s):e.classList.add(s)}}catch(e){r=!0,i=e}finally{try{!n&&a.return&&a.return()}finally{if(r)throw i}}})},parent:function(){return E(this.map(function(e){return e.parentNode}))},children:function(){var e;return E((e=[]).concat.apply(e,r(this.map(function(e){return p(e.children)}))))},hide:function(){return this.addCls("hidden")},show:function(){return this.rmCls("hidden")},isHidden:function(){return this.hasCls("hidden")},css:function(e){return this.each(function(t){return Object.assign(t.style,e)})}},e.exports={awaitReady:S,awaitLoad:T,dom:E}}).call(t,function(){return this}())},function(e,t){"use strict";var n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},r=/(^([+\-]?(?:0|[1-9]\d*)(?:\.\d*)?(?:[eE][+\-]?\d+)?)?$|^0x[0-9a-f]+$|\d+)/gi,i=/(^([\w ]+,?[\w ]+)?[\w ]+,?[\w ]+\d+:\d+(:\d+)?[\w ]?|^\d{1,4}[\/\-]\d{1,4}[\/\-]\d{1,4}|^\w+, \w+ \d+, \d{4})/,o=/^0x[0-9a-f]+$/i,a=/^0/,s=function(e,t){var s=String(e).trim(),c=String(t).trim(),u=s.replace(r,"\0$1\0").replace(/\0$/,"").replace(/^\0/,"").split("\0"),l=c.replace(r,"\0$1\0").replace(/\0$/,"").replace(/^\0/,"").split("\0"),f=parseInt(s.match(o),16)||1!==u.length&&s.match(i)&&Date.parse(s),d=parseInt(c.match(o),16)||f&&c.match(i)&&Date.parse(c)||null;if(d){if(f<d)return-1;if(f>d)return 1}for(var p=0,h=Math.max(u.length,l.length);p<h;p+=1){var g=!(u[p]||"").match(a)&&parseFloat(u[p])||u[p]||0,m=!(l[p]||"").match(a)&&parseFloat(l[p])||l[p]||0;if(isNaN(g)!==isNaN(m))return isNaN(g)?1:-1;if(("undefined"==typeof g?"undefined":n(g))!==("undefined"==typeof m?"undefined":n(m))&&(g=String(g),m=String(m)),g<m)return-1;if(g>m)return 1}return 0};e.exports={naturalCmp:s}},function(e,t){"use strict";var n=function(e){return e.replace(/[\-\[\]{}()*+?.,\\$\^|#\s]/g,"\\$&")},r=function(e,t){return t?"re:"===e.substr(0,3)?e.substr(3):e.trim().split(/\s+/).map(function(e){return e.split("").map(function(e){return n(e)}).join(".*?")}).join("|"):n(e)};e.exports={parsePattern:r}},function(e,t,n){"use strict";var r=n(8),i=r.request,o=e.exports={_update:function(e){return i(e).then(function(e){return Object.assign(o,e)})}}},function(e,t,n){(function(t){"use strict";var r=n(2),i=r.each,o=r.dom,a=t.window.XMLHttpRequest,s=function(e){return new Promise(function(t){var n=new a,r=function(){if(n.readyState===a.DONE)try{t(JSON.parse(n.responseText))}catch(e){t({err:e,txt:n.responseText})}};n.open("POST","?",!0),n.onreadystatechange=r,n.setRequestHeader("Content-Type","application/json;charset=utf-8"),n.send(JSON.stringify(e))})},c=function(e){var t=o('<form method="post" action="?" style="display:none;"/>');i(e,function(e,n){o('<input type="hidden"/>').attr("name",n).attr("value",e).appTo(t)}),t.appTo("body"),t[0].submit(),t.rm()};e.exports={request:s,formRequest:c}}).call(t,function(){return this}())},function(e,t,n){function r(e){return n(i(e))}function i(e){return o[e]||function(){throw new Error("Cannot find module '"+e+"'.")}()}var o={"./index":10,"./index.js":10,"./info":50,"./info.js":50};r.keys=function(){return Object.keys(o)},r.resolve=i,e.exports=r,r.id=9},function(e,t,n){(function(e){"use strict";n(11),n(24),n(25),n(26),n(27),n(29),n(30),n(31),n(32),n(34),n(36),n(37),n(44),n(45),n(46),n(47),n(48),n(49);var t=e.window.document.location.href;n(20).setLocation(t,!0)}).call(t,function(){return this}())},function(e,t,n){"use strict";var r=n(2),i=r.each,o=r.dom,a=n(12),s=n(13),c=n(14),u=n(15),l=n(17),f=n(18),d=Object.assign({modeToggle:!1},c.view),p='<div id="viewmode-settings" class="block"><h1 class="l10n-view">View</h1></div>',h='<div id="viewmode-[MODE]" class="button mode">\n <img src="'+s.image("view-[MODE]")+'" alt="viewmode-[MODE]"/>\n </div>',g='<input id="viewmode-size" type="range" min="0" max="0" value="0">',m='<div id="viewmode-toggle" class="tool">\n <img alt="viewmode"/>\n </div>',v=void 0,b=void 0,w=function(e,t){o("#viewmode-settings .mode").rmCls("active"),o("#viewmode-"+e).addCls("active"),o("#viewmode-size").val(b.indexOf(t)),"next"===d.modeToggle&&(e=v[(v.indexOf(e)+1)%v.length]),o("#viewmode-toggle img").attr("src",s.image("view-"+e))},y=function(){if(!(v.length<2&&b.length<2)){var e=o(p);if(v.length>1&&i(v,function(t){o(h.replace(/\[MODE\]/g,t)).on("click",function(){f.setMode(t)}).appTo(e)}),b.length>1){var t=b.length-1;o(g).attr("max",t).on("input",function(e){return f.setSize(b[e.target.valueAsNumber])}).on("change",function(e){return f.setSize(b[e.target.valueAsNumber])}).appTo(e)}e.appTo(u.$el)}},x=function(){var e=f.getMode(),t=(v.indexOf(e)+1)%v.length,n=v[t];f.setMode(n)},k=function(){d.modeToggle&&v.length>1&&o(m).on("click",x).appTo(l.$toolbar)},_=function(){v=f.getModes(),b=f.getSizes(),y(),k(),w(f.getMode(),f.getSize()),a.sub("view.mode.changed",w)};_()},function(e,t,n){(function(t){"use strict";var r=n(2),i=r.isStr,o=r.isFn,a=r.dom,s={},c=function(e,t){i(e)&&o(t)&&(s[e]||(s[e]=[]),s[e].push(t))},u=function(e){for(var t=arguments.length,n=Array(t>1?t-1:0),r=1;r<t;r++)n[r-1]=arguments[r];i(e)&&s[e]&&s[e].forEach(function(t){t.apply(e,n)})};a(t.window).on("resize",function(){return u("resize")}),e.exports={sub:c,pub:u}}).call(t,function(){return this}())},function(e,t,n){"use strict";var r=n(2),i=r.includes,o=n(7),a=n(14),s=a.publicHref+"images/",c=s+"ui/",u=s+"themes/",l=u+"default/",f=["file","folder","folder-page","folder-parent","ar","aud","bin","img","txt","vid","x"],d=function(e){return c+e+".svg"},p=function(e){var t=(e||"").split("-")[0],n=o.theme[e]||o.theme[t];return n?u+n:i(f,e)?l+e+".svg":i(f,t)?l+t+".svg":l+"file.svg"};e.exports={image:d,icon:p}},function(e,t,n){"use strict";var r=n(7);e.exports=Object.assign({},r.options,{publicHref:r.setup.PUBLIC_HREF,rootHref:r.setup.ROOT_HREF})},function(e,t,n){"use strict";var r=n(2),i=r.dom,o=n(13),a=n(14),s=n(16),c=n(17),u=Object.assign({disableSidebar:!1},a.view),l="sidebarIsVisible",f='<div id="sidebar"></div>',d='<div id="sidebar-toggle" class="tool">\n <img alt="sidebar"/>\n </div>',p=function(){var e=i(f).hide(),t=i(d),n=t.find("img"),r=function(r){var i=s.get(l);r&&(i=!i,s.put(l,i)),i?(t.addCls("active"),n.attr("src",o.image("back")),e.show()):(t.rmCls("active"),n.attr("src",o.image("sidebar")),e.hide())};return u.disableSidebar||(e.appTo(c.$mainrow),t.appTo(c.$toolbar).on("click",function(){return r(!0)}),r()),{$el:e}};e.exports=p()},function(e,t){(function(t){"use strict";var n=t.window.localStorage,r="_h5ai",i=function(){try{return JSON.parse(n[r])}catch(e){}return{}},o=function(e){n[r]=JSON.stringify(e)},a=function(e,t){var n=i();n[e]=t,o(n)},s=function(e){return i()[e]};e.exports={put:a,get:s}}).call(t,function(){return this}())},function(e,t,n){"use strict";var r=n(2),i=r.dom,o="body",a='<div id="topbar">\n <div id="toolbar"></div>\n <div id="flowbar"></div>\n <a id="backlink" href="https://larsjung.de/h5ai/" title="powered by h5ai - https://larsjung.de/h5ai/">\n <div>powered</div>\n <div>by h5ai</div>\n </a>\n </div>',s='<div id="mainrow">\n <div id="content"></div>\n </div>',c=function(){var e=i(o).attr("id","root").clr().app(a).app(s);return{$root:e,$topbar:e.find("#topbar"),$toolbar:e.find("#toolbar"),$flowbar:e.find("#flowbar"),$mainrow:e.find("#mainrow"),$content:e.find("#content")}};e.exports=c()},function(e,t,n){"use strict";var r=n(2),i=r.each,o=r.map,a=r.includes,s=r.intersection,c=r.dom,u=n(12),l=n(19),f=n(20),d=n(13),p=n(16),h=n(14),g=n(17),m=["details","grid","icons"],v=[20,40,60,80,100,150,200,250,300,350,400],b=Object.assign({binaryPrefix:!1,hideFolders:!1,hideParentFolder:!1,maxIconSize:40,modes:m,setParentFolderLabels:!1,sizes:v},h.view),w=b.sizes.sort(function(e,t){return e-t}),y=s(b.modes,m),x="view",k='<div id="view">\n <ul id="items" class="clearfix">\n <li class="header">\n <a class="icon"></a>\n <a class="label" href="#"><span class="l10n-name"/></a>\n <a class="date" href="#"><span class="l10n-lastModified"/></a>\n <a class="size" href="#"><span class="l10n-size"/></a>\n </li>\n </ul>\n <div id="view-hint"></div>\n </div>',_='<li class="item">\n <a>\n <span class="icon square"><img/></span>\n <span class="icon landscape"><img/></span>\n <span class="label"></span>\n <span class="date"></span>\n <span class="size"></span>\n </a>\n </li>',C=c(k),S=C.find("#items"),A=C.find("#view-hint"),T=function(e,t,n){return Math.min(n,Math.max(t,e))},E=function(e){var t=T(e,20,80),n=T(e,40,160),r=T(e,80,1e3),i=Math.round(4*r/3),o="!important;",a="#view.view-details.view-size-"+e,s="#view.view-grid.view-size-"+e,c="#view.view-icons.view-size-"+e,u=[a+" .item .label {line-height: "+(t+14)+"px "+o+"}",a+" .item .date {line-height: "+(t+14)+"px "+o+"}",a+" .item .size {line-height: "+(t+14)+"px "+o+"}",a+" .square {width: "+t+"px "+o+" height: "+t+"px "+o+"}",a+" .square img {width: "+t+"px "+o+" height: "+t+"px "+o+"}",a+" .label {margin-left: "+(t+32)+"px "+o+"}",s+" .item .label {line-height: "+n+"px "+o+"}",s+" .square {width: "+n+"px "+o+" height: "+n+"px "+o+"}",s+" .square img {width: "+n+"px "+o+" height: "+n+"px "+o+"}",c+" .item {width: "+i+"px "+o+"}",c+" .landscape {width: "+i+"px "+o+" height: "+r+"px "+o+"}",c+" .landscape img {width: "+r+"px "+o+" height: "+r+"px "+o+"}",c+" .landscape .thumb {width: "+i+"px "+o+"}"];return u.join("\n")},M=function(){var e=o(w,function(e){return E(e)});e.push("#view .icon img {max-width: "+b.maxIconSize+"px; max-height: "+b.maxIconSize+"px;}"),c("<style></style>").text(e.join("\n")).appTo("head")},D=function(e,t){var n=p.get(x);e=e||n&&n.mode,t=t||n&&n.size,e=a(b.modes,e)?e:b.modes[0],t=a(b.sizes,t)?t:b.sizes[0],p.put(x,{mode:e,size:t}),i(y,function(t){t===e?C.addCls("view-"+t):C.rmCls("view-"+t)}),i(w,function(e){e===t?C.addCls("view-size-"+e):C.rmCls("view-size-"+e)}),u.pub("view.mode.changed",e,t)},P=function(){return y},z=function(){return p.get(x).mode},L=function(e){return D(e,null)},$=function(){return w},H=function(){return p.get(x).size},O=function(e){return D(null,e)},B=function(e){var t=e.target._item;u.pub("item.mouseenter",t)},R=function(e){var t=e.target._item;u.pub("item.mouseleave",t)},N=function(e){var t=c(_),n=t.find("a"),r=t.find(".icon img"),i=t.find(".label"),o=t.find(".date"),a=t.find(".size");return t.addCls(e.isFolder()?"folder":"file").on("mouseenter",B).on("mouseleave",R),f.setLink(n,e),i.text(e.label).attr("title",e.label),o.attr("data-time",e.time).text(l.formatDate(e.time)),a.attr("data-bytes",e.size).text(l.formatSize(e.size)),e.icon=d.icon(e.type),e.isFolder()&&!e.isManaged&&(t.addCls("page"),e.icon=d.icon("folder-page")),e.isCurrentParentFolder()&&(e.icon=d.icon("folder-parent"),b.setParentFolderLabels||i.addCls("l10n-parentDirectory"),t.addCls("folder-parent")),r.attr("src",e.icon).attr("alt",e.type),e.$view=t,t[0]._item=e,t},I=function(){var e=S.find(".item").length===S.find(".folder-parent").length;e?A.show():A.hide()},j=function(e){var t=o(S.find(".item"),function(e){return e._item});S.find(".item").rm(),i(e,function(e){return S.app(N(e))}),g.$content[0].scrollLeft=0,g.$content[0].scrollTop=0,I(),u.pub("view.changed",e,t)},F=function(e,t){i(e,function(e){N(e).hide().appTo(S).show()}),i(t,function(e){e.$view.hide().rm()}),I(),u.pub("view.changed",e,t)},q=function(e){A.rmCls().addCls("l10n-"+e),I()},Y=function(e){e||(e=f.getItem());var t=[];e.parent&&!b.hideParentFolder&&t.push(e.parent),i(e.content,function(e){e.isFolder()&&b.hideFolders||t.push(e)}),q("empty"),j(t)},Z=function(e,t,n){var r=[];i(t,function(e){e.isFolder()&&b.hideFolders||r.push(e)}),q("empty"),F(r,n)},U=function(){var e=C[0].offsetWidth;C.rmCls("width-0").rmCls("width-1"),e<320?C.addCls("width-0"):e<480&&C.addCls("width-1")},V=function(){M(),D(),C.appTo(g.$content),A.hide(),l.setDefaultMetric(b.binaryPrefix),u.sub("location.changed",Y),u.sub("location.refreshed",Z),u.sub("resize",U),U()};V(),e.exports={$el:C,setItems:j,changeItems:F,setLocation:Y,setHint:q,getModes:P,getMode:z,setMode:L,getSizes:$,getSize:H,setSize:O}},function(e,t,n){"use strict";var r=n(2),i=r.isNum,o={t:1e3,k:1e3,u:["B","KB","MB","GB","TB","PB","EB","ZB","YB"]},a={t:1024,k:1024,u:["B","KiB","MiB","GiB","TiB","PiB","EiB","ZiB","YiB"]},s=o,c=[[/YYYY/,"Y",4],[/YY/,"Y",2],[/Y/,"Y",0],[/MM/,"M",2],[/M/,"M",0],[/DD/,"D",2],[/D/,"D",0],[/HH/,"H",2],[/H/,"H",0],[/mm/,"m",2],[/m/,"m",0],[/ss/,"s",2],[/s/,"s",0]],u="YYYY-MM-DD HH:mm",l=function(e){s=e?a:o},f=function(e,t){if(t=t||s,!i(e)||e<0)return"";for(var n=0,r=t.u.length-1;e>=t.t&&n<r;)e/=t.k,n+=1;return(n<=1?Math.round(e):e.toFixed(1)).toString()+" "+t.u[n]},d=function(e){u=e},p=function(e,t){var n=String(e);return t&&(n=("000"+n).substr(-t)),n},h=function(e,t){if(!e||!i(e))return"";t=t||u;var n=new Date(e),r={Y:n.getFullYear(),M:n.getMonth()+1,D:n.getDate(),H:n.getHours(),m:n.getMinutes(),s:n.getSeconds()};return c.forEach(function(e){t=t.replace(e[0],p(r[e[1]],e[2]))}),t};e.exports={setDefaultMetric:l,formatSize:f,setDefaultDateFormat:d,formatDate:h}},function(e,t,n){(function(t){"use strict";var r=n(2),i=r.each,o=r.values,a=r.difference,s=n(8),c=s.request,u=n(14),l=n(12),f=n(21),d=t.window,p=d.document,h=Object.assign({fastBrowsing:!0,unmanagedInNewWindow:!0},u.view),g=h.fastBrowsing?d.history:null,m=/^.*:\/\/[^\/]*|[^\/]*$/g,v=[[/\/+/g,"/"],[/ /g,"%20"],[/!/g,"%21"],[/#/g,"%23"],[/\$/g,"%24"],[/&/g,"%26"],[/'/g,"%27"],[/\(/g,"%28"],[/\)/g,"%29"],[/\*/g,"%2A"],[/\+/g,"%2B"],[/\,/g,"%2C"],[/:/g,"%3A"],[/;/g,"%3B"],[/\=/g,"%3D"],[/\?/g,"%3F"],[/@/g,"%40"],[/\[/g,"%5B"],[/\]/g,"%5D"]],b=null,w=function(e){return v.reduce(function(e,t){return e.replace(t[0],t[1])},e)},y=function(e){return e.replace(m,"")},x=function(){var e="/a b",t=p.createElement("a");return t.href=e,y(t.href)===e}(),k=function(e){var t=p.createElement("a"),n=void 0;return t.href=e,n=y(t.href),x&&(n=encodeURIComponent(n).replace(/%2F/gi,"/")),w(n)},_=function(){return p.domain},C=function(){return b},S=function(){return n(22).get(b)},A=function(){return c({action:"get",items:{href:b,what:1}}).then(function(e){var t=n(22),r=t.get(b);if(e){var o={};i(e.items,function(e){var n=t.get(e);o[n.absHref]=!0}),i(r.content,function(e){o[e.absHref]||t.remove(e.absHref)})}return r})},T=function(){var e=S(),t=o(e.content);l.pub("location.beforeRefresh"),A().then(function(){var n=o(e.content),r=a(n,t),i=a(t,n);l.pub("location.refreshed",e,r,i)})},E=function(e,t){l.pub("location.beforeChange"),e=k(e),b!==e&&(b=e,g&&(t?g.replaceState({absHref:b},"",b):g.pushState({absHref:b},"",b)));var n=S();n.isLoaded?(l.pub("location.changed",n),T()):(f.set("loading..."),A().then(function(){n.isLoaded=!0,f.set(),l.pub("location.changed",n)}))},M=function(e,t){e.attr("href",t.absHref),g&&t.isFolder()&&t.isManaged&&e.on("click",function(e){return E(t.absHref),e.preventDefault(),!1}),h.unmanagedInNewWindow&&!t.isManaged&&e.attr("target","_blank")},D=function(e){e.state&&e.state.absHref&&E(e.state.absHref,!0)};d.onpopstate=g?D:null,e.exports={forceEncoding:w,getDomain:_,getAbsHref:C,getItem:S,setLocation:E,refresh:T,setLink:M}}).call(t,function(){return this}())},function(e,t,n){"use strict";var r=n(2),i=r.dom,o=n(17),a=function(){var e=i('<div id="notification"></div>').hide().appTo(o.$root),t=function(t){t?e.html(t).show():e.hide()};return{set:t}};e.exports=a()},function(e,t,n){"use strict";var r=n(2),i=r.keys,o=r.each,a=r.filter,s=r.sortBy,c=r.isStr,u=r.isNum,l=n(8),f=n(20),d=n(14),p=n(23),h=/\/$/,g=/^(.*\/)([^\/]+\/?)$/,m={},v=function(e,t){return c(e)&&e.startsWith(t)},b=function(e){e=e.replace(h,"");try{e=decodeURIComponent(e)}catch(e){}return e},w=function(e){if("/"===e)return{parent:null,name:"/"};var t=g.exec(e);if(!t)return null;var n={parent:t[1],name:t[2]};return n.parent&&!v(n.parent,d.rootHref)&&(n.parent=null),n},y=function(e){if(c(e))e={href:e};else if(!e||!c(e.href))return null;var t=f.forceEncoding(e.href);if(!v(t,d.rootHref))return null;var n=m[t]||_(t);return u(e.time)&&(n.time=e.time),u(e.size)&&(n.size=e.size),e.managed&&(n.isManaged=!0),e.fetched&&(n.isContentFetched=!0),n},x=function e(t){t=f.forceEncoding(t);var n=m[t];n&&(delete m[t],n.parent&&delete n.parent.content[n.absHref],o(n.content,function(t){e(t.absHref)}))},k=function(e){return new Promise(function(t){var n=y(e);n.isContentFetched?t(n):l.request({action:"get",items:{href:n.absHref,what:1}}).then(function(e){e.items&&o(e.items,function(e){y(e)}),t(n)})})},_=function e(t){var n=w(t),r=Object.assign(Object.create(e.prototype),{absHref:t,type:p.getType(t),label:b("/"===t?f.getDomain():n.name),time:null,size:null,parent:null,isManaged:null,content:{}});return m[t]=r,n.parent&&(r.parent=y(n.parent),r.parent.content[r.absHref]=r,i(r.parent.content).length>1&&(r.parent.isContentFetched=!0)),r};_.prototype={constructor:_,isFolder:function(){return h.test(this.absHref)},isCurrentFolder:function(){return this.absHref===f.getAbsHref()},isInCurrentFolder:function(){return!!this.parent&&this.parent.isCurrentFolder()},isCurrentParentFolder:function(){var e=y(f.getAbsHref());return!!e&&this===e.parent},isDomain:function(){return"/"===this.absHref},isRoot:function(){return this.absHref===d.rootHref},isEmpty:function(){return 0===i(this.content).length},fetchContent:function(){return k(this.absHref)},getCrumb:function(){for(var e=this,t=[e];e.parent;)e=e.parent,t.unshift(e);return t},getSubfolders:function(){return s(a(this.content,function(e){return e.isFolder()}),function(e){return e.label.toLowerCase()})},getStats:function(){var e=0,t=0;o(this.content,function(n){n.isFolder()?e+=1:t+=1});for(var n=0,r=this;r.parent;)n+=1,r=r.parent;return{folders:e,files:t,depth:n}}},e.exports={get:y,remove:x}},function(e,t,n){"use strict";var r=n(2),i=r.each,o=r.map,a=n(7),s=/\/$/,c={},u=function(e){return e.replace(/[\-\[\]\/\{\}\(\)\+\?\.\\\^\$]/g,"\\$&")},l=function(e){i(e,function(e,t){var n="^("+o(e,function(e){return"("+u(e).replace(/\*/g,".*")+")"}).join("|")+")$";c[t]=new RegExp(n,"i")})},f=function(e){if(s.test(e))return"folder";var t=e.lastIndexOf("/"),n=t>=0?e.substr(t+1):e,r=void 0;return i(c,function(e,t){c[t].test(n)&&(r=t)}),r?r:"file"};l(Object.assign({},a.types)),e.exports={getType:f}},function(e,t,n){(function(e){"use strict";var t=n(12),r=n(20),i=n(14),o=e.window,a=Object.assign({enabled:!1,interval:5e3},i.autorefresh),s=null,c=function(){r.refresh()},u=function(){o.clearTimeout(s)},l=function(){o.clearTimeout(s),s=o.setTimeout(c,a.interval)},f=function(){a.enabled&&(a.interval=Math.max(1e3,a.interval),t.sub("location.beforeChange",u),t.sub("location.beforeRefresh",u),t.sub("location.changed",l),t.sub("location.refreshed",l))};f()}).call(t,function(){return this}())},function(e,t,n){"use strict";var r=n(2),i=r.each,o=r.dom,a=n(13),s=n(14),c=Object.assign({enabled:!1},s.contextmenu),u='<div id="cm-overlay"></div>',l='<div class="cm-panel"><ul></ul></div>',f='<li class="cm-sep"></li>',d='<li class="cm-entry"><span class="cm-icon"><img/></span><span class="cm-text"></span></li>',p='<li class="cm-label"><span class="cm-text"></span></li>',h=function(e){for(;!e._cmId&&e.parentNode;)e=e.parentNode;return e._cmId},g=function(e){var t=o(u),n=function(n){n.stopPropagation(),n.preventDefault();var r=h(n.target);n.target!==t[0]&&void 0===r||(t.rm(),e(r))};return t.on("contextmenu",n).on("click",n)},m=function(e){var t=o(l),n=t.find("ul"),r=void 0;return i(e,function(e){"-"===e.type?o(f).appTo(n):"l"===e.type?o(p).appTo(n).find(".cm-text").text(e.text):"e"===e.type&&(r=o(d).appTo(n),r[0]._cmId=e.id,r.find(".cm-text").text(e.text),e.icon?r.find(".cm-icon img").attr("src",a.icon(e.icon)):r.find(".cm-icon").addCls("no-icon"))}),t},v=function(e,t,n,r){var i=4;t.css({left:0,top:0,opacity:0}),e.show();var o=e[0].getBoundingClientRect(),a=t[0].getBoundingClientRect(),s=o.left,c=o.top,u=o.width,l=o.height,f=a.width,d=a.height,p=n,h=r;f>u-2*i&&(p=i,f=u-2*i),d>l-2*i&&(h=i,d=l-2*i),p<s+i&&(p=s+i),p+f>s+u-i&&(p=s+u-i-f),h<c+i&&(h=c+i),h+d>c+l-i&&(h=c+l-i-d),t.css({left:p+"px",top:h+"px",width:f+"px",height:d+"px",opacity:1})},b=function(e,t,n,r){var i=g(r),o=m(n);i.hide().app(o).appTo("body"),v(i,o,e,t)},w=function(){if(c.enabled){var e=[{type:"e",id:"e1",text:"testing context menus"},{type:"e",id:"e2",text:"another entry"},{type:"e",id:"e3",text:"one with icon",icon:"folder"},{type:"-"},{type:"e",id:"e4",text:"one with icon",icon:"x"},{type:"e",id:"e5",text:"one with icon",icon:"img"}];o("#view").on("contextmenu",function(t){t.preventDefault(),b(t.pageX,t.pageY,e)})}};w()},function(e,t,n){"use strict";var r=n(2),i=r.each,o=r.dom,a=n(12),s=n(20),c=n(13),u=n(14),l=n(17),f=Object.assign({enabled:!1},u.crumb),d='<div id="crumbbar"></div>',p='<a class="crumb">\n <img class="sep" src="'+c.image("crumb")+'" alt=">"/>\n <span class="label"></span>\n </a>',h='<img class="hint" src="'+c.icon("folder-page")+'" alt="has index page"/>',g=function(e){var t=o(p);return s.setLink(t,e),t.find(".label").text(e.label),e.isCurrentFolder()&&t.addCls("active"),e.isManaged||t.app(o(h)),e._$crumb=t,t[0]._item=e,t},m=function(e){var t=e._$crumb,n=o("#crumbbar");t&&t.parent()[0]===n[0]?(n.children().rmCls("active"),t.addCls("active")):(n.clr(),i(e.getCrumb(),function(e){n.app(g(e))}))},v=function(){f.enabled&&(o(d).appTo(l.$flowbar),a.sub("location.changed",m))};v()},function(e,t,n){"use strict";var r=n(28),i=n(2),o=i.each,a=i.dom,s=n(8),c=n(12),u=n(14),l=Object.assign({enabled:!1},u.custom),f=function(e,t){var n=a("#content-"+t);if(e&&e[t].content){var i=e[t].content;"md"===e[t].type&&(i=r(i)),n.html(i).show()}else n.hide()},d=function(e){s.request({action:"get",custom:e.absHref}).then(function(e){var t=e&&e.custom;o(["header","footer"],function(e){return f(t,e)})})},p=function(){l.enabled&&(a('<div id="content-header"></div>').hide().preTo("#content"),a('<div id="content-footer"></div>').hide().appTo("#content"),c.sub("location.changed",d))};p()},function(e,t,n){(function(t){!function(t){"use strict";function n(e){this.tokens=[],this.tokens.links=Object.create(null),this.options=e||b.defaults,this.rules=w.normal,this.options.pedantic?this.rules=w.pedantic:this.options.gfm&&(this.options.tables?this.rules=w.tables:this.rules=w.gfm)}function r(e,t){if(this.options=t||b.defaults,this.links=e,this.rules=y.normal,this.renderer=this.options.renderer||new i,this.renderer.options=this.options,!this.links)throw new Error("Tokens array requires a `links` property.");this.options.pedantic?this.rules=y.pedantic:this.options.gfm&&(this.options.breaks?this.rules=y.breaks:this.rules=y.gfm)}function i(e){this.options=e||b.defaults}function o(){}function a(e){this.tokens=[],this.token=null,this.options=e||b.defaults,this.options.renderer=this.options.renderer||new i,this.renderer=this.options.renderer,this.renderer.options=this.options,this.slugger=new s}function s(){this.seen={}}function c(e,t){if(t){if(c.escapeTest.test(e))return e.replace(c.escapeReplace,function(e){return c.replacements[e]})}else if(c.escapeTestNoEncode.test(e))return e.replace(c.escapeReplaceNoEncode,function(e){return c.replacements[e]});return e}function u(e){return e.replace(/&(#(?:\d+)|(?:#x[0-9A-Fa-f]+)|(?:\w+));?/gi,function(e,t){return t=t.toLowerCase(),"colon"===t?":":"#"===t.charAt(0)?"x"===t.charAt(1)?String.fromCharCode(parseInt(t.substring(2),16)):String.fromCharCode(+t.substring(1)):""})}function l(e,t){return e=e.source||e,t=t||"",{replace:function(t,n){return n=n.source||n,n=n.replace(/(^|[^\[])\^/g,"$1"),e=e.replace(t,n),this},getRegex:function(){return new RegExp(e,t)}}}function f(e,t,n){if(e){try{var r=decodeURIComponent(u(n)).replace(/[^\w:]/g,"").toLowerCase()}catch(e){return null}if(0===r.indexOf("javascript:")||0===r.indexOf("vbscript:")||0===r.indexOf("data:"))return null}t&&!k.test(n)&&(n=d(t,n));try{n=encodeURI(n).replace(/%25/g,"%")}catch(e){return null}return n}function d(e,t){return x[" "+e]||(/^[^:]+:\/*[^\/]*$/.test(e)?x[" "+e]=e+"/":x[" "+e]=m(e,"/",!0)),e=x[" "+e],"//"===t.slice(0,2)?e.replace(/:[\s\S]*/,":")+t:"/"===t.charAt(0)?e.replace(/(:\/*[^\/]*)[\s\S]*/,"$1")+t:e+t}function p(){}function h(e){for(var t,n,r=1;r<arguments.length;r++){t=arguments[r];for(n in t)Object.prototype.hasOwnProperty.call(t,n)&&(e[n]=t[n])}return e}function g(e,t){var n=e.replace(/\|/g,function(e,t,n){for(var r=!1,i=t;--i>=0&&"\\"===n[i];)r=!r;
-return r?"|":" |"}),r=n.split(/ \|/),i=0;if(r.length>t)r.splice(t);else for(;r.length<t;)r.push("");for(;i<r.length;i++)r[i]=r[i].trim().replace(/\\\|/g,"|");return r}function m(e,t,n){if(0===e.length)return"";for(var r=0;r<e.length;){var i=e.charAt(e.length-r-1);if(i!==t||n){if(i===t||!n)break;r++}else r++}return e.substr(0,e.length-r)}function v(e,t){if(e.indexOf(t[1])===-1)return-1;for(var n=0,r=0;r<e.length;r++)if("\\"===e[r])r++;else if(e[r]===t[0])n++;else if(e[r]===t[1]&&(n--,n<0))return r;return-1}function b(e,t,r){if("undefined"==typeof e||null===e)throw new Error("marked(): input parameter is undefined or null");if("string"!=typeof e)throw new Error("marked(): input parameter is of type "+Object.prototype.toString.call(e)+", string expected");if(r||"function"==typeof t){r||(r=t,t=null),t=h({},b.defaults,t||{});var i,o,s=t.highlight,u=0;try{i=n.lex(e,t)}catch(e){return r(e)}o=i.length;var l=function(e){if(e)return t.highlight=s,r(e);var n;try{n=a.parse(i,t)}catch(t){e=t}return t.highlight=s,e?r(e):r(null,n)};if(!s||s.length<3)return l();if(delete t.highlight,!o)return l();for(;u<i.length;u++)!function(e){return"code"!==e.type?--o||l():s(e.text,e.lang,function(t,n){return t?l(t):null==n||n===e.text?--o||l():(e.text=n,e.escaped=!0,void(--o||l()))})}(i[u])}else try{return t&&(t=h({},b.defaults,t)),a.parse(n.lex(e,t),t)}catch(e){if(e.message+="\nPlease report this to https://github.com/markedjs/marked.",(t||b.defaults).silent)return"<p>An error occurred:</p><pre>"+c(e.message+"",!0)+"</pre>";throw e}}var w={newline:/^\n+/,code:/^( {4}[^\n]+\n*)+/,fences:p,hr:/^ {0,3}((?:- *){3,}|(?:_ *){3,}|(?:\* *){3,})(?:\n+|$)/,heading:/^ *(#{1,6}) *([^\n]+?) *(?:#+ *)?(?:\n+|$)/,nptable:p,blockquote:/^( {0,3}> ?(paragraph|[^\n]*)(?:\n|$))+/,list:/^( {0,3})(bull) [\s\S]+?(?:hr|def|\n{2,}(?! )(?!\1bull )\n*|\s*$)/,html:"^ {0,3}(?:<(script|pre|style)[\\s>][\\s\\S]*?(?:</\\1>[^\\n]*\\n+|$)|comment[^\\n]*(\\n+|$)|<\\?[\\s\\S]*?\\?>\\n*|<![A-Z][\\s\\S]*?>\\n*|<!\\[CDATA\\[[\\s\\S]*?\\]\\]>\\n*|</?(tag)(?: +|\\n|/?>)[\\s\\S]*?(?:\\n{2,}|$)|<(?!script|pre|style)([a-z][\\w-]*)(?:attribute)*? */?>(?=\\h*\\n)[\\s\\S]*?(?:\\n{2,}|$)|</(?!script|pre|style)[a-z][\\w-]*\\s*>(?=\\h*\\n)[\\s\\S]*?(?:\\n{2,}|$))",def:/^ {0,3}\[(label)\]: *\n? *<?([^\s>]+)>?(?:(?: +\n? *| *\n *)(title))? *(?:\n+|$)/,table:p,lheading:/^([^\n]+)\n *(=|-){2,} *(?:\n+|$)/,paragraph:/^([^\n]+(?:\n(?!hr|heading|lheading| {0,3}>|<\/?(?:tag)(?: +|\n|\/?>)|<(?:script|pre|style|!--))[^\n]+)*)/,text:/^[^\n]+/};w._label=/(?!\s*\])(?:\\[\[\]]|[^\[\]])+/,w._title=/(?:"(?:\\"?|[^"\\])*"|'[^'\n]*(?:\n[^'\n]+)*\n?'|\([^()]*\))/,w.def=l(w.def).replace("label",w._label).replace("title",w._title).getRegex(),w.bullet=/(?:[*+-]|\d{1,9}\.)/,w.item=/^( *)(bull) ?[^\n]*(?:\n(?!\1bull ?)[^\n]*)*/,w.item=l(w.item,"gm").replace(/bull/g,w.bullet).getRegex(),w.list=l(w.list).replace(/bull/g,w.bullet).replace("hr","\\n+(?=\\1?(?:(?:- *){3,}|(?:_ *){3,}|(?:\\* *){3,})(?:\\n+|$))").replace("def","\\n+(?="+w.def.source+")").getRegex(),w._tag="address|article|aside|base|basefont|blockquote|body|caption|center|col|colgroup|dd|details|dialog|dir|div|dl|dt|fieldset|figcaption|figure|footer|form|frame|frameset|h[1-6]|head|header|hr|html|iframe|legend|li|link|main|menu|menuitem|meta|nav|noframes|ol|optgroup|option|p|param|section|source|summary|table|tbody|td|tfoot|th|thead|title|tr|track|ul",w._comment=/<!--(?!-?>)[\s\S]*?-->/,w.html=l(w.html,"i").replace("comment",w._comment).replace("tag",w._tag).replace("attribute",/ +[a-zA-Z:_][\w.:-]*(?: *= *"[^"\n]*"| *= *'[^'\n]*'| *= *[^\s"'=<>`]+)?/).getRegex(),w.paragraph=l(w.paragraph).replace("hr",w.hr).replace("heading",w.heading).replace("lheading",w.lheading).replace("tag",w._tag).getRegex(),w.blockquote=l(w.blockquote).replace("paragraph",w.paragraph).getRegex(),w.normal=h({},w),w.gfm=h({},w.normal,{fences:/^ {0,3}(`{3,}|~{3,})([^`\n]*)\n(?:|([\s\S]*?)\n)(?: {0,3}\1[~`]* *(?:\n+|$)|$)/,paragraph:/^/,heading:/^ *(#{1,6}) +([^\n]+?) *#* *(?:\n+|$)/}),w.gfm.paragraph=l(w.paragraph).replace("(?!","(?!"+w.gfm.fences.source.replace("\\1","\\2")+"|"+w.list.source.replace("\\1","\\3")+"|").getRegex(),w.tables=h({},w.gfm,{nptable:/^ *([^|\n ].*\|.*)\n *([-:]+ *\|[-| :]*)(?:\n((?:.*[^>\n ].*(?:\n|$))*)\n*|$)/,table:/^ *\|(.+)\n *\|?( *[-:]+[-| :]*)(?:\n((?: *[^>\n ].*(?:\n|$))*)\n*|$)/}),w.pedantic=h({},w.normal,{html:l("^ *(?:comment *(?:\\n|\\s*$)|<(tag)[\\s\\S]+?</\\1> *(?:\\n{2,}|\\s*$)|<tag(?:\"[^\"]*\"|'[^']*'|\\s[^'\"/>\\s]*)*?/?> *(?:\\n{2,}|\\s*$))").replace("comment",w._comment).replace(/tag/g,"(?!(?:a|em|strong|small|s|cite|q|dfn|abbr|data|time|code|var|samp|kbd|sub|sup|i|b|u|mark|ruby|rt|rp|bdi|bdo|span|br|wbr|ins|del|img)\\b)\\w+(?!:|[^\\w\\s@]*@)\\b").getRegex(),def:/^ *\[([^\]]+)\]: *<?([^\s>]+)>?(?: +(["(][^\n]+[")]))? *(?:\n+|$)/}),n.rules=w,n.lex=function(e,t){var r=new n(t);return r.lex(e)},n.prototype.lex=function(e){return e=e.replace(/\r\n|\r/g,"\n").replace(/\t/g," ").replace(/\u00a0/g," ").replace(/\u2424/g,"\n"),this.token(e,!0)},n.prototype.token=function(e,t){e=e.replace(/^ +$/gm,"");for(var n,r,i,o,a,s,c,u,l,f,d,p,h,v,b,y;e;)if((i=this.rules.newline.exec(e))&&(e=e.substring(i[0].length),i[0].length>1&&this.tokens.push({type:"space"})),i=this.rules.code.exec(e))e=e.substring(i[0].length),i=i[0].replace(/^ {4}/gm,""),this.tokens.push({type:"code",text:this.options.pedantic?i:m(i,"\n")});else if(i=this.rules.fences.exec(e))e=e.substring(i[0].length),this.tokens.push({type:"code",lang:i[2]?i[2].trim():i[2],text:i[3]||""});else if(i=this.rules.heading.exec(e))e=e.substring(i[0].length),this.tokens.push({type:"heading",depth:i[1].length,text:i[2]});else if(t&&(i=this.rules.nptable.exec(e))&&(s={type:"table",header:g(i[1].replace(/^ *| *\| *$/g,"")),align:i[2].replace(/^ *|\| *$/g,"").split(/ *\| */),cells:i[3]?i[3].replace(/\n$/,"").split("\n"):[]},s.header.length===s.align.length)){for(e=e.substring(i[0].length),d=0;d<s.align.length;d++)/^ *-+: *$/.test(s.align[d])?s.align[d]="right":/^ *:-+: *$/.test(s.align[d])?s.align[d]="center":/^ *:-+ *$/.test(s.align[d])?s.align[d]="left":s.align[d]=null;for(d=0;d<s.cells.length;d++)s.cells[d]=g(s.cells[d],s.header.length);this.tokens.push(s)}else if(i=this.rules.hr.exec(e))e=e.substring(i[0].length),this.tokens.push({type:"hr"});else if(i=this.rules.blockquote.exec(e))e=e.substring(i[0].length),this.tokens.push({type:"blockquote_start"}),i=i[0].replace(/^ *> ?/gm,""),this.token(i,t),this.tokens.push({type:"blockquote_end"});else if(i=this.rules.list.exec(e)){for(e=e.substring(i[0].length),o=i[2],v=o.length>1,c={type:"list_start",ordered:v,start:v?+o:"",loose:!1},this.tokens.push(c),i=i[0].match(this.rules.item),u=[],n=!1,h=i.length,d=0;d<h;d++)s=i[d],f=s.length,s=s.replace(/^ *([*+-]|\d+\.) */,""),~s.indexOf("\n ")&&(f-=s.length,s=this.options.pedantic?s.replace(/^ {1,4}/gm,""):s.replace(new RegExp("^ {1,"+f+"}","gm"),"")),d!==h-1&&(a=w.bullet.exec(i[d+1])[0],(o.length>1?1===a.length:a.length>1||this.options.smartLists&&a!==o)&&(e=i.slice(d+1).join("\n")+e,d=h-1)),r=n||/\n\n(?!\s*$)/.test(s),d!==h-1&&(n="\n"===s.charAt(s.length-1),r||(r=n)),r&&(c.loose=!0),b=/^\[[ xX]\] /.test(s),y=void 0,b&&(y=" "!==s[1],s=s.replace(/^\[[ xX]\] +/,"")),l={type:"list_item_start",task:b,checked:y,loose:r},u.push(l),this.tokens.push(l),this.token(s,!1),this.tokens.push({type:"list_item_end"});if(c.loose)for(h=u.length,d=0;d<h;d++)u[d].loose=!0;this.tokens.push({type:"list_end"})}else if(i=this.rules.html.exec(e))e=e.substring(i[0].length),this.tokens.push({type:this.options.sanitize?"paragraph":"html",pre:!this.options.sanitizer&&("pre"===i[1]||"script"===i[1]||"style"===i[1]),text:i[0]});else if(t&&(i=this.rules.def.exec(e)))e=e.substring(i[0].length),i[3]&&(i[3]=i[3].substring(1,i[3].length-1)),p=i[1].toLowerCase().replace(/\s+/g," "),this.tokens.links[p]||(this.tokens.links[p]={href:i[2],title:i[3]});else if(t&&(i=this.rules.table.exec(e))&&(s={type:"table",header:g(i[1].replace(/^ *| *\| *$/g,"")),align:i[2].replace(/^ *|\| *$/g,"").split(/ *\| */),cells:i[3]?i[3].replace(/(?: *\| *)?\n$/,"").split("\n"):[]},s.header.length===s.align.length)){for(e=e.substring(i[0].length),d=0;d<s.align.length;d++)/^ *-+: *$/.test(s.align[d])?s.align[d]="right":/^ *:-+: *$/.test(s.align[d])?s.align[d]="center":/^ *:-+ *$/.test(s.align[d])?s.align[d]="left":s.align[d]=null;for(d=0;d<s.cells.length;d++)s.cells[d]=g(s.cells[d].replace(/^ *\| *| *\| *$/g,""),s.header.length);this.tokens.push(s)}else if(i=this.rules.lheading.exec(e))e=e.substring(i[0].length),this.tokens.push({type:"heading",depth:"="===i[2]?1:2,text:i[1]});else if(t&&(i=this.rules.paragraph.exec(e)))e=e.substring(i[0].length),this.tokens.push({type:"paragraph",text:"\n"===i[1].charAt(i[1].length-1)?i[1].slice(0,-1):i[1]});else if(i=this.rules.text.exec(e))e=e.substring(i[0].length),this.tokens.push({type:"text",text:i[0]});else if(e)throw new Error("Infinite loop on byte: "+e.charCodeAt(0));return this.tokens};var y={escape:/^\\([!"#$%&'()*+,\-.\/:;<=>?@\[\]\\^_`{|}~])/,autolink:/^<(scheme:[^\s\x00-\x1f<>]*|email)>/,url:p,tag:"^comment|^</[a-zA-Z][\\w:-]*\\s*>|^<[a-zA-Z][\\w-]*(?:attribute)*?\\s*/?>|^<\\?[\\s\\S]*?\\?>|^<![a-zA-Z]+\\s[\\s\\S]*?>|^<!\\[CDATA\\[[\\s\\S]*?\\]\\]>",link:/^!?\[(label)\]\(href(?:\s+(title))?\s*\)/,reflink:/^!?\[(label)\]\[(?!\s*\])((?:\\[\[\]]?|[^\[\]\\])+)\]/,nolink:/^!?\[(?!\s*\])((?:\[[^\[\]]*\]|\\[\[\]]|[^\[\]])*)\](?:\[\])?/,strong:/^__([^\s_])__(?!_)|^\*\*([^\s*])\*\*(?!\*)|^__([^\s][\s\S]*?[^\s])__(?!_)|^\*\*([^\s][\s\S]*?[^\s])\*\*(?!\*)/,em:/^_([^\s_])_(?!_)|^\*([^\s*"<\[])\*(?!\*)|^_([^\s][\s\S]*?[^\s_])_(?!_|[^\spunctuation])|^_([^\s_][\s\S]*?[^\s])_(?!_|[^\spunctuation])|^\*([^\s"<\[][\s\S]*?[^\s*])\*(?!\*)|^\*([^\s*"<\[][\s\S]*?[^\s])\*(?!\*)/,code:/^(`+)([^`]|[^`][\s\S]*?[^`])\1(?!`)/,br:/^( {2,}|\\)\n(?!\s*$)/,del:p,text:/^(`+|[^`])[\s\S]*?(?=[\\<!\[`*]|\b_| {2,}\n|$)/};y._punctuation="!\"#$%&'()*+,\\-./:;<=>?@\\[^_{|}~",y.em=l(y.em).replace(/punctuation/g,y._punctuation).getRegex(),y._escapes=/\\([!"#$%&'()*+,\-.\/:;<=>?@\[\]\\^_`{|}~])/g,y._scheme=/[a-zA-Z][a-zA-Z0-9+.-]{1,31}/,y._email=/[a-zA-Z0-9.!#$%&'*+\/=?^_`{|}~-]+(@)[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)+(?![-_])/,y.autolink=l(y.autolink).replace("scheme",y._scheme).replace("email",y._email).getRegex(),y._attribute=/\s+[a-zA-Z:_][\w.:-]*(?:\s*=\s*"[^"]*"|\s*=\s*'[^']*'|\s*=\s*[^\s"'=<>`]+)?/,y.tag=l(y.tag).replace("comment",w._comment).replace("attribute",y._attribute).getRegex(),y._label=/(?:\[[^\[\]]*\]|\\[\[\]]?|`[^`]*`|[^\[\]\\])*?/,y._href=/\s*(<(?:\\[<>]?|[^\s<>\\])*>|[^\s\x00-\x1f]*)/,y._title=/"(?:\\"?|[^"\\])*"|'(?:\\'?|[^'\\])*'|\((?:\\\)?|[^)\\])*\)/,y.link=l(y.link).replace("label",y._label).replace("href",y._href).replace("title",y._title).getRegex(),y.reflink=l(y.reflink).replace("label",y._label).getRegex(),y.normal=h({},y),y.pedantic=h({},y.normal,{strong:/^__(?=\S)([\s\S]*?\S)__(?!_)|^\*\*(?=\S)([\s\S]*?\S)\*\*(?!\*)/,em:/^_(?=\S)([\s\S]*?\S)_(?!_)|^\*(?=\S)([\s\S]*?\S)\*(?!\*)/,link:l(/^!?\[(label)\]\((.*?)\)/).replace("label",y._label).getRegex(),reflink:l(/^!?\[(label)\]\s*\[([^\]]*)\]/).replace("label",y._label).getRegex()}),y.gfm=h({},y.normal,{escape:l(y.escape).replace("])","~|])").getRegex(),_extended_email:/[A-Za-z0-9._+-]+(@)[a-zA-Z0-9-_]+(?:\.[a-zA-Z0-9-_]*[a-zA-Z0-9])+(?![-_])/,url:/^((?:ftp|https?):\/\/|www\.)(?:[a-zA-Z0-9\-]+\.?)+[^\s<]*|^email/,_backpedal:/(?:[^?!.,:;*_~()&]+|\([^)]*\)|&(?![a-zA-Z0-9]+;$)|[?!.,:;*_~)]+(?!$))+/,del:/^~+(?=\S)([\s\S]*?\S)~+/,text:l(y.text).replace("]|","~]|").replace("|$","|https?://|ftp://|www\\.|[a-zA-Z0-9.!#$%&'*+/=?^_`{\\|}~-]+@|$").getRegex()}),y.gfm.url=l(y.gfm.url,"i").replace("email",y.gfm._extended_email).getRegex(),y.breaks=h({},y.gfm,{br:l(y.br).replace("{2,}","*").getRegex(),text:l(y.gfm.text).replace("{2,}","*").getRegex()}),r.rules=y,r.output=function(e,t,n){var i=new r(t,n);return i.output(e)},r.prototype.output=function(e){for(var t,n,i,o,a,s,u="";e;)if(a=this.rules.escape.exec(e))e=e.substring(a[0].length),u+=c(a[1]);else if(a=this.rules.tag.exec(e))!this.inLink&&/^<a /i.test(a[0])?this.inLink=!0:this.inLink&&/^<\/a>/i.test(a[0])&&(this.inLink=!1),!this.inRawBlock&&/^<(pre|code|kbd|script)(\s|>)/i.test(a[0])?this.inRawBlock=!0:this.inRawBlock&&/^<\/(pre|code|kbd|script)(\s|>)/i.test(a[0])&&(this.inRawBlock=!1),e=e.substring(a[0].length),u+=this.options.sanitize?this.options.sanitizer?this.options.sanitizer(a[0]):c(a[0]):a[0];else if(a=this.rules.link.exec(e)){var l=v(a[2],"()");if(l>-1){var f=a[2].length-l;a[2]=a[2].substring(0,l),a[0]=a[0].substring(0,a[0].length-f)}e=e.substring(a[0].length),this.inLink=!0,i=a[2],this.options.pedantic?(t=/^([^'"]*[^\s])\s+(['"])(.*)\2/.exec(i),t?(i=t[1],o=t[3]):o=""):o=a[3]?a[3].slice(1,-1):"",i=i.trim().replace(/^<([\s\S]*)>$/,"$1"),u+=this.outputLink(a,{href:r.escapes(i),title:r.escapes(o)}),this.inLink=!1}else if((a=this.rules.reflink.exec(e))||(a=this.rules.nolink.exec(e))){if(e=e.substring(a[0].length),t=(a[2]||a[1]).replace(/\s+/g," "),t=this.links[t.toLowerCase()],!t||!t.href){u+=a[0].charAt(0),e=a[0].substring(1)+e;continue}this.inLink=!0,u+=this.outputLink(a,t),this.inLink=!1}else if(a=this.rules.strong.exec(e))e=e.substring(a[0].length),u+=this.renderer.strong(this.output(a[4]||a[3]||a[2]||a[1]));else if(a=this.rules.em.exec(e))e=e.substring(a[0].length),u+=this.renderer.em(this.output(a[6]||a[5]||a[4]||a[3]||a[2]||a[1]));else if(a=this.rules.code.exec(e))e=e.substring(a[0].length),u+=this.renderer.codespan(c(a[2].trim(),!0));else if(a=this.rules.br.exec(e))e=e.substring(a[0].length),u+=this.renderer.br();else if(a=this.rules.del.exec(e))e=e.substring(a[0].length),u+=this.renderer.del(this.output(a[1]));else if(a=this.rules.autolink.exec(e))e=e.substring(a[0].length),"@"===a[2]?(n=c(this.mangle(a[1])),i="mailto:"+n):(n=c(a[1]),i=n),u+=this.renderer.link(i,null,n);else if(this.inLink||!(a=this.rules.url.exec(e))){if(a=this.rules.text.exec(e))e=e.substring(a[0].length),u+=this.inRawBlock?this.renderer.text(a[0]):this.renderer.text(c(this.smartypants(a[0])));else if(e)throw new Error("Infinite loop on byte: "+e.charCodeAt(0))}else{if("@"===a[2])n=c(a[0]),i="mailto:"+n;else{do s=a[0],a[0]=this.rules._backpedal.exec(a[0])[0];while(s!==a[0]);n=c(a[0]),i="www."===a[1]?"http://"+n:n}e=e.substring(a[0].length),u+=this.renderer.link(i,null,n)}return u},r.escapes=function(e){return e?e.replace(r.rules._escapes,"$1"):e},r.prototype.outputLink=function(e,t){var n=t.href,r=t.title?c(t.title):null;return"!"!==e[0].charAt(0)?this.renderer.link(n,r,this.output(e[1])):this.renderer.image(n,r,c(e[1]))},r.prototype.smartypants=function(e){return this.options.smartypants?e.replace(/---/g,"—").replace(/--/g,"–").replace(/(^|[-\u2014\/(\[{"\s])'/g,"$1‘").replace(/'/g,"’").replace(/(^|[-\u2014\/(\[{\u2018\s])"/g,"$1“").replace(/"/g,"”").replace(/\.{3}/g,"…"):e},r.prototype.mangle=function(e){if(!this.options.mangle)return e;for(var t,n="",r=e.length,i=0;i<r;i++)t=e.charCodeAt(i),Math.random()>.5&&(t="x"+t.toString(16)),n+="&#"+t+";";return n},i.prototype.code=function(e,t,n){var r=(t||"").match(/\S*/)[0];if(this.options.highlight){var i=this.options.highlight(e,r);null!=i&&i!==e&&(n=!0,e=i)}return r?'<pre><code class="'+this.options.langPrefix+c(r,!0)+'">'+(n?e:c(e,!0))+"</code></pre>\n":"<pre><code>"+(n?e:c(e,!0))+"</code></pre>"},i.prototype.blockquote=function(e){return"<blockquote>\n"+e+"</blockquote>\n"},i.prototype.html=function(e){return e},i.prototype.heading=function(e,t,n,r){return this.options.headerIds?"<h"+t+' id="'+this.options.headerPrefix+r.slug(n)+'">'+e+"</h"+t+">\n":"<h"+t+">"+e+"</h"+t+">\n"},i.prototype.hr=function(){return this.options.xhtml?"<hr/>\n":"<hr>\n"},i.prototype.list=function(e,t,n){var r=t?"ol":"ul",i=t&&1!==n?' start="'+n+'"':"";return"<"+r+i+">\n"+e+"</"+r+">\n"},i.prototype.listitem=function(e){return"<li>"+e+"</li>\n"},i.prototype.checkbox=function(e){return"<input "+(e?'checked="" ':"")+'disabled="" type="checkbox"'+(this.options.xhtml?" /":"")+"> "},i.prototype.paragraph=function(e){return"<p>"+e+"</p>\n"},i.prototype.table=function(e,t){return t&&(t="<tbody>"+t+"</tbody>"),"<table>\n<thead>\n"+e+"</thead>\n"+t+"</table>\n"},i.prototype.tablerow=function(e){return"<tr>\n"+e+"</tr>\n"},i.prototype.tablecell=function(e,t){var n=t.header?"th":"td",r=t.align?"<"+n+' align="'+t.align+'">':"<"+n+">";return r+e+"</"+n+">\n"},i.prototype.strong=function(e){return"<strong>"+e+"</strong>"},i.prototype.em=function(e){return"<em>"+e+"</em>"},i.prototype.codespan=function(e){return"<code>"+e+"</code>"},i.prototype.br=function(){return this.options.xhtml?"<br/>":"<br>"},i.prototype.del=function(e){return"<del>"+e+"</del>"},i.prototype.link=function(e,t,n){if(e=f(this.options.sanitize,this.options.baseUrl,e),null===e)return n;var r='<a href="'+c(e)+'"';return t&&(r+=' title="'+t+'"'),r+=">"+n+"</a>"},i.prototype.image=function(e,t,n){if(e=f(this.options.sanitize,this.options.baseUrl,e),null===e)return n;var r='<img src="'+e+'" alt="'+n+'"';return t&&(r+=' title="'+t+'"'),r+=this.options.xhtml?"/>":">"},i.prototype.text=function(e){return e},o.prototype.strong=o.prototype.em=o.prototype.codespan=o.prototype.del=o.prototype.text=function(e){return e},o.prototype.link=o.prototype.image=function(e,t,n){return""+n},o.prototype.br=function(){return""},a.parse=function(e,t){var n=new a(t);return n.parse(e)},a.prototype.parse=function(e){this.inline=new r(e.links,this.options),this.inlineText=new r(e.links,h({},this.options,{renderer:new o})),this.tokens=e.reverse();for(var t="";this.next();)t+=this.tok();return t},a.prototype.next=function(){return this.token=this.tokens.pop()},a.prototype.peek=function(){return this.tokens[this.tokens.length-1]||0},a.prototype.parseText=function(){for(var e=this.token.text;"text"===this.peek().type;)e+="\n"+this.next().text;return this.inline.output(e)},a.prototype.tok=function(){switch(this.token.type){case"space":return"";case"hr":return this.renderer.hr();case"heading":return this.renderer.heading(this.inline.output(this.token.text),this.token.depth,u(this.inlineText.output(this.token.text)),this.slugger);case"code":return this.renderer.code(this.token.text,this.token.lang,this.token.escaped);case"table":var e,t,n,r,i="",o="";for(n="",e=0;e<this.token.header.length;e++)n+=this.renderer.tablecell(this.inline.output(this.token.header[e]),{header:!0,align:this.token.align[e]});for(i+=this.renderer.tablerow(n),e=0;e<this.token.cells.length;e++){for(t=this.token.cells[e],n="",r=0;r<t.length;r++)n+=this.renderer.tablecell(this.inline.output(t[r]),{header:!1,align:this.token.align[r]});o+=this.renderer.tablerow(n)}return this.renderer.table(i,o);case"blockquote_start":for(o="";"blockquote_end"!==this.next().type;)o+=this.tok();return this.renderer.blockquote(o);case"list_start":o="";for(var a=this.token.ordered,s=this.token.start;"list_end"!==this.next().type;)o+=this.tok();return this.renderer.list(o,a,s);case"list_item_start":o="";var c=this.token.loose;for(this.token.task&&(o+=this.renderer.checkbox(this.token.checked));"list_item_end"!==this.next().type;)o+=c||"text"!==this.token.type?this.tok():this.parseText();return this.renderer.listitem(o);case"html":return this.renderer.html(this.token.text);case"paragraph":return this.renderer.paragraph(this.inline.output(this.token.text));case"text":return this.renderer.paragraph(this.parseText());default:var l='Token with "'+this.token.type+'" type was not found.';if(!this.options.silent)throw new Error(l);console.log(l)}},s.prototype.slug=function(e){var t=e.toLowerCase().trim().replace(/[\u2000-\u206F\u2E00-\u2E7F\\'!"#$%&()*+,.\/:;<=>?@[\]^`{|}~]/g,"").replace(/\s/g,"-");if(this.seen.hasOwnProperty(t)){var n=t;do this.seen[n]++,t=n+"-"+this.seen[n];while(this.seen.hasOwnProperty(t))}return this.seen[t]=0,t},c.escapeTest=/[&<>"']/,c.escapeReplace=/[&<>"']/g,c.replacements={"&":"&","<":"<",">":">",'"':""","'":"'"},c.escapeTestNoEncode=/[<>"']|&(?!#?\w+;)/,c.escapeReplaceNoEncode=/[<>"']|&(?!#?\w+;)/g;var x={},k=/^$|^[a-z][a-z0-9+.-]*:|^[?#]/i;p.exec=p,b.options=b.setOptions=function(e){return h(b.defaults,e),b},b.getDefaults=function(){return{baseUrl:null,breaks:!1,gfm:!0,headerIds:!0,headerPrefix:"",highlight:null,langPrefix:"language-",mangle:!0,pedantic:!1,renderer:new i,sanitize:!1,sanitizer:null,silent:!1,smartLists:!1,smartypants:!1,tables:!0,xhtml:!1}},b.defaults=b.getDefaults(),b.Parser=a,b.parser=a.parse,b.Renderer=i,b.TextRenderer=o,b.Lexer=n,b.lexer=n.lex,b.InlineLexer=r,b.inlineLexer=r.output,b.Slugger=s,b.parse=b,e.exports=b}(this||("undefined"!=typeof window?window:t))}).call(t,function(){return this}())},function(e,t,n){"use strict";var r=n(2),i=r.each,o=r.dom,a=n(8),s=n(12),c=n(20),u=n(13),l=n(14),f=Object.assign({enabled:!1,type:"php-tar",packageName:"package",alwaysVisible:!1},l.download),d='<div id="download" class="tool">\n <img src="'+u.image("download")+'" alt="download"/>\n </div>',p=[],h=void 0,g=function(e){p=e.slice(0),p.length?h.show():f.alwaysVisible||h.hide()},m=function(){var e=f.type,t=f.packageName,n="shell-zip"===e?"zip":"tar";t||(t=1===p.length?p[0].label:c.getItem().label);var r={action:"download",as:t+"."+n,type:e,baseHref:c.getAbsHref(),hrefs:""};i(p,function(e,t){r["hrefs["+t+"]"]=e.absHref}),a.formRequest(r)},v=function(){f.enabled&&(h=o(d).hide().appTo("#toolbar").on("click",m),f.alwaysVisible&&h.show(),s.sub("selection",g))};v()},function(e,t,n){"use strict";var r=n(2),i=r.filter,o=r.debounce,a=r.parsePattern,s=r.dom,c=n(12),u=n(20),l=n(13),f=n(14),d=n(18),p=Object.assign({enabled:!1,advanced:!1,debounceTime:100,ignorecase:!0},f.filter),h='<div id="filter" class="tool">\n <img src="'+l.image("filter")+'" alt="filter"/>\n <input class="l10n_ph-filter" type="text" value=""/>\n </div>',g=!1,m="",v=void 0,b=void 0,w=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"";if(e!==m){if(m=e,!e)return void d.setLocation();v.addCls("pending");var t=new RegExp(e,p.ignorecase?"i":""),n=i(u.getItem().content,function(e){return t.test(e.label)});v.rmCls("pending"),d.setHint("noMatch"),d.setItems(n)}},y=function(){g?(v.addCls("active"),b[0].focus(),w(a(b.val(),p.advanced))):(w(),v.rmCls("active"))},x=function(){g=!g,y()},k=function(){g=!1,b.val(""),y()},_=function(){p.enabled&&(v=s(h).appTo("#toolbar"),b=v.find("input"),v.find("img").on("click",x),b.on("keyup",o(y,p.debounceTime)),c.sub("location.changed",k))};_()},function(e,t,n){(function(e){"use strict";var t=n(2),r=t.map,i=n(12),o=n(14),a=e.window,s=Object.assign({enabled:!1,id:"UA-000000-0"},o["google-analytics-ua"]),c=function(){!function(e,t,n,r,i,o,a){e.GoogleAnalyticsObject=i,e[i]=e[i]||function(){(e[i].q=e[i].q||[]).push(arguments)},e[i].l=1*new Date,o=t.createElement(n),a=t.getElementsByTagName(n)[0],o.async=1,o.src=r,a.parentNode.insertBefore(o,a)}(window,document,"script","//www.google-analytics.com/analytics.js","ga")},u=function(){s.enabled&&(c(),a.ga("create",s.id,"auto"),i.sub("location.changed",function(e){var t=a.location;a.ga("send","pageview",{location:t.protocol+"//"+t.host+e.absHref,title:r(e.getCrumb(),function(e){return e.label}).join(" > ")})}))};u()}).call(t,function(){return this}())},function(e,t,n){(function(e){"use strict";var t=n(33),r=n(2),i=r.isNum,o=r.dom,a=n(12),s=n(19),c=n(13),u=n(14),l=n(16),f=Object.assign({enabled:!1,show:!1,qrcode:!0,qrColor:"#999"},u.info),d='<div id="info">\n <div class="icon"><img/></div>\n <div class="block">\n <div class="label"></div>\n <div class="time"></div>\n <div class="size"></div>\n <div class="content">\n <span class="folders"></span> <span class="l10n-folders"></span>,\n <span class="files"></span> <span class="l10n-files"></span>\n </div>\n </div>\n <div class="qrcode"/>\n </div>',p='<div class="block">\n <h1 class="l10n-info">Info</h1>\n <div id="view-info" class="button view">\n <img src="'+c.image("info-toggle")+'" alt="view-info"/>\n </div>\n </div>',h="ext/info",g=void 0,m=void 0,v=void 0,b=void 0,w=void 0,y=void 0,x=void 0,k=void 0,_=void 0,C=function(){l.get(h)?(o("#view-info").addCls("active"),o("#info").show()):(o("#view-info").rmCls("active"),o("#info").hide())},S=function(n){var r=n.thumbRational||n.icon,o=!!n.thumbRational;if(!n.isCurrentFolder()&&r||(r=c.icon("folder")),g.attr("src",r),o?g.addCls("thumb"):g.rmCls("thumb"),m.text(n.label),i(n.time)?v.text(s.formatDate(n.time)):v.text("."),i(n.size)?(b.text(s.formatSize(n.size)),b.show()):b.hide(),n.isContentFetched){var a=n.getStats();y.text(a.folders),x.text(a.files),w.show()}else w.hide();if(f.qrcode){var u=e.window.location;k.clr().app(t({render:"image",size:200,fill:f.qrFill,back:f.qrBack,text:u.protocol+"//"+u.host+n.absHref,crisp:!0,quiet:1}))}},A=function(e){S(e)},T=function(){S(_)},E=function(e){_=e,S(_)},M=function(){if(f.enabled){var e=o(d).hide().appTo("#mainrow");g=e.find(".icon img"),m=e.find(".label"),v=e.find(".time"),b=e.find(".size"),w=e.find(".content"),y=e.find(".folders"),x=e.find(".files"),k=e.find(".qrcode"),f.qrcode||k.rm(),o(p).appTo("#sidebar").find("#view-info").on("click",function(e){l.put(h,!l.get(h)),C(),a.pub("resize"),e.preventDefault()}),"boolean"!=typeof l.get(h)&&l.put(h,f.show),C(),a.sub("location.changed",E),a.sub("item.mouseenter",A),a.sub("item.mouseleave",T)}};M()}).call(t,function(){return this}())},function(e,t,n){var r,i,o;!function(t,n){e.exports=n()}(this,function(){return function(e){function t(r){if(n[r])return n[r].exports;var i=n[r]={exports:{},id:r,loaded:!1};return e[r].call(i.exports,i,i.exports,t),i.loaded=!0,i.exports}var n={};return t.m=e,t.c=n,t.p="",t(0)}([function(e,t,n){"use strict";var r=n(1),i=r.create_canvas,o=r.canvas_to_img,a=r.dpr,s=n(2),c=n(3),u=n(4);e.exports=function(e){var t=Object.assign({},s,e),n=c(t.text,t.ecLevel,t.minVersion,t.quiet),r=t.ratio||a,l=i(t.size,r),f=l.getContext("2d");return f.scale(r,r),u(n,f,t),"image"===t.render?o(l):l}},function(e,t){"use strict";var n=window,r=n.document,i=n.devicePixelRatio||1,o=function(e){return r.createElement(e)},a=function(e,t){return e.getAttribute(t)},s=function(e,t,n){return e.setAttribute(t,n)},c=function(e,t){var n=o("canvas");return s(n,"width",e*t),s(n,"height",e*t),n.style.width=e+"px",n.style.height=e+"px",n},u=function(e){var t=o("img");return s(t,"crossorigin","anonymous"),s(t,"src",e.toDataURL("image/png")),s(t,"width",a(e,"width")),s(t,"height",a(e,"height")),t.style.width=e.style.width,t.style.height=e.style.height,t};e.exports={create_canvas:c,canvas_to_img:u,dpr:i}},function(e,t){"use strict";e.exports={render:"image",crisp:!0,minVersion:1,ecLevel:"L",size:200,ratio:null,fill:"#333",back:"#fff",text:"no text",rounded:0,quiet:0,mode:"plain",mSize:30,mPosX:50,mPosY:50,label:"no label",fontname:"sans",fontcolor:"#333",image:null}},function(n,a){"use strict";var s="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},c=/code length overflow/i,u=function(){var n=function(){function e(t,n){if("undefined"==typeof t.length)throw new Error(t.length+"/"+n);var r=function(){for(var e=0;e<t.length&&0==t[e];)e+=1;for(var r=new Array(t.length-e+n),i=0;i<t.length-e;i+=1)r[i]=t[i+e];return r}(),i={};return i.getAt=function(e){return r[e]},i.getLength=function(){return r.length},i.multiply=function(t){for(var n=new Array(i.getLength()+t.getLength()-1),r=0;r<i.getLength();r+=1)for(var o=0;o<t.getLength();o+=1)n[r+o]^=a.gexp(a.glog(i.getAt(r))+a.glog(t.getAt(o)));return e(n,0)},i.mod=function(t){if(i.getLength()-t.getLength()<0)return i;for(var n=a.glog(i.getAt(0))-a.glog(t.getAt(0)),r=new Array(i.getLength()),o=0;o<i.getLength();o+=1)r[o]=i.getAt(o);for(var o=0;o<t.getLength();o+=1)r[o]^=a.gexp(a.glog(t.getAt(o))+n);return e(r,0).mod(t)},i}var t=function(t,n){var i=236,a=17,l=t,f=r[n],d=null,p=0,g=null,m=new Array,v={},b=function(e,t){p=4*l+17,d=function(e){for(var t=new Array(e),n=0;n<e;n+=1){t[n]=new Array(e);for(var r=0;r<e;r+=1)t[n][r]=null}return t}(p),w(0,0),w(p-7,0),w(0,p-7),k(),x(),C(e,t),l>=7&&_(e),null==g&&(g=T(l,f,m)),S(g,t)},w=function(e,t){for(var n=-1;n<=7;n+=1)if(!(e+n<=-1||p<=e+n))for(var r=-1;r<=7;r+=1)t+r<=-1||p<=t+r||(0<=n&&n<=6&&(0==r||6==r)||0<=r&&r<=6&&(0==n||6==n)||2<=n&&n<=4&&2<=r&&r<=4?d[e+n][t+r]=!0:d[e+n][t+r]=!1)},y=function(){for(var e=0,t=0,n=0;n<8;n+=1){b(!0,n);var r=o.getLostPoint(v);(0==n||e>r)&&(e=r,t=n)}return t},x=function(){for(var e=8;e<p-8;e+=1)null==d[e][6]&&(d[e][6]=e%2==0);for(var t=8;t<p-8;t+=1)null==d[6][t]&&(d[6][t]=t%2==0)},k=function(){for(var e=o.getPatternPosition(l),t=0;t<e.length;t+=1)for(var n=0;n<e.length;n+=1){var r=e[t],i=e[n];if(null==d[r][i])for(var a=-2;a<=2;a+=1)for(var s=-2;s<=2;s+=1)a==-2||2==a||s==-2||2==s||0==a&&0==s?d[r+a][i+s]=!0:d[r+a][i+s]=!1}},_=function(e){for(var t=o.getBCHTypeNumber(l),n=0;n<18;n+=1){var r=!e&&1==(t>>n&1);d[Math.floor(n/3)][n%3+p-8-3]=r}for(var n=0;n<18;n+=1){var r=!e&&1==(t>>n&1);d[n%3+p-8-3][Math.floor(n/3)]=r}},C=function(e,t){for(var n=f<<3|t,r=o.getBCHTypeInfo(n),i=0;i<15;i+=1){var a=!e&&1==(r>>i&1);i<6?d[i][8]=a:i<8?d[i+1][8]=a:d[p-15+i][8]=a}for(var i=0;i<15;i+=1){var a=!e&&1==(r>>i&1);i<8?d[8][p-i-1]=a:i<9?d[8][15-i-1+1]=a:d[8][15-i-1]=a}d[p-8][8]=!e},S=function(e,t){for(var n=-1,r=p-1,i=7,a=0,s=o.getMaskFunction(t),c=p-1;c>0;c-=2)for(6==c&&(c-=1);;){for(var u=0;u<2;u+=1)if(null==d[r][c-u]){var l=!1;a<e.length&&(l=1==(e[a]>>>i&1));var f=s(r,c-u);f&&(l=!l),d[r][c-u]=l,i-=1,i==-1&&(a+=1,i=7)}if(r+=n,r<0||p<=r){r-=n,n=-n;break}}},A=function(t,n){for(var r=0,i=0,a=0,s=new Array(n.length),c=new Array(n.length),u=0;u<n.length;u+=1){var l=n[u].dataCount,f=n[u].totalCount-l;i=Math.max(i,l),a=Math.max(a,f),s[u]=new Array(l);for(var d=0;d<s[u].length;d+=1)s[u][d]=255&t.getBuffer()[d+r];r+=l;var p=o.getErrorCorrectPolynomial(f),h=e(s[u],p.getLength()-1),g=h.mod(p);c[u]=new Array(p.getLength()-1);for(var d=0;d<c[u].length;d+=1){var m=d+g.getLength()-c[u].length;c[u][d]=m>=0?g.getAt(m):0}}for(var v=0,d=0;d<n.length;d+=1)v+=n[d].totalCount;for(var b=new Array(v),w=0,d=0;d<i;d+=1)for(var u=0;u<n.length;u+=1)d<s[u].length&&(b[w]=s[u][d],w+=1);for(var d=0;d<a;d+=1)for(var u=0;u<n.length;u+=1)d<c[u].length&&(b[w]=c[u][d],w+=1);return b},T=function(e,t,n){for(var r=s.getRSBlocks(e,t),u=c(),l=0;l<n.length;l+=1){var f=n[l];u.put(f.getMode(),4),u.put(f.getLength(),o.getLengthInBits(f.getMode(),e)),f.write(u)}for(var d=0,l=0;l<r.length;l+=1)d+=r[l].dataCount;if(u.getLengthInBits()>8*d)throw new Error("code length overflow. ("+u.getLengthInBits()+">"+8*d+")");for(u.getLengthInBits()+4<=8*d&&u.put(0,4);u.getLengthInBits()%8!=0;)u.putBit(!1);for(;!(u.getLengthInBits()>=8*d)&&(u.put(i,8),!(u.getLengthInBits()>=8*d));)u.put(a,8);return A(u,r)};return v.addData=function(e){var t=u(e);m.push(t),g=null},v.isDark=function(e,t){if(e<0||p<=e||t<0||p<=t)throw new Error(e+","+t);return d[e][t]},v.getModuleCount=function(){return p},v.make=function(){b(!1,y())},v.createTableTag=function(e,t){e=e||2,t="undefined"==typeof t?4*e:t;var n="";n+='<table style="',n+=" border-width: 0px; border-style: none;",n+=" border-collapse: collapse;",n+=" padding: 0px; margin: "+t+"px;",n+='">',n+="<tbody>";for(var r=0;r<v.getModuleCount();r+=1){n+="<tr>";for(var i=0;i<v.getModuleCount();i+=1)n+='<td style="',n+=" border-width: 0px; border-style: none;",n+=" border-collapse: collapse;",n+=" padding: 0px; margin: 0px;",n+=" width: "+e+"px;",n+=" height: "+e+"px;",n+=" background-color: ",n+=v.isDark(r,i)?"#000000":"#ffffff",n+=";",n+='"/>';n+="</tr>"}return n+="</tbody>",n+="</table>"},v.createImgTag=function(e,t){e=e||2,t="undefined"==typeof t?4*e:t;var n=v.getModuleCount()*e+2*t,r=t,i=n-t;return h(n,n,function(t,n){if(r<=t&&t<i&&r<=n&&n<i){var o=Math.floor((t-r)/e),a=Math.floor((n-r)/e);
-return v.isDark(a,o)?0:1}return 1})},v};t.stringToBytes=function(e){for(var t=new Array,n=0;n<e.length;n+=1){var r=e.charCodeAt(n);t.push(255&r)}return t},t.createStringToBytes=function(e,t){var n=function(){for(var n=d(e),r=function(){var e=n.read();if(e==-1)throw new Error;return e},i=0,o={};;){var a=n.read();if(a==-1)break;var s=r(),c=r(),u=r(),l=String.fromCharCode(a<<8|s),f=c<<8|u;o[l]=f,i+=1}if(i!=t)throw new Error(i+" != "+t);return o}(),r="?".charCodeAt(0);return function(e){for(var t=new Array,i=0;i<e.length;i+=1){var o=e.charCodeAt(i);if(o<128)t.push(o);else{var a=n[e.charAt(i)];"number"==typeof a?(255&a)==a?t.push(a):(t.push(a>>>8),t.push(255&a)):t.push(r)}}return t}};var n={MODE_NUMBER:1,MODE_ALPHA_NUM:2,MODE_8BIT_BYTE:4,MODE_KANJI:8},r={L:1,M:0,Q:3,H:2},i={PATTERN000:0,PATTERN001:1,PATTERN010:2,PATTERN011:3,PATTERN100:4,PATTERN101:5,PATTERN110:6,PATTERN111:7},o=function(){var t=[[],[6,18],[6,22],[6,26],[6,30],[6,34],[6,22,38],[6,24,42],[6,26,46],[6,28,50],[6,30,54],[6,32,58],[6,34,62],[6,26,46,66],[6,26,48,70],[6,26,50,74],[6,30,54,78],[6,30,56,82],[6,30,58,86],[6,34,62,90],[6,28,50,72,94],[6,26,50,74,98],[6,30,54,78,102],[6,28,54,80,106],[6,32,58,84,110],[6,30,58,86,114],[6,34,62,90,118],[6,26,50,74,98,122],[6,30,54,78,102,126],[6,26,52,78,104,130],[6,30,56,82,108,134],[6,34,60,86,112,138],[6,30,58,86,114,142],[6,34,62,90,118,146],[6,30,54,78,102,126,150],[6,24,50,76,102,128,154],[6,28,54,80,106,132,158],[6,32,58,84,110,136,162],[6,26,54,82,110,138,166],[6,30,58,86,114,142,170]],r=1335,o=7973,s=21522,c={},u=function(e){for(var t=0;0!=e;)t+=1,e>>>=1;return t};return c.getBCHTypeInfo=function(e){for(var t=e<<10;u(t)-u(r)>=0;)t^=r<<u(t)-u(r);return(e<<10|t)^s},c.getBCHTypeNumber=function(e){for(var t=e<<12;u(t)-u(o)>=0;)t^=o<<u(t)-u(o);return e<<12|t},c.getPatternPosition=function(e){return t[e-1]},c.getMaskFunction=function(e){switch(e){case i.PATTERN000:return function(e,t){return(e+t)%2==0};case i.PATTERN001:return function(e,t){return e%2==0};case i.PATTERN010:return function(e,t){return t%3==0};case i.PATTERN011:return function(e,t){return(e+t)%3==0};case i.PATTERN100:return function(e,t){return(Math.floor(e/2)+Math.floor(t/3))%2==0};case i.PATTERN101:return function(e,t){return e*t%2+e*t%3==0};case i.PATTERN110:return function(e,t){return(e*t%2+e*t%3)%2==0};case i.PATTERN111:return function(e,t){return(e*t%3+(e+t)%2)%2==0};default:throw new Error("bad maskPattern:"+e)}},c.getErrorCorrectPolynomial=function(t){for(var n=e([1],0),r=0;r<t;r+=1)n=n.multiply(e([1,a.gexp(r)],0));return n},c.getLengthInBits=function(e,t){if(1<=t&&t<10)switch(e){case n.MODE_NUMBER:return 10;case n.MODE_ALPHA_NUM:return 9;case n.MODE_8BIT_BYTE:return 8;case n.MODE_KANJI:return 8;default:throw new Error("mode:"+e)}else if(t<27)switch(e){case n.MODE_NUMBER:return 12;case n.MODE_ALPHA_NUM:return 11;case n.MODE_8BIT_BYTE:return 16;case n.MODE_KANJI:return 10;default:throw new Error("mode:"+e)}else{if(!(t<41))throw new Error("type:"+t);switch(e){case n.MODE_NUMBER:return 14;case n.MODE_ALPHA_NUM:return 13;case n.MODE_8BIT_BYTE:return 16;case n.MODE_KANJI:return 12;default:throw new Error("mode:"+e)}}},c.getLostPoint=function(e){for(var t=e.getModuleCount(),n=0,r=0;r<t;r+=1)for(var i=0;i<t;i+=1){for(var o=0,a=e.isDark(r,i),s=-1;s<=1;s+=1)if(!(r+s<0||t<=r+s))for(var c=-1;c<=1;c+=1)i+c<0||t<=i+c||0==s&&0==c||a==e.isDark(r+s,i+c)&&(o+=1);o>5&&(n+=3+o-5)}for(var r=0;r<t-1;r+=1)for(var i=0;i<t-1;i+=1){var u=0;e.isDark(r,i)&&(u+=1),e.isDark(r+1,i)&&(u+=1),e.isDark(r,i+1)&&(u+=1),e.isDark(r+1,i+1)&&(u+=1),0!=u&&4!=u||(n+=3)}for(var r=0;r<t;r+=1)for(var i=0;i<t-6;i+=1)e.isDark(r,i)&&!e.isDark(r,i+1)&&e.isDark(r,i+2)&&e.isDark(r,i+3)&&e.isDark(r,i+4)&&!e.isDark(r,i+5)&&e.isDark(r,i+6)&&(n+=40);for(var i=0;i<t;i+=1)for(var r=0;r<t-6;r+=1)e.isDark(r,i)&&!e.isDark(r+1,i)&&e.isDark(r+2,i)&&e.isDark(r+3,i)&&e.isDark(r+4,i)&&!e.isDark(r+5,i)&&e.isDark(r+6,i)&&(n+=40);for(var l=0,i=0;i<t;i+=1)for(var r=0;r<t;r+=1)e.isDark(r,i)&&(l+=1);var f=Math.abs(100*l/t/t-50)/5;return n+=10*f},c}(),a=function(){for(var e=new Array(256),t=new Array(256),n=0;n<8;n+=1)e[n]=1<<n;for(var n=8;n<256;n+=1)e[n]=e[n-4]^e[n-5]^e[n-6]^e[n-8];for(var n=0;n<255;n+=1)t[e[n]]=n;var r={};return r.glog=function(e){if(e<1)throw new Error("glog("+e+")");return t[e]},r.gexp=function(t){for(;t<0;)t+=255;for(;t>=256;)t-=255;return e[t]},r}(),s=function(){var e=[[1,26,19],[1,26,16],[1,26,13],[1,26,9],[1,44,34],[1,44,28],[1,44,22],[1,44,16],[1,70,55],[1,70,44],[2,35,17],[2,35,13],[1,100,80],[2,50,32],[2,50,24],[4,25,9],[1,134,108],[2,67,43],[2,33,15,2,34,16],[2,33,11,2,34,12],[2,86,68],[4,43,27],[4,43,19],[4,43,15],[2,98,78],[4,49,31],[2,32,14,4,33,15],[4,39,13,1,40,14],[2,121,97],[2,60,38,2,61,39],[4,40,18,2,41,19],[4,40,14,2,41,15],[2,146,116],[3,58,36,2,59,37],[4,36,16,4,37,17],[4,36,12,4,37,13],[2,86,68,2,87,69],[4,69,43,1,70,44],[6,43,19,2,44,20],[6,43,15,2,44,16],[4,101,81],[1,80,50,4,81,51],[4,50,22,4,51,23],[3,36,12,8,37,13],[2,116,92,2,117,93],[6,58,36,2,59,37],[4,46,20,6,47,21],[7,42,14,4,43,15],[4,133,107],[8,59,37,1,60,38],[8,44,20,4,45,21],[12,33,11,4,34,12],[3,145,115,1,146,116],[4,64,40,5,65,41],[11,36,16,5,37,17],[11,36,12,5,37,13],[5,109,87,1,110,88],[5,65,41,5,66,42],[5,54,24,7,55,25],[11,36,12,7,37,13],[5,122,98,1,123,99],[7,73,45,3,74,46],[15,43,19,2,44,20],[3,45,15,13,46,16],[1,135,107,5,136,108],[10,74,46,1,75,47],[1,50,22,15,51,23],[2,42,14,17,43,15],[5,150,120,1,151,121],[9,69,43,4,70,44],[17,50,22,1,51,23],[2,42,14,19,43,15],[3,141,113,4,142,114],[3,70,44,11,71,45],[17,47,21,4,48,22],[9,39,13,16,40,14],[3,135,107,5,136,108],[3,67,41,13,68,42],[15,54,24,5,55,25],[15,43,15,10,44,16],[4,144,116,4,145,117],[17,68,42],[17,50,22,6,51,23],[19,46,16,6,47,17],[2,139,111,7,140,112],[17,74,46],[7,54,24,16,55,25],[34,37,13],[4,151,121,5,152,122],[4,75,47,14,76,48],[11,54,24,14,55,25],[16,45,15,14,46,16],[6,147,117,4,148,118],[6,73,45,14,74,46],[11,54,24,16,55,25],[30,46,16,2,47,17],[8,132,106,4,133,107],[8,75,47,13,76,48],[7,54,24,22,55,25],[22,45,15,13,46,16],[10,142,114,2,143,115],[19,74,46,4,75,47],[28,50,22,6,51,23],[33,46,16,4,47,17],[8,152,122,4,153,123],[22,73,45,3,74,46],[8,53,23,26,54,24],[12,45,15,28,46,16],[3,147,117,10,148,118],[3,73,45,23,74,46],[4,54,24,31,55,25],[11,45,15,31,46,16],[7,146,116,7,147,117],[21,73,45,7,74,46],[1,53,23,37,54,24],[19,45,15,26,46,16],[5,145,115,10,146,116],[19,75,47,10,76,48],[15,54,24,25,55,25],[23,45,15,25,46,16],[13,145,115,3,146,116],[2,74,46,29,75,47],[42,54,24,1,55,25],[23,45,15,28,46,16],[17,145,115],[10,74,46,23,75,47],[10,54,24,35,55,25],[19,45,15,35,46,16],[17,145,115,1,146,116],[14,74,46,21,75,47],[29,54,24,19,55,25],[11,45,15,46,46,16],[13,145,115,6,146,116],[14,74,46,23,75,47],[44,54,24,7,55,25],[59,46,16,1,47,17],[12,151,121,7,152,122],[12,75,47,26,76,48],[39,54,24,14,55,25],[22,45,15,41,46,16],[6,151,121,14,152,122],[6,75,47,34,76,48],[46,54,24,10,55,25],[2,45,15,64,46,16],[17,152,122,4,153,123],[29,74,46,14,75,47],[49,54,24,10,55,25],[24,45,15,46,46,16],[4,152,122,18,153,123],[13,74,46,32,75,47],[48,54,24,14,55,25],[42,45,15,32,46,16],[20,147,117,4,148,118],[40,75,47,7,76,48],[43,54,24,22,55,25],[10,45,15,67,46,16],[19,148,118,6,149,119],[18,75,47,31,76,48],[34,54,24,34,55,25],[20,45,15,61,46,16]],t=function(e,t){var n={};return n.totalCount=e,n.dataCount=t,n},n={},i=function(t,n){switch(n){case r.L:return e[4*(t-1)+0];case r.M:return e[4*(t-1)+1];case r.Q:return e[4*(t-1)+2];case r.H:return e[4*(t-1)+3];default:return}};return n.getRSBlocks=function(e,n){var r=i(e,n);if("undefined"==typeof r)throw new Error("bad rs block @ typeNumber:"+e+"/errorCorrectLevel:"+n);for(var o=r.length/3,a=new Array,s=0;s<o;s+=1)for(var c=r[3*s+0],u=r[3*s+1],l=r[3*s+2],f=0;f<c;f+=1)a.push(t(u,l));return a},n}(),c=function(){var e=new Array,t=0,n={};return n.getBuffer=function(){return e},n.getAt=function(t){var n=Math.floor(t/8);return 1==(e[n]>>>7-t%8&1)},n.put=function(e,t){for(var r=0;r<t;r+=1)n.putBit(1==(e>>>t-r-1&1))},n.getLengthInBits=function(){return t},n.putBit=function(n){var r=Math.floor(t/8);e.length<=r&&e.push(0),n&&(e[r]|=128>>>t%8),t+=1},n},u=function(e){var r=n.MODE_8BIT_BYTE,i=t.stringToBytes(e),o={};return o.getMode=function(){return r},o.getLength=function(e){return i.length},o.write=function(e){for(var t=0;t<i.length;t+=1)e.put(i[t],8)},o},l=function(){var e=new Array,t={};return t.writeByte=function(t){e.push(255&t)},t.writeShort=function(e){t.writeByte(e),t.writeByte(e>>>8)},t.writeBytes=function(e,n,r){n=n||0,r=r||e.length;for(var i=0;i<r;i+=1)t.writeByte(e[i+n])},t.writeString=function(e){for(var n=0;n<e.length;n+=1)t.writeByte(e.charCodeAt(n))},t.toByteArray=function(){return e},t.toString=function(){var t="";t+="[";for(var n=0;n<e.length;n+=1)n>0&&(t+=","),t+=e[n];return t+="]"},t},f=function(){var e=0,t=0,n=0,r="",i={},o=function(e){r+=String.fromCharCode(a(63&e))},a=function(e){if(e<0);else{if(e<26)return 65+e;if(e<52)return 97+(e-26);if(e<62)return 48+(e-52);if(62==e)return 43;if(63==e)return 47}throw new Error("n:"+e)};return i.writeByte=function(r){for(e=e<<8|255&r,t+=8,n+=1;t>=6;)o(e>>>t-6),t-=6},i.flush=function(){if(t>0&&(o(e<<6-t),e=0,t=0),n%3!=0)for(var i=3-n%3,a=0;a<i;a+=1)r+="="},i.toString=function(){return r},i},d=function(e){var t=e,n=0,r=0,i=0,o={};o.read=function(){for(;i<8;){if(n>=t.length){if(0==i)return-1;throw new Error("unexpected end of file./"+i)}var e=t.charAt(n);if(n+=1,"="==e)return i=0,-1;e.match(/^\s$/)||(r=r<<6|a(e.charCodeAt(0)),i+=6)}var o=r>>>i-8&255;return i-=8,o};var a=function(e){if(65<=e&&e<=90)return e-65;if(97<=e&&e<=122)return e-97+26;if(48<=e&&e<=57)return e-48+52;if(43==e)return 62;if(47==e)return 63;throw new Error("c:"+e)};return o},p=function(e,t){var n=e,r=t,i=new Array(e*t),o={};o.setPixel=function(e,t,r){i[t*n+e]=r},o.write=function(e){e.writeString("GIF87a"),e.writeShort(n),e.writeShort(r),e.writeByte(128),e.writeByte(0),e.writeByte(0),e.writeByte(0),e.writeByte(0),e.writeByte(0),e.writeByte(255),e.writeByte(255),e.writeByte(255),e.writeString(","),e.writeShort(0),e.writeShort(0),e.writeShort(n),e.writeShort(r),e.writeByte(0);var t=2,i=s(t);e.writeByte(t);for(var o=0;i.length-o>255;)e.writeByte(255),e.writeBytes(i,o,255),o+=255;e.writeByte(i.length-o),e.writeBytes(i,o,i.length-o),e.writeByte(0),e.writeString(";")};var a=function(e){var t=e,n=0,r=0,i={};return i.write=function(e,i){if(e>>>i!=0)throw new Error("length over");for(;n+i>=8;)t.writeByte(255&(e<<n|r)),i-=8-n,e>>>=8-n,r=0,n=0;r|=e<<n,n+=i},i.flush=function(){n>0&&t.writeByte(r)},i},s=function(e){for(var t=1<<e,n=(1<<e)+1,r=e+1,o=c(),s=0;s<t;s+=1)o.add(String.fromCharCode(s));o.add(String.fromCharCode(t)),o.add(String.fromCharCode(n));var u=l(),f=a(u);f.write(t,r);var d=0,p=String.fromCharCode(i[d]);for(d+=1;d<i.length;){var h=String.fromCharCode(i[d]);d+=1,o.contains(p+h)?p+=h:(f.write(o.indexOf(p),r),o.size()<4095&&(o.size()==1<<r&&(r+=1),o.add(p+h)),p=h)}return f.write(o.indexOf(p),r),f.write(n,r),f.flush(),u.toByteArray()},c=function(){var e={},t=0,n={};return n.add=function(r){if(n.contains(r))throw new Error("dup key:"+r);e[r]=t,t+=1},n.size=function(){return t},n.indexOf=function(t){return e[t]},n.contains=function(t){return"undefined"!=typeof e[t]},n};return o},h=function(e,t,n,r){for(var i=p(e,t),o=0;o<t;o+=1)for(var a=0;a<e;a+=1)i.setPixel(a,o,n(a,o));var s=l();i.write(s);for(var c=f(),u=s.toByteArray(),d=0;d<u.length;d+=1)c.writeByte(u[d]);c.flush();var h="";return h+="<img",h+=' src="',h+="data:image/gif;base64,",h+=c,h+='"',h+=' width="',h+=e,h+='"',h+=' height="',h+=t,h+='"',r&&(h+=' alt="',h+=r,h+='"'),h+="/>"};return t}();return function(n){i=[],r=n,o="function"==typeof r?r.apply(t,i):r,!(void 0!==o&&(e.exports=o))}(function(){return n}),!function(e){e.stringToBytes=function(e){function t(e){for(var t=[],n=0;n<e.length;n++){var r=e.charCodeAt(n);r<128?t.push(r):r<2048?t.push(192|r>>6,128|63&r):r<55296||r>=57344?t.push(224|r>>12,128|r>>6&63,128|63&r):(n++,r=65536+((1023&r)<<10|1023&e.charCodeAt(n)),t.push(240|r>>18,128|r>>12&63,128|r>>6&63,128|63&r))}return t}return t(e)}}(n),n}(),l=function(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:1;n=Math.max(1,n);for(var r=n;r<=40;r+=1)try{var i=function(){var n=u(r,t);n.addData(e),n.make();var i=n.getModuleCount(),o=function(e,t){return e>=0&&e<i&&t>=0&&t<i&&n.isDark(e,t)};return{v:{text:e,level:t,version:r,moduleCount:i,isDark:o}}}();if("object"===("undefined"==typeof i?"undefined":s(i)))return i.v}catch(e){if(!(r<40&&c.test(e.message)))throw e}return null},f=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"L",n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:1,r=arguments.length>3&&void 0!==arguments[3]?arguments[3]:0,i=l(e,t,n);if(i){var o=i.isDark;i.moduleCount+=2*r,i.isDark=function(e,t){return o(e-r,t-r)}}return i};n.exports=f},function(e,t,n){"use strict";var r=n(5),i=n(6),o=function(e,t){e.fillStyle=t.back,e.fillRect(0,0,t.size,t.size)},a=function(e,t,n,r,i,o){e.isDark(i,o)&&t.rect(o*r,i*r,r,r)},s=function(e,t,n){if(e){var i=n.rounded>0&&n.rounded<=100?r:a,o=e.moduleCount,s=n.size/o,c=0;n.crisp&&(s=Math.floor(s),c=Math.floor((n.size-s*o)/2)),t.translate(c,c),t.beginPath();for(var u=0;u<o;u+=1)for(var l=0;l<o;l+=1)i(e,t,n,s,u,l);t.fillStyle=n.fill,t.fill(),t.translate(-c,-c)}},c=function(e,t,n){o(t,n),s(e,t,n),i(t,n)};e.exports=c},function(e,t){"use strict";var n=function(e){return{c:e,m:function(){var e;return(e=this.c).moveTo.apply(e,arguments),this},l:function(){var e;return(e=this.c).lineTo.apply(e,arguments),this},a:function(){var e;return(e=this.c).arcTo.apply(e,arguments),this}}},r=function(e,t,n,r,i,o,a,s,c,u){a?e.m(t+o,n):e.m(t,n),s?e.l(r-o,n).a(r,n,r,i,o):e.l(r,n),c?e.l(r,i-o).a(r,i,t,i,o):e.l(r,i),u?e.l(t+o,i).a(t,i,t,n,o):e.l(t,i),a?e.l(t,n+o).a(t,n,r,n,o):e.l(t,n)},i=function(e,t,n,r,i,o,a,s,c,u){a&&e.m(t+o,n).l(t,n).l(t,n+o).a(t,n,t+o,n,o),s&&e.m(r-o,n).l(r,n).l(r,n+o).a(r,n,r-o,n,o),c&&e.m(r-o,i).l(r,i).l(r,i-o).a(r,i,r-o,i,o),u&&e.m(t+o,i).l(t,i).l(t,i-o).a(t,i,t+o,i,o)},o=function(e,t,o,a,s,c){var u=c*a,l=s*a,f=u+a,d=l+a,p=.005*o.rounded*a,h=e.isDark,g=s-1,m=s+1,v=c-1,b=c+1,w=h(s,c),y=h(g,v),x=h(g,c),k=h(g,b),_=h(s,b),C=h(m,b),S=h(m,c),A=h(m,v),T=h(s,v);t=n(t),w?r(t,u,l,f,d,p,!x&&!T,!x&&!_,!S&&!_,!S&&!T):i(t,u,l,f,d,p,x&&T&&y,x&&_&&k,S&&_&&C,S&&T&&A)};e.exports=o},function(e,t){"use strict";var n=function(e,t){var n=t.size,r="bold "+.01*t.mSize*n+"px "+t.fontname;e.strokeStyle=t.back,e.lineWidth=.01*t.mSize*n*.1,e.fillStyle=t.fontcolor,e.font=r;var i=e.measureText(t.label).width,o=.01*t.mSize,a=i/n,s=(1-a)*t.mPosX*.01,c=(1-o)*t.mPosY*.01,u=s*n,l=c*n+.75*t.mSize*.01*n;e.strokeText(t.label,u,l),e.fillText(t.label,u,l)},r=function(e,t){var n=t.size,r=t.image.naturalWidth||1,i=t.image.naturalHeight||1,o=.01*t.mSize,a=o*r/i,s=(1-a)*t.mPosX*.01,c=(1-o)*t.mPosY*.01,u=s*n,l=c*n,f=a*n,d=o*n;e.draw_image(t.image,u,l,f,d)},i=function(e,t){var i=t.mode;"label"===i?n(e,t):"image"===i&&r(e,t)};e.exports=i}])})},function(e,t,n){(function(e){"use strict";var t=n(2),r=t.each,i=t.isStr,o=t.dom,a=n(8),s=n(12),c=n(19),u=n(35),l=n(14),f=n(16),d=e.window,p=Object.assign({enabled:!1,lang:"en",useBrowserLang:!0},l.l10n),h={isoCode:"en",lang:"english",dateFormat:"YYYY-MM-DD HH:mm",details:"details",download:"download",empty:"empty",files:"files",filter:"filter",folders:"folders",grid:"grid",icons:"icons",language:"Language",lastModified:"Last modified",name:"Name",noMatch:"no match",parentDirectory:"Parent Directory",search:"search",size:"Size",tree:"Tree",view:"View"},g='<div class="block">\n <h1 class="l10n-language">Language</h1>\n <div class="select">\n <select id="langs"/>\n </div>\n </div>',m="<option/>",v="ext/l10n",b={en:Object.assign({},h)},w=b.en,y=function(e){e&&(w=e);var t="selected";o("#langs option").rmAttr(t).rmProp(t),o("#langs ."+w.isoCode).attr(t,"").prop(t,!0),r(w,function(e,t){o(".l10n-"+t).text(e),o(".l10n_ph-"+t).attr("placeholder",e)}),c.setDefaultDateFormat(w.dateFormat),o("#items .item").each(function(e){o(e).find(".date").text(c.formatDate(e._item.time))})},x=function(e){return b[e]?Promise.resolve(b[e]):a.request({action:"get",l10n:[e]}).then(function(t){return b[e]=Object.assign({},h,t.l10n&&t.l10n[e],{isoCode:e}),b[e]})},k=function(e,t,n){var r=f.get(v);if(e[r])t=r;else if(n){var i=d.navigator.language||d.navigator.browserLanguage;i&&(e[i]?t=i:i.length>2&&e[i.substr(0,2)]&&(t=i.substr(0,2)))}e[t]||(t="en"),x(t).then(y)},_=function(e){var t=o(g),n=t.find("select").on("change",function(t){var n=t.target.value;f.put(v,n),k(e,n,!1)});r(e,function(e,t){o(m).attr("value",t).addCls(t).text(t+" - "+(i(e)?e:e.lang)).appTo(n)}),t.appTo("#sidebar")},C=function(){p.enabled&&_(u),s.sub("view.changed",function(){k(u,p.lang,p.useBrowserLang)})};C()}).call(t,function(){return this}())},function(e,t,n){"use strict";var r=n(7),i=r.langs;e.exports=Object.assign({},i)},function(e,t,n){(function(e){"use strict";var t=n(2),r=t.dom,i=t.awaitLoad,o=n(12),a=n(14),s=e.window,c=Object.assign({enabled:!1,baseURL:"not-set",idSite:0},a["piwik-analytics"]),u=function(){if(c.enabled){var e=("https:"===s.location.protocol?"https://":"http://")+c.baseURL+"/",t=[],n=null;r("<script></script>").attr("src",e+"piwik.js").appTo("body"),i().then(function(){if(n=s.Piwik&&s.Piwik.getTracker(e+"piwik.php",c.idSite))for(n.enableLinkTracking();t.length;)n.trackPageView(t.shift())}),o.sub("location.changed",function(e){var r=e.getCrumb().map(function(e){return e.label}).join(" > ");n?n.trackPageView(r):t.push(r)})}};u()}).call(t,function(){return this}())},function(e,t,n){"use strict";n(38),n(39),n(40),n(41),n(43)},function(e,t,n){(function(t){"use strict";var r=n(2),i=r.each,o=r.isFn,a=r.dom,s=r.includes,c=r.compact,u=n(12),l=n(13),f=n(14),d=n(16),p=t.window,h=Object.assign({enabled:!0},f.preview),g='<div id="pv-overlay">\n <div id="pv-container"></div>\n <div id="pv-spinner"><img class="back"/><img class="spinner" src="'+l.image("spinner")+'"/></div>\n <div id="pv-prev-area" class="hof"><img src="'+l.image("preview-prev")+'"/></div>\n <div id="pv-next-area" class="hof"><img src="'+l.image("preview-next")+'"/></div>\n <div id="pv-bottombar" class="clearfix hof">\n <ul id="pv-buttons">\n <li id="pv-bar-close" class="bar-right bar-button"><img src="'+l.image("preview-close")+'"/></li>\n <li id="pv-bar-raw" class="bar-right"><a class="bar-button" target="_blank"><img src="'+l.image("preview-raw")+'"/></a></li>\n <li id="pv-bar-fullscreen" class="bar-right bar-button"><img src="'+l.image("preview-fullscreen")+'"/></li>\n <li id="pv-bar-next" class="bar-right bar-button"><img src="'+l.image("preview-next")+'"/></li>\n <li id="pv-bar-idx" class="bar-right bar-label"></li>\n <li id="pv-bar-prev" class="bar-right bar-button"><img src="'+l.image("preview-prev")+'"/></li>\n </ul>\n </div>\n </div>',m="ext/preview",v=d.get(m)||!1,b=null,w=!1,y=null,x=null,k=function(){var e=a("#pv-container"),t=e[0],n=e.children()[0];if(t&&n){var r=t.offsetWidth,i=t.offsetHeight,o=n.offsetWidth,s=n.offsetHeight;a(n).css({left:.5*(r-o)+"px",top:.5*(i-s)+"px"})}},_=function(){var e=p.document.documentElement,t=e.clientWidth,n=e.clientHeight,r=v?0:20,i=v?0:48;a("#pv-container").css({width:t-2*r+"px",height:n-2*r-i+"px",left:r+"px",top:r+"px"}),a("#pv-spinner").css({left:.5*t+"px",top:.5*n+"px"}),v?(a("#pv-overlay").addCls("fullscreen"),a("#pv-bar-fullscreen").find("img").attr("src",l.image("preview-no-fullscreen"))):(a("#pv-overlay").rmCls("fullscreen"),a("#pv-bar-fullscreen").find("img").attr("src",l.image("preview-fullscreen"))),k(),o(x&&x.adjust)&&x.adjust()},C=function(e,t){a("#pv-bar-idx").text(e+"/"+t).show()},S=function(e){a("#pv-bar-raw").show().find("a").attr("href",e)},A=function(e){a("#pv-buttons .bar-left").rm(),i(e,function(e){a("<li></li>").addCls("bar-left").addCls("bar-label").text(e).appTo("#pv-buttons")})},T=function(){var e=a("#pv-overlay .hof");p.clearTimeout(b),e.show(),v&&(b=p.setTimeout(function(){return e.hide()},2e3))},E=function(){return x&&x.moveIdx(1)},M=function(){return x&&x.moveIdx(-1)},D=function(){v=!v,d.put(m,v),T(),_()},P=function(e){e.stopPropagation(),e.preventDefault()},z=function(e){var t=e.keyCode;27===t?(P(e),$()):8===t||37===t?(P(e),M()):13===t||32===t||39===t?(P(e),E()):70===t&&(P(e),D())},L=function(){A([]),a("#pv-container").clr(),a("#pv-overlay").show(),a(p).on("keydown",z),_()},$=function(){A([]),a("#pv-container").clr(),a("#pv-overlay").hide(),a(p).off("keydown",z)},H=function e(t,n,r){p.clearTimeout(y);var i=a("#pv-spinner");if(!t)return w=!1,void i.hide();if(!w&&r)return void(y=p.setTimeout(function(){return e(!0,n)},r));var o=i.find(".back");n?o.attr("src",n).show():o.hide(),w=!0,i.show()},O=function e(t,n,r,i){var o=Object.assign(Object.create(e.prototype),{items:t,load:r,adjust:i});return o.setIdx(n),o};O.prototype={setIdx:function(e){var t=this;this.idx=(e+this.items.length)%this.items.length,this.item=this.items[this.idx],C(this.idx+1,this.items.length),S(this.item.absHref),A([this.item.label]);var n=this.item;Promise.resolve().then(function(){i(a("#pv-container *"),function(e){"function"==typeof e.unload&&e.unload()}),a("#pv-container").hide().clr(),H(!0,n.thumbSquare||n.icon,200)}).then(function(){return t.load(n)}).then(function(e){n===t.item&&(a("#pv-container").clr().app(e).show(),H(!1),_())})},moveIdx:function(e){this.setIdx(this.idx+e)}};var B=function(e,t,n){var r=function(r){r.$view&&s(e,r.type)&&r.$view.find("a").on("click",function(i){i.preventDefault();var o=c(a("#items .item").map(function(t){var n=t._item;return s(e,n.type)?n:null}));x=O(o,o.indexOf(r),t,n),L()})};u.sub("view.changed",function(e){return i(e,r)})},R=function(){h.enabled&&(a(g).hide().appTo("body").on("keydown",z).on("mousemove",T).on("mousedown",T).on("click",function(e){"pv-overlay"!==e.target.id&&"pv-container"!==e.target.id||$()}).on("mousedown",P).on("mousemove",P).on("keydown",P).on("keypress",P),a("#pv-spinner").hide(),a("#pv-bar-prev, #pv-prev-area").on("click",M),a("#pv-bar-next, #pv-next-area").on("click",E),a("#pv-bar-close").on("click",$),a("#pv-bar-fullscreen").on("click",D),a(p).on("resize",_).on("load",_))};e.exports={setLabels:A,register:B,get item(){return x&&x.item}},R()}).call(t,function(){return this}())},function(e,t,n){"use strict";var r=n(2),i=r.dom,o=n(19),a=n(14),s=n(38),c=Object.assign({enabled:!1,autoplay:!0,types:[]},a["preview-aud"]),u='<audio id="pv-content-aud"/>',l=function(){var e=i("#pv-content-aud")[0];e&&s.setLabels([s.item.label,o.formatDate(1e3*e.duration,"m:ss")])},f=function(e){e.unload=function(){e.src="",e.load()}},d=function(e){return new Promise(function(t){var n=i(u).on("loadedmetadata",function(){return t(n)}).attr("controls","controls");c.autoplay&&n.attr("autoplay","autoplay"),f(n[0]),n.attr("src",e.absHref)})},p=function(){c.enabled&&s.register(c.types,d,l)};p()},function(e,t,n){"use strict";var r=n(2),i=r.dom,o=n(8),a=n(14),s=n(38),c=Object.assign({enabled:!1,size:null,types:[]},a["preview-img"]),u='<img id="pv-content-img"/>',l=function(){var e=i("#pv-content-img")[0];if(e){var t=e.offsetWidth,n=[s.item.label];if(!c.size){var r=e.naturalWidth,o=e.naturalHeight;n.push(String(r)+"x"+String(o)),n.push(String((100*t/r).toFixed(0))+"%")}s.setLabels(n)}},f=function(e){return o.request({action:"get",thumbs:[{type:"img",href:e,width:c.size,height:0}]}).then(function(e){return e&&e.thumbs&&e.thumbs[0]?e.thumbs[0]:null})},d=function(e){return Promise.resolve(e.absHref).then(function(e){return c.size?f(e):e}).then(function(e){return new Promise(function(t){var n=i(u).on("load",function(){return t(n)}).attr("src",e)})})},p=function(){c.enabled&&s.register(c.types,d,l)};p()},function(e,t,n){(function(e){"use strict";var t=n(42),r=n(28),i=n(2),o=i.keys,a=i.dom,s=n(14),c=n(38),u=e.window,l=u.XMLHttpRequest,f=Object.assign({enabled:!1,styles:{}},s["preview-txt"]),d='<pre id="pv-content-txt"></pre>',p='<div id="pv-content-txt"></div>',h=function(){var e=a("#pv-content-txt")[0];if(e){var t=a("#pv-container")[0];e.style.height=t.offsetHeight+"px",c.setLabels([c.item.label,c.item.size+" bytes"])}},g=function(e){return new Promise(function(t,n){var r=new l,i=function(){if(r.readyState===l.DONE)try{t(r.responseText||"")}catch(e){n(String(e))}};r.open("GET",e,!0),r.onreadystatechange=i,r.send()})},m=function(e){return g(e.absHref).catch(function(e){return"[request failed] "+e}).then(function(n){var i=f.styles[e.type];if(1===i)return a(d).text(n);if(2===i)return a(p).html(r(n));if(3===i){var o=a("<code></code>").text(n);return u.setTimeout(function(){t.el(o[0])},n.length<2e4?0:500),a(d).app(o)}return a(p).text(n)})},v=function(){f.enabled&&c.register(o(f.styles),m,h)};v()}).call(t,function(){return this}())},function(e,t,n){!function(t,n){e.exports=n()}(this,function(){var e=".lolight",t="ll-",n="_nam#2196f3}_num#ec407a}_str#43a047}_rex#ef6c00}_pct#666}_key#555;font-weight:bold}_com#aaa;font-style:italic}".replace(/_/g,"."+t).replace(/#/g,"{color:#"),r=/^(a(bstract|lias|nd|rguments|rray|s(m|sert)?|uto)|b(ase|egin|ool(ean)?|reak|yte)|c(ase|atch|har|hecked|lass|lone|ompl|onst|ontinue)|de(bugger|cimal|clare|f(ault|er)?|init|l(egate|ete)?)|do|double|e(cho|ls?if|lse(if)?|nd|nsure|num|vent|x(cept|ec|p(licit|ort)|te(nds|nsion|rn)))|f(allthrough|alse|inal(ly)?|ixed|loat|or(each)?|riend|rom|unc(tion)?)|global|goto|guard|i(f|mp(lements|licit|ort)|n(it|clude(_once)?|line|out|stanceof|t(erface|ernal)?)?|s)|l(ambda|et|ock|ong)|m(odule|utable)|NaN|n(amespace|ative|ext|ew|il|ot|ull)|o(bject|perator|r|ut|verride)|p(ackage|arams|rivate|rotected|rotocol|ublic)|r(aise|e(adonly|do|f|gister|peat|quire(_once)?|scue|strict|try|turn))|s(byte|ealed|elf|hort|igned|izeof|tatic|tring|truct|ubscript|uper|ynchronized|witch)|t(emplate|hen|his|hrows?|ransient|rue|ry|ype(alias|def|id|name|of))|u(n(checked|def(ined)?|ion|less|signed|til)|se|sing)|v(ar|irtual|oid|olatile)|w(char_t|hen|here|hile|ith)|xor|yield)$/,i="com",o="key",a="nam",s="num",c="pct",u="rex",l="spc",f="str",d="unk",p=[[s,/#([0-9a-f]{6}|[0-9a-f]{3})\b/],[i,/(\/\/|#).*?(?=\n|$)/],[i,/\/\*[\s\S]*?\*\//],[i,/<!--[\s\S]*?-->/],[u,/\/(\\\/|[^\n])*?\//],[f,/(['"`])(\\\1|[\s\S])*?\1/],[s,/[+-]?([0-9]*\.?[0-9]+|[0-9]+\.?[0-9]*)([eE][+-]?[0-9]+)?/],[c,/[\\.,:;+\-*\/=<>()[\]{}|?!&(a)~]/],[l,/\s+/],[a,/[\w$]+/],[d,/./]],h=function(e){if("string"!=typeof e)throw new Error("tok: no string");for(var t=[],n=p.length,i=!1;e;)for(var c=0;c<n;c+=1){var f=p[c][1].exec(e);if(f&&0===f.index){var d=p[c][0];if(d!==u||!i){var h=f[0];d===a&&r.test(h)&&(d=o),d===l?h.indexOf("\n")>=0&&(i=!1):i=d===s||d===a,e=e.slice(h.length),t.push([d,h]);break}}}return t},g=function(e,t){if("undefined"!=typeof document)t(document);else if(e)throw new Error("no doc")},m=function(e){g(!0,function(n){var r=h(e.textContent);e.innerHTML="",r.forEach(function(r){var i=n.createElement("span");i.className=t+r[0],i.textContent=r[1],e.appendChild(i)})})},v=function(t){g(!0,function(n){[].forEach.call(n.querySelectorAll(t||e),function(e){m(e)})})};return g(!1,function(e){var t=e.querySelector("head"),r=e.createElement("style");r.textContent=n,t.insertBefore(r,t.firstChild),/^(i|c|loade)/.test(e.readyState)?v():e.addEventListener("DOMContentLoaded",function(){v()})}),v.tok=h,v.el=m,v})},function(e,t,n){"use strict";var r=n(2),i=r.dom,o=n(14),a=n(38),s=Object.assign({enabled:!1,autoplay:!0,types:[]},o["preview-vid"]),c='<video id="pv-content-vid"/>',u=function(){var e=i("#pv-content-vid")[0];if(e){var t=e.offsetWidth,n=e.videoWidth,r=e.videoHeight;a.setLabels([a.item.label,String(n)+"x"+String(r),String((100*t/n).toFixed(0))+"%"])}},l=function(e){e.unload=function(){e.src="",e.load()}},f=function(e){return new Promise(function(t){var n=i(c).on("loadedmetadata",function(){return t(n)}).attr("controls","controls");s.autoplay&&n.attr("autoplay","autoplay"),l(n[0]),n.attr("src",e.absHref)})},d=function(){s.enabled&&a.register(s.types,f,u)};d()},function(e,t,n){"use strict";var r=n(2),i=r.map,o=r.debounce,a=r.parsePattern,s=r.dom,c=n(8),u=n(12),l=n(20),f=n(13),d=n(14),p=n(22),h=n(18),g=Object.assign({enabled:!1,advanced:!1,debounceTime:300,ignorecase:!0},d.search),m='<div id="search" class="tool">\n <img src="'+f.image("search")+'" alt="search"/>\n <input class="l10n_ph-search" type="text" value=""/>\n </div>',v=!1,b="",w=void 0,y=void 0,x=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"";if(e!==b){if(b=e,!e)return void h.setLocation();w.addCls("pending"),c.request({action:"get",search:{href:l.getAbsHref(),pattern:e,ignorecase:g.ignorecase}}).then(function(e){w.rmCls("pending"),h.setHint("noMatch"),h.setItems(i(e.search,function(e){return p.get(e)}))})}},k=function(){v?(w.addCls("active"),y[0].focus(),x(a(y.val(),g.advanced))):(x(),w.rmCls("active"))},_=function(){v=!v,k()},C=function(){v=!1,y.val(""),k()},S=function(){g.enabled&&(w=s(m).appTo("#toolbar"),y=w.find("input"),w.find("img").on("click",_),y.on("keyup",o(k,g.debounceTime)),u.sub("location.changed",C))};S()},function(e,t,n){(function(e){"use strict";var t=n(2),r=t.each,i=t.dom,o=n(12),a=n(13),s=n(14),c=e.window.document,u=Object.assign({enabled:!1,clickndrag:!1,checkboxes:!1},s.select),l='<span class="selector">\n <img src="'+a.image("selected")+'" alt="selected"/>\n </span>',f=i(c),d=i("html"),p=i('<div id="selection-rect"></div>'),h=Math.max,g=Math.min,m=Math.abs,v=0,b=0,w=function(){var e=i("#items .item.selected").map(function(e){return e._item});o.pub("selection",e)},y=function(e){var t=i(e);if(!t.length||t.isHidden())return null;var n=t[0].getBoundingClientRect();return{l:n.left,t:n.top,r:n.right,b:n.bottom}},x=function(e,t){return!!e&&!!t&&e.l===t.l&&e.t===t.t&&e.r===t.r&&e.b===t.b},k=function(e){var t=e[0];x(y(t),t&&t._rect)||e.each(function(e){e._rect=y(e)})},_=function(e,t){if(!e||!t)return!1;var n=h(e.l,t.l),r=g(e.r,t.r),i=h(e.t,t.t),o=g(e.b,t.b);return n<=r&&i<=o},C=function(e){var t=i("#content")[0],n=y(t),r=e.pageX-n.l+t.scrollLeft,o=e.pageY-n.t+t.scrollTop;return{x:r,y:o}},S=function(e){var t=C(e),n=t.x,r=t.y,o=g(v,n),a=g(b,r),s=m(v-n),c=m(b-r),u=e.ctrlKey||e.metaKey;if(!(!u&&s<4&&c<4)){u||i("#items .item").rmCls("selected"),d.addCls("drag-select"),p.show().css({left:o+"px",top:a+"px",width:s+"px",height:c+"px"});var l=y(p),f=i("#items .item:not(.folder-parent)");k(f),f.rmCls("selecting").each(function(e){_(l,e._rect)&&i(e).addCls("selecting")})}},A=function e(t){f.off("mousemove",S).off("mouseup",e),S(t),i("#items .item.selecting.selected").rmCls("selecting").rmCls("selected"),i("#items .item.selecting").rmCls("selecting").addCls("selected"),w(),d.rmCls("drag-select"),p.hide(),t.stopPropagation(),t.preventDefault()},T=function(e){if(!(0!==e.button||e.offsetX>=i("#content")[0].offsetWidth-16)){var t=C(e),n=t.x,r=t.y;v=n,b=r,f.on("mousemove",S).on("mouseup",A),S(e),e.preventDefault()}},E=function(e){for(;!e._item&&e.parentNode;)e=e.parentNode;return e._item},M=function(e){E(e.target).$view.tglCls("selected"),w(),e.stopPropagation(),e.preventDefault()},D=function(e){e.$view&&!e.isCurrentParentFolder()&&i(l).on("click",M).appTo(e.$view.find("a"))},P=function(e,t){u.checkboxes&&r(e,D),r(t,function(e){e.$view&&e.$view.rmCls("selected")}),w()},z=function(){u.enabled&&(u.clickndrag||u.checkboxes)&&(o.sub("view.changed",P),u.clickndrag&&(p.hide().appTo("#content"),i("#content").on("mousedown",T).on("drag",function(e){return e.preventDefault()}).on("dragstart",function(e){return e.preventDefault()})))};z()}).call(t,function(){return this}())},function(e,t,n){"use strict";var r=n(2),i=r.each,o=r.toArray,a=r.dom,s=r.cmp,c=r.naturalCmp,u=n(12),l=n(13),f=n(14),d=n(16),p=Object.assign({enabled:!1,column:0,reverse:!1,ignorecase:!0,natural:!1,folders:0},f.sort),h="ext/sort",g='<img src="'+l.image("sort")+'" class="sort" alt="sort order"/>',m=function(e){
-return e.isFolder()?p.folders:1},v={0:"label",1:"time",2:"size"},b={0:"label",1:"date",2:"size"},w=function(e,t,n,r){return function(i,o){var a=i._item,u=o._item,l=m(a)-m(u);if(0!==l)return l;var f=a[e],d=u[e];return(isNaN(f)||isNaN(d))&&(f=String(f),d=String(d),n&&(f=f.toLowerCase(),d=d.toLowerCase())),l=r?c(f,d):s(f,d),t?-l:l}},y=function(e,t){var n=a("#items li.header a"),r=a("#items li.header a."+b[e]),i=w(v[e],t,p.ignorecase,p.natural);d.put(h,{column:e,reverse:t}),n.rmCls("ascending").rmCls("descending"),r.addCls(t?"descending":"ascending"),a(o(a("#items .item:not(.folder-parent)")).sort(i)).appTo("#items")},x=function(){var e=d.get(h),t=e&&e.column||p.column,n=e&&e.reverse||p.reverse;y(t,n)},k=function(){var e=a("#items li.header");i(b,function(t,n){var r="0"===n?"app":"pre";e.find("a."+t)[r](g).on("click",function(e){y(n,a(e.currentTarget).hasCls("ascending")),e.preventDefault()})})},_=function(){p.enabled&&(k(),u.sub("view.changed",x))};_()},function(e,t,n){"use strict";var r=n(2),i=r.each,o=r.map,a=r.includes,s=n(8),c=n(12),u=n(14),l=Object.assign({enabled:!1,img:["img-bmp","img-gif","img-ico","img-jpg","img-png"],mov:["vid-avi","vid-flv","vid-mkv","vid-mov","vid-mp4","vid-mpg","vid-webm"],doc:["x-pdf","x-ps"],delay:1,size:100,exif:!1,chunksize:20},u.thumbnails),f=4/3,d=function(e,t){var n=null;if(a(l.img,t.type))n="img";else if(a(l.mov,t.type))n="mov";else{if(!a(l.doc,t.type))return;n="doc"}t.thumbSquare?t.$view.find(".icon.square img").addCls("thumb").attr("src",t.thumbSquare):e.push({type:n,href:t.absHref,ratio:1,callback:function(e){e&&t.$view&&(t.thumbSquare=e,t.$view.find(".icon.square img").addCls("thumb").attr("src",e))}}),t.thumbRational?t.$view.find(".icon.landscape img").addCls("thumb").attr("src",t.thumbRational):e.push({type:n,href:t.absHref,ratio:f,callback:function(e){e&&t.$view&&(t.thumbRational=e,t.$view.find(".icon.landscape img").addCls("thumb").attr("src",e))}})},p=function(e){var t=o(e,function(e){return{type:e.type,href:e.href,width:Math.round(l.size*e.ratio),height:l.size}});return s.request({action:"get",thumbs:t}).then(function(t){i(e,function(e,n){e.callback(t&&t.thumbs?t.thumbs[n]:null)})})},h=function(e){for(var t=e.length,n=l.chunksize,r=Promise.resolve(),i=function(t){r=r.then(function(){return p(e.slice(t,t+n))})},o=0;o<t;o+=n)i(o)},g=function(e){var t=[];i(e,function(e){return d(t,e)}),h(t)},m=function(e){setTimeout(function(){return g(e)},l.delay)},v=function(){l.enabled&&c.sub("view.changed",m)};v()},function(e,t,n){(function(e){"use strict";var t=n(12),r=n(14),i=e.window.document,o=Object.assign({enabled:!1},r.title),a=function(e){var t=e.getCrumb().map(function(e){return e.label}),n=t.join(" > ");t.length>1&&(n=t[t.length-1]+" - "+n),i.title=n},s=function(){o.enabled&&t.sub("location.changed",a)};s()}).call(t,function(){return this}())},function(e,t,n){"use strict";var r=n(2),i=r.each,o=r.dom,a=r.cmp,s=r.naturalCmp,c=n(12),u=n(20),l=n(13),f=n(14),d=n(16),p=Object.assign({enabled:!1,show:!0,maxSubfolders:50,naturalSort:!1,ignorecase:!0},f.tree),h='<div class="item folder">\n <span class="indicator">\n <img src="'+l.image("tree-indicator")+'"/>\n </span>\n <a>\n <span class="icon"><img src="'+l.icon("folder")+'"/></span>\n <span class="label"></span>\n </a>\n </span>',g='<div class="block">\n <h1 class="l10n-tree">Tree</h1>\n <div id="view-tree" class="button view">\n <img src="'+l.image("tree-toggle")+'" alt="view-tree"/>\n </div>\n </div>',m="ext/tree",v=function(e){for(;!e._item&&e.parentNode;)e=e.parentNode;return e._item},b=function(e){var t=v(e.target);"unknown"===t._treeState?t.fetchContent().then(function(){t._treeState="open",y(t)}):"open"===t._treeState?(t._treeState="closed",t._$tree.rmCls("open").addCls("closed")):"closed"===t._treeState&&(t._treeState="open",t._$tree.rmCls("closed").addCls("open"))},w=function(e,t){var n=e.label,r=t.label;return p.ignorecase&&(n=n.toLowerCase(),r=r.toLowerCase()),p.naturalSort?s(n,r):a(n,r)},y=function e(t){var n=t.getSubfolders(),r=n.length,a=p.maxSubfolders,s=o(h);if(s.find(".indicator").on("click",b),s.find(".label").text(t.label),u.setLink(s.find("a"),t),t.isCurrentFolder()&&s.addCls("active"),t.isManaged||s.find(".icon img").attr("src",l.icon("folder-page")),t._treeState=t._treeState||"none",t.isManaged&&!t.isContentFetched?t._treeState="unknown":r||(t._treeState="none"),s.addCls(t._treeState),r){var c=o('<div class="content"></div>').appTo(s);n.sort(w),i(n.slice(0,a),function(t){return c.app(e(t))}),r>a&&c.app('<div class="summary">… '+(r-a)+" more subfolders</div>")}return t._$tree&&t._$tree.rpl(s),t._$tree=s,s[0]._item=t,s},x=function e(t){return t._treeState="open",t.fetchContent().then(function(){return t.parent?e(t.parent):t})},k=function(){d.get(m)?(o("#view-tree").addCls("active"),o("#tree").show()):(o("#view-tree").rmCls("active"),o("#tree").hide())},_=function(e){x(e).then(function(e){o("#tree").clr().app(y(e)),k()})},C=function(){p.enabled&&(o('<div id="tree"></div>').hide().appTo("#mainrow"),o(g).appTo("#sidebar").find("#view-tree").on("click",function(e){d.put(m,!d.get(m)),k(),c.pub("resize"),e.preventDefault()}),"boolean"!=typeof d.get(m)&&d.put(m,p.show),k(),c.sub("location.changed",_))};C()},function(e,t,n){(function(e){"use strict";var t=n(2),r=t.dom,i=n(7),o=n(8),a=n(13),s='<ul id="tests"></ul>',c='<li class="test">\n <span class="label"></span>\n <span class="result"></span>\n <div class="info"></div>\n </li>',u='<div id="login-wrapper">\n <input id="pass" type="password" placeholder="password"/>\n <span id="login">login</span>\n <span id="logout">logout</span>\n <div id="hint">\n The preset password is the empty string, just click login.\n Change it in \'_h5ai/private/conf/options.json\'.\n </div>\n </div>',l='<div id="support">\n Show your support with a donation!\n <div class="paypal">\n <form action="https://www.paypal.com/cgi-bin/webscr" method="post" target="_blank">\n <input type="hidden" name="cmd" value="_s-xclick"/>\n <input type="hidden" name="hosted_button_id" value="8WSPKWT7YBTSQ"/>\n <input type="image" src="'+a.image("paypal")+'" name="submit" alt="PayPal"/>\n </form>\n </div>\n </div>',f=i.setup,d=function(e,t,n,i){var o=r(c).appTo("#tests");o.find(".label").text(e),o.find(".result").addCls(n?"passed":"failed").text(i?i:n?"yes":"no"),o.find(".info").html(t)},p=function(){f.AS_ADMIN&&(r(s).appTo("#content"),d("h5ai version","Only green if this is an official h5ai release",/^\d+\.\d+\.\d+$/.test(f.VERSION),f.VERSION),d("Index file found","Add <code>"+f.INDEX_HREF+"</code> to your index file list",f.INDEX_HREF),d("Options parsable","File <code>options.json</code> is readable and syntax is correct",null!==i.options),d("Types parsable","File <code>types.json</code> is readable and syntax is correct",null!==i.types),d("Server software","Server is one of apache, lighttpd, nginx or cherokee",f.HAS_SERVER,f.SERVER_NAME+" "+f.SERVER_VERSION),d("PHP version","PHP version >= "+f.MIN_PHP_VERSION,!0,f.PHP_VERSION),d("PHP arch","64-bit required to correctly display file/folder sizes > ~2GB","64-bit"===f.PHP_ARCH,f.PHP_ARCH),d("Public Cache directory","Web server has write access",f.HAS_WRITABLE_CACHE_PUB),d("Private Cache directory","Web server has write access",f.HAS_WRITABLE_CACHE_PRV),d("Image thumbs","PHP GD extension with JPEG support available",f.HAS_PHP_JPEG),d("Use EXIF thumbs","PHP EXIF extension available",f.HAS_PHP_EXIF),d("Movie thumbs","Command line program <code>avconv</code> or <code>ffmpeg</code> available",f.HAS_CMD_AVCONV||f.HAS_CMD_FFMPEG),d("PDF thumbs","Command line program <code>convert</code> or <code>gm</code> available",f.HAS_CMD_CONVERT||f.HAS_CMD_GM),d("Shell tar","Command line program <code>tar</code> available",f.HAS_CMD_TAR),d("Shell zip","Command line program <code>zip</code> available",f.HAS_CMD_ZIP),d("Shell du","Command line program <code>du</code> available",f.HAS_CMD_DU))},h=function(){e.window.location.reload()},g=function(){o.request({action:"login",pass:r("#pass").val()}).then(h)},m=function(){o.request({action:"logout"}).then(h)},v=function(e){13===e.which&&g()},b=function(){r(l).appTo("#content")},w=function(){r(u).appTo("#content"),f.AS_ADMIN?(r("#pass").rm(),r("#login").rm(),r("#logout").on("click",m)):(r("#pass").on("keydown",v)[0].focus(),r("#login").on("click",g),r("#logout").rm()),i.options.hasCustomPasshash&&r("#hint").rm()},y=function(){b(),w(),p()};y()}).call(t,function(){return this}())}]);
\ No newline at end of file
+/* h5ai v0.29.2 - https://larsjung.de/h5ai/ */ !(function(e) {
+ function t(e, t) {
+ if (!t) throw ((i.className = r), new Error(r + ": " + e));
+ }
+
+ function n(e) {
+ return "function" == typeof e;
+ }
+ if (!e || e.window !== e || !e.document) throw new Error("no-window");
+ var r = "no-browser",
+ i = e.document.documentElement;
+ (i.className = ""),
+ t("console", e.console && n(e.console.log)),
+ t("assign", e.Object && n(e.Object.assign)),
+ t("promise", n(e.Promise)),
+ t("xhr", e.XMLHttpRequest);
+})(this),
+(function(e) {
+ function t(r) {
+ if (n[r]) return n[r].exports;
+ var i = (n[r] = { exports: {}, id: r, loaded: !1 });
+ return e[r].call(i.exports, i, i.exports, t), (i.loaded = !0), i.exports;
+ }
+ var n = {};
+ return (t.m = e), (t.c = n), (t.p = ""), t(0);
+})([
+ function(e, t, n) {
+ "use strict";
+ n(1);
+ },
+ function(e, t, n) {
+ "use strict";
+ var r = n(2),
+ i = r.dom,
+ o = r.awaitReady,
+ a = n(7),
+ s = i("script[data-module]").attr("data-module"),
+ c = { action: "get", setup: !0, options: !0, types: !0 };
+ if ("index" === s)(c.theme = !0), (c.langs = !0);
+ else {
+ if ("info" !== s) throw new Error("no-main-module: '" + s + "'");
+ c.refresh = !0;
+ }
+ a._update(c)
+ .then(function() {
+ return o();
+ })
+ .then(function() {
+ return n(9)("./" + s);
+ });
+ },
+ function(e, t, n) {
+ "use strict";
+ e.exports = Object.assign({}, n(3), n(4), n(5), n(6));
+ },
+ function(e, t) {
+ "use strict";
+ var n =
+ "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ?
+
+ function(e) {
+ return typeof e;
+ } :
+ function(e) {
+ return e &&
+ "function" == typeof Symbol &&
+ e.constructor === Symbol &&
+ e !== Symbol.prototype ?
+ "symbol" :
+ typeof e;
+ },
+ r = function(e) {
+ return void 0 !== e && null !== e;
+ },
+ i = function(e, t) {
+ return ("undefined" == typeof e ? "undefined" : n(e)) === t;
+ },
+ o = function(e) {
+ return i(e, "string");
+ },
+ a = function(e) {
+ return i(e, "function");
+ },
+ s = function(e) {
+ return i(e, "number");
+ },
+ c = function(e) {
+ return e && e.hasOwnProperty("length");
+ },
+ u = function(e) {
+ return !e || o(e) ?
+ [] :
+ (c(e) && (e = Array.from(e)), Object.keys(e));
+ },
+ l = function(e) {
+ return u(e).map(function(t) {
+ return e[t];
+ });
+ },
+ f = function(e, t) {
+ return u(e).forEach(function(n) {
+ return t(e[n], n);
+ });
+ },
+ d = function(e, t) {
+ return l(e).filter(t);
+ },
+ p = function(e, t) {
+ return l(e).map(t);
+ },
+ h = function(e, t) {
+ return l(e).indexOf(t) >= 0;
+ },
+ g = function(e) {
+ return d(e, function(e) {
+ return !!e;
+ });
+ },
+ m = function(e, t) {
+ return !!e && e instanceof t;
+ },
+ v = function(e) {
+ return Array.from(e);
+ },
+ b = function(e, t) {
+ return (
+ (t = l(t)),
+ d(e, function(e) {
+ return t.indexOf(e) < 0;
+ })
+ );
+ },
+ w = function(e, t) {
+ return (
+ (t = l(t)),
+ d(e, function(e) {
+ return t.indexOf(e) >= 0;
+ })
+ );
+ },
+ y = function(e, t) {
+ return e < t ? -1 : e > t ? 1 : 0;
+ },
+ x = function(e, t) {
+ var n = a(t) ?
+ t :
+ function(e) {
+ return e[t];
+ },
+ r = function(e, t) {
+ return y(n(e), n(t));
+ };
+ return l(e).sort(r);
+ },
+ k = function(e, t) {
+ var n = null;
+ return function() {
+ clearTimeout(n), (n = setTimeout(e, t));
+ };
+ };
+ e.exports = {
+ is: r,
+ isStr: o,
+ isFn: a,
+ isNum: s,
+ hasLength: c,
+ keys: u,
+ values: l,
+ each: f,
+ filter: d,
+ map: p,
+ includes: h,
+ compact: g,
+ isInstanceOf: m,
+ toArray: v,
+ difference: b,
+ intersection: w,
+ cmp: y,
+ sortBy: x,
+ debounce: k,
+ };
+ },
+ function(e, t, n) {
+ (function(t) {
+ "use strict";
+
+ function r(e) {
+ if (Array.isArray(e)) {
+ for (var t = 0, n = Array(e.length); t < e.length; t++) n[t] = e[t];
+ return n;
+ }
+ return Array.from(e);
+ }
+ var i = (function() {
+ function e(e, t) {
+ var n = [],
+ r = !0,
+ i = !1,
+ o = void 0;
+ try {
+ for (
+ var a, s = e[Symbol.iterator](); !(r = (a = s.next()).done) &&
+ (n.push(a.value), !t || n.length !== t); r = !0
+ );
+ } catch (e) {
+ (i = !0), (o = e);
+ } finally {
+ try {
+ !r && s.return && s.return();
+ } finally {
+ if (i) throw o;
+ }
+ }
+ return n;
+ }
+ return function(t, n) {
+ if (Array.isArray(t)) return t;
+ if (Symbol.iterator in Object(t)) return e(t, n);
+ throw new TypeError(
+ "Invalid attempt to destructure non-iterable instance"
+ );
+ };
+ })(),
+ o = n(3),
+ a = o.each,
+ s = o.filter,
+ c = o.hasLength,
+ u = o.is,
+ l = o.isStr,
+ f = o.map,
+ d = o.isInstanceOf,
+ p = o.toArray,
+ h = t.window,
+ g = h.document,
+ m = (function() {
+ var e = function(e) {
+ return g.createElement(e);
+ },
+ t = [
+ [/^<t(head|body|foot)|^<c(ap|olg)/i, e("table")],
+ [/^<col/i, e("colgroup")],
+ [/^<tr/i, e("tbody")],
+ [/^<t[dh]/i, e("tr")],
+ ],
+ n = e("div"),
+ r = function(e) {
+ var r = !0,
+ o = !1,
+ a = void 0;
+ try {
+ for (
+ var s, c = t[Symbol.iterator](); !(r = (s = c.next()).done); r = !0
+ ) {
+ var u = s.value,
+ l = i(u, 2),
+ f = l[0],
+ d = l[1];
+ if (f.test(e)) return d;
+ }
+ } catch (e) {
+ (o = !0), (a = e);
+ } finally {
+ try {
+ !r && c.return && c.return();
+ } finally {
+ if (o) throw a;
+ }
+ }
+ return n;
+ };
+ return function(e) {
+ var t = r(e);
+ t.innerHTML = e;
+ var n = p(t.childNodes);
+ return (
+ a(n, function(e) {
+ return t.removeChild(e);
+ }),
+ (t.innerHTML = ""),
+ n
+ );
+ };
+ })(),
+ v = function(e) {
+ var t =
+ arguments.length > 1 && void 0 !== arguments[1] ?
+ arguments[1] :
+ g;
+ try {
+ return p(t.querySelectorAll(e));
+ } catch (e) {
+ return [];
+ }
+ },
+ b = function(e) {
+ return d(e, h.Element);
+ },
+ w = function(e) {
+ return d(e, h.Document);
+ },
+ y = function(e) {
+ return u(e) && e.window === e && w(e.document);
+ },
+ x = function(e) {
+ return b(e) || w(e) || y(e);
+ },
+ k = function(e, t, n) {
+ return e.addEventListener(t, n);
+ },
+ _ = function(e, t, n) {
+ return e.removeEventListener(t, n);
+ },
+ C = new Promise(function(e) {
+ /^(i|c|loade)/.test(g.readyState) ?
+ e() :
+ k(g, "DOMContentLoaded", function() {
+ return e();
+ });
+ }),
+ S = function() {
+ return C;
+ },
+ A = new Promise(function(e) {
+ k(h, "load", function() {
+ return e();
+ });
+ }),
+ T = function() {
+ return A;
+ },
+ E = function e(t) {
+ if (d(t, e)) return t;
+ var n = void 0;
+ return (
+ l(t) ?
+ ((t = t.trim()), (n = "<" === t[0] ? m(t) : v(t))) :
+ (n = x(t) ? [t] : c(t) ? t : [t]),
+ (n = s(n, x)),
+ Object.assign(Object.create(e.prototype), n, { length: n.length })
+ );
+ };
+ (E.prototype = {
+ constructor: E,
+ each: function(e) {
+ return a(this, e), this;
+ },
+ map: function(e) {
+ return f(this, e);
+ },
+ find: function(e) {
+ var t;
+ return E(
+ (t = []).concat.apply(
+ t,
+ r(
+ this.map(function(t) {
+ return v(e, t);
+ })
+ )
+ )
+ );
+ },
+ on: function(e, t) {
+ return this.each(function(n) {
+ return k(n, e, t);
+ });
+ },
+ off: function(e, t) {
+ return this.each(function(n) {
+ return _(n, e, t);
+ });
+ },
+ attr: function(e, t) {
+ return void 0 === t ?
+ this.length ?
+ this[0].getAttribute(e) :
+ void 0 :
+ this.each(function(n) {
+ return n.setAttribute(e, t);
+ });
+ },
+ rmAttr: function(e) {
+ return this.each(function(t) {
+ return t.removeAttribute(e);
+ });
+ },
+ prop: function(e, t) {
+ return void 0 === t ?
+ this.length ?
+ this[0][e] :
+ void 0 :
+ this.each(function(n) {
+ n[e] = t;
+ });
+ },
+ rmProp: function(e) {
+ return this.each(function(t) {
+ return delete t[e];
+ });
+ },
+ val: function(e) {
+ return void 0 === e ?
+ this.length ?
+ this[0].value :
+ void 0 :
+ this.each(function(t) {
+ t.value = e;
+ });
+ },
+ html: function(e) {
+ return void 0 === e ?
+ this.map(function(e) {
+ return e.innerHTML;
+ }).join("") :
+ this.each(function(t) {
+ t.innerHTML = e;
+ });
+ },
+ text: function(e) {
+ return void 0 === e ?
+ this.map(function(e) {
+ return e.textContent;
+ }).join("") :
+ this.each(function(t) {
+ t.textContent = e;
+ });
+ },
+ clr: function() {
+ return this.html("");
+ },
+ rm: function() {
+ return this.each(function(e) {
+ var t = e.parentNode;
+ t && t.removeChild(e);
+ });
+ },
+ rpl: function(e) {
+ return this.each(function(t) {
+ var n = t.parentNode;
+ n && n.replaceChild(E(e)[0], t);
+ });
+ },
+ app: function(e) {
+ return this.each(function(t) {
+ E(e).each(function(e) {
+ return t.appendChild(e);
+ });
+ });
+ },
+ appTo: function(e) {
+ return E(e).app(this), this;
+ },
+ pre: function(e) {
+ return this.each(function(t) {
+ E(e).each(function(e) {
+ var n = t.firstChild;
+ n ? t.insertBefore(e, n) : t.appendChild(e);
+ });
+ });
+ },
+ preTo: function(e) {
+ return E(e).pre(this), this;
+ },
+ cls: function() {
+ return arguments.length ?
+ (this.each(function(e) {
+ e.className = "";
+ }),
+ this.addCls.apply(this, arguments)) :
+ this.length ?
+ p(this[0].classList) :
+ [];
+ },
+ hasCls: function(e) {
+ return p(this).every(function(t) {
+ return t.classList.contains(e);
+ });
+ },
+ addCls: function() {
+ for (var e = arguments.length, t = Array(e), n = 0; n < e; n++)
+ t[n] = arguments[n];
+ return this.each(function(e) {
+ var n = !0,
+ r = !1,
+ i = void 0;
+ try {
+ for (
+ var o, a = t[Symbol.iterator](); !(n = (o = a.next()).done); n = !0
+ ) {
+ var s = o.value;
+ e.classList.add(s);
+ }
+ } catch (e) {
+ (r = !0), (i = e);
+ } finally {
+ try {
+ !n && a.return && a.return();
+ } finally {
+ if (r) throw i;
+ }
+ }
+ });
+ },
+ rmCls: function() {
+ for (var e = arguments.length, t = Array(e), n = 0; n < e; n++)
+ t[n] = arguments[n];
+ return this.each(function(e) {
+ var n = !0,
+ r = !1,
+ i = void 0;
+ try {
+ for (
+ var o, a = t[Symbol.iterator](); !(n = (o = a.next()).done); n = !0
+ ) {
+ var s = o.value;
+ e.classList.remove(s);
+ }
+ } catch (e) {
+ (r = !0), (i = e);
+ } finally {
+ try {
+ !n && a.return && a.return();
+ } finally {
+ if (r) throw i;
+ }
+ }
+ });
+ },
+ tglCls: function() {
+ for (var e = arguments.length, t = Array(e), n = 0; n < e; n++)
+ t[n] = arguments[n];
+ return this.each(function(e) {
+ var n = !0,
+ r = !1,
+ i = void 0;
+ try {
+ for (
+ var o, a = t[Symbol.iterator](); !(n = (o = a.next()).done); n = !0
+ ) {
+ var s = o.value;
+ e.classList.contains(s) ?
+ e.classList.remove(s) :
+ e.classList.add(s);
+ }
+ } catch (e) {
+ (r = !0), (i = e);
+ } finally {
+ try {
+ !n && a.return && a.return();
+ } finally {
+ if (r) throw i;
+ }
+ }
+ });
+ },
+ parent: function() {
+ return E(
+ this.map(function(e) {
+ return e.parentNode;
+ })
+ );
+ },
+ children: function() {
+ var e;
+ return E(
+ (e = []).concat.apply(
+ e,
+ r(
+ this.map(function(e) {
+ return p(e.children);
+ })
+ )
+ )
+ );
+ },
+ hide: function() {
+ return this.addCls("hidden");
+ },
+ show: function() {
+ return this.rmCls("hidden");
+ },
+ isHidden: function() {
+ return this.hasCls("hidden");
+ },
+ css: function(e) {
+ return this.each(function(t) {
+ return Object.assign(t.style, e);
+ });
+ },
+ }),
+ (e.exports = { awaitReady: S, awaitLoad: T, dom: E });
+ }.call(
+ t,
+ (function() {
+ return this;
+ })()
+ ));
+ },
+ function(e, t) {
+ "use strict";
+ var n =
+ "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ?
+
+ function(e) {
+ return typeof e;
+ } :
+ function(e) {
+ return e &&
+ "function" == typeof Symbol &&
+ e.constructor === Symbol &&
+ e !== Symbol.prototype ?
+ "symbol" :
+ typeof e;
+ },
+ r = /(^([+\-]?(?:0|[1-9]\d*)(?:\.\d*)?(?:[eE][+\-]?\d+)?)?$|^0x[0-9a-f]+$|\d+)/gi,
+ i = /(^([\w ]+,?[\w ]+)?[\w ]+,?[\w ]+\d+:\d+(:\d+)?[\w ]?|^\d{1,4}[\/\-]\d{1,4}[\/\-]\d{1,4}|^\w+, \w+ \d+, \d{4})/,
+ o = /^0x[0-9a-f]+$/i,
+ a = /^0/,
+ s = function(e, t) {
+ var s = String(e).trim(),
+ c = String(t).trim(),
+ u = s
+ .replace(r, "\0$1\0")
+ .replace(/\0$/, "")
+ .replace(/^\0/, "")
+ .split("\0"),
+ l = c
+ .replace(r, "\0$1\0")
+ .replace(/\0$/, "")
+ .replace(/^\0/, "")
+ .split("\0"),
+ f =
+ parseInt(s.match(o), 16) ||
+ (1 !== u.length && s.match(i) && Date.parse(s)),
+ d =
+ parseInt(c.match(o), 16) ||
+ (f && c.match(i) && Date.parse(c)) ||
+ null;
+ if (d) {
+ if (f < d) return -1;
+ if (f > d) return 1;
+ }
+ for (var p = 0, h = Math.max(u.length, l.length); p < h; p += 1) {
+ var g = (!(u[p] || "").match(a) && parseFloat(u[p])) || u[p] || 0,
+ m = (!(l[p] || "").match(a) && parseFloat(l[p])) || l[p] || 0;
+ if (isNaN(g) !== isNaN(m)) return isNaN(g) ? 1 : -1;
+ if (
+ (("undefined" == typeof g ? "undefined" : n(g)) !==
+ ("undefined" == typeof m ? "undefined" : n(m)) &&
+ ((g = String(g)), (m = String(m))),
+ g < m)
+ )
+ return -1;
+ if (g > m) return 1;
+ }
+ return 0;
+ };
+ e.exports = { naturalCmp: s };
+ },
+ function(e, t) {
+ "use strict";
+ var n = function(e) {
+ return e.replace(/[\-\[\]{}()*+?.,\\$\^|#\s]/g, "\\$&");
+ },
+ r = function(e, t) {
+ return t ?
+ "re:" === e.substr(0, 3) ?
+ e.substr(3) :
+ e
+ .trim()
+ .split(/\s+/)
+ .map(function(e) {
+ return e
+ .split("")
+ .map(function(e) {
+ return n(e);
+ })
+ .join(".*?");
+ })
+ .join("|") :
+ n(e);
+ };
+ e.exports = { parsePattern: r };
+ },
+ function(e, t, n) {
+ "use strict";
+ var r = n(8),
+ i = r.request,
+ o = (e.exports = {
+ _update: function(e) {
+ return i(e).then(function(e) {
+ return Object.assign(o, e);
+ });
+ },
+ });
+ },
+ function(e, t, n) {
+ (function(t) {
+ "use strict";
+ var r = n(2),
+ i = r.each,
+ o = r.dom,
+ a = t.window.XMLHttpRequest,
+ s = function(e) {
+ return new Promise(function(t) {
+ var n = new a(),
+ r = function() {
+ if (n.readyState === a.DONE)
+ try {
+ t(JSON.parse(n.responseText));
+ } catch (e) {
+ t({ err: e, txt: n.responseText });
+ }
+ };
+ n.open("POST", "?", !0),
+ (n.onreadystatechange = r),
+ n.setRequestHeader(
+ "Content-Type",
+ "application/json;charset=utf-8"
+ ),
+ n.send(JSON.stringify(e));
+ });
+ },
+ c = function(e) {
+ var t = o('<form method="post" action="?" style="display:none;"/>');
+ i(e, function(e, n) {
+ o('<input type="hidden"/>')
+ .attr("name", n)
+ .attr("value", e)
+ .appTo(t);
+ }),
+ t.appTo("body"),
+ t[0].submit(),
+ t.rm();
+ };
+ e.exports = { request: s, formRequest: c };
+ }.call(
+ t,
+ (function() {
+ return this;
+ })()
+ ));
+ },
+ function(e, t, n) {
+ function r(e) {
+ return n(i(e));
+ }
+
+ function i(e) {
+ return (
+ o[e] ||
+ (function() {
+ throw new Error("Cannot find module '" + e + "'.");
+ })()
+ );
+ }
+ var o = {
+ "./index": 10,
+ "./index.js": 10,
+ "./info": 50,
+ "./info.js": 50,
+ };
+ (r.keys = function() {
+ return Object.keys(o);
+ }),
+ (r.resolve = i),
+ (e.exports = r),
+ (r.id = 9);
+ },
+ function(e, t, n) {
+ (function(e) {
+ "use strict";
+ n(11),
+ n(24),
+ n(25),
+ n(26),
+ n(27),
+ n(29),
+ n(30),
+ n(31),
+ n(32),
+ n(34),
+ n(36),
+ n(37),
+ n(44),
+ n(45),
+ n(46),
+ n(47),
+ n(48),
+ n(49);
+ var t = e.window.document.location.href;
+ n(20).setLocation(t, !0);
+ }.call(
+ t,
+ (function() {
+ return this;
+ })()
+ ));
+ },
+ function(e, t, n) {
+ "use strict";
+ var r = n(2),
+ i = r.each,
+ o = r.dom,
+ a = n(12),
+ s = n(13),
+ c = n(14),
+ u = n(15),
+ l = n(17),
+ f = n(18),
+ d = Object.assign({ modeToggle: !1 }, c.view),
+ p =
+ '<div id="viewmode-settings" class="block"><h1 class="l10n-view">View</h1></div>',
+ h =
+ '<div id="viewmode-[MODE]" class="button mode">\n <img src="' +
+ s.image("view-[MODE]") +
+ '" alt="viewmode-[MODE]"/>\n </div>',
+ g = '<input id="viewmode-size" type="range" min="0" max="0" value="0">',
+ m =
+ '<div id="viewmode-toggle" class="tool">\n <img alt="viewmode"/>\n </div>',
+ v = void 0,
+ b = void 0,
+ w = function(e, t) {
+ o("#viewmode-settings .mode").rmCls("active"),
+ o("#viewmode-" + e).addCls("active"),
+ o("#viewmode-size").val(b.indexOf(t)),
+ "next" === d.modeToggle && (e = v[(v.indexOf(e) + 1) % v.length]),
+ o("#viewmode-toggle img").attr("src", s.image("view-" + e));
+ },
+ y = function() {
+ if (!(v.length < 2 && b.length < 2)) {
+ var e = o(p);
+ if (
+ (v.length > 1 &&
+ i(v, function(t) {
+ o(h.replace(/\[MODE\]/g, t))
+ .on("click", function() {
+ f.setMode(t);
+ })
+ .appTo(e);
+ }),
+ b.length > 1)
+ ) {
+ var t = b.length - 1;
+ o(g)
+ .attr("max", t)
+ .on("input", function(e) {
+ return f.setSize(b[e.target.valueAsNumber]);
+ })
+ .on("change", function(e) {
+ return f.setSize(b[e.target.valueAsNumber]);
+ })
+ .appTo(e);
+ }
+ e.appTo(u.$el);
+ }
+ },
+ x = function() {
+ var e = f.getMode(),
+ t = (v.indexOf(e) + 1) % v.length,
+ n = v[t];
+ f.setMode(n);
+ },
+ k = function() {
+ d.modeToggle && v.length > 1 && o(m).on("click", x).appTo(l.$toolbar);
+ },
+ _ = function() {
+ (v = f.getModes()),
+ (b = f.getSizes()),
+ y(),
+ k(),
+ w(f.getMode(), f.getSize()),
+ a.sub("view.mode.changed", w);
+ };
+ _();
+ },
+ function(e, t, n) {
+ (function(t) {
+ "use strict";
+ var r = n(2),
+ i = r.isStr,
+ o = r.isFn,
+ a = r.dom,
+ s = {},
+ c = function(e, t) {
+ i(e) && o(t) && (s[e] || (s[e] = []), s[e].push(t));
+ },
+ u = function(e) {
+ for (
+ var t = arguments.length, n = Array(t > 1 ? t - 1 : 0), r = 1; r < t; r++
+ )
+ n[r - 1] = arguments[r];
+ i(e) &&
+ s[e] &&
+ s[e].forEach(function(t) {
+ t.apply(e, n);
+ });
+ };
+ a(t.window).on("resize", function() {
+ return u("resize");
+ }),
+ (e.exports = { sub: c, pub: u });
+ }.call(
+ t,
+ (function() {
+ return this;
+ })()
+ ));
+ },
+ function(e, t, n) {
+ "use strict";
+ var r = n(2),
+ i = r.includes,
+ o = n(7),
+ a = n(14),
+ s = a.publicHref + "images/",
+ c = s + "ui/",
+ u = s + "themes/",
+ l = u + "default/",
+ f = [
+ "file",
+ "folder",
+ "folder-page",
+ "folder-parent",
+ "ar",
+ "aud",
+ "bin",
+ "img",
+ "txt",
+ "vid",
+ "x",
+ ],
+ d = function(e) {
+ return c + e + ".svg";
+ },
+ p = function(e) {
+ var t = (e || "").split("-")[0],
+ n = o.theme[e] || o.theme[t];
+ return n ?
+ u + n :
+ i(f, e) ?
+ l + e + ".svg" :
+ i(f, t) ?
+ l + t + ".svg" :
+ l + "file.svg";
+ };
+ e.exports = { image: d, icon: p };
+ },
+ function(e, t, n) {
+ "use strict";
+ var r = n(7);
+ e.exports = Object.assign({}, r.options, {
+ publicHref: r.setup.PUBLIC_HREF,
+ rootHref: r.setup.ROOT_HREF,
+ });
+ },
+ function(e, t, n) {
+ "use strict";
+ var r = n(2),
+ i = r.dom,
+ o = n(13),
+ a = n(14),
+ s = n(16),
+ c = n(17),
+ u = Object.assign({ disableSidebar: !1 }, a.view),
+ l = "sidebarIsVisible",
+ f = '<div id="sidebar"></div>',
+ d =
+ '<div id="sidebar-toggle" class="tool">\n <img alt="sidebar"/>\n </div>',
+ p = function() {
+ var e = i(f).hide(),
+ t = i(d),
+ n = t.find("img"),
+ r = function(r) {
+ var i = s.get(l);
+ r && ((i = !i), s.put(l, i)),
+ i ?
+ (t.addCls("active"),
+ n.attr("src", o.image("back")),
+ e.show()) :
+ (t.rmCls("active"),
+ n.attr("src", o.image("sidebar")),
+ e.hide());
+ };
+ return (
+ u.disableSidebar ||
+ (e.appTo(c.$mainrow),
+ t.appTo(c.$toolbar).on("click", function() {
+ return r(!0);
+ }),
+ r()), { $el: e }
+ );
+ };
+ e.exports = p();
+ },
+ function(e, t) {
+ (function(t) {
+ "use strict";
+ var n = t.window.localStorage,
+ r = "_h5ai",
+ i = function() {
+ try {
+ return JSON.parse(n[r]);
+ } catch (e) {}
+ return {};
+ },
+ o = function(e) {
+ n[r] = JSON.stringify(e);
+ },
+ a = function(e, t) {
+ var n = i();
+ (n[e] = t), o(n);
+ },
+ s = function(e) {
+ return i()[e];
+ };
+ e.exports = { put: a, get: s };
+ }.call(
+ t,
+ (function() {
+ return this;
+ })()
+ ));
+ },
+ function(e, t, n) {
+ "use strict";
+ var r = n(2),
+ i = r.dom,
+ o = "body",
+ a =
+ '<div id="topbar">\n <div id="toolbar"></div>\n <div id="flowbar"></div>\n <a id="backlink" href="https://larsjung.de/h5ai/" title="powered by h5ai - https://larsjung.de/h5ai/">\n <div>powered</div>\n <div>by h5ai</div>\n </a>\n </div>',
+ s =
+ '<div id="mainrow">\n <div id="content"></div>\n </div>',
+ c = function() {
+ var e = i(o).attr("id", "root").clr().app(a).app(s);
+ return {
+ $root: e,
+ $topbar: e.find("#topbar"),
+ $toolbar: e.find("#toolbar"),
+ $flowbar: e.find("#flowbar"),
+ $mainrow: e.find("#mainrow"),
+ $content: e.find("#content"),
+ };
+ };
+ e.exports = c();
+ },
+ function(e, t, n) {
+ "use strict";
+ var r = n(2),
+ i = r.each,
+ o = r.map,
+ a = r.includes,
+ s = r.intersection,
+ c = r.dom,
+ u = n(12),
+ l = n(19),
+ f = n(20),
+ d = n(13),
+ p = n(16),
+ h = n(14),
+ g = n(17),
+ m = ["details", "grid", "icons"],
+ v = [20, 40, 60, 80, 100, 150, 200, 250, 300, 350, 400],
+ b = Object.assign({
+ binaryPrefix: !1,
+ hideFolders: !1,
+ hideParentFolder: !1,
+ maxIconSize: 40,
+ modes: m,
+ setParentFolderLabels: !1,
+ sizes: v,
+ },
+ h.view
+ ),
+ w = b.sizes.sort(function(e, t) {
+ return e - t;
+ }),
+ y = s(b.modes, m),
+ x = "view",
+ k =
+ '<div id="view">\n <ul id="items" class="clearfix">\n <li class="header">\n <a class="icon"></a>\n <a class="label" href="#"><span class="l10n-name"/></a>\n <a class="date" href="#"><span class="l10n-lastModified"/></a>\n <a class="size" href="#"><span class="l10n-size"/></a>\n </li>\n </ul>\n <div id="view-hint"></div>\n </div>',
+ _ =
+ '<li class="item">\n <a>\n <span class="icon square"><img/></span>\n <span class="icon landscape"><img/></span>\n <span class="label"></span>\n <span class="date"></span>\n <span class="size"></span>\n </a>\n </li>',
+ C = c(k),
+ S = C.find("#items"),
+ A = C.find("#view-hint"),
+ T = function(e, t, n) {
+ return Math.min(n, Math.max(t, e));
+ },
+ E = function(e) {
+ var t = T(e, 20, 80),
+ n = T(e, 40, 160),
+ r = T(e, 80, 1e3),
+ i = Math.round((4 * r) / 3),
+ o = "!important;",
+ a = "#view.view-details.view-size-" + e,
+ s = "#view.view-grid.view-size-" + e,
+ c = "#view.view-icons.view-size-" + e,
+ u = [
+ a + " .item .label {line-height: " + (t + 14) + "px " + o + "}",
+ a + " .item .date {line-height: " + (t + 14) + "px " + o + "}",
+ a + " .item .size {line-height: " + (t + 14) + "px " + o + "}",
+ a +
+ " .square {width: " +
+ t +
+ "px " +
+ o +
+ " height: " +
+ t +
+ "px " +
+ o +
+ "}",
+ a +
+ " .square img {width: " +
+ t +
+ "px " +
+ o +
+ " height: " +
+ t +
+ "px " +
+ o +
+ "}",
+ a + " .label {margin-left: " + (t + 32) + "px " + o + "}",
+ s + " .item .label {line-height: " + n + "px " + o + "}",
+ s +
+ " .square {width: " +
+ n +
+ "px " +
+ o +
+ " height: " +
+ n +
+ "px " +
+ o +
+ "}",
+ s +
+ " .square img {width: " +
+ n +
+ "px " +
+ o +
+ " height: " +
+ n +
+ "px " +
+ o +
+ "}",
+ c + " .item {width: " + i + "px " + o + "}",
+ c +
+ " .landscape {width: " +
+ i +
+ "px " +
+ o +
+ " height: " +
+ r +
+ "px " +
+ o +
+ "}",
+ c +
+ " .landscape img {width: " +
+ r +
+ "px " +
+ o +
+ " height: " +
+ r +
+ "px " +
+ o +
+ "}",
+ c + " .landscape .thumb {width: " + i + "px " + o + "}",
+ ];
+ return u.join("\n");
+ },
+ M = function() {
+ var e = o(w, function(e) {
+ return E(e);
+ });
+ e.push(
+ "#view .icon img {max-width: " +
+ b.maxIconSize +
+ "px; max-height: " +
+ b.maxIconSize +
+ "px;}"
+ ),
+ c("<style></style>").text(e.join("\n")).appTo("head");
+ },
+ D = function(e, t) {
+ var n = p.get(x);
+ (e = e || (n && n.mode)),
+ (t = t || (n && n.size)),
+ (e = a(b.modes, e) ? e : b.modes[0]),
+ (t = a(b.sizes, t) ? t : b.sizes[0]),
+ p.put(x, { mode: e, size: t }),
+ i(y, function(t) {
+ t === e ? C.addCls("view-" + t) : C.rmCls("view-" + t);
+ }),
+ i(w, function(e) {
+ e === t ? C.addCls("view-size-" + e) : C.rmCls("view-size-" + e);
+ }),
+ u.pub("view.mode.changed", e, t);
+ },
+ P = function() {
+ return y;
+ },
+ z = function() {
+ return p.get(x).mode;
+ },
+ L = function(e) {
+ return D(e, null);
+ },
+ $ = function() {
+ return w;
+ },
+ H = function() {
+ return p.get(x).size;
+ },
+ O = function(e) {
+ return D(null, e);
+ },
+ B = function(e) {
+ var t = e.target._item;
+ u.pub("item.mouseenter", t);
+ },
+ R = function(e) {
+ var t = e.target._item;
+ u.pub("item.mouseleave", t);
+ },
+ N = function(e) {
+ var t = c(_),
+ n = t.find("a"),
+ r = t.find(".icon img"),
+ i = t.find(".label"),
+ o = t.find(".date"),
+ a = t.find(".size");
+ return (
+ t
+ .addCls(e.isFolder() ? "folder" : "file")
+ .on("mouseenter", B)
+ .on("mouseleave", R),
+ f.setLink(n, e),
+ i.text(e.label).attr("title", e.label),
+ o.attr("data-time", e.time).text(l.formatDate(e.time)),
+ a.attr("data-bytes", e.size).text(l.formatSize(e.size)),
+ (e.icon = d.icon(e.type)),
+ e.isFolder() &&
+ !e.isManaged &&
+ (t.addCls("page"), (e.icon = d.icon("folder-page"))),
+ e.isCurrentParentFolder() &&
+ ((e.icon = d.icon("folder-parent")),
+ b.setParentFolderLabels || i.addCls("l10n-parentDirectory"),
+ t.addCls("folder-parent")),
+ r.attr("src", e.icon).attr("alt", e.type),
+ (e.$view = t),
+ (t[0]._item = e),
+ t
+ );
+ },
+ I = function() {
+ var e = S.find(".item").length === S.find(".folder-parent").length;
+ e ? A.show() : A.hide();
+ },
+ j = function(e) {
+ var t = o(S.find(".item"), function(e) {
+ return e._item;
+ });
+ S.find(".item").rm(),
+ i(e, function(e) {
+ return S.app(N(e));
+ }),
+ (g.$content[0].scrollLeft = 0),
+ (g.$content[0].scrollTop = 0),
+ I(),
+ u.pub("view.changed", e, t);
+ },
+ F = function(e, t) {
+ i(e, function(e) {
+ N(e).hide().appTo(S).show();
+ }),
+ i(t, function(e) {
+ e.$view.hide().rm();
+ }),
+ I(),
+ u.pub("view.changed", e, t);
+ },
+ q = function(e) {
+ A.rmCls().addCls("l10n-" + e), I();
+ },
+ Y = function(e) {
+ e || (e = f.getItem());
+ var t = [];
+ e.parent && !b.hideParentFolder && t.push(e.parent),
+ i(e.content, function(e) {
+ (e.isFolder() && b.hideFolders) || t.push(e);
+ }),
+ q("empty"),
+ j(t);
+ },
+ Z = function(e, t, n) {
+ var r = [];
+ i(t, function(e) {
+ (e.isFolder() && b.hideFolders) || r.push(e);
+ }),
+ q("empty"),
+ F(r, n);
+ },
+ U = function() {
+ var e = C[0].offsetWidth;
+ C.rmCls("width-0").rmCls("width-1"),
+ e < 320 ? C.addCls("width-0") : e < 480 && C.addCls("width-1");
+ },
+ V = function() {
+ M(),
+ D(),
+ C.appTo(g.$content),
+ A.hide(),
+ l.setDefaultMetric(b.binaryPrefix),
+ u.sub("location.changed", Y),
+ u.sub("location.refreshed", Z),
+ u.sub("resize", U),
+ U();
+ };
+ V(),
+ (e.exports = {
+ $el: C,
+ setItems: j,
+ changeItems: F,
+ setLocation: Y,
+ setHint: q,
+ getModes: P,
+ getMode: z,
+ setMode: L,
+ getSizes: $,
+ getSize: H,
+ setSize: O,
+ });
+ },
+ function(e, t, n) {
+ "use strict";
+ var r = n(2),
+ i = r.isNum,
+ o = {
+ t: 1e3,
+ k: 1e3,
+ u: ["B", "KB", "MB", "GB", "TB", "PB", "EB", "ZB", "YB"],
+ },
+ a = {
+ t: 1024,
+ k: 1024,
+ u: ["B", "KiB", "MiB", "GiB", "TiB", "PiB", "EiB", "ZiB", "YiB"],
+ },
+ s = o,
+ c = [
+ [/YYYY/, "Y", 4],
+ [/YY/, "Y", 2],
+ [/Y/, "Y", 0],
+ [/MM/, "M", 2],
+ [/M/, "M", 0],
+ [/DD/, "D", 2],
+ [/D/, "D", 0],
+ [/HH/, "H", 2],
+ [/H/, "H", 0],
+ [/mm/, "m", 2],
+ [/m/, "m", 0],
+ [/ss/, "s", 2],
+ [/s/, "s", 0],
+ ],
+ u = "YYYY-MM-DD HH:mm",
+ l = function(e) {
+ s = e ? a : o;
+ },
+ f = function(e, t) {
+ if (((t = t || s), !i(e) || e < 0)) return "";
+ for (var n = 0, r = t.u.length - 1; e >= t.t && n < r;)
+ (e /= t.k), (n += 1);
+ return (
+ (n <= 1 ? Math.round(e) : e.toFixed(1)).toString() + " " + t.u[n]
+ );
+ },
+ d = function(e) {
+ u = e;
+ },
+ p = function(e, t) {
+ var n = String(e);
+ return t && (n = ("000" + n).substr(-t)), n;
+ },
+ h = function(e, t) {
+ if (!e || !i(e)) return "";
+ t = t || u;
+ var n = new Date(e),
+ r = {
+ Y: n.getFullYear(),
+ M: n.getMonth() + 1,
+ D: n.getDate(),
+ H: n.getHours(),
+ m: n.getMinutes(),
+ s: n.getSeconds(),
+ };
+ return (
+ c.forEach(function(e) {
+ t = t.replace(e[0], p(r[e[1]], e[2]));
+ }),
+ t
+ );
+ };
+ e.exports = {
+ setDefaultMetric: l,
+ formatSize: f,
+ setDefaultDateFormat: d,
+ formatDate: h,
+ };
+ },
+ function(e, t, n) {
+ (function(t) {
+ "use strict";
+ var r = n(2),
+ i = r.each,
+ o = r.values,
+ a = r.difference,
+ s = n(8),
+ c = s.request,
+ u = n(14),
+ l = n(12),
+ f = n(21),
+ d = t.window,
+ p = d.document,
+ h = Object.assign({ fastBrowsing: !0, unmanagedInNewWindow: !0 },
+ u.view
+ ),
+ g = h.fastBrowsing ? d.history : null,
+ m = /^.*:\/\/[^\/]*|[^\/]*$/g,
+ v = [
+ [/\/+/g, "/"],
+ [/ /g, "%20"],
+ [/!/g, "%21"],
+ [/#/g, "%23"],
+ [/\$/g, "%24"],
+ [/&/g, "%26"],
+ [/'/g, "%27"],
+ [/\(/g, "%28"],
+ [/\)/g, "%29"],
+ [/\*/g, "%2A"],
+ [/\+/g, "%2B"],
+ [/\,/g, "%2C"],
+ [/:/g, "%3A"],
+ [/;/g, "%3B"],
+ [/\=/g, "%3D"],
+ [/\?/g, "%3F"],
+ [/@/g, "%40"],
+ [/\[/g, "%5B"],
+ [/\]/g, "%5D"],
+ ],
+ b = null,
+ w = function(e) {
+ return v.reduce(function(e, t) {
+ return e.replace(t[0], t[1]);
+ }, e);
+ },
+ y = function(e) {
+ return e.replace(m, "");
+ },
+ x = (function() {
+ var e = "/a b",
+ t = p.createElement("a");
+ return (t.href = e), y(t.href) === e;
+ })(),
+ k = function(e) {
+ var t = p.createElement("a"),
+ n = void 0;
+ return (
+ (t.href = e),
+ (n = y(t.href)),
+ x && (n = encodeURIComponent(n).replace(/%2F/gi, "/")),
+ w(n)
+ );
+ },
+ _ = function() {
+ return p.domain;
+ },
+ C = function() {
+ return b;
+ },
+ S = function() {
+ return n(22).get(b);
+ },
+ A = function() {
+ return c({ action: "get", items: { href: b, what: 1 } }).then(
+ function(e) {
+ var t = n(22),
+ r = t.get(b);
+ if (e) {
+ var o = {};
+ i(e.items, function(e) {
+ var n = t.get(e);
+ o[n.absHref] = !0;
+ }),
+ i(r.content, function(e) {
+ o[e.absHref] || t.remove(e.absHref);
+ });
+ }
+ return r;
+ }
+ );
+ },
+ T = function() {
+ var e = S(),
+ t = o(e.content);
+ l.pub("location.beforeRefresh"),
+ A().then(function() {
+ var n = o(e.content),
+ r = a(n, t),
+ i = a(t, n);
+ l.pub("location.refreshed", e, r, i);
+ });
+ },
+ E = function(e, t) {
+ l.pub("location.beforeChange"),
+ (e = k(e)),
+ b !== e &&
+ ((b = e),
+ g &&
+ (t ?
+ g.replaceState({ absHref: b }, "", b) :
+ g.pushState({ absHref: b }, "", b)));
+ var n = S();
+ n.isLoaded ?
+ (l.pub("location.changed", n), T()) :
+ (f.set("loading..."),
+ A().then(function() {
+ (n.isLoaded = !0), f.set(), l.pub("location.changed", n);
+ }));
+ },
+ M = function(e, t) {
+ e.attr("href", t.absHref),
+ g &&
+ t.isFolder() &&
+ t.isManaged &&
+ e.on("click", function(e) {
+ return E(t.absHref), e.preventDefault(), !1;
+ }),
+ h.unmanagedInNewWindow &&
+ !t.isManaged &&
+ e.attr("target", "_blank");
+ },
+ D = function(e) {
+ e.state && e.state.absHref && E(e.state.absHref, !0);
+ };
+ (d.onpopstate = g ? D : null),
+ (e.exports = {
+ forceEncoding: w,
+ getDomain: _,
+ getAbsHref: C,
+ getItem: S,
+ setLocation: E,
+ refresh: T,
+ setLink: M,
+ });
+ }.call(
+ t,
+ (function() {
+ return this;
+ })()
+ ));
+ },
+ function(e, t, n) {
+ "use strict";
+ var r = n(2),
+ i = r.dom,
+ o = n(17),
+ a = function() {
+ var e = i('<div id="notification"></div>').hide().appTo(o.$root),
+ t = function(t) {
+ t ? e.html(t).show() : e.hide();
+ };
+ return { set: t };
+ };
+ e.exports = a();
+ },
+ function(e, t, n) {
+ "use strict";
+ var r = n(2),
+ i = r.keys,
+ o = r.each,
+ a = r.filter,
+ s = r.sortBy,
+ c = r.isStr,
+ u = r.isNum,
+ l = n(8),
+ f = n(20),
+ d = n(14),
+ p = n(23),
+ h = /\/$/,
+ g = /^(.*\/)([^\/]+\/?)$/,
+ m = {},
+ v = function(e, t) {
+ return c(e) && e.startsWith(t);
+ },
+ b = function(e) {
+ e = e.replace(h, "");
+ try {
+ e = decodeURIComponent(e);
+ } catch (e) {}
+ return e;
+ },
+ w = function(e) {
+ if ("/" === e) return { parent: null, name: "/" };
+ var t = g.exec(e);
+ if (!t) return null;
+ var n = { parent: t[1], name: t[2] };
+ return n.parent && !v(n.parent, d.rootHref) && (n.parent = null), n;
+ },
+ y = function(e) {
+ if (c(e)) e = { href: e };
+ else if (!e || !c(e.href)) return null;
+ var t = f.forceEncoding(e.href);
+ if (!v(t, d.rootHref)) return null;
+ var n = m[t] || _(t);
+ return (
+ u(e.time) && (n.time = e.time),
+ u(e.size) && (n.size = e.size),
+ e.managed && (n.isManaged = !0),
+ e.fetched && (n.isContentFetched = !0),
+ n
+ );
+ },
+ x = function e(t) {
+ t = f.forceEncoding(t);
+ var n = m[t];
+ n &&
+ (delete m[t],
+ n.parent && delete n.parent.content[n.absHref],
+ o(n.content, function(t) {
+ e(t.absHref);
+ }));
+ },
+ k = function(e) {
+ return new Promise(function(t) {
+ var n = y(e);
+ n.isContentFetched ?
+ t(n) :
+ l
+ .request({
+ action: "get",
+ items: { href: n.absHref, what: 1 },
+ })
+ .then(function(e) {
+ e.items &&
+ o(e.items, function(e) {
+ y(e);
+ }),
+ t(n);
+ });
+ });
+ },
+ _ = function e(t) {
+ var n = w(t),
+ r = Object.assign(Object.create(e.prototype), {
+ absHref: t,
+ type: p.getType(t),
+ label: b("/" === t ? f.getDomain() : n.name),
+ time: null,
+ size: null,
+ parent: null,
+ isManaged: null,
+ content: {},
+ });
+ return (
+ (m[t] = r),
+ n.parent &&
+ ((r.parent = y(n.parent)),
+ (r.parent.content[r.absHref] = r),
+ i(r.parent.content).length > 1 &&
+ (r.parent.isContentFetched = !0)),
+ r
+ );
+ };
+ (_.prototype = {
+ constructor: _,
+ isFolder: function() {
+ return h.test(this.absHref);
+ },
+ isCurrentFolder: function() {
+ return this.absHref === f.getAbsHref();
+ },
+ isInCurrentFolder: function() {
+ return !!this.parent && this.parent.isCurrentFolder();
+ },
+ isCurrentParentFolder: function() {
+ var e = y(f.getAbsHref());
+ return !!e && this === e.parent;
+ },
+ isDomain: function() {
+ return "/" === this.absHref;
+ },
+ isRoot: function() {
+ return this.absHref === d.rootHref;
+ },
+ isEmpty: function() {
+ return 0 === i(this.content).length;
+ },
+ fetchContent: function() {
+ return k(this.absHref);
+ },
+ getCrumb: function() {
+ for (var e = this, t = [e]; e.parent;)(e = e.parent), t.unshift(e);
+ return t;
+ },
+ getSubfolders: function() {
+ return s(
+ a(this.content, function(e) {
+ return e.isFolder();
+ }),
+ function(e) {
+ return e.label.toLowerCase();
+ }
+ );
+ },
+ getStats: function() {
+ var e = 0,
+ t = 0;
+ o(this.content, function(n) {
+ n.isFolder() ? (e += 1) : (t += 1);
+ });
+ for (var n = 0, r = this; r.parent;)(n += 1), (r = r.parent);
+ return { folders: e, files: t, depth: n };
+ },
+ }),
+ (e.exports = { get: y, remove: x });
+ },
+ function(e, t, n) {
+ "use strict";
+ var r = n(2),
+ i = r.each,
+ o = r.map,
+ a = n(7),
+ s = /\/$/,
+ c = {},
+ u = function(e) {
+ return e.replace(/[\-\[\]\/\{\}\(\)\+\?\.\\\^\$]/g, "\\$&");
+ },
+ l = function(e) {
+ i(e, function(e, t) {
+ var n =
+ "^(" +
+ o(e, function(e) {
+ return "(" + u(e).replace(/\*/g, ".*") + ")";
+ }).join("|") +
+ ")$";
+ c[t] = new RegExp(n, "i");
+ });
+ },
+ f = function(e) {
+ if (s.test(e)) return "folder";
+ var t = e.lastIndexOf("/"),
+ n = t >= 0 ? e.substr(t + 1) : e,
+ r = void 0;
+ return (
+ i(c, function(e, t) {
+ c[t].test(n) && (r = t);
+ }),
+ r ? r : "file"
+ );
+ };
+ l(Object.assign({}, a.types)), (e.exports = { getType: f });
+ },
+ function(e, t, n) {
+ (function(e) {
+ "use strict";
+ var t = n(12),
+ r = n(20),
+ i = n(14),
+ o = e.window,
+ a = Object.assign({ enabled: !1, interval: 5e3 }, i.autorefresh),
+ s = null,
+ c = function() {
+ r.refresh();
+ },
+ u = function() {
+ o.clearTimeout(s);
+ },
+ l = function() {
+ o.clearTimeout(s), (s = o.setTimeout(c, a.interval));
+ },
+ f = function() {
+ a.enabled &&
+ ((a.interval = Math.max(1e3, a.interval)),
+ t.sub("location.beforeChange", u),
+ t.sub("location.beforeRefresh", u),
+ t.sub("location.changed", l),
+ t.sub("location.refreshed", l));
+ };
+ f();
+ }.call(
+ t,
+ (function() {
+ return this;
+ })()
+ ));
+ },
+ function(e, t, n) {
+ "use strict";
+ var r = n(2),
+ i = r.each,
+ o = r.dom,
+ a = n(13),
+ s = n(14),
+ c = Object.assign({ enabled: !1 }, s.contextmenu),
+ u = '<div id="cm-overlay"></div>',
+ l = '<div class="cm-panel"><ul></ul></div>',
+ f = '<li class="cm-sep"></li>',
+ d =
+ '<li class="cm-entry"><span class="cm-icon"><img/></span><span class="cm-text"></span></li>',
+ p = '<li class="cm-label"><span class="cm-text"></span></li>',
+ h = function(e) {
+ for (; !e._cmId && e.parentNode;) e = e.parentNode;
+ return e._cmId;
+ },
+ g = function(e) {
+ var t = o(u),
+ n = function(n) {
+ n.stopPropagation(), n.preventDefault();
+ var r = h(n.target);
+ (n.target !== t[0] && void 0 === r) || (t.rm(), e(r));
+ };
+ return t.on("contextmenu", n).on("click", n);
+ },
+ m = function(e) {
+ var t = o(l),
+ n = t.find("ul"),
+ r = void 0;
+ return (
+ i(e, function(e) {
+ "-" === e.type ?
+ o(f).appTo(n) :
+ "l" === e.type ?
+ o(p).appTo(n).find(".cm-text").text(e.text) :
+ "e" === e.type &&
+ ((r = o(d).appTo(n)),
+ (r[0]._cmId = e.id),
+ r.find(".cm-text").text(e.text),
+ e.icon ?
+ r.find(".cm-icon img").attr("src", a.icon(e.icon)) :
+ r.find(".cm-icon").addCls("no-icon"));
+ }),
+ t
+ );
+ },
+ v = function(e, t, n, r) {
+ var i = 4;
+ t.css({ left: 0, top: 0, opacity: 0 }), e.show();
+ var o = e[0].getBoundingClientRect(),
+ a = t[0].getBoundingClientRect(),
+ s = o.left,
+ c = o.top,
+ u = o.width,
+ l = o.height,
+ f = a.width,
+ d = a.height,
+ p = n,
+ h = r;
+ f > u - 2 * i && ((p = i), (f = u - 2 * i)),
+ d > l - 2 * i && ((h = i), (d = l - 2 * i)),
+ p < s + i && (p = s + i),
+ p + f > s + u - i && (p = s + u - i - f),
+ h < c + i && (h = c + i),
+ h + d > c + l - i && (h = c + l - i - d),
+ t.css({
+ left: p + "px",
+ top: h + "px",
+ width: f + "px",
+ height: d + "px",
+ opacity: 1,
+ });
+ },
+ b = function(e, t, n, r) {
+ var i = g(r),
+ o = m(n);
+ i.hide().app(o).appTo("body"), v(i, o, e, t);
+ },
+ w = function() {
+ if (c.enabled) {
+ var e = [
+ { type: "e", id: "e1", text: "testing context menus" },
+ { type: "e", id: "e2", text: "another entry" },
+ { type: "e", id: "e3", text: "one with icon", icon: "folder" },
+ { type: "-" },
+ { type: "e", id: "e4", text: "one with icon", icon: "x" },
+ { type: "e", id: "e5", text: "one with icon", icon: "img" },
+ ];
+ o("#view").on("contextmenu", function(t) {
+ t.preventDefault(), b(t.pageX, t.pageY, e);
+ });
+ }
+ };
+ w();
+ },
+ function(e, t, n) {
+ "use strict";
+ var r = n(2),
+ i = r.each,
+ o = r.dom,
+ a = n(12),
+ s = n(20),
+ c = n(13),
+ u = n(14),
+ l = n(17),
+ f = Object.assign({ enabled: !1 }, u.crumb),
+ d = '<div id="crumbbar"></div>',
+ p =
+ '<a class="crumb">\n <img class="sep" src="' +
+ c.image("crumb") +
+ '" alt=">"/>\n <span class="label"></span>\n </a>',
+ h =
+ '<img class="hint" src="' +
+ c.icon("folder-page") +
+ '" alt="has index page"/>',
+ g = function(e) {
+ var t = o(p);
+ return (
+ s.setLink(t, e),
+ t.find(".label").text(e.label),
+ e.isCurrentFolder() && t.addCls("active"),
+ e.isManaged || t.app(o(h)),
+ (e._$crumb = t),
+ (t[0]._item = e),
+ t
+ );
+ },
+ m = function(e) {
+ var t = e._$crumb,
+ n = o("#crumbbar");
+ t && t.parent()[0] === n[0] ?
+ (n.children().rmCls("active"), t.addCls("active")) :
+ (n.clr(),
+ i(e.getCrumb(), function(e) {
+ n.app(g(e));
+ }));
+ },
+ v = function() {
+ f.enabled && (o(d).appTo(l.$flowbar), a.sub("location.changed", m));
+ };
+ v();
+ },
+ function(e, t, n) {
+ "use strict";
+ var r = n(28),
+ i = n(2),
+ o = i.each,
+ a = i.dom,
+ s = n(8),
+ c = n(12),
+ u = n(14),
+ l = Object.assign({ enabled: !1 }, u.custom),
+ f = function(e, t) {
+ var n = a("#content-" + t);
+ if (e && e[t].content) {
+ var i = e[t].content;
+ "md" === e[t].type && (i = r(i)), n.html(i).show();
+ } else n.hide();
+ },
+ d = function(e) {
+ s.request({ action: "get", custom: e.absHref }).then(function(e) {
+ var t = e && e.custom;
+ o(["header", "footer"], function(e) {
+ return f(t, e);
+ });
+ });
+ },
+ p = function() {
+ l.enabled &&
+ (a('<div id="content-header"></div>').hide().preTo("#content"),
+ a('<div id="content-footer"></div>').hide().appTo("#content"),
+ c.sub("location.changed", d));
+ };
+ p();
+ },
+ function(e, t, n) {
+ (function(t) {
+ !(function(t) {
+ "use strict";
+
+ function n(e) {
+ (this.tokens = []),
+ (this.tokens.links = Object.create(null)),
+ (this.options = e || b.defaults),
+ (this.rules = w.normal),
+ this.options.pedantic ?
+ (this.rules = w.pedantic) :
+ this.options.gfm &&
+ (this.options.tables ?
+ (this.rules = w.tables) :
+ (this.rules = w.gfm));
+ }
+
+ function r(e, t) {
+ if (
+ ((this.options = t || b.defaults),
+ (this.links = e),
+ (this.rules = y.normal),
+ (this.renderer = this.options.renderer || new i()),
+ (this.renderer.options = this.options), !this.links)
+ )
+ throw new Error("Tokens array requires a `links` property.");
+ this.options.pedantic ?
+ (this.rules = y.pedantic) :
+ this.options.gfm &&
+ (this.options.breaks ?
+ (this.rules = y.breaks) :
+ (this.rules = y.gfm));
+ }
+
+ function i(e) {
+ this.options = e || b.defaults;
+ }
+
+ function o() {}
+
+ function a(e) {
+ (this.tokens = []),
+ (this.token = null),
+ (this.options = e || b.defaults),
+ (this.options.renderer = this.options.renderer || new i()),
+ (this.renderer = this.options.renderer),
+ (this.renderer.options = this.options),
+ (this.slugger = new s());
+ }
+
+ function s() {
+ this.seen = {};
+ }
+
+ function c(e, t) {
+ if (t) {
+ if (c.escapeTest.test(e))
+ return e.replace(c.escapeReplace, function(e) {
+ return c.replacements[e];
+ });
+ } else if (c.escapeTestNoEncode.test(e))
+ return e.replace(c.escapeReplaceNoEncode, function(e) {
+ return c.replacements[e];
+ });
+ return e;
+ }
+
+ function u(e) {
+ return e.replace(
+ /&(#(?:\d+)|(?:#x[0-9A-Fa-f]+)|(?:\w+));?/gi,
+ function(e, t) {
+ return (
+ (t = t.toLowerCase()),
+ "colon" === t ?
+ ":" :
+ "#" === t.charAt(0) ?
+ "x" === t.charAt(1) ?
+ String.fromCharCode(parseInt(t.substring(2), 16)) :
+ String.fromCharCode(+t.substring(1)) :
+ ""
+ );
+ }
+ );
+ }
+
+ function l(e, t) {
+ return (
+ (e = e.source || e),
+ (t = t || ""), {
+ replace: function(t, n) {
+ return (
+ (n = n.source || n),
+ (n = n.replace(/(^|[^\[])\^/g, "$1")),
+ (e = e.replace(t, n)),
+ this
+ );
+ },
+ getRegex: function() {
+ return new RegExp(e, t);
+ },
+ }
+ );
+ }
+
+ function f(e, t, n) {
+ if (e) {
+ try {
+ var r = decodeURIComponent(u(n))
+ .replace(/[^\w:]/g, "")
+ .toLowerCase();
+ } catch (e) {
+ return null;
+ }
+ if (
+ 0 === r.indexOf("javascript:") ||
+ 0 === r.indexOf("vbscript:") ||
+ 0 === r.indexOf("data:")
+ )
+ return null;
+ }
+ t && !k.test(n) && (n = d(t, n));
+ try {
+ n = encodeURI(n).replace(/%25/g, "%");
+ } catch (e) {
+ return null;
+ }
+ return n;
+ }
+
+ function d(e, t) {
+ return (
+ x[" " + e] ||
+ (/^[^:]+:\/*[^\/]*$/.test(e) ?
+ (x[" " + e] = e + "/") :
+ (x[" " + e] = m(e, "/", !0))),
+ (e = x[" " + e]),
+ "//" === t.slice(0, 2) ?
+ e.replace(/:[\s\S]*/, ":") + t :
+ "/" === t.charAt(0) ?
+ e.replace(/(:\/*[^\/]*)[\s\S]*/, "$1") + t :
+ e + t
+ );
+ }
+
+ function p() {}
+
+ function h(e) {
+ for (var t, n, r = 1; r < arguments.length; r++) {
+ t = arguments[r];
+ for (n in t)
+ Object.prototype.hasOwnProperty.call(t, n) && (e[n] = t[n]);
+ }
+ return e;
+ }
+
+ function g(e, t) {
+ var n = e.replace(/\|/g, function(e, t, n) {
+ for (var r = !1, i = t; --i >= 0 && "\\" === n[i];) r = !r;
+ return r ? "|" : " |";
+ }),
+ r = n.split(/ \|/),
+ i = 0;
+ if (r.length > t) r.splice(t);
+ else
+ for (; r.length < t;) r.push("");
+ for (; i < r.length; i++) r[i] = r[i].trim().replace(/\\\|/g, "|");
+ return r;
+ }
+
+ function m(e, t, n) {
+ if (0 === e.length) return "";
+ for (var r = 0; r < e.length;) {
+ var i = e.charAt(e.length - r - 1);
+ if (i !== t || n) {
+ if (i === t || !n) break;
+ r++;
+ } else r++;
+ }
+ return e.substr(0, e.length - r);
+ }
+
+ function v(e, t) {
+ if (e.indexOf(t[1]) === -1) return -1;
+ for (var n = 0, r = 0; r < e.length; r++)
+ if ("\\" === e[r]) r++;
+ else if (e[r] === t[0]) n++;
+ else if (e[r] === t[1] && (n--, n < 0)) return r;
+ return -1;
+ }
+
+ function b(e, t, r) {
+ if ("undefined" == typeof e || null === e)
+ throw new Error("marked(): input parameter is undefined or null");
+ if ("string" != typeof e)
+ throw new Error(
+ "marked(): input parameter is of type " +
+ Object.prototype.toString.call(e) +
+ ", string expected"
+ );
+ if (r || "function" == typeof t) {
+ r || ((r = t), (t = null)), (t = h({}, b.defaults, t || {}));
+ var i,
+ o,
+ s = t.highlight,
+ u = 0;
+ try {
+ i = n.lex(e, t);
+ } catch (e) {
+ return r(e);
+ }
+ o = i.length;
+ var l = function(e) {
+ if (e) return (t.highlight = s), r(e);
+ var n;
+ try {
+ n = a.parse(i, t);
+ } catch (t) {
+ e = t;
+ }
+ return (t.highlight = s), e ? r(e) : r(null, n);
+ };
+ if (!s || s.length < 3) return l();
+ if ((delete t.highlight, !o)) return l();
+ for (; u < i.length; u++)
+ !(function(e) {
+ return "code" !== e.type ?
+ --o || l() :
+ s(e.text, e.lang, function(t, n) {
+ return t ?
+ l(t) :
+ null == n || n === e.text ?
+ --o || l() :
+ ((e.text = n), (e.escaped = !0), void(--o || l()));
+ });
+ })(i[u]);
+ } else
+ try {
+ return t && (t = h({}, b.defaults, t)), a.parse(n.lex(e, t), t);
+ } catch (e) {
+ if (
+ ((e.message +=
+ "\nPlease report this to https://github.com/markedjs/marked."),
+ (t || b.defaults).silent)
+ )
+ return (
+ "<p>An error occurred:</p><pre>" +
+ c(e.message + "", !0) +
+ "</pre>"
+ );
+ throw e;
+ }
+ }
+ var w = {
+ newline: /^\n+/,
+ code: /^( {4}[^\n]+\n*)+/,
+ fences: p,
+ hr: /^ {0,3}((?:- *){3,}|(?:_ *){3,}|(?:\* *){3,})(?:\n+|$)/,
+ heading: /^ *(#{1,6}) *([^\n]+?) *(?:#+ *)?(?:\n+|$)/,
+ nptable: p,
+ blockquote: /^( {0,3}> ?(paragraph|[^\n]*)(?:\n|$))+/,
+ list: /^( {0,3})(bull) [\s\S]+?(?:hr|def|\n{2,}(?! )(?!\1bull )\n*|\s*$)/,
+ html: "^ {0,3}(?:<(script|pre|style)[\\s>][\\s\\S]*?(?:</\\1>[^\\n]*\\n+|$)|comment[^\\n]*(\\n+|$)|<\\?[\\s\\S]*?\\?>\\n*|<![A-Z][\\s\\S]*?>\\n*|<!\\[CDATA\\[[\\s\\S]*?\\]\\]>\\n*|</?(tag)(?: +|\\n|/?>)[\\s\\S]*?(?:\\n{2,}|$)|<(?!script|pre|style)([a-z][\\w-]*)(?:attribute)*? */?>(?=\\h*\\n)[\\s\\S]*?(?:\\n{2,}|$)|</(?!script|pre|style)[a-z][\\w-]*\\s*>(?=\\h*\\n)[\\s\\S]*?(?:\\n{2,}|$))",
+ def: /^ {0,3}\[(label)\]: *\n? *<?([^\s>]+)>?(?:(?: +\n? *| *\n *)(title))? *(?:\n+|$)/,
+ table: p,
+ lheading: /^([^\n]+)\n *(=|-){2,} *(?:\n+|$)/,
+ paragraph: /^([^\n]+(?:\n(?!hr|heading|lheading| {0,3}>|<\/?(?:tag)(?: +|\n|\/?>)|<(?:script|pre|style|!--))[^\n]+)*)/,
+ text: /^[^\n]+/,
+ };
+ (w._label = /(?!\s*\])(?:\\[\[\]]|[^\[\]])+/),
+ (w._title = /(?:"(?:\\"?|[^"\\])*"|'[^'\n]*(?:\n[^'\n]+)*\n?'|\([^()]*\))/),
+ (w.def = l(w.def)
+ .replace("label", w._label)
+ .replace("title", w._title)
+ .getRegex()),
+ (w.bullet = /(?:[*+-]|\d{1,9}\.)/),
+ (w.item = /^( *)(bull) ?[^\n]*(?:\n(?!\1bull ?)[^\n]*)*/),
+ (w.item = l(w.item, "gm").replace(/bull/g, w.bullet).getRegex()),
+ (w.list = l(w.list)
+ .replace(/bull/g, w.bullet)
+ .replace(
+ "hr",
+ "\\n+(?=\\1?(?:(?:- *){3,}|(?:_ *){3,}|(?:\\* *){3,})(?:\\n+|$))"
+ )
+ .replace("def", "\\n+(?=" + w.def.source + ")")
+ .getRegex()),
+ (w._tag =
+ "address|article|aside|base|basefont|blockquote|body|caption|center|col|colgroup|dd|details|dialog|dir|div|dl|dt|fieldset|figcaption|figure|footer|form|frame|frameset|h[1-6]|head|header|hr|html|iframe|legend|li|link|main|menu|menuitem|meta|nav|noframes|ol|optgroup|option|p|param|section|source|summary|table|tbody|td|tfoot|th|thead|title|tr|track|ul"),
+ (w._comment = /<!--(?!-?>)[\s\S]*?-->/),
+ (w.html = l(w.html, "i")
+ .replace("comment", w._comment)
+ .replace("tag", w._tag)
+ .replace(
+ "attribute",
+ / +[a-zA-Z:_][\w.:-]*(?: *= *"[^"\n]*"| *= *'[^'\n]*'| *= *[^\s"'=<>`]+)?/
+ )
+ .getRegex()),
+ (w.paragraph = l(w.paragraph)
+ .replace("hr", w.hr)
+ .replace("heading", w.heading)
+ .replace("lheading", w.lheading)
+ .replace("tag", w._tag)
+ .getRegex()),
+ (w.blockquote = l(w.blockquote)
+ .replace("paragraph", w.paragraph)
+ .getRegex()),
+ (w.normal = h({}, w)),
+ (w.gfm = h({}, w.normal, {
+ fences: /^ {0,3}(`{3,}|~{3,})([^`\n]*)\n(?:|([\s\S]*?)\n)(?: {0,3}\1[~`]* *(?:\n+|$)|$)/,
+ paragraph: /^/,
+ heading: /^ *(#{1,6}) +([^\n]+?) *#* *(?:\n+|$)/,
+ })),
+ (w.gfm.paragraph = l(w.paragraph)
+ .replace(
+ "(?!",
+ "(?!" +
+ w.gfm.fences.source.replace("\\1", "\\2") +
+ "|" +
+ w.list.source.replace("\\1", "\\3") +
+ "|"
+ )
+ .getRegex()),
+ (w.tables = h({}, w.gfm, {
+ nptable: /^ *([^|\n ].*\|.*)\n *([-:]+ *\|[-| :]*)(?:\n((?:.*[^>\n ].*(?:\n|$))*)\n*|$)/,
+ table: /^ *\|(.+)\n *\|?( *[-:]+[-| :]*)(?:\n((?: *[^>\n ].*(?:\n|$))*)\n*|$)/,
+ })),
+ (w.pedantic = h({}, w.normal, {
+ html: l(
+ "^ *(?:comment *(?:\\n|\\s*$)|<(tag)[\\s\\S]+?</\\1> *(?:\\n{2,}|\\s*$)|<tag(?:\"[^\"]*\"|'[^']*'|\\s[^'\"/>\\s]*)*?/?> *(?:\\n{2,}|\\s*$))"
+ )
+ .replace("comment", w._comment)
+ .replace(
+ /tag/g,
+ "(?!(?:a|em|strong|small|s|cite|q|dfn|abbr|data|time|code|var|samp|kbd|sub|sup|i|b|u|mark|ruby|rt|rp|bdi|bdo|span|br|wbr|ins|del|img)\\b)\\w+(?!:|[^\\w\\s@]*@)\\b"
+ )
+ .getRegex(),
+ def: /^ *\[([^\]]+)\]: *<?([^\s>]+)>?(?: +(["(][^\n]+[")]))? *(?:\n+|$)/,
+ })),
+ (n.rules = w),
+ (n.lex = function(e, t) {
+ var r = new n(t);
+ return r.lex(e);
+ }),
+ (n.prototype.lex = function(e) {
+ return (
+ (e = e
+ .replace(/\r\n|\r/g, "\n")
+ .replace(/\t/g, " ")
+ .replace(/\u00a0/g, " ")
+ .replace(/\u2424/g, "\n")),
+ this.token(e, !0)
+ );
+ }),
+ (n.prototype.token = function(e, t) {
+ e = e.replace(/^ +$/gm, "");
+ for (var n, r, i, o, a, s, c, u, l, f, d, p, h, v, b, y; e;)
+ if (
+ ((i = this.rules.newline.exec(e)) &&
+ ((e = e.substring(i[0].length)),
+ i[0].length > 1 && this.tokens.push({ type: "space" })),
+ (i = this.rules.code.exec(e)))
+ )
+ (e = e.substring(i[0].length)),
+ (i = i[0].replace(/^ {4}/gm, "")),
+ this.tokens.push({
+ type: "code",
+ text: this.options.pedantic ? i : m(i, "\n"),
+ });
+ else if ((i = this.rules.fences.exec(e)))
+ (e = e.substring(i[0].length)),
+ this.tokens.push({
+ type: "code",
+ lang: i[2] ? i[2].trim() : i[2],
+ text: i[3] || "",
+ });
+ else if ((i = this.rules.heading.exec(e)))
+ (e = e.substring(i[0].length)),
+ this.tokens.push({
+ type: "heading",
+ depth: i[1].length,
+ text: i[2],
+ });
+ else if (
+ t &&
+ (i = this.rules.nptable.exec(e)) &&
+ ((s = {
+ type: "table",
+ header: g(i[1].replace(/^ *| *\| *$/g, "")),
+ align: i[2].replace(/^ *|\| *$/g, "").split(/ *\| */),
+ cells: i[3] ? i[3].replace(/\n$/, "").split("\n") : [],
+ }),
+ s.header.length === s.align.length)
+ ) {
+ for (
+ e = e.substring(i[0].length), d = 0; d < s.align.length; d++
+ )
+ /^ *-+: *$/.test(s.align[d]) ?
+ (s.align[d] = "right") :
+ /^ *:-+: *$/.test(s.align[d]) ?
+ (s.align[d] = "center") :
+ /^ *:-+ *$/.test(s.align[d]) ?
+ (s.align[d] = "left") :
+ (s.align[d] = null);
+ for (d = 0; d < s.cells.length; d++)
+ s.cells[d] = g(s.cells[d], s.header.length);
+ this.tokens.push(s);
+ } else if ((i = this.rules.hr.exec(e)))
+ (e = e.substring(i[0].length)),
+ this.tokens.push({ type: "hr" });
+ else if ((i = this.rules.blockquote.exec(e)))
+ (e = e.substring(i[0].length)),
+ this.tokens.push({ type: "blockquote_start" }),
+ (i = i[0].replace(/^ *> ?/gm, "")),
+ this.token(i, t),
+ this.tokens.push({ type: "blockquote_end" });
+ else if ((i = this.rules.list.exec(e))) {
+ for (
+ e = e.substring(i[0].length),
+ o = i[2],
+ v = o.length > 1,
+ c = {
+ type: "list_start",
+ ordered: v,
+ start: v ? +o : "",
+ loose: !1,
+ },
+ this.tokens.push(c),
+ i = i[0].match(this.rules.item),
+ u = [],
+ n = !1,
+ h = i.length,
+ d = 0; d < h; d++
+ )
+ (s = i[d]),
+ (f = s.length),
+ (s = s.replace(/^ *([*+-]|\d+\.) */, "")), ~s.indexOf("\n ") &&
+ ((f -= s.length),
+ (s = this.options.pedantic ?
+ s.replace(/^ {1,4}/gm, "") :
+ s.replace(
+ new RegExp("^ {1," + f + "}", "gm"),
+ ""
+ ))),
+ d !== h - 1 &&
+ ((a = w.bullet.exec(i[d + 1])[0]),
+ (o.length > 1 ?
+ 1 === a.length :
+ a.length > 1 ||
+ (this.options.smartLists && a !== o)) &&
+ ((e = i.slice(d + 1).join("\n") + e), (d = h - 1))),
+ (r = n || /\n\n(?!\s*$)/.test(s)),
+ d !== h - 1 &&
+ ((n = "\n" === s.charAt(s.length - 1)), r || (r = n)),
+ r && (c.loose = !0),
+ (b = /^\[[ xX]\] /.test(s)),
+ (y = void 0),
+ b &&
+ ((y = " " !== s[1]),
+ (s = s.replace(/^\[[ xX]\] +/, ""))),
+ (l = {
+ type: "list_item_start",
+ task: b,
+ checked: y,
+ loose: r,
+ }),
+ u.push(l),
+ this.tokens.push(l),
+ this.token(s, !1),
+ this.tokens.push({ type: "list_item_end" });
+ if (c.loose)
+ for (h = u.length, d = 0; d < h; d++) u[d].loose = !0;
+ this.tokens.push({ type: "list_end" });
+ } else if ((i = this.rules.html.exec(e)))
+ (e = e.substring(i[0].length)),
+ this.tokens.push({
+ type: this.options.sanitize ? "paragraph" : "html",
+ pre:
+ !this.options.sanitizer &&
+ ("pre" === i[1] ||
+ "script" === i[1] ||
+ "style" === i[1]),
+ text: i[0],
+ });
+ else if (t && (i = this.rules.def.exec(e)))
+ (e = e.substring(i[0].length)),
+ i[3] && (i[3] = i[3].substring(1, i[3].length - 1)),
+ (p = i[1].toLowerCase().replace(/\s+/g, " ")),
+ this.tokens.links[p] ||
+ (this.tokens.links[p] = { href: i[2], title: i[3] });
+ else if (
+ t &&
+ (i = this.rules.table.exec(e)) &&
+ ((s = {
+ type: "table",
+ header: g(i[1].replace(/^ *| *\| *$/g, "")),
+ align: i[2].replace(/^ *|\| *$/g, "").split(/ *\| */),
+ cells: i[3] ?
+ i[3].replace(/(?: *\| *)?\n$/, "").split("\n") :
+ [],
+ }),
+ s.header.length === s.align.length)
+ ) {
+ for (
+ e = e.substring(i[0].length), d = 0; d < s.align.length; d++
+ )
+ /^ *-+: *$/.test(s.align[d]) ?
+ (s.align[d] = "right") :
+ /^ *:-+: *$/.test(s.align[d]) ?
+ (s.align[d] = "center") :
+ /^ *:-+ *$/.test(s.align[d]) ?
+ (s.align[d] = "left") :
+ (s.align[d] = null);
+ for (d = 0; d < s.cells.length; d++)
+ s.cells[d] = g(
+ s.cells[d].replace(/^ *\| *| *\| *$/g, ""),
+ s.header.length
+ );
+ this.tokens.push(s);
+ } else if ((i = this.rules.lheading.exec(e)))
+ (e = e.substring(i[0].length)),
+ this.tokens.push({
+ type: "heading",
+ depth: "=" === i[2] ? 1 : 2,
+ text: i[1],
+ });
+ else if (t && (i = this.rules.paragraph.exec(e)))
+ (e = e.substring(i[0].length)),
+ this.tokens.push({
+ type: "paragraph",
+ text: "\n" === i[1].charAt(i[1].length - 1) ?
+ i[1].slice(0, -1) :
+ i[1],
+ });
+ else if ((i = this.rules.text.exec(e)))
+ (e = e.substring(i[0].length)),
+ this.tokens.push({ type: "text", text: i[0] });
+ else if (e)
+ throw new Error("Infinite loop on byte: " + e.charCodeAt(0));
+ return this.tokens;
+ });
+ var y = {
+ escape: /^\\([!"#$%&'()*+,\-.\/:;<=>?@\[\]\\^_`{|}~])/,
+ autolink: /^<(scheme:[^\s\x00-\x1f<>]*|email)>/,
+ url: p,
+ tag: "^comment|^</[a-zA-Z][\\w:-]*\\s*>|^<[a-zA-Z][\\w-]*(?:attribute)*?\\s*/?>|^<\\?[\\s\\S]*?\\?>|^<![a-zA-Z]+\\s[\\s\\S]*?>|^<!\\[CDATA\\[[\\s\\S]*?\\]\\]>",
+ link: /^!?\[(label)\]\(href(?:\s+(title))?\s*\)/,
+ reflink: /^!?\[(label)\]\[(?!\s*\])((?:\\[\[\]]?|[^\[\]\\])+)\]/,
+ nolink: /^!?\[(?!\s*\])((?:\[[^\[\]]*\]|\\[\[\]]|[^\[\]])*)\](?:\[\])?/,
+ strong: /^__([^\s_])__(?!_)|^\*\*([^\s*])\*\*(?!\*)|^__([^\s][\s\S]*?[^\s])__(?!_)|^\*\*([^\s][\s\S]*?[^\s])\*\*(?!\*)/,
+ em: /^_([^\s_])_(?!_)|^\*([^\s*"<\[])\*(?!\*)|^_([^\s][\s\S]*?[^\s_])_(?!_|[^\spunctuation])|^_([^\s_][\s\S]*?[^\s])_(?!_|[^\spunctuation])|^\*([^\s"<\[][\s\S]*?[^\s*])\*(?!\*)|^\*([^\s*"<\[][\s\S]*?[^\s])\*(?!\*)/,
+ code: /^(`+)([^`]|[^`][\s\S]*?[^`])\1(?!`)/,
+ br: /^( {2,}|\\)\n(?!\s*$)/,
+ del: p,
+ text: /^(`+|[^`])[\s\S]*?(?=[\\<!\[`*]|\b_| {2,}\n|$)/,
+ };
+ (y._punctuation = "!\"#$%&'()*+,\\-./:;<=>?@\\[^_{|}~"),
+ (y.em = l(y.em)
+ .replace(/punctuation/g, y._punctuation)
+ .getRegex()),
+ (y._escapes = /\\([!"#$%&'()*+,\-.\/:;<=>?@\[\]\\^_`{|}~])/g),
+ (y._scheme = /[a-zA-Z][a-zA-Z0-9+.-]{1,31}/),
+ (y._email = /[a-zA-Z0-9.!#$%&'*+\/=?^_`{|}~-]+(@)[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)+(?![-_])/),
+ (y.autolink = l(y.autolink)
+ .replace("scheme", y._scheme)
+ .replace("email", y._email)
+ .getRegex()),
+ (y._attribute = /\s+[a-zA-Z:_][\w.:-]*(?:\s*=\s*"[^"]*"|\s*=\s*'[^']*'|\s*=\s*[^\s"'=<>`]+)?/),
+ (y.tag = l(y.tag)
+ .replace("comment", w._comment)
+ .replace("attribute", y._attribute)
+ .getRegex()),
+ (y._label = /(?:\[[^\[\]]*\]|\\[\[\]]?|`[^`]*`|[^\[\]\\])*?/),
+ (y._href = /\s*(<(?:\\[<>]?|[^\s<>\\])*>|[^\s\x00-\x1f]*)/),
+ (y._title = /"(?:\\"?|[^"\\])*"|'(?:\\'?|[^'\\])*'|\((?:\\\)?|[^)\\])*\)/),
+ (y.link = l(y.link)
+ .replace("label", y._label)
+ .replace("href", y._href)
+ .replace("title", y._title)
+ .getRegex()),
+ (y.reflink = l(y.reflink).replace("label", y._label).getRegex()),
+ (y.normal = h({}, y)),
+ (y.pedantic = h({}, y.normal, {
+ strong: /^__(?=\S)([\s\S]*?\S)__(?!_)|^\*\*(?=\S)([\s\S]*?\S)\*\*(?!\*)/,
+ em: /^_(?=\S)([\s\S]*?\S)_(?!_)|^\*(?=\S)([\s\S]*?\S)\*(?!\*)/,
+ link: l(/^!?\[(label)\]\((.*?)\)/)
+ .replace("label", y._label)
+ .getRegex(),
+ reflink: l(/^!?\[(label)\]\s*\[([^\]]*)\]/)
+ .replace("label", y._label)
+ .getRegex(),
+ })),
+ (y.gfm = h({}, y.normal, {
+ escape: l(y.escape).replace("])", "~|])").getRegex(),
+ _extended_email: /[A-Za-z0-9._+-]+(@)[a-zA-Z0-9-_]+(?:\.[a-zA-Z0-9-_]*[a-zA-Z0-9])+(?![-_])/,
+ url: /^((?:ftp|https?):\/\/|www\.)(?:[a-zA-Z0-9\-]+\.?)+[^\s<]*|^email/,
+ _backpedal: /(?:[^?!.,:;*_~()&]+|\([^)]*\)|&(?![a-zA-Z0-9]+;$)|[?!.,:;*_~)]+(?!$))+/,
+ del: /^~+(?=\S)([\s\S]*?\S)~+/,
+ text: l(y.text)
+ .replace("]|", "~]|")
+ .replace(
+ "|$",
+ "|https?://|ftp://|www\\.|[a-zA-Z0-9.!#$%&'*+/=?^_`{\\|}~-]+@|$"
+ )
+ .getRegex(),
+ })),
+ (y.gfm.url = l(y.gfm.url, "i")
+ .replace("email", y.gfm._extended_email)
+ .getRegex()),
+ (y.breaks = h({}, y.gfm, {
+ br: l(y.br).replace("{2,}", "*").getRegex(),
+ text: l(y.gfm.text).replace("{2,}", "*").getRegex(),
+ })),
+ (r.rules = y),
+ (r.output = function(e, t, n) {
+ var i = new r(t, n);
+ return i.output(e);
+ }),
+ (r.prototype.output = function(e) {
+ for (var t, n, i, o, a, s, u = ""; e;)
+ if ((a = this.rules.escape.exec(e)))
+ (e = e.substring(a[0].length)), (u += c(a[1]));
+ else if ((a = this.rules.tag.exec(e)))
+ !this.inLink && /^<a /i.test(a[0]) ?
+ (this.inLink = !0) :
+ this.inLink && /^<\/a>/i.test(a[0]) && (this.inLink = !1), !this.inRawBlock &&
+ /^<(pre|code|kbd|script)(\s|>)/i.test(a[0]) ?
+ (this.inRawBlock = !0) :
+ this.inRawBlock &&
+ /^<\/(pre|code|kbd|script)(\s|>)/i.test(a[0]) &&
+ (this.inRawBlock = !1),
+ (e = e.substring(a[0].length)),
+ (u += this.options.sanitize ?
+ this.options.sanitizer ?
+ this.options.sanitizer(a[0]) :
+ c(a[0]) :
+ a[0]);
+ else if ((a = this.rules.link.exec(e))) {
+ var l = v(a[2], "()");
+ if (l > -1) {
+ var f = a[2].length - l;
+ (a[2] = a[2].substring(0, l)),
+ (a[0] = a[0].substring(0, a[0].length - f));
+ }
+ (e = e.substring(a[0].length)),
+ (this.inLink = !0),
+ (i = a[2]),
+ this.options.pedantic ?
+ ((t = /^([^'"]*[^\s])\s+(['"])(.*)\2/.exec(i)),
+ t ? ((i = t[1]), (o = t[3])) : (o = "")) :
+ (o = a[3] ? a[3].slice(1, -1) : ""),
+ (i = i.trim().replace(/^<([\s\S]*)>$/, "$1")),
+ (u += this.outputLink(a, {
+ href: r.escapes(i),
+ title: r.escapes(o),
+ })),
+ (this.inLink = !1);
+ } else if (
+ (a = this.rules.reflink.exec(e)) ||
+ (a = this.rules.nolink.exec(e))
+ ) {
+ if (
+ ((e = e.substring(a[0].length)),
+ (t = (a[2] || a[1]).replace(/\s+/g, " ")),
+ (t = this.links[t.toLowerCase()]), !t || !t.href)
+ ) {
+ (u += a[0].charAt(0)), (e = a[0].substring(1) + e);
+ continue;
+ }
+ (this.inLink = !0),
+ (u += this.outputLink(a, t)),
+ (this.inLink = !1);
+ } else if ((a = this.rules.strong.exec(e)))
+ (e = e.substring(a[0].length)),
+ (u += this.renderer.strong(
+ this.output(a[4] || a[3] || a[2] || a[1])
+ ));
+ else if ((a = this.rules.em.exec(e)))
+ (e = e.substring(a[0].length)),
+ (u += this.renderer.em(
+ this.output(a[6] || a[5] || a[4] || a[3] || a[2] || a[1])
+ ));
+ else if ((a = this.rules.code.exec(e)))
+ (e = e.substring(a[0].length)),
+ (u += this.renderer.codespan(c(a[2].trim(), !0)));
+ else if ((a = this.rules.br.exec(e)))
+ (e = e.substring(a[0].length)), (u += this.renderer.br());
+ else if ((a = this.rules.del.exec(e)))
+ (e = e.substring(a[0].length)),
+ (u += this.renderer.del(this.output(a[1])));
+ else if ((a = this.rules.autolink.exec(e)))
+ (e = e.substring(a[0].length)),
+ "@" === a[2] ?
+ ((n = c(this.mangle(a[1]))), (i = "mailto:" + n)) :
+ ((n = c(a[1])), (i = n)),
+ (u += this.renderer.link(i, null, n));
+ else if (this.inLink || !(a = this.rules.url.exec(e))) {
+ if ((a = this.rules.text.exec(e)))
+ (e = e.substring(a[0].length)),
+ (u += this.inRawBlock ?
+ this.renderer.text(a[0]) :
+ this.renderer.text(c(this.smartypants(a[0]))));
+ else if (e)
+ throw new Error(
+ "Infinite loop on byte: " + e.charCodeAt(0)
+ );
+ } else {
+ if ("@" === a[2])(n = c(a[0])), (i = "mailto:" + n);
+ else {
+ do(s = a[0]), (a[0] = this.rules._backpedal.exec(a[0])[0]);
+ while (s !== a[0]);
+ (n = c(a[0])), (i = "www." === a[1] ? "http://" + n : n);
+ }
+ (e = e.substring(a[0].length)),
+ (u += this.renderer.link(i, null, n));
+ }
+ return u;
+ }),
+ (r.escapes = function(e) {
+ return e ? e.replace(r.rules._escapes, "$1") : e;
+ }),
+ (r.prototype.outputLink = function(e, t) {
+ var n = t.href,
+ r = t.title ? c(t.title) : null;
+ return "!" !== e[0].charAt(0) ?
+ this.renderer.link(n, r, this.output(e[1])) :
+ this.renderer.image(n, r, c(e[1]));
+ }),
+ (r.prototype.smartypants = function(e) {
+ return this.options.smartypants ?
+ e
+ .replace(/---/g, "—")
+ .replace(/--/g, "–")
+ .replace(/(^|[-\u2014\/(\[{"\s])'/g, "$1‘")
+ .replace(/'/g, "’")
+ .replace(/(^|[-\u2014\/(\[{\u2018\s])"/g, "$1“")
+ .replace(/"/g, "”")
+ .replace(/\.{3}/g, "…") :
+ e;
+ }),
+ (r.prototype.mangle = function(e) {
+ if (!this.options.mangle) return e;
+ for (var t, n = "", r = e.length, i = 0; i < r; i++)
+ (t = e.charCodeAt(i)),
+ Math.random() > 0.5 && (t = "x" + t.toString(16)),
+ (n += "&#" + t + ";");
+ return n;
+ }),
+ (i.prototype.code = function(e, t, n) {
+ var r = (t || "").match(/\S*/)[0];
+ if (this.options.highlight) {
+ var i = this.options.highlight(e, r);
+ null != i && i !== e && ((n = !0), (e = i));
+ }
+ return r ?
+ '<pre><code class="' +
+ this.options.langPrefix +
+ c(r, !0) +
+ '">' +
+ (n ? e : c(e, !0)) +
+ "</code></pre>\n" :
+ "<pre><code>" + (n ? e : c(e, !0)) + "</code></pre>";
+ }),
+ (i.prototype.blockquote = function(e) {
+ return "<blockquote>\n" + e + "</blockquote>\n";
+ }),
+ (i.prototype.html = function(e) {
+ return e;
+ }),
+ (i.prototype.heading = function(e, t, n, r) {
+ return this.options.headerIds ?
+ "<h" +
+ t +
+ ' id="' +
+ this.options.headerPrefix +
+ r.slug(n) +
+ '">' +
+ e +
+ "</h" +
+ t +
+ ">\n" :
+ "<h" + t + ">" + e + "</h" + t + ">\n";
+ }),
+ (i.prototype.hr = function() {
+ return this.options.xhtml ? "<hr/>\n" : "<hr>\n";
+ }),
+ (i.prototype.list = function(e, t, n) {
+ var r = t ? "ol" : "ul",
+ i = t && 1 !== n ? ' start="' + n + '"' : "";
+ return "<" + r + i + ">\n" + e + "</" + r + ">\n";
+ }),
+ (i.prototype.listitem = function(e) {
+ return "<li>" + e + "</li>\n";
+ }),
+ (i.prototype.checkbox = function(e) {
+ return (
+ "<input " +
+ (e ? 'checked="" ' : "") +
+ 'disabled="" type="checkbox"' +
+ (this.options.xhtml ? " /" : "") +
+ "> "
+ );
+ }),
+ (i.prototype.paragraph = function(e) {
+ return "<p>" + e + "</p>\n";
+ }),
+ (i.prototype.table = function(e, t) {
+ return (
+ t && (t = "<tbody>" + t + "</tbody>"),
+ "<table>\n<thead>\n" + e + "</thead>\n" + t + "</table>\n"
+ );
+ }),
+ (i.prototype.tablerow = function(e) {
+ return "<tr>\n" + e + "</tr>\n";
+ }),
+ (i.prototype.tablecell = function(e, t) {
+ var n = t.header ? "th" : "td",
+ r = t.align ?
+ "<" + n + ' align="' + t.align + '">' :
+ "<" + n + ">";
+ return r + e + "</" + n + ">\n";
+ }),
+ (i.prototype.strong = function(e) {
+ return "<strong>" + e + "</strong>";
+ }),
+ (i.prototype.em = function(e) {
+ return "<em>" + e + "</em>";
+ }),
+ (i.prototype.codespan = function(e) {
+ return "<code>" + e + "</code>";
+ }),
+ (i.prototype.br = function() {
+ return this.options.xhtml ? "<br/>" : "<br>";
+ }),
+ (i.prototype.del = function(e) {
+ return "<del>" + e + "</del>";
+ }),
+ (i.prototype.link = function(e, t, n) {
+ if (
+ ((e = f(this.options.sanitize, this.options.baseUrl, e)),
+ null === e)
+ )
+ return n;
+ var r = '<a href="' + c(e) + '"';
+ return t && (r += ' title="' + t + '"'), (r += ">" + n + "</a>");
+ }),
+ (i.prototype.image = function(e, t, n) {
+ if (
+ ((e = f(this.options.sanitize, this.options.baseUrl, e)),
+ null === e)
+ )
+ return n;
+ var r = '<img src="' + e + '" alt="' + n + '"';
+ return (
+ t && (r += ' title="' + t + '"'),
+ (r += this.options.xhtml ? "/>" : ">")
+ );
+ }),
+ (i.prototype.text = function(e) {
+ return e;
+ }),
+ (o.prototype.strong = o.prototype.em = o.prototype.codespan = o.prototype.del = o.prototype.text = function(
+ e
+ ) {
+ return e;
+ }),
+ (o.prototype.link = o.prototype.image = function(e, t, n) {
+ return "" + n;
+ }),
+ (o.prototype.br = function() {
+ return "";
+ }),
+ (a.parse = function(e, t) {
+ var n = new a(t);
+ return n.parse(e);
+ }),
+ (a.prototype.parse = function(e) {
+ (this.inline = new r(e.links, this.options)),
+ (this.inlineText = new r(
+ e.links,
+ h({}, this.options, { renderer: new o() })
+ )),
+ (this.tokens = e.reverse());
+ for (var t = ""; this.next();) t += this.tok();
+ return t;
+ }),
+ (a.prototype.next = function() {
+ return (this.token = this.tokens.pop());
+ }),
+ (a.prototype.peek = function() {
+ return this.tokens[this.tokens.length - 1] || 0;
+ }),
+ (a.prototype.parseText = function() {
+ for (var e = this.token.text;
+ "text" === this.peek().type;)
+ e += "\n" + this.next().text;
+ return this.inline.output(e);
+ }),
+ (a.prototype.tok = function() {
+ switch (this.token.type) {
+ case "space":
+ return "";
+ case "hr":
+ return this.renderer.hr();
+ case "heading":
+ return this.renderer.heading(
+ this.inline.output(this.token.text),
+ this.token.depth,
+ u(this.inlineText.output(this.token.text)),
+ this.slugger
+ );
+ case "code":
+ return this.renderer.code(
+ this.token.text,
+ this.token.lang,
+ this.token.escaped
+ );
+ case "table":
+ var e,
+ t,
+ n,
+ r,
+ i = "",
+ o = "";
+ for (n = "", e = 0; e < this.token.header.length; e++)
+ n += this.renderer.tablecell(
+ this.inline.output(this.token.header[e]), { header: !0, align: this.token.align[e] }
+ );
+ for (
+ i += this.renderer.tablerow(n), e = 0; e < this.token.cells.length; e++
+ ) {
+ for (
+ t = this.token.cells[e], n = "", r = 0; r < t.length; r++
+ )
+ n += this.renderer.tablecell(this.inline.output(t[r]), {
+ header: !1,
+ align: this.token.align[r],
+ });
+ o += this.renderer.tablerow(n);
+ }
+ return this.renderer.table(i, o);
+ case "blockquote_start":
+ for (o = "";
+ "blockquote_end" !== this.next().type;)
+ o += this.tok();
+ return this.renderer.blockquote(o);
+ case "list_start":
+ o = "";
+ for (
+ var a = this.token.ordered, s = this.token.start;
+ "list_end" !== this.next().type;
+
+ )
+ o += this.tok();
+ return this.renderer.list(o, a, s);
+ case "list_item_start":
+ o = "";
+ var c = this.token.loose;
+ for (
+ this.token.task &&
+ (o += this.renderer.checkbox(this.token.checked));
+ "list_item_end" !== this.next().type;
+
+ )
+ o +=
+ c || "text" !== this.token.type ?
+ this.tok() :
+ this.parseText();
+ return this.renderer.listitem(o);
+ case "html":
+ return this.renderer.html(this.token.text);
+ case "paragraph":
+ return this.renderer.paragraph(
+ this.inline.output(this.token.text)
+ );
+ case "text":
+ return this.renderer.paragraph(this.parseText());
+ default:
+ var l =
+ 'Token with "' + this.token.type + '" type was not found.';
+ if (!this.options.silent) throw new Error(l);
+ console.log(l);
+ }
+ }),
+ (s.prototype.slug = function(e) {
+ var t = e
+ .toLowerCase()
+ .trim()
+ .replace(
+ /[\u2000-\u206F\u2E00-\u2E7F\\'!"#$%&()*+,.\/:;<=>?@[\]^`{|}~]/g,
+ ""
+ )
+ .replace(/\s/g, "-");
+ if (this.seen.hasOwnProperty(t)) {
+ var n = t;
+ do this.seen[n]++, (t = n + "-" + this.seen[n]);
+ while (this.seen.hasOwnProperty(t));
+ }
+ return (this.seen[t] = 0), t;
+ }),
+ (c.escapeTest = /[&<>"']/),
+ (c.escapeReplace = /[&<>"']/g),
+ (c.replacements = {
+ "&": "&",
+ "<": "<",
+ ">": ">",
+ '"': """,
+ "'": "'",
+ }),
+ (c.escapeTestNoEncode = /[<>"']|&(?!#?\w+;)/),
+ (c.escapeReplaceNoEncode = /[<>"']|&(?!#?\w+;)/g);
+ var x = {},
+ k = /^$|^[a-z][a-z0-9+.-]*:|^[?#]/i;
+ (p.exec = p),
+ (b.options = b.setOptions = function(e) {
+ return h(b.defaults, e), b;
+ }),
+ (b.getDefaults = function() {
+ return {
+ baseUrl: null,
+ breaks: !1,
+ gfm: !0,
+ headerIds: !0,
+ headerPrefix: "",
+ highlight: null,
+ langPrefix: "language-",
+ mangle: !0,
+ pedantic: !1,
+ renderer: new i(),
+ sanitize: !1,
+ sanitizer: null,
+ silent: !1,
+ smartLists: !1,
+ smartypants: !1,
+ tables: !0,
+ xhtml: !1,
+ };
+ }),
+ (b.defaults = b.getDefaults()),
+ (b.Parser = a),
+ (b.parser = a.parse),
+ (b.Renderer = i),
+ (b.TextRenderer = o),
+ (b.Lexer = n),
+ (b.lexer = n.lex),
+ (b.InlineLexer = r),
+ (b.inlineLexer = r.output),
+ (b.Slugger = s),
+ (b.parse = b),
+ (e.exports = b);
+ })(this || ("undefined" != typeof window ? window : t));
+ }.call(
+ t,
+ (function() {
+ return this;
+ })()
+ ));
+ },
+ function(e, t, n) {
+ "use strict";
+ var r = n(2),
+ i = r.each,
+ o = r.dom,
+ a = n(8),
+ s = n(12),
+ c = n(20),
+ u = n(13),
+ l = n(14),
+ f = Object.assign({
+ enabled: !1,
+ type: "php-tar",
+ packageName: "package",
+ alwaysVisible: !1,
+ },
+ l.download
+ ),
+ d =
+ '<div id="download" class="tool">\n <img src="' +
+ u.image("download") +
+ '" alt="download"/>\n </div>',
+ p = [],
+ h = void 0,
+ g = function(e) {
+ (p = e.slice(0)), p.length ? h.show() : f.alwaysVisible || h.hide();
+ },
+ m = function() {
+ var e = f.type,
+ t = f.packageName,
+ n = "shell-zip" === e ? "zip" : "tar";
+ t || (t = 1 === p.length ? p[0].label : c.getItem().label);
+ var r = {
+ action: "download",
+ as: t + "." + n,
+ type: e,
+ baseHref: c.getAbsHref(),
+ hrefs: "",
+ };
+ i(p, function(e, t) {
+ r["hrefs[" + t + "]"] = e.absHref;
+ }),
+ a.formRequest(r);
+ },
+ v = function() {
+ f.enabled &&
+ ((h = o(d).hide().appTo("#toolbar").on("click", m)),
+ f.alwaysVisible && h.show(),
+ s.sub("selection", g));
+ };
+ v();
+ },
+ function(e, t, n) {
+ "use strict";
+ var r = n(2),
+ i = r.filter,
+ o = r.debounce,
+ a = r.parsePattern,
+ s = r.dom,
+ c = n(12),
+ u = n(20),
+ l = n(13),
+ f = n(14),
+ d = n(18),
+ p = Object.assign({ enabled: !1, advanced: !1, debounceTime: 100, ignorecase: !0 },
+ f.filter
+ ),
+ h =
+ '<div id="filter" class="tool">\n <img src="' +
+ l.image("filter") +
+ '" alt="filter"/>\n <input class="l10n_ph-filter" type="text" value=""/>\n </div>',
+ g = !1,
+ m = "",
+ v = void 0,
+ b = void 0,
+ w = function() {
+ var e =
+ arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : "";
+ if (e !== m) {
+ if (((m = e), !e)) return void d.setLocation();
+ v.addCls("pending");
+ var t = new RegExp(e, p.ignorecase ? "i" : ""),
+ n = i(u.getItem().content, function(e) {
+ return t.test(e.label);
+ });
+ v.rmCls("pending"), d.setHint("noMatch"), d.setItems(n);
+ }
+ },
+ y = function() {
+ g
+ ?
+ (v.addCls("active"), b[0].focus(), w(a(b.val(), p.advanced))) :
+ (w(), v.rmCls("active"));
+ },
+ x = function() {
+ (g = !g), y();
+ },
+ k = function() {
+ (g = !1), b.val(""), y();
+ },
+ _ = function() {
+ p.enabled &&
+ ((v = s(h).appTo("#toolbar")),
+ (b = v.find("input")),
+ v.find("img").on("click", x),
+ b.on("keyup", o(y, p.debounceTime)),
+ c.sub("location.changed", k));
+ };
+ _();
+ },
+ function(e, t, n) {
+ (function(e) {
+ "use strict";
+ var t = n(2),
+ r = t.map,
+ i = n(12),
+ o = n(14),
+ a = e.window,
+ s = Object.assign({ enabled: !1, id: "UA-000000-0" },
+ o["google-analytics-ua"]
+ ),
+ c = function() {
+ !(function(e, t, n, r, i, o, a) {
+ (e.GoogleAnalyticsObject = i),
+ (e[i] =
+ e[i] ||
+ function() {
+ (e[i].q = e[i].q || []).push(arguments);
+ }),
+ (e[i].l = 1 * new Date()),
+ (o = t.createElement(n)),
+ (a = t.getElementsByTagName(n)[0]),
+ (o.async = 1),
+ (o.src = r),
+ a.parentNode.insertBefore(o, a);
+ })(
+ window,
+ document,
+ "script",
+ "//www.google-analytics.com/analytics.js",
+ "ga"
+ );
+ },
+ u = function() {
+ s.enabled &&
+ (c(),
+ a.ga("create", s.id, "auto"),
+ i.sub("location.changed", function(e) {
+ var t = a.location;
+ a.ga("send", "pageview", {
+ location: t.protocol + "//" + t.host + e.absHref,
+ title: r(e.getCrumb(), function(e) {
+ return e.label;
+ }).join(" > "),
+ });
+ }));
+ };
+ u();
+ }.call(
+ t,
+ (function() {
+ return this;
+ })()
+ ));
+ },
+ function(e, t, n) {
+ (function(e) {
+ "use strict";
+ var t = n(33),
+ r = n(2),
+ i = r.isNum,
+ o = r.dom,
+ a = n(12),
+ s = n(19),
+ c = n(13),
+ u = n(14),
+ l = n(16),
+ f = Object.assign({ enabled: !1, show: !1, qrcode: !0, qrColor: "#999" },
+ u.info
+ ),
+ d =
+ '<div id="info">\n <div class="icon"><img/></div>\n <div class="block">\n <div class="label"></div>\n <div class="time"></div>\n <div class="size"></div>\n <div class="content">\n <span class="folders"></span> <span class="l10n-folders"></span>,\n <span class="files"></span> <span class="l10n-files"></span>\n </div>\n </div>\n <div class="qrcode"/>\n </div>',
+ p =
+ '<div class="block">\n <h1 class="l10n-info">Info</h1>\n <div id="view-info" class="button view">\n <img src="' +
+ c.image("info-toggle") +
+ '" alt="view-info"/>\n </div>\n </div>',
+ h = "ext/info",
+ g = void 0,
+ m = void 0,
+ v = void 0,
+ b = void 0,
+ w = void 0,
+ y = void 0,
+ x = void 0,
+ k = void 0,
+ _ = void 0,
+ C = function() {
+ l.get(h) ?
+ (o("#view-info").addCls("active"), o("#info").show()) :
+ (o("#view-info").rmCls("active"), o("#info").hide());
+ },
+ S = function(n) {
+ var r = n.thumbRational || n.icon,
+ o = !!n.thumbRational;
+ if (
+ ((!n.isCurrentFolder() && r) || (r = c.icon("folder")),
+ g.attr("src", r),
+ o ? g.addCls("thumb") : g.rmCls("thumb"),
+ m.text(n.label),
+ i(n.time) ? v.text(s.formatDate(n.time)) : v.text("."),
+ i(n.size) ? (b.text(s.formatSize(n.size)), b.show()) : b.hide(),
+ n.isContentFetched)
+ ) {
+ var a = n.getStats();
+ y.text(a.folders), x.text(a.files), w.show();
+ } else w.hide();
+ if (f.qrcode) {
+ var u = e.window.location;
+ k.clr().app(
+ t({
+ render: "image",
+ size: 200,
+ fill: f.qrFill,
+ back: f.qrBack,
+ text: u.protocol + "//" + u.host + n.absHref,
+ crisp: !0,
+ quiet: 1,
+ })
+ );
+ }
+ },
+ A = function(e) {
+ S(e);
+ },
+ T = function() {
+ S(_);
+ },
+ E = function(e) {
+ (_ = e), S(_);
+ },
+ M = function() {
+ if (f.enabled) {
+ var e = o(d).hide().appTo("#mainrow");
+ (g = e.find(".icon img")),
+ (m = e.find(".label")),
+ (v = e.find(".time")),
+ (b = e.find(".size")),
+ (w = e.find(".content")),
+ (y = e.find(".folders")),
+ (x = e.find(".files")),
+ (k = e.find(".qrcode")),
+ f.qrcode || k.rm(),
+ o(p)
+ .appTo("#sidebar")
+ .find("#view-info")
+ .on("click", function(e) {
+ l.put(h, !l.get(h)),
+ C(),
+ a.pub("resize"),
+ e.preventDefault();
+ }),
+ "boolean" != typeof l.get(h) && l.put(h, f.show),
+ C(),
+ a.sub("location.changed", E),
+ a.sub("item.mouseenter", A),
+ a.sub("item.mouseleave", T);
+ }
+ };
+ M();
+ }.call(
+ t,
+ (function() {
+ return this;
+ })()
+ ));
+ },
+ function(e, t, n) {
+ var r, i, o;
+ !(function(t, n) {
+ e.exports = n();
+ })(this, function() {
+ return (function(e) {
+ function t(r) {
+ if (n[r]) return n[r].exports;
+ var i = (n[r] = { exports: {}, id: r, loaded: !1 });
+ return (
+ e[r].call(i.exports, i, i.exports, t), (i.loaded = !0), i.exports
+ );
+ }
+ var n = {};
+ return (t.m = e), (t.c = n), (t.p = ""), t(0);
+ })([
+ function(e, t, n) {
+ "use strict";
+ var r = n(1),
+ i = r.create_canvas,
+ o = r.canvas_to_img,
+ a = r.dpr,
+ s = n(2),
+ c = n(3),
+ u = n(4);
+ e.exports = function(e) {
+ var t = Object.assign({}, s, e),
+ n = c(t.text, t.ecLevel, t.minVersion, t.quiet),
+ r = t.ratio || a,
+ l = i(t.size, r),
+ f = l.getContext("2d");
+ return f.scale(r, r), u(n, f, t), "image" === t.render ? o(l) : l;
+ };
+ },
+ function(e, t) {
+ "use strict";
+ var n = window,
+ r = n.document,
+ i = n.devicePixelRatio || 1,
+ o = function(e) {
+ return r.createElement(e);
+ },
+ a = function(e, t) {
+ return e.getAttribute(t);
+ },
+ s = function(e, t, n) {
+ return e.setAttribute(t, n);
+ },
+ c = function(e, t) {
+ var n = o("canvas");
+ return (
+ s(n, "width", e * t),
+ s(n, "height", e * t),
+ (n.style.width = e + "px"),
+ (n.style.height = e + "px"),
+ n
+ );
+ },
+ u = function(e) {
+ var t = o("img");
+ return (
+ s(t, "crossorigin", "anonymous"),
+ s(t, "src", e.toDataURL("image/png")),
+ s(t, "width", a(e, "width")),
+ s(t, "height", a(e, "height")),
+ (t.style.width = e.style.width),
+ (t.style.height = e.style.height),
+ t
+ );
+ };
+ e.exports = { create_canvas: c, canvas_to_img: u, dpr: i };
+ },
+ function(e, t) {
+ "use strict";
+ e.exports = {
+ render: "image",
+ crisp: !0,
+ minVersion: 1,
+ ecLevel: "L",
+ size: 200,
+ ratio: null,
+ fill: "#333",
+ back: "#fff",
+ text: "no text",
+ rounded: 0,
+ quiet: 0,
+ mode: "plain",
+ mSize: 30,
+ mPosX: 50,
+ mPosY: 50,
+ label: "no label",
+ fontname: "sans",
+ fontcolor: "#333",
+ image: null,
+ };
+ },
+ function(n, a) {
+ "use strict";
+ var s =
+ "function" == typeof Symbol &&
+ "symbol" == typeof Symbol.iterator ?
+
+ function(e) {
+ return typeof e;
+ } :
+ function(e) {
+ return e &&
+ "function" == typeof Symbol &&
+ e.constructor === Symbol &&
+ e !== Symbol.prototype ?
+ "symbol" :
+ typeof e;
+ },
+ c = /code length overflow/i,
+ u = (function() {
+ var n = (function() {
+ function e(t, n) {
+ if ("undefined" == typeof t.length)
+ throw new Error(t.length + "/" + n);
+ var r = (function() {
+ for (var e = 0; e < t.length && 0 == t[e];) e += 1;
+ for (
+ var r = new Array(t.length - e + n), i = 0; i < t.length - e; i += 1
+ )
+ r[i] = t[i + e];
+ return r;
+ })(),
+ i = {};
+ return (
+ (i.getAt = function(e) {
+ return r[e];
+ }),
+ (i.getLength = function() {
+ return r.length;
+ }),
+ (i.multiply = function(t) {
+ for (
+ var n = new Array(i.getLength() + t.getLength() - 1),
+ r = 0; r < i.getLength(); r += 1
+ )
+ for (var o = 0; o < t.getLength(); o += 1)
+ n[r + o] ^= a.gexp(
+ a.glog(i.getAt(r)) + a.glog(t.getAt(o))
+ );
+ return e(n, 0);
+ }),
+ (i.mod = function(t) {
+ if (i.getLength() - t.getLength() < 0) return i;
+ for (
+ var n = a.glog(i.getAt(0)) - a.glog(t.getAt(0)),
+ r = new Array(i.getLength()),
+ o = 0; o < i.getLength(); o += 1
+ )
+ r[o] = i.getAt(o);
+ for (var o = 0; o < t.getLength(); o += 1)
+ r[o] ^= a.gexp(a.glog(t.getAt(o)) + n);
+ return e(r, 0).mod(t);
+ }),
+ i
+ );
+ }
+ var t = function(t, n) {
+ var i = 236,
+ a = 17,
+ l = t,
+ f = r[n],
+ d = null,
+ p = 0,
+ g = null,
+ m = new Array(),
+ v = {},
+ b = function(e, t) {
+ (p = 4 * l + 17),
+ (d = (function(e) {
+ for (var t = new Array(e), n = 0; n < e; n += 1) {
+ t[n] = new Array(e);
+ for (var r = 0; r < e; r += 1) t[n][r] = null;
+ }
+ return t;
+ })(p)),
+ w(0, 0),
+ w(p - 7, 0),
+ w(0, p - 7),
+ k(),
+ x(),
+ C(e, t),
+ l >= 7 && _(e),
+ null == g && (g = T(l, f, m)),
+ S(g, t);
+ },
+ w = function(e, t) {
+ for (var n = -1; n <= 7; n += 1)
+ if (!(e + n <= -1 || p <= e + n))
+ for (var r = -1; r <= 7; r += 1)
+ t + r <= -1 ||
+ p <= t + r ||
+ ((0 <= n && n <= 6 && (0 == r || 6 == r)) ||
+ (0 <= r && r <= 6 && (0 == n || 6 == n)) ||
+ (2 <= n && n <= 4 && 2 <= r && r <= 4) ?
+ (d[e + n][t + r] = !0) :
+ (d[e + n][t + r] = !1));
+ },
+ y = function() {
+ for (var e = 0, t = 0, n = 0; n < 8; n += 1) {
+ b(!0, n);
+ var r = o.getLostPoint(v);
+ (0 == n || e > r) && ((e = r), (t = n));
+ }
+ return t;
+ },
+ x = function() {
+ for (var e = 8; e < p - 8; e += 1)
+ null == d[e][6] && (d[e][6] = e % 2 == 0);
+ for (var t = 8; t < p - 8; t += 1)
+ null == d[6][t] && (d[6][t] = t % 2 == 0);
+ },
+ k = function() {
+ for (
+ var e = o.getPatternPosition(l), t = 0; t < e.length; t += 1
+ )
+ for (var n = 0; n < e.length; n += 1) {
+ var r = e[t],
+ i = e[n];
+ if (null == d[r][i])
+ for (var a = -2; a <= 2; a += 1)
+ for (var s = -2; s <= 2; s += 1)
+ a == -2 ||
+ 2 == a ||
+ s == -2 ||
+ 2 == s ||
+ (0 == a && 0 == s) ?
+ (d[r + a][i + s] = !0) :
+ (d[r + a][i + s] = !1);
+ }
+ },
+ _ = function(e) {
+ for (
+ var t = o.getBCHTypeNumber(l), n = 0; n < 18; n += 1
+ ) {
+ var r = !e && 1 == ((t >> n) & 1);
+ d[Math.floor(n / 3)][(n % 3) + p - 8 - 3] = r;
+ }
+ for (var n = 0; n < 18; n += 1) {
+ var r = !e && 1 == ((t >> n) & 1);
+ d[(n % 3) + p - 8 - 3][Math.floor(n / 3)] = r;
+ }
+ },
+ C = function(e, t) {
+ for (
+ var n = (f << 3) | t, r = o.getBCHTypeInfo(n), i = 0; i < 15; i += 1
+ ) {
+ var a = !e && 1 == ((r >> i) & 1);
+ i < 6 ?
+ (d[i][8] = a) :
+ i < 8 ?
+ (d[i + 1][8] = a) :
+ (d[p - 15 + i][8] = a);
+ }
+ for (var i = 0; i < 15; i += 1) {
+ var a = !e && 1 == ((r >> i) & 1);
+ i < 8 ?
+ (d[8][p - i - 1] = a) :
+ i < 9 ?
+ (d[8][15 - i - 1 + 1] = a) :
+ (d[8][15 - i - 1] = a);
+ }
+ d[p - 8][8] = !e;
+ },
+ S = function(e, t) {
+ for (
+ var n = -1,
+ r = p - 1,
+ i = 7,
+ a = 0,
+ s = o.getMaskFunction(t),
+ c = p - 1; c > 0; c -= 2
+ )
+ for (6 == c && (c -= 1);;) {
+ for (var u = 0; u < 2; u += 1)
+ if (null == d[r][c - u]) {
+ var l = !1;
+ a < e.length && (l = 1 == ((e[a] >>> i) & 1));
+ var f = s(r, c - u);
+ f && (l = !l),
+ (d[r][c - u] = l),
+ (i -= 1),
+ i == -1 && ((a += 1), (i = 7));
+ }
+ if (((r += n), r < 0 || p <= r)) {
+ (r -= n), (n = -n);
+ break;
+ }
+ }
+ },
+ A = function(t, n) {
+ for (
+ var r = 0,
+ i = 0,
+ a = 0,
+ s = new Array(n.length),
+ c = new Array(n.length),
+ u = 0; u < n.length; u += 1
+ ) {
+ var l = n[u].dataCount,
+ f = n[u].totalCount - l;
+ (i = Math.max(i, l)),
+ (a = Math.max(a, f)),
+ (s[u] = new Array(l));
+ for (var d = 0; d < s[u].length; d += 1)
+ s[u][d] = 255 & t.getBuffer()[d + r];
+ r += l;
+ var p = o.getErrorCorrectPolynomial(f),
+ h = e(s[u], p.getLength() - 1),
+ g = h.mod(p);
+ c[u] = new Array(p.getLength() - 1);
+ for (var d = 0; d < c[u].length; d += 1) {
+ var m = d + g.getLength() - c[u].length;
+ c[u][d] = m >= 0 ? g.getAt(m) : 0;
+ }
+ }
+ for (var v = 0, d = 0; d < n.length; d += 1)
+ v += n[d].totalCount;
+ for (var b = new Array(v), w = 0, d = 0; d < i; d += 1)
+ for (var u = 0; u < n.length; u += 1)
+ d < s[u].length && ((b[w] = s[u][d]), (w += 1));
+ for (var d = 0; d < a; d += 1)
+ for (var u = 0; u < n.length; u += 1)
+ d < c[u].length && ((b[w] = c[u][d]), (w += 1));
+ return b;
+ },
+ T = function(e, t, n) {
+ for (
+ var r = s.getRSBlocks(e, t), u = c(), l = 0; l < n.length; l += 1
+ ) {
+ var f = n[l];
+ u.put(f.getMode(), 4),
+ u.put(
+ f.getLength(),
+ o.getLengthInBits(f.getMode(), e)
+ ),
+ f.write(u);
+ }
+ for (var d = 0, l = 0; l < r.length; l += 1)
+ d += r[l].dataCount;
+ if (u.getLengthInBits() > 8 * d)
+ throw new Error(
+ "code length overflow. (" +
+ u.getLengthInBits() +
+ ">" +
+ 8 * d +
+ ")"
+ );
+ for (
+ u.getLengthInBits() + 4 <= 8 * d && u.put(0, 4); u.getLengthInBits() % 8 != 0;
+
+ )
+ u.putBit(!1);
+ for (; !(u.getLengthInBits() >= 8 * d) &&
+ (u.put(i, 8), !(u.getLengthInBits() >= 8 * d));
+
+ )
+ u.put(a, 8);
+ return A(u, r);
+ };
+ return (
+ (v.addData = function(e) {
+ var t = u(e);
+ m.push(t), (g = null);
+ }),
+ (v.isDark = function(e, t) {
+ if (e < 0 || p <= e || t < 0 || p <= t)
+ throw new Error(e + "," + t);
+ return d[e][t];
+ }),
+ (v.getModuleCount = function() {
+ return p;
+ }),
+ (v.make = function() {
+ b(!1, y());
+ }),
+ (v.createTableTag = function(e, t) {
+ (e = e || 2), (t = "undefined" == typeof t ? 4 * e : t);
+ var n = "";
+ (n += '<table style="'),
+ (n += " border-width: 0px; border-style: none;"),
+ (n += " border-collapse: collapse;"),
+ (n += " padding: 0px; margin: " + t + "px;"),
+ (n += '">'),
+ (n += "<tbody>");
+ for (var r = 0; r < v.getModuleCount(); r += 1) {
+ n += "<tr>";
+ for (var i = 0; i < v.getModuleCount(); i += 1)
+ (n += '<td style="'),
+ (n += " border-width: 0px; border-style: none;"),
+ (n += " border-collapse: collapse;"),
+ (n += " padding: 0px; margin: 0px;"),
+ (n += " width: " + e + "px;"),
+ (n += " height: " + e + "px;"),
+ (n += " background-color: "),
+ (n += v.isDark(r, i) ? "#000000" : "#ffffff"),
+ (n += ";"),
+ (n += '"/>');
+ n += "</tr>";
+ }
+ return (n += "</tbody>"), (n += "</table>");
+ }),
+ (v.createImgTag = function(e, t) {
+ (e = e || 2), (t = "undefined" == typeof t ? 4 * e : t);
+ var n = v.getModuleCount() * e + 2 * t,
+ r = t,
+ i = n - t;
+ return h(n, n, function(t, n) {
+ if (r <= t && t < i && r <= n && n < i) {
+ var o = Math.floor((t - r) / e),
+ a = Math.floor((n - r) / e);
+ return v.isDark(a, o) ? 0 : 1;
+ }
+ return 1;
+ });
+ }),
+ v
+ );
+ };
+ (t.stringToBytes = function(e) {
+ for (var t = new Array(), n = 0; n < e.length; n += 1) {
+ var r = e.charCodeAt(n);
+ t.push(255 & r);
+ }
+ return t;
+ }),
+ (t.createStringToBytes = function(e, t) {
+ var n = (function() {
+ for (
+ var n = d(e),
+ r = function() {
+ var e = n.read();
+ if (e == -1) throw new Error();
+ return e;
+ },
+ i = 0,
+ o = {};;
+
+ ) {
+ var a = n.read();
+ if (a == -1) break;
+ var s = r(),
+ c = r(),
+ u = r(),
+ l = String.fromCharCode((a << 8) | s),
+ f = (c << 8) | u;
+ (o[l] = f), (i += 1);
+ }
+ if (i != t) throw new Error(i + " != " + t);
+ return o;
+ })(),
+ r = "?".charCodeAt(0);
+ return function(e) {
+ for (var t = new Array(), i = 0; i < e.length; i += 1) {
+ var o = e.charCodeAt(i);
+ if (o < 128) t.push(o);
+ else {
+ var a = n[e.charAt(i)];
+ "number" == typeof a
+ ?
+ (255 & a) == a ?
+ t.push(a) :
+ (t.push(a >>> 8), t.push(255 & a)) :
+ t.push(r);
+ }
+ }
+ return t;
+ };
+ });
+ var n = {
+ MODE_NUMBER: 1,
+ MODE_ALPHA_NUM: 2,
+ MODE_8BIT_BYTE: 4,
+ MODE_KANJI: 8,
+ },
+ r = { L: 1, M: 0, Q: 3, H: 2 },
+ i = {
+ PATTERN000: 0,
+ PATTERN001: 1,
+ PATTERN010: 2,
+ PATTERN011: 3,
+ PATTERN100: 4,
+ PATTERN101: 5,
+ PATTERN110: 6,
+ PATTERN111: 7,
+ },
+ o = (function() {
+ var t = [
+ [],
+ [6, 18],
+ [6, 22],
+ [6, 26],
+ [6, 30],
+ [6, 34],
+ [6, 22, 38],
+ [6, 24, 42],
+ [6, 26, 46],
+ [6, 28, 50],
+ [6, 30, 54],
+ [6, 32, 58],
+ [6, 34, 62],
+ [6, 26, 46, 66],
+ [6, 26, 48, 70],
+ [6, 26, 50, 74],
+ [6, 30, 54, 78],
+ [6, 30, 56, 82],
+ [6, 30, 58, 86],
+ [6, 34, 62, 90],
+ [6, 28, 50, 72, 94],
+ [6, 26, 50, 74, 98],
+ [6, 30, 54, 78, 102],
+ [6, 28, 54, 80, 106],
+ [6, 32, 58, 84, 110],
+ [6, 30, 58, 86, 114],
+ [6, 34, 62, 90, 118],
+ [6, 26, 50, 74, 98, 122],
+ [6, 30, 54, 78, 102, 126],
+ [6, 26, 52, 78, 104, 130],
+ [6, 30, 56, 82, 108, 134],
+ [6, 34, 60, 86, 112, 138],
+ [6, 30, 58, 86, 114, 142],
+ [6, 34, 62, 90, 118, 146],
+ [6, 30, 54, 78, 102, 126, 150],
+ [6, 24, 50, 76, 102, 128, 154],
+ [6, 28, 54, 80, 106, 132, 158],
+ [6, 32, 58, 84, 110, 136, 162],
+ [6, 26, 54, 82, 110, 138, 166],
+ [6, 30, 58, 86, 114, 142, 170],
+ ],
+ r = 1335,
+ o = 7973,
+ s = 21522,
+ c = {},
+ u = function(e) {
+ for (var t = 0; 0 != e;)(t += 1), (e >>>= 1);
+ return t;
+ };
+ return (
+ (c.getBCHTypeInfo = function(e) {
+ for (var t = e << 10; u(t) - u(r) >= 0;)
+ t ^= r << (u(t) - u(r));
+ return ((e << 10) | t) ^ s;
+ }),
+ (c.getBCHTypeNumber = function(e) {
+ for (var t = e << 12; u(t) - u(o) >= 0;)
+ t ^= o << (u(t) - u(o));
+ return (e << 12) | t;
+ }),
+ (c.getPatternPosition = function(e) {
+ return t[e - 1];
+ }),
+ (c.getMaskFunction = function(e) {
+ switch (e) {
+ case i.PATTERN000:
+ return function(e, t) {
+ return (e + t) % 2 == 0;
+ };
+ case i.PATTERN001:
+ return function(e, t) {
+ return e % 2 == 0;
+ };
+ case i.PATTERN010:
+ return function(e, t) {
+ return t % 3 == 0;
+ };
+ case i.PATTERN011:
+ return function(e, t) {
+ return (e + t) % 3 == 0;
+ };
+ case i.PATTERN100:
+ return function(e, t) {
+ return (
+ (Math.floor(e / 2) + Math.floor(t / 3)) % 2 ==
+ 0
+ );
+ };
+ case i.PATTERN101:
+ return function(e, t) {
+ return ((e * t) % 2) + ((e * t) % 3) == 0;
+ };
+ case i.PATTERN110:
+ return function(e, t) {
+ return (((e * t) % 2) + ((e * t) % 3)) % 2 == 0;
+ };
+ case i.PATTERN111:
+ return function(e, t) {
+ return (((e * t) % 3) + ((e + t) % 2)) % 2 == 0;
+ };
+ default:
+ throw new Error("bad maskPattern:" + e);
+ }
+ }),
+ (c.getErrorCorrectPolynomial = function(t) {
+ for (var n = e([1], 0), r = 0; r < t; r += 1)
+ n = n.multiply(e([1, a.gexp(r)], 0));
+ return n;
+ }),
+ (c.getLengthInBits = function(e, t) {
+ if (1 <= t && t < 10)
+ switch (e) {
+ case n.MODE_NUMBER:
+ return 10;
+ case n.MODE_ALPHA_NUM:
+ return 9;
+ case n.MODE_8BIT_BYTE:
+ return 8;
+ case n.MODE_KANJI:
+ return 8;
+ default:
+ throw new Error("mode:" + e);
+ }
+ else if (t < 27)
+ switch (e) {
+ case n.MODE_NUMBER:
+ return 12;
+ case n.MODE_ALPHA_NUM:
+ return 11;
+ case n.MODE_8BIT_BYTE:
+ return 16;
+ case n.MODE_KANJI:
+ return 10;
+ default:
+ throw new Error("mode:" + e);
+ }
+ else {
+ if (!(t < 41)) throw new Error("type:" + t);
+ switch (e) {
+ case n.MODE_NUMBER:
+ return 14;
+ case n.MODE_ALPHA_NUM:
+ return 13;
+ case n.MODE_8BIT_BYTE:
+ return 16;
+ case n.MODE_KANJI:
+ return 12;
+ default:
+ throw new Error("mode:" + e);
+ }
+ }
+ }),
+ (c.getLostPoint = function(e) {
+ for (
+ var t = e.getModuleCount(), n = 0, r = 0; r < t; r += 1
+ )
+ for (var i = 0; i < t; i += 1) {
+ for (
+ var o = 0, a = e.isDark(r, i), s = -1; s <= 1; s += 1
+ )
+ if (!(r + s < 0 || t <= r + s))
+ for (var c = -1; c <= 1; c += 1)
+ i + c < 0 ||
+ t <= i + c ||
+ (0 == s && 0 == c) ||
+ (a == e.isDark(r + s, i + c) && (o += 1));
+ o > 5 && (n += 3 + o - 5);
+ }
+ for (var r = 0; r < t - 1; r += 1)
+ for (var i = 0; i < t - 1; i += 1) {
+ var u = 0;
+ e.isDark(r, i) && (u += 1),
+ e.isDark(r + 1, i) && (u += 1),
+ e.isDark(r, i + 1) && (u += 1),
+ e.isDark(r + 1, i + 1) && (u += 1),
+ (0 != u && 4 != u) || (n += 3);
+ }
+ for (var r = 0; r < t; r += 1)
+ for (var i = 0; i < t - 6; i += 1)
+ e.isDark(r, i) &&
+ !e.isDark(r, i + 1) &&
+ e.isDark(r, i + 2) &&
+ e.isDark(r, i + 3) &&
+ e.isDark(r, i + 4) &&
+ !e.isDark(r, i + 5) &&
+ e.isDark(r, i + 6) &&
+ (n += 40);
+ for (var i = 0; i < t; i += 1)
+ for (var r = 0; r < t - 6; r += 1)
+ e.isDark(r, i) &&
+ !e.isDark(r + 1, i) &&
+ e.isDark(r + 2, i) &&
+ e.isDark(r + 3, i) &&
+ e.isDark(r + 4, i) &&
+ !e.isDark(r + 5, i) &&
+ e.isDark(r + 6, i) &&
+ (n += 40);
+ for (var l = 0, i = 0; i < t; i += 1)
+ for (var r = 0; r < t; r += 1)
+ e.isDark(r, i) && (l += 1);
+ var f = Math.abs((100 * l) / t / t - 50) / 5;
+ return (n += 10 * f);
+ }),
+ c
+ );
+ })(),
+ a = (function() {
+ for (
+ var e = new Array(256), t = new Array(256), n = 0; n < 8; n += 1
+ )
+ e[n] = 1 << n;
+ for (var n = 8; n < 256; n += 1)
+ e[n] = e[n - 4] ^ e[n - 5] ^ e[n - 6] ^ e[n - 8];
+ for (var n = 0; n < 255; n += 1) t[e[n]] = n;
+ var r = {};
+ return (
+ (r.glog = function(e) {
+ if (e < 1) throw new Error("glog(" + e + ")");
+ return t[e];
+ }),
+ (r.gexp = function(t) {
+ for (; t < 0;) t += 255;
+ for (; t >= 256;) t -= 255;
+ return e[t];
+ }),
+ r
+ );
+ })(),
+ s = (function() {
+ var e = [
+ [1, 26, 19],
+ [1, 26, 16],
+ [1, 26, 13],
+ [1, 26, 9],
+ [1, 44, 34],
+ [1, 44, 28],
+ [1, 44, 22],
+ [1, 44, 16],
+ [1, 70, 55],
+ [1, 70, 44],
+ [2, 35, 17],
+ [2, 35, 13],
+ [1, 100, 80],
+ [2, 50, 32],
+ [2, 50, 24],
+ [4, 25, 9],
+ [1, 134, 108],
+ [2, 67, 43],
+ [2, 33, 15, 2, 34, 16],
+ [2, 33, 11, 2, 34, 12],
+ [2, 86, 68],
+ [4, 43, 27],
+ [4, 43, 19],
+ [4, 43, 15],
+ [2, 98, 78],
+ [4, 49, 31],
+ [2, 32, 14, 4, 33, 15],
+ [4, 39, 13, 1, 40, 14],
+ [2, 121, 97],
+ [2, 60, 38, 2, 61, 39],
+ [4, 40, 18, 2, 41, 19],
+ [4, 40, 14, 2, 41, 15],
+ [2, 146, 116],
+ [3, 58, 36, 2, 59, 37],
+ [4, 36, 16, 4, 37, 17],
+ [4, 36, 12, 4, 37, 13],
+ [2, 86, 68, 2, 87, 69],
+ [4, 69, 43, 1, 70, 44],
+ [6, 43, 19, 2, 44, 20],
+ [6, 43, 15, 2, 44, 16],
+ [4, 101, 81],
+ [1, 80, 50, 4, 81, 51],
+ [4, 50, 22, 4, 51, 23],
+ [3, 36, 12, 8, 37, 13],
+ [2, 116, 92, 2, 117, 93],
+ [6, 58, 36, 2, 59, 37],
+ [4, 46, 20, 6, 47, 21],
+ [7, 42, 14, 4, 43, 15],
+ [4, 133, 107],
+ [8, 59, 37, 1, 60, 38],
+ [8, 44, 20, 4, 45, 21],
+ [12, 33, 11, 4, 34, 12],
+ [3, 145, 115, 1, 146, 116],
+ [4, 64, 40, 5, 65, 41],
+ [11, 36, 16, 5, 37, 17],
+ [11, 36, 12, 5, 37, 13],
+ [5, 109, 87, 1, 110, 88],
+ [5, 65, 41, 5, 66, 42],
+ [5, 54, 24, 7, 55, 25],
+ [11, 36, 12, 7, 37, 13],
+ [5, 122, 98, 1, 123, 99],
+ [7, 73, 45, 3, 74, 46],
+ [15, 43, 19, 2, 44, 20],
+ [3, 45, 15, 13, 46, 16],
+ [1, 135, 107, 5, 136, 108],
+ [10, 74, 46, 1, 75, 47],
+ [1, 50, 22, 15, 51, 23],
+ [2, 42, 14, 17, 43, 15],
+ [5, 150, 120, 1, 151, 121],
+ [9, 69, 43, 4, 70, 44],
+ [17, 50, 22, 1, 51, 23],
+ [2, 42, 14, 19, 43, 15],
+ [3, 141, 113, 4, 142, 114],
+ [3, 70, 44, 11, 71, 45],
+ [17, 47, 21, 4, 48, 22],
+ [9, 39, 13, 16, 40, 14],
+ [3, 135, 107, 5, 136, 108],
+ [3, 67, 41, 13, 68, 42],
+ [15, 54, 24, 5, 55, 25],
+ [15, 43, 15, 10, 44, 16],
+ [4, 144, 116, 4, 145, 117],
+ [17, 68, 42],
+ [17, 50, 22, 6, 51, 23],
+ [19, 46, 16, 6, 47, 17],
+ [2, 139, 111, 7, 140, 112],
+ [17, 74, 46],
+ [7, 54, 24, 16, 55, 25],
+ [34, 37, 13],
+ [4, 151, 121, 5, 152, 122],
+ [4, 75, 47, 14, 76, 48],
+ [11, 54, 24, 14, 55, 25],
+ [16, 45, 15, 14, 46, 16],
+ [6, 147, 117, 4, 148, 118],
+ [6, 73, 45, 14, 74, 46],
+ [11, 54, 24, 16, 55, 25],
+ [30, 46, 16, 2, 47, 17],
+ [8, 132, 106, 4, 133, 107],
+ [8, 75, 47, 13, 76, 48],
+ [7, 54, 24, 22, 55, 25],
+ [22, 45, 15, 13, 46, 16],
+ [10, 142, 114, 2, 143, 115],
+ [19, 74, 46, 4, 75, 47],
+ [28, 50, 22, 6, 51, 23],
+ [33, 46, 16, 4, 47, 17],
+ [8, 152, 122, 4, 153, 123],
+ [22, 73, 45, 3, 74, 46],
+ [8, 53, 23, 26, 54, 24],
+ [12, 45, 15, 28, 46, 16],
+ [3, 147, 117, 10, 148, 118],
+ [3, 73, 45, 23, 74, 46],
+ [4, 54, 24, 31, 55, 25],
+ [11, 45, 15, 31, 46, 16],
+ [7, 146, 116, 7, 147, 117],
+ [21, 73, 45, 7, 74, 46],
+ [1, 53, 23, 37, 54, 24],
+ [19, 45, 15, 26, 46, 16],
+ [5, 145, 115, 10, 146, 116],
+ [19, 75, 47, 10, 76, 48],
+ [15, 54, 24, 25, 55, 25],
+ [23, 45, 15, 25, 46, 16],
+ [13, 145, 115, 3, 146, 116],
+ [2, 74, 46, 29, 75, 47],
+ [42, 54, 24, 1, 55, 25],
+ [23, 45, 15, 28, 46, 16],
+ [17, 145, 115],
+ [10, 74, 46, 23, 75, 47],
+ [10, 54, 24, 35, 55, 25],
+ [19, 45, 15, 35, 46, 16],
+ [17, 145, 115, 1, 146, 116],
+ [14, 74, 46, 21, 75, 47],
+ [29, 54, 24, 19, 55, 25],
+ [11, 45, 15, 46, 46, 16],
+ [13, 145, 115, 6, 146, 116],
+ [14, 74, 46, 23, 75, 47],
+ [44, 54, 24, 7, 55, 25],
+ [59, 46, 16, 1, 47, 17],
+ [12, 151, 121, 7, 152, 122],
+ [12, 75, 47, 26, 76, 48],
+ [39, 54, 24, 14, 55, 25],
+ [22, 45, 15, 41, 46, 16],
+ [6, 151, 121, 14, 152, 122],
+ [6, 75, 47, 34, 76, 48],
+ [46, 54, 24, 10, 55, 25],
+ [2, 45, 15, 64, 46, 16],
+ [17, 152, 122, 4, 153, 123],
+ [29, 74, 46, 14, 75, 47],
+ [49, 54, 24, 10, 55, 25],
+ [24, 45, 15, 46, 46, 16],
+ [4, 152, 122, 18, 153, 123],
+ [13, 74, 46, 32, 75, 47],
+ [48, 54, 24, 14, 55, 25],
+ [42, 45, 15, 32, 46, 16],
+ [20, 147, 117, 4, 148, 118],
+ [40, 75, 47, 7, 76, 48],
+ [43, 54, 24, 22, 55, 25],
+ [10, 45, 15, 67, 46, 16],
+ [19, 148, 118, 6, 149, 119],
+ [18, 75, 47, 31, 76, 48],
+ [34, 54, 24, 34, 55, 25],
+ [20, 45, 15, 61, 46, 16],
+ ],
+ t = function(e, t) {
+ var n = {};
+ return (n.totalCount = e), (n.dataCount = t), n;
+ },
+ n = {},
+ i = function(t, n) {
+ switch (n) {
+ case r.L:
+ return e[4 * (t - 1) + 0];
+ case r.M:
+ return e[4 * (t - 1) + 1];
+ case r.Q:
+ return e[4 * (t - 1) + 2];
+ case r.H:
+ return e[4 * (t - 1) + 3];
+ default:
+ return;
+ }
+ };
+ return (
+ (n.getRSBlocks = function(e, n) {
+ var r = i(e, n);
+ if ("undefined" == typeof r)
+ throw new Error(
+ "bad rs block @ typeNumber:" +
+ e +
+ "/errorCorrectLevel:" +
+ n
+ );
+ for (
+ var o = r.length / 3, a = new Array(), s = 0; s < o; s += 1
+ )
+ for (
+ var c = r[3 * s + 0],
+ u = r[3 * s + 1],
+ l = r[3 * s + 2],
+ f = 0; f < c; f += 1
+ )
+ a.push(t(u, l));
+ return a;
+ }),
+ n
+ );
+ })(),
+ c = function() {
+ var e = new Array(),
+ t = 0,
+ n = {};
+ return (
+ (n.getBuffer = function() {
+ return e;
+ }),
+ (n.getAt = function(t) {
+ var n = Math.floor(t / 8);
+ return 1 == ((e[n] >>> (7 - (t % 8))) & 1);
+ }),
+ (n.put = function(e, t) {
+ for (var r = 0; r < t; r += 1)
+ n.putBit(1 == ((e >>> (t - r - 1)) & 1));
+ }),
+ (n.getLengthInBits = function() {
+ return t;
+ }),
+ (n.putBit = function(n) {
+ var r = Math.floor(t / 8);
+ e.length <= r && e.push(0),
+ n && (e[r] |= 128 >>> t % 8),
+ (t += 1);
+ }),
+ n
+ );
+ },
+ u = function(e) {
+ var r = n.MODE_8BIT_BYTE,
+ i = t.stringToBytes(e),
+ o = {};
+ return (
+ (o.getMode = function() {
+ return r;
+ }),
+ (o.getLength = function(e) {
+ return i.length;
+ }),
+ (o.write = function(e) {
+ for (var t = 0; t < i.length; t += 1) e.put(i[t], 8);
+ }),
+ o
+ );
+ },
+ l = function() {
+ var e = new Array(),
+ t = {};
+ return (
+ (t.writeByte = function(t) {
+ e.push(255 & t);
+ }),
+ (t.writeShort = function(e) {
+ t.writeByte(e), t.writeByte(e >>> 8);
+ }),
+ (t.writeBytes = function(e, n, r) {
+ (n = n || 0), (r = r || e.length);
+ for (var i = 0; i < r; i += 1) t.writeByte(e[i + n]);
+ }),
+ (t.writeString = function(e) {
+ for (var n = 0; n < e.length; n += 1)
+ t.writeByte(e.charCodeAt(n));
+ }),
+ (t.toByteArray = function() {
+ return e;
+ }),
+ (t.toString = function() {
+ var t = "";
+ t += "[";
+ for (var n = 0; n < e.length; n += 1)
+ n > 0 && (t += ","), (t += e[n]);
+ return (t += "]");
+ }),
+ t
+ );
+ },
+ f = function() {
+ var e = 0,
+ t = 0,
+ n = 0,
+ r = "",
+ i = {},
+ o = function(e) {
+ r += String.fromCharCode(a(63 & e));
+ },
+ a = function(e) {
+ if (e < 0);
+ else {
+ if (e < 26) return 65 + e;
+ if (e < 52) return 97 + (e - 26);
+ if (e < 62) return 48 + (e - 52);
+ if (62 == e) return 43;
+ if (63 == e) return 47;
+ }
+ throw new Error("n:" + e);
+ };
+ return (
+ (i.writeByte = function(r) {
+ for (
+ e = (e << 8) | (255 & r), t += 8, n += 1; t >= 6;
+
+ )
+ o(e >>> (t - 6)), (t -= 6);
+ }),
+ (i.flush = function() {
+ if (
+ (t > 0 && (o(e << (6 - t)), (e = 0), (t = 0)),
+ n % 3 != 0)
+ )
+ for (var i = 3 - (n % 3), a = 0; a < i; a += 1)
+ r += "=";
+ }),
+ (i.toString = function() {
+ return r;
+ }),
+ i
+ );
+ },
+ d = function(e) {
+ var t = e,
+ n = 0,
+ r = 0,
+ i = 0,
+ o = {};
+ o.read = function() {
+ for (; i < 8;) {
+ if (n >= t.length) {
+ if (0 == i) return -1;
+ throw new Error("unexpected end of file./" + i);
+ }
+ var e = t.charAt(n);
+ if (((n += 1), "=" == e)) return (i = 0), -1;
+ e.match(/^\s$/) ||
+ ((r = (r << 6) | a(e.charCodeAt(0))), (i += 6));
+ }
+ var o = (r >>> (i - 8)) & 255;
+ return (i -= 8), o;
+ };
+ var a = function(e) {
+ if (65 <= e && e <= 90) return e - 65;
+ if (97 <= e && e <= 122) return e - 97 + 26;
+ if (48 <= e && e <= 57) return e - 48 + 52;
+ if (43 == e) return 62;
+ if (47 == e) return 63;
+ throw new Error("c:" + e);
+ };
+ return o;
+ },
+ p = function(e, t) {
+ var n = e,
+ r = t,
+ i = new Array(e * t),
+ o = {};
+ (o.setPixel = function(e, t, r) {
+ i[t * n + e] = r;
+ }),
+ (o.write = function(e) {
+ e.writeString("GIF87a"),
+ e.writeShort(n),
+ e.writeShort(r),
+ e.writeByte(128),
+ e.writeByte(0),
+ e.writeByte(0),
+ e.writeByte(0),
+ e.writeByte(0),
+ e.writeByte(0),
+ e.writeByte(255),
+ e.writeByte(255),
+ e.writeByte(255),
+ e.writeString(","),
+ e.writeShort(0),
+ e.writeShort(0),
+ e.writeShort(n),
+ e.writeShort(r),
+ e.writeByte(0);
+ var t = 2,
+ i = s(t);
+ e.writeByte(t);
+ for (var o = 0; i.length - o > 255;)
+ e.writeByte(255),
+ e.writeBytes(i, o, 255),
+ (o += 255);
+ e.writeByte(i.length - o),
+ e.writeBytes(i, o, i.length - o),
+ e.writeByte(0),
+ e.writeString(";");
+ });
+ var a = function(e) {
+ var t = e,
+ n = 0,
+ r = 0,
+ i = {};
+ return (
+ (i.write = function(e, i) {
+ if (e >>> i != 0) throw new Error("length over");
+ for (; n + i >= 8;)
+ t.writeByte(255 & ((e << n) | r)),
+ (i -= 8 - n),
+ (e >>>= 8 - n),
+ (r = 0),
+ (n = 0);
+ (r |= e << n), (n += i);
+ }),
+ (i.flush = function() {
+ n > 0 && t.writeByte(r);
+ }),
+ i
+ );
+ },
+ s = function(e) {
+ for (
+ var t = 1 << e,
+ n = (1 << e) + 1,
+ r = e + 1,
+ o = c(),
+ s = 0; s < t; s += 1
+ )
+ o.add(String.fromCharCode(s));
+ o.add(String.fromCharCode(t)),
+ o.add(String.fromCharCode(n));
+ var u = l(),
+ f = a(u);
+ f.write(t, r);
+ var d = 0,
+ p = String.fromCharCode(i[d]);
+ for (d += 1; d < i.length;) {
+ var h = String.fromCharCode(i[d]);
+ (d += 1),
+ o.contains(p + h) ?
+ (p += h) :
+ (f.write(o.indexOf(p), r),
+ o.size() < 4095 &&
+ (o.size() == 1 << r && (r += 1),
+ o.add(p + h)),
+ (p = h));
+ }
+ return (
+ f.write(o.indexOf(p), r),
+ f.write(n, r),
+ f.flush(),
+ u.toByteArray()
+ );
+ },
+ c = function() {
+ var e = {},
+ t = 0,
+ n = {};
+ return (
+ (n.add = function(r) {
+ if (n.contains(r))
+ throw new Error("dup key:" + r);
+ (e[r] = t), (t += 1);
+ }),
+ (n.size = function() {
+ return t;
+ }),
+ (n.indexOf = function(t) {
+ return e[t];
+ }),
+ (n.contains = function(t) {
+ return "undefined" != typeof e[t];
+ }),
+ n
+ );
+ };
+ return o;
+ },
+ h = function(e, t, n, r) {
+ for (var i = p(e, t), o = 0; o < t; o += 1)
+ for (var a = 0; a < e; a += 1)
+ i.setPixel(a, o, n(a, o));
+ var s = l();
+ i.write(s);
+ for (
+ var c = f(), u = s.toByteArray(), d = 0; d < u.length; d += 1
+ )
+ c.writeByte(u[d]);
+ c.flush();
+ var h = "";
+ return (
+ (h += "<img"),
+ (h += ' src="'),
+ (h += "data:image/gif;base64,"),
+ (h += c),
+ (h += '"'),
+ (h += ' width="'),
+ (h += e),
+ (h += '"'),
+ (h += ' height="'),
+ (h += t),
+ (h += '"'),
+ r && ((h += ' alt="'), (h += r), (h += '"')),
+ (h += "/>")
+ );
+ };
+ return t;
+ })();
+ return (
+ (function(n) {
+ (i = []),
+ (r = n),
+ (o = "function" == typeof r ? r.apply(t, i) : r), !(void 0 !== o && (e.exports = o));
+ })(function() {
+ return n;
+ }), !(function(e) {
+ e.stringToBytes = function(e) {
+ function t(e) {
+ for (var t = [], n = 0; n < e.length; n++) {
+ var r = e.charCodeAt(n);
+ r < 128 ?
+ t.push(r) :
+ r < 2048 ?
+ t.push(192 | (r >> 6), 128 | (63 & r)) :
+ r < 55296 || r >= 57344 ?
+ t.push(
+ 224 | (r >> 12),
+ 128 | ((r >> 6) & 63),
+ 128 | (63 & r)
+ ) :
+ (n++,
+ (r =
+ 65536 +
+ (((1023 & r) << 10) |
+ (1023 & e.charCodeAt(n)))),
+ t.push(
+ 240 | (r >> 18),
+ 128 | ((r >> 12) & 63),
+ 128 | ((r >> 6) & 63),
+ 128 | (63 & r)
+ ));
+ }
+ return t;
+ }
+ return t(e);
+ };
+ })(n),
+ n
+ );
+ })(),
+ l = function(e, t) {
+ var n =
+ arguments.length > 2 && void 0 !== arguments[2] ?
+ arguments[2] :
+ 1;
+ n = Math.max(1, n);
+ for (var r = n; r <= 40; r += 1)
+ try {
+ var i = (function() {
+ var n = u(r, t);
+ n.addData(e), n.make();
+ var i = n.getModuleCount(),
+ o = function(e, t) {
+ return (
+ e >= 0 && e < i && t >= 0 && t < i && n.isDark(e, t)
+ );
+ };
+ return {
+ v: {
+ text: e,
+ level: t,
+ version: r,
+ moduleCount: i,
+ isDark: o,
+ },
+ };
+ })();
+ if (
+ "object" ===
+ ("undefined" == typeof i ? "undefined" : s(i))
+ )
+ return i.v;
+ } catch (e) {
+ if (!(r < 40 && c.test(e.message))) throw e;
+ }
+ return null;
+ },
+ f = function() {
+ var e =
+ arguments.length > 0 && void 0 !== arguments[0] ?
+ arguments[0] :
+ "",
+ t =
+ arguments.length > 1 && void 0 !== arguments[1] ?
+ arguments[1] :
+ "L",
+ n =
+ arguments.length > 2 && void 0 !== arguments[2] ?
+ arguments[2] :
+ 1,
+ r =
+ arguments.length > 3 && void 0 !== arguments[3] ?
+ arguments[3] :
+ 0,
+ i = l(e, t, n);
+ if (i) {
+ var o = i.isDark;
+ (i.moduleCount += 2 * r),
+ (i.isDark = function(e, t) {
+ return o(e - r, t - r);
+ });
+ }
+ return i;
+ };
+ n.exports = f;
+ },
+ function(e, t, n) {
+ "use strict";
+ var r = n(5),
+ i = n(6),
+ o = function(e, t) {
+ (e.fillStyle = t.back), e.fillRect(0, 0, t.size, t.size);
+ },
+ a = function(e, t, n, r, i, o) {
+ e.isDark(i, o) && t.rect(o * r, i * r, r, r);
+ },
+ s = function(e, t, n) {
+ if (e) {
+ var i = n.rounded > 0 && n.rounded <= 100 ? r : a,
+ o = e.moduleCount,
+ s = n.size / o,
+ c = 0;
+ n.crisp &&
+ ((s = Math.floor(s)),
+ (c = Math.floor((n.size - s * o) / 2))),
+ t.translate(c, c),
+ t.beginPath();
+ for (var u = 0; u < o; u += 1)
+ for (var l = 0; l < o; l += 1) i(e, t, n, s, u, l);
+ (t.fillStyle = n.fill), t.fill(), t.translate(-c, -c);
+ }
+ },
+ c = function(e, t, n) {
+ o(t, n), s(e, t, n), i(t, n);
+ };
+ e.exports = c;
+ },
+ function(e, t) {
+ "use strict";
+ var n = function(e) {
+ return {
+ c: e,
+ m: function() {
+ var e;
+ return (e = this.c).moveTo.apply(e, arguments), this;
+ },
+ l: function() {
+ var e;
+ return (e = this.c).lineTo.apply(e, arguments), this;
+ },
+ a: function() {
+ var e;
+ return (e = this.c).arcTo.apply(e, arguments), this;
+ },
+ };
+ },
+ r = function(e, t, n, r, i, o, a, s, c, u) {
+ a ? e.m(t + o, n) : e.m(t, n),
+ s ? e.l(r - o, n).a(r, n, r, i, o) : e.l(r, n),
+ c ? e.l(r, i - o).a(r, i, t, i, o) : e.l(r, i),
+ u ? e.l(t + o, i).a(t, i, t, n, o) : e.l(t, i),
+ a ? e.l(t, n + o).a(t, n, r, n, o) : e.l(t, n);
+ },
+ i = function(e, t, n, r, i, o, a, s, c, u) {
+ a &&
+ e
+ .m(t + o, n)
+ .l(t, n)
+ .l(t, n + o)
+ .a(t, n, t + o, n, o),
+ s &&
+ e
+ .m(r - o, n)
+ .l(r, n)
+ .l(r, n + o)
+ .a(r, n, r - o, n, o),
+ c &&
+ e
+ .m(r - o, i)
+ .l(r, i)
+ .l(r, i - o)
+ .a(r, i, r - o, i, o),
+ u &&
+ e
+ .m(t + o, i)
+ .l(t, i)
+ .l(t, i - o)
+ .a(t, i, t + o, i, o);
+ },
+ o = function(e, t, o, a, s, c) {
+ var u = c * a,
+ l = s * a,
+ f = u + a,
+ d = l + a,
+ p = 0.005 * o.rounded * a,
+ h = e.isDark,
+ g = s - 1,
+ m = s + 1,
+ v = c - 1,
+ b = c + 1,
+ w = h(s, c),
+ y = h(g, v),
+ x = h(g, c),
+ k = h(g, b),
+ _ = h(s, b),
+ C = h(m, b),
+ S = h(m, c),
+ A = h(m, v),
+ T = h(s, v);
+ (t = n(t)),
+ w
+ ?
+ r(
+ t,
+ u,
+ l,
+ f,
+ d,
+ p, !x && !T, !x && !_, !S && !_, !S && !T
+ ) :
+ i(
+ t,
+ u,
+ l,
+ f,
+ d,
+ p,
+ x && T && y,
+ x && _ && k,
+ S && _ && C,
+ S && T && A
+ );
+ };
+ e.exports = o;
+ },
+ function(e, t) {
+ "use strict";
+ var n = function(e, t) {
+ var n = t.size,
+ r = "bold " + 0.01 * t.mSize * n + "px " + t.fontname;
+ (e.strokeStyle = t.back),
+ (e.lineWidth = 0.01 * t.mSize * n * 0.1),
+ (e.fillStyle = t.fontcolor),
+ (e.font = r);
+ var i = e.measureText(t.label).width,
+ o = 0.01 * t.mSize,
+ a = i / n,
+ s = (1 - a) * t.mPosX * 0.01,
+ c = (1 - o) * t.mPosY * 0.01,
+ u = s * n,
+ l = c * n + 0.75 * t.mSize * 0.01 * n;
+ e.strokeText(t.label, u, l), e.fillText(t.label, u, l);
+ },
+ r = function(e, t) {
+ var n = t.size,
+ r = t.image.naturalWidth || 1,
+ i = t.image.naturalHeight || 1,
+ o = 0.01 * t.mSize,
+ a = (o * r) / i,
+ s = (1 - a) * t.mPosX * 0.01,
+ c = (1 - o) * t.mPosY * 0.01,
+ u = s * n,
+ l = c * n,
+ f = a * n,
+ d = o * n;
+ e.draw_image(t.image, u, l, f, d);
+ },
+ i = function(e, t) {
+ var i = t.mode;
+ "label" === i ? n(e, t) : "image" === i && r(e, t);
+ };
+ e.exports = i;
+ },
+ ]);
+ });
+ },
+ function(e, t, n) {
+ (function(e) {
+ "use strict";
+ var t = n(2),
+ r = t.each,
+ i = t.isStr,
+ o = t.dom,
+ a = n(8),
+ s = n(12),
+ c = n(19),
+ u = n(35),
+ l = n(14),
+ f = n(16),
+ d = e.window,
+ p = Object.assign({ enabled: !1, lang: "en", useBrowserLang: !0 },
+ l.l10n
+ ),
+ h = {
+ isoCode: "en",
+ lang: "english",
+ dateFormat: "YYYY-MM-DD HH:mm",
+ details: "details",
+ download: "download",
+ empty: "empty",
+ files: "files",
+ filter: "filter",
+ folders: "folders",
+ grid: "grid",
+ icons: "icons",
+ language: "Language",
+ lastModified: "Last modified",
+ name: "Name",
+ noMatch: "no match",
+ parentDirectory: "Parent Directory",
+ search: "search",
+ size: "Size",
+ tree: "Tree",
+ view: "View",
+ },
+ g =
+ '<div class="block">\n <h1 class="l10n-language">Language</h1>\n <div class="select">\n <select id="langs"/>\n </div>\n </div>',
+ m = "<option/>",
+ v = "ext/l10n",
+ b = { en: Object.assign({}, h) },
+ w = b.en,
+ y = function(e) {
+ e && (w = e);
+ var t = "selected";
+ o("#langs option").rmAttr(t).rmProp(t),
+ o("#langs ." + w.isoCode)
+ .attr(t, "")
+ .prop(t, !0),
+ r(w, function(e, t) {
+ o(".l10n-" + t).text(e),
+ o(".l10n_ph-" + t).attr("placeholder", e);
+ }),
+ c.setDefaultDateFormat(w.dateFormat),
+ o("#items .item").each(function(e) {
+ o(e).find(".date").text(c.formatDate(e._item.time));
+ });
+ },
+ x = function(e) {
+ return b[e] ?
+ Promise.resolve(b[e]) :
+ a.request({ action: "get", l10n: [e] }).then(function(t) {
+ return (
+ (b[e] = Object.assign({}, h, t.l10n && t.l10n[e], {
+ isoCode: e,
+ })),
+ b[e]
+ );
+ });
+ },
+ k = function(e, t, n) {
+ var r = f.get(v);
+ if (e[r]) t = r;
+ else if (n) {
+ var i = d.navigator.language || d.navigator.browserLanguage;
+ i &&
+ (e[i] ?
+ (t = i) :
+ i.length > 2 && e[i.substr(0, 2)] && (t = i.substr(0, 2)));
+ }
+ e[t] || (t = "en"), x(t).then(y);
+ },
+ _ = function(e) {
+ var t = o(g),
+ n = t.find("select").on("change", function(t) {
+ var n = t.target.value;
+ f.put(v, n), k(e, n, !1);
+ });
+ r(e, function(e, t) {
+ o(m)
+ .attr("value", t)
+ .addCls(t)
+ .text(t + " - " + (i(e) ? e : e.lang))
+ .appTo(n);
+ }),
+ t.appTo("#sidebar");
+ },
+ C = function() {
+ p.enabled && _(u),
+ s.sub("view.changed", function() {
+ k(u, p.lang, p.useBrowserLang);
+ });
+ };
+ C();
+ }.call(
+ t,
+ (function() {
+ return this;
+ })()
+ ));
+ },
+ function(e, t, n) {
+ "use strict";
+ var r = n(7),
+ i = r.langs;
+ e.exports = Object.assign({}, i);
+ },
+ function(e, t, n) {
+ (function(e) {
+ "use strict";
+ var t = n(2),
+ r = t.dom,
+ i = t.awaitLoad,
+ o = n(12),
+ a = n(14),
+ s = e.window,
+ c = Object.assign({ enabled: !1, baseURL: "not-set", idSite: 0 },
+ a["piwik-analytics"]
+ ),
+ u = function() {
+ if (c.enabled) {
+ var e =
+ ("https:" === s.location.protocol ? "https://" : "http://") +
+ c.baseURL +
+ "/",
+ t = [],
+ n = null;
+ r("<script></script>")
+ .attr("src", e + "piwik.js")
+ .appTo("body"),
+ i().then(function() {
+ if (
+ (n =
+ s.Piwik && s.Piwik.getTracker(e + "piwik.php", c.idSite))
+ )
+ for (n.enableLinkTracking(); t.length;)
+ n.trackPageView(t.shift());
+ }),
+ o.sub("location.changed", function(e) {
+ var r = e
+ .getCrumb()
+ .map(function(e) {
+ return e.label;
+ })
+ .join(" > ");
+ n ? n.trackPageView(r) : t.push(r);
+ });
+ }
+ };
+ u();
+ }.call(
+ t,
+ (function() {
+ return this;
+ })()
+ ));
+ },
+ function(e, t, n) {
+ "use strict";
+ n(38), n(39), n(40), n(41), n(43);
+ },
+ function(e, t, n) {
+ (function(t) {
+ "use strict";
+ var r = n(2),
+ i = r.each,
+ o = r.isFn,
+ a = r.dom,
+ s = r.includes,
+ c = r.compact,
+ u = n(12),
+ l = n(13),
+ f = n(14),
+ d = n(16),
+ p = t.window,
+ h = Object.assign({ enabled: !0 }, f.preview),
+ g =
+ '<div id="pv-overlay">\n <div id="pv-container"></div>\n <div id="pv-spinner"><img class="back"/><img class="spinner" src="' +
+ l.image("spinner") +
+ '"/></div>\n <div id="pv-prev-area" class="hof"><img src="' +
+ l.image("preview-prev") +
+ '"/></div>\n <div id="pv-next-area" class="hof"><img src="' +
+ l.image("preview-next") +
+ '"/></div>\n <div id="pv-bottombar" class="clearfix hof">\n <ul id="pv-buttons">\n <li id="pv-bar-close" class="bar-right bar-button"><img src="' +
+ l.image("preview-close") +
+ '"/></li>\n <li id="pv-bar-raw" class="bar-right"><a class="bar-button" target="_blank"><img src="' +
+ l.image("preview-raw") +
+ '"/></a></li>\n <li id="pv-bar-fullscreen" class="bar-right bar-button"><img src="' +
+ l.image("preview-fullscreen") +
+ '"/></li>\n <li id="pv-bar-next" class="bar-right bar-button"><img src="' +
+ l.image("preview-next") +
+ '"/></li>\n <li id="pv-bar-idx" class="bar-right bar-label"></li>\n <li id="pv-bar-prev" class="bar-right bar-button"><img src="' +
+ l.image("preview-prev") +
+ '"/></li>\n </ul>\n </div>\n </div>',
+ m = "ext/preview",
+ v = d.get(m) || !1,
+ b = null,
+ w = !1,
+ y = null,
+ x = null,
+ k = function() {
+ var e = a("#pv-container"),
+ t = e[0],
+ n = e.children()[0];
+ if (t && n) {
+ var r = t.offsetWidth,
+ i = t.offsetHeight,
+ o = n.offsetWidth,
+ s = n.offsetHeight;
+ a(n).css({
+ left: 0.5 * (r - o) + "px",
+ top: 0.5 * (i - s) + "px",
+ });
+ }
+ },
+ _ = function() {
+ var e = p.document.documentElement,
+ t = e.clientWidth,
+ n = e.clientHeight,
+ r = v ? 0 : 20,
+ i = v ? 0 : 48;
+ a("#pv-container").css({
+ width: t - 2 * r + "px",
+ height: n - 2 * r - i + "px",
+ left: r + "px",
+ top: r + "px",
+ }),
+ a("#pv-spinner").css({
+ left: 0.5 * t + "px",
+ top: 0.5 * n + "px",
+ }),
+ v ?
+ (a("#pv-overlay").addCls("fullscreen"),
+ a("#pv-bar-fullscreen")
+ .find("img")
+ .attr("src", l.image("preview-no-fullscreen"))) :
+ (a("#pv-overlay").rmCls("fullscreen"),
+ a("#pv-bar-fullscreen")
+ .find("img")
+ .attr("src", l.image("preview-fullscreen"))),
+ k(),
+ o(x && x.adjust) && x.adjust();
+ },
+ C = function(e, t) {
+ a("#pv-bar-idx")
+ .text(e + "/" + t)
+ .show();
+ },
+ S = function(e) {
+ a("#pv-bar-raw").show().find("a").attr("href", e);
+ },
+ A = function(e) {
+ a("#pv-buttons .bar-left").rm(),
+ i(e, function(e) {
+ a("<li></li>")
+ .addCls("bar-left")
+ .addCls("bar-label")
+ .text(e)
+ .appTo("#pv-buttons");
+ });
+ },
+ T = function() {
+ var e = a("#pv-overlay .hof");
+ p.clearTimeout(b),
+ e.show(),
+ v &&
+ (b = p.setTimeout(function() {
+ return e.hide();
+ }, 2e3));
+ },
+ E = function() {
+ return x && x.moveIdx(1);
+ },
+ M = function() {
+ return x && x.moveIdx(-1);
+ },
+ D = function() {
+ (v = !v), d.put(m, v), T(), _();
+ },
+ P = function(e) {
+ e.stopPropagation(), e.preventDefault();
+ },
+ z = function(e) {
+ var t = e.keyCode;
+ 27 === t ?
+ (P(e), $()) :
+ 8 === t || 37 === t ?
+ (P(e), M()) :
+ 13 === t || 32 === t || 39 === t ?
+ (P(e), E()) :
+ 70 === t && (P(e), D());
+ },
+ L = function() {
+ A([]),
+ a("#pv-container").clr(),
+ a("#pv-overlay").show(),
+ a(p).on("keydown", z),
+ _();
+ },
+ $ = function() {
+ A([]),
+ a("#pv-container").clr(),
+ a("#pv-overlay").hide(),
+ a(p).off("keydown", z);
+ },
+ H = function e(t, n, r) {
+ p.clearTimeout(y);
+ var i = a("#pv-spinner");
+ if (!t) return (w = !1), void i.hide();
+ if (!w && r)
+ return void(y = p.setTimeout(function() {
+ return e(!0, n);
+ }, r));
+ var o = i.find(".back");
+ n ? o.attr("src", n).show() : o.hide(), (w = !0), i.show();
+ },
+ O = function e(t, n, r, i) {
+ var o = Object.assign(Object.create(e.prototype), {
+ items: t,
+ load: r,
+ adjust: i,
+ });
+ return o.setIdx(n), o;
+ };
+ O.prototype = {
+ setIdx: function(e) {
+ var t = this;
+ (this.idx = (e + this.items.length) % this.items.length),
+ (this.item = this.items[this.idx]),
+ C(this.idx + 1, this.items.length),
+ S(this.item.absHref),
+ A([this.item.label]);
+ var n = this.item;
+ Promise.resolve()
+ .then(function() {
+ i(a("#pv-container *"), function(e) {
+ "function" == typeof e.unload && e.unload();
+ }),
+ a("#pv-container").hide().clr(),
+ H(!0, n.thumbSquare || n.icon, 200);
+ })
+ .then(function() {
+ return t.load(n);
+ })
+ .then(function(e) {
+ n === t.item &&
+ (a("#pv-container").clr().app(e).show(), H(!1), _());
+ });
+ },
+ moveIdx: function(e) {
+ this.setIdx(this.idx + e);
+ },
+ };
+ var B = function(e, t, n) {
+ var r = function(r) {
+ r.$view &&
+ s(e, r.type) &&
+ r.$view.find("a").on("click", function(i) {
+ i.preventDefault();
+ var o = c(
+ a("#items .item").map(function(t) {
+ var n = t._item;
+ return s(e, n.type) ? n : null;
+ })
+ );
+ (x = O(o, o.indexOf(r), t, n)), L();
+ });
+ };
+ u.sub("view.changed", function(e) {
+ return i(e, r);
+ });
+ },
+ R = function() {
+ h.enabled &&
+ (a(g)
+ .hide()
+ .appTo("body")
+ .on("keydown", z)
+ .on("mousemove", T)
+ .on("mousedown", T)
+ .on("click", function(e) {
+ ("pv-overlay" !== e.target.id &&
+ "pv-container" !== e.target.id) ||
+ $();
+ })
+ .on("mousedown", P)
+ .on("mousemove", P)
+ .on("keydown", P)
+ .on("keypress", P),
+ a("#pv-spinner").hide(),
+ a("#pv-bar-prev, #pv-prev-area").on("click", M),
+ a("#pv-bar-next, #pv-next-area").on("click", E),
+ a("#pv-bar-close").on("click", $),
+ a("#pv-bar-fullscreen").on("click", D),
+ a(p).on("resize", _).on("load", _));
+ };
+ (e.exports = {
+ setLabels: A,
+ register: B,
+ get item() {
+ return x && x.item;
+ },
+ }),
+ R();
+ }.call(
+ t,
+ (function() {
+ return this;
+ })()
+ ));
+ },
+ function(e, t, n) {
+ "use strict";
+ var r = n(2),
+ i = r.dom,
+ o = n(19),
+ a = n(14),
+ s = n(38),
+ c = Object.assign({ enabled: !1, autoplay: !0, types: [] },
+ a["preview-aud"]
+ ),
+ u = '<audio id="pv-content-aud"/>',
+ l = function() {
+ var e = i("#pv-content-aud")[0];
+ e &&
+ s.setLabels([s.item.label, o.formatDate(1e3 * e.duration, "m:ss")]);
+ },
+ f = function(e) {
+ e.unload = function() {
+ (e.src = ""), e.load();
+ };
+ },
+ d = function(e) {
+ return new Promise(function(t) {
+ var n = i(u)
+ .on("loadedmetadata", function() {
+ return t(n);
+ })
+ .attr("controls", "controls");
+ c.autoplay && n.attr("autoplay", "autoplay"),
+ f(n[0]),
+ n.attr("src", e.absHref);
+ });
+ },
+ p = function() {
+ c.enabled && s.register(c.types, d, l);
+ };
+ p();
+ },
+ function(e, t, n) {
+ "use strict";
+ var r = n(2),
+ i = r.dom,
+ o = n(8),
+ a = n(14),
+ s = n(38),
+ c = Object.assign({ enabled: !1, size: null, types: [] },
+ a["preview-img"]
+ ),
+ u = '<img id="pv-content-img"/>',
+ l = function() {
+ var e = i("#pv-content-img")[0];
+ if (e) {
+ var t = e.offsetWidth,
+ n = [s.item.label];
+ if (!c.size) {
+ var r = e.naturalWidth,
+ o = e.naturalHeight;
+ n.push(String(r) + "x" + String(o)),
+ n.push(String(((100 * t) / r).toFixed(0)) + "%");
+ }
+ s.setLabels(n);
+ }
+ },
+ f = function(e) {
+ return o
+ .request({
+ action: "get",
+ thumbs: [{ type: "img", href: e, width: c.size, height: 0 }],
+ })
+ .then(function(e) {
+ return e && e.thumbs && e.thumbs[0] ? e.thumbs[0] : null;
+ });
+ },
+ d = function(e) {
+ return Promise.resolve(e.absHref)
+ .then(function(e) {
+ return c.size ? f(e) : e;
+ })
+ .then(function(e) {
+ return new Promise(function(t) {
+ var n = i(u)
+ .on("load", function() {
+ return t(n);
+ })
+ .attr("src", e);
+ });
+ });
+ },
+ p = function() {
+ c.enabled && s.register(c.types, d, l);
+ };
+ p();
+ },
+ function(e, t, n) {
+ (function(e) {
+ "use strict";
+ var t = n(42),
+ r = n(28),
+ i = n(2),
+ o = i.keys,
+ a = i.dom,
+ s = n(14),
+ c = n(38),
+ u = e.window,
+ l = u.XMLHttpRequest,
+ f = Object.assign({ enabled: !1, styles: {} }, s["preview-txt"]),
+ d = '<pre id="pv-content-txt"></pre>',
+ p = '<div id="pv-content-txt"></div>',
+ h = function() {
+ var e = a("#pv-content-txt")[0];
+ if (e) {
+ var t = a("#pv-container")[0];
+ (e.style.height = t.offsetHeight + "px"),
+ c.setLabels([c.item.label, c.item.size + " bytes"]);
+ }
+ },
+ g = function(e) {
+ return new Promise(function(t, n) {
+ var r = new l(),
+ i = function() {
+ if (r.readyState === l.DONE)
+ try {
+ t(r.responseText || "");
+ } catch (e) {
+ n(String(e));
+ }
+ };
+ r.open("GET", e, !0), (r.onreadystatechange = i), r.send();
+ });
+ },
+ m = function(e) {
+ return g(e.absHref)
+ .catch(function(e) {
+ return "[request failed] " + e;
+ })
+ .then(function(n) {
+ var i = f.styles[e.type];
+ if (1 === i) return a(d).text(n);
+ if (2 === i) return a(p).html(r(n));
+ if (3 === i) {
+ var o = a("<code></code>").text(n);
+ return (
+ u.setTimeout(
+ function() {
+ t.el(o[0]);
+ },
+ n.length < 2e4 ? 0 : 500
+ ),
+ a(d).app(o)
+ );
+ }
+ return a(p).text(n);
+ });
+ },
+ v = function() {
+ f.enabled && c.register(o(f.styles), m, h);
+ };
+ v();
+ }.call(
+ t,
+ (function() {
+ return this;
+ })()
+ ));
+ },
+ function(e, t, n) {
+ !(function(t, n) {
+ e.exports = n();
+ })(this, function() {
+ var e = ".lolight",
+ t = "ll-",
+ n = "_nam#2196f3}_num#ec407a}_str#43a047}_rex#ef6c00}_pct#666}_key#555;font-weight:bold}_com#aaa;font-style:italic}"
+ .replace(/_/g, "." + t)
+ .replace(/#/g, "{color:#"),
+ r = /^(a(bstract|lias|nd|rguments|rray|s(m|sert)?|uto)|b(ase|egin|ool(ean)?|reak|yte)|c(ase|atch|har|hecked|lass|lone|ompl|onst|ontinue)|de(bugger|cimal|clare|f(ault|er)?|init|l(egate|ete)?)|do|double|e(cho|ls?if|lse(if)?|nd|nsure|num|vent|x(cept|ec|p(licit|ort)|te(nds|nsion|rn)))|f(allthrough|alse|inal(ly)?|ixed|loat|or(each)?|riend|rom|unc(tion)?)|global|goto|guard|i(f|mp(lements|licit|ort)|n(it|clude(_once)?|line|out|stanceof|t(erface|ernal)?)?|s)|l(ambda|et|ock|ong)|m(odule|utable)|NaN|n(amespace|ative|ext|ew|il|ot|ull)|o(bject|perator|r|ut|verride)|p(ackage|arams|rivate|rotected|rotocol|ublic)|r(aise|e(adonly|do|f|gister|peat|quire(_once)?|scue|strict|try|turn))|s(byte|ealed|elf|hort|igned|izeof|tatic|tring|truct|ubscript|uper|ynchronized|witch)|t(emplate|hen|his|hrows?|ransient|rue|ry|ype(alias|def|id|name|of))|u(n(checked|def(ined)?|ion|less|signed|til)|se|sing)|v(ar|irtual|oid|olatile)|w(char_t|hen|here|hile|ith)|xor|yield)$/,
+ i = "com",
+ o = "key",
+ a = "nam",
+ s = "num",
+ c = "pct",
+ u = "rex",
+ l = "spc",
+ f = "str",
+ d = "unk",
+ p = [
+ [s, /#([0-9a-f]{6}|[0-9a-f]{3})\b/],
+ [i, /(\/\/|#).*?(?=\n|$)/],
+ [i, /\/\*[\s\S]*?\*\//],
+ [i, /<!--[\s\S]*?-->/],
+ [u, /\/(\\\/|[^\n])*?\//],
+ [f, /(['"`])(\\\1|[\s\S])*?\1/],
+ [s, /[+-]?([0-9]*\.?[0-9]+|[0-9]+\.?[0-9]*)([eE][+-]?[0-9]+)?/],
+ [c, /[\\.,:;+\-*\/=<>()[\]{}|?!&@~]/],
+ [l, /\s+/],
+ [a, /[\w$]+/],
+ [d, /./],
+ ],
+ h = function(e) {
+ if ("string" != typeof e) throw new Error("tok: no string");
+ for (var t = [], n = p.length, i = !1; e;)
+ for (var c = 0; c < n; c += 1) {
+ var f = p[c][1].exec(e);
+ if (f && 0 === f.index) {
+ var d = p[c][0];
+ if (d !== u || !i) {
+ var h = f[0];
+ d === a && r.test(h) && (d = o),
+ d === l ?
+ h.indexOf("\n") >= 0 && (i = !1) :
+ (i = d === s || d === a),
+ (e = e.slice(h.length)),
+ t.push([d, h]);
+ break;
+ }
+ }
+ }
+ return t;
+ },
+ g = function(e, t) {
+ if ("undefined" != typeof document) t(document);
+ else if (e) throw new Error("no doc");
+ },
+ m = function(e) {
+ g(!0, function(n) {
+ var r = h(e.textContent);
+ (e.innerHTML = ""),
+ r.forEach(function(r) {
+ var i = n.createElement("span");
+ (i.className = t + r[0]),
+ (i.textContent = r[1]),
+ e.appendChild(i);
+ });
+ });
+ },
+ v = function(t) {
+ g(!0, function(n) {
+ [].forEach.call(n.querySelectorAll(t || e), function(e) {
+ m(e);
+ });
+ });
+ };
+ return (
+ g(!1, function(e) {
+ var t = e.querySelector("head"),
+ r = e.createElement("style");
+ (r.textContent = n),
+ t.insertBefore(r, t.firstChild),
+ /^(i|c|loade)/.test(e.readyState) ?
+ v() :
+ e.addEventListener("DOMContentLoaded", function() {
+ v();
+ });
+ }),
+ (v.tok = h),
+ (v.el = m),
+ v
+ );
+ });
+ },
+ function(e, t, n) {
+ "use strict";
+ var r = n(2),
+ i = r.dom,
+ o = n(14),
+ a = n(38),
+ s = Object.assign({ enabled: !1, autoplay: !0, types: [] },
+ o["preview-vid"]
+ ),
+ c = '<video id="pv-content-vid"/>',
+ u = function() {
+ var e = i("#pv-content-vid")[0];
+ if (e) {
+ var t = e.offsetWidth,
+ n = e.videoWidth,
+ r = e.videoHeight;
+ a.setLabels([
+ a.item.label,
+ String(n) + "x" + String(r),
+ String(((100 * t) / n).toFixed(0)) + "%",
+ ]);
+ }
+ },
+ l = function(e) {
+ e.unload = function() {
+ (e.src = ""), e.load();
+ };
+ },
+ f = function(e) {
+ return new Promise(function(t) {
+ var n = i(c)
+ .on("loadedmetadata", function() {
+ return t(n);
+ })
+ .attr("controls", "controls");
+ s.autoplay && n.attr("autoplay", "autoplay"),
+ l(n[0]),
+ n.attr("src", e.absHref);
+ });
+ },
+ d = function() {
+ s.enabled && a.register(s.types, f, u);
+ };
+ d();
+ },
+ function(e, t, n) {
+ "use strict";
+ var r = n(2),
+ i = r.map,
+ o = r.debounce,
+ a = r.parsePattern,
+ s = r.dom,
+ c = n(8),
+ u = n(12),
+ l = n(20),
+ f = n(13),
+ d = n(14),
+ p = n(22),
+ h = n(18),
+ g = Object.assign({ enabled: !1, advanced: !1, debounceTime: 300, ignorecase: !0 },
+ d.search
+ ),
+ m =
+ '<div id="search" class="tool">\n <img src="' +
+ f.image("search") +
+ '" alt="search"/>\n <input class="l10n_ph-search" type="text" value=""/>\n </div>',
+ v = !1,
+ b = "",
+ w = void 0,
+ y = void 0,
+ x = function() {
+ var e =
+ arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : "";
+ if (e !== b) {
+ if (((b = e), !e)) return void h.setLocation();
+ w.addCls("pending"),
+ c
+ .request({
+ action: "get",
+ search: {
+ href: l.getAbsHref(),
+ pattern: e,
+ ignorecase: g.ignorecase,
+ },
+ })
+ .then(function(e) {
+ w.rmCls("pending"),
+ h.setHint("noMatch"),
+ h.setItems(
+ i(e.search, function(e) {
+ return p.get(e);
+ })
+ );
+ });
+ }
+ },
+ k = function() {
+ v
+ ?
+ (w.addCls("active"), y[0].focus(), x(a(y.val(), g.advanced))) :
+ (x(), w.rmCls("active"));
+ },
+ _ = function() {
+ (v = !v), k();
+ },
+ C = function() {
+ (v = !1), y.val(""), k();
+ },
+ S = function() {
+ g.enabled &&
+ ((w = s(m).appTo("#toolbar")),
+ (y = w.find("input")),
+ w.find("img").on("click", _),
+ y.on("keyup", o(k, g.debounceTime)),
+ u.sub("location.changed", C));
+ };
+ S();
+ },
+ function(e, t, n) {
+ (function(e) {
+ "use strict";
+ var t = n(2),
+ r = t.each,
+ i = t.dom,
+ o = n(12),
+ a = n(13),
+ s = n(14),
+ c = e.window.document,
+ u = Object.assign({ enabled: !1, clickndrag: !1, checkboxes: !1 },
+ s.select
+ ),
+ l =
+ '<span class="selector">\n <img src="' +
+ a.image("selected") +
+ '" alt="selected"/>\n </span>',
+ f = i(c),
+ d = i("html"),
+ p = i('<div id="selection-rect"></div>'),
+ h = Math.max,
+ g = Math.min,
+ m = Math.abs,
+ v = 0,
+ b = 0,
+ w = function() {
+ var e = i("#items .item.selected").map(function(e) {
+ return e._item;
+ });
+ o.pub("selection", e);
+ },
+ y = function(e) {
+ var t = i(e);
+ if (!t.length || t.isHidden()) return null;
+ var n = t[0].getBoundingClientRect();
+ return { l: n.left, t: n.top, r: n.right, b: n.bottom };
+ },
+ x = function(e, t) {
+ return (!!e &&
+ !!t &&
+ e.l === t.l &&
+ e.t === t.t &&
+ e.r === t.r &&
+ e.b === t.b
+ );
+ },
+ k = function(e) {
+ var t = e[0];
+ x(y(t), t && t._rect) ||
+ e.each(function(e) {
+ e._rect = y(e);
+ });
+ },
+ _ = function(e, t) {
+ if (!e || !t) return !1;
+ var n = h(e.l, t.l),
+ r = g(e.r, t.r),
+ i = h(e.t, t.t),
+ o = g(e.b, t.b);
+ return n <= r && i <= o;
+ },
+ C = function(e) {
+ var t = i("#content")[0],
+ n = y(t),
+ r = e.pageX - n.l + t.scrollLeft,
+ o = e.pageY - n.t + t.scrollTop;
+ return { x: r, y: o };
+ },
+ S = function(e) {
+ var t = C(e),
+ n = t.x,
+ r = t.y,
+ o = g(v, n),
+ a = g(b, r),
+ s = m(v - n),
+ c = m(b - r),
+ u = e.ctrlKey || e.metaKey;
+ if (!(!u && s < 4 && c < 4)) {
+ u || i("#items .item").rmCls("selected"),
+ d.addCls("drag-select"),
+ p
+ .show()
+ .css({
+ left: o + "px",
+ top: a + "px",
+ width: s + "px",
+ height: c + "px",
+ });
+ var l = y(p),
+ f = i("#items .item:not(.folder-parent)");
+ k(f),
+ f.rmCls("selecting").each(function(e) {
+ _(l, e._rect) && i(e).addCls("selecting");
+ });
+ }
+ },
+ A = function e(t) {
+ f.off("mousemove", S).off("mouseup", e),
+ S(t),
+ i("#items .item.selecting.selected")
+ .rmCls("selecting")
+ .rmCls("selected"),
+ i("#items .item.selecting").rmCls("selecting").addCls("selected"),
+ w(),
+ d.rmCls("drag-select"),
+ p.hide(),
+ t.stopPropagation(),
+ t.preventDefault();
+ },
+ T = function(e) {
+ if (!(
+ 0 !== e.button || e.offsetX >= i("#content")[0].offsetWidth - 16
+ )) {
+ var t = C(e),
+ n = t.x,
+ r = t.y;
+ (v = n),
+ (b = r),
+ f.on("mousemove", S).on("mouseup", A),
+ S(e),
+ e.preventDefault();
+ }
+ },
+ E = function(e) {
+ for (; !e._item && e.parentNode;) e = e.parentNode;
+ return e._item;
+ },
+ M = function(e) {
+ E(e.target).$view.tglCls("selected"),
+ w(),
+ e.stopPropagation(),
+ e.preventDefault();
+ },
+ D = function(e) {
+ e.$view &&
+ !e.isCurrentParentFolder() &&
+ i(l).on("click", M).appTo(e.$view.find("a"));
+ },
+ P = function(e, t) {
+ u.checkboxes && r(e, D),
+ r(t, function(e) {
+ e.$view && e.$view.rmCls("selected");
+ }),
+ w();
+ },
+ z = function() {
+ u.enabled &&
+ (u.clickndrag || u.checkboxes) &&
+ (o.sub("view.changed", P),
+ u.clickndrag &&
+ (p.hide().appTo("#content"),
+ i("#content")
+ .on("mousedown", T)
+ .on("drag", function(e) {
+ return e.preventDefault();
+ })
+ .on("dragstart", function(e) {
+ return e.preventDefault();
+ })));
+ };
+ z();
+ }.call(
+ t,
+ (function() {
+ return this;
+ })()
+ ));
+ },
+ function(e, t, n) {
+ "use strict";
+ var r = n(2),
+ i = r.each,
+ o = r.toArray,
+ a = r.dom,
+ s = r.cmp,
+ c = r.naturalCmp,
+ u = n(12),
+ l = n(13),
+ f = n(14),
+ d = n(16),
+ p = Object.assign({
+ enabled: !1,
+ column: 0,
+ reverse: !1,
+ ignorecase: !0,
+ natural: !1,
+ folders: 0,
+ },
+ f.sort
+ ),
+ h = "ext/sort",
+ g =
+ '<img src="' + l.image("sort") + '" class="sort" alt="sort order"/>',
+ m = function(e) {
+ return e.isFolder() ? p.folders : 1;
+ },
+ v = { 0: "label", 1: "time", 2: "size" },
+ b = { 0: "label", 1: "date", 2: "size" },
+ w = function(e, t, n, r) {
+ return function(i, o) {
+ var a = i._item,
+ u = o._item,
+ l = m(a) - m(u);
+ if (0 !== l) return l;
+ var f = a[e],
+ d = u[e];
+ return (
+ (isNaN(f) || isNaN(d)) &&
+ ((f = String(f)),
+ (d = String(d)),
+ n && ((f = f.toLowerCase()), (d = d.toLowerCase()))),
+ (l = r ? c(f, d) : s(f, d)),
+ t ? -l : l
+ );
+ };
+ },
+ y = function(e, t) {
+ var n = a("#items li.header a"),
+ r = a("#items li.header a." + b[e]),
+ i = w(v[e], t, p.ignorecase, p.natural);
+ d.put(h, { column: e, reverse: t }),
+ n.rmCls("ascending").rmCls("descending"),
+ r.addCls(t ? "descending" : "ascending"),
+ a(o(a("#items .item:not(.folder-parent)")).sort(i)).appTo("#items");
+ },
+ x = function() {
+ var e = d.get(h),
+ t = (e && e.column) || p.column,
+ n = (e && e.reverse) || p.reverse;
+ y(t, n);
+ },
+ k = function() {
+ var e = a("#items li.header");
+ i(b, function(t, n) {
+ var r = "0" === n ? "app" : "pre";
+ e.find("a." + t)[r](g)
+ .on("click", function(e) {
+ y(n, a(e.currentTarget).hasCls("ascending")),
+ e.preventDefault();
+ });
+ });
+ },
+ _ = function() {
+ p.enabled && (k(), u.sub("view.changed", x));
+ };
+ _();
+ },
+ function(e, t, n) {
+ "use strict";
+ var r = n(2),
+ i = r.each,
+ o = r.map,
+ a = r.includes,
+ s = n(8),
+ c = n(12),
+ u = n(14),
+ l = Object.assign({
+ enabled: !1,
+ img: ["img-bmp", "img-gif", "img-ico", "img-jpg", "img-png"],
+ mov: [
+ "vid-avi",
+ "vid-flv",
+ "vid-mkv",
+ "vid-mov",
+ "vid-mp4",
+ "vid-mpg",
+ "vid-webm",
+ ],
+ doc: ["x-pdf", "x-ps"],
+ delay: 1,
+ size: 100,
+ exif: !1,
+ chunksize: 20,
+ },
+ u.thumbnails
+ ),
+ f = 4 / 3,
+ d = function(e, t) {
+ var n = null;
+ if (a(l.img, t.type)) n = "img";
+ else if (a(l.mov, t.type)) n = "mov";
+ else {
+ if (!a(l.doc, t.type)) return;
+ n = "doc";
+ }
+ t.thumbSquare ?
+ t.$view
+ .find(".icon.square img")
+ .addCls("thumb")
+ .attr("src", t.thumbSquare) :
+ e.push({
+ type: n,
+ href: t.absHref,
+ ratio: 1,
+ callback: function(e) {
+ e &&
+ t.$view &&
+ ((t.thumbSquare = e),
+ t.$view
+ .find(".icon.square img")
+ .addCls("thumb")
+ .attr("src", e));
+ },
+ }),
+ t.thumbRational ?
+ t.$view
+ .find(".icon.landscape img")
+ .addCls("thumb")
+ .attr("src", t.thumbRational) :
+ e.push({
+ type: n,
+ href: t.absHref,
+ ratio: f,
+ callback: function(e) {
+ e &&
+ t.$view &&
+ ((t.thumbRational = e),
+ t.$view
+ .find(".icon.landscape img")
+ .addCls("thumb")
+ .attr("src", e));
+ },
+ });
+ },
+ p = function(e) {
+ var t = o(e, function(e) {
+ return {
+ type: e.type,
+ href: e.href,
+ width: Math.round(l.size * e.ratio),
+ height: l.size,
+ };
+ });
+ return s.request({ action: "get", thumbs: t }).then(function(t) {
+ i(e, function(e, n) {
+ e.callback(t && t.thumbs ? t.thumbs[n] : null);
+ });
+ });
+ },
+ h = function(e) {
+ for (
+ var t = e.length,
+ n = l.chunksize,
+ r = Promise.resolve(),
+ i = function(t) {
+ r = r.then(function() {
+ return p(e.slice(t, t + n));
+ });
+ },
+ o = 0; o < t; o += n
+ )
+ i(o);
+ },
+ g = function(e) {
+ var t = [];
+ i(e, function(e) {
+ return d(t, e);
+ }),
+ h(t);
+ },
+ m = function(e) {
+ setTimeout(function() {
+ return g(e);
+ }, l.delay);
+ },
+ v = function() {
+ l.enabled && c.sub("view.changed", m);
+ };
+ v();
+ },
+ function(e, t, n) {
+ (function(e) {
+ "use strict";
+ var t = n(12),
+ r = n(14),
+ i = e.window.document,
+ o = Object.assign({ enabled: !1 }, r.title),
+ a = function(e) {
+ var t = e.getCrumb().map(function(e) {
+ return e.label;
+ }),
+ n = t.join(" > ");
+ t.length > 1 && (n = t[t.length - 1] + " - " + n), (i.title = n);
+ },
+ s = function() {
+ o.enabled && t.sub("location.changed", a);
+ };
+ s();
+ }.call(
+ t,
+ (function() {
+ return this;
+ })()
+ ));
+ },
+ function(e, t, n) {
+ "use strict";
+ var r = n(2),
+ i = r.each,
+ o = r.dom,
+ a = r.cmp,
+ s = r.naturalCmp,
+ c = n(12),
+ u = n(20),
+ l = n(13),
+ f = n(14),
+ d = n(16),
+ p = Object.assign({
+ enabled: !1,
+ show: !0,
+ maxSubfolders: 50,
+ naturalSort: !1,
+ ignorecase: !0,
+ },
+ f.tree
+ ),
+ h =
+ '<div class="item folder">\n <span class="indicator">\n <img src="' +
+ l.image("tree-indicator") +
+ '"/>\n </span>\n <a>\n <span class="icon"><img src="' +
+ l.icon("folder") +
+ '"/></span>\n <span class="label"></span>\n </a>\n </span>',
+ g =
+ '<div class="block">\n <h1 class="l10n-tree">Tree</h1>\n <div id="view-tree" class="button view">\n <img src="' +
+ l.image("tree-toggle") +
+ '" alt="view-tree"/>\n </div>\n </div>',
+ m = "ext/tree",
+ v = function(e) {
+ for (; !e._item && e.parentNode;) e = e.parentNode;
+ return e._item;
+ },
+ b = function(e) {
+ var t = v(e.target);
+ "unknown" === t._treeState ?
+ t.fetchContent().then(function() {
+ (t._treeState = "open"), y(t);
+ }) :
+ "open" === t._treeState ?
+ ((t._treeState = "closed"),
+ t._$tree.rmCls("open").addCls("closed")) :
+ "closed" === t._treeState &&
+ ((t._treeState = "open"),
+ t._$tree.rmCls("closed").addCls("open"));
+ },
+ w = function(e, t) {
+ var n = e.label,
+ r = t.label;
+ return (
+ p.ignorecase && ((n = n.toLowerCase()), (r = r.toLowerCase())),
+ p.naturalSort ? s(n, r) : a(n, r)
+ );
+ },
+ y = function e(t) {
+ var n = t.getSubfolders(),
+ r = n.length,
+ a = p.maxSubfolders,
+ s = o(h);
+ if (
+ (s.find(".indicator").on("click", b),
+ s.find(".label").text(t.label),
+ u.setLink(s.find("a"), t),
+ t.isCurrentFolder() && s.addCls("active"),
+ t.isManaged ||
+ s.find(".icon img").attr("src", l.icon("folder-page")),
+ (t._treeState = t._treeState || "none"),
+ t.isManaged && !t.isContentFetched ?
+ (t._treeState = "unknown") :
+ r || (t._treeState = "none"),
+ s.addCls(t._treeState),
+ r)
+ ) {
+ var c = o('<div class="content"></div>').appTo(s);
+ n.sort(w),
+ i(n.slice(0, a), function(t) {
+ return c.app(e(t));
+ }),
+ r > a &&
+ c.app(
+ '<div class="summary">… ' + (r - a) + " more subfolders</div>"
+ );
+ }
+ return (
+ t._$tree && t._$tree.rpl(s), (t._$tree = s), (s[0]._item = t), s
+ );
+ },
+ x = function e(t) {
+ return (
+ (t._treeState = "open"),
+ t.fetchContent().then(function() {
+ return t.parent ? e(t.parent) : t;
+ })
+ );
+ },
+ k = function() {
+ d.get(m) ?
+ (o("#view-tree").addCls("active"), o("#tree").show()) :
+ (o("#view-tree").rmCls("active"), o("#tree").hide());
+ },
+ _ = function(e) {
+ x(e).then(function(e) {
+ o("#tree").clr().app(y(e)), k();
+ });
+ },
+ C = function() {
+ p.enabled &&
+ (o('<div id="tree"></div>').hide().appTo("#mainrow"),
+ o(g)
+ .appTo("#sidebar")
+ .find("#view-tree")
+ .on("click", function(e) {
+ d.put(m, !d.get(m)), k(), c.pub("resize"), e.preventDefault();
+ }),
+ "boolean" != typeof d.get(m) && d.put(m, p.show),
+ k(),
+ c.sub("location.changed", _));
+ };
+ C();
+ },
+ function(e, t, n) {
+ (function(e) {
+ "use strict";
+ var t = n(2),
+ r = t.dom,
+ i = n(7),
+ o = n(8),
+ a = n(13),
+ s = '<ul id="tests"></ul>',
+ c =
+ '<li class="test">\n <span class="label"></span>\n <span class="result"></span>\n <div class="info"></div>\n </li>',
+ u =
+ '<div id="login-wrapper">\n <input id="pass" type="password" placeholder="password"/>\n <span id="login">login</span>\n <span id="logout">logout</span>\n <div id="hint">\n The preset password is the empty string, just click login.\n Change it in \'_h5ai/private/conf/options.json\'.\n </div>\n </div>',
+ l =
+ '<div id="support">\n Show your support with a donation!\n <div class="paypal">\n <form action="https://www.paypal.com/cgi-bin/webscr" method="post" target="_blank">\n <input type="hidden" name="cmd" value="_s-xclick"/>\n <input type="hidden" name="hosted_button_id" value="8WSPKWT7YBTSQ"/>\n <input type="image" src="' +
+ a.image("paypal") +
+ '" name="submit" alt="PayPal"/>\n </form>\n </div>\n </div>',
+ f = i.setup,
+ d = function(e, t, n, i) {
+ var o = r(c).appTo("#tests");
+ o.find(".label").text(e),
+ o
+ .find(".result")
+ .addCls(n ? "passed" : "failed")
+ .text(i ? i : n ? "yes" : "no"),
+ o.find(".info").html(t);
+ },
+ p = function() {
+ f.AS_ADMIN &&
+ (r(s).appTo("#content"),
+ d(
+ "h5ai version",
+ "Only green if this is an official h5ai release",
+ /^\d+\.\d+\.\d+$/.test(f.VERSION),
+ f.VERSION
+ ),
+ d(
+ "Index file found",
+ "Add <code>" + f.INDEX_HREF + "</code> to your index file list",
+ f.INDEX_HREF
+ ),
+ d(
+ "Options parsable",
+ "File <code>options.json</code> is readable and syntax is correct",
+ null !== i.options
+ ),
+ d(
+ "Types parsable",
+ "File <code>types.json</code> is readable and syntax is correct",
+ null !== i.types
+ ),
+ d(
+ "Server software",
+ "Server is one of apache, lighttpd, nginx or cherokee",
+ f.HAS_SERVER,
+ f.SERVER_NAME + " " + f.SERVER_VERSION
+ ),
+ d(
+ "PHP version",
+ "PHP version >= " + f.MIN_PHP_VERSION, !0,
+ f.PHP_VERSION
+ ),
+ d(
+ "PHP arch",
+ "64-bit required to correctly display file/folder sizes > ~2GB",
+ "64-bit" === f.PHP_ARCH,
+ f.PHP_ARCH
+ ),
+ d(
+ "Public Cache directory",
+ "Web server has write access",
+ f.HAS_WRITABLE_CACHE_PUB
+ ),
+ d(
+ "Private Cache directory",
+ "Web server has write access",
+ f.HAS_WRITABLE_CACHE_PRV
+ ),
+ d(
+ "Image thumbs",
+ "PHP GD extension with JPEG support available",
+ f.HAS_PHP_JPEG
+ ),
+ d(
+ "Use EXIF thumbs",
+ "PHP EXIF extension available",
+ f.HAS_PHP_EXIF
+ ),
+ d(
+ "Movie thumbs",
+ "Command line program <code>avconv</code> or <code>ffmpeg</code> available",
+ f.HAS_CMD_AVCONV || f.HAS_CMD_FFMPEG
+ ),
+ d(
+ "PDF thumbs",
+ "Command line program <code>convert</code> or <code>gm</code> available",
+ f.HAS_CMD_CONVERT || f.HAS_CMD_GM
+ ),
+ d(
+ "Shell tar",
+ "Command line program <code>tar</code> available",
+ f.HAS_CMD_TAR
+ ),
+ d(
+ "Shell zip",
+ "Command line program <code>zip</code> available",
+ f.HAS_CMD_ZIP
+ ),
+ d(
+ "Shell du",
+ "Command line program <code>du</code> available",
+ f.HAS_CMD_DU
+ ));
+ },
+ h = function() {
+ e.window.location.reload();
+ },
+ g = function() {
+ o.request({ action: "login", pass: r("#pass").val() }).then(h);
+ },
+ m = function() {
+ o.request({ action: "logout" }).then(h);
+ },
+ v = function(e) {
+ 13 === e.which && g();
+ },
+ b = function() {
+ r(l).appTo("#content");
+ },
+ w = function() {
+ r(u).appTo("#content"),
+ f.AS_ADMIN ?
+ (r("#pass").rm(),
+ r("#login").rm(),
+ r("#logout").on("click", m)) :
+ (r("#pass").on("keydown", v)[0].focus(),
+ r("#login").on("click", g),
+ r("#logout").rm()),
+ i.options.hasCustomPasshash && r("#hint").rm();
+ },
+ y = function() {
+ b(), w(), p();
+ };
+ y();
+ }.call(
+ t,
+ (function() {
+ return this;
+ })()
+ ));
+ },
+]);
\ No newline at end of file
--
2.23.0
2
3
We need to create the access_key in the dir which we want to upload
file, it is hard to handle that.
So we save the upload_dirs in redis, then we can set the field in
scheduler, the result-webdav container will read the value by job id and check the upload dir.
Signed-off-by: Cao Xueliang <caoxl78320(a)163.com>
---
src/lib/job.cr | 23 ++++++++++++++---------
src/scheduler/close_job.cr | 6 ------
src/scheduler/find_job_boot.cr | 10 +++++-----
3 files changed, 19 insertions(+), 20 deletions(-)
diff --git a/src/lib/job.cr b/src/lib/job.cr
index 0083a7d..083a233 100644
--- a/src/lib/job.cr
+++ b/src/lib/job.cr
@@ -88,8 +88,7 @@ class Job
pp_params
submit_date
result_root
- access_key
- access_key_file
+ upload_dirs
lkp_initrd_user
user_lkp_src
kernel_uri
@@ -243,15 +242,21 @@ class Job
def set_result_root
update_tbox_group_from_testbox # id must exists, need update tbox_group
self["result_root"] = File.join("/result/#{suite}/#{submit_date}/#{tbox_group}/#{rootfs}", "#{pp_params}", "#{id}")
-
- # access_key has information based on "result_root"
- # so when set result_root, we need redo set_ to update it
- set_access_key()
+ set_upload_dirs()
end
- private def set_access_key
- self["access_key"] = "#{Random::Secure.hex(10)}-#{id}"
- self["access_key_file"] = File.join("/srv/", "#{result_root}", ".#{access_key}")
+ def set_upload_dirs
+ if @hash["cci-makepkg"]?
+ package_dir = ",/initrd/pkg"
+ elsif @hash["cci-depends"]?
+ package_dir = ",/initrd/deps"
+ elsif @hash["build-pkg"]?
+ package_dir = ",/initrd/build-pkg"
+ else
+ package_dir = ""
+ end
+
+ self["upload_dirs"] = "#{result_root}#{package_dir}"
end
private def set_result_service
diff --git a/src/scheduler/close_job.cr b/src/scheduler/close_job.cr
index 579c2c0..d8f80d7 100644
--- a/src/scheduler/close_job.cr
+++ b/src/scheduler/close_job.cr
@@ -8,8 +8,6 @@ class Sched
job = @redis.get_job(job_id)
- delete_access_key_file(job) if job
-
response = @es.set_job_content(job)
if response["_id"] == nil
# es update fail, raise exception
@@ -27,8 +25,4 @@ class Sched
@log.info(%({"job_id": "#{job_id}", "job_state": "complete"}))
end
-
- def delete_access_key_file(job : Job)
- File.delete(job.access_key_file) if File.exists?(job.access_key_file)
- end
end
diff --git a/src/scheduler/find_job_boot.cr b/src/scheduler/find_job_boot.cr
index 5a11523..6623a5e 100644
--- a/src/scheduler/find_job_boot.cr
+++ b/src/scheduler/find_job_boot.cr
@@ -141,10 +141,6 @@ class Sched
return response
end
- def touch_access_key_file(job : Job)
- FileUtils.touch(job.access_key_file)
- end
-
private def get_boot_ipxe(job : Job)
response = "#!ipxe\n\n"
response += Array(String).from_json(job.initrds_uri).join("\n") + "\n"
@@ -155,8 +151,12 @@ class Sched
return response
end
+ def set_id2upload_dirs(job)
+ @redis.hash_set("sched/id2upload_dirs", job.id, job.upload_dirs)
+ end
+
def boot_content(job : Job | Nil, boot_type : String)
- touch_access_key_file(job) if job
+ set_id2upload_dirs(job) if job
case boot_type
when "ipxe"
--
2.23.0
1
0

[PATCH v1 compass-ci] lib/mail_bisect_result: bisect email use new content
by Cao Xueliang 14 Dec '20
by Cao Xueliang 14 Dec '20
14 Dec '20
1. Add software name and first error message in subject
2. Add gcc version, error messages and job url in mail body
Signed-off-by: Cao Xueliang <caoxl78320(a)163.com>
---
lib/git_bisect.rb | 2 +-
lib/mail_bisect_result.rb | 20 +++++++++-----------
2 files changed, 10 insertions(+), 12 deletions(-)
diff --git a/lib/git_bisect.rb b/lib/git_bisect.rb
index 189edb8..97ad467 100644
--- a/lib/git_bisect.rb
+++ b/lib/git_bisect.rb
@@ -95,7 +95,7 @@ class GitBisect
error_messages = ErrorMessages.new(@build_pkg_dir).obtain_error_messages_by_errorid(@error_id)
return Hash['repo' => @upstream_repo, 'commit' => first_bad_commit,
- 'error_messages' => error_messages.join("\n")]
+ 'error_messages' => error_messages]
end
# first search the good commit in db
diff --git a/lib/mail_bisect_result.rb b/lib/mail_bisect_result.rb
index 5a208c4..c0a2731 100644
--- a/lib/mail_bisect_result.rb
+++ b/lib/mail_bisect_result.rb
@@ -19,23 +19,21 @@ class MailBisectResult
end
def compose_mail
- subject = "[Compass-CI] #{(a)repo}.git: bisect result"
+ subject = "[Compass-CI][#{(a)repo.split('/')[1]}]: #{@error_messages[0]}"
+ job_url = "job url: #{ENV['SRV_HTTP_HOST']}:#{ENV['SRV_HTTP_PORT']}/#{ENV['result_root']}\n" ? ENV['result_root'] : ''
body = <<~BODY
Hi #{(a)git_commit.author_name},
- Bisect completed for
+ git url: #{(a)git_commit.url}
+ git commit: #{@commit_id[0..11]} ("#{(a)git_commit.subject}")
- url: #{(a)git_commit.url}
-
- This is a bisect email from compass-ci. We met some problems when test with new commits.
- Would you help to check what happend?
- After submitting a job we noticed an error response due to the commit:
-
- commit: #{@commit_id[0..11]} ("#{(a)git_commit.subject}")
+ gcc version: 7.3.0
error_messages:
- #{@error_messages}
+ #{(a)error_messages.join("\n")}
- https://gitee.com/openeuler/compass-ci
+ #{job_url}
+ Regards,
+ Compass CI team
BODY
to = 'caoxl(a)crystal.ci'
@hash = { 'to' => to, 'body' => body, 'subject' => subject }
--
2.23.0
1
0