diff --git a/examples/embedded-filesystem/Makefile b/examples/embedded-filesystem/Makefile new file mode 100644 index 00000000..950b815a --- /dev/null +++ b/examples/embedded-filesystem/Makefile @@ -0,0 +1,51 @@ +PROG ?= example +SOURCES ?= ../../mongoose.c main.c packed_fs.c +CFLAGS ?= -I../.. -DMG_ENABLE_PACKED_FS=1 -DMG_ENABLE_LINES=1 $(EXTRA) +FILES_TO_EMBED ?= $(wildcard web_root/*) +ROOT ?= $(realpath $(CURDIR)/../../..) +DOCKER ?= docker run --rm -e Tmp=. -e WINEDEBUG=-all -v $(ROOT):$(ROOT) -w $(CURDIR) +VC98 ?= $(DOCKER) mdashnet/vc98 wine +MINGW ?= $(DOCKER) mdashnet/mingw + +all: $(PROG) + $(RUN) ./$(PROG) + +$(PROG): $(SOURCES) $(FILES_TO_EMBED) + $(CC) ../../test/pack.c -o pack + ./pack $(FILES_TO_EMBED) > packed_fs.c + $(CC) -W -Wall -Wextra -O0 -g3 $(CFLAGS) -o $(PROG) $(SOURCES) + + +mingw: $(SOURCES) $(FILES_TO_EMBED) + $(MINGW) i686-w64-mingw32-gcc $(CFLAGS) ../../test/pack.c -o pack.exe + $(MINGW) wine cmd /c 'pack.exe $(FILES_TO_EMBED) > packed_fs.c' + $(MINGW) i686-w64-mingw32-gcc $(CFLAGS) $(SOURCES) -lws2_32 -o $(PROG).exe + $(MINGW) wine $(PROG).exe + +vc98: $(SOURCES) $(FILES_TO_EMBED) + $(VC98) cl.exe /nologo $(CFLAGS) ../../test/pack.c /Fepack.exe + $(VC98) cmd /c 'pack.exe $(FILES_TO_EMBED) > packed_fs.c' + $(VC98) cl.exe /nologo /O2 $(CFLAGS) $(SOURCES) /Fe$(PROG).exe + $(VC98) $(PROG).exe + +clean: + rm -rf $(PROG) *.o *.dSYM *.gcov *.gcno *.gcda *.obj *.exe *.ilk *.pdb log.txt pack + +.PHONY: compress expand gzipped plain all + +gzipped: compress + $(MAKE) all + +plain: expand + $(MAKE) all + +compress: + for file in $(FILES_TO_EMBED) ; do \ + gzip -q $$file ; \ + done + +expand: + for file in $(FILES_TO_EMBED) ; do \ + gunzip -q $$file ; \ + done + diff --git a/examples/embedded-filesystem/main.c b/examples/embedded-filesystem/main.c new file mode 100644 index 00000000..3a42fdf3 --- /dev/null +++ b/examples/embedded-filesystem/main.c @@ -0,0 +1,28 @@ +// Copyright (c) 2022 Cesanta Software Limited +// All rights reserved + +#include "mongoose.h" + +const char *s_listening_url = "http://0.0.0.0:8000"; + +// HTTP request handler function +void fn(struct mg_connection *c, int ev, void *ev_data, void *fn_data) { + if (ev == MG_EV_HTTP_MSG) { + struct mg_http_serve_opts opts = { + .root_dir = "/web_root", + .fs = &mg_fs_packed + }; + mg_http_serve_dir(c, ev_data, &opts); + } + (void) fn_data; +} + +int main(void) { + struct mg_mgr mgr; + mg_log_set(MG_LL_INFO); + mg_mgr_init(&mgr); + mg_http_listen(&mgr, s_listening_url, fn, NULL); + while (true) mg_mgr_poll(&mgr, 500); + mg_mgr_free(&mgr); + return 0; +} diff --git a/examples/embedded-filesystem/packed_fs.c b/examples/embedded-filesystem/packed_fs.c new file mode 100644 index 00000000..6b3d62c8 --- /dev/null +++ b/examples/embedded-filesystem/packed_fs.c @@ -0,0 +1,1565 @@ +#include +#include +#include + +static const unsigned char v1[] = { + 60, 33, 68, 79, 67, 84, 89, 80, 69, 32, 104, 116, // .. < + 104, 101, 97, 100, 62, 10, 32, 32, 32, 32, 60, 109, // head>. . + 32, 32, 32, 32, 60, 109, 101, 116, 97, 32, 104, 116, // . + 32, 32, 32, 32, 60, 109, 101, 116, 97, 32, 104, 116, // . + 32, 32, 60, 109, 101, 116, 97, 32, 110, 97, 109, 101, // . + 32, 32, 32, 32, 32, 32, 32, 60, 116, 105, 116, 108, // Mongoose E + 109, 98, 101, 100, 100, 101, 100, 32, 70, 105, 108, 101, // mbedded File + 115, 121, 116, 101, 109, 32, 101, 120, 97, 109, 112, 108, // sytem exampl + 101, 60, 47, 116, 105, 116, 108, 101, 62, 10, 32, 32, // e. + 32, 32, 60, 108, 105, 110, 107, 32, 114, 101, 108, 61, // . < + 47, 104, 101, 97, 100, 62, 10, 32, 32, 60, 98, 111, // /head>. . + 32, 60, 115, 99, 114, 105, 112, 116, 32, 116, 121, 112, // .< + 47, 104, 116, 109, 108, 62, 10, 0 // /html>. +}; +static const unsigned char v2[] = { + 118, 97, 114, 32, 101, 44, 110, 44, 95, 44, 116, 44, // var e,n,_,t, + 111, 44, 114, 44, 117, 44, 108, 61, 123, 125, 44, 105, // o,r,u,l={},i + 61, 91, 93, 44, 99, 61, 47, 97, 99, 105, 116, 124, // =[],c=/acit| + 101, 120, 40, 63, 58, 115, 124, 103, 124, 110, 124, 112, // ex(?:s|g|n|p + 124, 36, 41, 124, 114, 112, 104, 124, 103, 114, 105, 100, // |$)|rph|grid + 124, 111, 119, 115, 124, 109, 110, 99, 124, 110, 116, 119, // |ows|mnc|ntw + 124, 105, 110, 101, 91, 99, 104, 93, 124, 122, 111, 111, // |ine[ch]|zoo + 124, 94, 111, 114, 100, 124, 105, 116, 101, 114, 97, 47, // |^ord|itera/ + 105, 59, 102, 117, 110, 99, 116, 105, 111, 110, 32, 115, // i;function s + 40, 101, 44, 110, 41, 123, 102, 111, 114, 40, 118, 97, // (e,n){for(va + 114, 32, 95, 32, 105, 110, 32, 110, 41, 101, 91, 95, // r _ in n)e[_ + 93, 61, 110, 91, 95, 93, 59, 114, 101, 116, 117, 114, // ]=n[_];retur + 110, 32, 101, 125, 102, 117, 110, 99, 116, 105, 111, 110, // n e}function + 32, 102, 40, 101, 41, 123, 118, 97, 114, 32, 110, 61, // f(e){var n= + 101, 46, 112, 97, 114, 101, 110, 116, 78, 111, 100, 101, // e.parentNode + 59, 110, 38, 38, 110, 46, 114, 101, 109, 111, 118, 101, // ;n&&n.remove + 67, 104, 105, 108, 100, 40, 101, 41, 125, 102, 117, 110, // Child(e)}fun + 99, 116, 105, 111, 110, 32, 97, 40, 110, 44, 95, 44, // ction a(n,_, + 116, 41, 123, 118, 97, 114, 32, 111, 44, 114, 44, 117, // t){var o,r,u + 44, 108, 61, 123, 125, 59, 102, 111, 114, 40, 117, 32, // ,l={};for(u + 105, 110, 32, 95, 41, 34, 107, 101, 121, 34, 61, 61, // in _)"key"== + 117, 63, 111, 61, 95, 91, 117, 93, 58, 34, 114, 101, // u?o=_[u]:"re + 102, 34, 61, 61, 117, 63, 114, 61, 95, 91, 117, 93, // f"==u?r=_[u] + 58, 108, 91, 117, 93, 61, 95, 91, 117, 93, 59, 105, // :l[u]=_[u];i + 102, 40, 97, 114, 103, 117, 109, 101, 110, 116, 115, 46, // f(arguments. + 108, 101, 110, 103, 116, 104, 62, 50, 38, 38, 40, 108, // length>2&&(l + 46, 99, 104, 105, 108, 100, 114, 101, 110, 61, 97, 114, // .children=ar + 103, 117, 109, 101, 110, 116, 115, 46, 108, 101, 110, 103, // guments.leng + 116, 104, 62, 51, 63, 101, 46, 99, 97, 108, 108, 40, // th>3?e.call( + 97, 114, 103, 117, 109, 101, 110, 116, 115, 44, 50, 41, // arguments,2) + 58, 116, 41, 44, 34, 102, 117, 110, 99, 116, 105, 111, // :t),"functio + 110, 34, 61, 61, 116, 121, 112, 101, 111, 102, 32, 110, // n"==typeof n + 38, 38, 110, 117, 108, 108, 33, 61, 110, 46, 100, 101, // &&null!=n.de + 102, 97, 117, 108, 116, 80, 114, 111, 112, 115, 41, 102, // faultProps)f + 111, 114, 40, 117, 32, 105, 110, 32, 110, 46, 100, 101, // or(u in n.de + 102, 97, 117, 108, 116, 80, 114, 111, 112, 115, 41, 118, // faultProps)v + 111, 105, 100, 32, 48, 61, 61, 61, 108, 91, 117, 93, // oid 0===l[u] + 38, 38, 40, 108, 91, 117, 93, 61, 110, 46, 100, 101, // &&(l[u]=n.de + 102, 97, 117, 108, 116, 80, 114, 111, 112, 115, 91, 117, // faultProps[u + 93, 41, 59, 114, 101, 116, 117, 114, 110, 32, 112, 40, // ]);return p( + 110, 44, 108, 44, 111, 44, 114, 44, 110, 117, 108, 108, // n,l,o,r,null + 41, 125, 102, 117, 110, 99, 116, 105, 111, 110, 32, 112, // )}function p + 40, 101, 44, 116, 44, 111, 44, 114, 44, 117, 41, 123, // (e,t,o,r,u){ + 118, 97, 114, 32, 108, 61, 123, 116, 121, 112, 101, 58, // var l={type: + 101, 44, 112, 114, 111, 112, 115, 58, 116, 44, 107, 101, // e,props:t,ke + 121, 58, 111, 44, 114, 101, 102, 58, 114, 44, 95, 95, // y:o,ref:r,__ + 107, 58, 110, 117, 108, 108, 44, 95, 95, 58, 110, 117, // k:null,__:nu + 108, 108, 44, 95, 95, 98, 58, 48, 44, 95, 95, 101, // ll,__b:0,__e + 58, 110, 117, 108, 108, 44, 95, 95, 100, 58, 118, 111, // :null,__d:vo + 105, 100, 32, 48, 44, 95, 95, 99, 58, 110, 117, 108, // id 0,__c:nul + 108, 44, 95, 95, 104, 58, 110, 117, 108, 108, 44, 99, // l,__h:null,c + 111, 110, 115, 116, 114, 117, 99, 116, 111, 114, 58, 118, // onstructor:v + 111, 105, 100, 32, 48, 44, 95, 95, 118, 58, 110, 117, // oid 0,__v:nu + 108, 108, 61, 61, 117, 63, 43, 43, 95, 58, 117, 125, // ll==u?++_:u} + 59, 114, 101, 116, 117, 114, 110, 32, 110, 117, 108, 108, // ;return null + 33, 61, 110, 46, 118, 110, 111, 100, 101, 38, 38, 110, // !=n.vnode&&n + 46, 118, 110, 111, 100, 101, 40, 108, 41, 44, 108, 125, // .vnode(l),l} + 102, 117, 110, 99, 116, 105, 111, 110, 32, 104, 40, 101, // function h(e + 41, 123, 114, 101, 116, 117, 114, 110, 32, 101, 46, 99, // ){return e.c + 104, 105, 108, 100, 114, 101, 110, 125, 102, 117, 110, 99, // hildren}func + 116, 105, 111, 110, 32, 100, 40, 101, 44, 110, 41, 123, // tion d(e,n){ + 116, 104, 105, 115, 46, 112, 114, 111, 112, 115, 61, 101, // this.props=e + 44, 116, 104, 105, 115, 46, 99, 111, 110, 116, 101, 120, // ,this.contex + 116, 61, 110, 125, 102, 117, 110, 99, 116, 105, 111, 110, // t=n}function + 32, 118, 40, 101, 44, 110, 41, 123, 105, 102, 40, 110, // v(e,n){if(n + 117, 108, 108, 61, 61, 110, 41, 114, 101, 116, 117, 114, // ull==n)retur + 110, 32, 101, 46, 95, 95, 63, 118, 40, 101, 46, 95, // n e.__?v(e._ + 95, 44, 101, 46, 95, 95, 46, 95, 95, 107, 46, 105, // _,e.__.__k.i + 110, 100, 101, 120, 79, 102, 40, 101, 41, 43, 49, 41, // ndexOf(e)+1) + 58, 110, 117, 108, 108, 59, 102, 111, 114, 40, 118, 97, // :null;for(va + 114, 32, 95, 59, 110, 60, 101, 46, 95, 95, 107, 46, // r _;n0?p(m. + 116, 121, 112, 101, 44, 109, 46, 112, 114, 111, 112, 115, // type,m.props + 44, 109, 46, 107, 101, 121, 44, 110, 117, 108, 108, 44, // ,m.key,null, + 109, 46, 95, 95, 118, 41, 58, 109, 41, 41, 123, 105, // m.__v):m)){i + 102, 40, 109, 46, 95, 95, 61, 95, 44, 109, 46, 95, // f(m.__=_,m._ + 95, 98, 61, 95, 46, 95, 95, 98, 43, 49, 44, 110, // _b=_.__b+1,n + 117, 108, 108, 61, 61, 61, 40, 121, 61, 72, 91, 97, // ull===(y=H[a + 93, 41, 124, 124, 121, 38, 38, 109, 46, 107, 101, 121, // ])||y&&m.key + 61, 61, 121, 46, 107, 101, 121, 38, 38, 109, 46, 116, // ==y.key&&m.t + 121, 112, 101, 61, 61, 61, 121, 46, 116, 121, 112, 101, // ype===y.type + 41, 72, 91, 97, 93, 61, 118, 111, 105, 100, 32, 48, // )H[a]=void 0 + 59, 101, 108, 115, 101, 32, 102, 111, 114, 40, 100, 61, // ;else for(d= + 48, 59, 100, 60, 69, 59, 100, 43, 43, 41, 123, 105, // 0;d=t.__.len + 103, 116, 104, 38, 38, 116, 46, 95, 95, 46, 112, 117, // gth&&t.__.pu + 115, 104, 40, 123, 125, 41, 44, 116, 46, 95, 95, 91, // sh({}),t.__[ + 101, 93, 125, 102, 117, 110, 99, 116, 105, 111, 110, 32, // e]}function + 71, 40, 101, 41, 123, 114, 101, 116, 117, 114, 110, 32, // G(e){return + 82, 61, 49, 44, 122, 40, 105, 101, 44, 101, 41, 125, // R=1,z(ie,e)} + 102, 117, 110, 99, 116, 105, 111, 110, 32, 122, 40, 101, // function z(e + 44, 110, 44, 95, 41, 123, 118, 97, 114, 32, 116, 61, // ,n,_){var t= + 106, 40, 76, 43, 43, 44, 50, 41, 59, 114, 101, 116, // j(L++,2);ret + 117, 114, 110, 32, 116, 46, 116, 61, 101, 44, 116, 46, // urn t.t=e,t. + 95, 95, 99, 124, 124, 40, 116, 46, 95, 95, 61, 91, // __c||(t.__=[ + 95, 63, 95, 40, 110, 41, 58, 105, 101, 40, 118, 111, // _?_(n):ie(vo + 105, 100, 32, 48, 44, 110, 41, 44, 102, 117, 110, 99, // id 0,n),func + 116, 105, 111, 110, 40, 101, 41, 123, 118, 97, 114, 32, // tion(e){var + 110, 61, 116, 46, 116, 40, 116, 46, 95, 95, 91, 48, // n=t.t(t.__[0 + 93, 44, 101, 41, 59, 116, 46, 95, 95, 91, 48, 93, // ],e);t.__[0] + 33, 61, 61, 110, 38, 38, 40, 116, 46, 95, 95, 61, // !==n&&(t.__= + 91, 110, 44, 116, 46, 95, 95, 91, 49, 93, 93, 44, // [n,t.__[1]], + 116, 46, 95, 95, 99, 46, 115, 101, 116, 83, 116, 97, // t.__c.setSta + 116, 101, 40, 123, 125, 41, 41, 125, 93, 44, 116, 46, // te({}))}],t. + 95, 95, 99, 61, 78, 41, 44, 116, 46, 95, 95, 125, // __c=N),t.__} + 102, 117, 110, 99, 116, 105, 111, 110, 32, 74, 40, 101, // function J(e + 44, 95, 41, 123, 118, 97, 114, 32, 116, 61, 106, 40, // ,_){var t=j( + 76, 43, 43, 44, 51, 41, 59, 33, 110, 46, 95, 95, // L++,3);!n.__ + 115, 38, 38, 108, 101, 40, 116, 46, 95, 95, 72, 44, // s&&le(t.__H, + 95, 41, 38, 38, 40, 116, 46, 95, 95, 61, 101, 44, // _)&&(t.__=e, + 116, 46, 95, 95, 72, 61, 95, 44, 78, 46, 95, 95, // t.__H=_,N.__ + 72, 46, 95, 95, 104, 46, 112, 117, 115, 104, 40, 116, // H.__h.push(t + 41, 41, 125, 102, 117, 110, 99, 116, 105, 111, 110, 32, // ))}function + 75, 40, 101, 44, 95, 41, 123, 118, 97, 114, 32, 116, // K(e,_){var t + 61, 106, 40, 76, 43, 43, 44, 52, 41, 59, 33, 110, // =j(L++,4);!n + 46, 95, 95, 115, 38, 38, 108, 101, 40, 116, 46, 95, // .__s&&le(t._ + 95, 72, 44, 95, 41, 38, 38, 40, 116, 46, 95, 95, // _H,_)&&(t.__ + 61, 101, 44, 116, 46, 95, 95, 72, 61, 95, 44, 78, // =e,t.__H=_,N + 46, 95, 95, 104, 46, 112, 117, 115, 104, 40, 116, 41, // .__h.push(t) + 41, 125, 102, 117, 110, 99, 116, 105, 111, 110, 32, 81, // )}function Q + 40, 101, 41, 123, 114, 101, 116, 117, 114, 110, 32, 82, // (e){return R + 61, 53, 44, 89, 40, 102, 117, 110, 99, 116, 105, 111, // =5,Y(functio + 110, 40, 41, 123, 114, 101, 116, 117, 114, 110, 123, 99, // n(){return{c + 117, 114, 114, 101, 110, 116, 58, 101, 125, 125, 44, 91, // urrent:e}},[ + 93, 41, 125, 102, 117, 110, 99, 116, 105, 111, 110, 32, // ])}function + 88, 40, 101, 44, 110, 44, 95, 41, 123, 82, 61, 54, // X(e,n,_){R=6 + 44, 75, 40, 102, 117, 110, 99, 116, 105, 111, 110, 40, // ,K(function( + 41, 123, 34, 102, 117, 110, 99, 116, 105, 111, 110, 34, // ){"function" + 61, 61, 116, 121, 112, 101, 111, 102, 32, 101, 63, 101, // ==typeof e?e + 40, 110, 40, 41, 41, 58, 101, 38, 38, 40, 101, 46, // (n()):e&&(e. + 99, 117, 114, 114, 101, 110, 116, 61, 110, 40, 41, 41, // current=n()) + 125, 44, 110, 117, 108, 108, 61, 61, 95, 63, 95, 58, // },null==_?_: + 95, 46, 99, 111, 110, 99, 97, 116, 40, 101, 41, 41, // _.concat(e)) + 125, 102, 117, 110, 99, 116, 105, 111, 110, 32, 89, 40, // }function Y( + 101, 44, 110, 41, 123, 118, 97, 114, 32, 95, 61, 106, // e,n){var _=j + 40, 76, 43, 43, 44, 55, 41, 59, 114, 101, 116, 117, // (L++,7);retu + 114, 110, 32, 108, 101, 40, 95, 46, 95, 95, 72, 44, // rn le(_.__H, + 110, 41, 38, 38, 40, 95, 46, 95, 95, 61, 101, 40, // n)&&(_.__=e( + 41, 44, 95, 46, 95, 95, 72, 61, 110, 44, 95, 46, // ),_.__H=n,_. + 95, 95, 104, 61, 101, 41, 44, 95, 46, 95, 95, 125, // __h=e),_.__} + 102, 117, 110, 99, 116, 105, 111, 110, 32, 90, 40, 101, // function Z(e + 44, 110, 41, 123, 114, 101, 116, 117, 114, 110, 32, 82, // ,n){return R + 61, 56, 44, 89, 40, 102, 117, 110, 99, 116, 105, 111, // =8,Y(functio + 110, 40, 41, 123, 114, 101, 116, 117, 114, 110, 32, 101, // n(){return e + 125, 44, 110, 41, 125, 102, 117, 110, 99, 116, 105, 111, // },n)}functio + 110, 32, 101, 101, 40, 101, 41, 123, 118, 97, 114, 32, // n ee(e){var + 110, 61, 78, 46, 99, 111, 110, 116, 101, 120, 116, 91, // n=N.context[ + 101, 46, 95, 95, 99, 93, 44, 95, 61, 106, 40, 76, // e.__c],_=j(L + 43, 43, 44, 57, 41, 59, 114, 101, 116, 117, 114, 110, // ++,9);return + 32, 95, 46, 99, 61, 101, 44, 110, 63, 40, 110, 117, // _.c=e,n?(nu + 108, 108, 61, 61, 95, 46, 95, 95, 38, 38, 40, 95, // ll==_.__&&(_ + 46, 95, 95, 61, 33, 48, 44, 110, 46, 115, 117, 98, // .__=!0,n.sub + 40, 78, 41, 41, 44, 110, 46, 112, 114, 111, 112, 115, // (N)),n.props + 46, 118, 97, 108, 117, 101, 41, 58, 101, 46, 95, 95, // .value):e.__ + 125, 102, 117, 110, 99, 116, 105, 111, 110, 32, 110, 101, // }function ne + 40, 101, 44, 95, 41, 123, 110, 46, 117, 115, 101, 68, // (e,_){n.useD + 101, 98, 117, 103, 86, 97, 108, 117, 101, 38, 38, 110, // ebugValue&&n + 46, 117, 115, 101, 68, 101, 98, 117, 103, 86, 97, 108, // .useDebugVal + 117, 101, 40, 95, 63, 95, 40, 101, 41, 58, 101, 41, // ue(_?_(e):e) + 125, 102, 117, 110, 99, 116, 105, 111, 110, 32, 95, 101, // }function _e + 40, 101, 41, 123, 118, 97, 114, 32, 110, 61, 106, 40, // (e){var n=j( + 76, 43, 43, 44, 49, 48, 41, 44, 95, 61, 71, 40, // L++,10),_=G( + 41, 59, 114, 101, 116, 117, 114, 110, 32, 110, 46, 95, // );return n._ + 95, 61, 101, 44, 78, 46, 99, 111, 109, 112, 111, 110, // _=e,N.compon + 101, 110, 116, 68, 105, 100, 67, 97, 116, 99, 104, 124, // entDidCatch| + 124, 40, 78, 46, 99, 111, 109, 112, 111, 110, 101, 110, // |(N.componen + 116, 68, 105, 100, 67, 97, 116, 99, 104, 61, 102, 117, // tDidCatch=fu + 110, 99, 116, 105, 111, 110, 40, 101, 41, 123, 110, 46, // nction(e){n. + 95, 95, 38, 38, 110, 46, 95, 95, 40, 101, 41, 44, // __&&n.__(e), + 95, 91, 49, 93, 40, 101, 41, 125, 41, 44, 91, 95, // _[1](e)}),[_ + 91, 48, 93, 44, 102, 117, 110, 99, 116, 105, 111, 110, // [0],function + 40, 41, 123, 95, 91, 49, 93, 40, 118, 111, 105, 100, // (){_[1](void + 32, 48, 41, 125, 93, 125, 102, 117, 110, 99, 116, 105, // 0)}]}functi + 111, 110, 32, 116, 101, 40, 41, 123, 73, 46, 102, 111, // on te(){I.fo + 114, 69, 97, 99, 104, 40, 102, 117, 110, 99, 116, 105, // rEach(functi + 111, 110, 40, 101, 41, 123, 105, 102, 40, 101, 46, 95, // on(e){if(e._ + 95, 80, 41, 116, 114, 121, 123, 101, 46, 95, 95, 72, // _P)try{e.__H + 46, 95, 95, 104, 46, 102, 111, 114, 69, 97, 99, 104, // .__h.forEach + 40, 114, 101, 41, 44, 101, 46, 95, 95, 72, 46, 95, // (re),e.__H._ + 95, 104, 46, 102, 111, 114, 69, 97, 99, 104, 40, 117, // _h.forEach(u + 101, 41, 44, 101, 46, 95, 95, 72, 46, 95, 95, 104, // e),e.__H.__h + 61, 91, 93, 125, 99, 97, 116, 99, 104, 40, 95, 41, // =[]}catch(_) + 123, 101, 46, 95, 95, 72, 46, 95, 95, 104, 61, 91, // {e.__H.__h=[ + 93, 44, 110, 46, 95, 95, 101, 40, 95, 44, 101, 46, // ],n.__e(_,e. + 95, 95, 118, 41, 125, 125, 41, 44, 73, 61, 91, 93, // __v)}}),I=[] + 125, 110, 46, 95, 95, 98, 61, 102, 117, 110, 99, 116, // }n.__b=funct + 105, 111, 110, 40, 101, 41, 123, 78, 61, 110, 117, 108, // ion(e){N=nul + 108, 44, 79, 38, 38, 79, 40, 101, 41, 125, 44, 110, // l,O&&O(e)},n + 46, 95, 95, 114, 61, 102, 117, 110, 99, 116, 105, 111, // .__r=functio + 110, 40, 101, 41, 123, 86, 38, 38, 86, 40, 101, 41, // n(e){V&&V(e) + 44, 76, 61, 48, 59, 118, 97, 114, 32, 110, 61, 40, // ,L=0;var n=( + 78, 61, 101, 46, 95, 95, 99, 41, 46, 95, 95, 72, // N=e.__c).__H + 59, 110, 38, 38, 40, 110, 46, 95, 95, 104, 46, 102, // ;n&&(n.__h.f + 111, 114, 69, 97, 99, 104, 40, 114, 101, 41, 44, 110, // orEach(re),n + 46, 95, 95, 104, 46, 102, 111, 114, 69, 97, 99, 104, // .__h.forEach + 40, 117, 101, 41, 44, 110, 46, 95, 95, 104, 61, 91, // (ue),n.__h=[ + 93, 41, 125, 44, 110, 46, 100, 105, 102, 102, 101, 100, // ])},n.diffed + 61, 102, 117, 110, 99, 116, 105, 111, 110, 40, 101, 41, // =function(e) + 123, 113, 38, 38, 113, 40, 101, 41, 59, 118, 97, 114, // {q&&q(e);var + 32, 95, 61, 101, 46, 95, 95, 99, 59, 95, 38, 38, // _=e.__c;_&& + 95, 46, 95, 95, 72, 38, 38, 95, 46, 95, 95, 72, // _.__H&&_.__H + 46, 95, 95, 104, 46, 108, 101, 110, 103, 116, 104, 38, // .__h.length& + 38, 40, 49, 33, 61, 61, 73, 46, 112, 117, 115, 104, // &(1!==I.push + 40, 95, 41, 38, 38, 87, 61, 61, 61, 110, 46, 114, // (_)&&W===n.r + 101, 113, 117, 101, 115, 116, 65, 110, 105, 109, 97, 116, // equestAnimat + 105, 111, 110, 70, 114, 97, 109, 101, 124, 124, 40, 40, // ionFrame||(( + 87, 61, 110, 46, 114, 101, 113, 117, 101, 115, 116, 65, // W=n.requestA + 110, 105, 109, 97, 116, 105, 111, 110, 70, 114, 97, 109, // nimationFram + 101, 41, 124, 124, 102, 117, 110, 99, 116, 105, 111, 110, // e)||function + 40, 101, 41, 123, 118, 97, 114, 32, 110, 44, 95, 61, // (e){var n,_= + 102, 117, 110, 99, 116, 105, 111, 110, 40, 41, 123, 99, // function(){c + 108, 101, 97, 114, 84, 105, 109, 101, 111, 117, 116, 40, // learTimeout( + 116, 41, 44, 111, 101, 38, 38, 99, 97, 110, 99, 101, // t),oe&&cance + 108, 65, 110, 105, 109, 97, 116, 105, 111, 110, 70, 114, // lAnimationFr + 97, 109, 101, 40, 110, 41, 44, 115, 101, 116, 84, 105, // ame(n),setTi + 109, 101, 111, 117, 116, 40, 101, 41, 125, 44, 116, 61, // meout(e)},t= + 115, 101, 116, 84, 105, 109, 101, 111, 117, 116, 40, 95, // setTimeout(_ + 44, 49, 48, 48, 41, 59, 111, 101, 38, 38, 40, 110, // ,100);oe&&(n + 61, 114, 101, 113, 117, 101, 115, 116, 65, 110, 105, 109, // =requestAnim + 97, 116, 105, 111, 110, 70, 114, 97, 109, 101, 40, 95, // ationFrame(_ + 41, 41, 125, 41, 40, 116, 101, 41, 41, 44, 78, 61, // ))})(te)),N= + 118, 111, 105, 100, 32, 48, 125, 44, 110, 46, 95, 95, // void 0},n.__ + 99, 61, 102, 117, 110, 99, 116, 105, 111, 110, 40, 101, // c=function(e + 44, 95, 41, 123, 95, 46, 115, 111, 109, 101, 40, 102, // ,_){_.some(f + 117, 110, 99, 116, 105, 111, 110, 40, 101, 41, 123, 116, // unction(e){t + 114, 121, 123, 101, 46, 95, 95, 104, 46, 102, 111, 114, // ry{e.__h.for + 69, 97, 99, 104, 40, 114, 101, 41, 44, 101, 46, 95, // Each(re),e._ + 95, 104, 61, 101, 46, 95, 95, 104, 46, 102, 105, 108, // _h=e.__h.fil + 116, 101, 114, 40, 102, 117, 110, 99, 116, 105, 111, 110, // ter(function + 40, 101, 41, 123, 114, 101, 116, 117, 114, 110, 33, 101, // (e){return!e + 46, 95, 95, 124, 124, 117, 101, 40, 101, 41, 125, 41, // .__||ue(e)}) + 125, 99, 97, 116, 99, 104, 40, 116, 41, 123, 95, 46, // }catch(t){_. + 115, 111, 109, 101, 40, 102, 117, 110, 99, 116, 105, 111, // some(functio + 110, 40, 101, 41, 123, 101, 46, 95, 95, 104, 38, 38, // n(e){e.__h&& + 40, 101, 46, 95, 95, 104, 61, 91, 93, 41, 125, 41, // (e.__h=[])}) + 44, 95, 61, 91, 93, 44, 110, 46, 95, 95, 101, 40, // ,_=[],n.__e( + 116, 44, 101, 46, 95, 95, 118, 41, 125, 125, 41, 44, // t,e.__v)}}), + 66, 38, 38, 66, 40, 101, 44, 95, 41, 125, 44, 110, // B&&B(e,_)},n + 46, 117, 110, 109, 111, 117, 110, 116, 61, 102, 117, 110, // .unmount=fun + 99, 116, 105, 111, 110, 40, 101, 41, 123, 36, 38, 38, // ction(e){$&& + 36, 40, 101, 41, 59, 118, 97, 114, 32, 95, 61, 101, // $(e);var _=e + 46, 95, 95, 99, 59, 105, 102, 40, 95, 38, 38, 95, // .__c;if(_&&_ + 46, 95, 95, 72, 41, 116, 114, 121, 123, 95, 46, 95, // .__H)try{_._ + 95, 72, 46, 95, 95, 46, 102, 111, 114, 69, 97, 99, // _H.__.forEac + 104, 40, 114, 101, 41, 125, 99, 97, 116, 99, 104, 40, // h(re)}catch( + 101, 41, 123, 110, 46, 95, 95, 101, 40, 101, 44, 95, // e){n.__e(e,_ + 46, 95, 95, 118, 41, 125, 125, 59, 118, 97, 114, 32, // .__v)}};var + 111, 101, 61, 34, 102, 117, 110, 99, 116, 105, 111, 110, // oe="function + 34, 61, 61, 116, 121, 112, 101, 111, 102, 32, 114, 101, // "==typeof re + 113, 117, 101, 115, 116, 65, 110, 105, 109, 97, 116, 105, // questAnimati + 111, 110, 70, 114, 97, 109, 101, 59, 102, 117, 110, 99, // onFrame;func + 116, 105, 111, 110, 32, 114, 101, 40, 101, 41, 123, 118, // tion re(e){v + 97, 114, 32, 110, 61, 78, 59, 34, 102, 117, 110, 99, // ar n=N;"func + 116, 105, 111, 110, 34, 61, 61, 116, 121, 112, 101, 111, // tion"==typeo + 102, 32, 101, 46, 95, 95, 99, 38, 38, 101, 46, 95, // f e.__c&&e._ + 95, 99, 40, 41, 44, 78, 61, 110, 125, 102, 117, 110, // _c(),N=n}fun + 99, 116, 105, 111, 110, 32, 117, 101, 40, 101, 41, 123, // ction ue(e){ + 118, 97, 114, 32, 110, 61, 78, 59, 101, 46, 95, 95, // var n=N;e.__ + 99, 61, 101, 46, 95, 95, 40, 41, 44, 78, 61, 110, // c=e.__(),N=n + 125, 102, 117, 110, 99, 116, 105, 111, 110, 32, 108, 101, // }function le + 40, 101, 44, 110, 41, 123, 114, 101, 116, 117, 114, 110, // (e,n){return + 33, 101, 124, 124, 101, 46, 108, 101, 110, 103, 116, 104, // !e||e.length + 33, 61, 61, 110, 46, 108, 101, 110, 103, 116, 104, 124, // !==n.length| + 124, 110, 46, 115, 111, 109, 101, 40, 102, 117, 110, 99, // |n.some(func + 116, 105, 111, 110, 40, 110, 44, 95, 41, 123, 114, 101, // tion(n,_){re + 116, 117, 114, 110, 32, 110, 33, 61, 61, 101, 91, 95, // turn n!==e[_ + 93, 125, 41, 125, 102, 117, 110, 99, 116, 105, 111, 110, // ]})}function + 32, 105, 101, 40, 101, 44, 110, 41, 123, 114, 101, 116, // ie(e,n){ret + 117, 114, 110, 34, 102, 117, 110, 99, 116, 105, 111, 110, // urn"function + 34, 61, 61, 116, 121, 112, 101, 111, 102, 32, 110, 63, // "==typeof n? + 110, 40, 101, 41, 58, 110, 125, 118, 97, 114, 32, 99, // n(e):n}var c + 101, 61, 102, 117, 110, 99, 116, 105, 111, 110, 40, 101, // e=function(e + 44, 110, 44, 95, 44, 116, 41, 123, 118, 97, 114, 32, // ,n,_,t){var + 111, 59, 110, 91, 48, 93, 61, 48, 59, 102, 111, 114, // o;n[0]=0;for + 40, 118, 97, 114, 32, 114, 61, 49, 59, 114, 60, 110, // (var r=1;r=5&& + 40, 40, 111, 124, 124, 33, 101, 38, 38, 53, 61, 61, // ((o||!e&&5== + 61, 116, 41, 38, 38, 40, 117, 46, 112, 117, 115, 104, // =t)&&(u.push + 40, 116, 44, 48, 44, 111, 44, 95, 41, 44, 116, 61, // (t,0,o,_),t= + 54, 41, 44, 101, 38, 38, 40, 117, 46, 112, 117, 115, // 6),e&&(u.pus + 104, 40, 116, 44, 101, 44, 48, 44, 95, 41, 44, 116, // h(t,e,0,_),t + 61, 54, 41, 41, 44, 111, 61, 34, 34, 125, 44, 105, // =6)),o=""},i + 61, 48, 59, 105, 60, 101, 46, 108, 101, 110, 103, 116, // =0;i"===n?(t=1, + 111, 61, 34, 34, 41, 58, 111, 61, 110, 43, 111, 91, // o=""):o=n+o[ + 48, 93, 58, 114, 63, 110, 61, 61, 61, 114, 63, 114, // 0]:r?n===r?r + 61, 34, 34, 58, 111, 43, 61, 110, 58, 39, 34, 39, // ="":o+=n:'"' + 61, 61, 61, 110, 124, 124, 34, 39, 34, 61, 61, 61, // ===n||"'"=== + 110, 63, 114, 61, 110, 58, 34, 62, 34, 61, 61, 61, // n?r=n:">"=== + 110, 63, 40, 108, 40, 41, 44, 116, 61, 49, 41, 58, // n?(l(),t=1): + 116, 38, 38, 40, 34, 61, 34, 61, 61, 61, 110, 63, // t&&("="===n? + 40, 116, 61, 53, 44, 95, 61, 111, 44, 111, 61, 34, // (t=5,_=o,o=" + 34, 41, 58, 34, 47, 34, 61, 61, 61, 110, 38, 38, // "):"/"===n&& + 40, 116, 60, 53, 124, 124, 34, 62, 34, 61, 61, 61, // (t<5||">"=== + 101, 91, 105, 93, 91, 99, 43, 49, 93, 41, 63, 40, // e[i][c+1])?( + 108, 40, 41, 44, 51, 61, 61, 61, 116, 38, 38, 40, // l(),3===t&&( + 117, 61, 117, 91, 48, 93, 41, 44, 116, 61, 117, 44, // u=u[0]),t=u, + 40, 117, 61, 117, 91, 48, 93, 41, 46, 112, 117, 115, // (u=u[0]).pus + 104, 40, 50, 44, 48, 44, 116, 41, 44, 116, 61, 48, // h(2,0,t),t=0 + 41, 58, 34, 32, 34, 61, 61, 61, 110, 124, 124, 34, // ):" "===n||" + 92, 116, 34, 61, 61, 61, 110, 124, 124, 34, 92, 110, // .t"===n||".n + 34, 61, 61, 61, 110, 124, 124, 34, 92, 114, 34, 61, // "===n||".r"= + 61, 61, 110, 63, 40, 108, 40, 41, 44, 116, 61, 50, // ==n?(l(),t=2 + 41, 58, 111, 43, 61, 110, 41, 44, 51, 61, 61, 61, // ):o+=n),3=== + 116, 38, 38, 34, 33, 45, 45, 34, 61, 61, 61, 111, // t&&"!--"===o + 38, 38, 40, 116, 61, 52, 44, 117, 61, 117, 91, 48, // &&(t=4,u=u[0 + 93, 41, 125, 114, 101, 116, 117, 114, 110, 32, 108, 40, // ])}return l( + 41, 44, 117, 125, 40, 101, 41, 41, 44, 110, 41, 44, // ),u}(e)),n), + 97, 114, 103, 117, 109, 101, 110, 116, 115, 44, 91, 93, // arguments,[] + 41, 41, 46, 108, 101, 110, 103, 116, 104, 62, 49, 63, // )).length>1? + 110, 58, 110, 91, 48, 93, 125, 46, 98, 105, 110, 100, // n:n[0]}.bind + 40, 97, 41, 59, 101, 120, 112, 111, 114, 116, 123, 97, // (a);export{a + 32, 97, 115, 32, 104, 44, 102, 101, 32, 97, 115, 32, // as h,fe as + 104, 116, 109, 108, 44, 77, 32, 97, 115, 32, 114, 101, // html,M as re + 110, 100, 101, 114, 44, 100, 32, 97, 115, 32, 67, 111, // nder,d as Co + 109, 112, 111, 110, 101, 110, 116, 44, 70, 32, 97, 115, // mponent,F as + 32, 99, 114, 101, 97, 116, 101, 67, 111, 110, 116, 101, // createConte + 120, 116, 44, 71, 32, 97, 115, 32, 117, 115, 101, 83, // xt,G as useS + 116, 97, 116, 101, 44, 122, 32, 97, 115, 32, 117, 115, // tate,z as us + 101, 82, 101, 100, 117, 99, 101, 114, 44, 74, 32, 97, // eReducer,J a + 115, 32, 117, 115, 101, 69, 102, 102, 101, 99, 116, 44, // s useEffect, + 75, 32, 97, 115, 32, 117, 115, 101, 76, 97, 121, 111, // K as useLayo + 117, 116, 69, 102, 102, 101, 99, 116, 44, 81, 32, 97, // utEffect,Q a + 115, 32, 117, 115, 101, 82, 101, 102, 44, 88, 32, 97, // s useRef,X a + 115, 32, 117, 115, 101, 73, 109, 112, 101, 114, 97, 116, // s useImperat + 105, 118, 101, 72, 97, 110, 100, 108, 101, 44, 89, 32, // iveHandle,Y + 97, 115, 32, 117, 115, 101, 77, 101, 109, 111, 44, 90, // as useMemo,Z + 32, 97, 115, 32, 117, 115, 101, 67, 97, 108, 108, 98, // as useCallb + 97, 99, 107, 44, 101, 101, 32, 97, 115, 32, 117, 115, // ack,ee as us + 101, 67, 111, 110, 116, 101, 120, 116, 44, 110, 101, 32, // eContext,ne + 97, 115, 32, 117, 115, 101, 68, 101, 98, 117, 103, 86, // as useDebugV + 97, 108, 117, 101, 44, 95, 101, 32, 97, 115, 32, 117, // alue,_e as u + 115, 101, 69, 114, 114, 111, 114, 66, 111, 117, 110, 100, // seErrorBound + 97, 114, 121, 125, 59, 10, 0 // ary};. +}; +static const unsigned char v3[] = { + 42, 32, 123, 32, 98, 111, 120, 45, 115, 105, 122, 105, // * { box-sizi + 110, 103, 58, 32, 98, 111, 114, 100, 101, 114, 45, 98, // ng: border-b + 111, 120, 59, 32, 125, 10, 104, 116, 109, 108, 44, 32, // ox; }.html, + 98, 111, 100, 121, 32, 123, 32, 109, 97, 114, 103, 105, // body { margi + 110, 58, 32, 48, 59, 32, 112, 97, 100, 100, 105, 110, // n: 0; paddin + 103, 58, 32, 48, 59, 32, 104, 101, 105, 103, 104, 116, // g: 0; height + 58, 32, 49, 48, 48, 37, 59, 32, 102, 111, 110, 116, // : 100%; font + 58, 32, 49, 54, 112, 120, 32, 115, 97, 110, 115, 45, // : 16px sans- + 115, 101, 114, 105, 102, 59, 32, 125, 10, 115, 101, 108, // serif; }.sel + 101, 99, 116, 44, 32, 105, 110, 112, 117, 116, 44, 32, // ect, input, + 108, 97, 98, 101, 108, 58, 58, 98, 101, 102, 111, 114, // label::befor + 101, 44, 32, 116, 101, 120, 116, 97, 114, 101, 97, 32, // e, textarea + 123, 32, 111, 117, 116, 108, 105, 110, 101, 58, 32, 110, // { outline: n + 111, 110, 101, 59, 32, 98, 111, 120, 45, 115, 104, 97, // one; box-sha + 100, 111, 119, 58, 110, 111, 110, 101, 32, 33, 105, 109, // dow:none !im + 112, 111, 114, 116, 97, 110, 116, 59, 32, 98, 111, 114, // portant; bor + 100, 101, 114, 58, 32, 49, 112, 120, 32, 115, 111, 108, // der: 1px sol + 105, 100, 32, 35, 99, 99, 99, 32, 33, 105, 109, 112, // id #ccc !imp + 111, 114, 116, 97, 110, 116, 59, 32, 125, 10, 99, 111, // ortant; }.co + 100, 101, 44, 32, 112, 114, 101, 32, 123, 32, 99, 111, // de, pre { co + 108, 111, 114, 58, 32, 35, 51, 55, 51, 59, 32, 102, // lor: #373; f + 111, 110, 116, 45, 102, 97, 109, 105, 108, 121, 58, 32, // ont-family: + 109, 111, 110, 111, 115, 112, 97, 99, 101, 59, 32, 102, // monospace; f + 111, 110, 116, 45, 119, 101, 105, 103, 104, 116, 58, 32, // ont-weight: + 98, 111, 108, 100, 101, 114, 59, 32, 102, 111, 110, 116, // bolder; font + 45, 115, 105, 122, 101, 58, 32, 115, 109, 97, 108, 108, // -size: small + 101, 114, 59, 32, 98, 97, 99, 107, 103, 114, 111, 117, // er; backgrou + 110, 100, 58, 32, 35, 100, 100, 100, 59, 32, 112, 97, // nd: #ddd; pa + 100, 100, 105, 110, 103, 58, 32, 48, 46, 49, 101, 109, // dding: 0.1em + 32, 48, 46, 51, 101, 109, 59, 32, 98, 111, 114, 100, // 0.3em; bord + 101, 114, 45, 114, 97, 100, 105, 117, 115, 58, 32, 48, // er-radius: 0 + 46, 50, 101, 109, 59, 32, 125, 10, 116, 101, 120, 116, // .2em; }.text + 97, 114, 101, 97, 44, 32, 105, 110, 112, 117, 116, 44, // area, input, + 32, 46, 97, 100, 100, 111, 110, 32, 123, 32, 102, 111, // .addon { fo + 110, 116, 45, 115, 105, 122, 101, 58, 32, 49, 53, 112, // nt-size: 15p + 120, 59, 32, 98, 111, 114, 100, 101, 114, 58, 32, 49, // x; border: 1 + 112, 120, 32, 115, 111, 108, 105, 100, 32, 35, 99, 99, // px solid #cc + 99, 59, 32, 112, 97, 100, 100, 105, 110, 103, 58, 32, // c; padding: + 48, 46, 53, 101, 109, 59, 32, 125, 10, 97, 44, 32, // 0.5em; }.a, + 97, 58, 118, 105, 115, 105, 116, 101, 100, 44, 32, 97, // a:visited, a + 58, 97, 99, 116, 105, 118, 101, 32, 123, 32, 99, 111, // :active { co + 108, 111, 114, 58, 32, 35, 53, 53, 102, 59, 32, 125, // lor: #55f; } + 10, 46, 97, 100, 100, 111, 110, 32, 123, 32, 98, 97, // ..addon { ba + 99, 107, 103, 114, 111, 117, 110, 100, 58, 32, 35, 101, // ckground: #e + 101, 101, 59, 32, 32, 109, 105, 110, 45, 119, 105, 100, // ee; min-wid + 116, 104, 58, 32, 57, 101, 109, 59, 125, 10, 46, 98, // th: 9em;}..b + 116, 110, 32, 123, 10, 32, 32, 98, 97, 99, 107, 103, // tn {. backg + 114, 111, 117, 110, 100, 58, 32, 35, 99, 99, 99, 59, // round: #ccc; + 32, 98, 111, 114, 100, 101, 114, 45, 114, 97, 100, 105, // border-radi + 117, 115, 58, 32, 48, 46, 51, 101, 109, 59, 32, 98, // us: 0.3em; b + 111, 114, 100, 101, 114, 58, 32, 48, 59, 32, 99, 111, // order: 0; co + 108, 111, 114, 58, 32, 35, 102, 102, 102, 59, 32, 99, // lor: #fff; c + 117, 114, 115, 111, 114, 58, 32, 112, 111, 105, 110, 116, // ursor: point + 101, 114, 59, 10, 32, 32, 100, 105, 115, 112, 108, 97, // er;. displa + 121, 58, 32, 105, 110, 108, 105, 110, 101, 45, 98, 108, // y: inline-bl + 111, 99, 107, 59, 32, 112, 97, 100, 100, 105, 110, 103, // ock; padding + 58, 32, 48, 46, 54, 101, 109, 32, 50, 101, 109, 59, // : 0.6em 2em; + 32, 102, 111, 110, 116, 45, 119, 101, 105, 103, 104, 116, // font-weight + 58, 32, 98, 111, 108, 100, 101, 114, 59, 10, 125, 10, // : bolder;.}. + 46, 98, 116, 110, 91, 100, 105, 115, 97, 98, 108, 101, // .btn[disable + 100, 93, 32, 123, 32, 111, 112, 97, 99, 105, 116, 121, // d] { opacity + 58, 32, 48, 46, 53, 59, 32, 99, 117, 114, 115, 111, // : 0.5; curso + 114, 58, 32, 97, 117, 116, 111, 59, 125, 10, 46, 115, // r: auto;}..s + 109, 111, 111, 116, 104, 32, 123, 32, 116, 114, 97, 110, // mooth { tran + 115, 105, 116, 105, 111, 110, 58, 32, 97, 108, 108, 32, // sition: all + 46, 50, 115, 59, 32, 125, 10, 46, 99, 111, 110, 116, // .2s; }..cont + 97, 105, 110, 101, 114, 32, 123, 32, 109, 97, 114, 103, // ainer { marg + 105, 110, 58, 32, 48, 32, 50, 48, 112, 120, 59, 32, // in: 0 20px; + 119, 105, 100, 116, 104, 58, 32, 97, 117, 116, 111, 59, // width: auto; + 32, 125, 10, 46, 100, 45, 102, 108, 101, 120, 32, 123, // }..d-flex { + 32, 100, 105, 115, 112, 108, 97, 121, 58, 32, 102, 108, // display: fl + 101, 120, 59, 32, 125, 10, 46, 100, 45, 110, 111, 110, // ex; }..d-non + 101, 32, 123, 32, 100, 105, 115, 112, 108, 97, 121, 58, // e { display: + 32, 110, 111, 110, 101, 59, 32, 125, 10, 46, 98, 111, // none; }..bo + 114, 100, 101, 114, 32, 123, 32, 98, 111, 114, 100, 101, // rder { borde + 114, 58, 32, 49, 112, 120, 32, 115, 111, 108, 105, 100, // r: 1px solid + 32, 35, 100, 100, 100, 59, 32, 125, 10, 46, 114, 111, // #ddd; }..ro + 117, 110, 100, 101, 100, 32, 123, 32, 98, 111, 114, 100, // unded { bord + 101, 114, 45, 114, 97, 100, 105, 117, 115, 58, 32, 48, // er-radius: 0 + 46, 53, 101, 109, 59, 32, 125, 10, 46, 110, 111, 119, // .5em; }..now + 114, 97, 112, 32, 123, 32, 119, 104, 105, 116, 101, 45, // rap { white- + 115, 112, 97, 99, 101, 58, 32, 110, 111, 119, 114, 97, // space: nowra + 112, 59, 32, 125, 10, 46, 109, 115, 103, 32, 123, 32, // p; }..msg { + 98, 97, 99, 107, 103, 114, 111, 117, 110, 100, 58, 32, // background: + 35, 100, 101, 102, 59, 32, 98, 111, 114, 100, 101, 114, // #def; border + 45, 108, 101, 102, 116, 58, 32, 53, 112, 120, 32, 115, // -left: 5px s + 111, 108, 105, 100, 32, 35, 53, 57, 100, 59, 32, 112, // olid #59d; p + 97, 100, 100, 105, 110, 103, 58, 32, 48, 46, 53, 101, // adding: 0.5e + 109, 59, 32, 102, 111, 110, 116, 45, 115, 105, 122, 101, // m; font-size + 58, 32, 57, 48, 37, 59, 32, 109, 97, 114, 103, 105, // : 90%; margi + 110, 58, 32, 49, 101, 109, 32, 48, 59, 32, 125, 10, // n: 1em 0; }. + 46, 115, 101, 99, 116, 105, 111, 110, 32, 123, 32, 109, // .section { m + 97, 114, 103, 105, 110, 58, 32, 48, 32, 49, 101, 109, // argin: 0 1em + 59, 32, 125, 10, 46, 116, 111, 112, 105, 99, 44, 32, // ; }..topic, + 46, 100, 97, 116, 97, 44, 32, 46, 113, 111, 115, 32, // .data, .qos + 123, 32, 32, 112, 97, 100, 100, 105, 110, 103, 58, 32, // { padding: + 48, 46, 50, 101, 109, 32, 48, 46, 53, 101, 109, 59, // 0.2em 0.5em; + 32, 98, 111, 114, 100, 101, 114, 45, 114, 97, 100, 105, // border-radi + 117, 115, 58, 32, 48, 46, 52, 101, 109, 59, 32, 109, // us: 0.4em; m + 97, 114, 103, 105, 110, 45, 114, 105, 103, 104, 116, 58, // argin-right: + 32, 48, 46, 53, 101, 109, 59, 32, 32, 125, 10, 46, // 0.5em; }.. + 113, 111, 115, 32, 123, 32, 98, 97, 99, 107, 103, 114, // qos { backgr + 111, 117, 110, 100, 58, 32, 35, 101, 102, 97, 59, 32, // ound: #efa; + 125, 10, 46, 116, 111, 112, 105, 99, 32, 123, 32, 98, // }..topic { b + 97, 99, 107, 103, 114, 111, 117, 110, 100, 58, 32, 35, // ackground: # + 102, 101, 97, 59, 32, 125, 10, 46, 100, 97, 116, 97, // fea; }..data + 32, 123, 32, 98, 97, 99, 107, 103, 114, 111, 117, 110, // { backgroun + 100, 58, 32, 35, 97, 101, 102, 59, 32, 125, 10, 10, // d: #aef; }.. + 47, 42, 32, 71, 114, 105, 100, 32, 42, 47, 10, 46, // /* Grid */.. + 114, 111, 119, 32, 123, 32, 100, 105, 115, 112, 108, 97, // row { displa + 121, 58, 32, 102, 108, 101, 120, 59, 32, 102, 108, 101, // y: flex; fle + 120, 45, 119, 114, 97, 112, 58, 32, 119, 114, 97, 112, // x-wrap: wrap + 59, 32, 125, 10, 46, 99, 111, 108, 32, 123, 32, 109, // ; }..col { m + 97, 114, 103, 105, 110, 58, 32, 48, 59, 32, 112, 97, // argin: 0; pa + 100, 100, 105, 110, 103, 58, 32, 48, 59, 32, 111, 118, // dding: 0; ov + 101, 114, 102, 108, 111, 119, 58, 32, 97, 117, 116, 111, // erflow: auto + 59, 32, 125, 10, 46, 99, 111, 108, 45, 49, 50, 32, // ; }..col-12 + 123, 32, 119, 105, 100, 116, 104, 58, 32, 49, 48, 48, // { width: 100 + 37, 59, 32, 125, 10, 46, 99, 111, 108, 45, 49, 49, // %; }..col-11 + 32, 123, 32, 119, 105, 100, 116, 104, 58, 32, 57, 49, // { width: 91 + 46, 54, 54, 37, 59, 32, 125, 10, 46, 99, 111, 108, // .66%; }..col + 45, 49, 48, 32, 123, 32, 119, 105, 100, 116, 104, 58, // -10 { width: + 32, 56, 51, 46, 51, 51, 37, 59, 32, 125, 10, 46, // 83.33%; }.. + 99, 111, 108, 45, 57, 32, 123, 32, 119, 105, 100, 116, // col-9 { widt + 104, 58, 32, 55, 53, 37, 59, 32, 125, 10, 46, 99, // h: 75%; }..c + 111, 108, 45, 56, 32, 123, 32, 119, 105, 100, 116, 104, // ol-8 { width + 58, 32, 54, 54, 46, 54, 54, 37, 59, 32, 125, 10, // : 66.66%; }. + 46, 99, 111, 108, 45, 55, 32, 123, 32, 119, 105, 100, // .col-7 { wid + 116, 104, 58, 32, 53, 56, 46, 51, 51, 37, 59, 32, // th: 58.33%; + 125, 10, 46, 99, 111, 108, 45, 54, 32, 123, 32, 119, // }..col-6 { w + 105, 100, 116, 104, 58, 32, 53, 48, 37, 59, 32, 125, // idth: 50%; } + 10, 46, 99, 111, 108, 45, 53, 32, 123, 32, 119, 105, // ..col-5 { wi + 100, 116, 104, 58, 32, 52, 49, 46, 54, 54, 37, 59, // dth: 41.66%; + 32, 125, 10, 46, 99, 111, 108, 45, 52, 32, 123, 32, // }..col-4 { + 119, 105, 100, 116, 104, 58, 32, 51, 51, 46, 51, 51, // width: 33.33 + 37, 59, 32, 125, 10, 46, 99, 111, 108, 45, 51, 32, // %; }..col-3 + 123, 32, 119, 105, 100, 116, 104, 58, 32, 50, 53, 37, // { width: 25% + 59, 32, 125, 10, 46, 99, 111, 108, 45, 50, 32, 123, // ; }..col-2 { + 32, 119, 105, 100, 116, 104, 58, 32, 49, 54, 46, 54, // width: 16.6 + 54, 37, 59, 32, 125, 10, 46, 99, 111, 108, 45, 49, // 6%; }..col-1 + 32, 123, 32, 119, 105, 100, 116, 104, 58, 32, 56, 46, // { width: 8. + 51, 51, 37, 59, 32, 125, 10, 64, 109, 101, 100, 105, // 33%; }.@medi + 97, 32, 40, 109, 105, 110, 45, 119, 105, 100, 116, 104, // a (min-width + 58, 32, 49, 51, 49, 48, 112, 120, 41, 32, 123, 32, // : 1310px) { + 46, 99, 111, 110, 116, 97, 105, 110, 101, 114, 32, 123, // .container { + 32, 109, 97, 114, 103, 105, 110, 58, 32, 97, 117, 116, // margin: aut + 111, 59, 32, 119, 105, 100, 116, 104, 58, 32, 49, 50, // o; width: 12 + 55, 48, 112, 120, 59, 32, 125, 32, 125, 10, 64, 109, // 70px; } }.@m + 101, 100, 105, 97, 32, 40, 109, 97, 120, 45, 119, 105, // edia (max-wi + 100, 116, 104, 58, 32, 57, 50, 48, 112, 120, 41, 32, // dth: 920px) + 123, 32, 46, 114, 111, 119, 32, 46, 99, 111, 108, 32, // { .row .col + 123, 32, 119, 105, 100, 116, 104, 58, 32, 49, 48, 48, // { width: 100 + 37, 59, 32, 125, 32, 125, 10, 0 // %; } }. +}; +static const unsigned char v4[] = { + 39, 117, 115, 101, 32, 115, 116, 114, 105, 99, 116, 39, // 'use strict' + 59, 10, 105, 109, 112, 111, 114, 116, 32, 123, 32, 104, // ;.import { h + 44, 32, 104, 116, 109, 108, 44, 32, 114, 101, 110, 100, // , html, rend + 101, 114, 32, 125, 32, 102, 114, 111, 109, 32, 39, 46, // er } from '. + 47, 112, 114, 101, 97, 99, 116, 46, 109, 105, 110, 46, // /preact.min. + 106, 115, 39, 59, 10, 10, 10, 99, 111, 110, 115, 116, // js';...const + 32, 88, 32, 61, 32, 102, 117, 110, 99, 116, 105, 111, // X = functio + 110, 32, 40, 41, 32, 123, 10, 10, 32, 32, 114, 101, // n () {.. re + 116, 117, 114, 110, 32, 104, 116, 109, 108, 96, 10, 32, // turn html`. + 32, 60, 100, 105, 118, 32, 99, 108, 97, 115, 115, 61, //
+ 10, 32, 32, 32, 32, 60, 104, 50, 32, 99, 108, 97, // .

ABOUT US.
+ 10, 32, 32, 32, 32, 32, 32, 60, 100, 105, 118, 32, // .
. < + 112, 62, 32, 32, 32, 32, 32, 32, 10, 32, 32, 32, // p> . + 32, 32, 32, 32, 32, 32, 32, 67, 101, 115, 97, 110, // Cesan + 116, 97, 32, 83, 111, 102, 116, 119, 97, 114, 101, 32, // ta Software + 76, 116, 100, 46, 32, 105, 115, 32, 104, 101, 97, 100, // Ltd. is head + 113, 117, 97, 114, 116, 101, 114, 101, 100, 194, 160, 105, // quartered..i + 110, 32, 68, 117, 98, 108, 105, 110, 44, 32, 82, 101, // n Dublin, Re + 112, 117, 98, 108, 105, 99, 32, 111, 102, 32, 73, 114, // public of Ir + 101, 108, 97, 110, 100, 46, 10, 32, 32, 32, 32, 32, // eland.. + 32, 32, 32, 60, 47, 112, 62, 10, 32, 32, 32, 32, //

. + 32, 32, 32, 32, 60, 112, 62, 60, 47, 112, 62, 10, //

. + 32, 32, 32, 32, 32, 32, 32, 32, 79, 117, 114, 32, // Our + 115, 116, 111, 114, 121, 32, 114, 111, 111, 116, 115, 32, // story roots + 98, 97, 99, 107, 32, 116, 111, 32, 50, 48, 48, 52, // back to 2004 + 44, 32, 119, 104, 101, 110, 32, 77, 111, 110, 103, 111, // , when Mongo + 111, 115, 101, 32, 87, 101, 98, 32, 83, 101, 114, 118, // ose Web Serv + 101, 114, 32, 76, 105, 98, 114, 97, 114, 121, 194, 160, // er Library.. + 100, 101, 118, 101, 108, 111, 112, 109, 101, 110, 116, 32, // development + 115, 116, 97, 114, 116, 101, 100, 46, 32, 60, 98, 114, // started.
.. A + 115, 32, 77, 111, 110, 103, 111, 111, 115, 101, 32, 87, // s Mongoose W + 101, 98, 32, 83, 101, 114, 118, 101, 114, 32, 103, 114, // eb Server gr + 101, 119, 32, 105, 110, 32, 112, 111, 112, 117, 108, 97, // ew in popula + 114, 105, 116, 121, 32, 97, 110, 100, 32, 109, 97, 116, // rity and mat + 117, 114, 101, 100, 32, 111, 118, 101, 114, 32, 116, 104, // ured over th + 101, 32, 102, 111, 108, 108, 111, 119, 105, 110, 103, 32, // e following + 121, 101, 97, 114, 115, 44, 32, 105, 110, 32, 50, 48, // years, in 20 + 49, 51, 32, 67, 101, 115, 97, 110, 116, 97, 32, 119, // 13 Cesanta w + 97, 115, 32, 101, 115, 116, 97, 98, 108, 105, 115, 104, // as establish + 101, 100, 32, 116, 111, 32, 99, 111, 110, 116, 105, 110, // ed to contin + 117, 101, 32, 105, 116, 115, 32, 100, 101, 118, 101, 108, // ue its devel + 111, 112, 109, 101, 110, 116, 32, 97, 110, 100, 32, 10, // opment and . + 32, 32, 32, 32, 32, 32, 32, 32, 112, 114, 111, 118, // prov + 105, 100, 101, 32, 115, 117, 112, 112, 111, 114, 116, 32, // ide support + 116, 111, 32, 111, 117, 114, 32, 118, 97, 108, 117, 101, // to our value + 100, 32, 99, 117, 115, 116, 111, 109, 101, 114, 115, 46, // d customers. + 10, 32, 32, 32, 32, 32, 32, 32, 32, 60, 47, 112, // .

.

We are prou + 100, 32, 116, 111, 32, 104, 97, 118, 101, 32, 97, 109, // d to have am + 111, 110, 103, 32, 111, 117, 114, 32, 99, 117, 115, 116, // ong our cust + 111, 109, 101, 114, 115, 32, 109, 97, 110, 121, 32, 60, // omers many < + 105, 62, 70, 111, 114, 116, 117, 110, 101, 32, 53, 48, // i>Fortune 50 + 48, 60, 47, 105, 62, 32, 99, 111, 109, 112, 97, 110, // 0 compan + 105, 101, 115, 32, 97, 115, 32, 119, 101, 108, 108, 32, // ies as well + 97, 115, 32, 109, 101, 100, 105, 117, 109, 32, 97, 110, // as medium an + 100, 32, 115, 109, 97, 108, 108, 32, 115, 105, 122, 101, // d small size + 32, 98, 117, 115, 105, 110, 101, 115, 115, 101, 115, 46, // businesses. + 10, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 83, // . S + 101, 99, 117, 114, 105, 116, 121, 32, 97, 110, 100, 32, // ecurity and + 113, 117, 97, 108, 105, 116, 121, 32, 111, 102, 32, 111, // quality of o + 117, 114, 32, 115, 111, 108, 117, 116, 105, 111, 110, 115, // ur solutions + 32, 105, 115, 32, 97, 32, 112, 97, 114, 97, 109, 111, // is a paramo + 117, 110, 116, 32, 102, 111, 114, 32, 117, 115, 32, 97, // unt for us a + 110, 100, 32, 116, 104, 101, 32, 102, 97, 99, 116, 32, // nd the fact + 116, 104, 97, 116, 32, 77, 111, 110, 103, 111, 111, 115, // that Mongoos + 101, 32, 87, 101, 98, 32, 83, 101, 114, 118, 101, 114, // e Web Server + 32, 105, 115, 32, 117, 115, 101, 100, 32, 98, 121, 32, // is used by + 78, 65, 83, 65, 32, 97, 98, 111, 97, 114, 100, 32, // NASA aboard + 116, 104, 101, 32, 73, 110, 116, 101, 114, 110, 97, 116, // the Internat + 105, 111, 110, 97, 108, 32, 83, 112, 97, 99, 101, 32, // ional Space + 83, 116, 97, 116, 105, 111, 110, 32, 105, 115, 32, 10, // Station is . + 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 116, 104, // th + 101, 32, 98, 101, 115, 116, 32, 99, 111, 110, 102, 105, // e best confi + 114, 109, 97, 116, 105, 111, 110, 32, 116, 111, 32, 105, // rmation to i + 116, 46, 60, 47, 112, 62, 10, 32, 32, 32, 32, 32, // t.

. + 32, 32, 32, 32, 32, 60, 112, 62, 83, 105, 110, 99, //

Sinc + 101, 32, 50, 48, 49, 51, 44, 32, 67, 101, 115, 97, // e 2013, Cesa + 110, 116, 97, 32, 104, 97, 115, 32, 101, 120, 112, 97, // nta has expa + 110, 100, 101, 100, 32, 105, 116, 115, 32, 112, 114, 111, // nded its pro + 100, 117, 99, 116, 32, 112, 111, 114, 116, 102, 111, 108, // duct portfol + 105, 111, 46, 32, 87, 101, 32, 100, 101, 118, 101, 108, // io. We devel + 111, 112, 32, 97, 110, 100, 32, 100, 105, 115, 116, 114, // op and distr + 105, 98, 117, 116, 101, 32, 101, 109, 98, 101, 100, 100, // ibute embedd + 101, 100, 32, 115, 111, 102, 116, 119, 97, 114, 101, 32, // ed software + 97, 110, 100, 32, 104, 97, 114, 100, 119, 97, 114, 101, // and hardware + 32, 119, 105, 116, 104, 32, 102, 111, 99, 117, 115, 32, // with focus + 111, 110, 32, 99, 111, 110, 110, 101, 99, 116, 101, 100, // on connected + 32, 112, 114, 111, 100, 117, 99, 116, 115, 32, 97, 110, // products an + 100, 32, 116, 104, 101, 32, 73, 110, 116, 101, 114, 110, // d the Intern + 101, 116, 32, 111, 102, 32, 84, 104, 105, 110, 103, 115, // et of Things + 46, 60, 47, 112, 62, 10, 10, 32, 32, 32, 32, 32, // .

.. + 32, 60, 47, 100, 105, 118, 62, 10, 32, 32, 32, 32, //
. + 60, 47, 100, 105, 118, 62, 10, 32, 32, 60, 47, 100, //
. .`;.};..c + 111, 110, 115, 116, 32, 89, 32, 61, 32, 102, 117, 110, // onst Y = fun + 99, 116, 105, 111, 110, 32, 40, 41, 32, 123, 10, 10, // ction () {.. + 32, 32, 114, 101, 116, 117, 114, 110, 32, 104, 116, 109, // return htm + 108, 96, 10, 32, 32, 60, 100, 105, 118, 32, 99, 108, // l`.
.

Among o + 117, 114, 32, 112, 114, 111, 100, 117, 99, 116, 115, 32, // ur products + 97, 114, 101, 58, 60, 47, 104, 51, 62, 10, 32, 32, // are:

. + 32, 32, 60, 100, 105, 118, 32, 99, 108, 97, 115, 115, //
. + 32, 32, 60, 100, 105, 118, 32, 99, 108, 97, 115, 115, //
. + 32, 32, 32, 32, 32, 60, 117, 108, 62, 10, 32, 32, //
    . + 32, 32, 32, 32, 32, 32, 32, 60, 108, 105, 62, 10, //
  • . + 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 60, // < + 97, 32, 104, 114, 101, 102, 61, 34, 104, 116, 116, 112, // a href="http + 115, 58, 47, 47, 109, 111, 110, 103, 111, 111, 115, 101, // s://mongoose + 46, 119, 115, 47, 34, 62, 77, 111, 110, 103, 111, 111, // .ws/">Mongoo + 115, 101, 32, 87, 101, 98, 32, 83, 101, 114, 118, 101, // se Web Serve + 114, 60, 47, 97, 62, 10, 32, 32, 32, 32, 32, 32, // r. + 32, 32, 32, 32, 32, 45, 32, 97, 110, 32, 101, 109, // - an em + 98, 101, 100, 100, 101, 100, 32, 119, 101, 98, 32, 115, // bedded web s + 101, 114, 118, 101, 114, 32, 97, 110, 100, 32, 110, 101, // erver and ne + 116, 119, 111, 114, 107, 105, 110, 103, 32, 108, 105, 98, // tworking lib + 114, 97, 114, 121, 10, 32, 32, 32, 32, 32, 32, 32, // rary. + 32, 32, 60, 47, 108, 105, 62, 10, 32, 32, 32, 32, //
  • . + 32, 32, 32, 32, 32, 60, 108, 105, 62, 10, 32, 32, //
  • . + 32, 32, 32, 32, 32, 32, 32, 32, 32, 60, 97, 32, // + 86, 67, 79, 78, 46, 105, 111, 60, 47, 97, 62, 10, // VCON.io. + 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 45, // - + 32, 65, 114, 100, 117, 105, 110, 111, 45, 99, 111, 109, // Arduino-com + 112, 97, 116, 105, 98, 108, 101, 32, 98, 111, 97, 114, // patible boar + 100, 115, 32, 119, 105, 116, 104, 32, 98, 117, 105, 108, // ds with buil + 116, 45, 105, 110, 32, 102, 105, 114, 109, 119, 97, 114, // t-in firmwar + 101, 32, 79, 84, 65, 32, 117, 112, 100, 97, 116, 101, // e OTA update + 115, 10, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, // s. + 32, 97, 110, 100, 32, 109, 97, 110, 97, 103, 101, 109, // and managem + 101, 110, 116, 32, 100, 97, 115, 104, 98, 111, 97, 114, // ent dashboar + 100, 10, 32, 32, 32, 32, 32, 32, 32, 32, 32, 60, // d. < + 47, 108, 105, 62, 10, 32, 32, 32, 32, 32, 32, 32, // /li>. + 32, 32, 60, 108, 105, 62, 10, 32, 32, 32, 32, 32, //
  • . + 32, 32, 32, 32, 32, 32, 60, 97, 32, 104, 114, 101, // m + 68, 97, 115, 104, 46, 110, 101, 116, 60, 47, 97, 62, // Dash.net + 10, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, // . + 45, 32, 97, 110, 32, 97, 108, 108, 45, 105, 110, 45, // - an all-in- + 111, 110, 101, 32, 73, 111, 84, 32, 80, 108, 97, 116, // one IoT Plat + 102, 111, 114, 109, 10, 32, 32, 32, 32, 32, 32, 32, // form. + 32, 32, 60, 47, 108, 105, 62, 10, 32, 32, 32, 32, //
  • . + 32, 32, 32, 32, 32, 60, 108, 105, 62, 10, 32, 32, //
  • . + 32, 32, 32, 32, 32, 32, 32, 32, 32, 60, 97, 32, // Mongo + 111, 115, 101, 32, 79, 83, 60, 47, 97, 62, 10, 32, // ose OS. + 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 45, 32, // - + 97, 110, 32, 111, 112, 101, 114, 97, 116, 105, 110, 103, // an operating + 32, 115, 121, 115, 116, 101, 109, 32, 102, 111, 114, 32, // system for + 108, 111, 119, 45, 112, 111, 119, 101, 114, 32, 109, 105, // low-power mi + 99, 114, 111, 99, 111, 110, 116, 114, 111, 108, 108, 101, // crocontrolle + 114, 115, 10, 32, 32, 32, 32, 32, 32, 32, 32, 32, // rs. + 60, 47, 108, 105, 62, 10, 10, 32, 32, 32, 32, 32, //
  • .. + 32, 32, 32, 32, 60, 108, 105, 62, 10, 32, 32, 32, //
  • . + 32, 32, 32, 32, 32, 32, 32, 32, 60, 97, 32, 104, // mJS. + 32, 32, 32, 32, 32, 32, 32, 32, 45, 32, 97, 110, // - an + 32, 101, 109, 98, 101, 100, 100, 101, 100, 32, 74, 97, // embedded Ja + 118, 97, 83, 99, 114, 105, 112, 116, 32, 101, 110, 103, // vaScript eng + 105, 110, 101, 32, 102, 111, 114, 32, 67, 47, 67, 43, // ine for C/C+ + 43, 10, 32, 32, 32, 32, 32, 32, 32, 32, 32, 60, // +. < + 47, 108, 105, 62, 10, 32, 32, 32, 32, 32, 32, 32, // /li>. + 60, 47, 117, 108, 62, 10, 32, 32, 32, 32, 32, 32, //
. + 60, 47, 100, 105, 118, 62, 10, 32, 32, 32, 32, 32, //
. + 32, 60, 100, 105, 118, 32, 99, 108, 97, 115, 115, 61, //
. + 32, 32, 32, 32, 32, 60, 112, 62, 60, 98, 62, 79, //

O + 117, 114, 32, 115, 111, 108, 117, 116, 105, 111, 110, 115, // ur solutions + 32, 97, 114, 101, 58, 60, 47, 98, 62, 60, 47, 112, // are:

. . + 32, 60, 108, 105, 62, 105, 110, 116, 101, 103, 114, 97, //
  • integra + 116, 101, 100, 32, 105, 110, 116, 111, 32, 116, 104, 111, // ted into tho + 117, 115, 97, 110, 100, 115, 32, 111, 102, 32, 99, 111, // usands of co + 109, 109, 101, 114, 99, 105, 97, 108, 32, 112, 114, 111, // mmercial pro + 100, 117, 99, 116, 115, 60, 47, 108, 105, 62, 10, 32, // ducts
  • . + 32, 32, 32, 32, 32, 32, 32, 32, 32, 60, 108, 105, //
  • deployed to + 32, 104, 117, 110, 100, 114, 101, 100, 115, 32, 111, 102, // hundreds of + 32, 109, 105, 108, 108, 105, 111, 110, 115, 32, 100, 101, // millions de + 118, 105, 99, 101, 115, 32, 105, 110, 32, 112, 114, 111, // vices in pro + 100, 117, 99, 116, 105, 111, 110, 32, 101, 110, 118, 105, // duction envi + 114, 111, 110, 109, 101, 110, 116, 115, 60, 47, 108, 105, // ronments
  • . . . .
    + 10, 96, 59, 10, 125, 59, 10, 10, 99, 111, 110, 115, // .`;.};..cons + 116, 32, 65, 112, 112, 32, 61, 32, 102, 117, 110, 99, // t App = func + 116, 105, 111, 110, 32, 40, 112, 114, 111, 112, 115, 41, // tion (props) + 32, 123, 10, 10, 32, 32, 114, 101, 116, 117, 114, 110, // {.. return + 32, 104, 116, 109, 108, 96, 10, 60, 104, 49, 62, 66, // html`.

    B + 97, 115, 105, 99, 32, 69, 109, 98, 101, 100, 100, 101, // asic Embedde + 100, 32, 70, 105, 108, 101, 115, 121, 115, 116, 101, 109, // d Filesystem + 32, 100, 101, 109, 111, 60, 47, 104, 49, 62, 10, 60, // demo

    .< + 100, 105, 118, 62, 10, 32, 32, 36, 123, 104, 40, 88, // div>. ${h(X + 41, 125, 10, 60, 47, 100, 105, 118, 62, 10, 60, 100, // )}.
    .. ${h(Y) + 125, 10, 60, 47, 100, 105, 118, 62, 96, 59, 10, 125, // }.
    `;.} + 59, 10, 10, 119, 105, 110, 100, 111, 119, 46, 111, 110, // ;..window.on + 108, 111, 97, 100, 32, 61, 32, 40, 41, 32, 61, 62, // load = () => + 32, 114, 101, 110, 100, 101, 114, 40, 104, 40, 65, 112, // render(h(Ap + 112, 41, 44, 32, 100, 111, 99, 117, 109, 101, 110, 116, // p), document + 46, 98, 111, 100, 121, 41, 59, 10, 0 // .body);. +}; + +static const struct packed_file { + const char *name; + const unsigned char *data; + size_t size; + time_t mtime; +} packed_files[] = { + {"/web_root/index.html", v1, sizeof(v1), 1660140294}, + {"/web_root/preact.min.js", v2, sizeof(v2), 1660138387}, + {"/web_root/style.css", v3, sizeof(v3), 1660138387}, + {"/web_root/main.js", v4, sizeof(v4), 1660142672}, + {NULL, NULL, 0, 0} +}; + +static int scmp(const char *a, const char *b) { + while (*a && (*a == *b)) a++, b++; + return *(const unsigned char *) a - *(const unsigned char *) b; +} +const char *mg_unlist(size_t no); +const char *mg_unlist(size_t no) { + return packed_files[no].name; +} +const char *mg_unpack(const char *path, size_t *size, time_t *mtime); +const char *mg_unpack(const char *name, size_t *size, time_t *mtime) { + const struct packed_file *p; + for (p = packed_files; p->name != NULL; p++) { + if (scmp(p->name, name) != 0) continue; + if (size != NULL) *size = p->size - 1; + if (mtime != NULL) *mtime = p->mtime; + return (const char *) p->data; + } + return NULL; +} diff --git a/examples/embedded-filesystem/web_root/index.html b/examples/embedded-filesystem/web_root/index.html new file mode 100644 index 00000000..fb01c2c8 --- /dev/null +++ b/examples/embedded-filesystem/web_root/index.html @@ -0,0 +1,13 @@ + + + + + + + + Mongoose Embedded Filesytem example + + + + + diff --git a/examples/embedded-filesystem/web_root/main.js b/examples/embedded-filesystem/web_root/main.js new file mode 100644 index 00000000..d788c86e --- /dev/null +++ b/examples/embedded-filesystem/web_root/main.js @@ -0,0 +1,88 @@ +'use strict'; +import { h, html, render } from './preact.min.js'; + + +const X = function () { + + return html` +
    +

    ABOUT US

    +
    +
    +

    + Cesanta Software Ltd. is headquartered in Dublin, Republic of Ireland. +

    +

    + Our story roots back to 2004, when Mongoose Web Server Library development started.
    + + As Mongoose Web Server grew in popularity and matured over the following years, in 2013 Cesanta was established to continue its development and + provide support to our valued customers. +

    +

    We are proud to have among our customers many Fortune 500 companies as well as medium and small size businesses. + Security and quality of our solutions is a paramount for us and the fact that Mongoose Web Server is used by NASA aboard the International Space Station is + the best confirmation to it.

    +

    Since 2013, Cesanta has expanded its product portfolio. We develop and distribute embedded software and hardware with focus on connected products and the Internet of Things.

    + +
    +
    +
    +`; +}; + +const Y = function () { + + return html` +
    +

    Among our products are:

    +
    +
    +
      +
    • + Mongoose Web Server + - an embedded web server and networking library +
    • +
    • + VCON.io + - Arduino-compatible boards with built-in firmware OTA updates + and management dashboard +
    • +
    • + mDash.net + - an all-in-one IoT Platform +
    • +
    • + Mongoose OS + - an operating system for low-power microcontrollers +
    • + +
    • + mJS + - an embedded JavaScript engine for C/C++ +
    • +
    +
    +
    +

    Our solutions are:

    +
      +
    • integrated into thousands of commercial products
    • +
    • deployed to hundreds of millions devices in production environments
    • +
    +
    +
    +
    +`; +}; + +const App = function (props) { + + return html` +

    Basic Embedded Filesystem demo

    +
    + ${h(X)} +
    +
    + ${h(Y)} +
    `; +}; + +window.onload = () => render(h(App), document.body); diff --git a/examples/embedded-filesystem/web_root/preact.min.js b/examples/embedded-filesystem/web_root/preact.min.js new file mode 100644 index 00000000..e24f87b9 --- /dev/null +++ b/examples/embedded-filesystem/web_root/preact.min.js @@ -0,0 +1 @@ +var e,n,_,t,o,r,u,l={},i=[],c=/acit|ex(?:s|g|n|p|$)|rph|grid|ows|mnc|ntw|ine[ch]|zoo|^ord|itera/i;function s(e,n){for(var _ in n)e[_]=n[_];return e}function f(e){var n=e.parentNode;n&&n.removeChild(e)}function a(n,_,t){var o,r,u,l={};for(u in _)"key"==u?o=_[u]:"ref"==u?r=_[u]:l[u]=_[u];if(arguments.length>2&&(l.children=arguments.length>3?e.call(arguments,2):t),"function"==typeof n&&null!=n.defaultProps)for(u in n.defaultProps)void 0===l[u]&&(l[u]=n.defaultProps[u]);return p(n,l,o,r,null)}function p(e,t,o,r,u){var l={type:e,props:t,key:o,ref:r,__k:null,__:null,__b:0,__e:null,__d:void 0,__c:null,__h:null,constructor:void 0,__v:null==u?++_:u};return null!=n.vnode&&n.vnode(l),l}function h(e){return e.children}function d(e,n){this.props=e,this.context=n}function v(e,n){if(null==n)return e.__?v(e.__,e.__.__k.indexOf(e)+1):null;for(var _;n0?p(m.type,m.props,m.key,null,m.__v):m)){if(m.__=_,m.__b=_.__b+1,null===(y=H[a])||y&&m.key==y.key&&m.type===y.type)H[a]=void 0;else for(d=0;d=t.__.length&&t.__.push({}),t.__[e]}function G(e){return R=1,z(ie,e)}function z(e,n,_){var t=j(L++,2);return t.t=e,t.__c||(t.__=[_?_(n):ie(void 0,n),function(e){var n=t.t(t.__[0],e);t.__[0]!==n&&(t.__=[n,t.__[1]],t.__c.setState({}))}],t.__c=N),t.__}function J(e,_){var t=j(L++,3);!n.__s&&le(t.__H,_)&&(t.__=e,t.__H=_,N.__H.__h.push(t))}function K(e,_){var t=j(L++,4);!n.__s&&le(t.__H,_)&&(t.__=e,t.__H=_,N.__h.push(t))}function Q(e){return R=5,Y(function(){return{current:e}},[])}function X(e,n,_){R=6,K(function(){"function"==typeof e?e(n()):e&&(e.current=n())},null==_?_:_.concat(e))}function Y(e,n){var _=j(L++,7);return le(_.__H,n)&&(_.__=e(),_.__H=n,_.__h=e),_.__}function Z(e,n){return R=8,Y(function(){return e},n)}function ee(e){var n=N.context[e.__c],_=j(L++,9);return _.c=e,n?(null==_.__&&(_.__=!0,n.sub(N)),n.props.value):e.__}function ne(e,_){n.useDebugValue&&n.useDebugValue(_?_(e):e)}function _e(e){var n=j(L++,10),_=G();return n.__=e,N.componentDidCatch||(N.componentDidCatch=function(e){n.__&&n.__(e),_[1](e)}),[_[0],function(){_[1](void 0)}]}function te(){I.forEach(function(e){if(e.__P)try{e.__H.__h.forEach(re),e.__H.__h.forEach(ue),e.__H.__h=[]}catch(_){e.__H.__h=[],n.__e(_,e.__v)}}),I=[]}n.__b=function(e){N=null,O&&O(e)},n.__r=function(e){V&&V(e),L=0;var n=(N=e.__c).__H;n&&(n.__h.forEach(re),n.__h.forEach(ue),n.__h=[])},n.diffed=function(e){q&&q(e);var _=e.__c;_&&_.__H&&_.__H.__h.length&&(1!==I.push(_)&&W===n.requestAnimationFrame||((W=n.requestAnimationFrame)||function(e){var n,_=function(){clearTimeout(t),oe&&cancelAnimationFrame(n),setTimeout(e)},t=setTimeout(_,100);oe&&(n=requestAnimationFrame(_))})(te)),N=void 0},n.__c=function(e,_){_.some(function(e){try{e.__h.forEach(re),e.__h=e.__h.filter(function(e){return!e.__||ue(e)})}catch(t){_.some(function(e){e.__h&&(e.__h=[])}),_=[],n.__e(t,e.__v)}}),B&&B(e,_)},n.unmount=function(e){$&&$(e);var _=e.__c;if(_&&_.__H)try{_.__H.__.forEach(re)}catch(e){n.__e(e,_.__v)}};var oe="function"==typeof requestAnimationFrame;function re(e){var n=N;"function"==typeof e.__c&&e.__c(),N=n}function ue(e){var n=N;e.__c=e.__(),N=n}function le(e,n){return!e||e.length!==n.length||n.some(function(n,_){return n!==e[_]})}function ie(e,n){return"function"==typeof n?n(e):n}var ce=function(e,n,_,t){var o;n[0]=0;for(var r=1;r=5&&((o||!e&&5===t)&&(u.push(t,0,o,_),t=6),e&&(u.push(t,e,0,_),t=6)),o=""},i=0;i"===n?(t=1,o=""):o=n+o[0]:r?n===r?r="":o+=n:'"'===n||"'"===n?r=n:">"===n?(l(),t=1):t&&("="===n?(t=5,_=o,o=""):"/"===n&&(t<5||">"===e[i][c+1])?(l(),3===t&&(u=u[0]),t=u,(u=u[0]).push(2,0,t),t=0):" "===n||"\t"===n||"\n"===n||"\r"===n?(l(),t=2):o+=n),3===t&&"!--"===o&&(t=4,u=u[0])}return l(),u}(e)),n),arguments,[])).length>1?n:n[0]}.bind(a);export{a as h,fe as html,M as render,d as Component,F as createContext,G as useState,z as useReducer,J as useEffect,K as useLayoutEffect,Q as useRef,X as useImperativeHandle,Y as useMemo,Z as useCallback,ee as useContext,ne as useDebugValue,_e as useErrorBoundary}; diff --git a/examples/embedded-filesystem/web_root/style.css b/examples/embedded-filesystem/web_root/style.css new file mode 100644 index 00000000..b483f801 --- /dev/null +++ b/examples/embedded-filesystem/web_root/style.css @@ -0,0 +1,43 @@ +* { box-sizing: border-box; } +html, body { margin: 0; padding: 0; height: 100%; font: 16px sans-serif; } +select, input, label::before, textarea { outline: none; box-shadow:none !important; border: 1px solid #ccc !important; } +code, pre { color: #373; font-family: monospace; font-weight: bolder; font-size: smaller; background: #ddd; padding: 0.1em 0.3em; border-radius: 0.2em; } +textarea, input, .addon { font-size: 15px; border: 1px solid #ccc; padding: 0.5em; } +a, a:visited, a:active { color: #55f; } +.addon { background: #eee; min-width: 9em;} +.btn { + background: #ccc; border-radius: 0.3em; border: 0; color: #fff; cursor: pointer; + display: inline-block; padding: 0.6em 2em; font-weight: bolder; +} +.btn[disabled] { opacity: 0.5; cursor: auto;} +.smooth { transition: all .2s; } +.container { margin: 0 20px; width: auto; } +.d-flex { display: flex; } +.d-none { display: none; } +.border { border: 1px solid #ddd; } +.rounded { border-radius: 0.5em; } +.nowrap { white-space: nowrap; } +.msg { background: #def; border-left: 5px solid #59d; padding: 0.5em; font-size: 90%; margin: 1em 0; } +.section { margin: 0 1em; } +.topic, .data, .qos { padding: 0.2em 0.5em; border-radius: 0.4em; margin-right: 0.5em; } +.qos { background: #efa; } +.topic { background: #fea; } +.data { background: #aef; } + +/* Grid */ +.row { display: flex; flex-wrap: wrap; } +.col { margin: 0; padding: 0; overflow: auto; } +.col-12 { width: 100%; } +.col-11 { width: 91.66%; } +.col-10 { width: 83.33%; } +.col-9 { width: 75%; } +.col-8 { width: 66.66%; } +.col-7 { width: 58.33%; } +.col-6 { width: 50%; } +.col-5 { width: 41.66%; } +.col-4 { width: 33.33%; } +.col-3 { width: 25%; } +.col-2 { width: 16.66%; } +.col-1 { width: 8.33%; } +@media (min-width: 1310px) { .container { margin: auto; width: 1270px; } } +@media (max-width: 920px) { .row .col { width: 100%; } }