Code cleanups (#696)
* apply const in wrapper classes * move NukiWrapper methods into Util class * move NukiOpenerWrapper methods into Util class * rename Util classes to Helper * apply const to nuki network classes
This commit is contained in:
@@ -58,7 +58,8 @@ set(SRCFILES
|
||||
../src/enums/NukiPinState.h
|
||||
../src/networkDevices/Tlk110Definitions.h
|
||||
../src/SerialReader.cpp
|
||||
)
|
||||
../src/util/NukiHelper.cpp
|
||||
../src/util/NukiOpenerHelper.cpp
|
||||
|
||||
file(GLOB_RECURSE SRCFILESREC
|
||||
lib/NimBLE-Arduino/src/*.c
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
#define NUKI_HUB_VERSION "9.13"
|
||||
#define NUKI_HUB_VERSION_INT (uint32_t)913
|
||||
#define NUKI_HUB_BUILD "unknownbuildnr"
|
||||
#define NUKI_HUB_DATE "2025-09-16"
|
||||
#define NUKI_HUB_DATE "2025-09-28"
|
||||
|
||||
#define GITHUB_LATEST_RELEASE_URL (char*)"https://github.com/technyon/nuki_hub/releases/latest"
|
||||
#define GITHUB_OTA_MANIFEST_URL (char*)"https://raw.githubusercontent.com/technyon/nuki_hub/binary/ota/manifest.json"
|
||||
|
||||
@@ -119,7 +119,7 @@ void NukiNetwork::scan(bool passive, bool async)
|
||||
_device->scan(passive, async);
|
||||
}
|
||||
|
||||
bool NukiNetwork::isApOpen()
|
||||
const bool NukiNetwork::isApOpen() const
|
||||
{
|
||||
return _device->isApOpen();
|
||||
}
|
||||
@@ -150,17 +150,17 @@ void NukiNetwork::clearWifiFallback()
|
||||
wifiFallback = false;
|
||||
}
|
||||
|
||||
bool NukiNetwork::isConnected()
|
||||
const bool NukiNetwork::isConnected() const
|
||||
{
|
||||
return _device->isConnected();
|
||||
}
|
||||
|
||||
bool NukiNetwork::isInternetConnected()
|
||||
const bool NukiNetwork::isInternetConnected() const
|
||||
{
|
||||
return _hasInternet;
|
||||
}
|
||||
|
||||
bool NukiNetwork::mqttConnected()
|
||||
const bool NukiNetwork::mqttConnected()
|
||||
{
|
||||
#ifndef NUKI_HUB_UPDATER
|
||||
return _device->mqttConnected();
|
||||
@@ -169,7 +169,7 @@ bool NukiNetwork::mqttConnected()
|
||||
#endif
|
||||
}
|
||||
|
||||
bool NukiNetwork::wifiConnected()
|
||||
const bool NukiNetwork::wifiConnected()
|
||||
{
|
||||
if(_networkDeviceType != NetworkDeviceType::WiFi)
|
||||
{
|
||||
@@ -181,7 +181,7 @@ bool NukiNetwork::wifiConnected()
|
||||
}
|
||||
}
|
||||
|
||||
String NukiNetwork::localIP()
|
||||
const String NukiNetwork::localIP()
|
||||
{
|
||||
return _device->localIP();
|
||||
}
|
||||
@@ -406,7 +406,7 @@ void NukiNetwork::setMQTTConnectionSettings()
|
||||
#endif
|
||||
}
|
||||
|
||||
int NukiNetwork::getRestartServices()
|
||||
const int NukiNetwork::getRestartServices()
|
||||
{
|
||||
int restartServices = _restartServices;
|
||||
_restartServices = 0;
|
||||
@@ -1428,17 +1428,17 @@ void NukiNetwork::disableAutoRestarts()
|
||||
_restartOnDisconnect = false;
|
||||
}
|
||||
|
||||
int NukiNetwork::mqttConnectionState()
|
||||
const int NukiNetwork::mqttConnectionState() const
|
||||
{
|
||||
return _mqttConnectionState;
|
||||
}
|
||||
|
||||
bool NukiNetwork::mqttRecentlyConnected()
|
||||
const bool NukiNetwork::mqttRecentlyConnected() const
|
||||
{
|
||||
return _mqttConnectedTs != -1 && (millis() - _mqttConnectedTs < 6000);
|
||||
}
|
||||
|
||||
bool NukiNetwork::pathEquals(const char* prefix, const char* path, const char* referencePath)
|
||||
const bool NukiNetwork::pathEquals(const char* prefix, const char* path, const char* referencePath)
|
||||
{
|
||||
char prefixedPath[500];
|
||||
buildMqttPath(prefixedPath, { prefix, path });
|
||||
@@ -1742,14 +1742,14 @@ void NukiNetwork::timeZoneIdToString(const Nuki::TimeZoneId timeZoneId, char* st
|
||||
}
|
||||
}
|
||||
|
||||
uint16_t NukiNetwork::subscribe(const char *topic, uint8_t qos)
|
||||
const uint16_t NukiNetwork::subscribe(const char *topic, uint8_t qos)
|
||||
{
|
||||
Log->print("Subscribing to MQTT topic: ");
|
||||
Log->println(topic);
|
||||
return _device->mqttSubscribe(topic, qos);
|
||||
}
|
||||
|
||||
bool NukiNetwork::comparePrefixedPath(const char *fullPath, const char *subPath)
|
||||
const bool NukiNetwork::comparePrefixedPath(const char *fullPath, const char *subPath)
|
||||
{
|
||||
char prefixedPath[500];
|
||||
buildMqttPath(subPath, prefixedPath);
|
||||
|
||||
@@ -27,20 +27,20 @@ public:
|
||||
bool update();
|
||||
void reconfigureDevice();
|
||||
void scan(bool passive = false, bool async = true);
|
||||
bool isApOpen();
|
||||
bool isConnected();
|
||||
bool isInternetConnected();
|
||||
bool mqttConnected();
|
||||
bool wifiConnected();
|
||||
const bool isApOpen() const;
|
||||
const bool isConnected() const;
|
||||
const bool isInternetConnected() const;
|
||||
const bool mqttConnected();
|
||||
const bool wifiConnected();
|
||||
void clearWifiFallback();
|
||||
int getRestartServices();
|
||||
const int getRestartServices();
|
||||
void setRestartServices(bool reconnect = false);
|
||||
|
||||
const String networkDeviceName() const;
|
||||
const String networkBSSID() const;
|
||||
const NetworkDeviceType networkDeviceType();
|
||||
void setKeepAliveCallback(std::function<void()> reconnectTick);
|
||||
String localIP();
|
||||
const String localIP();
|
||||
|
||||
NetworkDevice* device();
|
||||
|
||||
@@ -89,10 +89,10 @@ public:
|
||||
);
|
||||
void removeHassTopic(const String& mqttDeviceType, const String& mqttDeviceName, const String& uidString);
|
||||
|
||||
int mqttConnectionState(); // 0 = not connected; 1 = connected; 2 = connected and mqtt processed
|
||||
bool mqttRecentlyConnected();
|
||||
bool pathEquals(const char* prefix, const char* path, const char* referencePath);
|
||||
uint16_t subscribe(const char* topic, uint8_t qos);
|
||||
const int mqttConnectionState() const; // 0 = not connected; 1 = connected; 2 = connected and mqtt processed
|
||||
const bool mqttRecentlyConnected() const;
|
||||
const bool pathEquals(const char* prefix, const char* path, const char* referencePath);
|
||||
const uint16_t subscribe(const char* topic, uint8_t qos);
|
||||
void addReconnectedCallback(std::function<void()> reconnectedCallback);
|
||||
#endif
|
||||
private:
|
||||
@@ -125,7 +125,7 @@ private:
|
||||
void onMqttDisconnect(const espMqttClientTypes::DisconnectReason& reason);
|
||||
void parseGpioTopics(const espMqttClientTypes::MessageProperties& properties, const char* topic, const uint8_t* payload, size_t& len, size_t& index, size_t& total);
|
||||
void gpioActionCallback(const GpioAction& action, const int& pin);
|
||||
bool comparePrefixedPath(const char* fullPath, const char* subPath);
|
||||
const bool comparePrefixedPath(const char* fullPath, const char* subPath);
|
||||
void buildMqttPath(const char *path, char *outPath);
|
||||
void buildMqttPath(char* outPath, std::initializer_list<const char*> paths);
|
||||
void checkInternetConnectivity();
|
||||
|
||||
@@ -1630,7 +1630,7 @@ void NukiNetworkLock::buildMqttPath(const char* path, char* outPath)
|
||||
outPath[i+1] = 0x00;
|
||||
}
|
||||
|
||||
bool NukiNetworkLock::comparePrefixedPath(const char *fullPath, const char *subPath)
|
||||
const bool NukiNetworkLock::comparePrefixedPath(const char *fullPath, const char *subPath)
|
||||
{
|
||||
char prefixedPath[500];
|
||||
buildMqttPath(subPath, prefixedPath);
|
||||
@@ -1649,12 +1649,12 @@ String NukiNetworkLock::concat(String a, String b)
|
||||
return c;
|
||||
}
|
||||
|
||||
int NukiNetworkLock::mqttConnectionState()
|
||||
const int NukiNetworkLock::mqttConnectionState()
|
||||
{
|
||||
return _network->mqttConnectionState();
|
||||
}
|
||||
|
||||
uint8_t NukiNetworkLock::queryCommands()
|
||||
const uint8_t NukiNetworkLock::queryCommands()
|
||||
{
|
||||
uint8_t qc = _queryCommands;
|
||||
_queryCommands = 0;
|
||||
|
||||
@@ -60,11 +60,11 @@ public:
|
||||
|
||||
const uint32_t getAuthId() const;
|
||||
const char* getAuthName();
|
||||
int mqttConnectionState();
|
||||
uint8_t queryCommands();
|
||||
const int mqttConnectionState();
|
||||
const uint8_t queryCommands();
|
||||
|
||||
private:
|
||||
bool comparePrefixedPath(const char* fullPath, const char* subPath);
|
||||
const bool comparePrefixedPath(const char* fullPath, const char* subPath);
|
||||
|
||||
void publishKeypadEntry(const String topic, NukiLock::KeypadEntry entry);
|
||||
void buttonPressActionToString(const NukiLock::ButtonPressAction btnPressAction, char* str);
|
||||
|
||||
@@ -10,6 +10,8 @@
|
||||
#include "hal/wdt_hal.h"
|
||||
#include <time.h>
|
||||
#include "esp_sntp.h"
|
||||
#include "util/NukiOpenerHelper.h"
|
||||
#include "util/NukiHelper.h"
|
||||
|
||||
NukiOpenerWrapper* nukiOpenerInst;
|
||||
Preferences* nukiOpenerPreferences = nullptr;
|
||||
@@ -214,7 +216,7 @@ void NukiOpenerWrapper::readSettings()
|
||||
}
|
||||
}
|
||||
|
||||
uint8_t NukiOpenerWrapper::restartController()
|
||||
const uint8_t NukiOpenerWrapper::restartController() const
|
||||
{
|
||||
return _restartController;
|
||||
}
|
||||
@@ -477,7 +479,7 @@ void NukiOpenerWrapper::setPin(const uint16_t pin)
|
||||
_nukiOpener.saveSecurityPincode(pin);
|
||||
}
|
||||
|
||||
uint16_t NukiOpenerWrapper::getPin()
|
||||
const uint16_t NukiOpenerWrapper::getPin()
|
||||
{
|
||||
return _nukiOpener.getSecurityPincode();
|
||||
}
|
||||
@@ -635,7 +637,7 @@ void NukiOpenerWrapper::updateBatteryState()
|
||||
}
|
||||
}
|
||||
|
||||
printCommandResult(result);
|
||||
NukiOpenerHelper::printCommandResult(result);
|
||||
if(result == Nuki::CmdResult::Success)
|
||||
{
|
||||
_network->publishBatteryReport(_batteryReport);
|
||||
@@ -792,7 +794,7 @@ void NukiOpenerWrapper::updateAuthData(bool retrieved)
|
||||
}
|
||||
|
||||
Log->println(result);
|
||||
printCommandResult(result);
|
||||
NukiOpenerHelper::printCommandResult(result);
|
||||
if(result == Nuki::CmdResult::Success)
|
||||
{
|
||||
_waitAuthLogUpdateTs = espMillis() + 5000;
|
||||
@@ -881,7 +883,7 @@ void NukiOpenerWrapper::updateKeypad(bool retrieved)
|
||||
}
|
||||
}
|
||||
|
||||
printCommandResult(result);
|
||||
NukiOpenerHelper::printCommandResult(result);
|
||||
if(result == Nuki::CmdResult::Success)
|
||||
{
|
||||
_waitKeypadUpdateTs = espMillis() + 5000;
|
||||
@@ -961,7 +963,7 @@ void NukiOpenerWrapper::updateTimeControl(bool retrieved)
|
||||
}
|
||||
}
|
||||
|
||||
printCommandResult(result);
|
||||
NukiOpenerHelper::printCommandResult(result);
|
||||
if(result == Nuki::CmdResult::Success)
|
||||
{
|
||||
_waitTimeControlUpdateTs = espMillis() + 5000;
|
||||
@@ -1042,7 +1044,7 @@ void NukiOpenerWrapper::updateAuth(bool retrieved)
|
||||
}
|
||||
}
|
||||
|
||||
printCommandResult(result);
|
||||
NukiOpenerHelper::printCommandResult(result);
|
||||
if(result == Nuki::CmdResult::Success)
|
||||
{
|
||||
_waitAuthUpdateTs = millis() + 5000;
|
||||
@@ -1091,43 +1093,6 @@ void NukiOpenerWrapper::postponeBleWatchdog()
|
||||
_disableBleWatchdogTs = espMillis() + 15000;
|
||||
}
|
||||
|
||||
NukiOpener::LockAction NukiOpenerWrapper::lockActionToEnum(const char *str)
|
||||
{
|
||||
if(strcmp(str, "activateRTO") == 0 || strcmp(str, "ActivateRTO") == 0)
|
||||
{
|
||||
return NukiOpener::LockAction::ActivateRTO;
|
||||
}
|
||||
else if(strcmp(str, "deactivateRTO") == 0 || strcmp(str, "DeactivateRTO") == 0)
|
||||
{
|
||||
return NukiOpener::LockAction::DeactivateRTO;
|
||||
}
|
||||
else if(strcmp(str, "electricStrikeActuation") == 0 || strcmp(str, "ElectricStrikeActuation") == 0)
|
||||
{
|
||||
return NukiOpener::LockAction::ElectricStrikeActuation;
|
||||
}
|
||||
else if(strcmp(str, "activateCM") == 0 || strcmp(str, "ActivateCM") == 0)
|
||||
{
|
||||
return NukiOpener::LockAction::ActivateCM;
|
||||
}
|
||||
else if(strcmp(str, "deactivateCM") == 0 || strcmp(str, "DeactivateCM") == 0)
|
||||
{
|
||||
return NukiOpener::LockAction::DeactivateCM;
|
||||
}
|
||||
else if(strcmp(str, "fobAction2") == 0 || strcmp(str, "FobAction2") == 0)
|
||||
{
|
||||
return NukiOpener::LockAction::FobAction2;
|
||||
}
|
||||
else if(strcmp(str, "fobAction1") == 0 || strcmp(str, "FobAction1") == 0)
|
||||
{
|
||||
return NukiOpener::LockAction::FobAction1;
|
||||
}
|
||||
else if(strcmp(str, "fobAction3") == 0 || strcmp(str, "FobAction3") == 0)
|
||||
{
|
||||
return NukiOpener::LockAction::FobAction3;
|
||||
}
|
||||
return (NukiOpener::LockAction)0xff;
|
||||
}
|
||||
|
||||
LockActionResult NukiOpenerWrapper::onLockActionReceivedCallback(const char *value)
|
||||
{
|
||||
NukiOpener::LockAction action;
|
||||
@@ -1136,7 +1101,7 @@ LockActionResult NukiOpenerWrapper::onLockActionReceivedCallback(const char *val
|
||||
{
|
||||
if(strlen(value) > 0)
|
||||
{
|
||||
action = nukiOpenerInst->lockActionToEnum(value);
|
||||
action = NukiOpenerHelper::lockActionToEnum(value);
|
||||
if((int)action == 0xff)
|
||||
{
|
||||
return LockActionResult::UnknownAction;
|
||||
@@ -1173,430 +1138,6 @@ void NukiOpenerWrapper::onConfigUpdateReceivedCallback(const char *value)
|
||||
nukiOpenerInst->onConfigUpdateReceived(value);
|
||||
}
|
||||
|
||||
Nuki::AdvertisingMode NukiOpenerWrapper::advertisingModeToEnum(const char *str)
|
||||
{
|
||||
if(strcmp(str, "Automatic") == 0)
|
||||
{
|
||||
return Nuki::AdvertisingMode::Automatic;
|
||||
}
|
||||
else if(strcmp(str, "Normal") == 0)
|
||||
{
|
||||
return Nuki::AdvertisingMode::Normal;
|
||||
}
|
||||
else if(strcmp(str, "Slow") == 0)
|
||||
{
|
||||
return Nuki::AdvertisingMode::Slow;
|
||||
}
|
||||
else if(strcmp(str, "Slowest") == 0)
|
||||
{
|
||||
return Nuki::AdvertisingMode::Slowest;
|
||||
}
|
||||
return (Nuki::AdvertisingMode)0xff;
|
||||
}
|
||||
|
||||
Nuki::TimeZoneId NukiOpenerWrapper::timeZoneToEnum(const char *str)
|
||||
{
|
||||
if(strcmp(str, "Africa/Cairo") == 0)
|
||||
{
|
||||
return Nuki::TimeZoneId::Africa_Cairo;
|
||||
}
|
||||
else if(strcmp(str, "Africa/Lagos") == 0)
|
||||
{
|
||||
return Nuki::TimeZoneId::Africa_Lagos;
|
||||
}
|
||||
else if(strcmp(str, "Africa/Maputo") == 0)
|
||||
{
|
||||
return Nuki::TimeZoneId::Africa_Maputo;
|
||||
}
|
||||
else if(strcmp(str, "Africa/Nairobi") == 0)
|
||||
{
|
||||
return Nuki::TimeZoneId::Africa_Nairobi;
|
||||
}
|
||||
else if(strcmp(str, "America/Anchorage") == 0)
|
||||
{
|
||||
return Nuki::TimeZoneId::America_Anchorage;
|
||||
}
|
||||
else if(strcmp(str, "America/Argentina/Buenos_Aires") == 0)
|
||||
{
|
||||
return Nuki::TimeZoneId::America_Argentina_Buenos_Aires;
|
||||
}
|
||||
else if(strcmp(str, "America/Chicago") == 0)
|
||||
{
|
||||
return Nuki::TimeZoneId::America_Chicago;
|
||||
}
|
||||
else if(strcmp(str, "America/Denver") == 0)
|
||||
{
|
||||
return Nuki::TimeZoneId::America_Denver;
|
||||
}
|
||||
else if(strcmp(str, "America/Halifax") == 0)
|
||||
{
|
||||
return Nuki::TimeZoneId::America_Halifax;
|
||||
}
|
||||
else if(strcmp(str, "America/Los_Angeles") == 0)
|
||||
{
|
||||
return Nuki::TimeZoneId::America_Los_Angeles;
|
||||
}
|
||||
else if(strcmp(str, "America/Manaus") == 0)
|
||||
{
|
||||
return Nuki::TimeZoneId::America_Manaus;
|
||||
}
|
||||
else if(strcmp(str, "America/Mexico_City") == 0)
|
||||
{
|
||||
return Nuki::TimeZoneId::America_Mexico_City;
|
||||
}
|
||||
else if(strcmp(str, "America/New_York") == 0)
|
||||
{
|
||||
return Nuki::TimeZoneId::America_New_York;
|
||||
}
|
||||
else if(strcmp(str, "America/Phoenix") == 0)
|
||||
{
|
||||
return Nuki::TimeZoneId::America_Phoenix;
|
||||
}
|
||||
else if(strcmp(str, "America/Regina") == 0)
|
||||
{
|
||||
return Nuki::TimeZoneId::America_Regina;
|
||||
}
|
||||
else if(strcmp(str, "America/Santiago") == 0)
|
||||
{
|
||||
return Nuki::TimeZoneId::America_Santiago;
|
||||
}
|
||||
else if(strcmp(str, "America/Sao_Paulo") == 0)
|
||||
{
|
||||
return Nuki::TimeZoneId::America_Sao_Paulo;
|
||||
}
|
||||
else if(strcmp(str, "America/St_Johns") == 0)
|
||||
{
|
||||
return Nuki::TimeZoneId::America_St_Johns;
|
||||
}
|
||||
else if(strcmp(str, "Asia/Bangkok") == 0)
|
||||
{
|
||||
return Nuki::TimeZoneId::Asia_Bangkok;
|
||||
}
|
||||
else if(strcmp(str, "Asia/Dubai") == 0)
|
||||
{
|
||||
return Nuki::TimeZoneId::Asia_Dubai;
|
||||
}
|
||||
else if(strcmp(str, "Asia/Hong_Kong") == 0)
|
||||
{
|
||||
return Nuki::TimeZoneId::Asia_Hong_Kong;
|
||||
}
|
||||
else if(strcmp(str, "Asia/Jerusalem") == 0)
|
||||
{
|
||||
return Nuki::TimeZoneId::Asia_Jerusalem;
|
||||
}
|
||||
else if(strcmp(str, "Asia/Karachi") == 0)
|
||||
{
|
||||
return Nuki::TimeZoneId::Asia_Karachi;
|
||||
}
|
||||
else if(strcmp(str, "Asia/Kathmandu") == 0)
|
||||
{
|
||||
return Nuki::TimeZoneId::Asia_Kathmandu;
|
||||
}
|
||||
else if(strcmp(str, "Asia/Kolkata") == 0)
|
||||
{
|
||||
return Nuki::TimeZoneId::Asia_Kolkata;
|
||||
}
|
||||
else if(strcmp(str, "Asia/Riyadh") == 0)
|
||||
{
|
||||
return Nuki::TimeZoneId::Asia_Riyadh;
|
||||
}
|
||||
else if(strcmp(str, "Asia/Seoul") == 0)
|
||||
{
|
||||
return Nuki::TimeZoneId::Asia_Seoul;
|
||||
}
|
||||
else if(strcmp(str, "Asia/Shanghai") == 0)
|
||||
{
|
||||
return Nuki::TimeZoneId::Asia_Shanghai;
|
||||
}
|
||||
else if(strcmp(str, "Asia/Tehran") == 0)
|
||||
{
|
||||
return Nuki::TimeZoneId::Asia_Tehran;
|
||||
}
|
||||
else if(strcmp(str, "Asia/Tokyo") == 0)
|
||||
{
|
||||
return Nuki::TimeZoneId::Asia_Tokyo;
|
||||
}
|
||||
else if(strcmp(str, "Asia/Yangon") == 0)
|
||||
{
|
||||
return Nuki::TimeZoneId::Asia_Yangon;
|
||||
}
|
||||
else if(strcmp(str, "Australia/Adelaide") == 0)
|
||||
{
|
||||
return Nuki::TimeZoneId::Australia_Adelaide;
|
||||
}
|
||||
else if(strcmp(str, "Australia/Brisbane") == 0)
|
||||
{
|
||||
return Nuki::TimeZoneId::Australia_Brisbane;
|
||||
}
|
||||
else if(strcmp(str, "Australia/Darwin") == 0)
|
||||
{
|
||||
return Nuki::TimeZoneId::Australia_Darwin;
|
||||
}
|
||||
else if(strcmp(str, "Australia/Hobart") == 0)
|
||||
{
|
||||
return Nuki::TimeZoneId::Australia_Hobart;
|
||||
}
|
||||
else if(strcmp(str, "Australia/Perth") == 0)
|
||||
{
|
||||
return Nuki::TimeZoneId::Australia_Perth;
|
||||
}
|
||||
else if(strcmp(str, "Australia/Sydney") == 0)
|
||||
{
|
||||
return Nuki::TimeZoneId::Australia_Sydney;
|
||||
}
|
||||
else if(strcmp(str, "Europe/Berlin") == 0)
|
||||
{
|
||||
return Nuki::TimeZoneId::Europe_Berlin;
|
||||
}
|
||||
else if(strcmp(str, "Europe/Helsinki") == 0)
|
||||
{
|
||||
return Nuki::TimeZoneId::Europe_Helsinki;
|
||||
}
|
||||
else if(strcmp(str, "Europe/Istanbul") == 0)
|
||||
{
|
||||
return Nuki::TimeZoneId::Europe_Istanbul;
|
||||
}
|
||||
else if(strcmp(str, "Europe/London") == 0)
|
||||
{
|
||||
return Nuki::TimeZoneId::Europe_London;
|
||||
}
|
||||
else if(strcmp(str, "Europe/Moscow") == 0)
|
||||
{
|
||||
return Nuki::TimeZoneId::Europe_Moscow;
|
||||
}
|
||||
else if(strcmp(str, "Pacific/Auckland") == 0)
|
||||
{
|
||||
return Nuki::TimeZoneId::Pacific_Auckland;
|
||||
}
|
||||
else if(strcmp(str, "Pacific/Guam") == 0)
|
||||
{
|
||||
return Nuki::TimeZoneId::Pacific_Guam;
|
||||
}
|
||||
else if(strcmp(str, "Pacific/Honolulu") == 0)
|
||||
{
|
||||
return Nuki::TimeZoneId::Pacific_Honolulu;
|
||||
}
|
||||
else if(strcmp(str, "Pacific/Pago_Pago") == 0)
|
||||
{
|
||||
return Nuki::TimeZoneId::Pacific_Pago_Pago;
|
||||
}
|
||||
else if(strcmp(str, "None") == 0)
|
||||
{
|
||||
return Nuki::TimeZoneId::None;
|
||||
}
|
||||
return (Nuki::TimeZoneId)0xff;
|
||||
}
|
||||
|
||||
uint8_t NukiOpenerWrapper::fobActionToInt(const char *str)
|
||||
{
|
||||
if(strcmp(str, "No Action") == 0)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
else if(strcmp(str, "Toggle RTO") == 0)
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
else if(strcmp(str, "Activate RTO") == 0)
|
||||
{
|
||||
return 2;
|
||||
}
|
||||
else if(strcmp(str, "Deactivate RTO") == 0)
|
||||
{
|
||||
return 3;
|
||||
}
|
||||
else if(strcmp(str, "Open") == 0)
|
||||
{
|
||||
return 7;
|
||||
}
|
||||
else if(strcmp(str, "Ring") == 0)
|
||||
{
|
||||
return 8;
|
||||
}
|
||||
return 99;
|
||||
}
|
||||
|
||||
uint8_t NukiOpenerWrapper::operatingModeToInt(const char *str)
|
||||
{
|
||||
if(strcmp(str, "Generic door opener") == 0)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
else if(strcmp(str, "Analogue intercom") == 0)
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
else if(strcmp(str, "Digital intercom") == 0)
|
||||
{
|
||||
return 2;
|
||||
}
|
||||
else if(strcmp(str, "Siedle") == 0)
|
||||
{
|
||||
return 3;
|
||||
}
|
||||
else if(strcmp(str, "TCS") == 0)
|
||||
{
|
||||
return 4;
|
||||
}
|
||||
else if(strcmp(str, "Bticino") == 0)
|
||||
{
|
||||
return 5;
|
||||
}
|
||||
else if(strcmp(str, "Siedle HTS") == 0)
|
||||
{
|
||||
return 6;
|
||||
}
|
||||
else if(strcmp(str, "STR") == 0)
|
||||
{
|
||||
return 7;
|
||||
}
|
||||
else if(strcmp(str, "Ritto") == 0)
|
||||
{
|
||||
return 8;
|
||||
}
|
||||
else if(strcmp(str, "Fermax") == 0)
|
||||
{
|
||||
return 9;
|
||||
}
|
||||
else if(strcmp(str, "Comelit") == 0)
|
||||
{
|
||||
return 10;
|
||||
}
|
||||
else if(strcmp(str, "Urmet BiBus") == 0)
|
||||
{
|
||||
return 11;
|
||||
}
|
||||
else if(strcmp(str, "Urmet 2Voice") == 0)
|
||||
{
|
||||
return 12;
|
||||
}
|
||||
else if(strcmp(str, "Golmar") == 0)
|
||||
{
|
||||
return 13;
|
||||
}
|
||||
else if(strcmp(str, "SKS") == 0)
|
||||
{
|
||||
return 14;
|
||||
}
|
||||
else if(strcmp(str, "Spare") == 0)
|
||||
{
|
||||
return 15;
|
||||
}
|
||||
return 99;
|
||||
}
|
||||
|
||||
uint8_t NukiOpenerWrapper::doorbellSuppressionToInt(const char *str)
|
||||
{
|
||||
if(strcmp(str, "Off") == 0)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
else if(strcmp(str, "CM") == 0)
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
else if(strcmp(str, "RTO") == 0)
|
||||
{
|
||||
return 2;
|
||||
}
|
||||
else if(strcmp(str, "CM & RTO") == 0)
|
||||
{
|
||||
return 3;
|
||||
}
|
||||
else if(strcmp(str, "Ring") == 0)
|
||||
{
|
||||
return 4;
|
||||
}
|
||||
else if(strcmp(str, "CM & Ring") == 0)
|
||||
{
|
||||
return 5;
|
||||
}
|
||||
else if(strcmp(str, "RTO & Ring") == 0)
|
||||
{
|
||||
return 6;
|
||||
}
|
||||
else if(strcmp(str, "CM & RTO & Ring") == 0)
|
||||
{
|
||||
return 7;
|
||||
}
|
||||
return 99;
|
||||
}
|
||||
|
||||
uint8_t NukiOpenerWrapper::soundToInt(const char *str)
|
||||
{
|
||||
if(strcmp(str, "No Sound") == 0)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
else if(strcmp(str, "Sound 1") == 0)
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
else if(strcmp(str, "Sound 2") == 0)
|
||||
{
|
||||
return 2;
|
||||
}
|
||||
else if(strcmp(str, "Sound 3") == 0)
|
||||
{
|
||||
return 3;
|
||||
}
|
||||
return 99;
|
||||
}
|
||||
|
||||
NukiOpener::ButtonPressAction NukiOpenerWrapper::buttonPressActionToEnum(const char* str)
|
||||
{
|
||||
if(strcmp(str, "No Action") == 0)
|
||||
{
|
||||
return NukiOpener::ButtonPressAction::NoAction;
|
||||
}
|
||||
else if(strcmp(str, "Toggle RTO") == 0)
|
||||
{
|
||||
return NukiOpener::ButtonPressAction::ToggleRTO;
|
||||
}
|
||||
else if(strcmp(str, "Activate RTO") == 0)
|
||||
{
|
||||
return NukiOpener::ButtonPressAction::ActivateRTO;
|
||||
}
|
||||
else if(strcmp(str, "Deactivate RTO") == 0)
|
||||
{
|
||||
return NukiOpener::ButtonPressAction::DeactivateRTO;
|
||||
}
|
||||
else if(strcmp(str, "Toggle CM") == 0)
|
||||
{
|
||||
return NukiOpener::ButtonPressAction::ToggleCM;
|
||||
}
|
||||
else if(strcmp(str, "Activate CM") == 0)
|
||||
{
|
||||
return NukiOpener::ButtonPressAction::ActivateCM;
|
||||
}
|
||||
else if(strcmp(str, "Deactivate CM") == 0)
|
||||
{
|
||||
return NukiOpener::ButtonPressAction::DectivateCM;
|
||||
}
|
||||
else if(strcmp(str, "Open") == 0)
|
||||
{
|
||||
return NukiOpener::ButtonPressAction::Open;
|
||||
}
|
||||
return (NukiOpener::ButtonPressAction)0xff;
|
||||
}
|
||||
|
||||
Nuki::BatteryType NukiOpenerWrapper::batteryTypeToEnum(const char* str)
|
||||
{
|
||||
if(strcmp(str, "Alkali") == 0)
|
||||
{
|
||||
return Nuki::BatteryType::Alkali;
|
||||
}
|
||||
else if(strcmp(str, "Accumulators") == 0)
|
||||
{
|
||||
return Nuki::BatteryType::Accumulators;
|
||||
}
|
||||
else if(strcmp(str, "Lithium") == 0)
|
||||
{
|
||||
return Nuki::BatteryType::Lithium;
|
||||
}
|
||||
return (Nuki::BatteryType)0xff;
|
||||
}
|
||||
|
||||
void NukiOpenerWrapper::onConfigUpdateReceived(const char *value)
|
||||
{
|
||||
JsonDocument jsonResult;
|
||||
@@ -1834,7 +1375,7 @@ void NukiOpenerWrapper::onConfigUpdateReceived(const char *value)
|
||||
}
|
||||
else if(strcmp(basicKeys[i], "fobAction1") == 0)
|
||||
{
|
||||
const uint8_t fobAct1 = nukiOpenerInst->fobActionToInt(jsonchar);
|
||||
const uint8_t fobAct1 = NukiOpenerHelper::fobActionToInt(jsonchar);
|
||||
|
||||
if(fobAct1 != 99)
|
||||
{
|
||||
@@ -1854,7 +1395,7 @@ void NukiOpenerWrapper::onConfigUpdateReceived(const char *value)
|
||||
}
|
||||
else if(strcmp(basicKeys[i], "fobAction2") == 0)
|
||||
{
|
||||
const uint8_t fobAct2 = nukiOpenerInst->fobActionToInt(jsonchar);
|
||||
const uint8_t fobAct2 = NukiOpenerHelper::fobActionToInt(jsonchar);
|
||||
|
||||
if(fobAct2 != 99)
|
||||
{
|
||||
@@ -1874,7 +1415,7 @@ void NukiOpenerWrapper::onConfigUpdateReceived(const char *value)
|
||||
}
|
||||
else if(strcmp(basicKeys[i], "fobAction3") == 0)
|
||||
{
|
||||
const uint8_t fobAct3 = nukiOpenerInst->fobActionToInt(jsonchar);
|
||||
const uint8_t fobAct3 = NukiOpenerHelper::fobActionToInt(jsonchar);
|
||||
|
||||
if(fobAct3 != 99)
|
||||
{
|
||||
@@ -1894,7 +1435,7 @@ void NukiOpenerWrapper::onConfigUpdateReceived(const char *value)
|
||||
}
|
||||
else if(strcmp(basicKeys[i], "operatingMode") == 0)
|
||||
{
|
||||
const uint8_t opmode = nukiOpenerInst->operatingModeToInt(jsonchar);
|
||||
const uint8_t opmode = NukiOpenerHelper::operatingModeToInt(jsonchar);
|
||||
|
||||
if(opmode != 99)
|
||||
{
|
||||
@@ -1914,7 +1455,7 @@ void NukiOpenerWrapper::onConfigUpdateReceived(const char *value)
|
||||
}
|
||||
else if(strcmp(basicKeys[i], "advertisingMode") == 0)
|
||||
{
|
||||
Nuki::AdvertisingMode advmode = nukiOpenerInst->advertisingModeToEnum(jsonchar);
|
||||
Nuki::AdvertisingMode advmode = NukiOpenerHelper::advertisingModeToEnum(jsonchar);
|
||||
|
||||
if((int)advmode != 0xff)
|
||||
{
|
||||
@@ -1934,7 +1475,7 @@ void NukiOpenerWrapper::onConfigUpdateReceived(const char *value)
|
||||
}
|
||||
else if(strcmp(basicKeys[i], "timeZone") == 0)
|
||||
{
|
||||
Nuki::TimeZoneId tzid = nukiOpenerInst->timeZoneToEnum(jsonchar);
|
||||
Nuki::TimeZoneId tzid = NukiHelper::timeZoneToEnum(jsonchar);
|
||||
|
||||
if((int)tzid != 0xff)
|
||||
{
|
||||
@@ -2184,7 +1725,7 @@ void NukiOpenerWrapper::onConfigUpdateReceived(const char *value)
|
||||
}
|
||||
else if(strcmp(advancedKeys[j], "doorbellSuppression") == 0)
|
||||
{
|
||||
const uint8_t dbsupr = nukiOpenerInst->doorbellSuppressionToInt(jsonchar);
|
||||
const uint8_t dbsupr = NukiOpenerHelper::doorbellSuppressionToInt(jsonchar);
|
||||
|
||||
if(dbsupr != 99)
|
||||
{
|
||||
@@ -2224,7 +1765,7 @@ void NukiOpenerWrapper::onConfigUpdateReceived(const char *value)
|
||||
}
|
||||
else if(strcmp(advancedKeys[j], "soundRing") == 0)
|
||||
{
|
||||
const uint8_t sound = nukiOpenerInst->soundToInt(jsonchar);
|
||||
const uint8_t sound = NukiOpenerHelper::soundToInt(jsonchar);
|
||||
|
||||
if(sound != 99)
|
||||
{
|
||||
@@ -2244,7 +1785,7 @@ void NukiOpenerWrapper::onConfigUpdateReceived(const char *value)
|
||||
}
|
||||
else if(strcmp(advancedKeys[j], "soundOpen") == 0)
|
||||
{
|
||||
const uint8_t sound = nukiOpenerInst->soundToInt(jsonchar);
|
||||
const uint8_t sound = NukiOpenerHelper::soundToInt(jsonchar);
|
||||
|
||||
if(sound != 99)
|
||||
{
|
||||
@@ -2264,7 +1805,7 @@ void NukiOpenerWrapper::onConfigUpdateReceived(const char *value)
|
||||
}
|
||||
else if(strcmp(advancedKeys[j], "soundRto") == 0)
|
||||
{
|
||||
const uint8_t sound = nukiOpenerInst->soundToInt(jsonchar);
|
||||
const uint8_t sound = NukiOpenerHelper::soundToInt(jsonchar);
|
||||
|
||||
if(sound != 99)
|
||||
{
|
||||
@@ -2284,7 +1825,7 @@ void NukiOpenerWrapper::onConfigUpdateReceived(const char *value)
|
||||
}
|
||||
else if(strcmp(advancedKeys[j], "soundCm") == 0)
|
||||
{
|
||||
const uint8_t sound = nukiOpenerInst->soundToInt(jsonchar);
|
||||
const uint8_t sound = NukiOpenerHelper::soundToInt(jsonchar);
|
||||
|
||||
if(sound != 99)
|
||||
{
|
||||
@@ -2344,7 +1885,7 @@ void NukiOpenerWrapper::onConfigUpdateReceived(const char *value)
|
||||
}
|
||||
else if(strcmp(advancedKeys[j], "singleButtonPressAction") == 0)
|
||||
{
|
||||
NukiOpener::ButtonPressAction sbpa = nukiOpenerInst->buttonPressActionToEnum(jsonchar);
|
||||
NukiOpener::ButtonPressAction sbpa = NukiOpenerHelper::buttonPressActionToEnum(jsonchar);
|
||||
|
||||
if((int)sbpa != 0xff)
|
||||
{
|
||||
@@ -2364,7 +1905,7 @@ void NukiOpenerWrapper::onConfigUpdateReceived(const char *value)
|
||||
}
|
||||
else if(strcmp(advancedKeys[j], "doubleButtonPressAction") == 0)
|
||||
{
|
||||
NukiOpener::ButtonPressAction dbpa = nukiOpenerInst->buttonPressActionToEnum(jsonchar);
|
||||
NukiOpener::ButtonPressAction dbpa = NukiOpenerHelper::buttonPressActionToEnum(jsonchar);
|
||||
|
||||
if((int)dbpa != 0xff)
|
||||
{
|
||||
@@ -2384,7 +1925,7 @@ void NukiOpenerWrapper::onConfigUpdateReceived(const char *value)
|
||||
}
|
||||
else if(strcmp(advancedKeys[j], "batteryType") == 0)
|
||||
{
|
||||
Nuki::BatteryType battype = nukiOpenerInst->batteryTypeToEnum(jsonchar);
|
||||
Nuki::BatteryType battype = NukiOpenerHelper::batteryTypeToEnum(jsonchar);
|
||||
|
||||
if((int)battype != 0xff)
|
||||
{
|
||||
@@ -3317,7 +2858,7 @@ void NukiOpenerWrapper::onTimeControlCommandReceived(const char *value)
|
||||
|
||||
if(lockAction.length() > 0)
|
||||
{
|
||||
timeControlLockAction = nukiOpenerInst->lockActionToEnum(lockAction.c_str());
|
||||
timeControlLockAction = NukiOpenerHelper::lockActionToEnum(lockAction.c_str());
|
||||
|
||||
if((int)timeControlLockAction == 0xff)
|
||||
{
|
||||
@@ -4104,7 +3645,7 @@ const BLEAddress NukiOpenerWrapper::getBleAddress() const
|
||||
return _nukiOpener.getBleAddress();
|
||||
}
|
||||
|
||||
BleScanner::Scanner *NukiOpenerWrapper::bleScanner()
|
||||
const BleScanner::Scanner *NukiOpenerWrapper::bleScanner()
|
||||
{
|
||||
return _bleScanner;
|
||||
}
|
||||
@@ -4195,19 +3736,12 @@ void NukiOpenerWrapper::readAdvancedConfig()
|
||||
postponeBleWatchdog();
|
||||
}
|
||||
|
||||
void NukiOpenerWrapper::printCommandResult(Nuki::CmdResult result)
|
||||
{
|
||||
char resultStr[15];
|
||||
NukiOpener::cmdResultToString(result, resultStr);
|
||||
Log->println(resultStr);
|
||||
}
|
||||
|
||||
std::string NukiOpenerWrapper::firmwareVersion() const
|
||||
const std::string NukiOpenerWrapper::firmwareVersion() const
|
||||
{
|
||||
return _firmwareVersion;
|
||||
}
|
||||
|
||||
std::string NukiOpenerWrapper::hardwareVersion() const
|
||||
const std::string NukiOpenerWrapper::hardwareVersion() const
|
||||
{
|
||||
return _hardwareVersion;
|
||||
}
|
||||
|
||||
@@ -28,7 +28,7 @@ public:
|
||||
bool hasConnected();
|
||||
bool isPinValid();
|
||||
void setPin(const uint16_t pin);
|
||||
uint16_t getPin();
|
||||
const uint16_t getPin();
|
||||
|
||||
void unpair();
|
||||
void disableWatchdog();
|
||||
@@ -37,12 +37,12 @@ public:
|
||||
const bool isPaired() const;
|
||||
const bool hasKeypad() const;
|
||||
const BLEAddress getBleAddress() const;
|
||||
uint8_t restartController();
|
||||
const uint8_t restartController() const;
|
||||
|
||||
std::string firmwareVersion() const;
|
||||
std::string hardwareVersion() const;
|
||||
const std::string firmwareVersion() const;
|
||||
const std::string hardwareVersion() const;
|
||||
|
||||
BleScanner::Scanner* bleScanner();
|
||||
const BleScanner::Scanner* bleScanner();
|
||||
|
||||
void notify(NukiOpener::EventType eventType) override;
|
||||
|
||||
@@ -76,18 +76,6 @@ private:
|
||||
void readConfig();
|
||||
void readAdvancedConfig();
|
||||
|
||||
void printCommandResult(Nuki::CmdResult result);
|
||||
|
||||
NukiOpener::LockAction lockActionToEnum(const char* str); // char array at least 14 characters
|
||||
Nuki::AdvertisingMode advertisingModeToEnum(const char* str);
|
||||
Nuki::TimeZoneId timeZoneToEnum(const char* str);
|
||||
uint8_t fobActionToInt(const char *str);
|
||||
uint8_t operatingModeToInt(const char *str);
|
||||
uint8_t doorbellSuppressionToInt(const char *str);
|
||||
uint8_t soundToInt(const char *str);
|
||||
NukiOpener::ButtonPressAction buttonPressActionToEnum(const char* str);
|
||||
Nuki::BatteryType batteryTypeToEnum(const char* str);
|
||||
|
||||
std::string _deviceName;
|
||||
NukiDeviceId* _deviceId = nullptr;
|
||||
NukiOpener::NukiOpener _nukiOpener;
|
||||
|
||||
@@ -9,6 +9,7 @@
|
||||
#include "hal/wdt_hal.h"
|
||||
#include <time.h>
|
||||
#include "esp_sntp.h"
|
||||
#include "util/NukiHelper.h"
|
||||
|
||||
NukiWrapper* nukiInst = nullptr;
|
||||
|
||||
@@ -229,12 +230,12 @@ void NukiWrapper::readSettings()
|
||||
}
|
||||
}
|
||||
|
||||
uint8_t NukiWrapper::restartController()
|
||||
const uint8_t NukiWrapper::restartController() const
|
||||
{
|
||||
return _restartController;
|
||||
}
|
||||
|
||||
bool NukiWrapper::hasConnected()
|
||||
const bool NukiWrapper::hasConnected() const
|
||||
{
|
||||
return _hasConnected;
|
||||
}
|
||||
@@ -489,7 +490,7 @@ void NukiWrapper::lockngounlatch()
|
||||
_nextLockAction = NukiLock::LockAction::LockNgoUnlatch;
|
||||
}
|
||||
|
||||
bool NukiWrapper::isPinValid()
|
||||
const bool NukiWrapper::isPinValid()
|
||||
{
|
||||
return _preferences->getInt(preference_lock_pin_status, (int)NukiPinState::NotConfigured) == (int)NukiPinState::Valid;
|
||||
}
|
||||
@@ -504,12 +505,12 @@ void NukiWrapper::setUltraPin(const uint32_t pin)
|
||||
_nukiLock.saveUltraPincode(pin);
|
||||
}
|
||||
|
||||
uint16_t NukiWrapper::getPin()
|
||||
const uint16_t NukiWrapper::getPin()
|
||||
{
|
||||
return _nukiLock.getSecurityPincode();
|
||||
}
|
||||
|
||||
uint32_t NukiWrapper::getUltraPin()
|
||||
const uint32_t NukiWrapper::getUltraPin()
|
||||
{
|
||||
return _nukiLock.getUltraPincode();
|
||||
}
|
||||
@@ -647,7 +648,7 @@ void NukiWrapper::updateBatteryState()
|
||||
}
|
||||
}
|
||||
|
||||
printCommandResult(result);
|
||||
NukiHelper::printCommandResult(result);
|
||||
if(result == Nuki::CmdResult::Success)
|
||||
{
|
||||
_network->publishBatteryReport(_batteryReport);
|
||||
@@ -955,7 +956,7 @@ void NukiWrapper::updateAuthData(bool retrieved)
|
||||
}
|
||||
}
|
||||
|
||||
printCommandResult(result);
|
||||
NukiHelper::printCommandResult(result);
|
||||
if(result == Nuki::CmdResult::Success)
|
||||
{
|
||||
_waitAuthLogUpdateTs = espMillis() + 5000;
|
||||
@@ -1043,7 +1044,7 @@ void NukiWrapper::updateKeypad(bool retrieved)
|
||||
}
|
||||
}
|
||||
|
||||
printCommandResult(result);
|
||||
NukiHelper::printCommandResult(result);
|
||||
if(result == Nuki::CmdResult::Success)
|
||||
{
|
||||
_waitKeypadUpdateTs = espMillis() + 5000;
|
||||
@@ -1122,7 +1123,7 @@ void NukiWrapper::updateTimeControl(bool retrieved)
|
||||
}
|
||||
}
|
||||
|
||||
printCommandResult(result);
|
||||
NukiHelper::printCommandResult(result);
|
||||
if(result == Nuki::CmdResult::Success)
|
||||
{
|
||||
_waitTimeControlUpdateTs = espMillis() + 5000;
|
||||
@@ -1203,7 +1204,7 @@ void NukiWrapper::updateAuth(bool retrieved)
|
||||
}
|
||||
}
|
||||
|
||||
printCommandResult(result);
|
||||
NukiHelper::printCommandResult(result);
|
||||
if(result == Nuki::CmdResult::Success)
|
||||
{
|
||||
_waitAuthUpdateTs = millis() + 5000;
|
||||
@@ -1252,47 +1253,6 @@ void NukiWrapper::postponeBleWatchdog()
|
||||
_disableBleWatchdogTs = espMillis() + 15000;
|
||||
}
|
||||
|
||||
NukiLock::LockAction NukiWrapper::lockActionToEnum(const char *str)
|
||||
{
|
||||
if(strcmp(str, "unlock") == 0 || strcmp(str, "Unlock") == 0)
|
||||
{
|
||||
return NukiLock::LockAction::Unlock;
|
||||
}
|
||||
else if(strcmp(str, "lock") == 0 || strcmp(str, "Lock") == 0)
|
||||
{
|
||||
return NukiLock::LockAction::Lock;
|
||||
}
|
||||
else if(strcmp(str, "unlatch") == 0 || strcmp(str, "Unlatch") == 0)
|
||||
{
|
||||
return NukiLock::LockAction::Unlatch;
|
||||
}
|
||||
else if(strcmp(str, "lockNgo") == 0 || strcmp(str, "LockNgo") == 0)
|
||||
{
|
||||
return NukiLock::LockAction::LockNgo;
|
||||
}
|
||||
else if(strcmp(str, "lockNgoUnlatch") == 0 || strcmp(str, "LockNgoUnlatch") == 0)
|
||||
{
|
||||
return NukiLock::LockAction::LockNgoUnlatch;
|
||||
}
|
||||
else if(strcmp(str, "fullLock") == 0 || strcmp(str, "FullLock") == 0)
|
||||
{
|
||||
return NukiLock::LockAction::FullLock;
|
||||
}
|
||||
else if(strcmp(str, "fobAction2") == 0 || strcmp(str, "FobAction2") == 0)
|
||||
{
|
||||
return NukiLock::LockAction::FobAction2;
|
||||
}
|
||||
else if(strcmp(str, "fobAction1") == 0 || strcmp(str, "FobAction1") == 0)
|
||||
{
|
||||
return NukiLock::LockAction::FobAction1;
|
||||
}
|
||||
else if(strcmp(str, "fobAction3") == 0 || strcmp(str, "FobAction3") == 0)
|
||||
{
|
||||
return NukiLock::LockAction::FobAction3;
|
||||
}
|
||||
return (NukiLock::LockAction)0xff;
|
||||
}
|
||||
|
||||
LockActionResult NukiWrapper::onLockActionReceivedCallback(const char *value)
|
||||
{
|
||||
return nukiInst->onLockActionReceived(value);
|
||||
@@ -1306,7 +1266,7 @@ LockActionResult NukiWrapper::onLockActionReceived(const char *value)
|
||||
{
|
||||
if(strlen(value) > 0)
|
||||
{
|
||||
action = nukiInst->lockActionToEnum(value);
|
||||
action = NukiHelper::lockActionToEnum(value);
|
||||
if((int)action == 0xff)
|
||||
{
|
||||
return LockActionResult::UnknownAction;
|
||||
@@ -1363,316 +1323,11 @@ void NukiWrapper::onConfigUpdateReceivedCallback(const char *value)
|
||||
nukiInst->onConfigUpdateReceived(value);
|
||||
}
|
||||
|
||||
bool NukiWrapper::offConnected()
|
||||
const bool NukiWrapper::offConnected()
|
||||
{
|
||||
return _nukiOfficial->getOffConnected();
|
||||
}
|
||||
|
||||
Nuki::AdvertisingMode NukiWrapper::advertisingModeToEnum(const char *str)
|
||||
{
|
||||
if(strcmp(str, "Automatic") == 0)
|
||||
{
|
||||
return Nuki::AdvertisingMode::Automatic;
|
||||
}
|
||||
else if(strcmp(str, "Normal") == 0)
|
||||
{
|
||||
return Nuki::AdvertisingMode::Normal;
|
||||
}
|
||||
else if(strcmp(str, "Slow") == 0)
|
||||
{
|
||||
return Nuki::AdvertisingMode::Slow;
|
||||
}
|
||||
else if(strcmp(str, "Slowest") == 0)
|
||||
{
|
||||
return Nuki::AdvertisingMode::Slowest;
|
||||
}
|
||||
return (Nuki::AdvertisingMode)0xff;
|
||||
}
|
||||
|
||||
Nuki::TimeZoneId NukiWrapper::timeZoneToEnum(const char *str)
|
||||
{
|
||||
if(strcmp(str, "Africa/Cairo") == 0)
|
||||
{
|
||||
return Nuki::TimeZoneId::Africa_Cairo;
|
||||
}
|
||||
else if(strcmp(str, "Africa/Lagos") == 0)
|
||||
{
|
||||
return Nuki::TimeZoneId::Africa_Lagos;
|
||||
}
|
||||
else if(strcmp(str, "Africa/Maputo") == 0)
|
||||
{
|
||||
return Nuki::TimeZoneId::Africa_Maputo;
|
||||
}
|
||||
else if(strcmp(str, "Africa/Nairobi") == 0)
|
||||
{
|
||||
return Nuki::TimeZoneId::Africa_Nairobi;
|
||||
}
|
||||
else if(strcmp(str, "America/Anchorage") == 0)
|
||||
{
|
||||
return Nuki::TimeZoneId::America_Anchorage;
|
||||
}
|
||||
else if(strcmp(str, "America/Argentina/Buenos_Aires") == 0)
|
||||
{
|
||||
return Nuki::TimeZoneId::America_Argentina_Buenos_Aires;
|
||||
}
|
||||
else if(strcmp(str, "America/Chicago") == 0)
|
||||
{
|
||||
return Nuki::TimeZoneId::America_Chicago;
|
||||
}
|
||||
else if(strcmp(str, "America/Denver") == 0)
|
||||
{
|
||||
return Nuki::TimeZoneId::America_Denver;
|
||||
}
|
||||
else if(strcmp(str, "America/Halifax") == 0)
|
||||
{
|
||||
return Nuki::TimeZoneId::America_Halifax;
|
||||
}
|
||||
else if(strcmp(str, "America/Los_Angeles") == 0)
|
||||
{
|
||||
return Nuki::TimeZoneId::America_Los_Angeles;
|
||||
}
|
||||
else if(strcmp(str, "America/Manaus") == 0)
|
||||
{
|
||||
return Nuki::TimeZoneId::America_Manaus;
|
||||
}
|
||||
else if(strcmp(str, "America/Mexico_City") == 0)
|
||||
{
|
||||
return Nuki::TimeZoneId::America_Mexico_City;
|
||||
}
|
||||
else if(strcmp(str, "America/New_York") == 0)
|
||||
{
|
||||
return Nuki::TimeZoneId::America_New_York;
|
||||
}
|
||||
else if(strcmp(str, "America/Phoenix") == 0)
|
||||
{
|
||||
return Nuki::TimeZoneId::America_Phoenix;
|
||||
}
|
||||
else if(strcmp(str, "America/Regina") == 0)
|
||||
{
|
||||
return Nuki::TimeZoneId::America_Regina;
|
||||
}
|
||||
else if(strcmp(str, "America/Santiago") == 0)
|
||||
{
|
||||
return Nuki::TimeZoneId::America_Santiago;
|
||||
}
|
||||
else if(strcmp(str, "America/Sao_Paulo") == 0)
|
||||
{
|
||||
return Nuki::TimeZoneId::America_Sao_Paulo;
|
||||
}
|
||||
else if(strcmp(str, "America/St_Johns") == 0)
|
||||
{
|
||||
return Nuki::TimeZoneId::America_St_Johns;
|
||||
}
|
||||
else if(strcmp(str, "Asia/Bangkok") == 0)
|
||||
{
|
||||
return Nuki::TimeZoneId::Asia_Bangkok;
|
||||
}
|
||||
else if(strcmp(str, "Asia/Dubai") == 0)
|
||||
{
|
||||
return Nuki::TimeZoneId::Asia_Dubai;
|
||||
}
|
||||
else if(strcmp(str, "Asia/Hong_Kong") == 0)
|
||||
{
|
||||
return Nuki::TimeZoneId::Asia_Hong_Kong;
|
||||
}
|
||||
else if(strcmp(str, "Asia/Jerusalem") == 0)
|
||||
{
|
||||
return Nuki::TimeZoneId::Asia_Jerusalem;
|
||||
}
|
||||
else if(strcmp(str, "Asia/Karachi") == 0)
|
||||
{
|
||||
return Nuki::TimeZoneId::Asia_Karachi;
|
||||
}
|
||||
else if(strcmp(str, "Asia/Kathmandu") == 0)
|
||||
{
|
||||
return Nuki::TimeZoneId::Asia_Kathmandu;
|
||||
}
|
||||
else if(strcmp(str, "Asia/Kolkata") == 0)
|
||||
{
|
||||
return Nuki::TimeZoneId::Asia_Kolkata;
|
||||
}
|
||||
else if(strcmp(str, "Asia/Riyadh") == 0)
|
||||
{
|
||||
return Nuki::TimeZoneId::Asia_Riyadh;
|
||||
}
|
||||
else if(strcmp(str, "Asia/Seoul") == 0)
|
||||
{
|
||||
return Nuki::TimeZoneId::Asia_Seoul;
|
||||
}
|
||||
else if(strcmp(str, "Asia/Shanghai") == 0)
|
||||
{
|
||||
return Nuki::TimeZoneId::Asia_Shanghai;
|
||||
}
|
||||
else if(strcmp(str, "Asia/Tehran") == 0)
|
||||
{
|
||||
return Nuki::TimeZoneId::Asia_Tehran;
|
||||
}
|
||||
else if(strcmp(str, "Asia/Tokyo") == 0)
|
||||
{
|
||||
return Nuki::TimeZoneId::Asia_Tokyo;
|
||||
}
|
||||
else if(strcmp(str, "Asia/Yangon") == 0)
|
||||
{
|
||||
return Nuki::TimeZoneId::Asia_Yangon;
|
||||
}
|
||||
else if(strcmp(str, "Australia/Adelaide") == 0)
|
||||
{
|
||||
return Nuki::TimeZoneId::Australia_Adelaide;
|
||||
}
|
||||
else if(strcmp(str, "Australia/Brisbane") == 0)
|
||||
{
|
||||
return Nuki::TimeZoneId::Australia_Brisbane;
|
||||
}
|
||||
else if(strcmp(str, "Australia/Darwin") == 0)
|
||||
{
|
||||
return Nuki::TimeZoneId::Australia_Darwin;
|
||||
}
|
||||
else if(strcmp(str, "Australia/Hobart") == 0)
|
||||
{
|
||||
return Nuki::TimeZoneId::Australia_Hobart;
|
||||
}
|
||||
else if(strcmp(str, "Australia/Perth") == 0)
|
||||
{
|
||||
return Nuki::TimeZoneId::Australia_Perth;
|
||||
}
|
||||
else if(strcmp(str, "Australia/Sydney") == 0)
|
||||
{
|
||||
return Nuki::TimeZoneId::Australia_Sydney;
|
||||
}
|
||||
else if(strcmp(str, "Europe/Berlin") == 0)
|
||||
{
|
||||
return Nuki::TimeZoneId::Europe_Berlin;
|
||||
}
|
||||
else if(strcmp(str, "Europe/Helsinki") == 0)
|
||||
{
|
||||
return Nuki::TimeZoneId::Europe_Helsinki;
|
||||
}
|
||||
else if(strcmp(str, "Europe/Istanbul") == 0)
|
||||
{
|
||||
return Nuki::TimeZoneId::Europe_Istanbul;
|
||||
}
|
||||
else if(strcmp(str, "Europe/London") == 0)
|
||||
{
|
||||
return Nuki::TimeZoneId::Europe_London;
|
||||
}
|
||||
else if(strcmp(str, "Europe/Moscow") == 0)
|
||||
{
|
||||
return Nuki::TimeZoneId::Europe_Moscow;
|
||||
}
|
||||
else if(strcmp(str, "Pacific/Auckland") == 0)
|
||||
{
|
||||
return Nuki::TimeZoneId::Pacific_Auckland;
|
||||
}
|
||||
else if(strcmp(str, "Pacific/Guam") == 0)
|
||||
{
|
||||
return Nuki::TimeZoneId::Pacific_Guam;
|
||||
}
|
||||
else if(strcmp(str, "Pacific/Honolulu") == 0)
|
||||
{
|
||||
return Nuki::TimeZoneId::Pacific_Honolulu;
|
||||
}
|
||||
else if(strcmp(str, "Pacific/Pago_Pago") == 0)
|
||||
{
|
||||
return Nuki::TimeZoneId::Pacific_Pago_Pago;
|
||||
}
|
||||
else if(strcmp(str, "None") == 0)
|
||||
{
|
||||
return Nuki::TimeZoneId::None;
|
||||
}
|
||||
return (Nuki::TimeZoneId)0xff;
|
||||
}
|
||||
|
||||
uint8_t NukiWrapper::fobActionToInt(const char *str)
|
||||
{
|
||||
if(strcmp(str, "No Action") == 0)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
else if(strcmp(str, "Unlock") == 0)
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
else if(strcmp(str, "Lock") == 0)
|
||||
{
|
||||
return 2;
|
||||
}
|
||||
else if(strcmp(str, "Lock n Go") == 0)
|
||||
{
|
||||
return 3;
|
||||
}
|
||||
else if(strcmp(str, "Intelligent") == 0)
|
||||
{
|
||||
return 4;
|
||||
}
|
||||
return 99;
|
||||
}
|
||||
|
||||
NukiLock::ButtonPressAction NukiWrapper::buttonPressActionToEnum(const char* str)
|
||||
{
|
||||
if(strcmp(str, "No Action") == 0)
|
||||
{
|
||||
return NukiLock::ButtonPressAction::NoAction;
|
||||
}
|
||||
else if(strcmp(str, "Intelligent") == 0)
|
||||
{
|
||||
return NukiLock::ButtonPressAction::Intelligent;
|
||||
}
|
||||
else if(strcmp(str, "Unlock") == 0)
|
||||
{
|
||||
return NukiLock::ButtonPressAction::Unlock;
|
||||
}
|
||||
else if(strcmp(str, "Lock") == 0)
|
||||
{
|
||||
return NukiLock::ButtonPressAction::Lock;
|
||||
}
|
||||
else if(strcmp(str, "Unlatch") == 0)
|
||||
{
|
||||
return NukiLock::ButtonPressAction::Unlatch;
|
||||
}
|
||||
else if(strcmp(str, "Lock n Go") == 0)
|
||||
{
|
||||
return NukiLock::ButtonPressAction::LockNgo;
|
||||
}
|
||||
else if(strcmp(str, "Show Status") == 0)
|
||||
{
|
||||
return NukiLock::ButtonPressAction::ShowStatus;
|
||||
}
|
||||
return (NukiLock::ButtonPressAction)0xff;
|
||||
}
|
||||
|
||||
Nuki::BatteryType NukiWrapper::batteryTypeToEnum(const char* str)
|
||||
{
|
||||
if(strcmp(str, "Alkali") == 0)
|
||||
{
|
||||
return Nuki::BatteryType::Alkali;
|
||||
}
|
||||
else if(strcmp(str, "Accumulators") == 0)
|
||||
{
|
||||
return Nuki::BatteryType::Accumulators;
|
||||
}
|
||||
else if(strcmp(str, "Lithium") == 0)
|
||||
{
|
||||
return Nuki::BatteryType::Lithium;
|
||||
}
|
||||
return (Nuki::BatteryType)0xff;
|
||||
}
|
||||
|
||||
NukiLock::MotorSpeed NukiWrapper::motorSpeedToEnum(const char* str)
|
||||
{
|
||||
if(strcmp(str, "Standard") == 0)
|
||||
{
|
||||
return NukiLock::MotorSpeed::Standard;
|
||||
}
|
||||
else if(strcmp(str, "Insane") == 0)
|
||||
{
|
||||
return NukiLock::MotorSpeed::Insane;
|
||||
}
|
||||
else if(strcmp(str, "Gentle") == 0)
|
||||
{
|
||||
return NukiLock::MotorSpeed::Gentle;
|
||||
}
|
||||
return (NukiLock::MotorSpeed)0xff;
|
||||
}
|
||||
|
||||
void NukiWrapper::onOfficialUpdateReceived(const char *topic, const char *value)
|
||||
{
|
||||
@@ -1956,7 +1611,7 @@ void NukiWrapper::onConfigUpdateReceived(const char *value)
|
||||
}
|
||||
else if(strcmp(basicKeys[i], "fobAction1") == 0)
|
||||
{
|
||||
const uint8_t fobAct1 = nukiInst->fobActionToInt(jsonchar);
|
||||
const uint8_t fobAct1 = NukiHelper::fobActionToInt(jsonchar);
|
||||
|
||||
if(fobAct1 != 99)
|
||||
{
|
||||
@@ -1976,7 +1631,7 @@ void NukiWrapper::onConfigUpdateReceived(const char *value)
|
||||
}
|
||||
else if(strcmp(basicKeys[i], "fobAction2") == 0)
|
||||
{
|
||||
const uint8_t fobAct2 = nukiInst->fobActionToInt(jsonchar);
|
||||
const uint8_t fobAct2 = NukiHelper::fobActionToInt(jsonchar);
|
||||
|
||||
if(fobAct2 != 99)
|
||||
{
|
||||
@@ -1996,7 +1651,7 @@ void NukiWrapper::onConfigUpdateReceived(const char *value)
|
||||
}
|
||||
else if(strcmp(basicKeys[i], "fobAction3") == 0)
|
||||
{
|
||||
const uint8_t fobAct3 = nukiInst->fobActionToInt(jsonchar);
|
||||
const uint8_t fobAct3 = NukiHelper::fobActionToInt(jsonchar);
|
||||
|
||||
if(fobAct3 != 99)
|
||||
{
|
||||
@@ -2036,7 +1691,7 @@ void NukiWrapper::onConfigUpdateReceived(const char *value)
|
||||
}
|
||||
else if(strcmp(basicKeys[i], "advertisingMode") == 0)
|
||||
{
|
||||
Nuki::AdvertisingMode advmode = nukiInst->advertisingModeToEnum(jsonchar);
|
||||
Nuki::AdvertisingMode advmode = NukiHelper::advertisingModeToEnum(jsonchar);
|
||||
|
||||
if((int)advmode != 0xff)
|
||||
{
|
||||
@@ -2056,7 +1711,7 @@ void NukiWrapper::onConfigUpdateReceived(const char *value)
|
||||
}
|
||||
else if(strcmp(basicKeys[i], "timeZone") == 0)
|
||||
{
|
||||
Nuki::TimeZoneId tzid = nukiInst->timeZoneToEnum(jsonchar);
|
||||
Nuki::TimeZoneId tzid = NukiHelper::timeZoneToEnum(jsonchar);
|
||||
|
||||
if((int)tzid != 0xff)
|
||||
{
|
||||
@@ -2246,7 +1901,7 @@ void NukiWrapper::onConfigUpdateReceived(const char *value)
|
||||
}
|
||||
else if(strcmp(advancedKeys[j], "singleButtonPressAction") == 0)
|
||||
{
|
||||
NukiLock::ButtonPressAction sbpa = nukiInst->buttonPressActionToEnum(jsonchar);
|
||||
NukiLock::ButtonPressAction sbpa = NukiHelper::buttonPressActionToEnum(jsonchar);
|
||||
|
||||
if((int)sbpa != 0xff)
|
||||
{
|
||||
@@ -2266,7 +1921,7 @@ void NukiWrapper::onConfigUpdateReceived(const char *value)
|
||||
}
|
||||
else if(strcmp(advancedKeys[j], "doubleButtonPressAction") == 0)
|
||||
{
|
||||
NukiLock::ButtonPressAction dbpa = nukiInst->buttonPressActionToEnum(jsonchar);
|
||||
NukiLock::ButtonPressAction dbpa = NukiHelper::buttonPressActionToEnum(jsonchar);
|
||||
|
||||
if((int)dbpa != 0xff)
|
||||
{
|
||||
@@ -2306,7 +1961,7 @@ void NukiWrapper::onConfigUpdateReceived(const char *value)
|
||||
}
|
||||
else if(strcmp(advancedKeys[j], "batteryType") == 0)
|
||||
{
|
||||
Nuki::BatteryType battype = nukiInst->batteryTypeToEnum(jsonchar);
|
||||
Nuki::BatteryType battype = NukiHelper::batteryTypeToEnum(jsonchar);
|
||||
|
||||
if((int)battype != 0xff && !_isUltra)
|
||||
{
|
||||
@@ -2603,7 +2258,7 @@ void NukiWrapper::onConfigUpdateReceived(const char *value)
|
||||
}
|
||||
else if(strcmp(advancedKeys[j], "motorSpeed") == 0)
|
||||
{
|
||||
NukiLock::MotorSpeed motorSpeed = nukiInst->motorSpeedToEnum(jsonchar);
|
||||
NukiLock::MotorSpeed motorSpeed = NukiHelper::motorSpeedToEnum(jsonchar);
|
||||
|
||||
if((int)motorSpeed != 0xff)
|
||||
{
|
||||
@@ -3572,7 +3227,7 @@ void NukiWrapper::onTimeControlCommandReceived(const char *value)
|
||||
|
||||
if(lockAction.length() > 0)
|
||||
{
|
||||
timeControlLockAction = nukiInst->lockActionToEnum(lockAction.c_str());
|
||||
timeControlLockAction = NukiHelper::lockActionToEnum(lockAction.c_str());
|
||||
|
||||
if((int)timeControlLockAction == 0xff)
|
||||
{
|
||||
@@ -4488,19 +4143,12 @@ const BLEAddress NukiWrapper::getBleAddress() const
|
||||
return _nukiLock.getBleAddress();
|
||||
}
|
||||
|
||||
void NukiWrapper::printCommandResult(Nuki::CmdResult result)
|
||||
{
|
||||
char resultStr[15];
|
||||
NukiLock::cmdResultToString(result, resultStr);
|
||||
Log->println(resultStr);
|
||||
}
|
||||
|
||||
std::string NukiWrapper::firmwareVersion() const
|
||||
const std::string NukiWrapper::firmwareVersion() const
|
||||
{
|
||||
return _firmwareVersion;
|
||||
}
|
||||
|
||||
std::string NukiWrapper::hardwareVersion() const
|
||||
const std::string NukiWrapper::hardwareVersion() const
|
||||
{
|
||||
return _hardwareVersion;
|
||||
}
|
||||
|
||||
@@ -27,12 +27,12 @@ public:
|
||||
void lockngo();
|
||||
void lockngounlatch();
|
||||
|
||||
bool hasConnected();
|
||||
bool isPinValid();
|
||||
const bool hasConnected() const;
|
||||
const bool isPinValid();
|
||||
void setPin(const uint16_t pin);
|
||||
void setUltraPin(const uint32_t pin);
|
||||
uint16_t getPin();
|
||||
uint32_t getUltraPin();
|
||||
const uint16_t getPin();
|
||||
const uint32_t getUltraPin();
|
||||
void unpair();
|
||||
|
||||
void disableWatchdog();
|
||||
@@ -41,12 +41,12 @@ public:
|
||||
const bool isPaired() const;
|
||||
const bool hasKeypad() const;
|
||||
bool hasDoorSensor() const;
|
||||
bool offConnected();
|
||||
const bool offConnected();
|
||||
const BLEAddress getBleAddress() const;
|
||||
uint8_t restartController();
|
||||
const uint8_t restartController() const;
|
||||
|
||||
std::string firmwareVersion() const;
|
||||
std::string hardwareVersion() const;
|
||||
const std::string firmwareVersion() const;
|
||||
const std::string hardwareVersion() const;
|
||||
|
||||
void notify(Nuki::EventType eventType) override;
|
||||
|
||||
@@ -84,16 +84,6 @@ private:
|
||||
void readConfig();
|
||||
void readAdvancedConfig();
|
||||
|
||||
void printCommandResult(Nuki::CmdResult result);
|
||||
|
||||
NukiLock::LockAction lockActionToEnum(const char* str); // char array at least 14 characters
|
||||
Nuki::AdvertisingMode advertisingModeToEnum(const char* str);
|
||||
Nuki::TimeZoneId timeZoneToEnum(const char* str);
|
||||
uint8_t fobActionToInt(const char *str);
|
||||
NukiLock::ButtonPressAction buttonPressActionToEnum(const char* str);
|
||||
Nuki::BatteryType batteryTypeToEnum(const char* str);
|
||||
NukiLock::MotorSpeed motorSpeedToEnum(const char* str);
|
||||
|
||||
std::string _deviceName;
|
||||
NukiDeviceId* _deviceId = nullptr;
|
||||
NukiLock::NukiLock _nukiLock;
|
||||
|
||||
358
src/util/NukiHelper.cpp
Normal file
358
src/util/NukiHelper.cpp
Normal file
@@ -0,0 +1,358 @@
|
||||
#include "NukiHelper.h"
|
||||
#include <cstring>
|
||||
#include "Logger.h"
|
||||
|
||||
const NukiLock::LockAction NukiHelper::lockActionToEnum(const char *str)
|
||||
{
|
||||
if(strcmp(str, "unlock") == 0 || strcmp(str, "Unlock") == 0)
|
||||
{
|
||||
return NukiLock::LockAction::Unlock;
|
||||
}
|
||||
else if(strcmp(str, "lock") == 0 || strcmp(str, "Lock") == 0)
|
||||
{
|
||||
return NukiLock::LockAction::Lock;
|
||||
}
|
||||
else if(strcmp(str, "unlatch") == 0 || strcmp(str, "Unlatch") == 0)
|
||||
{
|
||||
return NukiLock::LockAction::Unlatch;
|
||||
}
|
||||
else if(strcmp(str, "lockNgo") == 0 || strcmp(str, "LockNgo") == 0)
|
||||
{
|
||||
return NukiLock::LockAction::LockNgo;
|
||||
}
|
||||
else if(strcmp(str, "lockNgoUnlatch") == 0 || strcmp(str, "LockNgoUnlatch") == 0)
|
||||
{
|
||||
return NukiLock::LockAction::LockNgoUnlatch;
|
||||
}
|
||||
else if(strcmp(str, "fullLock") == 0 || strcmp(str, "FullLock") == 0)
|
||||
{
|
||||
return NukiLock::LockAction::FullLock;
|
||||
}
|
||||
else if(strcmp(str, "fobAction2") == 0 || strcmp(str, "FobAction2") == 0)
|
||||
{
|
||||
return NukiLock::LockAction::FobAction2;
|
||||
}
|
||||
else if(strcmp(str, "fobAction1") == 0 || strcmp(str, "FobAction1") == 0)
|
||||
{
|
||||
return NukiLock::LockAction::FobAction1;
|
||||
}
|
||||
else if(strcmp(str, "fobAction3") == 0 || strcmp(str, "FobAction3") == 0)
|
||||
{
|
||||
return NukiLock::LockAction::FobAction3;
|
||||
}
|
||||
return (NukiLock::LockAction)0xff;
|
||||
}
|
||||
|
||||
const Nuki::AdvertisingMode NukiHelper::advertisingModeToEnum(const char *str)
|
||||
{
|
||||
if(strcmp(str, "Automatic") == 0)
|
||||
{
|
||||
return Nuki::AdvertisingMode::Automatic;
|
||||
}
|
||||
else if(strcmp(str, "Normal") == 0)
|
||||
{
|
||||
return Nuki::AdvertisingMode::Normal;
|
||||
}
|
||||
else if(strcmp(str, "Slow") == 0)
|
||||
{
|
||||
return Nuki::AdvertisingMode::Slow;
|
||||
}
|
||||
else if(strcmp(str, "Slowest") == 0)
|
||||
{
|
||||
return Nuki::AdvertisingMode::Slowest;
|
||||
}
|
||||
return (Nuki::AdvertisingMode)0xff;
|
||||
}
|
||||
|
||||
const Nuki::TimeZoneId NukiHelper::timeZoneToEnum(const char *str)
|
||||
{
|
||||
if(strcmp(str, "Africa/Cairo") == 0)
|
||||
{
|
||||
return Nuki::TimeZoneId::Africa_Cairo;
|
||||
}
|
||||
else if(strcmp(str, "Africa/Lagos") == 0)
|
||||
{
|
||||
return Nuki::TimeZoneId::Africa_Lagos;
|
||||
}
|
||||
else if(strcmp(str, "Africa/Maputo") == 0)
|
||||
{
|
||||
return Nuki::TimeZoneId::Africa_Maputo;
|
||||
}
|
||||
else if(strcmp(str, "Africa/Nairobi") == 0)
|
||||
{
|
||||
return Nuki::TimeZoneId::Africa_Nairobi;
|
||||
}
|
||||
else if(strcmp(str, "America/Anchorage") == 0)
|
||||
{
|
||||
return Nuki::TimeZoneId::America_Anchorage;
|
||||
}
|
||||
else if(strcmp(str, "America/Argentina/Buenos_Aires") == 0)
|
||||
{
|
||||
return Nuki::TimeZoneId::America_Argentina_Buenos_Aires;
|
||||
}
|
||||
else if(strcmp(str, "America/Chicago") == 0)
|
||||
{
|
||||
return Nuki::TimeZoneId::America_Chicago;
|
||||
}
|
||||
else if(strcmp(str, "America/Denver") == 0)
|
||||
{
|
||||
return Nuki::TimeZoneId::America_Denver;
|
||||
}
|
||||
else if(strcmp(str, "America/Halifax") == 0)
|
||||
{
|
||||
return Nuki::TimeZoneId::America_Halifax;
|
||||
}
|
||||
else if(strcmp(str, "America/Los_Angeles") == 0)
|
||||
{
|
||||
return Nuki::TimeZoneId::America_Los_Angeles;
|
||||
}
|
||||
else if(strcmp(str, "America/Manaus") == 0)
|
||||
{
|
||||
return Nuki::TimeZoneId::America_Manaus;
|
||||
}
|
||||
else if(strcmp(str, "America/Mexico_City") == 0)
|
||||
{
|
||||
return Nuki::TimeZoneId::America_Mexico_City;
|
||||
}
|
||||
else if(strcmp(str, "America/New_York") == 0)
|
||||
{
|
||||
return Nuki::TimeZoneId::America_New_York;
|
||||
}
|
||||
else if(strcmp(str, "America/Phoenix") == 0)
|
||||
{
|
||||
return Nuki::TimeZoneId::America_Phoenix;
|
||||
}
|
||||
else if(strcmp(str, "America/Regina") == 0)
|
||||
{
|
||||
return Nuki::TimeZoneId::America_Regina;
|
||||
}
|
||||
else if(strcmp(str, "America/Santiago") == 0)
|
||||
{
|
||||
return Nuki::TimeZoneId::America_Santiago;
|
||||
}
|
||||
else if(strcmp(str, "America/Sao_Paulo") == 0)
|
||||
{
|
||||
return Nuki::TimeZoneId::America_Sao_Paulo;
|
||||
}
|
||||
else if(strcmp(str, "America/St_Johns") == 0)
|
||||
{
|
||||
return Nuki::TimeZoneId::America_St_Johns;
|
||||
}
|
||||
else if(strcmp(str, "Asia/Bangkok") == 0)
|
||||
{
|
||||
return Nuki::TimeZoneId::Asia_Bangkok;
|
||||
}
|
||||
else if(strcmp(str, "Asia/Dubai") == 0)
|
||||
{
|
||||
return Nuki::TimeZoneId::Asia_Dubai;
|
||||
}
|
||||
else if(strcmp(str, "Asia/Hong_Kong") == 0)
|
||||
{
|
||||
return Nuki::TimeZoneId::Asia_Hong_Kong;
|
||||
}
|
||||
else if(strcmp(str, "Asia/Jerusalem") == 0)
|
||||
{
|
||||
return Nuki::TimeZoneId::Asia_Jerusalem;
|
||||
}
|
||||
else if(strcmp(str, "Asia/Karachi") == 0)
|
||||
{
|
||||
return Nuki::TimeZoneId::Asia_Karachi;
|
||||
}
|
||||
else if(strcmp(str, "Asia/Kathmandu") == 0)
|
||||
{
|
||||
return Nuki::TimeZoneId::Asia_Kathmandu;
|
||||
}
|
||||
else if(strcmp(str, "Asia/Kolkata") == 0)
|
||||
{
|
||||
return Nuki::TimeZoneId::Asia_Kolkata;
|
||||
}
|
||||
else if(strcmp(str, "Asia/Riyadh") == 0)
|
||||
{
|
||||
return Nuki::TimeZoneId::Asia_Riyadh;
|
||||
}
|
||||
else if(strcmp(str, "Asia/Seoul") == 0)
|
||||
{
|
||||
return Nuki::TimeZoneId::Asia_Seoul;
|
||||
}
|
||||
else if(strcmp(str, "Asia/Shanghai") == 0)
|
||||
{
|
||||
return Nuki::TimeZoneId::Asia_Shanghai;
|
||||
}
|
||||
else if(strcmp(str, "Asia/Tehran") == 0)
|
||||
{
|
||||
return Nuki::TimeZoneId::Asia_Tehran;
|
||||
}
|
||||
else if(strcmp(str, "Asia/Tokyo") == 0)
|
||||
{
|
||||
return Nuki::TimeZoneId::Asia_Tokyo;
|
||||
}
|
||||
else if(strcmp(str, "Asia/Yangon") == 0)
|
||||
{
|
||||
return Nuki::TimeZoneId::Asia_Yangon;
|
||||
}
|
||||
else if(strcmp(str, "Australia/Adelaide") == 0)
|
||||
{
|
||||
return Nuki::TimeZoneId::Australia_Adelaide;
|
||||
}
|
||||
else if(strcmp(str, "Australia/Brisbane") == 0)
|
||||
{
|
||||
return Nuki::TimeZoneId::Australia_Brisbane;
|
||||
}
|
||||
else if(strcmp(str, "Australia/Darwin") == 0)
|
||||
{
|
||||
return Nuki::TimeZoneId::Australia_Darwin;
|
||||
}
|
||||
else if(strcmp(str, "Australia/Hobart") == 0)
|
||||
{
|
||||
return Nuki::TimeZoneId::Australia_Hobart;
|
||||
}
|
||||
else if(strcmp(str, "Australia/Perth") == 0)
|
||||
{
|
||||
return Nuki::TimeZoneId::Australia_Perth;
|
||||
}
|
||||
else if(strcmp(str, "Australia/Sydney") == 0)
|
||||
{
|
||||
return Nuki::TimeZoneId::Australia_Sydney;
|
||||
}
|
||||
else if(strcmp(str, "Europe/Berlin") == 0)
|
||||
{
|
||||
return Nuki::TimeZoneId::Europe_Berlin;
|
||||
}
|
||||
else if(strcmp(str, "Europe/Helsinki") == 0)
|
||||
{
|
||||
return Nuki::TimeZoneId::Europe_Helsinki;
|
||||
}
|
||||
else if(strcmp(str, "Europe/Istanbul") == 0)
|
||||
{
|
||||
return Nuki::TimeZoneId::Europe_Istanbul;
|
||||
}
|
||||
else if(strcmp(str, "Europe/London") == 0)
|
||||
{
|
||||
return Nuki::TimeZoneId::Europe_London;
|
||||
}
|
||||
else if(strcmp(str, "Europe/Moscow") == 0)
|
||||
{
|
||||
return Nuki::TimeZoneId::Europe_Moscow;
|
||||
}
|
||||
else if(strcmp(str, "Pacific/Auckland") == 0)
|
||||
{
|
||||
return Nuki::TimeZoneId::Pacific_Auckland;
|
||||
}
|
||||
else if(strcmp(str, "Pacific/Guam") == 0)
|
||||
{
|
||||
return Nuki::TimeZoneId::Pacific_Guam;
|
||||
}
|
||||
else if(strcmp(str, "Pacific/Honolulu") == 0)
|
||||
{
|
||||
return Nuki::TimeZoneId::Pacific_Honolulu;
|
||||
}
|
||||
else if(strcmp(str, "Pacific/Pago_Pago") == 0)
|
||||
{
|
||||
return Nuki::TimeZoneId::Pacific_Pago_Pago;
|
||||
}
|
||||
else if(strcmp(str, "None") == 0)
|
||||
{
|
||||
return Nuki::TimeZoneId::None;
|
||||
}
|
||||
return (Nuki::TimeZoneId)0xff;
|
||||
}
|
||||
|
||||
const uint8_t NukiHelper::fobActionToInt(const char *str)
|
||||
{
|
||||
if(strcmp(str, "No Action") == 0)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
else if(strcmp(str, "Unlock") == 0)
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
else if(strcmp(str, "Lock") == 0)
|
||||
{
|
||||
return 2;
|
||||
}
|
||||
else if(strcmp(str, "Lock n Go") == 0)
|
||||
{
|
||||
return 3;
|
||||
}
|
||||
else if(strcmp(str, "Intelligent") == 0)
|
||||
{
|
||||
return 4;
|
||||
}
|
||||
return 99;
|
||||
}
|
||||
|
||||
const NukiLock::ButtonPressAction NukiHelper::buttonPressActionToEnum(const char* str)
|
||||
{
|
||||
if(strcmp(str, "No Action") == 0)
|
||||
{
|
||||
return NukiLock::ButtonPressAction::NoAction;
|
||||
}
|
||||
else if(strcmp(str, "Intelligent") == 0)
|
||||
{
|
||||
return NukiLock::ButtonPressAction::Intelligent;
|
||||
}
|
||||
else if(strcmp(str, "Unlock") == 0)
|
||||
{
|
||||
return NukiLock::ButtonPressAction::Unlock;
|
||||
}
|
||||
else if(strcmp(str, "Lock") == 0)
|
||||
{
|
||||
return NukiLock::ButtonPressAction::Lock;
|
||||
}
|
||||
else if(strcmp(str, "Unlatch") == 0)
|
||||
{
|
||||
return NukiLock::ButtonPressAction::Unlatch;
|
||||
}
|
||||
else if(strcmp(str, "Lock n Go") == 0)
|
||||
{
|
||||
return NukiLock::ButtonPressAction::LockNgo;
|
||||
}
|
||||
else if(strcmp(str, "Show Status") == 0)
|
||||
{
|
||||
return NukiLock::ButtonPressAction::ShowStatus;
|
||||
}
|
||||
return (NukiLock::ButtonPressAction)0xff;
|
||||
}
|
||||
|
||||
const Nuki::BatteryType NukiHelper::batteryTypeToEnum(const char* str)
|
||||
{
|
||||
if(strcmp(str, "Alkali") == 0)
|
||||
{
|
||||
return Nuki::BatteryType::Alkali;
|
||||
}
|
||||
else if(strcmp(str, "Accumulators") == 0)
|
||||
{
|
||||
return Nuki::BatteryType::Accumulators;
|
||||
}
|
||||
else if(strcmp(str, "Lithium") == 0)
|
||||
{
|
||||
return Nuki::BatteryType::Lithium;
|
||||
}
|
||||
return (Nuki::BatteryType)0xff;
|
||||
}
|
||||
|
||||
const NukiLock::MotorSpeed NukiHelper::motorSpeedToEnum(const char* str)
|
||||
{
|
||||
if(strcmp(str, "Standard") == 0)
|
||||
{
|
||||
return NukiLock::MotorSpeed::Standard;
|
||||
}
|
||||
else if(strcmp(str, "Insane") == 0)
|
||||
{
|
||||
return NukiLock::MotorSpeed::Insane;
|
||||
}
|
||||
else if(strcmp(str, "Gentle") == 0)
|
||||
{
|
||||
return NukiLock::MotorSpeed::Gentle;
|
||||
}
|
||||
return (NukiLock::MotorSpeed)0xff;
|
||||
}
|
||||
|
||||
void NukiHelper::printCommandResult(Nuki::CmdResult result)
|
||||
{
|
||||
char resultStr[15];
|
||||
NukiLock::cmdResultToString(result, resultStr);
|
||||
Log->println(resultStr);
|
||||
}
|
||||
|
||||
18
src/util/NukiHelper.h
Normal file
18
src/util/NukiHelper.h
Normal file
@@ -0,0 +1,18 @@
|
||||
#pragma once
|
||||
|
||||
#include "NukiConstants.h"
|
||||
#include "NukiLock.h"
|
||||
|
||||
class NukiHelper
|
||||
{
|
||||
public:
|
||||
static const NukiLock::LockAction lockActionToEnum(const char* str); // char array at least 14 characters
|
||||
static const Nuki::AdvertisingMode advertisingModeToEnum(const char* str);
|
||||
static const Nuki::TimeZoneId timeZoneToEnum(const char* str);
|
||||
static const uint8_t fobActionToInt(const char *str);
|
||||
static const NukiLock::ButtonPressAction buttonPressActionToEnum(const char* str);
|
||||
static const Nuki::BatteryType batteryTypeToEnum(const char* str);
|
||||
static const NukiLock::MotorSpeed motorSpeedToEnum(const char* str);
|
||||
|
||||
static void printCommandResult(Nuki::CmdResult result);
|
||||
};
|
||||
279
src/util/NukiOpenerHelper.cpp
Normal file
279
src/util/NukiOpenerHelper.cpp
Normal file
@@ -0,0 +1,279 @@
|
||||
#include "NukiOpenerHelper.h"
|
||||
#include <cstring>
|
||||
#include "Logger.h"
|
||||
#include "NukiOpenerUtils.h"
|
||||
|
||||
const NukiOpener::LockAction NukiOpenerHelper::lockActionToEnum(const char *str)
|
||||
{
|
||||
if(strcmp(str, "activateRTO") == 0 || strcmp(str, "ActivateRTO") == 0)
|
||||
{
|
||||
return NukiOpener::LockAction::ActivateRTO;
|
||||
}
|
||||
else if(strcmp(str, "deactivateRTO") == 0 || strcmp(str, "DeactivateRTO") == 0)
|
||||
{
|
||||
return NukiOpener::LockAction::DeactivateRTO;
|
||||
}
|
||||
else if(strcmp(str, "electricStrikeActuation") == 0 || strcmp(str, "ElectricStrikeActuation") == 0)
|
||||
{
|
||||
return NukiOpener::LockAction::ElectricStrikeActuation;
|
||||
}
|
||||
else if(strcmp(str, "activateCM") == 0 || strcmp(str, "ActivateCM") == 0)
|
||||
{
|
||||
return NukiOpener::LockAction::ActivateCM;
|
||||
}
|
||||
else if(strcmp(str, "deactivateCM") == 0 || strcmp(str, "DeactivateCM") == 0)
|
||||
{
|
||||
return NukiOpener::LockAction::DeactivateCM;
|
||||
}
|
||||
else if(strcmp(str, "fobAction2") == 0 || strcmp(str, "FobAction2") == 0)
|
||||
{
|
||||
return NukiOpener::LockAction::FobAction2;
|
||||
}
|
||||
else if(strcmp(str, "fobAction1") == 0 || strcmp(str, "FobAction1") == 0)
|
||||
{
|
||||
return NukiOpener::LockAction::FobAction1;
|
||||
}
|
||||
else if(strcmp(str, "fobAction3") == 0 || strcmp(str, "FobAction3") == 0)
|
||||
{
|
||||
return NukiOpener::LockAction::FobAction3;
|
||||
}
|
||||
return (NukiOpener::LockAction)0xff;
|
||||
}
|
||||
|
||||
const Nuki::AdvertisingMode NukiOpenerHelper::advertisingModeToEnum(const char *str)
|
||||
{
|
||||
if(strcmp(str, "Automatic") == 0)
|
||||
{
|
||||
return Nuki::AdvertisingMode::Automatic;
|
||||
}
|
||||
else if(strcmp(str, "Normal") == 0)
|
||||
{
|
||||
return Nuki::AdvertisingMode::Normal;
|
||||
}
|
||||
else if(strcmp(str, "Slow") == 0)
|
||||
{
|
||||
return Nuki::AdvertisingMode::Slow;
|
||||
}
|
||||
else if(strcmp(str, "Slowest") == 0)
|
||||
{
|
||||
return Nuki::AdvertisingMode::Slowest;
|
||||
}
|
||||
return (Nuki::AdvertisingMode)0xff;
|
||||
}
|
||||
|
||||
const uint8_t NukiOpenerHelper::fobActionToInt(const char *str)
|
||||
{
|
||||
if(strcmp(str, "No Action") == 0)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
else if(strcmp(str, "Toggle RTO") == 0)
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
else if(strcmp(str, "Activate RTO") == 0)
|
||||
{
|
||||
return 2;
|
||||
}
|
||||
else if(strcmp(str, "Deactivate RTO") == 0)
|
||||
{
|
||||
return 3;
|
||||
}
|
||||
else if(strcmp(str, "Open") == 0)
|
||||
{
|
||||
return 7;
|
||||
}
|
||||
else if(strcmp(str, "Ring") == 0)
|
||||
{
|
||||
return 8;
|
||||
}
|
||||
return 99;
|
||||
}
|
||||
|
||||
const uint8_t NukiOpenerHelper::operatingModeToInt(const char *str)
|
||||
{
|
||||
if(strcmp(str, "Generic door opener") == 0)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
else if(strcmp(str, "Analogue intercom") == 0)
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
else if(strcmp(str, "Digital intercom") == 0)
|
||||
{
|
||||
return 2;
|
||||
}
|
||||
else if(strcmp(str, "Siedle") == 0)
|
||||
{
|
||||
return 3;
|
||||
}
|
||||
else if(strcmp(str, "TCS") == 0)
|
||||
{
|
||||
return 4;
|
||||
}
|
||||
else if(strcmp(str, "Bticino") == 0)
|
||||
{
|
||||
return 5;
|
||||
}
|
||||
else if(strcmp(str, "Siedle HTS") == 0)
|
||||
{
|
||||
return 6;
|
||||
}
|
||||
else if(strcmp(str, "STR") == 0)
|
||||
{
|
||||
return 7;
|
||||
}
|
||||
else if(strcmp(str, "Ritto") == 0)
|
||||
{
|
||||
return 8;
|
||||
}
|
||||
else if(strcmp(str, "Fermax") == 0)
|
||||
{
|
||||
return 9;
|
||||
}
|
||||
else if(strcmp(str, "Comelit") == 0)
|
||||
{
|
||||
return 10;
|
||||
}
|
||||
else if(strcmp(str, "Urmet BiBus") == 0)
|
||||
{
|
||||
return 11;
|
||||
}
|
||||
else if(strcmp(str, "Urmet 2Voice") == 0)
|
||||
{
|
||||
return 12;
|
||||
}
|
||||
else if(strcmp(str, "Golmar") == 0)
|
||||
{
|
||||
return 13;
|
||||
}
|
||||
else if(strcmp(str, "SKS") == 0)
|
||||
{
|
||||
return 14;
|
||||
}
|
||||
else if(strcmp(str, "Spare") == 0)
|
||||
{
|
||||
return 15;
|
||||
}
|
||||
return 99;
|
||||
}
|
||||
|
||||
const uint8_t NukiOpenerHelper::doorbellSuppressionToInt(const char *str)
|
||||
{
|
||||
if(strcmp(str, "Off") == 0)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
else if(strcmp(str, "CM") == 0)
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
else if(strcmp(str, "RTO") == 0)
|
||||
{
|
||||
return 2;
|
||||
}
|
||||
else if(strcmp(str, "CM & RTO") == 0)
|
||||
{
|
||||
return 3;
|
||||
}
|
||||
else if(strcmp(str, "Ring") == 0)
|
||||
{
|
||||
return 4;
|
||||
}
|
||||
else if(strcmp(str, "CM & Ring") == 0)
|
||||
{
|
||||
return 5;
|
||||
}
|
||||
else if(strcmp(str, "RTO & Ring") == 0)
|
||||
{
|
||||
return 6;
|
||||
}
|
||||
else if(strcmp(str, "CM & RTO & Ring") == 0)
|
||||
{
|
||||
return 7;
|
||||
}
|
||||
return 99;
|
||||
}
|
||||
|
||||
const uint8_t NukiOpenerHelper::soundToInt(const char *str)
|
||||
{
|
||||
if(strcmp(str, "No Sound") == 0)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
else if(strcmp(str, "Sound 1") == 0)
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
else if(strcmp(str, "Sound 2") == 0)
|
||||
{
|
||||
return 2;
|
||||
}
|
||||
else if(strcmp(str, "Sound 3") == 0)
|
||||
{
|
||||
return 3;
|
||||
}
|
||||
return 99;
|
||||
}
|
||||
|
||||
const NukiOpener::ButtonPressAction NukiOpenerHelper::buttonPressActionToEnum(const char* str)
|
||||
{
|
||||
if(strcmp(str, "No Action") == 0)
|
||||
{
|
||||
return NukiOpener::ButtonPressAction::NoAction;
|
||||
}
|
||||
else if(strcmp(str, "Toggle RTO") == 0)
|
||||
{
|
||||
return NukiOpener::ButtonPressAction::ToggleRTO;
|
||||
}
|
||||
else if(strcmp(str, "Activate RTO") == 0)
|
||||
{
|
||||
return NukiOpener::ButtonPressAction::ActivateRTO;
|
||||
}
|
||||
else if(strcmp(str, "Deactivate RTO") == 0)
|
||||
{
|
||||
return NukiOpener::ButtonPressAction::DeactivateRTO;
|
||||
}
|
||||
else if(strcmp(str, "Toggle CM") == 0)
|
||||
{
|
||||
return NukiOpener::ButtonPressAction::ToggleCM;
|
||||
}
|
||||
else if(strcmp(str, "Activate CM") == 0)
|
||||
{
|
||||
return NukiOpener::ButtonPressAction::ActivateCM;
|
||||
}
|
||||
else if(strcmp(str, "Deactivate CM") == 0)
|
||||
{
|
||||
return NukiOpener::ButtonPressAction::DectivateCM;
|
||||
}
|
||||
else if(strcmp(str, "Open") == 0)
|
||||
{
|
||||
return NukiOpener::ButtonPressAction::Open;
|
||||
}
|
||||
return (NukiOpener::ButtonPressAction)0xff;
|
||||
}
|
||||
|
||||
const Nuki::BatteryType NukiOpenerHelper::batteryTypeToEnum(const char* str)
|
||||
{
|
||||
if(strcmp(str, "Alkali") == 0)
|
||||
{
|
||||
return Nuki::BatteryType::Alkali;
|
||||
}
|
||||
else if(strcmp(str, "Accumulators") == 0)
|
||||
{
|
||||
return Nuki::BatteryType::Accumulators;
|
||||
}
|
||||
else if(strcmp(str, "Lithium") == 0)
|
||||
{
|
||||
return Nuki::BatteryType::Lithium;
|
||||
}
|
||||
return (Nuki::BatteryType)0xff;
|
||||
}
|
||||
|
||||
void NukiOpenerHelper::printCommandResult(Nuki::CmdResult result)
|
||||
{
|
||||
char resultStr[15];
|
||||
NukiOpener::cmdResultToString(result, resultStr);
|
||||
Log->println(resultStr);
|
||||
}
|
||||
17
src/util/NukiOpenerHelper.h
Normal file
17
src/util/NukiOpenerHelper.h
Normal file
@@ -0,0 +1,17 @@
|
||||
#pragma once
|
||||
#include "NukiOpener.h"
|
||||
|
||||
class NukiOpenerHelper
|
||||
{
|
||||
public:
|
||||
static const NukiOpener::LockAction lockActionToEnum(const char* str); // char array at least 24 characters
|
||||
static const Nuki::AdvertisingMode advertisingModeToEnum(const char* str);
|
||||
static const uint8_t fobActionToInt(const char *str);
|
||||
static const uint8_t operatingModeToInt(const char *str);
|
||||
static const uint8_t doorbellSuppressionToInt(const char *str);
|
||||
static const uint8_t soundToInt(const char *str);
|
||||
static const NukiOpener::ButtonPressAction buttonPressActionToEnum(const char* str);
|
||||
static const Nuki::BatteryType batteryTypeToEnum(const char* str);
|
||||
|
||||
static void printCommandResult(Nuki::CmdResult result);
|
||||
};
|
||||
@@ -1,363 +1,344 @@
|
||||
0x2f, 0x2a, 0x0d, 0x0a, 0x65, 0x73, 0x63, 0x61, 0x70, 0x65, 0x64, 0x20, 0x62, 0x79, 0x20, 0x68,
|
||||
0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x63, 0x65, 0x73, 0x63, 0x61,
|
||||
0x70, 0x65, 0x72, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x0d, 0x0a, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65,
|
||||
0x3a, 0x20, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x63, 0x64, 0x6e, 0x2e, 0x6a, 0x73,
|
||||
0x64, 0x65, 0x6c, 0x69, 0x76, 0x72, 0x2e, 0x6e, 0x65, 0x74, 0x2f, 0x6e, 0x70, 0x6d, 0x2f, 0x40,
|
||||
0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x64, 0x65, 0x76, 0x2f, 0x6e, 0x65, 0x77, 0x2e, 0x63,
|
||||
0x73, 0x73, 0x40, 0x31, 0x2e, 0x31, 0x2e, 0x32, 0x2f, 0x6e, 0x65, 0x77, 0x2e, 0x6d, 0x69, 0x6e,
|
||||
0x2e, 0x63, 0x73, 0x73, 0x0d, 0x0a, 0x2a, 0x2f, 0x0d, 0x0a, 0x0d, 0x0a, 0x2f, 0x2a, 0x0d, 0x0a,
|
||||
0x20, 0x2a, 0x20, 0x55, 0x73, 0x61, 0x67, 0x65, 0x3a, 0x0d, 0x0a, 0x20, 0x2a, 0x20, 0x43, 0x6f,
|
||||
0x6d, 0x70, 0x61, 0x63, 0x74, 0x20, 0x2f, 0x20, 0x6d, 0x69, 0x6e, 0x69, 0x66, 0x79, 0x20, 0x74,
|
||||
0x68, 0x69, 0x73, 0x20, 0x63, 0x6f, 0x64, 0x65, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x61, 0x6e,
|
||||
0x79, 0x20, 0x74, 0x6f, 0x6f, 0x6c, 0x0d, 0x0a, 0x20, 0x2a, 0x20, 0x43, 0x6f, 0x70, 0x79, 0x20,
|
||||
0x6f, 0x6e, 0x65, 0x2d, 0x6c, 0x69, 0x6e, 0x65, 0x20, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x20,
|
||||
0x74, 0x6f, 0x20, 0x73, 0x72, 0x63, 0x2f, 0x57, 0x65, 0x62, 0x43, 0x66, 0x67, 0x53, 0x65, 0x72,
|
||||
0x76, 0x65, 0x72, 0x43, 0x6f, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x74, 0x73, 0x2e, 0x68, 0x20, 0x61,
|
||||
0x73, 0x20, 0x73, 0x74, 0x79, 0x6c, 0x65, 0x63, 0x73, 0x73, 0x0d, 0x0a, 0x20, 0x2a, 0x20, 0x54,
|
||||
0x4f, 0x44, 0x4f, 0x3a, 0x20, 0x61, 0x75, 0x74, 0x6f, 0x6d, 0x61, 0x74, 0x65, 0x20, 0x74, 0x68,
|
||||
0x69, 0x73, 0x20, 0x70, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x20, 0x75, 0x70, 0x6f, 0x6e, 0x20,
|
||||
0x62, 0x75, 0x69, 0x6c, 0x64, 0x69, 0x6e, 0x67, 0x20, 0x3a, 0x29, 0x0d, 0x0a, 0x2a, 0x2f, 0x0d,
|
||||
0x0a, 0x0d, 0x0a, 0x3a, 0x72, 0x6f, 0x6f, 0x74, 0x20, 0x7b, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20,
|
||||
0x2d, 0x2d, 0x6e, 0x63, 0x2d, 0x66, 0x6f, 0x6e, 0x74, 0x2d, 0x73, 0x61, 0x6e, 0x73, 0x3a, 0x20,
|
||||
0x27, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x27, 0x2c, 0x2d, 0x61, 0x70, 0x70, 0x6c, 0x65, 0x2d, 0x73,
|
||||
0x79, 0x73, 0x74, 0x65, 0x6d, 0x2c, 0x42, 0x6c, 0x69, 0x6e, 0x6b, 0x4d, 0x61, 0x63, 0x53, 0x79,
|
||||
0x73, 0x74, 0x65, 0x6d, 0x46, 0x6f, 0x6e, 0x74, 0x2c, 0x27, 0x53, 0x65, 0x67, 0x6f, 0x65, 0x20,
|
||||
0x55, 0x49, 0x27, 0x2c, 0x52, 0x6f, 0x62, 0x6f, 0x74, 0x6f, 0x2c, 0x4f, 0x78, 0x79, 0x67, 0x65,
|
||||
0x6e, 0x2c, 0x55, 0x62, 0x75, 0x6e, 0x74, 0x75, 0x2c, 0x43, 0x61, 0x6e, 0x74, 0x61, 0x72, 0x65,
|
||||
0x6c, 0x6c, 0x2c, 0x27, 0x4f, 0x70, 0x65, 0x6e, 0x20, 0x53, 0x61, 0x6e, 0x73, 0x27, 0x2c, 0x27,
|
||||
0x48, 0x65, 0x6c, 0x76, 0x65, 0x74, 0x69, 0x63, 0x61, 0x20, 0x4e, 0x65, 0x75, 0x65, 0x27, 0x2c,
|
||||
0x73, 0x61, 0x6e, 0x73, 0x2d, 0x73, 0x65, 0x72, 0x69, 0x66, 0x2c, 0x27, 0x41, 0x70, 0x70, 0x6c,
|
||||
0x65, 0x20, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x20, 0x45, 0x6d, 0x6f, 0x6a, 0x69, 0x27, 0x2c, 0x27,
|
||||
0x53, 0x65, 0x67, 0x6f, 0x65, 0x20, 0x55, 0x49, 0x20, 0x45, 0x6d, 0x6f, 0x6a, 0x69, 0x27, 0x2c,
|
||||
0x27, 0x53, 0x65, 0x67, 0x6f, 0x65, 0x20, 0x55, 0x49, 0x20, 0x53, 0x79, 0x6d, 0x62, 0x6f, 0x6c,
|
||||
0x27, 0x3b, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x2d, 0x2d, 0x6e, 0x63, 0x2d, 0x66, 0x6f, 0x6e,
|
||||
0x74, 0x2d, 0x6d, 0x6f, 0x6e, 0x6f, 0x3a, 0x20, 0x43, 0x6f, 0x6e, 0x73, 0x6f, 0x6c, 0x61, 0x73,
|
||||
0x2c, 0x6d, 0x6f, 0x6e, 0x61, 0x63, 0x6f, 0x2c, 0x27, 0x55, 0x62, 0x75, 0x6e, 0x74, 0x75, 0x20,
|
||||
0x4d, 0x6f, 0x6e, 0x6f, 0x27, 0x2c, 0x27, 0x4c, 0x69, 0x62, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f,
|
||||
0x6e, 0x20, 0x4d, 0x6f, 0x6e, 0x6f, 0x27, 0x2c, 0x27, 0x43, 0x6f, 0x75, 0x72, 0x69, 0x65, 0x72,
|
||||
0x20, 0x4e, 0x65, 0x77, 0x27, 0x2c, 0x43, 0x6f, 0x75, 0x72, 0x69, 0x65, 0x72, 0x2c, 0x6d, 0x6f,
|
||||
0x6e, 0x6f, 0x73, 0x70, 0x61, 0x63, 0x65, 0x3b, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x2d, 0x2d,
|
||||
0x6e, 0x63, 0x2d, 0x74, 0x78, 0x2d, 0x31, 0x3a, 0x20, 0x23, 0x30, 0x30, 0x30, 0x3b, 0x0d, 0x0a,
|
||||
0x2f, 0x2a, 0x0a, 0x65, 0x73, 0x63, 0x61, 0x70, 0x65, 0x64, 0x20, 0x62, 0x79, 0x20, 0x68, 0x74,
|
||||
0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x63, 0x65, 0x73, 0x63, 0x61, 0x70,
|
||||
0x65, 0x72, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x0a, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x3a, 0x20,
|
||||
0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x63, 0x64, 0x6e, 0x2e, 0x6a, 0x73, 0x64, 0x65,
|
||||
0x6c, 0x69, 0x76, 0x72, 0x2e, 0x6e, 0x65, 0x74, 0x2f, 0x6e, 0x70, 0x6d, 0x2f, 0x40, 0x65, 0x78,
|
||||
0x61, 0x6d, 0x70, 0x6c, 0x65, 0x64, 0x65, 0x76, 0x2f, 0x6e, 0x65, 0x77, 0x2e, 0x63, 0x73, 0x73,
|
||||
0x40, 0x31, 0x2e, 0x31, 0x2e, 0x32, 0x2f, 0x6e, 0x65, 0x77, 0x2e, 0x6d, 0x69, 0x6e, 0x2e, 0x63,
|
||||
0x73, 0x73, 0x0a, 0x2a, 0x2f, 0x0a, 0x0a, 0x2f, 0x2a, 0x0a, 0x20, 0x2a, 0x20, 0x55, 0x73, 0x61,
|
||||
0x67, 0x65, 0x3a, 0x0a, 0x20, 0x2a, 0x20, 0x43, 0x6f, 0x6d, 0x70, 0x61, 0x63, 0x74, 0x20, 0x2f,
|
||||
0x20, 0x6d, 0x69, 0x6e, 0x69, 0x66, 0x79, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x63, 0x6f, 0x64,
|
||||
0x65, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x61, 0x6e, 0x79, 0x20, 0x74, 0x6f, 0x6f, 0x6c, 0x0a,
|
||||
0x20, 0x2a, 0x20, 0x43, 0x6f, 0x70, 0x79, 0x20, 0x6f, 0x6e, 0x65, 0x2d, 0x6c, 0x69, 0x6e, 0x65,
|
||||
0x20, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x20, 0x74, 0x6f, 0x20, 0x73, 0x72, 0x63, 0x2f, 0x57,
|
||||
0x65, 0x62, 0x43, 0x66, 0x67, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x43, 0x6f, 0x6e, 0x73, 0x74,
|
||||
0x61, 0x6e, 0x74, 0x73, 0x2e, 0x68, 0x20, 0x61, 0x73, 0x20, 0x73, 0x74, 0x79, 0x6c, 0x65, 0x63,
|
||||
0x73, 0x73, 0x0a, 0x20, 0x2a, 0x20, 0x54, 0x4f, 0x44, 0x4f, 0x3a, 0x20, 0x61, 0x75, 0x74, 0x6f,
|
||||
0x6d, 0x61, 0x74, 0x65, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x70, 0x72, 0x6f, 0x63, 0x65, 0x73,
|
||||
0x73, 0x20, 0x75, 0x70, 0x6f, 0x6e, 0x20, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x69, 0x6e, 0x67, 0x20,
|
||||
0x3a, 0x29, 0x0a, 0x2a, 0x2f, 0x0a, 0x0a, 0x3a, 0x72, 0x6f, 0x6f, 0x74, 0x20, 0x7b, 0x0a, 0x20,
|
||||
0x20, 0x20, 0x20, 0x2d, 0x2d, 0x6e, 0x63, 0x2d, 0x66, 0x6f, 0x6e, 0x74, 0x2d, 0x73, 0x61, 0x6e,
|
||||
0x73, 0x3a, 0x20, 0x27, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x27, 0x2c, 0x2d, 0x61, 0x70, 0x70, 0x6c,
|
||||
0x65, 0x2d, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2c, 0x42, 0x6c, 0x69, 0x6e, 0x6b, 0x4d, 0x61,
|
||||
0x63, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x46, 0x6f, 0x6e, 0x74, 0x2c, 0x27, 0x53, 0x65, 0x67,
|
||||
0x6f, 0x65, 0x20, 0x55, 0x49, 0x27, 0x2c, 0x52, 0x6f, 0x62, 0x6f, 0x74, 0x6f, 0x2c, 0x4f, 0x78,
|
||||
0x79, 0x67, 0x65, 0x6e, 0x2c, 0x55, 0x62, 0x75, 0x6e, 0x74, 0x75, 0x2c, 0x43, 0x61, 0x6e, 0x74,
|
||||
0x61, 0x72, 0x65, 0x6c, 0x6c, 0x2c, 0x27, 0x4f, 0x70, 0x65, 0x6e, 0x20, 0x53, 0x61, 0x6e, 0x73,
|
||||
0x27, 0x2c, 0x27, 0x48, 0x65, 0x6c, 0x76, 0x65, 0x74, 0x69, 0x63, 0x61, 0x20, 0x4e, 0x65, 0x75,
|
||||
0x65, 0x27, 0x2c, 0x73, 0x61, 0x6e, 0x73, 0x2d, 0x73, 0x65, 0x72, 0x69, 0x66, 0x2c, 0x27, 0x41,
|
||||
0x70, 0x70, 0x6c, 0x65, 0x20, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x20, 0x45, 0x6d, 0x6f, 0x6a, 0x69,
|
||||
0x27, 0x2c, 0x27, 0x53, 0x65, 0x67, 0x6f, 0x65, 0x20, 0x55, 0x49, 0x20, 0x45, 0x6d, 0x6f, 0x6a,
|
||||
0x69, 0x27, 0x2c, 0x27, 0x53, 0x65, 0x67, 0x6f, 0x65, 0x20, 0x55, 0x49, 0x20, 0x53, 0x79, 0x6d,
|
||||
0x62, 0x6f, 0x6c, 0x27, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x2d, 0x2d, 0x6e, 0x63, 0x2d, 0x66,
|
||||
0x6f, 0x6e, 0x74, 0x2d, 0x6d, 0x6f, 0x6e, 0x6f, 0x3a, 0x20, 0x43, 0x6f, 0x6e, 0x73, 0x6f, 0x6c,
|
||||
0x61, 0x73, 0x2c, 0x6d, 0x6f, 0x6e, 0x61, 0x63, 0x6f, 0x2c, 0x27, 0x55, 0x62, 0x75, 0x6e, 0x74,
|
||||
0x75, 0x20, 0x4d, 0x6f, 0x6e, 0x6f, 0x27, 0x2c, 0x27, 0x4c, 0x69, 0x62, 0x65, 0x72, 0x61, 0x74,
|
||||
0x69, 0x6f, 0x6e, 0x20, 0x4d, 0x6f, 0x6e, 0x6f, 0x27, 0x2c, 0x27, 0x43, 0x6f, 0x75, 0x72, 0x69,
|
||||
0x65, 0x72, 0x20, 0x4e, 0x65, 0x77, 0x27, 0x2c, 0x43, 0x6f, 0x75, 0x72, 0x69, 0x65, 0x72, 0x2c,
|
||||
0x6d, 0x6f, 0x6e, 0x6f, 0x73, 0x70, 0x61, 0x63, 0x65, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x2d,
|
||||
0x2d, 0x6e, 0x63, 0x2d, 0x74, 0x78, 0x2d, 0x31, 0x3a, 0x20, 0x23, 0x30, 0x30, 0x30, 0x3b, 0x0a,
|
||||
0x20, 0x20, 0x20, 0x20, 0x2d, 0x2d, 0x6e, 0x63, 0x2d, 0x74, 0x78, 0x2d, 0x32, 0x3a, 0x20, 0x23,
|
||||
0x31, 0x61, 0x31, 0x61, 0x31, 0x61, 0x3b, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x2d, 0x2d, 0x6e,
|
||||
0x63, 0x2d, 0x62, 0x67, 0x2d, 0x31, 0x3a, 0x20, 0x23, 0x66, 0x66, 0x66, 0x3b, 0x0d, 0x0a, 0x20,
|
||||
0x20, 0x20, 0x20, 0x2d, 0x2d, 0x6e, 0x63, 0x2d, 0x62, 0x67, 0x2d, 0x32, 0x3a, 0x20, 0x23, 0x66,
|
||||
0x36, 0x66, 0x38, 0x66, 0x61, 0x3b, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x2d, 0x2d, 0x6e, 0x63,
|
||||
0x2d, 0x62, 0x67, 0x2d, 0x33, 0x3a, 0x20, 0x23, 0x65, 0x35, 0x65, 0x37, 0x65, 0x62, 0x3b, 0x0d,
|
||||
0x0a, 0x20, 0x20, 0x20, 0x20, 0x2d, 0x2d, 0x6e, 0x63, 0x2d, 0x6c, 0x6b, 0x2d, 0x31, 0x3a, 0x20,
|
||||
0x23, 0x30, 0x30, 0x37, 0x30, 0x66, 0x33, 0x3b, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x2d, 0x2d,
|
||||
0x6e, 0x63, 0x2d, 0x6c, 0x6b, 0x2d, 0x32, 0x3a, 0x20, 0x23, 0x30, 0x33, 0x36, 0x36, 0x64, 0x36,
|
||||
0x3b, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x2d, 0x2d, 0x6e, 0x63, 0x2d, 0x6c, 0x6b, 0x2d, 0x74,
|
||||
0x78, 0x3a, 0x20, 0x23, 0x66, 0x66, 0x66, 0x3b, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x2d, 0x2d,
|
||||
0x6e, 0x63, 0x2d, 0x61, 0x63, 0x2d, 0x31, 0x3a, 0x20, 0x23, 0x37, 0x39, 0x66, 0x66, 0x65, 0x31,
|
||||
0x3b, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x2d, 0x2d, 0x6e, 0x63, 0x2d, 0x61, 0x63, 0x2d, 0x74,
|
||||
0x78, 0x3a, 0x20, 0x23, 0x30, 0x63, 0x34, 0x30, 0x34, 0x37, 0x0d, 0x0a, 0x7d, 0x0d, 0x0a, 0x0d,
|
||||
0x0a, 0x40, 0x6d, 0x65, 0x64, 0x69, 0x61, 0x28, 0x70, 0x72, 0x65, 0x66, 0x65, 0x72, 0x73, 0x2d,
|
||||
0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x2d, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x65, 0x3a, 0x20, 0x64, 0x61,
|
||||
0x72, 0x6b, 0x29, 0x20, 0x7b, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x3a, 0x72, 0x6f, 0x6f, 0x74,
|
||||
0x20, 0x7b, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2d, 0x2d, 0x6e, 0x63,
|
||||
0x2d, 0x74, 0x78, 0x2d, 0x31, 0x3a, 0x23, 0x66, 0x66, 0x66, 0x3b, 0x0d, 0x0a, 0x20, 0x20, 0x20,
|
||||
0x20, 0x20, 0x20, 0x20, 0x20, 0x2d, 0x2d, 0x6e, 0x63, 0x2d, 0x74, 0x78, 0x2d, 0x32, 0x3a, 0x20,
|
||||
0x23, 0x65, 0x65, 0x65, 0x3b, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2d,
|
||||
0x2d, 0x6e, 0x63, 0x2d, 0x62, 0x67, 0x2d, 0x31, 0x3a, 0x20, 0x23, 0x30, 0x30, 0x30, 0x3b, 0x0d,
|
||||
0x31, 0x61, 0x31, 0x61, 0x31, 0x61, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x2d, 0x2d, 0x6e, 0x63,
|
||||
0x2d, 0x62, 0x67, 0x2d, 0x31, 0x3a, 0x20, 0x23, 0x66, 0x66, 0x66, 0x3b, 0x0a, 0x20, 0x20, 0x20,
|
||||
0x20, 0x2d, 0x2d, 0x6e, 0x63, 0x2d, 0x62, 0x67, 0x2d, 0x32, 0x3a, 0x20, 0x23, 0x66, 0x36, 0x66,
|
||||
0x38, 0x66, 0x61, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x2d, 0x2d, 0x6e, 0x63, 0x2d, 0x62, 0x67,
|
||||
0x2d, 0x33, 0x3a, 0x20, 0x23, 0x65, 0x35, 0x65, 0x37, 0x65, 0x62, 0x3b, 0x0a, 0x20, 0x20, 0x20,
|
||||
0x20, 0x2d, 0x2d, 0x6e, 0x63, 0x2d, 0x6c, 0x6b, 0x2d, 0x31, 0x3a, 0x20, 0x23, 0x30, 0x30, 0x37,
|
||||
0x30, 0x66, 0x33, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x2d, 0x2d, 0x6e, 0x63, 0x2d, 0x6c, 0x6b,
|
||||
0x2d, 0x32, 0x3a, 0x20, 0x23, 0x30, 0x33, 0x36, 0x36, 0x64, 0x36, 0x3b, 0x0a, 0x20, 0x20, 0x20,
|
||||
0x20, 0x2d, 0x2d, 0x6e, 0x63, 0x2d, 0x6c, 0x6b, 0x2d, 0x74, 0x78, 0x3a, 0x20, 0x23, 0x66, 0x66,
|
||||
0x66, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x2d, 0x2d, 0x6e, 0x63, 0x2d, 0x61, 0x63, 0x2d, 0x31,
|
||||
0x3a, 0x20, 0x23, 0x37, 0x39, 0x66, 0x66, 0x65, 0x31, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x2d,
|
||||
0x2d, 0x6e, 0x63, 0x2d, 0x61, 0x63, 0x2d, 0x74, 0x78, 0x3a, 0x20, 0x23, 0x30, 0x63, 0x34, 0x30,
|
||||
0x34, 0x37, 0x0a, 0x7d, 0x0a, 0x0a, 0x40, 0x6d, 0x65, 0x64, 0x69, 0x61, 0x28, 0x70, 0x72, 0x65,
|
||||
0x66, 0x65, 0x72, 0x73, 0x2d, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x2d, 0x73, 0x63, 0x68, 0x65, 0x6d,
|
||||
0x65, 0x3a, 0x20, 0x64, 0x61, 0x72, 0x6b, 0x29, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x3a,
|
||||
0x72, 0x6f, 0x6f, 0x74, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2d,
|
||||
0x2d, 0x6e, 0x63, 0x2d, 0x74, 0x78, 0x2d, 0x31, 0x3a, 0x23, 0x66, 0x66, 0x66, 0x3b, 0x0a, 0x20,
|
||||
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2d, 0x2d, 0x6e, 0x63, 0x2d, 0x74, 0x78, 0x2d, 0x32,
|
||||
0x3a, 0x20, 0x23, 0x65, 0x65, 0x65, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
|
||||
0x2d, 0x2d, 0x6e, 0x63, 0x2d, 0x62, 0x67, 0x2d, 0x31, 0x3a, 0x20, 0x23, 0x30, 0x30, 0x30, 0x3b,
|
||||
0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2d, 0x2d, 0x6e, 0x63, 0x2d, 0x62, 0x67,
|
||||
0x2d, 0x32, 0x3a, 0x20, 0x23, 0x31, 0x31, 0x31, 0x3b, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20,
|
||||
0x20, 0x20, 0x20, 0x2d, 0x2d, 0x6e, 0x63, 0x2d, 0x62, 0x67, 0x2d, 0x33, 0x3a, 0x20, 0x23, 0x32,
|
||||
0x32, 0x32, 0x3b, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2d, 0x2d, 0x6e,
|
||||
0x63, 0x2d, 0x6c, 0x6b, 0x2d, 0x31, 0x3a, 0x20, 0x23, 0x33, 0x32, 0x39, 0x31, 0x66, 0x66, 0x3b,
|
||||
0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2d, 0x2d, 0x6e, 0x63, 0x2d, 0x6c,
|
||||
0x6b, 0x2d, 0x32, 0x3a, 0x20, 0x23, 0x30, 0x30, 0x37, 0x30, 0x66, 0x33, 0x3b, 0x0d, 0x0a, 0x20,
|
||||
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2d, 0x2d, 0x6e, 0x63, 0x2d, 0x6c, 0x6b, 0x2d, 0x74,
|
||||
0x78, 0x3a, 0x20, 0x23, 0x66, 0x66, 0x66, 0x3b, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
|
||||
0x20, 0x20, 0x2d, 0x2d, 0x6e, 0x63, 0x2d, 0x61, 0x63, 0x2d, 0x31, 0x3a, 0x20, 0x23, 0x37, 0x39,
|
||||
0x32, 0x38, 0x63, 0x61, 0x3b, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2d,
|
||||
0x2d, 0x6e, 0x63, 0x2d, 0x61, 0x63, 0x2d, 0x74, 0x78, 0x3a, 0x20, 0x23, 0x66, 0x66, 0x66, 0x0d,
|
||||
0x0a, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x0d, 0x0a, 0x7d, 0x0d, 0x0a, 0x0d, 0x0a, 0x2a, 0x20, 0x7b,
|
||||
0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x6d, 0x61, 0x72, 0x67, 0x69, 0x6e, 0x3a, 0x20, 0x30, 0x3b,
|
||||
0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x70, 0x61, 0x64, 0x64, 0x69, 0x6e, 0x67, 0x3a, 0x20, 0x30,
|
||||
0x0d, 0x0a, 0x7d, 0x0d, 0x0a, 0x0d, 0x0a, 0x69, 0x6d, 0x67, 0x2c, 0x69, 0x6e, 0x70, 0x75, 0x74,
|
||||
0x2c, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x2c, 0x70, 0x2c, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x2c,
|
||||
0x74, 0x65, 0x78, 0x74, 0x61, 0x72, 0x65, 0x61, 0x2c, 0x75, 0x6c, 0x20, 0x7b, 0x0d, 0x0a, 0x20,
|
||||
0x2d, 0x32, 0x3a, 0x20, 0x23, 0x31, 0x31, 0x31, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
|
||||
0x20, 0x20, 0x2d, 0x2d, 0x6e, 0x63, 0x2d, 0x62, 0x67, 0x2d, 0x33, 0x3a, 0x20, 0x23, 0x32, 0x32,
|
||||
0x32, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2d, 0x2d, 0x6e, 0x63, 0x2d,
|
||||
0x6c, 0x6b, 0x2d, 0x31, 0x3a, 0x20, 0x23, 0x33, 0x32, 0x39, 0x31, 0x66, 0x66, 0x3b, 0x0a, 0x20,
|
||||
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2d, 0x2d, 0x6e, 0x63, 0x2d, 0x6c, 0x6b, 0x2d, 0x32,
|
||||
0x3a, 0x20, 0x23, 0x30, 0x30, 0x37, 0x30, 0x66, 0x33, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20,
|
||||
0x20, 0x20, 0x20, 0x2d, 0x2d, 0x6e, 0x63, 0x2d, 0x6c, 0x6b, 0x2d, 0x74, 0x78, 0x3a, 0x20, 0x23,
|
||||
0x66, 0x66, 0x66, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2d, 0x2d, 0x6e,
|
||||
0x63, 0x2d, 0x61, 0x63, 0x2d, 0x31, 0x3a, 0x20, 0x23, 0x37, 0x39, 0x32, 0x38, 0x63, 0x61, 0x3b,
|
||||
0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2d, 0x2d, 0x6e, 0x63, 0x2d, 0x61, 0x63,
|
||||
0x2d, 0x74, 0x78, 0x3a, 0x20, 0x23, 0x66, 0x66, 0x66, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x0a,
|
||||
0x7d, 0x0a, 0x0a, 0x2a, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x6d, 0x61, 0x72, 0x67, 0x69,
|
||||
0x6e, 0x3a, 0x20, 0x30, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x70, 0x61, 0x64, 0x64, 0x69, 0x6e,
|
||||
0x67, 0x3a, 0x20, 0x30, 0x0a, 0x7d, 0x0a, 0x0a, 0x69, 0x6d, 0x67, 0x2c, 0x69, 0x6e, 0x70, 0x75,
|
||||
0x74, 0x2c, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x2c, 0x70, 0x2c, 0x74, 0x61, 0x62, 0x6c, 0x65,
|
||||
0x2c, 0x74, 0x65, 0x78, 0x74, 0x61, 0x72, 0x65, 0x61, 0x2c, 0x75, 0x6c, 0x20, 0x7b, 0x0a, 0x20,
|
||||
0x20, 0x20, 0x20, 0x6d, 0x61, 0x72, 0x67, 0x69, 0x6e, 0x2d, 0x62, 0x6f, 0x74, 0x74, 0x6f, 0x6d,
|
||||
0x3a, 0x20, 0x31, 0x72, 0x65, 0x6d, 0x0d, 0x0a, 0x7d, 0x0d, 0x0a, 0x0d, 0x0a, 0x62, 0x75, 0x74,
|
||||
0x74, 0x6f, 0x6e, 0x2c, 0x68, 0x74, 0x6d, 0x6c, 0x2c, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x2c, 0x73,
|
||||
0x65, 0x6c, 0x65, 0x63, 0x74, 0x20, 0x7b, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x66, 0x6f, 0x6e,
|
||||
0x74, 0x2d, 0x66, 0x61, 0x6d, 0x69, 0x6c, 0x79, 0x3a, 0x20, 0x76, 0x61, 0x72, 0x28, 0x2d, 0x2d,
|
||||
0x6e, 0x63, 0x2d, 0x66, 0x6f, 0x6e, 0x74, 0x2d, 0x73, 0x61, 0x6e, 0x73, 0x29, 0x0d, 0x0a, 0x7d,
|
||||
0x0d, 0x0a, 0x0d, 0x0a, 0x62, 0x6f, 0x64, 0x79, 0x20, 0x7b, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20,
|
||||
0x6d, 0x61, 0x72, 0x67, 0x69, 0x6e, 0x3a, 0x20, 0x30, 0x20, 0x61, 0x75, 0x74, 0x6f, 0x3b, 0x0d,
|
||||
0x0a, 0x20, 0x20, 0x20, 0x20, 0x6d, 0x61, 0x78, 0x2d, 0x77, 0x69, 0x64, 0x74, 0x68, 0x3a, 0x20,
|
||||
0x37, 0x35, 0x30, 0x70, 0x78, 0x3b, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x70, 0x61, 0x64, 0x64,
|
||||
0x69, 0x6e, 0x67, 0x3a, 0x20, 0x32, 0x72, 0x65, 0x6d, 0x3b, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20,
|
||||
0x62, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x2d, 0x72, 0x61, 0x64, 0x69, 0x75, 0x73, 0x3a, 0x20, 0x36,
|
||||
0x70, 0x78, 0x3b, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x6f, 0x76, 0x65, 0x72, 0x66, 0x6c, 0x6f,
|
||||
0x77, 0x2d, 0x78, 0x3a, 0x20, 0x68, 0x69, 0x64, 0x64, 0x65, 0x6e, 0x3b, 0x0d, 0x0a, 0x20, 0x20,
|
||||
0x20, 0x20, 0x77, 0x6f, 0x72, 0x64, 0x2d, 0x62, 0x72, 0x65, 0x61, 0x6b, 0x3a, 0x20, 0x6e, 0x6f,
|
||||
0x72, 0x6d, 0x61, 0x6c, 0x3b, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x6f, 0x76, 0x65, 0x72, 0x66,
|
||||
0x6c, 0x6f, 0x77, 0x2d, 0x77, 0x72, 0x61, 0x70, 0x3a, 0x20, 0x61, 0x6e, 0x79, 0x77, 0x68, 0x65,
|
||||
0x72, 0x65, 0x3b, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x62, 0x61, 0x63, 0x6b, 0x67, 0x72, 0x6f,
|
||||
0x75, 0x6e, 0x64, 0x3a, 0x20, 0x76, 0x61, 0x72, 0x28, 0x2d, 0x2d, 0x6e, 0x63, 0x2d, 0x62, 0x67,
|
||||
0x2d, 0x31, 0x29, 0x3b, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x3a,
|
||||
0x3a, 0x20, 0x31, 0x72, 0x65, 0x6d, 0x0a, 0x7d, 0x0a, 0x0a, 0x62, 0x75, 0x74, 0x74, 0x6f, 0x6e,
|
||||
0x2c, 0x68, 0x74, 0x6d, 0x6c, 0x2c, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x2c, 0x73, 0x65, 0x6c, 0x65,
|
||||
0x63, 0x74, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x66, 0x6f, 0x6e, 0x74, 0x2d, 0x66, 0x61,
|
||||
0x6d, 0x69, 0x6c, 0x79, 0x3a, 0x20, 0x76, 0x61, 0x72, 0x28, 0x2d, 0x2d, 0x6e, 0x63, 0x2d, 0x66,
|
||||
0x6f, 0x6e, 0x74, 0x2d, 0x73, 0x61, 0x6e, 0x73, 0x29, 0x0a, 0x7d, 0x0a, 0x0a, 0x62, 0x6f, 0x64,
|
||||
0x79, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x6d, 0x61, 0x72, 0x67, 0x69, 0x6e, 0x3a, 0x20,
|
||||
0x30, 0x20, 0x61, 0x75, 0x74, 0x6f, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x6d, 0x61, 0x78, 0x2d,
|
||||
0x77, 0x69, 0x64, 0x74, 0x68, 0x3a, 0x20, 0x37, 0x35, 0x30, 0x70, 0x78, 0x3b, 0x0a, 0x20, 0x20,
|
||||
0x20, 0x20, 0x70, 0x61, 0x64, 0x64, 0x69, 0x6e, 0x67, 0x3a, 0x20, 0x32, 0x72, 0x65, 0x6d, 0x3b,
|
||||
0x0a, 0x20, 0x20, 0x20, 0x20, 0x62, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x2d, 0x72, 0x61, 0x64, 0x69,
|
||||
0x75, 0x73, 0x3a, 0x20, 0x36, 0x70, 0x78, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x6f, 0x76, 0x65,
|
||||
0x72, 0x66, 0x6c, 0x6f, 0x77, 0x2d, 0x78, 0x3a, 0x20, 0x68, 0x69, 0x64, 0x64, 0x65, 0x6e, 0x3b,
|
||||
0x0a, 0x20, 0x20, 0x20, 0x20, 0x77, 0x6f, 0x72, 0x64, 0x2d, 0x62, 0x72, 0x65, 0x61, 0x6b, 0x3a,
|
||||
0x20, 0x6e, 0x6f, 0x72, 0x6d, 0x61, 0x6c, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x6f, 0x76, 0x65,
|
||||
0x72, 0x66, 0x6c, 0x6f, 0x77, 0x2d, 0x77, 0x72, 0x61, 0x70, 0x3a, 0x20, 0x61, 0x6e, 0x79, 0x77,
|
||||
0x68, 0x65, 0x72, 0x65, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x62, 0x61, 0x63, 0x6b, 0x67, 0x72,
|
||||
0x6f, 0x75, 0x6e, 0x64, 0x3a, 0x20, 0x76, 0x61, 0x72, 0x28, 0x2d, 0x2d, 0x6e, 0x63, 0x2d, 0x62,
|
||||
0x67, 0x2d, 0x31, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x3a,
|
||||
0x20, 0x76, 0x61, 0x72, 0x28, 0x2d, 0x2d, 0x6e, 0x63, 0x2d, 0x74, 0x78, 0x2d, 0x32, 0x29, 0x3b,
|
||||
0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x66, 0x6f, 0x6e, 0x74, 0x2d, 0x73, 0x69, 0x7a, 0x65, 0x3a,
|
||||
0x20, 0x31, 0x2e, 0x30, 0x33, 0x72, 0x65, 0x6d, 0x3b, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x6c,
|
||||
0x69, 0x6e, 0x65, 0x2d, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x3a, 0x20, 0x31, 0x2e, 0x35, 0x0d,
|
||||
0x0a, 0x7d, 0x0d, 0x0a, 0x0d, 0x0a, 0x3a, 0x3a, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f,
|
||||
0x6e, 0x20, 0x7b, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x62, 0x61, 0x63, 0x6b, 0x67, 0x72, 0x6f,
|
||||
0x75, 0x6e, 0x64, 0x3a, 0x20, 0x76, 0x61, 0x72, 0x28, 0x2d, 0x2d, 0x6e, 0x63, 0x2d, 0x61, 0x63,
|
||||
0x2d, 0x31, 0x29, 0x3b, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x3a,
|
||||
0x20, 0x76, 0x61, 0x72, 0x28, 0x2d, 0x2d, 0x6e, 0x63, 0x2d, 0x61, 0x63, 0x2d, 0x74, 0x78, 0x29,
|
||||
0x0d, 0x0a, 0x7d, 0x0d, 0x0a, 0x0d, 0x0a, 0x68, 0x31, 0x2c, 0x68, 0x32, 0x2c, 0x68, 0x33, 0x2c,
|
||||
0x68, 0x34, 0x2c, 0x68, 0x35, 0x2c, 0x68, 0x36, 0x20, 0x7b, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20,
|
||||
0x6c, 0x69, 0x6e, 0x65, 0x2d, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x3a, 0x20, 0x31, 0x3b, 0x0d,
|
||||
0x0a, 0x20, 0x20, 0x20, 0x20, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x3a, 0x20, 0x76, 0x61, 0x72, 0x28,
|
||||
0x2d, 0x2d, 0x6e, 0x63, 0x2d, 0x74, 0x78, 0x2d, 0x31, 0x29, 0x3b, 0x0d, 0x0a, 0x20, 0x20, 0x20,
|
||||
0x20, 0x70, 0x61, 0x64, 0x64, 0x69, 0x6e, 0x67, 0x2d, 0x74, 0x6f, 0x70, 0x3a, 0x20, 0x2e, 0x38,
|
||||
0x37, 0x35, 0x72, 0x65, 0x6d, 0x0d, 0x0a, 0x7d, 0x0d, 0x0a, 0x0d, 0x0a, 0x68, 0x31, 0x2c, 0x68,
|
||||
0x32, 0x2c, 0x68, 0x33, 0x20, 0x7b, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x63, 0x6f, 0x6c, 0x6f,
|
||||
0x72, 0x3a, 0x20, 0x76, 0x61, 0x72, 0x28, 0x2d, 0x2d, 0x6e, 0x63, 0x2d, 0x74, 0x78, 0x2d, 0x31,
|
||||
0x29, 0x3b, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x70, 0x61, 0x64, 0x64, 0x69, 0x6e, 0x67, 0x2d,
|
||||
0x62, 0x6f, 0x74, 0x74, 0x6f, 0x6d, 0x3a, 0x20, 0x32, 0x70, 0x78, 0x3b, 0x0d, 0x0a, 0x20, 0x20,
|
||||
0x20, 0x20, 0x6d, 0x61, 0x72, 0x67, 0x69, 0x6e, 0x2d, 0x62, 0x6f, 0x74, 0x74, 0x6f, 0x6d, 0x3a,
|
||||
0x20, 0x38, 0x70, 0x78, 0x3b, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x62, 0x6f, 0x72, 0x64, 0x65,
|
||||
0x72, 0x2d, 0x62, 0x6f, 0x74, 0x74, 0x6f, 0x6d, 0x3a, 0x20, 0x31, 0x70, 0x78, 0x20, 0x73, 0x6f,
|
||||
0x6c, 0x69, 0x64, 0x20, 0x76, 0x61, 0x72, 0x28, 0x2d, 0x2d, 0x6e, 0x63, 0x2d, 0x62, 0x67, 0x2d,
|
||||
0x32, 0x29, 0x0d, 0x0a, 0x7d, 0x0d, 0x0a, 0x0d, 0x0a, 0x68, 0x34, 0x2c, 0x68, 0x35, 0x2c, 0x68,
|
||||
0x36, 0x20, 0x7b, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x6d, 0x61, 0x72, 0x67, 0x69, 0x6e, 0x2d,
|
||||
0x62, 0x6f, 0x74, 0x74, 0x6f, 0x6d, 0x3a, 0x20, 0x2e, 0x33, 0x72, 0x65, 0x6d, 0x0d, 0x0a, 0x7d,
|
||||
0x0d, 0x0a, 0x0d, 0x0a, 0x68, 0x31, 0x20, 0x7b, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x66, 0x6f,
|
||||
0x6e, 0x74, 0x2d, 0x73, 0x69, 0x7a, 0x65, 0x3a, 0x20, 0x32, 0x2e, 0x32, 0x35, 0x72, 0x65, 0x6d,
|
||||
0x0d, 0x0a, 0x7d, 0x0d, 0x0a, 0x0d, 0x0a, 0x68, 0x32, 0x20, 0x7b, 0x0d, 0x0a, 0x20, 0x20, 0x20,
|
||||
0x20, 0x66, 0x6f, 0x6e, 0x74, 0x2d, 0x73, 0x69, 0x7a, 0x65, 0x3a, 0x20, 0x31, 0x2e, 0x38, 0x35,
|
||||
0x72, 0x65, 0x6d, 0x0d, 0x0a, 0x7d, 0x0d, 0x0a, 0x0d, 0x0a, 0x68, 0x33, 0x20, 0x7b, 0x0d, 0x0a,
|
||||
0x20, 0x20, 0x20, 0x20, 0x66, 0x6f, 0x6e, 0x74, 0x2d, 0x73, 0x69, 0x7a, 0x65, 0x3a, 0x20, 0x31,
|
||||
0x2e, 0x35, 0x35, 0x72, 0x65, 0x6d, 0x0d, 0x0a, 0x7d, 0x0d, 0x0a, 0x0d, 0x0a, 0x68, 0x34, 0x20,
|
||||
0x7b, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x66, 0x6f, 0x6e, 0x74, 0x2d, 0x73, 0x69, 0x7a, 0x65,
|
||||
0x3a, 0x20, 0x31, 0x2e, 0x32, 0x35, 0x72, 0x65, 0x6d, 0x0d, 0x0a, 0x7d, 0x0d, 0x0a, 0x0d, 0x0a,
|
||||
0x68, 0x35, 0x20, 0x7b, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x66, 0x6f, 0x6e, 0x74, 0x2d, 0x73,
|
||||
0x69, 0x7a, 0x65, 0x3a, 0x20, 0x31, 0x72, 0x65, 0x6d, 0x0d, 0x0a, 0x7d, 0x0d, 0x0a, 0x0d, 0x0a,
|
||||
0x68, 0x36, 0x20, 0x7b, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x66, 0x6f, 0x6e, 0x74, 0x2d, 0x73,
|
||||
0x69, 0x7a, 0x65, 0x3a, 0x20, 0x2e, 0x38, 0x37, 0x35, 0x72, 0x65, 0x6d, 0x0d, 0x0a, 0x7d, 0x0d,
|
||||
0x0a, 0x0d, 0x0a, 0x61, 0x20, 0x7b, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x63, 0x6f, 0x6c, 0x6f,
|
||||
0x72, 0x3a, 0x20, 0x76, 0x61, 0x72, 0x28, 0x2d, 0x2d, 0x6e, 0x63, 0x2d, 0x6c, 0x6b, 0x2d, 0x31,
|
||||
0x29, 0x0d, 0x0a, 0x7d, 0x0d, 0x0a, 0x0d, 0x0a, 0x61, 0x3a, 0x68, 0x6f, 0x76, 0x65, 0x72, 0x20,
|
||||
0x7b, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x3a, 0x20, 0x76, 0x61,
|
||||
0x72, 0x28, 0x2d, 0x2d, 0x6e, 0x63, 0x2d, 0x6c, 0x6b, 0x2d, 0x32, 0x29, 0x20, 0x21, 0x69, 0x6d,
|
||||
0x70, 0x6f, 0x72, 0x74, 0x61, 0x6e, 0x74, 0x3b, 0x0d, 0x0a, 0x7d, 0x0d, 0x0a, 0x0d, 0x0a, 0x61,
|
||||
0x62, 0x62, 0x72, 0x20, 0x7b, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x63, 0x75, 0x72, 0x73, 0x6f,
|
||||
0x72, 0x3a, 0x20, 0x68, 0x65, 0x6c, 0x70, 0x0d, 0x0a, 0x7d, 0x0d, 0x0a, 0x0d, 0x0a, 0x61, 0x62,
|
||||
0x62, 0x72, 0x3a, 0x68, 0x6f, 0x76, 0x65, 0x72, 0x20, 0x7b, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20,
|
||||
0x63, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x3a, 0x20, 0x68, 0x65, 0x6c, 0x70, 0x0d, 0x0a, 0x7d, 0x0d,
|
||||
0x0a, 0x0d, 0x0a, 0x61, 0x20, 0x62, 0x75, 0x74, 0x74, 0x6f, 0x6e, 0x2c, 0x62, 0x75, 0x74, 0x74,
|
||||
0x6f, 0x6e, 0x2c, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x5b, 0x74, 0x79, 0x70, 0x65, 0x3d, 0x62, 0x75,
|
||||
0x74, 0x74, 0x6f, 0x6e, 0x5d, 0x2c, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x5b, 0x74, 0x79, 0x70, 0x65,
|
||||
0x3d, 0x72, 0x65, 0x73, 0x65, 0x74, 0x5d, 0x2c, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x5b, 0x74, 0x79,
|
||||
0x70, 0x65, 0x3d, 0x73, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x5d, 0x20, 0x7b, 0x0d, 0x0a, 0x20, 0x20,
|
||||
0x20, 0x20, 0x66, 0x6f, 0x6e, 0x74, 0x2d, 0x73, 0x69, 0x7a, 0x65, 0x3a, 0x20, 0x31, 0x72, 0x65,
|
||||
0x6d, 0x3b, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x64, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x3a,
|
||||
0x20, 0x69, 0x6e, 0x6c, 0x69, 0x6e, 0x65, 0x2d, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x3b, 0x0d, 0x0a,
|
||||
0x20, 0x20, 0x20, 0x20, 0x70, 0x61, 0x64, 0x64, 0x69, 0x6e, 0x67, 0x3a, 0x20, 0x36, 0x70, 0x78,
|
||||
0x20, 0x31, 0x32, 0x70, 0x78, 0x3b, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x74, 0x65, 0x78, 0x74,
|
||||
0x2d, 0x61, 0x6c, 0x69, 0x67, 0x6e, 0x3a, 0x20, 0x63, 0x65, 0x6e, 0x74, 0x65, 0x72, 0x3b, 0x0d,
|
||||
0x0a, 0x20, 0x20, 0x20, 0x20, 0x74, 0x65, 0x78, 0x74, 0x2d, 0x64, 0x65, 0x63, 0x6f, 0x72, 0x61,
|
||||
0x74, 0x69, 0x6f, 0x6e, 0x3a, 0x20, 0x6e, 0x6f, 0x6e, 0x65, 0x3b, 0x0d, 0x0a, 0x20, 0x20, 0x20,
|
||||
0x20, 0x77, 0x68, 0x69, 0x74, 0x65, 0x2d, 0x73, 0x70, 0x61, 0x63, 0x65, 0x3a, 0x20, 0x6e, 0x6f,
|
||||
0x77, 0x72, 0x61, 0x70, 0x3b, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x62, 0x61, 0x63, 0x6b, 0x67,
|
||||
0x72, 0x6f, 0x75, 0x6e, 0x64, 0x3a, 0x20, 0x76, 0x61, 0x72, 0x28, 0x2d, 0x2d, 0x6e, 0x63, 0x2d,
|
||||
0x6c, 0x6b, 0x2d, 0x31, 0x29, 0x3b, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x63, 0x6f, 0x6c, 0x6f,
|
||||
0x72, 0x3a, 0x20, 0x76, 0x61, 0x72, 0x28, 0x2d, 0x2d, 0x6e, 0x63, 0x2d, 0x6c, 0x6b, 0x2d, 0x74,
|
||||
0x78, 0x29, 0x3b, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x62, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x3a,
|
||||
0x20, 0x30, 0x3b, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x62, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x2d,
|
||||
0x72, 0x61, 0x64, 0x69, 0x75, 0x73, 0x3a, 0x20, 0x34, 0x70, 0x78, 0x3b, 0x0d, 0x0a, 0x20, 0x20,
|
||||
0x20, 0x20, 0x62, 0x6f, 0x78, 0x2d, 0x73, 0x69, 0x7a, 0x69, 0x6e, 0x67, 0x3a, 0x20, 0x62, 0x6f,
|
||||
0x72, 0x64, 0x65, 0x72, 0x2d, 0x62, 0x6f, 0x78, 0x3b, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x63,
|
||||
0x75, 0x72, 0x73, 0x6f, 0x72, 0x3a, 0x20, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x3b, 0x0d,
|
||||
0x0a, 0x20, 0x20, 0x20, 0x20, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x3a, 0x20, 0x76, 0x61, 0x72, 0x28,
|
||||
0x2d, 0x2d, 0x6e, 0x63, 0x2d, 0x6c, 0x6b, 0x2d, 0x74, 0x78, 0x29, 0x0d, 0x0a, 0x7d, 0x0d, 0x0a,
|
||||
0x0d, 0x0a, 0x61, 0x20, 0x62, 0x75, 0x74, 0x74, 0x6f, 0x6e, 0x5b, 0x64, 0x69, 0x73, 0x61, 0x62,
|
||||
0x6c, 0x65, 0x64, 0x5d, 0x2c, 0x62, 0x75, 0x74, 0x74, 0x6f, 0x6e, 0x5b, 0x64, 0x69, 0x73, 0x61,
|
||||
0x62, 0x6c, 0x65, 0x64, 0x5d, 0x2c, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x5b, 0x74, 0x79, 0x70, 0x65,
|
||||
0x3d, 0x62, 0x75, 0x74, 0x74, 0x6f, 0x6e, 0x5d, 0x5b, 0x64, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65,
|
||||
0x64, 0x5d, 0x2c, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x5b, 0x74, 0x79, 0x70, 0x65, 0x3d, 0x72, 0x65,
|
||||
0x73, 0x65, 0x74, 0x5d, 0x5b, 0x64, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x5d, 0x2c, 0x69,
|
||||
0x6e, 0x70, 0x75, 0x74, 0x5b, 0x74, 0x79, 0x70, 0x65, 0x3d, 0x73, 0x75, 0x62, 0x6d, 0x69, 0x74,
|
||||
0x5d, 0x5b, 0x64, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x5d, 0x20, 0x7b, 0x0d, 0x0a, 0x20,
|
||||
0x20, 0x20, 0x20, 0x63, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x3a, 0x20, 0x64, 0x65, 0x66, 0x61, 0x75,
|
||||
0x6c, 0x74, 0x3b, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x6f, 0x70, 0x61, 0x63, 0x69, 0x74, 0x79,
|
||||
0x3a, 0x20, 0x2e, 0x35, 0x3b, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x63, 0x75, 0x72, 0x73, 0x6f,
|
||||
0x72, 0x3a, 0x20, 0x6e, 0x6f, 0x74, 0x2d, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x65, 0x64, 0x0d, 0x0a,
|
||||
0x7d, 0x0d, 0x0a, 0x0d, 0x0a, 0x2e, 0x62, 0x75, 0x74, 0x74, 0x6f, 0x6e, 0x3a, 0x66, 0x6f, 0x63,
|
||||
0x75, 0x73, 0x2c, 0x2e, 0x62, 0x75, 0x74, 0x74, 0x6f, 0x6e, 0x3a, 0x68, 0x6f, 0x76, 0x65, 0x72,
|
||||
0x2c, 0x62, 0x75, 0x74, 0x74, 0x6f, 0x6e, 0x3a, 0x66, 0x6f, 0x63, 0x75, 0x73, 0x2c, 0x62, 0x75,
|
||||
0x74, 0x74, 0x6f, 0x6e, 0x3a, 0x68, 0x6f, 0x76, 0x65, 0x72, 0x2c, 0x69, 0x6e, 0x70, 0x75, 0x74,
|
||||
0x5b, 0x74, 0x79, 0x70, 0x65, 0x3d, 0x62, 0x75, 0x74, 0x74, 0x6f, 0x6e, 0x5d, 0x3a, 0x66, 0x6f,
|
||||
0x63, 0x75, 0x73, 0x2c, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x5b, 0x74, 0x79, 0x70, 0x65, 0x3d, 0x62,
|
||||
0x75, 0x74, 0x74, 0x6f, 0x6e, 0x5d, 0x3a, 0x68, 0x6f, 0x76, 0x65, 0x72, 0x2c, 0x69, 0x6e, 0x70,
|
||||
0x75, 0x74, 0x5b, 0x74, 0x79, 0x70, 0x65, 0x3d, 0x72, 0x65, 0x73, 0x65, 0x74, 0x5d, 0x3a, 0x66,
|
||||
0x6f, 0x63, 0x75, 0x73, 0x2c, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x5b, 0x74, 0x79, 0x70, 0x65, 0x3d,
|
||||
0x72, 0x65, 0x73, 0x65, 0x74, 0x5d, 0x3a, 0x68, 0x6f, 0x76, 0x65, 0x72, 0x2c, 0x69, 0x6e, 0x70,
|
||||
0x75, 0x74, 0x5b, 0x74, 0x79, 0x70, 0x65, 0x3d, 0x73, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x5d, 0x3a,
|
||||
0x66, 0x6f, 0x63, 0x75, 0x73, 0x2c, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x5b, 0x74, 0x79, 0x70, 0x65,
|
||||
0x3d, 0x73, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x5d, 0x3a, 0x68, 0x6f, 0x76, 0x65, 0x72, 0x20, 0x7b,
|
||||
0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x62, 0x61, 0x63, 0x6b, 0x67, 0x72, 0x6f, 0x75, 0x6e, 0x64,
|
||||
0x3a, 0x20, 0x76, 0x61, 0x72, 0x28, 0x2d, 0x2d, 0x6e, 0x63, 0x2d, 0x6c, 0x6b, 0x2d, 0x32, 0x29,
|
||||
0x0d, 0x0a, 0x7d, 0x0d, 0x0a, 0x0d, 0x0a, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x20, 0x7b, 0x0d, 0x0a,
|
||||
0x20, 0x20, 0x20, 0x20, 0x62, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x2d, 0x63, 0x6f, 0x6c, 0x6c, 0x61,
|
||||
0x70, 0x73, 0x65, 0x3a, 0x20, 0x63, 0x6f, 0x6c, 0x6c, 0x61, 0x70, 0x73, 0x65, 0x3b, 0x0d, 0x0a,
|
||||
0x20, 0x20, 0x20, 0x20, 0x77, 0x69, 0x64, 0x74, 0x68, 0x3a, 0x20, 0x31, 0x30, 0x30, 0x25, 0x0d,
|
||||
0x0a, 0x7d, 0x0d, 0x0a, 0x0d, 0x0a, 0x74, 0x64, 0x2c, 0x74, 0x68, 0x20, 0x7b, 0x0d, 0x0a, 0x20,
|
||||
0x20, 0x20, 0x20, 0x62, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x3a, 0x20, 0x31, 0x70, 0x78, 0x20, 0x73,
|
||||
0x6f, 0x6c, 0x69, 0x64, 0x20, 0x76, 0x61, 0x72, 0x28, 0x2d, 0x2d, 0x6e, 0x63, 0x2d, 0x62, 0x67,
|
||||
0x2d, 0x33, 0x29, 0x3b, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x74, 0x65, 0x78, 0x74, 0x2d, 0x61,
|
||||
0x6c, 0x69, 0x67, 0x6e, 0x3a, 0x20, 0x6c, 0x65, 0x66, 0x74, 0x3b, 0x0d, 0x0a, 0x20, 0x20, 0x20,
|
||||
0x20, 0x70, 0x61, 0x64, 0x64, 0x69, 0x6e, 0x67, 0x3a, 0x20, 0x2e, 0x35, 0x72, 0x65, 0x6d, 0x0d,
|
||||
0x0a, 0x7d, 0x0d, 0x0a, 0x0d, 0x0a, 0x74, 0x68, 0x20, 0x7b, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20,
|
||||
0x62, 0x61, 0x63, 0x6b, 0x67, 0x72, 0x6f, 0x75, 0x6e, 0x64, 0x3a, 0x20, 0x76, 0x61, 0x72, 0x28,
|
||||
0x2d, 0x2d, 0x6e, 0x63, 0x2d, 0x62, 0x67, 0x2d, 0x32, 0x29, 0x0d, 0x0a, 0x7d, 0x0d, 0x0a, 0x0d,
|
||||
0x0a, 0x74, 0x72, 0x3a, 0x6e, 0x74, 0x68, 0x2d, 0x63, 0x68, 0x69, 0x6c, 0x64, 0x28, 0x65, 0x76,
|
||||
0x65, 0x6e, 0x29, 0x20, 0x7b, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x62, 0x61, 0x63, 0x6b, 0x67,
|
||||
0x72, 0x6f, 0x75, 0x6e, 0x64, 0x3a, 0x20, 0x76, 0x61, 0x72, 0x28, 0x2d, 0x2d, 0x6e, 0x63, 0x2d,
|
||||
0x62, 0x67, 0x2d, 0x32, 0x29, 0x0d, 0x0a, 0x7d, 0x0d, 0x0a, 0x0d, 0x0a, 0x74, 0x65, 0x78, 0x74,
|
||||
0x61, 0x72, 0x65, 0x61, 0x20, 0x7b, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x6d, 0x61, 0x78, 0x2d,
|
||||
0x77, 0x69, 0x64, 0x74, 0x68, 0x3a, 0x20, 0x31, 0x30, 0x30, 0x25, 0x0d, 0x0a, 0x7d, 0x0d, 0x0a,
|
||||
0x0d, 0x0a, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x2c, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x2c, 0x74,
|
||||
0x65, 0x78, 0x74, 0x61, 0x72, 0x65, 0x61, 0x20, 0x7b, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x70,
|
||||
0x61, 0x64, 0x64, 0x69, 0x6e, 0x67, 0x3a, 0x20, 0x36, 0x70, 0x78, 0x20, 0x31, 0x32, 0x70, 0x78,
|
||||
0x3b, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x6d, 0x61, 0x72, 0x67, 0x69, 0x6e, 0x2d, 0x62, 0x6f,
|
||||
0x74, 0x74, 0x6f, 0x6d, 0x3a, 0x20, 0x2e, 0x35, 0x72, 0x65, 0x6d, 0x3b, 0x0d, 0x0a, 0x20, 0x20,
|
||||
0x20, 0x20, 0x62, 0x61, 0x63, 0x6b, 0x67, 0x72, 0x6f, 0x75, 0x6e, 0x64, 0x3a, 0x20, 0x76, 0x61,
|
||||
0x72, 0x28, 0x2d, 0x2d, 0x6e, 0x63, 0x2d, 0x62, 0x67, 0x2d, 0x32, 0x29, 0x3b, 0x0d, 0x0a, 0x20,
|
||||
0x0a, 0x20, 0x20, 0x20, 0x20, 0x66, 0x6f, 0x6e, 0x74, 0x2d, 0x73, 0x69, 0x7a, 0x65, 0x3a, 0x20,
|
||||
0x31, 0x2e, 0x30, 0x33, 0x72, 0x65, 0x6d, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x6c, 0x69, 0x6e,
|
||||
0x65, 0x2d, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x3a, 0x20, 0x31, 0x2e, 0x35, 0x0a, 0x7d, 0x0a,
|
||||
0x0a, 0x3a, 0x3a, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x7b, 0x0a, 0x20,
|
||||
0x20, 0x20, 0x20, 0x62, 0x61, 0x63, 0x6b, 0x67, 0x72, 0x6f, 0x75, 0x6e, 0x64, 0x3a, 0x20, 0x76,
|
||||
0x61, 0x72, 0x28, 0x2d, 0x2d, 0x6e, 0x63, 0x2d, 0x61, 0x63, 0x2d, 0x31, 0x29, 0x3b, 0x0a, 0x20,
|
||||
0x20, 0x20, 0x20, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x3a, 0x20, 0x76, 0x61, 0x72, 0x28, 0x2d, 0x2d,
|
||||
0x6e, 0x63, 0x2d, 0x74, 0x78, 0x2d, 0x32, 0x29, 0x3b, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x62,
|
||||
0x6f, 0x72, 0x64, 0x65, 0x72, 0x3a, 0x20, 0x31, 0x70, 0x78, 0x20, 0x73, 0x6f, 0x6c, 0x69, 0x64,
|
||||
0x20, 0x76, 0x61, 0x72, 0x28, 0x2d, 0x2d, 0x6e, 0x63, 0x2d, 0x62, 0x67, 0x2d, 0x33, 0x29, 0x3b,
|
||||
0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x62, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x2d, 0x72, 0x61, 0x64,
|
||||
0x69, 0x75, 0x73, 0x3a, 0x20, 0x34, 0x70, 0x78, 0x3b, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x62,
|
||||
0x6f, 0x78, 0x2d, 0x73, 0x68, 0x61, 0x64, 0x6f, 0x77, 0x3a, 0x20, 0x6e, 0x6f, 0x6e, 0x65, 0x3b,
|
||||
0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x62, 0x6f, 0x78, 0x2d, 0x73, 0x69, 0x7a, 0x69, 0x6e, 0x67,
|
||||
0x3a, 0x20, 0x62, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x2d, 0x62, 0x6f, 0x78, 0x0d, 0x0a, 0x7d, 0x0d,
|
||||
0x0a, 0x0d, 0x0a, 0x69, 0x6d, 0x67, 0x20, 0x7b, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x6d, 0x61,
|
||||
0x78, 0x2d, 0x77, 0x69, 0x64, 0x74, 0x68, 0x3a, 0x20, 0x31, 0x30, 0x30, 0x25, 0x0d, 0x0a, 0x7d,
|
||||
0x0d, 0x0a, 0x0d, 0x0a, 0x74, 0x64, 0x3e, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x20, 0x7b, 0x0d, 0x0a,
|
||||
0x20, 0x20, 0x20, 0x20, 0x6d, 0x61, 0x72, 0x67, 0x69, 0x6e, 0x2d, 0x74, 0x6f, 0x70, 0x3a, 0x20,
|
||||
0x30, 0x3b, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x6d, 0x61, 0x72, 0x67, 0x69, 0x6e, 0x2d, 0x62,
|
||||
0x6f, 0x74, 0x74, 0x6f, 0x6d, 0x3a, 0x20, 0x30, 0x0d, 0x0a, 0x7d, 0x0d, 0x0a, 0x0d, 0x0a, 0x74,
|
||||
0x64, 0x3e, 0x74, 0x65, 0x78, 0x74, 0x61, 0x72, 0x65, 0x61, 0x20, 0x7b, 0x0d, 0x0a, 0x20, 0x20,
|
||||
0x20, 0x20, 0x6d, 0x61, 0x72, 0x67, 0x69, 0x6e, 0x2d, 0x74, 0x6f, 0x70, 0x3a, 0x20, 0x30, 0x3b,
|
||||
0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x6d, 0x61, 0x72, 0x67, 0x69, 0x6e, 0x2d, 0x62, 0x6f, 0x74,
|
||||
0x74, 0x6f, 0x6d, 0x3a, 0x20, 0x30, 0x0d, 0x0a, 0x7d, 0x0d, 0x0a, 0x0d, 0x0a, 0x74, 0x64, 0x3e,
|
||||
0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x20, 0x7b, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x6d, 0x61,
|
||||
0x72, 0x67, 0x69, 0x6e, 0x2d, 0x74, 0x6f, 0x70, 0x3a, 0x20, 0x30, 0x3b, 0x0d, 0x0a, 0x20, 0x20,
|
||||
0x20, 0x20, 0x6d, 0x61, 0x72, 0x67, 0x69, 0x6e, 0x2d, 0x62, 0x6f, 0x74, 0x74, 0x6f, 0x6d, 0x3a,
|
||||
0x20, 0x30, 0x0d, 0x0a, 0x7d, 0x0d, 0x0a, 0x0d, 0x0a, 0x2e, 0x77, 0x61, 0x72, 0x6e, 0x69, 0x6e,
|
||||
0x67, 0x20, 0x7b, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x3a, 0x20,
|
||||
0x72, 0x65, 0x64, 0x0d, 0x0a, 0x7d, 0x0d, 0x0a, 0x0d, 0x0a, 0x40, 0x6d, 0x65, 0x64, 0x69, 0x61,
|
||||
0x20, 0x6f, 0x6e, 0x6c, 0x79, 0x20, 0x73, 0x63, 0x72, 0x65, 0x65, 0x6e, 0x20, 0x61, 0x6e, 0x64,
|
||||
0x20, 0x28, 0x6d, 0x61, 0x78, 0x2d, 0x77, 0x69, 0x64, 0x74, 0x68, 0x3a, 0x20, 0x36, 0x30, 0x30,
|
||||
0x70, 0x78, 0x29, 0x20, 0x7b, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x2e, 0x61, 0x64, 0x61, 0x70,
|
||||
0x74, 0x20, 0x74, 0x64, 0x20, 0x7b, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
|
||||
0x64, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x3a, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x0d, 0x0a, 0x20,
|
||||
0x20, 0x20, 0x20, 0x7d, 0x0d, 0x0a, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x2e, 0x61, 0x64, 0x61,
|
||||
0x70, 0x74, 0x20, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x5b, 0x74, 0x79, 0x70, 0x65, 0x3d, 0x74, 0x65,
|
||||
0x78, 0x74, 0x5d, 0x2c, 0x2e, 0x61, 0x64, 0x61, 0x70, 0x74, 0x20, 0x69, 0x6e, 0x70, 0x75, 0x74,
|
||||
0x5b, 0x74, 0x79, 0x70, 0x65, 0x3d, 0x70, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x5d, 0x2c,
|
||||
0x2e, 0x61, 0x64, 0x61, 0x70, 0x74, 0x20, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x5b, 0x74, 0x79, 0x70,
|
||||
0x65, 0x3d, 0x73, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x5d, 0x2c, 0x2e, 0x61, 0x64, 0x61, 0x70, 0x74,
|
||||
0x20, 0x74, 0x65, 0x78, 0x74, 0x61, 0x72, 0x65, 0x61, 0x2c, 0x2e, 0x61, 0x64, 0x61, 0x70, 0x74,
|
||||
0x20, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x20, 0x7b, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20,
|
||||
0x20, 0x20, 0x20, 0x77, 0x69, 0x64, 0x74, 0x68, 0x3a, 0x20, 0x31, 0x30, 0x30, 0x25, 0x0d, 0x0a,
|
||||
0x20, 0x20, 0x20, 0x20, 0x7d, 0x0d, 0x0a, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x2e, 0x61, 0x64,
|
||||
0x61, 0x70, 0x74, 0x20, 0x74, 0x64, 0x3a, 0x68, 0x61, 0x73, 0x28, 0x69, 0x6e, 0x70, 0x75, 0x74,
|
||||
0x5b, 0x74, 0x79, 0x70, 0x65, 0x3d, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x62, 0x6f, 0x78, 0x5d, 0x29,
|
||||
0x20, 0x7b, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x74, 0x65, 0x78, 0x74,
|
||||
0x2d, 0x61, 0x6c, 0x69, 0x67, 0x6e, 0x3a, 0x20, 0x63, 0x65, 0x6e, 0x74, 0x65, 0x72, 0x0d, 0x0a,
|
||||
0x20, 0x20, 0x20, 0x20, 0x7d, 0x0d, 0x0a, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x2e, 0x61, 0x64,
|
||||
0x61, 0x70, 0x74, 0x20, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x5b, 0x74, 0x79, 0x70, 0x65, 0x3d, 0x63,
|
||||
0x68, 0x65, 0x63, 0x6b, 0x62, 0x6f, 0x78, 0x5d, 0x20, 0x7b, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20,
|
||||
0x20, 0x20, 0x20, 0x20, 0x77, 0x69, 0x64, 0x74, 0x68, 0x3a, 0x20, 0x31, 0x2e, 0x35, 0x65, 0x6d,
|
||||
0x3b, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x68, 0x65, 0x69, 0x67, 0x68,
|
||||
0x74, 0x3a, 0x20, 0x31, 0x2e, 0x35, 0x65, 0x6d, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x0d,
|
||||
0x0a, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x2e, 0x61, 0x64, 0x61, 0x70, 0x74, 0x20, 0x74, 0x61,
|
||||
0x62, 0x6c, 0x65, 0x20, 0x74, 0x64, 0x3a, 0x66, 0x69, 0x72, 0x73, 0x74, 0x2d, 0x63, 0x68, 0x69,
|
||||
0x6c, 0x64, 0x20, 0x7b, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x62, 0x6f,
|
||||
0x72, 0x64, 0x65, 0x72, 0x2d, 0x62, 0x6f, 0x74, 0x74, 0x6f, 0x6d, 0x3a, 0x20, 0x30, 0x0d, 0x0a,
|
||||
0x20, 0x20, 0x20, 0x20, 0x7d, 0x0d, 0x0a, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x2e, 0x61, 0x64,
|
||||
0x61, 0x70, 0x74, 0x20, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x20, 0x74, 0x64, 0x3a, 0x6c, 0x61, 0x73,
|
||||
0x74, 0x2d, 0x63, 0x68, 0x69, 0x6c, 0x64, 0x20, 0x7b, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20,
|
||||
0x20, 0x20, 0x20, 0x62, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x2d, 0x74, 0x6f, 0x70, 0x3a, 0x20, 0x30,
|
||||
0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x0d, 0x0a, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x23,
|
||||
0x74, 0x62, 0x6c, 0x6e, 0x61, 0x76, 0x20, 0x61, 0x20, 0x6c, 0x69, 0x3e, 0x73, 0x70, 0x61, 0x6e,
|
||||
0x20, 0x7b, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x6d, 0x61, 0x78, 0x2d,
|
||||
0x77, 0x69, 0x64, 0x74, 0x68, 0x3a, 0x20, 0x31, 0x34, 0x30, 0x70, 0x78, 0x0d, 0x0a, 0x20, 0x20,
|
||||
0x20, 0x20, 0x7d, 0x0d, 0x0a, 0x7d, 0x0d, 0x0a, 0x0d, 0x0a, 0x23, 0x74, 0x62, 0x6c, 0x6e, 0x61,
|
||||
0x76, 0x20, 0x61, 0x20, 0x7b, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x62, 0x6f, 0x72, 0x64, 0x65,
|
||||
0x72, 0x3a, 0x20, 0x30, 0x3b, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x62, 0x6f, 0x72, 0x64, 0x65,
|
||||
0x72, 0x2d, 0x62, 0x6f, 0x74, 0x74, 0x6f, 0x6d, 0x3a, 0x20, 0x31, 0x70, 0x78, 0x20, 0x73, 0x6f,
|
||||
0x6c, 0x69, 0x64, 0x3b, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x64, 0x69, 0x73, 0x70, 0x6c, 0x61,
|
||||
0x79, 0x3a, 0x20, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x3b, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x66,
|
||||
0x6f, 0x6e, 0x74, 0x2d, 0x73, 0x69, 0x7a, 0x65, 0x3a, 0x20, 0x31, 0x72, 0x65, 0x6d, 0x3b, 0x0d,
|
||||
0x0a, 0x20, 0x20, 0x20, 0x20, 0x66, 0x6f, 0x6e, 0x74, 0x2d, 0x77, 0x65, 0x69, 0x67, 0x68, 0x74,
|
||||
0x3a, 0x20, 0x62, 0x6f, 0x6c, 0x64, 0x3b, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x70, 0x61, 0x64,
|
||||
0x64, 0x69, 0x6e, 0x67, 0x3a, 0x20, 0x2e, 0x36, 0x72, 0x65, 0x6d, 0x20, 0x30, 0x3b, 0x0d, 0x0a,
|
||||
0x20, 0x20, 0x20, 0x20, 0x6c, 0x69, 0x6e, 0x65, 0x2d, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x3a,
|
||||
0x20, 0x31, 0x3b, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x3a, 0x20,
|
||||
0x76, 0x61, 0x72, 0x28, 0x2d, 0x2d, 0x6e, 0x63, 0x2d, 0x74, 0x78, 0x2d, 0x31, 0x29, 0x3b, 0x0d,
|
||||
0x0a, 0x20, 0x20, 0x20, 0x20, 0x74, 0x65, 0x78, 0x74, 0x2d, 0x64, 0x65, 0x63, 0x6f, 0x72, 0x61,
|
||||
0x74, 0x69, 0x6f, 0x6e, 0x3a, 0x20, 0x6e, 0x6f, 0x6e, 0x65, 0x3b, 0x0d, 0x0a, 0x20, 0x20, 0x20,
|
||||
0x20, 0x62, 0x61, 0x63, 0x6b, 0x67, 0x72, 0x6f, 0x75, 0x6e, 0x64, 0x3a, 0x20, 0x6c, 0x69, 0x6e,
|
||||
0x65, 0x61, 0x72, 0x2d, 0x67, 0x72, 0x61, 0x64, 0x69, 0x65, 0x6e, 0x74, 0x28, 0x74, 0x6f, 0x20,
|
||||
0x6c, 0x65, 0x66, 0x74, 0x2c, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74,
|
||||
0x20, 0x35, 0x30, 0x25, 0x2c, 0x72, 0x67, 0x62, 0x61, 0x28, 0x32, 0x35, 0x35, 0x2c, 0x32, 0x35,
|
||||
0x35, 0x2c, 0x32, 0x35, 0x35, 0x2c, 0x30, 0x2e, 0x34, 0x29, 0x20, 0x35, 0x30, 0x25, 0x29, 0x20,
|
||||
0x72, 0x69, 0x67, 0x68, 0x74, 0x3b, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x62, 0x61, 0x63, 0x6b,
|
||||
0x67, 0x72, 0x6f, 0x75, 0x6e, 0x64, 0x2d, 0x73, 0x69, 0x7a, 0x65, 0x3a, 0x20, 0x32, 0x30, 0x30,
|
||||
0x25, 0x20, 0x31, 0x30, 0x30, 0x25, 0x3b, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x74, 0x72, 0x61,
|
||||
0x6e, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x3a, 0x20, 0x61, 0x6c, 0x6c, 0x20, 0x2e, 0x32, 0x73,
|
||||
0x20, 0x65, 0x61, 0x73, 0x65, 0x0d, 0x0a, 0x7d, 0x0d, 0x0a, 0x0d, 0x0a, 0x23, 0x74, 0x62, 0x6c,
|
||||
0x6e, 0x61, 0x76, 0x20, 0x61, 0x20, 0x7b, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x62, 0x61, 0x63,
|
||||
0x6b, 0x67, 0x72, 0x6f, 0x75, 0x6e, 0x64, 0x3a, 0x20, 0x6c, 0x69, 0x6e, 0x65, 0x61, 0x72, 0x2d,
|
||||
0x67, 0x72, 0x61, 0x64, 0x69, 0x65, 0x6e, 0x74, 0x28, 0x74, 0x6f, 0x20, 0x6c, 0x65, 0x66, 0x74,
|
||||
0x2c, 0x76, 0x61, 0x72, 0x28, 0x2d, 0x2d, 0x6e, 0x63, 0x2d, 0x62, 0x67, 0x2d, 0x32, 0x29, 0x20,
|
||||
0x35, 0x30, 0x25, 0x2c, 0x72, 0x67, 0x62, 0x61, 0x28, 0x32, 0x35, 0x35, 0x2c, 0x32, 0x35, 0x35,
|
||||
0x2c, 0x32, 0x35, 0x35, 0x2c, 0x30, 0x2e, 0x34, 0x29, 0x20, 0x35, 0x30, 0x25, 0x29, 0x20, 0x72,
|
||||
0x69, 0x67, 0x68, 0x74, 0x3b, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x62, 0x61, 0x63, 0x6b, 0x67,
|
||||
0x72, 0x6f, 0x75, 0x6e, 0x64, 0x2d, 0x73, 0x69, 0x7a, 0x65, 0x3a, 0x20, 0x32, 0x30, 0x30, 0x25,
|
||||
0x20, 0x31, 0x30, 0x30, 0x25, 0x0d, 0x0a, 0x7d, 0x0d, 0x0a, 0x0d, 0x0a, 0x23, 0x74, 0x62, 0x6c,
|
||||
0x6e, 0x61, 0x76, 0x20, 0x61, 0x3a, 0x68, 0x6f, 0x76, 0x65, 0x72, 0x20, 0x7b, 0x0d, 0x0a, 0x20,
|
||||
0x20, 0x20, 0x20, 0x62, 0x61, 0x63, 0x6b, 0x67, 0x72, 0x6f, 0x75, 0x6e, 0x64, 0x2d, 0x70, 0x6f,
|
||||
0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x3a, 0x20, 0x6c, 0x65, 0x66, 0x74, 0x3b, 0x0d, 0x0a, 0x20,
|
||||
0x20, 0x20, 0x20, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x3a, 0x20, 0x61,
|
||||
0x6c, 0x6c, 0x20, 0x2e, 0x34, 0x35, 0x73, 0x20, 0x65, 0x61, 0x73, 0x65, 0x0d, 0x0a, 0x7d, 0x0d,
|
||||
0x0a, 0x0d, 0x0a, 0x23, 0x74, 0x62, 0x6c, 0x6e, 0x61, 0x76, 0x20, 0x61, 0x3a, 0x61, 0x63, 0x74,
|
||||
0x69, 0x76, 0x65, 0x20, 0x7b, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x62, 0x61, 0x63, 0x6b, 0x67,
|
||||
0x6e, 0x63, 0x2d, 0x61, 0x63, 0x2d, 0x74, 0x78, 0x29, 0x0a, 0x7d, 0x0a, 0x0a, 0x68, 0x31, 0x2c,
|
||||
0x68, 0x32, 0x2c, 0x68, 0x33, 0x2c, 0x68, 0x34, 0x2c, 0x68, 0x35, 0x2c, 0x68, 0x36, 0x20, 0x7b,
|
||||
0x0a, 0x20, 0x20, 0x20, 0x20, 0x6c, 0x69, 0x6e, 0x65, 0x2d, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74,
|
||||
0x3a, 0x20, 0x31, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x3a, 0x20,
|
||||
0x76, 0x61, 0x72, 0x28, 0x2d, 0x2d, 0x6e, 0x63, 0x2d, 0x74, 0x78, 0x2d, 0x31, 0x29, 0x3b, 0x0a,
|
||||
0x20, 0x20, 0x20, 0x20, 0x70, 0x61, 0x64, 0x64, 0x69, 0x6e, 0x67, 0x2d, 0x74, 0x6f, 0x70, 0x3a,
|
||||
0x20, 0x2e, 0x38, 0x37, 0x35, 0x72, 0x65, 0x6d, 0x0a, 0x7d, 0x0a, 0x0a, 0x68, 0x31, 0x2c, 0x68,
|
||||
0x32, 0x2c, 0x68, 0x33, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x63, 0x6f, 0x6c, 0x6f, 0x72,
|
||||
0x3a, 0x20, 0x76, 0x61, 0x72, 0x28, 0x2d, 0x2d, 0x6e, 0x63, 0x2d, 0x74, 0x78, 0x2d, 0x31, 0x29,
|
||||
0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x70, 0x61, 0x64, 0x64, 0x69, 0x6e, 0x67, 0x2d, 0x62, 0x6f,
|
||||
0x74, 0x74, 0x6f, 0x6d, 0x3a, 0x20, 0x32, 0x70, 0x78, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x6d,
|
||||
0x61, 0x72, 0x67, 0x69, 0x6e, 0x2d, 0x62, 0x6f, 0x74, 0x74, 0x6f, 0x6d, 0x3a, 0x20, 0x38, 0x70,
|
||||
0x78, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x62, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x2d, 0x62, 0x6f,
|
||||
0x74, 0x74, 0x6f, 0x6d, 0x3a, 0x20, 0x31, 0x70, 0x78, 0x20, 0x73, 0x6f, 0x6c, 0x69, 0x64, 0x20,
|
||||
0x76, 0x61, 0x72, 0x28, 0x2d, 0x2d, 0x6e, 0x63, 0x2d, 0x62, 0x67, 0x2d, 0x32, 0x29, 0x0a, 0x7d,
|
||||
0x0a, 0x0a, 0x68, 0x34, 0x2c, 0x68, 0x35, 0x2c, 0x68, 0x36, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20,
|
||||
0x20, 0x6d, 0x61, 0x72, 0x67, 0x69, 0x6e, 0x2d, 0x62, 0x6f, 0x74, 0x74, 0x6f, 0x6d, 0x3a, 0x20,
|
||||
0x2e, 0x33, 0x72, 0x65, 0x6d, 0x0a, 0x7d, 0x0a, 0x0a, 0x68, 0x31, 0x20, 0x7b, 0x0a, 0x20, 0x20,
|
||||
0x20, 0x20, 0x66, 0x6f, 0x6e, 0x74, 0x2d, 0x73, 0x69, 0x7a, 0x65, 0x3a, 0x20, 0x32, 0x2e, 0x32,
|
||||
0x35, 0x72, 0x65, 0x6d, 0x0a, 0x7d, 0x0a, 0x0a, 0x68, 0x32, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20,
|
||||
0x20, 0x66, 0x6f, 0x6e, 0x74, 0x2d, 0x73, 0x69, 0x7a, 0x65, 0x3a, 0x20, 0x31, 0x2e, 0x38, 0x35,
|
||||
0x72, 0x65, 0x6d, 0x0a, 0x7d, 0x0a, 0x0a, 0x68, 0x33, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20,
|
||||
0x66, 0x6f, 0x6e, 0x74, 0x2d, 0x73, 0x69, 0x7a, 0x65, 0x3a, 0x20, 0x31, 0x2e, 0x35, 0x35, 0x72,
|
||||
0x65, 0x6d, 0x0a, 0x7d, 0x0a, 0x0a, 0x68, 0x34, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x66,
|
||||
0x6f, 0x6e, 0x74, 0x2d, 0x73, 0x69, 0x7a, 0x65, 0x3a, 0x20, 0x31, 0x2e, 0x32, 0x35, 0x72, 0x65,
|
||||
0x6d, 0x0a, 0x7d, 0x0a, 0x0a, 0x68, 0x35, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x66, 0x6f,
|
||||
0x6e, 0x74, 0x2d, 0x73, 0x69, 0x7a, 0x65, 0x3a, 0x20, 0x31, 0x72, 0x65, 0x6d, 0x0a, 0x7d, 0x0a,
|
||||
0x0a, 0x68, 0x36, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x66, 0x6f, 0x6e, 0x74, 0x2d, 0x73,
|
||||
0x69, 0x7a, 0x65, 0x3a, 0x20, 0x2e, 0x38, 0x37, 0x35, 0x72, 0x65, 0x6d, 0x0a, 0x7d, 0x0a, 0x0a,
|
||||
0x61, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x3a, 0x20, 0x76,
|
||||
0x61, 0x72, 0x28, 0x2d, 0x2d, 0x6e, 0x63, 0x2d, 0x6c, 0x6b, 0x2d, 0x31, 0x29, 0x0a, 0x7d, 0x0a,
|
||||
0x0a, 0x61, 0x3a, 0x68, 0x6f, 0x76, 0x65, 0x72, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x63,
|
||||
0x6f, 0x6c, 0x6f, 0x72, 0x3a, 0x20, 0x76, 0x61, 0x72, 0x28, 0x2d, 0x2d, 0x6e, 0x63, 0x2d, 0x6c,
|
||||
0x6b, 0x2d, 0x32, 0x29, 0x20, 0x21, 0x69, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x61, 0x6e, 0x74, 0x3b,
|
||||
0x0a, 0x7d, 0x0a, 0x0a, 0x61, 0x62, 0x62, 0x72, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x63,
|
||||
0x75, 0x72, 0x73, 0x6f, 0x72, 0x3a, 0x20, 0x68, 0x65, 0x6c, 0x70, 0x0a, 0x7d, 0x0a, 0x0a, 0x61,
|
||||
0x62, 0x62, 0x72, 0x3a, 0x68, 0x6f, 0x76, 0x65, 0x72, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20,
|
||||
0x63, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x3a, 0x20, 0x68, 0x65, 0x6c, 0x70, 0x0a, 0x7d, 0x0a, 0x0a,
|
||||
0x61, 0x20, 0x62, 0x75, 0x74, 0x74, 0x6f, 0x6e, 0x2c, 0x62, 0x75, 0x74, 0x74, 0x6f, 0x6e, 0x2c,
|
||||
0x69, 0x6e, 0x70, 0x75, 0x74, 0x5b, 0x74, 0x79, 0x70, 0x65, 0x3d, 0x62, 0x75, 0x74, 0x74, 0x6f,
|
||||
0x6e, 0x5d, 0x2c, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x5b, 0x74, 0x79, 0x70, 0x65, 0x3d, 0x72, 0x65,
|
||||
0x73, 0x65, 0x74, 0x5d, 0x2c, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x5b, 0x74, 0x79, 0x70, 0x65, 0x3d,
|
||||
0x73, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x5d, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x66, 0x6f,
|
||||
0x6e, 0x74, 0x2d, 0x73, 0x69, 0x7a, 0x65, 0x3a, 0x20, 0x31, 0x72, 0x65, 0x6d, 0x3b, 0x0a, 0x20,
|
||||
0x20, 0x20, 0x20, 0x64, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x3a, 0x20, 0x69, 0x6e, 0x6c, 0x69,
|
||||
0x6e, 0x65, 0x2d, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x70, 0x61,
|
||||
0x64, 0x64, 0x69, 0x6e, 0x67, 0x3a, 0x20, 0x36, 0x70, 0x78, 0x20, 0x31, 0x32, 0x70, 0x78, 0x3b,
|
||||
0x0a, 0x20, 0x20, 0x20, 0x20, 0x74, 0x65, 0x78, 0x74, 0x2d, 0x61, 0x6c, 0x69, 0x67, 0x6e, 0x3a,
|
||||
0x20, 0x63, 0x65, 0x6e, 0x74, 0x65, 0x72, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x74, 0x65, 0x78,
|
||||
0x74, 0x2d, 0x64, 0x65, 0x63, 0x6f, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x3a, 0x20, 0x6e, 0x6f,
|
||||
0x6e, 0x65, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x77, 0x68, 0x69, 0x74, 0x65, 0x2d, 0x73, 0x70,
|
||||
0x61, 0x63, 0x65, 0x3a, 0x20, 0x6e, 0x6f, 0x77, 0x72, 0x61, 0x70, 0x3b, 0x0a, 0x20, 0x20, 0x20,
|
||||
0x20, 0x62, 0x61, 0x63, 0x6b, 0x67, 0x72, 0x6f, 0x75, 0x6e, 0x64, 0x3a, 0x20, 0x76, 0x61, 0x72,
|
||||
0x28, 0x2d, 0x2d, 0x6e, 0x63, 0x2d, 0x6c, 0x6b, 0x2d, 0x31, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20,
|
||||
0x20, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x3a, 0x20, 0x76, 0x61, 0x72, 0x28, 0x2d, 0x2d, 0x6e, 0x63,
|
||||
0x2d, 0x6c, 0x6b, 0x2d, 0x74, 0x78, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x62, 0x6f, 0x72,
|
||||
0x64, 0x65, 0x72, 0x3a, 0x20, 0x30, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x62, 0x6f, 0x72, 0x64,
|
||||
0x65, 0x72, 0x2d, 0x72, 0x61, 0x64, 0x69, 0x75, 0x73, 0x3a, 0x20, 0x34, 0x70, 0x78, 0x3b, 0x0a,
|
||||
0x20, 0x20, 0x20, 0x20, 0x62, 0x6f, 0x78, 0x2d, 0x73, 0x69, 0x7a, 0x69, 0x6e, 0x67, 0x3a, 0x20,
|
||||
0x62, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x2d, 0x62, 0x6f, 0x78, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20,
|
||||
0x63, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x3a, 0x20, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x3b,
|
||||
0x0a, 0x20, 0x20, 0x20, 0x20, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x3a, 0x20, 0x76, 0x61, 0x72, 0x28,
|
||||
0x2d, 0x2d, 0x6e, 0x63, 0x2d, 0x6c, 0x6b, 0x2d, 0x74, 0x78, 0x29, 0x0a, 0x7d, 0x0a, 0x0a, 0x61,
|
||||
0x20, 0x62, 0x75, 0x74, 0x74, 0x6f, 0x6e, 0x5b, 0x64, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x64,
|
||||
0x5d, 0x2c, 0x62, 0x75, 0x74, 0x74, 0x6f, 0x6e, 0x5b, 0x64, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65,
|
||||
0x64, 0x5d, 0x2c, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x5b, 0x74, 0x79, 0x70, 0x65, 0x3d, 0x62, 0x75,
|
||||
0x74, 0x74, 0x6f, 0x6e, 0x5d, 0x5b, 0x64, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x5d, 0x2c,
|
||||
0x69, 0x6e, 0x70, 0x75, 0x74, 0x5b, 0x74, 0x79, 0x70, 0x65, 0x3d, 0x72, 0x65, 0x73, 0x65, 0x74,
|
||||
0x5d, 0x5b, 0x64, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x5d, 0x2c, 0x69, 0x6e, 0x70, 0x75,
|
||||
0x74, 0x5b, 0x74, 0x79, 0x70, 0x65, 0x3d, 0x73, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x5d, 0x5b, 0x64,
|
||||
0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x5d, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x63,
|
||||
0x75, 0x72, 0x73, 0x6f, 0x72, 0x3a, 0x20, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x3b, 0x0a,
|
||||
0x20, 0x20, 0x20, 0x20, 0x6f, 0x70, 0x61, 0x63, 0x69, 0x74, 0x79, 0x3a, 0x20, 0x2e, 0x35, 0x3b,
|
||||
0x0a, 0x20, 0x20, 0x20, 0x20, 0x63, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x3a, 0x20, 0x6e, 0x6f, 0x74,
|
||||
0x2d, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x65, 0x64, 0x0a, 0x7d, 0x0a, 0x0a, 0x2e, 0x62, 0x75, 0x74,
|
||||
0x74, 0x6f, 0x6e, 0x3a, 0x66, 0x6f, 0x63, 0x75, 0x73, 0x2c, 0x2e, 0x62, 0x75, 0x74, 0x74, 0x6f,
|
||||
0x6e, 0x3a, 0x68, 0x6f, 0x76, 0x65, 0x72, 0x2c, 0x62, 0x75, 0x74, 0x74, 0x6f, 0x6e, 0x3a, 0x66,
|
||||
0x6f, 0x63, 0x75, 0x73, 0x2c, 0x62, 0x75, 0x74, 0x74, 0x6f, 0x6e, 0x3a, 0x68, 0x6f, 0x76, 0x65,
|
||||
0x72, 0x2c, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x5b, 0x74, 0x79, 0x70, 0x65, 0x3d, 0x62, 0x75, 0x74,
|
||||
0x74, 0x6f, 0x6e, 0x5d, 0x3a, 0x66, 0x6f, 0x63, 0x75, 0x73, 0x2c, 0x69, 0x6e, 0x70, 0x75, 0x74,
|
||||
0x5b, 0x74, 0x79, 0x70, 0x65, 0x3d, 0x62, 0x75, 0x74, 0x74, 0x6f, 0x6e, 0x5d, 0x3a, 0x68, 0x6f,
|
||||
0x76, 0x65, 0x72, 0x2c, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x5b, 0x74, 0x79, 0x70, 0x65, 0x3d, 0x72,
|
||||
0x65, 0x73, 0x65, 0x74, 0x5d, 0x3a, 0x66, 0x6f, 0x63, 0x75, 0x73, 0x2c, 0x69, 0x6e, 0x70, 0x75,
|
||||
0x74, 0x5b, 0x74, 0x79, 0x70, 0x65, 0x3d, 0x72, 0x65, 0x73, 0x65, 0x74, 0x5d, 0x3a, 0x68, 0x6f,
|
||||
0x76, 0x65, 0x72, 0x2c, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x5b, 0x74, 0x79, 0x70, 0x65, 0x3d, 0x73,
|
||||
0x75, 0x62, 0x6d, 0x69, 0x74, 0x5d, 0x3a, 0x66, 0x6f, 0x63, 0x75, 0x73, 0x2c, 0x69, 0x6e, 0x70,
|
||||
0x75, 0x74, 0x5b, 0x74, 0x79, 0x70, 0x65, 0x3d, 0x73, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x5d, 0x3a,
|
||||
0x68, 0x6f, 0x76, 0x65, 0x72, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x62, 0x61, 0x63, 0x6b,
|
||||
0x67, 0x72, 0x6f, 0x75, 0x6e, 0x64, 0x3a, 0x20, 0x76, 0x61, 0x72, 0x28, 0x2d, 0x2d, 0x6e, 0x63,
|
||||
0x2d, 0x6c, 0x6b, 0x2d, 0x32, 0x29, 0x0a, 0x7d, 0x0a, 0x0a, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x20,
|
||||
0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x62, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x2d, 0x63, 0x6f, 0x6c,
|
||||
0x6c, 0x61, 0x70, 0x73, 0x65, 0x3a, 0x20, 0x63, 0x6f, 0x6c, 0x6c, 0x61, 0x70, 0x73, 0x65, 0x3b,
|
||||
0x0a, 0x20, 0x20, 0x20, 0x20, 0x77, 0x69, 0x64, 0x74, 0x68, 0x3a, 0x20, 0x31, 0x30, 0x30, 0x25,
|
||||
0x0a, 0x7d, 0x0a, 0x0a, 0x74, 0x64, 0x2c, 0x74, 0x68, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20,
|
||||
0x62, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x3a, 0x20, 0x31, 0x70, 0x78, 0x20, 0x73, 0x6f, 0x6c, 0x69,
|
||||
0x64, 0x20, 0x76, 0x61, 0x72, 0x28, 0x2d, 0x2d, 0x6e, 0x63, 0x2d, 0x62, 0x67, 0x2d, 0x33, 0x29,
|
||||
0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x74, 0x65, 0x78, 0x74, 0x2d, 0x61, 0x6c, 0x69, 0x67, 0x6e,
|
||||
0x3a, 0x20, 0x6c, 0x65, 0x66, 0x74, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x70, 0x61, 0x64, 0x64,
|
||||
0x69, 0x6e, 0x67, 0x3a, 0x20, 0x2e, 0x35, 0x72, 0x65, 0x6d, 0x0a, 0x7d, 0x0a, 0x0a, 0x74, 0x68,
|
||||
0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x62, 0x61, 0x63, 0x6b, 0x67, 0x72, 0x6f, 0x75, 0x6e,
|
||||
0x64, 0x3a, 0x20, 0x76, 0x61, 0x72, 0x28, 0x2d, 0x2d, 0x6e, 0x63, 0x2d, 0x62, 0x67, 0x2d, 0x32,
|
||||
0x29, 0x0a, 0x7d, 0x0a, 0x0a, 0x74, 0x72, 0x3a, 0x6e, 0x74, 0x68, 0x2d, 0x63, 0x68, 0x69, 0x6c,
|
||||
0x64, 0x28, 0x65, 0x76, 0x65, 0x6e, 0x29, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x62, 0x61,
|
||||
0x63, 0x6b, 0x67, 0x72, 0x6f, 0x75, 0x6e, 0x64, 0x3a, 0x20, 0x76, 0x61, 0x72, 0x28, 0x2d, 0x2d,
|
||||
0x6e, 0x63, 0x2d, 0x62, 0x67, 0x2d, 0x32, 0x29, 0x0a, 0x7d, 0x0a, 0x0a, 0x74, 0x65, 0x78, 0x74,
|
||||
0x61, 0x72, 0x65, 0x61, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x6d, 0x61, 0x78, 0x2d, 0x77,
|
||||
0x69, 0x64, 0x74, 0x68, 0x3a, 0x20, 0x31, 0x30, 0x30, 0x25, 0x0a, 0x7d, 0x0a, 0x0a, 0x69, 0x6e,
|
||||
0x70, 0x75, 0x74, 0x2c, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x2c, 0x74, 0x65, 0x78, 0x74, 0x61,
|
||||
0x72, 0x65, 0x61, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x70, 0x61, 0x64, 0x64, 0x69, 0x6e,
|
||||
0x67, 0x3a, 0x20, 0x36, 0x70, 0x78, 0x20, 0x31, 0x32, 0x70, 0x78, 0x3b, 0x0a, 0x20, 0x20, 0x20,
|
||||
0x20, 0x6d, 0x61, 0x72, 0x67, 0x69, 0x6e, 0x2d, 0x62, 0x6f, 0x74, 0x74, 0x6f, 0x6d, 0x3a, 0x20,
|
||||
0x2e, 0x35, 0x72, 0x65, 0x6d, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x62, 0x61, 0x63, 0x6b, 0x67,
|
||||
0x72, 0x6f, 0x75, 0x6e, 0x64, 0x3a, 0x20, 0x76, 0x61, 0x72, 0x28, 0x2d, 0x2d, 0x6e, 0x63, 0x2d,
|
||||
0x6c, 0x6b, 0x2d, 0x31, 0x29, 0x3b, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x74, 0x72, 0x61, 0x6e,
|
||||
0x62, 0x67, 0x2d, 0x32, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x63, 0x6f, 0x6c, 0x6f, 0x72,
|
||||
0x3a, 0x20, 0x76, 0x61, 0x72, 0x28, 0x2d, 0x2d, 0x6e, 0x63, 0x2d, 0x74, 0x78, 0x2d, 0x32, 0x29,
|
||||
0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x62, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x3a, 0x20, 0x31, 0x70,
|
||||
0x78, 0x20, 0x73, 0x6f, 0x6c, 0x69, 0x64, 0x20, 0x76, 0x61, 0x72, 0x28, 0x2d, 0x2d, 0x6e, 0x63,
|
||||
0x2d, 0x62, 0x67, 0x2d, 0x33, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x62, 0x6f, 0x72, 0x64,
|
||||
0x65, 0x72, 0x2d, 0x72, 0x61, 0x64, 0x69, 0x75, 0x73, 0x3a, 0x20, 0x34, 0x70, 0x78, 0x3b, 0x0a,
|
||||
0x20, 0x20, 0x20, 0x20, 0x62, 0x6f, 0x78, 0x2d, 0x73, 0x68, 0x61, 0x64, 0x6f, 0x77, 0x3a, 0x20,
|
||||
0x6e, 0x6f, 0x6e, 0x65, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x62, 0x6f, 0x78, 0x2d, 0x73, 0x69,
|
||||
0x7a, 0x69, 0x6e, 0x67, 0x3a, 0x20, 0x62, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x2d, 0x62, 0x6f, 0x78,
|
||||
0x0a, 0x7d, 0x0a, 0x0a, 0x69, 0x6d, 0x67, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x6d, 0x61,
|
||||
0x78, 0x2d, 0x77, 0x69, 0x64, 0x74, 0x68, 0x3a, 0x20, 0x31, 0x30, 0x30, 0x25, 0x0a, 0x7d, 0x0a,
|
||||
0x0a, 0x74, 0x64, 0x3e, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20,
|
||||
0x6d, 0x61, 0x72, 0x67, 0x69, 0x6e, 0x2d, 0x74, 0x6f, 0x70, 0x3a, 0x20, 0x30, 0x3b, 0x0a, 0x20,
|
||||
0x20, 0x20, 0x20, 0x6d, 0x61, 0x72, 0x67, 0x69, 0x6e, 0x2d, 0x62, 0x6f, 0x74, 0x74, 0x6f, 0x6d,
|
||||
0x3a, 0x20, 0x30, 0x0a, 0x7d, 0x0a, 0x0a, 0x74, 0x64, 0x3e, 0x74, 0x65, 0x78, 0x74, 0x61, 0x72,
|
||||
0x65, 0x61, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x6d, 0x61, 0x72, 0x67, 0x69, 0x6e, 0x2d,
|
||||
0x74, 0x6f, 0x70, 0x3a, 0x20, 0x30, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x6d, 0x61, 0x72, 0x67,
|
||||
0x69, 0x6e, 0x2d, 0x62, 0x6f, 0x74, 0x74, 0x6f, 0x6d, 0x3a, 0x20, 0x30, 0x0a, 0x7d, 0x0a, 0x0a,
|
||||
0x74, 0x64, 0x3e, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20,
|
||||
0x6d, 0x61, 0x72, 0x67, 0x69, 0x6e, 0x2d, 0x74, 0x6f, 0x70, 0x3a, 0x20, 0x30, 0x3b, 0x0a, 0x20,
|
||||
0x20, 0x20, 0x20, 0x6d, 0x61, 0x72, 0x67, 0x69, 0x6e, 0x2d, 0x62, 0x6f, 0x74, 0x74, 0x6f, 0x6d,
|
||||
0x3a, 0x20, 0x30, 0x0a, 0x7d, 0x0a, 0x0a, 0x2e, 0x77, 0x61, 0x72, 0x6e, 0x69, 0x6e, 0x67, 0x20,
|
||||
0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x3a, 0x20, 0x72, 0x65, 0x64,
|
||||
0x0a, 0x7d, 0x0a, 0x0a, 0x40, 0x6d, 0x65, 0x64, 0x69, 0x61, 0x20, 0x6f, 0x6e, 0x6c, 0x79, 0x20,
|
||||
0x73, 0x63, 0x72, 0x65, 0x65, 0x6e, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x28, 0x6d, 0x61, 0x78, 0x2d,
|
||||
0x77, 0x69, 0x64, 0x74, 0x68, 0x3a, 0x20, 0x36, 0x30, 0x30, 0x70, 0x78, 0x29, 0x20, 0x7b, 0x0a,
|
||||
0x20, 0x20, 0x20, 0x20, 0x2e, 0x61, 0x64, 0x61, 0x70, 0x74, 0x20, 0x74, 0x64, 0x20, 0x7b, 0x0a,
|
||||
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x64, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x3a,
|
||||
0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x0a, 0x0a, 0x20, 0x20, 0x20,
|
||||
0x20, 0x2e, 0x61, 0x64, 0x61, 0x70, 0x74, 0x20, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x5b, 0x74, 0x79,
|
||||
0x70, 0x65, 0x3d, 0x74, 0x65, 0x78, 0x74, 0x5d, 0x2c, 0x2e, 0x61, 0x64, 0x61, 0x70, 0x74, 0x20,
|
||||
0x69, 0x6e, 0x70, 0x75, 0x74, 0x5b, 0x74, 0x79, 0x70, 0x65, 0x3d, 0x70, 0x61, 0x73, 0x73, 0x77,
|
||||
0x6f, 0x72, 0x64, 0x5d, 0x2c, 0x2e, 0x61, 0x64, 0x61, 0x70, 0x74, 0x20, 0x69, 0x6e, 0x70, 0x75,
|
||||
0x74, 0x5b, 0x74, 0x79, 0x70, 0x65, 0x3d, 0x73, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x5d, 0x2c, 0x2e,
|
||||
0x61, 0x64, 0x61, 0x70, 0x74, 0x20, 0x74, 0x65, 0x78, 0x74, 0x61, 0x72, 0x65, 0x61, 0x2c, 0x2e,
|
||||
0x61, 0x64, 0x61, 0x70, 0x74, 0x20, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x20, 0x7b, 0x0a, 0x20,
|
||||
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x77, 0x69, 0x64, 0x74, 0x68, 0x3a, 0x20, 0x31, 0x30,
|
||||
0x30, 0x25, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x0a, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x2e, 0x61,
|
||||
0x64, 0x61, 0x70, 0x74, 0x20, 0x74, 0x64, 0x3a, 0x68, 0x61, 0x73, 0x28, 0x69, 0x6e, 0x70, 0x75,
|
||||
0x74, 0x5b, 0x74, 0x79, 0x70, 0x65, 0x3d, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x62, 0x6f, 0x78, 0x5d,
|
||||
0x29, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x74, 0x65, 0x78, 0x74,
|
||||
0x2d, 0x61, 0x6c, 0x69, 0x67, 0x6e, 0x3a, 0x20, 0x63, 0x65, 0x6e, 0x74, 0x65, 0x72, 0x0a, 0x20,
|
||||
0x20, 0x20, 0x20, 0x7d, 0x0a, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x2e, 0x61, 0x64, 0x61, 0x70, 0x74,
|
||||
0x20, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x5b, 0x74, 0x79, 0x70, 0x65, 0x3d, 0x63, 0x68, 0x65, 0x63,
|
||||
0x6b, 0x62, 0x6f, 0x78, 0x5d, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
|
||||
0x77, 0x69, 0x64, 0x74, 0x68, 0x3a, 0x20, 0x31, 0x2e, 0x35, 0x65, 0x6d, 0x3b, 0x0a, 0x20, 0x20,
|
||||
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x3a, 0x20, 0x31, 0x2e,
|
||||
0x35, 0x65, 0x6d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x0a, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x2e,
|
||||
0x61, 0x64, 0x61, 0x70, 0x74, 0x20, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x20, 0x74, 0x64, 0x3a, 0x66,
|
||||
0x69, 0x72, 0x73, 0x74, 0x2d, 0x63, 0x68, 0x69, 0x6c, 0x64, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20,
|
||||
0x20, 0x20, 0x20, 0x20, 0x20, 0x62, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x2d, 0x62, 0x6f, 0x74, 0x74,
|
||||
0x6f, 0x6d, 0x3a, 0x20, 0x30, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x0a, 0x0a, 0x20, 0x20, 0x20,
|
||||
0x20, 0x2e, 0x61, 0x64, 0x61, 0x70, 0x74, 0x20, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x20, 0x74, 0x64,
|
||||
0x3a, 0x6c, 0x61, 0x73, 0x74, 0x2d, 0x63, 0x68, 0x69, 0x6c, 0x64, 0x20, 0x7b, 0x0a, 0x20, 0x20,
|
||||
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x62, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x2d, 0x74, 0x6f, 0x70,
|
||||
0x3a, 0x20, 0x30, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x0a, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x23,
|
||||
0x74, 0x62, 0x6c, 0x6e, 0x61, 0x76, 0x20, 0x61, 0x20, 0x6c, 0x69, 0x3e, 0x73, 0x70, 0x61, 0x6e,
|
||||
0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x6d, 0x61, 0x78, 0x2d, 0x77,
|
||||
0x69, 0x64, 0x74, 0x68, 0x3a, 0x20, 0x31, 0x34, 0x30, 0x70, 0x78, 0x0a, 0x20, 0x20, 0x20, 0x20,
|
||||
0x7d, 0x0a, 0x7d, 0x0a, 0x0a, 0x23, 0x74, 0x62, 0x6c, 0x6e, 0x61, 0x76, 0x20, 0x61, 0x20, 0x7b,
|
||||
0x0a, 0x20, 0x20, 0x20, 0x20, 0x62, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x3a, 0x20, 0x30, 0x3b, 0x0a,
|
||||
0x20, 0x20, 0x20, 0x20, 0x62, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x2d, 0x62, 0x6f, 0x74, 0x74, 0x6f,
|
||||
0x6d, 0x3a, 0x20, 0x31, 0x70, 0x78, 0x20, 0x73, 0x6f, 0x6c, 0x69, 0x64, 0x3b, 0x0a, 0x20, 0x20,
|
||||
0x20, 0x20, 0x64, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x3a, 0x20, 0x62, 0x6c, 0x6f, 0x63, 0x6b,
|
||||
0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x66, 0x6f, 0x6e, 0x74, 0x2d, 0x73, 0x69, 0x7a, 0x65, 0x3a,
|
||||
0x20, 0x31, 0x72, 0x65, 0x6d, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x66, 0x6f, 0x6e, 0x74, 0x2d,
|
||||
0x77, 0x65, 0x69, 0x67, 0x68, 0x74, 0x3a, 0x20, 0x62, 0x6f, 0x6c, 0x64, 0x3b, 0x0a, 0x20, 0x20,
|
||||
0x20, 0x20, 0x70, 0x61, 0x64, 0x64, 0x69, 0x6e, 0x67, 0x3a, 0x20, 0x2e, 0x36, 0x72, 0x65, 0x6d,
|
||||
0x20, 0x30, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x6c, 0x69, 0x6e, 0x65, 0x2d, 0x68, 0x65, 0x69,
|
||||
0x67, 0x68, 0x74, 0x3a, 0x20, 0x31, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x63, 0x6f, 0x6c, 0x6f,
|
||||
0x72, 0x3a, 0x20, 0x76, 0x61, 0x72, 0x28, 0x2d, 0x2d, 0x6e, 0x63, 0x2d, 0x74, 0x78, 0x2d, 0x31,
|
||||
0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x74, 0x65, 0x78, 0x74, 0x2d, 0x64, 0x65, 0x63, 0x6f,
|
||||
0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x3a, 0x20, 0x6e, 0x6f, 0x6e, 0x65, 0x3b, 0x0a, 0x20, 0x20,
|
||||
0x20, 0x20, 0x62, 0x61, 0x63, 0x6b, 0x67, 0x72, 0x6f, 0x75, 0x6e, 0x64, 0x3a, 0x20, 0x6c, 0x69,
|
||||
0x6e, 0x65, 0x61, 0x72, 0x2d, 0x67, 0x72, 0x61, 0x64, 0x69, 0x65, 0x6e, 0x74, 0x28, 0x74, 0x6f,
|
||||
0x20, 0x6c, 0x65, 0x66, 0x74, 0x2c, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x70, 0x61, 0x72, 0x65, 0x6e,
|
||||
0x74, 0x20, 0x35, 0x30, 0x25, 0x2c, 0x72, 0x67, 0x62, 0x61, 0x28, 0x32, 0x35, 0x35, 0x2c, 0x32,
|
||||
0x35, 0x35, 0x2c, 0x32, 0x35, 0x35, 0x2c, 0x30, 0x2e, 0x34, 0x29, 0x20, 0x35, 0x30, 0x25, 0x29,
|
||||
0x20, 0x72, 0x69, 0x67, 0x68, 0x74, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x62, 0x61, 0x63, 0x6b,
|
||||
0x67, 0x72, 0x6f, 0x75, 0x6e, 0x64, 0x2d, 0x73, 0x69, 0x7a, 0x65, 0x3a, 0x20, 0x32, 0x30, 0x30,
|
||||
0x25, 0x20, 0x31, 0x30, 0x30, 0x25, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x74, 0x72, 0x61, 0x6e,
|
||||
0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x3a, 0x20, 0x61, 0x6c, 0x6c, 0x20, 0x2e, 0x32, 0x73, 0x20,
|
||||
0x65, 0x61, 0x73, 0x65, 0x0a, 0x7d, 0x0a, 0x0a, 0x23, 0x74, 0x62, 0x6c, 0x6e, 0x61, 0x76, 0x20,
|
||||
0x61, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x62, 0x61, 0x63, 0x6b, 0x67, 0x72, 0x6f, 0x75,
|
||||
0x6e, 0x64, 0x3a, 0x20, 0x6c, 0x69, 0x6e, 0x65, 0x61, 0x72, 0x2d, 0x67, 0x72, 0x61, 0x64, 0x69,
|
||||
0x65, 0x6e, 0x74, 0x28, 0x74, 0x6f, 0x20, 0x6c, 0x65, 0x66, 0x74, 0x2c, 0x76, 0x61, 0x72, 0x28,
|
||||
0x2d, 0x2d, 0x6e, 0x63, 0x2d, 0x62, 0x67, 0x2d, 0x32, 0x29, 0x20, 0x35, 0x30, 0x25, 0x2c, 0x72,
|
||||
0x67, 0x62, 0x61, 0x28, 0x32, 0x35, 0x35, 0x2c, 0x32, 0x35, 0x35, 0x2c, 0x32, 0x35, 0x35, 0x2c,
|
||||
0x30, 0x2e, 0x34, 0x29, 0x20, 0x35, 0x30, 0x25, 0x29, 0x20, 0x72, 0x69, 0x67, 0x68, 0x74, 0x3b,
|
||||
0x0a, 0x20, 0x20, 0x20, 0x20, 0x62, 0x61, 0x63, 0x6b, 0x67, 0x72, 0x6f, 0x75, 0x6e, 0x64, 0x2d,
|
||||
0x73, 0x69, 0x7a, 0x65, 0x3a, 0x20, 0x32, 0x30, 0x30, 0x25, 0x20, 0x31, 0x30, 0x30, 0x25, 0x0a,
|
||||
0x7d, 0x0a, 0x0a, 0x23, 0x74, 0x62, 0x6c, 0x6e, 0x61, 0x76, 0x20, 0x61, 0x3a, 0x68, 0x6f, 0x76,
|
||||
0x65, 0x72, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x62, 0x61, 0x63, 0x6b, 0x67, 0x72, 0x6f,
|
||||
0x75, 0x6e, 0x64, 0x2d, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x3a, 0x20, 0x6c, 0x65,
|
||||
0x66, 0x74, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x69, 0x74, 0x69,
|
||||
0x6f, 0x6e, 0x3a, 0x20, 0x61, 0x6c, 0x6c, 0x20, 0x2e, 0x34, 0x35, 0x73, 0x20, 0x65, 0x61, 0x73,
|
||||
0x65, 0x0a, 0x7d, 0x0a, 0x0a, 0x23, 0x74, 0x62, 0x6c, 0x6e, 0x61, 0x76, 0x20, 0x61, 0x3a, 0x61,
|
||||
0x63, 0x74, 0x69, 0x76, 0x65, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x62, 0x61, 0x63, 0x6b,
|
||||
0x67, 0x72, 0x6f, 0x75, 0x6e, 0x64, 0x3a, 0x20, 0x76, 0x61, 0x72, 0x28, 0x2d, 0x2d, 0x6e, 0x63,
|
||||
0x2d, 0x6c, 0x6b, 0x2d, 0x31, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x74, 0x72, 0x61, 0x6e,
|
||||
0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x3a, 0x20, 0x61, 0x6c, 0x6c, 0x20, 0x2e, 0x31, 0x35, 0x73,
|
||||
0x20, 0x65, 0x61, 0x73, 0x65, 0x0d, 0x0a, 0x7d, 0x0d, 0x0a, 0x0d, 0x0a, 0x23, 0x74, 0x62, 0x6c,
|
||||
0x6e, 0x61, 0x76, 0x20, 0x61, 0x20, 0x6c, 0x69, 0x20, 0x7b, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20,
|
||||
0x6c, 0x69, 0x73, 0x74, 0x2d, 0x73, 0x74, 0x79, 0x6c, 0x65, 0x3a, 0x20, 0x6e, 0x6f, 0x6e, 0x65,
|
||||
0x3b, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x70, 0x61, 0x64, 0x64, 0x69, 0x6e, 0x67, 0x3a, 0x20,
|
||||
0x2e, 0x35, 0x72, 0x65, 0x6d, 0x3b, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x64, 0x69, 0x73, 0x70,
|
||||
0x6c, 0x61, 0x79, 0x3a, 0x20, 0x69, 0x6e, 0x6c, 0x69, 0x6e, 0x65, 0x2d, 0x62, 0x6c, 0x6f, 0x63,
|
||||
0x6b, 0x3b, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x77, 0x69, 0x64, 0x74, 0x68, 0x3a, 0x20, 0x31,
|
||||
0x30, 0x30, 0x25, 0x0d, 0x0a, 0x7d, 0x0d, 0x0a, 0x0d, 0x0a, 0x23, 0x74, 0x62, 0x6c, 0x6e, 0x61,
|
||||
0x76, 0x20, 0x61, 0x20, 0x6c, 0x69, 0x3e, 0x73, 0x70, 0x61, 0x6e, 0x20, 0x7b, 0x0d, 0x0a, 0x20,
|
||||
0x20, 0x20, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x3a, 0x20, 0x72, 0x69, 0x67, 0x68, 0x74, 0x3b,
|
||||
0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x74, 0x65, 0x78, 0x74, 0x2d, 0x61, 0x6c, 0x69, 0x67, 0x6e,
|
||||
0x3a, 0x20, 0x72, 0x69, 0x67, 0x68, 0x74, 0x3b, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x6d, 0x61,
|
||||
0x72, 0x67, 0x69, 0x6e, 0x2d, 0x72, 0x69, 0x67, 0x68, 0x74, 0x3a, 0x20, 0x31, 0x30, 0x70, 0x78,
|
||||
0x3b, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x3a, 0x20, 0x23, 0x66,
|
||||
0x37, 0x30, 0x3b, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x66, 0x6f, 0x6e, 0x74, 0x2d, 0x77, 0x65,
|
||||
0x69, 0x67, 0x68, 0x74, 0x3a, 0x20, 0x31, 0x30, 0x30, 0x3b, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20,
|
||||
0x20, 0x65, 0x61, 0x73, 0x65, 0x0a, 0x7d, 0x0a, 0x0a, 0x23, 0x74, 0x62, 0x6c, 0x6e, 0x61, 0x76,
|
||||
0x20, 0x61, 0x20, 0x6c, 0x69, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x6c, 0x69, 0x73, 0x74,
|
||||
0x2d, 0x73, 0x74, 0x79, 0x6c, 0x65, 0x3a, 0x20, 0x6e, 0x6f, 0x6e, 0x65, 0x3b, 0x0a, 0x20, 0x20,
|
||||
0x20, 0x20, 0x70, 0x61, 0x64, 0x64, 0x69, 0x6e, 0x67, 0x3a, 0x20, 0x2e, 0x35, 0x72, 0x65, 0x6d,
|
||||
0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x64, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x3a, 0x20, 0x69,
|
||||
0x6e, 0x6c, 0x69, 0x6e, 0x65, 0x2d, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x3b, 0x0a, 0x20, 0x20, 0x20,
|
||||
0x20, 0x77, 0x69, 0x64, 0x74, 0x68, 0x3a, 0x20, 0x31, 0x30, 0x30, 0x25, 0x0a, 0x7d, 0x0a, 0x0a,
|
||||
0x23, 0x74, 0x62, 0x6c, 0x6e, 0x61, 0x76, 0x20, 0x61, 0x20, 0x6c, 0x69, 0x3e, 0x73, 0x70, 0x61,
|
||||
0x6e, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x3a, 0x20, 0x72,
|
||||
0x69, 0x67, 0x68, 0x74, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x74, 0x65, 0x78, 0x74, 0x2d, 0x61,
|
||||
0x6c, 0x69, 0x67, 0x6e, 0x3a, 0x20, 0x72, 0x69, 0x67, 0x68, 0x74, 0x3b, 0x0a, 0x20, 0x20, 0x20,
|
||||
0x20, 0x6d, 0x61, 0x72, 0x67, 0x69, 0x6e, 0x2d, 0x72, 0x69, 0x67, 0x68, 0x74, 0x3a, 0x20, 0x31,
|
||||
0x30, 0x70, 0x78, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x3a, 0x20,
|
||||
0x23, 0x66, 0x37, 0x30, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x66, 0x6f, 0x6e, 0x74, 0x2d, 0x77,
|
||||
0x65, 0x69, 0x67, 0x68, 0x74, 0x3a, 0x20, 0x31, 0x30, 0x30, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20,
|
||||
0x66, 0x6f, 0x6e, 0x74, 0x2d, 0x73, 0x74, 0x79, 0x6c, 0x65, 0x3a, 0x20, 0x69, 0x74, 0x61, 0x6c,
|
||||
0x69, 0x63, 0x3b, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x64, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79,
|
||||
0x3a, 0x20, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x0d, 0x0a, 0x7d, 0x0d, 0x0a, 0x0d, 0x0a, 0x2e, 0x74,
|
||||
0x64, 0x62, 0x74, 0x6e, 0x20, 0x7b, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x74, 0x65, 0x78, 0x74,
|
||||
0x2d, 0x61, 0x6c, 0x69, 0x67, 0x6e, 0x3a, 0x20, 0x63, 0x65, 0x6e, 0x74, 0x65, 0x72, 0x3b, 0x0d,
|
||||
0x0a, 0x20, 0x20, 0x20, 0x20, 0x76, 0x65, 0x72, 0x74, 0x69, 0x63, 0x61, 0x6c, 0x2d, 0x61, 0x6c,
|
||||
0x69, 0x67, 0x6e, 0x3a, 0x20, 0x6d, 0x69, 0x64, 0x64, 0x6c, 0x65, 0x0d, 0x0a, 0x7d, 0x0d, 0x0a,
|
||||
0x0d, 0x0a, 0x2e, 0x6e, 0x61, 0x76, 0x65, 0x6e, 0x74, 0x72, 0x79, 0x20, 0x7b, 0x0d, 0x0a, 0x20,
|
||||
0x20, 0x20, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x3a, 0x20, 0x6c, 0x65, 0x66, 0x74, 0x3b, 0x0d,
|
||||
0x0a, 0x20, 0x20, 0x20, 0x20, 0x6d, 0x61, 0x78, 0x2d, 0x77, 0x69, 0x64, 0x74, 0x68, 0x3a, 0x20,
|
||||
0x33, 0x37, 0x35, 0x70, 0x78, 0x3b, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x77, 0x69, 0x64, 0x74,
|
||||
0x68, 0x3a, 0x20, 0x31, 0x30, 0x30, 0x25, 0x0d, 0x0a, 0x7d,
|
||||
0x69, 0x63, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x64, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x3a,
|
||||
0x20, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x0a, 0x7d, 0x0a, 0x0a, 0x2e, 0x74, 0x64, 0x62, 0x74, 0x6e,
|
||||
0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x74, 0x65, 0x78, 0x74, 0x2d, 0x61, 0x6c, 0x69, 0x67,
|
||||
0x6e, 0x3a, 0x20, 0x63, 0x65, 0x6e, 0x74, 0x65, 0x72, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x76,
|
||||
0x65, 0x72, 0x74, 0x69, 0x63, 0x61, 0x6c, 0x2d, 0x61, 0x6c, 0x69, 0x67, 0x6e, 0x3a, 0x20, 0x6d,
|
||||
0x69, 0x64, 0x64, 0x6c, 0x65, 0x0a, 0x7d, 0x0a, 0x0a, 0x2e, 0x6e, 0x61, 0x76, 0x65, 0x6e, 0x74,
|
||||
0x72, 0x79, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x3a, 0x20,
|
||||
0x6c, 0x65, 0x66, 0x74, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x6d, 0x61, 0x78, 0x2d, 0x77, 0x69,
|
||||
0x64, 0x74, 0x68, 0x3a, 0x20, 0x33, 0x37, 0x35, 0x70, 0x78, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20,
|
||||
0x77, 0x69, 0x64, 0x74, 0x68, 0x3a, 0x20, 0x31, 0x30, 0x30, 0x25, 0x0a, 0x7d,
|
||||
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user