From e8d5f45614071c1580af4916589fc147b1b49671 Mon Sep 17 00:00:00 2001 From: TEST Machine Date: Wed, 12 Feb 2014 23:32:48 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0CNC=E8=BF=90=E8=A1=8C?= =?UTF-8?q?=E5=81=9C=E9=A1=BF=E6=97=B6=E9=97=B4=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Interfac/Msi/Hsi/SevenOcean/SO7_Proto.cpp | 6 ++- .../Tools/UsbUtility/Debug/UtilityDebug.Log | 5 ++ .../Hsi/Tools/UsbUtility/UsbUtil/Mv_Util.rc | 24 +++++---- .../UsbUtility/UsbUtil/So7_Util_Program.cpp | 49 +++++++++++------- .../UsbUtility/UsbUtil/So7_Util_Program.h | 2 + .../Hsi/Tools/UsbUtility/UsbUtil/resource.h | 5 +- .../Hsi/Tools/UsbUtility/UsbUtil_VS2010.suo | Bin 2355712 -> 2355712 bytes 7 files changed, 55 insertions(+), 36 deletions(-) diff --git a/PcDmis/Base/Interfac/Msi/Hsi/SevenOcean/SO7_Proto.cpp b/PcDmis/Base/Interfac/Msi/Hsi/SevenOcean/SO7_Proto.cpp index c81dd6d..fb02d60 100644 --- a/PcDmis/Base/Interfac/Msi/Hsi/SevenOcean/SO7_Proto.cpp +++ b/PcDmis/Base/Interfac/Msi/Hsi/SevenOcean/SO7_Proto.cpp @@ -2789,6 +2789,8 @@ SSI_STATUS_MOTION CSO7_Proto::_start_machine() g_hEP8x_Thread_State = THREAD_RUNNING_STATE2; g_machine.s_status._machine_running = true; g_pLogger->SendAndFlushPerMode(_T("_start_machine\n")); + SetEvent(g_hHomedEvent); + //so7_motion_probe_on_off_(false); //so7_motion_fixture_on_off(true); //so7_motion_fixture_up_down(true); @@ -3108,7 +3110,7 @@ SSI_STATUS_MOTION CSO7_Proto::so7_motion_get_position_xyz(double & dX, double & //================================================================== SSI_STATUS_MOTION CSO7_Proto::so7_motion_set_position_xyz(double dX, double dY, double dZ, bool bWait) { - WaitForSingleObject(g_hHomedEvent, INFINITE); // machine start and homing is done + //WaitForSingleObject(g_hHomedEvent, INFINITE); // machine start and homing is done if (g_machine.IsOffline) { @@ -3180,7 +3182,7 @@ SSI_STATUS_MOTION CSO7_Proto::so7_motion_set_position_xyz(double dX, double dY, //================================================================== SSI_STATUS_MOTION CSO7_Proto::so7_motion_is_finished(char MotionType,BOOL& IsFinished) { - //WaitForSingleObject(g_hHomedEvent, INFINITE); // machine start and homing is done + WaitForSingleObject(g_hHomedEvent, INFINITE); // machine start and homing is done BOOL bIsFinised(FALSE); if (g_machine.s_machine_config.motion.GetInterruptMsgMethod==E_GET_INTERRUPT_MSG_INQUIRY) diff --git a/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/Debug/UtilityDebug.Log b/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/Debug/UtilityDebug.Log index b9d33c3..094bbbd 100644 --- a/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/Debug/UtilityDebug.Log +++ b/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/Debug/UtilityDebug.Log @@ -3288,3 +3288,8 @@ Init:Open device succeed . _start_machine Exit: Exit_SO7Usb Destruct Cso7_Proto. +Construct Cso7_Proto. +Init:Open device succeed . +_start_machine +Exit: Exit_SO7Usb +Destruct Cso7_Proto. diff --git a/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/UsbUtil/Mv_Util.rc b/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/UsbUtil/Mv_Util.rc index 7cd436f..89a48a5 100644 --- a/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/UsbUtil/Mv_Util.rc +++ b/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/UsbUtil/Mv_Util.rc @@ -16,7 +16,7 @@ #undef APSTUDIO_READONLY_SYMBOLS ///////////////////////////////////////////////////////////////////////////// -// Chinese (Simplified, PRC) resources +// 中文(简体,中国) resources #if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_CHS) LANGUAGE LANG_CHINESE, SUBLANG_CHINESE_SIMPLIFIED @@ -798,19 +798,21 @@ BEGIN PUSHBUTTON "Y",IDC_BUTTON_PROGRAM_SET_ZERO_Y,427,64,27,21 PUSHBUTTON "Z",IDC_BUTTON_PROGRAM_SET_ZERO_Z,427,87,27,21 GROUPBOX "CNC Program",IDC_STATIC,15,11,140,130 - PUSHBUTTON "Add CNC Point",IDC_BUTTON_SO7_PROGRAM_ADD_CNC_PROGRAM,22,107,53,21 - PUSHBUTTON "Run",IDC_BUTTON_SO7_PROGRAM_RUN_CNC,88,89,60,32 + PUSHBUTTON "Add CNC Point",IDC_BUTTON_SO7_PROGRAM_ADD_CNC_PROGRAM,22,113,53,21 + PUSHBUTTON "Run",IDC_BUTTON_SO7_PROGRAM_RUN_CNC,87,115,53,21 EDITTEXT IDC_EDIT_SO7_PROGRAM_MSG_OUTPUT,17,276,554,77,ES_MULTILINE | ES_AUTOVSCROLL | ES_WANTRETURN | WS_VSCROLL EDITTEXT IDC_EDIT_READOUT_X,459,42,113,22,ES_RIGHT | ES_AUTOHSCROLL | ES_READONLY | NOT WS_BORDER EDITTEXT IDC_EDIT_READOUT_Z,459,85,113,22,ES_RIGHT | ES_AUTOHSCROLL | ES_READONLY | NOT WS_BORDER EDITTEXT IDC_EDIT_READOUT_Y,459,63,113,22,ES_RIGHT | ES_AUTOHSCROLL | ES_READONLY | NOT WS_BORDER PUSHBUTTON "New",IDC_BUTTON_SO7_PROGRAM_NEW_CNC,22,29,53,21 - PUSHBUTTON "Save as...",IDC_BUTTON_SO7_PROGRAM_SAVE_CNC_FILE,22,81,53,21 - PUSHBUTTON "Open",IDC_BUTTON_SO7_PROGRAM_OPEN_CNC,22,55,53,21 - EDITTEXT IDC_EDIT_SO7_PROGEAM_CNC_RUING_TIMES,97,59,40,14,ES_AUTOHSCROLL + PUSHBUTTON "Save as...",IDC_BUTTON_SO7_PROGRAM_SAVE_CNC_FILE,22,85,53,21 + PUSHBUTTON "Open",IDC_BUTTON_SO7_PROGRAM_OPEN_CNC,22,57,53,21 + EDITTEXT IDC_EDIT_SO7_PROGEAM_CNC_RUING_TIMES,97,49,40,14,ES_AUTOHSCROLL CONTROL "Infinite",IDC_CHECK_SO7_RUNING_PROGRAM_RUNING_INFINITE, - "Button",BS_AUTOCHECKBOX | WS_TABSTOP,100,42,39,10 - GROUPBOX "Times",IDC_STATIC,91,25,54,56 + "Button",BS_AUTOCHECKBOX | WS_TABSTOP,100,34,39,10 + GROUPBOX "Times",IDC_STATIC,89,22,56,47 + GROUPBOX "Interval(ms)",IDC_STATIC,89,72,56,39 + EDITTEXT IDC_EDIT_SO7_PROGEAM_INTERCAL_TIME_PER_CNC,97,86,40,14,ES_AUTOHSCROLL END IDD_DIALOG_TESA_STAR_E DIALOGEX 0, 0, 403, 284 @@ -1407,12 +1409,12 @@ IDB_BITMAP_Z_DOWN BITMAP "res\\bmp\\Z_DOWN.bmp" IDB_BITMAP_Z_UP BITMAP "res\\bmp\\Z_UP.bmp" IDB_BITMAP_X_LEFT BITMAP "res\\bmp\\X_LEFT.BMP" IDB_BITMAP_X_RIGHT BITMAP "res\\bmp\\X_RIGHT.bmp" -#endif // Chinese (Simplified, PRC) resources +#endif // 中文(简体,中国) resources ///////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////// -// English (United States) resources +// 英语(美国) resources #if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU) LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US @@ -2355,7 +2357,7 @@ BEGIN IDS_SO7_ABOUTBOX "&About Utility for SO7..." END -#endif // English (United States) resources +#endif // 英语(美国) resources ///////////////////////////////////////////////////////////////////////////// diff --git a/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/UsbUtil/So7_Util_Program.cpp b/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/UsbUtil/So7_Util_Program.cpp index ad1a537..57fe6f4 100644 --- a/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/UsbUtil/So7_Util_Program.cpp +++ b/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/UsbUtil/So7_Util_Program.cpp @@ -42,6 +42,7 @@ CSo7_Util_Program::CSo7_Util_Program(CWnd* pParent /*=NULL*/) m_FinishTime=0; m_duration=0.0; m_RuningCNCTimes=1; + m_IntervalTimePerCNC=0; } CSo7_Util_Program::~CSo7_Util_Program() @@ -52,20 +53,20 @@ void CSo7_Util_Program::DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX); - DDX_Text(pDX, IDC_EDIT_READOUT_X, m_csXPos); - DDX_Text(pDX, IDC_EDIT_READOUT_Y, m_csYPos); - DDX_Text(pDX, IDC_EDIT_READOUT_Z, m_csZPos); + DDX_Text(pDX, IDC_EDIT_READOUT_X, m_csXPos); + DDX_Text(pDX, IDC_EDIT_READOUT_Y, m_csYPos); + DDX_Text(pDX, IDC_EDIT_READOUT_Z, m_csZPos); - DDX_Control(pDX, IDC_LIST_REPORT_OUTPUT, m_RptListCtrl); + DDX_Control(pDX, IDC_LIST_REPORT_OUTPUT, m_RptListCtrl); - DDX_Control(pDX, IDC_EDIT_SO7_PROGRAM_MSG_OUTPUT, m_edMSG); + DDX_Control(pDX, IDC_EDIT_SO7_PROGRAM_MSG_OUTPUT, m_edMSG); - DDX_Control(pDX, IDC_MFCBUTTON_SO7_PROGRAM_X_LEFT, m_Button_MoveX_Left); - DDX_Control(pDX, IDC_MFCBUTTON_SO7_PROGRAM_X_RIGHT, m_Button_MoveX_Right); - DDX_Control(pDX, IDC_MFCBUTTON_SO7_PROGRAM_Y_FRONTWARD, m_Button_MoveY_Front); - DDX_Control(pDX, IDC_MFCBUTTON_SO7_PROGRAM_Y_BACKWARD, m_Button_MoveY_Back); - DDX_Control(pDX, IDC_MFCBUTTON_SO7_PROGRAM_Z_UP, m_Button_MoveZ_Up); - DDX_Control(pDX, IDC_MFCBUTTON_SO7_PROGRAM_Z_DOWN, m_Button_MoveZ_Down); + DDX_Control(pDX, IDC_MFCBUTTON_SO7_PROGRAM_X_LEFT, m_Button_MoveX_Left); + DDX_Control(pDX, IDC_MFCBUTTON_SO7_PROGRAM_X_RIGHT, m_Button_MoveX_Right); + DDX_Control(pDX, IDC_MFCBUTTON_SO7_PROGRAM_Y_FRONTWARD, m_Button_MoveY_Front); + DDX_Control(pDX, IDC_MFCBUTTON_SO7_PROGRAM_Y_BACKWARD, m_Button_MoveY_Back); + DDX_Control(pDX, IDC_MFCBUTTON_SO7_PROGRAM_Z_UP, m_Button_MoveZ_Up); + DDX_Control(pDX, IDC_MFCBUTTON_SO7_PROGRAM_Z_DOWN, m_Button_MoveZ_Down); } @@ -91,6 +92,7 @@ BEGIN_MESSAGE_MAP(CSo7_Util_Program, CDialog) ON_BN_CLICKED(IIDC_RADIO_SO7_PROGRAM_MOVE_TO, &CSo7_Util_Program::OnBnClickedRadioSo7ProgramMoveTo) ON_EN_KILLFOCUS(IDC_EDIT_SO7_PROGEAM_CNC_RUING_TIMES, &CSo7_Util_Program::OnEnKillfocusEditSo7ProgeamCncRuingTimes) ON_BN_CLICKED(IDC_CHECK_SO7_RUNING_PROGRAM_RUNING_INFINITE, &CSo7_Util_Program::OnBnClickedCheckSo7RuningProgramRuningInfinite) + ON_EN_KILLFOCUS(IDC_EDIT_SO7_PROGEAM_INTERCAL_TIME_PER_CNC, &CSo7_Util_Program::OnEnKillfocusEditSo7ProgeamIntercalTimePerCnc) END_MESSAGE_MAP() @@ -98,9 +100,7 @@ END_MESSAGE_MAP() //================================================================================================ BOOL CSo7_Util_Program::OnInitDialog() { - CDialog::OnInitDialog(); - - + CDialog::OnInitDialog(); { m_Thread_State = THREAD_RUNNING_STATE; m_hTriggerEvent = CreateEvent(NULL,FALSE,NULL,NULL); @@ -119,6 +119,8 @@ BOOL CSo7_Util_Program::OnInitDialog() m_pSO7_Proto->g_machine.z._Move_Speed_Gear=3; (GetDlgItem(IDC_EDIT_SO7_PROGEAM_CNC_RUING_TIMES))->SetWindowTextW(_T("1")); + (GetDlgItem(IDC_EDIT_SO7_PROGEAM_INTERCAL_TIME_PER_CNC))->SetWindowTextW(_T("0")); + ((CButton *)GetDlgItem(IDC_RADIO_SO7_PROGRAM_MOVE))->SetCheck(1); ((CButton *)GetDlgItem(IIDC_RADIO_SO7_PROGRAM_MOVE_TO))->SetCheck(0); (GetDlgItem(IDC_EDIT_SO7_PROGRAM_X_MOVETO))->SetWindowTextW(_T("10")); @@ -423,6 +425,17 @@ void CSo7_Util_Program::OnEnKillfocusEditSo7ProgeamCncRuingTimes() const char* cTmp=T2A(csTmp); m_RuningCNCTimes =static_cast( atoi(cTmp)); } +//=================================================== +void CSo7_Util_Program::OnEnKillfocusEditSo7ProgeamIntercalTimePerCnc() +{ + UpdateData(TRUE); + USES_CONVERSION; + CString csTmp; + (GetDlgItem(IDC_EDIT_SO7_PROGEAM_INTERCAL_TIME_PER_CNC))->GetWindowText(csTmp); + const char* cTmp=T2A(csTmp); + m_IntervalTimePerCNC =static_cast( atoi(cTmp)); +} + //=================================================== void CSo7_Util_Program::OnBnClickedCheckSo7RuningProgramRuningInfinite() { @@ -501,6 +514,7 @@ BOOL CSo7_Util_Program::RunCNC() m_pSo7_CNC_Program->m_CNC_element.at(m_RuningCNCIndex)->GetPoint(0,0,0,NULL,m_pnt); m_pSO7_Proto->so7_motion_set_position_xyz(m_pnt.x,m_pnt.y,m_pnt.z,true); m_RuningCNCIndex++; + Sleep(m_IntervalTimePerCNC); } if (m_IsRuningCNC) { @@ -651,9 +665,4 @@ void CSo7_Util_Program::OutputWithScroll(const CString &strNewText,CEdit &edtOut edtOutput.LineScroll(iLine, 0); edtOutput.SetSel(iCount, iCount); edtOutput.SetRedraw(TRUE); -} - - - - - +} \ No newline at end of file diff --git a/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/UsbUtil/So7_Util_Program.h b/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/UsbUtil/So7_Util_Program.h index 50bd49b..9ce8448 100644 --- a/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/UsbUtil/So7_Util_Program.h +++ b/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/UsbUtil/So7_Util_Program.h @@ -48,6 +48,7 @@ protected: clock_t m_StartTime, m_FinishTime; double m_duration; unsigned int m_RuningCNCTimes; + unsigned int m_IntervalTimePerCNC; BOOL m_IsRuningCNC; int m_RuningCNCIndex; int m_RptCol; @@ -81,4 +82,5 @@ public: afx_msg void OnBnClickedRadioSo7ProgramMoveTo(); afx_msg void OnEnKillfocusEditSo7ProgeamCncRuingTimes(); afx_msg void OnBnClickedCheckSo7RuningProgramRuningInfinite(); + afx_msg void OnEnKillfocusEditSo7ProgeamIntercalTimePerCnc(); }; diff --git a/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/UsbUtil/resource.h b/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/UsbUtil/resource.h index 731198e..51257f0 100644 --- a/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/UsbUtil/resource.h +++ b/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/UsbUtil/resource.h @@ -883,18 +883,17 @@ #define IDC_CHECK_SO7_MOTION_AUTO_SET_ZERO 1819 #define IDC_LIST_SO7_MOTION_CONFIG 1820 #define IDC_EDIT_SO7_MOTION_CONFIG_MSGOUT 1821 - +#define IDC_EDIT_SO7_PROGEAM_INTERCAL_TIME_PER_CNC 1822 #define IDC_BUTTON_DIY_EXIT_BUTTON 32740 #define ID_EDIT_SO7_CONFIG_MOTION 32741 - // Next default values for new objects // #ifdef APSTUDIO_INVOKED #ifndef APSTUDIO_READONLY_SYMBOLS #define _APS_NEXT_RESOURCE_VALUE 189 #define _APS_NEXT_COMMAND_VALUE 32771 -#define _APS_NEXT_CONTROL_VALUE 1822 +#define _APS_NEXT_CONTROL_VALUE 1823 #define _APS_NEXT_SYMED_VALUE 104 #endif #endif diff --git a/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/UsbUtil_VS2010.suo b/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/UsbUtil_VS2010.suo index 31d0facb1944313b3fbf5bc5d91f409d20afa75c..5a002da62d5eb210ea85eb22a9f1b3a777c11dfe 100644 GIT binary patch delta 3710 zcmb7{dstOf7QoNicc06>*Na?0P#*G@ke635UeV?9R55vphL1#4)XW4GXUatJk(8hk zn^>ctIe>gJ7NK#{Q$DZSI5<=JsJev(wV7Z`?7ZPcJd>38Rxt>VfL zUb(Jt8P7Jc!;N8?;uIgNRE2S1Y?@d#YLhq@879-%l2c>2Vh_(^x-OcB^xqsJNsOA@ z2vE{S1Bjx~E^#q3z&$`JlFFqOQiZfqS}x6#%7q*is@S96VeZ~q7kW(6-Kml!OMT*e z?0CH70|s&HX#>U{W**|U^>KW&PG=ECGo#=y4^;>i4Y78({Lr=so$n-#h6@i>&^ixs z%g#x%TCJrMmsXW8Ur;s=&-=0%{O|^!@H1;th5b3#_~hjH%yAjXSutaCGORJwSK=+JPXiH_gQ)jX^yDMB1U`&G^`fbIAYM%(Ksr9jd3Co_5y%cMn zryesM5T~px&I2P1r)?%54FtvR{;4|s8&u00r~FW&2a)>Jd)@O>b=|Wwxl!_`2H!zd zrD|?HsLO8g9#HtxcbQtVmW^b}$W?*Ry`+cpp@WM0bc#(5$`6$jxe>xioH*Dds#X>l z@~Kur(c_Ft*WFaRM`%wUrrY2+w!Pq!CHQae!b@VTnu2Gi%N8uS$KBM`_xVylOOtHG zymsb-`Au@5h_C(tD>t!n^k?!|bgN|ogUqCne2XWm+nDSLV$G&wZEF~oRWTo}_ZYFU zwpw)6>lK&!N1^#SISj))!B-qJB`8(v>vagDLMOU|&gcXoohG$oi#N!Hf_&eQ3dhlcUW! zjp5c{Isf62n)Z-L<>aX@a)plIL^0L%^e&=zE4__`i724Dh;CYK$)`dz31WyGDl6|a zO#ry6`7I6OCc$s8vJ6a$quH(t|M@Za-wFpyS^w`*qx>{6JNAu8K0;}dT&@8*>dhI>-LSF!Cn3F5?<6qnm-}5_BFS@O8bi{QW|`5vEXw*@KeQAh8QYE49Z3S=k-`)g9dDfm%V+b`J8@j zba{4XXm-eR@s~QPgGf&s=l*?7sYW<1ZFG)HSH<9}FW2ijx*h@Eea+5v7f8JAH2)|@ zJA)ZgwlrRvC}~d79$9)>;)a1sN|LBR?RiobEpyqlG_OjjQaY5rqvQ19A*ubfT}@Y) z^p5ZpWv-shYr!JyMm>JH$|pp3gl3@2&aeC1mSM)dG{)=139MaKADfyP}{-^*g`>wb#P43@fXcNv$ZC+W~9*AWRL5hF+tH^O=SpE(ATM%!3GA zzmFe6$CEHrUPQyEVqpU86Ggdgrt2oE({tT~x4+=Afgw~brJJ=%Dx;gViptMYX`Zx5 zdRkg4m1Eh*e4SsJv_uM`zZ?=SabCpEF|;3q9*A;P3gkzn=`8224S3!r+lI=%77g%$P!^3-YL|*gPpH{2Tn); zGq#_BS)wJh1iwuLZ|rRVvue(T0N!z@RmVigsQ_%*2uWCzN4i=0uuIr;-$r{raQL(4 zsye(qo%+%B7zs9Xn+eCooKM4al;iM=de*sQWY8tjbKh_-M%KE$h}Lq*!IpSgPa_%dR-x`)w3l$R zS}+|>0?wZfZMb6=B_)rUa1Cx~wjIU34fLfGbRdMf*s=8tlw!>yn1i!sLkJcpz`^D; zusF{KDR^md@GeR8c%(`WqFozFF6_qEE%NrCjyYOOLGM0SDwa~DS<(b)A;mxii{~(nW789bB)Y^$Cgpg+jAicx5mRTwPZao5U(Wp zsj&;?NQQ46WV3N-vhEJvp3R=Yph>V*^qus^dmCtB%dfDlXvqgFTKZ^`&H)cvZD80_ z4;=kB)4Y8f;Sb0+LN8k8@Qr90BkP4}yP0+<2GjG&5w_R)2#6Xe=QV*hwS;PW_cC@* z1)FMX()EgqzM#b2>mA+3t_K8p)vk2DpHY0xGd`JZ;;qGmx=o2U)WI zaouKTIID38Ie-^lga@(=8p9Rs9 zhT)a%5J*S$cO6|`j2(O*dWLWK3Kx|sL2_ml}Tg~*~C3cN*WWWJdwyHCJ|2% zlZnB0?OphwK4nmjCrsd}&aY-WXTuI$*UQ(6)}2$;PkPyR22aftNlGB{X#vHQbf3lJ zU(-Jm7tZhq=MJdWYpe6kr_6&wtt08=m{6XKo|)VF@!J^ xuEbEnjj#~zga_eC3?sY!|a-w7`zYJ7mW#+nAZ;wy>7 zDubL#tO^>ek67d;Tw@|G)+W{_1{0fD-&!?($yYUgr1_de=(*@7>DPYk?Dy|IbMCok z{yAsn%(!m+8eD{yi5!NANFJ_l8NFtnB}%E}VLIO3)6*mBycU|Lg&j+GPCA^u>(Iq% zm2AURk=HLyNjI!97~x}(q(n)Q&}}6TU1o=&5A_0m)Hp2;!@JZQ?9nJ)7S35SQ@#tx z_JOn5Q4EUL6ltkcDiw*IL78IQ-~`2KF=D)y*M2D|a= zl|idT=OC+2k^rww<^6Wqhk|G_)rwouQ9i*^mQ*H{NOS1FQVfh4gsv0_WKxM@k2%aN z-I_aU-qOBVl4O+L7kP=}(Q%tk5jAl!a9-;Q_qrJ({%@m1Ut# zBKJmuFGygJW|a-t7maXj-`5uvXMniqnTJTd;qB;l?Nj~fF`>SY!V$4(xC~*o&yoNT$(Q}rbIp7`&=lE zDc*a1sl~5g!IP7}iL{;{?}d4npdap>&POWt9GzZ_3m>Dn3dVs^>Q9mKC-i1`SJxDs zelPWGamsho^=H#Ixxp#gx_swKGq&7LMaa7)JI<9uJDM zv<8$DGe_&tv7Y&f^0}eHT;-!4xXWJy3x?)8*@!v2nHT2P$>HML6(2RN zWO!&BdkPUZ5VX`fRL`bW=3dKwAdkNP6E?j^Hk5KD?- zkCe*cx-5VeZQ)?+YS&j+O5H0$Oz`(c2+|$}g)>cR6&o#qW?I?0oi zq=O#;b{t|cSZ>zG)c)4UtdjamA9)7|m)nZFn;}$NNW$4#!1L+b-o-9oCFwJ{`oXgaN=riM_@mThSPz4GE)>!5aCxVDhPl}$|*pw{eQ zPKMbNHjYYR|2-(c|^v!}~GwVx0lGke6x-D#Lf?us;*TKQL;9W@5wKH@Lh zj|3_&9r>IlSjrcO@O^rv^20p6_ybRnV~EE?YPJ@lmL}^BdE}tbagPutHPF0HozhsKfHf#P{K1gAE+^IFTbaMgNLjT1e+e3+{HIw@9M zm|*ZFDb%AET^DLF!XFljd&l*b{1?9b-fU}cXmG4e+B4;C|0lHCg0Y1>8m$E|5)X#5 zU`u&cO`qAH>@aP;@^$Ive@wMDVBPH2*-P~DV&#EcoYoB2l?^#gzV#{1g!!yY+1fKJJQh?RDuo4}w(mX3Vcmxf$ zDj7b-`+2%*k-6Kh+Mk2tMzoz_&!gWoxP#_Nkct(lIx7}$pnT3*0~yVgV8)&Kkck_U zz+dfN0}OEIYRlbeVHqVFa!$wAaTpoL_)8uB(1 zpx%587BP%3fN0IYtYxkm3k8Hel-#u>HEo7hn`?mgT_IJ_t!*jYR5aJav~a50BBOBD zgQy)Bht$3!?qmaSy{%1T8E^C+5$3#MWtSDb>Q6C(G)p`+cw2L*@ zp1~Y1W<&c2v}D{fAs$aHkiD^b8e54G5$t)O%3J_5aB&y2KIG?4hKM~ONjlc{A)M^P z!)Z>vWlQb)98BIAGF*34&7LRwg3qwY1*!4$`(@&s5hL1ez>u&26BSY)LSI6ELLkA6 zV;EZiJ?dV@rdhDPjpdx+2$Uj4cK&*HkM+3lu|JT&-|6g;QKe3uj+Czm#jtvv#X$9 zoyKf~kvpJRom0iO6{71LcVWU2R-m1c>bZ;TwgJ!HWUyfsLLi|(VE`eB b5KIUmgc1f4!U*An2tp*ms&*|MWLo(zBD9GO