Compare commits

...

2 commits

Author SHA1 Message Date
luc
cc0ae78594 ok 2026-10-06 15:19:17 +02:00
luc
e4004ddd78 new reader3.dll
Diagnostics testdetector
2026-10-06 15:12:54 +02:00
21 changed files with 478 additions and 326 deletions

View file

@ -184,8 +184,10 @@ void WINAPI discovery(CommsHandle hComms, DiscoveryId const discovered[], int32_
if (count > 0 && discovered != nullptr)
{
memcpy(&current->Epd, &discovered[0], sizeof(DiscoveryId));
current->Epd.MaxBaud = 9600;
current->DeviceCount = count;
current->isMK3 = (current->Epd.Gen == EpdGeneration::Mk3);
}
else {
current->isMK3 = true;
@ -202,6 +204,7 @@ void WINAPI connectcallback(CommsHandle hComms, DiscoveryId ID)
current->isConnected = 1;
current->DeviceCount = 1;
memcpy(&current->Epd, &ID, sizeof(DiscoveryId));
current->Epd.MaxBaud = 9600;
}
}
@ -247,6 +250,7 @@ Epd3Base::Epd3U::Epd3U(int _comport)
EPDFaulty = false;
EPDTimeFault = 0;
EPDDetectorTestRequested = false;
EPDDetectorTestPassed = false;
hasAlarm = hasFault = 0;
ErrorSource = ErrorReason = ErrorData = 0;
@ -678,6 +682,7 @@ void Epd3Base::Epd3U::DecodeStatus()
EPDTesting = checkStatus(epd3status.OperatingStatus, OpStatusFlags::DetectorTestRequested);
EPDDetectorTestRequested = checkStatus(epd3status.OperatingStatus, OpStatusFlags::DetectorTestRequested);
EPDDetectorTestPassed = checkStatus(epd3status.OperatingStatus, OpStatusFlags::DetectorTestPassed);
EPDFaulty = checkStatus(epd3status.FaultStatus, FaultStatusFlags::EpdFaulty);
EPDNewFault = checkStatus(epd3status.FaultStatus, FaultStatusFlags::ErrorLogged);
EPDComFault = checkStatus(epd3status.FaultStatus, FaultStatusFlags::EarlyCommsTermination);
@ -1515,6 +1520,14 @@ WORD Epd3Base::Epd3U::ReadDoses()
SetCommitReturnValue(r);
if (!r) r = EndReadDoses(epdComsHandle, token, doses, MaxDoses, &numDoses, &utc);
r = SetEndReturnValue(r);
if (r) {
SetFunctionReturnValue(eFunctions::fReadDoses, 0,1);
token = BeginReadDoses(epdComsHandle, nullptr, 0, nullptr);
r = Commit3(epdComsHandle);
SetCommitReturnValue(r);
if (!r) r = EndReadDoses(epdComsHandle, token, doses, MaxDoses, &numDoses, &utc);
r = SetEndReturnValue(r);
}
if (r != 0)
goto error;
@ -1552,6 +1565,8 @@ WORD Epd3Base::Epd3U::ReadDoses()
if (r != 0)
goto error;
decodePeakRates(numRates);
@ -1684,11 +1699,12 @@ WORD Epd3Base::Epd3U::PrepareForIssue()
rv = CommitAndEnd2RV(EndEpdOnOff, token);
if (rv) {
if (rv == r_ErrorNotConnected) rv = ReConnect();
rv = ReConnect();
token = BeginEpdOnOff(epdComsHandle, 1, nullptr);
rv = CommitAndEnd2RV(EndEpdOnOff, token);
}
DetectorsOn = 1;
Sleep(200);
}
if (rv != 0)
{
@ -1868,7 +1884,7 @@ WORD Epd3Base::Epd3U::DeIssue()
if (EPDIssued)
{
if (!isConnected) r = ReConnect(); else r = 0;
if (!isConnected) r = ReConnect();
#if DeissueWithClear
ErrorStep = 2;
r = ClearDoses();
@ -1877,11 +1893,16 @@ WORD Epd3Base::Epd3U::DeIssue()
//needed after clear alarms
Sleep(2000);
#endif
if (!r) {
SetFunctionReturnValue(eFunctions::DeissueEPD, 0);
SetFunctionReturnValue(eFunctions::DeissueEPD, 0);
token = BeginDeissueEPD(epdComsHandle, nullptr);
r = CommitAndEnd2RV(EndDeissueEPD, token);
if (r) {
SetFunctionReturnValue(eFunctions::DeissueEPD, 0,1);
token = BeginDeissueEPD(epdComsHandle, nullptr);
r = CommitAndEnd2RV(EndDeissueEPD, token);
}
if (r == 0)
EPDStepResult = EpdStepResults::OK;
else
@ -1890,12 +1911,14 @@ WORD Epd3Base::Epd3U::DeIssue()
}
progressCallback(EPDStep, EPDStepResult);
Sleep(100);
SetFunctionReturnValue(eFunctions::EpdOff,0);
token = BeginEpdOnOff(epdComsHandle, 0, nullptr);
r = CommitAndEnd2RV(EndEpdOnOff, token);
if (!r) {
if (!isConnected) r = ReConnect();
SetFunctionReturnValue(eFunctions::EpdOff, 0,1);
r = ReConnect();
token = BeginEpdOnOff(epdComsHandle, 0, nullptr);
r = CommitAndEnd2RV(EndEpdOnOff, token);
}
@ -2580,7 +2603,7 @@ error:
int Epd3Base::Epd3U::GetSelfTestData()
{
uint32_t r = 1;
int16_t r = 1;
SetFunctionReturnValue(eFunctions::fReadSelfTestInterval, 0);
token = BeginReadSelfTestInterval(epdComsHandle, nullptr);
r = CommitAndSetRV();
@ -2589,3 +2612,65 @@ int Epd3Base::Epd3U::GetSelfTestData()
return r;
}
int Epd3Base::Epd3U::DoSelfTest()
{
bool StopInterface = false;
int16_t r = 1;
if (!epdComsHandle) {
r= ConnectAndStatus(2000);
DebugWrite("**** ConnectAndStatus rv={} ****\n", r);
StopInterface = true;
}
GetSelfTestData();
DebugWrite("**** StartDetectorTest .... ****\n");
SetFunctionReturnValue(eFunctions::fDoSelfTest, 0);
if (epdComsHandle) {
SetFunctionReturnValue(eFunctions::EpdOn, 0);
token = BeginEpdOnOff(epdComsHandle, 1, nullptr);
r = CommitAndSetRV();
if (!r)
r = EndEpdOnOff(epdComsHandle, token);
else
DebugWrite("**** EpdOn rv={} ****\n", r);
SetEndReturnValue(r);
SetFunctionReturnValue(eFunctions::fDoSelfTest, 0);
token = BeginStartDetectorTest(epdComsHandle, nullptr);
r = CommitAndSetRV();
if (!r)
{
Sleep(5000);
r = EndStartDetectorTest(epdComsHandle, token);
}
else
DebugWrite("**** StartDetectorTest rv={} ****\n", r);
r = SetEndReturnValue(r);
if (r) current->StatusDecoded = false;
else r = ReadStatusOnly();
Sleep(1000);
SetFunctionReturnValue(eFunctions::EpdOff, 0);
token = BeginEpdOnOff(epdComsHandle, 0, nullptr);
r = CommitAndSetRV();
if (!r) {
Sleep(1000);
r = EndEpdOnOff(epdComsHandle, token);
}
else
DebugWrite("**** EpdOff rv={} ****\n", r);
SetEndReturnValue(r);
if (StopInterface) {
SetFunctionReturnValue(eFunctions::fDestroyReaderInterface, 0);
Dll3RV = DestroyReaderInterface(epdComsHandle);
SetEndReturnValue(Dll3RV);
epdComsHandle = nullptr;
};
}
return r;
}

View file

@ -101,7 +101,8 @@ namespace Epd3Base {
WriteAlarmThresholdsHP07,
WriteWearerIdName,
WriteWearerIdPrimary,
ReadStatusOnly
ReadStatusOnly,
fDoSelfTest
};
@ -202,7 +203,9 @@ namespace Epd3Base {
BYTE EPDProcSec = 0;
BYTE EPDFaulty = 0;
BYTE EPDTimeFault = 0;
BYTE EPDDetectorTestRequested;
BYTE EPDDetectorTestRequested = 0;
BYTE EPDDetectorTestPassed = 0;
//ErrorStatus
@ -435,6 +438,7 @@ namespace Epd3Base {
int IssueAndCheck(float gain, float ChirpRate);
int SetChirp(float Sensitivity);
int GetSelfTestData();
int DoSelfTest();
WORD ReadCal();
WORD ReadSensitivitiesAndTresholds();
WORD ReadDoses();

View file

@ -223,7 +223,7 @@ int EpdBaseClr::Epd2::Connect(bool reinit, int EPDTimeout)
}
int EpdBaseClr::Epd2::Close()
{
EpdID= 0;
//EpdID= 0;
if (epd != nullptr) epd->EndCom();
if (epd3 != nullptr) epd3->EndCom(true);
return 0;
@ -240,6 +240,7 @@ int EpdBaseClr::Epd2::DecodeStatus(Epd3Base::Epd3U* epd)
EPDFaulty = epd->EPDFaulty;
EPDTimeFault = epd->EPDTimeFault;
EPDDetectorTestRequested = epd->EPDDetectorTestRequested;
EPDDetectorTestPassed = epd->EPDDetectorTestPassed;
EPDNewFault = epd->EPDNewFault;
EPDComFault = epd->EPDComFault;
@ -336,7 +337,9 @@ int EpdBaseClr::Epd2::AfterGetStatus(EpdBase::Epd2U *epd)
//hasAlarm = epd->hasAlarm; //?1
eDoshasAlarm = epd->hasAlarm;
eDosHasFault = epd->hasFault;
EpdID = epd->EpdID;
EpdID = epd3->Epd.Id;
HardVersion = epd->HardVersion / 100;
HardVersionMinor = epd->HardVersion % 100;
SoftVersion = epd->SoftVersion;
@ -1154,6 +1157,8 @@ System::Threading::Tasks::Task^ EpdBaseClr::Epd2::Wait(int timeout, int Retries)
}
return waitTask;
}
void EpdBaseClr::Epd2::WaitEnd()
{
if (waitTask != nullptr)
@ -1187,6 +1192,23 @@ int EpdBaseClr::Epd2::GetSelfTestData() {
}
}
int EpdBaseClr::Epd2::DoSelfTest() {
int rv = -1;
if (epd3) {
GetSelfTestData();
rv = epd3->DoSelfTest();
EPDDetectorTestRequested = epd3->EPDDetectorTestRequested;
EPDDetectorTestPassed = epd3->EPDDetectorTestPassed;
EpdID = epd3->Epd.Id;
FirmwareVersion = String::Format("{0}.{1}.{2}.{3}", epd3->SoftVersion, epd3->SoftVersionMinor, epd3->SoftVersionPatch, epd3->SoftVersionBuild);
return rv;
}
else {
return 0;
}
}
int EpdBaseClr::Epd2::GetExtraEPDData() {
if (epd3) {

View file

@ -313,7 +313,8 @@ namespace EpdBaseClr {
BYTE EPDProcSec = 0;
BYTE EPDFaulty = 0;
BYTE EPDTimeFault = 0;
BYTE EPDDetectorTestRequested = 0;
bool EPDDetectorTestRequested = 0;
bool EPDDetectorTestPassed = 0;
//ERrrostatus
BYTE EPDNewFault = 0;
@ -369,6 +370,8 @@ namespace EpdBaseClr {
int SetFeedbackSound(byte sound, UINT16 sound3);
int GetSelfTestData();
int DoSelfTest();
int GetExtraEPDData();
private:

View file

@ -32,7 +32,7 @@ CREATE TABLE [dbo].[EPDDevice](
[FirmWare] [VARCHAR](50) NULL,
[First_Station] [INT] NOT NULL,
[firstseen] [DATETIME] NOT NULL,
[MaxBaud] [INT] NULL,
[epdType] [TINYINT] NULL,
[Last_Station] [INT] NULL,
[lastseen] [DATETIME] NULL,
PRIMARY KEY CLUSTERED ( [EPDID] ASC)
@ -47,7 +47,6 @@ CREATE TABLE [dbo].[EPDDeviceLog](
[BatNoload_mV] [INT] NOT NULL,
[Batload_mV] [INT] NOT NULL,
[CPU_mV] [INT] NOT NULL,
[epdType] [TINYINT] NULL,
[r_InvalidState] [INT] NOT NULL,
[r_OperationTimeout] [INT] NOT NULL,
[r_InsufficientPriv] [INT] NOT NULL,
@ -62,7 +61,6 @@ GO
CREATE OR ALTER PROCEDURE [dbo].[EPDAddLog]
@EPDID INT,
@FirmWare VARCHAR(50),
@MaxBaud INT,
@BatNoload_mV INT = 0,
@Batload_mV INT = 0,
@CPU_mV INT = 0,
@ -88,11 +86,15 @@ BEGIN
[firstseen],
[Last_Station],
[lastseen],
[MaxBaud]
[epdType]
)
VALUES
(@EPDID, @FirmWare, @ID_Station, @now, @ID_Station, @now, @MaxBaud);
ELSE UPDATE [dbo].[EPDDevice] SET [Last_Station]= @ID_Station,[lastseen]=@now WHERE EPDID=@EPDID
(@EPDID, @FirmWare, @ID_Station, @now, @ID_Station, @now, @epdType);
ELSE
UPDATE [dbo].[EPDDevice]
SET [Last_Station] = @ID_Station,
[lastseen] = @now
WHERE [EPDID] = @EPDID;
INSERT [dbo].[EPDDeviceLog]
(
@ -117,7 +119,7 @@ BEGIN
@ID_Station, -- ID_Station - int
@ID_Visit, -- ID_Visit - int
@now, -- updated - datetime
@BatNoload_mV, @Batload_mV, @CPU_mV, @epdType, @r_InvalidState, @r_OperationTimeout, @r_InsufficientPriv,
@BatNoload_mV, @Batload_mV, @CPU_mV, @r_InvalidState, @r_OperationTimeout, @r_InsufficientPriv,
@r_OperationFailed, @r_OtherError, @WriteTime, @Registered);
END;

View file

@ -297,7 +297,6 @@ namespace eDosStation
EPDLogCommand.Parameters.AddRange(new System.Data.SqlClient.SqlParameter[] {
new System.Data.SqlClient.SqlParameter("EPDID",SqlDbType.Int,0,System.Data.ParameterDirection.Input,false,0,0,null,System.Data.DataRowVersion.Default,null)
, new System.Data.SqlClient.SqlParameter("FirmWare",SqlDbType.VarChar,50,System.Data.ParameterDirection.Input,false,0,0,null,System.Data.DataRowVersion.Default,null)
, new System.Data.SqlClient.SqlParameter("MaxBaud",SqlDbType.Int,0,System.Data.ParameterDirection.Input,false,0,0,null,System.Data.DataRowVersion.Default,null)
, new System.Data.SqlClient.SqlParameter("BatNoload_mV",SqlDbType.Int,0,System.Data.ParameterDirection.Input,false,0,0,null,System.Data.DataRowVersion.Default,null)
, new System.Data.SqlClient.SqlParameter("Batload_mV",SqlDbType.Int,0,System.Data.ParameterDirection.Input,false,0,0,null,System.Data.DataRowVersion.Default,null)
, new System.Data.SqlClient.SqlParameter("CPU_mV",SqlDbType.Int,0,System.Data.ParameterDirection.Input,false,0,0,null,System.Data.DataRowVersion.Default,null)
@ -312,7 +311,6 @@ namespace eDosStation
, new System.Data.SqlClient.SqlParameter("WriteTime",SqlDbType.Int,0,System.Data.ParameterDirection.Input,false,0,0,null,System.Data.DataRowVersion.Default,null)
, new System.Data.SqlClient.SqlParameter("Registered",SqlDbType.Bit,0,System.Data.ParameterDirection.Input,false,0,0,null,System.Data.DataRowVersion.Default,null)
});
if (oldState == ConnectionState.Closed) localConnection.Close();
}

View file

@ -70,7 +70,7 @@ namespace eDosStation
"WriteAlarmThresholdsHP10",
"WriteAlarmThresholdsHP07",
"WriteWearerIdName",
"tWriteWearerIdPrimary","ReadStatusOnly"
"tWriteWearerIdPrimary","ReadStatusOnly","DoSelfTest"
};
private static string GetName(int func)

View file

@ -52,7 +52,7 @@
<StackPanel>
<Grid Margin="0,0,0,12">
<TextBlock Text="Device Connection" FontSize="14" FontWeight="Bold" Foreground="#333333" VerticalAlignment="Center"/>
<Button Content="Connect" Style="{StaticResource PrimaryButtonStyle}" HorizontalAlignment="Right" Click="Connect_Click"/>
<Button Content="Test Detector" Style="{StaticResource PrimaryButtonStyle}" HorizontalAlignment="Left" Click="TestDetector_Click" Height="32" Margin="624,0,0,0" VerticalAlignment="Top"/>
</Grid>
<Separator Background="#EAEAEA" Margin="0,0,0,12"/>
@ -70,13 +70,12 @@
</Grid.RowDefinitions>
<TextBlock Grid.Row="0" Grid.Column="0" Text="EPD Nr:" Foreground="#666666" Margin="0,2"/>
<TextBlock Grid.Row="0" Grid.Column="1" Text="EPD-10294" FontWeight="SemiBold" Foreground="#1A1A1A" Margin="0,2"/>
<TextBlock Grid.Row="0" Grid.Column="1" Name="EPDID" Text="---" FontWeight="SemiBold" Foreground="#1A1A1A" Margin="0,2"/>
<TextBlock Grid.Row="1" Grid.Column="0" Text="Firmware Version:" Foreground="#666666" Margin="0,2"/>
<TextBlock Grid.Row="1" Grid.Column="1" Text="v2.4.1" FontWeight="SemiBold" Foreground="#1A1A1A" Margin="0,2"/>
<TextBlock Grid.Row="1" Grid.Column="1" Name="FirmwareVersion" Text="---" FontWeight="SemiBold" Foreground="#1A1A1A" Margin="0,2"/>
<TextBlock Grid.Row="2" Grid.Column="0" Text="Hardware Version:" Foreground="#666666" Margin="0,2"/>
<TextBlock Grid.Row="2" Grid.Column="1" Text="Rev C" FontWeight="SemiBold" Foreground="#1A1A1A" Margin="0,2"/>
</Grid>
</StackPanel>
</Border>
@ -88,7 +87,7 @@
<TextBlock Text="Detector Status" FontSize="14" FontWeight="Bold" Foreground="#333333" VerticalAlignment="Center"/>
<Button Content="Test Detector" Style="{StaticResource PrimaryButtonStyle}" HorizontalAlignment="Left" Click="TestDetector_Click" Height="32" Margin="624,0,0,0" VerticalAlignment="Top"/>
</Grid>
<Separator Background="#EAEAEA" Margin="0,0,0,12"/>
@ -115,8 +114,8 @@
<!-- Badge voor OK (Voor 'Not OK': verander background naar #FDEDEC en text naar #E74C3C) -->
<Border Background="#E8F8F5" CornerRadius="12" Padding="10,4">
<StackPanel Orientation="Horizontal">
<Ellipse Width="8" Height="8" Fill="#2ECC71" Margin="0,0,6,0" VerticalAlignment="Center"/>
<TextBlock Text="OK" Foreground="#27AE60" FontWeight="Bold" FontSize="12"/>
<Ellipse Name="OkBullet" Width="8" Height="8" Fill="DimGray" Margin="0,0,6,0" VerticalAlignment="Center"/>
<TextBlock Name="OkText" Text="-" Foreground="DimGray" FontWeight="Bold" FontSize="12"/>
</StackPanel>
</Border>
</StackPanel>

View file

@ -1,5 +1,6 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
@ -13,6 +14,8 @@ using System.Windows.Media.Imaging;
using System.Windows.Shapes;
using System.Windows.Threading;
using Telerik.Windows.Controls.StepProgressBar;
//using static System.Net.Mime.MediaTypeNames;
namespace eDosStation
{
@ -72,28 +75,28 @@ public static void DoEvents()
private void Ep_EpdProgress(EpdBaseClr.Epd2 Sender, EpdSteps step, EpdStepResults result)
{
System.Diagnostics.Debug.WriteLine($"EPD Progress step:{step} result:{result}");
int index = -1;
StepStatus st = StepStatus.NotStarted;
System.Windows.Media.Brush br = System.Windows.Media.Brushes.LightGray;
//System.Diagnostics.Debug.WriteLine($"EPD Progress step:{step} result:{result}");
//int index = -1;
//StepStatus st = StepStatus.NotStarted;
//System.Windows.Media.Brush br = System.Windows.Media.Brushes.LightGray;
switch (step)
{
case EpdSteps.StepStartCom: index = 0; break;
case EpdSteps.StepConnecting: index = 1; break;
case EpdSteps.StepReadStatus: index = 2; break;
case EpdSteps.StepSleep: index = 3; break;
case EpdSteps.StepPrepareIssue: index = 4; break;
case EpdSteps.StepIssue: index = 5; break;
default: index = -1; break;
}
switch (result)
{
case EpdStepResults.OK: st = StepStatus.Completed; br = System.Windows.Media.Brushes.LightGreen; break;
case EpdStepResults.Error: st = StepStatus.Indeterminate; br = System.Windows.Media.Brushes.LightGreen; break;
case EpdStepResults.Started: st = StepStatus.Indeterminate; br = System.Windows.Media.Brushes.LightYellow; break;
case EpdStepResults.Sleeping: st = StepStatus.Indeterminate; br = System.Windows.Media.Brushes.LightBlue; break;
}
//switch (step)
//{
// case EpdSteps.StepStartCom: index = 0; break;
// case EpdSteps.StepConnecting: index = 1; break;
// case EpdSteps.StepReadStatus: index = 2; break;
// case EpdSteps.StepSleep: index = 3; break;
// case EpdSteps.StepPrepareIssue: index = 4; break;
// case EpdSteps.StepIssue: index = 5; break;
// default: index = -1; break;
//}
//switch (result)
//{
// case EpdStepResults.OK: st = StepStatus.Completed; br = System.Windows.Media.Brushes.LightGreen; break;
// case EpdStepResults.Error: st = StepStatus.Indeterminate; br = System.Windows.Media.Brushes.LightGreen; break;
// case EpdStepResults.Started: st = StepStatus.Indeterminate; br = System.Windows.Media.Brushes.LightYellow; break;
// case EpdStepResults.Sleeping: st = StepStatus.Indeterminate; br = System.Windows.Media.Brushes.LightBlue; break;
//}
//if (index >= 0 && index < stepEPD.Items.Count)
//{
// this.Dispatcher.Invoke(() =>
@ -159,12 +162,32 @@ public static void DoEvents()
{
startEPDRead();
}
private void TestDetector_Click(object sender, RoutedEventArgs e)
{
ep.GetSelfTestData();
ep.DoSelfTest();
int i = ep.SelftestMinutes;
SelfTestMinutes.Text = i.ToString();
EPDID.Text = ep.EpdID.ToString();
FirmwareVersion.Text = ep.FirmwareVersion;
bool ok = ep.EPDDetectorTestPassed;
if (ok)
{
OkBullet.Fill = new SolidColorBrush((Color)ColorConverter.ConvertFromString("#2ECC71"));
OkText.Text = "OK";
OkText.Foreground = new SolidColorBrush((Color)ColorConverter.ConvertFromString("#27AE60"));
}
else
{
OkBullet.Fill = new SolidColorBrush((Color)ColorConverter.ConvertFromString("#FDEDEC"));
OkText.Text = "Not OK";
OkText.Foreground = new SolidColorBrush((Color)ColorConverter.ConvertFromString("#E74C3C"));
}
}
}
}

View file

@ -130,7 +130,7 @@ namespace eDosStation
bool stopBecauseAlarmDose = ep.eDoshasAlarm && thisStation.StopBecauseAlarmDose ;
if (stopBecauseAlarmDose || ep.OtherAlarmBatLow > 0 || realFault || ep.EPDDetectorTestRequested > 0)
if (stopBecauseAlarmDose || ep.OtherAlarmBatLow > 0 || realFault || ep.EPDDetectorTestRequested )
{
TextBlock il = new TextBlock();
il.Inlines.Add(new Run("EPD is in alarm status\n\n")
@ -146,7 +146,7 @@ namespace eDosStation
if (ep.EPDComFault > 0) il.Inlines.Add(new Run("* Communication fault *"));
if (ep.EPDEprFault > 0) il.Inlines.Add(new Run("* Eprom fault *"));
if (ep.EPDTrhFault > 0) il.Inlines.Add(new Run("* Treshold fault *"));
if (ep.EPDDetectorTestRequested > 0) il.Inlines.Add(new Run("* Detector test requested *"));
if (ep.EPDDetectorTestRequested ) il.Inlines.Add(new Run("* Detector test requested *"));
il.Inlines.Add(new LineBreak());
il.Inlines.Add(new LineBreak());
il.Inlines.Add(new Run("Please take an other."));
@ -436,19 +436,18 @@ namespace eDosStation
dataInterface.EPDLogCommand.Parameters["ID_Visit"].Value = ID_Visit;
dataInterface.EPDLogCommand.Parameters["EPDID"].Value = ep.EpdID;
dataInterface.EPDLogCommand.Parameters["FirmWare"].Value = ep.FirmwareVersion;
dataInterface.EPDLogCommand.Parameters["BatNoload_mV"].Value = ep.BatNoLoad_mV;
dataInterface.EPDLogCommand.Parameters["Batload_mV"].Value = ep.BatLoad_mV;
dataInterface.EPDLogCommand.Parameters["CPU_mV"].Value = ep.Cpu_mV;
dataInterface.EPDLogCommand.Parameters["r_InvalidState"].Value = 0;
dataInterface.EPDLogCommand.Parameters["r_OperationTimeout"].Value = 0;
dataInterface.EPDLogCommand.Parameters["r_InsufficientPriv"].Value = 0;
dataInterface.EPDLogCommand.Parameters["r_OperationFailed"].Value = 0;
dataInterface.EPDLogCommand.Parameters["r_OtherError"].Value = 0;
dataInterface.EPDLogCommand.Parameters["epdType"].Value = ep.epdType;
dataInterface.EPDLogCommand.Parameters["Registered"].Value = Registered;
dataInterface.EPDLogCommand.Parameters["MaxBaud"].Value = ep.MaxBaud;
dataInterface.EPDLogCommand.Parameters["WriteTime"].Value = ep.StepMaxTime;
dataInterface.EPDLogCommand.SetStringParam("FirmWare", ep.FirmwareVersion);
dataInterface.EPDLogCommand.SetIntParam("BatNoload_mV", ep.BatNoLoad_mV);
dataInterface.EPDLogCommand.SetIntParam("Batload_mV", ep.BatLoad_mV);
dataInterface.EPDLogCommand.SetIntParam("CPU_mV", ep.Cpu_mV) ;
dataInterface.EPDLogCommand.SetIntParam("r_InvalidState", 0);
dataInterface.EPDLogCommand.SetIntParam("r_OperationTimeout", 0);
dataInterface.EPDLogCommand.SetIntParam("r_InsufficientPriv", 0);
dataInterface.EPDLogCommand.SetIntParam("r_OperationFailed", 0);
dataInterface.EPDLogCommand.SetIntParam("r_OtherError", 0) ;
dataInterface.EPDLogCommand.SetIntParam("epdType", ep.epdType) ;
dataInterface.EPDLogCommand.SetBoolParam("Registered",Registered);
dataInterface.EPDLogCommand.SetIntParam("WriteTime", ep.StepMaxTime);
System.Diagnostics.Debug.WriteLine($"EPD Log {ep.EpdID} {ep.FirmwareVersion} {ep.BatNoLoad_mV} {ep.BatLoad_mV} {ep.Cpu_mV} {ep.epdType} maxBaud:{ep.MaxBaud} tm:{ep.StepMaxTime} ");
if (ep.ErrorReturnValues != null)

View file

@ -232,7 +232,7 @@ namespace eDosStation
ok.IsSelected = true;
}
rv = epdDevice.GetAllDeissue(true); //reconnect
rv = epdDevice.GetAllDeissue(true);
if (rv != 0 || thisStation.LogAll)
{
//MessageBox.Show($"GetDoses {rv} rv:{ep.ErrorRV} step:{ep.ErrorStep} er:{ep.GetDosesError}");

View file

@ -1 +1 @@
05/10/2026 13:37:01,45
06/10/2026 15:11:02,84

View file

@ -16,11 +16,12 @@
<StatusBar DockPanel.Dock="Bottom">
<StatusBarItem x:Name="statusEPD" Content="Epd" />
</StatusBar>
<!--<Button DockPanel.Dock="Bottom" Name="bSelfTest" Content="Self Test" Click="bSelfTest_Click"/>-->
<!-- Main UserControl occupying the remaining window area -->
<local:DosimeterDisplay x:Name="DosimeterView"
<local:DosimeterDisplay x:Name="DosimeterView"
HorizontalAlignment="Stretch"
VerticalAlignment="Stretch"
ClosedClicked="DosimeterView_CloseClicked"/>
</DockPanel>
</Window>

View file

@ -194,6 +194,7 @@ namespace eDosStation
DosimeterView.Progress.Visibility = Visibility.Collapsed;
DosimeterView.bEpdCancel.IsEnabled = true;
//bSelfTest.IsEnabled = true;
}
private void Window_Loaded(object sender, RoutedEventArgs e)
@ -207,7 +208,7 @@ namespace eDosStation
ep.EpdError += Ep_EpdError;
ep.EpdTO += Ep_EpdTO;
ep.EpdProgress += Ep_EpdProgress;
//bSelfTest.IsEnabled = false;
dispatcherTimer = new DispatcherTimer(DispatcherPriority.Background);
dispatcherTimer.Interval = thisStation.ScreenProgressBarInterval;
dispatcherTimer.Tick += CountDown;
@ -216,12 +217,7 @@ namespace eDosStation
dispatcherTimer.Start();
startEPDRead();
//dispatcherTimer = new DispatcherTimer(DispatcherPriority.Normal);
//dispatcherTimer.Interval = TimeSpan.FromMilliseconds(thisStation.EPDTimeOut / 10);
//Progress.Maximum = Progress.Value = dispatcherTimer.Interval.TotalSeconds * 10;
//dispatcherTimer.Tick += CountDown;
//Dispatcher.InvokeAsync(() => ep.Wait(thisStation.EPDTimeOut, 1),DispatcherPriority.Background);
//dispatcherTimer.Start();
}
@ -291,6 +287,12 @@ namespace eDosStation
System.Diagnostics.Debug.WriteLine(ex.Message);
}
}
private void bSelfTest_Click(object sender, RoutedEventArgs e)
{
//bSelfTest.IsEnabled = false;
ep.DoSelfTest();
}
}
}

View file

@ -43,6 +43,21 @@ static public class extensions
c.Parameters[paramname].Value= ovalue;
return found;
}
static public bool SetTinyIntParam(this System.Data.SqlClient.SqlCommand c, string paramname, byte? value)
{
bool found = true;
object ovalue;
if (value.HasValue) ovalue = value.Value; else ovalue = DBNull.Value;
if (!c.Parameters.Contains(paramname))
{
if (paramname[0] != '@') paramname = "@" + paramname; else paramname = paramname.Substring(1);
found = c.Parameters.Contains(paramname);
}
if (found)
c.Parameters[paramname].Value = ovalue;
return found;
}
static public bool SetStringParam(this System.Data.SqlClient.SqlCommand c, string paramname, string value)
{
bool found = true;

View file

@ -208,17 +208,17 @@ exit
# RGlnaUNlcnQsIEluYy4xQTA/BgNVBAMTOERpZ2lDZXJ0IFRydXN0ZWQgRzQgVGlt
# ZVN0YW1waW5nIFJTQTQwOTYgU0hBMjU2IDIwMjUgQ0ExAhAIT9wzT35FTtvDD4/5
# khg1MA0GCWCGSAFlAwQCAQUAoGkwGAYJKoZIhvcNAQkDMQsGCSqGSIb3DQEHATAc
# BgkqhkiG9w0BCQUxDxcNMjYxMDA1MTIzNDQ2WjAvBgkqhkiG9w0BCQQxIgQgwGts
# BgkqhkiG9w0BCQUxDxcNMjYxMDA2MTMxMTI2WjAvBgkqhkiG9w0BCQQxIgQgwGts
# hmgwg+1No3Bfq4IiEmxiCsjb9Jy7A/l9sT7ewm0wDQYJKoZIhvcNAQEBBQAEggIA
# ph8E1bHTXizaj5d49bp5rEd0ptHa6IcjhAy06CYjmPWfsIsFx6XcbXbLnSvx/ldm
# BnDja4OhUiAObVYLS9j7OfVfgbr4SBmzcgvpcewtg93Q3ed787SAskdHAgOLAcFJ
# pzoyF3uVEZZyz+zAlBqjpIe7Bya72T2U7aj2bRhlsuGompTj75Or2YO03WTSNQU0
# +C+OiAwC1bYIwwWDmPZE6jPs651iNhM4YE66aOODhx6nxCNTZ2RmL19iiaGGhtYY
# UzNLomY+QQldf5Zs2NogxdcfRWRR02mOJalIy3q+szz6KHK1szTi57AaP2++qbZT
# 8G0dOuCESAH0TropL3SZ1sf+6YKOTlrcYjsGdGw+spX9kygzu04An43rmOC+/41h
# 6tMlmIum9RmPPsO47FGJcTHP204hHEKolxSONifxa8ReYtAeANK7psX7LXkFV5ED
# aUsztN7se4p4p+YcjPMPZ3UtU5HxvMjeMYB0Fqjy8FqfG8eIi3LsPLY7cXHmMEie
# sQ5pxB0uq1hJfKGonP2ggYh86WVDg7H5hkja0ohxsRsZK11VQQZNSDRsSJvTQWic
# jU3jMXEYbu1wKdvoPWyohgknuOOHCHpIteg825q5f1jz6a6NjYMcBc31uq8ZG7RT
# GP6TXRQZc0OxfnycaYbmcbM50wLsTTZC5D0Xpwp/fE8=
# eq+fW5oa6vHqUfam8XD6psNuIviUYyLotkb1ah2L2VshODdM/LkxHyYNUG5/fpDU
# i/cDrvCbx9D5CDC0vtqCA86gBOwSh5xk2SHWIPH6YVO4l6zS4P1h2WAvnf26jxMD
# 7dIhWQBZG9Ase4lFMT75ol8GHjC5VMFY9lJGp9LapilTwt9Dp9s5azbogpccsFA8
# gGIhAhV9Omq4z3IaibrHu+0AsTsl24VabwU8AYVW+Sx2Qx9Z9hmWaqBgmEugSvan
# 5XGbwbUIPr9p2sCVuPRYRfb8gADNyoklPhZOmzn5khk+mU/q+Yxg0aitlXaN+IWl
# IOs5muSvfgaLrVMErmHjoAqtFpj7ftXVe8+lv3Xxp2GeyIEeW5Cenb+JXAcUpTir
# R4nJg2/DvGKQ2wJiZkzVXoUFDD5i29wcD1Q5ivyM5XmBDudxqmuoBTC5ZFQSy4gA
# PMsF4cFR+kUDSgV0vjrOF1cSixMDhG2OnItAWSmGSk/q7DKcreGneJfgDjNy17Px
# ywfeO5kqJejazottaSNfYbE1c6KIFS6c7R0jLcOWfdRvIgKL8VywktjStCza4nex
# Sbhy8Pif6HFK1PcqLX2T+4iXJuFy8gYwW6fJQ/H3Ub4E036jHU4c4ErDJcZf/ne+
# yTOaIM66rEIiXk6oP6dTn3yKWwV2dysJ3iX1ynn9bo4=
# SIG # End signature block

View file

@ -262,17 +262,17 @@ Write-Host "Database is volledig up-to-date!" -ForegroundColor Green
# RGlnaUNlcnQsIEluYy4xQTA/BgNVBAMTOERpZ2lDZXJ0IFRydXN0ZWQgRzQgVGlt
# ZVN0YW1waW5nIFJTQTQwOTYgU0hBMjU2IDIwMjUgQ0ExAhAIT9wzT35FTtvDD4/5
# khg1MA0GCWCGSAFlAwQCAQUAoGkwGAYJKoZIhvcNAQkDMQsGCSqGSIb3DQEHATAc
# BgkqhkiG9w0BCQUxDxcNMjYxMDA1MTIzNDQ2WjAvBgkqhkiG9w0BCQQxIgQg7eE1
# BgkqhkiG9w0BCQUxDxcNMjYxMDA2MTMxMTI2WjAvBgkqhkiG9w0BCQQxIgQg7eE1
# TkJYiYpI8CRbmgkeRnfivK4r6w+NESm6b5PymjIwDQYJKoZIhvcNAQEBBQAEggIA
# ozQvmRfj33aaJEw3aOSIqMBMoiRj2K00+Vem+9hbaaJWxW6v+c8SN7WC7nWLzEx7
# 1VbAu5c58Wcx/IIjmHcOgscummPZL5Fn2DXf2Va+DbcCcRJsQOSoA/X47WQjGpXW
# o1QWaD8h3XIaJjzKpxVQmjiIdjOE5OlXl91cVMD2pvCH3TgfxvPui9A5566kvcnc
# 9eOk44E5S1ByzEE0rS8LcAHbJ7ykhOqOs+uNkJQfJ94EbbrA6lHDWKbjQiHNtQWB
# qrQVOv24xfpDRVK9DeWnW4oRueRxKhzwrRZ2LyYEREx4XBeci9z4McG26AC7jBD8
# hBlAv6TA4HJWSB4BZ/oDwZxvROxYsbo9WNeYsxiIvkSHKSaMTXhS880Q/EXwAaJ7
# +0gx+hVEK4oEVwq2TzZ8EmZ9Oe0QOXvLaAchnlcNC4UaDi4SSFAbSSZvrwe0azMO
# 29sZW9cFcsMmdnWmi0Ns54KPhO2ZyAMqnxEGKzInTElOAVfeDT1UWcJEh2yfB3U+
# S5tWliPO/asixxKBScprDV9G3qV4zFJuqMnBLKSVNCV/4qF97iUKNRrno+Ke9Gis
# Hv7fr7Va+wyzWgj0CEX4Vpk/q0Lek77VHFkEaJ/gae12WGapV10m6XwNYInpNwZ2
# R0n671fzpWQ8eynt/1cVXs1N6NwZt+3YUNerphrpvBw=
# b6SpT7Xcmxr/4M43OsVfXezvYsiASkOyzBQ7lnS4hRS3CGx83q3Jk9GzJsxN9+WB
# svQ+cR6SDgu/vmNVbt/bT1jh/G8/LZ6HdQKFQaNhu2w6G89blU6K4kp+6wHFVED9
# tSBvVWRQQEDhHp7qWEw67luqDW3gqUJqTmw0GxAeb2oC72ksad1Y//Astlmeizvf
# /3ffiIOpXAWc64uJJ0SdmF/hbF2OY/jtztgcgE4XIImnP9+RG/TQu8uzrWMGEbvo
# wGCfR7jUcWrURtt1X86BuwQDxNQIHznWGOwzvYgl9jTVUdGWWr8o6I3IQJbVD1F9
# VEpK2mHNobCovMO4tTP74BQVENPZnWaHVUcFMZvxXWvcngtzuWBldwMDAQeziTGC
# +r124zO3rtqxJ6n2+c/mMu2w9jn+E5oBN0KR8xEEvQwhwrVnefHxhk3QfXSFX+dk
# tQzNyEGyCOyKlXCEmxAf6bChVBVFmMceEmV6aPUSdLH7d2o+1/cjHf/HFfnwrOaQ
# rn78tw4Zfv4f5oOcp5f+2cxGidmLIu8Inq8KLOx5hdeVHjNjxFuzt8OxE2xJ45SH
# YaQAoaeSDR5cUaiyPCEiQUmMPbgJgigm+HhxexH3uPLIjXeMzSei22ObsjFCqOyM
# mciwAmabI88DI8roafqmgB2yp9s6CCPpDpgRT+2kIKY=
# SIG # End signature block

View file

@ -164,204 +164,203 @@ exit
# SIG # Begin signature block
# MIIlWAYJKoZIhvcNAQcCoIIlSTCCJUUCAQExDzANBglghkgBZQMEAgEFADB5Bgor
# BgEEAYI3AgEEoGswaTA0BgorBgEEAYI3AgEeMCYCAwEAAAQQH8w7YFlLCE63JNLG
# KX7zUQIBAAIBAAIBAAIBAAIBADAxMA0GCWCGSAFlAwQCAQUABCDaI2gTNvXvigI9
# pMg4iH9rwStslV7hXTjclyv/GmvLXqCCH3AwggWNMIIEdaADAgECAhAOmxiO+dAt
# 5+/bUOIIQBhaMA0GCSqGSIb3DQEBDAUAMGUxCzAJBgNVBAYTAlVTMRUwEwYDVQQK
# EwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3dy5kaWdpY2VydC5jb20xJDAiBgNV
# BAMTG0RpZ2lDZXJ0IEFzc3VyZWQgSUQgUm9vdCBDQTAeFw0yMjA4MDEwMDAwMDBa
# Fw0zMTExMDkyMzU5NTlaMGIxCzAJBgNVBAYTAlVTMRUwEwYDVQQKEwxEaWdpQ2Vy
# dCBJbmMxGTAXBgNVBAsTEHd3dy5kaWdpY2VydC5jb20xITAfBgNVBAMTGERpZ2lD
# ZXJ0IFRydXN0ZWQgUm9vdCBHNDCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoC
# ggIBAL/mkHNo3rvkXUo8MCIwaTPswqclLskhPfKK2FnC4SmnPVirdprNrnsbhA3E
# MB/zG6Q4FutWxpdtHauyefLKEdLkX9YFPFIPUh/GnhWlfr6fqVcWWVVyr2iTcMKy
# unWZanMylNEQRBAu34LzB4TmdDttceItDBvuINXJIB1jKS3O7F5OyJP4IWGbNOsF
# xl7sWxq868nPzaw0QF+xembud8hIqGZXV59UWI4MK7dPpzDZVu7Ke13jrclPXuU1
# 5zHL2pNe3I6PgNq2kZhAkHnDeMe2scS1ahg4AxCN2NQ3pC4FfYj1gj4QkXCrVYJB
# MtfbBHMqbpEBfCFM1LyuGwN1XXhm2ToxRJozQL8I11pJpMLmqaBn3aQnvKFPObUR
# WBf3JFxGj2T3wWmIdph2PVldQnaHiZdpekjw4KISG2aadMreSx7nDmOu5tTvkpI6
# nj3cAORFJYm2mkQZK37AlLTSYW3rM9nF30sEAMx9HJXDj/chsrIRt7t/8tWMcCxB
# YKqxYxhElRp2Yn72gLD76GSmM9GJB+G9t+ZDpBi4pncB4Q+UDCEdslQpJYls5Q5S
# UUd0viastkF13nqsX40/ybzTQRESW+UQUOsxxcpyFiIJ33xMdT9j7CFfxCBRa2+x
# q4aLT8LWRV+dIPyhHsXAj6KxfgommfXkaS+YHS312amyHeUbAgMBAAGjggE6MIIB
# NjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBTs1+OC0nFdZEzfLmc/57qYrhwP
# TzAfBgNVHSMEGDAWgBRF66Kv9JLLgjEtUYunpyGd823IDzAOBgNVHQ8BAf8EBAMC
# AYYweQYIKwYBBQUHAQEEbTBrMCQGCCsGAQUFBzABhhhodHRwOi8vb2NzcC5kaWdp
# Y2VydC5jb20wQwYIKwYBBQUHMAKGN2h0dHA6Ly9jYWNlcnRzLmRpZ2ljZXJ0LmNv
# bS9EaWdpQ2VydEFzc3VyZWRJRFJvb3RDQS5jcnQwRQYDVR0fBD4wPDA6oDigNoY0
# aHR0cDovL2NybDMuZGlnaWNlcnQuY29tL0RpZ2lDZXJ0QXNzdXJlZElEUm9vdENB
# LmNybDARBgNVHSAECjAIMAYGBFUdIAAwDQYJKoZIhvcNAQEMBQADggEBAHCgv0Nc
# Vec4X6CjdBs9thbX979XB72arKGHLOyFXqkauyL4hxppVCLtpIh3bb0aFPQTSnov
# Lbc47/T/gLn4offyct4kvFIDyE7QKt76LVbP+fT3rDB6mouyXtTP0UNEm0Mh65Zy
# oUi0mcudT6cGAxN3J0TU53/oWajwvy8LpunyNDzs9wPHh6jSTEAZNUZqaVSwuKFW
# juyk1T3osdz9HNj0d1pcVIxv76FQPfx2CWiEn2/K2yCNNWAcAgPLILCsWKAOQGPF
# mCLBsln1VWvPJ6tsds5vIy30fnFqI2si/xK4VC0nftg62fC2h5b9W9FcrBjDTZ9z
# twGpn1eqXijiuZQwggW8MIIDpKADAgECAgEfMA0GCSqGSIb3DQEBCwUAMGYxCzAJ
# BgNVBAYTAkJFMRIwEAYDVQQIEwlBbnR3ZXJwZW4xDDAKBgNVBAcTA01vbDEPMA0G
# A1UEChMGU0NLQ0VOMQwwCgYDVQQLEwNJQ1QxFjAUBgNVBAMTDVNDS0NFTiBJQ1Qg
# Q0EwHhcNMTgwNTI0MDYxMTAwWhcNMzAwNjAxMTIwMDAwWjBPMSEwHwYDVQQDExhW
# YW5kZW5icm91Y2tlIEx1YyBDUzIwMjExKjAoBgkqhkiG9w0BCQEWG2x1Yy52YW5k
# ZW5icm91Y2tlQHNja2Nlbi5iZTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC
# ggEBAPRbMPSAdMsURs6M9TChuXZWe1LSQlVXYVHPGRlnQeF719tgHS1Ern70aW0P
# uvCECkzUTbGHw3o+bF+vj1UZWw82oOEZGannAoTyG1CIxdOMc85Mdmy+Kb++9Ivx
# a6i4ahfpNDHE0F58TomaNyDY0dtRUDEMZw/A0AMkFmdg9BOnqrYeeLB0O/86ZkzU
# klRifi/Wa3ti1LV4U7fR6S4bMm7dZBh46IU2G3/oBdlNYAtC3DNol+bnrcBvF+cc
# GwG5kVxEZg8TtpEMj00hnI+rNPjI4Ar6mE83XKak1X5/xddZppx9ldJaiVujyOqy
# 0cONhiN/vsWPdZU37LQbG1OydGUCAwEAAaOCAYowggGGMAkGA1UdEwQCMAAwHQYD
# VR0OBBYEFN+1bIhLi6eWlLbzynleh97QuIFlMB8GA1UdIwQYMBaAFPApFPVqIRSS
# VlQTpD3VrfAhOsV4MAsGA1UdDwQEAwIHgDAfBgNVHSUEGDAWBggrBgEFBQcDAwYK
# KwYBBAGCNwIBFTA6BgNVHREEMzAxgRtsdWMudmFuZGVuYnJvdWNrZUBzY2tjZW4u
# YmWBEmx2YW5kZW5iQHNja2Nlbi5iZTA1BgNVHRIELjAshipodHRwOi8vY3JsLnNj
# a2Nlbi5iZS9TQ0tDRU4lMjBJQ1QlMjBDQS5jcnQwOwYDVR0fBDQwMjAwoC6gLIYq
# aHR0cDovL2NybC5zY2tjZW4uYmUvU0NLQ0VOJTIwSUNUJTIwQ0EuY3JsMD4GCSsG
# AQQBgjcVBwQxMC8GJysGAQQBgjcVCISMvCGCyP13gqGTIoSXlEaExpIugQGC1IQh
# gfrIaQIBZAIBCDAbBgkrBgEEAYI3FQoEDjAMMAoGCCsGAQUFBwMDMA0GCSqGSIb3
# DQEBCwUAA4ICAQBGH87fu9sNbcCPVQCdJ9jP4jT59WTZm6s5BquO10UL9i7UAEmd
# d0yfCHW3myNUigR6O+Oc6Wa74HbUhAk+nEimHxzP5KcNnKE6lwqsIOf49J5G+2HR
# mTgW9tewsr39ZiB3NE5s04fHEA0I45zs8wsgyp4Mlr5v3AfzYB7gxh0Hxdm+ion7
# PXvbKhAyI3F7pQTYauilmLAkHnoXD6T+Osp04wR9m1+HNGqLMKYyVOSdu0UnmGuq
# HBxpMD7hAJ8LCi5yR6t6s4BNCczwhzUpo6ZgrtLmKCacDmZ6SJMqsGFwan/GxnLS
# vw5QpVXUVJidDfTflMeJrfWhDOEt7jx9oQWQ249uzxlqJMVfBt1YZDq4gr76yjK6
# VY7F6540ECog4auPte4NoiT5UPdE3QHSD/82/cdLoVuhELR4p4bfJ7PONT7x8iZz
# I8BoASh9SKJBh06mcmyJosOkc77Wv3ykqal7R+/LQi9geJwku6Ti0XIy9UFGBbUD
# 4m18e5cKdqDzyIHwAne0JR0ZEILPzITWviFuSXKqGP0bkSbGgpl+LuaCHcKAv+1F
# QBc2oWW0yPdxCUYpwo9QfTTh0qYXABQAbibOw7VKTnRLsS92m9pb6wn9tYyNfMu6
# r7EXCuxJNDbYpKbxeadfY0arCzlOT6mpC6lzBqfgKyN+VWoy9rmdzhjEjjCCBnIw
# ggRaoAMCAQICEzgAAAACbukOrXYB5dcAAAAAAAIwDQYJKoZIhvcNAQELBQAwZzEL
# MAkGA1UEBhMCQkUxEjAQBgNVBAgTCUFudHdlcnBlbjEMMAoGA1UEBxMDTW9sMQ8w
# DQYDVQQKEwZTQ0tDRU4xDDAKBgNVBAsTA0lDVDEXMBUGA1UEAxMOU0NLQ0VOIFJv
# b3QgQ0EwHhcNMTcwNjIzMTEzOTM0WhcNMzIwNjIzMTE0OTM0WjBmMQswCQYDVQQG
# EwJCRTESMBAGA1UECBMJQW50d2VycGVuMQwwCgYDVQQHEwNNb2wxDzANBgNVBAoT
# BlNDS0NFTjEMMAoGA1UECxMDSUNUMRYwFAYDVQQDEw1TQ0tDRU4gSUNUIENBMIIC
# IjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAsW1uJ8gCKQwjdhAhr6eJJNXw
# +wffi5p2RB48uzTaQh2Y89P+75NFhk7qeOW0tVwacxYkubMvgNqasA9RslymREsx
# LfloMCidRPSQj8o0KE2cfLYojYre1TChFxc0PZobibZ7BTsU2v75GQjnsEEMmxzw
# JLAjSU2mFVKJKjrKs4Xt/q6j3w0fdrRz0ba8zSMbTHO2K8Cd1Rq3GQDLPythJyDx
# zo6YRE7TFOFcXGrIpFXvmy1XPc/ItiHwTocOmQ1msF+46W0gfWtbFLt8bC/CnuE2
# ZQPnAmpq3lOUu8cOq/2eqhihAeAli5McYepaK+qr1JtLNfgTSkkFFw27c5cPXwFC
# CE0ryJdN+qN4Xdk3J2iz0hayEJ4sGaimdJTXv/OTmSxxKGMnPYV+BTvk/PDJnGjW
# QqOryf0PWgmwVQ1KAowaPjBAXJOEotzNnzW0/FKtvgJYLk3xFs3sJJ6EG6D02wB2
# RNszNGM66tyqqx/Z3651xwzgkYYR1ETdmddcqL6/3a+HifS5K99N+q7rX/Rp31AU
# lNsb53xhh43NWUAg5Tzrb9J54mBR6Z/MafmTVHcK2nK6RRYaUfxs/WuE2+OzX7Md
# G/URi1lVuOu7hp7AKnSjcLnOcBG7lkSK1Q1pCuACYMkvCl+7keio376akUfumX3H
# qEVgK8ttZiRgiVHR7Q0CAwEAAaOCARYwggESMBAGCSsGAQQBgjcVAQQDAgEAMB0G
# A1UdDgQWBBTwKRT1aiEUklZUE6Q91a3wITrFeDAZBgkrBgEEAYI3FAIEDB4KAFMA
# dQBiAEMAQTALBgNVHQ8EBAMCAYYwDwYDVR0TAQH/BAUwAwEB/zAfBgNVHSMEGDAW
# gBRSvxsquCggUTGvI6e+I5TG0fkUMDA8BgNVHR8ENTAzMDGgL6AthitodHRwOi8v
# Y3JsLnNja2Nlbi5iZS9TQ0tDRU4lMjBSb290JTIwQ0EuY3JsMEcGCCsGAQUFBwEB
# BDswOTA3BggrBgEFBQcwAoYraHR0cDovL2NybC5zY2tjZW4uYmUvU0NLQ0VOJTIw
# Um9vdCUyMENBLmNydDANBgkqhkiG9w0BAQsFAAOCAgEAhsQ1eNAeFzKKGY9KW0VM
# GrLUbtccjHoeKlGdVn+yhS9xhSaIFgm00IPVO5zh9jKtgCA3o81TqY0w1WoRK1U8
# t89On5RZYVy39pDyu+oBlHgul9KOuJbIKLgh0VgEPvY3vM0h0bLdxIrnlIxchVxg
# s5y/h/wLKmXLjsg+AuYzsJ4+9GAD5SsdFGp2jiKPf9aw6zG67an2yTqtvPfeoRpk
# MWO+Mx39CWWwfU3MaQySlAx0/JzZcqWzk6QFgN1h89wSBHD0mMFdnahEth5y9QhP
# kLydPniibF5VZ59gbUVlpFFz8VddmBtx9xfe5aIYEjkj35HmEW/FN7qwnJP3dClj
# zFiqSueKqiFIN3punjHbMUoAxJnibx11Xz4pFm5mdk8v95r+sncH8SFK/P5nUjjE
# YIBRInZiovl7C8KfI1RD9lXJDPdw5yVfkCpkCr/rYNNMBHfDYZ+G1NEu9WzE2Nrk
# nC4H4qoNJLmMjVPTswcIT780iOvFZRf1ql+0e2TKUHCOkZ+plXtl3H6MimrNk6B/
# ZQAy4mETNH6ceaoudV7X5Y7HzbTwSXCSw6GCiQMdYXgsFp+lioorEmFZhVc2PTs+
# oUXbMi8IUaCyKEm6tMZHJ+PGU1YBE8Szyj5nI1SUhb+aHunRGlhgXPb4bnEdZVaM
# ruxFM0UbriGwmkOEv9cPVpAwgga0MIIEnKADAgECAhANx6xXBf8hmS5AQyIMOkmG
# MA0GCSqGSIb3DQEBCwUAMGIxCzAJBgNVBAYTAlVTMRUwEwYDVQQKEwxEaWdpQ2Vy
# dCBJbmMxGTAXBgNVBAsTEHd3dy5kaWdpY2VydC5jb20xITAfBgNVBAMTGERpZ2lD
# ZXJ0IFRydXN0ZWQgUm9vdCBHNDAeFw0yNTA1MDcwMDAwMDBaFw0zODAxMTQyMzU5
# NTlaMGkxCzAJBgNVBAYTAlVTMRcwFQYDVQQKEw5EaWdpQ2VydCwgSW5jLjFBMD8G
# A1UEAxM4RGlnaUNlcnQgVHJ1c3RlZCBHNCBUaW1lU3RhbXBpbmcgUlNBNDA5NiBT
# SEEyNTYgMjAyNSBDQTEwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQC0
# eDHTCphBcr48RsAcrHXbo0ZodLRRF51NrY0NlLWZloMsVO1DahGPNRcybEKq+Ruw
# OnPhof6pvF4uGjwjqNjfEvUi6wuim5bap+0lgloM2zX4kftn5B1IpYzTqpyFQ/4B
# t0mAxAHeHYNnQxqXmRinvuNgxVBdJkf77S2uPoCj7GH8BLuxBG5AvftBdsOECS1U
# kxBvMgEdgkFiDNYiOTx4OtiFcMSkqTtF2hfQz3zQSku2Ws3IfDReb6e3mmdglTca
# arps0wjUjsZvkgFkriK9tUKJm/s80FiocSk1VYLZlDwFt+cVFBURJg6zMUjZa/zb
# CclF83bRVFLeGkuAhHiGPMvSGmhgaTzVyhYn4p0+8y9oHRaQT/aofEnS5xLrfxnG
# pTXiUOeSLsJygoLPp66bkDX1ZlAeSpQl92QOMeRxykvq6gbylsXQskBBBnGy3tW/
# AMOMCZIVNSaz7BX8VtYGqLt9MmeOreGPRdtBx3yGOP+rx3rKWDEJlIqLXvJWnY0v
# 5ydPpOjL6s36czwzsucuoKs7Yk/ehb//Wx+5kMqIMRvUBDx6z1ev+7psNOdgJMoi
# wOrUG2ZdSoQbU2rMkpLiQ6bGRinZbI4OLu9BMIFm1UUl9VnePs6BaaeEWvjJSjNm
# 2qA+sdFUeEY0qVjPKOWug/G6X5uAiynM7Bu2ayBjUwIDAQABo4IBXTCCAVkwEgYD
# VR0TAQH/BAgwBgEB/wIBADAdBgNVHQ4EFgQU729TSunkBnx6yuKQVvYv1Ensy04w
# HwYDVR0jBBgwFoAU7NfjgtJxXWRM3y5nP+e6mK4cD08wDgYDVR0PAQH/BAQDAgGG
# MBMGA1UdJQQMMAoGCCsGAQUFBwMIMHcGCCsGAQUFBwEBBGswaTAkBggrBgEFBQcw
# AYYYaHR0cDovL29jc3AuZGlnaWNlcnQuY29tMEEGCCsGAQUFBzAChjVodHRwOi8v
# Y2FjZXJ0cy5kaWdpY2VydC5jb20vRGlnaUNlcnRUcnVzdGVkUm9vdEc0LmNydDBD
# BgNVHR8EPDA6MDigNqA0hjJodHRwOi8vY3JsMy5kaWdpY2VydC5jb20vRGlnaUNl
# cnRUcnVzdGVkUm9vdEc0LmNybDAgBgNVHSAEGTAXMAgGBmeBDAEEAjALBglghkgB
# hv1sBwEwDQYJKoZIhvcNAQELBQADggIBABfO+xaAHP4HPRF2cTC9vgvItTSmf83Q
# h8WIGjB/T8ObXAZz8OjuhUxjaaFdleMM0lBryPTQM2qEJPe36zwbSI/mS83afsl3
# YTj+IQhQE7jU/kXjjytJgnn0hvrV6hqWGd3rLAUt6vJy9lMDPjTLxLgXf9r5nWMQ
# wr8Myb9rEVKChHyfpzee5kH0F8HABBgr0UdqirZ7bowe9Vj2AIMD8liyrukZ2iA/
# wdG2th9y1IsA0QF8dTXqvcnTmpfeQh35k5zOCPmSNq1UH410ANVko43+Cdmu4y81
# hjajV/gxdEkMx1NKU4uHQcKfZxAvBAKqMVuqte69M9J6A47OvgRaPs+2ykgcGV00
# TYr2Lr3ty9qIijanrUR3anzEwlvzZiiyfTPjLbnFRsjsYg39OlV8cipDoq7+qNNj
# qFzeGxcytL5TTLL4ZaoBdqbhOhZ3ZRDUphPvSRmMThi0vw9vODRzW6AxnJll38F0
# cuJG7uEBYTptMSbhdhGQDpOXgpIUsWTjd6xpR6oaQf/DJbg3s6KCLPAlZ66RzIg9
# sC+NJpud/v4+7RWsWCiKi9EOLLHfMR2ZyJ/+xhCx9yHbxtl5TPau1j/1MIDpMPx0
# LckTetiSuEtQvLsNz3Qbp7wGWqbIiOWCnb5WqxL3/BAPvIXKUjPSxyZsq8WhbaM2
# tszWkPZPubdcMIIG7TCCBNWgAwIBAgIQCE/cM09+RU7bww+P+ZIYNTANBgkqhkiG
# 9w0BAQsFADBpMQswCQYDVQQGEwJVUzEXMBUGA1UEChMORGlnaUNlcnQsIEluYy4x
# QTA/BgNVBAMTOERpZ2lDZXJ0IFRydXN0ZWQgRzQgVGltZVN0YW1waW5nIFJTQTQw
# OTYgU0hBMjU2IDIwMjUgQ0ExMB4XDTI2MDgwNTAwMDAwMFoXDTM3MTEwNDIzNTk1
# OVowYzELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDkRpZ2lDZXJ0LCBJbmMuMTswOQYD
# VQQDEzJEaWdpQ2VydCBTSEEyNTYgUlNBNDA5NiBUaW1lc3RhbXAgUmVzcG9uZGVy
# IDIwMjYgMTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBALZ7pvLJ/s1K
# +NSbTGWz/TjGMPh8CQ6RucZCLv5anHzWJjF/NWJrFIhy24fcpKXlgRiky4WAawDf
# U3YP0BMxt9l3Dm5oCG5Z69AqEN1kgHg2epx+l+lZBcmJCcN0ASURML5uFIS80sZs
# DwO3BSkUxDjLJhBI+qiZP3aixAC/qEGLjsBNlLol9VZ7pfGEXiMlneJIC5/YKuiz
# VzNFKZZEeoy/0B8Zm+nzKBgSWG52lCO1w+nCg6XpCtklTJXeIg283hw7TmmsZXR+
# SMbjbrEOvZ3fP2VxIgeR28Y90ZStd3F9VuA5RVynb/whITPAo9b75Zr4Ta6Mj3UR
# m26QZYMn/FnbuTegcoRcFEZ9FOqM5T6MTdtr/n74lIT/ug0eeOzmZ6QTFg33otX+
# bFRsIolvykE1jive4PuESaT8zzVeFWDAMDtozNgLctkGD1ZjkEyZtJrLl5ya0m5d
# oH/ScpaZCZVl6pNUOCybMc/kxC6EAmSJY24L0yYKD1Nkddsnb/ItVKi/2nXpQNMu
# 1PT5prW83vV8d67WowuUs0HdY4H8AMLGvdL/WHEj3ZnqMqAQQP9u3Ai9t+5eQ02G
# Dwy0ODjdzi0xlp70W+ow63/0++YDEX1M0iwgUHwbrJvfpklkZQvw3+kv3vUPItdw
# roczk9icflf55W1zOEKAcJVAIXpcMCU9AgMBAAGjggGVMIIBkTAMBgNVHRMBAf8E
# AjAAMB0GA1UdDgQWBBQUyWOKMC7USvtulPPm40B+9ezN4jAfBgNVHSMEGDAWgBTv
# b1NK6eQGfHrK4pBW9i/USezLTjAOBgNVHQ8BAf8EBAMCB4AwFgYDVR0lAQH/BAww
# CgYIKwYBBQUHAwgwgZUGCCsGAQUFBwEBBIGIMIGFMCQGCCsGAQUFBzABhhhodHRw
# Oi8vb2NzcC5kaWdpY2VydC5jb20wXQYIKwYBBQUHMAKGUWh0dHA6Ly9jYWNlcnRz
# LmRpZ2ljZXJ0LmNvbS9EaWdpQ2VydFRydXN0ZWRHNFRpbWVTdGFtcGluZ1JTQTQw
# OTZTSEEyNTYyMDI1Q0ExLmNydDBfBgNVHR8EWDBWMFSgUqBQhk5odHRwOi8vY3Js
# My5kaWdpY2VydC5jb20vRGlnaUNlcnRUcnVzdGVkRzRUaW1lU3RhbXBpbmdSU0E0
# MDk2U0hBMjU2MjAyNUNBMS5jcmwwIAYDVR0gBBkwFzAIBgZngQwBBAIwCwYJYIZI
# AYb9bAcBMA0GCSqGSIb3DQEBCwUAA4ICAQCNxTphHp1SCt+ZrAmAfn0oQLFr0mLy
# wSLaDXQIENoyKqxrFbJblzCVP/pkXmwXOdrOpWygLzlT12os5ipDCy35RBCg2UMe
# ApEtrfGhz45F4Wt4WGdNdIbRWt3YTYJmpR+b7lr4d7Uwn+H600u4D7RnOGf8Wj4U
# NgAdZkfHhHv1mx9EVh71SJelcEN/oORSjXzdjfw1iZH9d8Nh/thn6hH23d+VsPAr
# 6GAYyzSA02nXD1nYLI7Ijmiv+xLCiYC41DSFYL3GhTiy0PxpawPtGRyaBVGzq+Ui
# TfM8pD7KVyF5aQyWP4KhVGUUTnmm/RlYJoW3TiXA/+t0YcT2oRVBm3JETjajHug2
# AL+v5jhtKVnd3D0rbHXEu27o+Q8p4sEWPMqKDB+qbceb6T/6WcwTwXmQ9lOCLLYc
# sQeSWmvKqzpAec9etE14jOQAzLKWdE3w/TCaKtLRaRT7LCkRYVnhA2D73FLje1O5
# b3HR5eHs0NzU/+xX7NbEdcofy0W3Wdwd1XOqtlpg/JgwtKfZM5dqO94lbUveOiJB
# I+xZEbGRsMNbXmMREUTgu+Oca7Y73MPWcslIx2VhkSKSXjDbD6rgg39H5Mh7Qfie
# AIjWagkJNt68Yfim6cjEzVSiLSeZfdkr5dtFPTW6jATlWJdYeeDRGCyatf8R1hSj
# zSvdN8yWQPT9gzGCBT4wggU6AgEBMGswZjELMAkGA1UEBhMCQkUxEjAQBgNVBAgT
# CUFudHdlcnBlbjEMMAoGA1UEBxMDTW9sMQ8wDQYDVQQKEwZTQ0tDRU4xDDAKBgNV
# BAsTA0lDVDEWMBQGA1UEAxMNU0NLQ0VOIElDVCBDQQIBHzANBglghkgBZQMEAgEF
# AKB8MBAGCisGAQQBgjcCAQwxAjAAMBkGCSqGSIb3DQEJAzEMBgorBgEEAYI3AgEE
# MBwGCisGAQQBgjcCAQsxDjAMBgorBgEEAYI3AgEVMC8GCSqGSIb3DQEJBDEiBCCl
# mrwTKKgvjMnIAKzMXQlTJK8RuXylWffCeVX16STr3zANBgkqhkiG9w0BAQEFAASC
# AQDf1FgiluL8PTM60fqp0XmKnHzrh37q0ieUW/WSYK7YFcGg6c4/s5OZHPlMhEiI
# TAot9djJw8hfajl+rxsBbK49Yper9ZOwIwdJtY3+l76JJXlpwZTcOpbXFUuPX/li
# Vx97q5x/UeXU7gJ4p4O+/rNPPkdtrw5inJO/kXJbPSWINpiSd9Vw8tP1brA9MZ3f
# 7wBmm252iSVtwrQDcSWjltfrTMuyR4trvwGSJ65dBk+h3FGqcbcYVWDX/sceyH3j
# WE8tsDmcN9NQu9voBwlImY9ZrbuaMjF6vltMOhTaIb+5Pv6zasq4VbEDMY+T/ek8
# 5jb/CkJjtTPz9998KCkTO9QWoYIDJjCCAyIGCSqGSIb3DQEJBjGCAxMwggMPAgEB
# MH0waTELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDkRpZ2lDZXJ0LCBJbmMuMUEwPwYD
# VQQDEzhEaWdpQ2VydCBUcnVzdGVkIEc0IFRpbWVTdGFtcGluZyBSU0E0MDk2IFNI
# QTI1NiAyMDI1IENBMQIQCE/cM09+RU7bww+P+ZIYNTANBglghkgBZQMEAgEFAKBp
# MBgGCSqGSIb3DQEJAzELBgkqhkiG9w0BBwEwHAYJKoZIhvcNAQkFMQ8XDTI2MTAw
# NTEyNTAyNVowLwYJKoZIhvcNAQkEMSIEIOQr5INcdzsB8BlB7IyqeNaPrnnkg9cr
# AKcQQOSuwGUmMA0GCSqGSIb3DQEBAQUABIICAHKMxaDy9m6EwyaB9KaqNtsHM5LW
# ft48DR7kkVifP3pFb8Ovu3pIyBTpQRyE5XPgXt7wibkizqDINNDio3gx5Tb2vXQw
# Q+x0cIb7HGr0AiNAn6cOn8zbj8jF+6TBGyzZtWkS5J3GqnqqdxjYpbdIg1cW/z+J
# PRfDTOoDbLR3vBv7Y0GHmK/6/Qlavv8+oUUpb5Z1j4Ten1awy7khG1S3jtn3R1e4
# mpQS6mVYnocgRrOcMdS9FLWFQb77gxsiMgJWmGnyC9+up+uEUa7c+C09iz6K6D9s
# Xcsvts0DEym6Cb6OwR1yiAZjAgKjkQRhCImGmRA4uZPM3QuKIc2MCPAOFDe4Q3SY
# dZD0lrXwNjwmFTbJwgEayZU0kO1mVMNOkDp1NkjnOYbEUkXctcqoAJnumWutQjJF
# mtMv+gP58FVKTxKwz5ABCkfnyXsEUgefmj3vLOHdCjWsfZpR9V4NsGcyD2CLikiE
# 5YbPc+5q2eAYTblgVh3dlUUGF5il6Q0tiQ0bazFGnseB12boDU4aiLmrj01OskwL
# EalyMaE0OZteeQWL7y2c9Wpdgot4IZICBCQ7Ts+y+jeew3vvEl6tso35MEIhD28T
# E6RozKGOJ0H18d4HYm9OKCWyeb5YGLE+cZrQu0vKX1EG6iHx4zsEuGA8UYrHvmB9
# jZbap9YXh/AhY8gu
# MIIlPAYJKoZIhvcNAQcCoIIlLTCCJSkCAQExCzAJBgUrDgMCGgUAMGkGCisGAQQB
# gjcCAQSgWzBZMDQGCisGAQQBgjcCAR4wJgIDAQAABBAfzDtgWUsITrck0sYpfvNR
# AgEAAgEAAgEAAgEAAgEAMCEwCQYFKw4DAhoFAAQU1L2UXczKE4y7wJgE9evMVuOj
# 62Sggh9wMIIFjTCCBHWgAwIBAgIQDpsYjvnQLefv21DiCEAYWjANBgkqhkiG9w0B
# AQwFADBlMQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYD
# VQQLExB3d3cuZGlnaWNlcnQuY29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVk
# IElEIFJvb3QgQ0EwHhcNMjIwODAxMDAwMDAwWhcNMzExMTA5MjM1OTU5WjBiMQsw
# CQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cu
# ZGlnaWNlcnQuY29tMSEwHwYDVQQDExhEaWdpQ2VydCBUcnVzdGVkIFJvb3QgRzQw
# ggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQC/5pBzaN675F1KPDAiMGkz
# 7MKnJS7JIT3yithZwuEppz1Yq3aaza57G4QNxDAf8xukOBbrVsaXbR2rsnnyyhHS
# 5F/WBTxSD1Ifxp4VpX6+n6lXFllVcq9ok3DCsrp1mWpzMpTREEQQLt+C8weE5nQ7
# bXHiLQwb7iDVySAdYyktzuxeTsiT+CFhmzTrBcZe7FsavOvJz82sNEBfsXpm7nfI
# SKhmV1efVFiODCu3T6cw2Vbuyntd463JT17lNecxy9qTXtyOj4DatpGYQJB5w3jH
# trHEtWoYOAMQjdjUN6QuBX2I9YI+EJFwq1WCQTLX2wRzKm6RAXwhTNS8rhsDdV14
# Ztk6MUSaM0C/CNdaSaTC5qmgZ92kJ7yhTzm1EVgX9yRcRo9k98FpiHaYdj1ZXUJ2
# h4mXaXpI8OCiEhtmmnTK3kse5w5jrubU75KSOp493ADkRSWJtppEGSt+wJS00mFt
# 6zPZxd9LBADMfRyVw4/3IbKyEbe7f/LVjHAsQWCqsWMYRJUadmJ+9oCw++hkpjPR
# iQfhvbfmQ6QYuKZ3AeEPlAwhHbJUKSWJbOUOUlFHdL4mrLZBdd56rF+NP8m800ER
# ElvlEFDrMcXKchYiCd98THU/Y+whX8QgUWtvsauGi0/C1kVfnSD8oR7FwI+isX4K
# Jpn15GkvmB0t9dmpsh3lGwIDAQABo4IBOjCCATYwDwYDVR0TAQH/BAUwAwEB/zAd
# BgNVHQ4EFgQU7NfjgtJxXWRM3y5nP+e6mK4cD08wHwYDVR0jBBgwFoAUReuir/SS
# y4IxLVGLp6chnfNtyA8wDgYDVR0PAQH/BAQDAgGGMHkGCCsGAQUFBwEBBG0wazAk
# BggrBgEFBQcwAYYYaHR0cDovL29jc3AuZGlnaWNlcnQuY29tMEMGCCsGAQUFBzAC
# hjdodHRwOi8vY2FjZXJ0cy5kaWdpY2VydC5jb20vRGlnaUNlcnRBc3N1cmVkSURS
# b290Q0EuY3J0MEUGA1UdHwQ+MDwwOqA4oDaGNGh0dHA6Ly9jcmwzLmRpZ2ljZXJ0
# LmNvbS9EaWdpQ2VydEFzc3VyZWRJRFJvb3RDQS5jcmwwEQYDVR0gBAowCDAGBgRV
# HSAAMA0GCSqGSIb3DQEBDAUAA4IBAQBwoL9DXFXnOF+go3QbPbYW1/e/Vwe9mqyh
# hyzshV6pGrsi+IcaaVQi7aSId229GhT0E0p6Ly23OO/0/4C5+KH38nLeJLxSA8hO
# 0Cre+i1Wz/n096wwepqLsl7Uz9FDRJtDIeuWcqFItJnLnU+nBgMTdydE1Od/6Fmo
# 8L8vC6bp8jQ87PcDx4eo0kxAGTVGamlUsLihVo7spNU96LHc/RzY9HdaXFSMb++h
# UD38dglohJ9vytsgjTVgHAIDyyCwrFigDkBjxZgiwbJZ9VVrzyerbHbObyMt9H5x
# aiNrIv8SuFQtJ37YOtnwtoeW/VvRXKwYw02fc7cBqZ9Xql4o4rmUMIIFvDCCA6Sg
# AwIBAgIBHzANBgkqhkiG9w0BAQsFADBmMQswCQYDVQQGEwJCRTESMBAGA1UECBMJ
# QW50d2VycGVuMQwwCgYDVQQHEwNNb2wxDzANBgNVBAoTBlNDS0NFTjEMMAoGA1UE
# CxMDSUNUMRYwFAYDVQQDEw1TQ0tDRU4gSUNUIENBMB4XDTE4MDUyNDA2MTEwMFoX
# DTMwMDYwMTEyMDAwMFowTzEhMB8GA1UEAxMYVmFuZGVuYnJvdWNrZSBMdWMgQ1My
# MDIxMSowKAYJKoZIhvcNAQkBFhtsdWMudmFuZGVuYnJvdWNrZUBzY2tjZW4uYmUw
# ggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQD0WzD0gHTLFEbOjPUwobl2
# VntS0kJVV2FRzxkZZ0Hhe9fbYB0tRK5+9GltD7rwhApM1E2xh8N6Pmxfr49VGVsP
# NqDhGRmp5wKE8htQiMXTjHPOTHZsvim/vvSL8WuouGoX6TQxxNBefE6Jmjcg2NHb
# UVAxDGcPwNADJBZnYPQTp6q2HniwdDv/OmZM1JJUYn4v1mt7YtS1eFO30ekuGzJu
# 3WQYeOiFNht/6AXZTWALQtwzaJfm563AbxfnHBsBuZFcRGYPE7aRDI9NIZyPqzT4
# yOAK+phPN1ympNV+f8XXWaacfZXSWolbo8jqstHDjYYjf77Fj3WVN+y0GxtTsnRl
# AgMBAAGjggGKMIIBhjAJBgNVHRMEAjAAMB0GA1UdDgQWBBTftWyIS4unlpS288p5
# Xofe0LiBZTAfBgNVHSMEGDAWgBTwKRT1aiEUklZUE6Q91a3wITrFeDALBgNVHQ8E
# BAMCB4AwHwYDVR0lBBgwFgYIKwYBBQUHAwMGCisGAQQBgjcCARUwOgYDVR0RBDMw
# MYEbbHVjLnZhbmRlbmJyb3Vja2VAc2NrY2VuLmJlgRJsdmFuZGVuYkBzY2tjZW4u
# YmUwNQYDVR0SBC4wLIYqaHR0cDovL2NybC5zY2tjZW4uYmUvU0NLQ0VOJTIwSUNU
# JTIwQ0EuY3J0MDsGA1UdHwQ0MDIwMKAuoCyGKmh0dHA6Ly9jcmwuc2NrY2VuLmJl
# L1NDS0NFTiUyMElDVCUyMENBLmNybDA+BgkrBgEEAYI3FQcEMTAvBicrBgEEAYI3
# FQiEjLwhgsj9d4KhkyKEl5RGhMaSLoEBgtSEIYH6yGkCAWQCAQgwGwYJKwYBBAGC
# NxUKBA4wDDAKBggrBgEFBQcDAzANBgkqhkiG9w0BAQsFAAOCAgEARh/O37vbDW3A
# j1UAnSfYz+I0+fVk2ZurOQarjtdFC/Yu1ABJnXdMnwh1t5sjVIoEejvjnOlmu+B2
# 1IQJPpxIph8cz+SnDZyhOpcKrCDn+PSeRvth0Zk4FvbXsLK9/WYgdzRObNOHxxAN
# COOc7PMLIMqeDJa+b9wH82Ae4MYdB8XZvoqJ+z172yoQMiNxe6UE2GropZiwJB56
# Fw+k/jrKdOMEfZtfhzRqizCmMlTknbtFJ5hrqhwcaTA+4QCfCwouckererOATQnM
# 8Ic1KaOmYK7S5igmnA5mekiTKrBhcGp/xsZy0r8OUKVV1FSYnQ3035THia31oQzh
# Le48faEFkNuPbs8ZaiTFXwbdWGQ6uIK++soyulWOxeueNBAqIOGrj7XuDaIk+VD3
# RN0B0g//Nv3HS6FboRC0eKeG3yezzjU+8fImcyPAaAEofUiiQYdOpnJsiaLDpHO+
# 1r98pKmpe0fvy0IvYHicJLuk4tFyMvVBRgW1A+JtfHuXCnag88iB8AJ3tCUdGRCC
# z8yE1r4hbklyqhj9G5EmxoKZfi7mgh3CgL/tRUAXNqFltMj3cQlGKcKPUH004dKm
# FwAUAG4mzsO1Sk50S7EvdpvaW+sJ/bWMjXzLuq+xFwrsSTQ22KSm8XmnX2NGqws5
# Tk+pqQupcwan4CsjflVqMva5nc4YxI4wggZyMIIEWqADAgECAhM4AAAAAm7pDq12
# AeXXAAAAAAACMA0GCSqGSIb3DQEBCwUAMGcxCzAJBgNVBAYTAkJFMRIwEAYDVQQI
# EwlBbnR3ZXJwZW4xDDAKBgNVBAcTA01vbDEPMA0GA1UEChMGU0NLQ0VOMQwwCgYD
# VQQLEwNJQ1QxFzAVBgNVBAMTDlNDS0NFTiBSb290IENBMB4XDTE3MDYyMzExMzkz
# NFoXDTMyMDYyMzExNDkzNFowZjELMAkGA1UEBhMCQkUxEjAQBgNVBAgTCUFudHdl
# cnBlbjEMMAoGA1UEBxMDTW9sMQ8wDQYDVQQKEwZTQ0tDRU4xDDAKBgNVBAsTA0lD
# VDEWMBQGA1UEAxMNU0NLQ0VOIElDVCBDQTCCAiIwDQYJKoZIhvcNAQEBBQADggIP
# ADCCAgoCggIBALFtbifIAikMI3YQIa+niSTV8PsH34uadkQePLs02kIdmPPT/u+T
# RYZO6njltLVcGnMWJLmzL4DamrAPUbJcpkRLMS35aDAonUT0kI/KNChNnHy2KI2K
# 3tUwoRcXND2aG4m2ewU7FNr++RkI57BBDJsc8CSwI0lNphVSiSo6yrOF7f6uo98N
# H3a0c9G2vM0jG0xztivAndUatxkAyz8rYScg8c6OmERO0xThXFxqyKRV75stVz3P
# yLYh8E6HDpkNZrBfuOltIH1rWxS7fGwvwp7hNmUD5wJqat5TlLvHDqv9nqoYoQHg
# JYuTHGHqWivqq9SbSzX4E0pJBRcNu3OXD18BQghNK8iXTfqjeF3ZNydos9IWshCe
# LBmopnSU17/zk5kscShjJz2FfgU75PzwyZxo1kKjq8n9D1oJsFUNSgKMGj4wQFyT
# hKLczZ81tPxSrb4CWC5N8RbN7CSehBug9NsAdkTbMzRjOurcqqsf2d+udccM4JGG
# EdRE3ZnXXKi+v92vh4n0uSvfTfqu61/0ad9QFJTbG+d8YYeNzVlAIOU862/SeeJg
# UemfzGn5k1R3CtpyukUWGlH8bP1rhNvjs1+zHRv1EYtZVbjru4aewCp0o3C5znAR
# u5ZEitUNaQrgAmDJLwpfu5HoqN++mpFH7pl9x6hFYCvLbWYkYIlR0e0NAgMBAAGj
# ggEWMIIBEjAQBgkrBgEEAYI3FQEEAwIBADAdBgNVHQ4EFgQU8CkU9WohFJJWVBOk
# PdWt8CE6xXgwGQYJKwYBBAGCNxQCBAweCgBTAHUAYgBDAEEwCwYDVR0PBAQDAgGG
# MA8GA1UdEwEB/wQFMAMBAf8wHwYDVR0jBBgwFoAUUr8bKrgoIFExryOnviOUxtH5
# FDAwPAYDVR0fBDUwMzAxoC+gLYYraHR0cDovL2NybC5zY2tjZW4uYmUvU0NLQ0VO
# JTIwUm9vdCUyMENBLmNybDBHBggrBgEFBQcBAQQ7MDkwNwYIKwYBBQUHMAKGK2h0
# dHA6Ly9jcmwuc2NrY2VuLmJlL1NDS0NFTiUyMFJvb3QlMjBDQS5jcnQwDQYJKoZI
# hvcNAQELBQADggIBAIbENXjQHhcyihmPSltFTBqy1G7XHIx6HipRnVZ/soUvcYUm
# iBYJtNCD1Tuc4fYyrYAgN6PNU6mNMNVqEStVPLfPTp+UWWFct/aQ8rvqAZR4LpfS
# jriWyCi4IdFYBD72N7zNIdGy3cSK55SMXIVcYLOcv4f8Cyply47IPgLmM7CePvRg
# A+UrHRRqdo4ij3/WsOsxuu2p9sk6rbz33qEaZDFjvjMd/QllsH1NzGkMkpQMdPyc
# 2XKls5OkBYDdYfPcEgRw9JjBXZ2oRLYecvUIT5C8nT54omxeVWefYG1FZaRRc/FX
# XZgbcfcX3uWiGBI5I9+R5hFvxTe6sJyT93QpY8xYqkrniqohSDd6bp4x2zFKAMSZ
# 4m8ddV8+KRZuZnZPL/ea/rJ3B/EhSvz+Z1I4xGCAUSJ2YqL5ewvCnyNUQ/ZVyQz3
# cOclX5AqZAq/62DTTAR3w2GfhtTRLvVsxNja5JwuB+KqDSS5jI1T07MHCE+/NIjr
# xWUX9apftHtkylBwjpGfqZV7Zdx+jIpqzZOgf2UAMuJhEzR+nHmqLnVe1+WOx820
# 8ElwksOhgokDHWF4LBafpYqKKxJhWYVXNj07PqFF2zIvCFGgsihJurTGRyfjxlNW
# ARPEs8o+ZyNUlIW/mh7p0RpYYFz2+G5xHWVWjK7sRTNFG64hsJpDhL/XD1aQMIIG
# tDCCBJygAwIBAgIQDcesVwX/IZkuQEMiDDpJhjANBgkqhkiG9w0BAQsFADBiMQsw
# CQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cu
# ZGlnaWNlcnQuY29tMSEwHwYDVQQDExhEaWdpQ2VydCBUcnVzdGVkIFJvb3QgRzQw
# HhcNMjUwNTA3MDAwMDAwWhcNMzgwMTE0MjM1OTU5WjBpMQswCQYDVQQGEwJVUzEX
# MBUGA1UEChMORGlnaUNlcnQsIEluYy4xQTA/BgNVBAMTOERpZ2lDZXJ0IFRydXN0
# ZWQgRzQgVGltZVN0YW1waW5nIFJTQTQwOTYgU0hBMjU2IDIwMjUgQ0ExMIICIjAN
# BgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAtHgx0wqYQXK+PEbAHKx126NGaHS0
# URedTa2NDZS1mZaDLFTtQ2oRjzUXMmxCqvkbsDpz4aH+qbxeLho8I6jY3xL1IusL
# opuW2qftJYJaDNs1+JH7Z+QdSKWM06qchUP+AbdJgMQB3h2DZ0Mal5kYp77jYMVQ
# XSZH++0trj6Ao+xh/AS7sQRuQL37QXbDhAktVJMQbzIBHYJBYgzWIjk8eDrYhXDE
# pKk7RdoX0M980EpLtlrNyHw0Xm+nt5pnYJU3Gmq6bNMI1I7Gb5IBZK4ivbVCiZv7
# PNBYqHEpNVWC2ZQ8BbfnFRQVESYOszFI2Wv82wnJRfN20VRS3hpLgIR4hjzL0hpo
# YGk81coWJ+KdPvMvaB0WkE/2qHxJ0ucS638ZxqU14lDnki7CcoKCz6eum5A19WZQ
# HkqUJfdkDjHkccpL6uoG8pbF0LJAQQZxst7VvwDDjAmSFTUms+wV/FbWBqi7fTJn
# jq3hj0XbQcd8hjj/q8d6ylgxCZSKi17yVp2NL+cnT6Toy+rN+nM8M7LnLqCrO2JP
# 3oW//1sfuZDKiDEb1AQ8es9Xr/u6bDTnYCTKIsDq1BtmXUqEG1NqzJKS4kOmxkYp
# 2WyODi7vQTCBZtVFJfVZ3j7OgWmnhFr4yUozZtqgPrHRVHhGNKlYzyjlroPxul+b
# gIspzOwbtmsgY1MCAwEAAaOCAV0wggFZMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYD
# VR0OBBYEFO9vU0rp5AZ8esrikFb2L9RJ7MtOMB8GA1UdIwQYMBaAFOzX44LScV1k
# TN8uZz/nupiuHA9PMA4GA1UdDwEB/wQEAwIBhjATBgNVHSUEDDAKBggrBgEFBQcD
# CDB3BggrBgEFBQcBAQRrMGkwJAYIKwYBBQUHMAGGGGh0dHA6Ly9vY3NwLmRpZ2lj
# ZXJ0LmNvbTBBBggrBgEFBQcwAoY1aHR0cDovL2NhY2VydHMuZGlnaWNlcnQuY29t
# L0RpZ2lDZXJ0VHJ1c3RlZFJvb3RHNC5jcnQwQwYDVR0fBDwwOjA4oDagNIYyaHR0
# cDovL2NybDMuZGlnaWNlcnQuY29tL0RpZ2lDZXJ0VHJ1c3RlZFJvb3RHNC5jcmww
# IAYDVR0gBBkwFzAIBgZngQwBBAIwCwYJYIZIAYb9bAcBMA0GCSqGSIb3DQEBCwUA
# A4ICAQAXzvsWgBz+Bz0RdnEwvb4LyLU0pn/N0IfFiBowf0/Dm1wGc/Do7oVMY2mh
# XZXjDNJQa8j00DNqhCT3t+s8G0iP5kvN2n7Jd2E4/iEIUBO41P5F448rSYJ59Ib6
# 1eoalhnd6ywFLerycvZTAz40y8S4F3/a+Z1jEMK/DMm/axFSgoR8n6c3nuZB9BfB
# wAQYK9FHaoq2e26MHvVY9gCDA/JYsq7pGdogP8HRtrYfctSLANEBfHU16r3J05qX
# 3kId+ZOczgj5kjatVB+NdADVZKON/gnZruMvNYY2o1f4MXRJDMdTSlOLh0HCn2cQ
# LwQCqjFbqrXuvTPSegOOzr4EWj7PtspIHBldNE2K9i697cvaiIo2p61Ed2p8xMJb
# 82Yosn0z4y25xUbI7GIN/TpVfHIqQ6Ku/qjTY6hc3hsXMrS+U0yy+GWqAXam4ToW
# d2UQ1KYT70kZjE4YtL8Pbzg0c1ugMZyZZd/BdHLiRu7hAWE6bTEm4XYRkA6Tl4KS
# FLFk43esaUeqGkH/wyW4N7OigizwJWeukcyIPbAvjSabnf7+Pu0VrFgoiovRDiyx
# 3zEdmcif/sYQsfch28bZeUz2rtY/9TCA6TD8dC3JE3rYkrhLULy7Dc90G6e8Blqm
# yIjlgp2+VqsS9/wQD7yFylIz0scmbKvFoW2jNrbM1pD2T7m3XDCCBu0wggTVoAMC
# AQICEAhP3DNPfkVO28MPj/mSGDUwDQYJKoZIhvcNAQELBQAwaTELMAkGA1UEBhMC
# VVMxFzAVBgNVBAoTDkRpZ2lDZXJ0LCBJbmMuMUEwPwYDVQQDEzhEaWdpQ2VydCBU
# cnVzdGVkIEc0IFRpbWVTdGFtcGluZyBSU0E0MDk2IFNIQTI1NiAyMDI1IENBMTAe
# Fw0yNjA4MDUwMDAwMDBaFw0zNzExMDQyMzU5NTlaMGMxCzAJBgNVBAYTAlVTMRcw
# FQYDVQQKEw5EaWdpQ2VydCwgSW5jLjE7MDkGA1UEAxMyRGlnaUNlcnQgU0hBMjU2
# IFJTQTQwOTYgVGltZXN0YW1wIFJlc3BvbmRlciAyMDI2IDEwggIiMA0GCSqGSIb3
# DQEBAQUAA4ICDwAwggIKAoICAQC2e6byyf7NSvjUm0xls/04xjD4fAkOkbnGQi7+
# Wpx81iYxfzViaxSIctuH3KSl5YEYpMuFgGsA31N2D9ATMbfZdw5uaAhuWevQKhDd
# ZIB4NnqcfpfpWQXJiQnDdAElETC+bhSEvNLGbA8DtwUpFMQ4yyYQSPqomT92osQA
# v6hBi47ATZS6JfVWe6XxhF4jJZ3iSAuf2Cros1czRSmWRHqMv9AfGZvp8ygYElhu
# dpQjtcPpwoOl6QrZJUyV3iINvN4cO05prGV0fkjG426xDr2d3z9lcSIHkdvGPdGU
# rXdxfVbgOUVcp2/8ISEzwKPW++Wa+E2ujI91EZtukGWDJ/xZ27k3oHKEXBRGfRTq
# jOU+jE3ba/5++JSE/7oNHnjs5mekExYN96LV/mxUbCKJb8pBNY4r3uD7hEmk/M81
# XhVgwDA7aMzYC3LZBg9WY5BMmbSay5ecmtJuXaB/0nKWmQmVZeqTVDgsmzHP5MQu
# hAJkiWNuC9MmCg9TZHXbJ2/yLVSov9p16UDTLtT0+aa1vN71fHeu1qMLlLNB3WOB
# /ADCxr3S/1hxI92Z6jKgEED/btwIvbfuXkNNhg8MtDg43c4tMZae9FvqMOt/9Pvm
# AxF9TNIsIFB8G6yb36ZJZGUL8N/pL971DyLXcK6HM5PYnH5X+eVtczhCgHCVQCF6
# XDAlPQIDAQABo4IBlTCCAZEwDAYDVR0TAQH/BAIwADAdBgNVHQ4EFgQUFMljijAu
# 1Er7bpTz5uNAfvXszeIwHwYDVR0jBBgwFoAU729TSunkBnx6yuKQVvYv1Ensy04w
# DgYDVR0PAQH/BAQDAgeAMBYGA1UdJQEB/wQMMAoGCCsGAQUFBwMIMIGVBggrBgEF
# BQcBAQSBiDCBhTAkBggrBgEFBQcwAYYYaHR0cDovL29jc3AuZGlnaWNlcnQuY29t
# MF0GCCsGAQUFBzAChlFodHRwOi8vY2FjZXJ0cy5kaWdpY2VydC5jb20vRGlnaUNl
# cnRUcnVzdGVkRzRUaW1lU3RhbXBpbmdSU0E0MDk2U0hBMjU2MjAyNUNBMS5jcnQw
# XwYDVR0fBFgwVjBUoFKgUIZOaHR0cDovL2NybDMuZGlnaWNlcnQuY29tL0RpZ2lD
# ZXJ0VHJ1c3RlZEc0VGltZVN0YW1waW5nUlNBNDA5NlNIQTI1NjIwMjVDQTEuY3Js
# MCAGA1UdIAQZMBcwCAYGZ4EMAQQCMAsGCWCGSAGG/WwHATANBgkqhkiG9w0BAQsF
# AAOCAgEAjcU6YR6dUgrfmawJgH59KECxa9Ji8sEi2g10CBDaMiqsaxWyW5cwlT/6
# ZF5sFznazqVsoC85U9dqLOYqQwst+UQQoNlDHgKRLa3xoc+OReFreFhnTXSG0Vrd
# 2E2CZqUfm+5a+He1MJ/h+tNLuA+0Zzhn/Fo+FDYAHWZHx4R79ZsfRFYe9UiXpXBD
# f6DkUo183Y38NYmR/XfDYf7YZ+oR9t3flbDwK+hgGMs0gNNp1w9Z2CyOyI5or/sS
# womAuNQ0hWC9xoU4stD8aWsD7RkcmgVRs6vlIk3zPKQ+ylcheWkMlj+CoVRlFE55
# pv0ZWCaFt04lwP/rdGHE9qEVQZtyRE42ox7oNgC/r+Y4bSlZ3dw9K2x1xLtu6PkP
# KeLBFjzKigwfqm3Hm+k/+lnME8F5kPZTgiy2HLEHklpryqs6QHnPXrRNeIzkAMyy
# lnRN8P0wmirS0WkU+ywpEWFZ4QNg+9xS43tTuW9x0eXh7NDc1P/sV+zWxHXKH8tF
# t1ncHdVzqrZaYPyYMLSn2TOXajveJW1L3joiQSPsWRGxkbDDW15jERFE4LvjnGu2
# O9zD1nLJSMdlYZEikl4w2w+q4IN/R+TIe0H4ngCI1moJCTbevGH4punIxM1Uoi0n
# mX3ZK+XbRT01uowE5ViXWHng0RgsmrX/EdYUo80r3TfMlkD0/YMxggU2MIIFMgIB
# ATBrMGYxCzAJBgNVBAYTAkJFMRIwEAYDVQQIEwlBbnR3ZXJwZW4xDDAKBgNVBAcT
# A01vbDEPMA0GA1UEChMGU0NLQ0VOMQwwCgYDVQQLEwNJQ1QxFjAUBgNVBAMTDVND
# S0NFTiBJQ1QgQ0ECAR8wCQYFKw4DAhoFAKB4MBgGCisGAQQBgjcCAQwxCjAIoAKA
# AKECgAAwGQYJKoZIhvcNAQkDMQwGCisGAQQBgjcCAQQwHAYKKwYBBAGCNwIBCzEO
# MAwGCisGAQQBgjcCARUwIwYJKoZIhvcNAQkEMRYEFBNKsddxdX/BstQUtr5vzdtK
# JeaOMA0GCSqGSIb3DQEBAQUABIIBAKsDI/sFbCznU8VzvPh3Y9WAsmBZBYxovnAR
# rYrchSwvUoYgCg7UwjFveTfUyF0ijB2MU+28jblHXwK5XT2QuEJiaPGr+NLIt6o5
# 0eY46ySRCDO41kJ56mDJ5DU8bFeju+rGPf8ShcOSca9tiUgpNObfz4W/vdgMwfnJ
# tnFir6nLvkPvz6NdGf2mpgEmiP5WsQSNnJrP0apqHFsfXYVC7leJl29n7NW1mWyX
# rhKzYwA9fWx35IY5YheXxim3Z3gi97FL+4SLBm7z96sPiUHk5wtzAk3zR3nGNHgS
# E/oSxSH72x7vQz5O2EGoNHANy9eUinriHhHynB+Nj6qudf7kWj2hggMmMIIDIgYJ
# KoZIhvcNAQkGMYIDEzCCAw8CAQEwfTBpMQswCQYDVQQGEwJVUzEXMBUGA1UEChMO
# RGlnaUNlcnQsIEluYy4xQTA/BgNVBAMTOERpZ2lDZXJ0IFRydXN0ZWQgRzQgVGlt
# ZVN0YW1waW5nIFJTQTQwOTYgU0hBMjU2IDIwMjUgQ0ExAhAIT9wzT35FTtvDD4/5
# khg1MA0GCWCGSAFlAwQCAQUAoGkwGAYJKoZIhvcNAQkDMQsGCSqGSIb3DQEHATAc
# BgkqhkiG9w0BCQUxDxcNMjYxMDA2MTMxMTI1WjAvBgkqhkiG9w0BCQQxIgQgQA4W
# TudUMSj26GjEde0OogQcz3Ps/urK0907DDBq6wMwDQYJKoZIhvcNAQEBBQAEggIA
# K9v7nGNsRBE5NJwRnHswCUnAEXVXbtWCIs4TzAot43kJX3/UUQM0eIpUn4oGXwSR
# ImkFPyhsoCybafcqACdQIv1x7FziV2wYv7muS/mhBUTmaVV2vT4/wd1OMK85Midb
# QkNZJxcEoQB7CkmNy/mdCQ0xa98mvrvoZ9rCDj22bpqQBWufXbosnrfncwY0njsw
# awl1/C6OOe9wfX4dYzXVrasyjQLwcyEAQNsHIKu9DMtibTXJP54TBnsP7Wvs2n1M
# B4uSO461LP9ivU90DWkqO827t4jC8UzZh16lrv84H6qzZJFtozyTBzQz18tCG9Ef
# cGPHY5Gyeo795ahsXUyxa9l3V5kgYRh8FmSWd1o25UI6iYgxvPVecwZ+SNu97JhL
# iwZ0tzM2LLgfNL0VbQfnfkDhCaa8CnbQeCs8lQ97x/OFHBRZ3KKPCmHRfouHd3dh
# 98qdH0GKWojsZkq58nbHzSiCZXIPwqtrZwXHPF1NhJVWNkGsr1uNt7RfY375lJV0
# mqydeNKbxsMfAxwdSfMTC3ufUDDT56W3L9SDD2L5ql/BW4UDTWDWU5gef/Wzi6ji
# 92sBuQXuOAYObDXbbhWiGUYXBA/WP+ek4Ki57FiuD483yLMz6wkt/iekyM4E6RUe
# SjPySxM39nbq0XMW79fC50c0cYz9EeBAkklyVZ9Zp5I=
# SIG # End signature block

View file

@ -331,17 +331,17 @@ exit
# RGlnaUNlcnQsIEluYy4xQTA/BgNVBAMTOERpZ2lDZXJ0IFRydXN0ZWQgRzQgVGlt
# ZVN0YW1waW5nIFJTQTQwOTYgU0hBMjU2IDIwMjUgQ0ExAhAIT9wzT35FTtvDD4/5
# khg1MA0GCWCGSAFlAwQCAQUAoGkwGAYJKoZIhvcNAQkDMQsGCSqGSIb3DQEHATAc
# BgkqhkiG9w0BCQUxDxcNMjYxMDA1MTIzNDQ2WjAvBgkqhkiG9w0BCQQxIgQgAN9v
# BgkqhkiG9w0BCQUxDxcNMjYxMDA2MTMxMTI2WjAvBgkqhkiG9w0BCQQxIgQgAN9v
# kOJtz07EFlsqOf+NilmfH65NiagnciBjzDO0bX8wDQYJKoZIhvcNAQEBBQAEggIA
# V3WaA6lteBvhLiHdtAM16b7EGcJ+UrkTfKlNsgs1aE7TC1yvJKtkzRRSqBhNtSmZ
# AsFCGeFgzTwsZ1sglvctT36s5Izxo7Q0+BhahKELQwnL+hkbczUAufu4HSOT/eVT
# 9E577D4CO+SW3CJFd5VGPe/s/wO3PM/pcTpdOlZUhTwabfDTjdXfzjIdumdhI3Yu
# aMVyz5wjq4f4ePYqEXeLMTfXbMHSsSPnasE7toDqGQtr/tc4I+Wn42nN6kj6HcoO
# 2CkLugqB4v37nLNgX7iOLrL3RXHnkgC9NXComJFBS10G4tR6JS+5MZfD+W6S7pBp
# FJgJX+9qP3nLQaLzrHrJnaSl0t2MhNDdXKJOzmUwI1pcVQ8FS0rYwvKEp+s4vecg
# 9OxjhTkx1Bfn4Yy0/DehCx2Lwnp9YA8VX8+5F/pnZn27sVqrNuLFJR6UOmpCXIMT
# Sw7AcR7lbVDYlLlh7aIhvKzSs3tSA233L+kB1g2/lUrgCiBR2J7qHvc2/FQLjFDz
# WYzgqbIfM6HihVrMlhmY7nUevA95xAiTpyI0StsaLFUZOcGtQvIOJSfQDXm1POuz
# GVMIPaJPqrSfgT05hpCSvYvmTFQPsjiwC2dBe7DuS6IHNFZ+IMWoTwhRGH0IdYD5
# L9MhPPi+rANPwFEVrpelisBbXbVavoA/6Ij0xur4unA=
# HXEGk3Vt9FhxTrMrpHxuPdDjXi61HB8Ko6jAQ4LOwifl+B4jNkKsn3RAITA1GGyh
# qHk8Fp2k8HA3B997botAb1kNvaCg157DMFc/d9XKMbf9hXeNBA/VcydfRWmUghzR
# mDbrP8AmOs+dAi0ZXwdFKeeZ6RW4E8Y6m8mQRU6iFC7Ku42lPRoDnUmXcj8r0guU
# RMHGbFAblKjNZaduJ5OXnPSDdJe5lSwMQV2R0ctk7smZ9nmVHoJ4udjb9VjswVW8
# jvo3GlYYPz8kjWK4c1NnYRqAPuDKgGj1JNy57b3GRdFTcGcbiGd3RHgfp5cspEdA
# 7PgPrRvDOpIhpk2X+JXjbGzeLtezCdaoxPyAyputegDuIkggJe6CUJUcVeLorQbS
# ce1d7MbV1PDlfU8ZD6DdbjrWu876+DQEV0H2Re3TIpQpIkrzvRzYBaOefoJhRVp3
# BXvtQsqiAGcNevGU9Yoklw7W5DDDVnRWqlr2W9wAB+BZrjCjU9l+rusXsOxromNa
# Gd9LvEgqMZ5pFY9isKgm0xioxzDMuJruyj1bBVpc4CwXJP8Rw/WRwgiKUR2jAerx
# PxyROqCQKr16b1bq45S/WbM9rujHflLl3FaW6JzdDIvyBQ/c5Hn9ioMLrhtQGMJU
# ZhiHDHwEqgkivmH4fMMWTPv59jzFon85C+3KUqWkSyA=
# SIG # End signature block

View file

@ -193,17 +193,17 @@ exit
# RGlnaUNlcnQsIEluYy4xQTA/BgNVBAMTOERpZ2lDZXJ0IFRydXN0ZWQgRzQgVGlt
# ZVN0YW1waW5nIFJTQTQwOTYgU0hBMjU2IDIwMjUgQ0ExAhAIT9wzT35FTtvDD4/5
# khg1MA0GCWCGSAFlAwQCAQUAoGkwGAYJKoZIhvcNAQkDMQsGCSqGSIb3DQEHATAc
# BgkqhkiG9w0BCQUxDxcNMjYxMDA1MTIzNDQ2WjAvBgkqhkiG9w0BCQQxIgQg6Tgk
# BgkqhkiG9w0BCQUxDxcNMjYxMDA2MTMxMTI2WjAvBgkqhkiG9w0BCQQxIgQg6Tgk
# d9vgRJTrKaa/aNqr0ugqtMxl17/Df7q35ywcJSEwDQYJKoZIhvcNAQEBBQAEggIA
# A0vXtndyAm7a730TRKVvcoReg7L1k05BCkvXbrncV3yHkbleg3Ocw+DENRTqFfmL
# ri+W2ikdXEGGgnsNcmiEWWJWQ/X5qmX+spNAmy46HmO5Z6BuX1Vzgc3Th8TSEQIf
# o7YDn+Fngzn279ZLVV7m91R5ZbssXyzkVUXoNK4nmcUug8yKhp38NNMZloA/Z40i
# we84BPngPXAcmn/8gSp4dIS28T9bNoQXvxSMRkvmfpaXXFZgJ6K4xNwAcX8M1T65
# waPKydgNssfpA9AZVysprcUJs51xwNQUJYNC3W6B1JnE0fuqqlJLIWpsNP6lAJVM
# 8D07zQT2ElLTazgiHZ9FSrM/vOIgvYwcoKZzkbQ4/8MBa9zlHmhaAPGf1lta7HGR
# I3JGQNQE0HIpva3xgH9CuAwWrCX/YHyN1s35FqeHbV9+MESTtLKleWafTDOYrHpH
# cE3jGrRfPGBLeqwKcu/oaqAoZmE4s2xOvotfx74nUSqMa/b18Ilgi7LJ8YffJe3y
# X7NricqVU6NRGoFZMQ2IoXrGYzPnu3WaHsmsYEmZf+GEH3+Eu99zB8kFwIZio7s6
# uOncWcMcNKFXxI/GDRN0o/kVPohdnuudL6uWoFXAPNH3pFks92JMu/eVQNq4G9IZ
# ym2xJjFopT2hy7VSUgRvWdbaFAZcbvxF3jaD+sttiGs=
# k7Ihj2bM/+yOJk9K7pOJOkwUV3q0jiPZeF6MhcWtAbxgoQ4l4Q7lUPMRyHnscFs8
# tRCdl70BbmqJOVH1kv2QOeWorIKU7DYVfgeaa3fJ05/fQ1VdjUAgltpeGOfu5HpQ
# q47G8ETQsqQYMkmFT+uQCvY3arChfPjlR+3Y1S8Mc6W53LP6eJdT/jeTmOFEYN5F
# /NmYGqIOfhmQwW9mJgcursgTy3557xY/J7lpP8DZXlKX0N3bvin4c34+hKsDVmaj
# WN65xRBTCzI1YuTiXzGRMW/dtBtbJf/utIobOR8k9Fj5PGI3C2Q0Uj9sCFxI0i2T
# NrdFnChM3UnjsflJVJtwlyTWvng/Xgqp70x6gvoYUaw+gdPFy/DSWJsX6B0bl7OD
# yg7+XEpiPW10AQD2kclSRY8Js1A3UZe3DTYi6n5wMe3B4Eez8z7Q3vcDFCu9IedN
# KWCxcKEC2ngyrfsyneu3WGyW7hO1G8JoJDKAK+EDZg5LTmPXzPm1fdTmD2CN1gV3
# Kq//jbRKZwRXKJHqdYVyOfyMZwmWWDEfeBW+wvi8ithWLAt0T8qrIIkdT9z45Nl7
# MboV6pAN0gRYU8WTQwbAXVzyzdEWiK5Mb//0csEmAUtM8M0APkJmbSCSKrRHTRhb
# Mqzw5IVtsQQcwemTDu6mU4fa2Nui4HUPMh8qOa+6QgE=
# SIG # End signature block