Fossil SCM

Several improvements to the image-format-vs-repo-size experiment and the report documenting it: dropped the first 3 columns of data to make the bar chart clearer; drawing the bar chart on a transparent BG in case it's used on a page with a non-white BG, as with a selected Fossil forum post; added axis labels; added a run time calculation to the expensive first step; fixed a few syntax problems that prevent the Python code from compiling on Python 3; documented some problems with running it under Anaconda on macOS; better documented the notebook's dependencies; many clarifications to the experimental report text.

wyoung 2019-03-27 18:45 trunk
Commit 41e5237acd2eb2b160a81425e02e13247a98d10478bf66a81088e38aadeed788
--- www/image-format-vs-repo-size.ipynb
+++ www/image-format-vs-repo-size.ipynb
@@ -6,28 +6,40 @@
66
"source": [
77
"# Image Format vs Fossil Repository Size\n",
88
"\n",
99
"## Prerequisites\n",
1010
"\n",
11
- "`pip install jupyter matplotlib pandas wand`\n",
11
+ "This notebook was developed with [JupyterLab][jl]. To follow in my footsteps, install that and the needed Python packages:\n",
12
+ "\n",
13
+ " $ sudo pip install jupyterlab matplotlib pandas wand\n",
14
+ "\n",
15
+ "In principle, it should also work with [Anaconda Navigator][an], but because [Wand][wp] is not currently in the Anaconda base package set, you may run into difficulties making it work, as we did on macOS. These problems might not occur on Windows or Linux.\n",
16
+ "\n",
17
+ "This notebook uses the Python 2 kernel because macOS does not include Python 3, and we don't want to make adding that a prerequisite for those re-running this experiement on their own macOS systems. The code was written with Python 3 syntax changes in mind, but we haven't yet successfully tried it in a Python 3 Jupyter kernel.\n",
18
+ "\n",
19
+ "[an]: https://www.anaconda.com/distribution/\n",
20
+ "[jl]: https://github.com/jupyterlab/\n",
21
+ "[wp]: http://wand-py.org/\n",
1222
"\n",
1323
"\n",
1424
"## Running\n",
1525
"\n",
16
- "The next cell generates the test repositories. This takes about half a minute due to the time needed for all the file I/O.\n",
26
+ "The next cell generates the test repositories. This takes about 45 seconds to run, primarily due to the `sleep 1` synchronization call, made 40 times in the main test loop.\n",
27
+ "\n",
28
+ "The one after that produces the bar chart from the collected data, all but instantaneously.\n",
1729
"\n",
18
- "The one after that produces the bar chart from the collected data.\n",
30
+ "This split allows you to generate the expensive experimental data in a single pass, then play as many games as you like with the generated data.\n",
1931
"\n",
2032
"\n",
2133
"## Discussion\n",
2234
"\n",
2335
"That is kept in [a separate document](image-format-vs-repo-size.md) so we can share that document with Fossil's Markdown renderer."
2436
]
2537
},
2638
{
2739
"cell_type": "code",
28
- "execution_count": 3,
40
+ "execution_count": null,
2941
"metadata": {},
3042
"outputs": [],
3143
"source": [
3244
"import os\n",
3345
"import random\n",
@@ -39,11 +51,11 @@
3951
"\n",
4052
"import pandas as pd\n",
4153
"\n",
4254
"size = 256\n",
4355
"iterations = 10\n",
44
- "\n",
56
+ "start = time.time()\n",
4557
"repo_sizes = []\n",
4658
"\n",
4759
"formats = ['JPEG', 'BMP', 'TIFF', 'PNG']\n",
4860
"for f in formats:\n",
4961
" ext = f.lower()\n",
@@ -56,11 +68,11 @@
5668
" def add_repo_size():\n",
5769
" rs.append(os.path.getsize(repo) / 1024.0 / 1024.0)\n",
5870
"\n",
5971
" try:\n",
6072
" # Create test repo\n",
61
- " if not os.path.exists(tdir): os.mkdir(tdir, 0700)\n",
73
+ " if not os.path.exists(tdir): os.mkdir(tdir, 0o700)\n",
6274
" cmd = 'cd {0} ; fossil init ../{1} && fossil open ../{1} && fossil set binary-glob \"*.{2}\"'.format(\n",
6375
" tdir, repo, ext\n",
6476
" )\n",
6577
" if os.system(cmd) != 0:\n",
6678
" raise RuntimeError('Failed to create test repo ' + repo)\n",
@@ -116,11 +128,13 @@
116128
" finally:\n",
117129
" if os.path.exists(ipath): os.remove(ipath)\n",
118130
" if os.path.exists(tdir):\n",
119131
" os.system('cd ' + tdir + ' ; fossil close -f')\n",
120132
" os.rmdir(tdir)\n",
121
- " if os.path.exists(repo): os.remove(repo) "
133
+ " if os.path.exists(repo): os.remove(repo)\n",
134
+ " \n",
135
+ "print(\"Experiment completed in \" + str(time.time() - start) + \" seconds.\")"
122136
]
123137
},
124138
{
125139
"cell_type": "code",
126140
"execution_count": null,
@@ -130,19 +144,32 @@
130144
"%config InlineBackend.figure_formats = ['svg']\n",
131145
"\n",
132146
"import matplotlib as mpl\n",
133147
"import matplotlib.pyplot as plt\n",
134148
"\n",
135
- "data = pd.concat(repo_sizes, axis=1)\n",
136
- "mpl.rcParams['figure.figsize'] = (7, 4)\n",
137
- "plt.rcParams['axes.facecolor'] = 'white'\n",
138
- "data.plot(kind = 'bar', colormap = 'coolwarm',\n",
149
+ "# Merge per-format test data into a single DataFrame without the first\n",
150
+ "# first 3 rows: the initial empty repo state (boring) and the repo DB\n",
151
+ "# size as it \"settles\" in its first few checkins.\n",
152
+ "data = pd.concat(repo_sizes, axis=1).drop(range(3))\n",
153
+ "\n",
154
+ "mpl.rcParams['figure.figsize'] = (6, 4)\n",
155
+ "#plt.rcParams['axes.facecolor'] = 'white'\n",
156
+ "ax = data.plot(kind = 'bar', colormap = 'coolwarm',\n",
139157
" grid = False, width = 0.8,\n",
140158
" edgecolor = 'white', linewidth = 2)\n",
141
- "plt.savefig('image-format-vs-repo-size.svg')\n",
159
+ "ax.axes.set_xlabel('Checkin index')\n",
160
+ "ax.axes.set_ylabel('Repo size (MiB)')\n",
161
+ "plt.savefig('image-format-vs-repo-size.svg', transparent=True)\n",
142162
"plt.show()"
143163
]
164
+ },
165
+ {
166
+ "cell_type": "code",
167
+ "execution_count": null,
168
+ "metadata": {},
169
+ "outputs": [],
170
+ "source": []
144171
}
145172
],
146173
"metadata": {
147174
"kernelspec": {
148175
"display_name": "Python 2",
149176
--- www/image-format-vs-repo-size.ipynb
+++ www/image-format-vs-repo-size.ipynb
@@ -6,28 +6,40 @@
6 "source": [
7 "# Image Format vs Fossil Repository Size\n",
8 "\n",
9 "## Prerequisites\n",
10 "\n",
11 "`pip install jupyter matplotlib pandas wand`\n",
 
 
 
 
 
 
 
 
 
 
12 "\n",
13 "\n",
14 "## Running\n",
15 "\n",
16 "The next cell generates the test repositories. This takes about half a minute due to the time needed for all the file I/O.\n",
 
 
17 "\n",
18 "The one after that produces the bar chart from the collected data.\n",
19 "\n",
20 "\n",
21 "## Discussion\n",
22 "\n",
23 "That is kept in [a separate document](image-format-vs-repo-size.md) so we can share that document with Fossil's Markdown renderer."
24 ]
25 },
26 {
27 "cell_type": "code",
28 "execution_count": 3,
29 "metadata": {},
30 "outputs": [],
31 "source": [
32 "import os\n",
33 "import random\n",
@@ -39,11 +51,11 @@
39 "\n",
40 "import pandas as pd\n",
41 "\n",
42 "size = 256\n",
43 "iterations = 10\n",
44 "\n",
45 "repo_sizes = []\n",
46 "\n",
47 "formats = ['JPEG', 'BMP', 'TIFF', 'PNG']\n",
48 "for f in formats:\n",
49 " ext = f.lower()\n",
@@ -56,11 +68,11 @@
56 " def add_repo_size():\n",
57 " rs.append(os.path.getsize(repo) / 1024.0 / 1024.0)\n",
58 "\n",
59 " try:\n",
60 " # Create test repo\n",
61 " if not os.path.exists(tdir): os.mkdir(tdir, 0700)\n",
62 " cmd = 'cd {0} ; fossil init ../{1} && fossil open ../{1} && fossil set binary-glob \"*.{2}\"'.format(\n",
63 " tdir, repo, ext\n",
64 " )\n",
65 " if os.system(cmd) != 0:\n",
66 " raise RuntimeError('Failed to create test repo ' + repo)\n",
@@ -116,11 +128,13 @@
116 " finally:\n",
117 " if os.path.exists(ipath): os.remove(ipath)\n",
118 " if os.path.exists(tdir):\n",
119 " os.system('cd ' + tdir + ' ; fossil close -f')\n",
120 " os.rmdir(tdir)\n",
121 " if os.path.exists(repo): os.remove(repo) "
 
 
122 ]
123 },
124 {
125 "cell_type": "code",
126 "execution_count": null,
@@ -130,19 +144,32 @@
130 "%config InlineBackend.figure_formats = ['svg']\n",
131 "\n",
132 "import matplotlib as mpl\n",
133 "import matplotlib.pyplot as plt\n",
134 "\n",
135 "data = pd.concat(repo_sizes, axis=1)\n",
136 "mpl.rcParams['figure.figsize'] = (7, 4)\n",
137 "plt.rcParams['axes.facecolor'] = 'white'\n",
138 "data.plot(kind = 'bar', colormap = 'coolwarm',\n",
 
 
 
 
139 " grid = False, width = 0.8,\n",
140 " edgecolor = 'white', linewidth = 2)\n",
141 "plt.savefig('image-format-vs-repo-size.svg')\n",
 
 
142 "plt.show()"
143 ]
 
 
 
 
 
 
 
144 }
145 ],
146 "metadata": {
147 "kernelspec": {
148 "display_name": "Python 2",
149
--- www/image-format-vs-repo-size.ipynb
+++ www/image-format-vs-repo-size.ipynb
@@ -6,28 +6,40 @@
6 "source": [
7 "# Image Format vs Fossil Repository Size\n",
8 "\n",
9 "## Prerequisites\n",
10 "\n",
11 "This notebook was developed with [JupyterLab][jl]. To follow in my footsteps, install that and the needed Python packages:\n",
12 "\n",
13 " $ sudo pip install jupyterlab matplotlib pandas wand\n",
14 "\n",
15 "In principle, it should also work with [Anaconda Navigator][an], but because [Wand][wp] is not currently in the Anaconda base package set, you may run into difficulties making it work, as we did on macOS. These problems might not occur on Windows or Linux.\n",
16 "\n",
17 "This notebook uses the Python 2 kernel because macOS does not include Python 3, and we don't want to make adding that a prerequisite for those re-running this experiement on their own macOS systems. The code was written with Python 3 syntax changes in mind, but we haven't yet successfully tried it in a Python 3 Jupyter kernel.\n",
18 "\n",
19 "[an]: https://www.anaconda.com/distribution/\n",
20 "[jl]: https://github.com/jupyterlab/\n",
21 "[wp]: http://wand-py.org/\n",
22 "\n",
23 "\n",
24 "## Running\n",
25 "\n",
26 "The next cell generates the test repositories. This takes about 45 seconds to run, primarily due to the `sleep 1` synchronization call, made 40 times in the main test loop.\n",
27 "\n",
28 "The one after that produces the bar chart from the collected data, all but instantaneously.\n",
29 "\n",
30 "This split allows you to generate the expensive experimental data in a single pass, then play as many games as you like with the generated data.\n",
31 "\n",
32 "\n",
33 "## Discussion\n",
34 "\n",
35 "That is kept in [a separate document](image-format-vs-repo-size.md) so we can share that document with Fossil's Markdown renderer."
36 ]
37 },
38 {
39 "cell_type": "code",
40 "execution_count": null,
41 "metadata": {},
42 "outputs": [],
43 "source": [
44 "import os\n",
45 "import random\n",
@@ -39,11 +51,11 @@
51 "\n",
52 "import pandas as pd\n",
53 "\n",
54 "size = 256\n",
55 "iterations = 10\n",
56 "start = time.time()\n",
57 "repo_sizes = []\n",
58 "\n",
59 "formats = ['JPEG', 'BMP', 'TIFF', 'PNG']\n",
60 "for f in formats:\n",
61 " ext = f.lower()\n",
@@ -56,11 +68,11 @@
68 " def add_repo_size():\n",
69 " rs.append(os.path.getsize(repo) / 1024.0 / 1024.0)\n",
70 "\n",
71 " try:\n",
72 " # Create test repo\n",
73 " if not os.path.exists(tdir): os.mkdir(tdir, 0o700)\n",
74 " cmd = 'cd {0} ; fossil init ../{1} && fossil open ../{1} && fossil set binary-glob \"*.{2}\"'.format(\n",
75 " tdir, repo, ext\n",
76 " )\n",
77 " if os.system(cmd) != 0:\n",
78 " raise RuntimeError('Failed to create test repo ' + repo)\n",
@@ -116,11 +128,13 @@
128 " finally:\n",
129 " if os.path.exists(ipath): os.remove(ipath)\n",
130 " if os.path.exists(tdir):\n",
131 " os.system('cd ' + tdir + ' ; fossil close -f')\n",
132 " os.rmdir(tdir)\n",
133 " if os.path.exists(repo): os.remove(repo)\n",
134 " \n",
135 "print(\"Experiment completed in \" + str(time.time() - start) + \" seconds.\")"
136 ]
137 },
138 {
139 "cell_type": "code",
140 "execution_count": null,
@@ -130,19 +144,32 @@
144 "%config InlineBackend.figure_formats = ['svg']\n",
145 "\n",
146 "import matplotlib as mpl\n",
147 "import matplotlib.pyplot as plt\n",
148 "\n",
149 "# Merge per-format test data into a single DataFrame without the first\n",
150 "# first 3 rows: the initial empty repo state (boring) and the repo DB\n",
151 "# size as it \"settles\" in its first few checkins.\n",
152 "data = pd.concat(repo_sizes, axis=1).drop(range(3))\n",
153 "\n",
154 "mpl.rcParams['figure.figsize'] = (6, 4)\n",
155 "#plt.rcParams['axes.facecolor'] = 'white'\n",
156 "ax = data.plot(kind = 'bar', colormap = 'coolwarm',\n",
157 " grid = False, width = 0.8,\n",
158 " edgecolor = 'white', linewidth = 2)\n",
159 "ax.axes.set_xlabel('Checkin index')\n",
160 "ax.axes.set_ylabel('Repo size (MiB)')\n",
161 "plt.savefig('image-format-vs-repo-size.svg', transparent=True)\n",
162 "plt.show()"
163 ]
164 },
165 {
166 "cell_type": "code",
167 "execution_count": null,
168 "metadata": {},
169 "outputs": [],
170 "source": []
171 }
172 ],
173 "metadata": {
174 "kernelspec": {
175 "display_name": "Python 2",
176
--- www/image-format-vs-repo-size.md
+++ www/image-format-vs-repo-size.md
@@ -1,67 +1,73 @@
11
# Image Format vs Fossil Repo Size
22
33
## The Problem
44
55
Fossil has a [delta compression][dc] feature which removes redundant
6
-information from a file when checking in a subsequent version.¹ That
7
-delta is then [zlib][zl]-compressed before being stored in the Fossil
8
-repository database file.
9
-
10
-These two steps have a few practical consequences when it comes to
11
-storing already-compressed files:
12
-
13
-1. Binary data compression algorithms such as zlib turn the file data
14
- into [pseudorandom noise][prn]. Typical data compression algorithms
15
- are not [hash functions][hf], where the goal is that a change to
16
- each bit in the input has a statistically even chance of changing
17
- every bit in the output, but because they do approach that
18
- pathalogical condition, pre-compressed data tends to defeat Fossil’s
19
- delta compression algorithm, there being so little correlation
20
- between two different outputs from the binary data compression
21
- algorithm.
6
+information from a file — with respect to the version checked in at the
7
+tip of the current working branch — when checking in a subsequent
8
+version.¹ That delta is then [zlib][zl]-compressed before being stored
9
+in the Fossil repository database file.
10
+
11
+Storing pre-compressed data files in a Fossil repository defeats both of
12
+these space-saving measures:
13
+
14
+1. Binary data compression algorithms — whether lossless as with zlib
15
+ or lossy as with JPEG — turn the file data into [pseudorandom
16
+ noise][prn].²
17
+
18
+ Typical data compression algorithms are not [hash functions][hf],
19
+ where the goal is that a change to each bit in the input has a
20
+ statistically even chance of changing every bit in the output, but
21
+ because they do approach that pathological condition, pre-compressed
22
+ data tends to defeat Fossil’s delta compression algorithm, there
23
+ being so little correlation between two different outputs from the
24
+ binary data compression algorithm.
2225
2326
2. An ideal lossless binary data compression algorithm cannot be
2427
applied more than once to make the data even smaller, since random
2528
noise is incompressible. The consequence for our purposes here is
2629
that pre-compressed data doesn’t benefit from Fossil’s zlib
2730
compression.
2831
32
+You might then ask, what does it matter if the space savings comes from
33
+the application file format (e.g. JPEG, Zip, etc.) or from Fossil
34
+itself? It really doesn’t, as far as point 2 above goes, but point 1
35
+causes the Fossil repository to balloon out of proportion to the size of
36
+the input data change on each checkin. This article will illustrate that
37
+problem, quantify it, and give a solution to it.
38
+
2939
[dc]: ./delta_format.wiki
3040
[hf]: https://en.wikipedia.org/wiki/Hash_function
3141
[prn]: https://en.wikipedia.org/wiki/Pseudorandomness
3242
[zl]: http://www.zlib.net/
3343
3444
35
-## Key Advice
36
-
37
-If you read no further, the takeaway from the prior two points is that
38
-you should not store already-compressed data in a Fossil repository.
39
-You’ll defeat both of its compression methods, ballooning the Fossil
40
-repository size.
41
-
42
-The remainder of this article shows the consequences of ignoring this
43
-advice. We’ll use 2D image files as our example here, but realize that
44
-this advice also applies to many other file types:
45
-
46
-* **Microsoft Office**: The [XML-based document formats][oox] used
47
- from Office 2003 onward (`.docx`, `.xlsx`, `.pptx`, etc.) are Zip
48
- files containing an XML document file and several collateral files.
49
- The same is true of LibreOffice’s [ODF][odf] files.
50
-
51
-* **[Java][jcl]**: A `.jar` file is a Zip file containing JVM
45
+## Affected File Formats
46
+
47
+In this article’s core experiment, we use 2D image file formats, but
48
+this article’s advice also applies to many other file types. For just a
49
+few examples out of what must be thousands:
50
+
51
+* **Microsoft Office**: The [OOXML document format][oox] used from
52
+ Office 2003 onward (`.docx`, `.xlsx`, `.pptx`, etc.) are Zip files
53
+ containing an XML document file and several collateral files.
54
+
55
+* **Libre Office**: Its [ODF][odf] format is designed in more or less
56
+ the same way as OOXML.
57
+
58
+* **Java**: A Java [`.jar` file][jcl] is a Zip file containing JVM
5259
`.class` files, manifest files, and more.
5360
54
-* **[Windows Installer][wi]:** An `*.msi` file is a proprietary
61
+* **Windows Installer:** An [`*.msi` file][wi] is a proprietary
5562
database format that contains, among other things, [Microsoft
5663
Cabinet][cab]-compressed files, which in turn may hold Windows
5764
executables, which [may themselves be compressed][exc].
5865
59
-* **SVG, PDF**: Many file formats are available in both compressed
60
- and uncompressed forms. For the same basic reason as we will
61
- illustrate below, you should use the uncompressed form with Fossil
62
- wherever practical.
66
+* **SVG, PDF, TIFF, etc.**: Many file formats are available in both
67
+ compressed and uncompressed forms. You should use the uncompressed
68
+ form with Fossil wherever practical, as we will show below.
6369
6470
6571
[cab]: https://en.wikipedia.org/wiki/Cabinet_(file_format)
6672
[exc]: https://en.wikipedia.org/wiki/Executable_compression
6773
[jcl]: https://en.wikipedia.org/wiki/Java_(programming_language)
@@ -71,28 +77,28 @@
7177
7278
7379
7480
## Demonstration
7581
76
-The [`image-format-vs-repo-size.ipynb` file][nb] in this directory is a
82
+The companion [`image-format-vs-repo-size.ipynb` file][nb] is a
7783
[Jupyter][jp] notebook implementing the following experiment:
7884
79
-1. Create an empty Fossil repository, and save its initial size.
85
+1. Create an empty Fossil repository; save its initial size.
8086
8187
2. Use [ImageMagick][im] via [Wand][wp] to generate a JPEG file of a
8288
particular size — currently 256 px² — filled with Gaussian noise to
83
- make data compression difficult.
89
+ make data compression more difficult than with a solid-color image.
8490
8591
3. Check that image into the new Fossil repo, and remember that size.
8692
8793
4. Change a random pixel in the image to a random RGB value, save that
8894
image, check it in, and remember the new Fossil repo size.
8995
9096
5. Iterate on step 4 some number of times — currently 10 — and remember
9197
the Fossil repo size at each step.
9298
93
-6. Repeat the above steps for BMP, TIFF,² and PNG.
99
+6. Repeat the above steps for BMP, TIFF,³ and PNG.
94100
95101
7. Create a bar chart showing how the Fossil repository size changes
96102
with each checkin.
97103
98104
We chose to use Jupyter for this because it makes it easy for you to
@@ -109,49 +115,31 @@
109115
[wp]: http://wand-py.org/
110116
111117
112118
## Results
113119
114
-Running the notebook gives a bar chart something like³ this:
120
+Running the notebook gives a bar chart something like⁴ this:
115121
116122
![results bar chart](./image-format-vs-repo-size.svg)
117123
118
-There are several points of interest in that chart:
119
-
120
-* The initial repository size (group "0") is the same in all four
121
- cases. This is the normal overhead for an empty Fossil repository,
122
- about 200 kiB.
124
+There are a few key things we want to draw your attention to in that
125
+chart:
123126
124127
* BMP and uncompressed TIFF are nearly identical in size for all
125
- checkins. A low-tech format like BMP will have a small edge in
126
- practice because TIFF metadata includes the option for multiple
127
- timestamps, UUIDs, etc., which bloat the checkin size by creating
128
- many small deltas. If you don't need the advantages of TIFF, a less
129
- capable image file format will give smaller checkin sizes for a
130
- given amount of change.
131
-
132
-* Because both PNG and Fossil use the zlib binary data compression
133
- algorithm, the first checkin (group “1”) is approximately the same
134
- size for PNG, BMP, and TIFF.
135
-
136
-* The repo size balloons on the first 3 checkins due to SQLite page
137
- overhead and such.
138
-
139
-* Once we’re past that initial settling-in point, the repo size goes
140
- up negligibly for BMP and TIFF due to Fossil’s delta compression
141
- algorithm: a single-pixel change results in a very small increase in
142
- the Fossil repo size, as we want. PNG and JPEG, though, show large
143
- increases on each checkin because this same tiny input change causes
144
- a large change in the computed delta.
128
+ checkins, and the repository growth rate is negligible.⁵ We owe this
129
+ economy to Fossil’s delta compression feature.
130
+
131
+* The JPEG and TIFF bars increase by large amounts on most checkins
132
+ even though each checkin encodes only a *single-pixel change*!
145133
146134
* Because JPEG’s lossy nature allows it to start smaller and have
147135
smaller size increases than than PNG, the crossover point with
148
- BMP/TIFF isn’t until 7-9 checkins in typical runs of this test.
149
- Given a choice among these four file formats and a willingness to
150
- use lossy image compression, a rational tradeoff is to choose JPEG
151
- for repositories where each image will change fewer than that number
152
- of times.
136
+ BMP/TIFF isn’t until 7-9 checkins in typical runs of this [Monte
137
+ Carlo experiment][mce]. Given a choice among these four file
138
+ formats and a willingness to use lossy image compression, a rational
139
+ tradeoff is to choose JPEG for repositories where each image will
140
+ change fewer than that number of times.
153141
154142
[mce]: https://en.wikipedia.org/wiki/Monte_Carlo_method
155143
156144
157145
## Automated Recompression
@@ -159,11 +147,11 @@
159147
Since programs that produce and consume binary-compressed data files
160148
often make it either difficult or impossible to work with the
161149
uncompressed form, we want an automated method for producing the
162150
uncompressed form to make Fossil happy while still having the compressed
163151
form to keep our content creation applications happy. This `Makefile`
164
-should⁴ do that for BMP, PNG, SVG, and XLSX files:
152
+should⁶ do that for BMP, PNG, SVG, and XLSX files:
165153
166154
.SUFFIXES: .bmp .png .svg .svgz
167155
168156
.svgz.svg:
169157
gzip -dc < $< > $@
@@ -193,20 +181,26 @@
193181
doc-big.pdf: doc-small.pdf
194182
qpdf --stream-data=uncompress $@ $<
195183
196184
This `Makefile` allows you to treat the compressed version as the
197185
process input, but to actually check in only the changes against the
198
-uncompressed version by typing “`make`” before “`fossil ci`”.
186
+uncompressed version by typing “`make`” before “`fossil ci`”. This is
187
+not actually an extra step in practice, since if you’ve got a
188
+`Makefile`-based project, you should be building (and testing!) it
189
+before checking each change in anyway!
199190
200
-Because it’s based on dependency rules, only the necessary files are
201
-generated on each `make` command.
191
+Because this technique is based on dependency rules, only the necessary
192
+files are generated on each `make` command.
202193
203194
You only have to run “`make reconstitute`” *once* after opening a fresh
204195
Fossil checkout to produce those compressed sources. After that, you
205
-work with the compressed files in your content creation programs.
196
+work with the compressed files in your content creation programs. Your
197
+build system might include some kind of bootstrapping or
198
+auto-configuration step that you could attach this to, so that it
199
+doesn’t need to be run by hand.
206200
207
-The `Makefile` illustrates two primary strategies:
201
+This `Makefile` illustrates two primary strategies:
208202
209203
210204
### Input and Ouput File Formats Differ by Extension
211205
212206
In the case of SVG and the bitmap image formats, the file name extension
@@ -214,14 +208,14 @@
214208
behavior we want. The top half of the `Makefile` just tells `make` how
215209
to map from `*.svg` to `*.svgz` and vice versa, and the same for `*.bmp`
216210
to/from `*.png`.
217211
218212
219
-### Same Extension
213
+### Input and Output Use the Same Extension
220214
221
-We don’t have that luxury for Excel and PDF files, for different
222
-reasons:
215
+We don’t have that luxury for Excel and PDF files, each for a different
216
+reason:
223217
224218
* **Excel:** Excel has no way to work with the unpacked Zip file
225219
contents at all, so we have to unpack it into a subdirectory, which
226220
is what we check into Fossil. On making a fresh Fossil checkout, we
227221
have to pack that subdirectory’s contents back up into an `*.xlsx`
@@ -237,33 +231,60 @@
237231
here.
238232
239233
----
240234
241235
242
-## Footnotes
236
+## Footnotes and Digressions
243237
244238
1. Several other programs also do delta compression, so they’ll also be
245239
affected by this problem: [rsync][rs], [Unison][us], [Git][git],
246240
etc. When using file copying and synchronization programs *without*
247241
delta compression, it’s best to use the most highly-compressed file
248242
format you can tolerate, since they copy the whole file any time any
249243
bit of it changes.
250244
251
-2. We're using *uncompressed* TIFF here, not [LZW][lzw]- or
245
+2. In fact, a good way to gauge the effectiveness of a given
246
+ compression scheme is to run its output through the same sort of
247
+ tests we use to gauge how “random” a given [PRNG][prng] is. Another
248
+ way to look at it is that if there is a discernible pattern in the
249
+ output of a compression scheme, it’s information that could be
250
+ further compressed.
251
+
252
+3. We're using *uncompressed* TIFF here, not [LZW][lzw]- or
252253
Zip-compressed TIFF, either of which would give similar results to
253254
PNG, which is always zlib-compressed.
254255
255
-3. The raw data changes somewhat from one run to the next due to the
256
+4. The raw data changes somewhat from one run to the next due to the
256257
use of random noise in the image to make the zlib/PNG compression
257258
more difficult, and the random pixel changes. Those test design
258259
choices make this a [Monte Carlo experient][mce]. We’ve found that
259
- the overall character of the results don’t change much from one run
260
- to the next.
260
+ the overall character of the results doesn’t change from one run to
261
+ the next.
262
+
263
+ The code in the notebook’s third cell drops the first three columns
264
+ of data because the first column (the empty repository size) is
265
+ boring, and the subsequent two checkins show the SQLite DB file
266
+ format settling in with its first few checkins. There’s a single
267
+ line in the notebook you can comment out to get a bar chart with
268
+ these data included.
269
+
270
+ If you do this, you’ll see a mildly interesting result: the size of
271
+ the first checkin in the BMP and TIFF cases is roughly the same as
272
+ that for the PNG case, because both PNG and Fossil use the zlib
273
+ binary data compression algorithm.
274
+
275
+5. A low-tech format like BMP will have a small edge in practice
276
+ because TIFF metadata includes the option for multiple timestamps,
277
+ UUIDs, etc., which bloat the checkin size by creating many small
278
+ deltas. If you don't need the advantages of TIFF, a less capable
279
+ image file format will give smaller checkin sizes for a given amount
280
+ of change.
261281
262
-4. The `Makefile` above is not battle-tested. Please report bugs and
282
+6. The `Makefile` above is not battle-tested. Please report bugs and
263283
needed extensions [on the forum][for].
264284
265
-[for]: https://fossil-scm.org/forum/forumpost/15e677f2c8
266
-[git]: https://git-scm.com/
267
-[lzw]: https://en.wikipedia.org/wiki/Lempel%E2%80%93Ziv%E2%80%93Welch
268
-[rs]: https://rsync.samba.org/
269
-[us]: http://www.cis.upenn.edu/~bcpierce/unison/
285
+[for]: https://fossil-scm.org/forum/forumpost/15e677f2c8
286
+[git]: https://git-scm.com/
287
+[lzw]: https://en.wikipedia.org/wiki/Lempel%E2%80%93Ziv%E2%80%93Welch
288
+[prng]: https://en.wikipedia.org/wiki/Pseudorandom_number_generator
289
+[rs]: https://rsync.samba.org/
290
+[us]: http://www.cis.upenn.edu/~bcpierce/unison/
270291
--- www/image-format-vs-repo-size.md
+++ www/image-format-vs-repo-size.md
@@ -1,67 +1,73 @@
1 # Image Format vs Fossil Repo Size
2
3 ## The Problem
4
5 Fossil has a [delta compression][dc] feature which removes redundant
6 information from a file when checking in a subsequent version.¹ That
7 delta is then [zlib][zl]-compressed before being stored in the Fossil
8 repository database file.
9
10 These two steps have a few practical consequences when it comes to
11 storing already-compressed files:
12
13 1. Binary data compression algorithms such as zlib turn the file data
14 into [pseudorandom noise][prn]. Typical data compression algorithms
15 are not [hash functions][hf], where the goal is that a change to
16 each bit in the input has a statistically even chance of changing
17 every bit in the output, but because they do approach that
18 pathalogical condition, pre-compressed data tends to defeat Fossil’s
19 delta compression algorithm, there being so little correlation
20 between two different outputs from the binary data compression
21 algorithm.
 
 
 
22
23 2. An ideal lossless binary data compression algorithm cannot be
24 applied more than once to make the data even smaller, since random
25 noise is incompressible. The consequence for our purposes here is
26 that pre-compressed data doesn’t benefit from Fossil’s zlib
27 compression.
28
 
 
 
 
 
 
 
29 [dc]: ./delta_format.wiki
30 [hf]: https://en.wikipedia.org/wiki/Hash_function
31 [prn]: https://en.wikipedia.org/wiki/Pseudorandomness
32 [zl]: http://www.zlib.net/
33
34
35 ## Key Advice
36
37 If you read no further, the takeaway from the prior two points is that
38 you should not store already-compressed data in a Fossil repository.
39 You’ll defeat both of its compression methods, ballooning the Fossil
40 repository size.
41
42 The remainder of this article shows the consequences of ignoring this
43 advice. We’ll use 2D image files as our example here, but realize that
44 this advice also applies to many other file types:
45
46 * **Microsoft Office**: The [XML-based document formats][oox] used
47 from Office 2003 onward (`.docx`, `.xlsx`, `.pptx`, etc.) are Zip
48 files containing an XML document file and several collateral files.
49 The same is true of LibreOffice’s [ODF][odf] files.
50
51 * **[Java][jcl]**: A `.jar` file is a Zip file containing JVM
52 `.class` files, manifest files, and more.
53
54 * **[Windows Installer][wi]:** An `*.msi` file is a proprietary
55 database format that contains, among other things, [Microsoft
56 Cabinet][cab]-compressed files, which in turn may hold Windows
57 executables, which [may themselves be compressed][exc].
58
59 * **SVG, PDF**: Many file formats are available in both compressed
60 and uncompressed forms. For the same basic reason as we will
61 illustrate below, you should use the uncompressed form with Fossil
62 wherever practical.
63
64
65 [cab]: https://en.wikipedia.org/wiki/Cabinet_(file_format)
66 [exc]: https://en.wikipedia.org/wiki/Executable_compression
67 [jcl]: https://en.wikipedia.org/wiki/Java_(programming_language)
@@ -71,28 +77,28 @@
71
72
73
74 ## Demonstration
75
76 The [`image-format-vs-repo-size.ipynb` file][nb] in this directory is a
77 [Jupyter][jp] notebook implementing the following experiment:
78
79 1. Create an empty Fossil repository, and save its initial size.
80
81 2. Use [ImageMagick][im] via [Wand][wp] to generate a JPEG file of a
82 particular size — currently 256 px² — filled with Gaussian noise to
83 make data compression difficult.
84
85 3. Check that image into the new Fossil repo, and remember that size.
86
87 4. Change a random pixel in the image to a random RGB value, save that
88 image, check it in, and remember the new Fossil repo size.
89
90 5. Iterate on step 4 some number of times — currently 10 — and remember
91 the Fossil repo size at each step.
92
93 6. Repeat the above steps for BMP, TIFF,² and PNG.
94
95 7. Create a bar chart showing how the Fossil repository size changes
96 with each checkin.
97
98 We chose to use Jupyter for this because it makes it easy for you to
@@ -109,49 +115,31 @@
109 [wp]: http://wand-py.org/
110
111
112 ## Results
113
114 Running the notebook gives a bar chart something like³ this:
115
116 ![results bar chart](./image-format-vs-repo-size.svg)
117
118 There are several points of interest in that chart:
119
120 * The initial repository size (group "0") is the same in all four
121 cases. This is the normal overhead for an empty Fossil repository,
122 about 200&nbsp;kiB.
123
124 * BMP and uncompressed TIFF are nearly identical in size for all
125 checkins. A low-tech format like BMP will have a small edge in
126 practice because TIFF metadata includes the option for multiple
127 timestamps, UUIDs, etc., which bloat the checkin size by creating
128 many small deltas. If you don't need the advantages of TIFF, a less
129 capable image file format will give smaller checkin sizes for a
130 given amount of change.
131
132 * Because both PNG and Fossil use the zlib binary data compression
133 algorithm, the first checkin (group “1”) is approximately the same
134 size for PNG, BMP, and TIFF.
135
136 * The repo size balloons on the first 3 checkins due to SQLite page
137 overhead and such.
138
139 * Once we’re past that initial settling-in point, the repo size goes
140 up negligibly for BMP and TIFF due to Fossil’s delta compression
141 algorithm: a single-pixel change results in a very small increase in
142 the Fossil repo size, as we want. PNG and JPEG, though, show large
143 increases on each checkin because this same tiny input change causes
144 a large change in the computed delta.
145
146 * Because JPEG’s lossy nature allows it to start smaller and have
147 smaller size increases than than PNG, the crossover point with
148 BMP/TIFF isn’t until 7-9 checkins in typical runs of this test.
149 Given a choice among these four file formats and a willingness to
150 use lossy image compression, a rational tradeoff is to choose JPEG
151 for repositories where each image will change fewer than that number
152 of times.
153
154 [mce]: https://en.wikipedia.org/wiki/Monte_Carlo_method
155
156
157 ## Automated Recompression
@@ -159,11 +147,11 @@
159 Since programs that produce and consume binary-compressed data files
160 often make it either difficult or impossible to work with the
161 uncompressed form, we want an automated method for producing the
162 uncompressed form to make Fossil happy while still having the compressed
163 form to keep our content creation applications happy. This `Makefile`
164 should⁴ do that for BMP, PNG, SVG, and XLSX files:
165
166 .SUFFIXES: .bmp .png .svg .svgz
167
168 .svgz.svg:
169 gzip -dc < $< > $@
@@ -193,20 +181,26 @@
193 doc-big.pdf: doc-small.pdf
194 qpdf --stream-data=uncompress $@ $<
195
196 This `Makefile` allows you to treat the compressed version as the
197 process input, but to actually check in only the changes against the
198 uncompressed version by typing “`make`” before “`fossil ci`”.
 
 
 
199
200 Because it’s based on dependency rules, only the necessary files are
201 generated on each `make` command.
202
203 You only have to run “`make reconstitute`” *once* after opening a fresh
204 Fossil checkout to produce those compressed sources. After that, you
205 work with the compressed files in your content creation programs.
 
 
 
206
207 The `Makefile` illustrates two primary strategies:
208
209
210 ### Input and Ouput File Formats Differ by Extension
211
212 In the case of SVG and the bitmap image formats, the file name extension
@@ -214,14 +208,14 @@
214 behavior we want. The top half of the `Makefile` just tells `make` how
215 to map from `*.svg` to `*.svgz` and vice versa, and the same for `*.bmp`
216 to/from `*.png`.
217
218
219 ### Same Extension
220
221 We don’t have that luxury for Excel and PDF files, for different
222 reasons:
223
224 * **Excel:** Excel has no way to work with the unpacked Zip file
225 contents at all, so we have to unpack it into a subdirectory, which
226 is what we check into Fossil. On making a fresh Fossil checkout, we
227 have to pack that subdirectory’s contents back up into an `*.xlsx`
@@ -237,33 +231,60 @@
237 here.
238
239 ----
240
241
242 ## Footnotes
243
244 1. Several other programs also do delta compression, so they’ll also be
245 affected by this problem: [rsync][rs], [Unison][us], [Git][git],
246 etc. When using file copying and synchronization programs *without*
247 delta compression, it’s best to use the most highly-compressed file
248 format you can tolerate, since they copy the whole file any time any
249 bit of it changes.
250
251 2. We're using *uncompressed* TIFF here, not [LZW][lzw]- or
 
 
 
 
 
 
 
252 Zip-compressed TIFF, either of which would give similar results to
253 PNG, which is always zlib-compressed.
254
255 3. The raw data changes somewhat from one run to the next due to the
256 use of random noise in the image to make the zlib/PNG compression
257 more difficult, and the random pixel changes. Those test design
258 choices make this a [Monte Carlo experient][mce]. We’ve found that
259 the overall character of the results don’t change much from one run
260 to the next.
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
261
262 4. The `Makefile` above is not battle-tested. Please report bugs and
263 needed extensions [on the forum][for].
264
265 [for]: https://fossil-scm.org/forum/forumpost/15e677f2c8
266 [git]: https://git-scm.com/
267 [lzw]: https://en.wikipedia.org/wiki/Lempel%E2%80%93Ziv%E2%80%93Welch
268 [rs]: https://rsync.samba.org/
269 [us]: http://www.cis.upenn.edu/~bcpierce/unison/
 
270
--- www/image-format-vs-repo-size.md
+++ www/image-format-vs-repo-size.md
@@ -1,67 +1,73 @@
1 # Image Format vs Fossil Repo Size
2
3 ## The Problem
4
5 Fossil has a [delta compression][dc] feature which removes redundant
6 information from a file — with respect to the version checked in at the
7 tip of the current working branch — when checking in a subsequent
8 version.¹ That delta is then [zlib][zl]-compressed before being stored
9 in the Fossil repository database file.
10
11 Storing pre-compressed data files in a Fossil repository defeats both of
12 these space-saving measures:
13
14 1. Binary data compression algorithms — whether lossless as with zlib
15 or lossy as with JPEG — turn the file data into [pseudorandom
16 noise][prn].²
17
18 Typical data compression algorithms are not [hash functions][hf],
19 where the goal is that a change to each bit in the input has a
20 statistically even chance of changing every bit in the output, but
21 because they do approach that pathological condition, pre-compressed
22 data tends to defeat Fossil’s delta compression algorithm, there
23 being so little correlation between two different outputs from the
24 binary data compression algorithm.
25
26 2. An ideal lossless binary data compression algorithm cannot be
27 applied more than once to make the data even smaller, since random
28 noise is incompressible. The consequence for our purposes here is
29 that pre-compressed data doesn’t benefit from Fossil’s zlib
30 compression.
31
32 You might then ask, what does it matter if the space savings comes from
33 the application file format (e.g. JPEG, Zip, etc.) or from Fossil
34 itself? It really doesn’t, as far as point 2 above goes, but point 1
35 causes the Fossil repository to balloon out of proportion to the size of
36 the input data change on each checkin. This article will illustrate that
37 problem, quantify it, and give a solution to it.
38
39 [dc]: ./delta_format.wiki
40 [hf]: https://en.wikipedia.org/wiki/Hash_function
41 [prn]: https://en.wikipedia.org/wiki/Pseudorandomness
42 [zl]: http://www.zlib.net/
43
44
45 ## Affected File Formats
46
47 In this article’s core experiment, we use 2D image file formats, but
48 this article’s advice also applies to many other file types. For just a
49 few examples out of what must be thousands:
50
51 * **Microsoft Office**: The [OOXML document format][oox] used from
52 Office 2003 onward (`.docx`, `.xlsx`, `.pptx`, etc.) are Zip files
53 containing an XML document file and several collateral files.
54
55 * **Libre Office**: Its [ODF][odf] format is designed in more or less
56 the same way as OOXML.
57
58 * **Java**: A Java [`.jar` file][jcl] is a Zip file containing JVM
 
 
 
59 `.class` files, manifest files, and more.
60
61 * **Windows Installer:** An [`*.msi` file][wi] is a proprietary
62 database format that contains, among other things, [Microsoft
63 Cabinet][cab]-compressed files, which in turn may hold Windows
64 executables, which [may themselves be compressed][exc].
65
66 * **SVG, PDF, TIFF, etc.**: Many file formats are available in both
67 compressed and uncompressed forms. You should use the uncompressed
68 form with Fossil wherever practical, as we will show below.
 
69
70
71 [cab]: https://en.wikipedia.org/wiki/Cabinet_(file_format)
72 [exc]: https://en.wikipedia.org/wiki/Executable_compression
73 [jcl]: https://en.wikipedia.org/wiki/Java_(programming_language)
@@ -71,28 +77,28 @@
77
78
79
80 ## Demonstration
81
82 The companion [`image-format-vs-repo-size.ipynb` file][nb] is a
83 [Jupyter][jp] notebook implementing the following experiment:
84
85 1. Create an empty Fossil repository; save its initial size.
86
87 2. Use [ImageMagick][im] via [Wand][wp] to generate a JPEG file of a
88 particular size — currently 256 px² — filled with Gaussian noise to
89 make data compression more difficult than with a solid-color image.
90
91 3. Check that image into the new Fossil repo, and remember that size.
92
93 4. Change a random pixel in the image to a random RGB value, save that
94 image, check it in, and remember the new Fossil repo size.
95
96 5. Iterate on step 4 some number of times — currently 10 — and remember
97 the Fossil repo size at each step.
98
99 6. Repeat the above steps for BMP, TIFF,³ and PNG.
100
101 7. Create a bar chart showing how the Fossil repository size changes
102 with each checkin.
103
104 We chose to use Jupyter for this because it makes it easy for you to
@@ -109,49 +115,31 @@
115 [wp]: http://wand-py.org/
116
117
118 ## Results
119
120 Running the notebook gives a bar chart something like⁴ this:
121
122 ![results bar chart](./image-format-vs-repo-size.svg)
123
124 There are a few key things we want to draw your attention to in that
125 chart:
 
 
 
126
127 * BMP and uncompressed TIFF are nearly identical in size for all
128 checkins, and the repository growth rate is negligible.⁵ We owe this
129 economy to Fossil’s delta compression feature.
130
131 * The JPEG and TIFF bars increase by large amounts on most checkins
132 even though each checkin encodes only a *single-pixel change*!
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
133
134 * Because JPEG’s lossy nature allows it to start smaller and have
135 smaller size increases than than PNG, the crossover point with
136 BMP/TIFF isn’t until 7-9 checkins in typical runs of this [Monte
137 Carlo experiment][mce]. Given a choice among these four file
138 formats and a willingness to use lossy image compression, a rational
139 tradeoff is to choose JPEG for repositories where each image will
140 change fewer than that number of times.
141
142 [mce]: https://en.wikipedia.org/wiki/Monte_Carlo_method
143
144
145 ## Automated Recompression
@@ -159,11 +147,11 @@
147 Since programs that produce and consume binary-compressed data files
148 often make it either difficult or impossible to work with the
149 uncompressed form, we want an automated method for producing the
150 uncompressed form to make Fossil happy while still having the compressed
151 form to keep our content creation applications happy. This `Makefile`
152 should⁶ do that for BMP, PNG, SVG, and XLSX files:
153
154 .SUFFIXES: .bmp .png .svg .svgz
155
156 .svgz.svg:
157 gzip -dc < $< > $@
@@ -193,20 +181,26 @@
181 doc-big.pdf: doc-small.pdf
182 qpdf --stream-data=uncompress $@ $<
183
184 This `Makefile` allows you to treat the compressed version as the
185 process input, but to actually check in only the changes against the
186 uncompressed version by typing “`make`” before “`fossil ci`”. This is
187 not actually an extra step in practice, since if you’ve got a
188 `Makefile`-based project, you should be building (and testing!) it
189 before checking each change in anyway!
190
191 Because this technique is based on dependency rules, only the necessary
192 files are generated on each `make` command.
193
194 You only have to run “`make reconstitute`” *once* after opening a fresh
195 Fossil checkout to produce those compressed sources. After that, you
196 work with the compressed files in your content creation programs. Your
197 build system might include some kind of bootstrapping or
198 auto-configuration step that you could attach this to, so that it
199 doesn’t need to be run by hand.
200
201 This `Makefile` illustrates two primary strategies:
202
203
204 ### Input and Ouput File Formats Differ by Extension
205
206 In the case of SVG and the bitmap image formats, the file name extension
@@ -214,14 +208,14 @@
208 behavior we want. The top half of the `Makefile` just tells `make` how
209 to map from `*.svg` to `*.svgz` and vice versa, and the same for `*.bmp`
210 to/from `*.png`.
211
212
213 ### Input and Output Use the Same Extension
214
215 We don’t have that luxury for Excel and PDF files, each for a different
216 reason:
217
218 * **Excel:** Excel has no way to work with the unpacked Zip file
219 contents at all, so we have to unpack it into a subdirectory, which
220 is what we check into Fossil. On making a fresh Fossil checkout, we
221 have to pack that subdirectory’s contents back up into an `*.xlsx`
@@ -237,33 +231,60 @@
231 here.
232
233 ----
234
235
236 ## Footnotes and Digressions
237
238 1. Several other programs also do delta compression, so they’ll also be
239 affected by this problem: [rsync][rs], [Unison][us], [Git][git],
240 etc. When using file copying and synchronization programs *without*
241 delta compression, it’s best to use the most highly-compressed file
242 format you can tolerate, since they copy the whole file any time any
243 bit of it changes.
244
245 2. In fact, a good way to gauge the effectiveness of a given
246 compression scheme is to run its output through the same sort of
247 tests we use to gauge how “random” a given [PRNG][prng] is. Another
248 way to look at it is that if there is a discernible pattern in the
249 output of a compression scheme, it’s information that could be
250 further compressed.
251
252 3. We're using *uncompressed* TIFF here, not [LZW][lzw]- or
253 Zip-compressed TIFF, either of which would give similar results to
254 PNG, which is always zlib-compressed.
255
256 4. The raw data changes somewhat from one run to the next due to the
257 use of random noise in the image to make the zlib/PNG compression
258 more difficult, and the random pixel changes. Those test design
259 choices make this a [Monte Carlo experient][mce]. We’ve found that
260 the overall character of the results doesn’t change from one run to
261 the next.
262
263 The code in the notebook’s third cell drops the first three columns
264 of data because the first column (the empty repository size) is
265 boring, and the subsequent two checkins show the SQLite DB file
266 format settling in with its first few checkins. There’s a single
267 line in the notebook you can comment out to get a bar chart with
268 these data included.
269
270 If you do this, you’ll see a mildly interesting result: the size of
271 the first checkin in the BMP and TIFF cases is roughly the same as
272 that for the PNG case, because both PNG and Fossil use the zlib
273 binary data compression algorithm.
274
275 5. A low-tech format like BMP will have a small edge in practice
276 because TIFF metadata includes the option for multiple timestamps,
277 UUIDs, etc., which bloat the checkin size by creating many small
278 deltas. If you don't need the advantages of TIFF, a less capable
279 image file format will give smaller checkin sizes for a given amount
280 of change.
281
282 6. The `Makefile` above is not battle-tested. Please report bugs and
283 needed extensions [on the forum][for].
284
285 [for]: https://fossil-scm.org/forum/forumpost/15e677f2c8
286 [git]: https://git-scm.com/
287 [lzw]: https://en.wikipedia.org/wiki/Lempel%E2%80%93Ziv%E2%80%93Welch
288 [prng]: https://en.wikipedia.org/wiki/Pseudorandom_number_generator
289 [rs]: https://rsync.samba.org/
290 [us]: http://www.cis.upenn.edu/~bcpierce/unison/
291
--- www/image-format-vs-repo-size.svg
+++ www/image-format-vs-repo-size.svg
@@ -1,533 +1,334 @@
11
<?xml version="1.0" encoding="utf-8" standalone="no"?>
22
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
33
"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
44
<!-- Created with matplotlib (http://matplotlib.org/) -->
5
-<svg height="288pt" version="1.1" viewBox="0 0 504 288" width="504pt" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
5
+<svg height="288pt" version="1.1" viewBox="0 0 432 288" width="432pt" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
66
<defs>
77
<style type="text/css">
88
*{stroke-linecap:butt;stroke-linejoin:round;}
99
</style>
1010
</defs>
1111
<g id="figure_1">
1212
<g id="patch_1">
1313
<path d="M 0 288
14
-L 504 288
15
-L 504 0
14
+L 432 288
15
+L 432 0
1616
L 0 0
1717
z
18
-" style="fill:#ffffff;"/>
18
+" style="fill:none;"/>
1919
</g>
2020
<g id="axes_1">
2121
<g id="patch_2">
22
- <path d="M 63 252
23
-L 453.6 252
24
-L 453.6 34.56
25
-L 63 34.56
22
+ <path d="M 54 256.32
23
+L 388.8 256.32
24
+L 388.8 34.56
25
+L 54 34.56
2626
z
27
-" style="fill:#ffffff;"/>
27
+" style="fill:none;"/>
2828
</g>
2929
<g id="patch_3">
30
- <path clip-path="url(#p60d72f5e8e)" d="M 70.939024 252
31
-L 77.290244 252
32
-L 77.290244 205.23871
33
-L 70.939024 205.23871
30
+ <path clip-path="url(#pbb31c7aa29)" d="M 63 256.32
31
+L 70.2 256.32
32
+L 70.2 175.617561
33
+L 63 175.617561
3434
z
3535
" style="fill:#3b4cc0;stroke:#ffffff;stroke-linejoin:miter;stroke-width:2;"/>
3636
</g>
3737
<g id="patch_4">
38
- <path clip-path="url(#p60d72f5e8e)" d="M 102.695122 252
39
-L 109.046341 252
40
-L 109.046341 195.218433
41
-L 102.695122 195.218433
38
+ <path clip-path="url(#pbb31c7aa29)" d="M 99 256.32
39
+L 106.2 256.32
40
+L 106.2 165.315122
41
+L 99 165.315122
4242
z
4343
" style="fill:#3b4cc0;stroke:#ffffff;stroke-linejoin:miter;stroke-width:2;"/>
4444
</g>
4545
<g id="patch_5">
46
- <path clip-path="url(#p60d72f5e8e)" d="M 134.45122 252
47
-L 140.802439 252
48
-L 140.802439 185.198157
49
-L 134.45122 185.198157
46
+ <path clip-path="url(#pbb31c7aa29)" d="M 135 256.32
47
+L 142.2 256.32
48
+L 142.2 148.14439
49
+L 135 148.14439
5050
z
5151
" style="fill:#3b4cc0;stroke:#ffffff;stroke-linejoin:miter;stroke-width:2;"/>
5252
</g>
5353
<g id="patch_6">
54
- <path clip-path="url(#p60d72f5e8e)" d="M 166.207317 252
55
-L 172.558537 252
56
-L 172.558537 173.507834
57
-L 166.207317 173.507834
54
+ <path clip-path="url(#pbb31c7aa29)" d="M 171 256.32
55
+L 178.2 256.32
56
+L 178.2 141.276098
57
+L 171 141.276098
5858
z
5959
" style="fill:#3b4cc0;stroke:#ffffff;stroke-linejoin:miter;stroke-width:2;"/>
6060
</g>
6161
<g id="patch_7">
62
- <path clip-path="url(#p60d72f5e8e)" d="M 197.963415 252
63
-L 204.314634 252
64
-L 204.314634 161.817512
65
-L 197.963415 161.817512
62
+ <path clip-path="url(#pbb31c7aa29)" d="M 207 256.32
63
+L 214.2 256.32
64
+L 214.2 139.559024
65
+L 207 139.559024
6666
z
6767
" style="fill:#3b4cc0;stroke:#ffffff;stroke-linejoin:miter;stroke-width:2;"/>
6868
</g>
6969
<g id="patch_8">
70
- <path clip-path="url(#p60d72f5e8e)" d="M 229.719512 252
71
-L 236.070732 252
72
-L 236.070732 157.642396
73
-L 229.719512 157.642396
70
+ <path clip-path="url(#pbb31c7aa29)" d="M 243 256.32
71
+L 250.2 256.32
72
+L 250.2 137.841951
73
+L 243 137.841951
7474
z
7575
" style="fill:#3b4cc0;stroke:#ffffff;stroke-linejoin:miter;stroke-width:2;"/>
7676
</g>
7777
<g id="patch_9">
78
- <path clip-path="url(#p60d72f5e8e)" d="M 261.47561 252
79
-L 267.826829 252
80
-L 267.826829 157.642396
81
-L 261.47561 157.642396
78
+ <path clip-path="url(#pbb31c7aa29)" d="M 279 256.32
79
+L 286.2 256.32
80
+L 286.2 136.983415
81
+L 279 136.983415
8282
z
8383
" style="fill:#3b4cc0;stroke:#ffffff;stroke-linejoin:miter;stroke-width:2;"/>
8484
</g>
8585
<g id="patch_10">
86
- <path clip-path="url(#p60d72f5e8e)" d="M 293.231707 252
87
-L 299.582927 252
88
-L 299.582927 140.941935
89
-L 293.231707 140.941935
86
+ <path clip-path="url(#pbb31c7aa29)" d="M 315 256.32
87
+L 322.2 256.32
88
+L 322.2 125.822439
89
+L 315 125.822439
9090
z
9191
" style="fill:#3b4cc0;stroke:#ffffff;stroke-linejoin:miter;stroke-width:2;"/>
9292
</g>
9393
<g id="patch_11">
94
- <path clip-path="url(#p60d72f5e8e)" d="M 324.987805 252
95
-L 331.339024 252
96
-L 331.339024 140.941935
97
-L 324.987805 140.941935
94
+ <path clip-path="url(#pbb31c7aa29)" d="M 351 256.32
95
+L 358.2 256.32
96
+L 358.2 119.812683
97
+L 351 119.812683
9898
z
9999
" style="fill:#3b4cc0;stroke:#ffffff;stroke-linejoin:miter;stroke-width:2;"/>
100100
</g>
101101
<g id="patch_12">
102
- <path clip-path="url(#p60d72f5e8e)" d="M 356.743902 252
103
-L 363.095122 252
104
-L 363.095122 135.096774
105
-L 356.743902 135.096774
102
+ <path clip-path="url(#pbb31c7aa29)" d="M 70.2 256.32
103
+L 77.4 256.32
104
+L 77.4 135.266341
105
+L 70.2 135.266341
106106
z
107
-" style="fill:#3b4cc0;stroke:#ffffff;stroke-linejoin:miter;stroke-width:2;"/>
107
+" style="fill:#aac7fd;stroke:#ffffff;stroke-linejoin:miter;stroke-width:2;"/>
108108
</g>
109109
<g id="patch_13">
110
- <path clip-path="url(#p60d72f5e8e)" d="M 388.5 252
111
-L 394.85122 252
112
-L 394.85122 127.581567
113
-L 388.5 127.581567
110
+ <path clip-path="url(#pbb31c7aa29)" d="M 106.2 256.32
111
+L 113.4 256.32
112
+L 113.4 135.266341
113
+L 106.2 135.266341
114114
z
115
-" style="fill:#3b4cc0;stroke:#ffffff;stroke-linejoin:miter;stroke-width:2;"/>
115
+" style="fill:#aac7fd;stroke:#ffffff;stroke-linejoin:miter;stroke-width:2;"/>
116116
</g>
117117
<g id="patch_14">
118
- <path clip-path="url(#p60d72f5e8e)" d="M 420.256098 252
119
-L 426.607317 252
120
-L 426.607317 124.241475
121
-L 420.256098 124.241475
118
+ <path clip-path="url(#pbb31c7aa29)" d="M 142.2 256.32
119
+L 149.4 256.32
120
+L 149.4 135.266341
121
+L 142.2 135.266341
122122
z
123
-" style="fill:#3b4cc0;stroke:#ffffff;stroke-linejoin:miter;stroke-width:2;"/>
123
+" style="fill:#aac7fd;stroke:#ffffff;stroke-linejoin:miter;stroke-width:2;"/>
124124
</g>
125125
<g id="patch_15">
126
- <path clip-path="url(#p60d72f5e8e)" d="M 77.290244 252
127
-L 83.641463 252
128
-L 83.641463 205.23871
129
-L 77.290244 205.23871
126
+ <path clip-path="url(#pbb31c7aa29)" d="M 178.2 256.32
127
+L 185.4 256.32
128
+L 185.4 135.266341
129
+L 178.2 135.266341
130130
z
131131
" style="fill:#aac7fd;stroke:#ffffff;stroke-linejoin:miter;stroke-width:2;"/>
132132
</g>
133133
<g id="patch_16">
134
- <path clip-path="url(#p60d72f5e8e)" d="M 109.046341 252
135
-L 115.397561 252
136
-L 115.397561 181.858065
137
-L 109.046341 181.858065
134
+ <path clip-path="url(#pbb31c7aa29)" d="M 214.2 256.32
135
+L 221.4 256.32
136
+L 221.4 135.266341
137
+L 214.2 135.266341
138138
z
139139
" style="fill:#aac7fd;stroke:#ffffff;stroke-linejoin:miter;stroke-width:2;"/>
140140
</g>
141141
<g id="patch_17">
142
- <path clip-path="url(#p60d72f5e8e)" d="M 140.802439 252
143
-L 147.153659 252
144
-L 147.153659 157.642396
145
-L 140.802439 157.642396
142
+ <path clip-path="url(#pbb31c7aa29)" d="M 250.2 256.32
143
+L 257.4 256.32
144
+L 257.4 135.266341
145
+L 250.2 135.266341
146146
z
147147
" style="fill:#aac7fd;stroke:#ffffff;stroke-linejoin:miter;stroke-width:2;"/>
148148
</g>
149149
<g id="patch_18">
150
- <path clip-path="url(#p60d72f5e8e)" d="M 172.558537 252
151
-L 178.909756 252
152
-L 178.909756 133.426728
153
-L 172.558537 133.426728
150
+ <path clip-path="url(#pbb31c7aa29)" d="M 286.2 256.32
151
+L 293.4 256.32
152
+L 293.4 135.266341
153
+L 286.2 135.266341
154154
z
155155
" style="fill:#aac7fd;stroke:#ffffff;stroke-linejoin:miter;stroke-width:2;"/>
156156
</g>
157157
<g id="patch_19">
158
- <path clip-path="url(#p60d72f5e8e)" d="M 204.314634 252
159
-L 210.665854 252
160
-L 210.665854 133.426728
161
-L 204.314634 133.426728
158
+ <path clip-path="url(#pbb31c7aa29)" d="M 322.2 256.32
159
+L 329.4 256.32
160
+L 329.4 134.407805
161
+L 322.2 134.407805
162162
z
163163
" style="fill:#aac7fd;stroke:#ffffff;stroke-linejoin:miter;stroke-width:2;"/>
164164
</g>
165165
<g id="patch_20">
166
- <path clip-path="url(#p60d72f5e8e)" d="M 236.070732 252
167
-L 242.421951 252
168
-L 242.421951 133.426728
169
-L 236.070732 133.426728
166
+ <path clip-path="url(#pbb31c7aa29)" d="M 358.2 256.32
167
+L 365.4 256.32
168
+L 365.4 134.407805
169
+L 358.2 134.407805
170170
z
171171
" style="fill:#aac7fd;stroke:#ffffff;stroke-linejoin:miter;stroke-width:2;"/>
172172
</g>
173173
<g id="patch_21">
174
- <path clip-path="url(#p60d72f5e8e)" d="M 267.826829 252
175
-L 274.178049 252
176
-L 274.178049 133.426728
177
-L 267.826829 133.426728
174
+ <path clip-path="url(#pbb31c7aa29)" d="M 77.4 256.32
175
+L 84.6 256.32
176
+L 84.6 136.124878
177
+L 77.4 136.124878
178178
z
179
-" style="fill:#aac7fd;stroke:#ffffff;stroke-linejoin:miter;stroke-width:2;"/>
179
+" style="fill:#f7b89c;stroke:#ffffff;stroke-linejoin:miter;stroke-width:2;"/>
180180
</g>
181181
<g id="patch_22">
182
- <path clip-path="url(#p60d72f5e8e)" d="M 299.582927 252
183
-L 305.934146 252
184
-L 305.934146 133.426728
185
-L 299.582927 133.426728
182
+ <path clip-path="url(#pbb31c7aa29)" d="M 113.4 256.32
183
+L 120.6 256.32
184
+L 120.6 136.124878
185
+L 113.4 136.124878
186186
z
187
-" style="fill:#aac7fd;stroke:#ffffff;stroke-linejoin:miter;stroke-width:2;"/>
187
+" style="fill:#f7b89c;stroke:#ffffff;stroke-linejoin:miter;stroke-width:2;"/>
188188
</g>
189189
<g id="patch_23">
190
- <path clip-path="url(#p60d72f5e8e)" d="M 331.339024 252
191
-L 337.690244 252
192
-L 337.690244 133.426728
193
-L 331.339024 133.426728
190
+ <path clip-path="url(#pbb31c7aa29)" d="M 149.4 256.32
191
+L 156.6 256.32
192
+L 156.6 136.124878
193
+L 149.4 136.124878
194194
z
195
-" style="fill:#aac7fd;stroke:#ffffff;stroke-linejoin:miter;stroke-width:2;"/>
195
+" style="fill:#f7b89c;stroke:#ffffff;stroke-linejoin:miter;stroke-width:2;"/>
196196
</g>
197197
<g id="patch_24">
198
- <path clip-path="url(#p60d72f5e8e)" d="M 363.095122 252
199
-L 369.446341 252
200
-L 369.446341 133.426728
201
-L 363.095122 133.426728
198
+ <path clip-path="url(#pbb31c7aa29)" d="M 185.4 256.32
199
+L 192.6 256.32
200
+L 192.6 136.124878
201
+L 185.4 136.124878
202202
z
203
-" style="fill:#aac7fd;stroke:#ffffff;stroke-linejoin:miter;stroke-width:2;"/>
203
+" style="fill:#f7b89c;stroke:#ffffff;stroke-linejoin:miter;stroke-width:2;"/>
204204
</g>
205205
<g id="patch_25">
206
- <path clip-path="url(#p60d72f5e8e)" d="M 394.85122 252
207
-L 401.202439 252
208
-L 401.202439 132.591705
209
-L 394.85122 132.591705
206
+ <path clip-path="url(#pbb31c7aa29)" d="M 221.4 256.32
207
+L 228.6 256.32
208
+L 228.6 136.124878
209
+L 221.4 136.124878
210210
z
211
-" style="fill:#aac7fd;stroke:#ffffff;stroke-linejoin:miter;stroke-width:2;"/>
211
+" style="fill:#f7b89c;stroke:#ffffff;stroke-linejoin:miter;stroke-width:2;"/>
212212
</g>
213213
<g id="patch_26">
214
- <path clip-path="url(#p60d72f5e8e)" d="M 426.607317 252
215
-L 432.958537 252
216
-L 432.958537 132.591705
217
-L 426.607317 132.591705
214
+ <path clip-path="url(#pbb31c7aa29)" d="M 257.4 256.32
215
+L 264.6 256.32
216
+L 264.6 134.407805
217
+L 257.4 134.407805
218218
z
219
-" style="fill:#aac7fd;stroke:#ffffff;stroke-linejoin:miter;stroke-width:2;"/>
219
+" style="fill:#f7b89c;stroke:#ffffff;stroke-linejoin:miter;stroke-width:2;"/>
220220
</g>
221221
<g id="patch_27">
222
- <path clip-path="url(#p60d72f5e8e)" d="M 83.641463 252
223
-L 89.992683 252
224
-L 89.992683 205.23871
225
-L 83.641463 205.23871
222
+ <path clip-path="url(#pbb31c7aa29)" d="M 293.4 256.32
223
+L 300.6 256.32
224
+L 300.6 134.407805
225
+L 293.4 134.407805
226226
z
227227
" style="fill:#f7b89c;stroke:#ffffff;stroke-linejoin:miter;stroke-width:2;"/>
228228
</g>
229229
<g id="patch_28">
230
- <path clip-path="url(#p60d72f5e8e)" d="M 115.397561 252
231
-L 121.74878 252
232
-L 121.74878 181.858065
233
-L 115.397561 181.858065
230
+ <path clip-path="url(#pbb31c7aa29)" d="M 329.4 256.32
231
+L 336.6 256.32
232
+L 336.6 134.407805
233
+L 329.4 134.407805
234234
z
235235
" style="fill:#f7b89c;stroke:#ffffff;stroke-linejoin:miter;stroke-width:2;"/>
236236
</g>
237237
<g id="patch_29">
238
- <path clip-path="url(#p60d72f5e8e)" d="M 147.153659 252
239
-L 153.504878 252
240
-L 153.504878 157.642396
241
-L 147.153659 157.642396
238
+ <path clip-path="url(#pbb31c7aa29)" d="M 365.4 256.32
239
+L 372.6 256.32
240
+L 372.6 134.407805
241
+L 365.4 134.407805
242242
z
243243
" style="fill:#f7b89c;stroke:#ffffff;stroke-linejoin:miter;stroke-width:2;"/>
244244
</g>
245245
<g id="patch_30">
246
- <path clip-path="url(#p60d72f5e8e)" d="M 178.909756 252
247
-L 185.260976 252
248
-L 185.260976 133.426728
249
-L 178.909756 133.426728
250
-z
251
-" style="fill:#f7b89c;stroke:#ffffff;stroke-linejoin:miter;stroke-width:2;"/>
252
- </g>
253
- <g id="patch_31">
254
- <path clip-path="url(#p60d72f5e8e)" d="M 210.665854 252
255
-L 217.017073 252
256
-L 217.017073 133.426728
257
-L 210.665854 133.426728
258
-z
259
-" style="fill:#f7b89c;stroke:#ffffff;stroke-linejoin:miter;stroke-width:2;"/>
260
- </g>
261
- <g id="patch_32">
262
- <path clip-path="url(#p60d72f5e8e)" d="M 242.421951 252
263
-L 248.773171 252
264
-L 248.773171 133.426728
265
-L 242.421951 133.426728
266
-z
267
-" style="fill:#f7b89c;stroke:#ffffff;stroke-linejoin:miter;stroke-width:2;"/>
268
- </g>
269
- <g id="patch_33">
270
- <path clip-path="url(#p60d72f5e8e)" d="M 274.178049 252
271
-L 280.529268 252
272
-L 280.529268 133.426728
273
-L 274.178049 133.426728
274
-z
275
-" style="fill:#f7b89c;stroke:#ffffff;stroke-linejoin:miter;stroke-width:2;"/>
276
- </g>
277
- <g id="patch_34">
278
- <path clip-path="url(#p60d72f5e8e)" d="M 305.934146 252
279
-L 312.285366 252
280
-L 312.285366 133.426728
281
-L 305.934146 133.426728
282
-z
283
-" style="fill:#f7b89c;stroke:#ffffff;stroke-linejoin:miter;stroke-width:2;"/>
284
- </g>
285
- <g id="patch_35">
286
- <path clip-path="url(#p60d72f5e8e)" d="M 337.690244 252
287
-L 344.041463 252
288
-L 344.041463 133.426728
289
-L 337.690244 133.426728
290
-z
291
-" style="fill:#f7b89c;stroke:#ffffff;stroke-linejoin:miter;stroke-width:2;"/>
292
- </g>
293
- <g id="patch_36">
294
- <path clip-path="url(#p60d72f5e8e)" d="M 369.446341 252
295
-L 375.797561 252
296
-L 375.797561 133.426728
297
-L 369.446341 133.426728
298
-z
299
-" style="fill:#f7b89c;stroke:#ffffff;stroke-linejoin:miter;stroke-width:2;"/>
300
- </g>
301
- <g id="patch_37">
302
- <path clip-path="url(#p60d72f5e8e)" d="M 401.202439 252
303
-L 407.553659 252
304
-L 407.553659 132.591705
305
-L 401.202439 132.591705
306
-z
307
-" style="fill:#f7b89c;stroke:#ffffff;stroke-linejoin:miter;stroke-width:2;"/>
308
- </g>
309
- <g id="patch_38">
310
- <path clip-path="url(#p60d72f5e8e)" d="M 432.958537 252
311
-L 439.309756 252
312
-L 439.309756 132.591705
313
-L 432.958537 132.591705
314
-z
315
-" style="fill:#f7b89c;stroke:#ffffff;stroke-linejoin:miter;stroke-width:2;"/>
316
- </g>
317
- <g id="patch_39">
318
- <path clip-path="url(#p60d72f5e8e)" d="M 89.992683 252
319
-L 96.343902 252
320
-L 96.343902 205.23871
321
-L 89.992683 205.23871
322
-z
323
-" style="fill:#b40426;stroke:#ffffff;stroke-linejoin:miter;stroke-width:2;"/>
324
- </g>
325
- <g id="patch_40">
326
- <path clip-path="url(#p60d72f5e8e)" d="M 121.74878 252
327
-L 128.1 252
328
-L 128.1 185.198157
329
-L 121.74878 185.198157
330
-z
331
-" style="fill:#b40426;stroke:#ffffff;stroke-linejoin:miter;stroke-width:2;"/>
332
- </g>
333
- <g id="patch_41">
334
- <path clip-path="url(#p60d72f5e8e)" d="M 153.504878 252
335
-L 159.856098 252
336
-L 159.856098 162.652535
337
-L 153.504878 162.652535
338
-z
339
-" style="fill:#b40426;stroke:#ffffff;stroke-linejoin:miter;stroke-width:2;"/>
340
- </g>
341
- <g id="patch_42">
342
- <path clip-path="url(#p60d72f5e8e)" d="M 185.260976 252
343
-L 191.612195 252
344
-L 191.612195 130.086636
345
-L 185.260976 130.086636
346
-z
347
-" style="fill:#b40426;stroke:#ffffff;stroke-linejoin:miter;stroke-width:2;"/>
348
- </g>
349
- <g id="patch_43">
350
- <path clip-path="url(#p60d72f5e8e)" d="M 217.017073 252
351
-L 223.368293 252
352
-L 223.368293 127.581567
353
-L 217.017073 127.581567
354
-z
355
-" style="fill:#b40426;stroke:#ffffff;stroke-linejoin:miter;stroke-width:2;"/>
356
- </g>
357
- <g id="patch_44">
358
- <path clip-path="url(#p60d72f5e8e)" d="M 248.773171 252
359
-L 255.12439 252
360
-L 255.12439 100.025806
361
-L 248.773171 100.025806
362
-z
363
-" style="fill:#b40426;stroke:#ffffff;stroke-linejoin:miter;stroke-width:2;"/>
364
- </g>
365
- <g id="patch_45">
366
- <path clip-path="url(#p60d72f5e8e)" d="M 280.529268 252
367
-L 286.880488 252
368
-L 286.880488 98.35576
369
-L 280.529268 98.35576
370
-z
371
-" style="fill:#b40426;stroke:#ffffff;stroke-linejoin:miter;stroke-width:2;"/>
372
- </g>
373
- <g id="patch_46">
374
- <path clip-path="url(#p60d72f5e8e)" d="M 312.285366 252
375
-L 318.636585 252
376
-L 318.636585 94.180645
377
-L 312.285366 94.180645
378
-z
379
-" style="fill:#b40426;stroke:#ffffff;stroke-linejoin:miter;stroke-width:2;"/>
380
- </g>
381
- <g id="patch_47">
382
- <path clip-path="url(#p60d72f5e8e)" d="M 344.041463 252
383
-L 350.392683 252
384
-L 350.392683 76.645161
385
-L 344.041463 76.645161
386
-z
387
-" style="fill:#b40426;stroke:#ffffff;stroke-linejoin:miter;stroke-width:2;"/>
388
- </g>
389
- <g id="patch_48">
390
- <path clip-path="url(#p60d72f5e8e)" d="M 375.797561 252
391
-L 382.14878 252
392
-L 382.14878 65.789862
393
-L 375.797561 65.789862
394
-z
395
-" style="fill:#b40426;stroke:#ffffff;stroke-linejoin:miter;stroke-width:2;"/>
396
- </g>
397
- <g id="patch_49">
398
- <path clip-path="url(#p60d72f5e8e)" d="M 407.553659 252
399
-L 413.904878 252
400
-L 413.904878 50.759447
401
-L 407.553659 50.759447
402
-z
403
-" style="fill:#b40426;stroke:#ffffff;stroke-linejoin:miter;stroke-width:2;"/>
404
- </g>
405
- <g id="patch_50">
406
- <path clip-path="url(#p60d72f5e8e)" d="M 439.309756 252
407
-L 445.660976 252
408
-L 445.660976 44.914286
409
-L 439.309756 44.914286
246
+ <path clip-path="url(#pbb31c7aa29)" d="M 84.6 256.32
247
+L 91.8 256.32
248
+L 91.8 133.549268
249
+L 84.6 133.549268
250
+z
251
+" style="fill:#b40426;stroke:#ffffff;stroke-linejoin:miter;stroke-width:2;"/>
252
+ </g>
253
+ <g id="patch_31">
254
+ <path clip-path="url(#pbb31c7aa29)" d="M 120.6 256.32
255
+L 127.8 256.32
256
+L 127.8 116.378537
257
+L 120.6 116.378537
258
+z
259
+" style="fill:#b40426;stroke:#ffffff;stroke-linejoin:miter;stroke-width:2;"/>
260
+ </g>
261
+ <g id="patch_32">
262
+ <path clip-path="url(#pbb31c7aa29)" d="M 156.6 256.32
263
+L 163.8 256.32
264
+L 163.8 104.359024
265
+L 156.6 104.359024
266
+z
267
+" style="fill:#b40426;stroke:#ffffff;stroke-linejoin:miter;stroke-width:2;"/>
268
+ </g>
269
+ <g id="patch_33">
270
+ <path clip-path="url(#pbb31c7aa29)" d="M 192.6 256.32
271
+L 199.8 256.32
272
+L 199.8 99.207805
273
+L 192.6 99.207805
274
+z
275
+" style="fill:#b40426;stroke:#ffffff;stroke-linejoin:miter;stroke-width:2;"/>
276
+ </g>
277
+ <g id="patch_34">
278
+ <path clip-path="url(#pbb31c7aa29)" d="M 228.6 256.32
279
+L 235.8 256.32
280
+L 235.8 82.89561
281
+L 228.6 82.89561
282
+z
283
+" style="fill:#b40426;stroke:#ffffff;stroke-linejoin:miter;stroke-width:2;"/>
284
+ </g>
285
+ <g id="patch_35">
286
+ <path clip-path="url(#pbb31c7aa29)" d="M 264.6 256.32
287
+L 271.8 256.32
288
+L 271.8 71.734634
289
+L 264.6 71.734634
290
+z
291
+" style="fill:#b40426;stroke:#ffffff;stroke-linejoin:miter;stroke-width:2;"/>
292
+ </g>
293
+ <g id="patch_36">
294
+ <path clip-path="url(#pbb31c7aa29)" d="M 300.6 256.32
295
+L 307.8 256.32
296
+L 307.8 60.573659
297
+L 300.6 60.573659
298
+z
299
+" style="fill:#b40426;stroke:#ffffff;stroke-linejoin:miter;stroke-width:2;"/>
300
+ </g>
301
+ <g id="patch_37">
302
+ <path clip-path="url(#pbb31c7aa29)" d="M 336.6 256.32
303
+L 343.8 256.32
304
+L 343.8 50.27122
305
+L 336.6 50.27122
306
+z
307
+" style="fill:#b40426;stroke:#ffffff;stroke-linejoin:miter;stroke-width:2;"/>
308
+ </g>
309
+ <g id="patch_38">
310
+ <path clip-path="url(#pbb31c7aa29)" d="M 372.6 256.32
311
+L 379.8 256.32
312
+L 379.8 45.12
313
+L 372.6 45.12
410314
z
411315
" style="fill:#b40426;stroke:#ffffff;stroke-linejoin:miter;stroke-width:2;"/>
412316
</g>
413317
<g id="matplotlib.axis_1">
414318
<g id="xtick_1">
415319
<g id="line2d_1">
416320
<defs>
417321
<path d="M 0 0
418322
L 0 3.5
419
-" id="me2969b5817" style="stroke:#000000;stroke-width:0.8;"/>
420
- </defs>
421
- <g>
422
- <use style="stroke:#000000;stroke-width:0.8;" x="83.641463" xlink:href="#me2969b5817" y="252"/>
423
- </g>
424
- </g>
425
- <g id="text_1">
426
- <!-- 0 -->
427
- <defs>
428
- <path d="M 31.78125 66.40625
429
-Q 24.171875 66.40625 20.328125 58.90625
430
-Q 16.5 51.421875 16.5 36.375
431
-Q 16.5 21.390625 20.328125 13.890625
432
-Q 24.171875 6.390625 31.78125 6.390625
433
-Q 39.453125 6.390625 43.28125 13.890625
434
-Q 47.125 21.390625 47.125 36.375
435
-Q 47.125 51.421875 43.28125 58.90625
436
-Q 39.453125 66.40625 31.78125 66.40625
437
-z
438
-M 31.78125 74.21875
439
-Q 44.046875 74.21875 50.515625 64.515625
440
-Q 56.984375 54.828125 56.984375 36.375
441
-Q 56.984375 17.96875 50.515625 8.265625
442
-Q 44.046875 -1.421875 31.78125 -1.421875
443
-Q 19.53125 -1.421875 13.0625 8.265625
444
-Q 6.59375 17.96875 6.59375 36.375
445
-Q 6.59375 54.828125 13.0625 64.515625
446
-Q 19.53125 74.21875 31.78125 74.21875
447
-z
448
-" id="DejaVuSans-30"/>
449
- </defs>
450
- <g transform="translate(86.400838 265.3625)rotate(-90)scale(0.1 -0.1)">
451
- <use xlink:href="#DejaVuSans-30"/>
452
- </g>
453
- </g>
454
- </g>
455
- <g id="xtick_2">
456
- <g id="line2d_2">
457
- <g>
458
- <use style="stroke:#000000;stroke-width:0.8;" x="115.397561" xlink:href="#me2969b5817" y="252"/>
459
- </g>
460
- </g>
461
- <g id="text_2">
462
- <!-- 1 -->
463
- <defs>
464
- <path d="M 12.40625 8.296875
465
-L 28.515625 8.296875
466
-L 28.515625 63.921875
467
-L 10.984375 60.40625
468
-L 10.984375 69.390625
469
-L 28.421875 72.90625
470
-L 38.28125 72.90625
471
-L 38.28125 8.296875
472
-L 54.390625 8.296875
473
-L 54.390625 0
474
-L 12.40625 0
475
-z
476
-" id="DejaVuSans-31"/>
477
- </defs>
478
- <g transform="translate(118.156936 265.3625)rotate(-90)scale(0.1 -0.1)">
479
- <use xlink:href="#DejaVuSans-31"/>
480
- </g>
481
- </g>
482
- </g>
483
- <g id="xtick_3">
484
- <g id="line2d_3">
485
- <g>
486
- <use style="stroke:#000000;stroke-width:0.8;" x="147.153659" xlink:href="#me2969b5817" y="252"/>
487
- </g>
488
- </g>
489
- <g id="text_3">
490
- <!-- 2 -->
491
- <defs>
492
- <path d="M 19.1875 8.296875
493
-L 53.609375 8.296875
494
-L 53.609375 0
495
-L 7.328125 0
496
-L 7.328125 8.296875
497
-Q 12.9375 14.109375 22.625 23.890625
498
-Q 32.328125 33.6875 34.8125 36.53125
499
-Q 39.546875 41.84375 41.421875 45.53125
500
-Q 43.3125 49.21875 43.3125 52.78125
501
-Q 43.3125 58.59375 39.234375 62.25
502
-Q 35.15625 65.921875 28.609375 65.921875
503
-Q 23.96875 65.921875 18.8125 64.3125
504
-Q 13.671875 62.703125 7.8125 59.421875
505
-L 7.8125 69.390625
506
-Q 13.765625 71.78125 18.9375 73
507
-Q 24.125 74.21875 28.421875 74.21875
508
-Q 39.75 74.21875 46.484375 68.546875
509
-Q 53.21875 62.890625 53.21875 53.421875
510
-Q 53.21875 48.921875 51.53125 44.890625
511
-Q 49.859375 40.875 45.40625 35.40625
512
-Q 44.1875 33.984375 37.640625 27.21875
513
-Q 31.109375 20.453125 19.1875 8.296875
514
-z
515
-" id="DejaVuSans-32"/>
516
- </defs>
517
- <g transform="translate(149.913034 265.3625)rotate(-90)scale(0.1 -0.1)">
518
- <use xlink:href="#DejaVuSans-32"/>
519
- </g>
520
- </g>
521
- </g>
522
- <g id="xtick_4">
523
- <g id="line2d_4">
524
- <g>
525
- <use style="stroke:#000000;stroke-width:0.8;" x="178.909756" xlink:href="#me2969b5817" y="252"/>
526
- </g>
527
- </g>
528
- <g id="text_4">
323
+" id="m445964aa5c" style="stroke:#000000;stroke-width:0.8;"/>
324
+ </defs>
325
+ <g>
326
+ <use style="stroke:#000000;stroke-width:0.8;" x="77.4" xlink:href="#m445964aa5c" y="256.32"/>
327
+ </g>
328
+ </g>
329
+ <g id="text_1">
529330
<!-- 3 -->
530331
<defs>
531332
<path d="M 40.578125 39.3125
532333
Q 47.65625 37.796875 51.625 33
533334
Q 55.609375 28.21875 55.609375 21.1875
@@ -559,22 +360,22 @@
559360
Q 53.90625 49.265625 50.4375 45.09375
560361
Q 46.96875 40.921875 40.578125 39.3125
561362
z
562363
" id="DejaVuSans-33"/>
563364
</defs>
564
- <g transform="translate(181.669131 265.3625)rotate(-90)scale(0.1 -0.1)">
365
+ <g transform="translate(80.159375 269.6825)rotate(-90)scale(0.1 -0.1)">
565366
<use xlink:href="#DejaVuSans-33"/>
566367
</g>
567368
</g>
568369
</g>
569
- <g id="xtick_5">
570
- <g id="line2d_5">
370
+ <g id="xtick_2">
371
+ <g id="line2d_2">
571372
<g>
572
- <use style="stroke:#000000;stroke-width:0.8;" x="210.665854" xlink:href="#me2969b5817" y="252"/>
373
+ <use style="stroke:#000000;stroke-width:0.8;" x="113.4" xlink:href="#m445964aa5c" y="256.32"/>
573374
</g>
574375
</g>
575
- <g id="text_5">
376
+ <g id="text_2">
576377
<!-- 4 -->
577378
<defs>
578379
<path d="M 37.796875 64.3125
579380
L 12.890625 25.390625
580381
L 37.796875 25.390625
@@ -591,22 +392,22 @@
591392
L 4.890625 17.1875
592393
L 4.890625 26.703125
593394
z
594395
" id="DejaVuSans-34"/>
595396
</defs>
596
- <g transform="translate(213.425229 265.3625)rotate(-90)scale(0.1 -0.1)">
397
+ <g transform="translate(116.159375 269.6825)rotate(-90)scale(0.1 -0.1)">
597398
<use xlink:href="#DejaVuSans-34"/>
598399
</g>
599400
</g>
600401
</g>
601
- <g id="xtick_6">
602
- <g id="line2d_6">
402
+ <g id="xtick_3">
403
+ <g id="line2d_3">
603404
<g>
604
- <use style="stroke:#000000;stroke-width:0.8;" x="242.421951" xlink:href="#me2969b5817" y="252"/>
405
+ <use style="stroke:#000000;stroke-width:0.8;" x="149.4" xlink:href="#m445964aa5c" y="256.32"/>
605406
</g>
606407
</g>
607
- <g id="text_6">
408
+ <g id="text_3">
608409
<!-- 5 -->
609410
<defs>
610411
<path d="M 10.796875 72.90625
611412
L 49.515625 72.90625
612413
L 49.515625 64.59375
@@ -630,22 +431,22 @@
630431
Q 22.75 39.890625 18.8125 39.015625
631432
Q 14.890625 38.140625 10.796875 36.28125
632433
z
633434
" id="DejaVuSans-35"/>
634435
</defs>
635
- <g transform="translate(245.181326 265.3625)rotate(-90)scale(0.1 -0.1)">
436
+ <g transform="translate(152.159375 269.6825)rotate(-90)scale(0.1 -0.1)">
636437
<use xlink:href="#DejaVuSans-35"/>
637438
</g>
638439
</g>
639440
</g>
640
- <g id="xtick_7">
641
- <g id="line2d_7">
441
+ <g id="xtick_4">
442
+ <g id="line2d_4">
642443
<g>
643
- <use style="stroke:#000000;stroke-width:0.8;" x="274.178049" xlink:href="#me2969b5817" y="252"/>
444
+ <use style="stroke:#000000;stroke-width:0.8;" x="185.4" xlink:href="#m445964aa5c" y="256.32"/>
644445
</g>
645446
</g>
646
- <g id="text_7">
447
+ <g id="text_4">
647448
<!-- 6 -->
648449
<defs>
649450
<path d="M 33.015625 40.375
650451
Q 26.375 40.375 22.484375 35.828125
651452
Q 18.609375 31.296875 18.609375 23.390625
@@ -675,22 +476,22 @@
675476
Q 40.921875 74.21875 44.703125 73.484375
676477
Q 48.484375 72.75 52.59375 71.296875
677478
z
678479
" id="DejaVuSans-36"/>
679480
</defs>
680
- <g transform="translate(276.937424 265.3625)rotate(-90)scale(0.1 -0.1)">
481
+ <g transform="translate(188.159375 269.6825)rotate(-90)scale(0.1 -0.1)">
681482
<use xlink:href="#DejaVuSans-36"/>
682483
</g>
683484
</g>
684485
</g>
685
- <g id="xtick_8">
686
- <g id="line2d_8">
486
+ <g id="xtick_5">
487
+ <g id="line2d_5">
687488
<g>
688
- <use style="stroke:#000000;stroke-width:0.8;" x="305.934146" xlink:href="#me2969b5817" y="252"/>
489
+ <use style="stroke:#000000;stroke-width:0.8;" x="221.4" xlink:href="#m445964aa5c" y="256.32"/>
689490
</g>
690491
</g>
691
- <g id="text_8">
492
+ <g id="text_5">
692493
<!-- 7 -->
693494
<defs>
694495
<path d="M 8.203125 72.90625
695496
L 55.078125 72.90625
696497
L 55.078125 68.703125
@@ -699,22 +500,22 @@
699500
L 43.21875 64.59375
700501
L 8.203125 64.59375
701502
z
702503
" id="DejaVuSans-37"/>
703504
</defs>
704
- <g transform="translate(308.693521 265.3625)rotate(-90)scale(0.1 -0.1)">
505
+ <g transform="translate(224.159375 269.6825)rotate(-90)scale(0.1 -0.1)">
705506
<use xlink:href="#DejaVuSans-37"/>
706507
</g>
707508
</g>
708509
</g>
709
- <g id="xtick_9">
710
- <g id="line2d_9">
510
+ <g id="xtick_6">
511
+ <g id="line2d_6">
711512
<g>
712
- <use style="stroke:#000000;stroke-width:0.8;" x="337.690244" xlink:href="#me2969b5817" y="252"/>
513
+ <use style="stroke:#000000;stroke-width:0.8;" x="257.4" xlink:href="#m445964aa5c" y="256.32"/>
713514
</g>
714515
</g>
715
- <g id="text_9">
516
+ <g id="text_6">
716517
<!-- 8 -->
717518
<defs>
718519
<path d="M 31.78125 34.625
719520
Q 24.75 34.625 20.71875 30.859375
720521
Q 16.703125 27.09375 16.703125 20.515625
@@ -753,22 +554,22 @@
753554
Q 25.390625 66.40625 21.84375 63.234375
754555
Q 18.3125 60.0625 18.3125 54.390625
755556
z
756557
" id="DejaVuSans-38"/>
757558
</defs>
758
- <g transform="translate(340.449619 265.3625)rotate(-90)scale(0.1 -0.1)">
559
+ <g transform="translate(260.159375 269.6825)rotate(-90)scale(0.1 -0.1)">
759560
<use xlink:href="#DejaVuSans-38"/>
760561
</g>
761562
</g>
762563
</g>
763
- <g id="xtick_10">
764
- <g id="line2d_10">
564
+ <g id="xtick_7">
565
+ <g id="line2d_7">
765566
<g>
766
- <use style="stroke:#000000;stroke-width:0.8;" x="369.446341" xlink:href="#me2969b5817" y="252"/>
567
+ <use style="stroke:#000000;stroke-width:0.8;" x="293.4" xlink:href="#m445964aa5c" y="256.32"/>
767568
</g>
768569
</g>
769
- <g id="text_10">
570
+ <g id="text_7">
770571
<!-- 9 -->
771572
<defs>
772573
<path d="M 10.984375 1.515625
773574
L 10.984375 10.5
774575
Q 14.703125 8.734375 18.5 7.8125
@@ -798,192 +599,651 @@
798599
Q 16.21875 41.5 20.09375 36.953125
799600
Q 23.96875 32.421875 30.609375 32.421875
800601
z
801602
" id="DejaVuSans-39"/>
802603
</defs>
803
- <g transform="translate(372.205716 265.3625)rotate(-90)scale(0.1 -0.1)">
604
+ <g transform="translate(296.159375 269.6825)rotate(-90)scale(0.1 -0.1)">
804605
<use xlink:href="#DejaVuSans-39"/>
805606
</g>
806607
</g>
807608
</g>
808
- <g id="xtick_11">
809
- <g id="line2d_11">
609
+ <g id="xtick_8">
610
+ <g id="line2d_8">
810611
<g>
811
- <use style="stroke:#000000;stroke-width:0.8;" x="401.202439" xlink:href="#me2969b5817" y="252"/>
612
+ <use style="stroke:#000000;stroke-width:0.8;" x="329.4" xlink:href="#m445964aa5c" y="256.32"/>
812613
</g>
813614
</g>
814
- <g id="text_11">
615
+ <g id="text_8">
815616
<!-- 10 -->
816
- <g transform="translate(403.961814 271.725)rotate(-90)scale(0.1 -0.1)">
617
+ <defs>
618
+ <path d="M 12.40625 8.296875
619
+L 28.515625 8.296875
620
+L 28.515625 63.921875
621
+L 10.984375 60.40625
622
+L 10.984375 69.390625
623
+L 28.421875 72.90625
624
+L 38.28125 72.90625
625
+L 38.28125 8.296875
626
+L 54.390625 8.296875
627
+L 54.390625 0
628
+L 12.40625 0
629
+z
630
+" id="DejaVuSans-31"/>
631
+ <path d="M 31.78125 66.40625
632
+Q 24.171875 66.40625 20.328125 58.90625
633
+Q 16.5 51.421875 16.5 36.375
634
+Q 16.5 21.390625 20.328125 13.890625
635
+Q 24.171875 6.390625 31.78125 6.390625
636
+Q 39.453125 6.390625 43.28125 13.890625
637
+Q 47.125 21.390625 47.125 36.375
638
+Q 47.125 51.421875 43.28125 58.90625
639
+Q 39.453125 66.40625 31.78125 66.40625
640
+z
641
+M 31.78125 74.21875
642
+Q 44.046875 74.21875 50.515625 64.515625
643
+Q 56.984375 54.828125 56.984375 36.375
644
+Q 56.984375 17.96875 50.515625 8.265625
645
+Q 44.046875 -1.421875 31.78125 -1.421875
646
+Q 19.53125 -1.421875 13.0625 8.265625
647
+Q 6.59375 17.96875 6.59375 36.375
648
+Q 6.59375 54.828125 13.0625 64.515625
649
+Q 19.53125 74.21875 31.78125 74.21875
650
+z
651
+" id="DejaVuSans-30"/>
652
+ </defs>
653
+ <g transform="translate(332.159375 276.045)rotate(-90)scale(0.1 -0.1)">
817654
<use xlink:href="#DejaVuSans-31"/>
818655
<use x="63.623047" xlink:href="#DejaVuSans-30"/>
819656
</g>
820657
</g>
821658
</g>
822
- <g id="xtick_12">
823
- <g id="line2d_12">
659
+ <g id="xtick_9">
660
+ <g id="line2d_9">
824661
<g>
825
- <use style="stroke:#000000;stroke-width:0.8;" x="432.958537" xlink:href="#me2969b5817" y="252"/>
662
+ <use style="stroke:#000000;stroke-width:0.8;" x="365.4" xlink:href="#m445964aa5c" y="256.32"/>
826663
</g>
827664
</g>
828
- <g id="text_12">
665
+ <g id="text_9">
829666
<!-- 11 -->
830
- <g transform="translate(435.717912 271.725)rotate(-90)scale(0.1 -0.1)">
667
+ <g transform="translate(368.159375 276.045)rotate(-90)scale(0.1 -0.1)">
831668
<use xlink:href="#DejaVuSans-31"/>
832669
<use x="63.623047" xlink:href="#DejaVuSans-31"/>
833670
</g>
834671
</g>
835672
</g>
673
+ <g id="text_10">
674
+ <!-- Checkin index -->
675
+ <defs>
676
+ <path d="M 64.40625 67.28125
677
+L 64.40625 56.890625
678
+Q 59.421875 61.53125 53.78125 63.8125
679
+Q 48.140625 66.109375 41.796875 66.109375
680
+Q 29.296875 66.109375 22.65625 58.46875
681
+Q 16.015625 50.828125 16.015625 36.375
682
+Q 16.015625 21.96875 22.65625 14.328125
683
+Q 29.296875 6.6875 41.796875 6.6875
684
+Q 48.140625 6.6875 53.78125 8.984375
685
+Q 59.421875 11.28125 64.40625 15.921875
686
+L 64.40625 5.609375
687
+Q 59.234375 2.09375 53.4375 0.328125
688
+Q 47.65625 -1.421875 41.21875 -1.421875
689
+Q 24.65625 -1.421875 15.125 8.703125
690
+Q 5.609375 18.84375 5.609375 36.375
691
+Q 5.609375 53.953125 15.125 64.078125
692
+Q 24.65625 74.21875 41.21875 74.21875
693
+Q 47.75 74.21875 53.53125 72.484375
694
+Q 59.328125 70.75 64.40625 67.28125
695
+z
696
+" id="DejaVuSans-43"/>
697
+ <path d="M 54.890625 33.015625
698
+L 54.890625 0
699
+L 45.90625 0
700
+L 45.90625 32.71875
701
+Q 45.90625 40.484375 42.875 44.328125
702
+Q 39.84375 48.1875 33.796875 48.1875
703
+Q 26.515625 48.1875 22.3125 43.546875
704
+Q 18.109375 38.921875 18.109375 30.90625
705
+L 18.109375 0
706
+L 9.078125 0
707
+L 9.078125 75.984375
708
+L 18.109375 75.984375
709
+L 18.109375 46.1875
710
+Q 21.34375 51.125 25.703125 53.5625
711
+Q 30.078125 56 35.796875 56
712
+Q 45.21875 56 50.046875 50.171875
713
+Q 54.890625 44.34375 54.890625 33.015625
714
+z
715
+" id="DejaVuSans-68"/>
716
+ <path d="M 56.203125 29.59375
717
+L 56.203125 25.203125
718
+L 14.890625 25.203125
719
+Q 15.484375 15.921875 20.484375 11.0625
720
+Q 25.484375 6.203125 34.421875 6.203125
721
+Q 39.59375 6.203125 44.453125 7.46875
722
+Q 49.3125 8.734375 54.109375 11.28125
723
+L 54.109375 2.78125
724
+Q 49.265625 0.734375 44.1875 -0.34375
725
+Q 39.109375 -1.421875 33.890625 -1.421875
726
+Q 20.796875 -1.421875 13.15625 6.1875
727
+Q 5.515625 13.8125 5.515625 26.8125
728
+Q 5.515625 40.234375 12.765625 48.109375
729
+Q 20.015625 56 32.328125 56
730
+Q 43.359375 56 49.78125 48.890625
731
+Q 56.203125 41.796875 56.203125 29.59375
732
+z
733
+M 47.21875 32.234375
734
+Q 47.125 39.59375 43.09375 43.984375
735
+Q 39.0625 48.390625 32.421875 48.390625
736
+Q 24.90625 48.390625 20.390625 44.140625
737
+Q 15.875 39.890625 15.1875 32.171875
738
+z
739
+" id="DejaVuSans-65"/>
740
+ <path d="M 48.78125 52.59375
741
+L 48.78125 44.1875
742
+Q 44.96875 46.296875 41.140625 47.34375
743
+Q 37.3125 48.390625 33.40625 48.390625
744
+Q 24.65625 48.390625 19.8125 42.84375
745
+Q 14.984375 37.3125 14.984375 27.296875
746
+Q 14.984375 17.28125 19.8125 11.734375
747
+Q 24.65625 6.203125 33.40625 6.203125
748
+Q 37.3125 6.203125 41.140625 7.25
749
+Q 44.96875 8.296875 48.78125 10.40625
750
+L 48.78125 2.09375
751
+Q 45.015625 0.34375 40.984375 -0.53125
752
+Q 36.96875 -1.421875 32.421875 -1.421875
753
+Q 20.0625 -1.421875 12.78125 6.34375
754
+Q 5.515625 14.109375 5.515625 27.296875
755
+Q 5.515625 40.671875 12.859375 48.328125
756
+Q 20.21875 56 33.015625 56
757
+Q 37.15625 56 41.109375 55.140625
758
+Q 45.0625 54.296875 48.78125 52.59375
759
+z
760
+" id="DejaVuSans-63"/>
761
+ <path d="M 9.078125 75.984375
762
+L 18.109375 75.984375
763
+L 18.109375 31.109375
764
+L 44.921875 54.6875
765
+L 56.390625 54.6875
766
+L 27.390625 29.109375
767
+L 57.625 0
768
+L 45.90625 0
769
+L 18.109375 26.703125
770
+L 18.109375 0
771
+L 9.078125 0
772
+z
773
+" id="DejaVuSans-6b"/>
774
+ <path d="M 9.421875 54.6875
775
+L 18.40625 54.6875
776
+L 18.40625 0
777
+L 9.421875 0
778
+z
779
+M 9.421875 75.984375
780
+L 18.40625 75.984375
781
+L 18.40625 64.59375
782
+L 9.421875 64.59375
783
+z
784
+" id="DejaVuSans-69"/>
785
+ <path d="M 54.890625 33.015625
786
+L 54.890625 0
787
+L 45.90625 0
788
+L 45.90625 32.71875
789
+Q 45.90625 40.484375 42.875 44.328125
790
+Q 39.84375 48.1875 33.796875 48.1875
791
+Q 26.515625 48.1875 22.3125 43.546875
792
+Q 18.109375 38.921875 18.109375 30.90625
793
+L 18.109375 0
794
+L 9.078125 0
795
+L 9.078125 54.6875
796
+L 18.109375 54.6875
797
+L 18.109375 46.1875
798
+Q 21.34375 51.125 25.703125 53.5625
799
+Q 30.078125 56 35.796875 56
800
+Q 45.21875 56 50.046875 50.171875
801
+Q 54.890625 44.34375 54.890625 33.015625
802
+z
803
+" id="DejaVuSans-6e"/>
804
+ <path id="DejaVuSans-20"/>
805
+ <path d="M 45.40625 46.390625
806
+L 45.40625 75.984375
807
+L 54.390625 75.984375
808
+L 54.390625 0
809
+L 45.40625 0
810
+L 45.40625 8.203125
811
+Q 42.578125 3.328125 38.25 0.953125
812
+Q 33.9375 -1.421875 27.875 -1.421875
813
+Q 17.96875 -1.421875 11.734375 6.484375
814
+Q 5.515625 14.40625 5.515625 27.296875
815
+Q 5.515625 40.1875 11.734375 48.09375
816
+Q 17.96875 56 27.875 56
817
+Q 33.9375 56 38.25 53.625
818
+Q 42.578125 51.265625 45.40625 46.390625
819
+z
820
+M 14.796875 27.296875
821
+Q 14.796875 17.390625 18.875 11.75
822
+Q 22.953125 6.109375 30.078125 6.109375
823
+Q 37.203125 6.109375 41.296875 11.75
824
+Q 45.40625 17.390625 45.40625 27.296875
825
+Q 45.40625 37.203125 41.296875 42.84375
826
+Q 37.203125 48.484375 30.078125 48.484375
827
+Q 22.953125 48.484375 18.875 42.84375
828
+Q 14.796875 37.203125 14.796875 27.296875
829
+z
830
+" id="DejaVuSans-64"/>
831
+ <path d="M 54.890625 54.6875
832
+L 35.109375 28.078125
833
+L 55.90625 0
834
+L 45.3125 0
835
+L 29.390625 21.484375
836
+L 13.484375 0
837
+L 2.875 0
838
+L 24.125 28.609375
839
+L 4.6875 54.6875
840
+L 15.28125 54.6875
841
+L 29.78125 35.203125
842
+L 44.28125 54.6875
843
+z
844
+" id="DejaVuSans-78"/>
845
+ </defs>
846
+ <g transform="translate(186.104688 287.643438)scale(0.1 -0.1)">
847
+ <use xlink:href="#DejaVuSans-43"/>
848
+ <use x="69.824219" xlink:href="#DejaVuSans-68"/>
849
+ <use x="133.203125" xlink:href="#DejaVuSans-65"/>
850
+ <use x="194.726562" xlink:href="#DejaVuSans-63"/>
851
+ <use x="249.707031" xlink:href="#DejaVuSans-6b"/>
852
+ <use x="307.617188" xlink:href="#DejaVuSans-69"/>
853
+ <use x="335.400391" xlink:href="#DejaVuSans-6e"/>
854
+ <use x="398.779297" xlink:href="#DejaVuSans-20"/>
855
+ <use x="430.566406" xlink:href="#DejaVuSans-69"/>
856
+ <use x="458.349609" xlink:href="#DejaVuSans-6e"/>
857
+ <use x="521.728516" xlink:href="#DejaVuSans-64"/>
858
+ <use x="585.205078" xlink:href="#DejaVuSans-65"/>
859
+ <use x="646.712891" xlink:href="#DejaVuSans-78"/>
860
+ </g>
861
+ </g>
836862
</g>
837863
<g id="matplotlib.axis_2">
838864
<g id="ytick_1">
839
- <g id="line2d_13">
865
+ <g id="line2d_10">
840866
<defs>
841867
<path d="M 0 0
842868
L -3.5 0
843
-" id="m266e515e7d" style="stroke:#000000;stroke-width:0.8;"/>
869
+" id="mdf25573cb4" style="stroke:#000000;stroke-width:0.8;"/>
844870
</defs>
845871
<g>
846
- <use style="stroke:#000000;stroke-width:0.8;" x="63" xlink:href="#m266e515e7d" y="252"/>
872
+ <use style="stroke:#000000;stroke-width:0.8;" x="54" xlink:href="#mdf25573cb4" y="256.32"/>
847873
</g>
848874
</g>
849
- <g id="text_13">
875
+ <g id="text_11">
850876
<!-- 0.0 -->
851877
<defs>
852878
<path d="M 10.6875 12.40625
853879
L 21 12.40625
854880
L 21 0
855881
L 10.6875 0
856882
z
857883
" id="DejaVuSans-2e"/>
858884
</defs>
859
- <g transform="translate(40.096875 255.799219)scale(0.1 -0.1)">
885
+ <g transform="translate(31.096875 260.119219)scale(0.1 -0.1)">
860886
<use xlink:href="#DejaVuSans-30"/>
861887
<use x="63.623047" xlink:href="#DejaVuSans-2e"/>
862888
<use x="95.410156" xlink:href="#DejaVuSans-30"/>
863889
</g>
864890
</g>
865891
</g>
866892
<g id="ytick_2">
867
- <g id="line2d_14">
893
+ <g id="line2d_11">
868894
<g>
869
- <use style="stroke:#000000;stroke-width:0.8;" x="63" xlink:href="#m266e515e7d" y="209.24682"/>
895
+ <use style="stroke:#000000;stroke-width:0.8;" x="54" xlink:href="#mdf25573cb4" y="212.362927"/>
870896
</g>
871897
</g>
872
- <g id="text_14">
898
+ <g id="text_12">
873899
<!-- 0.2 -->
874
- <g transform="translate(40.096875 213.046039)scale(0.1 -0.1)">
900
+ <defs>
901
+ <path d="M 19.1875 8.296875
902
+L 53.609375 8.296875
903
+L 53.609375 0
904
+L 7.328125 0
905
+L 7.328125 8.296875
906
+Q 12.9375 14.109375 22.625 23.890625
907
+Q 32.328125 33.6875 34.8125 36.53125
908
+Q 39.546875 41.84375 41.421875 45.53125
909
+Q 43.3125 49.21875 43.3125 52.78125
910
+Q 43.3125 58.59375 39.234375 62.25
911
+Q 35.15625 65.921875 28.609375 65.921875
912
+Q 23.96875 65.921875 18.8125 64.3125
913
+Q 13.671875 62.703125 7.8125 59.421875
914
+L 7.8125 69.390625
915
+Q 13.765625 71.78125 18.9375 73
916
+Q 24.125 74.21875 28.421875 74.21875
917
+Q 39.75 74.21875 46.484375 68.546875
918
+Q 53.21875 62.890625 53.21875 53.421875
919
+Q 53.21875 48.921875 51.53125 44.890625
920
+Q 49.859375 40.875 45.40625 35.40625
921
+Q 44.1875 33.984375 37.640625 27.21875
922
+Q 31.109375 20.453125 19.1875 8.296875
923
+z
924
+" id="DejaVuSans-32"/>
925
+ </defs>
926
+ <g transform="translate(31.096875 216.162146)scale(0.1 -0.1)">
875927
<use xlink:href="#DejaVuSans-30"/>
876928
<use x="63.623047" xlink:href="#DejaVuSans-2e"/>
877929
<use x="95.410156" xlink:href="#DejaVuSans-32"/>
878930
</g>
879931
</g>
880932
</g>
881933
<g id="ytick_3">
882
- <g id="line2d_15">
934
+ <g id="line2d_12">
883935
<g>
884
- <use style="stroke:#000000;stroke-width:0.8;" x="63" xlink:href="#m266e515e7d" y="166.493641"/>
936
+ <use style="stroke:#000000;stroke-width:0.8;" x="54" xlink:href="#mdf25573cb4" y="168.405854"/>
885937
</g>
886938
</g>
887
- <g id="text_15">
939
+ <g id="text_13">
888940
<!-- 0.4 -->
889
- <g transform="translate(40.096875 170.292859)scale(0.1 -0.1)">
941
+ <g transform="translate(31.096875 172.205072)scale(0.1 -0.1)">
890942
<use xlink:href="#DejaVuSans-30"/>
891943
<use x="63.623047" xlink:href="#DejaVuSans-2e"/>
892944
<use x="95.410156" xlink:href="#DejaVuSans-34"/>
893945
</g>
894946
</g>
895947
</g>
896948
<g id="ytick_4">
897
- <g id="line2d_16">
949
+ <g id="line2d_13">
898950
<g>
899
- <use style="stroke:#000000;stroke-width:0.8;" x="63" xlink:href="#m266e515e7d" y="123.740461"/>
951
+ <use style="stroke:#000000;stroke-width:0.8;" x="54" xlink:href="#mdf25573cb4" y="124.44878"/>
900952
</g>
901953
</g>
902
- <g id="text_16">
954
+ <g id="text_14">
903955
<!-- 0.6 -->
904
- <g transform="translate(40.096875 127.53968)scale(0.1 -0.1)">
956
+ <g transform="translate(31.096875 128.247999)scale(0.1 -0.1)">
905957
<use xlink:href="#DejaVuSans-30"/>
906958
<use x="63.623047" xlink:href="#DejaVuSans-2e"/>
907959
<use x="95.410156" xlink:href="#DejaVuSans-36"/>
908960
</g>
909961
</g>
910962
</g>
911963
<g id="ytick_5">
912
- <g id="line2d_17">
964
+ <g id="line2d_14">
913965
<g>
914
- <use style="stroke:#000000;stroke-width:0.8;" x="63" xlink:href="#m266e515e7d" y="80.987281"/>
966
+ <use style="stroke:#000000;stroke-width:0.8;" x="54" xlink:href="#mdf25573cb4" y="80.491707"/>
915967
</g>
916968
</g>
917
- <g id="text_17">
969
+ <g id="text_15">
918970
<!-- 0.8 -->
919
- <g transform="translate(40.096875 84.7865)scale(0.1 -0.1)">
971
+ <g transform="translate(31.096875 84.290926)scale(0.1 -0.1)">
920972
<use xlink:href="#DejaVuSans-30"/>
921973
<use x="63.623047" xlink:href="#DejaVuSans-2e"/>
922974
<use x="95.410156" xlink:href="#DejaVuSans-38"/>
923975
</g>
924976
</g>
925977
</g>
926978
<g id="ytick_6">
927
- <g id="line2d_18">
979
+ <g id="line2d_15">
928980
<g>
929
- <use style="stroke:#000000;stroke-width:0.8;" x="63" xlink:href="#m266e515e7d" y="38.234101"/>
981
+ <use style="stroke:#000000;stroke-width:0.8;" x="54" xlink:href="#mdf25573cb4" y="36.534634"/>
930982
</g>
931983
</g>
932
- <g id="text_18">
984
+ <g id="text_16">
933985
<!-- 1.0 -->
934
- <g transform="translate(40.096875 42.03332)scale(0.1 -0.1)">
986
+ <g transform="translate(31.096875 40.333853)scale(0.1 -0.1)">
935987
<use xlink:href="#DejaVuSans-31"/>
936988
<use x="63.623047" xlink:href="#DejaVuSans-2e"/>
937989
<use x="95.410156" xlink:href="#DejaVuSans-30"/>
938990
</g>
939991
</g>
940992
</g>
941
- </g>
942
- <g id="patch_51">
943
- <path d="M 63 252
944
-L 63 34.56
945
-" style="fill:none;stroke:#000000;stroke-linecap:square;stroke-linejoin:miter;stroke-width:0.8;"/>
946
- </g>
947
- <g id="patch_52">
948
- <path d="M 453.6 252
949
-L 453.6 34.56
950
-" style="fill:none;stroke:#000000;stroke-linecap:square;stroke-linejoin:miter;stroke-width:0.8;"/>
951
- </g>
952
- <g id="patch_53">
953
- <path d="M 63 252
954
-L 453.6 252
955
-" style="fill:none;stroke:#000000;stroke-linecap:square;stroke-linejoin:miter;stroke-width:0.8;"/>
956
- </g>
957
- <g id="patch_54">
958
- <path d="M 63 34.56
959
-L 453.6 34.56
993
+ <g id="text_17">
994
+ <!-- Repo size (MiB) -->
995
+ <defs>
996
+ <path d="M 44.390625 34.1875
997
+Q 47.5625 33.109375 50.5625 29.59375
998
+Q 53.5625 26.078125 56.59375 19.921875
999
+L 66.609375 0
1000
+L 56 0
1001
+L 46.6875 18.703125
1002
+Q 43.0625 26.03125 39.671875 28.421875
1003
+Q 36.28125 30.8125 30.421875 30.8125
1004
+L 19.671875 30.8125
1005
+L 19.671875 0
1006
+L 9.8125 0
1007
+L 9.8125 72.90625
1008
+L 32.078125 72.90625
1009
+Q 44.578125 72.90625 50.734375 67.671875
1010
+Q 56.890625 62.453125 56.890625 51.90625
1011
+Q 56.890625 45.015625 53.6875 40.46875
1012
+Q 50.484375 35.9375 44.390625 34.1875
1013
+z
1014
+M 19.671875 64.796875
1015
+L 19.671875 38.921875
1016
+L 32.078125 38.921875
1017
+Q 39.203125 38.921875 42.84375 42.21875
1018
+Q 46.484375 45.515625 46.484375 51.90625
1019
+Q 46.484375 58.296875 42.84375 61.546875
1020
+Q 39.203125 64.796875 32.078125 64.796875
1021
+z
1022
+" id="DejaVuSans-52"/>
1023
+ <path d="M 18.109375 8.203125
1024
+L 18.109375 -20.796875
1025
+L 9.078125 -20.796875
1026
+L 9.078125 54.6875
1027
+L 18.109375 54.6875
1028
+L 18.109375 46.390625
1029
+Q 20.953125 51.265625 25.265625 53.625
1030
+Q 29.59375 56 35.59375 56
1031
+Q 45.5625 56 51.78125 48.09375
1032
+Q 58.015625 40.1875 58.015625 27.296875
1033
+Q 58.015625 14.40625 51.78125 6.484375
1034
+Q 45.5625 -1.421875 35.59375 -1.421875
1035
+Q 29.59375 -1.421875 25.265625 0.953125
1036
+Q 20.953125 3.328125 18.109375 8.203125
1037
+z
1038
+M 48.6875 27.296875
1039
+Q 48.6875 37.203125 44.609375 42.84375
1040
+Q 40.53125 48.484375 33.40625 48.484375
1041
+Q 26.265625 48.484375 22.1875 42.84375
1042
+Q 18.109375 37.203125 18.109375 27.296875
1043
+Q 18.109375 17.390625 22.1875 11.75
1044
+Q 26.265625 6.109375 33.40625 6.109375
1045
+Q 40.53125 6.109375 44.609375 11.75
1046
+Q 48.6875 17.390625 48.6875 27.296875
1047
+z
1048
+" id="DejaVuSans-70"/>
1049
+ <path d="M 30.609375 48.390625
1050
+Q 23.390625 48.390625 19.1875 42.75
1051
+Q 14.984375 37.109375 14.984375 27.296875
1052
+Q 14.984375 17.484375 19.15625 11.84375
1053
+Q 23.34375 6.203125 30.609375 6.203125
1054
+Q 37.796875 6.203125 41.984375 11.859375
1055
+Q 46.1875 17.53125 46.1875 27.296875
1056
+Q 46.1875 37.015625 41.984375 42.703125
1057
+Q 37.796875 48.390625 30.609375 48.390625
1058
+z
1059
+M 30.609375 56
1060
+Q 42.328125 56 49.015625 48.375
1061
+Q 55.71875 40.765625 55.71875 27.296875
1062
+Q 55.71875 13.875 49.015625 6.21875
1063
+Q 42.328125 -1.421875 30.609375 -1.421875
1064
+Q 18.84375 -1.421875 12.171875 6.21875
1065
+Q 5.515625 13.875 5.515625 27.296875
1066
+Q 5.515625 40.765625 12.171875 48.375
1067
+Q 18.84375 56 30.609375 56
1068
+z
1069
+" id="DejaVuSans-6f"/>
1070
+ <path d="M 44.28125 53.078125
1071
+L 44.28125 44.578125
1072
+Q 40.484375 46.53125 36.375 47.5
1073
+Q 32.28125 48.484375 27.875 48.484375
1074
+Q 21.1875 48.484375 17.84375 46.4375
1075
+Q 14.5 44.390625 14.5 40.28125
1076
+Q 14.5 37.15625 16.890625 35.375
1077
+Q 19.28125 33.59375 26.515625 31.984375
1078
+L 29.59375 31.296875
1079
+Q 39.15625 29.25 43.1875 25.515625
1080
+Q 47.21875 21.78125 47.21875 15.09375
1081
+Q 47.21875 7.46875 41.1875 3.015625
1082
+Q 35.15625 -1.421875 24.609375 -1.421875
1083
+Q 20.21875 -1.421875 15.453125 -0.5625
1084
+Q 10.6875 0.296875 5.421875 2
1085
+L 5.421875 11.28125
1086
+Q 10.40625 8.6875 15.234375 7.390625
1087
+Q 20.0625 6.109375 24.8125 6.109375
1088
+Q 31.15625 6.109375 34.5625 8.28125
1089
+Q 37.984375 10.453125 37.984375 14.40625
1090
+Q 37.984375 18.0625 35.515625 20.015625
1091
+Q 33.0625 21.96875 24.703125 23.78125
1092
+L 21.578125 24.515625
1093
+Q 13.234375 26.265625 9.515625 29.90625
1094
+Q 5.8125 33.546875 5.8125 39.890625
1095
+Q 5.8125 47.609375 11.28125 51.796875
1096
+Q 16.75 56 26.8125 56
1097
+Q 31.78125 56 36.171875 55.265625
1098
+Q 40.578125 54.546875 44.28125 53.078125
1099
+z
1100
+" id="DejaVuSans-73"/>
1101
+ <path d="M 5.515625 54.6875
1102
+L 48.1875 54.6875
1103
+L 48.1875 46.484375
1104
+L 14.40625 7.171875
1105
+L 48.1875 7.171875
1106
+L 48.1875 0
1107
+L 4.296875 0
1108
+L 4.296875 8.203125
1109
+L 38.09375 47.515625
1110
+L 5.515625 47.515625
1111
+z
1112
+" id="DejaVuSans-7a"/>
1113
+ <path d="M 31 75.875
1114
+Q 24.46875 64.65625 21.28125 53.65625
1115
+Q 18.109375 42.671875 18.109375 31.390625
1116
+Q 18.109375 20.125 21.3125 9.0625
1117
+Q 24.515625 -2 31 -13.1875
1118
+L 23.1875 -13.1875
1119
+Q 15.875 -1.703125 12.234375 9.375
1120
+Q 8.59375 20.453125 8.59375 31.390625
1121
+Q 8.59375 42.28125 12.203125 53.3125
1122
+Q 15.828125 64.359375 23.1875 75.875
1123
+z
1124
+" id="DejaVuSans-28"/>
1125
+ <path d="M 9.8125 72.90625
1126
+L 24.515625 72.90625
1127
+L 43.109375 23.296875
1128
+L 61.8125 72.90625
1129
+L 76.515625 72.90625
1130
+L 76.515625 0
1131
+L 66.890625 0
1132
+L 66.890625 64.015625
1133
+L 48.09375 14.015625
1134
+L 38.1875 14.015625
1135
+L 19.390625 64.015625
1136
+L 19.390625 0
1137
+L 9.8125 0
1138
+z
1139
+" id="DejaVuSans-4d"/>
1140
+ <path d="M 19.671875 34.8125
1141
+L 19.671875 8.109375
1142
+L 35.5 8.109375
1143
+Q 43.453125 8.109375 47.28125 11.40625
1144
+Q 51.125 14.703125 51.125 21.484375
1145
+Q 51.125 28.328125 47.28125 31.5625
1146
+Q 43.453125 34.8125 35.5 34.8125
1147
+z
1148
+M 19.671875 64.796875
1149
+L 19.671875 42.828125
1150
+L 34.28125 42.828125
1151
+Q 41.5 42.828125 45.03125 45.53125
1152
+Q 48.578125 48.25 48.578125 53.8125
1153
+Q 48.578125 59.328125 45.03125 62.0625
1154
+Q 41.5 64.796875 34.28125 64.796875
1155
+z
1156
+M 9.8125 72.90625
1157
+L 35.015625 72.90625
1158
+Q 46.296875 72.90625 52.390625 68.21875
1159
+Q 58.5 63.53125 58.5 54.890625
1160
+Q 58.5 48.1875 55.375 44.234375
1161
+Q 52.25 40.28125 46.1875 39.3125
1162
+Q 53.46875 37.75 57.5 32.78125
1163
+Q 61.53125 27.828125 61.53125 20.40625
1164
+Q 61.53125 10.640625 54.890625 5.3125
1165
+Q 48.25 0 35.984375 0
1166
+L 9.8125 0
1167
+z
1168
+" id="DejaVuSans-42"/>
1169
+ <path d="M 8.015625 75.875
1170
+L 15.828125 75.875
1171
+Q 23.140625 64.359375 26.78125 53.3125
1172
+Q 30.421875 42.28125 30.421875 31.390625
1173
+Q 30.421875 20.453125 26.78125 9.375
1174
+Q 23.140625 -1.703125 15.828125 -13.1875
1175
+L 8.015625 -13.1875
1176
+Q 14.5 -2 17.703125 9.0625
1177
+Q 20.90625 20.125 20.90625 31.390625
1178
+Q 20.90625 42.671875 17.703125 53.65625
1179
+Q 14.5 64.65625 8.015625 75.875
1180
+z
1181
+" id="DejaVuSans-29"/>
1182
+ </defs>
1183
+ <g transform="translate(25.017187 184.129063)rotate(-90)scale(0.1 -0.1)">
1184
+ <use xlink:href="#DejaVuSans-52"/>
1185
+ <use x="69.419922" xlink:href="#DejaVuSans-65"/>
1186
+ <use x="130.943359" xlink:href="#DejaVuSans-70"/>
1187
+ <use x="194.419922" xlink:href="#DejaVuSans-6f"/>
1188
+ <use x="255.601562" xlink:href="#DejaVuSans-20"/>
1189
+ <use x="287.388672" xlink:href="#DejaVuSans-73"/>
1190
+ <use x="339.488281" xlink:href="#DejaVuSans-69"/>
1191
+ <use x="367.271484" xlink:href="#DejaVuSans-7a"/>
1192
+ <use x="419.761719" xlink:href="#DejaVuSans-65"/>
1193
+ <use x="481.285156" xlink:href="#DejaVuSans-20"/>
1194
+ <use x="513.072266" xlink:href="#DejaVuSans-28"/>
1195
+ <use x="552.085938" xlink:href="#DejaVuSans-4d"/>
1196
+ <use x="638.365234" xlink:href="#DejaVuSans-69"/>
1197
+ <use x="666.148438" xlink:href="#DejaVuSans-42"/>
1198
+ <use x="734.751953" xlink:href="#DejaVuSans-29"/>
1199
+ </g>
1200
+ </g>
1201
+ </g>
1202
+ <g id="patch_39">
1203
+ <path d="M 54 256.32
1204
+L 54 34.56
1205
+" style="fill:none;stroke:#000000;stroke-linecap:square;stroke-linejoin:miter;stroke-width:0.8;"/>
1206
+ </g>
1207
+ <g id="patch_40">
1208
+ <path d="M 388.8 256.32
1209
+L 388.8 34.56
1210
+" style="fill:none;stroke:#000000;stroke-linecap:square;stroke-linejoin:miter;stroke-width:0.8;"/>
1211
+ </g>
1212
+ <g id="patch_41">
1213
+ <path d="M 54 256.32
1214
+L 388.8 256.32
1215
+" style="fill:none;stroke:#000000;stroke-linecap:square;stroke-linejoin:miter;stroke-width:0.8;"/>
1216
+ </g>
1217
+ <g id="patch_42">
1218
+ <path d="M 54 34.56
1219
+L 388.8 34.56
9601220
" style="fill:none;stroke:#000000;stroke-linecap:square;stroke-linejoin:miter;stroke-width:0.8;"/>
9611221
</g>
9621222
<g id="legend_1">
963
- <g id="patch_55">
964
- <path d="M 70 101.2725
965
-L 125.046875 101.2725
966
-Q 127.046875 101.2725 127.046875 99.2725
967
-L 127.046875 41.56
968
-Q 127.046875 39.56 125.046875 39.56
969
-L 70 39.56
970
-Q 68 39.56 68 41.56
971
-L 68 99.2725
972
-Q 68 101.2725 70 101.2725
1223
+ <g id="patch_43">
1224
+ <path d="M 61 101.2725
1225
+L 116.046875 101.2725
1226
+Q 118.046875 101.2725 118.046875 99.2725
1227
+L 118.046875 41.56
1228
+Q 118.046875 39.56 116.046875 39.56
1229
+L 61 39.56
1230
+Q 59 39.56 59 41.56
1231
+L 59 99.2725
1232
+Q 59 101.2725 61 101.2725
9731233
z
9741234
" style="fill:#ffffff;opacity:0.8;stroke:#cccccc;stroke-linejoin:miter;"/>
9751235
</g>
976
- <g id="patch_56">
977
- <path d="M 72 51.158437
978
-L 92 51.158437
979
-L 92 44.158437
980
-L 72 44.158437
1236
+ <g id="patch_44">
1237
+ <path d="M 63 51.158438
1238
+L 83 51.158438
1239
+L 83 44.158438
1240
+L 63 44.158438
9811241
z
9821242
" style="fill:#3b4cc0;stroke:#ffffff;stroke-linejoin:miter;stroke-width:2;"/>
9831243
</g>
984
- <g id="text_19">
1244
+ <g id="text_18">
9851245
<!-- JPEG -->
9861246
<defs>
9871247
<path d="M 9.8125 72.90625
9881248
L 19.671875 72.90625
9891249
L 19.671875 5.078125
@@ -1053,88 +1313,42 @@
10531313
Q 48.046875 6.6875 52.140625 7.59375
10541314
Q 56.25 8.5 59.515625 10.40625
10551315
z
10561316
" id="DejaVuSans-47"/>
10571317
</defs>
1058
- <g transform="translate(100 51.158437)scale(0.1 -0.1)">
1318
+ <g transform="translate(91 51.158438)scale(0.1 -0.1)">
10591319
<use xlink:href="#DejaVuSans-4a"/>
10601320
<use x="29.492188" xlink:href="#DejaVuSans-50"/>
10611321
<use x="89.794922" xlink:href="#DejaVuSans-45"/>
10621322
<use x="152.978516" xlink:href="#DejaVuSans-47"/>
10631323
</g>
10641324
</g>
1065
- <g id="patch_57">
1066
- <path d="M 72 65.836562
1067
-L 92 65.836562
1068
-L 92 58.836562
1069
-L 72 58.836562
1325
+ <g id="patch_45">
1326
+ <path d="M 63 65.836563
1327
+L 83 65.836563
1328
+L 83 58.836563
1329
+L 63 58.836563
10701330
z
10711331
" style="fill:#aac7fd;stroke:#ffffff;stroke-linejoin:miter;stroke-width:2;"/>
10721332
</g>
1073
- <g id="text_20">
1333
+ <g id="text_19">
10741334
<!-- BMP -->
1075
- <defs>
1076
- <path d="M 19.671875 34.8125
1077
-L 19.671875 8.109375
1078
-L 35.5 8.109375
1079
-Q 43.453125 8.109375 47.28125 11.40625
1080
-Q 51.125 14.703125 51.125 21.484375
1081
-Q 51.125 28.328125 47.28125 31.5625
1082
-Q 43.453125 34.8125 35.5 34.8125
1083
-z
1084
-M 19.671875 64.796875
1085
-L 19.671875 42.828125
1086
-L 34.28125 42.828125
1087
-Q 41.5 42.828125 45.03125 45.53125
1088
-Q 48.578125 48.25 48.578125 53.8125
1089
-Q 48.578125 59.328125 45.03125 62.0625
1090
-Q 41.5 64.796875 34.28125 64.796875
1091
-z
1092
-M 9.8125 72.90625
1093
-L 35.015625 72.90625
1094
-Q 46.296875 72.90625 52.390625 68.21875
1095
-Q 58.5 63.53125 58.5 54.890625
1096
-Q 58.5 48.1875 55.375 44.234375
1097
-Q 52.25 40.28125 46.1875 39.3125
1098
-Q 53.46875 37.75 57.5 32.78125
1099
-Q 61.53125 27.828125 61.53125 20.40625
1100
-Q 61.53125 10.640625 54.890625 5.3125
1101
-Q 48.25 0 35.984375 0
1102
-L 9.8125 0
1103
-z
1104
-" id="DejaVuSans-42"/>
1105
- <path d="M 9.8125 72.90625
1106
-L 24.515625 72.90625
1107
-L 43.109375 23.296875
1108
-L 61.8125 72.90625
1109
-L 76.515625 72.90625
1110
-L 76.515625 0
1111
-L 66.890625 0
1112
-L 66.890625 64.015625
1113
-L 48.09375 14.015625
1114
-L 38.1875 14.015625
1115
-L 19.390625 64.015625
1116
-L 19.390625 0
1117
-L 9.8125 0
1118
-z
1119
-" id="DejaVuSans-4d"/>
1120
- </defs>
1121
- <g transform="translate(100 65.836562)scale(0.1 -0.1)">
1335
+ <g transform="translate(91 65.836563)scale(0.1 -0.1)">
11221336
<use xlink:href="#DejaVuSans-42"/>
11231337
<use x="68.603516" xlink:href="#DejaVuSans-4d"/>
11241338
<use x="154.882812" xlink:href="#DejaVuSans-50"/>
11251339
</g>
11261340
</g>
1127
- <g id="patch_58">
1128
- <path d="M 72 80.514687
1129
-L 92 80.514687
1130
-L 92 73.514687
1131
-L 72 73.514687
1341
+ <g id="patch_46">
1342
+ <path d="M 63 80.514688
1343
+L 83 80.514688
1344
+L 83 73.514688
1345
+L 63 73.514688
11321346
z
11331347
" style="fill:#f7b89c;stroke:#ffffff;stroke-linejoin:miter;stroke-width:2;"/>
11341348
</g>
1135
- <g id="text_21">
1349
+ <g id="text_20">
11361350
<!-- TIFF -->
11371351
<defs>
11381352
<path d="M -0.296875 72.90625
11391353
L 61.375 72.90625
11401354
L 61.375 64.59375
@@ -1162,26 +1376,26 @@
11621376
L 19.671875 0
11631377
L 9.8125 0
11641378
z
11651379
" id="DejaVuSans-46"/>
11661380
</defs>
1167
- <g transform="translate(100 80.514687)scale(0.1 -0.1)">
1381
+ <g transform="translate(91 80.514688)scale(0.1 -0.1)">
11681382
<use xlink:href="#DejaVuSans-54"/>
11691383
<use x="61.083984" xlink:href="#DejaVuSans-49"/>
11701384
<use x="90.576172" xlink:href="#DejaVuSans-46"/>
11711385
<use x="148.095703" xlink:href="#DejaVuSans-46"/>
11721386
</g>
11731387
</g>
1174
- <g id="patch_59">
1175
- <path d="M 72 95.192813
1176
-L 92 95.192813
1177
-L 92 88.192813
1178
-L 72 88.192813
1388
+ <g id="patch_47">
1389
+ <path d="M 63 95.192813
1390
+L 83 95.192813
1391
+L 83 88.192813
1392
+L 63 88.192813
11791393
z
11801394
" style="fill:#b40426;stroke:#ffffff;stroke-linejoin:miter;stroke-width:2;"/>
11811395
</g>
1182
- <g id="text_22">
1396
+ <g id="text_21">
11831397
<!-- PNG -->
11841398
<defs>
11851399
<path d="M 9.8125 72.90625
11861400
L 23.09375 72.90625
11871401
L 55.421875 11.921875
@@ -1193,20 +1407,20 @@
11931407
L 19.390625 0
11941408
L 9.8125 0
11951409
z
11961410
" id="DejaVuSans-4e"/>
11971411
</defs>
1198
- <g transform="translate(100 95.192813)scale(0.1 -0.1)">
1412
+ <g transform="translate(91 95.192813)scale(0.1 -0.1)">
11991413
<use xlink:href="#DejaVuSans-50"/>
12001414
<use x="60.302734" xlink:href="#DejaVuSans-4e"/>
12011415
<use x="135.107422" xlink:href="#DejaVuSans-47"/>
12021416
</g>
12031417
</g>
12041418
</g>
12051419
</g>
12061420
</g>
12071421
<defs>
1208
- <clipPath id="p60d72f5e8e">
1209
- <rect height="217.44" width="390.6" x="63" y="34.56"/>
1422
+ <clipPath id="pbb31c7aa29">
1423
+ <rect height="221.76" width="334.8" x="54" y="34.56"/>
12101424
</clipPath>
12111425
</defs>
12121426
</svg>
12131427
--- www/image-format-vs-repo-size.svg
+++ www/image-format-vs-repo-size.svg
@@ -1,533 +1,334 @@
1 <?xml version="1.0" encoding="utf-8" standalone="no"?>
2 <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
3 "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
4 <!-- Created with matplotlib (http://matplotlib.org/) -->
5 <svg height="288pt" version="1.1" viewBox="0 0 504 288" width="504pt" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
6 <defs>
7 <style type="text/css">
8 *{stroke-linecap:butt;stroke-linejoin:round;}
9 </style>
10 </defs>
11 <g id="figure_1">
12 <g id="patch_1">
13 <path d="M 0 288
14 L 504 288
15 L 504 0
16 L 0 0
17 z
18 " style="fill:#ffffff;"/>
19 </g>
20 <g id="axes_1">
21 <g id="patch_2">
22 <path d="M 63 252
23 L 453.6 252
24 L 453.6 34.56
25 L 63 34.56
26 z
27 " style="fill:#ffffff;"/>
28 </g>
29 <g id="patch_3">
30 <path clip-path="url(#p60d72f5e8e)" d="M 70.939024 252
31 L 77.290244 252
32 L 77.290244 205.23871
33 L 70.939024 205.23871
34 z
35 " style="fill:#3b4cc0;stroke:#ffffff;stroke-linejoin:miter;stroke-width:2;"/>
36 </g>
37 <g id="patch_4">
38 <path clip-path="url(#p60d72f5e8e)" d="M 102.695122 252
39 L 109.046341 252
40 L 109.046341 195.218433
41 L 102.695122 195.218433
42 z
43 " style="fill:#3b4cc0;stroke:#ffffff;stroke-linejoin:miter;stroke-width:2;"/>
44 </g>
45 <g id="patch_5">
46 <path clip-path="url(#p60d72f5e8e)" d="M 134.45122 252
47 L 140.802439 252
48 L 140.802439 185.198157
49 L 134.45122 185.198157
50 z
51 " style="fill:#3b4cc0;stroke:#ffffff;stroke-linejoin:miter;stroke-width:2;"/>
52 </g>
53 <g id="patch_6">
54 <path clip-path="url(#p60d72f5e8e)" d="M 166.207317 252
55 L 172.558537 252
56 L 172.558537 173.507834
57 L 166.207317 173.507834
58 z
59 " style="fill:#3b4cc0;stroke:#ffffff;stroke-linejoin:miter;stroke-width:2;"/>
60 </g>
61 <g id="patch_7">
62 <path clip-path="url(#p60d72f5e8e)" d="M 197.963415 252
63 L 204.314634 252
64 L 204.314634 161.817512
65 L 197.963415 161.817512
66 z
67 " style="fill:#3b4cc0;stroke:#ffffff;stroke-linejoin:miter;stroke-width:2;"/>
68 </g>
69 <g id="patch_8">
70 <path clip-path="url(#p60d72f5e8e)" d="M 229.719512 252
71 L 236.070732 252
72 L 236.070732 157.642396
73 L 229.719512 157.642396
74 z
75 " style="fill:#3b4cc0;stroke:#ffffff;stroke-linejoin:miter;stroke-width:2;"/>
76 </g>
77 <g id="patch_9">
78 <path clip-path="url(#p60d72f5e8e)" d="M 261.47561 252
79 L 267.826829 252
80 L 267.826829 157.642396
81 L 261.47561 157.642396
82 z
83 " style="fill:#3b4cc0;stroke:#ffffff;stroke-linejoin:miter;stroke-width:2;"/>
84 </g>
85 <g id="patch_10">
86 <path clip-path="url(#p60d72f5e8e)" d="M 293.231707 252
87 L 299.582927 252
88 L 299.582927 140.941935
89 L 293.231707 140.941935
90 z
91 " style="fill:#3b4cc0;stroke:#ffffff;stroke-linejoin:miter;stroke-width:2;"/>
92 </g>
93 <g id="patch_11">
94 <path clip-path="url(#p60d72f5e8e)" d="M 324.987805 252
95 L 331.339024 252
96 L 331.339024 140.941935
97 L 324.987805 140.941935
98 z
99 " style="fill:#3b4cc0;stroke:#ffffff;stroke-linejoin:miter;stroke-width:2;"/>
100 </g>
101 <g id="patch_12">
102 <path clip-path="url(#p60d72f5e8e)" d="M 356.743902 252
103 L 363.095122 252
104 L 363.095122 135.096774
105 L 356.743902 135.096774
106 z
107 " style="fill:#3b4cc0;stroke:#ffffff;stroke-linejoin:miter;stroke-width:2;"/>
108 </g>
109 <g id="patch_13">
110 <path clip-path="url(#p60d72f5e8e)" d="M 388.5 252
111 L 394.85122 252
112 L 394.85122 127.581567
113 L 388.5 127.581567
114 z
115 " style="fill:#3b4cc0;stroke:#ffffff;stroke-linejoin:miter;stroke-width:2;"/>
116 </g>
117 <g id="patch_14">
118 <path clip-path="url(#p60d72f5e8e)" d="M 420.256098 252
119 L 426.607317 252
120 L 426.607317 124.241475
121 L 420.256098 124.241475
122 z
123 " style="fill:#3b4cc0;stroke:#ffffff;stroke-linejoin:miter;stroke-width:2;"/>
124 </g>
125 <g id="patch_15">
126 <path clip-path="url(#p60d72f5e8e)" d="M 77.290244 252
127 L 83.641463 252
128 L 83.641463 205.23871
129 L 77.290244 205.23871
130 z
131 " style="fill:#aac7fd;stroke:#ffffff;stroke-linejoin:miter;stroke-width:2;"/>
132 </g>
133 <g id="patch_16">
134 <path clip-path="url(#p60d72f5e8e)" d="M 109.046341 252
135 L 115.397561 252
136 L 115.397561 181.858065
137 L 109.046341 181.858065
138 z
139 " style="fill:#aac7fd;stroke:#ffffff;stroke-linejoin:miter;stroke-width:2;"/>
140 </g>
141 <g id="patch_17">
142 <path clip-path="url(#p60d72f5e8e)" d="M 140.802439 252
143 L 147.153659 252
144 L 147.153659 157.642396
145 L 140.802439 157.642396
146 z
147 " style="fill:#aac7fd;stroke:#ffffff;stroke-linejoin:miter;stroke-width:2;"/>
148 </g>
149 <g id="patch_18">
150 <path clip-path="url(#p60d72f5e8e)" d="M 172.558537 252
151 L 178.909756 252
152 L 178.909756 133.426728
153 L 172.558537 133.426728
154 z
155 " style="fill:#aac7fd;stroke:#ffffff;stroke-linejoin:miter;stroke-width:2;"/>
156 </g>
157 <g id="patch_19">
158 <path clip-path="url(#p60d72f5e8e)" d="M 204.314634 252
159 L 210.665854 252
160 L 210.665854 133.426728
161 L 204.314634 133.426728
162 z
163 " style="fill:#aac7fd;stroke:#ffffff;stroke-linejoin:miter;stroke-width:2;"/>
164 </g>
165 <g id="patch_20">
166 <path clip-path="url(#p60d72f5e8e)" d="M 236.070732 252
167 L 242.421951 252
168 L 242.421951 133.426728
169 L 236.070732 133.426728
170 z
171 " style="fill:#aac7fd;stroke:#ffffff;stroke-linejoin:miter;stroke-width:2;"/>
172 </g>
173 <g id="patch_21">
174 <path clip-path="url(#p60d72f5e8e)" d="M 267.826829 252
175 L 274.178049 252
176 L 274.178049 133.426728
177 L 267.826829 133.426728
178 z
179 " style="fill:#aac7fd;stroke:#ffffff;stroke-linejoin:miter;stroke-width:2;"/>
180 </g>
181 <g id="patch_22">
182 <path clip-path="url(#p60d72f5e8e)" d="M 299.582927 252
183 L 305.934146 252
184 L 305.934146 133.426728
185 L 299.582927 133.426728
186 z
187 " style="fill:#aac7fd;stroke:#ffffff;stroke-linejoin:miter;stroke-width:2;"/>
188 </g>
189 <g id="patch_23">
190 <path clip-path="url(#p60d72f5e8e)" d="M 331.339024 252
191 L 337.690244 252
192 L 337.690244 133.426728
193 L 331.339024 133.426728
194 z
195 " style="fill:#aac7fd;stroke:#ffffff;stroke-linejoin:miter;stroke-width:2;"/>
196 </g>
197 <g id="patch_24">
198 <path clip-path="url(#p60d72f5e8e)" d="M 363.095122 252
199 L 369.446341 252
200 L 369.446341 133.426728
201 L 363.095122 133.426728
202 z
203 " style="fill:#aac7fd;stroke:#ffffff;stroke-linejoin:miter;stroke-width:2;"/>
204 </g>
205 <g id="patch_25">
206 <path clip-path="url(#p60d72f5e8e)" d="M 394.85122 252
207 L 401.202439 252
208 L 401.202439 132.591705
209 L 394.85122 132.591705
210 z
211 " style="fill:#aac7fd;stroke:#ffffff;stroke-linejoin:miter;stroke-width:2;"/>
212 </g>
213 <g id="patch_26">
214 <path clip-path="url(#p60d72f5e8e)" d="M 426.607317 252
215 L 432.958537 252
216 L 432.958537 132.591705
217 L 426.607317 132.591705
218 z
219 " style="fill:#aac7fd;stroke:#ffffff;stroke-linejoin:miter;stroke-width:2;"/>
220 </g>
221 <g id="patch_27">
222 <path clip-path="url(#p60d72f5e8e)" d="M 83.641463 252
223 L 89.992683 252
224 L 89.992683 205.23871
225 L 83.641463 205.23871
226 z
227 " style="fill:#f7b89c;stroke:#ffffff;stroke-linejoin:miter;stroke-width:2;"/>
228 </g>
229 <g id="patch_28">
230 <path clip-path="url(#p60d72f5e8e)" d="M 115.397561 252
231 L 121.74878 252
232 L 121.74878 181.858065
233 L 115.397561 181.858065
234 z
235 " style="fill:#f7b89c;stroke:#ffffff;stroke-linejoin:miter;stroke-width:2;"/>
236 </g>
237 <g id="patch_29">
238 <path clip-path="url(#p60d72f5e8e)" d="M 147.153659 252
239 L 153.504878 252
240 L 153.504878 157.642396
241 L 147.153659 157.642396
242 z
243 " style="fill:#f7b89c;stroke:#ffffff;stroke-linejoin:miter;stroke-width:2;"/>
244 </g>
245 <g id="patch_30">
246 <path clip-path="url(#p60d72f5e8e)" d="M 178.909756 252
247 L 185.260976 252
248 L 185.260976 133.426728
249 L 178.909756 133.426728
250 z
251 " style="fill:#f7b89c;stroke:#ffffff;stroke-linejoin:miter;stroke-width:2;"/>
252 </g>
253 <g id="patch_31">
254 <path clip-path="url(#p60d72f5e8e)" d="M 210.665854 252
255 L 217.017073 252
256 L 217.017073 133.426728
257 L 210.665854 133.426728
258 z
259 " style="fill:#f7b89c;stroke:#ffffff;stroke-linejoin:miter;stroke-width:2;"/>
260 </g>
261 <g id="patch_32">
262 <path clip-path="url(#p60d72f5e8e)" d="M 242.421951 252
263 L 248.773171 252
264 L 248.773171 133.426728
265 L 242.421951 133.426728
266 z
267 " style="fill:#f7b89c;stroke:#ffffff;stroke-linejoin:miter;stroke-width:2;"/>
268 </g>
269 <g id="patch_33">
270 <path clip-path="url(#p60d72f5e8e)" d="M 274.178049 252
271 L 280.529268 252
272 L 280.529268 133.426728
273 L 274.178049 133.426728
274 z
275 " style="fill:#f7b89c;stroke:#ffffff;stroke-linejoin:miter;stroke-width:2;"/>
276 </g>
277 <g id="patch_34">
278 <path clip-path="url(#p60d72f5e8e)" d="M 305.934146 252
279 L 312.285366 252
280 L 312.285366 133.426728
281 L 305.934146 133.426728
282 z
283 " style="fill:#f7b89c;stroke:#ffffff;stroke-linejoin:miter;stroke-width:2;"/>
284 </g>
285 <g id="patch_35">
286 <path clip-path="url(#p60d72f5e8e)" d="M 337.690244 252
287 L 344.041463 252
288 L 344.041463 133.426728
289 L 337.690244 133.426728
290 z
291 " style="fill:#f7b89c;stroke:#ffffff;stroke-linejoin:miter;stroke-width:2;"/>
292 </g>
293 <g id="patch_36">
294 <path clip-path="url(#p60d72f5e8e)" d="M 369.446341 252
295 L 375.797561 252
296 L 375.797561 133.426728
297 L 369.446341 133.426728
298 z
299 " style="fill:#f7b89c;stroke:#ffffff;stroke-linejoin:miter;stroke-width:2;"/>
300 </g>
301 <g id="patch_37">
302 <path clip-path="url(#p60d72f5e8e)" d="M 401.202439 252
303 L 407.553659 252
304 L 407.553659 132.591705
305 L 401.202439 132.591705
306 z
307 " style="fill:#f7b89c;stroke:#ffffff;stroke-linejoin:miter;stroke-width:2;"/>
308 </g>
309 <g id="patch_38">
310 <path clip-path="url(#p60d72f5e8e)" d="M 432.958537 252
311 L 439.309756 252
312 L 439.309756 132.591705
313 L 432.958537 132.591705
314 z
315 " style="fill:#f7b89c;stroke:#ffffff;stroke-linejoin:miter;stroke-width:2;"/>
316 </g>
317 <g id="patch_39">
318 <path clip-path="url(#p60d72f5e8e)" d="M 89.992683 252
319 L 96.343902 252
320 L 96.343902 205.23871
321 L 89.992683 205.23871
322 z
323 " style="fill:#b40426;stroke:#ffffff;stroke-linejoin:miter;stroke-width:2;"/>
324 </g>
325 <g id="patch_40">
326 <path clip-path="url(#p60d72f5e8e)" d="M 121.74878 252
327 L 128.1 252
328 L 128.1 185.198157
329 L 121.74878 185.198157
330 z
331 " style="fill:#b40426;stroke:#ffffff;stroke-linejoin:miter;stroke-width:2;"/>
332 </g>
333 <g id="patch_41">
334 <path clip-path="url(#p60d72f5e8e)" d="M 153.504878 252
335 L 159.856098 252
336 L 159.856098 162.652535
337 L 153.504878 162.652535
338 z
339 " style="fill:#b40426;stroke:#ffffff;stroke-linejoin:miter;stroke-width:2;"/>
340 </g>
341 <g id="patch_42">
342 <path clip-path="url(#p60d72f5e8e)" d="M 185.260976 252
343 L 191.612195 252
344 L 191.612195 130.086636
345 L 185.260976 130.086636
346 z
347 " style="fill:#b40426;stroke:#ffffff;stroke-linejoin:miter;stroke-width:2;"/>
348 </g>
349 <g id="patch_43">
350 <path clip-path="url(#p60d72f5e8e)" d="M 217.017073 252
351 L 223.368293 252
352 L 223.368293 127.581567
353 L 217.017073 127.581567
354 z
355 " style="fill:#b40426;stroke:#ffffff;stroke-linejoin:miter;stroke-width:2;"/>
356 </g>
357 <g id="patch_44">
358 <path clip-path="url(#p60d72f5e8e)" d="M 248.773171 252
359 L 255.12439 252
360 L 255.12439 100.025806
361 L 248.773171 100.025806
362 z
363 " style="fill:#b40426;stroke:#ffffff;stroke-linejoin:miter;stroke-width:2;"/>
364 </g>
365 <g id="patch_45">
366 <path clip-path="url(#p60d72f5e8e)" d="M 280.529268 252
367 L 286.880488 252
368 L 286.880488 98.35576
369 L 280.529268 98.35576
370 z
371 " style="fill:#b40426;stroke:#ffffff;stroke-linejoin:miter;stroke-width:2;"/>
372 </g>
373 <g id="patch_46">
374 <path clip-path="url(#p60d72f5e8e)" d="M 312.285366 252
375 L 318.636585 252
376 L 318.636585 94.180645
377 L 312.285366 94.180645
378 z
379 " style="fill:#b40426;stroke:#ffffff;stroke-linejoin:miter;stroke-width:2;"/>
380 </g>
381 <g id="patch_47">
382 <path clip-path="url(#p60d72f5e8e)" d="M 344.041463 252
383 L 350.392683 252
384 L 350.392683 76.645161
385 L 344.041463 76.645161
386 z
387 " style="fill:#b40426;stroke:#ffffff;stroke-linejoin:miter;stroke-width:2;"/>
388 </g>
389 <g id="patch_48">
390 <path clip-path="url(#p60d72f5e8e)" d="M 375.797561 252
391 L 382.14878 252
392 L 382.14878 65.789862
393 L 375.797561 65.789862
394 z
395 " style="fill:#b40426;stroke:#ffffff;stroke-linejoin:miter;stroke-width:2;"/>
396 </g>
397 <g id="patch_49">
398 <path clip-path="url(#p60d72f5e8e)" d="M 407.553659 252
399 L 413.904878 252
400 L 413.904878 50.759447
401 L 407.553659 50.759447
402 z
403 " style="fill:#b40426;stroke:#ffffff;stroke-linejoin:miter;stroke-width:2;"/>
404 </g>
405 <g id="patch_50">
406 <path clip-path="url(#p60d72f5e8e)" d="M 439.309756 252
407 L 445.660976 252
408 L 445.660976 44.914286
409 L 439.309756 44.914286
410 z
411 " style="fill:#b40426;stroke:#ffffff;stroke-linejoin:miter;stroke-width:2;"/>
412 </g>
413 <g id="matplotlib.axis_1">
414 <g id="xtick_1">
415 <g id="line2d_1">
416 <defs>
417 <path d="M 0 0
418 L 0 3.5
419 " id="me2969b5817" style="stroke:#000000;stroke-width:0.8;"/>
420 </defs>
421 <g>
422 <use style="stroke:#000000;stroke-width:0.8;" x="83.641463" xlink:href="#me2969b5817" y="252"/>
423 </g>
424 </g>
425 <g id="text_1">
426 <!-- 0 -->
427 <defs>
428 <path d="M 31.78125 66.40625
429 Q 24.171875 66.40625 20.328125 58.90625
430 Q 16.5 51.421875 16.5 36.375
431 Q 16.5 21.390625 20.328125 13.890625
432 Q 24.171875 6.390625 31.78125 6.390625
433 Q 39.453125 6.390625 43.28125 13.890625
434 Q 47.125 21.390625 47.125 36.375
435 Q 47.125 51.421875 43.28125 58.90625
436 Q 39.453125 66.40625 31.78125 66.40625
437 z
438 M 31.78125 74.21875
439 Q 44.046875 74.21875 50.515625 64.515625
440 Q 56.984375 54.828125 56.984375 36.375
441 Q 56.984375 17.96875 50.515625 8.265625
442 Q 44.046875 -1.421875 31.78125 -1.421875
443 Q 19.53125 -1.421875 13.0625 8.265625
444 Q 6.59375 17.96875 6.59375 36.375
445 Q 6.59375 54.828125 13.0625 64.515625
446 Q 19.53125 74.21875 31.78125 74.21875
447 z
448 " id="DejaVuSans-30"/>
449 </defs>
450 <g transform="translate(86.400838 265.3625)rotate(-90)scale(0.1 -0.1)">
451 <use xlink:href="#DejaVuSans-30"/>
452 </g>
453 </g>
454 </g>
455 <g id="xtick_2">
456 <g id="line2d_2">
457 <g>
458 <use style="stroke:#000000;stroke-width:0.8;" x="115.397561" xlink:href="#me2969b5817" y="252"/>
459 </g>
460 </g>
461 <g id="text_2">
462 <!-- 1 -->
463 <defs>
464 <path d="M 12.40625 8.296875
465 L 28.515625 8.296875
466 L 28.515625 63.921875
467 L 10.984375 60.40625
468 L 10.984375 69.390625
469 L 28.421875 72.90625
470 L 38.28125 72.90625
471 L 38.28125 8.296875
472 L 54.390625 8.296875
473 L 54.390625 0
474 L 12.40625 0
475 z
476 " id="DejaVuSans-31"/>
477 </defs>
478 <g transform="translate(118.156936 265.3625)rotate(-90)scale(0.1 -0.1)">
479 <use xlink:href="#DejaVuSans-31"/>
480 </g>
481 </g>
482 </g>
483 <g id="xtick_3">
484 <g id="line2d_3">
485 <g>
486 <use style="stroke:#000000;stroke-width:0.8;" x="147.153659" xlink:href="#me2969b5817" y="252"/>
487 </g>
488 </g>
489 <g id="text_3">
490 <!-- 2 -->
491 <defs>
492 <path d="M 19.1875 8.296875
493 L 53.609375 8.296875
494 L 53.609375 0
495 L 7.328125 0
496 L 7.328125 8.296875
497 Q 12.9375 14.109375 22.625 23.890625
498 Q 32.328125 33.6875 34.8125 36.53125
499 Q 39.546875 41.84375 41.421875 45.53125
500 Q 43.3125 49.21875 43.3125 52.78125
501 Q 43.3125 58.59375 39.234375 62.25
502 Q 35.15625 65.921875 28.609375 65.921875
503 Q 23.96875 65.921875 18.8125 64.3125
504 Q 13.671875 62.703125 7.8125 59.421875
505 L 7.8125 69.390625
506 Q 13.765625 71.78125 18.9375 73
507 Q 24.125 74.21875 28.421875 74.21875
508 Q 39.75 74.21875 46.484375 68.546875
509 Q 53.21875 62.890625 53.21875 53.421875
510 Q 53.21875 48.921875 51.53125 44.890625
511 Q 49.859375 40.875 45.40625 35.40625
512 Q 44.1875 33.984375 37.640625 27.21875
513 Q 31.109375 20.453125 19.1875 8.296875
514 z
515 " id="DejaVuSans-32"/>
516 </defs>
517 <g transform="translate(149.913034 265.3625)rotate(-90)scale(0.1 -0.1)">
518 <use xlink:href="#DejaVuSans-32"/>
519 </g>
520 </g>
521 </g>
522 <g id="xtick_4">
523 <g id="line2d_4">
524 <g>
525 <use style="stroke:#000000;stroke-width:0.8;" x="178.909756" xlink:href="#me2969b5817" y="252"/>
526 </g>
527 </g>
528 <g id="text_4">
529 <!-- 3 -->
530 <defs>
531 <path d="M 40.578125 39.3125
532 Q 47.65625 37.796875 51.625 33
533 Q 55.609375 28.21875 55.609375 21.1875
@@ -559,22 +360,22 @@
559 Q 53.90625 49.265625 50.4375 45.09375
560 Q 46.96875 40.921875 40.578125 39.3125
561 z
562 " id="DejaVuSans-33"/>
563 </defs>
564 <g transform="translate(181.669131 265.3625)rotate(-90)scale(0.1 -0.1)">
565 <use xlink:href="#DejaVuSans-33"/>
566 </g>
567 </g>
568 </g>
569 <g id="xtick_5">
570 <g id="line2d_5">
571 <g>
572 <use style="stroke:#000000;stroke-width:0.8;" x="210.665854" xlink:href="#me2969b5817" y="252"/>
573 </g>
574 </g>
575 <g id="text_5">
576 <!-- 4 -->
577 <defs>
578 <path d="M 37.796875 64.3125
579 L 12.890625 25.390625
580 L 37.796875 25.390625
@@ -591,22 +392,22 @@
591 L 4.890625 17.1875
592 L 4.890625 26.703125
593 z
594 " id="DejaVuSans-34"/>
595 </defs>
596 <g transform="translate(213.425229 265.3625)rotate(-90)scale(0.1 -0.1)">
597 <use xlink:href="#DejaVuSans-34"/>
598 </g>
599 </g>
600 </g>
601 <g id="xtick_6">
602 <g id="line2d_6">
603 <g>
604 <use style="stroke:#000000;stroke-width:0.8;" x="242.421951" xlink:href="#me2969b5817" y="252"/>
605 </g>
606 </g>
607 <g id="text_6">
608 <!-- 5 -->
609 <defs>
610 <path d="M 10.796875 72.90625
611 L 49.515625 72.90625
612 L 49.515625 64.59375
@@ -630,22 +431,22 @@
630 Q 22.75 39.890625 18.8125 39.015625
631 Q 14.890625 38.140625 10.796875 36.28125
632 z
633 " id="DejaVuSans-35"/>
634 </defs>
635 <g transform="translate(245.181326 265.3625)rotate(-90)scale(0.1 -0.1)">
636 <use xlink:href="#DejaVuSans-35"/>
637 </g>
638 </g>
639 </g>
640 <g id="xtick_7">
641 <g id="line2d_7">
642 <g>
643 <use style="stroke:#000000;stroke-width:0.8;" x="274.178049" xlink:href="#me2969b5817" y="252"/>
644 </g>
645 </g>
646 <g id="text_7">
647 <!-- 6 -->
648 <defs>
649 <path d="M 33.015625 40.375
650 Q 26.375 40.375 22.484375 35.828125
651 Q 18.609375 31.296875 18.609375 23.390625
@@ -675,22 +476,22 @@
675 Q 40.921875 74.21875 44.703125 73.484375
676 Q 48.484375 72.75 52.59375 71.296875
677 z
678 " id="DejaVuSans-36"/>
679 </defs>
680 <g transform="translate(276.937424 265.3625)rotate(-90)scale(0.1 -0.1)">
681 <use xlink:href="#DejaVuSans-36"/>
682 </g>
683 </g>
684 </g>
685 <g id="xtick_8">
686 <g id="line2d_8">
687 <g>
688 <use style="stroke:#000000;stroke-width:0.8;" x="305.934146" xlink:href="#me2969b5817" y="252"/>
689 </g>
690 </g>
691 <g id="text_8">
692 <!-- 7 -->
693 <defs>
694 <path d="M 8.203125 72.90625
695 L 55.078125 72.90625
696 L 55.078125 68.703125
@@ -699,22 +500,22 @@
699 L 43.21875 64.59375
700 L 8.203125 64.59375
701 z
702 " id="DejaVuSans-37"/>
703 </defs>
704 <g transform="translate(308.693521 265.3625)rotate(-90)scale(0.1 -0.1)">
705 <use xlink:href="#DejaVuSans-37"/>
706 </g>
707 </g>
708 </g>
709 <g id="xtick_9">
710 <g id="line2d_9">
711 <g>
712 <use style="stroke:#000000;stroke-width:0.8;" x="337.690244" xlink:href="#me2969b5817" y="252"/>
713 </g>
714 </g>
715 <g id="text_9">
716 <!-- 8 -->
717 <defs>
718 <path d="M 31.78125 34.625
719 Q 24.75 34.625 20.71875 30.859375
720 Q 16.703125 27.09375 16.703125 20.515625
@@ -753,22 +554,22 @@
753 Q 25.390625 66.40625 21.84375 63.234375
754 Q 18.3125 60.0625 18.3125 54.390625
755 z
756 " id="DejaVuSans-38"/>
757 </defs>
758 <g transform="translate(340.449619 265.3625)rotate(-90)scale(0.1 -0.1)">
759 <use xlink:href="#DejaVuSans-38"/>
760 </g>
761 </g>
762 </g>
763 <g id="xtick_10">
764 <g id="line2d_10">
765 <g>
766 <use style="stroke:#000000;stroke-width:0.8;" x="369.446341" xlink:href="#me2969b5817" y="252"/>
767 </g>
768 </g>
769 <g id="text_10">
770 <!-- 9 -->
771 <defs>
772 <path d="M 10.984375 1.515625
773 L 10.984375 10.5
774 Q 14.703125 8.734375 18.5 7.8125
@@ -798,192 +599,651 @@
798 Q 16.21875 41.5 20.09375 36.953125
799 Q 23.96875 32.421875 30.609375 32.421875
800 z
801 " id="DejaVuSans-39"/>
802 </defs>
803 <g transform="translate(372.205716 265.3625)rotate(-90)scale(0.1 -0.1)">
804 <use xlink:href="#DejaVuSans-39"/>
805 </g>
806 </g>
807 </g>
808 <g id="xtick_11">
809 <g id="line2d_11">
810 <g>
811 <use style="stroke:#000000;stroke-width:0.8;" x="401.202439" xlink:href="#me2969b5817" y="252"/>
812 </g>
813 </g>
814 <g id="text_11">
815 <!-- 10 -->
816 <g transform="translate(403.961814 271.725)rotate(-90)scale(0.1 -0.1)">
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
817 <use xlink:href="#DejaVuSans-31"/>
818 <use x="63.623047" xlink:href="#DejaVuSans-30"/>
819 </g>
820 </g>
821 </g>
822 <g id="xtick_12">
823 <g id="line2d_12">
824 <g>
825 <use style="stroke:#000000;stroke-width:0.8;" x="432.958537" xlink:href="#me2969b5817" y="252"/>
826 </g>
827 </g>
828 <g id="text_12">
829 <!-- 11 -->
830 <g transform="translate(435.717912 271.725)rotate(-90)scale(0.1 -0.1)">
831 <use xlink:href="#DejaVuSans-31"/>
832 <use x="63.623047" xlink:href="#DejaVuSans-31"/>
833 </g>
834 </g>
835 </g>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
836 </g>
837 <g id="matplotlib.axis_2">
838 <g id="ytick_1">
839 <g id="line2d_13">
840 <defs>
841 <path d="M 0 0
842 L -3.5 0
843 " id="m266e515e7d" style="stroke:#000000;stroke-width:0.8;"/>
844 </defs>
845 <g>
846 <use style="stroke:#000000;stroke-width:0.8;" x="63" xlink:href="#m266e515e7d" y="252"/>
847 </g>
848 </g>
849 <g id="text_13">
850 <!-- 0.0 -->
851 <defs>
852 <path d="M 10.6875 12.40625
853 L 21 12.40625
854 L 21 0
855 L 10.6875 0
856 z
857 " id="DejaVuSans-2e"/>
858 </defs>
859 <g transform="translate(40.096875 255.799219)scale(0.1 -0.1)">
860 <use xlink:href="#DejaVuSans-30"/>
861 <use x="63.623047" xlink:href="#DejaVuSans-2e"/>
862 <use x="95.410156" xlink:href="#DejaVuSans-30"/>
863 </g>
864 </g>
865 </g>
866 <g id="ytick_2">
867 <g id="line2d_14">
868 <g>
869 <use style="stroke:#000000;stroke-width:0.8;" x="63" xlink:href="#m266e515e7d" y="209.24682"/>
870 </g>
871 </g>
872 <g id="text_14">
873 <!-- 0.2 -->
874 <g transform="translate(40.096875 213.046039)scale(0.1 -0.1)">
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
875 <use xlink:href="#DejaVuSans-30"/>
876 <use x="63.623047" xlink:href="#DejaVuSans-2e"/>
877 <use x="95.410156" xlink:href="#DejaVuSans-32"/>
878 </g>
879 </g>
880 </g>
881 <g id="ytick_3">
882 <g id="line2d_15">
883 <g>
884 <use style="stroke:#000000;stroke-width:0.8;" x="63" xlink:href="#m266e515e7d" y="166.493641"/>
885 </g>
886 </g>
887 <g id="text_15">
888 <!-- 0.4 -->
889 <g transform="translate(40.096875 170.292859)scale(0.1 -0.1)">
890 <use xlink:href="#DejaVuSans-30"/>
891 <use x="63.623047" xlink:href="#DejaVuSans-2e"/>
892 <use x="95.410156" xlink:href="#DejaVuSans-34"/>
893 </g>
894 </g>
895 </g>
896 <g id="ytick_4">
897 <g id="line2d_16">
898 <g>
899 <use style="stroke:#000000;stroke-width:0.8;" x="63" xlink:href="#m266e515e7d" y="123.740461"/>
900 </g>
901 </g>
902 <g id="text_16">
903 <!-- 0.6 -->
904 <g transform="translate(40.096875 127.53968)scale(0.1 -0.1)">
905 <use xlink:href="#DejaVuSans-30"/>
906 <use x="63.623047" xlink:href="#DejaVuSans-2e"/>
907 <use x="95.410156" xlink:href="#DejaVuSans-36"/>
908 </g>
909 </g>
910 </g>
911 <g id="ytick_5">
912 <g id="line2d_17">
913 <g>
914 <use style="stroke:#000000;stroke-width:0.8;" x="63" xlink:href="#m266e515e7d" y="80.987281"/>
915 </g>
916 </g>
917 <g id="text_17">
918 <!-- 0.8 -->
919 <g transform="translate(40.096875 84.7865)scale(0.1 -0.1)">
920 <use xlink:href="#DejaVuSans-30"/>
921 <use x="63.623047" xlink:href="#DejaVuSans-2e"/>
922 <use x="95.410156" xlink:href="#DejaVuSans-38"/>
923 </g>
924 </g>
925 </g>
926 <g id="ytick_6">
927 <g id="line2d_18">
928 <g>
929 <use style="stroke:#000000;stroke-width:0.8;" x="63" xlink:href="#m266e515e7d" y="38.234101"/>
930 </g>
931 </g>
932 <g id="text_18">
933 <!-- 1.0 -->
934 <g transform="translate(40.096875 42.03332)scale(0.1 -0.1)">
935 <use xlink:href="#DejaVuSans-31"/>
936 <use x="63.623047" xlink:href="#DejaVuSans-2e"/>
937 <use x="95.410156" xlink:href="#DejaVuSans-30"/>
938 </g>
939 </g>
940 </g>
941 </g>
942 <g id="patch_51">
943 <path d="M 63 252
944 L 63 34.56
945 " style="fill:none;stroke:#000000;stroke-linecap:square;stroke-linejoin:miter;stroke-width:0.8;"/>
946 </g>
947 <g id="patch_52">
948 <path d="M 453.6 252
949 L 453.6 34.56
950 " style="fill:none;stroke:#000000;stroke-linecap:square;stroke-linejoin:miter;stroke-width:0.8;"/>
951 </g>
952 <g id="patch_53">
953 <path d="M 63 252
954 L 453.6 252
955 " style="fill:none;stroke:#000000;stroke-linecap:square;stroke-linejoin:miter;stroke-width:0.8;"/>
956 </g>
957 <g id="patch_54">
958 <path d="M 63 34.56
959 L 453.6 34.56
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
960 " style="fill:none;stroke:#000000;stroke-linecap:square;stroke-linejoin:miter;stroke-width:0.8;"/>
961 </g>
962 <g id="legend_1">
963 <g id="patch_55">
964 <path d="M 70 101.2725
965 L 125.046875 101.2725
966 Q 127.046875 101.2725 127.046875 99.2725
967 L 127.046875 41.56
968 Q 127.046875 39.56 125.046875 39.56
969 L 70 39.56
970 Q 68 39.56 68 41.56
971 L 68 99.2725
972 Q 68 101.2725 70 101.2725
973 z
974 " style="fill:#ffffff;opacity:0.8;stroke:#cccccc;stroke-linejoin:miter;"/>
975 </g>
976 <g id="patch_56">
977 <path d="M 72 51.158437
978 L 92 51.158437
979 L 92 44.158437
980 L 72 44.158437
981 z
982 " style="fill:#3b4cc0;stroke:#ffffff;stroke-linejoin:miter;stroke-width:2;"/>
983 </g>
984 <g id="text_19">
985 <!-- JPEG -->
986 <defs>
987 <path d="M 9.8125 72.90625
988 L 19.671875 72.90625
989 L 19.671875 5.078125
@@ -1053,88 +1313,42 @@
1053 Q 48.046875 6.6875 52.140625 7.59375
1054 Q 56.25 8.5 59.515625 10.40625
1055 z
1056 " id="DejaVuSans-47"/>
1057 </defs>
1058 <g transform="translate(100 51.158437)scale(0.1 -0.1)">
1059 <use xlink:href="#DejaVuSans-4a"/>
1060 <use x="29.492188" xlink:href="#DejaVuSans-50"/>
1061 <use x="89.794922" xlink:href="#DejaVuSans-45"/>
1062 <use x="152.978516" xlink:href="#DejaVuSans-47"/>
1063 </g>
1064 </g>
1065 <g id="patch_57">
1066 <path d="M 72 65.836562
1067 L 92 65.836562
1068 L 92 58.836562
1069 L 72 58.836562
1070 z
1071 " style="fill:#aac7fd;stroke:#ffffff;stroke-linejoin:miter;stroke-width:2;"/>
1072 </g>
1073 <g id="text_20">
1074 <!-- BMP -->
1075 <defs>
1076 <path d="M 19.671875 34.8125
1077 L 19.671875 8.109375
1078 L 35.5 8.109375
1079 Q 43.453125 8.109375 47.28125 11.40625
1080 Q 51.125 14.703125 51.125 21.484375
1081 Q 51.125 28.328125 47.28125 31.5625
1082 Q 43.453125 34.8125 35.5 34.8125
1083 z
1084 M 19.671875 64.796875
1085 L 19.671875 42.828125
1086 L 34.28125 42.828125
1087 Q 41.5 42.828125 45.03125 45.53125
1088 Q 48.578125 48.25 48.578125 53.8125
1089 Q 48.578125 59.328125 45.03125 62.0625
1090 Q 41.5 64.796875 34.28125 64.796875
1091 z
1092 M 9.8125 72.90625
1093 L 35.015625 72.90625
1094 Q 46.296875 72.90625 52.390625 68.21875
1095 Q 58.5 63.53125 58.5 54.890625
1096 Q 58.5 48.1875 55.375 44.234375
1097 Q 52.25 40.28125 46.1875 39.3125
1098 Q 53.46875 37.75 57.5 32.78125
1099 Q 61.53125 27.828125 61.53125 20.40625
1100 Q 61.53125 10.640625 54.890625 5.3125
1101 Q 48.25 0 35.984375 0
1102 L 9.8125 0
1103 z
1104 " id="DejaVuSans-42"/>
1105 <path d="M 9.8125 72.90625
1106 L 24.515625 72.90625
1107 L 43.109375 23.296875
1108 L 61.8125 72.90625
1109 L 76.515625 72.90625
1110 L 76.515625 0
1111 L 66.890625 0
1112 L 66.890625 64.015625
1113 L 48.09375 14.015625
1114 L 38.1875 14.015625
1115 L 19.390625 64.015625
1116 L 19.390625 0
1117 L 9.8125 0
1118 z
1119 " id="DejaVuSans-4d"/>
1120 </defs>
1121 <g transform="translate(100 65.836562)scale(0.1 -0.1)">
1122 <use xlink:href="#DejaVuSans-42"/>
1123 <use x="68.603516" xlink:href="#DejaVuSans-4d"/>
1124 <use x="154.882812" xlink:href="#DejaVuSans-50"/>
1125 </g>
1126 </g>
1127 <g id="patch_58">
1128 <path d="M 72 80.514687
1129 L 92 80.514687
1130 L 92 73.514687
1131 L 72 73.514687
1132 z
1133 " style="fill:#f7b89c;stroke:#ffffff;stroke-linejoin:miter;stroke-width:2;"/>
1134 </g>
1135 <g id="text_21">
1136 <!-- TIFF -->
1137 <defs>
1138 <path d="M -0.296875 72.90625
1139 L 61.375 72.90625
1140 L 61.375 64.59375
@@ -1162,26 +1376,26 @@
1162 L 19.671875 0
1163 L 9.8125 0
1164 z
1165 " id="DejaVuSans-46"/>
1166 </defs>
1167 <g transform="translate(100 80.514687)scale(0.1 -0.1)">
1168 <use xlink:href="#DejaVuSans-54"/>
1169 <use x="61.083984" xlink:href="#DejaVuSans-49"/>
1170 <use x="90.576172" xlink:href="#DejaVuSans-46"/>
1171 <use x="148.095703" xlink:href="#DejaVuSans-46"/>
1172 </g>
1173 </g>
1174 <g id="patch_59">
1175 <path d="M 72 95.192813
1176 L 92 95.192813
1177 L 92 88.192813
1178 L 72 88.192813
1179 z
1180 " style="fill:#b40426;stroke:#ffffff;stroke-linejoin:miter;stroke-width:2;"/>
1181 </g>
1182 <g id="text_22">
1183 <!-- PNG -->
1184 <defs>
1185 <path d="M 9.8125 72.90625
1186 L 23.09375 72.90625
1187 L 55.421875 11.921875
@@ -1193,20 +1407,20 @@
1193 L 19.390625 0
1194 L 9.8125 0
1195 z
1196 " id="DejaVuSans-4e"/>
1197 </defs>
1198 <g transform="translate(100 95.192813)scale(0.1 -0.1)">
1199 <use xlink:href="#DejaVuSans-50"/>
1200 <use x="60.302734" xlink:href="#DejaVuSans-4e"/>
1201 <use x="135.107422" xlink:href="#DejaVuSans-47"/>
1202 </g>
1203 </g>
1204 </g>
1205 </g>
1206 </g>
1207 <defs>
1208 <clipPath id="p60d72f5e8e">
1209 <rect height="217.44" width="390.6" x="63" y="34.56"/>
1210 </clipPath>
1211 </defs>
1212 </svg>
1213
--- www/image-format-vs-repo-size.svg
+++ www/image-format-vs-repo-size.svg
@@ -1,533 +1,334 @@
1 <?xml version="1.0" encoding="utf-8" standalone="no"?>
2 <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
3 "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
4 <!-- Created with matplotlib (http://matplotlib.org/) -->
5 <svg height="288pt" version="1.1" viewBox="0 0 432 288" width="432pt" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
6 <defs>
7 <style type="text/css">
8 *{stroke-linecap:butt;stroke-linejoin:round;}
9 </style>
10 </defs>
11 <g id="figure_1">
12 <g id="patch_1">
13 <path d="M 0 288
14 L 432 288
15 L 432 0
16 L 0 0
17 z
18 " style="fill:none;"/>
19 </g>
20 <g id="axes_1">
21 <g id="patch_2">
22 <path d="M 54 256.32
23 L 388.8 256.32
24 L 388.8 34.56
25 L 54 34.56
26 z
27 " style="fill:none;"/>
28 </g>
29 <g id="patch_3">
30 <path clip-path="url(#pbb31c7aa29)" d="M 63 256.32
31 L 70.2 256.32
32 L 70.2 175.617561
33 L 63 175.617561
34 z
35 " style="fill:#3b4cc0;stroke:#ffffff;stroke-linejoin:miter;stroke-width:2;"/>
36 </g>
37 <g id="patch_4">
38 <path clip-path="url(#pbb31c7aa29)" d="M 99 256.32
39 L 106.2 256.32
40 L 106.2 165.315122
41 L 99 165.315122
42 z
43 " style="fill:#3b4cc0;stroke:#ffffff;stroke-linejoin:miter;stroke-width:2;"/>
44 </g>
45 <g id="patch_5">
46 <path clip-path="url(#pbb31c7aa29)" d="M 135 256.32
47 L 142.2 256.32
48 L 142.2 148.14439
49 L 135 148.14439
50 z
51 " style="fill:#3b4cc0;stroke:#ffffff;stroke-linejoin:miter;stroke-width:2;"/>
52 </g>
53 <g id="patch_6">
54 <path clip-path="url(#pbb31c7aa29)" d="M 171 256.32
55 L 178.2 256.32
56 L 178.2 141.276098
57 L 171 141.276098
58 z
59 " style="fill:#3b4cc0;stroke:#ffffff;stroke-linejoin:miter;stroke-width:2;"/>
60 </g>
61 <g id="patch_7">
62 <path clip-path="url(#pbb31c7aa29)" d="M 207 256.32
63 L 214.2 256.32
64 L 214.2 139.559024
65 L 207 139.559024
66 z
67 " style="fill:#3b4cc0;stroke:#ffffff;stroke-linejoin:miter;stroke-width:2;"/>
68 </g>
69 <g id="patch_8">
70 <path clip-path="url(#pbb31c7aa29)" d="M 243 256.32
71 L 250.2 256.32
72 L 250.2 137.841951
73 L 243 137.841951
74 z
75 " style="fill:#3b4cc0;stroke:#ffffff;stroke-linejoin:miter;stroke-width:2;"/>
76 </g>
77 <g id="patch_9">
78 <path clip-path="url(#pbb31c7aa29)" d="M 279 256.32
79 L 286.2 256.32
80 L 286.2 136.983415
81 L 279 136.983415
82 z
83 " style="fill:#3b4cc0;stroke:#ffffff;stroke-linejoin:miter;stroke-width:2;"/>
84 </g>
85 <g id="patch_10">
86 <path clip-path="url(#pbb31c7aa29)" d="M 315 256.32
87 L 322.2 256.32
88 L 322.2 125.822439
89 L 315 125.822439
90 z
91 " style="fill:#3b4cc0;stroke:#ffffff;stroke-linejoin:miter;stroke-width:2;"/>
92 </g>
93 <g id="patch_11">
94 <path clip-path="url(#pbb31c7aa29)" d="M 351 256.32
95 L 358.2 256.32
96 L 358.2 119.812683
97 L 351 119.812683
98 z
99 " style="fill:#3b4cc0;stroke:#ffffff;stroke-linejoin:miter;stroke-width:2;"/>
100 </g>
101 <g id="patch_12">
102 <path clip-path="url(#pbb31c7aa29)" d="M 70.2 256.32
103 L 77.4 256.32
104 L 77.4 135.266341
105 L 70.2 135.266341
106 z
107 " style="fill:#aac7fd;stroke:#ffffff;stroke-linejoin:miter;stroke-width:2;"/>
108 </g>
109 <g id="patch_13">
110 <path clip-path="url(#pbb31c7aa29)" d="M 106.2 256.32
111 L 113.4 256.32
112 L 113.4 135.266341
113 L 106.2 135.266341
114 z
115 " style="fill:#aac7fd;stroke:#ffffff;stroke-linejoin:miter;stroke-width:2;"/>
116 </g>
117 <g id="patch_14">
118 <path clip-path="url(#pbb31c7aa29)" d="M 142.2 256.32
119 L 149.4 256.32
120 L 149.4 135.266341
121 L 142.2 135.266341
122 z
123 " style="fill:#aac7fd;stroke:#ffffff;stroke-linejoin:miter;stroke-width:2;"/>
124 </g>
125 <g id="patch_15">
126 <path clip-path="url(#pbb31c7aa29)" d="M 178.2 256.32
127 L 185.4 256.32
128 L 185.4 135.266341
129 L 178.2 135.266341
130 z
131 " style="fill:#aac7fd;stroke:#ffffff;stroke-linejoin:miter;stroke-width:2;"/>
132 </g>
133 <g id="patch_16">
134 <path clip-path="url(#pbb31c7aa29)" d="M 214.2 256.32
135 L 221.4 256.32
136 L 221.4 135.266341
137 L 214.2 135.266341
138 z
139 " style="fill:#aac7fd;stroke:#ffffff;stroke-linejoin:miter;stroke-width:2;"/>
140 </g>
141 <g id="patch_17">
142 <path clip-path="url(#pbb31c7aa29)" d="M 250.2 256.32
143 L 257.4 256.32
144 L 257.4 135.266341
145 L 250.2 135.266341
146 z
147 " style="fill:#aac7fd;stroke:#ffffff;stroke-linejoin:miter;stroke-width:2;"/>
148 </g>
149 <g id="patch_18">
150 <path clip-path="url(#pbb31c7aa29)" d="M 286.2 256.32
151 L 293.4 256.32
152 L 293.4 135.266341
153 L 286.2 135.266341
154 z
155 " style="fill:#aac7fd;stroke:#ffffff;stroke-linejoin:miter;stroke-width:2;"/>
156 </g>
157 <g id="patch_19">
158 <path clip-path="url(#pbb31c7aa29)" d="M 322.2 256.32
159 L 329.4 256.32
160 L 329.4 134.407805
161 L 322.2 134.407805
162 z
163 " style="fill:#aac7fd;stroke:#ffffff;stroke-linejoin:miter;stroke-width:2;"/>
164 </g>
165 <g id="patch_20">
166 <path clip-path="url(#pbb31c7aa29)" d="M 358.2 256.32
167 L 365.4 256.32
168 L 365.4 134.407805
169 L 358.2 134.407805
170 z
171 " style="fill:#aac7fd;stroke:#ffffff;stroke-linejoin:miter;stroke-width:2;"/>
172 </g>
173 <g id="patch_21">
174 <path clip-path="url(#pbb31c7aa29)" d="M 77.4 256.32
175 L 84.6 256.32
176 L 84.6 136.124878
177 L 77.4 136.124878
178 z
179 " style="fill:#f7b89c;stroke:#ffffff;stroke-linejoin:miter;stroke-width:2;"/>
180 </g>
181 <g id="patch_22">
182 <path clip-path="url(#pbb31c7aa29)" d="M 113.4 256.32
183 L 120.6 256.32
184 L 120.6 136.124878
185 L 113.4 136.124878
186 z
187 " style="fill:#f7b89c;stroke:#ffffff;stroke-linejoin:miter;stroke-width:2;"/>
188 </g>
189 <g id="patch_23">
190 <path clip-path="url(#pbb31c7aa29)" d="M 149.4 256.32
191 L 156.6 256.32
192 L 156.6 136.124878
193 L 149.4 136.124878
194 z
195 " style="fill:#f7b89c;stroke:#ffffff;stroke-linejoin:miter;stroke-width:2;"/>
196 </g>
197 <g id="patch_24">
198 <path clip-path="url(#pbb31c7aa29)" d="M 185.4 256.32
199 L 192.6 256.32
200 L 192.6 136.124878
201 L 185.4 136.124878
202 z
203 " style="fill:#f7b89c;stroke:#ffffff;stroke-linejoin:miter;stroke-width:2;"/>
204 </g>
205 <g id="patch_25">
206 <path clip-path="url(#pbb31c7aa29)" d="M 221.4 256.32
207 L 228.6 256.32
208 L 228.6 136.124878
209 L 221.4 136.124878
210 z
211 " style="fill:#f7b89c;stroke:#ffffff;stroke-linejoin:miter;stroke-width:2;"/>
212 </g>
213 <g id="patch_26">
214 <path clip-path="url(#pbb31c7aa29)" d="M 257.4 256.32
215 L 264.6 256.32
216 L 264.6 134.407805
217 L 257.4 134.407805
218 z
219 " style="fill:#f7b89c;stroke:#ffffff;stroke-linejoin:miter;stroke-width:2;"/>
220 </g>
221 <g id="patch_27">
222 <path clip-path="url(#pbb31c7aa29)" d="M 293.4 256.32
223 L 300.6 256.32
224 L 300.6 134.407805
225 L 293.4 134.407805
226 z
227 " style="fill:#f7b89c;stroke:#ffffff;stroke-linejoin:miter;stroke-width:2;"/>
228 </g>
229 <g id="patch_28">
230 <path clip-path="url(#pbb31c7aa29)" d="M 329.4 256.32
231 L 336.6 256.32
232 L 336.6 134.407805
233 L 329.4 134.407805
234 z
235 " style="fill:#f7b89c;stroke:#ffffff;stroke-linejoin:miter;stroke-width:2;"/>
236 </g>
237 <g id="patch_29">
238 <path clip-path="url(#pbb31c7aa29)" d="M 365.4 256.32
239 L 372.6 256.32
240 L 372.6 134.407805
241 L 365.4 134.407805
242 z
243 " style="fill:#f7b89c;stroke:#ffffff;stroke-linejoin:miter;stroke-width:2;"/>
244 </g>
245 <g id="patch_30">
246 <path clip-path="url(#pbb31c7aa29)" d="M 84.6 256.32
247 L 91.8 256.32
248 L 91.8 133.549268
249 L 84.6 133.549268
250 z
251 " style="fill:#b40426;stroke:#ffffff;stroke-linejoin:miter;stroke-width:2;"/>
252 </g>
253 <g id="patch_31">
254 <path clip-path="url(#pbb31c7aa29)" d="M 120.6 256.32
255 L 127.8 256.32
256 L 127.8 116.378537
257 L 120.6 116.378537
258 z
259 " style="fill:#b40426;stroke:#ffffff;stroke-linejoin:miter;stroke-width:2;"/>
260 </g>
261 <g id="patch_32">
262 <path clip-path="url(#pbb31c7aa29)" d="M 156.6 256.32
263 L 163.8 256.32
264 L 163.8 104.359024
265 L 156.6 104.359024
266 z
267 " style="fill:#b40426;stroke:#ffffff;stroke-linejoin:miter;stroke-width:2;"/>
268 </g>
269 <g id="patch_33">
270 <path clip-path="url(#pbb31c7aa29)" d="M 192.6 256.32
271 L 199.8 256.32
272 L 199.8 99.207805
273 L 192.6 99.207805
274 z
275 " style="fill:#b40426;stroke:#ffffff;stroke-linejoin:miter;stroke-width:2;"/>
276 </g>
277 <g id="patch_34">
278 <path clip-path="url(#pbb31c7aa29)" d="M 228.6 256.32
279 L 235.8 256.32
280 L 235.8 82.89561
281 L 228.6 82.89561
282 z
283 " style="fill:#b40426;stroke:#ffffff;stroke-linejoin:miter;stroke-width:2;"/>
284 </g>
285 <g id="patch_35">
286 <path clip-path="url(#pbb31c7aa29)" d="M 264.6 256.32
287 L 271.8 256.32
288 L 271.8 71.734634
289 L 264.6 71.734634
290 z
291 " style="fill:#b40426;stroke:#ffffff;stroke-linejoin:miter;stroke-width:2;"/>
292 </g>
293 <g id="patch_36">
294 <path clip-path="url(#pbb31c7aa29)" d="M 300.6 256.32
295 L 307.8 256.32
296 L 307.8 60.573659
297 L 300.6 60.573659
298 z
299 " style="fill:#b40426;stroke:#ffffff;stroke-linejoin:miter;stroke-width:2;"/>
300 </g>
301 <g id="patch_37">
302 <path clip-path="url(#pbb31c7aa29)" d="M 336.6 256.32
303 L 343.8 256.32
304 L 343.8 50.27122
305 L 336.6 50.27122
306 z
307 " style="fill:#b40426;stroke:#ffffff;stroke-linejoin:miter;stroke-width:2;"/>
308 </g>
309 <g id="patch_38">
310 <path clip-path="url(#pbb31c7aa29)" d="M 372.6 256.32
311 L 379.8 256.32
312 L 379.8 45.12
313 L 372.6 45.12
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
314 z
315 " style="fill:#b40426;stroke:#ffffff;stroke-linejoin:miter;stroke-width:2;"/>
316 </g>
317 <g id="matplotlib.axis_1">
318 <g id="xtick_1">
319 <g id="line2d_1">
320 <defs>
321 <path d="M 0 0
322 L 0 3.5
323 " id="m445964aa5c" style="stroke:#000000;stroke-width:0.8;"/>
324 </defs>
325 <g>
326 <use style="stroke:#000000;stroke-width:0.8;" x="77.4" xlink:href="#m445964aa5c" y="256.32"/>
327 </g>
328 </g>
329 <g id="text_1">
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
330 <!-- 3 -->
331 <defs>
332 <path d="M 40.578125 39.3125
333 Q 47.65625 37.796875 51.625 33
334 Q 55.609375 28.21875 55.609375 21.1875
@@ -559,22 +360,22 @@
360 Q 53.90625 49.265625 50.4375 45.09375
361 Q 46.96875 40.921875 40.578125 39.3125
362 z
363 " id="DejaVuSans-33"/>
364 </defs>
365 <g transform="translate(80.159375 269.6825)rotate(-90)scale(0.1 -0.1)">
366 <use xlink:href="#DejaVuSans-33"/>
367 </g>
368 </g>
369 </g>
370 <g id="xtick_2">
371 <g id="line2d_2">
372 <g>
373 <use style="stroke:#000000;stroke-width:0.8;" x="113.4" xlink:href="#m445964aa5c" y="256.32"/>
374 </g>
375 </g>
376 <g id="text_2">
377 <!-- 4 -->
378 <defs>
379 <path d="M 37.796875 64.3125
380 L 12.890625 25.390625
381 L 37.796875 25.390625
@@ -591,22 +392,22 @@
392 L 4.890625 17.1875
393 L 4.890625 26.703125
394 z
395 " id="DejaVuSans-34"/>
396 </defs>
397 <g transform="translate(116.159375 269.6825)rotate(-90)scale(0.1 -0.1)">
398 <use xlink:href="#DejaVuSans-34"/>
399 </g>
400 </g>
401 </g>
402 <g id="xtick_3">
403 <g id="line2d_3">
404 <g>
405 <use style="stroke:#000000;stroke-width:0.8;" x="149.4" xlink:href="#m445964aa5c" y="256.32"/>
406 </g>
407 </g>
408 <g id="text_3">
409 <!-- 5 -->
410 <defs>
411 <path d="M 10.796875 72.90625
412 L 49.515625 72.90625
413 L 49.515625 64.59375
@@ -630,22 +431,22 @@
431 Q 22.75 39.890625 18.8125 39.015625
432 Q 14.890625 38.140625 10.796875 36.28125
433 z
434 " id="DejaVuSans-35"/>
435 </defs>
436 <g transform="translate(152.159375 269.6825)rotate(-90)scale(0.1 -0.1)">
437 <use xlink:href="#DejaVuSans-35"/>
438 </g>
439 </g>
440 </g>
441 <g id="xtick_4">
442 <g id="line2d_4">
443 <g>
444 <use style="stroke:#000000;stroke-width:0.8;" x="185.4" xlink:href="#m445964aa5c" y="256.32"/>
445 </g>
446 </g>
447 <g id="text_4">
448 <!-- 6 -->
449 <defs>
450 <path d="M 33.015625 40.375
451 Q 26.375 40.375 22.484375 35.828125
452 Q 18.609375 31.296875 18.609375 23.390625
@@ -675,22 +476,22 @@
476 Q 40.921875 74.21875 44.703125 73.484375
477 Q 48.484375 72.75 52.59375 71.296875
478 z
479 " id="DejaVuSans-36"/>
480 </defs>
481 <g transform="translate(188.159375 269.6825)rotate(-90)scale(0.1 -0.1)">
482 <use xlink:href="#DejaVuSans-36"/>
483 </g>
484 </g>
485 </g>
486 <g id="xtick_5">
487 <g id="line2d_5">
488 <g>
489 <use style="stroke:#000000;stroke-width:0.8;" x="221.4" xlink:href="#m445964aa5c" y="256.32"/>
490 </g>
491 </g>
492 <g id="text_5">
493 <!-- 7 -->
494 <defs>
495 <path d="M 8.203125 72.90625
496 L 55.078125 72.90625
497 L 55.078125 68.703125
@@ -699,22 +500,22 @@
500 L 43.21875 64.59375
501 L 8.203125 64.59375
502 z
503 " id="DejaVuSans-37"/>
504 </defs>
505 <g transform="translate(224.159375 269.6825)rotate(-90)scale(0.1 -0.1)">
506 <use xlink:href="#DejaVuSans-37"/>
507 </g>
508 </g>
509 </g>
510 <g id="xtick_6">
511 <g id="line2d_6">
512 <g>
513 <use style="stroke:#000000;stroke-width:0.8;" x="257.4" xlink:href="#m445964aa5c" y="256.32"/>
514 </g>
515 </g>
516 <g id="text_6">
517 <!-- 8 -->
518 <defs>
519 <path d="M 31.78125 34.625
520 Q 24.75 34.625 20.71875 30.859375
521 Q 16.703125 27.09375 16.703125 20.515625
@@ -753,22 +554,22 @@
554 Q 25.390625 66.40625 21.84375 63.234375
555 Q 18.3125 60.0625 18.3125 54.390625
556 z
557 " id="DejaVuSans-38"/>
558 </defs>
559 <g transform="translate(260.159375 269.6825)rotate(-90)scale(0.1 -0.1)">
560 <use xlink:href="#DejaVuSans-38"/>
561 </g>
562 </g>
563 </g>
564 <g id="xtick_7">
565 <g id="line2d_7">
566 <g>
567 <use style="stroke:#000000;stroke-width:0.8;" x="293.4" xlink:href="#m445964aa5c" y="256.32"/>
568 </g>
569 </g>
570 <g id="text_7">
571 <!-- 9 -->
572 <defs>
573 <path d="M 10.984375 1.515625
574 L 10.984375 10.5
575 Q 14.703125 8.734375 18.5 7.8125
@@ -798,192 +599,651 @@
599 Q 16.21875 41.5 20.09375 36.953125
600 Q 23.96875 32.421875 30.609375 32.421875
601 z
602 " id="DejaVuSans-39"/>
603 </defs>
604 <g transform="translate(296.159375 269.6825)rotate(-90)scale(0.1 -0.1)">
605 <use xlink:href="#DejaVuSans-39"/>
606 </g>
607 </g>
608 </g>
609 <g id="xtick_8">
610 <g id="line2d_8">
611 <g>
612 <use style="stroke:#000000;stroke-width:0.8;" x="329.4" xlink:href="#m445964aa5c" y="256.32"/>
613 </g>
614 </g>
615 <g id="text_8">
616 <!-- 10 -->
617 <defs>
618 <path d="M 12.40625 8.296875
619 L 28.515625 8.296875
620 L 28.515625 63.921875
621 L 10.984375 60.40625
622 L 10.984375 69.390625
623 L 28.421875 72.90625
624 L 38.28125 72.90625
625 L 38.28125 8.296875
626 L 54.390625 8.296875
627 L 54.390625 0
628 L 12.40625 0
629 z
630 " id="DejaVuSans-31"/>
631 <path d="M 31.78125 66.40625
632 Q 24.171875 66.40625 20.328125 58.90625
633 Q 16.5 51.421875 16.5 36.375
634 Q 16.5 21.390625 20.328125 13.890625
635 Q 24.171875 6.390625 31.78125 6.390625
636 Q 39.453125 6.390625 43.28125 13.890625
637 Q 47.125 21.390625 47.125 36.375
638 Q 47.125 51.421875 43.28125 58.90625
639 Q 39.453125 66.40625 31.78125 66.40625
640 z
641 M 31.78125 74.21875
642 Q 44.046875 74.21875 50.515625 64.515625
643 Q 56.984375 54.828125 56.984375 36.375
644 Q 56.984375 17.96875 50.515625 8.265625
645 Q 44.046875 -1.421875 31.78125 -1.421875
646 Q 19.53125 -1.421875 13.0625 8.265625
647 Q 6.59375 17.96875 6.59375 36.375
648 Q 6.59375 54.828125 13.0625 64.515625
649 Q 19.53125 74.21875 31.78125 74.21875
650 z
651 " id="DejaVuSans-30"/>
652 </defs>
653 <g transform="translate(332.159375 276.045)rotate(-90)scale(0.1 -0.1)">
654 <use xlink:href="#DejaVuSans-31"/>
655 <use x="63.623047" xlink:href="#DejaVuSans-30"/>
656 </g>
657 </g>
658 </g>
659 <g id="xtick_9">
660 <g id="line2d_9">
661 <g>
662 <use style="stroke:#000000;stroke-width:0.8;" x="365.4" xlink:href="#m445964aa5c" y="256.32"/>
663 </g>
664 </g>
665 <g id="text_9">
666 <!-- 11 -->
667 <g transform="translate(368.159375 276.045)rotate(-90)scale(0.1 -0.1)">
668 <use xlink:href="#DejaVuSans-31"/>
669 <use x="63.623047" xlink:href="#DejaVuSans-31"/>
670 </g>
671 </g>
672 </g>
673 <g id="text_10">
674 <!-- Checkin index -->
675 <defs>
676 <path d="M 64.40625 67.28125
677 L 64.40625 56.890625
678 Q 59.421875 61.53125 53.78125 63.8125
679 Q 48.140625 66.109375 41.796875 66.109375
680 Q 29.296875 66.109375 22.65625 58.46875
681 Q 16.015625 50.828125 16.015625 36.375
682 Q 16.015625 21.96875 22.65625 14.328125
683 Q 29.296875 6.6875 41.796875 6.6875
684 Q 48.140625 6.6875 53.78125 8.984375
685 Q 59.421875 11.28125 64.40625 15.921875
686 L 64.40625 5.609375
687 Q 59.234375 2.09375 53.4375 0.328125
688 Q 47.65625 -1.421875 41.21875 -1.421875
689 Q 24.65625 -1.421875 15.125 8.703125
690 Q 5.609375 18.84375 5.609375 36.375
691 Q 5.609375 53.953125 15.125 64.078125
692 Q 24.65625 74.21875 41.21875 74.21875
693 Q 47.75 74.21875 53.53125 72.484375
694 Q 59.328125 70.75 64.40625 67.28125
695 z
696 " id="DejaVuSans-43"/>
697 <path d="M 54.890625 33.015625
698 L 54.890625 0
699 L 45.90625 0
700 L 45.90625 32.71875
701 Q 45.90625 40.484375 42.875 44.328125
702 Q 39.84375 48.1875 33.796875 48.1875
703 Q 26.515625 48.1875 22.3125 43.546875
704 Q 18.109375 38.921875 18.109375 30.90625
705 L 18.109375 0
706 L 9.078125 0
707 L 9.078125 75.984375
708 L 18.109375 75.984375
709 L 18.109375 46.1875
710 Q 21.34375 51.125 25.703125 53.5625
711 Q 30.078125 56 35.796875 56
712 Q 45.21875 56 50.046875 50.171875
713 Q 54.890625 44.34375 54.890625 33.015625
714 z
715 " id="DejaVuSans-68"/>
716 <path d="M 56.203125 29.59375
717 L 56.203125 25.203125
718 L 14.890625 25.203125
719 Q 15.484375 15.921875 20.484375 11.0625
720 Q 25.484375 6.203125 34.421875 6.203125
721 Q 39.59375 6.203125 44.453125 7.46875
722 Q 49.3125 8.734375 54.109375 11.28125
723 L 54.109375 2.78125
724 Q 49.265625 0.734375 44.1875 -0.34375
725 Q 39.109375 -1.421875 33.890625 -1.421875
726 Q 20.796875 -1.421875 13.15625 6.1875
727 Q 5.515625 13.8125 5.515625 26.8125
728 Q 5.515625 40.234375 12.765625 48.109375
729 Q 20.015625 56 32.328125 56
730 Q 43.359375 56 49.78125 48.890625
731 Q 56.203125 41.796875 56.203125 29.59375
732 z
733 M 47.21875 32.234375
734 Q 47.125 39.59375 43.09375 43.984375
735 Q 39.0625 48.390625 32.421875 48.390625
736 Q 24.90625 48.390625 20.390625 44.140625
737 Q 15.875 39.890625 15.1875 32.171875
738 z
739 " id="DejaVuSans-65"/>
740 <path d="M 48.78125 52.59375
741 L 48.78125 44.1875
742 Q 44.96875 46.296875 41.140625 47.34375
743 Q 37.3125 48.390625 33.40625 48.390625
744 Q 24.65625 48.390625 19.8125 42.84375
745 Q 14.984375 37.3125 14.984375 27.296875
746 Q 14.984375 17.28125 19.8125 11.734375
747 Q 24.65625 6.203125 33.40625 6.203125
748 Q 37.3125 6.203125 41.140625 7.25
749 Q 44.96875 8.296875 48.78125 10.40625
750 L 48.78125 2.09375
751 Q 45.015625 0.34375 40.984375 -0.53125
752 Q 36.96875 -1.421875 32.421875 -1.421875
753 Q 20.0625 -1.421875 12.78125 6.34375
754 Q 5.515625 14.109375 5.515625 27.296875
755 Q 5.515625 40.671875 12.859375 48.328125
756 Q 20.21875 56 33.015625 56
757 Q 37.15625 56 41.109375 55.140625
758 Q 45.0625 54.296875 48.78125 52.59375
759 z
760 " id="DejaVuSans-63"/>
761 <path d="M 9.078125 75.984375
762 L 18.109375 75.984375
763 L 18.109375 31.109375
764 L 44.921875 54.6875
765 L 56.390625 54.6875
766 L 27.390625 29.109375
767 L 57.625 0
768 L 45.90625 0
769 L 18.109375 26.703125
770 L 18.109375 0
771 L 9.078125 0
772 z
773 " id="DejaVuSans-6b"/>
774 <path d="M 9.421875 54.6875
775 L 18.40625 54.6875
776 L 18.40625 0
777 L 9.421875 0
778 z
779 M 9.421875 75.984375
780 L 18.40625 75.984375
781 L 18.40625 64.59375
782 L 9.421875 64.59375
783 z
784 " id="DejaVuSans-69"/>
785 <path d="M 54.890625 33.015625
786 L 54.890625 0
787 L 45.90625 0
788 L 45.90625 32.71875
789 Q 45.90625 40.484375 42.875 44.328125
790 Q 39.84375 48.1875 33.796875 48.1875
791 Q 26.515625 48.1875 22.3125 43.546875
792 Q 18.109375 38.921875 18.109375 30.90625
793 L 18.109375 0
794 L 9.078125 0
795 L 9.078125 54.6875
796 L 18.109375 54.6875
797 L 18.109375 46.1875
798 Q 21.34375 51.125 25.703125 53.5625
799 Q 30.078125 56 35.796875 56
800 Q 45.21875 56 50.046875 50.171875
801 Q 54.890625 44.34375 54.890625 33.015625
802 z
803 " id="DejaVuSans-6e"/>
804 <path id="DejaVuSans-20"/>
805 <path d="M 45.40625 46.390625
806 L 45.40625 75.984375
807 L 54.390625 75.984375
808 L 54.390625 0
809 L 45.40625 0
810 L 45.40625 8.203125
811 Q 42.578125 3.328125 38.25 0.953125
812 Q 33.9375 -1.421875 27.875 -1.421875
813 Q 17.96875 -1.421875 11.734375 6.484375
814 Q 5.515625 14.40625 5.515625 27.296875
815 Q 5.515625 40.1875 11.734375 48.09375
816 Q 17.96875 56 27.875 56
817 Q 33.9375 56 38.25 53.625
818 Q 42.578125 51.265625 45.40625 46.390625
819 z
820 M 14.796875 27.296875
821 Q 14.796875 17.390625 18.875 11.75
822 Q 22.953125 6.109375 30.078125 6.109375
823 Q 37.203125 6.109375 41.296875 11.75
824 Q 45.40625 17.390625 45.40625 27.296875
825 Q 45.40625 37.203125 41.296875 42.84375
826 Q 37.203125 48.484375 30.078125 48.484375
827 Q 22.953125 48.484375 18.875 42.84375
828 Q 14.796875 37.203125 14.796875 27.296875
829 z
830 " id="DejaVuSans-64"/>
831 <path d="M 54.890625 54.6875
832 L 35.109375 28.078125
833 L 55.90625 0
834 L 45.3125 0
835 L 29.390625 21.484375
836 L 13.484375 0
837 L 2.875 0
838 L 24.125 28.609375
839 L 4.6875 54.6875
840 L 15.28125 54.6875
841 L 29.78125 35.203125
842 L 44.28125 54.6875
843 z
844 " id="DejaVuSans-78"/>
845 </defs>
846 <g transform="translate(186.104688 287.643438)scale(0.1 -0.1)">
847 <use xlink:href="#DejaVuSans-43"/>
848 <use x="69.824219" xlink:href="#DejaVuSans-68"/>
849 <use x="133.203125" xlink:href="#DejaVuSans-65"/>
850 <use x="194.726562" xlink:href="#DejaVuSans-63"/>
851 <use x="249.707031" xlink:href="#DejaVuSans-6b"/>
852 <use x="307.617188" xlink:href="#DejaVuSans-69"/>
853 <use x="335.400391" xlink:href="#DejaVuSans-6e"/>
854 <use x="398.779297" xlink:href="#DejaVuSans-20"/>
855 <use x="430.566406" xlink:href="#DejaVuSans-69"/>
856 <use x="458.349609" xlink:href="#DejaVuSans-6e"/>
857 <use x="521.728516" xlink:href="#DejaVuSans-64"/>
858 <use x="585.205078" xlink:href="#DejaVuSans-65"/>
859 <use x="646.712891" xlink:href="#DejaVuSans-78"/>
860 </g>
861 </g>
862 </g>
863 <g id="matplotlib.axis_2">
864 <g id="ytick_1">
865 <g id="line2d_10">
866 <defs>
867 <path d="M 0 0
868 L -3.5 0
869 " id="mdf25573cb4" style="stroke:#000000;stroke-width:0.8;"/>
870 </defs>
871 <g>
872 <use style="stroke:#000000;stroke-width:0.8;" x="54" xlink:href="#mdf25573cb4" y="256.32"/>
873 </g>
874 </g>
875 <g id="text_11">
876 <!-- 0.0 -->
877 <defs>
878 <path d="M 10.6875 12.40625
879 L 21 12.40625
880 L 21 0
881 L 10.6875 0
882 z
883 " id="DejaVuSans-2e"/>
884 </defs>
885 <g transform="translate(31.096875 260.119219)scale(0.1 -0.1)">
886 <use xlink:href="#DejaVuSans-30"/>
887 <use x="63.623047" xlink:href="#DejaVuSans-2e"/>
888 <use x="95.410156" xlink:href="#DejaVuSans-30"/>
889 </g>
890 </g>
891 </g>
892 <g id="ytick_2">
893 <g id="line2d_11">
894 <g>
895 <use style="stroke:#000000;stroke-width:0.8;" x="54" xlink:href="#mdf25573cb4" y="212.362927"/>
896 </g>
897 </g>
898 <g id="text_12">
899 <!-- 0.2 -->
900 <defs>
901 <path d="M 19.1875 8.296875
902 L 53.609375 8.296875
903 L 53.609375 0
904 L 7.328125 0
905 L 7.328125 8.296875
906 Q 12.9375 14.109375 22.625 23.890625
907 Q 32.328125 33.6875 34.8125 36.53125
908 Q 39.546875 41.84375 41.421875 45.53125
909 Q 43.3125 49.21875 43.3125 52.78125
910 Q 43.3125 58.59375 39.234375 62.25
911 Q 35.15625 65.921875 28.609375 65.921875
912 Q 23.96875 65.921875 18.8125 64.3125
913 Q 13.671875 62.703125 7.8125 59.421875
914 L 7.8125 69.390625
915 Q 13.765625 71.78125 18.9375 73
916 Q 24.125 74.21875 28.421875 74.21875
917 Q 39.75 74.21875 46.484375 68.546875
918 Q 53.21875 62.890625 53.21875 53.421875
919 Q 53.21875 48.921875 51.53125 44.890625
920 Q 49.859375 40.875 45.40625 35.40625
921 Q 44.1875 33.984375 37.640625 27.21875
922 Q 31.109375 20.453125 19.1875 8.296875
923 z
924 " id="DejaVuSans-32"/>
925 </defs>
926 <g transform="translate(31.096875 216.162146)scale(0.1 -0.1)">
927 <use xlink:href="#DejaVuSans-30"/>
928 <use x="63.623047" xlink:href="#DejaVuSans-2e"/>
929 <use x="95.410156" xlink:href="#DejaVuSans-32"/>
930 </g>
931 </g>
932 </g>
933 <g id="ytick_3">
934 <g id="line2d_12">
935 <g>
936 <use style="stroke:#000000;stroke-width:0.8;" x="54" xlink:href="#mdf25573cb4" y="168.405854"/>
937 </g>
938 </g>
939 <g id="text_13">
940 <!-- 0.4 -->
941 <g transform="translate(31.096875 172.205072)scale(0.1 -0.1)">
942 <use xlink:href="#DejaVuSans-30"/>
943 <use x="63.623047" xlink:href="#DejaVuSans-2e"/>
944 <use x="95.410156" xlink:href="#DejaVuSans-34"/>
945 </g>
946 </g>
947 </g>
948 <g id="ytick_4">
949 <g id="line2d_13">
950 <g>
951 <use style="stroke:#000000;stroke-width:0.8;" x="54" xlink:href="#mdf25573cb4" y="124.44878"/>
952 </g>
953 </g>
954 <g id="text_14">
955 <!-- 0.6 -->
956 <g transform="translate(31.096875 128.247999)scale(0.1 -0.1)">
957 <use xlink:href="#DejaVuSans-30"/>
958 <use x="63.623047" xlink:href="#DejaVuSans-2e"/>
959 <use x="95.410156" xlink:href="#DejaVuSans-36"/>
960 </g>
961 </g>
962 </g>
963 <g id="ytick_5">
964 <g id="line2d_14">
965 <g>
966 <use style="stroke:#000000;stroke-width:0.8;" x="54" xlink:href="#mdf25573cb4" y="80.491707"/>
967 </g>
968 </g>
969 <g id="text_15">
970 <!-- 0.8 -->
971 <g transform="translate(31.096875 84.290926)scale(0.1 -0.1)">
972 <use xlink:href="#DejaVuSans-30"/>
973 <use x="63.623047" xlink:href="#DejaVuSans-2e"/>
974 <use x="95.410156" xlink:href="#DejaVuSans-38"/>
975 </g>
976 </g>
977 </g>
978 <g id="ytick_6">
979 <g id="line2d_15">
980 <g>
981 <use style="stroke:#000000;stroke-width:0.8;" x="54" xlink:href="#mdf25573cb4" y="36.534634"/>
982 </g>
983 </g>
984 <g id="text_16">
985 <!-- 1.0 -->
986 <g transform="translate(31.096875 40.333853)scale(0.1 -0.1)">
987 <use xlink:href="#DejaVuSans-31"/>
988 <use x="63.623047" xlink:href="#DejaVuSans-2e"/>
989 <use x="95.410156" xlink:href="#DejaVuSans-30"/>
990 </g>
991 </g>
992 </g>
993 <g id="text_17">
994 <!-- Repo size (MiB) -->
995 <defs>
996 <path d="M 44.390625 34.1875
997 Q 47.5625 33.109375 50.5625 29.59375
998 Q 53.5625 26.078125 56.59375 19.921875
999 L 66.609375 0
1000 L 56 0
1001 L 46.6875 18.703125
1002 Q 43.0625 26.03125 39.671875 28.421875
1003 Q 36.28125 30.8125 30.421875 30.8125
1004 L 19.671875 30.8125
1005 L 19.671875 0
1006 L 9.8125 0
1007 L 9.8125 72.90625
1008 L 32.078125 72.90625
1009 Q 44.578125 72.90625 50.734375 67.671875
1010 Q 56.890625 62.453125 56.890625 51.90625
1011 Q 56.890625 45.015625 53.6875 40.46875
1012 Q 50.484375 35.9375 44.390625 34.1875
1013 z
1014 M 19.671875 64.796875
1015 L 19.671875 38.921875
1016 L 32.078125 38.921875
1017 Q 39.203125 38.921875 42.84375 42.21875
1018 Q 46.484375 45.515625 46.484375 51.90625
1019 Q 46.484375 58.296875 42.84375 61.546875
1020 Q 39.203125 64.796875 32.078125 64.796875
1021 z
1022 " id="DejaVuSans-52"/>
1023 <path d="M 18.109375 8.203125
1024 L 18.109375 -20.796875
1025 L 9.078125 -20.796875
1026 L 9.078125 54.6875
1027 L 18.109375 54.6875
1028 L 18.109375 46.390625
1029 Q 20.953125 51.265625 25.265625 53.625
1030 Q 29.59375 56 35.59375 56
1031 Q 45.5625 56 51.78125 48.09375
1032 Q 58.015625 40.1875 58.015625 27.296875
1033 Q 58.015625 14.40625 51.78125 6.484375
1034 Q 45.5625 -1.421875 35.59375 -1.421875
1035 Q 29.59375 -1.421875 25.265625 0.953125
1036 Q 20.953125 3.328125 18.109375 8.203125
1037 z
1038 M 48.6875 27.296875
1039 Q 48.6875 37.203125 44.609375 42.84375
1040 Q 40.53125 48.484375 33.40625 48.484375
1041 Q 26.265625 48.484375 22.1875 42.84375
1042 Q 18.109375 37.203125 18.109375 27.296875
1043 Q 18.109375 17.390625 22.1875 11.75
1044 Q 26.265625 6.109375 33.40625 6.109375
1045 Q 40.53125 6.109375 44.609375 11.75
1046 Q 48.6875 17.390625 48.6875 27.296875
1047 z
1048 " id="DejaVuSans-70"/>
1049 <path d="M 30.609375 48.390625
1050 Q 23.390625 48.390625 19.1875 42.75
1051 Q 14.984375 37.109375 14.984375 27.296875
1052 Q 14.984375 17.484375 19.15625 11.84375
1053 Q 23.34375 6.203125 30.609375 6.203125
1054 Q 37.796875 6.203125 41.984375 11.859375
1055 Q 46.1875 17.53125 46.1875 27.296875
1056 Q 46.1875 37.015625 41.984375 42.703125
1057 Q 37.796875 48.390625 30.609375 48.390625
1058 z
1059 M 30.609375 56
1060 Q 42.328125 56 49.015625 48.375
1061 Q 55.71875 40.765625 55.71875 27.296875
1062 Q 55.71875 13.875 49.015625 6.21875
1063 Q 42.328125 -1.421875 30.609375 -1.421875
1064 Q 18.84375 -1.421875 12.171875 6.21875
1065 Q 5.515625 13.875 5.515625 27.296875
1066 Q 5.515625 40.765625 12.171875 48.375
1067 Q 18.84375 56 30.609375 56
1068 z
1069 " id="DejaVuSans-6f"/>
1070 <path d="M 44.28125 53.078125
1071 L 44.28125 44.578125
1072 Q 40.484375 46.53125 36.375 47.5
1073 Q 32.28125 48.484375 27.875 48.484375
1074 Q 21.1875 48.484375 17.84375 46.4375
1075 Q 14.5 44.390625 14.5 40.28125
1076 Q 14.5 37.15625 16.890625 35.375
1077 Q 19.28125 33.59375 26.515625 31.984375
1078 L 29.59375 31.296875
1079 Q 39.15625 29.25 43.1875 25.515625
1080 Q 47.21875 21.78125 47.21875 15.09375
1081 Q 47.21875 7.46875 41.1875 3.015625
1082 Q 35.15625 -1.421875 24.609375 -1.421875
1083 Q 20.21875 -1.421875 15.453125 -0.5625
1084 Q 10.6875 0.296875 5.421875 2
1085 L 5.421875 11.28125
1086 Q 10.40625 8.6875 15.234375 7.390625
1087 Q 20.0625 6.109375 24.8125 6.109375
1088 Q 31.15625 6.109375 34.5625 8.28125
1089 Q 37.984375 10.453125 37.984375 14.40625
1090 Q 37.984375 18.0625 35.515625 20.015625
1091 Q 33.0625 21.96875 24.703125 23.78125
1092 L 21.578125 24.515625
1093 Q 13.234375 26.265625 9.515625 29.90625
1094 Q 5.8125 33.546875 5.8125 39.890625
1095 Q 5.8125 47.609375 11.28125 51.796875
1096 Q 16.75 56 26.8125 56
1097 Q 31.78125 56 36.171875 55.265625
1098 Q 40.578125 54.546875 44.28125 53.078125
1099 z
1100 " id="DejaVuSans-73"/>
1101 <path d="M 5.515625 54.6875
1102 L 48.1875 54.6875
1103 L 48.1875 46.484375
1104 L 14.40625 7.171875
1105 L 48.1875 7.171875
1106 L 48.1875 0
1107 L 4.296875 0
1108 L 4.296875 8.203125
1109 L 38.09375 47.515625
1110 L 5.515625 47.515625
1111 z
1112 " id="DejaVuSans-7a"/>
1113 <path d="M 31 75.875
1114 Q 24.46875 64.65625 21.28125 53.65625
1115 Q 18.109375 42.671875 18.109375 31.390625
1116 Q 18.109375 20.125 21.3125 9.0625
1117 Q 24.515625 -2 31 -13.1875
1118 L 23.1875 -13.1875
1119 Q 15.875 -1.703125 12.234375 9.375
1120 Q 8.59375 20.453125 8.59375 31.390625
1121 Q 8.59375 42.28125 12.203125 53.3125
1122 Q 15.828125 64.359375 23.1875 75.875
1123 z
1124 " id="DejaVuSans-28"/>
1125 <path d="M 9.8125 72.90625
1126 L 24.515625 72.90625
1127 L 43.109375 23.296875
1128 L 61.8125 72.90625
1129 L 76.515625 72.90625
1130 L 76.515625 0
1131 L 66.890625 0
1132 L 66.890625 64.015625
1133 L 48.09375 14.015625
1134 L 38.1875 14.015625
1135 L 19.390625 64.015625
1136 L 19.390625 0
1137 L 9.8125 0
1138 z
1139 " id="DejaVuSans-4d"/>
1140 <path d="M 19.671875 34.8125
1141 L 19.671875 8.109375
1142 L 35.5 8.109375
1143 Q 43.453125 8.109375 47.28125 11.40625
1144 Q 51.125 14.703125 51.125 21.484375
1145 Q 51.125 28.328125 47.28125 31.5625
1146 Q 43.453125 34.8125 35.5 34.8125
1147 z
1148 M 19.671875 64.796875
1149 L 19.671875 42.828125
1150 L 34.28125 42.828125
1151 Q 41.5 42.828125 45.03125 45.53125
1152 Q 48.578125 48.25 48.578125 53.8125
1153 Q 48.578125 59.328125 45.03125 62.0625
1154 Q 41.5 64.796875 34.28125 64.796875
1155 z
1156 M 9.8125 72.90625
1157 L 35.015625 72.90625
1158 Q 46.296875 72.90625 52.390625 68.21875
1159 Q 58.5 63.53125 58.5 54.890625
1160 Q 58.5 48.1875 55.375 44.234375
1161 Q 52.25 40.28125 46.1875 39.3125
1162 Q 53.46875 37.75 57.5 32.78125
1163 Q 61.53125 27.828125 61.53125 20.40625
1164 Q 61.53125 10.640625 54.890625 5.3125
1165 Q 48.25 0 35.984375 0
1166 L 9.8125 0
1167 z
1168 " id="DejaVuSans-42"/>
1169 <path d="M 8.015625 75.875
1170 L 15.828125 75.875
1171 Q 23.140625 64.359375 26.78125 53.3125
1172 Q 30.421875 42.28125 30.421875 31.390625
1173 Q 30.421875 20.453125 26.78125 9.375
1174 Q 23.140625 -1.703125 15.828125 -13.1875
1175 L 8.015625 -13.1875
1176 Q 14.5 -2 17.703125 9.0625
1177 Q 20.90625 20.125 20.90625 31.390625
1178 Q 20.90625 42.671875 17.703125 53.65625
1179 Q 14.5 64.65625 8.015625 75.875
1180 z
1181 " id="DejaVuSans-29"/>
1182 </defs>
1183 <g transform="translate(25.017187 184.129063)rotate(-90)scale(0.1 -0.1)">
1184 <use xlink:href="#DejaVuSans-52"/>
1185 <use x="69.419922" xlink:href="#DejaVuSans-65"/>
1186 <use x="130.943359" xlink:href="#DejaVuSans-70"/>
1187 <use x="194.419922" xlink:href="#DejaVuSans-6f"/>
1188 <use x="255.601562" xlink:href="#DejaVuSans-20"/>
1189 <use x="287.388672" xlink:href="#DejaVuSans-73"/>
1190 <use x="339.488281" xlink:href="#DejaVuSans-69"/>
1191 <use x="367.271484" xlink:href="#DejaVuSans-7a"/>
1192 <use x="419.761719" xlink:href="#DejaVuSans-65"/>
1193 <use x="481.285156" xlink:href="#DejaVuSans-20"/>
1194 <use x="513.072266" xlink:href="#DejaVuSans-28"/>
1195 <use x="552.085938" xlink:href="#DejaVuSans-4d"/>
1196 <use x="638.365234" xlink:href="#DejaVuSans-69"/>
1197 <use x="666.148438" xlink:href="#DejaVuSans-42"/>
1198 <use x="734.751953" xlink:href="#DejaVuSans-29"/>
1199 </g>
1200 </g>
1201 </g>
1202 <g id="patch_39">
1203 <path d="M 54 256.32
1204 L 54 34.56
1205 " style="fill:none;stroke:#000000;stroke-linecap:square;stroke-linejoin:miter;stroke-width:0.8;"/>
1206 </g>
1207 <g id="patch_40">
1208 <path d="M 388.8 256.32
1209 L 388.8 34.56
1210 " style="fill:none;stroke:#000000;stroke-linecap:square;stroke-linejoin:miter;stroke-width:0.8;"/>
1211 </g>
1212 <g id="patch_41">
1213 <path d="M 54 256.32
1214 L 388.8 256.32
1215 " style="fill:none;stroke:#000000;stroke-linecap:square;stroke-linejoin:miter;stroke-width:0.8;"/>
1216 </g>
1217 <g id="patch_42">
1218 <path d="M 54 34.56
1219 L 388.8 34.56
1220 " style="fill:none;stroke:#000000;stroke-linecap:square;stroke-linejoin:miter;stroke-width:0.8;"/>
1221 </g>
1222 <g id="legend_1">
1223 <g id="patch_43">
1224 <path d="M 61 101.2725
1225 L 116.046875 101.2725
1226 Q 118.046875 101.2725 118.046875 99.2725
1227 L 118.046875 41.56
1228 Q 118.046875 39.56 116.046875 39.56
1229 L 61 39.56
1230 Q 59 39.56 59 41.56
1231 L 59 99.2725
1232 Q 59 101.2725 61 101.2725
1233 z
1234 " style="fill:#ffffff;opacity:0.8;stroke:#cccccc;stroke-linejoin:miter;"/>
1235 </g>
1236 <g id="patch_44">
1237 <path d="M 63 51.158438
1238 L 83 51.158438
1239 L 83 44.158438
1240 L 63 44.158438
1241 z
1242 " style="fill:#3b4cc0;stroke:#ffffff;stroke-linejoin:miter;stroke-width:2;"/>
1243 </g>
1244 <g id="text_18">
1245 <!-- JPEG -->
1246 <defs>
1247 <path d="M 9.8125 72.90625
1248 L 19.671875 72.90625
1249 L 19.671875 5.078125
@@ -1053,88 +1313,42 @@
1313 Q 48.046875 6.6875 52.140625 7.59375
1314 Q 56.25 8.5 59.515625 10.40625
1315 z
1316 " id="DejaVuSans-47"/>
1317 </defs>
1318 <g transform="translate(91 51.158438)scale(0.1 -0.1)">
1319 <use xlink:href="#DejaVuSans-4a"/>
1320 <use x="29.492188" xlink:href="#DejaVuSans-50"/>
1321 <use x="89.794922" xlink:href="#DejaVuSans-45"/>
1322 <use x="152.978516" xlink:href="#DejaVuSans-47"/>
1323 </g>
1324 </g>
1325 <g id="patch_45">
1326 <path d="M 63 65.836563
1327 L 83 65.836563
1328 L 83 58.836563
1329 L 63 58.836563
1330 z
1331 " style="fill:#aac7fd;stroke:#ffffff;stroke-linejoin:miter;stroke-width:2;"/>
1332 </g>
1333 <g id="text_19">
1334 <!-- BMP -->
1335 <g transform="translate(91 65.836563)scale(0.1 -0.1)">
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1336 <use xlink:href="#DejaVuSans-42"/>
1337 <use x="68.603516" xlink:href="#DejaVuSans-4d"/>
1338 <use x="154.882812" xlink:href="#DejaVuSans-50"/>
1339 </g>
1340 </g>
1341 <g id="patch_46">
1342 <path d="M 63 80.514688
1343 L 83 80.514688
1344 L 83 73.514688
1345 L 63 73.514688
1346 z
1347 " style="fill:#f7b89c;stroke:#ffffff;stroke-linejoin:miter;stroke-width:2;"/>
1348 </g>
1349 <g id="text_20">
1350 <!-- TIFF -->
1351 <defs>
1352 <path d="M -0.296875 72.90625
1353 L 61.375 72.90625
1354 L 61.375 64.59375
@@ -1162,26 +1376,26 @@
1376 L 19.671875 0
1377 L 9.8125 0
1378 z
1379 " id="DejaVuSans-46"/>
1380 </defs>
1381 <g transform="translate(91 80.514688)scale(0.1 -0.1)">
1382 <use xlink:href="#DejaVuSans-54"/>
1383 <use x="61.083984" xlink:href="#DejaVuSans-49"/>
1384 <use x="90.576172" xlink:href="#DejaVuSans-46"/>
1385 <use x="148.095703" xlink:href="#DejaVuSans-46"/>
1386 </g>
1387 </g>
1388 <g id="patch_47">
1389 <path d="M 63 95.192813
1390 L 83 95.192813
1391 L 83 88.192813
1392 L 63 88.192813
1393 z
1394 " style="fill:#b40426;stroke:#ffffff;stroke-linejoin:miter;stroke-width:2;"/>
1395 </g>
1396 <g id="text_21">
1397 <!-- PNG -->
1398 <defs>
1399 <path d="M 9.8125 72.90625
1400 L 23.09375 72.90625
1401 L 55.421875 11.921875
@@ -1193,20 +1407,20 @@
1407 L 19.390625 0
1408 L 9.8125 0
1409 z
1410 " id="DejaVuSans-4e"/>
1411 </defs>
1412 <g transform="translate(91 95.192813)scale(0.1 -0.1)">
1413 <use xlink:href="#DejaVuSans-50"/>
1414 <use x="60.302734" xlink:href="#DejaVuSans-4e"/>
1415 <use x="135.107422" xlink:href="#DejaVuSans-47"/>
1416 </g>
1417 </g>
1418 </g>
1419 </g>
1420 </g>
1421 <defs>
1422 <clipPath id="pbb31c7aa29">
1423 <rect height="221.76" width="334.8" x="54" y="34.56"/>
1424 </clipPath>
1425 </defs>
1426 </svg>
1427

Keyboard Shortcuts

Open search /
Next entry (timeline) j
Previous entry (timeline) k
Open focused entry Enter
Show this help ?
Toggle theme Top nav button