From 8b4a0a9892a84a76aeeac26617388e1d3883e267 Mon Sep 17 00:00:00 2001 From: Nic Limper Date: Fri, 27 Jan 2023 15:38:59 +0100 Subject: [PATCH 01/10] added button Place a button switch between TEST pin (P1.0) and GND + capacitor in parallel). Pressing button wakes up the tag and sends a request to the AP, including button state. --- ap_fw/main.c | 1 + esp32_fw/include/commstructs.h | 1 + esp32_fw/src/newproto.cpp | 2 +- tag_fw/fw29.bin | Bin 31540 -> 31545 bytes tag_fw/syncedproto.c | 37 +++++++++++++++++++++++++++++++++ 5 files changed, 40 insertions(+), 1 deletion(-) diff --git a/ap_fw/main.c b/ap_fw/main.c index 573816c5..d5149570 100644 --- a/ap_fw/main.c +++ b/ap_fw/main.c @@ -60,6 +60,7 @@ struct AvailDataReq { uint8_t softVer; uint8_t hwType; uint8_t protoVer; + //uint8_t buttonState; } __packed; #define DATATYPE_NOUPDATE 0 diff --git a/esp32_fw/include/commstructs.h b/esp32_fw/include/commstructs.h index b9b6a5d6..8afb0a75 100644 --- a/esp32_fw/include/commstructs.h +++ b/esp32_fw/include/commstructs.h @@ -27,6 +27,7 @@ struct AvailDataReq { uint8_t softVer; uint8_t hwType; uint8_t protoVer; + //uint8_t buttonState; } __packed; struct espAvailDataReq { diff --git a/esp32_fw/src/newproto.cpp b/esp32_fw/src/newproto.cpp index 44900621..00f130f0 100644 --- a/esp32_fw/src/newproto.cpp +++ b/esp32_fw/src/newproto.cpp @@ -147,7 +147,7 @@ void processDataReq(struct espAvailDataReq* eadr) { uint8_t src[8]; // *((uint64_t*)src) = swap64(*((uint64_t*)adr->)); sprintf(buffer, "src[7], eadr->src[6], eadr->src[5], eadr->src[4], eadr->src[3], eadr->src[2], eadr->src[1], eadr->src[0]); - // sprintf(buffer, "softVer, adr->batteryMv); + sprintf(buffer, "adr->protoVer); wsString((String)buffer); Serial.print(buffer); } diff --git a/tag_fw/fw29.bin b/tag_fw/fw29.bin index d90d2501e1c20a0f69cce0de86cdad32738caa62..60dda2ecc08db7bec02ac1ae751475ec272857df 100644 GIT binary patch delta 6918 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 diff --git a/tag_fw/syncedproto.c b/tag_fw/syncedproto.c index 10a43b93..0e571f88 100644 --- a/tag_fw/syncedproto.c +++ b/tag_fw/syncedproto.c @@ -68,6 +68,7 @@ struct AvailDataReq { uint8_t softVer; uint8_t hwType; uint8_t protoVer; + //uint8_t buttonState; } __packed; #define DATATYPE_NOUPDATE 0 @@ -252,8 +253,36 @@ void initAfterWake() { void doSleep(uint32_t __xdata t) { if(t>1000)pr("s=%lu\n ", t / 1000); powerPortsDownForSleep(); + + //Button setup on TEST pin 1.0 (input pullup) + uint8_t tmp_P1FUNC = P1FUNC; + uint8_t tmp_P1DIR = P1DIR; + uint8_t tmp_P1PULL = P1PULL; + uint8_t tmp_P1LVLSEL = P1LVLSEL; + + P1FUNC &=~ (1 << 0); + P1DIR |= (1 << 0); + P1PULL |= (1 << 0); + + P1LVLSEL |= (1 << 0); + P1CHSTA &=~ (1 << 0); + P0INTEN = 0; + P1INTEN = (1 << 0); + P2INTEN = 0; + P1CHSTA &=~ (1 << 0); + // sleepy sleepForMsec(t); + + P0INTEN = 0; + P1INTEN = 0; + P2INTEN = 0; + + P1FUNC = tmp_P1FUNC; + P1DIR = tmp_P1DIR; + P1PULL = tmp_P1PULL; + P1LVLSEL = tmp_P1LVLSEL; + initAfterWake(); } uint16_t getNextSleep() { @@ -295,6 +324,11 @@ void sendAvailDataReq() { txframe->srcPan = 0x4447; // TODO: send some meaningful data availreq->softVer = 1; + if (P1CHSTA && (1 << 0)) { + availreq->protoVer = 1; //buttonState + pr("button pressed\n"); + P1CHSTA &=~ (1 << 0); + } addCRC(availreq, sizeof(struct AvailDataReq)); commsTxNoCpy(outBuffer); } @@ -897,6 +931,9 @@ void mainProtocolLoop(void) { screenSleep(); eepromDeepPowerDown(); initRadio(); + + P1CHSTA &=~ (1 << 0); + // drawPartial(); // i2ctest(); // doSleep(10000); From 92acb744fa5b34aca9abc810551b8e4144208136 Mon Sep 17 00:00:00 2001 From: Nic Limper Date: Fri, 27 Jan 2023 15:52:55 +0100 Subject: [PATCH 02/10] bugfix on added button --- esp32_fw/src/newproto.cpp | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/esp32_fw/src/newproto.cpp b/esp32_fw/src/newproto.cpp index 00f130f0..fb194825 100644 --- a/esp32_fw/src/newproto.cpp +++ b/esp32_fw/src/newproto.cpp @@ -145,9 +145,7 @@ void processXferComplete(struct espXferComplete* xfc) { void processDataReq(struct espAvailDataReq* eadr) { char buffer[64]; uint8_t src[8]; - // *((uint64_t*)src) = swap64(*((uint64_t*)adr->)); - sprintf(buffer, "src[7], eadr->src[6], eadr->src[5], eadr->src[4], eadr->src[3], eadr->src[2], eadr->src[1], eadr->src[0]); - sprintf(buffer, "adr->protoVer); + sprintf(buffer, "src[7], eadr->src[6], eadr->src[5], eadr->src[4], eadr->src[3], eadr->src[2], eadr->src[1], eadr->src[0], eadr->adr.protoVer); wsString((String)buffer); Serial.print(buffer); } From f07240e3c3056bc4eca398853eeb953097d2d7fb Mon Sep 17 00:00:00 2001 From: Nic Limper Date: Fri, 27 Jan 2023 20:19:40 +0100 Subject: [PATCH 03/10] small fixes small fixes to be also compatible for compiling in Windows --- ap_fw/cpu/8051/make.mk | 2 +- ap_fw/make.bat | 14 ++++++++++++++ ap_fw/makeit.exe | Bin 0 -> 219662 bytes esp32_fw/src/main.cpp | 2 +- 4 files changed, 16 insertions(+), 2 deletions(-) create mode 100644 ap_fw/make.bat create mode 100644 ap_fw/makeit.exe diff --git a/ap_fw/cpu/8051/make.mk b/ap_fw/cpu/8051/make.mk index 60d739b0..837d8929 100644 --- a/ap_fw/cpu/8051/make.mk +++ b/ap_fw/cpu/8051/make.mk @@ -2,7 +2,7 @@ FLAGS += -Icpu/8051 FLAGS += -mmcs51 --std-sdcc2x --opt-code-size --peep-file cpu/8051/peep.def --fomit-frame-pointer SOURCES += cpu/8051/asmUtil.c -CC = /usr/local/bin/sdcc +CC = sdcc TARGETS = main.ihx main.bin OBJFILEEXT = rel diff --git a/ap_fw/make.bat b/ap_fw/make.bat new file mode 100644 index 00000000..8f656d19 --- /dev/null +++ b/ap_fw/make.bat @@ -0,0 +1,14 @@ +@echo off +makeit clean +makeit +del /s *.asm +del /s *.lst +del /s *.rst +del /s *.sym +del /s *.map +del /s *.mem +del /s *.ihx +del /s *.adb +del /s *.rel +del /s *.omf + diff --git a/ap_fw/makeit.exe b/ap_fw/makeit.exe new file mode 100644 index 0000000000000000000000000000000000000000..4201fb403ac4884fd5db41f69d4ab4ddc5d7e269 GIT binary patch literal 219662 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 literal 0 HcmV?d00001 diff --git a/esp32_fw/src/main.cpp b/esp32_fw/src/main.cpp index b800454a..efe79a2d 100644 --- a/esp32_fw/src/main.cpp +++ b/esp32_fw/src/main.cpp @@ -1,6 +1,6 @@ #include #include -#include +#include #include #include "flasher.h" From 62fc61652e51dd231148a5babb1d81afa39cbe9f Mon Sep 17 00:00:00 2001 From: Nic Limper Date: Fri, 27 Jan 2023 23:19:53 +0100 Subject: [PATCH 04/10] button fixes added buttonState in struct, #define HAS_BUTTON to enable listening to the button state. --- ap_fw/main.c | 2 +- esp32_fw/include/commstructs.h | 2 +- esp32_fw/src/newproto.cpp | 2 +- tag_fw/syncedproto.c | 27 +++++++++------------------ 4 files changed, 12 insertions(+), 21 deletions(-) diff --git a/ap_fw/main.c b/ap_fw/main.c index d5149570..2d3453c6 100644 --- a/ap_fw/main.c +++ b/ap_fw/main.c @@ -60,7 +60,7 @@ struct AvailDataReq { uint8_t softVer; uint8_t hwType; uint8_t protoVer; - //uint8_t buttonState; + uint8_t buttonState; } __packed; #define DATATYPE_NOUPDATE 0 diff --git a/esp32_fw/include/commstructs.h b/esp32_fw/include/commstructs.h index 8afb0a75..bf1f2a24 100644 --- a/esp32_fw/include/commstructs.h +++ b/esp32_fw/include/commstructs.h @@ -27,7 +27,7 @@ struct AvailDataReq { uint8_t softVer; uint8_t hwType; uint8_t protoVer; - //uint8_t buttonState; + uint8_t buttonState; } __packed; struct espAvailDataReq { diff --git a/esp32_fw/src/newproto.cpp b/esp32_fw/src/newproto.cpp index fb194825..a323b133 100644 --- a/esp32_fw/src/newproto.cpp +++ b/esp32_fw/src/newproto.cpp @@ -145,7 +145,7 @@ void processXferComplete(struct espXferComplete* xfc) { void processDataReq(struct espAvailDataReq* eadr) { char buffer[64]; uint8_t src[8]; - sprintf(buffer, "src[7], eadr->src[6], eadr->src[5], eadr->src[4], eadr->src[3], eadr->src[2], eadr->src[1], eadr->src[0], eadr->adr.protoVer); + sprintf(buffer, "src[7], eadr->src[6], eadr->src[5], eadr->src[4], eadr->src[3], eadr->src[2], eadr->src[1], eadr->src[0], eadr->adr.buttonState); wsString((String)buffer); Serial.print(buffer); } diff --git a/tag_fw/syncedproto.c b/tag_fw/syncedproto.c index 0e571f88..56e23fd1 100644 --- a/tag_fw/syncedproto.c +++ b/tag_fw/syncedproto.c @@ -68,7 +68,7 @@ struct AvailDataReq { uint8_t softVer; uint8_t hwType; uint8_t protoVer; - //uint8_t buttonState; + uint8_t buttonState; } __packed; #define DATATYPE_NOUPDATE 0 @@ -160,6 +160,9 @@ uint8_t __xdata seq = 0; #define DATA_REQ_MAX_ATTEMPTS 14 // How many attempts (at most) we should do to get something back from the AP #define POWER_SAVING_SMOOTHING 8 // How many samples we should use to smooth the data request interval #define MINIMUM_INTERVAL 45 // IMPORTANT: Minimum interval for check-in; this determines overal battery life! + +#define HAS_BUTTON // uncomment to enable reading a push button (connect between 'TEST' en 'GND' on the tag, along with a 100nF capacitor in parallel). + uint16_t __xdata dataReqAttemptArr[POWER_SAVING_SMOOTHING] = {0}; // Holds the amount of attempts required per data_req/check-in uint8_t __xdata dataReqAttemptArrayIndex = 0; uint8_t __xdata dataReqLastAttempt = 0; @@ -254,34 +257,22 @@ void doSleep(uint32_t __xdata t) { if(t>1000)pr("s=%lu\n ", t / 1000); powerPortsDownForSleep(); +#ifdef HAS_BUTTON //Button setup on TEST pin 1.0 (input pullup) - uint8_t tmp_P1FUNC = P1FUNC; - uint8_t tmp_P1DIR = P1DIR; - uint8_t tmp_P1PULL = P1PULL; - uint8_t tmp_P1LVLSEL = P1LVLSEL; - P1FUNC &=~ (1 << 0); P1DIR |= (1 << 0); P1PULL |= (1 << 0); - P1LVLSEL |= (1 << 0); - P1CHSTA &=~ (1 << 0); - P0INTEN = 0; P1INTEN = (1 << 0); - P2INTEN = 0; P1CHSTA &=~ (1 << 0); +#endif // sleepy sleepForMsec(t); - P0INTEN = 0; +#ifdef HAS_BUTTON P1INTEN = 0; - P2INTEN = 0; - - P1FUNC = tmp_P1FUNC; - P1DIR = tmp_P1DIR; - P1PULL = tmp_P1PULL; - P1LVLSEL = tmp_P1LVLSEL; +#endif initAfterWake(); } @@ -325,7 +316,7 @@ void sendAvailDataReq() { // TODO: send some meaningful data availreq->softVer = 1; if (P1CHSTA && (1 << 0)) { - availreq->protoVer = 1; //buttonState + availreq->buttonState = 1; pr("button pressed\n"); P1CHSTA &=~ (1 << 0); } From 4f1dbc1fa56e54f46959094e8f9b8661997d4e2d Mon Sep 17 00:00:00 2001 From: Nic Limper Date: Fri, 27 Jan 2023 23:25:04 +0100 Subject: [PATCH 05/10] local config changes --- esp32_fw/include/settings.h | 20 ++++++++------------ esp32_fw/platformio.ini | 11 +++++------ tag_fw/make.bat | 14 ++++++++++++++ 3 files changed, 27 insertions(+), 18 deletions(-) create mode 100644 tag_fw/make.bat diff --git a/esp32_fw/include/settings.h b/esp32_fw/include/settings.h index 45b37172..279d774a 100644 --- a/esp32_fw/include/settings.h +++ b/esp32_fw/include/settings.h @@ -28,19 +28,15 @@ // flasher options #define CUSTOM_MAC_HDR 0x0000 -// connections to the tag -//#define RXD1 16 //was 16 - 13 -//#define TXD1 17 // was 17 - 12 +#define RXD1 16 +#define TXD1 17 -#define RXD1 13 // 1st -#define TXD1 12 // 2nd - -#define ZBS_SS 21 +#define ZBS_SS 5 #define ZBS_CLK 18 -#define ZBS_MoSi 22 +#define ZBS_MoSi 23 #define ZBS_MiSo 19 -#define ZBS_Reset 5 -#define ZBS_POWER1 15 -#define ZBS_POWER2 2 +#define ZBS_Reset 2 +#define ZBS_POWER1 13 +#define ZBS_POWER2 15 -#define MAX_WRITE_ATTEMPTS 5 \ No newline at end of file +#define MAX_WRITE_ATTEMPTS 5 diff --git a/esp32_fw/platformio.ini b/esp32_fw/platformio.ini index 1e540fb1..c22487e0 100644 --- a/esp32_fw/platformio.ini +++ b/esp32_fw/platformio.ini @@ -8,20 +8,19 @@ ; Please visit documentation for the other options and examples ; https://docs.platformio.org/page/projectconf.html -[env:esp32cam] +[env:lolin32_lite] platform = espressif32 -board = esp32cam +board = esp32dev framework = arduino -;board_build.partitions = min_spiffs.csv board_build.partitions = no_ota.csv platform_packages = monitor_filters = esp32_exception_decoder monitor_speed = 115200 board_build.f_cpu = 240000000L +board_build.filesystem = littlefs lib_deps = https://github.com/me-no-dev/ESPAsyncWebServer https://github.com/tzapu/WiFiManager.git#feature_asyncwebserver bblanchon/ArduinoJson - -upload_port = COM12 -monitor_port = COM12 \ No newline at end of file +upload_port = COM5 +monitor_port = COM5 diff --git a/tag_fw/make.bat b/tag_fw/make.bat new file mode 100644 index 00000000..8f656d19 --- /dev/null +++ b/tag_fw/make.bat @@ -0,0 +1,14 @@ +@echo off +makeit clean +makeit +del /s *.asm +del /s *.lst +del /s *.rst +del /s *.sym +del /s *.map +del /s *.mem +del /s *.ihx +del /s *.adb +del /s *.rel +del /s *.omf + From 1d24b563d76caccd2c49925a129acd7e2498f1f5 Mon Sep 17 00:00:00 2001 From: Nic Limper Date: Sat, 28 Jan 2023 19:16:30 +0100 Subject: [PATCH 06/10] added image handling - bmp2grays to convert 24 bits BMP to 2 bits - spr2grays to create image using tft_espi library --- esp32_fw/data/calibrib50.vlw | Bin 0 -> 22807 bytes esp32_fw/data/calibrib62.vlw | Bin 0 -> 34393 bytes esp32_fw/include/makeimage.h | 32 +++ esp32_fw/platformio.ini | 1 + esp32_fw/src/main.cpp | 2 + esp32_fw/src/makeimage.cpp | 428 +++++++++++++++++++++++++++++++++++ 6 files changed, 463 insertions(+) create mode 100644 esp32_fw/data/calibrib50.vlw create mode 100644 esp32_fw/data/calibrib62.vlw create mode 100644 esp32_fw/include/makeimage.h create mode 100644 esp32_fw/src/makeimage.cpp diff --git a/esp32_fw/data/calibrib50.vlw b/esp32_fw/data/calibrib50.vlw new file mode 100644 index 0000000000000000000000000000000000000000..6c0b0dd1fd3e197c8ce9193855862b4e90c5988d GIT binary patch literal 22807 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 U{_O4do?ZUt-RJL=_v7&X51ljV8~^|S literal 0 HcmV?d00001 diff --git a/esp32_fw/data/calibrib62.vlw b/esp32_fw/data/calibrib62.vlw new file mode 100644 index 0000000000000000000000000000000000000000..97ea7ad38cf5cfd10b09571014ee5c99229cf9d4 GIT binary patch literal 34393 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 literal 0 HcmV?d00001 diff --git a/esp32_fw/include/makeimage.h b/esp32_fw/include/makeimage.h new file mode 100644 index 00000000..ff04e87d --- /dev/null +++ b/esp32_fw/include/makeimage.h @@ -0,0 +1,32 @@ +#include +#include + +struct BitmapFileHeader { + uint8_t sig[2]; + uint32_t fileSz; + uint8_t rfu[4]; + uint32_t dataOfst; + uint32_t headerSz; //40 + int32_t width; + int32_t height; + uint16_t colorplanes; //must be one + uint16_t bpp; + uint32_t compression; + uint32_t dataLen; //may be 0 + uint32_t pixelsPerMeterX; + uint32_t pixelsPerMeterY; + uint32_t numColors; //if zero, assume 2^bpp + uint32_t numImportantColors; + +} __attribute__((packed)); + +enum EinkClut { + EinkClutTwoBlacks = 0, + EinkClutTwoBlacksAndRed, + EinkClutFourBlacks, + EinkClutThreeBlacksAndRed, +}; + +void tftinit(); +void spr2grays(TFT_eSprite &spr, long w, long h, String fileout); +void bmp2grays(String filein,String fileout); diff --git a/esp32_fw/platformio.ini b/esp32_fw/platformio.ini index c22487e0..4ffae9cb 100644 --- a/esp32_fw/platformio.ini +++ b/esp32_fw/platformio.ini @@ -22,5 +22,6 @@ lib_deps = https://github.com/me-no-dev/ESPAsyncWebServer https://github.com/tzapu/WiFiManager.git#feature_asyncwebserver bblanchon/ArduinoJson + bodmer/TFT_eSPI upload_port = COM5 monitor_port = COM5 diff --git a/esp32_fw/src/main.cpp b/esp32_fw/src/main.cpp index efe79a2d..89f8bbc8 100644 --- a/esp32_fw/src/main.cpp +++ b/esp32_fw/src/main.cpp @@ -8,6 +8,7 @@ #include "serial.h" #include "soc/rtc_wdt.h" #include "web.h" +#include "makeimage.h" void freeHeapTask(void* parameter) { while (1) { @@ -20,6 +21,7 @@ void setup() { Serial.begin(115200); Serial.print(">\n"); init_web(); + tftinit(); long timezone = 2; byte daysavetime = 1; diff --git a/esp32_fw/src/makeimage.cpp b/esp32_fw/src/makeimage.cpp new file mode 100644 index 00000000..28de9339 --- /dev/null +++ b/esp32_fw/src/makeimage.cpp @@ -0,0 +1,428 @@ +#include +#include +#include +#include +#include + +void tftinit() { + TFT_eSPI tft = TFT_eSPI(); + TFT_eSprite spr = TFT_eSprite(&tft); + + LittleFS.begin(); + + long w = 296, h = 128; // mag staand of liggend + spr.createSprite(w, h); + spr.setColorDepth(8); + spr.fillSprite(TFT_WHITE); + spr.setTextDatum(TC_DATUM); + spr.loadFont("calibrib62", LittleFS); + spr.setTextColor(TFT_RED, TFT_WHITE); + spr.drawString("zondag", w / 2, 10); + spr.loadFont("calibrib50", LittleFS); + spr.setTextColor(TFT_BLACK, TFT_WHITE); + spr.drawString("28 januari", w / 2, 73); + spr.unloadFont(); + + spr2grays(spr, w, h, "/testspr3.bmp"); + + spr.deleteSprite(); + // bmp2grays("/test.bmp", "/testgrays3.bmp"); +} + +static uint32_t repackPackedVals(uint32_t val, uint32_t pixelsPerPackedUnit, uint32_t packedMultiplyVal) { + uint32_t ret = 0, i; + for (i = 0; i < pixelsPerPackedUnit; i++) { + ret = ret * packedMultiplyVal + val % packedMultiplyVal; + val /= packedMultiplyVal; + } + return ret; +} + +void spr2grays(TFT_eSprite &spr, long w, long h, String fileout) { + // based on bmp2grays function by Dmitry.GR + + Serial.println("start writing BMP"); + long t = millis(); + LittleFS.begin(); + + fs::File f_out = LittleFS.open(fileout, "w"); + + uint32_t c, rowBytesOut, rowBytesIn, outBpp, i, numRows, pixelsPerPackedUnit = 1, packedMultiplyVal = 0x01000000, packedOutBpp = 0; + uint32_t numGrays, extraColor = 0; + struct BitmapFileHeader hdr; + memset(&hdr, 0, sizeof(hdr)); + enum EinkClut clutType; + uint8_t clut[256][3]; + bool dither = false, rotated = false; + int skipBytes; + + clutType = EinkClutTwoBlacksAndRed; + + if (w > h) { + hdr.width = h; + hdr.height = w; + rotated = true; + } else { + hdr.width = w; + hdr.height = h; + } + hdr.bpp = 24; + hdr.sig[0] = 'B'; + hdr.sig[1] = 'M'; + hdr.colorplanes = 1; + + switch (clutType) { + case EinkClutTwoBlacks: + numGrays = 2; + outBpp = 1; + break; + + case EinkClutTwoBlacksAndRed: + extraColor = 0xff0000; + numGrays = 2; + outBpp = 2; + break; + + case EinkClutFourBlacks: + numGrays = 4; + outBpp = 2; + break; + + case EinkClutThreeBlacksAndRed: + numGrays = 3; + extraColor = 0xff0000; + outBpp = 2; + break; + } + + packedOutBpp = outBpp; + + rowBytesIn = (hdr.width * hdr.bpp + 31) / 32 * 4; + rowBytesOut = ((hdr.width + pixelsPerPackedUnit - 1) / pixelsPerPackedUnit) * packedOutBpp; + rowBytesOut = (rowBytesOut + 31) / 32 * 4; + + numRows = hdr.height < 0 ? -hdr.height : hdr.height; + hdr.bpp = outBpp; + hdr.numColors = 1 << outBpp; + hdr.numImportantColors = 1 << outBpp; + hdr.dataOfst = sizeof(struct BitmapFileHeader) + 4 * hdr.numColors; + hdr.dataLen = numRows * rowBytesOut; + hdr.fileSz = hdr.dataOfst + hdr.dataLen; + hdr.headerSz = 40; + hdr.compression = 0; + + f_out.write((uint8_t *)&hdr, sizeof(hdr)); + + // emit & record grey clut entries + for (i = 0; i < numGrays; i++) { + uint32_t val = 255 * i / (numGrays - 1); + + f_out.write(val); + f_out.write(val); + f_out.write(val); + f_out.write(val); + + clut[i][0] = val; + clut[i][1] = val; + clut[i][2] = val; + } + + if (extraColor) { + f_out.write((extraColor >> 0) & 0xff); // B + f_out.write((extraColor >> 8) & 0xff); // G + f_out.write((extraColor >> 16) & 0xff); // R + f_out.write(0x00); // A + + clut[i][0] = (extraColor >> 0) & 0xff; + clut[i][1] = (extraColor >> 8) & 0xff; + clut[i][2] = (extraColor >> 16) & 0xff; + } + + // pad clut to size + for (i = numGrays + (extraColor ? 1 : 0); i < hdr.numColors; i++) { + f_out.write(0x00); + f_out.write(0x00); + f_out.write(0x00); + f_out.write(0x00); + } + + while (numRows--) { + uint32_t pixelValsPackedSoFar = 0, numPixelsPackedSoFar = 0, valSoFar = 0, bytesIn = 0, bytesOut = 0, bitsSoFar = 0; + + for (c = 0; c < hdr.width; c++, bytesIn += 3) { + int64_t bestDist = 0x7fffffffffffffffll; + uint8_t bestIdx = 0; + int32_t ditherFudge = 0; + uint16_t color565; + if (rotated) { + color565 = spr.readPixel(hdr.height - 1 - numRows, c); + } else { + color565 = spr.readPixel(c, numRows); + } + + uint8_t red = ((color565 >> 11) & 0x1F) * 8; + uint8_t green = ((color565 >> 5) & 0x3F) * 4; + uint8_t blue = (color565 & 0x1F) * 8; + + if (dither) + ditherFudge = (rand() % 255 - 127) / (int)numGrays; + + for (i = 0; i < hdr.numColors; i++) { + int64_t dist = 0; + + dist += (blue - clut[i][0] + ditherFudge) * (blue - clut[i][0] + ditherFudge) * 4750ll; + dist += (green - clut[i][1] + ditherFudge) * (green - clut[i][1] + ditherFudge) * 47055ll; + dist += (red - clut[i][2] + ditherFudge) * (red - clut[i][2] + ditherFudge) * 13988ll; + + if (dist < bestDist) { + bestDist = dist; + bestIdx = i; + } + } + + // pack pixels as needed + pixelValsPackedSoFar = pixelValsPackedSoFar * packedMultiplyVal + bestIdx; + if (++numPixelsPackedSoFar != pixelsPerPackedUnit) + continue; + + numPixelsPackedSoFar = 0; + + // it is easier to display when low val is first pixel. currently last pixel is low - reverse this + pixelValsPackedSoFar = repackPackedVals(pixelValsPackedSoFar, pixelsPerPackedUnit, packedMultiplyVal); + + valSoFar = (valSoFar << packedOutBpp) | pixelValsPackedSoFar; + pixelValsPackedSoFar = 0; + bitsSoFar += packedOutBpp; + + if (bitsSoFar >= 8) { + f_out.write(valSoFar >> (bitsSoFar -= 8)); + valSoFar &= (1 << bitsSoFar) - 1; + bytesOut++; + } + } + + // see if we have unfinished pixel packages to write + if (numPixelsPackedSoFar) { + while (numPixelsPackedSoFar++ != pixelsPerPackedUnit) + pixelValsPackedSoFar *= packedMultiplyVal; + + // it is easier to display when low val is first pixel. currently last pixel is low - reverse this + pixelValsPackedSoFar = repackPackedVals(pixelValsPackedSoFar, pixelsPerPackedUnit, packedMultiplyVal); + + valSoFar = (valSoFar << packedOutBpp) | pixelValsPackedSoFar; + pixelValsPackedSoFar = 0; + bitsSoFar += packedOutBpp; + + if (bitsSoFar >= 8) { + f_out.write(valSoFar >> (bitsSoFar -= 8)); + valSoFar &= (1 << bitsSoFar) - 1; + bytesOut++; + } + } + + if (bitsSoFar) { + valSoFar <<= 8 - bitsSoFar; // left-align it as is expected + f_out.write(valSoFar); + bytesOut++; + } + + while (bytesOut++ < rowBytesOut) + f_out.write(0); + } + f_out.close(); + Serial.println(millis() - t); + Serial.println("finished writing BMP"); +} + +void bmp2grays(String filein, String fileout) { + // based on bmp2grays function by Dmitry.GR + + Serial.println("start writing BMP2"); + long t = millis(); + LittleFS.begin(); + + fs::File f_in = LittleFS.open(filein, "r"); + fs::File f_out = LittleFS.open(fileout, "w"); + + uint32_t c, rowBytesOut, rowBytesIn, outBpp, i, numRows, pixelsPerPackedUnit = 1, packedMultiplyVal = 0x01000000, packedOutBpp = 0; + uint32_t numGrays, extraColor = 0; + struct BitmapFileHeader hdr; + enum EinkClut clutType; + uint8_t clut[256][3]; + bool dither = false; + int skipBytes; + + clutType = EinkClutTwoBlacksAndRed; + + f_in.read((uint8_t *)&hdr, sizeof(hdr)); + + if (hdr.sig[0] != 'B' || hdr.sig[1] != 'M' || hdr.headerSz < 40 || hdr.colorplanes != 1 || hdr.bpp != 24 || hdr.compression) { + Serial.println("BITMAP HEADER INVALID, use uncompressed 24 bits RGB"); + return; + } + + switch (clutType) { + case EinkClutTwoBlacks: + numGrays = 2; + outBpp = 1; + break; + + case EinkClutTwoBlacksAndRed: + extraColor = 0xff0000; + numGrays = 2; + outBpp = 2; + break; + + case EinkClutFourBlacks: + numGrays = 4; + outBpp = 2; + break; + + case EinkClutThreeBlacksAndRed: + numGrays = 3; + extraColor = 0xff0000; + outBpp = 2; + break; + } + + packedOutBpp = outBpp; + + skipBytes = hdr.dataOfst - sizeof(hdr); + if (skipBytes < 0) { + fprintf(stderr, "file header was too short!\n"); + exit(-1); + } + f_in.read(NULL, skipBytes); + + rowBytesIn = (hdr.width * hdr.bpp + 31) / 32 * 4; + rowBytesOut = ((hdr.width + pixelsPerPackedUnit - 1) / pixelsPerPackedUnit) * packedOutBpp; + rowBytesOut = (rowBytesOut + 31) / 32 * 4; + + numRows = hdr.height < 0 ? -hdr.height : hdr.height; + hdr.bpp = outBpp; + hdr.numColors = 1 << outBpp; + hdr.numImportantColors = 1 << outBpp; + hdr.dataOfst = sizeof(struct BitmapFileHeader) + 4 * hdr.numColors; + hdr.dataLen = numRows * rowBytesOut; + hdr.fileSz = hdr.dataOfst + hdr.dataLen; + hdr.headerSz = 40; + hdr.compression = 0; + + f_out.write((uint8_t *)&hdr, sizeof(hdr)); + + // emit & record grey clut entries + for (i = 0; i < numGrays; i++) { + uint32_t val = 255 * i / (numGrays - 1); + + f_out.write(val); + f_out.write(val); + f_out.write(val); + f_out.write(val); + + clut[i][0] = val; + clut[i][1] = val; + clut[i][2] = val; + } + + // if there is a color CLUT entry, emit that + if (extraColor) { + f_out.write((extraColor >> 0) & 0xff); // B + f_out.write((extraColor >> 8) & 0xff); // G + f_out.write((extraColor >> 16) & 0xff); // R + f_out.write(0x00); // A + + clut[i][0] = (extraColor >> 0) & 0xff; + clut[i][1] = (extraColor >> 8) & 0xff; + clut[i][2] = (extraColor >> 16) & 0xff; + } + + // pad clut to size + for (i = numGrays + (extraColor ? 1 : 0); i < hdr.numColors; i++) { + f_out.write(0x00); + f_out.write(0x00); + f_out.write(0x00); + f_out.write(0x00); + } + + while (numRows--) { + uint32_t pixelValsPackedSoFar = 0, numPixelsPackedSoFar = 0, valSoFar = 0, bytesIn = 0, bytesOut = 0, bitsSoFar = 0; + + for (c = 0; c < hdr.width; c++, bytesIn += 3) { + int64_t bestDist = 0x7fffffffffffffffll; + uint8_t rgb[3], bestIdx = 0; + int32_t ditherFudge = 0; + + f_in.read(rgb, sizeof(rgb)); + + if (dither) + ditherFudge = (rand() % 255 - 127) / (int)numGrays; + + for (i = 0; i < hdr.numColors; i++) { + int64_t dist = 0; + + dist += (rgb[0] - clut[i][0] + ditherFudge) * (rgb[0] - clut[i][0] + ditherFudge) * 4750ll; + dist += (rgb[1] - clut[i][1] + ditherFudge) * (rgb[1] - clut[i][1] + ditherFudge) * 47055ll; + dist += (rgb[2] - clut[i][2] + ditherFudge) * (rgb[2] - clut[i][2] + ditherFudge) * 13988ll; + + if (dist < bestDist) { + bestDist = dist; + bestIdx = i; + } + } + + // pack pixels as needed + pixelValsPackedSoFar = pixelValsPackedSoFar * packedMultiplyVal + bestIdx; + if (++numPixelsPackedSoFar != pixelsPerPackedUnit) + continue; + + numPixelsPackedSoFar = 0; + + // it is easier to display when low val is first pixel. currently last pixel is low - reverse this + pixelValsPackedSoFar = repackPackedVals(pixelValsPackedSoFar, pixelsPerPackedUnit, packedMultiplyVal); + + valSoFar = (valSoFar << packedOutBpp) | pixelValsPackedSoFar; + pixelValsPackedSoFar = 0; + bitsSoFar += packedOutBpp; + + if (bitsSoFar >= 8) { + f_out.write(valSoFar >> (bitsSoFar -= 8)); + valSoFar &= (1 << bitsSoFar) - 1; + bytesOut++; + } + } + + // see if we have unfinished pixel packages to write + if (numPixelsPackedSoFar) { + while (numPixelsPackedSoFar++ != pixelsPerPackedUnit) + pixelValsPackedSoFar *= packedMultiplyVal; + + // it is easier to display when low val is first pixel. currently last pixel is low - reverse this + pixelValsPackedSoFar = repackPackedVals(pixelValsPackedSoFar, pixelsPerPackedUnit, packedMultiplyVal); + + valSoFar = (valSoFar << packedOutBpp) | pixelValsPackedSoFar; + pixelValsPackedSoFar = 0; + bitsSoFar += packedOutBpp; + + if (bitsSoFar >= 8) { + f_out.write(valSoFar >> (bitsSoFar -= 8)); + valSoFar &= (1 << bitsSoFar) - 1; + bytesOut++; + } + } + + if (bitsSoFar) { + valSoFar <<= 8 - bitsSoFar; // left-align it as is expected + f_out.write(valSoFar); + bytesOut++; + } + + while (bytesIn++ < rowBytesIn) + f_in.read(NULL, 1); + while (bytesOut++ < rowBytesOut) + f_out.write(0); + } + f_in.close(); + f_out.close(); + Serial.println(millis() - t); + Serial.println("finished writing BMP2"); +} \ No newline at end of file From 2fbb77bc341b944aefe6b42ede1817f4ae881c0d Mon Sep 17 00:00:00 2001 From: Nic Limper Date: Sun, 29 Jan 2023 22:39:38 +0100 Subject: [PATCH 07/10] jpeg2bmp, bmp2grays, refactor website - new webpage to manage tags (work in progress), gets rid of jquery ;-) - built in jpg and 24bpp bmp converter. the jpeg-converter auto-rotates the image, so uploading a 296x128px jpeg for a 2.9" tag is fine now. 24bpp bmp is also fine, but no autorotation (more complex, and imho unnecessary) - changed websockets communication to json - small fixes and cleanup --- esp32_fw/data/bmp24bpp-h.bmp | Bin 0 -> 113720 bytes esp32_fw/data/bmp24bpp-v.bmp | Bin 0 -> 113720 bytes esp32_fw/data/index.html | 127 ++++++++++++-------- esp32_fw/data/jpeg-h.jpg | Bin 0 -> 15239 bytes esp32_fw/data/jpeg-v.jpg | Bin 0 -> 16117 bytes esp32_fw/data/jquery.js | 6 - esp32_fw/data/main.css | 226 +++++++++++++++++------------------ esp32_fw/data/main.js | 147 ++++++++++++++++++++--- esp32_fw/include/makeimage.h | 4 +- esp32_fw/include/web.h | 3 + esp32_fw/platformio.ini | 1 + esp32_fw/src/main.cpp | 13 -- esp32_fw/src/makeimage.cpp | 31 ++++- esp32_fw/src/newproto.cpp | 64 +++++++++- esp32_fw/src/web.cpp | 34 +++++- 15 files changed, 438 insertions(+), 218 deletions(-) create mode 100644 esp32_fw/data/bmp24bpp-h.bmp create mode 100644 esp32_fw/data/bmp24bpp-v.bmp create mode 100644 esp32_fw/data/jpeg-h.jpg create mode 100644 esp32_fw/data/jpeg-v.jpg delete mode 100644 esp32_fw/data/jquery.js diff --git a/esp32_fw/data/bmp24bpp-h.bmp b/esp32_fw/data/bmp24bpp-h.bmp new file mode 100644 index 0000000000000000000000000000000000000000..6ba63e1919664765e4bfc1ea3185b5fed44e78b8 GIT binary patch literal 113720 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 H0*}Z4zW_R| literal 0 HcmV?d00001 diff --git a/esp32_fw/data/index.html b/esp32_fw/data/index.html index 8a65efa4..1bdff43b 100644 --- a/esp32_fw/data/index.html +++ b/esp32_fw/data/index.html @@ -1,66 +1,89 @@ + - - + + -Solum - alternative proto AP - + Solum - alternative proto AP + + -
- -
+
+ +
-
+
+
-
    +
    + +
    +
    + + +
    +
    +
    +

    + + +

    +

    + + min +

    +

    + +

    +
    +
    +

    + + +

    +

    + +

    +
    +
    +

    + +

    +
    +
    +
    + +
    +
    +
    +
    +
    +
    +
    + last: +
    +
    +
    +
    +
    +
    + +
    +

    logging

    +
      +
    +
    +
    -
    +
    + - - - -
    -
    - DST: - Filename: - Next check-in: min - -
    -
    - -
    -
    - DST: - Filename: - -
    -
    - -
    -
    - DST: - -
    -
    - -
    -
      -
    - -
    -
    - - -
    - - - - - - + + \ No newline at end of file diff --git a/esp32_fw/data/jpeg-h.jpg b/esp32_fw/data/jpeg-h.jpg new file mode 100644 index 0000000000000000000000000000000000000000..3d03dfd864ce2a235274d60151fba75d3984a1b9 GIT binary patch literal 15239 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 literal 0 HcmV?d00001 diff --git a/esp32_fw/data/jquery.js b/esp32_fw/data/jquery.js deleted file mode 100644 index ee381345..00000000 --- a/esp32_fw/data/jquery.js +++ /dev/null @@ -1,6 +0,0 @@ -/*! jQuery v2.0.3 | (c) 2005, 2013 jQuery Foundation, Inc. | jquery.org/license -//@ sourceMappingURL=jquery.min.map -*/ -(function(e,undefined){var t,n,r=typeof undefined,i=e.location,o=e.document,s=o.documentElement,a=e.jQuery,u=e.$,l={},c=[],p="2.0.3",f=c.concat,h=c.push,d=c.slice,g=c.indexOf,m=l.toString,y=l.hasOwnProperty,v=p.trim,x=function(e,n){return new x.fn.init(e,n,t)},b=/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source,w=/\S+/g,T=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/,C=/^<(\w+)\s*\/?>(?:<\/\1>|)$/,k=/^-ms-/,N=/-([\da-z])/gi,E=function(e,t){return t.toUpperCase()},S=function(){o.removeEventListener("DOMContentLoaded",S,!1),e.removeEventListener("load",S,!1),x.ready()};x.fn=x.prototype={jquery:p,constructor:x,init:function(e,t,n){var r,i;if(!e)return this;if("string"==typeof e){if(r="<"===e.charAt(0)&&">"===e.charAt(e.length-1)&&e.length>=3?[null,e,null]:T.exec(e),!r||!r[1]&&t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(r[1]){if(t=t instanceof x?t[0]:t,x.merge(this,x.parseHTML(r[1],t&&t.nodeType?t.ownerDocument||t:o,!0)),C.test(r[1])&&x.isPlainObject(t))for(r in t)x.isFunction(this[r])?this[r](t[r]):this.attr(r,t[r]);return this}return i=o.getElementById(r[2]),i&&i.parentNode&&(this.length=1,this[0]=i),this.context=o,this.selector=e,this}return e.nodeType?(this.context=this[0]=e,this.length=1,this):x.isFunction(e)?n.ready(e):(e.selector!==undefined&&(this.selector=e.selector,this.context=e.context),x.makeArray(e,this))},selector:"",length:0,toArray:function(){return d.call(this)},get:function(e){return null==e?this.toArray():0>e?this[this.length+e]:this[e]},pushStack:function(e){var t=x.merge(this.constructor(),e);return t.prevObject=this,t.context=this.context,t},each:function(e,t){return x.each(this,e,t)},ready:function(e){return x.ready.promise().done(e),this},slice:function(){return this.pushStack(d.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(e){var t=this.length,n=+e+(0>e?t:0);return this.pushStack(n>=0&&t>n?[this[n]]:[])},map:function(e){return this.pushStack(x.map(this,function(t,n){return e.call(t,n,t)}))},end:function(){return this.prevObject||this.constructor(null)},push:h,sort:[].sort,splice:[].splice},x.fn.init.prototype=x.fn,x.extend=x.fn.extend=function(){var e,t,n,r,i,o,s=arguments[0]||{},a=1,u=arguments.length,l=!1;for("boolean"==typeof s&&(l=s,s=arguments[1]||{},a=2),"object"==typeof s||x.isFunction(s)||(s={}),u===a&&(s=this,--a);u>a;a++)if(null!=(e=arguments[a]))for(t in e)n=s[t],r=e[t],s!==r&&(l&&r&&(x.isPlainObject(r)||(i=x.isArray(r)))?(i?(i=!1,o=n&&x.isArray(n)?n:[]):o=n&&x.isPlainObject(n)?n:{},s[t]=x.extend(l,o,r)):r!==undefined&&(s[t]=r));return s},x.extend({expando:"jQuery"+(p+Math.random()).replace(/\D/g,""),noConflict:function(t){return e.$===x&&(e.$=u),t&&e.jQuery===x&&(e.jQuery=a),x},isReady:!1,readyWait:1,holdReady:function(e){e?x.readyWait++:x.ready(!0)},ready:function(e){(e===!0?--x.readyWait:x.isReady)||(x.isReady=!0,e!==!0&&--x.readyWait>0||(n.resolveWith(o,[x]),x.fn.trigger&&x(o).trigger("ready").off("ready")))},isFunction:function(e){return"function"===x.type(e)},isArray:Array.isArray,isWindow:function(e){return null!=e&&e===e.window},isNumeric:function(e){return!isNaN(parseFloat(e))&&isFinite(e)},type:function(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?l[m.call(e)]||"object":typeof e},isPlainObject:function(e){if("object"!==x.type(e)||e.nodeType||x.isWindow(e))return!1;try{if(e.constructor&&!y.call(e.constructor.prototype,"isPrototypeOf"))return!1}catch(t){return!1}return!0},isEmptyObject:function(e){var t;for(t in e)return!1;return!0},error:function(e){throw Error(e)},parseHTML:function(e,t,n){if(!e||"string"!=typeof e)return null;"boolean"==typeof t&&(n=t,t=!1),t=t||o;var r=C.exec(e),i=!n&&[];return r?[t.createElement(r[1])]:(r=x.buildFragment([e],t,i),i&&x(i).remove(),x.merge([],r.childNodes))},parseJSON:JSON.parse,parseXML:function(e){var t,n;if(!e||"string"!=typeof e)return null;try{n=new DOMParser,t=n.parseFromString(e,"text/xml")}catch(r){t=undefined}return(!t||t.getElementsByTagName("parsererror").length)&&x.error("Invalid XML: "+e),t},noop:function(){},globalEval:function(e){var t,n=eval;e=x.trim(e),e&&(1===e.indexOf("use strict")?(t=o.createElement("script"),t.text=e,o.head.appendChild(t).parentNode.removeChild(t)):n(e))},camelCase:function(e){return e.replace(k,"ms-").replace(N,E)},nodeName:function(e,t){return e.nodeName&&e.nodeName.toLowerCase()===t.toLowerCase()},each:function(e,t,n){var r,i=0,o=e.length,s=j(e);if(n){if(s){for(;o>i;i++)if(r=t.apply(e[i],n),r===!1)break}else for(i in e)if(r=t.apply(e[i],n),r===!1)break}else if(s){for(;o>i;i++)if(r=t.call(e[i],i,e[i]),r===!1)break}else for(i in e)if(r=t.call(e[i],i,e[i]),r===!1)break;return e},trim:function(e){return null==e?"":v.call(e)},makeArray:function(e,t){var n=t||[];return null!=e&&(j(Object(e))?x.merge(n,"string"==typeof e?[e]:e):h.call(n,e)),n},inArray:function(e,t,n){return null==t?-1:g.call(t,e,n)},merge:function(e,t){var n=t.length,r=e.length,i=0;if("number"==typeof n)for(;n>i;i++)e[r++]=t[i];else while(t[i]!==undefined)e[r++]=t[i++];return e.length=r,e},grep:function(e,t,n){var r,i=[],o=0,s=e.length;for(n=!!n;s>o;o++)r=!!t(e[o],o),n!==r&&i.push(e[o]);return i},map:function(e,t,n){var r,i=0,o=e.length,s=j(e),a=[];if(s)for(;o>i;i++)r=t(e[i],i,n),null!=r&&(a[a.length]=r);else for(i in e)r=t(e[i],i,n),null!=r&&(a[a.length]=r);return f.apply([],a)},guid:1,proxy:function(e,t){var n,r,i;return"string"==typeof t&&(n=e[t],t=e,e=n),x.isFunction(e)?(r=d.call(arguments,2),i=function(){return e.apply(t||this,r.concat(d.call(arguments)))},i.guid=e.guid=e.guid||x.guid++,i):undefined},access:function(e,t,n,r,i,o,s){var a=0,u=e.length,l=null==n;if("object"===x.type(n)){i=!0;for(a in n)x.access(e,t,a,n[a],!0,o,s)}else if(r!==undefined&&(i=!0,x.isFunction(r)||(s=!0),l&&(s?(t.call(e,r),t=null):(l=t,t=function(e,t,n){return l.call(x(e),n)})),t))for(;u>a;a++)t(e[a],n,s?r:r.call(e[a],a,t(e[a],n)));return i?e:l?t.call(e):u?t(e[0],n):o},now:Date.now,swap:function(e,t,n,r){var i,o,s={};for(o in t)s[o]=e.style[o],e.style[o]=t[o];i=n.apply(e,r||[]);for(o in t)e.style[o]=s[o];return i}}),x.ready.promise=function(t){return n||(n=x.Deferred(),"complete"===o.readyState?setTimeout(x.ready):(o.addEventListener("DOMContentLoaded",S,!1),e.addEventListener("load",S,!1))),n.promise(t)},x.each("Boolean Number String Function Array Date RegExp Object Error".split(" "),function(e,t){l["[object "+t+"]"]=t.toLowerCase()});function j(e){var t=e.length,n=x.type(e);return x.isWindow(e)?!1:1===e.nodeType&&t?!0:"array"===n||"function"!==n&&(0===t||"number"==typeof t&&t>0&&t-1 in e)}t=x(o),function(e,undefined){var t,n,r,i,o,s,a,u,l,c,p,f,h,d,g,m,y,v="sizzle"+-new Date,b=e.document,w=0,T=0,C=st(),k=st(),N=st(),E=!1,S=function(e,t){return e===t?(E=!0,0):0},j=typeof undefined,D=1<<31,A={}.hasOwnProperty,L=[],q=L.pop,H=L.push,O=L.push,F=L.slice,P=L.indexOf||function(e){var t=0,n=this.length;for(;n>t;t++)if(this[t]===e)return t;return-1},R="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",M="[\\x20\\t\\r\\n\\f]",W="(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+",$=W.replace("w","w#"),B="\\["+M+"*("+W+")"+M+"*(?:([*^$|!~]?=)"+M+"*(?:(['\"])((?:\\\\.|[^\\\\])*?)\\3|("+$+")|)|)"+M+"*\\]",I=":("+W+")(?:\\(((['\"])((?:\\\\.|[^\\\\])*?)\\3|((?:\\\\.|[^\\\\()[\\]]|"+B.replace(3,8)+")*)|.*)\\)|)",z=RegExp("^"+M+"+|((?:^|[^\\\\])(?:\\\\.)*)"+M+"+$","g"),_=RegExp("^"+M+"*,"+M+"*"),X=RegExp("^"+M+"*([>+~]|"+M+")"+M+"*"),U=RegExp(M+"*[+~]"),Y=RegExp("="+M+"*([^\\]'\"]*)"+M+"*\\]","g"),V=RegExp(I),G=RegExp("^"+$+"$"),J={ID:RegExp("^#("+W+")"),CLASS:RegExp("^\\.("+W+")"),TAG:RegExp("^("+W.replace("w","w*")+")"),ATTR:RegExp("^"+B),PSEUDO:RegExp("^"+I),CHILD:RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+M+"*(even|odd|(([+-]|)(\\d*)n|)"+M+"*(?:([+-]|)"+M+"*(\\d+)|))"+M+"*\\)|)","i"),bool:RegExp("^(?:"+R+")$","i"),needsContext:RegExp("^"+M+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+M+"*((?:-\\d)?\\d*)"+M+"*\\)|)(?=[^-]|$)","i")},Q=/^[^{]+\{\s*\[native \w/,K=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,Z=/^(?:input|select|textarea|button)$/i,et=/^h\d$/i,tt=/'|\\/g,nt=RegExp("\\\\([\\da-f]{1,6}"+M+"?|("+M+")|.)","ig"),rt=function(e,t,n){var r="0x"+t-65536;return r!==r||n?t:0>r?String.fromCharCode(r+65536):String.fromCharCode(55296|r>>10,56320|1023&r)};try{O.apply(L=F.call(b.childNodes),b.childNodes),L[b.childNodes.length].nodeType}catch(it){O={apply:L.length?function(e,t){H.apply(e,F.call(t))}:function(e,t){var n=e.length,r=0;while(e[n++]=t[r++]);e.length=n-1}}}function ot(e,t,r,i){var o,s,a,u,l,f,g,m,x,w;if((t?t.ownerDocument||t:b)!==p&&c(t),t=t||p,r=r||[],!e||"string"!=typeof e)return r;if(1!==(u=t.nodeType)&&9!==u)return[];if(h&&!i){if(o=K.exec(e))if(a=o[1]){if(9===u){if(s=t.getElementById(a),!s||!s.parentNode)return r;if(s.id===a)return r.push(s),r}else if(t.ownerDocument&&(s=t.ownerDocument.getElementById(a))&&y(t,s)&&s.id===a)return r.push(s),r}else{if(o[2])return O.apply(r,t.getElementsByTagName(e)),r;if((a=o[3])&&n.getElementsByClassName&&t.getElementsByClassName)return O.apply(r,t.getElementsByClassName(a)),r}if(n.qsa&&(!d||!d.test(e))){if(m=g=v,x=t,w=9===u&&e,1===u&&"object"!==t.nodeName.toLowerCase()){f=gt(e),(g=t.getAttribute("id"))?m=g.replace(tt,"\\$&"):t.setAttribute("id",m),m="[id='"+m+"'] ",l=f.length;while(l--)f[l]=m+mt(f[l]);x=U.test(e)&&t.parentNode||t,w=f.join(",")}if(w)try{return O.apply(r,x.querySelectorAll(w)),r}catch(T){}finally{g||t.removeAttribute("id")}}}return kt(e.replace(z,"$1"),t,r,i)}function st(){var e=[];function t(n,r){return e.push(n+=" ")>i.cacheLength&&delete t[e.shift()],t[n]=r}return t}function at(e){return e[v]=!0,e}function ut(e){var t=p.createElement("div");try{return!!e(t)}catch(n){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function lt(e,t){var n=e.split("|"),r=e.length;while(r--)i.attrHandle[n[r]]=t}function ct(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&(~t.sourceIndex||D)-(~e.sourceIndex||D);if(r)return r;if(n)while(n=n.nextSibling)if(n===t)return-1;return e?1:-1}function pt(e){return function(t){var n=t.nodeName.toLowerCase();return"input"===n&&t.type===e}}function ft(e){return function(t){var n=t.nodeName.toLowerCase();return("input"===n||"button"===n)&&t.type===e}}function ht(e){return at(function(t){return t=+t,at(function(n,r){var i,o=e([],n.length,t),s=o.length;while(s--)n[i=o[s]]&&(n[i]=!(r[i]=n[i]))})})}s=ot.isXML=function(e){var t=e&&(e.ownerDocument||e).documentElement;return t?"HTML"!==t.nodeName:!1},n=ot.support={},c=ot.setDocument=function(e){var t=e?e.ownerDocument||e:b,r=t.defaultView;return t!==p&&9===t.nodeType&&t.documentElement?(p=t,f=t.documentElement,h=!s(t),r&&r.attachEvent&&r!==r.top&&r.attachEvent("onbeforeunload",function(){c()}),n.attributes=ut(function(e){return e.className="i",!e.getAttribute("className")}),n.getElementsByTagName=ut(function(e){return e.appendChild(t.createComment("")),!e.getElementsByTagName("*").length}),n.getElementsByClassName=ut(function(e){return e.innerHTML="
    ",e.firstChild.className="i",2===e.getElementsByClassName("i").length}),n.getById=ut(function(e){return f.appendChild(e).id=v,!t.getElementsByName||!t.getElementsByName(v).length}),n.getById?(i.find.ID=function(e,t){if(typeof t.getElementById!==j&&h){var n=t.getElementById(e);return n&&n.parentNode?[n]:[]}},i.filter.ID=function(e){var t=e.replace(nt,rt);return function(e){return e.getAttribute("id")===t}}):(delete i.find.ID,i.filter.ID=function(e){var t=e.replace(nt,rt);return function(e){var n=typeof e.getAttributeNode!==j&&e.getAttributeNode("id");return n&&n.value===t}}),i.find.TAG=n.getElementsByTagName?function(e,t){return typeof t.getElementsByTagName!==j?t.getElementsByTagName(e):undefined}:function(e,t){var n,r=[],i=0,o=t.getElementsByTagName(e);if("*"===e){while(n=o[i++])1===n.nodeType&&r.push(n);return r}return o},i.find.CLASS=n.getElementsByClassName&&function(e,t){return typeof t.getElementsByClassName!==j&&h?t.getElementsByClassName(e):undefined},g=[],d=[],(n.qsa=Q.test(t.querySelectorAll))&&(ut(function(e){e.innerHTML="",e.querySelectorAll("[selected]").length||d.push("\\["+M+"*(?:value|"+R+")"),e.querySelectorAll(":checked").length||d.push(":checked")}),ut(function(e){var n=t.createElement("input");n.setAttribute("type","hidden"),e.appendChild(n).setAttribute("t",""),e.querySelectorAll("[t^='']").length&&d.push("[*^$]="+M+"*(?:''|\"\")"),e.querySelectorAll(":enabled").length||d.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),d.push(",.*:")})),(n.matchesSelector=Q.test(m=f.webkitMatchesSelector||f.mozMatchesSelector||f.oMatchesSelector||f.msMatchesSelector))&&ut(function(e){n.disconnectedMatch=m.call(e,"div"),m.call(e,"[s!='']:x"),g.push("!=",I)}),d=d.length&&RegExp(d.join("|")),g=g.length&&RegExp(g.join("|")),y=Q.test(f.contains)||f.compareDocumentPosition?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)while(t=t.parentNode)if(t===e)return!0;return!1},S=f.compareDocumentPosition?function(e,r){if(e===r)return E=!0,0;var i=r.compareDocumentPosition&&e.compareDocumentPosition&&e.compareDocumentPosition(r);return i?1&i||!n.sortDetached&&r.compareDocumentPosition(e)===i?e===t||y(b,e)?-1:r===t||y(b,r)?1:l?P.call(l,e)-P.call(l,r):0:4&i?-1:1:e.compareDocumentPosition?-1:1}:function(e,n){var r,i=0,o=e.parentNode,s=n.parentNode,a=[e],u=[n];if(e===n)return E=!0,0;if(!o||!s)return e===t?-1:n===t?1:o?-1:s?1:l?P.call(l,e)-P.call(l,n):0;if(o===s)return ct(e,n);r=e;while(r=r.parentNode)a.unshift(r);r=n;while(r=r.parentNode)u.unshift(r);while(a[i]===u[i])i++;return i?ct(a[i],u[i]):a[i]===b?-1:u[i]===b?1:0},t):p},ot.matches=function(e,t){return ot(e,null,null,t)},ot.matchesSelector=function(e,t){if((e.ownerDocument||e)!==p&&c(e),t=t.replace(Y,"='$1']"),!(!n.matchesSelector||!h||g&&g.test(t)||d&&d.test(t)))try{var r=m.call(e,t);if(r||n.disconnectedMatch||e.document&&11!==e.document.nodeType)return r}catch(i){}return ot(t,p,null,[e]).length>0},ot.contains=function(e,t){return(e.ownerDocument||e)!==p&&c(e),y(e,t)},ot.attr=function(e,t){(e.ownerDocument||e)!==p&&c(e);var r=i.attrHandle[t.toLowerCase()],o=r&&A.call(i.attrHandle,t.toLowerCase())?r(e,t,!h):undefined;return o===undefined?n.attributes||!h?e.getAttribute(t):(o=e.getAttributeNode(t))&&o.specified?o.value:null:o},ot.error=function(e){throw Error("Syntax error, unrecognized expression: "+e)},ot.uniqueSort=function(e){var t,r=[],i=0,o=0;if(E=!n.detectDuplicates,l=!n.sortStable&&e.slice(0),e.sort(S),E){while(t=e[o++])t===e[o]&&(i=r.push(o));while(i--)e.splice(r[i],1)}return e},o=ot.getText=function(e){var t,n="",r=0,i=e.nodeType;if(i){if(1===i||9===i||11===i){if("string"==typeof e.textContent)return e.textContent;for(e=e.firstChild;e;e=e.nextSibling)n+=o(e)}else if(3===i||4===i)return e.nodeValue}else for(;t=e[r];r++)n+=o(t);return n},i=ot.selectors={cacheLength:50,createPseudo:at,match:J,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(nt,rt),e[3]=(e[4]||e[5]||"").replace(nt,rt),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||ot.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&ot.error(e[0]),e},PSEUDO:function(e){var t,n=!e[5]&&e[2];return J.CHILD.test(e[0])?null:(e[3]&&e[4]!==undefined?e[2]=e[4]:n&&V.test(n)&&(t=gt(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(nt,rt).toLowerCase();return"*"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=C[e+" "];return t||(t=RegExp("(^|"+M+")"+e+"("+M+"|$)"))&&C(e,function(e){return t.test("string"==typeof e.className&&e.className||typeof e.getAttribute!==j&&e.getAttribute("class")||"")})},ATTR:function(e,t,n){return function(r){var i=ot.attr(r,e);return null==i?"!="===t:t?(i+="","="===t?i===n:"!="===t?i!==n:"^="===t?n&&0===i.indexOf(n):"*="===t?n&&i.indexOf(n)>-1:"$="===t?n&&i.slice(-n.length)===n:"~="===t?(" "+i+" ").indexOf(n)>-1:"|="===t?i===n||i.slice(0,n.length+1)===n+"-":!1):!0}},CHILD:function(e,t,n,r,i){var o="nth"!==e.slice(0,3),s="last"!==e.slice(-4),a="of-type"===t;return 1===r&&0===i?function(e){return!!e.parentNode}:function(t,n,u){var l,c,p,f,h,d,g=o!==s?"nextSibling":"previousSibling",m=t.parentNode,y=a&&t.nodeName.toLowerCase(),x=!u&&!a;if(m){if(o){while(g){p=t;while(p=p[g])if(a?p.nodeName.toLowerCase()===y:1===p.nodeType)return!1;d=g="only"===e&&!d&&"nextSibling"}return!0}if(d=[s?m.firstChild:m.lastChild],s&&x){c=m[v]||(m[v]={}),l=c[e]||[],h=l[0]===w&&l[1],f=l[0]===w&&l[2],p=h&&m.childNodes[h];while(p=++h&&p&&p[g]||(f=h=0)||d.pop())if(1===p.nodeType&&++f&&p===t){c[e]=[w,h,f];break}}else if(x&&(l=(t[v]||(t[v]={}))[e])&&l[0]===w)f=l[1];else while(p=++h&&p&&p[g]||(f=h=0)||d.pop())if((a?p.nodeName.toLowerCase()===y:1===p.nodeType)&&++f&&(x&&((p[v]||(p[v]={}))[e]=[w,f]),p===t))break;return f-=i,f===r||0===f%r&&f/r>=0}}},PSEUDO:function(e,t){var n,r=i.pseudos[e]||i.setFilters[e.toLowerCase()]||ot.error("unsupported pseudo: "+e);return r[v]?r(t):r.length>1?(n=[e,e,"",t],i.setFilters.hasOwnProperty(e.toLowerCase())?at(function(e,n){var i,o=r(e,t),s=o.length;while(s--)i=P.call(e,o[s]),e[i]=!(n[i]=o[s])}):function(e){return r(e,0,n)}):r}},pseudos:{not:at(function(e){var t=[],n=[],r=a(e.replace(z,"$1"));return r[v]?at(function(e,t,n,i){var o,s=r(e,null,i,[]),a=e.length;while(a--)(o=s[a])&&(e[a]=!(t[a]=o))}):function(e,i,o){return t[0]=e,r(t,null,o,n),!n.pop()}}),has:at(function(e){return function(t){return ot(e,t).length>0}}),contains:at(function(e){return function(t){return(t.textContent||t.innerText||o(t)).indexOf(e)>-1}}),lang:at(function(e){return G.test(e||"")||ot.error("unsupported lang: "+e),e=e.replace(nt,rt).toLowerCase(),function(t){var n;do if(n=h?t.lang:t.getAttribute("xml:lang")||t.getAttribute("lang"))return n=n.toLowerCase(),n===e||0===n.indexOf(e+"-");while((t=t.parentNode)&&1===t.nodeType);return!1}}),target:function(t){var n=e.location&&e.location.hash;return n&&n.slice(1)===t.id},root:function(e){return e===f},focus:function(e){return e===p.activeElement&&(!p.hasFocus||p.hasFocus())&&!!(e.type||e.href||~e.tabIndex)},enabled:function(e){return e.disabled===!1},disabled:function(e){return e.disabled===!0},checked:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&!!e.checked||"option"===t&&!!e.selected},selected:function(e){return e.parentNode&&e.parentNode.selectedIndex,e.selected===!0},empty:function(e){for(e=e.firstChild;e;e=e.nextSibling)if(e.nodeName>"@"||3===e.nodeType||4===e.nodeType)return!1;return!0},parent:function(e){return!i.pseudos.empty(e)},header:function(e){return et.test(e.nodeName)},input:function(e){return Z.test(e.nodeName)},button:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&"button"===e.type||"button"===t},text:function(e){var t;return"input"===e.nodeName.toLowerCase()&&"text"===e.type&&(null==(t=e.getAttribute("type"))||t.toLowerCase()===e.type)},first:ht(function(){return[0]}),last:ht(function(e,t){return[t-1]}),eq:ht(function(e,t,n){return[0>n?n+t:n]}),even:ht(function(e,t){var n=0;for(;t>n;n+=2)e.push(n);return e}),odd:ht(function(e,t){var n=1;for(;t>n;n+=2)e.push(n);return e}),lt:ht(function(e,t,n){var r=0>n?n+t:n;for(;--r>=0;)e.push(r);return e}),gt:ht(function(e,t,n){var r=0>n?n+t:n;for(;t>++r;)e.push(r);return e})}},i.pseudos.nth=i.pseudos.eq;for(t in{radio:!0,checkbox:!0,file:!0,password:!0,image:!0})i.pseudos[t]=pt(t);for(t in{submit:!0,reset:!0})i.pseudos[t]=ft(t);function dt(){}dt.prototype=i.filters=i.pseudos,i.setFilters=new dt;function gt(e,t){var n,r,o,s,a,u,l,c=k[e+" "];if(c)return t?0:c.slice(0);a=e,u=[],l=i.preFilter;while(a){(!n||(r=_.exec(a)))&&(r&&(a=a.slice(r[0].length)||a),u.push(o=[])),n=!1,(r=X.exec(a))&&(n=r.shift(),o.push({value:n,type:r[0].replace(z," ")}),a=a.slice(n.length));for(s in i.filter)!(r=J[s].exec(a))||l[s]&&!(r=l[s](r))||(n=r.shift(),o.push({value:n,type:s,matches:r}),a=a.slice(n.length));if(!n)break}return t?a.length:a?ot.error(e):k(e,u).slice(0)}function mt(e){var t=0,n=e.length,r="";for(;n>t;t++)r+=e[t].value;return r}function yt(e,t,n){var i=t.dir,o=n&&"parentNode"===i,s=T++;return t.first?function(t,n,r){while(t=t[i])if(1===t.nodeType||o)return e(t,n,r)}:function(t,n,a){var u,l,c,p=w+" "+s;if(a){while(t=t[i])if((1===t.nodeType||o)&&e(t,n,a))return!0}else while(t=t[i])if(1===t.nodeType||o)if(c=t[v]||(t[v]={}),(l=c[i])&&l[0]===p){if((u=l[1])===!0||u===r)return u===!0}else if(l=c[i]=[p],l[1]=e(t,n,a)||r,l[1]===!0)return!0}}function vt(e){return e.length>1?function(t,n,r){var i=e.length;while(i--)if(!e[i](t,n,r))return!1;return!0}:e[0]}function xt(e,t,n,r,i){var o,s=[],a=0,u=e.length,l=null!=t;for(;u>a;a++)(o=e[a])&&(!n||n(o,r,i))&&(s.push(o),l&&t.push(a));return s}function bt(e,t,n,r,i,o){return r&&!r[v]&&(r=bt(r)),i&&!i[v]&&(i=bt(i,o)),at(function(o,s,a,u){var l,c,p,f=[],h=[],d=s.length,g=o||Ct(t||"*",a.nodeType?[a]:a,[]),m=!e||!o&&t?g:xt(g,f,e,a,u),y=n?i||(o?e:d||r)?[]:s:m;if(n&&n(m,y,a,u),r){l=xt(y,h),r(l,[],a,u),c=l.length;while(c--)(p=l[c])&&(y[h[c]]=!(m[h[c]]=p))}if(o){if(i||e){if(i){l=[],c=y.length;while(c--)(p=y[c])&&l.push(m[c]=p);i(null,y=[],l,u)}c=y.length;while(c--)(p=y[c])&&(l=i?P.call(o,p):f[c])>-1&&(o[l]=!(s[l]=p))}}else y=xt(y===s?y.splice(d,y.length):y),i?i(null,s,y,u):O.apply(s,y)})}function wt(e){var t,n,r,o=e.length,s=i.relative[e[0].type],a=s||i.relative[" "],l=s?1:0,c=yt(function(e){return e===t},a,!0),p=yt(function(e){return P.call(t,e)>-1},a,!0),f=[function(e,n,r){return!s&&(r||n!==u)||((t=n).nodeType?c(e,n,r):p(e,n,r))}];for(;o>l;l++)if(n=i.relative[e[l].type])f=[yt(vt(f),n)];else{if(n=i.filter[e[l].type].apply(null,e[l].matches),n[v]){for(r=++l;o>r;r++)if(i.relative[e[r].type])break;return bt(l>1&&vt(f),l>1&&mt(e.slice(0,l-1).concat({value:" "===e[l-2].type?"*":""})).replace(z,"$1"),n,r>l&&wt(e.slice(l,r)),o>r&&wt(e=e.slice(r)),o>r&&mt(e))}f.push(n)}return vt(f)}function Tt(e,t){var n=0,o=t.length>0,s=e.length>0,a=function(a,l,c,f,h){var d,g,m,y=[],v=0,x="0",b=a&&[],T=null!=h,C=u,k=a||s&&i.find.TAG("*",h&&l.parentNode||l),N=w+=null==C?1:Math.random()||.1;for(T&&(u=l!==p&&l,r=n);null!=(d=k[x]);x++){if(s&&d){g=0;while(m=e[g++])if(m(d,l,c)){f.push(d);break}T&&(w=N,r=++n)}o&&((d=!m&&d)&&v--,a&&b.push(d))}if(v+=x,o&&x!==v){g=0;while(m=t[g++])m(b,y,l,c);if(a){if(v>0)while(x--)b[x]||y[x]||(y[x]=q.call(f));y=xt(y)}O.apply(f,y),T&&!a&&y.length>0&&v+t.length>1&&ot.uniqueSort(f)}return T&&(w=N,u=C),b};return o?at(a):a}a=ot.compile=function(e,t){var n,r=[],i=[],o=N[e+" "];if(!o){t||(t=gt(e)),n=t.length;while(n--)o=wt(t[n]),o[v]?r.push(o):i.push(o);o=N(e,Tt(i,r))}return o};function Ct(e,t,n){var r=0,i=t.length;for(;i>r;r++)ot(e,t[r],n);return n}function kt(e,t,r,o){var s,u,l,c,p,f=gt(e);if(!o&&1===f.length){if(u=f[0]=f[0].slice(0),u.length>2&&"ID"===(l=u[0]).type&&n.getById&&9===t.nodeType&&h&&i.relative[u[1].type]){if(t=(i.find.ID(l.matches[0].replace(nt,rt),t)||[])[0],!t)return r;e=e.slice(u.shift().value.length)}s=J.needsContext.test(e)?0:u.length;while(s--){if(l=u[s],i.relative[c=l.type])break;if((p=i.find[c])&&(o=p(l.matches[0].replace(nt,rt),U.test(u[0].type)&&t.parentNode||t))){if(u.splice(s,1),e=o.length&&mt(u),!e)return O.apply(r,o),r;break}}}return a(e,f)(o,t,!h,r,U.test(e)),r}n.sortStable=v.split("").sort(S).join("")===v,n.detectDuplicates=E,c(),n.sortDetached=ut(function(e){return 1&e.compareDocumentPosition(p.createElement("div"))}),ut(function(e){return e.innerHTML="","#"===e.firstChild.getAttribute("href")})||lt("type|href|height|width",function(e,t,n){return n?undefined:e.getAttribute(t,"type"===t.toLowerCase()?1:2)}),n.attributes&&ut(function(e){return e.innerHTML="",e.firstChild.setAttribute("value",""),""===e.firstChild.getAttribute("value")})||lt("value",function(e,t,n){return n||"input"!==e.nodeName.toLowerCase()?undefined:e.defaultValue}),ut(function(e){return null==e.getAttribute("disabled")})||lt(R,function(e,t,n){var r;return n?undefined:(r=e.getAttributeNode(t))&&r.specified?r.value:e[t]===!0?t.toLowerCase():null}),x.find=ot,x.expr=ot.selectors,x.expr[":"]=x.expr.pseudos,x.unique=ot.uniqueSort,x.text=ot.getText,x.isXMLDoc=ot.isXML,x.contains=ot.contains}(e);var D={};function A(e){var t=D[e]={};return x.each(e.match(w)||[],function(e,n){t[n]=!0}),t}x.Callbacks=function(e){e="string"==typeof e?D[e]||A(e):x.extend({},e);var t,n,r,i,o,s,a=[],u=!e.once&&[],l=function(p){for(t=e.memory&&p,n=!0,s=i||0,i=0,o=a.length,r=!0;a&&o>s;s++)if(a[s].apply(p[0],p[1])===!1&&e.stopOnFalse){t=!1;break}r=!1,a&&(u?u.length&&l(u.shift()):t?a=[]:c.disable())},c={add:function(){if(a){var n=a.length;(function s(t){x.each(t,function(t,n){var r=x.type(n);"function"===r?e.unique&&c.has(n)||a.push(n):n&&n.length&&"string"!==r&&s(n)})})(arguments),r?o=a.length:t&&(i=n,l(t))}return this},remove:function(){return a&&x.each(arguments,function(e,t){var n;while((n=x.inArray(t,a,n))>-1)a.splice(n,1),r&&(o>=n&&o--,s>=n&&s--)}),this},has:function(e){return e?x.inArray(e,a)>-1:!(!a||!a.length)},empty:function(){return a=[],o=0,this},disable:function(){return a=u=t=undefined,this},disabled:function(){return!a},lock:function(){return u=undefined,t||c.disable(),this},locked:function(){return!u},fireWith:function(e,t){return!a||n&&!u||(t=t||[],t=[e,t.slice?t.slice():t],r?u.push(t):l(t)),this},fire:function(){return c.fireWith(this,arguments),this},fired:function(){return!!n}};return c},x.extend({Deferred:function(e){var t=[["resolve","done",x.Callbacks("once memory"),"resolved"],["reject","fail",x.Callbacks("once memory"),"rejected"],["notify","progress",x.Callbacks("memory")]],n="pending",r={state:function(){return n},always:function(){return i.done(arguments).fail(arguments),this},then:function(){var e=arguments;return x.Deferred(function(n){x.each(t,function(t,o){var s=o[0],a=x.isFunction(e[t])&&e[t];i[o[1]](function(){var e=a&&a.apply(this,arguments);e&&x.isFunction(e.promise)?e.promise().done(n.resolve).fail(n.reject).progress(n.notify):n[s+"With"](this===r?n.promise():this,a?[e]:arguments)})}),e=null}).promise()},promise:function(e){return null!=e?x.extend(e,r):r}},i={};return r.pipe=r.then,x.each(t,function(e,o){var s=o[2],a=o[3];r[o[1]]=s.add,a&&s.add(function(){n=a},t[1^e][2].disable,t[2][2].lock),i[o[0]]=function(){return i[o[0]+"With"](this===i?r:this,arguments),this},i[o[0]+"With"]=s.fireWith}),r.promise(i),e&&e.call(i,i),i},when:function(e){var t=0,n=d.call(arguments),r=n.length,i=1!==r||e&&x.isFunction(e.promise)?r:0,o=1===i?e:x.Deferred(),s=function(e,t,n){return function(r){t[e]=this,n[e]=arguments.length>1?d.call(arguments):r,n===a?o.notifyWith(t,n):--i||o.resolveWith(t,n)}},a,u,l;if(r>1)for(a=Array(r),u=Array(r),l=Array(r);r>t;t++)n[t]&&x.isFunction(n[t].promise)?n[t].promise().done(s(t,l,n)).fail(o.reject).progress(s(t,u,a)):--i;return i||o.resolveWith(l,n),o.promise()}}),x.support=function(t){var n=o.createElement("input"),r=o.createDocumentFragment(),i=o.createElement("div"),s=o.createElement("select"),a=s.appendChild(o.createElement("option"));return n.type?(n.type="checkbox",t.checkOn=""!==n.value,t.optSelected=a.selected,t.reliableMarginRight=!0,t.boxSizingReliable=!0,t.pixelPosition=!1,n.checked=!0,t.noCloneChecked=n.cloneNode(!0).checked,s.disabled=!0,t.optDisabled=!a.disabled,n=o.createElement("input"),n.value="t",n.type="radio",t.radioValue="t"===n.value,n.setAttribute("checked","t"),n.setAttribute("name","t"),r.appendChild(n),t.checkClone=r.cloneNode(!0).cloneNode(!0).lastChild.checked,t.focusinBubbles="onfocusin"in e,i.style.backgroundClip="content-box",i.cloneNode(!0).style.backgroundClip="",t.clearCloneStyle="content-box"===i.style.backgroundClip,x(function(){var n,r,s="padding:0;margin:0;border:0;display:block;-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box",a=o.getElementsByTagName("body")[0];a&&(n=o.createElement("div"),n.style.cssText="border:0;width:0;height:0;position:absolute;top:0;left:-9999px;margin-top:1px",a.appendChild(n).appendChild(i),i.innerHTML="",i.style.cssText="-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;padding:1px;border:1px;display:block;width:4px;margin-top:1%;position:absolute;top:1%",x.swap(a,null!=a.style.zoom?{zoom:1}:{},function(){t.boxSizing=4===i.offsetWidth}),e.getComputedStyle&&(t.pixelPosition="1%"!==(e.getComputedStyle(i,null)||{}).top,t.boxSizingReliable="4px"===(e.getComputedStyle(i,null)||{width:"4px"}).width,r=i.appendChild(o.createElement("div")),r.style.cssText=i.style.cssText=s,r.style.marginRight=r.style.width="0",i.style.width="1px",t.reliableMarginRight=!parseFloat((e.getComputedStyle(r,null)||{}).marginRight)),a.removeChild(n))}),t):t}({});var L,q,H=/(?:\{[\s\S]*\}|\[[\s\S]*\])$/,O=/([A-Z])/g;function F(){Object.defineProperty(this.cache={},0,{get:function(){return{}}}),this.expando=x.expando+Math.random()}F.uid=1,F.accepts=function(e){return e.nodeType?1===e.nodeType||9===e.nodeType:!0},F.prototype={key:function(e){if(!F.accepts(e))return 0;var t={},n=e[this.expando];if(!n){n=F.uid++;try{t[this.expando]={value:n},Object.defineProperties(e,t)}catch(r){t[this.expando]=n,x.extend(e,t)}}return this.cache[n]||(this.cache[n]={}),n},set:function(e,t,n){var r,i=this.key(e),o=this.cache[i];if("string"==typeof t)o[t]=n;else if(x.isEmptyObject(o))x.extend(this.cache[i],t);else for(r in t)o[r]=t[r];return o},get:function(e,t){var n=this.cache[this.key(e)];return t===undefined?n:n[t]},access:function(e,t,n){var r;return t===undefined||t&&"string"==typeof t&&n===undefined?(r=this.get(e,t),r!==undefined?r:this.get(e,x.camelCase(t))):(this.set(e,t,n),n!==undefined?n:t)},remove:function(e,t){var n,r,i,o=this.key(e),s=this.cache[o];if(t===undefined)this.cache[o]={};else{x.isArray(t)?r=t.concat(t.map(x.camelCase)):(i=x.camelCase(t),t in s?r=[t,i]:(r=i,r=r in s?[r]:r.match(w)||[])),n=r.length;while(n--)delete s[r[n]]}},hasData:function(e){return!x.isEmptyObject(this.cache[e[this.expando]]||{})},discard:function(e){e[this.expando]&&delete this.cache[e[this.expando]]}},L=new F,q=new F,x.extend({acceptData:F.accepts,hasData:function(e){return L.hasData(e)||q.hasData(e)},data:function(e,t,n){return L.access(e,t,n)},removeData:function(e,t){L.remove(e,t)},_data:function(e,t,n){return q.access(e,t,n)},_removeData:function(e,t){q.remove(e,t)}}),x.fn.extend({data:function(e,t){var n,r,i=this[0],o=0,s=null;if(e===undefined){if(this.length&&(s=L.get(i),1===i.nodeType&&!q.get(i,"hasDataAttrs"))){for(n=i.attributes;n.length>o;o++)r=n[o].name,0===r.indexOf("data-")&&(r=x.camelCase(r.slice(5)),P(i,r,s[r]));q.set(i,"hasDataAttrs",!0)}return s}return"object"==typeof e?this.each(function(){L.set(this,e)}):x.access(this,function(t){var n,r=x.camelCase(e);if(i&&t===undefined){if(n=L.get(i,e),n!==undefined)return n;if(n=L.get(i,r),n!==undefined)return n;if(n=P(i,r,undefined),n!==undefined)return n}else this.each(function(){var n=L.get(this,r);L.set(this,r,t),-1!==e.indexOf("-")&&n!==undefined&&L.set(this,e,t)})},null,t,arguments.length>1,null,!0)},removeData:function(e){return this.each(function(){L.remove(this,e)})}});function P(e,t,n){var r;if(n===undefined&&1===e.nodeType)if(r="data-"+t.replace(O,"-$1").toLowerCase(),n=e.getAttribute(r),"string"==typeof n){try{n="true"===n?!0:"false"===n?!1:"null"===n?null:+n+""===n?+n:H.test(n)?JSON.parse(n):n}catch(i){}L.set(e,t,n)}else n=undefined;return n}x.extend({queue:function(e,t,n){var r;return e?(t=(t||"fx")+"queue",r=q.get(e,t),n&&(!r||x.isArray(n)?r=q.access(e,t,x.makeArray(n)):r.push(n)),r||[]):undefined},dequeue:function(e,t){t=t||"fx";var n=x.queue(e,t),r=n.length,i=n.shift(),o=x._queueHooks(e,t),s=function(){x.dequeue(e,t) -};"inprogress"===i&&(i=n.shift(),r--),i&&("fx"===t&&n.unshift("inprogress"),delete o.stop,i.call(e,s,o)),!r&&o&&o.empty.fire()},_queueHooks:function(e,t){var n=t+"queueHooks";return q.get(e,n)||q.access(e,n,{empty:x.Callbacks("once memory").add(function(){q.remove(e,[t+"queue",n])})})}}),x.fn.extend({queue:function(e,t){var n=2;return"string"!=typeof e&&(t=e,e="fx",n--),n>arguments.length?x.queue(this[0],e):t===undefined?this:this.each(function(){var n=x.queue(this,e,t);x._queueHooks(this,e),"fx"===e&&"inprogress"!==n[0]&&x.dequeue(this,e)})},dequeue:function(e){return this.each(function(){x.dequeue(this,e)})},delay:function(e,t){return e=x.fx?x.fx.speeds[e]||e:e,t=t||"fx",this.queue(t,function(t,n){var r=setTimeout(t,e);n.stop=function(){clearTimeout(r)}})},clearQueue:function(e){return this.queue(e||"fx",[])},promise:function(e,t){var n,r=1,i=x.Deferred(),o=this,s=this.length,a=function(){--r||i.resolveWith(o,[o])};"string"!=typeof e&&(t=e,e=undefined),e=e||"fx";while(s--)n=q.get(o[s],e+"queueHooks"),n&&n.empty&&(r++,n.empty.add(a));return a(),i.promise(t)}});var R,M,W=/[\t\r\n\f]/g,$=/\r/g,B=/^(?:input|select|textarea|button)$/i;x.fn.extend({attr:function(e,t){return x.access(this,x.attr,e,t,arguments.length>1)},removeAttr:function(e){return this.each(function(){x.removeAttr(this,e)})},prop:function(e,t){return x.access(this,x.prop,e,t,arguments.length>1)},removeProp:function(e){return this.each(function(){delete this[x.propFix[e]||e]})},addClass:function(e){var t,n,r,i,o,s=0,a=this.length,u="string"==typeof e&&e;if(x.isFunction(e))return this.each(function(t){x(this).addClass(e.call(this,t,this.className))});if(u)for(t=(e||"").match(w)||[];a>s;s++)if(n=this[s],r=1===n.nodeType&&(n.className?(" "+n.className+" ").replace(W," "):" ")){o=0;while(i=t[o++])0>r.indexOf(" "+i+" ")&&(r+=i+" ");n.className=x.trim(r)}return this},removeClass:function(e){var t,n,r,i,o,s=0,a=this.length,u=0===arguments.length||"string"==typeof e&&e;if(x.isFunction(e))return this.each(function(t){x(this).removeClass(e.call(this,t,this.className))});if(u)for(t=(e||"").match(w)||[];a>s;s++)if(n=this[s],r=1===n.nodeType&&(n.className?(" "+n.className+" ").replace(W," "):"")){o=0;while(i=t[o++])while(r.indexOf(" "+i+" ")>=0)r=r.replace(" "+i+" "," ");n.className=e?x.trim(r):""}return this},toggleClass:function(e,t){var n=typeof e;return"boolean"==typeof t&&"string"===n?t?this.addClass(e):this.removeClass(e):x.isFunction(e)?this.each(function(n){x(this).toggleClass(e.call(this,n,this.className,t),t)}):this.each(function(){if("string"===n){var t,i=0,o=x(this),s=e.match(w)||[];while(t=s[i++])o.hasClass(t)?o.removeClass(t):o.addClass(t)}else(n===r||"boolean"===n)&&(this.className&&q.set(this,"__className__",this.className),this.className=this.className||e===!1?"":q.get(this,"__className__")||"")})},hasClass:function(e){var t=" "+e+" ",n=0,r=this.length;for(;r>n;n++)if(1===this[n].nodeType&&(" "+this[n].className+" ").replace(W," ").indexOf(t)>=0)return!0;return!1},val:function(e){var t,n,r,i=this[0];{if(arguments.length)return r=x.isFunction(e),this.each(function(n){var i;1===this.nodeType&&(i=r?e.call(this,n,x(this).val()):e,null==i?i="":"number"==typeof i?i+="":x.isArray(i)&&(i=x.map(i,function(e){return null==e?"":e+""})),t=x.valHooks[this.type]||x.valHooks[this.nodeName.toLowerCase()],t&&"set"in t&&t.set(this,i,"value")!==undefined||(this.value=i))});if(i)return t=x.valHooks[i.type]||x.valHooks[i.nodeName.toLowerCase()],t&&"get"in t&&(n=t.get(i,"value"))!==undefined?n:(n=i.value,"string"==typeof n?n.replace($,""):null==n?"":n)}}}),x.extend({valHooks:{option:{get:function(e){var t=e.attributes.value;return!t||t.specified?e.value:e.text}},select:{get:function(e){var t,n,r=e.options,i=e.selectedIndex,o="select-one"===e.type||0>i,s=o?null:[],a=o?i+1:r.length,u=0>i?a:o?i:0;for(;a>u;u++)if(n=r[u],!(!n.selected&&u!==i||(x.support.optDisabled?n.disabled:null!==n.getAttribute("disabled"))||n.parentNode.disabled&&x.nodeName(n.parentNode,"optgroup"))){if(t=x(n).val(),o)return t;s.push(t)}return s},set:function(e,t){var n,r,i=e.options,o=x.makeArray(t),s=i.length;while(s--)r=i[s],(r.selected=x.inArray(x(r).val(),o)>=0)&&(n=!0);return n||(e.selectedIndex=-1),o}}},attr:function(e,t,n){var i,o,s=e.nodeType;if(e&&3!==s&&8!==s&&2!==s)return typeof e.getAttribute===r?x.prop(e,t,n):(1===s&&x.isXMLDoc(e)||(t=t.toLowerCase(),i=x.attrHooks[t]||(x.expr.match.bool.test(t)?M:R)),n===undefined?i&&"get"in i&&null!==(o=i.get(e,t))?o:(o=x.find.attr(e,t),null==o?undefined:o):null!==n?i&&"set"in i&&(o=i.set(e,n,t))!==undefined?o:(e.setAttribute(t,n+""),n):(x.removeAttr(e,t),undefined))},removeAttr:function(e,t){var n,r,i=0,o=t&&t.match(w);if(o&&1===e.nodeType)while(n=o[i++])r=x.propFix[n]||n,x.expr.match.bool.test(n)&&(e[r]=!1),e.removeAttribute(n)},attrHooks:{type:{set:function(e,t){if(!x.support.radioValue&&"radio"===t&&x.nodeName(e,"input")){var n=e.value;return e.setAttribute("type",t),n&&(e.value=n),t}}}},propFix:{"for":"htmlFor","class":"className"},prop:function(e,t,n){var r,i,o,s=e.nodeType;if(e&&3!==s&&8!==s&&2!==s)return o=1!==s||!x.isXMLDoc(e),o&&(t=x.propFix[t]||t,i=x.propHooks[t]),n!==undefined?i&&"set"in i&&(r=i.set(e,n,t))!==undefined?r:e[t]=n:i&&"get"in i&&null!==(r=i.get(e,t))?r:e[t]},propHooks:{tabIndex:{get:function(e){return e.hasAttribute("tabindex")||B.test(e.nodeName)||e.href?e.tabIndex:-1}}}}),M={set:function(e,t,n){return t===!1?x.removeAttr(e,n):e.setAttribute(n,n),n}},x.each(x.expr.match.bool.source.match(/\w+/g),function(e,t){var n=x.expr.attrHandle[t]||x.find.attr;x.expr.attrHandle[t]=function(e,t,r){var i=x.expr.attrHandle[t],o=r?undefined:(x.expr.attrHandle[t]=undefined)!=n(e,t,r)?t.toLowerCase():null;return x.expr.attrHandle[t]=i,o}}),x.support.optSelected||(x.propHooks.selected={get:function(e){var t=e.parentNode;return t&&t.parentNode&&t.parentNode.selectedIndex,null}}),x.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){x.propFix[this.toLowerCase()]=this}),x.each(["radio","checkbox"],function(){x.valHooks[this]={set:function(e,t){return x.isArray(t)?e.checked=x.inArray(x(e).val(),t)>=0:undefined}},x.support.checkOn||(x.valHooks[this].get=function(e){return null===e.getAttribute("value")?"on":e.value})});var I=/^key/,z=/^(?:mouse|contextmenu)|click/,_=/^(?:focusinfocus|focusoutblur)$/,X=/^([^.]*)(?:\.(.+)|)$/;function U(){return!0}function Y(){return!1}function V(){try{return o.activeElement}catch(e){}}x.event={global:{},add:function(e,t,n,i,o){var s,a,u,l,c,p,f,h,d,g,m,y=q.get(e);if(y){n.handler&&(s=n,n=s.handler,o=s.selector),n.guid||(n.guid=x.guid++),(l=y.events)||(l=y.events={}),(a=y.handle)||(a=y.handle=function(e){return typeof x===r||e&&x.event.triggered===e.type?undefined:x.event.dispatch.apply(a.elem,arguments)},a.elem=e),t=(t||"").match(w)||[""],c=t.length;while(c--)u=X.exec(t[c])||[],d=m=u[1],g=(u[2]||"").split(".").sort(),d&&(f=x.event.special[d]||{},d=(o?f.delegateType:f.bindType)||d,f=x.event.special[d]||{},p=x.extend({type:d,origType:m,data:i,handler:n,guid:n.guid,selector:o,needsContext:o&&x.expr.match.needsContext.test(o),namespace:g.join(".")},s),(h=l[d])||(h=l[d]=[],h.delegateCount=0,f.setup&&f.setup.call(e,i,g,a)!==!1||e.addEventListener&&e.addEventListener(d,a,!1)),f.add&&(f.add.call(e,p),p.handler.guid||(p.handler.guid=n.guid)),o?h.splice(h.delegateCount++,0,p):h.push(p),x.event.global[d]=!0);e=null}},remove:function(e,t,n,r,i){var o,s,a,u,l,c,p,f,h,d,g,m=q.hasData(e)&&q.get(e);if(m&&(u=m.events)){t=(t||"").match(w)||[""],l=t.length;while(l--)if(a=X.exec(t[l])||[],h=g=a[1],d=(a[2]||"").split(".").sort(),h){p=x.event.special[h]||{},h=(r?p.delegateType:p.bindType)||h,f=u[h]||[],a=a[2]&&RegExp("(^|\\.)"+d.join("\\.(?:.*\\.|)")+"(\\.|$)"),s=o=f.length;while(o--)c=f[o],!i&&g!==c.origType||n&&n.guid!==c.guid||a&&!a.test(c.namespace)||r&&r!==c.selector&&("**"!==r||!c.selector)||(f.splice(o,1),c.selector&&f.delegateCount--,p.remove&&p.remove.call(e,c));s&&!f.length&&(p.teardown&&p.teardown.call(e,d,m.handle)!==!1||x.removeEvent(e,h,m.handle),delete u[h])}else for(h in u)x.event.remove(e,h+t[l],n,r,!0);x.isEmptyObject(u)&&(delete m.handle,q.remove(e,"events"))}},trigger:function(t,n,r,i){var s,a,u,l,c,p,f,h=[r||o],d=y.call(t,"type")?t.type:t,g=y.call(t,"namespace")?t.namespace.split("."):[];if(a=u=r=r||o,3!==r.nodeType&&8!==r.nodeType&&!_.test(d+x.event.triggered)&&(d.indexOf(".")>=0&&(g=d.split("."),d=g.shift(),g.sort()),c=0>d.indexOf(":")&&"on"+d,t=t[x.expando]?t:new x.Event(d,"object"==typeof t&&t),t.isTrigger=i?2:3,t.namespace=g.join("."),t.namespace_re=t.namespace?RegExp("(^|\\.)"+g.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,t.result=undefined,t.target||(t.target=r),n=null==n?[t]:x.makeArray(n,[t]),f=x.event.special[d]||{},i||!f.trigger||f.trigger.apply(r,n)!==!1)){if(!i&&!f.noBubble&&!x.isWindow(r)){for(l=f.delegateType||d,_.test(l+d)||(a=a.parentNode);a;a=a.parentNode)h.push(a),u=a;u===(r.ownerDocument||o)&&h.push(u.defaultView||u.parentWindow||e)}s=0;while((a=h[s++])&&!t.isPropagationStopped())t.type=s>1?l:f.bindType||d,p=(q.get(a,"events")||{})[t.type]&&q.get(a,"handle"),p&&p.apply(a,n),p=c&&a[c],p&&x.acceptData(a)&&p.apply&&p.apply(a,n)===!1&&t.preventDefault();return t.type=d,i||t.isDefaultPrevented()||f._default&&f._default.apply(h.pop(),n)!==!1||!x.acceptData(r)||c&&x.isFunction(r[d])&&!x.isWindow(r)&&(u=r[c],u&&(r[c]=null),x.event.triggered=d,r[d](),x.event.triggered=undefined,u&&(r[c]=u)),t.result}},dispatch:function(e){e=x.event.fix(e);var t,n,r,i,o,s=[],a=d.call(arguments),u=(q.get(this,"events")||{})[e.type]||[],l=x.event.special[e.type]||{};if(a[0]=e,e.delegateTarget=this,!l.preDispatch||l.preDispatch.call(this,e)!==!1){s=x.event.handlers.call(this,e,u),t=0;while((i=s[t++])&&!e.isPropagationStopped()){e.currentTarget=i.elem,n=0;while((o=i.handlers[n++])&&!e.isImmediatePropagationStopped())(!e.namespace_re||e.namespace_re.test(o.namespace))&&(e.handleObj=o,e.data=o.data,r=((x.event.special[o.origType]||{}).handle||o.handler).apply(i.elem,a),r!==undefined&&(e.result=r)===!1&&(e.preventDefault(),e.stopPropagation()))}return l.postDispatch&&l.postDispatch.call(this,e),e.result}},handlers:function(e,t){var n,r,i,o,s=[],a=t.delegateCount,u=e.target;if(a&&u.nodeType&&(!e.button||"click"!==e.type))for(;u!==this;u=u.parentNode||this)if(u.disabled!==!0||"click"!==e.type){for(r=[],n=0;a>n;n++)o=t[n],i=o.selector+" ",r[i]===undefined&&(r[i]=o.needsContext?x(i,this).index(u)>=0:x.find(i,this,null,[u]).length),r[i]&&r.push(o);r.length&&s.push({elem:u,handlers:r})}return t.length>a&&s.push({elem:this,handlers:t.slice(a)}),s},props:"altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "),fixHooks:{},keyHooks:{props:"char charCode key keyCode".split(" "),filter:function(e,t){return null==e.which&&(e.which=null!=t.charCode?t.charCode:t.keyCode),e}},mouseHooks:{props:"button buttons clientX clientY offsetX offsetY pageX pageY screenX screenY toElement".split(" "),filter:function(e,t){var n,r,i,s=t.button;return null==e.pageX&&null!=t.clientX&&(n=e.target.ownerDocument||o,r=n.documentElement,i=n.body,e.pageX=t.clientX+(r&&r.scrollLeft||i&&i.scrollLeft||0)-(r&&r.clientLeft||i&&i.clientLeft||0),e.pageY=t.clientY+(r&&r.scrollTop||i&&i.scrollTop||0)-(r&&r.clientTop||i&&i.clientTop||0)),e.which||s===undefined||(e.which=1&s?1:2&s?3:4&s?2:0),e}},fix:function(e){if(e[x.expando])return e;var t,n,r,i=e.type,s=e,a=this.fixHooks[i];a||(this.fixHooks[i]=a=z.test(i)?this.mouseHooks:I.test(i)?this.keyHooks:{}),r=a.props?this.props.concat(a.props):this.props,e=new x.Event(s),t=r.length;while(t--)n=r[t],e[n]=s[n];return e.target||(e.target=o),3===e.target.nodeType&&(e.target=e.target.parentNode),a.filter?a.filter(e,s):e},special:{load:{noBubble:!0},focus:{trigger:function(){return this!==V()&&this.focus?(this.focus(),!1):undefined},delegateType:"focusin"},blur:{trigger:function(){return this===V()&&this.blur?(this.blur(),!1):undefined},delegateType:"focusout"},click:{trigger:function(){return"checkbox"===this.type&&this.click&&x.nodeName(this,"input")?(this.click(),!1):undefined},_default:function(e){return x.nodeName(e.target,"a")}},beforeunload:{postDispatch:function(e){e.result!==undefined&&(e.originalEvent.returnValue=e.result)}}},simulate:function(e,t,n,r){var i=x.extend(new x.Event,n,{type:e,isSimulated:!0,originalEvent:{}});r?x.event.trigger(i,null,t):x.event.dispatch.call(t,i),i.isDefaultPrevented()&&n.preventDefault()}},x.removeEvent=function(e,t,n){e.removeEventListener&&e.removeEventListener(t,n,!1)},x.Event=function(e,t){return this instanceof x.Event?(e&&e.type?(this.originalEvent=e,this.type=e.type,this.isDefaultPrevented=e.defaultPrevented||e.getPreventDefault&&e.getPreventDefault()?U:Y):this.type=e,t&&x.extend(this,t),this.timeStamp=e&&e.timeStamp||x.now(),this[x.expando]=!0,undefined):new x.Event(e,t)},x.Event.prototype={isDefaultPrevented:Y,isPropagationStopped:Y,isImmediatePropagationStopped:Y,preventDefault:function(){var e=this.originalEvent;this.isDefaultPrevented=U,e&&e.preventDefault&&e.preventDefault()},stopPropagation:function(){var e=this.originalEvent;this.isPropagationStopped=U,e&&e.stopPropagation&&e.stopPropagation()},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=U,this.stopPropagation()}},x.each({mouseenter:"mouseover",mouseleave:"mouseout"},function(e,t){x.event.special[e]={delegateType:t,bindType:t,handle:function(e){var n,r=this,i=e.relatedTarget,o=e.handleObj;return(!i||i!==r&&!x.contains(r,i))&&(e.type=o.origType,n=o.handler.apply(this,arguments),e.type=t),n}}}),x.support.focusinBubbles||x.each({focus:"focusin",blur:"focusout"},function(e,t){var n=0,r=function(e){x.event.simulate(t,e.target,x.event.fix(e),!0)};x.event.special[t]={setup:function(){0===n++&&o.addEventListener(e,r,!0)},teardown:function(){0===--n&&o.removeEventListener(e,r,!0)}}}),x.fn.extend({on:function(e,t,n,r,i){var o,s;if("object"==typeof e){"string"!=typeof t&&(n=n||t,t=undefined);for(s in e)this.on(s,t,n,e[s],i);return this}if(null==n&&null==r?(r=t,n=t=undefined):null==r&&("string"==typeof t?(r=n,n=undefined):(r=n,n=t,t=undefined)),r===!1)r=Y;else if(!r)return this;return 1===i&&(o=r,r=function(e){return x().off(e),o.apply(this,arguments)},r.guid=o.guid||(o.guid=x.guid++)),this.each(function(){x.event.add(this,e,r,n,t)})},one:function(e,t,n,r){return this.on(e,t,n,r,1)},off:function(e,t,n){var r,i;if(e&&e.preventDefault&&e.handleObj)return r=e.handleObj,x(e.delegateTarget).off(r.namespace?r.origType+"."+r.namespace:r.origType,r.selector,r.handler),this;if("object"==typeof e){for(i in e)this.off(i,t,e[i]);return this}return(t===!1||"function"==typeof t)&&(n=t,t=undefined),n===!1&&(n=Y),this.each(function(){x.event.remove(this,e,n,t)})},trigger:function(e,t){return this.each(function(){x.event.trigger(e,t,this)})},triggerHandler:function(e,t){var n=this[0];return n?x.event.trigger(e,t,n,!0):undefined}});var G=/^.[^:#\[\.,]*$/,J=/^(?:parents|prev(?:Until|All))/,Q=x.expr.match.needsContext,K={children:!0,contents:!0,next:!0,prev:!0};x.fn.extend({find:function(e){var t,n=[],r=this,i=r.length;if("string"!=typeof e)return this.pushStack(x(e).filter(function(){for(t=0;i>t;t++)if(x.contains(r[t],this))return!0}));for(t=0;i>t;t++)x.find(e,r[t],n);return n=this.pushStack(i>1?x.unique(n):n),n.selector=this.selector?this.selector+" "+e:e,n},has:function(e){var t=x(e,this),n=t.length;return this.filter(function(){var e=0;for(;n>e;e++)if(x.contains(this,t[e]))return!0})},not:function(e){return this.pushStack(et(this,e||[],!0))},filter:function(e){return this.pushStack(et(this,e||[],!1))},is:function(e){return!!et(this,"string"==typeof e&&Q.test(e)?x(e):e||[],!1).length},closest:function(e,t){var n,r=0,i=this.length,o=[],s=Q.test(e)||"string"!=typeof e?x(e,t||this.context):0;for(;i>r;r++)for(n=this[r];n&&n!==t;n=n.parentNode)if(11>n.nodeType&&(s?s.index(n)>-1:1===n.nodeType&&x.find.matchesSelector(n,e))){n=o.push(n);break}return this.pushStack(o.length>1?x.unique(o):o)},index:function(e){return e?"string"==typeof e?g.call(x(e),this[0]):g.call(this,e.jquery?e[0]:e):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(e,t){var n="string"==typeof e?x(e,t):x.makeArray(e&&e.nodeType?[e]:e),r=x.merge(this.get(),n);return this.pushStack(x.unique(r))},addBack:function(e){return this.add(null==e?this.prevObject:this.prevObject.filter(e))}});function Z(e,t){while((e=e[t])&&1!==e.nodeType);return e}x.each({parent:function(e){var t=e.parentNode;return t&&11!==t.nodeType?t:null},parents:function(e){return x.dir(e,"parentNode")},parentsUntil:function(e,t,n){return x.dir(e,"parentNode",n)},next:function(e){return Z(e,"nextSibling")},prev:function(e){return Z(e,"previousSibling")},nextAll:function(e){return x.dir(e,"nextSibling")},prevAll:function(e){return x.dir(e,"previousSibling")},nextUntil:function(e,t,n){return x.dir(e,"nextSibling",n)},prevUntil:function(e,t,n){return x.dir(e,"previousSibling",n)},siblings:function(e){return x.sibling((e.parentNode||{}).firstChild,e)},children:function(e){return x.sibling(e.firstChild)},contents:function(e){return e.contentDocument||x.merge([],e.childNodes)}},function(e,t){x.fn[e]=function(n,r){var i=x.map(this,t,n);return"Until"!==e.slice(-5)&&(r=n),r&&"string"==typeof r&&(i=x.filter(r,i)),this.length>1&&(K[e]||x.unique(i),J.test(e)&&i.reverse()),this.pushStack(i)}}),x.extend({filter:function(e,t,n){var r=t[0];return n&&(e=":not("+e+")"),1===t.length&&1===r.nodeType?x.find.matchesSelector(r,e)?[r]:[]:x.find.matches(e,x.grep(t,function(e){return 1===e.nodeType}))},dir:function(e,t,n){var r=[],i=n!==undefined;while((e=e[t])&&9!==e.nodeType)if(1===e.nodeType){if(i&&x(e).is(n))break;r.push(e)}return r},sibling:function(e,t){var n=[];for(;e;e=e.nextSibling)1===e.nodeType&&e!==t&&n.push(e);return n}});function et(e,t,n){if(x.isFunction(t))return x.grep(e,function(e,r){return!!t.call(e,r,e)!==n});if(t.nodeType)return x.grep(e,function(e){return e===t!==n});if("string"==typeof t){if(G.test(t))return x.filter(t,e,n);t=x.filter(t,e)}return x.grep(e,function(e){return g.call(t,e)>=0!==n})}var tt=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,nt=/<([\w:]+)/,rt=/<|&#?\w+;/,it=/<(?:script|style|link)/i,ot=/^(?:checkbox|radio)$/i,st=/checked\s*(?:[^=]|=\s*.checked.)/i,at=/^$|\/(?:java|ecma)script/i,ut=/^true\/(.*)/,lt=/^\s*\s*$/g,ct={option:[1,""],thead:[1,"","
    "],col:[2,"","
    "],tr:[2,"","
    "],td:[3,"","
    "],_default:[0,"",""]};ct.optgroup=ct.option,ct.tbody=ct.tfoot=ct.colgroup=ct.caption=ct.thead,ct.th=ct.td,x.fn.extend({text:function(e){return x.access(this,function(e){return e===undefined?x.text(this):this.empty().append((this[0]&&this[0].ownerDocument||o).createTextNode(e))},null,e,arguments.length)},append:function(){return this.domManip(arguments,function(e){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var t=pt(this,e);t.appendChild(e)}})},prepend:function(){return this.domManip(arguments,function(e){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var t=pt(this,e);t.insertBefore(e,t.firstChild)}})},before:function(){return this.domManip(arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this)})},after:function(){return this.domManip(arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this.nextSibling)})},remove:function(e,t){var n,r=e?x.filter(e,this):this,i=0;for(;null!=(n=r[i]);i++)t||1!==n.nodeType||x.cleanData(mt(n)),n.parentNode&&(t&&x.contains(n.ownerDocument,n)&&dt(mt(n,"script")),n.parentNode.removeChild(n));return this},empty:function(){var e,t=0;for(;null!=(e=this[t]);t++)1===e.nodeType&&(x.cleanData(mt(e,!1)),e.textContent="");return this},clone:function(e,t){return e=null==e?!1:e,t=null==t?e:t,this.map(function(){return x.clone(this,e,t)})},html:function(e){return x.access(this,function(e){var t=this[0]||{},n=0,r=this.length;if(e===undefined&&1===t.nodeType)return t.innerHTML;if("string"==typeof e&&!it.test(e)&&!ct[(nt.exec(e)||["",""])[1].toLowerCase()]){e=e.replace(tt,"<$1>");try{for(;r>n;n++)t=this[n]||{},1===t.nodeType&&(x.cleanData(mt(t,!1)),t.innerHTML=e);t=0}catch(i){}}t&&this.empty().append(e)},null,e,arguments.length)},replaceWith:function(){var e=x.map(this,function(e){return[e.nextSibling,e.parentNode]}),t=0;return this.domManip(arguments,function(n){var r=e[t++],i=e[t++];i&&(r&&r.parentNode!==i&&(r=this.nextSibling),x(this).remove(),i.insertBefore(n,r))},!0),t?this:this.remove()},detach:function(e){return this.remove(e,!0)},domManip:function(e,t,n){e=f.apply([],e);var r,i,o,s,a,u,l=0,c=this.length,p=this,h=c-1,d=e[0],g=x.isFunction(d);if(g||!(1>=c||"string"!=typeof d||x.support.checkClone)&&st.test(d))return this.each(function(r){var i=p.eq(r);g&&(e[0]=d.call(this,r,i.html())),i.domManip(e,t,n)});if(c&&(r=x.buildFragment(e,this[0].ownerDocument,!1,!n&&this),i=r.firstChild,1===r.childNodes.length&&(r=i),i)){for(o=x.map(mt(r,"script"),ft),s=o.length;c>l;l++)a=r,l!==h&&(a=x.clone(a,!0,!0),s&&x.merge(o,mt(a,"script"))),t.call(this[l],a,l);if(s)for(u=o[o.length-1].ownerDocument,x.map(o,ht),l=0;s>l;l++)a=o[l],at.test(a.type||"")&&!q.access(a,"globalEval")&&x.contains(u,a)&&(a.src?x._evalUrl(a.src):x.globalEval(a.textContent.replace(lt,"")))}return this}}),x.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(e,t){x.fn[e]=function(e){var n,r=[],i=x(e),o=i.length-1,s=0;for(;o>=s;s++)n=s===o?this:this.clone(!0),x(i[s])[t](n),h.apply(r,n.get());return this.pushStack(r)}}),x.extend({clone:function(e,t,n){var r,i,o,s,a=e.cloneNode(!0),u=x.contains(e.ownerDocument,e);if(!(x.support.noCloneChecked||1!==e.nodeType&&11!==e.nodeType||x.isXMLDoc(e)))for(s=mt(a),o=mt(e),r=0,i=o.length;i>r;r++)yt(o[r],s[r]);if(t)if(n)for(o=o||mt(e),s=s||mt(a),r=0,i=o.length;i>r;r++)gt(o[r],s[r]);else gt(e,a);return s=mt(a,"script"),s.length>0&&dt(s,!u&&mt(e,"script")),a},buildFragment:function(e,t,n,r){var i,o,s,a,u,l,c=0,p=e.length,f=t.createDocumentFragment(),h=[];for(;p>c;c++)if(i=e[c],i||0===i)if("object"===x.type(i))x.merge(h,i.nodeType?[i]:i);else if(rt.test(i)){o=o||f.appendChild(t.createElement("div")),s=(nt.exec(i)||["",""])[1].toLowerCase(),a=ct[s]||ct._default,o.innerHTML=a[1]+i.replace(tt,"<$1>")+a[2],l=a[0];while(l--)o=o.lastChild;x.merge(h,o.childNodes),o=f.firstChild,o.textContent=""}else h.push(t.createTextNode(i));f.textContent="",c=0;while(i=h[c++])if((!r||-1===x.inArray(i,r))&&(u=x.contains(i.ownerDocument,i),o=mt(f.appendChild(i),"script"),u&&dt(o),n)){l=0;while(i=o[l++])at.test(i.type||"")&&n.push(i)}return f},cleanData:function(e){var t,n,r,i,o,s,a=x.event.special,u=0;for(;(n=e[u])!==undefined;u++){if(F.accepts(n)&&(o=n[q.expando],o&&(t=q.cache[o]))){if(r=Object.keys(t.events||{}),r.length)for(s=0;(i=r[s])!==undefined;s++)a[i]?x.event.remove(n,i):x.removeEvent(n,i,t.handle);q.cache[o]&&delete q.cache[o]}delete L.cache[n[L.expando]]}},_evalUrl:function(e){return x.ajax({url:e,type:"GET",dataType:"script",async:!1,global:!1,"throws":!0})}});function pt(e,t){return x.nodeName(e,"table")&&x.nodeName(1===t.nodeType?t:t.firstChild,"tr")?e.getElementsByTagName("tbody")[0]||e.appendChild(e.ownerDocument.createElement("tbody")):e}function ft(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}function ht(e){var t=ut.exec(e.type);return t?e.type=t[1]:e.removeAttribute("type"),e}function dt(e,t){var n=e.length,r=0;for(;n>r;r++)q.set(e[r],"globalEval",!t||q.get(t[r],"globalEval"))}function gt(e,t){var n,r,i,o,s,a,u,l;if(1===t.nodeType){if(q.hasData(e)&&(o=q.access(e),s=q.set(t,o),l=o.events)){delete s.handle,s.events={};for(i in l)for(n=0,r=l[i].length;r>n;n++)x.event.add(t,i,l[i][n])}L.hasData(e)&&(a=L.access(e),u=x.extend({},a),L.set(t,u))}}function mt(e,t){var n=e.getElementsByTagName?e.getElementsByTagName(t||"*"):e.querySelectorAll?e.querySelectorAll(t||"*"):[];return t===undefined||t&&x.nodeName(e,t)?x.merge([e],n):n}function yt(e,t){var n=t.nodeName.toLowerCase();"input"===n&&ot.test(e.type)?t.checked=e.checked:("input"===n||"textarea"===n)&&(t.defaultValue=e.defaultValue)}x.fn.extend({wrapAll:function(e){var t;return x.isFunction(e)?this.each(function(t){x(this).wrapAll(e.call(this,t))}):(this[0]&&(t=x(e,this[0].ownerDocument).eq(0).clone(!0),this[0].parentNode&&t.insertBefore(this[0]),t.map(function(){var e=this;while(e.firstElementChild)e=e.firstElementChild;return e}).append(this)),this)},wrapInner:function(e){return x.isFunction(e)?this.each(function(t){x(this).wrapInner(e.call(this,t))}):this.each(function(){var t=x(this),n=t.contents();n.length?n.wrapAll(e):t.append(e)})},wrap:function(e){var t=x.isFunction(e);return this.each(function(n){x(this).wrapAll(t?e.call(this,n):e)})},unwrap:function(){return this.parent().each(function(){x.nodeName(this,"body")||x(this).replaceWith(this.childNodes)}).end()}});var vt,xt,bt=/^(none|table(?!-c[ea]).+)/,wt=/^margin/,Tt=RegExp("^("+b+")(.*)$","i"),Ct=RegExp("^("+b+")(?!px)[a-z%]+$","i"),kt=RegExp("^([+-])=("+b+")","i"),Nt={BODY:"block"},Et={position:"absolute",visibility:"hidden",display:"block"},St={letterSpacing:0,fontWeight:400},jt=["Top","Right","Bottom","Left"],Dt=["Webkit","O","Moz","ms"];function At(e,t){if(t in e)return t;var n=t.charAt(0).toUpperCase()+t.slice(1),r=t,i=Dt.length;while(i--)if(t=Dt[i]+n,t in e)return t;return r}function Lt(e,t){return e=t||e,"none"===x.css(e,"display")||!x.contains(e.ownerDocument,e)}function qt(t){return e.getComputedStyle(t,null)}function Ht(e,t){var n,r,i,o=[],s=0,a=e.length;for(;a>s;s++)r=e[s],r.style&&(o[s]=q.get(r,"olddisplay"),n=r.style.display,t?(o[s]||"none"!==n||(r.style.display=""),""===r.style.display&&Lt(r)&&(o[s]=q.access(r,"olddisplay",Rt(r.nodeName)))):o[s]||(i=Lt(r),(n&&"none"!==n||!i)&&q.set(r,"olddisplay",i?n:x.css(r,"display"))));for(s=0;a>s;s++)r=e[s],r.style&&(t&&"none"!==r.style.display&&""!==r.style.display||(r.style.display=t?o[s]||"":"none"));return e}x.fn.extend({css:function(e,t){return x.access(this,function(e,t,n){var r,i,o={},s=0;if(x.isArray(t)){for(r=qt(e),i=t.length;i>s;s++)o[t[s]]=x.css(e,t[s],!1,r);return o}return n!==undefined?x.style(e,t,n):x.css(e,t)},e,t,arguments.length>1)},show:function(){return Ht(this,!0)},hide:function(){return Ht(this)},toggle:function(e){return"boolean"==typeof e?e?this.show():this.hide():this.each(function(){Lt(this)?x(this).show():x(this).hide()})}}),x.extend({cssHooks:{opacity:{get:function(e,t){if(t){var n=vt(e,"opacity");return""===n?"1":n}}}},cssNumber:{columnCount:!0,fillOpacity:!0,fontWeight:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{"float":"cssFloat"},style:function(e,t,n,r){if(e&&3!==e.nodeType&&8!==e.nodeType&&e.style){var i,o,s,a=x.camelCase(t),u=e.style;return t=x.cssProps[a]||(x.cssProps[a]=At(u,a)),s=x.cssHooks[t]||x.cssHooks[a],n===undefined?s&&"get"in s&&(i=s.get(e,!1,r))!==undefined?i:u[t]:(o=typeof n,"string"===o&&(i=kt.exec(n))&&(n=(i[1]+1)*i[2]+parseFloat(x.css(e,t)),o="number"),null==n||"number"===o&&isNaN(n)||("number"!==o||x.cssNumber[a]||(n+="px"),x.support.clearCloneStyle||""!==n||0!==t.indexOf("background")||(u[t]="inherit"),s&&"set"in s&&(n=s.set(e,n,r))===undefined||(u[t]=n)),undefined)}},css:function(e,t,n,r){var i,o,s,a=x.camelCase(t);return t=x.cssProps[a]||(x.cssProps[a]=At(e.style,a)),s=x.cssHooks[t]||x.cssHooks[a],s&&"get"in s&&(i=s.get(e,!0,n)),i===undefined&&(i=vt(e,t,r)),"normal"===i&&t in St&&(i=St[t]),""===n||n?(o=parseFloat(i),n===!0||x.isNumeric(o)?o||0:i):i}}),vt=function(e,t,n){var r,i,o,s=n||qt(e),a=s?s.getPropertyValue(t)||s[t]:undefined,u=e.style;return s&&(""!==a||x.contains(e.ownerDocument,e)||(a=x.style(e,t)),Ct.test(a)&&wt.test(t)&&(r=u.width,i=u.minWidth,o=u.maxWidth,u.minWidth=u.maxWidth=u.width=a,a=s.width,u.width=r,u.minWidth=i,u.maxWidth=o)),a};function Ot(e,t,n){var r=Tt.exec(t);return r?Math.max(0,r[1]-(n||0))+(r[2]||"px"):t}function Ft(e,t,n,r,i){var o=n===(r?"border":"content")?4:"width"===t?1:0,s=0;for(;4>o;o+=2)"margin"===n&&(s+=x.css(e,n+jt[o],!0,i)),r?("content"===n&&(s-=x.css(e,"padding"+jt[o],!0,i)),"margin"!==n&&(s-=x.css(e,"border"+jt[o]+"Width",!0,i))):(s+=x.css(e,"padding"+jt[o],!0,i),"padding"!==n&&(s+=x.css(e,"border"+jt[o]+"Width",!0,i)));return s}function Pt(e,t,n){var r=!0,i="width"===t?e.offsetWidth:e.offsetHeight,o=qt(e),s=x.support.boxSizing&&"border-box"===x.css(e,"boxSizing",!1,o);if(0>=i||null==i){if(i=vt(e,t,o),(0>i||null==i)&&(i=e.style[t]),Ct.test(i))return i;r=s&&(x.support.boxSizingReliable||i===e.style[t]),i=parseFloat(i)||0}return i+Ft(e,t,n||(s?"border":"content"),r,o)+"px"}function Rt(e){var t=o,n=Nt[e];return n||(n=Mt(e,t),"none"!==n&&n||(xt=(xt||x("