Compare commits
9 Commits
Author | SHA1 | Date | |
---|---|---|---|
829d01bf06 | |||
e1de2cbf77 | |||
5891da6fa5 | |||
83f97a8d65 | |||
33eba8fcfb | |||
|
2f0d08cf0a | ||
|
cbc84b434b | ||
|
5b5c0ca098 | ||
|
b6b70dde04 |
4
.gitignore
vendored
@ -1 +1,3 @@
|
|||||||
*.pgm
|
*.pgm
|
||||||
|
maps/
|
||||||
|
__pycache__/
|
BIN
__pycache__/webcam.launch.cpython-310.pyc
Normal file
29
cert.pem
@ -1,29 +0,0 @@
|
|||||||
-----BEGIN CERTIFICATE-----
|
|
||||||
MIIFCTCCAvGgAwIBAgIUSToN1sKvyyEHUX43N0x2pJ2tozYwDQYJKoZIhvcNAQEL
|
|
||||||
BQAwFDESMBAGA1UEAwwJbG9jYWxob3N0MB4XDTIzMDgyMzE0NDgwMFoXDTI0MDgy
|
|
||||||
MjE0NDgwMFowFDESMBAGA1UEAwwJbG9jYWxob3N0MIICIjANBgkqhkiG9w0BAQEF
|
|
||||||
AAOCAg8AMIICCgKCAgEAuz16ToP/oe0GlHELnOxXVMbQ4ygDhAoJRDW+h3AN01QP
|
|
||||||
GD8hKByM5QKUd1bnUa40jKeENerJLVpwvYW+wksIw8OEoU+XKLQav59LkumMx94Y
|
|
||||||
92vhfYPEdjJGfBSemf4GALw0GmeizeglGKQAomBN2fV0Wege77T6aE3GSafzmgWk
|
|
||||||
WKIXLzYd0C+fzMUnf7TtbpacG71D1VAryedq2/srR6ZnrP92SyWB6vJt9kdFxhie
|
|
||||||
V0zdrmiLhKbj4QBHn2ZfBzBe33eLHEJc7DlQ7fkQr58PVnF35h0lIYC2YdZjGSIe
|
|
||||||
1r12HGCvjDlDX3ygznsnMIIOGPd78vzpiVUlIk1MLqS4FeAMqyTFuljZ7UjG2+Yf
|
|
||||||
p+9gJ/3vfbCiWmtwJOuZvCeXvCwUGlvJH7aFan9UKG0OCuIOBY+8ZqkbgKQ8lCNv
|
|
||||||
hk5HD8z49pa2u9Tzau68KMLOIhJ000sPW17RrWTrQK0izLeNmxlUvNFtg65pCpE7
|
|
||||||
yUinlKVfBjPraK1htuZL/E0MZ1sq9YV/VbjFQnrhad1bZ+DvLRuX2Ehd8gsUt6UL
|
|
||||||
hQW3vq7GmXo0u+xT1XIkCEYdNUGo4xXKr925MmcRVa6gR5dsAuAoQ5cN/5z4wnJt
|
|
||||||
eNonakERtPomAC/ACTsbr3RjpG6h0jPHXta5XC+PKydV9riuk/LAIRIF0dKGfHUC
|
|
||||||
AwEAAaNTMFEwHQYDVR0OBBYEFKL/qoyl0fc1f6VBhW5GJDpae5a7MB8GA1UdIwQY
|
|
||||||
MBaAFKL/qoyl0fc1f6VBhW5GJDpae5a7MA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZI
|
|
||||||
hvcNAQELBQADggIBADoEzbUqOiTbTOppCRP3q+l8Z3mlymtZgz/BcyGms+8B2LMC
|
|
||||||
xSJ88+lkg23XG8KQ+oIOHDaLBsVUePeSLLt3MAtDMbBEDUsUf2nWK+l3IbNlMxTn
|
|
||||||
1beb/FM1QRwLfbqGvVi7afpZvLH7wJc2SCv+996eW/Hau5yDxntqupjAd1G7pDrJ
|
|
||||||
PQMJhmWg1VQHxBC1MyMVdz8r4nqBSIKN5XMxdrZitXOa6c2b2/SvolGN6UEUD1at
|
|
||||||
LAbS1nXloBNVuOrmTCxRxCKxec8+2qs4QOc/Ux7jF9Q65TkW1IkucnDaOluDcufY
|
|
||||||
n4GQXaRFyQJInoGpWlOM3hJ2ZlhlQj+tjuvTyu7uWCINC4r0bYqpIpY4mWzXKRFT
|
|
||||||
e5M4nVy8YukjsM82zZRvXdD8Mlfuxb8xkpQBdqVClO24TSjZOCAw4qsizpV/N7S9
|
|
||||||
NmQ5+2CI4l3KvhH1gAjtXvNOOicn7laXDtz5wc1fZxmUptQQp5JXFtSguLpJpGli
|
|
||||||
r7s8wRPnVJW3HhjNIzYIzOm3J4dtl1+ZqHGfeFes+8ty2HAJK1AmnRvt8UQK3VjR
|
|
||||||
YrlzbM6+cjzmJQ3S3LTXOi0Zssf6SQspCaAMP8hUXhZyi8y7PMNHpp/LuUEFox03
|
|
||||||
/L8X5DB9SXofdFp+1jVh6WZCV8wt39Fxo+l+5afpeIc138XOkgvsrBFNzTi9
|
|
||||||
-----END CERTIFICATE-----
|
|
27
config/box_filter.yaml
Normal file
@ -0,0 +1,27 @@
|
|||||||
|
scan_to_scan_filter_chain:
|
||||||
|
ros__parameters:
|
||||||
|
filter1:
|
||||||
|
name: box_filter
|
||||||
|
type: laser_filters/LaserScanBoxFilter
|
||||||
|
params:
|
||||||
|
box_frame: laser_frame
|
||||||
|
max_x: 0.80 #was 0.16
|
||||||
|
max_y: 0.18 #was 0.17
|
||||||
|
max_z: 0.1
|
||||||
|
min_x: -0.41 #was -0.41
|
||||||
|
min_y: -0.18 # was -0.17
|
||||||
|
min_z: -0.2
|
||||||
|
invert: false # activate to remove all points outside of the box
|
||||||
|
name: shadows
|
||||||
|
type: laser_filters/ScanShadowsFilter
|
||||||
|
params:
|
||||||
|
min_angle: 10
|
||||||
|
max_angle: 170
|
||||||
|
neighbors: 20
|
||||||
|
window: 1
|
||||||
|
name: dark_shadows
|
||||||
|
type: laser_filters/LaserScanIntensityFilter
|
||||||
|
params:
|
||||||
|
lower_threshold: 100
|
||||||
|
upper_threshold: 10000
|
||||||
|
disp_histogram: 0
|
34
config/caddy/Caddyfile
Normal file
@ -0,0 +1,34 @@
|
|||||||
|
# {
|
||||||
|
# debug
|
||||||
|
# }
|
||||||
|
|
||||||
|
http://cps-seggy {
|
||||||
|
root * /usr/share/caddy
|
||||||
|
file_server browse
|
||||||
|
|
||||||
|
handle_path /config* {
|
||||||
|
reverse_proxy http://olivetin:1337
|
||||||
|
}
|
||||||
|
|
||||||
|
handle_path /viz* {
|
||||||
|
reverse_proxy http://foxglove:8080
|
||||||
|
}
|
||||||
|
|
||||||
|
# this is not working right now
|
||||||
|
handle_path /joy* {
|
||||||
|
reverse_proxy http://host.docker.internal:8000
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
http://cps-seggy.local {
|
||||||
|
root * /usr/share/caddy
|
||||||
|
file_server browse
|
||||||
|
|
||||||
|
handle_path /config {
|
||||||
|
reverse_proxy http://olivetin:1337
|
||||||
|
}
|
||||||
|
|
||||||
|
handle_path /viz* {
|
||||||
|
reverse_proxy http://foxglove:8080
|
||||||
|
}
|
||||||
|
}
|
69
config/caddy/content/bootstrap/index.html
Normal file
@ -0,0 +1,69 @@
|
|||||||
|
<!doctype html>
|
||||||
|
<html lang="en">
|
||||||
|
<head>
|
||||||
|
<title>ROS + Bootstrap 4 demo</title>
|
||||||
|
<!-- Required meta tags -->
|
||||||
|
<meta charset="utf-8">
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
|
||||||
|
|
||||||
|
<!-- Bootstrap CSS -->
|
||||||
|
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css" integrity="sha384-ggOyR0iXCbMQv3Xipma34MD+dH/1fQ784/j6cY/iJTQUOhcWr7x9JvoRxT2MZw1T" crossorigin="anonymous">
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<body class="bg-light">
|
||||||
|
|
||||||
|
<!-- SPEED -->
|
||||||
|
<div class="row">
|
||||||
|
<div class="col-md-4"></div>
|
||||||
|
<div class=" col-md-4">
|
||||||
|
<label for="robot-speed">
|
||||||
|
<strong>Robot speed</strong>
|
||||||
|
</label>
|
||||||
|
<input type="range" min="15" max="80" class="custom-range" id="robot-speed">
|
||||||
|
</div>
|
||||||
|
<div class="col-md-4"></div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- VIDEO -->
|
||||||
|
<div class="row my-4">
|
||||||
|
<div class="col d-flex justify-content-center">
|
||||||
|
<img src="" class="p-1 bg-dark" alt="" id="video" />
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- JOYSTICK -->
|
||||||
|
<div class="row my-4">
|
||||||
|
<div class="col">
|
||||||
|
<div class="d-flex justify-content-center" style="width: 210px; height: 210px;">
|
||||||
|
<div id="joystick"></div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- INFO -->
|
||||||
|
<div class="row my-4">
|
||||||
|
<div class="col-md-2"></div>
|
||||||
|
<div class="col-md-8">
|
||||||
|
<div class="alert alert-success">
|
||||||
|
<h4 class="alert-heading">ROS + Bootstrap interface demo</h4>
|
||||||
|
<ul>
|
||||||
|
<li>set speed using a slider</li>
|
||||||
|
<li>use joystick or WASD keys on keyboard to move </li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="col-md-2"></div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- Optional JavaScript -->
|
||||||
|
<script src="https://cdnjs.cloudflare.com/ajax/libs/roslibjs/1.1.0/roslib.min.js"></script>
|
||||||
|
<script src="https://cdnjs.cloudflare.com/ajax/libs/eventemitter3/5.0.1/index.min.js"></script>
|
||||||
|
<script src="https://github.com/GT-RAIL/keyboardteleopjs/raw/develop/build/keyboardteleop.min.js"></script>
|
||||||
|
<script src="//yoannmoinet.github.io/nipplejs/javascripts/nipplejs.js"></script>
|
||||||
|
<script src="webui.js"></script>
|
||||||
|
<!-- jQuery first, then Popper.js, then Bootstrap JS -->
|
||||||
|
<script src="https://code.jquery.com/jquery-3.3.1.slim.min.js" integrity="sha384-q8i/X+965DzO0rT7abK41JStQIAqVgRVzpbzo5smXKp4YfRvH+8abtTE1Pi6jizo" crossorigin="anonymous"></script>
|
||||||
|
<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.7/umd/popper.min.js" integrity="sha384-UO2eT0CpHqdSJQ6hJty5KVphtPhzWj9WO1clHTMGa3JDZwrnQq4sF86dIHNDz0W1" crossorigin="anonymous"></script>
|
||||||
|
<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/js/bootstrap.min.js" integrity="sha384-JjSmVgyd0p3pXB1rRibZUAYoIIy6OrQ6VrjIEaFf/nJGzIxFDsf4x0xIM+B07jRM" crossorigin="anonymous"></script>
|
||||||
|
</body>
|
||||||
|
</html>
|
103
config/caddy/content/bootstrap/index_new.html
Normal file
@ -0,0 +1,103 @@
|
|||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="en">
|
||||||
|
<head>
|
||||||
|
<title>ROS + Bootstrap 5 demo</title>
|
||||||
|
<!-- Required meta tags -->
|
||||||
|
<meta charset="utf-8" />
|
||||||
|
<meta
|
||||||
|
name="viewport"
|
||||||
|
content="width=device-width, initial-scale=1, shrink-to-fit=no"
|
||||||
|
/>
|
||||||
|
|
||||||
|
<!-- Bootstrap CSS v5.2.1 -->
|
||||||
|
<link
|
||||||
|
href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.2/dist/css/bootstrap.min.css"
|
||||||
|
rel="stylesheet"
|
||||||
|
integrity="sha384-T3c6CoIi6uLrA9TneNEoa7RxnatzjcDSCmG1MXxSR1GAsXEV/Dwwykc2MPK8M2HN"
|
||||||
|
crossorigin="anonymous"
|
||||||
|
/>
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body>
|
||||||
|
<body class="bg-light"></body>
|
||||||
|
|
||||||
|
<header>
|
||||||
|
<!-- place navbar here -->
|
||||||
|
</header>
|
||||||
|
<main>
|
||||||
|
<!-- SPEED -->
|
||||||
|
<div class="row">
|
||||||
|
<div class="col-md-4"></div>
|
||||||
|
<div class="col-md-4">
|
||||||
|
<label for="robot-speed">
|
||||||
|
<strong>Robot speed</strong>
|
||||||
|
</label>
|
||||||
|
<input
|
||||||
|
type="range"
|
||||||
|
min="15"
|
||||||
|
max="80"
|
||||||
|
class="custom-range"
|
||||||
|
id="robot-speed"
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
<div class="col-md-4"></div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- VIDEO -->
|
||||||
|
<div class="row my-4">
|
||||||
|
<div class="col d-flex justify-content-center">
|
||||||
|
<img src="" class="p-1 bg-dark" alt="" id="video" />
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- JOYSTICK -->
|
||||||
|
<div class="row my-4">
|
||||||
|
<div class="col">
|
||||||
|
<div
|
||||||
|
class="d-flex justify-content-center"
|
||||||
|
style="width: 210px; height: 210px"
|
||||||
|
>
|
||||||
|
<div id="joystick"></div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- INFO -->
|
||||||
|
<div class="row my-4">
|
||||||
|
<div class="col-md-2"></div>
|
||||||
|
<div class="col-md-8">
|
||||||
|
<div class="alert alert-success">
|
||||||
|
<h4 class="alert-heading">ROS + Bootstrap interface demo</h4>
|
||||||
|
<ul>
|
||||||
|
<li>set speed using a slider</li>
|
||||||
|
<li>use joystick or WASD keys on keyboard to move</li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="col-md-2"></div>
|
||||||
|
</div>
|
||||||
|
</main>
|
||||||
|
<footer>
|
||||||
|
<!-- place footer here -->
|
||||||
|
</footer>
|
||||||
|
|
||||||
|
<!-- Optional JavaScript -->
|
||||||
|
<script src="https://cdnjs.cloudflare.com/ajax/libs/roslibjs/1.1.0/roslib.min.js"></script>
|
||||||
|
<script src="https://cdnjs.cloudflare.com/ajax/libs/eventemitter3/5.0.1/index.min.js"></script>
|
||||||
|
<script src="https://github.com/GT-RAIL/keyboardteleopjs/raw/develop/build/keyboardteleop.min.js"></script>
|
||||||
|
<script src="//yoannmoinet.github.io/nipplejs/javascripts/nipplejs.js"></script>
|
||||||
|
<script src="webui.js"></script>
|
||||||
|
<!-- Bootstrap JavaScript Libraries -->
|
||||||
|
<script
|
||||||
|
src="https://cdn.jsdelivr.net/npm/@popperjs/core@2.11.8/dist/umd/popper.min.js"
|
||||||
|
integrity="sha384-I7E8VVD/ismYTF4hNIPjVp/Zjvgyol6VFvRkX/vR+Vc4jQkC+hVqc2pM8ODewa9r"
|
||||||
|
crossorigin="anonymous"
|
||||||
|
></script>
|
||||||
|
|
||||||
|
<script
|
||||||
|
src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.2/dist/js/bootstrap.min.js"
|
||||||
|
integrity="sha384-BBtl+eGJRgqQAUMxJ7pMwbEyER4l1g+O15P+16Ep7Q9Q+zqX6gSbd85u4mG4QzX+"
|
||||||
|
crossorigin="anonymous"
|
||||||
|
></script>
|
||||||
|
</body>
|
||||||
|
</html>
|
139
config/caddy/content/bootstrap/webui.js
Normal file
@ -0,0 +1,139 @@
|
|||||||
|
// Begin by creating some global variables:
|
||||||
|
|
||||||
|
var twist;
|
||||||
|
var cmdVel;
|
||||||
|
var publishImmidiately = true;
|
||||||
|
var robot_IP;
|
||||||
|
var manager;
|
||||||
|
var teleop;
|
||||||
|
var ros;
|
||||||
|
|
||||||
|
// Write a function to send ROS messages with velocity for robot:
|
||||||
|
|
||||||
|
function moveAction(linear, angular) {
|
||||||
|
if (linear !== undefined && angular !== undefined) {
|
||||||
|
twist.linear.x = linear;
|
||||||
|
twist.angular.z = angular;
|
||||||
|
} else {
|
||||||
|
twist.linear.x = 0;
|
||||||
|
twist.angular.z = 0;
|
||||||
|
}
|
||||||
|
cmdVel.publish(twist);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Write a function to create velocity message publisher:
|
||||||
|
|
||||||
|
function initVelocityPublisher() {
|
||||||
|
// Init message with zero values.
|
||||||
|
twist = new ROSLIB.Message({
|
||||||
|
linear: {
|
||||||
|
x: 0,
|
||||||
|
y: 0,
|
||||||
|
z: 0
|
||||||
|
},
|
||||||
|
angular: {
|
||||||
|
x: 0,
|
||||||
|
y: 0,
|
||||||
|
z: 0
|
||||||
|
}
|
||||||
|
});
|
||||||
|
// Init topic object
|
||||||
|
cmdVel = new ROSLIB.Topic({
|
||||||
|
ros: ros,
|
||||||
|
name: '/cmd_vel',
|
||||||
|
messageType: 'geometry_msgs/Twist'
|
||||||
|
});
|
||||||
|
// Register publisher within ROS system
|
||||||
|
cmdVel.advertise();
|
||||||
|
}
|
||||||
|
|
||||||
|
// Write a function to create keyboard controller object:
|
||||||
|
function initTeleopKeyboard() {
|
||||||
|
// Use w, s, a, d keys to drive your robot
|
||||||
|
|
||||||
|
// Check if keyboard controller was aready created
|
||||||
|
if (teleop == null) {
|
||||||
|
// Initialize the teleop.
|
||||||
|
teleop = new KEYBOARDTELEOP.Teleop({
|
||||||
|
ros: ros,
|
||||||
|
topic: '/cmd_vel'
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
// Add event listener for slider moves
|
||||||
|
robotSpeedRange = document.getElementById("robot-speed");
|
||||||
|
robotSpeedRange.oninput = function () {
|
||||||
|
teleop.scale = robotSpeedRange.value / 100
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Write a function to create joystick object:
|
||||||
|
function createJoystick() {
|
||||||
|
// Check if joystick was aready created
|
||||||
|
if (manager == null) {
|
||||||
|
joystickContainer = document.getElementById('joystick');
|
||||||
|
// joystck configuration, if you want to adjust joystick, refer to:
|
||||||
|
// https://yoannmoinet.github.io/nipplejs/
|
||||||
|
var options = {
|
||||||
|
zone: joystickContainer,
|
||||||
|
position: { left: 50 + '%', top: 105 + 'px' },
|
||||||
|
mode: 'static',
|
||||||
|
size: 200,
|
||||||
|
color: '#0066ff',
|
||||||
|
restJoystick: true
|
||||||
|
};
|
||||||
|
manager = nipplejs.create(options);
|
||||||
|
// event listener for joystick move
|
||||||
|
manager.on('move', function (evt, nipple) {
|
||||||
|
// nipplejs returns direction is screen coordiantes
|
||||||
|
// we need to rotate it, that dragging towards screen top will move robot forward
|
||||||
|
var direction = nipple.angle.degree - 90;
|
||||||
|
if (direction > 180) {
|
||||||
|
direction = -(450 - nipple.angle.degree);
|
||||||
|
}
|
||||||
|
// convert angles to radians and scale linear and angular speed
|
||||||
|
// adjust if youwant robot to drvie faster or slower
|
||||||
|
var lin = Math.cos(direction / 57.29) * nipple.distance * 0.005;
|
||||||
|
var ang = Math.sin(direction / 57.29) * nipple.distance * 0.05;
|
||||||
|
// nipplejs is triggering events when joystic moves each pixel
|
||||||
|
// we need delay between consecutive messege publications to
|
||||||
|
// prevent system from being flooded by messages
|
||||||
|
// events triggered earlier than 50ms after last publication will be dropped
|
||||||
|
if (publishImmidiately) {
|
||||||
|
publishImmidiately = false;
|
||||||
|
moveAction(lin, ang);
|
||||||
|
setTimeout(function () {
|
||||||
|
publishImmidiately = true;
|
||||||
|
}, 50);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
// event litener for joystick release, always send stop message
|
||||||
|
manager.on('end', function () {
|
||||||
|
moveAction(0, 0);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// …and finally main app initialization:
|
||||||
|
window.onload = function () {
|
||||||
|
// determine robot address automatically
|
||||||
|
// robot_IP = location.hostname;
|
||||||
|
// set robot address statically
|
||||||
|
robot_IP = "100.105.121.16";
|
||||||
|
|
||||||
|
// // Init handle for rosbridge_websocket
|
||||||
|
ros = new ROSLIB.Ros({
|
||||||
|
url: "ws://" + robot_IP + ":9090"
|
||||||
|
});
|
||||||
|
|
||||||
|
initVelocityPublisher();
|
||||||
|
// get handle for video placeholder
|
||||||
|
video = document.getElementById('video');
|
||||||
|
// Populate video source
|
||||||
|
video.src = "http://" + robot_IP + ":8080/stream?topic=/camera/rgb/image_raw&type=mjpeg&quality=80";
|
||||||
|
video.onload = function () {
|
||||||
|
// joystick and keyboard controls will be available only when video is correctly loaded
|
||||||
|
createJoystick();
|
||||||
|
initTeleopKeyboard();
|
||||||
|
};
|
||||||
|
}
|
BIN
config/caddy/content/overview/CPS_Logo_White_square_TRANSP.png
Normal file
After Width: | Height: | Size: 14 KiB |
1
config/caddy/content/overview/blueprint.svg
Normal file
After Width: | Height: | Size: 5.8 KiB |
95
config/caddy/content/overview/index.html
Normal file
@ -0,0 +1,95 @@
|
|||||||
|
<!DOCTYPE html>
|
||||||
|
<html>
|
||||||
|
|
||||||
|
<!-- ersetze die Links + QR Codes unter den Kommentaren -->
|
||||||
|
|
||||||
|
<head>
|
||||||
|
<title>CPS Bot Overview</title>
|
||||||
|
<meta charset="UTF-8">
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||||
|
|
||||||
|
<link rel="stylesheet" href="style.css">
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<header>
|
||||||
|
<h1 id="HEADLINE">CPS Seggy Overview<img src="CPS_Logo_White_square_TRANSP.png" id="LOGO"></h1>
|
||||||
|
</header>
|
||||||
|
|
||||||
|
<body>
|
||||||
|
|
||||||
|
<div class="box" id="RIGHT">
|
||||||
|
<div id="BLOCK_ONE">
|
||||||
|
<p class="mini-heads">Teleop:</p>
|
||||||
|
<!-- again -->
|
||||||
|
<!-- Replace link at href -->
|
||||||
|
<!-- hier Link zu Joystick -->
|
||||||
|
<a href="http://cps-seggy.local:8000/">
|
||||||
|
<img src="joystick.png" class="qr qr_2"></a>
|
||||||
|
<br>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div id="BLOCK_ONE">
|
||||||
|
<p class="mini-heads">Robot Configuration:</p>
|
||||||
|
<!-- again -->
|
||||||
|
<!-- Replace link at href -->
|
||||||
|
<!-- hier Link zu WebGui -->
|
||||||
|
<a href="/config/">
|
||||||
|
<img src="wrench.svg" class="qr qr_2"></a>
|
||||||
|
<br>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<p id="SPACE"> </p>
|
||||||
|
|
||||||
|
<div id="BLOCK_TWO">
|
||||||
|
<p class="mini-heads">Data View:</p>
|
||||||
|
<!-- again -->
|
||||||
|
<!-- hier Link zu Manual -->
|
||||||
|
<a href="/viz/">
|
||||||
|
<img src="safety-glasses.svg" class="qr qr_2">
|
||||||
|
</a>
|
||||||
|
<br>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<p id="SPACE"> </p>
|
||||||
|
|
||||||
|
<div id="BLOCK_THREE">
|
||||||
|
<p class="mini-heads">Manual:</p>
|
||||||
|
<!-- again -->
|
||||||
|
<!-- hier Link zu Manual -->
|
||||||
|
<a href="https://cps.unileoben.ac.at">
|
||||||
|
<img src="blueprint.svg" class="qr qr_2">
|
||||||
|
</a>
|
||||||
|
<br>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="box" id="LEFT">
|
||||||
|
<p class="mini-heads">Connect to Wi-Fi:</p>
|
||||||
|
<!-- replace mit relativen Link!!!, bei mir spinnts und es wird das gebrochene Bild symbol angezeigt. Anders geht
|
||||||
|
es allerdings, falls nicht bei dir sags mir -->
|
||||||
|
<img src="qr-loki.wifi.svg" class="qr">
|
||||||
|
<div id="NORM_SET">
|
||||||
|
<table>
|
||||||
|
<tr>
|
||||||
|
<td>SSID:</td>
|
||||||
|
<td>cps-loki</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>Password: </td>
|
||||||
|
<td>cps-loki</td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="info">
|
||||||
|
<!-- Link zum Lehrstuhl, einfach den ganzen Div Block rausnehmen falls du das nicht willst -->
|
||||||
|
<a href="https://cps.unileoben.ac.at/">Check us out!</a>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</body>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
</html>
|
BIN
config/caddy/content/overview/joystick.png
Normal file
After Width: | Height: | Size: 21 KiB |
508
config/caddy/content/overview/qr-loki-config.svg
Normal file
@ -0,0 +1,508 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||||
|
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||||
|
width="1160px" height="1160px" viewBox="0 0 1160 1160" enable-background="new 0 0 1160 1160" xml:space="preserve">
|
||||||
|
<rect x="0" y="0" width="1160" height="1160" fill="rgb(255,255,255)" /><g transform="translate(80,80)"><g transform="translate(320,0) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(360,0) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(560,0) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(640,0) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(400,40) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(440,40) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(520,40) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(560,40) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(320,80) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(400,80) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(520,80) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(600,80) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(400,120) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(440,120) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(480,120) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(520,120) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(560,120) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(600,120) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(360,160) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(480,160) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(520,160) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(560,160) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(320,200) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(400,200) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(440,200) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(520,200) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(640,200) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(320,240) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(400,240) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(480,240) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(560,240) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(640,240) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(400,280) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(440,280) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(480,280) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(560,280) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(0,320) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(80,320) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(240,320) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(280,320) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(400,320) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(480,320) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(600,320) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(640,320) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(760,320) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(880,320) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(960,320) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(40,360) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(80,360) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(120,360) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(160,360) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(280,360) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(360,360) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(400,360) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(480,360) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(520,360) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(600,360) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(640,360) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(720,360) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(760,360) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(840,360) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(920,360) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(960,360) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(0,400) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(40,400) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(120,400) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(200,400) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(240,400) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(280,400) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(360,400) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(440,400) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(600,400) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(680,400) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(840,400) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(880,400) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(960,400) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(0,440) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(40,440) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(360,440) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(480,440) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(560,440) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(600,440) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(680,440) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(720,440) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(760,440) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(800,440) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(840,440) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(40,480) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(200,480) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(240,480) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(280,480) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(400,480) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(440,480) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(480,480) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(600,480) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(640,480) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(720,480) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(760,480) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(960,480) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(40,520) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(80,520) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(120,520) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(200,520) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(280,520) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(320,520) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(360,520) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(400,520) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(480,520) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(520,520) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(600,520) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(640,520) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(720,520) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(760,520) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(920,520) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(960,520) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(0,560) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(40,560) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(80,560) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(240,560) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(280,560) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(320,560) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(400,560) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(480,560) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(600,560) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(680,560) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(760,560) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(800,560) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(840,560) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(880,560) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(960,560) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(160,600) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(320,600) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(440,600) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(480,600) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(600,600) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(640,600) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(680,600) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(760,600) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(800,600) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(0,640) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(40,640) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(120,640) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(160,640) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(240,640) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(280,640) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(320,640) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(400,640) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(480,640) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(640,640) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(680,640) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(720,640) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(760,640) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(800,640) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(920,640) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(320,680) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(640,680) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(800,680) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(880,680) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(960,680) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(320,720) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(360,720) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(440,720) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(640,720) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(720,720) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(800,720) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(840,720) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(960,720) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(360,760) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(440,760) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(480,760) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(600,760) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(640,760) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(800,760) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(920,760) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(360,800) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(480,800) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(600,800) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(640,800) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(680,800) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(720,800) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(760,800) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(800,800) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(840,800) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(920,800) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(400,840) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(440,840) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(520,840) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(800,840) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(840,840) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(880,840) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(920,840) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(320,880) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(440,880) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(520,880) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(560,880) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(680,880) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(800,880) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(920,880) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(960,880) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(360,920) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(440,920) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(480,920) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(560,920) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(640,920) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(680,920) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(720,920) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(760,920) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(800,920) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(320,960) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(360,960) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(400,960) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(440,960) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(480,960) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(640,960) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(680,960) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(840,960) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(960,960) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(0,0) scale(2.8, 2.8)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<g>
|
||||||
|
<path style="fill:none;" d="M65.859,15.008H34.141c-4.082,0-7.869,1.258-10.979,3.398c-2.419,1.665-4.428,3.864-5.848,6.421
|
||||||
|
C15.838,27.484,15,30.526,15,33.758v32.471c0,10.344,8.586,18.76,19.145,18.76L50,84.992l15.855-0.004
|
||||||
|
C76.414,84.988,85,76.572,85,66.229V33.758C85,23.419,76.414,15.008,65.859,15.008z"/>
|
||||||
|
<path d="M65.859,0.008H34.141h0C18.683,0.008,5.587,10.221,1.4,24.18c-0.433,1.444-0.771,2.928-1.006,4.445
|
||||||
|
C0.135,30.299,0,32.013,0,33.758v32.471c0,18.619,15.32,33.76,34.141,33.76L50,99.992l15.859-0.004
|
||||||
|
c18.82,0,34.141-15.141,34.141-33.76V33.758C100,15.148,84.68,0.008,65.859,0.008z M85,66.229c0,10.344-8.586,18.76-19.145,18.76
|
||||||
|
L50,84.992l-15.855-0.004C23.586,84.988,15,76.572,15,66.229V33.758c0-3.231,0.838-6.273,2.313-8.931
|
||||||
|
c1.42-2.557,3.429-4.756,5.848-6.421c3.11-2.141,6.897-3.398,10.979-3.398h31.719C76.414,15.008,85,23.419,85,33.758V66.229z"/>
|
||||||
|
</g>
|
||||||
|
</g></g><g transform="translate(720,0) scale(2.8, 2.8)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<g>
|
||||||
|
<path style="fill:none;" d="M65.859,15.008H34.141c-4.082,0-7.869,1.258-10.979,3.398c-2.419,1.665-4.428,3.864-5.848,6.421
|
||||||
|
C15.838,27.484,15,30.526,15,33.758v32.471c0,10.344,8.586,18.76,19.145,18.76L50,84.992l15.855-0.004
|
||||||
|
C76.414,84.988,85,76.572,85,66.229V33.758C85,23.419,76.414,15.008,65.859,15.008z"/>
|
||||||
|
<path d="M65.859,0.008H34.141h0C18.683,0.008,5.587,10.221,1.4,24.18c-0.433,1.444-0.771,2.928-1.006,4.445
|
||||||
|
C0.135,30.299,0,32.013,0,33.758v32.471c0,18.619,15.32,33.76,34.141,33.76L50,99.992l15.859-0.004
|
||||||
|
c18.82,0,34.141-15.141,34.141-33.76V33.758C100,15.148,84.68,0.008,65.859,0.008z M85,66.229c0,10.344-8.586,18.76-19.145,18.76
|
||||||
|
L50,84.992l-15.855-0.004C23.586,84.988,15,76.572,15,66.229V33.758c0-3.231,0.838-6.273,2.313-8.931
|
||||||
|
c1.42-2.557,3.429-4.756,5.848-6.421c3.11-2.141,6.897-3.398,10.979-3.398h31.719C76.414,15.008,85,23.419,85,33.758V66.229z"/>
|
||||||
|
</g>
|
||||||
|
</g></g><g transform="translate(0,720) scale(2.8, 2.8)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<g>
|
||||||
|
<path style="fill:none;" d="M65.859,15.008H34.141c-4.082,0-7.869,1.258-10.979,3.398c-2.419,1.665-4.428,3.864-5.848,6.421
|
||||||
|
C15.838,27.484,15,30.526,15,33.758v32.471c0,10.344,8.586,18.76,19.145,18.76L50,84.992l15.855-0.004
|
||||||
|
C76.414,84.988,85,76.572,85,66.229V33.758C85,23.419,76.414,15.008,65.859,15.008z"/>
|
||||||
|
<path d="M65.859,0.008H34.141h0C18.683,0.008,5.587,10.221,1.4,24.18c-0.433,1.444-0.771,2.928-1.006,4.445
|
||||||
|
C0.135,30.299,0,32.013,0,33.758v32.471c0,18.619,15.32,33.76,34.141,33.76L50,99.992l15.859-0.004
|
||||||
|
c18.82,0,34.141-15.141,34.141-33.76V33.758C100,15.148,84.68,0.008,65.859,0.008z M85,66.229c0,10.344-8.586,18.76-19.145,18.76
|
||||||
|
L50,84.992l-15.855-0.004C23.586,84.988,15,76.572,15,66.229V33.758c0-3.231,0.838-6.273,2.313-8.931
|
||||||
|
c1.42-2.557,3.429-4.756,5.848-6.421c3.11-2.141,6.897-3.398,10.979-3.398h31.719C76.414,15.008,85,23.419,85,33.758V66.229z"/>
|
||||||
|
</g>
|
||||||
|
</g></g><g transform="translate(80,80) scale(1.2, 1.2)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<g>
|
||||||
|
<g id="XMLID_1_">
|
||||||
|
<g>
|
||||||
|
<path d="M27.351,100c-15.09,0-27.365-12.032-27.365-26.808V26.794c0-4.616,1.2-8.96,3.301-12.761
|
||||||
|
c2.029-3.658,4.901-6.802,8.36-9.174C16.09,1.801,21.506,0,27.336,0h45.327c15.076,0,27.351,12.018,27.351,26.793v46.398
|
||||||
|
c0,14.775-12.274,26.808-27.351,26.808H50H27.351z"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</g></g><g transform="translate(800,80) scale(1.2, 1.2)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<g>
|
||||||
|
<g id="XMLID_1_">
|
||||||
|
<g>
|
||||||
|
<path d="M27.351,100c-15.09,0-27.365-12.032-27.365-26.808V26.794c0-4.616,1.2-8.96,3.301-12.761
|
||||||
|
c2.029-3.658,4.901-6.802,8.36-9.174C16.09,1.801,21.506,0,27.336,0h45.327c15.076,0,27.351,12.018,27.351,26.793v46.398
|
||||||
|
c0,14.775-12.274,26.808-27.351,26.808H50H27.351z"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</g></g><g transform="translate(80,800) scale(1.2, 1.2)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<g>
|
||||||
|
<g id="XMLID_1_">
|
||||||
|
<g>
|
||||||
|
<path d="M27.351,100c-15.09,0-27.365-12.032-27.365-26.808V26.794c0-4.616,1.2-8.96,3.301-12.761
|
||||||
|
c2.029-3.658,4.901-6.802,8.36-9.174C16.09,1.801,21.506,0,27.336,0h45.327c15.076,0,27.351,12.018,27.351,26.793v46.398
|
||||||
|
c0,14.775-12.274,26.808-27.351,26.808H50H27.351z"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</g></g></g></svg>
|
After Width: | Height: | Size: 34 KiB |
728
config/caddy/content/overview/qr-loki-overview.svg
Normal file
@ -0,0 +1,728 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||||
|
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||||
|
width="1155px" height="1155px" viewBox="0 0 1155 1155" enable-background="new 0 0 1155 1155" xml:space="preserve">
|
||||||
|
<rect x="0" y="0" width="1155" height="1155" fill="rgb(255,255,255)" /><g transform="translate(70,70)"><g transform="translate(280,0) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(315,0) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(455,0) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(490,0) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(525,0) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(595,0) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(280,35) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(315,35) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(455,35) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(490,35) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(525,35) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(595,35) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(665,35) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(700,35) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(280,70) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(385,70) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(455,70) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(490,70) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(630,70) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(385,105) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(490,105) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(525,105) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(595,105) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(280,140) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(315,140) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(350,140) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(455,140) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(525,140) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(630,140) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(665,140) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(350,175) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(420,175) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(455,175) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(490,175) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(595,175) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(630,175) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(700,175) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(280,210) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(350,210) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(420,210) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(490,210) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(560,210) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(630,210) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(700,210) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(315,245) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(385,245) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(490,245) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(665,245) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(0,280) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(105,280) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(140,280) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(175,280) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(210,280) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(245,280) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(280,280) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(350,280) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(455,280) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(490,280) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(525,280) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(560,280) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(595,280) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(665,280) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(735,280) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(840,280) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(910,280) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(945,280) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(980,280) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(70,315) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(105,315) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(175,315) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(245,315) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(280,315) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(490,315) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(630,315) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(665,315) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(805,315) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(840,315) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(910,315) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(945,315) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(70,350) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(175,350) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(210,350) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(385,350) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(490,350) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(595,350) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(700,350) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(770,350) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(805,350) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(910,350) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(0,385) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(35,385) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(70,385) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(105,385) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(140,385) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(175,385) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(245,385) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(280,385) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(315,385) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(350,385) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(385,385) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(420,385) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(490,385) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(525,385) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(595,385) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(665,385) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(700,385) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(770,385) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(980,385) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(105,420) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(175,420) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(210,420) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(245,420) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(280,420) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(315,420) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(350,420) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(455,420) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(490,420) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(665,420) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(770,420) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(805,420) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(980,420) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(70,455) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(105,455) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(140,455) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(175,455) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(245,455) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(315,455) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(385,455) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(770,455) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(840,455) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(875,455) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(945,455) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(980,455) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(0,490) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(35,490) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(70,490) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(140,490) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(175,490) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(210,490) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(245,490) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(385,490) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(490,490) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(525,490) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(595,490) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(665,490) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(700,490) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(805,490) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(840,490) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(875,490) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(910,490) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(980,490) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(35,525) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(105,525) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(175,525) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(280,525) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(315,525) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(350,525) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(385,525) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(420,525) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(455,525) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(490,525) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(560,525) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(665,525) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(735,525) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(910,525) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(980,525) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(35,560) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(70,560) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(105,560) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(175,560) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(210,560) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(245,560) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(385,560) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(525,560) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(630,560) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(665,560) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(700,560) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(805,560) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(0,595) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(140,595) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(175,595) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(245,595) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(280,595) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(315,595) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(350,595) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(385,595) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(420,595) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(630,595) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(665,595) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(700,595) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(840,595) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(875,595) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(910,595) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(945,595) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(0,630) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(35,630) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(70,630) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(105,630) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(210,630) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(350,630) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(385,630) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(420,630) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(455,630) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(490,630) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(560,630) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(665,630) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(735,630) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(770,630) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(980,630) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(0,665) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(35,665) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(105,665) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(280,665) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(455,665) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(525,665) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(560,665) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(735,665) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(770,665) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(875,665) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(910,665) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(0,700) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(35,700) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(70,700) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(105,700) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(210,700) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(245,700) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(315,700) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(350,700) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(455,700) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(630,700) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(700,700) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(735,700) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(770,700) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(805,700) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(840,700) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(875,700) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(910,700) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(945,700) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(280,735) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(350,735) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(385,735) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(420,735) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(455,735) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(560,735) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(595,735) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(630,735) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(700,735) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(840,735) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(875,735) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(280,770) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(385,770) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(455,770) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(525,770) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(560,770) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(665,770) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(700,770) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(770,770) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(840,770) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(875,770) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(280,805) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(315,805) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(350,805) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(385,805) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(455,805) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(560,805) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(630,805) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(700,805) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(840,805) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(875,805) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(945,805) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(280,840) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(315,840) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(385,840) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(420,840) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(455,840) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(525,840) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(560,840) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(595,840) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(665,840) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(700,840) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(735,840) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(770,840) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(805,840) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(840,840) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(875,840) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(945,840) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(280,875) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(315,875) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(350,875) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(385,875) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(455,875) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(490,875) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(560,875) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(630,875) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(665,875) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(700,875) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(735,875) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(945,875) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(455,910) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(490,910) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(560,910) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(630,910) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(700,910) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(735,910) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(805,910) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(840,910) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(875,910) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(945,910) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(980,910) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(350,945) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(420,945) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(455,945) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(490,945) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(525,945) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(770,945) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(805,945) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(875,945) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(910,945) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(980,945) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(280,980) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(315,980) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(490,980) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(560,980) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(595,980) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(630,980) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(665,980) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(700,980) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(0,0) scale(2.45, 2.45)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<g>
|
||||||
|
<path style="fill:none;" d="M65.859,15.008H34.141c-4.082,0-7.869,1.258-10.979,3.398c-2.419,1.665-4.428,3.864-5.848,6.421
|
||||||
|
C15.838,27.484,15,30.526,15,33.758v32.471c0,10.344,8.586,18.76,19.145,18.76L50,84.992l15.855-0.004
|
||||||
|
C76.414,84.988,85,76.572,85,66.229V33.758C85,23.419,76.414,15.008,65.859,15.008z"/>
|
||||||
|
<path d="M65.859,0.008H34.141h0C18.683,0.008,5.587,10.221,1.4,24.18c-0.433,1.444-0.771,2.928-1.006,4.445
|
||||||
|
C0.135,30.299,0,32.013,0,33.758v32.471c0,18.619,15.32,33.76,34.141,33.76L50,99.992l15.859-0.004
|
||||||
|
c18.82,0,34.141-15.141,34.141-33.76V33.758C100,15.148,84.68,0.008,65.859,0.008z M85,66.229c0,10.344-8.586,18.76-19.145,18.76
|
||||||
|
L50,84.992l-15.855-0.004C23.586,84.988,15,76.572,15,66.229V33.758c0-3.231,0.838-6.273,2.313-8.931
|
||||||
|
c1.42-2.557,3.429-4.756,5.848-6.421c3.11-2.141,6.897-3.398,10.979-3.398h31.719C76.414,15.008,85,23.419,85,33.758V66.229z"/>
|
||||||
|
</g>
|
||||||
|
</g></g><g transform="translate(770,0) scale(2.45, 2.45)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<g>
|
||||||
|
<path style="fill:none;" d="M65.859,15.008H34.141c-4.082,0-7.869,1.258-10.979,3.398c-2.419,1.665-4.428,3.864-5.848,6.421
|
||||||
|
C15.838,27.484,15,30.526,15,33.758v32.471c0,10.344,8.586,18.76,19.145,18.76L50,84.992l15.855-0.004
|
||||||
|
C76.414,84.988,85,76.572,85,66.229V33.758C85,23.419,76.414,15.008,65.859,15.008z"/>
|
||||||
|
<path d="M65.859,0.008H34.141h0C18.683,0.008,5.587,10.221,1.4,24.18c-0.433,1.444-0.771,2.928-1.006,4.445
|
||||||
|
C0.135,30.299,0,32.013,0,33.758v32.471c0,18.619,15.32,33.76,34.141,33.76L50,99.992l15.859-0.004
|
||||||
|
c18.82,0,34.141-15.141,34.141-33.76V33.758C100,15.148,84.68,0.008,65.859,0.008z M85,66.229c0,10.344-8.586,18.76-19.145,18.76
|
||||||
|
L50,84.992l-15.855-0.004C23.586,84.988,15,76.572,15,66.229V33.758c0-3.231,0.838-6.273,2.313-8.931
|
||||||
|
c1.42-2.557,3.429-4.756,5.848-6.421c3.11-2.141,6.897-3.398,10.979-3.398h31.719C76.414,15.008,85,23.419,85,33.758V66.229z"/>
|
||||||
|
</g>
|
||||||
|
</g></g><g transform="translate(0,770) scale(2.45, 2.45)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<g>
|
||||||
|
<path style="fill:none;" d="M65.859,15.008H34.141c-4.082,0-7.869,1.258-10.979,3.398c-2.419,1.665-4.428,3.864-5.848,6.421
|
||||||
|
C15.838,27.484,15,30.526,15,33.758v32.471c0,10.344,8.586,18.76,19.145,18.76L50,84.992l15.855-0.004
|
||||||
|
C76.414,84.988,85,76.572,85,66.229V33.758C85,23.419,76.414,15.008,65.859,15.008z"/>
|
||||||
|
<path d="M65.859,0.008H34.141h0C18.683,0.008,5.587,10.221,1.4,24.18c-0.433,1.444-0.771,2.928-1.006,4.445
|
||||||
|
C0.135,30.299,0,32.013,0,33.758v32.471c0,18.619,15.32,33.76,34.141,33.76L50,99.992l15.859-0.004
|
||||||
|
c18.82,0,34.141-15.141,34.141-33.76V33.758C100,15.148,84.68,0.008,65.859,0.008z M85,66.229c0,10.344-8.586,18.76-19.145,18.76
|
||||||
|
L50,84.992l-15.855-0.004C23.586,84.988,15,76.572,15,66.229V33.758c0-3.231,0.838-6.273,2.313-8.931
|
||||||
|
c1.42-2.557,3.429-4.756,5.848-6.421c3.11-2.141,6.897-3.398,10.979-3.398h31.719C76.414,15.008,85,23.419,85,33.758V66.229z"/>
|
||||||
|
</g>
|
||||||
|
</g></g><g transform="translate(70,70) scale(1.05, 1.05)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<g>
|
||||||
|
<g id="XMLID_1_">
|
||||||
|
<g>
|
||||||
|
<path d="M27.351,100c-15.09,0-27.365-12.032-27.365-26.808V26.794c0-4.616,1.2-8.96,3.301-12.761
|
||||||
|
c2.029-3.658,4.901-6.802,8.36-9.174C16.09,1.801,21.506,0,27.336,0h45.327c15.076,0,27.351,12.018,27.351,26.793v46.398
|
||||||
|
c0,14.775-12.274,26.808-27.351,26.808H50H27.351z"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</g></g><g transform="translate(840,70) scale(1.05, 1.05)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<g>
|
||||||
|
<g id="XMLID_1_">
|
||||||
|
<g>
|
||||||
|
<path d="M27.351,100c-15.09,0-27.365-12.032-27.365-26.808V26.794c0-4.616,1.2-8.96,3.301-12.761
|
||||||
|
c2.029-3.658,4.901-6.802,8.36-9.174C16.09,1.801,21.506,0,27.336,0h45.327c15.076,0,27.351,12.018,27.351,26.793v46.398
|
||||||
|
c0,14.775-12.274,26.808-27.351,26.808H50H27.351z"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</g></g><g transform="translate(70,840) scale(1.05, 1.05)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<g>
|
||||||
|
<g id="XMLID_1_">
|
||||||
|
<g>
|
||||||
|
<path d="M27.351,100c-15.09,0-27.365-12.032-27.365-26.808V26.794c0-4.616,1.2-8.96,3.301-12.761
|
||||||
|
c2.029-3.658,4.901-6.802,8.36-9.174C16.09,1.801,21.506,0,27.336,0h45.327c15.076,0,27.351,12.018,27.351,26.793v46.398
|
||||||
|
c0,14.775-12.274,26.808-27.351,26.808H50H27.351z"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</g></g></g></svg>
|
After Width: | Height: | Size: 50 KiB |
552
config/caddy/content/overview/qr-loki-viz.svg
Normal file
@ -0,0 +1,552 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||||
|
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||||
|
width="1160px" height="1160px" viewBox="0 0 1160 1160" enable-background="new 0 0 1160 1160" xml:space="preserve">
|
||||||
|
<rect x="0" y="0" width="1160" height="1160" fill="rgb(255,255,255)" /><g transform="translate(80,80)"><g transform="translate(320,0) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(360,0) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(440,0) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(560,0) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(640,0) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(320,40) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(480,40) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(320,80) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(400,80) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(520,80) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(560,80) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(600,80) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(400,120) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(440,120) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(520,120) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(600,120) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(640,120) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(320,160) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(360,160) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(400,160) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(480,160) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(640,160) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(360,200) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(400,200) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(440,200) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(480,200) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(520,200) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(560,200) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(320,240) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(400,240) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(480,240) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(560,240) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(640,240) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(440,280) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(520,280) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(560,280) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(0,320) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(120,320) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(160,320) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(200,320) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(240,320) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(280,320) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(320,320) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(360,320) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(400,320) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(480,320) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(560,320) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(600,320) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(640,320) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(680,320) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(800,320) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(880,320) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(920,320) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(960,320) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(0,360) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(40,360) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(120,360) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(280,360) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(320,360) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(360,360) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(400,360) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(440,360) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(480,360) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(520,360) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(560,360) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(600,360) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(760,360) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(800,360) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(840,360) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(880,360) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(920,360) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(80,400) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(160,400) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(240,400) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(480,400) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(560,400) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(600,400) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(640,400) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(680,400) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(760,400) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(840,400) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(960,400) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(80,440) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(120,440) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(160,440) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(200,440) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(440,440) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(560,440) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(600,440) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(640,440) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(760,440) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(800,440) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(840,440) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(880,440) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(920,440) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(960,440) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(200,480) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(240,480) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(280,480) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(400,480) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(440,480) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(600,480) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(640,480) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(720,480) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(760,480) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(960,480) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(0,520) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(80,520) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(280,520) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(320,520) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(360,520) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(400,520) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(480,520) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(600,520) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(640,520) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(800,520) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(920,520) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(0,560) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(40,560) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(80,560) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(160,560) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(240,560) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(280,560) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(360,560) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(600,560) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(760,560) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(840,560) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(880,560) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(920,560) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(960,560) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(0,600) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(80,600) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(160,600) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(200,600) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(320,600) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(400,600) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(480,600) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(560,600) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(600,600) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(680,600) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(720,600) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(760,600) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(880,600) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(960,600) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(0,640) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(80,640) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(160,640) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(240,640) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(280,640) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(320,640) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(360,640) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(400,640) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(440,640) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(480,640) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(520,640) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(560,640) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(640,640) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(680,640) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(720,640) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(760,640) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(800,640) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(880,640) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(920,640) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(320,680) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(360,680) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(400,680) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(440,680) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(520,680) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(640,680) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(800,680) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(920,680) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(320,720) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(360,720) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(400,720) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(480,720) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(640,720) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(720,720) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(800,720) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(840,720) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(960,720) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(320,760) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(400,760) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(440,760) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(520,760) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(600,760) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(640,760) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(800,760) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(320,800) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(360,800) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(440,800) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(520,800) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(600,800) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(640,800) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(680,800) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(720,800) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(760,800) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(800,800) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(840,800) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(920,800) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(960,800) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(320,840) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(360,840) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(400,840) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(480,840) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(520,840) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(560,840) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(640,840) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(720,840) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(840,840) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(920,840) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(960,840) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(400,880) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(440,880) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(520,880) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(640,880) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(680,880) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(760,880) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(800,880) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(880,880) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(920,880) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(960,880) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(440,920) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(480,920) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(520,920) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(760,920) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(800,920) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(880,920) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(920,920) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(960,920) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(320,960) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(360,960) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(400,960) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(440,960) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(480,960) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(520,960) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(640,960) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(680,960) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(840,960) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(960,960) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<rect width="100" height="100"/>
|
||||||
|
</g></g><g transform="translate(0,0) scale(2.8, 2.8)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<g>
|
||||||
|
<path style="fill:none;" d="M65.859,15.008H34.141c-4.082,0-7.869,1.258-10.979,3.398c-2.419,1.665-4.428,3.864-5.848,6.421
|
||||||
|
C15.838,27.484,15,30.526,15,33.758v32.471c0,10.344,8.586,18.76,19.145,18.76L50,84.992l15.855-0.004
|
||||||
|
C76.414,84.988,85,76.572,85,66.229V33.758C85,23.419,76.414,15.008,65.859,15.008z"/>
|
||||||
|
<path d="M65.859,0.008H34.141h0C18.683,0.008,5.587,10.221,1.4,24.18c-0.433,1.444-0.771,2.928-1.006,4.445
|
||||||
|
C0.135,30.299,0,32.013,0,33.758v32.471c0,18.619,15.32,33.76,34.141,33.76L50,99.992l15.859-0.004
|
||||||
|
c18.82,0,34.141-15.141,34.141-33.76V33.758C100,15.148,84.68,0.008,65.859,0.008z M85,66.229c0,10.344-8.586,18.76-19.145,18.76
|
||||||
|
L50,84.992l-15.855-0.004C23.586,84.988,15,76.572,15,66.229V33.758c0-3.231,0.838-6.273,2.313-8.931
|
||||||
|
c1.42-2.557,3.429-4.756,5.848-6.421c3.11-2.141,6.897-3.398,10.979-3.398h31.719C76.414,15.008,85,23.419,85,33.758V66.229z"/>
|
||||||
|
</g>
|
||||||
|
</g></g><g transform="translate(720,0) scale(2.8, 2.8)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<g>
|
||||||
|
<path style="fill:none;" d="M65.859,15.008H34.141c-4.082,0-7.869,1.258-10.979,3.398c-2.419,1.665-4.428,3.864-5.848,6.421
|
||||||
|
C15.838,27.484,15,30.526,15,33.758v32.471c0,10.344,8.586,18.76,19.145,18.76L50,84.992l15.855-0.004
|
||||||
|
C76.414,84.988,85,76.572,85,66.229V33.758C85,23.419,76.414,15.008,65.859,15.008z"/>
|
||||||
|
<path d="M65.859,0.008H34.141h0C18.683,0.008,5.587,10.221,1.4,24.18c-0.433,1.444-0.771,2.928-1.006,4.445
|
||||||
|
C0.135,30.299,0,32.013,0,33.758v32.471c0,18.619,15.32,33.76,34.141,33.76L50,99.992l15.859-0.004
|
||||||
|
c18.82,0,34.141-15.141,34.141-33.76V33.758C100,15.148,84.68,0.008,65.859,0.008z M85,66.229c0,10.344-8.586,18.76-19.145,18.76
|
||||||
|
L50,84.992l-15.855-0.004C23.586,84.988,15,76.572,15,66.229V33.758c0-3.231,0.838-6.273,2.313-8.931
|
||||||
|
c1.42-2.557,3.429-4.756,5.848-6.421c3.11-2.141,6.897-3.398,10.979-3.398h31.719C76.414,15.008,85,23.419,85,33.758V66.229z"/>
|
||||||
|
</g>
|
||||||
|
</g></g><g transform="translate(0,720) scale(2.8, 2.8)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<g>
|
||||||
|
<path style="fill:none;" d="M65.859,15.008H34.141c-4.082,0-7.869,1.258-10.979,3.398c-2.419,1.665-4.428,3.864-5.848,6.421
|
||||||
|
C15.838,27.484,15,30.526,15,33.758v32.471c0,10.344,8.586,18.76,19.145,18.76L50,84.992l15.855-0.004
|
||||||
|
C76.414,84.988,85,76.572,85,66.229V33.758C85,23.419,76.414,15.008,65.859,15.008z"/>
|
||||||
|
<path d="M65.859,0.008H34.141h0C18.683,0.008,5.587,10.221,1.4,24.18c-0.433,1.444-0.771,2.928-1.006,4.445
|
||||||
|
C0.135,30.299,0,32.013,0,33.758v32.471c0,18.619,15.32,33.76,34.141,33.76L50,99.992l15.859-0.004
|
||||||
|
c18.82,0,34.141-15.141,34.141-33.76V33.758C100,15.148,84.68,0.008,65.859,0.008z M85,66.229c0,10.344-8.586,18.76-19.145,18.76
|
||||||
|
L50,84.992l-15.855-0.004C23.586,84.988,15,76.572,15,66.229V33.758c0-3.231,0.838-6.273,2.313-8.931
|
||||||
|
c1.42-2.557,3.429-4.756,5.848-6.421c3.11-2.141,6.897-3.398,10.979-3.398h31.719C76.414,15.008,85,23.419,85,33.758V66.229z"/>
|
||||||
|
</g>
|
||||||
|
</g></g><g transform="translate(80,80) scale(1.2, 1.2)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<g>
|
||||||
|
<g id="XMLID_1_">
|
||||||
|
<g>
|
||||||
|
<path d="M27.351,100c-15.09,0-27.365-12.032-27.365-26.808V26.794c0-4.616,1.2-8.96,3.301-12.761
|
||||||
|
c2.029-3.658,4.901-6.802,8.36-9.174C16.09,1.801,21.506,0,27.336,0h45.327c15.076,0,27.351,12.018,27.351,26.793v46.398
|
||||||
|
c0,14.775-12.274,26.808-27.351,26.808H50H27.351z"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</g></g><g transform="translate(800,80) scale(1.2, 1.2)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<g>
|
||||||
|
<g id="XMLID_1_">
|
||||||
|
<g>
|
||||||
|
<path d="M27.351,100c-15.09,0-27.365-12.032-27.365-26.808V26.794c0-4.616,1.2-8.96,3.301-12.761
|
||||||
|
c2.029-3.658,4.901-6.802,8.36-9.174C16.09,1.801,21.506,0,27.336,0h45.327c15.076,0,27.351,12.018,27.351,26.793v46.398
|
||||||
|
c0,14.775-12.274,26.808-27.351,26.808H50H27.351z"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</g></g><g transform="translate(80,800) scale(1.2, 1.2)"><g transform="" style="fill: rgb(16, 64, 102);">
|
||||||
|
<g>
|
||||||
|
<g id="XMLID_1_">
|
||||||
|
<g>
|
||||||
|
<path d="M27.351,100c-15.09,0-27.365-12.032-27.365-26.808V26.794c0-4.616,1.2-8.96,3.301-12.761
|
||||||
|
c2.029-3.658,4.901-6.802,8.36-9.174C16.09,1.801,21.506,0,27.336,0h45.327c15.076,0,27.351,12.018,27.351,26.793v46.398
|
||||||
|
c0,14.775-12.274,26.808-27.351,26.808H50H27.351z"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</g></g></g></svg>
|
After Width: | Height: | Size: 37 KiB |
1043
config/caddy/content/overview/qr-loki.wifi.svg
Normal file
After Width: | Height: | Size: 80 KiB |
1
config/caddy/content/overview/safety-glasses.svg
Normal file
@ -0,0 +1 @@
|
|||||||
|
<svg id="icons" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 128 128"><defs><style>.cls-1{fill:#b7e29c;}.cls-2{fill:#97cc83;}.cls-3{fill:#f4d647;}.cls-4{fill:#f4a742;}.cls-5{fill:#5282ef;}.cls-6{fill:#a2bdf4;}.cls-7{fill:none;stroke:#000;stroke-linecap:round;stroke-linejoin:round;stroke-width:2px;}</style></defs><title>safety-glasses</title><path class="cls-1" d="M48,37a33.319,33.319,0,0,1,8.56,1.083A27.63,27.63,0,0,0,64,39a27.643,27.643,0,0,0,7.44-.917A33.308,33.308,0,0,1,80,37h22.474a1,1,0,0,0,.85-1.536C96.759,24.828,84.651,18,64,18S31.241,24.828,24.675,35.464A1,1,0,0,0,25.526,37Z"/><path class="cls-1" d="M90,91c-15.884,0-19.965-7.631-22.665-12.681C65.561,75,64.656,75,64,75s-1.56,0-3.335,3.319C57.964,83.369,53.883,91,38,91c-5.978,0-10.526-1.4-13.985-3.723a1,1,0,0,0-1.487,1.229C28.428,101.418,40.846,110,64,110s35.572-8.582,41.473-21.495a1,1,0,0,0-1.487-1.229C100.526,89.6,95.978,91,90,91Z"/><path class="cls-2" d="M67.33,78.32a26.676,26.676,0,0,0,4.57,6.64,282.35,282.35,0,0,0-15.14,24.73C38.2,108.07,27.78,100,22.53,88.51a1,1,0,0,1,1.48-1.23C27.47,89.6,32.02,91,38,91c15.88,0,19.96-7.63,22.67-12.68C62.44,75,63.34,75,64,75S65.56,75,67.33,78.32Z"/><path class="cls-2" d="M102.47,37H80a33.7,33.7,0,0,0-8.56,1.08c-.89.21-1.73.41-2.67.57A170.727,170.727,0,0,1,91.95,24.34a32.506,32.506,0,0,1,11.37,11.12A1,1,0,0,1,102.47,37Z"/><g id="_Group_" data-name="<Group>"><path class="cls-3" d="M113,46v4a2.006,2.006,0,0,1-2,2h-4.33c-.23,0-.45-.01-.68-.02a11.881,11.881,0,0,1-2.59-.43l-7.39-2.1A12,12,0,0,0,92.74,49s-10.25,2.86-27.5,2.99h-.01c-.41.01-.82.01-1.23.01-5.4,0-10.14-.27-14.14-.65h-.01A91.913,91.913,0,0,1,35.26,49a12,12,0,0,0-3.27.45l-7.39,2.1a11.881,11.881,0,0,1-2.59.43c-.23.01-.45.02-.68.02H17a2.006,2.006,0,0,1-2-2V46a4,4,0,0,1,4-4H48c7,0,8,2,16,2s9-2,16-2h29A4,4,0,0,1,113,46Z"/><path class="cls-4" d="M106.67,52h3.32c0,17-1.04,34-19.99,34C68,86,75,70,64,70S60,86,38,86C19.05,86,18.01,69,18.01,52h3.32c.23,0,.45-.01.68-.02V52c0,7.02.29,12.77,1.22,17.29a21.68,21.68,0,0,0,2.42,6.75C28.03,80.04,31.88,82,38,82c10.49,0,12.45-3.67,14.73-7.92C54.55,70.67,57.05,66,64,66s9.45,4.67,11.27,8.08C77.55,78.33,79.51,82,90,82c13.6,0,15.99-9.67,15.99-30v-.02C106.22,51.99,106.44,52,106.67,52Z"/><path class="cls-5" d="M105.99,51.98V52c0,20.33-2.39,30-15.99,30-10.49,0-12.45-3.67-14.73-7.92C73.45,70.67,70.95,66,64,66s-9.45,4.67-11.27,8.08C50.45,78.33,48.49,82,38,82c-6.12,0-9.97-1.96-12.35-5.96,6.37-7.39,18.66-18.12,39.58-24.05h.01C82.49,51.86,92.74,49,92.74,49a12,12,0,0,1,3.27.45l7.39,2.1A11.881,11.881,0,0,0,105.99,51.98Z"/><path class="cls-6" d="M64,52c.41,0,.82,0,1.23-.01C44.31,57.92,32.02,68.65,25.65,76.04a21.68,21.68,0,0,1-2.42-6.75A60.754,60.754,0,0,1,49.85,51.35h.01C53.86,51.73,58.6,52,64,52Z"/><path class="cls-5" d="M35.26,49a91.913,91.913,0,0,0,14.59,2.35A60.754,60.754,0,0,0,23.23,69.29C22.3,64.77,22.01,59.02,22.01,52v-.02a11.881,11.881,0,0,0,2.59-.43l7.39-2.1A12,12,0,0,1,35.26,49Z"/><path class="cls-7" d="M18.01,52c0,17,1.04,34,19.99,34,22,0,15-16,26-16s4,16,26,16c18.95,0,19.99-17,19.99-34"/><path class="cls-7" d="M65.24,51.99C82.49,51.86,92.74,49,92.74,49a12,12,0,0,1,3.27.45l7.39,2.1a11.881,11.881,0,0,0,2.59.43c.23.01.45.02.68.02H111a2.006,2.006,0,0,0,2-2V46a4,4,0,0,0-4-4H80c-7,0-8,2-16,2s-9-2-16-2H19a4,4,0,0,0-4,4v4a2.006,2.006,0,0,0,2,2h4.33c.23,0,.45-.01.68-.02a11.881,11.881,0,0,0,2.59-.43l7.39-2.1A12,12,0,0,1,35.26,49a91.913,91.913,0,0,0,14.59,2.35"/><path class="cls-7" d="M49.86,51.35c4,.38,8.74.65,14.14.65.41,0,.82,0,1.23-.01"/><path class="cls-7" d="M105.99,51.98V52c0,20.33-2.39,30-15.99,30-10.49,0-12.45-3.67-14.73-7.92C73.45,70.67,70.95,66,64,66s-9.45,4.67-11.27,8.08C50.45,78.33,48.49,82,38,82c-6.12,0-9.97-1.96-12.35-5.96a21.68,21.68,0,0,1-2.42-6.75C22.3,64.77,22.01,59.02,22.01,52v-.02"/><path class="cls-7" d="M23.23,69.29A60.754,60.754,0,0,1,49.85,51.35h.01"/><path class="cls-7" d="M25.65,76.04c6.37-7.39,18.66-18.12,39.58-24.05h.01"/></g></svg>
|
After Width: | Height: | Size: 3.8 KiB |
247
config/caddy/content/overview/style.css
Normal file
@ -0,0 +1,247 @@
|
|||||||
|
html
|
||||||
|
{
|
||||||
|
background-color: rgb(51, 51, 51);
|
||||||
|
font-family: sans-serif;
|
||||||
|
padding-bottom: 50px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#HEADLINE
|
||||||
|
{
|
||||||
|
font-family:'Gill Sans', 'Gill Sans MT', Calibri, 'Trebuchet MS', sans-serif;
|
||||||
|
text-align: center;
|
||||||
|
color: white;
|
||||||
|
background-color: rgb(1, 115, 126);
|
||||||
|
box-shadow: 0px 15px 0px -5px rgb(1, 89, 97);
|
||||||
|
|
||||||
|
margin-top: 2px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#LOGO
|
||||||
|
{
|
||||||
|
height: 1em;
|
||||||
|
width: auto;
|
||||||
|
|
||||||
|
float: right;
|
||||||
|
margin-top: 2px;
|
||||||
|
padding-left: 12px;
|
||||||
|
padding-right: 12px;
|
||||||
|
background-color: inherit;
|
||||||
|
}
|
||||||
|
|
||||||
|
.mini-heads
|
||||||
|
{
|
||||||
|
color: white;
|
||||||
|
font-weight: 700;
|
||||||
|
}
|
||||||
|
|
||||||
|
#LEFT
|
||||||
|
{
|
||||||
|
float: left;
|
||||||
|
max-width: 49.5%;
|
||||||
|
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
#RIGHT
|
||||||
|
{
|
||||||
|
float: right;
|
||||||
|
max-width: 49.5%;
|
||||||
|
flex-direction: row;
|
||||||
|
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
.qr
|
||||||
|
{
|
||||||
|
max-width: 59.5%;
|
||||||
|
height: auto;
|
||||||
|
|
||||||
|
object-fit: cover;
|
||||||
|
|
||||||
|
border-color: black;
|
||||||
|
border: 3px solid;
|
||||||
|
border-radius: 10%;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
.qr_2
|
||||||
|
{
|
||||||
|
width: 35%;
|
||||||
|
height: auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
table, td
|
||||||
|
{
|
||||||
|
color: white;
|
||||||
|
|
||||||
|
width: 70%;
|
||||||
|
line-height: 190%;
|
||||||
|
border: 1px solid rgb(76, 76, 76);
|
||||||
|
background-color: rgb(34, 34, 34);
|
||||||
|
border-collapse: collapse;
|
||||||
|
margin-left: auto;
|
||||||
|
margin-right: auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
#SPACE
|
||||||
|
{
|
||||||
|
padding: 3px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#NORM_SET
|
||||||
|
{
|
||||||
|
padding-top: 6px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.link
|
||||||
|
{
|
||||||
|
color: white;
|
||||||
|
background-color: rgb(1, 115, 126);
|
||||||
|
padding-left: 10px;
|
||||||
|
padding-right: 10px;
|
||||||
|
border-radius: 3px;
|
||||||
|
text-decoration: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.link:hover
|
||||||
|
{
|
||||||
|
color: rgb(206, 206, 206);
|
||||||
|
}
|
||||||
|
|
||||||
|
.link:visited
|
||||||
|
{
|
||||||
|
color: rgb(75, 75, 75);
|
||||||
|
background-color: rgb(1, 89, 97);
|
||||||
|
}
|
||||||
|
|
||||||
|
.info
|
||||||
|
{
|
||||||
|
color: white;
|
||||||
|
|
||||||
|
background-color: rgb(34, 34, 34);
|
||||||
|
|
||||||
|
padding-top: 3px;
|
||||||
|
padding-right: 6px;
|
||||||
|
text-indent: 6px;
|
||||||
|
|
||||||
|
position: fixed;
|
||||||
|
bottom: 0px;
|
||||||
|
right: 6px;
|
||||||
|
|
||||||
|
border: 1px solid rgb(76, 76, 76);
|
||||||
|
}
|
||||||
|
|
||||||
|
.info:hover
|
||||||
|
{
|
||||||
|
cursor: pointer;
|
||||||
|
}
|
||||||
|
|
||||||
|
.info:visited
|
||||||
|
{
|
||||||
|
color: rgb(206, 206, 206);
|
||||||
|
}
|
||||||
|
|
||||||
|
a, a:visited, a:hover, a:active {
|
||||||
|
text-decoration: none;
|
||||||
|
color: inherit;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Phone */ /* pract. ab 400% zoom (inludkiert) am pc */
|
||||||
|
@media only screen and (max-width : 480px)
|
||||||
|
{
|
||||||
|
#LEFT
|
||||||
|
{
|
||||||
|
width: 100%;
|
||||||
|
max-width: none;
|
||||||
|
clear: both;
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
#RIGHT
|
||||||
|
{
|
||||||
|
max-width: none;
|
||||||
|
padding-top: 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.qr
|
||||||
|
{
|
||||||
|
max-width: 43.9%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.qr_2
|
||||||
|
{
|
||||||
|
width: 29%;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Tablet / Ipad */ /* pract. ab 200% Zoom (nicht inkludiert) am pc */
|
||||||
|
@media only screen and (max-width : 767px) and (min-width: 481px)
|
||||||
|
{
|
||||||
|
#LEFT
|
||||||
|
{
|
||||||
|
max-width: none;
|
||||||
|
width: 100%;
|
||||||
|
clear: both;
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
.qr
|
||||||
|
{
|
||||||
|
max-width: 35%;
|
||||||
|
}
|
||||||
|
|
||||||
|
table td
|
||||||
|
{
|
||||||
|
font-size: large;
|
||||||
|
}
|
||||||
|
|
||||||
|
.mini-heads
|
||||||
|
{
|
||||||
|
font-size: x-large;
|
||||||
|
}
|
||||||
|
|
||||||
|
#RIGHT
|
||||||
|
{
|
||||||
|
max-width: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
#SPACE
|
||||||
|
{
|
||||||
|
padding: none;
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
#BLOCK_ONE
|
||||||
|
{
|
||||||
|
max-width: 49.5%;
|
||||||
|
float: left;
|
||||||
|
}
|
||||||
|
|
||||||
|
#BLOCK_TWO
|
||||||
|
{
|
||||||
|
max-width: 49.5%;
|
||||||
|
float: right;
|
||||||
|
}
|
||||||
|
|
||||||
|
#BLOCK_THREE
|
||||||
|
{
|
||||||
|
max-width: 49.5%;
|
||||||
|
float: right;
|
||||||
|
}
|
||||||
|
|
||||||
|
.qr_2
|
||||||
|
{
|
||||||
|
max-width: 80%;
|
||||||
|
width: 50%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.link
|
||||||
|
{
|
||||||
|
font-size: larger;
|
||||||
|
}
|
||||||
|
|
||||||
|
.info
|
||||||
|
{
|
||||||
|
font-size: larger;
|
||||||
|
}
|
||||||
|
}
|
1
config/caddy/content/overview/wrench.svg
Normal file
@ -0,0 +1 @@
|
|||||||
|
<svg id="icons" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 128 128"><defs><style>.cls-1{fill:#9addf7;}.cls-2{fill:#65c7e5;}.cls-3{fill:#cbccd3;}.cls-4{fill:#a5a7ad;}.cls-5{fill:none;stroke:#000;stroke-linecap:round;stroke-linejoin:round;stroke-width:2px;}.cls-6{opacity:0.16;}</style></defs><title>wrench</title><path class="cls-1" d="M108.91,50.84a1,1,0,0,0-1.57-.62c-5.62,4.09-10.88,5.38-15.64,6.53-3.79.92-7.06,1.71-10.22,3.9a19.456,19.456,0,0,0-3.84,3.7C66.47,78.2,51.65,95.15,42.5,105.22a1,1,0,0,0,.42,1.62A63.082,63.082,0,0,0,64,110a78.244,78.244,0,0,0,8.64-.45,49.668,49.668,0,0,0,17.25-4.75C105.07,97.12,110,81.74,110,64A74.515,74.515,0,0,0,108.91,50.84ZM73.98,18.61A77.519,77.519,0,0,0,64,18c-9.06,0-16.47,1.31-22.5,3.69A33.934,33.934,0,0,0,26.95,32.2C20.39,40.47,18,51.67,18,64a65.914,65.914,0,0,0,2.58,19.37.993.993,0,0,0,1.63.42c4.55-4.21,10.43-9.52,16.74-15.09,2.68-2.37,5.44-4.78,8.21-7.18,5.14-4.45,10.32-8.84,15.12-12.78a19.294,19.294,0,0,0,3.03-3.05c3.47-4.53,3.86-8.9,4.24-13.12.34-3.79.68-7.71,3.6-10.65l1.46-1.66A1,1,0,0,0,73.98,18.61Z"/><path class="cls-2" d="M45.74,30.99l-4.01,7A2,2,0,0,1,39.99,39H32.01a2,2,0,0,1-1.74-1.01L26.95,32.2A33.934,33.934,0,0,1,41.5,21.69a1.858,1.858,0,0,1,.23.32l4.01,7A2,2,0,0,1,45.74,30.99Z"/><path class="cls-2" d="M94.993,70.5H91.007a2,2,0,0,0-1.735,1.006l-2.006,3.5a2,2,0,0,0,0,1.989l2.006,3.5A2,2,0,0,0,91.007,81.5h3.985a2,2,0,0,0,1.735-1.006l2.006-3.5a2,2,0,0,0,0-1.989l-2.006-3.5A2,2,0,0,0,94.993,70.5Z"/><path class="cls-2" d="M47.16,61.52c-2.77,2.4-5.53,4.81-8.21,7.18a1.934,1.934,0,0,1-.68-.71l-2.01-3.5a2,2,0,0,1,0-1.98l2.01-3.5A2,2,0,0,1,40.01,58h3.98a2,2,0,0,1,1.74,1.01Z"/><path class="cls-2" d="M89.89,104.8a49.668,49.668,0,0,1-17.25,4.75l-1.53-5.65a1.991,1.991,0,0,1,.51-1.94l5.65-5.65a2,2,0,0,1,1.94-.52L87,97.9a2.011,2.011,0,0,1,1.4,1.41Z"/><g id="_Group_" data-name="<Group>"><path class="cls-3" d="M92.89,42l-1.76,3.63c-.04.08-.08.16-.13.24a1.986,1.986,0,0,1-1.47.88,1.574,1.574,0,0,1-.53-.01,1.721,1.721,0,0,1-.54-.18l-.85-.42-.61-.3-1.18-.58-1.8-.88L83,43.88l-.78-.38-.97-.48a1.274,1.274,0,0,1-.25-.15,1.869,1.869,0,0,1-.47-.46,2.012,2.012,0,0,1-.2-2.09L81,38.93l1.09-2.25a1.98,1.98,0,0,1,.91-.92,2.107,2.107,0,0,1,.73-.21,1.9,1.9,0,0,1,1.03.2l.24.12.63.31,1.37.67.43.21,1.57.78.23.11,1.77.87.02.01.95.47a2.03,2.03,0,0,1,.92,2.7Z"/><path class="cls-3" d="M94.4,16.02a2,2,0,0,1,1.66,2.86L90.14,31.7,79.35,26.67a15.038,15.038,0,0,1,3.72-6.24A14.881,14.881,0,0,1,94.4,16.02Z"/><path class="cls-4" d="M111.47,22.16c1.8,5.55,3.17,14.29-2.91,20.43-11.01,11.11-20.5,7.4-29.93,13.96a23.949,23.949,0,0,0-4.88,4.66C58.54,80.07,37.58,103.5,32.09,109.04a9.941,9.941,0,0,1-14.16,0,10.171,10.171,0,0,1,0-14.29c5.5-5.55,28.81-26.79,47.52-42.15a24.047,24.047,0,0,0,3.82-3.86c7.55-9.83,3.53-19.36,7.43-23.3l2.65,1.23L90.14,31.7l4.02,1.87a4.013,4.013,0,0,0,1.99.36l5.43-.42a4.014,4.014,0,0,0,3.53-2.86l2.54-8.43A2,2,0,0,1,111.47,22.16ZM92.89,42a2.032,2.032,0,0,0-.92-2.7l-7.21-3.55a1.987,1.987,0,0,0-2.67.93l-1.76,3.64a2.035,2.035,0,0,0,.92,2.7l7.21,3.54a1.979,1.979,0,0,0,2.67-.93ZM25.02,106A3.952,3.952,0,0,0,29,102.02,4.046,4.046,0,0,0,24.98,98,3.952,3.952,0,0,0,21,101.98,4.046,4.046,0,0,0,25.02,106Z"/><path class="cls-5" d="M79.35,26.67,76.7,25.44c-3.9,3.94.12,13.47-7.43,23.3a24.047,24.047,0,0,1-3.82,3.86C46.74,67.96,23.43,89.2,17.93,94.75a10.171,10.171,0,0,0,0,14.29,9.941,9.941,0,0,0,14.16,0c5.49-5.54,26.45-28.97,41.66-47.83a23.949,23.949,0,0,1,4.88-4.66c9.43-6.56,18.92-2.85,29.93-13.96,6.08-6.14,4.71-14.88,2.91-20.43a2,2,0,0,0-3.82.06l-2.54,8.43a4.014,4.014,0,0,1-3.53,2.86l-5.43.42a4.013,4.013,0,0,1-1.99-.36L90.14,31.7Z"/><path class="cls-5" d="M21,101.98A3.952,3.952,0,0,1,24.98,98,4.046,4.046,0,0,1,29,102.02,3.952,3.952,0,0,1,25.02,106,4.046,4.046,0,0,1,21,101.98Z"/><path class="cls-5" d="M79.35,26.67a15.038,15.038,0,0,1,3.72-6.24A14.881,14.881,0,0,1,94.4,16.02a2,2,0,0,1,1.66,2.86L90.14,31.7"/><path class="cls-5" d="M80.33,40.32l1.76-3.64a1.987,1.987,0,0,1,2.67-.93l7.21,3.55a2.032,2.032,0,0,1,.92,2.7l-1.76,3.63a1.979,1.979,0,0,1-2.67.93l-7.21-3.54A2.035,2.035,0,0,1,80.33,40.32Z"/><line class="cls-5" x1="86.72" y1="36.71" x2="83.3" y2="44.03"/><line class="cls-5" x1="90.31" y1="38.48" x2="86.9" y2="45.79"/></g><g class="cls-6"><path d="M30.172,91.172,58.879,63.879a3,3,0,0,1,4.243,4.243L35.828,96.828a4,4,0,0,1-5.8-5.514C30.072,91.269,30.127,91.215,30.172,91.172Z"/></g></svg>
|
After Width: | Height: | Size: 4.3 KiB |
35
config/olivetin/config.yaml
Normal file
@ -0,0 +1,35 @@
|
|||||||
|
showNavigation: false
|
||||||
|
logLevel: "INFO"
|
||||||
|
showNewVersions: false
|
||||||
|
showFooter: false
|
||||||
|
|
||||||
|
actions:
|
||||||
|
- title: "Start Navigation Stack"
|
||||||
|
shell: docker start ros2_rmp-navigation-1
|
||||||
|
icon: '<img src = "customIcons/nav2_start.png" width = "48px"/>'
|
||||||
|
- title: "Stop Navigation Stack"
|
||||||
|
shell: docker stop ros2_rmp-navigation-1
|
||||||
|
icon: '<img src = "customIcons/nav2_stop.png" width = "48px"/>'
|
||||||
|
- title: "Start Mapping"
|
||||||
|
shell: docker start ros2_rmp-mapping-1
|
||||||
|
icon: '<img src = "customIcons/mapping_start.gif" width = "48px"/>'
|
||||||
|
- title: "Stop Mapping"
|
||||||
|
shell: docker stop ros2_rmp-mapping-1
|
||||||
|
icon: '<img src = "customIcons/mapping_stop.gif" width = "48px"/>'
|
||||||
|
- title: "Restart Teleop"
|
||||||
|
icon: '<img src = "customIcons/gamepad.png" width = "48px"/>'
|
||||||
|
shell: docker restart ros2_rmp-teleop-1
|
||||||
|
- title: Restart or Shutdown System
|
||||||
|
icon: restart
|
||||||
|
shell: systemctl {{ choice }}
|
||||||
|
arguments:
|
||||||
|
- name: choice
|
||||||
|
title: Pick one
|
||||||
|
choices:
|
||||||
|
- value: reboot
|
||||||
|
- value: shutdown
|
||||||
|
# This will SSH into a server an run the command 'service httpd restart'
|
||||||
|
# - title: Restart httpd on Server 1
|
||||||
|
# shell: ssh bjorn@loki.local 'echo "it works"'
|
||||||
|
# icon: ping
|
||||||
|
# timeout: 5
|
BIN
config/olivetin/icons/gamepad.png
Normal file
After Width: | Height: | Size: 23 KiB |
Before Width: | Height: | Size: 14 MiB After Width: | Height: | Size: 13 MiB |
BIN
config/olivetin/icons/mapping_stop.gif
Normal file
After Width: | Height: | Size: 137 KiB |
BIN
config/olivetin/icons/nav2_start.png
Normal file
After Width: | Height: | Size: 34 KiB |
BIN
config/olivetin/icons/nav2_stop.gif
Normal file
After Width: | Height: | Size: 10 KiB |
BIN
config/olivetin/icons/nav2_stop.png
Normal file
After Width: | Height: | Size: 31 KiB |
BIN
config/olivetin/icons/qr-code.png
Normal file
After Width: | Height: | Size: 78 KiB |
1
config/olivetin/installation-id.txt
Normal file
@ -0,0 +1 @@
|
|||||||
|
ba1fa920-2863-4600-994f-23559acfcab2
|
@ -1,28 +1,5 @@
|
|||||||
version: "3.9"
|
version: "3.9"
|
||||||
|
|
||||||
# First network configuration. Change this to the network interface you want to use primarily. (Better configuration for multiple Network interfaces needed).
|
|
||||||
networks:
|
|
||||||
# rmp:
|
|
||||||
# driver: macvlan
|
|
||||||
# driver_opts:
|
|
||||||
# parent: eno1 # robot network interface
|
|
||||||
# ipam:
|
|
||||||
# config:
|
|
||||||
# - subnet: 192.168.0.0/24
|
|
||||||
# gateway: 192.168.0.1
|
|
||||||
# ip_range: 192.168.0.200/25
|
|
||||||
# aux_addresses:
|
|
||||||
# net-address: 192.168.0.100 #? what is this for --> to exclude addresses from buing used.
|
|
||||||
# make new bridge network for ros
|
|
||||||
rmp:
|
|
||||||
driver: bridge
|
|
||||||
# ipam:
|
|
||||||
# config:
|
|
||||||
# - subnet:
|
|
||||||
|
|
||||||
# add this mountpoint to all services: - ./customize/entrypoint.sh:/entrypoint.sh
|
|
||||||
# Attention: child services will inherit settings from their parents. So if you set a network_mode: host in the base service, all child services will also use host networking. This is not always what you want. So be careful with this.
|
|
||||||
|
|
||||||
services:
|
services:
|
||||||
# Base image containing dependencies.
|
# Base image containing dependencies.
|
||||||
base:
|
base:
|
||||||
@ -62,10 +39,6 @@ services:
|
|||||||
- ./config/entrypoint.sh:/entrypoint.sh
|
- ./config/entrypoint.sh:/entrypoint.sh
|
||||||
- ./config/cyclonedds.xml:/cyclonedds.xml
|
- ./config/cyclonedds.xml:/cyclonedds.xml
|
||||||
|
|
||||||
# networks: # not using bridging anymore, instead try using all services on macvlan? let's see... shoudl word for now. Bridging does definitely not work because multicast is not supported here.
|
|
||||||
# rmp:
|
|
||||||
# #ipv4_address: 192.168.0.101 #actually don't need to set ips. they are set automatically by docker-compose. SHould be inherited by all child services.
|
|
||||||
|
|
||||||
# Overlay image containing the project specific source code.
|
# Overlay image containing the project specific source code.
|
||||||
overlay:
|
overlay:
|
||||||
extends: base
|
extends: base
|
||||||
@ -95,10 +68,6 @@ services:
|
|||||||
tags:
|
tags:
|
||||||
- ghcr.io/bjoernellens1/ros2_rmp/rmp:guis
|
- ghcr.io/bjoernellens1/ros2_rmp/rmp:guis
|
||||||
target: guis
|
target: guis
|
||||||
x-bake:
|
|
||||||
platforms:
|
|
||||||
- linux/arm64
|
|
||||||
- linux/amd64
|
|
||||||
command: >
|
command: >
|
||||||
/bin/bash
|
/bin/bash
|
||||||
devices:
|
devices:
|
||||||
@ -141,8 +110,8 @@ services:
|
|||||||
ros2 launch cps_rmp220_support robot_lidar.launch.py serial_port:=/dev/rplidarA1
|
ros2 launch cps_rmp220_support robot_lidar.launch.py serial_port:=/dev/rplidarA1
|
||||||
devices:
|
devices:
|
||||||
- /dev/rplidarA1:/dev/rplidarA1 #udevrules needed for this to work:
|
- /dev/rplidarA1:/dev/rplidarA1 #udevrules needed for this to work:
|
||||||
# SUBSYSTEM=="tty", ATTRS{serial}=="0001", SYMLINK+="segway"
|
# SUBSYSTEM=="tty", ATTRS{serial}=="0001", SYMLINK+="segway"
|
||||||
# SUBSYSTEM=="tty", ATTRS{serial}=="3453995662b3af4f81f4a69eba5f3f29", SYMLINK+="rplidarA1"
|
# SUBSYSTEM=="tty", ATTRS{serial}=="3453995662b3af4f81f4a69eba5f3f29", SYMLINK+="rplidarA1"
|
||||||
|
|
||||||
# Lidar filtering node.
|
# Lidar filtering node.
|
||||||
lidar_filter:
|
lidar_filter:
|
||||||
@ -214,20 +183,7 @@ services:
|
|||||||
image: ghcr.io/bjoernellens1/ros2_rmp/rmp:guis
|
image: ghcr.io/bjoernellens1/ros2_rmp/rmp:guis
|
||||||
command: >
|
command: >
|
||||||
ros2 launch cps_rmp220_support rviz.launch.py
|
ros2 launch cps_rmp220_support rviz.launch.py
|
||||||
# Needed to display graphical applications
|
|
||||||
privileged: true # really necessary?
|
|
||||||
environment:
|
|
||||||
# Allows graphical programs in the container.
|
|
||||||
- DISPLAY=${DISPLAY}
|
|
||||||
- QT_X11_NO_MITSHM=1
|
|
||||||
- NVIDIA_DRIVER_CAPABILITIES=all
|
|
||||||
- ROS_DOMAIN_ID=5
|
|
||||||
- RMW_IMPLEMENTATION=rmw_cyclonedds_cpp
|
|
||||||
volumes:
|
|
||||||
# Allows graphical programs in the container.
|
|
||||||
- /tmp/.X11-unix:/tmp/.X11-unix:rw
|
|
||||||
- ${XAUTHORITY:-$HOME/.Xauthority}:/root/.Xauthority
|
|
||||||
|
|
||||||
# Foxglove Studio Bridge
|
# Foxglove Studio Bridge
|
||||||
foxglove_bridge:
|
foxglove_bridge:
|
||||||
extends: overlay
|
extends: overlay
|
||||||
@ -240,22 +196,14 @@ services:
|
|||||||
stdin_open: true
|
stdin_open: true
|
||||||
tty: true
|
tty: true
|
||||||
# Networking
|
# Networking
|
||||||
network_mode: bridge
|
networks:
|
||||||
|
- caddy_network
|
||||||
ports:
|
ports:
|
||||||
- 8080:8080
|
- 8080:8080
|
||||||
depends_on:
|
depends_on:
|
||||||
- foxglove_bridge
|
- foxglove_bridge
|
||||||
volumes:
|
volumes:
|
||||||
- ./foxglove/default.json:/foxglove/default-layout.json
|
- ./config/foxglove/default.json:/foxglove/default-layout.json
|
||||||
|
|
||||||
# USB Camera Stream
|
|
||||||
cam:
|
|
||||||
extends: overlay
|
|
||||||
command: >
|
|
||||||
ros2 run ros2_cam_openCV cam_node
|
|
||||||
devices:
|
|
||||||
- /dev/video0:/dev/video0
|
|
||||||
|
|
||||||
|
|
||||||
# ROS2 Frontier exploration
|
# ROS2 Frontier exploration
|
||||||
explorer:
|
explorer:
|
||||||
@ -272,41 +220,41 @@ services:
|
|||||||
|
|
||||||
### Images for ROS1 Interactions
|
### Images for ROS1 Interactions
|
||||||
#ROS1 Bridge
|
#ROS1 Bridge
|
||||||
ros1bridge:
|
# ros1bridge:
|
||||||
image: ghcr.io/bjoernellens1/ros2_rmp/ros1bridge
|
# image: ghcr.io/bjoernellens1/ros2_rmp/ros1bridge
|
||||||
command: >
|
# command: >
|
||||||
ros2 run ros1_bridge dynamic_bridge --bridge-all-2to1-topics
|
# ros2 run ros1_bridge dynamic_bridge --bridge-all-2to1-topics
|
||||||
build:
|
# build:
|
||||||
context: .
|
# context: .
|
||||||
dockerfile: docker/Dockerfile
|
# dockerfile: docker/Dockerfile
|
||||||
tags:
|
# tags:
|
||||||
- ghcr.io/bjoernellens1/ros2_rmp/ros1bridge
|
# - ghcr.io/bjoernellens1/ros2_rmp/ros1bridge
|
||||||
args:
|
# args:
|
||||||
ROS_DISTRO: humble
|
# ROS_DISTRO: humble
|
||||||
target: bridge
|
# target: bridge
|
||||||
x-bake:
|
# x-bake:
|
||||||
platforms:
|
# platforms:
|
||||||
#- linux/arm64
|
# #- linux/arm64
|
||||||
- linux/amd64
|
# - linux/amd64
|
||||||
# Networking and IPC for ROS 2
|
# # Networking and IPC for ROS 2
|
||||||
network_mode: host
|
# network_mode: host
|
||||||
ipc: host
|
# ipc: host
|
||||||
environment:
|
# environment:
|
||||||
- ROS_DOMAIN_ID=5
|
# - ROS_DOMAIN_ID=5
|
||||||
- RMW_IMPLEMENTATION=rmw_cyclonedds_cpp
|
# - RMW_IMPLEMENTATION=rmw_cyclonedds_cpp
|
||||||
- ROS_MASTER_URI=http://localhost:11311 # is configured to run roscore on the robot but could change to local ros1 machine here
|
# - ROS_MASTER_URI=http://localhost:11311 # is configured to run roscore on the robot but could change to local ros1 machine here
|
||||||
|
|
||||||
#ROS1 roscore
|
#ROS1 roscore
|
||||||
roscore:
|
# roscore:
|
||||||
command: >
|
# command: >
|
||||||
roscore
|
# roscore
|
||||||
extends: ros1bridge
|
# extends: ros1bridge
|
||||||
network_mode: host
|
# network_mode: host
|
||||||
ipc: host
|
# ipc: host
|
||||||
environment:
|
# environment:
|
||||||
- ROS_DOMAIN_ID=5
|
# - ROS_DOMAIN_ID=5
|
||||||
- RMW_IMPLEMENTATION=rmw_cyclonedds_cpp
|
# - RMW_IMPLEMENTATION=rmw_cyclonedds_cpp
|
||||||
- ROS_MASTER_URI=http://localhost:11311 # is configured to run roscore on the robot but could change to local ros1 machine here
|
# - ROS_MASTER_URI=http://localhost:11311 # is configured to run roscore on the robot but could change to local ros1 machine here
|
||||||
|
|
||||||
## Configure on ROS1 Hosts
|
## Configure on ROS1 Hosts
|
||||||
# seggy 192.168.0.100
|
# seggy 192.168.0.100
|
||||||
@ -338,7 +286,7 @@ services:
|
|||||||
ros2 launch depthai_examples stereo.launch.py
|
ros2 launch depthai_examples stereo.launch.py
|
||||||
#devices:
|
#devices:
|
||||||
#- /dev/oakd-lite:/dev/oakd-lite # need corresponding udevrules for this to work:
|
#- /dev/oakd-lite:/dev/oakd-lite # need corresponding udevrules for this to work:
|
||||||
# SUBSYSTEM=="usb", ATTRS{idVendor}=="03e7", MODE="0666", SYMLINK+="oakd-lite"
|
# SUBSYSTEM=="usb", ATTRS{idVendor}=="03e7", MODE="0666", SYMLINK+="oakd-lite"
|
||||||
#- /dev/:/dev/
|
#- /dev/:/dev/
|
||||||
device_cgroup_rules:
|
device_cgroup_rules:
|
||||||
- 'c 189:* rmw'
|
- 'c 189:* rmw'
|
||||||
@ -360,25 +308,108 @@ services:
|
|||||||
- DISPLAY=${DISPLAY}
|
- DISPLAY=${DISPLAY}
|
||||||
- QT_X11_NO_MITSHM=1
|
- QT_X11_NO_MITSHM=1
|
||||||
- NVIDIA_DRIVER_CAPABILITIES=all
|
- NVIDIA_DRIVER_CAPABILITIES=all
|
||||||
|
|
||||||
zerotier:
|
################################################################################################################################
|
||||||
image: "zyclonite/zerotier:router"
|
# Core Services for Web Management #
|
||||||
container_name: zerotier-one
|
################################################################################################################################
|
||||||
devices:
|
caddy:
|
||||||
- /dev/net/tun
|
image: caddy:latest
|
||||||
network_mode: host
|
networks:
|
||||||
|
- caddy_network
|
||||||
|
extra_hosts:
|
||||||
|
- "host.docker.internal:host-gateway"
|
||||||
|
ports:
|
||||||
|
- "80:80"
|
||||||
|
- "443:443"
|
||||||
volumes:
|
volumes:
|
||||||
- '/var/lib/zerotier-one:/var/lib/zerotier-one'
|
- ./config/caddy/Caddyfile:/etc/caddy/Caddyfile
|
||||||
cap_add:
|
- ./config/caddy/content:/usr/share/caddy/
|
||||||
- NET_ADMIN
|
restart: always
|
||||||
- SYS_ADMIN
|
depends_on:
|
||||||
- NET_RAW
|
- foxglove
|
||||||
restart: unless-stopped
|
- olivetin
|
||||||
|
# roscore:
|
||||||
|
# image: husarion/ros1-bridge:foxy-0.9.6-20230327-stable
|
||||||
|
# command: |
|
||||||
|
# bash -c "source /opt/ros/noetic/setup.bash && roscore"
|
||||||
|
# network_mode: host
|
||||||
|
# environment:
|
||||||
|
# - ROS_DOMAIN_ID=5
|
||||||
|
# restart: always
|
||||||
|
|
||||||
|
# Webui Stuff
|
||||||
|
# need to properly setup ros1bridge initialization
|
||||||
|
ros1bridge:
|
||||||
|
image: husarion/ros1-bridge:foxy-0.9.6-20230327-stable
|
||||||
|
command: |
|
||||||
|
sh /opt/ros/noetic/setup.sh && ros2 run ros1_bridge dynamic_bridge
|
||||||
|
network_mode: host
|
||||||
|
ipc: host
|
||||||
environment:
|
environment:
|
||||||
- TZ=Europe/Amsterdam
|
- ROS_DOMAIN_ID=5
|
||||||
- PUID=1000
|
- RMW_IMPLEMENTATION=rmw_cyclonedds_cpp
|
||||||
- PGID=1000
|
restart: always
|
||||||
- ZEROTIER_ONE_LOCAL_PHYS=enp5s0 wlx00e04c5513fc # change for actual interfaces
|
webui-joystick:
|
||||||
- ZEROTIER_ONE_USE_IPTABLES_NFT=false
|
image: husarion/webui-ros-joystick:noetic-0.0.1-20230510-stable
|
||||||
- ZEROTIER_ONE_GATEWAY_MODE=inbound # might change to both ways
|
network_mode: host
|
||||||
#- ZEROTIER_ONE_NETWORK_IDS= # does not really do much?
|
ipc: host
|
||||||
|
environment:
|
||||||
|
- ROS_DOMAIN_ID=5
|
||||||
|
restart: always
|
||||||
|
depends_on:
|
||||||
|
- ros1bridge
|
||||||
|
command: roslaunch webui-ros-joystick webui.launch
|
||||||
|
olivetin:
|
||||||
|
container_name: olivetin
|
||||||
|
image: jamesread/olivetin
|
||||||
|
#image: ghcr.io/bjoernellens1/cps_bot_mini_ws/olivetin
|
||||||
|
build:
|
||||||
|
context: .
|
||||||
|
dockerfile: docker/Dockerfile
|
||||||
|
tags:
|
||||||
|
- ghcr.io/bjoernellens1/cps_bot_mini_ws/olivetin
|
||||||
|
target: olivetin
|
||||||
|
x-bake:
|
||||||
|
platforms:
|
||||||
|
#- linux/arm64
|
||||||
|
- linux/amd64
|
||||||
|
user: root
|
||||||
|
privileged: true
|
||||||
|
volumes:
|
||||||
|
- ./config/olivetin/:/config/ # here is config.yaml and icons located
|
||||||
|
- ./config/olivetin/icons:/var/www/olivetin/customIcons
|
||||||
|
- .:/repo
|
||||||
|
- /var/run/docker.sock:/var/run/docker.sock
|
||||||
|
|
||||||
|
# - /var/lib/docker:/var/lib/docker
|
||||||
|
- ~/.ssh/id_rsa:/root/.ssh/id_rsa
|
||||||
|
networks:
|
||||||
|
- caddy_network
|
||||||
|
ports:
|
||||||
|
- "1337:1337"
|
||||||
|
restart: always
|
||||||
|
|
||||||
|
# Webcam stream with ffmpeg x264 compression
|
||||||
|
# need to add ros-humble-v4l2-camera
|
||||||
|
webcam:
|
||||||
|
#extends: overlay
|
||||||
|
build: https://github.com/bjoernellens1/image-transport-docker/raw/main/demo/webcam/Dockerfile.webcam
|
||||||
|
image: husarion/image-transport:humble-4.2.0
|
||||||
|
devices:
|
||||||
|
- /dev/video1:/dev/video0
|
||||||
|
- /dev/dri:/dev/dri
|
||||||
|
volumes:
|
||||||
|
- ./:/repo
|
||||||
|
command: >
|
||||||
|
ros2 launch /repo/webcam.launch.py
|
||||||
|
ffmpeg_encoding:=libx264
|
||||||
|
ffmpeg_preset:=ultrafast
|
||||||
|
ffmpeg_tune:=zerolatency
|
||||||
|
|
||||||
|
|
||||||
|
################################################################################################################################
|
||||||
|
# Docker related extra stuff #
|
||||||
|
################################################################################################################################
|
||||||
|
networks:
|
||||||
|
caddy_network:
|
||||||
|
driver: bridge
|
@ -1,460 +0,0 @@
|
|||||||
version: "3.9"
|
|
||||||
|
|
||||||
# First network configuration. Change this to the network interface you want to use primarily. (Better configuration for multiple Network interfaces needed).
|
|
||||||
networks:
|
|
||||||
rmp:
|
|
||||||
driver: macvlan
|
|
||||||
driver_opts:
|
|
||||||
parent: eno1 # robot network interface
|
|
||||||
ipam:
|
|
||||||
config:
|
|
||||||
- subnet: 192.168.0.0/24
|
|
||||||
gateway: 192.168.0.1
|
|
||||||
ip_range: 192.168.0.200/25
|
|
||||||
aux_addresses:
|
|
||||||
net-address: 192.168.0.100 #? what is this for --> to exclude addresses from buing used.
|
|
||||||
|
|
||||||
services:
|
|
||||||
# Base image containing dependencies.
|
|
||||||
base:
|
|
||||||
image: ghcr.io/bjoernellens1/ros2_rmp/rmp:base
|
|
||||||
build:
|
|
||||||
context: .
|
|
||||||
dockerfile: docker/Dockerfile
|
|
||||||
tags:
|
|
||||||
- ghcr.io/bjoernellens1/ros2_rmp/rmp:base
|
|
||||||
args:
|
|
||||||
ROS_DISTRO: humble
|
|
||||||
target: base
|
|
||||||
x-bake:
|
|
||||||
platforms:
|
|
||||||
- linux/arm64
|
|
||||||
- linux/amd64
|
|
||||||
|
|
||||||
# Interactive shell
|
|
||||||
stdin_open: true
|
|
||||||
tty: true
|
|
||||||
# Networking and IPC for ROS 2
|
|
||||||
#network_mode: host
|
|
||||||
ipc: host
|
|
||||||
# Needed to display graphical applications
|
|
||||||
#privileged: true
|
|
||||||
environment:
|
|
||||||
# Allows graphical programs in the container.
|
|
||||||
- DISPLAY=${DISPLAY}
|
|
||||||
- QT_X11_NO_MITSHM=1
|
|
||||||
- NVIDIA_DRIVER_CAPABILITIES=all
|
|
||||||
volumes:
|
|
||||||
# Allows graphical programs in the container.
|
|
||||||
- /tmp/.X11-unix:/tmp/.X11-unix:rw
|
|
||||||
- ${XAUTHORITY:-$HOME/.Xauthority}:/root/.Xauthority
|
|
||||||
|
|
||||||
networks: # not using bridging anymore, instead try using all services on macvlan? let's see... shoudl word for now. Bridging does definitely not work because multicast is not supported here.
|
|
||||||
rmp:
|
|
||||||
#ipv4_address: 192.168.0.101 #actually don't need to set ips. they are set automatically by docker-compose. SHould be inherited by all child services.
|
|
||||||
|
|
||||||
# Overlay image containing the project specific source code.
|
|
||||||
overlay:
|
|
||||||
extends: base
|
|
||||||
image: ghcr.io/bjoernellens1/ros2_rmp/rmp:overlay
|
|
||||||
build:
|
|
||||||
context: .
|
|
||||||
dockerfile: docker/Dockerfile
|
|
||||||
tags:
|
|
||||||
- ghcr.io/bjoernellens1/ros2_rmp/rmp:overlay
|
|
||||||
target: overlay
|
|
||||||
x-bake:
|
|
||||||
platforms:
|
|
||||||
- linux/arm64
|
|
||||||
- linux/amd64
|
|
||||||
volumes:
|
|
||||||
- .:/repo
|
|
||||||
command: >
|
|
||||||
/bin/bash
|
|
||||||
|
|
||||||
# Additional dependencies for GUI applications
|
|
||||||
guis:
|
|
||||||
extends: overlay
|
|
||||||
image: ghcr.io/bjoernellens1/ros2_rmp/rmp:guis
|
|
||||||
build:
|
|
||||||
context: .
|
|
||||||
dockerfile: docker/Dockerfile
|
|
||||||
tags:
|
|
||||||
- ghcr.io/bjoernellens1/ros2_rmp/rmp:guis
|
|
||||||
target: guis
|
|
||||||
x-bake:
|
|
||||||
platforms:
|
|
||||||
- linux/arm64
|
|
||||||
- linux/amd64
|
|
||||||
#entrypoint: /bin/bash
|
|
||||||
command: >
|
|
||||||
/bin/bash
|
|
||||||
|
|
||||||
# Robot State Publisher
|
|
||||||
rsp:
|
|
||||||
extends: overlay
|
|
||||||
command: >
|
|
||||||
ros2 launch cps_rmp220_support rsp.launch.py
|
|
||||||
stdin_open: true
|
|
||||||
tty: true
|
|
||||||
# Networking and IPC for ROS 2
|
|
||||||
#network_mode: host
|
|
||||||
ipc: host
|
|
||||||
environment:
|
|
||||||
- ROS_DOMAIN_ID=5
|
|
||||||
- RMW_IMPLEMENTATION=rmw_cyclonedds_cpp
|
|
||||||
|
|
||||||
# Controller
|
|
||||||
controller:
|
|
||||||
extends: base
|
|
||||||
command: >
|
|
||||||
ros2 run segwayrmp SmartCar --ros-args -r cmd_vel:=cmd_vel_out -p serial_full_name:=/dev/segway
|
|
||||||
devices:
|
|
||||||
- /dev/segway:/dev/segway
|
|
||||||
- /dev/ttyUSB0:/dev/ttyUSB0
|
|
||||||
# Interactive shell
|
|
||||||
stdin_open: true
|
|
||||||
tty: true
|
|
||||||
# Networking and IPC for ROS 2
|
|
||||||
#network_mode: host
|
|
||||||
ipc: host
|
|
||||||
# Needed to display graphical applications
|
|
||||||
privileged: false
|
|
||||||
# depends_on:
|
|
||||||
# - robot_state_publisher
|
|
||||||
environment:
|
|
||||||
- ROS_DOMAIN_ID=5
|
|
||||||
- RMW_IMPLEMENTATION=rmw_cyclonedds_cpp
|
|
||||||
|
|
||||||
# teleop
|
|
||||||
teleop:
|
|
||||||
extends: base
|
|
||||||
depends_on:
|
|
||||||
- controller
|
|
||||||
command: >
|
|
||||||
ros2 launch rmp220_teleop robot_joystick.launch.py
|
|
||||||
devices:
|
|
||||||
- /dev/input/js0:/dev/input/js0
|
|
||||||
# Interactive shell
|
|
||||||
stdin_open: true
|
|
||||||
tty: true
|
|
||||||
# Networking and IPC for ROS 2
|
|
||||||
#network_mode: host
|
|
||||||
ipc: host
|
|
||||||
# Needed to display graphical applications
|
|
||||||
privileged: true
|
|
||||||
environment:
|
|
||||||
- ROS_DOMAIN_ID=5
|
|
||||||
- RMW_IMPLEMENTATION=rmw_cyclonedds_cpp
|
|
||||||
|
|
||||||
# lidar
|
|
||||||
lidar:
|
|
||||||
extends: overlay
|
|
||||||
command: >
|
|
||||||
ros2 launch cps_rmp220_support robot_lidar.launch.py serial_port:=/dev/rplidarA1
|
|
||||||
stdin_open: true
|
|
||||||
tty: true
|
|
||||||
# Networking and IPC for ROS 2
|
|
||||||
#network_mode: host
|
|
||||||
ipc: host
|
|
||||||
# depends_on:
|
|
||||||
# - robot_state_publisher
|
|
||||||
environment:
|
|
||||||
- ROS_DOMAIN_ID=5
|
|
||||||
- RMW_IMPLEMENTATION=rmw_cyclonedds_cpp
|
|
||||||
devices:
|
|
||||||
- /dev/rplidarA1:/dev/rplidarA1 #udevrules needed for this to work:
|
|
||||||
# SUBSYSTEM=="tty", ATTRS{serial}=="0001", SYMLINK+="segway"
|
|
||||||
# SUBSYSTEM=="tty", ATTRS{serial}=="3453995662b3af4f81f4a69eba5f3f29", SYMLINK+="rplidarA1"
|
|
||||||
|
|
||||||
|
|
||||||
# localiaztion by ekf node
|
|
||||||
ekf:
|
|
||||||
extends: overlay
|
|
||||||
depends_on:
|
|
||||||
- controller
|
|
||||||
- rsp
|
|
||||||
command: >
|
|
||||||
ros2 launch cps_rmp220_support robot_localization.launch.py
|
|
||||||
# Interactive shell
|
|
||||||
stdin_open: true
|
|
||||||
tty: true
|
|
||||||
# Networking and IPC for ROS 2
|
|
||||||
#network_mode: host
|
|
||||||
ipc: host
|
|
||||||
environment:
|
|
||||||
- ROS_DOMAIN_ID=5
|
|
||||||
- RMW_IMPLEMENTATION=rmw_cyclonedds_cpp
|
|
||||||
|
|
||||||
# mapping
|
|
||||||
mapping:
|
|
||||||
extends: overlay
|
|
||||||
depends_on:
|
|
||||||
- ekf
|
|
||||||
- rsp
|
|
||||||
- lidar
|
|
||||||
command: >
|
|
||||||
ros2 launch cps_rmp220_support robot_mapping.launch.py
|
|
||||||
# Interactive shell
|
|
||||||
stdin_open: true
|
|
||||||
tty: true
|
|
||||||
# Networking and IPC for ROS 2
|
|
||||||
#network_mode: host
|
|
||||||
ipc: host
|
|
||||||
environment:
|
|
||||||
- ROS_DOMAIN_ID=5
|
|
||||||
- RMW_IMPLEMENTATION=rmw_cyclonedds_cpp
|
|
||||||
|
|
||||||
# slam-toolbox-localization
|
|
||||||
localization:
|
|
||||||
extends: overlay
|
|
||||||
depends_on:
|
|
||||||
- ekf
|
|
||||||
- rsp
|
|
||||||
- lidar
|
|
||||||
command: >
|
|
||||||
ros2 launch cps_rmp220_support robot_mapping_localization.launch.py map_file_name:=/repo/maps/map.yaml
|
|
||||||
# Interactive shell
|
|
||||||
stdin_open: true
|
|
||||||
tty: true
|
|
||||||
# Networking and IPC for ROS 2
|
|
||||||
#network_mode: host
|
|
||||||
ipc: host
|
|
||||||
environment:
|
|
||||||
- ROS_DOMAIN_ID=5
|
|
||||||
- RMW_IMPLEMENTATION=rmw_cyclonedds_cpp
|
|
||||||
|
|
||||||
# amcl_localization
|
|
||||||
amcl:
|
|
||||||
extends: overlay
|
|
||||||
depends_on:
|
|
||||||
- ekf
|
|
||||||
- rsp
|
|
||||||
- lidar
|
|
||||||
command: >
|
|
||||||
ros2 launch cps_rmp220_support robot_amcl.launch.py map:=/repo/maps/map.yaml
|
|
||||||
# Interactive shell
|
|
||||||
stdin_open: true
|
|
||||||
tty: true
|
|
||||||
# Networking and IPC for ROS 2
|
|
||||||
#network_mode: host
|
|
||||||
ipc: host
|
|
||||||
environment:
|
|
||||||
- ROS_DOMAIN_ID=5
|
|
||||||
- RMW_IMPLEMENTATION=rmw_cyclonedds_cpp
|
|
||||||
|
|
||||||
# navigation
|
|
||||||
navigation:
|
|
||||||
extends: overlay
|
|
||||||
depends_on:
|
|
||||||
- controller
|
|
||||||
- teleop
|
|
||||||
- rsp
|
|
||||||
- lidar
|
|
||||||
- ekf
|
|
||||||
- oakd
|
|
||||||
# command: >
|
|
||||||
# ros2 launch cps_rmp220_support robot_navigation.launch.py
|
|
||||||
# map_subscribe_transient_local:=true
|
|
||||||
command: >
|
|
||||||
ros2 launch nav2_bringup bringup_launch.py slam:=True map:=/repo/maps/map_current.sav.yaml use_sim_time:=False use_composition:=True params_file:=/overlay_ws/src/cps_rmp220_support/config/nav2_params.yaml
|
|
||||||
stdin_open: true
|
|
||||||
tty: true
|
|
||||||
# Networking and IPC for ROS 2
|
|
||||||
#network_mode: host
|
|
||||||
ipc: host
|
|
||||||
environment:
|
|
||||||
- ROS_DOMAIN_ID=5
|
|
||||||
- RMW_IMPLEMENTATION=rmw_cyclonedds_cpp
|
|
||||||
|
|
||||||
# bash
|
|
||||||
bash:
|
|
||||||
extends: overlay
|
|
||||||
command: >
|
|
||||||
/bin/bash
|
|
||||||
stdin_open: true
|
|
||||||
tty: true
|
|
||||||
# Networking and IPC for ROS 2
|
|
||||||
#network_mode: host
|
|
||||||
ipc: host
|
|
||||||
environment:
|
|
||||||
- ROS_DOMAIN_ID=5
|
|
||||||
- RMW_IMPLEMENTATION=rmw_cyclonedds_cpp
|
|
||||||
|
|
||||||
# rviz2
|
|
||||||
rviz2:
|
|
||||||
#extends: guis
|
|
||||||
image: ghcr.io/bjoernellens1/ros2_rmp/rmp:guis
|
|
||||||
# command: >
|
|
||||||
# ros2 launch cps_rmp220_support robot_rviz2.launch.py
|
|
||||||
command: >
|
|
||||||
ros2 launch cps_rmp220_support rviz.launch.py
|
|
||||||
# Interactive shell
|
|
||||||
stdin_open: true
|
|
||||||
tty: true
|
|
||||||
# Networking and IPC for ROS 2
|
|
||||||
network_mode: host
|
|
||||||
ipc: host
|
|
||||||
# Needed to display graphical applications
|
|
||||||
privileged: true
|
|
||||||
environment:
|
|
||||||
# Allows graphical programs in the container.
|
|
||||||
- DISPLAY=${DISPLAY}
|
|
||||||
- QT_X11_NO_MITSHM=1
|
|
||||||
- NVIDIA_DRIVER_CAPABILITIES=all
|
|
||||||
- ROS_DOMAIN_ID=5
|
|
||||||
- RMW_IMPLEMENTATION=rmw_cyclonedds_cpp
|
|
||||||
volumes:
|
|
||||||
# Allows graphical programs in the container.
|
|
||||||
- /tmp/.X11-unix:/tmp/.X11-unix:rw
|
|
||||||
- ${XAUTHORITY:-$HOME/.Xauthority}:/root/.Xauthority
|
|
||||||
|
|
||||||
# Foxglove Studio Bridge
|
|
||||||
foxglove_bridge:
|
|
||||||
extends: overlay
|
|
||||||
command: >
|
|
||||||
ros2 launch foxglove_bridge foxglove_bridge_launch.xml port:=8765
|
|
||||||
stdin_open: true
|
|
||||||
tty: true
|
|
||||||
# Networking and IPC for ROS 2
|
|
||||||
#network_mode: host
|
|
||||||
ipc: host
|
|
||||||
environment:
|
|
||||||
- ROS_DOMAIN_ID=5
|
|
||||||
- RMW_IMPLEMENTATION=rmw_cyclonedds_cpp
|
|
||||||
networks: # not using bridging anymore, instead try using all services on macvlan? let's see... shoudl word for now. Bridging does definitely not work because multicast is not supported here.
|
|
||||||
rmp:
|
|
||||||
ipv4_address: 192.168.0.201 #actually don't need to set ips. they are set automatically by docker-compose. SHould be inherited by all child services.
|
|
||||||
|
|
||||||
|
|
||||||
# Foxglove Studio Webserver
|
|
||||||
foxglove_webserver:
|
|
||||||
image: ghcr.io/foxglove/studio:latest
|
|
||||||
stdin_open: true
|
|
||||||
tty: true
|
|
||||||
# Networking
|
|
||||||
network_mode: bridge
|
|
||||||
ports:
|
|
||||||
- 8080:8080
|
|
||||||
depends_on:
|
|
||||||
- foxglove_bridge
|
|
||||||
volumes:
|
|
||||||
- ./foxglove/default.json:/foxglove/default-layout.json
|
|
||||||
|
|
||||||
# USB Camera Stream
|
|
||||||
cam:
|
|
||||||
extends: overlay
|
|
||||||
command: >
|
|
||||||
ros2 run ros2_cam_openCV cam_node
|
|
||||||
stdin_open: true
|
|
||||||
tty: true
|
|
||||||
# Networking and IPC for ROS 2
|
|
||||||
#network_mode: host
|
|
||||||
ipc: host
|
|
||||||
environment:
|
|
||||||
- ROS_DOMAIN_ID=5
|
|
||||||
- RMW_IMPLEMENTATION=rmw_cyclonedds_cpp
|
|
||||||
devices:
|
|
||||||
- /dev/video0:/dev/video0
|
|
||||||
|
|
||||||
|
|
||||||
# ROS2 Frontier exploration
|
|
||||||
explorer:
|
|
||||||
extends: overlay
|
|
||||||
depends_on:
|
|
||||||
- controller
|
|
||||||
- teleop
|
|
||||||
- rsp
|
|
||||||
- lidar
|
|
||||||
- ekf
|
|
||||||
- navigation
|
|
||||||
command: >
|
|
||||||
ros2 launch cps_rmp220_support robot_exploration.launch.py
|
|
||||||
stdin_open: true
|
|
||||||
tty: true
|
|
||||||
# Networking and IPC for ROS 2
|
|
||||||
#network_mode: host
|
|
||||||
ipc: host
|
|
||||||
environment:
|
|
||||||
- ROS_DOMAIN_ID=5
|
|
||||||
- RMW_IMPLEMENTATION=rmw_cyclonedds_cpp
|
|
||||||
|
|
||||||
### Images for ROS1 Interactions
|
|
||||||
#ROS1 Bridge
|
|
||||||
ros1bridge:
|
|
||||||
image: ghcr.io/bjoernellens1/ros2_rmp/ros1bridge
|
|
||||||
command: >
|
|
||||||
ros2 run ros1_bridge dynamic_bridge --bridge-all-2to1-topics
|
|
||||||
build:
|
|
||||||
context: .
|
|
||||||
dockerfile: docker/Dockerfile
|
|
||||||
tags:
|
|
||||||
- ghcr.io/bjoernellens1/ros2_rmp/ros1bridge
|
|
||||||
args:
|
|
||||||
ROS_DISTRO: humble
|
|
||||||
target: bridge
|
|
||||||
x-bake:
|
|
||||||
platforms:
|
|
||||||
#- linux/arm64
|
|
||||||
- linux/amd64
|
|
||||||
# Networking and IPC for ROS 2
|
|
||||||
#network_mode: host
|
|
||||||
ipc: host
|
|
||||||
environment:
|
|
||||||
- ROS_DOMAIN_ID=5
|
|
||||||
- RMW_IMPLEMENTATION=rmw_cyclonedds_cpp
|
|
||||||
- ROS_MASTER_URI=http://localhost:11311 # is configured to run roscore on the robot but could change to local ros1 machine here
|
|
||||||
|
|
||||||
#ROS1 roscore
|
|
||||||
roscore:
|
|
||||||
command: >
|
|
||||||
roscore
|
|
||||||
extends: ros1bridge
|
|
||||||
#network_mode: host
|
|
||||||
ipc: host
|
|
||||||
environment:
|
|
||||||
- ROS_DOMAIN_ID=5
|
|
||||||
- RMW_IMPLEMENTATION=rmw_cyclonedds_cpp
|
|
||||||
- ROS_MASTER_URI=http://localhost:11311 # is configured to run roscore on the robot but could change to local ros1 machine here
|
|
||||||
|
|
||||||
|
|
||||||
# ROS2 oak-d-lite camera
|
|
||||||
oakd:
|
|
||||||
extends: overlay
|
|
||||||
command: >
|
|
||||||
ros2 launch depthai_examples stereo.launch.py
|
|
||||||
stdin_open: true
|
|
||||||
tty: true
|
|
||||||
# Networking and IPC for ROS 2
|
|
||||||
#network_mode: host
|
|
||||||
ipc: host
|
|
||||||
environment:
|
|
||||||
- ROS_DOMAIN_ID=5
|
|
||||||
- RMW_IMPLEMENTATION=rmw_cyclonedds_cpp
|
|
||||||
#privileged: true
|
|
||||||
#devices:
|
|
||||||
#- /dev/oakd-lite:/dev/oakd-lite # need corresponding udevrules for this to work:
|
|
||||||
# SUBSYSTEM=="usb", ATTRS{idVendor}=="03e7", MODE="0666", SYMLINK+="oakd-lite"
|
|
||||||
#- /dev/:/dev/
|
|
||||||
device_cgroup_rules:
|
|
||||||
- 'c 189:* rmw'
|
|
||||||
volumes:
|
|
||||||
- /dev/bus/usb:/dev/bus/usb
|
|
||||||
|
|
||||||
|
|
||||||
# for testing the oak-d-lite camera -> works now with cgroup rules
|
|
||||||
depthai:
|
|
||||||
image: luxonis/depthai:latest
|
|
||||||
command: >
|
|
||||||
python3 /depthai/depthai_demo.py
|
|
||||||
stdin_open: true
|
|
||||||
tty: true
|
|
||||||
device_cgroup_rules:
|
|
||||||
- 'c 189:* rmw'
|
|
||||||
volumes:
|
|
||||||
- /dev/bus/usb:/dev/bus/usb
|
|
||||||
environment:
|
|
||||||
- DISPLAY=${DISPLAY}
|
|
||||||
- QT_X11_NO_MITSHM=1
|
|
||||||
- NVIDIA_DRIVER_CAPABILITIES=all
|
|
||||||
|
|
BIN
docs/loki_overview.odg
Normal file
@ -1,62 +0,0 @@
|
|||||||
services:
|
|
||||||
### Husarnet VPN Container for remote access
|
|
||||||
husarnet:
|
|
||||||
image: husarnet/husarnet
|
|
||||||
restart: unless-stopped
|
|
||||||
volumes:
|
|
||||||
- /var/lib/husarnet # This will persist your Husarnet Client keys, thus IP of the container will be stable/the same between (re)boots
|
|
||||||
sysctls:
|
|
||||||
- net.ipv6.conf.all.disable_ipv6=0 # Husarnet is using IPv6 for the internal connections
|
|
||||||
cap_add:
|
|
||||||
- NET_ADMIN
|
|
||||||
devices:
|
|
||||||
- /dev/net/tun
|
|
||||||
env_file:
|
|
||||||
- ./husarnet/.env # create .env file in the same folder as Dockerfile and specify HOSTNAME and JOINCODE there
|
|
||||||
|
|
||||||
color_controller:
|
|
||||||
build:
|
|
||||||
dockerfile: husarnet/Dockerfile
|
|
||||||
volumes:
|
|
||||||
- ./husarnet/cyclonedds.xml:/cyclonedds.xml
|
|
||||||
command:
|
|
||||||
- bash
|
|
||||||
- -c
|
|
||||||
- |
|
|
||||||
export CYCLONEDDS_URI=file:///cyclonedds.xml
|
|
||||||
ros2 run my_demo_pkg color_controller
|
|
||||||
network_mode: service:husarnet
|
|
||||||
|
|
||||||
move_controller:
|
|
||||||
build:
|
|
||||||
dockerfile: husarnet/Dockerfile
|
|
||||||
volumes:
|
|
||||||
- ./husarnet/cyclonedds.xml:/cyclonedds.xml
|
|
||||||
command:
|
|
||||||
- bash
|
|
||||||
- -c
|
|
||||||
- |
|
|
||||||
export CYCLONEDDS_URI=file:///cyclonedds.xml
|
|
||||||
ros2 run my_demo_pkg move_controller
|
|
||||||
network_mode: service:husarnet
|
|
||||||
|
|
||||||
turtle_sim:
|
|
||||||
image: osrf/ros:galactic-desktop
|
|
||||||
privileged: true
|
|
||||||
environment:
|
|
||||||
# Allows graphical programs in the container.
|
|
||||||
- DISPLAY=${DISPLAY}
|
|
||||||
- QT_X11_NO_MITSHM=1
|
|
||||||
- NVIDIA_DRIVER_CAPABILITIES=all
|
|
||||||
volumes:
|
|
||||||
# Allows graphical programs in the container.
|
|
||||||
- /tmp/.X11-unix:/tmp/.X11-unix:rw
|
|
||||||
- ${XAUTHORITY:-$HOME/.Xauthority}:/root/.Xauthority
|
|
||||||
- ./husarnet/cyclonedds.xml:/cyclonedds.xml
|
|
||||||
command:
|
|
||||||
- bash
|
|
||||||
- -c
|
|
||||||
- |
|
|
||||||
export CYCLONEDDS_URI=file:///cyclonedds.xml
|
|
||||||
ros2 run turtlesim turtlesim_node
|
|
||||||
network_mode: service:husarnet # This is the most important line in this setup. This will put the Husarnet Client in the same network namespace as your app (in this example: turtle_sim)
|
|
27
init_repo.sh
@ -1,27 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
# Basic entrypoint for ROS / Colcon Docker containers
|
|
||||||
|
|
||||||
# Source ROS 2
|
|
||||||
source /opt/ros/${ROS_DISTRO}/setup.bash
|
|
||||||
echo "Sourced ROS 2 ${ROS_DISTRO}"
|
|
||||||
|
|
||||||
# Source the base workspace, if built
|
|
||||||
if [ -f ${UNDERLAY_WS}/install/setup.bash ]
|
|
||||||
then
|
|
||||||
source ${UNDERLAY_WS}/install/setup.bash
|
|
||||||
#export GAZEBO_MODEL_PATH=$GAZEBO_MODEL_PATH:$(ros2 pkg prefix turtlebot3_gazebo)/share/turtlebot3_gazebo/models
|
|
||||||
echo "Sourced Bot Mini base workspace"
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Source the overlay workspace, if built
|
|
||||||
if [ -f /overlay_ws/install/setup.bash ]
|
|
||||||
then
|
|
||||||
source /overlay_ws/install/setup.bash
|
|
||||||
#export GAZEBO_MODEL_PATH=$GAZEBO_MODEL_PATH:$(ros2 pkg prefix tb3_worlds)/share/tb3_worlds/models
|
|
||||||
echo "Sourced Bot Mini overlay workspace"
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Copy over files
|
|
||||||
cp -r /overlay_ws/src/* /repo/src/
|
|
||||||
|
|
||||||
wait
|
|
19
install.sh
@ -1,19 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
|
|
||||||
# Specify the name of your Python script
|
|
||||||
SCRIPT_NAME="robot_config.py"
|
|
||||||
|
|
||||||
# Check if the script exists in the current directory
|
|
||||||
if [ -f "$SCRIPT_NAME" ]; then
|
|
||||||
# Check if /usr/local/bin is writable
|
|
||||||
if [ -w "/usr/local/bin" ]; then
|
|
||||||
# Copy the script to /usr/local/bin
|
|
||||||
sudo cp "$SCRIPT_NAME" "/usr/local/bin"
|
|
||||||
sudo chmod +x "/usr/local/bin/$SCRIPT_NAME"
|
|
||||||
echo "Script '$SCRIPT_NAME' has been installed in /usr/local/bin."
|
|
||||||
else
|
|
||||||
echo "Error: /usr/local/bin is not writable. You may need to use 'sudo' to install the script."
|
|
||||||
fi
|
|
||||||
else
|
|
||||||
echo "Error: Script '$SCRIPT_NAME' not found in the current directory."
|
|
||||||
fi
|
|
52
key.pem
@ -1,52 +0,0 @@
|
|||||||
-----BEGIN PRIVATE KEY-----
|
|
||||||
MIIJQgIBADANBgkqhkiG9w0BAQEFAASCCSwwggkoAgEAAoICAQC7PXpOg/+h7QaU
|
|
||||||
cQuc7FdUxtDjKAOECglENb6HcA3TVA8YPyEoHIzlApR3VudRrjSMp4Q16sktWnC9
|
|
||||||
hb7CSwjDw4ShT5cotBq/n0uS6YzH3hj3a+F9g8R2MkZ8FJ6Z/gYAvDQaZ6LN6CUY
|
|
||||||
pACiYE3Z9XRZ6B7vtPpoTcZJp/OaBaRYohcvNh3QL5/MxSd/tO1ulpwbvUPVUCvJ
|
|
||||||
52rb+ytHpmes/3ZLJYHq8m32R0XGGJ5XTN2uaIuEpuPhAEefZl8HMF7fd4scQlzs
|
|
||||||
OVDt+RCvnw9WcXfmHSUhgLZh1mMZIh7WvXYcYK+MOUNffKDOeycwgg4Y93vy/OmJ
|
|
||||||
VSUiTUwupLgV4AyrJMW6WNntSMbb5h+n72An/e99sKJaa3Ak65m8J5e8LBQaW8kf
|
|
||||||
toVqf1QobQ4K4g4Fj7xmqRuApDyUI2+GTkcPzPj2lra71PNq7rwows4iEnTTSw9b
|
|
||||||
XtGtZOtArSLMt42bGVS80W2DrmkKkTvJSKeUpV8GM+torWG25kv8TQxnWyr1hX9V
|
|
||||||
uMVCeuFp3Vtn4O8tG5fYSF3yCxS3pQuFBbe+rsaZejS77FPVciQIRh01QajjFcqv
|
|
||||||
3bkyZxFVrqBHl2wC4ChDlw3/nPjCcm142idqQRG0+iYAL8AJOxuvdGOkbqHSM8de
|
|
||||||
1rlcL48rJ1X2uK6T8sAhEgXR0oZ8dQIDAQABAoICABwvlX1DRpSQEzj+SXK+aykS
|
|
||||||
YriHOfxC7IEtm/hUaGhjE4ChZDLfFWCWAlZyqRC1KijwQKlDJjSjFCybeQtTc0bQ
|
|
||||||
5GLKEeWpMwuchapgaPZfWx/HyCJ2Vvk5+T1Nd1CUGkA7FJbS+gGIDCmI6qWG3MFO
|
|
||||||
P00XcazA8B8Kcip9U2Dgr4w+HkJXoaZIvQP8u8TwLfvDRU2xsIfocScMJJxn02yO
|
|
||||||
QrYaoKqQQ13kT6ROt1SqOQ/IPOi3ySTXYJ9qxN1ccjqpT+bQ3oqK/OT8fc/M+fON
|
|
||||||
/KeVHijwQzonX40b0kAi0ESgMar07QgtSJSTtLtQc6ZMNaYRf0GlS9yGCjh/LVPo
|
|
||||||
IFCKjpSDfp2J9Q7RSFKdb8tghcTfQNAg/6zen1JnE5iUBiaQZfIj7+iD5hQfn9a2
|
|
||||||
I1Fs3m1or3n1Z+BUg7vkDPQCyRkVEBXkKsbpD3T2cnxY9sfF0+ClmdfBQyCcLG5p
|
|
||||||
mf6XAWQEiJrQ9iWuQYWpHDqaatan6G5ym8Wy7nJYdjJgJTszzduUSt176W8R7bGW
|
|
||||||
73y9de+kEODQsxehSpkTVEqsMEgpTAKi5u59RRhj4OT9Lbvk9Xs9OH23aUcVUu5H
|
|
||||||
urMIAKdsjlAUhLSPupDr4bJPRM9N4t2v709VeH170Z/9X5j7LbF++Wh2t+UXprmb
|
|
||||||
0nDk5fjfzJnjXJQgd+nRAoIBAQDpUc+3MuLadphfyM5b5xc9A/8TuwW5a2jcLi1h
|
|
||||||
6NlZa63qPbGvEk3kUw71ELrh8NorRqvn895CJUG4K+zVUTl9dgsXqla7GWZFHIXW
|
|
||||||
2641R4p8HQNwNFP7KIyvvv5l72A+wWf1jpZiXXYNinrHDtPgdVXEFMDhDLibu6AK
|
|
||||||
jsfdNOXDE+mmxMTSwwgJ9blZkdp1pBEWYCZsqW/yED6pLdTh8ZRPGHOb24x6HksZ
|
|
||||||
Z/Gc4SIOrj5jrt3/M9oEymP+fQnF/StlnVsRnai6hBQX9khlS3pjneLOCLJfhpt/
|
|
||||||
qcIDL03KsIhf0miIkOpNTATL4SGsWDBAQp17eN4UToacARRpAoIBAQDNcPlDVBqt
|
|
||||||
K+fy9BBR9HBzBQlx6XkrmZ9Cgje/FrpMT+2UZ5wqMMPyB7SdoXkxx0CpB3ajOost
|
|
||||||
i92fk7Y03xHXS3COGLKhWqDNhH1Uotlp3wpeOWx3DlAFRcIvy86iDzTa/hGaq8Kp
|
|
||||||
2HPw0YqcxQjwYQzILBfZx3DRuQ8bt3Wiqxer/K+NRDnass/ZUTqz6nZcadMj6NiS
|
|
||||||
Zlwm7ErjhjdYRc6amTZMtxOenxP8cAtNW+RBZ7JbUEhAhE8zU42wZI+DxhvM0mTg
|
|
||||||
/CrRaYVE6YyAnaYo0RuJCRldz6obbgABn0q8qoY1Rmxjm+Do27hsrQgAB9Z/gmAp
|
|
||||||
hdU2+S270fYtAoIBAQCuEYlEhkRU9HHN1ESQsCHYNakSEU+9+/JpglH9X/j4C6ve
|
|
||||||
vFRZ5vARzh20m9yxQD2kV79c98Xz11PmkW7J3yVjArRX3Y+DWvm/yf3YRGD+AvfA
|
|
||||||
jOzJw2B8Ws5LN9UYO7S0XRqwSsbLcCrpA02CQP+10BRCi7EytYjtNte5yLg3woVA
|
|
||||||
OxTwhJDLJRJUS+0SdAxmBBdzeBxyqR6Jm7EECttuDgu1zupBd1SgrwUcWT4a6qO8
|
|
||||||
DCcju4yIHykitdRQQv0Np0m/L9yHkfYV4QAUuHtehycyNtLFIBvjxMsyPXYvZhVF
|
|
||||||
iNrVkmbGrEcBkBtr9/RlXg3xg0F2osAcqlEnBm8xAoIBADGLZkGrfcd3iDeaTnlF
|
|
||||||
Rv0mINH86UDvim3is4j89S7EM9qPZiTyn761xwQg1faARAK/jwfsbXYtfeQnHlD/
|
|
||||||
3vCZ++n44NNy5MbLheIsZ9xVcs2ocZUAuaGb4iner9V7b1bE4P/5HjgRwFw6XIBU
|
|
||||||
MESwUwHPSG034OhjBda8Vr1FH69VgAzEgGNSrjeNlGehSqwcxVOqqtgboWutnp3i
|
|
||||||
V2SNaTb1bhfwKuYdHRfK+Z7NY222kVfeM56Digopw0jf55By7W9m6fcsOTNJjF9D
|
|
||||||
J6Q44MKFM2vH6vspwq9cxtmdTcvUIAunESqwg/wESSTEUeKYAU285m39HZ9lVncu
|
|
||||||
On0CggEAEk6pzS5OX7DSWqrTnYd9T83lr7RzFQpWpbeK7OOidMUYm/MHx7I2UyLN
|
|
||||||
V0K/ChkYowm69VvHJW9mcSHo0RAZiokBegJP8fhU0RJJaWyED+wdw2vOHlwAI7WP
|
|
||||||
hj3xCOT8D+qfx12wVqo6c0jRXnNUsd5V9DPtMkn7YFYuq56gSqwlLvIpuhfU8dJM
|
|
||||||
dCznLvjQqRQhqMk3p0bbcy4+EICR19F8UzgUfqWITwrdIriWQEWzDXIZvsBjxpaE
|
|
||||||
PenJGHMSac7xOU/hdljj6FSpwu03aA0HklCQhwpfNDd+KPR7ntNE1DBEn93/bScb
|
|
||||||
O61K2Igm/AywqweBe9cWRgB7lOXwIA==
|
|
||||||
-----END PRIVATE KEY-----
|
|
@ -1,7 +0,0 @@
|
|||||||
image: map_floor_save.pgm
|
|
||||||
mode: trinary
|
|
||||||
resolution: 0.05
|
|
||||||
origin: [-13.7, -5.57, 0]
|
|
||||||
negate: 0
|
|
||||||
occupied_thresh: 0.65
|
|
||||||
free_thresh: 0.25
|
|
@ -1,7 +0,0 @@
|
|||||||
image: map_floor_mainb_save_retouched.pgm
|
|
||||||
mode: trinary
|
|
||||||
resolution: 0.05
|
|
||||||
origin: [-66.2, -24.5, 0]
|
|
||||||
negate: 0
|
|
||||||
occupied_thresh: 0.65
|
|
||||||
free_thresh: 0.25
|
|
@ -1,7 +0,0 @@
|
|||||||
image: map_floor_mainb_save.pgm
|
|
||||||
mode: trinary
|
|
||||||
resolution: 0.05
|
|
||||||
origin: [-20.9, -7.03, 0]
|
|
||||||
negate: 0
|
|
||||||
occupied_thresh: 0.65
|
|
||||||
free_thresh: 0.25
|
|
@ -1,7 +0,0 @@
|
|||||||
image: map_floor_03-10-23.sav.pgm
|
|
||||||
mode: trinary
|
|
||||||
resolution: 0.05
|
|
||||||
origin: [-27.2, -0.0189, 0]
|
|
||||||
negate: 0
|
|
||||||
occupied_thresh: 0.65
|
|
||||||
free_thresh: 0.25
|
|
@ -1,7 +0,0 @@
|
|||||||
image: map_floor_mainb_save_retouched.pgm
|
|
||||||
mode: trinary
|
|
||||||
resolution: 0.05
|
|
||||||
origin: [-20.9, -7.03, 0]
|
|
||||||
negate: 0
|
|
||||||
occupied_thresh: 0.65
|
|
||||||
free_thresh: 0.25
|
|
@ -1,7 +0,0 @@
|
|||||||
image: map_floor_save.pgm
|
|
||||||
mode: trinary
|
|
||||||
resolution: 0.05
|
|
||||||
origin: [-13.7, -5.57, 0]
|
|
||||||
negate: 0
|
|
||||||
occupied_thresh: 0.65
|
|
||||||
free_thresh: 0.25
|
|
@ -1,7 +0,0 @@
|
|||||||
image: map_openlabday.pgm
|
|
||||||
mode: trinary
|
|
||||||
resolution: 0.05
|
|
||||||
origin: [-13.5, -20.9, 0]
|
|
||||||
negate: 0
|
|
||||||
occupied_thresh: 0.65
|
|
||||||
free_thresh: 0.25
|
|
@ -1,7 +0,0 @@
|
|||||||
image: map_save_16.10..pgm
|
|
||||||
mode: trinary
|
|
||||||
resolution: 0.05
|
|
||||||
origin: [-25.7, -17, 0]
|
|
||||||
negate: 0
|
|
||||||
occupied_thresh: 0.65
|
|
||||||
free_thresh: 0.25
|
|
@ -1,71 +0,0 @@
|
|||||||
#!/usr/bin/env python3
|
|
||||||
|
|
||||||
import os
|
|
||||||
import subprocess
|
|
||||||
|
|
||||||
# Function to get the path to the docker-compose.yaml file
|
|
||||||
def get_compose_file_path():
|
|
||||||
path = input("Enter the path to the docker-compose.yaml file (press Enter for current directory): ").strip()
|
|
||||||
return path if path else "docker-compose.yaml"
|
|
||||||
|
|
||||||
# Initialize the path to the docker-compose.yaml file
|
|
||||||
compose_file_path = get_compose_file_path()
|
|
||||||
|
|
||||||
# Define a list to keep track of running services
|
|
||||||
running_services = []
|
|
||||||
|
|
||||||
# Function to check if a service is already running
|
|
||||||
def is_service_running(service_name):
|
|
||||||
return service_name in running_services
|
|
||||||
|
|
||||||
# Function to start a service
|
|
||||||
def start_service(service_name):
|
|
||||||
if not is_service_running(service_name):
|
|
||||||
print(f"Starting {service_name}...")
|
|
||||||
subprocess.run(["docker", "compose", "-f", compose_file_path, "up", "-d", service_name])
|
|
||||||
running_services.append(service_name)
|
|
||||||
else:
|
|
||||||
print(f"{service_name} is already running.")
|
|
||||||
|
|
||||||
# Function to stop a service
|
|
||||||
def stop_service(service_name):
|
|
||||||
if is_service_running(service_name):
|
|
||||||
print(f"Stopping {service_name}...")
|
|
||||||
subprocess.run(["docker", "compose", "-f", compose_file_path, "down", "-v", "--remove-orphans", service_name])
|
|
||||||
running_services.remove(service_name)
|
|
||||||
else:
|
|
||||||
print(f"{service_name} is not running.")
|
|
||||||
|
|
||||||
# Main program
|
|
||||||
if __name__ == "__main__":
|
|
||||||
while True:
|
|
||||||
print("Options:")
|
|
||||||
print("1. Start Controller, Teleop, RSP, Lidar")
|
|
||||||
print("2. Start AMCL and Navigation")
|
|
||||||
print("3. Start Mapping and Navigation")
|
|
||||||
print("4. Stop AMCL and Mapping")
|
|
||||||
print("5. Change docker-compose.yaml file path")
|
|
||||||
print("6. Quit")
|
|
||||||
|
|
||||||
choice = input("Enter your choice: ")
|
|
||||||
|
|
||||||
if choice == "1":
|
|
||||||
start_service("controller")
|
|
||||||
start_service("teleop")
|
|
||||||
start_service("rsp")
|
|
||||||
start_service("lidar")
|
|
||||||
elif choice == "2":
|
|
||||||
start_service("amcl")
|
|
||||||
start_service("navigation")
|
|
||||||
elif choice == "3":
|
|
||||||
start_service("mapping")
|
|
||||||
start_service("navigation")
|
|
||||||
elif choice == "4":
|
|
||||||
stop_service("amcl")
|
|
||||||
stop_service("mapping")
|
|
||||||
elif choice == "5":
|
|
||||||
compose_file_path = get_compose_file_path()
|
|
||||||
elif choice == "6":
|
|
||||||
break
|
|
||||||
else:
|
|
||||||
print("Invalid choice. Please try again.")
|
|
70
rviz2.yaml
@ -1,70 +0,0 @@
|
|||||||
networks:
|
|
||||||
pc: # config for this pc. Only required for running the containers locally on the pc. For instance rviz2 or guis with gazebo.
|
|
||||||
driver: macvlan
|
|
||||||
driver_opts:
|
|
||||||
parent: wlx00e04c5513fc # pc network interface: here my wifi card. Can be found with ifconfig.
|
|
||||||
ipam:
|
|
||||||
config:
|
|
||||||
- subnet: 192.168.0.0/24
|
|
||||||
gateway: 192.168.0.1
|
|
||||||
ip_range: 192.168.0.200/25
|
|
||||||
aux_addresses:
|
|
||||||
net-address: 192.168.0.100 #? what is this for --> to exclude addresses from buing used.
|
|
||||||
|
|
||||||
services:
|
|
||||||
# rviz2
|
|
||||||
rviz2:
|
|
||||||
image: ghcr.io/bjoernellens1/ros2_rmp/rmp:guis
|
|
||||||
# command: >
|
|
||||||
# ros2 launch cps_rmp220_support robot_rviz2.launch.py
|
|
||||||
command: >
|
|
||||||
ros2 launch cps_rmp220_support rviz.launch.py
|
|
||||||
# Interactive shell
|
|
||||||
stdin_open: true
|
|
||||||
tty: true
|
|
||||||
# Networking and IPC for ROS 2
|
|
||||||
network_mode: host
|
|
||||||
ipc: host
|
|
||||||
# Needed to display graphical applications
|
|
||||||
privileged: true
|
|
||||||
environment:
|
|
||||||
# Allows graphical programs in the container.
|
|
||||||
- DISPLAY=${DISPLAY}
|
|
||||||
- QT_X11_NO_MITSHM=1
|
|
||||||
- NVIDIA_DRIVER_CAPABILITIES=all
|
|
||||||
- ROS_DOMAIN_ID=5
|
|
||||||
- RMW_IMPLEMENTATION=rmw_cyclonedds_cpp
|
|
||||||
volumes:
|
|
||||||
# Allows graphical programs in the container.
|
|
||||||
- /tmp/.X11-unix:/tmp/.X11-unix:rw
|
|
||||||
- ${XAUTHORITY:-$HOME/.Xauthority}:/root/.Xauthority
|
|
||||||
# networks: # not using bridging anymore, instead try using all services on macvlan? let's see... shoudl word for now. Bridging does definitely not work because multicast is not supported here.
|
|
||||||
# pc:
|
|
||||||
# ipv4_address: 192.168.0.201 #here need to set fixed ip to avoid collissions with other containers on robot.
|
|
||||||
|
|
||||||
rviz2-depthai:
|
|
||||||
image: luxonis/depthai-ros:humble-latest
|
|
||||||
command: >
|
|
||||||
ros2 launch cps_rmp220_support rviz.launch.py
|
|
||||||
# Interactive shell
|
|
||||||
stdin_open: true
|
|
||||||
tty: true
|
|
||||||
# Networking and IPC for ROS 2
|
|
||||||
network_mode: host
|
|
||||||
ipc: host
|
|
||||||
# Needed to display graphical applications
|
|
||||||
privileged: true
|
|
||||||
environment:
|
|
||||||
# Allows graphical programs in the container.
|
|
||||||
- DISPLAY=${DISPLAY}
|
|
||||||
- QT_X11_NO_MITSHM=1
|
|
||||||
- NVIDIA_DRIVER_CAPABILITIES=all
|
|
||||||
- ROS_DOMAIN_ID=5
|
|
||||||
- RMW_IMPLEMENTATION=rmw_cyclonedds_cpp
|
|
||||||
volumes:
|
|
||||||
# Allows graphical programs in the container.
|
|
||||||
- /tmp/.X11-unix:/tmp/.X11-unix:rw
|
|
||||||
- ${XAUTHORITY:-$HOME/.Xauthority}:/root/.Xauthority
|
|
||||||
# networks: # not using bridging anymore, instead try using all services on macvlan? let's see... shoudl word for now. Bridging does definitely not work because multicast is not supported here.
|
|
||||||
# pc:
|
|
||||||
# ipv4_address: 192.168.0.201 #here need to set fixed ip to avoid collissions with other containers on robot.
|
|
@ -1,47 +0,0 @@
|
|||||||
{
|
|
||||||
"version": "1.1",
|
|
||||||
"engine": "linux|Transformer|1.40.6|1.40.6|latest",
|
|
||||||
"containerized": false,
|
|
||||||
"host_distro": {
|
|
||||||
"name": "NixOS",
|
|
||||||
"version": "23.11",
|
|
||||||
"display_name": "NixOS 23.11 (Tapir)"
|
|
||||||
},
|
|
||||||
"type": "build",
|
|
||||||
"state": "error",
|
|
||||||
"target_reference": "ubuntu",
|
|
||||||
"system": {
|
|
||||||
"type": "",
|
|
||||||
"release": "",
|
|
||||||
"distro": {
|
|
||||||
"name": "",
|
|
||||||
"version": "",
|
|
||||||
"display_name": ""
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"source_image": {
|
|
||||||
"identity": {
|
|
||||||
"id": ""
|
|
||||||
},
|
|
||||||
"size": 0,
|
|
||||||
"size_human": "",
|
|
||||||
"create_time": "",
|
|
||||||
"docker_version": "",
|
|
||||||
"architecture": "",
|
|
||||||
"container_entry": {
|
|
||||||
"exe_path": ""
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"minified_image_size": 0,
|
|
||||||
"minified_image_size_human": "",
|
|
||||||
"minified_image": "",
|
|
||||||
"minified_image_has_data": false,
|
|
||||||
"minified_by": 0,
|
|
||||||
"artifact_location": "",
|
|
||||||
"container_report_name": "",
|
|
||||||
"seccomp_profile_name": "",
|
|
||||||
"apparmor_profile_name": "",
|
|
||||||
"image_stack": null,
|
|
||||||
"image_created": false,
|
|
||||||
"image_build_engine": ""
|
|
||||||
}
|
|
@ -1,52 +0,0 @@
|
|||||||
#!/usr/bin/env python3
|
|
||||||
|
|
||||||
import subprocess
|
|
||||||
|
|
||||||
# Define the stacks
|
|
||||||
stack1 = ["controller", "teleop", "rsp", "lidar"]
|
|
||||||
stack2 = stack1 + ["mapping", "navigation"]
|
|
||||||
stack3 = stack1 + ["amcl", "navigation"]
|
|
||||||
|
|
||||||
# Function to start a stack
|
|
||||||
def start_stack(stack):
|
|
||||||
print(f"Starting {', '.join(stack)}...")
|
|
||||||
subprocess.run(["docker", "compose", "up", "-d"] + stack)
|
|
||||||
|
|
||||||
# Function to stop a stack
|
|
||||||
def stop_stack(stack):
|
|
||||||
print(f"Stopping {', '.join(stack)}...")
|
|
||||||
subprocess.run(["docker", "compose", "down", "-v", "--remove-orphans"] + stack)
|
|
||||||
|
|
||||||
# Main program
|
|
||||||
if __name__ == "__main__":
|
|
||||||
while True:
|
|
||||||
print("Options:")
|
|
||||||
print("1. Start Stack 1")
|
|
||||||
print("2. Start Stack 2")
|
|
||||||
print("3. Start Stack 3")
|
|
||||||
print("4. Stop Stack 1")
|
|
||||||
print("5. Stop Stack 2")
|
|
||||||
print("6. Stop Stack 3")
|
|
||||||
print("7. Quit")
|
|
||||||
|
|
||||||
choice = input("Enter your choice: ")
|
|
||||||
|
|
||||||
if choice == "1":
|
|
||||||
stop_stack(stack2 + stack3) # Stop stack2 and stack3 to avoid interference
|
|
||||||
start_stack(stack1)
|
|
||||||
elif choice == "2":
|
|
||||||
stop_stack(stack1 + stack3) # Stop stack1 and stack3 to avoid interference
|
|
||||||
start_stack(stack2)
|
|
||||||
elif choice == "3":
|
|
||||||
stop_stack(stack1 + stack2) # Stop stack1 and stack2 to avoid interference
|
|
||||||
start_stack(stack3)
|
|
||||||
elif choice == "4":
|
|
||||||
stop_stack(stack1)
|
|
||||||
elif choice == "5":
|
|
||||||
stop_stack(stack2)
|
|
||||||
elif choice == "6":
|
|
||||||
stop_stack(stack3)
|
|
||||||
elif choice == "7":
|
|
||||||
break
|
|
||||||
else:
|
|
||||||
print("Invalid choice. Please try again.")
|
|
@ -1 +0,0 @@
|
|||||||
docker compose up -d controller teleop rsp lidar mapping navigation
|
|
@ -1 +0,0 @@
|
|||||||
docker compose up -d controller teleop rsp lidar amcl navigation
|
|
@ -1 +0,0 @@
|
|||||||
docker compose up -d controller teleop rsp lidar
|
|
133
test.rviz
@ -1,133 +0,0 @@
|
|||||||
Panels:
|
|
||||||
- Class: rviz_common/Displays
|
|
||||||
Help Height: 85
|
|
||||||
Name: Displays
|
|
||||||
Property Tree Widget:
|
|
||||||
Expanded:
|
|
||||||
- /Global Options1
|
|
||||||
- /Status1
|
|
||||||
Splitter Ratio: 0.5
|
|
||||||
Tree Height: 528
|
|
||||||
- Class: rviz_common/Selection
|
|
||||||
Name: Selection
|
|
||||||
- Class: rviz_common/Tool Properties
|
|
||||||
Expanded:
|
|
||||||
- /2D Goal Pose1
|
|
||||||
- /Publish Point1
|
|
||||||
Name: Tool Properties
|
|
||||||
Splitter Ratio: 0.5886790156364441
|
|
||||||
- Class: rviz_common/Views
|
|
||||||
Expanded:
|
|
||||||
- /Current View1
|
|
||||||
Name: Views
|
|
||||||
Splitter Ratio: 0.5
|
|
||||||
- Class: rviz_common/Time
|
|
||||||
Experimental: false
|
|
||||||
Name: Time
|
|
||||||
SyncMode: 0
|
|
||||||
SyncSource: ""
|
|
||||||
Visualization Manager:
|
|
||||||
Class: ""
|
|
||||||
Displays:
|
|
||||||
- Alpha: 0.5
|
|
||||||
Cell Size: 1
|
|
||||||
Class: rviz_default_plugins/Grid
|
|
||||||
Color: 160; 160; 164
|
|
||||||
Enabled: true
|
|
||||||
Line Style:
|
|
||||||
Line Width: 0.029999999329447746
|
|
||||||
Value: Lines
|
|
||||||
Name: Grid
|
|
||||||
Normal Cell Count: 0
|
|
||||||
Offset:
|
|
||||||
X: 0
|
|
||||||
Y: 0
|
|
||||||
Z: 0
|
|
||||||
Plane: XY
|
|
||||||
Plane Cell Count: 10
|
|
||||||
Reference Frame: <Fixed Frame>
|
|
||||||
Value: true
|
|
||||||
Enabled: true
|
|
||||||
Global Options:
|
|
||||||
Background Color: 48; 48; 48
|
|
||||||
Fixed Frame: map
|
|
||||||
Frame Rate: 30
|
|
||||||
Name: root
|
|
||||||
Tools:
|
|
||||||
- Class: rviz_default_plugins/Interact
|
|
||||||
Hide Inactive Objects: true
|
|
||||||
- Class: rviz_default_plugins/MoveCamera
|
|
||||||
- Class: rviz_default_plugins/Select
|
|
||||||
- Class: rviz_default_plugins/FocusCamera
|
|
||||||
- Class: rviz_default_plugins/Measure
|
|
||||||
Line color: 128; 128; 0
|
|
||||||
- Class: rviz_default_plugins/SetInitialPose
|
|
||||||
Covariance x: 0.25
|
|
||||||
Covariance y: 0.25
|
|
||||||
Covariance yaw: 0.06853891909122467
|
|
||||||
Topic:
|
|
||||||
Depth: 5
|
|
||||||
Durability Policy: Volatile
|
|
||||||
History Policy: Keep Last
|
|
||||||
Reliability Policy: Reliable
|
|
||||||
Value: /initialpose
|
|
||||||
- Class: rviz_default_plugins/SetGoal
|
|
||||||
Topic:
|
|
||||||
Depth: 5
|
|
||||||
Durability Policy: Volatile
|
|
||||||
History Policy: Keep Last
|
|
||||||
Reliability Policy: Reliable
|
|
||||||
Value: /goal_pose
|
|
||||||
- Class: rviz_default_plugins/PublishPoint
|
|
||||||
Single click: true
|
|
||||||
Topic:
|
|
||||||
Depth: 5
|
|
||||||
Durability Policy: Volatile
|
|
||||||
History Policy: Keep Last
|
|
||||||
Reliability Policy: Reliable
|
|
||||||
Value: /clicked_point
|
|
||||||
Transformation:
|
|
||||||
Current:
|
|
||||||
Class: rviz_default_plugins/TF
|
|
||||||
Value: true
|
|
||||||
Views:
|
|
||||||
Current:
|
|
||||||
Class: rviz_default_plugins/Orbit
|
|
||||||
Distance: 10
|
|
||||||
Enable Stereo Rendering:
|
|
||||||
Stereo Eye Separation: 0.05999999865889549
|
|
||||||
Stereo Focal Distance: 1
|
|
||||||
Swap Stereo Eyes: false
|
|
||||||
Value: false
|
|
||||||
Focal Point:
|
|
||||||
X: 0
|
|
||||||
Y: 0
|
|
||||||
Z: 0
|
|
||||||
Focal Shape Fixed Size: true
|
|
||||||
Focal Shape Size: 0.05000000074505806
|
|
||||||
Invert Z Axis: false
|
|
||||||
Name: Current View
|
|
||||||
Near Clip Distance: 0.009999999776482582
|
|
||||||
Pitch: 0.785398006439209
|
|
||||||
Target Frame: <Fixed Frame>
|
|
||||||
Value: Orbit (rviz)
|
|
||||||
Yaw: 0.785398006439209
|
|
||||||
Saved: ~
|
|
||||||
Window Geometry:
|
|
||||||
Displays:
|
|
||||||
collapsed: false
|
|
||||||
Height: 845
|
|
||||||
Hide Left Dock: false
|
|
||||||
Hide Right Dock: false
|
|
||||||
QMainWindow State: 000000ff00000000fd00000004000000000000015a000002a6fc0200000008fb0000001200530065006c0065006300740069006f006e00000001e10000009b0000006b00fffffffb0000001e0054006f006f006c002000500072006f007000650072007400690065007302000001ed000001df00000185000000a3fb000000120056006900650077007300200054006f006f02000001df000002110000018500000122fb000000200054006f006f006c002000500072006f0070006500720074006900650073003203000002880000011d000002210000017afb000000100044006900730070006c0061007900730100000044000002a6000000eb00fffffffb0000002000730065006c0065006300740069006f006e00200062007500660066006500720200000138000000aa0000023a00000294fb00000014005700690064006500530074006500720065006f02000000e6000000d2000003ee0000030bfb0000000c004b0069006e0065006300740200000186000001060000030c00000261000000010000010f000002a6fc0200000003fb0000001e0054006f006f006c002000500072006f00700065007200740069006500730100000041000000780000000000000000fb0000000a005600690065007700730100000044000002a6000000b900fffffffb0000001200530065006c0065006300740069006f006e010000025a000000b200000000000000000000000200000490000000a9fc0100000001fb0000000a00560069006500770073030000004e00000080000002e10000019700000003000004af0000003efc0100000002fb0000000800540069006d00650100000000000004af000002d200fffffffb0000000800540069006d0065010000000000000450000000000000000000000238000002a600000004000000040000000800000008fc0000000100000002000000010000000a0054006f006f006c00730100000000ffffffff0000000000000000
|
|
||||||
Selection:
|
|
||||||
collapsed: false
|
|
||||||
Time:
|
|
||||||
collapsed: false
|
|
||||||
Tool Properties:
|
|
||||||
collapsed: false
|
|
||||||
Views:
|
|
||||||
collapsed: false
|
|
||||||
Width: 1199
|
|
||||||
X: 199
|
|
||||||
Y: 115
|
|
88
webcam.launch.py
Normal file
@ -0,0 +1,88 @@
|
|||||||
|
from launch import LaunchDescription
|
||||||
|
from launch_ros.actions import Node
|
||||||
|
from launch.actions import DeclareLaunchArgument
|
||||||
|
from launch.substitutions import LaunchConfiguration, ThisLaunchFileDir
|
||||||
|
from launch.conditions import IfCondition, UnlessCondition
|
||||||
|
from launch.substitutions import TextSubstitution
|
||||||
|
|
||||||
|
def generate_launch_description():
|
||||||
|
# Declare launch arguments
|
||||||
|
video_device_arg = DeclareLaunchArgument(
|
||||||
|
'video_device', default_value='/dev/video0',
|
||||||
|
description='Video device path')
|
||||||
|
|
||||||
|
pixel_format_arg = DeclareLaunchArgument(
|
||||||
|
'pixel_format', default_value='YUYV',
|
||||||
|
description='Pixel format')
|
||||||
|
|
||||||
|
output_encoding_arg = DeclareLaunchArgument(
|
||||||
|
'output_encoding', default_value='yuv422_yuy2',
|
||||||
|
description='Output encoding')
|
||||||
|
|
||||||
|
image_size_arg = DeclareLaunchArgument(
|
||||||
|
'image_size', default_value='[640, 480]',
|
||||||
|
description='Image size')
|
||||||
|
|
||||||
|
camera_frame_id_arg = DeclareLaunchArgument(
|
||||||
|
'camera_frame_id', default_value='camera_optical_link',
|
||||||
|
description='Camera frame ID')
|
||||||
|
|
||||||
|
params_file_arg = DeclareLaunchArgument(
|
||||||
|
'params_file', default_value='',
|
||||||
|
description='Path to the parameters file')
|
||||||
|
|
||||||
|
device_namespace_arg = DeclareLaunchArgument(
|
||||||
|
'device_namespace', default_value='camera',
|
||||||
|
description='Device namespace')
|
||||||
|
|
||||||
|
ffmpeg_encoding_arg = DeclareLaunchArgument(
|
||||||
|
'ffmpeg_encoding', default_value='libx264',
|
||||||
|
description='FFMPEG encoding')
|
||||||
|
|
||||||
|
ffmpeg_preset_arg = DeclareLaunchArgument(
|
||||||
|
'ffmpeg_preset', default_value='ultrafast',
|
||||||
|
description='FFMPEG preset')
|
||||||
|
|
||||||
|
ffmpeg_tune_arg = DeclareLaunchArgument(
|
||||||
|
'ffmpeg_tune', default_value='zerolatency',
|
||||||
|
description='FFMPEG tune')
|
||||||
|
|
||||||
|
# v4l2_camera node configuration
|
||||||
|
v4l2_camera_node = Node(
|
||||||
|
package='v4l2_camera',
|
||||||
|
executable='v4l2_camera_node',
|
||||||
|
name='camera',
|
||||||
|
namespace=LaunchConfiguration('device_namespace'),
|
||||||
|
parameters=[
|
||||||
|
{
|
||||||
|
'video_device': LaunchConfiguration('video_device'),
|
||||||
|
'pixel_format': LaunchConfiguration('pixel_format'),
|
||||||
|
'output_encoding': LaunchConfiguration('output_encoding'),
|
||||||
|
'image_size': LaunchConfiguration('image_size'),
|
||||||
|
'camera_frame_id': LaunchConfiguration('camera_frame_id'),
|
||||||
|
'camera_name': LaunchConfiguration('device_namespace'),
|
||||||
|
'camera_link_frame_id': [LaunchConfiguration('device_namespace'), TextSubstitution(text='_link')],
|
||||||
|
'ffmpeg_image_transport.encoding': LaunchConfiguration('ffmpeg_encoding'),
|
||||||
|
'ffmpeg_image_transport.preset': LaunchConfiguration('ffmpeg_preset'),
|
||||||
|
'ffmpeg_image_transport.tune': LaunchConfiguration('ffmpeg_tune'),
|
||||||
|
},
|
||||||
|
LaunchConfiguration('params_file')
|
||||||
|
],
|
||||||
|
# Add any necessary remappings here
|
||||||
|
)
|
||||||
|
|
||||||
|
# Assemble the launch description
|
||||||
|
return LaunchDescription([
|
||||||
|
video_device_arg,
|
||||||
|
pixel_format_arg,
|
||||||
|
output_encoding_arg,
|
||||||
|
image_size_arg,
|
||||||
|
camera_frame_id_arg,
|
||||||
|
params_file_arg,
|
||||||
|
device_namespace_arg,
|
||||||
|
ffmpeg_encoding_arg,
|
||||||
|
ffmpeg_preset_arg,
|
||||||
|
ffmpeg_tune_arg,
|
||||||
|
v4l2_camera_node
|
||||||
|
])
|
||||||
|
|