From 2e750236bef0d889ab78df11609fdad78be89b65 Mon Sep 17 00:00:00 2001 From: Sergey Lyubka Date: Wed, 8 Jun 2022 08:58:32 +0100 Subject: [PATCH] Add uart-bridge example --- examples/uart-bridge/Makefile | 19 + examples/uart-bridge/README.md | 16 + examples/uart-bridge/main.c | 18 + examples/uart-bridge/net.c | 110 + examples/uart-bridge/packed_fs.c | 1818 +++++++++++++++++ .../uart-bridge/screenshots/dashboard.png | Bin 0 -> 78809 bytes examples/uart-bridge/web_root/index.html | 12 + examples/uart-bridge/web_root/main.js | 81 + examples/uart-bridge/web_root/preact.min.js | 1 + examples/uart-bridge/web_root/style.css | 23 + 10 files changed, 2098 insertions(+) create mode 100644 examples/uart-bridge/Makefile create mode 100644 examples/uart-bridge/README.md create mode 100644 examples/uart-bridge/main.c create mode 100644 examples/uart-bridge/net.c create mode 100644 examples/uart-bridge/packed_fs.c create mode 100644 examples/uart-bridge/screenshots/dashboard.png create mode 100644 examples/uart-bridge/web_root/index.html create mode 100644 examples/uart-bridge/web_root/main.js create mode 100644 examples/uart-bridge/web_root/preact.min.js create mode 100644 examples/uart-bridge/web_root/style.css diff --git a/examples/uart-bridge/Makefile b/examples/uart-bridge/Makefile new file mode 100644 index 00000000..5a16e952 --- /dev/null +++ b/examples/uart-bridge/Makefile @@ -0,0 +1,19 @@ +PROG ?= example +SOURCES ?= ../../mongoose.c main.c net.c packed_fs.c +CFLAGS ?= -I../.. -DMG_ENABLE_PACKED_FS=1 -DMG_ENABLE_LINES=1 $(EXTRA_CFLAGS) +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) + +clean: + rm -rf $(PROG) *.o *.dSYM *.gcov *.gcno *.gcda *.obj *.exe *.ilk *.pdb log.txt pack diff --git a/examples/uart-bridge/README.md b/examples/uart-bridge/README.md new file mode 100644 index 00000000..f2a79933 --- /dev/null +++ b/examples/uart-bridge/README.md @@ -0,0 +1,16 @@ +# A UART to network bridge + +This example is a demonstration of how Mongoose Library could be integrated +into an embedded device and provide a UART-to-Network bridge capability: + +- A device opens listening TCP port and Websocket port and waits for connections +- When a client connects, data is exchanged with the device's UART +- Everything that client send, is sent to the UART +- Everything that is read from the UART, gets sent to the client +- Multiple clients are allowed +- Live UART console allows to talk to the UART from the web page +- Web UI is hardcoded into the binary and does not need a filesystem + +# Screenshots + +![](screenshots/dashboard.png) diff --git a/examples/uart-bridge/main.c b/examples/uart-bridge/main.c new file mode 100644 index 00000000..f77f8538 --- /dev/null +++ b/examples/uart-bridge/main.c @@ -0,0 +1,18 @@ +// Copyright (c) 2022 Cesanta Software Limited +// All rights reserved + +#include "mongoose.h" +const char *s_listening_url = "http://0.0.0.0:8000"; + +void uart_bridge_fn(struct mg_connection *, int, void *, void *); + +int main(void) { + struct mg_mgr mgr; + mg_log_set("2"); // Set to 3 for debug, to 4 for very verbose level + mg_mgr_init(&mgr); + mg_http_listen(&mgr, s_listening_url, uart_bridge_fn, &mgr); + MG_INFO(("Listening on %s", s_listening_url)); + while (mgr.conns != NULL) mg_mgr_poll(&mgr, 500); + mg_mgr_free(&mgr); + return 0; +} diff --git a/examples/uart-bridge/net.c b/examples/uart-bridge/net.c new file mode 100644 index 00000000..d7c53fc7 --- /dev/null +++ b/examples/uart-bridge/net.c @@ -0,0 +1,110 @@ +// Copyright (c) 2022 Cesanta Software Limited +// All rights reserved + +#include "mongoose.h" + +static const char *s_tcp_url = "tcp://0.0.0.0:4001"; +static const char *s_ws_url = "ws://0.0.0.0:4002"; +static struct mg_connection *s_tcp_conn; +static struct mg_connection *s_ws_conn; +static int s_rx = 4; +static int s_tx = 5; +static int s_baud = 115200; + +// Let users define their own UART API. If they don't, use a dummy one +#if defined(UART_API_IMPLEMENTED) +#else +void uart_init(int tx, int rx, int baud) { + // We use stdin/stdout as UART. Make stdin non-blocking + fcntl(0, F_SETFL, fcntl(0, F_GETFL) | O_NONBLOCK); + (void) tx, (void) rx, (void) baud; +} + +void uart_write(const void *buf, size_t len) { + fwrite(buf, 1, len, stdout); // Write to stdout + fflush(stdout); +} + +int uart_read(char *buf, size_t len) { + return read(0, buf, len); // Read from stdin +} +#endif + +// Event handler for a connected Websocket client +static void ws_fn(struct mg_connection *c, int ev, void *evd, void *fnd) { + if (ev == MG_EV_HTTP_MSG) { + mg_ws_upgrade(c, evd, NULL); + } else if (ev == MG_EV_WS_OPEN) { + // c->is_hexdumping = 1; + c->label[0] = 'W'; // When WS handhake is done, mark us as WS client + } else if (ev == MG_EV_WS_MSG) { + struct mg_ws_message *wm = (struct mg_ws_message *) evd; + uart_write(wm->data.ptr, wm->data.len); // Send to UART + c->recv.len = 0; // Discard received data + } else if (ev == MG_EV_CLOSE) { + if (c->is_listening) s_ws_conn = NULL; + } + (void) fnd; +} + +// Event handler for a connected TCP client +static void tcp_fn(struct mg_connection *c, int ev, void *evd, void *fnd) { + if (ev == MG_EV_OPEN) { + // c->is_hexdumping = 1; + c->label[0] = 'T'; // When client is connected, mark us as TCP client + } else if (ev == MG_EV_READ) { + uart_write(c->recv.buf, c->recv.len); // Send to UART + c->recv.len = 0; // Discard received data + } else if (ev == MG_EV_CLOSE) { + if (c->is_listening) s_tcp_conn = NULL; + } + (void) fnd, (void) evd; +} + +// Software timer with a frequency close to the scheduling time slot +static void timer_fn(void *param) { + // Start listeners if they're stopped for any reason + struct mg_mgr *mgr = (struct mg_mgr *) param; + if (s_tcp_conn == NULL) s_tcp_conn = mg_listen(mgr, s_tcp_url, tcp_fn, 0); + if (s_ws_conn == NULL) s_ws_conn = mg_http_listen(mgr, s_ws_url, ws_fn, 0); + + // Read UART + char buf[512]; + int len = uart_read(buf, sizeof(buf)); + if (len > 0) { + // Iterate over all connections. Send data to WS and TCP clients + for (struct mg_connection *c = mgr->conns; c != NULL; c = c->next) { + if (c->label[0] == 'W') mg_ws_send(c, buf, len, WEBSOCKET_OP_TEXT); + if (c->label[0] == 'T') mg_send(c, buf, len); + } + } +} + +// HTTP request handler function +void uart_bridge_fn(struct mg_connection *c, int ev, void *ev_data, + void *fn_data) { + if (ev == MG_EV_OPEN && c->is_listening) { + mg_timer_add(c->mgr, 20, MG_TIMER_REPEAT, timer_fn, c->mgr); + uart_init(s_tx, s_rx, s_baud); + } else if (ev == MG_EV_HTTP_MSG) { + struct mg_http_message *hm = (struct mg_http_message *) ev_data; + if (mg_http_match_uri(hm, "/api/hi")) { + mg_http_reply(c, 200, "", "hi\n"); // Testing endpoint + } else if (mg_http_match_uri(hm, "/api/config/get")) { + mg_http_reply( + c, 200, "Content-Type: application/json\r\n", + "{\"tcp\":\"%s\",\"ws\":\"%s\",\"rx\":%d,\"tx\":%d,\"baud\":%d}\n", + s_tcp_url, s_ws_url, s_rx, s_tx, s_baud); + } else { + struct mg_http_serve_opts opts = {0}; +#if 0 + opts.root_dir = "/web_root"; + opts.fs = &mg_fs_packed; +#else + opts.root_dir = "web_root"; +#endif + mg_http_serve_dir(c, ev_data, &opts); + } + } + (void) fn_data; +} diff --git a/examples/uart-bridge/packed_fs.c b/examples/uart-bridge/packed_fs.c new file mode 100644 index 00000000..fd08f9cb --- /dev/null +++ b/examples/uart-bridge/packed_fs.c @@ -0,0 +1,1818 @@ +#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, 116, // head>. Device + 68, 97, 115, 104, 98, 111, 97, 114, 100, 60, 47, 116, // Dashboard. . + 32, 32, 32, 60, 109, 101, 116, 97, 32, 104, 116, 116, // . + 32, 32, 32, 60, 109, 101, 116, 97, 32, 110, 97, 109, // . . + 10, 32, 32, 60, 98, 111, 100, 121, 62, 60, 47, 98, // . . . + 10, 0 // . +}; +static const unsigned char v2[] = { + 39, 117, 115, 101, 32, 115, 116, 114, 105, 99, 116, 39, // 'use strict' + 59, 10, 105, 109, 112, 111, 114, 116, 32, 123, 67, 111, // ;.import {Co + 109, 112, 111, 110, 101, 110, 116, 44, 32, 104, 44, 32, // mponent, h, + 104, 116, 109, 108, 44, 32, 114, 101, 110, 100, 101, 114, // html, render + 44, 32, 117, 115, 101, 69, 102, 102, 101, 99, 116, 44, // , useEffect, + 32, 117, 115, 101, 83, 116, 97, 116, 101, 44, 32, 117, // useState, u + 115, 101, 82, 101, 102, 125, 32, 102, 114, 111, 109, 32, // seRef} from + 39, 46, 47, 112, 114, 101, 97, 99, 116, 46, 109, 105, // './preact.mi + 110, 46, 106, 115, 39, 59, 10, 10, 99, 111, 110, 115, // n.js';..cons + 116, 32, 77, 101, 115, 115, 97, 103, 101, 32, 61, 32, // t Message = + 109, 32, 61, 62, 32, 104, 116, 109, 108, 96, 60, 115, // m => html`. + 32, 36, 123, 109, 46, 109, 101, 115, 115, 97, 103, 101, // ${m.message + 46, 100, 97, 116, 97, 125, 10, 60, 47, 115, 112, 97, // .data}.`;..const + 65, 112, 112, 32, 61, 32, 102, 117, 110, 99, 116, 105, // App = functi + 111, 110, 40, 112, 114, 111, 112, 115, 41, 32, 123, 10, // on(props) {. + 32, 32, 99, 111, 110, 115, 116, 32, 91, 99, 102, 103, // const [cfg + 44, 32, 115, 101, 116, 67, 102, 103, 93, 32, 61, 32, // , setCfg] = + 117, 115, 101, 83, 116, 97, 116, 101, 40, 123, 116, 99, // useState({tc + 112, 58, 32, 39, 39, 44, 32, 119, 115, 58, 32, 39, // p: '', ws: ' + 39, 125, 41, 59, 10, 32, 32, 99, 111, 110, 115, 116, // '});. const + 32, 91, 109, 101, 115, 115, 97, 103, 101, 115, 44, 32, // [messages, + 115, 101, 116, 77, 101, 115, 115, 97, 103, 101, 115, 93, // setMessages] + 32, 61, 32, 117, 115, 101, 83, 116, 97, 116, 101, 40, // = useState( + 91, 93, 41, 59, 10, 32, 32, 99, 111, 110, 115, 116, // []);. const + 32, 91, 116, 120, 116, 44, 32, 115, 101, 116, 84, 120, // [txt, setTx + 116, 93, 32, 61, 32, 117, 115, 101, 83, 116, 97, 116, // t] = useStat + 101, 40, 39, 39, 41, 59, 10, 32, 32, 99, 111, 110, // e('');. con + 115, 116, 32, 91, 99, 111, 110, 110, 101, 99, 116, 101, // st [connecte + 100, 44, 32, 115, 101, 116, 67, 111, 110, 110, 101, 99, // d, setConnec + 116, 101, 100, 93, 32, 61, 32, 117, 115, 101, 83, 116, // ted] = useSt + 97, 116, 101, 40, 102, 97, 108, 115, 101, 41, 59, 10, // ate(false);. + 32, 32, 99, 111, 110, 115, 116, 32, 91, 119, 115, 44, // const [ws, + 32, 115, 101, 116, 87, 115, 93, 32, 61, 32, 117, 115, // setWs] = us + 101, 83, 116, 97, 116, 101, 40, 110, 117, 108, 108, 41, // eState(null) + 59, 10, 10, 32, 32, 99, 111, 110, 115, 116, 32, 116, // ;.. const t + 99, 112, 95, 112, 111, 114, 116, 32, 61, 32, 99, 102, // cp_port = cf + 103, 46, 116, 99, 112, 46, 115, 112, 108, 105, 116, 40, // g.tcp.split( + 39, 58, 39, 41, 91, 50, 93, 32, 124, 124, 32, 52, // ':')[2] || 4 + 48, 48, 49, 59, 10, 32, 32, 99, 111, 110, 115, 116, // 001;. const + 32, 119, 115, 95, 112, 111, 114, 116, 32, 61, 32, 99, // ws_port = c + 102, 103, 46, 119, 115, 46, 115, 112, 108, 105, 116, 40, // fg.ws.split( + 39, 58, 39, 41, 91, 50, 93, 32, 124, 124, 32, 52, // ':')[2] || 4 + 48, 48, 50, 59, 10, 10, 32, 32, 99, 111, 110, 115, // 002;.. cons + 116, 32, 114, 101, 102, 114, 101, 115, 104, 32, 61, 32, // t refresh = + 40, 41, 32, 61, 62, 10, 32, 32, 32, 32, 32, 32, // () =>. + 102, 101, 116, 99, 104, 40, 39, 47, 97, 112, 105, 47, // fetch('/api/ + 99, 111, 110, 102, 105, 103, 47, 103, 101, 116, 39, 41, // config/get') + 46, 116, 104, 101, 110, 40, 114, 32, 61, 62, 32, 114, // .then(r => r + 46, 106, 115, 111, 110, 40, 41, 41, 46, 116, 104, 101, // .json()).the + 110, 40, 114, 32, 61, 62, 32, 115, 101, 116, 67, 102, // n(r => setCf + 103, 40, 114, 41, 41, 59, 10, 10, 32, 32, 99, 111, // g(r));.. co + 110, 115, 116, 32, 119, 97, 116, 99, 104, 87, 101, 98, // nst watchWeb + 115, 111, 99, 107, 101, 116, 32, 61, 32, 102, 117, 110, // socket = fun + 99, 116, 105, 111, 110, 40, 41, 32, 123, 10, 32, 32, // ction() {. + 32, 32, 47, 47, 32, 67, 111, 110, 110, 101, 99, 116, // // Connect + 32, 116, 111, 32, 119, 101, 98, 115, 111, 99, 107, 101, // to websocke + 114, 32, 112, 111, 114, 116, 44, 32, 116, 111, 32, 105, // r port, to i + 109, 112, 108, 101, 109, 101, 110, 116, 32, 87, 83, 32, // mplement WS + 99, 111, 110, 115, 111, 108, 101, 10, 32, 32, 32, 32, // console. + 118, 97, 114, 32, 108, 32, 61, 32, 119, 105, 110, 100, // var l = wind + 111, 119, 46, 108, 111, 99, 97, 116, 105, 111, 110, 44, // ow.location, + 32, 112, 114, 111, 116, 111, 32, 61, 32, 108, 46, 112, // proto = l.p + 114, 111, 116, 111, 99, 111, 108, 46, 114, 101, 112, 108, // rotocol.repl + 97, 99, 101, 40, 39, 104, 116, 116, 112, 39, 44, 32, // ace('http', + 39, 119, 115, 39, 41, 59, 10, 32, 32, 32, 32, 118, // 'ws');. v + 97, 114, 32, 116, 105, 100, 44, 32, 117, 114, 108, 32, // ar tid, url + 61, 32, 96, 36, 123, 112, 114, 111, 116, 111, 125, 47, // = `${proto}/ + 47, 36, 123, 108, 46, 104, 111, 115, 116, 110, 97, 109, // /${l.hostnam + 101, 125, 58, 36, 123, 119, 115, 95, 112, 111, 114, 116, // e}:${ws_port + 125, 47, 119, 115, 96, 59, 10, 32, 32, 32, 32, 99, // }/ws`;. c + 111, 110, 115, 111, 108, 101, 46, 108, 111, 103, 40, 117, // onsole.log(u + 114, 108, 41, 59, 10, 32, 32, 32, 32, 118, 97, 114, // rl);. var + 32, 114, 101, 99, 111, 110, 110, 101, 99, 116, 32, 61, // reconnect = + 32, 102, 117, 110, 99, 116, 105, 111, 110, 40, 41, 32, // function() + 123, 10, 32, 32, 32, 32, 32, 32, 118, 97, 114, 32, // {. var + 119, 115, 32, 61, 32, 110, 101, 119, 32, 87, 101, 98, // ws = new Web + 83, 111, 99, 107, 101, 116, 40, 117, 114, 108, 41, 59, // Socket(url); + 10, 32, 32, 32, 32, 32, 32, 119, 115, 46, 111, 110, // . ws.on + 111, 112, 101, 110, 32, 61, 32, 40, 41, 32, 61, 62, // open = () => + 32, 123, 10, 32, 32, 32, 32, 32, 32, 32, 32, 115, // {. s + 101, 116, 67, 111, 110, 110, 101, 99, 116, 101, 100, 40, // etConnected( + 116, 114, 117, 101, 41, 59, 10, 32, 32, 32, 32, 32, // true);. + 32, 32, 32, 115, 101, 116, 87, 115, 40, 119, 115, 41, // setWs(ws) + 59, 10, 32, 32, 32, 32, 32, 32, 125, 59, 10, 32, // ;. };. + 32, 32, 32, 32, 32, 119, 115, 46, 111, 110, 109, 101, // ws.onme + 115, 115, 97, 103, 101, 32, 61, 32, 101, 118, 32, 61, // ssage = ev = + 62, 32, 123, 10, 32, 32, 32, 32, 32, 32, 32, 32, // > {. + 47, 47, 32, 99, 111, 110, 115, 111, 108, 101, 46, 108, // // console.l + 111, 103, 40, 101, 118, 44, 32, 101, 118, 46, 100, 97, // og(ev, ev.da + 116, 97, 41, 59, 10, 32, 32, 32, 32, 32, 32, 32, // ta);. + 32, 115, 101, 116, 77, 101, 115, 115, 97, 103, 101, 115, // setMessages + 40, 120, 32, 61, 62, 32, 120, 46, 99, 111, 110, 99, // (x => x.conc + 97, 116, 40, 91, 123, 100, 97, 116, 97, 58, 32, 101, // at([{data: e + 118, 46, 100, 97, 116, 97, 44, 32, 117, 97, 114, 116, // v.data, uart + 58, 32, 116, 114, 117, 101, 125, 93, 41, 41, 59, 10, // : true}]));. + 32, 32, 32, 32, 32, 32, 125, 59, 10, 32, 32, 32, // };. + 32, 32, 32, 119, 115, 46, 111, 110, 99, 108, 111, 115, // ws.onclos + 101, 32, 61, 32, 102, 117, 110, 99, 116, 105, 111, 110, // e = function + 40, 41, 32, 123, 10, 32, 32, 32, 32, 32, 32, 32, // () {. + 32, 99, 108, 101, 97, 114, 84, 105, 109, 101, 111, 117, // clearTimeou + 116, 40, 116, 105, 100, 41, 59, 10, 32, 32, 32, 32, // t(tid);. + 32, 32, 32, 32, 116, 105, 100, 32, 61, 32, 115, 101, // tid = se + 116, 84, 105, 109, 101, 111, 117, 116, 40, 114, 101, 99, // tTimeout(rec + 111, 110, 110, 101, 99, 116, 44, 32, 49, 48, 48, 48, // onnect, 1000 + 41, 59, 10, 32, 32, 32, 32, 32, 32, 32, 32, 115, // );. s + 101, 116, 67, 111, 110, 110, 101, 99, 116, 101, 100, 40, // etConnected( + 102, 97, 108, 115, 101, 41, 59, 10, 32, 32, 32, 32, // false);. + 32, 32, 32, 32, 115, 101, 116, 87, 115, 40, 110, 117, // setWs(nu + 108, 108, 41, 59, 10, 32, 32, 32, 32, 32, 32, 125, // ll);. } + 59, 10, 32, 32, 32, 32, 125, 59, 10, 32, 32, 32, // ;. };. + 32, 114, 101, 99, 111, 110, 110, 101, 99, 116, 40, 41, // reconnect() + 59, 10, 32, 32, 125, 59, 10, 10, 32, 32, 117, 115, // ;. };.. us + 101, 69, 102, 102, 101, 99, 116, 40, 40, 41, 32, 61, // eEffect(() = + 62, 32, 123, 10, 32, 32, 32, 32, 114, 101, 102, 114, // > {. refr + 101, 115, 104, 40, 41, 59, 10, 32, 32, 32, 32, 119, // esh();. w + 97, 116, 99, 104, 87, 101, 98, 115, 111, 99, 107, 101, // atchWebsocke + 116, 40, 41, 59, 10, 32, 32, 125, 44, 32, 91, 93, // t();. }, [] + 41, 59, 10, 10, 10, 32, 32, 99, 111, 110, 115, 116, // );... const + 32, 115, 101, 110, 100, 109, 101, 115, 115, 97, 103, 101, // sendmessage + 32, 61, 32, 101, 118, 32, 61, 62, 32, 123, 10, 32, // = ev => {. + 32, 32, 32, 115, 101, 116, 77, 101, 115, 115, 97, 103, // setMessag + 101, 115, 40, 120, 32, 61, 62, 32, 120, 46, 99, 111, // es(x => x.co + 110, 99, 97, 116, 40, 91, 123, 100, 97, 116, 97, 58, // ncat([{data: + 32, 116, 120, 116, 32, 43, 32, 39, 92, 110, 39, 44, // txt + '.n', + 32, 117, 97, 114, 116, 58, 32, 102, 97, 108, 115, 101, // uart: false + 125, 93, 41, 41, 59, 10, 32, 32, 32, 32, 105, 102, // }]));. if + 32, 40, 119, 115, 41, 32, 119, 115, 46, 115, 101, 110, // (ws) ws.sen + 100, 40, 116, 120, 116, 32, 43, 32, 39, 92, 110, 39, // d(txt + '.n' + 41, 59, 10, 32, 32, 32, 32, 115, 101, 116, 84, 120, // );. setTx + 116, 40, 39, 39, 41, 59, 10, 32, 32, 125, 59, 10, // t('');. };. + 10, 32, 32, 114, 101, 116, 117, 114, 110, 32, 104, 116, // . return ht + 109, 108, 96, 10, 60, 100, 105, 118, 32, 99, 108, 97, // ml`.
.

UA + 82, 84, 32, 92, 117, 50, 55, 70, 55, 32, 110, 101, // RT .u27F7 ne + 116, 119, 111, 114, 107, 32, 98, 114, 105, 100, 103, 101, // twork bridge + 32, 60, 47, 104, 49, 62, 10, 32, 32, 60, 104, 51, //

.

UART settin + 103, 115, 60, 47, 104, 51, 62, 10, 32, 32, 60, 112, // gs

.

${JSON + 46, 115, 116, 114, 105, 110, 103, 105, 102, 121, 40, 99, // .stringify(c + 102, 103, 44, 32, 110, 117, 108, 108, 44, 32, 50, 41, // fg, null, 2) + 125, 60, 47, 112, 114, 101, 62, 10, 32, 32, 60, 112, // }.

RX pin ${cf + 103, 46, 114, 120, 125, 44, 32, 84, 88, 32, 112, 105, // g.rx}, TX pi + 110, 32, 36, 123, 99, 102, 103, 46, 116, 120, 125, 44, // n ${cfg.tx}, + 32, 98, 97, 117, 100, 32, 36, 123, 99, 102, 103, 46, // baud ${cfg. + 98, 97, 117, 100, 125, 60, 47, 112, 62, 10, 32, 32, // baud}

. + 60, 104, 51, 62, 84, 67, 80, 32, 108, 105, 115, 116, //

TCP list + 101, 110, 101, 114, 58, 32, 112, 111, 114, 116, 32, 36, // ener: port $ + 123, 116, 99, 112, 95, 112, 111, 114, 116, 125, 60, 47, // {tcp_port}.

Use + 32, 110, 101, 116, 99, 97, 116, 32, 116, 111, 32, 99, // netcat to c + 111, 110, 110, 101, 99, 116, 58, 60, 47, 112, 62, 10, // onnect:

. + 32, 32, 60, 100, 105, 118, 32, 99, 108, 97, 115, 115, //
$ nc + 32, 36, 123, 108, 111, 99, 97, 116, 105, 111, 110, 46, // ${location. + 104, 111, 115, 116, 110, 97, 109, 101, 125, 32, 36, 123, // hostname} ${ + 116, 99, 112, 95, 112, 111, 114, 116, 125, 32, 60, 47, // tcp_port} .

W + 101, 98, 115, 111, 99, 107, 101, 116, 32, 108, 105, 115, // ebsocket lis + 116, 101, 110, 101, 114, 58, 32, 112, 111, 114, 116, 32, // tener: port + 36, 123, 119, 115, 95, 112, 111, 114, 116, 125, 60, 47, // ${ws_port}.
U + 65, 82, 84, 32, 99, 111, 110, 115, 111, 108, 101, 46, // ART console. + 32, 83, 116, 97, 116, 117, 115, 58, 32, 36, 123, 99, // Status: ${c + 111, 110, 110, 101, 99, 116, 101, 100, 32, 63, 32, 39, // onnected ? ' + 99, 111, 110, 110, 101, 99, 116, 101, 100, 39, 32, 58, // connected' : + 32, 39, 100, 105, 115, 99, 111, 110, 110, 101, 99, 116, // 'disconnect + 101, 100, 39, 125, 60, 47, 100, 105, 118, 62, 10, 32, // ed'}
. + 32, 60, 112, 114, 101, 32, 115, 116, 121, 108, 101, 61, //
.   
+  32,  36, 123, 109, 101, 115, 115,  97, 103, 101, 115,  46, //  ${messages.
+ 109,  97, 112,  40, 109, 101, 115, 115,  97, 103, 101,  32, // map(message 
+  61,  62,  32, 104,  40,  77, 101, 115, 115,  97, 103, 101, // => h(Message
+  44,  32, 123, 109, 101, 115, 115,  97, 103, 101, 125,  41, // , {message})
+  41, 125,  10,  32,  32,  60,  47, 112, 114, 101,  62,  10, // )}.  
. + 32, 32, 60, 100, 105, 118, 32, 115, 116, 121, 108, 101, //
. + 32, 32, 32, 60, 105, 110, 112, 117, 116, 32, 112, 108, // setTxt(ev + 46, 116, 97, 114, 103, 101, 116, 46, 118, 97, 108, 117, // .target.valu + 101, 41, 125, 32, 47, 62, 10, 32, 32, 60, 47, 100, // e)} />. .
`; + 10, 125, 59, 10, 10, 119, 105, 110, 100, 111, 119, 46, // .};..window. + 111, 110, 108, 111, 97, 100, 32, 61, 32, 40, 41, 32, // onload = () + 61, 62, 32, 114, 101, 110, 100, 101, 114, 40, 104, 40, // => render(h( + 65, 112, 112, 41, 44, 32, 100, 111, 99, 117, 109, 101, // App), docume + 110, 116, 46, 98, 111, 100, 121, 41, 59, 10, 0 // nt.body);. +}; +static const unsigned char v3[] = { + 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 v4[] = { + 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, 112, 114, // ortant; }.pr + 101, 32, 123, 32, 99, 111, 108, 111, 114, 58, 32, 35, // e { color: # + 51, 55, 51, 59, 32, 102, 111, 110, 116, 45, 102, 97, // 373; font-fa + 109, 105, 108, 121, 58, 32, 109, 111, 110, 111, 115, 112, // mily: monosp + 97, 99, 101, 59, 32, 102, 111, 110, 116, 45, 119, 101, // ace; font-we + 105, 103, 104, 116, 58, 32, 98, 111, 108, 100, 101, 114, // ight: bolder + 59, 32, 102, 111, 110, 116, 45, 115, 105, 122, 101, 58, // ; font-size: + 32, 115, 109, 97, 108, 108, 101, 114, 59, 32, 98, 97, // smaller; ba + 99, 107, 103, 114, 111, 117, 110, 100, 58, 32, 35, 100, // ckground: #d + 100, 100, 59, 32, 112, 97, 100, 100, 105, 110, 103, 58, // dd; padding: + 32, 49, 101, 109, 59, 32, 98, 111, 114, 100, 101, 114, // 1em; border + 45, 114, 97, 100, 105, 117, 115, 58, 32, 48, 46, 50, // -radius: 0.2 + 101, 109, 59, 32, 125, 10, 116, 101, 120, 116, 97, 114, // em; }.textar + 101, 97, 44, 32, 105, 110, 112, 117, 116, 44, 32, 46, // ea, input, . + 97, 100, 100, 111, 110, 32, 123, 32, 102, 111, 110, 116, // addon { font + 45, 115, 105, 122, 101, 58, 32, 49, 53, 112, 120, 59, // -size: 15px; + 32, 98, 111, 114, 100, 101, 114, 58, 32, 49, 112, 120, // border: 1px + 32, 115, 111, 108, 105, 100, 32, 35, 99, 99, 99, 59, // solid #ccc; + 32, 112, 97, 100, 100, 105, 110, 103, 58, 32, 48, 46, // padding: 0. + 53, 101, 109, 59, 32, 125, 10, 97, 44, 32, 97, 58, // 5em; }.a, a: + 118, 105, 115, 105, 116, 101, 100, 44, 32, 97, 58, 97, // visited, a:a + 99, 116, 105, 118, 101, 32, 123, 32, 99, 111, 108, 111, // ctive { colo + 114, 58, 32, 35, 53, 53, 102, 59, 32, 125, 10, 98, // r: #55f; }.b + 111, 100, 121, 32, 123, 98, 97, 99, 107, 103, 114, 111, // ody {backgro + 117, 110, 100, 58, 32, 35, 52, 53, 53, 59, 32, 125, // und: #455; } + 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, 50, 101, 109, 32, 97, 117, 116, 111, // in: 2em auto + 59, 32, 109, 97, 120, 45, 119, 105, 100, 116, 104, 58, // ; max-width: + 32, 54, 56, 48, 112, 120, 59, 32, 98, 97, 99, 107, // 680px; back + 103, 114, 111, 117, 110, 100, 58, 32, 119, 104, 105, 116, // ground: whit + 101, 59, 32, 112, 97, 100, 100, 105, 110, 103, 58, 32, // e; padding: + 49, 101, 109, 59, 32, 98, 111, 114, 100, 101, 114, 45, // 1em; border- + 114, 97, 100, 105, 117, 115, 58, 32, 48, 46, 53, 101, // radius: 0.5e + 109, 59, 32, 125, 10, 46, 100, 45, 102, 108, 101, 120, // m; }..d-flex + 32, 123, 32, 100, 105, 115, 112, 108, 97, 121, 58, 32, // { display: + 102, 108, 101, 120, 59, 32, 125, 10, 46, 100, 45, 110, // flex; }..d-n + 111, 110, 101, 32, 123, 32, 100, 105, 115, 112, 108, 97, // one { displa + 121, 58, 32, 110, 111, 110, 101, 59, 32, 125, 10, 46, // y: none; }.. + 98, 111, 114, 100, 101, 114, 32, 123, 32, 98, 111, 114, // border { bor + 100, 101, 114, 58, 32, 49, 112, 120, 32, 115, 111, 108, // der: 1px sol + 105, 100, 32, 35, 100, 100, 100, 59, 32, 125, 10, 46, // id #ddd; }.. + 114, 111, 117, 110, 100, 101, 100, 32, 123, 32, 98, 111, // rounded { bo + 114, 100, 101, 114, 45, 114, 97, 100, 105, 117, 115, 58, // rder-radius: + 32, 48, 46, 53, 101, 109, 59, 32, 125, 10, 46, 110, // 0.5em; }..n + 111, 119, 114, 97, 112, 32, 123, 32, 119, 104, 105, 116, // owrap { whit + 101, 45, 115, 112, 97, 99, 101, 58, 32, 110, 111, 119, // e-space: now + 114, 97, 112, 59, 32, 125, 10, 46, 109, 115, 103, 32, // rap; }..msg + 123, 32, 98, 97, 99, 107, 103, 114, 111, 117, 110, 100, // { background + 58, 32, 35, 100, 101, 102, 59, 32, 98, 111, 114, 100, // : #def; bord + 101, 114, 45, 108, 101, 102, 116, 58, 32, 53, 112, 120, // er-left: 5px + 32, 115, 111, 108, 105, 100, 32, 35, 53, 57, 100, 59, // solid #59d; + 32, 112, 97, 100, 100, 105, 110, 103, 58, 32, 48, 46, // padding: 0. + 53, 101, 109, 59, 32, 102, 111, 110, 116, 45, 115, 105, // 5em; font-si + 122, 101, 58, 32, 57, 48, 37, 59, 32, 109, 97, 114, // ze: 90%; mar + 103, 105, 110, 58, 32, 49, 101, 109, 32, 48, 59, 32, // gin: 1em 0; + 125, 10, 46, 105, 110, 112, 117, 116, 32, 123, 32, 98, // }..input { b + 97, 99, 107, 103, 114, 111, 117, 110, 100, 58, 32, 35, // ackground: # + 102, 101, 97, 59, 32, 112, 97, 100, 100, 105, 110, 103, // fea; padding + 58, 32, 48, 46, 50, 101, 109, 32, 49, 101, 109, 59, // : 0.2em 1em; + 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, 125, // us: 0.4em; } + 10, 46, 111, 117, 116, 112, 117, 116, 32, 123, 32, 98, // ..output { b + 97, 99, 107, 103, 114, 111, 117, 110, 100, 58, 32, 35, // ackground: # + 97, 101, 102, 59, 32, 112, 97, 100, 100, 105, 110, 103, // aef; padding + 58, 32, 48, 46, 50, 101, 109, 32, 49, 101, 109, 59, // : 0.2em 1em; + 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, 125, // us: 0.4em; } + 10, 0 // . +}; +static const unsigned char v5[] = { + 137, 80, 78, 71, 13, 10, 26, 10, 0, 0, 0, 13, // .PNG........ + 73, 72, 68, 82, 0, 0, 0, 128, 0, 0, 0, 128, // IHDR........ + 8, 6, 0, 0, 0, 195, 62, 97, 203, 0, 0, 0, // ......>a.... + 4, 115, 66, 73, 84, 8, 8, 8, 8, 124, 8, 100, // .sBIT....|.d + 136, 0, 0, 0, 9, 112, 72, 89, 115, 0, 0, 30, // .....pHYs... + 140, 0, 0, 30, 140, 1, 53, 120, 124, 169, 0, 0, // ......5x|... + 0, 25, 116, 69, 88, 116, 83, 111, 102, 116, 119, 97, // ..tEXtSoftwa + 114, 101, 0, 119, 119, 119, 46, 105, 110, 107, 115, 99, // re.www.inksc + 97, 112, 101, 46, 111, 114, 103, 155, 238, 60, 26, 0, // ape.org..<.. + 0, 14, 141, 73, 68, 65, 84, 120, 218, 237, 157, 125, // ...IDATx...} + 112, 20, 229, 29, 199, 97, 100, 232, 76, 117, 232, 63, // p....ad.Lu.? + 117, 250, 15, 163, 157, 206, 104, 197, 247, 42, 173, 56, // u.....h..*.8 + 19, 234, 12, 180, 82, 35, 32, 160, 132, 18, 94, 242, // ....R# ...^. + 102, 18, 18, 67, 184, 75, 46, 111, 151, 203, 93, 238, // f..C.K.o..]. + 37, 151, 219, 187, 203, 27, 16, 224, 242, 166, 80, 17, // %.........P. + 9, 18, 4, 5, 35, 90, 130, 32, 146, 8, 113, 152, // ....#Z. ..q. + 193, 106, 153, 90, 108, 173, 213, 42, 104, 71, 163, 130, // .j.Zl..*hG.. + 81, 242, 235, 243, 219, 238, 198, 75, 184, 75, 238, 246, // Q......K.K.. + 158, 221, 125, 118, 111, 255, 248, 206, 56, 2, 123, 191, // ..}vo...8.{. + 223, 247, 251, 185, 219, 231, 217, 125, 246, 217, 41, 0, // .......}..). + 48, 69, 111, 186, 169, 199, 55, 131, 104, 54, 209, 170, // 0Eo...7.h6.. + 187, 158, 171, 247, 154, 186, 108, 131, 142, 192, 250, 79, // ......l....O + 157, 174, 252, 175, 92, 213, 217, 195, 181, 165, 171, 175, // ............ + 88, 11, 211, 192, 156, 181, 24, 214, 175, 89, 8, 150, // X........Y.. + 156, 165, 96, 45, 88, 62, 82, 107, 74, 191, 226, 173, // ..`-X>RkJ... + 205, 251, 198, 209, 108, 254, 40, 191, 171, 186, 255, 190, // ....l.(..... + 110, 175, 31, 143, 33, 28, 107, 134, 30, 189, 210, 67, // n...!.k....C + 216, 215, 18, 45, 32, 226, 136, 250, 136, 62, 186, 127, // ...- ....>.. + 167, 19, 138, 55, 150, 130, 179, 58, 27, 74, 178, 150, // ...7...:.J.. + 192, 19, 171, 30, 150, 36, 132, 195, 97, 74, 135, 234, // .....$..aJ.. + 102, 51, 204, 221, 93, 7, 120, 108, 225, 51, 56, 225, // f3..].xl.38. + 51, 175, 53, 0, 80, 62, 240, 233, 68, 243, 136, 60, // 3.5.P>..D..< + 68, 39, 136, 134, 137, 48, 28, 88, 183, 195, 14, 238, // D'...0.X.... + 170, 76, 201, 129, 79, 164, 226, 53, 139, 192, 83, 147, // .L..O..5..S. + 3, 185, 157, 86, 184, 69, 248, 60, 225, 179, 177, 6, // ...V.E.<.... + 183, 80, 211, 116, 3, 0, 249, 130, 159, 67, 212, 74, // .P.t.....C.J + 244, 217, 77, 63, 4, 192, 107, 77, 187, 21, 156, 101, // ..M?..kM...e + 107, 100, 9, 62, 146, 170, 159, 72, 131, 188, 14, 43, // kd.>...H...+ + 140, 175, 67, 168, 13, 107, 156, 99, 0, 64, 39, 244, // ..C..k.c.@'. + 27, 137, 108, 68, 231, 34, 152, 13, 139, 119, 214, 130, // ..lD."...w.. + 205, 156, 174, 88, 240, 227, 229, 182, 102, 195, 31, 158, // ...X....f... + 113, 69, 2, 1, 132, 154, 177, 246, 27, 13, 0, 226, // qE.......... + 15, 30, 7, 93, 61, 68, 35, 145, 204, 253, 37, 81, // ...]=D#...%Q + 93, 171, 5, 76, 25, 139, 85, 11, 95, 212, 134, 140, // ]..L..U._... + 69, 96, 15, 20, 195, 173, 61, 222, 104, 32, 140, 8, // E`....=.h .. + 189, 204, 54, 0, 152, 60, 248, 185, 68, 189, 81, 140, // ..6..<..D.Q. + 228, 245, 235, 221, 110, 242, 205, 203, 82, 61, 248, 241, // ....n...R=.. + 114, 149, 103, 192, 125, 221, 117, 48, 81, 237, 66, 111, // r.g.}.u0Q.Bo + 115, 13, 0, 174, 14, 126, 62, 209, 177, 73, 204, 131, // s....~>..I.. + 212, 237, 118, 176, 228, 46, 99, 46, 252, 240, 177, 193, // ..v...c..... + 195, 207, 56, 39, 131, 0, 132, 94, 231, 39, 61, 0, // ..8'...^.'=. + 196, 132, 153, 68, 123, 98, 48, 12, 214, 144, 243, 61, // ...D{b0....= + 206, 215, 89, 13, 95, 148, 37, 103, 9, 100, 62, 105, // ..Y._.%g.d>i + 139, 5, 2, 16, 122, 159, 153, 116, 0, 144, 166, 167, // ....z..t.... + 17, 149, 18, 13, 197, 98, 212, 202, 167, 93, 80, 166, // .....b...]P. + 129, 240, 195, 199, 5, 171, 159, 178, 199, 10, 193, 144, // ............ + 224, 197, 180, 164, 0, 128, 52, 154, 66, 116, 54, 70, // ......4.Bt6F + 115, 224, 193, 63, 57, 160, 236, 113, 237, 132, 47, 10, // s..?9..q../. + 129, 77, 141, 62, 67, 136, 36, 244, 36, 69, 183, 0, // .M.>C.$.$E.. + 144, 230, 174, 33, 242, 70, 27, 217, 71, 210, 189, 187, // ...!.F..G... + 61, 80, 158, 247, 168, 230, 194, 15, 31, 19, 220, 223, // =P.......... + 237, 141, 7, 130, 17, 193, 163, 107, 116, 5, 128, 112, // .......kt..p + 174, 63, 30, 135, 17, 112, 51, 145, 199, 158, 163, 217, // .?...p3..... + 240, 69, 225, 5, 170, 219, 247, 214, 199, 3, 1, 8, // .E.......... + 94, 205, 212, 5, 0, 164, 145, 84, 162, 139, 113, 26, // ^......T..q. + 0, 174, 182, 74, 205, 135, 47, 202, 214, 104, 142, 23, // ...J../..h.. + 0, 16, 60, 75, 213, 44, 0, 164, 248, 169, 68, 190, // ..9.......;. + 241, 236, 166, 244, 68, 0, 0, 193, 219, 235, 153, 4, // ....D....... + 128, 20, 118, 67, 180, 187, 118, 177, 42, 135, 156, 39, // ..vC..v.*..' + 99, 49, 82, 41, 237, 110, 40, 158, 48, 252, 112, 253, // c1R).n(.0.p. + 253, 80, 16, 26, 202, 39, 63, 117, 165, 237, 112, 36, // .P...'?u..p$ + 10, 1, 122, 124, 3, 83, 0, 8, 223, 252, 115, 9, // ..z|.S....s. + 54, 6, 245, 206, 60, 102, 194, 223, 219, 108, 142, 57, // 6....^_.... + 57, 255, 84, 162, 77, 221, 189, 187, 142, 95, 130, 197, // 9.T.M...._.. + 66, 248, 47, 135, 42, 36, 133, 47, 234, 235, 55, 219, // B./.*$./..7. + 160, 203, 179, 46, 226, 177, 77, 153, 143, 192, 189, 207, // ......M..... + 121, 105, 64, 112, 138, 198, 152, 128, 198, 104, 255, 48, // yi@p.....h.0 + 133, 102, 32, 63, 134, 121, 127, 45, 249, 102, 53, 85, // .f ?.y.-.f5U + 102, 192, 166, 234, 108, 216, 230, 200, 133, 14, 87, 62, // f...l.....W> + 116, 56, 243, 193, 74, 233, 106, 97, 197, 227, 75, 225, // t8..J.ja..K. + 196, 211, 142, 132, 194, 15, 215, 159, 59, 172, 17, 161, // ........;... + 46, 219, 92, 70, 3, 0, 113, 96, 56, 93, 21, 0, // ...F..q`8].. + 132, 121, 254, 46, 74, 141, 128, 187, 174, 32, 98, 40, // .y..J.... b( + 229, 57, 75, 225, 217, 96, 49, 156, 127, 169, 97, 66, // .9K..`1...aB + 179, 255, 249, 114, 19, 255, 205, 109, 169, 202, 140, 107, // ...r...m...k + 100, 142, 170, 204, 91, 6, 135, 67, 149, 240, 245, 64, // d...[..C...@ + 136, 90, 248, 162, 206, 189, 192, 241, 199, 31, 187, 146, // .Z.......... + 40, 139, 22, 0, 226, 20, 113, 170, 26, 0, 248, 104, // (.....q....h + 53, 129, 43, 124, 106, 158, 72, 27, 99, 82, 77, 193, // 5.+|j.H.cRM. + 114, 24, 236, 118, 195, 229, 211, 237, 113, 155, 254, 85, // r..v....q..U + 127, 27, 188, 185, 203, 9, 237, 174, 60, 176, 100, 95, // ........<.d_ + 125, 65, 169, 120, 237, 34, 112, 21, 175, 132, 182, 218, // }A.x."p..... + 92, 56, 210, 105, 133, 111, 200, 79, 54, 237, 224, 195, // .8.i.o.O6... + 117, 241, 88, 43, 4, 44, 63, 172, 89, 44, 207, 93, // u.X+.,?.Y,.] + 70, 19, 0, 148, 79, 81, 0, 132, 203, 187, 35, 180, // F...OQ....#. + 26, 88, 209, 93, 55, 38, 160, 96, 217, 90, 248, 252, // .X.]7&.`.Z.. + 245, 86, 106, 1, 124, 121, 114, 27, 124, 248, 74, 19, // .Vj.|yr.|.J. + 188, 187, 159, 131, 143, 143, 108, 132, 111, 199, 205, 235, // ......l.o... + 149, 16, 66, 233, 43, 89, 61, 218, 35, 94, 237, 164, // ..B.+Y=.#^.. + 8, 192, 136, 212, 203, 198, 82, 111, 236, 92, 164, 73, // ......Ro...I + 176, 169, 203, 54, 106, 204, 83, 228, 84, 112, 233, 205, // ...6j.S.Tp.. + 118, 197, 3, 82, 66, 8, 181, 67, 252, 165, 11, 85, // v..RB..C...U + 209, 254, 21, 184, 40, 229, 6, 146, 148, 91, 186, 199, // ....(....[.. + 41, 23, 14, 190, 87, 91, 96, 179, 45, 7, 14, 110, // )...W[`.-..n + 41, 211, 101, 240, 225, 250, 79, 223, 70, 126, 76, 224, // ).e...O.F~L. + 224, 138, 104, 3, 32, 222, 69, 188, 70, 78, 0, 188, // ..h. .E.FN.. + 50, 20, 13, 93, 71, 55, 203, 126, 30, 102, 73, 239, // 2..]G7.~.fI. + 247, 54, 128, 215, 153, 39, 7, 0, 40, 175, 44, 0, // .6...'..(.,. + 8, 43, 121, 70, 228, 40, 250, 197, 227, 91, 146, 38, // .+yF.(...[.& + 124, 81, 7, 122, 155, 228, 2, 96, 36, 158, 149, 69, // |Q.z...`$..E + 241, 172, 225, 59, 43, 83, 193, 48, 240, 198, 182, 164, // ...;+S.0.... + 3, 224, 216, 137, 173, 114, 1, 32, 46, 47, 155, 70, // .....r. ./.F + 19, 128, 82, 25, 139, 133, 243, 73, 244, 243, 47, 106, // ..R....I../j + 128, 204, 76, 228, 244, 20, 51, 163, 2, 128, 48, 234, // ..L...3...0. + 31, 50, 0, 160, 171, 51, 253, 33, 185, 1, 24, 138, // .2...3.!.... + 101, 86, 16, 11, 0, 123, 100, 46, 20, 6, 79, 38, // eV...{d...O& + 223, 41, 224, 221, 1, 217, 1, 224, 159, 59, 72, 8, // .).......;H. + 0, 225, 137, 29, 217, 11, 125, 149, 156, 15, 147, 13, // ......}..... + 128, 83, 242, 159, 2, 68, 205, 79, 4, 128, 99, 74, // .S...D.O..cJ + 20, 185, 231, 88, 107, 242, 205, 2, 200, 204, 71, 33, // ...Xk.....G! + 0, 142, 73, 2, 64, 120, 80, 83, 145, 34, 219, 142, // ..I.@xPS.".. + 110, 78, 58, 0, 66, 125, 155, 148, 2, 0, 38, 122, // nN:.B}....&z + 32, 117, 34, 0, 122, 149, 42, 176, 246, 213, 150, 164, // u".z.*..... + 3, 0, 123, 86, 16, 128, 222, 184, 0, 16, 158, 207, // ..{V........ + 87, 172, 192, 180, 131, 13, 73, 7, 64, 94, 111, 163, // W.....I.@^o. + 146, 0, 64, 180, 253, 9, 162, 1, 208, 163, 100, 113, // ..@.......dq + 119, 236, 227, 224, 114, 146, 1, 176, 240, 197, 160, 210, // w...r....... + 0, 244, 196, 4, 128, 176, 45, 203, 136, 194, 197, 193, // ......-..... + 95, 7, 146, 231, 90, 192, 215, 131, 29, 112, 59, 129, // _...Z....p;. + 94, 97, 143, 71, 34, 109, 87, 19, 9, 0, 155, 210, // ^a.G"mW..... + 225, 163, 246, 38, 209, 76, 224, 228, 27, 219, 64, 13, // ...&.L....@. + 143, 49, 219, 88, 0, 56, 167, 70, 113, 206, 36, 26, // .1.X.8.Fq.$. + 8, 54, 31, 217, 164, 22, 0, 231, 38, 4, 64, 216, // .6......&.@. + 138, 77, 149, 226, 230, 29, 8, 36, 13, 0, 233, 135, // .M.....$.... + 26, 212, 2, 0, 198, 111, 97, 55, 30, 128, 86, 21, // .....oa7..V. + 11, 131, 191, 244, 135, 116, 31, 254, 87, 228, 252, 127, // .....t..W... + 155, 242, 231, 255, 112, 109, 137, 8, 128, 176, 196, 251, // ....pm...... + 51, 53, 1, 104, 33, 63, 141, 122, 7, 224, 117, 245, // 35.h!?.z..u. + 206, 255, 225, 155, 89, 78, 143, 4, 192, 60, 149, 11, // ....YN...<.. + 131, 69, 100, 106, 164, 119, 0, 188, 202, 94, 0, 138, // .Edj.w...^.. + 166, 121, 145, 0, 240, 48, 80, 24, 188, 175, 227, 91, // .y...0P....[ + 195, 151, 6, 59, 225, 190, 253, 126, 22, 0, 240, 68, // ...;...~...D + 2, 224, 4, 11, 0, 180, 246, 233, 247, 52, 112, 232, // .........4p. + 245, 45, 44, 132, 143, 58, 49, 6, 0, 97, 203, 245, // .-,..:1..a.. + 97, 22, 138, 75, 33, 223, 16, 252, 166, 232, 17, 128, // a..K!....... + 156, 151, 26, 89, 1, 96, 88, 220, 234, 94, 4, 96, // ...Y.`X..^.` + 1, 35, 133, 241, 218, 167, 195, 69, 162, 31, 158, 106, // .#.....E...j + 15, 223, 102, 158, 5, 45, 8, 7, 128, 99, 9, 128, // ..f..-...c.. + 37, 58, 28, 12, 110, 238, 219, 196, 82, 248, 40, 46, // %:..n...R.(. + 28, 128, 62, 198, 138, 131, 126, 29, 173, 20, 30, 34, // ..>...~...." + 115, 255, 148, 3, 126, 214, 0, 232, 11, 7, 224, 35, // s...~......# + 214, 0, 200, 239, 109, 210, 13, 0, 173, 236, 125, 251, // ....m.....}. + 249, 215, 223, 240, 0, 8, 47, 88, 98, 177, 64, 254, // ....../Xb.@. + 166, 137, 214, 195, 255, 148, 156, 251, 127, 245, 60, 7, // ..........<. + 140, 122, 60, 67, 241, 197, 31, 241, 8, 239, 153, 95, // .z../.. + 127, 180, 228, 66, 0, 118, 50, 94, 36, 84, 191, 210, // ...B.v2^$T.. + 172, 185, 240, 119, 189, 214, 202, 122, 248, 168, 157, 8, // ...w...z.... + 192, 65, 13, 20, 170, 169, 39, 136, 241, 182, 246, 29, // .A....'..... + 251, 56, 45, 0, 112, 112, 138, 28, 27, 62, 200, 161, // .8-.pp...>.. + 187, 200, 169, 64, 11, 235, 6, 191, 56, 221, 1, 15, // ...@....8... + 190, 16, 208, 66, 248, 252, 134, 18, 8, 192, 25, 141, // ...B........ + 20, 11, 191, 39, 198, 254, 247, 116, 7, 211, 0, 152, // ...'...t.... + 95, 110, 210, 74, 248, 168, 51, 8, 192, 121, 13, 21, // _n.J..3..y.. + 12, 235, 200, 192, 106, 152, 209, 240, 219, 143, 110, 214, // ....j.....n. + 82, 248, 168, 243, 8, 192, 5, 141, 21, 13, 86, 50, // R.........V2 + 40, 100, 237, 250, 64, 211, 145, 141, 90, 11, 31, 117, // (d..@...Z..u + 1, 1, 248, 86, 131, 133, 67, 110, 111, 35, 127, 141, // ...V..Cno#.. + 93, 237, 224, 191, 37, 194, 89, 138, 22, 61, 196, 236, // ]...%.Y..=.. + 53, 11, 0, 106, 217, 193, 32, 124, 114, 74, 189, 107, // 5..j.. |rJ.k + 4, 248, 128, 71, 97, 111, 147, 86, 195, 31, 5, 224, // ...Gao.V.... + 130, 134, 27, 128, 249, 100, 96, 120, 90, 133, 13, 38, // .....d`xZ..& + 240, 249, 126, 4, 80, 203, 222, 137, 167, 128, 243, 26, // ..~.P....... + 111, 130, 87, 1, 249, 38, 158, 83, 96, 154, 248, 55, // o.W..&.S`..7 + 242, 25, 26, 255, 214, 95, 53, 8, 60, 163, 147, 102, // ....._5.<..f + 248, 21, 55, 85, 228, 124, 252, 177, 12, 167, 5, 188, // ..7U.|...... + 28, 109, 123, 165, 5, 110, 217, 231, 211, 75, 248, 163, // .m{..n...K.. + 211, 192, 227, 58, 106, 136, 215, 156, 253, 126, 126, 23, // ...:j....~~. + 46, 90, 225, 191, 117, 50, 4, 115, 217, 91, 208, 65, // .Z..u2.s.[.A + 237, 66, 208, 65, 29, 54, 6, 11, 94, 160, 247, 168, // .B.A.6..^... + 217, 162, 23, 131, 122, 12, 127, 244, 82, 240, 78, 157, // ....z...R.N. + 54, 7, 255, 160, 240, 140, 1, 30, 67, 175, 254, 136, // 6.......C... + 55, 131, 92, 122, 109, 240, 109, 10, 207, 26, 190, 221, // 7..zm.m..... + 31, 210, 51, 0, 46, 230, 23, 132, 72, 213, 61, 207, // ..3.....H.=. + 115, 252, 141, 25, 26, 55, 119, 238, 121, 158, 211, 43, // s....7w.y..+ + 0, 171, 152, 94, 18, 150, 208, 43, 104, 40, 238, 55, // ...^...+h(.7 + 224, 102, 123, 89, 87, 194, 75, 194, 102, 232, 169, 169, // .f{YW.K.f... + 7, 14, 4, 248, 85, 184, 159, 83, 188, 107, 136, 199, // ....U..S.k.. + 194, 99, 226, 177, 117, 6, 192, 12, 213, 151, 133, 63, // .c..u......? + 176, 155, 131, 194, 173, 126, 176, 4, 57, 40, 243, 248, // .....~..9(.. + 160, 164, 218, 11, 69, 37, 30, 200, 90, 231, 130, 244, // ....E%..Z... + 28, 39, 172, 140, 162, 154, 234, 122, 248, 172, 191, 157, // .'.....z.... + 191, 28, 27, 46, 57, 239, 20, 14, 11, 151, 127, 195, // ....9....... + 133, 53, 96, 45, 209, 234, 196, 30, 176, 23, 236, 9, // .5`-........ + 123, 195, 30, 177, 87, 236, 25, 123, 87, 125, 89, 184, // {...W..{W}Y. + 210, 15, 134, 204, 218, 235, 131, 21, 219, 73, 224, 13, // .........I.. + 28, 20, 149, 214, 193, 242, 204, 90, 201, 178, 89, 235, // .......Z..Y. + 97, 104, 64, 189, 27, 66, 248, 217, 88, 67, 34, 61, // ah@..B..XC"= + 160, 7, 232, 5, 122, 130, 222, 168, 245, 96, 136, 236, // ....z....`.. + 143, 134, 205, 34, 66, 234, 243, 139, 221, 9, 25, 198, // ..."B....... + 10, 4, 52, 194, 31, 47, 244, 6, 61, 154, 165, 194, // ..4../..=... + 163, 97, 11, 228, 12, 190, 96, 27, 253, 224, 213, 132, // .a....`..... + 64, 142, 240, 199, 131, 128, 158, 201, 12, 194, 2, 217, // @........... + 31, 15, 95, 246, 180, 31, 10, 54, 120, 100, 51, 74, // .._....6xd3J + 13, 8, 228, 14, 63, 92, 232, 29, 122, 40, 251, 227, // ....?...z(.. + 225, 114, 108, 16, 177, 190, 213, 207, 15, 130, 148, 48, // .rl........0 + 74, 41, 8, 148, 12, 95, 20, 122, 136, 94, 202, 186, // J)..._.z.^.. + 65, 4, 205, 45, 98, 238, 121, 142, 140, 230, 93, 62, // A..-b.y...]> + 69, 77, 82, 2, 2, 53, 194, 15, 23, 122, 138, 222, // EMR..5...z.. + 202, 185, 69, 76, 194, 155, 68, 165, 224, 148, 206, 228, // ..EL..D..... + 81, 205, 36, 185, 32, 80, 59, 124, 81, 232, 109, 10, // Q.$. P;|Q.m. + 157, 169, 227, 60, 234, 219, 196, 205, 222, 227, 75, 120, // ...<......Kx + 90, 199, 34, 4, 172, 132, 31, 62, 109, 68, 175, 169, // Z."....>mD.. + 111, 19, 151, 200, 70, 145, 119, 146, 159, 38, 83, 165, // o...F.w..&S. + 151, 25, 147, 104, 65, 192, 90, 248, 162, 208, 235, 59, // ...hA.Z....; + 165, 159, 14, 182, 80, 221, 42, 22, 167, 42, 165, 118, // ....P.*..*.v + 246, 76, 74, 20, 2, 86, 195, 23, 133, 158, 75, 156, // .LJ..V....K. + 38, 206, 161, 186, 89, 116, 73, 19, 199, 172, 73, 82, // &...YtI...IR + 33, 96, 61, 124, 81, 232, 61, 213, 205, 162, 227, 221, // !`=|Q.=..... + 46, 254, 161, 103, 56, 197, 167, 122, 114, 67, 160, 149, // ...g8..zrC.. + 240, 197, 41, 34, 102, 64, 123, 187, 248, 152, 94, 24, // ..)"f@{...^. + 113, 51, 145, 185, 202, 171, 9, 163, 98, 133, 64, 75, // q3......b.@K + 225, 139, 194, 12, 110, 166, 249, 194, 136, 88, 95, 25, // ....n....X_. + 131, 215, 172, 181, 100, 212, 100, 16, 104, 49, 252, 209, // ....d.d.h1.. + 233, 225, 214, 152, 46, 20, 245, 80, 123, 105, 212, 29, // .......P{i.. + 123, 57, 254, 22, 167, 22, 205, 138, 4, 129, 150, 195, // {9.......... + 71, 97, 22, 152, 9, 181, 151, 70, 77, 246, 218, 184, // Ga.....FM... + 130, 144, 95, 179, 102, 141, 135, 64, 235, 225, 143, 222, // .._.f..@.... + 55, 8, 249, 233, 189, 54, 110, 178, 23, 71, 154, 42, // 7....6n..G.* + 234, 52, 111, 152, 8, 129, 30, 194, 231, 175, 13, 144, // .4o......... + 76, 168, 190, 56, 50, 218, 171, 99, 23, 237, 244, 235, // L..82..c.... + 194, 48, 61, 10, 179, 161, 246, 234, 216, 104, 47, 143, // .0=......h/. + 46, 227, 124, 134, 217, 140, 10, 179, 161, 250, 242, 232, // ..|......... + 72, 175, 143, 207, 43, 114, 27, 102, 51, 42, 204, 134, // H...+r.f3*.. + 234, 235, 227, 5, 0, 102, 18, 13, 225, 1, 239, 239, // .....f...... + 230, 12, 163, 25, 23, 102, 36, 132, 143, 153, 205, 76, // .....f$....L + 24, 0, 1, 130, 82, 60, 232, 218, 46, 227, 252, 207, // ....R<...... + 186, 48, 35, 1, 128, 210, 88, 178, 141, 21, 128, 105, // .0#...X....i + 68, 103, 75, 154, 141, 95, 0, 230, 239, 15, 52, 243, // DgK.._....4. + 191, 0, 103, 49, 51, 106, 0, 8, 16, 164, 88, 28, // ..g13j....X. + 245, 134, 201, 140, 11, 51, 194, 172, 98, 205, 53, 102, // .....3..b.5f + 0, 80, 53, 126, 238, 3, 195, 100, 182, 133, 25, 197, // .P5~...d.... + 147, 105, 92, 0, 152, 182, 7, 126, 84, 106, 245, 126, // .i.....~Tj.~ + 103, 24, 205, 232, 26, 1, 146, 13, 102, 36, 27, 0, // g.......f$.. + 40, 203, 147, 193, 223, 230, 26, 83, 65, 230, 132, 153, // (......SA... + 96, 54, 241, 230, 25, 55, 0, 168, 202, 182, 64, 179, // `6...7....@. + 212, 117, 0, 143, 173, 173, 129, 37, 233, 21, 99, 180, // .u.....%..c. + 60, 211, 145, 132, 161, 57, 174, 242, 1, 189, 145, 186, // <....9...... + 46, 0, 51, 145, 146, 165, 36, 0, 80, 214, 22, 255, // ..3...$.P... + 59, 82, 138, 125, 100, 101, 57, 204, 75, 205, 28, 163, // ;R.}de9.K... + 71, 37, 54, 174, 101, 97, 207, 227, 125, 64, 111, 164, // G%6.ea..}@o. + 28, 11, 179, 144, 154, 163, 100, 0, 200, 72, 115, 106, // ......d..Hsj + 149, 203, 55, 100, 0, 160, 46, 0, 152, 1, 102, 161, // ..7d......f. + 56, 0, 40, 95, 71, 195, 207, 74, 171, 226, 27, 20, // 8.(_G..J.... + 26, 0, 208, 3, 0, 189, 199, 12, 18, 201, 48, 33, // ..........0! + 0, 248, 83, 65, 87, 240, 231, 230, 74, 239, 247, 6, // ..SAW...J... + 0, 202, 2, 128, 158, 163, 247, 137, 230, 151, 48, 0, // ..........0. + 168, 162, 237, 129, 91, 77, 21, 222, 43, 6, 0, 202, // ....[M..+... + 0, 128, 94, 163, 231, 52, 178, 163, 2, 0, 42, 111, // ..^..4....*o + 71, 224, 55, 27, 202, 235, 174, 24, 0, 200, 11, 0, // G.7......... + 122, 140, 94, 211, 202, 141, 26, 0, 168, 210, 39, 131, // z.^.......'. + 119, 111, 40, 155, 24, 2, 3, 0, 233, 0, 160, 183, // wo(......... + 232, 49, 205, 204, 168, 2, 128, 242, 182, 55, 220, 102, // .1.......7.f + 42, 175, 251, 222, 0, 128, 46, 0, 232, 41, 122, 75, // *........)zK + 59, 47, 234, 0, 160, 156, 157, 193, 159, 90, 221, 190, // ;/.......Z.. + 47, 13, 0, 232, 0, 128, 94, 162, 167, 114, 100, 37, // /.....^..rd% + 11, 0, 226, 117, 2, 188, 64, 241, 199, 108, 167, 1, // ...u..@..l.. + 128, 68, 0, 208, 59, 244, 48, 145, 121, 190, 106, 0, // .D..;.0.y.j. + 136, 170, 10, 5, 54, 229, 20, 186, 13, 0, 226, 4, // ....6....... + 0, 61, 67, 239, 228, 206, 71, 118, 0, 248, 107, 5, // .=C...Gv..k. + 29, 193, 7, 205, 21, 255, 31, 23, 24, 0, 76, 14, // ..........L. + 0, 122, 133, 158, 41, 145, 141, 34, 0, 160, 26, 219, // .z..)..".... + 27, 126, 82, 195, 113, 255, 94, 154, 110, 0, 16, 13, // .~R.q.^.n... + 0, 244, 6, 61, 66, 175, 148, 202, 69, 49, 0, 68, // ...=B...E1.D + 21, 214, 215, 6, 83, 151, 229, 27, 0, 140, 3, 0, // ....S....... + 61, 65, 111, 148, 206, 67, 113, 0, 80, 169, 53, 222, // =Ao..Cq.P.5. + 31, 103, 172, 183, 252, 107, 254, 194, 172, 164, 7, 0, // .g...k...... + 61, 64, 47, 208, 19, 53, 178, 80, 5, 128, 209, 171, // =@/..5.P.... + 135, 30, 123, 218, 163, 171, 139, 190, 75, 86, 0, 176, // ..{.....KV.. + 119, 244, 64, 205, 12, 84, 5, 64, 148, 125, 107, 160, // w.@..T.@.}k. + 181, 164, 42, 121, 150, 154, 97, 175, 216, 51, 11, 222, // ..*y..a..3.. + 51, 1, 128, 40, 91, 40, 224, 43, 183, 215, 95, 78, // 3..([(.+.._N + 203, 210, 95, 232, 216, 19, 246, 134, 61, 178, 228, 57, // .._.....=..9 + 83, 0, 136, 42, 239, 8, 174, 175, 242, 248, 134, 180, // S..*........ + 178, 253, 204, 100, 203, 181, 72, 47, 95, 98, 79, 44, // ...d..H/_bO, + 122, 205, 36, 0, 163, 107, 15, 59, 131, 15, 217, 125, // z.$..k.;...} + 220, 7, 90, 124, 30, 17, 107, 198, 218, 177, 7, 150, // ..Z|..k..... + 61, 102, 26, 128, 49, 207, 36, 132, 2, 78, 155, 159, // =f..1.$..N.. + 251, 152, 133, 157, 72, 39, 218, 201, 19, 107, 196, 90, // ....H'...k.Z + 181, 226, 171, 102, 0, 8, 223, 209, 212, 220, 25, 176, // ...f........ + 214, 4, 253, 231, 139, 45, 117, 87, 212, 14, 29, 107, // .....-uW...k + 192, 90, 176, 166, 240, 29, 56, 13, 0, 20, 18, 215, // .Z....8..... + 22, 188, 221, 190, 37, 208, 110, 107, 244, 191, 87, 233, // ....%.nk..W. + 244, 93, 34, 223, 194, 17, 57, 6, 145, 120, 76, 60, // .]"...9..xL< + 54, 126, 6, 126, 22, 126, 38, 126, 182, 214, 253, 211, // 6~.~.~&~.... + 60, 0, 145, 84, 214, 21, 248, 133, 115, 107, 192, 235, // <..T....sk.. + 108, 244, 247, 215, 248, 184, 15, 173, 30, 223, 23, 21, // l........... + 181, 245, 151, 44, 213, 222, 97, 83, 121, 221, 21, 12, // ...,..aSy... + 50, 187, 208, 53, 250, 94, 31, 252, 111, 252, 127, 248, // 2..5.^..o... + 103, 248, 119, 240, 239, 226, 191, 193, 127, 139, 199, 192, // g.w......... + 99, 225, 49, 245, 232, 213, 255, 0, 58, 21, 99, 155, // c.1.....:.c. + 126, 121, 49, 188, 0, 0, 0, 0, 73, 69, 78, 68, // ~y1.....IEND + 174, 66, 96, 130, 0 // .B`. +}; + +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), 1654623573}, + {"/web_root/main.js", v2, sizeof(v2), 1654674665}, + {"/web_root/preact.min.js", v3, sizeof(v3), 1654623573}, + {"/web_root/style.css", v4, sizeof(v4), 1654653116}, + {"/web_root/user.png", v5, sizeof(v5), 1654623573}, + {NULL, NULL, 0, 0} +}; + +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 (strcmp(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/uart-bridge/screenshots/dashboard.png b/examples/uart-bridge/screenshots/dashboard.png new file mode 100644 index 0000000000000000000000000000000000000000..0ae0f04e8b08077c9e8d1e6ccc2f49afe92a8335 GIT binary patch literal 78809 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 AhyVZp literal 0 HcmV?d00001 diff --git a/examples/uart-bridge/web_root/index.html b/examples/uart-bridge/web_root/index.html new file mode 100644 index 00000000..2a323abd --- /dev/null +++ b/examples/uart-bridge/web_root/index.html @@ -0,0 +1,12 @@ + + + + Device Dashboard + + + + + + + + diff --git a/examples/uart-bridge/web_root/main.js b/examples/uart-bridge/web_root/main.js new file mode 100644 index 00000000..661aa238 --- /dev/null +++ b/examples/uart-bridge/web_root/main.js @@ -0,0 +1,81 @@ +'use strict'; +import {Component, h, html, render, useEffect, useState, useRef} from './preact.min.js'; + +const Message = m => html` + ${m.message.data} +`; + +const App = function(props) { + const [cfg, setCfg] = useState({tcp: '', ws: ''}); + const [messages, setMessages] = useState([]); + const [txt, setTxt] = useState(''); + const [connected, setConnected] = useState(false); + const [ws, setWs] = useState(null); + + const tcp_port = cfg.tcp.split(':')[2] || 4001; + const ws_port = cfg.ws.split(':')[2] || 4002; + + const refresh = () => + fetch('/api/config/get').then(r => r.json()).then(r => setCfg(r)); + + const watchWebsocket = function() { + // Connect to websocker port, to implement WS console + var l = window.location, proto = l.protocol.replace('http', 'ws'); + var tid, url = `${proto}//${l.hostname}:${ws_port}/ws`; + console.log(url); + var reconnect = function() { + var ws = new WebSocket(url); + ws.onopen = () => { + setConnected(true); + setWs(ws); + }; + ws.onmessage = ev => { + // console.log(ev, ev.data); + setMessages(x => x.concat([{data: ev.data, uart: true}])); + }; + ws.onclose = function() { + clearTimeout(tid); + tid = setTimeout(reconnect, 1000); + setConnected(false); + setWs(null); + }; + }; + reconnect(); + }; + + useEffect(() => { + refresh(); + watchWebsocket(); + }, []); + + + const sendmessage = ev => { + setMessages(x => x.concat([{data: txt + '\n', uart: false}])); + if (ws) ws.send(txt + '\n'); + setTxt(''); + }; + + return html` +
+

UART \u27F7 network bridge

+

UART settings

+
${JSON.stringify(cfg, null, 2)}
+

RX pin ${cfg.rx}, TX pin ${cfg.tx}, baud ${cfg.baud}

+

TCP listener: port ${tcp_port}

+

Use netcat to connect:

+
$ nc ${location.hostname} ${tcp_port}
+

Websocket listener: port ${ws_port}

+
UART console. Status: ${connected ? 'connected' : 'disconnected'}
+
+    ${messages.map(message => h(Message, {message}))}
+  
+
+ setTxt(ev.target.value)} /> +
+
`; +}; + +window.onload = () => render(h(App), document.body); diff --git a/examples/uart-bridge/web_root/preact.min.js b/examples/uart-bridge/web_root/preact.min.js new file mode 100644 index 00000000..e24f87b9 --- /dev/null +++ b/examples/uart-bridge/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/uart-bridge/web_root/style.css b/examples/uart-bridge/web_root/style.css new file mode 100644 index 00000000..3e5b8c30 --- /dev/null +++ b/examples/uart-bridge/web_root/style.css @@ -0,0 +1,23 @@ +* { 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; } +pre { color: #373; font-family: monospace; font-weight: bolder; font-size: smaller; background: #ddd; padding: 1em; border-radius: 0.2em; } +textarea, input, .addon { font-size: 15px; border: 1px solid #ccc; padding: 0.5em; } +a, a:visited, a:active { color: #55f; } +body {background: #455; } +.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: 2em auto; max-width: 680px; background: white; padding: 1em; border-radius: 0.5em; } +.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; } +.input { background: #fea; padding: 0.2em 1em; border-radius: 0.4em; } +.output { background: #aef; padding: 0.2em 1em; border-radius: 0.4em; }