This commit is contained in:
luc 2026-09-02 09:21:22 +02:00
parent 094aee150e
commit 474c847553
15 changed files with 150 additions and 90 deletions

View file

@ -17,19 +17,25 @@
//#define DebugWrite(f,...) ;
//#endif
#ifdef _DEBUG
#define DebugWrite_IsActive() true
#else
#define DebugWrite_IsActive() (g_EnableReleaseLogging)
#endif
#define DebugWrite(f, ...) \
do { \
do { \
if (DebugWrite_IsActive()) { \
auto _msg = std::format(f, ##__VA_ARGS__); \
OutputDebugStringA(_msg.c_str()); \
} while (0)
#else
#define DebugWrite(f, ...) do {} while (0)
#endif
} \
} while (0)
constexpr int SleepAfterClear = 2000;
bool g_EnableReleaseLogging;
Epd3Base::Epd3U* current;
void Epd3Base::Epd3U::ResetStepReturnValues()
@ -209,11 +215,11 @@ Epd3Base::Epd3U::Epd3U(int _comport)
EndNotifyAlarm = 0b1001110011000111;
EndNotifyAlarmDuration = 10;
g_EnableReleaseLogging = 0;
if (_comport == 0) return;
if (hCompletion == 0) hCompletion = CreateEvent(NULL, TRUE, FALSE, NULL);
if (hCancel == 0) hCancel = CreateEvent(NULL, TRUE, FALSE, NULL);
}
@ -234,7 +240,7 @@ int Epd3Base::Epd3U::DisconnectAndConnect()
int tries = 3; rv = 1;
while (rv && --tries>=0) {
rv = Connect3(epdComsHandle, Epd, true);
DebugWrite( "**** DisconnectAndConnect rv=%d tries %d ****\n", rv, tries);
DebugWrite("**** DisconnectAndConnect rv={} tries {} ****\n", rv, tries);
if (rv) Sleep(100);
}
@ -328,7 +334,7 @@ void Epd3Base::Epd3U::EndCom(bool doDiscon)
int rv;
if (CommsInitialized == 1 || CurrentDeviceID != 0) {
if (CommsInitialized == 1) {
DebugWrite( "**** EndCom(%d) is Connected=%d ****\n", doDiscon, isConnected);
DebugWrite("**** EndCom({}) is Connected={} ****\n", doDiscon, isConnected);
if (epdComsHandle != nullptr) {
if (doDiscon && isConnected) { DisCon(0); }
@ -344,6 +350,7 @@ void Epd3Base::Epd3U::EndCom(bool doDiscon)
}
}
Epd.Id = 0;
Epd.Id = 0;
CurrentDeviceID = 0;
CommsInitialized = 0;
epdComsHandle = nullptr;
@ -445,10 +452,11 @@ int Epd3Base::Epd3U::ReConnect()
{
Dll3RV = Connect3(epdComsHandle, Epd, true);
if (Dll3RV) {
DebugWrite("**** Connect3 rv {} ****\n", Dll3RV);
Sleep(50);
Dll3RV = Connect3(epdComsHandle, Epd, true);
}
DebugWrite("**** ReOpenDev rv%d v %d ****\n", Dll3RV, HardVersionMinor);
DebugWrite("**** ReConnect rv {} v {} ****\n", Dll3RV, HardVersionMinor);
}
else {
OutputDebugStringA("**** ReOpen no epdComsHandle ****\n");
@ -471,7 +479,7 @@ int Epd3Base::Epd3U::DisCon(UINT16 alarm)
int rv = 0;
int step = 0;
DebugWrite( "**** Discon(%hu) ****\n", alarm);
DebugWrite( "**** Discon({}) ****\n", alarm);
if (CurrentDeviceID != 0) {
ResetEvent(hCompletion);
@ -479,7 +487,7 @@ int Epd3Base::Epd3U::DisCon(UINT16 alarm)
step = 1;
//Dll3RV = SetDisconnectCallback(epdComsHandle, disconnectcallback); //in start
if (alarm) {
DebugWrite("**** DisconnectAndNotify(%hX,15) HardVersionMinor: %d ****\n", EndNotifyAlarm, HardVersionMinor);
DebugWrite("**** DisconnectAndNotify({}) HardVersionMinor: {} ****\n", EndNotifyAlarm, HardVersionMinor);
/*if (HardVersionMinor > 0) {
SetFunctionReturnValue(TestVibe, 0);
@ -658,7 +666,7 @@ void WINAPI ReadStatusCompletion(CommsHandle hComms, CompletionToken token)
current->ErrorStatus = current->epd3status.FaultStatus;
current->OtherAlarms = current->epd3status.OtherBits;
current->DecodeStatus(); //Alarm status...
DebugWrite("**** ReadStatusCompletion %04x ****\n", (uint32_t)current->OperatingStatus);
DebugWrite("**** ReadStatusCompletion {:x} ****\n", (uint32_t)current->OperatingStatus);
SetEvent(current->hCompletion);
}
@ -729,17 +737,23 @@ int Epd3Base::Epd3U::ReadStatus(bool onlyStatus)
SetFunctionReturnValue(eFunctions::ReadStatus,0);
token = BeginReadStatus(epdComsHandle, nullptr);
rv = CommitAndSetRV();
if (!rv)
if (!rv)
rv = EndReadStatus(epdComsHandle, token, &epd3status);
else
DebugWrite("Commit error {}\n", rv);
;
rv2 = SetEndReturnValue(rv);
if (rv < 0) {
// opnieuw ?
if (rv==r_ErrorNotConnected) rv = ReConnect();
token = BeginReadStatus(epdComsHandle, nullptr);
rv = CommitAndSetRV();
if (!rv)
rv = EndReadStatus(epdComsHandle, token, &epd3status);
else
DebugWrite("Commit error {}\n", rv);
;
rv2 = SetEndReturnValue(rv);
}
@ -778,7 +792,6 @@ int Epd3Base::Epd3U::ReadStatus(bool onlyStatus)
if (!rv) rv = EndReadEpdIdentities(epdComsHandle, token, &EpdID32, (EpdTypes*)&EpdType, &capabilities, &MarkNumber, &VersionNumber, NULL, 0);
rv = SetEndReturnValue(rv);
if (rv != 0) {
EPDStepResult = EpdStepResults::Error;
goto error;
} else EPDStepResult = EpdStepResults::OK;
@ -799,6 +812,9 @@ int Epd3Base::Epd3U::ReadStatus(bool onlyStatus)
token = BeginReadCounts(epdComsHandle, nullptr, 0, nullptr);
rv = CommitAndSetRV();
if (!rv) rv = EndReadCounts(epdComsHandle, token, Counts, MaxCounts, &countsRead, &utc, &seconds);
else
DebugWrite("Commit EndReadCounts error {}\n", rv);
;
rv2= SetEndReturnValue(rv);
if (rv) {
@ -820,6 +836,9 @@ int Epd3Base::Epd3U::ReadStatus(bool onlyStatus)
rv = CommitAndSetRV();
if (!rv)
rv = EndReadRTC(epdComsHandle, token, &utc); //EpdClock for MK2
else
DebugWrite("Commit EndReadRTCerror {}\n", rv);
;
rv2= SetEndReturnValue(rv);
if (rv) {
EPDStepResult = EpdStepResults::Error;
@ -843,7 +862,7 @@ int Epd3Base::Epd3U::ReadStatus(bool onlyStatus)
mk3WearerID.Length = 0;
//Mk2 EPDs only support Name and Primary ID
ReConnect();
EPDStep = EpdSteps::StepReadWearerId;
//batchstep = 0;
SetFunctionReturnValue(ReadWearerId, 0);
@ -851,6 +870,10 @@ int Epd3Base::Epd3U::ReadStatus(bool onlyStatus)
rv = CommitAndSetRV();
if (!rv) rv = EndReadWearerId(epdComsHandle, token, &mk3WearerID);
else
DebugWrite("Commit EndReadWearerID error {}\n", rv);
;
rv = SetEndReturnValue(rv);
if (rv != 0) {
EPDStepResult = EpdStepResults::Error;
@ -862,11 +885,14 @@ int Epd3Base::Epd3U::ReadStatus(bool onlyStatus)
step = 5;
//batchstep = 1;
ReConnect();
SetFunctionReturnValue(ReadWearerId, 0);
token = BeginReadWearerId(epdComsHandle, static_cast<uint16_t>(WearerIdType::WearerId_Primary), nullptr);
rv = CommitAndSetRV();
if (!rv) rv = EndReadWearerId(epdComsHandle, token, &mk3WearerID);
else
DebugWrite("Commit EndReadCounts error {}\n", rv);
;
rv = SetEndReturnValue(rv);
if (rv != 0) {
EPDStepResult = EpdStepResults::Error;
@ -1057,6 +1083,11 @@ void Epd3Base::Epd3U::decodePeakRates(int count)
}
}
}
void Epd3Base::Epd3U::SetReleaseLogging(bool doLog)
{
g_EnableReleaseLogging = doLog;
}
void Epd3Base::Epd3U::decodeCounters(int count)
{
HG = SG = BC = FB = 0;
@ -1441,7 +1472,7 @@ WORD Epd3Base::Epd3U::PrepareForIssue()
if (WriteConfig32) {
rv = WriteConfig();
//if (rv != 0) goto error; //non blocking on error
rv = ReConnect();
//rv = ReConnect();
}
@ -1453,8 +1484,13 @@ WORD Epd3Base::Epd3U::PrepareForIssue()
if (!DetectorsOn) {
token = BeginEpdOnOff(epdComsHandle, 1, nullptr);
rv = Commit3(epdComsHandle);
if (!rv) rv = EndEpdOnOff(epdComsHandle, token);
rv = ReConnect();
rv = EndEpdOnOff(epdComsHandle, token);
if (rv == r_ErrorNotConnected) {
rv = ReConnect();
token = BeginEpdOnOff(epdComsHandle, 1, nullptr);
rv = Commit3(epdComsHandle);
rv = EndEpdOnOff(epdComsHandle, token);
}
DetectorsOn = 1;
}
if (rv != 0)
@ -1488,7 +1524,7 @@ WORD Epd3Base::Epd3U::PrepareForIssue()
return rv;
error:
DebugWrite("**** After clear step %d error %d ****\n", EPDSubStep, rv);
DebugWrite("**** After clear step {} error {} ****\n", EPDSubStep, rv);
ErrorStep = EPDSubStep;
Error = rv;
if (progressCallback) progressCallback(EPDStep, EPDStepResult);
@ -1584,7 +1620,7 @@ WORD Epd3Base::Epd3U::DeIssue()
if (EPDIssued)
{
ReConnect();
if (isConnected) ReConnect();
#if DeissueWithClear
ErrorStep = 2;
r = ClearDoses();
@ -1600,14 +1636,20 @@ WORD Epd3Base::Epd3U::DeIssue()
EPDStepResult = EpdStepResults::OK;
else
EPDStepResult = EpdStepResults::Error;
//Sleep(50);
Sleep(50);
}
progressCallback(EPDStep, EPDStepResult);
ReConnect();
SetFunctionReturnValue(eFunctions::EpdOnOff,0);
token = BeginEpdOnOff(epdComsHandle, 0, nullptr);
r = CommitAndEnd2RV(EndEpdOnOff, token);
Sleep(50);
if (!r) {
if (!isConnected) ReConnect();
token = BeginEpdOnOff(epdComsHandle, 0, nullptr);
r = CommitAndEnd2RV(EndEpdOnOff, token);
}
if (r) goto error;
return r;
@ -1923,7 +1965,9 @@ int Epd3Base::Epd3U::IssueAndCheck(float gain, float ChirpRate)
token = BeginEpdOnOff(epdComsHandle, 0, nullptr);
rv = Commit3(epdComsHandle);
if (!rv) rv = EndEpdOnOff(epdComsHandle, token);
rv = ReConnect();
Sleep(50);
if (!isConnected) rv = ReConnect();
DetectorsOn = 0;
}
@ -2020,8 +2064,8 @@ int Epd3Base::Epd3U::WriteConfig(void)
int32_t r = 0;
ECLen = 32;
DebugWrite("**** WriteCfg v %d.%d ****\n", HardVersion, HardVersionMinor);
r = ReConnect();
DebugWrite("**** WriteCfg v {}.{} ****\n", HardVersion, HardVersionMinor);
if (!isConnected) r = ReConnect();
// Become admin
SetFunctionReturnValue(eFunctions::WriteAccessLevelAdmin,0);
token = BeginWriteAccessLevel(epdComsHandle, AccessLevel_t::Admin, EC, ECLen, nullptr);
@ -2141,7 +2185,8 @@ int Epd3Base::Epd3U::WriteConfig(void)
token = BeginWriteOffModeDisplay_R3(epdComsHandle, dutyCycle, offModeDispId, nullptr);
r = CommitAndEnd2RV(EndWriteOffModeDisplay_R3, token);
if (r != 0)
/* //Does not seem to work on new
if (r != 0)
Error = r;
else {
uint8_t OnOfenabled = 0;
@ -2150,18 +2195,20 @@ int Epd3Base::Epd3U::WriteConfig(void)
r = CommitAndEnd2RV(EndWriteSwitchOnFromButton_R3, token);
if (r != 0)
Error = r;
}
//Back to Open
if (!r) {
}*/
//Back to Open : always
//if (!r) {
SetFunctionReturnValue(eFunctions::WriteAccessLevelOpen, 0);
token = BeginWriteAccessLevel(epdComsHandle, AccessLevel_t::Open, nullptr, 0, nullptr);
r = CommitAndEnd2RV(EndWriteAccessLevel, token);
if (r != 0)
Error = r;
}
//}
Sleep(200);
//r = DisconnectAndConnect();
r = ReConnect();
//r = ReConnect();
if (r != 0)
Error = r;
}

View file

@ -77,6 +77,8 @@ namespace Epd3Base {
int32_t Dll3RV;
UINT16 EndSessionControl;
UINT16 EndNotifyAlarm, EndNotifyAlarmDuration;
public:
//HANDLE hWaitTimer = 0;
HANDLE hCompletion = 0;
@ -331,6 +333,7 @@ namespace Epd3Base {
void decodePeakRates(int count);
public:
void SetReleaseLogging(bool doLog);
int SetFunctionReturnValue(eFunctions f, BYTE CanIgnore);
void SetCommitReturnValue(int rv);
void SetCommitReturnValue(int step, int rv);

View file

@ -23,6 +23,14 @@ int EpdBaseClr::Epd2::SetEndNotifyAlarm(UInt16 NotifyAlarm, UINT16 NotifyAlarmDu
}
return 0;
}
int EpdBaseClr::Epd2::SetReleaseLogging(bool doLog )
{
if (epd3) {
epd3->SetReleaseLogging( doLog);
}
return 0;
}
int EpdBaseClr::Epd2::GetSteps()
{
int nsteps = (int)epd3->CurrentStep + 1;

View file

@ -407,6 +407,7 @@ namespace EpdBaseClr {
bool HasStepError();
int SetEndNotifyAlarm(UInt16 NotifyAlarm, UINT16 NotifyAlarmDuration);
int SetReleaseLogging(bool doLog);
private:
int AfterGetStatus(EpdBase::Epd2U* epd);

View file

@ -1,13 +1,13 @@
#pragma once
// C++ / Win32 resource editor vereist getallen met komma's
#define VERSION_MAJOR 2
#define VERSION_MINOR 1
#define VERSION_MAJOR 3
#define VERSION_MINOR 4
#define VERSION_BUILD 0
#define VERSION_REVISION 0
// Strings voor de tekstuele weergave
#define VERSION_STRING "2.1.0.0"
#define VERSION_STRING "3.4.0.0"
#define COPYRIGHT_STRING "Copyright (c) 2019-2026 LSW-Tech Luc Vandenbroucke"
#define COMPANY_STRING "LSW-Tech"
#define PRODUCT_STRING "EpdBaseClr"

View file

@ -980,6 +980,7 @@ namespace eDosStation
#if DEBUG
ep.SetEndNotifyAlarm(0, 0);
#endif
ep.SetReleaseLogging(true);
ep.EpdRead += Ep_EpdRead;
ep.EpdError += Ep_EpdError;
ep.EpdTO += Ep_EpdTO;

View file

@ -74,5 +74,5 @@ using System.Windows;
//2026-08-07 3.00 optimized
//2026-08-17 3.01 telerik upgrade, cleanup old files
//2026-08-17 3.03 reconnect,issuewithalarms
[assembly: AssemblyVersion("3.3.3.0")]
[assembly: AssemblyFileVersion("3.3.3.0")]
[assembly: AssemblyVersion("3.3.7.0")]
[assembly: AssemblyFileVersion("3.3.7.0")]

View file

@ -1 +1 @@
31/08/2026 10:21:38,16
02/09/2026 9:07:58,26

View file

@ -117,7 +117,7 @@ namespace eDosStation
step = "AllowMultipleEPD";
thisStation.AllowMultipleEPD = cbAllowMultipleEPD.IsChecked != null ? cbAllowMultipleEPD.IsChecked.Value : false;
//thisStation.WriteConfig32 = cbWriteConfig32.IsChecked != null ? cbWriteConfig32.IsChecked.Value : false;
thisStation.WriteConfig32 = cbWriteConfig32.IsChecked != null ? cbWriteConfig32.IsChecked.Value : false;
thisStation.LogAll = cbLogAll.IsChecked != null ? cbLogAll.IsChecked.Value : false;

Binary file not shown.

Binary file not shown.

View file

@ -208,17 +208,17 @@ exit
# RGlnaUNlcnQsIEluYy4xQTA/BgNVBAMTOERpZ2lDZXJ0IFRydXN0ZWQgRzQgVGlt
# ZVN0YW1waW5nIFJTQTQwOTYgU0hBMjU2IDIwMjUgQ0ExAhAKgO8YS43xBYLRxHan
# lXRoMA0GCWCGSAFlAwQCAQUAoGkwGAYJKoZIhvcNAQkDMQsGCSqGSIb3DQEHATAc
# BgkqhkiG9w0BCQUxDxcNMjYwODMxMDc1OTUyWjAvBgkqhkiG9w0BCQQxIgQgwGts
# BgkqhkiG9w0BCQUxDxcNMjYwODMxMTgwMzI0WjAvBgkqhkiG9w0BCQQxIgQgwGts
# hmgwg+1No3Bfq4IiEmxiCsjb9Jy7A/l9sT7ewm0wDQYJKoZIhvcNAQEBBQAEggIA
# cvsOCpSZpQf3Emtc/zehpXgySBPe+9KB/nBi0Hm94mtVNjVWJ/jBzIfMvdwlB39i
# r2m+V2K6mI0WtsR6DW0bNvbnqS31B/d68FW7/dgKaoaWBL+SQkxqjNwbFwmljSdO
# 2E126RreL8IRPNMfu1LY2d56gyxdlten0IJk/2MmJR70drMzNvK8WBYdQ6ecuBFE
# bRPiYbSffgdhbuhM/aBfIQvNlnOyugO3h41ZKUaUdKIPWnBFk3Ct4w5Xy8f0R0hn
# YzJmY011BuEZnVgBZ06NVFWEXZKg6O0S6TsZPrHNv9b1aP+kqv6TO4zOqeb0ugrh
# 5x/j4hyy3/R3lXKtFBHYAlSiNwwZPHxOQNABKDJygtsO9fudyrO9aWCZp2+7r0z6
# 103hgBwU9Jz3ObBDIvAtqmw3uUANmuejs0vYH1REJUjIbBeExFNkppkZbnNOY8B6
# uh88APOpU+tWoZX83WuuTgBCsSmQeVQ1PjFs5H/dIfCsBM2L5t7ATuKIDXc2D0At
# EnEW2ACZXyGxmWbzgREigSINVv/ABEj8jCHCFOH24RADCSUUYxm2W7vollT6fJv/
# z5PzJQd04fSARUDRVYSBslydGIopOhZeKEpSarZHphhGw1kXJoz9Gh2+fxYBBHJ9
# byiLjvCb5w7bcGPm6YdI431EHqayX4jxky3To5IaWPI=
# f/N4enJSMgXCkOZcWVgSqGx6mabHRab92kAFxLK938zA4HoqBJ8J0wIu6VRoykK7
# RCIXVC+FwfeKFZAKlaRQGGaViyUw2D7Wn6+hVAQE5YSQgHy1KmTI36fthxQ7UVpZ
# KVOmXtM1D9Q8g+5fhYvkhM5E36unirDllY16eYgsnjfZrkELSUrrSwfU5NDXBw4t
# ovdCuO8ZEsEig0VQ+LIWzTv+v1tzT5sw0AK5nEFOvZGuFUSfx36FH4v01SFRocf2
# X3lr3FghD93nhxRmgMkc6VT3UzjY8AE3R4HnMrX/5dWEC8QbGrYgsC+fpl8QmUr4
# MiS3CsxrpKsfFqUL8qeK3MbEnKowecHqYgW6GNASr6duYYbXfcLj0n7pLUzVNl+p
# Ybxx71JqP2j+7MWO29hMmdNNkjwYCJhjkhkBTixD8eiCCZOP76xheJrYto+kSlEL
# 24IZol+q9WQQGrKkmwlIXYlNu6hjR3aMoK81pdtJCf88hObNldOk7M/3AnFF9PQQ
# dCnxAnCKYy1P4dedKAhJ6uXBjvCJRO2dbOMLPV7SCsgcqf9ffEed/ktgpbsUixuE
# dIKIQ9yZnvUcCyxLDkzP+sWiDnHZd4gbH5ah1WHxZT9mlzQZsvi/gToFd74C7loi
# J4YTuJYWfe+8J2PUrYf1e/rd361gIulbFQPwK+oZ7Ds=
# SIG # End signature block

View file

@ -326,17 +326,17 @@ exit
# RGlnaUNlcnQsIEluYy4xQTA/BgNVBAMTOERpZ2lDZXJ0IFRydXN0ZWQgRzQgVGlt
# ZVN0YW1waW5nIFJTQTQwOTYgU0hBMjU2IDIwMjUgQ0ExAhAKgO8YS43xBYLRxHan
# lXRoMA0GCWCGSAFlAwQCAQUAoGkwGAYJKoZIhvcNAQkDMQsGCSqGSIb3DQEHATAc
# BgkqhkiG9w0BCQUxDxcNMjYwODMxMDc1OTUxWjAvBgkqhkiG9w0BCQQxIgQgTGPs
# BgkqhkiG9w0BCQUxDxcNMjYwODMxMTgwMzI0WjAvBgkqhkiG9w0BCQQxIgQgTGPs
# FQqQd9/aeqf+k/SnUJpze+872YJTIc/3H1ODCfAwDQYJKoZIhvcNAQEBBQAEggIA
# Fkvhb0wc0jy2NZLh82z61SHTp2Bry3qDGPU/aRZx9cyIRx8E0SeuSapnOBWJOrNv
# 12QfLlBIKBx8cwTarBYJ730QBW1xnJOATwf/73DGu8ovm3Cp6ii40d1mZRvoP+9j
# 9MzZVbyhrjgl/FZGtmHG/jbBVkA8XdXIYOPSpHmLzQTZgkuJgaKQcxszaXGvEuDW
# B2NEOxbYWUMsArkvxuP23y300pyCRoJ9UBRaItWFYQSYB+GOyxbat/WEesMJzqaS
# uBdJTzrM9nVX9SEu6TvovEqYhfXIv/cCtKUv8SgiRXUqYS4T5uOabaRvogzIsp6w
# eboA3FiVb8wByeYZAmKbOrAPNaq537zg82XQ8DYF7K1/WyeczNFzCsF+WisRTOvQ
# kIxmkbinuv39iw5u+WsycMvHT1vzL+nxKB2E0yzWvPv6Z8rBAGWtkzGivnfHBIqH
# He2rOkSY8MUPF/+KvY/anu4tXTUvqEQy0DpknKri5NP1i3DEIAH3rrm7r9eCpDWC
# NhvONtsPiT5M+JBQfhWg70Rs8dRhJfbu3tNWauWIM+guXzT6yEvuqwEdHbEG9GrN
# u9ePh2hZ7Gbr/IbglmcJlAo34Lqvm3p0YJs32vh+rNnXzVqwzZMkqJ6qftUkR+HS
# mv32Ijg/LNEUzY9fFM/7SW39zSJfgv9XzcY6fpGVxdc=
# pNYDwux6k4e3t7aPn+0HdjI7XVdvGvapmBJGzh7puOl20Z1vk6uPIXraeV5Har3t
# dS/rD//umQdHDHbO83SMS6ftMONIi0FcN0MseHqVGT23zNA3Fvz/sRNHQFfANg9/
# yKSJGlkJ7nr5cbOBG9BNnTVZfjh4XArWt7kWhnkkunZNwetzQfCKBVfb4qu9i7vb
# dIVIKISmyZ9leObrwiU8zPbF9WzlxRZIm0Dy983EuS9ZcbLZriju+2UtKukgQVl/
# 9qq64rB04h7jsZz1ZIu2KhfrVSezhgp3ZgSVYaFrVJExhCaJ5naeQ4LnP0U0TbqU
# yKdvDo75S7EkJ7FiMu5POKyBF8xJfnjXmxlt3/6s7PZ2ZHJ0rMGwnzZrRObGYPWg
# YYUFjT/3KSecLZBB6mDjDdnQ8y5PakWoqA29Dmj/1LWhydmb3fO7rYByeX7Xcm9Z
# j24MdJpabAu/GxCUwVWwxQEmZ45IXO6uJumWAotyG6UU0SEFSGBjUFqkAIvtLY7D
# r1czlMi92NlInt7lrQ5vPrWa4ryQpA7B+wZBH3Ux4qon/TgvBd+zFOasd+Rnqm+7
# 9OsfAJAO/CUF0yEVIBVo5i1/7EVfdm4UKI8g0MPMHFsDEX7R9LydF1a/sGoWo8+F
# 0hti5HI73oTTyqNtrTTpP+qSYkOO+sQ3N1R9bs28uB0=
# SIG # End signature block

View file

@ -329,17 +329,17 @@ exit
# RGlnaUNlcnQsIEluYy4xQTA/BgNVBAMTOERpZ2lDZXJ0IFRydXN0ZWQgRzQgVGlt
# ZVN0YW1waW5nIFJTQTQwOTYgU0hBMjU2IDIwMjUgQ0ExAhAKgO8YS43xBYLRxHan
# lXRoMA0GCWCGSAFlAwQCAQUAoGkwGAYJKoZIhvcNAQkDMQsGCSqGSIb3DQEHATAc
# BgkqhkiG9w0BCQUxDxcNMjYwODMxMDc1OTUyWjAvBgkqhkiG9w0BCQQxIgQgGtui
# BgkqhkiG9w0BCQUxDxcNMjYwODMxMTgwMzI0WjAvBgkqhkiG9w0BCQQxIgQgGtui
# 82paX11KDIN86kiIL1XH+uGmvG+Fu6AqHv/faOkwDQYJKoZIhvcNAQEBBQAEggIA
# wXFD/wUyeStGKDHpCJZ9cRZIVsNaJdq//FWA/9EFaywGd4b+vKEhZC6PllIIqFQI
# Gj7raIulPS9FlQ+pAwPQQfnP401AmZmI9PpCCSx39GYJv5oOvVxH3S13ksDgJBWL
# Vh0konN0zKTs2ZYfFsa9G+4wtK19LCnkV08Hl2EV3g6i/3Hh+P3s5w0lIwtqqLVX
# hdTGGMvR//9pbCsOEb0jbKvxOGXuxfAj0i65S0wyKzouK5SkZgkpZ99HY/uPqC0d
# 6Cwbm8vILYQr+3wHeTrGfXmyceyrBJdoJ2VUgAaNJ4F49TDk3Ny5DC6OF6pe3ugX
# TfaWRuVdeZ5VX/ltHXtr0OAD/ysMrU9rQLAX1WRMrvMb7u8WsGdsL7bQaOSCynnM
# B8CHzgFjGE7XJINVRQNUiuhbRv2DymvQO+Y7UqrBfSDodsIebuu9FAwIJCOkJ8fO
# sMC2DKy1105xhXAxXaffVu3bF48kqkUnUeicHUkn7yAKwJG5m+IDGiypK5OTCAmu
# /a+vTO2EqKm7YcjzRjRSdOSE08N94Dz8vto2iRiDcAd4MkT8qT/VqKfyPbCRRWM0
# PilWY7ZStVBo9e+7RIrLbRFktFmjufHkfAGTgIRN3F6tRIwxMPCDbs6SF6LrlEvw
# ZAeSvdqduzJP0xDmUzys8aoAIIW34B5a/LSgeviWBcI=
# mSKQwFotEP7OeVL0b9Le6y4+mscfZf9WMBw0JAWpm0M1E7WU3PVp81pJWqbYBOvV
# SE6OQh0b/meTN96lm4dBOy+UeIspDkq0lQFVCSk5qeOBQSi+SWA1YNxTTSfejeHi
# CfP6VpztZcWQW40N+Hh36JSo/k7y75SFxRObNaodhVqUhVUYOidygEOSD91BfNZh
# rYSbWpn4sQPIiqu2YYk2MxbhJ3koh6Ar/pmNo2kp0VSBOck5BnMzPlIrWY9OHpN2
# sA+49u2aezhKiyZy4dCJHrNktZPv+7IXr7gqWI3k0rujDuz53mt46YQU9IUW9rGq
# v3iXGsxZrOzEaeJNtHB34rf43BcX8Q855WEUYEfCn7QPIfRSX0t1VW5YF1JQoG5x
# SQX1GamH08dojhiV0YnrlchwUEPinkt53re741fWZ5OxF0anbeDKyesuzfOJ6E0p
# 3vU0RFA8KyObYr+h6iW4ByRasB7W6jtMiSC5brWVRNGAS3sIUBxxh8kV8i/M4yLA
# tKhj2bXSrtXpFV4pltUtVm76rB8A8Z/N7w9o1JogJX7pF6O9RPtFqBRyGE84MHqb
# ZvJCMJ1Oe4973OgSTrcuz2dBPB8COjWEqHs6EX9BTOHoBF4keqDB0W5bUCOuFJYX
# 60TcepUA7JHpzpf5dWtn+cuJKfGs2G5SzRif0oQl52I=
# SIG # End signature block

View file

@ -193,17 +193,17 @@ exit
# RGlnaUNlcnQsIEluYy4xQTA/BgNVBAMTOERpZ2lDZXJ0IFRydXN0ZWQgRzQgVGlt
# ZVN0YW1waW5nIFJTQTQwOTYgU0hBMjU2IDIwMjUgQ0ExAhAKgO8YS43xBYLRxHan
# lXRoMA0GCWCGSAFlAwQCAQUAoGkwGAYJKoZIhvcNAQkDMQsGCSqGSIb3DQEHATAc
# BgkqhkiG9w0BCQUxDxcNMjYwODMxMDc1OTUyWjAvBgkqhkiG9w0BCQQxIgQg6Tgk
# BgkqhkiG9w0BCQUxDxcNMjYwODMxMTgwMzI1WjAvBgkqhkiG9w0BCQQxIgQg6Tgk
# d9vgRJTrKaa/aNqr0ugqtMxl17/Df7q35ywcJSEwDQYJKoZIhvcNAQEBBQAEggIA
# szGZ2hU42mU4UKbFQxY4M+o4g4YfJrLfgvShUEA9kAdKdp6JW/SUhRDvQDkoYRvI
# H2dN8rhqyU8kacYs9mRhBwkqzuSJATQv+lBBtGzCPaxHv55dqy8I/JnFFlGADhlY
# j0fBklFz9X6xGOkxAGChVYIQLp40wHIGZDh6eejzUG1Y+UawB0yAL7bl3x90Ya8w
# t1DvoLSdAF4SKUJ0xXStCzCodKnW6fni/Bda4P16voNuLVisvzerPhu12blXpskx
# dC228/uJKFuRhtwtdJyAZPczXeba36+nY0BsCmILoAShGm2vLYoDwhZji2DLE6JI
# bbd2i8Tjs+dnqGtV9zJkltTGRMgUG9+mNKUxvoKljiXVa2yJlrNXjN/bvr/OvKNc
# OGzOQCYkOtOk4NkCC9HV2fEBr3yz13KPK8BaJ61hnmxwZ10BwxzX6ybUKJ0eDOgX
# qV3C0QwcTNn3yH/COc++TLTu8vwK+PRY6RrZ9emFguWCm0rLv9hrXKz5LiTo82yV
# YgSzPIkPxW+3IQxtuLsChawKT/lmbyQQU7FRTAH575Da0LtA6qcSROXRvP2r6enb
# 7A0rKyimCin02blTQPOrXmxQ2vxjcyRt9M1fU7+iOB124s5M930jJEJ/56SRk+bW
# OSrwIQhrV1YpHynQ3NUHmk9mkjUusqr4kJNqMQSi9+o=
# O//BwjoT1BxFy2FYZwjOKGvAPbOGC8WxmqRyEvbYYrghHDfP+p21TpKquWAXcCn1
# vvMg3bSB9p4jjvi/20R80kRp5FN4WjogFvSTPS9rzAwQi7RoziWgWKUhhDaLBNYL
# 5JhhVEm6n03WGrmes18VsAPdGgiE8bGuxMsUaVURnzZcaOdgqapQhT6083nsxEAf
# IjL/h34b7x8cW1mmh/U2r1rFVuEs+Es1A3CgWUnk/Vx8LACVfl6ZAtCkP8R3MkuU
# sKK3HWFkeIDoydp9c4zPPdBDT1pERhzOIWSicU/PjE+N6egy2x5JaMrYtzjW3kYz
# RCP3w8slIjgGeonmzGRvyD23u33nucV/hQxDqg2hilaElEobUl6iM5/wdlgNNQv/
# Pz7QyXtfzJNNgeOnl7IDcFAGZrfPXcE/vq0kgkl7C45qgKGAzZ1G7m2308rPt4T4
# 3aUks4YIgVm5JPxpEVsIl+zCY7k9IS91VaNs18y43FOe3Sbl8/DBUAar0DMq/SG7
# lm5WIkWEkwchjSo40jxBPE2NT+UQ8dQwMtNlaAzacIj9jKz6enrdZ8oUZQx555Bj
# pc8bLJg2hHo9V3g3uX8X6Cy7W4EVeYKvRwD8URHa68F6YzlsuJ+urbjKc+VVfGq5
# BrwE9r9ai/474Q0kNsqSeKqrtT5VI//riXdg5sF3tJc=
# SIG # End signature block