['name' => 'dobermann', 'host' => 'dobermann.cubedesigners.com', 'weight' => 6, 'region' => Region::EUROPE, 'local' => false],
['name' => 'elephantman', 'host' => 'paris.cubedesigners.com', 'weight' => 2, 'region' => Region::EUROPE, 'local' => false],
['name' => 'fastandfurious', 'host' => 'fastandfurious.cubedesigners.com', 'port' => 9460, 'weight' => 2, 'region' => Region::EUROPE, 'local' => false],
+ ['name' => 'gremlins', 'host' => 'gremlins.cubedesigners.com', 'weight' => 8, 'region' => Region::EUROPE, 'local' => false],
['name' => 'isleofdogs', 'host' => 'paris.cubedesigners.com', 'port' => 9458, 'weight' => 4, 'region' => Region::EUROPE, 'local' => false],
['name' => 'jumanji', 'host' => 'paris.cubedesigners.com', 'port' => 9459, 'weight' => 6, 'region' => Region::EUROPE, 'local' => false],
['name' => 'kingkong', 'host' => 'kingkong.cubedesigners.com', 'weight' => 6, 'region' => Region::USA, 'local' => true],
l2=172.16.0.0/12
l3=192.168.0.0/16
i0=`dig +short paris.cubedesigners.com | tail -1`
-i1=`dig +short old.paris.cubedesigners.com | tail -1`
-i2=`dig +short montpellier.cubedesigners.com | tail -1`
-i3=`dig +short tortuga.enhydra.fr | tail -1`
-i4=`dig +short cocodrilo.enhydra.fr | tail -1`
+i1=`dig +short montpellier.cubedesigners.com | tail -1`
+i2=`dig +short tortuga.enhydra.fr | tail -1`
+i3=`dig +short cocodrilo.enhydra.fr | tail -1`
-local=($l0 $l1 $l2 $l3 $i0 $i1 $i2 $i3 $i4)
+local=($l0 $l1 $l2 $l3 $i0 $i1 $i2 $i3)
b0=24.104.34.225
b1=62.99.220.220
s2_6=`dig +short mail.cubedesigners.com | tail -1`
s2_7=`dig +short mattermost.cubedesigners.com | tail -1`
s3=`dig +short dobermann.cubedesigners.com | tail -1`
-s4=`dig +short kingkong.cubedesigners.com | tail -1`
-s5=`dig +short elephantman.cubedesigners.com | tail -1`
-s6=`dig +short fastandfurious.cubedesigners.com | tail -1`
+s4=`dig +short elephantman.cubedesigners.com | tail -1`
+s5=`dig +short fastandfurious.cubedesigners.com | tail -1`
+s6=`dig +short gremlins.cubedesigners.com | tail -1`
+s7=`dig +short kingkong.cubedesigners.com | tail -1`
-auth=($s1 $s1_0 $s2 $s2_0 $s2_1 $s2_2 $s2_3 $s2_4 $s2_5 $s2_6 $s2_7 $s3 $s4 $s5 $s6)
+auth=($s1 $s1_0 $s2 $s2_0 $s2_1 $s2_2 $s2_3 $s2_4 $s2_5 $s2_6 $s2_7 $s3 $s4 $s5 $s6 $s7)
-docker_allowed=($i0 $i1 $i2 $i3 $i4 $s1 $s1_0 $s2 $s2_0 $s2_1 $s2_2 $s2_3 $s2_4 $s2_5 $s2_6 $s2_7 $s3 $s4 $s5 $s6)
+docker_allowed=($i0 $i1 $i2 $i3 $s1 $s1_0 $s2 $s2_0 $s2_1 $s2_2 $s2_3 $s2_4 $s2_5 $s2_6 $s2_7 $s3 $s4 $s5 $s6 $s7)
for ip in "${blacklist[@]}"
l2=172.16.0.0/12
l3=192.168.0.0/16
i0=`dig +short paris.cubedesigners.com | tail -1`
-i1=`dig +short old.paris.cubedesigners.com | tail -1`
-i2=`dig +short montpellier.cubedesigners.com | tail -1`
-i3=`dig +short tortuga.enhydra.fr | tail -1`
-i4=`dig +short cocodrilo.enhydra.fr | tail -1`
+i1=`dig +short montpellier.cubedesigners.com | tail -1`
+i2=`dig +short tortuga.enhydra.fr | tail -1`
+i3=`dig +short cocodrilo.enhydra.fr | tail -1`
-local=($l0 $l1 $l2 $l3 $i0 $i1 $i2 $i3 $i4)
+local=($l0 $l1 $l2 $l3 $i0 $i1 $i2 $i3)
b0=24.104.34.225
b1=62.99.220.220
s2_6=`dig +short mail.cubedesigners.com | tail -1`
s2_7=`dig +short mattermost.cubedesigners.com | tail -1`
s3=`dig +short dobermann.cubedesigners.com | tail -1`
-s4=`dig +short kingkong.cubedesigners.com | tail -1`
-s5=`dig +short elephantman.cubedesigners.com | tail -1`
-s6=`dig +short fastandfurious.cubedesigners.com | tail -1`
+s4=`dig +short elephantman.cubedesigners.com | tail -1`
+s5=`dig +short fastandfurious.cubedesigners.com | tail -1`
+s6=`dig +short gremlins.cubedesigners.com | tail -1`
+s7=`dig +short kingkong.cubedesigners.com | tail -1`
-auth=($s0 $s0_0 $s2 $s2_0 $s2_1 $s2_2 $s2_3 $s2_4 $s2_5 $s2_6 $s2_7 $s3 $s4 $s5 $s6)
+auth=($s0 $s0_0 $s2 $s2_0 $s2_1 $s2_2 $s2_3 $s2_4 $s2_5 $s2_6 $s2_7 $s3 $s4 $s5 $s6 $s7)
-docker_allowed=($i0 $i1 $i2 $i3 $i4 $s0 $s0_0 $s2 $s2_0 $s2_1 $s2_2 $s2_3 $s2_4 $s2_5 $s2_6 $s2_7 $s3 $s4 $s5 $s6)
+docker_allowed=($i0 $i1 $i2 $i3 $s0 $s0_0 $s2 $s2_0 $s2_1 $s2_2 $s2_3 $s2_4 $s2_5 $s2_6 $s2_7 $s3 $s4 $s5 $s6 $s7)
for ip in "${blacklist[@]}"
l2=172.16.0.0/12
l3=192.168.0.0/16
i0=`dig +short paris.cubedesigners.com | tail -1`
-i1=`dig +short old.paris.cubedesigners.com | tail -1`
-i2=`dig +short montpellier.cubedesigners.com | tail -1`
-i3=`dig +short tortuga.enhydra.fr | tail -1`
-i4=`dig +short cocodrilo.enhydra.fr | tail -1`
+i1=`dig +short montpellier.cubedesigners.com | tail -1`
+i2=`dig +short tortuga.enhydra.fr | tail -1`
+i3=`dig +short cocodrilo.enhydra.fr | tail -1`
-local=($l0 $l1 $l2 $l3 $i0 $i1 $i2 $i3 $i4)
+local=($l0 $l1 $l2 $l3 $i0 $i1 $i2 $i3)
b0=24.104.34.225
b1=62.99.220.220
s1=`dig +short benhur.cubedesigners.com | tail -1`
s1_0=`dig +short postal.cubedesigners.com | tail -1`
s3=`dig +short dobermann.cubedesigners.com | tail -1`
-s4=`dig +short kingkong.cubedesigners.com | tail -1`
-s5=`dig +short elephantman.cubedesigners.com | tail -1`
-s6=`dig +short fastandfurious.cubedesigners.com | tail -1`
+s4=`dig +short elephantman.cubedesigners.com | tail -1`
+s5=`dig +short fastandfurious.cubedesigners.com | tail -1`
+s6=`dig +short gremlins.cubedesigners.com | tail -1`
+s7=`dig +short kingkong.cubedesigners.com | tail -1`
-auth=($s0 $s0_0 $s1 $s1_0 $s3 $s4 $s5 $s6)
+auth=($s0 $s0_0 $s1 $s1_0 $s3 $s4 $s5 $s6 $s7)
-docker_allowed=($i0 $i1 $i2 $i3 $i4 $s0 $s0_0 $s1 $s1_0 $s3 $s4 $s5 $s6)
+docker_allowed=($i0 $i1 $i2 $i3 $s0 $s0_0 $s1 $s1_0 $s3 $s4 $s5 $s6 $s7)
for ip in "${blacklist[@]}"
l2=172.16.0.0/12
l3=192.168.0.0/16
i0=`dig +short paris.cubedesigners.com | tail -1`
-i1=`dig +short old.paris.cubedesigners.com | tail -1`
-i2=`dig +short montpellier.cubedesigners.com | tail -1`
-i3=`dig +short tortuga.enhydra.fr | tail -1`
-i4=`dig +short cocodrilo.enhydra.fr | tail -1`
+i1=`dig +short montpellier.cubedesigners.com | tail -1`
+i2=`dig +short tortuga.enhydra.fr | tail -1`
+i3=`dig +short cocodrilo.enhydra.fr | tail -1`
-local=($l0 $l1 $l2 $l3 $i0 $i1 $i2 $i3 $i4)
+local=($l0 $l1 $l2 $l3 $i0 $i1 $i2 $i3)
b0=24.104.34.225
b1=62.99.220.220
s2_5=`dig +short git.cubedesigners.com | tail -1`
s2_6=`dig +short mail.cubedesigners.com | tail -1`
s2_7=`dig +short mattermost.cubedesigners.com | tail -1`
-s4=`dig +short kingkong.cubedesigners.com | tail -1`
-s5=`dig +short elephantman.cubedesigners.com | tail -1`
-s6=`dig +short fastandfurious.cubedesigners.com | tail -1`
+s4=`dig +short elephantman.cubedesigners.com | tail -1`
+s5=`dig +short fastandfurious.cubedesigners.com | tail -1`
+s6=`dig +short gremlins.cubedesigners.com | tail -1`
+s7=`dig +short kingkong.cubedesigners.com | tail -1`
-auth=($s0 $s0_0 $s1 $s1_0 $s2 $s2_0 $s2_1 $s2_2 $s2_3 $s2_4 $s2_5 $s2_6 $s2_7 $s4 $s5 $s6)
+auth=($s0 $s0_0 $s1 $s1_0 $s2 $s2_0 $s2_1 $s2_2 $s2_3 $s2_4 $s2_5 $s2_6 $s2_7 $s4 $s5 $s6 $s7)
-docker_allowed=($i0 $i1 $i2 $i3 $i4 $s0 $s0_0 $s1 $s1_0 $s2 $s2_0 $s2_1 $s2_2 $s2_3 $s2_4 $s2_5 $s2_6 $s2_7 $s4 $s5 $s6)
+docker_allowed=($i0 $i1 $i2 $i3 $s0 $s0_0 $s1 $s1_0 $s2 $s2_0 $s2_1 $s2_2 $s2_3 $s2_4 $s2_5 $s2_6 $s2_7 $s4 $s5 $s6 $s7)
c0=`dig +short www.fondation-sycomore.com | tail -1`
backup=($c0)
l2=172.16.0.0/12
l3=192.168.0.0/16
i0=`dig +short paris.cubedesigners.com | tail -1`
-i1=`dig +short old.paris.cubedesigners.com | tail -1`
-i2=`dig +short montpellier.cubedesigners.com | tail -1`
-i3=`dig +short tortuga.enhydra.fr | tail -1`
-i4=`dig +short cocodrilo.enhydra.fr | tail -1`
+i1=`dig +short montpellier.cubedesigners.com | tail -1`
+i2=`dig +short tortuga.enhydra.fr | tail -1`
+i3=`dig +short cocodrilo.enhydra.fr | tail -1`
-local=($l0 $l1 $l2 $l3 $i0 $i1 $i2 $i3 $i4)
+local=($l0 $l1 $l2 $l3 $i0 $i1 $i2 $i3)
b0=24.104.34.225
b1=62.99.220.220
s2_6=`dig +short mail.cubedesigners.com | tail -1`
s2_7=`dig +short mattermost.cubedesigners.com | tail -1`
s3=`dig +short dobermann.cubedesigners.com | tail -1`
-s4=`dig +short kingkong.cubedesigners.com | tail -1`
-s6=`dig +short fastandfurious.cubedesigners.com | tail -1`
+s5=`dig +short fastandfurious.cubedesigners.com | tail -1`
+s6=`dig +short gremlins.cubedesigners.com | tail -1`
+s7=`dig +short kingkong.cubedesigners.com | tail -1`
-auth=($s0 $s0_0 $s1 $s1_0 $s2 $s2_0 $s2_1 $s2_2 $s2_3 $s2_4 $s2_5 $s2_6 $s2_7 $s3 $s4 $s6)
+auth=($s0 $s0_0 $s1 $s1_0 $s2 $s2_0 $s2_1 $s2_2 $s2_3 $s2_4 $s2_5 $s2_6 $s2_7 $s3 $s5 $s6 $s7)
-docker_allowed=($i0 $i1 $i2 $i3 $i4 $s0 $s0_0 $s1 $s1_0 $s2 $s2_0 $s2_1 $s2_2 $s2_3 $s2_4 $s2_5 $s2_6 $s2_7 $s3 $s4 $s6)
+docker_allowed=($i0 $i1 $i2 $i3 $s0 $s0_0 $s1 $s1_0 $s2 $s2_0 $s2_1 $s2_2 $s2_3 $s2_4 $s2_5 $s2_6 $s2_7 $s3 $s5 $s6 $s7)
for ip in "${blacklist[@]}"
l2=172.16.0.0/12
l3=192.168.0.0/16
i0=`dig +short paris.cubedesigners.com | tail -1`
-i1=`dig +short old.paris.cubedesigners.com | tail -1`
-i2=`dig +short montpellier.cubedesigners.com | tail -1`
-i3=`dig +short tortuga.enhydra.fr | tail -1`
-i4=`dig +short cocodrilo.enhydra.fr | tail -1`
+i1=`dig +short montpellier.cubedesigners.com | tail -1`
+i2=`dig +short tortuga.enhydra.fr | tail -1`
+i3=`dig +short cocodrilo.enhydra.fr | tail -1`
-local=($l0 $l1 $l2 $l3 $i0 $i1 $i2 $i3 $i4)
+local=($l0 $l1 $l2 $l3 $i0 $i1 $i2 $i3)
b0=24.104.34.225
b1=62.99.220.220
s2_6=`dig +short mail.cubedesigners.com | tail -1`
s2_7=`dig +short mattermost.cubedesigners.com | tail -1`
s3=`dig +short dobermann.cubedesigners.com | tail -1`
-s4=`dig +short kingkong.cubedesigners.com | tail -1`
-s5=`dig +short elephantman.cubedesigners.com | tail -1`
+s4=`dig +short elephantman.cubedesigners.com | tail -1`
+s6=`dig +short gremlins.cubedesigners.com | tail -1`
+s7=`dig +short kingkong.cubedesigners.com | tail -1`
-auth=($s0 $s0_0 $s1 $s1_0 $s2 $s2_0 $s2_1 $s2_2 $s2_3 $s2_4 $s2_5 $s2_6 $s2_7 $s3 $s4 $s5)
+auth=($s0 $s0_0 $s1 $s1_0 $s2 $s2_0 $s2_1 $s2_2 $s2_3 $s2_4 $s2_5 $s2_6 $s2_7 $s3 $s4 $s6 $s7)
-docker_allowed=($i0 $i1 $i2 $i3 $i4 $s0 $s0_0 $s1 $s1_0 $s2 $s2_0 $s2_1 $s2_2 $s2_3 $s2_4 $s2_5 $s2_6 $s2_7 $s3 $s4 $s5)
+docker_allowed=($i0 $i1 $i2 $i3 $s0 $s0_0 $s1 $s1_0 $s2 $s2_0 $s2_1 $s2_2 $s2_3 $s2_4 $s2_5 $s2_6 $s2_7 $s3 $s4 $s6 $s7)
ufw allow 51820
--- /dev/null
+#!/bin/bash
+
+export DEBIAN_FRONTEND=noninteractive
+apt install --no-install-recommends -y dnsutils ufw
+# Reset all rules
+ufw --force reset
+# Disable firewall
+ufw disable
+
+ufw default allow outgoing
+
+l0=127.0.0.0/8
+l1=10.0.0.0/8
+l2=172.16.0.0/12
+l3=192.168.0.0/16
+i0=`dig +short paris.cubedesigners.com | tail -1`
+i1=`dig +short montpellier.cubedesigners.com | tail -1`
+i2=`dig +short tortuga.enhydra.fr | tail -1`
+i3=`dig +short cocodrilo.enhydra.fr | tail -1`
+
+local=($l0 $l1 $l2 $l3 $i0 $i1 $i2 $i3)
+
+b0=24.104.34.225
+b1=62.99.220.220
+b2=50.62.177.177
+b3=195.70.4.231
+blacklist=($b0 $b1 $b2 $b3)
+
+s0=`dig +short amadeus.cubedesigners.com | tail -1`
+s0_0=`dig +short toolbox.fluidbook.com | tail -1`
+s1=`dig +short benhur.cubedesigners.com | tail -1`
+s1_0=`dig +short postal.cubedesigners.com | tail -1`
+s2=`dig +short cloudatlas.cubedesigners.com | tail -1`
+s2_0=`dig +short hostingdev.cubedesigners.com | tail -1`
+s2_1=`dig +short hosting.fluidbook.com | tail -1`
+s2_2=`dig +short hosting.cubedesigners.com | tail -1`
+s2_3=`dig +short hosting2.fluidbook.com | tail -1`
+s2_4=`dig +short hosting2.cubedesigners.com | tail -1`
+s2_5=`dig +short git.cubedesigners.com | tail -1`
+s2_6=`dig +short mail.cubedesigners.com | tail -1`
+s2_7=`dig +short mattermost.cubedesigners.com | tail -1`
+s3=`dig +short dobermann.cubedesigners.com | tail -1`
+s4=`dig +short elephantman.cubedesigners.com | tail -1`
+s5=`dig +short fastandfurious.cubedesigners.com | tail -1`
+s7=`dig +short kingkong.cubedesigners.com | tail -1`
+
+auth=($s0 $s0_0 $s1 $s1_0 $s2 $s2_0 $s2_1 $s2_2 $s2_3 $s2_4 $s2_5 $s2_6 $s2_7 $s3 $s4 $s5 $s7)
+
+docker_allowed=($i0 $i1 $i2 $i3 $s0 $s0_0 $s1 $s1_0 $s2 $s2_0 $s2_1 $s2_2 $s2_3 $s2_4 $s2_5 $s2_6 $s2_7 $s3 $s4 $s5 $s7)
+
+ufw allow 80
+ufw allow 443
+
+for ip in "${blacklist[@]}"
+do
+ ufw deny from $ip
+ ufw deny to $ip
+done
+
+for ip in "${local[@]}"
+do
+ ufw allow from $ip
+done
+
+for ip in "${auth[@]}"
+do
+ ufw allow from $ip
+ ufw allow to $ip
+ ufw allow out to $ip port 22
+ ufw allow out to $ip port 22022
+ ufw allow out to $ip port 22822
+ ufw allow out to $ip port 22222
+done
+
+for ip in "${backup[@]}"
+do
+ ufw allow in from $ip port 22
+done
+
+#SSH
+ufw deny out 22
+ufw deny out 22022
+ufw deny out 22822
+ufw deny out 22222
+
+
+restricted_containers=("portainer" "monit" )
+
+sudo wget -O /usr/local/bin/ufw-docker https://raw.githubusercontent.com/EnhydraV/ufw-docker/refs/heads/master/ufw-docker
+sudo chmod +x /usr/local/bin/ufw-docker
+# Finally enable firewall
+ufw --force enable
+
+# Enable
+ufw-docker install
+docker ps --filter publish=1-65535 --filter status=running --format "table {{.Names}}" | tail -n +2 | while read container; do
+ # Check if the current line is in the skip_lines array
+ skip=false
+ for restricted_container in "${restricted_containers[@]}"; do
+ if [[ "$container" == "$restricted_container" ]]; then
+ skip=true
+ break
+ fi
+ done
+
+ if ! $skip; then
+ ufw-docker allow "$container"
+ else
+ for ip in "${docker_allowed[@]}"
+ do
+ ufw-docker allow-from "$container" $ip
+ done
+ fi
+done
+
+# Enable loging
+ufw logging on
+
+# Display status
+ufw status verbose
+
+rm -f /etc/ufw/after.rules.*
+rm -f /etc/ufw/after6.rules.*
+rm -f /etc/ufw/before.rules.*
+rm -f /etc/ufw/before6.rules.*
+rm -f /lib/ufw/user6.rules.*
+rm -f /lib/ufw/user.rules.*
l2=172.16.0.0/12
l3=192.168.0.0/16
i0=`dig +short paris.cubedesigners.com | tail -1`
-i1=`dig +short old.paris.cubedesigners.com | tail -1`
-i2=`dig +short montpellier.cubedesigners.com | tail -1`
-i3=`dig +short tortuga.enhydra.fr | tail -1`
-i4=`dig +short cocodrilo.enhydra.fr | tail -1`
+i1=`dig +short montpellier.cubedesigners.com | tail -1`
+i2=`dig +short tortuga.enhydra.fr | tail -1`
+i3=`dig +short cocodrilo.enhydra.fr | tail -1`
-local=($l0 $l1 $l2 $l3 $i0 $i1 $i2 $i3 $i4)
+local=($l0 $l1 $l2 $l3 $i0 $i1 $i2 $i3)
b0=24.104.34.225
b1=62.99.220.220
s2_6=`dig +short mail.cubedesigners.com | tail -1`
s2_7=`dig +short mattermost.cubedesigners.com | tail -1`
s3=`dig +short dobermann.cubedesigners.com | tail -1`
-s5=`dig +short elephantman.cubedesigners.com | tail -1`
-s6=`dig +short fastandfurious.cubedesigners.com | tail -1`
+s4=`dig +short elephantman.cubedesigners.com | tail -1`
+s5=`dig +short fastandfurious.cubedesigners.com | tail -1`
+s6=`dig +short gremlins.cubedesigners.com | tail -1`
-auth=($s0 $s0_0 $s1 $s1_0 $s2 $s2_0 $s2_1 $s2_2 $s2_3 $s2_4 $s2_5 $s2_6 $s2_7 $s3 $s5 $s6)
+auth=($s0 $s0_0 $s1 $s1_0 $s2 $s2_0 $s2_1 $s2_2 $s2_3 $s2_4 $s2_5 $s2_6 $s2_7 $s3 $s4 $s5 $s6)
-docker_allowed=($i0 $i1 $i2 $i3 $i4 $s0 $s0_0 $s1 $s1_0 $s2 $s2_0 $s2_1 $s2_2 $s2_3 $s2_4 $s2_5 $s2_6 $s2_7 $s3 $s5 $s6)
+docker_allowed=($i0 $i1 $i2 $i3 $s0 $s0_0 $s1 $s1_0 $s2 $s2_0 $s2_1 $s2_2 $s2_3 $s2_4 $s2_5 $s2_6 $s2_7 $s3 $s4 $s5 $s6)
for ip in "${blacklist[@]}"
scp -P 22 ./dobermann/firewall root@dobermann.cubedesigners.com:/usr/local/bin/fw
ssh -p 22 root@dobermann.cubedesigners.com 'chmod 755 /usr/local/bin/fw;rm -f /usr/local/bin/firewall;/usr/local/bin/fw'
-scp -P 22 ./kingkong/firewall root@kingkong.cubedesigners.com:/usr/local/bin/fw
-ssh -p 22 root@kingkong.cubedesigners.com 'chmod 755 /usr/local/bin/fw;rm -f /usr/local/bin/firewall;/usr/local/bin/fw'
-
scp -P 22822 ./elephantman/firewall root@elephantman.cubedesigners.com:/usr/local/bin/fw
ssh -p 22822 root@elephantman.cubedesigners.com 'chmod 755 /usr/local/bin/fw;rm -f /usr/local/bin/firewall;/usr/local/bin/fw'
scp -P 22822 ./fastandfurious/firewall root@fastandfurious.cubedesigners.com:/usr/local/bin/fw
ssh -p 22822 root@fastandfurious.cubedesigners.com 'chmod 755 /usr/local/bin/fw;rm -f /usr/local/bin/firewall;/usr/local/bin/fw'
+scp -P 22 ./gremlins/firewall root@gremlins.cubedesigners.com:/usr/local/bin/fw
+ssh -p 22 root@gremlins.cubedesigners.com 'chmod 755 /usr/local/bin/fw;rm -f /usr/local/bin/firewall;/usr/local/bin/fw'
+
+scp -P 22 ./kingkong/firewall root@kingkong.cubedesigners.com:/usr/local/bin/fw
+ssh -p 22 root@kingkong.cubedesigners.com 'chmod 755 /usr/local/bin/fw;rm -f /usr/local/bin/firewall;/usr/local/bin/fw'
+