From 88c5c06738765d2043c45e9b3a1ae2170ca764ed Mon Sep 17 00:00:00 2001 From: vsr Date: Thu, 13 Dec 2012 12:22:24 +0000 Subject: [PATCH] Merge from V6_main 13/12/2012 --- .../unix/config_files/check_MESHGEMS_TETRA.m4 | 37 ++ configure.ac | 17 +- doc/salome/gui/GHS3DPLUGIN/CMakeLists.txt | 75 +++ .../images/ghs3d_enforced_meshes.png | Bin 24134 -> 32900 bytes .../images/ghs3d_enforced_vertices.png | Bin 26700 -> 36351 bytes idl/GHS3DPlugin_Algorithm.idl | 1 + src/GHS3DPlugin/GHS3DPlugin_GHS3D.cxx | 143 +++- src/GHS3DPlugin/GHS3DPlugin_GHS3D.hxx | 2 + src/GHS3DPlugin/GHS3DPlugin_Hypothesis.cxx | 618 +++++++++--------- src/GHS3DPlugin/GHS3DPlugin_Hypothesis.hxx | 2 + src/GHS3DPlugin/GHS3DPlugin_Hypothesis_i.cxx | 75 +-- src/GHS3DPlugin/Makefile.am | 20 +- src/GUI/GHS3DPluginGUI_HypothesisCreator.cxx | 2 +- 13 files changed, 603 insertions(+), 389 deletions(-) create mode 100644 adm_local/unix/config_files/check_MESHGEMS_TETRA.m4 create mode 100755 doc/salome/gui/GHS3DPLUGIN/CMakeLists.txt diff --git a/adm_local/unix/config_files/check_MESHGEMS_TETRA.m4 b/adm_local/unix/config_files/check_MESHGEMS_TETRA.m4 new file mode 100644 index 0000000..ab354e0 --- /dev/null +++ b/adm_local/unix/config_files/check_MESHGEMS_TETRA.m4 @@ -0,0 +1,37 @@ +dnl Copyright (C) 2004-2012 CEA/DEN, EDF R&D +dnl +dnl This library is free software; you can redistribute it and/or +dnl modify it under the terms of the GNU Lesser General Public +dnl License as published by the Free Software Foundation; either +dnl version 2.1 of the License. +dnl +dnl This library is distributed in the hope that it will be useful, +dnl but WITHOUT ANY WARRANTY; without even the implied warranty of +dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +dnl Lesser General Public License for more details. +dnl +dnl You should have received a copy of the GNU Lesser General Public +dnl License along with this library; if not, write to the Free Software +dnl Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +dnl +dnl See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com +dnl + +AC_DEFUN([CHECK_MESHGEMS_TETRA],[ + +AC_CHECKING([for MeshGems-Tetra commercial product]) + +MeshGems_Tetra_ok=no + +AC_EXEEXT +AC_CHECK_PROG(MESHGEMS_TETRA, mg-tetra.exe$EXEEXT,found) + +if test "x$MESHGEMS_TETRA" == x ; then + AC_MSG_WARN(mg-tetra program not found in PATH variable) +else + MeshGems_Tetra_ok=yes +fi + +AC_MSG_RESULT(for MeshGems-Tetra: $MeshGems_Tetra_ok) + +])dnl diff --git a/configure.ac b/configure.ac index 0241f04..01fc601 100644 --- a/configure.ac +++ b/configure.ac @@ -349,18 +349,11 @@ CHECK_SMESH echo echo --------------------------------------------- -echo Testing GHS3D +echo Testing MeshGems-Tetra echo --------------------------------------------- echo -CHECK_GHS3D -if test "${GHS3D_ok}" = "yes"; then - if test "x$GHS3D_VERSION" = "x" - then - GHS3D_VERSION=`ghs3d -u |grep "TETMESH-GHS3D SOFTWARE"|awk '{print $3}'|awk -F- '{print $1}'|awk -F. '{print $1$2}'` - fi - AC_DEFINE_UNQUOTED(GHS3D_VERSION,${GHS3D_VERSION}) -fi +CHECK_MESHGEMS_TETRA echo echo --------------------------------------------- @@ -370,11 +363,11 @@ echo echo Configure if test "${gui_ok}" = "yes"; then - variables="cc_ok boost_ok threads_ok omniORB_ok occ_ok doxygen_ok Kernel_ok gui_ok Geom_ok Med_ok SMesh_ok GHS3D_ok OpenGL_ok qt_ok vtk_ok" + variables="cc_ok boost_ok threads_ok omniORB_ok occ_ok doxygen_ok Kernel_ok gui_ok Geom_ok Med_ok SMesh_ok MeshGems_Tetra_ok OpenGL_ok qt_ok vtk_ok" elif test "${SalomeGUI_need}" != "no"; then - variables="cc_ok boost_ok threads_ok omniORB_ok occ_ok doxygen_ok Kernel_ok gui_ok Geom_ok Med_ok SMesh_ok GHS3D_ok vtk_ok" + variables="cc_ok boost_ok threads_ok omniORB_ok occ_ok doxygen_ok Kernel_ok gui_ok Geom_ok Med_ok SMesh_ok MeshGems_Tetra_ok vtk_ok" else - variables="cc_ok boost_ok threads_ok omniORB_ok occ_ok doxygen_ok Kernel_ok Geom_ok Med_ok SMesh_ok GHS3D_ok vtk_ok" + variables="cc_ok boost_ok threads_ok omniORB_ok occ_ok doxygen_ok Kernel_ok Geom_ok Med_ok SMesh_ok MeshGems_Tetra_ok vtk_ok" fi for var in $variables diff --git a/doc/salome/gui/GHS3DPLUGIN/CMakeLists.txt b/doc/salome/gui/GHS3DPLUGIN/CMakeLists.txt new file mode 100755 index 0000000..f8dfc41 --- /dev/null +++ b/doc/salome/gui/GHS3DPLUGIN/CMakeLists.txt @@ -0,0 +1,75 @@ +# Copyright (C) 2012 CEA/DEN, EDF R&D, OPEN CASCADE +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +# +# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com +# + +INCLUDE(${KERNEL_ROOT_DIR}/salome_adm/cmake_files/SalomeMacros.cmake) + +SET(top_builddir ${CMAKE_BINARY_DIR}) +SET(top_srcdir ${CMAKE_SOURCE_DIR}) +SET(srcdir ${CMAKE_CURRENT_SOURCE_DIR}) +SET(builddir ${CMAKE_CURRENT_BINARY_DIR}) +SET(datadir${CMAKE_INSTALL_PREFIX}/share) +SET(docdir ${datadir}/doc/salome) +SET(guidocdir ${docdir}/gui/GHS3DPLUGIN) + +SALOME_CONFIGURE_FILE(doxyfile.in doxyfile) +SALOME_CONFIGURE_FILE(doxyfile_py.in doxyfile_py) +SALOME_CONFIGURE_FILE(static/header.html.in ${builddir}/static/header.html) +SALOME_CONFIGURE_FILE(static/header_py.html.in ${builddir}/static/header_py.html) + +SET(DOC_SMESH_MeshersList GHS3DPlugin) +SET(f "$(SMESH_ROOT_DIR)/bin/salome/collect_mesh_methods.py") +IF(WINDOWS) + STRING(REPLACE "/" "\\" f ${f}) + STRING(REPLACE "/" "\\" SCR "@SET PYTHONPATH=${OMNIORB_ROOT_USER}/lib/x86_win32\;%PYTHONPATH% + @SET PYTHONPATH=${OMNIORB_ROOT_USER}/lib/python\;%PYTHONPATH% + @SET PATH=${OMNIORB_ROOT_USER}/lib/x86_win32\;%PATH% + @SET PATH=$ENV{KERNEL_ROOT_DIR}/lib/salome\;%PATH% + @SET PYTHONPATH=$ENV{KERNEL_ROOT_DIR}/bin/salome\;%PYTHONPATH% + @SET PYTHONPATH=$ENV{KERNEL_ROOT_DIR}/lib/python${PYTHON_VERSION}/site-packages/salome\;%PYTHONPATH% + @SET PYTHONPATH=$ENV{MED_ROOT_DIR}/lib/python${PYTHON_VERSION}/site-packages/salome\;%PYTHONPATH% + @SET PYTHONPATH=$ENV{MED_ROOT_DIR}/bin/salome\;%PYTHONPATH% + @SET PYTHONPATH=$ENV{GEOM_ROOT_DIR}/lib/python${PYTHON_VERSION}/site-packages/salome\;%PYTHONPATH% + @SET PYTHONPATH=$ENV{GEOM_ROOT_DIR}/bin/salome\;%PYTHONPATH% + @SET PYTHONPATH=$ENV{SMESH_ROOT_DIR}/lib/python${PYTHON_VERSION}/site-packages/salome\;%PYTHONPATH% + @SET PYTHONPATH=$ENV{SMESH_ROOT_DIR}/bin/salome\;%PYTHONPATH% + @SET PYTHONPATH=${CMAKE_INSTALL_PREFIX}/lib/python${PYTHON_VERSION}/site-packages/salome\;%PYTHONPATH% + @SET PYTHONPATH=${CMAKE_INSTALL_PREFIX}/bin/salome\;%PYTHONPATH% + @SET SMESH_MeshersList=${DOC_SMESH_MeshersList} + ") + SET(EXT "bat") + SET(CALL_STR "call") +ELSE(WINDOWS) + SET(DOC_PYTHONPATH ${CMAKE_INSTALL_PREFIX}/bin/salome:${SMESH_ROOT_DIR}/bin/salome:${SMESH_ROOT_DIR}/lib/python${PYTHON_VERSION}/site-packages/salome:${MED_ROOT_DIR}/lib/python${PYTHON_VERSION}/site-packages/salome:${GEOM_ROOT_DIR}/bin/salome:${GEOM_ROOT_DIR}/lib/python${PYTHON_VERSION}/site-packages/salome:${KERNEL_ROOT_DIR}/bin/salome:${KERNEL_ROOT_DIR}/lib/python${PYTHON_VERSION}/site-packages/salome:${OMNIORB_ROOT_USER}/lib/python${PYTHON_VERSION}/site-packages:${OMNIORB_ROOT_USER}/lib64/python${PYTHON_VERSION}/site-packages) + SET(SCR "export PYTHONPATH=${DOC_PYTHONPATH}:${PYTHONPATH} + export SMESH_MeshersList=${DOC_SMESH_MeshersList} + ") + SET(EXT "sh") + SET(CALL_STR ".") +ENDIF(WINDOWS) + +FILE(WRITE ${CMAKE_CURRENT_BINARY_DIR}/tmp_env.${EXT} "${SCR}") + +ADD_CUSTOM_TARGET(usr_docs ${CALL_STR} ${CMAKE_CURRENT_BINARY_DIR}/tmp_env.${EXT} && ${PYTHON_EXECUTABLE} ${f} -d -o smesh.py GHS3DPlugin + COMMAND ${DOXYGEN_EXECUTABLE} doxyfile_py + COMMAND ${DOXYGEN_EXECUTABLE} doxyfile + COMMAND ${PYTHON_EXECUTABLE} -c "import os; os.remove(r'''smesh.py'''); os.remove(r'''tmp_env.${EXT}''')" + COMMAND ${PYTHON_EXECUTABLE} -c "import shutil, sys; shutil.rmtree(r'''${CMAKE_INSTALL_PREFIX}/share/doc/salome/gui/GHS3DPLUGIN''',True); shutil.copytree(r'''${CMAKE_CURRENT_BINARY_DIR}''',r'''${CMAKE_INSTALL_PREFIX}/share/doc/salome/gui/GHS3DPLUGIN''', ignore=shutil.ignore_patterns('*usr_docs*', '*CMakeFiles*', '*.cmake', 'doxyfile*', '*.vcproj', 'static', 'Makefile*')); shutil.copy(r'''${CMAKE_CURRENT_SOURCE_DIR}/images/head.png''',r'''${CMAKE_INSTALL_PREFIX}/share/doc/salome/gui/GHS3DPLUGIN'''); shutil.copy(r'''${CMAKE_CURRENT_SOURCE_DIR}/images/head.png''',r'''${CMAKE_INSTALL_PREFIX}/share/doc/salome/gui/GHS3DPLUGIN/ghs3dpluginpy_doc''')" + VERBATIM + WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} +) diff --git a/doc/salome/gui/GHS3DPLUGIN/images/ghs3d_enforced_meshes.png b/doc/salome/gui/GHS3DPLUGIN/images/ghs3d_enforced_meshes.png index df87f7751497e8b4cc4dfbf2376f9e758e874219..72ed7779bee08389e41d4272a1bdc6651d21e858 100644 GIT binary patch literal 32900 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 literal 24134 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 diff --git a/doc/salome/gui/GHS3DPLUGIN/images/ghs3d_enforced_vertices.png b/doc/salome/gui/GHS3DPLUGIN/images/ghs3d_enforced_vertices.png index 27768e4259a2f76d6017ab6ef7b984438f7d3a23..e86a73ed131a806fbf9ba39e2cb12213bac85110 100644 GIT binary patch literal 36351 zcmaHSWmFu|((T~x?iMT%+zA%k-CcvbJHg#0xC9IC5Zv9J!3h%FgY!D~e&3I`)?2UX zfoA4R&zU1twRi1`R8o*cK_o;3fj}tIQer9~5X3Ilz$YH99b}L9}Av4X|EeJ#o zk`@zD^UOZg|LTdY4(|FY`%(HR1XNH8hbi?VIHZIOUPUdF{2>bQql(&3bm1R(IOu-r z!r0Iv5VM+)@LES@A6$#6q2Ut}x>mWi;wKf{-M?A@Kir`%hRbI4?27zfr?P!=T}qT{ z`$OC$kJ{U)@3Ro#|8wYpVDjw~xR*NCQtP)+K^d?6tU6Uop=>9ChU13PVX}utJlPPRxC|u+`YhzVf z^Z{d>f~}N~>$=c1wQ%ptXNCR25og!8edm#BIHDjnnBvBN<|gsYm7^cQa_oO_n{zU zAYFmxOmak5+Cn<3oJOXa|E@fn{VtE;tf5^Y|Mdss!9dHhds}Eg4*~*kD2&rEWr{`Sc+t7xW{a zN8B9EWzrJxAeU&?lMXbT&YaQUh?E$O4F{pJmR3aJu8F5r(~M;k3qJD9$=&7Oo8azl zAr2k8@6rhV8#K)7!=awp$7%_c8LCU-yl~oRUx!r8wXZRm{ePH^M~QsAN;?Ko@_Tro zS72*@H~YjzRIQ}l@NKm=I4-NfxTrUv+HOHM-k7>OfUnQdAlur)RNa*Pl=3Xj_xA;;hA zTbA!ZYj3${(3Y8D1~rlz8n|CXMQ2;3vBF=`$OOfnCbP;kYe+jfIz=MS%53XNTFly1 zC^$*mZRM3DV=7k|mtc4mv>|v`#`s1R2()2-^O!?ixx<**?TgGONv(3}HixG~Qw%n+ z5@i*hwMGXP59|)v>MPx2P#J6XIQDF`TdtI05Qc{Folg5bp#LEtz(u{h#uU1?FxAEG z_VkK8z{B<6w2z^Y&vIVt^17ipUaT6oX^#^!f_3C>f&K`()Tm%|>66jqn;sRO=WyjC zvEOP7uDx`8czP`O@dKJKCr-OkQ*;LdW2D26h%X1VF`K~?!O3~>XGUB!_qSHl))-xF zf4E+HhUR2+pGEokU0c4yhB2AC@ey5f@wHN`H8xjj6~&R3PWkXqQH{)odi*oHs3ojD za0%&$)pX0{a`}^P%6({a{m&j|;62rJ^6~OLnz`m?!yJY13Eh^NLUY-NrzdCUz`Smu zzP>)klci5#P}#k<`|02o>Ki17$4a}O3->wv9_XYP5JC`O3=E9c$*)-@1?sAo^f`#l z=ym${r(HJWNHG#rY;0^Z_2x(!lM*Q@NBPU?Jw`L^(FTU!k}yf+XsC1=ErViiU4b=l zrSMrKg(;yTMWL@eZUQy11?qR*uynmi&B`EpixeBSsVbrsUou)b8KZ(hkL2sN_cyVR zOL611H&kN3lTK5P7g{P91WBaLK1moL)`1u6@Uy#eG* ztw z0tT9;xm51^w{(LSwDE)A(#e-kAqeKpuP+HXIVcUnhJDWobDgrfPJh=W%!>WuI>z&Q zJ@?r0YpOzb4m8V%%)X_cvz;40AeR0Oh`4B}9?(45lvvu&DN}A>s<+Rr=Z7?>jT$xk zqM(3!yjUJwSV)PF3|lIztc>yPWLXk;R_?PVu1P+R^4P2sEkShCMPF){x`ypAd74@A z*xJwpr94ImJ=aZR?68O;^dmT_q1VW9;jp&J|8@A`9(?w2+xxdy*4P3Bw$K`VxFn)k!q=cG@=!Oj%MwAc51G|33OtE*+2 z?Ogp3%QgC<#>NyCTg;4%1I4oGV?5+MD}4|&ST$%vTyWjK?SA}W$OJL_3~4tvvgLL@ zm=?SK59qyI&4(TQaNPErJq$G+kiory9-ID1R#sM8t(L5&?f$P%BVG>)-1dR-5mtnR z-RPDToS=PmsCNVD{(aS~ZB~YX31nFi zCwcs&y0PBej~j@rRQpmQKBD7vyg=`I@y0VRXxTuJ!{v;%!z#9T#&(_!J!mrb$mc(oD0zUV`I>*`^@a1SAOLUdIM>3E`m0n~-grnH7m?`-F zEFVIz%a`Ca?>Ky@Aa+CFiIoSlVO?Zk$+<4k2QCC-v<7G69 zdT9pjd5+j=p?Bg6p$BxIjI!yJd>;|-f=^hHKnDSYX_f8=mEYk}>;}H?>x?I)rA2La zdKW17!=jouq)qc>ZY#A|mCJQj>$G7eV(dgj#`WEwfk{Sk+m&mXbv`8W^Q@%=R_6P8 zWFu*4e|PR+jp$f$E&Z&iXOTP_1SJUU#ttsy&xlA!Ml45wQw^*$9o{aA7yNwyA|=yn z24=(kd?kolHr?p#SJT6vVX~{8aI(vrXuC(-J+3TeJ+*;)5`6rKjrPCfuLmf%=Zje7 zR#q!bK4?GTVCrn~aB%8c$4NT~oT_L#l`9@q%ShfBb=-5J;UJ2x_C?scWFL_v1GeJ* zp8bb%4W}q{4T+$_I%DZa4GUkfRMFR4agMp{`(4B=@#SfNGegee=ngh~f8u*LPfM1Z z1%Av>eFdUNavgTz?@KC9rnY@_aNXsTz$g|x5|ZdR?k6C+CE^??9@o5_lij;q(p7~3CDSVQ-B9HXcWc({JSI->O-d(c z6fFAuCDVFij;-*HCFJpVgA_FQ%X%;^3k&Mty+Vm0e1)vm?+*IAsT(n>N)rrQ>wZQ! zkt;y-hoD7^OL#u+`P7l09cwa+JG?C=dxFExOQEijl%|U}5$A>oi%oylJ6 z@ogg){)m@p^&MFHFtvPzF&`X3SaX96zfm&wQplORx8)$zCayKw`BKJ7D3{HHvAW8O z&uvfKsPjpqT4(YA6x>VE@Wbvji|1j#J!i{!_1gTwf0^m?qnV-Y)3xmBMmt{K>tA*S z{{pYEuWa9C(%HamZEY-BlM#`z;_eElUqp#S#g#{I0&7mx{< zhoPA74Yl?gI-s5@68@{>hpUN>372UU7;$BMK3BT8HfNZ8s~4Aj#4r>x)Fz$S!!XoA zV9zP5n0QTlOG_ij$jIP#n;LjRe2n_CT&;h#9TciJKR0(dbW&3Q_%dW7E^N&j0~k=H zUK3&#cR=J(nN-K$O~@hG$)@S%369t&3W`?eN49n*+q8gcz1~X7qVHC+|H(cR5W|`)6Y|gC2jiSB)pRCArB^ z*ou%T1)S4J_0m76z}D(jnIF z;mL^aJnOfk>(!7}8@5L!B%u2?*zsF0R`2&P(=8rCiYw=z?Q-GYdOlZ`OUcR)cBQ;Z zDRxJu8+ecMdaU+7Ml;$eOa%61N*&D*VZ=6B;wDCnthis^@6hTignz{8=F(`l0Ix#hM@Y-fl$u5$fh6a|*zY&&up4}0ML(DeX(PlVcZ^;7l-u|+? zpKZpv*(}$eBI92+_6vgJUI+0E2Y`)6$@vKfwg_X{L2vlSXmZBuC!OYjv`>abWv%#z z0e3ikef{GRo0;O^0m~DIv$dvt*>MkUhG_MR=0o+#%qGX9bi@4lKebMK5*9w5p3q(E ztr*mNBrdkV&Z|G)H22kgZMIy+)NQsGsgut(4<9SEX(rf6@*8f}e~nE1%60Q+B(-I0 zg1UwrLN>8wF}bk+nyNP(-Kj$Dqo93L&Aq zbf{D56>Bhf>VD)s!k-J7!=GLPnB;+m|Y}qoeVd zcb_+WfMvi0j7IRpgsxVHCjz)R9ZwC?;aa7xBF?4`Hw6}j@MmEId{tt6ba^+0(0c)v z{;+tJ1_e1e2!PZ*LDN86uoMx(ZK`(K9_GuaS`+4 zct>iaMjh+JDG&}t;V^(^w3@6rxop=XMn>R$oAzxg4PGHEGl!05i)QOYecJi!&rXtu zhEJAF!Q8sD_2MoI<@!i&*2|D6U@IIkh^E)dk8M}C0T1}m6cz4lt$K3Xtjayx{k_4!dqSK@Z-WPO@pvYdtEw1+T1r;1 zXI3;!qPyyj1gF-Y7w|T^8`!a~XSUuEsVMl0t?gk?#mt>P2~j%66R3{M1m=2iKHCaN z@L~uar2oV1u)W2gi4Ue#$Q2WAvM#PE`OTEIc>kTflmJY^?>=x&cK^k&u>a0xSt%he zT)@Y_Cs|QY+2VNsL3aIPRDU(hLV`H`t;+`GY*TrUO&1+veykEscDUju+DLZ*0@*3! z7fVk~S9!vSU%e=gZoCP3dGX_#)u4RkZhsa;Bt$RsipOUvfj!&>LX^J#K6G^S9x|#Q z-Gy^@*Iaysw*y@Ub2udQ*QCv#BsQm~(Zt2YEA{>T{nLo(Y+0=4J}?^AeQR?@wOc@M zxmXXCCfmyS)s5WXcFqmjJapNQL_4Ng|9scvu7GOs!7VGOr zF>_Ei1qDHjA*O8Kjo1ix&h~Z~btxK0{R1|1bd=fQwch<;T@`DYA;E?YJ zgR=-U;CfyTu1jYvGp@DGZQbl%iDD%zIS5mZT=OgM)V)8;xbj&x>P-DoSsl^Y`{M~?%*MvX@MRkEwR(?_kFCCsY{J@1tu|^k5S^QWm6h!=a=RwkDKfoQ%B>X^~)f`&P!2;L##YvdKk`R=v8$I_sq^5@X zc(Ee<=5V?QASpiSa7Y^1lb!@w$7)0e1`7X+a-Whg#l*#XmzOnpBtRVEkyNsourk9h z;^XOS;n*Zun!1R`+CcCAGiX8VLM4-v$mQCAfim9R%MRwYpLy??f7!0tiY@Y z>nkGj9Jj=*=_`+oZ_Qh%TAOD!9Qed$-(MxDPV~$SB#gKk;E6!&erBOf*%rwN)WmoM zzjjTQoGj#-SH65ih@4T6soaq6LR`~Sll*|dPi4da09FiQ;ux31Y0=X80ErFktiDA(!IS&s$ z&`De{^B_b6J3y%yhyy1PvNKAg!5USzdmX#X%(((DgZ&6SK928Wh zTN=mcZ|tOLKx%JpQ3x#YuC6Zla>FeXU1$$!qRi&-Y-1f%VDFB5dK-}g(cVm>G*-rh zMcJbD!}DV=u-U&?BoWb~M9`Y??mLSN^KqQ3O-qm(<#8y4R}~-e&N|IB2tEElHBLWv z%;~%DpVRYi-8KDliCf2joV5bOh>!hAr&=<)0bLN!$R*p7GLO1 z`oV~SgAm1fsVpd81=Vt?kzS4lYr&fH<>h62{|u!`hB_LG_@UTJ6~C(4&rg3BPZ#_v z36sNW4V$JYF;e%ZotKy`jJ#~t*L{$}#m=pnS~|t$QfR_x;sj)i_(qQ z6=z{*7o^D(I^L{P6jYN(h82AJdur<6Kiv{gLRq{<+5_j#9Ej$_f%*{GjW#y(^C65f z({Vjx$tk>U;z`9u&3Zp+rD`F)_1?68eIW^!GQlyA?k{0)H`!)O91qzw*ms>lT)E}= zlNL@|Q(ZcuS)H5GtnZy%tb)bf%&MgEj0kSZaGR_?5wi{DkC@kY*Z*Lq?6k7UK}jpi z6gzGDgHc=)l~s1eWd;Y|1b4zW=MQ+G2M?~su5Dn{r7sN)1*s<#3ChEKRKZSDsqbLX zt$4zo#xSj`R7$ruT3H(pV&77;pAA)bB0L?&nEF$kK9fG@%9?sqiXFUmih!>3e)0~b zM;D)y#Hsu67qv=-1EZWNaThc1!ejB?tY|u(KP**Ur(@PcK{Hpzy+dIum@A}kqqPPi zWUWi_LRnLA3mni{YEcU`BBbMPH#UQTcmccH)1xxA;kHe1DOeQgW6{?a2*3@Eefj276MBEiOrdgRPoVMh-+jPn5(B4V zvhg#-n~zYQwSM_keXQwvZSMM!&X|oWwNY~lZ=6d^PcVosjYKzw{&TqAuaBHRLIg_E z=vmFI8Ze21k@zMQ`C;sxVM-HROb&9ln$DdSrc#9O$4Q`SK4CC2-d8$y1frK~{Siib zN&4}Tjy$eazmZzSFcU>m`jE1(xR~V4sVENG>#Jjo2)&Pbcwm(hBb7n3FAT`&IAyf{ zHkHOqI5H+}(mH8GeuNY>!$p9_Oy96?_XQ&&sQEdagu5k|1d4byyCeN^c2JA))E4?+wx%B8 zyIS&-6hgNE9)nr83ld<08eY0>3C`E2QtT>BFxiaqNZWI%eZHmG-P(pwC-TDeMp9b% zizNP@ILivaBNO4TqrxZZ#^k>EC|ZE|U|0h6mmtYjN8-2wdq)QEFb$Ws#21!9Q_<>r zKQ0)(7JFr#^OJ({Bckj9zd2jLfsKu9%;y%AeFW|AlD4)HlY=c$yerT>X0_kk&*}|k zoknK&q*cXxb9;9jk?HKEd#lpI-@M$NtRt<~cjGBr(CYlf0vpE6o9msAJbzG+UhiVj zDE;9g8CB~*(R9^*vR^WFsrmN%05%KPMLjRDDj@}f*{}{$l}3*KHGsE7E_VXG>eF#} z$hNx$OnZ$H@lTE$p5s5+@WsaXa^M*}w)w;gd6n*0rhlGrICYEVNls#?G3 z!248k0maZUMmz4EjXILsFtU!mKb-M>YI`Scz}$gph=EC2BhZn0OMGPv7g+K4zf^pk2TvAY)4SA&KD%ong$oS&(QS8AGRmZ+wjicnGcSgV@n<`=VTMBs z!1;X_EPhJ1)ud26>e_%x5F1dXQ5?GF91kJ}@gWf`JLu$57&6>{C^cEFH=o&nWqNTV z6*8|*O+~rsC4rN#gQ5-pT)dVllEiT)V$wXHDn8}Q<#{^NM9Zb1JW!DEj@S@EpOpPe zrKdX|E%bD>9IKZ{tVbg~4XYhF&%}A7JtJ;d_W;?&qNQmqYPJo4@#L&33_ul5xT^GKdXATwJiAXW^j%G4|&g{r0e{ zz2PF!@cW4P`2I5GBFBeI3XAu5|0e_>LKFA(C5A;KjVY3hXS**fDnchA34M6rK_=!v z2RHjs(Yxb%!i!UPny0VWGT#8^& z;x~H#W57}|yZShK5$eNo)ln-pjaz$1$o$GWQ8?f`SV^KgZg!Rdm_WxpPA25yOr+ma4+ zRlmn+vuw1~eo^?mxAEQ1 z$;k;orcHDK9P)br3463$LuS2Dh5(Y1k`nv!g_5e_@>LuJ>NG%;sgmgQz9T-hY|?48 znum2coEm(-VD3wxmXVPfsRE zlQtQLzUHygoRzgc|Dl52U%-&Q|7iwyDj|fr#O%)DFOEPMcRyL4A&f1&c0|l{9)CFM89z^x9ZBv%U&Y?A=}1CvM0B*I z<(`u3@eD>zyQ}f2R(O5zPtD;lW-j;#t5BQeYPN2i?wd7}##6)S9X2vV@Zt5&LVT8# zdc>(7h1F1V@*dS;;g=MiQug@ShWbmR!^4GS$T~WC=jyc^=s$c9PU&c0y6P$TsO*;- zyXbgNE*n2-z-O+Vl9CdqHwR{J_X(}f0!E;>rxS-4pSzD~ zOuA89@ozybTi!&0p~CZXQw90?pe$~Op_j*-I;(k_(Ym(Kluu#fZ%z2jH+!&Tdj8o@ zyHx6Jbsy#Dh`C7Iksh{1&AndAIw*cMo=@Fl-|l?;?iJ-q;@dWlMqwyUZXLIh%Afo9 zLuujgg9T4!8?Gd~kcTw`8yhCA0`XV>(vlM1glhbSN^K-*X=%?tLhrr6@EAQe*LxY9 zynF+a(L-@0(F+R=9qv=PuSD`$TrS7)oI*ccMeB3$ewa_}ja~Nd%ccnV__eub4^kWH zYIH_qqq!Yu9;+zli)nivD(YwC;oy|MwjF*$n>9}|9wu>V&wg9~Gc5nAr{4BQhRIAo zk`WH@JEjJ~^dXuC{xCNOll=w#;Yw<1&_%Nm0q?JxNi_&qG}{a1$v}#HWO{nIdZS&b zMS;ZPeRnWAAvrnr<;BG+13%l%(GvxVagbOaim`+%bML zrsm^NTcLtYM%VVAlD_bmMCgz8sgkzcr_e>qs?*nhmU+ODZ+3>qJEzr8Gpue+z27hC zI#s4M)Qxz1nme1&op`?!B?N&k^jMcK8?}UT_&oa7d0lGXk`-Cp#;}#JL(9r6eJ^+5 z+<)o0GlFw{&b56Xb|j_b1(2#VqE}Y%0VW`Ol?)d*j3O9r&)A-6ZD4rsRXiG$!Wof~ zVF~Od4!b4nB8m7ucF{1NSY3E?l&ae^-SZ44#=G8*Chbcqw6TZ!CWRZGBq5K9cQ#w? z{hf%m2|T!L9{RroTZn63ysRH#UGv9pl8|k;I&9<1*L{o&gAM*v&3{#PcJ2(Cj zAq@Z#Qe4+sZT=XQIziO1_Cfm~whew+W?*Ufdu1*4?HB}iQmL+8gCG3MiGTNJRQ-4n z<9gh^aZ&5)3|Cn^T5wrkPTRJG2WBgq;D^C&`a%z?w)S~<^&SWA$%lg(@$!pICaN8z zfSlola@E<+RnJ=zhwq|InDwc?RVO42)w`AlI&$AXOOLX7!WVxp(H|>C_F7wW4}WDN zi+ks*udmM*L3(L?Ho%HEoh7T=<{4hi%EnWggJb_8tR!y`>qGbV8Xj8U<9g(c&K1il zpXZfP$C!*u1yi+DK|DNR$J5%mGWaEEx@LDrRNSNr zL}#OQ{^5Y_*<3JXI+Fw;Gdlb1O?{JlSg}s*%q+bKD#$-5xs{ry+%n~ueuT)%eLCC9 z>k02{vtMlgJSGLbhD}NGj+m4Cmo!NTEboO3pX*VeVwYaf$zy=Y^$+QZW*hDc@}JU- zVJ%q^zv^^eu7=5C6gJXy%zo#Y{jT_Ex%S0uDT{91WNT7z1$7)Z{t+8PR+~JfpDF&S zMVIG-s=l0iic*b*=M#-Q|7P$9i!0#{bD}?p%Cn4rn_0a^O7FDVz;Hn}Qq#pw=RqT3Rdgfgr@zc^?Q9l;7s`Ff9WlkxCDY}yBX<>@`U z;`>u3#XSV;;HNf&y0rtDkNCti%_b<5AUB|g|F)j2Rp-nL5-ju=qY%!FN&=B7dw=`D zKq(ClE``E4)kyJXSf+w4)pw&lnHbNC_TnbBycl+30f*%sWq7rPSXOBipAszp&`VCu#i3DUI4*{Vn;#{=TMF=wU6u8kQv&I(nG;#1 zc6XA8XH6(0-ch#N|ZTsQ^ZF|=G zCe`iJLOez*Y`XQlC0jv$El56-L)6I$qyF4n+kK{yT9ncT6c}Ga_T>xV?$cdGjH883d3a7AZwe$t6I> zeW=stuS_u@*5F9do$q*7W?l2A*1fqig|6ZGEKZg42&&X;YEXqg{!HVp*L1wl z`JfLH?sji5T&w4w`o5*r?V`uaOBOxn1_x^LmUDFtzf6m?-8p5{xdR4T=xJ5RRVA~b z4O_NeIn*c?=wr$9r<3(IcK_!y?)0-(q;FRUDS5anWEdFdwP(A7vI?f!^`5MPPnIaV zdwa!baMB?OZXO;M7#KU1Pqpu73Nw&YDCbA)_hc*aixnDFw6vw`Q^D7Qa2w}&w>S1d zlw!7Q-=XPHm1;cNGF|WSf>4R6bw>#z+HjDLU=cm`|IcjQN0=?F#ly$LImDSJ1dbp7pzqH*6 zgM^NSrCNO`;*}SCe#`8ci#ZZD))wIc%uVn9VP3$O%&1=lit}U$XGG+v>V=@ijVxhx77&yFc5D zVI=t!5d;6#q%l@qfxv(L87kMe5Y5E2aF)HCziXpe{$XXr@&#p*V2`S?+CwWsq22**?}*>jaFE>$6I8( zO-=0dco!_`;>78Ey6wFwlGr)j`l{^?;Fu79MS;+uVA!3@M5+mQ&{1y6z{5s>kx(uf zC!&DQUEhpxf9=<4w0gqY^`~|~xHr`GK&h$;N=Uvze}zL9R&eK{N>9#-g-}EjR+thk zVcbYgx}0d3-fh_maM5v39u1k8kn6Y~Iystcpsm;pJx*c};Y_CjP3`87pkvL$G_<(G6bR6zfPLnPa3k20hVUyYL7O5$r(*Ty~cp# z-`8oj183N6`QD&--yeqpi3_B)miXj~?B)d3FkY7fqqmnw9+v|}+b3uCH@;`?ue_k0 zJ(_g6kSWE?lEj4~xOu^O_BlWWpgCLN;SfV6MB2i}2K`Lx(c)D6L|5Ps2fE;8T&AHg z`74S+Swa`(@p$%k3&6gyCGuI6G&H!~uW$SfXdpH=d*j#PlUgBa7;JIlNlCH-oAm03 zx95w3*`M0?XMU>}?D(+{7AG1VS5HJ*t&S9O7Ff-`ubi8J#=>UVZ(_v%ve)|dXco)I z{j4wKYOl_A&^e8yXw>@9t@3%L(8K86AJh}{`s@T;0FiGhgQoFV%IJgBg+ZlW8zvr; z0eU4;@ySI$Cs_fIFsl58h=?c#jBMTCVKRa?virA)shoClI=TdU*|9Fa3|3PEgtCKyx7!j{Jm~X-#IynCKd461;`tl zysDh!QiYw+S!UsiMUx36Q^(`q(rKp)Et_BNjyW^zXyeF+SMUr&G%Czj|BV)_=@Unz z{RZNm0ckieRVl7eVJn2smW-J@Hb*e|(#^2xB@h()+&*>rsA6F#qRi0ZSR z)7o?G>!(uWU|5vCLhU0xB)? zE_tHLw@cC9uHg+kVx^LJ%wvy`DdRS-;_OoB>wI{O;6l&zl$6(_jS4(rW#BjMed&*s zGq}rZ24<=4OgqQUn0zU%Zp7M~Rp$krXL7b5|=afujw1VbSq z*Yi0TkBd!XGeuxgQ_H4pkG?+($>p*3U(i;%~W97v|4B(EYDjfQOaxSMXzLqSCK)$I*m_GPdh z-3(x5eD*@DFbElYTQ&^XX)6#dxVttPq*Y7zy^^jX(>&nl?C1c2tee(~iHd++fmZh; z--pZ+r=uC;gTn3gwwolsP)V_ToW@`%IMiBP-owMyhObu>?9+YY<4Dtj&x}*K0t_pETRUS# zzYEILZef&>t#S?Cn?lzcvkTHRB^MHqMD1z>B;>@hf1LvGq-xL0BM6i#6M71Vrc|Nv z2^5%DQxi;T-q7PNube+=QKt6sNY=36E10pPvk?SplG(q^DzTDCE3vZOYL1QUCH3{b zf1`;ZiwCR^F~2u*7MJ}%*ZXVCclNK2Ym6tiW5@E5PkTQrfP6gFhY!%*q`Z)sB^a2P z-wr0TAV6tM`e7|w{z!J<#?W3P;qKDh-6~OVy(;$LwP`4@>iN@Dj^PvxjwsCY&K$t+ zSeTf#f5znjh|X->KZGJBCHFfOCU9Ut%=hi_YX-{>Cx9L;eA1cpYn}HIJJ{{`qN1aK zOBqIk4t&r|vz=}lTEU8B41N%E*8?$##bQEBLSaNOU4V>?%a1b(8r4exMf$?)&~IZSKGu6kLyev$?FC9J2fA3IdQ1 zCgJy}H#=S`4+fkE3J}pW+pb!dIygkXd;HVYmcG9-U*8}lq`ILY;dL>~OoPEh9`;+t z{xw>4m>-*9p>q8RYdT&K<4E|&w9!EOzX@=??v_7t;qtrd99uuPY}K2P+};ZNwwuDa zpRPxWK*6zsQDC8b{a%e&@UI@jPzq0K-SmjNRsoG*a3VF8TKbnO>2k8n$MGi6?5uL- zVBOx~)8r<%&63=U_iuPiEG);{cp(;_133tO4vXpBSS(tFeEBTTwCOgNgZ$cB&<5E> zm@?q?u7=y$o-HOaBK@B43jpqth3#VMfJqZjPMVpUQ!p?f33z{qte-Z&0MvO!?}2Yz ztZAbo^rFCcOT>DU+N}+k9#j%YDJUF#3O2%-V1S;5N>rGe8Tj3)|5JrY6k&+w5gnIJyYWt3`CR`V)#~!)&Got`_{R(} zcitA#@dv}93}xUA7Xm_gI5bi*An{KlpBdrv_x#`5RxMF*TWHEe$Dd2o4XEk9g5Atv zhtqAbAIujC)~a(qo+GdkGJpdC#)`e+bwAy3=ybIKNSFggZCA@6x4xU#i4vDlD-cM} z_Stgn0Z}U`)}D< zLD)X&K#`~LOyaT9m`N!*Zx6v~ri}P%yA1D&m|6m)X#aVG4>UBpYfTkQlig0eMl9Ry z7hU}YhN#AX{xoWh2~8;l5#Z5!N0Uou8m&}8jyA9AT=0vEfV$ZWNtHT8rZ}v-o7w6{ z9sd51{t+?R=0SjD#r>g>jeynCJe=_tts9)UvgJ%ZM2TXaGGB~(Xo2IaI_C@|0jtPh zDEVv>m!fcwFb1VYIb8$pgLL@b=uj&%;i}A%m0Rs$Wm|r3yq_b+W z(fJe+egl!jlDCi0wIP}_tjyqhDyB+6-yIZB08?uIu81XHV&mf&!p=>KFcXLHAAvZ` zXI^m2ikFWU;2wJ{**+2*EJDD@hUGKRizwIagZqCa)iY;&KISkr6ynooRTZ*mFsCRp z%eOqpusAg9A0AF`e3U_bzPVM-rCPFXRH|5vTJMoS(N6gyG|vf{Lny7fP30pjoQ+wP1(2r$IS^yCT`1^MzZr5+uBCiSP2c9}xt?HY0(Uqe* zk!}VCq~}}X-_p}tPLYy?*sxo*$IaL%xViBPVzcrAcH&rKX@o#@|4ynEwLC)lP20Jo)wwGO$po)LsBU^P&0q#|cQQ zEj`~SEUJT;3mh+$M+;xiq1Dsa{5z}jZ9v7$ zC#@%Q<9t7Q&PW054Uhn{Y>dQ!0?@g>0Ro-!zYS?lqFP`!Jb8fifG*U#Bo{X7Wq_J#nm1K!byP_{iQ1@cw#+ zjS;d9jjSF~M)=>Mq+GzTQ~+%F)~5>`wF=zrrOK5m0#^C?nLoEIgrl0@|5Nq$5f2D} zT=_b|$x<{_X~*Fuy`Ndd=hvSY2?9S`$^GX(^gX*wq;U<12xAc-uegl=899-N|KHWl zt|VFZMijL~*ngWB_U5)jpD$siU_d?|K|%aGMB0MUS^s;*`|baERR=F7DNe!n@n=WB zV^p616NY}fEB&$-gQx(;NH}eLO}k%Wv(8%?yq|`6;BZ7niPflV-liWq3C_R#L~x1K z%ir$2e`5N)N<%atb~;;g1MXL#cp+GS8m+HKADlfX^U@rR-&ri1W^#ADD8=tFWm@OF zm`ZyrdBm-~uDP818SVE&(j4x(K5ku|+W!4Xr7cduG^WnyP{bSzkMnf|5Fp4$1o1o# zD}#E-0$zI8Hp^8dTZR(d&xz-za$G9V1oKpUznYsDxannQQB`Y0(;Z|jqh91OsG zN^Wk=nJ&NV`{9W$!Tpq-(ma2$?ymRn)}^Z1c1`BfhkM=9VRE3C0!hF2W(o|UPt-VopYB6}@{i^}ciy*BGJSxAo_K7(lEnEjZ7-VH zpli=uTtR^=422}B(8ID_iXfZ*X)vi+miTr+kNzf+2ZS#V zOU&bm-e57=mqZ<{&1J`a1aos(WLg@>1k2x><~eiSY)EWKDq3Ee;u%WHl8N^@Zkd`M`N9+@6;Ma zx&v?5!!8b=0kHIYThoV(`$7*rxuqg zAoZS*DQ^(yf~LuTU7J){zb(%ERAqw0iDPnwXek zD18d7dp${{(rWX@sW#|DEb0Y;Mn zgo5Vu(UQLKfgrEZSPLD@;pHowW6f?sov5qZu8<5P(2YA1hksOBGE2%_0MK{PPL9{#fB? zBtvU%Hg$jFn^`SY)41__r@I2@IvVEKeZ!t~TMRmH=%P8Ay_c@!F`+yHdD;jemk zRGg^gb{{DyFgR_N!~pu^^6E}xo<@GA!^@@A+u65$cYO8A`=qL+)^gTlpvgKmES3;L zsjFIV5$l`MW5`;v8jnrzIUNz+k6V~j1RQTbC(GyFh;HZaFX;XE4;1KVzMUJWt<-+5 zV)-ry0^GCV>3Um#aAFz-1qB4i@nHnx<$Ao=IT8Ydxz;>*z|0NQYnTFtQBJSpIx_O% zC3@PJjzqe)Q1)<2tJ9hq@XL;eQzUXeha?t;U@kj+G63nKHwrlq!23S#r>}H)u}j1d z(~k+_0oe=B!^z(%6kg|gWs8K!BwWa8kF+0863m=D?WaMc%e;_ zWLo*Y==VpoBHEVf-+h7>^mo*1f?f9m?fN}6>s)jT{;m09y5%utmtw>KEe4pGg)-$} zUb?F*J0RO(2Mr5N&c&5REo3@`3}h;xpkQx@zri4lQJGC-utI(6?_=?r%kl(9pZI=w zfTvrVfrcitX{2{TyW#SrrhB(;7}M$YNO>Z2R7eN`)bMq32-tK0z$QwY2FN{tQAOWq z7mAxLk}Lx6ZDjb(f1T?4nXL)_UoAja3byO%3IuGh@{IrAA0Pe~5hjg=orRvd82=tQ zWZnJ)k$p#5iag88iZ9@e{ZAdE-C#lKWzSY~F{)a!9lLBOIh`wjj*m`tOo!?NLhR7&TU6lRRyKulY+^H9#3);G@F>hCxh1?0PL>4YiGYDc!HbBu?`}(2r%O zX_@7I5YGuHMp<>E#=B>gEoUzHuhaSBzuzoUaNiF@y(VK0{U3xQ2Ou0vqog1IAkOQP zTcgb~Dlac@Wjo=S`I^U3#7l=>ykNRIh7nhm)6*?|3;{c?+wnp#b2rasowTr$wlNDn zi^mjkjQKQ+<%06NvvJj9VvHPkMg zS^b4~cPuJn4t&zt**W{m%|E1ZHT#PVM-`lILzmXob5qoDRX0-yV71W>O>48WM-;S)g#z;4Yn*=Q0sdNKWd zdwurwTIU&Pu?hyNP>R1Xt>UUx%vh$Z8~q<49(zbh!a- zkub*pDeo=gs(ib3(Md|EFckz5NePjVMmj}N1SCZo=|;LGCoL$Vq=1yPq%_hYh)8#L ziFBPY{l9CUv(~%L+WY(V=LcZU`OGKod)#AO*EOy?UX4=3=^_UNexLa}9KpfCZSC#2 z2;uFfHx+hiYlK|4Zy!UBVuKKOa}x|Cq7LMvMF%BxX)BGc%*Xp;F}il|cQm+VxdYlUliNAe9^P;01oshHB? zB5IT(0keap=!47gdbvK&ji~5o-{E3o!}ggk95>iB3K8dn<LV;$R)qca9wViA6 zvBE^{?Jwxx{q z=~&(B)0^P;v)7my7_Tf8vsJRL5ibq%TeKfuOjVU# zx~dcwc99xd-rQbgV8qC+qhZ!~a#OUJ4uXjO;RV*shw?oSTBD?bik#Lp*N(i%uCZx0 zElb^wFGE@N6O5MG1P#Av8RFzH*v}syDt0G>QE=V;_U+pmUtZwnMC9(8JnzwR*&lc2 zv^n#D-hB+W8mgOuC1j+T#avs51Uqg^Ugk zMh*{@S<#{8@1Dm`r)F3E0Qma&ta#yzSk8TM@hOV6L;0+_tIJ|5DzN)WMr0l>G7fKQ=;5j`-5k%k`g)h0uCTrdIM|E z-gBGe%UZRRnd5|{ZmFD~A$%Z?`K2-ky6mT~NfjiCJQDt7MG_WpQdf@<*?dZ?- z2g7yLV0K}D#bjiI$&(h$8RZFw>lroHn6ETaf36udiRfM%CBT92_12 z-T74U9l#R4V`4`JnSD_P;KT?SBZ#Njf_H9s7{uJ2Bq#Cpvi^rZg2 zmX-yeS3iCzvTAJUq-Xb4R1Cl}=HlF~Rbtxv4cMfHa3;rtCt`Z08O zJqk*1zx8+7lrZuMs8V6s-+A{u_wRr_A6WTiGFL|F?R-S> z&lEE*sefL&CmuVIoBri-Q6bcfY$^3xL2y3J0e}FZv9>K}8 zL+72d_sV;a$}FT^>CVZJ2EacR+#fubUM_3*Z6wh<9Z&J&Ab8gIeE+^g%#1%`xz{G& zvf=IVFps@65dZo=cMtdN?`wn3sF*<6zzj1k9{Im#+AgjhlVV0HgS_(3i8*{UqhKKl zo2&GWc>fPpB*B2ao^l*NcK(U$?|EThaNr^Txo>aj|GS^Y&M57`lY?DLAkx=Y5@Ez| z1CZz&-e<9`6bNwkL6VZ9>E@~`!do=91m#!ktgYFf_WeXBy*%b5D^JwX0AXsBuA)zI zb~ehQpWu~*#FKfmxWM)ozP+Yf;ts!4dQG93@B`sx-wurOE8Dv__=zbfLQq?_&Xv$6 zOY=G`G?smOB>aZy_~)393B9KN4SM1=ZVh-W-#>N=)T~U`&yCQ&x_-Yij8L)+W+vF5&VqkxVQ*lCNnSyB1mIVrzal0xvqp- z6}D9UCpiz@L=54oAx=a>Z>_9X+Zhxe4;~2x4ZSyQKwh<|>HFyFs(5iM4tacZ_zjlY zM0RxA_M)M+^#YWEzFeT`$)f&Ad_N7}xHz~pa@pS~pOAonGVt~75MQ+%=-!O7Br4Pr zK#1Gg;%$u827IL1_IHEYsi~vUiy18RhEN`7O|6OXWTQ z*K>=D^p*E7yX32=HHu^4iIeJwei;N7-eri>mnq+v+8nAeI-&bV)cA2SduP(mZFzSS3a8EC#*s3Mee1``eDd!^(q}`1 zgQv9woj0D+&J+X3VnHtEg^AW)g1|nEf|nu)V6DAa*->ZpXBbm+?N?p4o5}vBQoy*7 z-?PWwOaH{YAA7g^oVW_UyzJtyo4cGc3{`;75}?N%YeG z?oj~QYhm??{*s^D&$gj&;3GhvE}J!nTl)op#U|&Vm-l>SJx+CDO5?IZy|$5v*NFg- zK!MBL#%Sz!>-X<(hc6dFltTs!ZLERUT)nDqXM20Y#<;uf(G1&r-*3HcZMR;Kn%QkP zU7tJI5hB>sxi4YNVz7FFhLx2Pa4euqVjm~}=6DTEtS_k0Qvt6dzpIA;VgkF~UUnD8 z)9a`xjJOO)GbtH&O7a)GJ~W#3Rf<6iJv3xUX=spJc-z@=iXKd1RfER8OVJjbghY>) z=+VCc7;&&swP_2pC8z=f+P#?y)Ra)*y1Kev7KJ1E0a^0o6a+PNJUk>tMMVhK#h>9f z_J)WK6PsFEFEC7Pw>tZq#bYdB)u3DtVA9zn|x%e4Dk0aGyOq>y}N=VmDAtR6*#YZ zx2dT~Z=}S`WhR*Etgc3g$TGF-7;%>P>8o4$?O4fB#fW$I%x&7@m(`mr$g~`BQgmo0 zKH@n4dsWa3>i~iRbc3h%bZ?Yp z7tGe6|6r)pA~wwu984a_$@xCXY~-Kx@UtGT{2ES(VArh;3%<%!*))ApQ8{l@way2# z@B%ow2so~gIBiaZk6KrKkG0Mz#&wnU7#w$=2K2k}9h;cmkB<$iE5*gd`lXsh?)&VY zGJBv&MT*i98t~)!Y+B0lo^!54jA)~e)SGPyAF8#wf#$?7-gF~G=uM1$CFfnaoU5_T z=ykTt)D_1|2ug+09?nsPMMpWgz|{e0$T}6`M^!OThYPbCQ}~HsX)#&9e|2VA|0)!R=245+8qiX|hfX_cEnM zdg4yhcAR&fgwq}dV)tAS_oTc4&AHckotj(4Iz-%;KaQ;o*dT^F!2M=&-UvoKv5EIx4YbT z0X>p^FtBJIUhz7dClfxH@bDlD9Ce@v^7H>!xS zF=ksM_ubA{9{D|PA_&0j5!+{dS6iFgVd5rsvL$kjUCSQ|hn?=7Ekkn#c zl=qD&JEUf#+{?&i2kKtEuC}r5VHb)9uV$&=U2Y>)bd~5^&EHa_j*eG|E zGahH}S*Rv?e9x(z2l^IGE+CjWIAk?6H1bw|U&vJMi>9{Owb`1YMTMc7;JC|AMJ)z8 z-}9}@oE)td94u!hf39X;KR4ZT7VYjy9F>dq{~muHw6=T8V{(d%Ismy%Pl^!}|?~ex$gp z70GT-RBg_H2Z!A#%wNZY9&gdspXrZMo@OHs79B4hnCQNVezUdHBX%!o)G)s*K2jH3 z!uGMfl8%l}_Q1||4tr*Lj2uJ9V>)({=ZdDxekxAaZ;mj~Fr?p!j*bS5O!wk-E^O^8 zCn-?NLk6_!!7^5LTIF;+d43l3fdL)R6?1&-&Md7eLet zzezhib(~k~Uuo9G$gt47b@vmq|VWw6XWlvQH&VO#&s7s5ftvSM6)u_L}NM4-jx|n>G7r zR&GAa0tP0Z)fg&Ay<5BTwd0r+B>jD~TiZAE@aS7MKXC@Cf*bgJ_%C?xRJ7ry^O%yA)`m(%cIEu} z=J^>Bv>i$Ub=I5yh|FPqg!Fvh`+V_;B71&!`Xs3}lTuTHyjahVhq3gkTRBgE#mkuB zR1_NW+MFbcWk1Eu>DNq`hY|_~#>(!a8Gwk`H=~oiH||*uRrD(DEmtZOIc#5ffBi1_qlRsD9CoMYEBQEBssoi zd-er8mR+amPJhA~{tJ(8mi^*_74F(sSjtK&DobVEgBqv3-p|WUe1M%y7O>S5Q(+;k zbXpG~)A7J~nD_>vwThlGs)skay1Vx}SIM^~EsRD7@-%k$%qc}3$bD&O?tLZv`IB+# z-E+%9>k4ggdWssjao34 zaLrUm^Q>~RHY|#?!@|w@W_tI)qocgKnlk5n&)LI~^`aeClF#tgjc%{Hi)qm@@Atm# zi1vI`y%`|+s&MNr=pHZOJI3EvcIjy0+qO`6$ye+O;%)9bIP~|R;#0rfQ7^RE&-b}CgL}BkK$jXQNsL`$ z-hai6=oDxAP&ak%M1Sm8IvW)gHzhm(2QAy%{GjH2M8=_VNLg|Fi)LPh!!o7=hM-Wr z^kZq2O97I>fbb3+{wdPTYkA$^x4lT4h@`f^MiCCsVi^E(Z+mtgs>`OU&Ca!JF_TQ( zG+NztBY!0K+I!(*7_L-eU2rdPa4Mc(3c1OX|Je)CHZ6H|O{ zPVu{dym137{61E3dsXDt+FLmWXjAT8T)2_a_t|dwCqs#Rp{L2vXx|53rGP9&HMI!8 z3q&dMtE)9fBT-On(%><(u=w|yW|hCEpi?42ekKgKuUwZrsm??bTp`n`_G;)NGO9Hp zQ`$i`TLq9W%xUEGP=y^+3$C~d>ydNwabiFIF#9qk9PgtqpEsI;Ko+-EPrBE{u& zxEPFx?x$@lJE$bWJq9RaX|TUBj)CfOP5~yh zw;BgLp)Ti@Eff$cZQ(tjdvcSDl{lW3?)T8Pp{#{fnj$mt_3QZI_rsyx@ofywevg=W zsU}c95^22yovh|0GnZ_;oCK^IFE-VZ z#eEdGU%qI9=PM2JCj+=6*Ex|_k;rxw3_;X``zJ?NkjNCM&SfKS`n@QXOjnaiQ5289 zh3EU@#Rl6oLTM#`8s;A$e*ujR&Zo@}aJaaNNpFr8=yiyC`!;N8$@FVuls1$!up;}v zoqHjTOLJZQmVvG@_H>t~^sm?bR(zjYZf*X#?I6D#;j#VT*}2puz7yLCKn# z-G(vnB(X~dz*P$kLX!bHx>UE1#3ZKU8JFO6=PonQEcC<&flNfd>%IGS(_Fji3OyYi zF*S8$pKB)O6@^5Tf#~`VrKqgwZCAce_aEf+0~+#l<1Qw8wQV`tos`Jz(_bGUf^ipm zyir#tSA|01Ejd(D=u*eL{5a@ZGLxh(e-)`39ToKo2>i;w0qetu4_q?RyZU_@;TlCA z_h60P?jM}|=)O;-ak>XSVAB_#%^J`#(tUmb1q3={>jaB8m8O_EAPb5_imTOKB8CQRqBBc~^A|cdy z<^!uApamF+qrLSzFa788pz@++Wxcpltb?|fLZAis)2YpfAv6jJLr1ibpFf|z=t>H&J9E4SKt#}o<>mJx$3}18z3aG1amdWZcBvT` zE8~ePRV;@tE&{xPKJ_F7+rPmFsuS)-rZnrJZI0D56?0i>64uYuqdM;EP<8N;)VPgf zi%TX?@Ef*GHMp#os$)DLC9^o>GR9ra+pb#9NNS5q4uFp5E-%+>&^4IkdUTtFgoMVz z>l(lyOUBtpZGNR3ouQ>D6ia(sTh`OPIb{Vws?D)OLqr<>#n5IKOO0T#peY4%$o$~yPCUfC!?X42cY zH@tr|n3v9c3&1qxDOIpDt1IZV2+quaNhaWF$qE zIt2XVG-Mytdu!W(?cZX-lVqg3`?%x$aPb)1q=T^)ZE9d(@wt*`_9&~7FpPD&XyjE+ zBr+=O{okNMf~k@)yk`{hXt8x8qvDT#jkNTu`rGW;`IO39sn!JyRR6>oZVT|_4hadd zJvp#@Q24z$SCJViBy0&&uKjDFIH|)I#d9?np()~@Jp#nx#uAf~lD@7rfp0XQ0T{_{ zt_^w1`Jse^L&?~5TRz09pv%VekY0i3mDeN{oRZSj*jQ%@?J7rE$byg*6fDjH7*VmY zLBQOVJEo_nE3%NZeg7^qn19h<6shHv%sO9RM{h2EXT6 zcH!?Rg$MQ7%1l^Sh#(@RGJdu$rsZYSOyr}<)bncqkBYF})jB^Y$VW=4>3|L2ANTf- zae~i*iDlN|uF|~=N71sb{X9q|(ht{PZmm17YIi_gFVxkZK(8#VLJjFOiWEG8Z{NNS z-hr1Yoi|_g+Z43CqxO2u%lm$*L~3-U^|zQAC)BSY`O&@gWLGAtlJT5f}kUTw|sKIa-RtR zTNgnD^;$^ycf)7Z9AfCbKYUg|BaC*~99%831%1u(u12wOxMk5jQTjb2W47bvEpro+ z>0DlEl22>JSZe(D(?2;huhYxUq-x(80A#uA*>dsE`e1?F^H647R`%{(8EJVElYz?nl4fT3C7O9-uMWnCie~kg`Sf6= zf!dyY%xF*6pvTa^0_UBZS&1w96ibDhuOXZoshmMm9LTOV=3+^o{^vFSf$KNPG3QGG9bQB0h0kxLZzv5#ViC*A=8EO+{a77*D&zjInfy=2fLR|lmOWMs5Z2}341e_7T^Mnx96VD+89%tQl;Exyn2wgQJxS`??cBSWnNjd}ZN?VQ>_1%J z`JuPd&O~i^dbCLlJx`?;AZ(%boGa6omd2KJ6s&7fJp62izS&=+;^J1ygjrZ909;e` zNlQ5@H0!&ct5Hk&@FDb}7~o_)`QQuj;(m@=-d)qJDW8_qzGa`BveqZEP0^A33h$Wc z2>7D=Jo}+edah*+*0v02`W&a=g=*E~##&zM|2Z-FZ2VB+D9_rnTN#E&DPYv^Kb)yQ zet(zhwze|me0H|qi?ERDBJ+M0NMiN92JYYy5kVu%t{baX2{{BI=vt(IZYj(wFRc=a zL#QLO8E?~4sNbm70iC~e%F=Ur{}vrOkNrsc4pD>uh z4*7^w?N6o0>O>2Xd``>FJ#;bnDV-qZJ&_JlUqcrGD@>?Rn3Z4rO;fu~WSTMak%J-04%&Vbfi^(&TzLF8{_%SrvuMjAbolwoX=p6?WMRSJSC-K0 zIKj4g25UohE>o}S>Mi*UL8n@Ax~F748bcnA5gLpxuFPjjDA)+PlciKt zc)%&ZThrx#B^cV{1JCo+NJtX=)N=422tN_oSm!LQdM0CTE+tL!IIcVQX(_0n0)ex% z?#2hQ{R&hx;YU2BfAfs*#@upY_qD2BK%0jwD&mBNZQ9zHZIkz`Toj@cJxFyWh{2Tx z4?HNH1-@LBL8hb#{+Bp|y`aMSbq1ZEN^_wT=6_2f4)}l}bx3zA?Htt4K+@59f9bj0 z#u?(laL>~{_;2#StN2gMfe0i0OWMwu?Q>3Lcdn5|5B=YI2L1rCqj$3odg?Fuegq5F zSCT0{w;mE>r?iiSrsDNl2C7EC9;y{dO{K&7xsN`UycRGrXaF}~yNX^=P;gCJXKYUb} zc+CeL9Hd2#m4%|h{Ml8=(Cd6KYD~cMh$o|t2P@5*I$#>QaRIe#09OOsUqn>G(zR1< zO!0hHO(FB0=)$a^_6!#c{OecB)eSp|#M&rg>5-43ZTLsOQI*ir5zy_Kx#ip_|JipQ z!mh1cxX{RZ01)w38$HqN&bh~O);Yjqo>csP+XF*4h2MvFg zC|z${enBm*GhvqNVZq=vyn83f;bjaP0$NNL54JNCT^Q~Vg1G=kox$pWl}2H`6A2rh zWW7OV;NLuxqPLgx!A$|;Y^+y8vf-NA=+2IE3bxnFC#QD@W9e=+@#O;8?6^8W z%l?FVsjxj9qMN|WBc2J((vkVB19W&>Sk8=smS%ts=^k00K=$1h4r!d;WNi(EX3*mt zY}BnH$;i~x$Dw&PG*a{oub}pbz@gGY*BK;N{AYXR<)AgS-JX%@N{%IM+scmqKS-g* z(2T%#WL=$~Qrbp+&HmYSvGuXwu&`m(5jL#~yu(8iyB-m5AdbrQ+Fn0LAe1v7%RnuU zE{05!TrZy+DN^6*(Wa&#VbY#*2nKpf3rfSBE0iQnVFeceBgxDVd;lb*^rBQ z99&YZ=W(jdWNrVzD96u{YS%ZTM_EhEU5P^FEk=I9%pstVvk#h9_dMQhoW064v)-R$ zx3BFCt&xUDVb_;N3v^@3Qqif|-&{pbF3diNm>6v28nK8@aDdnXL%fFd@<{v9Zc`p? zRz~!@cCO+@ok2Idc0 zm{Rp_saD#I@KEsbP?V18V}BUYxdGW#+<#ZN{SzMlo9OzVaG!hfcFW^oG|{*2y|eol z&SXHHEO3AL1m-%_M*)&4{^;15?f?JA&f;P0oMyCejh2h+ON%HPR_ab8-9PEQ0C{Hq zkY0V!EYpvg=g!g>mVz$(K7)qMz0Jwc?wdlibX?yyN6}S?`ONR01c}HEksm3Bvi^aA z=!_JNmtoXzUv2%taBuiO-i9sl>cAgcTKeF8sel%o%fv@-ScA7kFl4P{P(%KGT#*0S z2O(AH=;;9&$Na*EevYb!o3%9uQ>Wh3ZBg`v8qzSRF!m>oO)gTrWpOtBg}RGg-HTv{ zm={JhzM09c6ffPnU$ICB%(g~M145)vm*LioPIRoRcQ)KzU|!#4<|WlnNm0yEU5fsR z^Wi1eO)H?a0v(g{8$I{OBlQ~tu@Hc&1hv0OZpte^!%z@CB!Sh}*=)1x@DPxat@66l zoAk015s=(p1RZdm(>-&oe*(DEA7;0`wPzMp09RC>?y*>olpqm>Yr95EjxRYpPIm_@ zwli)NISg|}mV=4;7VKJ}SMPI%Mr&jbp+c>m#4x{$K9VrnS+Vu|aMQ!9pm17uskJ%x zIyszh2c?qjWb%2~>G7U>bvP*QftH)@*`El-Iu_B5pg`kIbo?L%01t+Jfh3!W>h|@h zY<~3t0$)T`@(hE@vCo=>Q_78O;5O= zhY_cL>G;C<=DPEwCsCR8XarPp9ZKDhqw#xr2BWelYL5Th-xRIM$#Zu8d<2|cYe$St zrIncJ77b{&+qO>{iij$IiR}%gp~*Orktd#zuCT;(Y>t{SODkO*Dsw>tB+Q%?^OtF} z$S*cyj9x=0pTw_s?#OB8;hOX$;x8%b-7VH+6>#3WSfVKpkP3R#$ZI_YpavHUgxbFE z^75rzT%_L!%Ukiq>)$1rm27Y&4`)E(|4@+R`X}Oq<6>IYHCo&ypMydLc(=?xi9EFn zFWk{n7#mRWaK^it2JNI`^o;*CQ~FPH`9EQ}|H_X1sUTT@eG4CrsxTZZ8eCQi6wg+H zO0eLa#e?G|o7%mUo>9U!H57`1S&4-9;T70}gN~8!nh%>9zAv%=z8c_0(|?xVDB=5n9z_ETZl zJ$O)o@s&w|hKug!dhPJ=e(zH|71oE*Y29ZP+2c~tdNH>mj|=nv&Y(igyt@=(sPO)@ zCR2xpiVfYC*HR)w8_!PNkyO_%2Yfqq{JQ7)t91o>dnta2;`%aqYEZiX3=?%jEr)b| zp7CvLtWZI_Eyn;RcF5!GOn)IJ38eH)hKBPOCpVx{v3<)HN`W>S*$l6)kB7v zs;QBepJ^%LxI80+_6fkckO3|y*GjD$V+HrCBl}rg>mq~KN3jq9W1~9&U0*Jym=q-G z*a(s1y3}J4NpS$?#PqWOROsdiL@Ml7Bn$*)fbY&CTqmU?psIY< zBPbA-U|zUPnKg8O-Ejik-4vQ8#@0H4UM3EG@nzQYDqg@uJJR_?Vnua2t|&^X(*=vxwB+?<7+_bC4qxk>xW zic{ybeto$}>3F=q(d@`p(6~--6C_!9sWIu7>&qQ8YR|__^YiluYsEc3XgPb8_>bpf z?H0A2^#}9EA1ElaLJy7BJMItiLth;4pzS8Im6QBTk=v(4Vl?#hSkHDAg+`3Ky6b&j zVHLUePyt{=RLso};ra15K==p4-T%sHlXG?m3-fzCy#T=ClvhG-`xJ zJQljlN`fPURKLtr4&>P}Zt~>Uow*_E=kKW7D)%J$AjW=d;8Kb>{VF<(TM=G7HB)VG z?P(BlT*E^w4HeO=)s}W_GwOkL6ncY^jJiM3Y;+Q~u6}pTW^O?~47(0dGQJs}KP>JM zT{S(1tWmE$I$bd!Ys+?|ksNvqZsqvf5k)l5UZrkrBof1X7`+7>bIq)mpX0W(^jBI% z9?|>AHle3t>FZpz2RaEGY#bb|>62cK&5vTyox_N-7q+D(B(TA$QR3dNU_o7mVC2DF z-n4>bKWb4A^19Q#8yQa$ef@?n*q%D(u?#T5;l0pgxptX;=Fy!`3vUi((~pz{x1wp3=vyGhLU%d{?4@N`xerk5I0y8gleesE6JDb6&;-f01 z5QazZK4vXBCkS~{_30$28QoJz+F$7>gqBUwj?T_)P|2kZe&-ijX%Ri30a`+&8cGy$ zp*;y%SNYM)Ey{g=Z_AbwqDRdA+Mup;;-lf+JWbm3wPz2a{Xc!W1toB6VE7IF7*_Vt ztnBXOho9JkhmyitBRq*ee0a$sI+_?BeT5#qVO~&+h<}3=?%`Y1`O%<*Pq36?O9ZwE`(^&U6BDs$DR~I$9*;xcBPLFr}`ppBL zWTNFrHyv+YfnD1MR2FaRdhxc!&b>)YT>sMLM zLy#c+A(S|V1rfzd2|yu8PF;QlIZnKrEEkvlg}6;Zu;idgDd<8By1E|$fvMHGk2ea< z(+5n^VOfK)iC`)UywD!&K{a zA@5X`O&tL7+Q{VBdZSVePV=_PRTq2`VAmUyP1(nmmU$4b(SiOm$gX>v?xy!*>5=d+eViHAW-{X;s_&zUUXf&l!sW^VP>5`x#y?ISZ9LI=G)O`?;ejcMm;;1Mx z&fEzIV7_xl3OXx)RPBHNVJ>x3U7OGs5gmyS|k$U)A0NrK_&-WT(Y^>wX{@zU)1qS?vu!=jzl)GN;Cn7%X> z)qDPOM&0Wyty=KcmpLNcA@S`h5xU-oIDoGMgHE*a!m?BonM&}gpCz^HMYIrQst;j@ zw3gaa0wta_lb-mGYNNHGYYB*3?JMX@$<1%nnSa$WY2+m7*#1kwXlyd0rfy^9)&J8D6%Xf3u-$n>f~L$$NPt=bNX2{*sh^cuZPf_QPoKj ze1Qqq5%}tW<>^kCyBYYA5a(V)%R{rf5PINfOgAWBdDO>2bxVn=Q5!N-hB0Bxlx!xeGPS&m{2L z2?Sc`7mwpQ);i_N;!lg}Iw{RV|G9&1fA65pMUU%Zi054Ftkq%9IC{RF?oUR7$UW74 z-x~G?)JCK-{(f9P!RWj`a%q<7v5zU=?BQZkb8{$}g?3BF`2qELPM>#p0LN@lVoC*h zkH|4AFpEUOTVw#_>>7TOo**1T7PY@MH0ZaEH0V2j1Dp8Um7r092$+Aanamze-!xC(+ZW8cujEvQwUsIfnL<`G#?*sRZit(X)E<8)69o z0RbtGc#HJ^m7ixEvR=49?M;6wkD7?7-k-oW*tw1i5*L9+6Pm+k^*uP7O!`)1{OtVVNP z*zehN-i`=yll8EUR-MnLwVEgGtbD8b(%+2ZswGjPt}A=Nw-7lD-_EmpvD)tV1WyX& z-B|}hG%O=AMz7P?^YXcm85g5KR7M9Xp)8Yr%qe>rXNW-GBpYq7$9}fb?K_x$ToBou z&~=ZQS>S?SO2x!1<7bX9-*b(4DD-(Ka^B|jo8Kz2BGkZntHajZP3`SJY-wGXIgFb7 zsFs6-UC2GPD0w7=drG)LTKbEjJhOa*K@vu6o4vx&G5^M z-AU*!^!I+j)oH|*vaxdf$>q3LA4Y#vVJ5zkDp}REx73$O-JSS7R){s#hoG|V=kMQK zS};hq@$pS3MSJH>D?WW%aITmBWea>9R$*e?fN7~BGl_sZA2qI@#6lYi^Ul&0PQ=@o zm}!TJ+g}@L=)@}R=f8~665|9+CGJO{P+9nTfYiYnn0Te=X*L>|LtekGs=G}Lup3^K zQm=s9TE%MEYtgMkZi4_xjKn9QP(pCt@`J;hlcOp9vx3qnw$ElSs=R<@w?$hnC5Mud5!80Ba4?^`RpjQdy@VdHil;SwGqKudK!2=Q!VB;0`OJUx^AU414oZGB)+5J(bJ-+WP7o81M z!A#VxVHRxhXqF@)KC4mJ=U3Z%wR}7oqVu|yyx6Q$=!_TF1!IK zp39H4aJTBl(+sr~%gy`FDhz)e<7>l@u+MZHZRN(uA0_pXdtM^qTv8rh7(slqXAP@L zIcskh50TJ9GCdNQe`&4Tj<7qYn9YRn7oX`+=lZd2UQJ(;K;A?WQfoFJHRh_9r(&&} zO6SokTHz3vMrpgwRV&MMb5&qTm9ET2oS4Nof2iW6&!B;=*V{$sKlHivfuq?@m!)TpL^=Y#@L=-@-(-<)H$NG(!OU@C3tk6y4qNWVa8ln z1yc68t6um2O##`~nv=nx!FmmKt*CYuUyinem^nr+nf<cOksi-H^s770yLbFe8;8|uNHs>mKGl9!6|xSIM{_(>C>S@->rM;aoJ8Q)kS6Z9!+v>e-*K zEd-UK+t;^?o-)$mvUejqYs2+xf5Yd@{7cj*eUDf7V3%`0fW1>7*C6M!BtJV%KCk#y zZZX)seemZ4cg6g>=Y_xX%1@}&X^vNRIBM&u&$cc&tc+ck3LNuQ7|h!_K2t64d9{MR z`xHHZ}bW zf#54THC@6Z%<0O7rsc%yj(@MO3e^7ThYuEkyA!L{9|{oONBH{gxa@q7Ip|A1n^V5% zIPY2aJLi$Kytd~ezVqsDhtpR=T>Efg%c!A=hO>&(_4V?o4^gkEMBK#FpQgYrMQ!gz zZg{&NTg7@0f%?aAY^dn{-cOz}*mA`yyuD0*@{HDV-S6H@uHIr34)DT7;~`+AQBkt| z`aKG8G;#qw1Sq?fp4J*15{x;_h6A9+KTvR9kj4%YBxru37Ia?mhc`z227*%m+rc(i zwX~q78;e#4b+wNK75_eg(}+6N!9}fwW%2=9P9!00wUU4PHaV|3$&(~uQW96Xr7PRe z!P{Gc}G2e1K3YY{`h7RfLMcSZJ`)_ye1FH~PrXuXS2wD@%}Kd6gt&g=T{<~oV%w{qn^ zwe!nm(W<^LVziQkCb7gdH7V2zGy{HNVD(nY->7SzK{X808&DsAwxXWWBZBc3LJ2&y^)GypIC*K<&*q_#*Y%&I*~TK+m35H+uR1{ z+LvN~ftmlA853?shF}N!hiF0Pz+2C58Udekiv|O-AWdHIH#^-J{Ph z7oQv)#wK&x)+5Syp)E^VZNTHtDnG)w7#~0)`{f%kEZEU60wifwsvi~i57&BFJDOR9 zDt#joJMjVjrmAUuqln2x{IT?IBGXv7)E<{j%iUvg7prHRE#+~Bf2_WK6yi;M2llvJ zi+YG?=Un*0INW>o~q`H>*Rl<(gb>W0PJdgtxxeu}f zw4NZE2+~{bo4de!3TiV0R?qsptjkC!rhNJ2WMP7TmiqkULdTujNt3$tj0}VJXa;7M zqnnG}$*m=1nGmzR|3(^k$^$Ae25}MpUkJ{mKu02q$#>)PGO|3vr>F#abrjHuuI;$v zp#E>zVaT8fFV<>=T5P-NDlrY(i4W~DVh7CDF++YOqk&CWg(G%HN9WyDKz6~g4B8b4 zt}@Bn=bC`urpwWCCe6dLKGvAooNAHdooC*O0Z{cJ&kv5n0r*GTtsrO&_bj`*--pvm z;nK6`Ur+Kr8>SdsY!|(%)TcJ-`fa>&&1fP_f8J;wEbKTm!Ar=ffMdr!EQz>NSczN`{w@LxcIcp%ciwfs#!^+T%^@WI`^rD@CXW$rS>;pP5VESb}=fCr{&*bU`QX}J6mgt zgVO1Bd^}eA&*I|4+C5b(Pny9q_r}p$y404m+8t>rimNp@k0r537yD?-&T~$+LqW6h zB(u4;#vOF(gyEW4N<4$KbD!5T<@~~*rbvIyrUY%PY|gvy7KvrK?4G2#o>RANjzdrs zMBa13N0e7j@6{f0?FBGf25Wo}K1m6?VS|z``Ml751sj7Pz$eGZs7>_srBcm+tR+)% zbZLhO-#>#ry@zT&?*N+$qI6&ip)V)90F|{pHMBTBq;9FCKbbvwCjups5c4RlH`TRx zK@krV_}$1vvD2kt-%DCq>=&Ww*Us)c$O%O>1OIi)8j5;$iWF4sbfZur$5b(rDdN)7 z0>3Co4GdD1)YKM~>o0{vBL_PV2}LQc@6>SBwY`|XE6;^i(VkY(!5$Q8l6T58Vr+2i z0|1g*(yGGaAq#rB41wj6QCh!B^bR)SEyj?Zatqwe43wencM?+BCIW<_8ybv8p;q#t zhm6*D9i@SRpgjr1ha^&53yRgC%hdOuWh2F9=-A0b;(z#|-+Di@j~3dd{Ijgo)$jb# zmrLL6r++3;7|AT;k4`rT6=S%AO{y$KY+A{zE literal 26700 zcmbrmWmMJO+Aq9F>6S)Py1QFIL0UjMrArzX-3=mL0xBTVDcz{Fbc1wv*O}|yV?XbH zpELHS zfd8KY|03bu;q2yv54l`l=(x&SxR|}Sc5=0Lbb!d%nYg%EP?=j$y|ZxGaeZ&$B21;` z%I4x`YU1Q%XKiKzJ4#usRu`O10XtdK8XN>s@N#l=wX$%rcA=7SbZ~Kf?`8%&kb{2q z3<9Boyp)yF^vv4J_J9&h%=Y=usRttBDR4*z(7EDBBO)P|DQFz26C6HW|AwNFimndN z_$dKGn2>MyEdcG0FH^n~6MU+wtn90R5CZs@{M5f3>IQG+tGW)}xqG;K)X|9=iJww8 zx#Vn$Zte|aEoHg9i?bT<+fA=X2qT^>#nkN$kz`H|G9lh_6&6HDG>$_&T~j+^e#6Gr zBoy=NHYC{qTW@Dp)i130Zg|k70dvFomo1cnb3;*ewV$4saOXF@K#*r~oDOT40$q?? z!3)E5(kaE~##CXvyu64S$nJ8+3yq8%9O17@k-IoM`8K@2u{%gdBQ8EDv6t2H_dZL; zmX|RZjdN6T|5}}v7VpZI@V zRjL&Dd_N};7@tbC_FjnC_iOEnLntRYf}d%Kqp*}Qv0q~vAq0zc;;j@@zz!p zc~se+=RGl6rGatgPj6DoxQ<7m!`zTRJA zD9wLFWJbnA3=z?-?T=ZCV#Qie2=~tRHQss&nRAnTR%hZR#ngQI^yu)QPXCnAuZ!p8iH#CC{S9Q@Z2EKuCTS zdUpqvm6xZb;v8XQ>f%i3U;p`gKvqEkrMbD8io1nam~(BJnQYOW{n>lY%tbgUY6V?O z6eNM`+P?b4Sc=#-4R6e=zd!X6^z5@oTO4h@iLPqX3ykT%Uc3MQr#9`?g2%PAPT!%)=0#bL(ocebo9EH_kENo#V7XD z{A7PucM;T_ow+pfG_}fKGN2*V>c%#C98gtS&~*R(J@auRL4j_>#;xIEGdChOHdKk; zg;iPmwQ)_~&`cLr-Di(H)n%naCd|gt)@+>kggS?g#F;xR-m{Bo�q{w8dbgAhB(v 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 LRKJubZyNAl`Q-z2 diff --git a/idl/GHS3DPlugin_Algorithm.idl b/idl/GHS3DPlugin_Algorithm.idl index 6bb10d8..f930af5 100644 --- a/idl/GHS3DPlugin_Algorithm.idl +++ b/idl/GHS3DPlugin_Algorithm.idl @@ -178,6 +178,7 @@ module GHS3DPlugin GHS3DEnforcedMeshList GetEnforcedMeshes(); void ClearEnforcedMeshes(); + /*! * Set/get/unset an enforced vertex (private method for GUI) */ diff --git a/src/GHS3DPlugin/GHS3DPlugin_GHS3D.cxx b/src/GHS3DPlugin/GHS3DPlugin_GHS3D.cxx index 68d805e..257c774 100644 --- a/src/GHS3DPlugin/GHS3DPlugin_GHS3D.cxx +++ b/src/GHS3DPlugin/GHS3DPlugin_GHS3D.cxx @@ -37,6 +37,8 @@ #include "SMESH_MeshEditor.hxx" #include "SMESH_OctreeNode.hxx" #include "SMESH_Group.hxx" +#include +#include #include "SMDS_MeshElement.hxx" #include "SMDS_MeshNode.hxx" @@ -107,10 +109,6 @@ extern "C" #define HOLE_ID -1 -#ifndef GHS3D_VERSION -#define GHS3D_VERSION 41 -#endif - typedef const list TTriaList; static void removeFile( const TCollection_AsciiString& fileName ) @@ -479,11 +477,11 @@ static int findShapeID(SMESH_Mesh& mesh, return meshDS->ShapeToIndex( solids(2) ); } -//======================================================================= -//function : countShape -//purpose : -//======================================================================= - +// //======================================================================= +// //function : countShape +// //purpose : +// //======================================================================= +// // template < class Mesh, class Shape > // static int countShape( Mesh* mesh, Shape shape ) { // TopExp_Explorer expShape ( mesh->ShapeToMesh(), shape ); @@ -496,12 +494,12 @@ static int findShapeID(SMESH_Mesh& mesh, // } // return nbShape; // } - -//======================================================================= -//function : getShape -//purpose : -//======================================================================= - +// +// //======================================================================= +// //function : getShape +// //purpose : +// //======================================================================= +// // template < class Mesh, class Shape, class Tab > // void getShape(Mesh* mesh, Shape shape, Tab *t_Shape) { // TopExp_Explorer expShape ( mesh->ShapeToMesh(), shape ); @@ -514,11 +512,11 @@ static int findShapeID(SMESH_Mesh& mesh, // } // return; // } - -// //======================================================================= -// //function : findEdgeID -// //purpose : -// //======================================================================= +// +// // //======================================================================= +// // //function : findEdgeID +// // //purpose : +// // //======================================================================= // // static int findEdgeID(const SMDS_MeshNode* aNode, // const SMESHDS_Mesh* theMesh, @@ -552,16 +550,14 @@ static int findShapeID(SMESH_Mesh& mesh, // delete [] t_Dist; // return theMesh->ShapeToIndex( foundEdge ); // } - - -//======================================================================= -//function : readGMFFile -//purpose : read GMF file with geometry associated to mesh -// TODO -//======================================================================= - -// static bool readGMFFile( -// const int fileOpen, +// +// +// // ======================================================================= +// // function : readGMFFile +// // purpose : read GMF file with geometry associated to mesh +// // ======================================================================= +// +// static bool readGMFFile(const int fileOpen, // const char* theFileName, // SMESH_Mesh& theMesh, // const int nbShape, @@ -644,7 +640,7 @@ static int findShapeID(SMESH_Mesh& mesh, // // // // The keyword does not exist yet => to update when it is created -// // int nbTriangle = GmfStatKwd(InpMsh, GmfSubdomain); +// // int nbSubdomains = GmfStatKwd(InpMsh, GmfSubdomain); // // int id_tri[3]; // // @@ -828,11 +824,11 @@ static int findShapeID(SMESH_Mesh& mesh, // // case GmfHexahedra: // { // int nodeDim, shapeID, *nodeID; -// SMDS_MeshNode** node; +// const SMDS_MeshNode** node; // // std::vector< SMDS_MeshNode* > enfNode( nbRef ); // SMDS_MeshElement * aGMFElement; // -// node = new SMDS_MeshNode*[nbRef]; +// node = new const SMDS_MeshNode*[nbRef]; // nodeID = new int[ nbRef ]; // // for ( int iElem = 0; iElem < nbElem; iElem++ ) @@ -4316,3 +4312,84 @@ bool GHS3DPlugin_GHS3D::importGMFMesh(const char* theGMFFileName, SMESH_Mesh& th theMesh.GetMeshDS()->Modified(); return ok; } + +namespace +{ + //================================================================================ + /*! + * \brief Sub-mesh event listener setting enforced elements as soon as an enforced + * mesh is loaded + */ + struct _EnforcedMeshRestorer : public SMESH_subMeshEventListener + { + _EnforcedMeshRestorer(): + SMESH_subMeshEventListener( /*isDeletable = */true, Name() ) + {} + + //================================================================================ + /*! + * \brief Returns an ID of listener + */ + static const char* Name() { return "GHS3DPlugin_GHS3D::_EnforcedMeshRestorer"; } + + //================================================================================ + /*! + * \brief Treat events of the subMesh + */ + void ProcessEvent(const int event, + const int eventType, + SMESH_subMesh* subMesh, + SMESH_subMeshEventListenerData* data, + const SMESH_Hypothesis* hyp) + { + if ( SMESH_subMesh::SUBMESH_LOADED == event && + SMESH_subMesh::COMPUTE_EVENT == eventType && + data && + !data->mySubMeshes.empty() ) + { + // An enforced mesh (subMesh->_father) has been loaded from hdf file + if ( GHS3DPlugin_Hypothesis* hyp = GetGHSHypothesis( data->mySubMeshes.front() )) + hyp->RestoreEnfElemsByMeshes(); + } + } + //================================================================================ + /*! + * \brief Returns GHS3DPlugin_Hypothesis used to compute a subMesh + */ + static GHS3DPlugin_Hypothesis* GetGHSHypothesis( SMESH_subMesh* subMesh ) + { + SMESH_HypoFilter ghsHypFilter( SMESH_HypoFilter::HasName( "GHS3D_Parameters" )); + return (GHS3DPlugin_Hypothesis* ) + subMesh->GetFather()->GetHypothesis( subMesh->GetSubShape(), + ghsHypFilter, + /*visitAncestors=*/true); + } + }; +} + +//================================================================================ +/*! + * \brief Set an event listener to set enforced elements as soon as an enforced + * mesh is loaded + */ +//================================================================================ + +void GHS3DPlugin_GHS3D::SubmeshRestored(SMESH_subMesh* subMesh) +{ + if ( GHS3DPlugin_Hypothesis* hyp = _EnforcedMeshRestorer::GetGHSHypothesis( subMesh )) + { + GHS3DPlugin_Hypothesis::TGHS3DEnforcedMeshList enfMeshes = hyp->_GetEnforcedMeshes(); + GHS3DPlugin_Hypothesis::TGHS3DEnforcedMeshList::iterator it = enfMeshes.begin(); + for(;it != enfMeshes.end();++it) { + GHS3DPlugin_Hypothesis::TGHS3DEnforcedMesh* enfMesh = *it; + if ( SMESH_Mesh* mesh = GetMeshByPersistentID( enfMesh->persistID )) + { + SMESH_subMesh* smToListen = mesh->GetSubMesh( mesh->GetShapeToMesh() ); + // a listener set to smToListen will care of hypothesis stored in SMESH_EventListenerData + subMesh->SetEventListener( new _EnforcedMeshRestorer(), + SMESH_subMeshEventListenerData::MakeData( subMesh ), + smToListen); + } + } + } +} diff --git a/src/GHS3DPlugin/GHS3DPlugin_GHS3D.hxx b/src/GHS3DPlugin/GHS3DPlugin_GHS3D.hxx index 7be3a9f..776a1fa 100644 --- a/src/GHS3DPlugin/GHS3DPlugin_GHS3D.hxx +++ b/src/GHS3DPlugin/GHS3DPlugin_GHS3D.hxx @@ -75,6 +75,8 @@ public: virtual bool Compute(SMESH_Mesh& theMesh, SMESH_MesherHelper* aHelper); + virtual void SubmeshRestored(SMESH_subMesh* subMesh); + bool importGMFMesh(const char* aGMFFileName, SMESH_Mesh& aMesh); private: diff --git a/src/GHS3DPlugin/GHS3DPlugin_Hypothesis.cxx b/src/GHS3DPlugin/GHS3DPlugin_Hypothesis.cxx index 4deccaa..49f0a73 100644 --- a/src/GHS3DPlugin/GHS3DPlugin_Hypothesis.cxx +++ b/src/GHS3DPlugin/GHS3DPlugin_Hypothesis.cxx @@ -450,16 +450,20 @@ bool GHS3DPlugin_Hypothesis::SetEnforcedMesh(SMESH_Mesh& theMesh, SMESH::Element bool added = SetEnforcedElements( theElemSet, elementType, groupName); if (added) { TGHS3DEnforcedMesh* newEnfMesh = new TGHS3DEnforcedMesh(); - newEnfMesh->name = name; - newEnfMesh->entry = entry; + newEnfMesh->persistID = theMesh.GetMeshDS()->GetPersistentId(); + newEnfMesh->name = name; + newEnfMesh->entry = entry; newEnfMesh->elementType = elementType; - newEnfMesh->groupName = groupName; + newEnfMesh->groupName = groupName; TGHS3DEnforcedMeshList::iterator it = _enfMeshList.find(newEnfMesh); if (it == _enfMeshList.end()) { _entryEnfMeshMap[entry].insert(newEnfMesh); _enfMeshList.insert(newEnfMesh); } + else { + delete newEnfMesh; + } } return added; } @@ -712,6 +716,26 @@ void GHS3DPlugin_Hypothesis::ClearEnforcedMeshes() NotifySubMeshesHypothesisModification(); } +//================================================================================ +/*! + * \brief At mesh loading, restore enforced elements by just loaded enforced meshes + */ +//================================================================================ + +void GHS3DPlugin_Hypothesis::RestoreEnfElemsByMeshes() +{ + TGHS3DEnforcedMeshList::const_iterator it = _enfMeshList.begin(); + for(;it != _enfMeshList.end();++it) { + TGHS3DEnforcedMesh* enfMesh = *it; + if ( SMESH_Mesh* mesh = GetMeshByPersistentID( enfMesh->persistID )) + SetEnforcedMesh( *mesh, + enfMesh->elementType, + enfMesh->name, + enfMesh->entry, + enfMesh->groupName ); + enfMesh->persistID = -1; // not to restore again + } +} //======================================================================= //function : SetGroupsToRemove @@ -965,6 +989,8 @@ std::ostream & GHS3DPlugin_Hypothesis::SaveTo(std::ostream & save) save << " " << enfMesh->groupName; save << " " << "__END_GROUP__"; } + save << " " << "__PERSIST_ID__"; + save << " " << enfMesh->persistID; save << " " << "__END_ENF_MESH__"; std::cout << "Saving of enforced mesh " << enfMesh->name.c_str() << " done" << std::endl; } @@ -979,303 +1005,310 @@ std::ostream & GHS3DPlugin_Hypothesis::SaveTo(std::ostream & save) std::istream & GHS3DPlugin_Hypothesis::LoadFrom(std::istream & load) { - bool isOK = true; - int i; - double d; - - isOK = (load >> i); - if (isOK) - myToMeshHoles = i; - else - load.clear(ios::badbit | load.rdstate()); - - isOK = (load >> i); - if (isOK) - myMaximumMemory = i; - else - load.clear(ios::badbit | load.rdstate()); - - isOK = (load >> i); - if (isOK) - myInitialMemory = i; - else - load.clear(ios::badbit | load.rdstate()); - - isOK = (load >> i); - if (isOK) - myOptimizationLevel = i; - else - load.clear(ios::badbit | load.rdstate()); - - isOK = (load >> myWorkingDirectory); - if (isOK) { - if ( myWorkingDirectory == "0") { // myWorkingDirectory was empty - myKeepFiles = false; - myWorkingDirectory.clear(); - } - else if ( myWorkingDirectory == "1" ) { - myKeepFiles = true; - myWorkingDirectory.clear(); - } - } - else - load.clear(ios::badbit | load.rdstate()); - - if ( !myWorkingDirectory.empty() ) { - isOK = (load >> i); - if (isOK) - myKeepFiles = i; - else - load.clear(ios::badbit | load.rdstate()); - } - - isOK = (load >> i); - if (isOK) - myVerboseLevel = (short) i; - else - load.clear(ios::badbit | load.rdstate()); - - isOK = (load >> i); - if (isOK) - myToCreateNewNodes = (bool) i; - else - load.clear(ios::badbit | load.rdstate()); - - isOK = (load >> i); - if (isOK) - myToUseBoundaryRecoveryVersion = (bool) i; - else - load.clear(ios::badbit | load.rdstate()); - - isOK = (load >> i); - if (isOK) - myToUseFemCorrection = (bool) i; - else - load.clear(ios::badbit | load.rdstate()); - - isOK = (load >> i); - if (isOK) - myToRemoveCentralPoint = (bool) i; - else - load.clear(ios::badbit | load.rdstate()); - - isOK = (load >> d); + bool isOK = true; + int i; + double d; + + isOK = (load >> i); + if (isOK) + myToMeshHoles = i; + else + load.clear(ios::badbit | load.rdstate()); + + isOK = (load >> i); + if (isOK) + myMaximumMemory = i; + else + load.clear(ios::badbit | load.rdstate()); + + isOK = (load >> i); + if (isOK) + myInitialMemory = i; + else + load.clear(ios::badbit | load.rdstate()); + + isOK = (load >> i); + if (isOK) + myOptimizationLevel = i; + else + load.clear(ios::badbit | load.rdstate()); + + isOK = (load >> myWorkingDirectory); + if (isOK) { + if ( myWorkingDirectory == "0") { // myWorkingDirectory was empty + myKeepFiles = false; + myWorkingDirectory.clear(); + } + else if ( myWorkingDirectory == "1" ) { + myKeepFiles = true; + myWorkingDirectory.clear(); + } + } + else + load.clear(ios::badbit | load.rdstate()); + + if ( !myWorkingDirectory.empty() ) { + isOK = (load >> i); if (isOK) - myGradation = d; + myKeepFiles = i; else - load.clear(ios::badbit | load.rdstate()); - - std::string separator; - bool hasOptions = false; - bool hasEnforcedVertices = false; - bool hasEnforcedMeshes = false; - isOK = (load >> separator); - - if (isOK) { - if (separator == "__OPTIONS_BEGIN__") - hasOptions = true; - else if (separator == "__ENFORCED_VERTICES_BEGIN__") - hasEnforcedVertices = true; - else if (separator == "__ENFORCED_MESHES_BEGIN__") - hasEnforcedMeshes = true; - } - - if (hasOptions) { - std::string txt; - while (isOK) { - isOK = (load >> txt); - if (isOK) { - if (txt == "__OPTIONS_END__") { - if (!myTextOption.empty()) { - // Remove last space - myTextOption.erase(myTextOption.end()-1); - } - isOK = false; - break; - } - myTextOption += txt; - myTextOption += " "; - } - } - } - - if (hasOptions) { - isOK = (load >> separator); - if (isOK && separator == "__ENFORCED_VERTICES_BEGIN__") - hasEnforcedVertices = true; - if (isOK && separator == "__ENFORCED_MESHES_BEGIN__") - hasEnforcedMeshes = true; - } + load.clear(ios::badbit | load.rdstate()); + } + + isOK = (load >> i); + if (isOK) + myVerboseLevel = (short) i; + else + load.clear(ios::badbit | load.rdstate()); + + isOK = (load >> i); + if (isOK) + myToCreateNewNodes = (bool) i; + else + load.clear(ios::badbit | load.rdstate()); + + isOK = (load >> i); + if (isOK) + myToUseBoundaryRecoveryVersion = (bool) i; + else + load.clear(ios::badbit | load.rdstate()); + + isOK = (load >> i); + if (isOK) + myToUseFemCorrection = (bool) i; + else + load.clear(ios::badbit | load.rdstate()); + + isOK = (load >> i); + if (isOK) + myToRemoveCentralPoint = (bool) i; + else + load.clear(ios::badbit | load.rdstate()); + + isOK = (load >> d); + if (isOK) + myGradation = d; + else + load.clear(ios::badbit | load.rdstate()); + + std::string separator; + bool hasOptions = false; + bool hasEnforcedVertices = false; + bool hasEnforcedMeshes = false; + isOK = (load >> separator); + + if (isOK) { + if (separator == "__OPTIONS_BEGIN__") + hasOptions = true; + else if (separator == "__ENFORCED_VERTICES_BEGIN__") + hasEnforcedVertices = true; + else if (separator == "__ENFORCED_MESHES_BEGIN__") + hasEnforcedMeshes = true; + } + + if (hasOptions) { + std::string txt; + while (isOK) { + isOK = (load >> txt); + if (isOK) { + if (txt == "__OPTIONS_END__") { + if (!myTextOption.empty()) { + // Remove last space + myTextOption.erase(myTextOption.end()-1); + } + isOK = false; + break; + } + myTextOption += txt; + myTextOption += " "; + } + } + } + + if (hasOptions) { + isOK = (load >> separator); + if (isOK && separator == "__ENFORCED_VERTICES_BEGIN__") + hasEnforcedVertices = true; + if (isOK && separator == "__ENFORCED_MESHES_BEGIN__") + hasEnforcedMeshes = true; + } if (hasEnforcedVertices) { - std::string txt, name, entry, groupName; - double size, coords[3]; - bool isCompound; - bool hasCoords = false; - isOK = (load >> txt); // __BEGIN_VERTEX__ - while (isOK) { - if (txt == "__ENFORCED_VERTICES_END__") - isOK = false; - - TGHS3DEnforcedVertex *enfVertex = new TGHS3DEnforcedVertex(); - while (isOK) { - isOK = (load >> txt); - if (txt == "__END_VERTEX__") { - enfVertex->name = name; - enfVertex->geomEntry = entry; - enfVertex->isCompound = isCompound; - enfVertex->groupName = groupName; - enfVertex->coords.clear(); - if (hasCoords) - enfVertex->coords.assign(coords,coords+3); - - _enfVertexList.insert(enfVertex); - - if (enfVertex->coords.size()) - _coordsEnfVertexMap[enfVertex->coords] = enfVertex; - if (!enfVertex->geomEntry.empty()) - _geomEntryEnfVertexMap[enfVertex->geomEntry] = enfVertex; - - name.clear(); - entry.clear(); - groupName.clear(); - hasCoords = false; - isOK = false; - } - - if (txt == "__BEGIN_NAME__") { // __BEGIN_NAME__ - while (isOK && (txt != "__END_NAME__")) { - isOK = (load >> txt); - if (txt != "__END_NAME__") { - if (!name.empty()) - name += " "; - name += txt; - } - } - MESSAGE("name: " <> entry); - isOK = (load >> isCompound); - isOK = (load >> txt); // __END_ENTRY__ - if (txt != "__END_ENTRY__") - throw std::exception(); - MESSAGE("entry: " << entry); - } - - if (txt == "__BEGIN_GROUP__") { // __BEGIN_GROUP__ - while (isOK && (txt != "__END_GROUP__")) { - isOK = (load >> txt); - if (txt != "__END_GROUP__") { - if (!groupName.empty()) - groupName += " "; - groupName += txt; - } - } - MESSAGE("groupName: " << groupName); - } - - if (txt == "__BEGIN_COORDS__") { // __BEGIN_COORDS__ - hasCoords = true; - isOK = (load >> coords[0] >> coords[1] >> coords[2]); - isOK = (load >> txt); // __END_COORDS__ - if (txt != "__END_COORDS__") - throw std::exception(); - MESSAGE("coords: " << coords[0] <<","<< coords[1] <<","<< coords[2]); - } - - if (txt == "__BEGIN_SIZE__") { // __BEGIN_ENTRY__ - isOK = (load >> size); - isOK = (load >> txt); // __END_ENTRY__ - if (txt != "__END_SIZE__") { - throw std::exception(); - } - MESSAGE("size: " << size); - } - } - isOK = (load >> txt); // __BEGIN_VERTEX__ - } + std::string txt, name, entry, groupName; + double size, coords[3]; + bool isCompound; + bool hasCoords = false; + isOK = (load >> txt); // __BEGIN_VERTEX__ + while (isOK) { + if (txt == "__ENFORCED_VERTICES_END__") + isOK = false; + + TGHS3DEnforcedVertex *enfVertex = new TGHS3DEnforcedVertex(); + while (isOK) { + isOK = (load >> txt); + if (txt == "__END_VERTEX__") { + enfVertex->name = name; + enfVertex->geomEntry = entry; + enfVertex->isCompound = isCompound; + enfVertex->groupName = groupName; + enfVertex->coords.clear(); + if (hasCoords) + enfVertex->coords.assign(coords,coords+3); + + _enfVertexList.insert(enfVertex); + + if (enfVertex->coords.size()) + _coordsEnfVertexMap[enfVertex->coords] = enfVertex; + if (!enfVertex->geomEntry.empty()) + _geomEntryEnfVertexMap[enfVertex->geomEntry] = enfVertex; + + name.clear(); + entry.clear(); + groupName.clear(); + hasCoords = false; + isOK = false; + } + + if (txt == "__BEGIN_NAME__") { // __BEGIN_NAME__ + while (isOK && (txt != "__END_NAME__")) { + isOK = (load >> txt); + if (txt != "__END_NAME__") { + if (!name.empty()) + name += " "; + name += txt; + } + } + MESSAGE("name: " <> entry); + isOK = (load >> isCompound); + isOK = (load >> txt); // __END_ENTRY__ + if (txt != "__END_ENTRY__") + throw std::exception(); + MESSAGE("entry: " << entry); + } + + if (txt == "__BEGIN_GROUP__") { // __BEGIN_GROUP__ + while (isOK && (txt != "__END_GROUP__")) { + isOK = (load >> txt); + if (txt != "__END_GROUP__") { + if (!groupName.empty()) + groupName += " "; + groupName += txt; + } + } + MESSAGE("groupName: " << groupName); + } + + if (txt == "__BEGIN_COORDS__") { // __BEGIN_COORDS__ + hasCoords = true; + isOK = (load >> coords[0] >> coords[1] >> coords[2]); + isOK = (load >> txt); // __END_COORDS__ + if (txt != "__END_COORDS__") + throw std::exception(); + MESSAGE("coords: " << coords[0] <<","<< coords[1] <<","<< coords[2]); + } + + if (txt == "__BEGIN_SIZE__") { // __BEGIN_ENTRY__ + isOK = (load >> size); + isOK = (load >> txt); // __END_ENTRY__ + if (txt != "__END_SIZE__") { + throw std::exception(); + } + MESSAGE("size: " << size); + } + } + isOK = (load >> txt); // __BEGIN_VERTEX__ + } } if (hasEnforcedVertices) { - isOK = (load >> separator); - if (isOK && separator == "__ENFORCED_MESHES_BEGIN__") - hasEnforcedMeshes = true; + isOK = (load >> separator); + if (isOK && separator == "__ENFORCED_MESHES_BEGIN__") + hasEnforcedMeshes = true; } if (hasEnforcedMeshes) { - std::string txt, name, entry, groupName; - int elementType = -1; - isOK = (load >> txt); // __BEGIN_ENF_MESH__ - while (isOK) { -// if (isOK) { - if (txt == "__ENFORCED_MESHES_END__") - isOK = false; - - TGHS3DEnforcedMesh *enfMesh = new TGHS3DEnforcedMesh(); - while (isOK) { - isOK = (load >> txt); - if (txt == "__END_ENF_MESH__") { - enfMesh->name = name; - enfMesh->entry = entry; - enfMesh->elementType = (SMESH::ElementType)elementType; - enfMesh->groupName = groupName; - - _enfMeshList.insert(enfMesh); - std::cout << "Restoring of enforced mesh " <> txt); - if (txt != "__END_NAME__") { - if (!name.empty()) - name += " "; - name += txt; - } - } - MESSAGE("name: " <> entry); - isOK = (load >> txt); // __END_ENTRY__ - if (txt != "__END_ENTRY__") - throw std::exception(); - MESSAGE("entry: " << entry); - } - - if (txt == "__BEGIN_ELEM_TYPE__") { // __BEGIN_ELEM_TYPE__ - isOK = (load >> elementType); - isOK = (load >> txt); // __END_ELEM_TYPE__ - if (txt != "__END_ELEM_TYPE__") - throw std::exception(); - MESSAGE("elementType: " << elementType); - } - - if (txt == "__BEGIN_GROUP__") { // __BEGIN_GROUP__ - while (isOK && (txt != "__END_GROUP__")) { - isOK = (load >> txt); - if (txt != "__END_GROUP__") { - if (!groupName.empty()) - groupName += " "; - groupName += txt; - } - } // while - MESSAGE("groupName: " << groupName); - } // if - std::cout << "isOK: " << isOK << std::endl; - } // while -// } // if - isOK = (load >> txt); // __BEGIN_ENF_MESH__ - } // while + std::string txt, name, entry, groupName; + int elementType = -1, persistID = -1; + isOK = (load >> txt); // __BEGIN_ENF_MESH__ + while (isOK) { + // if (isOK) { + if (txt == "__ENFORCED_MESHES_END__") + isOK = false; + + TGHS3DEnforcedMesh *enfMesh = new TGHS3DEnforcedMesh(); + while (isOK) { + isOK = (load >> txt); + if (txt == "__END_ENF_MESH__") { + enfMesh->name = name; + enfMesh->entry = entry; + enfMesh->elementType = (SMESH::ElementType)elementType; + enfMesh->groupName = groupName; + enfMesh->persistID = persistID; + + _enfMeshList.insert(enfMesh); + std::cout << "Restoring of enforced mesh " <> txt); + if (txt != "__END_NAME__") { + if (!name.empty()) + name += " "; + name += txt; + } + } + MESSAGE("name: " <> entry); + isOK = (load >> txt); // __END_ENTRY__ + if (txt != "__END_ENTRY__") + throw std::exception(); + MESSAGE("entry: " << entry); + } + + if (txt == "__BEGIN_ELEM_TYPE__") { // __BEGIN_ELEM_TYPE__ + isOK = (load >> elementType); + isOK = (load >> txt); // __END_ELEM_TYPE__ + if (txt != "__END_ELEM_TYPE__") + throw std::exception(); + MESSAGE("elementType: " << elementType); + } + + if (txt == "__BEGIN_GROUP__") { // __BEGIN_GROUP__ + while (isOK && (txt != "__END_GROUP__")) { + isOK = (load >> txt); + if (txt != "__END_GROUP__") { + if (!groupName.empty()) + groupName += " "; + groupName += txt; + } + } // while + MESSAGE("groupName: " << groupName); + } // if + + if (txt == "__PERSIST_ID__") { + isOK = (load >> persistID); + MESSAGE("persistID: " << persistID); + } + std::cout << "isOK: " << isOK << std::endl; + } // while + // } // if + isOK = (load >> txt); // __BEGIN_ENF_MESH__ + } // while } // if return load; @@ -1313,10 +1346,7 @@ std::string GHS3DPlugin_Hypothesis::CommandToRun(const GHS3DPlugin_Hypothesis* h const bool hasShapeToMesh) { TCollection_AsciiString cmd; - if (hasShapeToMesh) - cmd = "ghs3d-41"; // to use old mesh2 format - else - cmd = "ghs3d"; // to use new mesh format + cmd = "mg-tetra.exe"; // check if any option is overridden by hyp->myTextOption bool m = hyp ? ( hyp->myTextOption.find("-m") == std::string::npos ) : true; bool M = hyp ? ( hyp->myTextOption.find("-M") == std::string::npos ) : true; diff --git a/src/GHS3DPlugin/GHS3DPlugin_Hypothesis.hxx b/src/GHS3DPlugin/GHS3DPlugin_Hypothesis.hxx index 2e1acc5..cc31ac7 100644 --- a/src/GHS3DPlugin/GHS3DPlugin_Hypothesis.hxx +++ b/src/GHS3DPlugin/GHS3DPlugin_Hypothesis.hxx @@ -82,6 +82,7 @@ public: //////////////////// struct TGHS3DEnforcedMesh { + int persistID; std::string name; std::string entry; std::string groupName; @@ -245,6 +246,7 @@ public: const TIDSortedElemGroupMap _GetEnforcedTriangles() const { return _enfTriangles; } const TID2SizeMap _GetNodeIDToSizeMap() const {return _nodeIDToSizeMap; } const TSetStrings _GetGroupsToRemove() const {return _groupsToRemove; } + void RestoreEnfElemsByMeshes(); // persistence /*! * \brief Return the enforced vertices */ diff --git a/src/GHS3DPlugin/GHS3DPlugin_Hypothesis_i.cxx b/src/GHS3DPlugin/GHS3DPlugin_Hypothesis_i.cxx index 9129727..b4bf07a 100644 --- a/src/GHS3DPlugin/GHS3DPlugin_Hypothesis_i.cxx +++ b/src/GHS3DPlugin/GHS3DPlugin_Hypothesis_i.cxx @@ -44,9 +44,6 @@ // #include // #include CORBA_SERVER_HEADER(SALOMEDS) -#ifndef GHS3D_VERSION -#define GHS3D_VERSION 41 -#endif //======================================================================= //function : GHS3DPlugin_Hypothesis_i //======================================================================= @@ -839,16 +836,16 @@ GHS3DPlugin::GHS3DEnforcedMeshList* GHS3DPlugin_Hypothesis_i::GetEnforcedMeshes( bool GHS3DPlugin_Hypothesis_i::SetEnforcedMeshWithGroup(SMESH::SMESH_IDSource_ptr theSource, SMESH::ElementType theType, const char* theGroupName) throw (SALOME::SALOME_Exception) { -#if GHS3D_VERSION >= 42 +// #if GHS3D_VERSION >= 42 return p_SetEnforcedMesh(theSource, theType, "", theGroupName); -#else - SALOME::ExceptionStruct ExDescription; - ExDescription.text = "Bad version of GHS3D. It must >= 4.2."; - ExDescription.type = SALOME::BAD_PARAM; - ExDescription.sourceFile = "GHS3DPlugin_Hypothesis_i.cxx"; - ExDescription.lineNumber = 719; - throw SALOME::SALOME_Exception(ExDescription); -#endif +// #else +// SALOME::ExceptionStruct ExDescription; +// ExDescription.text = "Bad version of GHS3D. It must >= 4.2."; +// ExDescription.type = SALOME::BAD_PARAM; +// ExDescription.sourceFile = "GHS3DPlugin_Hypothesis_i.cxx"; +// ExDescription.lineNumber = 719; +// throw SALOME::SALOME_Exception(ExDescription); +// #endif } /*! @@ -858,16 +855,16 @@ bool GHS3DPlugin_Hypothesis_i::SetEnforcedMesh(SMESH::SMESH_IDSource_ptr theSour throw (SALOME::SALOME_Exception) { // MESSAGE("GHS3DPlugin_Hypothesis_i::SetEnforcedMesh"); -#if GHS3D_VERSION >= 42 +// #if GHS3D_VERSION >= 42 return p_SetEnforcedMesh(theSource, theType); -#else - SALOME::ExceptionStruct ExDescription; - ExDescription.text = "Bad version of GHS3D. It must >= 4.2."; - ExDescription.type = SALOME::BAD_PARAM; - ExDescription.sourceFile = "GHS3DPlugin_Hypothesis_i.cxx"; - ExDescription.lineNumber = 750; - throw SALOME::SALOME_Exception(ExDescription); -#endif +// #else +// SALOME::ExceptionStruct ExDescription; +// ExDescription.text = "Bad version of GHS3D. It must >= 4.2."; +// ExDescription.type = SALOME::BAD_PARAM; +// ExDescription.sourceFile = "GHS3DPlugin_Hypothesis_i.cxx"; +// ExDescription.lineNumber = 750; +// throw SALOME::SALOME_Exception(ExDescription); +// #endif } /*! @@ -876,16 +873,16 @@ bool GHS3DPlugin_Hypothesis_i::SetEnforcedMesh(SMESH::SMESH_IDSource_ptr theSour bool GHS3DPlugin_Hypothesis_i::SetEnforcedMeshSizeWithGroup(SMESH::SMESH_IDSource_ptr theSource, SMESH::ElementType theType, double theSize, const char* theGroupName) throw (SALOME::SALOME_Exception) { -#if GHS3D_VERSION >= 42 +// #if GHS3D_VERSION >= 42 return p_SetEnforcedMesh(theSource, theType, "", theGroupName); -#else - SALOME::ExceptionStruct ExDescription; - ExDescription.text = "Bad version of GHS3D. It must >= 4.2."; - ExDescription.type = SALOME::BAD_PARAM; - ExDescription.sourceFile = "GHS3DPlugin_Hypothesis_i.cxx"; - ExDescription.lineNumber = 750; - throw SALOME::SALOME_Exception(ExDescription); -#endif +// #else +// SALOME::ExceptionStruct ExDescription; +// ExDescription.text = "Bad version of GHS3D. It must >= 4.2."; +// ExDescription.type = SALOME::BAD_PARAM; +// ExDescription.sourceFile = "GHS3DPlugin_Hypothesis_i.cxx"; +// ExDescription.lineNumber = 750; +// throw SALOME::SALOME_Exception(ExDescription); +// #endif } /*! @@ -894,16 +891,16 @@ bool GHS3DPlugin_Hypothesis_i::SetEnforcedMeshSizeWithGroup(SMESH::SMESH_IDSourc bool GHS3DPlugin_Hypothesis_i::SetEnforcedMeshSize(SMESH::SMESH_IDSource_ptr theSource, SMESH::ElementType theType, double theSize) throw (SALOME::SALOME_Exception) { -#if GHS3D_VERSION >= 42 +// #if GHS3D_VERSION >= 42 return p_SetEnforcedMesh(theSource, theType); -#else - SALOME::ExceptionStruct ExDescription; - ExDescription.text = "Bad version of GHS3D. It must >= 4.2."; - ExDescription.type = SALOME::BAD_PARAM; - ExDescription.sourceFile = "GHS3DPlugin_Hypothesis_i.cxx"; - ExDescription.lineNumber = 750; - throw SALOME::SALOME_Exception(ExDescription); -#endif +// #else +// SALOME::ExceptionStruct ExDescription; +// ExDescription.text = "Bad version of GHS3D. It must >= 4.2."; +// ExDescription.type = SALOME::BAD_PARAM; +// ExDescription.sourceFile = "GHS3DPlugin_Hypothesis_i.cxx"; +// ExDescription.lineNumber = 750; +// throw SALOME::SALOME_Exception(ExDescription); +// #endif } bool GHS3DPlugin_Hypothesis_i::p_SetEnforcedMesh(SMESH::SMESH_IDSource_ptr theSource, SMESH::ElementType theType, const char* theName, const char* theGroupName) diff --git a/src/GHS3DPlugin/Makefile.am b/src/GHS3DPlugin/Makefile.am index 1d7fc51..182512d 100644 --- a/src/GHS3DPlugin/Makefile.am +++ b/src/GHS3DPlugin/Makefile.am @@ -44,16 +44,16 @@ dist_libGHS3DEngine_la_SOURCES = \ GHS3DPlugin_Hypothesis_i.cxx libGHS3DEngine_la_CPPFLAGS = \ - $(KERNEL_CXXFLAGS) \ - $(CAS_CPPFLAGS) \ - $(GEOM_CXXFLAGS) \ - $(MED_CXXFLAGS) \ - $(SMESH_CXXFLAGS) \ - $(VTK_INCLUDES) \ - $(BOOST_CPPFLAGS) \ - $(CORBA_CXXFLAGS) \ - $(CORBA_INCLUDES) \ - -I$(top_builddir)/idl + $(KERNEL_CXXFLAGS) \ + $(CAS_CPPFLAGS) \ + $(GEOM_CXXFLAGS) \ + $(MED_CXXFLAGS) \ + $(SMESH_CXXFLAGS) \ + $(VTK_INCLUDES) \ + $(BOOST_CPPFLAGS) \ + $(CORBA_CXXFLAGS) \ + $(CORBA_INCLUDES) \ + -I$(top_builddir)/idl libGHS3DEngine_la_LDFLAGS = \ ../../idl/libSalomeIDLGHS3DPLUGIN.la \ diff --git a/src/GUI/GHS3DPluginGUI_HypothesisCreator.cxx b/src/GUI/GHS3DPluginGUI_HypothesisCreator.cxx index 4f32cba..eab4b29 100644 --- a/src/GUI/GHS3DPluginGUI_HypothesisCreator.cxx +++ b/src/GUI/GHS3DPluginGUI_HypothesisCreator.cxx @@ -594,7 +594,7 @@ QFrame* GHS3DPluginGUI_HypothesisCreator::buildFrame() // myEnfMesh = SMESH::SMESH_Mesh::_nil(); // myEnfMeshArray = new SMESH::mesh_array(); - myEnfMeshWdg = new StdMeshersGUI_ObjectReferenceParamWdg( IDSOURCE, myEnfMeshGroup, /*multiSel=*/true); + myEnfMeshWdg = new StdMeshersGUI_ObjectReferenceParamWdg( SMESH::IDSOURCE, myEnfMeshGroup, /*multiSel=*/true); myEnfMeshWdg->SetDefaultText(tr("GHS3D_ENF_SELECT_MESH"), "QLineEdit { color: grey }"); myEnfMeshWdg->AvoidSimultaneousSelection(myEnfVertexWdg); -- 2.39.2