From 2526e997e339c75a76aa0680ee964650ec72d02a Mon Sep 17 00:00:00 2001 From: Michal Buzik Date: Wed, 13 May 2026 12:57:23 +0200 Subject: [PATCH] Increment assembly version to `3.9.3097.1`, add `SlotGroupedLogin` support in `iPerlCommunicationForm`, implement `GroupedLoginSlot` method in `OptoHeadTest`, and update slot operation logic with enhanced error messaging. --- TBF/Properties/AssemblyInfo.cs | 4 +- .../communication/OptoHeadTest.cs | 78 +++++++++++++++++- .../iPerlCommunicationParams.cs | 1 + .../iPerlCommunicationForm.cs | 48 ++++++++--- ....Interfaces.Protocols.TransmitProtocol.dll | Bin 11264 -> 11264 bytes ....Interfaces.Protocols.TransmitProtocol.pdb | Bin 36352 -> 36352 bytes ...rdware.WaterMeter.Genesis.DataPackages.dll | Bin 10752 -> 10752 bytes ...rdware.WaterMeter.Genesis.DataPackages.pdb | Bin 36352 -> 36352 bytes ...ardware.WaterMeter.Genesis.GenesisCore.dll | Bin 154624 -> 154624 bytes ...ardware.WaterMeter.Genesis.GenesisCore.pdb | Bin 237056 -> 237056 bytes ...ardware.WaterMeter.Genesis.GenesisFile.dll | Bin 73216 -> 73216 bytes ...ardware.WaterMeter.Genesis.GenesisFile.pdb | Bin 167424 -> 167424 bytes ...eter.Genesis.Protocols.RequestProtocol.dll | Bin 20480 -> 20480 bytes ...eter.Genesis.Protocols.RequestProtocol.pdb | Bin 40448 -> 40448 bytes ...er.Genesis.Protocols.StreamingProtocol.dll | Bin 13312 -> 13312 bytes ...er.Genesis.Protocols.StreamingProtocol.pdb | Bin 24064 -> 24064 bytes .../Common/Xylem.Common.Logic.RelatePcb.dll | Bin 5120 -> 5120 bytes .../Common/Xylem.Common.Logic.RelatePcb.pdb | Bin 17920 -> 17920 bytes ...ylem.Common.Ui.CordonelPreadjustmentUi.pdb | Bin 396800 -> 396800 bytes .../Common/Xylem.Common.Ui.GenesisToolBox.exe | Bin 526336 -> 526336 bytes .../Common/Xylem.Common.Ui.GenesisToolBox.pdb | Bin 851456 -> 851456 bytes .../Common/Xylem.Common.Utils.Logging.dll | Bin 11776 -> 11776 bytes .../Common/Xylem.Common.Utils.Logging.pdb | Bin 19968 -> 30208 bytes packages/Common/XylemCommonUiLegacyGenCtl.dll | Bin 179712 -> 179712 bytes packages/Common/XylemCommonUiLegacyGenCtl.pdb | Bin 329216 -> 329216 bytes 25 files changed, 115 insertions(+), 16 deletions(-) diff --git a/TBF/Properties/AssemblyInfo.cs b/TBF/Properties/AssemblyInfo.cs index a33146063..fd14b048f 100644 --- a/TBF/Properties/AssemblyInfo.cs +++ b/TBF/Properties/AssemblyInfo.cs @@ -32,5 +32,5 @@ using System.Runtime.InteropServices; // Build Number // Revision // -[assembly: AssemblyVersion("3.9.3095.1")] -[assembly: AssemblyFileVersion("3.9.3095.1")] +[assembly: AssemblyVersion("3.9.3097.1")] +[assembly: AssemblyFileVersion("3.9.3097.1")] diff --git a/TBF/Rig/RegisterReaders/GenesisRegReader/communication/OptoHeadTest.cs b/TBF/Rig/RegisterReaders/GenesisRegReader/communication/OptoHeadTest.cs index e0d1c0360..8a3e13479 100644 --- a/TBF/Rig/RegisterReaders/GenesisRegReader/communication/OptoHeadTest.cs +++ b/TBF/Rig/RegisterReaders/GenesisRegReader/communication/OptoHeadTest.cs @@ -1260,6 +1260,80 @@ namespace TBF.Rig.RegisterReaders.GenesisRegReader.communication return ex.Message; } } + + public BridgeComponents.GciBridge.Interfaces.PublicModels.GciFullLoginResult GroupedLoginSlot() + { + if (genesisHead != null && genesisHead.DebugLevel == DebugMode.Simulate) + { + log.Debug("Connect() - Simulated response"); + return new BridgeComponents.GciBridge.Interfaces.PublicModels.GciFullLoginResult + { + SlotId = genesisHead.GetSlotNr, + Success = true, + Message = "Simulated Connect", + ConnectResult = null, + PcbResult = null, + PasswordResult = null, + SetPasswordResult = null, + LoginResult = null, + }; + } + + var gciFullLoginResult = Task.Run(() => GroupedLoginSlot_Async(genesisHead)) + .GetAwaiter() + .GetResult(); + + return gciFullLoginResult; + } + + public string GroupedLoginSlotStr() + { + if (genesisHead != null && genesisHead.DebugLevel == DebugMode.Simulate) + { + log.Debug("Connect() - Simulated response"); + return "Simulated Connect"; + } + + var gciFullLoginResult = Task.Run(() => GroupedLoginSlot_Async(genesisHead)) + .GetAwaiter() + .GetResult(); + + return gciFullLoginResult.Success ? ResultOk : ResultNok; + } + + private async Task GroupedLoginSlot_Async(GenesisSmartReader genesisSmartReader) + { + try + { + log.Debug("GroupedLoginSlot_Async called for iHead: " + genesisHead); + + var gciFullLoginResult = new BridgeComponents.GciBridge.Interfaces.PublicModels.GciFullLoginResult() + { + Success = false, + }; + + if (genesisHead == null) return gciFullLoginResult; + if (string.IsNullOrEmpty(genesisHead.CommInterface)) return gciFullLoginResult; + if (genesisHead.CommInterfaceBridge == null) return gciFullLoginResult; + + CancellationToken token = default; + + log.Debug($"GroupedLoginSlot_Async( Slot: {genesisSmartReader.GetSlotNr}) - Start"); + BridgeComponents.GciBridge.Interfaces.PublicModels.GciFullLoginResult connectFullPassLoginWithRetryAsync = await genesisSmartReader.CommInterfaceBridge.ConnectFullPassLoginWithRetryAsync(genesisSmartReader.GetSlotNr, token); + log.Debug($"GroupedLoginSlot_Async( Slot: {genesisSmartReader.GetSlotNr}) - Result: " + connectFullPassLoginWithRetryAsync); + + return connectFullPassLoginWithRetryAsync; + } + catch (Exception ex) + { + log.Error($"GroupedLoginSlot_Async({genesisHead.GetSlotNr}) - Exception:", ex); + return new BridgeComponents.GciBridge.Interfaces.PublicModels.GciFullLoginResult() + { + Success = false, + Message = ex.Message + }; + } + } public string SetTestModeSlot() { @@ -1291,7 +1365,7 @@ namespace TBF.Rig.RegisterReaders.GenesisRegReader.communication byte valueLed = (ledMode == LedState.active) ? (byte)6 : (byte)0; log.Debug($"SetTestModeSlot_Async( Slot: {genesisSmartReader.GetSlotNr}) - Start - Set Led Mode: {valueLed}"); - var registerWriteResult = await gciBridge.WriteRegisterAsync(genesisSmartReader.GetSlotNr, RadioService.LedMode, valueLed, false, false, token); + var registerWriteResult = await gciBridge.WriteRegisterWithRetryAsync(genesisSmartReader.GetSlotNr, RadioService.LedMode, valueLed, false, false, token); if (registerWriteResult == null || !registerWriteResult.Success) { @@ -1342,7 +1416,7 @@ namespace TBF.Rig.RegisterReaders.GenesisRegReader.communication log.Debug( $"SetActiveModeSlot_Async( Slot: {genesisSmartReader.GetSlotNr}) - Start - Set Led Mode: {valueLed}"); - var registerWriteResult = await gciBridge.WriteRegisterAsync(genesisSmartReader.GetSlotNr, + var registerWriteResult = await gciBridge.WriteRegisterWithRetryAsync(genesisSmartReader.GetSlotNr, RadioService.LedMode, valueLed, false, false, token); if (registerWriteResult == null || !registerWriteResult.Success) diff --git a/TBF/Rig/TestMethods/GenesisCommunication/iPerlCommunicationParams.cs b/TBF/Rig/TestMethods/GenesisCommunication/iPerlCommunicationParams.cs index 707655dc5..f7df5b824 100644 --- a/TBF/Rig/TestMethods/GenesisCommunication/iPerlCommunicationParams.cs +++ b/TBF/Rig/TestMethods/GenesisCommunication/iPerlCommunicationParams.cs @@ -57,6 +57,7 @@ namespace TBF.Rig.TestMethods.GenesisCommunication retVal.Add(iPerlCommunicationForm.SlotPCBSlotStr); retVal.Add(iPerlCommunicationForm.SlotSetPasswordStr); retVal.Add(iPerlCommunicationForm.SlotLoginStr); + retVal.Add(iPerlCommunicationForm.SlotGroupedLoginStr); retVal.Add(iPerlCommunicationForm.SlotSetTestModeStr); retVal.Add(iPerlCommunicationForm.SlotSetActiveModeStr); retVal.Add(iPerlCommunicationForm.SlotDisconnectStr); diff --git a/TBF/Rig/TestMethods/iPerlCommunication/iPerlCommunicationForm.cs b/TBF/Rig/TestMethods/iPerlCommunication/iPerlCommunicationForm.cs index c17db2c1c..e784a4e34 100644 --- a/TBF/Rig/TestMethods/iPerlCommunication/iPerlCommunicationForm.cs +++ b/TBF/Rig/TestMethods/iPerlCommunication/iPerlCommunicationForm.cs @@ -83,6 +83,7 @@ namespace TBF.Rig.TestMethods.iPerlCommunication public const string SlotPCBSlotStr = "PCB Slot"; public const string SlotSetPasswordStr = "Set Password"; public const string SlotLoginStr = "Login"; + public const string SlotGroupedLoginStr = "Login (Combined workflow)"; public const string SlotSetTestModeStr = "Switch to Test Mode"; public const string SlotSetActiveModeStr ="Switch to Active Mode"; public const string SlotDisconnectStr = "Disconnect Slot"; @@ -752,6 +753,7 @@ namespace TBF.Rig.TestMethods.iPerlCommunication else if (currentActivity.ToLower().Equals(SlotPCBSlotStr.ToLower())) error = SlotPCBSlot(threadID, ihead, ref resultStr); else if (currentActivity.ToLower().Equals(SlotSetPasswordStr.ToLower())) error = SlotSetPassword(threadID, ihead, ref resultStr); else if (currentActivity.ToLower().Equals(SlotLoginStr.ToLower())) error = SlotLogin(threadID, ihead, ref resultStr); + else if (currentActivity.ToLower().Equals(SlotGroupedLoginStr.ToLower())) error = SlotGroupedLogin(threadID, ihead, ref resultStr); else if (currentActivity.ToLower().Equals(SlotSetTestModeStr.ToLower())) error = SlotSetTestMode(threadID, ihead, ref resultStr); else if (currentActivity.ToLower().Equals(SlotSetActiveModeStr.ToLower())) error = SlotSetActiveMode(threadID, ihead, ref resultStr); else if (currentActivity.ToLower().Equals(SlotDisconnectStr.ToLower())) error = SlotDisconnect(threadID, ihead, ref resultStr); @@ -853,6 +855,28 @@ namespace TBF.Rig.TestMethods.iPerlCommunication } } + private CommErr SlotGroupedLogin(int threadId, GenesisSmartReader iHead, ref string resultStr) + { + CommErr error = CommErr.FailedLogin; + var gciFullLoginResult = iHead.OptoHeadTest.GroupedLoginSlot(); + if (gciFullLoginResult.Success) + { + log.Debug("SlotLogin successful"); + resultStr = string.Format($"Login OK - Serial No: {gciFullLoginResult?.PcbResult?.Result?.PcbId}"); + iHead.SerialNr = gciFullLoginResult?.PcbResult?.Result?.PcbId; + if (iHead.ConfigStruct != null) + { + iHead.ConfigStruct.PCBNumberString = gciFullLoginResult?.PcbResult?.Result?.PcbId; + } + error = CommErr.None; + } + else + { + resultStr = "Failed Combined Login"; + } + return error; + } + private CommErr SlotDisconnect(int threadId, GenesisSmartReader iHead, ref string resultStr) { CommErr error = CommErr.FailedSetActiveMode; @@ -894,12 +918,12 @@ namespace TBF.Rig.TestMethods.iPerlCommunication if (!string.IsNullOrEmpty(resultStr) && resultStr.Equals(TBF.Rig.RegisterReaders.GenesisRegReader.communication.OptoHeadTest.ResultOk)) { log.Debug("SlotSetTestMode successful"); - resultStr = string.Format($"Serial No: {resultStr}"); + resultStr = string.Format($"SlotSetTestMode: {resultStr}"); error = CommErr.None; } else { - resultStr = "Failed Read Serial No"; + resultStr = "Failed Set Test Mode"; } return error; } @@ -911,12 +935,12 @@ namespace TBF.Rig.TestMethods.iPerlCommunication if (!string.IsNullOrEmpty(resultStr) && resultStr.Equals(TBF.Rig.RegisterReaders.GenesisRegReader.communication.OptoHeadTest.ResultOk)) { log.Debug("SlotLogin successful"); - resultStr = string.Format($"Serial No: {resultStr}"); + resultStr = string.Format($"SlotLogin: {resultStr}"); error = CommErr.None; } else { - resultStr = "Failed Read Serial No"; + resultStr = "Failed SlotLogin"; } return error; } @@ -928,7 +952,7 @@ namespace TBF.Rig.TestMethods.iPerlCommunication if (!string.IsNullOrEmpty(resultStr) && resultStr.Equals(TBF.Rig.RegisterReaders.GenesisRegReader.communication.OptoHeadTest.ResultOk)) { log.Debug("SlotSetPassword successful"); - resultStr = string.Format($"Serial No: {resultStr}"); + resultStr = string.Format($"SlotSetPassword: {resultStr}"); error = CommErr.None; } else @@ -944,13 +968,13 @@ namespace TBF.Rig.TestMethods.iPerlCommunication PcbReadResult pcbReadSlot = iHead.OptoHeadTest.PCB_ReadSlot(); if (pcbReadSlot.Success) { - log.Debug("SlotSetPassword successful"); - resultStr = string.Format($"Serial No: {pcbReadSlot.PcbId}"); + log.Debug("SlotPCBSlot successful"); + resultStr = string.Format($"SlotPCBSlot: {pcbReadSlot.PcbId}"); error = CommErr.None; } else { - resultStr = "Failed Read Serial No"; + resultStr = "Failed SlotPCBSlot"; } return error; } @@ -961,8 +985,8 @@ namespace TBF.Rig.TestMethods.iPerlCommunication resultStr = iHead.OptoHeadTest.ConnectSlot(); if (!string.IsNullOrEmpty(resultStr)) { - log.Debug("SlotSetPassword successful"); - resultStr = string.Format($"Serial No: {resultStr}"); + log.Debug("SlotConnect successful"); + resultStr = string.Format($"SlotConnect: {resultStr}"); error = CommErr.None; } else @@ -984,8 +1008,8 @@ namespace TBF.Rig.TestMethods.iPerlCommunication resultStr = iHead.OptoHeadTest.InitialiseSlot(); if (!string.IsNullOrEmpty(resultStr)) { - log.Debug("SlotSetPassword successful"); - resultStr = string.Format($"Serial No: {resultStr}"); + log.Debug("SlotInitialize successful"); + resultStr = string.Format($"SlotInitialize: {resultStr}"); error = CommErr.None; } else diff --git a/packages/Common/Xylem.Common.Hardware.Interfaces.Protocols.TransmitProtocol.dll b/packages/Common/Xylem.Common.Hardware.Interfaces.Protocols.TransmitProtocol.dll index 38b14697457c22832c802955edd0f50362eb67a5..6a3337e8954335330b65af30c15fd64f3fe1d5f5 100644 GIT binary patch delta 171 zcmZpOXo#55!Mw?xWn;I$AX8@0&s7=##rQd&Z4Oc_C&gM{XB z3vkz3pYH9S=F`h+_}bE4DrS@14knN>lXojf3h1;{GVlNL#A&JKrujj?rv`3*qOgLQ yD>Fz4Xc809q|MV*au_*{7z`N<7%UmgH*>2kN8(Q2t!|BwT+FD!wE4d#BNG6Ppf4H# delta 171 zcmZpOXo#55!OYvwys_I~km=gI$#(=T#IDU_0E2Eu5XHp6!63u{l+qGX1FF~@Bs7m( z;K*rVM~Hjl(&lL@IgFep3>%6lKH1|gsvPT4J0RR91EQEOjzx3onr75zXQu~!r IvmAWn5!+`J4gdfE delta 50 zcmV-20L}k^oC1KH0Wn=esKBml|$tnCQc9}s8V8FuxqL>&s7=##LVxO5X#m=xJ#4>_5 zALDQ06R2X%tqGL~^jh;`ZcV|T{~ntoUbsAXV~VPs(NumfTR28N(um*8xL zB^eu{_Ir1}xv9k(uzPVYYABj6z STFn|sQczoA?A~x9sayRP%COC2)`LXw<%`nP^Q7N9Dw8vhw~Q& delta 57 zcmV-90LK4-oC1KH0}%0h5tsFtb2J#5))cj{|A}0002^G4%8AkpoYO P+7=LbSj5b;9Dw8vkBk?A diff --git a/packages/Common/Xylem.Common.Hardware.WaterMeter.Genesis.GenesisCore.dll b/packages/Common/Xylem.Common.Hardware.WaterMeter.Genesis.GenesisCore.dll index 5b706b52eaa20af2bb1e1443ab5160fa28f58c08..17f1fc536ed885d35a93d2794041d4cf94e55c11 100644 GIT binary patch delta 574 zcmZqJ!P&5bb3zC6IzyJm?ycR7zA8*cqdK!M5hT2)3~F_@-`IFLBZ5z`l_GOE?XNcvFva*8)+Qoro*tsc=%)p9RGk$<4kmWT z4Iu^$i<8Mn)*Gu>bm_$IocEBSkuOJjh=xz!wz<=a^_nZC%f z8d?~cTWtU9#?;QG1B|>Zh;9Z38Ab+%Ir&Tsa{`$df`VOw|EyW+KZ9AV!6>Ff MjN2KbnEo>Y0FLKedH?_b delta 574 zcmZqJ!P&5bb3zAmyaaP&_ttJkUlpeMo*lF~Gzo*(1bi zq3WhbA;e(n>MRjrFm*0i%sU+eQpW-!pul8$ttun07)(<|97r7Ii0KPd8P)1xaxbtL z*yez&9>iu~_-+RxA!fkz3MU}MV2+N#Vjd5s7(c_>M1*EwsD-F8`f0%ouCqeO!Nl&k zA;jvEr=L+{w1Rt(MHnGho7^s=&bVDho#_UnKw1}Se^6UtBExych z_MzDAQU(Csoc%uf^nbdo~! delta 194 zcmZqJ!`HBfZv#ghhyRv+@*I!uFivJa{0G=#am zfrat3Cx(j23NLSLf8x)W&VxfLmhpHkb}5&;jLeguQb5CV+IQqLZQqg4?874wFTtF} f$iTp`dDoGnorae@I|5#dFSDF|XuC`e^Akk?7=l5e diff --git a/packages/Common/Xylem.Common.Hardware.WaterMeter.Genesis.GenesisFile.dll b/packages/Common/Xylem.Common.Hardware.WaterMeter.Genesis.GenesisFile.dll index 3c816347f8329b50161230ca00d253d4be927375..f1c6ed379a5d0d5e61269ede269162719c9f1bc0 100644 GIT binary patch delta 299 zcmZqJ!_u&aWkLtjR`-ov67!j|f+jDSuOgNe!~g~?q9BTifrCMaAtPw=z4>ZPK#FaF z8eE013PMF@&}63tYC#!L%{Io!QXn=1!xa$_2{AAes;*lWAqLYsO%WjmGV6lC=Bx64#frjwVyk?5+iBOva|0A1!zm zBvAXP`^(&a;eJigw>zibI##p!#%C5qp!=ua6JeAR`1~UN#RZQ*rv?9BX|9*8kJ`>5 z%GkopWnwA>^aK-wiRtud5{y4M4H=9X%ovOq47N{~Wb9`|@TcobGg>2YABr*dZD*8W H{Lcsg4zxmV diff --git a/packages/Common/Xylem.Common.Hardware.WaterMeter.Genesis.GenesisFile.pdb b/packages/Common/Xylem.Common.Hardware.WaterMeter.Genesis.GenesisFile.pdb index 70f52750bc9614ae8c8c33efc4995dee4d8b5297..131e0bccb580cde093078d46eaf90eb4ddae35d2 100644 GIT binary patch delta 67 zcmV-J0KETzoC<)P3a|)f2(p|Y?Y!dL0hhsn0x*L>W`{s#0k=SA0>ld#wMPVM0RR91 Z+pbb&UWT7bgML)Xw7@gYw;XZ;W`{s#0k=SA0>ld#NDTyP0RR91 Z^XOmb&`422p#JJ9uN{9{w;XZ;WaY6_4W_Om2-OCl3GJ__YD5=-!(5+bzwG0e0j0_BOl7ZNjfgvc^C3vr?uX4`vwf_QBnAC~7&kNe{bvLK0Utnu delta 295 zcmZozz}T>WaY6?(e?Rla?&XS1*XK<(QBtwHK92zmF7tsXCI$`$AqJROIx9l#8dTkO zBr%{7)0EWgU{d@X2<2Cy%IBjf2gx%q9A^iS5UZ}u+x$!Ek&J-z?;vY?%{KpOz8=B` zD_a;hzp3Ld-A=O&KKD@=503+C0RR91Z}YV(5ZR(kr0NqrbQZOT IvmB7*4GL5gjsO4v diff --git a/packages/Common/Xylem.Common.Hardware.WaterMeter.Genesis.Protocols.StreamingProtocol.dll b/packages/Common/Xylem.Common.Hardware.WaterMeter.Genesis.Protocols.StreamingProtocol.dll index 64bd3235a94f424deb9f83084e55cc3c12f3fc5a..bd1bf3aba0d5392f28e4c41e24dcc24ee4427aee 100644 GIT binary patch delta 246 zcmZq3Xvmn*!Mxd>Wn;Ix1XE_vl&{)+NX|2@s+D^H2{Ic>I3b72NKXmY)#q=3oEdk%9L zYusnOHIOpOS&^}Mh2|3`uFN1IpqrQ&GJ`fx(_vxaG-5DhFkrA`FyFjb?>r-dJGt7x R8o}EvXynAWnbGJ!BLHEEGhhG! delta 246 zcmZq3Xvmn*!OY*!ys=wdg6aCa$y+2;(yq^A0E4Z}Ac~2BgF%Sl8dQvx1tA7gXUd5X zy9!nJ7K`4uNb0W5+iWNKibvqRo?V2z`%$O$1+TYoO;zpQY@z1D406!qdQC}zZ&Tcz zj~mxH%~4Qs5PIZ4d-Dp-Crn(|=LrGb#KdrY-sWjKEKHmx3yr Ivm8|93ErO)iU0rr diff --git a/packages/Common/Xylem.Common.Logic.RelatePcb.dll b/packages/Common/Xylem.Common.Logic.RelatePcb.dll index 3ea15355eefb760534919f7d046a9170eb07b35f..411a9d3d8fb661173a7935ed1484af2081390293 100644 GIT binary patch delta 138 zcmZqBXwaC@!MwqpWn=eMR;G-g%}H$Ym<0~GrZpYYFK}$}?Rx$7N$7;l0$du5AXSsC zxg`aZ6&?Kc%T0D&W*{JadO7#u%_-a(%v>2kLJS-XObkFXrtz6DavCuhG8iyeGMH_? Y%&(8coy;w0jgXvtk!RCpMxpb&CI0h19NFtb1+#1|N_M+9mC0000ZAwW*Q9+O3; PFc2HdrwhZg96IC+Eshg1 delta 57 zcmV-90LK4-i~)d*0k8-n2!l*8+)m=$0h19NFtb1+#1|M0j{|A}000300S+zV5HU!Q P@@&5%Xr7+496IC+FAfv; diff --git a/packages/Common/Xylem.Common.Ui.CordonelPreadjustmentUi.pdb b/packages/Common/Xylem.Common.Ui.CordonelPreadjustmentUi.pdb index 88301626836dae71a528e453308b56a6d890ca1c..4371bda5b3fb42d486b6e2cf2f3c9ba49c6bf77f 100644 GIT binary patch delta 78 zcmZpeBhfHNVgtuA4u=R(F;x fMg|6kj!wA%#?O4-y#k*Ex0tHyZkM^m`otIjn%W$x delta 78 zcmZpeBhfHNVgtuAj)&qpQnMc2VVum!WYFxetleQ5BM>tIF*6XeYZ|bw0T19Ec9rINe)Xpvcv|Z*F>l0%DbR->~ diff --git a/packages/Common/Xylem.Common.Ui.GenesisToolBox.exe b/packages/Common/Xylem.Common.Ui.GenesisToolBox.exe index 97264edff9820f030825b2c3c96e6c20ab1d3c2c..15dcc8ebb5b30c6a4640bc65f9e0f3ce4d815fb0 100644 GIT binary patch delta 535 zcmZpepwKWuVL}Jf4)?~c)-J}@E~eHl=GHEjtzE1Z*-SY>(~o4c`Y>e&O&7{xRb$Ew znr;Q6GlHfk0qOe8AO*wX3@|a-qX@AqsJhRaF~tsH(Hnaap)LceckNk( z7}UJ!?76IpOj$wGwQ^bgv|tubnt)IU(>xE!K%gfUvA@^;O;M2FDU><)pV{u>{0@6xKA~!&RFI*`wL&V;LW*a+fDwkN3d|^ z1PKA-fr%j}XzMhN5=KrV216h;U@+J&%*1gYi9h`}Glw;jv>+SDA;#^DY#jd?0kgbn A)Bpeg delta 535 zcmZpepwKWuVL}I!H*aHCYZqf{7gK8&b88pN)-G0yY$j9F=|{3zeV9y4rwiqZ*pvYbq?14t69Wf>5Ccq1_9&*<=gpX6hp_04y@*g}1hr%BS%etWj_K^V ztcoDVY2~u|X~8U>Gy$Oyrgs-|=OVV4qkzByom{?$XCYdG)k{CGAhY`e)H_6Qa(Q&S;eJTNhs vnr@xOQNqY+$Y9K1#$d!?xLufu<3199`fp|qYb0qwHjYD#+Zow7{xbpq!(d_$ diff --git a/packages/Common/Xylem.Common.Ui.GenesisToolBox.pdb b/packages/Common/Xylem.Common.Ui.GenesisToolBox.pdb index 37fdcfa8689a01dad67825a4947ec36e6ff666dd..5c5e7b563b62b22788eade78a23916de8414d720 100644 GIT binary patch delta 311 zcmZqpW845lTNpXwIP4ls-tT#IhjB6^lfia}I7a#9tVV_gmgdtZm@sXJFt;nPF=gvv z2u}wJXS8oIW!k>QlzH!6u)GCGP-FW%VU~}{Pz?@^tQp(?l(STSgbILFEXib@E)Egc z4ped494d*h6>R)=lU=NukzhH9(bIuOJ8eHB%qA#^F52#+$_B*j+kI3y>X{+twO`QS z*nUBS^S3U9zx_fOr?fUy?n5JI`-es@Am-lwp^-;KMq-CMOBN#o1H&8cQ_ZR~mif*8 R!WS-hbFSHTnRz@<;sG0uV7mYS delta 311 zcmZqpW845lTNpXwI8In-%FKFnhjB6^lfia}I7a#9tcJ#BhL+POm@sXJFt;nPF=gvv z2u}wJXS8oIW!k>QlzH!6s60?mWBWW|mXFC$0f$D`jO~BQS*kxGt5}lBI$azhupOx4 zv^i7~VJq19?IyceH6xKUP6rz8wEc`Qo1h@NXuFRp8xXT^_fh4jXNJhOU(n##enErt zw=RUg{X!V0v^G@kLnCMVhej?S=HC9Hkw-*E!kd>Ri;;nW;rZr(3HnzLd9LBSzw_hS NsIcua^LU=b0{}}tVE_OC diff --git a/packages/Common/Xylem.Common.Utils.Logging.dll b/packages/Common/Xylem.Common.Utils.Logging.dll index 59815adabfe8b101bb37280220946ef7e4b3c9c3..4a5559fbdf3c5b30c36c5c9719a887d889be98ff 100644 GIT binary patch delta 3916 zcmZu!3vg7`8UD|?_ny7??%rh|0rDd38WNUGfCNw;1pz|_hzbP6Dq_<}qsF8xW}_w| z+2v6nsEz9#nMR-(s|;Y#(j8mTX$@9sv0{DJ5qW4GJMmF%tz}?FnSSSNhz{eO+3)_} z|2*fv=bU>ty)wP>fvx%z)%tCj`-=I5+RXlI{U_!TEhbz)Ci;bziH3b?A|Lo;HAKa3 zlvldfv$1?inY)2?6$ENw!LP1sUseFlKF_Rg+}L+9CSW+uRhi`gI1zSx>dWc=o15zAh!JwdD<}lHHpb?y)nFcGL&kp z2_+3>wSsnHij4ifsKCWh*^S17Y+;-9PXc6cr6l7ANxLL>43aw~xl59;VOAD>+X6Gu z0j-(nbn88NDJfftPT;p5iNW?44z(YRuLz5v7(YU+wb0A1wFn3r$$M}Mdn$@@+Mr0R zgCd4*R}2|1N*nYfQr{_-B0GsiX6F*bMnQ~!KDscLhR}v0YhqYCb{dV>yG+1&F;Wg{ zJ(S4}(juR1a-)>wf{bHral*KP>8O3$6I9uQ7M6MKcQt*I)C}XdAM%{|Fyf`8XKJohG4Y?WrwgG2<2p_RD^Jk zT4kx39tJL__oQyvf=(&CTL01-MrCpi)TlF4P)1>gt_eZc`EKwCdV?fRQvQ!AIc!SJ zi;!*l*wby;RA4O;Ho3lDuT3khCg55n&oZU{Zr+`O)2q5PH#xmtK?}Vy#UV}N6>PU5 z=u=0Qe_IS-A}yK>`-xxTXR5$mT9b@|zfB2en9rsfloa%dC1bP1n4rI6Kz_Q0A3>g^ z(kv9x|2Z1wOWE`qljZ-U@ElOkY2!}ErgOH`_gE4?QP$xenYxG00N1NT{piG-G=OI% zs8#i#l@F+Xo>s_+(Rv(*#W;qekQw!%_jP;#4}s%6T%U>tsNNbdqM$a+0m}FWjO&pu zNGuYdIo>_q8^OYgO;*f9d88rk8o_UN(2?NC?8TY+rq2qDXWLqryF<=zlX^`Cn#_9JtM&05mj%}r` zBhGU1G?!~iUPqi8!LU`-b;Rknp6A$EgX|a>T9sqQts+1c&W1sn6i2yDFGnQZPG`)& zaW8!|$PNg}&JMCS#G7D^cppg5Y1X^kM;(JKYMtf|^(&SkKR?YwG`n1SX7WF@KIS9o z9>rdyO8sA8sYeyvoPW|1Xx;uHc9iGSp&=Ha0{V+$xip3J){sr${5hf6Mm)g(@{4T? zaQYK%q;fh7+YN(kAsBXK3LygByMQCnS56f;|1N00Yt6|y>nL=RQ5|+Tqj`v8^sFxs z;IzRB1T90UaivF&p0?HT*~PI-PcI2EOcRp?7Jr zmH;kIY3=j@UFY9SAJaRYdm(S;E%YC{M0&!mNP!Hcr77JNV z(ir+$e-5!Ht$yGf>j)LFr1chXkMBL?S!ti8N?5(DnoaTt*<6K_1Cct3? zN~YFA2bFv%hs^ZF+3k=6)JJ1Yxf+&vXK+7uKs|6etp?7byKpGYr47K^6mAjv0rhH8 zg%ik2=lKMj_a1EmUfJcqQkn>?P&kL)ORZnY?<>@p%vq{1PIuEW zdY`KKr8vYH_CF2;ydwnAlftW%=q-15aAJxxi8pO;GiMAqI7(T=y*{rr&=mw|HJPa(&Q+JW=>eOsy)$m`ArS^4b@c* zRW$SRRSgaEnv-i<8#`-S8Sy4?}Q)7G6;I9) z8}Dvf-B9iRbIeB}y;cV2t`aFnGSLw{P@6qpW-`|w>$02Xhp@Id)@gQotc!W3(IlEm kQ?o_!aYMwtvSQW+1OC~zS#xs#iK{Nn1}nc{nJUl!0p^>}8UO$Q delta 3706 zcmbVPdvH|M8UN0?_ny7??%uc$5(o*fOJ18~NrMm|@+Lt+r&ge}Lyg9WfGOC8Y^X0_ zmq#O17+i1Vp`BK$DA>`OS**2;jA*6B@iF)qajeuwGuDpv(fYtni~W6PLs0+hnYq97 z{l4dU-E((y9l4I%wwjZ6e$k!ZUMXwa^ACKlUA{NRKg}{G4hp5s| z$dtcC)X7w}ze#K;x7%Ssn}H+>cW}QFWN@bftdcKd*=!vGs zGrb(tkUh)3rq!d>_H(tJh?_p2Q~uvsoCyf$G!qL)tlLGlfwMIZ>Ux-D21zfIwM=4` zovJvu-gf%O(Aw$i8Dmys**TM=O^!C5)1KX+@}UjF)-=XcM2(wUrf$~zdn1xXtjta5 zVu8krqBf$^H$#!c<~I%*zmYc*NU!%3_OL9cNsfYh!?7_VlN%uPAb52$3@L~GGB*SO zXH*%FA`4|E#}+|R1bWz3UIla~Yq0=z^5Z0jzvyVepT>^PgZ%_A+R$y0&+VQ&G zhQ4a?B6=AzmWHY>T0FlU{a?ZN_$QpY#3V2T>jzs#STI649=MLM{BpM@`2v;=OJRDH8LgS_8YnCE2R0_@0#As{(-CBMwz?w%PyL3;W({kx0 zyH>e0Gc-5oQkfG0)@k|k0P8Q4omn{DYqB}y%?&F0)a4XA4aOF+7R7G&xcslx>*UgG zgTsO)jQ8mR-!>wM8Uue6@D3x-e^FA=ee?;2egs1)p$3_=6)o4AF^WAOBKCYr%nfE; z`Yk$_-Uljr#2V$fwBKb-o5T2qw!WY^=_Yy@*sBw*z#6eREJBVX4m`JzTa zf;NgU{Ru}T0a?&Kta@A?!SYL-&W(vM1)U>VD*@`l9H!}^Bi0gZPnbkJOz*o3gI9n> zHT#QZieh9S@FSE+P=JP!ffBrd39@N8MW{pc%JH<+Stl3dTI4!8iB?)!sc4pW3$V#! z&GU3CQ|*;_b#y!CHL71qK1bY+c@x0! zzUX$$>vaxFyfK4pBN!H`$gCMEtj{CUW7d3C$V!)^Mrw45{^fqk4IxfGN=78~gC+N?(kj~;i zaE(b4K#~2L;j2#COs`@k1(|pe1&ze|3+f7m!;p?@V6ppwsG*;xPN7jpN&^H4g3QYzc4NVmrsneJYyxy1!&C8)#z=6S{Gz_Pmty5 zF8eHW*{3eZ@}wZkQC(o1E^ty8cvlyg6JVdE0ruI0+2`p&%sx-|T04OKmJfW)y%U&y z*1a3u&-4uTV+L!)IOhPZ5mOwVeN1q0wcy|tdJugW#2T^PW}n?Q`&8;;<4~-hJ_{Y7 zei9z*`>gwccUTVs-*k8~pWp!Isa)r2)RTEHYqH@>Q_ncW@*N?TpVXrs(4)S~<3ar1 zE)Qg3oLt>*?qK=Dw*!AauDtHq58G(1iL^@BL5qrg*%9PXe8L9@x^eF4jN}(>{6&XS-E=>DI{-ocbBSR=ONGovy)kGMm!CxxhG0 zrOie{V-p4GZ?Xv&%*VhA3L8ySMdiRojT5NVn58{)8t-PDW!yt;wAFY*tKQUT2u@n1 zv4L))=V-JXi>p}Rw>DmK-0=#y7~epA(EXO^x3VA7XCf%g9A7Ioz8HQpjOPpbh(9>fW-RUOZ12vjUe$GDY1^u< zOlERtGfit+y0kalGvn&c&ME%r*hs%3HmWcqc0d%2(%+bc=gZeie?jG%!ZVeJWMT7| zmxRA0u`|5s@6N@k54O+0_xw+vY&zIY{^`VX{>ibUt9FR!0=qPt%gg8jX~m_e91#l( zDWTdcMiX27@~SEI`-JVpg#d>Hzmk#?BTlXfoomG@lH0E!qVun-8kvO&P87}cvlg9p zd8Fv_h_*alv^+ix)pVV+<-nw=qPe3^+z=(`qqE&O59DbiIvNU#;;`7=a#~%HAOHXW diff --git a/packages/Common/Xylem.Common.Utils.Logging.pdb b/packages/Common/Xylem.Common.Utils.Logging.pdb index 1520bd9368097004bf9e91a45e591482047b6044..6821d10f006a2193989aedf5360ff2126cbf151c 100644 GIT binary patch literal 30208 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 literal 19968 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 dZ|`K1N8(Rs-pyoQBBLllmQI%Z9o(g0|$c; zgE3U>P6)Et^m9PoalR!Su95*PP2cm)U)1dr)K-$g-YF4xxvRNQD1A}c8 zh(xt>k0U}1XtvTRupQgIPBFF}5tuyPrSjQ>!>+r!?g`o|e4MlWK_Al^RiN*t_ibU4 z5;(c$;-SBif$kd}7p|&n6RO<4V++$2W-b#`A)vRI7)(sJPusy{!^mmKV9a2~V8mds e{q{~Kc_jXH=G{!z2fx8Fa`Bwq~? zntcCwYI}w=^Y#p9mN|1Iwz;!pF)}bP%nh@fCwBa@+v54EkM+&N9Jb3mV0oen0E`wU AssI20 delta 97 zcmZqZ5ozcV*}&1jQ7HRTYSyDWjFTCe3^qG7%yMTnG&VCbXuf~E{r+*r?e~u}$yY;! zCf`4v+MeOeygkF2WzHN4PhOTRMg|6klWQ&>`YRdezR_{vs=79z%Iz`_Se~c?06I`6 AX8-^I