Fix include not always working, add visible to fingerprints ui (#1088)
Fix include not always working, add !visible to fingerprints
This commit is contained in:
parent
63f5f9ab48
commit
bd9e1d0dd4
|
@ -16,6 +16,16 @@ class ClientCallbacks : public BLEClientCallbacks {
|
|||
|
||||
static ClientCallbacks clientCB;
|
||||
|
||||
BleFingerprint::BleFingerprint(BLEAdvertisedDevice *advertisedDevice, float fcmin, float beta, float dcutoff) : oneEuro{OneEuroFilter<float, unsigned long>(1, fcmin, beta, dcutoff)} {
|
||||
firstSeenMillis = millis();
|
||||
address = NimBLEAddress(advertisedDevice->getAddress());
|
||||
addressType = advertisedDevice->getAddressType();
|
||||
newest = recent = oldest = rssi = advertisedDevice->getRSSI();
|
||||
seenCount = 1;
|
||||
queryReport = nullptr;
|
||||
fingerprintAddress();
|
||||
}
|
||||
|
||||
bool BleFingerprint::shouldHide(const String &s) {
|
||||
if (BleFingerprintCollection::include.length() > 0 && !prefixExists(BleFingerprintCollection::include, s)) return true;
|
||||
return (BleFingerprintCollection::exclude.length() > 0 && prefixExists(BleFingerprintCollection::exclude, s));
|
||||
|
@ -41,7 +51,7 @@ bool BleFingerprint::setId(const String &newId, short newIdType, const String &n
|
|||
name = newName;
|
||||
|
||||
if (id != newId) {
|
||||
hidden = shouldHide(newId);
|
||||
bool newHidden = shouldHide(newId);
|
||||
countable = !ignore && !hidden && !BleFingerprintCollection::countIds.isEmpty() && prefixExists(BleFingerprintCollection::countIds, newId);
|
||||
bool newQuery = !ignore && !BleFingerprintCollection::query.isEmpty() && prefixExists(BleFingerprintCollection::query, newId);
|
||||
if (newQuery != allowQuery) {
|
||||
|
@ -58,13 +68,19 @@ bool BleFingerprint::setId(const String &newId, short newIdType, const String &n
|
|||
}
|
||||
}
|
||||
id = newId;
|
||||
hidden = newHidden;
|
||||
added = false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
int BleFingerprint::get1mRssi() const {
|
||||
const String BleFingerprint::getMac() const {
|
||||
const auto nativeAddress = address.getNative();
|
||||
return Sprintf("%02x%02x%02x%02x%02x%02x", nativeAddress[5], nativeAddress[4], nativeAddress[3], nativeAddress[2], nativeAddress[1], nativeAddress[0]);
|
||||
}
|
||||
|
||||
const int BleFingerprint::get1mRssi() const {
|
||||
if (calRssi != NO_RSSI) return calRssi + BleFingerprintCollection::rxAdjRssi;
|
||||
if (bcnRssi != NO_RSSI) return bcnRssi + BleFingerprintCollection::rxAdjRssi;
|
||||
if (mdRssi != NO_RSSI) return mdRssi + BleFingerprintCollection::rxAdjRssi;
|
||||
|
@ -72,16 +88,6 @@ int BleFingerprint::get1mRssi() const {
|
|||
return BleFingerprintCollection::rxRefRssi + DEFAULT_TX + BleFingerprintCollection::rxAdjRssi;
|
||||
}
|
||||
|
||||
BleFingerprint::BleFingerprint(BLEAdvertisedDevice *advertisedDevice, float fcmin, float beta, float dcutoff) : oneEuro{OneEuroFilter<float, unsigned long>(1, fcmin, beta, dcutoff)} {
|
||||
firstSeenMillis = millis();
|
||||
address = NimBLEAddress(advertisedDevice->getAddress());
|
||||
addressType = advertisedDevice->getAddressType();
|
||||
newest = recent = oldest = rssi = advertisedDevice->getRSSI();
|
||||
seenCount = 1;
|
||||
queryReport = nullptr;
|
||||
fingerprintAddress();
|
||||
}
|
||||
|
||||
void BleFingerprint::fingerprint(NimBLEAdvertisedDevice *advertisedDevice) {
|
||||
if (advertisedDevice->haveName()) {
|
||||
const std::string name = advertisedDevice->getName();
|
||||
|
@ -449,6 +455,7 @@ void BleFingerprint::setInitial(int initalRssi, float initalDistance) {
|
|||
}
|
||||
|
||||
void BleFingerprint::fill(JsonObject *doc) {
|
||||
(*doc)[F("mac")] = getMac();
|
||||
(*doc)[F("id")] = id;
|
||||
if (!name.isEmpty()) (*doc)[F("name")] = name;
|
||||
if (!disc.isEmpty()) (*doc)[F("disc")] = disc;
|
||||
|
@ -458,12 +465,10 @@ void BleFingerprint::fill(JsonObject *doc) {
|
|||
(*doc)[F("rssi")] = rssi;
|
||||
|
||||
(*doc)[F("raw")] = serialized(String(raw, 2));
|
||||
(*doc)[F("distance")] = serialized(String(output.value.position, 2));
|
||||
(*doc)[F("speed")] = serialized(String(output.value.speed * 1e3f, 2));
|
||||
(*doc)[F("mac")] = SMacf(address);
|
||||
(*doc)[F("distance")] = serialized(String(hasValue ? output.value.position : raw, 2));
|
||||
if (close) (*doc)[F("close")] = true;
|
||||
|
||||
(*doc)[F("interval")] = (millis() - firstSeenMillis) / seenCount;
|
||||
(*doc)[F("int")] = (millis() - firstSeenMillis) / seenCount;
|
||||
|
||||
if (mv) (*doc)[F("mV")] = mv;
|
||||
if (battery != 0xFF) (*doc)[F("batt")] = battery;
|
||||
|
@ -472,22 +477,21 @@ void BleFingerprint::fill(JsonObject *doc) {
|
|||
}
|
||||
|
||||
bool BleFingerprint::report(JsonObject *doc) {
|
||||
if (ignore || idType <= ID_TYPE_RAND_MAC || hidden)
|
||||
return false;
|
||||
if (ignore || idType <= ID_TYPE_RAND_MAC || hidden) return false;
|
||||
if (reported) return false;
|
||||
|
||||
if (reported || !hasValue)
|
||||
return false;
|
||||
auto dist = hasValue ? output.value.position : raw;
|
||||
|
||||
auto maxDistance = BleFingerprintCollection::maxDistance;
|
||||
if (maxDistance > 0 && output.value.position > maxDistance)
|
||||
if (maxDistance > 0 && dist > maxDistance)
|
||||
return false;
|
||||
|
||||
auto now = millis();
|
||||
if ((abs(output.value.position - lastReported) < BleFingerprintCollection::skipDistance) && (lastReportedMillis > 0) && (now - lastReportedMillis < BleFingerprintCollection::skipMs))
|
||||
if ((abs(dist - lastReported) < BleFingerprintCollection::skipDistance) && (lastReportedMillis > 0) && (now - lastReportedMillis < BleFingerprintCollection::skipMs))
|
||||
return false;
|
||||
|
||||
lastReportedMillis = now;
|
||||
lastReported = output.value.position;
|
||||
lastReported = dist;
|
||||
reported = true;
|
||||
fill(doc);
|
||||
return true;
|
||||
|
@ -540,7 +544,7 @@ bool BleFingerprint::query() {
|
|||
|
||||
bool BleFingerprint::shouldCount() {
|
||||
bool prevCounting = counting;
|
||||
if (ignore || !countable || !hasValue)
|
||||
if (ignore || !countable)
|
||||
counting = false;
|
||||
else if (getMsSinceLastSeen() > BleFingerprintCollection::countMs)
|
||||
counting = false;
|
||||
|
|
|
@ -60,10 +60,8 @@
|
|||
#define ID_TYPE_KNOWN_MAC short(210)
|
||||
#define ID_TYPE_ALIAS short(250)
|
||||
|
||||
class BleFingerprint
|
||||
{
|
||||
|
||||
public:
|
||||
class BleFingerprint {
|
||||
public:
|
||||
BleFingerprint(NimBLEAdvertisedDevice *advertisedDevice, float fcmin, float beta, float dcutoff);
|
||||
|
||||
bool seen(BLEAdvertisedDevice *advertisedDevice);
|
||||
|
@ -74,53 +72,52 @@ public:
|
|||
|
||||
bool query();
|
||||
|
||||
String getId() { return id; }
|
||||
const String getId() const { return id; }
|
||||
|
||||
String getName() { return name; }
|
||||
const String getName() const { return name; }
|
||||
|
||||
void setName(String &name) { this->name = name; }
|
||||
void setName(const String &name) { this->name = name; }
|
||||
|
||||
bool setId(const String &newId, short int newIdType, const String &newName = "");
|
||||
|
||||
void setInitial(int rssi, float distance);
|
||||
|
||||
String getMac() const { return SMacf(address); }
|
||||
const String getMac() const;
|
||||
|
||||
short getIdType() const { return idType; }
|
||||
const short getIdType() const { return idType; }
|
||||
|
||||
String const getDiscriminator() { return disc; }
|
||||
const String getDiscriminator() const { return disc; }
|
||||
|
||||
float getDistance() const { return output.value.position; }
|
||||
const float getDistance() const { return output.value.position; }
|
||||
|
||||
int getRssi() const { return rssi; }
|
||||
const int getRssi() const { return rssi; }
|
||||
|
||||
int getNewestRssi() const { return newest; }
|
||||
const int getNewestRssi() const { return newest; }
|
||||
|
||||
int get1mRssi() const;
|
||||
const int get1mRssi() const;
|
||||
|
||||
void set1mRssi(int8_t rssi) { this->calRssi = rssi; }
|
||||
|
||||
NimBLEAddress const getAddress() { return address; }
|
||||
const NimBLEAddress getAddress() const { return address; }
|
||||
|
||||
unsigned long getMsSinceLastSeen() const { return lastSeenMillis ? millis() - lastSeenMillis : 4294967295; };
|
||||
const unsigned long getMsSinceLastSeen() const { return lastSeenMillis ? millis() - lastSeenMillis : 4294967295; };
|
||||
|
||||
unsigned long getMsSinceFirstSeen() const { return millis() - firstSeenMillis; };
|
||||
const unsigned long getMsSinceFirstSeen() const { return millis() - firstSeenMillis; };
|
||||
|
||||
bool getVisible() const { return !ignore && !hidden && hasValue; }
|
||||
const bool getVisible() const { return !ignore && !hidden; }
|
||||
|
||||
bool getAdded() const { return added; };
|
||||
const bool getAdded() const { return added; };
|
||||
|
||||
bool getIgnore() const { return ignore; };
|
||||
const bool getIgnore() const { return ignore; };
|
||||
|
||||
bool getAllowQuery() const { return allowQuery; };
|
||||
const bool getAllowQuery() const { return allowQuery; };
|
||||
|
||||
const bool hasReport() { return queryReport != nullptr; };
|
||||
const QueryReport getReport() { return *queryReport; };
|
||||
void setReport(const QueryReport &report) { queryReport = std::unique_ptr<QueryReport>(new QueryReport {report}); };
|
||||
void setReport(const QueryReport &report) { queryReport = std::unique_ptr<QueryReport>(new QueryReport{report}); };
|
||||
void clearReport() { queryReport.reset(); };
|
||||
|
||||
unsigned int getSeenCount()
|
||||
{
|
||||
unsigned int getSeenCount() {
|
||||
auto sc = seenCount - lastSeenCount;
|
||||
lastSeenCount = seenCount;
|
||||
return sc;
|
||||
|
@ -131,8 +128,7 @@ public:
|
|||
|
||||
void expire();
|
||||
|
||||
private:
|
||||
|
||||
private:
|
||||
static bool shouldHide(const String &s);
|
||||
|
||||
bool hasValue = false, added = false, close = false, reported = false, ignore = false, allowQuery = false, isQuerying = false, hidden = false, connectable = false, countable = false, counting = false;
|
||||
|
|
|
@ -8,11 +8,6 @@
|
|||
#define ESPMAC (Sprintf("%06x", CHIPID))
|
||||
#define Sprintf(f, ...) ({ char* s; asprintf(&s, f, __VA_ARGS__); const String r = s; free(s); r; })
|
||||
#define Stdprintf(f, ...) ({ char* s; asprintf(&s, f, __VA_ARGS__); const std::string r = s; free(s); r; })
|
||||
#define SMacf(f) ( \
|
||||
{ \
|
||||
const auto nativeAddress = (f).getNative(); \
|
||||
Sprintf("%02x%02x%02x%02x%02x%02x", nativeAddress[5], nativeAddress[4], nativeAddress[3], nativeAddress[2], nativeAddress[1], nativeAddress[0]); \
|
||||
})
|
||||
|
||||
std::string slugify(const std::string& text);
|
||||
String slugify(const String& text);
|
||||
|
|
|
@ -40,14 +40,16 @@ void serializeConfigs(JsonObject &root) {
|
|||
}
|
||||
}
|
||||
|
||||
void serializeDevices(JsonObject &root) {
|
||||
void serializeDevices(JsonObject &root, bool showAll) {
|
||||
JsonArray devices = root.createNestedArray("devices");
|
||||
|
||||
auto f = BleFingerprintCollection::GetCopy();
|
||||
for (auto it = f.begin(); it != f.end(); ++it) {
|
||||
if ((*it)->getVisible()) {
|
||||
bool visible = (*it)->getVisible();
|
||||
if (showAll || visible) {
|
||||
JsonObject node = devices.createNestedObject();
|
||||
(*it)->fill(&node);
|
||||
if (showAll && visible) node[F("vis")] = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -57,17 +59,24 @@ bool servingJson = false;
|
|||
void serveJson(AsyncWebServerRequest *request) {
|
||||
if (servingJson) request->send(429, "Too Many Requests", "Too Many Requests");
|
||||
servingJson = true;
|
||||
bool showAll = false;
|
||||
const String &url = request->url();
|
||||
short subJson = 0;
|
||||
if (url.indexOf("devices") > 0) subJson = 1;
|
||||
if (url.indexOf("configs") > 0) subJson = 2;
|
||||
|
||||
int paramsNr = request->params();
|
||||
for (int i = 0; i < paramsNr; i++) {
|
||||
AsyncWebParameter *p = request->getParam(i);
|
||||
if (p->name() == "showAll") showAll = true;
|
||||
}
|
||||
|
||||
auto *response = new AsyncJsonResponse(false, JSON_BUFFER_SIZE);
|
||||
JsonObject root = response->getRoot();
|
||||
serializeInfo(root);
|
||||
switch (subJson) {
|
||||
case 1:
|
||||
serializeDevices(root);
|
||||
serializeDevices(root, showAll);
|
||||
break;
|
||||
case 2:
|
||||
serializeConfigs(root);
|
||||
|
|
|
@ -18,7 +18,7 @@
|
|||
#define UPDATE_STARTED -255
|
||||
#define UPDATE_COMPLETE 255
|
||||
|
||||
#define JSON_BUFFER_SIZE 10240
|
||||
#define JSON_BUFFER_SIZE (12 * 1024)
|
||||
|
||||
#define BLE_SCAN_INTERVAL 0x80
|
||||
#define BLE_SCAN_WINDOW 0x80
|
||||
|
|
|
@ -4,7 +4,7 @@
|
|||
*/
|
||||
|
||||
// Autogenerated do not edit!!
|
||||
const uint16_t BUNDLE_CSS_L = 3724;
|
||||
const uint16_t BUNDLE_CSS_L = 3737;
|
||||
const uint8_t BUNDLE_CSS[] PROGMEM = {
|
||||
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x13, 0xed, 0x1b, 0x6b, 0x93, 0xe3, 0xb6,
|
||||
0xed, 0x73, 0xf3, 0x2b, 0x94, 0xdc, 0x64, 0x66, 0x9d, 0x4a, 0x3a, 0x49, 0x7e, 0xed, 0xca, 0x93,
|
||||
|
@ -102,143 +102,144 @@
|
|||
0x23, 0xc9, 0xb3, 0x35, 0x3d, 0x74, 0x8b, 0xac, 0xce, 0xa1, 0x9f, 0x0b, 0x50, 0x68, 0x97, 0x82,
|
||||
0xa1, 0x78, 0xae, 0xd1, 0x27, 0x7a, 0xfd, 0x69, 0x0f, 0x6d, 0xe1, 0xa8, 0x09, 0xa9, 0xf7, 0xe6,
|
||||
0x35, 0x81, 0xbc, 0x94, 0xb9, 0x37, 0x4d, 0x0f, 0x5f, 0x2b, 0x54, 0x6e, 0xd4, 0x49, 0xfe, 0xe4,
|
||||
0xee, 0xc8, 0x01, 0x52, 0x27, 0xd5, 0x8b, 0x35, 0x4f, 0xae, 0x3c, 0x2a, 0x76, 0xa3, 0xc3, 0x23,
|
||||
0x28, 0x0f, 0x89, 0xd1, 0xf3, 0xb1, 0xc7, 0xf0, 0xf6, 0xc9, 0x65, 0x8b, 0xc2, 0xf1, 0x3a, 0xbe,
|
||||
0x38, 0xbc, 0x93, 0x9b, 0x39, 0x34, 0x3d, 0x92, 0xb9, 0x2c, 0xcb, 0xf6, 0xdd, 0xec, 0xe0, 0x2c,
|
||||
0x04, 0xc4, 0x49, 0xf1, 0x0e, 0x46, 0x56, 0xe1, 0x4c, 0x0c, 0xcd, 0xa9, 0xf8, 0x58, 0x01, 0xc2,
|
||||
0x08, 0x57, 0x43, 0x42, 0x77, 0x39, 0x26, 0x65, 0x30, 0x46, 0xac, 0x89, 0xe2, 0xf4, 0x22, 0x35,
|
||||
0xd3, 0xa8, 0x85, 0x06, 0xc7, 0x9e, 0xb1, 0x38, 0xec, 0x0e, 0x59, 0xd3, 0xf3, 0xae, 0x62, 0x9c,
|
||||
0x3a, 0xc1, 0x80, 0x6b, 0x0f, 0x9f, 0x14, 0x08, 0x98, 0xc6, 0xf1, 0xbd, 0x4e, 0x63, 0x15, 0xc8,
|
||||
0x2e, 0x8d, 0x33, 0xd7, 0xe1, 0xee, 0x5a, 0xc1, 0x17, 0x3a, 0x9c, 0x0f, 0x9f, 0x65, 0xa1, 0xc3,
|
||||
0x9c, 0x14, 0xe6, 0x2a, 0xc5, 0x07, 0x05, 0xa3, 0x0d, 0x6a, 0x74, 0x76, 0x24, 0x1a, 0x60, 0x34,
|
||||
0xd8, 0xc9, 0xe5, 0x0e, 0x32, 0xcc, 0x45, 0xdd, 0xc4, 0xf1, 0x03, 0x99, 0xc2, 0xce, 0x99, 0xbc,
|
||||
0x04, 0x8c, 0xd2, 0xd7, 0x90, 0x04, 0x68, 0xd7, 0xa6, 0xa9, 0x82, 0xd2, 0xd4, 0x16, 0x60, 0x10,
|
||||
0xe4, 0x31, 0xce, 0x35, 0xe8, 0x4b, 0x72, 0x72, 0x5f, 0xa1, 0xb7, 0xf0, 0x29, 0xd1, 0xf9, 0xd5,
|
||||
0x59, 0x07, 0x12, 0xf4, 0x28, 0x20, 0x8c, 0x9d, 0x96, 0x28, 0xbb, 0x19, 0x0c, 0x59, 0x80, 0xd9,
|
||||
0x47, 0x1d, 0x45, 0x73, 0x6a, 0x67, 0x7d, 0x00, 0x8c, 0xca, 0xae, 0x1f, 0x3d, 0xc6, 0x88, 0x8e,
|
||||
0x0b, 0xd6, 0x71, 0xf1, 0xda, 0xa9, 0x4f, 0x70, 0x54, 0x70, 0x59, 0x71, 0x82, 0xcf, 0x0a, 0xff,
|
||||
0x08, 0xc3, 0x85, 0x13, 0xa3, 0x98, 0x16, 0x46, 0x0a, 0x41, 0x8f, 0xf7, 0x89, 0x09, 0x5d, 0x74,
|
||||
0xd4, 0x79, 0x01, 0xd4, 0x66, 0x39, 0xd8, 0x11, 0x8e, 0x6e, 0x35, 0xec, 0x5a, 0xa8, 0x6a, 0x3a,
|
||||
0x96, 0xf2, 0xb3, 0xc3, 0x5c, 0xcd, 0xac, 0xcc, 0xc1, 0x92, 0x26, 0xc2, 0xf4, 0xd8, 0x31, 0x20,
|
||||
0xe2, 0xa0, 0x93, 0x4b, 0x0b, 0x92, 0x64, 0x77, 0x14, 0x6c, 0x64, 0x4b, 0x96, 0x32, 0x75, 0x56,
|
||||
0x0a, 0xc7, 0x99, 0x99, 0xa4, 0x26, 0xc3, 0x2d, 0x6e, 0x5e, 0xa9, 0xd5, 0x4d, 0x3a, 0xb6, 0xa8,
|
||||
0x25, 0x16, 0x56, 0x26, 0x6b, 0xc2, 0x0a, 0xfb, 0x03, 0xcc, 0x73, 0xf3, 0x20, 0x0f, 0x22, 0xb3,
|
||||
0x7f, 0x0f, 0x9b, 0x3c, 0xef, 0x90, 0xc4, 0x15, 0x86, 0x58, 0x52, 0xd3, 0x54, 0x41, 0x77, 0x66,
|
||||
0x08, 0x91, 0xd1, 0x03, 0x75, 0xc5, 0xaf, 0x1e, 0x7c, 0xcb, 0xb1, 0x5e, 0x50, 0xf5, 0x30, 0xd5,
|
||||
0x6b, 0x36, 0x9b, 0x0d, 0xd7, 0x58, 0xdf, 0xef, 0x7c, 0x17, 0xa9, 0x28, 0x2c, 0xc4, 0xdb, 0x15,
|
||||
0x3d, 0x8e, 0x15, 0x15, 0xab, 0x97, 0x8b, 0x64, 0x7e, 0x67, 0x0a, 0x3d, 0xf6, 0x42, 0xf5, 0xd5,
|
||||
0xad, 0xf7, 0x98, 0x1a, 0x9e, 0xd6, 0x6d, 0xd6, 0x5b, 0x55, 0xc0, 0x7e, 0x89, 0x6d, 0xc1, 0x3d,
|
||||
0x63, 0x42, 0x0f, 0x8e, 0xce, 0xf1, 0x96, 0xee, 0x92, 0x56, 0x1b, 0xb2, 0x2a, 0x97, 0xd3, 0x21,
|
||||
0x8b, 0xf5, 0xc0, 0x87, 0x51, 0x1e, 0xfa, 0x51, 0x9b, 0x1d, 0x67, 0x6a, 0x3f, 0xe9, 0xeb, 0xb7,
|
||||
0xaa, 0xd7, 0x70, 0xe4, 0xe3, 0xae, 0x33, 0xa5, 0x34, 0xdd, 0x34, 0x9d, 0xc0, 0xf3, 0xee, 0xd0,
|
||||
0x5d, 0x9d, 0xe1, 0x87, 0x55, 0x41, 0xc8, 0x74, 0x1e, 0x82, 0xe0, 0xc9, 0x0a, 0xe6, 0x3e, 0xfc,
|
||||
0x2e, 0xdf, 0x9a, 0xe2, 0x45, 0x37, 0x2a, 0x9b, 0x6d, 0x5b, 0xdc, 0x90, 0x7c, 0xd7, 0xea, 0xc6,
|
||||
0x1b, 0x19, 0x6c, 0x54, 0xb4, 0xe4, 0x05, 0x79, 0x1e, 0x0b, 0x22, 0x42, 0x14, 0xcd, 0x12, 0xdb,
|
||||
0x3a, 0x7c, 0x82, 0x7f, 0x74, 0x87, 0x93, 0x24, 0xe9, 0xde, 0x20, 0x10, 0xa1, 0x4a, 0xe2, 0xb3,
|
||||
0xd8, 0xc4, 0xcf, 0x45, 0x88, 0xe6, 0xe0, 0x6e, 0xb0, 0x35, 0xb3, 0xcd, 0x53, 0xce, 0x4a, 0x37,
|
||||
0x35, 0x3d, 0x3a, 0x45, 0x33, 0x59, 0x47, 0x57, 0x68, 0x69, 0xe0, 0xc1, 0x89, 0xe0, 0x5e, 0x13,
|
||||
0x0e, 0xbb, 0x51, 0x13, 0x6e, 0xf7, 0x34, 0x71, 0xc2, 0xb0, 0x21, 0x49, 0xce, 0x7b, 0x9d, 0xab,
|
||||
0x59, 0x4f, 0x64, 0x9c, 0x7d, 0xca, 0x79, 0x61, 0x05, 0xcb, 0x85, 0xc6, 0x79, 0x3f, 0xc5, 0x75,
|
||||
0x7d, 0x07, 0xd7, 0x27, 0x6b, 0xfd, 0x68, 0x05, 0xfe, 0xea, 0x02, 0x4f, 0x66, 0x83, 0x7b, 0x34,
|
||||
0x5d, 0xcc, 0xad, 0x60, 0x01, 0x9a, 0x2e, 0xae, 0x72, 0x5d, 0xde, 0xce, 0xd5, 0xf7, 0xd6, 0x96,
|
||||
0xef, 0x2f, 0x2c, 0x3f, 0x78, 0xbc, 0xc0, 0x15, 0x32, 0xe7, 0x7b, 0x98, 0x06, 0xf3, 0x27, 0x6b,
|
||||
0xf5, 0x08, 0xff, 0x2f, 0xb0, 0xd4, 0x8a, 0xb9, 0xdd, 0xa5, 0x4a, 0x2f, 0x23, 0x66, 0x2b, 0xe1,
|
||||
0x66, 0xe9, 0xcb, 0xa5, 0x25, 0x7e, 0x2f, 0xc8, 0x3f, 0xe2, 0x14, 0xf2, 0xc9, 0xbb, 0x26, 0x60,
|
||||
0x49, 0x8d, 0xff, 0x64, 0xf9, 0x4f, 0x97, 0xf8, 0x8a, 0x96, 0xb3, 0x5e, 0x8e, 0xf8, 0x7a, 0x90,
|
||||
0x02, 0x9d, 0xdc, 0xd2, 0xf1, 0x55, 0x59, 0xd2, 0x0d, 0xf8, 0x82, 0x2b, 0x21, 0xeb, 0x52, 0x30,
|
||||
0x09, 0x5a, 0x28, 0x90, 0x2f, 0x20, 0xab, 0x1e, 0x22, 0xa9, 0x0e, 0x90, 0x80, 0x0a, 0x20, 0xdf,
|
||||
0xc8, 0x54, 0x11, 0x54, 0x6c, 0x50, 0x1e, 0x23, 0xf2, 0x87, 0x44, 0x5c, 0xae, 0x41, 0xa9, 0x94,
|
||||
0x39, 0x40, 0xe2, 0x36, 0x24, 0x5f, 0x4f, 0x91, 0xaf, 0x15, 0xf9, 0x72, 0x48, 0xee, 0x4f, 0xb2,
|
||||
0xf7, 0x35, 0xfe, 0x2b, 0xb3, 0xc3, 0x24, 0xbd, 0x20, 0x3f, 0x6a, 0x43, 0x14, 0x5b, 0x60, 0x3f,
|
||||
0x48, 0xba, 0xbd, 0x79, 0x8c, 0xc8, 0x37, 0x89, 0x0c, 0x2d, 0x58, 0x0e, 0x1a, 0x28, 0x9e, 0xc1,
|
||||
0x88, 0x7c, 0x4c, 0xdd, 0x13, 0x7f, 0x70, 0x97, 0x23, 0xfa, 0xd5, 0x04, 0xff, 0x55, 0x2f, 0x60,
|
||||
0x3e, 0xea, 0xb0, 0x1e, 0xd3, 0xaf, 0x15, 0xf9, 0xa3, 0x49, 0x1e, 0x98, 0xc4, 0x01, 0x23, 0x65,
|
||||
0x77, 0x2e, 0xd4, 0x6a, 0xfc, 0xf6, 0x85, 0x97, 0x6b, 0x69, 0x5b, 0xa0, 0x44, 0x86, 0xa5, 0x21,
|
||||
0x65, 0x72, 0xc5, 0x40, 0xcc, 0xb6, 0x3a, 0x96, 0x01, 0x04, 0x72, 0x7e, 0xd0, 0xef, 0xdb, 0x7c,
|
||||
0xf7, 0x91, 0x6b, 0xac, 0xdf, 0x0d, 0x05, 0xd2, 0x84, 0x5c, 0x8f, 0xfd, 0x80, 0xde, 0x0f, 0x46,
|
||||
0xf4, 0xbe, 0x1c, 0x22, 0xbf, 0xc8, 0xce, 0x34, 0xfa, 0x29, 0xf6, 0xfe, 0x80, 0xbd, 0xa1, 0xce,
|
||||
0x35, 0xee, 0x87, 0x5a, 0xe7, 0x3e, 0xc1, 0x9c, 0xa7, 0xd3, 0x94, 0x24, 0x65, 0x66, 0xd0, 0x2f,
|
||||
0xc2, 0xe6, 0x9e, 0x27, 0x70, 0x19, 0x86, 0xdd, 0x30, 0x1b, 0x20, 0x97, 0x0a, 0xc9, 0xef, 0xa0,
|
||||
0x07, 0xc8, 0x85, 0x42, 0xd6, 0x38, 0x23, 0xf4, 0x02, 0x75, 0x80, 0x5e, 0x29, 0x74, 0x93, 0x90,
|
||||
0x7c, 0x80, 0xf2, 0x29, 0xaa, 0x2d, 0x4b, 0x5c, 0x45, 0xa8, 0xc6, 0xe6, 0x75, 0x9a, 0x42, 0x9c,
|
||||
0xdc, 0x14, 0x23, 0xe6, 0x06, 0xcb, 0xee, 0xbc, 0xb1, 0x58, 0xe4, 0x5f, 0xc8, 0x70, 0xc6, 0x40,
|
||||
0x7d, 0x40, 0xd3, 0x02, 0xfe, 0x72, 0x65, 0xf9, 0xab, 0xb9, 0xe5, 0xaf, 0xb5, 0x28, 0xa6, 0x53,
|
||||
0xd3, 0x38, 0xd6, 0x33, 0x5c, 0x5e, 0x67, 0x38, 0xb5, 0x83, 0x9c, 0x67, 0xb8, 0xba, 0xca, 0x70,
|
||||
0xbd, 0xb4, 0x1e, 0x97, 0xd6, 0xd3, 0xd3, 0x2d, 0xdc, 0x1e, 0xaf, 0x72, 0x83, 0xac, 0x61, 0xe1,
|
||||
0x5b, 0xcb, 0x9b, 0x06, 0xfb, 0x74, 0x7d, 0xb0, 0x6b, 0xd8, 0x02, 0xac, 0xf9, 0x35, 0xdd, 0xb4,
|
||||
0xfd, 0xea, 0x2c, 0xab, 0xc9, 0x6d, 0xca, 0xe4, 0xa6, 0x5d, 0x1a, 0xa9, 0xf9, 0x98, 0xb8, 0x90,
|
||||
0xe2, 0x05, 0x4a, 0x8d, 0xf6, 0xe6, 0x89, 0x9a, 0xe8, 0x74, 0x5e, 0xee, 0xff, 0x54, 0x24, 0xaf,
|
||||
0x84, 0x75, 0xc3, 0x52, 0x1e, 0x24, 0x8d, 0xd6, 0x1c, 0x7e, 0x3d, 0x8b, 0xd5, 0x0c, 0x79, 0xd5,
|
||||
0xc8, 0xf5, 0x67, 0x36, 0x47, 0x05, 0xf0, 0x4b, 0xeb, 0x43, 0x06, 0xf6, 0x4c, 0xe5, 0xaf, 0x67,
|
||||
0xd6, 0x9f, 0x7f, 0x34, 0x9a, 0x11, 0xd3, 0x69, 0xaa, 0x8d, 0x76, 0x6d, 0xac, 0x28, 0xc6, 0x85,
|
||||
0x4b, 0x5b, 0x55, 0x1a, 0x67, 0xf6, 0x90, 0xec, 0x02, 0x9e, 0xa3, 0xc0, 0x18, 0xe2, 0xea, 0x57,
|
||||
0x5e, 0x60, 0x8b, 0xcb, 0x4e, 0xf6, 0xb8, 0x88, 0x96, 0xb0, 0x52, 0x1a, 0xe2, 0xf9, 0x9f, 0x5e,
|
||||
0x07, 0x5a, 0x33, 0x9c, 0xf5, 0x4a, 0xf7, 0xd5, 0x42, 0x0d, 0x28, 0xeb, 0x84, 0x1a, 0x48, 0x55,
|
||||
0x08, 0x35, 0x58, 0x5f, 0x1b, 0xd4, 0x80, 0xbc, 0x2a, 0xa8, 0x01, 0x64, 0xdd, 0x4f, 0x07, 0xd1,
|
||||
0x8a, 0x9f, 0xd6, 0xd6, 0x6a, 0x9c, 0x74, 0x6d, 0xd0, 0xd8, 0xc6, 0x8a, 0x68, 0xdc, 0x96, 0x75,
|
||||
0xa7, 0x41, 0xe2, 0x56, 0xbc, 0x4f, 0x71, 0xfd, 0x65, 0xbd, 0xd1, 0x10, 0x25, 0xf0, 0x00, 0xc1,
|
||||
0xc7, 0x90, 0xf5, 0xb1, 0xcd, 0xdc, 0xcc, 0xd6, 0x4f, 0x0b, 0xb6, 0xf1, 0xd8, 0x45, 0x40, 0xc1,
|
||||
0x54, 0x29, 0x7b, 0xed, 0xf2, 0x8c, 0x75, 0xce, 0x0d, 0xc9, 0xe8, 0x84, 0xec, 0xda, 0x5c, 0x14,
|
||||
0x47, 0xda, 0x2d, 0x89, 0x9c, 0x2d, 0xfe, 0x44, 0x70, 0xf5, 0xe0, 0x2e, 0xa8, 0x33, 0x05, 0xb6,
|
||||
0x3f, 0x54, 0x5c, 0x78, 0xec, 0x7d, 0x9a, 0x8b, 0x4e, 0xbf, 0x48, 0xb6, 0xe4, 0xce, 0xce, 0x4b,
|
||||
0x93, 0x52, 0x83, 0xfa, 0xe4, 0x26, 0xb4, 0x42, 0xfa, 0x21, 0x94, 0x67, 0x15, 0x88, 0x8b, 0x21,
|
||||
0x03, 0xdd, 0x9a, 0xdc, 0xce, 0x3d, 0x6b, 0xb5, 0x18, 0x6e, 0x0a, 0xc3, 0xd4, 0xb6, 0x17, 0x20,
|
||||
0x0f, 0x2e, 0xf7, 0x09, 0xb8, 0xe1, 0xf8, 0x62, 0x88, 0x08, 0xee, 0x16, 0x31, 0x79, 0x4a, 0x9c,
|
||||
0x12, 0x31, 0xd8, 0x40, 0x74, 0x21, 0xff, 0xc5, 0x36, 0x32, 0x62, 0xfd, 0x74, 0x23, 0xeb, 0xeb,
|
||||
0x7b, 0x0a, 0x7b, 0xd0, 0xf2, 0x21, 0xfc, 0x04, 0x56, 0x0f, 0xd9, 0xe7, 0xee, 0x13, 0x7b, 0x62,
|
||||
0x74, 0x80, 0x0c, 0x42, 0x61, 0xe5, 0x91, 0x9c, 0x4e, 0x3f, 0x24, 0x33, 0x82, 0xf0, 0xc6, 0x03,
|
||||
0xb6, 0xbf, 0x80, 0x40, 0xfd, 0x04, 0x8a, 0x2c, 0xe7, 0x97, 0x0e, 0xd8, 0x42, 0x94, 0x8c, 0x4a,
|
||||
0xb4, 0xb8, 0x2a, 0xe4, 0xc8, 0x97, 0x36, 0x34, 0x78, 0xf2, 0x37, 0x90, 0xfa, 0x6b, 0x1d, 0xe3,
|
||||
0x25, 0x4b, 0xc0, 0x0a, 0xf1, 0x9c, 0x17, 0x0b, 0x89, 0x0b, 0x5d, 0xdb, 0x89, 0x4b, 0xa0, 0x61,
|
||||
0x00, 0x65, 0x05, 0xf7, 0x99, 0xe5, 0xb1, 0x9f, 0xc9, 0x10, 0xcc, 0x2a, 0x0e, 0xb3, 0x69, 0x9c,
|
||||
0x88, 0xe2, 0xa3, 0xdb, 0xa4, 0x0b, 0x32, 0x58, 0x09, 0x69, 0x01, 0x23, 0xfb, 0xfd, 0x25, 0x71,
|
||||
0xa6, 0xbc, 0xbb, 0xb6, 0x8b, 0xe9, 0x4d, 0x62, 0xb4, 0x35, 0x68, 0xbb, 0xc6, 0xd0, 0x82, 0x53,
|
||||
0xd3, 0xce, 0xa5, 0xa8, 0x49, 0x9f, 0xb8, 0x85, 0x9b, 0x9e, 0x77, 0xbd, 0x1f, 0xcc, 0xfa, 0x1f,
|
||||
0x69, 0x42, 0x8c, 0xac, 0x87, 0xb2, 0xc2, 0x3b, 0x5c, 0xd5, 0xbc, 0xb7, 0x53, 0x47, 0x09, 0xce,
|
||||
0x70, 0x18, 0xa3, 0xea, 0x79, 0xd6, 0xb9, 0xf4, 0x8f, 0x72, 0x41, 0xa3, 0x06, 0x71, 0xdd, 0xf9,
|
||||
0x26, 0x6b, 0x10, 0x23, 0xe7, 0x1b, 0xcb, 0x58, 0xdd, 0x2e, 0x63, 0x9c, 0x54, 0x9e, 0x15, 0x20,
|
||||
0x8c, 0xb9, 0xba, 0xbd, 0x32, 0x30, 0x5f, 0x03, 0xe7, 0x4b, 0x61, 0x47, 0x71, 0x36, 0xd4, 0xbe,
|
||||
0xca, 0x79, 0x42, 0xed, 0x0b, 0x8c, 0xef, 0xa8, 0x50, 0x41, 0xe2, 0xb9, 0x02, 0xde, 0xfe, 0x6d,
|
||||
0x8c, 0x1f, 0xef, 0xb0, 0xc5, 0x28, 0x50, 0x4e, 0x31, 0xee, 0xa3, 0xa4, 0x7f, 0x35, 0xe7, 0x9e,
|
||||
0xdc, 0x39, 0xcc, 0x10, 0x69, 0xb2, 0x9d, 0x5f, 0x67, 0xeb, 0xc1, 0x94, 0xf9, 0xc0, 0xda, 0x7f,
|
||||
0xba, 0x9d, 0xed, 0xaf, 0x74, 0xbe, 0xd2, 0xd8, 0xfe, 0x6a, 0x47, 0x05, 0xce, 0xd3, 0xc8, 0x03,
|
||||
0xd6, 0x77, 0xef, 0xa1, 0xd7, 0x2a, 0x97, 0xa6, 0x18, 0xe9, 0xd1, 0xf7, 0x89, 0xb9, 0xcd, 0xaf,
|
||||
0xf5, 0x2d, 0x95, 0xd9, 0xe9, 0xa6, 0xfd, 0xf4, 0x0e, 0x6b, 0x8d, 0x22, 0xe8, 0xe3, 0xdd, 0x11,
|
||||
0x74, 0x22, 0x71, 0x32, 0xe2, 0xe7, 0x84, 0x2c, 0x65, 0xb4, 0xfb, 0x64, 0x8d, 0xad, 0x66, 0x88,
|
||||
0x52, 0xb1, 0xba, 0xbf, 0x5e, 0x5c, 0x2d, 0xbc, 0xf2, 0x00, 0x11, 0xba, 0xce, 0x3e, 0x84, 0x19,
|
||||
0xbd, 0xae, 0xd6, 0xee, 0x85, 0x20, 0x79, 0xa0, 0xe0, 0x89, 0x6b, 0x56, 0x0a, 0x9e, 0xb8, 0xc0,
|
||||
0x64, 0x4c, 0xd8, 0x4d, 0x65, 0xba, 0xd7, 0x2e, 0x2a, 0xe7, 0xbc, 0x34, 0x25, 0x79, 0x39, 0xea,
|
||||
0xae, 0xb2, 0xbf, 0x77, 0x04, 0xd0, 0x90, 0x40, 0xde, 0xbb, 0x4c, 0x10, 0x4a, 0x14, 0xef, 0x20,
|
||||
0xef, 0x00, 0x11, 0xf3, 0xa1, 0x33, 0x57, 0x82, 0x1c, 0xc9, 0x3b, 0xd0, 0x72, 0xa7, 0x51, 0x14,
|
||||
0x0d, 0xa6, 0x0a, 0x8c, 0xf2, 0xa2, 0x5a, 0xf4, 0xb9, 0xa7, 0x26, 0xc9, 0xba, 0x1c, 0x75, 0x31,
|
||||
0xb2, 0x68, 0x37, 0xae, 0x22, 0xea, 0x62, 0x2e, 0x14, 0xef, 0x14, 0x7a, 0xaa, 0x46, 0xc6, 0xd1,
|
||||
0xaa, 0x0a, 0x64, 0x0f, 0xa8, 0xa7, 0x4a, 0x42, 0x13, 0x8e, 0xb0, 0x5e, 0x3d, 0x32, 0x47, 0xc8,
|
||||
0x62, 0xae, 0xfb, 0xa8, 0x00, 0x3a, 0x37, 0x35, 0x9f, 0x9f, 0xe1, 0xe4, 0x7b, 0xc1, 0x82, 0xb1,
|
||||
0x4a, 0xf7, 0xdc, 0xda, 0xc1, 0xd0, 0x74, 0xf3, 0xb1, 0xe1, 0x38, 0xab, 0xcf, 0xd8, 0x45, 0xb5,
|
||||
0x5b, 0xbf, 0x60, 0x38, 0xb9, 0x3a, 0x71, 0x8d, 0x76, 0xeb, 0x66, 0xd8, 0x1a, 0x78, 0x1b, 0xa9,
|
||||
0xbf, 0x49, 0x49, 0xf4, 0x7c, 0xad, 0x8f, 0x0d, 0x84, 0xef, 0x8a, 0xea, 0x3a, 0x6f, 0xe3, 0x21,
|
||||
0x6d, 0x53, 0x0d, 0xf1, 0x56, 0x93, 0x58, 0xfc, 0x61, 0xfb, 0x79, 0x9d, 0x3e, 0xcb, 0x10, 0xc9,
|
||||
0x25, 0x7a, 0x8e, 0x93, 0x16, 0x55, 0xc3, 0x2a, 0x7d, 0xe2, 0x1b, 0xd8, 0x71, 0x21, 0xf6, 0x57,
|
||||
0xe1, 0xe1, 0xd2, 0x12, 0xa1, 0x24, 0xf3, 0x57, 0x3f, 0x6f, 0xd7, 0x6d, 0xa0, 0xdd, 0xa3, 0x84,
|
||||
0x6f, 0xa2, 0x28, 0xea, 0xdf, 0x45, 0xf7, 0x4b, 0x75, 0xe1, 0xf5, 0x73, 0x43, 0xbf, 0x65, 0xb1,
|
||||
0x99, 0x7a, 0xf0, 0x62, 0x70, 0x9d, 0xfc, 0x12, 0x53, 0x12, 0x98, 0x74, 0xec, 0xbd, 0xb8, 0x4f,
|
||||
0xbf, 0x38, 0x61, 0xf5, 0x5f, 0x07, 0x32, 0xee, 0xae, 0x7d, 0xe3, 0xd9, 0x09, 0x1d, 0xed, 0xe2,
|
||||
0x0c, 0xa3, 0xe0, 0x5e, 0x4e, 0xc8, 0x60, 0x14, 0xd2, 0xaf, 0x35, 0xc9, 0xb7, 0xd6, 0xf4, 0xc9,
|
||||
0x97, 0xf9, 0x4d, 0x18, 0xf6, 0x38, 0x24, 0x45, 0x5b, 0x9c, 0x9a, 0x2a, 0x44, 0xb0, 0xd6, 0x2a,
|
||||
0x18, 0x6e, 0x93, 0xf0, 0x47, 0xdd, 0x26, 0x67, 0x76, 0x11, 0x4c, 0x5f, 0xf2, 0xff, 0xe3, 0xeb,
|
||||
0xe8, 0xe3, 0xcc, 0x1e, 0xba, 0x4d, 0x6f, 0x38, 0xf6, 0xa5, 0x30, 0x5f, 0x1d, 0x89, 0xde, 0x2c,
|
||||
0x16, 0x8b, 0xcd, 0xf0, 0xdd, 0xb5, 0xba, 0xf5, 0x99, 0xe3, 0xc3, 0x46, 0x73, 0x34, 0x26, 0x55,
|
||||
0x49, 0x18, 0x59, 0x28, 0x2d, 0x50, 0xc3, 0x02, 0xc7, 0xe0, 0x11, 0x83, 0xc3, 0xac, 0xaf, 0x9b,
|
||||
0x85, 0x7d, 0x8d, 0xe5, 0x82, 0xf2, 0xf5, 0xc7, 0xd9, 0xd9, 0x03, 0xdc, 0x9b, 0x18, 0xfb, 0xa7,
|
||||
0xd2, 0xec, 0x2c, 0x5e, 0x73, 0x9f, 0xd3, 0x20, 0x30, 0x62, 0x88, 0x4f, 0x77, 0x93, 0xc8, 0xd4,
|
||||
0x7f, 0xd2, 0x06, 0x22, 0x54, 0xb3, 0x0b, 0xe8, 0x68, 0x6c, 0x4b, 0x71, 0xf1, 0xa3, 0xef, 0x53,
|
||||
0x9b, 0x8b, 0xef, 0x43, 0x0c, 0xf7, 0xd8, 0x18, 0x0f, 0xb8, 0x74, 0x6b, 0xbb, 0xdb, 0x26, 0xbf,
|
||||
0xb4, 0x98, 0xc0, 0x12, 0x9b, 0xf1, 0x6c, 0x52, 0x97, 0x1a, 0xde, 0xa0, 0xc3, 0x68, 0xf5, 0x2f,
|
||||
0xe3, 0xb0, 0xd9, 0xb8, 0xac, 0x63, 0x7f, 0xeb, 0x87, 0xb3, 0xcf, 0x49, 0x56, 0xd2, 0x38, 0x06,
|
||||
0x07, 0x66, 0xf1, 0x00, 0x48, 0x87, 0xd1, 0x5b, 0x80, 0xdd, 0xc8, 0xc7, 0xf8, 0x9d, 0xdf, 0xc9,
|
||||
0x65, 0x61, 0xd6, 0x44, 0xca, 0x1b, 0xc0, 0xcf, 0xfa, 0x88, 0xe2, 0xa3, 0x79, 0x14, 0x55, 0xc7,
|
||||
0x4e, 0xbd, 0xce, 0xf4, 0xbc, 0x85, 0xa7, 0xe9, 0xbc, 0x00, 0x8d, 0x8d, 0x2b, 0x8a, 0xcd, 0xd9,
|
||||
0x7b, 0x89, 0xff, 0x00, 0xf5, 0xfe, 0xd7, 0x66, 0x48, 0x39, 0x00, 0x00
|
||||
0xbe, 0x90, 0x9a, 0xd0, 0x53, 0x1d, 0xfb, 0x4b, 0x52, 0x3a, 0x1e, 0x01, 0x3a, 0xb9, 0x3b, 0x72,
|
||||
0x80, 0xb4, 0x4a, 0x71, 0x64, 0xcd, 0x93, 0x2b, 0x8f, 0x91, 0xdd, 0xe8, 0x60, 0x09, 0x03, 0x83,
|
||||
0xa4, 0xe9, 0xf9, 0xd8, 0x63, 0x78, 0xfb, 0xe4, 0xb2, 0x05, 0xe3, 0x78, 0x1d, 0x5f, 0x38, 0xde,
|
||||
0xc9, 0xcd, 0x1c, 0x9a, 0x3a, 0xc9, 0x3c, 0x97, 0x9d, 0x04, 0xdc, 0xec, 0xe0, 0x2c, 0x04, 0xc4,
|
||||
0x49, 0xf1, 0x0e, 0x46, 0x5d, 0xe1, 0x4c, 0x0c, 0xdb, 0xa9, 0xb8, 0x1d, 0x00, 0xc2, 0x08, 0x57,
|
||||
0x43, 0x42, 0x77, 0x39, 0x26, 0x65, 0x30, 0x46, 0xac, 0x89, 0xe2, 0xf4, 0x22, 0x6d, 0xd3, 0xa8,
|
||||
0x85, 0x06, 0xc7, 0x9e, 0xb1, 0x38, 0x08, 0x0f, 0x59, 0xd3, 0xb3, 0xb0, 0x62, 0x9c, 0x3a, 0xc1,
|
||||
0x80, 0x6b, 0x0f, 0x9f, 0x14, 0x08, 0x98, 0xc6, 0xf1, 0xbd, 0x4e, 0x63, 0x15, 0xc8, 0x2e, 0x8d,
|
||||
0x33, 0xd7, 0xe1, 0xee, 0x5a, 0xc1, 0x17, 0x3a, 0x9c, 0x0f, 0x9f, 0x65, 0xa8, 0xc3, 0x7c, 0x15,
|
||||
0xe6, 0x2a, 0xc5, 0x07, 0x05, 0xa3, 0x0d, 0x6a, 0x74, 0x76, 0x5c, 0x1a, 0x60, 0x34, 0xd8, 0xc9,
|
||||
0xe5, 0xce, 0x33, 0xcc, 0x53, 0xdd, 0xc4, 0xf1, 0x03, 0x99, 0xde, 0xce, 0x99, 0xbc, 0x04, 0x8c,
|
||||
0xd2, 0xd7, 0x97, 0x04, 0x68, 0xd7, 0xa6, 0xa9, 0x82, 0xd2, 0xb4, 0x17, 0x60, 0xb0, 0x01, 0x60,
|
||||
0x9c, 0x6b, 0xd0, 0x97, 0xe4, 0xe4, 0xbe, 0x42, 0x6f, 0xe1, 0x6f, 0xa2, 0xf3, 0xab, 0xb3, 0x0e,
|
||||
0x24, 0xe8, 0x51, 0x40, 0x18, 0x3b, 0x2d, 0x89, 0x76, 0x33, 0x18, 0xb2, 0x00, 0xb3, 0x8f, 0x3a,
|
||||
0x8a, 0xe6, 0xdb, 0xce, 0xfa, 0x00, 0x18, 0x95, 0x79, 0x3f, 0x7a, 0x8c, 0x11, 0x1d, 0x17, 0xac,
|
||||
0xf1, 0xe2, 0xb5, 0x53, 0x9f, 0xe0, 0x18, 0xe1, 0xb2, 0xc2, 0x05, 0x9f, 0x15, 0xfe, 0x11, 0x86,
|
||||
0x0b, 0xa7, 0x49, 0x31, 0x2d, 0x8c, 0x14, 0x02, 0x22, 0xef, 0x13, 0x13, 0xba, 0x20, 0xa9, 0xf3,
|
||||
0x02, 0xa8, 0xcd, 0x72, 0xb0, 0x23, 0x1c, 0xeb, 0x6a, 0xd8, 0xd1, 0x50, 0xd5, 0x74, 0xec, 0x38,
|
||||
0xc0, 0x0e, 0x7a, 0x35, 0xb3, 0x32, 0x07, 0x4b, 0x9a, 0x08, 0xd3, 0x23, 0xc9, 0x80, 0x88, 0x83,
|
||||
0x4e, 0x2e, 0x2d, 0x56, 0x92, 0xdd, 0x51, 0xb0, 0x91, 0x2d, 0x59, 0xe6, 0xd4, 0x59, 0x29, 0x1c,
|
||||
0x67, 0x66, 0x92, 0x9a, 0x0c, 0xb7, 0xb8, 0x79, 0xa5, 0x56, 0x37, 0xe9, 0xd8, 0x82, 0x97, 0x58,
|
||||
0x58, 0x99, 0xac, 0x09, 0x2b, 0xec, 0x0f, 0x30, 0xcf, 0xcd, 0x83, 0x3c, 0xa4, 0xcc, 0xfe, 0x3d,
|
||||
0x6c, 0xf2, 0x9c, 0x44, 0x12, 0x57, 0x18, 0xe2, 0x4c, 0x4d, 0xd3, 0x08, 0xdd, 0x99, 0x21, 0x7c,
|
||||
0x46, 0x0f, 0xd4, 0x15, 0xbf, 0x7a, 0xf0, 0x2d, 0xc7, 0x7a, 0x41, 0xd5, 0xc3, 0x54, 0xaf, 0xd9,
|
||||
0x6c, 0x36, 0x5c, 0x63, 0x7d, 0xbf, 0xf3, 0x5d, 0xa4, 0xa2, 0xb0, 0x10, 0x6f, 0x57, 0xf4, 0x38,
|
||||
0x56, 0x54, 0xac, 0x5e, 0x2e, 0x92, 0xf9, 0x9d, 0x29, 0xf4, 0xd8, 0x0b, 0xd5, 0x57, 0xb7, 0xde,
|
||||
0x63, 0x6a, 0x78, 0x5a, 0xb7, 0x59, 0x6f, 0x55, 0x01, 0xfb, 0x25, 0xb6, 0x05, 0xf7, 0x8c, 0x09,
|
||||
0x3d, 0x54, 0x3a, 0xc7, 0x5b, 0xba, 0x4b, 0x5a, 0x6d, 0xc8, 0xaa, 0x94, 0x4e, 0x87, 0x2c, 0xd6,
|
||||
0x03, 0x1f, 0x46, 0x79, 0xe8, 0x47, 0x6d, 0x76, 0x9c, 0xa9, 0xbd, 0xa6, 0xaf, 0xed, 0xaa, 0x5e,
|
||||
0xc3, 0x91, 0x8f, 0xbb, 0xce, 0x94, 0xd2, 0x74, 0x43, 0x75, 0x02, 0xcf, 0xbb, 0x43, 0x77, 0x75,
|
||||
0xbe, 0x1f, 0x56, 0x0c, 0x21, 0x0b, 0x7a, 0x08, 0x82, 0x27, 0x2b, 0x98, 0xfb, 0xf0, 0xbb, 0x7c,
|
||||
0x6b, 0x8a, 0x17, 0xdd, 0xa8, 0x6c, 0xb6, 0xa5, 0x71, 0x43, 0xf2, 0x1d, 0xad, 0x1b, 0x6f, 0x72,
|
||||
0xb0, 0x51, 0xd1, 0x72, 0x18, 0xe4, 0x80, 0x2c, 0x88, 0x08, 0x51, 0x34, 0x83, 0x6c, 0xeb, 0xf0,
|
||||
0x09, 0xfe, 0xd1, 0xdd, 0x4f, 0x92, 0xa4, 0x7b, 0x83, 0x40, 0x84, 0x2a, 0x89, 0xcf, 0x62, 0x13,
|
||||
0x3f, 0x17, 0x21, 0x9a, 0x83, 0xbb, 0xc1, 0xb6, 0xcd, 0x36, 0x56, 0x39, 0x2b, 0xdd, 0xd4, 0xf4,
|
||||
0xe8, 0x14, 0xcd, 0x64, 0x8d, 0x5d, 0xa1, 0xa5, 0x81, 0x07, 0xa7, 0x85, 0x7b, 0x4d, 0x38, 0xec,
|
||||
0x46, 0x4d, 0xb8, 0xdd, 0xd3, 0xa4, 0x0a, 0xc3, 0x86, 0x24, 0x39, 0xef, 0x75, 0xae, 0x66, 0xad,
|
||||
0x91, 0x71, 0xf6, 0x29, 0xe7, 0x85, 0x15, 0x2c, 0x17, 0x1a, 0xe7, 0xfd, 0x14, 0xd7, 0xf5, 0x1d,
|
||||
0x5c, 0x9f, 0xac, 0xf5, 0xa3, 0x15, 0xf8, 0xab, 0x0b, 0x3c, 0x99, 0x0d, 0xee, 0xd1, 0x74, 0x31,
|
||||
0xb7, 0x82, 0x05, 0x68, 0xba, 0xb8, 0xca, 0x75, 0x79, 0x3b, 0x57, 0xdf, 0x5b, 0x5b, 0xbe, 0xbf,
|
||||
0xb0, 0xfc, 0xe0, 0xf1, 0x02, 0x57, 0xc8, 0xaa, 0xef, 0x61, 0x1a, 0xcc, 0x9f, 0xac, 0xd5, 0x23,
|
||||
0xfc, 0xbf, 0xc0, 0x52, 0x2b, 0xf4, 0x76, 0x97, 0xaa, 0xc0, 0x8c, 0x98, 0xad, 0x84, 0x9b, 0xa5,
|
||||
0x2f, 0x97, 0x96, 0xf8, 0xbd, 0x20, 0xff, 0x88, 0x53, 0xc8, 0x35, 0xef, 0x9a, 0x80, 0x25, 0x35,
|
||||
0xfe, 0x93, 0xe5, 0x3f, 0x5d, 0xe2, 0x2b, 0x5a, 0xce, 0x7a, 0x39, 0xe2, 0xeb, 0x41, 0x0a, 0x74,
|
||||
0x72, 0x4b, 0xc7, 0x57, 0x25, 0x4b, 0x37, 0xe0, 0x0b, 0xae, 0x84, 0xac, 0x4b, 0xc1, 0x24, 0x68,
|
||||
0xa1, 0x40, 0xbe, 0x80, 0xac, 0x7a, 0x88, 0xa4, 0x3a, 0x40, 0x02, 0x2a, 0x80, 0x7c, 0x23, 0x53,
|
||||
0x05, 0x52, 0xb1, 0x41, 0x79, 0x8c, 0xc8, 0x1f, 0x12, 0x71, 0xb9, 0x06, 0xa5, 0x52, 0xe6, 0x00,
|
||||
0x89, 0xdb, 0x90, 0x7c, 0x3d, 0x45, 0xbe, 0x56, 0xe4, 0xcb, 0x21, 0xb9, 0x3f, 0xc9, 0xde, 0xd7,
|
||||
0xf8, 0xaf, 0xcc, 0x0e, 0x93, 0xf4, 0x82, 0xfc, 0xa8, 0x0d, 0x51, 0x6c, 0x81, 0xfd, 0x20, 0xe9,
|
||||
0xf6, 0xe6, 0x31, 0x22, 0xdf, 0x24, 0x32, 0xb4, 0x60, 0x39, 0x68, 0xa0, 0x78, 0x06, 0x23, 0xf2,
|
||||
0x31, 0x75, 0x4f, 0xfc, 0xc1, 0x5d, 0x8e, 0xe8, 0x57, 0x13, 0xfc, 0x57, 0xbd, 0x80, 0xf9, 0xa8,
|
||||
0xc3, 0x7a, 0x4c, 0xbf, 0x56, 0xe4, 0x8f, 0x26, 0x79, 0x60, 0x12, 0x07, 0x8c, 0x94, 0xdd, 0xc7,
|
||||
0x50, 0xab, 0xf1, 0x9b, 0x19, 0x5e, 0xca, 0xa5, 0x6d, 0x81, 0x12, 0x19, 0x96, 0x86, 0x94, 0xc9,
|
||||
0x15, 0x03, 0x31, 0xdb, 0xea, 0x58, 0x06, 0x10, 0xc8, 0xf9, 0x41, 0xbf, 0x8b, 0xf3, 0xdd, 0x47,
|
||||
0xae, 0xb1, 0x7e, 0x6f, 0x14, 0x48, 0x13, 0x72, 0x3d, 0xf6, 0x03, 0x7a, 0x3f, 0x18, 0xd1, 0xfb,
|
||||
0x72, 0x88, 0xfc, 0x92, 0x3b, 0xd3, 0xe8, 0xa7, 0xd8, 0xfb, 0x03, 0xf6, 0x86, 0x3a, 0xd7, 0xb8,
|
||||
0x1f, 0x6a, 0x9d, 0xfb, 0x04, 0x73, 0x9e, 0x4e, 0x53, 0x92, 0x94, 0x99, 0x41, 0xbf, 0x24, 0x9b,
|
||||
0x7b, 0x9e, 0xc0, 0x65, 0x18, 0x76, 0xc3, 0x6c, 0x80, 0x5c, 0x2a, 0x24, 0xbf, 0x9f, 0x1e, 0x20,
|
||||
0x17, 0x0a, 0x59, 0xe3, 0x8c, 0xd0, 0xcb, 0xd5, 0x01, 0x7a, 0xa5, 0xd0, 0x4d, 0x42, 0xf2, 0x01,
|
||||
0xca, 0xa7, 0xa8, 0xb6, 0x2c, 0x71, 0x15, 0xa1, 0x1a, 0x9b, 0x57, 0x6d, 0x0a, 0x71, 0x72, 0x53,
|
||||
0x8c, 0x98, 0x1b, 0x2c, 0xbb, 0xf3, 0xc6, 0x62, 0x91, 0x7f, 0x21, 0xc3, 0x19, 0x03, 0xf5, 0x01,
|
||||
0x4d, 0x0b, 0xf8, 0xcb, 0x95, 0xe5, 0xaf, 0xe6, 0x96, 0xbf, 0xd6, 0xa2, 0x98, 0x4e, 0x4d, 0xe3,
|
||||
0x58, 0xcf, 0x70, 0x79, 0x9d, 0xe1, 0xd4, 0x0e, 0x72, 0x9e, 0xe1, 0xea, 0x2a, 0xc3, 0xf5, 0xd2,
|
||||
0x7a, 0x5c, 0x5a, 0x4f, 0x4f, 0xb7, 0x70, 0x7b, 0xbc, 0xca, 0x0d, 0xb2, 0x86, 0x85, 0x6f, 0x2d,
|
||||
0x6f, 0x1a, 0xec, 0xd3, 0xf5, 0xc1, 0xae, 0x61, 0x0b, 0xb0, 0xe6, 0xd7, 0x74, 0xd3, 0xf6, 0xab,
|
||||
0xb3, 0xac, 0x26, 0xb7, 0x29, 0x93, 0x9b, 0x76, 0xa1, 0xa4, 0xe6, 0x63, 0xe2, 0xb2, 0x8a, 0x17,
|
||||
0x2f, 0x35, 0xda, 0x9b, 0x27, 0x6a, 0xa2, 0xd3, 0x79, 0xb9, 0xff, 0x53, 0x91, 0xbc, 0x4a, 0xd6,
|
||||
0x0d, 0xcb, 0x7c, 0x90, 0x34, 0x5a, 0x73, 0xf8, 0xf5, 0x2c, 0x56, 0x4f, 0xe4, 0x15, 0x25, 0xd7,
|
||||
0x9f, 0xd9, 0x1c, 0x15, 0xc0, 0x2f, 0xad, 0x1d, 0x19, 0xd8, 0x33, 0x55, 0xc1, 0x9e, 0x59, 0x7f,
|
||||
0xfe, 0xd1, 0x68, 0x46, 0x4c, 0xa7, 0xa9, 0x36, 0xda, 0x95, 0xb2, 0xa2, 0x18, 0x17, 0x35, 0x6d,
|
||||
0x55, 0x85, 0x9c, 0xd9, 0x43, 0xb2, 0x0b, 0x78, 0x8e, 0x02, 0x63, 0x88, 0x6b, 0x61, 0x79, 0xb9,
|
||||
0x2d, 0x2e, 0x42, 0xd9, 0xc3, 0x23, 0x5a, 0xc2, 0x4a, 0x69, 0x88, 0xe7, 0x7f, 0x7a, 0x1d, 0x68,
|
||||
0x3d, 0x71, 0xd6, 0x2b, 0xdd, 0x57, 0x12, 0x35, 0xa0, 0xac, 0x21, 0x6a, 0x20, 0x55, 0x3d, 0xd4,
|
||||
0x60, 0x7d, 0xdd, 0x50, 0x03, 0xf2, 0x8a, 0xa1, 0x06, 0x90, 0x35, 0x41, 0x1d, 0x44, 0xab, 0x81,
|
||||
0x5a, 0x5b, 0xab, 0x7f, 0xd2, 0xb5, 0x41, 0x63, 0x1b, 0x2b, 0xa2, 0x71, 0x5b, 0xd6, 0x9d, 0x06,
|
||||
0x89, 0x5b, 0xf1, 0x76, 0xc5, 0xf5, 0x97, 0xf5, 0x46, 0x43, 0x94, 0xc0, 0x03, 0x04, 0x1f, 0x43,
|
||||
0xd6, 0xc7, 0x36, 0x73, 0x33, 0x5b, 0x3f, 0x2d, 0xd8, 0xc6, 0x43, 0x18, 0x01, 0x05, 0x53, 0xa5,
|
||||
0xec, 0x25, 0xcc, 0x33, 0xd6, 0x39, 0x37, 0x24, 0xa3, 0x13, 0xb2, 0x6b, 0x73, 0x51, 0x1c, 0x69,
|
||||
0xb7, 0x24, 0x72, 0xb6, 0xf8, 0x13, 0xc1, 0xd5, 0x83, 0xbb, 0xa0, 0xce, 0x14, 0xd8, 0xfe, 0x50,
|
||||
0x71, 0xe1, 0xb1, 0xf7, 0x69, 0x2e, 0x3a, 0xfd, 0x22, 0xd9, 0x92, 0x3b, 0x3b, 0x2f, 0x4d, 0x4a,
|
||||
0x0d, 0xea, 0x93, 0x9b, 0xd0, 0xea, 0xe9, 0x87, 0x50, 0x9e, 0x55, 0x20, 0x2e, 0x86, 0x0c, 0x74,
|
||||
0x6b, 0x72, 0x3b, 0xf7, 0xac, 0xd5, 0x62, 0xb8, 0x29, 0x0c, 0x53, 0xdb, 0x5e, 0x80, 0x3c, 0xb8,
|
||||
0xdc, 0x27, 0xe0, 0x86, 0xe3, 0x8b, 0x21, 0x22, 0xb8, 0x5b, 0xc4, 0xe4, 0x29, 0x71, 0x4a, 0xc4,
|
||||
0x60, 0x03, 0xd1, 0x85, 0xfc, 0x17, 0xdb, 0xc8, 0x88, 0xf5, 0xd3, 0x8d, 0xac, 0xaf, 0xef, 0x29,
|
||||
0xec, 0xb1, 0xcb, 0x87, 0xf0, 0x13, 0x58, 0x3d, 0x64, 0x9f, 0xbb, 0x4f, 0xec, 0xf9, 0xd1, 0x01,
|
||||
0x32, 0x08, 0x85, 0x95, 0x47, 0x72, 0x3a, 0xfd, 0x90, 0xcc, 0x08, 0xc2, 0x1b, 0x0f, 0xd8, 0xfe,
|
||||
0x02, 0x02, 0xf5, 0x13, 0x28, 0xb2, 0x9c, 0x5f, 0x3a, 0x60, 0x0b, 0x51, 0x32, 0x2a, 0xd1, 0xe2,
|
||||
0xaa, 0x90, 0x23, 0x5f, 0xe1, 0xd0, 0xe0, 0xc9, 0xdf, 0x47, 0xea, 0x2f, 0x79, 0x8c, 0x57, 0x2e,
|
||||
0xf4, 0x91, 0x8b, 0xe4, 0xc5, 0x42, 0xe2, 0x42, 0xd7, 0x76, 0xe2, 0x82, 0x68, 0x18, 0x40, 0x59,
|
||||
0xc1, 0x7d, 0x66, 0x79, 0xec, 0x67, 0x32, 0x04, 0xb3, 0x8a, 0xc3, 0x6c, 0x1a, 0x27, 0xa2, 0xf8,
|
||||
0xe8, 0xa6, 0xe9, 0x82, 0x0c, 0x56, 0x42, 0x5a, 0xc0, 0xc8, 0x7e, 0x7f, 0x49, 0x9c, 0x29, 0xef,
|
||||
0xae, 0xed, 0x62, 0x7a, 0x93, 0x18, 0x6d, 0x0d, 0xda, 0xae, 0x31, 0xb4, 0xe0, 0xd4, 0xb4, 0x73,
|
||||
0x29, 0x6a, 0xd2, 0x27, 0x6e, 0xe8, 0xa6, 0xe7, 0x5d, 0xef, 0x07, 0xb3, 0xfe, 0x47, 0x9a, 0x10,
|
||||
0x23, 0xeb, 0xa1, 0xac, 0xf0, 0x0e, 0x57, 0x35, 0xef, 0xed, 0xd4, 0x51, 0x82, 0x33, 0x1c, 0xc6,
|
||||
0xa8, 0x7a, 0x9e, 0x75, 0x2e, 0xfd, 0xa3, 0x5c, 0xd0, 0xa8, 0x41, 0x5c, 0x77, 0xbe, 0xc9, 0x1a,
|
||||
0xc4, 0xc8, 0xf9, 0xc6, 0x32, 0x56, 0xb7, 0xcb, 0x18, 0x27, 0x95, 0x67, 0x05, 0x08, 0x63, 0xae,
|
||||
0x6e, 0xaf, 0x0c, 0xcc, 0xd7, 0xc0, 0xf9, 0x52, 0xd8, 0x51, 0x9c, 0x0d, 0xb5, 0xaf, 0x72, 0x9e,
|
||||
0x50, 0xfb, 0x02, 0xe3, 0x3b, 0x2a, 0x54, 0x90, 0x78, 0xae, 0x80, 0xb7, 0x7f, 0x1b, 0xe3, 0xc7,
|
||||
0x3b, 0x6c, 0x31, 0x0a, 0x94, 0x53, 0x8c, 0xfb, 0x28, 0xe9, 0x5f, 0xcd, 0xb9, 0x27, 0x77, 0x0e,
|
||||
0x33, 0x44, 0x9a, 0x6c, 0xe7, 0xd7, 0xd9, 0x7a, 0x30, 0x65, 0x3e, 0xb0, 0xf6, 0x9f, 0x6e, 0x67,
|
||||
0xfb, 0x2b, 0x9d, 0xaf, 0x34, 0xb6, 0xbf, 0xda, 0x51, 0x81, 0xf3, 0x34, 0xf2, 0x80, 0xf5, 0xdd,
|
||||
0x7b, 0xe8, 0xb5, 0xca, 0xa5, 0x29, 0x46, 0x7a, 0xf4, 0x7d, 0x62, 0x6e, 0xf3, 0x6b, 0x7d, 0x4b,
|
||||
0x65, 0x76, 0xba, 0x69, 0x3f, 0xbd, 0xc3, 0x5a, 0xa3, 0x08, 0xfa, 0x78, 0x77, 0x04, 0x9d, 0x48,
|
||||
0x9c, 0x8c, 0xf8, 0x39, 0x21, 0x4b, 0x19, 0xed, 0x3e, 0x59, 0x63, 0xab, 0x19, 0xa2, 0x54, 0xac,
|
||||
0xee, 0xaf, 0x17, 0x57, 0x0b, 0xaf, 0x3c, 0x40, 0x84, 0xae, 0xb3, 0x0f, 0x61, 0x46, 0xaf, 0xab,
|
||||
0xb5, 0x7b, 0x21, 0x48, 0x1e, 0x28, 0x78, 0xe2, 0x9a, 0x95, 0x82, 0x27, 0x2e, 0x30, 0x19, 0x13,
|
||||
0x76, 0x53, 0x99, 0xee, 0xb5, 0x8b, 0xca, 0x39, 0x2f, 0x4d, 0x49, 0x5e, 0x8e, 0xba, 0xab, 0xec,
|
||||
0xef, 0x1d, 0x01, 0x34, 0x24, 0x90, 0xf7, 0x2e, 0x13, 0x84, 0x12, 0xc5, 0x3b, 0xc8, 0x3b, 0x40,
|
||||
0xc4, 0x7c, 0xe8, 0xcc, 0x95, 0x20, 0x47, 0xf2, 0x0e, 0xb4, 0xdc, 0x69, 0x14, 0x45, 0x83, 0xa9,
|
||||
0x02, 0xa3, 0xbc, 0xa8, 0x16, 0x7d, 0xee, 0xa9, 0x49, 0xb2, 0x2e, 0x47, 0x5d, 0x8c, 0x2c, 0xda,
|
||||
0x8d, 0xab, 0x88, 0xba, 0x98, 0x0b, 0xc5, 0x3b, 0x85, 0x9e, 0xaa, 0x91, 0x71, 0xb4, 0xaa, 0x02,
|
||||
0xd9, 0x03, 0xea, 0xa9, 0x92, 0xd0, 0x84, 0x23, 0xac, 0x57, 0x8f, 0xcc, 0x11, 0xb2, 0x98, 0xeb,
|
||||
0x3e, 0x2a, 0x80, 0xce, 0x4d, 0xcd, 0xe7, 0x67, 0x38, 0xf9, 0x5e, 0xb0, 0x60, 0xac, 0xd2, 0x3d,
|
||||
0xb7, 0x76, 0x30, 0x34, 0xdd, 0x7c, 0x6c, 0x38, 0xce, 0xea, 0x33, 0x76, 0x51, 0xed, 0xd6, 0x2f,
|
||||
0x18, 0x4e, 0xae, 0x4e, 0x5c, 0xa3, 0xdd, 0xba, 0x19, 0xb6, 0x06, 0xde, 0x46, 0xea, 0x6f, 0x52,
|
||||
0x12, 0x3d, 0x5f, 0xeb, 0x63, 0x03, 0xe1, 0xbb, 0xa2, 0xba, 0xce, 0xdb, 0x78, 0x64, 0xdb, 0x54,
|
||||
0x43, 0xbc, 0xd5, 0x24, 0x16, 0x7f, 0xf4, 0x7e, 0x5e, 0xa7, 0xcf, 0x32, 0x44, 0x72, 0x89, 0x9e,
|
||||
0xe3, 0xa4, 0x45, 0xd5, 0xb0, 0x4a, 0x9f, 0xf8, 0x06, 0x76, 0x5c, 0x88, 0xfd, 0x55, 0x78, 0xb8,
|
||||
0xb4, 0x44, 0x28, 0xc9, 0xfc, 0xd5, 0xcf, 0xdb, 0x75, 0x1b, 0x68, 0xf7, 0x28, 0xe1, 0x9b, 0x28,
|
||||
0x8a, 0xfa, 0x37, 0xd3, 0xfd, 0x52, 0x5d, 0x78, 0xfd, 0xdc, 0xd0, 0x6f, 0x60, 0x6c, 0xa6, 0x1e,
|
||||
0xbc, 0x18, 0x5c, 0x27, 0xbf, 0xe0, 0x94, 0x04, 0x26, 0x1d, 0x7b, 0x4b, 0xee, 0xd3, 0x2f, 0x55,
|
||||
0x58, 0xfd, 0x57, 0x85, 0x8c, 0xbb, 0x6b, 0xdf, 0x78, 0x76, 0x42, 0x47, 0xbb, 0x38, 0xc3, 0x28,
|
||||
0xb8, 0x97, 0x13, 0x32, 0x18, 0x85, 0xf4, 0x2b, 0x4f, 0xf2, 0x1d, 0x36, 0x7d, 0x0e, 0x66, 0x7e,
|
||||
0x4b, 0x86, 0x3d, 0x0e, 0x49, 0xd1, 0x16, 0xa7, 0xa6, 0x0a, 0x11, 0xac, 0xb5, 0x0a, 0x86, 0xdb,
|
||||
0x24, 0xfc, 0xc1, 0xb7, 0xc9, 0x99, 0x5d, 0x04, 0xd3, 0x57, 0xfe, 0xff, 0xf8, 0x3a, 0xfa, 0x38,
|
||||
0xb3, 0x87, 0x6e, 0xd3, 0x1b, 0x8e, 0x7d, 0x61, 0xcc, 0x57, 0x47, 0xa2, 0x37, 0x8b, 0xc5, 0x62,
|
||||
0x33, 0x7c, 0x93, 0xad, 0x6e, 0x7d, 0xe6, 0xf8, 0xb0, 0xd1, 0x1c, 0x8d, 0x49, 0x55, 0x12, 0x46,
|
||||
0x16, 0x4a, 0x0b, 0xd4, 0xb0, 0xc0, 0x31, 0x78, 0xc4, 0xe0, 0x30, 0xeb, 0xeb, 0x66, 0x61, 0x5f,
|
||||
0x71, 0xb9, 0xa0, 0x7c, 0xfd, 0x71, 0x76, 0xf6, 0x00, 0xf7, 0x26, 0xc6, 0xfe, 0xa9, 0x34, 0x3b,
|
||||
0x8b, 0x97, 0xde, 0xe7, 0x34, 0x08, 0x8c, 0x18, 0xe2, 0xd3, 0xdd, 0x24, 0x32, 0xf5, 0x9f, 0xb4,
|
||||
0x81, 0x08, 0xd5, 0xec, 0x02, 0x3a, 0x1a, 0xdb, 0x52, 0x5c, 0xfc, 0xe8, 0xfb, 0xd4, 0xe6, 0xe2,
|
||||
0xfb, 0x10, 0xc3, 0x3d, 0x36, 0xc6, 0x03, 0x2e, 0xdd, 0xda, 0xee, 0xb6, 0xc9, 0x2f, 0x2d, 0x26,
|
||||
0xb0, 0xc4, 0x66, 0x3c, 0x9b, 0xd4, 0xa5, 0x86, 0x37, 0xe8, 0x30, 0x5a, 0xfd, 0x8b, 0x3a, 0x6c,
|
||||
0x36, 0x2e, 0xeb, 0xd8, 0xdf, 0xfa, 0xe1, 0xec, 0x73, 0x92, 0x95, 0x34, 0x8e, 0xc1, 0x81, 0x59,
|
||||
0x3c, 0x00, 0xd2, 0x61, 0xf4, 0x16, 0x60, 0x37, 0xf2, 0x31, 0x7e, 0xe7, 0x77, 0x72, 0x59, 0x98,
|
||||
0x35, 0x91, 0xf2, 0x06, 0xf0, 0xb3, 0x3e, 0xa2, 0xf8, 0x68, 0x1e, 0x45, 0xd5, 0xb1, 0x53, 0x2f,
|
||||
0x37, 0x3d, 0x6f, 0xe1, 0x69, 0x3a, 0x2f, 0x40, 0x63, 0xe3, 0x8a, 0x62, 0x73, 0xf6, 0x5e, 0xe2,
|
||||
0x3f, 0xe5, 0x89, 0x47, 0xba, 0x64, 0x39, 0x00, 0x00
|
||||
};
|
||||
|
||||
void serveBundleCss(AsyncWebServerRequest* request) {
|
||||
|
|
3803
src/ui_index_js.h
3803
src/ui_index_js.h
File diff suppressed because it is too large
Load Diff
|
@ -94,7 +94,7 @@
|
|||
key: "rssi@1m",
|
||||
title: "Rssi@1m",
|
||||
value: (v) => v["rssi@1m"],
|
||||
renderValue: (v) => v["rssi@1m"] != null ? `${v["rssi@1m"]}dBm` : "",
|
||||
renderValue: (v) => v["rssi@1m"] != null ? `${v["rssi@1m"]} dBm` : "",
|
||||
sortable: true,
|
||||
headerClass: "text-left px-6 py-3",
|
||||
},
|
||||
|
@ -145,9 +145,9 @@
|
|||
|
||||
<main>
|
||||
{#if $configs?.configs != null}
|
||||
<SvelteTable {columns} rows={$configs.configs} rowKey="mac" bind:filterSelections bind:sortBy bind:sortOrder selectSingle={true} selectOnClick={true} selected={selectedRowIds} classNameTable="min-w-full divide-y divide-gray-200 table-auto" classNameThead="whitespace-nowrap text-left text-xs font-medium text-gray-500 uppercase" classNameTbody="bg-white divide-y divide-gray-200" {classNameRow} classNameRowSelected="bg-blue-100" classNameCell="px-3 py-1 whitespace-no-wrap text-sm leading-5 font-light text-gray-900" classNameInput="px-1 py-1 border rounded-md text-sm leading-5 font-medium text-gray-900 placeholder-gray-500 focus:outline-none focus:shadow-outline-blue focus:border-blue-300 focus:z-10 sm:text-sm sm:leading-5" classNameSelect="px-1 py-1 border rounded-md text-sm leading-5 font-medium text-gray-900 placeholder-gray-500 focus:outline-none focus:shadow-outline-blue focus:border-blue-300 focus:z-10 sm:text-sm sm:leading-5" />
|
||||
<SvelteTable {columns} rows={$configs.configs} rowKey="id" bind:filterSelections bind:sortBy bind:sortOrder selectSingle={true} selectOnClick={true} selected={selectedRowIds} classNameTable="min-w-full divide-y divide-gray-200 table-auto" classNameThead="whitespace-nowrap text-left text-xs font-medium text-gray-500 uppercase" classNameTbody="bg-white divide-y divide-gray-200" {classNameRow} classNameRowSelected="bg-blue-100" classNameCell="px-3 py-1 whitespace-no-wrap text-sm leading-5 font-light text-gray-900" classNameInput="px-1 py-1 border rounded-md text-sm leading-5 font-medium text-gray-900 placeholder-gray-500 focus:outline-none focus:shadow-outline-blue focus:border-blue-300 focus:z-10 sm:text-sm sm:leading-5" classNameSelect="px-1 py-1 border rounded-md text-sm leading-5 font-medium text-gray-900 placeholder-gray-500 focus:outline-none focus:shadow-outline-blue focus:border-blue-300 focus:z-10 sm:text-sm sm:leading-5" />
|
||||
{:else}
|
||||
<h1>Loading configs...</h1>
|
||||
<h1>Loading configured devices...</h1>
|
||||
{/if}
|
||||
</main>
|
||||
|
||||
|
|
|
@ -2,11 +2,27 @@
|
|||
import { devices } from "../stores";
|
||||
import SvelteTable from "svelte-table";
|
||||
|
||||
var filterSelections = {};
|
||||
var filterSelections = {
|
||||
vis: true
|
||||
};
|
||||
var sortBy = "distance";
|
||||
var sortOrder = 1;
|
||||
var selectedRowIds = [];
|
||||
const columns = [
|
||||
{
|
||||
key: "vis",
|
||||
title: "Visible",
|
||||
value: (v) => v.vis ?? false,
|
||||
renderValue: (v) => v.vis ? "⬤" : "",
|
||||
sortable: true,
|
||||
filterOptions: (rows) => {
|
||||
const options = [
|
||||
{ name: "Yes", value: true },
|
||||
{ name: "No", value: false },
|
||||
];
|
||||
return options;
|
||||
},
|
||||
},
|
||||
{
|
||||
key: "distance",
|
||||
title: "Dist",
|
||||
|
@ -18,7 +34,7 @@
|
|||
{
|
||||
key: "id",
|
||||
title: "ID",
|
||||
value: (v) => v.id,
|
||||
value: (v) => v.id ?? "",
|
||||
sortable: true,
|
||||
filterOptions: (rows) => {
|
||||
const prefixes = new Set();
|
||||
|
@ -62,7 +78,7 @@
|
|||
{
|
||||
key: "mac",
|
||||
title: "MAC",
|
||||
value: (v) => v.mac,
|
||||
value: (v) => v.mac ?? "n/a",
|
||||
sortable: true,
|
||||
filterOptions: (rows) => {
|
||||
// use first letter of last_name to generate filter
|
||||
|
@ -88,25 +104,28 @@
|
|||
key: "rssi",
|
||||
title: "Rssi",
|
||||
value: (v) => v.rssi,
|
||||
renderValue: (v) => v.rssi + "dBm",
|
||||
renderValue: (v) => v.rssi ? `${v.rssi} dBm` : "",
|
||||
sortable: true,
|
||||
headerClass: "text-left px-6 py-3",
|
||||
headerClass: "",
|
||||
class: "whitespace-nowrap",
|
||||
},
|
||||
{
|
||||
key: "rssi@1m",
|
||||
title: "Rssi@1m",
|
||||
value: (v) => v["rssi@1m"],
|
||||
renderValue: (v) => v["rssi@1m"] + "dBm",
|
||||
renderValue: (v) => v["rssi@1m"] ? `${v["rssi@1m"]} dBm` : "",
|
||||
sortable: true,
|
||||
headerClass: "text-left px-6 py-3",
|
||||
headerClass: "",
|
||||
class: "whitespace-nowrap",
|
||||
},
|
||||
{
|
||||
key: "interval",
|
||||
title: "Interval",
|
||||
value: (v) => v.interval,
|
||||
renderValue: (v) => v.interval + "ms",
|
||||
key: "int",
|
||||
title: "int",
|
||||
value: (v) => v.int ?? 0,
|
||||
renderValue: (v) => v.int ? `${v.int} ms` : "",
|
||||
sortable: true,
|
||||
headerClass: "text-left px-6 py-3",
|
||||
headerClass: "",
|
||||
class: "whitespace-nowrap",
|
||||
},
|
||||
];
|
||||
function classNameRow(event) {
|
||||
|
@ -116,7 +135,7 @@
|
|||
|
||||
<main>
|
||||
{#if $devices?.devices != null}
|
||||
<SvelteTable {columns} rows={$devices.devices} rowKey="mac" bind:filterSelections bind:sortBy bind:sortOrder selectSingle={true} selectOnClick={true} selected={selectedRowIds} classNameTable="min-w-full divide-y divide-gray-200 table-auto" classNameThead="whitespace-nowrap text-left text-xs font-medium text-gray-500 uppercase" classNameTbody="bg-white divide-y divide-gray-200" {classNameRow} classNameRowSelected="bg-blue-100" classNameCell="px-3 py-1 whitespace-no-wrap text-sm leading-5 font-light text-gray-900" classNameInput="px-1 py-1 border rounded-md text-sm leading-5 font-medium text-gray-900 placeholder-gray-500 focus:outline-none focus:shadow-outline-blue focus:border-blue-300 focus:z-10 sm:text-sm sm:leading-5" classNameSelect="px-1 py-1 border rounded-md text-sm leading-5 font-medium text-gray-900 placeholder-gray-500 focus:outline-none focus:shadow-outline-blue focus:border-blue-300 focus:z-10 sm:text-sm sm:leading-5" />
|
||||
<SvelteTable {columns} rows={$devices.devices} rowKey="mac" bind:filterSelections bind:sortBy bind:sortOrder selectSingle={true} selectOnClick={true} selected={selectedRowIds} classNameTable="min-w-full divide-y divide-gray-200 table-auto" classNameThead="whitespace-nowrap text-left text-xs font-medium text-gray-500 uppercase" classNameTbody="bg-white divide-y divide-gray-200" {classNameRow} classNameRowSelected="bg-blue-100" classNameCell="px-1 py-1 whitespace-no-wrap text-sm leading-5 font-light text-gray-900" classNameInput="px-1 py-1 border rounded-md text-sm leading-5 font-medium text-gray-900 placeholder-gray-500 focus:outline-none focus:shadow-outline-blue focus:border-blue-300 focus:z-10 sm:text-sm sm:leading-5" classNameSelect="px-1 py-1 border rounded-md text-sm leading-5 font-medium text-gray-900 placeholder-gray-500 focus:outline-none focus:shadow-outline-blue focus:border-blue-300 focus:z-10 sm:text-sm sm:leading-5" />
|
||||
{:else}
|
||||
<h1>Loading fingerprints...</h1>
|
||||
{/if}
|
||||
|
|
|
@ -2,7 +2,7 @@ import { readable } from 'svelte/store';
|
|||
import { writable } from 'svelte/store';
|
||||
|
||||
export const extras = writable([], function start(set) {
|
||||
fetch(`/extras`)
|
||||
fetch("/extras")
|
||||
.then(d => d.json())
|
||||
.then(r => {
|
||||
set(r);
|
||||
|
@ -19,7 +19,7 @@ export const configs = readable([], function start(set) {
|
|||
const interval = setInterval(() => {
|
||||
if (outstanding) return;
|
||||
outstanding = true;
|
||||
fetch(`/json/configs`)
|
||||
fetch("/json/configs")
|
||||
.then(d => d.json())
|
||||
.then(r => {
|
||||
outstanding = false;
|
||||
|
@ -44,7 +44,7 @@ export const devices = readable([], function start(set) {
|
|||
const interval = setInterval(() => {
|
||||
if (outstanding) return;
|
||||
outstanding = true;
|
||||
fetch(`/json/devices`)
|
||||
fetch("/json/devices?showAll")
|
||||
.then(d => d.json())
|
||||
.then(r => {
|
||||
outstanding = false;
|
||||
|
|
Loading…
Reference in New Issue