···
599
599
checksum = "adad44e29e4c806119491a7f06f03de4d1af22c3a680dd47f1e6e179439d1f56"
600
600
601
601
[[package]]
602
602
+
name = "roxmltree"
603
603
+
version = "0.19.0"
604
604
+
source = "registry+https://github.com/rust-lang/crates.io-index"
605
605
+
checksum = "3cd14fd5e3b777a7422cca79358c57a8f6e3a703d9ac187448d0daf220c2407f"
606
606
+
607
607
+
[[package]]
602
608
name = "rust-analyzer"
603
609
version = "0.0.1"
604
610
source = "registry+https://github.com/rust-lang/crates.io-index"
···
687
693
"nanoid",
688
694
"once_cell",
689
695
"rand",
696
696
+
"roxmltree",
690
697
"rust-analyzer",
691
698
"serde",
692
699
"serde_cbor",
···
48
48
console = { version = "0.15.8", features = ["windows-console-colors"] }
49
49
backtrace = "0.3.71"
50
50
slug = "0.1.5"
51
51
+
roxmltree = "0.19.0"
51
52
52
53
53
54
[dev-dependencies]
···
1
1
+
export RUST_BACKTRACE := "1"
2
2
+
1
3
build:
2
4
cargo build --bin shapemaker
3
5
cp target/debug/shapemaker .
···
18
20
./shapemaker video --colors colorschemes/palenight.css {{out}} --sync-with fixtures/schedule-hell.midi --audio fixtures/schedule-hell.flac --grid-size 16x10 --resolution 1920 {{args}}
19
21
20
22
example-image out="out.png" args='':
21
21
-
./shapemaker image --colors colorschemes/snazzy-light.json --resolution 3000 {{out}} {{args}}
23
23
+
./shapemaker image --colors colorschemes/palenight.css --resolution 3000 {{out}} {{args}}
···
1
1
-
<svg height="470" viewBox="-10 -10 470 470" width="470" xmlns="http://www.w3.org/2000/svg">
2
2
-
<rect fill="#000000" height="470" width="470" x="-10" y="-10"/>
3
3
-
<g class="layer" data-layer="root">
4
4
-
<g data-object="4-6" style="fill: url(#pattern-hatched-bottom-up-white-6.5);">
5
5
-
<circle cx="200" cy="300" r="2"/>
1
1
+
<svg height="470" viewBox="-10 -10 820 470" width="820" xmlns="http://www.w3.org/2000/svg">
2
2
+
<rect fill="#000000" height="470" width="820" x="-10" y="-10"/>
3
3
+
<g class="layer" data-layer="title">
4
4
+
<g data-object="4" style="fill: #ffffff;transform-box: fill-box;">
5
5
+
<text dominant-baseline="middle" font-family="Victor Mono" font-size="30pt" text-anchor="middle" x="475" y="175">
6
6
+
e
7
7
+
</text>
8
8
+
</g>
9
9
+
<g data-object="5" style="fill: #ffffff;transform-box: fill-box;">
10
10
+
<text dominant-baseline="middle" font-family="Victor Mono" font-size="30pt" text-anchor="middle" x="525" y="175">
11
11
+
m
12
12
+
</text>
13
13
+
</g>
14
14
+
<g data-object="6" style="fill: #ffffff;transform-box: fill-box;">
15
15
+
<text dominant-baseline="middle" font-family="Victor Mono" font-size="30pt" text-anchor="middle" x="425" y="225">
16
16
+
a
17
17
+
</text>
18
18
+
</g>
19
19
+
<g data-object="8" style="fill: #ffffff;transform-box: fill-box;">
20
20
+
<text dominant-baseline="middle" font-family="Victor Mono" font-size="30pt" text-anchor="middle" x="525" y="225">
21
21
+
e
22
22
+
</text>
23
23
+
</g>
24
24
+
<g data-object="9" style="fill: #ffffff;transform-box: fill-box;">
25
25
+
<text dominant-baseline="middle" font-family="Victor Mono" font-size="30pt" text-anchor="middle" x="575" y="225">
26
26
+
r
27
27
+
</text>
28
28
+
</g>
29
29
+
<g data-object="3" style="fill: #ffffff;transform-box: fill-box;">
30
30
+
<text dominant-baseline="middle" font-family="Victor Mono" font-size="30pt" text-anchor="middle" x="425" y="175">
31
31
+
p
32
32
+
</text>
33
33
+
</g>
34
34
+
<g data-object="7" style="fill: #ffffff;transform-box: fill-box;">
35
35
+
<text dominant-baseline="middle" font-family="Victor Mono" font-size="30pt" text-anchor="middle" x="475" y="225">
36
36
+
k
37
37
+
</text>
38
38
+
</g>
39
39
+
<g data-object="0" style="fill: #ffffff;transform-box: fill-box;">
40
40
+
<text dominant-baseline="middle" font-family="Victor Mono" font-size="30pt" text-anchor="middle" x="425" y="125">
41
41
+
s
42
42
+
</text>
43
43
+
</g>
44
44
+
<g data-object="1" style="fill: #ffffff;transform-box: fill-box;">
45
45
+
<text dominant-baseline="middle" font-family="Victor Mono" font-size="30pt" text-anchor="middle" x="475" y="125">
46
46
+
h
47
47
+
</text>
48
48
+
</g>
49
49
+
<g data-object="2" style="fill: #ffffff;transform-box: fill-box;">
50
50
+
<text dominant-baseline="middle" font-family="Victor Mono" font-size="30pt" text-anchor="middle" x="525" y="125">
51
51
+
a
52
52
+
</text>
53
53
+
</g>
54
54
+
</g>
55
55
+
<g class="layer" data-layer="splines">
56
56
+
<g data-object="splines#17" style="stroke: #4fecec; fill: transparent;transform-box: fill-box;filter: url(#filter-glow-4); overflow: visible;">
57
57
+
<line stroke-width="2" x1="150" x2="250" y1="250" y2="250"/>
58
58
+
</g>
59
59
+
<g data-object="splines#0" style="stroke: #e92e76; fill: transparent;transform-box: fill-box;filter: url(#filter-glow-4); overflow: visible;">
60
60
+
<line stroke-width="2" x1="250" x2="200" y1="200" y2="200"/>
61
61
+
</g>
62
62
+
<g data-object="splines#23" style="stroke: #4fecec; fill: transparent;transform-box: fill-box;filter: url(#filter-glow-4); overflow: visible;">
63
63
+
<path d="M250,300 Q250,350,200,350"/>
64
64
+
</g>
65
65
+
<g data-object="splines#2" style="stroke: #e92e76; fill: transparent;transform-box: fill-box;filter: url(#filter-glow-4); overflow: visible;">
66
66
+
<line stroke-width="2" x1="200" x2="250" y1="300" y2="300"/>
67
67
+
</g>
68
68
+
<g data-object="splines#29" style="stroke: #4fecec; fill: transparent;transform-box: fill-box;filter: url(#filter-glow-4); overflow: visible;">
69
69
+
<path d="M150,300 Q200,300,200,350"/>
70
70
+
</g>
71
71
+
<g data-object="splines#13" style="stroke: #e92e76; fill: transparent;transform-box: fill-box;filter: url(#filter-glow-4); overflow: visible;">
72
72
+
<path d="M150,300 Q150,200,250,200"/>
73
73
+
</g>
74
74
+
<g data-object="splines#3" style="stroke: #4fecec; fill: transparent;transform-box: fill-box;filter: url(#filter-glow-4); overflow: visible;">
75
75
+
<path d="M200,200 Q200,250,150,250"/>
76
76
+
</g>
77
77
+
<g data-object="splines#15" style="stroke: #e92e76; fill: transparent;transform-box: fill-box;filter: url(#filter-glow-4); overflow: visible;">
78
78
+
<path d="M150,300 Q200,300,200,350"/>
79
79
+
</g>
80
80
+
<g data-object="splines#1" style="stroke: #4fecec; fill: transparent;transform-box: fill-box;filter: url(#filter-glow-4); overflow: visible;">
81
81
+
<path d="M250,200 Q250,250,300,250"/>
82
82
+
</g>
83
83
+
<g data-object="splines#8" style="stroke: #e92e76; fill: transparent;transform-box: fill-box;filter: url(#filter-glow-4); overflow: visible;">
84
84
+
<line stroke-width="2" x1="150" x2="200" y1="250" y2="200"/>
85
85
+
</g>
86
86
+
<g data-object="splines#22" style="stroke: #4fecec; fill: transparent;transform-box: fill-box;filter: url(#filter-glow-4); overflow: visible;">
87
87
+
<line stroke-width="2" x1="150" x2="250" y1="250" y2="250"/>
88
88
+
</g>
89
89
+
<g data-object="splines#4" style="stroke: #e92e76; fill: transparent;transform-box: fill-box;filter: url(#filter-glow-4); overflow: visible;">
90
90
+
<path d="M200,300 Q300,300,300,200"/>
91
91
+
</g>
92
92
+
<g data-object="splines#9" style="stroke: #4fecec; fill: transparent;transform-box: fill-box;filter: url(#filter-glow-4); overflow: visible;">
93
93
+
<line stroke-width="2" x1="150" x2="200" y1="300" y2="200"/>
94
94
+
</g>
95
95
+
<g data-object="splines#14" style="stroke: #e92e76; fill: transparent;transform-box: fill-box;filter: url(#filter-glow-4); overflow: visible;">
96
96
+
<path d="M250,250 Q250,300,200,300"/>
97
97
+
</g>
98
98
+
<g data-object="splines#7" style="stroke: #4fecec; fill: transparent;transform-box: fill-box;filter: url(#filter-glow-4); overflow: visible;">
99
99
+
<path d="M250,250 Q200,250,200,300"/>
100
100
+
</g>
101
101
+
<g data-object="splines#27" style="stroke: #e92e76; fill: transparent;transform-box: fill-box;filter: url(#filter-glow-4); overflow: visible;">
102
102
+
<path d="M250,250 Q200,250,200,200"/>
103
103
+
</g>
104
104
+
<g data-object="splines#11" style="stroke: #4fecec; fill: transparent;transform-box: fill-box;filter: url(#filter-glow-4); overflow: visible;">
105
105
+
<path d="M150,200 Q300,200,300,350"/>
106
106
+
</g>
107
107
+
<g data-object="splines#21" style="stroke: #e92e76; fill: transparent;transform-box: fill-box;filter: url(#filter-glow-4); overflow: visible;">
108
108
+
<line stroke-width="2" x1="250" x2="200" y1="200" y2="300"/>
109
109
+
</g>
110
110
+
<g data-object="splines#25" style="stroke: #4fecec; fill: transparent;transform-box: fill-box;filter: url(#filter-glow-4); overflow: visible;">
111
111
+
<path d="M200,200 Q200,250,150,250"/>
112
112
+
</g>
113
113
+
<g data-object="splines#16" style="stroke: #e92e76; fill: transparent;transform-box: fill-box;filter: url(#filter-glow-4); overflow: visible;">
114
114
+
<path d="M200,200 Q250,200,250,250"/>
115
115
+
</g>
116
116
+
<g data-object="splines#20" style="stroke: #4fecec; fill: transparent;transform-box: fill-box;filter: url(#filter-glow-4); overflow: visible;">
117
117
+
<line stroke-width="2" x1="150" x2="200" y1="300" y2="250"/>
118
118
+
</g>
119
119
+
<g data-object="splines#5" style="stroke: #e92e76; fill: transparent;transform-box: fill-box;filter: url(#filter-glow-4); overflow: visible;">
120
120
+
<path d="M200,200 Q200,300,300,300"/>
121
121
+
</g>
122
122
+
<g data-object="splines#12" style="stroke: #4fecec; fill: transparent;transform-box: fill-box;filter: url(#filter-glow-4); overflow: visible;">
123
123
+
<path d="M150,300 Q150,250,200,250"/>
124
124
+
</g>
125
125
+
<g data-object="splines#10" style="stroke: #e92e76; fill: transparent;transform-box: fill-box;filter: url(#filter-glow-4); overflow: visible;">
126
126
+
<path d="M150,250 Q250,250,250,350"/>
127
127
+
</g>
128
128
+
<g data-object="splines#18" style="stroke: #4fecec; fill: transparent;transform-box: fill-box;filter: url(#filter-glow-4); overflow: visible;">
129
129
+
<path d="M200,200 Q250,200,250,250"/>
130
130
+
</g>
131
131
+
<g data-object="splines#19" style="stroke: #e92e76; fill: transparent;transform-box: fill-box;filter: url(#filter-glow-4); overflow: visible;">
132
132
+
<path d="M150,250 Q200,250,200,200"/>
133
133
+
</g>
134
134
+
<g data-object="splines#24" style="stroke: #4fecec; fill: transparent;transform-box: fill-box;filter: url(#filter-glow-4); overflow: visible;">
135
135
+
<path d="M250,200 Q200,200,200,250"/>
136
136
+
</g>
137
137
+
<g data-object="splines#28" style="stroke: #e92e76; fill: transparent;transform-box: fill-box;filter: url(#filter-glow-4); overflow: visible;">
138
138
+
<path d="M250,300 Q250,350,200,350"/>
139
139
+
</g>
140
140
+
<g data-object="splines#26" style="stroke: #4fecec; fill: transparent;transform-box: fill-box;filter: url(#filter-glow-4); overflow: visible;">
141
141
+
<path d="M250,300 Q200,300,200,250"/>
142
142
+
</g>
143
143
+
<g data-object="splines#6" style="stroke: #e92e76; fill: transparent;transform-box: fill-box;filter: url(#filter-glow-4); overflow: visible;">
144
144
+
<line stroke-width="2" x1="150" x2="150" y1="200" y2="300"/>
145
145
+
</g>
146
146
+
</g>
147
147
+
<g class="layer" data-layer="red dot">
148
148
+
<g data-object="red circle @ (10, 1)" style="fill: #cf0a2b;transform-box: fill-box;filter: url(#filter-glow-5); overflow: visible;">
149
149
+
<circle cx="525" cy="75" r="25"/>
150
150
+
</g>
151
151
+
</g>
152
152
+
<g class="layer" data-layer="hatches">
153
153
+
<g data-object="(11, 3)" style="fill: url(#pattern-hatched-299.32755deg-white-4.3-0.25);transform-box: fill-box;">
154
154
+
<circle cx="575" cy="175" r="25"/>
6
155
</g>
7
7
-
<g data-object="4-5" style="fill: url(#pattern-hatched-bottom-up-white-5.5);">
8
8
-
<circle cx="200" cy="250" r="2"/>
156
156
+
<g data-object="(13, 3)" style="fill: url(#pattern-hatched-211.33258deg-white-4.5-0.25);transform-box: fill-box;">
157
157
+
<rect height="50" width="50" x="650" y="150"/>
9
158
</g>
10
10
-
<g data-object="2-0" style="fill: url(#pattern-hatched-bottom-up-white-0.3);">
11
11
-
<circle cx="100" cy="0" r="2"/>
159
159
+
<g data-object="(12, 3)" style="fill: url(#pattern-hatched-27.08044deg-white-4.4-0.25);transform-box: fill-box;">
160
160
+
<circle cx="625" cy="175" r="25"/>
12
161
</g>
13
13
-
<g data-object="5-4" style="fill: url(#pattern-hatched-bottom-up-white-4.6);">
14
14
-
<circle cx="250" cy="200" r="2"/>
162
162
+
<g data-object="(14, 4)" style="fill: url(#pattern-hatched-282.0688deg-white-6-0.25);transform-box: fill-box;">
163
163
+
<rect height="50" width="50" x="700" y="200"/>
15
164
</g>
16
16
-
<g data-object="5-1" style="fill: url(#pattern-hatched-bottom-up-white-1.6);">
17
17
-
<circle cx="250" cy="50" r="2"/>
165
165
+
<g data-object="(14, 5)" style="fill: url(#pattern-hatched-33.544266deg-white-7.4-0.25);transform-box: fill-box;">
166
166
+
<rect height="50" width="50" x="700" y="250"/>
167
167
+
</g>
168
168
+
<g data-object="(13, 4)" style="fill: url(#pattern-hatched-215.58922deg-white-5.9-0.25);transform-box: fill-box;">
169
169
+
<circle cx="675" cy="225" r="25"/>
18
170
</g>
19
19
-
<g data-object="6-1" style="fill: url(#pattern-hatched-bottom-up-white-1.7);">
20
20
-
<circle cx="300" cy="50" r="2"/>
171
171
+
<g data-object="(1, 7)" style="fill: url(#pattern-hatched-96.993355deg-white-8.9-0.25);transform-box: fill-box;">
172
172
+
<rect height="50" width="50" x="50" y="350"/>
21
173
</g>
22
22
-
<g data-object="0-5" style="fill: url(#pattern-hatched-bottom-up-white-5.1);">
23
23
-
<circle cx="0" cy="250" r="2"/>
174
174
+
<g data-object="(8, 6)" style="fill: url(#pattern-hatched-107.339775deg-white-8.2-0.25);transform-box: fill-box;">
175
175
+
<circle cx="425" cy="325" r="25"/>
24
176
</g>
25
25
-
<g data-object="8-3" style="fill: url(#pattern-hatched-bottom-up-white-3.9);">
26
26
-
<circle cx="400" cy="150" r="2"/>
177
177
+
<g data-object="(3, 7)" style="fill: url(#pattern-hatched-71.766174deg-white-9.1-0.25);transform-box: fill-box;">
178
178
+
<rect height="50" width="50" x="150" y="350"/>
27
179
</g>
28
28
-
<g data-object="5-6" style="fill: url(#pattern-hatched-bottom-up-white-6.6);">
29
29
-
<circle cx="250" cy="300" r="2"/>
180
180
+
<g data-object="(12, 1)" style="fill: url(#pattern-hatched-186.63586deg-white-1.6-0.25);transform-box: fill-box;">
181
181
+
<rect height="50" width="50" x="600" y="50"/>
30
182
</g>
31
31
-
<g data-object="1-6" style="fill: url(#pattern-hatched-bottom-up-white-6.2);">
32
32
-
<circle cx="50" cy="300" r="2"/>
183
183
+
<g data-object="(6, 6)" style="fill: url(#pattern-hatched-243.80658deg-white-8-0.25);transform-box: fill-box;">
184
184
+
<rect height="50" width="50" x="300" y="300"/>
33
185
</g>
34
34
-
<g data-object="8-2" style="fill: url(#pattern-hatched-bottom-up-white-2.9);">
35
35
-
<circle cx="400" cy="100" r="2"/>
186
186
+
<g data-object="(13, 1)" style="fill: url(#pattern-hatched-253.68701deg-white-1.7-0.25);transform-box: fill-box;">
187
187
+
<circle cx="675" cy="75" r="25"/>
36
188
</g>
37
37
-
<g data-object="0-3" style="fill: url(#pattern-hatched-bottom-up-white-3.1);">
38
38
-
<circle cx="0" cy="150" r="2"/>
189
189
+
<g data-object="(4, 3)" style="fill: url(#pattern-hatched-310.7585deg-white-3.6-0.25);transform-box: fill-box;">
190
190
+
<circle cx="225" cy="175" r="25"/>
39
191
</g>
40
40
-
<g data-object="0-4" style="fill: url(#pattern-hatched-bottom-up-white-4.1);">
41
41
-
<circle cx="0" cy="200" r="2"/>
192
192
+
<g data-object="(5, 3)" style="fill: url(#pattern-hatched-299.28848deg-white-3.7-0.25);transform-box: fill-box;">
193
193
+
<circle cx="275" cy="175" r="25"/>
42
194
</g>
43
43
-
<g data-object="7-2" style="fill: url(#pattern-hatched-bottom-up-white-2.8);">
44
44
-
<circle cx="350" cy="100" r="2"/>
195
195
+
<g data-object="(4, 2)" style="fill: url(#pattern-hatched-233.53273deg-white-2.2-0.25);transform-box: fill-box;">
196
196
+
<circle cx="225" cy="125" r="25"/>
45
197
</g>
46
46
-
<g data-object="1-3" style="fill: url(#pattern-hatched-bottom-up-white-3.2);">
47
47
-
<circle cx="50" cy="150" r="2"/>
198
198
+
<g data-object="(10, 5)" style="fill: url(#pattern-hatched-220.6095deg-white-7-0.25);transform-box: fill-box;">
199
199
+
<circle cx="525" cy="275" r="25"/>
48
200
</g>
49
49
-
<g data-object="3-1" style="fill: url(#pattern-hatched-bottom-up-white-1.4);">
50
50
-
<circle cx="150" cy="50" r="2"/>
201
201
+
<g data-object="(1, 2)" style="fill: url(#pattern-hatched-358.5839deg-white-1.9-0.25);transform-box: fill-box;">
202
202
+
<circle cx="75" cy="125" r="25"/>
51
203
</g>
52
52
-
<g data-object="2-2" style="fill: url(#pattern-hatched-bottom-up-white-2.3);">
53
53
-
<circle cx="100" cy="100" r="2"/>
204
204
+
<g data-object="(7, 4)" style="fill: url(#pattern-hatched-167.84358deg-white-5.3-0.25);transform-box: fill-box;">
205
205
+
<circle cx="375" cy="225" r="25"/>
54
206
</g>
55
55
-
<g data-object="3-3" style="fill: url(#pattern-hatched-bottom-up-white-3.4);">
56
56
-
<circle cx="150" cy="150" r="2"/>
207
207
+
<g data-object="(6, 3)" style="fill: url(#pattern-hatched-278.33463deg-white-3.8-0.25);transform-box: fill-box;">
208
208
+
<rect height="50" width="50" x="300" y="150"/>
57
209
</g>
58
58
-
<g data-object="5-3" style="fill: url(#pattern-hatched-bottom-up-white-3.6);">
59
59
-
<circle cx="250" cy="150" r="2"/>
210
210
+
<g data-object="(6, 2)" style="fill: url(#pattern-hatched-310.2893deg-white-2.4-0.25);transform-box: fill-box;">
211
211
+
<circle cx="325" cy="125" r="25"/>
60
212
</g>
61
61
-
<g data-object="7-3" style="fill: url(#pattern-hatched-bottom-up-white-3.8);">
62
62
-
<circle cx="350" cy="150" r="2"/>
213
213
+
<g data-object="(11, 6)" style="fill: url(#pattern-hatched-15.570846deg-white-8.5-0.25);transform-box: fill-box;">
214
214
+
<rect height="50" width="50" x="550" y="300"/>
63
215
</g>
64
64
-
<g data-object="1-4" style="fill: url(#pattern-hatched-bottom-up-white-4.2);">
65
65
-
<circle cx="50" cy="200" r="2"/>
216
216
+
<g data-object="(2, 7)" style="fill: url(#pattern-hatched-220.13795deg-white-9-0.25);transform-box: fill-box;">
217
217
+
<circle cx="125" cy="375" r="25"/>
66
218
</g>
67
67
-
<g data-object="2-4" style="fill: url(#pattern-hatched-bottom-up-white-4.3);">
68
68
-
<circle cx="100" cy="200" r="2"/>
219
219
+
<g data-object="(13, 5)" style="fill: url(#pattern-hatched-50.404415deg-white-7.3-0.25);transform-box: fill-box;">
220
220
+
<rect height="50" width="50" x="650" y="250"/>
69
221
</g>
70
70
-
<g data-object="0-6" style="fill: url(#pattern-hatched-bottom-up-white-6.1);">
71
71
-
<circle cx="0" cy="300" r="2"/>
222
222
+
<g data-object="(6, 1)" style="fill: url(#pattern-hatched-183.30246deg-white-1-0.25);transform-box: fill-box;">
223
223
+
<circle cx="325" cy="75" r="25"/>
72
224
</g>
73
73
-
<g data-object="1-8" style="fill: url(#pattern-hatched-bottom-up-white-8.2);">
74
74
-
<circle cx="50" cy="400" r="2"/>
225
225
+
<g data-object="(12, 4)" style="fill: url(#pattern-hatched-131.70145deg-white-5.8-0.25);transform-box: fill-box;">
226
226
+
<circle cx="625" cy="225" r="25"/>
75
227
</g>
76
76
-
<g data-object="3-0" style="fill: url(#pattern-hatched-bottom-up-white-0.4);">
77
77
-
<circle cx="150" cy="0" r="2"/>
228
228
+
<g data-object="(4, 7)" style="fill: url(#pattern-hatched-244.81346deg-white-9.2-0.25);transform-box: fill-box;">
229
229
+
<rect height="50" width="50" x="200" y="350"/>
78
230
</g>
79
79
-
<g data-object="4-4" style="fill: url(#pattern-hatched-bottom-up-white-4.5);">
80
80
-
<circle cx="200" cy="200" r="2"/>
231
231
+
<g data-object="(10, 7)" style="fill: url(#pattern-hatched-335.19543deg-white-9.8-0.25);transform-box: fill-box;">
232
232
+
<circle cx="525" cy="375" r="25"/>
81
233
</g>
82
82
-
<g data-object="6-6" style="fill: url(#pattern-hatched-bottom-up-white-6.7);">
83
83
-
<circle cx="300" cy="300" r="2"/>
234
234
+
<g data-object="(2, 4)" style="fill: url(#pattern-hatched-6.4409494deg-white-4.8-0.25);transform-box: fill-box;">
235
235
+
<rect height="50" width="50" x="100" y="200"/>
84
236
</g>
85
85
-
<g data-object="5-2" style="fill: url(#pattern-hatched-bottom-up-white-2.6);">
86
86
-
<circle cx="250" cy="100" r="2"/>
237
237
+
<g data-object="(1, 1)" style="fill: url(#pattern-hatched-218.48544deg-white-0.5-0.25);transform-box: fill-box;">
238
238
+
<rect height="50" width="50" x="50" y="50"/>
87
239
</g>
88
88
-
<g data-object="4-7" style="fill: url(#pattern-hatched-bottom-up-white-7.5);">
89
89
-
<circle cx="200" cy="350" r="2"/>
240
240
+
<g data-object="(6, 5)" style="fill: url(#pattern-hatched-106.67879deg-white-6.6-0.25);transform-box: fill-box;">
241
241
+
<rect height="50" width="50" x="300" y="250"/>
90
242
</g>
91
91
-
<g data-object="7-6" style="fill: url(#pattern-hatched-bottom-up-white-6.8);">
92
92
-
<circle cx="350" cy="300" r="2"/>
243
243
+
<g data-object="(3, 2)" style="fill: url(#pattern-hatched-118.944214deg-white-2.1-0.25);transform-box: fill-box;">
244
244
+
<circle cx="175" cy="125" r="25"/>
93
245
</g>
94
94
-
<g data-object="6-0" style="fill: url(#pattern-hatched-bottom-up-white-0.7);">
95
95
-
<circle cx="300" cy="0" r="2"/>
246
246
+
<g data-object="(2, 5)" style="fill: url(#pattern-hatched-227.94576deg-white-6.2-0.25);transform-box: fill-box;">
247
247
+
<circle cx="125" cy="275" r="25"/>
96
248
</g>
97
97
-
<g data-object="0-2" style="fill: url(#pattern-hatched-bottom-up-white-2.1);">
98
98
-
<circle cx="0" cy="100" r="2"/>
249
249
+
<g data-object="(8, 7)" style="fill: url(#pattern-hatched-299.81985deg-white-9.6-0.25);transform-box: fill-box;">
250
250
+
<circle cx="425" cy="375" r="25"/>
99
251
</g>
100
100
-
<g data-object="0-8" style="fill: url(#pattern-hatched-bottom-up-white-8.1);">
101
101
-
<circle cx="0" cy="400" r="2"/>
252
252
+
<g data-object="(8, 1)" style="fill: url(#pattern-hatched-279.28082deg-white-1.2-0.25);transform-box: fill-box;">
253
253
+
<rect height="50" width="50" x="400" y="50"/>
102
254
</g>
103
103
-
<g data-object="7-5" style="fill: url(#pattern-hatched-bottom-up-white-5.8);">
104
104
-
<circle cx="350" cy="250" r="2"/>
255
255
+
<g data-object="(9, 7)" style="fill: url(#pattern-hatched-75.52045deg-white-9.7-0.25);transform-box: fill-box;">
256
256
+
<circle cx="475" cy="375" r="25"/>
105
257
</g>
106
106
-
<g data-object="8-5" style="fill: url(#pattern-hatched-bottom-up-white-5.9);">
107
107
-
<circle cx="400" cy="250" r="2"/>
258
258
+
<g data-object="(8, 5)" style="fill: url(#pattern-hatched-115.57184deg-white-6.8-0.25);transform-box: fill-box;">
259
259
+
<circle cx="425" cy="275" r="25"/>
108
260
</g>
109
109
-
<g data-object="8-0" style="fill: url(#pattern-hatched-bottom-up-white-0.9);">
110
110
-
<circle cx="400" cy="0" r="2"/>
261
261
+
<g data-object="(3, 1)" style="fill: url(#pattern-hatched-120.974106deg-white-0.7-0.25);transform-box: fill-box;">
262
262
+
<circle cx="175" cy="75" r="25"/>
111
263
</g>
112
112
-
<g data-object="8-1" style="fill: url(#pattern-hatched-bottom-up-white-1.9);">
113
113
-
<circle cx="400" cy="50" r="2"/>
264
264
+
<g data-object="(2, 1)" style="fill: url(#pattern-hatched-159.69516deg-white-0.6-0.25);transform-box: fill-box;">
265
265
+
<rect height="50" width="50" x="100" y="50"/>
114
266
</g>
115
115
-
<g data-object="3-4" style="fill: url(#pattern-hatched-bottom-up-white-4.4);">
116
116
-
<circle cx="150" cy="200" r="2"/>
267
267
+
<g data-object="(11, 1)" style="fill: url(#pattern-hatched-123.144165deg-white-1.5-0.25);transform-box: fill-box;">
268
268
+
<circle cx="575" cy="75" r="25"/>
117
269
</g>
118
118
-
<g data-object="3-7" style="fill: url(#pattern-hatched-bottom-up-white-7.4);">
119
119
-
<circle cx="150" cy="350" r="2"/>
270
270
+
<g data-object="(4, 1)" style="fill: url(#pattern-hatched-220.77296deg-white-0.8-0.25);transform-box: fill-box;">
271
271
+
<circle cx="225" cy="75" r="25"/>
120
272
</g>
121
121
-
<g data-object="7-1" style="fill: url(#pattern-hatched-bottom-up-white-1.8);">
122
122
-
<circle cx="350" cy="50" r="2"/>
273
273
+
<g data-object="(6, 4)" style="fill: url(#pattern-hatched-53.81241deg-white-5.2-0.25);transform-box: fill-box;">
274
274
+
<circle cx="325" cy="225" r="25"/>
123
275
</g>
124
124
-
<g data-object="2-8" style="fill: url(#pattern-hatched-bottom-up-white-8.3);">
125
125
-
<circle cx="100" cy="400" r="2"/>
276
276
+
<g data-object="(5, 7)" style="fill: url(#pattern-hatched-5.1831865deg-white-9.3-0.25);transform-box: fill-box;">
277
277
+
<circle cx="275" cy="375" r="25"/>
126
278
</g>
127
127
-
<g data-object="2-7" style="fill: url(#pattern-hatched-bottom-up-white-7.3);">
128
128
-
<circle cx="100" cy="350" r="2"/>
279
279
+
<g data-object="(9, 1)" style="fill: url(#pattern-hatched-97.158325deg-white-1.3-0.25);transform-box: fill-box;">
280
280
+
<circle cx="475" cy="75" r="25"/>
129
281
</g>
130
130
-
<g data-object="1-2" style="fill: url(#pattern-hatched-bottom-up-white-2.2);">
131
131
-
<circle cx="50" cy="100" r="2"/>
282
282
+
<g data-object="(7, 5)" style="fill: url(#pattern-hatched-188.27026deg-white-6.7-0.25);transform-box: fill-box;">
283
283
+
<circle cx="375" cy="275" r="25"/>
132
284
</g>
133
133
-
<g data-object="4-0" style="fill: url(#pattern-hatched-bottom-up-white-0.5);">
134
134
-
<circle cx="200" cy="0" r="2"/>
285
285
+
<g data-object="(7, 2)" style="fill: url(#pattern-hatched-284.93896deg-white-2.5-0.25);transform-box: fill-box;">
286
286
+
<rect height="50" width="50" x="350" y="100"/>
135
287
</g>
136
136
-
<g data-object="5-0" style="fill: url(#pattern-hatched-bottom-up-white-0.6);">
137
137
-
<circle cx="250" cy="0" r="2"/>
288
288
+
<g data-object="(9, 5)" style="fill: url(#pattern-hatched-150.21457deg-white-6.9-0.25);transform-box: fill-box;">
289
289
+
<circle cx="475" cy="275" r="25"/>
138
290
</g>
139
139
-
<g data-object="8-4" style="fill: url(#pattern-hatched-bottom-up-white-4.9);">
140
140
-
<circle cx="400" cy="200" r="2"/>
291
291
+
<g data-object="(5, 1)" style="fill: url(#pattern-hatched-56.571136deg-white-0.9-0.25);transform-box: fill-box;">
292
292
+
<rect height="50" width="50" x="250" y="50"/>
141
293
</g>
142
142
-
<g data-object="4-1" style="fill: url(#pattern-hatched-bottom-up-white-1.5);">
143
143
-
<circle cx="200" cy="50" r="2"/>
294
294
+
<g data-object="(12, 5)" style="fill: url(#pattern-hatched-26.9968deg-white-7.2-0.25);transform-box: fill-box;">
295
295
+
<circle cx="625" cy="275" r="25"/>
144
296
</g>
145
145
-
<g data-object="6-3" style="fill: url(#pattern-hatched-bottom-up-white-3.7);">
146
146
-
<circle cx="300" cy="150" r="2"/>
297
297
+
<g data-object="(2, 2)" style="fill: url(#pattern-hatched-18.678516deg-white-2-0.25);transform-box: fill-box;">
298
298
+
<rect height="50" width="50" x="100" y="100"/>
147
299
</g>
148
148
-
<g data-object="8-7" style="fill: url(#pattern-hatched-bottom-up-white-7.9);">
149
149
-
<circle cx="400" cy="350" r="2"/>
300
300
+
<g data-object="(14, 2)" style="fill: url(#pattern-hatched-119.76716deg-white-3.2-0.25);transform-box: fill-box;">
301
301
+
<circle cx="725" cy="125" r="25"/>
150
302
</g>
151
151
-
<g data-object="6-5" style="fill: url(#pattern-hatched-bottom-up-white-5.7);">
152
152
-
<circle cx="300" cy="250" r="2"/>
303
303
+
<g data-object="(7, 1)" style="fill: url(#pattern-hatched-52.797806deg-white-1.1-0.25);transform-box: fill-box;">
304
304
+
<rect height="50" width="50" x="350" y="50"/>
153
305
</g>
154
154
-
<g data-object="5-7" style="fill: url(#pattern-hatched-bottom-up-white-7.6);">
155
155
-
<circle cx="250" cy="350" r="2"/>
306
306
+
<g data-object="(2, 3)" style="fill: url(#pattern-hatched-320.13602deg-white-3.4-0.25);transform-box: fill-box;">
307
307
+
<circle cx="125" cy="175" r="25"/>
156
308
</g>
157
157
-
<g data-object="8-6" style="fill: url(#pattern-hatched-bottom-up-white-6.9);">
158
158
-
<circle cx="400" cy="300" r="2"/>
309
309
+
<g data-object="(11, 5)" style="fill: url(#pattern-hatched-184.18352deg-white-7.1-0.25);transform-box: fill-box;">
310
310
+
<rect height="50" width="50" x="550" y="250"/>
159
311
</g>
160
160
-
<g data-object="7-7" style="fill: url(#pattern-hatched-bottom-up-white-7.8);">
161
161
-
<circle cx="350" cy="350" r="2"/>
312
312
+
<g data-object="(1, 6)" style="fill: url(#pattern-hatched-224.83627deg-white-7.5-0.25);transform-box: fill-box;">
313
313
+
<rect height="50" width="50" x="50" y="300"/>
162
314
</g>
163
163
-
<g data-object="3-6" style="fill: url(#pattern-hatched-bottom-up-white-6.4);">
164
164
-
<circle cx="150" cy="300" r="2"/>
315
315
+
<g data-object="(7, 6)" style="fill: url(#pattern-hatched-124.3612deg-white-8.1-0.25);transform-box: fill-box;">
316
316
+
<circle cx="375" cy="325" r="25"/>
165
317
</g>
166
166
-
<g data-object="7-0" style="fill: url(#pattern-hatched-bottom-up-white-0.8);">
167
167
-
<circle cx="350" cy="0" r="2"/>
318
318
+
<g data-object="(10, 6)" style="fill: url(#pattern-hatched-297.89606deg-white-8.4-0.25);transform-box: fill-box;">
319
319
+
<circle cx="525" cy="325" r="25"/>
168
320
</g>
169
169
-
<g data-object="0-7" style="fill: url(#pattern-hatched-bottom-up-white-7.1);">
170
170
-
<circle cx="0" cy="350" r="2"/>
321
321
+
<g data-object="(12, 7)" style="fill: url(#pattern-hatched-59.988743deg-white-10-0.25);transform-box: fill-box;">
322
322
+
<circle cx="625" cy="375" r="25"/>
171
323
</g>
172
172
-
<g data-object="5-8" style="fill: url(#pattern-hatched-bottom-up-white-8.6);">
173
173
-
<circle cx="250" cy="400" r="2"/>
324
324
+
<g data-object="(5, 2)" style="fill: url(#pattern-hatched-56.978703deg-white-2.3-0.25);transform-box: fill-box;">
325
325
+
<rect height="50" width="50" x="250" y="100"/>
174
326
</g>
175
175
-
<g data-object="2-1" style="fill: url(#pattern-hatched-bottom-up-white-1.3);">
176
176
-
<circle cx="100" cy="50" r="2"/>
327
327
+
<g data-object="(7, 3)" style="fill: url(#pattern-hatched-216.24454deg-white-3.9-0.25);transform-box: fill-box;">
328
328
+
<rect height="50" width="50" x="350" y="150"/>
177
329
</g>
178
178
-
<g data-object="7-8" style="fill: url(#pattern-hatched-bottom-up-white-8.8);">
179
179
-
<circle cx="350" cy="400" r="2"/>
330
330
+
<g data-object="(7, 7)" style="fill: url(#pattern-hatched-317.81348deg-white-9.5-0.25);transform-box: fill-box;">
331
331
+
<circle cx="375" cy="375" r="25"/>
180
332
</g>
181
181
-
<g data-object="3-5" style="fill: url(#pattern-hatched-bottom-up-white-5.4);">
182
182
-
<circle cx="150" cy="250" r="2"/>
333
333
+
<g data-object="(10, 1)" style="fill: url(#pattern-dotted-white-3-2);transform-box: fill-box;">
334
334
+
<circle cx="525" cy="75" r="25"/>
183
335
</g>
184
184
-
<g data-object="6-2" style="fill: url(#pattern-hatched-bottom-up-white-2.7);">
185
185
-
<circle cx="300" cy="100" r="2"/>
336
336
+
<g data-object="(3, 3)" style="fill: url(#pattern-hatched-274.77606deg-white-3.5-0.25);transform-box: fill-box;">
337
337
+
<rect height="50" width="50" x="150" y="150"/>
186
338
</g>
187
187
-
<g data-object="6-7" style="fill: url(#pattern-hatched-bottom-up-white-7.7);">
188
188
-
<circle cx="300" cy="350" r="2"/>
339
339
+
<g data-object="(6, 7)" style="fill: url(#pattern-hatched-89.04904deg-white-9.4-0.25);transform-box: fill-box;">
340
340
+
<circle cx="325" cy="375" r="25"/>
189
341
</g>
190
190
-
<g data-object="1-1" style="fill: url(#pattern-hatched-bottom-up-white-1.2);">
191
191
-
<circle cx="50" cy="50" r="2"/>
342
342
+
<g data-object="(13, 2)" style="fill: url(#pattern-hatched-48.199726deg-white-3.1-0.25);transform-box: fill-box;">
343
343
+
<rect height="50" width="50" x="650" y="100"/>
192
344
</g>
193
193
-
<g data-object="2-3" style="fill: url(#pattern-hatched-bottom-up-white-3.3);">
194
194
-
<circle cx="100" cy="150" r="2"/>
345
345
+
<g data-object="(13, 7)" style="fill: url(#pattern-hatched-88.31214deg-white-10.1-0.25);transform-box: fill-box;">
346
346
+
<circle cx="675" cy="375" r="25"/>
195
347
</g>
196
196
-
<g data-object="4-8" style="fill: url(#pattern-hatched-bottom-up-white-8.5);">
197
197
-
<circle cx="200" cy="400" r="2"/>
348
348
+
<g data-object="(12, 2)" style="fill: url(#pattern-hatched-289.82617deg-white-3-0.25);transform-box: fill-box;">
349
349
+
<circle cx="625" cy="125" r="25"/>
198
350
</g>
199
199
-
<g data-object="2-6" style="fill: url(#pattern-hatched-bottom-up-white-6.3);">
200
200
-
<circle cx="100" cy="300" r="2"/>
351
351
+
<g data-object="(11, 2)" style="fill: url(#pattern-hatched-324.32974deg-white-2.9-0.25);transform-box: fill-box;">
352
352
+
<circle cx="575" cy="125" r="25"/>
201
353
</g>
202
202
-
<g data-object="1-7" style="fill: url(#pattern-hatched-bottom-up-white-7.2);">
203
203
-
<circle cx="50" cy="350" r="2"/>
354
354
+
<g data-object="(12, 6)" style="fill: url(#pattern-hatched-162.45045deg-white-8.6-0.25);transform-box: fill-box;">
355
355
+
<circle cx="625" cy="325" r="25"/>
204
356
</g>
205
205
-
<g data-object="4-2" style="fill: url(#pattern-hatched-bottom-up-white-2.5);">
206
206
-
<circle cx="200" cy="100" r="2"/>
357
357
+
<g data-object="(2, 6)" style="fill: url(#pattern-hatched-113.16188deg-white-7.6-0.25);transform-box: fill-box;">
358
358
+
<rect height="50" width="50" x="100" y="300"/>
207
359
</g>
208
208
-
<g data-object="7-4" style="fill: url(#pattern-hatched-bottom-up-white-4.8);">
209
209
-
<circle cx="350" cy="200" r="2"/>
360
360
+
<g data-object="(1, 3)" style="fill: url(#pattern-hatched-139.60207deg-white-3.3-0.25);transform-box: fill-box;">
361
361
+
<circle cx="75" cy="175" r="25"/>
210
362
</g>
211
211
-
<g data-object="6-8" style="fill: url(#pattern-hatched-bottom-up-white-8.7);">
212
212
-
<circle cx="300" cy="400" r="2"/>
363
363
+
<g data-object="(9, 6)" style="fill: url(#pattern-hatched-183.72543deg-white-8.3-0.25);transform-box: fill-box;">
364
364
+
<rect height="50" width="50" x="450" y="300"/>
213
365
</g>
214
214
-
<g data-object="6-4" style="fill: url(#pattern-hatched-bottom-up-white-4.7);">
215
215
-
<circle cx="300" cy="200" r="2"/>
366
366
+
<g data-object="(14, 1)" style="fill: url(#pattern-hatched-104.70095deg-white-1.8-0.25);transform-box: fill-box;">
367
367
+
<rect height="50" width="50" x="700" y="50"/>
216
368
</g>
217
217
-
<g data-object="1-0" style="fill: url(#pattern-hatched-bottom-up-white-0.2);">
218
218
-
<circle cx="50" cy="0" r="2"/>
369
369
+
<g data-object="(1, 5)" style="fill: url(#pattern-hatched-17.959814deg-white-6.1-0.25);transform-box: fill-box;">
370
370
+
<rect height="50" width="50" x="50" y="250"/>
219
371
</g>
220
220
-
<g data-object="0-1" style="fill: url(#pattern-hatched-bottom-up-white-1.1);">
221
221
-
<circle cx="0" cy="50" r="2"/>
372
372
+
<g data-object="(1, 4)" style="fill: url(#pattern-hatched-340.9856deg-white-4.7-0.25);transform-box: fill-box;">
373
373
+
<rect height="50" width="50" x="50" y="200"/>
222
374
</g>
223
223
-
<g data-object="3-2" style="fill: url(#pattern-hatched-bottom-up-white-2.4);">
224
224
-
<circle cx="150" cy="100" r="2"/>
375
375
+
<g data-object="(11, 7)" style="fill: url(#pattern-hatched-345.39377deg-white-9.9-0.25);transform-box: fill-box;">
376
376
+
<rect height="50" width="50" x="550" y="350"/>
225
377
</g>
226
226
-
<g data-object="4-3" style="fill: url(#pattern-hatched-bottom-up-white-3.5);">
227
227
-
<circle cx="200" cy="150" r="2"/>
378
378
+
<g data-object="(14, 3)" style="fill: url(#pattern-hatched-288.15714deg-white-4.6-0.25);transform-box: fill-box;">
379
379
+
<circle cx="725" cy="175" r="25"/>
228
380
</g>
229
229
-
<g data-object="2-5" style="fill: url(#pattern-hatched-bottom-up-white-5.3);">
230
230
-
<circle cx="100" cy="250" r="2"/>
381
381
+
<g data-object="(14, 6)" style="fill: url(#pattern-hatched-1.6552448deg-white-8.8-0.25);transform-box: fill-box;">
382
382
+
<rect height="50" width="50" x="700" y="300"/>
231
383
</g>
232
232
-
<g data-object="1-5" style="fill: url(#pattern-hatched-bottom-up-white-5.2);">
233
233
-
<circle cx="50" cy="250" r="2"/>
384
384
+
<g data-object="(14, 7)" style="fill: url(#pattern-hatched-257.7593deg-white-10.2-0.25);transform-box: fill-box;">
385
385
+
<circle cx="725" cy="375" r="25"/>
234
386
</g>
235
235
-
<g data-object="5-5" style="fill: url(#pattern-hatched-bottom-up-white-5.6);">
236
236
-
<circle cx="250" cy="250" r="2"/>
387
387
+
<g data-object="(13, 6)" style="fill: url(#pattern-hatched-173.94572deg-white-8.7-0.25);transform-box: fill-box;">
388
388
+
<circle cx="675" cy="325" r="25"/>
237
389
</g>
238
238
-
<g data-object="3-8" style="fill: url(#pattern-hatched-bottom-up-white-8.4);">
239
239
-
<circle cx="150" cy="400" r="2"/>
240
390
</g>
241
241
-
<g data-object="0-0" style="fill: url(#pattern-hatched-bottom-up-white-0.1);">
242
242
-
<circle cx="0" cy="0" r="2"/>
391
391
+
<g class="layer" data-layer="red dot friends">
392
392
+
<g data-object="reddot @ (11, 2)" style="fill: #cf0a2b;transform-box: fill-box;">
393
393
+
<circle cx="550" cy="100" r="5"/>
243
394
</g>
244
244
-
<g data-object="8-8" style="fill: url(#pattern-hatched-bottom-up-white-8.9);">
245
245
-
<circle cx="400" cy="400" r="2"/>
395
395
+
<g data-object="reddot @ (10, 1)" style="fill: #cf0a2b;transform-box: fill-box;">
396
396
+
<circle cx="500" cy="50" r="5"/>
397
397
+
</g>
398
398
+
<g data-object="reddot @ (11, 1)" style="fill: #cf0a2b;transform-box: fill-box;">
399
399
+
<circle cx="550" cy="50" r="5"/>
400
400
+
</g>
401
401
+
<g data-object="line" style="stroke: #4fecec; fill: transparent;transform-box: fill-box;filter: url(#filter-glow-4); overflow: visible;">
402
402
+
<line stroke-width="4" x1="750" x2="550" y1="200" y2="400"/>
246
403
</g>
247
404
</g>
248
405
<g class="layer" data-layer="root"/>
249
406
<defs>
250
250
-
<pattern height="13" id="pattern-hatched-bottom-up-white-6.5" patternUnits="userSpaceOnUse" viewBox="0,0,6.5,6.5" width="13">
251
251
-
<polygon fill="#ffffff" points="0,0 1.625,0 0,1.625"/>
252
252
-
<polygon fill="#ffffff" points="0,6.5 6.5,0 6.5,1.625 1.625,6.5"/>
407
407
+
<filter filterUnit="userSpaceOnUse" id="filter-glow-4">
408
408
+
<feGaussianBlur result="coloredBlur" stdDeviation="4"/>
409
409
+
<feMerge>
410
410
+
<feMergeNode in="coloredBlur"/>
411
411
+
<feMergeNode in="SourceGraphic"/>
412
412
+
</feMerge>
413
413
+
</filter>
414
414
+
<filter filterUnit="userSpaceOnUse" id="filter-glow-5">
415
415
+
<feGaussianBlur result="coloredBlur" stdDeviation="5"/>
416
416
+
<feMerge>
417
417
+
<feMergeNode in="coloredBlur"/>
418
418
+
<feMergeNode in="SourceGraphic"/>
419
419
+
</feMerge>
420
420
+
</filter>
421
421
+
<pattern height="8.6" id="pattern-hatched-299.32755deg-white-4.3-0.25" patternTransform="rotate(254.32755)" patternUnits="userSpaceOnUse" viewBox="0,0,4.3,4.3" width="8.6">
422
422
+
<polygon fill="#ffffff" points="0,0 1.075,0 0,1.075"/>
423
423
+
<polygon fill="#ffffff" points="0,4.3 4.3,0 4.3,1.075 1.075,4.3"/>
424
424
+
</pattern>
425
425
+
<pattern height="9" id="pattern-hatched-211.33258deg-white-4.5-0.25" patternTransform="rotate(166.33258)" patternUnits="userSpaceOnUse" viewBox="0,0,4.5,4.5" width="9">
426
426
+
<polygon fill="#ffffff" points="0,0 1.125,0 0,1.125"/>
427
427
+
<polygon fill="#ffffff" points="0,4.5 4.5,0 4.5,1.125 1.125,4.5"/>
428
428
+
</pattern>
429
429
+
<pattern height="8.8" id="pattern-hatched-27.08044deg-white-4.4-0.25" patternTransform="rotate(-17.91956)" patternUnits="userSpaceOnUse" viewBox="0,0,4.4,4.4" width="8.8">
430
430
+
<polygon fill="#ffffff" points="0,0 1.1,0 0,1.1"/>
431
431
+
<polygon fill="#ffffff" points="0,4.4 4.4,0 4.4,1.1 1.1,4.4"/>
432
432
+
</pattern>
433
433
+
<pattern height="12" id="pattern-hatched-282.0688deg-white-6-0.25" patternTransform="rotate(237.06879)" patternUnits="userSpaceOnUse" viewBox="0,0,6,6" width="12">
434
434
+
<polygon fill="#ffffff" points="0,0 1.5,0 0,1.5"/>
435
435
+
<polygon fill="#ffffff" points="0,6 6,0 6,1.5 1.5,6"/>
253
436
</pattern>
254
254
-
<pattern height="11" id="pattern-hatched-bottom-up-white-5.5" patternUnits="userSpaceOnUse" viewBox="0,0,5.5,5.5" width="11">
255
255
-
<polygon fill="#ffffff" points="0,0 1.375,0 0,1.375"/>
256
256
-
<polygon fill="#ffffff" points="0,5.5 5.5,0 5.5,1.375 1.375,5.5"/>
437
437
+
<pattern height="14.8" id="pattern-hatched-33.544266deg-white-7.4-0.25" patternTransform="rotate(-11.455734)" patternUnits="userSpaceOnUse" viewBox="0,0,7.4,7.4" width="14.8">
438
438
+
<polygon fill="#ffffff" points="0,0 1.85,0 0,1.85"/>
439
439
+
<polygon fill="#ffffff" points="0,7.4 7.4,0 7.4,1.85 1.85,7.4"/>
257
440
</pattern>
258
258
-
<pattern height="0.6" id="pattern-hatched-bottom-up-white-0.3" patternUnits="userSpaceOnUse" viewBox="0,0,0.3,0.3" width="0.6">
259
259
-
<polygon fill="#ffffff" points="0,0 0.075,0 0,0.075"/>
260
260
-
<polygon fill="#ffffff" points="0,0.3 0.3,0 0.3,0.075 0.075,0.3"/>
441
441
+
<pattern height="11.8" id="pattern-hatched-215.58922deg-white-5.9-0.25" patternTransform="rotate(170.58922)" patternUnits="userSpaceOnUse" viewBox="0,0,5.9,5.9" width="11.8">
442
442
+
<polygon fill="#ffffff" points="0,0 1.475,0 0,1.475"/>
443
443
+
<polygon fill="#ffffff" points="0,5.9 5.9,0 5.9,1.475 1.475,5.9"/>
261
444
</pattern>
262
262
-
<pattern height="9.2" id="pattern-hatched-bottom-up-white-4.6" patternUnits="userSpaceOnUse" viewBox="0,0,4.6,4.6" width="9.2">
263
263
-
<polygon fill="#ffffff" points="0,0 1.15,0 0,1.15"/>
264
264
-
<polygon fill="#ffffff" points="0,4.6 4.6,0 4.6,1.15 1.15,4.6"/>
445
445
+
<pattern height="17.8" id="pattern-hatched-96.993355deg-white-8.9-0.25" patternTransform="rotate(51.993355)" patternUnits="userSpaceOnUse" viewBox="0,0,8.9,8.9" width="17.8">
446
446
+
<polygon fill="#ffffff" points="0,0 2.225,0 0,2.225"/>
447
447
+
<polygon fill="#ffffff" points="0,8.9 8.9,0 8.9,2.225 2.225,8.9"/>
448
448
+
</pattern>
449
449
+
<pattern height="16.4" id="pattern-hatched-107.339775deg-white-8.2-0.25" patternTransform="rotate(62.339775)" patternUnits="userSpaceOnUse" viewBox="0,0,8.2,8.2" width="16.4">
450
450
+
<polygon fill="#ffffff" points="0,0 2.05,0 0,2.05"/>
451
451
+
<polygon fill="#ffffff" points="0,8.2 8.2,0 8.2,2.05 2.05,8.2"/>
452
452
+
</pattern>
453
453
+
<pattern height="18.2" id="pattern-hatched-71.766174deg-white-9.1-0.25" patternTransform="rotate(26.766174)" patternUnits="userSpaceOnUse" viewBox="0,0,9.1,9.1" width="18.2">
454
454
+
<polygon fill="#ffffff" points="0,0 2.275,0 0,2.275"/>
455
455
+
<polygon fill="#ffffff" points="0,9.1 9.1,0 9.1,2.275 2.275,9.1"/>
265
456
</pattern>
266
266
-
<pattern height="3.2" id="pattern-hatched-bottom-up-white-1.6" patternUnits="userSpaceOnUse" viewBox="0,0,1.6,1.6" width="3.2">
457
457
+
<pattern height="3.2" id="pattern-hatched-186.63586deg-white-1.6-0.25" patternTransform="rotate(141.63586)" patternUnits="userSpaceOnUse" viewBox="0,0,1.6,1.6" width="3.2">
267
458
<polygon fill="#ffffff" points="0,0 0.4,0 0,0.4"/>
268
459
<polygon fill="#ffffff" points="0,1.6 1.6,0 1.6,0.4 0.4,1.6"/>
269
460
</pattern>
270
270
-
<pattern height="3.4" id="pattern-hatched-bottom-up-white-1.7" patternUnits="userSpaceOnUse" viewBox="0,0,1.7,1.7" width="3.4">
461
461
+
<pattern height="16" id="pattern-hatched-243.80658deg-white-8-0.25" patternTransform="rotate(198.80658)" patternUnits="userSpaceOnUse" viewBox="0,0,8,8" width="16">
462
462
+
<polygon fill="#ffffff" points="0,0 2,0 0,2"/>
463
463
+
<polygon fill="#ffffff" points="0,8 8,0 8,2 2,8"/>
464
464
+
</pattern>
465
465
+
<pattern height="3.4" id="pattern-hatched-253.68701deg-white-1.7-0.25" patternTransform="rotate(208.68701)" patternUnits="userSpaceOnUse" viewBox="0,0,1.7,1.7" width="3.4">
271
466
<polygon fill="#ffffff" points="0,0 0.425,0 0,0.425"/>
272
467
<polygon fill="#ffffff" points="0,1.7 1.7,0 1.7,0.425 0.425,1.7"/>
273
468
</pattern>
274
274
-
<pattern height="10.2" id="pattern-hatched-bottom-up-white-5.1" patternUnits="userSpaceOnUse" viewBox="0,0,5.1,5.1" width="10.2">
275
275
-
<polygon fill="#ffffff" points="0,0 1.275,0 0,1.275"/>
276
276
-
<polygon fill="#ffffff" points="0,5.1 5.1,0 5.1,1.275 1.275,5.1"/>
469
469
+
<pattern height="7.2" id="pattern-hatched-310.7585deg-white-3.6-0.25" patternTransform="rotate(265.7585)" patternUnits="userSpaceOnUse" viewBox="0,0,3.6,3.6" width="7.2">
470
470
+
<polygon fill="#ffffff" points="0,0 0.9,0 0,0.9"/>
471
471
+
<polygon fill="#ffffff" points="0,3.6 3.6,0 3.6,0.9 0.9,3.6"/>
277
472
</pattern>
278
278
-
<pattern height="7.8" id="pattern-hatched-bottom-up-white-3.9" patternUnits="userSpaceOnUse" viewBox="0,0,3.9,3.9" width="7.8">
279
279
-
<polygon fill="#ffffff" points="0,0 0.975,0 0,0.975"/>
280
280
-
<polygon fill="#ffffff" points="0,3.9 3.9,0 3.9,0.975 0.975,3.9"/>
473
473
+
<pattern height="7.4" id="pattern-hatched-299.28848deg-white-3.7-0.25" patternTransform="rotate(254.28848)" patternUnits="userSpaceOnUse" viewBox="0,0,3.7,3.7" width="7.4">
474
474
+
<polygon fill="#ffffff" points="0,0 0.925,0 0,0.925"/>
475
475
+
<polygon fill="#ffffff" points="0,3.7 3.7,0 3.7,0.925 0.925,3.7"/>
281
476
</pattern>
282
282
-
<pattern height="13.2" id="pattern-hatched-bottom-up-white-6.6" patternUnits="userSpaceOnUse" viewBox="0,0,6.6,6.6" width="13.2">
283
283
-
<polygon fill="#ffffff" points="0,0 1.65,0 0,1.65"/>
284
284
-
<polygon fill="#ffffff" points="0,6.6 6.6,0 6.6,1.65 1.65,6.6"/>
477
477
+
<pattern height="4.4" id="pattern-hatched-233.53273deg-white-2.2-0.25" patternTransform="rotate(188.53273)" patternUnits="userSpaceOnUse" viewBox="0,0,2.2,2.2" width="4.4">
478
478
+
<polygon fill="#ffffff" points="0,0 0.55,0 0,0.55"/>
479
479
+
<polygon fill="#ffffff" points="0,2.2 2.2,0 2.2,0.55 0.55,2.2"/>
285
480
</pattern>
286
286
-
<pattern height="12.4" id="pattern-hatched-bottom-up-white-6.2" patternUnits="userSpaceOnUse" viewBox="0,0,6.2,6.2" width="12.4">
287
287
-
<polygon fill="#ffffff" points="0,0 1.55,0 0,1.55"/>
288
288
-
<polygon fill="#ffffff" points="0,6.2 6.2,0 6.2,1.55 1.55,6.2"/>
481
481
+
<pattern height="14" id="pattern-hatched-220.6095deg-white-7-0.25" patternTransform="rotate(175.6095)" patternUnits="userSpaceOnUse" viewBox="0,0,7,7" width="14">
482
482
+
<polygon fill="#ffffff" points="0,0 1.75,0 0,1.75"/>
483
483
+
<polygon fill="#ffffff" points="0,7 7,0 7,1.75 1.75,7"/>
289
484
</pattern>
290
290
-
<pattern height="5.8" id="pattern-hatched-bottom-up-white-2.9" patternUnits="userSpaceOnUse" viewBox="0,0,2.9,2.9" width="5.8">
291
291
-
<polygon fill="#ffffff" points="0,0 0.725,0 0,0.725"/>
292
292
-
<polygon fill="#ffffff" points="0,2.9 2.9,0 2.9,0.725 0.725,2.9"/>
485
485
+
<pattern height="3.8" id="pattern-hatched-358.5839deg-white-1.9-0.25" patternTransform="rotate(313.5839)" patternUnits="userSpaceOnUse" viewBox="0,0,1.9,1.9" width="3.8">
486
486
+
<polygon fill="#ffffff" points="0,0 0.475,0 0,0.475"/>
487
487
+
<polygon fill="#ffffff" points="0,1.9 1.9,0 1.9,0.475 0.475,1.9"/>
293
488
</pattern>
294
294
-
<pattern height="6.2" id="pattern-hatched-bottom-up-white-3.1" patternUnits="userSpaceOnUse" viewBox="0,0,3.1,3.1" width="6.2">
295
295
-
<polygon fill="#ffffff" points="0,0 0.775,0 0,0.775"/>
296
296
-
<polygon fill="#ffffff" points="0,3.1 3.1,0 3.1,0.775 0.775,3.1"/>
489
489
+
<pattern height="10.6" id="pattern-hatched-167.84358deg-white-5.3-0.25" patternTransform="rotate(122.84358)" patternUnits="userSpaceOnUse" viewBox="0,0,5.3,5.3" width="10.6">
490
490
+
<polygon fill="#ffffff" points="0,0 1.325,0 0,1.325"/>
491
491
+
<polygon fill="#ffffff" points="0,5.3 5.3,0 5.3,1.325 1.325,5.3"/>
297
492
</pattern>
298
298
-
<pattern height="8.2" id="pattern-hatched-bottom-up-white-4.1" patternUnits="userSpaceOnUse" viewBox="0,0,4.1,4.1" width="8.2">
299
299
-
<polygon fill="#ffffff" points="0,0 1.025,0 0,1.025"/>
300
300
-
<polygon fill="#ffffff" points="0,4.1 4.1,0 4.1,1.025 1.025,4.1"/>
493
493
+
<pattern height="7.6" id="pattern-hatched-278.33463deg-white-3.8-0.25" patternTransform="rotate(233.33463)" patternUnits="userSpaceOnUse" viewBox="0,0,3.8,3.8" width="7.6">
494
494
+
<polygon fill="#ffffff" points="0,0 0.95,0 0,0.95"/>
495
495
+
<polygon fill="#ffffff" points="0,3.8 3.8,0 3.8,0.95 0.95,3.8"/>
301
496
</pattern>
302
302
-
<pattern height="5.6" id="pattern-hatched-bottom-up-white-2.8" patternUnits="userSpaceOnUse" viewBox="0,0,2.8,2.8" width="5.6">
303
303
-
<polygon fill="#ffffff" points="0,0 0.7,0 0,0.7"/>
304
304
-
<polygon fill="#ffffff" points="0,2.8 2.8,0 2.8,0.7 0.7,2.8"/>
497
497
+
<pattern height="4.8" id="pattern-hatched-310.2893deg-white-2.4-0.25" patternTransform="rotate(265.2893)" patternUnits="userSpaceOnUse" viewBox="0,0,2.4,2.4" width="4.8">
498
498
+
<polygon fill="#ffffff" points="0,0 0.6,0 0,0.6"/>
499
499
+
<polygon fill="#ffffff" points="0,2.4 2.4,0 2.4,0.6 0.6,2.4"/>
305
500
</pattern>
306
306
-
<pattern height="6.4" id="pattern-hatched-bottom-up-white-3.2" patternUnits="userSpaceOnUse" viewBox="0,0,3.2,3.2" width="6.4">
307
307
-
<polygon fill="#ffffff" points="0,0 0.8,0 0,0.8"/>
308
308
-
<polygon fill="#ffffff" points="0,3.2 3.2,0 3.2,0.8 0.8,3.2"/>
501
501
+
<pattern height="17" id="pattern-hatched-15.570846deg-white-8.5-0.25" patternTransform="rotate(-29.429153)" patternUnits="userSpaceOnUse" viewBox="0,0,8.5,8.5" width="17">
502
502
+
<polygon fill="#ffffff" points="0,0 2.125,0 0,2.125"/>
503
503
+
<polygon fill="#ffffff" points="0,8.5 8.5,0 8.5,2.125 2.125,8.5"/>
309
504
</pattern>
310
310
-
<pattern height="2.8" id="pattern-hatched-bottom-up-white-1.4" patternUnits="userSpaceOnUse" viewBox="0,0,1.4,1.4" width="2.8">
311
311
-
<polygon fill="#ffffff" points="0,0 0.35,0 0,0.35"/>
312
312
-
<polygon fill="#ffffff" points="0,1.4 1.4,0 1.4,0.35 0.35,1.4"/>
505
505
+
<pattern height="18" id="pattern-hatched-220.13795deg-white-9-0.25" patternTransform="rotate(175.13795)" patternUnits="userSpaceOnUse" viewBox="0,0,9,9" width="18">
506
506
+
<polygon fill="#ffffff" points="0,0 2.25,0 0,2.25"/>
507
507
+
<polygon fill="#ffffff" points="0,9 9,0 9,2.25 2.25,9"/>
313
508
</pattern>
314
314
-
<pattern height="4.6" id="pattern-hatched-bottom-up-white-2.3" patternUnits="userSpaceOnUse" viewBox="0,0,2.3,2.3" width="4.6">
315
315
-
<polygon fill="#ffffff" points="0,0 0.575,0 0,0.575"/>
316
316
-
<polygon fill="#ffffff" points="0,2.3 2.3,0 2.3,0.575 0.575,2.3"/>
509
509
+
<pattern height="14.6" id="pattern-hatched-50.404415deg-white-7.3-0.25" patternTransform="rotate(5.404415)" patternUnits="userSpaceOnUse" viewBox="0,0,7.3,7.3" width="14.6">
510
510
+
<polygon fill="#ffffff" points="0,0 1.825,0 0,1.825"/>
511
511
+
<polygon fill="#ffffff" points="0,7.3 7.3,0 7.3,1.825 1.825,7.3"/>
317
512
</pattern>
318
318
-
<pattern height="6.8" id="pattern-hatched-bottom-up-white-3.4" patternUnits="userSpaceOnUse" viewBox="0,0,3.4,3.4" width="6.8">
319
319
-
<polygon fill="#ffffff" points="0,0 0.85,0 0,0.85"/>
320
320
-
<polygon fill="#ffffff" points="0,3.4 3.4,0 3.4,0.85 0.85,3.4"/>
513
513
+
<pattern height="2" id="pattern-hatched-183.30246deg-white-1-0.25" patternTransform="rotate(138.30246)" patternUnits="userSpaceOnUse" viewBox="0,0,1,1" width="2">
514
514
+
<polygon fill="#ffffff" points="0,0 0.25,0 0,0.25"/>
515
515
+
<polygon fill="#ffffff" points="0,1 1,0 1,0.25 0.25,1"/>
321
516
</pattern>
322
322
-
<pattern height="7.2" id="pattern-hatched-bottom-up-white-3.6" patternUnits="userSpaceOnUse" viewBox="0,0,3.6,3.6" width="7.2">
323
323
-
<polygon fill="#ffffff" points="0,0 0.9,0 0,0.9"/>
324
324
-
<polygon fill="#ffffff" points="0,3.6 3.6,0 3.6,0.9 0.9,3.6"/>
517
517
+
<pattern height="11.6" id="pattern-hatched-131.70145deg-white-5.8-0.25" patternTransform="rotate(86.70145)" patternUnits="userSpaceOnUse" viewBox="0,0,5.8,5.8" width="11.6">
518
518
+
<polygon fill="#ffffff" points="0,0 1.45,0 0,1.45"/>
519
519
+
<polygon fill="#ffffff" points="0,5.8 5.8,0 5.8,1.45 1.45,5.8"/>
325
520
</pattern>
326
326
-
<pattern height="7.6" id="pattern-hatched-bottom-up-white-3.8" patternUnits="userSpaceOnUse" viewBox="0,0,3.8,3.8" width="7.6">
327
327
-
<polygon fill="#ffffff" points="0,0 0.95,0 0,0.95"/>
328
328
-
<polygon fill="#ffffff" points="0,3.8 3.8,0 3.8,0.95 0.95,3.8"/>
521
521
+
<pattern height="18.4" id="pattern-hatched-244.81346deg-white-9.2-0.25" patternTransform="rotate(199.81346)" patternUnits="userSpaceOnUse" viewBox="0,0,9.2,9.2" width="18.4">
522
522
+
<polygon fill="#ffffff" points="0,0 2.3,0 0,2.3"/>
523
523
+
<polygon fill="#ffffff" points="0,9.2 9.2,0 9.2,2.3 2.3,9.2"/>
329
524
</pattern>
330
330
-
<pattern height="8.4" id="pattern-hatched-bottom-up-white-4.2" patternUnits="userSpaceOnUse" viewBox="0,0,4.2,4.2" width="8.4">
331
331
-
<polygon fill="#ffffff" points="0,0 1.05,0 0,1.05"/>
332
332
-
<polygon fill="#ffffff" points="0,4.2 4.2,0 4.2,1.05 1.05,4.2"/>
525
525
+
<pattern height="19.6" id="pattern-hatched-335.19543deg-white-9.8-0.25" patternTransform="rotate(290.19543)" patternUnits="userSpaceOnUse" viewBox="0,0,9.8,9.8" width="19.6">
526
526
+
<polygon fill="#ffffff" points="0,0 2.45,0 0,2.45"/>
527
527
+
<polygon fill="#ffffff" points="0,9.8 9.8,0 9.8,2.45 2.45,9.8"/>
333
528
</pattern>
334
334
-
<pattern height="8.6" id="pattern-hatched-bottom-up-white-4.3" patternUnits="userSpaceOnUse" viewBox="0,0,4.3,4.3" width="8.6">
335
335
-
<polygon fill="#ffffff" points="0,0 1.075,0 0,1.075"/>
336
336
-
<polygon fill="#ffffff" points="0,4.3 4.3,0 4.3,1.075 1.075,4.3"/>
529
529
+
<pattern height="9.6" id="pattern-hatched-6.4409494deg-white-4.8-0.25" patternTransform="rotate(-38.55905)" patternUnits="userSpaceOnUse" viewBox="0,0,4.8,4.8" width="9.6">
530
530
+
<polygon fill="#ffffff" points="0,0 1.2,0 0,1.2"/>
531
531
+
<polygon fill="#ffffff" points="0,4.8 4.8,0 4.8,1.2 1.2,4.8"/>
337
532
</pattern>
338
338
-
<pattern height="12.2" id="pattern-hatched-bottom-up-white-6.1" patternUnits="userSpaceOnUse" viewBox="0,0,6.1,6.1" width="12.2">
339
339
-
<polygon fill="#ffffff" points="0,0 1.525,0 0,1.525"/>
340
340
-
<polygon fill="#ffffff" points="0,6.1 6.1,0 6.1,1.525 1.525,6.1"/>
533
533
+
<pattern height="1" id="pattern-hatched-218.48544deg-white-0.5-0.25" patternTransform="rotate(173.48544)" patternUnits="userSpaceOnUse" viewBox="0,0,0.5,0.5" width="1">
534
534
+
<polygon fill="#ffffff" points="0,0 0.125,0 0,0.125"/>
535
535
+
<polygon fill="#ffffff" points="0,0.5 0.5,0 0.5,0.125 0.125,0.5"/>
341
536
</pattern>
342
342
-
<pattern height="16.4" id="pattern-hatched-bottom-up-white-8.2" patternUnits="userSpaceOnUse" viewBox="0,0,8.2,8.2" width="16.4">
343
343
-
<polygon fill="#ffffff" points="0,0 2.05,0 0,2.05"/>
344
344
-
<polygon fill="#ffffff" points="0,8.2 8.2,0 8.2,2.05 2.05,8.2"/>
537
537
+
<pattern height="13.2" id="pattern-hatched-106.67879deg-white-6.6-0.25" patternTransform="rotate(61.678787)" patternUnits="userSpaceOnUse" viewBox="0,0,6.6,6.6" width="13.2">
538
538
+
<polygon fill="#ffffff" points="0,0 1.65,0 0,1.65"/>
539
539
+
<polygon fill="#ffffff" points="0,6.6 6.6,0 6.6,1.65 1.65,6.6"/>
345
540
</pattern>
346
346
-
<pattern height="0.8" id="pattern-hatched-bottom-up-white-0.4" patternUnits="userSpaceOnUse" viewBox="0,0,0.4,0.4" width="0.8">
347
347
-
<polygon fill="#ffffff" points="0,0 0.1,0 0,0.1"/>
348
348
-
<polygon fill="#ffffff" points="0,0.4 0.4,0 0.4,0.1 0.1,0.4"/>
541
541
+
<pattern height="4.2" id="pattern-hatched-118.944214deg-white-2.1-0.25" patternTransform="rotate(73.944214)" patternUnits="userSpaceOnUse" viewBox="0,0,2.1,2.1" width="4.2">
542
542
+
<polygon fill="#ffffff" points="0,0 0.525,0 0,0.525"/>
543
543
+
<polygon fill="#ffffff" points="0,2.1 2.1,0 2.1,0.525 0.525,2.1"/>
349
544
</pattern>
350
350
-
<pattern height="9" id="pattern-hatched-bottom-up-white-4.5" patternUnits="userSpaceOnUse" viewBox="0,0,4.5,4.5" width="9">
351
351
-
<polygon fill="#ffffff" points="0,0 1.125,0 0,1.125"/>
352
352
-
<polygon fill="#ffffff" points="0,4.5 4.5,0 4.5,1.125 1.125,4.5"/>
545
545
+
<pattern height="12.4" id="pattern-hatched-227.94576deg-white-6.2-0.25" patternTransform="rotate(182.94576)" patternUnits="userSpaceOnUse" viewBox="0,0,6.2,6.2" width="12.4">
546
546
+
<polygon fill="#ffffff" points="0,0 1.55,0 0,1.55"/>
547
547
+
<polygon fill="#ffffff" points="0,6.2 6.2,0 6.2,1.55 1.55,6.2"/>
353
548
</pattern>
354
354
-
<pattern height="13.4" id="pattern-hatched-bottom-up-white-6.7" patternUnits="userSpaceOnUse" viewBox="0,0,6.7,6.7" width="13.4">
355
355
-
<polygon fill="#ffffff" points="0,0 1.675,0 0,1.675"/>
356
356
-
<polygon fill="#ffffff" points="0,6.7 6.7,0 6.7,1.675 1.675,6.7"/>
549
549
+
<pattern height="19.2" id="pattern-hatched-299.81985deg-white-9.6-0.25" patternTransform="rotate(254.81985)" patternUnits="userSpaceOnUse" viewBox="0,0,9.6,9.6" width="19.2">
550
550
+
<polygon fill="#ffffff" points="0,0 2.4,0 0,2.4"/>
551
551
+
<polygon fill="#ffffff" points="0,9.6 9.6,0 9.6,2.4 2.4,9.6"/>
357
552
</pattern>
358
358
-
<pattern height="5.2" id="pattern-hatched-bottom-up-white-2.6" patternUnits="userSpaceOnUse" viewBox="0,0,2.6,2.6" width="5.2">
359
359
-
<polygon fill="#ffffff" points="0,0 0.65,0 0,0.65"/>
360
360
-
<polygon fill="#ffffff" points="0,2.6 2.6,0 2.6,0.65 0.65,2.6"/>
553
553
+
<pattern height="2.4" id="pattern-hatched-279.28082deg-white-1.2-0.25" patternTransform="rotate(234.28082)" patternUnits="userSpaceOnUse" viewBox="0,0,1.2,1.2" width="2.4">
554
554
+
<polygon fill="#ffffff" points="0,0 0.3,0 0,0.3"/>
555
555
+
<polygon fill="#ffffff" points="0,1.2 1.2,0 1.2,0.3 0.3,1.2"/>
361
556
</pattern>
362
362
-
<pattern height="15" id="pattern-hatched-bottom-up-white-7.5" patternUnits="userSpaceOnUse" viewBox="0,0,7.5,7.5" width="15">
363
363
-
<polygon fill="#ffffff" points="0,0 1.875,0 0,1.875"/>
364
364
-
<polygon fill="#ffffff" points="0,7.5 7.5,0 7.5,1.875 1.875,7.5"/>
557
557
+
<pattern height="19.4" id="pattern-hatched-75.52045deg-white-9.7-0.25" patternTransform="rotate(30.520447)" patternUnits="userSpaceOnUse" viewBox="0,0,9.7,9.7" width="19.4">
558
558
+
<polygon fill="#ffffff" points="0,0 2.425,0 0,2.425"/>
559
559
+
<polygon fill="#ffffff" points="0,9.7 9.7,0 9.7,2.425 2.425,9.7"/>
365
560
</pattern>
366
366
-
<pattern height="13.6" id="pattern-hatched-bottom-up-white-6.8" patternUnits="userSpaceOnUse" viewBox="0,0,6.8,6.8" width="13.6">
561
561
+
<pattern height="13.6" id="pattern-hatched-115.57184deg-white-6.8-0.25" patternTransform="rotate(70.57184)" patternUnits="userSpaceOnUse" viewBox="0,0,6.8,6.8" width="13.6">
367
562
<polygon fill="#ffffff" points="0,0 1.7,0 0,1.7"/>
368
563
<polygon fill="#ffffff" points="0,6.8 6.8,0 6.8,1.7 1.7,6.8"/>
369
564
</pattern>
370
370
-
<pattern height="1.4" id="pattern-hatched-bottom-up-white-0.7" patternUnits="userSpaceOnUse" viewBox="0,0,0.7,0.7" width="1.4">
565
565
+
<pattern height="1.4" id="pattern-hatched-120.974106deg-white-0.7-0.25" patternTransform="rotate(75.974106)" patternUnits="userSpaceOnUse" viewBox="0,0,0.7,0.7" width="1.4">
371
566
<polygon fill="#ffffff" points="0,0 0.175,0 0,0.175"/>
372
567
<polygon fill="#ffffff" points="0,0.7 0.7,0 0.7,0.175 0.175,0.7"/>
373
568
</pattern>
374
374
-
<pattern height="4.2" id="pattern-hatched-bottom-up-white-2.1" patternUnits="userSpaceOnUse" viewBox="0,0,2.1,2.1" width="4.2">
375
375
-
<polygon fill="#ffffff" points="0,0 0.525,0 0,0.525"/>
376
376
-
<polygon fill="#ffffff" points="0,2.1 2.1,0 2.1,0.525 0.525,2.1"/>
569
569
+
<pattern height="1.2" id="pattern-hatched-159.69516deg-white-0.6-0.25" patternTransform="rotate(114.69516)" patternUnits="userSpaceOnUse" viewBox="0,0,0.6,0.6" width="1.2">
570
570
+
<polygon fill="#ffffff" points="0,0 0.15,0 0,0.15"/>
571
571
+
<polygon fill="#ffffff" points="0,0.6 0.6,0 0.6,0.15 0.15,0.6"/>
377
572
</pattern>
378
378
-
<pattern height="16.2" id="pattern-hatched-bottom-up-white-8.1" patternUnits="userSpaceOnUse" viewBox="0,0,8.1,8.1" width="16.2">
379
379
-
<polygon fill="#ffffff" points="0,0 2.025,0 0,2.025"/>
380
380
-
<polygon fill="#ffffff" points="0,8.1 8.1,0 8.1,2.025 2.025,8.1"/>
573
573
+
<pattern height="3" id="pattern-hatched-123.144165deg-white-1.5-0.25" patternTransform="rotate(78.144165)" patternUnits="userSpaceOnUse" viewBox="0,0,1.5,1.5" width="3">
574
574
+
<polygon fill="#ffffff" points="0,0 0.375,0 0,0.375"/>
575
575
+
<polygon fill="#ffffff" points="0,1.5 1.5,0 1.5,0.375 0.375,1.5"/>
381
576
</pattern>
382
382
-
<pattern height="11.6" id="pattern-hatched-bottom-up-white-5.8" patternUnits="userSpaceOnUse" viewBox="0,0,5.8,5.8" width="11.6">
383
383
-
<polygon fill="#ffffff" points="0,0 1.45,0 0,1.45"/>
384
384
-
<polygon fill="#ffffff" points="0,5.8 5.8,0 5.8,1.45 1.45,5.8"/>
577
577
+
<pattern height="1.6" id="pattern-hatched-220.77296deg-white-0.8-0.25" patternTransform="rotate(175.77296)" patternUnits="userSpaceOnUse" viewBox="0,0,0.8,0.8" width="1.6">
578
578
+
<polygon fill="#ffffff" points="0,0 0.2,0 0,0.2"/>
579
579
+
<polygon fill="#ffffff" points="0,0.8 0.8,0 0.8,0.2 0.2,0.8"/>
385
580
</pattern>
386
386
-
<pattern height="11.8" id="pattern-hatched-bottom-up-white-5.9" patternUnits="userSpaceOnUse" viewBox="0,0,5.9,5.9" width="11.8">
387
387
-
<polygon fill="#ffffff" points="0,0 1.475,0 0,1.475"/>
388
388
-
<polygon fill="#ffffff" points="0,5.9 5.9,0 5.9,1.475 1.475,5.9"/>
581
581
+
<pattern height="10.4" id="pattern-hatched-53.81241deg-white-5.2-0.25" patternTransform="rotate(8.812408)" patternUnits="userSpaceOnUse" viewBox="0,0,5.2,5.2" width="10.4">
582
582
+
<polygon fill="#ffffff" points="0,0 1.3,0 0,1.3"/>
583
583
+
<polygon fill="#ffffff" points="0,5.2 5.2,0 5.2,1.3 1.3,5.2"/>
389
584
</pattern>
390
390
-
<pattern height="1.8" id="pattern-hatched-bottom-up-white-0.9" patternUnits="userSpaceOnUse" viewBox="0,0,0.9,0.9" width="1.8">
391
391
-
<polygon fill="#ffffff" points="0,0 0.225,0 0,0.225"/>
392
392
-
<polygon fill="#ffffff" points="0,0.9 0.9,0 0.9,0.225 0.225,0.9"/>
585
585
+
<pattern height="18.6" id="pattern-hatched-5.1831865deg-white-9.3-0.25" patternTransform="rotate(-39.816814)" patternUnits="userSpaceOnUse" viewBox="0,0,9.3,9.3" width="18.6">
586
586
+
<polygon fill="#ffffff" points="0,0 2.325,0 0,2.325"/>
587
587
+
<polygon fill="#ffffff" points="0,9.3 9.3,0 9.3,2.325 2.325,9.3"/>
393
588
</pattern>
394
394
-
<pattern height="3.8" id="pattern-hatched-bottom-up-white-1.9" patternUnits="userSpaceOnUse" viewBox="0,0,1.9,1.9" width="3.8">
395
395
-
<polygon fill="#ffffff" points="0,0 0.475,0 0,0.475"/>
396
396
-
<polygon fill="#ffffff" points="0,1.9 1.9,0 1.9,0.475 0.475,1.9"/>
589
589
+
<pattern height="2.6" id="pattern-hatched-97.158325deg-white-1.3-0.25" patternTransform="rotate(52.158325)" patternUnits="userSpaceOnUse" viewBox="0,0,1.3,1.3" width="2.6">
590
590
+
<polygon fill="#ffffff" points="0,0 0.325,0 0,0.325"/>
591
591
+
<polygon fill="#ffffff" points="0,1.3 1.3,0 1.3,0.325 0.325,1.3"/>
397
592
</pattern>
398
398
-
<pattern height="8.8" id="pattern-hatched-bottom-up-white-4.4" patternUnits="userSpaceOnUse" viewBox="0,0,4.4,4.4" width="8.8">
399
399
-
<polygon fill="#ffffff" points="0,0 1.1,0 0,1.1"/>
400
400
-
<polygon fill="#ffffff" points="0,4.4 4.4,0 4.4,1.1 1.1,4.4"/>
593
593
+
<pattern height="13.4" id="pattern-hatched-188.27026deg-white-6.7-0.25" patternTransform="rotate(143.27026)" patternUnits="userSpaceOnUse" viewBox="0,0,6.7,6.7" width="13.4">
594
594
+
<polygon fill="#ffffff" points="0,0 1.675,0 0,1.675"/>
595
595
+
<polygon fill="#ffffff" points="0,6.7 6.7,0 6.7,1.675 1.675,6.7"/>
401
596
</pattern>
402
402
-
<pattern height="14.8" id="pattern-hatched-bottom-up-white-7.4" patternUnits="userSpaceOnUse" viewBox="0,0,7.4,7.4" width="14.8">
403
403
-
<polygon fill="#ffffff" points="0,0 1.85,0 0,1.85"/>
404
404
-
<polygon fill="#ffffff" points="0,7.4 7.4,0 7.4,1.85 1.85,7.4"/>
597
597
+
<pattern height="5" id="pattern-hatched-284.93896deg-white-2.5-0.25" patternTransform="rotate(239.93896)" patternUnits="userSpaceOnUse" viewBox="0,0,2.5,2.5" width="5">
598
598
+
<polygon fill="#ffffff" points="0,0 0.625,0 0,0.625"/>
599
599
+
<polygon fill="#ffffff" points="0,2.5 2.5,0 2.5,0.625 0.625,2.5"/>
405
600
</pattern>
406
406
-
<pattern height="3.6" id="pattern-hatched-bottom-up-white-1.8" patternUnits="userSpaceOnUse" viewBox="0,0,1.8,1.8" width="3.6">
407
407
-
<polygon fill="#ffffff" points="0,0 0.45,0 0,0.45"/>
408
408
-
<polygon fill="#ffffff" points="0,1.8 1.8,0 1.8,0.45 0.45,1.8"/>
601
601
+
<pattern height="13.8" id="pattern-hatched-150.21457deg-white-6.9-0.25" patternTransform="rotate(105.21457)" patternUnits="userSpaceOnUse" viewBox="0,0,6.9,6.9" width="13.8">
602
602
+
<polygon fill="#ffffff" points="0,0 1.725,0 0,1.725"/>
603
603
+
<polygon fill="#ffffff" points="0,6.9 6.9,0 6.9,1.725 1.725,6.9"/>
409
604
</pattern>
410
410
-
<pattern height="16.6" id="pattern-hatched-bottom-up-white-8.3" patternUnits="userSpaceOnUse" viewBox="0,0,8.3,8.3" width="16.6">
411
411
-
<polygon fill="#ffffff" points="0,0 2.075,0 0,2.075"/>
412
412
-
<polygon fill="#ffffff" points="0,8.3 8.3,0 8.3,2.075 2.075,8.3"/>
605
605
+
<pattern height="1.8" id="pattern-hatched-56.571136deg-white-0.9-0.25" patternTransform="rotate(11.571136)" patternUnits="userSpaceOnUse" viewBox="0,0,0.9,0.9" width="1.8">
606
606
+
<polygon fill="#ffffff" points="0,0 0.225,0 0,0.225"/>
607
607
+
<polygon fill="#ffffff" points="0,0.9 0.9,0 0.9,0.225 0.225,0.9"/>
413
608
</pattern>
414
414
-
<pattern height="14.6" id="pattern-hatched-bottom-up-white-7.3" patternUnits="userSpaceOnUse" viewBox="0,0,7.3,7.3" width="14.6">
415
415
-
<polygon fill="#ffffff" points="0,0 1.825,0 0,1.825"/>
416
416
-
<polygon fill="#ffffff" points="0,7.3 7.3,0 7.3,1.825 1.825,7.3"/>
609
609
+
<pattern height="14.4" id="pattern-hatched-26.9968deg-white-7.2-0.25" patternTransform="rotate(-18.0032)" patternUnits="userSpaceOnUse" viewBox="0,0,7.2,7.2" width="14.4">
610
610
+
<polygon fill="#ffffff" points="0,0 1.8,0 0,1.8"/>
611
611
+
<polygon fill="#ffffff" points="0,7.2 7.2,0 7.2,1.8 1.8,7.2"/>
417
612
</pattern>
418
418
-
<pattern height="4.4" id="pattern-hatched-bottom-up-white-2.2" patternUnits="userSpaceOnUse" viewBox="0,0,2.2,2.2" width="4.4">
419
419
-
<polygon fill="#ffffff" points="0,0 0.55,0 0,0.55"/>
420
420
-
<polygon fill="#ffffff" points="0,2.2 2.2,0 2.2,0.55 0.55,2.2"/>
613
613
+
<pattern height="4" id="pattern-hatched-18.678516deg-white-2-0.25" patternTransform="rotate(-26.321484)" patternUnits="userSpaceOnUse" viewBox="0,0,2,2" width="4">
614
614
+
<polygon fill="#ffffff" points="0,0 0.5,0 0,0.5"/>
615
615
+
<polygon fill="#ffffff" points="0,2 2,0 2,0.5 0.5,2"/>
421
616
</pattern>
422
422
-
<pattern height="1" id="pattern-hatched-bottom-up-white-0.5" patternUnits="userSpaceOnUse" viewBox="0,0,0.5,0.5" width="1">
423
423
-
<polygon fill="#ffffff" points="0,0 0.125,0 0,0.125"/>
424
424
-
<polygon fill="#ffffff" points="0,0.5 0.5,0 0.5,0.125 0.125,0.5"/>
617
617
+
<pattern height="6.4" id="pattern-hatched-119.76716deg-white-3.2-0.25" patternTransform="rotate(74.76716)" patternUnits="userSpaceOnUse" viewBox="0,0,3.2,3.2" width="6.4">
618
618
+
<polygon fill="#ffffff" points="0,0 0.8,0 0,0.8"/>
619
619
+
<polygon fill="#ffffff" points="0,3.2 3.2,0 3.2,0.8 0.8,3.2"/>
425
620
</pattern>
426
426
-
<pattern height="1.2" id="pattern-hatched-bottom-up-white-0.6" patternUnits="userSpaceOnUse" viewBox="0,0,0.6,0.6" width="1.2">
427
427
-
<polygon fill="#ffffff" points="0,0 0.15,0 0,0.15"/>
428
428
-
<polygon fill="#ffffff" points="0,0.6 0.6,0 0.6,0.15 0.15,0.6"/>
621
621
+
<pattern height="2.2" id="pattern-hatched-52.797806deg-white-1.1-0.25" patternTransform="rotate(7.797806)" patternUnits="userSpaceOnUse" viewBox="0,0,1.1,1.1" width="2.2">
622
622
+
<polygon fill="#ffffff" points="0,0 0.275,0 0,0.275"/>
623
623
+
<polygon fill="#ffffff" points="0,1.1 1.1,0 1.1,0.275 0.275,1.1"/>
429
624
</pattern>
430
430
-
<pattern height="9.8" id="pattern-hatched-bottom-up-white-4.9" patternUnits="userSpaceOnUse" viewBox="0,0,4.9,4.9" width="9.8">
431
431
-
<polygon fill="#ffffff" points="0,0 1.225,0 0,1.225"/>
432
432
-
<polygon fill="#ffffff" points="0,4.9 4.9,0 4.9,1.225 1.225,4.9"/>
625
625
+
<pattern height="6.8" id="pattern-hatched-320.13602deg-white-3.4-0.25" patternTransform="rotate(275.13602)" patternUnits="userSpaceOnUse" viewBox="0,0,3.4,3.4" width="6.8">
626
626
+
<polygon fill="#ffffff" points="0,0 0.85,0 0,0.85"/>
627
627
+
<polygon fill="#ffffff" points="0,3.4 3.4,0 3.4,0.85 0.85,3.4"/>
433
628
</pattern>
434
434
-
<pattern height="3" id="pattern-hatched-bottom-up-white-1.5" patternUnits="userSpaceOnUse" viewBox="0,0,1.5,1.5" width="3">
435
435
-
<polygon fill="#ffffff" points="0,0 0.375,0 0,0.375"/>
436
436
-
<polygon fill="#ffffff" points="0,1.5 1.5,0 1.5,0.375 0.375,1.5"/>
629
629
+
<pattern height="14.2" id="pattern-hatched-184.18352deg-white-7.1-0.25" patternTransform="rotate(139.18352)" patternUnits="userSpaceOnUse" viewBox="0,0,7.1,7.1" width="14.2">
630
630
+
<polygon fill="#ffffff" points="0,0 1.775,0 0,1.775"/>
631
631
+
<polygon fill="#ffffff" points="0,7.1 7.1,0 7.1,1.775 1.775,7.1"/>
437
632
</pattern>
438
438
-
<pattern height="7.4" id="pattern-hatched-bottom-up-white-3.7" patternUnits="userSpaceOnUse" viewBox="0,0,3.7,3.7" width="7.4">
439
439
-
<polygon fill="#ffffff" points="0,0 0.925,0 0,0.925"/>
440
440
-
<polygon fill="#ffffff" points="0,3.7 3.7,0 3.7,0.925 0.925,3.7"/>
633
633
+
<pattern height="15" id="pattern-hatched-224.83627deg-white-7.5-0.25" patternTransform="rotate(179.83627)" patternUnits="userSpaceOnUse" viewBox="0,0,7.5,7.5" width="15">
634
634
+
<polygon fill="#ffffff" points="0,0 1.875,0 0,1.875"/>
635
635
+
<polygon fill="#ffffff" points="0,7.5 7.5,0 7.5,1.875 1.875,7.5"/>
441
636
</pattern>
442
442
-
<pattern height="15.8" id="pattern-hatched-bottom-up-white-7.9" patternUnits="userSpaceOnUse" viewBox="0,0,7.9,7.9" width="15.8">
443
443
-
<polygon fill="#ffffff" points="0,0 1.975,0 0,1.975"/>
444
444
-
<polygon fill="#ffffff" points="0,7.9 7.9,0 7.9,1.975 1.975,7.9"/>
637
637
+
<pattern height="16.2" id="pattern-hatched-124.3612deg-white-8.1-0.25" patternTransform="rotate(79.3612)" patternUnits="userSpaceOnUse" viewBox="0,0,8.1,8.1" width="16.2">
638
638
+
<polygon fill="#ffffff" points="0,0 2.025,0 0,2.025"/>
639
639
+
<polygon fill="#ffffff" points="0,8.1 8.1,0 8.1,2.025 2.025,8.1"/>
445
640
</pattern>
446
446
-
<pattern height="11.4" id="pattern-hatched-bottom-up-white-5.7" patternUnits="userSpaceOnUse" viewBox="0,0,5.7,5.7" width="11.4">
447
447
-
<polygon fill="#ffffff" points="0,0 1.425,0 0,1.425"/>
448
448
-
<polygon fill="#ffffff" points="0,5.7 5.7,0 5.7,1.425 1.425,5.7"/>
641
641
+
<pattern height="16.8" id="pattern-hatched-297.89606deg-white-8.4-0.25" patternTransform="rotate(252.89606)" patternUnits="userSpaceOnUse" viewBox="0,0,8.4,8.4" width="16.8">
642
642
+
<polygon fill="#ffffff" points="0,0 2.1,0 0,2.1"/>
643
643
+
<polygon fill="#ffffff" points="0,8.4 8.4,0 8.4,2.1 2.1,8.4"/>
449
644
</pattern>
450
450
-
<pattern height="15.2" id="pattern-hatched-bottom-up-white-7.6" patternUnits="userSpaceOnUse" viewBox="0,0,7.6,7.6" width="15.2">
451
451
-
<polygon fill="#ffffff" points="0,0 1.9,0 0,1.9"/>
452
452
-
<polygon fill="#ffffff" points="0,7.6 7.6,0 7.6,1.9 1.9,7.6"/>
645
645
+
<pattern height="20" id="pattern-hatched-59.988743deg-white-10-0.25" patternTransform="rotate(14.988743)" patternUnits="userSpaceOnUse" viewBox="0,0,10,10" width="20">
646
646
+
<polygon fill="#ffffff" points="0,0 2.5,0 0,2.5"/>
647
647
+
<polygon fill="#ffffff" points="0,10 10,0 10,2.5 2.5,10"/>
453
648
</pattern>
454
454
-
<pattern height="13.8" id="pattern-hatched-bottom-up-white-6.9" patternUnits="userSpaceOnUse" viewBox="0,0,6.9,6.9" width="13.8">
455
455
-
<polygon fill="#ffffff" points="0,0 1.725,0 0,1.725"/>
456
456
-
<polygon fill="#ffffff" points="0,6.9 6.9,0 6.9,1.725 1.725,6.9"/>
649
649
+
<pattern height="4.6" id="pattern-hatched-56.978703deg-white-2.3-0.25" patternTransform="rotate(11.978703)" patternUnits="userSpaceOnUse" viewBox="0,0,2.3,2.3" width="4.6">
650
650
+
<polygon fill="#ffffff" points="0,0 0.575,0 0,0.575"/>
651
651
+
<polygon fill="#ffffff" points="0,2.3 2.3,0 2.3,0.575 0.575,2.3"/>
457
652
</pattern>
458
458
-
<pattern height="15.6" id="pattern-hatched-bottom-up-white-7.8" patternUnits="userSpaceOnUse" viewBox="0,0,7.8,7.8" width="15.6">
459
459
-
<polygon fill="#ffffff" points="0,0 1.95,0 0,1.95"/>
460
460
-
<polygon fill="#ffffff" points="0,7.8 7.8,0 7.8,1.95 1.95,7.8"/>
653
653
+
<pattern height="7.8" id="pattern-hatched-216.24454deg-white-3.9-0.25" patternTransform="rotate(171.24454)" patternUnits="userSpaceOnUse" viewBox="0,0,3.9,3.9" width="7.8">
654
654
+
<polygon fill="#ffffff" points="0,0 0.975,0 0,0.975"/>
655
655
+
<polygon fill="#ffffff" points="0,3.9 3.9,0 3.9,0.975 0.975,3.9"/>
461
656
</pattern>
462
462
-
<pattern height="12.8" id="pattern-hatched-bottom-up-white-6.4" patternUnits="userSpaceOnUse" viewBox="0,0,6.4,6.4" width="12.8">
463
463
-
<polygon fill="#ffffff" points="0,0 1.6,0 0,1.6"/>
464
464
-
<polygon fill="#ffffff" points="0,6.4 6.4,0 6.4,1.6 1.6,6.4"/>
657
657
+
<pattern height="19" id="pattern-hatched-317.81348deg-white-9.5-0.25" patternTransform="rotate(272.81348)" patternUnits="userSpaceOnUse" viewBox="0,0,9.5,9.5" width="19">
658
658
+
<polygon fill="#ffffff" points="0,0 2.375,0 0,2.375"/>
659
659
+
<polygon fill="#ffffff" points="0,9.5 9.5,0 9.5,2.375 2.375,9.5"/>
465
660
</pattern>
466
466
-
<pattern height="1.6" id="pattern-hatched-bottom-up-white-0.8" patternUnits="userSpaceOnUse" viewBox="0,0,0.8,0.8" width="1.6">
467
467
-
<polygon fill="#ffffff" points="0,0 0.2,0 0,0.2"/>
468
468
-
<polygon fill="#ffffff" points="0,0.8 0.8,0 0.8,0.2 0.2,0.8"/>
661
661
+
<pattern height="7" id="pattern-dotted-white-3-2" patternUnits="userSpaceOnUse" viewBox="0,0,7,7" width="7">
662
662
+
<circle cx="3.5" cy="3.5" fill="#ffffff" r="1.5"/>
469
663
</pattern>
470
470
-
<pattern height="14.2" id="pattern-hatched-bottom-up-white-7.1" patternUnits="userSpaceOnUse" viewBox="0,0,7.1,7.1" width="14.2">
471
471
-
<polygon fill="#ffffff" points="0,0 1.775,0 0,1.775"/>
472
472
-
<polygon fill="#ffffff" points="0,7.1 7.1,0 7.1,1.775 1.775,7.1"/>
664
664
+
<pattern height="7" id="pattern-hatched-274.77606deg-white-3.5-0.25" patternTransform="rotate(229.77606)" patternUnits="userSpaceOnUse" viewBox="0,0,3.5,3.5" width="7">
665
665
+
<polygon fill="#ffffff" points="0,0 0.875,0 0,0.875"/>
666
666
+
<polygon fill="#ffffff" points="0,3.5 3.5,0 3.5,0.875 0.875,3.5"/>
473
667
</pattern>
474
474
-
<pattern height="17.2" id="pattern-hatched-bottom-up-white-8.6" patternUnits="userSpaceOnUse" viewBox="0,0,8.6,8.6" width="17.2">
475
475
-
<polygon fill="#ffffff" points="0,0 2.15,0 0,2.15"/>
476
476
-
<polygon fill="#ffffff" points="0,8.6 8.6,0 8.6,2.15 2.15,8.6"/>
668
668
+
<pattern height="18.8" id="pattern-hatched-89.04904deg-white-9.4-0.25" patternTransform="rotate(44.04904)" patternUnits="userSpaceOnUse" viewBox="0,0,9.4,9.4" width="18.8">
669
669
+
<polygon fill="#ffffff" points="0,0 2.35,0 0,2.35"/>
670
670
+
<polygon fill="#ffffff" points="0,9.4 9.4,0 9.4,2.35 2.35,9.4"/>
477
671
</pattern>
478
478
-
<pattern height="2.6" id="pattern-hatched-bottom-up-white-1.3" patternUnits="userSpaceOnUse" viewBox="0,0,1.3,1.3" width="2.6">
479
479
-
<polygon fill="#ffffff" points="0,0 0.325,0 0,0.325"/>
480
480
-
<polygon fill="#ffffff" points="0,1.3 1.3,0 1.3,0.325 0.325,1.3"/>
672
672
+
<pattern height="6.2" id="pattern-hatched-48.199726deg-white-3.1-0.25" patternTransform="rotate(3.199726)" patternUnits="userSpaceOnUse" viewBox="0,0,3.1,3.1" width="6.2">
673
673
+
<polygon fill="#ffffff" points="0,0 0.775,0 0,0.775"/>
674
674
+
<polygon fill="#ffffff" points="0,3.1 3.1,0 3.1,0.775 0.775,3.1"/>
481
675
</pattern>
482
482
-
<pattern height="17.6" id="pattern-hatched-bottom-up-white-8.8" patternUnits="userSpaceOnUse" viewBox="0,0,8.8,8.8" width="17.6">
483
483
-
<polygon fill="#ffffff" points="0,0 2.2,0 0,2.2"/>
484
484
-
<polygon fill="#ffffff" points="0,8.8 8.8,0 8.8,2.2 2.2,8.8"/>
676
676
+
<pattern height="20.2" id="pattern-hatched-88.31214deg-white-10.1-0.25" patternTransform="rotate(43.31214)" patternUnits="userSpaceOnUse" viewBox="0,0,10.1,10.1" width="20.2">
677
677
+
<polygon fill="#ffffff" points="0,0 2.525,0 0,2.525"/>
678
678
+
<polygon fill="#ffffff" points="0,10.1 10.1,0 10.1,2.525 2.525,10.1"/>
485
679
</pattern>
486
486
-
<pattern height="10.8" id="pattern-hatched-bottom-up-white-5.4" patternUnits="userSpaceOnUse" viewBox="0,0,5.4,5.4" width="10.8">
487
487
-
<polygon fill="#ffffff" points="0,0 1.35,0 0,1.35"/>
488
488
-
<polygon fill="#ffffff" points="0,5.4 5.4,0 5.4,1.35 1.35,5.4"/>
680
680
+
<pattern height="6" id="pattern-hatched-289.82617deg-white-3-0.25" patternTransform="rotate(244.82617)" patternUnits="userSpaceOnUse" viewBox="0,0,3,3" width="6">
681
681
+
<polygon fill="#ffffff" points="0,0 0.75,0 0,0.75"/>
682
682
+
<polygon fill="#ffffff" points="0,3 3,0 3,0.75 0.75,3"/>
489
683
</pattern>
490
490
-
<pattern height="5.4" id="pattern-hatched-bottom-up-white-2.7" patternUnits="userSpaceOnUse" viewBox="0,0,2.7,2.7" width="5.4">
491
491
-
<polygon fill="#ffffff" points="0,0 0.675,0 0,0.675"/>
492
492
-
<polygon fill="#ffffff" points="0,2.7 2.7,0 2.7,0.675 0.675,2.7"/>
684
684
+
<pattern height="5.8" id="pattern-hatched-324.32974deg-white-2.9-0.25" patternTransform="rotate(279.32974)" patternUnits="userSpaceOnUse" viewBox="0,0,2.9,2.9" width="5.8">
685
685
+
<polygon fill="#ffffff" points="0,0 0.725,0 0,0.725"/>
686
686
+
<polygon fill="#ffffff" points="0,2.9 2.9,0 2.9,0.725 0.725,2.9"/>
493
687
</pattern>
494
494
-
<pattern height="15.4" id="pattern-hatched-bottom-up-white-7.7" patternUnits="userSpaceOnUse" viewBox="0,0,7.7,7.7" width="15.4">
495
495
-
<polygon fill="#ffffff" points="0,0 1.925,0 0,1.925"/>
496
496
-
<polygon fill="#ffffff" points="0,7.7 7.7,0 7.7,1.925 1.925,7.7"/>
688
688
+
<pattern height="17.2" id="pattern-hatched-162.45045deg-white-8.6-0.25" patternTransform="rotate(117.450455)" patternUnits="userSpaceOnUse" viewBox="0,0,8.6,8.6" width="17.2">
689
689
+
<polygon fill="#ffffff" points="0,0 2.15,0 0,2.15"/>
690
690
+
<polygon fill="#ffffff" points="0,8.6 8.6,0 8.6,2.15 2.15,8.6"/>
497
691
</pattern>
498
498
-
<pattern height="2.4" id="pattern-hatched-bottom-up-white-1.2" patternUnits="userSpaceOnUse" viewBox="0,0,1.2,1.2" width="2.4">
499
499
-
<polygon fill="#ffffff" points="0,0 0.3,0 0,0.3"/>
500
500
-
<polygon fill="#ffffff" points="0,1.2 1.2,0 1.2,0.3 0.3,1.2"/>
692
692
+
<pattern height="15.2" id="pattern-hatched-113.16188deg-white-7.6-0.25" patternTransform="rotate(68.16188)" patternUnits="userSpaceOnUse" viewBox="0,0,7.6,7.6" width="15.2">
693
693
+
<polygon fill="#ffffff" points="0,0 1.9,0 0,1.9"/>
694
694
+
<polygon fill="#ffffff" points="0,7.6 7.6,0 7.6,1.9 1.9,7.6"/>
501
695
</pattern>
502
502
-
<pattern height="6.6" id="pattern-hatched-bottom-up-white-3.3" patternUnits="userSpaceOnUse" viewBox="0,0,3.3,3.3" width="6.6">
696
696
+
<pattern height="6.6" id="pattern-hatched-139.60207deg-white-3.3-0.25" patternTransform="rotate(94.602066)" patternUnits="userSpaceOnUse" viewBox="0,0,3.3,3.3" width="6.6">
503
697
<polygon fill="#ffffff" points="0,0 0.825,0 0,0.825"/>
504
698
<polygon fill="#ffffff" points="0,3.3 3.3,0 3.3,0.825 0.825,3.3"/>
505
699
</pattern>
506
506
-
<pattern height="17" id="pattern-hatched-bottom-up-white-8.5" patternUnits="userSpaceOnUse" viewBox="0,0,8.5,8.5" width="17">
507
507
-
<polygon fill="#ffffff" points="0,0 2.125,0 0,2.125"/>
508
508
-
<polygon fill="#ffffff" points="0,8.5 8.5,0 8.5,2.125 2.125,8.5"/>
700
700
+
<pattern height="16.6" id="pattern-hatched-183.72543deg-white-8.3-0.25" patternTransform="rotate(138.72543)" patternUnits="userSpaceOnUse" viewBox="0,0,8.3,8.3" width="16.6">
701
701
+
<polygon fill="#ffffff" points="0,0 2.075,0 0,2.075"/>
702
702
+
<polygon fill="#ffffff" points="0,8.3 8.3,0 8.3,2.075 2.075,8.3"/>
509
703
</pattern>
510
510
-
<pattern height="12.6" id="pattern-hatched-bottom-up-white-6.3" patternUnits="userSpaceOnUse" viewBox="0,0,6.3,6.3" width="12.6">
511
511
-
<polygon fill="#ffffff" points="0,0 1.575,0 0,1.575"/>
512
512
-
<polygon fill="#ffffff" points="0,6.3 6.3,0 6.3,1.575 1.575,6.3"/>
704
704
+
<pattern height="3.6" id="pattern-hatched-104.70095deg-white-1.8-0.25" patternTransform="rotate(59.70095)" patternUnits="userSpaceOnUse" viewBox="0,0,1.8,1.8" width="3.6">
705
705
+
<polygon fill="#ffffff" points="0,0 0.45,0 0,0.45"/>
706
706
+
<polygon fill="#ffffff" points="0,1.8 1.8,0 1.8,0.45 0.45,1.8"/>
513
707
</pattern>
514
514
-
<pattern height="14.4" id="pattern-hatched-bottom-up-white-7.2" patternUnits="userSpaceOnUse" viewBox="0,0,7.2,7.2" width="14.4">
515
515
-
<polygon fill="#ffffff" points="0,0 1.8,0 0,1.8"/>
516
516
-
<polygon fill="#ffffff" points="0,7.2 7.2,0 7.2,1.8 1.8,7.2"/>
708
708
+
<pattern height="12.2" id="pattern-hatched-17.959814deg-white-6.1-0.25" patternTransform="rotate(-27.040186)" patternUnits="userSpaceOnUse" viewBox="0,0,6.1,6.1" width="12.2">
709
709
+
<polygon fill="#ffffff" points="0,0 1.525,0 0,1.525"/>
710
710
+
<polygon fill="#ffffff" points="0,6.1 6.1,0 6.1,1.525 1.525,6.1"/>
517
711
</pattern>
518
518
-
<pattern height="5" id="pattern-hatched-bottom-up-white-2.5" patternUnits="userSpaceOnUse" viewBox="0,0,2.5,2.5" width="5">
519
519
-
<polygon fill="#ffffff" points="0,0 0.625,0 0,0.625"/>
520
520
-
<polygon fill="#ffffff" points="0,2.5 2.5,0 2.5,0.625 0.625,2.5"/>
521
521
-
</pattern>
522
522
-
<pattern height="9.6" id="pattern-hatched-bottom-up-white-4.8" patternUnits="userSpaceOnUse" viewBox="0,0,4.8,4.8" width="9.6">
523
523
-
<polygon fill="#ffffff" points="0,0 1.2,0 0,1.2"/>
524
524
-
<polygon fill="#ffffff" points="0,4.8 4.8,0 4.8,1.2 1.2,4.8"/>
525
525
-
</pattern>
526
526
-
<pattern height="17.4" id="pattern-hatched-bottom-up-white-8.7" patternUnits="userSpaceOnUse" viewBox="0,0,8.7,8.7" width="17.4">
527
527
-
<polygon fill="#ffffff" points="0,0 2.175,0 0,2.175"/>
528
528
-
<polygon fill="#ffffff" points="0,8.7 8.7,0 8.7,2.175 2.175,8.7"/>
529
529
-
</pattern>
530
530
-
<pattern height="9.4" id="pattern-hatched-bottom-up-white-4.7" patternUnits="userSpaceOnUse" viewBox="0,0,4.7,4.7" width="9.4">
712
712
+
<pattern height="9.4" id="pattern-hatched-340.9856deg-white-4.7-0.25" patternTransform="rotate(295.9856)" patternUnits="userSpaceOnUse" viewBox="0,0,4.7,4.7" width="9.4">
531
713
<polygon fill="#ffffff" points="0,0 1.175,0 0,1.175"/>
532
714
<polygon fill="#ffffff" points="0,4.7 4.7,0 4.7,1.175 1.175,4.7"/>
533
715
</pattern>
534
534
-
<pattern height="0.4" id="pattern-hatched-bottom-up-white-0.2" patternUnits="userSpaceOnUse" viewBox="0,0,0.2,0.2" width="0.4">
535
535
-
<polygon fill="#ffffff" points="0,0 0.05,0 0,0.05"/>
536
536
-
<polygon fill="#ffffff" points="0,0.2 0.2,0 0.2,0.05 0.05,0.2"/>
537
537
-
</pattern>
538
538
-
<pattern height="2.2" id="pattern-hatched-bottom-up-white-1.1" patternUnits="userSpaceOnUse" viewBox="0,0,1.1,1.1" width="2.2">
539
539
-
<polygon fill="#ffffff" points="0,0 0.275,0 0,0.275"/>
540
540
-
<polygon fill="#ffffff" points="0,1.1 1.1,0 1.1,0.275 0.275,1.1"/>
541
541
-
</pattern>
542
542
-
<pattern height="4.8" id="pattern-hatched-bottom-up-white-2.4" patternUnits="userSpaceOnUse" viewBox="0,0,2.4,2.4" width="4.8">
543
543
-
<polygon fill="#ffffff" points="0,0 0.6,0 0,0.6"/>
544
544
-
<polygon fill="#ffffff" points="0,2.4 2.4,0 2.4,0.6 0.6,2.4"/>
545
545
-
</pattern>
546
546
-
<pattern height="7" id="pattern-hatched-bottom-up-white-3.5" patternUnits="userSpaceOnUse" viewBox="0,0,3.5,3.5" width="7">
547
547
-
<polygon fill="#ffffff" points="0,0 0.875,0 0,0.875"/>
548
548
-
<polygon fill="#ffffff" points="0,3.5 3.5,0 3.5,0.875 0.875,3.5"/>
549
549
-
</pattern>
550
550
-
<pattern height="10.6" id="pattern-hatched-bottom-up-white-5.3" patternUnits="userSpaceOnUse" viewBox="0,0,5.3,5.3" width="10.6">
551
551
-
<polygon fill="#ffffff" points="0,0 1.325,0 0,1.325"/>
552
552
-
<polygon fill="#ffffff" points="0,5.3 5.3,0 5.3,1.325 1.325,5.3"/>
553
553
-
</pattern>
554
554
-
<pattern height="10.4" id="pattern-hatched-bottom-up-white-5.2" patternUnits="userSpaceOnUse" viewBox="0,0,5.2,5.2" width="10.4">
555
555
-
<polygon fill="#ffffff" points="0,0 1.3,0 0,1.3"/>
556
556
-
<polygon fill="#ffffff" points="0,5.2 5.2,0 5.2,1.3 1.3,5.2"/>
716
716
+
<pattern height="19.8" id="pattern-hatched-345.39377deg-white-9.9-0.25" patternTransform="rotate(300.39377)" patternUnits="userSpaceOnUse" viewBox="0,0,9.9,9.9" width="19.8">
717
717
+
<polygon fill="#ffffff" points="0,0 2.475,0 0,2.475"/>
718
718
+
<polygon fill="#ffffff" points="0,9.9 9.9,0 9.9,2.475 2.475,9.9"/>
557
719
</pattern>
558
558
-
<pattern height="11.2" id="pattern-hatched-bottom-up-white-5.6" patternUnits="userSpaceOnUse" viewBox="0,0,5.6,5.6" width="11.2">
559
559
-
<polygon fill="#ffffff" points="0,0 1.4,0 0,1.4"/>
560
560
-
<polygon fill="#ffffff" points="0,5.6 5.6,0 5.6,1.4 1.4,5.6"/>
720
720
+
<pattern height="9.2" id="pattern-hatched-288.15714deg-white-4.6-0.25" patternTransform="rotate(243.15714)" patternUnits="userSpaceOnUse" viewBox="0,0,4.6,4.6" width="9.2">
721
721
+
<polygon fill="#ffffff" points="0,0 1.15,0 0,1.15"/>
722
722
+
<polygon fill="#ffffff" points="0,4.6 4.6,0 4.6,1.15 1.15,4.6"/>
561
723
</pattern>
562
562
-
<pattern height="16.8" id="pattern-hatched-bottom-up-white-8.4" patternUnits="userSpaceOnUse" viewBox="0,0,8.4,8.4" width="16.8">
563
563
-
<polygon fill="#ffffff" points="0,0 2.1,0 0,2.1"/>
564
564
-
<polygon fill="#ffffff" points="0,8.4 8.4,0 8.4,2.1 2.1,8.4"/>
724
724
+
<pattern height="17.6" id="pattern-hatched-1.6552448deg-white-8.8-0.25" patternTransform="rotate(-43.344757)" patternUnits="userSpaceOnUse" viewBox="0,0,8.8,8.8" width="17.6">
725
725
+
<polygon fill="#ffffff" points="0,0 2.2,0 0,2.2"/>
726
726
+
<polygon fill="#ffffff" points="0,8.8 8.8,0 8.8,2.2 2.2,8.8"/>
565
727
</pattern>
566
566
-
<pattern height="0.2" id="pattern-hatched-bottom-up-white-0.1" patternUnits="userSpaceOnUse" viewBox="0,0,0.1,0.1" width="0.2">
567
567
-
<polygon fill="#ffffff" points="0,0 0.025,0 0,0.025"/>
568
568
-
<polygon fill="#ffffff" points="0,0.1 0.1,0 0.1,0.025 0.025,0.1"/>
728
728
+
<pattern height="20.4" id="pattern-hatched-257.7593deg-white-10.2-0.25" patternTransform="rotate(212.75931)" patternUnits="userSpaceOnUse" viewBox="0,0,10.2,10.2" width="20.4">
729
729
+
<polygon fill="#ffffff" points="0,0 2.55,0 0,2.55"/>
730
730
+
<polygon fill="#ffffff" points="0,10.2 10.2,0 10.2,2.55 2.55,10.2"/>
569
731
</pattern>
570
570
-
<pattern height="17.8" id="pattern-hatched-bottom-up-white-8.9" patternUnits="userSpaceOnUse" viewBox="0,0,8.9,8.9" width="17.8">
571
571
-
<polygon fill="#ffffff" points="0,0 2.225,0 0,2.225"/>
572
572
-
<polygon fill="#ffffff" points="0,8.9 8.9,0 8.9,2.225 2.225,8.9"/>
732
732
+
<pattern height="17.4" id="pattern-hatched-173.94572deg-white-8.7-0.25" patternTransform="rotate(128.94572)" patternUnits="userSpaceOnUse" viewBox="0,0,8.7,8.7" width="17.4">
733
733
+
<polygon fill="#ffffff" points="0,0 2.175,0 0,2.175"/>
734
734
+
<polygon fill="#ffffff" points="0,8.7 8.7,0 8.7,2.175 2.175,8.7"/>
573
735
</pattern>
574
736
</defs>
575
737
</svg>
···
393
393
394
394
pub fn random_fill(&self, hatchable: bool) -> Fill {
395
395
if hatchable {
396
396
-
match rand::thread_rng().gen_range(1..=2) {
397
397
-
1 => Fill::Solid(random_color(self.background)),
398
398
-
2 => {
399
399
-
let hatch_size = rand::thread_rng().gen_range(5..=100) as f32 * 1e-2;
400
400
-
Fill::Hatched(
401
401
-
random_color(self.background),
402
402
-
Angle(rand::thread_rng().gen_range(0.0..360.0)),
403
403
-
hatch_size,
404
404
-
// under a certain hatch size, we can't see the hatching if the ratio is not ½
405
405
-
if hatch_size < 8.0 {
406
406
-
0.5
407
407
-
} else {
408
408
-
rand::thread_rng().gen_range(1..=4) as f32 / 4.0
409
409
-
},
410
410
-
)
411
411
-
}
412
412
-
_ => unreachable!(),
396
396
+
if rand::thread_rng().gen_bool(0.75) {
397
397
+
Fill::Solid(random_color(self.background))
398
398
+
} else {
399
399
+
let hatch_size = rand::thread_rng().gen_range(5..=100) as f32 * 1e-2;
400
400
+
Fill::Hatched(
401
401
+
random_color(self.background),
402
402
+
Angle(rand::thread_rng().gen_range(0.0..360.0)),
403
403
+
hatch_size,
404
404
+
// under a certain hatch size, we can't see the hatching if the ratio is not ½
405
405
+
if hatch_size < 8.0 {
406
406
+
0.5
407
407
+
} else {
408
408
+
rand::thread_rng().gen_range(1..=4) as f32 / 4.0
409
409
+
},
410
410
+
)
413
411
}
414
412
} else {
415
413
Fill::Solid(random_color(self.background))
···
488
486
self.layers
489
487
.iter()
490
488
.flat_map(|layer| layer.objects.iter().flat_map(|(_, o)| o.fill))
491
491
-
.filter(|fill| matches!(fill, Fill::Hatched(..)))
489
489
+
.filter(|fill| matches!(fill, Fill::Hatched(..) | Fill::Dotted(..)))
492
490
.unique_by(|fill| fill.pattern_id())
493
491
.collect()
494
492
}
···
59
59
60
60
hatches_layer.add_object(
61
61
point,
62
62
-
if rand::thread_rng().gen_bool(0.5) {
62
62
+
if rand::thread_rng().gen_bool(0.5) || point == red_circle_at {
63
63
Object::BigCircle(point)
64
64
} else {
65
65
Object::Rectangle(point, point)
66
66
}
67
67
-
.color(Fill::Hatched(
68
68
-
Color::White,
69
69
-
Angle(rand::thread_rng().gen_range(0.0..360.0)),
70
70
-
(i + 5) as f32 / 10.0,
71
71
-
0.25,
72
72
-
)),
67
67
+
.color(
68
68
+
// Fill::Dotted(Color::White, (i + 8) as f32 / 10.0, (i + 3) as f32 / 10.0),
69
69
+
if point == red_circle_at {
70
70
+
Fill::Dotted(Color::White, 3.0, 2.0)
71
71
+
} else {
72
72
+
Fill::Hatched(
73
73
+
Color::White,
74
74
+
Angle(rand::thread_rng().gen_range(0.0..360.0)),
75
75
+
(i + 5) as f32 / 10.0,
76
76
+
0.25,
77
77
+
)
78
78
+
},
79
79
+
),
73
80
);
74
81
}
75
82
···
43
43
Solid(Color),
44
44
Translucent(Color, f32),
45
45
Hatched(Color, Angle, f32, f32),
46
46
-
Dotted(Color, f32),
46
46
+
Dotted(Color, f32, f32),
47
47
}
48
48
49
49
// Operations that can be applied on fills.
···
86
86
Fill::Translucent(color, opacity) => {
87
87
format!("fill: {}; opacity: {};", color.render(colormap), opacity)
88
88
}
89
89
-
Fill::Dotted(..) => unimplemented!(),
90
90
-
Fill::Hatched(..) => {
89
89
+
Fill::Dotted(..) | Fill::Hatched(..) => {
91
90
format!("fill: url(#{});", self.pattern_id())
92
91
}
93
92
}
···
115
114
pub fn pattern_id(&self) -> String {
116
115
if let Fill::Hatched(color, angle, thickness, spacing) = self {
117
116
return format!(
118
118
-
"pattern-{}-{}-{}-{}",
117
117
+
"pattern-hatched-{}-{}-{}-{}",
119
118
angle,
120
119
color.name(),
121
120
thickness,
122
121
spacing
123
122
);
124
123
}
124
124
+
if let Fill::Dotted(color, diameter, spacing) = self {
125
125
+
return format!("pattern-dotted-{}-{}-{}", color.name(), diameter, spacing);
126
126
+
}
125
127
String::from("")
126
128
}
127
129
···
166
168
size,
167
169
),
168
170
)
171
171
+
.set("fill", color.render(colormapping)),
172
172
+
);
173
173
+
174
174
+
Some(pattern)
175
175
+
}
176
176
+
Fill::Dotted(color, diameter, spacing) => {
177
177
+
let box_size = diameter + 2.0 * spacing;
178
178
+
let pattern = svg::node::element::Pattern::new()
179
179
+
.set("id", self.pattern_id())
180
180
+
.set("patternUnits", "userSpaceOnUse")
181
181
+
.set("height", box_size)
182
182
+
.set("width", box_size)
183
183
+
.set("viewBox", format!("0,0,{},{}", box_size, box_size))
184
184
+
.add(
185
185
+
svg::node::element::Circle::new()
186
186
+
.set("cx", box_size / 2.0)
187
187
+
.set("cy", box_size / 2.0)
188
188
+
.set("r", diameter / 2.0)
169
189
.set("fill", color.render(colormapping)),
170
190
);
171
191
···
15
15
pub fn run(args: cli::Args) -> Result<()> {
16
16
let mut canvas = canvas_from_cli(&args);
17
17
18
18
-
let qrname = env::var("QRCODE_NAME").unwrap();
19
19
-
20
18
if args.cmd_image && !args.cmd_video {
21
21
-
canvas.set_grid_size(3, 3);
22
22
-
canvas.add_or_replace_layer(canvas.random_layer("root"));
23
23
-
canvas.new_layer("qr");
24
24
-
let qrcode = Object::Image(
25
25
-
vec![
26
26
-
canvas.world_region.topleft(),
27
27
-
canvas.world_region.topright(),
28
28
-
canvas.world_region.bottomright(),
29
29
-
canvas.world_region.bottomleft(),
30
30
-
][rand::thread_rng().gen_range(0..4)]
31
31
-
.region(),
32
32
-
format!("./{qrname}-qr.png"),
33
33
-
);
34
34
-
canvas.root().remove_all_objects_in(&qrcode.region());
35
35
-
canvas.set_background(Color::White);
36
36
-
canvas.add_object("qr", "qr", qrcode, None).unwrap();
37
37
-
canvas.put_layer_on_top("qr");
38
38
-
canvas.root().objects.values_mut().for_each(|o| {
39
39
-
if !o.object.fillable() {
40
40
-
o.fill = Some(Fill::Solid(Color::Black));
41
41
-
}
42
42
-
});
19
19
+
canvas = examples::title();
43
20
44
21
let rendered = canvas.render(true)?;
45
22
if args.arg_file.ends_with(".svg") {
···
1
1
-
use std::{cell, collections::HashMap};
2
2
-
3
1
use crate::{ColorMapping, Fill, Filter, Point, Region, Transformation};
4
2
use itertools::Itertools;
5
3
use wasm_bindgen::prelude::*;
···
36
34
pub fn filter(self, filter: Filter) -> ColoredObject {
37
35
ColoredObject::from((self, None)).filter(filter)
38
36
}
37
37
+
38
38
+
pub fn transform(self, transformation: Transformation) -> ColoredObject {
39
39
+
ColoredObject::from((self, None)).transform(transformation)
40
40
+
}
39
41
}
40
42
41
43
#[derive(Debug, Clone)]
···
52
54
self
53
55
}
54
56
57
57
+
pub fn transform(mut self, transformation: Transformation) -> Self {
58
58
+
self.transformations.push(transformation);
59
59
+
self
60
60
+
}
61
61
+
55
62
pub fn clear_filters(&mut self) {
56
63
self.filters.clear();
57
64
}
···
77
84
if !matches!(self.object, Object::RawSVG(..)) {
78
85
css = self.fill.render_css(colormap, !self.object.fillable());
79
86
}
87
87
+
88
88
+
css += "transform-box: fill-box;";
80
89
81
90
css += self
82
91
.filters
···
14
14
WEB_CANVAS.lock().unwrap()
15
15
}
16
16
17
17
-
#[wasm_bindgen(start)]
18
18
-
pub fn js_init() -> Result<(), JsValue> {
19
19
-
render_image(0.0, Color::Black)?;
20
20
-
Ok(())
21
21
-
}
22
17
23
18
// Can't bind Color.name directly, see https://github.com/rustwasm/wasm-bindgen/issues/1715
24
19
#[wasm_bindgen]
···
1
1
-
while true
2
2
-
set id (nanoid -s 10)
3
3
-
qrencode "https://shapemaker.ewen.works/found/$id" -o street/$id-qr.png
4
4
-
QRCODE_NAME=street/$id just example-image out.svg "--objects-count 5..15"
5
5
-
if test (read || echo "n") = "y"
6
6
-
cp out.svg street/$id.svg
7
7
-
resvg --width 2000 out.svg street/$id.png
8
8
-
echo resvg --width 2000 street/$id.svg street/$id.png
9
9
-
echo saved street/$id.svg \| street/$id.png
10
10
-
else
11
11
-
rm street/$id-qr.png
12
12
-
end
13
13
-
end