Merge ~kzapalowicz/snappy-hwe-snaps/+git/network-manager:feature/use-create-image-scripts-repo into ~snappy-hwe-team/snappy-hwe-snaps/+git/pulseaudio:master
- Git
- lp:~kzapalowicz/snappy-hwe-snaps/+git/network-manager
- feature/use-create-image-scripts-repo
- Merge into master
Status: | Superseded |
---|---|
Proposed branch: | ~kzapalowicz/snappy-hwe-snaps/+git/network-manager:feature/use-create-image-scripts-repo |
Merge into: | ~snappy-hwe-team/snappy-hwe-snaps/+git/pulseaudio:master |
Diff against target: |
4709 lines (+4319/-0) (has conflicts) 38 files modified
ChangeLog (+107/-0) MAINTAINERS (+7/-0) README.md (+142/-0) bin/dhcp-lease-mover (+26/-0) bin/networkmanager (+83/-0) conf/NetworkManager.conf (+17/-0) data/copyright (+77/-0) docs/index.md (+17/-0) docs/metadata.yaml (+11/-0) docs/reference/configuration/wowlan.md (+123/-0) hooks/configure (+98/-0) run-tests.sh (+63/-0) setup/gui/icon.svg (+2466/-0) snapcraft.yaml (+244/-0) spread.yaml (+50/-0) startup-hooks/99-wol-by-default.sh (+13/-0) tests/full/correct-dns-setup/task.yaml (+47/-0) tests/full/dhcp-leases-are-moved/task.yaml (+35/-0) tests/full/immutable-netplan-config/task.yaml (+9/-0) tests/full/ipv6-address-assignment/task.yaml (+27/-0) tests/full/ipv6-router-advertisements/task.yaml (+70/-0) tests/full/no-netplan-default-config/task.yaml (+41/-0) tests/full/system-network-is-active/task.yaml (+9/-0) tests/full/wol-enabled-by-default/task.yaml (+59/-0) tests/lib/prepare-all.sh (+24/-0) tests/lib/prepare.sh (+26/-0) tests/lib/restore-each.sh (+27/-0) tests/lib/utilities.sh (+62/-0) tests/main/aliases/task.yaml (+13/-0) tests/main/ethernet-managed-by-networkd/task.yaml (+7/-0) tests/main/installation/task.yaml (+16/-0) tests/main/set-hostname/task.yaml (+13/-0) tests/main/static-ip-configuration/task.yaml (+49/-0) tests/main/suspend-resume/task.yaml (+80/-0) tests/main/switch-netplan-renderer/task.yaml (+40/-0) tests/main/wifi-connect-secured-ap/task.yaml (+38/-0) tests/main/wifi-powersave-config-option/task.yaml (+28/-0) tests/main/wifi-wowlan-config-option/task.yaml (+55/-0) Conflict in MAINTAINERS Conflict in README.md Conflict in data/copyright Conflict in run-tests.sh Conflict in snapcraft.yaml Conflict in spread.yaml Conflict in tests/lib/prepare-all.sh Conflict in tests/lib/prepare.sh Conflict in tests/lib/restore-each.sh Conflict in tests/lib/utilities.sh Conflict in tests/main/installation/task.yaml |
Related bugs: |
Reviewer | Review Type | Date Requested | Status |
---|---|---|---|
System Enablement Bot | continuous-integration | Needs Fixing | |
Review via email: mp+315454@code.launchpad.net |
This proposal has been superseded by a proposal from 2017-01-24.
Commit message
Description of the change
tests: use the tests-extras repository
The tests-extras repository contains the tests-runner as well
as image creating scripts. This commit changes the run-tests.sh
script in a way that it fetches the tests-extras and uses it for
test execution.
See: https:/
System Enablement Bot (system-enablement-ci-bot) wrote : | # |
Matteo Croce (teknoraver) : | # |
Unmerged commits
- 4fcd29e... by =?utf-8?q?Konrad_Zapa=C5=82owicz?= <email address hidden>
-
docs: update the README
Make sure it reflects the changes done to the testing infrastructure
- 537dda1... by =?utf-8?q?Konrad_Zapa=C5=82owicz?= <email address hidden>
-
tests: fetch the remote repository and execute tests runner
The run-tests.sh script now delegates the tests execution to the test runner
which is in the tests-extras repository passing arguments there as-is. - 0dccd22... by =?utf-8?q?Konrad_Zapa=C5=82owicz?= <email address hidden>
-
tests: use remote image creation script
Switch to shared, remote image creation script instead having it
embedded in the repository. Also add --snap option to make sure
that all of the image creation script functionalities are
exposed. - 64ea63d... by Simon Fels
-
docs: wowlan: minor fixes
- 9e61cbb... by Simon Fels
-
tests: bring wowlan config test back inline with implementation
- b3d9e46... by Simon Fels
-
docs: respect review comments for wowlan documentation
- 2d81063... by Simon Fels
-
Drop note about unfinished support for hooks in snapcraft
snapcraft supports hook with version 2.25
- 397c311... by Simon Fels
-
Add short paragraph about documentation in our README
- 4676251... by Simon Fels
-
hooks: bring wifi.wake-on-wlan config option inline with documentation
- 1b78869... by Simon Fels
-
docs: add documentation for wake-on-wlan support
Preview Diff
1 | diff --git a/ChangeLog b/ChangeLog | |||
2 | 0 | new file mode 100644 | 0 | new file mode 100644 |
3 | index 0000000..e1f5f10 | |||
4 | --- /dev/null | |||
5 | +++ b/ChangeLog | |||
6 | @@ -0,0 +1,107 @@ | |||
7 | 1 | 2016-11-28 Simon Fels <simon.fels@canonical.com> - 1.2.2-10 | ||
8 | 2 | |||
9 | 3 | * Rename hooks to startup-hooks to make clear they are different from snap hooks | ||
10 | 4 | * Make wake-on-lan hook executable | ||
11 | 5 | * Respect review comments | ||
12 | 6 | * Delete unwanted temporary file | ||
13 | 7 | * Add spread test for WoL enablement | ||
14 | 8 | * Move WoL enablement into a startup hook | ||
15 | 9 | * Add conf file to enable WoL by default for all ethernet connections | ||
16 | 10 | * Use absolute path for wifi-ap executables | ||
17 | 11 | * Wait for NetworkManager to be fully up and running | ||
18 | 12 | * Make DHCP lease mover test a bit more robust | ||
19 | 13 | * Let the assertion do the slot/plug connections | ||
20 | 14 | * tests: use prebuilt snap if available | ||
21 | 15 | * Bump network-manager version | ||
22 | 16 | * Respect review comments | ||
23 | 17 | * Add hostname test case | ||
24 | 18 | * Respect review comments | ||
25 | 19 | * Use absolute path for all snap binaries as spread removes /snap/bin from PATH | ||
26 | 20 | * Explain the difference between our different test suites | ||
27 | 21 | * Add IPv6 router advertisement test case | ||
28 | 22 | * Ensure NetworkManager has started when we start testing the DNS setup | ||
29 | 23 | * Add test case to verify static IP configuration | ||
30 | 24 | * Add test case to verify immutable netplan configuration files | ||
31 | 25 | * Add DNS setup verification test | ||
32 | 26 | * Add first test case to verify basic IPv6 address assignment | ||
33 | 27 | * Extend README to explain how to run an entire suite via spread | ||
34 | 28 | * Create static netplan configuration file as part of our image | ||
35 | 29 | * Fix testing for a channel | ||
36 | 30 | * Extend README and correct formatting | ||
37 | 31 | * Fix failing test cases | ||
38 | 32 | * Stop prepare/restore steps after first reboot | ||
39 | 33 | * Drop useless comments | ||
40 | 34 | * Use correct path for snap we install | ||
41 | 35 | * Bring back netplan renderer switch test | ||
42 | 36 | * Rework test setup so we have two different suites | ||
43 | 37 | * Move dhcp lease files back into SNAP_DATA but keep a copy of them in /run | ||
44 | 38 | |||
45 | 39 | 2016-10-27 Simon Fels <simon.fels@canonical.com> - 1.2.2-9 | ||
46 | 40 | |||
47 | 41 | * One more review change | ||
48 | 42 | * Changes according to review comments | ||
49 | 43 | * Correctly check if a file is empty or not | ||
50 | 44 | * Use correct indentation via spaces | ||
51 | 45 | * Work when /usr/lib/snapd/generate-network-conf exists or not | ||
52 | 46 | * Remove guard to prevent automatic ethernet configuration for no-netplan scenario | ||
53 | 47 | * Explain how to test a snap from a specific channel of the store | ||
54 | 48 | * Extend run-tests command documentation | ||
55 | 49 | * Move wait-for-nm code into a common utility function | ||
56 | 50 | * Add missing utilities.sh file | ||
57 | 51 | * Extend no-netplan-default-config test and name file correctly | ||
58 | 52 | * Build snap on suite preparation | ||
59 | 53 | * Switch per test to network-manager as default netplan renderer | ||
60 | 54 | * Check continously for network-manager service until it comes up | ||
61 | 55 | * Correctly test for no default netplan configuration | ||
62 | 56 | * Extend test infrastructure to run local snap | ||
63 | 57 | * Test system without default netplan config | ||
64 | 58 | * Manage ethernet connections automatically when netplan does not | ||
65 | 59 | * (morphis/spread-tests, spread-tests) Fix spread qemu path | ||
66 | 60 | * Split out actual snap name as variable | ||
67 | 61 | * Add small timeout before checking NetworkManager status | ||
68 | 62 | * Drop executable bits from sourced shell scripts | ||
69 | 63 | * Detect which spread version we're running | ||
70 | 64 | * Add test case to verify netplan renderer switch works | ||
71 | 65 | * Preserve netplan configuration as well accross test runs | ||
72 | 66 | * Add chapter to README explaining how to use the tests | ||
73 | 67 | * Address more review comments | ||
74 | 68 | * Respect review comments | ||
75 | 69 | * Add tests to verifiy WiFi connection to WPA2 secured AP | ||
76 | 70 | * Don't remove network-manager snap from the image on restore | ||
77 | 71 | * Add initial spread testing infrastructure | ||
78 | 72 | |||
79 | 73 | 2016-10-27 Simon Fels <simon.fels@canonical.com> - 1.2.2-8 | ||
80 | 74 | |||
81 | 75 | * Allow people to get ethernet managed back by NetworkManager | ||
82 | 76 | |||
83 | 77 | 2016-10-20 Simon Fels <simon.fels@canonical.com> - 1.2.2-7 | ||
84 | 78 | |||
85 | 79 | * Create state directory on startup if not present | ||
86 | 80 | * [SNAPPY] Print out correct path for the secret key | ||
87 | 81 | |||
88 | 82 | 2016-10-04 Simon Fels <simon.fels@canonical.com> - 1.2.2-6 | ||
89 | 83 | |||
90 | 84 | * Refine comment about not auto configuring ethernet ports | ||
91 | 85 | * Set grade property to stable | ||
92 | 86 | * Prevent ethernet ports from being auto configured when netplan is used | ||
93 | 87 | * Use new network-setup-observe interface | ||
94 | 88 | * Fix netplan nm renderer detection | ||
95 | 89 | * Ignore ethernet devices conditionally | ||
96 | 90 | * Do not copy default configuration in place but use one conditionally | ||
97 | 91 | * Don't ignore ethernet devices | ||
98 | 92 | * Look into directory netplan puts configuration files in too | ||
99 | 93 | * bin/networkmanager: create DHCP lease directory at startup | ||
100 | 94 | * Strip MAINTAINERS .snap suffix | ||
101 | 95 | * Add MAINTAINERS.snap | ||
102 | 96 | * Drop superflous character | ||
103 | 97 | * Cleanup after review comments | ||
104 | 98 | * conf: add rc-manager=resolvconf | ||
105 | 99 | * Add libnm* back | ||
106 | 100 | * Also drop libsoup from stage/build packages | ||
107 | 101 | * Explain why we don't want libsoup included | ||
108 | 102 | * Drop support for libsoupd which brings in libicudata | ||
109 | 103 | * We can't strip libicudata out | ||
110 | 104 | * Drop unneeded alias for modem-manager/ppp plugs | ||
111 | 105 | * Disable certain features we don't need and remove unwanted things from the snap | ||
112 | 106 | * Update config parameters | ||
113 | 107 | * Change --log-level to INFO (LP: #1602439) | ||
114 | diff --git a/MAINTAINERS b/MAINTAINERS | |||
115 | index a752dca..e50ea74 100644 | |||
116 | --- a/MAINTAINERS | |||
117 | +++ b/MAINTAINERS | |||
118 | @@ -1,2 +1,9 @@ | |||
119 | 1 | <<<<<<< MAINTAINERS | ||
120 | 1 | Jim Hodapp <jim.hodapp@canonical.com> | 2 | Jim Hodapp <jim.hodapp@canonical.com> |
121 | 2 | Simon Fels <simon.fels@canonical.com> | 3 | Simon Fels <simon.fels@canonical.com> |
122 | 4 | ======= | ||
123 | 5 | Simon Fels <simon.fels@canonical.com> | ||
124 | 6 | Tony Espy <espy@canonical.com> | ||
125 | 7 | Alfonso Sanchez-Beato <alfonso.sanchez-beato@canonical.com> | ||
126 | 8 | |||
127 | 9 | >>>>>>> MAINTAINERS | ||
128 | diff --git a/README.md b/README.md | |||
129 | index 73c1615..d52d3e9 100644 | |||
130 | --- a/README.md | |||
131 | +++ b/README.md | |||
132 | @@ -1,3 +1,145 @@ | |||
133 | 1 | <<<<<<< README.md | ||
134 | 1 | # PulseAudio | 2 | # PulseAudio |
135 | 2 | 3 | ||
136 | 3 | This is the snap to package the PulseAudio management service. | 4 | This is the snap to package the PulseAudio management service. |
137 | 5 | ======= | ||
138 | 6 | # NetworkManager | ||
139 | 7 | |||
140 | 8 | This is the snap to package the NetworkManager management service. | ||
141 | 9 | |||
142 | 10 | ## Hook support | ||
143 | 11 | |||
144 | 12 | All implemented hooks are stored inside the hooks directory. | ||
145 | 13 | |||
146 | 14 | ## Running tests | ||
147 | 15 | |||
148 | 16 | We have a set of spread (https://github.com/snapcore/spread) tests which | ||
149 | 17 | can be executed on a virtual machine or real hardware. | ||
150 | 18 | |||
151 | 19 | In order to run those tests you need the follow things | ||
152 | 20 | |||
153 | 21 | * ubuntu-image | ||
154 | 22 | * spread | ||
155 | 23 | |||
156 | 24 | You can install both as a snap | ||
157 | 25 | |||
158 | 26 | ``` | ||
159 | 27 | $ snap install --edge --devmode ubuntu-image | ||
160 | 28 | $ snap install --devmode spread | ||
161 | 29 | ``` | ||
162 | 30 | |||
163 | 31 | NOTE: As of today (27/10/2016) the version of spread in the store misses | ||
164 | 32 | some important bug fixes so you have to build your own one for now: | ||
165 | 33 | |||
166 | 34 | ``` | ||
167 | 35 | $ WORKDIR=`mktemp -d` | ||
168 | 36 | $ export GOPATH=$WORKDIR | ||
169 | 37 | $ go get -d -v github.com/snapcore/spread/... | ||
170 | 38 | $ go build github.com/snapcore/spread/cmd/spread | ||
171 | 39 | $ sudo cp spread /usr/local/bin | ||
172 | 40 | ``` | ||
173 | 41 | |||
174 | 42 | Make sure /usr/local/bin is in your path and is used as default: | ||
175 | 43 | |||
176 | 44 | ``` | ||
177 | 45 | $ which spread | ||
178 | 46 | /usr/local/bin/spread | ||
179 | 47 | ``` | ||
180 | 48 | |||
181 | 49 | Now you have everything to run the test suite. | ||
182 | 50 | |||
183 | 51 | ``` | ||
184 | 52 | $ ./run-tests | ||
185 | 53 | ``` | ||
186 | 54 | |||
187 | 55 | The script will reach out to tests-extras repository and download the helper | ||
188 | 56 | scripts: image creator and test runner. Next it will execute the test runner | ||
189 | 57 | passing the arguments as-is. | ||
190 | 58 | |||
191 | 59 | The helper scripts are tracked here: | ||
192 | 60 | https://git.launchpad.net/~snappy-hwe-team/snappy-hwe-snaps/+git/tests-extras | ||
193 | 61 | |||
194 | 62 | The test runner script will create an image via ubuntu-image and make it available | ||
195 | 63 | to spread by copying it to ~/.spread/qemu or ~/snap/spread/<version>/.spread/qemu | ||
196 | 64 | depending on if you're using a local spread version or the one from the | ||
197 | 65 | snap. | ||
198 | 66 | |||
199 | 67 | If you want to see more verbose debugging output of spread run | ||
200 | 68 | |||
201 | 69 | ``` | ||
202 | 70 | $ ./run-tests --debug | ||
203 | 71 | ``` | ||
204 | 72 | |||
205 | 73 | If you do not want to build the network-manager snap from source but test one | ||
206 | 74 | from a specific channel start testing with | ||
207 | 75 | |||
208 | 76 | ``` | ||
209 | 77 | $ ./run-tests --channel=beta --test-from-channel | ||
210 | 78 | ``` | ||
211 | 79 | |||
212 | 80 | You can also run spread directly which allows you run just specific tests | ||
213 | 81 | |||
214 | 82 | ``` | ||
215 | 83 | $ spread tests/main/installation | ||
216 | 84 | ``` | ||
217 | 85 | |||
218 | 86 | This will by default build the network-manager snap from source. If you | ||
219 | 87 | want it to test it from a specific channel run | ||
220 | 88 | |||
221 | 89 | ``` | ||
222 | 90 | $ SNAP_CHANNEL=candidate spread tests/main/installation | ||
223 | 91 | ``` | ||
224 | 92 | |||
225 | 93 | And if you want to run an entire suite | ||
226 | 94 | |||
227 | 95 | ``` | ||
228 | 96 | $ spread tests/main/ | ||
229 | 97 | ``` | ||
230 | 98 | |||
231 | 99 | ## Available test suites | ||
232 | 100 | |||
233 | 101 | Currently we have two test suites | ||
234 | 102 | |||
235 | 103 | * main | ||
236 | 104 | * full | ||
237 | 105 | |||
238 | 106 | The 'main' suite covers testing of network-manager when its installed on | ||
239 | 107 | any Ubuntu Core device from the store without configuring the system | ||
240 | 108 | further to allow NetworkManager to control also all ethernet connections. | ||
241 | 109 | |||
242 | 110 | The 'full' suite configures netplan in the prepare part to use NetworkManager | ||
243 | 111 | as default backend so that it becomes the only network connection | ||
244 | 112 | management service in the system. | ||
245 | 113 | |||
246 | 114 | Depending on the nature of a test case the right test suite should be | ||
247 | 115 | picked. | ||
248 | 116 | |||
249 | 117 | ## Documentation | ||
250 | 118 | |||
251 | 119 | All documentation is available in the docs/ subdirectory. It uses markdown | ||
252 | 120 | and the documentation-builder (<https://github.com/CanonicalLtd/documentation-builder>) | ||
253 | 121 | to generate HTML-based documentation. | ||
254 | 122 | |||
255 | 123 | To generate the HTML pages install the documentation-builder snap first | ||
256 | 124 | |||
257 | 125 | ``` | ||
258 | 126 | $ snap install documentation-builder | ||
259 | 127 | $ snap connect documentation-builder:home core | ||
260 | 128 | ``` | ||
261 | 129 | |||
262 | 130 | then enter the docs/ subdirectory and run the builder | ||
263 | 131 | |||
264 | 132 | ``` | ||
265 | 133 | $ cd docs | ||
266 | 134 | $ documentation-builder | ||
267 | 135 | ``` | ||
268 | 136 | |||
269 | 137 | It will generate all documentation as HTML in the build/ subdirectory. Open | ||
270 | 138 | it via | ||
271 | 139 | |||
272 | 140 | ``` | ||
273 | 141 | $ google-chrome build/index.html | ||
274 | 142 | ``` | ||
275 | 143 | |||
276 | 144 | for example. | ||
277 | 145 | >>>>>>> README.md | ||
278 | diff --git a/bin/dhcp-lease-mover b/bin/dhcp-lease-mover | |||
279 | 4 | new file mode 100755 | 146 | new file mode 100755 |
280 | index 0000000..c54aeb0 | |||
281 | --- /dev/null | |||
282 | +++ b/bin/dhcp-lease-mover | |||
283 | @@ -0,0 +1,26 @@ | |||
284 | 1 | #!/bin/sh | ||
285 | 2 | set -x | ||
286 | 3 | |||
287 | 4 | lease_path=$SNAP_DATA/state/dhcp | ||
288 | 5 | public_lease_path=/run/NetworkManager/dhcp/ | ||
289 | 6 | |||
290 | 7 | if [ ! -e $public_lease_path ] ; then | ||
291 | 8 | mkdir -p $public_lease_path | ||
292 | 9 | fi | ||
293 | 10 | |||
294 | 11 | if [ ! -e $lease_path ] ; then | ||
295 | 12 | mkdir -p $lease_path | ||
296 | 13 | fi | ||
297 | 14 | |||
298 | 15 | # Copy all leases when we start to make sure we're in sync | ||
299 | 16 | rm -f $public_lease_path/* | ||
300 | 17 | cp $lease_path/* $public_lease_path | ||
301 | 18 | |||
302 | 19 | # Now we wait until a lease changes, gets added or removed and when | ||
303 | 20 | # that happened we simply just move all leases files into the public | ||
304 | 21 | # location. | ||
305 | 22 | while $SNAP/usr/bin/inotifywait -e create,modify,delete,move $lease_path ; do | ||
306 | 23 | sleep 1 | ||
307 | 24 | rm -f $public_lease_path/* | ||
308 | 25 | cp $lease_path/* $public_lease_path | ||
309 | 26 | done | ||
310 | diff --git a/bin/networkmanager b/bin/networkmanager | |||
311 | 0 | new file mode 100755 | 27 | new file mode 100755 |
312 | index 0000000..eab3b7e | |||
313 | --- /dev/null | |||
314 | +++ b/bin/networkmanager | |||
315 | @@ -0,0 +1,83 @@ | |||
316 | 1 | #!/bin/sh | ||
317 | 2 | set -ex | ||
318 | 3 | |||
319 | 4 | # Create all necessary directories we need at runtime | ||
320 | 5 | mkdir -p $SNAP_DATA/conf/system-connections | ||
321 | 6 | mkdir -p $SNAP_DATA/run | ||
322 | 7 | |||
323 | 8 | # Create DHCP lease directory | ||
324 | 9 | mkdir -p /run/NetworkManager/dhcp | ||
325 | 10 | |||
326 | 11 | # Select which config we're going to use. We offer our users | ||
327 | 12 | # to provide their own configuration file in $SNAP_DATA but | ||
328 | 13 | # will fallback if no one exists to the default one we ship | ||
329 | 14 | # in $SNAP | ||
330 | 15 | NM_CONF="$SNAP/etc/NetworkManager/NetworkManager.conf" | ||
331 | 16 | if [ -e $SNAP_DATA/NetworkManager.conf ]; then | ||
332 | 17 | NM_CONF="$SNAP_DATA/NetworkManager.conf" | ||
333 | 18 | fi | ||
334 | 19 | |||
335 | 20 | # A directory where users can place any additional configuration | ||
336 | 21 | # files for NetworkManager | ||
337 | 22 | mkdir -p $SNAP_DATA/conf.d | ||
338 | 23 | |||
339 | 24 | # State dir where network-manager stores several things like the | ||
340 | 25 | # secret key used for IPv6 | ||
341 | 26 | mkdir -p $SNAP_DATA/state | ||
342 | 27 | mkdir -p $SNAP_DATA/state/dhcp | ||
343 | 28 | |||
344 | 29 | # If netplan is not configured to render by default to NetworkManager | ||
345 | 30 | # configuration files we disable management of any ethernet device | ||
346 | 31 | # as this will clash with any configuration netplan puts in place | ||
347 | 32 | # for networkd. | ||
348 | 33 | if [ ! -e "/etc/netplan/00-default-nm-renderer.yaml" ] ; then | ||
349 | 34 | if [ ! -e "$SNAP_DATA/conf.d/disable-ethernet.conf" ] ; then | ||
350 | 35 | echo "[keyfile]" > $SNAP_DATA/conf.d/disable-ethernet.conf | ||
351 | 36 | echo "unmanaged-devices+=interface-name:eth*,interface-name:enx*" >> $SNAP_DATA/conf.d/disable-ethernet.conf | ||
352 | 37 | fi | ||
353 | 38 | else | ||
354 | 39 | # Enable ethernet management again if the user switched the netplan | ||
355 | 40 | # backend and wants us to manage ethernet | ||
356 | 41 | if [ -e $SNAP_DATA/conf.d/disable-ethernet.conf ] ; then | ||
357 | 42 | rm -f $SNAP_DATA/conf.d/disable-ethernet.conf | ||
358 | 43 | fi | ||
359 | 44 | |||
360 | 45 | # If the snapd configuration for netplan is not present or empty | ||
361 | 46 | # we will start managing all ethernet ports automatically. Because | ||
362 | 47 | # of that we need to remove any previously created configuration files | ||
363 | 48 | # which prevented us from doing that. | ||
364 | 49 | if [ ! -e /etc/netplan/00-snapd-config.yaml ] || [ -s /etc/netplan/00-snapd-config.yaml ] ; then | ||
365 | 50 | rm -f $SNAP_DATA/conf.d/no-auto-default-ethernet.conf | ||
366 | 51 | else | ||
367 | 52 | if [ ! -e "$SNAP_DATA/conf.d/no-auto-default-ethernet.conf" ] ; then | ||
368 | 53 | # If we're running as the only network management service | ||
369 | 54 | # and are configured via netplan on first boot then we should | ||
370 | 55 | # not try to auto configure ethernet ports as this is up to | ||
371 | 56 | # netplan and will be the same for networkd. | ||
372 | 57 | echo "[main]" > $SNAP_DATA/conf.d/no-auto-default-ethernet.conf | ||
373 | 58 | echo "no-auto-default=interface-name:eth*,interface-name:enx*" >> $SNAP_DATA/conf.d/no-auto-default-ethernet.conf | ||
374 | 59 | fi | ||
375 | 60 | fi | ||
376 | 61 | fi | ||
377 | 62 | |||
378 | 63 | # HACK: Until we've fixed probert to look in $SNAP_DATA/state/dhcp or | ||
379 | 64 | # somewhere else for our lease files we use inotifywatch to monitor | ||
380 | 65 | # our lease files and copy all over when something has changed. This | ||
381 | 66 | # background process gets stopped when our systemd service unit gets | ||
382 | 67 | # stopped. | ||
383 | 68 | $SNAP/bin/dhcp-lease-mover & | ||
384 | 69 | |||
385 | 70 | # Run available startup hooks to have a point to store custom | ||
386 | 71 | # logic outside of this script. More of the things from above | ||
387 | 72 | # should be moved into these. | ||
388 | 73 | for hook in $SNAP/startup-hooks/* ; do | ||
389 | 74 | [ -x "$hook" ] && /bin/sh -x "$hook" | ||
390 | 75 | done | ||
391 | 76 | |||
392 | 77 | export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:$SNAP/usr/lib/NetworkManager" | ||
393 | 78 | |||
394 | 79 | $SNAP/usr/sbin/NetworkManager \ | ||
395 | 80 | --config-dir=$SNAP_DATA/conf.d/ \ | ||
396 | 81 | --config=$NM_CONF \ | ||
397 | 82 | --log-level=INFO \ | ||
398 | 83 | --no-daemon | ||
399 | diff --git a/conf/NetworkManager.conf b/conf/NetworkManager.conf | |||
400 | 0 | new file mode 100644 | 84 | new file mode 100644 |
401 | index 0000000..1950212 | |||
402 | --- /dev/null | |||
403 | +++ b/conf/NetworkManager.conf | |||
404 | @@ -0,0 +1,17 @@ | |||
405 | 1 | [main] | ||
406 | 2 | plugins=ifupdown,keyfile | ||
407 | 3 | # Not using dnsmasq yet. Need to get it properly integrated | ||
408 | 4 | # into the snap or reuse the one shiped with the OS snap. | ||
409 | 5 | # rc-manager=resolvconf directs NM to use the resolvconf | ||
410 | 6 | # binary to update resolv.conf, which is necessary as there's | ||
411 | 7 | # more than one network management stack on core devices. | ||
412 | 8 | dns=default | ||
413 | 9 | rc-manager=resolvconf | ||
414 | 10 | |||
415 | 11 | # Use internal DHCP stack which is based on the systemd | ||
416 | 12 | # implementation and is enough for our purpose until we | ||
417 | 13 | # need something more complex. | ||
418 | 14 | dhcp=internal | ||
419 | 15 | |||
420 | 16 | [ifupdown] | ||
421 | 17 | managed=false | ||
422 | diff --git a/data/copyright b/data/copyright | |||
423 | index 970053b..28e111b 100644 | |||
424 | --- a/data/copyright | |||
425 | +++ b/data/copyright | |||
426 | @@ -1,3 +1,4 @@ | |||
427 | 1 | <<<<<<< data/copyright | ||
428 | 1 | This package was debianized by CJ van den Berg <cj@vdbonline.com> on | 2 | This package was debianized by CJ van den Berg <cj@vdbonline.com> on |
429 | 2 | Thu, 10 Aug 2006 15:59:43 +0200. | 3 | Thu, 10 Aug 2006 15:59:43 +0200. |
430 | 3 | 4 | ||
431 | @@ -602,3 +603,79 @@ Copyright: | |||
432 | 602 | License: LGPL-2.1+ | 603 | License: LGPL-2.1+ |
433 | 603 | On Debian systems, the complete text of the LGPL-2.1 can be found in | 604 | On Debian systems, the complete text of the LGPL-2.1 can be found in |
434 | 604 | /usr/share/common-licenses/LGPL-2.1. | 605 | /usr/share/common-licenses/LGPL-2.1. |
435 | 606 | ======= | ||
436 | 607 | Format: http://www.debian.org/doc/packaging-manuals/copyright-format/1.0/ | ||
437 | 608 | Upstream-Name: NetworkManager | ||
438 | 609 | Source: http://ftp.gnome.org/pub/GNOME/sources/NetworkManager/ | ||
439 | 610 | |||
440 | 611 | Files: * | ||
441 | 612 | Copyright: 2004 - 2014 Red Hat, Inc. | ||
442 | 613 | 2005 - 2009 Novell, Inc. | ||
443 | 614 | License: GPL-2+ | ||
444 | 615 | |||
445 | 616 | Files: libnm-util/* | ||
446 | 617 | libnm-glib/* | ||
447 | 618 | libnm-core/* | ||
448 | 619 | libnm/* | ||
449 | 620 | Copyright: 2005 - 2014 Red Hat, Inc. | ||
450 | 621 | 2005 - 2009 Novell, Inc. | ||
451 | 622 | License: LGPL-2+ | ||
452 | 623 | |||
453 | 624 | Files: src/systemd/* | ||
454 | 625 | Copyright: 2013 - 2015 Tom Gundersen | ||
455 | 626 | 2014 Susant Sahani | ||
456 | 627 | 2014 - 2015 Intel Corporation. All rights reserved. | ||
457 | 628 | License: LGPL-2.1+ | ||
458 | 629 | |||
459 | 630 | License: GPL-2+ | ||
460 | 631 | This package is free software; you can redistribute it and/or modify | ||
461 | 632 | it under the terms of the GNU General Public License as published by | ||
462 | 633 | the Free Software Foundation; either version 2 of the License, or | ||
463 | 634 | (at your option) any later version. | ||
464 | 635 | . | ||
465 | 636 | This package is distributed in the hope that it will be useful, | ||
466 | 637 | but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
467 | 638 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
468 | 639 | GNU General Public License for more details. | ||
469 | 640 | . | ||
470 | 641 | You should have received a copy of the GNU General Public License | ||
471 | 642 | along with this program. If not, see <http://www.gnu.org/licenses/> | ||
472 | 643 | . | ||
473 | 644 | On Debian systems, the complete text of the GNU General Public | ||
474 | 645 | License version 2 can be found in "/usr/share/common-licenses/GPL-2". | ||
475 | 646 | |||
476 | 647 | License: LGPL-2+ | ||
477 | 648 | This package is free software; you can redistribute it and/or | ||
478 | 649 | modify it under the terms of the GNU Lesser General Public | ||
479 | 650 | License as published by the Free Software Foundation; either | ||
480 | 651 | version 2 of the License, or (at your option) any later version. | ||
481 | 652 | . | ||
482 | 653 | This package is distributed in the hope that it will be useful, | ||
483 | 654 | but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
484 | 655 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | ||
485 | 656 | Lesser General Public License for more details. | ||
486 | 657 | . | ||
487 | 658 | You should have received a copy of the GNU General Public License | ||
488 | 659 | along with this program. If not, see <http://www.gnu.org/licenses/>. | ||
489 | 660 | . | ||
490 | 661 | On Debian systems, the complete text of the GNU Lesser General | ||
491 | 662 | Public License can be found in "/usr/share/common-licenses/LGPL-2". | ||
492 | 663 | |||
493 | 664 | License: LGPL-2.1+ | ||
494 | 665 | This package is free software; you can redistribute it and/or | ||
495 | 666 | modify it under the terms of the GNU Lesser General Public | ||
496 | 667 | License as published by the Free Software Foundation; either | ||
497 | 668 | version 2.1 of the License, or (at your option) any later version. | ||
498 | 669 | . | ||
499 | 670 | This package is distributed in the hope that it will be useful, | ||
500 | 671 | but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
501 | 672 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | ||
502 | 673 | Lesser General Public License for more details. | ||
503 | 674 | . | ||
504 | 675 | You should have received a copy of the GNU General Public License | ||
505 | 676 | along with this program. If not, see <http://www.gnu.org/licenses/>. | ||
506 | 677 | . | ||
507 | 678 | On Debian systems, the complete text of the GNU Lesser General | ||
508 | 679 | Public License can be found in "/usr/share/common-licenses/LGPL-2.1". | ||
509 | 680 | |||
510 | 681 | >>>>>>> data/copyright | ||
511 | diff --git a/docs/index.md b/docs/index.md | |||
512 | 605 | new file mode 100644 | 682 | new file mode 100644 |
513 | index 0000000..4d539c6 | |||
514 | --- /dev/null | |||
515 | +++ b/docs/index.md | |||
516 | @@ -0,0 +1,17 @@ | |||
517 | 1 | --- | ||
518 | 2 | title: "NetworkManager" | ||
519 | 3 | table_of_contents: True | ||
520 | 4 | --- | ||
521 | 5 | |||
522 | 6 | # About NetworkManager | ||
523 | 7 | |||
524 | 8 | NetworkManager is a system network service that manages your network | ||
525 | 9 | devices and connections, attempts to keep network connectivity active | ||
526 | 10 | when available. It manages ethernet, WiFi, mobile broadband (WWAN) and | ||
527 | 11 | PPPoE devices while also providing VPN integration with a variety of | ||
528 | 12 | different VPN serivces. | ||
529 | 13 | |||
530 | 14 | ## Upstream documentation | ||
531 | 15 | |||
532 | 16 | Existing documentation from the upstream project can be found | ||
533 | 17 | [here](https://wiki.gnome.org/Projects/NetworkManager). | ||
534 | diff --git a/docs/metadata.yaml b/docs/metadata.yaml | |||
535 | 0 | new file mode 100644 | 18 | new file mode 100644 |
536 | index 0000000..d04aaac | |||
537 | --- /dev/null | |||
538 | +++ b/docs/metadata.yaml | |||
539 | @@ -0,0 +1,11 @@ | |||
540 | 1 | navigation: | ||
541 | 2 | - title: Introduction | ||
542 | 3 | children: | ||
543 | 4 | - title: About NetworkManager | ||
544 | 5 | location: index.md | ||
545 | 6 | - title: Reference | ||
546 | 7 | children: | ||
547 | 8 | - title: Configuration | ||
548 | 9 | children: | ||
549 | 10 | - title: Wake on WLAN | ||
550 | 11 | location: reference/configuration/wowlan.md | ||
551 | diff --git a/docs/reference/configuration/wowlan.md b/docs/reference/configuration/wowlan.md | |||
552 | 0 | new file mode 100644 | 12 | new file mode 100644 |
553 | index 0000000..29be8fc | |||
554 | --- /dev/null | |||
555 | +++ b/docs/reference/configuration/wowlan.md | |||
556 | @@ -0,0 +1,123 @@ | |||
557 | 1 | --- | ||
558 | 2 | title: Wake on WLAN | ||
559 | 3 | table_of_contents: true | ||
560 | 4 | --- | ||
561 | 5 | |||
562 | 6 | # Wake on WLAN | ||
563 | 7 | |||
564 | 8 | Wake on WLAN (called WoWLAN in the following) is a feature which allows a device | ||
565 | 9 | to be woken up from standby power states to faciliate device management. It is based | ||
566 | 10 | on the well established standard for Wake on LAN. The functionality is not entirely | ||
567 | 11 | equivalent to Wake on LAN and there are some limitations. | ||
568 | 12 | |||
569 | 13 | The NetworkManager snap allows its users to configure one or more triggers to allow | ||
570 | 14 | the device it operates on to be woken up remotely. | ||
571 | 15 | |||
572 | 16 | An important precondition for WoWLAN to work is that your kernel WiFi driver has | ||
573 | 17 | support for it. | ||
574 | 18 | |||
575 | 19 | You can read more about the kernel side implementation on the following sites: | ||
576 | 20 | |||
577 | 21 | * <https://wireless.wiki.kernel.org/en/users/documentation/wowlan> | ||
578 | 22 | |||
579 | 23 | ## Enable Wake on WLAN Globally | ||
580 | 24 | |||
581 | 25 | To allow users to enable or disable WoWLAN, the snap provides two configuration | ||
582 | 26 | options: | ||
583 | 27 | |||
584 | 28 | * **wifi.wake-on-wlan** | ||
585 | 29 | * **wifi.wake-on-wlan-password** | ||
586 | 30 | |||
587 | 31 | Both options can be set via the configuration API snap provide. See | ||
588 | 32 | <https://docs.ubuntu.com/core/en/guides/build-device/config-hooks> for more | ||
589 | 33 | details. | ||
590 | 34 | |||
591 | 35 | Both configuration options will affect all wireless network devices. If you | ||
592 | 36 | want to change it just for a single wireless connection please have a look at | ||
593 | 37 | the chapter [Per Connection Configuration](#per-connection-configuration) below. | ||
594 | 38 | |||
595 | 39 | |||
596 | 40 | ### wifi.wake-on-wlan | ||
597 | 41 | |||
598 | 42 | This configuration option accepts the following values | ||
599 | 43 | |||
600 | 44 | * **disabled (default):** Wake on WLAN is disabled for all wireless network devices. | ||
601 | 45 | * **any:** Wake on WLAN is enabled and any possible trigger will cause the system to wake up. | ||
602 | 46 | * **disconnect:** If a connection to a station gets disconnected the device will be woken up. | ||
603 | 47 | * **magic:** Wake on WLAN is enabled and only a received magic packet will cause the | ||
604 | 48 | system to wake up. The magic packet has the same structure as the one | ||
605 | 49 | used for Wake on LAN. For more details see <https://en.wikipedia.org/wiki/Wake-on-LAN#Magic_packet> | ||
606 | 50 | The content of the magic packet can be extended with the | ||
607 | 51 | wifi.wake-on-wlan-password option to require the client to send a | ||
608 | 52 | specific byte sequence functioning as a password so that not anyone | ||
609 | 53 | unpriviledged can wake up the system. | ||
610 | 54 | * **gtk-rekey-failure:** A failure of a GTK rekey operation will cause the device to wake up. | ||
611 | 55 | * **4way-handshake:** Reiteration of the 4way handshake will cause the device to wake up. | ||
612 | 56 | * **rfkill-release:** Release of a rfkill will cause the device to wake up. | ||
613 | 57 | * **tcp:** Any incoming TCP packet will cause the device to wake up. | ||
614 | 58 | |||
615 | 59 | Example: | ||
616 | 60 | |||
617 | 61 | ``` | ||
618 | 62 | $ snap set network-manager wifi.wake-on-wlan=magic | ||
619 | 63 | ``` | ||
620 | 64 | |||
621 | 65 | ### wifi.wake-on-wlan-password | ||
622 | 66 | |||
623 | 67 | This configuration option accepts a textual value. If specified, the value will | ||
624 | 68 | be used in addition to the wireless device MAC address to function as a password | ||
625 | 69 | that disallows unpriviledged actors to wake up the device. | ||
626 | 70 | |||
627 | 71 | Example: | ||
628 | 72 | |||
629 | 73 | ``` | ||
630 | 74 | $ snap set network-manager wifi.wake-on-wlan-password=MyPassword | ||
631 | 75 | ``` | ||
632 | 76 | |||
633 | 77 | ## Per Connection Configuration | ||
634 | 78 | |||
635 | 79 | To configure WoWLAN per connection you have to use the *nmcli* utility which comes | ||
636 | 80 | with the NetworkManager snap. It allows you to configure the same two options | ||
637 | 81 | as the snap accepts. However, the *wifi.wake-on-wlan* option takes a numeric value | ||
638 | 82 | instead of a textual one. | ||
639 | 83 | |||
640 | 84 | The *wifi.wake-on-wlan* option accepts the following values (see above for a detailed | ||
641 | 85 | description of each value) | ||
642 | 86 | |||
643 | 87 | * **0:** disabled | ||
644 | 88 | * **1:** Use global default configuration | ||
645 | 89 | * **2:** any | ||
646 | 90 | * **4:** disconnect | ||
647 | 91 | * **8:** magic | ||
648 | 92 | * **16:** gtk-rekey-failure | ||
649 | 93 | * **32:** 4way-handshake | ||
650 | 94 | * **128:** rfkill-release | ||
651 | 95 | * **256:** tcp | ||
652 | 96 | |||
653 | 97 | The *wifi.wake-on-wlan-password* option accepts the same values as the snap | ||
654 | 98 | configuration option. | ||
655 | 99 | |||
656 | 100 | Example: | ||
657 | 101 | |||
658 | 102 | ``` | ||
659 | 103 | $ nmcli c modify my-connection wifi.wake-on-wlan 2 | ||
660 | 104 | $ nmcli c modify my-connection wifi.wake-on-wlan-password Test1234 | ||
661 | 105 | ``` | ||
662 | 106 | |||
663 | 107 | ## Verify WoWLAN Configuration | ||
664 | 108 | |||
665 | 109 | NetworkManager will use the kernel to configure WoWLAN on the hardware level. | ||
666 | 110 | The *iw* utility provides a simple way to verify the right option is configured. | ||
667 | 111 | |||
668 | 112 | If you don't have the *iw* utility on your system you can install it with the | ||
669 | 113 | *wireless-tools* snap. | ||
670 | 114 | |||
671 | 115 | ``` | ||
672 | 116 | $ snap install --devmode wireless-tools | ||
673 | 117 | $ sudo wireless-tools.iw phy phy0 wowlan show | ||
674 | 118 | WoWLAN is enabled: | ||
675 | 119 | * wake up on magic packet | ||
676 | 120 | ``` | ||
677 | 121 | |||
678 | 122 | See the help output of the *iw* command for more documentation and available | ||
679 | 123 | options. | ||
680 | diff --git a/hooks/configure b/hooks/configure | |||
681 | 0 | new file mode 100755 | 124 | new file mode 100755 |
682 | index 0000000..711ff60 | |||
683 | --- /dev/null | |||
684 | +++ b/hooks/configure | |||
685 | @@ -0,0 +1,98 @@ | |||
686 | 1 | #!/bin/bash | ||
687 | 2 | |||
688 | 3 | switch_wifi_powersave() { | ||
689 | 4 | path=$SNAP_DATA/conf.d/wifi-powersave.conf | ||
690 | 5 | # See https://developer.gnome.org/libnm/stable/NMSettingWireless.html#NMSettingWirelessPowersave | ||
691 | 6 | # for the meaning of the different values for the wifi.powersave option. | ||
692 | 7 | case $1 in | ||
693 | 8 | enabled) | ||
694 | 9 | cat <<EOF > $path | ||
695 | 10 | [connection] | ||
696 | 11 | wifi.powersave = 3 | ||
697 | 12 | EOF | ||
698 | 13 | ;; | ||
699 | 14 | disabled) | ||
700 | 15 | cat <<EOF > $path | ||
701 | 16 | [connection] | ||
702 | 17 | wifi.powersave = 2 | ||
703 | 18 | EOF | ||
704 | 19 | ;; | ||
705 | 20 | *) | ||
706 | 21 | echo "WARNING: invalid value '$1' supplied for wifi.powersave configuration option" | ||
707 | 22 | exit 1 | ||
708 | 23 | ;; | ||
709 | 24 | esac | ||
710 | 25 | } | ||
711 | 26 | |||
712 | 27 | switch_wifi_wake_on_wlan() { | ||
713 | 28 | value=0 | ||
714 | 29 | # See `man nm-settings` for details about those values. They | ||
715 | 30 | # correspond to the enum NMSettingWirelessWakeOnWLan defined | ||
716 | 31 | # in libnm-core. NetworkManager only allows us to set integer | ||
717 | 32 | # values here. | ||
718 | 33 | case "$1" in | ||
719 | 34 | disabled) | ||
720 | 35 | value=0 | ||
721 | 36 | ;; | ||
722 | 37 | any) | ||
723 | 38 | value=2 | ||
724 | 39 | ;; | ||
725 | 40 | disconnect) | ||
726 | 41 | value=4 | ||
727 | 42 | ;; | ||
728 | 43 | magic) | ||
729 | 44 | value=8 | ||
730 | 45 | ;; | ||
731 | 46 | gtk-rekey-failure) | ||
732 | 47 | value=16 | ||
733 | 48 | ;; | ||
734 | 49 | eap-identity-request) | ||
735 | 50 | value=32 | ||
736 | 51 | ;; | ||
737 | 52 | 4way-handshake) | ||
738 | 53 | value=64 | ||
739 | 54 | ;; | ||
740 | 55 | rfkill-release) | ||
741 | 56 | value=128 | ||
742 | 57 | ;; | ||
743 | 58 | tcp) | ||
744 | 59 | value=256 | ||
745 | 60 | ;; | ||
746 | 61 | *) | ||
747 | 62 | echo "ERROR: Invalid value provided for wifi.wake-on-wlan" | ||
748 | 63 | exit 1 | ||
749 | 64 | ;; | ||
750 | 65 | esac | ||
751 | 66 | password=$2 | ||
752 | 67 | path=$SNAP_DATA/conf.d/wifi-wowlan.conf | ||
753 | 68 | |||
754 | 69 | echo "[connection]" > $path | ||
755 | 70 | # If we don't get a value provided there is no one set in the snap | ||
756 | 71 | # configuration and we can simply leave it out here and let | ||
757 | 72 | # NetworkManager take its default one. | ||
758 | 73 | if [ -n "$value" ]; then | ||
759 | 74 | echo "wifi.wake-on-wlan=$value" >> $path | ||
760 | 75 | fi | ||
761 | 76 | if [ -n "$password" ]; then | ||
762 | 77 | echo "wifi.wake-on-wlan-password=$password" >> $path | ||
763 | 78 | fi | ||
764 | 79 | } | ||
765 | 80 | |||
766 | 81 | value="`snapctl get wifi.powersave`" | ||
767 | 82 | if [ -n "$value" ]; then | ||
768 | 83 | switch_wifi_powersave $value | ||
769 | 84 | else | ||
770 | 85 | default="disabled" | ||
771 | 86 | snapctl set wifi.powersave=$default | ||
772 | 87 | switch_wifi_powersave $default | ||
773 | 88 | fi | ||
774 | 89 | |||
775 | 90 | value=`snapctl get wifi.wake-on-wlan` | ||
776 | 91 | password=`snapctl get wifi.wake-on-wlan-password` | ||
777 | 92 | if [ -n "$value" ] || [ -n "$password" ]; then | ||
778 | 93 | switch_wifi_wake_on_wlan $value "$password" | ||
779 | 94 | else | ||
780 | 95 | snapctl set wifi.wake-on-wlan=disabled | ||
781 | 96 | snapctl set wifi.wake-on-wlan-password= | ||
782 | 97 | switch_wifi_wake_on_wlan disabled "" | ||
783 | 98 | fi | ||
784 | diff --git a/run-tests.sh b/run-tests.sh | |||
785 | index b4ce91b..ff36c9b 100755 | |||
786 | --- a/run-tests.sh | |||
787 | +++ b/run-tests.sh | |||
788 | @@ -1,4 +1,8 @@ | |||
789 | 1 | <<<<<<< run-tests.sh | ||
790 | 1 | #!/bin/sh | 2 | #!/bin/sh |
791 | 3 | ======= | ||
792 | 4 | #!/bin/bash | ||
793 | 5 | >>>>>>> run-tests.sh | ||
794 | 2 | # | 6 | # |
795 | 3 | # Copyright (C) 2016 Canonical Ltd | 7 | # Copyright (C) 2016 Canonical Ltd |
796 | 4 | # | 8 | # |
797 | @@ -14,6 +18,7 @@ | |||
798 | 14 | # You should have received a copy of the GNU General Public License | 18 | # You should have received a copy of the GNU General Public License |
799 | 15 | # along with this program. If not, see <http://www.gnu.org/licenses/>. | 19 | # along with this program. If not, see <http://www.gnu.org/licenses/>. |
800 | 16 | 20 | ||
801 | 21 | <<<<<<< run-tests.sh | ||
802 | 17 | set -ex | 22 | set -ex |
803 | 18 | 23 | ||
804 | 19 | image_name=ubuntu-core-16.img | 24 | image_name=ubuntu-core-16.img |
805 | @@ -21,10 +26,18 @@ channel=stable | |||
806 | 21 | spread_opts= | 26 | spread_opts= |
807 | 22 | force_new_image=0 | 27 | force_new_image=0 |
808 | 23 | test_from_channel=0 | 28 | test_from_channel=0 |
809 | 29 | ======= | ||
810 | 30 | set -e | ||
811 | 31 | |||
812 | 32 | # ============================================================================== | ||
813 | 33 | # This has to be in sync with the tests-extras/run-tests.sh script | ||
814 | 34 | # functionalities. | ||
815 | 35 | >>>>>>> run-tests.sh | ||
816 | 24 | 36 | ||
817 | 25 | show_help() { | 37 | show_help() { |
818 | 26 | echo "Usage: run-tests.sh [OPTIONS]" | 38 | echo "Usage: run-tests.sh [OPTIONS]" |
819 | 27 | echo | 39 | echo |
820 | 40 | <<<<<<< run-tests.sh | ||
821 | 28 | echo "optional arguments:" | 41 | echo "optional arguments:" |
822 | 29 | echo " --help Show this help message and exit" | 42 | echo " --help Show this help message and exit" |
823 | 30 | echo " --channel=<channel> Select another channel to build the base image from (default: $channel)" | 43 | echo " --channel=<channel> Select another channel to build the base image from (default: $channel)" |
824 | @@ -82,3 +95,53 @@ if [ $test_from_channel -eq 1 ] ; then | |||
825 | 82 | export SNAP_CHANNEL=$channel | 95 | export SNAP_CHANNEL=$channel |
826 | 83 | fi | 96 | fi |
827 | 84 | spread $spread_opts | 97 | spread $spread_opts |
828 | 98 | ======= | ||
829 | 99 | echo "This is fetch & forget script and what it does is to fetch the" | ||
830 | 100 | echo "tests-extras repository and execute the run-tests.sh script from" | ||
831 | 101 | echo "there passing arguments as-is." | ||
832 | 102 | echo | ||
833 | 103 | echo "optional arguments:" | ||
834 | 104 | echo " --help Show this help message and exit" | ||
835 | 105 | echo " --channel Select another channel to build the base image from (default: stable)" | ||
836 | 106 | echo " --snap Extra snap to install" | ||
837 | 107 | echo " --debug Enable verbose debugging output" | ||
838 | 108 | echo " --test-from-channel Pull network-manager snap from the specified channel instead of building it from source" | ||
839 | 109 | echo " --force-new-image Force generating a new image used for testing" | ||
840 | 110 | } | ||
841 | 111 | |||
842 | 112 | # ============================================================================== | ||
843 | 113 | # This is fetch & forget script and what it does is to fetch the tests-extras | ||
844 | 114 | # repo and execute the run-tests.sh script from there passing arguments as-is. | ||
845 | 115 | |||
846 | 116 | # 0. Display help w/o fetching anything | ||
847 | 117 | |||
848 | 118 | if [ "$1" == "--help" ]; then | ||
849 | 119 | show_help | ||
850 | 120 | exit 0 | ||
851 | 121 | fi | ||
852 | 122 | |||
853 | 123 | # 1. Fetch | ||
854 | 124 | |||
855 | 125 | TESTS_EXTRAS_URL="https://git.launchpad.net/~snappy-hwe-team/snappy-hwe-snaps/+git/tests-extras" | ||
856 | 126 | TESTS_EXTRAS_PATH="tests-extras" | ||
857 | 127 | |||
858 | 128 | # delete the fetched content on ctrl-c | ||
859 | 129 | trap 'cd .. && if [ -d "$TESTS_EXTRAS_PATH" ]; then rm -rf $TESTS_EXTRAS_PATH; fi' INT TERM EXIT | ||
860 | 130 | |||
861 | 131 | if [ -d "$TESTS_EXTRAS_PATH" ]; then | ||
862 | 132 | rm -rf $TESTS_EXTRAS_PATH | ||
863 | 133 | fi | ||
864 | 134 | |||
865 | 135 | echo "INFO: Fetching tests-extras scripts into $TESTS_EXTRAS_PATH ..." | ||
866 | 136 | (git clone -b master $TESTS_EXTRAS_URL $TESTS_EXTRAS_PATH >/dev/null 2>&1) | ||
867 | 137 | if [ $? -ne 0 ]; then | ||
868 | 138 | echo "ERROR: Failed to fetch the $TESTS_EXTRAS_URL repo, exiting.." | ||
869 | 139 | exit 1 | ||
870 | 140 | fi | ||
871 | 141 | |||
872 | 142 | # 2. Execute | ||
873 | 143 | cd $TESTS_EXTRAS_PATH && ./tests-runner.sh $@ | ||
874 | 144 | |||
875 | 145 | # 3. Done; clean-up | ||
876 | 146 | cd .. && if [ -d "$TESTS_EXTRAS_PATH" ]; then rm -rf $TESTS_EXTRAS_PATH; fi | ||
877 | 147 | >>>>>>> run-tests.sh | ||
878 | diff --git a/setup/gui/icon.svg b/setup/gui/icon.svg | |||
879 | 85 | new file mode 100644 | 148 | new file mode 100644 |
880 | index 0000000..019ffb2 | |||
881 | --- /dev/null | |||
882 | +++ b/setup/gui/icon.svg | |||
883 | @@ -0,0 +1,2466 @@ | |||
884 | 1 | <?xml version="1.0" encoding="UTF-8" standalone="no"?> | ||
885 | 2 | <!-- Created with Inkscape (http://www.inkscape.org/) --> | ||
886 | 3 | <svg | ||
887 | 4 | xmlns:dc="http://purl.org/dc/elements/1.1/" | ||
888 | 5 | xmlns:cc="http://web.resource.org/cc/" | ||
889 | 6 | xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" | ||
890 | 7 | xmlns:svg="http://www.w3.org/2000/svg" | ||
891 | 8 | xmlns="http://www.w3.org/2000/svg" | ||
892 | 9 | xmlns:xlink="http://www.w3.org/1999/xlink" | ||
893 | 10 | xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" | ||
894 | 11 | xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" | ||
895 | 12 | width="48.000000px" | ||
896 | 13 | height="48.000000px" | ||
897 | 14 | id="svg2327" | ||
898 | 15 | sodipodi:version="0.32" | ||
899 | 16 | inkscape:version="0.45" | ||
900 | 17 | sodipodi:docbase="/home/dobey/Projects/gnome-icon-theme/scalable/status" | ||
901 | 18 | sodipodi:docname="network-idle.svg" | ||
902 | 19 | inkscape:output_extension="org.inkscape.output.svg.inkscape"> | ||
903 | 20 | <defs | ||
904 | 21 | id="defs3"> | ||
905 | 22 | <linearGradient | ||
906 | 23 | id="linearGradient7670"> | ||
907 | 24 | <stop | ||
908 | 25 | style="stop-color:#3465a4;stop-opacity:1" | ||
909 | 26 | offset="0" | ||
910 | 27 | id="stop7672" /> | ||
911 | 28 | <stop | ||
912 | 29 | style="stop-color:#204a87;stop-opacity:1" | ||
913 | 30 | offset="1" | ||
914 | 31 | id="stop7674" /> | ||
915 | 32 | </linearGradient> | ||
916 | 33 | <linearGradient | ||
917 | 34 | inkscape:collect="always" | ||
918 | 35 | id="linearGradient2307"> | ||
919 | 36 | <stop | ||
920 | 37 | style="stop-color:#5a7aa4;stop-opacity:1;" | ||
921 | 38 | offset="0" | ||
922 | 39 | id="stop2309" /> | ||
923 | 40 | <stop | ||
924 | 41 | style="stop-color:#5a7aa4;stop-opacity:0;" | ||
925 | 42 | offset="1" | ||
926 | 43 | id="stop2311" /> | ||
927 | 44 | </linearGradient> | ||
928 | 45 | <linearGradient | ||
929 | 46 | id="linearGradient11400"> | ||
930 | 47 | <stop | ||
931 | 48 | id="stop11402" | ||
932 | 49 | offset="0" | ||
933 | 50 | style="stop-color:#000000;stop-opacity:1;" /> | ||
934 | 51 | <stop | ||
935 | 52 | id="stop11404" | ||
936 | 53 | offset="1" | ||
937 | 54 | style="stop-color:#000000;stop-opacity:0;" /> | ||
938 | 55 | </linearGradient> | ||
939 | 56 | <linearGradient | ||
940 | 57 | id="linearGradient6240" | ||
941 | 58 | inkscape:collect="always"> | ||
942 | 59 | <stop | ||
943 | 60 | id="stop6242" | ||
944 | 61 | offset="0" | ||
945 | 62 | style="stop-color:#ffffff;stop-opacity:1;" /> | ||
946 | 63 | <stop | ||
947 | 64 | id="stop6244" | ||
948 | 65 | offset="1" | ||
949 | 66 | style="stop-color:#ffffff;stop-opacity:0;" /> | ||
950 | 67 | </linearGradient> | ||
951 | 68 | <linearGradient | ||
952 | 69 | id="linearGradient5137"> | ||
953 | 70 | <stop | ||
954 | 71 | id="stop5139" | ||
955 | 72 | offset="0" | ||
956 | 73 | style="stop-color:#eeeeec;stop-opacity:1;" /> | ||
957 | 74 | <stop | ||
958 | 75 | id="stop5141" | ||
959 | 76 | offset="1" | ||
960 | 77 | style="stop-color:#e6e6e3;stop-opacity:1;" /> | ||
961 | 78 | </linearGradient> | ||
962 | 79 | <linearGradient | ||
963 | 80 | id="linearGradient5225" | ||
964 | 81 | inkscape:collect="always"> | ||
965 | 82 | <stop | ||
966 | 83 | id="stop5227" | ||
967 | 84 | offset="0" | ||
968 | 85 | style="stop-color:black;stop-opacity:1;" /> | ||
969 | 86 | <stop | ||
970 | 87 | id="stop5229" | ||
971 | 88 | offset="1" | ||
972 | 89 | style="stop-color:black;stop-opacity:0;" /> | ||
973 | 90 | </linearGradient> | ||
974 | 91 | <linearGradient | ||
975 | 92 | id="linearGradient3899" | ||
976 | 93 | inkscape:collect="always"> | ||
977 | 94 | <stop | ||
978 | 95 | id="stop3901" | ||
979 | 96 | offset="0" | ||
980 | 97 | style="stop-color:#eeeeec" /> | ||
981 | 98 | <stop | ||
982 | 99 | id="stop3903" | ||
983 | 100 | offset="1" | ||
984 | 101 | style="stop-color:#d3d7cf" /> | ||
985 | 102 | </linearGradient> | ||
986 | 103 | <linearGradient | ||
987 | 104 | id="linearGradient3907"> | ||
988 | 105 | <stop | ||
989 | 106 | id="stop3909" | ||
990 | 107 | offset="0" | ||
991 | 108 | style="stop-color:#ffffff;stop-opacity:1;" /> | ||
992 | 109 | <stop | ||
993 | 110 | id="stop3911" | ||
994 | 111 | offset="1" | ||
995 | 112 | style="stop-color:#ffffff;stop-opacity:0;" /> | ||
996 | 113 | </linearGradient> | ||
997 | 114 | <linearGradient | ||
998 | 115 | id="linearGradient4196"> | ||
999 | 116 | <stop | ||
1000 | 117 | id="stop4198" | ||
1001 | 118 | offset="0" | ||
1002 | 119 | style="stop-color:black;stop-opacity:1;" /> | ||
1003 | 120 | <stop | ||
1004 | 121 | id="stop4200" | ||
1005 | 122 | offset="1" | ||
1006 | 123 | style="stop-color:black;stop-opacity:0;" /> | ||
1007 | 124 | </linearGradient> | ||
1008 | 125 | <linearGradient | ||
1009 | 126 | inkscape:collect="always" | ||
1010 | 127 | id="linearGradient5060"> | ||
1011 | 128 | <stop | ||
1012 | 129 | style="stop-color:black;stop-opacity:1;" | ||
1013 | 130 | offset="0" | ||
1014 | 131 | id="stop5062" /> | ||
1015 | 132 | <stop | ||
1016 | 133 | style="stop-color:black;stop-opacity:0;" | ||
1017 | 134 | offset="1" | ||
1018 | 135 | id="stop5064" /> | ||
1019 | 136 | </linearGradient> | ||
1020 | 137 | <radialGradient | ||
1021 | 138 | r="19.5" | ||
1022 | 139 | fy="47.045319" | ||
1023 | 140 | fx="20.913568" | ||
1024 | 141 | cy="47.045319" | ||
1025 | 142 | cx="20.913568" | ||
1026 | 143 | gradientTransform="matrix(1.382603,3.581398e-5,0,0.171503,4.270316,21.0972)" | ||
1027 | 144 | gradientUnits="userSpaceOnUse" | ||
1028 | 145 | id="radialGradient3304" | ||
1029 | 146 | xlink:href="#linearGradient3907" | ||
1030 | 147 | inkscape:collect="always" /> | ||
1031 | 148 | <radialGradient | ||
1032 | 149 | r="19.5" | ||
1033 | 150 | fy="47.045319" | ||
1034 | 151 | fx="20.913568" | ||
1035 | 152 | cy="47.045319" | ||
1036 | 153 | cx="20.913568" | ||
1037 | 154 | gradientTransform="matrix(1.382603,3.581398e-5,0,0.171503,4.270316,21.0972)" | ||
1038 | 155 | gradientUnits="userSpaceOnUse" | ||
1039 | 156 | id="radialGradient3302" | ||
1040 | 157 | xlink:href="#linearGradient3907" | ||
1041 | 158 | inkscape:collect="always" /> | ||
1042 | 159 | <radialGradient | ||
1043 | 160 | r="19.5" | ||
1044 | 161 | fy="47.045319" | ||
1045 | 162 | fx="20.913568" | ||
1046 | 163 | cy="47.045319" | ||
1047 | 164 | cx="20.913568" | ||
1048 | 165 | gradientTransform="matrix(1.382603,3.581398e-5,0,0.171503,4.270316,21.0972)" | ||
1049 | 166 | gradientUnits="userSpaceOnUse" | ||
1050 | 167 | id="radialGradient3300" | ||
1051 | 168 | xlink:href="#linearGradient3907" | ||
1052 | 169 | inkscape:collect="always" /> | ||
1053 | 170 | <radialGradient | ||
1054 | 171 | r="19.5" | ||
1055 | 172 | fy="47.045319" | ||
1056 | 173 | fx="20.913568" | ||
1057 | 174 | cy="47.045319" | ||
1058 | 175 | cx="20.913568" | ||
1059 | 176 | gradientTransform="matrix(1.382603,3.581398e-5,0,0.171503,4.270316,21.0972)" | ||
1060 | 177 | gradientUnits="userSpaceOnUse" | ||
1061 | 178 | id="radialGradient3298" | ||
1062 | 179 | xlink:href="#linearGradient3907" | ||
1063 | 180 | inkscape:collect="always" /> | ||
1064 | 181 | <radialGradient | ||
1065 | 182 | r="19.5" | ||
1066 | 183 | fy="47.045319" | ||
1067 | 184 | fx="20.913568" | ||
1068 | 185 | cy="47.045319" | ||
1069 | 186 | cx="20.913568" | ||
1070 | 187 | gradientTransform="matrix(1.382603,3.581398e-5,0,0.171503,4.270316,21.0972)" | ||
1071 | 188 | gradientUnits="userSpaceOnUse" | ||
1072 | 189 | id="radialGradient3296" | ||
1073 | 190 | xlink:href="#linearGradient3907" | ||
1074 | 191 | inkscape:collect="always" /> | ||
1075 | 192 | <radialGradient | ||
1076 | 193 | r="19.5" | ||
1077 | 194 | fy="47.045319" | ||
1078 | 195 | fx="20.913568" | ||
1079 | 196 | cy="47.045319" | ||
1080 | 197 | cx="20.913568" | ||
1081 | 198 | gradientTransform="matrix(1.382603,3.581398e-5,0,0.171503,4.270316,21.0972)" | ||
1082 | 199 | gradientUnits="userSpaceOnUse" | ||
1083 | 200 | id="radialGradient3294" | ||
1084 | 201 | xlink:href="#linearGradient3907" | ||
1085 | 202 | inkscape:collect="always" /> | ||
1086 | 203 | <radialGradient | ||
1087 | 204 | r="19.5" | ||
1088 | 205 | fy="47.045319" | ||
1089 | 206 | fx="20.913568" | ||
1090 | 207 | cy="47.045319" | ||
1091 | 208 | cx="20.913568" | ||
1092 | 209 | gradientTransform="matrix(1.382603,3.581398e-5,0,0.171503,4.270316,21.0972)" | ||
1093 | 210 | gradientUnits="userSpaceOnUse" | ||
1094 | 211 | id="radialGradient3292" | ||
1095 | 212 | xlink:href="#linearGradient3907" | ||
1096 | 213 | inkscape:collect="always" /> | ||
1097 | 214 | <radialGradient | ||
1098 | 215 | r="19.5" | ||
1099 | 216 | fy="47.045319" | ||
1100 | 217 | fx="20.913568" | ||
1101 | 218 | cy="47.045319" | ||
1102 | 219 | cx="20.913568" | ||
1103 | 220 | gradientTransform="matrix(1.382603,3.581398e-5,0,0.171503,-0.72968,21.0972)" | ||
1104 | 221 | gradientUnits="userSpaceOnUse" | ||
1105 | 222 | id="radialGradient3276" | ||
1106 | 223 | xlink:href="#linearGradient3907" | ||
1107 | 224 | inkscape:collect="always" /> | ||
1108 | 225 | <radialGradient | ||
1109 | 226 | r="19.5" | ||
1110 | 227 | fy="47.045319" | ||
1111 | 228 | fx="20.913568" | ||
1112 | 229 | cy="47.045319" | ||
1113 | 230 | cx="20.913568" | ||
1114 | 231 | gradientTransform="matrix(1.382603,3.581398e-5,0,0.171503,-0.72968,21.0972)" | ||
1115 | 232 | gradientUnits="userSpaceOnUse" | ||
1116 | 233 | id="radialGradient3274" | ||
1117 | 234 | xlink:href="#linearGradient3907" | ||
1118 | 235 | inkscape:collect="always" /> | ||
1119 | 236 | <radialGradient | ||
1120 | 237 | r="19.5" | ||
1121 | 238 | fy="47.045319" | ||
1122 | 239 | fx="20.913568" | ||
1123 | 240 | cy="47.045319" | ||
1124 | 241 | cx="20.913568" | ||
1125 | 242 | gradientTransform="matrix(1.382603,3.581398e-5,0,0.171503,-0.72968,21.0972)" | ||
1126 | 243 | gradientUnits="userSpaceOnUse" | ||
1127 | 244 | id="radialGradient3272" | ||
1128 | 245 | xlink:href="#linearGradient3907" | ||
1129 | 246 | inkscape:collect="always" /> | ||
1130 | 247 | <radialGradient | ||
1131 | 248 | r="19.5" | ||
1132 | 249 | fy="47.045319" | ||
1133 | 250 | fx="20.913568" | ||
1134 | 251 | cy="47.045319" | ||
1135 | 252 | cx="20.913568" | ||
1136 | 253 | gradientTransform="matrix(1.382603,3.581398e-5,0,0.171503,-0.72968,21.0972)" | ||
1137 | 254 | gradientUnits="userSpaceOnUse" | ||
1138 | 255 | id="radialGradient3270" | ||
1139 | 256 | xlink:href="#linearGradient3907" | ||
1140 | 257 | inkscape:collect="always" /> | ||
1141 | 258 | <radialGradient | ||
1142 | 259 | r="19.5" | ||
1143 | 260 | fy="47.045319" | ||
1144 | 261 | fx="20.913568" | ||
1145 | 262 | cy="47.045319" | ||
1146 | 263 | cx="20.913568" | ||
1147 | 264 | gradientTransform="matrix(1.382603,3.581398e-5,0,0.171503,-0.72968,21.0972)" | ||
1148 | 265 | gradientUnits="userSpaceOnUse" | ||
1149 | 266 | id="radialGradient3268" | ||
1150 | 267 | xlink:href="#linearGradient3907" | ||
1151 | 268 | inkscape:collect="always" /> | ||
1152 | 269 | <radialGradient | ||
1153 | 270 | r="19.5" | ||
1154 | 271 | fy="47.045319" | ||
1155 | 272 | fx="20.913568" | ||
1156 | 273 | cy="47.045319" | ||
1157 | 274 | cx="20.913568" | ||
1158 | 275 | gradientTransform="matrix(1.382603,3.581398e-5,0,0.171503,-0.72968,21.0972)" | ||
1159 | 276 | gradientUnits="userSpaceOnUse" | ||
1160 | 277 | id="radialGradient3266" | ||
1161 | 278 | xlink:href="#linearGradient3907" | ||
1162 | 279 | inkscape:collect="always" /> | ||
1163 | 280 | <radialGradient | ||
1164 | 281 | r="19.5" | ||
1165 | 282 | fy="47.045319" | ||
1166 | 283 | fx="20.913568" | ||
1167 | 284 | cy="47.045319" | ||
1168 | 285 | cx="20.913568" | ||
1169 | 286 | gradientTransform="matrix(1.382603,3.581398e-5,0,0.171503,-0.72968,21.0972)" | ||
1170 | 287 | gradientUnits="userSpaceOnUse" | ||
1171 | 288 | id="radialGradient3264" | ||
1172 | 289 | xlink:href="#linearGradient3907" | ||
1173 | 290 | inkscape:collect="always" /> | ||
1174 | 291 | <radialGradient | ||
1175 | 292 | r="19.5" | ||
1176 | 293 | fy="47.045319" | ||
1177 | 294 | fx="20.913568" | ||
1178 | 295 | cy="47.045319" | ||
1179 | 296 | cx="20.913568" | ||
1180 | 297 | gradientTransform="matrix(1.382603,3.581398e-5,0,0.171503,-8.729684,21.0972)" | ||
1181 | 298 | gradientUnits="userSpaceOnUse" | ||
1182 | 299 | id="radialGradient3155" | ||
1183 | 300 | xlink:href="#linearGradient3907" | ||
1184 | 301 | inkscape:collect="always" /> | ||
1185 | 302 | <radialGradient | ||
1186 | 303 | r="19.5" | ||
1187 | 304 | fy="47.045319" | ||
1188 | 305 | fx="20.913568" | ||
1189 | 306 | cy="47.045319" | ||
1190 | 307 | cx="20.913568" | ||
1191 | 308 | gradientTransform="matrix(1.382603,3.581398e-5,0,0.171503,-8.729684,21.0972)" | ||
1192 | 309 | gradientUnits="userSpaceOnUse" | ||
1193 | 310 | id="radialGradient3158" | ||
1194 | 311 | xlink:href="#linearGradient3907" | ||
1195 | 312 | inkscape:collect="always" /> | ||
1196 | 313 | <radialGradient | ||
1197 | 314 | r="19.5" | ||
1198 | 315 | fy="47.045319" | ||
1199 | 316 | fx="20.913568" | ||
1200 | 317 | cy="47.045319" | ||
1201 | 318 | cx="20.913568" | ||
1202 | 319 | gradientTransform="matrix(1.382603,3.581398e-5,0,0.171503,-8.729684,21.0972)" | ||
1203 | 320 | gradientUnits="userSpaceOnUse" | ||
1204 | 321 | id="radialGradient3161" | ||
1205 | 322 | xlink:href="#linearGradient3907" | ||
1206 | 323 | inkscape:collect="always" /> | ||
1207 | 324 | <radialGradient | ||
1208 | 325 | r="19.5" | ||
1209 | 326 | fy="47.045319" | ||
1210 | 327 | fx="20.913568" | ||
1211 | 328 | cy="47.045319" | ||
1212 | 329 | cx="20.913568" | ||
1213 | 330 | gradientTransform="matrix(1.382603,3.581398e-5,0,0.171503,-8.729684,21.0972)" | ||
1214 | 331 | gradientUnits="userSpaceOnUse" | ||
1215 | 332 | id="radialGradient3164" | ||
1216 | 333 | xlink:href="#linearGradient3907" | ||
1217 | 334 | inkscape:collect="always" /> | ||
1218 | 335 | <radialGradient | ||
1219 | 336 | r="19.5" | ||
1220 | 337 | fy="47.045319" | ||
1221 | 338 | fx="20.913568" | ||
1222 | 339 | cy="47.045319" | ||
1223 | 340 | cx="20.913568" | ||
1224 | 341 | gradientTransform="matrix(1.382603,3.581398e-5,0,0.171503,-8.729684,21.0972)" | ||
1225 | 342 | gradientUnits="userSpaceOnUse" | ||
1226 | 343 | id="radialGradient3167" | ||
1227 | 344 | xlink:href="#linearGradient3907" | ||
1228 | 345 | inkscape:collect="always" /> | ||
1229 | 346 | <radialGradient | ||
1230 | 347 | r="19.5" | ||
1231 | 348 | fy="47.045319" | ||
1232 | 349 | fx="20.913568" | ||
1233 | 350 | cy="47.045319" | ||
1234 | 351 | cx="20.913568" | ||
1235 | 352 | gradientTransform="matrix(1.382603,3.581398e-5,0,0.171503,-8.729684,21.0972)" | ||
1236 | 353 | gradientUnits="userSpaceOnUse" | ||
1237 | 354 | id="radialGradient3170" | ||
1238 | 355 | xlink:href="#linearGradient3907" | ||
1239 | 356 | inkscape:collect="always" /> | ||
1240 | 357 | <radialGradient | ||
1241 | 358 | r="19.5" | ||
1242 | 359 | fy="47.045319" | ||
1243 | 360 | fx="20.913568" | ||
1244 | 361 | cy="47.045319" | ||
1245 | 362 | cx="20.913568" | ||
1246 | 363 | gradientTransform="matrix(1.382603,3.581398e-5,0,0.171503,-8.729684,21.0972)" | ||
1247 | 364 | gradientUnits="userSpaceOnUse" | ||
1248 | 365 | id="radialGradient3173" | ||
1249 | 366 | xlink:href="#linearGradient3907" | ||
1250 | 367 | inkscape:collect="always" /> | ||
1251 | 368 | <radialGradient | ||
1252 | 369 | r="19.5" | ||
1253 | 370 | fy="47.045319" | ||
1254 | 371 | fx="20.913568" | ||
1255 | 372 | cy="47.045319" | ||
1256 | 373 | cx="20.913568" | ||
1257 | 374 | gradientTransform="matrix(1.382603,3.581398e-5,0,0.171503,-8.729684,21.0972)" | ||
1258 | 375 | gradientUnits="userSpaceOnUse" | ||
1259 | 376 | id="radialGradient3176" | ||
1260 | 377 | xlink:href="#linearGradient3907" | ||
1261 | 378 | inkscape:collect="always" /> | ||
1262 | 379 | <radialGradient | ||
1263 | 380 | r="19.5" | ||
1264 | 381 | fy="47.045319" | ||
1265 | 382 | fx="20.913568" | ||
1266 | 383 | cy="47.045319" | ||
1267 | 384 | cx="20.913568" | ||
1268 | 385 | gradientTransform="matrix(1.382603,3.581398e-5,0,0.171503,-8.729684,21.0972)" | ||
1269 | 386 | gradientUnits="userSpaceOnUse" | ||
1270 | 387 | id="radialGradient3182" | ||
1271 | 388 | xlink:href="#linearGradient3907" | ||
1272 | 389 | inkscape:collect="always" /> | ||
1273 | 390 | <radialGradient | ||
1274 | 391 | r="19.5" | ||
1275 | 392 | fy="47.045319" | ||
1276 | 393 | fx="20.913568" | ||
1277 | 394 | cy="47.045319" | ||
1278 | 395 | cx="20.913568" | ||
1279 | 396 | gradientTransform="matrix(1.382603,3.581398e-5,0,0.171503,-8.729684,21.0972)" | ||
1280 | 397 | gradientUnits="userSpaceOnUse" | ||
1281 | 398 | id="radialGradient3185" | ||
1282 | 399 | xlink:href="#linearGradient3907" | ||
1283 | 400 | inkscape:collect="always" /> | ||
1284 | 401 | <radialGradient | ||
1285 | 402 | r="19.5" | ||
1286 | 403 | fy="47.045319" | ||
1287 | 404 | fx="20.913568" | ||
1288 | 405 | cy="47.045319" | ||
1289 | 406 | cx="20.913568" | ||
1290 | 407 | gradientTransform="matrix(1.382603,3.581398e-5,0,0.171503,-8.729684,21.0972)" | ||
1291 | 408 | gradientUnits="userSpaceOnUse" | ||
1292 | 409 | id="radialGradient3188" | ||
1293 | 410 | xlink:href="#linearGradient3907" | ||
1294 | 411 | inkscape:collect="always" /> | ||
1295 | 412 | <radialGradient | ||
1296 | 413 | r="19.5" | ||
1297 | 414 | fy="47.045319" | ||
1298 | 415 | fx="20.913568" | ||
1299 | 416 | cy="47.045319" | ||
1300 | 417 | cx="20.913568" | ||
1301 | 418 | gradientTransform="matrix(1.382603,3.581398e-5,0,0.171503,-8.729684,21.0972)" | ||
1302 | 419 | gradientUnits="userSpaceOnUse" | ||
1303 | 420 | id="radialGradient3191" | ||
1304 | 421 | xlink:href="#linearGradient3907" | ||
1305 | 422 | inkscape:collect="always" /> | ||
1306 | 423 | <radialGradient | ||
1307 | 424 | r="19.5" | ||
1308 | 425 | fy="47.045319" | ||
1309 | 426 | fx="20.913568" | ||
1310 | 427 | cy="47.045319" | ||
1311 | 428 | cx="20.913568" | ||
1312 | 429 | gradientTransform="matrix(1.382603,3.581398e-5,0,0.171503,-8.729684,21.0972)" | ||
1313 | 430 | gradientUnits="userSpaceOnUse" | ||
1314 | 431 | id="radialGradient3194" | ||
1315 | 432 | xlink:href="#linearGradient3907" | ||
1316 | 433 | inkscape:collect="always" /> | ||
1317 | 434 | <radialGradient | ||
1318 | 435 | r="19.5" | ||
1319 | 436 | fy="47.045319" | ||
1320 | 437 | fx="20.913568" | ||
1321 | 438 | cy="47.045319" | ||
1322 | 439 | cx="20.913568" | ||
1323 | 440 | gradientTransform="matrix(1.382603,3.581398e-5,0,0.171503,-8.729684,21.0972)" | ||
1324 | 441 | gradientUnits="userSpaceOnUse" | ||
1325 | 442 | id="radialGradient3197" | ||
1326 | 443 | xlink:href="#linearGradient3907" | ||
1327 | 444 | inkscape:collect="always" /> | ||
1328 | 445 | <radialGradient | ||
1329 | 446 | r="19.5" | ||
1330 | 447 | fy="47.045319" | ||
1331 | 448 | fx="20.913568" | ||
1332 | 449 | cy="47.045319" | ||
1333 | 450 | cx="20.913568" | ||
1334 | 451 | gradientTransform="matrix(1.382603,3.581398e-5,0,0.171503,-8.729684,21.0972)" | ||
1335 | 452 | gradientUnits="userSpaceOnUse" | ||
1336 | 453 | id="radialGradient3200" | ||
1337 | 454 | xlink:href="#linearGradient3907" | ||
1338 | 455 | inkscape:collect="always" /> | ||
1339 | 456 | <radialGradient | ||
1340 | 457 | r="19.5" | ||
1341 | 458 | fy="47.045319" | ||
1342 | 459 | fx="20.913568" | ||
1343 | 460 | cy="47.045319" | ||
1344 | 461 | cx="20.913568" | ||
1345 | 462 | gradientTransform="matrix(1.382603,3.581398e-5,0,0.171503,-8.729684,21.0972)" | ||
1346 | 463 | gradientUnits="userSpaceOnUse" | ||
1347 | 464 | id="radialGradient3203" | ||
1348 | 465 | xlink:href="#linearGradient3907" | ||
1349 | 466 | inkscape:collect="always" /> | ||
1350 | 467 | <radialGradient | ||
1351 | 468 | r="19.5" | ||
1352 | 469 | fy="47.045319" | ||
1353 | 470 | fx="20.913568" | ||
1354 | 471 | cy="47.045319" | ||
1355 | 472 | cx="20.913568" | ||
1356 | 473 | gradientTransform="matrix(1.382603,3.581398e-5,0,0.171503,-8.729684,21.0972)" | ||
1357 | 474 | gradientUnits="userSpaceOnUse" | ||
1358 | 475 | id="radialGradient3206" | ||
1359 | 476 | xlink:href="#linearGradient3907" | ||
1360 | 477 | inkscape:collect="always" /> | ||
1361 | 478 | <radialGradient | ||
1362 | 479 | r="19.5" | ||
1363 | 480 | fy="47.045319" | ||
1364 | 481 | fx="20.913568" | ||
1365 | 482 | cy="47.045319" | ||
1366 | 483 | cx="20.913568" | ||
1367 | 484 | gradientTransform="matrix(1.382603,3.581398e-5,0,0.171503,-8.729684,21.0972)" | ||
1368 | 485 | gradientUnits="userSpaceOnUse" | ||
1369 | 486 | id="radialGradient3209" | ||
1370 | 487 | xlink:href="#linearGradient3907" | ||
1371 | 488 | inkscape:collect="always" /> | ||
1372 | 489 | <radialGradient | ||
1373 | 490 | r="19.5" | ||
1374 | 491 | fy="47.045319" | ||
1375 | 492 | fx="20.913568" | ||
1376 | 493 | cy="47.045319" | ||
1377 | 494 | cx="20.913568" | ||
1378 | 495 | gradientTransform="matrix(1.382603,3.581398e-5,0,0.171503,-8.729684,21.0972)" | ||
1379 | 496 | gradientUnits="userSpaceOnUse" | ||
1380 | 497 | id="radialGradient3212" | ||
1381 | 498 | xlink:href="#linearGradient3907" | ||
1382 | 499 | inkscape:collect="always" /> | ||
1383 | 500 | <radialGradient | ||
1384 | 501 | r="19.5" | ||
1385 | 502 | fy="47.045319" | ||
1386 | 503 | fx="20.913568" | ||
1387 | 504 | cy="47.045319" | ||
1388 | 505 | cx="20.913568" | ||
1389 | 506 | gradientTransform="matrix(1.382603,3.581398e-5,0,0.171503,-8.729684,21.0972)" | ||
1390 | 507 | gradientUnits="userSpaceOnUse" | ||
1391 | 508 | id="radialGradient3215" | ||
1392 | 509 | xlink:href="#linearGradient3907" | ||
1393 | 510 | inkscape:collect="always" /> | ||
1394 | 511 | <radialGradient | ||
1395 | 512 | r="19.5" | ||
1396 | 513 | fy="47.045319" | ||
1397 | 514 | fx="20.913568" | ||
1398 | 515 | cy="47.045319" | ||
1399 | 516 | cx="20.913568" | ||
1400 | 517 | gradientTransform="matrix(1.382603,3.581398e-5,0,0.171503,-8.729684,21.0972)" | ||
1401 | 518 | gradientUnits="userSpaceOnUse" | ||
1402 | 519 | id="radialGradient3218" | ||
1403 | 520 | xlink:href="#linearGradient3907" | ||
1404 | 521 | inkscape:collect="always" /> | ||
1405 | 522 | <radialGradient | ||
1406 | 523 | r="19.5" | ||
1407 | 524 | fy="47.045319" | ||
1408 | 525 | fx="20.913568" | ||
1409 | 526 | cy="47.045319" | ||
1410 | 527 | cx="20.913568" | ||
1411 | 528 | gradientTransform="matrix(1.382603,3.581398e-5,0,0.171503,-8.729684,21.0972)" | ||
1412 | 529 | gradientUnits="userSpaceOnUse" | ||
1413 | 530 | id="radialGradient3221" | ||
1414 | 531 | xlink:href="#linearGradient3907" | ||
1415 | 532 | inkscape:collect="always" /> | ||
1416 | 533 | <radialGradient | ||
1417 | 534 | r="19.5" | ||
1418 | 535 | fy="47.045319" | ||
1419 | 536 | fx="20.913568" | ||
1420 | 537 | cy="47.045319" | ||
1421 | 538 | cx="20.913568" | ||
1422 | 539 | gradientTransform="matrix(1.382603,3.581398e-5,0,0.171503,-8.729684,21.0972)" | ||
1423 | 540 | gradientUnits="userSpaceOnUse" | ||
1424 | 541 | id="radialGradient3224" | ||
1425 | 542 | xlink:href="#linearGradient3907" | ||
1426 | 543 | inkscape:collect="always" /> | ||
1427 | 544 | <radialGradient | ||
1428 | 545 | r="19.5" | ||
1429 | 546 | fy="47.045319" | ||
1430 | 547 | fx="20.913568" | ||
1431 | 548 | cy="47.045319" | ||
1432 | 549 | cx="20.913568" | ||
1433 | 550 | gradientTransform="matrix(1.382603,3.581398e-5,0,0.171503,-8.729684,21.0972)" | ||
1434 | 551 | gradientUnits="userSpaceOnUse" | ||
1435 | 552 | id="radialGradient3230" | ||
1436 | 553 | xlink:href="#linearGradient3907" | ||
1437 | 554 | inkscape:collect="always" /> | ||
1438 | 555 | <radialGradient | ||
1439 | 556 | r="19.5" | ||
1440 | 557 | fy="47.045319" | ||
1441 | 558 | fx="20.913568" | ||
1442 | 559 | cy="47.045319" | ||
1443 | 560 | cx="20.913568" | ||
1444 | 561 | gradientTransform="matrix(1.382603,3.581398e-5,0,0.171503,-8.729684,21.0972)" | ||
1445 | 562 | gradientUnits="userSpaceOnUse" | ||
1446 | 563 | id="radialGradient3233" | ||
1447 | 564 | xlink:href="#linearGradient3907" | ||
1448 | 565 | inkscape:collect="always" /> | ||
1449 | 566 | <radialGradient | ||
1450 | 567 | r="19.5" | ||
1451 | 568 | fy="47.045319" | ||
1452 | 569 | fx="20.913568" | ||
1453 | 570 | cy="47.045319" | ||
1454 | 571 | cx="20.913568" | ||
1455 | 572 | gradientTransform="matrix(1.382603,3.581398e-5,0,0.171503,-8.729684,21.0972)" | ||
1456 | 573 | gradientUnits="userSpaceOnUse" | ||
1457 | 574 | id="radialGradient3236" | ||
1458 | 575 | xlink:href="#linearGradient3907" | ||
1459 | 576 | inkscape:collect="always" /> | ||
1460 | 577 | <radialGradient | ||
1461 | 578 | r="19.5" | ||
1462 | 579 | fy="47.045319" | ||
1463 | 580 | fx="20.913568" | ||
1464 | 581 | cy="47.045319" | ||
1465 | 582 | cx="20.913568" | ||
1466 | 583 | gradientTransform="matrix(1.382603,3.581398e-5,0,0.171503,-8.729684,21.0972)" | ||
1467 | 584 | gradientUnits="userSpaceOnUse" | ||
1468 | 585 | id="radialGradient3239" | ||
1469 | 586 | xlink:href="#linearGradient3907" | ||
1470 | 587 | inkscape:collect="always" /> | ||
1471 | 588 | <radialGradient | ||
1472 | 589 | r="19.5" | ||
1473 | 590 | fy="47.045319" | ||
1474 | 591 | fx="20.913568" | ||
1475 | 592 | cy="47.045319" | ||
1476 | 593 | cx="20.913568" | ||
1477 | 594 | gradientTransform="matrix(1.382603,3.581398e-5,0,0.171503,-8.729684,21.0972)" | ||
1478 | 595 | gradientUnits="userSpaceOnUse" | ||
1479 | 596 | id="radialGradient3242" | ||
1480 | 597 | xlink:href="#linearGradient3907" | ||
1481 | 598 | inkscape:collect="always" /> | ||
1482 | 599 | <radialGradient | ||
1483 | 600 | r="19.5" | ||
1484 | 601 | fy="47.045319" | ||
1485 | 602 | fx="20.913568" | ||
1486 | 603 | cy="47.045319" | ||
1487 | 604 | cx="20.913568" | ||
1488 | 605 | gradientTransform="matrix(1.382603,3.581398e-5,0,0.171503,-8.729684,21.0972)" | ||
1489 | 606 | gradientUnits="userSpaceOnUse" | ||
1490 | 607 | id="radialGradient3245" | ||
1491 | 608 | xlink:href="#linearGradient3907" | ||
1492 | 609 | inkscape:collect="always" /> | ||
1493 | 610 | <radialGradient | ||
1494 | 611 | r="19.5" | ||
1495 | 612 | fy="47.045319" | ||
1496 | 613 | fx="20.913568" | ||
1497 | 614 | cy="47.045319" | ||
1498 | 615 | cx="20.913568" | ||
1499 | 616 | gradientTransform="matrix(1.382603,3.581398e-5,0,0.171503,-8.729684,21.0972)" | ||
1500 | 617 | gradientUnits="userSpaceOnUse" | ||
1501 | 618 | id="radialGradient3248" | ||
1502 | 619 | xlink:href="#linearGradient3907" | ||
1503 | 620 | inkscape:collect="always" /> | ||
1504 | 621 | <linearGradient | ||
1505 | 622 | gradientTransform="matrix(0.647995,0,0,0.707655,0.734249,-1.447571)" | ||
1506 | 623 | gradientUnits="userSpaceOnUse" | ||
1507 | 624 | y2="37.9375" | ||
1508 | 625 | x2="29.125" | ||
1509 | 626 | y1="46.029419" | ||
1510 | 627 | x1="29.5" | ||
1511 | 628 | id="linearGradient3905" | ||
1512 | 629 | xlink:href="#linearGradient3899" | ||
1513 | 630 | inkscape:collect="always" /> | ||
1514 | 631 | <radialGradient | ||
1515 | 632 | r="117.14286" | ||
1516 | 633 | fy="486.64789" | ||
1517 | 634 | fx="605.71429" | ||
1518 | 635 | cy="486.64789" | ||
1519 | 636 | cx="605.71429" | ||
1520 | 637 | gradientTransform="matrix(2.774389,0,0,1.969706,-1891.633,-872.8854)" | ||
1521 | 638 | gradientUnits="userSpaceOnUse" | ||
1522 | 639 | id="radialGradient2309" | ||
1523 | 640 | xlink:href="#linearGradient5060" | ||
1524 | 641 | inkscape:collect="always" /> | ||
1525 | 642 | <radialGradient | ||
1526 | 643 | r="117.14286" | ||
1527 | 644 | fy="486.64789" | ||
1528 | 645 | fx="605.71429" | ||
1529 | 646 | cy="486.64789" | ||
1530 | 647 | cx="605.71429" | ||
1531 | 648 | gradientTransform="matrix(-2.774389,0,0,1.969706,112.7623,-872.8854)" | ||
1532 | 649 | gradientUnits="userSpaceOnUse" | ||
1533 | 650 | id="radialGradient2311" | ||
1534 | 651 | xlink:href="#linearGradient5060" | ||
1535 | 652 | inkscape:collect="always" /> | ||
1536 | 653 | <linearGradient | ||
1537 | 654 | gradientTransform="matrix(0.664512,0,0,0.651253,9.569506e-2,-1.210023)" | ||
1538 | 655 | gradientUnits="userSpaceOnUse" | ||
1539 | 656 | y2="26.039215" | ||
1540 | 657 | x2="20.156862" | ||
1541 | 658 | y1="5.0996137" | ||
1542 | 659 | x1="20.156862" | ||
1543 | 660 | id="linearGradient6246" | ||
1544 | 661 | xlink:href="#linearGradient6240" | ||
1545 | 662 | inkscape:collect="always" /> | ||
1546 | 663 | <radialGradient | ||
1547 | 664 | gradientUnits="userSpaceOnUse" | ||
1548 | 665 | gradientTransform="matrix(0.836315,0,0,0.514216,-4.024721,-3.259613e-2)" | ||
1549 | 666 | r="19.00016" | ||
1550 | 667 | fy="32.997028" | ||
1551 | 668 | fx="24.006104" | ||
1552 | 669 | cy="32.997028" | ||
1553 | 670 | cx="24.006104" | ||
1554 | 671 | id="radialGradient5239" | ||
1555 | 672 | xlink:href="#linearGradient7670" | ||
1556 | 673 | inkscape:collect="always" /> | ||
1557 | 674 | <linearGradient | ||
1558 | 675 | gradientTransform="matrix(0.648248,0,0,0.644253,0.433189,-0.740991)" | ||
1559 | 676 | y2="38.876041" | ||
1560 | 677 | x2="39.904388" | ||
1561 | 678 | y1="6.3760414" | ||
1562 | 679 | x1="17.247635" | ||
1563 | 680 | gradientUnits="userSpaceOnUse" | ||
1564 | 681 | id="linearGradient5147" | ||
1565 | 682 | xlink:href="#linearGradient5137" | ||
1566 | 683 | inkscape:collect="always" /> | ||
1567 | 684 | <linearGradient | ||
1568 | 685 | y2="43.82579" | ||
1569 | 686 | x2="31.86105" | ||
1570 | 687 | y1="37.842293" | ||
1571 | 688 | x1="31.743324" | ||
1572 | 689 | gradientTransform="matrix(1,0,0,0.992781,0,-2.718035)" | ||
1573 | 690 | gradientUnits="userSpaceOnUse" | ||
1574 | 691 | id="linearGradient2308" | ||
1575 | 692 | xlink:href="#linearGradient5137" | ||
1576 | 693 | inkscape:collect="always" /> | ||
1577 | 694 | <linearGradient | ||
1578 | 695 | y2="40.219608" | ||
1579 | 696 | x2="23.529411" | ||
1580 | 697 | y1="34.572548" | ||
1581 | 698 | x1="23.154902" | ||
1582 | 699 | gradientTransform="matrix(1.004187,0,0,1,-0.12454,-3.011765)" | ||
1583 | 700 | gradientUnits="userSpaceOnUse" | ||
1584 | 701 | id="linearGradient2310" | ||
1585 | 702 | xlink:href="#linearGradient11400" | ||
1586 | 703 | inkscape:collect="always" /> | ||
1587 | 704 | <linearGradient | ||
1588 | 705 | gradientTransform="matrix(0.654255,0,0,0.654672,-0.481383,0.690637)" | ||
1589 | 706 | gradientUnits="userSpaceOnUse" | ||
1590 | 707 | y2="33.637787" | ||
1591 | 708 | x2="37.295498" | ||
1592 | 709 | y1="38.267769" | ||
1593 | 710 | x1="37.484837" | ||
1594 | 711 | id="linearGradient4202" | ||
1595 | 712 | xlink:href="#linearGradient4196" | ||
1596 | 713 | inkscape:collect="always" /> | ||
1597 | 714 | <radialGradient | ||
1598 | 715 | r="23.75956" | ||
1599 | 716 | fy="42.6875" | ||
1600 | 717 | fx="23.9375" | ||
1601 | 718 | cy="42.6875" | ||
1602 | 719 | cx="23.9375" | ||
1603 | 720 | gradientTransform="matrix(1,0,0,0.24763,0,32.1168)" | ||
1604 | 721 | gradientUnits="userSpaceOnUse" | ||
1605 | 722 | id="radialGradient2313" | ||
1606 | 723 | xlink:href="#linearGradient5225" | ||
1607 | 724 | inkscape:collect="always" /> | ||
1608 | 725 | <linearGradient | ||
1609 | 726 | inkscape:collect="always" | ||
1610 | 727 | xlink:href="#linearGradient2307" | ||
1611 | 728 | id="linearGradient5478" | ||
1612 | 729 | gradientTransform="scale(1.673466,0.597562)" | ||
1613 | 730 | x1="-931.7503" | ||
1614 | 731 | y1="148.07116" | ||
1615 | 732 | x2="-131.23588" | ||
1616 | 733 | y2="148.07116" | ||
1617 | 734 | gradientUnits="userSpaceOnUse" /> | ||
1618 | 735 | <radialGradient | ||
1619 | 736 | inkscape:collect="always" | ||
1620 | 737 | xlink:href="#linearGradient5225" | ||
1621 | 738 | id="radialGradient5620" | ||
1622 | 739 | gradientUnits="userSpaceOnUse" | ||
1623 | 740 | gradientTransform="matrix(1,0,0,0.24763,0,32.1168)" | ||
1624 | 741 | cx="23.9375" | ||
1625 | 742 | cy="42.6875" | ||
1626 | 743 | fx="23.9375" | ||
1627 | 744 | fy="42.6875" | ||
1628 | 745 | r="23.75956" /> | ||
1629 | 746 | <linearGradient | ||
1630 | 747 | inkscape:collect="always" | ||
1631 | 748 | xlink:href="#linearGradient4196" | ||
1632 | 749 | id="linearGradient5622" | ||
1633 | 750 | gradientUnits="userSpaceOnUse" | ||
1634 | 751 | gradientTransform="matrix(0.654255,0,0,0.654672,-0.481383,0.690637)" | ||
1635 | 752 | x1="37.484837" | ||
1636 | 753 | y1="38.267769" | ||
1637 | 754 | x2="37.295498" | ||
1638 | 755 | y2="33.637787" /> | ||
1639 | 756 | <linearGradient | ||
1640 | 757 | inkscape:collect="always" | ||
1641 | 758 | xlink:href="#linearGradient5137" | ||
1642 | 759 | id="linearGradient5624" | ||
1643 | 760 | gradientUnits="userSpaceOnUse" | ||
1644 | 761 | gradientTransform="matrix(1,0,0,0.992781,0,-2.718035)" | ||
1645 | 762 | x1="31.743324" | ||
1646 | 763 | y1="37.842293" | ||
1647 | 764 | x2="31.86105" | ||
1648 | 765 | y2="43.82579" /> | ||
1649 | 766 | <linearGradient | ||
1650 | 767 | inkscape:collect="always" | ||
1651 | 768 | xlink:href="#linearGradient11400" | ||
1652 | 769 | id="linearGradient5626" | ||
1653 | 770 | gradientUnits="userSpaceOnUse" | ||
1654 | 771 | gradientTransform="matrix(1.004187,0,0,1,-0.12454,-3.011765)" | ||
1655 | 772 | x1="23.154902" | ||
1656 | 773 | y1="34.572548" | ||
1657 | 774 | x2="23.529411" | ||
1658 | 775 | y2="40.219608" /> | ||
1659 | 776 | <linearGradient | ||
1660 | 777 | inkscape:collect="always" | ||
1661 | 778 | xlink:href="#linearGradient5137" | ||
1662 | 779 | id="linearGradient5628" | ||
1663 | 780 | gradientUnits="userSpaceOnUse" | ||
1664 | 781 | gradientTransform="matrix(0.648248,0,0,0.644253,0.433189,-0.740991)" | ||
1665 | 782 | x1="17.247635" | ||
1666 | 783 | y1="6.3760414" | ||
1667 | 784 | x2="39.904388" | ||
1668 | 785 | y2="38.876041" /> | ||
1669 | 786 | <radialGradient | ||
1670 | 787 | inkscape:collect="always" | ||
1671 | 788 | xlink:href="#linearGradient7670" | ||
1672 | 789 | id="radialGradient5630" | ||
1673 | 790 | gradientUnits="userSpaceOnUse" | ||
1674 | 791 | gradientTransform="matrix(0.836315,0,0,0.514216,-4.024721,-3.259613e-2)" | ||
1675 | 792 | cx="24.006104" | ||
1676 | 793 | cy="32.997028" | ||
1677 | 794 | fx="24.006104" | ||
1678 | 795 | fy="32.997028" | ||
1679 | 796 | r="19.00016" /> | ||
1680 | 797 | <linearGradient | ||
1681 | 798 | inkscape:collect="always" | ||
1682 | 799 | xlink:href="#linearGradient6240" | ||
1683 | 800 | id="linearGradient5632" | ||
1684 | 801 | gradientUnits="userSpaceOnUse" | ||
1685 | 802 | gradientTransform="matrix(0.664512,0,0,0.651253,9.569506e-2,-1.210023)" | ||
1686 | 803 | x1="20.156862" | ||
1687 | 804 | y1="5.0996137" | ||
1688 | 805 | x2="20.156862" | ||
1689 | 806 | y2="26.039215" /> | ||
1690 | 807 | <linearGradient | ||
1691 | 808 | inkscape:collect="always" | ||
1692 | 809 | xlink:href="#linearGradient2307" | ||
1693 | 810 | id="linearGradient5634" | ||
1694 | 811 | gradientUnits="userSpaceOnUse" | ||
1695 | 812 | gradientTransform="scale(1.673466,0.597562)" | ||
1696 | 813 | x1="-931.7503" | ||
1697 | 814 | y1="148.07116" | ||
1698 | 815 | x2="-131.23588" | ||
1699 | 816 | y2="148.07116" /> | ||
1700 | 817 | <radialGradient | ||
1701 | 818 | inkscape:collect="always" | ||
1702 | 819 | xlink:href="#linearGradient5060" | ||
1703 | 820 | id="radialGradient5636" | ||
1704 | 821 | gradientUnits="userSpaceOnUse" | ||
1705 | 822 | gradientTransform="matrix(2.774389,0,0,1.969706,-1891.633,-872.8854)" | ||
1706 | 823 | cx="605.71429" | ||
1707 | 824 | cy="486.64789" | ||
1708 | 825 | fx="605.71429" | ||
1709 | 826 | fy="486.64789" | ||
1710 | 827 | r="117.14286" /> | ||
1711 | 828 | <radialGradient | ||
1712 | 829 | inkscape:collect="always" | ||
1713 | 830 | xlink:href="#linearGradient5060" | ||
1714 | 831 | id="radialGradient5638" | ||
1715 | 832 | gradientUnits="userSpaceOnUse" | ||
1716 | 833 | gradientTransform="matrix(-2.774389,0,0,1.969706,112.7623,-872.8854)" | ||
1717 | 834 | cx="605.71429" | ||
1718 | 835 | cy="486.64789" | ||
1719 | 836 | fx="605.71429" | ||
1720 | 837 | fy="486.64789" | ||
1721 | 838 | r="117.14286" /> | ||
1722 | 839 | <linearGradient | ||
1723 | 840 | inkscape:collect="always" | ||
1724 | 841 | xlink:href="#linearGradient3899" | ||
1725 | 842 | id="linearGradient5640" | ||
1726 | 843 | gradientUnits="userSpaceOnUse" | ||
1727 | 844 | gradientTransform="matrix(0.647995,0,0,0.707655,0.734249,-1.447571)" | ||
1728 | 845 | x1="29.5" | ||
1729 | 846 | y1="46.029419" | ||
1730 | 847 | x2="29.125" | ||
1731 | 848 | y2="37.9375" /> | ||
1732 | 849 | <radialGradient | ||
1733 | 850 | inkscape:collect="always" | ||
1734 | 851 | xlink:href="#linearGradient3907" | ||
1735 | 852 | id="radialGradient5642" | ||
1736 | 853 | gradientUnits="userSpaceOnUse" | ||
1737 | 854 | gradientTransform="matrix(1.382603,3.581398e-5,0,0.171503,-8.729684,21.0972)" | ||
1738 | 855 | cx="20.913568" | ||
1739 | 856 | cy="47.045319" | ||
1740 | 857 | fx="20.913568" | ||
1741 | 858 | fy="47.045319" | ||
1742 | 859 | r="19.5" /> | ||
1743 | 860 | <radialGradient | ||
1744 | 861 | inkscape:collect="always" | ||
1745 | 862 | xlink:href="#linearGradient3907" | ||
1746 | 863 | id="radialGradient5644" | ||
1747 | 864 | gradientUnits="userSpaceOnUse" | ||
1748 | 865 | gradientTransform="matrix(1.382603,3.581398e-5,0,0.171503,-8.729684,21.0972)" | ||
1749 | 866 | cx="20.913568" | ||
1750 | 867 | cy="47.045319" | ||
1751 | 868 | fx="20.913568" | ||
1752 | 869 | fy="47.045319" | ||
1753 | 870 | r="19.5" /> | ||
1754 | 871 | <radialGradient | ||
1755 | 872 | inkscape:collect="always" | ||
1756 | 873 | xlink:href="#linearGradient3907" | ||
1757 | 874 | id="radialGradient5646" | ||
1758 | 875 | gradientUnits="userSpaceOnUse" | ||
1759 | 876 | gradientTransform="matrix(1.382603,3.581398e-5,0,0.171503,-8.729684,21.0972)" | ||
1760 | 877 | cx="20.913568" | ||
1761 | 878 | cy="47.045319" | ||
1762 | 879 | fx="20.913568" | ||
1763 | 880 | fy="47.045319" | ||
1764 | 881 | r="19.5" /> | ||
1765 | 882 | <radialGradient | ||
1766 | 883 | inkscape:collect="always" | ||
1767 | 884 | xlink:href="#linearGradient3907" | ||
1768 | 885 | id="radialGradient5648" | ||
1769 | 886 | gradientUnits="userSpaceOnUse" | ||
1770 | 887 | gradientTransform="matrix(1.382603,3.581398e-5,0,0.171503,-8.729684,21.0972)" | ||
1771 | 888 | cx="20.913568" | ||
1772 | 889 | cy="47.045319" | ||
1773 | 890 | fx="20.913568" | ||
1774 | 891 | fy="47.045319" | ||
1775 | 892 | r="19.5" /> | ||
1776 | 893 | <radialGradient | ||
1777 | 894 | inkscape:collect="always" | ||
1778 | 895 | xlink:href="#linearGradient3907" | ||
1779 | 896 | id="radialGradient5650" | ||
1780 | 897 | gradientUnits="userSpaceOnUse" | ||
1781 | 898 | gradientTransform="matrix(1.382603,3.581398e-5,0,0.171503,-8.729684,21.0972)" | ||
1782 | 899 | cx="20.913568" | ||
1783 | 900 | cy="47.045319" | ||
1784 | 901 | fx="20.913568" | ||
1785 | 902 | fy="47.045319" | ||
1786 | 903 | r="19.5" /> | ||
1787 | 904 | <radialGradient | ||
1788 | 905 | inkscape:collect="always" | ||
1789 | 906 | xlink:href="#linearGradient3907" | ||
1790 | 907 | id="radialGradient5652" | ||
1791 | 908 | gradientUnits="userSpaceOnUse" | ||
1792 | 909 | gradientTransform="matrix(1.382603,3.581398e-5,0,0.171503,-8.729684,21.0972)" | ||
1793 | 910 | cx="20.913568" | ||
1794 | 911 | cy="47.045319" | ||
1795 | 912 | fx="20.913568" | ||
1796 | 913 | fy="47.045319" | ||
1797 | 914 | r="19.5" /> | ||
1798 | 915 | <radialGradient | ||
1799 | 916 | inkscape:collect="always" | ||
1800 | 917 | xlink:href="#linearGradient3907" | ||
1801 | 918 | id="radialGradient5654" | ||
1802 | 919 | gradientUnits="userSpaceOnUse" | ||
1803 | 920 | gradientTransform="matrix(1.382603,3.581398e-5,0,0.171503,-8.729684,21.0972)" | ||
1804 | 921 | cx="20.913568" | ||
1805 | 922 | cy="47.045319" | ||
1806 | 923 | fx="20.913568" | ||
1807 | 924 | fy="47.045319" | ||
1808 | 925 | r="19.5" /> | ||
1809 | 926 | <radialGradient | ||
1810 | 927 | inkscape:collect="always" | ||
1811 | 928 | xlink:href="#linearGradient3907" | ||
1812 | 929 | id="radialGradient5656" | ||
1813 | 930 | gradientUnits="userSpaceOnUse" | ||
1814 | 931 | gradientTransform="matrix(1.382603,3.581398e-5,0,0.171503,-8.729684,21.0972)" | ||
1815 | 932 | cx="20.913568" | ||
1816 | 933 | cy="47.045319" | ||
1817 | 934 | fx="20.913568" | ||
1818 | 935 | fy="47.045319" | ||
1819 | 936 | r="19.5" /> | ||
1820 | 937 | <radialGradient | ||
1821 | 938 | inkscape:collect="always" | ||
1822 | 939 | xlink:href="#linearGradient3907" | ||
1823 | 940 | id="radialGradient5658" | ||
1824 | 941 | gradientUnits="userSpaceOnUse" | ||
1825 | 942 | gradientTransform="matrix(1.382603,3.581398e-5,0,0.171503,-8.729684,21.0972)" | ||
1826 | 943 | cx="20.913568" | ||
1827 | 944 | cy="47.045319" | ||
1828 | 945 | fx="20.913568" | ||
1829 | 946 | fy="47.045319" | ||
1830 | 947 | r="19.5" /> | ||
1831 | 948 | <radialGradient | ||
1832 | 949 | inkscape:collect="always" | ||
1833 | 950 | xlink:href="#linearGradient3907" | ||
1834 | 951 | id="radialGradient5660" | ||
1835 | 952 | gradientUnits="userSpaceOnUse" | ||
1836 | 953 | gradientTransform="matrix(1.382603,3.581398e-5,0,0.171503,-8.729684,21.0972)" | ||
1837 | 954 | cx="20.913568" | ||
1838 | 955 | cy="47.045319" | ||
1839 | 956 | fx="20.913568" | ||
1840 | 957 | fy="47.045319" | ||
1841 | 958 | r="19.5" /> | ||
1842 | 959 | <radialGradient | ||
1843 | 960 | inkscape:collect="always" | ||
1844 | 961 | xlink:href="#linearGradient3907" | ||
1845 | 962 | id="radialGradient5662" | ||
1846 | 963 | gradientUnits="userSpaceOnUse" | ||
1847 | 964 | gradientTransform="matrix(1.382603,3.581398e-5,0,0.171503,-8.729684,21.0972)" | ||
1848 | 965 | cx="20.913568" | ||
1849 | 966 | cy="47.045319" | ||
1850 | 967 | fx="20.913568" | ||
1851 | 968 | fy="47.045319" | ||
1852 | 969 | r="19.5" /> | ||
1853 | 970 | <radialGradient | ||
1854 | 971 | inkscape:collect="always" | ||
1855 | 972 | xlink:href="#linearGradient3907" | ||
1856 | 973 | id="radialGradient5664" | ||
1857 | 974 | gradientUnits="userSpaceOnUse" | ||
1858 | 975 | gradientTransform="matrix(1.382603,3.581398e-5,0,0.171503,-8.729684,21.0972)" | ||
1859 | 976 | cx="20.913568" | ||
1860 | 977 | cy="47.045319" | ||
1861 | 978 | fx="20.913568" | ||
1862 | 979 | fy="47.045319" | ||
1863 | 980 | r="19.5" /> | ||
1864 | 981 | <radialGradient | ||
1865 | 982 | inkscape:collect="always" | ||
1866 | 983 | xlink:href="#linearGradient3907" | ||
1867 | 984 | id="radialGradient5666" | ||
1868 | 985 | gradientUnits="userSpaceOnUse" | ||
1869 | 986 | gradientTransform="matrix(1.382603,3.581398e-5,0,0.171503,-8.729684,21.0972)" | ||
1870 | 987 | cx="20.913568" | ||
1871 | 988 | cy="47.045319" | ||
1872 | 989 | fx="20.913568" | ||
1873 | 990 | fy="47.045319" | ||
1874 | 991 | r="19.5" /> | ||
1875 | 992 | <radialGradient | ||
1876 | 993 | inkscape:collect="always" | ||
1877 | 994 | xlink:href="#linearGradient3907" | ||
1878 | 995 | id="radialGradient5668" | ||
1879 | 996 | gradientUnits="userSpaceOnUse" | ||
1880 | 997 | gradientTransform="matrix(1.382603,3.581398e-5,0,0.171503,-8.729684,21.0972)" | ||
1881 | 998 | cx="20.913568" | ||
1882 | 999 | cy="47.045319" | ||
1883 | 1000 | fx="20.913568" | ||
1884 | 1001 | fy="47.045319" | ||
1885 | 1002 | r="19.5" /> | ||
1886 | 1003 | <radialGradient | ||
1887 | 1004 | inkscape:collect="always" | ||
1888 | 1005 | xlink:href="#linearGradient3907" | ||
1889 | 1006 | id="radialGradient5670" | ||
1890 | 1007 | gradientUnits="userSpaceOnUse" | ||
1891 | 1008 | gradientTransform="matrix(1.382603,3.581398e-5,0,0.171503,-8.729684,21.0972)" | ||
1892 | 1009 | cx="20.913568" | ||
1893 | 1010 | cy="47.045319" | ||
1894 | 1011 | fx="20.913568" | ||
1895 | 1012 | fy="47.045319" | ||
1896 | 1013 | r="19.5" /> | ||
1897 | 1014 | <radialGradient | ||
1898 | 1015 | inkscape:collect="always" | ||
1899 | 1016 | xlink:href="#linearGradient3907" | ||
1900 | 1017 | id="radialGradient5672" | ||
1901 | 1018 | gradientUnits="userSpaceOnUse" | ||
1902 | 1019 | gradientTransform="matrix(1.382603,3.581398e-5,0,0.171503,-8.729684,21.0972)" | ||
1903 | 1020 | cx="20.913568" | ||
1904 | 1021 | cy="47.045319" | ||
1905 | 1022 | fx="20.913568" | ||
1906 | 1023 | fy="47.045319" | ||
1907 | 1024 | r="19.5" /> | ||
1908 | 1025 | <radialGradient | ||
1909 | 1026 | inkscape:collect="always" | ||
1910 | 1027 | xlink:href="#linearGradient3907" | ||
1911 | 1028 | id="radialGradient5674" | ||
1912 | 1029 | gradientUnits="userSpaceOnUse" | ||
1913 | 1030 | gradientTransform="matrix(1.382603,3.581398e-5,0,0.171503,-8.729684,21.0972)" | ||
1914 | 1031 | cx="20.913568" | ||
1915 | 1032 | cy="47.045319" | ||
1916 | 1033 | fx="20.913568" | ||
1917 | 1034 | fy="47.045319" | ||
1918 | 1035 | r="19.5" /> | ||
1919 | 1036 | <radialGradient | ||
1920 | 1037 | inkscape:collect="always" | ||
1921 | 1038 | xlink:href="#linearGradient3907" | ||
1922 | 1039 | id="radialGradient5676" | ||
1923 | 1040 | gradientUnits="userSpaceOnUse" | ||
1924 | 1041 | gradientTransform="matrix(1.382603,3.581398e-5,0,0.171503,-8.729684,21.0972)" | ||
1925 | 1042 | cx="20.913568" | ||
1926 | 1043 | cy="47.045319" | ||
1927 | 1044 | fx="20.913568" | ||
1928 | 1045 | fy="47.045319" | ||
1929 | 1046 | r="19.5" /> | ||
1930 | 1047 | <radialGradient | ||
1931 | 1048 | inkscape:collect="always" | ||
1932 | 1049 | xlink:href="#linearGradient3907" | ||
1933 | 1050 | id="radialGradient5678" | ||
1934 | 1051 | gradientUnits="userSpaceOnUse" | ||
1935 | 1052 | gradientTransform="matrix(1.382603,3.581398e-5,0,0.171503,-8.729684,21.0972)" | ||
1936 | 1053 | cx="20.913568" | ||
1937 | 1054 | cy="47.045319" | ||
1938 | 1055 | fx="20.913568" | ||
1939 | 1056 | fy="47.045319" | ||
1940 | 1057 | r="19.5" /> | ||
1941 | 1058 | <radialGradient | ||
1942 | 1059 | inkscape:collect="always" | ||
1943 | 1060 | xlink:href="#linearGradient3907" | ||
1944 | 1061 | id="radialGradient5680" | ||
1945 | 1062 | gradientUnits="userSpaceOnUse" | ||
1946 | 1063 | gradientTransform="matrix(1.382603,3.581398e-5,0,0.171503,-8.729684,21.0972)" | ||
1947 | 1064 | cx="20.913568" | ||
1948 | 1065 | cy="47.045319" | ||
1949 | 1066 | fx="20.913568" | ||
1950 | 1067 | fy="47.045319" | ||
1951 | 1068 | r="19.5" /> | ||
1952 | 1069 | <radialGradient | ||
1953 | 1070 | inkscape:collect="always" | ||
1954 | 1071 | xlink:href="#linearGradient3907" | ||
1955 | 1072 | id="radialGradient5682" | ||
1956 | 1073 | gradientUnits="userSpaceOnUse" | ||
1957 | 1074 | gradientTransform="matrix(1.382603,3.581398e-5,0,0.171503,-8.729684,21.0972)" | ||
1958 | 1075 | cx="20.913568" | ||
1959 | 1076 | cy="47.045319" | ||
1960 | 1077 | fx="20.913568" | ||
1961 | 1078 | fy="47.045319" | ||
1962 | 1079 | r="19.5" /> | ||
1963 | 1080 | <radialGradient | ||
1964 | 1081 | inkscape:collect="always" | ||
1965 | 1082 | xlink:href="#linearGradient3907" | ||
1966 | 1083 | id="radialGradient5684" | ||
1967 | 1084 | gradientUnits="userSpaceOnUse" | ||
1968 | 1085 | gradientTransform="matrix(1.382603,3.581398e-5,0,0.171503,-8.729684,21.0972)" | ||
1969 | 1086 | cx="20.913568" | ||
1970 | 1087 | cy="47.045319" | ||
1971 | 1088 | fx="20.913568" | ||
1972 | 1089 | fy="47.045319" | ||
1973 | 1090 | r="19.5" /> | ||
1974 | 1091 | <radialGradient | ||
1975 | 1092 | inkscape:collect="always" | ||
1976 | 1093 | xlink:href="#linearGradient3907" | ||
1977 | 1094 | id="radialGradient5686" | ||
1978 | 1095 | gradientUnits="userSpaceOnUse" | ||
1979 | 1096 | gradientTransform="matrix(1.382603,3.581398e-5,0,0.171503,-8.729684,21.0972)" | ||
1980 | 1097 | cx="20.913568" | ||
1981 | 1098 | cy="47.045319" | ||
1982 | 1099 | fx="20.913568" | ||
1983 | 1100 | fy="47.045319" | ||
1984 | 1101 | r="19.5" /> | ||
1985 | 1102 | <radialGradient | ||
1986 | 1103 | inkscape:collect="always" | ||
1987 | 1104 | xlink:href="#linearGradient3907" | ||
1988 | 1105 | id="radialGradient5688" | ||
1989 | 1106 | gradientUnits="userSpaceOnUse" | ||
1990 | 1107 | gradientTransform="matrix(1.382603,3.581398e-5,0,0.171503,-8.729684,21.0972)" | ||
1991 | 1108 | cx="20.913568" | ||
1992 | 1109 | cy="47.045319" | ||
1993 | 1110 | fx="20.913568" | ||
1994 | 1111 | fy="47.045319" | ||
1995 | 1112 | r="19.5" /> | ||
1996 | 1113 | <radialGradient | ||
1997 | 1114 | inkscape:collect="always" | ||
1998 | 1115 | xlink:href="#linearGradient3907" | ||
1999 | 1116 | id="radialGradient5690" | ||
2000 | 1117 | gradientUnits="userSpaceOnUse" | ||
2001 | 1118 | gradientTransform="matrix(1.382603,3.581398e-5,0,0.171503,-8.729684,21.0972)" | ||
2002 | 1119 | cx="20.913568" | ||
2003 | 1120 | cy="47.045319" | ||
2004 | 1121 | fx="20.913568" | ||
2005 | 1122 | fy="47.045319" | ||
2006 | 1123 | r="19.5" /> | ||
2007 | 1124 | <radialGradient | ||
2008 | 1125 | inkscape:collect="always" | ||
2009 | 1126 | xlink:href="#linearGradient3907" | ||
2010 | 1127 | id="radialGradient5692" | ||
2011 | 1128 | gradientUnits="userSpaceOnUse" | ||
2012 | 1129 | gradientTransform="matrix(1.382603,3.581398e-5,0,0.171503,-8.729684,21.0972)" | ||
2013 | 1130 | cx="20.913568" | ||
2014 | 1131 | cy="47.045319" | ||
2015 | 1132 | fx="20.913568" | ||
2016 | 1133 | fy="47.045319" | ||
2017 | 1134 | r="19.5" /> | ||
2018 | 1135 | <radialGradient | ||
2019 | 1136 | inkscape:collect="always" | ||
2020 | 1137 | xlink:href="#linearGradient3907" | ||
2021 | 1138 | id="radialGradient5694" | ||
2022 | 1139 | gradientUnits="userSpaceOnUse" | ||
2023 | 1140 | gradientTransform="matrix(1.382603,3.581398e-5,0,0.171503,-8.729684,21.0972)" | ||
2024 | 1141 | cx="20.913568" | ||
2025 | 1142 | cy="47.045319" | ||
2026 | 1143 | fx="20.913568" | ||
2027 | 1144 | fy="47.045319" | ||
2028 | 1145 | r="19.5" /> | ||
2029 | 1146 | <radialGradient | ||
2030 | 1147 | inkscape:collect="always" | ||
2031 | 1148 | xlink:href="#linearGradient3907" | ||
2032 | 1149 | id="radialGradient5696" | ||
2033 | 1150 | gradientUnits="userSpaceOnUse" | ||
2034 | 1151 | gradientTransform="matrix(1.382603,3.581398e-5,0,0.171503,-8.729684,21.0972)" | ||
2035 | 1152 | cx="20.913568" | ||
2036 | 1153 | cy="47.045319" | ||
2037 | 1154 | fx="20.913568" | ||
2038 | 1155 | fy="47.045319" | ||
2039 | 1156 | r="19.5" /> | ||
2040 | 1157 | <radialGradient | ||
2041 | 1158 | inkscape:collect="always" | ||
2042 | 1159 | xlink:href="#linearGradient3907" | ||
2043 | 1160 | id="radialGradient5698" | ||
2044 | 1161 | gradientUnits="userSpaceOnUse" | ||
2045 | 1162 | gradientTransform="matrix(1.382603,3.581398e-5,0,0.171503,-8.729684,21.0972)" | ||
2046 | 1163 | cx="20.913568" | ||
2047 | 1164 | cy="47.045319" | ||
2048 | 1165 | fx="20.913568" | ||
2049 | 1166 | fy="47.045319" | ||
2050 | 1167 | r="19.5" /> | ||
2051 | 1168 | <radialGradient | ||
2052 | 1169 | inkscape:collect="always" | ||
2053 | 1170 | xlink:href="#linearGradient3907" | ||
2054 | 1171 | id="radialGradient5700" | ||
2055 | 1172 | gradientUnits="userSpaceOnUse" | ||
2056 | 1173 | gradientTransform="matrix(1.382603,3.581398e-5,0,0.171503,-8.729684,21.0972)" | ||
2057 | 1174 | cx="20.913568" | ||
2058 | 1175 | cy="47.045319" | ||
2059 | 1176 | fx="20.913568" | ||
2060 | 1177 | fy="47.045319" | ||
2061 | 1178 | r="19.5" /> | ||
2062 | 1179 | <radialGradient | ||
2063 | 1180 | inkscape:collect="always" | ||
2064 | 1181 | xlink:href="#linearGradient3907" | ||
2065 | 1182 | id="radialGradient5702" | ||
2066 | 1183 | gradientUnits="userSpaceOnUse" | ||
2067 | 1184 | gradientTransform="matrix(1.382603,3.581398e-5,0,0.171503,-0.72968,21.0972)" | ||
2068 | 1185 | cx="20.913568" | ||
2069 | 1186 | cy="47.045319" | ||
2070 | 1187 | fx="20.913568" | ||
2071 | 1188 | fy="47.045319" | ||
2072 | 1189 | r="19.5" /> | ||
2073 | 1190 | <radialGradient | ||
2074 | 1191 | inkscape:collect="always" | ||
2075 | 1192 | xlink:href="#linearGradient3907" | ||
2076 | 1193 | id="radialGradient5704" | ||
2077 | 1194 | gradientUnits="userSpaceOnUse" | ||
2078 | 1195 | gradientTransform="matrix(1.382603,3.581398e-5,0,0.171503,-0.72968,21.0972)" | ||
2079 | 1196 | cx="20.913568" | ||
2080 | 1197 | cy="47.045319" | ||
2081 | 1198 | fx="20.913568" | ||
2082 | 1199 | fy="47.045319" | ||
2083 | 1200 | r="19.5" /> | ||
2084 | 1201 | <radialGradient | ||
2085 | 1202 | inkscape:collect="always" | ||
2086 | 1203 | xlink:href="#linearGradient3907" | ||
2087 | 1204 | id="radialGradient5706" | ||
2088 | 1205 | gradientUnits="userSpaceOnUse" | ||
2089 | 1206 | gradientTransform="matrix(1.382603,3.581398e-5,0,0.171503,-0.72968,21.0972)" | ||
2090 | 1207 | cx="20.913568" | ||
2091 | 1208 | cy="47.045319" | ||
2092 | 1209 | fx="20.913568" | ||
2093 | 1210 | fy="47.045319" | ||
2094 | 1211 | r="19.5" /> | ||
2095 | 1212 | <radialGradient | ||
2096 | 1213 | inkscape:collect="always" | ||
2097 | 1214 | xlink:href="#linearGradient3907" | ||
2098 | 1215 | id="radialGradient5708" | ||
2099 | 1216 | gradientUnits="userSpaceOnUse" | ||
2100 | 1217 | gradientTransform="matrix(1.382603,3.581398e-5,0,0.171503,-0.72968,21.0972)" | ||
2101 | 1218 | cx="20.913568" | ||
2102 | 1219 | cy="47.045319" | ||
2103 | 1220 | fx="20.913568" | ||
2104 | 1221 | fy="47.045319" | ||
2105 | 1222 | r="19.5" /> | ||
2106 | 1223 | <radialGradient | ||
2107 | 1224 | inkscape:collect="always" | ||
2108 | 1225 | xlink:href="#linearGradient3907" | ||
2109 | 1226 | id="radialGradient5710" | ||
2110 | 1227 | gradientUnits="userSpaceOnUse" | ||
2111 | 1228 | gradientTransform="matrix(1.382603,3.581398e-5,0,0.171503,-0.72968,21.0972)" | ||
2112 | 1229 | cx="20.913568" | ||
2113 | 1230 | cy="47.045319" | ||
2114 | 1231 | fx="20.913568" | ||
2115 | 1232 | fy="47.045319" | ||
2116 | 1233 | r="19.5" /> | ||
2117 | 1234 | <radialGradient | ||
2118 | 1235 | inkscape:collect="always" | ||
2119 | 1236 | xlink:href="#linearGradient3907" | ||
2120 | 1237 | id="radialGradient5712" | ||
2121 | 1238 | gradientUnits="userSpaceOnUse" | ||
2122 | 1239 | gradientTransform="matrix(1.382603,3.581398e-5,0,0.171503,-0.72968,21.0972)" | ||
2123 | 1240 | cx="20.913568" | ||
2124 | 1241 | cy="47.045319" | ||
2125 | 1242 | fx="20.913568" | ||
2126 | 1243 | fy="47.045319" | ||
2127 | 1244 | r="19.5" /> | ||
2128 | 1245 | <radialGradient | ||
2129 | 1246 | inkscape:collect="always" | ||
2130 | 1247 | xlink:href="#linearGradient3907" | ||
2131 | 1248 | id="radialGradient5714" | ||
2132 | 1249 | gradientUnits="userSpaceOnUse" | ||
2133 | 1250 | gradientTransform="matrix(1.382603,3.581398e-5,0,0.171503,-0.72968,21.0972)" | ||
2134 | 1251 | cx="20.913568" | ||
2135 | 1252 | cy="47.045319" | ||
2136 | 1253 | fx="20.913568" | ||
2137 | 1254 | fy="47.045319" | ||
2138 | 1255 | r="19.5" /> | ||
2139 | 1256 | <radialGradient | ||
2140 | 1257 | inkscape:collect="always" | ||
2141 | 1258 | xlink:href="#linearGradient3907" | ||
2142 | 1259 | id="radialGradient5716" | ||
2143 | 1260 | gradientUnits="userSpaceOnUse" | ||
2144 | 1261 | gradientTransform="matrix(1.382603,3.581398e-5,0,0.171503,4.270316,21.0972)" | ||
2145 | 1262 | cx="20.913568" | ||
2146 | 1263 | cy="47.045319" | ||
2147 | 1264 | fx="20.913568" | ||
2148 | 1265 | fy="47.045319" | ||
2149 | 1266 | r="19.5" /> | ||
2150 | 1267 | <radialGradient | ||
2151 | 1268 | inkscape:collect="always" | ||
2152 | 1269 | xlink:href="#linearGradient3907" | ||
2153 | 1270 | id="radialGradient5718" | ||
2154 | 1271 | gradientUnits="userSpaceOnUse" | ||
2155 | 1272 | gradientTransform="matrix(1.382603,3.581398e-5,0,0.171503,4.270316,21.0972)" | ||
2156 | 1273 | cx="20.913568" | ||
2157 | 1274 | cy="47.045319" | ||
2158 | 1275 | fx="20.913568" | ||
2159 | 1276 | fy="47.045319" | ||
2160 | 1277 | r="19.5" /> | ||
2161 | 1278 | <radialGradient | ||
2162 | 1279 | inkscape:collect="always" | ||
2163 | 1280 | xlink:href="#linearGradient3907" | ||
2164 | 1281 | id="radialGradient5720" | ||
2165 | 1282 | gradientUnits="userSpaceOnUse" | ||
2166 | 1283 | gradientTransform="matrix(1.382603,3.581398e-5,0,0.171503,4.270316,21.0972)" | ||
2167 | 1284 | cx="20.913568" | ||
2168 | 1285 | cy="47.045319" | ||
2169 | 1286 | fx="20.913568" | ||
2170 | 1287 | fy="47.045319" | ||
2171 | 1288 | r="19.5" /> | ||
2172 | 1289 | <radialGradient | ||
2173 | 1290 | inkscape:collect="always" | ||
2174 | 1291 | xlink:href="#linearGradient3907" | ||
2175 | 1292 | id="radialGradient5722" | ||
2176 | 1293 | gradientUnits="userSpaceOnUse" | ||
2177 | 1294 | gradientTransform="matrix(1.382603,3.581398e-5,0,0.171503,4.270316,21.0972)" | ||
2178 | 1295 | cx="20.913568" | ||
2179 | 1296 | cy="47.045319" | ||
2180 | 1297 | fx="20.913568" | ||
2181 | 1298 | fy="47.045319" | ||
2182 | 1299 | r="19.5" /> | ||
2183 | 1300 | <radialGradient | ||
2184 | 1301 | inkscape:collect="always" | ||
2185 | 1302 | xlink:href="#linearGradient3907" | ||
2186 | 1303 | id="radialGradient5724" | ||
2187 | 1304 | gradientUnits="userSpaceOnUse" | ||
2188 | 1305 | gradientTransform="matrix(1.382603,3.581398e-5,0,0.171503,4.270316,21.0972)" | ||
2189 | 1306 | cx="20.913568" | ||
2190 | 1307 | cy="47.045319" | ||
2191 | 1308 | fx="20.913568" | ||
2192 | 1309 | fy="47.045319" | ||
2193 | 1310 | r="19.5" /> | ||
2194 | 1311 | <radialGradient | ||
2195 | 1312 | inkscape:collect="always" | ||
2196 | 1313 | xlink:href="#linearGradient3907" | ||
2197 | 1314 | id="radialGradient5726" | ||
2198 | 1315 | gradientUnits="userSpaceOnUse" | ||
2199 | 1316 | gradientTransform="matrix(1.382603,3.581398e-5,0,0.171503,4.270316,21.0972)" | ||
2200 | 1317 | cx="20.913568" | ||
2201 | 1318 | cy="47.045319" | ||
2202 | 1319 | fx="20.913568" | ||
2203 | 1320 | fy="47.045319" | ||
2204 | 1321 | r="19.5" /> | ||
2205 | 1322 | <radialGradient | ||
2206 | 1323 | inkscape:collect="always" | ||
2207 | 1324 | xlink:href="#linearGradient3907" | ||
2208 | 1325 | id="radialGradient5728" | ||
2209 | 1326 | gradientUnits="userSpaceOnUse" | ||
2210 | 1327 | gradientTransform="matrix(1.382603,3.581398e-5,0,0.171503,4.270316,21.0972)" | ||
2211 | 1328 | cx="20.913568" | ||
2212 | 1329 | cy="47.045319" | ||
2213 | 1330 | fx="20.913568" | ||
2214 | 1331 | fy="47.045319" | ||
2215 | 1332 | r="19.5" /> | ||
2216 | 1333 | </defs> | ||
2217 | 1334 | <sodipodi:namedview | ||
2218 | 1335 | id="base" | ||
2219 | 1336 | pagecolor="#ffffff" | ||
2220 | 1337 | bordercolor="#666" | ||
2221 | 1338 | borderopacity="1" | ||
2222 | 1339 | inkscape:pageopacity="0.0" | ||
2223 | 1340 | inkscape:pageshadow="2" | ||
2224 | 1341 | inkscape:zoom="1" | ||
2225 | 1342 | inkscape:cx="47.587693" | ||
2226 | 1343 | inkscape:cy="-3.0466105" | ||
2227 | 1344 | inkscape:current-layer="layer1" | ||
2228 | 1345 | showgrid="false" | ||
2229 | 1346 | inkscape:grid-bbox="true" | ||
2230 | 1347 | inkscape:document-units="px" | ||
2231 | 1348 | inkscape:window-width="1051" | ||
2232 | 1349 | inkscape:window-height="885" | ||
2233 | 1350 | inkscape:window-x="0" | ||
2234 | 1351 | inkscape:window-y="89" | ||
2235 | 1352 | inkscape:showpageshadow="false" | ||
2236 | 1353 | inkscape:grid-points="false" | ||
2237 | 1354 | showborder="false" /> | ||
2238 | 1355 | <metadata | ||
2239 | 1356 | id="metadata4"> | ||
2240 | 1357 | <rdf:RDF> | ||
2241 | 1358 | <cc:Work | ||
2242 | 1359 | rdf:about=""> | ||
2243 | 1360 | <dc:format>image/svg+xml</dc:format> | ||
2244 | 1361 | <dc:type | ||
2245 | 1362 | rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> | ||
2246 | 1363 | <dc:title>Network</dc:title> | ||
2247 | 1364 | <dc:date>2005-03-08</dc:date> | ||
2248 | 1365 | <dc:creator> | ||
2249 | 1366 | <cc:Agent> | ||
2250 | 1367 | <dc:title>Lapo Calamandrei</dc:title> | ||
2251 | 1368 | </cc:Agent> | ||
2252 | 1369 | </dc:creator> | ||
2253 | 1370 | <dc:subject> | ||
2254 | 1371 | <rdf:Bag /> | ||
2255 | 1372 | </dc:subject> | ||
2256 | 1373 | <cc:license | ||
2257 | 1374 | rdf:resource="http://creativecommons.org/licenses/by-sa/2.0/" /> | ||
2258 | 1375 | <dc:source /> | ||
2259 | 1376 | <dc:contributor> | ||
2260 | 1377 | <cc:Agent> | ||
2261 | 1378 | <dc:title>Jakub Steiner, Luca Ferretti</dc:title> | ||
2262 | 1379 | </cc:Agent> | ||
2263 | 1380 | </dc:contributor> | ||
2264 | 1381 | </cc:Work> | ||
2265 | 1382 | <cc:License | ||
2266 | 1383 | rdf:about="http://creativecommons.org/licenses/by-sa/2.0/"> | ||
2267 | 1384 | <cc:permits | ||
2268 | 1385 | rdf:resource="http://web.resource.org/cc/Reproduction" /> | ||
2269 | 1386 | <cc:permits | ||
2270 | 1387 | rdf:resource="http://web.resource.org/cc/Distribution" /> | ||
2271 | 1388 | <cc:requires | ||
2272 | 1389 | rdf:resource="http://web.resource.org/cc/Notice" /> | ||
2273 | 1390 | <cc:requires | ||
2274 | 1391 | rdf:resource="http://web.resource.org/cc/Attribution" /> | ||
2275 | 1392 | <cc:permits | ||
2276 | 1393 | rdf:resource="http://web.resource.org/cc/DerivativeWorks" /> | ||
2277 | 1394 | <cc:requires | ||
2278 | 1395 | rdf:resource="http://web.resource.org/cc/ShareAlike" /> | ||
2279 | 1396 | </cc:License> | ||
2280 | 1397 | </rdf:RDF> | ||
2281 | 1398 | </metadata> | ||
2282 | 1399 | <g | ||
2283 | 1400 | id="layer1" | ||
2284 | 1401 | inkscape:label="Layer 1" | ||
2285 | 1402 | inkscape:groupmode="layer"> | ||
2286 | 1403 | <g | ||
2287 | 1404 | id="g5480" | ||
2288 | 1405 | transform="translate(14.98536,1)"> | ||
2289 | 1406 | <g | ||
2290 | 1407 | style="display:inline" | ||
2291 | 1408 | inkscape:label="Layer 1" | ||
2292 | 1409 | id="g5482" /> | ||
2293 | 1410 | <g | ||
2294 | 1411 | style="display:inline" | ||
2295 | 1412 | inkscape:label="tastiera" | ||
2296 | 1413 | id="g5484"> | ||
2297 | 1414 | <g | ||
2298 | 1415 | transform="translate(-54,0.18088)" | ||
2299 | 1416 | inkscape:label="Shadow" | ||
2300 | 1417 | id="g5486" /> | ||
2301 | 1418 | <g | ||
2302 | 1419 | id="g5488" | ||
2303 | 1420 | inkscape:label="Shadow" | ||
2304 | 1421 | transform="translate(-54,15.24691)" /> | ||
2305 | 1422 | <g | ||
2306 | 1423 | id="g5490" | ||
2307 | 1424 | inkscape:label="Lavoro" | ||
2308 | 1425 | style="display:inline" | ||
2309 | 1426 | transform="translate(-54,15.24691)" /> | ||
2310 | 1427 | </g> | ||
2311 | 1428 | <g | ||
2312 | 1429 | style="display:inline" | ||
2313 | 1430 | inkscape:label="tasti" | ||
2314 | 1431 | id="g5492"> | ||
2315 | 1432 | <path | ||
2316 | 1433 | transform="matrix(0.633479,0,0,0.565504,1.119993,0.201324)" | ||
2317 | 1434 | d="M 47.69706 42.6875 A 23.75956 5.8835783 0 1 1 0.17794037,42.6875 A 23.75956 5.8835783 0 1 1 47.69706 42.6875 z" | ||
2318 | 1435 | sodipodi:ry="5.8835783" | ||
2319 | 1436 | sodipodi:rx="23.75956" | ||
2320 | 1437 | sodipodi:cy="42.6875" | ||
2321 | 1438 | sodipodi:cx="23.9375" | ||
2322 | 1439 | id="path5494" | ||
2323 | 1440 | style="opacity:0.3;fill:url(#radialGradient5620);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline" | ||
2324 | 1441 | sodipodi:type="arc" /> | ||
2325 | 1442 | <path | ||
2326 | 1443 | style="opacity:0.20786516;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:url(#linearGradient5622);stroke-width:0.99999982;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline" | ||
2327 | 1444 | d="M 27.082936,28.048013 C 21.663366,21.135948 31.947853,26.54939 30.855772,24.153878 C 29.785572,21.806364 17.408039,24.595241 18.709552,20.667209" | ||
2328 | 1445 | id="path5496" | ||
2329 | 1446 | sodipodi:nodetypes="czz" /> | ||
2330 | 1447 | <path | ||
2331 | 1448 | sodipodi:nodetypes="czz" | ||
2332 | 1449 | id="path5498" | ||
2333 | 1450 | d="M 26.784723,27.671888 C 21.538638,20.412631 31.520563,26.487432 30.374151,23.604157 C 29.072638,20.330797 18.198646,24.276982 18.806217,20.406815" | ||
2334 | 1451 | style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#729fcf;stroke-width:0.99999994;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline" /> | ||
2335 | 1452 | <g | ||
2336 | 1453 | transform="matrix(0.530612,0,0,0.53095,3.140616,3.404111)" | ||
2337 | 1454 | id="g5500" | ||
2338 | 1455 | style="display:inline"> | ||
2339 | 1456 | <path | ||
2340 | 1457 | sodipodi:nodetypes="csccscc" | ||
2341 | 1458 | id="path5502" | ||
2342 | 1459 | d="M 14.375479,32.558794 C 14.375479,32.558794 15.592355,37.45777 10.51915,37.50376 C 8.0888743,37.525507 8.5866723,41.509781 8.5866723,41.509781 L 39.433139,41.478634 C 39.433139,41.478634 39.851577,37.611393 37.410922,37.566053 C 32.423455,37.474579 33.600393,32.496503 33.600393,32.496503 L 14.375479,32.558794 z " | ||
2343 | 1460 | style="opacity:1;color:black;fill:url(#linearGradient5624);fill-opacity:1;fill-rule:evenodd;stroke:#888a85;stroke-width:1.88401449;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" /> | ||
2344 | 1461 | <path | ||
2345 | 1462 | sodipodi:nodetypes="ccccc" | ||
2346 | 1463 | id="path5504" | ||
2347 | 1464 | d="M 13.926195,33.027451 C 14.010206,35.2 13.641655,35.938894 12.285731,36.702682 L 36,38 C 35.047008,36.831372 33.660837,35.066666 34.038883,33.011765 L 13.926195,33.027451 z " | ||
2348 | 1465 | style="opacity:0.5;fill:url(#linearGradient5626);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" /> | ||
2349 | 1466 | <path | ||
2350 | 1467 | style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#8d8d8f;stroke-width:1.88401508px;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:0.43902438" | ||
2351 | 1468 | d="M 10.436202,38.661601 C 17.000465,38.66357 37.562637,38.661601 37.562637,38.661601" | ||
2352 | 1469 | id="path5506" | ||
2353 | 1470 | sodipodi:nodetypes="cc" /> | ||
2354 | 1471 | <path | ||
2355 | 1472 | sodipodi:nodetypes="cc" | ||
2356 | 1473 | id="path5508" | ||
2357 | 1474 | d="M 11.134219,39.660187 C 17.146756,39.662156 36.881517,39.660187 36.881517,39.660187" | ||
2358 | 1475 | style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:white;stroke-width:1.88401532px;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1" /> | ||
2359 | 1476 | </g> | ||
2360 | 1477 | <path | ||
2361 | 1478 | sodipodi:nodetypes="ccccccccc" | ||
2362 | 1479 | id="path5510" | ||
2363 | 1480 | d="M 3.602229,1.4999996 L 28.319154,1.4999996 C 29.631932,1.4999996 30.588653,2.4197694 30.588653,3.8361498 L 30.595753,20.072828 C 30.595753,21.162945 30.253253,21.499994 29.276792,21.499994 L 2.7228402,21.487795 C 1.9583807,21.469246 1.414291,21.169109 1.404027,20.186855 L 1.4138652,3.7151949 C 1.4138652,2.572403 2.4117826,1.4999996 3.602229,1.4999996 z " | ||
2364 | 1481 | style="fill:url(#linearGradient5628);fill-opacity:1;fill-rule:evenodd;stroke:#888a85;stroke-width:1.00000036;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;display:inline" /> | ||
2365 | 1482 | <rect | ||
2366 | 1483 | y="3.5000005" | ||
2367 | 1484 | x="3.4999971" | ||
2368 | 1485 | height="15.194118" | ||
2369 | 1486 | width="25.103695" | ||
2370 | 1487 | id="rect5512" | ||
2371 | 1488 | style="fill:url(#radialGradient5630);fill-opacity:1;fill-rule:evenodd;stroke:#204a87;stroke-width:0.99999958px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline" /> | ||
2372 | 1489 | <path | ||
2373 | 1490 | sodipodi:nodetypes="ccccc" | ||
2374 | 1491 | id="path5514" | ||
2375 | 1492 | d="M 4.0984042,4.0204313 L 4.0984042,15.748091 C 15.025941,14.866132 19.115514,9.1623492 28,8.5664313 L 28,4 L 4.0984042,4.0204313 z " | ||
2376 | 1493 | style="opacity:0.5;fill:url(#linearGradient5632);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline" /> | ||
2377 | 1494 | <path | ||
2378 | 1495 | sodipodi:nodetypes="cccsccscccc" | ||
2379 | 1496 | id="path5516" | ||
2380 | 1497 | d="M 4.056094,2.4999991 C 3.2398944,2.4999991 2.4960113,3.2952856 2.4960113,4.0741096 L 2.4960108,19.789734 C 2.4999206,20.160319 2.5869303,20.275382 2.6715202,20.346431 C 2.7561101,20.417479 2.9348114,20.473541 3.2370502,20.480806 L 28.783404,20.500002 C 29.189758,20.500002 29.318189,20.437946 29.368434,20.384824 C 29.418681,20.3317 29.504941,20.138678 29.504941,19.674554 L 29.504942,4.1892884 C 29.504942,3.0791795 28.874178,2.4999991 27.866855,2.4999991 L 4.056094,2.4999991 z " | ||
2381 | 1498 | style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:white;stroke-width:0.99999958;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;display:inline" /> | ||
2382 | 1499 | <g | ||
2383 | 1500 | id="g5518" | ||
2384 | 1501 | transform="matrix(1.543206e-2,0,0,1.215502e-2,29.57023,28.01728)" | ||
2385 | 1502 | style="display:inline"> | ||
2386 | 1503 | <rect | ||
2387 | 1504 | y="-150.69685" | ||
2388 | 1505 | x="-1559.2523" | ||
2389 | 1506 | height="478.35718" | ||
2390 | 1507 | width="1339.6335" | ||
2391 | 1508 | id="rect5520" | ||
2392 | 1509 | style="opacity:0.40206185;color:black;fill:url(#linearGradient5634);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" /> | ||
2393 | 1510 | <path | ||
2394 | 1511 | sodipodi:nodetypes="cccc" | ||
2395 | 1512 | id="path5522" | ||
2396 | 1513 | d="M -219.61876,-150.68038 C -219.61876,-150.68038 -219.61876,327.65041 -219.61876,327.65041 C -76.744594,328.55086 125.78146,220.48075 125.78138,88.454235 C 125.78138,-43.572302 -33.655436,-150.68036 -219.61876,-150.68038 z " | ||
2397 | 1514 | style="opacity:0.40206185;color:black;fill:url(#radialGradient5636);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" /> | ||
2398 | 1515 | <path | ||
2399 | 1516 | style="opacity:0.40206185;color:black;fill:url(#radialGradient5638);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" | ||
2400 | 1517 | d="M -1559.2523,-150.68038 C -1559.2523,-150.68038 -1559.2523,327.65041 -1559.2523,327.65041 C -1702.1265,328.55086 -1904.6525,220.48075 -1904.6525,88.454235 C -1904.6525,-43.572302 -1745.2157,-150.68036 -1559.2523,-150.68038 z " | ||
2401 | 1518 | id="path5524" | ||
2402 | 1519 | sodipodi:nodetypes="cccc" /> | ||
2403 | 1520 | </g> | ||
2404 | 1521 | <path | ||
2405 | 1522 | sodipodi:nodetypes="ccccccccc" | ||
2406 | 1523 | id="path5526" | ||
2407 | 1524 | d="M 3.643761,26.504783 L 28.921938,26.504783 C 29.226374,26.504783 29.788645,26.492665 30,27 L 31.5,30 C 31.5625,30.406064 31.487026,31.562501 30,31.562501 L 2.5,31.500001 C 1,31.562501 1.0652178,30.281064 1.0652178,30 L 3,27 C 3.2113561,26.492665 3.3393239,26.504783 3.643761,26.504783 z " | ||
2408 | 1525 | style="color:black;fill:url(#linearGradient5640);fill-opacity:1;fill-rule:nonzero;stroke:#888a85;stroke-width:0.99999976;stroke-linecap:square;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" /> | ||
2409 | 1526 | <path | ||
2410 | 1527 | sodipodi:nodetypes="ccccccccc" | ||
2411 | 1528 | id="path5528" | ||
2412 | 1529 | d="M 4.0955909,27.111942 L 28.49679,27.10614 C 28.788541,27.10614 28.820868,27.10614 29.023418,27.449588 L 30.420658,30.150759 C 30.420658,30.341029 30.185782,30.494207 29.894029,30.494207 L 2.6782341,30.500011 C 2.3864818,30.500011 2.1516056,30.346832 2.1516056,30.156562 L 3.5689622,27.45539 C 3.7715117,27.111942 3.8038386,27.111942 4.0955909,27.111942 z " | ||
2413 | 1530 | style="opacity:1;color:black;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:white;stroke-width:0.99999964;stroke-linecap:square;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" /> | ||
2414 | 1531 | <path | ||
2415 | 1532 | sodipodi:nodetypes="csssssssccssssssssssssccccssscccccccccssssssssssssccsssssssssccccccc" | ||
2416 | 1533 | id="path5530" | ||
2417 | 1534 | d="M 4.9039459,26.500588 C 4.9019723,26.502459 4.9057445,26.514939 4.9039459,26.516406 C 4.89444,26.51889 4.8714034,26.528697 4.8616746,26.532224 C 4.8584281,26.533516 4.8437789,26.530815 4.840539,26.532224 C 4.8373165,26.533749 4.8225981,26.546397 4.8194034,26.548041 C 4.8130911,26.551565 4.8043634,26.559861 4.7982678,26.563859 C 4.7952901,26.565977 4.7800294,26.57744 4.7771322,26.579677 C 4.7743261,26.582033 4.7587013,26.593017 4.7559967,26.595495 C 4.7139608,26.641114 4.6696929,26.720423 4.6080475,26.816941 L 3.1646057,29.221226 C 3.1646057,29.224233 3.1644578,29.234029 3.1646057,29.237043 C 3.1648991,29.240062 3.1641691,29.249843 3.1646057,29.25286 C 3.1651831,29.255877 3.1638899,29.265668 3.1646057,29.268679 C 3.1663094,29.274683 3.1835077,29.294359 3.1857413,29.300313 C 3.1869871,29.303274 3.184369,29.31319 3.1857413,29.316132 C 3.1902312,29.324886 3.2013114,29.339269 3.2068769,29.347766 C 3.2127868,29.356161 3.2211123,29.37137 3.2280125,29.379402 C 3.230418,29.382033 3.2466397,29.392637 3.2491481,29.395219 C 3.2517571,29.39775 3.2675765,29.408562 3.2702837,29.411038 C 3.287102,29.425545 3.313719,29.446427 3.3336905,29.45849 C 3.3370984,29.460423 3.3513413,29.472456 3.3548262,29.474308 C 3.3655167,29.479116 3.3855128,29.485766 3.3970973,29.490126 C 3.4750042,29.516899 3.5780713,29.537579 3.6718601,29.537579 L 18.650036,29.537579 L 18.586629,26.500592 L 5.1153018,26.500588 C 5.0709049,26.500588 5.0221446,26.49941 4.9884883,26.500588 C 4.9806133,26.500623 4.9547729,26.500899 4.9462171,26.500588 C 4.9436075,26.500603 4.9274517,26.500458 4.9250814,26.500588 C 4.9232514,26.502034 4.9059195,26.498718 4.9039459,26.500588 z M 19.83363,26.500592 L 19.897036,27.512921 L 23.553495,27.512921 L 23.38441,26.500592 L 19.83363,26.500592 z M 24.652546,26.500592 L 25.413428,29.537579 L 28.795124,29.537579 C 28.888912,29.537579 28.991979,29.516899 29.069886,29.490126 C 29.081471,29.485766 29.101467,29.479116 29.112157,29.474308 C 29.115641,29.472456 29.129884,29.460423 29.133293,29.45849 C 29.153265,29.446427 29.179882,29.425545 29.1967,29.411038 C 29.199407,29.408562 29.215227,29.39775 29.217835,29.395219 C 29.220344,29.392637 29.236565,29.382033 29.238971,29.379402 C 29.245871,29.37137 29.254196,29.356161 29.260107,29.347766 C 29.265672,29.339269 29.276752,29.324886 29.281242,29.316132 C 29.282614,29.31319 29.279996,29.303274 29.281242,29.300313 C 29.283476,29.294359 29.300674,29.274683 29.302378,29.268679 C 29.303093,29.265668 29.3018,29.255877 29.302378,29.25286 C 29.302814,29.249843 29.302083,29.240062 29.302378,29.237043 C 29.302527,29.234029 29.302378,29.224233 29.302378,29.221226 L 28.119129,26.816941 C 28.057483,26.720424 28.013215,26.641114 27.97118,26.595495 C 27.968475,26.593017 27.95285,26.582033 27.950044,26.579677 C 27.947147,26.57744 27.931886,26.565977 27.928908,26.563859 C 27.922812,26.559861 27.914085,26.551565 27.907773,26.548041 C 27.904579,26.546397 27.88986,26.533749 27.886638,26.532224 C 27.883397,26.530815 27.868747,26.533516 27.865502,26.532224 C 27.855773,26.528697 27.832737,26.51889 27.823231,26.516406 C 27.812787,26.51452 27.796296,26.503902 27.780959,26.500588 C 27.773263,26.49907 27.745738,26.501448 27.738688,26.500588 C 27.705031,26.49941 27.656271,26.500588 27.611875,26.500588 L 24.652546,26.500592 z M 20.679054,28.525249 L 20.002715,29.537579 L 23.891664,29.537579 L 23.04624,28.525249 L 20.679054,28.525249 z " | ||
2418 | 1535 | style="color:black;fill:#d3d7cf;fill-opacity:1;fill-rule:nonzero;stroke:#babdb6;stroke-width:0.99999923;stroke-linecap:square;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" /> | ||
2419 | 1536 | <rect | ||
2420 | 1537 | style="color:black;fill:url(#radialGradient5642);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:square;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" | ||
2421 | 1538 | id="rect5532" | ||
2422 | 1539 | width="1" | ||
2423 | 1540 | height="1" | ||
2424 | 1541 | x="5" | ||
2425 | 1542 | y="26" | ||
2426 | 1543 | rx="0.26516503" | ||
2427 | 1544 | ry="0.26516503" /> | ||
2428 | 1545 | <rect | ||
2429 | 1546 | style="color:black;fill:url(#radialGradient5644);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:square;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" | ||
2430 | 1547 | id="rect5534" | ||
2431 | 1548 | width="1" | ||
2432 | 1549 | height="1" | ||
2433 | 1550 | x="7" | ||
2434 | 1551 | y="26" | ||
2435 | 1552 | rx="0.26516503" | ||
2436 | 1553 | ry="0.26516503" /> | ||
2437 | 1554 | <rect | ||
2438 | 1555 | style="color:black;fill:url(#radialGradient5646);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:square;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" | ||
2439 | 1556 | id="rect5536" | ||
2440 | 1557 | width="1" | ||
2441 | 1558 | height="1" | ||
2442 | 1559 | x="9" | ||
2443 | 1560 | y="26" | ||
2444 | 1561 | rx="0.26516503" | ||
2445 | 1562 | ry="0.26516503" /> | ||
2446 | 1563 | <rect | ||
2447 | 1564 | style="color:black;fill:url(#radialGradient5648);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:square;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" | ||
2448 | 1565 | id="rect5538" | ||
2449 | 1566 | width="1" | ||
2450 | 1567 | height="1" | ||
2451 | 1568 | x="11" | ||
2452 | 1569 | y="26" | ||
2453 | 1570 | rx="0.26516503" | ||
2454 | 1571 | ry="0.26516503" /> | ||
2455 | 1572 | <rect | ||
2456 | 1573 | style="color:black;fill:url(#radialGradient5650);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:square;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" | ||
2457 | 1574 | id="rect5540" | ||
2458 | 1575 | width="1" | ||
2459 | 1576 | height="1" | ||
2460 | 1577 | x="13" | ||
2461 | 1578 | y="26" | ||
2462 | 1579 | rx="0.26516503" | ||
2463 | 1580 | ry="0.26516503" /> | ||
2464 | 1581 | <rect | ||
2465 | 1582 | style="color:black;fill:url(#radialGradient5652);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:square;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" | ||
2466 | 1583 | id="rect5542" | ||
2467 | 1584 | width="1" | ||
2468 | 1585 | height="1" | ||
2469 | 1586 | x="15" | ||
2470 | 1587 | y="26" | ||
2471 | 1588 | rx="0.26516503" | ||
2472 | 1589 | ry="0.26516503" /> | ||
2473 | 1590 | <rect | ||
2474 | 1591 | style="color:black;fill:url(#radialGradient5654);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:square;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" | ||
2475 | 1592 | id="rect5544" | ||
2476 | 1593 | width="1" | ||
2477 | 1594 | height="1" | ||
2478 | 1595 | x="17" | ||
2479 | 1596 | y="26" | ||
2480 | 1597 | rx="0.26516503" | ||
2481 | 1598 | ry="0.26516503" /> | ||
2482 | 1599 | <rect | ||
2483 | 1600 | style="color:black;fill:url(#radialGradient5656);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:square;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" | ||
2484 | 1601 | id="rect5546" | ||
2485 | 1602 | width="1" | ||
2486 | 1603 | height="1" | ||
2487 | 1604 | x="4" | ||
2488 | 1605 | y="27" | ||
2489 | 1606 | rx="0.26516503" | ||
2490 | 1607 | ry="0.26516503" /> | ||
2491 | 1608 | <rect | ||
2492 | 1609 | style="color:black;fill:url(#radialGradient5658);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:square;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" | ||
2493 | 1610 | id="rect5548" | ||
2494 | 1611 | width="1" | ||
2495 | 1612 | height="1" | ||
2496 | 1613 | x="6" | ||
2497 | 1614 | y="27" | ||
2498 | 1615 | rx="0.26516503" | ||
2499 | 1616 | ry="0.26516503" /> | ||
2500 | 1617 | <rect | ||
2501 | 1618 | style="color:black;fill:url(#radialGradient5660);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:square;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" | ||
2502 | 1619 | id="rect5550" | ||
2503 | 1620 | width="1" | ||
2504 | 1621 | height="1" | ||
2505 | 1622 | x="8" | ||
2506 | 1623 | y="27" | ||
2507 | 1624 | rx="0.26516503" | ||
2508 | 1625 | ry="0.26516503" /> | ||
2509 | 1626 | <rect | ||
2510 | 1627 | style="color:black;fill:url(#radialGradient5662);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:square;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" | ||
2511 | 1628 | id="rect5552" | ||
2512 | 1629 | width="1" | ||
2513 | 1630 | height="1" | ||
2514 | 1631 | x="10" | ||
2515 | 1632 | y="27" | ||
2516 | 1633 | rx="0.26516503" | ||
2517 | 1634 | ry="0.26516503" /> | ||
2518 | 1635 | <rect | ||
2519 | 1636 | style="color:black;fill:url(#radialGradient5664);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:square;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" | ||
2520 | 1637 | id="rect5554" | ||
2521 | 1638 | width="1" | ||
2522 | 1639 | height="1" | ||
2523 | 1640 | x="12" | ||
2524 | 1641 | y="27" | ||
2525 | 1642 | rx="0.26516503" | ||
2526 | 1643 | ry="0.26516503" /> | ||
2527 | 1644 | <rect | ||
2528 | 1645 | style="color:black;fill:url(#radialGradient5666);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:square;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" | ||
2529 | 1646 | id="rect5556" | ||
2530 | 1647 | width="1" | ||
2531 | 1648 | height="1" | ||
2532 | 1649 | x="14" | ||
2533 | 1650 | y="27" | ||
2534 | 1651 | rx="0.26516503" | ||
2535 | 1652 | ry="0.26516503" /> | ||
2536 | 1653 | <rect | ||
2537 | 1654 | style="color:black;fill:url(#radialGradient5668);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:square;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" | ||
2538 | 1655 | id="rect5558" | ||
2539 | 1656 | width="1" | ||
2540 | 1657 | height="1" | ||
2541 | 1658 | x="16" | ||
2542 | 1659 | y="27" | ||
2543 | 1660 | rx="0.26516503" | ||
2544 | 1661 | ry="0.26516503" /> | ||
2545 | 1662 | <rect | ||
2546 | 1663 | style="color:black;fill:url(#radialGradient5670);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:square;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" | ||
2547 | 1664 | id="rect5560" | ||
2548 | 1665 | width="1" | ||
2549 | 1666 | height="1" | ||
2550 | 1667 | x="18" | ||
2551 | 1668 | y="27" | ||
2552 | 1669 | rx="0.26516503" | ||
2553 | 1670 | ry="0.26516503" /> | ||
2554 | 1671 | <rect | ||
2555 | 1672 | style="color:black;fill:url(#radialGradient5672);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:square;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" | ||
2556 | 1673 | id="rect5562" | ||
2557 | 1674 | width="1" | ||
2558 | 1675 | height="1" | ||
2559 | 1676 | x="5" | ||
2560 | 1677 | y="28" | ||
2561 | 1678 | rx="0.26516503" | ||
2562 | 1679 | ry="0.26516503" /> | ||
2563 | 1680 | <rect | ||
2564 | 1681 | style="color:black;fill:url(#radialGradient5674);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:square;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" | ||
2565 | 1682 | id="rect5564" | ||
2566 | 1683 | width="1" | ||
2567 | 1684 | height="1" | ||
2568 | 1685 | x="7" | ||
2569 | 1686 | y="28" | ||
2570 | 1687 | rx="0.26516503" | ||
2571 | 1688 | ry="0.26516503" /> | ||
2572 | 1689 | <rect | ||
2573 | 1690 | style="color:black;fill:url(#radialGradient5676);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:square;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" | ||
2574 | 1691 | id="rect5566" | ||
2575 | 1692 | width="1" | ||
2576 | 1693 | height="1" | ||
2577 | 1694 | x="9" | ||
2578 | 1695 | y="28" | ||
2579 | 1696 | rx="0.26516503" | ||
2580 | 1697 | ry="0.26516503" /> | ||
2581 | 1698 | <rect | ||
2582 | 1699 | style="color:black;fill:url(#radialGradient5678);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:square;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" | ||
2583 | 1700 | id="rect5568" | ||
2584 | 1701 | width="1" | ||
2585 | 1702 | height="1" | ||
2586 | 1703 | x="11" | ||
2587 | 1704 | y="28" | ||
2588 | 1705 | rx="0.26516503" | ||
2589 | 1706 | ry="0.26516503" /> | ||
2590 | 1707 | <rect | ||
2591 | 1708 | style="color:black;fill:url(#radialGradient5680);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:square;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" | ||
2592 | 1709 | id="rect5570" | ||
2593 | 1710 | width="1" | ||
2594 | 1711 | height="1" | ||
2595 | 1712 | x="13" | ||
2596 | 1713 | y="28" | ||
2597 | 1714 | rx="0.26516503" | ||
2598 | 1715 | ry="0.26516503" /> | ||
2599 | 1716 | <rect | ||
2600 | 1717 | style="color:black;fill:url(#radialGradient5682);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:square;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" | ||
2601 | 1718 | id="rect5572" | ||
2602 | 1719 | width="1" | ||
2603 | 1720 | height="1" | ||
2604 | 1721 | x="15" | ||
2605 | 1722 | y="28" | ||
2606 | 1723 | rx="0.26516503" | ||
2607 | 1724 | ry="0.26516503" /> | ||
2608 | 1725 | <rect | ||
2609 | 1726 | style="color:black;fill:url(#radialGradient5684);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:square;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" | ||
2610 | 1727 | id="rect5574" | ||
2611 | 1728 | width="1" | ||
2612 | 1729 | height="1" | ||
2613 | 1730 | x="17" | ||
2614 | 1731 | y="28" | ||
2615 | 1732 | rx="0.26516503" | ||
2616 | 1733 | ry="0.26516503" /> | ||
2617 | 1734 | <rect | ||
2618 | 1735 | style="color:black;fill:url(#radialGradient5686);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:square;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" | ||
2619 | 1736 | id="rect5576" | ||
2620 | 1737 | width="1" | ||
2621 | 1738 | height="1" | ||
2622 | 1739 | x="4" | ||
2623 | 1740 | y="29" | ||
2624 | 1741 | rx="0.26516503" | ||
2625 | 1742 | ry="0.26516503" /> | ||
2626 | 1743 | <rect | ||
2627 | 1744 | style="color:black;fill:url(#radialGradient5688);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:square;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" | ||
2628 | 1745 | id="rect5578" | ||
2629 | 1746 | width="1" | ||
2630 | 1747 | height="1" | ||
2631 | 1748 | x="6" | ||
2632 | 1749 | y="29" | ||
2633 | 1750 | rx="0.26516503" | ||
2634 | 1751 | ry="0.26516503" /> | ||
2635 | 1752 | <rect | ||
2636 | 1753 | style="color:black;fill:url(#radialGradient5690);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:square;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" | ||
2637 | 1754 | id="rect5580" | ||
2638 | 1755 | width="1" | ||
2639 | 1756 | height="1" | ||
2640 | 1757 | x="8" | ||
2641 | 1758 | y="29" | ||
2642 | 1759 | rx="0.26516503" | ||
2643 | 1760 | ry="0.26516503" /> | ||
2644 | 1761 | <rect | ||
2645 | 1762 | style="color:black;fill:url(#radialGradient5692);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:square;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" | ||
2646 | 1763 | id="rect5582" | ||
2647 | 1764 | width="1" | ||
2648 | 1765 | height="1" | ||
2649 | 1766 | x="10" | ||
2650 | 1767 | y="29" | ||
2651 | 1768 | rx="0.26516503" | ||
2652 | 1769 | ry="0.26516503" /> | ||
2653 | 1770 | <rect | ||
2654 | 1771 | style="color:black;fill:url(#radialGradient5694);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:square;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" | ||
2655 | 1772 | id="rect5584" | ||
2656 | 1773 | width="1" | ||
2657 | 1774 | height="1" | ||
2658 | 1775 | x="12" | ||
2659 | 1776 | y="29" | ||
2660 | 1777 | rx="0.26516503" | ||
2661 | 1778 | ry="0.26516503" /> | ||
2662 | 1779 | <rect | ||
2663 | 1780 | style="color:black;fill:url(#radialGradient5696);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:square;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" | ||
2664 | 1781 | id="rect5586" | ||
2665 | 1782 | width="1" | ||
2666 | 1783 | height="1" | ||
2667 | 1784 | x="14" | ||
2668 | 1785 | y="29" | ||
2669 | 1786 | rx="0.26516503" | ||
2670 | 1787 | ry="0.26516503" /> | ||
2671 | 1788 | <rect | ||
2672 | 1789 | style="color:black;fill:url(#radialGradient5698);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:square;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" | ||
2673 | 1790 | id="rect5588" | ||
2674 | 1791 | width="1" | ||
2675 | 1792 | height="1" | ||
2676 | 1793 | x="16" | ||
2677 | 1794 | y="29" | ||
2678 | 1795 | rx="0.26516503" | ||
2679 | 1796 | ry="0.26516503" /> | ||
2680 | 1797 | <rect | ||
2681 | 1798 | style="color:black;fill:url(#radialGradient5700);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:square;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" | ||
2682 | 1799 | id="rect5590" | ||
2683 | 1800 | width="1" | ||
2684 | 1801 | height="1" | ||
2685 | 1802 | x="18" | ||
2686 | 1803 | y="29" | ||
2687 | 1804 | rx="0.26516503" | ||
2688 | 1805 | ry="0.26516503" /> | ||
2689 | 1806 | <rect | ||
2690 | 1807 | style="color:black;fill:url(#radialGradient5702);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:square;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" | ||
2691 | 1808 | id="rect5592" | ||
2692 | 1809 | width="1" | ||
2693 | 1810 | height="1" | ||
2694 | 1811 | x="21" | ||
2695 | 1812 | y="26" | ||
2696 | 1813 | rx="0.26516503" | ||
2697 | 1814 | ry="0.26516503" /> | ||
2698 | 1815 | <rect | ||
2699 | 1816 | style="color:black;fill:url(#radialGradient5704);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:square;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" | ||
2700 | 1817 | id="rect5594" | ||
2701 | 1818 | width="1" | ||
2702 | 1819 | height="1" | ||
2703 | 1820 | x="20" | ||
2704 | 1821 | y="27" | ||
2705 | 1822 | rx="0.26516503" | ||
2706 | 1823 | ry="0.26516503" /> | ||
2707 | 1824 | <rect | ||
2708 | 1825 | style="color:black;fill:url(#radialGradient5706);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:square;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" | ||
2709 | 1826 | id="rect5596" | ||
2710 | 1827 | width="1" | ||
2711 | 1828 | height="1" | ||
2712 | 1829 | x="22" | ||
2713 | 1830 | y="27" | ||
2714 | 1831 | rx="0.26516503" | ||
2715 | 1832 | ry="0.26516503" /> | ||
2716 | 1833 | <rect | ||
2717 | 1834 | style="color:black;fill:url(#radialGradient5708);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:square;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" | ||
2718 | 1835 | id="rect5598" | ||
2719 | 1836 | width="1" | ||
2720 | 1837 | height="1" | ||
2721 | 1838 | x="21" | ||
2722 | 1839 | y="28" | ||
2723 | 1840 | rx="0.26516503" | ||
2724 | 1841 | ry="0.26516503" /> | ||
2725 | 1842 | <rect | ||
2726 | 1843 | style="color:black;fill:url(#radialGradient5710);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:square;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" | ||
2727 | 1844 | id="rect5600" | ||
2728 | 1845 | width="1" | ||
2729 | 1846 | height="1" | ||
2730 | 1847 | x="23" | ||
2731 | 1848 | y="28" | ||
2732 | 1849 | rx="0.26516503" | ||
2733 | 1850 | ry="0.26516503" /> | ||
2734 | 1851 | <rect | ||
2735 | 1852 | style="color:black;fill:url(#radialGradient5712);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:square;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" | ||
2736 | 1853 | id="rect5602" | ||
2737 | 1854 | width="1" | ||
2738 | 1855 | height="1" | ||
2739 | 1856 | x="20" | ||
2740 | 1857 | y="29" | ||
2741 | 1858 | rx="0.26516503" | ||
2742 | 1859 | ry="0.26516503" /> | ||
2743 | 1860 | <rect | ||
2744 | 1861 | style="color:black;fill:url(#radialGradient5714);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:square;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" | ||
2745 | 1862 | id="rect5604" | ||
2746 | 1863 | width="1" | ||
2747 | 1864 | height="1" | ||
2748 | 1865 | x="22" | ||
2749 | 1866 | y="29" | ||
2750 | 1867 | rx="0.26516503" | ||
2751 | 1868 | ry="0.26516503" /> | ||
2752 | 1869 | <rect | ||
2753 | 1870 | style="color:black;fill:url(#radialGradient5716);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:square;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" | ||
2754 | 1871 | id="rect5606" | ||
2755 | 1872 | width="1" | ||
2756 | 1873 | height="1" | ||
2757 | 1874 | x="26" | ||
2758 | 1875 | y="26" | ||
2759 | 1876 | rx="0.26516503" | ||
2760 | 1877 | ry="0.26516503" /> | ||
2761 | 1878 | <rect | ||
2762 | 1879 | style="color:black;fill:url(#radialGradient5718);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:square;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" | ||
2763 | 1880 | id="rect5608" | ||
2764 | 1881 | width="1" | ||
2765 | 1882 | height="1" | ||
2766 | 1883 | x="25" | ||
2767 | 1884 | y="27" | ||
2768 | 1885 | rx="0.26516503" | ||
2769 | 1886 | ry="0.26516503" /> | ||
2770 | 1887 | <rect | ||
2771 | 1888 | style="color:black;fill:url(#radialGradient5720);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:square;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" | ||
2772 | 1889 | id="rect5610" | ||
2773 | 1890 | width="1" | ||
2774 | 1891 | height="1" | ||
2775 | 1892 | x="27" | ||
2776 | 1893 | y="27" | ||
2777 | 1894 | rx="0.26516503" | ||
2778 | 1895 | ry="0.26516503" /> | ||
2779 | 1896 | <rect | ||
2780 | 1897 | style="color:black;fill:url(#radialGradient5722);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:square;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" | ||
2781 | 1898 | id="rect5612" | ||
2782 | 1899 | width="1" | ||
2783 | 1900 | height="1" | ||
2784 | 1901 | x="26" | ||
2785 | 1902 | y="28" | ||
2786 | 1903 | rx="0.26516503" | ||
2787 | 1904 | ry="0.26516503" /> | ||
2788 | 1905 | <rect | ||
2789 | 1906 | style="color:black;fill:url(#radialGradient5724);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:square;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" | ||
2790 | 1907 | id="rect5614" | ||
2791 | 1908 | width="1" | ||
2792 | 1909 | height="1" | ||
2793 | 1910 | x="28" | ||
2794 | 1911 | y="28" | ||
2795 | 1912 | rx="0.26516503" | ||
2796 | 1913 | ry="0.26516503" /> | ||
2797 | 1914 | <rect | ||
2798 | 1915 | style="color:black;fill:url(#radialGradient5726);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:square;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" | ||
2799 | 1916 | id="rect5616" | ||
2800 | 1917 | width="1" | ||
2801 | 1918 | height="1" | ||
2802 | 1919 | x="25" | ||
2803 | 1920 | y="29" | ||
2804 | 1921 | rx="0.26516503" | ||
2805 | 1922 | ry="0.26516503" /> | ||
2806 | 1923 | <rect | ||
2807 | 1924 | style="color:black;fill:url(#radialGradient5728);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:square;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" | ||
2808 | 1925 | id="rect5618" | ||
2809 | 1926 | width="1" | ||
2810 | 1927 | height="1" | ||
2811 | 1928 | x="27" | ||
2812 | 1929 | y="29" | ||
2813 | 1930 | rx="0.26516503" | ||
2814 | 1931 | ry="0.26516503" /> | ||
2815 | 1932 | </g> | ||
2816 | 1933 | </g> | ||
2817 | 1934 | <g | ||
2818 | 1935 | id="g5340" | ||
2819 | 1936 | transform="translate(0.985355,12)"> | ||
2820 | 1937 | <g | ||
2821 | 1938 | style="display:inline" | ||
2822 | 1939 | inkscape:label="Layer 1" | ||
2823 | 1940 | id="g5342" /> | ||
2824 | 1941 | <g | ||
2825 | 1942 | style="display:inline" | ||
2826 | 1943 | inkscape:label="tastiera" | ||
2827 | 1944 | id="g5344"> | ||
2828 | 1945 | <g | ||
2829 | 1946 | transform="translate(-54,0.18088)" | ||
2830 | 1947 | inkscape:label="Shadow" | ||
2831 | 1948 | id="g5346" /> | ||
2832 | 1949 | <g | ||
2833 | 1950 | id="g5348" | ||
2834 | 1951 | inkscape:label="Shadow" | ||
2835 | 1952 | transform="translate(-54,15.24691)" /> | ||
2836 | 1953 | <g | ||
2837 | 1954 | id="g5350" | ||
2838 | 1955 | inkscape:label="Lavoro" | ||
2839 | 1956 | style="display:inline" | ||
2840 | 1957 | transform="translate(-54,15.24691)" /> | ||
2841 | 1958 | </g> | ||
2842 | 1959 | <g | ||
2843 | 1960 | style="display:inline" | ||
2844 | 1961 | inkscape:label="tasti" | ||
2845 | 1962 | id="layer2"> | ||
2846 | 1963 | <path | ||
2847 | 1964 | transform="matrix(0.633479,0,0,0.565504,1.119993,0.201324)" | ||
2848 | 1965 | d="M 47.69706 42.6875 A 23.75956 5.8835783 0 1 1 0.17794037,42.6875 A 23.75956 5.8835783 0 1 1 47.69706 42.6875 z" | ||
2849 | 1966 | sodipodi:ry="5.8835783" | ||
2850 | 1967 | sodipodi:rx="23.75956" | ||
2851 | 1968 | sodipodi:cy="42.6875" | ||
2852 | 1969 | sodipodi:cx="23.9375" | ||
2853 | 1970 | id="path5353" | ||
2854 | 1971 | style="opacity:0.3;fill:url(#radialGradient2313);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline" | ||
2855 | 1972 | sodipodi:type="arc" /> | ||
2856 | 1973 | <path | ||
2857 | 1974 | style="opacity:0.20786516;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:url(#linearGradient4202);stroke-width:0.99999982;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline" | ||
2858 | 1975 | d="M 27.082936,28.048013 C 21.663366,21.135948 31.947853,26.54939 30.855772,24.153878 C 29.785572,21.806364 17.408039,24.595241 18.709552,20.667209" | ||
2859 | 1976 | id="path5355" | ||
2860 | 1977 | sodipodi:nodetypes="czz" /> | ||
2861 | 1978 | <path | ||
2862 | 1979 | sodipodi:nodetypes="czz" | ||
2863 | 1980 | id="path5357" | ||
2864 | 1981 | d="M 26.784723,27.671888 C 21.538638,20.412631 31.520563,26.487432 30.374151,23.604157 C 29.072638,20.330797 18.198646,24.276982 18.806217,20.406815" | ||
2865 | 1982 | style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#729fcf;stroke-width:0.99999994;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline" /> | ||
2866 | 1983 | <g | ||
2867 | 1984 | transform="matrix(0.530612,0,0,0.53095,3.140616,3.404111)" | ||
2868 | 1985 | id="g5359" | ||
2869 | 1986 | style="display:inline"> | ||
2870 | 1987 | <path | ||
2871 | 1988 | sodipodi:nodetypes="csccscc" | ||
2872 | 1989 | id="path5361" | ||
2873 | 1990 | d="M 14.375479,32.558794 C 14.375479,32.558794 15.592355,37.45777 10.51915,37.50376 C 8.0888743,37.525507 8.5866723,41.509781 8.5866723,41.509781 L 39.433139,41.478634 C 39.433139,41.478634 39.851577,37.611393 37.410922,37.566053 C 32.423455,37.474579 33.600393,32.496503 33.600393,32.496503 L 14.375479,32.558794 z " | ||
2874 | 1991 | style="opacity:1;color:black;fill:url(#linearGradient2308);fill-opacity:1;fill-rule:evenodd;stroke:#888a85;stroke-width:1.88401449;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" /> | ||
2875 | 1992 | <path | ||
2876 | 1993 | sodipodi:nodetypes="ccccc" | ||
2877 | 1994 | id="path5363" | ||
2878 | 1995 | d="M 13.926195,33.027451 C 14.010206,35.2 13.641655,35.938894 12.285731,36.702682 L 36,38 C 35.047008,36.831372 33.660837,35.066666 34.038883,33.011765 L 13.926195,33.027451 z " | ||
2879 | 1996 | style="opacity:0.5;fill:url(#linearGradient2310);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" /> | ||
2880 | 1997 | <path | ||
2881 | 1998 | style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#8d8d8f;stroke-width:1.88401508px;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:0.43902438" | ||
2882 | 1999 | d="M 10.436202,38.661601 C 17.000465,38.66357 37.562637,38.661601 37.562637,38.661601" | ||
2883 | 2000 | id="path5365" | ||
2884 | 2001 | sodipodi:nodetypes="cc" /> | ||
2885 | 2002 | <path | ||
2886 | 2003 | sodipodi:nodetypes="cc" | ||
2887 | 2004 | id="path5367" | ||
2888 | 2005 | d="M 11.134219,39.660187 C 17.146756,39.662156 36.881517,39.660187 36.881517,39.660187" | ||
2889 | 2006 | style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:white;stroke-width:1.88401532px;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1" /> | ||
2890 | 2007 | </g> | ||
2891 | 2008 | <path | ||
2892 | 2009 | sodipodi:nodetypes="ccccccccc" | ||
2893 | 2010 | id="path5369" | ||
2894 | 2011 | d="M 3.602229,1.4999996 L 28.319154,1.4999996 C 29.631932,1.4999996 30.588653,2.4197694 30.588653,3.8361498 L 30.595753,20.072828 C 30.595753,21.162945 30.253253,21.499994 29.276792,21.499994 L 2.7228402,21.487795 C 1.9583807,21.469246 1.414291,21.169109 1.404027,20.186855 L 1.4138652,3.7151949 C 1.4138652,2.572403 2.4117826,1.4999996 3.602229,1.4999996 z " | ||
2895 | 2012 | style="fill:url(#linearGradient5147);fill-opacity:1;fill-rule:evenodd;stroke:#888a85;stroke-width:1.00000036;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;display:inline" /> | ||
2896 | 2013 | <rect | ||
2897 | 2014 | y="3.5000005" | ||
2898 | 2015 | x="3.4999971" | ||
2899 | 2016 | height="15.194118" | ||
2900 | 2017 | width="25.103695" | ||
2901 | 2018 | id="rect5371" | ||
2902 | 2019 | style="fill:url(#radialGradient5239);fill-opacity:1;fill-rule:evenodd;stroke:#204a87;stroke-width:0.99999958px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline" /> | ||
2903 | 2020 | <path | ||
2904 | 2021 | sodipodi:nodetypes="ccccc" | ||
2905 | 2022 | id="path5373" | ||
2906 | 2023 | d="M 4.0984042,4.0204313 L 4.0984042,15.748091 C 15.025941,14.866132 19.115514,9.1623492 28,8.5664313 L 28,4 L 4.0984042,4.0204313 z " | ||
2907 | 2024 | style="opacity:0.5;fill:url(#linearGradient6246);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline" /> | ||
2908 | 2025 | <path | ||
2909 | 2026 | sodipodi:nodetypes="cccsccscccc" | ||
2910 | 2027 | id="path5375" | ||
2911 | 2028 | d="M 4.056094,2.4999991 C 3.2398944,2.4999991 2.4960113,3.2952856 2.4960113,4.0741096 L 2.4960108,19.789734 C 2.4999206,20.160319 2.5869303,20.275382 2.6715202,20.346431 C 2.7561101,20.417479 2.9348114,20.473541 3.2370502,20.480806 L 28.783404,20.500002 C 29.189758,20.500002 29.318189,20.437946 29.368434,20.384824 C 29.418681,20.3317 29.504941,20.138678 29.504941,19.674554 L 29.504942,4.1892884 C 29.504942,3.0791795 28.874178,2.4999991 27.866855,2.4999991 L 4.056094,2.4999991 z " | ||
2912 | 2029 | style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:white;stroke-width:0.99999958;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;display:inline" /> | ||
2913 | 2030 | <g | ||
2914 | 2031 | id="g5377" | ||
2915 | 2032 | transform="matrix(1.543206e-2,0,0,1.215502e-2,29.57023,28.01728)" | ||
2916 | 2033 | style="display:inline"> | ||
2917 | 2034 | <rect | ||
2918 | 2035 | y="-150.69685" | ||
2919 | 2036 | x="-1559.2523" | ||
2920 | 2037 | height="478.35718" | ||
2921 | 2038 | width="1339.6335" | ||
2922 | 2039 | id="rect6709" | ||
2923 | 2040 | style="opacity:0.40206185;color:black;fill:url(#linearGradient5478);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" /> | ||
2924 | 2041 | <path | ||
2925 | 2042 | sodipodi:nodetypes="cccc" | ||
2926 | 2043 | id="path5380" | ||
2927 | 2044 | d="M -219.61876,-150.68038 C -219.61876,-150.68038 -219.61876,327.65041 -219.61876,327.65041 C -76.744594,328.55086 125.78146,220.48075 125.78138,88.454235 C 125.78138,-43.572302 -33.655436,-150.68036 -219.61876,-150.68038 z " | ||
2928 | 2045 | style="opacity:0.40206185;color:black;fill:url(#radialGradient2309);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" /> | ||
2929 | 2046 | <path | ||
2930 | 2047 | style="opacity:0.40206185;color:black;fill:url(#radialGradient2311);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" | ||
2931 | 2048 | d="M -1559.2523,-150.68038 C -1559.2523,-150.68038 -1559.2523,327.65041 -1559.2523,327.65041 C -1702.1265,328.55086 -1904.6525,220.48075 -1904.6525,88.454235 C -1904.6525,-43.572302 -1745.2157,-150.68036 -1559.2523,-150.68038 z " | ||
2932 | 2049 | id="path5382" | ||
2933 | 2050 | sodipodi:nodetypes="cccc" /> | ||
2934 | 2051 | </g> | ||
2935 | 2052 | <path | ||
2936 | 2053 | sodipodi:nodetypes="ccccccccc" | ||
2937 | 2054 | id="path5384" | ||
2938 | 2055 | d="M 3.643761,26.504783 L 28.921938,26.504783 C 29.226374,26.504783 29.788645,26.492665 30,27 L 31.5,30 C 31.5625,30.406064 31.487026,31.562501 30,31.562501 L 2.5,31.500001 C 1,31.562501 1.0652178,30.281064 1.0652178,30 L 3,27 C 3.2113561,26.492665 3.3393239,26.504783 3.643761,26.504783 z " | ||
2939 | 2056 | style="color:black;fill:url(#linearGradient3905);fill-opacity:1;fill-rule:nonzero;stroke:#888a85;stroke-width:0.99999976;stroke-linecap:square;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" /> | ||
2940 | 2057 | <path | ||
2941 | 2058 | sodipodi:nodetypes="ccccccccc" | ||
2942 | 2059 | id="path5386" | ||
2943 | 2060 | d="M 4.0955909,27.111942 L 28.49679,27.10614 C 28.788541,27.10614 28.820868,27.10614 29.023418,27.449588 L 30.420658,30.150759 C 30.420658,30.341029 30.185782,30.494207 29.894029,30.494207 L 2.6782341,30.500011 C 2.3864818,30.500011 2.1516056,30.346832 2.1516056,30.156562 L 3.5689622,27.45539 C 3.7715117,27.111942 3.8038386,27.111942 4.0955909,27.111942 z " | ||
2944 | 2061 | style="opacity:1;color:black;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:white;stroke-width:0.99999964;stroke-linecap:square;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" /> | ||
2945 | 2062 | <path | ||
2946 | 2063 | sodipodi:nodetypes="csssssssccssssssssssssccccssscccccccccssssssssssssccsssssssssccccccc" | ||
2947 | 2064 | id="path5388" | ||
2948 | 2065 | d="M 4.9039459,26.500588 C 4.9019723,26.502459 4.9057445,26.514939 4.9039459,26.516406 C 4.89444,26.51889 4.8714034,26.528697 4.8616746,26.532224 C 4.8584281,26.533516 4.8437789,26.530815 4.840539,26.532224 C 4.8373165,26.533749 4.8225981,26.546397 4.8194034,26.548041 C 4.8130911,26.551565 4.8043634,26.559861 4.7982678,26.563859 C 4.7952901,26.565977 4.7800294,26.57744 4.7771322,26.579677 C 4.7743261,26.582033 4.7587013,26.593017 4.7559967,26.595495 C 4.7139608,26.641114 4.6696929,26.720423 4.6080475,26.816941 L 3.1646057,29.221226 C 3.1646057,29.224233 3.1644578,29.234029 3.1646057,29.237043 C 3.1648991,29.240062 3.1641691,29.249843 3.1646057,29.25286 C 3.1651831,29.255877 3.1638899,29.265668 3.1646057,29.268679 C 3.1663094,29.274683 3.1835077,29.294359 3.1857413,29.300313 C 3.1869871,29.303274 3.184369,29.31319 3.1857413,29.316132 C 3.1902312,29.324886 3.2013114,29.339269 3.2068769,29.347766 C 3.2127868,29.356161 3.2211123,29.37137 3.2280125,29.379402 C 3.230418,29.382033 3.2466397,29.392637 3.2491481,29.395219 C 3.2517571,29.39775 3.2675765,29.408562 3.2702837,29.411038 C 3.287102,29.425545 3.313719,29.446427 3.3336905,29.45849 C 3.3370984,29.460423 3.3513413,29.472456 3.3548262,29.474308 C 3.3655167,29.479116 3.3855128,29.485766 3.3970973,29.490126 C 3.4750042,29.516899 3.5780713,29.537579 3.6718601,29.537579 L 18.650036,29.537579 L 18.586629,26.500592 L 5.1153018,26.500588 C 5.0709049,26.500588 5.0221446,26.49941 4.9884883,26.500588 C 4.9806133,26.500623 4.9547729,26.500899 4.9462171,26.500588 C 4.9436075,26.500603 4.9274517,26.500458 4.9250814,26.500588 C 4.9232514,26.502034 4.9059195,26.498718 4.9039459,26.500588 z M 19.83363,26.500592 L 19.897036,27.512921 L 23.553495,27.512921 L 23.38441,26.500592 L 19.83363,26.500592 z M 24.652546,26.500592 L 25.413428,29.537579 L 28.795124,29.537579 C 28.888912,29.537579 28.991979,29.516899 29.069886,29.490126 C 29.081471,29.485766 29.101467,29.479116 29.112157,29.474308 C 29.115641,29.472456 29.129884,29.460423 29.133293,29.45849 C 29.153265,29.446427 29.179882,29.425545 29.1967,29.411038 C 29.199407,29.408562 29.215227,29.39775 29.217835,29.395219 C 29.220344,29.392637 29.236565,29.382033 29.238971,29.379402 C 29.245871,29.37137 29.254196,29.356161 29.260107,29.347766 C 29.265672,29.339269 29.276752,29.324886 29.281242,29.316132 C 29.282614,29.31319 29.279996,29.303274 29.281242,29.300313 C 29.283476,29.294359 29.300674,29.274683 29.302378,29.268679 C 29.303093,29.265668 29.3018,29.255877 29.302378,29.25286 C 29.302814,29.249843 29.302083,29.240062 29.302378,29.237043 C 29.302527,29.234029 29.302378,29.224233 29.302378,29.221226 L 28.119129,26.816941 C 28.057483,26.720424 28.013215,26.641114 27.97118,26.595495 C 27.968475,26.593017 27.95285,26.582033 27.950044,26.579677 C 27.947147,26.57744 27.931886,26.565977 27.928908,26.563859 C 27.922812,26.559861 27.914085,26.551565 27.907773,26.548041 C 27.904579,26.546397 27.88986,26.533749 27.886638,26.532224 C 27.883397,26.530815 27.868747,26.533516 27.865502,26.532224 C 27.855773,26.528697 27.832737,26.51889 27.823231,26.516406 C 27.812787,26.51452 27.796296,26.503902 27.780959,26.500588 C 27.773263,26.49907 27.745738,26.501448 27.738688,26.500588 C 27.705031,26.49941 27.656271,26.500588 27.611875,26.500588 L 24.652546,26.500592 z M 20.679054,28.525249 L 20.002715,29.537579 L 23.891664,29.537579 L 23.04624,28.525249 L 20.679054,28.525249 z " | ||
2949 | 2066 | style="color:black;fill:#d3d7cf;fill-opacity:1;fill-rule:nonzero;stroke:#babdb6;stroke-width:0.99999923;stroke-linecap:square;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" /> | ||
2950 | 2067 | <rect | ||
2951 | 2068 | style="color:black;fill:url(#radialGradient3248);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:square;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" | ||
2952 | 2069 | id="rect5390" | ||
2953 | 2070 | width="1" | ||
2954 | 2071 | height="1" | ||
2955 | 2072 | x="5" | ||
2956 | 2073 | y="26" | ||
2957 | 2074 | rx="0.26516503" | ||
2958 | 2075 | ry="0.26516503" /> | ||
2959 | 2076 | <rect | ||
2960 | 2077 | style="color:black;fill:url(#radialGradient3245);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:square;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" | ||
2961 | 2078 | id="rect5392" | ||
2962 | 2079 | width="1" | ||
2963 | 2080 | height="1" | ||
2964 | 2081 | x="7" | ||
2965 | 2082 | y="26" | ||
2966 | 2083 | rx="0.26516503" | ||
2967 | 2084 | ry="0.26516503" /> | ||
2968 | 2085 | <rect | ||
2969 | 2086 | style="color:black;fill:url(#radialGradient3242);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:square;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" | ||
2970 | 2087 | id="rect5394" | ||
2971 | 2088 | width="1" | ||
2972 | 2089 | height="1" | ||
2973 | 2090 | x="9" | ||
2974 | 2091 | y="26" | ||
2975 | 2092 | rx="0.26516503" | ||
2976 | 2093 | ry="0.26516503" /> | ||
2977 | 2094 | <rect | ||
2978 | 2095 | style="color:black;fill:url(#radialGradient3239);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:square;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" | ||
2979 | 2096 | id="rect5396" | ||
2980 | 2097 | width="1" | ||
2981 | 2098 | height="1" | ||
2982 | 2099 | x="11" | ||
2983 | 2100 | y="26" | ||
2984 | 2101 | rx="0.26516503" | ||
2985 | 2102 | ry="0.26516503" /> | ||
2986 | 2103 | <rect | ||
2987 | 2104 | style="color:black;fill:url(#radialGradient3236);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:square;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" | ||
2988 | 2105 | id="rect5398" | ||
2989 | 2106 | width="1" | ||
2990 | 2107 | height="1" | ||
2991 | 2108 | x="13" | ||
2992 | 2109 | y="26" | ||
2993 | 2110 | rx="0.26516503" | ||
2994 | 2111 | ry="0.26516503" /> | ||
2995 | 2112 | <rect | ||
2996 | 2113 | style="color:black;fill:url(#radialGradient3233);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:square;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" | ||
2997 | 2114 | id="rect5400" | ||
2998 | 2115 | width="1" | ||
2999 | 2116 | height="1" | ||
3000 | 2117 | x="15" | ||
3001 | 2118 | y="26" | ||
3002 | 2119 | rx="0.26516503" | ||
3003 | 2120 | ry="0.26516503" /> | ||
3004 | 2121 | <rect | ||
3005 | 2122 | style="color:black;fill:url(#radialGradient3230);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:square;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" | ||
3006 | 2123 | id="rect5402" | ||
3007 | 2124 | width="1" | ||
3008 | 2125 | height="1" | ||
3009 | 2126 | x="17" | ||
3010 | 2127 | y="26" | ||
3011 | 2128 | rx="0.26516503" | ||
3012 | 2129 | ry="0.26516503" /> | ||
3013 | 2130 | <rect | ||
3014 | 2131 | style="color:black;fill:url(#radialGradient3224);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:square;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" | ||
3015 | 2132 | id="rect5404" | ||
3016 | 2133 | width="1" | ||
3017 | 2134 | height="1" | ||
3018 | 2135 | x="4" | ||
3019 | 2136 | y="27" | ||
3020 | 2137 | rx="0.26516503" | ||
3021 | 2138 | ry="0.26516503" /> | ||
3022 | 2139 | <rect | ||
3023 | 2140 | style="color:black;fill:url(#radialGradient3221);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:square;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" | ||
3024 | 2141 | id="rect5406" | ||
3025 | 2142 | width="1" | ||
3026 | 2143 | height="1" | ||
3027 | 2144 | x="6" | ||
3028 | 2145 | y="27" | ||
3029 | 2146 | rx="0.26516503" | ||
3030 | 2147 | ry="0.26516503" /> | ||
3031 | 2148 | <rect | ||
3032 | 2149 | style="color:black;fill:url(#radialGradient3218);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:square;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" | ||
3033 | 2150 | id="rect5408" | ||
3034 | 2151 | width="1" | ||
3035 | 2152 | height="1" | ||
3036 | 2153 | x="8" | ||
3037 | 2154 | y="27" | ||
3038 | 2155 | rx="0.26516503" | ||
3039 | 2156 | ry="0.26516503" /> | ||
3040 | 2157 | <rect | ||
3041 | 2158 | style="color:black;fill:url(#radialGradient3215);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:square;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" | ||
3042 | 2159 | id="rect5410" | ||
3043 | 2160 | width="1" | ||
3044 | 2161 | height="1" | ||
3045 | 2162 | x="10" | ||
3046 | 2163 | y="27" | ||
3047 | 2164 | rx="0.26516503" | ||
3048 | 2165 | ry="0.26516503" /> | ||
3049 | 2166 | <rect | ||
3050 | 2167 | style="color:black;fill:url(#radialGradient3212);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:square;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" | ||
3051 | 2168 | id="rect5412" | ||
3052 | 2169 | width="1" | ||
3053 | 2170 | height="1" | ||
3054 | 2171 | x="12" | ||
3055 | 2172 | y="27" | ||
3056 | 2173 | rx="0.26516503" | ||
3057 | 2174 | ry="0.26516503" /> | ||
3058 | 2175 | <rect | ||
3059 | 2176 | style="color:black;fill:url(#radialGradient3209);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:square;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" | ||
3060 | 2177 | id="rect5414" | ||
3061 | 2178 | width="1" | ||
3062 | 2179 | height="1" | ||
3063 | 2180 | x="14" | ||
3064 | 2181 | y="27" | ||
3065 | 2182 | rx="0.26516503" | ||
3066 | 2183 | ry="0.26516503" /> | ||
3067 | 2184 | <rect | ||
3068 | 2185 | style="color:black;fill:url(#radialGradient3206);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:square;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" | ||
3069 | 2186 | id="rect5416" | ||
3070 | 2187 | width="1" | ||
3071 | 2188 | height="1" | ||
3072 | 2189 | x="16" | ||
3073 | 2190 | y="27" | ||
3074 | 2191 | rx="0.26516503" | ||
3075 | 2192 | ry="0.26516503" /> | ||
3076 | 2193 | <rect | ||
3077 | 2194 | style="color:black;fill:url(#radialGradient3203);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:square;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" | ||
3078 | 2195 | id="rect5418" | ||
3079 | 2196 | width="1" | ||
3080 | 2197 | height="1" | ||
3081 | 2198 | x="18" | ||
3082 | 2199 | y="27" | ||
3083 | 2200 | rx="0.26516503" | ||
3084 | 2201 | ry="0.26516503" /> | ||
3085 | 2202 | <rect | ||
3086 | 2203 | style="color:black;fill:url(#radialGradient3200);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:square;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" | ||
3087 | 2204 | id="rect5420" | ||
3088 | 2205 | width="1" | ||
3089 | 2206 | height="1" | ||
3090 | 2207 | x="5" | ||
3091 | 2208 | y="28" | ||
3092 | 2209 | rx="0.26516503" | ||
3093 | 2210 | ry="0.26516503" /> | ||
3094 | 2211 | <rect | ||
3095 | 2212 | style="color:black;fill:url(#radialGradient3197);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:square;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" | ||
3096 | 2213 | id="rect5422" | ||
3097 | 2214 | width="1" | ||
3098 | 2215 | height="1" | ||
3099 | 2216 | x="7" | ||
3100 | 2217 | y="28" | ||
3101 | 2218 | rx="0.26516503" | ||
3102 | 2219 | ry="0.26516503" /> | ||
3103 | 2220 | <rect | ||
3104 | 2221 | style="color:black;fill:url(#radialGradient3194);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:square;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" | ||
3105 | 2222 | id="rect5424" | ||
3106 | 2223 | width="1" | ||
3107 | 2224 | height="1" | ||
3108 | 2225 | x="9" | ||
3109 | 2226 | y="28" | ||
3110 | 2227 | rx="0.26516503" | ||
3111 | 2228 | ry="0.26516503" /> | ||
3112 | 2229 | <rect | ||
3113 | 2230 | style="color:black;fill:url(#radialGradient3191);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:square;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" | ||
3114 | 2231 | id="rect5426" | ||
3115 | 2232 | width="1" | ||
3116 | 2233 | height="1" | ||
3117 | 2234 | x="11" | ||
3118 | 2235 | y="28" | ||
3119 | 2236 | rx="0.26516503" | ||
3120 | 2237 | ry="0.26516503" /> | ||
3121 | 2238 | <rect | ||
3122 | 2239 | style="color:black;fill:url(#radialGradient3188);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:square;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" | ||
3123 | 2240 | id="rect5428" | ||
3124 | 2241 | width="1" | ||
3125 | 2242 | height="1" | ||
3126 | 2243 | x="13" | ||
3127 | 2244 | y="28" | ||
3128 | 2245 | rx="0.26516503" | ||
3129 | 2246 | ry="0.26516503" /> | ||
3130 | 2247 | <rect | ||
3131 | 2248 | style="color:black;fill:url(#radialGradient3185);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:square;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" | ||
3132 | 2249 | id="rect5430" | ||
3133 | 2250 | width="1" | ||
3134 | 2251 | height="1" | ||
3135 | 2252 | x="15" | ||
3136 | 2253 | y="28" | ||
3137 | 2254 | rx="0.26516503" | ||
3138 | 2255 | ry="0.26516503" /> | ||
3139 | 2256 | <rect | ||
3140 | 2257 | style="color:black;fill:url(#radialGradient3182);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:square;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" | ||
3141 | 2258 | id="rect5432" | ||
3142 | 2259 | width="1" | ||
3143 | 2260 | height="1" | ||
3144 | 2261 | x="17" | ||
3145 | 2262 | y="28" | ||
3146 | 2263 | rx="0.26516503" | ||
3147 | 2264 | ry="0.26516503" /> | ||
3148 | 2265 | <rect | ||
3149 | 2266 | style="color:black;fill:url(#radialGradient3176);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:square;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" | ||
3150 | 2267 | id="rect5434" | ||
3151 | 2268 | width="1" | ||
3152 | 2269 | height="1" | ||
3153 | 2270 | x="4" | ||
3154 | 2271 | y="29" | ||
3155 | 2272 | rx="0.26516503" | ||
3156 | 2273 | ry="0.26516503" /> | ||
3157 | 2274 | <rect | ||
3158 | 2275 | style="color:black;fill:url(#radialGradient3173);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:square;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" | ||
3159 | 2276 | id="rect5436" | ||
3160 | 2277 | width="1" | ||
3161 | 2278 | height="1" | ||
3162 | 2279 | x="6" | ||
3163 | 2280 | y="29" | ||
3164 | 2281 | rx="0.26516503" | ||
3165 | 2282 | ry="0.26516503" /> | ||
3166 | 2283 | <rect | ||
3167 | 2284 | style="color:black;fill:url(#radialGradient3170);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:square;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" | ||
3168 | 2285 | id="rect5438" | ||
3169 | 2286 | width="1" | ||
3170 | 2287 | height="1" | ||
3171 | 2288 | x="8" | ||
3172 | 2289 | y="29" | ||
3173 | 2290 | rx="0.26516503" | ||
3174 | 2291 | ry="0.26516503" /> | ||
3175 | 2292 | <rect | ||
3176 | 2293 | style="color:black;fill:url(#radialGradient3167);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:square;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" | ||
3177 | 2294 | id="rect5440" | ||
3178 | 2295 | width="1" | ||
3179 | 2296 | height="1" | ||
3180 | 2297 | x="10" | ||
3181 | 2298 | y="29" | ||
3182 | 2299 | rx="0.26516503" | ||
3183 | 2300 | ry="0.26516503" /> | ||
3184 | 2301 | <rect | ||
3185 | 2302 | style="color:black;fill:url(#radialGradient3164);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:square;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" | ||
3186 | 2303 | id="rect5442" | ||
3187 | 2304 | width="1" | ||
3188 | 2305 | height="1" | ||
3189 | 2306 | x="12" | ||
3190 | 2307 | y="29" | ||
3191 | 2308 | rx="0.26516503" | ||
3192 | 2309 | ry="0.26516503" /> | ||
3193 | 2310 | <rect | ||
3194 | 2311 | style="color:black;fill:url(#radialGradient3161);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:square;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" | ||
3195 | 2312 | id="rect5444" | ||
3196 | 2313 | width="1" | ||
3197 | 2314 | height="1" | ||
3198 | 2315 | x="14" | ||
3199 | 2316 | y="29" | ||
3200 | 2317 | rx="0.26516503" | ||
3201 | 2318 | ry="0.26516503" /> | ||
3202 | 2319 | <rect | ||
3203 | 2320 | style="color:black;fill:url(#radialGradient3158);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:square;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" | ||
3204 | 2321 | id="rect5446" | ||
3205 | 2322 | width="1" | ||
3206 | 2323 | height="1" | ||
3207 | 2324 | x="16" | ||
3208 | 2325 | y="29" | ||
3209 | 2326 | rx="0.26516503" | ||
3210 | 2327 | ry="0.26516503" /> | ||
3211 | 2328 | <rect | ||
3212 | 2329 | style="color:black;fill:url(#radialGradient3155);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:square;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" | ||
3213 | 2330 | id="rect5448" | ||
3214 | 2331 | width="1" | ||
3215 | 2332 | height="1" | ||
3216 | 2333 | x="18" | ||
3217 | 2334 | y="29" | ||
3218 | 2335 | rx="0.26516503" | ||
3219 | 2336 | ry="0.26516503" /> | ||
3220 | 2337 | <rect | ||
3221 | 2338 | style="color:black;fill:url(#radialGradient3264);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:square;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" | ||
3222 | 2339 | id="rect5450" | ||
3223 | 2340 | width="1" | ||
3224 | 2341 | height="1" | ||
3225 | 2342 | x="21" | ||
3226 | 2343 | y="26" | ||
3227 | 2344 | rx="0.26516503" | ||
3228 | 2345 | ry="0.26516503" /> | ||
3229 | 2346 | <rect | ||
3230 | 2347 | style="color:black;fill:url(#radialGradient3266);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:square;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" | ||
3231 | 2348 | id="rect5452" | ||
3232 | 2349 | width="1" | ||
3233 | 2350 | height="1" | ||
3234 | 2351 | x="20" | ||
3235 | 2352 | y="27" | ||
3236 | 2353 | rx="0.26516503" | ||
3237 | 2354 | ry="0.26516503" /> | ||
3238 | 2355 | <rect | ||
3239 | 2356 | style="color:black;fill:url(#radialGradient3268);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:square;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" | ||
3240 | 2357 | id="rect5454" | ||
3241 | 2358 | width="1" | ||
3242 | 2359 | height="1" | ||
3243 | 2360 | x="22" | ||
3244 | 2361 | y="27" | ||
3245 | 2362 | rx="0.26516503" | ||
3246 | 2363 | ry="0.26516503" /> | ||
3247 | 2364 | <rect | ||
3248 | 2365 | style="color:black;fill:url(#radialGradient3270);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:square;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" | ||
3249 | 2366 | id="rect5456" | ||
3250 | 2367 | width="1" | ||
3251 | 2368 | height="1" | ||
3252 | 2369 | x="21" | ||
3253 | 2370 | y="28" | ||
3254 | 2371 | rx="0.26516503" | ||
3255 | 2372 | ry="0.26516503" /> | ||
3256 | 2373 | <rect | ||
3257 | 2374 | style="color:black;fill:url(#radialGradient3272);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:square;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" | ||
3258 | 2375 | id="rect5458" | ||
3259 | 2376 | width="1" | ||
3260 | 2377 | height="1" | ||
3261 | 2378 | x="23" | ||
3262 | 2379 | y="28" | ||
3263 | 2380 | rx="0.26516503" | ||
3264 | 2381 | ry="0.26516503" /> | ||
3265 | 2382 | <rect | ||
3266 | 2383 | style="color:black;fill:url(#radialGradient3274);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:square;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" | ||
3267 | 2384 | id="rect5460" | ||
3268 | 2385 | width="1" | ||
3269 | 2386 | height="1" | ||
3270 | 2387 | x="20" | ||
3271 | 2388 | y="29" | ||
3272 | 2389 | rx="0.26516503" | ||
3273 | 2390 | ry="0.26516503" /> | ||
3274 | 2391 | <rect | ||
3275 | 2392 | style="color:black;fill:url(#radialGradient3276);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:square;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" | ||
3276 | 2393 | id="rect5462" | ||
3277 | 2394 | width="1" | ||
3278 | 2395 | height="1" | ||
3279 | 2396 | x="22" | ||
3280 | 2397 | y="29" | ||
3281 | 2398 | rx="0.26516503" | ||
3282 | 2399 | ry="0.26516503" /> | ||
3283 | 2400 | <rect | ||
3284 | 2401 | style="color:black;fill:url(#radialGradient3292);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:square;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" | ||
3285 | 2402 | id="rect5464" | ||
3286 | 2403 | width="1" | ||
3287 | 2404 | height="1" | ||
3288 | 2405 | x="26" | ||
3289 | 2406 | y="26" | ||
3290 | 2407 | rx="0.26516503" | ||
3291 | 2408 | ry="0.26516503" /> | ||
3292 | 2409 | <rect | ||
3293 | 2410 | style="color:black;fill:url(#radialGradient3294);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:square;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" | ||
3294 | 2411 | id="rect5466" | ||
3295 | 2412 | width="1" | ||
3296 | 2413 | height="1" | ||
3297 | 2414 | x="25" | ||
3298 | 2415 | y="27" | ||
3299 | 2416 | rx="0.26516503" | ||
3300 | 2417 | ry="0.26516503" /> | ||
3301 | 2418 | <rect | ||
3302 | 2419 | style="color:black;fill:url(#radialGradient3296);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:square;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" | ||
3303 | 2420 | id="rect5468" | ||
3304 | 2421 | width="1" | ||
3305 | 2422 | height="1" | ||
3306 | 2423 | x="27" | ||
3307 | 2424 | y="27" | ||
3308 | 2425 | rx="0.26516503" | ||
3309 | 2426 | ry="0.26516503" /> | ||
3310 | 2427 | <rect | ||
3311 | 2428 | style="color:black;fill:url(#radialGradient3298);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:square;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" | ||
3312 | 2429 | id="rect5470" | ||
3313 | 2430 | width="1" | ||
3314 | 2431 | height="1" | ||
3315 | 2432 | x="26" | ||
3316 | 2433 | y="28" | ||
3317 | 2434 | rx="0.26516503" | ||
3318 | 2435 | ry="0.26516503" /> | ||
3319 | 2436 | <rect | ||
3320 | 2437 | style="color:black;fill:url(#radialGradient3300);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:square;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" | ||
3321 | 2438 | id="rect5472" | ||
3322 | 2439 | width="1" | ||
3323 | 2440 | height="1" | ||
3324 | 2441 | x="28" | ||
3325 | 2442 | y="28" | ||
3326 | 2443 | rx="0.26516503" | ||
3327 | 2444 | ry="0.26516503" /> | ||
3328 | 2445 | <rect | ||
3329 | 2446 | style="color:black;fill:url(#radialGradient3302);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:square;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" | ||
3330 | 2447 | id="rect5474" | ||
3331 | 2448 | width="1" | ||
3332 | 2449 | height="1" | ||
3333 | 2450 | x="25" | ||
3334 | 2451 | y="29" | ||
3335 | 2452 | rx="0.26516503" | ||
3336 | 2453 | ry="0.26516503" /> | ||
3337 | 2454 | <rect | ||
3338 | 2455 | style="color:black;fill:url(#radialGradient3304);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:square;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" | ||
3339 | 2456 | id="rect5476" | ||
3340 | 2457 | width="1" | ||
3341 | 2458 | height="1" | ||
3342 | 2459 | x="27" | ||
3343 | 2460 | y="29" | ||
3344 | 2461 | rx="0.26516503" | ||
3345 | 2462 | ry="0.26516503" /> | ||
3346 | 2463 | </g> | ||
3347 | 2464 | </g> | ||
3348 | 2465 | </g> | ||
3349 | 2466 | </svg> | ||
3350 | diff --git a/snapcraft.yaml b/snapcraft.yaml | |||
3351 | index f67838b..18ba003 100644 | |||
3352 | --- a/snapcraft.yaml | |||
3353 | +++ b/snapcraft.yaml | |||
3354 | @@ -1,3 +1,4 @@ | |||
3355 | 1 | <<<<<<< snapcraft.yaml | ||
3356 | 1 | name: pulseaudio | 2 | name: pulseaudio |
3357 | 2 | version: 8.0-3 | 3 | version: 8.0-3 |
3358 | 3 | summary: PulseAudio sound server | 4 | summary: PulseAudio sound server |
3359 | @@ -148,3 +149,246 @@ parts: | |||
3360 | 148 | 149 | ||
3361 | 149 | snap: | 150 | snap: |
3362 | 150 | - $pauseaudiofiles | 151 | - $pauseaudiofiles |
3363 | 152 | ======= | ||
3364 | 153 | name: network-manager | ||
3365 | 154 | version: 1.2.2-10 | ||
3366 | 155 | summary: Network management framework | ||
3367 | 156 | description: | | ||
3368 | 157 | NetworkManager is a system network service that manages your network | ||
3369 | 158 | devices and connections, attempting to keep active network connectivity | ||
3370 | 159 | when available. It manages ethernet, WiFi, mobile broadband (WWAN) and | ||
3371 | 160 | PPPoE devices, provides VPN integration with a variety of different | ||
3372 | 161 | VPN serivces. | ||
3373 | 162 | Please find the source code at https://code.launchpad.net/~snappy-hwe-team/snappy-hwe-snaps/+git/network-manager | ||
3374 | 163 | confinement: strict | ||
3375 | 164 | grade: stable | ||
3376 | 165 | |||
3377 | 166 | slots: | ||
3378 | 167 | service: network-manager | ||
3379 | 168 | |||
3380 | 169 | plugs: | ||
3381 | 170 | nmcli: network-manager | ||
3382 | 171 | |||
3383 | 172 | apps: | ||
3384 | 173 | nmcli: | ||
3385 | 174 | command: usr/bin/nmcli | ||
3386 | 175 | plugs: [nmcli] | ||
3387 | 176 | aliases: | ||
3388 | 177 | - nmcli | ||
3389 | 178 | networkmanager: | ||
3390 | 179 | command: bin/networkmanager | ||
3391 | 180 | daemon: simple | ||
3392 | 181 | slots: [service] | ||
3393 | 182 | plugs: [modem-manager, ppp, network-setup-observe] | ||
3394 | 183 | # FIXME: This will create currently a symlink inside /snap/bin | ||
3395 | 184 | # which points nowhere as the service isn't exposed as application | ||
3396 | 185 | # for the user. Instead snapd needs to gain support to handle | ||
3397 | 186 | # aliases for services differently by adding the Alias= option | ||
3398 | 187 | # within the systemd unit file instead for example. Until this | ||
3399 | 188 | # is implemented we keep the alias disabled. | ||
3400 | 189 | # | ||
3401 | 190 | # aliases: | ||
3402 | 191 | # - NetworkManager | ||
3403 | 192 | |||
3404 | 193 | parts: | ||
3405 | 194 | hooks: | ||
3406 | 195 | plugin: dump | ||
3407 | 196 | source: hooks | ||
3408 | 197 | organize: | ||
3409 | 198 | configure: meta/hooks/configure | ||
3410 | 199 | |||
3411 | 200 | networkmanager-common: | ||
3412 | 201 | plugin: copy | ||
3413 | 202 | files: | ||
3414 | 203 | bin/networkmanager: bin/networkmanager | ||
3415 | 204 | bin/dhcp-lease-mover: bin/dhcp-lease-mover | ||
3416 | 205 | conf/NetworkManager.conf: etc/NetworkManager/NetworkManager.conf | ||
3417 | 206 | data/copyright: usr/share/doc/network-manager/copyright | ||
3418 | 207 | startup-hooks/99-wol-by-default.sh: startup-hooks/99-wol-by-default.sh | ||
3419 | 208 | |||
3420 | 209 | inotify-tools: | ||
3421 | 210 | plugin: nil | ||
3422 | 211 | stage-packages: | ||
3423 | 212 | - libinotifytools0 | ||
3424 | 213 | - inotify-tools | ||
3425 | 214 | filesets: | ||
3426 | 215 | wanted: | ||
3427 | 216 | - usr/share/doc/inotify-tools/copyright | ||
3428 | 217 | - usr/bin/inotifywait | ||
3429 | 218 | - usr/share/doc/libinotifytools0/copyright | ||
3430 | 219 | - usr/lib/libinotifytools.so.0.4.1 | ||
3431 | 220 | - usr/lib/libinotifytools.so.0 | ||
3432 | 221 | snap: | ||
3433 | 222 | - $wanted | ||
3434 | 223 | |||
3435 | 224 | networkmanager: | ||
3436 | 225 | plugin: autotools | ||
3437 | 226 | |||
3438 | 227 | source: https://git.launchpad.net/~snappy-hwe-team/snappy-hwe-snaps/+git/network-manager | ||
3439 | 228 | source-type: git | ||
3440 | 229 | # For development you can directly build from the xenial branch if | ||
3441 | 230 | # needed. Otherwise use the tag to the latest version which will be | ||
3442 | 231 | # used by the published snap. | ||
3443 | 232 | # source-branch: network-manager/xenial/1.2.2 | ||
3444 | 233 | source-tag: network-manager-xenial-1.2.2-2 | ||
3445 | 234 | |||
3446 | 235 | build-packages: | ||
3447 | 236 | - intltool | ||
3448 | 237 | - gtk-doc-tools | ||
3449 | 238 | - libdbus-glib-1-dev | ||
3450 | 239 | - libdbus-1-dev | ||
3451 | 240 | - libiw-dev | ||
3452 | 241 | - libglib2.0-dev | ||
3453 | 242 | - libnl-3-dev | ||
3454 | 243 | - libnl-route-3-dev | ||
3455 | 244 | - libnl-genl-3-dev | ||
3456 | 245 | - libnss3-dev | ||
3457 | 246 | - libgnutls28-dev | ||
3458 | 247 | - libgcrypt11-dev | ||
3459 | 248 | - uuid-dev | ||
3460 | 249 | - systemd | ||
3461 | 250 | - libsystemd-dev | ||
3462 | 251 | - libudev-dev | ||
3463 | 252 | - libgudev-1.0-dev | ||
3464 | 253 | - libgirepository1.0-dev | ||
3465 | 254 | - gobject-introspection | ||
3466 | 255 | - libglib2.0-doc | ||
3467 | 256 | - libmm-glib-dev | ||
3468 | 257 | - libndp-dev | ||
3469 | 258 | - libreadline-dev | ||
3470 | 259 | - libnewt-dev | ||
3471 | 260 | - dbus-test-runner | ||
3472 | 261 | - isc-dhcp-client | ||
3473 | 262 | - python-dbus | ||
3474 | 263 | - python-gi | ||
3475 | 264 | - iptables | ||
3476 | 265 | - ppp-dev | ||
3477 | 266 | |||
3478 | 267 | # We stage everything here we need for build and runtime | ||
3479 | 268 | stage-packages: | ||
3480 | 269 | - iputils-arping | ||
3481 | 270 | - iw | ||
3482 | 271 | - libc6 | ||
3483 | 272 | - libdbus-1-3 | ||
3484 | 273 | - libdbus-glib-1-2 | ||
3485 | 274 | - libgcrypt20 | ||
3486 | 275 | - libglib2.0-0 | ||
3487 | 276 | - libgudev-1.0-0 | ||
3488 | 277 | - libiw-dev | ||
3489 | 278 | - libmbim-glib4 | ||
3490 | 279 | - libndp0 | ||
3491 | 280 | - libnl-3-200 | ||
3492 | 281 | - libnl-3-dev | ||
3493 | 282 | - libnl-genl-3-200 | ||
3494 | 283 | - libnl-route-3-200 | ||
3495 | 284 | - libpam-systemd | ||
3496 | 285 | - libreadline6 | ||
3497 | 286 | - libsystemd0 | ||
3498 | 287 | - libuuid1 | ||
3499 | 288 | - lsb-base | ||
3500 | 289 | - uuid-dev | ||
3501 | 290 | - wireless-tools | ||
3502 | 291 | |||
3503 | 292 | configflags: | ||
3504 | 293 | # Disable all features we don't want enabled as we're not | ||
3505 | 294 | # supporting them (yet). | ||
3506 | 295 | - --prefix=/usr | ||
3507 | 296 | - --libdir=/usr/lib | ||
3508 | 297 | - --libexecdir=/usr/lib/NetworkManager | ||
3509 | 298 | - --disable-qt | ||
3510 | 299 | - --disable-teamdctl | ||
3511 | 300 | - --disable-polkit | ||
3512 | 301 | - --disable-vala | ||
3513 | 302 | - --disable-config-plugin-ibft | ||
3514 | 303 | - --with-dhcpcd=no | ||
3515 | 304 | - --with-dhclient=no | ||
3516 | 305 | - --with-dnsmasq=no | ||
3517 | 306 | - --with-systemd-journal=no | ||
3518 | 307 | - --with-session-tracking=no | ||
3519 | 308 | # We only support suspend/resume tracking together with systemd/logind | ||
3520 | 309 | # at the moment. | ||
3521 | 310 | - --with-suspend-resume=systemd | ||
3522 | 311 | # Removes dependency on libicudata which weights 25M. Also libsoup | ||
3523 | 312 | # is only used to verify a domain in the DNS resolve process has a | ||
3524 | 313 | # valid format and to check if a valid internet connection is available. | ||
3525 | 314 | - --with-libsoup=no | ||
3526 | 315 | # We want to support ModemManager | ||
3527 | 316 | - --with-modem-manager-1=yes | ||
3528 | 317 | |||
3529 | 318 | # Filter files pulled in by stage-packages so they aren't | ||
3530 | 319 | # included in the final snap. We only need them to build | ||
3531 | 320 | # NetworkManager. All runtime dependencies are pulled in with | ||
3532 | 321 | # the rdepends part below. The only left items specified | ||
3533 | 322 | # here are the results of the network manager build. | ||
3534 | 323 | filesets: | ||
3535 | 324 | binaries: | ||
3536 | 325 | - usr/bin/nmcli | ||
3537 | 326 | - usr/lib/*/NetworkManager | ||
3538 | 327 | - usr/lib/pppd/2.4.5/nm-pppd-plugin.so | ||
3539 | 328 | - usr/lib/NetworkManager | ||
3540 | 329 | - usr/sbin/NetworkManager | ||
3541 | 330 | - usr/lib/*/libnm-* | ||
3542 | 331 | configs: | ||
3543 | 332 | - etc/NetworkManager/* | ||
3544 | 333 | docs: | ||
3545 | 334 | - usr/share/doc | ||
3546 | 335 | rdepends: | ||
3547 | 336 | - lib64/* | ||
3548 | 337 | - lib/*/ | ||
3549 | 338 | - usr/lib/* | ||
3550 | 339 | unwanted: | ||
3551 | 340 | # We don't want anything in usr/share but the doc folder | ||
3552 | 341 | # to carry all copyright information | ||
3553 | 342 | - -usr/share/bash-completion | ||
3554 | 343 | - -usr/share/bug | ||
3555 | 344 | - -usr/share/dbus-1 | ||
3556 | 345 | - -usr/share/gir-1.0 | ||
3557 | 346 | - -usr/share/glib-2.0 | ||
3558 | 347 | - -usr/share/gtk-doc | ||
3559 | 348 | - -usr/share/lintian | ||
3560 | 349 | - -usr/share/locale | ||
3561 | 350 | - -usr/share/man | ||
3562 | 351 | - -usr/share/pam-configs | ||
3563 | 352 | - -usr/share/polkit-1 | ||
3564 | 353 | - -usr/share/upstart | ||
3565 | 354 | |||
3566 | 355 | # We don't use dhclient so we don't need this helper | ||
3567 | 356 | - -usr/lib/NetworkManager/nm-dhcp-helper | ||
3568 | 357 | # Things we don't support yet and don't have to ship | ||
3569 | 358 | - -usr/lib/NetworkManager/libnm-device-plugin-adsl.so | ||
3570 | 359 | - -usr/lib/NetworkManager/libnm-device-plugin-bluetooth.so | ||
3571 | 360 | - -usr/lib/NetworkManager/libnm-settings-plugin-ibft.so | ||
3572 | 361 | |||
3573 | 362 | # Unwanted content coming from the stage debian packages | ||
3574 | 363 | - -etc/ | ||
3575 | 364 | # Contains many libraries which are already present in usr/lib/ | ||
3576 | 365 | - -lib/ | ||
3577 | 366 | - -usr/include/ | ||
3578 | 367 | - -usr/etc | ||
3579 | 368 | - -usr/sbin/invoke-rc.d | ||
3580 | 369 | - -usr/sbin/service | ||
3581 | 370 | - -usr/sbin/update-rc.d | ||
3582 | 371 | - -usr/lib/dbus-1.0/ | ||
3583 | 372 | - -usr/lib/tmpfiles.d/ | ||
3584 | 373 | - -usr/lib/*/pkgconfig | ||
3585 | 374 | - -usr/lib/pkgconfig | ||
3586 | 375 | - -usr/lib/gcc/ | ||
3587 | 376 | - -usr/lib/*/gconv/ | ||
3588 | 377 | - -usr/lib/girepository-1.0/ | ||
3589 | 378 | - -usr/lib/systemd/ | ||
3590 | 379 | - -usr/lib/udev/ | ||
3591 | 380 | - -usr/lib/*.a | ||
3592 | 381 | - -usr/lib/*/*.a | ||
3593 | 382 | - -usr/lib/*.la | ||
3594 | 383 | - -usr/lib/*/*.la | ||
3595 | 384 | - -usr/lib/*/*.o | ||
3596 | 385 | - -usr/lib/*/systemd-shim | ||
3597 | 386 | - -usr/lib/*/systemd-shim-cgroup-release-agent | ||
3598 | 387 | snap: | ||
3599 | 388 | - $binaries | ||
3600 | 389 | - $configs | ||
3601 | 390 | - $docs | ||
3602 | 391 | - $rdepends | ||
3603 | 392 | - $unwanted | ||
3604 | 393 | |||
3605 | 394 | >>>>>>> snapcraft.yaml | ||
3606 | diff --git a/spread.yaml b/spread.yaml | |||
3607 | index 0c615ba..2969c2d 100644 | |||
3608 | --- a/spread.yaml | |||
3609 | +++ b/spread.yaml | |||
3610 | @@ -1,5 +1,9 @@ | |||
3611 | 1 | # | 1 | # |
3612 | 2 | <<<<<<< spread.yaml | ||
3613 | 2 | # Copyright (C) 2016 Canonical Ltd | 3 | # Copyright (C) 2016 Canonical Ltd |
3614 | 4 | ======= | ||
3615 | 5 | # Copyright (C) 2015, 2016 Canonical Ltd | ||
3616 | 6 | >>>>>>> spread.yaml | ||
3617 | 3 | # | 7 | # |
3618 | 4 | # This program is free software: you can redistribute it and/or modify | 8 | # This program is free software: you can redistribute it and/or modify |
3619 | 5 | # it under the terms of the GNU General Public License version 3 as | 9 | # it under the terms of the GNU General Public License version 3 as |
3620 | @@ -13,12 +17,22 @@ | |||
3621 | 13 | # You should have received a copy of the GNU General Public License | 17 | # You should have received a copy of the GNU General Public License |
3622 | 14 | # along with this program. If not, see <http://www.gnu.org/licenses/>. | 18 | # along with this program. If not, see <http://www.gnu.org/licenses/>. |
3623 | 15 | 19 | ||
3624 | 20 | <<<<<<< spread.yaml | ||
3625 | 16 | project: pulseaudio | 21 | project: pulseaudio |
3626 | 17 | 22 | ||
3627 | 18 | environment: | 23 | environment: |
3628 | 19 | PROJECT_PATH: /home/pulseaudio | 24 | PROJECT_PATH: /home/pulseaudio |
3629 | 20 | TESTSLIB: $PROJECT_PATH/tests/lib | 25 | TESTSLIB: $PROJECT_PATH/tests/lib |
3630 | 21 | SNAP_NAME: pulseaudio | 26 | SNAP_NAME: pulseaudio |
3631 | 27 | ======= | ||
3632 | 28 | |||
3633 | 29 | project: network-manager | ||
3634 | 30 | |||
3635 | 31 | environment: | ||
3636 | 32 | PROJECT_PATH: /home/network-manager | ||
3637 | 33 | TESTSLIB: $PROJECT_PATH/tests/lib | ||
3638 | 34 | SNAP_NAME: network-manager | ||
3639 | 35 | >>>>>>> spread.yaml | ||
3640 | 22 | # Allow the host to pass the channel to use for the test run | 36 | # Allow the host to pass the channel to use for the test run |
3641 | 23 | SNAP_CHANNEL: $(HOST:echo $SNAP_CHANNEL) | 37 | SNAP_CHANNEL: $(HOST:echo $SNAP_CHANNEL) |
3642 | 24 | 38 | ||
3643 | @@ -30,7 +44,11 @@ backends: | |||
3644 | 30 | password: test | 44 | password: test |
3645 | 31 | 45 | ||
3646 | 32 | # Put this somewhere where we have read-write access | 46 | # Put this somewhere where we have read-write access |
3647 | 47 | <<<<<<< spread.yaml | ||
3648 | 33 | path: /home/pulseaudio | 48 | path: /home/pulseaudio |
3649 | 49 | ======= | ||
3650 | 50 | path: /home/network-manager | ||
3651 | 51 | >>>>>>> spread.yaml | ||
3652 | 34 | 52 | ||
3653 | 35 | exclude: | 53 | exclude: |
3654 | 36 | - .git | 54 | - .git |
3655 | @@ -38,13 +56,45 @@ exclude: | |||
3656 | 38 | prepare: | | 56 | prepare: | |
3657 | 39 | . $TESTSLIB/prepare-all.sh | 57 | . $TESTSLIB/prepare-all.sh |
3658 | 40 | 58 | ||
3659 | 59 | <<<<<<< spread.yaml | ||
3660 | 41 | suites: | 60 | suites: |
3661 | 42 | tests/main/: | 61 | tests/main/: |
3662 | 43 | summary: Full-system tests for PulseAudio | 62 | summary: Full-system tests for PulseAudio |
3663 | 63 | ======= | ||
3664 | 64 | # Default is 15 min but we use a higher one here as we build the entire | ||
3665 | 65 | # network-manager snap inside the global prepare step so we need quite | ||
3666 | 66 | # some time. Once we can reuse artifacts from other builds we can change | ||
3667 | 67 | # this back to the default. | ||
3668 | 68 | kill-timeout: 30m | ||
3669 | 69 | |||
3670 | 70 | suites: | ||
3671 | 71 | tests/main/: | ||
3672 | 72 | summary: Full-system tests for NetworkManager without ethernet support | ||
3673 | 73 | >>>>>>> spread.yaml | ||
3674 | 44 | systems: | 74 | systems: |
3675 | 45 | - ubuntu-core-16 | 75 | - ubuntu-core-16 |
3676 | 46 | prepare: | | 76 | prepare: | |
3677 | 47 | . $TESTSLIB/prepare.sh | 77 | . $TESTSLIB/prepare.sh |
3678 | 48 | restore-each: | | 78 | restore-each: | |
3679 | 49 | . $TESTSLIB/restore-each.sh | 79 | . $TESTSLIB/restore-each.sh |
3680 | 80 | <<<<<<< spread.yaml | ||
3681 | 50 | 81 | ||
3682 | 82 | ======= | ||
3683 | 83 | tests/full/: | ||
3684 | 84 | summary: Full-system tests for NetworkManager being the only network management service | ||
3685 | 85 | systems: | ||
3686 | 86 | - ubuntu-core-16 | ||
3687 | 87 | prepare: | | ||
3688 | 88 | . $TESTSLIB/utilities.sh | ||
3689 | 89 | stop_after_first_reboot | ||
3690 | 90 | switch_netplan_to_network_manager | ||
3691 | 91 | . $TESTSLIB/prepare.sh | ||
3692 | 92 | REBOOT | ||
3693 | 93 | restore-each: | | ||
3694 | 94 | . $TESTSLIB/restore-each.sh | ||
3695 | 95 | restore: | | ||
3696 | 96 | . $TESTSLIB/utilities.sh | ||
3697 | 97 | stop_after_first_reboot | ||
3698 | 98 | switch_netplan_to_networkd | ||
3699 | 99 | REBOOT | ||
3700 | 100 | >>>>>>> spread.yaml | ||
3701 | diff --git a/startup-hooks/99-wol-by-default.sh b/startup-hooks/99-wol-by-default.sh | |||
3702 | 51 | new file mode 100755 | 101 | new file mode 100755 |
3703 | index 0000000..c2d4480 | |||
3704 | --- /dev/null | |||
3705 | +++ b/startup-hooks/99-wol-by-default.sh | |||
3706 | @@ -0,0 +1,13 @@ | |||
3707 | 1 | #!/bin/sh | ||
3708 | 2 | |||
3709 | 3 | # Enable wake-on-lan by default until we have a configuration | ||
3710 | 4 | # hook to do that. | ||
3711 | 5 | if [ ! -e $SNAP_DATA/conf.d/enable-wol.conf ] ; then | ||
3712 | 6 | mkdir -p $SNAP_DATA/conf.d | ||
3713 | 7 | cat <<-EOF > $SNAP_DATA/conf.d/enable-wol.conf | ||
3714 | 8 | [connection] | ||
3715 | 9 | # Value 64 maps to the 'magic' setting; see man nm-settings | ||
3716 | 10 | # for more information. | ||
3717 | 11 | 802-3-ethernet.wake-on-lan=64 | ||
3718 | 12 | EOF | ||
3719 | 13 | fi | ||
3720 | diff --git a/tests/full/correct-dns-setup/task.yaml b/tests/full/correct-dns-setup/task.yaml | |||
3721 | 0 | new file mode 100644 | 14 | new file mode 100644 |
3722 | index 0000000..9b6dfe0 | |||
3723 | --- /dev/null | |||
3724 | +++ b/tests/full/correct-dns-setup/task.yaml | |||
3725 | @@ -0,0 +1,47 @@ | |||
3726 | 1 | summary: Verify correct DNS setup | ||
3727 | 2 | |||
3728 | 3 | execute: | | ||
3729 | 4 | . $TESTSLIB/utilities.sh | ||
3730 | 5 | case $SPREAD_REBOOT in | ||
3731 | 6 | 0) | ||
3732 | 7 | # For correct timing if the device has just booted | ||
3733 | 8 | wait_for_network_manager | ||
3734 | 9 | |||
3735 | 10 | # Precondition is a existing network connection | ||
3736 | 11 | /snap/bin/network-manager.nmcli d | grep 'eth0.*connected' | ||
3737 | 12 | |||
3738 | 13 | # We get a default nameserver from the gateway | ||
3739 | 14 | if [ "$SPREAD_BACKEND" = "qemu" ] ; then | ||
3740 | 15 | cat /etc/resolv.conf | grep 'nameserver 10.0.2.3' | ||
3741 | 16 | fi | ||
3742 | 17 | |||
3743 | 18 | # Ensure we can resolve a hostname correctly; must give a | ||
3744 | 19 | # valid IP address | ||
3745 | 20 | address=`python3 -c 'import socket; print(socket.gethostbyname("ubuntu.com"))' 2> /dev/null || echo "invalid"` | ||
3746 | 21 | [ "$address" != "invalid" ] && [[ $address =~ ^[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+$ ]] | ||
3747 | 22 | |||
3748 | 23 | # Now lets switch to a system where we have a configuration | ||
3749 | 24 | # for ethernet we can change | ||
3750 | 25 | rm /etc/netplan/00-snapd-config.yaml | ||
3751 | 26 | REBOOT | ||
3752 | 27 | ;; | ||
3753 | 28 | 1) | ||
3754 | 29 | /snap/bin/network-manager.nmcli d | grep 'eth0.*connected' | ||
3755 | 30 | /snap/bin/network-manager.nmcli d | grep -v netplan | ||
3756 | 31 | |||
3757 | 32 | connection=$(/snap/bin/network-manager.nmcli -m multiline -f UUID c show --active | awk '{print$2;exit}') | ||
3758 | 33 | /snap/bin/network-manager.nmcli c modify $connection ipv4.dns 8.8.8.8 | ||
3759 | 34 | # We need to bring up the connection again here to get the DNS | ||
3760 | 35 | # server really applied to the system. | ||
3761 | 36 | /snap/bin/network-manager.nmcli c up $connection | ||
3762 | 37 | |||
3763 | 38 | # Give system a moment to settle | ||
3764 | 39 | sleep 1 | ||
3765 | 40 | |||
3766 | 41 | grep 'nameserver 8.8.8.8' /etc/resolv.conf | ||
3767 | 42 | address=`python3 -c 'import socket; print(socket.gethostbyname("ubuntu.com"))' 2> /dev/null || echo "invalid"` | ||
3768 | 43 | [ "$address" != "invalid" ] && [[ $address =~ ^[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+$ ]] | ||
3769 | 44 | ;; | ||
3770 | 45 | *) | ||
3771 | 46 | ;; | ||
3772 | 47 | esac | ||
3773 | diff --git a/tests/full/dhcp-leases-are-moved/task.yaml b/tests/full/dhcp-leases-are-moved/task.yaml | |||
3774 | 0 | new file mode 100644 | 48 | new file mode 100644 |
3775 | index 0000000..80cf0e9 | |||
3776 | --- /dev/null | |||
3777 | +++ b/tests/full/dhcp-leases-are-moved/task.yaml | |||
3778 | @@ -0,0 +1,35 @@ | |||
3779 | 1 | summary: Verify that the DHCP leases are moved to the correct location | ||
3780 | 2 | |||
3781 | 3 | execute: | | ||
3782 | 4 | . $TESTSLIB/utilities.sh | ||
3783 | 5 | |||
3784 | 6 | wait_for_network_manager | ||
3785 | 7 | |||
3786 | 8 | # We should have a single lease for eth0 at this point but give | ||
3787 | 9 | # NetworkManager some time to do its job | ||
3788 | 10 | test -e /run/NetworkManager/dhcp | ||
3789 | 11 | test -e /var/snap/network-manager/current/state/dhcp | ||
3790 | 12 | n=0 | ||
3791 | 13 | state_ok=0 | ||
3792 | 14 | while [ $n -lt 10 ] ; do | ||
3793 | 15 | num_leases=`ls -1 /var/snap/network-manager/current/state/dhcp | wc -l` | ||
3794 | 16 | num_public_leases=`ls -1 /run/NetworkManager/dhcp | wc -l` | ||
3795 | 17 | if [ $num_leases -eq $num_public_leases ]; then | ||
3796 | 18 | state_ok=1 | ||
3797 | 19 | break | ||
3798 | 20 | fi | ||
3799 | 21 | sleep 0.5 | ||
3800 | 22 | let n=n+1 | ||
3801 | 23 | done | ||
3802 | 24 | test $state_ok -eq 1 | ||
3803 | 25 | |||
3804 | 26 | # Create a new lease file and ensure it gets copied over | ||
3805 | 27 | test ! -e /run/NetworkManager/dhcp/temp.lease | ||
3806 | 28 | touch /var/snap/network-manager/current/state/dhcp/temp.lease | ||
3807 | 29 | sleep 2 | ||
3808 | 30 | test -e /run/NetworkManager/dhcp/temp.lease | ||
3809 | 31 | # Ensure that the lease is also removed from /run again when it | ||
3810 | 32 | # gets removed from SNAP_DATA | ||
3811 | 33 | rm /var/snap/network-manager/current/state/dhcp/temp.lease | ||
3812 | 34 | sleep 2 | ||
3813 | 35 | test ! -e /var/snap/network-manager/current/state/dhcp/temp.lease | ||
3814 | diff --git a/tests/full/immutable-netplan-config/task.yaml b/tests/full/immutable-netplan-config/task.yaml | |||
3815 | 0 | new file mode 100644 | 36 | new file mode 100644 |
3816 | index 0000000..52c2d61 | |||
3817 | --- /dev/null | |||
3818 | +++ b/tests/full/immutable-netplan-config/task.yaml | |||
3819 | @@ -0,0 +1,9 @@ | |||
3820 | 1 | summary: Verify that netplan configuration files are immutable | ||
3821 | 2 | |||
3822 | 3 | execute: | | ||
3823 | 4 | # Ensure we're using a configuration generated from netplan | ||
3824 | 5 | test -e /etc/netplan/00-snapd-config.yaml | ||
3825 | 6 | test -e /run/NetworkManager/system-connections/netplan-eth0 | ||
3826 | 7 | /snap/bin/network-manager.nmcli c | grep 'netplan.eth0.*eth0' | ||
3827 | 8 | # Try to change the DNS server used on this connection | ||
3828 | 9 | test ! `/snap/bin/network-manager.nmcli c modify netplan-eth0 ipv4.dns 8.8.8.8` | ||
3829 | 0 | \ No newline at end of file | 10 | \ No newline at end of file |
3830 | diff --git a/tests/full/ipv6-address-assignment/task.yaml b/tests/full/ipv6-address-assignment/task.yaml | |||
3831 | 1 | new file mode 100644 | 11 | new file mode 100644 |
3832 | index 0000000..e36ef00 | |||
3833 | --- /dev/null | |||
3834 | +++ b/tests/full/ipv6-address-assignment/task.yaml | |||
3835 | @@ -0,0 +1,27 @@ | |||
3836 | 1 | summary: Verify NetworkManager can assign a static IPv6 address to an interface | ||
3837 | 2 | |||
3838 | 3 | restore: | | ||
3839 | 4 | # Ensure that the created virtual network interfaces are removed | ||
3840 | 5 | # in any case when we're done | ||
3841 | 6 | if [ -e /sys/class/net/veth0 ] ; then | ||
3842 | 7 | ip link delete veth0 | ||
3843 | 8 | fi | ||
3844 | 9 | |||
3845 | 10 | execute: | | ||
3846 | 11 | . $TESTSLIB/utilities.sh | ||
3847 | 12 | |||
3848 | 13 | # Ensure that we have IPv6 support enabled in the kernel | ||
3849 | 14 | test -e /proc/net/if_inet6 | ||
3850 | 15 | |||
3851 | 16 | ip link add dev veth0 type veth peer name veth1 | ||
3852 | 17 | |||
3853 | 18 | wait_for_network_manager | ||
3854 | 19 | |||
3855 | 20 | connection=veth-ipv6 | ||
3856 | 21 | /snap/bin/network-manager.nmcli c add con-name $connection ifname veth0 type ethernet \ | ||
3857 | 22 | ip6 abbe::cafe | ||
3858 | 23 | /snap/bin/network-manager.nmcli c up $connection | ||
3859 | 24 | |||
3860 | 25 | # Verify that NetworkManager assigned the correct IPv6 address | ||
3861 | 26 | # to the interface | ||
3862 | 27 | ifconfig veth0 | grep 'abbe::cafe/128' | ||
3863 | diff --git a/tests/full/ipv6-router-advertisements/task.yaml b/tests/full/ipv6-router-advertisements/task.yaml | |||
3864 | 0 | new file mode 100644 | 28 | new file mode 100644 |
3865 | index 0000000..4af402b | |||
3866 | --- /dev/null | |||
3867 | +++ b/tests/full/ipv6-router-advertisements/task.yaml | |||
3868 | @@ -0,0 +1,70 @@ | |||
3869 | 1 | summary: Test IPv6 address assignment via router advertisements | ||
3870 | 2 | |||
3871 | 3 | restore: | | ||
3872 | 4 | # Ensure that the created virtual network interfaces are removed | ||
3873 | 5 | # in any case when we're done | ||
3874 | 6 | if [ -e /sys/class/net/veth0 ] ; then | ||
3875 | 7 | ip link delete veth0 | ||
3876 | 8 | fi | ||
3877 | 9 | |||
3878 | 10 | execute: | | ||
3879 | 11 | . $TESTSLIB/utilities.sh | ||
3880 | 12 | |||
3881 | 13 | # Ensure that we have IPv6 support enabled in the kernel | ||
3882 | 14 | test -e /proc/net/if_inet6 | ||
3883 | 15 | |||
3884 | 16 | snap install --devmode se-test-tools | ||
3885 | 17 | snap connect se-test-tools:home core | ||
3886 | 18 | snap connect se-test-tools:network-control core | ||
3887 | 19 | |||
3888 | 20 | # Create virtual ethernet interface pair | ||
3889 | 21 | sudo ip link add dev veth0 type veth peer name veth1 | ||
3890 | 22 | |||
3891 | 23 | # As the virtual ethernet devices don't get IPv6 setup | ||
3892 | 24 | # correctly by default we have to do this | ||
3893 | 25 | sudo sysctl -w net.ipv6.conf.veth0.disable_ipv6=0 | ||
3894 | 26 | sudo sysctl -w net.ipv6.conf.veth1.disable_ipv6=0 | ||
3895 | 27 | veth0_lla=$(mac_to_ipv6 `cat /sys/class/net/veth0/address`) | ||
3896 | 28 | veth1_lla=$(mac_to_ipv6 `cat /sys/class/net/veth1/address`) | ||
3897 | 29 | |||
3898 | 30 | # The radvd daemon will send out router advertisements on veth1 | ||
3899 | 31 | # so that we can receive them on veth0 end | ||
3900 | 32 | cat <<-EOF > /home/test/radvd.conf | ||
3901 | 33 | interface veth1 { | ||
3902 | 34 | AdvSendAdvert on; | ||
3903 | 35 | prefix 2001:db8:1:2::/64 {}; | ||
3904 | 36 | }; | ||
3905 | 37 | EOF | ||
3906 | 38 | |||
3907 | 39 | # To ensure that nobody touches veth1 we tell NetworkManager | ||
3908 | 40 | # explicitly to do that. | ||
3909 | 41 | /snap/bin/network-manager.nmcli d set veth1 managed no | ||
3910 | 42 | |||
3911 | 43 | # Assign our link-local addresses | ||
3912 | 44 | if ! ip addr show dev veth0 | grep 'inet6.*scope link.*' ; then | ||
3913 | 45 | sudo ip addr add dev veth0 scope link $veth0_lla | ||
3914 | 46 | fi | ||
3915 | 47 | if ! ip addr show dev veth1 | grep 'inet6.*scope link.*' ; then | ||
3916 | 48 | sudo ip addr add dev veth1 scope link $veth1_lla | ||
3917 | 49 | fi | ||
3918 | 50 | |||
3919 | 51 | # This will get our router advertisement daemon started and we | ||
3920 | 52 | # now configure NetworkManager | ||
3921 | 53 | sudo se-test-tools.radvd -C /home/test/radvd.conf -n -d 5 -m stderr -p /home/test/radvd.pid & | ||
3922 | 54 | |||
3923 | 55 | # Give things a bit more time to settle | ||
3924 | 56 | sleep 10 | ||
3925 | 57 | ip addr show dev veth0 | ||
3926 | 58 | |||
3927 | 59 | # At this point veth0 should have now a global IPv6 address | ||
3928 | 60 | # assigned via router advertisements | ||
3929 | 61 | ip addr show dev veth0 | grep 'inet6 2001:db8:1:2:.*/64 scope global' | ||
3930 | 62 | # but veth1 should not have any | ||
3931 | 63 | ip addr show dev veth1 | grep -v 'inet6.*scope global' | ||
3932 | 64 | |||
3933 | 65 | # NetworkManager should report the same addresses for IPv6 | ||
3934 | 66 | /snap/bin/network-manager.nmcli d show veth0 | grep 'GENERAL.STATE.*connected' | ||
3935 | 67 | /snap/bin/network-manager.nmcli d show veth0 | grep 'IP6.ADDRESS.*2001:db8:1:2.*/64' | ||
3936 | 68 | |||
3937 | 69 | # Stop the radvd daemon | ||
3938 | 70 | kill -TERM `cat /home/test/radvd.pid` | ||
3939 | diff --git a/tests/full/no-netplan-default-config/task.yaml b/tests/full/no-netplan-default-config/task.yaml | |||
3940 | 0 | new file mode 100644 | 71 | new file mode 100644 |
3941 | index 0000000..c0d6934 | |||
3942 | --- /dev/null | |||
3943 | +++ b/tests/full/no-netplan-default-config/task.yaml | |||
3944 | @@ -0,0 +1,41 @@ | |||
3945 | 1 | summary: Verify ethernet is auto-connected when no default netplan configuration exists | ||
3946 | 2 | |||
3947 | 3 | prepare: | | ||
3948 | 4 | cp /etc/netplan/00-snapd-config.yaml /etc/netplan/00-snapd-config.yaml.orig | ||
3949 | 5 | |||
3950 | 6 | restore: | | ||
3951 | 7 | mv /etc/netplan/00-snapd-config.yaml.orig /etc/netplan/00-snapd-config.yaml | ||
3952 | 8 | |||
3953 | 9 | execute: | | ||
3954 | 10 | . $TESTSLIB/utilities.sh | ||
3955 | 11 | case "$SPREAD_REBOOT" in | ||
3956 | 12 | 0) | ||
3957 | 13 | # Remove all configuration files from netplan to get a system | ||
3958 | 14 | # without generated configuration files from netplan | ||
3959 | 15 | if [ -e /usr/lib/snapd/generate-network-conf ] ; then | ||
3960 | 16 | echo "" > /etc/netplan/00-snapd-config.yaml | ||
3961 | 17 | else | ||
3962 | 18 | rm /etc/netplan/00-snapd-config.yaml | ||
3963 | 19 | fi | ||
3964 | 20 | REBOOT | ||
3965 | 21 | ;; | ||
3966 | 22 | 1) | ||
3967 | 23 | # We should be automatically connected now and not via a configuration | ||
3968 | 24 | # generated from netplan | ||
3969 | 25 | wait_for_network_manager | ||
3970 | 26 | /snap/bin/network-manager.nmcli d | grep 'eth0.*connected' | ||
3971 | 27 | networkctl status eth0 | grep 'State: n/a' | ||
3972 | 28 | /snap/bin/network-manager.nmcli c show --active | grep eth0 | grep -v netplan | ||
3973 | 29 | |||
3974 | 30 | # We should only have a single active configuration | ||
3975 | 31 | test `/snap/bin/network-manager.nmcli -m multiline -f UUID c show --active | wc -l` -eq 1 | ||
3976 | 32 | |||
3977 | 33 | # Verify that we can modify the automatically created connection | ||
3978 | 34 | connection=$(/snap/bin/network-manager.nmcli -m multiline -f UUID c show --active | awk '{print$2;exit}') | ||
3979 | 35 | /snap/bin/network-manager.nmcli c modify $connection 802-3-ethernet.wake-on-lan magic | ||
3980 | 36 | wol_value=$(/snap/bin/network-manager.nmcli -f 802-3-ethernet.wake-on-lan c show $connection | xargs | cut -d':' -f 2) | ||
3981 | 37 | test "$wol_value" = " 64 (magic)" | ||
3982 | 38 | ;; | ||
3983 | 39 | *) | ||
3984 | 40 | ;; | ||
3985 | 41 | esac | ||
3986 | diff --git a/tests/full/system-network-is-active/task.yaml b/tests/full/system-network-is-active/task.yaml | |||
3987 | 0 | new file mode 100644 | 42 | new file mode 100644 |
3988 | index 0000000..ee29ef0 | |||
3989 | --- /dev/null | |||
3990 | +++ b/tests/full/system-network-is-active/task.yaml | |||
3991 | @@ -0,0 +1,9 @@ | |||
3992 | 1 | summary: Ethernet network should be managed by NetworkManager | ||
3993 | 2 | |||
3994 | 3 | execute: | | ||
3995 | 4 | . $TESTSLIB/utilities.sh | ||
3996 | 5 | # Verify NetworManager handles ethernet and marks it as connected | ||
3997 | 6 | test -e /etc/netplan/00-default-nm-renderer.yaml | ||
3998 | 7 | wait_for_network_manager | ||
3999 | 8 | /snap/bin/network-manager.nmcli d | grep 'eth0.*connected' | ||
4000 | 9 | networkctl status eth0 | grep 'State: n/a' | ||
4001 | diff --git a/tests/full/wol-enabled-by-default/task.yaml b/tests/full/wol-enabled-by-default/task.yaml | |||
4002 | 0 | new file mode 100644 | 10 | new file mode 100644 |
4003 | index 0000000..4e1989d | |||
4004 | --- /dev/null | |||
4005 | +++ b/tests/full/wol-enabled-by-default/task.yaml | |||
4006 | @@ -0,0 +1,59 @@ | |||
4007 | 1 | summary: Verify that wake-on-lan is enabled by default for all ethernet connections | ||
4008 | 2 | |||
4009 | 3 | execute: | | ||
4010 | 4 | . $TESTSLIB/utilities.sh | ||
4011 | 5 | nmcli=/snap/bin/network-manager.nmcli | ||
4012 | 6 | case "$SPREAD_REBOOT" in | ||
4013 | 7 | 0) | ||
4014 | 8 | # For correct timing if the device has just booted | ||
4015 | 9 | wait_for_network_manager | ||
4016 | 10 | |||
4017 | 11 | # The config file needs to be present and have the correct default set | ||
4018 | 12 | test -e /var/snap/network-manager/current/conf.d/enable-wol.conf | ||
4019 | 13 | cat /var/snap/network-manager/current/conf.d/enable-wol.conf | grep '802-3-ethernet.wake-on-lan=64' | ||
4020 | 14 | |||
4021 | 15 | # Precondition is a existing network connection | ||
4022 | 16 | $nmcli d | grep 'eth0.*connected' | ||
4023 | 17 | |||
4024 | 18 | # The netplan configuration file has WoL disabled by default as | ||
4025 | 19 | # the default one the core snap provides does not explicitly | ||
4026 | 20 | # enable WoL. | ||
4027 | 21 | connection=$($nmcli -m multiline -f UUID c show --active | awk '{print$2;exit}') | ||
4028 | 22 | $nmcli -m multiline -f connection.id c show $connection | grep 'netplan-eth0' | ||
4029 | 23 | $nmcli -m multiline -f connection.type c show $connection | grep '802-3-ethernet' | ||
4030 | 24 | $nmcli -m multiline -f 802-3-ethernet.wake-on-lan c show $connection | grep '0 (none)' | ||
4031 | 25 | |||
4032 | 26 | # Now prepare for the next boot where we will run without a netplan | ||
4033 | 27 | # config to get eth0 correctly configured. | ||
4034 | 28 | rm /etc/netplan/00-snapd-config.yaml | ||
4035 | 29 | REBOOT | ||
4036 | 30 | ;; | ||
4037 | 31 | 1) | ||
4038 | 32 | # For correct timing if the device has just booted | ||
4039 | 33 | wait_for_network_manager | ||
4040 | 34 | |||
4041 | 35 | # Precondition is a existing network connection | ||
4042 | 36 | $nmcli d | grep 'eth0.*connected' | ||
4043 | 37 | |||
4044 | 38 | # Connection should have the default wake-on-lan setting | ||
4045 | 39 | connection=$($nmcli -m multiline -f UUID c show | awk '{print$2;exit}') | ||
4046 | 40 | $nmcli -m multiline -f connection.type c show $connection | grep '802-3-ethernet' | ||
4047 | 41 | # wake-on-lan should be set to respect the global defaults here | ||
4048 | 42 | $nmcli -m multiline -f 802-3-ethernet.wake-on-lan c show $connection | grep '1 (default)' | ||
4049 | 43 | |||
4050 | 44 | # We can sadly only verify that the value was correctly applied when | ||
4051 | 45 | # we're running the tests on a real device. QEMU doesn't support setting | ||
4052 | 46 | # the WoL value of the ethernet network device. | ||
4053 | 47 | if [ -z "`cat /proc/cpuinfo | grep QEMU`" ] ; then | ||
4054 | 48 | # Get the tools snap to have the ethtool tool available | ||
4055 | 49 | snap install --devmode --edge se-test-tools | ||
4056 | 50 | snap connect se-test-tools:network core | ||
4057 | 51 | snap connect se-test-tools:network-bind core | ||
4058 | 52 | snap connect se-test-tools:network-control core | ||
4059 | 53 | |||
4060 | 54 | # See `man ethtool` for details; 'g' means 'wakeup when magic packet comes in' | ||
4061 | 55 | # and is the default behavior we want. | ||
4062 | 56 | /snap/bin/se-test-tools.ethtool eth0 | grep 'Wake-up: g' | ||
4063 | 57 | fi | ||
4064 | 58 | ;; | ||
4065 | 59 | esac | ||
4066 | diff --git a/tests/lib/prepare-all.sh b/tests/lib/prepare-all.sh | |||
4067 | index e53efb4..ab933fd 100644 | |||
4068 | --- a/tests/lib/prepare-all.sh | |||
4069 | +++ b/tests/lib/prepare-all.sh | |||
4070 | @@ -6,7 +6,17 @@ if [ -n "$SNAP_CHANNEL" ] ; then | |||
4071 | 6 | exit 0 | 6 | exit 0 |
4072 | 7 | fi | 7 | fi |
4073 | 8 | 8 | ||
4074 | 9 | <<<<<<< tests/lib/prepare-all.sh | ||
4075 | 9 | # Setup classic snap and build the pulseaudio snap in there | 10 | # Setup classic snap and build the pulseaudio snap in there |
4076 | 11 | ======= | ||
4077 | 12 | # If there is a network-manager snap prebuilt for us, lets take | ||
4078 | 13 | # that one to speed things up. | ||
4079 | 14 | if [ -e /home/network-manager/network-manager_*_amd64.snap ] ; then | ||
4080 | 15 | exit 0 | ||
4081 | 16 | fi | ||
4082 | 17 | |||
4083 | 18 | # Setup classic snap and build the network-manager snap in there | ||
4084 | 19 | >>>>>>> tests/lib/prepare-all.sh | ||
4085 | 10 | snap install --devmode --beta classic | 20 | snap install --devmode --beta classic |
4086 | 11 | cat <<-EOF > /home/test/build-snap.sh | 21 | cat <<-EOF > /home/test/build-snap.sh |
4087 | 12 | #!/bin/sh | 22 | #!/bin/sh |
4088 | @@ -19,6 +29,7 @@ echo "deb http://archive.ubuntu.com/ubuntu/ xenial-proposed restricted main univ | |||
4089 | 19 | # Ensure we have the latest updates installed as the core snap | 29 | # Ensure we have the latest updates installed as the core snap |
4090 | 20 | # may be a bit out of date. | 30 | # may be a bit out of date. |
4091 | 21 | apt update | 31 | apt update |
4092 | 32 | <<<<<<< tests/lib/prepare-all.sh | ||
4093 | 22 | apt upgrade --yes --force-yes | 33 | apt upgrade --yes --force-yes |
4094 | 23 | 34 | ||
4095 | 24 | apt install -y --force-yes snapcraft | 35 | apt install -y --force-yes snapcraft |
4096 | @@ -27,9 +38,22 @@ snapcraft clean | |||
4097 | 27 | snapcraft | 38 | snapcraft |
4098 | 28 | EOF | 39 | EOF |
4099 | 29 | 40 | ||
4100 | 41 | ======= | ||
4101 | 42 | apt full-upgrade -y --force-yes | ||
4102 | 43 | |||
4103 | 44 | apt install -y --force-yes snapcraft | ||
4104 | 45 | cd /home/network-manager | ||
4105 | 46 | snapcraft clean | ||
4106 | 47 | snapcraft | ||
4107 | 48 | EOF | ||
4108 | 49 | >>>>>>> tests/lib/prepare-all.sh | ||
4109 | 30 | chmod +x /home/test/build-snap.sh | 50 | chmod +x /home/test/build-snap.sh |
4110 | 31 | sudo classic /home/test/build-snap.sh | 51 | sudo classic /home/test/build-snap.sh |
4111 | 32 | snap remove classic | 52 | snap remove classic |
4112 | 33 | 53 | ||
4113 | 34 | # Make sure we have a snap build | 54 | # Make sure we have a snap build |
4114 | 55 | <<<<<<< tests/lib/prepare-all.sh | ||
4115 | 35 | test -e /home/pulseaudio/pulseaudio_*_amd64.snap | 56 | test -e /home/pulseaudio/pulseaudio_*_amd64.snap |
4116 | 57 | ======= | ||
4117 | 58 | test -e /home/network-manager/network-manager_*_amd64.snap | ||
4118 | 59 | >>>>>>> tests/lib/prepare-all.sh | ||
4119 | diff --git a/tests/lib/prepare.sh b/tests/lib/prepare.sh | |||
4120 | index 60a45e9..2d677d6 100644 | |||
4121 | --- a/tests/lib/prepare.sh | |||
4122 | +++ b/tests/lib/prepare.sh | |||
4123 | @@ -1,4 +1,8 @@ | |||
4124 | 1 | #!/bin/bash | 1 | #!/bin/bash |
4125 | 2 | <<<<<<< tests/lib/prepare.sh | ||
4126 | 3 | ======= | ||
4127 | 4 | . $TESTSLIB/utilities.sh | ||
4128 | 5 | >>>>>>> tests/lib/prepare.sh | ||
4129 | 2 | 6 | ||
4130 | 3 | echo "Wait for firstboot change to be ready" | 7 | echo "Wait for firstboot change to be ready" |
4131 | 4 | while ! snap changes | grep -q "Done"; do | 8 | while ! snap changes | grep -q "Done"; do |
4132 | @@ -21,6 +25,7 @@ done | |||
4133 | 21 | echo "Kernel has a store revision" | 25 | echo "Kernel has a store revision" |
4134 | 22 | snap list | grep ^${kernel_name} | grep -E " [0-9]+\s+canonical" | 26 | snap list | grep ^${kernel_name} | grep -E " [0-9]+\s+canonical" |
4135 | 23 | 27 | ||
4136 | 28 | <<<<<<< tests/lib/prepare.sh | ||
4137 | 24 | # If we don't install pulseaudio here we get a system | 29 | # If we don't install pulseaudio here we get a system |
4138 | 25 | # without any network connectivity after reboot. | 30 | # without any network connectivity after reboot. |
4139 | 26 | if [ -n "$SNAP_CHANNEL" ] ; then | 31 | if [ -n "$SNAP_CHANNEL" ] ; then |
4140 | @@ -45,6 +50,27 @@ if [ ! -f $SPREAD_PATH/snapd-state.tar.gz ] ; then | |||
4141 | 45 | tar czf $SPREAD_PATH/snapd-state.tar.gz /var/lib/snapd | 50 | tar czf $SPREAD_PATH/snapd-state.tar.gz /var/lib/snapd |
4142 | 46 | systemctl start snapd.socket | 51 | systemctl start snapd.socket |
4143 | 47 | fi | 52 | fi |
4144 | 53 | ======= | ||
4145 | 54 | # Remove any existing state archive from other test suites | ||
4146 | 55 | rm -f /home/network-manager/snapd-state.tar.gz | ||
4147 | 56 | rm -f /home/network-manager/nm-state.tar.gz | ||
4148 | 57 | |||
4149 | 58 | snap_install network-manager | ||
4150 | 59 | |||
4151 | 60 | # Snapshot of the current snapd state for a later restore | ||
4152 | 61 | systemctl stop snapd.service snapd.socket | ||
4153 | 62 | tar czf $SPREAD_PATH/snapd-state.tar.gz /var/lib/snapd /etc/netplan | ||
4154 | 63 | systemctl start snapd.socket | ||
4155 | 64 | |||
4156 | 65 | # And also snapshot NetworkManager's state | ||
4157 | 66 | systemctl stop snap.network-manager.networkmanager | ||
4158 | 67 | tar czf $SPREAD_PATH/nm-state.tar.gz /var/snap/network-manager | ||
4159 | 68 | systemctl start snap.network-manager.networkmanager | ||
4160 | 69 | |||
4161 | 70 | # Make sure the original netplan configuration is applied and active | ||
4162 | 71 | netplan generate | ||
4163 | 72 | netplan apply | ||
4164 | 73 | >>>>>>> tests/lib/prepare.sh | ||
4165 | 48 | 74 | ||
4166 | 49 | # For debugging dump all snaps and connected slots/plugs | 75 | # For debugging dump all snaps and connected slots/plugs |
4167 | 50 | snap list | 76 | snap list |
4168 | diff --git a/tests/lib/restore-each.sh b/tests/lib/restore-each.sh | |||
4169 | index 541ba8c..8808746 100644 | |||
4170 | --- a/tests/lib/restore-each.sh | |||
4171 | +++ b/tests/lib/restore-each.sh | |||
4172 | @@ -1,12 +1,20 @@ | |||
4173 | 1 | #!/bin/bash | 1 | #!/bin/bash |
4174 | 2 | 2 | ||
4175 | 3 | . $TESTSLIB/snap-names.sh | 3 | . $TESTSLIB/snap-names.sh |
4176 | 4 | <<<<<<< tests/lib/restore-each.sh | ||
4177 | 5 | ======= | ||
4178 | 6 | . $TESTSLIB/utilities.sh | ||
4179 | 7 | >>>>>>> tests/lib/restore-each.sh | ||
4180 | 4 | 8 | ||
4181 | 5 | # Remove all snaps not being the core, gadget, kernel or snap we're testing | 9 | # Remove all snaps not being the core, gadget, kernel or snap we're testing |
4182 | 6 | for snap in /snap/*; do | 10 | for snap in /snap/*; do |
4183 | 7 | snap="${snap:6}" | 11 | snap="${snap:6}" |
4184 | 8 | case "$snap" in | 12 | case "$snap" in |
4185 | 13 | <<<<<<< tests/lib/restore-each.sh | ||
4186 | 9 | "bin" | "$gadget_name" | "$kernel_name" | "$core_name" | "$SNAP_NAME") | 14 | "bin" | "$gadget_name" | "$kernel_name" | "$core_name" | "$SNAP_NAME") |
4187 | 15 | ======= | ||
4188 | 16 | "bin" | "$gadget_name" | "$kernel_name" | "$core_name" | "$SNAP_NAME" ) | ||
4189 | 17 | >>>>>>> tests/lib/restore-each.sh | ||
4190 | 10 | ;; | 18 | ;; |
4191 | 11 | *) | 19 | *) |
4192 | 12 | snap remove "$snap" | 20 | snap remove "$snap" |
4193 | @@ -14,9 +22,28 @@ for snap in /snap/*; do | |||
4194 | 14 | esac | 22 | esac |
4195 | 15 | done | 23 | done |
4196 | 16 | 24 | ||
4197 | 25 | <<<<<<< tests/lib/restore-each.sh | ||
4198 | 26 | ======= | ||
4199 | 27 | # Drop any generated or modified netplan configuration files. The original | ||
4200 | 28 | # ones will be restored below. | ||
4201 | 29 | rm -f /etc/netplan/* | ||
4202 | 30 | |||
4203 | 31 | >>>>>>> tests/lib/restore-each.sh | ||
4204 | 17 | # Ensure we have the same state for snapd as we had before | 32 | # Ensure we have the same state for snapd as we had before |
4205 | 18 | systemctl stop snapd.service snapd.socket | 33 | systemctl stop snapd.service snapd.socket |
4206 | 19 | rm -rf /var/lib/snapd/* | 34 | rm -rf /var/lib/snapd/* |
4207 | 20 | tar xzf $SPREAD_PATH/snapd-state.tar.gz -C / | 35 | tar xzf $SPREAD_PATH/snapd-state.tar.gz -C / |
4208 | 21 | rm -rf /root/.snap | 36 | rm -rf /root/.snap |
4209 | 22 | systemctl start snapd.service snapd.socket | 37 | systemctl start snapd.service snapd.socket |
4210 | 38 | <<<<<<< tests/lib/restore-each.sh | ||
4211 | 39 | ======= | ||
4212 | 40 | |||
4213 | 41 | systemctl stop snap.network-manager.networkmanager | ||
4214 | 42 | rm -rf /var/snap/network-manager/* | ||
4215 | 43 | tar xzf $SPREAD_PATH/nm-state.tar.gz -C / | ||
4216 | 44 | systemctl start snap.network-manager.networkmanager | ||
4217 | 45 | |||
4218 | 46 | # Make sure the original netplan configuration is applied and active | ||
4219 | 47 | netplan generate | ||
4220 | 48 | netplan apply | ||
4221 | 49 | >>>>>>> tests/lib/restore-each.sh | ||
4222 | diff --git a/tests/lib/utilities.sh b/tests/lib/utilities.sh | |||
4223 | index 977d045..c14cdda 100644 | |||
4224 | --- a/tests/lib/utilities.sh | |||
4225 | +++ b/tests/lib/utilities.sh | |||
4226 | @@ -1,9 +1,71 @@ | |||
4227 | 1 | #!/bin/sh | 1 | #!/bin/sh |
4228 | 2 | <<<<<<< tests/lib/utilities.sh | ||
4229 | 2 | 3 | ||
4230 | 3 | wait_for_pulseaudio() { | 4 | wait_for_pulseaudio() { |
4231 | 4 | while ! systemctl status snap.pulseaudio.pulseaudio ; do | 5 | while ! systemctl status snap.pulseaudio.pulseaudio ; do |
4232 | 6 | ======= | ||
4233 | 7 | snap_install() { | ||
4234 | 8 | name=$1 | ||
4235 | 9 | if [ -n "$SNAP_CHANNEL" ] ; then | ||
4236 | 10 | # Don't reinstall if we have it installed already | ||
4237 | 11 | if ! snap list | grep $name ; then | ||
4238 | 12 | snap install --$SNAP_CHANNEL $name | ||
4239 | 13 | fi | ||
4240 | 14 | else | ||
4241 | 15 | # Need first install from store to get all necessary assertions into | ||
4242 | 16 | # place. Second local install will then bring in our locally built | ||
4243 | 17 | # snap. | ||
4244 | 18 | snap install $name | ||
4245 | 19 | snap install --dangerous $PROJECT_PATH/$name*_amd64.snap | ||
4246 | 20 | fi | ||
4247 | 21 | } | ||
4248 | 22 | |||
4249 | 23 | switch_netplan_to_network_manager() { | ||
4250 | 24 | if [ -e /etc/netplan/00-default-nm-renderer.yaml ] ; then | ||
4251 | 25 | return 0 | ||
4252 | 26 | fi | ||
4253 | 27 | |||
4254 | 28 | cat <<-EOF > /etc/netplan/00-default-nm-renderer.yaml | ||
4255 | 29 | network: | ||
4256 | 30 | renderer: NetworkManager | ||
4257 | 31 | EOF | ||
4258 | 32 | } | ||
4259 | 33 | |||
4260 | 34 | switch_netplan_to_networkd() { | ||
4261 | 35 | if [ ! -e /etc/netplan/00-default-nm-renderer.yaml ] ; then | ||
4262 | 36 | return 0 | ||
4263 | 37 | fi | ||
4264 | 38 | |||
4265 | 39 | rm /etc/netplan/00-default-nm-renderer.yaml | ||
4266 | 40 | } | ||
4267 | 41 | |||
4268 | 42 | wait_for_systemd_service() { | ||
4269 | 43 | while ! systemctl status $1 ; do | ||
4270 | 44 | >>>>>>> tests/lib/utilities.sh | ||
4271 | 5 | sleep 1 | 45 | sleep 1 |
4272 | 6 | done | 46 | done |
4273 | 7 | sleep 1 | 47 | sleep 1 |
4274 | 8 | } | 48 | } |
4275 | 9 | 49 | ||
4276 | 50 | <<<<<<< tests/lib/utilities.sh | ||
4277 | 51 | ======= | ||
4278 | 52 | wait_for_network_manager() { | ||
4279 | 53 | wait_for_systemd_service snap.network-manager.networkmanager | ||
4280 | 54 | } | ||
4281 | 55 | |||
4282 | 56 | stop_after_first_reboot() { | ||
4283 | 57 | if [ $SPREAD_REBOOT -eq 1 ] ; then | ||
4284 | 58 | exit 0 | ||
4285 | 59 | fi | ||
4286 | 60 | } | ||
4287 | 61 | |||
4288 | 62 | mac_to_ipv6() { | ||
4289 | 63 | mac=$1 | ||
4290 | 64 | ipv6_address=fe80::$(printf %02x $((0x${mac%%:*} ^ 2))) | ||
4291 | 65 | mac=${mac#*:} | ||
4292 | 66 | ipv6_address=$ipv6_address${mac%:*:*:*}ff:fe | ||
4293 | 67 | mac=${mac#*:*:} | ||
4294 | 68 | ipv6_address=$ipv6_address${mac%:*}${mac##*:} | ||
4295 | 69 | echo $ipv6_address | ||
4296 | 70 | } | ||
4297 | 71 | >>>>>>> tests/lib/utilities.sh | ||
4298 | diff --git a/tests/main/aliases/task.yaml b/tests/main/aliases/task.yaml | |||
4299 | 10 | new file mode 100644 | 72 | new file mode 100644 |
4300 | index 0000000..e2eff9d | |||
4301 | --- /dev/null | |||
4302 | +++ b/tests/main/aliases/task.yaml | |||
4303 | @@ -0,0 +1,13 @@ | |||
4304 | 1 | summary: Verify aliases provided by the snap are correctly enabled | ||
4305 | 2 | |||
4306 | 3 | execute: | | ||
4307 | 4 | # FIXME: Aliases should be not in place automatically unless we | ||
4308 | 5 | # have them approved from the store in our snap-declaration assertion. | ||
4309 | 6 | test ! -e /snap/bin/nmcli | ||
4310 | 7 | |||
4311 | 8 | snap alias network-manager nmcli | ||
4312 | 9 | |||
4313 | 10 | test -e /snap/bin/nmcli | ||
4314 | 11 | |||
4315 | 12 | # Verify the alias works without any problems | ||
4316 | 13 | /snap/bin/nmcli g | ||
4317 | diff --git a/tests/main/ethernet-managed-by-networkd/task.yaml b/tests/main/ethernet-managed-by-networkd/task.yaml | |||
4318 | 0 | new file mode 100644 | 14 | new file mode 100644 |
4319 | index 0000000..80e75cb | |||
4320 | --- /dev/null | |||
4321 | +++ b/tests/main/ethernet-managed-by-networkd/task.yaml | |||
4322 | @@ -0,0 +1,7 @@ | |||
4323 | 1 | summary: When not specific configuration is in place networkd manages ethernet | ||
4324 | 2 | |||
4325 | 3 | execute: | | ||
4326 | 4 | . $TESTSLIB/utilities.sh | ||
4327 | 5 | networkctl | grep 'eth0.*routable' | ||
4328 | 6 | wait_for_network_manager | ||
4329 | 7 | /snap/bin/network-manager.nmcli d | grep 'eth0.*unmanaged' | ||
4330 | diff --git a/tests/main/installation/task.yaml b/tests/main/installation/task.yaml | |||
4331 | index 2d9fb0d..5471ecc 100644 | |||
4332 | --- a/tests/main/installation/task.yaml | |||
4333 | +++ b/tests/main/installation/task.yaml | |||
4334 | @@ -1,9 +1,14 @@ | |||
4335 | 1 | <<<<<<< tests/main/installation/task.yaml | ||
4336 | 1 | summary: Test pulseaudio snap installation was successful | 2 | summary: Test pulseaudio snap installation was successful |
4337 | 3 | ======= | ||
4338 | 4 | summary: Test network-manager snap installation was successful | ||
4339 | 5 | >>>>>>> tests/main/installation/task.yaml | ||
4340 | 2 | 6 | ||
4341 | 3 | execute: | | 7 | execute: | |
4342 | 4 | . $TESTSLIB/utilities.sh | 8 | . $TESTSLIB/utilities.sh |
4343 | 5 | 9 | ||
4344 | 6 | # Service should be up an running | 10 | # Service should be up an running |
4345 | 11 | <<<<<<< tests/main/installation/task.yaml | ||
4346 | 7 | wait_for_pulseaudio | 12 | wait_for_pulseaudio |
4347 | 8 | systemctl status snap.pulseaudio.pulseaudio | grep -Pzq ': active' | 13 | systemctl status snap.pulseaudio.pulseaudio | grep -Pzq ': active' |
4348 | 9 | 14 | ||
4349 | @@ -14,3 +19,14 @@ execute: | | |||
4350 | 14 | snap interfaces | grep -Pzq "pulseaudio:service +pulseaudio:client" | 19 | snap interfaces | grep -Pzq "pulseaudio:service +pulseaudio:client" |
4351 | 15 | snap interfaces | grep -P "\-\ +pulseaudio:home" | 20 | snap interfaces | grep -P "\-\ +pulseaudio:home" |
4352 | 16 | 21 | ||
4353 | 22 | ======= | ||
4354 | 23 | wait_for_network_manager | ||
4355 | 24 | |||
4356 | 25 | # .. and nmcli should be able to reach NetworkManager | ||
4357 | 26 | /snap/bin/network-manager.nmcli g | ||
4358 | 27 | |||
4359 | 28 | # Ensure all necessary plugs/slots are connected | ||
4360 | 29 | snap interfaces | grep -Pzq ":network-setup-observe +network-manager" | ||
4361 | 30 | snap interfaces | grep -Pzq ":ppp +network-manager" | ||
4362 | 31 | snap interfaces | grep -Pzq "network-manager:service +network-manager:nmcli" | ||
4363 | 32 | >>>>>>> tests/main/installation/task.yaml | ||
4364 | diff --git a/tests/main/set-hostname/task.yaml b/tests/main/set-hostname/task.yaml | |||
4365 | 17 | new file mode 100644 | 33 | new file mode 100644 |
4366 | index 0000000..ddcabd9 | |||
4367 | --- /dev/null | |||
4368 | +++ b/tests/main/set-hostname/task.yaml | |||
4369 | @@ -0,0 +1,13 @@ | |||
4370 | 1 | summary: Verify we can modify the hostname of the system | ||
4371 | 2 | |||
4372 | 3 | execute: | | ||
4373 | 4 | # Print out current hostname for nm and hostnamed to have a reference | ||
4374 | 5 | # for debugging later. | ||
4375 | 6 | /snap/bin/network-manager.nmcli general hostname | ||
4376 | 7 | hostnamectl | ||
4377 | 8 | |||
4378 | 9 | expected_hostname=foobar | ||
4379 | 10 | /snap/bin/network-manager.nmcli general hostname $expected_hostname | ||
4380 | 11 | test "`/snap/bin/network-manager.nmcli general hostname`" = "$expected_hostname" | ||
4381 | 12 | test "`hostnamectl status | grep Static`" = " Static hostname: $expected_hostname" | ||
4382 | 13 | test "`hostname`" = "$expected_hostname" | ||
4383 | diff --git a/tests/main/static-ip-configuration/task.yaml b/tests/main/static-ip-configuration/task.yaml | |||
4384 | 0 | new file mode 100644 | 14 | new file mode 100644 |
4385 | index 0000000..00031fc | |||
4386 | --- /dev/null | |||
4387 | +++ b/tests/main/static-ip-configuration/task.yaml | |||
4388 | @@ -0,0 +1,49 @@ | |||
4389 | 1 | summary: Test static IP configuration | ||
4390 | 2 | |||
4391 | 3 | restore: | | ||
4392 | 4 | # Ensure that the created virtual network interfaces are removed | ||
4393 | 5 | # in any case when we're done | ||
4394 | 6 | if [ -e /sys/class/net/veth0 ] ; then | ||
4395 | 7 | ip link delete veth0 | ||
4396 | 8 | fi | ||
4397 | 9 | |||
4398 | 10 | execute: | | ||
4399 | 11 | . $TESTSLIB/utilities.sh | ||
4400 | 12 | |||
4401 | 13 | ip link add dev veth0 type veth peer name veth1 | ||
4402 | 14 | |||
4403 | 15 | wait_for_network_manager | ||
4404 | 16 | # NetworkManager should ignore the other side of our pipe so | ||
4405 | 17 | # that we can configure it statically. | ||
4406 | 18 | /snap/bin/network-manager.nmcli d set veth1 managed no | ||
4407 | 19 | ip addr add 10.0.1.1/24 dev veth1 | ||
4408 | 20 | |||
4409 | 21 | connection=veth0-static | ||
4410 | 22 | /snap/bin/network-manager.nmcli c add con-name $connection type ethernet ifname veth0 \ | ||
4411 | 23 | ip4 10.0.1.2/24 | ||
4412 | 24 | /snap/bin/network-manager.nmcli c up $connection | ||
4413 | 25 | /snap/bin/network-manager.nmcli d | grep 'veth0.*connected' | ||
4414 | 26 | |||
4415 | 27 | # Address should be correctly applied now | ||
4416 | 28 | expected_veth0_address="10.0.1.2/24" | ||
4417 | 29 | /snap/bin/network-manager.nmcli -m multiline -f IP4.ADDRESS c show veth0-static | grep $expected_veth0_address | ||
4418 | 30 | ip addr show dev veth0 | grep 'UP' | ||
4419 | 31 | ip addr show dev veth0 | grep $expected_veth0_address | ||
4420 | 32 | |||
4421 | 33 | # Routing needs to be in place as well | ||
4422 | 34 | expected_veth0_route="10.0.1.0/24 dev veth0 proto kernel scope link src 10.0.1.2 metric 100" | ||
4423 | 35 | ip route | grep "$expected_veth0_route" | ||
4424 | 36 | |||
4425 | 37 | # Disable connection and ensure IP configuration is removed | ||
4426 | 38 | /snap/bin/network-manager.nmcli c down $connection | ||
4427 | 39 | ip addr show dev veth0 | grep -v $expected_veth0_address | ||
4428 | 40 | ip route | grep -v "$expected_veth0_route" | ||
4429 | 41 | |||
4430 | 42 | # Enabling network connection again and removing it should remove | ||
4431 | 43 | # the IP configuration too | ||
4432 | 44 | /snap/bin/network-manager.nmcli c up $connection | ||
4433 | 45 | ip addr show dev veth0 | grep $expected_veth0_address | ||
4434 | 46 | ip route | grep "$expected_veth0_route" | ||
4435 | 47 | /snap/bin/network-manager.nmcli c delete $connection | ||
4436 | 48 | ip addr show dev veth0 | grep -v $expected_veth0_address | ||
4437 | 49 | ip route | grep -v "$expected_veth0_route" | ||
4438 | 0 | \ No newline at end of file | 50 | \ No newline at end of file |
4439 | diff --git a/tests/main/suspend-resume/task.yaml b/tests/main/suspend-resume/task.yaml | |||
4440 | 1 | new file mode 100644 | 51 | new file mode 100644 |
4441 | index 0000000..b5df7d1 | |||
4442 | --- /dev/null | |||
4443 | +++ b/tests/main/suspend-resume/task.yaml | |||
4444 | @@ -0,0 +1,80 @@ | |||
4445 | 1 | summary: Verify suspend/resume tracking works reliable | ||
4446 | 2 | |||
4447 | 3 | restore: | | ||
4448 | 4 | rmmod mac80211_hwsim | ||
4449 | 5 | |||
4450 | 6 | execute: | | ||
4451 | 7 | # Install necessary test-tools, we need inotify-tools in this case | ||
4452 | 8 | snap install --edge se-test-tools | ||
4453 | 9 | |||
4454 | 10 | # Get two connected wifi network interfaces wlan0 and wlan1 | ||
4455 | 11 | modprobe mac80211_hwsim radios=2 | ||
4456 | 12 | |||
4457 | 13 | # FIXME: take the one from edge for now as that is the one which | ||
4458 | 14 | # has automatic setup capabilities | ||
4459 | 15 | snap install --edge wifi-ap | ||
4460 | 16 | |||
4461 | 17 | /snap/bin/network-manager.nmcli d wifi rescan | ||
4462 | 18 | while ! /snap/bin/network-manager.nmcli d wifi | grep Ubuntu ; do | ||
4463 | 19 | /snap/bin/network-manager.nmcli d wifi rescan | ||
4464 | 20 | sleep 1 | ||
4465 | 21 | done | ||
4466 | 22 | |||
4467 | 23 | /snap/bin/network-manager.nmcli d wifi connect Ubuntu | ||
4468 | 24 | |||
4469 | 25 | # Override the existing systemd-suspend service unit with a customized | ||
4470 | 26 | # one to prevent the device from entering real suspend. The service unit | ||
4471 | 27 | # will block as long as no new files gets created inside the specified | ||
4472 | 28 | # directory inotifywait listens for changes on. | ||
4473 | 29 | cat <<-EOF > $PROJECT_PATH/systemd-suspend.service | ||
4474 | 30 | [Unit] | ||
4475 | 31 | Description=Suspend | ||
4476 | 32 | Documentation=man:systemd-suspend.service(8) | ||
4477 | 33 | DefaultDependencies=no | ||
4478 | 34 | [Service] | ||
4479 | 35 | Type=oneshot | ||
4480 | 36 | ExecStart=/bin/sh -c '/snap/bin/se-test-tools.inotifywait -e create /home/network-manager/systemd-suspend' | ||
4481 | 37 | EOF | ||
4482 | 38 | mkdir -p /home/network-manager/systemd-suspend | ||
4483 | 39 | mount -o bind,ro $PROJECT_PATH/systemd-suspend.service /lib/systemd/system/systemd-suspend.service | ||
4484 | 40 | systemctl daemon-reload | ||
4485 | 41 | |||
4486 | 42 | # NetworkManager should have an inhibit lock in place by default | ||
4487 | 43 | systemd-inhibit --list | grep "NetworkManager needs to turn off networks" | ||
4488 | 44 | |||
4489 | 45 | service=snap.network-manager.networkmanager | ||
4490 | 46 | |||
4491 | 47 | # Flush the syslog so that we can reliable grep it once we triggered | ||
4492 | 48 | # the system suspend | ||
4493 | 49 | journalctl --flush -u $service | ||
4494 | 50 | |||
4495 | 51 | # Kick off the actual suspend in background so that we can continue | ||
4496 | 52 | # verifying the correct state left by the system before it would | ||
4497 | 53 | # normally enter a sleep state. | ||
4498 | 54 | systemctl suspend --no-block & | ||
4499 | 55 | |||
4500 | 56 | # The easiest way to ensure NetworkManager did the right thing is | ||
4501 | 57 | # by going through its log output and verifying it prints out | ||
4502 | 58 | # what we expect. | ||
4503 | 59 | journalctl --no-pager -u $service | grep 'manager: sleep requested' | ||
4504 | 60 | journalctl --no-pager -u $service | grep 'manager: sleeping...' | ||
4505 | 61 | journalctl --no-pager -u $service | grep "device (wlan1): state change: activated -> unmanaged (reason 'sleeping')" | ||
4506 | 62 | journalctl --no-pager -u $service | grep 'manager: NetworkManager state is now ASLEEP' | ||
4507 | 63 | |||
4508 | 64 | # Connection should be reported as disconnected | ||
4509 | 65 | /snap/bin/network-manager.nmcli d | grep -v 'wlan1.*connected' | ||
4510 | 66 | # .. and interface should be disabled | ||
4511 | 67 | ifconfig | grep -v wlan1 | ||
4512 | 68 | |||
4513 | 69 | # Now we wakeup the system again and verify NetworkManager | ||
4514 | 70 | # is correctly setting up the ethernet port again. | ||
4515 | 71 | journalctl --flush -u $service | ||
4516 | 72 | touch $PROJECT_PATH/systemd-suspend/wakeup | ||
4517 | 73 | |||
4518 | 74 | journalctl --no-pager -u $service | grep 'manager: wake requested (sleeping: yes enabled: yes)' | ||
4519 | 75 | journalctl --no-pager -u $service | grep 'manager: NetworkManager state is now CONNECTED_LOCAL' | ||
4520 | 76 | journalctl --no-pager -u $service | grep 'manager: NetworkManager state is now CONNECTED_GLOBAL' | ||
4521 | 77 | journalctl --no-pager -u $service | grep 'device (wlan1): Activation: successful, device activated.' | ||
4522 | 78 | |||
4523 | 79 | ifconfig | grep wlan1 | ||
4524 | 80 | /snap/bin/network-manager.nmcli d | grep -v 'wlan1.*connected' | ||
4525 | diff --git a/tests/main/switch-netplan-renderer/task.yaml b/tests/main/switch-netplan-renderer/task.yaml | |||
4526 | 0 | new file mode 100644 | 81 | new file mode 100644 |
4527 | index 0000000..4453b6a | |||
4528 | --- /dev/null | |||
4529 | +++ b/tests/main/switch-netplan-renderer/task.yaml | |||
4530 | @@ -0,0 +1,40 @@ | |||
4531 | 1 | summary: Dynamically switch the netplan renderer | ||
4532 | 2 | |||
4533 | 3 | execute: | | ||
4534 | 4 | . $TESTSLIB/utilities.sh | ||
4535 | 5 | case "$SPREAD_REBOOT" in | ||
4536 | 6 | 0) | ||
4537 | 7 | wait_for_network_manager | ||
4538 | 8 | |||
4539 | 9 | # networkd manages eth0 and NetworkManager does not | ||
4540 | 10 | networkctl | grep 'eth0.*routable' | ||
4541 | 11 | /snap/bin/network-manager.nmcli d | grep 'eth0.*unmanaged' | ||
4542 | 12 | |||
4543 | 13 | # Now we switch back to the NetworkManager backend for netplan | ||
4544 | 14 | switch_netplan_to_network_manager | ||
4545 | 15 | REBOOT | ||
4546 | 16 | ;; | ||
4547 | 17 | 1) | ||
4548 | 18 | test -e /etc/netplan/00-default-nm-renderer.yaml | ||
4549 | 19 | |||
4550 | 20 | # Give NetworkManager a bit to come up after the reboot | ||
4551 | 21 | wait_for_network_manager | ||
4552 | 22 | |||
4553 | 23 | # NetworkManager now controls eth0 and networkd does not | ||
4554 | 24 | /snap/bin/network-manager.nmcli d | grep 'eth0.*connected' | ||
4555 | 25 | networkctl status eth0 | grep 'State: n/a' | ||
4556 | 26 | |||
4557 | 27 | # And switch back to networkd | ||
4558 | 28 | switch_netplan_to_networkd | ||
4559 | 29 | REBOOT | ||
4560 | 30 | ;; | ||
4561 | 31 | 2) | ||
4562 | 32 | wait_for_network_manager | ||
4563 | 33 | |||
4564 | 34 | # networkd manages eth0 and NetworkManager does not | ||
4565 | 35 | networkctl | grep 'eth0.*routable' | ||
4566 | 36 | /snap/bin/network-manager.nmcli d | grep 'eth0.*unmanaged' | ||
4567 | 37 | ;; | ||
4568 | 38 | *) | ||
4569 | 39 | ;; | ||
4570 | 40 | esac | ||
4571 | diff --git a/tests/main/wifi-connect-secured-ap/task.yaml b/tests/main/wifi-connect-secured-ap/task.yaml | |||
4572 | 0 | new file mode 100644 | 41 | new file mode 100644 |
4573 | index 0000000..aa6a70c | |||
4574 | --- /dev/null | |||
4575 | +++ b/tests/main/wifi-connect-secured-ap/task.yaml | |||
4576 | @@ -0,0 +1,38 @@ | |||
4577 | 1 | summary: Test connection to a secured WiFi AP | ||
4578 | 2 | |||
4579 | 3 | environment: | ||
4580 | 4 | WIFI_SSID: Ubuntu | ||
4581 | 5 | WIFI_PASSPHRASE: Test1234 | ||
4582 | 6 | |||
4583 | 7 | restore: | | ||
4584 | 8 | rmmod mac80211_hwsim | ||
4585 | 9 | |||
4586 | 10 | execute: | | ||
4587 | 11 | # Get two connected wifi network interfaces wlan0 and wlan1 and | ||
4588 | 12 | # give the system soem time to settle | ||
4589 | 13 | modprobe mac80211_hwsim radios=2 | ||
4590 | 14 | sleep 1 | ||
4591 | 15 | |||
4592 | 16 | snap install wifi-ap | ||
4593 | 17 | # FIXME: until the wifi-ap utility is clever enough to retry | ||
4594 | 18 | # connecting with the service we need to add a short sleep here | ||
4595 | 19 | sleep 0.5 | ||
4596 | 20 | |||
4597 | 21 | # Setup the AP on wlan0 | ||
4598 | 22 | /snap/bin/wifi-ap.config set wifi.interface wlan0 | ||
4599 | 23 | /snap/bin/wifi-ap.config set wifi.ssid $WIFI_SSID | ||
4600 | 24 | /snap/bin/wifi-ap.config set wifi.security wpa2 | ||
4601 | 25 | /snap/bin/wifi-ap.config set wifi.security-passphrase $WIFI_PASSPHRASE | ||
4602 | 26 | |||
4603 | 27 | # AP needs a bit to appear and be visible for NetworkManager | ||
4604 | 28 | /snap/bin/network-manager.nmcli d wifi rescan | ||
4605 | 29 | while ! /snap/bin/network-manager.nmcli d wifi | grep Ubuntu ; do | ||
4606 | 30 | /snap/bin/network-manager.nmcli d wifi rescan | ||
4607 | 31 | sleep 1 | ||
4608 | 32 | done | ||
4609 | 33 | |||
4610 | 34 | /snap/bin/network-manager.nmcli d wifi | grep $WIFI_SSID | ||
4611 | 35 | |||
4612 | 36 | # Connect to the AP and ensure the connection was established | ||
4613 | 37 | /snap/bin/network-manager.nmcli d wifi connect $WIFI_SSID password $WIFI_PASSPHRASE | ||
4614 | 38 | /snap/bin/network-manager.nmcli d | grep 'wlan1.*connected' | ||
4615 | diff --git a/tests/main/wifi-powersave-config-option/task.yaml b/tests/main/wifi-powersave-config-option/task.yaml | |||
4616 | 0 | new file mode 100644 | 39 | new file mode 100644 |
4617 | index 0000000..56344ec | |||
4618 | --- /dev/null | |||
4619 | +++ b/tests/main/wifi-powersave-config-option/task.yaml | |||
4620 | @@ -0,0 +1,28 @@ | |||
4621 | 1 | summary: Verify WiFi powersave can be enabled via a snap config option | ||
4622 | 2 | |||
4623 | 3 | environment: | ||
4624 | 4 | WIFI_POWERSAVE_CONF_PATH: /var/snap/network-manager/current/conf.d/wifi-powersave.conf | ||
4625 | 5 | |||
4626 | 6 | execute: | | ||
4627 | 7 | . $TESTSLIB/utilities.sh | ||
4628 | 8 | |||
4629 | 9 | # The mac80211_hwsim driver does not support the powersave mode | ||
4630 | 10 | # so we can't check this reliable. | ||
4631 | 11 | |||
4632 | 12 | test "`snap get network-manager wifi.powersave`" = "disabled" | ||
4633 | 13 | grep "wifi.powersave = 2" $WIFI_POWERSAVE_CONF_PATH | ||
4634 | 14 | |||
4635 | 15 | # Try to enable and disable again | ||
4636 | 16 | snap set network-manager wifi.powersave=enabled | ||
4637 | 17 | test "`snap get network-manager wifi.powersave`" = "enabled" | ||
4638 | 18 | grep "wifi.powersave = 3" $WIFI_POWERSAVE_CONF_PATH | ||
4639 | 19 | |||
4640 | 20 | snap set network-manager wifi.powersave=disabled | ||
4641 | 21 | test "`snap get network-manager wifi.powersave`" = "disabled" | ||
4642 | 22 | grep "wifi.powersave = 2" $WIFI_POWERSAVE_CONF_PATH | ||
4643 | 23 | |||
4644 | 24 | # Specifying no value means the snap should use the default | ||
4645 | 25 | # which is 'disable' | ||
4646 | 26 | snap set network-manager wifi.powersave= | ||
4647 | 27 | test "`snap get network-manager wifi.powersave`" = "disabled" | ||
4648 | 28 | grep "wifi.powersave = 2" $WIFI_POWERSAVE_CONF_PATH | ||
4649 | diff --git a/tests/main/wifi-wowlan-config-option/task.yaml b/tests/main/wifi-wowlan-config-option/task.yaml | |||
4650 | 0 | new file mode 100644 | 29 | new file mode 100644 |
4651 | index 0000000..bb34a01 | |||
4652 | --- /dev/null | |||
4653 | +++ b/tests/main/wifi-wowlan-config-option/task.yaml | |||
4654 | @@ -0,0 +1,55 @@ | |||
4655 | 1 | summary: Verify WiFi WoWLAN can be enabled via a snap config option | ||
4656 | 2 | |||
4657 | 3 | environment: | ||
4658 | 4 | WIFI_WOWL_CONF_PATH: /var/snap/network-manager/current/conf.d/wifi-wowlan.conf | ||
4659 | 5 | |||
4660 | 6 | execute: | | ||
4661 | 7 | . $TESTSLIB/utilities.sh | ||
4662 | 8 | |||
4663 | 9 | # The mac80211_hwsim driver does not support WoWLAN so we can't | ||
4664 | 10 | # check this reliable on the hardware level and will only check | ||
4665 | 11 | # in the following that the correct configuration for | ||
4666 | 12 | # NetworkManager itself is written out. | ||
4667 | 13 | |||
4668 | 14 | test `snap get network-manager wifi.wake-on-wlan` = disabled | ||
4669 | 15 | grep "^wifi.wake-on-wlan=0$" $WIFI_WOWL_CONF_PATH | ||
4670 | 16 | |||
4671 | 17 | test "`snap get network-manager wifi.wake-on-wlan-password`" = "" | ||
4672 | 18 | grep -v "^wifi.wake-on-wlan-password=.*$" $WIFI_WOWL_CONF_PATH | ||
4673 | 19 | |||
4674 | 20 | snap set network-manager wifi.wake-on-wlan-password=Test1234 | ||
4675 | 21 | grep "^wifi.wake-on-wlan-password=Test1234$" $WIFI_WOWL_CONF_PATH | ||
4676 | 22 | # Setting the password alone should keep the actual WoWLAN value | ||
4677 | 23 | # still unset so that NetworkManager uses its default. | ||
4678 | 24 | grep -v "^wifi.wake-on-wlan=.*$" $WIFI_WOWL_CONF_PATH | ||
4679 | 25 | |||
4680 | 26 | snap set network-manager wifi.wake-on-wlan=magic | ||
4681 | 27 | grep "^wifi.wake-on-wlan=8$" $WIFI_WOWL_CONF_PATH | ||
4682 | 28 | grep "^wifi.wake-on-wlan-password=Test1234$" $WIFI_WOWL_CONF_PATH | ||
4683 | 29 | |||
4684 | 30 | # Test all other possible keys for the wifi.wake-on-wlan option | ||
4685 | 31 | snap set network-manager wifi.wake-on-wlan=disabled | ||
4686 | 32 | grep "^wifi.wake-on-wlan=0$" $WIFI_WOWL_CONF_PATH | ||
4687 | 33 | snap set network-manager wifi.wake-on-wlan=any | ||
4688 | 34 | grep "^wifi.wake-on-wlan=2$" $WIFI_WOWL_CONF_PATH | ||
4689 | 35 | snap set network-manager wifi.wake-on-wlan=disconnect | ||
4690 | 36 | grep "^wifi.wake-on-wlan=4$" $WIFI_WOWL_CONF_PATH | ||
4691 | 37 | snap set network-manager wifi.wake-on-wlan=magic | ||
4692 | 38 | grep "^wifi.wake-on-wlan=8$" $WIFI_WOWL_CONF_PATH | ||
4693 | 39 | snap set network-manager wifi.wake-on-wlan=gtk-rekey-failure | ||
4694 | 40 | grep "^wifi.wake-on-wlan=16$" $WIFI_WOWL_CONF_PATH | ||
4695 | 41 | snap set network-manager wifi.wake-on-wlan=eap-identity-request | ||
4696 | 42 | grep "^wifi.wake-on-wlan=32$" $WIFI_WOWL_CONF_PATH | ||
4697 | 43 | snap set network-manager wifi.wake-on-wlan=4way-handshake | ||
4698 | 44 | grep "^wifi.wake-on-wlan=64$" $WIFI_WOWL_CONF_PATH | ||
4699 | 45 | snap set network-manager wifi.wake-on-wlan=rfkill-release | ||
4700 | 46 | grep "^wifi.wake-on-wlan=128$" $WIFI_WOWL_CONF_PATH | ||
4701 | 47 | snap set network-manager wifi.wake-on-wlan=tcp | ||
4702 | 48 | grep "^wifi.wake-on-wlan=256$" $WIFI_WOWL_CONF_PATH | ||
4703 | 49 | |||
4704 | 50 | # Not setting any concrete value should remove the configuration | ||
4705 | 51 | snap set network-manager wifi.wake-on-wlan-password= | ||
4706 | 52 | grep -v "^wifi.wake-on-wlan-password=.*$" $WIFI_WOWL_CONF_PATH | ||
4707 | 53 | snap set network-manager wifi.wake-on-wlan= | ||
4708 | 54 | grep -v "^wifi.wake-on-wlan=.*$" $WIFI_WOWL_CONF_PATH | ||
4709 | 55 | grep -v "^wifi.wake-on-wlan-password=.*$" $WIFI_WOWL_CONF_PATH |
FAILED: Continuous integration, rev:4fcd29eeeec 9c53de6eb2de191 7b9bf88b8e8130 /jenkins. canonical. com/system- enablement/ job/generic- build-snap/ 683/ /jenkins. canonical. com/system- enablement/ job/generic- update- snap-mp/ 591/console
https:/
Executed test runs:
None: https:/
Click here to trigger a rebuild: /jenkins. canonical. com/system- enablement/ job/generic- build-snap/ 683/rebuild
https:/