aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorIvan Lloro <ivan.lloro.boada@gmail.com>2024-10-24 12:06:29 +0200
committerIvan Lloro <ivan.lloro.boada@gmail.com>2024-10-24 12:32:30 +0200
commit25e33f6ba23471c83d447387bceb8c360a1cec17 (patch)
tree0aa8e7a4b1058458c40e93a3a66db96730e4b002 /sci-physics
parentmedia-gfx/mayo: Qt6-enabled compilation (diff)
downloadguru-25e33f6ba23471c83d447387bceb8c360a1cec17.tar.gz
guru-25e33f6ba23471c83d447387bceb8c360a1cec17.tar.bz2
guru-25e33f6ba23471c83d447387bceb8c360a1cec17.zip
sci-physics/openmodelica: add 1.24.0
Signed-off-by: Ivan Lloro <ivan.lloro.boada@gmail.com>
Diffstat (limited to 'sci-physics')
-rw-r--r--sci-physics/openmodelica/Manifest9
-rw-r--r--sci-physics/openmodelica/files/openmodelica-1.24.0-raw_strings.patch29
-rw-r--r--sci-physics/openmodelica/openmodelica-1.24.0.ebuild201
3 files changed, 239 insertions, 0 deletions
diff --git a/sci-physics/openmodelica/Manifest b/sci-physics/openmodelica/Manifest
index db4b7b377..a77fe741d 100644
--- a/sci-physics/openmodelica/Manifest
+++ b/sci-physics/openmodelica/Manifest
@@ -1,8 +1,17 @@
DIST OMBootstrapping_openmodelica-1.23.1.tar.gz 3329128 BLAKE2B afdda81842a686e092b46bd50d192f5e35ae6c662e8c5517346d86c7c098f2e23a99df27bc5c045b819472d0539837c845c63123ae4822127a14ac42e4ad2e97 SHA512 2202f02edc33ac4fb7264b0ea82ae4b2c965a85f8b96cb872cc4cc59c5e5b76346a023c416f994a9744021428d598c3dbdf688c0845ba4726849d3c9ee0cd4ba
+DIST OMBootstrapping_openmodelica-1.24.0.tar.gz 3329128 BLAKE2B afdda81842a686e092b46bd50d192f5e35ae6c662e8c5517346d86c7c098f2e23a99df27bc5c045b819472d0539837c845c63123ae4822127a14ac42e4ad2e97 SHA512 2202f02edc33ac4fb7264b0ea82ae4b2c965a85f8b96cb872cc4cc59c5e5b76346a023c416f994a9744021428d598c3dbdf688c0845ba4726849d3c9ee0cd4ba
DIST OMCompiler-3rdParty_openmodelica-1.23.1.tar.gz 50214731 BLAKE2B 56c8d30cc3c15e2f140b331abb718ecb61f4400bc6758bd34e4aea12d475e182d08fee400d5750103e1b968b85c9ff176d0ad80a8c6eb49b276b28409f16caba SHA512 24e75a49027c5c87ec0527d8d49309e6807c7f7ddfd4bd9b933d2f3abece016bd49791af62f6742ad700b089a995fc71d8f94a78458bbf5e9cd08f0c460b75fb
+DIST OMCompiler-3rdParty_openmodelica-1.24.0.tar.gz 50215508 BLAKE2B 9a253052d2b45c8058c2708f1f0b9b5cb5bc37956bffa1ee1c8db3d2a7d47af78b47a00efceeea52012c720665722f846147fd5390a2f82adc8719e12317fefd SHA512 6a77aac7820af83e2168478a592ce771d04a30bc276e98f8a40434515ca43bdb879d0b4087366cf1175b4f40bbfb9fb3f6a3058551a148ea13d1cc7dc5ce99ef
+DIST OMOptim_openmodelica-1.24.0.tar.gz 4022842 BLAKE2B 13acd91f4570fde97fa668e826bea5f8c04ce71360ee675ae02f05f6e391b8d62260e74cc420d56f2c1bcbedf037745370ebc1819f347cf32a5ad0a4205670c5 SHA512 901c036312623f6ef5af198e0b2dbdd97cef7f88ac1dfa9682dad920ffc1c49f992eefba2d67d65901f375bc12f7095b2123586c1b37d96586e25e50c49b4168
DIST OMSens_Qt_openmodelica-1.23.1.tar.gz 211293 BLAKE2B 31392d18a7c062829e1d4016c96e09d6a13c695cb9cd7699e7b8ff5de6a4ee8b58d5e28bc8da2e66b2d892ce344382fdfdfa5a1e42ce50d60f510be5bc508480 SHA512 3f313fbcda9069f2fee85fc70f58f6593f37af3eff8f560fdf61def750ec506873ffb77212a0d8a283e2829f3c1efd527047cf7cef660783d1e5e379100f2229
+DIST OMSens_Qt_openmodelica-1.24.0.tar.gz 211297 BLAKE2B 9cf722ed800c41c3fd453df485b0ab45a7ccb63258d9a74ff2df96754e84f10ea4f1ccbb46a90468279f202180dcd5fb8a71c88402a9681b93efa8cb780d7d66 SHA512 2d5df4fc07a1cc4f7c3a04a086bfc2f5eb9f088b133f0242e56491b496e9f302d83f6b246d4c4079849a067162f9dfec67377444ecfa7d3a9263eda9b6d6fad1
DIST OMSens_openmodelica-1.23.1.tar.gz 8870273 BLAKE2B fc60c8d39053022015e7dfc8e32d5e07acabc9dfe08826153e52e6bbd1c57de21cf0e7e3609c804f875d9a19058fe52b2458687fa357d2a83eb53f21f714bee9 SHA512 b93de754aa3f5ff7e5d725d0886aa47368d74d7a0d2ded0f8ed55c4ead97ad268ce201e17b1604f539ea283fdc306ac932d89c93d2a726bff85c78cc210c1a1c
+DIST OMSens_openmodelica-1.24.0.tar.gz 8870273 BLAKE2B fc60c8d39053022015e7dfc8e32d5e07acabc9dfe08826153e52e6bbd1c57de21cf0e7e3609c804f875d9a19058fe52b2458687fa357d2a83eb53f21f714bee9 SHA512 b93de754aa3f5ff7e5d725d0886aa47368d74d7a0d2ded0f8ed55c4ead97ad268ce201e17b1604f539ea283fdc306ac932d89c93d2a726bff85c78cc210c1a1c
DIST OMSimulator-3rdParty_openmodelica-1.23.1.tar.gz 7638596 BLAKE2B 4162e6845720ac276248daa94b628a83b0aaf96c5c34666f2b36d09cf716a8e18c364e052fae1f23dcf31951cc3f955f09f1e0a997afd7347a29b92dc19cadf9 SHA512 16bd6383249fb1bf4f4edb9c840040d625ca1c48e2524554e06f5b2b6316312be4b674a7a437dcc222b9b73f0847a7169b82b192a0accbb29a1e654fe13ef53b
+DIST OMSimulator-3rdParty_openmodelica-1.24.0.tar.gz 7637943 BLAKE2B 0788d9294fc8238fb71e5571163e6f838505fc5a4b8c98f736dba8d5b63b7c4123301e626968bc6a9429fdef89f3348e178286576a84dcbff28a50e83a953fe1 SHA512 f0fabb884738d8e74b05baf81ebb05be4a51458299c7daed61df3100c1347fe324add93c39eb07f6d02832ad027b241f80227c72029a2a701b68c91d9c1fc9c7
DIST OMSimulator_openmodelica-1.23.1.tar.gz 87918683 BLAKE2B b9fd20eb2c8f48b4c93250314b692694ce0225e35dd11fec13236e255913657379c059182392a99a068780531a8376f9de372d0c0b6a39b6886b54f4ec090681 SHA512 c5f3c64c65935d564a490006a2612e1f72dc81bf941fc250d6c4d817cd1e786d8dae40cba8bca3732dd760246f1dcea8c60dfd31332b1fbb7809318ba6cb89f9
+DIST OMSimulator_openmodelica-1.24.0.tar.gz 87921273 BLAKE2B 8f91945fdbdda6bb2ccaef43204f0d46945ba0e18db21e24c9ccf1e16f0f5048e8d4dcc027bc8842f3abf7b424e53cba11cf229fbc22153ba125bf544458c95c SHA512 8478213bb7d040da65810cb87ae5d19bfac1f8369a3e9963c2e3c508ad18c1480eeac25ef0399cde726dc810467c40044129f88ff5c7723b76b70124e1a15ea9
DIST OpenModelica-common_openmodelica-1.23.1.tar.gz 36148 BLAKE2B cbb76666dbe5afa0c2d76f0e6db4d7be1b444bb71f72a5238040dd94d9d46ff3371d596dec3de14805bae5c68ee213221930a4355eeffad97dbefa5eedea9aa7 SHA512 3d877103f54088068bd74eaddecbefbc03d8afca928afdd515e41853846a5933e5d999b4bde3ec99c142be5fd13287d52ea6fb62846479e40d27fe59afbb2c85
+DIST OpenModelica-common_openmodelica-1.24.0.tar.gz 36148 BLAKE2B cbb76666dbe5afa0c2d76f0e6db4d7be1b444bb71f72a5238040dd94d9d46ff3371d596dec3de14805bae5c68ee213221930a4355eeffad97dbefa5eedea9aa7 SHA512 3d877103f54088068bd74eaddecbefbc03d8afca928afdd515e41853846a5933e5d999b4bde3ec99c142be5fd13287d52ea6fb62846479e40d27fe59afbb2c85
DIST openmodelica-1.23.1.tar.gz 146796677 BLAKE2B c342d16efa96690ce890476daf051e0d632f0f01c672b49aea4b4c034ef5c4573119db99ea0b55402a08f2dabbede6a0e3838bdc10f84ffa8a134d0619511539 SHA512 83a273f3c74dd4400853232688d85a7c0c47a4679c09343249b5a7ec4c54561b1e4230a3f17e1b77173922e2124ac6b546c2f36f471de05a8b99ee2375e96a5e
+DIST openmodelica-1.24.0.tar.gz 146961441 BLAKE2B adae7bcb1f3c12d0d507d26390c446eb914abba687c457a5f9df61913723e2940a7052bd6b29ef48aba514202e7570d1c45bf7b55747df51b52af10b6389dd04 SHA512 e2e85aa5bf108d3501b34f5644817bc6a68380952b3f2b5983265df03b414a7c808098d95821cf7085a6ee17d5f0920c1ef58d2a46cc18b9997d693a24c9499e
diff --git a/sci-physics/openmodelica/files/openmodelica-1.24.0-raw_strings.patch b/sci-physics/openmodelica/files/openmodelica-1.24.0-raw_strings.patch
new file mode 100644
index 000000000..d2762d9c7
--- /dev/null
+++ b/sci-physics/openmodelica/files/openmodelica-1.24.0-raw_strings.patch
@@ -0,0 +1,29 @@
+Regular expression strings are not explicitly defined as raw strings. This
+causes modern python versions (tested with 3.12) to trigger warnings/errors.
+
+See-also: https://github.com/OpenModelica/OpenModelica/issues/12757
+--- a/OMSens/analysis/indiv_sens.py
++++ b/OMSens/analysis/indiv_sens.py
+@@ -323,8 +323,8 @@ def slugify(value):
+ and converts spaces to hyphens.
+ """
+ value = unicodedata.normalize('NFKD', value)
+- value = re.sub('[^\w\s-]', '', value).strip().lower()
+- value = re.sub('[-\s]+', '-', value)
++ value = re.sub(r'[^\w\s-]', '', value).strip().lower()
++ value = re.sub(r'[-\s]+', '-', value)
+ return value
+
+
+--- a/OMSens/modelica_interface/run_omc.py
++++ b/OMSens/modelica_interface/run_omc.py
+@@ -36,7 +36,8 @@ def writeOMCLog(log_str, output_path):
+ final_str = intro_str+separator_str+log_str
+ filesystem.files_aux.writeStrToFile(final_str,output_path)
+ return 0
++
+ def removeTemporaryFiles(folder_path):
+- regex = '.*\.(c|o|h|makefile|log|libs|json)$'
++ regex = r'.*\.(c|o|h|makefile|log|libs|json)$'
+ filesystem.files_aux.removeFilesWithRegexAndPath(regex,folder_path)
+
diff --git a/sci-physics/openmodelica/openmodelica-1.24.0.ebuild b/sci-physics/openmodelica/openmodelica-1.24.0.ebuild
new file mode 100644
index 000000000..df6bca50a
--- /dev/null
+++ b/sci-physics/openmodelica/openmodelica-1.24.0.ebuild
@@ -0,0 +1,201 @@
+# Copyright 1999-2024 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+EAPI=8
+
+inherit cmake desktop xdg fortran-2
+
+DESCRIPTION="Open-source Modelica-based modeling and simulation environment"
+HOMEPAGE="https://openmodelica.org/"
+SRC_URI="
+ https://github.com/OpenModelica/OpenModelica/archive/904c4c783a5fa6eb9e99e4a98bdb0cca1d619303.tar.gz
+ -> ${P}.tar.gz
+ https://github.com/OpenModelica/OMCompiler-3rdParty/archive/82e892ece107787e9ff17780bf5ac8c3f6bc39ba.tar.gz
+ -> OMCompiler-3rdParty_${P}.tar.gz
+ https://github.com/OpenModelica/OMBootstrapping/archive/c289e97c41d00939a4a69fe504961b47283a6d8e.tar.gz
+ -> OMBootstrapping_${P}.tar.gz
+ https://github.com/OpenModelica/OMSens/archive/0d804d597bc385686856d453cc830fad4923fa3e.tar.gz
+ -> OMSens_${P}.tar.gz
+ https://github.com/OpenModelica/OMSens_Qt/archive/92090770426271b4193e78b04f13e6a3abcd6f1a.tar.gz
+ -> OMSens_Qt_${P}.tar.gz
+ https://github.com/OpenModelica/OMSimulator/archive/ce342b60b3675185b7daf8197f4b7fd3227f694f.tar.gz
+ -> OMSimulator_${P}.tar.gz
+ https://github.com/OpenModelica/OMSimulator-3rdParty/archive/5c10de1648d1134a577d9284b58580a72383d89f.tar.gz
+ -> OMSimulator-3rdParty_${P}.tar.gz
+ https://github.com/OpenModelica/OMOptim/archive/f1036f43db18c5015da259771004cfb80e08a110.tar.gz
+ -> OMOptim_${P}.tar.gz
+ https://github.com/OpenModelica/OpenModelica-common/archive/08a01802db5ba5edb540383c46718b89ff229ef2.tar.gz
+ -> OpenModelica-common_${P}.tar.gz
+
+"
+
+LICENSE="OSMC-PL GPL-3 AGPL-3 BSD EPL-1.0 public-domain BSD-with-attribution LGPL-2.1+ LGPL-2 Apache-2.0 Boost-1.0 Modelica-1.1 Modelica-2 MIT WTFPL-2"
+SLOT="0"
+KEYWORDS="~amd64"
+
+RDEPEND="
+ >=app-text/asciidoc-10.2.0
+ >=app-text/doxygen-1.9.8
+ >=dev-libs/boost-1.85.0
+ >=dev-games/openscenegraph-3.6.5-r114
+ dev-lang/python:3.12
+ >=dev-libs/expat-2.5.0
+ dev-libs/icu:0/74.1
+ >=dev-libs/libxml2-2.12.7
+ >=dev-python/kiwisolver-1.3.2
+ >=dev-python/matplotlib-3.3
+ >=dev-python/numpy-1.26.4
+ >=dev-python/pandas-1.1.3
+ >=dev-python/pillow-9.0.1
+ >=dev-python/pytest-8.2.2
+ >=dev-python/six-1.16.0-r1
+ >=dev-python/sphinx-7.3.7-r2
+ dev-qt/qtconcurrent:5
+ dev-qt/qtcore:5
+ dev-qt/qtdeclarative:5
+ dev-qt/qtgui:5
+ dev-qt/qtnetwork:5
+ dev-qt/qtopengl:5
+ dev-qt/qtpositioning:5[qml]
+ dev-qt/qtprintsupport:5
+ dev-qt/qtquickcontrols:5
+ dev-qt/qtquickcontrols2:5
+ dev-qt/qtsvg:5
+ dev-qt/qtwebengine:5[widgets]
+ dev-qt/qtwidgets:5
+ dev-qt/qtxml:5
+ dev-qt/qtxmlpatterns:5
+ dev-qt/qtwebchannel:5[qml]
+ >=net-misc/curl-8.7.1-r4
+ >=net-misc/omniORB-4.3.0
+ >=sci-libs/hdf5-1.14.3-r1
+ >=sys-apps/hwloc-2.9.2
+ >=sys-devel/flex-2.6.4-r6
+ >=sys-libs/ncurses-6.4_p20240414
+ >=sys-libs/readline-8.2_p10
+ >=virtual/blas-3.8
+ >=virtual/jdk-17
+ >=virtual/lapack-3.10
+ >=virtual/libiconv-0-r2
+ >=virtual/libintl-0-r2
+ >=virtual/opencl-3-r3
+ >=virtual/opengl-7.0-r2
+ >=virtual/pkgconfig-3
+"
+
+BDEPEND="
+ dev-util/ccache
+ media-gfx/imagemagick[png]
+"
+
+DEPEND="${RDEPEND}"
+
+PATCHES=(
+ "${FILESDIR}"/"${P}"-raw_strings.patch
+)
+
+src_unpack() {
+ default
+
+ mv "${WORKDIR}/OpenModelica-904c4c783a5fa6eb9e99e4a98bdb0cca1d619303" "${S}" || die
+ rmdir "${S}/OMCompiler/3rdParty" || die
+ mv "${WORKDIR}/OMCompiler-3rdParty-82e892ece107787e9ff17780bf5ac8c3f6bc39ba" "${S}/OMCompiler/3rdParty" || die
+ rmdir "${S}/OMSens" || die
+
+ # OMOptim depends on a working CORBA interface (which fails to compile) supplied by OmniORB.
+ # For compilation trials remember setting -DOM_OMC_USE_CORBA=ON.
+ #rmdir "${S}/OMOptim" || die
+ #mv "${WORKDIR}/OMOptim-e4fb998f99e3fefc63c661715dbc06cbea1f0134" "${S}/OMOptim" || die
+ #rmdir "${S}/OMOptim/common" || die
+ #cp -a "${WORKDIR}/OpenModelica-common-08a01802db5ba5edb540383c46718b89ff229ef2" "${S}/OMOptim/common" || die
+
+ mv "${WORKDIR}/OMSens-0d804d597bc385686856d453cc830fad4923fa3e" "${S}/OMSens" || die
+ rmdir "${S}/OMSens_Qt" || die
+ mv "${WORKDIR}/OMSens_Qt-92090770426271b4193e78b04f13e6a3abcd6f1a" "${S}/OMSens_Qt" || die
+ rmdir "${S}/OMSens_Qt/common" || die
+ mv "${WORKDIR}/OpenModelica-common-08a01802db5ba5edb540383c46718b89ff229ef2" "${S}/OMSens_Qt/common" || die
+ rmdir "${S}/OMSimulator" || die
+ mv "${WORKDIR}/OMSimulator-ce342b60b3675185b7daf8197f4b7fd3227f694f" "${S}/OMSimulator" || die
+ rmdir "${S}/OMSimulator/3rdParty" || die
+ mv "${WORKDIR}/OMSimulator-3rdParty-5c10de1648d1134a577d9284b58580a72383d89f" "${S}/OMSimulator/3rdParty" || die
+ mv "OMBootstrapping-c289e97c41d00939a4a69fe504961b47283a6d8e" "${S}/OMCompiler/Compiler/boot/bomc" || die
+ touch "${S}/OMCompiler/Compiler/boot/bomc/sources.tar.gz" || die
+
+ # Solve https://bugs.gentoo.org/937038
+ rm -fr "${S}/OMCompiler/3rdParty/FMIL/ThirdParty/Minizip/minizip" || die
+ cp -a "${S}/OMSimulator/3rdParty/fmi4c/3rdparty/minizip" \
+ "${S}/OMCompiler/3rdParty/FMIL/ThirdParty/Minizip/minizip" || die
+}
+
+src_configure() {
+ # [2024-10-24] Only OMEdit adapted to Qt6 (not, for example, optimization plugins)
+ local mycmakeargs=(
+ -DOM_OMEDIT_ENABLE_QTWEBENGINE=ON
+ -DBUILD_SHARED_LIBS=OFF
+ -DOM_ENABLE_ENCRYPTION=OFF
+ -DOM_USE_CCACHE=ON
+ -DOM_ENABLE_GUI_CLIENTS=ON
+ -DOM_OMC_ENABLE_FORTRAN=ON
+ -DOM_OMC_ENABLE_IPOPT=ON
+ -DOM_OMC_ENABLE_CPP_RUNTIME=ON
+ -DOM_OMC_USE_CORBA=OFF
+ -DOM_OMC_USE_LAPACK=ON
+ -DOM_OMEDIT_INSTALL_RUNTIME_DLLS=ON
+ -DOM_OMEDIT_ENABLE_TESTS=OFF
+ -DOM_OMEDIT_ENABLE_QTWEBENGINE=ON
+ -DOM_OMEDIT_ENABLE_LIBXML2=ON
+ -DOM_QT_MAJOR_VERSION=5
+ )
+ cmake_src_configure
+}
+
+src_compile() {
+ # [2024-07-15]
+ # OMSens is disabled in "${S}/CMakeLists.txt" (## omc_add_subdirectory(OMSens)) due to lack of a
+ # working "${S}/OMSens/CMakeLists.txt". So, we compile it manually.
+ pushd OMSens/fortran_interface > /dev/null || die
+ ${FC} -fPIC -c Rutf.for Rut.for Curvif.for || die
+ # BUG: Undefined symbol curvif_ in
+ # ${S}/OMSens/fortran_interface/curvif_simplified.cpython-312-x86_64-linux-gnu.so
+ # See with nm -D or objdump -tT
+ # ${S}/OMSens/fortran_interface/curvif_simplified.cpython-312-x86_64-linux-gnu.so
+ # This bug causes "Vectorial Parameter Based Sensitivity Analysis" in OMSens to fail.
+ f2py --verbose -c -I. Curvif.o Rutf.o Rut.o -m curvif_simplified curvif_simplified.pyf Curvif_simplified.f90 || die
+ popd > /dev/null || die
+
+ cmake_src_compile
+}
+
+src_install() {
+ cmake_src_install
+
+ # [2024-07-15]
+ # OMSens is disabled in "${S}/CMakeLists.txt" (## omc_add_subdirectory(OMSens)) due to lack of a
+ # working "${S}/OMSens/CMakeLists.txt". So, we install it manually.
+ cp -a "${WORKDIR}"/"${P}"/OMSens "${ED}"/usr/share/ || die
+ rm -fr "${ED}"/usr/share/OMSens/{old,.git,.gitignore,CMakeLists.txt,.jenkins,Jenkinsfile,Makefile.omdev.mingw,Makefile.unix} || die
+ rm -fr "${ED}"/usr/share/OMSens/{README.md,setup.py,testing} || die
+
+ newicon -s scalable OMShell/OMShell/OMShellGUI/Resources/omshell-large.svg omshell.svg
+ newicon -s scalable OMNotebook/OMNotebook/OMNotebookGUI/Resources/OMNotebook_icon.svg OMNotebook.svg
+ convert OMEdit/OMEditLIB/Resources/icons/omedit.ico[0] -thumbnail 256x256 -flatten \
+ OMEdit/OMEditLIB/Resources/icons/omedit_icon.png || die
+ newicon -s 256 OMEdit/OMEditLIB/Resources/icons/omedit_icon.png omedit.png
+
+ make_desktop_entry "OMEdit %F" OMedit omedit "Physics;" "MimeType=text/x-modelica;"
+ make_desktop_entry OMShell OMShell omshell "Physics;"
+ make_desktop_entry "OMNotebook %f" OMNotebook OMNotebook "Physics;"
+
+ # Fix libraries
+ if [[ $(get_libdir) != "lib" ]]; then
+ mv "${ED}"/usr/lib/omc/* "${ED}"/usr/$(get_libdir)/omc/ || die
+ rmdir "${ED}"/usr/lib/omc/ || die
+ dosym -r /usr/$(get_libdir)/omc /usr/lib/omc
+ fi
+ dosym -r /usr/include/omc/ParModelica /usr/include/ParModelica
+
+ # Documentation housekeeping & QA
+ mv "${ED}"/usr/share/doc/omc "${ED}"/usr/share/doc/"${PF}" || die
+ rm -fr "${ED}"/usr/doc "${ED}"/usr/share/{zmq,cmake} || die
+
+ ewarn "Upstream has deprecated OMTLMSimulator and, therefore, it has not been installed. Use OMSimulator/SSP instead."
+}