This commit is contained in:
NN Solex 2023-05-01 21:58:23 +03:00
parent 33d02a4845
commit 20c0224bc8
53 changed files with 1329 additions and 60 deletions

View file

@ -0,0 +1,127 @@
<!DOCTYPE html>
<html lang="english">
<head>
<base target="_top">
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title></title>
<link rel="shortcut icon" type="image/x-icon" href="/images/favicon.ico" />
<link rel="stylesheet" href="/theme/local.css">
<link rel="stylesheet" href="https://unpkg.com/leaflet@1.9.3/dist/leaflet.css" integrity="sha256-kLaT2GOSpHechhsozzB+flnD+zUyjE2LlfWPgU04xyI=" crossorigin=""/>
<style>
html, body { height: 100%; margin: 0; padding: 0; }
h1 {
font-size: 4em;
margin: 0;
}
</style>
<script src="https://unpkg.com/leaflet@1.9.3/dist/leaflet.js" integrity="sha256-WBkoXOwTeyKclOHuWtc+i2uENFpDZ9YPdf5Hf+D7ewM=" crossorigin=""></script>
</head>
<body>
<div id='map'></div>
<script>
BITS = [16, 8, 4, 2, 1];
BASE32 = "0123456789bcdefghjkmnpqrstuvwxyz";
function encodeGeoHash(latitude, longitude) {
var is_even=1;
var i=0;
var lat = []; var lon = [];
var bit=0;
var ch=0;
var precision = 10;
geohash = "";
lat[0] = -90.0; lat[1] = 90.0;
lon[0] = -180.0; lon[1] = 180.0;
while (geohash.length < precision) {
if (is_even) {
mid = (lon[0] + lon[1]) / 2;
if (longitude > mid) {
ch |= BITS[bit];
lon[0] = mid;
} else
lon[1] = mid;
} else {
mid = (lat[0] + lat[1]) / 2;
if (latitude > mid) {
ch |= BITS[bit];
lat[0] = mid;
} else
lat[1] = mid;
}
is_even = !is_even;
if (bit < 4)
bit++;
else {
geohash += BASE32[ch];
bit = 0;
ch = 0;
}
}
return geohash;
}
function copyToClipboard() {
var copyText = document.getElementById("geohash").innerText;
navigator.clipboard.writeText(copyText).then(() => {
alert("Copied " + copyText + " to clipboard");
});
}
var bluedot = L.icon({
iconUrl: '/theme/bluedot.svg',
iconSize: [18, 18],
iconAnchor: [9, 9],
popupAnchor: [0, -10]
});
const map = L.map('map').fitWorld();
const tiles = L.tileLayer('https://tile.openstreetmap.org/{z}/{x}/{y}.png', {
maxZoom: 19,
attribution: '&copy; <a href="http://www.openstreetmap.org/copyright">OpenStreetMap</a>'
}).addTo(map);
var locationMarker, locationCircle;
function onLocationFound(e) {
if (locationMarker) {
map.removeLayer(locationMarker);
map.removeLayer(locationCircle);
}
const radius = e.accuracy / 2;
locationMarker = L.marker(e.latlng, {icon: bluedot}).addTo(map);
locationCircle = L.circle(e.latlng, radius).addTo(map);
info.update(e);
}
function onLocationError(e) {
alert(e.message);
}
map.on('locationfound', onLocationFound);
map.on('locationerror', onLocationError);
map.locate({setView: true, watch: true});
var info = L.control({position: 'topright'});
info.onAdd = function (map) {
this._div = L.DomUtil.create('div', 'info'); // create a div with a class "info"
return this._div;
};
info.update = function (e) {
this._div.innerHTML = this._div.innerHTML = '<h1 id="geohash" onclick="copyToClipboard()">' + encodeGeoHash(e.latlng.lat, e.latlng.lng) + '</h1>';
};
info.addTo(map);
</script>
</body>
</html>

View file

@ -15,4 +15,6 @@
</body>
<script src="/theme/platform.js"></script>
<script src="/theme/geo.js"></script>
</html>

View file

@ -0,0 +1,15 @@
<?xml version="1.0" ?>
<kml xmlns="http://www.opengis.net/kml/2.2" xmlns:gx="http://www.google.com/kml/ext/2.2">
<Document>
<Folder/>
</Document>
<wpt lat="32.70124169424201" lon="34.9805500394171">
<name>Journal Entry 1</name>
</wpt>
<wpt lat="32.699615286072735" lon="34.98304356695975">
<name>Journal Entry 2</name>
</wpt>
<wpt lat="32.70003059472479" lon="34.985554114475526">
<name>Journal Entry 3</name>
</wpt>
</kml>

View file

@ -0,0 +1,26 @@
<?xml version="1.0" ?>
<kml xmlns="http://www.opengis.net/kml/2.2" xmlns:gx="http://www.google.com/kml/ext/2.2">
<Document>
<Folder>
<name>Blue Eyed Donkey</name>
<Placemark>
<name>Journal Entry 1</name>
<Point>
<coordinates>34.9805500394171,32.70124169424201</coordinates>
</Point>
</Placemark>
<Placemark>
<name>Journal Entry 2</name>
<Point>
<coordinates>34.98304356695975,32.699615286072735</coordinates>
</Point>
</Placemark>
<Placemark>
<name>Journal Entry 3</name>
<Point>
<coordinates>34.985554114475526,32.70003059472479</coordinates>
</Point>
</Placemark>
</Folder>
</Document>
</kml>

View file

@ -1,27 +1,66 @@
<!DOCTYPE html>
<html lang="english">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link href="/theme/local.css" rel="stylesheet">
<base target="_top">
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Blue Eyed Donkey</title>
<link rel="shortcut icon" type="image/x-icon" href="/images/favicon.ico" />
<link rel="stylesheet" href="/theme/local.css">
<link rel="stylesheet" href="https://unpkg.com/leaflet@1.9.3/dist/leaflet.css" integrity="sha256-kLaT2GOSpHechhsozzB+flnD+zUyjE2LlfWPgU04xyI=" crossorigin=""/>
<style>
html, body { height: 100%; margin: 0; padding: 0; }
</style>
<script src="https://unpkg.com/leaflet@1.9.3/dist/leaflet.js" integrity="sha256-WBkoXOwTeyKclOHuWtc+i2uENFpDZ9YPdf5Hf+D7ewM=" crossorigin=""></script>
</head>
<body>
<script>
var nfcTags = {
"type": "FeatureCollection",
"title": "Blue Eyed Donkey",
"id" : "blue-eyed-donkey",
"features": [
{
"type": "Feature",
"id": "svbfh1049ck",
"geometry": {
"type": "Point",
"coordinates": [34.9805500394171, 32.70124169424201]
},
"properties": {
"title": "Journal Entry 1"
},
},
{
"type": "Feature",
"id": "svbfh0cc5fp",
"geometry": {
"type": "Point",
"coordinates": [34.98304356695975, 32.699615286072735]
},
"properties": {
"title": "Journal Entry 2"
},
},
{
"type": "Feature",
"id": "svbfh0geqrx",
"geometry": {
"type": "Point",
"coordinates": [34.985554114475526, 32.70003059472479]
},
"properties": {
"title": "Journal Entry 3"
},
},
]
};
<body id="index" class="home">
<section id="content">
<h2>Blue Eyed Donkey</h2>
<article class="hentry">
<header>
<h2 class="entry-title">
<a href="/svbfh1049ck" rel="bookmark">Entry 1</a>
</h2>
<span class="entry-summary"></span>
</header>
</article>
</section>
</script>
<div id='map'></div>
<script src="/theme/map.js"></script>
</body>
</html>

View file

@ -10,7 +10,10 @@
<ul>
<li><a href="/projects/blue-eyed-donkey">Blue Eyed Donkey</a></li>
<li><a href="/projects/testing">Testing</a></li>
</ul>
</body>
<script src="/theme/platform.js"></script>
<script src="/theme/geo.js"></script>
</html>

View file

@ -0,0 +1,9 @@
<?xml version="1.0" ?>
<kml xmlns="http://www.opengis.net/kml/2.2" xmlns:gx="http://www.google.com/kml/ext/2.2">
<Document>
<Folder/>
</Document>
<wpt lat="32.70194460092584" lon="34.972507850461874">
<name>Test</name>
</wpt>
</kml>

View file

@ -0,0 +1,14 @@
<?xml version="1.0" ?>
<kml xmlns="http://www.opengis.net/kml/2.2" xmlns:gx="http://www.google.com/kml/ext/2.2">
<Document>
<Folder>
<name>Testing</name>
<Placemark>
<name>Test</name>
<Point>
<coordinates>34.972507850461874,32.70194460092584</coordinates>
</Point>
</Placemark>
</Folder>
</Document>
</kml>

View file

@ -0,0 +1,44 @@
<!DOCTYPE html>
<html lang="english">
<head>
<base target="_top">
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Testing</title>
<link rel="shortcut icon" type="image/x-icon" href="/images/favicon.ico" />
<link rel="stylesheet" href="/theme/local.css">
<link rel="stylesheet" href="https://unpkg.com/leaflet@1.9.3/dist/leaflet.css" integrity="sha256-kLaT2GOSpHechhsozzB+flnD+zUyjE2LlfWPgU04xyI=" crossorigin=""/>
<style>
html, body { height: 100%; margin: 0; padding: 0; }
</style>
<script src="https://unpkg.com/leaflet@1.9.3/dist/leaflet.js" integrity="sha256-WBkoXOwTeyKclOHuWtc+i2uENFpDZ9YPdf5Hf+D7ewM=" crossorigin=""></script>
</head>
<body>
<script>
var nfcTags = {
"type": "FeatureCollection",
"title": "Testing",
"id" : "testing",
"features": [
{
"type": "Feature",
"id": "svbf5c4nwkr",
"geometry": {
"type": "Point",
"coordinates": [34.972507850461874, 32.70194460092584]
},
"properties": {
"title": "Test"
},
},
]
};
</script>
<div id='map'></div>
<script src="/theme/map.js"></script>
</body>
</html>

View file

@ -0,0 +1,21 @@
<!DOCTYPE html>
<html lang="english">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link href="/theme/local.css" rel="stylesheet">
</head>
<body id="index" class="home">
<section id="content" class="body">
<div class="entry-content">
<p>As I wandered through the museum today, I stumbled upon a hidden room tucked away in a corner. It was like nothing I'd ever seen before. The air was heavy with the scent of wood and brass, and strange instruments and machines filled the room. Pipes and horns seemed to sprout from the walls like metallic vines, and the organs were unlike any I'd ever laid eyes on, with keyboards sprouting in every direction. As I explored further, I found boxes adorned with mysterious levers and knobs that seemed to emit a cacophony of otherworldly sounds. It was as though I had stumbled into the secret workshop of a mad scientist.</p>
<a href="/projects/testing">NFC</a>
</div>
</section>
</body>
<script src="/theme/platform.js"></script>
<script src="/theme/geo.js"></script>
</html>

View file

@ -0,0 +1,21 @@
<!DOCTYPE html>
<html lang="english">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link href="/theme/local.css" rel="stylesheet">
</head>
<body id="index" class="home">
<section id="content" class="body">
<div class="entry-content">
<p>I spent the day exploring the town and stumbled upon an old, abandoned house. Inside, I found a collection of paintings that immediately caught my eye. They were unlike anything I had ever seen before, with bold colors and abstract shapes. I later learned that the artist who painted them was an Austrian painter who had worked as a traffic warden in the early days of the country. Her eccentricity was well-known among the locals, and it's said that she inspired Sunday, one of the founders of the town, in his own artistic pursuits. It's a shame that her work has been forgotten and left to decay in this abandoned house.</p>
<a href="/projects/blue-eyed-donkey">NFC</a>
</div>
</section>
</body>
<script src="/theme/platform.js"></script>
<script src="/theme/geo.js"></script>
</html>

View file

@ -0,0 +1,21 @@
<!DOCTYPE html>
<html lang="english">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link href="/theme/local.css" rel="stylesheet">
</head>
<body id="index" class="home">
<section id="content" class="body">
<div class="entry-content">
<p>As I wandered through the museum today, I stumbled upon a hidden room tucked away in a corner. It was like nothing I'd ever seen before. The air was heavy with the scent of wood and brass, and strange instruments and machines filled the room. Pipes and horns seemed to sprout from the walls like metallic vines, and the organs were unlike any I'd ever laid eyes on, with keyboards sprouting in every direction. As I explored further, I found boxes adorned with mysterious levers and knobs that seemed to emit a cacophony of otherworldly sounds. It was as though I had stumbled into the secret workshop of a mad scientist.</p>
<a href="/projects/blue-eyed-donkey">NFC</a>
</div>
</section>
</body>
<script src="/theme/platform.js"></script>
<script src="/theme/geo.js"></script>
</html>

View file

@ -11,11 +11,11 @@
<section id="content" class="body">
<div class="entry-content">
<p>I noticed a peculiar sensation in the air as soon as I arrived in town. It was as if an electric charge was coursing through the air beneath the pastoral tranquillity, making me nervous. I looked around, but there was no one to be found. The faint odor of decay lingered around me, mingled with the sweet fragrance of incense. The mix made me feel uneasy, like if I'd stepped into a strange, surreal dream.</p>
<span class="geo"><a latlon="32.70124169424201,34.9805500394171" href="geo:32.70124169424201,34.9805500394171">svbfh1049ck</a></span>
<a href="/projects/blue-eyed-donkey">NFC</a>
</div>
</section>
<script src="/theme/platform.js"></script>
<script src="/theme/geo.js"></script>
</body>
<script src="/theme/platform.js"></script>
<script src="/theme/geo.js"></script>
</html>

View file

@ -14,7 +14,34 @@
<article class="hentry">
<header>
<h2 class="entry-title">
<a href="/svbfh1049ck" rel="bookmark">Entry 1</a>
<span class="geo"><a latlon="" href="geo:">svbfh1049ck</a></span>
</h2>
<span class="entry-summary"></span>
</header>
</article>
<article class="hentry">
<header>
<h2 class="entry-title">
<span class="geo"><a latlon="" href="geo:">svbfh0cc5fp</a></span>
</h2>
<span class="entry-summary"></span>
</header>
</article>
<article class="hentry">
<header>
<h2 class="entry-title">
<span class="geo"><a latlon="" href="geo:">svbfh0geqrx</a></span>
</h2>
<span class="entry-summary"></span>
</header>
</article>
<article class="hentry">
<header>
<h2 class="entry-title">
<span class="geo"><a latlon="" href="geo:">svbf5c4nwkr</a></span>
</h2>
<span class="entry-summary"></span>
</header>
@ -23,4 +50,6 @@
</section>
</body>
<script src="/theme/platform.js"></script>
<script src="/theme/geo.js"></script>
</html>

55
web/output/tags/list.html Normal file
View file

@ -0,0 +1,55 @@
<!DOCTYPE html>
<html lang="english">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link href="/theme/local.css" rel="stylesheet">
</head>
<body id="index" class="home">
<section id="content">
<article class="hentry">
<header>
<h2 class="entry-title">
<a href="/svbfh1049ck" rel="bookmark">Blue Eyed Donkey: Journal Entry 1</a>
</h2>
<span class="entry-summary"></span>
</header>
</article>
<article class="hentry">
<header>
<h2 class="entry-title">
<a href="/svbfh0cc5fp" rel="bookmark">Blue Eyed Donkey: Journal Entry 2</a>
</h2>
<span class="entry-summary"></span>
</header>
</article>
<article class="hentry">
<header>
<h2 class="entry-title">
<a href="/svbfh0geqrx" rel="bookmark">Blue Eyed Donkey: Journal Entry 3</a>
</h2>
<span class="entry-summary"></span>
</header>
</article>
<article class="hentry">
<header>
<h2 class="entry-title">
<a href="/svbf5c4nwkr" rel="bookmark">Testing: Test</a>
</h2>
<span class="entry-summary"></span>
</header>
</article>
</section>
</body>
<script src="/theme/platform.js"></script>
<script src="/theme/geo.js"></script>
</html>

View file

@ -0,0 +1,15 @@
<?xml version="1.0" standalone="yes"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 20010904//EN"
"http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd">
<svg version="1.0" width="64" height="64" xmlns="http://www.w3.org/2000/svg">
<defs>
<radialGradient id="Shiny"
cx="0.5" cy="0.5" r="0.5" fx="0.25" fy="0.25">
<stop offset="0%" stop-color="#ffffff" />
<stop offset="50%" stop-color="#00c0ff" />
<stop offset="75%" stop-color="#0080ff" />
<stop offset="100%" stop-color="#000000" />
</radialGradient>
</defs>
<circle r="30" cx="32" cy="32" fill="url(#Shiny)" />
</svg>

After

Width:  |  Height:  |  Size: 591 B

View file

@ -4,7 +4,12 @@ const ios = ua.indexOf("ios") > -1;
const windows = ua.indexOf("windows") > -1;
const linux = ua.indexOf("linux") > -1;
const mac = ua.indexOf("macos") > -1;
var hashlink = document.querySelector(".geo a");
if ( windows || mac || linux ) hashlink.href = "https://maps.google.com/?q=" + hashlink.getAttribute("latlon");
else if ( android ) hashlink.href = "geo:0,0?q=" + hashlink.getAttribute("latlon");
else if ( ios ) hashlink.href = "http://maps.apple.com/?ll=" + hashlink.getAttribute("latlon") + "&q=" + hashlink.innerHTML;
var hashlinks = document.querySelectorAll(".geo a");
var hasharray = [...hashlinks];
if ( hasharray.length > 0 ) {
hasharray.forEach(hashlink => {
if ( windows || mac || linux ) hashlink.href = "https://maps.google.com/?q=" + hashlink.getAttribute("latlon");
else if ( android ) hashlink.href = "geo:0,0?q=" + hashlink.getAttribute("latlon");
else if ( ios ) hashlink.href = "http://maps.apple.com/?ll=" + hashlink.getAttribute("latlon") + "&q=" + hashlink.innerHTML;
});
}

View file

@ -141,4 +141,32 @@ blockquote {
border: 1px solid;
margin: 0;
padding-left: 1em;
}
#map {
height: 100%;
width: 100vw;
}
#map img {
border: none
}
.info {
padding: 6px 8px;
background: white;
background: rgba(255,255,255,0.8);
box-shadow: 0 0 15px rgba(0,0,0,0.2);
border-radius: 5px;
}
.info h4 {
font-size: 1.6em;
margin: 0 0 5px;
color: #777;
}
.info span {
line-height: 18px;
vertical-align: top;
}

82
web/output/theme/map.js Normal file
View file

@ -0,0 +1,82 @@
var bluedot = L.icon({
iconUrl: '/theme/bluedot.svg',
iconSize: [18, 18],
iconAnchor: [9, 9],
popupAnchor: [0, -10]
});
var nfctag = L.icon({
iconUrl: '/theme/nfclogo.svg',
iconSize: [20, 20],
iconAnchor: [10, 10],
popupAnchor: [0, -12]
});
const showNfcTags = L.geoJSON(nfcTags, {
pointToLayer(feature, latlng) { return L.marker(latlng, { icon: nfctag });},
onEachFeature
});
const map = L.map('map').fitBounds(showNfcTags.getBounds());
const tiles = L.tileLayer('https://tile.openstreetmap.org/{z}/{x}/{y}.png', {
maxZoom: 19,
attribution: '&copy; <a href="http://www.openstreetmap.org/copyright">OpenStreetMap</a>'
}).addTo(map);
showNfcTags.addTo(map);
map.on('locationfound', onLocationFound);
map.on('locationerror', onLocationError);
map.locate({setView: false, watch: true});
function onEachFeature(feature, layer) {
let popupContent = ``;
if (feature.properties && feature.properties.title) {
popupContent += feature.properties.title;
}
layer.bindPopup(popupContent);
}
var locationMarker, locationCircle;
pageload = true;
function onLocationFound(e) {
if (locationMarker) {
map.removeLayer(locationMarker);
map.removeLayer(locationCircle);
}
const radius = e.accuracy / 2;
if ( pageload ) {
area = showNfcTags.getBounds();
area.extend(e.latlng);
map.fitBounds(area);
map.zoomOut(1, {animate: false});
pageload = false;
}
locationMarker = L.marker(e.latlng, {icon: bluedot}).addTo(map)
locationCircle = L.circle(e.latlng, radius).addTo(map);
}
function onLocationError(e) {
alert(e.message);
}
var info = L.control({position: 'topright'});
var download = L.control({position: 'bottomleft'});
info.onAdd = function (map) {
this._div = L.DomUtil.create('div', 'info'); // create a div with a class "info"
this._div.innerHTML = '<h4>' + nfcTags["title"] + '</h4>' + '<img style="display:inline; width:18px" src="/theme/nfclogo.svg" /> <span>NFC Tag Locations</span>';
return this._div;
};
download.onAdd = function (map) {
this._div = L.DomUtil.create('div', 'info'); // create a div with a class "info"
this._div.innerHTML = 'Download <a href="/projects/' + nfcTags["id"] + '.gpx">GPX</a> <a href="/projects/' + nfcTags["id"] + '.kml">KML</a>';
return this._div;
};
info.addTo(map);
download.addTo(map);

View file

@ -0,0 +1,31 @@
<?xml version="1.0" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 20010904//EN"
"http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd">
<svg version="1.0" xmlns="http://www.w3.org/2000/svg"
width="1600.000000pt" height="1600.000000pt" viewBox="0 0 1600.000000 1600.000000"
preserveAspectRatio="xMidYMid meet">
<metadata>
Created by potrace 1.15, written by Peter Selinger 2001-2017
</metadata>
<g transform="translate(0.000000,1600.000000) scale(0.100000,-0.100000)"
fill="#000000" stroke="none">
<path d="M2697 15989 c-565 -50 -1108 -264 -1567 -619 -114 -88 -391 -362
-484 -480 -164 -206 -340 -509 -434 -745 -84 -211 -143 -430 -184 -680 l-23
-140 -3 -5105 c-2 -3709 0 -5145 8 -5250 70 -905 549 -1724 1304 -2229 357
-239 778 -402 1203 -466 209 -32 404 -36 1438 -33 l1030 3 -50 29 c-473 272
-900 980 -1135 1880 -136 521 -200 952 -262 1766 -9 116 -13 1563 -15 5719
l-3 5564 59 -54 c33 -30 1450 -1433 3150 -3119 l3091 -3065 0 -960 0 -960
-167 166 c-276 272 -3662 3637 -4288 4261 l-580 578 -3 -3028 c-3 -3056 0
-3387 34 -3957 76 -1289 257 -2251 558 -2968 58 -138 195 -404 271 -527 156
-251 434 -560 648 -719 357 -266 779 -449 1320 -571 l177 -41 2633 4 c2894 3
2667 -2 2983 62 961 194 1787 893 2148 1816 86 221 140 430 183 709 16 108 18
413 21 5185 2 3454 0 5117 -8 5217 -19 278 -61 490 -144 743 -374 1126 -1377
1914 -2561 2015 -72 6 -555 10 -1200 10 l-1080 0 58 -33 c100 -56 179 -119
297 -237 465 -463 808 -1273 979 -2310 54 -329 89 -654 123 -1145 8 -125 12
-1627 15 -5704 l4 -5533 -39 33 c-22 19 -1074 1060 -2338 2314 -1264 1254
-2665 2642 -3111 3085 l-813 805 0 964 0 963 1853 -1843 c1018 -1014 2152
-2143 2520 -2508 l667 -665 0 3025 c0 1749 -4 3153 -10 3329 -57 1794 -274
2992 -695 3838 -153 308 -311 536 -525 756 -221 227 -441 386 -735 531 -266
131 -536 223 -883 301 l-154 34 -2596 -1 c-1429 -1 -2636 -5 -2685 -10z"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 1.8 KiB