From 52811719f7fa6d4159840dd4f85b89bbb64d0819 Mon Sep 17 00:00:00 2001 From: chunyexixiaoyu <834670833@qq.com> Date: Thu, 14 Jul 2022 10:32:19 +0800 Subject: [PATCH 1/8] update the README.md on this branch --- README.md | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/README.md b/README.md index 0e66973..b45a8bf 100644 --- a/README.md +++ b/README.md @@ -87,3 +87,14 @@ dns server #1: 223.5.5.5 WebNet 软件包使用需要文件系统和Lwip协议栈的支持。 +webnet.c 文件中注意以下定义,注意其他操作系统lwip协议栈的大小设置 + +``` +#ifdef ADD_RTTHREAD_FETURES +#if defined(RT_USING_LWIP) && (RT_LWIP_TCPTHREAD_STACKSIZE < 1408) +#error The lwIP tcpip thread stack size(RT_LWIP_TCPTHREAD_STACKSIZE) must more than 1408 +#endif +#endif +``` + +webnet文件夹为该分支的一个前端页面文件版本 -- 2.34.1 From 27df62c9de293e4b77fdf64bc095ff5bc03373b1 Mon Sep 17 00:00:00 2001 From: chunyexixiaoyu <834670833@qq.com> Date: Thu, 14 Jul 2022 10:33:20 +0800 Subject: [PATCH 2/8] 1.add webnet web files 2.add source files adapt to the web. 3.the branch is specific version --- module/wn_module_log.c | 5 +- samples/deviceinfoasp.c | 103 ++++++++++++++++ samples/deviceinfoasp.h | 39 +++++++ samples/index.html | 81 ------------- samples/index.shtml | 14 --- samples/netsetting.c | 214 ++++++++++++++++++++++++++++++++++ samples/netsetting.h | 80 +++++++++++++ samples/uploaddata.c | 119 +++++++++++++++++++ samples/uploaddata.h | 16 +++ samples/version.asp | 10 -- samples/wn_sample.c | 99 +++++----------- src/wn_module.c | 1 + webnet/chart.html | 153 ++++++++++++++++++++++++ webnet/css/layout.css | 131 +++++++++++++++++++++ webnet/deviceinfo.asp | 147 +++++++++++++++++++++++ webnet/index_origin.html | 29 +++++ webnet/js/Chart.bundle.min.js | 7 ++ webnet/logo/logo.png | Bin 0 -> 211042 bytes webnet/mqtt.html | 211 +++++++++++++++++++++++++++++++++ webnet/netsetting.html | 119 +++++++++++++++++++ webnet/privateProtocol.html | 194 ++++++++++++++++++++++++++++++ webnet/systemModify.html | 140 ++++++++++++++++++++++ webnet/tcp.html | 212 +++++++++++++++++++++++++++++++++ 23 files changed, 1945 insertions(+), 179 deletions(-) create mode 100644 samples/deviceinfoasp.c create mode 100644 samples/deviceinfoasp.h delete mode 100644 samples/index.html delete mode 100644 samples/index.shtml create mode 100644 samples/netsetting.c create mode 100644 samples/netsetting.h create mode 100644 samples/uploaddata.c create mode 100644 samples/uploaddata.h delete mode 100644 samples/version.asp create mode 100644 webnet/chart.html create mode 100644 webnet/css/layout.css create mode 100644 webnet/deviceinfo.asp create mode 100644 webnet/index_origin.html create mode 100644 webnet/js/Chart.bundle.min.js create mode 100644 webnet/logo/logo.png create mode 100644 webnet/mqtt.html create mode 100644 webnet/netsetting.html create mode 100644 webnet/privateProtocol.html create mode 100644 webnet/systemModify.html create mode 100644 webnet/tcp.html diff --git a/module/wn_module_log.c b/module/wn_module_log.c index a834805..3ce0ab9 100644 --- a/module/wn_module_log.c +++ b/module/wn_module_log.c @@ -85,8 +85,9 @@ int webnet_module_log(struct webnet_session* session, int event) } else if (event == WEBNET_EVENT_URI_POST) { - printf("physical url: %s", request->path); - printf(" mime type: %s", mime_get_type(request->path)); + + printf("event post uri physical url: %s", request->path); + printf("mime type: %s", mime_get_type(request->path)); } else if (event == WEBNET_EVENT_RSP_HEADER) { diff --git a/samples/deviceinfoasp.c b/samples/deviceinfoasp.c new file mode 100644 index 0000000..fce7cd8 --- /dev/null +++ b/samples/deviceinfoasp.c @@ -0,0 +1,103 @@ +#include "deviceinfoasp.h" +deviceinfo xidatong_deviceinfo = +{ + DEVICE_NUM_DEFUALT, + DEVICE_NAME_DEFUALT, + DEVICE_TYPE_DEFUALT, + DEVICE_SERIAL_DEFUALT, + RT_THREAD_KERNEL, + SYSTEM_VERSION, + WEB_VERSION +}; + +void deviceinfo_default() +{ + /* + 目前认为这个是不变的变量 + */ + //memset((char *)(&xidatong_deviceinfo),0,sizeof(xidatong_deviceinfo)); +} + + void asp_var_device_name(struct webnet_session* session) +{ + assert(session != NULL); + static const char *temp = "%s"; + webnet_session_printf(session, temp, xidatong_deviceinfo.name); +} + + void asp_var_device_number(struct webnet_session* session) +{ + assert(session != NULL); + static const char *temp = "%d" ; + webnet_session_printf(session, temp,xidatong_deviceinfo.number); +} + + void asp_var_device_type(struct webnet_session* session) +{ + assert(session != NULL); + static const char *temp = "%s"; + webnet_session_printf(session, temp, xidatong_deviceinfo.type); +} + + + void asp_var_device_serial(struct webnet_session* session) +{ + assert(session != NULL); + static const char *temp = "%s"; + webnet_session_printf(session, temp, xidatong_deviceinfo.serial); +} + + void asp_var_os_type(struct webnet_session* session) +{ + assert(session != NULL); + static const char *temp = "%s"; + webnet_session_printf(session, temp, xidatong_deviceinfo.ostype); +} + void asp_var_web_version(struct webnet_session* session) +{ + assert(session != NULL); + static const char *temp = "%s"; + webnet_session_printf(session, temp,xidatong_deviceinfo.webversion); +} + + void asp_var_system_firmware(struct webnet_session* session) +{ + assert(session != NULL); + static const char *temp = "系统固件 %s

"; + webnet_session_printf(session, temp, xidatong_deviceinfo.system_firmware); +} + + + +void cgi_device_reboot(struct webnet_session* session) +{ + const char* mimetype; + const char *response = "{\"code\":0}"; + static char order_sh[] = "reboot"; + mimetype = mime_get_type(".html"); + session->request->result_code = 200; + webnet_session_set_header(session, mimetype, 200, "Ok", -1); + webnet_session_printf(session, response); + #ifdef ADD_RTTHREAD_FETURES + extern int msh_exec(char *cmd, rt_size_t length); + printf("reboot !!!!! \n\r"); + msh_exec(order_sh,rt_strlen(order_sh)); + #elif defined ADD_XIZI_FETURES + #endif + +} + +extern void mqttweb_default(); +extern void private_prtweb_default(); +void cgi_device_recovery(struct webnet_session* session) +{ + const char* mimetype; + const char *response = "{\"code\":0}"; + mimetype = mime_get_type(".html"); + session->request->result_code = 200; + webnet_session_set_header(session, mimetype, 200, "Ok", -1); + webnet_session_printf(session, response); + mqttweb_default(); + private_prtweb_default(); + +} \ No newline at end of file diff --git a/samples/deviceinfoasp.h b/samples/deviceinfoasp.h new file mode 100644 index 0000000..82f1e0d --- /dev/null +++ b/samples/deviceinfoasp.h @@ -0,0 +1,39 @@ +#ifndef _DEVICEINFO_H +#define _DEVICEINFO_H +#include +#include + +#define RT_THREAD_KERNEL "rt-thread kenel" +#define NUTTX_OS_KERNEL "nuttx kenel" +#define XIZI_OS_KERNEL "xizi kenel" +#define DEVICE_NAME_DEFUALT "xidatong" +#define DEVICE_TYPE_DEFUALT "gateway" +#define DEVICE_SERIAL_DEFUALT "12345678910" +#define DEVICE_NUM_DEFUALT (1) +#define WEB_VERSION "1.0.0" +#define SYSTEM_VERSION "1.1.1" + + + +typedef struct +{ + int number; + char name[16]; + char type[16]; + char serial[16]; + char ostype[16]; + char system_firmware[8]; + char webversion[8]; +}deviceinfo; + +void deviceinfo_default(); +void asp_var_device_name(struct webnet_session* session); +void asp_var_device_number(struct webnet_session* session); +void asp_var_device_type(struct webnet_session* session); +void asp_var_device_serial(struct webnet_session* session); +void asp_var_os_type(struct webnet_session* session); +void asp_var_web_version(struct webnet_session* session); +void asp_var_system_firmware(struct webnet_session* session); +void cgi_device_reboot(); +void cgi_device_recovery(); +#endif \ No newline at end of file diff --git a/samples/index.html b/samples/index.html deleted file mode 100644 index 5d08f63..0000000 --- a/samples/index.html +++ /dev/null @@ -1,81 +0,0 @@ - - - - WebNet - - - - -

WebNet

- ǻRT-ThreadWebnetֲ޸ģ ΪСǶʽ豸Ϊweb serverеԴռãչԺõص㡣 -
- -

WebNet

- - -
-

1. AUTH Test

- WebNet ֤Ƴ URL Ŀ¼ҹʹʱĿ¼ַȨ -

- ֤ܲԣûΪ admin:admin -

- -
-

2. CGI Test

- WebNet CGI ܿûִָĺCGIԣ -

- > hello world -
- > calc -

- -
-

3. ASP Test

- WebNet ʵֵһּ򻯷ʽ ASP 滻ҳ<% %> dzʱԶ滻ûעַ䡣 -

- ASP ܲԣ version.asp ļӡǰ RT-Thread ϵͳ汾 -

- -
-

4. SSI Test

- SSI ģִзϳ߲ıݵҳҳ #include virtual="/xxx" #include file="/xxx" ǴʱԶɶӦļеϢ -

- SSI ܲԣ /version.shtml ҳ棬Ƕ /index.html ҳ -

- -
-

5. INDEX Test

- INDEX ģԶʾĿ¼ļбĿ¼в index.htm, index.html, index.asp ļʱԶʾĿ¼µļб -

- INDEX ܲԣ/admin Ŀ¼гĿ¼ļ -

- -
-

6. ALIAS Test

- ALIAS ģԸǰԴļö·ļ򻯲ûԴķʡ -

- ALIAS ܲԣ /test Ŀ¼ת /admin Ŀ¼ -

- -
-

7. Upload File Test

- ļϴģϴļָĿ¼ϴĿ¼µ /upload Ŀ¼ -

-
- - -
-
- ϴļĿ¼ -

- - diff --git a/samples/index.shtml b/samples/index.shtml deleted file mode 100644 index d3f1b6e..0000000 --- a/samples/index.shtml +++ /dev/null @@ -1,14 +0,0 @@ - - - SSI Test - - - -

SSI Test

- The index.html page embedded in the following page -

- Go back to root -
- - - \ No newline at end of file diff --git a/samples/netsetting.c b/samples/netsetting.c new file mode 100644 index 0000000..f52e985 --- /dev/null +++ b/samples/netsetting.c @@ -0,0 +1,214 @@ +#include "netsetting.h" + + +static mqttsetting mqttweb; +static local_tcpip local_tcpipweb; +static private_prt private_prtweb; + + +void mqttweb_default() +{ + strcpy(mqttweb.server_addr,ALIYUN_SERVER_ADDR); + strcpy(mqttweb.server_port,ALIYUN_SERVER_PORT); + strcpy(mqttweb.topic,ALIYUN_SERVER_TOPIC); + strcpy(mqttweb.username,ALIYUN_USERNAME); + strcpy(mqttweb.password,ALIYUN_PASSWORD); + strcpy(mqttweb.clientid,ALIYUN_CLIENTID); +} + +void local_tcpipweb_default() +{ + strcpy(local_tcpipweb.local_ipaddr,LOCAL_IP_ADDR); + strcpy(local_tcpipweb.netmask_addr,LOCAL_NETMASK_ADDR); + strcpy(local_tcpipweb.gateway_addr,LOCAL_GATEWAY_MASK); + strcpy(local_tcpipweb.dns_server0,LOCAL_DNS_SERVER0); + strcpy(local_tcpipweb.dns_server1,LOCAL_DNS_SERVER1); +} + +void private_prtweb_default() +{ + strcpy(private_prtweb.server_addr,PRIVATE_SERVER_ADDR); + strcpy(private_prtweb.server_port,PRIVATE_SERVER_PORt); + strcpy(private_prtweb.username,PRIVATE_USERNAME); + strcpy(private_prtweb.passward,PRIVATE_PASSWORD); +} + + +char *json_create_mqtt_data(void) +{ + char *json_data = RT_NULL; + cJSON *root = cJSON_CreateObject(); + + cJSON_AddItemToObject(root, "pub_topic", cJSON_CreateString(mqttweb.topic)); + cJSON_AddItemToObject(root, "server_addr", cJSON_CreateString(mqttweb.server_addr)); + cJSON_AddItemToObject(root, "server_port", cJSON_CreateString(mqttweb.server_port)); + cJSON_AddItemToObject(root, "username", cJSON_CreateString(mqttweb.username)); + cJSON_AddItemToObject(root, "password", cJSON_CreateString(mqttweb.password)); + cJSON_AddItemToObject(root, "clientID", cJSON_CreateString(mqttweb.clientid)); + json_data = cJSON_PrintUnformatted(root); + cJSON_Delete(root); + return json_data; +} + +void cgi_mqtt_get_data(struct webnet_session *session) +{ + cgi_head(); + request = request; + body = json_create_mqtt_data(); + webnet_session_printf(session, body); + free(body); +} + +void cgi_mqtt_save_data(struct webnet_session *session) +{ + cgi_head(); + const char *response = "{\"code\":0}"; + const char *tpub_topic = webnet_request_get_query(request, "pub_topic"); + const char *tserver_addr = webnet_request_get_query(request, "server_addr"); + const char *tserver_port = webnet_request_get_query(request, "server_port"); + const char *tusername = webnet_request_get_query(request, "username"); + const char *tpassword = webnet_request_get_query(request, "password"); + const char *tclientID = webnet_request_get_query(request, "clientID"); + /*configuration*/ + memset((char*)(&mqttweb),0,sizeof(mqttweb)); + strcpy(mqttweb.server_addr,tserver_addr); + strcpy(mqttweb.server_port,tserver_port); + strcpy(mqttweb.topic,tpub_topic); + strcpy(mqttweb.username,tusername); + strcpy(mqttweb.password,tpassword); + strcpy(mqttweb.clientid,tclientID); + + printf("\n\r \ + mqtt serveraddr: %s \n \ + mqtt server_port: %s \n \ + mqtt topic: %s \n \ + mqtt username: %s \n \ + mqtt password: %s \n \ + mqtt clientid: %s \n \ + ",mqttweb.server_addr,mqttweb.server_port,mqttweb.topic, \ + mqttweb.username,mqttweb.password,mqttweb.clientid); + webnet_session_printf(session, response); +} + + +static void device_get_tcpip_parameter() +{ + #ifdef ADD_RTTHREAD_FETURES + struct netdev *netdev_device = netdev_get_by_name("e0"); + /* + printf("ip address: %s\n", inet_ntoa(netdev_device->ip_addr)); + printf("netmask address: %s\n", inet_ntoa(netdev_device->netmask)); + printf("gw address: %s\n", inet_ntoa(netdev_device->gw)); + printf("dns0 address: %s\n", inet_ntoa(netdev_device->dns_servers[0])); + printf("dns1 address: %s\n", inet_ntoa(netdev_device->dns_servers[1])); + */ + strcpy(local_tcpipweb.local_ipaddr,inet_ntoa(netdev_device->ip_addr)); + strcpy(local_tcpipweb.netmask_addr,inet_ntoa(netdev_device->netmask)); + strcpy(local_tcpipweb.gateway_addr,inet_ntoa(netdev_device->gw)); + strcpy(local_tcpipweb.dns_server0,inet_ntoa(netdev_device->dns_servers[0])); + strcpy(local_tcpipweb.dns_server1,inet_ntoa(netdev_device->dns_servers[1])); + #elif defined ADD_XIZI_FETURES + #endif +} +//MSH_CMD_EXPORT(device_get_tcpip_parameter, device_get_tcpip_parameter); + +char *json_create_tcpip_data(void) +{ + char *json_data = RT_NULL; + cJSON *root = cJSON_CreateObject(); + cJSON_AddItemToObject(root, "local_ipaddr", cJSON_CreateString(local_tcpipweb.local_ipaddr)); + cJSON_AddItemToObject(root, "netmask_addr", cJSON_CreateString(local_tcpipweb.netmask_addr)); + cJSON_AddItemToObject(root, "gateway_addr", cJSON_CreateString(local_tcpipweb.gateway_addr)); + cJSON_AddItemToObject(root, "dns_server0", cJSON_CreateString(local_tcpipweb.dns_server0)); + cJSON_AddItemToObject(root, "dns_server1", cJSON_CreateString(local_tcpipweb.dns_server1)); + json_data = cJSON_PrintUnformatted(root); + cJSON_Delete(root); + return json_data; + +} +void cgi_tcpip_get_data(struct webnet_session *session) +{ + cgi_head(); + request = request; + device_get_tcpip_parameter(); + body = json_create_tcpip_data(); + webnet_session_printf(session, body); + free(body); +} + +void cgi_tcpip_save_data(struct webnet_session *session) +{ + cgi_head(); + ip_addr_t addr; + const char *response = "{\"code\":0}"; + const char *local_ipaddr = webnet_request_get_query(request, "local_ipaddr"); + const char *netmask_addr = webnet_request_get_query(request, "netmask_addr"); + const char *gateway_addr = webnet_request_get_query(request, "gateway_addr"); + const char *dns_server0 = webnet_request_get_query(request, "dns_server0"); + const char *dns_server1 = webnet_request_get_query(request, "dns_server1"); + #ifdef ADD_RTTHREAD_FETURES + struct netdev *netdev_device = netdev_get_by_name("e0"); + inet_aton(local_ipaddr, &addr); + netdev_set_ipaddr(netdev_device, &addr); + inet_aton(netmask_addr, &addr); + netdev_set_netmask(netdev_device, &addr); + inet_aton(gateway_addr, &addr); + netdev_set_gw(netdev_device, &addr); + inet_aton(dns_server0, &addr); + netdev_set_dns_server(netdev_device,0, &addr); + inet_aton(dns_server1, &addr); + netdev_set_dns_server(netdev_device,0, &addr); + #elif defined ADD_XIZI_FETURES + #endif + /*configuration*/ + memset((char*)(&local_tcpipweb),0,sizeof(local_tcpipweb)); + strcpy(local_tcpipweb.local_ipaddr,local_ipaddr); + strcpy(local_tcpipweb.netmask_addr,netmask_addr); + strcpy(local_tcpipweb.gateway_addr,gateway_addr); + strcpy(local_tcpipweb.dns_server0,dns_server0); + strcpy(local_tcpipweb.dns_server1,dns_server1); + webnet_session_printf(session, response); +} + + + +char *json_create_private_prt_data() +{ + char *json_data = RT_NULL; + cJSON *root = cJSON_CreateObject(); + cJSON_AddItemToObject(root, "server_addr", cJSON_CreateString(private_prtweb.server_addr)); + cJSON_AddItemToObject(root, "server_port", cJSON_CreateString(private_prtweb.server_port)); + cJSON_AddItemToObject(root, "username", cJSON_CreateString(private_prtweb.username)); + cJSON_AddItemToObject(root, "passward", cJSON_CreateString(private_prtweb.passward)); + json_data = cJSON_PrintUnformatted(root); + cJSON_Delete(root); + return json_data; +} + +void cgi_private_prt_get_data(struct webnet_session *session) +{ + cgi_head(); + request = request; + body = json_create_private_prt_data(); + webnet_session_printf(session, body); + free(body); +} + +void cgi_private_prt_save_data(struct webnet_session *session) +{ + cgi_head(); + ip_addr_t addr; + const char *response = "{\"code\":0}"; + const char *server_addr = webnet_request_get_query(request, "server_addr"); + const char *server_port = webnet_request_get_query(request, "server_port"); + const char *username = webnet_request_get_query(request, "username"); + const char *passward = webnet_request_get_query(request, "passward"); + + /*configuration*/ + memset((char*)(&private_prtweb),0,sizeof(private_prtweb)); + strcpy(private_prtweb.server_addr,server_addr); + strcpy(private_prtweb.server_port,server_port); + strcpy(private_prtweb.username,username); + strcpy(private_prtweb.passward,passward); + webnet_session_printf(session, response); +} diff --git a/samples/netsetting.h b/samples/netsetting.h new file mode 100644 index 0000000..ba8d669 --- /dev/null +++ b/samples/netsetting.h @@ -0,0 +1,80 @@ +#ifndef _NETSETTING_H +#define _NETSETTING_H +#include +#include +#include +#include + +#define cgi_head() \ + ; \ + const char *mimetype; \ + struct webnet_request *request; \ + static char *body = NULL; \ + request = session->request; \ + mimetype = mime_get_type(".html"); \ + session->request->result_code = 200; \ + webnet_session_set_header(session, mimetype, 200, "Ok", -1); + +/* +mqtt platform macro +*/ +#define ALIYUN_SERVER_ADDR "hf6mzwdVnJg.iot-as-mqtt.cn-shanghai.aliyuncs.com" +#define ALIYUN_SERVER_PORT "1883" +#define ALIYUN_SERVER_TOPIC "/broadcast/hf6mzwdVnJg/989898" +#define ALIYUN_USERNAME "test1&hf6mzwdVnJg" +#define ALIYUN_PASSWORD "F08C59D320BB72830B9ECC5ACF132BC22B55861B" +#define ALIYUN_CLIENTID "123|securemode=3,signmethod=hmacsha1|" + +#define LOCAL_IP_ADDR "192.168.131.29" +#define LOCAL_NETMASK_ADDR "255.255.255.0" +#define LOCAL_GATEWAY_MASK "192.168.130.1" +#define LOCAL_DNS_SERVER0 "0.0.0.0" +#define LOCAL_DNS_SERVER1 "0.0.0.0" + +#define PRIVATE_SERVER_ADDR "192.168.131.30" +#define PRIVATE_SERVER_PORt "9898" +#define PRIVATE_USERNAME "admin" +#define PRIVATE_PASSWORD "admin" + +typedef struct +{ + + char topic[100]; //topic + char server_addr[100]; //服务器地址 + char server_port[12]; //服务器端口 + char username[50]; //用户名 + char password[100]; //密码 + char clientid[100]; //client id + +}mqttsetting; + + +typedef struct +{ + char local_ipaddr[16]; //本地ip + char netmask_addr[16]; //子网掩码 + char gateway_addr[16]; //网关 + char dns_server0[16]; + char dns_server1[16]; +}local_tcpip; + + +typedef struct +{ + char server_addr[100]; //私有协议服务器地址 + char server_port[12]; //端口号 + char username[16]; //用户名 + char passward[16]; //密码确认 +}private_prt; + +void mqttweb_default(); +void local_tcpipweb_default(); +void private_prtweb_default(); +void cgi_mqtt_get_data(struct webnet_session *session); +void cgi_mqtt_save_data(struct webnet_session *session); +void cgi_tcpip_get_data(struct webnet_session *session); +void cgi_tcpip_save_data(struct webnet_session *session); +void cgi_private_prt_get_data(struct webnet_session *session); +void cgi_private_prt_save_data(struct webnet_session *session); + +#endif \ No newline at end of file diff --git a/samples/uploaddata.c b/samples/uploaddata.c new file mode 100644 index 0000000..8e181e5 --- /dev/null +++ b/samples/uploaddata.c @@ -0,0 +1,119 @@ +#include "uploaddata.h" +char msg[] = "/mq_upload_web"; +sensor_msg eg_temperature; +sensor_msg web_show; + +static mqd_t mq_web; +void upload_receive_web_msg_thread() +{ + int nbytes = 0; + while(1) + { + nbytes = PrivMqueueReceive(mq_web,(char*)(&eg_temperature), sizeof(eg_temperature), NULL); + if (nbytes < 0) + { + printf("mq_receive error: %d \n",nbytes); + } + else + { + printf("=============mq_receive success:==============\n"); + printf(" \ + name:%s\n \ + brand %s\n \ + unit %s\n \ + value %s\n", \ + eg_temperature.name,eg_temperature.brand,eg_temperature.unit,eg_temperature.value); + memcpy(&web_show,&eg_temperature,sizeof(web_show)); + } + } + +} +int uploaddata_init() +{ + + struct mq_attr webmq_attr; + int result = 0; + pthread_t tid = 0; + pthread_attr_t attr; + struct sched_param prio; + prio.sched_priority = 8; + size_t stack_size = 1024 * 11; + webmq_attr.mq_flags = 0; + webmq_attr.mq_maxmsg = 20; + webmq_attr.mq_msgsize = 512; + webmq_attr.mq_curmsgs = 0; + mq_web = PrivMqueueCreate("/mq_web", O_RDONLY|O_CREAT,0666,&webmq_attr); + if (mq_web < 0) + { + printf("mq_open error: %d \n",mq_web); + }else + { + printf("mq_open success: %d \n",mq_web); + } + pthread_attr_init(&attr); + pthread_attr_setschedparam(&attr, &prio); + pthread_attr_setstacksize(&attr, stack_size); + result = pthread_create(&tid, &attr,upload_receive_web_msg_thread, NULL); + if (0 == result) + { + printf("thread_detect_entry successfully!\n"); + } + else + { + printf("thread_detect_entry failed! error code is %d.\n", result); + } + /***********demo sensor set parameters***************/ + strcpy(eg_temperature.name,"temperature"); + strcpy(eg_temperature.brand,"hs300x"); + strcpy(eg_temperature.unit,"°C"); +} + + +void upload_send_web_msg() +{ + static int seed_t = 20; + float temp = 25; + float tem_decimals = 0; + int nbytes = 0; + memset((char*)eg_temperature.value,0,sizeof(eg_temperature.value)); + srand(seed_t); + tem_decimals = ((float)(rand() % 100))/100.0; + temp = temp + tem_decimals; + sprintf(eg_temperature.value,"%f",temp); + printf("rand generate temperature %s \n\r",eg_temperature.value); + + nbytes = PrivMqueueSend(mq_web, (char *)(&eg_temperature), sizeof(eg_temperature), 0); + if (nbytes < 0) + { + printf("mq_send error: %d \n",nbytes); + } + else + { + printf("mq_send success: times%d \n",seed_t); + } + seed_t++; +} +#ifdef ADD_RTTHREAD_FETURES + MSH_CMD_EXPORT(upload_send_web_msg, upload_send_web_msg); +#endif +char *json_create_datashow_data() +{ + char *json_data = RT_NULL; + cJSON *root = cJSON_CreateObject(); + cJSON_AddItemToObject(root, "name", cJSON_CreateString(web_show.name)); + cJSON_AddItemToObject(root, "brand", cJSON_CreateString(web_show.brand)); + cJSON_AddItemToObject(root, "unit", cJSON_CreateString(web_show.unit)); + cJSON_AddItemToObject(root, "value", cJSON_CreateString(web_show.value)); + json_data = cJSON_PrintUnformatted(root); + cJSON_Delete(root); + return json_data; +} + + void cgi_dateshow_get_data(struct webnet_session *session) + { + cgi_head(); + request = request; + body = json_create_datashow_data(); + webnet_session_printf(session, body); + free(body); + } diff --git a/samples/uploaddata.h b/samples/uploaddata.h new file mode 100644 index 0000000..95b6209 --- /dev/null +++ b/samples/uploaddata.h @@ -0,0 +1,16 @@ +#ifndef _UPLOADDATA_ +#define _UPLOADDATA_ +#include "netsetting.h" +typedef struct +{ + char name[32]; //sensor name + char brand[32]; //sensor brand; + char unit[12]; //sensor unit + char value[12]; //sensor value +}sensor_msg; + + +int uploaddata_init(); +void upload_send_web_msg(); +void cgi_dateshow_get_data(struct webnet_session *session); +#endif \ No newline at end of file diff --git a/samples/version.asp b/samples/version.asp deleted file mode 100644 index 0ea2c9e..0000000 --- a/samples/version.asp +++ /dev/null @@ -1,10 +0,0 @@ - - - - ASP Test - - - - <% version %> - - diff --git a/samples/wn_sample.c b/samples/wn_sample.c index b1893ac..97a34db 100644 --- a/samples/wn_sample.c +++ b/samples/wn_sample.c @@ -20,89 +20,40 @@ * Date Author Notes * 2022-05-09 chunyexixiaoyu the version transplanted from rt-thread */ - #include #include #include +#include "deviceinfoasp.h" +#include "netsetting.h" +#include "uploaddata.h" #define XiUOS_VERSION (1) #define XiUOS_SUBVERSION (0) #define XiUOS_REVERSION (0) -static void asp_var_version(struct webnet_session* session) -{ - assert(session != NULL); - static const char *version = "RT-Thread %d.%d.%d

" - "Go back to root"; - webnet_session_printf(session, version, XiUOS_VERSION, XiUOS_SUBVERSION, XiUOS_REVERSION); -} -static void cgi_calc_handler(struct webnet_session* session) -{ - int a, b; - const char* mimetype; - struct webnet_request* request; - static const char* header = " calc "; - - static const char* body = "
" - "+ = %d
" - "
Go back to root\r\n"; - - assert(session != NULL); - request = session->request; - assert(request != NULL); - - /* get mimetype */ - mimetype = mime_get_type(".html"); - - a = 1; - b = 1; - /* set http header */ - session->request->result_code = 200; - webnet_session_set_header(session, mimetype, 200, "Ok", -1); - - webnet_session_write(session, (const uint8*)header, strlen(header)); - if (request->query_counter) - { - const char *a_value, *b_value; - a_value = webnet_request_get_query(request, "a"); - b_value = webnet_request_get_query(request, "b"); - - a = atoi(a_value); - b = atoi(b_value); - } - - webnet_session_printf(session, body, a, b, a + b); -} - -static void cgi_hello_handler(struct webnet_session* session) -{ - const char* mimetype; - static const char* status = " hello " - "hello world

" - "Go back to root\r\n"; - assert(session != NULL); - - /* get mimetype */ - mimetype = mime_get_type(".html"); - - /* set http header */ - session->request->result_code = 200; - webnet_session_set_header(session, mimetype, 200, "Ok", strlen(status)); - - webnet_session_write(session, (const uint8*)status,strlen(status)); -} - -void webnet_test(void) +void webnet_start(void) { #ifdef WEBNET_USING_CGI - webnet_cgi_register("hello", cgi_hello_handler); - webnet_cgi_register("calc", cgi_calc_handler); + webnet_cgi_register("mqtt_get", cgi_mqtt_get_data); + webnet_cgi_register("mqtt_save", cgi_mqtt_save_data); + webnet_cgi_register("tcpip_get", cgi_tcpip_get_data); + webnet_cgi_register("tcpip_save", cgi_tcpip_save_data); + webnet_cgi_register("private_prt_get", cgi_private_prt_get_data); + webnet_cgi_register("private_prt_save", cgi_private_prt_save_data); + webnet_cgi_register("device_reboot", cgi_device_reboot); + webnet_cgi_register("device_recovery", cgi_device_recovery); + webnet_cgi_register("datashow", cgi_dateshow_get_data); #endif #ifdef WEBNET_USING_ASP - webnet_asp_add_var("version", asp_var_version); + webnet_asp_add_var("device_name", asp_var_device_name); + webnet_asp_add_var("device_number", asp_var_device_number); + webnet_asp_add_var("device_type", asp_var_device_type); + webnet_asp_add_var("device_serial", asp_var_device_serial); + webnet_asp_add_var("os_type", asp_var_os_type); + webnet_asp_add_var("system_firmware", asp_var_system_firmware); + webnet_asp_add_var("web_version", asp_var_web_version); #endif #ifdef WEBNET_USING_ALIAS @@ -110,7 +61,7 @@ void webnet_test(void) #endif #ifdef WEBNET_USING_AUTH - webnet_auth_set("/admin", "admin:admin"); + webnet_auth_set("/", "admin:admin"); #endif #ifdef WEBNET_USING_UPLOAD @@ -118,9 +69,13 @@ void webnet_test(void) webnet_upload_add(&upload_entry_upload); #endif - + private_prtweb_default(); + mqttweb_default(); + uploaddata_init(); webnet_init(); + + } #ifdef ADD_RTTHREAD_FETURES -MSH_CMD_EXPORT(webnet_test, wenbet test); +MSH_CMD_EXPORT(webnet_start, wenbet test); #endif diff --git a/src/wn_module.c b/src/wn_module.c index e0493c7..d498241 100644 --- a/src/wn_module.c +++ b/src/wn_module.c @@ -494,6 +494,7 @@ int webnet_module_handle_event(struct webnet_session *session, int event) static const char *default_files[] = { "", + "deviceinfo.asp", "/index.html", "/index.htm", NULL diff --git a/webnet/chart.html b/webnet/chart.html new file mode 100644 index 0000000..480caf2 --- /dev/null +++ b/webnet/chart.html @@ -0,0 +1,153 @@ + + + + + + + + + + + + xidatong web server set page + + + + + + + + + + + + + + + + + + + +
+
+ +
+

数据显示

+
+ +
+
+
+
+ + + diff --git a/webnet/css/layout.css b/webnet/css/layout.css new file mode 100644 index 0000000..fa46998 --- /dev/null +++ b/webnet/css/layout.css @@ -0,0 +1,131 @@ +/* + * Base structure + */ + +/* Move down content because we have a fixed navbar that is 50px tall */ +body { + padding-top: 50px; +} + + +/* + * Global add-ons + */ + +.sub-header { + padding-bottom: 10px; + border-bottom: 1px solid #eee; +} + +/* + * Top navigation + * Hide default border to remove 1px line. + */ +.navbar-fixed-top { + border: 0; +} + +/* + * Sidebar + */ + +/* Hide for mobile, show later */ +.sidebar { + display: none; +} +@media (min-width: 768px) { + .sidebar { + position: fixed; + top: 51px; + bottom: 0; + left: 0; + z-index: 1000; + display: block; + padding: 20px; + overflow-x: hidden; + overflow-y: auto; /* Scrollable contents if viewport is shorter than content. */ + background-color: #f5f5f5; + border-right: 1px solid #eee; + } +} + +/* Sidebar navigation */ +.nav-sidebar { + margin-right: -21px; /* 20px padding + 1px border */ + margin-bottom: 20px; + margin-left: -20px; +} +.nav-sidebar > li > a { + padding-right: 20px; + padding-left: 20px; +} +.nav-sidebar > .active > a, +.nav-sidebar > .active > a:hover, +.nav-sidebar > .active > a:focus { + color: #fff; + background-color: #428bca; +} + +.navbar-brand{ + color: #fff !important; +} + +/* + * Main content + */ + +.main { + padding: 20px; +} +@media (min-width: 768px) { + .main { + padding-right: 40px; + padding-left: 40px; + } +} +.main .page-header { + margin-top: 0; +} + + +/* + * Placeholder dashboard ideas + */ + +.placeholders { + margin-bottom: 30px; + text-align: center; +} +.placeholders h4 { + margin-bottom: 0; +} +.placeholder { + margin-bottom: 20px; +} +.placeholder img { + display: inline-block; + border-radius: 50%; +} + +a{ + color: black; +} + +.nav-sidebar{ + font-size: 25px; + line-height: 2; + margin-top: 25vh; +} + +.nav-tabs .active a{ + color: #428bca !important; +} + +.form-group{ + display: flex; + align-items: center; +} + +.navbar{ + background-color: #428bca; +} \ No newline at end of file diff --git a/webnet/deviceinfo.asp b/webnet/deviceinfo.asp new file mode 100644 index 0000000..3acb30b --- /dev/null +++ b/webnet/deviceinfo.asp @@ -0,0 +1,147 @@ +<%@Language="vbscript" Codepage="65001"%> + + + + + + + + + + + + xidatong web server set page + + + + + + + + + + + + + + + + + +
+
+ +
+

系统设置

+ +
+
+
+ +
+ <% device_name %> +
+
+
+ +
+ <% device_number %> +
+
+
+ +
+ <% device_type %> +
+
+
+ +
+ <% device_serial %> +
+
+
+ +
+ <% os_type %> +
+
+
+ +
+ <% web_version %> +
+
+
+
+
+
+
+ + diff --git a/webnet/index_origin.html b/webnet/index_origin.html new file mode 100644 index 0000000..5f6f58e --- /dev/null +++ b/webnet/index_origin.html @@ -0,0 +1,29 @@ + + + + xidatong web server set page + + + + +

xidatong web setting

+

+

+

+ �豸��Ϣ +
+

+

+ �������� +

7. Upload File Test

+ �ļ��ϴ�ģ����������ϴ��ļ���ָ����Ŀ¼�������ϴ�����Ŀ¼�µ� /upload Ŀ¼�� +

+
+ + +
+
+ �������ϴ��ļ���Ŀ¼ +

+ + diff --git a/webnet/js/Chart.bundle.min.js b/webnet/js/Chart.bundle.min.js new file mode 100644 index 0000000..55d9eb0 --- /dev/null +++ b/webnet/js/Chart.bundle.min.js @@ -0,0 +1,7 @@ +/*! + * Chart.js v2.9.3 + * https://www.chartjs.org + * (c) 2019 Chart.js Contributors + * Released under the MIT License + */ +!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e():"function"==typeof define&&define.amd?define(e):(t=t||self).Chart=e()}(this,(function(){"use strict";"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self&&self;function t(){throw new Error("Dynamic requires are not currently supported by rollup-plugin-commonjs")}function e(t,e){return t(e={exports:{}},e.exports),e.exports}var n={aliceblue:[240,248,255],antiquewhite:[250,235,215],aqua:[0,255,255],aquamarine:[127,255,212],azure:[240,255,255],beige:[245,245,220],bisque:[255,228,196],black:[0,0,0],blanchedalmond:[255,235,205],blue:[0,0,255],blueviolet:[138,43,226],brown:[165,42,42],burlywood:[222,184,135],cadetblue:[95,158,160],chartreuse:[127,255,0],chocolate:[210,105,30],coral:[255,127,80],cornflowerblue:[100,149,237],cornsilk:[255,248,220],crimson:[220,20,60],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgoldenrod:[184,134,11],darkgray:[169,169,169],darkgreen:[0,100,0],darkgrey:[169,169,169],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkseagreen:[143,188,143],darkslateblue:[72,61,139],darkslategray:[47,79,79],darkslategrey:[47,79,79],darkturquoise:[0,206,209],darkviolet:[148,0,211],deeppink:[255,20,147],deepskyblue:[0,191,255],dimgray:[105,105,105],dimgrey:[105,105,105],dodgerblue:[30,144,255],firebrick:[178,34,34],floralwhite:[255,250,240],forestgreen:[34,139,34],fuchsia:[255,0,255],gainsboro:[220,220,220],ghostwhite:[248,248,255],gold:[255,215,0],goldenrod:[218,165,32],gray:[128,128,128],green:[0,128,0],greenyellow:[173,255,47],grey:[128,128,128],honeydew:[240,255,240],hotpink:[255,105,180],indianred:[205,92,92],indigo:[75,0,130],ivory:[255,255,240],khaki:[240,230,140],lavender:[230,230,250],lavenderblush:[255,240,245],lawngreen:[124,252,0],lemonchiffon:[255,250,205],lightblue:[173,216,230],lightcoral:[240,128,128],lightcyan:[224,255,255],lightgoldenrodyellow:[250,250,210],lightgray:[211,211,211],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightsalmon:[255,160,122],lightseagreen:[32,178,170],lightskyblue:[135,206,250],lightslategray:[119,136,153],lightslategrey:[119,136,153],lightsteelblue:[176,196,222],lightyellow:[255,255,224],lime:[0,255,0],limegreen:[50,205,50],linen:[250,240,230],magenta:[255,0,255],maroon:[128,0,0],mediumaquamarine:[102,205,170],mediumblue:[0,0,205],mediumorchid:[186,85,211],mediumpurple:[147,112,219],mediumseagreen:[60,179,113],mediumslateblue:[123,104,238],mediumspringgreen:[0,250,154],mediumturquoise:[72,209,204],mediumvioletred:[199,21,133],midnightblue:[25,25,112],mintcream:[245,255,250],mistyrose:[255,228,225],moccasin:[255,228,181],navajowhite:[255,222,173],navy:[0,0,128],oldlace:[253,245,230],olive:[128,128,0],olivedrab:[107,142,35],orange:[255,165,0],orangered:[255,69,0],orchid:[218,112,214],palegoldenrod:[238,232,170],palegreen:[152,251,152],paleturquoise:[175,238,238],palevioletred:[219,112,147],papayawhip:[255,239,213],peachpuff:[255,218,185],peru:[205,133,63],pink:[255,192,203],plum:[221,160,221],powderblue:[176,224,230],purple:[128,0,128],rebeccapurple:[102,51,153],red:[255,0,0],rosybrown:[188,143,143],royalblue:[65,105,225],saddlebrown:[139,69,19],salmon:[250,128,114],sandybrown:[244,164,96],seagreen:[46,139,87],seashell:[255,245,238],sienna:[160,82,45],silver:[192,192,192],skyblue:[135,206,235],slateblue:[106,90,205],slategray:[112,128,144],slategrey:[112,128,144],snow:[255,250,250],springgreen:[0,255,127],steelblue:[70,130,180],tan:[210,180,140],teal:[0,128,128],thistle:[216,191,216],tomato:[255,99,71],turquoise:[64,224,208],violet:[238,130,238],wheat:[245,222,179],white:[255,255,255],whitesmoke:[245,245,245],yellow:[255,255,0],yellowgreen:[154,205,50]},i=e((function(t){var e={};for(var i in n)n.hasOwnProperty(i)&&(e[n[i]]=i);var a=t.exports={rgb:{channels:3,labels:"rgb"},hsl:{channels:3,labels:"hsl"},hsv:{channels:3,labels:"hsv"},hwb:{channels:3,labels:"hwb"},cmyk:{channels:4,labels:"cmyk"},xyz:{channels:3,labels:"xyz"},lab:{channels:3,labels:"lab"},lch:{channels:3,labels:"lch"},hex:{channels:1,labels:["hex"]},keyword:{channels:1,labels:["keyword"]},ansi16:{channels:1,labels:["ansi16"]},ansi256:{channels:1,labels:["ansi256"]},hcg:{channels:3,labels:["h","c","g"]},apple:{channels:3,labels:["r16","g16","b16"]},gray:{channels:1,labels:["gray"]}};for(var r in a)if(a.hasOwnProperty(r)){if(!("channels"in a[r]))throw new Error("missing channels property: "+r);if(!("labels"in a[r]))throw new Error("missing channel labels property: "+r);if(a[r].labels.length!==a[r].channels)throw new Error("channel and label counts mismatch: "+r);var o=a[r].channels,s=a[r].labels;delete a[r].channels,delete a[r].labels,Object.defineProperty(a[r],"channels",{value:o}),Object.defineProperty(a[r],"labels",{value:s})}a.rgb.hsl=function(t){var e,n,i=t[0]/255,a=t[1]/255,r=t[2]/255,o=Math.min(i,a,r),s=Math.max(i,a,r),l=s-o;return s===o?e=0:i===s?e=(a-r)/l:a===s?e=2+(r-i)/l:r===s&&(e=4+(i-a)/l),(e=Math.min(60*e,360))<0&&(e+=360),n=(o+s)/2,[e,100*(s===o?0:n<=.5?l/(s+o):l/(2-s-o)),100*n]},a.rgb.hsv=function(t){var e,n,i,a,r,o=t[0]/255,s=t[1]/255,l=t[2]/255,u=Math.max(o,s,l),d=u-Math.min(o,s,l),h=function(t){return(u-t)/6/d+.5};return 0===d?a=r=0:(r=d/u,e=h(o),n=h(s),i=h(l),o===u?a=i-n:s===u?a=1/3+e-i:l===u&&(a=2/3+n-e),a<0?a+=1:a>1&&(a-=1)),[360*a,100*r,100*u]},a.rgb.hwb=function(t){var e=t[0],n=t[1],i=t[2];return[a.rgb.hsl(t)[0],100*(1/255*Math.min(e,Math.min(n,i))),100*(i=1-1/255*Math.max(e,Math.max(n,i)))]},a.rgb.cmyk=function(t){var e,n=t[0]/255,i=t[1]/255,a=t[2]/255;return[100*((1-n-(e=Math.min(1-n,1-i,1-a)))/(1-e)||0),100*((1-i-e)/(1-e)||0),100*((1-a-e)/(1-e)||0),100*e]},a.rgb.keyword=function(t){var i=e[t];if(i)return i;var a,r,o,s=1/0;for(var l in n)if(n.hasOwnProperty(l)){var u=n[l],d=(r=t,o=u,Math.pow(r[0]-o[0],2)+Math.pow(r[1]-o[1],2)+Math.pow(r[2]-o[2],2));d.04045?Math.pow((e+.055)/1.055,2.4):e/12.92)+.3576*(n=n>.04045?Math.pow((n+.055)/1.055,2.4):n/12.92)+.1805*(i=i>.04045?Math.pow((i+.055)/1.055,2.4):i/12.92)),100*(.2126*e+.7152*n+.0722*i),100*(.0193*e+.1192*n+.9505*i)]},a.rgb.lab=function(t){var e=a.rgb.xyz(t),n=e[0],i=e[1],r=e[2];return i/=100,r/=108.883,n=(n/=95.047)>.008856?Math.pow(n,1/3):7.787*n+16/116,[116*(i=i>.008856?Math.pow(i,1/3):7.787*i+16/116)-16,500*(n-i),200*(i-(r=r>.008856?Math.pow(r,1/3):7.787*r+16/116))]},a.hsl.rgb=function(t){var e,n,i,a,r,o=t[0]/360,s=t[1]/100,l=t[2]/100;if(0===s)return[r=255*l,r,r];e=2*l-(n=l<.5?l*(1+s):l+s-l*s),a=[0,0,0];for(var u=0;u<3;u++)(i=o+1/3*-(u-1))<0&&i++,i>1&&i--,r=6*i<1?e+6*(n-e)*i:2*i<1?n:3*i<2?e+(n-e)*(2/3-i)*6:e,a[u]=255*r;return a},a.hsl.hsv=function(t){var e=t[0],n=t[1]/100,i=t[2]/100,a=n,r=Math.max(i,.01);return n*=(i*=2)<=1?i:2-i,a*=r<=1?r:2-r,[e,100*(0===i?2*a/(r+a):2*n/(i+n)),100*((i+n)/2)]},a.hsv.rgb=function(t){var e=t[0]/60,n=t[1]/100,i=t[2]/100,a=Math.floor(e)%6,r=e-Math.floor(e),o=255*i*(1-n),s=255*i*(1-n*r),l=255*i*(1-n*(1-r));switch(i*=255,a){case 0:return[i,l,o];case 1:return[s,i,o];case 2:return[o,i,l];case 3:return[o,s,i];case 4:return[l,o,i];case 5:return[i,o,s]}},a.hsv.hsl=function(t){var e,n,i,a=t[0],r=t[1]/100,o=t[2]/100,s=Math.max(o,.01);return i=(2-r)*o,n=r*s,[a,100*(n=(n/=(e=(2-r)*s)<=1?e:2-e)||0),100*(i/=2)]},a.hwb.rgb=function(t){var e,n,i,a,r,o,s,l=t[0]/360,u=t[1]/100,d=t[2]/100,h=u+d;switch(h>1&&(u/=h,d/=h),i=6*l-(e=Math.floor(6*l)),0!=(1&e)&&(i=1-i),a=u+i*((n=1-d)-u),e){default:case 6:case 0:r=n,o=a,s=u;break;case 1:r=a,o=n,s=u;break;case 2:r=u,o=n,s=a;break;case 3:r=u,o=a,s=n;break;case 4:r=a,o=u,s=n;break;case 5:r=n,o=u,s=a}return[255*r,255*o,255*s]},a.cmyk.rgb=function(t){var e=t[0]/100,n=t[1]/100,i=t[2]/100,a=t[3]/100;return[255*(1-Math.min(1,e*(1-a)+a)),255*(1-Math.min(1,n*(1-a)+a)),255*(1-Math.min(1,i*(1-a)+a))]},a.xyz.rgb=function(t){var e,n,i,a=t[0]/100,r=t[1]/100,o=t[2]/100;return n=-.9689*a+1.8758*r+.0415*o,i=.0557*a+-.204*r+1.057*o,e=(e=3.2406*a+-1.5372*r+-.4986*o)>.0031308?1.055*Math.pow(e,1/2.4)-.055:12.92*e,n=n>.0031308?1.055*Math.pow(n,1/2.4)-.055:12.92*n,i=i>.0031308?1.055*Math.pow(i,1/2.4)-.055:12.92*i,[255*(e=Math.min(Math.max(0,e),1)),255*(n=Math.min(Math.max(0,n),1)),255*(i=Math.min(Math.max(0,i),1))]},a.xyz.lab=function(t){var e=t[0],n=t[1],i=t[2];return n/=100,i/=108.883,e=(e/=95.047)>.008856?Math.pow(e,1/3):7.787*e+16/116,[116*(n=n>.008856?Math.pow(n,1/3):7.787*n+16/116)-16,500*(e-n),200*(n-(i=i>.008856?Math.pow(i,1/3):7.787*i+16/116))]},a.lab.xyz=function(t){var e,n,i,a=t[0];e=t[1]/500+(n=(a+16)/116),i=n-t[2]/200;var r=Math.pow(n,3),o=Math.pow(e,3),s=Math.pow(i,3);return n=r>.008856?r:(n-16/116)/7.787,e=o>.008856?o:(e-16/116)/7.787,i=s>.008856?s:(i-16/116)/7.787,[e*=95.047,n*=100,i*=108.883]},a.lab.lch=function(t){var e,n=t[0],i=t[1],a=t[2];return(e=360*Math.atan2(a,i)/2/Math.PI)<0&&(e+=360),[n,Math.sqrt(i*i+a*a),e]},a.lch.lab=function(t){var e,n=t[0],i=t[1];return e=t[2]/360*2*Math.PI,[n,i*Math.cos(e),i*Math.sin(e)]},a.rgb.ansi16=function(t){var e=t[0],n=t[1],i=t[2],r=1 in arguments?arguments[1]:a.rgb.hsv(t)[2];if(0===(r=Math.round(r/50)))return 30;var o=30+(Math.round(i/255)<<2|Math.round(n/255)<<1|Math.round(e/255));return 2===r&&(o+=60),o},a.hsv.ansi16=function(t){return a.rgb.ansi16(a.hsv.rgb(t),t[2])},a.rgb.ansi256=function(t){var e=t[0],n=t[1],i=t[2];return e===n&&n===i?e<8?16:e>248?231:Math.round((e-8)/247*24)+232:16+36*Math.round(e/255*5)+6*Math.round(n/255*5)+Math.round(i/255*5)},a.ansi16.rgb=function(t){var e=t%10;if(0===e||7===e)return t>50&&(e+=3.5),[e=e/10.5*255,e,e];var n=.5*(1+~~(t>50));return[(1&e)*n*255,(e>>1&1)*n*255,(e>>2&1)*n*255]},a.ansi256.rgb=function(t){if(t>=232){var e=10*(t-232)+8;return[e,e,e]}var n;return t-=16,[Math.floor(t/36)/5*255,Math.floor((n=t%36)/6)/5*255,n%6/5*255]},a.rgb.hex=function(t){var e=(((255&Math.round(t[0]))<<16)+((255&Math.round(t[1]))<<8)+(255&Math.round(t[2]))).toString(16).toUpperCase();return"000000".substring(e.length)+e},a.hex.rgb=function(t){var e=t.toString(16).match(/[a-f0-9]{6}|[a-f0-9]{3}/i);if(!e)return[0,0,0];var n=e[0];3===e[0].length&&(n=n.split("").map((function(t){return t+t})).join(""));var i=parseInt(n,16);return[i>>16&255,i>>8&255,255&i]},a.rgb.hcg=function(t){var e,n=t[0]/255,i=t[1]/255,a=t[2]/255,r=Math.max(Math.max(n,i),a),o=Math.min(Math.min(n,i),a),s=r-o;return e=s<=0?0:r===n?(i-a)/s%6:r===i?2+(a-n)/s:4+(n-i)/s+4,e/=6,[360*(e%=1),100*s,100*(s<1?o/(1-s):0)]},a.hsl.hcg=function(t){var e=t[1]/100,n=t[2]/100,i=1,a=0;return(i=n<.5?2*e*n:2*e*(1-n))<1&&(a=(n-.5*i)/(1-i)),[t[0],100*i,100*a]},a.hsv.hcg=function(t){var e=t[1]/100,n=t[2]/100,i=e*n,a=0;return i<1&&(a=(n-i)/(1-i)),[t[0],100*i,100*a]},a.hcg.rgb=function(t){var e=t[0]/360,n=t[1]/100,i=t[2]/100;if(0===n)return[255*i,255*i,255*i];var a,r=[0,0,0],o=e%1*6,s=o%1,l=1-s;switch(Math.floor(o)){case 0:r[0]=1,r[1]=s,r[2]=0;break;case 1:r[0]=l,r[1]=1,r[2]=0;break;case 2:r[0]=0,r[1]=1,r[2]=s;break;case 3:r[0]=0,r[1]=l,r[2]=1;break;case 4:r[0]=s,r[1]=0,r[2]=1;break;default:r[0]=1,r[1]=0,r[2]=l}return a=(1-n)*i,[255*(n*r[0]+a),255*(n*r[1]+a),255*(n*r[2]+a)]},a.hcg.hsv=function(t){var e=t[1]/100,n=e+t[2]/100*(1-e),i=0;return n>0&&(i=e/n),[t[0],100*i,100*n]},a.hcg.hsl=function(t){var e=t[1]/100,n=t[2]/100*(1-e)+.5*e,i=0;return n>0&&n<.5?i=e/(2*n):n>=.5&&n<1&&(i=e/(2*(1-n))),[t[0],100*i,100*n]},a.hcg.hwb=function(t){var e=t[1]/100,n=e+t[2]/100*(1-e);return[t[0],100*(n-e),100*(1-n)]},a.hwb.hcg=function(t){var e=t[1]/100,n=1-t[2]/100,i=n-e,a=0;return i<1&&(a=(n-i)/(1-i)),[t[0],100*i,100*a]},a.apple.rgb=function(t){return[t[0]/65535*255,t[1]/65535*255,t[2]/65535*255]},a.rgb.apple=function(t){return[t[0]/255*65535,t[1]/255*65535,t[2]/255*65535]},a.gray.rgb=function(t){return[t[0]/100*255,t[0]/100*255,t[0]/100*255]},a.gray.hsl=a.gray.hsv=function(t){return[0,0,t[0]]},a.gray.hwb=function(t){return[0,100,t[0]]},a.gray.cmyk=function(t){return[0,0,0,t[0]]},a.gray.lab=function(t){return[t[0],0,0]},a.gray.hex=function(t){var e=255&Math.round(t[0]/100*255),n=((e<<16)+(e<<8)+e).toString(16).toUpperCase();return"000000".substring(n.length)+n},a.rgb.gray=function(t){return[(t[0]+t[1]+t[2])/3/255*100]}}));i.rgb,i.hsl,i.hsv,i.hwb,i.cmyk,i.xyz,i.lab,i.lch,i.hex,i.keyword,i.ansi16,i.ansi256,i.hcg,i.apple,i.gray;function a(t){var e=function(){for(var t={},e=Object.keys(i),n=e.length,a=0;a1&&(e=Array.prototype.slice.call(arguments));var n=t(e);if("object"==typeof n)for(var i=n.length,a=0;a1&&(e=Array.prototype.slice.call(arguments)),t(e))};return"conversion"in t&&(e.conversion=t.conversion),e}(i)}))}));var l=s,u={aliceblue:[240,248,255],antiquewhite:[250,235,215],aqua:[0,255,255],aquamarine:[127,255,212],azure:[240,255,255],beige:[245,245,220],bisque:[255,228,196],black:[0,0,0],blanchedalmond:[255,235,205],blue:[0,0,255],blueviolet:[138,43,226],brown:[165,42,42],burlywood:[222,184,135],cadetblue:[95,158,160],chartreuse:[127,255,0],chocolate:[210,105,30],coral:[255,127,80],cornflowerblue:[100,149,237],cornsilk:[255,248,220],crimson:[220,20,60],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgoldenrod:[184,134,11],darkgray:[169,169,169],darkgreen:[0,100,0],darkgrey:[169,169,169],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkseagreen:[143,188,143],darkslateblue:[72,61,139],darkslategray:[47,79,79],darkslategrey:[47,79,79],darkturquoise:[0,206,209],darkviolet:[148,0,211],deeppink:[255,20,147],deepskyblue:[0,191,255],dimgray:[105,105,105],dimgrey:[105,105,105],dodgerblue:[30,144,255],firebrick:[178,34,34],floralwhite:[255,250,240],forestgreen:[34,139,34],fuchsia:[255,0,255],gainsboro:[220,220,220],ghostwhite:[248,248,255],gold:[255,215,0],goldenrod:[218,165,32],gray:[128,128,128],green:[0,128,0],greenyellow:[173,255,47],grey:[128,128,128],honeydew:[240,255,240],hotpink:[255,105,180],indianred:[205,92,92],indigo:[75,0,130],ivory:[255,255,240],khaki:[240,230,140],lavender:[230,230,250],lavenderblush:[255,240,245],lawngreen:[124,252,0],lemonchiffon:[255,250,205],lightblue:[173,216,230],lightcoral:[240,128,128],lightcyan:[224,255,255],lightgoldenrodyellow:[250,250,210],lightgray:[211,211,211],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightsalmon:[255,160,122],lightseagreen:[32,178,170],lightskyblue:[135,206,250],lightslategray:[119,136,153],lightslategrey:[119,136,153],lightsteelblue:[176,196,222],lightyellow:[255,255,224],lime:[0,255,0],limegreen:[50,205,50],linen:[250,240,230],magenta:[255,0,255],maroon:[128,0,0],mediumaquamarine:[102,205,170],mediumblue:[0,0,205],mediumorchid:[186,85,211],mediumpurple:[147,112,219],mediumseagreen:[60,179,113],mediumslateblue:[123,104,238],mediumspringgreen:[0,250,154],mediumturquoise:[72,209,204],mediumvioletred:[199,21,133],midnightblue:[25,25,112],mintcream:[245,255,250],mistyrose:[255,228,225],moccasin:[255,228,181],navajowhite:[255,222,173],navy:[0,0,128],oldlace:[253,245,230],olive:[128,128,0],olivedrab:[107,142,35],orange:[255,165,0],orangered:[255,69,0],orchid:[218,112,214],palegoldenrod:[238,232,170],palegreen:[152,251,152],paleturquoise:[175,238,238],palevioletred:[219,112,147],papayawhip:[255,239,213],peachpuff:[255,218,185],peru:[205,133,63],pink:[255,192,203],plum:[221,160,221],powderblue:[176,224,230],purple:[128,0,128],rebeccapurple:[102,51,153],red:[255,0,0],rosybrown:[188,143,143],royalblue:[65,105,225],saddlebrown:[139,69,19],salmon:[250,128,114],sandybrown:[244,164,96],seagreen:[46,139,87],seashell:[255,245,238],sienna:[160,82,45],silver:[192,192,192],skyblue:[135,206,235],slateblue:[106,90,205],slategray:[112,128,144],slategrey:[112,128,144],snow:[255,250,250],springgreen:[0,255,127],steelblue:[70,130,180],tan:[210,180,140],teal:[0,128,128],thistle:[216,191,216],tomato:[255,99,71],turquoise:[64,224,208],violet:[238,130,238],wheat:[245,222,179],white:[255,255,255],whitesmoke:[245,245,245],yellow:[255,255,0],yellowgreen:[154,205,50]},d={getRgba:h,getHsla:c,getRgb:function(t){var e=h(t);return e&&e.slice(0,3)},getHsl:function(t){var e=c(t);return e&&e.slice(0,3)},getHwb:f,getAlpha:function(t){var e=h(t);if(e)return e[3];if(e=c(t))return e[3];if(e=f(t))return e[3]},hexString:function(t,e){e=void 0!==e&&3===t.length?e:t[3];return"#"+b(t[0])+b(t[1])+b(t[2])+(e>=0&&e<1?b(Math.round(255*e)):"")},rgbString:function(t,e){if(e<1||t[3]&&t[3]<1)return g(t,e);return"rgb("+t[0]+", "+t[1]+", "+t[2]+")"},rgbaString:g,percentString:function(t,e){if(e<1||t[3]&&t[3]<1)return m(t,e);var n=Math.round(t[0]/255*100),i=Math.round(t[1]/255*100),a=Math.round(t[2]/255*100);return"rgb("+n+"%, "+i+"%, "+a+"%)"},percentaString:m,hslString:function(t,e){if(e<1||t[3]&&t[3]<1)return p(t,e);return"hsl("+t[0]+", "+t[1]+"%, "+t[2]+"%)"},hslaString:p,hwbString:function(t,e){void 0===e&&(e=void 0!==t[3]?t[3]:1);return"hwb("+t[0]+", "+t[1]+"%, "+t[2]+"%"+(void 0!==e&&1!==e?", "+e:"")+")"},keyword:function(t){return y[t.slice(0,3)]}};function h(t){if(t){var e=[0,0,0],n=1,i=t.match(/^#([a-fA-F0-9]{3,4})$/i),a="";if(i){a=(i=i[1])[3];for(var r=0;rn?(e+.05)/(n+.05):(n+.05)/(e+.05)},level:function(t){var e=this.contrast(t);return e>=7.1?"AAA":e>=4.5?"AA":""},dark:function(){var t=this.values.rgb;return(299*t[0]+587*t[1]+114*t[2])/1e3<128},light:function(){return!this.dark()},negate:function(){for(var t=[],e=0;e<3;e++)t[e]=255-this.values.rgb[e];return this.setValues("rgb",t),this},lighten:function(t){var e=this.values.hsl;return e[2]+=e[2]*t,this.setValues("hsl",e),this},darken:function(t){var e=this.values.hsl;return e[2]-=e[2]*t,this.setValues("hsl",e),this},saturate:function(t){var e=this.values.hsl;return e[1]+=e[1]*t,this.setValues("hsl",e),this},desaturate:function(t){var e=this.values.hsl;return e[1]-=e[1]*t,this.setValues("hsl",e),this},whiten:function(t){var e=this.values.hwb;return e[1]+=e[1]*t,this.setValues("hwb",e),this},blacken:function(t){var e=this.values.hwb;return e[2]+=e[2]*t,this.setValues("hwb",e),this},greyscale:function(){var t=this.values.rgb,e=.3*t[0]+.59*t[1]+.11*t[2];return this.setValues("rgb",[e,e,e]),this},clearer:function(t){var e=this.values.alpha;return this.setValues("alpha",e-e*t),this},opaquer:function(t){var e=this.values.alpha;return this.setValues("alpha",e+e*t),this},rotate:function(t){var e=this.values.hsl,n=(e[0]+t)%360;return e[0]=n<0?360+n:n,this.setValues("hsl",e),this},mix:function(t,e){var n=t,i=void 0===e?.5:e,a=2*i-1,r=this.alpha()-n.alpha(),o=((a*r==-1?a:(a+r)/(1+a*r))+1)/2,s=1-o;return this.rgb(o*this.red()+s*n.red(),o*this.green()+s*n.green(),o*this.blue()+s*n.blue()).alpha(this.alpha()*i+n.alpha()*(1-i))},toJSON:function(){return this.rgb()},clone:function(){var t,e,n=new _,i=this.values,a=n.values;for(var r in i)i.hasOwnProperty(r)&&(t=i[r],"[object Array]"===(e={}.toString.call(t))?a[r]=t.slice(0):"[object Number]"===e?a[r]=t:console.error("unexpected color value:",t));return n}},_.prototype.spaces={rgb:["red","green","blue"],hsl:["hue","saturation","lightness"],hsv:["hue","saturation","value"],hwb:["hue","whiteness","blackness"],cmyk:["cyan","magenta","yellow","black"]},_.prototype.maxes={rgb:[255,255,255],hsl:[360,100,100],hsv:[360,100,100],hwb:[360,100,100],cmyk:[100,100,100,100]},_.prototype.getValues=function(t){for(var e=this.values,n={},i=0;i=0;a--)e.call(n,t[a],a);else for(a=0;a=1?t:-(Math.sqrt(1-t*t)-1)},easeOutCirc:function(t){return Math.sqrt(1-(t-=1)*t)},easeInOutCirc:function(t){return(t/=.5)<1?-.5*(Math.sqrt(1-t*t)-1):.5*(Math.sqrt(1-(t-=2)*t)+1)},easeInElastic:function(t){var e=1.70158,n=0,i=1;return 0===t?0:1===t?1:(n||(n=.3),i<1?(i=1,e=n/4):e=n/(2*Math.PI)*Math.asin(1/i),-i*Math.pow(2,10*(t-=1))*Math.sin((t-e)*(2*Math.PI)/n))},easeOutElastic:function(t){var e=1.70158,n=0,i=1;return 0===t?0:1===t?1:(n||(n=.3),i<1?(i=1,e=n/4):e=n/(2*Math.PI)*Math.asin(1/i),i*Math.pow(2,-10*t)*Math.sin((t-e)*(2*Math.PI)/n)+1)},easeInOutElastic:function(t){var e=1.70158,n=0,i=1;return 0===t?0:2==(t/=.5)?1:(n||(n=.45),i<1?(i=1,e=n/4):e=n/(2*Math.PI)*Math.asin(1/i),t<1?i*Math.pow(2,10*(t-=1))*Math.sin((t-e)*(2*Math.PI)/n)*-.5:i*Math.pow(2,-10*(t-=1))*Math.sin((t-e)*(2*Math.PI)/n)*.5+1)},easeInBack:function(t){var e=1.70158;return t*t*((e+1)*t-e)},easeOutBack:function(t){var e=1.70158;return(t-=1)*t*((e+1)*t+e)+1},easeInOutBack:function(t){var e=1.70158;return(t/=.5)<1?t*t*((1+(e*=1.525))*t-e)*.5:.5*((t-=2)*t*((1+(e*=1.525))*t+e)+2)},easeInBounce:function(t){return 1-D.easeOutBounce(1-t)},easeOutBounce:function(t){return t<1/2.75?7.5625*t*t:t<2/2.75?7.5625*(t-=1.5/2.75)*t+.75:t<2.5/2.75?7.5625*(t-=2.25/2.75)*t+.9375:7.5625*(t-=2.625/2.75)*t+.984375},easeInOutBounce:function(t){return t<.5?.5*D.easeInBounce(2*t):.5*D.easeOutBounce(2*t-1)+.5}},C={effects:D};S.easingEffects=D;var P=Math.PI,T=P/180,O=2*P,A=P/2,F=P/4,I=2*P/3,L={clear:function(t){t.ctx.clearRect(0,0,t.width,t.height)},roundedRect:function(t,e,n,i,a,r){if(r){var o=Math.min(r,a/2,i/2),s=e+o,l=n+o,u=e+i-o,d=n+a-o;t.moveTo(e,l),se.left-1e-6&&t.xe.top-1e-6&&t.y0&&this.requestAnimationFrame()},advance:function(){for(var t,e,n,i,a=this.animations,r=0;r=n?(H.callback(t.onAnimationComplete,[t],e),e.animating=!1,a.splice(r,1)):++r}},Q=H.options.resolve,tt=["push","pop","shift","splice","unshift"];function et(t,e){var n=t._chartjs;if(n){var i=n.listeners,a=i.indexOf(e);-1!==a&&i.splice(a,1),i.length>0||(tt.forEach((function(e){delete t[e]})),delete t._chartjs)}}var nt=function(t,e){this.initialize(t,e)};H.extend(nt.prototype,{datasetElementType:null,dataElementType:null,_datasetElementOptions:["backgroundColor","borderCapStyle","borderColor","borderDash","borderDashOffset","borderJoinStyle","borderWidth"],_dataElementOptions:["backgroundColor","borderColor","borderWidth","pointStyle"],initialize:function(t,e){var n=this;n.chart=t,n.index=e,n.linkScales(),n.addElements(),n._type=n.getMeta().type},updateIndex:function(t){this.index=t},linkScales:function(){var t=this.getMeta(),e=this.chart,n=e.scales,i=this.getDataset(),a=e.options.scales;null!==t.xAxisID&&t.xAxisID in n&&!i.xAxisID||(t.xAxisID=i.xAxisID||a.xAxes[0].id),null!==t.yAxisID&&t.yAxisID in n&&!i.yAxisID||(t.yAxisID=i.yAxisID||a.yAxes[0].id)},getDataset:function(){return this.chart.data.datasets[this.index]},getMeta:function(){return this.chart.getDatasetMeta(this.index)},getScaleForId:function(t){return this.chart.scales[t]},_getValueScaleId:function(){return this.getMeta().yAxisID},_getIndexScaleId:function(){return this.getMeta().xAxisID},_getValueScale:function(){return this.getScaleForId(this._getValueScaleId())},_getIndexScale:function(){return this.getScaleForId(this._getIndexScaleId())},reset:function(){this._update(!0)},destroy:function(){this._data&&et(this._data,this)},createMetaDataset:function(){var t=this.datasetElementType;return t&&new t({_chart:this.chart,_datasetIndex:this.index})},createMetaData:function(t){var e=this.dataElementType;return e&&new e({_chart:this.chart,_datasetIndex:this.index,_index:t})},addElements:function(){var t,e,n=this.getMeta(),i=this.getDataset().data||[],a=n.data;for(t=0,e=i.length;tn&&this.insertElements(n,i-n)},insertElements:function(t,e){for(var n=0;na?(r=a/e.innerRadius,t.arc(o,s,e.innerRadius-a,i+r,n-r,!0)):t.arc(o,s,a,i+Math.PI/2,n-Math.PI/2),t.closePath(),t.clip()}function ot(t,e,n){var i="inner"===e.borderAlign;i?(t.lineWidth=2*e.borderWidth,t.lineJoin="round"):(t.lineWidth=e.borderWidth,t.lineJoin="bevel"),n.fullCircles&&function(t,e,n,i){var a,r=n.endAngle;for(i&&(n.endAngle=n.startAngle+at,rt(t,n),n.endAngle=r,n.endAngle===n.startAngle&&n.fullCircles&&(n.endAngle+=at,n.fullCircles--)),t.beginPath(),t.arc(n.x,n.y,n.innerRadius,n.startAngle+at,n.startAngle,!0),a=0;as;)a-=at;for(;a=o&&a<=s,u=r>=n.innerRadius&&r<=n.outerRadius;return l&&u}return!1},getCenterPoint:function(){var t=this._view,e=(t.startAngle+t.endAngle)/2,n=(t.innerRadius+t.outerRadius)/2;return{x:t.x+Math.cos(e)*n,y:t.y+Math.sin(e)*n}},getArea:function(){var t=this._view;return Math.PI*((t.endAngle-t.startAngle)/(2*Math.PI))*(Math.pow(t.outerRadius,2)-Math.pow(t.innerRadius,2))},tooltipPosition:function(){var t=this._view,e=t.startAngle+(t.endAngle-t.startAngle)/2,n=(t.outerRadius-t.innerRadius)/2+t.innerRadius;return{x:t.x+Math.cos(e)*n,y:t.y+Math.sin(e)*n}},draw:function(){var t,e=this._chart.ctx,n=this._view,i="inner"===n.borderAlign?.33:0,a={x:n.x,y:n.y,innerRadius:n.innerRadius,outerRadius:Math.max(n.outerRadius-i,0),pixelMargin:i,startAngle:n.startAngle,endAngle:n.endAngle,fullCircles:Math.floor(n.circumference/at)};if(e.save(),e.fillStyle=n.backgroundColor,e.strokeStyle=n.borderColor,a.fullCircles){for(a.endAngle=a.startAngle+at,e.beginPath(),e.arc(a.x,a.y,a.outerRadius,a.startAngle,a.endAngle),e.arc(a.x,a.y,a.innerRadius,a.endAngle,a.startAngle,!0),e.closePath(),t=0;tt.x&&(e=bt(e,"left","right")):t.basen?n:i,r:l.right||a<0?0:a>e?e:a,b:l.bottom||r<0?0:r>n?n:r,l:l.left||o<0?0:o>e?e:o}}function xt(t,e,n){var i=null===e,a=null===n,r=!(!t||i&&a)&&vt(t);return r&&(i||e>=r.left&&e<=r.right)&&(a||n>=r.top&&n<=r.bottom)}W._set("global",{elements:{rectangle:{backgroundColor:mt,borderColor:mt,borderSkipped:"bottom",borderWidth:0}}});var _t=$.extend({_type:"rectangle",draw:function(){var t=this._chart.ctx,e=this._view,n=function(t){var e=vt(t),n=e.right-e.left,i=e.bottom-e.top,a=yt(t,n/2,i/2);return{outer:{x:e.left,y:e.top,w:n,h:i},inner:{x:e.left+a.l,y:e.top+a.t,w:n-a.l-a.r,h:i-a.t-a.b}}}(e),i=n.outer,a=n.inner;t.fillStyle=e.backgroundColor,t.fillRect(i.x,i.y,i.w,i.h),i.w===a.w&&i.h===a.h||(t.save(),t.beginPath(),t.rect(i.x,i.y,i.w,i.h),t.clip(),t.fillStyle=e.borderColor,t.rect(a.x,a.y,a.w,a.h),t.fill("evenodd"),t.restore())},height:function(){var t=this._view;return t.base-t.y},inRange:function(t,e){return xt(this._view,t,e)},inLabelRange:function(t,e){var n=this._view;return pt(n)?xt(n,t,null):xt(n,null,e)},inXRange:function(t){return xt(this._view,t,null)},inYRange:function(t){return xt(this._view,null,t)},getCenterPoint:function(){var t,e,n=this._view;return pt(n)?(t=n.x,e=(n.y+n.base)/2):(t=(n.x+n.base)/2,e=n.y),{x:t,y:e}},getArea:function(){var t=this._view;return pt(t)?t.width*Math.abs(t.y-t.base):t.height*Math.abs(t.x-t.base)},tooltipPosition:function(){var t=this._view;return{x:t.x,y:t.y}}}),wt={},kt=st,Mt=dt,St=gt,Dt=_t;wt.Arc=kt,wt.Line=Mt,wt.Point=St,wt.Rectangle=Dt;var Ct=H._deprecated,Pt=H.valueOrDefault;function Tt(t,e,n){var i,a,r=n.barThickness,o=e.stackCount,s=e.pixels[t],l=H.isNullOrUndef(r)?function(t,e){var n,i,a,r,o=t._length;for(a=1,r=e.length;a0?Math.min(o,Math.abs(i-n)):o,n=i;return o}(e.scale,e.pixels):-1;return H.isNullOrUndef(r)?(i=l*n.categoryPercentage,a=n.barPercentage):(i=r*o,a=1),{chunk:i/o,ratio:a,start:s-i/2}}W._set("bar",{hover:{mode:"label"},scales:{xAxes:[{type:"category",offset:!0,gridLines:{offsetGridLines:!0}}],yAxes:[{type:"linear"}]}}),W._set("global",{datasets:{bar:{categoryPercentage:.8,barPercentage:.9}}});var Ot=it.extend({dataElementType:wt.Rectangle,_dataElementOptions:["backgroundColor","borderColor","borderSkipped","borderWidth","barPercentage","barThickness","categoryPercentage","maxBarThickness","minBarLength"],initialize:function(){var t,e,n=this;it.prototype.initialize.apply(n,arguments),(t=n.getMeta()).stack=n.getDataset().stack,t.bar=!0,e=n._getIndexScale().options,Ct("bar chart",e.barPercentage,"scales.[x/y]Axes.barPercentage","dataset.barPercentage"),Ct("bar chart",e.barThickness,"scales.[x/y]Axes.barThickness","dataset.barThickness"),Ct("bar chart",e.categoryPercentage,"scales.[x/y]Axes.categoryPercentage","dataset.categoryPercentage"),Ct("bar chart",n._getValueScale().options.minBarLength,"scales.[x/y]Axes.minBarLength","dataset.minBarLength"),Ct("bar chart",e.maxBarThickness,"scales.[x/y]Axes.maxBarThickness","dataset.maxBarThickness")},update:function(t){var e,n,i=this.getMeta().data;for(this._ruler=this.getRuler(),e=0,n=i.length;e=0&&m.min>=0?m.min:m.max,x=void 0===m.start?m.end:m.max>=0&&m.min>=0?m.max-m.min:m.min-m.max,_=g.length;if(v||void 0===v&&void 0!==b)for(i=0;i<_&&(a=g[i]).index!==t;++i)a.stack===b&&(r=void 0===(u=h._parseValue(f[a.index].data[e])).start?u.end:u.min>=0&&u.max>=0?u.max:u.min,(m.min<0&&r<0||m.max>=0&&r>0)&&(y+=r));return o=h.getPixelForValue(y),l=(s=h.getPixelForValue(y+x))-o,void 0!==p&&Math.abs(l)=0&&!c||x<0&&c?o-p:o+p),{size:l,base:o,head:s,center:s+l/2}},calculateBarIndexPixels:function(t,e,n,i){var a="flex"===i.barThickness?function(t,e,n){var i,a=e.pixels,r=a[t],o=t>0?a[t-1]:null,s=t=Rt?-Nt:b<-Rt?Nt:0)+p,x=Math.cos(b),_=Math.sin(b),w=Math.cos(y),k=Math.sin(y),M=b<=0&&y>=0||y>=Nt,S=b<=Wt&&y>=Wt||y>=Nt+Wt,D=b<=-Wt&&y>=-Wt||y>=Rt+Wt,C=b===-Rt||y>=Rt?-1:Math.min(x,x*m,w,w*m),P=D?-1:Math.min(_,_*m,k,k*m),T=M?1:Math.max(x,x*m,w,w*m),O=S?1:Math.max(_,_*m,k,k*m);u=(T-C)/2,d=(O-P)/2,h=-(T+C)/2,c=-(O+P)/2}for(i=0,a=g.length;i0&&!isNaN(t)?Nt*(Math.abs(t)/e):0},getMaxBorderWidth:function(t){var e,n,i,a,r,o,s,l,u=0,d=this.chart;if(!t)for(e=0,n=d.data.datasets.length;e(u=s>u?s:u)?l:u);return u},setHoverStyle:function(t){var e=t._model,n=t._options,i=H.getHoverColor;t.$previousStyle={backgroundColor:e.backgroundColor,borderColor:e.borderColor,borderWidth:e.borderWidth},e.backgroundColor=Lt(n.hoverBackgroundColor,i(n.backgroundColor)),e.borderColor=Lt(n.hoverBorderColor,i(n.borderColor)),e.borderWidth=Lt(n.hoverBorderWidth,n.borderWidth)},_getRingWeightOffset:function(t){for(var e=0,n=0;n0&&Ht(l[t-1]._model,s)&&(n.controlPointPreviousX=u(n.controlPointPreviousX,s.left,s.right),n.controlPointPreviousY=u(n.controlPointPreviousY,s.top,s.bottom)),t0&&(r=t.getDatasetMeta(r[0]._datasetIndex).data),r},"x-axis":function(t,e){return ae(t,e,{intersect:!1})},point:function(t,e){return ee(t,Qt(e,t))},nearest:function(t,e,n){var i=Qt(e,t);n.axis=n.axis||"xy";var a=ie(n.axis);return ne(t,i,n.intersect,a)},x:function(t,e,n){var i=Qt(e,t),a=[],r=!1;return te(t,(function(t){t.inXRange(i.x)&&a.push(t),t.inRange(i.x,i.y)&&(r=!0)})),n.intersect&&!r&&(a=[]),a},y:function(t,e,n){var i=Qt(e,t),a=[],r=!1;return te(t,(function(t){t.inYRange(i.y)&&a.push(t),t.inRange(i.x,i.y)&&(r=!0)})),n.intersect&&!r&&(a=[]),a}}},oe=H.extend;function se(t,e){return H.where(t,(function(t){return t.pos===e}))}function le(t,e){return t.sort((function(t,n){var i=e?n:t,a=e?t:n;return i.weight===a.weight?i.index-a.index:i.weight-a.weight}))}function ue(t,e,n,i){return Math.max(t[n],e[n])+Math.max(t[i],e[i])}function de(t,e,n){var i,a,r=n.box,o=t.maxPadding;if(n.size&&(t[n.pos]-=n.size),n.size=n.horizontal?r.height:r.width,t[n.pos]+=n.size,r.getPadding){var s=r.getPadding();o.top=Math.max(o.top,s.top),o.left=Math.max(o.left,s.left),o.bottom=Math.max(o.bottom,s.bottom),o.right=Math.max(o.right,s.right)}if(i=e.outerWidth-ue(o,t,"left","right"),a=e.outerHeight-ue(o,t,"top","bottom"),i!==t.w||a!==t.h)return t.w=i,t.h=a,n.horizontal?i!==t.w:a!==t.h}function he(t,e){var n=e.maxPadding;function i(t){var i={left:0,top:0,right:0,bottom:0};return t.forEach((function(t){i[t]=Math.max(e[t],n[t])})),i}return i(t?["left","right"]:["top","bottom"])}function ce(t,e,n){var i,a,r,o,s,l,u=[];for(i=0,a=t.length;idiv{position:absolute;width:1000000px;height:1000000px;left:0;top:0}.chartjs-size-monitor-shrink>div{position:absolute;width:200%;height:200%;left:0;top:0}"}))&&ge.default||ge,ve="$chartjs",be="chartjs-size-monitor",ye="chartjs-render-monitor",xe="chartjs-render-animation",_e=["animationstart","webkitAnimationStart"],we={touchstart:"mousedown",touchmove:"mousemove",touchend:"mouseup",pointerenter:"mouseenter",pointerdown:"mousedown",pointermove:"mousemove",pointerup:"mouseup",pointerleave:"mouseout",pointerout:"mouseout"};function ke(t,e){var n=H.getStyle(t,e),i=n&&n.match(/^(\d+)(\.\d+)?px$/);return i?Number(i[1]):void 0}var Me=!!function(){var t=!1;try{var e=Object.defineProperty({},"passive",{get:function(){t=!0}});window.addEventListener("e",null,e)}catch(t){}return t}()&&{passive:!0};function Se(t,e,n){t.addEventListener(e,n,Me)}function De(t,e,n){t.removeEventListener(e,n,Me)}function Ce(t,e,n,i,a){return{type:t,chart:e,native:a||null,x:void 0!==n?n:null,y:void 0!==i?i:null}}function Pe(t){var e=document.createElement("div");return e.className=t||"",e}function Te(t,e,n){var i,a,r,o,s=t[ve]||(t[ve]={}),l=s.resizer=function(t){var e=Pe(be),n=Pe(be+"-expand"),i=Pe(be+"-shrink");n.appendChild(Pe()),i.appendChild(Pe()),e.appendChild(n),e.appendChild(i),e._reset=function(){n.scrollLeft=1e6,n.scrollTop=1e6,i.scrollLeft=1e6,i.scrollTop=1e6};var a=function(){e._reset(),t()};return Se(n,"scroll",a.bind(n,"expand")),Se(i,"scroll",a.bind(i,"shrink")),e}((i=function(){if(s.resizer){var i=n.options.maintainAspectRatio&&t.parentNode,a=i?i.clientWidth:0;e(Ce("resize",n)),i&&i.clientWidth0){var r=t[0];r.label?n=r.label:r.xLabel?n=r.xLabel:a>0&&r.index-1?t.split("\n"):t}function Ve(t){var e=W.global;return{xPadding:t.xPadding,yPadding:t.yPadding,xAlign:t.xAlign,yAlign:t.yAlign,rtl:t.rtl,textDirection:t.textDirection,bodyFontColor:t.bodyFontColor,_bodyFontFamily:Ne(t.bodyFontFamily,e.defaultFontFamily),_bodyFontStyle:Ne(t.bodyFontStyle,e.defaultFontStyle),_bodyAlign:t.bodyAlign,bodyFontSize:Ne(t.bodyFontSize,e.defaultFontSize),bodySpacing:t.bodySpacing,titleFontColor:t.titleFontColor,_titleFontFamily:Ne(t.titleFontFamily,e.defaultFontFamily),_titleFontStyle:Ne(t.titleFontStyle,e.defaultFontStyle),titleFontSize:Ne(t.titleFontSize,e.defaultFontSize),_titleAlign:t.titleAlign,titleSpacing:t.titleSpacing,titleMarginBottom:t.titleMarginBottom,footerFontColor:t.footerFontColor,_footerFontFamily:Ne(t.footerFontFamily,e.defaultFontFamily),_footerFontStyle:Ne(t.footerFontStyle,e.defaultFontStyle),footerFontSize:Ne(t.footerFontSize,e.defaultFontSize),_footerAlign:t.footerAlign,footerSpacing:t.footerSpacing,footerMarginTop:t.footerMarginTop,caretSize:t.caretSize,cornerRadius:t.cornerRadius,backgroundColor:t.backgroundColor,opacity:0,legendColorBackground:t.multiKeyBackground,displayColors:t.displayColors,borderColor:t.borderColor,borderWidth:t.borderWidth}}function He(t,e){return"center"===e?t.x+t.width/2:"right"===e?t.x+t.width-t.xPadding:t.x+t.xPadding}function Be(t){return ze([],Ee(t))}var je=$.extend({initialize:function(){this._model=Ve(this._options),this._lastActive=[]},getTitle:function(){var t=this,e=t._options,n=e.callbacks,i=n.beforeTitle.apply(t,arguments),a=n.title.apply(t,arguments),r=n.afterTitle.apply(t,arguments),o=[];return o=ze(o,Ee(i)),o=ze(o,Ee(a)),o=ze(o,Ee(r))},getBeforeBody:function(){return Be(this._options.callbacks.beforeBody.apply(this,arguments))},getBody:function(t,e){var n=this,i=n._options.callbacks,a=[];return H.each(t,(function(t){var r={before:[],lines:[],after:[]};ze(r.before,Ee(i.beforeLabel.call(n,t,e))),ze(r.lines,i.label.call(n,t,e)),ze(r.after,Ee(i.afterLabel.call(n,t,e))),a.push(r)})),a},getAfterBody:function(){return Be(this._options.callbacks.afterBody.apply(this,arguments))},getFooter:function(){var t=this,e=t._options.callbacks,n=e.beforeFooter.apply(t,arguments),i=e.footer.apply(t,arguments),a=e.afterFooter.apply(t,arguments),r=[];return r=ze(r,Ee(n)),r=ze(r,Ee(i)),r=ze(r,Ee(a))},update:function(t){var e,n,i,a,r,o,s,l,u,d,h=this,c=h._options,f=h._model,g=h._model=Ve(c),m=h._active,p=h._data,v={xAlign:f.xAlign,yAlign:f.yAlign},b={x:f.x,y:f.y},y={width:f.width,height:f.height},x={x:f.caretX,y:f.caretY};if(m.length){g.opacity=1;var _=[],w=[];x=Ye[c.position].call(h,m,h._eventPosition);var k=[];for(e=0,n=m.length;ei.width&&(a=i.width-e.width),a<0&&(a=0)),"top"===d?r+=h:r-="bottom"===d?e.height+h:e.height/2,"center"===d?"left"===u?a+=h:"right"===u&&(a-=h):"left"===u?a-=c:"right"===u&&(a+=c),{x:a,y:r}}(g,y,v=function(t,e){var n,i,a,r,o,s=t._model,l=t._chart,u=t._chart.chartArea,d="center",h="center";s.yl.height-e.height&&(h="bottom");var c=(u.left+u.right)/2,f=(u.top+u.bottom)/2;"center"===h?(n=function(t){return t<=c},i=function(t){return t>c}):(n=function(t){return t<=e.width/2},i=function(t){return t>=l.width-e.width/2}),a=function(t){return t+e.width+s.caretSize+s.caretPadding>l.width},r=function(t){return t-e.width-s.caretSize-s.caretPadding<0},o=function(t){return t<=f?"top":"bottom"},n(s.x)?(d="left",a(s.x)&&(d="center",h=o(s.y))):i(s.x)&&(d="right",r(s.x)&&(d="center",h=o(s.y)));var g=t._options;return{xAlign:g.xAlign?g.xAlign:d,yAlign:g.yAlign?g.yAlign:h}}(this,y),h._chart)}else g.opacity=0;return g.xAlign=v.xAlign,g.yAlign=v.yAlign,g.x=b.x,g.y=b.y,g.width=y.width,g.height=y.height,g.caretX=x.x,g.caretY=x.y,h._model=g,t&&c.custom&&c.custom.call(h,g),h},drawCaret:function(t,e){var n=this._chart.ctx,i=this._view,a=this.getCaretPosition(t,e,i);n.lineTo(a.x1,a.y1),n.lineTo(a.x2,a.y2),n.lineTo(a.x3,a.y3)},getCaretPosition:function(t,e,n){var i,a,r,o,s,l,u=n.caretSize,d=n.cornerRadius,h=n.xAlign,c=n.yAlign,f=t.x,g=t.y,m=e.width,p=e.height;if("center"===c)s=g+p/2,"left"===h?(a=(i=f)-u,r=i,o=s+u,l=s-u):(a=(i=f+m)+u,r=i,o=s-u,l=s+u);else if("left"===h?(i=(a=f+d+u)-u,r=a+u):"right"===h?(i=(a=f+m-d-u)-u,r=a+u):(i=(a=n.caretX)-u,r=a+u),"top"===c)s=(o=g)-u,l=o;else{s=(o=g+p)+u,l=o;var v=r;r=i,i=v}return{x1:i,x2:a,x3:r,y1:o,y2:s,y3:l}},drawTitle:function(t,e,n){var i,a,r,o=e.title,s=o.length;if(s){var l=We(e.rtl,e.x,e.width);for(t.x=He(e,e._titleAlign),n.textAlign=l.textAlign(e._titleAlign),n.textBaseline="middle",i=e.titleFontSize,a=e.titleSpacing,n.fillStyle=e.titleFontColor,n.font=H.fontString(i,e._titleFontStyle,e._titleFontFamily),r=0;r0&&n.stroke()},draw:function(){var t=this._chart.ctx,e=this._view;if(0!==e.opacity){var n={width:e.width,height:e.height},i={x:e.x,y:e.y},a=Math.abs(e.opacity<.001)?0:e.opacity,r=e.title.length||e.beforeBody.length||e.body.length||e.afterBody.length||e.footer.length;this._options.enabled&&r&&(t.save(),t.globalAlpha=a,this.drawBackground(i,e,t,n),i.y+=e.yPadding,H.rtl.overrideTextDirection(t,e.textDirection),this.drawTitle(i,e,t),this.drawBody(i,e,t),this.drawFooter(i,e,t),H.rtl.restoreTextDirection(t,e.textDirection),t.restore())}},handleEvent:function(t){var e,n=this,i=n._options;return n._lastActive=n._lastActive||[],"mouseout"===t.type?n._active=[]:(n._active=n._chart.getElementsAtEventForMode(t,i.mode,i),i.reverse&&n._active.reverse()),(e=!H.arrayEquals(n._active,n._lastActive))&&(n._lastActive=n._active,(i.enabled||i.custom)&&(n._eventPosition={x:t.x,y:t.y},n.update(!0),n.pivot())),e}}),Ue=Ye,Ge=je;Ge.positioners=Ue;var qe=H.valueOrDefault;function Ze(){return H.merge({},[].slice.call(arguments),{merger:function(t,e,n,i){if("xAxes"===t||"yAxes"===t){var a,r,o,s=n[t].length;for(e[t]||(e[t]=[]),a=0;a=e[t].length&&e[t].push({}),!e[t][a].type||o.type&&o.type!==e[t][a].type?H.merge(e[t][a],[Re.getScaleDefaults(r),o]):H.merge(e[t][a],o)}else H._merger(t,e,n,i)}})}function $e(){return H.merge({},[].slice.call(arguments),{merger:function(t,e,n,i){var a=e[t]||{},r=n[t];"scales"===t?e[t]=Ze(a,r):"scale"===t?e[t]=H.merge(a,[Re.getScaleDefaults(r.type),r]):H._merger(t,e,n,i)}})}function Xe(t){var e=t.options;H.each(t.scales,(function(e){me.removeBox(t,e)})),e=$e(W.global,W[t.config.type],e),t.options=t.config.options=e,t.ensureScalesHaveIDs(),t.buildOrUpdateScales(),t.tooltip._options=e.tooltips,t.tooltip.initialize()}function Ke(t,e,n){var i,a=function(t){return t.id===i};do{i=e+n++}while(H.findIndex(t,a)>=0);return i}function Je(t){return"top"===t||"bottom"===t}function Qe(t,e){return function(n,i){return n[t]===i[t]?n[e]-i[e]:n[t]-i[t]}}W._set("global",{elements:{},events:["mousemove","mouseout","click","touchstart","touchmove"],hover:{onHover:null,mode:"nearest",intersect:!0,animationDuration:400},onClick:null,maintainAspectRatio:!0,responsive:!0,responsiveAnimationDuration:0});var tn=function(t,e){return this.construct(t,e),this};H.extend(tn.prototype,{construct:function(t,e){var n=this;e=function(t){var e=(t=t||{}).data=t.data||{};return e.datasets=e.datasets||[],e.labels=e.labels||[],t.options=$e(W.global,W[t.type],t.options||{}),t}(e);var i=Ie.acquireContext(t,e),a=i&&i.canvas,r=a&&a.height,o=a&&a.width;n.id=H.uid(),n.ctx=i,n.canvas=a,n.config=e,n.width=o,n.height=r,n.aspectRatio=r?o/r:null,n.options=e.options,n._bufferedRender=!1,n._layers=[],n.chart=n,n.controller=n,tn.instances[n.id]=n,Object.defineProperty(n,"data",{get:function(){return n.config.data},set:function(t){n.config.data=t}}),i&&a?(n.initialize(),n.update()):console.error("Failed to create chart: can't acquire context from the given item")},initialize:function(){var t=this;return Le.notify(t,"beforeInit"),H.retinaScale(t,t.options.devicePixelRatio),t.bindEvents(),t.options.responsive&&t.resize(!0),t.initToolTip(),Le.notify(t,"afterInit"),t},clear:function(){return H.canvas.clear(this),this},stop:function(){return J.cancelAnimation(this),this},resize:function(t){var e=this,n=e.options,i=e.canvas,a=n.maintainAspectRatio&&e.aspectRatio||null,r=Math.max(0,Math.floor(H.getMaximumWidth(i))),o=Math.max(0,Math.floor(a?r/a:H.getMaximumHeight(i)));if((e.width!==r||e.height!==o)&&(i.width=e.width=r,i.height=e.height=o,i.style.width=r+"px",i.style.height=o+"px",H.retinaScale(e,n.devicePixelRatio),!t)){var s={width:r,height:o};Le.notify(e,"resize",[s]),n.onResize&&n.onResize(e,s),e.stop(),e.update({duration:n.responsiveAnimationDuration})}},ensureScalesHaveIDs:function(){var t=this.options,e=t.scales||{},n=t.scale;H.each(e.xAxes,(function(t,n){t.id||(t.id=Ke(e.xAxes,"x-axis-",n))})),H.each(e.yAxes,(function(t,n){t.id||(t.id=Ke(e.yAxes,"y-axis-",n))})),n&&(n.id=n.id||"scale")},buildOrUpdateScales:function(){var t=this,e=t.options,n=t.scales||{},i=[],a=Object.keys(n).reduce((function(t,e){return t[e]=!1,t}),{});e.scales&&(i=i.concat((e.scales.xAxes||[]).map((function(t){return{options:t,dtype:"category",dposition:"bottom"}})),(e.scales.yAxes||[]).map((function(t){return{options:t,dtype:"linear",dposition:"left"}})))),e.scale&&i.push({options:e.scale,dtype:"radialLinear",isDefault:!0,dposition:"chartArea"}),H.each(i,(function(e){var i=e.options,r=i.id,o=qe(i.type,e.dtype);Je(i.position)!==Je(e.dposition)&&(i.position=e.dposition),a[r]=!0;var s=null;if(r in n&&n[r].type===o)(s=n[r]).options=i,s.ctx=t.ctx,s.chart=t;else{var l=Re.getScaleConstructor(o);if(!l)return;s=new l({id:r,type:o,options:i,ctx:t.ctx,chart:t}),n[s.id]=s}s.mergeTicksOptions(),e.isDefault&&(t.scale=s)})),H.each(a,(function(t,e){t||delete n[e]})),t.scales=n,Re.addScalesToLayout(this)},buildOrUpdateControllers:function(){var t,e,n=this,i=[],a=n.data.datasets;for(t=0,e=a.length;t=0;--n)this.drawDataset(e[n],t);Le.notify(this,"afterDatasetsDraw",[t])}},drawDataset:function(t,e){var n={meta:t,index:t.index,easingValue:e};!1!==Le.notify(this,"beforeDatasetDraw",[n])&&(t.controller.draw(e),Le.notify(this,"afterDatasetDraw",[n]))},_drawTooltip:function(t){var e=this.tooltip,n={tooltip:e,easingValue:t};!1!==Le.notify(this,"beforeTooltipDraw",[n])&&(e.draw(),Le.notify(this,"afterTooltipDraw",[n]))},getElementAtEvent:function(t){return re.modes.single(this,t)},getElementsAtEvent:function(t){return re.modes.label(this,t,{intersect:!0})},getElementsAtXAxis:function(t){return re.modes["x-axis"](this,t,{intersect:!0})},getElementsAtEventForMode:function(t,e,n){var i=re.modes[e];return"function"==typeof i?i(this,t,n):[]},getDatasetAtEvent:function(t){return re.modes.dataset(this,t,{intersect:!0})},getDatasetMeta:function(t){var e=this.data.datasets[t];e._meta||(e._meta={});var n=e._meta[this.id];return n||(n=e._meta[this.id]={type:null,data:[],dataset:null,controller:null,hidden:null,xAxisID:null,yAxisID:null,order:e.order||0,index:t}),n},getVisibleDatasetCount:function(){for(var t=0,e=0,n=this.data.datasets.length;e3?n[2]-n[1]:n[1]-n[0];Math.abs(i)>1&&t!==Math.floor(t)&&(i=t-Math.floor(t));var a=H.log10(Math.abs(i)),r="";if(0!==t)if(Math.max(Math.abs(n[0]),Math.abs(n[n.length-1]))<1e-4){var o=H.log10(Math.abs(t)),s=Math.floor(o)-Math.floor(a);s=Math.max(Math.min(s,20),0),r=t.toExponential(s)}else{var l=-1*Math.floor(a);l=Math.max(Math.min(l,20),0),r=t.toFixed(l)}else r="0";return r},logarithmic:function(t,e,n){var i=t/Math.pow(10,Math.floor(H.log10(t)));return 0===t?"0":1===i||2===i||5===i||0===e||e===n.length-1?t.toExponential():""}}},sn=H.isArray,ln=H.isNullOrUndef,un=H.valueOrDefault,dn=H.valueAtIndexOrDefault;function hn(t,e,n){var i,a=t.getTicks().length,r=Math.min(e,a-1),o=t.getPixelForTick(r),s=t._startPixel,l=t._endPixel;if(!(n&&(i=1===a?Math.max(o-s,l-o):0===e?(t.getPixelForTick(1)-o)/2:(o-t.getPixelForTick(r-1))/2,(o+=rl+1e-6)))return o}function cn(t,e,n,i){var a,r,o,s,l,u,d,h,c,f,g,m,p,v=n.length,b=[],y=[],x=[];for(a=0;ae){for(n=0;n=c||d<=1||!s.isHorizontal()?s.labelRotation=h:(e=(t=s._getLabelSizes()).widest.width,n=t.highest.height-t.highest.offset,i=Math.min(s.maxWidth,s.chart.width-e),e+6>(a=l.offset?s.maxWidth/d:i/(d-1))&&(a=i/(d-(l.offset?.5:1)),r=s.maxHeight-fn(l.gridLines)-u.padding-gn(l.scaleLabel),o=Math.sqrt(e*e+n*n),f=H.toDegrees(Math.min(Math.asin(Math.min((t.highest.height+6)/a,1)),Math.asin(Math.min(r/o,1))-Math.asin(n/o))),f=Math.max(h,Math.min(c,f))),s.labelRotation=f)},afterCalculateTickRotation:function(){H.callback(this.options.afterCalculateTickRotation,[this])},beforeFit:function(){H.callback(this.options.beforeFit,[this])},fit:function(){var t=this,e=t.minSize={width:0,height:0},n=t.chart,i=t.options,a=i.ticks,r=i.scaleLabel,o=i.gridLines,s=t._isVisible(),l="bottom"===i.position,u=t.isHorizontal();if(u?e.width=t.maxWidth:s&&(e.width=fn(o)+gn(r)),u?s&&(e.height=fn(o)+gn(r)):e.height=t.maxHeight,a.display&&s){var d=pn(a),h=t._getLabelSizes(),c=h.first,f=h.last,g=h.widest,m=h.highest,p=.4*d.minor.lineHeight,v=a.padding;if(u){var b=0!==t.labelRotation,y=H.toRadians(t.labelRotation),x=Math.cos(y),_=Math.sin(y),w=_*g.width+x*(m.height-(b?m.offset:0))+(b?0:p);e.height=Math.min(t.maxHeight,e.height+w+v);var k,M,S=t.getPixelForTick(0)-t.left,D=t.right-t.getPixelForTick(t.getTicks().length-1);b?(k=l?x*c.width+_*c.offset:_*(c.height-c.offset),M=l?_*(f.height-f.offset):x*f.width+_*f.offset):(k=c.width/2,M=f.width/2),t.paddingLeft=Math.max((k-S)*t.width/(t.width-S),0)+3,t.paddingRight=Math.max((M-D)*t.width/(t.width-D),0)+3}else{var C=a.mirror?0:g.width+v+p;e.width=Math.min(t.maxWidth,e.width+C),t.paddingTop=c.height/2,t.paddingBottom=f.height/2}}t.handleMargins(),u?(t.width=t._length=n.width-t.margins.left-t.margins.right,t.height=e.height):(t.width=e.width,t.height=t._length=n.height-t.margins.top-t.margins.bottom)},handleMargins:function(){var t=this;t.margins&&(t.margins.left=Math.max(t.paddingLeft,t.margins.left),t.margins.top=Math.max(t.paddingTop,t.margins.top),t.margins.right=Math.max(t.paddingRight,t.margins.right),t.margins.bottom=Math.max(t.paddingBottom,t.margins.bottom))},afterFit:function(){H.callback(this.options.afterFit,[this])},isHorizontal:function(){var t=this.options.position;return"top"===t||"bottom"===t},isFullWidth:function(){return this.options.fullWidth},getRightValue:function(t){if(ln(t))return NaN;if(("number"==typeof t||t instanceof Number)&&!isFinite(t))return NaN;if(t)if(this.isHorizontal()){if(void 0!==t.x)return this.getRightValue(t.x)}else if(void 0!==t.y)return this.getRightValue(t.y);return t},_convertTicksToLabels:function(t){var e,n,i,a=this;for(a.ticks=t.map((function(t){return t.value})),a.beforeTickToLabelConversion(),e=a.convertTicksToLabels(t)||a.ticks,a.afterTickToLabelConversion(),n=0,i=t.length;nn-1?null:this.getPixelForDecimal(t*i+(e?i/2:0))},getPixelForDecimal:function(t){return this._reversePixels&&(t=1-t),this._startPixel+t*this._length},getDecimalForPixel:function(t){var e=(t-this._startPixel)/this._length;return this._reversePixels?1-e:e},getBasePixel:function(){return this.getPixelForValue(this.getBaseValue())},getBaseValue:function(){var t=this.min,e=this.max;return this.beginAtZero?0:t<0&&e<0?e:t>0&&e>0?t:0},_autoSkip:function(t){var e,n,i,a,r=this.options.ticks,o=this._length,s=r.maxTicksLimit||o/this._tickSize()+1,l=r.major.enabled?function(t){var e,n,i=[];for(e=0,n=t.length;es)return function(t,e,n){var i,a,r=0,o=e[0];for(n=Math.ceil(n),i=0;iu)return r;return Math.max(u,1)}(l,t,0,s),u>0){for(e=0,n=u-1;e1?(h-d)/(u-1):null,bn(t,i,H.isNullOrUndef(a)?0:d-a,d),bn(t,i,h,H.isNullOrUndef(a)?t.length:h+a),vn(t)}return bn(t,i),vn(t)},_tickSize:function(){var t=this.options.ticks,e=H.toRadians(this.labelRotation),n=Math.abs(Math.cos(e)),i=Math.abs(Math.sin(e)),a=this._getLabelSizes(),r=t.autoSkipPadding||0,o=a?a.widest.width+r:0,s=a?a.highest.height+r:0;return this.isHorizontal()?s*n>o*i?o/n:s/i:s*i=0&&(o=t),void 0!==r&&(t=n.indexOf(r))>=0&&(s=t),e.minIndex=o,e.maxIndex=s,e.min=n[o],e.max=n[s]},buildTicks:function(){var t=this._getLabels(),e=this.minIndex,n=this.maxIndex;this.ticks=0===e&&n===t.length-1?t:t.slice(e,n+1)},getLabelForIndex:function(t,e){var n=this.chart;return n.getDatasetMeta(e).controller._getValueScaleId()===this.id?this.getRightValue(n.data.datasets[e].data[t]):this._getLabels()[t]},_configure:function(){var t=this,e=t.options.offset,n=t.ticks;xn.prototype._configure.call(t),t.isHorizontal()||(t._reversePixels=!t._reversePixels),n&&(t._startValue=t.minIndex-(e?.5:0),t._valueRange=Math.max(n.length-(e?0:1),1))},getPixelForValue:function(t,e,n){var i,a,r,o=this;return _n(e)||_n(n)||(t=o.chart.data.datasets[n].data[e]),_n(t)||(i=o.isHorizontal()?t.x:t.y),(void 0!==i||void 0!==t&&isNaN(e))&&(a=o._getLabels(),t=H.valueOrDefault(i,t),e=-1!==(r=a.indexOf(t))?r:e,isNaN(e)&&(e=t)),o.getPixelForDecimal((e-o._startValue)/o._valueRange)},getPixelForTick:function(t){var e=this.ticks;return t<0||t>e.length-1?null:this.getPixelForValue(e[t],t+this.minIndex)},getValueForPixel:function(t){var e=Math.round(this._startValue+this.getDecimalForPixel(t)*this._valueRange);return Math.min(Math.max(e,0),this.ticks.length-1)},getBasePixel:function(){return this.bottom}}),kn={position:"bottom"};wn._defaults=kn;var Mn=H.noop,Sn=H.isNullOrUndef;var Dn=xn.extend({getRightValue:function(t){return"string"==typeof t?+t:xn.prototype.getRightValue.call(this,t)},handleTickRangeOptions:function(){var t=this,e=t.options.ticks;if(e.beginAtZero){var n=H.sign(t.min),i=H.sign(t.max);n<0&&i<0?t.max=0:n>0&&i>0&&(t.min=0)}var a=void 0!==e.min||void 0!==e.suggestedMin,r=void 0!==e.max||void 0!==e.suggestedMax;void 0!==e.min?t.min=e.min:void 0!==e.suggestedMin&&(null===t.min?t.min=e.suggestedMin:t.min=Math.min(t.min,e.suggestedMin)),void 0!==e.max?t.max=e.max:void 0!==e.suggestedMax&&(null===t.max?t.max=e.suggestedMax:t.max=Math.max(t.max,e.suggestedMax)),a!==r&&t.min>=t.max&&(a?t.max=t.min+1:t.min=t.max-1),t.min===t.max&&(t.max++,e.beginAtZero||t.min--)},getTickLimit:function(){var t,e=this.options.ticks,n=e.stepSize,i=e.maxTicksLimit;return n?t=Math.ceil(this.max/n)-Math.floor(this.min/n)+1:(t=this._computeTickLimit(),i=i||11),i&&(t=Math.min(i,t)),t},_computeTickLimit:function(){return Number.POSITIVE_INFINITY},handleDirectionalChanges:Mn,buildTicks:function(){var t=this,e=t.options.ticks,n=t.getTickLimit(),i={maxTicks:n=Math.max(2,n),min:e.min,max:e.max,precision:e.precision,stepSize:H.valueOrDefault(e.fixedStepSize,e.stepSize)},a=t.ticks=function(t,e){var n,i,a,r,o=[],s=t.stepSize,l=s||1,u=t.maxTicks-1,d=t.min,h=t.max,c=t.precision,f=e.min,g=e.max,m=H.niceNum((g-f)/u/l)*l;if(m<1e-14&&Sn(d)&&Sn(h))return[f,g];(r=Math.ceil(g/m)-Math.floor(f/m))>u&&(m=H.niceNum(r*m/u/l)*l),s||Sn(c)?n=Math.pow(10,H._decimalPlaces(m)):(n=Math.pow(10,c),m=Math.ceil(m*n)/n),i=Math.floor(f/m)*m,a=Math.ceil(g/m)*m,s&&(!Sn(d)&&H.almostWhole(d/m,m/1e3)&&(i=d),!Sn(h)&&H.almostWhole(h/m,m/1e3)&&(a=h)),r=(a-i)/m,r=H.almostEquals(r,Math.round(r),m/1e3)?Math.round(r):Math.ceil(r),i=Math.round(i*n)/n,a=Math.round(a*n)/n,o.push(Sn(d)?i:d);for(var p=1;pe.length-1?null:this.getPixelForValue(e[t])}}),An=Cn;On._defaults=An;var Fn=H.valueOrDefault,In=H.math.log10;var Ln={position:"left",ticks:{callback:on.formatters.logarithmic}};function Rn(t,e){return H.isFinite(t)&&t>=0?t:e}var Nn=xn.extend({determineDataLimits:function(){var t,e,n,i,a,r,o=this,s=o.options,l=o.chart,u=l.data.datasets,d=o.isHorizontal();function h(t){return d?t.xAxisID===o.id:t.yAxisID===o.id}o.min=Number.POSITIVE_INFINITY,o.max=Number.NEGATIVE_INFINITY,o.minNotZero=Number.POSITIVE_INFINITY;var c=s.stacked;if(void 0===c)for(t=0;t0){var e=H.min(t),n=H.max(t);o.min=Math.min(o.min,e),o.max=Math.max(o.max,n)}}))}else for(t=0;t0?t.minNotZero=t.min:t.max<1?t.minNotZero=Math.pow(10,Math.floor(In(t.max))):t.minNotZero=1)},buildTicks:function(){var t=this,e=t.options.ticks,n=!t.isHorizontal(),i={min:Rn(e.min),max:Rn(e.max)},a=t.ticks=function(t,e){var n,i,a=[],r=Fn(t.min,Math.pow(10,Math.floor(In(e.min)))),o=Math.floor(In(e.max)),s=Math.ceil(e.max/Math.pow(10,o));0===r?(n=Math.floor(In(e.minNotZero)),i=Math.floor(e.minNotZero/Math.pow(10,n)),a.push(r),r=i*Math.pow(10,n)):(n=Math.floor(In(r)),i=Math.floor(r/Math.pow(10,n)));var l=n<0?Math.pow(10,Math.abs(n)):1;do{a.push(r),10===++i&&(i=1,l=++n>=0?1:l),r=Math.round(i*Math.pow(10,n)*l)/l}while(ne.length-1?null:this.getPixelForValue(e[t])},_getFirstTickValue:function(t){var e=Math.floor(In(t));return Math.floor(t/Math.pow(10,e))*Math.pow(10,e)},_configure:function(){var t=this,e=t.min,n=0;xn.prototype._configure.call(t),0===e&&(e=t._getFirstTickValue(t.minNotZero),n=Fn(t.options.ticks.fontSize,W.global.defaultFontSize)/t._length),t._startValue=In(e),t._valueOffset=n,t._valueRange=(In(t.max)-In(e))/(1-n)},getPixelForValue:function(t){var e=this,n=0;return(t=+e.getRightValue(t))>e.min&&t>0&&(n=(In(t)-e._startValue)/e._valueRange+e._valueOffset),e.getPixelForDecimal(n)},getValueForPixel:function(t){var e=this,n=e.getDecimalForPixel(t);return 0===n&&0===e.min?0:Math.pow(10,e._startValue+(n-e._valueOffset)*e._valueRange)}}),Wn=Ln;Nn._defaults=Wn;var Yn=H.valueOrDefault,zn=H.valueAtIndexOrDefault,En=H.options.resolve,Vn={display:!0,animate:!0,position:"chartArea",angleLines:{display:!0,color:"rgba(0,0,0,0.1)",lineWidth:1,borderDash:[],borderDashOffset:0},gridLines:{circular:!1},ticks:{showLabelBackdrop:!0,backdropColor:"rgba(255,255,255,0.75)",backdropPaddingY:2,backdropPaddingX:2,callback:on.formatters.linear},pointLabels:{display:!0,fontSize:10,callback:function(t){return t}}};function Hn(t){var e=t.ticks;return e.display&&t.display?Yn(e.fontSize,W.global.defaultFontSize)+2*e.backdropPaddingY:0}function Bn(t,e,n,i,a){return t===i||t===a?{start:e-n/2,end:e+n/2}:ta?{start:e-n,end:e}:{start:e,end:e+n}}function jn(t){return 0===t||180===t?"center":t<180?"left":"right"}function Un(t,e,n,i){var a,r,o=n.y+i/2;if(H.isArray(e))for(a=0,r=e.length;a270||t<90)&&(n.y-=e.h)}function qn(t){return H.isNumber(t)?t:0}var Zn=Dn.extend({setDimensions:function(){var t=this;t.width=t.maxWidth,t.height=t.maxHeight,t.paddingTop=Hn(t.options)/2,t.xCenter=Math.floor(t.width/2),t.yCenter=Math.floor((t.height-t.paddingTop)/2),t.drawingArea=Math.min(t.height-t.paddingTop,t.width)/2},determineDataLimits:function(){var t=this,e=t.chart,n=Number.POSITIVE_INFINITY,i=Number.NEGATIVE_INFINITY;H.each(e.data.datasets,(function(a,r){if(e.isDatasetVisible(r)){var o=e.getDatasetMeta(r);H.each(a.data,(function(e,a){var r=+t.getRightValue(e);isNaN(r)||o.data[a].hidden||(n=Math.min(r,n),i=Math.max(r,i))}))}})),t.min=n===Number.POSITIVE_INFINITY?0:n,t.max=i===Number.NEGATIVE_INFINITY?0:i,t.handleTickRangeOptions()},_computeTickLimit:function(){return Math.ceil(this.drawingArea/Hn(this.options))},convertTicksToLabels:function(){var t=this;Dn.prototype.convertTicksToLabels.call(t),t.pointLabels=t.chart.data.labels.map((function(){var e=H.callback(t.options.pointLabels.callback,arguments,t);return e||0===e?e:""}))},getLabelForIndex:function(t,e){return+this.getRightValue(this.chart.data.datasets[e].data[t])},fit:function(){var t=this.options;t.display&&t.pointLabels.display?function(t){var e,n,i,a=H.options._parseFont(t.options.pointLabels),r={l:0,r:t.width,t:0,b:t.height-t.paddingTop},o={};t.ctx.font=a.string,t._pointLabelSizes=[];var s,l,u,d=t.chart.data.labels.length;for(e=0;er.r&&(r.r=f.end,o.r=h),g.startr.b&&(r.b=g.end,o.b=h)}t.setReductions(t.drawingArea,r,o)}(this):this.setCenterPoint(0,0,0,0)},setReductions:function(t,e,n){var i=this,a=e.l/Math.sin(n.l),r=Math.max(e.r-i.width,0)/Math.sin(n.r),o=-e.t/Math.cos(n.t),s=-Math.max(e.b-(i.height-i.paddingTop),0)/Math.cos(n.b);a=qn(a),r=qn(r),o=qn(o),s=qn(s),i.drawingArea=Math.min(Math.floor(t-(a+r)/2),Math.floor(t-(o+s)/2)),i.setCenterPoint(a,r,o,s)},setCenterPoint:function(t,e,n,i){var a=this,r=a.width-e-a.drawingArea,o=t+a.drawingArea,s=n+a.drawingArea,l=a.height-a.paddingTop-i-a.drawingArea;a.xCenter=Math.floor((o+r)/2+a.left),a.yCenter=Math.floor((s+l)/2+a.top+a.paddingTop)},getIndexAngle:function(t){var e=this.chart,n=(t*(360/e.data.labels.length)+((e.options||{}).startAngle||0))%360;return(n<0?n+360:n)*Math.PI*2/360},getDistanceFromCenterForValue:function(t){var e=this;if(H.isNullOrUndef(t))return NaN;var n=e.drawingArea/(e.max-e.min);return e.options.ticks.reverse?(e.max-t)*n:(t-e.min)*n},getPointPosition:function(t,e){var n=this.getIndexAngle(t)-Math.PI/2;return{x:Math.cos(n)*e+this.xCenter,y:Math.sin(n)*e+this.yCenter}},getPointPositionForValue:function(t,e){return this.getPointPosition(t,this.getDistanceFromCenterForValue(e))},getBasePosition:function(t){var e=this.min,n=this.max;return this.getPointPositionForValue(t||0,this.beginAtZero?0:e<0&&n<0?n:e>0&&n>0?e:0)},_drawGrid:function(){var t,e,n,i=this,a=i.ctx,r=i.options,o=r.gridLines,s=r.angleLines,l=Yn(s.lineWidth,o.lineWidth),u=Yn(s.color,o.color);if(r.pointLabels.display&&function(t){var e=t.ctx,n=t.options,i=n.pointLabels,a=Hn(n),r=t.getDistanceFromCenterForValue(n.ticks.reverse?t.min:t.max),o=H.options._parseFont(i);e.save(),e.font=o.string,e.textBaseline="middle";for(var s=t.chart.data.labels.length-1;s>=0;s--){var l=0===s?a/2:0,u=t.getPointPosition(s,r+l+5),d=zn(i.fontColor,s,W.global.defaultFontColor);e.fillStyle=d;var h=t.getIndexAngle(s),c=H.toDegrees(h);e.textAlign=jn(c),Gn(c,t._pointLabelSizes[s],u),Un(e,t.pointLabels[s],u,o.lineHeight)}e.restore()}(i),o.display&&H.each(i.ticks,(function(t,n){0!==n&&(e=i.getDistanceFromCenterForValue(i.ticksAsNumbers[n]),function(t,e,n,i){var a,r=t.ctx,o=e.circular,s=t.chart.data.labels.length,l=zn(e.color,i-1),u=zn(e.lineWidth,i-1);if((o||s)&&l&&u){if(r.save(),r.strokeStyle=l,r.lineWidth=u,r.setLineDash&&(r.setLineDash(e.borderDash||[]),r.lineDashOffset=e.borderDashOffset||0),r.beginPath(),o)r.arc(t.xCenter,t.yCenter,n,0,2*Math.PI);else{a=t.getPointPosition(0,n),r.moveTo(a.x,a.y);for(var d=1;d=0;t--)e=i.getDistanceFromCenterForValue(r.ticks.reverse?i.min:i.max),n=i.getPointPosition(t,e),a.beginPath(),a.moveTo(i.xCenter,i.yCenter),a.lineTo(n.x,n.y),a.stroke();a.restore()}},_drawLabels:function(){var t=this,e=t.ctx,n=t.options.ticks;if(n.display){var i,a,r=t.getIndexAngle(0),o=H.options._parseFont(n),s=Yn(n.fontColor,W.global.defaultFontColor);e.save(),e.font=o.string,e.translate(t.xCenter,t.yCenter),e.rotate(r),e.textAlign="center",e.textBaseline="middle",H.each(t.ticks,(function(r,l){(0!==l||n.reverse)&&(i=t.getDistanceFromCenterForValue(t.ticksAsNumbers[l]),n.showLabelBackdrop&&(a=e.measureText(r).width,e.fillStyle=n.backdropColor,e.fillRect(-a/2-n.backdropPaddingX,-i-o.size/2-n.backdropPaddingY,a+2*n.backdropPaddingX,o.size+2*n.backdropPaddingY)),e.fillStyle=s,e.fillText(r,0,-i))})),e.restore()}},_drawTitle:H.noop}),$n=Vn;Zn._defaults=$n;var Xn=H._deprecated,Kn=H.options.resolve,Jn=H.valueOrDefault,Qn=Number.MIN_SAFE_INTEGER||-9007199254740991,ti=Number.MAX_SAFE_INTEGER||9007199254740991,ei={millisecond:{common:!0,size:1,steps:1e3},second:{common:!0,size:1e3,steps:60},minute:{common:!0,size:6e4,steps:60},hour:{common:!0,size:36e5,steps:24},day:{common:!0,size:864e5,steps:30},week:{common:!1,size:6048e5,steps:4},month:{common:!0,size:2628e6,steps:12},quarter:{common:!1,size:7884e6,steps:4},year:{common:!0,size:3154e7}},ni=Object.keys(ei);function ii(t,e){return t-e}function ai(t){return H.valueOrDefault(t.time.min,t.ticks.min)}function ri(t){return H.valueOrDefault(t.time.max,t.ticks.max)}function oi(t,e,n,i){var a=function(t,e,n){for(var i,a,r,o=0,s=t.length-1;o>=0&&o<=s;){if(a=t[(i=o+s>>1)-1]||null,r=t[i],!a)return{lo:null,hi:r};if(r[e]n))return{lo:a,hi:r};s=i-1}}return{lo:r,hi:null}}(t,e,n),r=a.lo?a.hi?a.lo:t[t.length-2]:t[0],o=a.lo?a.hi?a.hi:t[t.length-1]:t[1],s=o[e]-r[e],l=s?(n-r[e])/s:0,u=(o[i]-r[i])*l;return r[i]+u}function si(t,e){var n=t._adapter,i=t.options.time,a=i.parser,r=a||i.format,o=e;return"function"==typeof a&&(o=a(o)),H.isFinite(o)||(o="string"==typeof r?n.parse(o,r):n.parse(o)),null!==o?+o:(a||"function"!=typeof r||(o=r(e),H.isFinite(o)||(o=n.parse(o))),o)}function li(t,e){if(H.isNullOrUndef(e))return null;var n=t.options.time,i=si(t,t.getRightValue(e));return null===i?i:(n.round&&(i=+t._adapter.startOf(i,n.round)),i)}function ui(t,e,n,i){var a,r,o,s=ni.length;for(a=ni.indexOf(t);a=0&&(e[r].major=!0);return e}(t,r,o,n):r}var hi=xn.extend({initialize:function(){this.mergeTicksOptions(),xn.prototype.initialize.call(this)},update:function(){var t=this,e=t.options,n=e.time||(e.time={}),i=t._adapter=new rn._date(e.adapters.date);return Xn("time scale",n.format,"time.format","time.parser"),Xn("time scale",n.min,"time.min","ticks.min"),Xn("time scale",n.max,"time.max","ticks.max"),H.mergeIf(n.displayFormats,i.formats()),xn.prototype.update.apply(t,arguments)},getRightValue:function(t){return t&&void 0!==t.t&&(t=t.t),xn.prototype.getRightValue.call(this,t)},determineDataLimits:function(){var t,e,n,i,a,r,o,s=this,l=s.chart,u=s._adapter,d=s.options,h=d.time.unit||"day",c=ti,f=Qn,g=[],m=[],p=[],v=s._getLabels();for(t=0,n=v.length;t1?function(t){var e,n,i,a={},r=[];for(e=0,n=t.length;e1e5*u)throw e+" and "+n+" are too far apart with stepSize of "+u+" "+l;for(a=h;a=a&&n<=r&&d.push(n);return i.min=a,i.max=r,i._unit=l.unit||(s.autoSkip?ui(l.minUnit,i.min,i.max,h):function(t,e,n,i,a){var r,o;for(r=ni.length-1;r>=ni.indexOf(n);r--)if(o=ni[r],ei[o].common&&t._adapter.diff(a,i,o)>=e-1)return o;return ni[n?ni.indexOf(n):0]}(i,d.length,l.minUnit,i.min,i.max)),i._majorUnit=s.major.enabled&&"year"!==i._unit?function(t){for(var e=ni.indexOf(t)+1,n=ni.length;ee&&s=0&&t0?s:1}}),ci={position:"bottom",distribution:"linear",bounds:"data",adapters:{},time:{parser:!1,unit:!1,round:!1,displayFormat:!1,isoWeekday:!1,minUnit:"millisecond",displayFormats:{}},ticks:{autoSkip:!1,source:"auto",major:{enabled:!1}}};hi._defaults=ci;var fi={category:wn,linear:On,logarithmic:Nn,radialLinear:Zn,time:hi},gi=e((function(e,n){e.exports=function(){var n,i;function a(){return n.apply(null,arguments)}function r(t){return t instanceof Array||"[object Array]"===Object.prototype.toString.call(t)}function o(t){return null!=t&&"[object Object]"===Object.prototype.toString.call(t)}function s(t){return void 0===t}function l(t){return"number"==typeof t||"[object Number]"===Object.prototype.toString.call(t)}function u(t){return t instanceof Date||"[object Date]"===Object.prototype.toString.call(t)}function d(t,e){var n,i=[];for(n=0;n>>0,i=0;i0)for(n=0;n=0?n?"+":"":"-")+Math.pow(10,Math.max(0,a)).toString().substr(1)+i}var E=/(\[[^\[]*\])|(\\)?([Hh]mm(ss)?|Mo|MM?M?M?|Do|DDDo|DD?D?D?|ddd?d?|do?|w[o|w]?|W[o|W]?|Qo?|YYYYYY|YYYYY|YYYY|YY|gg(ggg?)?|GG(GGG?)?|e|E|a|A|hh?|HH?|kk?|mm?|ss?|S{1,9}|x|X|zz?|ZZ?|.)/g,V=/(\[[^\[]*\])|(\\)?(LTS|LT|LL?L?L?|l{1,4})/g,H={},B={};function j(t,e,n,i){var a=i;"string"==typeof i&&(a=function(){return this[i]()}),t&&(B[t]=a),e&&(B[e[0]]=function(){return z(a.apply(this,arguments),e[1],e[2])}),n&&(B[n]=function(){return this.localeData().ordinal(a.apply(this,arguments),t)})}function U(t,e){return t.isValid()?(e=G(e,t.localeData()),H[e]=H[e]||function(t){var e,n,i,a=t.match(E);for(e=0,n=a.length;e=0&&V.test(t);)t=t.replace(V,i),V.lastIndex=0,n-=1;return t}var q=/\d/,Z=/\d\d/,$=/\d{3}/,X=/\d{4}/,K=/[+-]?\d{6}/,J=/\d\d?/,Q=/\d\d\d\d?/,tt=/\d\d\d\d\d\d?/,et=/\d{1,3}/,nt=/\d{1,4}/,it=/[+-]?\d{1,6}/,at=/\d+/,rt=/[+-]?\d+/,ot=/Z|[+-]\d\d:?\d\d/gi,st=/Z|[+-]\d\d(?::?\d\d)?/gi,lt=/[0-9]{0,256}['a-z\u00A0-\u05FF\u0700-\uD7FF\uF900-\uFDCF\uFDF0-\uFF07\uFF10-\uFFEF]{1,256}|[\u0600-\u06FF\/]{1,256}(\s*?[\u0600-\u06FF]{1,256}){1,2}/i,ut={};function dt(t,e,n){ut[t]=O(e)?e:function(t,i){return t&&n?n:e}}function ht(t,e){return h(ut,t)?ut[t](e._strict,e._locale):new RegExp(ct(t.replace("\\","").replace(/\\(\[)|\\(\])|\[([^\]\[]*)\]|\\(.)/g,(function(t,e,n,i,a){return e||n||i||a}))))}function ct(t){return t.replace(/[-\/\\^$*+?.()|[\]{}]/g,"\\$&")}var ft={};function gt(t,e){var n,i=e;for("string"==typeof t&&(t=[t]),l(e)&&(i=function(t,n){n[e]=k(t)}),n=0;n68?1900:2e3)};var Pt,Tt=Ot("FullYear",!0);function Ot(t,e){return function(n){return null!=n?(Ft(this,t,n),a.updateOffset(this,e),this):At(this,t)}}function At(t,e){return t.isValid()?t._d["get"+(t._isUTC?"UTC":"")+e]():NaN}function Ft(t,e,n){t.isValid()&&!isNaN(n)&&("FullYear"===e&&Ct(t.year())&&1===t.month()&&29===t.date()?t._d["set"+(t._isUTC?"UTC":"")+e](n,t.month(),It(n,t.month())):t._d["set"+(t._isUTC?"UTC":"")+e](n))}function It(t,e){if(isNaN(t)||isNaN(e))return NaN;var n=function(t,e){return(t%e+e)%e}(e,12);return t+=(e-n)/12,1===n?Ct(t)?29:28:31-n%7%2}Pt=Array.prototype.indexOf?Array.prototype.indexOf:function(t){var e;for(e=0;e=0?(s=new Date(t+400,e,n,i,a,r,o),isFinite(s.getFullYear())&&s.setFullYear(t)):s=new Date(t,e,n,i,a,r,o),s}function jt(t){var e;if(t<100&&t>=0){var n=Array.prototype.slice.call(arguments);n[0]=t+400,e=new Date(Date.UTC.apply(null,n)),isFinite(e.getUTCFullYear())&&e.setUTCFullYear(t)}else e=new Date(Date.UTC.apply(null,arguments));return e}function Ut(t,e,n){var i=7+e-n;return-(7+jt(t,0,i).getUTCDay()-e)%7+i-1}function Gt(t,e,n,i,a){var r,o,s=1+7*(e-1)+(7+n-i)%7+Ut(t,i,a);return s<=0?o=Dt(r=t-1)+s:s>Dt(t)?(r=t+1,o=s-Dt(t)):(r=t,o=s),{year:r,dayOfYear:o}}function qt(t,e,n){var i,a,r=Ut(t.year(),e,n),o=Math.floor((t.dayOfYear()-r-1)/7)+1;return o<1?i=o+Zt(a=t.year()-1,e,n):o>Zt(t.year(),e,n)?(i=o-Zt(t.year(),e,n),a=t.year()+1):(a=t.year(),i=o),{week:i,year:a}}function Zt(t,e,n){var i=Ut(t,e,n),a=Ut(t+1,e,n);return(Dt(t)-i+a)/7}function $t(t,e){return t.slice(e,7).concat(t.slice(0,e))}j("w",["ww",2],"wo","week"),j("W",["WW",2],"Wo","isoWeek"),L("week","w"),L("isoWeek","W"),Y("week",5),Y("isoWeek",5),dt("w",J),dt("ww",J,Z),dt("W",J),dt("WW",J,Z),mt(["w","ww","W","WW"],(function(t,e,n,i){e[i.substr(0,1)]=k(t)})),j("d",0,"do","day"),j("dd",0,0,(function(t){return this.localeData().weekdaysMin(this,t)})),j("ddd",0,0,(function(t){return this.localeData().weekdaysShort(this,t)})),j("dddd",0,0,(function(t){return this.localeData().weekdays(this,t)})),j("e",0,0,"weekday"),j("E",0,0,"isoWeekday"),L("day","d"),L("weekday","e"),L("isoWeekday","E"),Y("day",11),Y("weekday",11),Y("isoWeekday",11),dt("d",J),dt("e",J),dt("E",J),dt("dd",(function(t,e){return e.weekdaysMinRegex(t)})),dt("ddd",(function(t,e){return e.weekdaysShortRegex(t)})),dt("dddd",(function(t,e){return e.weekdaysRegex(t)})),mt(["dd","ddd","dddd"],(function(t,e,n,i){var a=n._locale.weekdaysParse(t,i,n._strict);null!=a?e.d=a:g(n).invalidWeekday=t})),mt(["d","e","E"],(function(t,e,n,i){e[i]=k(t)}));var Xt="Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),Kt="Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),Jt="Su_Mo_Tu_We_Th_Fr_Sa".split("_");function Qt(t,e,n){var i,a,r,o=t.toLocaleLowerCase();if(!this._weekdaysParse)for(this._weekdaysParse=[],this._shortWeekdaysParse=[],this._minWeekdaysParse=[],i=0;i<7;++i)r=f([2e3,1]).day(i),this._minWeekdaysParse[i]=this.weekdaysMin(r,"").toLocaleLowerCase(),this._shortWeekdaysParse[i]=this.weekdaysShort(r,"").toLocaleLowerCase(),this._weekdaysParse[i]=this.weekdays(r,"").toLocaleLowerCase();return n?"dddd"===e?-1!==(a=Pt.call(this._weekdaysParse,o))?a:null:"ddd"===e?-1!==(a=Pt.call(this._shortWeekdaysParse,o))?a:null:-1!==(a=Pt.call(this._minWeekdaysParse,o))?a:null:"dddd"===e?-1!==(a=Pt.call(this._weekdaysParse,o))?a:-1!==(a=Pt.call(this._shortWeekdaysParse,o))?a:-1!==(a=Pt.call(this._minWeekdaysParse,o))?a:null:"ddd"===e?-1!==(a=Pt.call(this._shortWeekdaysParse,o))?a:-1!==(a=Pt.call(this._weekdaysParse,o))?a:-1!==(a=Pt.call(this._minWeekdaysParse,o))?a:null:-1!==(a=Pt.call(this._minWeekdaysParse,o))?a:-1!==(a=Pt.call(this._weekdaysParse,o))?a:-1!==(a=Pt.call(this._shortWeekdaysParse,o))?a:null}var te=lt,ee=lt,ne=lt;function ie(){function t(t,e){return e.length-t.length}var e,n,i,a,r,o=[],s=[],l=[],u=[];for(e=0;e<7;e++)n=f([2e3,1]).day(e),i=this.weekdaysMin(n,""),a=this.weekdaysShort(n,""),r=this.weekdays(n,""),o.push(i),s.push(a),l.push(r),u.push(i),u.push(a),u.push(r);for(o.sort(t),s.sort(t),l.sort(t),u.sort(t),e=0;e<7;e++)s[e]=ct(s[e]),l[e]=ct(l[e]),u[e]=ct(u[e]);this._weekdaysRegex=new RegExp("^("+u.join("|")+")","i"),this._weekdaysShortRegex=this._weekdaysRegex,this._weekdaysMinRegex=this._weekdaysRegex,this._weekdaysStrictRegex=new RegExp("^("+l.join("|")+")","i"),this._weekdaysShortStrictRegex=new RegExp("^("+s.join("|")+")","i"),this._weekdaysMinStrictRegex=new RegExp("^("+o.join("|")+")","i")}function ae(){return this.hours()%12||12}function re(t,e){j(t,0,0,(function(){return this.localeData().meridiem(this.hours(),this.minutes(),e)}))}function oe(t,e){return e._meridiemParse}j("H",["HH",2],0,"hour"),j("h",["hh",2],0,ae),j("k",["kk",2],0,(function(){return this.hours()||24})),j("hmm",0,0,(function(){return""+ae.apply(this)+z(this.minutes(),2)})),j("hmmss",0,0,(function(){return""+ae.apply(this)+z(this.minutes(),2)+z(this.seconds(),2)})),j("Hmm",0,0,(function(){return""+this.hours()+z(this.minutes(),2)})),j("Hmmss",0,0,(function(){return""+this.hours()+z(this.minutes(),2)+z(this.seconds(),2)})),re("a",!0),re("A",!1),L("hour","h"),Y("hour",13),dt("a",oe),dt("A",oe),dt("H",J),dt("h",J),dt("k",J),dt("HH",J,Z),dt("hh",J,Z),dt("kk",J,Z),dt("hmm",Q),dt("hmmss",tt),dt("Hmm",Q),dt("Hmmss",tt),gt(["H","HH"],xt),gt(["k","kk"],(function(t,e,n){var i=k(t);e[xt]=24===i?0:i})),gt(["a","A"],(function(t,e,n){n._isPm=n._locale.isPM(t),n._meridiem=t})),gt(["h","hh"],(function(t,e,n){e[xt]=k(t),g(n).bigHour=!0})),gt("hmm",(function(t,e,n){var i=t.length-2;e[xt]=k(t.substr(0,i)),e[_t]=k(t.substr(i)),g(n).bigHour=!0})),gt("hmmss",(function(t,e,n){var i=t.length-4,a=t.length-2;e[xt]=k(t.substr(0,i)),e[_t]=k(t.substr(i,2)),e[wt]=k(t.substr(a)),g(n).bigHour=!0})),gt("Hmm",(function(t,e,n){var i=t.length-2;e[xt]=k(t.substr(0,i)),e[_t]=k(t.substr(i))})),gt("Hmmss",(function(t,e,n){var i=t.length-4,a=t.length-2;e[xt]=k(t.substr(0,i)),e[_t]=k(t.substr(i,2)),e[wt]=k(t.substr(a))}));var se,le=Ot("Hours",!0),ue={calendar:{sameDay:"[Today at] LT",nextDay:"[Tomorrow at] LT",nextWeek:"dddd [at] LT",lastDay:"[Yesterday at] LT",lastWeek:"[Last] dddd [at] LT",sameElse:"L"},longDateFormat:{LTS:"h:mm:ss A",LT:"h:mm A",L:"MM/DD/YYYY",LL:"MMMM D, YYYY",LLL:"MMMM D, YYYY h:mm A",LLLL:"dddd, MMMM D, YYYY h:mm A"},invalidDate:"Invalid date",ordinal:"%d",dayOfMonthOrdinalParse:/\d{1,2}/,relativeTime:{future:"in %s",past:"%s ago",s:"a few seconds",ss:"%d seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",M:"a month",MM:"%d months",y:"a year",yy:"%d years"},months:Rt,monthsShort:Nt,week:{dow:0,doy:6},weekdays:Xt,weekdaysMin:Jt,weekdaysShort:Kt,meridiemParse:/[ap]\.?m?\.?/i},de={},he={};function ce(t){return t?t.toLowerCase().replace("_","-"):t}function fe(n){var i=null;if(!de[n]&&e&&e.exports)try{i=se._abbr,t(),ge(i)}catch(t){}return de[n]}function ge(t,e){var n;return t&&((n=s(e)?pe(t):me(t,e))?se=n:"undefined"!=typeof console&&console.warn&&console.warn("Locale "+t+" not found. Did you forget to load it?")),se._abbr}function me(t,e){if(null!==e){var n,i=ue;if(e.abbr=t,null!=de[t])T("defineLocaleOverride","use moment.updateLocale(localeName, config) to change an existing locale. moment.defineLocale(localeName, config) should only be used for creating a new locale See http://momentjs.com/guides/#/warnings/define-locale/ for more info."),i=de[t]._config;else if(null!=e.parentLocale)if(null!=de[e.parentLocale])i=de[e.parentLocale]._config;else{if(null==(n=fe(e.parentLocale)))return he[e.parentLocale]||(he[e.parentLocale]=[]),he[e.parentLocale].push({name:t,config:e}),null;i=n._config}return de[t]=new F(A(i,e)),he[t]&&he[t].forEach((function(t){me(t.name,t.config)})),ge(t),de[t]}return delete de[t],null}function pe(t){var e;if(t&&t._locale&&t._locale._abbr&&(t=t._locale._abbr),!t)return se;if(!r(t)){if(e=fe(t))return e;t=[t]}return function(t){for(var e,n,i,a,r=0;r0;){if(i=fe(a.slice(0,e).join("-")))return i;if(n&&n.length>=e&&M(a,n,!0)>=e-1)break;e--}r++}return se}(t)}function ve(t){var e,n=t._a;return n&&-2===g(t).overflow&&(e=n[bt]<0||n[bt]>11?bt:n[yt]<1||n[yt]>It(n[vt],n[bt])?yt:n[xt]<0||n[xt]>24||24===n[xt]&&(0!==n[_t]||0!==n[wt]||0!==n[kt])?xt:n[_t]<0||n[_t]>59?_t:n[wt]<0||n[wt]>59?wt:n[kt]<0||n[kt]>999?kt:-1,g(t)._overflowDayOfYear&&(eyt)&&(e=yt),g(t)._overflowWeeks&&-1===e&&(e=Mt),g(t)._overflowWeekday&&-1===e&&(e=St),g(t).overflow=e),t}function be(t,e,n){return null!=t?t:null!=e?e:n}function ye(t){var e,n,i,r,o,s=[];if(!t._d){for(i=function(t){var e=new Date(a.now());return t._useUTC?[e.getUTCFullYear(),e.getUTCMonth(),e.getUTCDate()]:[e.getFullYear(),e.getMonth(),e.getDate()]}(t),t._w&&null==t._a[yt]&&null==t._a[bt]&&function(t){var e,n,i,a,r,o,s,l;if(null!=(e=t._w).GG||null!=e.W||null!=e.E)r=1,o=4,n=be(e.GG,t._a[vt],qt(Le(),1,4).year),i=be(e.W,1),((a=be(e.E,1))<1||a>7)&&(l=!0);else{r=t._locale._week.dow,o=t._locale._week.doy;var u=qt(Le(),r,o);n=be(e.gg,t._a[vt],u.year),i=be(e.w,u.week),null!=e.d?((a=e.d)<0||a>6)&&(l=!0):null!=e.e?(a=e.e+r,(e.e<0||e.e>6)&&(l=!0)):a=r}i<1||i>Zt(n,r,o)?g(t)._overflowWeeks=!0:null!=l?g(t)._overflowWeekday=!0:(s=Gt(n,i,a,r,o),t._a[vt]=s.year,t._dayOfYear=s.dayOfYear)}(t),null!=t._dayOfYear&&(o=be(t._a[vt],i[vt]),(t._dayOfYear>Dt(o)||0===t._dayOfYear)&&(g(t)._overflowDayOfYear=!0),n=jt(o,0,t._dayOfYear),t._a[bt]=n.getUTCMonth(),t._a[yt]=n.getUTCDate()),e=0;e<3&&null==t._a[e];++e)t._a[e]=s[e]=i[e];for(;e<7;e++)t._a[e]=s[e]=null==t._a[e]?2===e?1:0:t._a[e];24===t._a[xt]&&0===t._a[_t]&&0===t._a[wt]&&0===t._a[kt]&&(t._nextDay=!0,t._a[xt]=0),t._d=(t._useUTC?jt:Bt).apply(null,s),r=t._useUTC?t._d.getUTCDay():t._d.getDay(),null!=t._tzm&&t._d.setUTCMinutes(t._d.getUTCMinutes()-t._tzm),t._nextDay&&(t._a[xt]=24),t._w&&void 0!==t._w.d&&t._w.d!==r&&(g(t).weekdayMismatch=!0)}}var xe=/^\s*((?:[+-]\d{6}|\d{4})-(?:\d\d-\d\d|W\d\d-\d|W\d\d|\d\d\d|\d\d))(?:(T| )(\d\d(?::\d\d(?::\d\d(?:[.,]\d+)?)?)?)([\+\-]\d\d(?::?\d\d)?|\s*Z)?)?$/,_e=/^\s*((?:[+-]\d{6}|\d{4})(?:\d\d\d\d|W\d\d\d|W\d\d|\d\d\d|\d\d))(?:(T| )(\d\d(?:\d\d(?:\d\d(?:[.,]\d+)?)?)?)([\+\-]\d\d(?::?\d\d)?|\s*Z)?)?$/,we=/Z|[+-]\d\d(?::?\d\d)?/,ke=[["YYYYYY-MM-DD",/[+-]\d{6}-\d\d-\d\d/],["YYYY-MM-DD",/\d{4}-\d\d-\d\d/],["GGGG-[W]WW-E",/\d{4}-W\d\d-\d/],["GGGG-[W]WW",/\d{4}-W\d\d/,!1],["YYYY-DDD",/\d{4}-\d{3}/],["YYYY-MM",/\d{4}-\d\d/,!1],["YYYYYYMMDD",/[+-]\d{10}/],["YYYYMMDD",/\d{8}/],["GGGG[W]WWE",/\d{4}W\d{3}/],["GGGG[W]WW",/\d{4}W\d{2}/,!1],["YYYYDDD",/\d{7}/]],Me=[["HH:mm:ss.SSSS",/\d\d:\d\d:\d\d\.\d+/],["HH:mm:ss,SSSS",/\d\d:\d\d:\d\d,\d+/],["HH:mm:ss",/\d\d:\d\d:\d\d/],["HH:mm",/\d\d:\d\d/],["HHmmss.SSSS",/\d\d\d\d\d\d\.\d+/],["HHmmss,SSSS",/\d\d\d\d\d\d,\d+/],["HHmmss",/\d\d\d\d\d\d/],["HHmm",/\d\d\d\d/],["HH",/\d\d/]],Se=/^\/?Date\((\-?\d+)/i;function De(t){var e,n,i,a,r,o,s=t._i,l=xe.exec(s)||_e.exec(s);if(l){for(g(t).iso=!0,e=0,n=ke.length;e0&&g(t).unusedInput.push(o),s=s.slice(s.indexOf(n)+n.length),u+=n.length),B[r]?(n?g(t).empty=!1:g(t).unusedTokens.push(r),pt(r,n,t)):t._strict&&!n&&g(t).unusedTokens.push(r);g(t).charsLeftOver=l-u,s.length>0&&g(t).unusedInput.push(s),t._a[xt]<=12&&!0===g(t).bigHour&&t._a[xt]>0&&(g(t).bigHour=void 0),g(t).parsedDateParts=t._a.slice(0),g(t).meridiem=t._meridiem,t._a[xt]=function(t,e,n){var i;return null==n?e:null!=t.meridiemHour?t.meridiemHour(e,n):null!=t.isPM?((i=t.isPM(n))&&e<12&&(e+=12),i||12!==e||(e=0),e):e}(t._locale,t._a[xt],t._meridiem),ye(t),ve(t)}else Oe(t);else De(t)}function Fe(t){var e=t._i,n=t._f;return t._locale=t._locale||pe(t._l),null===e||void 0===n&&""===e?p({nullInput:!0}):("string"==typeof e&&(t._i=e=t._locale.preparse(e)),_(e)?new x(ve(e)):(u(e)?t._d=e:r(n)?function(t){var e,n,i,a,r;if(0===t._f.length)return g(t).invalidFormat=!0,void(t._d=new Date(NaN));for(a=0;athis?this:t:p()}));function We(t,e){var n,i;if(1===e.length&&r(e[0])&&(e=e[0]),!e.length)return Le();for(n=e[0],i=1;i=0?new Date(t+400,e,n)-hn:new Date(t,e,n).valueOf()}function gn(t,e,n){return t<100&&t>=0?Date.UTC(t+400,e,n)-hn:Date.UTC(t,e,n)}function mn(t,e){j(0,[t,t.length],0,e)}function pn(t,e,n,i,a){var r;return null==t?qt(this,i,a).year:(e>(r=Zt(t,i,a))&&(e=r),vn.call(this,t,e,n,i,a))}function vn(t,e,n,i,a){var r=Gt(t,e,n,i,a),o=jt(r.year,0,r.dayOfYear);return this.year(o.getUTCFullYear()),this.month(o.getUTCMonth()),this.date(o.getUTCDate()),this}j(0,["gg",2],0,(function(){return this.weekYear()%100})),j(0,["GG",2],0,(function(){return this.isoWeekYear()%100})),mn("gggg","weekYear"),mn("ggggg","weekYear"),mn("GGGG","isoWeekYear"),mn("GGGGG","isoWeekYear"),L("weekYear","gg"),L("isoWeekYear","GG"),Y("weekYear",1),Y("isoWeekYear",1),dt("G",rt),dt("g",rt),dt("GG",J,Z),dt("gg",J,Z),dt("GGGG",nt,X),dt("gggg",nt,X),dt("GGGGG",it,K),dt("ggggg",it,K),mt(["gggg","ggggg","GGGG","GGGGG"],(function(t,e,n,i){e[i.substr(0,2)]=k(t)})),mt(["gg","GG"],(function(t,e,n,i){e[i]=a.parseTwoDigitYear(t)})),j("Q",0,"Qo","quarter"),L("quarter","Q"),Y("quarter",7),dt("Q",q),gt("Q",(function(t,e){e[bt]=3*(k(t)-1)})),j("D",["DD",2],"Do","date"),L("date","D"),Y("date",9),dt("D",J),dt("DD",J,Z),dt("Do",(function(t,e){return t?e._dayOfMonthOrdinalParse||e._ordinalParse:e._dayOfMonthOrdinalParseLenient})),gt(["D","DD"],yt),gt("Do",(function(t,e){e[yt]=k(t.match(J)[0])}));var bn=Ot("Date",!0);j("DDD",["DDDD",3],"DDDo","dayOfYear"),L("dayOfYear","DDD"),Y("dayOfYear",4),dt("DDD",et),dt("DDDD",$),gt(["DDD","DDDD"],(function(t,e,n){n._dayOfYear=k(t)})),j("m",["mm",2],0,"minute"),L("minute","m"),Y("minute",14),dt("m",J),dt("mm",J,Z),gt(["m","mm"],_t);var yn=Ot("Minutes",!1);j("s",["ss",2],0,"second"),L("second","s"),Y("second",15),dt("s",J),dt("ss",J,Z),gt(["s","ss"],wt);var xn,_n=Ot("Seconds",!1);for(j("S",0,0,(function(){return~~(this.millisecond()/100)})),j(0,["SS",2],0,(function(){return~~(this.millisecond()/10)})),j(0,["SSS",3],0,"millisecond"),j(0,["SSSS",4],0,(function(){return 10*this.millisecond()})),j(0,["SSSSS",5],0,(function(){return 100*this.millisecond()})),j(0,["SSSSSS",6],0,(function(){return 1e3*this.millisecond()})),j(0,["SSSSSSS",7],0,(function(){return 1e4*this.millisecond()})),j(0,["SSSSSSSS",8],0,(function(){return 1e5*this.millisecond()})),j(0,["SSSSSSSSS",9],0,(function(){return 1e6*this.millisecond()})),L("millisecond","ms"),Y("millisecond",16),dt("S",et,q),dt("SS",et,Z),dt("SSS",et,$),xn="SSSS";xn.length<=9;xn+="S")dt(xn,at);function wn(t,e){e[kt]=k(1e3*("0."+t))}for(xn="S";xn.length<=9;xn+="S")gt(xn,wn);var kn=Ot("Milliseconds",!1);j("z",0,0,"zoneAbbr"),j("zz",0,0,"zoneName");var Mn=x.prototype;function Sn(t){return t}Mn.add=en,Mn.calendar=function(t,e){var n=t||Le(),i=Ue(n,this).startOf("day"),r=a.calendarFormat(this,i)||"sameElse",o=e&&(O(e[r])?e[r].call(this,n):e[r]);return this.format(o||this.localeData().calendar(r,this,Le(n)))},Mn.clone=function(){return new x(this)},Mn.diff=function(t,e,n){var i,a,r;if(!this.isValid())return NaN;if(!(i=Ue(t,this)).isValid())return NaN;switch(a=6e4*(i.utcOffset()-this.utcOffset()),e=R(e)){case"year":r=an(this,i)/12;break;case"month":r=an(this,i);break;case"quarter":r=an(this,i)/3;break;case"second":r=(this-i)/1e3;break;case"minute":r=(this-i)/6e4;break;case"hour":r=(this-i)/36e5;break;case"day":r=(this-i-a)/864e5;break;case"week":r=(this-i-a)/6048e5;break;default:r=this-i}return n?r:w(r)},Mn.endOf=function(t){var e;if(void 0===(t=R(t))||"millisecond"===t||!this.isValid())return this;var n=this._isUTC?gn:fn;switch(t){case"year":e=n(this.year()+1,0,1)-1;break;case"quarter":e=n(this.year(),this.month()-this.month()%3+3,1)-1;break;case"month":e=n(this.year(),this.month()+1,1)-1;break;case"week":e=n(this.year(),this.month(),this.date()-this.weekday()+7)-1;break;case"isoWeek":e=n(this.year(),this.month(),this.date()-(this.isoWeekday()-1)+7)-1;break;case"day":case"date":e=n(this.year(),this.month(),this.date()+1)-1;break;case"hour":e=this._d.valueOf(),e+=dn-cn(e+(this._isUTC?0:this.utcOffset()*un),dn)-1;break;case"minute":e=this._d.valueOf(),e+=un-cn(e,un)-1;break;case"second":e=this._d.valueOf(),e+=ln-cn(e,ln)-1}return this._d.setTime(e),a.updateOffset(this,!0),this},Mn.format=function(t){t||(t=this.isUtc()?a.defaultFormatUtc:a.defaultFormat);var e=U(this,t);return this.localeData().postformat(e)},Mn.from=function(t,e){return this.isValid()&&(_(t)&&t.isValid()||Le(t).isValid())?Xe({to:this,from:t}).locale(this.locale()).humanize(!e):this.localeData().invalidDate()},Mn.fromNow=function(t){return this.from(Le(),t)},Mn.to=function(t,e){return this.isValid()&&(_(t)&&t.isValid()||Le(t).isValid())?Xe({from:this,to:t}).locale(this.locale()).humanize(!e):this.localeData().invalidDate()},Mn.toNow=function(t){return this.to(Le(),t)},Mn.get=function(t){return O(this[t=R(t)])?this[t]():this},Mn.invalidAt=function(){return g(this).overflow},Mn.isAfter=function(t,e){var n=_(t)?t:Le(t);return!(!this.isValid()||!n.isValid())&&("millisecond"===(e=R(e)||"millisecond")?this.valueOf()>n.valueOf():n.valueOf()9999?U(n,e?"YYYYYY-MM-DD[T]HH:mm:ss.SSS[Z]":"YYYYYY-MM-DD[T]HH:mm:ss.SSSZ"):O(Date.prototype.toISOString)?e?this.toDate().toISOString():new Date(this.valueOf()+60*this.utcOffset()*1e3).toISOString().replace("Z",U(n,"Z")):U(n,e?"YYYY-MM-DD[T]HH:mm:ss.SSS[Z]":"YYYY-MM-DD[T]HH:mm:ss.SSSZ")},Mn.inspect=function(){if(!this.isValid())return"moment.invalid(/* "+this._i+" */)";var t="moment",e="";this.isLocal()||(t=0===this.utcOffset()?"moment.utc":"moment.parseZone",e="Z");var n="["+t+'("]',i=0<=this.year()&&this.year()<=9999?"YYYY":"YYYYYY",a=e+'[")]';return this.format(n+i+"-MM-DD[T]HH:mm:ss.SSS"+a)},Mn.toJSON=function(){return this.isValid()?this.toISOString():null},Mn.toString=function(){return this.clone().locale("en").format("ddd MMM DD YYYY HH:mm:ss [GMT]ZZ")},Mn.unix=function(){return Math.floor(this.valueOf()/1e3)},Mn.valueOf=function(){return this._d.valueOf()-6e4*(this._offset||0)},Mn.creationData=function(){return{input:this._i,format:this._f,locale:this._locale,isUTC:this._isUTC,strict:this._strict}},Mn.year=Tt,Mn.isLeapYear=function(){return Ct(this.year())},Mn.weekYear=function(t){return pn.call(this,t,this.week(),this.weekday(),this.localeData()._week.dow,this.localeData()._week.doy)},Mn.isoWeekYear=function(t){return pn.call(this,t,this.isoWeek(),this.isoWeekday(),1,4)},Mn.quarter=Mn.quarters=function(t){return null==t?Math.ceil((this.month()+1)/3):this.month(3*(t-1)+this.month()%3)},Mn.month=zt,Mn.daysInMonth=function(){return It(this.year(),this.month())},Mn.week=Mn.weeks=function(t){var e=this.localeData().week(this);return null==t?e:this.add(7*(t-e),"d")},Mn.isoWeek=Mn.isoWeeks=function(t){var e=qt(this,1,4).week;return null==t?e:this.add(7*(t-e),"d")},Mn.weeksInYear=function(){var t=this.localeData()._week;return Zt(this.year(),t.dow,t.doy)},Mn.isoWeeksInYear=function(){return Zt(this.year(),1,4)},Mn.date=bn,Mn.day=Mn.days=function(t){if(!this.isValid())return null!=t?this:NaN;var e=this._isUTC?this._d.getUTCDay():this._d.getDay();return null!=t?(t=function(t,e){return"string"!=typeof t?t:isNaN(t)?"number"==typeof(t=e.weekdaysParse(t))?t:null:parseInt(t,10)}(t,this.localeData()),this.add(t-e,"d")):e},Mn.weekday=function(t){if(!this.isValid())return null!=t?this:NaN;var e=(this.day()+7-this.localeData()._week.dow)%7;return null==t?e:this.add(t-e,"d")},Mn.isoWeekday=function(t){if(!this.isValid())return null!=t?this:NaN;if(null!=t){var e=function(t,e){return"string"==typeof t?e.weekdaysParse(t)%7||7:isNaN(t)?null:t}(t,this.localeData());return this.day(this.day()%7?e:e-7)}return this.day()||7},Mn.dayOfYear=function(t){var e=Math.round((this.clone().startOf("day")-this.clone().startOf("year"))/864e5)+1;return null==t?e:this.add(t-e,"d")},Mn.hour=Mn.hours=le,Mn.minute=Mn.minutes=yn,Mn.second=Mn.seconds=_n,Mn.millisecond=Mn.milliseconds=kn,Mn.utcOffset=function(t,e,n){var i,r=this._offset||0;if(!this.isValid())return null!=t?this:NaN;if(null!=t){if("string"==typeof t){if(null===(t=je(st,t)))return this}else Math.abs(t)<16&&!n&&(t*=60);return!this._isUTC&&e&&(i=Ge(this)),this._offset=t,this._isUTC=!0,null!=i&&this.add(i,"m"),r!==t&&(!e||this._changeInProgress?tn(this,Xe(t-r,"m"),1,!1):this._changeInProgress||(this._changeInProgress=!0,a.updateOffset(this,!0),this._changeInProgress=null)),this}return this._isUTC?r:Ge(this)},Mn.utc=function(t){return this.utcOffset(0,t)},Mn.local=function(t){return this._isUTC&&(this.utcOffset(0,t),this._isUTC=!1,t&&this.subtract(Ge(this),"m")),this},Mn.parseZone=function(){if(null!=this._tzm)this.utcOffset(this._tzm,!1,!0);else if("string"==typeof this._i){var t=je(ot,this._i);null!=t?this.utcOffset(t):this.utcOffset(0,!0)}return this},Mn.hasAlignedHourOffset=function(t){return!!this.isValid()&&(t=t?Le(t).utcOffset():0,(this.utcOffset()-t)%60==0)},Mn.isDST=function(){return this.utcOffset()>this.clone().month(0).utcOffset()||this.utcOffset()>this.clone().month(5).utcOffset()},Mn.isLocal=function(){return!!this.isValid()&&!this._isUTC},Mn.isUtcOffset=function(){return!!this.isValid()&&this._isUTC},Mn.isUtc=qe,Mn.isUTC=qe,Mn.zoneAbbr=function(){return this._isUTC?"UTC":""},Mn.zoneName=function(){return this._isUTC?"Coordinated Universal Time":""},Mn.dates=D("dates accessor is deprecated. Use date instead.",bn),Mn.months=D("months accessor is deprecated. Use month instead",zt),Mn.years=D("years accessor is deprecated. Use year instead",Tt),Mn.zone=D("moment().zone is deprecated, use moment().utcOffset instead. http://momentjs.com/guides/#/warnings/zone/",(function(t,e){return null!=t?("string"!=typeof t&&(t=-t),this.utcOffset(t,e),this):-this.utcOffset()})),Mn.isDSTShifted=D("isDSTShifted is deprecated. See http://momentjs.com/guides/#/warnings/dst-shifted/ for more information",(function(){if(!s(this._isDSTShifted))return this._isDSTShifted;var t={};if(b(t,this),(t=Fe(t))._a){var e=t._isUTC?f(t._a):Le(t._a);this._isDSTShifted=this.isValid()&&M(t._a,e.toArray())>0}else this._isDSTShifted=!1;return this._isDSTShifted}));var Dn=F.prototype;function Cn(t,e,n,i){var a=pe(),r=f().set(i,e);return a[n](r,t)}function Pn(t,e,n){if(l(t)&&(e=t,t=void 0),t=t||"",null!=e)return Cn(t,e,n,"month");var i,a=[];for(i=0;i<12;i++)a[i]=Cn(t,i,n,"month");return a}function Tn(t,e,n,i){"boolean"==typeof t?(l(e)&&(n=e,e=void 0),e=e||""):(n=e=t,t=!1,l(e)&&(n=e,e=void 0),e=e||"");var a,r=pe(),o=t?r._week.dow:0;if(null!=n)return Cn(e,(n+o)%7,i,"day");var s=[];for(a=0;a<7;a++)s[a]=Cn(e,(a+o)%7,i,"day");return s}Dn.calendar=function(t,e,n){var i=this._calendar[t]||this._calendar.sameElse;return O(i)?i.call(e,n):i},Dn.longDateFormat=function(t){var e=this._longDateFormat[t],n=this._longDateFormat[t.toUpperCase()];return e||!n?e:(this._longDateFormat[t]=n.replace(/MMMM|MM|DD|dddd/g,(function(t){return t.slice(1)})),this._longDateFormat[t])},Dn.invalidDate=function(){return this._invalidDate},Dn.ordinal=function(t){return this._ordinal.replace("%d",t)},Dn.preparse=Sn,Dn.postformat=Sn,Dn.relativeTime=function(t,e,n,i){var a=this._relativeTime[n];return O(a)?a(t,e,n,i):a.replace(/%d/i,t)},Dn.pastFuture=function(t,e){var n=this._relativeTime[t>0?"future":"past"];return O(n)?n(e):n.replace(/%s/i,e)},Dn.set=function(t){var e,n;for(n in t)O(e=t[n])?this[n]=e:this["_"+n]=e;this._config=t,this._dayOfMonthOrdinalParseLenient=new RegExp((this._dayOfMonthOrdinalParse.source||this._ordinalParse.source)+"|"+/\d{1,2}/.source)},Dn.months=function(t,e){return t?r(this._months)?this._months[t.month()]:this._months[(this._months.isFormat||Lt).test(e)?"format":"standalone"][t.month()]:r(this._months)?this._months:this._months.standalone},Dn.monthsShort=function(t,e){return t?r(this._monthsShort)?this._monthsShort[t.month()]:this._monthsShort[Lt.test(e)?"format":"standalone"][t.month()]:r(this._monthsShort)?this._monthsShort:this._monthsShort.standalone},Dn.monthsParse=function(t,e,n){var i,a,r;if(this._monthsParseExact)return Wt.call(this,t,e,n);for(this._monthsParse||(this._monthsParse=[],this._longMonthsParse=[],this._shortMonthsParse=[]),i=0;i<12;i++){if(a=f([2e3,i]),n&&!this._longMonthsParse[i]&&(this._longMonthsParse[i]=new RegExp("^"+this.months(a,"").replace(".","")+"$","i"),this._shortMonthsParse[i]=new RegExp("^"+this.monthsShort(a,"").replace(".","")+"$","i")),n||this._monthsParse[i]||(r="^"+this.months(a,"")+"|^"+this.monthsShort(a,""),this._monthsParse[i]=new RegExp(r.replace(".",""),"i")),n&&"MMMM"===e&&this._longMonthsParse[i].test(t))return i;if(n&&"MMM"===e&&this._shortMonthsParse[i].test(t))return i;if(!n&&this._monthsParse[i].test(t))return i}},Dn.monthsRegex=function(t){return this._monthsParseExact?(h(this,"_monthsRegex")||Ht.call(this),t?this._monthsStrictRegex:this._monthsRegex):(h(this,"_monthsRegex")||(this._monthsRegex=Vt),this._monthsStrictRegex&&t?this._monthsStrictRegex:this._monthsRegex)},Dn.monthsShortRegex=function(t){return this._monthsParseExact?(h(this,"_monthsRegex")||Ht.call(this),t?this._monthsShortStrictRegex:this._monthsShortRegex):(h(this,"_monthsShortRegex")||(this._monthsShortRegex=Et),this._monthsShortStrictRegex&&t?this._monthsShortStrictRegex:this._monthsShortRegex)},Dn.week=function(t){return qt(t,this._week.dow,this._week.doy).week},Dn.firstDayOfYear=function(){return this._week.doy},Dn.firstDayOfWeek=function(){return this._week.dow},Dn.weekdays=function(t,e){var n=r(this._weekdays)?this._weekdays:this._weekdays[t&&!0!==t&&this._weekdays.isFormat.test(e)?"format":"standalone"];return!0===t?$t(n,this._week.dow):t?n[t.day()]:n},Dn.weekdaysMin=function(t){return!0===t?$t(this._weekdaysMin,this._week.dow):t?this._weekdaysMin[t.day()]:this._weekdaysMin},Dn.weekdaysShort=function(t){return!0===t?$t(this._weekdaysShort,this._week.dow):t?this._weekdaysShort[t.day()]:this._weekdaysShort},Dn.weekdaysParse=function(t,e,n){var i,a,r;if(this._weekdaysParseExact)return Qt.call(this,t,e,n);for(this._weekdaysParse||(this._weekdaysParse=[],this._minWeekdaysParse=[],this._shortWeekdaysParse=[],this._fullWeekdaysParse=[]),i=0;i<7;i++){if(a=f([2e3,1]).day(i),n&&!this._fullWeekdaysParse[i]&&(this._fullWeekdaysParse[i]=new RegExp("^"+this.weekdays(a,"").replace(".","\\.?")+"$","i"),this._shortWeekdaysParse[i]=new RegExp("^"+this.weekdaysShort(a,"").replace(".","\\.?")+"$","i"),this._minWeekdaysParse[i]=new RegExp("^"+this.weekdaysMin(a,"").replace(".","\\.?")+"$","i")),this._weekdaysParse[i]||(r="^"+this.weekdays(a,"")+"|^"+this.weekdaysShort(a,"")+"|^"+this.weekdaysMin(a,""),this._weekdaysParse[i]=new RegExp(r.replace(".",""),"i")),n&&"dddd"===e&&this._fullWeekdaysParse[i].test(t))return i;if(n&&"ddd"===e&&this._shortWeekdaysParse[i].test(t))return i;if(n&&"dd"===e&&this._minWeekdaysParse[i].test(t))return i;if(!n&&this._weekdaysParse[i].test(t))return i}},Dn.weekdaysRegex=function(t){return this._weekdaysParseExact?(h(this,"_weekdaysRegex")||ie.call(this),t?this._weekdaysStrictRegex:this._weekdaysRegex):(h(this,"_weekdaysRegex")||(this._weekdaysRegex=te),this._weekdaysStrictRegex&&t?this._weekdaysStrictRegex:this._weekdaysRegex)},Dn.weekdaysShortRegex=function(t){return this._weekdaysParseExact?(h(this,"_weekdaysRegex")||ie.call(this),t?this._weekdaysShortStrictRegex:this._weekdaysShortRegex):(h(this,"_weekdaysShortRegex")||(this._weekdaysShortRegex=ee),this._weekdaysShortStrictRegex&&t?this._weekdaysShortStrictRegex:this._weekdaysShortRegex)},Dn.weekdaysMinRegex=function(t){return this._weekdaysParseExact?(h(this,"_weekdaysRegex")||ie.call(this),t?this._weekdaysMinStrictRegex:this._weekdaysMinRegex):(h(this,"_weekdaysMinRegex")||(this._weekdaysMinRegex=ne),this._weekdaysMinStrictRegex&&t?this._weekdaysMinStrictRegex:this._weekdaysMinRegex)},Dn.isPM=function(t){return"p"===(t+"").toLowerCase().charAt(0)},Dn.meridiem=function(t,e,n){return t>11?n?"pm":"PM":n?"am":"AM"},ge("en",{dayOfMonthOrdinalParse:/\d{1,2}(th|st|nd|rd)/,ordinal:function(t){var e=t%10;return t+(1===k(t%100/10)?"th":1===e?"st":2===e?"nd":3===e?"rd":"th")}}),a.lang=D("moment.lang is deprecated. Use moment.locale instead.",ge),a.langData=D("moment.langData is deprecated. Use moment.localeData instead.",pe);var On=Math.abs;function An(t,e,n,i){var a=Xe(e,n);return t._milliseconds+=i*a._milliseconds,t._days+=i*a._days,t._months+=i*a._months,t._bubble()}function Fn(t){return t<0?Math.floor(t):Math.ceil(t)}function In(t){return 4800*t/146097}function Ln(t){return 146097*t/4800}function Rn(t){return function(){return this.as(t)}}var Nn=Rn("ms"),Wn=Rn("s"),Yn=Rn("m"),zn=Rn("h"),En=Rn("d"),Vn=Rn("w"),Hn=Rn("M"),Bn=Rn("Q"),jn=Rn("y");function Un(t){return function(){return this.isValid()?this._data[t]:NaN}}var Gn=Un("milliseconds"),qn=Un("seconds"),Zn=Un("minutes"),$n=Un("hours"),Xn=Un("days"),Kn=Un("months"),Jn=Un("years"),Qn=Math.round,ti={ss:44,s:45,m:45,h:22,d:26,M:11};function ei(t,e,n,i,a){return a.relativeTime(e||1,!!n,t,i)}var ni=Math.abs;function ii(t){return(t>0)-(t<0)||+t}function ai(){if(!this.isValid())return this.localeData().invalidDate();var t,e,n=ni(this._milliseconds)/1e3,i=ni(this._days),a=ni(this._months);t=w(n/60),e=w(t/60),n%=60,t%=60;var r=w(a/12),o=a%=12,s=i,l=e,u=t,d=n?n.toFixed(3).replace(/\.?0+$/,""):"",h=this.asSeconds();if(!h)return"P0D";var c=h<0?"-":"",f=ii(this._months)!==ii(h)?"-":"",g=ii(this._days)!==ii(h)?"-":"",m=ii(this._milliseconds)!==ii(h)?"-":"";return c+"P"+(r?f+r+"Y":"")+(o?f+o+"M":"")+(s?g+s+"D":"")+(l||u||d?"T":"")+(l?m+l+"H":"")+(u?m+u+"M":"")+(d?m+d+"S":"")}var ri=ze.prototype;return ri.isValid=function(){return this._isValid},ri.abs=function(){var t=this._data;return this._milliseconds=On(this._milliseconds),this._days=On(this._days),this._months=On(this._months),t.milliseconds=On(t.milliseconds),t.seconds=On(t.seconds),t.minutes=On(t.minutes),t.hours=On(t.hours),t.months=On(t.months),t.years=On(t.years),this},ri.add=function(t,e){return An(this,t,e,1)},ri.subtract=function(t,e){return An(this,t,e,-1)},ri.as=function(t){if(!this.isValid())return NaN;var e,n,i=this._milliseconds;if("month"===(t=R(t))||"quarter"===t||"year"===t)switch(e=this._days+i/864e5,n=this._months+In(e),t){case"month":return n;case"quarter":return n/3;case"year":return n/12}else switch(e=this._days+Math.round(Ln(this._months)),t){case"week":return e/7+i/6048e5;case"day":return e+i/864e5;case"hour":return 24*e+i/36e5;case"minute":return 1440*e+i/6e4;case"second":return 86400*e+i/1e3;case"millisecond":return Math.floor(864e5*e)+i;default:throw new Error("Unknown unit "+t)}},ri.asMilliseconds=Nn,ri.asSeconds=Wn,ri.asMinutes=Yn,ri.asHours=zn,ri.asDays=En,ri.asWeeks=Vn,ri.asMonths=Hn,ri.asQuarters=Bn,ri.asYears=jn,ri.valueOf=function(){return this.isValid()?this._milliseconds+864e5*this._days+this._months%12*2592e6+31536e6*k(this._months/12):NaN},ri._bubble=function(){var t,e,n,i,a,r=this._milliseconds,o=this._days,s=this._months,l=this._data;return r>=0&&o>=0&&s>=0||r<=0&&o<=0&&s<=0||(r+=864e5*Fn(Ln(s)+o),o=0,s=0),l.milliseconds=r%1e3,t=w(r/1e3),l.seconds=t%60,e=w(t/60),l.minutes=e%60,n=w(e/60),l.hours=n%24,o+=w(n/24),a=w(In(o)),s+=a,o-=Fn(Ln(a)),i=w(s/12),s%=12,l.days=o,l.months=s,l.years=i,this},ri.clone=function(){return Xe(this)},ri.get=function(t){return t=R(t),this.isValid()?this[t+"s"]():NaN},ri.milliseconds=Gn,ri.seconds=qn,ri.minutes=Zn,ri.hours=$n,ri.days=Xn,ri.weeks=function(){return w(this.days()/7)},ri.months=Kn,ri.years=Jn,ri.humanize=function(t){if(!this.isValid())return this.localeData().invalidDate();var e=this.localeData(),n=function(t,e,n){var i=Xe(t).abs(),a=Qn(i.as("s")),r=Qn(i.as("m")),o=Qn(i.as("h")),s=Qn(i.as("d")),l=Qn(i.as("M")),u=Qn(i.as("y")),d=a<=ti.ss&&["s",a]||a0,d[4]=n,ei.apply(null,d)}(this,!t,e);return t&&(n=e.pastFuture(+this,n)),e.postformat(n)},ri.toISOString=ai,ri.toString=ai,ri.toJSON=ai,ri.locale=rn,ri.localeData=sn,ri.toIsoString=D("toIsoString() is deprecated. Please use toISOString() instead (notice the capitals)",ai),ri.lang=on,j("X",0,0,"unix"),j("x",0,0,"valueOf"),dt("x",rt),dt("X",/[+-]?\d+(\.\d{1,3})?/),gt("X",(function(t,e,n){n._d=new Date(1e3*parseFloat(t,10))})),gt("x",(function(t,e,n){n._d=new Date(k(t))})),a.version="2.24.0",n=Le,a.fn=Mn,a.min=function(){return We("isBefore",[].slice.call(arguments,0))},a.max=function(){return We("isAfter",[].slice.call(arguments,0))},a.now=function(){return Date.now?Date.now():+new Date},a.utc=f,a.unix=function(t){return Le(1e3*t)},a.months=function(t,e){return Pn(t,e,"months")},a.isDate=u,a.locale=ge,a.invalid=p,a.duration=Xe,a.isMoment=_,a.weekdays=function(t,e,n){return Tn(t,e,n,"weekdays")},a.parseZone=function(){return Le.apply(null,arguments).parseZone()},a.localeData=pe,a.isDuration=Ee,a.monthsShort=function(t,e){return Pn(t,e,"monthsShort")},a.weekdaysMin=function(t,e,n){return Tn(t,e,n,"weekdaysMin")},a.defineLocale=me,a.updateLocale=function(t,e){if(null!=e){var n,i,a=ue;null!=(i=fe(t))&&(a=i._config),e=A(a,e),(n=new F(e)).parentLocale=de[t],de[t]=n,ge(t)}else null!=de[t]&&(null!=de[t].parentLocale?de[t]=de[t].parentLocale:null!=de[t]&&delete de[t]);return de[t]},a.locales=function(){return C(de)},a.weekdaysShort=function(t,e,n){return Tn(t,e,n,"weekdaysShort")},a.normalizeUnits=R,a.relativeTimeRounding=function(t){return void 0===t?Qn:"function"==typeof t&&(Qn=t,!0)},a.relativeTimeThreshold=function(t,e){return void 0!==ti[t]&&(void 0===e?ti[t]:(ti[t]=e,"s"===t&&(ti.ss=e-1),!0))},a.calendarFormat=function(t,e){var n=t.diff(e,"days",!0);return n<-6?"sameElse":n<-1?"lastWeek":n<0?"lastDay":n<1?"sameDay":n<2?"nextDay":n<7?"nextWeek":"sameElse"},a.prototype=Mn,a.HTML5_FMT={DATETIME_LOCAL:"YYYY-MM-DDTHH:mm",DATETIME_LOCAL_SECONDS:"YYYY-MM-DDTHH:mm:ss",DATETIME_LOCAL_MS:"YYYY-MM-DDTHH:mm:ss.SSS",DATE:"YYYY-MM-DD",TIME:"HH:mm",TIME_SECONDS:"HH:mm:ss",TIME_MS:"HH:mm:ss.SSS",WEEK:"GGGG-[W]WW",MONTH:"YYYY-MM"},a}()})),mi={datetime:"MMM D, YYYY, h:mm:ss a",millisecond:"h:mm:ss.SSS a",second:"h:mm:ss a",minute:"h:mm a",hour:"hA",day:"MMM D",week:"ll",month:"MMM YYYY",quarter:"[Q]Q - YYYY",year:"YYYY"};rn._date.override("function"==typeof gi?{_id:"moment",formats:function(){return mi},parse:function(t,e){return"string"==typeof t&&"string"==typeof e?t=gi(t,e):t instanceof gi||(t=gi(t)),t.isValid()?t.valueOf():null},format:function(t,e){return gi(t).format(e)},add:function(t,e,n){return gi(t).add(e,n).valueOf()},diff:function(t,e,n){return gi(t).diff(gi(e),n)},startOf:function(t,e,n){return t=gi(t),"isoWeek"===e?t.isoWeekday(n).valueOf():t.startOf(e).valueOf()},endOf:function(t,e){return gi(t).endOf(e).valueOf()},_create:function(t){return gi(t)}}:{}),W._set("global",{plugins:{filler:{propagate:!0}}});var pi={dataset:function(t){var e=t.fill,n=t.chart,i=n.getDatasetMeta(e),a=i&&n.isDatasetVisible(e)&&i.dataset._children||[],r=a.length||0;return r?function(t,e){return e=n)&&i;switch(r){case"bottom":return"start";case"top":return"end";case"zero":return"origin";case"origin":case"start":case"end":return r;default:return!1}}function bi(t){return(t.el._scale||{}).getPointPositionForValue?function(t){var e,n,i,a,r,o=t.el._scale,s=o.options,l=o.chart.data.labels.length,u=t.fill,d=[];if(!l)return null;for(e=s.ticks.reverse?o.max:o.min,n=s.ticks.reverse?o.min:o.max,i=o.getPointPositionForValue(0,e),a=0;a0;--r)H.canvas.lineTo(t,n[r],n[r-1],!0);else for(o=n[0].cx,s=n[0].cy,l=Math.sqrt(Math.pow(n[0].x-o,2)+Math.pow(n[0].y-s,2)),r=a-1;r>0;--r)t.arc(o,s,l,n[r].angle,n[r-1].angle,!0)}}function ki(t,e,n,i,a,r){var o,s,l,u,d,h,c,f,g=e.length,m=i.spanGaps,p=[],v=[],b=0,y=0;for(t.beginPath(),o=0,s=g;o=0;--n)(e=l[n].$filler)&&e.visible&&(a=(i=e.el)._view,r=i._children||[],o=e.mapper,s=a.backgroundColor||W.global.defaultColor,o&&s&&r.length&&(H.canvas.clipArea(u,t.chartArea),ki(u,r,o,a,s,i._loop),H.canvas.unclipArea(u)))}},Si=H.rtl.getRtlAdapter,Di=H.noop,Ci=H.valueOrDefault;function Pi(t,e){return t.usePointStyle&&t.boxWidth>e?e:t.boxWidth}W._set("global",{legend:{display:!0,position:"top",align:"center",fullWidth:!0,reverse:!1,weight:1e3,onClick:function(t,e){var n=e.datasetIndex,i=this.chart,a=i.getDatasetMeta(n);a.hidden=null===a.hidden?!i.data.datasets[n].hidden:null,i.update()},onHover:null,onLeave:null,labels:{boxWidth:40,padding:10,generateLabels:function(t){var e=t.data.datasets,n=t.options.legend||{},i=n.labels&&n.labels.usePointStyle;return t._getSortedDatasetMetas().map((function(n){var a=n.controller.getStyle(i?0:void 0);return{text:e[n.index].label,fillStyle:a.backgroundColor,hidden:!t.isDatasetVisible(n.index),lineCap:a.borderCapStyle,lineDash:a.borderDash,lineDashOffset:a.borderDashOffset,lineJoin:a.borderJoinStyle,lineWidth:a.borderWidth,strokeStyle:a.borderColor,pointStyle:a.pointStyle,rotation:a.rotation,datasetIndex:n.index}}),this)}}},legendCallback:function(t){var e,n,i,a=document.createElement("ul"),r=t.data.datasets;for(a.setAttribute("class",t.id+"-legend"),e=0,n=r.length;el.width)&&(h+=o+n.padding,d[d.length-(e>0?0:1)]=0),s[e]={left:0,top:0,width:i,height:o},d[d.length-1]+=i+n.padding})),l.height+=h}else{var c=n.padding,f=t.columnWidths=[],g=t.columnHeights=[],m=n.padding,p=0,v=0;H.each(t.legendItems,(function(t,e){var i=Pi(n,o)+o/2+a.measureText(t.text).width;e>0&&v+o+2*c>l.height&&(m+=p+n.padding,f.push(p),g.push(v),p=0,v=0),p=Math.max(p,i),v+=o+c,s[e]={left:0,top:0,width:i,height:o}})),m+=p,f.push(p),g.push(v),l.width+=m}t.width=l.width,t.height=l.height}else t.width=l.width=t.height=l.height=0},afterFit:Di,isHorizontal:function(){return"top"===this.options.position||"bottom"===this.options.position},draw:function(){var t=this,e=t.options,n=e.labels,i=W.global,a=i.defaultColor,r=i.elements.line,o=t.height,s=t.columnHeights,l=t.width,u=t.lineWidths;if(e.display){var d,h=Si(e.rtl,t.left,t.minSize.width),c=t.ctx,f=Ci(n.fontColor,i.defaultFontColor),g=H.options._parseFont(n),m=g.size;c.textAlign=h.textAlign("left"),c.textBaseline="middle",c.lineWidth=.5,c.strokeStyle=f,c.fillStyle=f,c.font=g.string;var p=Pi(n,m),v=t.legendHitBoxes,b=function(t,i){switch(e.align){case"start":return n.padding;case"end":return t-i;default:return(t-i+n.padding)/2}},y=t.isHorizontal();d=y?{x:t.left+b(l,u[0]),y:t.top+n.padding,line:0}:{x:t.left+n.padding,y:t.top+b(o,s[0]),line:0},H.rtl.overrideTextDirection(t.ctx,e.textDirection);var x=m+n.padding;H.each(t.legendItems,(function(e,i){var f=c.measureText(e.text).width,g=p+m/2+f,_=d.x,w=d.y;h.setWidth(t.minSize.width),y?i>0&&_+g+n.padding>t.left+t.minSize.width&&(w=d.y+=x,d.line++,_=d.x=t.left+b(l,u[d.line])):i>0&&w+x>t.top+t.minSize.height&&(_=d.x=_+t.columnWidths[d.line]+n.padding,d.line++,w=d.y=t.top+b(o,s[d.line]));var k=h.x(_);!function(t,e,i){if(!(isNaN(p)||p<=0)){c.save();var o=Ci(i.lineWidth,r.borderWidth);if(c.fillStyle=Ci(i.fillStyle,a),c.lineCap=Ci(i.lineCap,r.borderCapStyle),c.lineDashOffset=Ci(i.lineDashOffset,r.borderDashOffset),c.lineJoin=Ci(i.lineJoin,r.borderJoinStyle),c.lineWidth=o,c.strokeStyle=Ci(i.strokeStyle,a),c.setLineDash&&c.setLineDash(Ci(i.lineDash,r.borderDash)),n&&n.usePointStyle){var s=p*Math.SQRT2/2,l=h.xPlus(t,p/2),u=e+m/2;H.canvas.drawPoint(c,i.pointStyle,s,l,u,i.rotation)}else c.fillRect(h.leftForLtr(t,p),e,p,m),0!==o&&c.strokeRect(h.leftForLtr(t,p),e,p,m);c.restore()}}(k,w,e),v[i].left=h.leftForLtr(k,v[i].width),v[i].top=w,function(t,e,n,i){var a=m/2,r=h.xPlus(t,p+a),o=e+a;c.fillText(n.text,r,o),n.hidden&&(c.beginPath(),c.lineWidth=2,c.moveTo(r,o),c.lineTo(h.xPlus(r,i),o),c.stroke())}(k,w,e,f),y?d.x+=g+n.padding:d.y+=x})),H.rtl.restoreTextDirection(t.ctx,e.textDirection)}},_getLegendItemAt:function(t,e){var n,i,a,r=this;if(t>=r.left&&t<=r.right&&e>=r.top&&e<=r.bottom)for(a=r.legendHitBoxes,n=0;n=(i=a[n]).left&&t<=i.left+i.width&&e>=i.top&&e<=i.top+i.height)return r.legendItems[n];return null},handleEvent:function(t){var e,n=this,i=n.options,a="mouseup"===t.type?"click":t.type;if("mousemove"===a){if(!i.onHover&&!i.onLeave)return}else{if("click"!==a)return;if(!i.onClick)return}e=n._getLegendItemAt(t.x,t.y),"click"===a?e&&i.onClick&&i.onClick.call(n,t.native,e):(i.onLeave&&e!==n._hoveredItem&&(n._hoveredItem&&i.onLeave.call(n,t.native,n._hoveredItem),n._hoveredItem=e),i.onHover&&e&&i.onHover.call(n,t.native,e))}});function Oi(t,e){var n=new Ti({ctx:t.ctx,options:e,chart:t});me.configure(t,n,e),me.addBox(t,n),t.legend=n}var Ai={id:"legend",_element:Ti,beforeInit:function(t){var e=t.options.legend;e&&Oi(t,e)},beforeUpdate:function(t){var e=t.options.legend,n=t.legend;e?(H.mergeIf(e,W.global.legend),n?(me.configure(t,n,e),n.options=e):Oi(t,e)):n&&(me.removeBox(t,n),delete t.legend)},afterEvent:function(t,e){var n=t.legend;n&&n.handleEvent(e)}},Fi=H.noop;W._set("global",{title:{display:!1,fontStyle:"bold",fullWidth:!0,padding:10,position:"top",text:"",weight:2e3}});var Ii=$.extend({initialize:function(t){H.extend(this,t),this.legendHitBoxes=[]},beforeUpdate:Fi,update:function(t,e,n){var i=this;return i.beforeUpdate(),i.maxWidth=t,i.maxHeight=e,i.margins=n,i.beforeSetDimensions(),i.setDimensions(),i.afterSetDimensions(),i.beforeBuildLabels(),i.buildLabels(),i.afterBuildLabels(),i.beforeFit(),i.fit(),i.afterFit(),i.afterUpdate(),i.minSize},afterUpdate:Fi,beforeSetDimensions:Fi,setDimensions:function(){var t=this;t.isHorizontal()?(t.width=t.maxWidth,t.left=0,t.right=t.width):(t.height=t.maxHeight,t.top=0,t.bottom=t.height),t.paddingLeft=0,t.paddingTop=0,t.paddingRight=0,t.paddingBottom=0,t.minSize={width:0,height:0}},afterSetDimensions:Fi,beforeBuildLabels:Fi,buildLabels:Fi,afterBuildLabels:Fi,beforeFit:Fi,fit:function(){var t,e=this,n=e.options,i=e.minSize={},a=e.isHorizontal();n.display?(t=(H.isArray(n.text)?n.text.length:1)*H.options._parseFont(n).lineHeight+2*n.padding,e.width=i.width=a?e.maxWidth:t,e.height=i.height=a?t:e.maxHeight):e.width=i.width=e.height=i.height=0},afterFit:Fi,isHorizontal:function(){var t=this.options.position;return"top"===t||"bottom"===t},draw:function(){var t=this,e=t.ctx,n=t.options;if(n.display){var i,a,r,o=H.options._parseFont(n),s=o.lineHeight,l=s/2+n.padding,u=0,d=t.top,h=t.left,c=t.bottom,f=t.right;e.fillStyle=H.valueOrDefault(n.fontColor,W.global.defaultFontColor),e.font=o.string,t.isHorizontal()?(a=h+(f-h)/2,r=d+l,i=f-h):(a="left"===n.position?h+l:f-l,r=d+(c-d)/2,i=c-d,u=Math.PI*("left"===n.position?-.5:.5)),e.save(),e.translate(a,r),e.rotate(u),e.textAlign="center",e.textBaseline="middle";var g=n.text;if(H.isArray(g))for(var m=0,p=0;p=0;i--){var a=t[i];if(e(a))return a}},H.isNumber=function(t){return!isNaN(parseFloat(t))&&isFinite(t)},H.almostEquals=function(t,e,n){return Math.abs(t-e)=t},H.max=function(t){return t.reduce((function(t,e){return isNaN(e)?t:Math.max(t,e)}),Number.NEGATIVE_INFINITY)},H.min=function(t){return t.reduce((function(t,e){return isNaN(e)?t:Math.min(t,e)}),Number.POSITIVE_INFINITY)},H.sign=Math.sign?function(t){return Math.sign(t)}:function(t){return 0===(t=+t)||isNaN(t)?t:t>0?1:-1},H.toRadians=function(t){return t*(Math.PI/180)},H.toDegrees=function(t){return t*(180/Math.PI)},H._decimalPlaces=function(t){if(H.isFinite(t)){for(var e=1,n=0;Math.round(t*e)/e!==t;)e*=10,n++;return n}},H.getAngleFromPoint=function(t,e){var n=e.x-t.x,i=e.y-t.y,a=Math.sqrt(n*n+i*i),r=Math.atan2(i,n);return r<-.5*Math.PI&&(r+=2*Math.PI),{angle:r,distance:a}},H.distanceBetweenPoints=function(t,e){return Math.sqrt(Math.pow(e.x-t.x,2)+Math.pow(e.y-t.y,2))},H.aliasPixel=function(t){return t%2==0?0:.5},H._alignPixel=function(t,e,n){var i=t.currentDevicePixelRatio,a=n/2;return Math.round((e-a)*i)/i+a},H.splineCurve=function(t,e,n,i){var a=t.skip?e:t,r=e,o=n.skip?e:n,s=Math.sqrt(Math.pow(r.x-a.x,2)+Math.pow(r.y-a.y,2)),l=Math.sqrt(Math.pow(o.x-r.x,2)+Math.pow(o.y-r.y,2)),u=s/(s+l),d=l/(s+l),h=i*(u=isNaN(u)?0:u),c=i*(d=isNaN(d)?0:d);return{previous:{x:r.x-h*(o.x-a.x),y:r.y-h*(o.y-a.y)},next:{x:r.x+c*(o.x-a.x),y:r.y+c*(o.y-a.y)}}},H.EPSILON=Number.EPSILON||1e-14,H.splineCurveMonotone=function(t){var e,n,i,a,r,o,s,l,u,d=(t||[]).map((function(t){return{model:t._model,deltaK:0,mK:0}})),h=d.length;for(e=0;e0?d[e-1]:null,(a=e0?d[e-1]:null,a=e=t.length-1?t[0]:t[e+1]:e>=t.length-1?t[t.length-1]:t[e+1]},H.previousItem=function(t,e,n){return n?e<=0?t[t.length-1]:t[e-1]:e<=0?t[0]:t[e-1]},H.niceNum=function(t,e){var n=Math.floor(H.log10(t)),i=t/Math.pow(10,n);return(e?i<1.5?1:i<3?2:i<7?5:10:i<=1?1:i<=2?2:i<=5?5:10)*Math.pow(10,n)},H.requestAnimFrame="undefined"==typeof window?function(t){t()}:window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||window.oRequestAnimationFrame||window.msRequestAnimationFrame||function(t){return window.setTimeout(t,1e3/60)},H.getRelativePosition=function(t,e){var n,i,a=t.originalEvent||t,r=t.target||t.srcElement,o=r.getBoundingClientRect(),s=a.touches;s&&s.length>0?(n=s[0].clientX,i=s[0].clientY):(n=a.clientX,i=a.clientY);var l=parseFloat(H.getStyle(r,"padding-left")),u=parseFloat(H.getStyle(r,"padding-top")),d=parseFloat(H.getStyle(r,"padding-right")),h=parseFloat(H.getStyle(r,"padding-bottom")),c=o.right-o.left-l-d,f=o.bottom-o.top-u-h;return{x:n=Math.round((n-o.left-l)/c*r.width/e.currentDevicePixelRatio),y:i=Math.round((i-o.top-u)/f*r.height/e.currentDevicePixelRatio)}},H.getConstraintWidth=function(t){return n(t,"max-width","clientWidth")},H.getConstraintHeight=function(t){return n(t,"max-height","clientHeight")},H._calculatePadding=function(t,e,n){return(e=H.getStyle(t,e)).indexOf("%")>-1?n*parseInt(e,10)/100:parseInt(e,10)},H._getParentNode=function(t){var e=t.parentNode;return e&&"[object ShadowRoot]"===e.toString()&&(e=e.host),e},H.getMaximumWidth=function(t){var e=H._getParentNode(t);if(!e)return t.clientWidth;var n=e.clientWidth,i=n-H._calculatePadding(e,"padding-left",n)-H._calculatePadding(e,"padding-right",n),a=H.getConstraintWidth(t);return isNaN(a)?i:Math.min(i,a)},H.getMaximumHeight=function(t){var e=H._getParentNode(t);if(!e)return t.clientHeight;var n=e.clientHeight,i=n-H._calculatePadding(e,"padding-top",n)-H._calculatePadding(e,"padding-bottom",n),a=H.getConstraintHeight(t);return isNaN(a)?i:Math.min(i,a)},H.getStyle=function(t,e){return t.currentStyle?t.currentStyle[e]:document.defaultView.getComputedStyle(t,null).getPropertyValue(e)},H.retinaScale=function(t,e){var n=t.currentDevicePixelRatio=e||"undefined"!=typeof window&&window.devicePixelRatio||1;if(1!==n){var i=t.canvas,a=t.height,r=t.width;i.height=a*n,i.width=r*n,t.ctx.scale(n,n),i.style.height||i.style.width||(i.style.height=a+"px",i.style.width=r+"px")}},H.fontString=function(t,e,n){return e+" "+t+"px "+n},H.longestText=function(t,e,n,i){var a=(i=i||{}).data=i.data||{},r=i.garbageCollect=i.garbageCollect||[];i.font!==e&&(a=i.data={},r=i.garbageCollect=[],i.font=e),t.font=e;var o,s,l,u,d,h=0,c=n.length;for(o=0;on.length){for(o=0;oi&&(i=r),i},H.numberOfLabelLines=function(t){var e=1;return H.each(t,(function(t){H.isArray(t)&&t.length>e&&(e=t.length)})),e},H.color=k?function(t){return t instanceof CanvasGradient&&(t=W.global.defaultColor),k(t)}:function(t){return console.error("Color.js not found!"),t},H.getHoverColor=function(t){return t instanceof CanvasPattern||t instanceof CanvasGradient?t:H.color(t).saturate(.5).darken(.1).rgbString()}}(),en._adapters=rn,en.Animation=K,en.animationService=J,en.controllers=Jt,en.DatasetController=it,en.defaults=W,en.Element=$,en.elements=wt,en.Interaction=re,en.layouts=me,en.platform=Ie,en.plugins=Le,en.Scale=xn,en.scaleService=Re,en.Ticks=on,en.Tooltip=Ge,en.helpers.each(fi,(function(t,e){en.scaleService.registerScaleType(e,t,t._defaults)})),Ri)Ri.hasOwnProperty(zi)&&en.plugins.register(Ri[zi]);en.platform.initialize();var Ei=en;return"undefined"!=typeof window&&(window.Chart=en),en.Chart=en,en.Legend=Ri.legend._element,en.Title=Ri.title._element,en.pluginService=en.plugins,en.PluginBase=en.Element.extend({}),en.canvasHelpers=en.helpers.canvas,en.layoutService=en.layouts,en.LinearScaleBase=Dn,en.helpers.each(["Bar","Bubble","Doughnut","Line","PolarArea","Radar","Scatter"],(function(t){en[t]=function(e,n){return new en(e,en.helpers.merge(n||{},{type:t.charAt(0).toLowerCase()+t.slice(1)}))}})),Ei})); diff --git a/webnet/logo/logo.png b/webnet/logo/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..62e973f2dbb459a723860af9e69ebc2f44f506e0 GIT binary patch literal 211042 zcmd?Qhd-NN*gvidt)^<#h*3pt+Tx~W(O9*j_9{v3+p1Z+MpTH^qNONm)T-Ef3pI-( zc2(`#d;ik*^E}_@fB5B<7b5q4u5+#T^*-lZcbKNSBIFvwH6kJ+h_cdSEh3`(UxJy?S@{fo;zMGf4 z0>0%Llzhw+xL9Xz#Xj!LwfgxL-sjmxXB->H#c98j`SUq4f{6d0zZyBq=utDqdTw!w zYOb}`krpo9g3Fai7LSyag{u7p^Hk;@#eXJZZl?sPVRgS~EnN7b=3qW1SveUUdAYA8 z{Je9`W><=2$O9pNuk_^O#vj1-h6=F#Cr^+WUd1@vLlGcXuIR$wugRZFp>y@4(s{bx z+8INkJ|X;>nl#eJ=kU?1wXmn(+}puS8&w z22(wFB@%etQgUu?`02gh8hzUn$G$!eitxYFYm_$#4IOE-_dIZG#SKh#bUnyq7}^#A zfR@pSf9f5y#$RXa+kSSAZcZZ`Uj@46!}-u;<3-_e-^=aCuuK^%SzQ=V`p+o8n$>EjZ~t@kcQ0z4 zK_7oRP<211O*k8;@a~8MZ!PchzRbYC!Ny@hS|YfG0kj7H4bC!Wg3MT{j@~_Wm3YqM zXHjFra9l(-IDmh5os5)J7mV{v0qX=!Bdq>1jqlcfamt0@S&UM0qb~AO%3+PDZXOxEt;WgXM=lJ1Xr&i zf;l!hEyKnvVCesOv$0(t3Oy7@vN7IRXMl3obqsuc`V=kP%o;3gn}KPt@(95=C(dJQ zM1ZYON6_`ZkURLGRkT@B+lwbP>2P;(C*wb=diDZSPu{h$ar0-F_UOCy$aEDKF`Uz4 zvp7;7`A?IB^G|$8F$L}%B@z|PIN!0m=aOkX%d=RT~P$W`57mI~Y5JTs3 z_c4$LTS=)wvmhMtUp)vvvXSHXoB`XVJ0pr+8{sUlIVkkbEv&X-@9(D=$oQ4=I(zWo z$s1v1uZrs?>riO83ll7k^1py0B61Qh$6#D1@lIWF=B4eMnny3yEZtE-{nu|9{gh{T-36avF)Le^xbTQpCEZ03Ti3Jl40Xc~Y=L64Q z-uV1=TC_sU;y;ukjPfC(#w^35jyJDpi$5Itd2Z-ULff6bX%eUkciPTfd}Uvo6Rth$ zepbG2+RE`+Z6N0Deq6fja@5AO8pm>b-}a66Q~9ogR#a2KSix~WIyJ%ZPqs15ZEYmMWRVT7yxo}?}s>oIV&>>driC}K{;CorbHDtyP29s3sA;X~J;I?p zi?A~$D%{eE&F|)luO+)!0ccy<|FVlPX+5hbDAbQSPJ4L?u3go!orlGmOYn-WNsUi0 z$?-Nw)^asFm2Gif%gFgp8d0MQzJ&=o#3KwFoUs1uH%c6HGjs;%`~-| zs(hBdRgZ-ibWSA?ZaK{bVXid&Z{&V)xDE{1BU_@mE z)-abm>mKZ3EvW>-wvAs&t99F4-mvS4xm6t5RO+)^rgRxty;S(CL~XsNW=L8T-NXpr zSLvlDKSj28#z#SAUv1B~z4krM8a+SXpD&RyLpMiM;D;cOnZpgn%iI_0saRh5Bv_2@ z`%Zt!Ey_nwgj4xyCE*lQ2tnQm{q9zvdnW~&YNtIoX_k?n%YMH{lGdp44|1a6hY36yJf2IZpMSCMM-*t8g

XD=vs#`*equ-VPaEuS`6{Z*?mypzPjK(`mR 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­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 literal 0 HcmV?d00001 diff --git a/webnet/mqtt.html b/webnet/mqtt.html new file mode 100644 index 0000000..74e75b5 --- /dev/null +++ b/webnet/mqtt.html @@ -0,0 +1,211 @@ + + + + + + + + + + + + xidatong web server set page + + + + + + + + + + + + + + + +

+ +
+
+ +
+

网络设置

+ +
+
+
+ +
+ +
+
+
+ +
+ +
+
+
+ +
+ +
+
+
+ +
+ +
+
+
+ +
+ +
+
+
+ +
+ +
+
+ 保存 +
+
+
+
+
+ + + diff --git a/webnet/netsetting.html b/webnet/netsetting.html new file mode 100644 index 0000000..e31d263 --- /dev/null +++ b/webnet/netsetting.html @@ -0,0 +1,119 @@ + + + + xidatong web server set page + + + + + +

网络设置

+

+

+

+
+
MQTT代理服务器设置
+
+
+
+ + +
+
+ + +
+
+ + +
+
+
+
+ + +
+
+ + +
+
+
+
+ + +
+
+ + +
+
+ + + + + + \ No newline at end of file diff --git a/webnet/privateProtocol.html b/webnet/privateProtocol.html new file mode 100644 index 0000000..cec550a --- /dev/null +++ b/webnet/privateProtocol.html @@ -0,0 +1,194 @@ + + + + + + + + + + + + xidatong web server set page + + + + + + + + + + + + + + + + + +
+
+ +
+

网络设置

+ +
+
+
+ +
+ +
+
+
+ +
+ +
+
+
+ +
+ +
+
+
+ +
+ +
+
+ 保存 +
+
+
+
+
+ + + diff --git a/webnet/systemModify.html b/webnet/systemModify.html new file mode 100644 index 0000000..fd01360 --- /dev/null +++ b/webnet/systemModify.html @@ -0,0 +1,140 @@ + + + + + + + + + + + + xidatong web server set page + + + + + + + + + + + + + + + + + +
+
+ +
+

系统设置

+ +
+
+
+ 重启 + 重新启动设备 +
+
+ 简单恢复 + 简单恢复设备参数 +
+
+ + +
+
+ +
+
+
+
+ + + diff --git a/webnet/tcp.html b/webnet/tcp.html new file mode 100644 index 0000000..7e791c0 --- /dev/null +++ b/webnet/tcp.html @@ -0,0 +1,212 @@ + + + + + + + + + + + + xidatong web server set page + + + + + + + + + + + + + + + + + +
+
+ +
+

网络设置

+ +
+
+
+ +
+ +
+
+
+ +
+ +
+
+
+ +
+ +
+
+
+ +
+ +
+
+
+ +
+ +
+
+ 保存 +
+
+
+
+
+ + + -- 2.34.1 From 956eafa24bb65f5bb84d293ab35bf27084473edf Mon Sep 17 00:00:00 2001 From: chunyexixiaoyu <834670833@qq.com> Date: Thu, 14 Jul 2022 11:29:46 +0800 Subject: [PATCH 3/8] solve the bug compiling --- SConscript | 4 ++++ samples/netsetting.c | 1 - 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/SConscript b/SConscript index 00363ab..f5b1d38 100644 --- a/SConscript +++ b/SConscript @@ -53,9 +53,13 @@ if GetDepend(['WEBNET_USING_DAV']): if GetDepend(['WEBNET_USING_SAMPLES']): src += Glob('samples/wn_sample.c') + src += Glob('samples/deviceinfoasp.c') + src += Glob('samples/netsetting.c') + src += Glob('samples/uploaddata.c') if GetDepend(['WEBNET_USING_SAMPLES']) and GetDepend(['WEBNET_USING_UPLOAD']): src += Glob('samples/wn_sample_upload.c') + CPPPATH = [cwd + '/inc'] diff --git a/samples/netsetting.c b/samples/netsetting.c index f52e985..15f5032 100644 --- a/samples/netsetting.c +++ b/samples/netsetting.c @@ -110,7 +110,6 @@ static void device_get_tcpip_parameter() #elif defined ADD_XIZI_FETURES #endif } -//MSH_CMD_EXPORT(device_get_tcpip_parameter, device_get_tcpip_parameter); char *json_create_tcpip_data(void) { -- 2.34.1 From 64e1a0fae7692f5ff5b78dace34131523c8575fd Mon Sep 17 00:00:00 2001 From: zhaoyun1215 <58766762@qq.com> Date: Fri, 9 Sep 2022 01:58:11 -0700 Subject: [PATCH 4/8] can be runned in xizi kernel --- Makefile | 3 ++ README.md | 9 +++- inc/webnet.h | 1 + inc/wn_module.h | 3 +- inc/wn_request.h | 24 +++++++++ inc/wn_session.h | 10 +++- inc/wn_utils.h | 1 + module/wn_module_alias.c | 8 ++- module/wn_module_asp.c | 23 +++++++-- module/wn_module_auth.c | 11 ++++ module/wn_module_cgi.c | 9 +++- module/wn_module_dav.c | 23 ++++++++- module/wn_module_index.c | 8 ++- module/wn_module_log.c | 14 ++++-- module/wn_module_ssi.c | 7 +++ module/wn_module_upload.c | 20 ++++++++ samples/deviceinfoasp.c | 26 +++++++++- samples/deviceinfoasp.h | 5 ++ samples/netsetting.c | 71 +++++++++++++++++++------- samples/netsetting.h | 7 ++- samples/uploaddata.c | 41 ++++++++++++--- samples/uploaddata.h | 2 + samples/wn_sample.c | 17 +++++-- samples/wn_sample_upload.c | 9 +++- src/webnet.c | 51 +++++++++++++++++-- src/wn_mimetype.c | 1 + src/wn_module.c | 50 +++++++++++++++++- src/wn_request.c | 92 ++++++++++++++++++++++++++++++++-- src/wn_session.c | 55 ++++++++++++++++---- src/wn_utils.c | 10 +++- webnet/chart.html | 1 + webnet/css/layout.css | 0 webnet/deviceinfo.asp | 5 +- webnet/favicon.ico | Bin 0 -> 9662 bytes webnet/index_origin.html | 0 webnet/js/Chart.bundle.min.js | 0 webnet/logo/logo.png | Bin webnet/mqtt.html | 1 + webnet/netsetting.html | 1 + webnet/privateProtocol.html | 1 + webnet/systemModify.html | 1 + webnet/tcp.html | 3 +- 42 files changed, 556 insertions(+), 68 deletions(-) create mode 100755 Makefile mode change 100644 => 100755 README.md mode change 100644 => 100755 inc/webnet.h mode change 100644 => 100755 inc/wn_module.h mode change 100644 => 100755 inc/wn_request.h mode change 100644 => 100755 inc/wn_session.h mode change 100644 => 100755 inc/wn_utils.h mode change 100644 => 100755 module/wn_module_alias.c mode change 100644 => 100755 module/wn_module_asp.c mode change 100644 => 100755 module/wn_module_auth.c mode change 100644 => 100755 module/wn_module_cgi.c mode change 100644 => 100755 module/wn_module_dav.c mode change 100644 => 100755 module/wn_module_index.c mode change 100644 => 100755 module/wn_module_log.c mode change 100644 => 100755 module/wn_module_ssi.c mode change 100644 => 100755 module/wn_module_upload.c mode change 100644 => 100755 samples/deviceinfoasp.c mode change 100644 => 100755 samples/deviceinfoasp.h mode change 100644 => 100755 samples/netsetting.c mode change 100644 => 100755 samples/netsetting.h mode change 100644 => 100755 samples/uploaddata.c mode change 100644 => 100755 samples/uploaddata.h mode change 100644 => 100755 samples/wn_sample.c mode change 100644 => 100755 samples/wn_sample_upload.c mode change 100644 => 100755 src/webnet.c mode change 100644 => 100755 src/wn_mimetype.c mode change 100644 => 100755 src/wn_module.c mode change 100644 => 100755 src/wn_request.c mode change 100644 => 100755 src/wn_session.c mode change 100644 => 100755 src/wn_utils.c mode change 100644 => 100755 webnet/chart.html mode change 100644 => 100755 webnet/css/layout.css mode change 100644 => 100755 webnet/deviceinfo.asp create mode 100755 webnet/favicon.ico mode change 100644 => 100755 webnet/index_origin.html mode change 100644 => 100755 webnet/js/Chart.bundle.min.js mode change 100644 => 100755 webnet/logo/logo.png mode change 100644 => 100755 webnet/mqtt.html mode change 100644 => 100755 webnet/netsetting.html mode change 100644 => 100755 webnet/privateProtocol.html mode change 100644 => 100755 webnet/systemModify.html mode change 100644 => 100755 webnet/tcp.html diff --git a/Makefile b/Makefile new file mode 100755 index 0000000..916e473 --- /dev/null +++ b/Makefile @@ -0,0 +1,3 @@ +SRC_DIR := src module samples + +include $(KERNEL_ROOT)/compiler.mk \ No newline at end of file diff --git a/README.md b/README.md old mode 100644 new mode 100755 index b45a8bf..7eba612 --- a/README.md +++ b/README.md @@ -90,7 +90,7 @@ WebNet 软件包使用需要文件系统和Lwip协议栈的支持。 webnet.c 文件中注意以下定义,注意其他操作系统lwip协议栈的大小设置 ``` -#ifdef ADD_RTTHREAD_FETURES +#ifdef ADD_RTTHREAD_FETURES #if defined(RT_USING_LWIP) && (RT_LWIP_TCPTHREAD_STACKSIZE < 1408) #error The lwIP tcpip thread stack size(RT_LWIP_TCPTHREAD_STACKSIZE) must more than 1408 #endif @@ -98,3 +98,10 @@ webnet.c 文件中注意以下定义,注意其他操作系统lwip协议栈的 ``` webnet文件夹为该分支的一个前端页面文件版本 + + +for xizi: +1.需要同时打开SD卡和USB功能,同时使用SD卡作为文件系统,需要开启SEMC功能 +单独使用SD卡会导致卡在网络配置界面,单独使用USB卡会导致从U盘读取数据到内存的时候,数据发生错误(一部分数据没写入,呈现出来的就是全0) +2.注意使用的时候,需要修改read,close,open等系统调用的地方,因为默认使用的是lwip中的read,close和open +3.需要单独开启netdev模块 diff --git a/inc/webnet.h b/inc/webnet.h old mode 100644 new mode 100755 index e85be7c..e33e005 --- a/inc/webnet.h +++ b/inc/webnet.h @@ -23,6 +23,7 @@ * Change Logs: * Date Author Notes * 2022-05-10 chunyexixiaoyu the version transplanted from rt-thread + * 2022-09-07 zhaoyun the version transplanted for XiZi */ #ifndef __WEBNET_H__ diff --git a/inc/wn_module.h b/inc/wn_module.h old mode 100644 new mode 100755 index d161f04..20fd57e --- a/inc/wn_module.h +++ b/inc/wn_module.h @@ -22,7 +22,8 @@ * * Change Logs: * Date Author Notes - * 2022-05-10 chunyexixiaoyu the version transplanted from rt-thread + * 2022-05-10 chunyexixiaoyu the version transplanted from rt-thread + * 2022-09-07 zhaoyun the version transplanted for XiZi */ #ifndef __WN_MODULE_H__ diff --git a/inc/wn_request.h b/inc/wn_request.h old mode 100644 new mode 100755 index 7819840..c8c1516 --- a/inc/wn_request.h +++ b/inc/wn_request.h @@ -19,14 +19,23 @@ * Change Logs: * Date Author Notes * 2022-05-10 chunyexixiaoyu the version the version transplanted from rt-thread + * 2022-09-07 zhaoyun the version transplanted for XiZi */ #ifndef __WN_REQUEST_H__ #define __WN_REQUEST_H__ #include +#ifdef ADD_RTTHREAD_FETURES #include +#endif #include + +#ifdef ADD_XIZI_FETURES +#include +#include +#endif + #ifdef __cplusplus extern "C" { #endif @@ -77,7 +86,12 @@ struct webnet_request char* modified; #endif /* WEBNET_CACHE_LEVEL */ #ifdef WEBNET_USING_GZIP + #ifdef ADD_RTTHREAD_FETURES bool support_gzip; + #endif + #ifdef ADD_XIZI_FETURES + _Bool support_gzip; + #endif #endif /* WEBNET_USING_GZIP */ char* user_agent; @@ -111,7 +125,12 @@ struct webnet_request enum webnet_connection connection; /* whether the string filed is copied */ + #ifdef ADD_RTTHREAD_FETURES bool field_copied; + #endif + #ifdef ADD_XIZI_FETURES + _Bool field_copied; + #endif }; struct webnet_request* webnet_request_create(void); @@ -123,7 +142,12 @@ int webnet_request_parse_post(struct webnet_request* request, char* buffer, int void webnet_request_parse(struct webnet_request* request, char* buffer, int length); +#ifdef ADD_RTTHREAD_FETURES bool webnet_request_has_query(struct webnet_request* request, char* name); +#endif +#ifdef ADD_XIZI_FETURES +_Bool webnet_request_has_query(struct webnet_request* request, char* name); +#endif const char* webnet_request_get_query(struct webnet_request* request, char* name); #ifdef __cplusplus diff --git a/inc/wn_session.h b/inc/wn_session.h old mode 100644 new mode 100755 index 2c8da9b..68971df --- a/inc/wn_session.h +++ b/inc/wn_session.h @@ -18,7 +18,8 @@ * * Change Logs: * Date Author Notes - * 2022-05-10 chunyexixiaoyu the version transplanted from rt-thread + * 2022-05-10 chunyexixiaoyu the version transplanted from rt-thread + * 2022-09-07 zhaoyun the version transplanted for XiZi */ #ifndef __WN_SESSION_H__ @@ -27,6 +28,13 @@ #include #include +#ifdef ADD_XIZI_FETURES +#include +#include "sys_arch.h" +#include +#include "lwip/sys.h" +#endif + #ifdef __cplusplus extern "C" { #endif diff --git a/inc/wn_utils.h b/inc/wn_utils.h old mode 100644 new mode 100755 index 449afe6..541671b --- a/inc/wn_utils.h +++ b/inc/wn_utils.h @@ -19,6 +19,7 @@ * Change Logs: * Date Author Notes * 2022-05-10 chunyexixiaoyu the version transplanted from rt-thread + * 2022-09-07 zhaoyun the version transplanted for XiZi */ #ifndef __WN_UTILS_H__ diff --git a/module/wn_module_alias.c b/module/wn_module_alias.c old mode 100644 new mode 100755 index cc46fec..f3d6039 --- a/module/wn_module_alias.c +++ b/module/wn_module_alias.c @@ -18,13 +18,19 @@ * * Change Logs: * Date Author Notes - * 2022-05-09 chunyexixiaoyu the version transplanted from rt-thread + * 2022-05-09 chunyexixiaoyu the version transplanted from rt-thread + * 2022-09-07 zhaoyun the version transplanted for XiZi */ #include #include +#include #include +#ifdef ADD_XIZI_FETURES +#include +#endif + #ifdef WEBNET_USING_ALIAS struct webnet_alias_item diff --git a/module/wn_module_asp.c b/module/wn_module_asp.c old mode 100644 new mode 100755 index e6fe745..75abf54 --- a/module/wn_module_asp.c +++ b/module/wn_module_asp.c @@ -19,14 +19,22 @@ * Change Logs: * Date Author Notes * 2022-05-09 chunyexixiaoyu the version transplanted from rt-thread + * 2022-09-07 zhaoyun the version transplanted for XiZi */ #include #include #include #include +#include #include + +#ifdef ADD_XIZI_FETURES +#include +#include // for "open,read,close",if not will use the command from lwip +#endif + #ifdef WEBNET_USING_ASP struct webnet_asp_variable @@ -111,11 +119,14 @@ static void _default_asp_handler(struct webnet_session* session, const char* nam } else if (strncmp(name, "TICK", 4) == 0) { - int32 tick; + int32 tick; //这里定义的tick是多少秒的意思,并不是正常意义上的tick(个人感觉定义为:sum_time更好) int32 hour, min, second; #ifdef ADD_RTTHREAD_FETURES tick = rt_tick_get()/RT_TICK_PER_SECOND; #endif + #ifdef ADD_XIZI_FETURES + tick = CurrentTicksGain() / TICK_PER_SECOND; + #endif second = tick % 60; min = (tick/60) % 60; hour = tick / (60 * 60); @@ -137,6 +148,9 @@ static void _webnet_asp_dofile(struct webnet_session* session, int fd) /* allocate read buffer */ buffer = (char*) wn_malloc (length); + #ifdef ADD_XIZI_FETURES + memset(buffer,0,length); + #endif if (buffer == NULL) { session->request->result_code = 500; @@ -180,7 +194,9 @@ static void _webnet_asp_dofile(struct webnet_session* session, int fd) webnet_session_write(session, (const uint8*)offset, asp_begin - offset); offset = asp_begin + 2; - while ((*offset == ' ') || (*offset == '\t')) offset ++; + while ((*offset == ' ') || (*offset == '\t')){ + offset++; + } /* extrace asp variable */ for (index = 0; index < _webnet_asp_vars_count; index ++) @@ -217,7 +233,7 @@ int webnet_module_asp(struct webnet_session* session, int event) if (event == WEBNET_EVENT_URI_POST) { - int fd; + int fd=-1; /* check whether a asp file */ if ((strstr(request->path, ".asp") != NULL) || @@ -236,6 +252,7 @@ int webnet_module_asp(struct webnet_session* session, int event) { /* no this file */ request->result_code = 404; + close(fd);//zhaoyun add return WEBNET_MODULE_FINISHED; } } diff --git a/module/wn_module_auth.c b/module/wn_module_auth.c old mode 100644 new mode 100755 index 0eb9a97..54b2a14 --- a/module/wn_module_auth.c +++ b/module/wn_module_auth.c @@ -19,13 +19,21 @@ * Change Logs: * Date Author Notes * 2022-05-09 chunyexixiaoyu the version transplanted from rt-thread + * 2022-09-07 zhaoyun the version transplanted for XiZi */ #include + + #include #include +#include #include +#ifdef ADD_XIZI_FETURES +#include +#endif + #ifdef WEBNET_USING_AUTH struct webnet_auth_item { @@ -77,7 +85,10 @@ void webnet_auth_set(const char* path, const char* username_password) _auth_items[_auth_items_count - 1].path = wn_strdup(path); _auth_items[_auth_items_count - 1].username_password = str_base64_encode(username_password); } + +#ifdef ADD_RTTHREAD_FETURES RTM_EXPORT(webnet_auth_set); +#endif /** * Authorization module handler diff --git a/module/wn_module_cgi.c b/module/wn_module_cgi.c old mode 100644 new mode 100755 index 419211d..cd58daa --- a/module/wn_module_cgi.c +++ b/module/wn_module_cgi.c @@ -18,15 +18,22 @@ * * Change Logs: * Date Author Notes - * 2022-05-09 chunyexixiaoyu the version transplanted from rt-thread + * 2022-05-09 chunyexixiaoyu the version transplanted from rt-thread + * 2022-09-07 zhaoyun the version transplanted for XiZi */ #include #include #include #include +#include #include + +#ifdef ADD_XIZI_FETURES +#include +#endif + #ifdef WEBNET_USING_CGI #define CGI_ROOT_PATH_MAX 64 diff --git a/module/wn_module_dav.c b/module/wn_module_dav.c old mode 100644 new mode 100755 index 3e90736..0a940da --- a/module/wn_module_dav.c +++ b/module/wn_module_dav.c @@ -18,13 +18,20 @@ * * Change Logs: * Date Author Notes - * 2022-05-09 chunyexixiaoyu the version transplanted from rt-thread + * 2022-05-09 chunyexixiaoyu the version transplanted from rt-thread + * 2022-09-07 zhaoyun the version transplanted for XiZi */ #include + #include #include #include #include + + +#ifdef ADD_XIZI_FETURES +#include +#endif #ifdef WEBNET_USING_DAV struct webnet_module_put_entry @@ -276,9 +283,23 @@ static void print_propfind_element(struct webnet_session *session, const char *u time_t t = file_stat->st_mtime; + #ifdef ADD_RTTHREAD_FETURES PrivTaskenterCritical(); + #endif + + #ifdef ADD_XIZI_FETURES + long lock; + lock = CriticalAreaLock(); + #endif + strftime(ctime_str, sizeof(ctime_str), "%a, %d %b %Y %H:%M:%S GMT", localtime(&t)); + #ifdef ADD_RTTHREAD_FETURES PrivTaskexitCritical(); + #endif + + #ifdef ADD_XIZI_FETURES + CriticalAreaUnLock(lock); + #endif //printf("strftime: %s\n", ctime_str); webnet_session_printf(session, diff --git a/module/wn_module_index.c b/module/wn_module_index.c old mode 100644 new mode 100755 index 1732cf1..de83d9e --- a/module/wn_module_index.c +++ b/module/wn_module_index.c @@ -18,13 +18,19 @@ * * Change Logs: * Date Author Notes - * 2022-05-09 chunyexixiaoyu the version transplanted from rt-thread + * 2022-05-09 chunyexixiaoyu the version transplanted from rt-thread + * 2022-09-07 zhaoyun the version transplanted for XiZi */ #include + #include #include #include +#ifdef ADD_XIZI_FETURES +#include +#endif + #ifdef WEBNET_USING_INDEX int webnet_module_dirindex(struct webnet_session* session, int event) diff --git a/module/wn_module_log.c b/module/wn_module_log.c old mode 100644 new mode 100755 index 3ce0ab9..c6de21c --- a/module/wn_module_log.c +++ b/module/wn_module_log.c @@ -18,13 +18,19 @@ * * Change Logs: * Date Author Notes - * 2022-05-09 chunyexixiaoyu the version transplanted from rt-thread + * 2022-05-09 chunyexixiaoyu the version transplanted from rt-thread + * 2022-09-07 zhaoyun the version transplanted for XiZi */ #include + #include #include #include +#ifdef ADD_XIZI_FETURES +#include +#endif + #ifdef WEBNET_USING_LOG int webnet_module_log(struct webnet_session* session, int event) @@ -42,7 +48,7 @@ int webnet_module_log(struct webnet_session* session, int event) if (event == WEBNET_EVENT_INIT) { - printf("server initialize success."); + printf("server initialize success.\n"); } else if (event == WEBNET_EVENT_URI_PHYSICAL) { @@ -75,7 +81,7 @@ int webnet_module_log(struct webnet_session* session, int event) default: break; } - printf(" request: %s", request->path); + printf(" request: %s\n", request->path); for (index = 0; index < request->query_counter; index ++) { printf(" query[%d]: %s => %s", index, @@ -87,7 +93,7 @@ int webnet_module_log(struct webnet_session* session, int event) { printf("event post uri physical url: %s", request->path); - printf("mime type: %s", mime_get_type(request->path)); + printf("mime type: %s\n", mime_get_type(request->path)); } else if (event == WEBNET_EVENT_RSP_HEADER) { diff --git a/module/wn_module_ssi.c b/module/wn_module_ssi.c old mode 100644 new mode 100755 index e0e688a..b8c5ef2 --- a/module/wn_module_ssi.c +++ b/module/wn_module_ssi.c @@ -19,11 +19,18 @@ * Change Logs: * Date Author Notes * 2022-05-09 chunyexixiaoyu the version transplanted from rt-thread + * 2022-09-07 zhaoyun the version transplanted for XiZi */ #include + #include #include #include + +#ifdef ADD_XIZI_FETURES +#include +#endif + #if defined(WEBNET_USING_SSI) #define SSI_INCLUDE_STRING " diff --git a/webnet/css/layout.css b/webnet/css/layout.css old mode 100644 new mode 100755 diff --git a/webnet/deviceinfo.asp b/webnet/deviceinfo.asp old mode 100644 new mode 100755 index 3acb30b..beb607b --- a/webnet/deviceinfo.asp +++ b/webnet/deviceinfo.asp @@ -3,12 +3,13 @@ + - + xidatong web server set page @@ -144,4 +145,4 @@ - + \ No newline at end of file diff --git a/webnet/favicon.ico b/webnet/favicon.ico new file mode 100755 index 0000000000000000000000000000000000000000..382b603750cf897b0f0b687d15a0e086c9f46f07 GIT binary patch literal 9662 zcmeI2dr(!^6~+%pjcttSm`+U76!V8xxmZoxB(xQ!QDZbdqM%6PgNLI5dC22}NK8Ny zjiOCyXb`JTP2!7G-U=1sh*Eh9Mz9(OYl>)1h|@9J;8nTb>bLK`haM4#V`!Q`?s0y1 z?Q_oFYkzC)*I`CYbK$=yp3wOFxVC4wrai1_+DO7jS`bmsZPzeOd+2^U_6N>iX9k=Z zaAv@n0cQrB8E|I6nE_`8zS#_*d9H?*S$*26)2-P4-22u; zYlfgawbNgB1=Sz%Am@m5QW*dH`smRU*-twW2RCV_JM_D=ZcAr^J{J2&rUOB2dY{WSBW7L0x_kF9s(5y+G*;C3_p2LY4!SQ8+>ZOA6P(i_bL3Ypy zP5W^t)D7Fc202qwBYnfj?;&N1Mgc<{HL?X z&d9~ij5K_($jU2o~HhP z8e)Lt#U{!w?mZvveM;(fT*PT=Zmy#K2JX3sseiYibgLjgU9clXkjb^bVWA+EXGzjb z+5nMM?#=5~3SM6>hzq=h^;J*(v|VyDQtVEz#1E9xfg0g5<{9 zV0@Xe0+!6wCaj6rfaJwXWl!`4$)_K+*6e-Vjs6O1zrQE_Dkl0;sBZ$LS@#W=bBJNT zj1|VR&RS}Au^!FoZ>`E7Y%SY790%U+c5tcbosC)IRVo^s5-+h}F=Cib0P@*)wD~xnn46!aX$NL)wXO|Ixo; zg3qM*DBt(0zmnP?=uN+242H0uDq_^Empk}8n%KsxYXHhW>H7VkV)(lHtLbBq^55H~ z>!J-H*NLuMw<@lONw;p4fAW9RuS6+rM4f5HMAxnC4H8JY&An=S&-z7F+Ys^wNhWnf zjhjv@%d5$&%BsG4x^#WC&yg!ck3pT$Dz2WI-mCu5w})wN)KyM&y}jBV1vp+Pjl}q! zsm^9~M)#O|)s+1!e2DS;Uuo%W{`a|lrNyDui?)sIChCk#qw)>Q!t~Ogf$YEXkyA5Q$e`v05n!#RS zQy1PV+mF`reN9vTEWB5?L$mvX_L|KfG}x@@)&*_@RQIdlMx)8=4qM@{RStW}VgE<@ F`41%L + diff --git a/webnet/netsetting.html b/webnet/netsetting.html old mode 100644 new mode 100755 index e31d263..c552169 --- a/webnet/netsetting.html +++ b/webnet/netsetting.html @@ -2,6 +2,7 @@ xidatong web server set page + diff --git a/webnet/privateProtocol.html b/webnet/privateProtocol.html old mode 100644 new mode 100755 index cec550a..076c807 --- a/webnet/privateProtocol.html +++ b/webnet/privateProtocol.html @@ -2,6 +2,7 @@ + diff --git a/webnet/systemModify.html b/webnet/systemModify.html old mode 100644 new mode 100755 index fd01360..62bccf7 --- a/webnet/systemModify.html +++ b/webnet/systemModify.html @@ -2,6 +2,7 @@ + diff --git a/webnet/tcp.html b/webnet/tcp.html old mode 100644 new mode 100755 index 7e791c0..bb18337 --- a/webnet/tcp.html +++ b/webnet/tcp.html @@ -3,11 +3,12 @@ + - + xidatong web server set page -- 2.34.1 From 0ec3efb66fc471b838842f43b8cbfc24755276e5 Mon Sep 17 00:00:00 2001 From: zhaoyun1215 <58766762@qq.com> Date: Wed, 14 Sep 2022 05:13:19 -0700 Subject: [PATCH 5/8] for webnet and netdev --- README.md | 9 +++- inc/webnet.h | 14 ++++++ inc/wn_module.h | 3 +- inc/wn_request.h | 24 +++++++++ inc/wn_session.h | 10 +++- inc/wn_utils.h | 1 + module/wn_module_alias.c | 8 ++- module/wn_module_asp.c | 38 ++++++++++---- module/wn_module_auth.c | 11 ++++ module/wn_module_cgi.c | 9 +++- module/wn_module_dav.c | 31 ++++++++++-- module/wn_module_index.c | 8 ++- module/wn_module_log.c | 14 ++++-- module/wn_module_ssi.c | 29 +++++++---- module/wn_module_upload.c | 22 +++++++- samples/deviceinfoasp.c | 26 +++++++++- samples/deviceinfoasp.h | 5 ++ samples/netsetting.c | 71 +++++++++++++++++++------- samples/netsetting.h | 7 ++- samples/uploaddata.c | 47 +++++++++++++---- samples/uploaddata.h | 2 + samples/wn_sample.c | 17 +++++-- samples/wn_sample_upload.c | 13 +++-- src/webnet.c | 65 ++++++++++++++++++++---- src/wn_mimetype.c | 1 + src/wn_module.c | 62 ++++++++++++++++++++--- src/wn_request.c | 92 ++++++++++++++++++++++++++++++++-- src/wn_session.c | 55 ++++++++++++++++---- src/wn_utils.c | 10 +++- webnet/chart.html | 1 + webnet/css/layout.css | 0 webnet/deviceinfo.asp | 5 +- webnet/index_origin.html | 0 webnet/js/Chart.bundle.min.js | 0 webnet/logo/logo.png | Bin webnet/mqtt.html | 1 + webnet/netsetting.html | 1 + webnet/privateProtocol.html | 1 + webnet/systemModify.html | 1 + webnet/tcp.html | 3 +- 40 files changed, 611 insertions(+), 106 deletions(-) mode change 100644 => 100755 README.md mode change 100644 => 100755 inc/webnet.h mode change 100644 => 100755 inc/wn_module.h mode change 100644 => 100755 inc/wn_request.h mode change 100644 => 100755 inc/wn_session.h mode change 100644 => 100755 inc/wn_utils.h mode change 100644 => 100755 module/wn_module_alias.c mode change 100644 => 100755 module/wn_module_asp.c mode change 100644 => 100755 module/wn_module_auth.c mode change 100644 => 100755 module/wn_module_cgi.c mode change 100644 => 100755 module/wn_module_dav.c mode change 100644 => 100755 module/wn_module_index.c mode change 100644 => 100755 module/wn_module_log.c mode change 100644 => 100755 module/wn_module_ssi.c mode change 100644 => 100755 module/wn_module_upload.c mode change 100644 => 100755 samples/deviceinfoasp.c mode change 100644 => 100755 samples/deviceinfoasp.h mode change 100644 => 100755 samples/netsetting.c mode change 100644 => 100755 samples/netsetting.h mode change 100644 => 100755 samples/uploaddata.c mode change 100644 => 100755 samples/uploaddata.h mode change 100644 => 100755 samples/wn_sample.c mode change 100644 => 100755 samples/wn_sample_upload.c mode change 100644 => 100755 src/webnet.c mode change 100644 => 100755 src/wn_mimetype.c mode change 100644 => 100755 src/wn_module.c mode change 100644 => 100755 src/wn_request.c mode change 100644 => 100755 src/wn_session.c mode change 100644 => 100755 src/wn_utils.c mode change 100644 => 100755 webnet/chart.html mode change 100644 => 100755 webnet/css/layout.css mode change 100644 => 100755 webnet/deviceinfo.asp mode change 100644 => 100755 webnet/index_origin.html mode change 100644 => 100755 webnet/js/Chart.bundle.min.js mode change 100644 => 100755 webnet/logo/logo.png mode change 100644 => 100755 webnet/mqtt.html mode change 100644 => 100755 webnet/netsetting.html mode change 100644 => 100755 webnet/privateProtocol.html mode change 100644 => 100755 webnet/systemModify.html mode change 100644 => 100755 webnet/tcp.html diff --git a/README.md b/README.md old mode 100644 new mode 100755 index b45a8bf..7eba612 --- a/README.md +++ b/README.md @@ -90,7 +90,7 @@ WebNet 软件包使用需要文件系统和Lwip协议栈的支持。 webnet.c 文件中注意以下定义,注意其他操作系统lwip协议栈的大小设置 ``` -#ifdef ADD_RTTHREAD_FETURES +#ifdef ADD_RTTHREAD_FETURES #if defined(RT_USING_LWIP) && (RT_LWIP_TCPTHREAD_STACKSIZE < 1408) #error The lwIP tcpip thread stack size(RT_LWIP_TCPTHREAD_STACKSIZE) must more than 1408 #endif @@ -98,3 +98,10 @@ webnet.c 文件中注意以下定义,注意其他操作系统lwip协议栈的 ``` webnet文件夹为该分支的一个前端页面文件版本 + + +for xizi: +1.需要同时打开SD卡和USB功能,同时使用SD卡作为文件系统,需要开启SEMC功能 +单独使用SD卡会导致卡在网络配置界面,单独使用USB卡会导致从U盘读取数据到内存的时候,数据发生错误(一部分数据没写入,呈现出来的就是全0) +2.注意使用的时候,需要修改read,close,open等系统调用的地方,因为默认使用的是lwip中的read,close和open +3.需要单独开启netdev模块 diff --git a/inc/webnet.h b/inc/webnet.h old mode 100644 new mode 100755 index e85be7c..ab48205 --- a/inc/webnet.h +++ b/inc/webnet.h @@ -23,6 +23,7 @@ * Change Logs: * Date Author Notes * 2022-05-10 chunyexixiaoyu the version transplanted from rt-thread + * 2022-09-07 zhaoyun the version transplanted for XiZi */ #ifndef __WEBNET_H__ @@ -50,6 +51,19 @@ extern "C" { #define wn_strdup strdup #endif +#ifndef wn_read +#define wn_read PrivRead +#endif + +#ifndef wn_open +#define wn_open open +#endif + +#ifndef wn_close +#define wn_close close +#endif + + #ifndef WEBNET_USING_RANGE #define WEBNET_USING_RANGE #endif diff --git a/inc/wn_module.h b/inc/wn_module.h old mode 100644 new mode 100755 index d161f04..20fd57e --- a/inc/wn_module.h +++ b/inc/wn_module.h @@ -22,7 +22,8 @@ * * Change Logs: * Date Author Notes - * 2022-05-10 chunyexixiaoyu the version transplanted from rt-thread + * 2022-05-10 chunyexixiaoyu the version transplanted from rt-thread + * 2022-09-07 zhaoyun the version transplanted for XiZi */ #ifndef __WN_MODULE_H__ diff --git a/inc/wn_request.h b/inc/wn_request.h old mode 100644 new mode 100755 index 7819840..c8c1516 --- a/inc/wn_request.h +++ b/inc/wn_request.h @@ -19,14 +19,23 @@ * Change Logs: * Date Author Notes * 2022-05-10 chunyexixiaoyu the version the version transplanted from rt-thread + * 2022-09-07 zhaoyun the version transplanted for XiZi */ #ifndef __WN_REQUEST_H__ #define __WN_REQUEST_H__ #include +#ifdef ADD_RTTHREAD_FETURES #include +#endif #include + +#ifdef ADD_XIZI_FETURES +#include +#include +#endif + #ifdef __cplusplus extern "C" { #endif @@ -77,7 +86,12 @@ struct webnet_request char* modified; #endif /* WEBNET_CACHE_LEVEL */ #ifdef WEBNET_USING_GZIP + #ifdef ADD_RTTHREAD_FETURES bool support_gzip; + #endif + #ifdef ADD_XIZI_FETURES + _Bool support_gzip; + #endif #endif /* WEBNET_USING_GZIP */ char* user_agent; @@ -111,7 +125,12 @@ struct webnet_request enum webnet_connection connection; /* whether the string filed is copied */ + #ifdef ADD_RTTHREAD_FETURES bool field_copied; + #endif + #ifdef ADD_XIZI_FETURES + _Bool field_copied; + #endif }; struct webnet_request* webnet_request_create(void); @@ -123,7 +142,12 @@ int webnet_request_parse_post(struct webnet_request* request, char* buffer, int void webnet_request_parse(struct webnet_request* request, char* buffer, int length); +#ifdef ADD_RTTHREAD_FETURES bool webnet_request_has_query(struct webnet_request* request, char* name); +#endif +#ifdef ADD_XIZI_FETURES +_Bool webnet_request_has_query(struct webnet_request* request, char* name); +#endif const char* webnet_request_get_query(struct webnet_request* request, char* name); #ifdef __cplusplus diff --git a/inc/wn_session.h b/inc/wn_session.h old mode 100644 new mode 100755 index 2c8da9b..68971df --- a/inc/wn_session.h +++ b/inc/wn_session.h @@ -18,7 +18,8 @@ * * Change Logs: * Date Author Notes - * 2022-05-10 chunyexixiaoyu the version transplanted from rt-thread + * 2022-05-10 chunyexixiaoyu the version transplanted from rt-thread + * 2022-09-07 zhaoyun the version transplanted for XiZi */ #ifndef __WN_SESSION_H__ @@ -27,6 +28,13 @@ #include #include +#ifdef ADD_XIZI_FETURES +#include +#include "sys_arch.h" +#include +#include "lwip/sys.h" +#endif + #ifdef __cplusplus extern "C" { #endif diff --git a/inc/wn_utils.h b/inc/wn_utils.h old mode 100644 new mode 100755 index 449afe6..541671b --- a/inc/wn_utils.h +++ b/inc/wn_utils.h @@ -19,6 +19,7 @@ * Change Logs: * Date Author Notes * 2022-05-10 chunyexixiaoyu the version transplanted from rt-thread + * 2022-09-07 zhaoyun the version transplanted for XiZi */ #ifndef __WN_UTILS_H__ diff --git a/module/wn_module_alias.c b/module/wn_module_alias.c old mode 100644 new mode 100755 index cc46fec..1227174 --- a/module/wn_module_alias.c +++ b/module/wn_module_alias.c @@ -18,13 +18,19 @@ * * Change Logs: * Date Author Notes - * 2022-05-09 chunyexixiaoyu the version transplanted from rt-thread + * 2022-05-09 chunyexixiaoyu the version transplanted from rt-thread + * 2022-09-07 zhaoyun the version transplanted for XiZi */ #include #include +#include #include +#ifdef ADD_XIZI_FETURES +#include +#endif + #ifdef WEBNET_USING_ALIAS struct webnet_alias_item diff --git a/module/wn_module_asp.c b/module/wn_module_asp.c old mode 100644 new mode 100755 index e6fe745..d4cb846 --- a/module/wn_module_asp.c +++ b/module/wn_module_asp.c @@ -19,14 +19,22 @@ * Change Logs: * Date Author Notes * 2022-05-09 chunyexixiaoyu the version transplanted from rt-thread + * 2022-09-07 zhaoyun the version transplanted for XiZi */ #include #include #include #include +#include #include + +#ifdef ADD_XIZI_FETURES +#include +//#include // for "open,read,close",if not will use the command from lwip +#endif + #ifdef WEBNET_USING_ASP struct webnet_asp_variable @@ -111,11 +119,14 @@ static void _default_asp_handler(struct webnet_session* session, const char* nam } else if (strncmp(name, "TICK", 4) == 0) { - int32 tick; + int32 tick; //这里定义的tick是多少秒的意思,并不是正常意义上的tick(个人感觉定义为:sum_time更好) int32 hour, min, second; #ifdef ADD_RTTHREAD_FETURES tick = rt_tick_get()/RT_TICK_PER_SECOND; #endif + #ifdef ADD_XIZI_FETURES + tick = CurrentTicksGain() / TICK_PER_SECOND; + #endif second = tick % 60; min = (tick/60) % 60; hour = tick / (60 * 60); @@ -134,9 +145,12 @@ static void _webnet_asp_dofile(struct webnet_session* session, int fd) /* get file length */ length = lseek(fd, 0, SEEK_END); lseek(fd, 0, SEEK_SET); - + printf("length:%d\n",length); //needed to delete /* allocate read buffer */ buffer = (char*) wn_malloc (length); + #ifdef ADD_XIZI_FETURES + memset(buffer,0,length); + #endif if (buffer == NULL) { session->request->result_code = 500; @@ -146,7 +160,10 @@ static void _webnet_asp_dofile(struct webnet_session* session, int fd) /* write page header */ webnet_session_set_header(session, "text/html", 200, "OK", -1); /* read file to buffer */ - if (read(fd, buffer, (uint32)length) != length) /* read failed */ + + int read_length=wn_read(fd, buffer, (uint32)length); + printf("read_length:%d\n",read_length); //needed to delete + if (read_length != length) /* read failed */ { wn_free(buffer); session->request->result_code = 500; @@ -180,7 +197,9 @@ static void _webnet_asp_dofile(struct webnet_session* session, int fd) webnet_session_write(session, (const uint8*)offset, asp_begin - offset); offset = asp_begin + 2; - while ((*offset == ' ') || (*offset == '\t')) offset ++; + while ((*offset == ' ') || (*offset == '\t')){ + offset++; + } /* extrace asp variable */ for (index = 0; index < _webnet_asp_vars_count; index ++) @@ -217,7 +236,7 @@ int webnet_module_asp(struct webnet_session* session, int event) if (event == WEBNET_EVENT_URI_POST) { - int fd; + int fd=-1; /* check whether a asp file */ if ((strstr(request->path, ".asp") != NULL) || @@ -225,17 +244,18 @@ int webnet_module_asp(struct webnet_session* session, int event) { /* try to open this file */ - fd = open(request->path, O_RDONLY, 0); + fd = wn_open(request->path, O_RDONLY, 0); if ( fd >= 0) { _webnet_asp_dofile(session, fd); - close(fd); + wn_close(fd); return WEBNET_MODULE_FINISHED; } else { /* no this file */ request->result_code = 404; + wn_close(fd);//zhaoyun add return WEBNET_MODULE_FINISHED; } } @@ -248,13 +268,13 @@ int webnet_module_asp(struct webnet_session* session, int event) if (asp_filename != NULL) { snprintf(asp_filename, WEBNET_PATH_MAX, "%s/index.asp", request->path); - fd = open(asp_filename, O_RDONLY, 0); + fd = wn_open(asp_filename, O_RDONLY, 0); if (fd >= 0) { wn_free(asp_filename); _webnet_asp_dofile(session, fd); - close(fd); + wn_close(fd); return WEBNET_MODULE_FINISHED; } } diff --git a/module/wn_module_auth.c b/module/wn_module_auth.c old mode 100644 new mode 100755 index 0eb9a97..54b2a14 --- a/module/wn_module_auth.c +++ b/module/wn_module_auth.c @@ -19,13 +19,21 @@ * Change Logs: * Date Author Notes * 2022-05-09 chunyexixiaoyu the version transplanted from rt-thread + * 2022-09-07 zhaoyun the version transplanted for XiZi */ #include + + #include #include +#include #include +#ifdef ADD_XIZI_FETURES +#include +#endif + #ifdef WEBNET_USING_AUTH struct webnet_auth_item { @@ -77,7 +85,10 @@ void webnet_auth_set(const char* path, const char* username_password) _auth_items[_auth_items_count - 1].path = wn_strdup(path); _auth_items[_auth_items_count - 1].username_password = str_base64_encode(username_password); } + +#ifdef ADD_RTTHREAD_FETURES RTM_EXPORT(webnet_auth_set); +#endif /** * Authorization module handler diff --git a/module/wn_module_cgi.c b/module/wn_module_cgi.c old mode 100644 new mode 100755 index 419211d..cd58daa --- a/module/wn_module_cgi.c +++ b/module/wn_module_cgi.c @@ -18,15 +18,22 @@ * * Change Logs: * Date Author Notes - * 2022-05-09 chunyexixiaoyu the version transplanted from rt-thread + * 2022-05-09 chunyexixiaoyu the version transplanted from rt-thread + * 2022-09-07 zhaoyun the version transplanted for XiZi */ #include #include #include #include +#include #include + +#ifdef ADD_XIZI_FETURES +#include +#endif + #ifdef WEBNET_USING_CGI #define CGI_ROOT_PATH_MAX 64 diff --git a/module/wn_module_dav.c b/module/wn_module_dav.c old mode 100644 new mode 100755 index 3e90736..4f148cd --- a/module/wn_module_dav.c +++ b/module/wn_module_dav.c @@ -18,13 +18,20 @@ * * Change Logs: * Date Author Notes - * 2022-05-09 chunyexixiaoyu the version transplanted from rt-thread + * 2022-05-09 chunyexixiaoyu the version transplanted from rt-thread + * 2022-09-07 zhaoyun the version transplanted for XiZi */ #include + #include #include #include #include + + +#ifdef ADD_XIZI_FETURES +#include +#endif #ifdef WEBNET_USING_DAV struct webnet_module_put_entry @@ -100,10 +107,10 @@ int webnet_module_dav(struct webnet_session* session, int event) printf("PROPFIND %s depth: %s", session->request->path, session->request->depth?session->request->depth:"null"); - fd = open(session->request->path, O_RDONLY, 0); + fd = wn_open(session->request->path, O_RDONLY, 0); if (fd >= 0) { - close(fd); + wn_close(fd); exit_file = 1; } dir = opendir(session->request->path); @@ -276,9 +283,23 @@ static void print_propfind_element(struct webnet_session *session, const char *u time_t t = file_stat->st_mtime; + #ifdef ADD_RTTHREAD_FETURES PrivTaskenterCritical(); + #endif + + #ifdef ADD_XIZI_FETURES + long lock; + lock = CriticalAreaLock(); + #endif + strftime(ctime_str, sizeof(ctime_str), "%a, %d %b %Y %H:%M:%S GMT", localtime(&t)); + #ifdef ADD_RTTHREAD_FETURES PrivTaskexitCritical(); + #endif + + #ifdef ADD_XIZI_FETURES + CriticalAreaUnLock(lock); + #endif //printf("strftime: %s\n", ctime_str); webnet_session_printf(session, @@ -296,7 +317,7 @@ static int put_open (struct webnet_session* session) goto _exit; } - fd = open(session->request->path, O_WRONLY | O_CREAT | O_TRUNC, 0); + fd = wn_open(session->request->path, O_WRONLY | O_CREAT | O_TRUNC, 0); if(fd < 0) { session->session_phase = WEB_PHASE_CLOSE; @@ -319,7 +340,7 @@ static int put_close(struct webnet_session* session) fd = (int)webnet_put_get_userdata(session); if (fd < 0) return 0; - close(fd); + wn_close(fd); return 0; } diff --git a/module/wn_module_index.c b/module/wn_module_index.c old mode 100644 new mode 100755 index 1732cf1..de83d9e --- a/module/wn_module_index.c +++ b/module/wn_module_index.c @@ -18,13 +18,19 @@ * * Change Logs: * Date Author Notes - * 2022-05-09 chunyexixiaoyu the version transplanted from rt-thread + * 2022-05-09 chunyexixiaoyu the version transplanted from rt-thread + * 2022-09-07 zhaoyun the version transplanted for XiZi */ #include + #include #include #include +#ifdef ADD_XIZI_FETURES +#include +#endif + #ifdef WEBNET_USING_INDEX int webnet_module_dirindex(struct webnet_session* session, int event) diff --git a/module/wn_module_log.c b/module/wn_module_log.c old mode 100644 new mode 100755 index 3ce0ab9..c6de21c --- a/module/wn_module_log.c +++ b/module/wn_module_log.c @@ -18,13 +18,19 @@ * * Change Logs: * Date Author Notes - * 2022-05-09 chunyexixiaoyu the version transplanted from rt-thread + * 2022-05-09 chunyexixiaoyu the version transplanted from rt-thread + * 2022-09-07 zhaoyun the version transplanted for XiZi */ #include + #include #include #include +#ifdef ADD_XIZI_FETURES +#include +#endif + #ifdef WEBNET_USING_LOG int webnet_module_log(struct webnet_session* session, int event) @@ -42,7 +48,7 @@ int webnet_module_log(struct webnet_session* session, int event) if (event == WEBNET_EVENT_INIT) { - printf("server initialize success."); + printf("server initialize success.\n"); } else if (event == WEBNET_EVENT_URI_PHYSICAL) { @@ -75,7 +81,7 @@ int webnet_module_log(struct webnet_session* session, int event) default: break; } - printf(" request: %s", request->path); + printf(" request: %s\n", request->path); for (index = 0; index < request->query_counter; index ++) { printf(" query[%d]: %s => %s", index, @@ -87,7 +93,7 @@ int webnet_module_log(struct webnet_session* session, int event) { printf("event post uri physical url: %s", request->path); - printf("mime type: %s", mime_get_type(request->path)); + printf("mime type: %s\n", mime_get_type(request->path)); } else if (event == WEBNET_EVENT_RSP_HEADER) { diff --git a/module/wn_module_ssi.c b/module/wn_module_ssi.c old mode 100644 new mode 100755 index e0e688a..9d4ecfe --- a/module/wn_module_ssi.c +++ b/module/wn_module_ssi.c @@ -19,11 +19,18 @@ * Change Logs: * Date Author Notes * 2022-05-09 chunyexixiaoyu the version transplanted from rt-thread + * 2022-09-07 zhaoyun the version transplanted for XiZi */ #include + #include #include #include + +#ifdef ADD_XIZI_FETURES +#include +#endif + #if defined(WEBNET_USING_SSI) #define SSI_INCLUDE_STRING " diff --git a/webnet/css/layout.css b/webnet/css/layout.css old mode 100644 new mode 100755 diff --git a/webnet/deviceinfo.asp b/webnet/deviceinfo.asp old mode 100644 new mode 100755 index 3acb30b..beb607b --- a/webnet/deviceinfo.asp +++ b/webnet/deviceinfo.asp @@ -3,12 +3,13 @@ + - + xidatong web server set page @@ -144,4 +145,4 @@ - + \ No newline at end of file diff --git a/webnet/index_origin.html b/webnet/index_origin.html old mode 100644 new mode 100755 diff --git a/webnet/js/Chart.bundle.min.js b/webnet/js/Chart.bundle.min.js old mode 100644 new mode 100755 diff --git a/webnet/logo/logo.png b/webnet/logo/logo.png old mode 100644 new mode 100755 diff --git a/webnet/mqtt.html b/webnet/mqtt.html old mode 100644 new mode 100755 index 74e75b5..6774be6 --- a/webnet/mqtt.html +++ b/webnet/mqtt.html @@ -2,6 +2,7 @@ + diff --git a/webnet/netsetting.html b/webnet/netsetting.html old mode 100644 new mode 100755 index e31d263..c552169 --- a/webnet/netsetting.html +++ b/webnet/netsetting.html @@ -2,6 +2,7 @@ xidatong web server set page + diff --git a/webnet/privateProtocol.html b/webnet/privateProtocol.html old mode 100644 new mode 100755 index cec550a..076c807 --- a/webnet/privateProtocol.html +++ b/webnet/privateProtocol.html @@ -2,6 +2,7 @@ + diff --git a/webnet/systemModify.html b/webnet/systemModify.html old mode 100644 new mode 100755 index fd01360..62bccf7 --- a/webnet/systemModify.html +++ b/webnet/systemModify.html @@ -2,6 +2,7 @@ + diff --git a/webnet/tcp.html b/webnet/tcp.html old mode 100644 new mode 100755 index 7e791c0..bb18337 --- a/webnet/tcp.html +++ b/webnet/tcp.html @@ -3,11 +3,12 @@ + - + xidatong web server set page -- 2.34.1 From 1dff04fd3880640400f9fb8472706e428be2f137 Mon Sep 17 00:00:00 2001 From: zhaoyun1215 <58766762@qq.com> Date: Wed, 14 Sep 2022 05:22:14 -0700 Subject: [PATCH 6/8] for webnet and netdev --- .vscode/settings.json | 8 ++++++++ 1 file changed, 8 insertions(+) create mode 100644 .vscode/settings.json diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 0000000..de29c4c --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,8 @@ +{ + "files.associations": { + "assert.h": "c", + "wn_utils.h": "c", + "webnet.h": "c", + "wn_module.h": "c" + } +} \ No newline at end of file -- 2.34.1 From 135c842fb84deb8dfbbf2bb86d70508986d21aa1 Mon Sep 17 00:00:00 2001 From: zhaoyun1215 <58766762@qq.com> Date: Wed, 14 Sep 2022 20:28:45 -0700 Subject: [PATCH 7/8] change for posix --- inc/wn_request.h | 25 +---------- inc/wn_session.h | 7 ---- module/wn_module_alias.c | 6 +-- module/wn_module_asp.c | 35 ++++++---------- module/wn_module_auth.c | 5 --- module/wn_module_cgi.c | 4 -- module/wn_module_dav.c | 7 +--- module/wn_module_index.c | 3 -- module/wn_module_log.c | 3 -- module/wn_module_ssi.c | 3 -- module/wn_module_upload.c | 20 +-------- samples/deviceinfoasp.c | 8 ++-- samples/netsetting.c | 9 +--- samples/uploaddata.c | 25 +++++------ src/webnet.c | 58 +++----------------------- src/wn_module.c | 27 ++---------- src/wn_request.c | 88 ++------------------------------------- src/wn_session.c | 9 ---- src/wn_utils.c | 11 +---- 19 files changed, 46 insertions(+), 307 deletions(-) diff --git a/inc/wn_request.h b/inc/wn_request.h index c8c1516..0129393 100755 --- a/inc/wn_request.h +++ b/inc/wn_request.h @@ -25,17 +25,8 @@ #ifndef __WN_REQUEST_H__ #define __WN_REQUEST_H__ #include -#ifdef ADD_RTTHREAD_FETURES -#include -#endif #include - -#ifdef ADD_XIZI_FETURES -#include -#include -#endif - #ifdef __cplusplus extern "C" { #endif @@ -86,12 +77,7 @@ struct webnet_request char* modified; #endif /* WEBNET_CACHE_LEVEL */ #ifdef WEBNET_USING_GZIP - #ifdef ADD_RTTHREAD_FETURES bool support_gzip; - #endif - #ifdef ADD_XIZI_FETURES - _Bool support_gzip; - #endif #endif /* WEBNET_USING_GZIP */ char* user_agent; @@ -125,12 +111,7 @@ struct webnet_request enum webnet_connection connection; /* whether the string filed is copied */ - #ifdef ADD_RTTHREAD_FETURES bool field_copied; - #endif - #ifdef ADD_XIZI_FETURES - _Bool field_copied; - #endif }; struct webnet_request* webnet_request_create(void); @@ -142,12 +123,8 @@ int webnet_request_parse_post(struct webnet_request* request, char* buffer, int void webnet_request_parse(struct webnet_request* request, char* buffer, int length); -#ifdef ADD_RTTHREAD_FETURES bool webnet_request_has_query(struct webnet_request* request, char* name); -#endif -#ifdef ADD_XIZI_FETURES -_Bool webnet_request_has_query(struct webnet_request* request, char* name); -#endif + const char* webnet_request_get_query(struct webnet_request* request, char* name); #ifdef __cplusplus diff --git a/inc/wn_session.h b/inc/wn_session.h index 68971df..37d5f61 100755 --- a/inc/wn_session.h +++ b/inc/wn_session.h @@ -28,13 +28,6 @@ #include #include -#ifdef ADD_XIZI_FETURES -#include -#include "sys_arch.h" -#include -#include "lwip/sys.h" -#endif - #ifdef __cplusplus extern "C" { #endif diff --git a/module/wn_module_alias.c b/module/wn_module_alias.c index f3d6039..741e2cd 100755 --- a/module/wn_module_alias.c +++ b/module/wn_module_alias.c @@ -18,7 +18,7 @@ * * Change Logs: * Date Author Notes - * 2022-05-09 chunyexixiaoyu the version transplanted from rt-thread + * 2022-05-09 chunyexixiaoyu the version transplanted from rt-thread * 2022-09-07 zhaoyun the version transplanted for XiZi */ @@ -26,10 +26,8 @@ #include #include #include +#include -#ifdef ADD_XIZI_FETURES -#include -#endif #ifdef WEBNET_USING_ALIAS diff --git a/module/wn_module_asp.c b/module/wn_module_asp.c index 75abf54..557b875 100755 --- a/module/wn_module_asp.c +++ b/module/wn_module_asp.c @@ -22,19 +22,13 @@ * 2022-09-07 zhaoyun the version transplanted for XiZi */ -#include +#include #include #include #include #include #include - -#ifdef ADD_XIZI_FETURES -#include -#include // for "open,read,close",if not will use the command from lwip -#endif - #ifdef WEBNET_USING_ASP struct webnet_asp_variable @@ -119,18 +113,12 @@ static void _default_asp_handler(struct webnet_session* session, const char* nam } else if (strncmp(name, "TICK", 4) == 0) { - int32 tick; //这里定义的tick是多少秒的意思,并不是正常意义上的tick(个人感觉定义为:sum_time更好) + int32 tick; int32 hour, min, second; - #ifdef ADD_RTTHREAD_FETURES - tick = rt_tick_get()/RT_TICK_PER_SECOND; - #endif - #ifdef ADD_XIZI_FETURES - tick = CurrentTicksGain() / TICK_PER_SECOND; - #endif + tick = GetTick(); second = tick % 60; min = (tick/60) % 60; hour = tick / (60 * 60); - webnet_session_printf(session, "%02d:%02d:%02d", hour, min, second); } } @@ -148,9 +136,7 @@ static void _webnet_asp_dofile(struct webnet_session* session, int fd) /* allocate read buffer */ buffer = (char*) wn_malloc (length); - #ifdef ADD_XIZI_FETURES memset(buffer,0,length); - #endif if (buffer == NULL) { session->request->result_code = 500; @@ -160,7 +146,10 @@ static void _webnet_asp_dofile(struct webnet_session* session, int fd) /* write page header */ webnet_session_set_header(session, "text/html", 200, "OK", -1); /* read file to buffer */ - if (read(fd, buffer, (uint32)length) != length) /* read failed */ + + int read_length=wn_read(fd, buffer, (uint32)length); + printf("read_lenth:%d\n",read_length);//needed to delete + if (read_length != length) /* read failed */ { wn_free(buffer); session->request->result_code = 500; @@ -241,18 +230,18 @@ int webnet_module_asp(struct webnet_session* session, int event) { /* try to open this file */ - fd = open(request->path, O_RDONLY, 0); + fd = wn_open(request->path, O_RDONLY, 0); if ( fd >= 0) { _webnet_asp_dofile(session, fd); - close(fd); + wn_close(fd); return WEBNET_MODULE_FINISHED; } else { /* no this file */ request->result_code = 404; - close(fd);//zhaoyun add + wn_close(fd);//zhaoyun add return WEBNET_MODULE_FINISHED; } } @@ -265,13 +254,13 @@ int webnet_module_asp(struct webnet_session* session, int event) if (asp_filename != NULL) { snprintf(asp_filename, WEBNET_PATH_MAX, "%s/index.asp", request->path); - fd = open(asp_filename, O_RDONLY, 0); + fd = wn_open(asp_filename, O_RDONLY, 0); if (fd >= 0) { wn_free(asp_filename); _webnet_asp_dofile(session, fd); - close(fd); + wn_close(fd); return WEBNET_MODULE_FINISHED; } } diff --git a/module/wn_module_auth.c b/module/wn_module_auth.c index 54b2a14..7cf6c78 100755 --- a/module/wn_module_auth.c +++ b/module/wn_module_auth.c @@ -23,16 +23,11 @@ */ #include - - #include #include #include #include -#ifdef ADD_XIZI_FETURES -#include -#endif #ifdef WEBNET_USING_AUTH struct webnet_auth_item diff --git a/module/wn_module_cgi.c b/module/wn_module_cgi.c index cd58daa..bd27c0e 100755 --- a/module/wn_module_cgi.c +++ b/module/wn_module_cgi.c @@ -30,10 +30,6 @@ #include -#ifdef ADD_XIZI_FETURES -#include -#endif - #ifdef WEBNET_USING_CGI #define CGI_ROOT_PATH_MAX 64 diff --git a/module/wn_module_dav.c b/module/wn_module_dav.c index 4f148cd..27dad76 100755 --- a/module/wn_module_dav.c +++ b/module/wn_module_dav.c @@ -29,9 +29,6 @@ #include -#ifdef ADD_XIZI_FETURES -#include -#endif #ifdef WEBNET_USING_DAV struct webnet_module_put_entry @@ -290,7 +287,7 @@ static void print_propfind_element(struct webnet_session *session, const char *u #ifdef ADD_XIZI_FETURES long lock; lock = CriticalAreaLock(); - #endif + #endif //ADD_XIZI_FETURES strftime(ctime_str, sizeof(ctime_str), "%a, %d %b %Y %H:%M:%S GMT", localtime(&t)); #ifdef ADD_RTTHREAD_FETURES @@ -299,7 +296,7 @@ static void print_propfind_element(struct webnet_session *session, const char *u #ifdef ADD_XIZI_FETURES CriticalAreaUnLock(lock); - #endif + #endif //ADD_XIZI_FETURES //printf("strftime: %s\n", ctime_str); webnet_session_printf(session, diff --git a/module/wn_module_index.c b/module/wn_module_index.c index de83d9e..c4498c8 100755 --- a/module/wn_module_index.c +++ b/module/wn_module_index.c @@ -27,9 +27,6 @@ #include #include -#ifdef ADD_XIZI_FETURES -#include -#endif #ifdef WEBNET_USING_INDEX diff --git a/module/wn_module_log.c b/module/wn_module_log.c index c6de21c..c3737c2 100755 --- a/module/wn_module_log.c +++ b/module/wn_module_log.c @@ -27,9 +27,6 @@ #include #include -#ifdef ADD_XIZI_FETURES -#include -#endif #ifdef WEBNET_USING_LOG diff --git a/module/wn_module_ssi.c b/module/wn_module_ssi.c index 9d4ecfe..63fad19 100755 --- a/module/wn_module_ssi.c +++ b/module/wn_module_ssi.c @@ -27,9 +27,6 @@ #include #include -#ifdef ADD_XIZI_FETURES -#include -#endif #if defined(WEBNET_USING_SSI) diff --git a/module/wn_module_upload.c b/module/wn_module_upload.c index c156a14..5d2d34e 100755 --- a/module/wn_module_upload.c +++ b/module/wn_module_upload.c @@ -28,10 +28,6 @@ #include -#ifdef ADD_XIZI_FETURES -#include -#endif - #if defined(WEBNET_USING_UPLOAD) #define MULTIPART_FORM_DATA_STRING "multipart/form-data" @@ -162,7 +158,7 @@ static char* memstrs(const char* str, uint32 length, int num, ...) return ptr; } -#if !(defined(__GNUC__) && !defined(__ARMCC_VERSION)/*GCC*/) + static void* memrchr(const void *s, int c, uint32 n) { register const char* t=s; @@ -181,7 +177,6 @@ static void* memrchr(const void *s, int c, uint32 n) } return (void*)last; /* man, what an utterly b0rken prototype */ } -#endif static char* _webnet_module_upload_parse_header(struct webnet_session* session, char* buffer, uint32 length) { @@ -338,19 +333,6 @@ static char* _webnet_module_upload_parse_header(struct webnet_session* session, return ptr; } -#ifdef ADD_XIZI_FETURES -void* memrchr(const void* ptr, int ch, size_t pos) -{ - char* end = (char*)ptr + pos - 1; - while (end != ptr) - { - if (*end == ch) - return end; - end--; - } - return (*end == ch) ? (end) : (NULL); -} -#endif static char* _next_possible_boundary(struct webnet_session* session, char* buffer, uint32 length) { diff --git a/samples/deviceinfoasp.c b/samples/deviceinfoasp.c index d4e152f..98dacbb 100755 --- a/samples/deviceinfoasp.c +++ b/samples/deviceinfoasp.c @@ -1,9 +1,7 @@ #include "deviceinfoasp.h" #ifdef ADD_XIZI_FETURES -#include -#include extern void HwCpuReset();//reset machine -#endif +#endif //ADD_XIZI_FETURES #ifdef ADD_XIZI_FETURES deviceinfo xidatong_deviceinfo = @@ -16,7 +14,7 @@ deviceinfo xidatong_deviceinfo = SYSTEM_VERSION, WEB_VERSION }; -#endif +#endif //ADD_XIZI_FETURES #ifdef ADD_RTTHREAD_FETURES deviceinfo xidatong_deviceinfo = @@ -107,7 +105,7 @@ void cgi_device_reboot(struct webnet_session* session) #ifdef ADD_XIZI_FETURES HwCpuReset(); - #endif + #endif //ADD_XIZI_FETURES } diff --git a/samples/netsetting.c b/samples/netsetting.c index c74ab9c..67c8534 100755 --- a/samples/netsetting.c +++ b/samples/netsetting.c @@ -3,14 +3,9 @@ #ifdef ADD_XIZI_FETURES -#include -#include // for "open,read,close",if not will use the command from lwip -#include "sys_arch.h" -#include -#include "lwip/sys.h" #include #include -#endif +#endif //ADD_XIZI_FETURES static mqttsetting mqttweb; static local_tcpip local_tcpipweb; @@ -129,7 +124,7 @@ static void device_get_tcpip_parameter() #ifdef ADD_XIZI_FETURES SHELL_EXPORT_CMD(SHELL_CMD_PERMISSION(0) | SHELL_CMD_TYPE(SHELL_TYPE_CMD_MAIN) | SHELL_CMD_PARAM_NUM(0), device_get_tcpip_parameter,device_get_tcpip_parameter, device_get_tcpip_parameter); -#endif +#endif //ADD_XIZI_FETURES char *json_create_tcpip_data(void) { diff --git a/samples/uploaddata.c b/samples/uploaddata.c index d3feb79..fbc752c 100755 --- a/samples/uploaddata.c +++ b/samples/uploaddata.c @@ -1,17 +1,12 @@ #include "uploaddata.h" - -#ifdef ADD_XIZI_FETURES #include -#include -#include -#endif //ADD_XIZI_FETURES char msg[] = "/mq_upload_web"; sensor_msg eg_temperature; sensor_msg web_show; static mqd_t mq_web=-1; -void upload_receive_web_msg_thread() +void *upload_receive_web_msg_thread() { int nbytes = 0; while(1) @@ -56,27 +51,27 @@ int uploaddata_init() printf("mq_open success: %d \n",mq_web); } - - #ifdef ADD_RTTHREAD_FETURES pthread_t tid = 0; pthread_attr_t attr; struct sched_param prio; + + #ifdef ADD_RTTHREAD_FETURES prio.sched_priority = 8; + #endif //ADD_RTTHREAD_FETURES + + #ifdef ADD_XIZI_FETURES + prio.sched_priority = 25; + #endif //ADD_XIZI_FETURES + size_t stack_size = 1024 * 11; pthread_attr_init(&attr); pthread_attr_setschedparam(&attr, &prio); pthread_attr_setstacksize(&attr, stack_size); result = pthread_create(&tid, &attr,upload_receive_web_msg_thread, NULL); - #endif //ADD_RTTHREAD_FETURES - - #ifdef ADD_XIZI_FETURES - result = sys_thread_new("upload_receive_web_msg_thread", upload_receive_web_msg_thread, NULL, WEBNET_THREAD_STACKSIZE, 25); - #endif //ADD_XIZI_FETURES - if (result>=0) { printf("thread_detect_entry successfully!\n"); - } + } else { printf("thread_detect_entry failed! error code is %d.\n", result); diff --git a/src/webnet.c b/src/webnet.c index aeec69b..cfcb68f 100755 --- a/src/webnet.c +++ b/src/webnet.c @@ -27,43 +27,15 @@ #include #include -#ifdef ADD_XIZI_FETURES -#include "sys_arch.h" -#include -#include "lwip/sys.h" -#include -#endif // ADD_XIZI_FETURES - - - -#ifdef ADD_RTTHREAD_FETURES -#if defined(RT_USING_LWIP) && (RT_LWIP_TCPTHREAD_STACKSIZE < 1408) -#error The lwIP tcpip thread stack size(RT_LWIP_TCPTHREAD_STACKSIZE) must more than 1408 -#endif -#endif -/* -other os kernel need to notice the point about lwip thread stack. -*/ - static uint8 webnet_port = WEBNET_PORT; static char webnet_root[64] = WEBNET_ROOT; -#ifdef ADD_XIZI_FETURES -static _Bool init_ok = 0; -#endif // ADD_XIZI_FETURES -#ifdef ADD_RTTHREAD_FETURES + static bool init_ok = FALSE; -#endif //ADD_RTTHREAD_FETURES void webnet_set_port(int port) { - #ifdef ADD_XIZI_FETURES - assert(init_ok == 0); - #endif // ADD_XIZI_FETURES - - #ifdef ADD_RTTHREAD_FETURES assert(init_ok == FALSE); - #endif //ADD_RTTHREAD_FETURES webnet_port = port; } @@ -86,7 +58,7 @@ const char* webnet_get_root(void) /** * webnet thread entry */ -static void webnet_thread(void *parameter) +static void *webnet_thread(void *parameter) { int listenfd = -1; fd_set readset, tempfds; @@ -151,7 +123,7 @@ static void webnet_thread(void *parameter) tempwrtfds = writeset; /* Wait for data or a new connection */ #ifdef ADD_XIZI_FETURES - sys_msleep(1); + sys_msleep(100); #endif // ADD_XIZI_FETURES sock_fd = select(maxfdp1, &tempfds, &tempwrtfds, 0, 0); if (sock_fd == 0) @@ -203,42 +175,22 @@ int webnet_init(void) lwip_config_net(lwip_ipaddr, lwip_netmask, lwip_gwaddr); #endif // ADD_XIZI_FETURES - #ifdef ADD_RTTHREAD_FETURES pthread_t tid; pthread_attr_t attr; struct sched_param prio; prio.sched_priority = WEBNET_PRIORITY; size_t stack_size = WEBNET_THREAD_STACKSIZE; + pthread_attr_init(&attr); pthread_attr_setschedparam(&attr, &prio); pthread_attr_setstacksize(&attr, stack_size); - if (init_ok == TRUE) - { - printf("XiUOS webnet package is already initialized."); - return 0; - } result = pthread_create(&tid, &attr, webnet_thread, NULL); - #endif //ADD_RTTHREAD_FETURES - - #ifdef ADD_XIZI_FETURES - result = sys_thread_new("webnet_init", webnet_thread, NULL, WEBNET_THREAD_STACKSIZE, WEBNET_PRIORITY); - #endif // ADD_XIZI_FETURES - - #ifdef ADD_XIZI_FETURES - if (result>=0) - { - init_ok = 1; - printf("XiUOS webnet initialize success\n."); - } - #endif // ADD_XIZI_FETURES - - #ifdef ADD_RTTHREAD_FETURES + if (0 == result) { init_ok = TRUE; printf("XiUOS webnet initialize success."); } - #endif //ADD_RTTHREAD_FETURES else { printf("XiUOS webnet initialize failed\n."); diff --git a/src/wn_module.c b/src/wn_module.c index a2eefe0..fbc2d7c 100755 --- a/src/wn_module.c +++ b/src/wn_module.c @@ -27,12 +27,6 @@ #include -#ifdef ADD_XIZI_FETURES -#include -#include -#include -#endif // ADD_XIZI_FETURES - static int _webnet_module_system_init(struct webnet_session *session, int event) { #ifdef WEBNET_USING_LOG @@ -147,13 +141,7 @@ int webnet_module_system_dofile(struct webnet_session *session) int fd = -1; /* file descriptor */ struct stat file_stat; const char *mimetype; - - #ifdef ADD_XIZI_FETURES - size_t file_length; - #endif // ADD_XIZI_FETURES - #ifdef ADD_RTTHREAD_FETURES - unsigned long file_length; - #endif //ADD_RTTHREAD_FETURES + unsigned long file_length; struct webnet_request *request; #if WEBNET_CACHE_LEVEL > 0 @@ -185,13 +173,10 @@ int webnet_module_system_dofile(struct webnet_session *session) if (stat_result == 0) { - //PrivTaskenterCritical(); #ifdef ADD_XIZI_FETURES long lock; - int lock = CriticalAreaLock(); - #endif // ADD_XIZI_FETURES - - + lock = CriticalAreaLock(); + #endif // ADD_XIZI_FETURES #ifdef ADD_RTTHREAD_FETURES PrivTaskenterCritical(); @@ -279,13 +264,7 @@ int webnet_module_system_dofile(struct webnet_session *session) if (fd < 0) { /* .gz not exist, use raw. */ - #ifdef ADD_XIZI_FETURES - request->support_gzip = 0;//0 ->false - #endif // ADD_XIZI_FETURES - - #ifdef ADD_RTTHREAD_FETURES request->support_gzip = FALSE; - #endif //ADD_RTTHREAD_FETURES } } } diff --git a/src/wn_request.c b/src/wn_request.c index 8c26d41..08294e0 100755 --- a/src/wn_request.c +++ b/src/wn_request.c @@ -29,11 +29,6 @@ #include #include -#ifdef ADD_XIZI_FETURES -#include -#include -#include -#endif // ADD_XIZI_FETURES #define POST_BUFSZ_MAX (8 * 1024) @@ -147,42 +142,22 @@ static void _webnet_request_copy_str(struct webnet_request* request) #ifdef WEBNET_USING_RANGE if (request->Range) request->Range = wn_strdup(request->Range); #endif /* WEBNET_USING_RANGE */ - - #ifdef ADD_XIZI_FETURES - request->field_copied = 1;//true - #endif // ADD_XIZI_FETURES - - #ifdef ADD_RTTHREAD_FETURES request->field_copied = TRUE; - #endif //ADD_RTTHREAD_FETURES } /** * to check whether a query on the http request. */ -_Bool webnet_request_has_query(struct webnet_request* request, char* name) +bool webnet_request_has_query(struct webnet_request* request, char* name) { uint32 index; for (index = 0; index < request->query_counter; index ++) { if (strncmp(request->query_items[index].name, name, strlen(name)) == 0) - - #ifdef ADD_XIZI_FETURES - return 1;//true - #endif // ADD_XIZI_FETURES - - #ifdef ADD_RTTHREAD_FETURES return TRUE; - #endif //ADD_RTTHREAD_FETURES } - #ifdef ADD_XIZI_FETURES - return 0;//true - #endif // ADD_XIZI_FETURES - - #ifdef ADD_RTTHREAD_FETURES - return FALSE; - #endif //ADD_RTTHREAD_FETURES + return FALSE; } #ifdef ADD_RTTHREAD_FETURES RTM_EXPORT(webnet_request_has_query); @@ -340,14 +315,8 @@ int webnet_request_parse_header(struct webnet_request *request, char* buffer, in if(request->query != NULL) { wn_free(request->query); } - request->query = (char*) wn_malloc(request->content_length + 1); - - #ifdef ADD_XIZI_FETURES + request->query = (char*) wn_malloc(request->content_length + 1); memset(request->query, 0, request->content_length + 1); - #endif // ADD_XIZI_FETURES - #ifdef ADD_RTTHREAD_FETURES - rt_memset(request->query, 0, request->content_length + 1); - #endif //ADD_RTTHREAD_FETURES request->query_offset = 0; } } @@ -492,13 +461,7 @@ int webnet_request_parse_header(struct webnet_request *request, char* buffer, in if( (gzip != NULL)) { - - #ifdef ADD_XIZI_FETURES - request->support_gzip = 1;//1->true - #endif // ADD_XIZI_FETURES - #ifdef ADD_RTTHREAD_FETURES request->support_gzip = TRUE; - #endif //ADD_RTTHREAD_FETURES } } #endif /* WEBNET_USING_GZIP */ @@ -532,13 +495,7 @@ int webnet_request_parse_post(struct webnet_request* request, char* buffer, int if (request->query_offset + length > request->content_length) length = request->content_length - request->query_offset; - - #ifdef ADD_XIZI_FETURES memcpy(&request->query[request->query_offset], buffer, length); - #endif // ADD_XIZI_FETURES - #ifdef ADD_RTTHREAD_FETURES - rt_memcpy(&request->query[request->query_offset], buffer, length); - #endif //ADD_RTTHREAD_FETURES request->query_offset += length; if (request->query_offset == request->content_length) @@ -722,16 +679,9 @@ void webnet_request_parse(struct webnet_request* request, char* buffer, int leng /* end of http request */ request->result_code = 200; - - #ifdef ADD_XIZI_FETURES session->buffer_offset = (uint16_t)(length - ((uint32)request->query - (uint32)buffer)); - #endif // ADD_XIZI_FETURES - #ifdef ADD_RTTHREAD_FETURES - session->buffer_offset = (rt_uint16_t)(length - - ((uint32)request->query - (uint32)buffer)); - #endif //ADD_RTTHREAD_FETURES /* move the buffer to the session */ if (session->buffer_offset > 0) { @@ -739,14 +689,7 @@ void webnet_request_parse(struct webnet_request* request, char* buffer, int leng * NOTIC: the rest of buffer must not be great than session buffer * Therefore, the size of read buffer can equal to the size of session buffer. */ - #ifdef ADD_XIZI_FETURES - memcpy(session->buffer, request->query, session->buffer_offset); - #endif // ADD_XIZI_FETURES - - #ifdef ADD_RTTHREAD_FETURES - rt_memcpy(session->buffer, request->query, session->buffer_offset); - #endif //ADD_RTTHREAD_FETURES - + memcpy(session->buffer, request->query, session->buffer_offset); } request->query = NULL; return; @@ -774,14 +717,7 @@ void webnet_request_parse(struct webnet_request* request, char* buffer, int leng if (read_length > 0) { if (read_length > request->content_length) read_length = request->content_length; - - #ifdef ADD_XIZI_FETURES memcpy(read_ptr, request->query, read_length); - #endif // ADD_XIZI_FETURES - #ifdef ADD_RTTHREAD_FETURES - rt_memcpy(read_ptr, request->query, read_length); - #endif //ADD_RTTHREAD_FETURES - } request->query = read_ptr; @@ -931,14 +867,7 @@ void webnet_request_parse(struct webnet_request* request, char* buffer, int leng if( (gzip != NULL) && (end != NULL) && (gzip < end) ) { - #ifdef ADD_XIZI_FETURES - request->support_gzip = 1;//1->true - #endif // ADD_XIZI_FETURES - - #ifdef ADD_RTTHREAD_FETURES request->support_gzip = TRUE; - #endif //ADD_RTTHREAD_FETURES - } } #endif /* WEBNET_USING_GZIP */ @@ -979,17 +908,8 @@ struct webnet_request* webnet_request_create() request = (struct webnet_request*) wn_malloc (sizeof(struct webnet_request)); if (request != NULL) { - #ifdef ADD_XIZI_FETURES memset(request, 0, sizeof(struct webnet_request)); - request->field_copied = 0;//false - #endif // ADD_XIZI_FETURES - - #ifdef ADD_RTTHREAD_FETURES - rt_memset(request, 0, sizeof(struct webnet_request)); request->field_copied = FALSE; - #endif //ADD_RTTHREAD_FETURES - - } return request; diff --git a/src/wn_session.c b/src/wn_session.c index 24e18f3..7d88e5f 100755 --- a/src/wn_session.c +++ b/src/wn_session.c @@ -30,15 +30,6 @@ #include #include - #ifdef ADD_XIZI_FETURES - #include -#include "sys_arch.h" -#include -#include "lwip/sys.h" -#include -//#include -#endif // ADD_XIZI_FETURES - #ifdef ADD_RTTHREAD_FETURES #include #endif //ADD_RTTHREAD_FETURES diff --git a/src/wn_utils.c b/src/wn_utils.c index 8af4294..9741460 100755 --- a/src/wn_utils.c +++ b/src/wn_utils.c @@ -23,18 +23,9 @@ */ #include - - -#ifdef ADD_XIZI_FETURES -#include -#endif // ADD_XIZI_FETURES - -#ifdef ADD_RTTHREAD_FETURES -#include -#endif //ADD_RTTHREAD_FETURES - #include #include +#include inline int tohex(char c) { -- 2.34.1 From 42a888a7e739a27f5301dae4d69470c7521e0887 Mon Sep 17 00:00:00 2001 From: zhaoyun1215 <58766762@qq.com> Date: Thu, 15 Sep 2022 19:08:51 -0700 Subject: [PATCH 8/8] change for posix --- module/wn_module_asp.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/module/wn_module_asp.c b/module/wn_module_asp.c index 557b875..0368e03 100755 --- a/module/wn_module_asp.c +++ b/module/wn_module_asp.c @@ -115,7 +115,7 @@ static void _default_asp_handler(struct webnet_session* session, const char* nam { int32 tick; int32 hour, min, second; - tick = GetTick(); + tick = PriGetTick(); second = tick % 60; min = (tick/60) % 60; hour = tick / (60 * 60); -- 2.34.1