text-to-map 1.1.29 → 1.1.30
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/bin/clear-all.js +8 -19
- package/dist/bin/init-db.js +5 -16
- package/dist/bin/knex.js +6 -17
- package/dist/bin/parse-ordinance.js +60 -71
- package/dist/bin/polygons.js +22 -33
- package/dist/db/address-points.js +43 -54
- package/dist/db/cities.js +25 -31
- package/dist/db/db.js +24 -33
- package/dist/db/founders.js +101 -89
- package/dist/db/meta.js +12 -21
- package/dist/db/migrations/20230704125715_initial.js +291 -304
- package/dist/db/migrations/20230731232915_city_positions.js +9 -22
- package/dist/db/migrations/20240106224603_city_polygon.js +7 -20
- package/dist/db/migrations/20240320200534_district_polygon.js +7 -20
- package/dist/db/migrations/20240729211323_ordinance_city.js +11 -0
- package/dist/db/regions.js +20 -29
- package/dist/db/schools.d.ts +1 -1
- package/dist/db/schools.js +18 -24
- package/dist/db/street-sync.js +13 -22
- package/dist/db/sync-log.js +25 -34
- package/dist/index.js +10 -21
- package/dist/open-data-sync/address-points.js +21 -30
- package/dist/open-data-sync/cities.js +10 -19
- package/dist/open-data-sync/common.js +8 -17
- package/dist/open-data-sync/regions.js +13 -22
- package/dist/open-data-sync/schools.js +20 -29
- package/dist/open-data-sync/streets.js +29 -35
- package/dist/smd-to-csv/ordinance-to-csv-rules.js +4 -13
- package/dist/smd-to-csv/txt-to-json.js +59 -70
- package/dist/street-markdown/municipality.js +26 -29
- package/dist/street-markdown/polygons.d.ts +4 -4
- package/dist/street-markdown/polygons.js +127 -70
- package/dist/street-markdown/smd-line-parser.js +6 -9
- package/dist/street-markdown/smd-parser.js +2 -3
- package/dist/street-markdown/smd.d.ts +7 -1
- package/dist/street-markdown/smd.js +180 -152
- package/dist/street-markdown/types.d.ts +19 -10
- package/dist/street-markdown/types.js +1 -1
- package/dist/utils/atom.js +9 -18
- package/dist/utils/helpers.d.ts +1 -1
- package/dist/utils/helpers.js +10 -5
- package/package.json +5 -1
package/dist/bin/clear-all.js
CHANGED
|
@@ -1,24 +1,13 @@
|
|
|
1
|
-
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
2
|
-
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
3
|
-
return new (P || (P = Promise))(function (resolve, reject) {
|
|
4
|
-
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
5
|
-
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
6
|
-
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
7
|
-
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
8
|
-
});
|
|
9
|
-
};
|
|
10
1
|
import { clearDb, disconnectKnex } from "../db/db";
|
|
11
2
|
import { deleteSchoolsXmlFile } from "../open-data-sync/schools";
|
|
12
3
|
import { defaultBinOptions } from "./constants";
|
|
13
|
-
function main() {
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
console.log("Everything cleared, ready for a new sync.");
|
|
21
|
-
});
|
|
4
|
+
async function main() {
|
|
5
|
+
console.log("Clearing all data...");
|
|
6
|
+
await clearDb();
|
|
7
|
+
console.log("DB cleared. Now deleting schools XML file...");
|
|
8
|
+
deleteSchoolsXmlFile(defaultBinOptions);
|
|
9
|
+
await disconnectKnex();
|
|
10
|
+
console.log("Everything cleared, ready for a new sync.");
|
|
22
11
|
}
|
|
23
12
|
main();
|
|
24
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
13
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xlYXItYWxsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2Jpbi9jbGVhci1hbGwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFDbkQsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDakUsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sYUFBYSxDQUFDO0FBRWhELEtBQUssVUFBVSxJQUFJO0lBQ2pCLE9BQU8sQ0FBQyxHQUFHLENBQUMsc0JBQXNCLENBQUMsQ0FBQztJQUNwQyxNQUFNLE9BQU8sRUFBRSxDQUFDO0lBQ2hCLE9BQU8sQ0FBQyxHQUFHLENBQUMsOENBQThDLENBQUMsQ0FBQztJQUM1RCxvQkFBb0IsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO0lBQ3hDLE1BQU0sY0FBYyxFQUFFLENBQUM7SUFDdkIsT0FBTyxDQUFDLEdBQUcsQ0FBQywyQ0FBMkMsQ0FBQyxDQUFDO0FBQzNELENBQUM7QUFFRCxJQUFJLEVBQUUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGNsZWFyRGIsIGRpc2Nvbm5lY3RLbmV4IH0gZnJvbSBcIi4uL2RiL2RiXCI7XHJcbmltcG9ydCB7IGRlbGV0ZVNjaG9vbHNYbWxGaWxlIH0gZnJvbSBcIi4uL29wZW4tZGF0YS1zeW5jL3NjaG9vbHNcIjtcclxuaW1wb3J0IHsgZGVmYXVsdEJpbk9wdGlvbnMgfSBmcm9tIFwiLi9jb25zdGFudHNcIjtcclxuXHJcbmFzeW5jIGZ1bmN0aW9uIG1haW4oKSB7XHJcbiAgY29uc29sZS5sb2coXCJDbGVhcmluZyBhbGwgZGF0YS4uLlwiKTtcclxuICBhd2FpdCBjbGVhckRiKCk7XHJcbiAgY29uc29sZS5sb2coXCJEQiBjbGVhcmVkLiBOb3cgZGVsZXRpbmcgc2Nob29scyBYTUwgZmlsZS4uLlwiKTtcclxuICBkZWxldGVTY2hvb2xzWG1sRmlsZShkZWZhdWx0QmluT3B0aW9ucyk7XHJcbiAgYXdhaXQgZGlzY29ubmVjdEtuZXgoKTtcclxuICBjb25zb2xlLmxvZyhcIkV2ZXJ5dGhpbmcgY2xlYXJlZCwgcmVhZHkgZm9yIGEgbmV3IHN5bmMuXCIpO1xyXG59XHJcblxyXG5tYWluKCk7XHJcbiJdfQ==
|
package/dist/bin/init-db.js
CHANGED
|
@@ -1,19 +1,8 @@
|
|
|
1
|
-
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
2
|
-
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
3
|
-
return new (P || (P = Promise))(function (resolve, reject) {
|
|
4
|
-
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
5
|
-
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
6
|
-
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
7
|
-
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
8
|
-
});
|
|
9
|
-
};
|
|
10
1
|
import { disconnectKnex, initDb } from "../db/db";
|
|
11
|
-
function main() {
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
yield disconnectKnex();
|
|
16
|
-
});
|
|
2
|
+
async function main() {
|
|
3
|
+
await initDb();
|
|
4
|
+
console.log("Database ready to use.");
|
|
5
|
+
await disconnectKnex();
|
|
17
6
|
}
|
|
18
7
|
main();
|
|
19
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
8
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5pdC1kYi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9iaW4vaW5pdC1kYi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUVsRCxLQUFLLFVBQVUsSUFBSTtJQUNqQixNQUFNLE1BQU0sRUFBRSxDQUFDO0lBQ2YsT0FBTyxDQUFDLEdBQUcsQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDO0lBQ3RDLE1BQU0sY0FBYyxFQUFFLENBQUM7QUFDekIsQ0FBQztBQUVELElBQUksRUFBRSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZGlzY29ubmVjdEtuZXgsIGluaXREYiB9IGZyb20gXCIuLi9kYi9kYlwiO1xyXG5cclxuYXN5bmMgZnVuY3Rpb24gbWFpbigpIHtcclxuICBhd2FpdCBpbml0RGIoKTtcclxuICBjb25zb2xlLmxvZyhcIkRhdGFiYXNlIHJlYWR5IHRvIHVzZS5cIik7XHJcbiAgYXdhaXQgZGlzY29ubmVjdEtuZXgoKTtcclxufVxyXG5cclxubWFpbigpO1xyXG4iXX0=
|
package/dist/bin/knex.js
CHANGED
|
@@ -1,21 +1,10 @@
|
|
|
1
|
-
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
2
|
-
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
3
|
-
return new (P || (P = Promise))(function (resolve, reject) {
|
|
4
|
-
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
5
|
-
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
6
|
-
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
7
|
-
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
8
|
-
});
|
|
9
|
-
};
|
|
10
1
|
import { disconnectKnex, getKnexDb } from "../db/db";
|
|
11
|
-
function main() {
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
table.unique(["school_izo", "founder_id"]);
|
|
16
|
-
});
|
|
17
|
-
yield disconnectKnex();
|
|
2
|
+
async function main() {
|
|
3
|
+
const knex = getKnexDb();
|
|
4
|
+
await knex.schema.alterTable("school_founder", (table) => {
|
|
5
|
+
table.unique(["school_izo", "founder_id"]);
|
|
18
6
|
});
|
|
7
|
+
await disconnectKnex();
|
|
19
8
|
}
|
|
20
9
|
main();
|
|
21
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
10
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoia25leC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9iaW4va25leC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsY0FBYyxFQUFFLFNBQVMsRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUVyRCxLQUFLLFVBQVUsSUFBSTtJQUNqQixNQUFNLElBQUksR0FBRyxTQUFTLEVBQUUsQ0FBQztJQUN6QixNQUFNLElBQUksQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLGdCQUFnQixFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUU7UUFDdkQsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLFlBQVksRUFBRSxZQUFZLENBQUMsQ0FBQyxDQUFDO0lBQzdDLENBQUMsQ0FBQyxDQUFDO0lBQ0gsTUFBTSxjQUFjLEVBQUUsQ0FBQztBQUN6QixDQUFDO0FBRUQsSUFBSSxFQUFFLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBkaXNjb25uZWN0S25leCwgZ2V0S25leERiIH0gZnJvbSBcIi4uL2RiL2RiXCI7XHJcblxyXG5hc3luYyBmdW5jdGlvbiBtYWluKCkge1xyXG4gIGNvbnN0IGtuZXggPSBnZXRLbmV4RGIoKTtcclxuICBhd2FpdCBrbmV4LnNjaGVtYS5hbHRlclRhYmxlKFwic2Nob29sX2ZvdW5kZXJcIiwgKHRhYmxlKSA9PiB7XHJcbiAgICB0YWJsZS51bmlxdWUoW1wic2Nob29sX2l6b1wiLCBcImZvdW5kZXJfaWRcIl0pO1xyXG4gIH0pO1xyXG4gIGF3YWl0IGRpc2Nvbm5lY3RLbmV4KCk7XHJcbn1cclxuXHJcbm1haW4oKTtcclxuIl19
|
|
@@ -1,78 +1,67 @@
|
|
|
1
|
-
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
2
|
-
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
3
|
-
return new (P || (P = Promise))(function (resolve, reject) {
|
|
4
|
-
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
5
|
-
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
6
|
-
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
7
|
-
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
8
|
-
});
|
|
9
|
-
};
|
|
10
1
|
import { readFileSync, writeFileSync } from "fs";
|
|
11
|
-
import { parseOrdinanceToAddressPoints } from "../street-markdown/smd";
|
|
2
|
+
import { parseOrdinanceToAddressPoints, } from "../street-markdown/smd";
|
|
12
3
|
import { municipalitiesToPolygons } from "../street-markdown/polygons";
|
|
13
4
|
import { disconnectKnex } from "../db/db";
|
|
14
|
-
function main() {
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
console.error(`Line ${lineNumber}: ${error.message}`);
|
|
36
|
-
});
|
|
37
|
-
warningCount++;
|
|
38
|
-
};
|
|
39
|
-
console.time("parseOrdinanceToAddressPoints");
|
|
40
|
-
// const { municipality } = await getNewMunicipalityByName("Česká Lípa");
|
|
41
|
-
const municipalities = yield parseOrdinanceToAddressPoints({
|
|
42
|
-
lines,
|
|
43
|
-
initialState: {
|
|
44
|
-
// currentMunicipality: municipality,
|
|
45
|
-
},
|
|
46
|
-
onError: reportErrors,
|
|
47
|
-
onWarning: reportWarnings,
|
|
48
|
-
includeUnmappedAddressPoints: true,
|
|
5
|
+
async function main() {
|
|
6
|
+
// take first node argument as a file name
|
|
7
|
+
if (process.argv.length < 3) {
|
|
8
|
+
console.error("Missing file name argument");
|
|
9
|
+
process.exit(1);
|
|
10
|
+
}
|
|
11
|
+
const fileName = process.argv[2];
|
|
12
|
+
const fileContent = readFileSync(fileName);
|
|
13
|
+
const lines = fileContent.toString().split("\n");
|
|
14
|
+
let errorCount = 0;
|
|
15
|
+
const errorLines = [];
|
|
16
|
+
let warningCount = 0;
|
|
17
|
+
const reportErrors = ({ lineNumber, line, errors, }) => {
|
|
18
|
+
errors.forEach((error) => console.error(error.message));
|
|
19
|
+
console.error(`Invalid street definition on line ${lineNumber}: ${line}`);
|
|
20
|
+
errorCount++;
|
|
21
|
+
errorLines.push(`line ${lineNumber}: ${line}`);
|
|
22
|
+
};
|
|
23
|
+
const reportWarnings = ({ lineNumber, errors: warnings, }) => {
|
|
24
|
+
warnings.forEach((error) => {
|
|
25
|
+
console.error(`Line ${lineNumber}: ${error.message}`);
|
|
49
26
|
});
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
else {
|
|
63
|
-
console.log(JSON.stringify(municipalities));
|
|
64
|
-
}
|
|
65
|
-
if (process.argv.length >= 5) {
|
|
66
|
-
console.time("municipalityToPolygons");
|
|
67
|
-
const polygons = yield municipalitiesToPolygons(municipalities);
|
|
68
|
-
console.timeEnd("municipalityToPolygons");
|
|
69
|
-
const outputFileName = process.argv[4];
|
|
70
|
-
const output = JSON.stringify(polygons);
|
|
71
|
-
console.log(`Writing polygons to ${outputFileName}`);
|
|
72
|
-
writeFileSync(outputFileName, output);
|
|
73
|
-
}
|
|
74
|
-
yield disconnectKnex();
|
|
27
|
+
warningCount++;
|
|
28
|
+
};
|
|
29
|
+
console.time("parseOrdinanceToAddressPoints");
|
|
30
|
+
// const { municipality } = await getNewMunicipalityByFounderId(2016); // ostrava something
|
|
31
|
+
const municipalities = await parseOrdinanceToAddressPoints({
|
|
32
|
+
lines,
|
|
33
|
+
initialState: {
|
|
34
|
+
// currentMunicipality: municipality,
|
|
35
|
+
},
|
|
36
|
+
onError: reportErrors,
|
|
37
|
+
onWarning: reportWarnings,
|
|
38
|
+
includeUnmappedAddressPoints: true,
|
|
75
39
|
});
|
|
40
|
+
console.timeEnd("parseOrdinanceToAddressPoints");
|
|
41
|
+
console.log(`Parsed ${lines.length} lines, ${errorCount} errors, ${warningCount} warnings.`);
|
|
42
|
+
// if (errorCount > 0) {
|
|
43
|
+
// console.log("Errors:");
|
|
44
|
+
// errorLines.forEach((line) => console.log(line));
|
|
45
|
+
// }
|
|
46
|
+
if (process.argv.length >= 4) {
|
|
47
|
+
const outputFileName = process.argv[3];
|
|
48
|
+
const output = JSON.stringify(municipalities);
|
|
49
|
+
console.log(`Writing output to ${outputFileName}`);
|
|
50
|
+
writeFileSync(outputFileName, output);
|
|
51
|
+
}
|
|
52
|
+
else {
|
|
53
|
+
console.log(JSON.stringify(municipalities));
|
|
54
|
+
}
|
|
55
|
+
if (process.argv.length >= 5) {
|
|
56
|
+
console.time("municipalityToPolygons");
|
|
57
|
+
const polygons = await municipalitiesToPolygons(municipalities);
|
|
58
|
+
console.timeEnd("municipalityToPolygons");
|
|
59
|
+
const outputFileName = process.argv[4];
|
|
60
|
+
const output = JSON.stringify(polygons);
|
|
61
|
+
console.log(`Writing polygons to ${outputFileName}`);
|
|
62
|
+
writeFileSync(outputFileName, output);
|
|
63
|
+
}
|
|
64
|
+
await disconnectKnex();
|
|
76
65
|
}
|
|
77
66
|
main();
|
|
78
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
67
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFyc2Utb3JkaW5hbmNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2Jpbi9wYXJzZS1vcmRpbmFuY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxhQUFhLEVBQUUsTUFBTSxJQUFJLENBQUM7QUFDakQsT0FBTyxFQUVMLDZCQUE2QixHQUM5QixNQUFNLHdCQUF3QixDQUFDO0FBRWhDLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQ3ZFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFFMUMsS0FBSyxVQUFVLElBQUk7SUFDakIsMENBQTBDO0lBQzFDLElBQUksT0FBTyxDQUFDLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO1FBQzNCLE9BQU8sQ0FBQyxLQUFLLENBQUMsNEJBQTRCLENBQUMsQ0FBQztRQUM1QyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0tBQ2pCO0lBRUQsTUFBTSxRQUFRLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNqQyxNQUFNLFdBQVcsR0FBRyxZQUFZLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDM0MsTUFBTSxLQUFLLEdBQUcsV0FBVyxDQUFDLFFBQVEsRUFBRSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUVqRCxJQUFJLFVBQVUsR0FBRyxDQUFDLENBQUM7SUFDbkIsTUFBTSxVQUFVLEdBQWEsRUFBRSxDQUFDO0lBQ2hDLElBQUksWUFBWSxHQUFHLENBQUMsQ0FBQztJQUVyQixNQUFNLFlBQVksR0FBRyxDQUFDLEVBQ3BCLFVBQVUsRUFDVixJQUFJLEVBQ0osTUFBTSxHQUNjLEVBQVEsRUFBRTtRQUM5QixNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO1FBQ3hELE9BQU8sQ0FBQyxLQUFLLENBQUMscUNBQXFDLFVBQVUsS0FBSyxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBQzFFLFVBQVUsRUFBRSxDQUFDO1FBQ2IsVUFBVSxDQUFDLElBQUksQ0FBQyxRQUFRLFVBQVUsS0FBSyxJQUFJLEVBQUUsQ0FBQyxDQUFDO0lBQ2pELENBQUMsQ0FBQztJQUVGLE1BQU0sY0FBYyxHQUFHLENBQUMsRUFDdEIsVUFBVSxFQUNWLE1BQU0sRUFBRSxRQUFRLEdBQ0ksRUFBUSxFQUFFO1FBQzlCLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRTtZQUN6QixPQUFPLENBQUMsS0FBSyxDQUFDLFFBQVEsVUFBVSxLQUFLLEtBQUssQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDO1FBQ3hELENBQUMsQ0FBQyxDQUFDO1FBQ0gsWUFBWSxFQUFFLENBQUM7SUFDakIsQ0FBQyxDQUFDO0lBRUYsT0FBTyxDQUFDLElBQUksQ0FBQywrQkFBK0IsQ0FBQyxDQUFDO0lBRTlDLDJGQUEyRjtJQUUzRixNQUFNLGNBQWMsR0FBRyxNQUFNLDZCQUE2QixDQUFDO1FBQ3pELEtBQUs7UUFDTCxZQUFZLEVBQUU7UUFDWixxQ0FBcUM7U0FDdEM7UUFDRCxPQUFPLEVBQUUsWUFBWTtRQUNyQixTQUFTLEVBQUUsY0FBYztRQUN6Qiw0QkFBNEIsRUFBRSxJQUFJO0tBQ25DLENBQUMsQ0FBQztJQUNILE9BQU8sQ0FBQyxPQUFPLENBQUMsK0JBQStCLENBQUMsQ0FBQztJQUVqRCxPQUFPLENBQUMsR0FBRyxDQUNULFVBQVUsS0FBSyxDQUFDLE1BQU0sV0FBVyxVQUFVLFlBQVksWUFBWSxZQUFZLENBQ2hGLENBQUM7SUFDRix3QkFBd0I7SUFDeEIsNEJBQTRCO0lBQzVCLHFEQUFxRDtJQUNyRCxJQUFJO0lBRUosSUFBSSxPQUFPLENBQUMsSUFBSSxDQUFDLE1BQU0sSUFBSSxDQUFDLEVBQUU7UUFDNUIsTUFBTSxjQUFjLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN2QyxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBQzlDLE9BQU8sQ0FBQyxHQUFHLENBQUMscUJBQXFCLGNBQWMsRUFBRSxDQUFDLENBQUM7UUFDbkQsYUFBYSxDQUFDLGNBQWMsRUFBRSxNQUFNLENBQUMsQ0FBQztLQUN2QztTQUFNO1FBQ0wsT0FBTyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUM7S0FDN0M7SUFFRCxJQUFJLE9BQU8sQ0FBQyxJQUFJLENBQUMsTUFBTSxJQUFJLENBQUMsRUFBRTtRQUM1QixPQUFPLENBQUMsSUFBSSxDQUFDLHdCQUF3QixDQUFDLENBQUM7UUFDdkMsTUFBTSxRQUFRLEdBQUcsTUFBTSx3QkFBd0IsQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUNoRSxPQUFPLENBQUMsT0FBTyxDQUFDLHdCQUF3QixDQUFDLENBQUM7UUFFMUMsTUFBTSxjQUFjLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN2QyxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ3hDLE9BQU8sQ0FBQyxHQUFHLENBQUMsdUJBQXVCLGNBQWMsRUFBRSxDQUFDLENBQUM7UUFDckQsYUFBYSxDQUFDLGNBQWMsRUFBRSxNQUFNLENBQUMsQ0FBQztLQUN2QztJQUNELE1BQU0sY0FBYyxFQUFFLENBQUM7QUFDekIsQ0FBQztBQUVELElBQUksRUFBRSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgcmVhZEZpbGVTeW5jLCB3cml0ZUZpbGVTeW5jIH0gZnJvbSBcImZzXCI7XHJcbmltcG9ydCB7XHJcbiAgZ2V0TmV3TXVuaWNpcGFsaXR5QnlGb3VuZGVySWQsXHJcbiAgcGFyc2VPcmRpbmFuY2VUb0FkZHJlc3NQb2ludHMsXHJcbn0gZnJvbSBcIi4uL3N0cmVldC1tYXJrZG93bi9zbWRcIjtcclxuaW1wb3J0IHsgRXJyb3JDYWxsYmFja1BhcmFtcyB9IGZyb20gXCIuLi9zdHJlZXQtbWFya2Rvd24vdHlwZXNcIjtcclxuaW1wb3J0IHsgbXVuaWNpcGFsaXRpZXNUb1BvbHlnb25zIH0gZnJvbSBcIi4uL3N0cmVldC1tYXJrZG93bi9wb2x5Z29uc1wiO1xyXG5pbXBvcnQgeyBkaXNjb25uZWN0S25leCB9IGZyb20gXCIuLi9kYi9kYlwiO1xyXG5cclxuYXN5bmMgZnVuY3Rpb24gbWFpbigpIHtcclxuICAvLyB0YWtlIGZpcnN0IG5vZGUgYXJndW1lbnQgYXMgYSBmaWxlIG5hbWVcclxuICBpZiAocHJvY2Vzcy5hcmd2Lmxlbmd0aCA8IDMpIHtcclxuICAgIGNvbnNvbGUuZXJyb3IoXCJNaXNzaW5nIGZpbGUgbmFtZSBhcmd1bWVudFwiKTtcclxuICAgIHByb2Nlc3MuZXhpdCgxKTtcclxuICB9XHJcblxyXG4gIGNvbnN0IGZpbGVOYW1lID0gcHJvY2Vzcy5hcmd2WzJdO1xyXG4gIGNvbnN0IGZpbGVDb250ZW50ID0gcmVhZEZpbGVTeW5jKGZpbGVOYW1lKTtcclxuICBjb25zdCBsaW5lcyA9IGZpbGVDb250ZW50LnRvU3RyaW5nKCkuc3BsaXQoXCJcXG5cIik7XHJcblxyXG4gIGxldCBlcnJvckNvdW50ID0gMDtcclxuICBjb25zdCBlcnJvckxpbmVzOiBzdHJpbmdbXSA9IFtdO1xyXG4gIGxldCB3YXJuaW5nQ291bnQgPSAwO1xyXG5cclxuICBjb25zdCByZXBvcnRFcnJvcnMgPSAoe1xyXG4gICAgbGluZU51bWJlcixcclxuICAgIGxpbmUsXHJcbiAgICBlcnJvcnMsXHJcbiAgfTogRXJyb3JDYWxsYmFja1BhcmFtcyk6IHZvaWQgPT4ge1xyXG4gICAgZXJyb3JzLmZvckVhY2goKGVycm9yKSA9PiBjb25zb2xlLmVycm9yKGVycm9yLm1lc3NhZ2UpKTtcclxuICAgIGNvbnNvbGUuZXJyb3IoYEludmFsaWQgc3RyZWV0IGRlZmluaXRpb24gb24gbGluZSAke2xpbmVOdW1iZXJ9OiAke2xpbmV9YCk7XHJcbiAgICBlcnJvckNvdW50Kys7XHJcbiAgICBlcnJvckxpbmVzLnB1c2goYGxpbmUgJHtsaW5lTnVtYmVyfTogJHtsaW5lfWApO1xyXG4gIH07XHJcblxyXG4gIGNvbnN0IHJlcG9ydFdhcm5pbmdzID0gKHtcclxuICAgIGxpbmVOdW1iZXIsXHJcbiAgICBlcnJvcnM6IHdhcm5pbmdzLFxyXG4gIH06IEVycm9yQ2FsbGJhY2tQYXJhbXMpOiB2b2lkID0+IHtcclxuICAgIHdhcm5pbmdzLmZvckVhY2goKGVycm9yKSA9PiB7XHJcbiAgICAgIGNvbnNvbGUuZXJyb3IoYExpbmUgJHtsaW5lTnVtYmVyfTogJHtlcnJvci5tZXNzYWdlfWApO1xyXG4gICAgfSk7XHJcbiAgICB3YXJuaW5nQ291bnQrKztcclxuICB9O1xyXG5cclxuICBjb25zb2xlLnRpbWUoXCJwYXJzZU9yZGluYW5jZVRvQWRkcmVzc1BvaW50c1wiKTtcclxuXHJcbiAgLy8gY29uc3QgeyBtdW5pY2lwYWxpdHkgfSA9IGF3YWl0IGdldE5ld011bmljaXBhbGl0eUJ5Rm91bmRlcklkKDIwMTYpOyAvLyBvc3RyYXZhIHNvbWV0aGluZ1xyXG5cclxuICBjb25zdCBtdW5pY2lwYWxpdGllcyA9IGF3YWl0IHBhcnNlT3JkaW5hbmNlVG9BZGRyZXNzUG9pbnRzKHtcclxuICAgIGxpbmVzLFxyXG4gICAgaW5pdGlhbFN0YXRlOiB7XHJcbiAgICAgIC8vIGN1cnJlbnRNdW5pY2lwYWxpdHk6IG11bmljaXBhbGl0eSxcclxuICAgIH0sXHJcbiAgICBvbkVycm9yOiByZXBvcnRFcnJvcnMsXHJcbiAgICBvbldhcm5pbmc6IHJlcG9ydFdhcm5pbmdzLFxyXG4gICAgaW5jbHVkZVVubWFwcGVkQWRkcmVzc1BvaW50czogdHJ1ZSxcclxuICB9KTtcclxuICBjb25zb2xlLnRpbWVFbmQoXCJwYXJzZU9yZGluYW5jZVRvQWRkcmVzc1BvaW50c1wiKTtcclxuXHJcbiAgY29uc29sZS5sb2coXHJcbiAgICBgUGFyc2VkICR7bGluZXMubGVuZ3RofSBsaW5lcywgJHtlcnJvckNvdW50fSBlcnJvcnMsICR7d2FybmluZ0NvdW50fSB3YXJuaW5ncy5gXHJcbiAgKTtcclxuICAvLyBpZiAoZXJyb3JDb3VudCA+IDApIHtcclxuICAvLyAgIGNvbnNvbGUubG9nKFwiRXJyb3JzOlwiKTtcclxuICAvLyAgIGVycm9yTGluZXMuZm9yRWFjaCgobGluZSkgPT4gY29uc29sZS5sb2cobGluZSkpO1xyXG4gIC8vIH1cclxuXHJcbiAgaWYgKHByb2Nlc3MuYXJndi5sZW5ndGggPj0gNCkge1xyXG4gICAgY29uc3Qgb3V0cHV0RmlsZU5hbWUgPSBwcm9jZXNzLmFyZ3ZbM107XHJcbiAgICBjb25zdCBvdXRwdXQgPSBKU09OLnN0cmluZ2lmeShtdW5pY2lwYWxpdGllcyk7XHJcbiAgICBjb25zb2xlLmxvZyhgV3JpdGluZyBvdXRwdXQgdG8gJHtvdXRwdXRGaWxlTmFtZX1gKTtcclxuICAgIHdyaXRlRmlsZVN5bmMob3V0cHV0RmlsZU5hbWUsIG91dHB1dCk7XHJcbiAgfSBlbHNlIHtcclxuICAgIGNvbnNvbGUubG9nKEpTT04uc3RyaW5naWZ5KG11bmljaXBhbGl0aWVzKSk7XHJcbiAgfVxyXG5cclxuICBpZiAocHJvY2Vzcy5hcmd2Lmxlbmd0aCA+PSA1KSB7XHJcbiAgICBjb25zb2xlLnRpbWUoXCJtdW5pY2lwYWxpdHlUb1BvbHlnb25zXCIpO1xyXG4gICAgY29uc3QgcG9seWdvbnMgPSBhd2FpdCBtdW5pY2lwYWxpdGllc1RvUG9seWdvbnMobXVuaWNpcGFsaXRpZXMpO1xyXG4gICAgY29uc29sZS50aW1lRW5kKFwibXVuaWNpcGFsaXR5VG9Qb2x5Z29uc1wiKTtcclxuXHJcbiAgICBjb25zdCBvdXRwdXRGaWxlTmFtZSA9IHByb2Nlc3MuYXJndls0XTtcclxuICAgIGNvbnN0IG91dHB1dCA9IEpTT04uc3RyaW5naWZ5KHBvbHlnb25zKTtcclxuICAgIGNvbnNvbGUubG9nKGBXcml0aW5nIHBvbHlnb25zIHRvICR7b3V0cHV0RmlsZU5hbWV9YCk7XHJcbiAgICB3cml0ZUZpbGVTeW5jKG91dHB1dEZpbGVOYW1lLCBvdXRwdXQpO1xyXG4gIH1cclxuICBhd2FpdCBkaXNjb25uZWN0S25leCgpO1xyXG59XHJcblxyXG5tYWluKCk7XHJcbiJdfQ==
|
package/dist/bin/polygons.js
CHANGED
|
@@ -1,38 +1,27 @@
|
|
|
1
|
-
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
2
|
-
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
3
|
-
return new (P || (P = Promise))(function (resolve, reject) {
|
|
4
|
-
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
5
|
-
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
6
|
-
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
7
|
-
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
8
|
-
});
|
|
9
|
-
};
|
|
10
1
|
import { readFileSync, writeFileSync } from "fs";
|
|
11
2
|
import { municipalitiesToPolygons } from "../street-markdown/polygons";
|
|
12
3
|
import { disconnectKnex } from "../db/db";
|
|
13
|
-
function main() {
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
}
|
|
35
|
-
});
|
|
4
|
+
async function main() {
|
|
5
|
+
// take first node argument as a file name
|
|
6
|
+
if (process.argv.length < 3) {
|
|
7
|
+
console.error("Missing file name argument");
|
|
8
|
+
process.exit(1);
|
|
9
|
+
}
|
|
10
|
+
const fileName = process.argv[2];
|
|
11
|
+
const fileContent = readFileSync(fileName);
|
|
12
|
+
const json = JSON.parse(fileContent.toString());
|
|
13
|
+
const municipalityPolygons = await municipalitiesToPolygons(json);
|
|
14
|
+
console.log(`Processed ${json.length} municipalities`);
|
|
15
|
+
await disconnectKnex();
|
|
16
|
+
const output = JSON.stringify(municipalityPolygons);
|
|
17
|
+
if (process.argv.length >= 4) {
|
|
18
|
+
const outputFileName = process.argv[3];
|
|
19
|
+
console.log(`Writing polygons to ${outputFileName}`);
|
|
20
|
+
writeFileSync(outputFileName, output);
|
|
21
|
+
}
|
|
22
|
+
else {
|
|
23
|
+
console.log(JSON.stringify(output));
|
|
24
|
+
}
|
|
36
25
|
}
|
|
37
26
|
main();
|
|
38
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
27
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG9seWdvbnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvYmluL3BvbHlnb25zLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxZQUFZLEVBQUUsYUFBYSxFQUFFLE1BQU0sSUFBSSxDQUFDO0FBQ2pELE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQ3ZFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFHMUMsS0FBSyxVQUFVLElBQUk7SUFDakIsMENBQTBDO0lBQzFDLElBQUksT0FBTyxDQUFDLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO1FBQzNCLE9BQU8sQ0FBQyxLQUFLLENBQUMsNEJBQTRCLENBQUMsQ0FBQztRQUM1QyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0tBQ2pCO0lBRUQsTUFBTSxRQUFRLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNqQyxNQUFNLFdBQVcsR0FBRyxZQUFZLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDM0MsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsUUFBUSxFQUFFLENBQW1CLENBQUM7SUFFbEUsTUFBTSxvQkFBb0IsR0FBRyxNQUFNLHdCQUF3QixDQUFDLElBQUksQ0FBQyxDQUFDO0lBRWxFLE9BQU8sQ0FBQyxHQUFHLENBQUMsYUFBYSxJQUFJLENBQUMsTUFBTSxpQkFBaUIsQ0FBQyxDQUFDO0lBQ3ZELE1BQU0sY0FBYyxFQUFFLENBQUM7SUFFdkIsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO0lBQ3BELElBQUksT0FBTyxDQUFDLElBQUksQ0FBQyxNQUFNLElBQUksQ0FBQyxFQUFFO1FBQzVCLE1BQU0sY0FBYyxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDdkMsT0FBTyxDQUFDLEdBQUcsQ0FBQyx1QkFBdUIsY0FBYyxFQUFFLENBQUMsQ0FBQztRQUNyRCxhQUFhLENBQUMsY0FBYyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0tBQ3ZDO1NBQU07UUFDTCxPQUFPLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztLQUNyQztBQUNILENBQUM7QUFFRCxJQUFJLEVBQUUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHJlYWRGaWxlU3luYywgd3JpdGVGaWxlU3luYyB9IGZyb20gXCJmc1wiO1xyXG5pbXBvcnQgeyBtdW5pY2lwYWxpdGllc1RvUG9seWdvbnMgfSBmcm9tIFwiLi4vc3RyZWV0LW1hcmtkb3duL3BvbHlnb25zXCI7XHJcbmltcG9ydCB7IGRpc2Nvbm5lY3RLbmV4IH0gZnJvbSBcIi4uL2RiL2RiXCI7XHJcbmltcG9ydCB7IE11bmljaXBhbGl0eSB9IGZyb20gXCIuLi9zdHJlZXQtbWFya2Rvd24vdHlwZXNcIjtcclxuXHJcbmFzeW5jIGZ1bmN0aW9uIG1haW4oKSB7XHJcbiAgLy8gdGFrZSBmaXJzdCBub2RlIGFyZ3VtZW50IGFzIGEgZmlsZSBuYW1lXHJcbiAgaWYgKHByb2Nlc3MuYXJndi5sZW5ndGggPCAzKSB7XHJcbiAgICBjb25zb2xlLmVycm9yKFwiTWlzc2luZyBmaWxlIG5hbWUgYXJndW1lbnRcIik7XHJcbiAgICBwcm9jZXNzLmV4aXQoMSk7XHJcbiAgfVxyXG5cclxuICBjb25zdCBmaWxlTmFtZSA9IHByb2Nlc3MuYXJndlsyXTtcclxuICBjb25zdCBmaWxlQ29udGVudCA9IHJlYWRGaWxlU3luYyhmaWxlTmFtZSk7XHJcbiAgY29uc3QganNvbiA9IEpTT04ucGFyc2UoZmlsZUNvbnRlbnQudG9TdHJpbmcoKSkgYXMgTXVuaWNpcGFsaXR5W107XHJcblxyXG4gIGNvbnN0IG11bmljaXBhbGl0eVBvbHlnb25zID0gYXdhaXQgbXVuaWNpcGFsaXRpZXNUb1BvbHlnb25zKGpzb24pO1xyXG5cclxuICBjb25zb2xlLmxvZyhgUHJvY2Vzc2VkICR7anNvbi5sZW5ndGh9IG11bmljaXBhbGl0aWVzYCk7XHJcbiAgYXdhaXQgZGlzY29ubmVjdEtuZXgoKTtcclxuXHJcbiAgY29uc3Qgb3V0cHV0ID0gSlNPTi5zdHJpbmdpZnkobXVuaWNpcGFsaXR5UG9seWdvbnMpO1xyXG4gIGlmIChwcm9jZXNzLmFyZ3YubGVuZ3RoID49IDQpIHtcclxuICAgIGNvbnN0IG91dHB1dEZpbGVOYW1lID0gcHJvY2Vzcy5hcmd2WzNdO1xyXG4gICAgY29uc29sZS5sb2coYFdyaXRpbmcgcG9seWdvbnMgdG8gJHtvdXRwdXRGaWxlTmFtZX1gKTtcclxuICAgIHdyaXRlRmlsZVN5bmMob3V0cHV0RmlsZU5hbWUsIG91dHB1dCk7XHJcbiAgfSBlbHNlIHtcclxuICAgIGNvbnNvbGUubG9nKEpTT04uc3RyaW5naWZ5KG91dHB1dCkpO1xyXG4gIH1cclxufVxyXG5cclxubWFpbigpO1xyXG4iXX0=
|