From 8dd927efe563a90c5065046c333e8f7f4aa12234 Mon Sep 17 00:00:00 2001 From: acalcutt Date: Sun, 29 Dec 2024 01:06:29 -0500 Subject: [PATCH 001/152] first attempt to upgrade express to v5 Co-Authored-By: Andrew Calcutt --- package-lock.json | 550 +++++++++++++++++++++++++++++------------- package.json | 2 +- src/serve_data.js | 258 ++++++++++---------- src/serve_font.js | 42 ++-- src/serve_rendered.js | 497 ++++++++++++++++++-------------------- src/serve_style.js | 37 ++- src/server.js | 89 +++---- test/setup.js | 4 +- 8 files changed, 828 insertions(+), 651 deletions(-) diff --git a/package-lock.json b/package-lock.json index 408b652..d8d6a3d 100644 --- a/package-lock.json +++ b/package-lock.json @@ -25,7 +25,7 @@ "color": "4.2.3", "commander": "12.1.0", "cors": "2.8.5", - "express": "4.19.2", + "express": "5.0.1", "handlebars": "4.7.8", "http-shutdown": "1.2.2", "morgan": "1.10.0", @@ -1721,17 +1721,44 @@ "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==" }, "node_modules/accepts": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", - "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-2.0.0.tgz", + "integrity": "sha512-5cvg6CtKwfgdmVqY1WIiXKc3Q1bkRqGLi+2W/6ao+6Y7gu/RCwRuAhGEzh5B4KlszSuTLgZYuqFqo5bImjNKng==", "dependencies": { - "mime-types": "~2.1.34", - "negotiator": "0.6.3" + "mime-types": "^3.0.0", + "negotiator": "^1.0.0" }, "engines": { "node": ">= 0.6" } }, + "node_modules/accepts/node_modules/mime-db": { + "version": "1.53.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.53.0.tgz", + "integrity": "sha512-oHlN/w+3MQ3rba9rqFr6V/ypF10LSkdwUysQL7GkXoTgIWeV+tcXGA852TBxH+gsh8UWoyhR1hKcoMJTuWflpg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/accepts/node_modules/mime-types": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-3.0.0.tgz", + "integrity": "sha512-XqoSHeCGjVClAmoGFG3lVFqQFRIrTVw2OH3axRqAcfaw+gHWIfnASS92AV+Rl/mk0MupgZTRHQOjxY6YVnzK5w==", + "dependencies": { + "mime-db": "^1.53.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/accepts/node_modules/negotiator": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-1.0.0.tgz", + "integrity": "sha512-8Ofs/AUQh8MaEcrlq5xOX0CQ9ypTF5dl78mjlMNfOK08fzpgTHQRQPBxcPlEtIw0yRpws+Zo/3r+5WRby7u3Gg==", + "engines": { + "node": ">= 0.6" + } + }, "node_modules/acorn": { "version": "8.12.1", "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.12.1.tgz", @@ -1924,9 +1951,9 @@ } }, "node_modules/array-flatten": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", - "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==" + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-3.0.0.tgz", + "integrity": "sha512-zPMVc3ZYlGLNk4mpK1NzP2wg0ml9t7fUgDsayR5Y5rSzxQilzR9FGu/EH2jQOcKSAeAfWeylyW8juy3OkWRvNA==" }, "node_modules/array-ify": { "version": "1.0.0", @@ -2041,41 +2068,58 @@ } }, "node_modules/body-parser": { - "version": "1.20.2", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.2.tgz", - "integrity": "sha512-ml9pReCu3M61kGlqoTm2umSXTlRTuGTx0bfYj+uIUKKYycG5NtSbeetV3faSU6R7ajOPw0g/J1PvK4qNy7s5bA==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-2.0.2.tgz", + "integrity": "sha512-SNMk0OONlQ01uk8EPeiBvTW7W4ovpL5b1O3t1sjpPgfxOQ6BqQJ6XjxinDPR79Z6HdcD5zBBwr5ssiTlgdNztQ==", "dependencies": { "bytes": "3.1.2", "content-type": "~1.0.5", - "debug": "2.6.9", - "depd": "2.0.0", + "debug": "3.1.0", "destroy": "1.2.0", "http-errors": "2.0.0", - "iconv-lite": "0.4.24", + "iconv-lite": "0.5.2", "on-finished": "2.4.1", - "qs": "6.11.0", - "raw-body": "2.5.2", - "type-is": "~1.6.18", - "unpipe": "1.0.0" + "qs": "6.13.0", + "raw-body": "^3.0.0", + "type-is": "~1.6.18" }, "engines": { - "node": ">= 0.8", - "npm": "1.2.8000 || >= 1.4.16" + "node": ">=18" } }, "node_modules/body-parser/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", "dependencies": { "ms": "2.0.0" } }, + "node_modules/body-parser/node_modules/media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", + "engines": { + "node": ">= 0.6" + } + }, "node_modules/body-parser/node_modules/ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" }, + "node_modules/body-parser/node_modules/type-is": { + "version": "1.6.18", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", + "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", + "dependencies": { + "media-typer": "0.3.0", + "mime-types": "~2.1.24" + }, + "engines": { + "node": ">= 0.6" + } + }, "node_modules/brace-expansion": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", @@ -2156,12 +2200,19 @@ } }, "node_modules/call-bind": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", - "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz", + "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==", + "license": "MIT", "dependencies": { - "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.2" + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "set-function-length": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -2492,9 +2543,9 @@ "integrity": "sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==" }, "node_modules/content-disposition": { - "version": "0.5.4", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", - "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-1.0.0.tgz", + "integrity": "sha512-Au9nRL8VNUut/XSzbQA38+M78dzP4D+eqg3gfJHMIHHYa3bg067xj1KxMUWj+VULbiZMowKngFFbKczUrNJ1mg==", "dependencies": { "safe-buffer": "5.2.1" }, @@ -2565,17 +2616,21 @@ } }, "node_modules/cookie": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.6.0.tgz", - "integrity": "sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==", + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.1.tgz", + "integrity": "sha512-6DnInpx7SJ2AK3+CTUE/ZM0vWTUboZCegxhC2xiIydHR9jNuTAASBrfEpHhiGOZw/nX51bHt6YQl8jsGo4y/0w==", + "license": "MIT", "engines": { "node": ">= 0.6" } }, "node_modules/cookie-signature": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", - "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==" + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.2.2.tgz", + "integrity": "sha512-D76uU73ulSXrD1UXF4KE2TMxVVwhsnCgfAyTg9k8P6KGZjlXKrOLe4dJQKI3Bxi5wjesZoFXJWElNWBjPZMbhg==", + "engines": { + "node": ">=6.6.0" + } }, "node_modules/cookiejar": { "version": "2.1.4", @@ -2742,6 +2797,23 @@ "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", "dev": true }, + "node_modules/define-data-property": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", + "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", + "license": "MIT", + "dependencies": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "gopd": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/define-properties": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.4.tgz", @@ -2867,9 +2939,9 @@ "dev": true }, "node_modules/encodeurl": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", - "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz", + "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==", "engines": { "node": ">= 0.8" } @@ -2976,6 +3048,27 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/es-define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz", + "integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==", + "license": "MIT", + "dependencies": { + "get-intrinsic": "^1.2.4" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, "node_modules/es-module-lexer": { "version": "1.5.4", "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.5.4.tgz", @@ -3445,59 +3538,66 @@ } }, "node_modules/express": { - "version": "4.19.2", - "resolved": "https://registry.npmjs.org/express/-/express-4.19.2.tgz", - "integrity": "sha512-5T6nhjsT+EOMzuck8JjBHARTHfMht0POzlA60WV2pMD3gyXw2LZnZ+ueGdNxG+0calOJcWKbpFcuzLZ91YWq9Q==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/express/-/express-5.0.1.tgz", + "integrity": "sha512-ORF7g6qGnD+YtUG9yx4DFoqCShNMmUKiXuT5oWMHiOvt/4WFbHC6yCwQMTSBMno7AqntNCAzzcnnjowRkTL9eQ==", "dependencies": { - "accepts": "~1.3.8", - "array-flatten": "1.1.1", - "body-parser": "1.20.2", - "content-disposition": "0.5.4", + "accepts": "^2.0.0", + "body-parser": "^2.0.1", + "content-disposition": "^1.0.0", "content-type": "~1.0.4", - "cookie": "0.6.0", - "cookie-signature": "1.0.6", - "debug": "2.6.9", + "cookie": "0.7.1", + "cookie-signature": "^1.2.1", + "debug": "4.3.6", "depd": "2.0.0", - "encodeurl": "~1.0.2", + "encodeurl": "~2.0.0", "escape-html": "~1.0.3", "etag": "~1.8.1", - "finalhandler": "1.2.0", - "fresh": "0.5.2", + "finalhandler": "^2.0.0", + "fresh": "2.0.0", "http-errors": "2.0.0", - "merge-descriptors": "1.0.1", + "merge-descriptors": "^2.0.0", "methods": "~1.1.2", + "mime-types": "^3.0.0", "on-finished": "2.4.1", + "once": "1.4.0", "parseurl": "~1.3.3", - "path-to-regexp": "0.1.7", "proxy-addr": "~2.0.7", - "qs": "6.11.0", + "qs": "6.13.0", "range-parser": "~1.2.1", + "router": "^2.0.0", "safe-buffer": "5.2.1", - "send": "0.18.0", - "serve-static": "1.15.0", + "send": "^1.1.0", + "serve-static": "^2.1.0", "setprototypeof": "1.2.0", "statuses": "2.0.1", - "type-is": "~1.6.18", + "type-is": "^2.0.0", "utils-merge": "1.0.1", "vary": "~1.1.2" }, "engines": { - "node": ">= 0.10.0" + "node": ">= 18" } }, - "node_modules/express/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "node_modules/express/node_modules/mime-db": { + "version": "1.53.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.53.0.tgz", + "integrity": "sha512-oHlN/w+3MQ3rba9rqFr6V/ypF10LSkdwUysQL7GkXoTgIWeV+tcXGA852TBxH+gsh8UWoyhR1hKcoMJTuWflpg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/express/node_modules/mime-types": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-3.0.0.tgz", + "integrity": "sha512-XqoSHeCGjVClAmoGFG3lVFqQFRIrTVw2OH3axRqAcfaw+gHWIfnASS92AV+Rl/mk0MupgZTRHQOjxY6YVnzK5w==", "dependencies": { - "ms": "2.0.0" + "mime-db": "^1.53.0" + }, + "engines": { + "node": ">= 0.6" } }, - "node_modules/express/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" - }, "node_modules/extend-shallow": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", @@ -3599,9 +3699,9 @@ } }, "node_modules/finalhandler": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", - "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-2.0.0.tgz", + "integrity": "sha512-MX6Zo2adDViYh+GcxxB1dpO43eypOGUOL12rLCOTMQv/DfIbpSJUy4oQIIZhVZkH9e+bZWKMon0XHFEju16tkQ==", "dependencies": { "debug": "2.6.9", "encodeurl": "~1.0.2", @@ -3623,6 +3723,14 @@ "ms": "2.0.0" } }, + "node_modules/finalhandler/node_modules/encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", + "engines": { + "node": ">= 0.8" + } + }, "node_modules/finalhandler/node_modules/ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", @@ -3735,11 +3843,11 @@ } }, "node_modules/fresh": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", - "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-2.0.0.tgz", + "integrity": "sha512-Rx/WycZ60HOaqLKAi6cHRKKI7zxWbJ31MhntmtwMoaTeF7XFH9hhBp8vITaMidfljRQ6eYWCKkaTK+ykVJHP2A==", "engines": { - "node": ">= 0.6" + "node": ">= 0.8" } }, "node_modules/fs-minipass": { @@ -3772,9 +3880,13 @@ } }, "node_modules/function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, "node_modules/function.prototype.name": { "version": "1.1.5", @@ -3877,13 +3989,19 @@ } }, "node_modules/get-intrinsic": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.3.tgz", - "integrity": "sha512-QJVz1Tj7MS099PevUG5jvnt9tSkXN8K14dxQlikJuPt4uD9hHAHjLyLBiLR5zELelBdD9QNRAXZzsJx0WaDL9A==", + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz", + "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==", + "license": "MIT", "dependencies": { - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.3" + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3", + "hasown": "^2.0.0" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -4146,11 +4264,12 @@ } }, "node_modules/has-property-descriptors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz", - "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", + "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", + "license": "MIT", "dependencies": { - "get-intrinsic": "^1.1.1" + "es-define-property": "^1.0.0" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -4197,6 +4316,18 @@ "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", "integrity": "sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==" }, + "node_modules/hasown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/he": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", @@ -4295,9 +4426,9 @@ } }, "node_modules/iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.5.2.tgz", + "integrity": "sha512-kERHXvpSaB4aU3eANwidg79K8FlrN77m8G9V+0vOR3HYaRifrlwMEpT7ZBJqLSEIHnEgJTHcWK82wwLwwKwtag==", "dependencies": { "safer-buffer": ">= 2.1.2 < 3" }, @@ -4632,6 +4763,11 @@ "node": ">=0.10.0" } }, + "node_modules/is-promise": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-4.0.0.tgz", + "integrity": "sha512-hvpoI6korhJMnej285dSg6nu1+e6uxs7zG3BYAm5byqDsgJNWwxzM6z6iZiAgQR4TJ30JmBTOwqZUw3WlyH3AQ==" + }, "node_modules/is-regex": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", @@ -5305,11 +5441,11 @@ } }, "node_modules/media-typer": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", - "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-1.1.0.tgz", + "integrity": "sha512-aisnrDP4GNe06UcKFnV5bfMNPBUw4jsLGaWwWfnH3v02GnBuXX2MCVn5RbrWo0j3pczUilYblq7fQ7Nw2t5XKw==", "engines": { - "node": ">= 0.6" + "node": ">= 0.8" } }, "node_modules/memorystream": { @@ -5382,9 +5518,15 @@ } }, "node_modules/merge-descriptors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", - "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==" + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-2.0.0.tgz", + "integrity": "sha512-Snk314V5ayFLhp3fkUREub6WtjBfPdCPY1Ln8/8munuLuiYhsABgBVWsozAG+MWMbVEvcdcpbi9R7ww22l9Q3g==", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } }, "node_modules/merge-stream": { "version": "2.0.0", @@ -5427,17 +5569,6 @@ "node": ">=8.6" } }, - "node_modules/mime": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", - "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", - "bin": { - "mime": "cli.js" - }, - "engines": { - "node": ">=4" - } - }, "node_modules/mime-db": { "version": "1.52.0", "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", @@ -5908,6 +6039,7 @@ "version": "0.6.3", "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", + "optional": true, "engines": { "node": ">= 0.6" } @@ -6318,9 +6450,13 @@ } }, "node_modules/object-inspect": { - "version": "1.12.3", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.3.tgz", - "integrity": "sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==", + "version": "1.13.3", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.3.tgz", + "integrity": "sha512-kDCGIbxkDSXE3euJZZXzc6to7fCrKHNI/hSRQnRuQ+BWjFNzZwiFF8fj/6o2t2G9/jTj8PSIYTfCLelLZEeRpA==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -6543,9 +6679,12 @@ "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" }, "node_modules/path-to-regexp": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", - "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==" + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-8.2.0.tgz", + "integrity": "sha512-TdrF7fW9Rphjq4RjrW0Kp2AW0Ahwu9sRGTkS6bvDi0SCwZlEZYmcfDbEsTz8RVk0EHIS/Vd1bv3JhG+1xZuAyQ==", + "engines": { + "node": ">=16" + } }, "node_modules/path-type": { "version": "4.0.0", @@ -6712,11 +6851,12 @@ } }, "node_modules/qs": { - "version": "6.11.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", - "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", + "version": "6.13.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.13.0.tgz", + "integrity": "sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==", + "license": "BSD-3-Clause", "dependencies": { - "side-channel": "^1.0.4" + "side-channel": "^1.0.6" }, "engines": { "node": ">=0.6" @@ -6776,19 +6916,30 @@ } }, "node_modules/raw-body": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz", - "integrity": "sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-3.0.0.tgz", + "integrity": "sha512-RmkhL8CAyCRPXCE28MMH0z2PNWQBNk2Q09ZdxM9IOOXwxwZbN+qbWaatPkdkWIKL2ZVDImrN/pK5HTRz2PcS4g==", "dependencies": { "bytes": "3.1.2", "http-errors": "2.0.0", - "iconv-lite": "0.4.24", + "iconv-lite": "0.6.3", "unpipe": "1.0.0" }, "engines": { "node": ">= 0.8" } }, + "node_modules/raw-body/node_modules/iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/read-pkg": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz", @@ -7086,6 +7237,23 @@ "url": "https://github.com/sponsors/isaacs" } }, + "node_modules/router": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/router/-/router-2.0.0.tgz", + "integrity": "sha512-dIM5zVoG8xhC6rnSN8uoAgFARwTE7BQs8YwHEvK0VCmfxQXMaOuA1uiR1IPwsW7JyK5iTt7Od/TC9StasS2NPQ==", + "dependencies": { + "array-flatten": "3.0.0", + "is-promise": "4.0.0", + "methods": "~1.1.2", + "parseurl": "~1.3.3", + "path-to-regexp": "^8.0.0", + "setprototypeof": "1.2.0", + "utils-merge": "1.0.1" + }, + "engines": { + "node": ">= 0.10" + } + }, "node_modules/run-parallel": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", @@ -7186,41 +7354,35 @@ } }, "node_modules/send": { - "version": "0.18.0", - "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", - "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/send/-/send-1.1.0.tgz", + "integrity": "sha512-v67WcEouB5GxbTWL/4NeToqcZiAWEq90N888fczVArY8A79J0L4FD7vj5hm3eUMua5EpoQ59wa/oovY6TLvRUA==", "dependencies": { - "debug": "2.6.9", - "depd": "2.0.0", - "destroy": "1.2.0", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "fresh": "0.5.2", - "http-errors": "2.0.0", - "mime": "1.6.0", - "ms": "2.1.3", - "on-finished": "2.4.1", - "range-parser": "~1.2.1", - "statuses": "2.0.1" + "debug": "^4.3.5", + "destroy": "^1.2.0", + "encodeurl": "^2.0.0", + "escape-html": "^1.0.3", + "etag": "^1.8.1", + "fresh": "^0.5.2", + "http-errors": "^2.0.0", + "mime-types": "^2.1.35", + "ms": "^2.1.3", + "on-finished": "^2.4.1", + "range-parser": "^1.2.1", + "statuses": "^2.0.1" }, "engines": { - "node": ">= 0.8.0" + "node": ">= 18" } }, - "node_modules/send/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dependencies": { - "ms": "2.0.0" + "node_modules/send/node_modules/fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", + "engines": { + "node": ">= 0.6" } }, - "node_modules/send/node_modules/debug/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" - }, "node_modules/send/node_modules/ms": { "version": "2.1.3", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", @@ -7236,17 +7398,17 @@ } }, "node_modules/serve-static": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz", - "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-2.1.0.tgz", + "integrity": "sha512-A3We5UfEjG8Z7VkDv6uItWw6HY2bBSBJT1KtVESn6EOoOr2jAxNhxWCLY3jDE2WcuHXByWju74ck3ZgLwL8xmA==", "dependencies": { - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "parseurl": "~1.3.3", - "send": "0.18.0" + "encodeurl": "^2.0.0", + "escape-html": "^1.0.3", + "parseurl": "^1.3.3", + "send": "^1.0.0" }, "engines": { - "node": ">= 0.8.0" + "node": ">= 18" } }, "node_modules/set-blocking": { @@ -7254,6 +7416,23 @@ "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==" }, + "node_modules/set-function-length": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", + "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", + "license": "MIT", + "dependencies": { + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/set-value": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz", @@ -7406,13 +7585,18 @@ "dev": true }, "node_modules/side-channel": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", - "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.6.tgz", + "integrity": "sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==", + "license": "MIT", "dependencies": { - "call-bind": "^1.0.0", - "get-intrinsic": "^1.0.2", - "object-inspect": "^1.9.0" + "call-bind": "^1.0.7", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.4", + "object-inspect": "^1.13.1" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -8110,12 +8294,32 @@ } }, "node_modules/type-is": { - "version": "1.6.18", - "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", - "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-2.0.0.tgz", + "integrity": "sha512-gd0sGezQYCbWSbkZr75mln4YBidWUN60+devscpLF5mtRDUpiaTvKpBNrdaCvel1NdR2k6vclXybU5fBd2i+nw==", "dependencies": { - "media-typer": "0.3.0", - "mime-types": "~2.1.24" + "content-type": "^1.0.5", + "media-typer": "^1.1.0", + "mime-types": "^3.0.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/type-is/node_modules/mime-db": { + "version": "1.53.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.53.0.tgz", + "integrity": "sha512-oHlN/w+3MQ3rba9rqFr6V/ypF10LSkdwUysQL7GkXoTgIWeV+tcXGA852TBxH+gsh8UWoyhR1hKcoMJTuWflpg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/type-is/node_modules/mime-types": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-3.0.0.tgz", + "integrity": "sha512-XqoSHeCGjVClAmoGFG3lVFqQFRIrTVw2OH3axRqAcfaw+gHWIfnASS92AV+Rl/mk0MupgZTRHQOjxY6YVnzK5w==", + "dependencies": { + "mime-db": "^1.53.0" }, "engines": { "node": ">= 0.6" diff --git a/package.json b/package.json index ea5e2fb..e6a609b 100644 --- a/package.json +++ b/package.json @@ -33,7 +33,7 @@ "color": "4.2.3", "commander": "12.1.0", "cors": "2.8.5", - "express": "4.19.2", + "express": "5.0.1", "handlebars": "4.7.8", "http-shutdown": "1.2.2", "morgan": "1.10.0", diff --git a/src/serve_data.js b/src/serve_data.js index 995b656..d9bea68 100644 --- a/src/serve_data.js +++ b/src/serve_data.js @@ -21,148 +21,144 @@ export const serve_data = { init: (options, repo) => { const app = express().disable('x-powered-by'); - app.get( - '/:id/:z(\\d+)/:x(\\d+)/:y(\\d+).:format([\\w.]+)', - async (req, res, next) => { - const item = repo[req.params.id]; - if (!item) { - return res.sendStatus(404); - } - const tileJSONFormat = item.tileJSON.format; - const z = req.params.z | 0; - const x = req.params.x | 0; - const y = req.params.y | 0; - let format = req.params.format; - if (format === options.pbfAlias) { - format = 'pbf'; - } - if ( - format !== tileJSONFormat && - !(format === 'geojson' && tileJSONFormat === 'pbf') - ) { - return res.status(404).send('Invalid format'); - } - if ( - z < item.tileJSON.minzoom || - 0 || - x < 0 || - y < 0 || - z > item.tileJSON.maxzoom || - x >= Math.pow(2, z) || - y >= Math.pow(2, z) - ) { - return res.status(404).send('Out of bounds'); - } - if (item.sourceType === 'pmtiles') { - let tileinfo = await getPMtilesTile(item.source, z, x, y); - if (tileinfo == undefined || tileinfo.data == undefined) { - return res.status(404).send('Not found'); - } else { - let data = tileinfo.data; - let headers = tileinfo.header; - if (tileJSONFormat === 'pbf') { - if (options.dataDecoratorFunc) { - data = options.dataDecoratorFunc(id, 'data', data, z, x, y); - } + app.get('/:id/:z/:x/:y.:format', async (req, res) => { + const item = repo[req.params.id]; + if (!item) { + return res.sendStatus(404); + } + const tileJSONFormat = item.tileJSON.format; + const z = req.params.z | 0; + const x = req.params.x | 0; + const y = req.params.y | 0; + let format = req.params.format; + if (format === options.pbfAlias) { + format = 'pbf'; + } + if ( + format !== tileJSONFormat && + !(format === 'geojson' && tileJSONFormat === 'pbf') + ) { + return res.status(404).send('Invalid format'); + } + if ( + z < item.tileJSON.minzoom || + 0 || + x < 0 || + y < 0 || + z > item.tileJSON.maxzoom || + x >= Math.pow(2, z) || + y >= Math.pow(2, z) + ) { + return res.status(404).send('Out of bounds'); + } + if (item.sourceType === 'pmtiles') { + let tileinfo = await getPMtilesTile(item.source, z, x, y); + if (tileinfo == undefined || tileinfo.data == undefined) { + return res.status(404).send('Not found'); + } else { + let data = tileinfo.data; + let headers = tileinfo.header; + if (tileJSONFormat === 'pbf') { + if (options.dataDecoratorFunc) { + data = options.dataDecoratorFunc(id, 'data', data, z, x, y); } - if (format === 'pbf') { - headers['Content-Type'] = 'application/x-protobuf'; - } else if (format === 'geojson') { - headers['Content-Type'] = 'application/json'; - const tile = new VectorTile(new Pbf(data)); - const geojson = { - type: 'FeatureCollection', - features: [], - }; - for (const layerName in tile.layers) { - const layer = tile.layers[layerName]; - for (let i = 0; i < layer.length; i++) { - const feature = layer.feature(i); - const featureGeoJSON = feature.toGeoJSON(x, y, z); - featureGeoJSON.properties.layer = layerName; - geojson.features.push(featureGeoJSON); - } - } - data = JSON.stringify(geojson); - } - delete headers['ETag']; // do not trust the tile ETag -- regenerate - headers['Content-Encoding'] = 'gzip'; - res.set(headers); - - data = await gzipP(data); - - return res.status(200).send(data); } - } else if (item.sourceType === 'mbtiles') { - item.source.getTile(z, x, y, async (err, data, headers) => { - let isGzipped; - if (err) { - if (/does not exist/.test(err.message)) { - return res.status(204).send(); - } else { - return res - .status(500) - .header('Content-Type', 'text/plain') - .send(err.message); + if (format === 'pbf') { + headers['Content-Type'] = 'application/x-protobuf'; + } else if (format === 'geojson') { + headers['Content-Type'] = 'application/json'; + const tile = new VectorTile(new Pbf(data)); + const geojson = { + type: 'FeatureCollection', + features: [], + }; + for (const layerName in tile.layers) { + const layer = tile.layers[layerName]; + for (let i = 0; i < layer.length; i++) { + const feature = layer.feature(i); + const featureGeoJSON = feature.toGeoJSON(x, y, z); + featureGeoJSON.properties.layer = layerName; + geojson.features.push(featureGeoJSON); } - } else { - if (data == null) { - return res.status(404).send('Not found'); - } else { - if (tileJSONFormat === 'pbf') { - isGzipped = - data.slice(0, 2).indexOf(Buffer.from([0x1f, 0x8b])) === 0; - if (options.dataDecoratorFunc) { - if (isGzipped) { - data = await gunzipP(data); - isGzipped = false; - } - data = options.dataDecoratorFunc(id, 'data', data, z, x, y); - } - } - if (format === 'pbf') { - headers['Content-Type'] = 'application/x-protobuf'; - } else if (format === 'geojson') { - headers['Content-Type'] = 'application/json'; + } + data = JSON.stringify(geojson); + } + delete headers['ETag']; // do not trust the tile ETag -- regenerate + headers['Content-Encoding'] = 'gzip'; + res.set(headers); + data = await gzipP(data); + + return res.status(200).send(data); + } + } else if (item.sourceType === 'mbtiles') { + item.source.getTile(z, x, y, async (err, data, headers) => { + let isGzipped; + if (err) { + if (/does not exist/.test(err.message)) { + return res.status(204).send(); + } else { + return res + .status(500) + .header('Content-Type', 'text/plain') + .send(err.message); + } + } else { + if (data == null) { + return res.status(404).send('Not found'); + } else { + if (tileJSONFormat === 'pbf') { + isGzipped = + data.slice(0, 2).indexOf(Buffer.from([0x1f, 0x8b])) === 0; + if (options.dataDecoratorFunc) { if (isGzipped) { data = await gunzipP(data); isGzipped = false; } - - const tile = new VectorTile(new Pbf(data)); - const geojson = { - type: 'FeatureCollection', - features: [], - }; - for (const layerName in tile.layers) { - const layer = tile.layers[layerName]; - for (let i = 0; i < layer.length; i++) { - const feature = layer.feature(i); - const featureGeoJSON = feature.toGeoJSON(x, y, z); - featureGeoJSON.properties.layer = layerName; - geojson.features.push(featureGeoJSON); - } - } - data = JSON.stringify(geojson); + data = options.dataDecoratorFunc(id, 'data', data, z, x, y); } - delete headers['ETag']; // do not trust the tile ETag -- regenerate - headers['Content-Encoding'] = 'gzip'; - res.set(headers); - - if (!isGzipped) { - data = await gzipP(data); - } - - return res.status(200).send(data); } - } - }); - } - }, - ); + if (format === 'pbf') { + headers['Content-Type'] = 'application/x-protobuf'; + } else if (format === 'geojson') { + headers['Content-Type'] = 'application/json'; - app.get('/:id.json', (req, res, next) => { + if (isGzipped) { + data = await gunzipP(data); + isGzipped = false; + } + + const tile = new VectorTile(new Pbf(data)); + const geojson = { + type: 'FeatureCollection', + features: [], + }; + for (const layerName in tile.layers) { + const layer = tile.layers[layerName]; + for (let i = 0; i < layer.length; i++) { + const feature = layer.feature(i); + const featureGeoJSON = feature.toGeoJSON(x, y, z); + featureGeoJSON.properties.layer = layerName; + geojson.features.push(featureGeoJSON); + } + } + data = JSON.stringify(geojson); + } + delete headers['ETag']; // do not trust the tile ETag -- regenerate + headers['Content-Encoding'] = 'gzip'; + res.set(headers); + + if (!isGzipped) { + data = await gzipP(data); + } + + return res.status(200).send(data); + } + } + }); + } + }); + app.get('/:id.json', (req, res) => { const item = repo[req.params.id]; if (!item) { return res.sendStatus(404); diff --git a/src/serve_font.js b/src/serve_font.js index 02f46dc..d753905 100644 --- a/src/serve_font.js +++ b/src/serve_font.js @@ -13,31 +13,29 @@ export const serve_font = async (options, allowedFonts) => { const existingFonts = {}; - app.get( - '/fonts/:fontstack/:range([\\d]+-[\\d]+).pbf', - async (req, res, next) => { - const fontstack = decodeURI(req.params.fontstack); - const range = req.params.range; + app.get('/fonts/:fontstack/:range.pbf', async (req, res) => { + const fontstack = decodeURI(req.params.fontstack); + const range = req.params.range; - try { - const concatenated = await getFontsPbf( - options.serveAllFonts ? null : allowedFonts, - fontPath, - fontstack, - range, - existingFonts, - ); + try { + const concatenated = await getFontsPbf( + options.serveAllFonts ? null : allowedFonts, + fontPath, + fontstack, + range, + existingFonts, + ); - res.header('Content-type', 'application/x-protobuf'); - res.header('Last-Modified', lastModified); - return res.send(concatenated); - } catch (err) { - res.status(400).header('Content-Type', 'text/plain').send(err); - } - }, - ); + res.header('Content-type', 'application/x-protobuf'); + res.header('Last-Modified', lastModified); + return res.send(concatenated); + } catch (err) { + console.error('Error serving font:', err); + return res.status(400).header('Content-Type', 'text/plain').send(err); + } + }); - app.get('/fonts.json', (req, res, next) => { + app.get('/fonts.json', (req, res) => { res.header('Content-type', 'application/json'); return res.send( Object.keys(options.serveAllFonts ? existingFonts : allowedFonts).sort(), diff --git a/src/serve_rendered.js b/src/serve_rendered.js index 3e5c94e..65246f1 100644 --- a/src/serve_rendered.js +++ b/src/serve_rendered.js @@ -44,13 +44,43 @@ import fsp from 'node:fs/promises'; import { existsP, gunzipP } from './promises.js'; import { openMbTilesWrapper } from './mbtiles_wrapper.js'; -const FLOAT_PATTERN = '[+-]?(?:\\d+|\\d+.?\\d+)'; +const FLOAT_PATTERN = '[+-]?(?:\\d+|\\d*\\.\\d+)'; + +const staticTypeRegex = new RegExp( + `^` + + `(?:` + + // Format 1: {lon},{lat},{zoom}[@{bearing}[,{pitch}]] + `(?${FLOAT_PATTERN}),(?${FLOAT_PATTERN}),(?${FLOAT_PATTERN})` + + `(?:@(?${FLOAT_PATTERN})(?:,(?${FLOAT_PATTERN}))?)?` + + `|` + + // Format 2: {minx},{miny},{maxx},{maxy} + `(?${FLOAT_PATTERN}),(?${FLOAT_PATTERN}),(?${FLOAT_PATTERN}),(?${FLOAT_PATTERN})` + + `|` + + // Format 3: auto + `(?auto)` + + `)` + + `$`, +); + const PATH_PATTERN = /^((fill|stroke|width)\:[^\|]+\|)*(enc:.+|-?\d+(\.\d*)?,-?\d+(\.\d*)?(\|-?\d+(\.\d*)?,-?\d+(\.\d*)?)+)/; const httpTester = /^https?:\/\//i; const mercator = new SphericalMercator(); -const getScale = (scale) => (scale || '@1x').slice(1, 2) | 0; + +const parseScale = (scale, maxScaleDigit = 9) => { + if (scale === undefined) { + return 1; + } + + // eslint-disable-next-line security/detect-non-literal-regexp + const regex = new RegExp(`^[2-${maxScaleDigit}]x$`); + if (!regex.test(scale)) { + return null; + } + + return parseInt(scale.slice(0, -1), 10); +}; mlgl.on('message', (e) => { if (e.severity === 'WARNING' || e.severity === 'ERROR') { @@ -555,307 +585,256 @@ let maxScaleFactor = 2; export const serve_rendered = { init: async (options, repo) => { maxScaleFactor = Math.min(Math.floor(options.maxScaleFactor || 3), 9); - let scalePattern = ''; - for (let i = 2; i <= maxScaleFactor; i++) { - scalePattern += i.toFixed(); - } - scalePattern = `@[${scalePattern}]x`; - const app = express().disable('x-powered-by'); app.get( - `/:id/(:tileSize(256|512)/)?:z(\\d+)/:x(\\d+)/:y(\\d+):scale(${scalePattern})?.:format([\\w]+)`, - (req, res, next) => { - const item = repo[req.params.id]; - if (!item) { - return res.sendStatus(404); - } + `/:id{/:tileSize}/:z/:x/:y{@:scale}{.:format}`, + async (req, res, next) => { + try { + console.log(req.params); + if ( + req.params.z === 'static' || + (req.params.tileSize && + req.params.tileSize != 256 && + req.params.tileSize != 512) + ) { + //workaroud for /:id/static{/:raw}{/:type}/:width{x:height}{@:scale}{.:format} + next('route'); + } else { + const item = repo[req.params.id]; + if (!item) { + return res.sendStatus(404); + } - const modifiedSince = req.get('if-modified-since'); - const cc = req.get('cache-control'); - if (modifiedSince && (!cc || cc.indexOf('no-cache') === -1)) { - if (new Date(item.lastModified) <= new Date(modifiedSince)) { - return res.sendStatus(304); + const modifiedSince = req.get('if-modified-since'); + const cc = req.get('cache-control'); + if (modifiedSince && (!cc || cc.indexOf('no-cache') === -1)) { + if (new Date(item.lastModified) <= new Date(modifiedSince)) { + return res.sendStatus(304); + } + } + + const z = req.params.z | 0; + const x = req.params.x | 0; + const y = req.params.y | 0; + const scale = parseScale(req.params.scale, maxScaleFactor); + const format = req.params.format; + const tileSize = parseInt(req.params.tileSize, 10) || 256; + if ( + scale == null || + z < 0 || + x < 0 || + y < 0 || + z > 22 || + x >= Math.pow(2, z) || + y >= Math.pow(2, z) + ) { + return res.status(404).send('Out of bounds'); + } + + const tileCenter = mercator.ll( + [ + ((x + 0.5) / (1 << z)) * (256 << z), + ((y + 0.5) / (1 << z)) * (256 << z), + ], + z, + ); + + // prettier-ignore + return await respondImage( + options, item, z, tileCenter[0], tileCenter[1], 0, 0, tileSize, tileSize, scale, format, res, + ); } + } catch (e) { + console.log(e); + next('route'); } - - const z = req.params.z | 0; - const x = req.params.x | 0; - const y = req.params.y | 0; - const scale = getScale(req.params.scale); - const format = req.params.format; - const tileSize = parseInt(req.params.tileSize, 10) || 256; - - if ( - z < 0 || - x < 0 || - y < 0 || - z > 22 || - x >= Math.pow(2, z) || - y >= Math.pow(2, z) - ) { - return res.status(404).send('Out of bounds'); - } - - const tileCenter = mercator.ll( - [ - ((x + 0.5) / (1 << z)) * (256 << z), - ((y + 0.5) / (1 << z)) * (256 << z), - ], - z, - ); - - // prettier-ignore - return respondImage( - options, item, z, tileCenter[0], tileCenter[1], 0, 0, tileSize, tileSize, scale, format, res, - ); }, ); if (options.serveStaticMaps !== false) { - const staticPattern = `/:id/static/:raw(raw)?/%s/:width(\\d+)x:height(\\d+):scale(${scalePattern})?.:format([\\w]+)`; - - const centerPattern = util.format( - ':x(%s),:y(%s),:z(%s)(@:bearing(%s)(,:pitch(%s))?)?', - FLOAT_PATTERN, - FLOAT_PATTERN, - FLOAT_PATTERN, - FLOAT_PATTERN, - FLOAT_PATTERN, - ); - app.get( - util.format(staticPattern, centerPattern), + `/:id/static{/:raw}{/:type}/:width{x:height}{@:scale}{.:format}`, async (req, res, next) => { try { const item = repo[req.params.id]; - if (!item) { + console.log(req.params); + const format = req.params.format; + const w = parseInt(req.params.width) || 512; + const h = parseInt(req.params.height) || 512; + const scale = parseScale(req.params.scale, maxScaleFactor); + let raw = req.params.raw !== undefined; + let type = req.params.type; + if (!type) { + //workaround for type when raw is not set + type = req.params.raw; + raw = false; + } + + if (!item || !type || !format || !scale) { return res.sendStatus(404); } - const raw = req.params.raw; - const z = +req.params.z; - let x = +req.params.x; - let y = +req.params.y; - const bearing = +(req.params.bearing || '0'); - const pitch = +(req.params.pitch || '0'); - const w = req.params.width | 0; - const h = req.params.height | 0; - const scale = getScale(req.params.scale); - const format = req.params.format; - if (z < 0) { - return res.status(404).send('Invalid zoom'); - } + const staticTypeMatch = type.match(staticTypeRegex); + console.log(staticTypeMatch.groups); + if (staticTypeMatch.groups.lon) { + // Center Based Static Image + const z = staticTypeMatch.groups.zoom; + let x = staticTypeMatch.groups.lon; + let y = staticTypeMatch.groups.lat; + const bearing = staticTypeMatch.groups.bearing; + const pitch = staticTypeMatch.groups.pitch; - const transformer = raw - ? mercator.inverse.bind(mercator) - : item.dataProjWGStoInternalWGS; + if (z < 0) { + return res.status(404).send('Invalid zoom'); + } - if (transformer) { - const ll = transformer([x, y]); - x = ll[0]; - y = ll[1]; - } + const transformer = raw + ? mercator.inverse.bind(mercator) + : item.dataProjWGStoInternalWGS; - const paths = extractPathsFromQuery(req.query, transformer); - const markers = extractMarkersFromQuery( - req.query, - options, - transformer, - ); + if (transformer) { + const ll = transformer([x, y]); + x = ll[0]; + y = ll[1]; + } - // prettier-ignore - const overlay = await renderOverlay( - z, x, y, bearing, pitch, w, h, scale, paths, markers, req.query, - ); + const paths = extractPathsFromQuery(req.query, transformer); + const markers = extractMarkersFromQuery( + req.query, + options, + transformer, + ); - // prettier-ignore - return respondImage( - options, item, z, x, y, bearing, pitch, w, h, scale, format, res, overlay, 'static', - ); - } catch (e) { - next(e); - } - }, - ); + // prettier-ignore + const overlay = await renderOverlay( + z, x, y, bearing, pitch, w, h, scale, paths, markers, req.query, + ); - const serveBounds = async (req, res, next) => { - try { - const item = repo[req.params.id]; - if (!item) { - return res.sendStatus(404); - } - const raw = req.params.raw; - const bbox = [ - +req.params.minx, - +req.params.miny, - +req.params.maxx, - +req.params.maxy, - ]; - let center = [(bbox[0] + bbox[2]) / 2, (bbox[1] + bbox[3]) / 2]; + // prettier-ignore + return await respondImage( + options, item, z, x, y, bearing, pitch, w, h, scale, format, res, overlay, 'static', + ); + } else if (staticTypeMatch.groups.minx) { + // Area Based Static Image + const bbox = [ + +staticTypeMatch.groups.minx, + +staticTypeMatch.groups.miny, + +staticTypeMatch.groups.maxx, + +staticTypeMatch.groups.maxx, + ]; + let center = [(bbox[0] + bbox[2]) / 2, (bbox[1] + bbox[3]) / 2]; - const transformer = raw - ? mercator.inverse.bind(mercator) - : item.dataProjWGStoInternalWGS; + const transformer = raw + ? mercator.inverse.bind(mercator) + : item.dataProjWGStoInternalWGS; - if (transformer) { - const minCorner = transformer(bbox.slice(0, 2)); - const maxCorner = transformer(bbox.slice(2)); - bbox[0] = minCorner[0]; - bbox[1] = minCorner[1]; - bbox[2] = maxCorner[0]; - bbox[3] = maxCorner[1]; - center = transformer(center); - } + if (transformer) { + const minCorner = transformer(bbox.slice(0, 2)); + const maxCorner = transformer(bbox.slice(2)); + bbox[0] = minCorner[0]; + bbox[1] = minCorner[1]; + bbox[2] = maxCorner[0]; + bbox[3] = maxCorner[1]; + center = transformer(center); + } - const w = req.params.width | 0; - const h = req.params.height | 0; - const scale = getScale(req.params.scale); - const format = req.params.format; + const z = calcZForBBox(bbox, w, h, req.query); + const x = center[0]; + const y = center[1]; + const bearing = 0; + const pitch = 0; - const z = calcZForBBox(bbox, w, h, req.query); - const x = center[0]; - const y = center[1]; - const bearing = 0; - const pitch = 0; + const paths = extractPathsFromQuery(req.query, transformer); + const markers = extractMarkersFromQuery( + req.query, + options, + transformer, + ); - const paths = extractPathsFromQuery(req.query, transformer); - const markers = extractMarkersFromQuery( - req.query, - options, - transformer, - ); + // prettier-ignore + const overlay = await renderOverlay( + z, x, y, bearing, pitch, w, h, scale, paths, markers, req.query, + ); - // prettier-ignore - const overlay = await renderOverlay( - z, x, y, bearing, pitch, w, h, scale, paths, markers, req.query, - ); + // prettier-ignore + return await respondImage( + options, item, z, x, y, bearing, pitch, w, h, scale, format, res, overlay, 'static', + ); + } else if (staticTypeMatch.groups.auto) { + // Area Static Image + const bearing = 0; + const pitch = 0; - // prettier-ignore - return respondImage( - options, item, z, x, y, bearing, pitch, w, h, scale, format, res, overlay, 'static', - ); - } catch (e) { - next(e); - } - }; + const transformer = raw + ? mercator.inverse.bind(mercator) + : item.dataProjWGStoInternalWGS; - const boundsPattern = util.format( - ':minx(%s),:miny(%s),:maxx(%s),:maxy(%s)', - FLOAT_PATTERN, - FLOAT_PATTERN, - FLOAT_PATTERN, - FLOAT_PATTERN, - ); + const paths = extractPathsFromQuery(req.query, transformer); + const markers = extractMarkersFromQuery( + req.query, + options, + transformer, + ); - app.get(util.format(staticPattern, boundsPattern), serveBounds); + // Extract coordinates from markers + const markerCoordinates = []; + for (const marker of markers) { + markerCoordinates.push(marker.location); + } - app.get('/:id/static/', (req, res, next) => { - for (const key in req.query) { - req.query[key.toLowerCase()] = req.query[key]; - } - req.params.raw = true; - req.params.format = (req.query.format || 'image/png').split('/').pop(); - const bbox = (req.query.bbox || '').split(','); - req.params.minx = bbox[0]; - req.params.miny = bbox[1]; - req.params.maxx = bbox[2]; - req.params.maxy = bbox[3]; - req.params.width = req.query.width || '256'; - req.params.height = req.query.height || '256'; - if (req.query.scale) { - req.params.width /= req.query.scale; - req.params.height /= req.query.scale; - req.params.scale = `@${req.query.scale}`; - } + // Create array with coordinates from markers and path + const coords = [].concat(paths.flat()).concat(markerCoordinates); - return serveBounds(req, res, next); - }); + // Check if we have at least one coordinate to calculate a bounding box + if (coords.length < 1) { + return res.status(400).send('No coordinates provided'); + } - const autoPattern = 'auto'; + const bbox = [Infinity, Infinity, -Infinity, -Infinity]; + for (const pair of coords) { + bbox[0] = Math.min(bbox[0], pair[0]); + bbox[1] = Math.min(bbox[1], pair[1]); + bbox[2] = Math.max(bbox[2], pair[0]); + bbox[3] = Math.max(bbox[3], pair[1]); + } - app.get( - util.format(staticPattern, autoPattern), - async (req, res, next) => { - try { - const item = repo[req.params.id]; - if (!item) { + const bbox_ = mercator.convert(bbox, '900913'); + const center = mercator.inverse([ + (bbox_[0] + bbox_[2]) / 2, + (bbox_[1] + bbox_[3]) / 2, + ]); + + // Calculate zoom level + const maxZoom = parseFloat(req.query.maxzoom); + let z = calcZForBBox(bbox, w, h, req.query); + if (maxZoom > 0) { + z = Math.min(z, maxZoom); + } + + const x = center[0]; + const y = center[1]; + + // prettier-ignore + const overlay = await renderOverlay( + z, x, y, bearing, pitch, w, h, scale, paths, markers, req.query, + ); + + // prettier-ignore + return await respondImage( + options, item, z, x, y, bearing, pitch, w, h, scale, format, res, overlay, 'static', + ); + } else { return res.sendStatus(404); } - const raw = req.params.raw; - const w = req.params.width | 0; - const h = req.params.height | 0; - const bearing = 0; - const pitch = 0; - const scale = getScale(req.params.scale); - const format = req.params.format; - - const transformer = raw - ? mercator.inverse.bind(mercator) - : item.dataProjWGStoInternalWGS; - - const paths = extractPathsFromQuery(req.query, transformer); - const markers = extractMarkersFromQuery( - req.query, - options, - transformer, - ); - - // Extract coordinates from markers - const markerCoordinates = []; - for (const marker of markers) { - markerCoordinates.push(marker.location); - } - - // Create array with coordinates from markers and path - const coords = [].concat(paths.flat()).concat(markerCoordinates); - - // Check if we have at least one coordinate to calculate a bounding box - if (coords.length < 1) { - return res.status(400).send('No coordinates provided'); - } - - const bbox = [Infinity, Infinity, -Infinity, -Infinity]; - for (const pair of coords) { - bbox[0] = Math.min(bbox[0], pair[0]); - bbox[1] = Math.min(bbox[1], pair[1]); - bbox[2] = Math.max(bbox[2], pair[0]); - bbox[3] = Math.max(bbox[3], pair[1]); - } - - const bbox_ = mercator.convert(bbox, '900913'); - const center = mercator.inverse([ - (bbox_[0] + bbox_[2]) / 2, - (bbox_[1] + bbox_[3]) / 2, - ]); - - // Calculate zoom level - const maxZoom = parseFloat(req.query.maxzoom); - let z = calcZForBBox(bbox, w, h, req.query); - if (maxZoom > 0) { - z = Math.min(z, maxZoom); - } - - const x = center[0]; - const y = center[1]; - - // prettier-ignore - const overlay = await renderOverlay( - z, x, y, bearing, pitch, w, h, scale, paths, markers, req.query, - ); - - // prettier-ignore - return respondImage( - options, item, z, x, y, bearing, pitch, w, h, scale, format, res, overlay, 'static', - ); } catch (e) { - next(e); + next('route'); } }, ); } - app.get('/(:tileSize(256|512)/)?:id.json', (req, res, next) => { + app.get('{/:tileSize}/:id.json', (req, res, next) => { const item = repo[req.params.id]; if (!item) { return res.sendStatus(404); diff --git a/src/serve_style.js b/src/serve_style.js index 5d3b469..15f9250 100644 --- a/src/serve_style.js +++ b/src/serve_style.js @@ -10,9 +10,15 @@ import { validateStyleMin } from '@maplibre/maplibre-gl-style-spec'; import { fixUrl, allowedOptions } from './utils.js'; const httpTester = /^https?:\/\//i; -const allowedSpriteScales = allowedOptions(['', '@2x', '@3x']); const allowedSpriteFormats = allowedOptions(['png', 'json']); +const allowedSpriteScales = (scale) => { + if (!scale) return ''; // Default to 1 if no scale provided + const match = scale.match(/(\d+)x/); // Match one or more digits before 'x' + const parsedScale = match ? parseInt(match[1], 10) : 1; // Parse the number, or default to 1 if no match + return '@' + Math.min(parsedScale, 3) + 'x'; +}; + export const serve_style = { init: (options, repo) => { const app = express().disable('x-powered-by'); @@ -46,14 +52,18 @@ export const serve_style = { return res.send(styleJSON_); }); - app.get( - '/:id/sprite(/:spriteID)?:scale(@[23]x)?.:format([\\w]+)', - (req, res, next) => { - const { spriteID = 'default', id } = req.params; - const scale = allowedSpriteScales(req.params.scale) || ''; - const format = allowedSpriteFormats(req.params.format); - - if (format) { + app.get(`/:id/:sprite{/:spriteID}{@:scale}{.:format}`, (req, res, next) => { + console.log(req.params); + const { spriteID = 'default', id, format } = req.params; + const scale = allowedSpriteScales(req.params.scale); + try { + if ( + !allowedSpriteFormats(format) || + ((id == 256 || id == 512) && format === 'json') + ) { + //Workaround for {/:tileSize}/:id.json' and /styles/:id/wmts.xml + next('route'); + } else { const item = repo[id]; const sprite = item.spritePaths.find( (sprite) => sprite.id === spriteID, @@ -74,11 +84,12 @@ export const serve_style = { } else { return res.status(400).send('Bad Sprite ID or Scale'); } - } else { - return res.status(400).send('Bad Sprite Format'); } - }, - ); + } catch (e) { + console.log(e); + next('route'); + } + }); return app; }, diff --git a/src/server.js b/src/server.js index c554e83..56add03 100644 --- a/src/server.js +++ b/src/server.js @@ -37,7 +37,7 @@ const serve_rendered = ( * * @param opts */ -function start(opts) { +async function start(opts) { console.log('Starting server'); const app = express().disable('x-powered-by'); @@ -73,7 +73,7 @@ function start(opts) { config = JSON.parse(fs.readFileSync(configPath, 'utf8')); } catch (e) { console.log('ERROR: Config file not found or invalid!'); - console.log(' See README.md for instructions and sample data.'); + console.log(' See README.md for instructions and sample data.'); process.exit(1); } } @@ -379,14 +379,14 @@ function start(opts) { return arr; }; - app.get('/(:tileSize(256|512)/)?rendered.json', (req, res, next) => { + app.get('{/:tileSize}/rendered.json', (req, res, next) => { const tileSize = parseInt(req.params.tileSize, 10) || undefined; res.send(addTileJSONs([], req, 'rendered', tileSize)); }); - app.get('/data.json', (req, res, next) => { + app.get('/data.json', (req, res) => { res.send(addTileJSONs([], req, 'data', undefined)); }); - app.get('/(:tileSize(256|512)/)?index.json', (req, res, next) => { + app.get('{/:tileSize}/index.json', (req, res, next) => { const tileSize = parseInt(req.params.tileSize, 10) || undefined; res.send( addTileJSONs( @@ -415,44 +415,38 @@ function start(opts) { templateFile = path.resolve(paths.root, options.frontPage); } } - startupPromises.push( - new Promise((resolve, reject) => { - fs.readFile(templateFile, (err, content) => { - if (err) { - err = new Error(`Template not found: ${err.message}`); - reject(err); - return; + try { + const content = fs.readFileSync(templateFile, 'utf-8'); + const compiled = handlebars.compile(content.toString()); + app.get(urlPath, (req, res) => { + console.log(`Serving template at path: ${urlPath}`); + let data = {}; + if (dataGetter) { + data = dataGetter(req); + if (!data) { + console.error(`Data getter for ${template} returned null`); + return res.status(404).send('Not found'); } - const compiled = handlebars.compile(content.toString()); - - app.use(urlPath, (req, res, next) => { - let data = {}; - if (dataGetter) { - data = dataGetter(req); - if (!data) { - return res.status(404).send('Not found'); - } - } - data['server_version'] = - `${packageJson.name} v${packageJson.version}`; - data['public_url'] = opts.publicUrl || '/'; - data['is_light'] = isLight; - data['key_query_part'] = req.query.key - ? `key=${encodeURIComponent(req.query.key)}&` - : ''; - data['key_query'] = req.query.key - ? `?key=${encodeURIComponent(req.query.key)}` - : ''; - if (template === 'wmts') res.set('Content-Type', 'text/xml'); - return res.status(200).send(compiled(data)); - }); - resolve(); - }); - }), - ); + } + data['server_version'] = `${packageJson.name} v${packageJson.version}`; + data['public_url'] = opts.publicUrl || '/'; + data['is_light'] = isLight; + data['key_query_part'] = req.query.key + ? `key=${encodeURIComponent(req.query.key)}&` + : ''; + data['key_query'] = req.query.key + ? `?key=${encodeURIComponent(req.query.key)}` + : ''; + if (template === 'wmts') res.set('Content-Type', 'text/xml'); + return res.status(200).send(compiled(data)); + }); + } catch (err) { + console.error(`Error reading template file: ${templateFile}`, err); + throw new Error(`Template not found: ${err.message}`); //throw an error so that the server doesnt start + } }; - serveTemplate('/$', 'index', (req) => { + serveTemplate('/', 'index', (req) => { let styles = {}; for (const id of Object.keys(serving.styles || {})) { let style = { @@ -542,7 +536,7 @@ function start(opts) { }; }); - serveTemplate('/styles/:id/$', 'viewer', (req) => { + serveTemplate('/styles/:id/', 'viewer', (req) => { const { id } = req.params; const style = clone(((serving.styles || {})[id] || {}).styleJSON); @@ -559,11 +553,6 @@ function start(opts) { }; }); - /* - app.use('/rendered/:id/$', function(req, res, next) { - return res.redirect(301, '/styles/' + req.params.id + '/'); - }); - */ serveTemplate('/styles/:id/wmts.xml', 'wmts', (req) => { const { id } = req.params; const wmts = clone((serving.styles || {})[id]); @@ -595,7 +584,7 @@ function start(opts) { }; }); - serveTemplate('/data/:id/$', 'data', (req) => { + serveTemplate('/data/:id/', 'data', (req) => { const { id } = req.params; const data = serving.data[id]; @@ -616,7 +605,7 @@ function start(opts) { startupComplete = true; }); - app.get('/health', (req, res, next) => { + app.get('/health', (req, res) => { if (startupComplete) { return res.status(200).send('OK'); } else { @@ -659,8 +648,8 @@ function stopGracefully(signal) { * * @param opts */ -export function server(opts) { - const running = start(opts); +export async function server(opts) { + const running = await start(opts); running.startupPromise.catch((err) => { console.error(err.message); diff --git a/test/setup.js b/test/setup.js index 34fba67..1852a19 100644 --- a/test/setup.js +++ b/test/setup.js @@ -7,10 +7,10 @@ import { server } from '../src/server.js'; global.expect = expect; global.supertest = supertest; -before(function () { +before(async function () { console.log('global setup'); process.chdir('test_data'); - const running = server({ + const running = await server({ configPath: 'config.json', port: 8888, publicUrl: '/test/', From b72f6621065ec30eca7c88134aff37dac9732c3e Mon Sep 17 00:00:00 2001 From: acalcutt Date: Sun, 29 Dec 2024 01:56:15 -0500 Subject: [PATCH 002/152] try to fix https://github.com/maptiler/tileserver-gl/issues/1411 Co-Authored-By: Andrew Calcutt --- src/serve_rendered.js | 40 ++++++++++++++++++++++++---------------- 1 file changed, 24 insertions(+), 16 deletions(-) diff --git a/src/serve_rendered.js b/src/serve_rendered.js index 65246f1..05d14ce 100644 --- a/src/serve_rendered.js +++ b/src/serve_rendered.js @@ -133,23 +133,31 @@ function createEmptyResponse(format, color, callback) { } // create an "empty" response image - color = new Color(color); - const array = color.array(); - const channels = array.length === 4 && format !== 'jpeg' ? 4 : 3; - sharp(Buffer.from(array), { - raw: { - width: 1, - height: 1, - channels, - }, - }) - .toFormat(format) - .toBuffer((err, buffer, info) => { - if (!err) { + try { + color = new Color(color); + const array = color.array(); + const channels = array.length === 4 && format !== 'jpeg' ? 4 : 3; + sharp(Buffer.from(array), { + raw: { + width: 1, + height: 1, + channels, + }, + }) + .toFormat(format) + .toBuffer((err, buffer, info) => { + if (err) { + console.error('Error creating image with Sharp:', err); + callback(err, null); + return; + } cachedEmptyResponses[cacheKey] = buffer; - } - callback(null, { data: buffer }); - }); + callback(null, { data: buffer }); + }); + } catch (error) { + console.error('Error during image processing setup:', error); + callback(error, null); + } } /** From c7377e82d55bc6b7f8140f66ed7c17d37edf4955 Mon Sep 17 00:00:00 2001 From: acalcutt Date: Sun, 29 Dec 2024 02:28:42 -0500 Subject: [PATCH 003/152] cleanup server.js Co-Authored-By: Andrew Calcutt --- src/server.js | 64 +++++++++++++++++++++++++++++++-------------------- 1 file changed, 39 insertions(+), 25 deletions(-) diff --git a/src/server.js b/src/server.js index 56add03..9f6d714 100644 --- a/src/server.js +++ b/src/server.js @@ -34,8 +34,9 @@ const serve_rendered = ( ).serve_rendered; /** - * - * @param opts + * Starts the server. + * @param {object} opts - Configuration options for the server. + * @returns {Promise} - A promise that resolves to the server object. */ async function start(opts) { console.log('Starting server'); @@ -116,8 +117,9 @@ async function start(opts) { * Recursively get all files within a directory. * Inspired by https://stackoverflow.com/a/45130990/10133863 * @param {string} directory Absolute path to a directory to get files from. + * @returns {Promise} - A promise that resolves to an array of file paths relative to the icon directory. */ - const getFiles = async (directory) => { + async function getFiles(directory) { // Fetch all entries of the directory and attach type information const dirEntries = await fs.promises.readdir(directory, { withFileTypes: true, @@ -136,7 +138,7 @@ async function start(opts) { // Flatten the list of files to a single array return files.flat(); - }; + } // Load all available icons into a settings object startupPromises.push( @@ -169,8 +171,15 @@ async function start(opts) { }), ); } - - const addStyle = (id, item, allowMoreData, reportFonts) => { + /** + * Adds a style to the server. + * @param {string} id - The ID of the style. + * @param {object} item - The style configuration object. + * @param {boolean} allowMoreData - Whether to allow adding more data sources. + * @param {boolean} reportFonts - Whether to report fonts. + * @returns {void} + */ + function addStyle(id, item, allowMoreData, reportFonts) { let success = true; if (item.serve_data !== false) { success = serve_style.add( @@ -261,7 +270,7 @@ async function start(opts) { item.serve_rendered = false; } } - }; + } for (const id of Object.keys(config.styles || {})) { const item = config.styles[id]; @@ -272,13 +281,11 @@ async function start(opts) { addStyle(id, item, true, true); } - startupPromises.push( serve_font(options, serving.fonts).then((sub) => { app.use('/', sub); }), ); - for (const id of Object.keys(data)) { const item = data[id]; const fileType = Object.keys(data[id])[0]; @@ -288,12 +295,10 @@ async function start(opts) { ); continue; } - startupPromises.push( serve_data.add(options, serving.data, item, id, opts.publicUrl), ); } - if (options.serveAllStyles) { fs.readdir(options.paths.styles, { withFileTypes: true }, (err, files) => { if (err) { @@ -333,7 +338,6 @@ async function start(opts) { } }); } - app.get('/styles.json', (req, res, next) => { const result = []; const query = req.query.key @@ -354,7 +358,15 @@ async function start(opts) { res.send(result); }); - const addTileJSONs = (arr, req, type, tileSize) => { + /** + * Adds TileJSON metadata to an array. + * @param {Array} arr - The array to add TileJSONs to + * @param {object} req - The express request object. + * @param {string} type - The type of resource + * @param {number} tileSize - The tile size. + * @returns {Array} - An array of TileJSON objects. + */ + function addTileJSONs(arr, req, type, tileSize) { for (const id of Object.keys(serving[type])) { const info = clone(serving[type][id].tileJSON); let path = ''; @@ -377,7 +389,7 @@ async function start(opts) { arr.push(info); } return arr; - }; + } app.get('{/:tileSize}/rendered.json', (req, res, next) => { const tileSize = parseInt(req.params.tileSize, 10) || undefined; @@ -403,7 +415,14 @@ async function start(opts) { app.use('/', express.static(path.join(__dirname, '../public/resources'))); const templates = path.join(__dirname, '../public/templates'); - const serveTemplate = (urlPath, template, dataGetter) => { + /** + * Serves a Handlebars template. + * @param {string} urlPath - The URL path to serve the template at + * @param {string} template - The name of the template file + * @param {Function} dataGetter - A function to get data to be passed to the template. + * @returns {void} + */ + function serveTemplate(urlPath, template, dataGetter) { let templateFile = `${templates}/${template}.tmpl`; if (template === 'index') { if (options.frontPage === false) { @@ -444,8 +463,7 @@ async function start(opts) { console.error(`Error reading template file: ${templateFile}`, err); throw new Error(`Template not found: ${err.message}`); //throw an error so that the server doesnt start } - }; - + } serveTemplate('/', 'index', (req) => { let styles = {}; for (const id of Object.keys(serving.styles || {})) { @@ -478,7 +496,6 @@ async function start(opts) { styles[id] = style; } - let datas = {}; for (const id of Object.keys(serving.data || {})) { let data = Object.assign({}, serving.data[id]); @@ -526,10 +543,8 @@ async function start(opts) { } data.formatted_filesize = `${size.toFixed(2)} ${suffix}`; } - datas[id] = data; } - return { styles: Object.keys(styles).length ? styles : null, data: Object.keys(datas).length ? datas : null, @@ -543,7 +558,6 @@ async function start(opts) { if (!style) { return null; } - return { ...style, id, @@ -591,7 +605,6 @@ async function start(opts) { if (!data) { return null; } - return { ...data, id, @@ -638,6 +651,7 @@ async function start(opts) { /** * Stop the server gracefully * @param {string} signal Name of the received signal + * @returns {void} */ function stopGracefully(signal) { console.log(`Caught signal ${signal}, stopping gracefully`); @@ -645,8 +659,9 @@ function stopGracefully(signal) { } /** - * - * @param opts + * Starts and manages the server + * @param {object} opts - Configuration options for the server. + * @returns {Promise} - A promise that resolves to the running server */ export async function server(opts) { const running = await start(opts); @@ -669,6 +684,5 @@ export async function server(opts) { running.app = restarted.app; }); }); - return running; } From 2e74bc7b4ac03c299a34d6ff72af7ec57c1e9e3e Mon Sep 17 00:00:00 2001 From: acalcutt Date: Sun, 29 Dec 2024 02:34:39 -0500 Subject: [PATCH 004/152] cleanup serve_font.js Co-Authored-By: Andrew Calcutt --- src/serve_font.js | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/src/serve_font.js b/src/serve_font.js index d753905..30f1fc8 100644 --- a/src/serve_font.js +++ b/src/serve_font.js @@ -4,7 +4,13 @@ import express from 'express'; import { getFontsPbf, listFonts } from './utils.js'; -export const serve_font = async (options, allowedFonts) => { +/** + * Initializes and returns an Express app that serves font files. + * @param {object} options - Configuration options for the server. + * @param {object} allowedFonts - An object containing allowed fonts. + * @returns {Promise} - A promise that resolves to the Express app. + */ +export async function serve_font(options, allowedFonts) { const app = express().disable('x-powered-by'); const lastModified = new Date().toUTCString(); @@ -45,4 +51,4 @@ export const serve_font = async (options, allowedFonts) => { const fonts = await listFonts(options.paths.fonts); Object.assign(existingFonts, fonts); return app; -}; +} From 61e81e0e610368ec80332aa8cff143025210fe86 Mon Sep 17 00:00:00 2001 From: acalcutt Date: Sun, 29 Dec 2024 02:58:59 -0500 Subject: [PATCH 005/152] cleanup sever_rendered.js Co-Authored-By: Andrew Calcutt --- src/serve_rendered.js | 123 +++++++++++++++++++++++++++++++++--------- 1 file changed, 98 insertions(+), 25 deletions(-) diff --git a/src/serve_rendered.js b/src/serve_rendered.js index 05d14ce..f3b5d94 100644 --- a/src/serve_rendered.js +++ b/src/serve_rendered.js @@ -68,7 +68,13 @@ const httpTester = /^https?:\/\//i; const mercator = new SphericalMercator(); -const parseScale = (scale, maxScaleDigit = 9) => { +/** + * Parses a scale string to a number. + * @param {string} scale The scale string (e.g., '2x', '4x'). + * @param {number} maxScaleDigit Maximum allowed scale digit. + * @returns {number|null} The parsed scale as a number or null if invalid. + */ +function parseScale(scale, maxScaleDigit = 9) { if (scale === undefined) { return 1; } @@ -80,7 +86,7 @@ const parseScale = (scale, maxScaleDigit = 9) => { } return parseInt(scale.slice(0, -1), 10); -}; +} mlgl.on('message', (e) => { if (e.severity === 'WARNING' || e.severity === 'ERROR') { @@ -111,6 +117,7 @@ const cachedEmptyResponses = { * @param {string} format The format (a sharp format or 'pbf'). * @param {string} color The background color (or empty string for transparent). * @param {Function} callback The mlgl callback. + * @returns {void} */ function createEmptyResponse(format, color, callback) { if (!format || format === 'pbf') { @@ -163,11 +170,12 @@ function createEmptyResponse(format, color, callback) { /** * Parses coordinate pair provided to pair of floats and ensures the resulting * pair is a longitude/latitude combination depending on lnglat query parameter. - * @param {List} coordinatePair Coordinate pair. + * @param {Array} coordinatePair Coordinate pair. * @param coordinates * @param {object} query Request query parameters. + * @returns {Array|null} Parsed coordinate pair as [longitude, latitude] or null if invalid */ -const parseCoordinatePair = (coordinates, query) => { +function parseCoordinatePair(coordinates, query) { const firstCoordinate = parseFloat(coordinates[0]); const secondCoordinate = parseFloat(coordinates[1]); @@ -183,15 +191,16 @@ const parseCoordinatePair = (coordinates, query) => { } return [firstCoordinate, secondCoordinate]; -}; +} /** * Parses a coordinate pair from query arguments and optionally transforms it. - * @param {List} coordinatePair Coordinate pair. + * @param {Array} coordinatePair Coordinate pair. * @param {object} query Request query parameters. * @param {Function} transformer Optional transform function. + * @returns {Array|null} Transformed coordinate pair or null if invalid. */ -const parseCoordinates = (coordinatePair, query, transformer) => { +function parseCoordinates(coordinatePair, query, transformer) { const parsedCoordinates = parseCoordinatePair(coordinatePair, query); // Transform coordinates @@ -200,14 +209,15 @@ const parseCoordinates = (coordinatePair, query, transformer) => { } return parsedCoordinates; -}; +} /** * Parses paths provided via query into a list of path objects. * @param {object} query Request query parameters. * @param {Function} transformer Optional transform function. + * @returns {Array>>} Array of paths. */ -const extractPathsFromQuery = (query, transformer) => { +function extractPathsFromQuery(query, transformer) { // Initiate paths array const paths = []; // Return an empty list if no paths have been provided @@ -259,17 +269,18 @@ const extractPathsFromQuery = (query, transformer) => { } } return paths; -}; +} /** * Parses marker options provided via query and sets corresponding attributes * on marker object. * Options adhere to the following format * [optionName]:[optionValue] - * @param {List[String]} optionsList List of option strings. + * @param {Array} optionsList List of option strings. * @param {object} marker Marker object to configure. + * @returns {void} */ -const parseMarkerOptions = (optionsList, marker) => { +function parseMarkerOptions(optionsList, marker) { for (const options of optionsList) { const optionParts = options.split(':'); // Ensure we got an option name and value @@ -296,15 +307,16 @@ const parseMarkerOptions = (optionsList, marker) => { break; } } -}; +} /** * Parses markers provided via query into a list of marker objects. * @param {object} query Request query parameters. * @param {object} options Configuration options. * @param {Function} transformer Optional transform function. + * @returns {Array} An array of marker objects. */ -const extractMarkersFromQuery = (query, options, transformer) => { +function extractMarkersFromQuery(query, options, transformer) { // Return an empty list if no markers have been provided if (!query.marker) { return []; @@ -380,9 +392,16 @@ const extractMarkersFromQuery = (query, options, transformer) => { markers.push(marker); } return markers; -}; - -const calcZForBBox = (bbox, w, h, query) => { +} +/** + * Calculates the zoom level for a given bounding box. + * @param {Array} bbox Bounding box as [minx, miny, maxx, maxy]. + * @param {number} w Width of the image. + * @param {number} h Height of the image. + * @param {object} query Request query parameters. + * @returns {number} Calculated zoom level. + */ +function calcZForBBox(bbox, w, h, query) { let z = 25; const padding = query.padding !== undefined ? parseFloat(query.padding) : 0.1; @@ -401,9 +420,27 @@ const calcZForBBox = (bbox, w, h, query) => { z = Math.max(Math.log(Math.max(w, h) / 256) / Math.LN2, Math.min(25, z)); return z; -}; +} -const respondImage = ( +/** + * Responds with an image. + * @param {object} options Configuration options. + * @param {object} item Item object containing map and other information. + * @param {number} z Zoom level. + * @param {number} lon Longitude of the center. + * @param {number} lat Latitude of the center. + * @param {number} bearing Map bearing. + * @param {number} pitch Map pitch. + * @param {number} width Width of the image. + * @param {number} height Height of the image. + * @param {number} scale Scale factor. + * @param {string} format Image format. + * @param {object} res Express response object. + * @param {Buffer|null} overlay Optional overlay image. + * @param {string} mode Rendering mode ('tile' or 'static'). + * @returns {Promise} + */ +const respondImage = async ( options, item, z, @@ -451,7 +488,7 @@ const respondImage = ( } else { pool = item.map.renderersStatic[scale]; } - pool.acquire((err, renderer) => { + pool.acquire(async (err, renderer) => { // For 512px tiles, use the actual maplibre-native zoom. For 256px tiles, use zoom - 1 let mlglZ; if (width === 512) { @@ -591,7 +628,13 @@ const existingFonts = {}; let maxScaleFactor = 2; export const serve_rendered = { - init: async (options, repo) => { + /** + * Initializes the serve_rendered module. + * @param {object} options Configuration options. + * @param {object} repo Repository object. + * @returns {Promise} A promise that resolves to the Express app. + */ + init: async function (options, repo) { maxScaleFactor = Math.min(Math.floor(options.maxScaleFactor || 3), 9); const app = express().disable('x-powered-by'); @@ -650,8 +693,8 @@ export const serve_rendered = { // prettier-ignore return await respondImage( - options, item, z, tileCenter[0], tileCenter[1], 0, 0, tileSize, tileSize, scale, format, res, - ); + options, item, z, tileCenter[0], tileCenter[1], 0, 0, tileSize, tileSize, scale, format, res, + ); } } catch (e) { console.log(e); @@ -864,7 +907,17 @@ export const serve_rendered = { Object.assign(existingFonts, fonts); return app; }, - add: async (options, repo, params, id, publicUrl, dataResolver) => { + /** + * Adds a new item to the repository. + * @param {object} options Configuration options. + * @param {object} repo Repository object. + * @param {object} params Parameters object. + * @param {string} id ID of the item. + * @param {string} publicUrl Public URL. + * @param {Function} dataResolver Function to resolve data. + * @returns {Promise} + */ + add: async function (options, repo, params, id, publicUrl, dataResolver) { const map = { renderers: [], renderersStatic: [], @@ -873,7 +926,21 @@ export const serve_rendered = { }; let styleJSON; + /** + * Creates a pool of renderers. + * @param {number} ratio Pixel ratio + * @param {string} mode Rendering mode ('tile' or 'static'). + * @param {number} min Minimum pool size. + * @param {number} max Maximum pool size. + * @returns {object} The created pool + */ const createPool = (ratio, mode, min, max) => { + /** + * Creates a renderer + * @param {number} ratio Pixel ratio + * @param {Function} createCallback Function that returns the renderer when created + * @returns {void} + */ const createRenderer = (ratio, createCallback) => { const renderer = new mlgl.Map({ mode, @@ -1278,7 +1345,13 @@ export const serve_rendered = { ); } }, - remove: (repo, id) => { + /** + * Removes an item from the repository. + * @param {object} repo Repository object. + * @param {string} id ID of the item to remove. + * @returns {void} + */ + remove: function (repo, id) { const item = repo[id]; if (item) { item.map.renderers.forEach((pool) => { From a0fb3680d0026f3147994e94b2a44d6e2ed3a76f Mon Sep 17 00:00:00 2001 From: acalcutt Date: Sun, 29 Dec 2024 03:09:09 -0500 Subject: [PATCH 006/152] cleanup server_data.js Co-Authored-By: Andrew Calcutt --- src/serve_data.js | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) diff --git a/src/serve_data.js b/src/serve_data.js index d9bea68..6cff9c3 100644 --- a/src/serve_data.js +++ b/src/serve_data.js @@ -18,7 +18,13 @@ import { gunzipP, gzipP } from './promises.js'; import { openMbTilesWrapper } from './mbtiles_wrapper.js'; export const serve_data = { - init: (options, repo) => { + /** + * Initializes the serve_data module. + * @param {object} options Configuration options. + * @param {object} repo Repository object. + * @returns {express.Application} The initialized Express application. + */ + init: function (options, repo) { const app = express().disable('x-powered-by'); app.get('/:id/:z/:x/:y.:format', async (req, res) => { @@ -181,7 +187,16 @@ export const serve_data = { return app; }, - add: async (options, repo, params, id, publicUrl) => { + /** + * Adds a new data source to the repository. + * @param {object} options Configuration options. + * @param {object} repo Repository object. + * @param {object} params Parameters object. + * @param {string} id ID of the data source. + * @param {string} publicUrl Public URL of the data. + * @returns {Promise} + */ + add: async function (options, repo, params, id, publicUrl) { let inputFile; let inputType; if (params.pmtiles) { From b6382085b74724aa4c415ab4b429b82af7fca8ae Mon Sep 17 00:00:00 2001 From: acalcutt Date: Sun, 29 Dec 2024 03:15:54 -0500 Subject: [PATCH 007/152] cleanup serve_style Co-Authored-By: Andrew Calcutt --- src/serve_style.js | 46 +++++++++++++++++++++++++++++++++++++++++----- 1 file changed, 41 insertions(+), 5 deletions(-) diff --git a/src/serve_style.js b/src/serve_style.js index 15f9250..ec8a0b4 100644 --- a/src/serve_style.js +++ b/src/serve_style.js @@ -12,15 +12,26 @@ import { fixUrl, allowedOptions } from './utils.js'; const httpTester = /^https?:\/\//i; const allowedSpriteFormats = allowedOptions(['png', 'json']); -const allowedSpriteScales = (scale) => { +/** + * Checks and formats sprite scale + * @param {string} scale string containing the scale + * @returns {string} formated string for the scale or empty string if scale is invalid + */ +function allowedSpriteScales(scale) { if (!scale) return ''; // Default to 1 if no scale provided const match = scale.match(/(\d+)x/); // Match one or more digits before 'x' const parsedScale = match ? parseInt(match[1], 10) : 1; // Parse the number, or default to 1 if no match return '@' + Math.min(parsedScale, 3) + 'x'; -}; +} export const serve_style = { - init: (options, repo) => { + /** + * Initializes the serve_style module. + * @param {object} options Configuration options. + * @param {object} repo Repository object. + * @returns {express.Application} The initialized Express application. + */ + init: function (options, repo) { const app = express().disable('x-powered-by'); app.get('/:id/style.json', (req, res, next) => { @@ -93,10 +104,35 @@ export const serve_style = { return app; }, - remove: (repo, id) => { + /** + * Removes an item from the repository. + * @param {object} repo Repository object. + * @param {string} id ID of the item to remove. + * @returns {void} + */ + remove: function (repo, id) { delete repo[id]; }, - add: (options, repo, params, id, publicUrl, reportTiles, reportFont) => { + /** + * Adds a new style to the repository. + * @param {object} options Configuration options. + * @param {object} repo Repository object. + * @param {object} params Parameters object containing style path + * @param {string} id ID of the style. + * @param {string} publicUrl Public URL of the data. + * @param {Function} reportTiles Function for reporting tile sources. + * @param {Function} reportFont Function for reporting font usage + * @returns {boolean} true if add is succesful + */ + add: function ( + options, + repo, + params, + id, + publicUrl, + reportTiles, + reportFont, + ) { const styleFile = path.resolve(options.paths.styles, params.style); let styleFileData; From d635d3ca326afe67fca2d3e29ed687b733b7889d Mon Sep 17 00:00:00 2001 From: acalcutt Date: Sun, 29 Dec 2024 03:19:21 -0500 Subject: [PATCH 008/152] Update serve_style.js Co-Authored-By: Andrew Calcutt --- src/serve_style.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/serve_style.js b/src/serve_style.js index ec8a0b4..d0c2e3b 100644 --- a/src/serve_style.js +++ b/src/serve_style.js @@ -18,9 +18,9 @@ const allowedSpriteFormats = allowedOptions(['png', 'json']); * @returns {string} formated string for the scale or empty string if scale is invalid */ function allowedSpriteScales(scale) { - if (!scale) return ''; // Default to 1 if no scale provided - const match = scale.match(/(\d+)x/); // Match one or more digits before 'x' - const parsedScale = match ? parseInt(match[1], 10) : 1; // Parse the number, or default to 1 if no match + if (!scale) return ''; + const match = scale.match(/(\d+)x/); + const parsedScale = match ? parseInt(match[1], 10) : 1; return '@' + Math.min(parsedScale, 3) + 'x'; } From c72d6f580c5e92181b2ceb7132d09521c94f63f3 Mon Sep 17 00:00:00 2001 From: acalcutt Date: Sun, 29 Dec 2024 11:39:38 -0500 Subject: [PATCH 009/152] Move UV_THREADPOOL_SIZE to main thred Co-Authored-By: Andrew Calcutt --- src/main.js | 6 ++++++ src/server.js | 3 --- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/src/main.js b/src/main.js index 7523aa9..b1f14a2 100644 --- a/src/main.js +++ b/src/main.js @@ -1,6 +1,12 @@ #!/usr/bin/env node 'use strict'; +import os from 'os'; + +const envSize = parseInt(process.env.UV_THREADPOOL_SIZE, 10); +process.env.UV_THREADPOOL_SIZE = Math.ceil( + Math.max(4, isNaN(envSize) ? os.cpus().length * 1.5 : envSize), +); import fs from 'node:fs'; import fsp from 'node:fs/promises'; diff --git a/src/server.js b/src/server.js index 9f6d714..3da2ffb 100644 --- a/src/server.js +++ b/src/server.js @@ -1,9 +1,6 @@ #!/usr/bin/env node 'use strict'; -import os from 'os'; -process.env.UV_THREADPOOL_SIZE = Math.ceil(Math.max(4, os.cpus().length * 1.5)); - import fs from 'node:fs'; import path from 'path'; import fnv1a from '@sindresorhus/fnv1a'; From 70d6986a9ebd1427d21c97094b93d841362133fa Mon Sep 17 00:00:00 2001 From: acalcutt Date: Sun, 29 Dec 2024 17:05:01 -0500 Subject: [PATCH 010/152] cleanup utils.js Co-Authored-By: Andrew Calcutt --- src/utils.js | 110 +++++++++++++++++++++++++++++++++++++-------------- 1 file changed, 81 insertions(+), 29 deletions(-) diff --git a/src/utils.js b/src/utils.js index 14e5871..5d01b5f 100644 --- a/src/utils.js +++ b/src/utils.js @@ -9,9 +9,10 @@ import { existsP } from './promises.js'; /** * Restrict user input to an allowed set of options. - * @param opts - * @param root0 - * @param root0.defaultValue + * @param {string[]} opts - An array of allowed option strings. + * @param {object} [config] - Optional configuration object. + * @param {string} [config.defaultValue] - The default value to return if input doesn't match. + * @returns {function(string): string} - A function that takes a value and returns it if valid or a default. */ export function allowedOptions(opts, { defaultValue } = {}) { const values = Object.fromEntries(opts.map((key) => [key, key])); @@ -19,10 +20,11 @@ export function allowedOptions(opts, { defaultValue } = {}) { } /** - * Replace local:// urls with public http(s):// urls - * @param req - * @param url - * @param publicUrl + * Replaces local:// URLs with public http(s):// URLs. + * @param {object} req - Express request object. + * @param {string} url - The URL string to fix. + * @param {string} publicUrl - The public URL prefix to use for replacements. + * @returns {string} - The fixed URL string. */ export function fixUrl(req, url, publicUrl) { if (!url || typeof url !== 'string' || url.indexOf('local://') !== 0) { @@ -40,12 +42,11 @@ export function fixUrl(req, url, publicUrl) { } /** - * Generate new URL object - * @param req - * @params {object} req - Express request - * @returns {URL} object + * Generates a new URL object from the Express request. + * @param {object} req - Express request object. + * @returns {URL} - URL object with correct host and optionally path. */ -const getUrlObject = (req) => { +function getUrlObject(req) { const urlObject = new URL(`${req.protocol}://${req.headers.host}/`); // support overriding hostname by sending X-Forwarded-Host http header urlObject.hostname = req.hostname; @@ -56,16 +57,33 @@ const getUrlObject = (req) => { urlObject.pathname = path.posix.join(xForwardedPath, urlObject.pathname); } return urlObject; -}; +} -export const getPublicUrl = (publicUrl, req) => { +/** + * Gets the public URL, either from a provided publicUrl or generated from the request. + * @param {string} publicUrl - The optional public URL to use. + * @param {object} req - The Express request object. + * @returns {string} - The final public URL string. + */ +export function getPublicUrl(publicUrl, req) { if (publicUrl) { return publicUrl; } return getUrlObject(req).toString(); -}; +} -export const getTileUrls = ( +/** + * Generates an array of tile URLs based on given parameters. + * @param {object} req - Express request object. + * @param {string | string[]} domains - Domain(s) to use for tile URLs. + * @param {string} path - The base path for the tiles. + * @param {number} [tileSize] - The size of the tile (optional). + * @param {string} format - The format of the tiles (e.g., 'png', 'jpg'). + * @param {string} publicUrl - The public URL to use (if not using domains). + * @param {object} [aliases] - Aliases for format extensions. + * @returns {string[]} An array of tile URL strings. + */ +export function getTileUrls( req, domains, path, @@ -73,7 +91,7 @@ export const getTileUrls = ( format, publicUrl, aliases, -) => { +) { const urlObject = getUrlObject(req); if (domains) { if (domains.constructor === String && domains.length > 0) { @@ -132,9 +150,14 @@ export const getTileUrls = ( } return uris; -}; +} -export const fixTileJSONCenter = (tileJSON) => { +/** + * Fixes the center in the tileJSON if no center is available. + * @param {object} tileJSON - The tileJSON object to process. + * @returns {void} + */ +export function fixTileJSONCenter(tileJSON) { if (tileJSON.bounds && !tileJSON.center) { const fitWidth = 1024; const tiles = fitWidth / 256; @@ -147,10 +170,19 @@ export const fixTileJSONCenter = (tileJSON) => { ), ]; } -}; +} -const getFontPbf = (allowedFonts, fontPath, name, range, fallbacks) => - new Promise((resolve, reject) => { +/** + * Retrieves font data for a given font and range. + * @param {object} allowedFonts - An object of allowed fonts. + * @param {string} fontPath - The path to the font directory. + * @param {string} name - The name of the font. + * @param {string} range - The range (e.g., '0-255') of the font to load. + * @param {object} [fallbacks] - Optional fallback font list. + * @returns {Promise} A promise that resolves with the font data Buffer or rejects with an error. + */ +function getFontPbf(allowedFonts, fontPath, name, range, fallbacks) { + return new Promise((resolve, reject) => { if (!allowedFonts || (allowedFonts[name] && fallbacks)) { const filename = path.join(fontPath, name, `${range}.pbf`); if (!fallbacks) { @@ -192,14 +224,24 @@ const getFontPbf = (allowedFonts, fontPath, name, range, fallbacks) => reject(`Font not allowed: ${name}`); } }); +} -export const getFontsPbf = async ( +/** + * Combines multiple font pbf buffers into one. + * @param {object} allowedFonts - An object of allowed fonts. + * @param {string} fontPath - The path to the font directory. + * @param {string} names - Comma-separated font names. + * @param {string} range - The range of the font (e.g., '0-255'). + * @param {object} [fallbacks] - Fallback font list. + * @returns {Promise} - A promise that resolves to the combined font data buffer. + */ +export async function getFontsPbf( allowedFonts, fontPath, names, range, fallbacks, -) => { +) { const fonts = names.split(','); const queue = []; for (const font of fonts) { @@ -216,9 +258,14 @@ export const getFontsPbf = async ( const combined = combine(await Promise.all(queue), names); return Buffer.from(combined.buffer, 0, combined.buffer.length); -}; +} -export const listFonts = async (fontPath) => { +/** + * Lists available fonts in a given font directory. + * @param {string} fontPath - The path to the font directory. + * @returns {Promise} - Promise that resolves with an object where keys are the font names. + */ +export async function listFonts(fontPath) { const existingFonts = {}; const files = await fsPromises.readdir(fontPath); @@ -233,9 +280,14 @@ export const listFonts = async (fontPath) => { } return existingFonts; -}; +} -export const isValidHttpUrl = (string) => { +/** + * Checks if a string is a valid HTTP or HTTPS URL. + * @param {string} string - The string to validate. + * @returns {boolean} True if the string is a valid HTTP/HTTPS URL, false otherwise. + */ +export function isValidHttpUrl(string) { let url; try { @@ -245,4 +297,4 @@ export const isValidHttpUrl = (string) => { } return url.protocol === 'http:' || url.protocol === 'https:'; -}; +} From e1460fbf67e1dc7d8ff73d4df121943fa6145235 Mon Sep 17 00:00:00 2001 From: acalcutt Date: Sun, 29 Dec 2024 22:15:33 -0500 Subject: [PATCH 011/152] Use common app.get for images and static images Co-Authored-By: Andrew Calcutt --- src/serve_rendered.js | 510 +++++++++++++++++++++++------------------- 1 file changed, 274 insertions(+), 236 deletions(-) diff --git a/src/serve_rendered.js b/src/serve_rendered.js index f3b5d94..3964947 100644 --- a/src/serve_rendered.js +++ b/src/serve_rendered.js @@ -624,6 +624,256 @@ const respondImage = async ( }); }; +/** + * Handles requests for tile images. + * @param {object} options - Configuration options for the server. + * @param {object} repo - The repository object holding style data. + * @param {object} req - Express request object. + * @param {object} res - Express response object. + * @param {Function} next - Express next middleware function. + * @param {number} maxScaleFactor - The maximum scale factor allowed. + * @returns {Promise} + */ +async function handleTileRequest( + options, + repo, + req, + res, + next, + maxScaleFactor, +) { + const { + id, + p2: zParam, + p3: xParam, + p4: yParam, + scale: scaleParam, + format, + p1: tileSize, + } = req.params; + const item = repo[id]; + if (!item) { + return res.sendStatus(404); + } + + const modifiedSince = req.get('if-modified-since'); + const cc = req.get('cache-control'); + if (modifiedSince && (!cc || cc.indexOf('no-cache') === -1)) { + if (new Date(item.lastModified) <= new Date(modifiedSince)) { + return res.sendStatus(304); + } + } + const z = parseFloat(zParam) | 0; + const x = parseFloat(xParam) | 0; + const y = parseFloat(yParam) | 0; + const scale = parseScale(scaleParam, maxScaleFactor); + const parsedTileSize = parseInt(tileSize, 10) || 256; + if ( + scale == null || + z < 0 || + x < 0 || + y < 0 || + z > 22 || + x >= Math.pow(2, z) || + y >= Math.pow(2, z) + ) { + return res.status(404).send('Out of bounds'); + } + + const tileCenter = mercator.ll( + [((x + 0.5) / (1 << z)) * (256 << z), ((y + 0.5) / (1 << z)) * (256 << z)], + z, + ); + + // prettier-ignore + return await respondImage( + options, item, z, tileCenter[0], tileCenter[1], 0, 0, parsedTileSize, parsedTileSize, scale, format, res, + ); +} + +/** + * Handles requests for static map images. + * @param {object} options - Configuration options for the server. + * @param {object} repo - The repository object holding style data. + * @param {object} req - Express request object. + * @param {object} res - Express response object. + * @param {Function} next - Express next middleware function. + * @param {number} maxScaleFactor - The maximum scale factor allowed. + * @returns {Promise} + */ +async function handleStaticRequest( + options, + repo, + req, + res, + next, + maxScaleFactor, +) { + const { + id, + scale: scaleParam, + format, + p2: raw, + p3: type, + p4: width, + p5: height, + } = req.params; + const item = repo[id]; + const parsedWidth = parseInt(width) || 512; + const parsedHeight = parseInt(height) || 512; + const scale = parseScale(scaleParam, maxScaleFactor); + let isRaw = raw !== undefined; + let staticType = type; + + if (!staticType) { + //workaround for type when raw is not set + staticType = raw; + isRaw = false; + } + + if (!item || !staticType || !format || !scale) { + return res.sendStatus(404); + } + + const staticTypeMatch = staticType.match(staticTypeRegex); + console.log(staticTypeMatch); + if (staticTypeMatch.groups.lon) { + // Center Based Static Image + const z = parseFloat(staticTypeMatch.groups.zoom) || 0; + let x = parseFloat(staticTypeMatch.groups.lon) || 0; + let y = parseFloat(staticTypeMatch.groups.lat) || 0; + const bearing = parseFloat(staticTypeMatch.groups.bearing) || 0; + const pitch = parseInt(staticTypeMatch.groups.pitch) || 0; + if (z < 0) { + return res.status(404).send('Invalid zoom'); + } + + const transformer = isRaw + ? mercator.inverse.bind(mercator) + : item.dataProjWGStoInternalWGS; + + if (transformer) { + const ll = transformer([x, y]); + x = ll[0]; + y = ll[1]; + } + + const paths = extractPathsFromQuery(req.query, transformer); + const markers = extractMarkersFromQuery(req.query, options, transformer); + + // prettier-ignore + const overlay = await renderOverlay( + z, x, y, bearing, pitch, parsedWidth, parsedHeight, scale, paths, markers, req.query, + ); + + // prettier-ignore + return await respondImage( + options, item, z, x, y, bearing, pitch, parsedWidth, parsedHeight, scale, format, res, overlay, 'static', + ); + } else if (staticTypeMatch.groups.minx) { + // Area Based Static Image + const bbox = [ + +staticTypeMatch.groups.minx, + +staticTypeMatch.groups.miny, + +staticTypeMatch.groups.maxx, + +staticTypeMatch.groups.maxx, + ]; + let center = [(bbox[0] + bbox[2]) / 2, (bbox[1] + bbox[3]) / 2]; + + const transformer = isRaw + ? mercator.inverse.bind(mercator) + : item.dataProjWGStoInternalWGS; + + if (transformer) { + const minCorner = transformer(bbox.slice(0, 2)); + const maxCorner = transformer(bbox.slice(2)); + bbox[0] = minCorner[0]; + bbox[1] = minCorner[1]; + bbox[2] = maxCorner[0]; + bbox[3] = maxCorner[1]; + center = transformer(center); + } + + const z = calcZForBBox(bbox, parsedWidth, parsedHeight, req.query); + const x = center[0]; + const y = center[1]; + const bearing = 0; + const pitch = 0; + const paths = extractPathsFromQuery(req.query, transformer); + const markers = extractMarkersFromQuery(req.query, options, transformer); + // prettier-ignore + const overlay = await renderOverlay( + z, x, y, bearing, pitch, parsedWidth, parsedHeight, scale, paths, markers, req.query, + ); + + // prettier-ignore + return await respondImage( + options, item, z, x, y, bearing, pitch, parsedWidth, parsedHeight, scale, format, res, overlay, 'static', + ); + } else if (staticTypeMatch.groups.auto) { + // Area Static Image + const bearing = 0; + const pitch = 0; + + const transformer = isRaw + ? mercator.inverse.bind(mercator) + : item.dataProjWGStoInternalWGS; + + const paths = extractPathsFromQuery(req.query, transformer); + const markers = extractMarkersFromQuery(req.query, options, transformer); + + // Extract coordinates from markers + const markerCoordinates = []; + for (const marker of markers) { + markerCoordinates.push(marker.location); + } + + // Create array with coordinates from markers and path + const coords = [].concat(paths.flat()).concat(markerCoordinates); + + // Check if we have at least one coordinate to calculate a bounding box + if (coords.length < 1) { + return res.status(400).send('No coordinates provided'); + } + + const bbox = [Infinity, Infinity, -Infinity, -Infinity]; + for (const pair of coords) { + bbox[0] = Math.min(bbox[0], pair[0]); + bbox[1] = Math.min(bbox[1], pair[1]); + bbox[2] = Math.max(bbox[2], pair[0]); + bbox[3] = Math.max(bbox[3], pair[1]); + } + + const bbox_ = mercator.convert(bbox, '900913'); + const center = mercator.inverse([ + (bbox_[0] + bbox_[2]) / 2, + (bbox_[1] + bbox_[3]) / 2, + ]); + + // Calculate zoom level + const maxZoom = parseFloat(req.query.maxzoom); + let z = calcZForBBox(bbox, parsedWidth, parsedHeight, req.query); + if (maxZoom > 0) { + z = Math.min(z, maxZoom); + } + + const x = center[0]; + const y = center[1]; + + // prettier-ignore + const overlay = await renderOverlay( + z, x, y, bearing, pitch, parsedWidth, parsedHeight, scale, paths, markers, req.query, + ); + + // prettier-ignore + return await respondImage( + options, item, z, x, y, bearing, pitch, parsedWidth, parsedHeight, scale, format, res, overlay, 'static', + ); + } else { + return res.sendStatus(404); + } +} + const existingFonts = {}; let maxScaleFactor = 2; @@ -639,252 +889,40 @@ export const serve_rendered = { const app = express().disable('x-powered-by'); app.get( - `/:id{/:tileSize}/:z/:x/:y{@:scale}{.:format}`, + `/:id{/:p1}/:p2/:p3/:p4{x:p5}{@:scale}{.:format}`, async (req, res, next) => { try { - console.log(req.params); - if ( - req.params.z === 'static' || - (req.params.tileSize && - req.params.tileSize != 256 && - req.params.tileSize != 512) - ) { - //workaroud for /:id/static{/:raw}{/:type}/:width{x:height}{@:scale}{.:format} - next('route'); - } else { - const item = repo[req.params.id]; - if (!item) { - return res.sendStatus(404); + const { p2 } = req.params; + if (p2 === 'static') { + // Route to static if p2 is static + if (options.serveStaticMaps !== false) { + return handleStaticRequest( + options, + repo, + req, + res, + next, + maxScaleFactor, + ); } - - const modifiedSince = req.get('if-modified-since'); - const cc = req.get('cache-control'); - if (modifiedSince && (!cc || cc.indexOf('no-cache') === -1)) { - if (new Date(item.lastModified) <= new Date(modifiedSince)) { - return res.sendStatus(304); - } - } - - const z = req.params.z | 0; - const x = req.params.x | 0; - const y = req.params.y | 0; - const scale = parseScale(req.params.scale, maxScaleFactor); - const format = req.params.format; - const tileSize = parseInt(req.params.tileSize, 10) || 256; - if ( - scale == null || - z < 0 || - x < 0 || - y < 0 || - z > 22 || - x >= Math.pow(2, z) || - y >= Math.pow(2, z) - ) { - return res.status(404).send('Out of bounds'); - } - - const tileCenter = mercator.ll( - [ - ((x + 0.5) / (1 << z)) * (256 << z), - ((y + 0.5) / (1 << z)) * (256 << z), - ], - z, - ); - - // prettier-ignore - return await respondImage( - options, item, z, tileCenter[0], tileCenter[1], 0, 0, tileSize, tileSize, scale, format, res, - ); + return res.sendStatus(404); } + + return handleTileRequest( + options, + repo, + req, + res, + next, + maxScaleFactor, + ); } catch (e) { console.log(e); - next('route'); + return next(e); } }, ); - if (options.serveStaticMaps !== false) { - app.get( - `/:id/static{/:raw}{/:type}/:width{x:height}{@:scale}{.:format}`, - async (req, res, next) => { - try { - const item = repo[req.params.id]; - console.log(req.params); - const format = req.params.format; - const w = parseInt(req.params.width) || 512; - const h = parseInt(req.params.height) || 512; - const scale = parseScale(req.params.scale, maxScaleFactor); - let raw = req.params.raw !== undefined; - let type = req.params.type; - if (!type) { - //workaround for type when raw is not set - type = req.params.raw; - raw = false; - } - - if (!item || !type || !format || !scale) { - return res.sendStatus(404); - } - - const staticTypeMatch = type.match(staticTypeRegex); - console.log(staticTypeMatch.groups); - if (staticTypeMatch.groups.lon) { - // Center Based Static Image - const z = staticTypeMatch.groups.zoom; - let x = staticTypeMatch.groups.lon; - let y = staticTypeMatch.groups.lat; - const bearing = staticTypeMatch.groups.bearing; - const pitch = staticTypeMatch.groups.pitch; - - if (z < 0) { - return res.status(404).send('Invalid zoom'); - } - - const transformer = raw - ? mercator.inverse.bind(mercator) - : item.dataProjWGStoInternalWGS; - - if (transformer) { - const ll = transformer([x, y]); - x = ll[0]; - y = ll[1]; - } - - const paths = extractPathsFromQuery(req.query, transformer); - const markers = extractMarkersFromQuery( - req.query, - options, - transformer, - ); - - // prettier-ignore - const overlay = await renderOverlay( - z, x, y, bearing, pitch, w, h, scale, paths, markers, req.query, - ); - - // prettier-ignore - return await respondImage( - options, item, z, x, y, bearing, pitch, w, h, scale, format, res, overlay, 'static', - ); - } else if (staticTypeMatch.groups.minx) { - // Area Based Static Image - const bbox = [ - +staticTypeMatch.groups.minx, - +staticTypeMatch.groups.miny, - +staticTypeMatch.groups.maxx, - +staticTypeMatch.groups.maxx, - ]; - let center = [(bbox[0] + bbox[2]) / 2, (bbox[1] + bbox[3]) / 2]; - - const transformer = raw - ? mercator.inverse.bind(mercator) - : item.dataProjWGStoInternalWGS; - - if (transformer) { - const minCorner = transformer(bbox.slice(0, 2)); - const maxCorner = transformer(bbox.slice(2)); - bbox[0] = minCorner[0]; - bbox[1] = minCorner[1]; - bbox[2] = maxCorner[0]; - bbox[3] = maxCorner[1]; - center = transformer(center); - } - - const z = calcZForBBox(bbox, w, h, req.query); - const x = center[0]; - const y = center[1]; - const bearing = 0; - const pitch = 0; - - const paths = extractPathsFromQuery(req.query, transformer); - const markers = extractMarkersFromQuery( - req.query, - options, - transformer, - ); - - // prettier-ignore - const overlay = await renderOverlay( - z, x, y, bearing, pitch, w, h, scale, paths, markers, req.query, - ); - - // prettier-ignore - return await respondImage( - options, item, z, x, y, bearing, pitch, w, h, scale, format, res, overlay, 'static', - ); - } else if (staticTypeMatch.groups.auto) { - // Area Static Image - const bearing = 0; - const pitch = 0; - - const transformer = raw - ? mercator.inverse.bind(mercator) - : item.dataProjWGStoInternalWGS; - - const paths = extractPathsFromQuery(req.query, transformer); - const markers = extractMarkersFromQuery( - req.query, - options, - transformer, - ); - - // Extract coordinates from markers - const markerCoordinates = []; - for (const marker of markers) { - markerCoordinates.push(marker.location); - } - - // Create array with coordinates from markers and path - const coords = [].concat(paths.flat()).concat(markerCoordinates); - - // Check if we have at least one coordinate to calculate a bounding box - if (coords.length < 1) { - return res.status(400).send('No coordinates provided'); - } - - const bbox = [Infinity, Infinity, -Infinity, -Infinity]; - for (const pair of coords) { - bbox[0] = Math.min(bbox[0], pair[0]); - bbox[1] = Math.min(bbox[1], pair[1]); - bbox[2] = Math.max(bbox[2], pair[0]); - bbox[3] = Math.max(bbox[3], pair[1]); - } - - const bbox_ = mercator.convert(bbox, '900913'); - const center = mercator.inverse([ - (bbox_[0] + bbox_[2]) / 2, - (bbox_[1] + bbox_[3]) / 2, - ]); - - // Calculate zoom level - const maxZoom = parseFloat(req.query.maxzoom); - let z = calcZForBBox(bbox, w, h, req.query); - if (maxZoom > 0) { - z = Math.min(z, maxZoom); - } - - const x = center[0]; - const y = center[1]; - - // prettier-ignore - const overlay = await renderOverlay( - z, x, y, bearing, pitch, w, h, scale, paths, markers, req.query, - ); - - // prettier-ignore - return await respondImage( - options, item, z, x, y, bearing, pitch, w, h, scale, format, res, overlay, 'static', - ); - } else { - return res.sendStatus(404); - } - } catch (e) { - next('route'); - } - }, - ); - } - app.get('{/:tileSize}/:id.json', (req, res, next) => { const item = repo[req.params.id]; if (!item) { From 8dc380944b9382d6e9fef9676269fc6050f6d960 Mon Sep 17 00:00:00 2001 From: acalcutt Date: Sun, 29 Dec 2024 22:17:46 -0500 Subject: [PATCH 012/152] add allowedTileSizes and option Co-Authored-By: Andrew Calcutt --- src/server.js | 21 ++++++++++++++++----- 1 file changed, 16 insertions(+), 5 deletions(-) diff --git a/src/server.js b/src/server.js index 3da2ffb..f0e336a 100644 --- a/src/server.js +++ b/src/server.js @@ -16,7 +16,12 @@ import morgan from 'morgan'; import { serve_data } from './serve_data.js'; import { serve_style } from './serve_style.js'; import { serve_font } from './serve_font.js'; -import { getTileUrls, getPublicUrl, isValidHttpUrl } from './utils.js'; +import { + getTileUrls, + getPublicUrl, + isValidHttpUrl, + allowedOptions, +} from './utils.js'; import { fileURLToPath } from 'url'; const __filename = fileURLToPath(import.meta.url); @@ -99,6 +104,10 @@ async function start(opts) { ? path.resolve(paths.root, paths.files) : path.resolve(__dirname, '../public/files'); + const allowedTileSizes = allowedOptions(['256', '512'], { + defaultValue: options.tileSize || 256, + }); + const startupPromises = []; for (const type of Object.keys(paths)) { @@ -389,17 +398,19 @@ async function start(opts) { } app.get('{/:tileSize}/rendered.json', (req, res, next) => { - const tileSize = parseInt(req.params.tileSize, 10) || undefined; - res.send(addTileJSONs([], req, 'rendered', tileSize)); + const tileSize = allowedTileSizes(req.params['tileSize']); + res.send(addTileJSONs([], req, 'rendered', parseInt(tileSize, 10))); }); + app.get('/data.json', (req, res) => { res.send(addTileJSONs([], req, 'data', undefined)); }); + app.get('{/:tileSize}/index.json', (req, res, next) => { - const tileSize = parseInt(req.params.tileSize, 10) || undefined; + const tileSize = allowedTileSizes(req.params['tileSize']); res.send( addTileJSONs( - addTileJSONs([], req, 'rendered', tileSize), + addTileJSONs([], req, 'rendered', parseInt(tileSize, 10)), req, 'data', undefined, From ab20e81751404c9ec2b1ca06723f89550fff3099 Mon Sep 17 00:00:00 2001 From: acalcutt Date: Sun, 29 Dec 2024 22:18:02 -0500 Subject: [PATCH 013/152] cleanup error responses Co-Authored-By: Andrew Calcutt --- src/serve_style.js | 69 +++++++++++++++++++++++----------------------- src/utils.js | 16 +++++++++-- 2 files changed, 49 insertions(+), 36 deletions(-) diff --git a/src/serve_style.js b/src/serve_style.js index d0c2e3b..fbdda7c 100644 --- a/src/serve_style.js +++ b/src/serve_style.js @@ -19,7 +19,7 @@ const allowedSpriteFormats = allowedOptions(['png', 'json']); */ function allowedSpriteScales(scale) { if (!scale) return ''; - const match = scale.match(/(\d+)x/); + const match = scale.match(/(\d+)x/); const parsedScale = match ? parseInt(match[1], 10) : 1; return '@' + Math.min(parsedScale, 3) + 'x'; } @@ -64,42 +64,43 @@ export const serve_style = { }); app.get(`/:id/:sprite{/:spriteID}{@:scale}{.:format}`, (req, res, next) => { - console.log(req.params); const { spriteID = 'default', id, format } = req.params; const scale = allowedSpriteScales(req.params.scale); - try { - if ( - !allowedSpriteFormats(format) || - ((id == 256 || id == 512) && format === 'json') - ) { - //Workaround for {/:tileSize}/:id.json' and /styles/:id/wmts.xml - next('route'); - } else { - const item = repo[id]; - const sprite = item.spritePaths.find( - (sprite) => sprite.id === spriteID, - ); - if (sprite) { - const filename = `${sprite.path + scale}.${format}`; - return fs.readFile(filename, (err, data) => { - if (err) { - console.log('Sprite load error:', filename); - return res.sendStatus(404); - } else { - if (format === 'json') - res.header('Content-type', 'application/json'); - if (format === 'png') res.header('Content-type', 'image/png'); - return res.send(data); - } - }); - } else { - return res.status(400).send('Bad Sprite ID or Scale'); - } - } - } catch (e) { - console.log(e); - next('route'); + + if ( + !allowedSpriteFormats(format) || + ((id == 256 || id == 512) && format === 'json') + ) { + //Workaround for {/:tileSize}/:id.json' and /styles/:id/wmts.xml + return next('route'); } + + const item = repo[id]; + if (!item) { + return res.sendStatus(404); // Ensure item exists first to prevent errors + } + + const sprite = item.spritePaths.find((sprite) => sprite.id === spriteID); + if (!sprite) { + return res.status(400).send('Bad Sprite ID or Scale'); + } + + const spriteScale = allowedSpriteScales(scale); + const filename = `${sprite.path}${spriteScale}.${format}`; + + fs.readFile(filename, (err, data) => { + if (err) { + console.error('Sprite load error: %s, Error: %s', filename, err); + return res.sendStatus(404); + } + + if (format === 'json') { + res.header('Content-type', 'application/json'); + } else if (format === 'png') { + res.header('Content-type', 'image/png'); + } + return res.send(data); + }); }); return app; diff --git a/src/utils.js b/src/utils.js index 5d01b5f..cd3d17c 100644 --- a/src/utils.js +++ b/src/utils.js @@ -184,14 +184,23 @@ export function fixTileJSONCenter(tileJSON) { function getFontPbf(allowedFonts, fontPath, name, range, fallbacks) { return new Promise((resolve, reject) => { if (!allowedFonts || (allowedFonts[name] && fallbacks)) { + if (!name || typeof name !== 'string' || name.trim() === '') { + console.error('ERROR: Invalid font name: %s', name); + return reject('Invalid font name'); + } + if (!/^\d+-\d+$/.test(range)) { + console.error('ERROR: Invalid range: %s', range); + return reject('Invalid range'); + } const filename = path.join(fontPath, name, `${range}.pbf`); if (!fallbacks) { fallbacks = clone(allowedFonts || {}); } delete fallbacks[name]; + // eslint-disable-next-line security/detect-non-literal-fs-filename fs.readFile(filename, (err, data) => { if (err) { - console.error(`ERROR: Font not found: ${name}`); + console.error('ERROR: Font not found: %s, Error: %s', filename, err); if (fallbacks && Object.keys(fallbacks).length) { let fallbackName; @@ -207,7 +216,10 @@ function getFontPbf(allowedFonts, fontPath, name, range, fallbacks) { } } - console.error(`ERROR: Trying to use ${fallbackName} as a fallback`); + console.error( + `ERROR: Trying to use %s as a fallback`, + fallbackName, + ); delete fallbacks[fallbackName]; getFontPbf(null, fontPath, fallbackName, range, fallbacks).then( resolve, From 9f3a7cec4a70220c1931ec7324b6894cce0a14c4 Mon Sep 17 00:00:00 2001 From: acalcutt Date: Mon, 30 Dec 2024 00:22:14 -0500 Subject: [PATCH 014/152] fix /style/id.json with next('route') Co-Authored-By: Andrew Calcutt --- src/server.js | 39 +++++++++++++++++++++++---------------- 1 file changed, 23 insertions(+), 16 deletions(-) diff --git a/src/server.js b/src/server.js index f0e336a..9b6ca07 100644 --- a/src/server.js +++ b/src/server.js @@ -445,33 +445,40 @@ async function start(opts) { try { const content = fs.readFileSync(templateFile, 'utf-8'); const compiled = handlebars.compile(content.toString()); - app.get(urlPath, (req, res) => { - console.log(`Serving template at path: ${urlPath}`); + app.get(urlPath, (req, res, next) => { + if (opts.verbose) { + console.log(`Serving template at path: ${urlPath}`); + } let data = {}; if (dataGetter) { data = dataGetter(req); - if (!data) { - console.error(`Data getter for ${template} returned null`); - return res.status(404).send('Not found'); + if (data) { + data['server_version'] = + `${packageJson.name} v${packageJson.version}`; + data['public_url'] = opts.publicUrl || '/'; + data['is_light'] = isLight; + data['key_query_part'] = req.query.key + ? `key=${encodeURIComponent(req.query.key)}&` + : ''; + data['key_query'] = req.query.key + ? `?key=${encodeURIComponent(req.query.key)}` + : ''; + if (template === 'wmts') res.set('Content-Type', 'text/xml'); + return res.status(200).send(compiled(data)); + } else { + if (opts.verbose) { + console.log(`Forwarding request for: ${urlPath} to next route`); + } + next('route'); } } - data['server_version'] = `${packageJson.name} v${packageJson.version}`; - data['public_url'] = opts.publicUrl || '/'; - data['is_light'] = isLight; - data['key_query_part'] = req.query.key - ? `key=${encodeURIComponent(req.query.key)}&` - : ''; - data['key_query'] = req.query.key - ? `?key=${encodeURIComponent(req.query.key)}` - : ''; - if (template === 'wmts') res.set('Content-Type', 'text/xml'); - return res.status(200).send(compiled(data)); }); } catch (err) { console.error(`Error reading template file: ${templateFile}`, err); throw new Error(`Template not found: ${err.message}`); //throw an error so that the server doesnt start } } + serveTemplate('/', 'index', (req) => { let styles = {}; for (const id of Object.keys(serving.styles || {})) { From 1f0ee0dd7b78dd885630f226eb6df4c5885aebd1 Mon Sep 17 00:00:00 2001 From: acalcutt Date: Mon, 30 Dec 2024 00:23:33 -0500 Subject: [PATCH 015/152] improve sprite path Co-Authored-By: Andrew Calcutt --- src/serve_style.js | 18 +++++------------- 1 file changed, 5 insertions(+), 13 deletions(-) diff --git a/src/serve_style.js b/src/serve_style.js index fbdda7c..c26eb94 100644 --- a/src/serve_style.js +++ b/src/serve_style.js @@ -63,21 +63,13 @@ export const serve_style = { return res.send(styleJSON_); }); - app.get(`/:id/:sprite{/:spriteID}{@:scale}{.:format}`, (req, res, next) => { + app.get(`/:id/sprite{/:spriteID}{@:scale}{.:format}`, (req, res, next) => { const { spriteID = 'default', id, format } = req.params; - const scale = allowedSpriteScales(req.params.scale); - - if ( - !allowedSpriteFormats(format) || - ((id == 256 || id == 512) && format === 'json') - ) { - //Workaround for {/:tileSize}/:id.json' and /styles/:id/wmts.xml - return next('route'); - } + const spriteScale = allowedSpriteScales(req.params.scale); const item = repo[id]; - if (!item) { - return res.sendStatus(404); // Ensure item exists first to prevent errors + if (!item || !allowedSpriteFormats(format)) { + return res.sendStatus(404); } const sprite = item.spritePaths.find((sprite) => sprite.id === spriteID); @@ -85,9 +77,9 @@ export const serve_style = { return res.status(400).send('Bad Sprite ID or Scale'); } - const spriteScale = allowedSpriteScales(scale); const filename = `${sprite.path}${spriteScale}.${format}`; + // eslint-disable-next-line security/detect-non-literal-fs-filename fs.readFile(filename, (err, data) => { if (err) { console.error('Sprite load error: %s, Error: %s', filename, err); From d255cdc14046e7093eaccfbee16b185a713ce415 Mon Sep 17 00:00:00 2001 From: acalcutt Date: Mon, 30 Dec 2024 00:24:03 -0500 Subject: [PATCH 016/152] add parseFloadts around zxy Co-Authored-By: Andrew Calcutt --- src/serve_data.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/serve_data.js b/src/serve_data.js index 6cff9c3..d5e61d0 100644 --- a/src/serve_data.js +++ b/src/serve_data.js @@ -33,9 +33,9 @@ export const serve_data = { return res.sendStatus(404); } const tileJSONFormat = item.tileJSON.format; - const z = req.params.z | 0; - const x = req.params.x | 0; - const y = req.params.y | 0; + const z = parseFloat(req.params.z) | 0; + const x = parseFloat(req.params.x) | 0; + const y = parseFloat(req.params.y) | 0; let format = req.params.format; if (format === options.pbfAlias) { format = 'pbf'; From c4adfa84a60b324f43116313301e50cbb52ebdef Mon Sep 17 00:00:00 2001 From: acalcutt Date: Mon, 30 Dec 2024 02:39:47 -0500 Subject: [PATCH 017/152] simplify server_data Co-Authored-By: Andrew Calcutt --- src/serve_data.js | 178 +++++++++++++++++++--------------------------- 1 file changed, 72 insertions(+), 106 deletions(-) diff --git a/src/serve_data.js b/src/serve_data.js index d5e61d0..0a8bfae 100644 --- a/src/serve_data.js +++ b/src/serve_data.js @@ -33,9 +33,13 @@ export const serve_data = { return res.sendStatus(404); } const tileJSONFormat = item.tileJSON.format; - const z = parseFloat(req.params.z) | 0; - const x = parseFloat(req.params.x) | 0; - const y = parseFloat(req.params.y) | 0; + const z = parseInt(req.params.z, 10); + const x = parseInt(req.params.x, 10); + const y = parseInt(req.params.y, 10); + if (isNaN(z) || isNaN(x) || isNaN(y)) { + return res.status(404).send('Invalid Tile'); + } + let format = req.params.format; if (format === options.pbfAlias) { format = 'pbf'; @@ -48,7 +52,6 @@ export const serve_data = { } if ( z < item.tileJSON.minzoom || - 0 || x < 0 || y < 0 || z > item.tileJSON.maxzoom || @@ -57,113 +60,76 @@ export const serve_data = { ) { return res.status(404).send('Out of bounds'); } + + let getTile; if (item.sourceType === 'pmtiles') { - let tileinfo = await getPMtilesTile(item.source, z, x, y); - if (tileinfo == undefined || tileinfo.data == undefined) { - return res.status(404).send('Not found'); - } else { - let data = tileinfo.data; - let headers = tileinfo.header; - if (tileJSONFormat === 'pbf') { - if (options.dataDecoratorFunc) { - data = options.dataDecoratorFunc(id, 'data', data, z, x, y); - } - } - if (format === 'pbf') { - headers['Content-Type'] = 'application/x-protobuf'; - } else if (format === 'geojson') { - headers['Content-Type'] = 'application/json'; - const tile = new VectorTile(new Pbf(data)); - const geojson = { - type: 'FeatureCollection', - features: [], - }; - for (const layerName in tile.layers) { - const layer = tile.layers[layerName]; - for (let i = 0; i < layer.length; i++) { - const feature = layer.feature(i); - const featureGeoJSON = feature.toGeoJSON(x, y, z); - featureGeoJSON.properties.layer = layerName; - geojson.features.push(featureGeoJSON); - } - } - data = JSON.stringify(geojson); - } - delete headers['ETag']; // do not trust the tile ETag -- regenerate - headers['Content-Encoding'] = 'gzip'; - res.set(headers); - - data = await gzipP(data); - - return res.status(200).send(data); - } + const tileinfo = await getPMtilesTile(item.source, z, x, y); + if (!tileinfo?.data) return res.status(204).send(); + getTile = { data: tileinfo.data, header: tileinfo.header }; } else if (item.sourceType === 'mbtiles') { - item.source.getTile(z, x, y, async (err, data, headers) => { - let isGzipped; - if (err) { - if (/does not exist/.test(err.message)) { - return res.status(204).send(); - } else { - return res - .status(500) - .header('Content-Type', 'text/plain') - .send(err.message); - } - } else { - if (data == null) { - return res.status(404).send('Not found'); - } else { - if (tileJSONFormat === 'pbf') { - isGzipped = - data.slice(0, 2).indexOf(Buffer.from([0x1f, 0x8b])) === 0; - if (options.dataDecoratorFunc) { - if (isGzipped) { - data = await gunzipP(data); - isGzipped = false; - } - data = options.dataDecoratorFunc(id, 'data', data, z, x, y); - } + try { + getTile = await new Promise((resolve, reject) => { + item.source.getTile(z, x, y, (err, tileData, tileHeader) => { + if (err) { + return /does not exist/.test(err.message) + ? resolve(null) + : reject(err); } - if (format === 'pbf') { - headers['Content-Type'] = 'application/x-protobuf'; - } else if (format === 'geojson') { - headers['Content-Type'] = 'application/json'; - - if (isGzipped) { - data = await gunzipP(data); - isGzipped = false; - } - - const tile = new VectorTile(new Pbf(data)); - const geojson = { - type: 'FeatureCollection', - features: [], - }; - for (const layerName in tile.layers) { - const layer = tile.layers[layerName]; - for (let i = 0; i < layer.length; i++) { - const feature = layer.feature(i); - const featureGeoJSON = feature.toGeoJSON(x, y, z); - featureGeoJSON.properties.layer = layerName; - geojson.features.push(featureGeoJSON); - } - } - data = JSON.stringify(geojson); - } - delete headers['ETag']; // do not trust the tile ETag -- regenerate - headers['Content-Encoding'] = 'gzip'; - res.set(headers); - - if (!isGzipped) { - data = await gzipP(data); - } - - return res.status(200).send(data); - } - } - }); + resolve({ data: tileData, header: tileHeader }); + }); + }); + } catch (e) { + return res.status(500).send(e.message); + } } + if (getTile == null) return res.status(204).send(); + + let data = getTile.data; + let headers = getTile.header; + let isGzipped = data.slice(0, 2).indexOf(Buffer.from([0x1f, 0x8b])) === 0; + + if (tileJSONFormat === 'pbf') { + if (options.dataDecoratorFunc) { + if (isGzipped) { + data = await gunzipP(data); + isGzipped = false; + } + data = options.dataDecoratorFunc(id, 'data', data, z, x, y); + } + } + + if (format === 'pbf') { + headers['Content-Type'] = 'application/x-protobuf'; + } else if (format === 'geojson') { + headers['Content-Type'] = 'application/json'; + const tile = new VectorTile(new Pbf(data)); + const geojson = { + type: 'FeatureCollection', + features: [], + }; + for (const layerName in tile.layers) { + const layer = tile.layers[layerName]; + for (let i = 0; i < layer.length; i++) { + const feature = layer.feature(i); + const featureGeoJSON = feature.toGeoJSON(x, y, z); + featureGeoJSON.properties.layer = layerName; + geojson.features.push(featureGeoJSON); + } + } + data = JSON.stringify(geojson); + } + console.log(headers); + delete headers['ETag']; // do not trust the tile ETag -- regenerate + headers['Content-Encoding'] = 'gzip'; + res.set(headers); + + if (!isGzipped) { + data = await gzipP(data); + } + + return res.status(200).send(data); }); + app.get('/:id.json', (req, res) => { const item = repo[req.params.id]; if (!item) { From 3aaab828cb51c5cdd9b61caf5631d38c24d9a7fe Mon Sep 17 00:00:00 2001 From: acalcutt Date: Mon, 30 Dec 2024 11:12:20 -0500 Subject: [PATCH 018/152] move tile fetch and add fix verbose logging Co-Authored-By: Andrew Calcutt --- src/serve_data.js | 47 ++++++-------- src/serve_rendered.js | 140 ++++++++++++++++-------------------------- src/serve_style.js | 5 +- src/server.js | 8 +-- src/utils.js | 29 +++++++++ 5 files changed, 108 insertions(+), 121 deletions(-) diff --git a/src/serve_data.js b/src/serve_data.js index 0a8bfae..81e2574 100644 --- a/src/serve_data.js +++ b/src/serve_data.js @@ -8,7 +8,12 @@ import express from 'express'; import Pbf from 'pbf'; import { VectorTile } from '@mapbox/vector-tile'; -import { fixTileJSONCenter, getTileUrls, isValidHttpUrl } from './utils.js'; +import { + fixTileJSONCenter, + getTileUrls, + isValidHttpUrl, + fetchTileData, +} from './utils.js'; import { getPMtilesInfo, getPMtilesTile, @@ -61,31 +66,17 @@ export const serve_data = { return res.status(404).send('Out of bounds'); } - let getTile; - if (item.sourceType === 'pmtiles') { - const tileinfo = await getPMtilesTile(item.source, z, x, y); - if (!tileinfo?.data) return res.status(204).send(); - getTile = { data: tileinfo.data, header: tileinfo.header }; - } else if (item.sourceType === 'mbtiles') { - try { - getTile = await new Promise((resolve, reject) => { - item.source.getTile(z, x, y, (err, tileData, tileHeader) => { - if (err) { - return /does not exist/.test(err.message) - ? resolve(null) - : reject(err); - } - resolve({ data: tileData, header: tileHeader }); - }); - }); - } catch (e) { - return res.status(500).send(e.message); - } - } - if (getTile == null) return res.status(204).send(); + const fetchTile = await fetchTileData( + item.source, + item.sourceType, + z, + x, + y, + ); + if (fetchTile == null) return res.status(204).send(); - let data = getTile.data; - let headers = getTile.header; + let data = fetchTile.data; + let headers = fetchTile.headers; let isGzipped = data.slice(0, 2).indexOf(Buffer.from([0x1f, 0x8b])) === 0; if (tileJSONFormat === 'pbf') { @@ -118,7 +109,6 @@ export const serve_data = { } data = JSON.stringify(geojson); } - console.log(headers); delete headers['ETag']; // do not trust the tile ETag -- regenerate headers['Content-Encoding'] = 'gzip'; res.set(headers); @@ -159,10 +149,11 @@ export const serve_data = { * @param {object} repo Repository object. * @param {object} params Parameters object. * @param {string} id ID of the data source. - * @param {string} publicUrl Public URL of the data. + * @param {object} programOpts - An object containing the program options * @returns {Promise} */ - add: async function (options, repo, params, id, publicUrl) { + add: async function (options, repo, params, id, programOpts) { + const { publicUrl } = programOpts; let inputFile; let inputType; if (params.pmtiles) { diff --git a/src/serve_rendered.js b/src/serve_rendered.js index 3964947..944b841 100644 --- a/src/serve_rendered.js +++ b/src/serve_rendered.js @@ -33,12 +33,9 @@ import { getTileUrls, isValidHttpUrl, fixTileJSONCenter, + fetchTileData, } from './utils.js'; -import { - openPMtiles, - getPMtilesInfo, - getPMtilesTile, -} from './pmtiles_adapter.js'; +import { openPMtiles, getPMtilesInfo } from './pmtiles_adapter.js'; import { renderOverlay, renderWatermark, renderAttribution } from './render.js'; import fsp from 'node:fs/promises'; import { existsP, gunzipP } from './promises.js'; @@ -951,11 +948,11 @@ export const serve_rendered = { * @param {object} repo Repository object. * @param {object} params Parameters object. * @param {string} id ID of the item. - * @param {string} publicUrl Public URL. + * @param {object} programOpts - An object containing the program options * @param {Function} dataResolver Function to resolve data. * @returns {Promise} */ - add: async function (options, repo, params, id, publicUrl, dataResolver) { + add: async function (options, repo, params, id, programOpts, dataResolver) { const map = { renderers: [], renderersStatic: [], @@ -963,6 +960,8 @@ export const serve_rendered = { sourceTypes: {}, }; + const { publicUrl, verbose } = programOpts; + let styleJSON; /** * Creates a pool of renderers. @@ -1023,88 +1022,57 @@ export const serve_rendered = { const y = parts[5].split('.')[0] | 0; const format = parts[5].split('.')[1]; - if (sourceType === 'pmtiles') { - let tileinfo = await getPMtilesTile(source, z, x, y); - let data = tileinfo.data; - let headers = tileinfo.header; - if (data == undefined) { - if (options.verbose) - console.log('MBTiles error, serving empty', err); - createEmptyResponse( - sourceInfo.format, - sourceInfo.color, - callback, + const fetchTile = await fetchTileData( + source, + sourceType, + z, + x, + y, + ); + if (fetchTile == null) { + if (verbose) { + console.log( + 'fetchTile error on %s, serving empty response', + req.url, ); - return; - } else { - const response = {}; - response.data = data; - if (headers['Last-Modified']) { - response.modified = new Date(headers['Last-Modified']); - } - - if (format === 'pbf') { - if (options.dataDecoratorFunc) { - response.data = options.dataDecoratorFunc( - sourceId, - 'data', - response.data, - z, - x, - y, - ); - } - } - - callback(null, response); } - } else if (sourceType === 'mbtiles') { - source.getTile(z, x, y, async (err, data, headers) => { - if (err) { - if (options.verbose) - console.log('MBTiles error, serving empty', err); - createEmptyResponse( - sourceInfo.format, - sourceInfo.color, - callback, - ); - return; - } - - const response = {}; - if (headers['Last-Modified']) { - response.modified = new Date(headers['Last-Modified']); - } - - if (format === 'pbf') { - try { - response.data = await gunzipP(data); - } catch (err) { - console.log( - 'Skipping incorrect header for tile mbtiles://%s/%s/%s/%s.pbf', - id, - z, - x, - y, - ); - } - if (options.dataDecoratorFunc) { - response.data = options.dataDecoratorFunc( - sourceId, - 'data', - response.data, - z, - x, - y, - ); - } - } else { - response.data = data; - } - - callback(null, response); - }); + createEmptyResponse( + sourceInfo.format, + sourceInfo.color, + callback, + ); + return; } + + const response = {}; + response.data = fetchTile.data; + let headers = fetchTile.headers; + let isGzipped = + response.data.slice(0, 2).indexOf(Buffer.from([0x1f, 0x8b])) === + 0; + + if (headers['Last-Modified']) { + response.modified = new Date(headers['Last-Modified']); + } + + if (format === 'pbf') { + if (isGzipped) { + response.data = await gunzipP(response.data); + isGzipped = false; + } + if (options.dataDecoratorFunc) { + response.data = options.dataDecoratorFunc( + sourceId, + 'data', + response.data, + z, + x, + y, + ); + } + } + + callback(null, response); } else if (protocol === 'http' || protocol === 'https') { try { const response = await axios.get(req.url, { diff --git a/src/serve_style.js b/src/serve_style.js index c26eb94..5a74782 100644 --- a/src/serve_style.js +++ b/src/serve_style.js @@ -112,7 +112,7 @@ export const serve_style = { * @param {object} repo Repository object. * @param {object} params Parameters object containing style path * @param {string} id ID of the style. - * @param {string} publicUrl Public URL of the data. + * @param {object} programOpts - An object containing the program options * @param {Function} reportTiles Function for reporting tile sources. * @param {Function} reportFont Function for reporting font usage * @returns {boolean} true if add is succesful @@ -122,10 +122,11 @@ export const serve_style = { repo, params, id, - publicUrl, + programOpts, reportTiles, reportFont, ) { + const { publicUrl } = programOpts; const styleFile = path.resolve(options.paths.styles, params.style); let styleFileData; diff --git a/src/server.js b/src/server.js index 9b6ca07..a49fbac 100644 --- a/src/server.js +++ b/src/server.js @@ -193,7 +193,7 @@ async function start(opts) { serving.styles, item, id, - opts.publicUrl, + opts, (styleSourceId, protocol) => { let dataItemId; for (const id of Object.keys(data)) { @@ -250,7 +250,7 @@ async function start(opts) { serving.rendered, item, id, - opts.publicUrl, + opts, function dataResolver(styleSourceId) { let fileType; let inputFile; @@ -301,9 +301,7 @@ async function start(opts) { ); continue; } - startupPromises.push( - serve_data.add(options, serving.data, item, id, opts.publicUrl), - ); + startupPromises.push(serve_data.add(options, serving.data, item, id, opts)); } if (options.serveAllStyles) { fs.readdir(options.paths.styles, { withFileTypes: true }, (err, files) => { diff --git a/src/utils.js b/src/utils.js index cd3d17c..bf2d15f 100644 --- a/src/utils.js +++ b/src/utils.js @@ -6,6 +6,7 @@ import fs from 'node:fs'; import clone from 'clone'; import { combine } from '@jsse/pbfont'; import { existsP } from './promises.js'; +import { getPMtilesTile } from './pmtiles_adapter.js'; /** * Restrict user input to an allowed set of options. @@ -310,3 +311,31 @@ export function isValidHttpUrl(string) { return url.protocol === 'http:' || url.protocol === 'https:'; } + +/** + * Fetches tile data from either PMTiles or MBTiles source. + * @param {object} source - The source object, which may contain a mbtiles object, or pmtiles object. + * @param {string} sourceType - The source type, which should be `pmtiles` or `mbtiles` + * @param {number} z - The zoom level. + * @param {number} x - The x coordinate of the tile. + * @param {number} y - The y coordinate of the tile. + * @returns {Promise} - A promise that resolves to an object with data and headers or null if no data is found. + */ +export async function fetchTileData(source, sourceType, z, x, y) { + if (sourceType === 'pmtiles') { + return await new Promise(async (resolve) => { + const tileinfo = await getPMtilesTile(source, z, x, y); + if (!tileinfo?.data) return resolve(null); + resolve({ data: tileinfo.data, headers: tileinfo.header }); + }); + } else if (sourceType === 'mbtiles') { + return await new Promise((resolve) => { + source.getTile(z, x, y, (err, tileData, tileHeader) => { + if (err) { + return resolve(null); + } + resolve({ data: tileData, headers: tileHeader }); + }); + }); + } +} From 848f7c57af190bf8f7b15ea39797acdf48de3c69 Mon Sep 17 00:00:00 2001 From: acalcutt Date: Mon, 30 Dec 2024 11:22:30 -0500 Subject: [PATCH 019/152] add Handling request to verbose logging Co-Authored-By: Andrew Calcutt --- src/serve_rendered.js | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/serve_rendered.js b/src/serve_rendered.js index 944b841..1f298b1 100644 --- a/src/serve_rendered.js +++ b/src/serve_rendered.js @@ -984,7 +984,9 @@ export const serve_rendered = { ratio, request: async (req, callback) => { const protocol = req.url.split(':')[0]; - // console.log('Handling request:', req); + if (verbose) { + console.log('Handling request:', req); + } if (protocol === 'sprites') { const dir = options.paths[protocol]; const file = decodeURIComponent(req.url).substring( From a2bc9f0cce7fe975da1b61daad9ac8c24de2bf50 Mon Sep 17 00:00:00 2001 From: Miko <39791814+okimiko@users.noreply.github.com> Date: Thu, 2 Jan 2025 20:03:03 +0100 Subject: [PATCH 020/152] Feature: Terrain Preview and simple Elevation Query (#1425) * add terrain preview and elevation link * add elevation api for terrain tiles * add documentation for elevation api * applied lint:js:fix * Add `test-docker` for test execution in docker build environment * Fix too greedy router expression * Add pmtile support Co-authored-by: Andrew Calcutt * add encoding param to pmtile section * add map controls Co-authored-by: Andrew Calcutt * remove not needed check * fix possible float usage in thumbnail url * update readme for encoding option * add better link name --------- Co-authored-by: Miko Co-authored-by: Andrew Calcutt --- docs/config.rst | 21 ++++- docs/endpoints.rst | 8 ++ package.json | 1 + public/resources/index.css | 2 +- public/templates/data.tmpl | 150 ++++++++++++++++++++--------- public/templates/index.tmpl | 25 +++-- src/serve_data.js | 182 ++++++++++++++++++++++++++++++++++++ src/server.js | 43 ++++++--- src/utils.js | 10 +- 9 files changed, 375 insertions(+), 67 deletions(-) diff --git a/docs/config.rst b/docs/config.rst index d556dfa..cb84e46 100644 --- a/docs/config.rst +++ b/docs/config.rst @@ -238,9 +238,26 @@ For example:: } } - The data source does not need to be specified here unless you explicitly want to serve the raw data. +Serving Terrain Tiles +-------------- + +If you serve terrain tiles, it is possible to configure an ``encoding`` with ``mapbox`` or ``terrarium`` to enable a terrain preview mode and the ``elevation`` api for the ``data`` endpoint. + +For example:: + + "data": { + "terrain1": { + "mbtiles": "terrain1.mbtiles", + "encoding": "mapbox" + }, + "terrain2": { + "pmtiles": "terrain2.pmtiles" + "encoding": "terrarium" + } + } + Referencing local files from style JSON ======================================= @@ -283,7 +300,7 @@ For example:: "source3": { "url": "pmtiles://https://foo.lan/source3.pmtiles", "type": "vector" - }, + } } Alternatively, you can use ``pmtiles://{source2}`` to reference existing data object from the config. diff --git a/docs/endpoints.rst b/docs/endpoints.rst index 93230a6..12f1acf 100644 --- a/docs/endpoints.rst +++ b/docs/endpoints.rst @@ -100,6 +100,14 @@ Source data * TileJSON at ``/data/{id}.json`` + * If terrain mbtile data is served and ``encoding`` is configured (see config) the elevation can be queried + + * by ``/data/{id}/elevation/{z}/{x}/{y}`` for the tile + + * or ``/data/{id}/elevation/{z}/{long}/{lat}`` for the coordinate + + * the result will be a json object like ``{"z":7,"x":68,"y":45,"red":134,"green":66,"blue":0,"latitude":11.84069,"longitude":46.04798,"elevation":1602}`` + Static files =========== * Static files are served at ``/files/{filename}`` diff --git a/package.json b/package.json index ea5e2fb..14f94ae 100644 --- a/package.json +++ b/package.json @@ -7,6 +7,7 @@ "type": "module", "scripts": { "test": "mocha test/**.js --timeout 10000 --exit", + "test-docker": "xvfb-run npm test", "lint:yml": "yamllint --schema=CORE_SCHEMA *.{yml,yaml}", "lint:js": "npm run lint:eslint && npm run lint:prettier", "lint:js:fix": "npm run lint:eslint:fix && npm run lint:prettier:fix", diff --git a/public/resources/index.css b/public/resources/index.css index d18b638..fd5f21e 100644 --- a/public/resources/index.css +++ b/public/resources/index.css @@ -114,7 +114,7 @@ section { } .details h3 { font-size: 18px; - margin-top: 25px; + margin-top: 5px; } .details p { padding: 0; diff --git a/public/templates/data.tmpl b/public/templates/data.tmpl index 59b0d3b..e4ac4e0 100644 --- a/public/templates/data.tmpl +++ b/public/templates/data.tmpl @@ -4,20 +4,25 @@ {{name}} - TileServer GL - {{#is_vector}} + {{#use_maplibre}} - {{/is_vector}} - {{^is_vector}} + {{/use_maplibre}} + {{^use_maplibre}} @@ -37,23 +42,22 @@ background-image: url({{public_url}}images/marker-icon.png{{&key_query}}); } - {{/is_vector}} + {{/use_maplibre}} - {{#is_vector}} + {{#use_maplibre}}

{{name}}

+ {{^is_terrain}}

+  {{/is_terrain}}
   
-  {{/is_vector}}
-  {{^is_vector}}
+  {{/use_maplibre}}
+  {{^use_maplibre}}
   

{{name}}

- {{/is_vector}} + {{/use_maplibre}} diff --git a/public/templates/index.tmpl b/public/templates/index.tmpl index d4d5be7..acf094f 100644 --- a/public/templates/index.tmpl +++ b/public/templates/index.tmpl @@ -6,10 +6,15 @@ TileServer GL - Server for vector and raster maps with GL styles + {{/use_maplibre}} {{^use_maplibre}} @@ -69,6 +71,7 @@ }; {{/is_terrain}} {{#is_terrain}} + var style = { version: 8, sources: { @@ -86,11 +89,11 @@ "terrain": { "source": "terrain" }, - layers: [ + "layers": [ { "id": "background", "paint": { - {{^if is_terrainrgb}} + {{#if is_terrainrgb}} "background-color": "hsl(190, 99%, 63%)" {{else}} "background-color": "hsl(0, 100%, 25%)" @@ -118,24 +121,34 @@ maxPitch: 85, style: style }); + map.addControl(new maplibregl.NavigationControl({ visualizePitch: true, showZoom: true, showCompass: true })); {{#is_terrain}} + map.addControl( new maplibregl.TerrainControl({ source: "terrain", }) ); + + map.addControl( + new ElevationInfoControl({ + url: "{{public_url}}data/{{id}}/elevation/{z}/{x}/{y}" + }) + ); {{/is_terrain}} {{^is_terrain}} + var inspect = new MaplibreInspect({ showInspectMap: true, showInspectButton: false }); map.addControl(inspect); + map.on('styledata', function() { var layerList = document.getElementById('layerList'); layerList.innerHTML = ''; diff --git a/src/serve_data.js b/src/serve_data.js index 1936da6..b2a0f5a 100644 --- a/src/serve_data.js +++ b/src/serve_data.js @@ -208,51 +208,49 @@ export const serve_data = { return res.status(404).send(JSON.stringify(tileJSON)); } - const TILE_SIZE = 256; - let tileCenter; + const TILE_SIZE = tileJSON.tileSize || 512; + let bbox; let xy; + var zoom = z; if (Number.isInteger(x) && Number.isInteger(y)) { const intX = parseInt(req.params.x, 10); const intY = parseInt(req.params.y, 10); if ( - z < tileJSON.minzoom || - z > tileJSON.maxzoom || + zoom < tileJSON.minzoom || + zoom > tileJSON.maxzoom || intX < 0 || intY < 0 || - intX >= Math.pow(2, z) || - intY >= Math.pow(2, z) + intX >= Math.pow(2, zoom) || + intY >= Math.pow(2, zoom) ) { return res.status(404).send('Out of bounds'); } xy = [intX, intY]; - tileCenter = new SphericalMercator().bbox(intX, intY, z); + bbox = new SphericalMercator().bbox(intX, intY, zoom); } else { - if ( - z < tileJSON.minzoom || - z > tileJSON.maxzoom || - x < -180 || - y < -90 || - x > 180 || - y > 90 - ) { - return res.status(404).send('Out of bounds'); + //no zoom limit with coordinates + if (zoom < tileJSON.minzoom) { + zoom = tileJSON.minzoom; + } + if (zoom > tileJSON.maxzoom) { + zoom = tileJSON.maxzoom; } - tileCenter = [y, x, y + 0.1, x + 0.1]; - const { minX, minY } = new SphericalMercator().xyz(tileCenter, z); + bbox = [x, y, x + 0.1, y + 0.1]; + const { minX, minY } = new SphericalMercator().xyz(bbox, zoom); xy = [minX, minY]; } let data; if (sourceType === 'pmtiles') { - const tileinfo = await getPMtilesTile(source, z, x, y); + const tileinfo = await getPMtilesTile(source, zoom, xy[0], xy[1]); if (!tileinfo?.data) return res.status(204).send(); data = tileinfo.data; } else { data = await new Promise((resolve, reject) => { - source.getTile(z, xy[0], xy[1], (err, tileData) => { + source.getTile(zoom, xy[0], xy[1], (err, tileData) => { if (err) { return /does not exist/.test(err.message) ? resolve(null) @@ -271,29 +269,43 @@ export const serve_data = { const canvas = createCanvas(TILE_SIZE, TILE_SIZE); const context = canvas.getContext('2d'); context.drawImage(image, 0, 0); - const imgdata = context.getImageData(0, 0, TILE_SIZE, TILE_SIZE); - const arrayWidth = imgdata.width; - const arrayHeight = imgdata.height; - const bytesPerPixel = 4; + const long = bbox[0]; + const lat = bbox[1]; - const xPixel = Math.floor(xy[0]); - const yPixel = Math.floor(xy[1]); + // calculate pixel coordinate of tile, + // see https://developers.google.com/maps/documentation/javascript/examples/map-coordinates + let siny = Math.sin((lat * Math.PI) / 180); + // Truncating to 0.9999 effectively limits latitude to 89.189. This is + // about a third of a tile past the edge of the world tile. + siny = Math.min(Math.max(siny, -0.9999), 0.9999); + + const xWorld = TILE_SIZE * (0.5 + long / 360); + const yWorld = + TILE_SIZE * + (0.5 - Math.log((1 + siny) / (1 - siny)) / (4 * Math.PI)); + + const scale = 1 << zoom; + + const xTile = Math.floor((xWorld * scale) / TILE_SIZE); + const yTile = Math.floor((yWorld * scale) / TILE_SIZE); + + const xPixel = Math.floor(xWorld * scale) - xTile * TILE_SIZE; + const yPixel = Math.floor(yWorld * scale) - yTile * TILE_SIZE; if ( xPixel < 0 || yPixel < 0 || - xPixel >= arrayWidth || - yPixel >= arrayHeight + xPixel >= TILE_SIZE || + yPixel >= TILE_SIZE ) { - return reject('Out of bounds Pixel'); + return reject('Pixel is out of bounds'); } - const index = (yPixel * arrayWidth + xPixel) * bytesPerPixel; - - const red = imgdata.data[index]; - const green = imgdata.data[index + 1]; - const blue = imgdata.data[index + 2]; + const imgdata = context.getImageData(xPixel, yPixel, 1, 1); + const red = imgdata.data[0]; + const green = imgdata.data[1]; + const blue = imgdata.data[2]; let elevation; if (encoding === 'mapbox') { @@ -307,14 +319,14 @@ export const serve_data = { resolve( res.status(200).send({ - z, + z: zoom, x: xy[0], y: xy[1], red, green, blue, - latitude: tileCenter[0], - longitude: tileCenter[1], + latitude: lat, + longitude: long, elevation, }), ); @@ -406,6 +418,7 @@ export const serve_data = { const metadata = await getPMtilesInfo(source); tileJSON['encoding'] = params['encoding']; + tileJSON['tileSize'] = params['tileSize']; tileJSON['name'] = id; tileJSON['format'] = 'pbf'; Object.assign(tileJSON, metadata); @@ -427,6 +440,7 @@ export const serve_data = { const info = await mbw.getInfo(); source = mbw.getMbTiles(); tileJSON['encoding'] = params['encoding']; + tileJSON['tileSize'] = params['tileSize']; tileJSON['name'] = id; tileJSON['format'] = 'pbf'; From 930e5719c78c8adb18026729584968be5b2296c7 Mon Sep 17 00:00:00 2001 From: acalcutt Date: Fri, 10 Jan 2025 15:15:05 -0500 Subject: [PATCH 103/152] make font regex less restrictive --- src/utils.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/utils.js b/src/utils.js index 099acdf..aa1e691 100644 --- a/src/utils.js +++ b/src/utils.js @@ -260,7 +260,7 @@ export function readFile(filename) { */ async function getFontPbf(allowedFonts, fontPath, name, range, fallbacks) { if (!allowedFonts || (allowedFonts[name] && fallbacks)) { - const fontMatch = name?.match(/^[\w\s-]+$/); + const fontMatch = name?.match(/^[\p{L}\p{N} \-\.~!*\'()@&=+,#$\[\]]+$/u); const sanitizedName = fontMatch?.[0] || 'invalid'; if (!name || typeof name !== 'string' || name.trim() === '' || !fontMatch) { console.error( From 03b1c31083e905b4abc9d4ffa4f62bccaeed1889 Mon Sep 17 00:00:00 2001 From: acalcutt Date: Fri, 10 Jan 2025 15:27:24 -0500 Subject: [PATCH 104/152] fix regex error --- src/utils.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/utils.js b/src/utils.js index aa1e691..5dab80a 100644 --- a/src/utils.js +++ b/src/utils.js @@ -260,7 +260,7 @@ export function readFile(filename) { */ async function getFontPbf(allowedFonts, fontPath, name, range, fallbacks) { if (!allowedFonts || (allowedFonts[name] && fallbacks)) { - const fontMatch = name?.match(/^[\p{L}\p{N} \-\.~!*\'()@&=+,#$\[\]]+$/u); + const fontMatch = name?.match(/^[\p{L}\p{N} \-\.~!*'()@&=+,#$\[\]]+$/u); const sanitizedName = fontMatch?.[0] || 'invalid'; if (!name || typeof name !== 'string' || name.trim() === '' || !fontMatch) { console.error( From 8412c0842b53195db2a0e1305e4da6d5fa333ef5 Mon Sep 17 00:00:00 2001 From: Miko Date: Sun, 13 Oct 2024 21:27:40 +0200 Subject: [PATCH 105/152] add terrain preview and elevation link --- public/templates/data.tmpl | 2 -- 1 file changed, 2 deletions(-) diff --git a/public/templates/data.tmpl b/public/templates/data.tmpl index 70d3a22..3b67b12 100644 --- a/public/templates/data.tmpl +++ b/public/templates/data.tmpl @@ -71,7 +71,6 @@ }; {{/is_terrain}} {{#is_terrain}} - var style = { version: 8, sources: { @@ -148,7 +147,6 @@ showInspectButton: false }); map.addControl(inspect); - map.on('styledata', function() { var layerList = document.getElementById('layerList'); layerList.innerHTML = ''; From 02210f0bb80a5287f70bbd9bebbe66eaad6bdf81 Mon Sep 17 00:00:00 2001 From: Miko Date: Sun, 13 Oct 2024 22:46:00 +0200 Subject: [PATCH 106/152] add documentation for elevation api --- docs/config.rst | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/docs/config.rst b/docs/config.rst index cb84e46..4020026 100644 --- a/docs/config.rst +++ b/docs/config.rst @@ -275,6 +275,10 @@ For example:: "source1": { "url": "mbtiles://source1.mbtiles", "type": "vector" + }, + "terrain": { + "url": "mbtiles://terrain.mbtiles", + "encoding": "mapbox" } } @@ -282,6 +286,8 @@ Alternatively, you can use ``mbtiles://{source1}`` to reference existing data ob In this case, the server will look into the ``config.json`` to determine what file to use by data id. For the config above, this is equivalent to ``mbtiles://source1.mbtiles``. +If you use terrain tiles, it is possible to configure an ``encoding`` with ``mapbox`` or ``terrarium`` to enable a terrain preview mode and the ``elevation`` api for the ``data`` endpoint. + PMTiles ------- From 4d33886f72f671c3059bc7c7db4e6011258639b3 Mon Sep 17 00:00:00 2001 From: Miko <39791814+okimiko@users.noreply.github.com> Date: Sun, 22 Dec 2024 08:07:21 +0100 Subject: [PATCH 107/152] add map controls Co-authored-by: Andrew Calcutt --- public/templates/data.tmpl | 8 -------- 1 file changed, 8 deletions(-) diff --git a/public/templates/data.tmpl b/public/templates/data.tmpl index 3b67b12..8c1c388 100644 --- a/public/templates/data.tmpl +++ b/public/templates/data.tmpl @@ -120,25 +120,17 @@ maxPitch: 85, style: style }); - map.addControl(new maplibregl.NavigationControl({ visualizePitch: true, showZoom: true, showCompass: true })); {{#is_terrain}} - map.addControl( new maplibregl.TerrainControl({ source: "terrain", }) ); - - map.addControl( - new ElevationInfoControl({ - url: "{{public_url}}data/{{id}}/elevation/{z}/{x}/{y}" - }) - ); {{/is_terrain}} {{^is_terrain}} From 1f1fe49ec974c9b00cc16cf2b6d52ae5ef726dfc Mon Sep 17 00:00:00 2001 From: Miko Date: Wed, 25 Dec 2024 21:49:48 +0100 Subject: [PATCH 108/152] update readme for encoding option --- docs/config.rst | 6 ------ 1 file changed, 6 deletions(-) diff --git a/docs/config.rst b/docs/config.rst index 4020026..cb84e46 100644 --- a/docs/config.rst +++ b/docs/config.rst @@ -275,10 +275,6 @@ For example:: "source1": { "url": "mbtiles://source1.mbtiles", "type": "vector" - }, - "terrain": { - "url": "mbtiles://terrain.mbtiles", - "encoding": "mapbox" } } @@ -286,8 +282,6 @@ Alternatively, you can use ``mbtiles://{source1}`` to reference existing data ob In this case, the server will look into the ``config.json`` to determine what file to use by data id. For the config above, this is equivalent to ``mbtiles://source1.mbtiles``. -If you use terrain tiles, it is possible to configure an ``encoding`` with ``mapbox`` or ``terrarium`` to enable a terrain preview mode and the ``elevation`` api for the ``data`` endpoint. - PMTiles ------- From a10555e2eea8a43cad57f2e8e90881a30c51d8b6 Mon Sep 17 00:00:00 2001 From: acalcutt Date: Sat, 21 Dec 2024 14:37:17 -0500 Subject: [PATCH 109/152] test 1 - not working --- package-lock.json | 6 ++ package.json | 1 + src/contour.js | 205 ++++++++++++++++++++++++++++++++++++++++++++++ src/serve_data.js | 2 + 4 files changed, 214 insertions(+) create mode 100644 src/contour.js diff --git a/package-lock.json b/package-lock.json index 1332f77..687ff75 100644 --- a/package-lock.json +++ b/package-lock.json @@ -28,6 +28,7 @@ "express": "5.0.1", "handlebars": "4.7.8", "http-shutdown": "1.2.2", + "maplibre-contour": "^0.1.0", "morgan": "1.10.0", "pbf": "4.0.1", "pmtiles": "3.0.7", @@ -5550,6 +5551,11 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/maplibre-contour": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/maplibre-contour/-/maplibre-contour-0.1.0.tgz", + "integrity": "sha512-H8muT7JWYE4oLbFv7L2RSbIM1NOu5JxjA9P/TQqhODDnRChE8ENoDkQIWOKgfcKNU77ypLk2ggGoh4/pt4UPLA==" + }, "node_modules/media-typer": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-1.1.0.tgz", diff --git a/package.json b/package.json index db21a62..4c6bda2 100644 --- a/package.json +++ b/package.json @@ -37,6 +37,7 @@ "express": "5.0.1", "handlebars": "4.7.8", "http-shutdown": "1.2.2", + "maplibre-contour": "^0.1.0", "morgan": "1.10.0", "pbf": "4.0.1", "pmtiles": "3.0.7", diff --git a/src/contour.js b/src/contour.js new file mode 100644 index 0000000..c2046f7 --- /dev/null +++ b/src/contour.js @@ -0,0 +1,205 @@ +import sharp from 'sharp'; +import mlcontour from '../node_modules/maplibre-contour/dist/index.mjs'; +import { getPMtilesTile } from './pmtiles_adapter.js'; + +/** + * Manages local DEM (Digital Elevation Model) data using maplibre-contour. + */ +export class LocalDemManager { + /** + * Creates a new LocalDemManager instance. + * @param {string} encoding - The encoding type for the DEM data. + * @param {number} maxzoom - The maximum zoom level for the DEM data. + * @param {object} source - The source object that contains either pmtiles or mbtiles. + * @param {'pmtiles' | 'mbtiles'} sourceType - The type of data source + * @param {Function} [extractZXYFromUrlTrimFunction] - The function to extract the zxy from the url. + * @param {Function} [GetTileFunction] - the function that returns a tile from the pmtiles object. + */ + constructor( + encoding, + maxzoom, + source, + sourceType, + GetTileFunction, + extractZXYFromUrlTrimFunction, + ) { + this.encoding = encoding; + this.maxzoom = maxzoom; + this.source = source; + this.sourceType = sourceType; + this.getTile = GetTileFunction || this.GetTile.bind(this); + this.extractZXYFromUrlTrim = + extractZXYFromUrlTrimFunction || this.extractZXYFromUrlTrim.bind(this); + + this.manager = new mlcontour.LocalDemManager({ + demUrlPattern: '/{z}/{x}/{y}', + cacheSize: 100, + encoding: this.encoding, + maxzoom: this.maxzoom, + timeoutMs: 10000, + decodeImage: this.getImageData.bind(this), + getTile: this.getTileFunction.bind(this), + }); + } + + /** + * Processes image data from a blob. + * @param {Blob} blob - The image data as a Blob. + * @param {AbortController} abortController - An AbortController to cancel the image processing. + * @returns {Promise} - A Promise that resolves with the processed image data, or null if aborted. + * @throws {Error} If an error occurs during image processing. + */ + async getImageData(blob, abortController) { + try { + if (Boolean(abortController?.signal?.aborted)) return null; // Check for abort signal. + + const buffer = await blob.arrayBuffer(); + const image = sharp(Buffer.from(buffer)); + const metadata = await image.metadata(); + if (Boolean(abortController?.signal?.aborted)) return null; // Check for abort signal. + + const { data, info } = await image + .raw() + .toBuffer({ resolveWithObject: true }); + if (Boolean(abortController?.signal?.aborted)) return null; // Check for abort signal. + + const parsed = mlcontour.decodeParsedImage( + info.width, + info.height, + this.encoding, + data, + ); + if (Boolean(abortController?.signal?.aborted)) return null; // Check for abort signal. + + return parsed; + } catch (error) { + console.error('Error processing image:', error); + throw error; // Rethrow to handle upstream + // return null; // Or handle error gracefully + } + } + + /** + * Fetches a tile using the provided url and abortController + * @param {string} url - The url that should be used to fetch the tile. + * @param {AbortController} abortController - An AbortController to cancel the request. + * @returns {Promise<{data: Blob, expires: undefined, cacheControl: undefined}>} A promise that resolves with the response data. + * @throws {Error} If an error occurs fetching or processing the tile. + */ + async GetTile(url, abortController) { + console.log(url); + const $zxy = this.extractZXYFromUrlTrim(url); + if (!$zxy) { + throw new Error(`Could not extract zxy from $`); + } + if (abortController.signal.aborted) { + return null; // Or throw an error + } + + try { + let data; + if (this.sourceType === 'pmtiles') { + let zxyTile; + if (this.getPMtilesTile) { + zxyTile = await getPMtilesTile( + this.source, + $zxy.z, + $zxy.x, + $zxy.y, + abortController, + ); + } else { + if (abortController.signal.aborted) { + console.log('pmtiles aborted in default'); + return null; + } + zxyTile = { + data: new Uint8Array([$zxy.z, $zxy.x, $zxy.y]), + }; + } + + if (!zxyTile || !zxyTile.data) { + throw new Error(`No tile returned for $`); + } + data = zxyTile.data; + } else { + data = await new Promise((resolve, reject) => { + this.source.getTile($zxy.z, $zxy.x, $zxy.y, (err, tileData) => { + if (err) { + return /does not exist/.test(err.message) + ? resolve(null) + : reject(err); + } + resolve(tileData); + }); + }); + } + + if (data == null) { + return null; + } + + if (!data) { + throw new Error(`No tile returned for $`); + } + + const blob = new Blob([data]); + return { + data: blob, + expires: undefined, + cacheControl: undefined, + }; + } catch (error) { + if (error.name === 'AbortError') { + console.log('fetch cancelled'); + return null; + } + throw error; // Rethrow for handling upstream + } + } + + /** + * Default implementation for extracting z,x,y from a url + * @param {string} url - The url to extract from + * @returns {{z: number, x: number, y:number} | null} Returns the z,x,y of the url, or null if can't extract + */ + extractZXYFromUrlTrim(url) { + // 1. Find the index of the last `/` + const lastSlashIndex = url.lastIndexOf('/'); + if (lastSlashIndex === -1) { + return null; // URL does not have any slashes + } + + const segments = url.split('/'); + if (segments.length <= 3) { + return null; + } + + const ySegment = segments[segments.length - 1]; + const xSegment = segments[segments.length - 2]; + const zSegment = segments[segments.length - 3]; + + const lastDotIndex = ySegment.lastIndexOf('.'); + const cleanedYSegment = + lastDotIndex === -1 ? ySegment : ySegment.substring(0, lastDotIndex); + + // 3. Attempt to parse segments as numbers + const z = parseInt(zSegment, 10); + const x = parseInt(xSegment, 10); + const y = parseInt(cleanedYSegment, 10); + + if (isNaN(z) || isNaN(x) || isNaN(y)) { + return null; // Conversion failed, invalid URL format + } + + return { z, x, y }; + } + + /** + * Get the underlying maplibre-contour LocalDemManager + * @returns {any} the underlying maplibre-contour LocalDemManager + */ + getManager() { + return this.manager; + } +} diff --git a/src/serve_data.js b/src/serve_data.js index cd2e6bb..f6687a4 100644 --- a/src/serve_data.js +++ b/src/serve_data.js @@ -11,6 +11,8 @@ import SphericalMercator from '@mapbox/sphericalmercator'; import { Image, createCanvas } from 'canvas'; import sharp from 'sharp'; +import { LocalDemManager } from './contour.js'; +import { fixTileJSONCenter, getTileUrls, isValidHttpUrl } from './utils.js'; import { fixTileJSONCenter, getTileUrls, From b95a20791f0df7b279c32aeec4581c8e4e5c82ff Mon Sep 17 00:00:00 2001 From: acalcutt Date: Sat, 21 Dec 2024 14:51:25 -0500 Subject: [PATCH 110/152] test 2 --- src/contour.js | 45 +++++++++++++++++++++++++++------------------ 1 file changed, 27 insertions(+), 18 deletions(-) diff --git a/src/contour.js b/src/contour.js index c2046f7..f968c1b 100644 --- a/src/contour.js +++ b/src/contour.js @@ -8,12 +8,12 @@ import { getPMtilesTile } from './pmtiles_adapter.js'; export class LocalDemManager { /** * Creates a new LocalDemManager instance. - * @param {string} encoding - The encoding type for the DEM data. - * @param {number} maxzoom - The maximum zoom level for the DEM data. - * @param {object} source - The source object that contains either pmtiles or mbtiles. + * @param encoding - The encoding type for the DEM data. + * @param maxzoom - The maximum zoom level for the DEM data. + * @param source - The source object that contains either pmtiles or mbtiles. * @param {'pmtiles' | 'mbtiles'} sourceType - The type of data source - * @param {Function} [extractZXYFromUrlTrimFunction] - The function to extract the zxy from the url. - * @param {Function} [GetTileFunction] - the function that returns a tile from the pmtiles object. + * @param [extractZXYFromUrlTrimFunction] - The function to extract the zxy from the url. + * @param [GetTileFunction] - the function that returns a tile from the pmtiles object. */ constructor( encoding, @@ -27,9 +27,8 @@ export class LocalDemManager { this.maxzoom = maxzoom; this.source = source; this.sourceType = sourceType; - this.getTile = GetTileFunction || this.GetTile.bind(this); - this.extractZXYFromUrlTrim = - extractZXYFromUrlTrimFunction || this.extractZXYFromUrlTrim.bind(this); + this._getTile = GetTileFunction; + this._extractZXYFromUrlTrim = extractZXYFromUrlTrimFunction; this.manager = new mlcontour.LocalDemManager({ demUrlPattern: '/{z}/{x}/{y}', @@ -42,12 +41,22 @@ export class LocalDemManager { }); } + get getTileFunction() { + return this._getTile ? this._getTile.bind(this) : this.GetTile.bind(this); + } + + get extractZXYFromUrlTrim() { + return this._extractZXYFromUrlTrim + ? this._extractZXYFromUrlTrim.bind(this) + : this._extractZXYFromUrlTrimFunction.bind(this); + } + /** * Processes image data from a blob. - * @param {Blob} blob - The image data as a Blob. - * @param {AbortController} abortController - An AbortController to cancel the image processing. + * @param blob - The image data as a Blob. + * @param abortController - An AbortController to cancel the image processing. * @returns {Promise} - A Promise that resolves with the processed image data, or null if aborted. - * @throws {Error} If an error occurs during image processing. + * @throws If an error occurs during image processing. */ async getImageData(blob, abortController) { try { @@ -81,10 +90,10 @@ export class LocalDemManager { /** * Fetches a tile using the provided url and abortController - * @param {string} url - The url that should be used to fetch the tile. - * @param {AbortController} abortController - An AbortController to cancel the request. + * @param url - The url that should be used to fetch the tile. + * @param abortController - An AbortController to cancel the request. * @returns {Promise<{data: Blob, expires: undefined, cacheControl: undefined}>} A promise that resolves with the response data. - * @throws {Error} If an error occurs fetching or processing the tile. + * @throws If an error occurs fetching or processing the tile. */ async GetTile(url, abortController) { console.log(url); @@ -100,7 +109,7 @@ export class LocalDemManager { let data; if (this.sourceType === 'pmtiles') { let zxyTile; - if (this.getPMtilesTile) { + if (getPMtilesTile) { zxyTile = await getPMtilesTile( this.source, $zxy.z, @@ -160,10 +169,10 @@ export class LocalDemManager { /** * Default implementation for extracting z,x,y from a url - * @param {string} url - The url to extract from + * @param url - The url to extract from * @returns {{z: number, x: number, y:number} | null} Returns the z,x,y of the url, or null if can't extract */ - extractZXYFromUrlTrim(url) { + _extractZXYFromUrlTrimFunction(url) { // 1. Find the index of the last `/` const lastSlashIndex = url.lastIndexOf('/'); if (lastSlashIndex === -1) { @@ -197,7 +206,7 @@ export class LocalDemManager { /** * Get the underlying maplibre-contour LocalDemManager - * @returns {any} the underlying maplibre-contour LocalDemManager + * @returns the underlying maplibre-contour LocalDemManager */ getManager() { return this.manager; From cd4f162f27bfd955cc516c64ba9b5988e14fe4b3 Mon Sep 17 00:00:00 2001 From: acalcutt Date: Sat, 21 Dec 2024 15:11:00 -0500 Subject: [PATCH 111/152] test 3 --- src/contour.js | 92 ++++++++++++++++++++++---------------------------- 1 file changed, 41 insertions(+), 51 deletions(-) diff --git a/src/contour.js b/src/contour.js index f968c1b..dfc72c8 100644 --- a/src/contour.js +++ b/src/contour.js @@ -6,15 +6,6 @@ import { getPMtilesTile } from './pmtiles_adapter.js'; * Manages local DEM (Digital Elevation Model) data using maplibre-contour. */ export class LocalDemManager { - /** - * Creates a new LocalDemManager instance. - * @param encoding - The encoding type for the DEM data. - * @param maxzoom - The maximum zoom level for the DEM data. - * @param source - The source object that contains either pmtiles or mbtiles. - * @param {'pmtiles' | 'mbtiles'} sourceType - The type of data source - * @param [extractZXYFromUrlTrimFunction] - The function to extract the zxy from the url. - * @param [GetTileFunction] - the function that returns a tile from the pmtiles object. - */ constructor( encoding, maxzoom, @@ -51,26 +42,30 @@ export class LocalDemManager { : this._extractZXYFromUrlTrimFunction.bind(this); } - /** - * Processes image data from a blob. - * @param blob - The image data as a Blob. - * @param abortController - An AbortController to cancel the image processing. - * @returns {Promise} - A Promise that resolves with the processed image data, or null if aborted. - * @throws If an error occurs during image processing. - */ async getImageData(blob, abortController) { try { - if (Boolean(abortController?.signal?.aborted)) return null; // Check for abort signal. + if (Boolean(abortController?.signal?.aborted)) { + console.log('getImageData aborted early'); + return null; // Check for abort signal. + } const buffer = await blob.arrayBuffer(); const image = sharp(Buffer.from(buffer)); const metadata = await image.metadata(); - if (Boolean(abortController?.signal?.aborted)) return null; // Check for abort signal. + + if (Boolean(abortController?.signal?.aborted)) { + console.log('getImageData aborted after metadata'); + return null; // Check for abort signal. + } const { data, info } = await image .raw() .toBuffer({ resolveWithObject: true }); - if (Boolean(abortController?.signal?.aborted)) return null; // Check for abort signal. + + if (Boolean(abortController?.signal?.aborted)) { + console.log('getImageData aborted after raw'); + return null; // Check for abort signal. + } const parsed = mlcontour.decodeParsedImage( info.width, @@ -78,31 +73,28 @@ export class LocalDemManager { this.encoding, data, ); - if (Boolean(abortController?.signal?.aborted)) return null; // Check for abort signal. + + if (Boolean(abortController?.signal?.aborted)) { + console.log('getImageData aborted after parsing'); + return null; // Check for abort signal. + } return parsed; } catch (error) { console.error('Error processing image:', error); - throw error; // Rethrow to handle upstream - // return null; // Or handle error gracefully + throw error; } } - /** - * Fetches a tile using the provided url and abortController - * @param url - The url that should be used to fetch the tile. - * @param abortController - An AbortController to cancel the request. - * @returns {Promise<{data: Blob, expires: undefined, cacheControl: undefined}>} A promise that resolves with the response data. - * @throws If an error occurs fetching or processing the tile. - */ async GetTile(url, abortController) { - console.log(url); + console.log('GetTile called with URL:', url); // Debugging log const $zxy = this.extractZXYFromUrlTrim(url); if (!$zxy) { - throw new Error(`Could not extract zxy from $`); + throw new Error(`Could not extract zxy from ${url}`); } if (abortController.signal.aborted) { - return null; // Or throw an error + console.log('GetTile aborted before fetch'); + return null; } try { @@ -110,6 +102,7 @@ export class LocalDemManager { if (this.sourceType === 'pmtiles') { let zxyTile; if (getPMtilesTile) { + console.log('Fetching PMTile with getPMtilesTile, zxy:', $zxy); zxyTile = await getPMtilesTile( this.source, $zxy.z, @@ -119,19 +112,20 @@ export class LocalDemManager { ); } else { if (abortController.signal.aborted) { - console.log('pmtiles aborted in default'); + console.log('GetTile pmtiles aborted in default'); return null; } zxyTile = { data: new Uint8Array([$zxy.z, $zxy.x, $zxy.y]), }; } - if (!zxyTile || !zxyTile.data) { - throw new Error(`No tile returned for $`); + throw new Error(`No tile returned for ${url} PMTILE`); } data = zxyTile.data; + console.log('GetTile PMTiles data:', data); } else { + console.log('Fetching MBTile with getTile, zxy:', $zxy); data = await new Promise((resolve, reject) => { this.source.getTile($zxy.z, $zxy.x, $zxy.y, (err, tileData) => { if (err) { @@ -139,44 +133,45 @@ export class LocalDemManager { ? resolve(null) : reject(err); } + console.log('GetTile MBTiles data:', tileData); resolve(tileData); }); }); } if (data == null) { + console.log('GetTile data is null'); return null; } if (!data) { - throw new Error(`No tile returned for $`); + throw new Error(`No tile returned for ${url}`); } + console.log('Creating blob with data'); const blob = new Blob([data]); + console.log(blob); + + console.log('Returning blob from GetTile', blob); return { data: blob, expires: undefined, cacheControl: undefined, }; } catch (error) { + console.log('GetTile error', error); if (error.name === 'AbortError') { - console.log('fetch cancelled'); + console.log('fetch cancelled (GetTile)'); return null; } - throw error; // Rethrow for handling upstream + throw error; } } - /** - * Default implementation for extracting z,x,y from a url - * @param url - The url to extract from - * @returns {{z: number, x: number, y:number} | null} Returns the z,x,y of the url, or null if can't extract - */ _extractZXYFromUrlTrimFunction(url) { - // 1. Find the index of the last `/` const lastSlashIndex = url.lastIndexOf('/'); if (lastSlashIndex === -1) { - return null; // URL does not have any slashes + return null; } const segments = url.split('/'); @@ -192,22 +187,17 @@ export class LocalDemManager { const cleanedYSegment = lastDotIndex === -1 ? ySegment : ySegment.substring(0, lastDotIndex); - // 3. Attempt to parse segments as numbers const z = parseInt(zSegment, 10); const x = parseInt(xSegment, 10); const y = parseInt(cleanedYSegment, 10); if (isNaN(z) || isNaN(x) || isNaN(y)) { - return null; // Conversion failed, invalid URL format + return null; } return { z, x, y }; } - /** - * Get the underlying maplibre-contour LocalDemManager - * @returns the underlying maplibre-contour LocalDemManager - */ getManager() { return this.manager; } From fb73f53861bbe5e84132b84b1ca620167ed24c45 Mon Sep 17 00:00:00 2001 From: acalcutt Date: Sat, 21 Dec 2024 15:11:09 -0500 Subject: [PATCH 112/152] Revert "test 3" This reverts commit 0619a98d2b675a719f271ae64ecd5366898857fc. --- src/contour.js | 92 ++++++++++++++++++++++++++++---------------------- 1 file changed, 51 insertions(+), 41 deletions(-) diff --git a/src/contour.js b/src/contour.js index dfc72c8..f968c1b 100644 --- a/src/contour.js +++ b/src/contour.js @@ -6,6 +6,15 @@ import { getPMtilesTile } from './pmtiles_adapter.js'; * Manages local DEM (Digital Elevation Model) data using maplibre-contour. */ export class LocalDemManager { + /** + * Creates a new LocalDemManager instance. + * @param encoding - The encoding type for the DEM data. + * @param maxzoom - The maximum zoom level for the DEM data. + * @param source - The source object that contains either pmtiles or mbtiles. + * @param {'pmtiles' | 'mbtiles'} sourceType - The type of data source + * @param [extractZXYFromUrlTrimFunction] - The function to extract the zxy from the url. + * @param [GetTileFunction] - the function that returns a tile from the pmtiles object. + */ constructor( encoding, maxzoom, @@ -42,30 +51,26 @@ export class LocalDemManager { : this._extractZXYFromUrlTrimFunction.bind(this); } + /** + * Processes image data from a blob. + * @param blob - The image data as a Blob. + * @param abortController - An AbortController to cancel the image processing. + * @returns {Promise} - A Promise that resolves with the processed image data, or null if aborted. + * @throws If an error occurs during image processing. + */ async getImageData(blob, abortController) { try { - if (Boolean(abortController?.signal?.aborted)) { - console.log('getImageData aborted early'); - return null; // Check for abort signal. - } + if (Boolean(abortController?.signal?.aborted)) return null; // Check for abort signal. const buffer = await blob.arrayBuffer(); const image = sharp(Buffer.from(buffer)); const metadata = await image.metadata(); - - if (Boolean(abortController?.signal?.aborted)) { - console.log('getImageData aborted after metadata'); - return null; // Check for abort signal. - } + if (Boolean(abortController?.signal?.aborted)) return null; // Check for abort signal. const { data, info } = await image .raw() .toBuffer({ resolveWithObject: true }); - - if (Boolean(abortController?.signal?.aborted)) { - console.log('getImageData aborted after raw'); - return null; // Check for abort signal. - } + if (Boolean(abortController?.signal?.aborted)) return null; // Check for abort signal. const parsed = mlcontour.decodeParsedImage( info.width, @@ -73,28 +78,31 @@ export class LocalDemManager { this.encoding, data, ); - - if (Boolean(abortController?.signal?.aborted)) { - console.log('getImageData aborted after parsing'); - return null; // Check for abort signal. - } + if (Boolean(abortController?.signal?.aborted)) return null; // Check for abort signal. return parsed; } catch (error) { console.error('Error processing image:', error); - throw error; + throw error; // Rethrow to handle upstream + // return null; // Or handle error gracefully } } + /** + * Fetches a tile using the provided url and abortController + * @param url - The url that should be used to fetch the tile. + * @param abortController - An AbortController to cancel the request. + * @returns {Promise<{data: Blob, expires: undefined, cacheControl: undefined}>} A promise that resolves with the response data. + * @throws If an error occurs fetching or processing the tile. + */ async GetTile(url, abortController) { - console.log('GetTile called with URL:', url); // Debugging log + console.log(url); const $zxy = this.extractZXYFromUrlTrim(url); if (!$zxy) { - throw new Error(`Could not extract zxy from ${url}`); + throw new Error(`Could not extract zxy from $`); } if (abortController.signal.aborted) { - console.log('GetTile aborted before fetch'); - return null; + return null; // Or throw an error } try { @@ -102,7 +110,6 @@ export class LocalDemManager { if (this.sourceType === 'pmtiles') { let zxyTile; if (getPMtilesTile) { - console.log('Fetching PMTile with getPMtilesTile, zxy:', $zxy); zxyTile = await getPMtilesTile( this.source, $zxy.z, @@ -112,20 +119,19 @@ export class LocalDemManager { ); } else { if (abortController.signal.aborted) { - console.log('GetTile pmtiles aborted in default'); + console.log('pmtiles aborted in default'); return null; } zxyTile = { data: new Uint8Array([$zxy.z, $zxy.x, $zxy.y]), }; } + if (!zxyTile || !zxyTile.data) { - throw new Error(`No tile returned for ${url} PMTILE`); + throw new Error(`No tile returned for $`); } data = zxyTile.data; - console.log('GetTile PMTiles data:', data); } else { - console.log('Fetching MBTile with getTile, zxy:', $zxy); data = await new Promise((resolve, reject) => { this.source.getTile($zxy.z, $zxy.x, $zxy.y, (err, tileData) => { if (err) { @@ -133,45 +139,44 @@ export class LocalDemManager { ? resolve(null) : reject(err); } - console.log('GetTile MBTiles data:', tileData); resolve(tileData); }); }); } if (data == null) { - console.log('GetTile data is null'); return null; } if (!data) { - throw new Error(`No tile returned for ${url}`); + throw new Error(`No tile returned for $`); } - console.log('Creating blob with data'); const blob = new Blob([data]); - console.log(blob); - - console.log('Returning blob from GetTile', blob); return { data: blob, expires: undefined, cacheControl: undefined, }; } catch (error) { - console.log('GetTile error', error); if (error.name === 'AbortError') { - console.log('fetch cancelled (GetTile)'); + console.log('fetch cancelled'); return null; } - throw error; + throw error; // Rethrow for handling upstream } } + /** + * Default implementation for extracting z,x,y from a url + * @param url - The url to extract from + * @returns {{z: number, x: number, y:number} | null} Returns the z,x,y of the url, or null if can't extract + */ _extractZXYFromUrlTrimFunction(url) { + // 1. Find the index of the last `/` const lastSlashIndex = url.lastIndexOf('/'); if (lastSlashIndex === -1) { - return null; + return null; // URL does not have any slashes } const segments = url.split('/'); @@ -187,17 +192,22 @@ export class LocalDemManager { const cleanedYSegment = lastDotIndex === -1 ? ySegment : ySegment.substring(0, lastDotIndex); + // 3. Attempt to parse segments as numbers const z = parseInt(zSegment, 10); const x = parseInt(xSegment, 10); const y = parseInt(cleanedYSegment, 10); if (isNaN(z) || isNaN(x) || isNaN(y)) { - return null; + return null; // Conversion failed, invalid URL format } return { z, x, y }; } + /** + * Get the underlying maplibre-contour LocalDemManager + * @returns the underlying maplibre-contour LocalDemManager + */ getManager() { return this.manager; } From 088a5e88340823f27b9eb0c9acd8a1ec99fac9cd Mon Sep 17 00:00:00 2001 From: acalcutt Date: Sat, 21 Dec 2024 15:27:45 -0500 Subject: [PATCH 113/152] formatting --- src/contour.js | 49 +++++++++++++++++++++++-------------------------- 1 file changed, 23 insertions(+), 26 deletions(-) diff --git a/src/contour.js b/src/contour.js index f968c1b..5acebe7 100644 --- a/src/contour.js +++ b/src/contour.js @@ -8,12 +8,12 @@ import { getPMtilesTile } from './pmtiles_adapter.js'; export class LocalDemManager { /** * Creates a new LocalDemManager instance. - * @param encoding - The encoding type for the DEM data. - * @param maxzoom - The maximum zoom level for the DEM data. - * @param source - The source object that contains either pmtiles or mbtiles. - * @param {'pmtiles' | 'mbtiles'} sourceType - The type of data source - * @param [extractZXYFromUrlTrimFunction] - The function to extract the zxy from the url. - * @param [GetTileFunction] - the function that returns a tile from the pmtiles object. + * @param {string} encoding - The encoding type for the DEM data. + * @param {number} maxzoom - The maximum zoom level for the DEM data. + * @param {object} source - The source object that contains either pmtiles or mbtiles. + * @param {'pmtiles' | 'mbtiles'} sourceType - The type of data source + * @param {Function} [GetTileFunction] - the function that returns a tile from the pmtiles object. + * @param {Function} [extractZXYFromUrlTrimFunction] - The function to extract the zxy from the url. */ constructor( encoding, @@ -53,24 +53,24 @@ export class LocalDemManager { /** * Processes image data from a blob. - * @param blob - The image data as a Blob. - * @param abortController - An AbortController to cancel the image processing. + * @param {Blob} blob - The image data as a Blob. + * @param {AbortController} abortController - An AbortController to cancel the image processing. * @returns {Promise} - A Promise that resolves with the processed image data, or null if aborted. - * @throws If an error occurs during image processing. + * @throws If an error occurs during image processing. */ async getImageData(blob, abortController) { try { - if (Boolean(abortController?.signal?.aborted)) return null; // Check for abort signal. + if (Boolean(abortController?.signal?.aborted)) return null; const buffer = await blob.arrayBuffer(); const image = sharp(Buffer.from(buffer)); const metadata = await image.metadata(); - if (Boolean(abortController?.signal?.aborted)) return null; // Check for abort signal. + if (Boolean(abortController?.signal?.aborted)) return null; const { data, info } = await image .raw() .toBuffer({ resolveWithObject: true }); - if (Boolean(abortController?.signal?.aborted)) return null; // Check for abort signal. + if (Boolean(abortController?.signal?.aborted)) return null; const parsed = mlcontour.decodeParsedImage( info.width, @@ -78,22 +78,21 @@ export class LocalDemManager { this.encoding, data, ); - if (Boolean(abortController?.signal?.aborted)) return null; // Check for abort signal. + if (Boolean(abortController?.signal?.aborted)) return null; return parsed; } catch (error) { console.error('Error processing image:', error); - throw error; // Rethrow to handle upstream - // return null; // Or handle error gracefully + throw error; } } /** * Fetches a tile using the provided url and abortController - * @param url - The url that should be used to fetch the tile. - * @param abortController - An AbortController to cancel the request. + * @param {string} url - The url that should be used to fetch the tile. + * @param {AbortController} abortController - An AbortController to cancel the request. * @returns {Promise<{data: Blob, expires: undefined, cacheControl: undefined}>} A promise that resolves with the response data. - * @throws If an error occurs fetching or processing the tile. + * @throws If an error occurs fetching or processing the tile. */ async GetTile(url, abortController) { console.log(url); @@ -102,7 +101,7 @@ export class LocalDemManager { throw new Error(`Could not extract zxy from $`); } if (abortController.signal.aborted) { - return null; // Or throw an error + return null; } try { @@ -163,20 +162,19 @@ export class LocalDemManager { console.log('fetch cancelled'); return null; } - throw error; // Rethrow for handling upstream + throw error; } } /** * Default implementation for extracting z,x,y from a url - * @param url - The url to extract from + * @param {string} url - The url to extract from * @returns {{z: number, x: number, y:number} | null} Returns the z,x,y of the url, or null if can't extract */ _extractZXYFromUrlTrimFunction(url) { - // 1. Find the index of the last `/` const lastSlashIndex = url.lastIndexOf('/'); if (lastSlashIndex === -1) { - return null; // URL does not have any slashes + return null; } const segments = url.split('/'); @@ -192,13 +190,12 @@ export class LocalDemManager { const cleanedYSegment = lastDotIndex === -1 ? ySegment : ySegment.substring(0, lastDotIndex); - // 3. Attempt to parse segments as numbers const z = parseInt(zSegment, 10); const x = parseInt(xSegment, 10); const y = parseInt(cleanedYSegment, 10); if (isNaN(z) || isNaN(x) || isNaN(y)) { - return null; // Conversion failed, invalid URL format + return null; } return { z, x, y }; @@ -206,7 +203,7 @@ export class LocalDemManager { /** * Get the underlying maplibre-contour LocalDemManager - * @returns the underlying maplibre-contour LocalDemManager + * @returns {mlcontour.LocalDemManager} the underlying maplibre-contour LocalDemManager */ getManager() { return this.manager; From b65ea0524f46cab6232f47b3eaaed7f568c1f044 Mon Sep 17 00:00:00 2001 From: acalcutt Date: Sat, 21 Dec 2024 15:29:55 -0500 Subject: [PATCH 114/152] remove unuded metadata variable --- src/contour.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/contour.js b/src/contour.js index 5acebe7..ab769eb 100644 --- a/src/contour.js +++ b/src/contour.js @@ -64,7 +64,8 @@ export class LocalDemManager { const buffer = await blob.arrayBuffer(); const image = sharp(Buffer.from(buffer)); - const metadata = await image.metadata(); + await image.metadata(); + if (Boolean(abortController?.signal?.aborted)) return null; const { data, info } = await image From 5b753cafd10499bf6a8b315560e75550577a892c Mon Sep 17 00:00:00 2001 From: acalcutt Date: Sat, 21 Dec 2024 17:07:09 -0500 Subject: [PATCH 115/152] partially working --- public/templates/data.tmpl | 62 +++++++++++++++++++++++--------------- src/contour.js | 11 ++----- src/serve_data.js | 2 ++ 3 files changed, 43 insertions(+), 32 deletions(-) diff --git a/public/templates/data.tmpl b/public/templates/data.tmpl index 8c1c388..300cb28 100644 --- a/public/templates/data.tmpl +++ b/public/templates/data.tmpl @@ -71,6 +71,10 @@ }; {{/is_terrain}} {{#is_terrain}} + let baseUrl = window.location.origin; + console.log(baseUrl); + baseUrl = baseUrl + "/data/{{id}}/contour/{z}/{x}/{y}" + console.log(baseUrl); var style = { version: 8, sources: { @@ -83,35 +87,45 @@ "type": "raster-dem", "url": "{{public_url}}data/{{id}}.json", "encoding": "{{terrain_encoding}}" + }, + "contour": { + "type": "vector", + "tiles": [ baseUrl ], } }, "terrain": { "source": "terrain" }, - "layers": [ - { - "id": "background", - "paint": { - {{#if is_terrainrgb}} - "background-color": "hsl(190, 99%, 63%)" - {{else}} - "background-color": "hsl(0, 100%, 25%)" - {{/if}} - }, - "type": "background" - }, - { - "id": "hillshade", - "source": "hillshade", - "type": "hillshade", - "paint": { - "hillshade-shadow-color": "hsl(39, 21%, 33%)", - "hillshade-illumination-direction": 315, - "hillshade-exaggeration": 0.8 - } - } - ] - }; + "layers": [ + { + "id": "background", + "paint": { + "background-color": "hsl(190, 99%, 63%)" + }, + "type": "background" + }, + { + "id": "hillshade", + "source": "hillshade", + "type": "hillshade", + "paint": { + "hillshade-shadow-color": "hsl(39, 21%, 33%)", + "hillshade-illumination-direction": 315, + "hillshade-exaggeration": 0.8 + } + }, + { + "id": "contours", + "type": "line", + "source": "contour", + "source-layer": "contours", + "paint": { + "line-opacity": 0.5, + "line-width": ["match", ["get", "level"], 1, 1, 0.5] + } + } + ] + }; {{/is_terrain}} var map = new maplibregl.Map({ diff --git a/src/contour.js b/src/contour.js index ab769eb..a84530c 100644 --- a/src/contour.js +++ b/src/contour.js @@ -99,7 +99,7 @@ export class LocalDemManager { console.log(url); const $zxy = this.extractZXYFromUrlTrim(url); if (!$zxy) { - throw new Error(`Could not extract zxy from $`); + throw new Error(`Could not extract zxy from $url`); } if (abortController.signal.aborted) { return null; @@ -173,13 +173,8 @@ export class LocalDemManager { * @returns {{z: number, x: number, y:number} | null} Returns the z,x,y of the url, or null if can't extract */ _extractZXYFromUrlTrimFunction(url) { - const lastSlashIndex = url.lastIndexOf('/'); - if (lastSlashIndex === -1) { - return null; - } - - const segments = url.split('/'); - if (segments.length <= 3) { + const segments = url.split('/').filter(Boolean); // Split and remove empty segments + if (segments.length < 3) { return null; } diff --git a/src/serve_data.js b/src/serve_data.js index f6687a4..60b91b6 100644 --- a/src/serve_data.js +++ b/src/serve_data.js @@ -116,6 +116,8 @@ export const serve_data = { z, x, y, + { levels: [1000] }, + new AbortController(), ); } } From f7883a26ad93ebc14262d13fd09b63a07f1e07d2 Mon Sep 17 00:00:00 2001 From: acalcutt Date: Sat, 21 Dec 2024 18:18:57 -0500 Subject: [PATCH 116/152] test 4 --- package-lock.json | 9 +++++++++ package.json | 1 + src/contour.js | 21 +++++---------------- 3 files changed, 15 insertions(+), 16 deletions(-) diff --git a/package-lock.json b/package-lock.json index 687ff75..0380ebb 100644 --- a/package-lock.json +++ b/package-lock.json @@ -32,6 +32,7 @@ "morgan": "1.10.0", "pbf": "4.0.1", "pmtiles": "3.0.7", + "pngjs": "^7.0.0", "proj4": "2.12.1", "sanitize-filename": "1.6.3", "sharp": "0.33.5", @@ -6887,6 +6888,14 @@ "fflate": "^0.8.0" } }, + "node_modules/pngjs": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/pngjs/-/pngjs-7.0.0.tgz", + "integrity": "sha512-LKWqWJRhstyYo9pGvgor/ivk2w94eSjE3RGVuzLGlr3NmD8bf7RcYGze1mNdEHRP6TRP6rMuDHk5t44hnTRyow==", + "engines": { + "node": ">=14.19.0" + } + }, "node_modules/prebuild-install": { "version": "7.1.2", "resolved": "https://registry.npmjs.org/prebuild-install/-/prebuild-install-7.1.2.tgz", diff --git a/package.json b/package.json index 4c6bda2..ffd207d 100644 --- a/package.json +++ b/package.json @@ -41,6 +41,7 @@ "morgan": "1.10.0", "pbf": "4.0.1", "pmtiles": "3.0.7", + "pngjs": "^7.0.0", "proj4": "2.12.1", "sanitize-filename": "1.6.3", "sharp": "0.33.5", diff --git a/src/contour.js b/src/contour.js index a84530c..10fef25 100644 --- a/src/contour.js +++ b/src/contour.js @@ -1,6 +1,7 @@ import sharp from 'sharp'; import mlcontour from '../node_modules/maplibre-contour/dist/index.mjs'; import { getPMtilesTile } from './pmtiles_adapter.js'; +import { PNG } from 'pngjs'; /** * Manages local DEM (Digital Elevation Model) data using maplibre-contour. @@ -60,27 +61,15 @@ export class LocalDemManager { */ async getImageData(blob, abortController) { try { - if (Boolean(abortController?.signal?.aborted)) return null; - const buffer = await blob.arrayBuffer(); - const image = sharp(Buffer.from(buffer)); - await image.metadata(); - - if (Boolean(abortController?.signal?.aborted)) return null; - - const { data, info } = await image - .raw() - .toBuffer({ resolveWithObject: true }); - if (Boolean(abortController?.signal?.aborted)) return null; - + const png = PNG.sync.read(Buffer.from(buffer)); const parsed = mlcontour.decodeParsedImage( - info.width, - info.height, + png.width, + png.height, this.encoding, - data, + png.data, ); if (Boolean(abortController?.signal?.aborted)) return null; - return parsed; } catch (error) { console.error('Error processing image:', error); From d4c2ce1e4d314c3de6cb9ff92471870a03a676f4 Mon Sep 17 00:00:00 2001 From: acalcutt Date: Sat, 21 Dec 2024 19:53:34 -0500 Subject: [PATCH 117/152] get sharp image generation working --- src/contour.js | 32 ++++++++++++++++++++++++-------- 1 file changed, 24 insertions(+), 8 deletions(-) diff --git a/src/contour.js b/src/contour.js index 10fef25..d9cb768 100644 --- a/src/contour.js +++ b/src/contour.js @@ -61,15 +61,31 @@ export class LocalDemManager { */ async getImageData(blob, abortController) { try { - const buffer = await blob.arrayBuffer(); - const png = PNG.sync.read(Buffer.from(buffer)); - const parsed = mlcontour.decodeParsedImage( - png.width, - png.height, - this.encoding, - png.data, - ); if (Boolean(abortController?.signal?.aborted)) return null; + + const buffer = await blob.arrayBuffer(); + const image = sharp(Buffer.from(buffer)); + + const metadata = await image.metadata(); + + if (Boolean(abortController?.signal?.aborted)) return null; + + const { data, info } = await image + .ensureAlpha() // Ensure RGBA output + .raw() + .toBuffer({ resolveWithObject: true }); + + if (Boolean(abortController?.signal?.aborted)) return null; + + const parsed = mlcontour.decodeParsedImage( + info.width, + info.height, + this.encoding, + data, + ); + + if (Boolean(abortController?.signal?.aborted)) return null; + return parsed; } catch (error) { console.error('Error processing image:', error); From 2d90d8a27a0e83aaa95ca25b2e859cd490b68704 Mon Sep 17 00:00:00 2001 From: acalcutt Date: Sat, 21 Dec 2024 19:53:45 -0500 Subject: [PATCH 118/152] add levels --- src/serve_data.js | 141 ++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 136 insertions(+), 5 deletions(-) diff --git a/src/serve_data.js b/src/serve_data.js index 60b91b6..481b059 100644 --- a/src/serve_data.js +++ b/src/serve_data.js @@ -109,14 +109,145 @@ export const serve_data = { data = await gunzipP(data); isGzipped = false; } - data = options.dataDecoratorFunc( - req.params.id, - 'data', - data, + } else if (item.sourceType === 'mbtiles') { + item.source.getTile(z, x, y, async (err, data, headers) => { + let isGzipped; + if (err) { + if (/does not exist/.test(err.message)) { + return res.status(204).send(); + } else { + return res + .status(500) + .header('Content-Type', 'text/plain') + .send(err.message); + } + } else { + if (data == null) { + return res.status(404).send('Not found'); + } else { + if (tileJSONFormat === 'pbf') { + isGzipped = + data.slice(0, 2).indexOf(Buffer.from([0x1f, 0x8b])) === 0; + if (options.dataDecoratorFunc) { + if (isGzipped) { + data = await gunzipP(data); + isGzipped = false; + } + data = options.dataDecoratorFunc(id, 'data', data, z, x, y); + } + } + if (format === 'pbf') { + headers['Content-Type'] = 'application/x-protobuf'; + } else if (format === 'geojson') { + headers['Content-Type'] = 'application/json'; + + if (isGzipped) { + data = await gunzipP(data); + isGzipped = false; + } + + const tile = new VectorTile(new Pbf(data)); + const geojson = { + type: 'FeatureCollection', + features: [], + }; + for (const layerName in tile.layers) { + const layer = tile.layers[layerName]; + for (let i = 0; i < layer.length; i++) { + const feature = layer.feature(i); + const featureGeoJSON = feature.toGeoJSON(x, y, z); + featureGeoJSON.properties.layer = layerName; + geojson.features.push(featureGeoJSON); + } + } + data = JSON.stringify(geojson); + } + delete headers['ETag']; // do not trust the tile ETag -- regenerate + headers['Content-Encoding'] = 'gzip'; + res.set(headers); + + if (!isGzipped) { + data = await gzipP(data); + } + + return res.status(200).send(data); + } + } + }); + } + }, + ); + + app.get( + '^/:id/contour/:z([0-9]+)/:x([-.0-9]+)/:y([-.0-9]+)', + async (req, res, next) => { + try { + const item = repo?.[req.params.id]; + if (!item) return res.sendStatus(404); + if (!item.source) return res.status(404).send('Missing source'); + if (!item.tileJSON) return res.status(404).send('Missing tileJSON'); + if (!item.sourceType) + return res.status(404).send('Missing sourceType'); + + const { source, tileJSON, sourceType } = item; + + if (sourceType !== 'pmtiles' && sourceType !== 'mbtiles') { + return res + .status(400) + .send('Invalid sourceType. Must be pmtiles or mbtiles.'); + } + + const encoding = tileJSON?.encoding; + if (encoding == null) { + return res.status(400).send('Missing tileJSON.encoding'); + } else if (encoding !== 'terrarium' && encoding !== 'mapbox') { + return res + .status(400) + .send('Invalid encoding. Must be terrarium or mapbox.'); + } + + const format = tileJSON?.format; + if (format == null) { + return res.status(400).send('Missing tileJSON.format'); + } else if (format !== 'webp' && format !== 'png') { + return res.status(400).send('Invalid format. Must be webp or png.'); + } + + const maxzoom = tileJSON?.maxzoom; + if (maxzoom == null) { + return res.status(400).send('Missing tileJSON.maxzoom'); + } + + const z = parseInt(req.params.z, 10); + const x = parseFloat(req.params.x); + const y = parseFloat(req.params.y); + + const demManagerInit = new LocalDemManager( + encoding, + maxzoom, + source, + sourceType, + ); + const demManager = await demManagerInit.getManager(); + + let levels = 6; + if (z <= 5) { + levels = 1000; + } else if (z <= 8) { + levels = 500; + } else if (z <= 10) { + levels = 100; + } else if (z <= 12) { + levels = 50; + } else if (z <= 14) { + levels = 10; + } + + const { arrayBuffer } = await demManager.fetchContourTile( z, x, y, - { levels: [1000] }, + { levels: [levels] }, new AbortController(), ); } From 1961c24a69397282aa5c603c1a077c0cddedfd7f Mon Sep 17 00:00:00 2001 From: acalcutt Date: Sat, 21 Dec 2024 20:21:33 -0500 Subject: [PATCH 119/152] change levels --- src/serve_data.js | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/serve_data.js b/src/serve_data.js index 481b059..1e30a07 100644 --- a/src/serve_data.js +++ b/src/serve_data.js @@ -233,13 +233,13 @@ export const serve_data = { let levels = 6; if (z <= 5) { levels = 1000; - } else if (z <= 8) { - levels = 500; } else if (z <= 10) { - levels = 100; + levels = 500; } else if (z <= 12) { - levels = 50; + levels = 100; } else if (z <= 14) { + levels = 50; + } else if (z <= 16) { levels = 10; } From 07b6ccc536498cb0e3fabd96412c69f344112087 Mon Sep 17 00:00:00 2001 From: acalcutt Date: Sat, 21 Dec 2024 20:52:40 -0500 Subject: [PATCH 120/152] remove unneeded pngjs --- package-lock.json | 1 - package.json | 1 - src/contour.js | 1 - 3 files changed, 3 deletions(-) diff --git a/package-lock.json b/package-lock.json index 0380ebb..409460e 100644 --- a/package-lock.json +++ b/package-lock.json @@ -32,7 +32,6 @@ "morgan": "1.10.0", "pbf": "4.0.1", "pmtiles": "3.0.7", - "pngjs": "^7.0.0", "proj4": "2.12.1", "sanitize-filename": "1.6.3", "sharp": "0.33.5", diff --git a/package.json b/package.json index ffd207d..4c6bda2 100644 --- a/package.json +++ b/package.json @@ -41,7 +41,6 @@ "morgan": "1.10.0", "pbf": "4.0.1", "pmtiles": "3.0.7", - "pngjs": "^7.0.0", "proj4": "2.12.1", "sanitize-filename": "1.6.3", "sharp": "0.33.5", diff --git a/src/contour.js b/src/contour.js index d9cb768..82e774d 100644 --- a/src/contour.js +++ b/src/contour.js @@ -1,7 +1,6 @@ import sharp from 'sharp'; import mlcontour from '../node_modules/maplibre-contour/dist/index.mjs'; import { getPMtilesTile } from './pmtiles_adapter.js'; -import { PNG } from 'pngjs'; /** * Manages local DEM (Digital Elevation Model) data using maplibre-contour. From 15a51acabb6d8ffad59ec95a91805f49109f6948 Mon Sep 17 00:00:00 2001 From: acalcutt Date: Sat, 21 Dec 2024 23:52:10 -0500 Subject: [PATCH 121/152] rename functions --- src/contour.js | 27 +++++++++++++++++---------- 1 file changed, 17 insertions(+), 10 deletions(-) diff --git a/src/contour.js b/src/contour.js index 82e774d..2dcbb6f 100644 --- a/src/contour.js +++ b/src/contour.js @@ -13,7 +13,8 @@ export class LocalDemManager { * @param {object} source - The source object that contains either pmtiles or mbtiles. * @param {'pmtiles' | 'mbtiles'} sourceType - The type of data source * @param {Function} [GetTileFunction] - the function that returns a tile from the pmtiles object. - * @param {Function} [extractZXYFromUrlTrimFunction] - The function to extract the zxy from the url. + * @param {Function} [GetImageFunction] - the function that returns a tile from the pmtiles object. + * @param {Function} [extractZXYFromUrlFunction] - The function to extract the zxy from the url. */ constructor( encoding, @@ -21,14 +22,16 @@ export class LocalDemManager { source, sourceType, GetTileFunction, - extractZXYFromUrlTrimFunction, + GetImageFunction, + extractZXYFromUrlFunction, ) { this.encoding = encoding; this.maxzoom = maxzoom; this.source = source; this.sourceType = sourceType; this._getTile = GetTileFunction; - this._extractZXYFromUrlTrim = extractZXYFromUrlTrimFunction; + this._decodeImage = GetImageFunction; + this._extractZXY = extractZXYFromUrlFunction; this.manager = new mlcontour.LocalDemManager({ demUrlPattern: '/{z}/{x}/{y}', @@ -36,7 +39,7 @@ export class LocalDemManager { encoding: this.encoding, maxzoom: this.maxzoom, timeoutMs: 10000, - decodeImage: this.getImageData.bind(this), + decodeImage: this.getImageFunction.bind(this), getTile: this.getTileFunction.bind(this), }); } @@ -45,10 +48,16 @@ export class LocalDemManager { return this._getTile ? this._getTile.bind(this) : this.GetTile.bind(this); } + get getImageFunction() { + return this._decodeImage + ? this._decodeImage.bind(this) + : this.getImageData.bind(this); + } + get extractZXYFromUrlTrim() { - return this._extractZXYFromUrlTrim - ? this._extractZXYFromUrlTrim.bind(this) - : this._extractZXYFromUrlTrimFunction.bind(this); + return this._extractZXY + ? this._extractZXY.bind(this) + : this._extractZXYFromUrl.bind(this); } /** @@ -65,8 +74,6 @@ export class LocalDemManager { const buffer = await blob.arrayBuffer(); const image = sharp(Buffer.from(buffer)); - const metadata = await image.metadata(); - if (Boolean(abortController?.signal?.aborted)) return null; const { data, info } = await image @@ -176,7 +183,7 @@ export class LocalDemManager { * @param {string} url - The url to extract from * @returns {{z: number, x: number, y:number} | null} Returns the z,x,y of the url, or null if can't extract */ - _extractZXYFromUrlTrimFunction(url) { + _extractZXYFromUrl(url) { const segments = url.split('/').filter(Boolean); // Split and remove empty segments if (segments.length < 3) { return null; From d9d606b1f710469972f34021aa9212edb05104a3 Mon Sep 17 00:00:00 2001 From: acalcutt Date: Sat, 21 Dec 2024 23:52:51 -0500 Subject: [PATCH 122/152] update levels --- src/serve_data.js | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/src/serve_data.js b/src/serve_data.js index 1e30a07..fc21910 100644 --- a/src/serve_data.js +++ b/src/serve_data.js @@ -230,17 +230,25 @@ export const serve_data = { ); const demManager = await demManagerInit.getManager(); - let levels = 6; - if (z <= 5) { + let levels; + if (z <= 8) { levels = 1000; } else if (z <= 10) { levels = 500; + } else if (z <= 11) { + levels = 250; } else if (z <= 12) { levels = 100; - } else if (z <= 14) { + } else if (z <= 13) { levels = 50; - } else if (z <= 16) { + } else if (z <= 14) { + levels = 25; + } else if (z <= 15) { + levels = 20; + } else if (z <= 17) { levels = 10; + } else if (z >= 18) { + levels = 5; } const { arrayBuffer } = await demManager.fetchContourTile( From 43f86e9a669fe4905a1aac48cc6b114e3f94931a Mon Sep 17 00:00:00 2001 From: Miko Date: Fri, 3 Jan 2025 22:53:51 +0100 Subject: [PATCH 123/152] add control for contour lines --- public/resources/contour-control.js | 65 ++++++++++++++++ public/templates/data.tmpl | 110 +++++++++++++++++++--------- 2 files changed, 140 insertions(+), 35 deletions(-) create mode 100644 public/resources/contour-control.js diff --git a/public/resources/contour-control.js b/public/resources/contour-control.js new file mode 100644 index 0000000..0bf2f02 --- /dev/null +++ b/public/resources/contour-control.js @@ -0,0 +1,65 @@ +class MaplibreContourControl { + constructor(options) { + this.source = options["source"]; + this.confLayers = options["layers"]; + this.visibility = options["visibility"]; + } + + getDefaultPosition() { + const defaultPosition = "top-right"; + return defaultPosition; + } + + onAdd(map) { + this.map = map; + this.controlContainer = document.createElement("div"); + this.controlContainer.classList.add("maplibregl-ctrl"); + this.controlContainer.classList.add("maplibregl-ctrl-group"); + this.contourButton = document.createElement("button"); + this.contourButton.type = "button"; + this.contourButton.textContent = "C"; + + this.map.on("style.load", () => { + this.confLayers.forEach(layer => { + this.map.setLayoutProperty(layer, "visibility", this.visibility ? "visible" : "none"); + if (this.visibility) { + this.controlContainer.classList.add("maplibre-ctrl-contour-active"); + this.contourButton.title = "Disable Contours"; + } else { + this.contourButton.title = "Ensable Contours"; + } + }); + }); + + this.contourButton.addEventListener("click", () => { + this.confLayers.forEach(layer => { + var visibility = this.map.getLayoutProperty(layer, "visibility"); + if (visibility === "visible") { + this.map.setLayoutProperty(layer, "visibility", "none"); + this.controlContainer.classList.remove("maplibre-ctrl-contour-active"); + this.contourButton.title = "Disable Contours"; + } else { + this.controlContainer.classList.add("maplibre-ctrl-contour-active"); + this.map.setLayoutProperty(layer, "visibility", "visible"); + this.contourButton.title = "Enable Contours"; + } + }); + }); + this.controlContainer.appendChild(this.contourButton); + return this.controlContainer; + } + + onRemove() { + if ( + !this.controlContainer || + !this.controlContainer.parentNode || + !this.map || + !this.contourButton + ) { + return; + } + this.contourButton.removeEventListener("click"); + this.controlContainer.parentNode.removeChild(this.controlContainer); + this.map = undefined; + } +}; diff --git a/public/templates/data.tmpl b/public/templates/data.tmpl index 300cb28..0d823f0 100644 --- a/public/templates/data.tmpl +++ b/public/templates/data.tmpl @@ -10,6 +10,7 @@ + {{/use_maplibre}} {{^use_maplibre}} @@ -71,10 +73,9 @@ }; {{/is_terrain}} {{#is_terrain}} - let baseUrl = window.location.origin; - console.log(baseUrl); - baseUrl = baseUrl + "/data/{{id}}/contour/{z}/{x}/{y}" - console.log(baseUrl); + + let baseUrl = window.location.origin; + var style = { version: 8, sources: { @@ -90,42 +91,64 @@ }, "contour": { "type": "vector", - "tiles": [ baseUrl ], + "tiles": [ baseUrl + "/data/{{id}}/contour/{z}/{x}/{y}" ], } }, + "glyphs": "local://fonts/{fontstack}/{range}.pbf", "terrain": { "source": "terrain" }, - "layers": [ - { - "id": "background", - "paint": { - "background-color": "hsl(190, 99%, 63%)" - }, - "type": "background" - }, - { - "id": "hillshade", - "source": "hillshade", - "type": "hillshade", - "paint": { - "hillshade-shadow-color": "hsl(39, 21%, 33%)", - "hillshade-illumination-direction": 315, - "hillshade-exaggeration": 0.8 - } - }, - { - "id": "contours", - "type": "line", - "source": "contour", - "source-layer": "contours", - "paint": { - "line-opacity": 0.5, - "line-width": ["match", ["get", "level"], 1, 1, 0.5] - } - } - ] - }; + "layers": [ + { + "id": "background", + "paint": { + "background-color": "hsl(190, 99%, 63%)" + }, + "type": "background" + }, + { + "id": "hillshade", + "source": "hillshade", + "type": "hillshade", + "paint": { + "hillshade-shadow-color": "hsl(39, 21%, 33%)", + "hillshade-illumination-direction": 315, + "hillshade-exaggeration": 0.8 + } + }, + { + "id": "contours", + "type": "line", + "source": "contour", + "source-layer": "contours", + "paint": { + "line-opacity": 0.5, + "line-width": ["match", ["get", "level"], 1, 1, 0.5] + } + }, + { + "id": 'contour-label', + "type": 'symbol', + "source": 'contour', + "source-layer": 'contours', + "filter": ['>', ['get', 'level'], 0], + "paint": { + 'text-halo-color': 'white', + 'text-halo-width': 1 + }, + "layout": { + 'symbol-placement': 'line', + 'text-size': 10, + 'text-field': [ + 'concat', + ['number-format', ['get', 'ele'], {}], + '\'' + ], + 'text-font': ['Noto Sans Bold'] + } + } + ] + }; {{/is_terrain}} var map = new maplibregl.Map({ @@ -134,17 +157,33 @@ maxPitch: 85, style: style }); + map.addControl(new maplibregl.NavigationControl({ visualizePitch: true, showZoom: true, showCompass: true })); {{#is_terrain}} + map.addControl( new maplibregl.TerrainControl({ source: "terrain", }) ); + + map.addControl( + new MaplibreContourControl({ + source: "contour", + visibility: false, + layers: [ "contours", "contour-label" ] + }) + ); + + //map.addControl( + // new ElevationInfo({ + // url: baseUrl + "/data/{{id}}/elvation/{z}/{x}/{y}" + // }) + //); {{/is_terrain}} {{^is_terrain}} @@ -153,6 +192,7 @@ showInspectButton: false }); map.addControl(inspect); + map.on('styledata', function() { var layerList = document.getElementById('layerList'); layerList.innerHTML = ''; From 1bfeac2e018a32d85b811aab5f14fb31a8aa3f80 Mon Sep 17 00:00:00 2001 From: Miko Date: Sat, 4 Jan 2025 01:00:04 +0100 Subject: [PATCH 124/152] add contour-label --- public/resources/contour-control.js | 2 +- public/templates/data.tmpl | 43 ++++++++++++++--------------- 2 files changed, 21 insertions(+), 24 deletions(-) diff --git a/public/resources/contour-control.js b/public/resources/contour-control.js index 0bf2f02..2549d49 100644 --- a/public/resources/contour-control.js +++ b/public/resources/contour-control.js @@ -26,7 +26,7 @@ class MaplibreContourControl { this.controlContainer.classList.add("maplibre-ctrl-contour-active"); this.contourButton.title = "Disable Contours"; } else { - this.contourButton.title = "Ensable Contours"; + this.contourButton.title = "Enable Contours"; } }); }); diff --git a/public/templates/data.tmpl b/public/templates/data.tmpl index 0d823f0..5bea452 100644 --- a/public/templates/data.tmpl +++ b/public/templates/data.tmpl @@ -11,6 +11,7 @@ + {{/use_maplibre}} {{^use_maplibre}} @@ -178,7 +179,7 @@ map.addControl( new ElevationInfoControl({ - url: baseUrl + "/data/{{id}}/elvation/{z}/{x}/{y}" + url: baseUrl + "/data/{{id}}/elevation/{z}/{x}/{y}" }) ); {{/is_terrain}} From c9e7f100346027b16fc6732bf04f8674f73cb90d Mon Sep 17 00:00:00 2001 From: Miko Date: Tue, 7 Jan 2025 23:58:40 +0100 Subject: [PATCH 126/152] disable debug log --- src/contour.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/contour.js b/src/contour.js index 2dcbb6f..fa770dd 100644 --- a/src/contour.js +++ b/src/contour.js @@ -107,7 +107,7 @@ export class LocalDemManager { * @throws If an error occurs fetching or processing the tile. */ async GetTile(url, abortController) { - console.log(url); + //console.log(url); const $zxy = this.extractZXYFromUrlTrim(url); if (!$zxy) { throw new Error(`Could not extract zxy from $url`); @@ -171,7 +171,7 @@ export class LocalDemManager { }; } catch (error) { if (error.name === 'AbortError') { - console.log('fetch cancelled'); + console.log('fetch canceled'); return null; } throw error; From 56dbeb2e8e5b5e90a4efb63121d8a1a30f4d758f Mon Sep 17 00:00:00 2001 From: Miko Date: Sat, 11 Jan 2025 00:01:39 +0100 Subject: [PATCH 127/152] fix rebase issues and update contour router to express5 --- src/serve_data.js | 283 +++++++++++++++++++++------------------------- 1 file changed, 130 insertions(+), 153 deletions(-) diff --git a/src/serve_data.js b/src/serve_data.js index fc21910..7835a82 100644 --- a/src/serve_data.js +++ b/src/serve_data.js @@ -12,13 +12,7 @@ import { Image, createCanvas } from 'canvas'; import sharp from 'sharp'; import { LocalDemManager } from './contour.js'; -import { fixTileJSONCenter, getTileUrls, isValidHttpUrl } from './utils.js'; -import { - fixTileJSONCenter, - getTileUrls, - isValidHttpUrl, - fetchTileData, -} from './utils.js'; +import { fixTileJSONCenter, getTileUrls, isValidHttpUrl, fetchTileData } from './utils.js'; import { getPMtilesInfo, openPMtiles } from './pmtiles_adapter.js'; import { gunzipP, gzipP } from './promises.js'; import { openMbTilesWrapper } from './mbtiles_wrapper.js'; @@ -109,154 +103,13 @@ export const serve_data = { data = await gunzipP(data); isGzipped = false; } - } else if (item.sourceType === 'mbtiles') { - item.source.getTile(z, x, y, async (err, data, headers) => { - let isGzipped; - if (err) { - if (/does not exist/.test(err.message)) { - return res.status(204).send(); - } else { - return res - .status(500) - .header('Content-Type', 'text/plain') - .send(err.message); - } - } else { - if (data == null) { - return res.status(404).send('Not found'); - } else { - if (tileJSONFormat === 'pbf') { - isGzipped = - data.slice(0, 2).indexOf(Buffer.from([0x1f, 0x8b])) === 0; - if (options.dataDecoratorFunc) { - if (isGzipped) { - data = await gunzipP(data); - isGzipped = false; - } - data = options.dataDecoratorFunc(id, 'data', data, z, x, y); - } - } - if (format === 'pbf') { - headers['Content-Type'] = 'application/x-protobuf'; - } else if (format === 'geojson') { - headers['Content-Type'] = 'application/json'; - - if (isGzipped) { - data = await gunzipP(data); - isGzipped = false; - } - - const tile = new VectorTile(new Pbf(data)); - const geojson = { - type: 'FeatureCollection', - features: [], - }; - for (const layerName in tile.layers) { - const layer = tile.layers[layerName]; - for (let i = 0; i < layer.length; i++) { - const feature = layer.feature(i); - const featureGeoJSON = feature.toGeoJSON(x, y, z); - featureGeoJSON.properties.layer = layerName; - geojson.features.push(featureGeoJSON); - } - } - data = JSON.stringify(geojson); - } - delete headers['ETag']; // do not trust the tile ETag -- regenerate - headers['Content-Encoding'] = 'gzip'; - res.set(headers); - - if (!isGzipped) { - data = await gzipP(data); - } - - return res.status(200).send(data); - } - } - }); - } - }, - ); - - app.get( - '^/:id/contour/:z([0-9]+)/:x([-.0-9]+)/:y([-.0-9]+)', - async (req, res, next) => { - try { - const item = repo?.[req.params.id]; - if (!item) return res.sendStatus(404); - if (!item.source) return res.status(404).send('Missing source'); - if (!item.tileJSON) return res.status(404).send('Missing tileJSON'); - if (!item.sourceType) - return res.status(404).send('Missing sourceType'); - - const { source, tileJSON, sourceType } = item; - - if (sourceType !== 'pmtiles' && sourceType !== 'mbtiles') { - return res - .status(400) - .send('Invalid sourceType. Must be pmtiles or mbtiles.'); - } - - const encoding = tileJSON?.encoding; - if (encoding == null) { - return res.status(400).send('Missing tileJSON.encoding'); - } else if (encoding !== 'terrarium' && encoding !== 'mapbox') { - return res - .status(400) - .send('Invalid encoding. Must be terrarium or mapbox.'); - } - - const format = tileJSON?.format; - if (format == null) { - return res.status(400).send('Missing tileJSON.format'); - } else if (format !== 'webp' && format !== 'png') { - return res.status(400).send('Invalid format. Must be webp or png.'); - } - - const maxzoom = tileJSON?.maxzoom; - if (maxzoom == null) { - return res.status(400).send('Missing tileJSON.maxzoom'); - } - - const z = parseInt(req.params.z, 10); - const x = parseFloat(req.params.x); - const y = parseFloat(req.params.y); - - const demManagerInit = new LocalDemManager( - encoding, - maxzoom, - source, - sourceType, - ); - const demManager = await demManagerInit.getManager(); - - let levels; - if (z <= 8) { - levels = 1000; - } else if (z <= 10) { - levels = 500; - } else if (z <= 11) { - levels = 250; - } else if (z <= 12) { - levels = 100; - } else if (z <= 13) { - levels = 50; - } else if (z <= 14) { - levels = 25; - } else if (z <= 15) { - levels = 20; - } else if (z <= 17) { - levels = 10; - } else if (z >= 18) { - levels = 5; - } - - const { arrayBuffer } = await demManager.fetchContourTile( + data = options.dataDecoratorFunc( + req.params.id, + 'data', + data, z, x, y, - { levels: [levels] }, - new AbortController(), ); } } @@ -294,6 +147,117 @@ export const serve_data = { return res.status(200).send(data); }); + /** + * Handles requests for contour data. + * @param {object} req - Express request object. + * @param {object} res - Express response object. + * @param {string} req.params.id - ID of the contour data. + * @param {string} req.params.z - Z coordinate of the tile. + * @param {string} req.params.x - X coordinate of the tile (either integer or float). + * @param {string} req.params.y - Y coordinate of the tile (either integer or float). + * @returns {Promise} + */ + app.get('/:id/contour/:z/:x/:y', async (req, res, next) => { + try { + if (verbose) { + console.log( + `Handling contour request for: /data/%s/contour/%s/%s/%s`, + String(req.params.id).replace(/\n|\r/g, ''), + String(req.params.z).replace(/\n|\r/g, ''), + String(req.params.x).replace(/\n|\r/g, ''), + String(req.params.y).replace(/\n|\r/g, ''), + ); + } + const item = repo?.[req.params.id]; + if (!item) return res.sendStatus(404); + if (!item.source) return res.status(404).send('Missing source'); + if (!item.tileJSON) return res.status(404).send('Missing tileJSON'); + if (!item.sourceType) + return res.status(404).send('Missing sourceType'); + + const { source, tileJSON, sourceType } = item; + + if (sourceType !== 'pmtiles' && sourceType !== 'mbtiles') { + return res + .status(400) + .send('Invalid sourceType. Must be pmtiles or mbtiles.'); + } + + const encoding = tileJSON?.encoding; + if (encoding == null) { + return res.status(400).send('Missing tileJSON.encoding'); + } else if (encoding !== 'terrarium' && encoding !== 'mapbox') { + return res + .status(400) + .send('Invalid encoding. Must be terrarium or mapbox.'); + } + + const format = tileJSON?.format; + if (format == null) { + return res.status(400).send('Missing tileJSON.format'); + } else if (format !== 'webp' && format !== 'png') { + return res.status(400).send('Invalid format. Must be webp or png.'); + } + + const maxzoom = tileJSON?.maxzoom; + if (maxzoom == null) { + return res.status(400).send('Missing tileJSON.maxzoom'); + } + + const z = parseInt(req.params.z, 10); + const x = parseFloat(req.params.x); + const y = parseFloat(req.params.y); + + const demManagerInit = new LocalDemManager( + encoding, + maxzoom, + source, + sourceType, + ); + const demManager = await demManagerInit.getManager(); + + let levels; + if (z <= 8) { + levels = 1000; + } else if (z <= 10) { + levels = 500; + } else if (z <= 11) { + levels = 250; + } else if (z <= 12) { + levels = 100; + } else if (z <= 13) { + levels = 50; + } else if (z <= 14) { + levels = 25; + } else if (z <= 15) { + levels = 20; + } else if (z <= 17) { + levels = 10; + } else if (z >= 18) { + levels = 5; + } + + const { arrayBuffer } = await demManager.fetchContourTile( + z, + x, + y, + { levels: [levels] }, + new AbortController(), + ); + // Set the Content-Type header here + res.setHeader('Content-Type', 'application/x-protobuf'); + res.setHeader('Content-Encoding', 'gzip'); + let data = Buffer.from(arrayBuffer); + data = await gzipP(data); + res.send(data); + } catch (err) { + return res + .status(500) + .header('Content-Type', 'text/plain') + .send(err.message); + } + }); + /** * Handles requests for elevation data. * @param {object} req - Express request object. @@ -340,12 +304,15 @@ export const serve_data = { } else if (format !== 'webp' && format !== 'png') { return res.status(400).send('Invalid format. Must be webp or png.'); } + const z = parseInt(req.params.z, 10); const x = parseFloat(req.params.x); const y = parseFloat(req.params.y); + if (tileJSON.minzoom == null || tileJSON.maxzoom == null) { return res.status(404).send(JSON.stringify(tileJSON)); } + const TILE_SIZE = tileJSON.tileSize || 512; let bbox; let xy; @@ -354,6 +321,7 @@ export const serve_data = { if (Number.isInteger(x) && Number.isInteger(y)) { const intX = parseInt(req.params.x, 10); const intY = parseInt(req.params.y, 10); + if ( zoom < tileJSON.minzoom || zoom > tileJSON.maxzoom || @@ -374,6 +342,7 @@ export const serve_data = { if (zoom > tileJSON.maxzoom) { zoom = tileJSON.maxzoom; } + bbox = [x, y, x + 0.1, y + 0.1]; const { minX, minY } = new SphericalMercator().xyz(bbox, zoom); xy = [minX, minY]; @@ -384,7 +353,7 @@ export const serve_data = { sourceType, zoom, xy[0], - xy[1], + xy[1] ); if (fetchTile == null) return res.status(204).send(); @@ -395,6 +364,7 @@ export const serve_data = { const canvas = createCanvas(TILE_SIZE, TILE_SIZE); const context = canvas.getContext('2d'); context.drawImage(image, 0, 0); + const long = bbox[0]; const lat = bbox[1]; @@ -404,6 +374,7 @@ export const serve_data = { // Truncating to 0.9999 effectively limits latitude to 89.189. This is // about a third of a tile past the edge of the world tile. siny = Math.min(Math.max(siny, -0.9999), 0.9999); + const xWorld = TILE_SIZE * (0.5 + long / 360); const yWorld = TILE_SIZE * @@ -416,6 +387,7 @@ export const serve_data = { const xPixel = Math.floor(xWorld * scale) - xTile * TILE_SIZE; const yPixel = Math.floor(yWorld * scale) - yTile * TILE_SIZE; + if ( xPixel < 0 || yPixel < 0 || @@ -424,10 +396,12 @@ export const serve_data = { ) { return reject('Out of bounds Pixel'); } + const imgdata = context.getImageData(xPixel, yPixel, 1, 1); const red = imgdata.data[0]; const green = imgdata.data[1]; const blue = imgdata.data[2]; + let elevation; if (encoding === 'mapbox') { elevation = -10000 + (red * 256 * 256 + green * 256 + blue) * 0.1; @@ -436,6 +410,7 @@ export const serve_data = { } else { elevation = 'invalid encoding'; } + resolve( res.status(200).send({ z: zoom, @@ -450,7 +425,9 @@ export const serve_data = { }), ); }; + image.onerror = (err) => reject(err); + if (format === 'webp') { try { const img = await sharp(data).toFormat('png').toBuffer(); From 6ad99a30b64593f61beb546bfe27e65b5ba71f80 Mon Sep 17 00:00:00 2001 From: Miko Date: Sat, 11 Jan 2025 00:20:22 +0100 Subject: [PATCH 128/152] remove base url, re-add encoding based background-color --- public/templates/data.tmpl | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/public/templates/data.tmpl b/public/templates/data.tmpl index 77029d1..61cabc7 100644 --- a/public/templates/data.tmpl +++ b/public/templates/data.tmpl @@ -76,8 +76,6 @@ {{/is_terrain}} {{#is_terrain}} - let baseUrl = window.location.origin; - var style = { version: 8, sources: { @@ -93,7 +91,7 @@ }, "contour": { "type": "vector", - "tiles": [ baseUrl + "/data/{{id}}/contour/{z}/{x}/{y}" ], + "tiles": [ "{{public_url}}/data/{{id}}/contour/{z}/{x}/{y}" ], } }, "glyphs": "/fonts/{fontstack}/{range}.pbf", @@ -104,7 +102,11 @@ { "id": "background", "paint": { + {{#if is_terrainrgb}} "background-color": "hsl(190, 99%, 63%)" + {{else}} + "background-color": "hsl(0, 100%, 25%)" + {{/if}} }, "type": "background" }, @@ -179,7 +181,7 @@ map.addControl( new ElevationInfoControl({ - url: baseUrl + "/data/{{id}}/elevation/{z}/{x}/{y}" + url: "{{public_url}}data/{{id}}/elevation/{z}/{x}/{y}" }) ); {{/is_terrain}} From c30d79981131dff465c738190c16d550ea3ffc77 Mon Sep 17 00:00:00 2001 From: Andrew Calcutt Date: Fri, 10 Jan 2025 18:46:19 -0500 Subject: [PATCH 129/152] add support for pre-release in release workflow (#1434) * add support for pre-release in release workflow * Update release.yml * add release check * workflow cleanup * cleanup * Create CHANGELOG.md * Update PUBLISHING.md --- .github/workflows/release.yml | 81 +++++++++++++++++++++++++++++------ CHANGELOG.md | 7 +++ PUBLISHING.md | 28 +++++++----- package-lock.json | 1 + package.json | 1 + 5 files changed, 95 insertions(+), 23 deletions(-) create mode 100644 CHANGELOG.md diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 8691235..0e83758 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -14,9 +14,51 @@ on: required: true jobs: + release-check: + name: Check if version is published + runs-on: ubuntu-latest + defaults: + run: + shell: bash + steps: + - uses: actions/checkout@v4 + + - uses: actions/setup-node@v4 + with: + node-version-file: 'package.json' + check-latest: true + cache: 'npm' + + - name: Check if version is published + id: check + run: | + currentVersion="$( node -e "console.log(require('./package.json').version)" )" + isPublished="$( npm view tileserver-gl versions --json | jq -c --arg cv "$currentVersion" 'any(. == $cv)' )" + RELEASE_TYPE="$(node -e "console.log(require('semver').prerelease('$currentVersion') ? 'prerelease' : 'regular')")" + echo "version=$currentVersion" >> "$GITHUB_OUTPUT" + echo "published=$isPublished" >> "$GITHUB_OUTPUT" + if [[ $RELEASE_TYPE == 'regular' ]]; then + echo "prerelease=false" >> "$GITHUB_OUTPUT" + else + echo "prerelease=true" >> "$GITHUB_OUTPUT" + fi + echo "currentVersion: $currentVersion" + echo "isPublished: $isPublished" + echo "prerelease: ${prerelease}" + outputs: + published: ${{ steps.check.outputs.published }} + prerelease: ${{ steps.check.outputs.prerelease }} + version: ${{ steps.check.outputs.version }} + release: + needs: release-check + if: ${{ needs.release-check.outputs.published == 'false' }} name: 'Build, Test, Publish' runs-on: ubuntu-22.04 + env: + PACKAGE_VERSION: ${{ needs.release-check.outputs.version }} + PRERELEASE: ${{ needs.release-check.outputs.prerelease }} + TAG: ${{ env.PRERELEASE == 'true' && 'next' || 'latest' }} steps: - name: Check out repository ✨ uses: actions/checkout@v4 @@ -54,17 +96,13 @@ jobs: - name: Remove Test Data run: rm -R test_data* - - name: Publish to Full Version NPM + - name: Publish to NPM run: | npm config set //registry.npmjs.org/:_authToken ${NPM_TOKEN} - npm publish --access public + npm publish --access public --tag ${{ env.TAG }} env: NPM_TOKEN: ${{ github.event.inputs.npm_token }} - - name: Get version - run: | - echo "PACKAGE_VERSION=$(grep '"version"' package.json | cut -d '"' -f 4 | head -n 1)" >> $GITHUB_ENV - - name: Set up QEMU uses: docker/setup-qemu-action@v3 with: @@ -84,24 +122,42 @@ jobs: with: context: . push: true - tags: maptiler/tileserver-gl:latest, maptiler/tileserver-gl:v${{ env.PACKAGE_VERSION }} + tags: | + maptiler/tileserver-gl:${{ env.TAG }}, + maptiler/tileserver-gl:v${{ env.PACKAGE_VERSION }} platforms: linux/arm64,linux/amd64 - # experimental: https://github.com/docker/build-push-action/blob/master/docs/advanced/cache.md#cache-backend-api cache-from: type=gha cache-to: type=gha,mode=max + - name: Extract changelog for version + run: | + awk '/^##/ { p = 0 }; p == 1 { print }; $0 == "## ${{ env.PACKAGE_VERSION }}" { p = 1 };' CHANGELOG.md > changelog_for_version.md + cat changelog_for_version.md + + - name: Publish to Github + uses: ncipollo/release-action@v1 + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + with: + tag: v${{ env.PACKAGE_VERSION }} + name: v${{ env.PACKAGE_VERSION }} + bodyFile: changelog_for_version.md + allowUpdates: true + draft: false + prerelease: ${{ env.PRERELEASE }} + - name: Create Tileserver Light Directory run: node publish.js --no-publish - name: Install node dependencies - run: npm install + run: npm ci --prefer-offline --no-audit working-directory: ./light - name: Publish to Light Version NPM working-directory: ./light run: | npm config set //registry.npmjs.org/:_authToken ${NPM_TOKEN} - npm publish --access public + npm publish --access public --tag ${{ env.TAG }} env: NPM_TOKEN: ${{ github.event.inputs.npm_token }} @@ -111,8 +167,9 @@ jobs: context: ./light file: ./light/Dockerfile push: true - tags: maptiler/tileserver-gl-light:latest, maptiler/tileserver-gl-light:v${{ env.PACKAGE_VERSION }} + tags: | + maptiler/tileserver-gl-light:${{ env.TAG }}, + maptiler/tileserver-gl-light:v${{ env.PACKAGE_VERSION }} platforms: linux/arm64,linux/amd64 - # experimental: https://github.com/docker/build-push-action/blob/master/docs/advanced/cache.md#cache-backend-api cache-from: type=gha cache-to: type=gha,mode=max diff --git a/CHANGELOG.md b/CHANGELOG.md new file mode 100644 index 0000000..108af87 --- /dev/null +++ b/CHANGELOG.md @@ -0,0 +1,7 @@ +# tileserver-gl changelog + +## 5.0.0 +* Update Maplibre-Native to [v6.0.0](https://github.com/maplibre/maplibre-native/releases/tag/node-v6.0.0) release by @acalcutt in https://github.com/maptiler/tileserver-gl/pull/1376 and @dependabot in https://github.com/maptiler/tileserver-gl/pull/1381 + * This first release that use Metal for rendering instead of OpenGL (ES) for macOS. + * This the first release that uses OpenGL (ES) 3.0 on Windows and Linux + * Note: Windows users may need to update their [c++ redistributable ](https://learn.microsoft.com/en-us/cpp/windows/latest-supported-vc-redist?view=msvc-170) for maplibre-native v6.0.0 \ No newline at end of file diff --git a/PUBLISHING.md b/PUBLISHING.md index 8b41b6b..ae17ff6 100644 --- a/PUBLISHING.md +++ b/PUBLISHING.md @@ -1,13 +1,19 @@ # Publishing new version -- Update version in `package.json` -- `git tag vx.x.x` -- `git push --tags` -- `docker buildx build --platform linux/amd64 -t maptiler/tileserver-gl:latest -t maptiler/tileserver-gl:[version] .` -- `docker push maptiler/tileserver-gl --all-tags` -- `npm publish --access public` or `node publish.js` -- `node publish.js --no-publish` -- `cd light` -- `docker buildx build --platform linux/amd64 -t maptiler/tileserver-gl-light:latest -t maptiler/tileserver-gl-light:[version] .` -- `docker push maptiler/tileserver-gl-light --all-tags` -- `npm publish --access public` +1.) Change the version number in package.json. Run the following command in the package root directory, replacing with one of the semantic versioning release types (prerelease, prepatch, preminor, premajor, patch, minor, major): +npm version --preid pre --no-git-tag-version + +--preid specifies which suffix to use in the release such as pre, next, beta, rc, etc. + +prepatch, preminor, and premajor start a new series of pre-releases while bumping the patch, minor, or major version. E.g. premajor with --preid pre would do a prerelease for a new major using the -pre suffix (i.e. it would be a new major with -pre.0) + +You can use prerelease to bump the version for a new pre-release version. E.g. you could run npm version prerelease --preid pre --no-git-tag-version to go from -pre.0 to -pre.1. + +For regular versions, you can use patch, minor, or major. E.g. npm version major --no-git-tag-version. + +2.) Update the changelog, which can be found in CHANGELOG.md. The heading must match ## exactly, or it will not be picked up. For example, for version 5.0.0: +## 5.0.0 + +3.) Commit and push the changes. + +4.) Run the 'Build, Test, Release' github workflow. The workflow will create a NPM, Docker, and Github release and Tag. diff --git a/package-lock.json b/package-lock.json index 408b652..1210376 100644 --- a/package-lock.json +++ b/package-lock.json @@ -33,6 +33,7 @@ "pmtiles": "3.0.7", "proj4": "2.12.1", "sanitize-filename": "1.6.3", + "semver": "^7.6.3", "sharp": "0.33.5", "tileserver-gl-styles": "2.0.0" }, diff --git a/package.json b/package.json index 14f94ae..86cf087 100644 --- a/package.json +++ b/package.json @@ -42,6 +42,7 @@ "pmtiles": "3.0.7", "proj4": "2.12.1", "sanitize-filename": "1.6.3", + "semver": "^7.6.3", "sharp": "0.33.5", "tileserver-gl-styles": "2.0.0" }, From 450de428541741e1e1acfe10422a89d2733563ba Mon Sep 17 00:00:00 2001 From: Miko Date: Sat, 11 Jan 2025 00:49:41 +0100 Subject: [PATCH 130/152] fix further rebase issues --- package-lock.json | 8 -------- public/templates/data.tmpl | 3 +-- 2 files changed, 1 insertion(+), 10 deletions(-) diff --git a/package-lock.json b/package-lock.json index 409460e..687ff75 100644 --- a/package-lock.json +++ b/package-lock.json @@ -6887,14 +6887,6 @@ "fflate": "^0.8.0" } }, - "node_modules/pngjs": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/pngjs/-/pngjs-7.0.0.tgz", - "integrity": "sha512-LKWqWJRhstyYo9pGvgor/ivk2w94eSjE3RGVuzLGlr3NmD8bf7RcYGze1mNdEHRP6TRP6rMuDHk5t44hnTRyow==", - "engines": { - "node": ">=14.19.0" - } - }, "node_modules/prebuild-install": { "version": "7.1.2", "resolved": "https://registry.npmjs.org/prebuild-install/-/prebuild-install-7.1.2.tgz", diff --git a/public/templates/data.tmpl b/public/templates/data.tmpl index 61cabc7..dcc4009 100644 --- a/public/templates/data.tmpl +++ b/public/templates/data.tmpl @@ -11,7 +11,6 @@ - {{/use_maplibre}} {{^use_maplibre}} @@ -135,11 +139,13 @@ }) ); + {{^is_light}} map.addControl( new ElevationInfoControl({ url: "{{public_url}}data/{{id}}/elevation/{z}/{x}/{y}" }) ); + {{/is_light}} {{/is_terrain}} {{^is_terrain}} diff --git a/public/templates/index.tmpl b/public/templates/index.tmpl index acf094f..1d3a514 100644 --- a/public/templates/index.tmpl +++ b/public/templates/index.tmpl @@ -124,9 +124,9 @@ {{/is_vector}} {{^is_vector}} View - {{#elevation_link}} + {{#is_terrain}} Preview Terrain - {{/elevation_link}} + {{/is_terrain}} {{/is_vector}} diff --git a/src/serve_data.js b/src/serve_data.js index cd2e6bb..6369aa2 100644 --- a/src/serve_data.js +++ b/src/serve_data.js @@ -8,8 +8,6 @@ import express from 'express'; import Pbf from 'pbf'; import { VectorTile } from '@mapbox/vector-tile'; import SphericalMercator from '@mapbox/sphericalmercator'; -import { Image, createCanvas } from 'canvas'; -import sharp from 'sharp'; import { fixTileJSONCenter, @@ -21,6 +19,20 @@ import { getPMtilesInfo, openPMtiles } from './pmtiles_adapter.js'; import { gunzipP, gzipP } from './promises.js'; import { openMbTilesWrapper } from './mbtiles_wrapper.js'; +import fs from 'node:fs'; +import { fileURLToPath } from 'url'; +const packageJson = JSON.parse( + fs.readFileSync( + path.dirname(fileURLToPath(import.meta.url)) + '/../package.json', + 'utf8', + ), +); + +const isLight = packageJson.name.slice(-6) === '-light'; +const serve_rendered = ( + await import(`${!isLight ? `./serve_rendered.js` : `./serve_light.js`}`) +).serve_rendered; + export const serve_data = { /** * Initializes the serve_data module. @@ -246,79 +258,20 @@ export const serve_data = { if (fetchTile == null) return res.status(204).send(); let data = fetchTile.data; - const image = new Image(); - await new Promise(async (resolve, reject) => { - image.onload = async () => { - const canvas = createCanvas(TILE_SIZE, TILE_SIZE); - const context = canvas.getContext('2d'); - context.drawImage(image, 0, 0); - const long = bbox[0]; - const lat = bbox[1]; + var param = { + long: bbox[0], + lat: bbox[1], + encoding, + format, + tile_size: TILE_SIZE, + z: zoom, + x: xy[0], + y: xy[1], + }; - // calculate pixel coordinate of tile, - // see https://developers.google.com/maps/documentation/javascript/examples/map-coordinates - let siny = Math.sin((lat * Math.PI) / 180); - // Truncating to 0.9999 effectively limits latitude to 89.189. This is - // about a third of a tile past the edge of the world tile. - siny = Math.min(Math.max(siny, -0.9999), 0.9999); - const xWorld = TILE_SIZE * (0.5 + long / 360); - const yWorld = - TILE_SIZE * - (0.5 - Math.log((1 + siny) / (1 - siny)) / (4 * Math.PI)); - - const scale = 1 << zoom; - - const xTile = Math.floor((xWorld * scale) / TILE_SIZE); - const yTile = Math.floor((yWorld * scale) / TILE_SIZE); - - const xPixel = Math.floor(xWorld * scale) - xTile * TILE_SIZE; - const yPixel = Math.floor(yWorld * scale) - yTile * TILE_SIZE; - if ( - xPixel < 0 || - yPixel < 0 || - xPixel >= TILE_SIZE || - yPixel >= TILE_SIZE - ) { - return reject('Out of bounds Pixel'); - } - const imgdata = context.getImageData(xPixel, yPixel, 1, 1); - const red = imgdata.data[0]; - const green = imgdata.data[1]; - const blue = imgdata.data[2]; - let elevation; - if (encoding === 'mapbox') { - elevation = -10000 + (red * 256 * 256 + green * 256 + blue) * 0.1; - } else if (encoding === 'terrarium') { - elevation = red * 256 + green + blue / 256 - 32768; - } else { - elevation = 'invalid encoding'; - } - resolve( - res.status(200).send({ - z: zoom, - x: xy[0], - y: xy[1], - red, - green, - blue, - latitude: lat, - longitude: long, - elevation, - }), - ); - }; - image.onerror = (err) => reject(err); - if (format === 'webp') { - try { - const img = await sharp(data).toFormat('png').toBuffer(); - image.src = img; - } catch (err) { - reject(err); - } - } else { - image.src = data; - } - }); + res + .status(200) + .send(await serve_rendered.getTerrainElevation(data, param)); } catch (err) { return res .status(500) diff --git a/src/serve_light.js b/src/serve_light.js index 7e49c49..13aa84c 100644 --- a/src/serve_light.js +++ b/src/serve_light.js @@ -6,4 +6,8 @@ export const serve_rendered = { init: (options, repo, programOpts) => {}, add: (options, repo, params, id, programOpts, dataResolver) => {}, remove: (repo, id) => {}, + getTerrainElevation: (data, param) => { + param['elevation'] = 'not supported in light'; + return param; + }, }; diff --git a/src/serve_rendered.js b/src/serve_rendered.js index af928d9..3dc3cd5 100644 --- a/src/serve_rendered.js +++ b/src/serve_rendered.js @@ -7,7 +7,7 @@ // This happens on ARM: // > terminate called after throwing an instance of 'std::runtime_error' // > what(): Cannot read GLX extensions. -import 'canvas'; +import { Image, createCanvas } from 'canvas'; import '@maplibre/maplibre-gl-native'; // // SECTION END @@ -1458,4 +1458,76 @@ export const serve_rendered = { } delete repo[id]; }, + + /** + * Get the elevation of terrain tile data by rendering it to a canvas image + * @param {object} data The background color (or empty string for transparent). + * @param {object} param Required parameters (coordinates e.g.) + * @returns {object} + */ + getTerrainElevation: async function (data, param) { + return await new Promise(async (resolve, reject) => { + const image = new Image(); + image.onload = async () => { + const canvas = createCanvas(param['tile_size'], param['tile_size']); + const context = canvas.getContext('2d'); + context.drawImage(image, 0, 0); + + // calculate pixel coordinate of tile, + // see https://developers.google.com/maps/documentation/javascript/examples/map-coordinates + let siny = Math.sin((param['lat'] * Math.PI) / 180); + // Truncating to 0.9999 effectively limits latitude to 89.189. This is + // about a third of a tile past the edge of the world tile. + siny = Math.min(Math.max(siny, -0.9999), 0.9999); + const xWorld = param['tile_size'] * (0.5 + param['long'] / 360); + const yWorld = + param['tile_size'] * + (0.5 - Math.log((1 + siny) / (1 - siny)) / (4 * Math.PI)); + + const scale = 1 << param['z']; + + const xTile = Math.floor((xWorld * scale) / param['tile_size']); + const yTile = Math.floor((yWorld * scale) / param['tile_size']); + + const xPixel = Math.floor(xWorld * scale) - xTile * param['tile_size']; + const yPixel = Math.floor(yWorld * scale) - yTile * param['tile_size']; + if ( + xPixel < 0 || + yPixel < 0 || + xPixel >= param['tile_size'] || + yPixel >= param['tile_size'] + ) { + return reject('Out of bounds Pixel'); + } + const imgdata = context.getImageData(xPixel, yPixel, 1, 1); + const red = imgdata.data[0]; + const green = imgdata.data[1]; + const blue = imgdata.data[2]; + let elevation; + if (param['encoding'] === 'mapbox') { + elevation = -10000 + (red * 256 * 256 + green * 256 + blue) * 0.1; + } else if (param['encoding'] === 'terrarium') { + elevation = red * 256 + green + blue / 256 - 32768; + } else { + elevation = 'invalid encoding'; + } + param['elevation'] = elevation; + param['red'] = red; + param['green'] = green; + param['blue'] = blue; + resolve(param); + }; + image.onerror = (err) => reject(err); + if (param['format'] === 'webp') { + try { + const img = await sharp(data).toFormat('png').toBuffer(); + image.src = img; + } catch (err) { + reject(err); + } + } else { + image.src = data; + } + }); + }, }; diff --git a/src/server.js b/src/server.js index 682e07e..468b713 100644 --- a/src/server.js +++ b/src/server.js @@ -24,13 +24,12 @@ import { } from './utils.js'; import { fileURLToPath } from 'url'; -const __filename = fileURLToPath(import.meta.url); -const __dirname = path.dirname(__filename); +const __dirname = path.dirname(fileURLToPath(import.meta.url)); const packageJson = JSON.parse( fs.readFileSync(__dirname + '/../package.json', 'utf8'), ); - const isLight = packageJson.name.slice(-6) === '-light'; + const serve_rendered = ( await import(`${!isLight ? `./serve_rendered.js` : `./serve_light.js`}`) ).serve_rendered; @@ -575,11 +574,14 @@ async function start(opts) { tileJSON.encoding === 'terrarium' || tileJSON.encoding === 'mapbox' ) { - data.elevation_link = getTileUrls( - req, - tileJSON.tiles, - `data/${id}/elevation`, - )[0]; + if (!isLight) { + data.elevation_link = getTileUrls( + req, + tileJSON.tiles, + `data/${id}/elevation`, + )[0]; + } + data.is_terrain = true; } if (center) { const centerPx = mercator.px([center[0], center[1]], center[2]); @@ -698,6 +700,7 @@ async function start(opts) { is_terrain: is_terrain, is_terrainrgb: data.tileJSON.encoding === 'mapbox', terrain_encoding: data.tileJSON.encoding, + is_light: isLight, }; }); From 9bb270b6c577576324046c76303b0d20a9654326 Mon Sep 17 00:00:00 2001 From: acalcutt Date: Fri, 17 Jan 2025 18:58:26 -0500 Subject: [PATCH 149/152] v5.1.2 --- CHANGELOG.md | 3 +++ package-lock.json | 4 ++-- package.json | 2 +- 3 files changed, 6 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 99f07da..7ab29fe 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,8 @@ # tileserver-gl changelog +## 5.1.2 +* Fix broken light (invalid use of heavy dependencies) (https://github.com/maptiler/tileserver-gl/pull/1449) by @okimiko + ## 5.1.1 * Fix wrong node version in Docker image (https://github.com/maptiler/tileserver-gl/pull/1442) by @acalcutt diff --git a/package-lock.json b/package-lock.json index a5abd15..b141004 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "tileserver-gl", - "version": "5.1.1", + "version": "5.1.2", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "tileserver-gl", - "version": "5.1.1", + "version": "5.1.2", "license": "BSD-2-Clause", "dependencies": { "@jsse/pbfont": "^0.2.2", diff --git a/package.json b/package.json index 201da6b..8fffb37 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "tileserver-gl", - "version": "5.1.1", + "version": "5.1.2", "description": "Map tile server for JSON GL styles - vector and server side generated raster tiles", "main": "src/main.js", "bin": "src/main.js", From 467203e125e82d1f9e218e00f007cc42437703cf Mon Sep 17 00:00:00 2001 From: Miko <39791814+okimiko@users.noreply.github.com> Date: Sat, 25 Jan 2025 20:14:57 +0100 Subject: [PATCH 150/152] fix sighup (#1452) --- src/server.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/server.js b/src/server.js index 468b713..9a3f8a8 100644 --- a/src/server.js +++ b/src/server.js @@ -775,8 +775,8 @@ export async function server(opts) { console.log(`Caught signal ${signal}, refreshing`); console.log('Stopping server and reloading config'); - running.server.shutdown(() => { - const restarted = start(opts); + running.server.shutdown(async () => { + const restarted = await start(opts); running.server = restarted.server; running.app = restarted.app; }); From 7662cb84ce9f7ce37ccd22312155e2d300a586e1 Mon Sep 17 00:00:00 2001 From: Andrew Calcutt Date: Sun, 26 Jan 2025 12:49:53 -0500 Subject: [PATCH 151/152] v5.1.3 (#1453) --- CHANGELOG.md | 3 +++ package-lock.json | 4 ++-- package.json | 2 +- 3 files changed, 6 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 7ab29fe..2a1e4e5 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,8 @@ # tileserver-gl changelog +## 5.1.3 +* Fix SIGHUP (broken since 5.1.x) (https://github.com/maptiler/tileserver-gl/pull/1452) by @okimiko + ## 5.1.2 * Fix broken light (invalid use of heavy dependencies) (https://github.com/maptiler/tileserver-gl/pull/1449) by @okimiko diff --git a/package-lock.json b/package-lock.json index b141004..592bee7 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "tileserver-gl", - "version": "5.1.2", + "version": "5.1.3", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "tileserver-gl", - "version": "5.1.2", + "version": "5.1.3", "license": "BSD-2-Clause", "dependencies": { "@jsse/pbfont": "^0.2.2", diff --git a/package.json b/package.json index 8fffb37..22f4d00 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "tileserver-gl", - "version": "5.1.2", + "version": "5.1.3", "description": "Map tile server for JSON GL styles - vector and server side generated raster tiles", "main": "src/main.js", "bin": "src/main.js", From 1d60dd6afc4a565116b0eb9ab3d18cc6fe0752ed Mon Sep 17 00:00:00 2001 From: Miko <39791814+okimiko@users.noreply.github.com> Date: Sun, 26 Jan 2025 21:31:34 +0100 Subject: [PATCH 152/152] use ttf files of googlefonts/opensans (#1447) - fixes browser console warning on the index page regarding too large kerning table included in the original font Co-authored-by: Miko --- public/resources/fonts/OpenSans-Bold.ttf | Bin 224592 -> 147264 bytes public/resources/fonts/OpenSans-Italic.ttf | Bin 212896 -> 153256 bytes public/resources/fonts/OpenSans-Regular.ttf | Bin 217360 -> 147528 bytes 3 files changed, 0 insertions(+), 0 deletions(-) diff --git a/public/resources/fonts/OpenSans-Bold.ttf b/public/resources/fonts/OpenSans-Bold.ttf index fd79d43bea0293ac1b20e8aca1142627983d2c07..b7fadfa4aa59c43b38f7efd87cd438fab49679ca 100644 GIT binary patch literal 147264 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 P*DZObLzDocOV;{7XLP32 literal 224592 zcmbTe349bq+CN^^*W8&qlRGn+9E1>Zk;HIi2qAQM&s|SFJ%kcM ztoRa0YJNqpo==B7){*c7z97W@SkL?(1tgw-mGBjZ&?~BEY2ON6wlN#$xK1AGSq zD5=XEgs-#_!XNKjk&?b;$_pWc&;z($J8bNb35hSKj3UIe4+De^oBEj3njH2FA(1*xUL`h==2ehvp%>%NZf8hd%rho_>j8a zE}aO%^E=~u)+jUtC2GrY{us_ zl92eM36q9Tcwf`}2q6&+zFUOhj)t!5_)^Ym4;wrGN;GOT5OOllv016VFM8pQzGbI& zxq3PJY6!<#@xguS)^auAJm@t4J5F5ciajAhZ>sOh+m47dPrUltPqjf1StrvwLw~6)2dGq)H|u z#QC5|Ejb{Dl4;@JZPe3A3a+ga zmJ=drO#Jn3}ACeJ4qc6{t&MC z?*Z;vn?PD`^J4)kp2Mq23Q8w77qJkqbs-ZOzUj8sCbU=c;UtIMuhNtD{xT4_@1o$H z;rtVF#4^kFTg{S_cX1vb$3N=A30MGwsa|W(+QU8Ei zh5A)S1K=UaUvCzVk~}S6bvgMU~%$87_zLY|bd|5$e- z(%oyIF~cdN>;1LrB$=i1*Vg9;8fLt=!_|qCP%jAa1?)|kQ$DrT;Yt7_c zkvS&spl?9#nd~w7zrTh|Z3d4X3-AErdB%5vx!r}ei5wJ^Lc>vi#dLwNiB{4bkn1LL zM%YI-;QXAhi5wK?x4zHhPSmz;lwN7wD1@SJY&|YTwl0#2T95O2ttS;(gRT?mf$x0C zCF2>u#%RyRW;A8=Q}mZ#&jHSIc1^sAcF2zKHgqj;#pWkn0^XtHR2&&A6+y>9E)^L| z2EHef5=K)VMNA|OBHBQc&B9W`DYAm=d^6f`UAPWC!D_}cS73QqzoSHA*A+SXfrO&Z zbftd|+Db?wd#2PM$A??@h89^Yhz=TkV16>>hji`if#hmijlzKS>UjgL^3&+n!#HP zw@1;2g1IvM66rANV&%MA%*L_brU+xf+u%oO9&iPFAkM+HTryLI{;Eqjeg)S~aqxU^;{80gNp`&oCKc{0ABThRL}q9B_x@e)M55urYv(&B6}wNGP7|mxn*r zid-=HfQ^S&qZDQf=^+xz3Rg*T=|K|8H~5MW2fOVeGlfhtljq1#=^UA&&4o^af57|( z?mBz~6rlk&M=MX`hmsNCS>^|ntK5KPCCQVR|By%$)j4FL2zoPK1n?=s$tb8hbQ~ArcpVx}qxe7QU&#u?Kf{&Sgt7IYgG@3Q z|0%wK-=0W~@+3U73eTLb-i*1UNb4ZS<4Lv32AgOjczSa%3Vh@{7g2xCiXt!IYlZ&c zFZDj?R~vkhp`b5tpjrpM9|5|b!#Qk)T8nYPZ_;?+pqbdzxL2jc^&p&2B+)9S8<>3h z^|lDU5ZJx`8b0bYO(OWZ(FdC{UNot`J1&!1X6G)DQNk3m4|u)-op&1Ll*2 z37E!!_pXB1e;|Tl;~D=$uk%-NegX6O1as*G_!nbr$S;#2=yu2&U}e7DDb#V`<(ue# z9(@`h7YA|uI_9<;&&TsL1apHtO4)!l7xLk^(TYACfw7tHhsPhNaWBJ>Rt5bdRl;8x zPsWO8$V?{xOa@UO5Gx@otI-cDn?TL<6Vo$H)%dq6yr54GWFbejQI+*DbrtcJ;6QEBM=AQ`N#CV_SsBqvGJ`Uznts06_LPDjRkjo9= z`65!H&WFC83Er#1oHqf!5uis2=3|09T!3Gc0y&)w`Yr{|PT|>qz{i8v&%6+~~ zKp*^HwZhj-cQZb}uV#KIbjU2|k7U%)NUUy7`(t5#3)i2RSm8g%dhY@m!T*f)9dtAb zTf;d}{$u?nrGc)OpyT~Mn&SU5ANan4b=3jb^W&&rM7|^Qcdu9*43UHWT)# zbt8@sw6^#PIY5?@-HMXM`j=1~>7fY_4`OXQ>>CRcsZO#{+yIrEo z>I!x_T`{hBS9@1Y3>PEC7-K9kVKGrLNil^nwK2ovKDZ;ut*tGst$^GKh@m&ghvZ}0 zhGx*AfOs=~6%gO%LKKLP1LA)GVsaPaCjs$O{8s*D{u4k zu2Hk2Hb=c5bt>vQASO<$)8TX~5T`qH{186|h_?dbm;V6qAV0+B`yj3Z!~_sGx3;!^ zMM&#ctw-=3D2?PDvX=~L?Zqh5x>}wuKPgXb9o0Ilb!h8gGO{(Fkd`y-TFYs9t_<#L zfkl(SeKHiatogd?>yWQzd|ginD_PCVn;l9KVKN%dg|tlgs=D@)N(2T;n&9fAi0iU-->@1HXdCgS*?%MB0`n(RMVM zwx=mHm8OB?GiV2zNwa7+eTe4Jj ztLb1`Lm#HKke8u!7_Fnj=?H!c9YsgeG4v7oC>=}3(eZQwok%Cq$@DQgg-+$Sa---5 zx{+?8&(qEPHhw$ZO1IJNbO(Kr8_kWOKhn$e3jK**rPsjA|EAaJFZ2fem3xHVq`z^i zxM#R$xz*fr+!}5zw~pSTzw+x2i4)HXVYI2%z3@$N!gL6dt(qqEl87>{bm zea*Fv9`qdXhn^l^PtV<+)a2|;IRf_XmvQ$;i$2Vd%_;trYltrxHdgH z?%{~qz=p+4dkm>-EG?_*kst1Id6V1qY7BDYNw`G1E01iHx;LtnM> zmn=JAB13DF^mXpKA=Ool{1Du`gzvFr$-+i+Qe&b!zcF#f*CD{s@WyuT{2q--?5VxW z?~c>^-jK9Wj5E2NOMWGoj{B!8n8$rBL;NjLoatA>E;e%A8)OT!xrmU$aZwWDZ9fT~QrpuBgZwQNvT zBNtcT95n>Uz<;jW^-#FWe76rC@ZT>JpasYQhFva(hNTBQWGGG=XO~s^&Yfgv_+H{k zN%A&wwd~5ffh+cY?8@xGmAkjsx$4|EG=$!H7;Ex-iMd2$fZho_t`;GsMp%J@%xg;Eo}+AlPU|*Rra{6!(Nin>)|P zMQC7P^%z}IrQG6c?a^rK-iRFn|6PqKJ#a5rzsC~BY5%XJoDEXWS>_$p5#zecs@^0S ztrz!naE8B@K{^m`KAzMV+#MVl-(yKt-H68M+VDEa=m=+3xU13Q1vhxzRl~iEMS;!4 zivSHDpa6VTS=GD3-MegH6*$1~TU|k3T%dT@~(o44Ac19jA6yapAld9ZhI( z7U000*BRf9syH=@3B*xa8I$LAc2?1F66g&u8WWv8hUfeHvGWHWiW5Grdtu;d5V!pwe(z4PNff+I)BqVFKc;au0WV-J_h1p3*9Y zB8DD?B7S5j^zl)!cV*T6XZIlsXd*6LRxsyBW@ACpT^usxHuhA`1Gol%J$SiS;Ieax z+TFWi38RGD|3CuBdo>cq?w*Itm^QQo;}|#ew9^FfSA>7b9*>6!K4T8&5_hkt(`5f; z+h;@WN*gJ@D+g7%Ad=3oli^EDKQT&qp@5c{zDf2h)wl|s{hXBV7hTBri{e|OON)b} z`}V1eE-9{yj_+XV7nc#+FVxx^trA+JC0y@Q92H$xOp6N)(bf!0KM}VI8MvLNMn0E+ zmFK121*Zy{3V3%$OuvYX@P5G=_I_q+>}Sd__IuTM#>k}_Da|1L#*CEkD%iKDY+$3bsFCy=IH+n5rB8Y1FJDgbB6~Nc zS5!4RBfY&F>u_L-+!IXlypty<;h%jb*Gztl)yfw;P(C3wh%Y#>Lf((>DdK+dGA5-uz7KWx1jCqI?J~78xt}|34oV3B%_baufTIN#rcqOF0~) zke|o}tO5wd&MH2!{=fcY2DwIO(C@hk+#>FE?n~au_vT0O_53FO5HAZ!!gS%1*jAh` zUX-*_z4W=ttSVGZR6VCUqK;C(qQ0&v*F2*+rIoaq+9ld|v_I>@bpv(Nb?@kI>pSab z>OV2W8lE)lGF%8U2aOGSHRvm2h_R!w$~eQg!}yl*qN$_lDbok$Nb_X#>y|Q0gXM3Q zTh?4_f9qcBPqtLsd|Q*|OO(f(DiJ$Pd9euwDj=$P-=;J6%;gum*LmqUfn+R(Q{ zzY41jdoJ7*J|g^J__^>45o05sj5ru^BeH$uyvQAq*P`4}`B6_qy&QEZIy1U=bZzw1 z=)XsQ7k$gAafUhDIlDMFICnbVbbjD$a{lC$T}G@A(_M32t6bY$ue*-B&bfYw35}T= zvoK~&%u6wUi}}zU_E6=l(u+PVDm7jj?}?eJl2(*bA{g$I&=z+{(BY z;`YQHiTgC}%eY_SJH$U7za{>)_@nXv6aRHW*MzyPS4C+Lg6i(eC4Rm)c!#Cnsx?!;;%3XC*IA{(JIw$-lK%w-0IGwtc7eyHe6q zx~Ej6Je=}K%Ht`^QZ}aiHRbJ;k5c}b@@>j*sj5^uw2#vMmG*NwO*f~7GfxU6Ye%d%d`+Mo47)`hHJvZd^x z?BMLI?5^1b*(KTivtP}ABm14~o7wV1(nI+V6+blbq3I7DedyFfXLGvc^vYSA)6&t{ z(bX}nW4DfF9fx*&tm8jB_2{&$v(R~b=QCY&U23~5>GE`!=B`55?5?}J?(5o|TbTQF z?!P>to&lb>yTx{!+U>J$-*vl{r_Kw>OU&z(_iWydyx;O#yQ{i~c6W7O(EVb5e13L* zVg8K#x%nsZ&*Y!$(WXagk0*P4T@YT-u3$*P^93&!yjt)^!8-*f3eFUq>*?y5*fXtX zUC)g@KP|Ks4laDT@cUk!dTs3WbFW)P1B>1$`g`w~-fer=_x@M0wK%qTQ1NrcU-k*^ z6V)fbPjR2hJ~R8w>+@ru>m_j|gG*MHeA?I1cWB>@eSawJUb?b$OPR4Ox@>IOl(PD= zhO+0%ekt!&{(O03`Mc#eDncu|R`ji?t(aIbx8j+K9Tjg>ykBv?;(Dd3GO4n-@{!6V zl`mIb>}T%Rt>1!v*ZW)g*Yy8=03DzikUe0;fJp-y2E12gta`Gl)jQAIJaE9k4+pgw zlsag^ppAp}4LUXG%j&Mx)2cUA|Ev0!!Lfsv4L&^hTuqyr+M3lhXKOChTz=U8aPGrH z9-jB`j)%Xfjjo+g`&RAOLyCv2{qw(}SB6y&8#`=D9j)tK_jcWxx{GyJ>TV4ehIbr3 zYk0%(=ZDK9YDYAVRE;!^3>_IWvSei4$SETij9fi($Ed_nPmcP>=r*ID8hv$4)|h!? zu02xy$lo9B`{?&$XOBxAcXiy&aq{?z@h^?PF`@H>k_ojFewa9M;@6Y)h;++1}Z2&54?`d#-10@!YDp%jX`QdupC)-oSY~ zpQKL?esar`U(HXMKV$x>1z`)y7c5#JFC4${=Ax;Ko>P~~9A*x|=!^wuGhAR#73gZgriqsW(D=JnDUomyXq7`dbyuae+ zO7+UHmB}kTEBmb+v+~%}&Zh@IJ^blYt2(XP{EYZa-7_bibv--v*)yvXR?k@d{&R-s z%AR{;jeSj$Y0WQd#kJvUQ`hFLtz0`|?O)a| zS-WBFD{J3f$E^!q7qhPYy4-c8>xQhGxNhFMXV<;B?#*?l)}3E>Z9QEdyuR)FPV0-; zSFNvGKVkjj>zA+Jw7zluk@f$x{@eApHfT3QY-qos`-TAUxj*mIt!NR&q}@FK@^YK_3F2!SfiFk5I&jyc1ek(O$8 znO)f^hxuO3Z;axmw=5L*-!2*@e9N9QrS%(nR(Xz*#Ct5fR?7*3$xKxSRi)Qp<#>{t zn`9=+^UN8_^QfD5(GFP|>A`lJ7!y4|<2`U6I)e@)T@$ih(>1K+@ewdz?N)dx~q0kM9#}c`>@FnhV`I$4Z z!k&W|wIGZ8kQWwB>OJ}Dh-kZD(`d8;#ddRuC`uM%kWSEAt+wE(NR=Qt93de#Nh>&A zYC)%qph3~ZXbiPmg7BwxSb0fn0RXufmK-d2F*$(2{*}r?9SnVz|Mm??RW3UqwYpi! zbY-JhGx!Wv>|#c?oBu9_a`L%8Uz8jvK38;=+EbdTt4~v(<0a=xer}0;FXcVH`1_CK zF?2O6AASD`eNG~e(?Gf8gWHZp+_L#)|lPDlz%aB1QseS{;Tuh-^~^rc==;w1*0ya2$10aMOQYpq-M_YirY!>EHJ5-oB4| zUwWNuZ2s(LK570R+XXVKzWMgd`ftDc=^{P((?4z(iTj&5U)wj|{d56sjN;|3S0sYD zMS|jKWTGc0+2GdF$Y7!kHdw6*prjwvX2& z2(DtUV5MN`+$0hLp|y~lkQ6pcg|s<}m@$pu<7q#|L3H#;OLe&tAj`3gqzYku(ygLd z*)B+G9K%62l_c6B9vHIQ99dZskrz&W=ifKvFQ>2So&UqpgBO;pqY*tj(5|shls3OR zXZRDt<$WEy(~*Ta-TOS;zk1^Qi|;HxT-kr);57&Tx^mhvuY7sRfrWDGuzCGQbfHD< zYPkiOT|Awt#-t9$Y8X0$ZcucF1xk(=IHoL4D|7HE3Pnly^aBTo-sU9*c+L$w3$)_K#1dCQjwfvSfDP5;B4IKlN1cXG=Oh742i*9 znJ#b-^q$#Go8)>ruZhl+>zlZ`Cb~eL(S-dR%t*dPPm!zGfwR8>(;ppRe#%ghx*SCx;XQ zp68h8+-El_bx}UQ<$`>fb1{pFJ2+C*dPOM2s#}M3b{mgP4<#*;kWh`iuUDhujeWhy z1r5mGT?-7paK#X_$>K^U)C5t=GMktj359p$J1uhSZ7Q@-z9n<;xJPS;JTkV1Ym(>4 zE9m3cW0^=z30ZiMPQ#N+U|~xYE!4#m6%j;L zB$x(AMF*=?oYtZ(@mf?Iji3=FUN(qN!}uy@DwXLnA!CDO(ym;lqAXMiT{&nI<}6@% zyGtl-=IHpXb?t_f_1ipP=c7;U9JTn<$9g_{=nz+bj!u4Y&bUrh{Ywf@R2L`K?R#wa zo`bvhfM9?Pn9l=j@nn!ECB^}*sNy3ckc44SCA4ux#YO@5A&wA7saGFD4SYz5HdbXY zX-$2-T1FBWyb##Gl!t2uD}V=_8VHpCPeGGnr7_&39GmW6=c*rQ60y9t#L3J@r?v}t36C34ETUKy$Xk?=tqvh3c9poD{ zMgD}QoZ}mtN8jpt#adn>KLQNb0mGSqD4g{7B*C0I_)wcINFBth`G`oHRb$n|%=Yz$ zBB{l04=M55B}w1cE8SywW^fd@LUBEP450wXED+Nn%w;5g#5yxOxEMN_d&*~LaU=fc zj{K?o-Hp|KKdqtRa#QB)HZ!yN(3YFw?k@a}t7m?dZ}p|Rwwd3bx9jt`ALQHeB~=jc zSO};~#S`!dVo5iTOS0(oF)<{wrS$P7+ZyC=zx`RhI)7FD zI4W5GGHUXqiL*ZYvhR>S!-tmCi6`ILGU3%8RqssN*Yx4v>W>ul-S^1GBXw^ezIuLkThsJS#7g25OwLlT$;1Z-hxPRa zt9W(k{o0r@XMo(8kR^w$I6&=~giHoJlNNYDaB2yNZi!Q-;hU6DBtIiJ%b~9b%iNZ0wT}+1t65Ob7s#b@|Dap;K}TP%DgO1Jm#KM;eBtnukB@nL zW+|h%f2D;iCuTX~Jyr{Zhma7Xz0zwm-8Er~)KH-0HI zb7kHtjK^&8S&SzU3oMn@pi)_RL4prw)tV~3T9Y8bGK0g|Xr?3SOqswyI}{7e-!~XN zWK^tmN?@?74xiQLngWA?pR33zAqT2UA_*RoNSXassRe}8!Pz3|qBs;7A;4E`DC8&D zDHU>>qxnlMmE7)AbbkZ=`Dgj4{2jwr72N_4h4HnD#Cptdb71P!B1>?=5*5$KGgAgL zAHfeha}y{^6@Q66l8Vz_n@^&kUIot1RBcwaU2-{zxq~GZX4OJjhwN-zm!uQbJI5DI z3N=0Y;+_ww{vZ9%baxbciWmH{;RE^a&m-|AWQ;uX@A4fa84dWHuB74@bl{<8vU^~S z){x<;U&{Tw;@YB~9p`-Z=2^7Z!z0U$2sdDljj#ny*yMI9n@teHqI9|#tow{cm)aC+3hm?7o8a%5Oh#f1EA|>K zB&67jyYH!Vh1qL!sy=(dV7x~F011o#A9Fyk_9ljq@Hw~Kl6Uav} zN%MrLtX3?>4GtS(7R6q(pc1uWu~)13?aVb({ILLd5QP}brFOx~6^qk`K$T?4a47e0Hv`e1~vS{{6D-=p#4xhQ~bSYdYYKkw2k!WT%AiyQ+i@hQ*7_ejp`Fsw+eS?EDVP&0g)?IFMhEtp(50@X8htgAY1YIV- zE!S?JPv3Chxq=zRKZz&Liq}5WYmo&v*y#y*TmBV4) z98a~yUba}j&lyo%(*P6@FU4tR3ofMyT=RausO1X1CYw1MhLzuu<%LYUVN_nms2bA2 z6Q<^Q9sCJOwQSJ)#$&4+g$bA$yf@1IgU}!3GkihIWeOd~23XkQqoSAqDu$6_PeNEo z2p429aGW*5s#b>wnRF&F8`utL)(IiOVld_=f~bm@syN(9_bAI0o$|*PuP!t618A!_ zTq;OBR^%|m*=85_6_>yK_qp=x@>cpR9eL@Kk(>W|^7_$(L+a$qd}fQbeH@*SWVE4l z*}z++^7XH;-my`(o@TTjpGZ&Ac}f5U+gVbQ?**uN<0n6e>vR$iEZs$tpI}PGFr`>p)R+%L7F8+8 z%7$(eOXbb-oOujgGw3o}C3D=UnwFbD*|6R8-z`|O`lKTlql;`#f(qJHqR^k1lwS_~ z)PR$#Jof-lUncIqQ-t(b}!S$PIsfNamPbPn|1Gr!(q`J2Bp+sHKBF3emFha1{P&}i%=D9C8E8KBh- z2BXQOF7}#uSfM}BHh1ldh$XhNUUdre>WGG?rp;Q;9g;tnf1VE}I*VY3otGv)I(F0t zS8li568C?@MxO>N$uMAq&z0wiVJ|i#GN=}`2yTa)wAwIU1rq~61Qn1Xs(_EmWZduXjZS-#=;QzXgq)-rh-E&Ov#iG>QL9Hhh(Z*@2XEn>CW zV0$R^g-#b@)#!<)4>YGvuLsife6UVonY&6F0bD=KrVvD~83Qp%1l;#*G?>_Dzlj45 z#?`u2%NkbK0D-%Z6CCx_Tv}8o@07Rl$wNnvs%n|uaz@<$`T02~b7boZ4(a}s)WAkN zpxqN-v0}o*!d%29+Vl{zHi}?-mm0F`Fs1>C|eg zMFTAZUh<2UFDB_1EwfD$z&uRz`WC=uv1X-w^>6aG^7}M%(Z)3}8Ocj7Sz;(rS!0t4K*mh-l>X5fPD*(R!UO zD#9x2_zCDve6gAoGVAbY9Tw)SM_H(8*KgyD6$3Al}vW0mfuVV;Ub~ z5%?GT%bVog_}fRnkvk&uy%QFAC2}U0*m91$&b`-ioeOG7^1*cz#pe}9}((y~=aQQ(fbQw86gOTOH4!5=rLBm?6+ zl<~1YgCK+kQ&kgHEF?7mfG_ftmg>kbV?WjG%D8ZWel15#6f4jE&OBP8=F~zL@omHy zl07zr6+}rugh7pKpp8o8Bs_@)NRj=ckU`Owz>gKi-i;~K{VV9TYjEGc=hXcE<|1xh z3tlv#t-#}3mn^u{khe9kYIT;PoekB+E3 z@SQYTaW=Ny!_NC$y|52hXemA(K3=fH&K=FYkx%>Q?iN08cP!67{QYod$@)X@cEbCS zY#+186K~P0^;}F$NJwm?TJ6?{_V()aqRnP3@Y>+hiO~gKF__pDo9bIEDVuxu+*ihW zY&GY?a$8cOSXf1~-AsQN0UP=VBPgqHencmApRMy=c=Pu=M_yU*`tZY-Fa0ckGIjpk zXU5E0Go<%{U3*{BNNKyuJ{tbs`z;O*IIbEvXU1^Aycsa>!+wF_4G=?#M;w~A1b-GxXB6eZ^9{oM8AxrTi~$5TDVor53nKJ>OeqP zSp~2qC?9nE;&&&GO|WPDK-2X4MlOYyB42iBS33)QIj~>}7Ii(nqKOy*S#SU{KhrYIiExZq=vOgQ zW)mzd)}9hKqU9!bJTynv4J>@T>(#4Ot9utcXXCoiNSa)HB{B{g_&`d!d?zIq_`$fs zL_dB!9+xKA1cy2(h#|^pwCjl(n`;VwObUMPLcxsbJ^TPe4hByQhYcgFdNbmgeQ|@Z z34n=hMkrR4k$@%1AnPO{t|lNBn+e<@R3| zZ4DsD59LrLE*K8W;N~rY5Nb9@TD01T5W9u96nS~(MUf(}!KAVmcvbhqsf1APx+Tmq zD4`yZ&4tCe;%8>06T97|?3^IBBXQ%0j8oIy+@vh|y8JN>z4a4Sx1@+G<__OCv~)ke zZsx>^Gn>odt(Xy9%aE^MeP-^{ZQEaIlfWb%)}5b%H)!povnR^NaVn^rU=bI&C-)w_?<6nAw#(bJ_Pu{>T{V1Bq-{`!r(a_H&Pi{)Zx-$d zxrGBua#Q>AeFlvgGw1`*ZZov@ zpTj4O%3@QoYG#&=p{&-R9Q>Ox!cO_jzS)!HGc*l5_cw(^;eFzT!$h!8n<}h zw*NT}9$y9Kxqz|pE ziXF5o8$_J-?6W=l-fT zN}(jkr>xVJjRwVAl=#4a1yd>udiCi^(>|J@3@h70f426o6n5Q7+kD_ z%qWQT^0)=qPDHLHQ8Wc<4FI8}IriU>e^%p>%zyWh~`mCAM(K zzi$<91jN{XWknRjeMivupjRRxo&Nz_u$?h){~E@<04C$LNk>0mgS~uQ0idkn> zFe|bKqw286#VTLY>%)oF8WybS=?yj+`JP_mU4`ru7{%WVY`{TcVC0|>xJ+iwf-Q8_ z*qJjPd35HCM|n}cD7U_F^GO;-c~o55j$JRkxMRom7v*d6hs&wDky>c#GWj-xVl%Yf zK0slGt?%xM34z;>sFo_yq%t|7If=nw>j?v)Hmbr&_&t;AM@1l&%}g)EFv z8L<2|PT~XB9;o7_V-rj!`OK}PphrGEesT1X^NO`UJ>1r?ELiR&6|LNX-S(eflW#5I zS1HDxmc!UHd;!vl3cj4oD+%T!d2Gal#%K^A4-0n~qk{Doi;C$RJ?ZJy-$mYkSY6*9 zbzH#6VoB%l+u&eF21}qccVK&j-1x^H701s!_lR)(;x{M8Z0f8I$NKRjgCT88)BGKA z`!>k0?A&n;UcU+G>`+?S@cVxHS(iu3Dt(f`PXnwbw!-8r3O|{dS~7?t^OxX*`=!Xo z;WXXBE7mH&;k>D9q9ZQz>8qR;GF5%-~G=A?^IVlUA%C>s(CXy(&F9wT+Ze;S+%jr zIq_N5(*``dwd#x5_Pr82cgn2(3xhWW@MhzeO6&wVCwjHfXtiq9oLOxSc4#d|OM%y* zHyTBd4j!35iRGyTM#vX6dst>?~+*3+ASkPMEagjTfKZS#=ak z<`caxxWCGH^Gz;%&WI~lziIiVTUQ3dI>;Pie30~XPY7o=+ibyD``axVBPRxlLCV;Q zhv8d;-CH6*;B$jW{xE>c%pXWJrR|%1?0uTXB%Y=u*YT$^B{WKVmhK*ybF~ zmHP`dE%T;7T05Vs_l*G+EFHrbkt|zM6tvJGk;LIZkXjWU9uX0Zg+Y{q1+b0AaLGtS zrhB1%fm00T^Q06Mvs6(Wuzx_nBTx4(7%UDD#WUT@AQH0sKc@OnJ|G{VsdJ*8k`QfL zLQCffW|M(Rn)ccSG)aD&E~HnRmkKqqdH#>Z+xu}LE#C+CA2K+i@J>5=4S-`64BV_% za8vAwl@K7&V5y0@L4_!cH@-Qsgqf#(-K;m>Zn+fqN z0lNtrO^As(HfXX4!FCh&eW4S>*;W(C=5qmjR!i{$6o?f2;1g~$3!?al$kuGWG=%JI zT5>jAE9snPXiqtz+rMAvTb$jkYN|5!e>Gi{I6}oRj2GK2KJ2 z+I`&NAC9+_VWeoR;XlI~KAJ^Ec$+#p+8h$%G(<$W1m0>jfSY0sdjE1>;Z$V=-%&;e z!#!+rCUz<^Suz9G26i)+d%<=)Q?+(TE{&d7|HRxQH-`0=zW%YO?#2-sG@$xgRk@mW zU0Z*NFUXfaI~1dL@6pJgNDZKe zh<>DGq}L;1!LJh(mF?$qOcypa6FM3}RPY9(#Xym8S)NV6G#@}YMRr;xIm%^;!x1E>^FYGkul*mtHZ*?@NmxI&~n;{$WUuv zuR5r&mx$_6{7K=V5;Bu~N$Z#(HWKg4O2XhQp)?kY@n!kV=w!Kz<`Cl!=$tWtE|OGv z+8Hf6PGc~H1qX8>rVxw86cw!x2@NUpYC=Pa6{g9Egvbyg0^kP{sC-FqzE>ug3RP$W zaQ*t{-U1XR%BF%}!MG_C8HQje?$FVrgEvktsif27#m{jc-T8iGpS^p(5l@wW>+x0` zZfe+7A~)Y^H>qxA)6tWkgJKhjEVzVSz-I#1$T23pRUgB124UTFM$apxAtBpCO)+L7@N+6ca!* z>~1?NE(P&GK0>vH2odJUbB^A;c~idh+i$yBd(6qF+*0w=$(Q&=K(ZTAV-d?1m+!tE&%?;l^=}=~> zXa{EQtSq5F5cg071iF@`dMHVJKC=T&p}2SPjL;4iF+h}mdSRFO7xwQuT%NzYq^xMz zq^;}fyXIaydFtu1;{`|J2A00DDIaoehgY15RYEi$q_GBBr%E}gXP`3CBYa3%t4@07s z;z}s51>Hp~JMeLmqGkh{#usf>;z|@*Oc}^xvfDW9g2i&#@C!21W7!J<_;nfVRL&YQ z=2Xs;Ie&Tb!;9xnJiDQ2VsribwB`d=j>ua+J|k~A`qVZWv1J<#-?~lyddoKXo2~ry zXXeS@M@7DqbNl=kzn1LmDF2|`BX9ZOn7rfTGj!l_*6qIA7-yw$KXV6=CFvk8WW`2> zsHnpcWl~|!M->(0HX01kI-Qk9Ww7{?t6V;IsJHif*wIoIDO%w?u4ZYrIU?PSz z3wVG!Y?6s04MMUs#K6xf2>L7Ht+=P4lh1E8{T=TxWE@s@15AfuEv(c*sS3Y)q*Uc} za+CZ6bu`J#VG<^N!H&O>pF(i=1ooNbZPVznuzQEhI+I(l&bi262=lPbC>1svk)W&C3#kKUd}^3B3o+zZ@yi;D_5RC%jH-2XO_v=bMm@n$rt`l&ZVul zC7U2g=OML$-59uYK7xV~8E&OJHw3+8JE^Sx`B0wu6G6yN3h`+0f?q_qMIXY5;(OUk z@liUk*bvit3LD>V&Z?_7*HphSc<|=ID^I?IAGR1csGDbyFp;%xsUG~oz!NJy1FO5{ z)>MN}t3bLOk%P`+c^@H0l?vHiIz1A9bUKsSpw}ViNJ1=0SOWc+wEJ|kLZ5sIkQdhy?ToLy+<`;}ukj1X2a0;o}5uyo-=8zTY z1ZFHbz|LLO?;9f<9tE@3_mW6eF7EA?=@&=jq_!y=HgnZmi#OHG8BJ@sqMc23-t_o3 zRcq$VpVDvjl!q~9CoYHEkNnU$($y1b({XTjh*NUvOp;EDPvC7fyIm9Ejt2&6cuviy@+$`hX6RpGEq$bRQ z-8O(8s&W{E!B0l~J|GLcvB0En@x(T40;}WuCk$JvWMZ-X8m2N691es95Du-Xc>+;@ z?~;sd|5DX;lv5O0e3X7NefnSDW6^-s{ra_U*KeczE`IBll8JJ&(175n5m9El&V(f| zCTlXQ)fDmFKHealr)02fc9zuco2ZFph+wKry4}c{#B$1%mEjT^Uf8jvYvn&q{quXS zT5gs~e{bY7EVu7afyHsBaEbIR)*Cuv_h?{%^}MFii`Tz=acjkUV0vD0@0C}nSh6{H zHsH=<@3aXKafC9kC)mN`Fd0}J3x>sJG8t?Jt0suOScY&o_yJ&oM{*wbgUdJuysErw z8Hg|?WM{xDpH##s@t|dfx>kg)>k=}Y(W@FV!7^)<_n!o$ zbl(5|Qxp>lCJ~Ga6&AoyKE(Lme~QcC3a|2FcxuU5n*0t|MBkq9aBSNyv*6j`7p8ya zF2QOtuO!-I2)x~8gi`_|dGGa6pE6aDthgiMeGW2r>5b>tzWLhLH3wyPx5C2Q+`__c zLiNjskG=TPkz+gRh7Yf+8#e3@R&SuEtqzeNWXvN84_nY`?34uEGkStz?5K#hn_>Kz zeqnR_Q=@k{9oJ#-@C}AQrZn<*MPDVXlb1KqVEM-;juG?dGz~uhSUpY73A=a5 zY*%~4kDdm$@MEpHIbYj|%Cf|HpU=)3Pf`;y1_o9L_B%b8eL z)^i}9+6WyJPo_jGPsMMn`<{Bx|I}pPQ-P^2@^t$S$JGrbfq`WXhx>J*&XnY1DW=4!4-x8Q~0m~o<`uyx7VEQxa-}pmDv5OS?;9w z(XlxLynXl8ju`sem@n=OX?Qr3wz;>uEgJe%pOUKFoT83x&p*`T@Jo+w8V&ce6YU?6 z5#_f%kx#Cg%*EpkCCrg@N8V#OQNM;g>3EWq`CocWC7=B7J!o&z-`6Aj!DrM4M!{8o z56go+`UiTDF-i~ZKAv+cUG71m_4koz>69vk#%{!QKx0q?A5|P^Y{cHccu!}^%A2gb zSuj&=P!RG#^w7a}q_5aaNWsz~!CH^k7J2p#0hO#8B`29joqzvSNDpTIh zyO-6VC<$gve3?kfu8NXM5A(@Ps0+JwZdF|KbFzK4e2i-lR=1o+2G4aa<4z=6Rg`QaGqcEE# zI9N}$+EAo3AcY>OMTp!W=UZ#x%q*)tAa{yky0;gv_(P14EMA0+MJ4MSw2Na7ff?&? zB-y7d_NUh?srHKn;p0!Y{`Av4dW0|M>X2jqSC(zhRWASjn!HYycl&52o>Vc8XQ_-T z%<$}kc<^P+DtKUqo=M&mr3V)kpoo%FdtZ;KwBUd50m(b+>){g`##1aWSAjzr1y}t& z!X6xjVcQ4C7^Mf3yd)ppVb$hPyy@uw>{R~@%J*1<^`5o86D&I%+`K{ckysafd)nPFOj|3S%Upu znd)2e>sCHBYtiF8_suOCuOfVNRqi}`#v`Ku7R%ETM<=5MgvBAep9pSWr-Q z`;?TdpfHz;BqXT9_>i_4ZF_n%NQ&JYQsg!Jx7QT^R{32Jrg(jj`InH)dNTNe@Wv3^ z{PQ`60rw3XguVk=-t^%Qy9X68LTI^&10hOOwFx!tqVSzh$S(1LN@7${HbWq>>Us_D3y86~# z&OP_6-^pwHxg7gkm;_0h_I77}1D&dB54OkdV1p6ZM0ez>cVKto4!weSznkp)CGcv9yGMT#MWQNN#YZ}YTDIq*1rL3kg#c3-Th|qh#-tVeH zh=35TYDAn_aTUek@v}7^0ncNNH2uY`ro&zq%Y_xkB9oa5J6#9$B`z7Mk!M_?MC5O4 zkQc>xwFVcmED8kEl`Q$Zdd%BTKK0g5Kfcje_rNnZymtDFnZ2LC?NcU1ixB&@f7hU0 z(Ox&*amNEU-X?}mxY$;4lJ~}mvl?G}hN2G}`t`1R@5Y6ZUdq|i2nQQ+CNE!1mgTFi zMjRsh;mnLXXw~8Orzk(nX_b1CvxWR5r}&96oEoZCYIu&XR(5Q)F8_QsyyjTVKl_{w zH1f|2+J2u_TWx<59fDZPlGtjutif|X;XU{n?{MlU2;spqm^IeMGMv62CfqT*rC-}S zTJFIe-?iSs1}g8Xceu1R2!CB%26IEMpgv_1zk~QyQ0)o05sxL&hq>fDJJJ=^S^|Mo zol&w#qUcIZwO9(WT(10}kR;+F+?h$D-;Y=UgquRR7VSAzjds5z4r~NCNUOm)76Yhi zSRfT5ml&T=#ca9~J1%nbD*fE2;6}n{I7{FO)`7}g93e3@8B&^=GPwH2hj0FT?B=zP zD*tZzMfn$#KRsM!>@)AHv7-C-$#bUPHe>E2U7$Q~Td&&tS5J6IS@DhXjdFmwzdOxb zW90R>KDahIVai{YJo3PU8;CyEffH}i)2( zHER30L6|Kp<|`on$sKw&5TO={d_ir2dcdE+hN_>Zw|xSwpxT2;_?#%ISX)2fKnb5B z2l@c`g9B^WF5>o^k+>}*_Bu^S4I;D^+@1_w(Ea%W(2}T97Hmtp1WS2h_BisRqYG<# z_a0EwtJlDq-hHa+H(*>&eqTGVen8dGdPyEwH>7{nka|3KRLc%TBQ4`nL%6NfkfTWr z6bB@Q`d=PS@_&^YN-N}56rgnHls>EbuA&&FyKkvnb;X0tO&-?0u;=Yl*kP-3D7WJF z$pF(qz*5nT6UVMa6ewbrIt`uDutsSbUCmAgo_TgiH>K3^99Eb|b?_A)p{_9J1S~B! z|7|~~72c@su|K&3D-1ys`#4SkY74Z2>JuhGWTqY1PF+FtfyWN;K8)ghn2r2Fw2;AX zzz*ecRl(L0=eep#*&1&zyg88HbF`&nw{Yl#yFa>nfGd@bYq`LY%uV{TSk$WCZMwzsyx z27b?52*)T=ZDAbx#{0kqu@h{5m~5Oi9tK2IRfE?1HYOvy+Y2qUr)j@_C@k3)}_E6E43IW-}u5XT7t z^if0&w|TZ6H(asA$7F4eMa(0pCbzsCjsoyNQZ0WMI?pb?`N=!~netq@IiS3a9H7!Q zYc58t6KbbTly6)#eb`tp%VZ);X10dG3vVnt@YGWWni>#AKX+y7w!7|oZpBI(DarYW zk-<9T^Es+(`Bj}|N5UM*V>pF#If2zR(OQe@&X2XgDO_!#zUA9LYJpR@+Cn{Fr^{Oy z5bwhvRR1U^?&4|F2fj|!0#Qp(wT(E%?ZR$AE|%H`-wiPGpm(E`d>L5+xQ=h~>pcZ8 zuKyk5PPB2<#%vt%eMzTYg8ap5VKTzFLowBib5eD@4W%pP#j9;#4|HL`<^Fx|#VcUyMDP2>zDK)j93Ow7HvV<$v*T8x zbtJhMHlyW%+8yO=iD22m!eKLfVgGi;>~Q)FXqq0_s)t1Ky@(v39JOEo0ZqVhGbIHK zwT*sqO$pWjUM4qE$W5_~xmLu>));lt_f*#vlswuwu(07pktwjYm50b-r5pFkD{5Z+ zE=tcvW<32RpFhy_5v9n>MF;ln+ZTOn#|}s)GMB)-LMrsoc5ZlUg>)n}5`k9!RDa|BFkL zT-t_P^L@4vV=Ll*WbuHQIy2dy{%W2&45a$SL8+FPDY8!@F8wT_vnezm- zjr!lUf&C}$<2*raqdwM;cpJSHFJTj?V}Yf4$gM<`g=*#kuGZq2xEi9Xuq49PNc%v2 z-XNht?X${3$d-WlILaf!v`BvkBOe%F57i#4M*8CxYEK!evw$Xfd$6t+K~AOX%fV%U zMTqP4bc0YQVpn0_fpQ?3_+BVdDP7TcV9c^Z85iQ$#0x|Ub_BOj-c{$U^|Zo1M4CLt z08a(&Lt!m{<~pS-WlZ2Y@lCzhWfmIXTEPW$)*V!`kMW>&Se^3*l92{!cZ_HE6Cbcz!BaUOpms1$peo=lv_s>pq1JCu zx>AOQ`dylp79F1z{#4z|>fP|-bY`y-f={=ci=O*>h|L$j1-aR@t8uz$MvX0&<4{wI|YBs+rD zVD6Bv0&D6(TP@PGFznmsF&!E^O0uenMs7(qvzCb(0cS7y2n# zt%j&~@XBO3z2n*kR#pd;3AGJQ*%#xKjl2}~n<{0i^pyBSNNwlTC&s0=b(|l^o~UQF z*cfXALgZMORz zQWE@?ZVjO%PqjKB7mxDEX-T!@V$~#o3pidh(2~klJdQk`=jhc-7jGVR&48)1P0dOi z55tJ?r5{y5ldFfx^%^op^Pb{O5T~piFj{&MLY~mU?vv}fcALwy&`uY4O1Ite z)_Z$++SX?Ahm%@1&!8(mI?%lJ#W#r-NaFdLpA4n6($I!9|3Li2=avF~GN_h5w<%Pe`1%Dsl6Kpm>1KA`q;5f{( zoJL4X%-8Dm<3>r2Rlq}TgB zes1eHW0(sH$`A@MOEV%@6nC^E$|g70*s)`p*V`%6Xe>+h1&e((jm5=+)7c(!i&L}% zTf6`{s7@gW!z%*G`!~v$8(tADq6KU4U!2;wu*J<~v_(jN$)teWSmG9i;!+|lqEOU8 zZhdP$XO)X+H znAkpXmUqpX2bl2%=3_;J>ef=et#STRB;3Np+E2>|+c$I0^m!UbspdQk0w?h>VVO#G zai0k|inN?l%$2wU8ZlT1I7-~cMjQ;08lXC~z&Y3s&cSdxQ63bo<9lsSCtbo5!Nbbb zC#J=?<}f^QSL+j5?c@B3{umGAcqY8h6rOn zfRYFQzm@W2R2UWtS5X!Cgkl0XA=HBvvOLrb9If<%>Otr%7cZ*#EWiFLHYh;*0!Rzs zJMeVsA7zZC3)e)7T_&$LDK*t(Np|=hHk0T#`7<)@0dJtHF@>uZNmhjMxV#QMQpmVR zgtElw!^IyuvSnHumh3Lr}ltfzsRrCw%fyL{|esbKvXj2Ha^u2k8kp9IsR0r z?Re@yE=pn!<9iKlB>I41zwoMU#8=@mo3CcSU~vzV+QM-3t{XiAaX4;m^r``aMuusZ zZ{j_L!I<-2jgQ5nd9Zt>&Ag}A;12LHbRGS4$JSbHfpk0G0_5_5+RwP9Ms0y~1Zn}2 zyRZ{oLmM$4)8)MYXZlfXBc{_5ztQ+H??sFsJ9sZhD#PbJ;fuBkSrMn%4(v>u1!?*H z8;ydj22+9^sLmr2yLjR@PCkG%h=b=VNA?_k^0xk?bVW;=M#?Haqb!{P zk!-{;BtxsP>da>3=cFYgyVahY3>=F9QhtFB1Dm;uw%`P6UP4%kD&uP=h1Nhs68hR8 zMfk{uD4yQ44MJbnd7C!FYH6A{$}YW;6=Q)9e5E-s!oy31AK6i zVKXAVDfYfdxHZz%rIQ1CuOT%pDU_6C5rnM#h$TNC8j$Gq8VJLt7+PnCfF3wo0RvJ% zy@errsyzo8{i?avR#r4h7RxXps=XhxLU=drvFrN^cSd^V<%ipc!(~N92x0EoGc75Of>Q+)oPO;q zD)PE@?Cp*Gf5YJj$w|&nO8@;nIk967NfjAKot@TMf?%2Vzar%zY&bSk2?=fnZPrLE z`=79MltX;pd>a-Vd2q&zdl%m{?cpbB0!uo!tN0&qc67yj0+S~8Ro_WDO8Bmp z;#`n>{dgO@aR+z{Gy$}rDgx*Q9772b4&;p{>f0#D8?EvUuD**e3%lhLGQ1721HgYt zczqBQp!$n;hiF;=qeO9OGHL*6+mQ}m9<@rOiZshg0LcV=Qo|E<^^YBTtq;2~+RgDO~P66uEUfmXG37(xe5@a3TsR91ZgV<}3 z2v~}^F*;JWaQNue|aDr@nCYuAOU(E0PE~Zn=C~LpJg31g|lfVcBTyM;yjv zImZ%F!Ap>B)gT|2YV_NATyti`0Sx#cP~S`$U_mAyFZV%6+I$U&ad4T3dym@?drcx8 zS9Am&>keE_qR88ZrEwi7&V_tjy~P8ovymdedE7VHQh?MpEmI%4X=O%0A(&`?Ok0aZ|4sO~h5=8QP1pG27X!QsN4_?!q^PQq| z0rEYP-@it66M=&GNRplJ(#%3r3X@Nirj|c1oYg^O2Q#|ZR#+aIT`;JwCY!%sb_>1N z^)9biwjq?4*@^!O!HguV1qBB|!6rnx=SN&NhubXck!vD&yf)nes1FGwjC_MnN-5`{ zmCcsLvJckwm=3Kg^UInu_jhJR!Glwfg>dEH3w-78R;0W+)mQlP5R8`{2krFLkH#U1 zEF)wW!6uBH2BT1{Wi)`tV^k_D&E=phMcVNB! z&}K^`e&BMYW~66i=v`L5H8YfvVwWUmP~q@7t?a-^Kh_eaW7PcfpIW_JSS2 zBl`>Fjcg3mz#5`Iwmc@-UKU-YKvdE75DMYh03Vqp<{>L#E=KOc^!LU$pTLe=ruzk! zseIuf?Yr;r?=nZJ!y$^X@6w&RU-+Gce{`o_pLnNqoZs1AX#Rbh33tAO*sLzN6Sk9~ zYQMi%`yDI|22G}Ti}ynHO5-hdV;NeDFQ~n=mIC9`7{Bu!+&P6>WV1&mw#c$ev$I{U z_+sU#9Vd{Z|}+$SXu<@OOmL?Ae57=h#&6h*3-P=?_HQJ;D*Bsn}d&3+}#G) z?{tVPwIgc{5XCy+mjnNrVi04|haf7heaQ{c)yjLioh?FB4Zei-5GxF@?mePj%#XKE zK0`fLgFfeyCjYy8>~q3l#^>;Gff~8>3RWXEilu)f2N;&H2#EkgHK$7GiB*Ehh@+12 z5LCi$HN>H8e{UYrjtID<2P4rOw1TjbvG(^)QyUX=Fy4&wI68@pfIv**=U-;~BF z%96`bZhvZO`st@;ev{c)a2bf$qK4vQC~#-Y;M=CRWLW{-5MB6U}qt6M-< zG&9=TqA##3s{vM zM8$}tMavK%(K3`sj`ZpfP}xK@10sX4wvq4$lmr14G-NaI;Q;(gqXVinfY>y@0!jTb z0~{8D+oOquxTLHu47>~FDE5F6XCYe#X;ZFxfMAtNUnn(Y+t@ow_=h5P(>0XbjOaRzpYuPTw3_K+-1X(hbj6VKZMhYv3A8< zCg8Bvuf)=&2$4vJPp3nH6AKat)9fg{C>veIx<;SNrBC)Cv6t8mRWVa7LJ6WenP6x{ z*w*BICc`g&QOEI%hUp6FS1SKhJ}OhbEkk(wNtU&8dj|7oY+cR5(sAW$<$_YncA$)# zpM9Z(o_IhqHeX!!DEk8a!wTu$;6jBQ_3UbBv4Kv|LflsS zP|G=a4?o==;VoR*S3BFZ@VRm=f(Vun@U?dEV7|D32qzC0QArGjmMBi2Jy|BeFYn>gKmTj? z4XZfam_Rxz~;C^j+=9!;aM}TkoS;vNk(UsRXO;FyQZT`XR ztQ+|(#)28cjAy{cR6zJ5S?TF!eO{h~C1QTgtI#7!lxY{=(gaFMf0o6Z4Yb(;YjI4@qXpC&h3G3)qR7nHvn+DWNcvFl^cpG6z_1Bem5ZU zJw1LJ(Ed~-Yi`Up4l+@o>X(m(WR?8Q|J;AF7 zNAm1Gx6dLF-X#RBtf0jbvIK*^j0~eOm)`6KLTQ#t>UEGV~cj zJV7Nd+to?Pf!>YCCLhXF`Ml{O)=c{8KIL$~L4(F2j05FPQy(f*{w)nZs9ao>H(-3P zjZfyR*n7>I;>-e19lP@=+t_R{f41{k97$gOaLgeM25$sZv{rtnDFOnH>Kw(IM>l?XyekamH z{0Q^+R5hBI1X6DU07zl|@r|jTXNl4^bZ6LNP~DA;Ch|()FP~F>Rn9Rh_#KYh=;yO0 z>y%1);+!edOza)wM9Hd5R%Wp^DAn>9yH}amTz>l8cW2~9$1Z$zie`vT2XGCW5Q04d zZCI^#o5O^FFq1}Uoh1lio0P$DfuRnV*PZ09ZcOr%pGBQk z*D5J|j97MH6<~}wZZVIfd(7nXh)M!LUqjsyieN&KQv_)k5at9VIyC@;crSGoeFa<} z=*sO1IUzEK^sLLj`Wa`AW1U94u}(RMS$*`&$5F$j5LIKADle@|*pD6H^)JoI%`GSh z%X$>1wCa-(u!|yR9aCWi2^AI=OF^I})PT-xxd5Xw*-U_u))=ZZPY7u8Fm3jb10FPc1U$r+Hf|0h5b8|;MvgG9A#}D`MOW6Zo`R=ae8#g__y7>Bg zH$JItaq}98~kB`g8M;?9-QOS*K z*xKargfS%y;?{Zl^emWPvGNJPi61$=T|R!M;$-+_Fnz<*V(;errCAHdosPa&2Kh`B z=3xC-g5SH~{R9FrrajY7n2{NFU=P}z<`gN|nu!tD?P2~uC*NeqSxcH!M%XP}vavGq;iuwsfvopTH zkXNv+Mll=9+V%X1=O^5GbLrSc&pv^5eRSvzSk`kWztVm1H@)}2RWrIvTKF%MR=xkv z>$3~J?M`d5qf@>PJSLgyD_Bi|fZYq2O(7L|4=GmE#RMaC$Sy5lL)+_dCK%r?Fo>!# zC?P0_SS;*p4w40`ls7GIdRA#xJ{NBlyDMMrXg+uA>|1W@+P8H5J?!KoU)+w|T%*|Y zv)9+J-SGIs(_b34f##|Jd`SRJxiMGCV0;EU5J#PMyGO7)?NyD=Hf)e9e;QxrTLtUb zh99DuRLCdJ9MEm>jLBBs6!9Sx%4+p^Q0)=e zg0e#ZxUit{-8kWDE2GNy9KjwuC{KlS0x2GWa7LXjT@N&%EI%-|(nCI@ zE(xXQQ|wlkwYm`^y(1k+eAQ|}gcvS3RdL`WNSto+Tai);21sW}07fFn!!dJto`k<8 z?U4ClQ@XsBTGhRz)0NZa{k78s%=oM9!ac#N&Yip7EKe=FY3`@&Y*er0 zM9OXFG8R9{s-i2TS?s#19-i|VL=}oxUj>Cch^VQr9g~aGq&U8nX{OZ_5ju&%fkhOYtPF{KBXPVQbyFjc z&5txiQQmd?+5&TjHMjorOvebznRml=!)jTuwqf+xc`PSVa?U$(;1JkW$@>A&g z(G6Q}xrgN`Cl=3q?rBsT(XUsOHK_RhF-{aK*Mku;q3XfHB;^;JEToI8Nf>0oRW)I{ zhik&Zq&)QwHRyou;O7!)({wJ8w%(g->+wu9wFT0)Rb9FP<}&Eo@!TXnhg=(9iSNVq zj!Y4LM?A}!>}?{q8NjMbQ3>4FPyN)eDLCgkrds4ss#?9OFEVMgD|`HlUfqh(&rN%`S}*X}xc zf+QvyR|9!F+4X!}vxP-!41*eHjZu*eGYl(TDoM;bt2-D>hpypvr%CY0OOnG6;NM2S z?0`MU(bg=TATe{R0y&%LjG#TMl{e&&fT(_zmn+q5{-;%(6J2CGxaV&_Pda=%Dsw%$ zoz?yKUp}2O{i+A$gKunBw(mm?%lt4EvHXHvwX3pYb51vmL95aQsRR*a_#2Dg#y>-VMWiDj0)7)TsJamqXqER7=uH$nIxlIhKnIq`IEB> z42c3n5)`1;^F%vx8rrYONd@J@Som z{f*;pgg==q$9yMI?f0J znI^f_4M0;2S3rYu4An0y#AGBF4QKEHG}X#G&`a1%LsQtshSs{&T*oAObrQMa6(dk~?snuMcaCmQh6C(s^@JxL zd347hB1ol@{A10aKrE&@gRLGn?QeM8L_P5w^wf;mfkzIKsE2a3P+Ly6$vA1PFp}Hg zIr3RiPr+o%bLlY{(5hPoCvA1o2xWAjwV5=mIcJ?*SSVAsl}e!uVf!JM`KD!?3Z#a& zlw-|Plw;z-%oW#&U6Iw8g_Ny9O|{Vm!j0FDKBWkUrR`de<32sCCw>g~qsK1fZsnVR zKPe%w!Ucpfqs46Yh=}uaxlz^@HBUegc8kkxkQtmxRC$x@aU{m5Jtq4Zmuh&I`E{@d zobl)`{vUfI8WkVx;V1C-2^K-tj}b+g1IlOkw?n)L@WO7W&qn`xM~&jCXbSy9KZ!FQ z2k%CnUL?mar=*ZY!EG?)hw`KV)Cjm#0_N=O^t#4uK;PG?1&6t$4^vSL$v`CqjeC&| z72sg10X39~GYN<`iFQ*c`FU`$0M=ylyMH@)93^xFhU4=6>_>qD3FP zxp*E+`rG#`O}=jFuAtt#^O5(y9mM3Kvg6lJ_-VwrfsMBw8CLf$?HkbarE86VnA-E_i;=odbZI243DAJ7Tl6vuJpt_xL8>1r? ztX;InYscl`s9XB_Qs!$~r_rhIQ@)S4Yx`KsdyMCMQGc#Of6R!sNCLt=D8Xt*?RD8= zfX_`f>e^P_15ILivA&wz8sf{!7gl$jvMzd#*rI4A!O$tbgm^feKb&KDP+cV` zx!tIf4CFAg*9~W(TQb6XXY?>^T5Z?HRiGHdxcpclAEL7QvO{Fe9~>Miwg1ke8uwV^ z^EO^h^?vFr_VYA;{*p`)_f4wzb5t=s=#b{QjbD&<6Y)>Xs)ur+L~tl1M>ug#8K49C zfbH%D__fZ1{7f9S@k*0?hsTGlDnNV>(e|-Z;WS?Nmy*!R0PxpE>2~Fc_aB)zWyHc^ z@)GXl~G`uKT}~V@>a?Ed4_Cx)@K#%)o1?16g2Z ziXwjSMa%~(Z+LmhO&vq=O-=$N%qJes{Kz0VUdvlB4(rTBdB>$1^|<14i89={7f*5^7PLns9W`@M*2Cm7==FG_(=JkU zkJW^;$>cWB*+>&fjJ}K^qD$RWq_z;j^PQeBqfC7=ruDZh_2ClaUO3Mqt+RWn1}6`# zs*2&}qr52K*~4iLq;(;H!of(#F`1C^2=NF}A#IAGYuqtTel!8Z7`a4;;U@|~D35*w zNA_@KnYdvtKQN2wsC;oSi9aNdw+cSsXV^RX#h4W{);vI3CoI$!pVu3t1VI@k=y>>t zLG~j)1*dmRO5-E|#vMNe<5Q#cDX~X1UGh5RD74KPtYRz@7s{jcLmq!{$(BCy@?&aoh3nsed)4|owJkYbnRWItBP>PH9%koWXf zpzK*aJjMhd(3>HK!uSqu1F*q|8^4kBLve zuGHm3uk{A6e-tp;Dj#F*!+%j;y7P|i21ohUu}8jAK5Y@;8Tec*IkCTDa-;7r;*;zy z_E33pzH-4);vM|x+@T|)XOth5kJ$9vSRo6S4k1ed_8X5PZzJhF?D^5@agqqr7k1qyN&k6H$43} zdGw0tir!t7ivvX6xKBINnSq{58_@GM5p+~qN6TSQXBHGpxrr`mgHog%kw>3uUX1UE zLYgvNSHi#T!S2q{(cv!&ZqaSQQQ$)vBh+{$v#-GtcI$8;z$#5+)=mSwi7i}Azvf3m zjtij)h$Z7^5xhC1SWBZ$1+S_@jMllRQ#m*Ky1yh#{tcgrt9L8gABjH9mMPQ487pv9 zWjEiYN&p<=L(efjaP)#RH=~~}Xwi9kgpWCZPsPh%24`iZ@P|6*^%A5dBKL0~hCWp63FaeRDfq zr|^6hGlih1|6dev~ z(uFb4Hj?=*R7py&hXd3unXR(TVX)GqwkA%ik_TxeE-x&=n7vLA`CRNkK$O{Z<%Bn? zD31VEpsGswL2@>&XRqISq8SwpiHq3c$N{}5zMdONItWEWI3eAK?k=W(-{>LKBH zL$DyTno)7UU@`099TbefM2K~WgpyW)UlR#pYYMub#|A6?*ncY}0DgC?e#}7O*=E%%+jEy3hDXiLvv_XI$ho=nbfQmYbJ{Rp6m2Jw#7PA5y+>RusN- z;$UHkNBNR%cr(4s6v}D;0$V5D)Z?Qmij`fQcA#(bLs+D6-Mjr)E}X_l{o?#^3wmV{ z$|6BbIig1y`SPs1S{E}*76)p1YQ)e+{^hb5^+9{Fqii!P!AuM%z60aQR?xv=r3{U0 z`y6PQI7^0N_0{LD!bdzt6Sd|{fG0H?WR%lIEgSy4__WihtUUwhY#+d-kM^6^Q=MG3 zZHjb2ok+AjjB61%r#LF3UZ~>FDhAK*&YzW!O7|47DVX#|QE$M;G{o3vECo!HbvY9a zmCN0gM=+#ioRLa%PGKYho`y@-n%Ev$bsvHkcHT7gx zd@jmzJZxKY%F-9y;yTx^#dp8tiH>z|r*%Rm0ad)i=wQ~Qb;7wZ7IXIp8kmFh6dXW4 zDIDJ`Z4E^5HYex{^4_PFbItXD!g-yQenv-uJeo=!<0*6T)OC1@n=~*;yGTC+dw?>E zL^`|K;6`;ynyudpyA&lyY8PIbD#o@f9`RTm5#pqsSHAo%C~^EF`I+ns5aXWC9bSE& zty8JbKzq?bo?@t7AbFSyWnw#e(P5Ms2$48|rdGC&O4GlH2gF{6&~NiGrd!p2>X7)b zaOz_A3{>|})4rg2k&@>kEf(>@c7&)|e>aJLqJ1UKBt6<=2yIZ#{&ueQ(d!cClsbS4 zhN|v0j*rwsx)){@m3mRvT?Z=%bJjGXDxbxII-C}V(N)uEq%kL2rV==xy5Gw(A*0do z%VWZgxbip?e^oru@07K2`S=O{_!#n)GI+yAWi2*LRP1$ya#54K^hM~28LR9^gm?&= zmeGq+yh(sDKmlW~PjJ+bx!-4U7}2v>U;aSpifO^r86*m!H?hv>=>5^1~tTQ2BUZ(17Jz&T_)~Z=!7~!$;}YCfIFd=E@ga)bgkI&7Y>Qo2{&r`9y%E)ZlCQ(AaN%{7| zr^>IX2WgQGr!m(*&$3`NXUt90$J{Vu`WQfMo>e}$c$$t9W#~W8DhHKco_+4QXP;L2!O1UQVCj{5^~eM20pHh5S4rAsEBKfK>gE%b8j!oYojW4PVXI3SQO< zGBbMk?=j5wXjn7br%k&Y%dGjk7vI$6J~cO-9p+=7oyMg;dn_xPPU#=`9splTa=Ku2 zPC*cgBqiIyiR^aZM_X`GItB0lvI%GxsP+Y|tYOUkS%GjpajEjHatbcK5Mp;WPo6l_ z!JbjBwoe;B=&$1*^s+D@7TdARniIWlpLb~CyzKVh4$!0(o<*uBlnkuna*P1A+;J+_ z(%&toKzPgB;2wVfG9*8>hI@>Av^wqhP8~kO!eeg{&p}le==|+Ohbt`&2Lk|)fv{rA zbV1pKO$>=-Rqzn%E!6}Rkp>-73$igh=uYBs;a6w8OMljFHNtc^8$gz%c_~Kw+2?)|dBJ z<)^A_NpfcFj7dcML!OJ<1K~Q|lBVJPnM`SZ1aABv;rUE@_hHq+;BP6;1qe6)TIR7-hP=7ZhcI-jocP9l$>* zNep9>)g0C_hY_bPwhqw`kN7D|uv@AOEsG7##X^%xc zKW$?+8~cZC5RS$bd=)3L>1cyEL0KF{MC}RTm5fyH5frq-@8L_W zgkrtR-~eboBo{yxXkGcZl#fQ8j8KmDo1IZ-1t#i@*gNUCHbL=;YJC#byhIII)c&%H zsQjg~nE?Q)w2>n$)<<#-vY8s*>wsO7BW+Z6R4U(ADhC-Vqx&mat+Xz^ zxwrIs`j6@CDdpO9T6bu$(r)y`C(MiVuv<)euS<}8!0?oHhzN0jhCDFpBP_%ZdeD>k z!C(MxtKDm{TWlVy)onB4rE>_Bw2LmP*to5|Oz0h76B6fQo#wV7{7qr?EXSvHJ+D&h zzb_{sP6ue|OO?v$&Hz@aEiR`2cV>Y~x>_t2W&D(ZGQ)H5>(ntC)NRVW_;rlNH3nrd z*2x7pV>~-S%ZNM&RD*^BfPI*dqCe)*`8(dT9*>Vn$n}?wHd11H7LOfa}BHH>0 zVZH02=>GoF zp0H0~4fd1enfp$iZ*nz)7OL%AED}X}mXjdCYY(DIBAf*|5Jo+J^Z^g{zWi>+x)zmQ zcU@@_dv*JkXLhj0=Ux)GH6QyyDqM8=bvC#?-PxY)-nMna4mRSsm!jpeFn?b2rMdII z`ugmD*uk^^MK0rJQN4ER>$9KX+P~GmzWj#&6`e$?*aPvCfNSvT*@XGoODz3&1#uIL;9lOgR-+I_U(h!G z0In+FP}EZo`1|SassL<6g0vuohQ;^{zF2i+6NREK{ig3-r zLQSqXRhr^8eHoTcT-JQ-d!W}KWgfSqzvIMa$&5OVZUI>_q(BR9liTAJOb85gWSG-c zgO*w#mW%ORGmEKYklB$QQaNYMsPdf?3gKkN@HwC&maWK*vcVgjGaOAeQ_ESpWkdP$iPz=^qN- z?|uEPYw8#F8(hoAE05#fW4fvus(U|npl&;UzSJEW`c+zZ`0$&y&D>ryB~NL-*lyC5 z+h=Z@`2j?CL=!->JB|4_BATE;xGB;tGc}x-m!6uF3LwBj1hP8{5xC}XvIU=g#cz_eWO$Fh%X8P!>HT zItn8r?V*Cn9dfdxCPN$dXaea!&dTbyHJ-^->kdOvUiBfrNRS-iGr!hk-k_Ns}&>~d|r>LaaUA`cXg}NAF=G({qp-e$29DD z`{~yY{j_srdESW8uir54lh=;ypI@>+IhC#1_59YAJCv3gr(cow-e22O*_F2m>jdr3 za1OhaYK9WJ?&wI7)06CFC=d+mg&{N9o9p!!Ap*L6I8cxlzzgY67O+nVZfC}$pD_Xw z&G;~Acj6UWEgbP$Hl_yC4dY?hO;Cae{-6jkQouY3s8)${+hB7?CTcL53OU&k^o!EPa?oYB%M@ct za=%82Tu^RZGZHhM`(l@ZrKTDYwB^dM*^G!LD=saDWY2kjnG4;Eoeb(GB2zgb zVsOX08{Ci*Bq}IP3-%Ul8G}ol^Tdyf?mNF?)z6EY-!9oWbm7ZGs>hsIUi$Qi=Wh=$ zXSyf;*7CrEO7t0JZF$wiy9(CaA>Pk?<-KPqr_uK-TE5Y51$9wvVmMauJ0g7)eGxX_ zx&KCN84#?Q3*4<-tx?<+cOS(LqPyW7;dfu)chACKm)|{-->tUY=5Db&1nJA~?t{A@ z*Lw1#*7obvw%8LEp*DA8j=O@3kAWOa(mCv~DOqmBg$h{)ApB)p(%~1f$UdK=f1}SJ zCne@6#!Tnh=?mV=Pa>o((H`#PCQd|*$l$^|H!F2l@^cuBNgngO^2we9AFcT9uM-;r z+bbR)zIo%fKSt+|-;`;uFRz+8Kw5=l#>h7xAKA(())btn=)xQ$m47!^Fz-J)b(->D zGgc98bV2+A@SqS4V<-G05lX%p(E=7AKRBE`gw?HQM9U=Nw007#6p954F^DjB5!zi| zZWs0{8_jk#6^j!^U;a69WV0oEyUu*+{5JV@$5r=5J4r&`T{!O$P(V1+;AcP)g^L%K z1%x7V3@dP#VtP=F8Q>JsteLVodO~?iUawT@=l!vT}YK>vx!ad(tj` zek^)WH-+SP?Q<0B7q)UMF!)=7b^tjz3e$p?h1c9}>E z#Hw>KfOr(i(BMr(f|so|Da6Ec^VFk-pO2tNKcpj7EQCmuWgtcX`AJu~bMdyhU6&79 zy5pq>w#}Tk>46uT7mcXT9bDSEUq5luRYL}k?A*6XJpADPZFSe|TK({wTQ|R=e6_f5 zpSo_{1~B8IC4;+MF_7jKmO7~xwg5jU#eozHGb$CB15gC41~~l@R-+OM^_j~n1n94Y zlK}0Xc8)Js+*;Oc|E{USukJH#->XxHH|o6Ay_)1#-z-q_9+WS>vNvDJ1=ktDu0d_S z-jKnr$4-Bn8R&OQh2VUFrS58}-I0piY!%22D=s`FchLoL`i+bf*_ zZ=@$+fY=FHOe~pyu<=_qc(8JvC@(xX>a4PL5POQPSI#!PadPts799T8iOnamr{QZs z54(dR%!rXmMpqCEgfbc6T6!Il63j*e{Idp3u*&M`$#{H1chEW#21V!#$` zEXimvnj{fwGHC&7$PbON4g12QiE2m^EQ0{)kq0Z?Z&tdqw{Cv*{Q2|ZXVH-OnfTw) zbhcU_2_Pr2fM$3oA zo!DhYAqASbhEWMitI+eH*2%UYm7@t9GI{Xu?ef=z2Dxn^wV`wsceX4<8wogg0atCvrR8-eg)6jEFJVO&6Hps`l=lF6AgPe`_9;zo2t`Ko@z zcD)|0_%<&g`X~^~#m{gKTVO%V1VW+>-tD#OMHRshPq&Bw6PS;lL#W z63ZznDecgqw4{jbR@QIemL9V6+_7N(+`03VGH&UiXIaG>@dD0Hio}3i<<=SOP{?os zi8|5awVMnky_>;w0NX*jlu4vW)DQm3`K;OvRdiQ5SlEXxUrszBRNko)<1~mD=ABdS zVt1XHr>xMM${q8?&mVhiwb(0qc*F29$x{MvfX*7kF5)4ag2^}qvteQL1_F{N2rx9G z9dNBuN-D%uU?PDi^+~>TD`r@YNF-)N+dj50=)L;4+8ek%HFgTVPHJ(MA&;;G4HazZ zLw|q$4k=6>l9Sf8LNmC1QW?Gmh z;rE~T`%~9^Ja!)mNJO@TNDOVCy%mFTeY$!r}*%^Zk2P z^qthZf%a%utl)9X9ndc$NYE0HR0oN|0C7Z=(gj*Fni8!mG&y8n15fs`)vQ6O6W1zl zpoJZ~RzwTHd}y2}xeQ2H;Z>24NAHt-IZ|OxA+&U7y4h*&P>f*j%*_1!6k8|@$23m} zi_Lp0f1+if)#0WWS_ea{KsN;MN>Wg{g%hW3o*pnhm;lsq#u~9jOE>kY9oRek#$!*t z-2bZiTfJ9w>Dq14jk5}iI_2h;w$mM&GqLB`!gk#Uw4b%&f!lgb>d<)SgxjOjin??u z8q&T!d%8HSpw#CnElexMx)p-5jzPM{`HPsIK(fw-2ntxo!r7LzG!R$7n_>LpMFWXz zE2c%&g!$reLo~{rsNh-XuXyaj*8?g_${x7iXzYLI?f30`bi*EHOL_0kT`Q~l%4JHk zV~>Bv!ZD97T(bFCxPPz8UOfx@3`2h!l)DUjb?0yjSkRvUH0TV--FeVPi-9m%2^7Pg zutE1n9OKo(WZ@R!4q*wiL>5Q7b<{Z=y}FkO*7}AUX3V(mx+zl@+&+H%?7L@Ao?Lx* z^@zI{FCNh#Sp)qFa?D=>btSM7w&z?Md;K0d~M_ES>8M5e> zQKJlQx3wrOh!U?>zb(5Yue5LX{yp-074}9PT<=~zx|f#NjI4cXlGVUEcgobua+mTD z33+NHHEn)+&yOg+m#y5ySQv_T`k5Es~)|2LudQ@L-h$X>;->5{DK_nkduW({B<9=z2L_$3M;N&ev53 zQwdqub0`ua7Qn9$hdnW?8qoJ?!-i2Ws+?E~n)m7(Sn->>4_L>kzX{Xd)Y;#f8Xdq~ zO`kKn@)NVmFHgl!(>~^G?l>J)!I<+_=DM_LI)3yDKKSe6`STYqo`2`P%FM<1VV`fA zI-^7Tt{tb2J~Fp=hwOI6U295mMzYbJQVWB_=S`GfXC0^S-8)_R$KKyWR=jWO)P2fP zdV*e=KK;@rC^8~*T*U)2{i=EVWYi|HQXi)YVHsfTK5Czr__#y@F93hi;MHda?e0Hx-N>FjN~#;W zru47sJ)pWzbw9ngd3f_x(sND4rM*gq-Z^6N>dx)955A(fd|*Z288uy%vpuT^^oR_o zRwHx7(-e83)$^+*fS5Ls7n%Il0aDsL$t zoIGhwNp07$cEzfZ;~m$JTDDyLkMi#N&)@!$rM7=W`s}$qox9w;;OoL7fIzK%W@Gup z!gi@?JBN=R(es}E0|$NeYeq=C<>&)Xy`h{`P7;C|esp@>Taa0*B3a1h5de)zAkzVu zW&BQ$2YF3iq}3YDI&)p4jAp)|HIIqWT6J}j| zW$*UE{PN^JJ1dm;l^`1|HQf8lw%#eHtc7{kDQh2$9uteD#aOE{)CZ#sA1|^qrbNok zNzOo0Ala8}l)~Z6Od|k(jBWriw6mdPRw$&iB{?lN1e)0(kmjc8ki{hEVh}D^7T#lZ zfnr)uD;;a>iVuc|V$yK|8xzzY;30)T%%apOFBCgBz=Swe>#EKUGY>uY>8YN|rLFpJ z6{Y8?vPko~9;3!L)Uu@7hVi4kAAZQ}&D)OxHtFd0X5}Z*`P|0`x2;?@bMcZTi)TIz z>3tW(qK^zzK^l0>(EDbyw^#$waJ)*@Itcr{iOPk++8yVxT(~1%K|zRa;#dY83mp}( zu4ZZ$?(pa)xoc~6YFx(`TUwNxVd?II%sY-jj{8SNf5QjRqoSL{dPvda<3;2L+`9zs z??Cxij_c2*N3J!zA3I%D`t&Cv`-}CzL-tozO}VW21hB{C32?F>2hr!?t;p}z9|xE9K)Ot)s)iOfGClPf4x5cq($d{X2?0OrlPsZxT`Yq!`2%hZ0@*S6>@+Ei|0cQ1DTLH$$jm@Rd5EM=4i}c`f})^jy07Di z9R6*(0w<0^T*=eGe%P2=om5Y<|?;GiUa1bVSTfDY-RJ_xU?hI^!AqV6?FoR#X8`-Q9%FV4{MUIrK9-P>zxhY;~?s~)wqk8;O zX57ZytYg1^ML+oOd17+%ywzHHxoAG<78RfjR1r26E6^oEXjAEW0K6U{jV0uc|xg!^!U@qR)qki(e*S6un&cMSM8rGW`!|AbA=po~5hC#N9dx!ZMj>i_ z9^T=2)frN-)qaLr$51BiDsXpvapv3avXbGW7u?KB`qyKIGpD@#;JSzEhJW;qcp^HJ zFh526EdTOb{A)Lj^EDr7X=(P$CzPw8r6Dry63$ax`G#l^48Zn~SUH2p_D-jW7) z3o4H_!D274<`eQ;$~yf9>;mu0I@D#dxI}2q2j9o!a)YwhUp7E~{5f`ow|GwJawyE3nCIo6g%+hAKHN^KfDtUoePh5ewC+td#Hi z<`Ww?HVoaUe7$mI|9X{|0(FWif#q{f*{9`pHTKRMizNiN1!e`|H&N0QMkq9>cf>2H zQf_QQ#c`p}bHr=Kc)hK4ly67em}kN1g+5l!i&Y$IoTT6e#_rHrN`*0zlC)HqRh_9) zVPSs0zhg(Uxf4IQ*y~ z1jN#1z=@6Q3t5fMZd2#85xaUA$6v!bz55U4+yO@=XCQ=^D12WhoCw z|NTCjrz`{?!4I<6C<8267zAV;w_m4Abug${X2i6^wg=${Ne9UQ)j{61(Iyy?$sfb8 zLhp)U-G`T-q8Z4DLh>H|(>8!F4hjSt3xoa_dp$K=>Rb2Tv)psfIrp3#i*WgH9KIB8KaZk$ z(k+-&Gank8sSE|P-4$b~&>FJWfb30ErI8g)G0&smjDIpp1bJwuwXM(i!`2ITUpiy| zBAoQUH}_3C=6|?WTq!C(eQ(Ox9it!ogHN6!FM8@vRh673twr=SkNM|_ZqrW&yFK;* zut6tj3URuDGX2+OyNj}r#0*i1$o&h0w#`^clxp1BNRM;Bu9uZ#=SIj)J<1RndK0h^|5J} zEm-&XuYAY8HBQxh__x}ML%rwE`{?SchJSOmNz;d6BTPr$kh2rzDl`x$jNuuXiVODf zbPv2gDC08}CxPrPIDw4pV9bLZ4~de*>Do1de~1g`2`^W`g91u@&}P|sXo~*rw72v_ za-CQzhfgjPU9b11Q?4@3SN8l*{go-A_3Rkwn8agr%7^SG@S0^v=}v2!LqYu(8%YK) zjE+e3=d|L)zSHK$86SmDktTa&vKGq*mIYBz1WzN(0d%;BdWD}LWT7&-ML$0LE);e+ zj9~6}vDa~njPmBfJeoK9pH8333x{tQJ%M_LwE_E^=dpt2N|zTiNEjB6wI4{^-67t;8OM0Yff)q^P3&|S8pTrtZPvMc_2Ydv z>wkG!KZt;Bhgkcxn8U~_|8i2cUmVaI`F}ouY#c_G*Z;XcTp-xZW0e^I>uD}Dzv~ix zF_zo{R0)uLdFgIGW&G4pK^714EM-)L7FN8P9R$wcDs6h-{cDB#sxA=#)=27hz z#g_^DaPJ5*T*KT&nB!rX>H0A$lIZkfjE)DH450uj=@MQfFXGYIUWJUS-csaOrNiCO z+!f(14Xx|8r*$VN_nl*Y&|UoF4dPSOGQ^2GtMAbJ_9!Yr(?!Zp7t>hGREw}m}$}dzcuD~sc&J` zvT^$RmYDut>*DImbbVspSz-NnQ;+P4V#W@Ay%@Xf*Ck^1%$fSyl3y>?H;drVzUg{z zu}AISqQ5IY_91pC#Fw*y% zF|q(uvT&{_uSCHZXPL8XNUK~}h-ZEINI*NZH4UpxTAIBC=d+v$>POK}DkDQ&%i=n@ zM0TbCfuxQG3Bc;b7ad7~uJOaa2tZDHu_ZMa`IksS$iwfdjUsg?SX%Cj3f} z{nz-(p|!0u*56p<9^3TPx7!bXb!yMHWY)pAUi{U0PcNEu?V+Z7T1HQ`eW%^!Twk{9 z>KmUy0>Y=)?mwypLu0Jg&?iuREZc5-bc5Y8bxtZBVbc(8(Y5(i_e^Q2$2LnU#{8CB zr{K)x)b>P`&_v?2K=Jy=OIenFcTB25W(X^J{i9~jF_0Zlu`t?Ar|HfEj zY*1@sqj%uIeiFHv2e(RzbL{=xMHK^Di}Jj|yaBDHrNN-L9#uQcMZSDyH?lv~MAiUakteA^4+TUMt;o#QuhqZM1RgpF-*8j;XpLpWaudllf8DHil6TSGukn zG3p}g6!*G}xn(z9c)`*FN&&NFdoUKOrrFnW9Cxq(-9w2!NCsnOipeQeFS#H;w0_!< zIA`O3=IlA%p9Z<#E>*=Mcd}Lw4hiaH_RQW)zVy^N5c?rd_-E?Jy zF?CWASu<}pT1oJZcBt~v!CrN-I2S)t+nOJI!P}POdwSb_&*sY?~8GP`!AxCR2rJh5fUu5Vk$ib27oE#XcP~iw>Di~3c z=h=VWQ?M7<3O!93s1VoIv9FyhQ!r4qeRScxOud(D&XmdXT;k=-*`2LYHzH}bbQ%81 z8|KfOH=igT|E!zYp5BLIL{!zD3Fi)SSh`$b_eBu1ihLJ*_eO^{?#&A=ru zFUBUHm0Bt->+OZgqaZzN-}*!~EP#(er|l|AYy4W%*7*1Ci@8^pLzZc<^`WX7%D`CC1nO>NW+EC)LWF`>Lyb2lDi}Cj2(Cq! zj8ng7>=b3J;r+MSAKI~?lf4f{;FYRf8XYq0{2|RX!IG#SM*jWSc;Ecsu(?-?F*na_ zDEP`-8$Wprw8*nW))@I}vc@QvTZ6F1(0R%b8*Gy2DG#xaXNB>MHdonyj zTQl+THr| zc{?A~220)&1NC5^?|;)WG~Vaj#buthKkGY@x9WNQDKP|z^!kaxCrdVMd-TEIJo>u_ zF?(x9%$q(=UUFTNpO(S2zl z@CwaHm!Hi@q_DgkGZKNQZK#7~x6U1aT{n=`VMb6b?EmbHbZ`Swq0M&IvuqGU-_A?7 zWfZ+7nt4u!4(pnrIXTfiWe2u)FcpI#X+{PwI&DTmrb+nWjuvC^CTY!!PF-v3YHNVD zTZPO%)!y>r++YUkRbbmwS}IA^h@cLY2Qz|5H1Ecd*Wz3|iicViM7{Tp?&qbuci#SX z%MKF)u_sn+7A00fK1vi&9z3iKS=l(V%P|pjU7@)v>2r&%D>RqCmCwJtQ2!9S`Fc^| z?%%Vq*&~WY!--`#ugN;QOWoPoB3u7DIBi-;KMH~Pl73Cqf&~>wJv9JCu{6*lQrkD6 zU#CC+>aoh|qN3_SuwmUibnsxLCZN22Ypov34vew}nU-snBCjha%~nxSUCr73>av{9 z+F(Vs3(ichmT^0{mY>J-w}j>n0lHReD&h@$q9q5vV$c_7F&33(aJ@>tyn{-A-f zc^A7?dcbD&eEVryb5qxWY40EV`={PHGyNa5om_FBw`BJW4G>2K~ee9*P^_1#E3Hey)X4+y@EBR(c&kry5^z6@L3H_eT>!0(bI7gYLyO@ zTBVJN;X{V?>@jj!BHG+MY*?0BSl|x9;uDfVppS|FLZMV#K@A%d9NN#;i`p({SF77sO(aIKGfAX4GqO!KK zWnjxlHu8phC5^lTM+|OB8hLw#*~oib|8CwzQ|AcJk01V^^m(}{lo9RTF!{2kKwUt8 za>9-FQJLL}ydHO6L1Q-@k7v)4ZI68fcIgS6A={J~(Z9JdHnh2>PoL&yr9911Dbr>m8~28Mg9r+~jqjm<62eV5}Kv`DKJ9@nt3BIqc_NM92>KG^01NO4ls<4{qCzIFSvt5!Ytgcy}sc&LZ|H#nn? z=zp3w&-OJTCDuK1_S9Y#gq7_R*VslmyB9N7V%=H|NeKUhy)XO|3F($Zb74X69^GSc z6nG&|MfUQ{TkRU}2 zD*j`g?0@dgQ2cN!m7D)J{-=EL?Bm17h^E$YaBi#|5s%#6a8|?Jk@)cco(JIQ7$jEd z*N$XIhdj4++jRWf#xu)459=n_qN=4;i9Y#hd1@$7SyWn9R$1wn3*bzL6C_{F%Y)uZ zrcS>=TKHNxL28OZp+I>tj+6xg)qYjDw7fjS8-iJZRf1*^^Tal$4m3<62>+9wX!=E1 zGcl(VTO9}>SVCD(Ya%~Mk&-Ob#-5T+Gbc9c)8IF$bi(ET&>GQuzuo8cSkq=s60z6b z*FRdhP7aQUH>_{q|A%A!y>{;9`Av`z3)^nb?$x`y|1NQZ2oQjqrg0A=vz=alY=B8F>(TN;S+-^ zWj|tMDOH>@7Tf&msOHIsUrrtO%-B7L#eLnLY|#(+k`+(Lh_C4%x<#c2^vLSb}{P{NIWkQA`=)NRW_?+g?`w^h^oqY_D2F5-R86?M^gipjsOGG8b zRxDa}t^StVi#6R&8HrF&?6<$&u&uHUenP}#pZW=Przu;tXQy5B`7Zb(-4l=DCCxvi{^E^cuwz~={5C5=M1|3X}5Jl zWnG|Y;e`#|V>w0fJ(3UyEqjnHV+{656$zJ9fi>FU@dCi?heGLZ7|dXdU?0sLMVw_K z7zBNxl*vu<+<`3!1L@yz)zjzO#&m1U&qE%fH%m=Hz-buJ@Md_ zBVtc*b}k%!gP6;lBYwl_i?AZ^T;7F3O=$VFvaC(-UgFiXy!=LzwGP;ob|Xr3EjpYB zy|YQ`k9F_@?8w(A1`UtZHrLkXTr{g&QJ`-iFi~;mr03+!nmB6Ks5x_|OdLIP`gxNk zO+Tkk_hIp~&+av3$XI(_WpOk=6e{b|#W!~B^yzjjJHuyD`BdiXk#Lk04t6WRdadCv z>{jST^4gHIbQ7co+!N;a@kvMgO8w3Am~G;!yvYllF7-zfrntjj6xQ*-@mc4uDPK&O zZy#puadu0@Iyimr_yxA)AJ!@IBlvT;wMTz^HpDvh#HXG9w0z#_&(l7&KAikCigthc zQ}Qov$+~vxgxcCr_~m~cn>L; z`T2qS`W#ttVr<`+h8Exhm@QFb4huI1810!MbzOa%RrHc42vdtJ?X*HyrOKQoXKA! z2a&M@D`3=&kU<^?Q`_T(k*tp_~}mHbiVSYogfKCJ)LSN8}2u@cLX^3(ntYQVB+f^SdP|28M#M zE(?MOP&PK*Mgy~BLseRWs+I{QGu@)O-2QZAvrYG>m75kA^0sx&qj4J9NX{_6-%~iA znb6r79Vc~Wp&m#L&rI?xYHrp4x;mNaIpqKQr@uKcT@~)M*7?(?IAj-cGY;VF&nH(< zYS&~2Xz}3-za4bv^_R3G>AKNGKVZ zSly*e3x3kwN;(#KM8@&rYN+PCpEf-FB&V3PdDleI5y@x?%Iwgwh?1z$-$@lxTD@8{ z8C4Lh#rg)0lql8jqGDbsr6l7tCvt*vJV!2e{UKX6a`@&uEZNxzH*w|JHHk8%B2L1A z6Kay=l3fUtaQWe*PR3qAp#EaCgqLE`@q_9WM$klgD&gG*L`WcnBbh&RgEE_=C9I9_ zzyGS zqH^kYV;v zX+<&W)Mt57;W1DaD9*{m0cD(0%Y^qI=PZi{wj!e}v@(nfIvF$jFN_a^fvU{wHjU17 zs?Z3LUA3G`)lxDRV;jdKRv{;H=IJ}w- zeo;Zq$g_A5kIhCVu2}@Di9EY; zkp8-|uI;{AckC7ocdt2d_nb9@R;*m}z^8IH1vfR{hYyJ^JC_WaSEX_~7HO z?4zD<)K$(RUnsRE>avii#*1U~QZc*=UN2SIQC)ei=GMGCup`a`_*`B;&aSG>troZ- z48ve*1jKY8zZ9o24N~tbxw~Bai);y{$-($Bm@JQF^^y;6yZO?(#SND&)Av@_>u)Iy zx-@9;eJ5_{|D>+3j0$^B(Svu12Ahs_<;TBw-l(6XoxFsKKpxCFF~^)l6BZNH;!z-h zv;5dpQrYATr!xydE2ue{?E=BM{B9Ik^Fsd@9=|6en5wcyOAO?%A%kg96l`j08W<2? zwm(7WfTEy>Dj_BEYruOYWGt)9vHYc!&{_A#Jc8qvjx zm>ruepU0+9F=Ll23n7Eq7-SZx2WOpdR>O^894w|jm&@blWX66qxoFb1In`sVn;iy| zx=kaaLfU5-35~BqMG3!9^>2RNxu}G7eS296{cc(*JC>F}%5L~KCPD_Ho*ZIDpMcN8 zt}GYGn9f5KfFt2rk6+RY)l2MKvc8T7*Lla2mPNZJC)4 zC(hfzd1Q4t%qoaR8AKje$Dy*-z*tX7ZqP6dl)>UYP=9Avr+R7)LQNtA%8gkXkNN~H z#@Yy+P@j;MS#ilo{-mb6kq;7{Zv+@-B2ORoWGJtK-5HL@IQ%xo0>}u`+Q7mubPFe+ zJM_$~_z*(z-ql9U2L**K+CFceUHtW7+isRO@UM|<^-32e!s&LW4LkEpB(=+MrE6NI z1CO92n#*rPniLY&c|XQQVX{5W!hS1TAwbEgAHaBn%W0OhOswX9+Eh?PEcG=hR>)drc9{EY zbQDw!ot8R?5D9_O^5q%=k2Z>ei`MQ!elIGc@$BKX7wR9=3@#NtR(wIlG=%!Nn6kKS zzp-jqD>0uwX;LEWMAVnV;`Sl%l?uurcq$9G-04W}E~Cz*9RXHQIzSvAPr54OkcJWM zW-MIBJo03+BsAt0!Uf&NIM7kjo1*9;W$(a$G`r;%C~~V;FA+B;CsSW>Emk*cc-1Oh z|9qSHo@P>>F|qAO3s}X-5BwuEyDVu&B8p_w86KMhX>l@u^qe%G!vY~FAh7X?2la$A z+&(|@HA2&)UT3&i!=v4?A;6hNS!*ECO|rtclazZz7-qj|4Ys2|UWcBOve#YT>$a?f zBX*45AF*5;^%r3S+F)Jqo8P>qZ`ZftsBV7SDzW!seUoJyNp4Ut)oCQ2Iv3S((yS9VO4H-^Z7NRm(dqG%W*4zvxdqKY;=t%%}`0-k&(QZON z(Ds56fF&BAF~uN4S207V?ZoFdNCr}VX6nnpLS-2yWqP+j@`^l}DD8yFL1Au_?SD~mW8Ol4F*#>cHz~=KNk>-Sg3Zr}vRk2X&R#Wq z#mZ~9zVk`9$q3SQ>91SHE9LG-^taz6rPG%WrSqLFuk7=;ouny6=V?{YRogq5$s!s@ zp2uVJCcN3CfR-R@X))AKP0iPuTl4d?kzIa3YmUpC{WJaZv;qi8semc=bR|zFk$z_l zlvBwk86gf8)b`He5AI+Ubiwj_?zCa*Q3*+Tclcf3U)TT1Q_?C^1-)Z~j&dYatw%4m z+@!Y=pDsGJ&H59p%poZzElKn)aVn8WxH?=>p=B3TS7Rk^D$umXim+52uC9#)YlpT5 z-9A_cd=}KGQmm0kX>n#T(1P0TD)hYGukhgnQ+39vO;Ai~x7R*2`kb*uAWFQAEo>G? z%fo-#=@3kLiQ&g%t1$F!D`%l&=e+gc-;2}J~vHJ#2P6nD=W!Fl!hI7vQShc6I)>v7dOtCAg;}v zs!qgAYeVPBG9Ke+&op0UP^<-p(FXCgKQ7@rhWL_v75n zyVh;73|leu;U}JXsB81JSB*}PJ`Dd5SG*12j3w*Ca#z-q$zOAX^kiv(abIl2Z;IC( z1uqKa-D*PRFIiUcC2R^Z(vc#SN_6v*V5|tqZKYwz$E^HpC6K@3Mc{RP0W$C`Fyy}l zbw+i{eHun)eyTW?jyy(%P8d2 zS39y<^GXhqy?-30h5gJYSXWxa@W=CtGn^G=+eM2$6xn>f0y8_#xuwUBN#eL6Tk&%0 z2iCfYiTZS#OHM-#53D3ubp zd~}LL!HES6Ho7hxV!(k6h<|Jp{dAzxMzz6wnRY+z*D+J3=udVE3X|DcVi?E~b0I>K z404>BQ)h9&!G2IbBFaynz)$pl3Hv9Vrx5B1_Hp|$gQPED4kgT38gzUdPlpPHG-7VM zgGxtPak2u6o+Cq5+)!+=rAzMU%w8J8ExCDu{tUh*J|dm&=dfDPX~kQ$r{sgnc)TbJ4zvmsX>D=1R}=YFOgv zl0Gx?yBP%F#Tgeq6H=}yrKM4^QeP*=zWbgStKa?^c<`I2j((+Yw%n-7-Q{w9gP78G zMBl__>E-$gLlW32m!C@-jJ)xZ)sesvopc#n7EN|%2H`AJY_b9y8%$9WWCI=XAdz6~ zRVXev>1+liXmqxgi6FVUo4>_66prhzUo7Y0p!8*iih$y7^}1wpG7=gbq{A z+%Xyh-n6P&F9fCZr=o)TB;q8h@N^71Z7F;g7bT)dnv)GHO#qp5sx=C92$fVwWqCMM zRO!x2q+_2^oSv4Rqu7zNg7WgUQrM^=!eM8El>s4Y`#?49lWC_Kq9H>asf<)0yEUa8 zPzXCQ%Akzn9Z{}Ytl@1#(rn1b@k z0;or?_uea#^d^Tr>tHa?jEi>Q@fjy-zvvO)E_=_8_+kJO(JDT$Y=Fp-3o- zCrc?F)T)>zacQi1G)_`YP5)CzE@>aHXrj__Nab!gUXjQHLl2hlz%gzl=(3{*o@gl* zS?^)ZZ_Bmbv1;aXlUrWAUT@Ri^6I-n2XiOMl@qT_6MN)E@?!`V{rk7KUvq0s-B-aX zVLkT2q_g9VEnh8IJnu@vCgdVvvjS1E%Myulq%#j?!$=0KR^{X%4k;r$yG{iW*=s9; z!Q9GxZ{?8Isx()^g7e8a77fLbB(J3?zbqedBV|A>4-qv4PseS0;F7sSlS+XV4`?<_ zUkGadB?L#A1dwI7)I_!N{Ezy3d1uD(^F#%+|JPOe;pGOd9aSh^o_Pi|6AdJKrRh^_ z3zPVUG$wpw!li2x{fbLUDl2`W5H1^Eg&)WBQIy{23prriuvV3n=i}&6R(VcoQOGuB56&lmqgCK48i)vh1DF1GZ%_ z+<~HLtynF_w7q26C&ITUymUs&`zu_D7k9T))gzX^XdQT4IW22b=G}Q z6&%*(mV^X~>qcC4 zbGrq0>=XJ|cOdCqo`3f?@l(#v%aeA6to%uXp zR@n|O75TP_w^9ZGW8qDm;RQ>jy5f`Q!~#2$H!#=e+p^JGgs z6UDNk(Dp<^y$PqeJrUTRC_#b4*-7sF8A6>e{WwZ7D>*pRKQd9BBc&m2wPN)kz%S2}ftnR?10$7~JD4S> z$u=w~9tbgyd19S6v#eqmhV_p4!jcRH6Jo5rfCafgj0mwNZ#n3zT;G`HMa{d-Vyq20 zGB%s^^*+*d!_+&(vQ&RyVcQtgsdxanGK^ri9Sv6t-wF27z%ODSf;ptTTZsEeSF`i8 zy|85<$xBhYOe?gxvR&4E4_vdS3pCE^fljhd;7naNg&HN+FINJ=AWgFu;S9ZGh&EfP z8O!#OyQ${YclXycc=eCPrr#Gu(@HCApAZ{O2{*sj+n4B0aeU5e{ZGQVrI!!gH}KAD z=ZNhPc4yWItSd<)fX2ugfn;a|a;k#kDCCG5&-Fa};|ZJGghUj`5!JCCC0d|blH7tc zQyRtR8Wp)bb*_=x=+2dAxeaM1YJyTl;j=nclC;AoiyB?OVoe3#u<6L=XOp(@->9u& z>BIf3GW(fnXfCd#=3?ZsqPnBaMn93z4gEChOv=(GwCI6mOy_CA1&Dc3)xun;Ed?5) zb>LOCXZR^C74K;%=_9W}Q0WKvfA}Y*8R5(RLMXVJ%RO`!9qPOe2=dBUh z4~ntkTK#rJ5N**Pu+(I{eaC})(%bTOSPqOED4ge=taG^%pgvZCW}#xc=%<9^;#qdMNbIIQYDQC;;f03ciM5Ejgzc1( zB&$qnG>UEW@hW-jMVG63FZr?_!iOFDC#R(E_3!1+t#@93(KEBgytw!Bg>#lEkHKH~ zt^S4nhDiSoJB~o)tJ(_C5YHrGT>g-70gQiRV!R=RaUKO>T>cwjLz)TIvO^7NL(_yV zidGC=RGKNqa4WJ1rdlzyQM4jh8^tqj+@kZa!4&08#C#p*b`W>My{R+X>5*!u1<#aI zZ#aMpy?N7UrI*nPBxF}SF%xo$VkfI?xw(Q;Q)gn?&CkrU;qFkBz;Y^19G-Q0tqNP& zU}Q7>5bf@Wlup}WBLsUTTz(?Uf+`}VCCR`ja!a9x)r_{!l$Z43-=n_yb4W|p_WKD( zXFUASAKqH3jKvmLdR3pI{^gZFd^1egYa1`VblL?NqSO_(@==gPdC~~PdFJJzuT~l9 zmbd=s-m3M z-8rL|QMm$k&-G(RrNR%Rm;^;nhBnXd`YUoTfx4`)27C>!B zO#D`+@XKv5ez^^4CfXn>DNj)eGSyi>qgHSh%%GAz+=?RCq*@`GUB^;t1ocFki3&?Z zvtg4;{$Kt8IuVrhe>Q&rFr31Te3glty^I@+68<@Ec-q+T1bc09#&pPDq-A>dTE*s!Xb<_=8cFk&umP zs9BUFP}Rin45qQC!GW!&!(*d>6l29~xA}G4by!BWtv77x)}5!MldN5#N#5zqRW?DI z{j7E5;Q6`3u~X|Qw}G-ruQQC{)1$2?ALoKIjuvs(}km z>|y;3y`Ie6;E`g9JVf8w?MN*qc@?-&;4-&5Ft>g{6kq^Ms6m8F< zC;6a|^AaHtq9qVO7>(OqRU%2jtX#D`w|oeSr+QJML@A`+S#zPipkwSg!1_;4L7F^F zP7>t?uE~~>>?j+q*^R<+=)CDmb{!$!<8ksceSv6HhK(BAA{xH?`jXwjn#Y!X{;j;F z`QFtN#*LgTcK+8t<%Sc_^zAckzPL%R+w*2i&)$QMipMU#WYV-gU<1~AZTk`9SR&O@ z?#ZIG3PhM8QWXBPocd}-smlPTA)sVL;SQQ-9nr5rYugWjUD9LVaEy>D&LYmQW zrvm&SVZkqs1~f%orW^!xX29>m;3xrD6E-jgu8g6H+wNO6_0pl+hmF1B@O1}{9r}6; zBkAKKCvW}Ldiilm5mj0CPJLkG>KD4I!55Y=a`wJ)_f1o$y-g#@g@tATa8iu3c=aA7 zD+`IBGU(8)s+Q)LAc;|i;`Ml;@}u%(VIeZ<6!cZ!AIJp9l-heY-FA}588jTEmgwh|^bGa>}y>gQVPfQK@Q zrYj>fsPJInzrBl0T6MW z2_3LBLxACjhaG?D3Hu_8+ z(+{z36;q$JBFRMIQsFYN9DFpIqolDtMTvv`?b2PVVm}ioe z|5=Z@dj_c_MM@ACFz_A{cZi7GaxS`E_r>2n`%>0t!N$w6$!)nr8kp=?5A1(=6lGh) z4Ab7_JIIhiM0=DL78GRqQ9c><9*bPC(jx>1t1fgir^Skl{8n>TY4Pp2`=)bW#Au~d zA_c}8%KuQ3%>R%i4y93k4rvUZL#*(M--)3g3E#)FE`4dn3y0r*d;Mej8l`b5PR6Z6 zUW)0Th>=gt`l)NRe*DX$`onkG(M!@CjzL!BQZI9Ja-3dR3cPlEUIxO1v4rMQ!553_ zwjiOL#hl51(@W|kZ3T@!+Bio=W2t;6YHK{NQ?Y=vMeW~S89(@`<_GT){uQ_Bf05Ts zXnO*Bf(EaAmr-Aq2OoY?fA+GAh(@VO4e3)bJfm7JwgHH^BPz|-aE8%ClxcT*5K7ce zl}Y8rlvONvIXtX0AreL6NB(N?s4+uC!`Gi4{l*M?Owr%oHx9h0^yctK^dyX)3;f>0iWLo6V@3^u zBJuGT-^d8Fn)r!sF_nhBZ@l)3EYlW58Ut({O6m%pf-HL_`J~DU?e^-dva(R6*X{NW zg)h1osk;!4;bq6v=@!d&O~JJ8uwqY29WAPs_Sjcw!e)XGipwZ1si54Nje)?*8-BX~ zaiLtk>i2K1T=~xDOICk*bo17$McReCk*Di@edilb-~Y5_(!~#t>o@F^MduElHs;uj z3#VV$5Z1pQ_T}rhKJB&TK7+B4<*gEwR{;+o3fjROiTHVIK|uhuQY*a`a)k^pdj)ET z6eGIFodJhnhB>z>-MPa^AdYyBNzxnLrtB#G_Fgx}5Nu%t_L4TFG;g`}HX+UZaLhJj zANo=M?CM{?BgE0UpN<>x+ebfId5iq`+x^d3TwnFW(1$k7y1qbdICRsx+NyU3&gdJ5 zzU|iCHloaccnWC2uFrx6PC&;F5m#1;A zKs;fXM$xv>#-U^z$|7qi?|v28C=o$>R%%7JEl;+hEV5vyjNPvyhf-FA)7!biT5PtH zpWH>CdK>L@@6gT_G!Aa3OXqeRgHrujoa#@z#h3cC#dbW^pT(B_W;;DjYiDw*oh8;n zvp==T{_wcE+uf;lmZZkjr@b8=IN=H!m}4m@2BR|V2+Sno27Sl*FKUnX_KYW6iP0W# zJ@~{adeQ<#lAgq2^5m1aVO{C)rh2#38ZvvA+qrkP-KpL!wH!1@S>N8f)7rVx%onN1 zCBN9tm1e$3MQ%K;oiVBYEK9Z1Zuw+dLg^}#mXu|w{v=Lor+wD1O0{E{#*)<3an`R& zwPV^+=)^Y9`ZC0hWnkxunTL-K`*7G4WF*p4%rq5IWEhLYQ^ij#@tJK$XX@K!3o^mm z+VtBh9i`7_V=#A`8DfNxXYy#nrmqTDX4K&JE$F zoMr!ciK>_mA*>*s4*Jg}B!6QcbgvB@@;|H=_(K(n>tpMqEo?D&ktSNPJzw6HV{rHYO$8 z5F<`~d&V|0%{FYPO7rs;{$VG+=U#xPpJxh`g&{l$Q|Je31ry(MKk$r^X;hKRk{CY) zn#5?@+quHB+iWLA$*11u@wB&dg~<^e70CC4Q_0_?e&@6itN{i*K_zBh3pjN#EN=_A|g z;}F;Xop3hYas(C&;LH$_c#h+&81IO)BCIOp5$lL|I3(mAjQ78rPrybx|aJW=XIpbb=*gMvmWLz_4Xh|DnIaUqpd$vXDpMA> z0?MLu-?X9_Bu>pHa4PFd}~KW>L9%jnPIRDarS{zMUvGi4e5 zS)A%mG({0cJ49JVJ4;giiFF*8WgSzN(asVJ)_WdTyBC{r!jy$}B*+!QiLhg3AxXayA<+l%+<)EkLSqA4sZw zhVf&(DP6>915(Xs1K&Sz#x@|;jB$t&DE`o?1$_ino-I&*OOyCAdO`T&UI1U1GioD6HAXK8U)%Aa`s12+_QEnkcxtM>d zQ)jfm^AEzL82}zpAI|t5-$%M`+=pJkC&B_!4+AgMC%z9~8RKibao;w|xQ|suXMEv# z#>TtcLy?gjC41@^U-%|J@c@rfS=|wANA^807~v%Jvq<>(5(} z9T1@GgGKCzhkG+-ImFmxeO~?wy$~oGF64BOEz6fznq|)-r5`vi%4gF|YIi zz5ZM#>Pn}C+76v_sF<%T?=~EW`+JklXaGNrLMN+(4J7c5LF6Mb=HOW zPaF2HQMBGQ{6<3;r5vgha_VyYM>cYzMg92miwEXibm@f;%$qK{H?AsZJ-_k$ejC?W z-W@z{YM=aT?reFa_~mhP{H+Vodnan(<(luvO{AmXGUbMmh3r6)`3Vu2E5Zjc45N9Z zJEWJz@vAYKm3=ad7xZYjs_KCYFP(Yu17q&mlsMLOp5=#Y?rh#vo8M>Zqyc*tjrPxj z!GXte>V4aB98@ZiDia!x+fy+;x5bj>Di8&^zSNL#5R5i{7};s1^|0IPJlN7@w&iNP zZ)Ht+W!8X+^Y?Wcvu)C)xjiqFiwpfl>T+AN9%>&udeeYW=Od&h8>a(837;lOI7Czm zhnYX$Rf;0Ar6{Wtjvkp1c>^g3Vf~^6c9?~-dKo)tq^HBanzUBRP-pXY!hjyH7~I^i zpsFTge%h?_Du*`r%?pJx=R0TKcJobR&%5KMt$l^3%hf$>#kobfr44hh$t%jM=z;_} z&kj6yP)q)%NoQZz-Rz&uwi{IDmw**i!%kQHu1t}MRFu>!Sm(%$WMaFL{WQU-aqOTi zJ|KK#{DN!6Tj_f?KJ={PPRD{VV=hgz9=~{!f6j$1_wCrWdGvV`krjbwA^8^27k2BJ zE@W>-!YyO${0l}6(jZ#iO0b?MrfQ;&oP=m#8^wvL5Jb8ce9d;Yz9Vc9JT_vKV5J_&Vz`n~3ZP}WYRfzW?vGE%dOx(K-)`6?T ztgQ$GdL#J<@T@uM+=+%rlWmq74R&uV%o;FiioU*6XKc%3eLSH#X*sze#|&G)b*WCJ zdgVqw2%MfsWFvuHSt2c?xh$&)NkObGXR%XuDsWR13A_ptaKBLlh#9925Yp-Wm1iV} zlLzcGC-2R?BW>415AIHvZA=a|RUn7S<5T32KEoz=AF$%qyY9cC0fbOdKV>l!!t8kv zJ@5wm#74*#5Blasv~5O)Ly~-60GR&M^O4092V)Hj6s0;f`6W9R2x2eA6(o%~>4Pl; zo*dS<{DyghM)Zi6*L@V5-M7c!;o<4av$uPy@E%w_Q=)CoGdC%{+Rt!&hOr1sR%x;yK}$uZiT0GiV;dK?y-HD7PO3Rvc zj+)YS&x%FR0wvoLpLFs97kya|lpEj)3A8;wdT3xwGH(b&=0+bupJ$6$e z!+*JXq+Al~re1dG)M*PYohpB*e|PdH{qMs2(?5kv?*7Q{e)q_>t&cnc`{)4?5rrZP zVRvs}mU?1raahRCI5zjc8yn@53&M*XNBRP5#(6n=?i9y_Lsr+UbM@C&(dY#2Of0=I zx;)BV0Y9}*NKyf!+wvhtWmQvKTD5?TzjIq!=~af&&G^-B>}U51O=zR&g{15O5_d`8 z9Qxodwe&uzhzj&Zl_6aJ52_Ny^nqHiBX6kbi!j0Mw2ecgJ=<}Tge`SmW)Pc}xf82D2W zS&A$&IQB|8qTp($0}fWJ-{uompLKX^n$M@W>}~}E;NWWZ3V~lcSg|4RFx3d$!> zoaxFmi9nD;ma@X5z!>?KQJu*S!!9DN<4y9kKb_G3sDJjuox}b(QRM6IHC|n{G_K^f z{g_|gQ=a_ITmR6H4-@Itjh`R!JNwFCz$W{lJrg<}#cmC^zJ|z#Tu3+}#r5Yc!!7d= z16!N$Bh|Q!2uFu(=fKMrI)hh14%pMY;jnERk(M9Hm2F{5ZrfqB^0=_Pd?J(dNP5R0 z>wdf=AMcQ*zWP?nAj?X;v66D`6k5GbXL&i)wLs8W;&zt|hlL$J;k;q3Spmf{yp<5w z!5eS9oe~T)(RsR(UI(X$c^ZY0hV`H^Mwuo&IOS)0=W(ua5W<3Qxu)O9@%QYT>2P*i zcj-%i5$T^k@b_!lzMXW*KG&V&7f!b;u5%d&E=|$=JHsmx@x`aa2jdbwIUsp|`K~Qoa2}s-FD<%Wn;F1IM zfuO*9PuFCsE>JW_;`2HICQKgBf!GL|6&;dpBcvtC$`VR>wpOl1z1}E(#mf~rcg@1N zV-}353zt`3(j2_{(hKIr&gv1Ytg9Y$@c^-Ev(2*U_{Oc@Zn4-NQ?^f;U-RpxV0nJP z)7YaWHsR9PvV3G5EUvAHPSC%SwYmC4`H(IPy)7)(EpGdk=pclsIpouT#vTV9*rg?6 z1Mero$iES{4#EA==6%Rc&+5hI{j$9$Xw`ODIllSV6ZP|R}`+xQQ zVU+H<=^-54PZwSh-E<4a%l)Svr?M8T1q%b@FLrvdD}; zPCA^5w(k6C(5X|WUd5E#X$P&`iSO8@eyHfqmNaK_SNAZU_`Jgtm!BHf`H52-v7%br zpAdufPmL#%XBtkmp^ZlSho+vvOa z&VMi)Neuq~`OfKWNNdp75wwG+e$f70*>22VYKFJL_IW%tJFwv>w9CfBlC(1-iF0gM zBVAlmg=Cc~PR$35LoQmSt_-^|?15F;D)m407~p_YD**>GY-Tv<)E?X!&hT7@Bl!M# zd_9t{&*$q=4976MhTnB9!|NEXWOzNpRSfUv_ddWaJjid~#PA`8n;AaLa0|oV@{?N` zKEiMt!$%qJVE7cnoeZC5xQpSl44>n^JTMQ2|e4F7r3=cDWm*IO1k1%|n-}NEGj~IT!@F#-8#?ZkqgQ1JQB{YU!hJJ?G z{An)3LWZRbD+rq+z_5nz)G-V*Y+x8=*vPPnpFE4OAi6Q^N8=St31R?^S}+X=rU5aE zKfQqAWQG?rT+B}{IdvG%FJ*WY-&w(LxrXmt%kVmes~E0kcq2b~Ge3C?U;monZ4B>b zxQR!-mEZLkUo)1)>)gVde4lY4-r?*2;%9i~#b5dQONL)F{D$9kjGz38XW%45ouG{E zBH(CxMjk`Y$gR`|c@lkBp3L`W^7Wmq!PJM+>m-GFV3|BE+&G06M+Zi&I%5U=Z zTm0R38UC5ZBEQGif8pyReEnCx{(ztV8()9S@H@V9jNuOil{9)@QTaNZubq6&^rLwA zP8Q$EW0=pdfbSPFETWMr#e7}D*QI=2#@FS1UCA)OcY=If#n&OeuIB3+zOLo#I=-&w z>o8w;;p+yzj_`GquVZ}O#JxI;VK;_77$z9@W!RtLAcjL2wlHM5q_9L%M)937497AY z&u}6`#-_s9RHhJ4m1zuTFr3No5{7da&Lyf)<}+Nt@D@;u$`Vy&iK?=I`|Efe1RfUJ1AW2kJB8jR>BvDm~ zB&sTrL{%k{sH#K~Rh3AhsuD?5RU(P1;v5=5lBlXg5>=H*qN)-}R8=C0s!CfKl0;P{ zlBlXg5>=ImR#l03O_fNZsuD?56%lg;NusI}NmNxLiKBvDm~B&sTrL{%l?VpSrEs!AkLRf#03Dv?B0C6cJBM0~AEBvDm~ zB&sTrL{%k{sH#K~Rh3Ahsw`1eK@wFJBvDaFiN3`WRTU&rk-VNENmNykL{$YzR8^2f zRRu{@l_jbwNTRBOB&sS%qN;)*u>QB{_xDoa$AC9292 zRb`2)3X-U*Ac?99lBlX6iK+^cs47cTRggqg1xZv@kVI7lNmNykL{$YzR8^2fRRu{@ zRggqg1xZv@kVI7lNmNykL{$YzR8^2fRRu{@RWO!WqN;)*u>QB^?_Rb`2)vP4x`qN*%WRhFnKOH@^!N$toaQB|2F zsw$I2Rav5{GD%cbCW)%bBvDnFB&sTtL{(*`QkJNyOcGU zs!S49l}VziGD%cbCW)%bBvDnFB&sU^K#(P>$`VyoNTR9=NmNxKiK?-`5 zqN)l>R8=8~swyN=RfQy~s*prg6_Ti`LK0O~NTR9=NmNxKiK;3jQB{Q`s;ZDgRTYw` zszMS~RY;<$3Q1H|A&IIgBvDm`B&w>gTw;l;vP4xClBlXe5>-`5qN)l>R8=8~sAL`|3KpaHw2z^V0s)eIvHV+`XM zmrFVe_;N{I@kW&^qFhzvXXz&+zXI+xSx+osvP%D2z>oRtlHGI92@gq>@eVRdV?H9EO7#4rMru z;kgXYV|YHp(F|J|j$=51AH ze}crDnnb**NyM9)M7*g<#G9H#ys1gVo0>$tsY%3}nnb**NyM9)M7*gh*u zcvA!J=t<&DO%QKtf~Z$x-qd8`O^ta|W8T!5H#M1fQ)AxLWa3RtCf?L!;!RB^-qd8` zO-&}=)MVmK4HSa@FmGxy@unsdZ)%_xx=*~R$;6u)^QI;fZ)!5}rX~|_YBKSrCi7UB zH#M1fQh)L z@usE_Z)ythrlt^YY6|hDrVwvx3h}0<5N~P<@usE_Z)ythrlt^YYRsD&^QOkUsVT&p znnJv(Da4zaLcFOd#G9Hzys0U~n;JM}KFse{hAP7Vo~!`Z5Udl}Ie>TQny9OSd8Yzg z^BAtXF{Bl(0$f9%-p=q2hIcZ&i{Uzk>lqSvRDe6^`PUh~!SGFnr1MmOI|!1_QvvP( z1a}a0GxRX@F(mG&VD6{@<)c?j`4vq06`*|j)=zx@BtxAbQ(%Q`r|-(7FI9jJ@gy)p za4^H642Lm1m*IH~&u2KAVJpLN3@0!&+M#)_;CZg#d9L7ju9RGOd!?i?tibb?n9n_c zIE4q;jbV4b--EAvG9)d!68kBF*D)jxt;BwcAZgT9HNQpl=Ieg^t&M#B6T_1XQKDU{#Jmx7Q2%8o!!h(cbV!253`-f7GpuA7 zWEf&t!?2EFm|+9MD8sqbKIV*c;Nfh$@2MCW1s2LCAAJrivg_MUbf?C=*o#nJR)z6+!GK=nhdu z5c>#%L={2o9S9Ot1hHQrNK_HT9)TcHMG#U8Z(*tkGF1e@O?wbET!%cfA30 zxt=Mxo+-JWDY>30xt=Mxo+-JWDY>30xt=Mxo+-JWDY>30xt=Mxo+-JWDY>30xt=Mx zo+-JWDY>30xt=Mxo+-JWDY>30xt=Mxo+-JWDY>30IgE8=JZi_O42fq^I)NeaY?wzH z25r+dNue+(oUXeu>;asHc^<+%4`H5%FwaAn=ON7V5axLZL;Io@HZZ)G;e8D6=XQwS z!#qo2o~1C)QkZ8c%(E2cSqk$kg?W~cx{toavlQl83WHPV4vz)e7v2c%i(oy&E({|K zV+@=4`Ln1G;3k43F~Z;)f+rd31i>}<6l)M>3~LZUk_KVuLTH~c5@w8q86#oFNSHAa zW{iXxBVoo!m@yJ&jD#5@VFM%34XCw?7*1t4o#Dj{XEB`3a4z)+Tt;vK!&}gw2ur63 zOQ#5PR)nQfgr!r2rBj5ZQ-q~cgr!r2xi7-p7h&#;F!x26`y$MJ5tdF7=D`T_V1#)v z!qO?i(ka5yDZbc8uN!WNx8e?;vJ zjbR1!v?$L~l;kA7kvt82d5CevGjnW9-Km`!U9T zjIkeM?8g}UF~)w3u^(gX#~Ax@%-c#>+uhKS;+Q?UrnM=KIh+qj@+8i(G0v+%oMmGi z_vo4akOpyBR1tkoIeF*z*ZK!f+eIM;Y#5NPD+9?D+(rX1I&tvkYk;8izff z;0p|CHy4*);?a>+KMt!t&EzY5y_c_F6)~} zIIR72eTd=P49VIYhqa#|S#jgA_7gn9khID;Z2okIbjvs_|8z||nmFwLbp0`3f5O*4 zQO|{qp@U%tL)!Jkg^QlywJ9z%z9x+{F1&nAdTCtv`8u1wmCLY@XaL@U|Bs}%50CSz z&;0ew)8Eo9G^?s~Q+2p5Xh|jyU>rkR*&fR^7ix%0T0vqaS)xE%#qWU_*#))Rb>H-Y(C@xK`RBgA z*U>Z2Ip_YKbD!@y&(S$Xe;wG$*MY72I^ewA-?s+t?^^@+_pO2Z`&NA&FnWyM8dST5 z1b+a22=q6Ct@=hFR`rd*=+SMfz7#m!tFl{zHB#1%v6z1q3&CFk9a(K9vf8SZcIBo1 zsNZU(U2kIq+^Y3by|N_Z?*j{Y_Cpl)#|j!wCC5 z*zd*m>h#ud6Sh~Uw`z6TZ@3$K3-$-FKZxzs>8)Cw_A^!3+rT7P4SopxF!+a{XOUY& zdMhLNR;^U~J)R?M4QsJIQ`pLAzBQy5Gp271>BWrfTeXhuUwQ7ZRjb*y>C556*!1P_ z5p2&UwrYLb&p3+Ms#R{=Z*uqlAb+oo!>S}aswq3fqAp8jEcDuc7H>h*uWPcpI zAAErHJ=mYXPGRdmYxSgSv0a=vuO_e=OoJ_825jZYHn1J+06W1hup9g~xqJug1N*@N za1cBUeis}9kAO$P95@1=0KG=KUCL=Z1&)HJ$uSR(f#cvLWj@O@UW47PFQNWz5qk=| z#FKxEJ&pYX>>2Erv1hSg!G0C|A$T5K055=-z$@TYex?6FRgSNNKLURYz5!kbe*$_Q zx?P%S{AKW0!P`K$;qB5)|J5ydyP|sAzmENO?BBq?9a|?l>91~?+ohRCx4rGsNu%4| zcIl*%wkMsmU1MgXhkifpN_yyY+LiQBw%Wg1soKBsAyWR6e<}vJjw$(fI zS1F$Usy<@-UD&^k{X5w2#=aADEU{e?i=T|J--GR$*LL+Fr*Fc3KlWzqyRp4`yj^|D z&v=fuT~Uqg-^2D?X1l(}89hhauJ3Wi4}l*Bsk>$?F8N1Exexn~vHt|S7W-q^^e-u% z-$VbB;@PHuN%3sMk`&MOC;645m+hL}I2T7R+rv*`e;OMOrFc$%lf%#O*ZtsU!Owwz z3VvRgL_LzIN0QhqiFzbakECKVKV$Vsq8>@qBZ+z>6_qV0-Cj;=kA$DGdL$K<8C|=i zqB7gAT~bk*ZL3ET^+=)~Nz@~$xNBJHR*$6OE~C{WskqC}TRoDByNp(kq~b24)g!66 z%V_mTD(*5`J(Ai-VYGTAwU5GR^+;+Th0*GfRNQ5>dL*@v!f5qKY9EEs>XAe}lBh>g z`zV}Z^++o2GFm;7+DBoudL$Kb`5CK667@);9!c$^aJtnasff$=G`7_vsff$zR*$42 zF56a*q#`b()g!6>6-KK^QW2NY>XB5$Wwd%E6>%A@9!W)9Myp3s5tq^Gk<`8mqtzpc zdL&VgWMK73Y8}96^+=)~Nz@~WdL&VgWMK73D&q1pR*z(0^+=)~Nz@~WdL&VgB?&q2dgvmV=4k0k1mL_Lz40Xg03kyN~7+v<@- zJ(8$L67@);9!bSZ{;Sm^iFzbak0k1m)Yp8cTRoDfM-uf&DqeCetR6|lOSY{ZNv(d^ zrhlOxNz@~WdL&VgB1Nb_E!%9y_EG3qrHBLn>jkX6|6Fw1c_Q4(3Wbm@DmIuC#->(hlZIJ6Olt z!MtM!Gmah1HFmH)04!OJBTWG5Krz9GfsC5xr6AjTH2V_&M?ngtI@`4X`^k|x|&*7Q|oGK zT`g_wR{BRk?*yopHX1!5R7)Gr3cY`q9ul&`o zS_)}w2EDtcS_*0O9-C^|u7>Su*sg}{YS^xZ?P}PrmO?tO?|^+^KR5smf``HHg8s^1 zErm251#{pCcmniS#cC;}(cea^rI1GNG^=K(S+x|>ws)FUOCeq6vpiG4{yugQdkVWm z-TxMQ8v6&>GuSU<&tkuV{VMoF@I1HxUH~tFS3u86tEG^}*TElwKL+0buY*4Uy)&&^ z3TgDtv}!4&@izZe3aOgX8mpy{w%sPHrI5DWGOMMKw!LGmS_)}&Y*Q_TGwG`6m zU24@*NTYYDRkKU2S~F0;=MO+f9o5oIaVX97n`v*f|7vNbQ$Ff9OEdM1G}HKy-zLqp z?eC}6^pt98rfu)5td?f#uhLAVNHcA}3)^$&YH6m^-;I4Im>}gY>0Evfy9(R}Cc$d(L*R!&>P}CumS*}5_n8@KrtLq$uEqWs z_WdCJ4h5(V>38TrwKUVe@*J~TnrYi{X|*)dww0k;nrWL}Db2L)IcBvq)ApMjdT(mA zG}GvvRMpZ|{*Y$!M~ZabzbW$RDsD><{$?WJxD@{faU67VxdYdq}^B z^m|y5yN4CId&#xBi-|pUcb60*a}uVMeX1CA#jcKbtCV;C&v4kzkfvk{qUZ$ zk7!q^F!mNu{~)F_fn2KH<*m! zZgSsE?z_qTkCgkD%Kk{X3zfU^t-|}r{XTNPk6+!#uWE^e*s{{Y^90PjD*`yY7o z{dj*5x$GgAJ>;^7T=tO59&*`3E_=vj54r3imp$aNhg|lM%N}ysLoR#BWe>Te)W#kt zOR0?+9X+OKMX55kq7)*DO!GtmY<^K zr)c>pT7HU_pQ7cbX!$8xeu|c#qUEP(`6*g{ik6?ES#rEw4yp%Q5~(Qj#gAhE2^Uv)zOOT zXft)RnL64`9c`wLHd9BNsiV!*(PrvsGj+6?I@(MfZKIC1QAgXTqixjD9_sLZ9loo> zcXjx#4&T+`yE=SVhwtj}T^+uw!*_M~t`6VT;k!C~SBLNF@Le6gtHXDX!1g1st-ZJ6 zUpwYN`{)taegw83f$c|N`_qi7jnbC-vPNl((Q}YSMG;2tPirjuAhug$W107MHkNsR zT4R~_r!|&&e_A6mg+^uyjm#7pnJF|fQ)pzS(8x@oQQsx~yyNgjW@nAe&KjAWH8MME zBz|sWcGk%3tWlAMo+ln|3>*nJD$+3edtalzW*WUetugSf=|+9cG+MP9_0`hp-k;VO zcz;@BtjvFv`sr6vKcgeAMxwq(;=M*9y+*|z=QKR0;W-V@X?RYcx4?4?Jh#Ae3+=fDo?GC#1)f{rxdonE;JF2!Tj03`o?GC#1)f{rxdonE z;JF2!Tj03`o?GC#1)f{rxdonE;JF2!Tj03`o?GC#1)f{rxdonE;JF2!Tj03`o?GC# z1)f{rxdonE;JF2!Tj03`o?GC#1)f{rxdonE;JF2!Tj03`o?GC#1)ekToPlSZwWIc& zf#(c7XW%&l&lz~mz;gzkGw_^&=L|e&;5h@&8F@SK6?3_NGxIRnobc+S9c z2A(tUoPp;IJZIoJ1J4Af#(c7XW%&l&lz~mz;gzkGw_^&=L|e&;5h@& z8F@SK6?3_NGxIRnobc+S9c2A(tUoPp=Bv9q)lhFf8{6>eMMwiOOr;jk4B zTj8)34qM@{6%JcruNC%MVXqbTT4Aph_F7@D74}+TuNC%MVXqbTTH&Xay0=pIR_fkL z-CL=9D|K(B?yc0lmAbc5_g3oOO5Izj``4-Ce+Qoi{~COz%(2-sWsc3B(W>u)(7TbJ zQCnIPCczz~dwt-UvYlWfDNSHAm@E1n48Ka~9XNV!6iTO+7Gg{>{z7zCrEfdgSR$#YlF8ocxz*)TpPT#!CPBs-rCqH*A|+$Hg?Lju~V*1 z--euG-rCgHlncDI!CRa9+S#&pcx#8Zc6e)tw|01IhqrckYlpXXcx#8Zc6e)tw|01I zhqrckYlpXXcx#8Zc6e)tw|01IhqrckYlpXXcx#8Zc6e)tw|01IhqrckYlpXXcx#8Z zc6e)tw|01IhqrckYlpXXcx#8Zc6e)tw|01IhqrckYlpXXcx#8Zc6e)tw+?vgfVU2K z>wvcocwvcocwvcocwvcocwvcocwvco zcwvdTcPI&8tw@!HLgttz3>x8#XcPI&8tw@!HL zgttz3>x8#XcPI&8tw@!HLgttz3>x8#XcPI&8tw@!HLgttz3>x8#Xc zPI&8tw@!HLgttz3>x8#XcPI&8tw@!HLgttz3>x8#XcPI&8tw=Q_=g10Vs z>w>o~cw>o~cw>o~cw>o~cw>o~cw>o~ zcw-7^Kdwe1{g)o-@l?C*q`2Rpz{unX)4y+pyy+ zyhkD%c#lMuJrY^=NMzX~kqx{@A{%&*L^kjqi7b00vh0z_>I<66qc3Pi?~%x|M(<4ZTMq8~O`=HuN5eY)G$U zk3^PPc9uO7S@uX|L+_EuhTbEQWsgKQ^d5;UdnB^#k$8ds8he5N8hb%{(p~lfvB3*O zQ!l8$JEaM12Gd{*m;ooj0$4OM;=jO%{{kca3qg(3`LD4T_^+`Sc%SQj#*bDNk z@!jB^;9cN*!1sag2k!?~wkTnA7`6?<2jB z^gh!2N$)4UpY(px2S^_veSq`<(g#T&Bz=(dLDGjvA0mB-Z_`73n;zoZ^bp^shxj%< z#JA}ozD*DDZF-1r(?fil9^%{d5Z|VUc>mCw@8{d}5pp>~E=S1a2)P^~mm}nIgj|l0 z%Mo%pLM}(hk`y93_{de$I0b5xf~~#WvwwEZ|OO)*;%Jvdvdx^5WMA=@VY%fu^NtLa>Y*J-2IzF5vKAdFTev&A0 zk|=Rfb3;Gl?@*JP8yfu`YLX~!k~QZ^)|@9NrW>=Y%@tzGs(*HBoWIbvC1S-$|Uj0q~?+;kLHp_f4`m#{QY`Tb4la9&P8)Z zr~CW$q~?r5%^CGqv8P{&J)1^6$(e*yjr@Lz!c0{j=?zX1OQ z_%FbJ0saf{Ux5Dt{1@QA0RIK}FTj5R{tNJ5fd2yg7vR4D{{{Fjz<&Y$3-Din{{s9M z;J*O>1^6$(e*yjr@Lz!c0{nj;{=X0Z--rM2!+#O}i|}8B|04Vs;lBv~Mffkme-ZwR z@Lz=gBK#NOzX<(U+FT#Hj{)_Nmg#RM^7vaAM|3&yO z!haF|i|}8B|04Vs;lBv~Mffkme-ZwR@Lz=gBK#NOzX<(U+FT#Hj{)_Nmg#RM^Pr?5b{7=FE6#SRqyaeYZ*e=0#306z6T7uOQtd?N41gj-j zEx~6AK1=Xfg3l6smf*7lpC$M#!Dk6ROYm8O&k~H4V50;ZCDo zrm5XDwVS4P)6{O7+D%itX=*o3?WU>SG_{+icGJ{un%YfMyJ>1SP3@+s-88kErgqcR zZkpQ7P`epwH$&}asND>;o1u0y)NY2_%}~1;YBxjeW~ki^wVR=KGt_Q|+RaeA8EQ8} z?PjRm47Hn~b~Ds&hT6?gyBTUXL+xg$-3+yxp>{LWZid>;P`epwH$&}asND>;o27QM z)NYpA%~HErYBx*mW~tpQwVS1Ov(#>u+RakCS!y>+?PjUnEVY}ZcC*xOmfFoyyIE>C zOYLT<-7K}6rFOH_ZkF23QoC7dH%skisogBKo27QM)NYpA%~HErYBxuOFh_(ir`g;> z*<6{|e&@=(_B$tiGy0q0oK()X*M8?T%X5mq3C?L%$LMdVb6V9g`kUY!Yrk_^EwNny zi$>{{-Y>l}`djLp^vXzH%mn9{3C;!nmO7`Ipnv6WsdKFT&aw787xy7> ze@mTX?e|rptXGM$Ue$e5-z`s^Y~&OU(Dl+d3-UCFXr*ZJieI67xP-J zS}2>x7xVaH9$(Dki+Ox8k1yu&#XP>4#~1VXVjf@2`s^Y~&OU(Dl+d3T>jHUQAg>GLb%DGtlGi2jxE|J$I^14J`m&of9d0ir}OXPKlye^T~CGxsVURTKL3VB^2uPfwrg}kni*A?=* zLS9$M>k4^YA+Iasb%ngHkk=LRxM%9;5 z^<`9j8C73K)t6EAWmJ6`RbNKcmr?a)RDBs$Uq;oJQT1h1eHm3>M%9;5^<`9j8C73K z)t6EAWmJ6`RbNKcmr?a)RDBs$Uq;oJQT1h1eHm3>M%7oehQCm@Qs%kOO4)AE|G}}s z4)7IrfUmFve1#q0E9?MYVF&mMJHS`i0lvZx@D+A|udoArg&p84>;PY32lxs*z*pD- zzQPXh6?TBHumgOB9pEeM0AFDT_)6I&N^->*_zT)f;4f$^!LNhNG}VF&mMJHS`8n(7q)-^vO*z*oXrY-$~T0^9$$vceAVmC*lhyAt~U z^jFvczQPXhRd`#4w^evsW#{}Vysg69D!i@2+bX=R!rLmmt-{+Xysg69D!i@2+bX=R z!rLmmt-{+Xysg69D!i@2+bX=R!rLmmt(KX$Rd`#4w^evs4b0mrysg69D!i@2+bX=R z!rLmmt-{+Xysg69D!i@2+iGauR^e@xo%5^kwhC{n@U{wXtMIm_UiL`YntGWrq2I32 zv)1TYYxJx&jb%>vSihzb&9=R{rm^g-(BFX8=yz-MyEXdV8vSmKez!)yTjNx{HBQxA z)0xJ8TQBHS_15T>YxK%BdgU6ua*bZOMz36>SFX`3*XWgN^vX4QEid)XABwi_6$EWM~bRD0rE_;ekguH(~ne7cTL*YW8(K3xy&({+5hj!)O|={i1L$EWM~bRD0rE_;ekguH(~ne7cTL*YW8(K3&JB>-cmXpRVK6b$q&xPuKD3IzC;;r|bB19iOi2 z6lIlJrzjik)Ai6kU00+e-tg%|UCz^5DdbOWDm;L{C!x`9u9=eYBFUM1PUryKZm1D|f-(+zyOfloK^=>|UCz^5Dd zbOWDm;L{C!x`9tO@aYCV-N2_C_;drGZs5}me7b>8H}L5OKHb2l8~AhspKjpO4Sc$R zPdD)C20q=uryKZm1D|f-(+zyOfloK^=>|UCz^5DdbOWDm;L{C!x`9tO@aYCV-N2_C z_;drGZs5}me7b>8H}L5OKHb2l8~Aj?KGnr!`hP>A{@+ljnTYUrK+QyCYbGMpOhl-e zh)^>Tp=KgN%|wKMXWKIoq5l6a2;5GD(sQ9SP^kZA5`GZW|JTTto(rYtLg~3sdM=cn z3#I2mebX1}o4!!r^o9DSFVr`Eq1uU1?L>G8l%C6$o(t9Yh3fl4eM1-O>$yZ1@5TAzlG{mPNJ`M3{=)SLa+NU8t4e@D+PeXhf;?oeH zhWIqZry)KK@o9)pLwp*#?+2m#zR*4m@o9)pL-&29*ry>r4e@D+PeXhf;?oeHhWIqZ zry)KK@o9)pLwp+I(-5DA_%y_)q5FOi;?vN5U$%W3y6+3^(-5DA_%y_)AwCW9X^2ll z_kBHSpN9A}#HS%X4e@D+PeXhf;?rN2PnUGfqUNExhWRa^zE%gfmFb(5P~W74X6ZJ0 z_N-8=Izp|q2(_vs)T)k9t2#oh>Ik)}BWwn>sw2Av%z)bItrV^52n%4*C|~IP@`X{W zIzlVMZQ|Lu102s*X^rI>J@(=b%<~g4@KuQL8#aeLE9sRVTR3D+xla>Ik)} zBh;#nP%8<-yFjh#$kwWkP^&t^yFsn$$kwWkP^&sZt?CH1sw4cSN?s0c=jF>mGYRt|6F@K&yN>vZ#04sYe~Rt|6F@Kz3Q2kZm;!2xg( zJPdvp90HGkN5LF80-gX*g5LvAfurDA@cZBt__yE>z?Z>Sz*oT^g6F{n@B*m0zsj#U ztneB&`VsgB_!DFBAN<$g*T7!~e*=UWpBSLO!U++}?L;iM`^13YcF%l++kIky@Lk~V zfC(@H9m(7tZUQ%hIwedgj%{w&4lbid|Jyxx7CNfA-E(K5cCQIP3{sx(qu758YRy4^ z#YZ7N^4wV|)~?&bhe545$o@3w(pKXAO1xi*_bc&!WtqKSiT5k zMF{QvN}m@YwD&8$f+4i`E4_jtwD&8$f+4i`E4_jtwD&8$f+4i`EAf7%&x??4?^pV~ zh@cYhSK|H3z}~M6?EOlg7a_FwEAf6M-mk>_m3Y4r?^ojeO1xj`^CE)E(B7{M?fpva z?lao^l|C;*Xzy3z{Yt!FiT5k!aw4?%EAf6M-mk>_ zm3Y4r?^lNQekI z>U2k$&R`enjBDXXc=BFQXIv{qr#cID2D|WnP^UM`-h-{vn`Ni4bq2d^?W+`8Kkq2B zM&02Rc%j?s9a@2R*>ncGP-n0Uo53{L0%pKgo^J!&!49w!>;k(%ox!g6=nQtD&R`en z40fT;U>E8PcA?H-7wQal;ShKP)EVqb(HZPQoxv{D8SFxx!7ltBs597Q>kM|G&R`ej zL7l-aTW7EfCn$-|V3(~k*o6gboxv`>cV0wqM8A8SJuujIA@+Wnahs3HGW>9{fA- zm%(2JZ}T(iJ9?g3(jDqSwkt^28SJv(j;%A;W#7)PDnadNc&Wu6^G2T?oiKly3Sx1uJPM- zV@zkT3q$aiK<)ijiuQgBA97xb$MjqEbiIwa*d6NcPTA+bDo&HFzOTP3TC=S)*o8WS zU8pnIg*t;>cqgbc*k#{^tuxqV>kM|G&R`e54_jxj%hnm}LY=`b)EVqToxv{D8SFxx z!7kJp>_VNvF4P(9LY=`b)EVqToxv{D8SFxx!7ltm@Q++~X^2zq!`2z>vi}5IXRyou z820@jy_nhM9a0$oHATA4V3++6HY_pUyhEDfbo#QC$M&aqMrW|g_Nu}iQX$)Ka`+jT z+z);h{2chF;OD_V<5xO^J-AaNmr*CV1$Rn~jXLQ_t;d>{K+_UvS^`Z=plRHbrN4R< zPM~QCG%bOqCD614nwHQASg&W?W)f&x0!>SxX$g&nPPe8dG$z`%rX|X(X$dqffu<$U zv;>-#K+_UvS^`Z=plJy-EuqWrg3|h(3-~WT|#Rbw|5DxX$g(Ue%_jv zK+_UvS^`Z=plJy-ErF&b(6od`WdF*VmO#@IXj%eIOQ2~9G%cYK+0R(h5@=ciO-uM* z38h%m5@=dNb0t4xO-rC@360&ht!W93;I^%4360}Uv8E+7n%lOfB{Zhnwx%UCvfH+% zCD614nwCJ*5*pc^ZcR&|X$dqffu?b1nbNIk+*~HKrg49n(3+Oe|EH+rXj(%5pJLmZ z#_eW8YZ`Z)39V@fG%canz_v9lp$NgYH7yZX(-MI-ErF&b(6of|QOiWr5@=ciO-rC@ z2{bK%rX~E9Sx;Ki5@=ciO-rC@2{bK%rg6`jo}qoBX$dqf5m?g_Xj%eIOT?^ciI_Dl zfu<$Uv;>-#K+_UvS^`Z=plJy-ErF&b(6j`amO#@IXj%eIOQ2~9#X0gUnwC(sW80dR zK+_UvT0)VJ)2(RyU?_|(6k6m zi_o+PO^eX92u+KK(;_r2LenBNEke^GG%Z5YA~Y>R(;_r2LenBNEke^GG%Z5YA~Y>R z(;_r2LenBNEke^GG%Z5YA~Y>R(;_r2LenBNEke^GG%aEkH$u}QR&gUVEn*cnLenBN zEke^GG%Z5YA~Y>R(;_r2LenBNEke^GG%Z5YA~Y>R(;_r2LenBNEke^GG%Z5YA~Y>R z(;_r2LenBNEke^GG%Z5YA~Y>R(;_r2LenBNEke^GG%Z5YA~Y>R(;_r2LenBNEke^G zG%Z5YA~Y>R(<0)u2u+KK(;_r2B2J6YvR z(;_r2LenBNEke^GG%Z5YA~Y>R(;_r2LenBNEke^GG%Z5YA~Y>R(;_r2LenBNEke^G z;er-Xo72|C3YXQ{y|q-v-|e z-U;3X>c7AB%=xmVx}2NT#*8lKCd#=enR0HXoSP}e znR0HXoSP}r78oLea8 z7RtGWa&DoVTPWui%DIJdZlRo8DCZW+xrK6Wp`2SN=N8Jjg>r78oLea87RtGWa&DoV zAEcZgq@2FJaVhZ4j7GOl-^^&V-+eQq(SG-xj7Iz2cQOhor*BbQ2z-m8(e2Z>C>q^9 zeT$;ee)lbkM*H2jC>q^9eT$;ee)lbkMz>GjGq@mhKk_|;PH{PXhoI5r^c{jmm(zC$ z8eLA`9%ytqeH);Va{9hMy^V7EzCWc?PT%)u+vW6qe@2(n_x%}NPT%)ubUA(BpV8&4 zQaN>|hRSL5YEqR-J1k7_SAYAiQj}u!m+mUXCksNatX7qI)v>Bm}jl+pp}))?7cU^nPh z?kd(ft61l(Vx6;!b}v0Tg94fmEsEjm3F1LLblq!+NavT@gY)lYm98i`BjP>{ESz~ zs}woNR`1YXS>3HtAF=%||5ZK3w%7Tq)L(4t))=AJPOH>wY)9C-HAc2q9;(!XY;VHW ztueAUW8aPKF9KESQ%?7~Yn6JI?cc-px1lOU4#p(tZ$njz9E=|Z=~IdvT=I{Sav$~| zWB&0gQ*{091$A_v>_FIJMP6gl{9{+3jw$icQ(YpWDF*!F5|l_Ce*{<>79 z$iX%oDsr&>8E`+STVs^+IZ(I8$o{-=t7bqtUA@e^iF`xou+X~*xEnOs%BuTT`A#XU zz5AZT;lTIt>GV%MX|(2SljhjA7q&4o+9u7hZ4S3db9Ca5G{<-^xEnNA+oU;Xg*s_O zs1px_I%!0x6Ay$sX+)^oScJNbMd)=c-vH-aT^&PMe)JY>s82|^t!=O$YQTh<5lSX781#_TI8d1s# zP$!MZ{vLP=90he7i_-I;Zex+H+gOA;X+(IIXLQntY@IYB)JY@4DeMw8(n%vq@k-7% zDUa1yCoA=&w3yM5vQSgkGKACgm}{4(g;4*oMv!mSCHd$Ee#_ggR+Nc$@#KS&!bytY@2)$94tjzmENO?BBq?onPss5k2Ex zzfHkoirlU zNh87}sFOxy>!cCkhe7JjEM}Xu$mw2f-lkcMZLc37Uxwn>ZpSFbj2 zlNQsXHffP{-EqU~srZ_*rAinVAv3bP$8+Kv`&M~i%e;c$>di;`$jk|%v@o=zo3i+pR|f^2J% zZ_P8BAK#j1v=$}H+%|k`p8sks@~wGBbK+a`Y?~9`nrGWuyVkxt&pBF)e0QGF zTI9R)jMgIGo#!XpK(8(P?mVN{mVI}g(QC`TJI{Gpi+p#U(OTrY^NiLa-<@Z)7WwWx zqqWF)=NYXCx9N#1w8*#V`TdT!eVd+bYf%y{ z@@;y05-m!iMZQf>&!9!VP0zObk#Ez}lW37|)3a?Y@@;yytwp{~&$hM5x9K^>T9ibK ze4CzaYmsl$vu!Q%ZF;t?MZQhXwzbH&>Djgx`8GY<)*|1gXS5diHa(-Y$hYYktwp{~ z&-h2KHCp7`^lV#;e4CzaYmsl$vu!O(hV(nM$hYbFuht^prf1t)~o^5MU z5-sv=dbX`azD>_I9HK=@#YJY)TIAdGjMgIGrf0Mk`8K^J;d?>Po_0t*jGoK*Ha(-~ zGQLgE=(&t<(=&Q5s?zD>{Q*xtA486D62Ha(+b^&M)TM#tyAO;1RK z?A!EYi$kNMO5dhubUf+X^o))neVd-qaiee3GdfoEZF)-q_g)EIJMO&_x^~=qC3Nk$ z_e$v6aqpGTwd39^p=-yzS3=j0d#{A99rs=dT|4f*3b^-5=-P4bmC&{0-m8FnuLAD9 z61sNWdnI)3xc5rv+Hvod(6!^%3yQtkRe76hV?V@(O@ZBzIw+r9x!gssy-7adk z3*YUccDwN1E^4<6-|eDyyYSsEYPSpD?V@%y+5=o4)RgJu7NO(q8r9UOn@5Bm>1tG8 zqfTxS>f{!oPHqwEYP{)Sw|Xs7DRDQ6oP6ytSeRm8d}+i|lVI7w%0H{)$@8A1Zg_TZQ+qhx1y(lv8VToJ!6%h5qn1RVh8NK?0~&D*hP8`zw(aj zd)WbdFFRoG6{|`St47c4?j?@8SL2Ry(fDF~C+Hp5_i8jT-U;3Xz6X3C_lrJ zCzMhL|8?+R7d)uv>jJlmx?msZnQvY2IQE}m*DLorz2E6yApI%q2JmY}*rLO!KdXTp_n(mRrn~rdlcV2itiq!){p8v^}(a~?ooXAXkgzx zitir9caP$`NAcZb`0g=$_ZYr=4BtJ5?;gWzkKv=o@W^9$WG}wh%QxA*cx11B`$(`? zzcuayJ*Mx~8=P_g`$_SzR~~WtpR1gE_;EjN?6Z{lvy}O>uKBdwC#G@c75QsT~FJt58Srv1GnvZ+IBr{yIz{( zH@I!r)3)max9$4CZM!~j+pZ7Xw(Duz^|bB!z-_xeaNDjA+_vijx9$4CZM!~j+pZ7X zw(A48?fSrNyPmdPPus4iZP(Mb>uKBdwC#G@_CeS<2oDFvLpnGp9*kDqgS3Z(;=#66 z_aN=(AgX&1)jf#n9z=Byiifj$#;SWzJah})yAO(iVWCy`pcpV(bq|UGqgD4Hbw8-O z+qUW+RNehotL{P7+O}2qplWTj>K;_BZCiB@QpbbT@gS=Eq-xh4JgM3VX_HUVCZD8D zKB+c&R_PwOo}^7asWv$*`ylCGP+NLZtpgnE@e@k_0{nadX1)M3U!Z4w zfu8jg+&%@jPbv4|;3?&9+y`0>o>J~ku_io4`JbZvUsOpJf-llLzDSSwBJIC{cQ)|O z2K?24zZ&pY1LbMJUk#M1fl@W#uLk_pfWI2>R|EcPz+Vmcs{wyC;I9V!)quYm@K*!= zYQSF&_^SbbHQ=uX{MCTJ8t_*G{%XKq4fv}8e>LE*2I|{DeH-xCp9f#l`u3NkNJ~OT zgI|))7#$6MS?R;VUopb-m*M%#dPXUFW;pl?Z}_TM8VAi)TM>Gv``n{Dm5HrC}D;YX2kh|Qe3Kx*fzR68L_&cI{!cFpjlGqspN7s0``g>oECsnEX0SejO&i z4wFw)>!+#p(aIGLcQPkHsQ1U z_E~=WEWdr0-#*K4pXIl{dFO1(MjAL64ph20h}l zCl~+^>kU1Dch2_&W7scYd-bm;xJ=3w&}(r$!FBLoje5V{ruQ2^4}RIdjeQl{O4}3b z1fK^7!SDLbu_4}Yg6B_SdzG>$b_)A%ut%}Sczzsvg7h=klr!cTQ%~$1>F2Tk4O|9S zz*TS!{5iPJ^S`hiI_~NTf7L1BZQ{8nv{v_o<=D47_wYCMq;CXB3;ll_z864tkac>{ zr{{YE|Nla7FpTYb^#-m>Z*UsSOHX=(asM`$;jdmP?G0vmkN4m926H_5Dmc$ye+asE zy}@~&{NLDKLG2A*<5w53FM{5q+bgd*mn+~^Qm*mN*Lmhg;E%yK!0SBu6YNFs2G8Hb z{yXu|8~l{_ERpi}*#AIzZh`+q`oDnx%G>@8d&Q_$t@029^b!O3HUzP!R&D&8-xm8X zJo%^2H|FuZH&#!|LH_C)dT;D0QvNIW=b&Tw-k6oMH};o2>0Z_w^IW?(=DBun%=^82 zW1egG#=PIVH|9vJH`a>nn5Q@P-$5%|Z|tv0cU03Gb0pIn>jhunuipmoc+4yFy=uv> z-BE13A3KKqB2OOYZT}0~|H;xDJK>fPJISw3fumraXJ{d@GrVCEEP!5z?~QqPcW=z= z@V&7T_7C_KZ7DWO`YUkdRrlT)?I(5~n>G{kUhdu)?Ih;^Pw9=l4leSZo8V9F@fg02 z{R6-KKcxR7PyS!*TiE}E{mj%Kb)MevZQyM@>G82Qbkx)vR=8f_+p&Lx-~LCQ{7vT){uXwezrI6HX6c(* z`e2qmm{spvP`Y(28*@v`(sHu2lPoPHOWVlC+$yp$w}))Ze$2+~!L0mZwB}@E-v_5a zD^E6Nma;MPlZ}~~tm-aQ9gWuNtQ5xRF(Mnf7B7(U0x3R!emL;?^Fma*50&l>Asj%x(}7^i&>@n zVpi$Cm{qzDmF|mK&HB`0{kHF6TiNZ~zVm z;BWvA2jFl34hP_H01gM>(Dx(gop3k+hXZgp0EYu`H~@zOa5w;m18_J1hXZgp0EYu` zH~@zOa5w;m18_J1hXZgp0EYu`H~@zOa5w;m18_J1hXZgp0EYu`H~@zOa5w;m18_J1 zhXZgp0EYu`H~@!(=+7YfGl>2SqCbOTY#|tgpFvb;P&_CFEgD3N2GOEHv}h158bpf* z(V{`LXi&BDudGOes-4lgG$>u_7J7^rR85`Y9yf?O4WdqisMDb8<#cP*AR0A@Mh&7! zgDBD<8Z{VJDh57G{BxMd=dfz06e6F)L_UX!d=3ZJio>e4|LVPVhgIvd!oS6ymG=(^ zuPDdEif3%UhJ6XV3R=MqE8Z~vtZcvV@3H@ZH{9Y^|Lk<4h{Hq?hZRNWdGV|5CXg#FLh z_S#`a&%+u$ZF}@QtkKi9N6f<-F~xv9sJevzk@VjJJxU%9-=V+yMv{7=$KN6K^lqV} znj!UZr&!O2=;K4`<4(U!ihVRh@Amy8dQ$z`_<5((uZQT@L-gw*^=qd;4-SIg_1oyz zL+aQ5t;d%k_3O0oZ@@90p$zopAzJ$oeR&ABhiL6XwDuwT^$@LnC`JimZ}3i!BSW+Za%f9V z+M-;TkK|(im3MkRl8gNX_!XCy`A9DISJIq z&Cf9($;CV$$uS?vF(1jrUf`XckK|&WkK~w-2o{!|D1InHGNG|kzB*%Ot$9yD*qUM;7E5Sz zig^1};Hd8uY@E`F>}RGx?=m_iO*Y;#!u%w+Uz1!&M?v#4B@h9L7p7|Hh zGr?2D-lvGVPr>l1(Bto^(4*}sTF5C{$SL(cr&Rd28n2CUQr;nZl&^B5e3cs&&*@-P z+;$6xvCZwMSarI~KdSN0f3+fwiZ>x&=tlWMH!9wo@+9c*`=hWl3J;^ydQ>W>w@Kyv zq{qHd)z^3hbbUvu%P4gjRht=BiswP2s*8TBy6Ab;!uC64pQaa_rWc&17o4USoTmMs zrv0C$<)5bIpQh!Xrsbce<)5bIpQh!Xrsbce&7Y>VpC&#zO?+~ic7B?6ewucEns$Dg z7Jix*ewr43nihVV7Jix*o+kpy6M^K3K=PD4PXv+|^YuYq%y$btFUV7)JT=M_f#ium z@^u=j9^K9pf#ium@}bK1d=BL$rFL(i9qs1AY=5_G5YD4`sq?IMn4^+pN`Q_$LObH>Zksz=kH_cp=X7j zzmKVJ4hubhA5-tM?fLtddYSPm=$Y4;dWX^T_c8Sj+n&FVsdxBSp1+UL=ErFBW6a;j z)Y|n7EqqKZTu-VcJLNC^2DM(>X>8Bm$JBbA?)m$eTCZ)--^bK$jh?@cF@GP6dHz18 z7U*=(-^bJfZF~MchBl6&jbmuznA(+UjY5twe;=bQjWK^8Lo>%{Ib*b(F}D#q;+uwGG?9FyiYm=I>+pdW`w|82%lTf5m`2t6wpHACpi0D@T=M z%-_d}F2;#2#uZ&G1mp6laR5B5T8zuTPH}WG9(V*C4_*WvU5pc5j0gTNfN{peam5u* zp8_3Mj1yOk6IYBASBw)^j1yOk6IYBYuF$WDD8`8>#u+QeWB-%%?}Cmf#uZT*{|0nK zF|LTh=qO@bJR2QFj1xbMi(#iYei$cy7>{{AI3D{K@ZWgP3bj)(9Vc=aCvq4k zau_Fa7+2(=HxN0Di^-*6f{|;25o$s$e?ci;d6*#9nqcIeK#eDeJSWiD2^4h#EuBC` zC(zFclyd^bn?UO(h?gd4X%j?E6STJpbZi0zn;`O>pmj~4FcWCY1gbJYTr@$;nP6O= zU|gPHT%KTDo1Rpz?S#XDZzmM0Ev1G2MqCIS zqZU~8EvTK?_NsnC?ZkieicmpgtI>VGpwZLl`B#Be-vXOX@OPWg4&W&#MoJ(zY!P2n{9u6D6nee z8wQ61-!LeI!y+6O;jjpYMK~Vs+7=CBBdMK~)VtVw(Ys?6f=b>ackQ%jw$;76k0ch)=i;xQ}q2Q z6mJT}n?muXP`oKAp5NdZ(-h24!TA(yPl;!}8Qq&g_omRjDRgfN-J3%9rkF8Jp?g#4 zUJ15Kuw8=f5^R@Xy9C=M*e=0#3ARhHU4rcrY?olW1luLpF2QyQwo9;Gg6$G)mteaD z+a=g8!FCC@OR!yn?GkL4V7mm{CD<;(b_upiuw8=f5^R@Xy9C=M*e=0#3ARhHU4rcr zY?olW1luLpF2QyQwo9;Gg6$G)mteaD+a=g8!FCC@OR!yn?GkL4V0&8nuoO&7AB5`H zM(-$_3I0y&LNCh~-NJHt^JRHNws<=$^l139*t7i_wpWs0R>WoeDfsu`EkDCPqL1%m`#+doR%~PRI>XC~XM~Dj zjBf)g{G=ilr~DT94yDXe_gU&bOWkLw`zxfsLi#JDze4&PapoKm<{S~`91-Rm3OPrF zIY(?cNAx&HlsHFxI7ehSM@%?J95_eRH%GiThqBF~X>+ln*q)1(K#vY{L~(P(Z*xR$ zbHr?O=-3?5+8lA(98uXEQQ50_@Em16N14x2=5v(!9A!R7na@$?bCmfUWj;rl&r#-c zl=&QGK1Z3)QRZ`$`5a|FN14x2=5wg=Im&#FGM}T&=P2_z%6yJ8pQFs@DDyeW{2I)^ z2J^2m*M3bS(Ngf5Mk3=ivGJNpZu>g;uSR_I8a{fBIpAv=Wt@Hz^t$nD8b_RR2Al-F zGW?oK>vXT~zNWFm_A2;u@E1mAL$5I#dQBsRQ_8{L6kepv7b){a%6ySBU!=?zDf30j ze33F=)EKH?QRa)3`66Y$NSQBE=8G|x`66Y$NSQB+XaCA&zDSubQs#@4`66Y$s4>pZ zxXc$R^F_*hkuqPT%ojDHEd`h9*O%$nm+9A+>DQO(*O%$nm+9A+)n@d(+Kkct`m$P! z(f#@|{rWQf`ZE3cGX458{rWQf`ZE3cGX46p+LeB*c4c(GzN~g-bick#zrHLz^qbwU zFVn9t)2}bnuP@WDFVn9tOVjiu{rWQf`m!|bY;c7UvJ?puG&R;?2 zuc&NJ@%-_M-e!D<@G3sNichcN)2sOODn7l6Pp{(BtN8RPKD~-huj13I`1C41y^2q- z;?t}6^eR5RichcN)2sOODn7l6Pp{(BtN8RPKD~-huj13I`1C41y^2q-(bKQd)34Ff zugPl*!8LmNHG29rdiphb`Zap`HG29rdiphb`Zap`HG29rdiphb`Zap`HG29rdiphb z`Zap`HG29rdiphb`Zap`HG29rdiphb`Zap`>oEK}48IO8>GKM`gNtJ zgX>Bc;*sm}NVn`O^7wT;a$PkYmVKS{e|5Uvpy%}l;{ma8J?7P?>#ROqXHDrkp1Lki z>230q@f5!u1>F;`%WF++-V7k&mm zUdNBu7wFozri(Kq^671bdj1aQqx6hx=2kIsp%p$U8JUq)O1lT*6(pm z7pdtYHC?2pi_~d~COR}x@H>l|i)zr4t{sz5_`!oaY(-iuf z;|+S*4SLxPYH@>Jc0;w$ujpkrDESR~*$qm5gI;!nUUq|Cc7tAagEHTs%s1#|H|S+I z=w&x)pEqfrH!1T?%6yYD-=xepDf3Ore3LTYq$S^^CEujXH!1T?%6yYD-=xepDf3Or ze3LTYq|7%d^G(WplQQ3=%r`0XP0D3YLL@H4$(Ay{IhSYo7DVx(ANq*!94SYo8mcqpEi7%7$lj}%Lc6ibX0ONET9?G}CQ7Jcm&eeD)~?H1m@ zMPIx1|C99o;c;E{x$n##TU*ce$W)etO$i7g6d{BVLLqg1eR6&J^f~m`ZJ~R@~b@_Y~qtHc60w#D*x2U1^xuNdP4zI0jmNsYZ|@%XSLa zAWP$sXEZx|?)!fD=Y77;tu3K}B{Z-^ zTU(;7Ez#DBTxpRjEpnwruC&ON7P-)Uq{u~QT26HeH~R_N7W_z%93x<>6m*JyMfQQ{g)x;n>RPgSC?EYVk%=qpRQE|t?)mgp-> z^pz$0%4PDIW%8M2@|k7wnPu{sW%8M2@|k7wnPu{sW%8M2@|m*suqR#SzF1lNQOxXO znfdmzM$`AH#P`L@Y0qwznRP5P>saQ#Seg4`W$ufWxi41MnRq{5nNvnlW$ufW)4nfO z=Dt`t?K!Tp&emIcWllNmdmLpk?|)q&_R5^HYQZI5nNyY~jb52kMw#WbSLT#eJ4W9Z zE2q6Or!1{{ORvl+b6>2S_DpP<`(ov^SLT#eo8FJ_i zeX%n4#mdatmZdK5$C*i)mQ@aR6Z=VlGIP0Qsm}2*<$hA29E=b@0(xb5S!#5-SLT$t zFIMKhSeX`D=Dt`t@XDMr_r=O;v$|gHiIQPZM+!re|Yh6~0^OlQj>6JNU zX0Xd@eU3ddT$bDT{Jk=#EVnUwWlovJ{Qw+47sj=ZM|l-*H?bJ~rqGp?v-cIfBg^R7m6dcI=;s+%(hZ>JRrtcV(6cLiXI!|B zxXH)jZ8m&!T(MW$tfb!tz5{FlJHaln8|(pl!4HFeQ|JnB3SCM6C-(di%F$ICUC~lj zXeleaDRf0|CegomQ|Jos(&3BeD!I%5Bz`~TepBcQZwg(}8?hXJkn$el4-xxKp(~kNiEjfp zft$fC;8yUrK-v`V0^&RD`tR>@6~D)?zfb%J#D7Rk`^wP1GPJJ@?JGn3;!U9|nNP4~ zAOHF!@twqfO8hC}PZR$c@t+g_1@W&q{68uA4EW!`yFuTDU*S!m`sRD;kJ9?)JLt8_ zRq~=LPNMIdyPS+jUpXiC>g5>EiSeA6En_?<#&cpkC&qJPy|d`5wl_a<%G!wWoH%7| z#CkiQf3@etDRUC1%t@RwCvnQ0#3^$Ur|da#%AOOa>^U)>6XQ8?%AOOa>^U)>6Z2N6 z7|)4Q_MDivLdAL;l4E;L%v+)2lszZLb7DLvPT6zflszX-*>mEQJtx+C`Hc3Qn70$h zcut(M=fo*{PMn$q?KyEO5889$l<#B4cutJx#3_4DjOWBDdrpk!#3_4DoU-S{DSJ+g z=fo*{PMosm#3_4DoU-S{cut(M=fo*{PR!ehV>~C;d-+^$&xunrpgku}`JQ`>=frqU zjOWBDdrpk!#CT4O=frqUjOWC7PK@Woyq!44bKamJn# zXY4sKo)hCaamJn#XY4sKo)hCaF`g4=>^X79o)c&6IWe9SXY4s~#-0;r>^ZUC!e_MS z#Ci*#kv4_r#F>v$V$X>)_MA9l&xtekoR~L~#TnWco)hCaF`g6SIWe9S<2f;JCyq1r zoH%38iFsdHoU!M`8GBBgvFF4Ydrr*TiDTYQ9P2H7F0tptdJCV?o)haWe8zi)Z{j&` z;yG{1NhVa{=Of<4N#4YB-o$g>#B<(M4NjyJJSV|(61Gh6oCMEF@SFtCN${Km&q?r{ z1kXwEoCMEF@SFtCN${Km&q?r{1kXwEoCMEF@SFtCN${Km&q?r{1kXwEoCMEF@SFtC zN${Km&q?r{1kXwEoCMEF@SFtCN${Km&q?r{1kXwEoCMEF@SFtCN${M6JSV|(67rk` z&q?r{1kXwEoCMEF@SFtCN${Km&q?r{1kXwEoCMEF@SFtCN${Km&q?r{1kXwEoCMEF z@SFtCNyu{&JSV|(5RkfYB)&^&#B=#H9V(g&k0i6a*t3mJVLz@UHBei zWt)oM2gS2^2n5}za1TZmPDo>26Y!ENXdDOdRvQ7Zy^?HR$r(U9YW3R z3$>y{xQ@7qcs=n=#Ci*{e$`uug?bCIP;Vg?>Mg`Vy@goV4fcS&;DLTo~37PBPAO@;r+;q9DmZ=%Zs$VyvVWMLL8*zMf%lmAr|T_ z#KLzG>n+5J-%YHy5G&SOh=sRMqPGw$elKwcvED+g61|03_v-*TZwN2H-VeME#Ox0w?MAl?+ewQKT65(68|3Y?-Tz4@gEX@45Z!3i~KLzoxI5L zpRna8i2H~?Nqi^qpAvtHm{ut-@-@Pt-$JbTR~+h1Uy45i{x?u>Ay$drLM+rJleQNL^%g0i##};sQIPr#V_I`N!dt-mz(e3s@GPhigtqyy&N&q+|PeopMN{{k%>&q>uG5xEs`rv`U6R z%}6VLoa26xJ&beo!{8CnoY%>vjZcAkkB8zD;FrKJgHMD11nPMxZ8HVx`D?{r0iOfy z(sjxYjdtleT)Iv!?em%DC@&GeOstt_mA^v#P4@5__$^R#&ieIV!0&;&TcMH}@B%ms z{sjCtjyMO-gO@?OZXK>$hwIkix^?nf?M+T=Yyxir?XGpWYn|NHvEHjG)Yp)O`f{ky zPFsi5*5R~u%JE!cr>*n*-i5cZ3;zK7x)->m~+sb zCjF{s--Oh1+I?l6=C@r=U1)yW@xQVS%xiwz+y5N=1^7#jrI~z{ufRYICPwv#;(;Ed zPCbaWQ4gZCQs1Hd(09}YcN1^t*B#)4wX6DdC*{sq>H_B~b(#q`{vCJ>k~3ZZ-OI?b7Td-vLPfnBan^XD$neJJ5|qwgsQwaP`PXKjS; z4eN9t!MKi+w-Wz4sAu$4elz9z8nxng`byOsI(`?izDBM1-NgDDwcxg>ew{R=?Ti|bl9|eC8`~whQ zQcvgY_0~WHN;Uv<;Fg)9W}&JL*>Sf?Wmzf+&+pOHPndPXh#h-;x^h*LmV~Kh}&D90PU!u z@?N7IHPndP=(ZN(sG;&+$9B|EBW|M|HN;Uv95uvILmV~4QNxrSHB{c~`=FHPmR@Xh#h-f;QSwLmV~4Q9~Rx z#8E>WHN;Uvjg+;Yv>i3XQ9~Rx#8E>WHN;Uv95uvILmV~4Q9~Rx#8E>WHPn}dR0}w2 zh@*x$YKWtTIBJNahB#`7qlRfaYN)r28ttf|-YGgGw4;VNYUuZfDz>ABX*+6&qlRfa zYN+>!8ttfI+Kw8g?WiG+8m8^2VcL!wrtPSq@7)XSs3DFT;;12x8sexSjvC^qq3#%Z zOFL?aqlRfaYN&hSK9(Id#8E@ds;U)e9!rR$hB#`7qlP$Yh@*x$YKWtTfgLpr?5JU2 zM-6e*FtDSBIBJNahB#`ddy6hdr8sJcqlP$Yh@*x$YKWtTIBJNahB#`7qlP$Yh@*x$ zYKWtTIBJNahB#`7qlP$Yh@*zON2znrJxZe;HN;UvjW2W+IBJNahB#`dxek}xQA5pj zIJTpP8eh1?jv8uw;n^a~&?RqlOw;811N`W;TrY5{??;s3DFT;;12x8ftXlE$yfwjvC^q zA&wg2s3DFT;;12x8sexSjv8j{sG-088q}ve&ZeHW54c6`s8TH6Qz)koCY6~_;FZ^0n(F1E>myD1q0 zhrtnWKX}|n*C@t&cosYj>K#fd@k~p-o`~@g^$sQB^OV0p`HLL!tCVvs!Pkjj244Zc z&o=Hs>a~``ds_sH;G6u))#;fRZR6D!LTBCeUV|a@Y(~9CQaT@vq#XZe@OQ!A2mcWK z82EAUkHJrXo`0y<{GRdCAnaveFY|wx!_5B${@>t#2mc57m*6(e=RR-;`1d-Wh}>R$UP!*4~@*V&xp}nMD7uhdqm_O5xGZ1?h%oD zMC2Y3xkp6q5s`aD>R z$UP!*kBHnOBKL^MJtA_Ch}>R$UP!*kBHnO zBKL^MJtA_Ch}>R$UP!*kBHnOBKL^MJtA_C zh}>R$UP!*kBHnOBKL^MJ@hRd>xA4RBKL^M zJtA_Ch}>R$UP!*kBHnOBKL^MJtA_Ch}>R$UP!*kBHnOBKL^MJtA_Ch}>R$UP!*kBHnOBKL^MJtA_Ch}>R$UP!*kBHnOBKL^MJtA_Ch}>R z$UP!*kBHnOBKL^MJtA_Ch}>R$UP!*kBHnO zBKL^MJtA_Ch}>R$UP!*kBHnOBKL^MJtA_C zh}>R$UP!*kBHnOBKL^MJtA_Ch}2gRJg^8l8J&btly5+#{QE z?vYJ7_sFK4dt_72J+dk19$DQ5@HWmpvYPofI`_zudt^0x@7TFVHswA#OYV^+_sEia zWYf+)vYJuU7b(a+vg96Fa*r&zM>g%;BTMd)CHKgZdt}Kyvg96Fa*r&zN0!_pOYV^+ z_sFK5dt}qjJ+f)%9@(^WkF4e`eO%`rS}Aw)v7*! zM>cTokqw-CWCQ0O*}%C+mfRyt?vd5nQSZUIM>gQ<$UU;;9$9jaEV)OP+#^fwktO%Y zl6z!z7gBr3IQPhAoO@(5&ONdj=N?(j@Ee_bWHZh^vg96Fa*wR$@Ll5EBTMd)CHKf? zoO@(5&ONdj=N{RNbB}DsxkonR+#{QD?vd3@vc7a8Jw73d*ZUpnn~Z-C{sZ{`^6UR1 z{v5HshoWr`fR9l=N<3!Nb?H2HT}G`N4Eprcz+;RAi#W$R08RkO;qs#%yA zX^(wD=xYf))7Z!TwLb1o^+})Fv-D~7-Kak4)9Cw9ecXZSlRh2$u2Y}%Y4n|@KIzkF z)%BseK2+C->OSeGGlEZwXQ7U6)br-Sol@6?(D#+@l)7ew-p`%NYK&T?Beb^fOn;X6 zKGox$sQ1ovKjj0ITgi8(hmERb?M=08w6^~u^`CWr>Mv5C06&@fjN&`NKLtMpzGzIh zd7E@Q_#2c|!8eV;tu7Bf41OB?Gh^nn{x$P=#Qz|?OGo^S@Dreqco#>!E9E2JmGTkq zO8JO)>4?U5&_}#WYa5L|;$1qT@x$P!!9O!{#JhAv$NwO_8;0+O;k#k@ZWz7?hVOyl zd*t(1gL{<4%?R}t3!zpF3QvF&;7RaVew`%tJ(qjZ&lA50ehqwyZC(MjqEFlW09-Os z3-?e9_XOL$y)rbH-w!@O$u8m?_&6m`66-A%+H%sz^?MbBdW(hd4BI?U%$fMT3MzMN zx<|R3QST@aexF!t2o=wQKLLHO{GQ+qwkd%(D5-!|@J*xNs~`-)22d*oRid?mLao~o zYGt7C?UdZCm~Vawt>?c~K0G7*0k~v@6TaT1cn2llF=}tdn}zqP9w&s6QT3$~)s)e9 zFz;3WYkY~4AA@#@dsX8qSB)DV0C$PKd)1#BkF$+y`ChT=ZG4yWUUBPR^#&xN>-S#u zlExR=hGU6IZ~vxI{oSbWE#L-k$vw(#I_EvXHl4H3&jblQFR?BC6YY7MpXCwiDP5uS zgl&GxEZC-V*7iDQqx+6+eilaP+0kvmBj6LD=NY!qvu_K&!hfFw&+@B#_HBO3OsEyA z!f#OSwHe#|yopdx=?bq9{~Ro{2hTQd3u4d?xh+%YUo-WfXBD>5r*ESl|E!;%3O=js z$Y?cwR(X+e&Zw-$I0)_rhrnTQ1l$ik3!VnQ3Vt1Y8GHq_az3jJ#JC6+!NjOhhH(w( zKH{@FPvcF(?W&Rcgzne2OGTr?qoC)JwsX$gr6rfY1X@emxr*(oBgLv6ZK>KZ-b={? z-cotmgwXx<_P~AI_FxP=26{ElcI9R+cRscqrEMo4+fF{VT}tyd=54!_=GY8uS6g;$ z9=0nVbL=%X+oeFG+1T#)X$$AUHz_w8+cO!k!AJBHf5NvAo0IKor`iKr-2pQ@U}lHL zsx!e3jZ%%Xpmn;-i(CF1AzW}Y_9k8?mmUd_~s$Ws^4#uH7G!Au% zRlNgM@6edk@m_ErXr1rS$kb?^@6h{y6Tr-jRyVbsvlkTqpN;&)vvcm z>9}$*Z)08cqpN;&)sL?F(N#aX>PJ`o=&B!G^`onPbk&cp`q5QCy6Q(){phM6UG>ZB zd@Sp#A6@m!_wG|{UG<}@e%e|;y6Q()128iHGXv;q09_5Bs{#CQ09_5Bs{wR1fUXA6 z)d0F0z#9i(X#kc6(A5CC8bDVA=xP964WO$5bTxpk1~k_(6Aa*=1L$f1T@9eC0dzHh zmkyw-0dzGW-bVE=>uLa94d9{!=xP964QTemd$z6yG~;2kt_IN60J<7LR|Dv309_5B zs{wR1fUXA6)c}qZ3||fYO59!z{)YH(i0>zRxu5>@etOUQ$tdoZTCN87OD#rc z2=|jA+^_%61o!K|GrVioXnP&S zxZT^+Q$L{WLfb35@HQ7Hp9Oznlp7n}|307$L0i(NKcL*ev3vFhrI4#a=fDrrOFk%7 zIQ|LfUh+Yy!X=l$Wuuf}bhi9p@PxNfZ91L;-2*_j0uQHZ}RxhL?KC56h4t_ly!Np?vU z_X#J6C&91qtDa|6xmVckN`I4BZ*x`bmbFV7aO@s=7tXm0x7?+xc8UAnU4EOZ(7o_3 z%^`blOZ-c3a}E4mOPz_7V|0(aOIew=k&1LaQjzwr49z7w`E@t3`{iAladNqP=Utk2 za%?Z%6^sz?2i;Te^4na6dYh}zYTt#s?$S(@WB1*==zVt4@9a{);}X5iRrm_=tHhos z+$GidteoNOVitOrROhq(324{dr99Akw)gH*Ht5)XwM(;7j_t#{=(Bb)|GW$D-NpR# zE*yB5w5MZ9dpee~MEwgN-h~72k`Ddr&HD8rTKz+``iF4Hhj7S;aL9*fn-9@8AHo|S z!WAFF@gBnKa;PGQDsreIhbnTYB8Mt+@`uqNr(F7~(5lFxiX5uQ>9`Xru_|(?B8Mt+ zs3M0da;PGQDsreIhbnTYB8Mt+e#dW+LlrqxkwXq>=9ID8niX5uQp^6-;$f>uT)_$yt z9ID8niX5uQp^6-;$k7+)P(=<^Hn6RPivXcoR6%V6|-RxmEd)Un$cC&}w z>|r;1*v%exvxnX6VK;l&%^v*q*onYjj}@|qJ?vo*d(gdKm$L_Dud0zf>|qak*ux%% z*uxNe7@|iTqDLE|M;oF?8=^-Wl1gWSA$qhSzh_dhd$b{Xv>|%5A$qhSdbA;Byxzt= z+K|r8=pJoI=O*ObhB&t&dbA;(q02oVGDMFyM2|K^k2XY)Hbjp$M2|KUxJMhJM;oF? z8=^-WqDLE|M;oF?8=^-Wl8SV;V!-?VKCyeWA$qhSdbA;Wv>|%5A$qhSdbA;Wv>|%5 zA?3sR7d_e#J=zdG+7Lb35Ix$E7}inf(T3>JhQzks<3o?OmmX~|J=$J+w7v9bd+E{k z(xdIAN83w}wwE4lFFo2`dbGXtXnX0=_R^#6rAOOKkG7W{Z7)6AUbPn;mmX~|J=$J+ zw7v9bd+E{k(xdIAN83w}wwE4lFFo2Y3K>Qr!zg4Jg$$#RVH7fqLWWVuFbWw)A;TzS z7=;X@kYN-uj6#M{$S?{SMj^u}WEh1EqmW?~GK@loQOGa~8Ac()C}bFg45N@?6f%rL zhEd2c3K>Qr!zg4Jg$$#RVH7fqLWWVuFbWw)A;aW6!zg4Jg$$#RVH7fqLWWVuFbWw) zA;TzS7=;X@kYN-uj6#M{$S?{SMj^u}WEh3)Lm~T6$UYRZ4~6VQA^T9sJ`}PKh3rEi z`%uU}6tWM6>_Z{@P{=+MvJZvqLm~T6$UYRZ4~6VQA^T9sJ`}PKh3rEi`%uU}6tWM6 z>_Z{@Pzc|E4)_LiFoHrxP{;@h89^ZBmBPe79g^Zw( z5fn0lLPk&sUz!g1(zI~9TIC1|89^ZBmBPe79g^Zw( z5fn0lLPk)?2nrcNAtNYc1ci*CkP#FzfBslegYTER{ObbfS-bt}i;bR7*w3uperE0VOII%WHSi|k=ln+W;B$T>dhj`Z{T#o3 zo;LD%+Q{co{^wD?zr;Ne_)FYE>2OAP6!cv2qf(UdB}#q_dS>rY?Lp<*gVA%vk4iJs zLeCXHDxG*6&$K)$wfI-h6+bG?_*c&rKPt7jo|Z99MGBTUpi-_=ZX(#e#7W-&;gyZ%RN_oKy_#I?AZb3T}F?I4yXoQ?osoB zz$1RQpY$3QRyi4GKxQs;?JYh#VGzfia(Fy&!g}^D*m+}_#efeNAc%T{CO0A9)VmCYQ!a0`xq`UhD(h3 z9cU`?SanQaByfD5_**UAMUMD}6z5>3%mj6!tbN>7Pah_Kx`2{6j<2@#~^nQxO z*V(2-d;_c)gTQ+WJeNKetOD!(FS)DnZtpGlA8hG69bv_-aS;jQhbL{?QOk+LA%fyL~qBof7UwVU?vCieR zmoc?^|LR_2Ol{w>@0E|y>#+?WOL_OH^FOFUO|kn#9I zM&btlt%t}Z4#@)*%l%X?_cOYOJwy+Ch#vNk zdRUjAU`vnb4$;FNQV;9@7Qp8zcMp3=S(*3nRbuzEhsZh((c2!9qP&g!+(YCThsdlB zsW!D|@~cCtQ^y-X_rhP`8o$6beu1<70%!XLH1Gv9z?bWT$H__fe!XJnPX2!Vw9r@W zuh>rrebs!+Uid##|3UbmJe=>^3*FxNuD#H0obTETol`vy4}9HTv0LKfu<^Kh2gmNI z{iS>3%RVms_2X)Hj@@fNE(ZLoTL)jg7rI6GtM@ABiulsKVr%$u@{lK_%&Wl@(xh<~ zd>!-*{1Z~9@fSwHm3+jDwivJEg1^yH0dH5&j(Voz`IsPel4fJfl6H=qm z^Q%utlg2FQobUYqddPg46| z^cMkwar(Y-YIB@EZk*a2r#8o_&2egToZ1{GD;}pd$EnS6Jbawm9LKlEsm*b`dYsxE zr#8pQlgFveacXm%+8n1g$EnS6YIB_09H%zNsm*a}bDY{7$K}SU&2egToZ1|RpK)q) zoZ380Z62mJ4^x|m4^x|msm&wQ#Sv=Z2(@s8@yHRz zfJbnWBk+HOG2IcEKLYbdVEzcqAA$KJFnrwptD1LqvKR=3}9~J-J<`n2z^rKwGQO^G;YB`Edj&kNl@%f|p z{84=VC_aCbGe3&kAI0sD;`2xG`D5^Z4E~S7|1tPK2LH!6=VS1H4E~S7|1tPK2LH$4 z{}}uqga2dje+>SQ!T&MN{22TnsJu{|Wd%0skksmJ{gz1pJ>s z|0m%81pJ?X{}br{1pJ?X{}b@fx8?)BGA}g$C(u9NmsjjO=LGzpK>sJ;pRddZC(!>1 z^nU{WPr(0|=moySJj0i`qAzhpUuLZLWyX46W(4^@^{{i9#8oT z??#WOo=$r_(Jf3=*@sz*k?%3lgzUMCVc*@^%cZu`frx{N@9e6zD zue!Tr0`z!_ueu98p5m+SLXW5Ts=LtRsizrF@eOyy9#8oj?*6aGQ~rj#V~?l&4R^;L zPx%|}jy<08H{AU%kEi?%cOyz*JoPl=DSyM=?0G!pZ@Bwk9#8QNcOmu2c#5yLtHk3e zzTPhMc#5yL3q79V>+M31r~IvU9g*=A-)dJ}?>#e~^0(TxJ>w~VtKG44Ie)9&=<$@l z)$aXxJjJ)#g&t2m&3MY+YIp4Ml)u$J8cfjcCTMpPw7UsLRTE@86O5`R$ayBD_N&2! z)NXX{Iw7qZJ*v|Ca&!)Q^9^Vn>M2t1A01AR5lt}8njkOIJv9GUDl$4RnviCU&Wk2g zvqq1zCd9B~=Ry*F5_Ri zJn(GiNoG4wGTV7l*X1oe&v`Pi$DU*z*U7*$oG0n~PICSyIrEd8^GVM3BD;Fd{(tEBRmRvock=Z$Imj#c$QJdv&;`aD?arrBaUYoaXibM@Ux6No@LzeEVI6+ z=u=M7r<`Jz?3Auo-}7Mp@Ko9}U8i*IF7f=~DdrDP(fgdD_c_J<;VE6Oe%19F?I)*n zrH(z?I;AT$+A&V)8XddUpJM*-6!V9tm_IzFYuB&Lhn%AQo)Ql(@v5g&;^As=n*8K6 zJ=bY^uG8cvr>UdUc=c%<_%u1mX>yX&Br*XW~c-?7g znz6FFCgl%`IrB;N$fJtA0%uZv zvExb5I+^5(CYjru)OG2<>V>_{w?NM!Ps(BZU(aez(hEiZ5V@yzq2dSRp2u}so(CspGDY}EH1gl^rF>X#i~0o^Z8 zs$X`AzV9IXIs3Uv$uEe1$@wgSMaoOyGJCs0TrtWIwSW1caTVxQLzD7D~0*V})dJ^N|IN%hpmC-~Jp^`v@gm)JQcalA?O(T=Ho&3QWZoadxG+^3;*?>h*c z(M_tSFjxOVjDDnfm!lc=+Wr?hQLpV--**tY{Z29qI;p!bs&Vz*{?{)-k60(w?|4hk zg-)vXaqO9&N%cXFJr_DD2k`m(NvKIVfYH7Aq`&VV48S^Xi5pC+#p%E5zl?U^N%dmJ zwQTA8JCo|ojq7|}{=S3IGfR`|S zh4PFG@{9=bj0o~_p@|@mujX-~JY#`;`W)pR3*;FK}^JM;cGXK14WKWRCPx7h}ZBL$`$4~O)`FZmEJb8Ye zJU>sKpC`}HE6>-N(97gikKTjlQS+)z$99jr>eR8_Bd?luZ1>31`{Y&2E^(fpC(qB5 z=jX}u^W^q^&cN?3R}%eMDync|CXU5`A4l z=sqG(KA$I_&(nwIrCx7uPsmHdj_nC~DcN!2f04=O$>j5D?=Fe_tJ=HcEU~lqJiTq6 z>^)ERo+o?H)86xH1^$<3!18Jfj-9>d$=<)B7BLZgMJ+-oJzo_%Gx>^Iu}}(8xfEjb zO0chpE1`~J^y;YsZK^<J07Z3^QP7 zXf9P+MSR*;Vc=#S?S*;9`B!(=8YcjpOs3D9`B!( zK8+q{oz=M+J@!9Kws4kg;Vjw0S)HNE$r;X)Go0mY&vLeB$sEp-IXq7-JkLDj^KA1x z+q}S-@dd_=FEA2(fsx>gZ2uzLzsUA4vi(=t{;O>NRkr^s+fS=}I+#|ukg@G_`lwi% z*4)A#q3@+mGs4yPgemuvIMZ;YueMUM>=Nx$d(b|OzMrdA{KPrXE2gHYab>CAGj*;0 zO+A9#7xap$X=;C3v(w&#`JC1~gJZKgt@#AU=60HK>onumX~wP7nqly-=5|`6Y{f7z zt+BRa&oWIj;+{qcFX`GxgO_yeLay#5jlX6T`?_AzC|juO(yzKMqZRuSXZ}*)apFrF z1sJW^mvlbH6)-mH=o3PZJzwI8FN@Wg;AQ3tUS_V~WwGHBKcDroco6E$jc*ZtgIfCr zwe}5a?HknEE9~bL_VWt+d4>JF!hT+1Kd-Q#SJ=<1?B`YX^D6s!mHnKfrJtjXpQDYR zQyZTN&T*IFoN8Gyt@|8z8P3tJ&(W^W(XP+YuFuh~&(W^W(W1}MqR(-c;hgHx`}rE^ z`J!`-jLtD8I>%jxbE;F9d(3ihv6~`y77wnp*cv z@S0k;(RX=XQ|mVRT3%D@Hu^5lYiiv_-{pBtt=qU4^z$sQsdXEDm+dvRZlkZ_HR;f3 zFM16ZdW|!GO)cFe*FfLpc}*?d=rey!E!~&}eV6AoweFeVJgx6Mt?#^A?q`DY)a-d` z;XJMHyp%bua-aWsDN`|R?L2MmyvE&ERpJ(RUV6|r!9$efh#w|?1U$iit+(^iu=nHD z6z8R6@4;&-&P&gZefQx!ZSXu-eV#UWo@+mk8=r@P^SJSOcsNhnJP#Y^X^H2#_Vdhl zomYKnpUirlSFJhTDEt=J^(~I_E%yH{_V6wK`)%Cp+ql`csqt@94yr3G~BlP-GZe?gH)Zg6hlV zZg&@Ww)XER4;<*es0A!q_Z~&BE9$jLpK>ER4;<*es0A z!q_Z~&BE9$jLpK>ER6ja#(oTAKZda%!`SPTzfSqt#uWN5`Q#ic?dRw(=IEj3=%MCVi#r!Q={=}+jGiH%qtBY7 z&zcLodTLJf;$L4RcCRrPoCCiNdJH&6uQ8`g-oM)C=aju0y@Gd+mG*P2w4Y<8{TwUp z=U8b!r~1-1tn!^>mG2xLHHSORDeLyH9%Ig_zKn0D#N*A2)Xqg}=OS~z7o}L0D|0Y< z&i10z>)3Pk7nMZ_smF`d*G1+eFG`s%_gwwOz*)gX>Cmxro{Q3+(es2Cr8mb{h|9z) zU<^9jxyW4oMP}zNN_8&rT>V8U?P@TOLgrD(JPMgdA@e9?9)-+nygU=kqmX$NGM~0W z=26Hz3YkYC^C)BC}bXm%%hNb6f%!O=26Hz z3YkYC^C)BG5LN1|@ODNOu8;>_ArHJl9(aX3@Cte0 z74pC<8s%ww^1v(Pfmg@_uW%JtIR7hw^S~?QKUX;OE98M!$OErv#OGg~2VUXKuaE~` zArHKwQJ%`l1K*&9zCjCpgI4nft>z6{#~ZYcH)sWK&nP+p3b~F#uA`9a zDC9Z{xsF1vqmb(;nP+p3b~F#uA`9aDC9Z{xsF1v zqmb(;^DWQ-O3MrwG5(+7ykP-?hp^y>^DWQ-O3MrwG5(+7ykP-?hp^y>^ zDWQ-O3MrwG5(+7ykP-?hp^y>^DWQ-O3MrwG5(+7ykP-?hp^y>^DWQ-O3MrwG5(+7y zkP-?hp^y>^DWQ-O3MrwG5(+7ykP-?hp^y>^DWQ-O3MrwG5(+7ykP-?hp^y>^DWQ-O z3MrwGWfZcELY7g;G74EnA()mb5+EN*>OFUb6BiK#sIl~*ueqHXF!yC$h z9XoHlp-kAZ-+Xd|9P)@}Y^q&jgW)%mQPE#Hvpe4bt(azm;!dN%TgvS{zwbCNfdOFMQ(dP5ntW9OweR9`}6 z)cP0M=?&%8jy+d-L)z1^q&*!=*|q*f)_Q}i^@eolUvJj0WmU-qly?+#Hb=h z75?t?o}k96PJjJbF*6u7v{6GFHMCJf8#QJ&YSPAxw)7M0H7R65cwT-|V^wEOXX5>M zRcDQ!w3hxCw)d*eTH34fYH81z*L1et(yKaaX|K?$Nm2fnS9R934#a3TuBk8fQM{_N zCZ)N=GlaFYSM1cJI-^&0)>ze9Qy=Xuy{fa8_NvZW`VF@Cs?J*4t2%2^srTcRel@Ao zu~&80#GcWsI%`@PV)Uxcn%0Ln_NvYrt2%3}>a4M<(_hNgztD3{de+`p)mdYZ`@%97k?XN+v>a6L$zj4rKE9HAX4-r2MdZwtRR^aj>Vz26~F>6#)D{wqQ zxmR`8)E10h)maO?sbamICH46s(V%zN;v&RXDmIyL63YHDlVgI9Id z)Ycq(wzkHq&Km8mCf%AVuj;I66^ii(Aex~i)@X?}T4GHt(fjdCZ;e%*HCA=jSk+l$ zRcDQvv6|Ycw_IdPuj;HZOIA}mb?iIWHRWc$7O(28DK|5ERcB4BP>f#HStC!Yk*C#Y z*EO|k?SXb(Q@eJ&mMy)ivql@QsU_;VSk+l$&aI}F?k&Blv!?d$*ttPXt#wbv-(DXT z>YkBM8AT?gwl*!)Ouq03#Q#dHXEapuI;fQxinS6$sAn`XDX;1j>KP5;Dp1d8DAsB; z;oaU+`t+815?QD<8$zww5NgeaP-`}XTC*Y4nhl|z(GY5#hEUIF2$w)TqmfC84Wphr z7OwM_x>Cn_MnibBN-|tshO5hPbs0bTmC4wVgokSrLcK{ts3*UK6O?G3r(&%l5XzT? z@+G0NT%q2iA=Jt=q1FltmGudg^$Gu(?d492wenM_m7hYb{1i%KLaqE1Y7L?AU-_3- zek#_JUqU_kCDiIcp&Uu5^`AmHl2GeEh4Y}+e=64cPoca>s3*UKKj*(%|EX9{3<>q* zm++UwT2-jHNUSHn6qktgNVkZ zbEsPOmIIXN$uGrv@=K^Ezl3rjp`QE_%6Wu(@=GY^5$ee=p;m+n_2idO&LfoP2=(Nb zP%A=(dXt7wPkssY1V8d1esBPx{t2=(NbQ2ry- zlV3uuDi_LagnE;PP;MiX+X%I4RH#vaP@@2$Mgc;N0)%oKA=;4JcyC$>EYy=S zLumI{jZ3WdIt0abgVngfYJ6a|@&}h_RkrYwW7@)MueDSBpj>D*YF~}cSEKONXnQrP zUX7|(t7r6ot;5wQaJ70p$1i|dYo}Oim4$keOZW}SwboAYtHc^*E4C_DqleWfVYO;s z<<#bCjq&v>b+=l5!A!>At-dO>x7VpIjP~|AU6IiaU#A)o;@)-mb{)R$Z%n(~zFjBg zjrQ$2e7jC9#j);_3U!B6Xb<<7qmA}(e>vKy`(GJybeDPsf&RI(86<75F}{#}>iiwQ zEIo(LC4}FnL}O>gW;=xK5Vk|l6saUJs%071fNo78R}{j3=(}KMl*yu z6SX6kYXy!_Yp8^IumI|7(JHZ@uhE>Lw|8&8M)huVy{}QdJ9fRV3CNm3;qOjFT4h?UZeR#$L>SdX#UXnCTLZx(JZ1$aNsqXOLS}>UgH@>p_yOfc}1c5 zU!xgCou^vsbS4Y`S@_SAV`SkltMSWBCJU4PmYHKSnbr70F??p>GfV&I?~dtL_{qYC zzbxhwGvKd@8GY6Mf|${LP*(Y>QR^p#G3YDGaxGb|g71i_M7gNY=iI*uXV5pqYlinrT2Y z4QQqT%`~8y26$*dGYzoOfMy!tqyfz|Xoguw53HF6SZY8s4RFSzZU-2!v9)0TnmS5(ac(yTnm$HVR9{+Sqq+*22SD z7+A}-ujQ)Oa=mN0uC-`pEt*-2X4Y~=Yq^%ST*X?Qzutd`X4Z1fZ=tt+i&y<+-on+r zh3on?UCY(XujyKZIzyvYSY;Zy#zwBO5sfvXu|_o3h{hVxSR)#1L}QI;tPzbhqOnH! zX@s9fm}!KWMwn@YlSVjcL}QI;tPzbhqOnFa)`-R$;jIykHNsva8f%2ZMl{xl#v0LB zBdj)}u|~LUL}QIG+=#{+;kglwHNtiy8f%2}Ml{xl#v0LBBN}U@E*jBTBN}T&V~uF6 zks4`4V~x~HBN}U@b{f%GBel?o#u}-MMl{w)eXWE4b@0Cq4%flqIyANpCfC8_I+$FC z#@4~-I`~`%SLp15o&bf(mZbCCnXr>9xG@+R$G}DA;n$S!WnrT8aO=zZx>uutCo4C>@uC$3O zZQ>f6xW*7sn$S!WY&4;nCOBzAGfilw3C%RYQWKhKf~zJp z(*$EpXr>9?n$S!W>@}g8COB+DGfilw3C%R2nI^bxLNiThrU}h7p_wKaZbCCn@Z5xE znqa#L%`~BzCN$H8W}47U6a24-|Ml>{9uC*T;d(T)9wyhrtSg<{H%wK_3*GB2G(=!>$&RnT=+ zqM69tq!Eo!3b`sgsb1zLDa7dP@g~oX3O$CpNj0u*RLjO3_&D24f_kPv<$9(-=oyBa zR7b`OlsFr|Ni|};>~gVf425qMdq$66-YWL43ccl9#hX!U8Z&PdSNc_48K0o!EchCD z1uTPFuc&RbUNQ4lF<`6*osGPey4#>5PUsyU9w%;4d(m?mYA;5QTsFYN2Jzq$^RR)O ze1qDEOMXm=$4478 z@&#g!F6F!2d~T51jarE+^mucFST&l}4brm^Za2W~2GqL&-ENR#wP)4-OlBjB-H2j0 zqS%cnb|Z@2h+;RQ*o`Q5BZ}RKVmG4LjVN{_irt7}H=@{$D0U-?-H2j0qS%cnb|Z@2 zh+;RQ*o`Q5BZ}RKVmG4LjVN{_irt7}-^Tg8jXl4OJ->~8zK#FBoqqQ1^s{fLwZ5IY zzFAj#HFLABRH*Yex}SZA%I_0u22yy7IC)3veW1QHs`x|1w}Sf8s7myuQQ>BAi{>=m z;V+E}{}KEg_<2w(>Q#OK90m1NVwHGo`;L_B@g1r2;J3lo!JmQ`L96Q>X)E>}{?e#$ z9k?FUSBX_}3wWE)$6p#1ZU#TXHkyf5iDqJj9yPziUm6wai2$MQx(ff?Tl!0*!rujd zAN)h`W8lZZKL$SmeiHms@YCS0_Os3V&)f%U-d^$F>nQJp|98UwJK_JG@ZSvo&G6q0 z|IP5<>@U4$n&H3MUwTz+{+r>y8UCA7=D!*Ko8iAXW&WG}rB|W(Z-)P7f9X}R`EQ2* zX83Q0|K^nWZ%=9KwwPMQDal=*Ll|7Q4ahW}=N=~dy8UCB$zZw3UGv>e9UwRdq|K^POZ_b$i=8XAo&Y1sZf9X|d z{+l!Azd2+6o8iCNUwTz+{@(@v?}Gn#!T-D9zXkqV;J*d_Tj0M1{#)R`1^!#$zXkqV z;J*d_Tj0M1{#)R`1^!#$zXkqV;J*d_Tj0M1{#)R`1^!#$zXkqV;J*d_Tj0M1{#)R` z1^!#$zXkqV;J*d_Tj0M1{#)R`1^!#$zXkqV;J*d_Tj0M1{#)R`1^!#$zXkqV;J*d_ zTj0M1{#)R`1^!#$zXkqV;J*d_Tj2lQ@c(Z3e>eQU8~$72zZL#l;lCCBTj9SI{#)U{ z75-b{zZL#l;lCCBTj9SI{#)U{75-b{zZL#l;lCCBTj9SI{#)U{75-b{zZL#l;lCCB zTj9SI{#)U{75-b{zZL#l;lCCBTj9SI{#)U{75-b{zZL#l;lCCBTj9SI{#)U{75-b{ zzZL#l;lCCBTj9SI{#)U{75-b{zZL#l;lCCB-vj^ef&cfw|9jxS4gTBUzYYG|;J*$2 z+u*+q{@dWc4gTBUzYYG|;J*$2+u*+q{@dWc4gTBUzYYG|;J*$2+u*+q{@dWc4gTBU zzYYG|;J*$2+u*+q{@dWc4gTBUzYYG|;J*$2+u*+q{@dWc4gTBUzYYG|;J*$2+u*+q z{@dWc4gTBUzYYG|;J*$2+u*+q{@dWc4gTBUzYYG|;Qto*zXkqpf&W|Jza9SD;lCaJ z+u^?*{@dZd9sb+lza9SD;lCaJ+u^?*{@dZd9sb+lza9SD;lCaJ+u^?*{@dZd9sb+l zza9SD;lCaJ+u^?*{@dZd9sb+lza9SD;lCaJ+u^?*{@dZd9sb+lza9SD;lCaJ+u^?* z{@dZd9sb+lza9SD;lCaJ+u^?*{@dZd9sb+lza9SD;lCaJ+u{Gc@c&-;e=q#M7ydio zzXSd|;J*X@JK(c z|9<#?Km5NR{=4A63;w&{zYG4m;J*w0yWqbI{=4A63;w&{zYG4m;J*w0yWqbI{=4A6 z3;w&{zYG4m;J*w0yWqbI{=4A63;w&{zYG4m;J*w0yWqbI{=4A63;w&{zYG4m;J*w0 zyWqbI{=4A63;w&{zYG4m;J*w0yWqbI{=4A63;w&{zYG4m;J*w0yWqbI{=4A63;w&{ zzYG390RJC={|~_b2jIUO{=4D78~(fDzZ?F$;lCUHyWzhZ{=4D78~(fDzZ?F$;lCUH zyWzhZ{=4D78~(fDzZ?F$;lCUHyWzhZ{=4D78~(fDzZ?F$;lCUHyWzhZ{=4D78~(fD zzZ?F$;lCUHyWzhZ{=4D78~(fDzZ?F$;lCUHyWzhZ{=4D78~(fDzZ?F$;lCUHyWzhZ z{=4D78~(fD|AX-VLHPe5{C^Psd*HtZ{(IoR2mX8DzX$$%;J*j{d*HtZ{(IoR2mX8D zzX$$%;J*j{d*HtZ{(IoR2mX8DzX$$%;J*j{d*HtZ{(IoR2mX8DzX$$%;J*j{d*HtZ z{(IoR2mX8DzX$$%;J*j{d*HtZ{(IoR2mX8DzX$$%;J*j{d*HtZ{(IoR2mX8DzX$$% z;J*j{d*HtZ{(IoR2mU_<{~v{;lCIDd*Qzq z{(IrS7yf(UzZd>{;lCIDd*Qzq{(IrS7yf(UzZd>{;lCIDd*Qzq{(IrS7yf(UzZd>{ z;lCIDd*Qzq{(IrS7yf(UzZd>{;lCIDd*Qzq{(IrS7yf(UzZd>{;lCIDd*Qzq{(IrS z7yf(UzZd>{;lCIDd*Qzq{(Is7R`|aa{%?io+;pW{$O) zV{PVGn>p5IjpyU;+d0voQHJIA`6W8KcNZs%CHbFAAr*8k42wsNek9BV7b z+RCxEa;&W!Yb(dv%CWX`tgRetE63W(v9@xotsHAB$J)xVwsNfh$gzIw|F7=L!=otj z_q(b(lN-=*2m%hsC6LgQJBmk6$T19I7{C}}Cdnk3FquwIPq@4wD5$8x1J_$rM8$hO zR$Y%3Z(Vg=&(-z7WA&@9_kHc}Q*YNyqVDc@pM9S1A3u2VsZSqOZ}t1Bdb_K-W(HUl zz^VXN1+XfBRROFDU{wIC0$3HmssL66uquF60jvsORRF63Se3x40#+5Us(@7mtSVqt z0jmmFRluqORu!&oDqvLss|r|Ez^VdPttQ_u)N1nmLajE9+G;K7*aKwCs14VW zj!An6_RAJts~rj}=gez0TE|QFMA(yHH^Xj$rBCtD(LL}Vgq16ZYDt%~Q#%$R*z<)RJCFE8iN_l3tM|y^>bG0jb3skXpV%o-ZcB9soN9_CVO_ zurpx~f}I1K3p)?i16u%V%JNCCq^0j0Bs)kouS0a|5S=JXheM5hkXsY7(?5uJKOrykL%M|A2Doq9y49?_|%d(DTU9?_}S zWOV8goq9y4UX#(O*JO0+H5r|Hy4T3_WpwH_8J&7fMyDRpsYi6`5uJKOrykL%M|A3$ zj7~kGQ_o~{>Y0pAJ)%>O=+q-R^@vVAqEnCP)FV3eh)%tb(Ww_QI`u+Er(VeD)C(D% zdLg4zFJyG;g^W(UkkP3ZGCK7_MyHjQ0@gh22M8}Khco7{hqT@w$ zyoin$(eWZWUPQ->=y(wwFQVf`bi9a;7t!$|I$lJ_i|BX}9WSEeMRdG~ju+AKB063~ z$BXEA5gjk0<3)75h>jQ0@gh22M8}Khco7{hqT@w$yoin$(eWZWUPQ->=y(wwFQVf` zbi9a;7t!$|IzI5`18+X?<^yj&@a6+=KJexPZ$9wm18+X?<^yj&@a6+=KJexPZ$9wm z18+X?<^yj&@a6+=KJexPZ$9wm18+X?<^yj&@a6+=KJexPZ$9wm18+X?<^yj&@a6+= zKJexPZ$9wm18+X?<^yj&@a6+=KJexPZ$9wm18+X?<^yky;H?q7HG;QB@YV?48o^s5 zcxwc2jo_^jyfuQiM)1}M-WtJMBY0~BZ;jxs5xg~mw?^>R2;LgOTO)XD1aFPttr5I6 zg11KS)(GAj!CNDEYXonN;H?q7HG;QB@YV?48o^s5cxwc2jo_^jyfuQiM)1}M-WtJM zBY0~BZ;jxs5xg~mw?^>h2XB7x<_B+n@a6|^e(>f8Z+`IR2XB7x<_B+n@a6|^e(>f8 zZ+`IR2XB7x<_B+n@a6|^e(>f8Z+`IR2XB7x<_B+n@a6|^e(>f8Z+`IR2XB7x<_B+n z@a6|^e(>f8Z+`IR2XB7x<_B+n@a6|^e(>f8Z+`IR2XB7x<_B+n@D>1X0q_<8ZvpTY z0B-^C765Mn@D>1X0q_<8ZvpTY0B-^C765Mn@D>1X0q_<8ZvpTY0B-^C765Mn@D>1X z0q_<8ZvpTY0B-^C765Mn@D>1X0q_<8ZvpTY0B-^C765Mn@D>1X0q_<8ZvpTY0B-^C z765Mn@D>1X0q_<8ZvpVOLaWu5h!xs$*dw)0@|$3ff^CMqPg*uzp2KFsmSE5Kus=%6 z3*~-Z1iKQpMOx7(kBZabZzJ0T#3mp%X%evsh)tSAY|l;|wg9mOh%G>D0b&afTY%UC#1y# zEkJAmVha#kf!GSfRv@+lu@#7|Kx_qKD-c_O*b2l}AhrUr6^N}sYz1N~5Lla-%f3Q}*9R<4H+Qa_URLD+|-rG7z{T0WIS zEnnIdau2n9X%B#%0(&6rbl91&2f@yP&4rx@>wzsG+eyrHl3flf+gm4?=>#*KV5Sqy zbP_Xkl$eoLwzp0&(+Orei5c2M%t*TuwnbVn(@D%oe;e6uAa(<>8?opHVmA=Gf!Gbi zZXk98u^WipK;Yl~h!G%0fEWQ{1c(tJMt~RrVg!g0AVz=~0b&G* z5gteUA+(ds)>tASkryAZYx=P#zQ zn5i|wF2R03{H5>%@R!lp(9~AImn$($>QfSN6YPnwC&6xp-2y9D4Vjp=GcjvtV%E;Y zteuHjI}@{Zrgk~7u7IUao>HzWVd+~y$-fHrYFPTlPTI2@_F7o_Tq^Ck9`;t)+hA{p z{T=Kbuy?`AmEoo)*SwjUT!Ch4auvNv3LvlO0i5$7eEInilkTc=|0D3_x+YV548C05 zWNJ^qmus9%jedEAtXyehYVuQKrbeGpB}<=CB`ZHQW@_{qRkHMnX0r4<5oBM5l`C^h z?R8kWKF8GLCjv~&QkvRZ@ZW}g2lhKzXXb*HpSLnuHmqDpWit86P!sc+CX=5GH8HDc zvK;twZI8*uz?UoKOg0{Nl8iE&0y_tLa$)DedSDA+i(u!YoWo#`fUT5VF|;>^_J%o9 zlcBw_I$1I)DxE`$D(!Mv4(Y1&kCgS{N6T_}EBrQjl=PO4ipg>hsjl?h@Tb6^3jaX( z(_v>|&rJBU;2#8kHvBp8=fcm0p9g;)d;`7*em?vH_=WI`VM}2ThMf<41Z)K?t{pSI zrl`Xnx!%ka4e;fvCsQnfFV{YqnEN#a`W9IP)FKOS5G-hs1ue3m zMHaNkf)-iOA`4n%X;OQj08Tk;SAI zSq!wAwB1@oGLW?ZCv9h2=7PQC`Qj07hwa5}ui!33v$P!YE zEFrZh1}%y~i(;fOH_#qAyB>qW#GpknXi*GW6r%{9rVTB!p+z>d$c7f# z&>|aJWJ8N=Xps#qvY|ybw8(}Q+0Y^zT4Y0uY-o`UEwZ6SHnhlw7TM4u8(L&Ti)?6- z4K1>vMK-j^h8Ee-A{$y{LyK%^kqs@fp+z>d$c7f#&>|aJWJ8N=Xps#qvY|ybw8(}Q z+0Y^zT4Y0uY-o`UEwZ6SHnhlw7TM4u8(L&Ti)?6-4K1>vMK-j^h8Ee-A{$y{LyK%^ zkqs@fp+z>d$c7f#&>|aJWJ8N=Xps#qvY|ybw8(}Q+0Y^zT4Y0uY-o`UEwZ6SHnhlw z7TM4u8(L&Ti)?6-4K1>vMK-j^h8Ee-A{$y{LyK%^kqs@fp+z>d$c7f#&>|aJWJ8N= zXps#qvY|ybw8(}Q+0Y^zT4Y0uY-o`UEwZ6SHnhlw7TM4u8(L&Ti)?6-4K1>vMK-j^ zh8Ee-A{);|Hnhlw7TM4u8(L&Ti)?6-4K1>vMK-j^h8Ee-A{$y{LyK%^kqs@fp+z>d z$c7f#&>|aJWJ8N=Xps#qvY|ybw8(}Q+0Y^zT4Y0uY-o`UEwZ6SHnhlw7TM4u8(L&T zi)?6-4K1>vMK-j^h8Ee-A{$y{LyK%^kqs@fp+z>d$c7f#&>|aJWJ8N=Xps#qvY|zB zXi*$m6o(eYp+#{hOdMJihZe=5MR91+>6Ggj8nb0cOXo)>w@7R*v1bZSZeajH-*$hkHGDN-{-wi^?2BBkv z(6K@2*dTOl5IQzUIwsG*0`=bsdnN2H*sEZ#hP?)7?uNY<_Bz<>Vd?vYs2uq@@j=ot zX@3WM2kc$2zsJ?x4NJe>K|4!DN)J)nm*lbui${Qp#qjR8UgQRBCm!F*(BsG)19OVs?nn`~g za*c>8?{pC z+aT$iM6UyuT+1=Yew3EJqlWTw`V~~NI;|&rJBU;2#8kHvBp8=fcm0p9g;)d;`7*em?vH z_=WI`;g`Z53_Bn82-phPD%e_i?WBIPwsKTBNa`njIVv0^^^?9F6%IoE21)(o9{IVL zK~g{I%TLD)lKM$sK8X#I`bl3ti4BtaNnbvR4U+mvUp|QqlKM$sjtU1!{iN@3*a0Rx zVY^{_U?Z?mSh=cakXqtFH20JOn;|V}nzWhPL7MzGfgPqXc$!v5spB&(owgjGYr0mU ze4!nv)hJ)rMre)7Ptmfpu<~76w$`tF8hdI3%1_fqYtJb^Q=6#0r~E7}kLk+KCO=>K zBedD9Rim%E($lG4F?Oo*nYJ(cLHS%u<0F(Wv>HBE`MNfd&sBbkwjXa+zDt|H#D+C;dpp`sKeb6j0fHAX5YG4 zxT`zvzQ&zzc#K>!p1JM?rr8wI&QOP>d=Zj=I}Jv3QWup8i-(0)#SCCz4QLvvG}^aP)EoPcSWiGdEN2eNJE&e)h7IYTyeZRP7zQTsl*$qSn_%e{uR-uZ6S@%}swn+76P}u9;e& zwoZ%TtZv%t)~=zye9h22^hYbH;d!*Vw08lWZBl6wD#xu=k{_eo(#rC}0U^%0ZubZF(|x8qm`*%+OXOMkyU-<`}My?!cL=60h-hPDiOZG|WI=HW=9 zoCIoavXsP;p&Gd9 zRF1qRhv6`;UtVjB_6G?~^3g-rBAK?SoG>ww;LN5g_%%2GoL?EEI5B*%HjnEXw$M$36 z*#x#fo5&`y$?O2;W>eTyMxV1|^eHbklg(lWvDs`6o6B-p9-GGu=3)7)fEBVLMk`WT zDJx?KvqRW?b|^cH9nOwm<*b5LvMN^1YS;p{kkzs}R?ixkmn~vGwwN`tCCty3vH)Ag zma`S?NY=!TV$EzNYhg#TRu*J!tethR5bI=Jteb^d4_n0|td~WZ$@-YZV$5c7*3VY6 zHEb@0RR zJBMv&=d$0h^Vs?90(K$0h+WJsVVANU>@s#ayMpaxSF&B~Dt0xyhV5q8vg_FO>;`rt zyNTV*e#>rQx3b&V?TmiEn%&9nV!vm1vwPUR>^}Afc0b$0=$9nfL+oMp2z!)0#vW%+ zus^aV*;DLk_9ylX`!jo%J;$DBFR&NcOYAS~Wk$aS#$IKwvDeufY%hD0y~W;U@36nI zcNzWa345P?z&>PuXCJYT*(Z#CNrHXOzF=Rnuh`e@8}=>xj(yL5U_Y{-*gv?&8Rwk7 zXOO3G7fr48kLMHk{(K^z#3%CuxSLPm zQ~7~>8lTQ*@R@uTKZwufbNF1I%k%g=Zg3CJ=LNiw7x7|V!b^D>KbRlF=kr7PVf=7@ z1TW_mypmV(YF@(^@P)jV*YSGZz`cAC_wmKNkuTwXzLW>}GQOOz;79T%eiWzo0ckyl><~@8BkMLd|voUkKxDiMyVqcLXM$%+hlu&&P;rA5;u$Aid)33;x=)+ z_?@^z+$ru7zZZ9ld&IrsKJf=}zt|%l5D$un#KYnd@u+xAJT9IPe-uxOr^M6ZPvRNz zXYs6fPCPGO5HE_C#9zeA;uY~%@v3-Dye{4ld&QgLE%CN^NBm8^E8Y|TBiC^QY z`b>S6evm#}pQF#!bM-uZo^I$KJzp=-3-uzsSTE5_^)mfn{SbY=eyDz!ez<;wUanW@ zm3oz4t=H%a^o4q@UZ>aV4Z2rfr2F*6dZWHX_v=gbfWAy$uCLIK)SL99^k#jf-l89^ zx9UN?O>fsb^pM`Ecj?`FSnttS=@GqGkLsr0r(1eVxAnN*udmkE=xgzqi@&G)qkU( zr=PE1pkJt8q+hIGqF<`-&@a<3*RRlb>R0N!^sDr%^=tIq`n9QfQ8V5V>eQqCk;tg1 z8I_OY;b>PZ6z`8kQ*3&U4Y@*V+atl=G^^i?hdSCK8PWdUHu;F(6?Ju(kw`F>+82t^ zlX5&g*h`*G&+wTz*`|^rq4d6BEEJ7|I^!AeFz84N%18UKy-M$k^xG-)Y~CAmb+7B| z4n!alZGGRaCkx)ukEVw%K-#ibb%hE#^HBns#DNPa|p`&T-{V@tm`#P~M6s4lgRiP*q zn`(zJxJv5?)7Z-n+v&-XVx}4E=p3;IO)!uVF}uR;!3edc)c$DLFv_bk zhQ@E{=4xsd^4eV;A&LPt2?{!u({E=|SnYm9JeG~{Cbm+7?fvl(@9mfECrF(2b&qgb zhP(7-dc+w>uc=bRgAEJ1fyH zBw4O<#K~2TdSsS6aqNtQ*1F2Ubb5J$p_K9%@yW}p(<)V!T-8qIYA18`Q0DaNM6Qfl zoFkiCMlH^h?#SAqbLDn+ZQ^{nC931yu0?=%`5XwJ1K}IW=JGl9^Cfbo_4Y^N;l9W^ zmk+Jf6>zc!oUDPNtm%P79@mjLn6k9nj72lLLa|=z)@>2nB}1_~~ar%*c0%@uae2|MSg{v&x$4=2tMA)+Db&|o^J zo6hOxP?0XvsgIe+3_Z55`lgRXu1HMb^hv?bIWLB%_)N3ljCwct$AcrdF%kg;edToq|J1 zG8YWhD6?zGcP(&A?n0t3kag`MleGZK?Vx0J4co|EIFviHd&t)plE&!WQom{uAK9#3 zG%-a@C$rYM4!J8e?D!eAfOO7+n_27B+&RnfN7N=SQ0`8nEh+n9S8bi#=HZ^qx}iE` z_6+%1^}{Niwd!XZQmUd6YWLxGSA!G82$HOZ;pat$ZMYg7IwMH*21!(ejH|(EbP*?6 zp`372%bj~jYEX%$BjGrf z=_nceEdMb6vgl?@4^*o257jlr0e9$10Zr-2s_Bv`mqS7d2+kVLQ%c;7ns#>LVzHG` z9_i~2!c7m-y`P>kV}| zC+-ubEI-3b0iIqFiU(5`1nCO#uu)J}n5r=KCOSkn$spag$V-!;5-+7b*w+`NPTbqp z5#-)}zNnwC2vg@lE%@TFSki5#_`_YjL9sO0pQ>sk7I%k5CH*b7!wyt=*(h0NqE@o( zk?Q2czKmd!l&sLOD@&saIaJB(f;YO~IiARhohit#x6$b-UGgGRIzo|nFjbXBPsDVI z@*vGe$Ah{oEM*lgkDk)$@|=oRRPty)UmH#})iw5oMXcL&(PMjW(365h#OYF16+|Ch zW;^{+jZ#b*gDhEcqGlt1QPV6{tP? zQB)+EO>Py-t>pP7Nv|~Nl_k7lBk3iviW69#!lJ}cPqGwGvJ_9Ul>B5V`N>l96QvmW zg^5z~ljY?XC-)^w&QF${pDei`S#m+Lr#@e zOG&cil4Qvx$&yQwC6^>iE=`tPn!Mi9Bt~fxqcn+8n#3qgVw5H^N|P9+NsO{2Mp+W0 zEQwK;#3)N*lqE6Bk{D%4jFO>J5*XA|R2%XbiK8APf#ER{7#<^m;V}{z9wUL_F%lRa zBXJ!bBZ=WjVhq)}D6!8dD|Ib*9*fsF$#UFWTx*b|FHgup`kI92I?_3Dos-bJK^nEY zLcKD<)lm00O0$QCzch$Q$Ls)R1mIzGHezVXpe<;JvYjLJSRJD`a5OS=CLd%b=Ma^H ze91#Hm#ZV#MPrq8C!teZZ8WhFil>DlkuWKnok>GTdYbQ-lN2sF0*!}UG~hL(9T?DJ z#zJCX=!h+Vq^m)6TO_TM9+l+WL3%VX=1ieo(RSxzOUnv9G=X7DWv=dznb=$G$yZ&7 zJk_L%Jq1Pi>B(21DY)&W%V~*Tnxg1Prx66^G`h1eDt3H3Q%-v*KMOM-i32o9j)#Mh zj&NsZN)_%GeKE76zdfFA_tQN@);I+t?o@i~Du?Q6;b@`Z zO48)rT+W%K%jal#S!(tK8>ta{wLvQgN@`CXi02k$q9?ZhOBA6VHhe! z&1pMdZ5ODtP^CpGEmmoXN=sE*rqXhiR>-ubx~2wcO--drt7K|;YJh9xS75(UPz8KS zfln!LJkDV!{Ss z`=v!q3Y-#+0;fbu3-oT&TqQ%+7K)f_a8{u@tI%-p3X7cj7Z$1QVzpiDTt{KCa~*}n zsD)8j3?3;3kCfv2Ch1*EmgRs3b#z*lqno~1eWcquuS2UDV#EOon;EIOyQL&yfTGXrtr!X zUYWuxQ+Va-I?L5{mMi>ng7?a)n>6@XHl`xxz13_!SDj zLg7~^{0fC%q3|mdeucuXQ1}%Jze3?xDEtbAuli$Qg~G2;_!Tvo;I-0_kDw06m8uSv zst%Q^4wb47m8uSvst%Q^4wb47m8uSvst%Q^4wZ_7N>zu-YK2`hgk7b0P`Xj5bfd6J z)uBq&p-R=k(G#PvO4XrC)uBq&p-R=EO4XrC)uBq&p-S;krQ%Sn@T(OE)rx~^gTJM84iAt;aq=_(%T}#!7nnL>o4*+{1o4*+*I(oTzNgyhrJN=Zl6~5C?XTj5uNA5XQ@M=4d;@AOgHR@d+JQQB75 zUs)pi8f}**`WpFVYG3)VeX1T#U!`+YJt`Fsm8u?2KlM~Q{ghHw52v5fwyKBIPib4# z!|A8At>WPHQ`%N>aQZ22t2j9Ql(rSV(@#CsPCuno#lh*Pw5{Uc^i$eaad7%6ZL2sq z{gk#<9Grei+v@tAeoEWw`kj7C+v@tAe(I@q`YEOAdYyhr+v<9qeo5QvdYyimZ>al1 zfl-q)G<}6Z2t6#e4cmudhupXC(0TGX<`<`7K1=Q!fd|uMNzP`nkZc@Hn<(>*z<@+lW7 zJ>bgY^lU4S=vx^y{X zh6y2EdRfvWhL38%YZN60vPKbFhEeGBWJ(h~TeXnNa*bBp(n?zT#whw7X{^4@q6K4P z>5t1TaSd6Ww#ZjDLo3vZH5LiRqm*xy#=X7EZ(&+Dd@y&9E6|AyOSz9@V9SNUck zUj=fc(+b-(EtAe4q3uH}hR10Wus?%p;G$K@SyYRW+P>NtZ9i>)btFYgrO#_*Q*B3S zIaKfQREJ5Ca92>f3HEl_yCc+Sv^}to!afx-+aua@urHhP=o_%_!G0nenf49rPtr2o zmf_5R-4}L(Z5tjo6?QgkKG}SBFzgYqHDn7|1MCvm6>(Ww3v4HB6#U3_&T{4TkWGa@ z+@@iVw6uhaxcYUPh?NsDY2`{l8N2^99g6c%%;i3YQXI=^O}PtY4o@?P{mI%4TGLpp z9Y!m~7twmh7L{wUO4qA&w@M#Y=|?L4!b#aEm5xgd0w zy-xp`wwL~M?JfE*w0G#gPFs1@mgZ__XoK1|?M&@`?L+M&?Gx=Y?F(8}*hT9DFJqU} z3apoCHPQk)o6(w|YjAZFw2XhYN=TkVZH?MGdCob%Tt{>w9T9X+4xKZG&SbRSXn>+C zdm8zapHZEVo6Z?c=ZvM+z8|&T3DmMD(h)|;rvZU-&>572@~Ir;{kt3^G+nM@Vs18t za&R_{O{W0T8cSKO?7LJ8xoUqjAx+h0(Kl8IT1D!k@2`+)1APLDYqh+HtdAFxZII}6 zME;YW(;l=jEwnuvd$lpkjDayrTW6H3?^w9@| zmz{mdLr>hi@u7u(eShw!NA3FLM)!_^eO4L+V!biI+ja=K)^Swn^cTPTCV1l|Uu=7K z#%(V&J#S|S$jBK%OVY#iCL=o6T^nuB^UN_0k_SZ2 z)WiYz(r|Cc?T^!H9eU&A_J?AtX_30^t}HhukIObnjA9Qx=gNOgQ~1V>+Jm=!wq(rRCvR>& zXl&h4^XkuBwdKsuiRVUXZsc^Q=Ynb58qcMcvltQs161_nU#;EB^9i#pk(y=zs0>Yacmd(gl%* zwC$5$d*$PvOrFMs&r-2aS#Q8-=bkY7Z$Xsf_8f zj2XtX#J0gU@25TnV7A+Rc{F($rZ+87`Pl;_ix`=d!`MG`ZfHh<+&Vy?Ys@xg?U=D+ z+UBV$V|y&}vwZX7ww>D^%%lCrSea?MEF#OuNPvnoV}#s4QtsCUcm2VbEVuX3sZH$6 zG4}C{BwEn~Tuc4s9{Qli&zq7MU`$*5Q2nFRHoX3J_Ov~(O}P0oe%Y>p+^kJwHkM=z zjF@{<)41SmFQxo+@++U7dFCz4CLFQrgR|}}ExW0|IDYVXzPC&6I{%c%w^vNM>CQ)X zoWA^x@1F0_D~cAeX9_MK_o#RG%tt=kySagvdN-|o_y_+RAH3n(^6JiWFKNj-@69Xk zy>H;82U_>Oe*LVM9=Wo<=MoqAcp)_JF1@WI`wQx2~xPfxuqG;!M9 z3!kmp@WEwIKgMqz{q)jD#$K_Z`P+4et&AOa^0-UpR$l(N|Ec2+{c85XclgfHuI$a& zwDQ{){}=n+vV3IU1K)pn{q`Lr#=Z97*bS|ZjhqwRtbh8!7i(uelk(6;vvr@V}E&CX3l75hr5zysl%N# zO)KYZJqH+*ocN7Zhh+!06a80p+XCvTG+meIwsNx|(QW@vv|@lw9nOmEt^;hOW(=?l zE?d+!kNzJCA6`?`YnT+uP{<==n%c)_(N8mFu{{+;jB$9#5V)e`C(o3*1k6?Cj;aPp&O2 z*uL-i``-Cl_q^SIduz|Br_Fv~>y#~>_iS3R-0Z(^{_YuDRz5yz%=}AFe1GZv8PNxS zdZ_NzJ5%@h&D3LGIc(-Llh=NDspqjz|2B2}D-YhXpz?wVNAH-t?d_H?KRWi)?#SPq_}tO2bi-*Y!<$NFIaEZp)JfC-orEwKX&NMi zTISC2#<)cL7CBiYA=J=Hb3M651;gV{_as3&UAOAn_gCzxn&>%Y-T8CQy>H+;_QJ%5 zCvQ4+MfCNwgRW?K^zpNE-qn|6f4pGkJgxMmw;wxu(FM;qEzX z`E=GLpZw;hInN%lWdHq3XMTNnoiU*QKz||Ck3&ml?EP)tetVA`dC*DMO?|id7d1AH z9@dTj-CeZAC?Z0rhvrq%vQ*n$;9lI{Mz1;Ci(~Y{CbsV9J=R^`FPDtb%N5*F%Z#FY zdbyYAnsSrgi92`Hjko`YHBcgunKO3imKy7~()2mY%rKO0$EW7U(V}9~S6MNm*{b zd{p?~y8pdhlWuL@O{*oAjXSpUv6ju*&wqN|Ro136wx040EnXhux-0j@Dcj$E=Ay+7 z-~V~)JuiRu+oD4z4?d9o{SP^LP4}I0?4gHDpZwM5D~`G73wGPX8Fy@W>fV|0VAo7< z&pRJ(46ayr#T(;B?K@`XO?$nCC(K#kuDbKJ&S{;eKIyybfQL#SUAk>=?5pve{XKWq zc0XOZE_=6e^(%8*7hdw>?$PX;O)r+7X_V!hD-J&Ph^4n*|Hi!iH~sbMeU==?Z+UUf zk5g{Hs`-kMnb+(ZwRl8fp7*M!9&4HY+-Y}z9zFJ;yV=SgJX@NcKkcNh6(^71abM9V z@6Wkn%DdaX+VsxVe{Wsea!l){AD3sYEYEIV+WJD}l#iY6Kfqogre4Ht;Fn#wPj)f4 z9yYp+kSnuw^Fp@yn`)LiP8iFKS&6$lXJaS+%lNhT*~aYTncSE>;a{IivHtmU0(J7< zL|&Gq2aTgITe;&X<49w<5g40Jt-32TuPfY1Pp=0Usp?@^A3gZavlBL7clsHt9(Z~~ z&vOg+n|sXoJY)LU1J%zDCuRT}*0hABK^msJYaPORKO!Q1J_M;ut_V+=PFQ`lkT#-}d z5%iIQ(ZBiAs;g)8J$l*U=Nyoh`(V+9J1?93*)P;Y>fcuJhgZ*esr>R__@*&euYJUL zc-#ErE54p~``erBakP$q)J2!Q`Q65OAN=9*s&`{=EWSN3%DpLi?pbeN(AaZpiRZ6Z z=6-OR_Q)jPyWae}PWooiz29{OLZ9^9yZ-Tx(g~wRt*u_|`F!(wF|u{fEh{hnYHR1} zf&Gu%yXl>KYOgF^_ReeNYeuXXX$+*~&~wc9O8+|F`lM^!<73A5F7}%zkDsvV7d1Bi zzm*>vsgP)uaNdrRqy=UsWkC*x}~r%v|!_EheAeCsvKK8`MQU7a$f zY;yY{)ArqV=Xp;*o>p{R?5zdMe_Z#(sdeuj(U)7)e!>kKo__Ggm%jh{u^&!(>BXHp zUP=G#^3RU>_{skJzYZ<#n0oO&$K8GX9rb@)Q9Z)@%#jV=gxYN)wL5`^yVSvQFwXhe z&?I$(Q6&!@pdV_`?P^EKj-t&4iE)qJUO+<=d3(wIRoAWbS0)ak2cs0XQ_9b!lXM^< zDgRbFr5yf~2O(kfC$iJvPD=BCHn=-Hk;~x!^ooMv;Lm08XIB)883#yS4%Df2Z20F= zvyUs?xkXe^#b}tPkD`V&G%vBgj%P%T9ut4j$1%KH^tY*7UhgU&Gw#hle{}qar}mux zLi;_R+;;XmJ+ZdEU;cT1=|@)|ns)SE3pNfMeN=tz7n9uIjXXR3Pm{(ks~UIt$)A6J z`o%YVon7?W{H*J$&S|Zlec?|Rnhl5CT-en&YV$vu%9@+riVR#^bZn^p$Mbq`8*@(W zMJM--y7$nV+qU2O%B|16{NBao+m8R~xI1^A^+EKrsi!`?rr3LGQ>H(~^X!~iH!j(G z`ubJ3t*N>v>-sNNPM`bMlcySo)r*VPJ-%zv4VioXI4w2v{&NPt8ujU2+it(`f|r`- z=Y0A;ckMURJO323;M8X~zxF>X3i=QI;Oy|5Rpufs^7Qj3y}WGK1-lM^qG3w+w$EDc z+WVesW!aRR{J(n!L>I|oJ7>(;_{9IWvd2gLO3;Vqsdn@kqlUGJERURL7@wRqN*A82 zVTX0nxuNEh=@~&26hqr%j01-<>K?lPeOpp?^T9d(^#zZNT(z()>l`EXsfOV#jmCfa z#tp|6ei}Whd~mJN%-iydj(TQwdd9B$rxvEYQnY^6*&qDRjOjPE6^yxL`<`0^$IZLs zk7tTS8z0@e`X8tCO#a)IcW%A-(ks3RZ@D~e^ZO-F-@GjAv{}c$zvZjVRc|ltfBJ%X zUAuihy0gCgaLNszUh~(9xB3o#>F%!%3(URuVD^t0kt*NqgXgcAQ3X8&ZeZdg=S(&I&9l96JNncPTa6oTZD6wgSyrO}E$qsUWSL@$b) zeiedGcV2q--ffxBzFdAxvvoq-q3`jk!R^h($ diff --git a/public/resources/fonts/OpenSans-Italic.ttf b/public/resources/fonts/OpenSans-Italic.ttf index c90da48ff3b8ad6167236d70c48df4d7b5de3bbb..e99cb92d49a8ffa47d8a0d946c78ac292f0e44a7 100644 GIT binary patch literal 153256 zcmcG%2Ut``-#0vS$}YVwz3sBVB2A==s4E==1q*_eE~qH>E_M+c_8NOnqKhqRtg*$G z#FAc&iRm$Sk~_JRD4czNb9O;Yxu55KukSP0FmukCGc*5QX3mCCLWmRo2t=LQH!A~I zlyC*xQCnoBrlnsz`08N7S&YK%pEL4$_g&FDp#$NpiU~;?oYA*`@)F;H2ML#ch7kKl zz58~ITGwMS|^io^twWs@eTr&vdxBSbd=eS#}%hu4&Lw4O(Z zJI1rK8D28J7VkM=zH-zS!$(c6j0pKnLrAA%81h_IMM=53^4pboHw@3?s&K=8u=RFa zv;F~9H4~=nNx%L%!2kd%c+{A(l27|jb|55p3n7-SH6>GOl>_W0^sh&M_2`nCin-ek zyiVu`SdW-mJ7)ZZAK%z#L+FE(c;}_saTT=_x-L9HNDzZx1ZD`~$rZaRwS9-#C;dw7 zF%AB`f9th-tbREC!(Gk(EgxCFZBa)!qCheI!+RFXT7VPFan1hCD$BR|ugTlyXL2Pp zu(9#Ck+_mFBI3;rq?s(ktc&ezFefE~(1$kS2@#`(+r|fE6RXJv?ly_yR<$4NQ^Fbb zMD2xp!R&rU@7@`74k5-C(;6%!ZVATS#-0h8BA_E`jDDM3WOq1~x!8~}-jO^I14uWa ziexJWlRaWNNuwvp11^K)aT&%6p`5%YtR{`L*|?vZLlQWSgmG^eccK4ep^Ao}wm=C- zu|vs0nTzr=%3zdYxj$!ofsKK(h1L8>vQ2T7)Ce<-%dn;b;TTyb7NYhi1^hiyAlBk~ zEGgtdNdXrmofD?x{yU^VafI{}cc5G*>x4z<$LiI1&w}W9iJTH^$ZnyMoLAf>4}=Kg z8o`#F6?z!I=lUCe;NBn~qOK8^lYBnFn9haMP+=h{6Sk2=emf~gUB)+)3a-xRCg_Yi zg)JnJ6Iqd-@ZSJ#kt8VoAc?piEzDv4jrZkuI^g~B#D?2NhTz#){xB&OPmu}yyT;@E zVPhA5neid_I`I-JI1lc1V-tg4#=nj6G4S)DP-Xm97)2O9XR<#0mn2@8KyNGdlXC6| zImn+P`SLrnFhB0`3FJ+_hD?<2-5^W38)OIPNWK>i81IW+$qnH90Nr8i!`+|}+$nMd z?>mUM$sy3zpwN?Qex&g|8Sf1De=3R<#wCmvj1KLKOb12_a{;Z=Tj{`P(7s?@hj2Zb z(V~5kX#tuE+ofh1?+o{UDvC9r0cgSK(7u@H&`J-`U~&UBiAZCw_-HJe9?cY z&%en$t^9A!oFe?u_3V&oO?LdB(hE-kE&IJJV3^ z3i*=zjC#{CRKZnK5Bk`+pU)>>@&%B$>0AxJlt#0$I0boIc%PIiEJ$zeEz(;NPI`+v z(n(Q9O1Vj7xI7>99Mf>wz^Izlm4LI+>QxZ>&$NeiO9DFB!gpg94`KgiglK8J-x7 zVl!F8bes5?T$kTv@GgbitRqP>@38r{k$LQ%u-AB(KLq_T26)DEek&e1OWr*>Nvb(7d<5$ch$uOGaZ~(Ifvi?^ZWjrb3ja!9m^x1%S zP}n%U0q1Rbg44-l0i3uD9^@3FZUUD({R{$ut;wmnSe zNlz4E#=VL~=*#+G4KklITLXULy-8xL4E(unl?nb`lAwIqRABp}Xd#(_GM#>9+)4+M zufgXtP^R;Jja&Ki`9o#?_>{sl`P@i$O^6t$wzVEACe$yEqQPfSq^!E z?Kgfc-XIBR>lKOQ7Wkl6xsh~HcoRSIf$@9c7gDF_L-r{4k!r=uWWJ&ksRwUO2G3tr zcu+x%C0Aer>!8z0#r%#O zP`*MrBEYXmFIFqwj>qy39 zvb{Ik2=1WqjCcV&-2h#92eyqPV+mf(@ev$%0A?Vq6?W1JGw#`P6jAG1I_1v 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 I-Ko?4FC8~NI{*Lx diff --git a/public/resources/fonts/OpenSans-Regular.ttf b/public/resources/fonts/OpenSans-Regular.ttf index db433349b7047f72f40072630c1bc110620bf09e..8529c432ce34f0bc582e409c420f6bfa6ad0198b 100644 GIT binary patch literal 147528 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 z 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 ZJu60E;vtPD?b6uQYUF(fEseif_dgf&dl~=$ literal 217360 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 !}#gv~NV!5|5YF|kE)J0y^zWbk4>=%|6F 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

)grGHxqHL>()G0EHOxzFvJNtW=v)=H ztgx^H>kxE`inmimHd9?r4$DhVF>&jQ#8a-;LiPS-nq0KO!jjdR*8fJd-_#vdmCHxW z?h$+)XZHNE#wkxNH@{qy9TlE3b5>A%uz!SadU|3~1yDJ^b_Tfaaovuie_=+2qysfc z1t)F#U^ikm%9&$T0yB%relQ3W9OxV77lwTMFdtf{C3?J4FKKO-llg~M(6@|jl+*y*(8RhJZwP)}-r`<=f0n9O4U zP9=|(`5R?$EI6Waag7b;@>uPGZ5TSIiTykihFnY>(xmg5%m@z+j0%cUCo@%X`{?Xg zJY;5|VTXBK{CY|6!22PrHAI$tiKa7i$`t3jnlRz4bov?>NxI0A#SWrt{M`X)6L~(c z)NADyT)&PfI+hGUBy=&U9?&`B1T&O6tAH~t6FXICYKg;KU)%RMeE z&Nsw2L>W0(S@S!orYz;yfb&Z88q922IdPP;B5yn8?}9uQRZ*BX%$>#kFHD*8!aSWv z=1OuAU*8J;`q%xvLM={W;@e~u{~c9q&mVy<>`7NB?<;^1^)h@MjtHJQtv=V zX`Q!+vd++_r@$}-QgC(|*|m&OB$=^HZljk8kIh-xzM_n_2-^ZbGDafjbcx;J$96oVZEv@y^RL%e{74*CmEPw}7E z`d}A02ss~>wLVGK_Y}$WzbHoBRg5mJVC2r?eDv3&kYCqhtlyZ-FZ*AV-XM4R%F<)~ zp3-w3bC$WTbfKI1PkD%rdN_~O&8>5mu@TN^+%@put@nj(59h6~AP&=yuYJ?0*; zLmk-}bVka-zSI;<^{|4)BEqF zQ1(#2dwzqp1HMLVKxnV~TZFp5<*vW;tzsiW`&`W`<-t(bZ}|2c(Sts&)V1g&yy32& z_{9SDpSayM>%?!3G}qq{dM0S@bxkMUV-H5hDZ+|cYYM_V35c$ACWnFvqE4903izfbPPaGxgQ$9zWa za}a;343B-2+;s>aDJhBjn%wnphsyZzUy}P$K3p)%>#|m#cmAqs)%mNg)gSpdzRmK0 ztkow~D0|2gIvI=QKU!XtwfgKyq3!%MguWze^|_NmoAK>8md9nSzIYPe&3u%wpuDJ7 zUpVR81AL^2wER)l>Yq;f_Cek#%H_8X*Q+Oey9$Q{f3-X>YxNlwDh6|O5g*B2GUYzk zYsaUI@xBpdXPB!o??^Hxj+aOLm0|;0Q^7=!JuEt+5?2+0wgr(@v>)dWm8+0oX2e7V zCxzgi6PhGg-I~Et6+FUYEDJlr>Ojgn&pp|==hbr`e{$Tem(QMc!9sgm@6;VjD!ame z`Qs+nt7m@q$vMBjxOT^qgRix3II!TrTfOIB1Jtw7Y7UxNSS(fm`H4x!!d zZ1=%)m?fh=Q_f0p4t;hN41mzoG=`3%OHCeZA!OmgXcm4}L}5tT_{SRAQ+tl`NsA9x zR2Hl~n-qZ z@m2#j_F6JCvMpZF1S@Cyay09Zd%!GFDPB;m-o5L}kqeu~Tr+iA=ZkCi-u%H6&UZO) zPTtD0+qW+t)i7mT?dqA6u3de}4;!Af?gfnxI4>91m}@bM?yd@p!!5ODIwmjJSi^)$ z9b+Zai*XoxP-_@XX_RHSfr2cmU}!BMvkfVjq0s#>WNA#tLjI)9zGfL6hE!k(3I=;3 zVHlIljODRBWeCcBL_->|pm`dptI$52GU-6O*4iur%k4Qdar857H{N;Gd215RX}P6k z#q7EJnkG&;vgP(ip16PYw)Rh*m*-|&pFQHHE$3~yVBF5d^OseX_l=l(Xx9~gPWFnt zY4ggL&<$|cTd+(1cia|At1WBq$0f_y=+<`U$a zp}gVxtMe@JIZi?)<6Q8l$PjFR2BU>Z%@wF@!U!g=!x>s{>VSwzT5{15xY1bNIGD_m zwPh}K3fNN(@@~^I+SsKw$SR-NKK8cLcORO5`8lJOSB*WwFHau$=Q$a3hCTGwh%FyG z&uY4%pnUPoi#Ki$3$5VyUgjL_9r)_K^Zs!887LEDK6;8_=w(U2W^`4Z`}|56rg5ZP zikTg()REQ&HH|!}J!=pHQP+`-ySlS7l5EK~Vj@4EA$N7-Ob>1FxsBBsqSQmLK0g44 z!X%7#tRvY+cfDG-qht1uS9Fh0O`TftN9U{Ky@ubnV&DCzZG5b&ZO_CNU6an66%ycE z&=&sb$Gcb!%Wa?29JSjo(D{w?v575D+|~Z#O$&Fdd2H$G4GoJ6lbUkIZ^6DPZlt}) z%t0+!Nt&R2H%{74QXeo|syyLd`j8OQ3){77BXX872MUwK#;E>d&WkK*dpG_5GP(=8 zTgoiO$P|w~vNGE9v_*PhNdYSzo^pY0Culxk)q%=|j{D`5<(8$V1_h9+s_r-Cg*Q_7 zma2|6uMr?$*zZ$K45cCT@e0+WzOnuOId4AH)Y9|x+VgIl(0uI~%g$T=VeAFh_AOj_ z;rx=e?RA}<3$8qUXZXSci*IllN8NinuMlsV>rnTFMo(3s57oKe|D!`>)XBs{T^igfjr{3e zhRn5MMWul37Noj4WJt7=x|t~Albo!i!sJ4-XoxjRT<%1NX2MdHQnC@|J_zPv5^zSC zRF+faLTvKed7Wiz8eU|g+PC!9Wj8-~))!Yka3phFTg}`r7cD)I6A-v^#nMZgRywap zyF4V0rLp{R3;y`fr306L{Xxgk?_U|yGMgXnZcdq6vi^n@4|lEI49ZudUh7e>As7u( zjmoOBs|H9|;l~PWNIO*HpoWJt5@>_@NWV|mSN9Lt!ba*nH&;lh}Kc9$LySWy7y?Ui{Q+H&VTQ zLYMgRo3IbI)-|<%o1SCHy(}c_%id*ww8owqPq-jFxLpofcj(Z#moFR9)Kyq|`E~fJ zo^5;M`bmFS`m*zyYY5M5XETfBHv-R@uBMalT*-Ixhs{TT2f8kDoScb12@MeIjIg1G z6L~mA$t|=$0O5}=5)bk6hxsr^nxoWF8c`aN7Qt43_+jgZAM%}Fw0`zk>lZZ2-2@@% z8FMts8RvMb@-g#3KPQc{p&y@#WN{}5L@CjPBRa6ujiZ1T#1$b{%9kT0!h+vTJZa!l zo+LhNY55Fx$dHq-T~Sbgs6|fBa!ouwCkXw{wT=53uOjqp*Ju@rd6#={@CaJz@0RWU4jl)FkqA@Vg zFanbUlOfebg#_VS|FD!0-vH7Sg_D>{pXkp~`Z|JVCoU;$S?p7G8V z?-c&{Q~z_Ug57lJQE#8KuGng|e1}!`FU^|%>Wl9cKlF#b_oL;3`}e1g%N{t$&yFvR zevigUZmi_*Sl+fgk8>)+jQLe_>E=^MaZWVO;b4mcJ?RAKyP$)`J;lD>P(_5$YBe_E zI}FW&q#?I_O4iGa$(flrYB?-(n7tIoQ**Pk$U>Jo(c*{sKa6M$Ing4u-7u)C6D=4l zr1p*#in`Ed4oM4vDjbfhiZpO%2&)~|nUS+%=tVRKa2{P38zvf`wS8K*B<7RX;4 zc!}Ewir6(#3lj)Tn;!0*g?^C^ZNQQa);n*JyI|T%4&1lO8o$65lR{;S1Urf+_C+KOC|NWue-vHmMRytEjYTgR?bLCbZU!oS#`VIwC(LW`uL} z#HpjVj;q={szDkP0Pp_}(U|hC@7_~;1vBFqubYmX41hb4@P*XxW>G&lZ)8NyBcN5~Y7@dHo z8qIk30Gfnvx{RgpUnIY(Hu~^xgI~7{hu#(3z4)>RJX3_fCBQ*3`izB;%oZW$a_QRz zXo=B*lv)9GB2Ewdi7vv~qcP^3f{L+-+l(*Uky-ISuW= znT(VPM>pP!LC12uyNzY=>jKtf^dJ`#CDaAKwX#-{QHn$l)o3T4{DgcCra&dwCrhSFwhC244KhBpnW=zU5oa~1qjFA0j;Rh6Zz?`k`RoG~l&5Zl zQfr{NQ&D~s@E+vH!IUQ;C8{f`i55)5l5rE<@mxu~MnBbFPleY_O*1%?>bnEag|fvZ zgJRVx6~8qY)zDrdxEHN9*;7vLHrxYRh)Y%=oH&DOrUP$k^-EB$O-2K9a(wCjXWyWc zcm0gtRp@(8@z30jVFW8a=)GXe26JC8n1=PiG6$VW2!M^YAe_AlL4O;DyK5qhNFxf0 zxiOdl#bJJ%fVp52a+8AjP@0jBkvtP?E!k+Bxmb4F~4K;?+CRPAv z8*_})arW#CV;;%7s}WSnn2YFui34fTed&{ewHxE1}o#n=u};XLDF*aGx6 zE@VE?KYH5ui21^P$8E+xjGv8Pj2nzQjOUF%8h4`h78$$2M=ydGp2Jx3C*vjKWz3nr z0T;euylT8=+=co$iaV#?Hr_PeLXG^@_#Qf$OHp6T(0)3=PuHQ=R-z`UhoioG6?oxW zV-4^LIU^sC>InLQJOvoVH zL|~#9g?-m(=yAugI2O+mSRzYe$t;DXvNYpY<2RPhGBAJ4!dg}i%Vl{ipB1n|R>W+q zn3b?n<9B9f4pzp>A*WTcVQe@X!A7!C>@-%zs#%TknejO!(>h4s4QwEjtcUfoKI1FnFHjmfz*e(0Y%N>I&SdM^ zS?p}%UE@>Zed7b;L*viJC&qim$7}=J$j)Ksvh&y`c0Sw8wy>>i8{5tOSF;au7?>{)h% z{gFM#o@Xzx7uiefW%dgD6ML1t#$Jck=$q^<_BMM5vzhnU`|JbuA^S7?h<(gHVV|oY z!%xRN`wTvh&*uwxGhfIT@x{D_xAG;tjkn_#vt_&kMtM7V7hl0w@^0S4dwCyU#aHt+ zn1iq5XY%#@EPgiMz&G-9___Q%zKNgDH}frgE8oVq^9%S6ej(2>$~=%pc{C@yGcS{7L>4f0{qTpXEpRANh0qdHw=_k-x-W z=CANS@mKk4{B`~Yf0Mt(-{$Y|clmq#ef|OekpG!~#6RYr@K5j|H8lK z-|%nwU-@_Zd;SCekssxM<3I7g^Pl-Y_%HmQ{8#=P|D7M>{d|BsxeFaU!;BTjQE@Ai zRnP@QKEhY{34akF0!5GrhOy325hlV#goqSTB3i_VSP>`UMS@5aNg`RKh*V69(nW^I z6j>r$3_$5M`oVRESD3Obizz#7HqpoF=M7wWtxbq7G*k z8^mZaMvN8X#CS15OcafxNlX%x#S}4BOcT?^3^5bNE@q24;&d@roFV3k`C@@+77N89 zu~@W-R+(fiL=E9u~D2O z&K2j0P2zm9S!@wo#Wt~BTp)Ic3&l>cOY9aGi9O?r{g`-MJRzPGPl>0+GvZlsMEp@aC!QBCh!@36;$`uQ_>*{5ye3{3 zZ-_U=TjFi;j(AtRC*Btyh!4e|#Yf^}@rn3Ud?r2@Ux+WoSK=??Yw?ZvR{T|bC%zXy zh#$pK@i+04_`CR7{6qXA{waPHzlq<)G0`sugj2Y%H^Oj3hA>U2UE%PV>23O$zNVk) zZwBDL?jSSR3^7B^Ff-hYFeA+3 zbEA2Vd9Hb$xyd}=+-z6`?dApM4)a2Dr@71AZC+&VF)ub7r%#x`Yo~bib++4V z)i(XE^XXdE(%rMDtGh+{)RgFVseG5#)M|I7SM~DdMcrMUUd`%ltzOvOvZ}?}EMH#L zT}!$;Tb6k>tG8e6qW11Zeal-rTGse28idW-#a+GTB0Q{hi<*&~b+LNYA?@Z~uX>H7 zMI)(KNLu8}w;ta$FIv>n+3VZl0ln%q>K663)~gg-Fw@X(bgjBJC}%-&Lv(=I(uC@ zdrc~PUGf#s)YjLzq`A9qc}H_!Z$Q^jmvxH5+&u)dLubuVZk?hqcdOS_6}Lye{H6{T ziC@nkEU7LjuGa4w>ooOouY8%)sDgT_f~Knq>QfaoUFV=r=U}?ZL7#kCrgyh@F0u5{ zGhq5q`UCogy1b_AitJNwznOz{`K=xT&mID=9fYlOR1Vk4m+u@@jb`O_9?;U!)w!g{ zx0+~C(V9J=S9QJg@@j68Z@;FVj^>^=1$Pa?x@;=+yVBCz)!Ee(u(-XYyQQbSN4k8g zJ65zcOVFpev#YnIqouvszkWqeI|z{8-u1mYd@SgcUj9wX+o=Okj_E@p`!+3aS)w9^ zv?Ka)xGWNvS<}+nY#H6We0j5%#$(QbmjE8iv^GE{A+n5bUa_JXjJ|x~;$}Xvk2m)5 zS?yp!iJ4Do7gO50EK}Q;EN>Rmn)|#o6=G6byQsx)Qct@-rQ@a`NJntHeVaWQ_iq`J z18)$Zii7BvPwdUIs^y`?3G!f#4O8XmO50H zI{WyVcCRj#AJN^`C9A2lw#3pSGu4YsX~bd$GPDRk&|&GK685L`-1G#UK%c)(R8@}- zln!6{u>>VHyRBHiRi9_Ksm|VRvul6VJ=krkvD$6r+Fvo1-BzjHsv+8KsuQx?)L>z^ z)$8yE^)6P!jlEdoE!KF8HQr*4w^-vX)_99G-eQfnSmV_lfW27bE!KF8>oh)%zgXih z(fCU=e%;sGOEmrxjlV?WFVXl*H2xBezeM9N(fKaX_)9eY5{#&6g7?Ha#b(F=|8m~j+b!fZ}jnAR+RqFg!7F%a7>28LQvRb`n%HGntTE2W{x|@>EYByw^ts<_K zFDmsCTd^acuXC}Mk`^!Q2w2&N9+PCB?w*##*5&P;G${A9Eb8i9?9;Ml5n4K8sc*|0 ze41O^+iew<_G0UbmL7BsW_@3`Z1p9@Hkt2|V$}}tR^?t=UFp-((+hE;w`H*pq^g$o zC2hTJ{=IFG1r*%l*V?|y4g2?imQEcYIi@HO7WIeinsn=XU(R%5cunKZ0>Yq zmBL?EDc-V58|oWm6*e?9$g0I#u~cz`s?riIkCxUcmMX1NELB=3i>|m{u|D21o#J{$ zFWxGCNkgfnsjaKK)6ylM)8(^|o@QHD*D_gpcJ-0XZqxki(EQ}k?lSEz(|lc~`MON= zb(!YtGR@azx;>R?zAn>zU8ecEO!IY_=Ib)e*JW;en!n35f0t|gnq@mFj7)f#`b#$T=RS8M#$8h^FMU#;<1Yy8z3f3?P6t?}3Ba;(w#_2kQ5 zqw&{h{52YXjmBT2@z-elH5z}7#$TiH>&9ZQ(fDgL{u+(HR^zYL_-l3kYc>8_jlWjo zuhsZ#HU3(SzgFX~)%a^Q{#u>?T8+O}ok7dnC-eT+v_y`I*q?h<5!K`X0Oxu z>oop4jlWLguhaPJH2yk`zfR+?)A;K({(7DNdY%7zjlW*wuh;nNb^hx${(6nSUgNLV z`0F+PdX2wcotDeso5Je{sxV|LE~@G_!~6-293W#<8RRT8#Mj~jlV(TSDmQM zt~*hCgT}8qS(`)ma}M1(I#g#4e}&(n&@LWh-?+s3AfI_dk|Lb6aE^%YM*dx{HlGzt?{e&3Ae_t z+GlaSYM*#({HlGzt?{e&3Ae_t+9%w){8jseTbI9TpK$B)SM3vSUH+@nm}5SpO<)?&vLc10`;tG)R(eD+VfxTA|$# zf{$}kIAv>SxN^ITetuW)^5$+Sbr#nv>7=?`^)7hZWxBba)bjqkO1i5RJ`VYm*_e9oV!`R-z{9s4m$F zRo6I5MeF=l3x4z4<+H<&aA0AXxJg%Ot*nBKHih}f_w#TiPkv(p`8tHah zmq-$Whpco<55FaYb>Ty+-qP3FTG-QLEAa-g67ZE&4}u-;;C45leEeEFy09=wo~kj} z9i@_jiR0^J4(+AI(mi!bjdrW>LAU*c@P^~v_7b;S)lhANr|3&;YCeFs?o8Bt0B+g; z;w}4oyk*ygx9qy`R$Z4v%bgA_cRIA(>CkegL(82GEq6M!-09GAr$ft~4lQ>&wA|^? za;HPfoenK`I<(yB&~m3k%bgA_cRIA(>CkegL(82GEq6M!-09GAr$ft~4lQ>&R2SV) zqt>PHmifh7<`-`{zTqv$SG?u;)=;C?rSO*HE8bGRz*~;5c+2q)Z^_zt%ksusmNVY6 zobi_BjJL+C)}!Fo_|*DSLycO0!ds`W)}7$i>8kZ6xOMt!y$NoezP*N+f$~+@y{fxY zJL-lwN^L_O_8|^?=}^aUA>~6uDu+6%rNhTF!uoiIUfBnf+Dd#p1FZIuMMeXGc1ux& z1_A9>qiLxYkxR9RT&hLl(&7?-G|q)B9bK#4gQ*Qlr|M(99$Bi_BTL=uUKO%_Z1xHj z&t4(R7j8w2L(elEdYKD3`ue#Ljk|pqIqa(P||Ocv1Qtt==m2j#e+3HoYljgj2c* zSE&L}X(ED5v7=Sd+}XFhThc56N|OLhGl7a`1yRZ}9;GegsnjK?(w7k>1{qP(+||?S zMMTq^FyQT@$Ohys>6QQ`PjM)9ilY)INTp4YWYPe9Wy*4sNM)p#LJ5lm2n_)`BLu39 zD2Oo0c!WyEQ@A9kkjaP=8$rabB@n~(TXrvS%kBkl$)0#i_QYGVFW!=U@s@1{Z{3~i zuz5yW5Hj$)$&tGiC&W|QQHj=(^YtJi7l8GYl}&+ zLnG{H>FM!!IJ8Hg9)GnnNJ%xcBi%wfb%Dq@WRn^l3^jfRP52#B*&(HA3psDr+ zo?k(qk3nJGP@YWS33#USbUYh)1D<0!Qh;t#Bc7A^R6M8iZakrpgy-4(Af9*fd+@xEKY`~{ zq5wvlibN5f#R7SRZc7)QE5r&Mom)vZLZI6M>k-gw*$5cc3h;#P3Z6T~m3Tr&1<&im zemoC|19;vdZpZVWxErQ-?h(Kx4vE8fJ}RDs&r{+lz(>RpJf9cOr*=BA-nc&Dbsv{Ub(juLMIZY%Bt zf+nhkZ56qQ@$YC%lQa%PsvL9?2f`97I51Xnpk4BwL-Jmk1Vd%Gp?T_kz$63Kg)O5VFn^4>nldzVYD`%!Y;QOR{bNv<0pu7jp1xQ>+)*Regs zb?jo|I<}X%j$J}r$1WwVV^xt9&LEpds4ev7e!KM*(Tsa$qUn73g@B8k7@nasJ@QFq!<;@8$C)CZnerJ- zPuE$l#}WT;F0^QF(9?B^e6Dvr3je!YPr_%P^jYJ&5%3PzwV>xm^DV&ZT@M5H=Hmdb zbfG6PZZ-iMM`h?P*Pq~j47#NMEcznhmZEP#hmkcd;m)jHf^upS4y8XwP;zL(BgxST zPvAzt{Ru}(t|GsLml9sbm9Y4i+>!8Z&g%rF-J#NJeJrD53iC9W&jK~Tot#Epq`BHSqIPTY~Pm7x5_#62a`689nA z{={nvz9K){C$_H=_Y;(OTjJe`4@l^6;#0|+5>alpyAxk2IZA#6WrACg^G6cjRM?Wg zO?EviW}lYEncf$f2md{vi4{z-*N)KeO`UnVtkJ3-mLN!hUcg?|)UBugX7o-{1A zf&7xH@KewPKoW1#EI{*Q=wf^&xg^O06-@H@Epcc^HXKX4n^MU^?Io=u zDDx-=8Ocq9P{DU@zw}r)l#CoEN7ENc>rsm`m6TD2QD`T>L8uUvE5D?3-B2F#p!|v& zVI3bd;tMCJl3X$fC83s;U(!xDl(`#_2*rs>dqKq&luFWdXb-X$2BCr(9=`)_ zC>I=};~jKEx!{%D!<0%4OxNF^lwl3s8_d9yswJd~QOtt<{|zol;np`=&cet8o- z5U5gom5&lvyqky8(7g7xJ6_Ub? zwV=kp7x?L3%Ifw@LRsl}zq|cT6))M}%~zQtkW26k+@WqiqCPoM`lY+eFFDs;3&}Q* zUzx`bsVII_;kNWGa;2G=c_se6W6#=b&Z0F5@lmK&>9A1K)Pb&^5^0-4Z$* zewzp?`UTK-f+!!Ezzz3q&~j8lmwKS9+>i|^l=REc8xZ#v3Ehd5D+rR@gfywoM(81e zk{`kE34*eh8b%tZfcpr3Ur6XBcgo2h!B6D_ypsH`3?)Am4}O}eQ~2e*jd+S?VAt_L zrEc*Ye#il+dKLWZO;Ejp$rl7CcZ+c19~42Y7EdPZoj-?9>1^LektF1{C@KI{p#^^y8QR+& zM17b_ukdTM!LU%K}CDXOmy* zU=99^TuN?F{T+D;q)<#XjkIYJvbxJ44P~0{O@72L>I+*NZrn_i@zT?B( zc({bVg$wlI`HSbsRv2-iefh2}<7qs6j$|+)y@ZMN_a3F|LuJ``ujZ=6lf6sCZY?hjK-1l&qqPBv2(E z4DxRJo9-N)ig(k$!xukMDwLz_&t!U_H{D54hKZlAgg|*lq=e#;-p>SO7Xo@!`lSLo zS3=o{2Y)>6Xuqulk({IYoQz@cuOhz;d+`Gmh>bE)bB&Da;CF!hG7fr5<6gKPl75c?dPYJo08(Z3 zHYkv^WPAv}&nPqxrIrVbaDR>84+Le+fM2Tg``KL@QVK#25a)MysSz!iR`R3%S&gPr z3PPUYjz%seM1E?nmYEJHSBBaEl}Ts>pc)B{ahGIfqdVu+H)Tq^nRDFjEpq|%1@1NnWyqwJ^G;JmU)O`)4$9|-0dUt z3Aj{keF5kt3MH<~e4U`ociknP`4Olulzxa;__l<;1te=B6Xm2hBJ&r}(;!3p-DN*G z#%Fn>b^<9hD;&RA2_@rOSwdNv@XMEeC4ed>5Rnfv$PmUv7~g_=Bt%3s)l@`PMO9N(6%|)SL_{PJ zL_~dE5e@OEt0J1KGLHMc@1C=VnrM2T=l*e%XaBtCUBC5PpZmAhK6BRk0i_Bx0?H7| zMrnJ5^1$6C)B#AnTY2ZP!!r6aHLC^?>Ik_4*AOApJY$p)YMwDgXa>-1p?N?HgcboU z6=L31LTiCG2yF&BMU*u^KF2HlZU$9P5EL32lvgfy^E8-pJgA)MHBB z2Xsd0P{5rGxbr|4l^TopLGwhQTI8B1<4PsULBIIEU7kN%sd?bK2;CL0Y4Z*NmmhGw z;Ul1nl>R`_KuQ5V4JWF+yPFRQxKTjklsW}yhR|%Fc|r?-)(S0xr5vH90kg(d(^6`Bb&M~G#-AhZ~0nb1n0)k5olHVSP4 z+Ag#cXs^%#prb;c0i6~)2lSOtIcAO}s$8wNsEbea#iao?CF065dj*l!NK1%Xpkw^G z+aiijbH%j{xVvx2bqe%)1bWj0?x}$56)#uc>-ptA80ZZO^o9joX~2~Q+@yf3s*LA@ zG8RJ5FJn2-dA3L^ycki7SK{|ui#7OkQr!B0+Z1qH18&C+xm|(YzCiC#z#R*?GeD|~ zzN=DQvOVZw6j49arBwovR^0hQebA!*MA?bB@`P#ubr4DpxYQeRjRL)lKrcJs?h3dr zKq@!8H;`ZM!$4D1+K~84Cc7$bc%U~b&>I(UGXiclxOuX-0B8|WOU&Txr9@oy`Li>7 z75H*;*=ysYpS=N}_KVvLbX=$^Zd;)DUZA%p;En{`DWJ2maslWPQA=K7p&CFrLbZX? zg;D~pVZdbuTpOVF((4G+O{f51_epF0>P9uh0RYqe7nnofbM5pT!&_e>`$iahypbrsgE%B>CTS z<FjTX6z zx&-Ckm}_O@_n;73iZX`bDitaNnj|zm=c$~zLeGOcB(xA{iO_POSA^EY?Nxpwmz$ik zwIaukAn&dK?F$h84wiF9R?g>K%!v`@dbx?YwS`Cny=ax?HLJ2x+SI`=N14!K=` z@_~Bi_6K?xXh`mGprt@7az_D;1DcXMBX@T0JfH=+i-OcuKxe^S$Xy#f9mRbRt&zI{ z+-7jwa^C~m1GGQ)2vRX)bC2hq3UXWm*B&`KMxA)xXl>mCpsVK1)#;zWk8tY(bds)KpUf5qT8c8qkE&6yV0Z3 z&!VTR8cT8I>@_0a$2umI99j=qELk9Vo)V|P9CnQNN8#U6dLt>r)g%)s5w8_G=2K$( zHl@RnH+Bng=oaa$RcdQ$M)HZn?Zju13Ed&)A?Y-U;TI^O7R27mVtP;~oFIIRGUO;V zi!xFo{I2A$Bo9mO>lMegc$Xt05@#BmgLyU7hAk7pq z<}x+Ci_(9M`gUdL7?_`mDWWtZ$VWOU?+27P(FcrMM(n;JIV{u(nmAt-vKv!z<`wJ1 zGma5floIEmQ2%R6+g|vfaDx#34sT|<_?3&r`If*FW68j`hCTv*#;t=~LnF^Y_K*BK z`|l+o3Z?I=6-I0CN-KAmVpJ;hEsusqII^-yX)H z_U>&=wP&Q05l#bhcX$t&3!y>Ke;l#)jQct3VD~E5!3ck~^fvnnJjw;nTpz0rqc}R2 zp3Rse>W3Uzd!5$Y{0M$6We0b5~SRn2#+ln-TpB3o@cGne@ZEtqo}-}{K|6KdUeB4@!5 zB;#a@Php8>i!ASx{&?Yo#Gci-WU)_7xol3Q1dmeOEcHo|MtLH0d8dfo%j$u@vTk0Y z$}Oh_uZ>zqA86dO(hLcYmd;A`{7tIQBGs@nr8`>vu##mtE2Q5*`qNaa47S=iqM6V@ zn$xIhn#;l#S;!Ed5ynh2cgVsX&8S;7AJ%j1+`X)`+d%z!A@U_~d(I{I6P0B-cHVro zdbwKNQZ}Cx?k=5QsQ&FVa~5dkbeGOARG*b0TvX~N z;Zpe%c`##Qh}U6vi2p=7`o)mp@79ccjl6rOQui|#&RHV!fS8X$dr=CW=U@_v-5P3j z3-!QZ@gEXft{RNnO?_3Q(O<7VoKN0-LVRUFY#Qv}PwX}#?+q5tQr^djEuQd5eS{X= zk&!2m_lp>3T|}vuDa|{v8DKP;?mSsIM@{!Z=`@jLSNsGq50bGRCCkYeJmbL(rZmq` zB18piwN?6al)6dG80nv89lRIC6fxCXB3!Jz-HGkZ!e_-dr1Vw`%X_$*pNLQo-)lC? z{$lm;T49`ch0;^Q%^=?qZW2y{P5q9{)o;pdZ)%!z(wB~TnHcAFG4C|ZsP{RG?8mbF zQVhT0vd<{>yd+OcHaO#p`VC~~PtwGC2+ZBY_GvLo#k?qHjWqXh^zACmOsu$26TesM zOTV+2_o;Jbyk_zoAb2@n9Nk?jC$Tsn!~*B><7f&Flu@uXw9unP1El(pREs2 zx=+Z0TJ260-pZQ0_sjm5l=g)3W~e@z8?Iu}x(n4tt&!Z@mG|S&ov{46TG3j}W!1d3 zGahsDj@>+I2dBjWrW93iWzAF7uF}bQOSMJ6uCF8b{gHUJjJ zhI#>;7`^3xNdFJv+TdM(hREh^vadcdJ88i#W4rJ>NZ^Q`N8vYOb+Dd!g_@zs#BP1& zHIrng3wh^)M*MFPJnQYvx?3|frt=VA+1QxMI<0YEqIznbY4)nbw`swY(evPUmM9m$ z)})++hoZ5=m0B-W9j&e-J9A`TKGXgT^!3mu&GXVoyS6mh2R; zK5iy?H$$oKst%v3Zg>j<-;=!c>+rs6a*5u?{--RwOl$5A>BzIWQS$iBB=UM%8@s8j zIbvs!FJ{f%UrPU=EPSC-W{B}vPt#fQE|!8*_?YV*-MRM?!^7i_cD3F%b5)b)WTzi> z+!M0%kox3S@khn?C2w|;w;DS$N_;QrucoHkNBB0@$G)Um$qQM$hah#YQhTWP4#@Hn zTJSp1(|Q>kU$?7Dd08VhLps^92>2rL2bK5d;)kg8N#gg%3`#sKeir-3Tvk1gidinr z9@5+@3tDfRCslf5^7bW-LUZb4K66Zm$p6<@t@_DJRHuLN^e$sRQj0cAf4^`)>f7Ve zA1a&rt**O~d2J4L>|3;8o+9>g#s5mUzC6!S*=Zd~hmP+d=SUxKdtjt#yR$^+qDJt2 zt*IQXhmXq|qFSTo^_a{3yO`6myq>wR&WB}NDxGSw{DJUrm3WfaE*4)XzMIzD#j-z8 z)~3qxD0(e}w{Pe_C*Sq5Qg2l*R~Ft;s-9M+sm8)l&EH|)dUr|xchX-;efw*TPQw^? zEojC%Zwnt3-;>xh7NfT|gYONXSwx%o9W`66Rhii(oWZ-#)2iDZBjdFrW6udU(CGYG znj>hz&JeDtvSz8a17-P6dIN7Dc^BUpK>kMhTV-c~cs;Y+6XMII^Nj4v`_oW0{=oP7jn)pxE0a~lq z*0yf~DK9ReBGu@a=xB@Jm?}dr38!p_<&Jn#`5u6j^>-{cu0)hPNl$ zJi!{8$;9S7ZF;F{U2Wmp)w)`=>9vy0Cba2&mp1K>Wv!(wpC`t95G>p7vRp39D~a*m zhZ*bMt|x4L+0Rq`|E~I%$WBeQV!6hsu`I~nnpwj2DDid)>3$&#-%|~5mgNDm+*thM z;;k%?mF0X|wl#!T$$oR${7Pf`mhgKT>mI`LLhe1ZW`C)ArqP;Fd+l^ugAd1Z6aIuV zr!l>ODd)Eb&IWmg6)NSYwC{eZyEsqJvXAsWyFj>9r9a79g>*+K@`bT2BDh1HZRBkZ zv27_vceFc**nF(EJgL$z$9{-XbT8QIvFX55ReD$Hj1&Hzu-4D!Jz4&mygON`g-X3s z_^9~JlsJ!@b`~iFqb*WHv&7Iz30r9&csTxD{V@DsGhC6L&v~u6H`LQ`wOv~ z!dZv+n$IPngLMc!&kkC47gFK`c(g0jStZ^go`0e??kr;OKIy!sw!cc7R%;u_U)%hV z`zOqYOvO3m-$&|C#Qa9gd^~lHtt%!|OtM`JX1thZ#S}{CaY{3oJWh*;wJYUf_Jj(- zFBQL@yi?OIf`t>Z@HH7b$~J+VLw%>2%k|QuN}VSAqgCPnF{8u`A!Bqem;p*XsZ@DO zoTW``6IFU&@;Kd|H*|K0(Q_GRiLm+L@U1RN}OV>`iCdg^EkI&KG zy^zxsWiG>M!-dS81P`^v)6PPez zT=0e1MJ0O`yQmCyWf_x$s|~L9xH{rOj~I*<-X08gQ5jQ+s~A@auIqM4`ER!WzxGM_ zJEZ)*QCGMhD$z;C4#2ifH>V%sIy{e_K8hZ+;Avz!<{79tBXB^cqgd%CYyflYRfC+c~)b*@J&0hn+5DT z*~puRy!A1|jH8v8|6NP?eXOcnq~-CTQxW&&H-NQ71v?ED(n z)updf>GESt8#xC(I<<0`>5 z8W-1&Q*p6&b8yYa^#U$wPHRy{Lb;pqa0VXIS;az zX@oZ4Xy0h%-d2m4y4=I-X!kDOY_advYTs*3%$sZ5z6GCe)c(at_xr#>yb{M*iHoyh z9j=YIw&2>1Yv=#{UHA>V66-h_m=$@5?a~2rG9NKp`XfHe5X|yX@O+%(v*BSEU_WCS z*H89hI0OCsdp^-)Ur;(P@;M#L(pu_gTopO*@tN(s9y%t8`^eeN@1~v0(mzi9%TtAa z6v8?q);A1q6)TZ^AoMD5@6dItA7ja%6_l$FKOTOEwn3ZLJ#rJ#PAX;Ncvm@G;scer)uRQd2UDcr;JXG81qLQm$mwOy`M6<|)WLGk46` zL1WDGV{jC=Sy)E>B|L>g-ziw#QU0EOuD-D6n^CbVEb}lKCG00>BSA6=al+}%}E2c4kKZa zYa;36JB5AkaEtIAlIif9z0C&q5Ta_NdjXBFCj0XBjk{TW%z$%HCrvcTKj4SkW7DP6A3;X?_!WjYY^2`A5Y17!GBc{shih+VyC{;xTLB0Dr zwViaVMOxsbiB8u=0%II7#sHg#=tA=mg=;&ab{%pKJD)h8I)8RfAkG%!X`OezL}agW z=Q6^GMieQl72;prkLXm7Ao5fhVoc4ihza$MA~=1FNKK~@hv~l%!RJjxvtcY7MwfZE zGP+Auu}LtaIK~Nh;vRBxu!1SU>SY3+axY*#w$|C=?82J+v~v-)sDXH1DTvzD6p^{2 zh{1I?Vr}(6T&;eHn>7eAvPw~_NoG3YTFpfatA&VHwH&dj)*uSiCPbXtf#_2EuyQ~w z6G%iefqcT7=0w~v=*7;c8zZ8W;trUMNGn|sMdcCiF?=dR)RnG?s8Z~W!l$u_z|swW z^&9Fv?u2bCL}TfWNGrp<(fE{y$Sge&b>&fSj1$K1AMQa+mcEFrQiinFh}e>kXe=YV zvG~*m(Od3CWR?(bfV|f$fh_PwLUv}k$cu837v&-^%0*t3i@Ycoc~LI% zqFm%fxyXxhakp2OZ%D$r5G}y^-NikghS+#N!2e0kIh@>46Q^=icWy>G1x{^5tQmwl z4?)RI<&$WGxj0wwzJ!^=yOR<3$ly#0`0$3}=(CJ}t_qO#*N$2>@}1J3YZmuMnD;ND z*D!_+-tO}@*%l%8o7N4V$WISvQt3n4#mX+>U+fS)(70wtn08MwQns8J`h-CreE z*0>byPITI%eq0+gbTZtDI4`C?;t4xLe<~23 zPZbDHs|pke5InQEYB(8XKjJwtno~t2CzKK&>0~DXXRrAF_*ul1g3m>2Lg4i<_Y6GS zRXLJyVhN-7!Pm03^nLVX*J>d0mHaq0;$BiS)juC65o1uBZ;kkukteCeXBz&(h|jED z(ls149NZ6;qgWdZyduh{4dyejQ&oE0Zrn2S@$4rLPnKDHs>sSfcy0J>;CRpQ9$-u@ z#?!*H1Sw&sd!@Jj2hFRVNz_E-KE~~n*S|_L3U4$Ck)ozm8A)pTKgQ`o&Sd$9BzT4E z*Mn(@U>T2I=|8h7YoG4agfE}$J>iaVCgYAA%ZPeznQd*`z@tvJeA}#fL)$+H>TR5L zI7caN8?CeKZG#c4=6eI-pVmEv%>k{Va3Eb7teoQdLy3Dk6xXRNt37^3#deTB&M0p?6)xF&tQ#xVgy2K) zj`1~DrB)j!rOHTp{_1h*H4*f*Ds*3jtrV^H;ww6T1$WM0!(q+#2v$al-x;jU@ZCYh Rm~*!O5TA^>r(z~J{{!u#e)IqU literal 212896 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