Урок 87
Часть 2
LAN. ENC28J60. TCP WEB Server. Передаём страницу побольше
В предыдущей части урока мы провели определённую оптимизацию проекта и написали код, который отличает запрос клинетом главной страницы от остальных запросов, а также передали ответ на запрос клиентом несуществущего документа. Также мы передали клиенту страницу, состоящую из двух пакетов TCP.
Дальнейшая работа предстоит над передачей документа в три и более пакета. Для этого создадим функцию для передачи одного из средних пакетов документа. Добавим её между функциями передачи первого и последнего пакетов
//--------------------------------------------------
/*Отправка среднего пакета многопакетного ответа HTTP*/
uint8_t tcp_send_http_middle(enc28j60_frame_ptr *frame, uint8_t *ip_addr, uint16_t port)
{
uint8_t res=0;
uint16_t len_tcp=0, len=0;
ip_pkt_ptr *ip_pkt = (void*)(frame->data);
tcp_pkt_ptr *tcp_pkt = (void*)(ip_pkt->data);
return res;
}
//--------------------------------------------------
Вызовем данную функцию в последнем условии функции tcp_read
else if (tcp_pkt->fl == TCP_ACK)
{
if (tcpprop.data_stat==DATA_END)
{
tcp_send_http_dataend(frame, ip_pkt->ipaddr_src, tcpprop.port_dst);
}
else if (tcpprop.data_stat==DATA_MIDDLE)
{
tcp_send_http_middle(frame, tcpprop.ipaddr_dst, tcpprop.port_dst);
}
else if (tcpprop.data_stat==DATA_LAST)
Продолжим писать нашу функцию.
Как всегда, вычислим номер сегмента и сохраним его в структуре в соответствующем поле, а также занесём длину заголовка TCP в соответствующую переменную
tcp_pkt_ptr *tcp_pkt = (void*)(ip_pkt->data);
//Отправляем одну из средних частей страницы
//Заполним заголовок пакета TCP
tcpprop.seq_num = be32todword(be32todword(tcpprop.seq_num)+tcp_mss);
len_tcp = sizeof(tcp_pkt_ptr);
Затем заполним поле данных, применяя операции копирования из FLASH-памяти, а также применяя хитрый расчёт смещения по массиву с документом, зависящий от общего количества частей и оставшегося количества частей (для чего мы в начале занятия и придумывали новое поле в структуре). Также представим, что страница с ошибкой у нас тоже очень большая. Хоть это и не так, но возможно в будущем нам это пригодится для отправки больших документов, не являющихся главной страницей
len_tcp = sizeof(tcp_pkt_ptr);
if (tcpprop.http_doc==INDEX_HTML)
{
memcpy((void*)tcp_pkt->data,(void*)(index_htm+(tcp_mss*(tcpprop.cnt_data_part-tcpprop.cnt_rem_data_part))-strlen(http_header)),tcp_mss);
}
else
{
memcpy((void*)tcp_pkt->data,(void*)(e404_htm+(tcp_mss*(tcpprop.cnt_data_part-tcpprop.cnt_rem_data_part))-strlen(error_header)),tcp_mss);
}
Далее подсчитываем длину для расчёта контрольной суммы и вызываем функцию подготовки пакета TCP
memcpy((void*)tcp_pkt->data,(void*)(e404_htm+(tcp_mss*(tcpprop.cnt_data_part-tcpprop.cnt_rem_data_part))-strlen(error_header)),tcp_mss);
}
len=len_tcp + tcp_mss;
tcp_header_prepare(tcp_pkt, port, TCP_ACK, len_tcp, len);
Затем готовим пакет IP, затем пакет Ethernet, последний передаём клиенту
tcp_header_prepare(tcp_pkt, port, TCP_ACK, len_tcp, len);
len+=sizeof(ip_pkt_ptr);
ip_header_prepare(ip_pkt, ip_addr, IP_TCP, len);
//Заполним заголовок Ethernet
memcpy(frame->addr_dest,tcpprop.macaddr_dst,6);
eth_send(frame,ETH_IP,len);
Уменьшим оставшееся количество пакетов для передачи клиенту
eth_send(frame,ETH_IP,len);
//будем считать, что ещё одну часть отправили, поэтому количество оставшихся частей декрементируем
tcpprop.cnt_rem_data_part--;
А по окончанию функции определимся в том, последний ли будет у нас следующий пакет или нет, в соответствии с этим примем нужное решение
tcpprop.cnt_rem_data_part--;
if(tcpprop.cnt_rem_data_part>1)
{
tcpprop.data_stat=DATA_MIDDLE;
}
else
{
tcpprop.data_stat=DATA_LAST;
}
return res;
}
Подготовим теперь страничку, которая вместе с заголовком влезет в три пакета, и изменим наш массив с главной страницей
const uint8_t index_htm[] = {
0x3c,0x68,0x74,0x6d,0x6c,0x3e,0x3c,0x62,0x6f,0x64,0x79,0x3e,0x3c,0x68,0x31,0x20,
0x73,0x74,0x79,0x6c,0x65,0x3d,0x22,0x74,0x65,0x78,0x74,0x2d,0x61,0x6c,0x69,0x67,
0x6e,0x3a,0x20,0x63,0x65,0x6e,0x74,0x65,0x72,0x3b,0x22,0x3e,0x53,0x54,0x4d,0x33,
0x32,0x46,0x31,0x30,0x33,0x78,0x38,0x3c,0x62,0x72,0x3e,0x3c,0x62,0x72,0x3e,0x57,
0x45,0x42,0x20,0x53,0x65,0x72,0x76,0x65,0x72,0x3c,0x2f,0x68,0x31,0x3e,0x0a,0x3c,
0x70,0x3e,0x3c,0x2f,0x70,0x3e,0x0a,0x3c,0x68,0x32,0x3e,0x46,0x65,0x61,0x74,0x75,
0x72,0x65,0x73,0x3c,0x2f,0x68,0x32,0x3e,0x0a,0x3c,0x70,0x3e,0x41,0x52,0x4d,0xae,
0x20,0x33,0x32,0x2d,0x62,0x69,0x74,0x20,0x43,0x6f,0x72,0x74,0x65,0x78,0xae,0x2d,
0x4d,0x33,0x20,0x43,0x50,0x55,0x20,0x43,0x6f,0x72,0x65,0x3c,0x2f,0x70,0x3e,0x0a,
0x3c,0x70,0x3e,0x3c,0x75,0x6c,0x3e,0x0a,0x09,0x3c,0x6c,0x69,0x3e,0x37,0x32,0x20,
0x4d,0x48,0x7a,0x20,0x6d,0x61,0x78,0x69,0x6d,0x75,0x6d,0x20,0x66,0x72,0x65,0x71,
0x75,0x65,0x6e,0x63,0x79,0x2c,0x20,0x31,0x2e,0x32,0x35,0x20,0x44,0x4d,0x49,0x50,
0x53,0x2f,0x4d,0x48,0x7a,0x20,0x28,0x44,0x68,0x72,0x79,0x73,0x74,0x6f,0x6e,0x65,
0x20,0x32,0x2e,0x31,0x29,0x20,0x70,0x65,0x72,0x66,0x6f,0x72,0x6d,0x61,0x6e,0x63,
0x65,0x20,0x61,0x74,0x20,0x30,0x20,0x77,0x61,0x69,0x74,0x20,0x73,0x74,0x61,0x74,
0x65,0x20,0x6d,0x65,0x6d,0x6f,0x72,0x79,0x20,0x61,0x63,0x63,0x65,0x73,0x73,0x3c,
0x2f,0x6c,0x69,0x3e,0x0a,0x09,0x3c,0x6c,0x69,0x3e,0x53,0x69,0x6e,0x67,0x6c,0x65,
0x2d,0x63,0x79,0x63,0x6c,0x65,0x20,0x6d,0x75,0x6c,0x74,0x69,0x70,0x6c,0x69,0x63,
0x61,0x74,0x69,0x6f,0x6e,0x20,0x61,0x6e,0x64,0x20,0x68,0x61,0x72,0x64,0x77,0x61,
0x72,0x65,0x20,0x64,0x69,0x76,0x69,0x73,0x69,0x6f,0x6e,0x3c,0x2f,0x6c,0x69,0x3e,
0x0a,0x3c,0x2f,0x75,0x6c,0x3e,0x3c,0x2f,0x70,0x3e,0x0a,0x3c,0x70,0x3e,0x4d,0x65,
0x6d,0x6f,0x72,0x69,0x65,0x73,0x3c,0x2f,0x70,0x3e,0x0a,0x3c,0x70,0x3e,0x3c,0x75,
0x6c,0x3e,0x0a,0x09,0x3c,0x6c,0x69,0x3e,0x36,0x34,0x20,0x6f,0x72,0x20,0x31,0x32,
0x38,0x20,0x4b,0x62,0x79,0x74,0x65,0x73,0x20,0x6f,0x66,0x20,0x46,0x6c,0x61,0x73,
0x68,0x20,0x6d,0x65,0x6d,0x6f,0x72,0x79,0x3c,0x2f,0x6c,0x69,0x3e,0x0a,0x09,0x3c,
0x6c,0x69,0x3e,0x32,0x30,0x20,0x4b,0x62,0x79,0x74,0x65,0x73,0x20,0x6f,0x66,0x20,
0x53,0x52,0x41,0x4d,0x3c,0x2f,0x6c,0x69,0x3e,0x0a,0x3c,0x2f,0x75,0x6c,0x3e,0x3c,
0x2f,0x70,0x3e,0x0a,0x3c,0x70,0x3e,0x43,0x6c,0x6f,0x63,0x6b,0x2c,0x20,0x72,0x65,
0x73,0x65,0x74,0x20,0x61,0x6e,0x64,0x20,0x73,0x75,0x70,0x70,0x6c,0x79,0x20,0x6d,
0x61,0x6e,0x61,0x67,0x65,0x6d,0x65,0x6e,0x74,0x3c,0x2f,0x70,0x3e,0x0a,0x3c,0x70,
0x3e,0x3c,0x75,0x6c,0x3e,0x0a,0x09,0x3c,0x6c,0x69,0x3e,0x32,0x2e,0x30,0x20,0x74,
0x6f,0x20,0x33,0x2e,0x36,0x20,0x56,0x20,0x61,0x70,0x70,0x6c,0x69,0x63,0x61,0x74,
0x69,0x6f,0x6e,0x20,0x73,0x75,0x70,0x70,0x6c,0x79,0x20,0x61,0x6e,0x64,0x20,0x49,
0x2f,0x4f,0x73,0x3c,0x2f,0x6c,0x69,0x3e,0x0a,0x09,0x3c,0x6c,0x69,0x3e,0x50,0x4f,
0x52,0x2c,0x20,0x50,0x44,0x52,0x2c,0x20,0x61,0x6e,0x64,0x20,0x70,0x72,0x6f,0x67,
0x72,0x61,0x6d,0x6d,0x61,0x62,0x6c,0x65,0x20,0x76,0x6f,0x6c,0x74,0x61,0x67,0x65,
0x20,0x64,0x65,0x74,0x65,0x63,0x74,0x6f,0x72,0x20,0x28,0x50,0x56,0x44,0x29,0x3c,
0x2f,0x6c,0x69,0x3e,0x0a,0x09,0x3c,0x6c,0x69,0x3e,0x34,0x2d,0x74,0x6f,0x2d,0x31,
0x36,0x20,0x4d,0x48,0x7a,0x20,0x63,0x72,0x79,0x73,0x74,0x61,0x6c,0x20,0x6f,0x73,
0x63,0x69,0x6c,0x6c,0x61,0x74,0x6f,0x72,0x3c,0x2f,0x6c,0x69,0x3e,0x0a,0x09,0x3c,
0x6c,0x69,0x3e,0x49,0x6e,0x74,0x65,0x72,0x6e,0x61,0x6c,0x20,0x38,0x20,0x4d,0x48,
0x7a,0x20,0x66,0x61,0x63,0x74,0x6f,0x72,0x79,0x2d,0x74,0x72,0x69,0x6d,0x6d,0x65,
0x64,0x20,0x52,0x43,0x3c,0x2f,0x6c,0x69,0x3e,0x0a,0x09,0x3c,0x6c,0x69,0x3e,0x49,
0x6e,0x74,0x65,0x72,0x6e,0x61,0x6c,0x20,0x34,0x30,0x20,0x6b,0x48,0x7a,0x20,0x52,
0x43,0x3c,0x2f,0x6c,0x69,0x3e,0x0a,0x09,0x3c,0x6c,0x69,0x3e,0x50,0x4c,0x4c,0x20,
0x66,0x6f,0x72,0x20,0x43,0x50,0x55,0x20,0x63,0x6c,0x6f,0x63,0x6b,0x3c,0x2f,0x6c,
0x69,0x3e,0x0a,0x09,0x3c,0x6c,0x69,0x3e,0x33,0x32,0x20,0x6b,0x48,0x7a,0x20,0x6f,
0x73,0x63,0x69,0x6c,0x6c,0x61,0x74,0x6f,0x72,0x20,0x66,0x6f,0x72,0x20,0x52,0x54,
0x43,0x20,0x77,0x69,0x74,0x68,0x20,0x63,0x61,0x6c,0x69,0x62,0x72,0x61,0x74,0x69,
0x6f,0x6e,0x3c,0x2f,0x6c,0x69,0x3e,0x0a,0x3c,0x2f,0x75,0x6c,0x3e,0x3c,0x2f,0x70,
0x3e,0x0a,0x3c,0x70,0x3e,0x4c,0x6f,0x77,0x2d,0x70,0x6f,0x77,0x65,0x72,0x3c,0x2f,
0x70,0x3e,0x0a,0x3c,0x70,0x3e,0x3c,0x75,0x6c,0x3e,0x0a,0x09,0x3c,0x6c,0x69,0x3e,
0x53,0x6c,0x65,0x65,0x70,0x2c,0x20,0x53,0x74,0x6f,0x70,0x20,0x61,0x6e,0x64,0x20,
0x53,0x74,0x61,0x6e,0x64,0x62,0x79,0x20,0x6d,0x6f,0x64,0x65,0x73,0x3c,0x2f,0x6c,
0x69,0x3e,0x0a,0x09,0x3c,0x6c,0x69,0x3e,0x56,0x42,0x41,0x54,0x20,0x73,0x75,0x70,
0x70,0x6c,0x79,0x20,0x66,0x6f,0x72,0x20,0x52,0x54,0x43,0x20,0x61,0x6e,0x64,0x20,
0x62,0x61,0x63,0x6b,0x75,0x70,0x20,0x72,0x65,0x67,0x69,0x73,0x74,0x65,0x72,0x73,
0x3c,0x2f,0x6c,0x69,0x3e,0x0a,0x3c,0x2f,0x75,0x6c,0x3e,0x3c,0x2f,0x70,0x3e,0x0a,
0x3c,0x70,0x3e,0x32,0x20,0x78,0x20,0x31,0x32,0x2d,0x62,0x69,0x74,0x2c,0x20,0x31,
0x20,0x3f,0x73,0x20,0x41,0x2f,0x44,0x20,0x63,0x6f,0x6e,0x76,0x65,0x72,0x74,0x65,
0x72,0x73,0x20,0x28,0x75,0x70,0x20,0x74,0x6f,0x20,0x31,0x36,0x20,0x63,0x68,0x61,
0x6e,0x6e,0x65,0x6c,0x73,0x29,0x3c,0x2f,0x70,0x3e,0x0a,0x3c,0x70,0x3e,0x3c,0x75,
0x6c,0x3e,0x0a,0x09,0x3c,0x6c,0x69,0x3e,0x43,0x6f,0x6e,0x76,0x65,0x72,0x73,0x69,
0x6f,0x6e,0x20,0x72,0x61,0x6e,0x67,0x65,0x3a,0x20,0x30,0x20,0x74,0x6f,0x20,0x33,
0x2e,0x36,0x20,0x56,0x3c,0x2f,0x6c,0x69,0x3e,0x0a,0x09,0x3c,0x6c,0x69,0x3e,0x44,
0x75,0x61,0x6c,0x2d,0x73,0x61,0x6d,0x70,0x6c,0x65,0x20,0x61,0x6e,0x64,0x20,0x68,
0x6f,0x6c,0x64,0x20,0x63,0x61,0x70,0x61,0x62,0x69,0x6c,0x69,0x74,0x79,0x3c,0x2f,
0x6c,0x69,0x3e,0x0a,0x3c,0x2f,0x75,0x6c,0x3e,0x3c,0x2f,0x70,0x3e,0x0a,0x3c,0x2f,
0x62,0x6f,0x64,0x79,0x3e,0x3c,0x2f,0x68,0x74,0x6d,0x6c,0x3e};
Соберём код, прошьём контроллер и проверим, что наша страница отображается в браузере на запрос клиента. Показывать я это здесь уже не буду, думаю, вы поверите мне на слово.
Теперь проделаем те же действия со страницами в 4, 5 и 6 частей (пакетов).
Приведу составы их массивов
const uint8_t index_htm[] = {
0x3c,0x68,0x74,0x6d,0x6c,0x3e,0x3c,0x62,0x6f,0x64,0x79,0x3e,0x3c,0x68,0x31,0x20,
0x73,0x74,0x79,0x6c,0x65,0x3d,0x22,0x74,0x65,0x78,0x74,0x2d,0x61,0x6c,0x69,0x67,
0x6e,0x3a,0x20,0x63,0x65,0x6e,0x74,0x65,0x72,0x3b,0x22,0x3e,0x53,0x54,0x4d,0x33,
0x32,0x46,0x31,0x30,0x33,0x78,0x38,0x3c,0x62,0x72,0x3e,0x3c,0x62,0x72,0x3e,0x57,
0x45,0x42,0x20,0x53,0x65,0x72,0x76,0x65,0x72,0x3c,0x2f,0x68,0x31,0x3e,0x0a,0x3c,
0x70,0x3e,0x3c,0x2f,0x70,0x3e,0x0a,0x3c,0x68,0x32,0x3e,0x46,0x65,0x61,0x74,0x75,
0x72,0x65,0x73,0x3c,0x2f,0x68,0x32,0x3e,0x0a,0x3c,0x70,0x3e,0x41,0x52,0x4d,0xae,
0x20,0x33,0x32,0x2d,0x62,0x69,0x74,0x20,0x43,0x6f,0x72,0x74,0x65,0x78,0xae,0x2d,
0x4d,0x33,0x20,0x43,0x50,0x55,0x20,0x43,0x6f,0x72,0x65,0x3c,0x2f,0x70,0x3e,0x0a,
0x3c,0x70,0x3e,0x3c,0x75,0x6c,0x3e,0x0a,0x09,0x3c,0x6c,0x69,0x3e,0x37,0x32,0x20,
0x4d,0x48,0x7a,0x20,0x6d,0x61,0x78,0x69,0x6d,0x75,0x6d,0x20,0x66,0x72,0x65,0x71,
0x75,0x65,0x6e,0x63,0x79,0x2c,0x20,0x31,0x2e,0x32,0x35,0x20,0x44,0x4d,0x49,0x50,
0x53,0x2f,0x4d,0x48,0x7a,0x20,0x28,0x44,0x68,0x72,0x79,0x73,0x74,0x6f,0x6e,0x65,
0x20,0x32,0x2e,0x31,0x29,0x20,0x70,0x65,0x72,0x66,0x6f,0x72,0x6d,0x61,0x6e,0x63,
0x65,0x20,0x61,0x74,0x20,0x30,0x20,0x77,0x61,0x69,0x74,0x20,0x73,0x74,0x61,0x74,
0x65,0x20,0x6d,0x65,0x6d,0x6f,0x72,0x79,0x20,0x61,0x63,0x63,0x65,0x73,0x73,0x3c,
0x2f,0x6c,0x69,0x3e,0x0a,0x09,0x3c,0x6c,0x69,0x3e,0x53,0x69,0x6e,0x67,0x6c,0x65,
0x2d,0x63,0x79,0x63,0x6c,0x65,0x20,0x6d,0x75,0x6c,0x74,0x69,0x70,0x6c,0x69,0x63,
0x61,0x74,0x69,0x6f,0x6e,0x20,0x61,0x6e,0x64,0x20,0x68,0x61,0x72,0x64,0x77,0x61,
0x72,0x65,0x20,0x64,0x69,0x76,0x69,0x73,0x69,0x6f,0x6e,0x3c,0x2f,0x6c,0x69,0x3e,
0x0a,0x3c,0x2f,0x75,0x6c,0x3e,0x3c,0x2f,0x70,0x3e,0x0a,0x3c,0x70,0x3e,0x4d,0x65,
0x6d,0x6f,0x72,0x69,0x65,0x73,0x3c,0x2f,0x70,0x3e,0x0a,0x3c,0x70,0x3e,0x3c,0x75,
0x6c,0x3e,0x0a,0x09,0x3c,0x6c,0x69,0x3e,0x36,0x34,0x20,0x6f,0x72,0x20,0x31,0x32,
0x38,0x20,0x4b,0x62,0x79,0x74,0x65,0x73,0x20,0x6f,0x66,0x20,0x46,0x6c,0x61,0x73,
0x68,0x20,0x6d,0x65,0x6d,0x6f,0x72,0x79,0x3c,0x2f,0x6c,0x69,0x3e,0x0a,0x09,0x3c,
0x6c,0x69,0x3e,0x32,0x30,0x20,0x4b,0x62,0x79,0x74,0x65,0x73,0x20,0x6f,0x66,0x20,
0x53,0x52,0x41,0x4d,0x3c,0x2f,0x6c,0x69,0x3e,0x0a,0x3c,0x2f,0x75,0x6c,0x3e,0x3c,
0x2f,0x70,0x3e,0x0a,0x3c,0x70,0x3e,0x43,0x6c,0x6f,0x63,0x6b,0x2c,0x20,0x72,0x65,
0x73,0x65,0x74,0x20,0x61,0x6e,0x64,0x20,0x73,0x75,0x70,0x70,0x6c,0x79,0x20,0x6d,
0x61,0x6e,0x61,0x67,0x65,0x6d,0x65,0x6e,0x74,0x3c,0x2f,0x70,0x3e,0x0a,0x3c,0x70,
0x3e,0x3c,0x75,0x6c,0x3e,0x0a,0x09,0x3c,0x6c,0x69,0x3e,0x32,0x2e,0x30,0x20,0x74,
0x6f,0x20,0x33,0x2e,0x36,0x20,0x56,0x20,0x61,0x70,0x70,0x6c,0x69,0x63,0x61,0x74,
0x69,0x6f,0x6e,0x20,0x73,0x75,0x70,0x70,0x6c,0x79,0x20,0x61,0x6e,0x64,0x20,0x49,
0x2f,0x4f,0x73,0x3c,0x2f,0x6c,0x69,0x3e,0x0a,0x09,0x3c,0x6c,0x69,0x3e,0x50,0x4f,
0x52,0x2c,0x20,0x50,0x44,0x52,0x2c,0x20,0x61,0x6e,0x64,0x20,0x70,0x72,0x6f,0x67,
0x72,0x61,0x6d,0x6d,0x61,0x62,0x6c,0x65,0x20,0x76,0x6f,0x6c,0x74,0x61,0x67,0x65,
0x20,0x64,0x65,0x74,0x65,0x63,0x74,0x6f,0x72,0x20,0x28,0x50,0x56,0x44,0x29,0x3c,
0x2f,0x6c,0x69,0x3e,0x0a,0x09,0x3c,0x6c,0x69,0x3e,0x34,0x2d,0x74,0x6f,0x2d,0x31,
0x36,0x20,0x4d,0x48,0x7a,0x20,0x63,0x72,0x79,0x73,0x74,0x61,0x6c,0x20,0x6f,0x73,
0x63,0x69,0x6c,0x6c,0x61,0x74,0x6f,0x72,0x3c,0x2f,0x6c,0x69,0x3e,0x0a,0x09,0x3c,
0x6c,0x69,0x3e,0x49,0x6e,0x74,0x65,0x72,0x6e,0x61,0x6c,0x20,0x38,0x20,0x4d,0x48,
0x7a,0x20,0x66,0x61,0x63,0x74,0x6f,0x72,0x79,0x2d,0x74,0x72,0x69,0x6d,0x6d,0x65,
0x64,0x20,0x52,0x43,0x3c,0x2f,0x6c,0x69,0x3e,0x0a,0x09,0x3c,0x6c,0x69,0x3e,0x49,
0x6e,0x74,0x65,0x72,0x6e,0x61,0x6c,0x20,0x34,0x30,0x20,0x6b,0x48,0x7a,0x20,0x52,
0x43,0x3c,0x2f,0x6c,0x69,0x3e,0x0a,0x09,0x3c,0x6c,0x69,0x3e,0x50,0x4c,0x4c,0x20,
0x66,0x6f,0x72,0x20,0x43,0x50,0x55,0x20,0x63,0x6c,0x6f,0x63,0x6b,0x3c,0x2f,0x6c,
0x69,0x3e,0x0a,0x09,0x3c,0x6c,0x69,0x3e,0x33,0x32,0x20,0x6b,0x48,0x7a,0x20,0x6f,
0x73,0x63,0x69,0x6c,0x6c,0x61,0x74,0x6f,0x72,0x20,0x66,0x6f,0x72,0x20,0x52,0x54,
0x43,0x20,0x77,0x69,0x74,0x68,0x20,0x63,0x61,0x6c,0x69,0x62,0x72,0x61,0x74,0x69,
0x6f,0x6e,0x3c,0x2f,0x6c,0x69,0x3e,0x0a,0x3c,0x2f,0x75,0x6c,0x3e,0x3c,0x2f,0x70,
0x3e,0x0a,0x3c,0x70,0x3e,0x4c,0x6f,0x77,0x2d,0x70,0x6f,0x77,0x65,0x72,0x3c,0x2f,
0x70,0x3e,0x0a,0x3c,0x70,0x3e,0x3c,0x75,0x6c,0x3e,0x0a,0x09,0x3c,0x6c,0x69,0x3e,
0x53,0x6c,0x65,0x65,0x70,0x2c,0x20,0x53,0x74,0x6f,0x70,0x20,0x61,0x6e,0x64,0x20,
0x53,0x74,0x61,0x6e,0x64,0x62,0x79,0x20,0x6d,0x6f,0x64,0x65,0x73,0x3c,0x2f,0x6c,
0x69,0x3e,0x0a,0x09,0x3c,0x6c,0x69,0x3e,0x56,0x42,0x41,0x54,0x20,0x73,0x75,0x70,
0x70,0x6c,0x79,0x20,0x66,0x6f,0x72,0x20,0x52,0x54,0x43,0x20,0x61,0x6e,0x64,0x20,
0x62,0x61,0x63,0x6b,0x75,0x70,0x20,0x72,0x65,0x67,0x69,0x73,0x74,0x65,0x72,0x73,
0x3c,0x2f,0x6c,0x69,0x3e,0x0a,0x3c,0x2f,0x75,0x6c,0x3e,0x3c,0x2f,0x70,0x3e,0x0a,
0x3c,0x70,0x3e,0x32,0x20,0x78,0x20,0x31,0x32,0x2d,0x62,0x69,0x74,0x2c,0x20,0x31,
0x20,0x3f,0x73,0x20,0x41,0x2f,0x44,0x20,0x63,0x6f,0x6e,0x76,0x65,0x72,0x74,0x65,
0x72,0x73,0x20,0x28,0x75,0x70,0x20,0x74,0x6f,0x20,0x31,0x36,0x20,0x63,0x68,0x61,
0x6e,0x6e,0x65,0x6c,0x73,0x29,0x3c,0x2f,0x70,0x3e,0x0a,0x3c,0x70,0x3e,0x3c,0x75,
0x6c,0x3e,0x0a,0x09,0x3c,0x6c,0x69,0x3e,0x43,0x6f,0x6e,0x76,0x65,0x72,0x73,0x69,
0x6f,0x6e,0x20,0x72,0x61,0x6e,0x67,0x65,0x3a,0x20,0x30,0x20,0x74,0x6f,0x20,0x33,
0x2e,0x36,0x20,0x56,0x3c,0x2f,0x6c,0x69,0x3e,0x0a,0x09,0x3c,0x6c,0x69,0x3e,0x44,
0x75,0x61,0x6c,0x2d,0x73,0x61,0x6d,0x70,0x6c,0x65,0x20,0x61,0x6e,0x64,0x20,0x68,
0x6f,0x6c,0x64,0x20,0x63,0x61,0x70,0x61,0x62,0x69,0x6c,0x69,0x74,0x79,0x3c,0x2f,
0x6c,0x69,0x3e,0x0a,0x09,0x3c,0x6c,0x69,0x3e,0x54,0x65,0x6d,0x70,0x65,0x72,0x61,
0x74,0x75,0x72,0x65,0x20,0x73,0x65,0x6e,0x73,0x6f,0x72,0x3c,0x2f,0x6c,0x69,0x3e,
0x0a,0x3c,0x2f,0x75,0x6c,0x3e,0x3c,0x2f,0x70,0x3e,0x0a,0x3c,0x70,0x3e,0x44,0x4d,
0x41,0x3c,0x2f,0x70,0x3e,0x0a,0x3c,0x70,0x3e,0x3c,0x75,0x6c,0x3e,0x0a,0x09,0x3c,
0x6c,0x69,0x3e,0x37,0x2d,0x63,0x68,0x61,0x6e,0x6e,0x65,0x6c,0x20,0x44,0x4d,0x41,
0x20,0x63,0x6f,0x6e,0x74,0x72,0x6f,0x6c,0x6c,0x65,0x72,0x3c,0x2f,0x6c,0x69,0x3e,
0x0a,0x09,0x3c,0x6c,0x69,0x3e,0x50,0x65,0x72,0x69,0x70,0x68,0x65,0x72,0x61,0x6c,
0x73,0x20,0x73,0x75,0x70,0x70,0x6f,0x72,0x74,0x65,0x64,0x3a,0x20,0x74,0x69,0x6d,
0x65,0x72,0x73,0x2c,0x20,0x41,0x44,0x43,0x2c,0x20,0x53,0x50,0x49,0x73,0x2c,0x20,
0x49,0x32,0x43,0x73,0x20,0x61,0x6e,0x64,0x20,0x55,0x53,0x41,0x52,0x54,0x73,0x3c,
0x2f,0x6c,0x69,0x3e,0x0a,0x3c,0x2f,0x75,0x6c,0x3e,0x3c,0x2f,0x70,0x3e,0x0a,0x3c,
0x70,0x3e,0x55,0x70,0x20,0x74,0x6f,0x20,0x38,0x30,0x20,0x66,0x61,0x73,0x74,0x20,
0x49,0x2f,0x4f,0x20,0x70,0x6f,0x72,0x74,0x73,0x3c,0x2f,0x70,0x3e,0x0a,0x3c,0x70,
0x3e,0x3c,0x75,0x6c,0x3e,0x0a,0x09,0x3c,0x6c,0x69,0x3e,0x32,0x36,0x2f,0x33,0x37,
0x2f,0x35,0x31,0x2f,0x38,0x30,0x20,0x49,0x2f,0x4f,0x73,0x2c,0x20,0x61,0x6c,0x6c,
0x20,0x6d,0x61,0x70,0x70,0x61,0x62,0x6c,0x65,0x20,0x6f,0x6e,0x20,0x31,0x36,0x20,
0x65,0x78,0x74,0x65,0x72,0x6e,0x61,0x6c,0x20,0x69,0x6e,0x74,0x65,0x72,0x72,0x75,
0x70,0x74,0x20,0x76,0x65,0x63,0x74,0x6f,0x72,0x73,0x20,0x61,0x6e,0x64,0x20,0x61,
0x6c,0x6d,0x6f,0x73,0x74,0x20,0x61,0x6c,0x6c,0x3c,0x2f,0x6c,0x69,0x3e,0x0a,0x09,
0x3c,0x6c,0x69,0x3e,0x35,0x20,0x56,0x2d,0x74,0x6f,0x6c,0x65,0x72,0x61,0x6e,0x74,
0x3c,0x2f,0x6c,0x69,0x3e,0x0a,0x3c,0x2f,0x75,0x6c,0x3e,0x3c,0x2f,0x70,0x3e,0x0a,
0x3c,0x70,0x3e,0x37,0x20,0x74,0x69,0x6d,0x65,0x72,0x73,0x3c,0x2f,0x70,0x3e,0x0a,
0x3c,0x70,0x3e,0x3c,0x75,0x6c,0x3e,0x0a,0x09,0x3c,0x6c,0x69,0x3e,0x2d,0x62,0x69,
0x74,0x20,0x74,0x69,0x6d,0x65,0x72,0x73,0x2c,0x20,0x65,0x61,0x63,0x68,0x20,0x77,
0x69,0x74,0x68,0x20,0x75,0x70,0x20,0x74,0x6f,0x20,0x34,0x20,0x49,0x43,0x2f,0x4f,
0x43,0x2f,0x50,0x57,0x4d,0x20,0x6f,0x72,0x20,0x70,0x75,0x6c,0x73,0x65,0x20,0x63,
0x6f,0x75,0x6e,0x74,0x65,0x72,0x20,0x61,0x6e,0x64,0x20,0x71,0x75,0x61,0x64,0x72,
0x61,0x74,0x75,0x72,0x65,0x20,0x28,0x69,0x6e,0x63,0x72,0x65,0x6d,0x65,0x6e,0x74,
0x61,0x6c,0x29,0x20,0x65,0x6e,0x63,0x6f,0x64,0x65,0x72,0x20,0x69,0x6e,0x70,0x75,
0x74,0x3c,0x2f,0x6c,0x69,0x3e,0x0a,0x09,0x3c,0x6c,0x69,0x3e,0x31,0x36,0x2d,0x62,
0x69,0x74,0x2c,0x20,0x6d,0x6f,0x74,0x6f,0x72,0x20,0x63,0x6f,0x6e,0x74,0x72,0x6f,
0x6c,0x20,0x50,0x57,0x4d,0x20,0x74,0x69,0x6d,0x65,0x72,0x20,0x77,0x69,0x74,0x68,
0x20,0x64,0x65,0x61,0x64,0x74,0x69,0x6d,0x65,0x20,0x67,0x65,0x6e,0x65,0x72,0x61,
0x74,0x69,0x6f,0x6e,0x20,0x61,0x6e,0x64,0x20,0x65,0x6d,0x65,0x72,0x67,0x65,0x6e,
0x63,0x79,0x20,0x73,0x74,0x6f,0x70,0x3c,0x2f,0x6c,0x69,0x3e,0x0a,0x09,0x3c,0x6c,
0x69,0x3e,0x32,0x20,0x77,0x61,0x74,0x63,0x68,0x64,0x6f,0x67,0x20,0x74,0x69,0x6d,
0x65,0x72,0x73,0x20,0x28,0x49,0x6e,0x64,0x65,0x70,0x65,0x6e,0x64,0x65,0x6e,0x74,
0x20,0x61,0x6e,0x64,0x20,0x57,0x69,0x6e,0x64,0x6f,0x77,0x29,0x3c,0x2f,0x6c,0x69,
0x3e,0x0a,0x09,0x3c,0x6c,0x69,0x3e,0x53,0x79,0x73,0x54,0x69,0x63,0x6b,0x20,0x74,
0x69,0x6d,0x65,0x72,0x20,0x32,0x34,0x2d,0x62,0x69,0x74,0x20,0x64,0x6f,0x77,0x6e,
0x63,0x6f,0x75,0x6e,0x74,0x65,0x72,0x3c,0x2f,0x6c,0x69,0x3e,0x0a,0x3c,0x2f,0x75,
0x6c,0x3e,0x3c,0x2f,0x70,0x3e,0x0a,0x3c,0x2f,0x62,0x6f,0x64,0x79,0x3e,0x3c,0x2f,
0x68,0x74,0x6d,0x6c,0x3e};
const uint8_t index_htm[] = {
0x3c,0x68,0x74,0x6d,0x6c,0x3e,0x3c,0x62,0x6f,0x64,0x79,0x3e,0x3c,0x68,0x31,0x20,
0x73,0x74,0x79,0x6c,0x65,0x3d,0x22,0x74,0x65,0x78,0x74,0x2d,0x61,0x6c,0x69,0x67,
0x6e,0x3a,0x20,0x63,0x65,0x6e,0x74,0x65,0x72,0x3b,0x22,0x3e,0x53,0x54,0x4d,0x33,
0x32,0x46,0x31,0x30,0x33,0x78,0x38,0x3c,0x62,0x72,0x3e,0x3c,0x62,0x72,0x3e,0x57,
0x45,0x42,0x20,0x53,0x65,0x72,0x76,0x65,0x72,0x3c,0x2f,0x68,0x31,0x3e,0x0a,0x3c,
0x70,0x3e,0x3c,0x2f,0x70,0x3e,0x0a,0x3c,0x68,0x32,0x3e,0x46,0x65,0x61,0x74,0x75,
0x72,0x65,0x73,0x3c,0x2f,0x68,0x32,0x3e,0x0a,0x3c,0x70,0x3e,0x41,0x52,0x4d,0xae,
0x20,0x33,0x32,0x2d,0x62,0x69,0x74,0x20,0x43,0x6f,0x72,0x74,0x65,0x78,0xae,0x2d,
0x4d,0x33,0x20,0x43,0x50,0x55,0x20,0x43,0x6f,0x72,0x65,0x3c,0x2f,0x70,0x3e,0x0a,
0x3c,0x70,0x3e,0x3c,0x75,0x6c,0x3e,0x0a,0x09,0x3c,0x6c,0x69,0x3e,0x37,0x32,0x20,
0x4d,0x48,0x7a,0x20,0x6d,0x61,0x78,0x69,0x6d,0x75,0x6d,0x20,0x66,0x72,0x65,0x71,
0x75,0x65,0x6e,0x63,0x79,0x2c,0x20,0x31,0x2e,0x32,0x35,0x20,0x44,0x4d,0x49,0x50,
0x53,0x2f,0x4d,0x48,0x7a,0x20,0x28,0x44,0x68,0x72,0x79,0x73,0x74,0x6f,0x6e,0x65,
0x20,0x32,0x2e,0x31,0x29,0x20,0x70,0x65,0x72,0x66,0x6f,0x72,0x6d,0x61,0x6e,0x63,
0x65,0x20,0x61,0x74,0x20,0x30,0x20,0x77,0x61,0x69,0x74,0x20,0x73,0x74,0x61,0x74,
0x65,0x20,0x6d,0x65,0x6d,0x6f,0x72,0x79,0x20,0x61,0x63,0x63,0x65,0x73,0x73,0x3c,
0x2f,0x6c,0x69,0x3e,0x0a,0x09,0x3c,0x6c,0x69,0x3e,0x53,0x69,0x6e,0x67,0x6c,0x65,
0x2d,0x63,0x79,0x63,0x6c,0x65,0x20,0x6d,0x75,0x6c,0x74,0x69,0x70,0x6c,0x69,0x63,
0x61,0x74,0x69,0x6f,0x6e,0x20,0x61,0x6e,0x64,0x20,0x68,0x61,0x72,0x64,0x77,0x61,
0x72,0x65,0x20,0x64,0x69,0x76,0x69,0x73,0x69,0x6f,0x6e,0x3c,0x2f,0x6c,0x69,0x3e,
0x0a,0x3c,0x2f,0x75,0x6c,0x3e,0x3c,0x2f,0x70,0x3e,0x0a,0x3c,0x70,0x3e,0x4d,0x65,
0x6d,0x6f,0x72,0x69,0x65,0x73,0x3c,0x2f,0x70,0x3e,0x0a,0x3c,0x70,0x3e,0x3c,0x75,
0x6c,0x3e,0x0a,0x09,0x3c,0x6c,0x69,0x3e,0x36,0x34,0x20,0x6f,0x72,0x20,0x31,0x32,
0x38,0x20,0x4b,0x62,0x79,0x74,0x65,0x73,0x20,0x6f,0x66,0x20,0x46,0x6c,0x61,0x73,
0x68,0x20,0x6d,0x65,0x6d,0x6f,0x72,0x79,0x3c,0x2f,0x6c,0x69,0x3e,0x0a,0x09,0x3c,
0x6c,0x69,0x3e,0x32,0x30,0x20,0x4b,0x62,0x79,0x74,0x65,0x73,0x20,0x6f,0x66,0x20,
0x53,0x52,0x41,0x4d,0x3c,0x2f,0x6c,0x69,0x3e,0x0a,0x3c,0x2f,0x75,0x6c,0x3e,0x3c,
0x2f,0x70,0x3e,0x0a,0x3c,0x70,0x3e,0x43,0x6c,0x6f,0x63,0x6b,0x2c,0x20,0x72,0x65,
0x73,0x65,0x74,0x20,0x61,0x6e,0x64,0x20,0x73,0x75,0x70,0x70,0x6c,0x79,0x20,0x6d,
0x61,0x6e,0x61,0x67,0x65,0x6d,0x65,0x6e,0x74,0x3c,0x2f,0x70,0x3e,0x0a,0x3c,0x70,
0x3e,0x3c,0x75,0x6c,0x3e,0x0a,0x09,0x3c,0x6c,0x69,0x3e,0x32,0x2e,0x30,0x20,0x74,
0x6f,0x20,0x33,0x2e,0x36,0x20,0x56,0x20,0x61,0x70,0x70,0x6c,0x69,0x63,0x61,0x74,
0x69,0x6f,0x6e,0x20,0x73,0x75,0x70,0x70,0x6c,0x79,0x20,0x61,0x6e,0x64,0x20,0x49,
0x2f,0x4f,0x73,0x3c,0x2f,0x6c,0x69,0x3e,0x0a,0x09,0x3c,0x6c,0x69,0x3e,0x50,0x4f,
0x52,0x2c,0x20,0x50,0x44,0x52,0x2c,0x20,0x61,0x6e,0x64,0x20,0x70,0x72,0x6f,0x67,
0x72,0x61,0x6d,0x6d,0x61,0x62,0x6c,0x65,0x20,0x76,0x6f,0x6c,0x74,0x61,0x67,0x65,
0x20,0x64,0x65,0x74,0x65,0x63,0x74,0x6f,0x72,0x20,0x28,0x50,0x56,0x44,0x29,0x3c,
0x2f,0x6c,0x69,0x3e,0x0a,0x09,0x3c,0x6c,0x69,0x3e,0x34,0x2d,0x74,0x6f,0x2d,0x31,
0x36,0x20,0x4d,0x48,0x7a,0x20,0x63,0x72,0x79,0x73,0x74,0x61,0x6c,0x20,0x6f,0x73,
0x63,0x69,0x6c,0x6c,0x61,0x74,0x6f,0x72,0x3c,0x2f,0x6c,0x69,0x3e,0x0a,0x09,0x3c,
0x6c,0x69,0x3e,0x49,0x6e,0x74,0x65,0x72,0x6e,0x61,0x6c,0x20,0x38,0x20,0x4d,0x48,
0x7a,0x20,0x66,0x61,0x63,0x74,0x6f,0x72,0x79,0x2d,0x74,0x72,0x69,0x6d,0x6d,0x65,
0x64,0x20,0x52,0x43,0x3c,0x2f,0x6c,0x69,0x3e,0x0a,0x09,0x3c,0x6c,0x69,0x3e,0x49,
0x6e,0x74,0x65,0x72,0x6e,0x61,0x6c,0x20,0x34,0x30,0x20,0x6b,0x48,0x7a,0x20,0x52,
0x43,0x3c,0x2f,0x6c,0x69,0x3e,0x0a,0x09,0x3c,0x6c,0x69,0x3e,0x50,0x4c,0x4c,0x20,
0x66,0x6f,0x72,0x20,0x43,0x50,0x55,0x20,0x63,0x6c,0x6f,0x63,0x6b,0x3c,0x2f,0x6c,
0x69,0x3e,0x0a,0x09,0x3c,0x6c,0x69,0x3e,0x33,0x32,0x20,0x6b,0x48,0x7a,0x20,0x6f,
0x73,0x63,0x69,0x6c,0x6c,0x61,0x74,0x6f,0x72,0x20,0x66,0x6f,0x72,0x20,0x52,0x54,
0x43,0x20,0x77,0x69,0x74,0x68,0x20,0x63,0x61,0x6c,0x69,0x62,0x72,0x61,0x74,0x69,
0x6f,0x6e,0x3c,0x2f,0x6c,0x69,0x3e,0x0a,0x3c,0x2f,0x75,0x6c,0x3e,0x3c,0x2f,0x70,
0x3e,0x0a,0x3c,0x70,0x3e,0x4c,0x6f,0x77,0x2d,0x70,0x6f,0x77,0x65,0x72,0x3c,0x2f,
0x70,0x3e,0x0a,0x3c,0x70,0x3e,0x3c,0x75,0x6c,0x3e,0x0a,0x09,0x3c,0x6c,0x69,0x3e,
0x53,0x6c,0x65,0x65,0x70,0x2c,0x20,0x53,0x74,0x6f,0x70,0x20,0x61,0x6e,0x64,0x20,
0x53,0x74,0x61,0x6e,0x64,0x62,0x79,0x20,0x6d,0x6f,0x64,0x65,0x73,0x3c,0x2f,0x6c,
0x69,0x3e,0x0a,0x09,0x3c,0x6c,0x69,0x3e,0x56,0x42,0x41,0x54,0x20,0x73,0x75,0x70,
0x70,0x6c,0x79,0x20,0x66,0x6f,0x72,0x20,0x52,0x54,0x43,0x20,0x61,0x6e,0x64,0x20,
0x62,0x61,0x63,0x6b,0x75,0x70,0x20,0x72,0x65,0x67,0x69,0x73,0x74,0x65,0x72,0x73,
0x3c,0x2f,0x6c,0x69,0x3e,0x0a,0x3c,0x2f,0x75,0x6c,0x3e,0x3c,0x2f,0x70,0x3e,0x0a,
0x3c,0x70,0x3e,0x32,0x20,0x78,0x20,0x31,0x32,0x2d,0x62,0x69,0x74,0x2c,0x20,0x31,
0x20,0x3f,0x73,0x20,0x41,0x2f,0x44,0x20,0x63,0x6f,0x6e,0x76,0x65,0x72,0x74,0x65,
0x72,0x73,0x20,0x28,0x75,0x70,0x20,0x74,0x6f,0x20,0x31,0x36,0x20,0x63,0x68,0x61,
0x6e,0x6e,0x65,0x6c,0x73,0x29,0x3c,0x2f,0x70,0x3e,0x0a,0x3c,0x70,0x3e,0x3c,0x75,
0x6c,0x3e,0x0a,0x09,0x3c,0x6c,0x69,0x3e,0x43,0x6f,0x6e,0x76,0x65,0x72,0x73,0x69,
0x6f,0x6e,0x20,0x72,0x61,0x6e,0x67,0x65,0x3a,0x20,0x30,0x20,0x74,0x6f,0x20,0x33,
0x2e,0x36,0x20,0x56,0x3c,0x2f,0x6c,0x69,0x3e,0x0a,0x09,0x3c,0x6c,0x69,0x3e,0x44,
0x75,0x61,0x6c,0x2d,0x73,0x61,0x6d,0x70,0x6c,0x65,0x20,0x61,0x6e,0x64,0x20,0x68,
0x6f,0x6c,0x64,0x20,0x63,0x61,0x70,0x61,0x62,0x69,0x6c,0x69,0x74,0x79,0x3c,0x2f,
0x6c,0x69,0x3e,0x0a,0x09,0x3c,0x6c,0x69,0x3e,0x54,0x65,0x6d,0x70,0x65,0x72,0x61,
0x74,0x75,0x72,0x65,0x20,0x73,0x65,0x6e,0x73,0x6f,0x72,0x3c,0x2f,0x6c,0x69,0x3e,
0x0a,0x3c,0x2f,0x75,0x6c,0x3e,0x3c,0x2f,0x70,0x3e,0x0a,0x3c,0x70,0x3e,0x44,0x4d,
0x41,0x3c,0x2f,0x70,0x3e,0x0a,0x3c,0x70,0x3e,0x3c,0x75,0x6c,0x3e,0x0a,0x09,0x3c,
0x6c,0x69,0x3e,0x37,0x2d,0x63,0x68,0x61,0x6e,0x6e,0x65,0x6c,0x20,0x44,0x4d,0x41,
0x20,0x63,0x6f,0x6e,0x74,0x72,0x6f,0x6c,0x6c,0x65,0x72,0x3c,0x2f,0x6c,0x69,0x3e,
0x0a,0x09,0x3c,0x6c,0x69,0x3e,0x50,0x65,0x72,0x69,0x70,0x68,0x65,0x72,0x61,0x6c,
0x73,0x20,0x73,0x75,0x70,0x70,0x6f,0x72,0x74,0x65,0x64,0x3a,0x20,0x74,0x69,0x6d,
0x65,0x72,0x73,0x2c,0x20,0x41,0x44,0x43,0x2c,0x20,0x53,0x50,0x49,0x73,0x2c,0x20,
0x49,0x32,0x43,0x73,0x20,0x61,0x6e,0x64,0x20,0x55,0x53,0x41,0x52,0x54,0x73,0x3c,
0x2f,0x6c,0x69,0x3e,0x0a,0x3c,0x2f,0x75,0x6c,0x3e,0x3c,0x2f,0x70,0x3e,0x0a,0x3c,
0x70,0x3e,0x55,0x70,0x20,0x74,0x6f,0x20,0x38,0x30,0x20,0x66,0x61,0x73,0x74,0x20,
0x49,0x2f,0x4f,0x20,0x70,0x6f,0x72,0x74,0x73,0x3c,0x2f,0x70,0x3e,0x0a,0x3c,0x70,
0x3e,0x3c,0x75,0x6c,0x3e,0x0a,0x09,0x3c,0x6c,0x69,0x3e,0x32,0x36,0x2f,0x33,0x37,
0x2f,0x35,0x31,0x2f,0x38,0x30,0x20,0x49,0x2f,0x4f,0x73,0x2c,0x20,0x61,0x6c,0x6c,
0x20,0x6d,0x61,0x70,0x70,0x61,0x62,0x6c,0x65,0x20,0x6f,0x6e,0x20,0x31,0x36,0x20,
0x65,0x78,0x74,0x65,0x72,0x6e,0x61,0x6c,0x20,0x69,0x6e,0x74,0x65,0x72,0x72,0x75,
0x70,0x74,0x20,0x76,0x65,0x63,0x74,0x6f,0x72,0x73,0x20,0x61,0x6e,0x64,0x20,0x61,
0x6c,0x6d,0x6f,0x73,0x74,0x20,0x61,0x6c,0x6c,0x3c,0x2f,0x6c,0x69,0x3e,0x0a,0x09,
0x3c,0x6c,0x69,0x3e,0x35,0x20,0x56,0x2d,0x74,0x6f,0x6c,0x65,0x72,0x61,0x6e,0x74,
0x3c,0x2f,0x6c,0x69,0x3e,0x0a,0x3c,0x2f,0x75,0x6c,0x3e,0x3c,0x2f,0x70,0x3e,0x0a,
0x3c,0x70,0x3e,0x37,0x20,0x74,0x69,0x6d,0x65,0x72,0x73,0x3c,0x2f,0x70,0x3e,0x0a,
0x3c,0x70,0x3e,0x3c,0x75,0x6c,0x3e,0x0a,0x09,0x3c,0x6c,0x69,0x3e,0x62,0x69,0x74,
0x20,0x74,0x69,0x6d,0x65,0x72,0x73,0x2c,0x20,0x65,0x61,0x63,0x68,0x20,0x77,0x69,
0x74,0x68,0x20,0x75,0x70,0x20,0x74,0x6f,0x20,0x34,0x20,0x49,0x43,0x2f,0x4f,0x43,
0x2f,0x50,0x57,0x4d,0x20,0x6f,0x72,0x20,0x70,0x75,0x6c,0x73,0x65,0x20,0x63,0x6f,
0x75,0x6e,0x74,0x65,0x72,0x20,0x61,0x6e,0x64,0x20,0x71,0x75,0x61,0x64,0x72,0x61,
0x74,0x75,0x72,0x65,0x20,0x28,0x69,0x6e,0x63,0x72,0x65,0x6d,0x65,0x6e,0x74,0x61,
0x6c,0x29,0x20,0x65,0x6e,0x63,0x6f,0x64,0x65,0x72,0x20,0x69,0x6e,0x70,0x75,0x74,
0x3c,0x2f,0x6c,0x69,0x3e,0x0a,0x09,0x3c,0x6c,0x69,0x3e,0x31,0x36,0x2d,0x62,0x69,
0x74,0x2c,0x20,0x6d,0x6f,0x74,0x6f,0x72,0x20,0x63,0x6f,0x6e,0x74,0x72,0x6f,0x6c,
0x20,0x50,0x57,0x4d,0x20,0x74,0x69,0x6d,0x65,0x72,0x20,0x77,0x69,0x74,0x68,0x20,
0x64,0x65,0x61,0x64,0x74,0x69,0x6d,0x65,0x20,0x67,0x65,0x6e,0x65,0x72,0x61,0x74,
0x69,0x6f,0x6e,0x20,0x61,0x6e,0x64,0x20,0x65,0x6d,0x65,0x72,0x67,0x65,0x6e,0x63,
0x79,0x20,0x73,0x74,0x6f,0x70,0x3c,0x2f,0x6c,0x69,0x3e,0x0a,0x09,0x3c,0x6c,0x69,
0x3e,0x32,0x20,0x77,0x61,0x74,0x63,0x68,0x64,0x6f,0x67,0x20,0x74,0x69,0x6d,0x65,
0x72,0x73,0x20,0x28,0x49,0x6e,0x64,0x65,0x70,0x65,0x6e,0x64,0x65,0x6e,0x74,0x20,
0x61,0x6e,0x64,0x20,0x57,0x69,0x6e,0x64,0x6f,0x77,0x29,0x3c,0x2f,0x6c,0x69,0x3e,
0x0a,0x09,0x3c,0x6c,0x69,0x3e,0x53,0x79,0x73,0x54,0x69,0x63,0x6b,0x20,0x74,0x69,
0x6d,0x65,0x72,0x20,0x32,0x34,0x2d,0x62,0x69,0x74,0x20,0x64,0x6f,0x77,0x6e,0x63,
0x6f,0x75,0x6e,0x74,0x65,0x72,0x3c,0x2f,0x6c,0x69,0x3e,0x0a,0x3c,0x2f,0x75,0x6c,
0x3e,0x3c,0x2f,0x70,0x3e,0x0a,0x3c,0x70,0x3e,0x55,0x70,0x20,0x74,0x6f,0x20,0x39,
0x20,0x63,0x6f,0x6d,0x6d,0x75,0x6e,0x69,0x63,0x61,0x74,0x69,0x6f,0x6e,0x20,0x69,
0x6e,0x74,0x65,0x72,0x66,0x61,0x63,0x65,0x73,0x3c,0x2f,0x70,0x3e,0x0a,0x3c,0x70,
0x3e,0x3c,0x75,0x6c,0x3e,0x0a,0x09,0x3c,0x6c,0x69,0x3e,0x55,0x70,0x20,0x74,0x6f,
0x20,0x32,0x20,0x78,0x20,0x49,0x32,0x43,0x20,0x69,0x6e,0x74,0x65,0x72,0x66,0x61,
0x63,0x65,0x73,0x20,0x28,0x53,0x4d,0x42,0x75,0x73,0x2f,0x50,0x4d,0x42,0x75,0x73,
0x29,0x3c,0x2f,0x6c,0x69,0x3e,0x0a,0x09,0x3c,0x6c,0x69,0x3e,0x55,0x70,0x20,0x74,
0x6f,0x20,0x33,0x20,0x55,0x53,0x41,0x52,0x54,0x73,0x20,0x28,0x49,0x53,0x4f,0x20,
0x37,0x38,0x31,0x36,0x20,0x69,0x6e,0x74,0x65,0x72,0x66,0x61,0x63,0x65,0x2c,0x20,
0x4c,0x49,0x4e,0x2c,0x20,0x49,0x72,0x44,0x41,0x20,0x63,0x61,0x70,0x61,0x62,0x69,
0x6c,0x69,0x74,0x79,0x2c,0x20,0x6d,0x6f,0x64,0x65,0x6d,0x20,0x63,0x6f,0x6e,0x74,
0x72,0x6f,0x6c,0x29,0x3c,0x2f,0x6c,0x69,0x3e,0x0a,0x09,0x3c,0x6c,0x69,0x3e,0x55,
0x70,0x20,0x74,0x6f,0x20,0x32,0x20,0x53,0x50,0x49,0x73,0x20,0x28,0x31,0x38,0x20,
0x4d,0x62,0x69,0x74,0x2f,0x73,0x29,0x3c,0x2f,0x6c,0x69,0x3e,0x0a,0x09,0x3c,0x6c,
0x69,0x3e,0x43,0x41,0x4e,0x20,0x69,0x6e,0x74,0x65,0x72,0x66,0x61,0x63,0x65,0x20,
0x28,0x32,0x2e,0x30,0x42,0x20,0x41,0x63,0x74,0x69,0x76,0x65,0x29,0x3c,0x2f,0x6c,
0x69,0x3e,0x0a,0x09,0x3c,0x6c,0x69,0x3e,0x55,0x53,0x42,0x20,0x32,0x2e,0x30,0x20,
0x66,0x75,0x6c,0x6c,0x2d,0x73,0x70,0x65,0x65,0x64,0x20,0x69,0x6e,0x74,0x65,0x72,
0x66,0x61,0x63,0x65,0x3c,0x2f,0x6c,0x69,0x3e,0x0a,0x3c,0x2f,0x75,0x6c,0x3e,0x3c,
0x2f,0x70,0x3e,0x0a,0x3c,0x2f,0x62,0x6f,0x64,0x79,0x3e,0x3c,0x2f,0x68,0x74,0x6d,
0x6c,0x3e};
const uint8_t index_htm[] = {
0x3c,0x68,0x74,0x6d,0x6c,0x3e,0x3c,0x62,0x6f,0x64,0x79,0x3e,0x3c,0x68,0x31,0x20,
0x73,0x74,0x79,0x6c,0x65,0x3d,0x22,0x74,0x65,0x78,0x74,0x2d,0x61,0x6c,0x69,0x67,
0x6e,0x3a,0x20,0x63,0x65,0x6e,0x74,0x65,0x72,0x3b,0x22,0x3e,0x53,0x54,0x4d,0x33,
0x32,0x46,0x31,0x30,0x33,0x78,0x38,0x3c,0x62,0x72,0x3e,0x3c,0x62,0x72,0x3e,0x57,
0x45,0x42,0x20,0x53,0x65,0x72,0x76,0x65,0x72,0x3c,0x2f,0x68,0x31,0x3e,0x0a,0x3c,
0x70,0x3e,0x3c,0x2f,0x70,0x3e,0x0a,0x3c,0x68,0x32,0x3e,0x46,0x65,0x61,0x74,0x75,
0x72,0x65,0x73,0x3c,0x2f,0x68,0x32,0x3e,0x0a,0x3c,0x70,0x3e,0x41,0x52,0x4d,0xae,
0x20,0x33,0x32,0x2d,0x62,0x69,0x74,0x20,0x43,0x6f,0x72,0x74,0x65,0x78,0xae,0x2d,
0x4d,0x33,0x20,0x43,0x50,0x55,0x20,0x43,0x6f,0x72,0x65,0x3c,0x2f,0x70,0x3e,0x0a,
0x3c,0x70,0x3e,0x3c,0x75,0x6c,0x3e,0x0a,0x09,0x3c,0x6c,0x69,0x3e,0x37,0x32,0x20,
0x4d,0x48,0x7a,0x20,0x6d,0x61,0x78,0x69,0x6d,0x75,0x6d,0x20,0x66,0x72,0x65,0x71,
0x75,0x65,0x6e,0x63,0x79,0x2c,0x20,0x31,0x2e,0x32,0x35,0x20,0x44,0x4d,0x49,0x50,
0x53,0x2f,0x4d,0x48,0x7a,0x20,0x28,0x44,0x68,0x72,0x79,0x73,0x74,0x6f,0x6e,0x65,
0x20,0x32,0x2e,0x31,0x29,0x20,0x70,0x65,0x72,0x66,0x6f,0x72,0x6d,0x61,0x6e,0x63,
0x65,0x20,0x61,0x74,0x20,0x30,0x20,0x77,0x61,0x69,0x74,0x20,0x73,0x74,0x61,0x74,
0x65,0x20,0x6d,0x65,0x6d,0x6f,0x72,0x79,0x20,0x61,0x63,0x63,0x65,0x73,0x73,0x3c,
0x2f,0x6c,0x69,0x3e,0x0a,0x09,0x3c,0x6c,0x69,0x3e,0x53,0x69,0x6e,0x67,0x6c,0x65,
0x2d,0x63,0x79,0x63,0x6c,0x65,0x20,0x6d,0x75,0x6c,0x74,0x69,0x70,0x6c,0x69,0x63,
0x61,0x74,0x69,0x6f,0x6e,0x20,0x61,0x6e,0x64,0x20,0x68,0x61,0x72,0x64,0x77,0x61,
0x72,0x65,0x20,0x64,0x69,0x76,0x69,0x73,0x69,0x6f,0x6e,0x3c,0x2f,0x6c,0x69,0x3e,
0x0a,0x3c,0x2f,0x75,0x6c,0x3e,0x3c,0x2f,0x70,0x3e,0x0a,0x3c,0x70,0x3e,0x4d,0x65,
0x6d,0x6f,0x72,0x69,0x65,0x73,0x3c,0x2f,0x70,0x3e,0x0a,0x3c,0x70,0x3e,0x3c,0x75,
0x6c,0x3e,0x0a,0x09,0x3c,0x6c,0x69,0x3e,0x36,0x34,0x20,0x6f,0x72,0x20,0x31,0x32,
0x38,0x20,0x4b,0x62,0x79,0x74,0x65,0x73,0x20,0x6f,0x66,0x20,0x46,0x6c,0x61,0x73,
0x68,0x20,0x6d,0x65,0x6d,0x6f,0x72,0x79,0x3c,0x2f,0x6c,0x69,0x3e,0x0a,0x09,0x3c,
0x6c,0x69,0x3e,0x32,0x30,0x20,0x4b,0x62,0x79,0x74,0x65,0x73,0x20,0x6f,0x66,0x20,
0x53,0x52,0x41,0x4d,0x3c,0x2f,0x6c,0x69,0x3e,0x0a,0x3c,0x2f,0x75,0x6c,0x3e,0x3c,
0x2f,0x70,0x3e,0x0a,0x3c,0x70,0x3e,0x43,0x6c,0x6f,0x63,0x6b,0x2c,0x20,0x72,0x65,
0x73,0x65,0x74,0x20,0x61,0x6e,0x64,0x20,0x73,0x75,0x70,0x70,0x6c,0x79,0x20,0x6d,
0x61,0x6e,0x61,0x67,0x65,0x6d,0x65,0x6e,0x74,0x3c,0x2f,0x70,0x3e,0x0a,0x3c,0x70,
0x3e,0x3c,0x75,0x6c,0x3e,0x0a,0x09,0x3c,0x6c,0x69,0x3e,0x32,0x2e,0x30,0x20,0x74,
0x6f,0x20,0x33,0x2e,0x36,0x20,0x56,0x20,0x61,0x70,0x70,0x6c,0x69,0x63,0x61,0x74,
0x69,0x6f,0x6e,0x20,0x73,0x75,0x70,0x70,0x6c,0x79,0x20,0x61,0x6e,0x64,0x20,0x49,
0x2f,0x4f,0x73,0x3c,0x2f,0x6c,0x69,0x3e,0x0a,0x09,0x3c,0x6c,0x69,0x3e,0x50,0x4f,
0x52,0x2c,0x20,0x50,0x44,0x52,0x2c,0x20,0x61,0x6e,0x64,0x20,0x70,0x72,0x6f,0x67,
0x72,0x61,0x6d,0x6d,0x61,0x62,0x6c,0x65,0x20,0x76,0x6f,0x6c,0x74,0x61,0x67,0x65,
0x20,0x64,0x65,0x74,0x65,0x63,0x74,0x6f,0x72,0x20,0x28,0x50,0x56,0x44,0x29,0x3c,
0x2f,0x6c,0x69,0x3e,0x0a,0x09,0x3c,0x6c,0x69,0x3e,0x34,0x2d,0x74,0x6f,0x2d,0x31,
0x36,0x20,0x4d,0x48,0x7a,0x20,0x63,0x72,0x79,0x73,0x74,0x61,0x6c,0x20,0x6f,0x73,
0x63,0x69,0x6c,0x6c,0x61,0x74,0x6f,0x72,0x3c,0x2f,0x6c,0x69,0x3e,0x0a,0x09,0x3c,
0x6c,0x69,0x3e,0x49,0x6e,0x74,0x65,0x72,0x6e,0x61,0x6c,0x20,0x38,0x20,0x4d,0x48,
0x7a,0x20,0x66,0x61,0x63,0x74,0x6f,0x72,0x79,0x2d,0x74,0x72,0x69,0x6d,0x6d,0x65,
0x64,0x20,0x52,0x43,0x3c,0x2f,0x6c,0x69,0x3e,0x0a,0x09,0x3c,0x6c,0x69,0x3e,0x49,
0x6e,0x74,0x65,0x72,0x6e,0x61,0x6c,0x20,0x34,0x30,0x20,0x6b,0x48,0x7a,0x20,0x52,
0x43,0x3c,0x2f,0x6c,0x69,0x3e,0x0a,0x09,0x3c,0x6c,0x69,0x3e,0x50,0x4c,0x4c,0x20,
0x66,0x6f,0x72,0x20,0x43,0x50,0x55,0x20,0x63,0x6c,0x6f,0x63,0x6b,0x3c,0x2f,0x6c,
0x69,0x3e,0x0a,0x09,0x3c,0x6c,0x69,0x3e,0x33,0x32,0x20,0x6b,0x48,0x7a,0x20,0x6f,
0x73,0x63,0x69,0x6c,0x6c,0x61,0x74,0x6f,0x72,0x20,0x66,0x6f,0x72,0x20,0x52,0x54,
0x43,0x20,0x77,0x69,0x74,0x68,0x20,0x63,0x61,0x6c,0x69,0x62,0x72,0x61,0x74,0x69,
0x6f,0x6e,0x3c,0x2f,0x6c,0x69,0x3e,0x0a,0x3c,0x2f,0x75,0x6c,0x3e,0x3c,0x2f,0x70,
0x3e,0x0a,0x3c,0x70,0x3e,0x4c,0x6f,0x77,0x2d,0x70,0x6f,0x77,0x65,0x72,0x3c,0x2f,
0x70,0x3e,0x0a,0x3c,0x70,0x3e,0x3c,0x75,0x6c,0x3e,0x0a,0x09,0x3c,0x6c,0x69,0x3e,
0x53,0x6c,0x65,0x65,0x70,0x2c,0x20,0x53,0x74,0x6f,0x70,0x20,0x61,0x6e,0x64,0x20,
0x53,0x74,0x61,0x6e,0x64,0x62,0x79,0x20,0x6d,0x6f,0x64,0x65,0x73,0x3c,0x2f,0x6c,
0x69,0x3e,0x0a,0x09,0x3c,0x6c,0x69,0x3e,0x56,0x42,0x41,0x54,0x20,0x73,0x75,0x70,
0x70,0x6c,0x79,0x20,0x66,0x6f,0x72,0x20,0x52,0x54,0x43,0x20,0x61,0x6e,0x64,0x20,
0x62,0x61,0x63,0x6b,0x75,0x70,0x20,0x72,0x65,0x67,0x69,0x73,0x74,0x65,0x72,0x73,
0x3c,0x2f,0x6c,0x69,0x3e,0x0a,0x3c,0x2f,0x75,0x6c,0x3e,0x3c,0x2f,0x70,0x3e,0x0a,
0x3c,0x70,0x3e,0x32,0x20,0x78,0x20,0x31,0x32,0x2d,0x62,0x69,0x74,0x2c,0x20,0x31,
0x20,0x3f,0x73,0x20,0x41,0x2f,0x44,0x20,0x63,0x6f,0x6e,0x76,0x65,0x72,0x74,0x65,
0x72,0x73,0x20,0x28,0x75,0x70,0x20,0x74,0x6f,0x20,0x31,0x36,0x20,0x63,0x68,0x61,
0x6e,0x6e,0x65,0x6c,0x73,0x29,0x3c,0x2f,0x70,0x3e,0x0a,0x3c,0x70,0x3e,0x3c,0x75,
0x6c,0x3e,0x0a,0x09,0x3c,0x6c,0x69,0x3e,0x43,0x6f,0x6e,0x76,0x65,0x72,0x73,0x69,
0x6f,0x6e,0x20,0x72,0x61,0x6e,0x67,0x65,0x3a,0x20,0x30,0x20,0x74,0x6f,0x20,0x33,
0x2e,0x36,0x20,0x56,0x3c,0x2f,0x6c,0x69,0x3e,0x0a,0x09,0x3c,0x6c,0x69,0x3e,0x44,
0x75,0x61,0x6c,0x2d,0x73,0x61,0x6d,0x70,0x6c,0x65,0x20,0x61,0x6e,0x64,0x20,0x68,
0x6f,0x6c,0x64,0x20,0x63,0x61,0x70,0x61,0x62,0x69,0x6c,0x69,0x74,0x79,0x3c,0x2f,
0x6c,0x69,0x3e,0x0a,0x09,0x3c,0x6c,0x69,0x3e,0x54,0x65,0x6d,0x70,0x65,0x72,0x61,
0x74,0x75,0x72,0x65,0x20,0x73,0x65,0x6e,0x73,0x6f,0x72,0x3c,0x2f,0x6c,0x69,0x3e,
0x0a,0x3c,0x2f,0x75,0x6c,0x3e,0x3c,0x2f,0x70,0x3e,0x0a,0x3c,0x70,0x3e,0x44,0x4d,
0x41,0x3c,0x2f,0x70,0x3e,0x0a,0x3c,0x70,0x3e,0x3c,0x75,0x6c,0x3e,0x0a,0x09,0x3c,
0x6c,0x69,0x3e,0x37,0x2d,0x63,0x68,0x61,0x6e,0x6e,0x65,0x6c,0x20,0x44,0x4d,0x41,
0x20,0x63,0x6f,0x6e,0x74,0x72,0x6f,0x6c,0x6c,0x65,0x72,0x3c,0x2f,0x6c,0x69,0x3e,
0x0a,0x09,0x3c,0x6c,0x69,0x3e,0x50,0x65,0x72,0x69,0x70,0x68,0x65,0x72,0x61,0x6c,
0x73,0x20,0x73,0x75,0x70,0x70,0x6f,0x72,0x74,0x65,0x64,0x3a,0x20,0x74,0x69,0x6d,
0x65,0x72,0x73,0x2c,0x20,0x41,0x44,0x43,0x2c,0x20,0x53,0x50,0x49,0x73,0x2c,0x20,
0x49,0x32,0x43,0x73,0x20,0x61,0x6e,0x64,0x20,0x55,0x53,0x41,0x52,0x54,0x73,0x3c,
0x2f,0x6c,0x69,0x3e,0x0a,0x3c,0x2f,0x75,0x6c,0x3e,0x3c,0x2f,0x70,0x3e,0x0a,0x3c,
0x70,0x3e,0x55,0x70,0x20,0x74,0x6f,0x20,0x38,0x30,0x20,0x66,0x61,0x73,0x74,0x20,
0x49,0x2f,0x4f,0x20,0x70,0x6f,0x72,0x74,0x73,0x3c,0x2f,0x70,0x3e,0x0a,0x3c,0x70,
0x3e,0x3c,0x75,0x6c,0x3e,0x0a,0x09,0x3c,0x6c,0x69,0x3e,0x32,0x36,0x2f,0x33,0x37,
0x2f,0x35,0x31,0x2f,0x38,0x30,0x20,0x49,0x2f,0x4f,0x73,0x2c,0x20,0x61,0x6c,0x6c,
0x20,0x6d,0x61,0x70,0x70,0x61,0x62,0x6c,0x65,0x20,0x6f,0x6e,0x20,0x31,0x36,0x20,
0x65,0x78,0x74,0x65,0x72,0x6e,0x61,0x6c,0x20,0x69,0x6e,0x74,0x65,0x72,0x72,0x75,
0x70,0x74,0x20,0x76,0x65,0x63,0x74,0x6f,0x72,0x73,0x20,0x61,0x6e,0x64,0x20,0x61,
0x6c,0x6d,0x6f,0x73,0x74,0x20,0x61,0x6c,0x6c,0x3c,0x2f,0x6c,0x69,0x3e,0x0a,0x09,
0x3c,0x6c,0x69,0x3e,0x35,0x20,0x56,0x2d,0x74,0x6f,0x6c,0x65,0x72,0x61,0x6e,0x74,
0x3c,0x2f,0x6c,0x69,0x3e,0x0a,0x3c,0x2f,0x75,0x6c,0x3e,0x3c,0x2f,0x70,0x3e,0x0a,
0x3c,0x70,0x3e,0x37,0x20,0x74,0x69,0x6d,0x65,0x72,0x73,0x3c,0x2f,0x70,0x3e,0x0a,
0x3c,0x70,0x3e,0x3c,0x75,0x6c,0x3e,0x0a,0x09,0x3c,0x6c,0x69,0x3e,0x62,0x69,0x74,
0x20,0x74,0x69,0x6d,0x65,0x72,0x73,0x2c,0x20,0x65,0x61,0x63,0x68,0x20,0x77,0x69,
0x74,0x68,0x20,0x75,0x70,0x20,0x74,0x6f,0x20,0x34,0x20,0x49,0x43,0x2f,0x4f,0x43,
0x2f,0x50,0x57,0x4d,0x20,0x6f,0x72,0x20,0x70,0x75,0x6c,0x73,0x65,0x20,0x63,0x6f,
0x75,0x6e,0x74,0x65,0x72,0x20,0x61,0x6e,0x64,0x20,0x71,0x75,0x61,0x64,0x72,0x61,
0x74,0x75,0x72,0x65,0x20,0x28,0x69,0x6e,0x63,0x72,0x65,0x6d,0x65,0x6e,0x74,0x61,
0x6c,0x29,0x20,0x65,0x6e,0x63,0x6f,0x64,0x65,0x72,0x20,0x69,0x6e,0x70,0x75,0x74,
0x3c,0x2f,0x6c,0x69,0x3e,0x0a,0x09,0x3c,0x6c,0x69,0x3e,0x31,0x36,0x2d,0x62,0x69,
0x74,0x2c,0x20,0x6d,0x6f,0x74,0x6f,0x72,0x20,0x63,0x6f,0x6e,0x74,0x72,0x6f,0x6c,
0x20,0x50,0x57,0x4d,0x20,0x74,0x69,0x6d,0x65,0x72,0x20,0x77,0x69,0x74,0x68,0x20,
0x64,0x65,0x61,0x64,0x74,0x69,0x6d,0x65,0x20,0x67,0x65,0x6e,0x65,0x72,0x61,0x74,
0x69,0x6f,0x6e,0x20,0x61,0x6e,0x64,0x20,0x65,0x6d,0x65,0x72,0x67,0x65,0x6e,0x63,
0x79,0x20,0x73,0x74,0x6f,0x70,0x3c,0x2f,0x6c,0x69,0x3e,0x0a,0x09,0x3c,0x6c,0x69,
0x3e,0x32,0x20,0x77,0x61,0x74,0x63,0x68,0x64,0x6f,0x67,0x20,0x74,0x69,0x6d,0x65,
0x72,0x73,0x20,0x28,0x49,0x6e,0x64,0x65,0x70,0x65,0x6e,0x64,0x65,0x6e,0x74,0x20,
0x61,0x6e,0x64,0x20,0x57,0x69,0x6e,0x64,0x6f,0x77,0x29,0x3c,0x2f,0x6c,0x69,0x3e,
0x0a,0x09,0x3c,0x6c,0x69,0x3e,0x53,0x79,0x73,0x54,0x69,0x63,0x6b,0x20,0x74,0x69,
0x6d,0x65,0x72,0x20,0x32,0x34,0x2d,0x62,0x69,0x74,0x20,0x64,0x6f,0x77,0x6e,0x63,
0x6f,0x75,0x6e,0x74,0x65,0x72,0x3c,0x2f,0x6c,0x69,0x3e,0x0a,0x3c,0x2f,0x75,0x6c,
0x3e,0x3c,0x2f,0x70,0x3e,0x0a,0x3c,0x70,0x3e,0x55,0x70,0x20,0x74,0x6f,0x20,0x39,
0x20,0x63,0x6f,0x6d,0x6d,0x75,0x6e,0x69,0x63,0x61,0x74,0x69,0x6f,0x6e,0x20,0x69,
0x6e,0x74,0x65,0x72,0x66,0x61,0x63,0x65,0x73,0x3c,0x2f,0x70,0x3e,0x0a,0x3c,0x70,
0x3e,0x3c,0x75,0x6c,0x3e,0x0a,0x09,0x3c,0x6c,0x69,0x3e,0x55,0x70,0x20,0x74,0x6f,
0x20,0x32,0x20,0x78,0x20,0x49,0x32,0x43,0x20,0x69,0x6e,0x74,0x65,0x72,0x66,0x61,
0x63,0x65,0x73,0x20,0x28,0x53,0x4d,0x42,0x75,0x73,0x2f,0x50,0x4d,0x42,0x75,0x73,
0x29,0x3c,0x2f,0x6c,0x69,0x3e,0x0a,0x09,0x3c,0x6c,0x69,0x3e,0x55,0x70,0x20,0x74,
0x6f,0x20,0x33,0x20,0x55,0x53,0x41,0x52,0x54,0x73,0x20,0x28,0x49,0x53,0x4f,0x20,
0x37,0x38,0x31,0x36,0x20,0x69,0x6e,0x74,0x65,0x72,0x66,0x61,0x63,0x65,0x2c,0x20,
0x4c,0x49,0x4e,0x2c,0x20,0x49,0x72,0x44,0x41,0x20,0x63,0x61,0x70,0x61,0x62,0x69,
0x6c,0x69,0x74,0x79,0x2c,0x20,0x6d,0x6f,0x64,0x65,0x6d,0x20,0x63,0x6f,0x6e,0x74,
0x72,0x6f,0x6c,0x29,0x3c,0x2f,0x6c,0x69,0x3e,0x0a,0x09,0x3c,0x6c,0x69,0x3e,0x55,
0x70,0x20,0x74,0x6f,0x20,0x32,0x20,0x53,0x50,0x49,0x73,0x20,0x28,0x31,0x38,0x20,
0x4d,0x62,0x69,0x74,0x2f,0x73,0x29,0x3c,0x2f,0x6c,0x69,0x3e,0x0a,0x09,0x3c,0x6c,
0x69,0x3e,0x43,0x41,0x4e,0x20,0x69,0x6e,0x74,0x65,0x72,0x66,0x61,0x63,0x65,0x20,
0x28,0x32,0x2e,0x30,0x42,0x20,0x41,0x63,0x74,0x69,0x76,0x65,0x29,0x3c,0x2f,0x6c,
0x69,0x3e,0x0a,0x09,0x3c,0x6c,0x69,0x3e,0x55,0x53,0x42,0x20,0x32,0x2e,0x30,0x20,
0x66,0x75,0x6c,0x6c,0x2d,0x73,0x70,0x65,0x65,0x64,0x20,0x69,0x6e,0x74,0x65,0x72,
0x66,0x61,0x63,0x65,0x3c,0x2f,0x6c,0x69,0x3e,0x0a,0x3c,0x2f,0x75,0x6c,0x3e,0x3c,
0x2f,0x70,0x3e,0x0a,0x3c,0x70,0x3e,0x43,0x52,0x43,0x20,0x63,0x61,0x6c,0x63,0x75,
0x6c,0x61,0x74,0x69,0x6f,0x6e,0x20,0x75,0x6e,0x69,0x74,0x2c,0x20,0x39,0x36,0x2d,
0x62,0x69,0x74,0x20,0x75,0x6e,0x69,0x71,0x75,0x65,0x20,0x49,0x44,0x3c,0x2f,0x70,
0x3e,0x0a,0x3c,0x70,0x3e,0x50,0x61,0x63,0x6b,0x61,0x67,0x65,0x73,0x20,0x61,0x72,
0x65,0x20,0x45,0x43,0x4f,0x50,0x41,0x43,0x4b,0xae,0x3c,0x2f,0x70,0x3e,0x0a,0x3c,
0x68,0x32,0x3e,0x31,0x2e,0x20,0x49,0x6e,0x74,0x72,0x6f,0x64,0x75,0x63,0x74,0x69,
0x6f,0x6e,0x3c,0x2f,0x68,0x32,0x3e,0x0a,0x3c,0x70,0x3e,0x54,0x68,0x69,0x73,0x20,
0x64,0x61,0x74,0x61,0x73,0x68,0x65,0x65,0x74,0x20,0x70,0x72,0x6f,0x76,0x69,0x64,
0x65,0x73,0x20,0x74,0x68,0x65,0x20,0x6f,0x72,0x64,0x65,0x72,0x69,0x6e,0x67,0x20,
0x69,0x6e,0x66,0x6f,0x72,0x6d,0x61,0x74,0x69,0x6f,0x6e,0x20,0x61,0x6e,0x64,0x20,
0x6d,0x65,0x63,0x68,0x61,0x6e,0x69,0x63,0x61,0x6c,0x20,0x64,0x65,0x76,0x69,0x63,
0x65,0x20,0x63,0x68,0x61,0x72,0x61,0x63,0x74,0x65,0x72,0x69,0x73,0x74,0x69,0x63,
0x73,0x20,0x6f,0x66,0x20,0x74,0x68,0x65,0x20,0x53,0x54,0x4d,0x33,0x32,0x46,0x31,
0x30,0x33,0x78,0x38,0x20,0x61,0x6e,0x64,0x20,0x53,0x54,0x4d,0x33,0x32,0x46,0x31,
0x30,0x33,0x78,0x42,0x20,0x6d,0x65,0x64,0x69,0x75,0x6d,0x2d,0x64,0x65,0x6e,0x73,
0x69,0x74,0x79,0x20,0x70,0x65,0x72,0x66,0x6f,0x72,0x6d,0x61,0x6e,0x63,0x65,0x20,
0x6c,0x69,0x6e,0x65,0x20,0x6d,0x69,0x63,0x72,0x6f,0x63,0x6f,0x6e,0x74,0x72,0x6f,
0x6c,0x6c,0x65,0x72,0x73,0x2e,0x3c,0x2f,0x70,0x3e,0x0a,0x3c,0x2f,0x62,0x6f,0x64,
0x79,0x3e,0x3c,0x2f,0x68,0x74,0x6d,0x6c,0x3e};
После каждого изменения проверяем результат в браузере и в Wireshark.
А вот и наша самая большая страница, которая состоит из 6 пакетов (нажмите на картинку для увеличения изображения)
Посмотрим также процесс передачи клиента нашего последнего документа в WireShark (нажмите на картинку для увеличения изображения)
Также убедимся, что наш документ состоит именно из 6 частей, заглянув в вывод данных в терминальной программе
Таким образом, в нашем уроке нам удалось передать, пользуясь протоколом HTTP, документ, состоящий, можно сказать из неограниченного количества пакетов. Также, не нарушая традиций, мы ещё немного прооптимизировали наш проект, что сэкономило нам немного памяти, а также сделало наш проект более читабельным.
Спасибо за внимание!
Предыдущая часть Программирование МК STM32 Следующий урок
Отладочную плату можно приобрести здесь STM32F103C8T6
Ethernet LAN Сетевой Модуль можно купить здесь ENC28J60 Ethernet LAN
Переходник USB to TTL можно приобрести здесь USB to TTL ftdi ft232rl
Смотреть ВИДЕОУРОК (нажмите на картинку)
Вопрос: почему страница отображается в браузерах только если запущен WireShark? Если программа закрыта и не мониторит сеть, то «не удалось отобразить страницу». Пробовал все популярные браузеры. Отстальное работает. В uart при запросе страницы видны ASKи.
Странно, у меня не было такого никогда, может у кого-то было.
+1 аналогично и после ~600 пингов отваливается пинг. Не стабильно работает.
Потому, что WireShark переводит сетевую карту в режим promiscuous mode. Я только не могу понять почему так… где-то ошибка в коде что ли
В Chrome на ubunt'е не отобразилась большая страница, а в Opera все ок. Пример дал понять, насколько непросто сделать самодельную реализацию стека TCP/IP.(дефрагментация IP пакетов, DHCP, DNS, и сколько еще всего надо сделать, наверное не хватит памяти на все) Но попробовать получилось, Спасибо за уроки!