Re: [Spice-devel] [PATCH spice-streaming-agent] Add missing libdrm and libXrandr dependencies to gitlab CI

2019-01-30 Thread Frediano Ziglio
Acked-by: Frediano Ziglio > > --- > .gitlab-ci.yml | 4 +++- > 1 file changed, 3 insertions(+), 1 deletion(-) > > diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml > index a0ff1f6..ab1b2a3 100644 > --- a/.gitlab-ci.yml > +++ b/.gitlab-ci.yml > @@ -1,7 +1,9 @@ > image: fedora:latest > > before_s

Re: [Spice-devel] [vdagent-linux v3] vdagent: Use g_file_test() instead of direct stat call

2019-01-30 Thread Jakub Janku
On Wed, Jan 30, 2019 at 1:50 PM Christophe Fergeau wrote: > > vdagent.c has a 'file_test' function which tests for the existence of > the /dev entry for the spicevmc channel. glib already provides such a > g_file_test() function, so we can use it instead. > > Signed-off-by: Christophe Fergeau > -

Re: [Spice-devel] [vdagent-linux v2 1/2] vdagent: Silently ignore missing spicevmc device

2019-01-30 Thread Jakub Janku
On Wed, Jan 30, 2019 at 6:06 PM Christophe Fergeau wrote: > > On Wed, Jan 30, 2019 at 01:46:21PM +0100, Jakub Janku wrote: > > On Wed, Jan 30, 2019 at 1:23 PM Christophe Fergeau > > wrote: > > > > > > On most distros, spice-vdagent will be autostarted as part of the > > > startup of the desktop

Re: [Spice-devel] [vdagent-linux v2 1/2] vdagent: Silently ignore missing spicevmc device

2019-01-30 Thread Frediano Ziglio
> On Wed, Jan 30, 2019 at 01:46:21PM +0100, Jakub Janku wrote: > > On Wed, Jan 30, 2019 at 1:23 PM Christophe Fergeau > > wrote: > > > > > > On most distros, spice-vdagent will be autostarted as part of the > > > startup of the desktop environment session. This is done by > > > spice-vdagent.deskt

Re: [Spice-devel] [vdagent-linux v2 1/2] vdagent: Silently ignore missing spicevmc device

2019-01-30 Thread Christophe Fergeau
On Wed, Jan 30, 2019 at 01:46:21PM +0100, Jakub Janku wrote: > On Wed, Jan 30, 2019 at 1:23 PM Christophe Fergeau > wrote: > > > > On most distros, spice-vdagent will be autostarted as part of the > > startup of the desktop environment session. This is done by > > spice-vdagent.desktop, which has

Re: [Spice-devel] [PATCH spice-server] red-stream-device: Fix "make syntax-check"

2019-01-30 Thread Lukáš Hrázký
Just sent the same patch... oh well. Acked-by: Lukáš Hrázký On Wed, 2019-01-30 at 15:13 +, Frediano Ziglio wrote: > Avoid using strncpy, considered not secure. > In this case a simple memcpy is used, we are going to terminate > the string in any case on the next line. > > Signed-off-by: Fr

[Spice-devel] [PATCH spice] red-stream-device: use memcpy instead of strncpy

2019-01-30 Thread Lukáš Hrázký
Signed-off-by: Lukáš Hrázký --- server/red-stream-device.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/server/red-stream-device.c b/server/red-stream-device.c index 440b2689..2a210cc7 100644 --- a/server/red-stream-device.c +++ b/server/red-stream-device.c @@ -330,9

[Spice-devel] [PATCH spice-server] red-stream-device: Fix "make syntax-check"

2019-01-30 Thread Frediano Ziglio
Avoid using strncpy, considered not secure. In this case a simple memcpy is used, we are going to terminate the string in any case on the next line. Signed-off-by: Frediano Ziglio --- server/red-stream-device.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/server/red-

[Spice-devel] [PATCH spice-gtk v2] channel-display-gst: Use recorder for frame statistics

2019-01-30 Thread Frediano Ziglio
Allows to handle these statistics in a more flexible way. Signed-off-by: Frediano Ziglio --- src/channel-display-gst.c | 12 1 file changed, 8 insertions(+), 4 deletions(-) Changes since v1: - change formatting constants to system one instead of GLib to fix build on Windows. dif

Re: [Spice-devel] [PATCH spice-gtk v2] build-sys: Make git-version-gen work again with Meson

2019-01-30 Thread Frediano Ziglio
> On Wed, Jan 30, 2019 at 09:28:36AM -0500, Frediano Ziglio wrote: > > > > > > Acked-by: Christophe Fergeau > > > off-topic, but the tarball generated with ninja dist is only usable with > > > meson even if it contains autotools files too (but eg gtk-doc.make is > > > missing). > > > > > > Chris

Re: [Spice-devel] [PATCH spice-gtk v2] build-sys: Make git-version-gen work again with Meson

2019-01-30 Thread Christophe Fergeau
On Wed, Jan 30, 2019 at 09:28:36AM -0500, Frediano Ziglio wrote: > > > > Acked-by: Christophe Fergeau > > off-topic, but the tarball generated with ninja dist is only usable with > > meson even if it contains autotools files too (but eg gtk-doc.make is > > missing). > > > > Christophe > > > >

[Spice-devel] [PATCH spice-gtk 1/2] Allows to enable recorder integration

2019-01-30 Thread Frediano Ziglio
recorder library will be used to collect some statistics during development. Signed-off-by: Frediano Ziglio --- configure.ac | 1 + meson_options.txt| 5 + subprojects/spice-common | 2 +- 3 files changed, 7 insertions(+), 1 deletion(-) diff --git a/configure.ac b/config

[Spice-devel] [PATCH spice-gtk 2/2] channel-display-gst: Use recorder for frame statistics

2019-01-30 Thread Frediano Ziglio
Allows to handle these statistics in a more flexible way. Signed-off-by: Frediano Ziglio --- src/channel-display-gst.c | 12 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/src/channel-display-gst.c b/src/channel-display-gst.c index 4272ade8..c5a08a7a 100644 --- a/src/

Re: [Spice-devel] [PATCH spice-gtk v2] build-sys: Make git-version-gen work again with Meson

2019-01-30 Thread Frediano Ziglio
> > Acked-by: Christophe Fergeau > off-topic, but the tarball generated with ninja dist is only usable with > meson even if it contains autotools files too (but eg gtk-doc.make is > missing). > > Christophe > Well, I'm glad "ninja dist" is working for me, in my case I cannot say it works, I ha

Re: [Spice-devel] [PATCH spice-gtk v2] build-sys: Make git-version-gen work again with Meson

2019-01-30 Thread Christophe Fergeau
Acked-by: Christophe Fergeau off-topic, but the tarball generated with ninja dist is only usable with meson even if it contains autotools files too (but eg gtk-doc.make is missing). Christophe On Mon, Jan 28, 2019 at 09:04:00PM +, Frediano Ziglio wrote: > d0cbd9618f0b removed the ability to

Re: [Spice-devel] [PATCH] catch: directory is now catch2

2019-01-30 Thread Frediano Ziglio
> > On 1/29/19 5:53 PM, Frediano Ziglio wrote: > >> Upstream and since Fedora 27 > >> > >> Signed-off-by: Uri Lublin > > > > Does it work on RHEL7 ? > > Only if RHEL-7 has catch2. > If not see another option below. > It sounds reasonable then. Newer catch sources uses catch2 directory (tried

[Spice-devel] [PATCH spice-streaming-agent] Add missing libdrm and libXrandr dependencies to gitlab CI

2019-01-30 Thread Lukáš Hrázký
--- .gitlab-ci.yml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index a0ff1f6..ab1b2a3 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -1,7 +1,9 @@ image: fedora:latest before_script: -- dnf install 'dnf-command(copr)' make auto

Re: [Spice-devel] [PATCH spice-server v2] image-encoders: Initialize Zlib lazily

2019-01-30 Thread Christophe Fergeau
On Wed, Jan 30, 2019 at 08:09:57AM -0500, Frediano Ziglio wrote: > > On Mon, Jan 28, 2019 at 07:33:54PM +, Frediano Ziglio wrote: > > > Zlib structure take up more than 1MB and it is rarely used nowadays > > > as it is not much effective. > > > Initialise it only when necessary saving some memo

Re: [Spice-devel] [PATCH spice-server v3 02/32] red-replay-qxl: Use PRIxPTR constant for string formatting

2019-01-30 Thread Frediano Ziglio
> On 1/7/19 8:01 PM, Frediano Ziglio wrote: > > These constants are meant to be used in format string for pointers > > types. Use them for portability. > > > > Signed-off-by: Frediano Ziglio > > --- > > server/red-replay-qxl.c | 2 +- > > 1 file changed, 1 insertion(+), 1 deletion(-) > > > >

Re: [Spice-devel] [PATCH spice-server 2/3] meson: Use dictionaries addition feature

2019-01-30 Thread Eduardo Lima (Etrunko)
On 1/30/19 11:25 AM, Frediano Ziglio wrote: >> >> Since meson 0.48 it is possible to 'add' to dictionaries as well. Make >> use of this feature in our build. >> >> http://mesonbuild.com/Release-notes-for-0-48-0.html#dictionary-addition >> >> Signed-off-by: Eduardo Lima (Etrunko) >> --- >> meson.b

Re: [Spice-devel] [PATCH spice-server v3 02/32] red-replay-qxl: Use PRIxPTR constant for string formatting

2019-01-30 Thread Uri Lublin
On 1/7/19 8:01 PM, Frediano Ziglio wrote: These constants are meant to be used in format string for pointers types. Use them for portability. Signed-off-by: Frediano Ziglio --- server/red-replay-qxl.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/server/red-replay-qxl.c

[Spice-devel] CI failing to compile spice-server

2019-01-30 Thread Frediano Ziglio
https://gitlab.freedesktop.org/spice/spice/-/jobs/93767 I think in this case the strncpy could be replaced with a memcpy. Frediano ___ Spice-devel mailing list Spice-devel@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/spice-devel

Re: [Spice-devel] [PATCH spice-server 2/3] meson: Use dictionaries addition feature

2019-01-30 Thread Frediano Ziglio
> > Since meson 0.48 it is possible to 'add' to dictionaries as well. Make > use of this feature in our build. > > http://mesonbuild.com/Release-notes-for-0-48-0.html#dictionary-addition > > Signed-off-by: Eduardo Lima (Etrunko) > --- > meson.build | 2 +- > server/tests/meson.bu

Re: [Spice-devel] [PATCH spice-server v2] image-encoders: Initialize Zlib lazily

2019-01-30 Thread Frediano Ziglio
> On Mon, Jan 28, 2019 at 07:33:54PM +, Frediano Ziglio wrote: > > Zlib structure take up more than 1MB and it is rarely used nowadays > > as it is not much effective. > > Initialise it only when necessary saving some memory in the normal > > case. > > > > Signed-off-by: Frediano Ziglio > > -

Re: [Spice-devel] [PATCH spice-server v2] image-encoders: Initialize Zlib lazily

2019-01-30 Thread Christophe Fergeau
On Mon, Jan 28, 2019 at 07:33:54PM +, Frediano Ziglio wrote: > Zlib structure take up more than 1MB and it is rarely used nowadays > as it is not much effective. > Initialise it only when necessary saving some memory in the normal > case. > > Signed-off-by: Frediano Ziglio > --- > server/ima

Re: [Spice-devel] [PATCH spice-common] Remove obsolete Autoconf macros

2019-01-30 Thread Christophe Fergeau
On Wed, Jan 30, 2019 at 09:19:08AM +, Frediano Ziglio wrote: > Autoconf 2.63 was released on September 2008. It's not really a matter of when this was released, what matters is what version the distros we care about have. As far as I remember, this was needed on el6, but these days it has 2.63

Re: [Spice-devel] [PATCH spice-server] display-channel: Remove unused includes

2019-01-30 Thread Frediano Ziglio
- Original Message - > From: "Christophe Fergeau" > To: "Frediano Ziglio" > Cc: spice-devel@lists.freedesktop.org > Sent: Wednesday, 30 January, 2019 12:53:05 PM > Subject: Re: [Spice-devel] [PATCH spice-server] display-channel: Remove > unused includes > > On Wed, Jan 30, 2019 at 09:

Re: [Spice-devel] [PATCH spice-server v3 00/32] Port SPICE server to Windows

2019-01-30 Thread Christophe Fergeau
On Wed, Jan 30, 2019 at 04:23:56AM -0500, Frediano Ziglio wrote: > ping I'd drop the 'socket compatibility layer' stuff from that series to make it shorter, a 32 patch series with no real world use case is very low priority to me. A shorter portability patch series is more likely to get a review f

Re: [Spice-devel] [PATCH spice-server] display-channel: Remove unused includes

2019-01-30 Thread Christophe Fergeau
On Wed, Jan 30, 2019 at 09:46:34AM +, Frediano Ziglio wrote: > display-channel.h is not using any of the definition from > these headers. > I'd mention the red-worker.c change, looks good otherwise Acked-by: Christophe Fergeau > Signed-off-by: Frediano Ziglio > --- > server/display-chann

Re: [Spice-devel] [PATCH] catch: directory is now catch2

2019-01-30 Thread Uri Lublin
On 1/29/19 5:53 PM, Frediano Ziglio wrote: Upstream and since Fedora 27 Signed-off-by: Uri Lublin Does it work on RHEL7 ? Only if RHEL-7 has catch2. If not see another option below. --- Another option is to check both catch/ and catch2/ and pick the one that is installed on the system,

[Spice-devel] [vdagent-linux v3] vdagent: Use g_file_test() instead of direct stat call

2019-01-30 Thread Christophe Fergeau
vdagent.c has a 'file_test' function which tests for the existence of the /dev entry for the spicevmc channel. glib already provides such a g_file_test() function, so we can use it instead. Signed-off-by: Christophe Fergeau --- src/vdagent/vdagent.c | 11 +-- 1 file changed, 1 insertion(

Re: [Spice-devel] [vdagent-linux v2 2/2] vdagent: Favour access() over stat()

2019-01-30 Thread Christophe Fergeau
On Wed, Jan 30, 2019 at 01:43:51PM +0100, Christophe Fergeau wrote: > Hey, > > On Wed, Jan 30, 2019 at 01:36:40PM +0100, Jakub Janku wrote: > > > diff --git a/src/vdagent/vdagent.c b/src/vdagent/vdagent.c > > > index ff3328c..b077d1d 100644 > > > --- a/src/vdagent/vdagent.c > > > +++ b/src/vdagent

Re: [Spice-devel] [vdagent-linux v2 1/2] vdagent: Silently ignore missing spicevmc device

2019-01-30 Thread Jakub Janku
On Wed, Jan 30, 2019 at 1:23 PM Christophe Fergeau wrote: > > On most distros, spice-vdagent will be autostarted as part of the > startup of the desktop environment session. This is done by > spice-vdagent.desktop, which has no way of checking if we are in a virt > environment with the needed devi

Re: [Spice-devel] [vdagent-linux v2 2/2] vdagent: Favour access() over stat()

2019-01-30 Thread Christophe Fergeau
Hey, On Wed, Jan 30, 2019 at 01:36:40PM +0100, Jakub Janku wrote: > > diff --git a/src/vdagent/vdagent.c b/src/vdagent/vdagent.c > > index ff3328c..b077d1d 100644 > > --- a/src/vdagent/vdagent.c > > +++ b/src/vdagent/vdagent.c > > @@ -20,6 +20,7 @@ > > */ > > #include > > > > +#include > > Wh

Re: [Spice-devel] [vdagent-linux v2 1/2] vdagent: Silently ignore missing spicevmc device

2019-01-30 Thread Frediano Ziglio
> > On most distros, spice-vdagent will be autostarted as part of the > startup of the desktop environment session. This is done by > spice-vdagent.desktop, which has no way of checking if we are in a virt > environment with the needed devices present. > > Currently, if /dev/virtio-ports/com.redh

Re: [Spice-devel] [vdagent-linux v2 2/2] vdagent: Favour access() over stat()

2019-01-30 Thread Jakub Janku
Hi, On Wed, Jan 30, 2019 at 1:23 PM Christophe Fergeau wrote: > > vdagent.c has a 'file_test' function which tests for the existence of > the /dev entry for the spicevmc channel. This commit reworks it to give > it a better name, to make it return a boolean, and to use access() > rather than stat

[Spice-devel] [vdagent-linux v2 1/2] vdagent: Silently ignore missing spicevmc device

2019-01-30 Thread Christophe Fergeau
On most distros, spice-vdagent will be autostarted as part of the startup of the desktop environment session. This is done by spice-vdagent.desktop, which has no way of checking if we are in a virt environment with the needed devices present. Currently, if /dev/virtio-ports/com.redhat.spice.0 is m

[Spice-devel] [vdagent-linux v2 2/2] vdagent: Favour access() over stat()

2019-01-30 Thread Christophe Fergeau
vdagent.c has a 'file_test' function which tests for the existence of the /dev entry for the spicevmc channel. This commit reworks it to give it a better name, to make it return a boolean, and to use access() rather than stat() which makes the goal of that function more obvious. Signed-off-by: Chr

[Spice-devel] [PATCH spice-server 1/2] m4: Remove repeated warnings suppression

2019-01-30 Thread Eduardo Lima (Etrunko)
Signed-off-by: Eduardo Lima (Etrunko) --- m4/spice-compile-warnings.m4 | 3 --- 1 file changed, 3 deletions(-) diff --git a/m4/spice-compile-warnings.m4 b/m4/spice-compile-warnings.m4 index 5a601209..2081475e 100644 --- a/m4/spice-compile-warnings.m4 +++ b/m4/spice-compile-warnings.m4 @@ -51,9 +

[Spice-devel] [PATCH spice-server 2/2] meson: Add option to enable all warnings

2019-01-30 Thread Eduardo Lima (Etrunko)
Currently on the main meson.build file, this could be moved to a subdirectory in a dedicated meson.build file for this sole purpose. Signed-off-by: Eduardo Lima (Etrunko) --- meson.build | 220 +-- meson_options.txt| 4 + subprojects/spi

[Spice-devel] [PATCH spice-server 1/3] meson: Use underscorify() instead of split()

2019-01-30 Thread Eduardo Lima (Etrunko)
Signed-off-by: Eduardo Lima (Etrunko) --- meson.build | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/meson.build b/meson.build index 5f402a5f..811099c6 100644 --- a/meson.build +++ b/meson.build @@ -192,8 +192,7 @@ endif # # global C defines # -glib_major_minor = glib_ve

[Spice-devel] [PATCH spice-server 3/3] meson: Use gnu_symbol_visibility keyword introduced in meson 0.48

2019-01-30 Thread Eduardo Lima (Etrunko)
Signed-off-by: Eduardo Lima (Etrunko) --- meson.build| 3 +-- server/meson.build | 3 ++- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/meson.build b/meson.build index 29af6b04..14febb7e 100644 --- a/meson.build +++ b/meson.build @@ -36,8 +36,7 @@ spice_server_so_version

[Spice-devel] [PATCH spice-server 0/3] Meson build improvements

2019-01-30 Thread Eduardo Lima (Etrunko)
Updating the meson requirement to version 0.48, brings some interesting features, especially the hability of adding to dictionaries. I used it to implement the equivalent of manywarnings.m4 for meson. I will send this one patch separated because I am not really convinced about how it should be imp

[Spice-devel] [PATCH spice-server 2/3] meson: Use dictionaries addition feature

2019-01-30 Thread Eduardo Lima (Etrunko)
Since meson 0.48 it is possible to 'add' to dictionaries as well. Make use of this feature in our build. http://mesonbuild.com/Release-notes-for-0-48-0.html#dictionary-addition Signed-off-by: Eduardo Lima (Etrunko) --- meson.build | 2 +- server/tests/meson.build | 54

Re: [Spice-devel] [PATCH] spec: call semanage in posttrans not in post

2019-01-30 Thread Daniel P . Berrangé
On Wed, Jan 30, 2019 at 04:05:27AM -0500, Frediano Ziglio wrote: > > On Tue, Jan 29, 2019 at 06:40:32PM +0200, Uri Lublin wrote: > > > It can happen that selinux-policy (targeted) is installed only after > > > spice-streaming-agent (upon system installation). In that case > > > running semanage in

[Spice-devel] [PATCH spice-server] display-channel: Remove unused includes

2019-01-30 Thread Frediano Ziglio
display-channel.h is not using any of the definition from these headers. Signed-off-by: Frediano Ziglio --- server/display-channel.h | 10 -- server/red-worker.c | 1 + 2 files changed, 1 insertion(+), 10 deletions(-) diff --git a/server/display-channel.h b/server/display-channel.

Re: [Spice-devel] [PATCH spice-server v3 00/32] Port SPICE server to Windows

2019-01-30 Thread Frediano Ziglio
ping > > Windows support is useful to use with Qemu under Windows as host or > to implement servers like Xspice. > Mainly SPICE server uses lot of libraries to expose a TCP protocol. > As TCP is implemented with socket library which is quite portable was > not that hard to port. > Beside some min

[Spice-devel] [PATCH spice-common] Remove obsolete Autoconf macros

2019-01-30 Thread Frediano Ziglio
Autoconf 2.63 was released on September 2008. These simple macros conflict with system ones and can causes issues with some systems (currently MacOS). Signed-off-by: Frediano Ziglio --- m4/spice-deps.m4 | 8 1 file changed, 8 deletions(-) diff --git a/m4/spice-deps.m4 b/m4/spice-deps.m

Re: [Spice-devel] [PATCH] catch: directory is now catch2

2019-01-30 Thread Frediano Ziglio
> On 1/30/19 10:48 AM, Christophe Fergeau wrote: > > On Tue, Jan 29, 2019 at 05:51:54PM +0200, Uri Lublin wrote: > >> Upstream and since Fedora 27 > >> > >> Signed-off-by: Uri Lublin > >> --- > >> > >> Another option is to check both catch/ and catch2/ > >> and pick the one that is installed on th

Re: [Spice-devel] [PATCH] catch: directory is now catch2

2019-01-30 Thread Uri Lublin
On 1/30/19 10:48 AM, Christophe Fergeau wrote: On Tue, Jan 29, 2019 at 05:51:54PM +0200, Uri Lublin wrote: Upstream and since Fedora 27 Signed-off-by: Uri Lublin --- Another option is to check both catch/ and catch2/ and pick the one that is installed on the system, if any --- configure.ac

Re: [Spice-devel] [PATCH] spec: call semanage in posttrans not in post

2019-01-30 Thread Frediano Ziglio
> On Tue, Jan 29, 2019 at 06:40:32PM +0200, Uri Lublin wrote: > > It can happen that selinux-policy (targeted) is installed only after > > spice-streaming-agent (upon system installation). In that case > > running semanage in post scriptlet will fail. > > > > In posttrans all packages are already

Re: [Spice-devel] [PATCH] catch: directory is now catch2

2019-01-30 Thread Frediano Ziglio
> > On Tue, Jan 29, 2019 at 05:51:54PM +0200, Uri Lublin wrote: > > Upstream and since Fedora 27 > > > > Signed-off-by: Uri Lublin > > --- > > > > Another option is to check both catch/ and catch2/ > > and pick the one that is installed on the system, if any > > > > --- > > configure.ac

Re: [Spice-devel] [PATCH linux vdagent] Fix coding style

2019-01-30 Thread Frediano Ziglio
> > Use brackets everywhere. Acked-by: Frediano Ziglio > --- > src/vdagent/device-info.c | 28 +++- > 1 file changed, 19 insertions(+), 9 deletions(-) > > diff --git a/src/vdagent/device-info.c b/src/vdagent/device-info.c > index 7c0f615..4983543 100644 > --- a/src/vd

Re: [Spice-devel] [PATCH] catch: directory is now catch2

2019-01-30 Thread Christophe Fergeau
On Tue, Jan 29, 2019 at 05:51:54PM +0200, Uri Lublin wrote: > Upstream and since Fedora 27 > > Signed-off-by: Uri Lublin > --- > > Another option is to check both catch/ and catch2/ > and pick the one that is installed on the system, if any > > --- > configure.ac | 4 +