@cogeotiff/cli 7.2.1 → 8.0.2

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.
Files changed (74) hide show
  1. package/CHANGELOG.md +10 -485
  2. package/README.md +26 -34
  3. package/bin/cogeotiff.js +1 -2
  4. package/build/action.util.d.ts +2 -8
  5. package/build/action.util.js +7 -18
  6. package/build/action.util.js.map +1 -0
  7. package/build/bin.d.ts +1 -0
  8. package/build/bin.js +13 -0
  9. package/build/bin.js.map +1 -0
  10. package/build/cli.table.d.ts +0 -1
  11. package/build/cli.table.js +9 -4
  12. package/build/cli.table.js.map +1 -0
  13. package/build/commands/dump.d.ts +27 -0
  14. package/build/commands/dump.js +132 -0
  15. package/build/commands/dump.js.map +1 -0
  16. package/build/commands/info.d.ts +19 -0
  17. package/build/commands/info.js +185 -0
  18. package/build/commands/info.js.map +1 -0
  19. package/build/common.d.ts +16 -0
  20. package/build/common.js +19 -0
  21. package/build/common.js.map +1 -0
  22. package/build/fs.d.ts +6 -0
  23. package/build/fs.js +17 -0
  24. package/build/fs.js.map +1 -0
  25. package/build/index.d.ts +57 -2
  26. package/build/index.js +11 -8
  27. package/build/index.js.map +1 -0
  28. package/build/log.d.ts +11 -0
  29. package/build/log.js +37 -0
  30. package/build/log.js.map +1 -0
  31. package/build/util.bytes.d.ts +0 -1
  32. package/build/util.bytes.js +1 -1
  33. package/build/util.bytes.js.map +1 -0
  34. package/build/util.tile.d.ts +2 -3
  35. package/build/util.tile.js +20 -18
  36. package/build/util.tile.js.map +1 -0
  37. package/package.json +37 -37
  38. package/src/action.util.ts +22 -37
  39. package/src/bin.ts +14 -0
  40. package/src/cli.table.ts +27 -27
  41. package/src/commands/dump.ts +156 -0
  42. package/src/commands/info.ts +199 -0
  43. package/src/common.ts +20 -0
  44. package/src/fs.ts +18 -0
  45. package/src/index.ts +10 -7
  46. package/src/log.ts +43 -0
  47. package/src/util.bytes.ts +6 -6
  48. package/src/util.tile.ts +33 -33
  49. package/tsconfig.json +8 -8
  50. package/build/action.dump.tile.d.ts +0 -24
  51. package/build/action.dump.tile.d.ts.map +0 -1
  52. package/build/action.dump.tile.js +0 -194
  53. package/build/action.info.d.ts +0 -10
  54. package/build/action.info.d.ts.map +0 -1
  55. package/build/action.info.js +0 -183
  56. package/build/action.tile.d.ts +0 -9
  57. package/build/action.tile.d.ts.map +0 -1
  58. package/build/action.tile.js +0 -64
  59. package/build/action.util.d.ts.map +0 -1
  60. package/build/cli.cog.info.d.ts +0 -9
  61. package/build/cli.cog.info.d.ts.map +0 -1
  62. package/build/cli.cog.info.js +0 -42
  63. package/build/cli.log.d.ts +0 -3
  64. package/build/cli.log.d.ts.map +0 -1
  65. package/build/cli.log.js +0 -4
  66. package/build/cli.table.d.ts.map +0 -1
  67. package/build/index.d.ts.map +0 -1
  68. package/build/util.bytes.d.ts.map +0 -1
  69. package/build/util.tile.d.ts.map +0 -1
  70. package/src/action.dump.tile.ts +0 -240
  71. package/src/action.info.ts +0 -205
  72. package/src/action.tile.ts +0 -76
  73. package/src/cli.cog.info.ts +0 -45
  74. package/src/cli.log.ts +0 -4
@@ -1,194 +0,0 @@
1
- import { TiffVersion } from '@cogeotiff/core';
2
- import { CommandLineAction } from '@rushstack/ts-command-line';
3
- import c from 'ansi-colors';
4
- import { promises as fs } from 'fs';
5
- import * as path from 'path';
6
- import { ActionUtil } from './action.util.js';
7
- import { logger as CliLogger } from './cli.log.js';
8
- import { toByteSizeString } from './util.bytes.js';
9
- import { getTileName, writeTile } from './util.tile.js';
10
- import PLimit from 'p-limit';
11
- const Rad2Deg = 180 / Math.PI;
12
- const A = 6378137.0; // 900913 properties.
13
- function toLatLng(x, y) {
14
- return [(x * Rad2Deg) / A, (Math.PI * 0.5 - 2.0 * Math.atan(Math.exp(-y / A))) * Rad2Deg];
15
- }
16
- const TileQueue = PLimit(25);
17
- function makePolygon(xMin, yMin, xMax, yMax) {
18
- const [lngMin, latMin] = toLatLng(xMin, yMin);
19
- const [lngMax, latMax] = toLatLng(xMax, yMax);
20
- return {
21
- type: 'Feature',
22
- properties: {},
23
- geometry: {
24
- type: 'Polygon',
25
- coordinates: [
26
- [
27
- [lngMin, latMin],
28
- [lngMin, latMax],
29
- [lngMax, latMax],
30
- [lngMax, latMin],
31
- [lngMin, latMin],
32
- ],
33
- ],
34
- },
35
- };
36
- }
37
- export class ActionDumpTile extends CommandLineAction {
38
- constructor() {
39
- super({
40
- actionName: 'dump',
41
- summary: 'Dump tiles from a COG',
42
- documentation: 'Stuff',
43
- });
44
- this.file = null;
45
- this.imageIndex = null;
46
- this.output = null;
47
- this.outputCount = 0;
48
- this.logger = CliLogger.child({ action: 'tile' });
49
- }
50
- // TODO this only works for WSG84
51
- async dumpBounds(tif, output, index) {
52
- this.logger.info({ index }, 'CreateTileBounds');
53
- const img = tif.getImage(index);
54
- if (!img.isTiled() || !img.isGeoLocated)
55
- return;
56
- const features = [];
57
- const featureCollection = {
58
- type: 'FeatureCollection',
59
- features,
60
- };
61
- const tileCount = img.tileCount;
62
- const tileInfo = img.tileSize;
63
- const tileSize = img.size;
64
- const firstImage = tif.images[0];
65
- const firstTileSize = firstImage.size;
66
- const origin = firstImage.origin;
67
- const resolution = firstImage.resolution;
68
- const xScale = (resolution[0] * firstTileSize.width) / tileSize.width;
69
- const yScale = (resolution[1] * firstTileSize.height) / tileSize.height;
70
- for (let y = 0; y < tileCount.y; y++) {
71
- const yMax = origin[1] + y * tileInfo.height * yScale;
72
- const yMin = yMax + tileInfo.height * yScale;
73
- for (let x = 0; x < tileCount.x; x++) {
74
- const xMin = origin[0] + x * tileInfo.width * xScale;
75
- const xMax = xMin + tileInfo.width * xScale;
76
- features.push(makePolygon(xMin, yMin, xMax, yMax));
77
- }
78
- }
79
- await fs.writeFile(path.join(output, `i${index}.bounds.geojson`), JSON.stringify(featureCollection, null, 2));
80
- }
81
- async dumpIndex(tif, output, index) {
82
- this.logger.info({ index }, 'CreateIndexHtml');
83
- const img = tif.getImage(index);
84
- if (!img.isTiled()) {
85
- return;
86
- }
87
- const { tileCount, tileSize } = img;
88
- const styles = `<style>.c { min-width: ${tileSize.width}px; min-height: ${tileSize.height}px }</style>`;
89
- const html = ['<html>', styles];
90
- for (let y = 0; y < tileCount.y; y++) {
91
- html.push('\t<div style="display:flex;">');
92
- for (let x = 0; x < tileCount.x; x++) {
93
- const tile = await tif.getTile(x, y, index);
94
- if (tile == null) {
95
- html.push(`\t\t<div class="c"></div>`);
96
- continue;
97
- }
98
- html.push(`\t\t<img class="c" src="./${getTileName(tile.mimeType, index, x, y)}" >`);
99
- }
100
- html.push('\t</div>');
101
- }
102
- html.push('</html>');
103
- await fs.writeFile(path.join(output, 'index.html'), html.join('\n'));
104
- }
105
- async dumpTiles(tif, output, index) {
106
- const promises = [];
107
- const img = tif.getImage(index);
108
- if (!img.isTiled()) {
109
- return;
110
- }
111
- this.logger.info({ ...img.tileSize, ...img.tileCount }, 'TileInfo');
112
- const tileCount = img.tileCount;
113
- // Load all offsets in
114
- await img.tileOffset.load();
115
- for (let x = 0; x < tileCount.x; x++) {
116
- for (let y = 0; y < tileCount.y; y++) {
117
- const promise = TileQueue(() => writeTile(tif, x, y, index, output, this.logger));
118
- promises.push(promise);
119
- this.outputCount++;
120
- }
121
- }
122
- await Promise.all(promises);
123
- }
124
- async onExecute() {
125
- if (this.imageIndex == null ||
126
- this.imageIndex.value == null ||
127
- this.output == null ||
128
- this.output.value == null) {
129
- return;
130
- }
131
- this.outputCount = 0;
132
- const { tif } = await ActionUtil.getCogSource(this.file);
133
- const index = this.imageIndex.value;
134
- if (index == null || index > tif.images.length - 1 || index < -1) {
135
- this.renderHelpText();
136
- throw Error(`Invalid index level "${index}" must be between 0 - ${tif.images.length - 1}`);
137
- }
138
- const img = tif.getImage(index);
139
- if (!img.isTiled()) {
140
- throw Error('Tif file is not tiled.');
141
- }
142
- const output = path.join(this.output.value, `i${index}`);
143
- await fs.mkdir(output, { recursive: true });
144
- await this.dumpTiles(tif, output, index);
145
- await this.dumpIndex(tif, output, index);
146
- await this.dumpBounds(tif, this.output.value, index);
147
- const source = tif.source;
148
- const chunkIds = [...source.chunks.values()];
149
- const result = [
150
- {
151
- keys: [
152
- { key: 'Tiff type', value: `${TiffVersion[tif.version]} (v${String(tif.version)})` },
153
- { key: 'Chunk size', value: toByteSizeString(tif.source.chunkSize) },
154
- {
155
- key: 'Bytes read',
156
- value: `${toByteSizeString(chunkIds.length * tif.source.chunkSize)} ` +
157
- `(${chunkIds.length} Chunk${chunkIds.length === 1 ? '' : 's'})`,
158
- },
159
- ],
160
- },
161
- {
162
- title: 'Output',
163
- keys: [{ key: 'Images', value: this.outputCount }],
164
- },
165
- ];
166
- const msg = ActionUtil.formatResult(`${c.bold('COG File Info')} - ${c.bold(tif.source.uri)}`, result);
167
- console.log(msg.join('\n'));
168
- return Promise.resolve();
169
- }
170
- onDefineParameters() {
171
- this.file = this.defineStringParameter({
172
- argumentName: 'FILE',
173
- parameterLongName: '--file',
174
- parameterShortName: '-f',
175
- description: 'cog file to access',
176
- required: true,
177
- });
178
- this.imageIndex = this.defineIntegerParameter({
179
- argumentName: 'IMAGE',
180
- parameterShortName: '-i',
181
- parameterLongName: '--image',
182
- description: 'Image id to export (starting from 0)',
183
- required: true,
184
- });
185
- this.output = this.defineStringParameter({
186
- argumentName: 'OUTPUT',
187
- parameterShortName: '-o',
188
- parameterLongName: '--output',
189
- description: 'Where to store the output',
190
- required: true,
191
- });
192
- }
193
- }
194
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWN0aW9uLmR1bXAudGlsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9hY3Rpb24uZHVtcC50aWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBVyxXQUFXLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN2RCxPQUFPLEVBQUUsaUJBQWlCLEVBQTJELE1BQU0sNEJBQTRCLENBQUM7QUFDeEgsT0FBTyxDQUFDLE1BQU0sYUFBYSxDQUFDO0FBQzVCLE9BQU8sRUFBRSxRQUFRLElBQUksRUFBRSxFQUFFLE1BQU0sSUFBSSxDQUFDO0FBQ3BDLE9BQU8sS0FBSyxJQUFJLE1BQU0sTUFBTSxDQUFDO0FBQzdCLE9BQU8sRUFBRSxVQUFVLEVBQWdCLE1BQU0sa0JBQWtCLENBQUM7QUFDNUQsT0FBTyxFQUFFLE1BQU0sSUFBSSxTQUFTLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDbkQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDbkQsT0FBTyxFQUFFLFdBQVcsRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN4RCxPQUFPLE1BQU0sTUFBTSxTQUFTLENBQUM7QUFJN0IsTUFBTSxPQUFPLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUM7QUFDOUIsTUFBTSxDQUFDLEdBQUcsU0FBUyxDQUFDLENBQUMscUJBQXFCO0FBQzFDLFNBQVMsUUFBUSxDQUFDLENBQVMsRUFBRSxDQUFTO0lBQ2xDLE9BQU8sQ0FBQyxDQUFDLENBQUMsR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxPQUFPLENBQUMsQ0FBQztBQUM5RixDQUFDO0FBRUQsTUFBTSxTQUFTLEdBQUcsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBVzdCLFNBQVMsV0FBVyxDQUFDLElBQVksRUFBRSxJQUFZLEVBQUUsSUFBWSxFQUFFLElBQVk7SUFDdkUsTUFBTSxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsR0FBRyxRQUFRLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQzlDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsTUFBTSxDQUFDLEdBQUcsUUFBUSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztJQUU5QyxPQUFPO1FBQ0gsSUFBSSxFQUFFLFNBQVM7UUFDZixVQUFVLEVBQUUsRUFBRTtRQUNkLFFBQVEsRUFBRTtZQUNOLElBQUksRUFBRSxTQUFTO1lBQ2YsV0FBVyxFQUFFO2dCQUNUO29CQUNJLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQztvQkFDaEIsQ0FBQyxNQUFNLEVBQUUsTUFBTSxDQUFDO29CQUNoQixDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUM7b0JBQ2hCLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQztvQkFDaEIsQ0FBQyxNQUFNLEVBQUUsTUFBTSxDQUFDO2lCQUNuQjthQUNKO1NBQ0o7S0FDSixDQUFDO0FBQ04sQ0FBQztBQUVELE1BQU0sT0FBTyxjQUFlLFNBQVEsaUJBQWlCO0lBT2pEO1FBQ0ksS0FBSyxDQUFDO1lBQ0YsVUFBVSxFQUFFLE1BQU07WUFDbEIsT0FBTyxFQUFFLHVCQUF1QjtZQUNoQyxhQUFhLEVBQUUsT0FBTztTQUN6QixDQUFDLENBQUM7UUFYQyxTQUFJLEdBQXNDLElBQUksQ0FBQztRQUMvQyxlQUFVLEdBQXVDLElBQUksQ0FBQztRQUN0RCxXQUFNLEdBQXNDLElBQUksQ0FBQztRQUNqRCxnQkFBVyxHQUFHLENBQUMsQ0FBQztRQVNwQixJQUFJLENBQUMsTUFBTSxHQUFHLFNBQVMsQ0FBQyxLQUFLLENBQUMsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQztJQUN0RCxDQUFDO0lBRUQsaUNBQWlDO0lBQ2pDLEtBQUssQ0FBQyxVQUFVLENBQUMsR0FBWSxFQUFFLE1BQWMsRUFBRSxLQUFhO1FBQ3hELElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsS0FBSyxFQUFFLEVBQUUsa0JBQWtCLENBQUMsQ0FBQztRQUNoRCxNQUFNLEdBQUcsR0FBRyxHQUFHLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ2hDLElBQUksQ0FBQyxHQUFHLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsWUFBWTtZQUFFLE9BQU87UUFFaEQsTUFBTSxRQUFRLEdBQXFCLEVBQUUsQ0FBQztRQUN0QyxNQUFNLGlCQUFpQixHQUFHO1lBQ3RCLElBQUksRUFBRSxtQkFBbUI7WUFDekIsUUFBUTtTQUNYLENBQUM7UUFFRixNQUFNLFNBQVMsR0FBRyxHQUFHLENBQUMsU0FBUyxDQUFDO1FBQ2hDLE1BQU0sUUFBUSxHQUFHLEdBQUcsQ0FBQyxRQUFRLENBQUM7UUFDOUIsTUFBTSxRQUFRLEdBQUcsR0FBRyxDQUFDLElBQUksQ0FBQztRQUUxQixNQUFNLFVBQVUsR0FBRyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2pDLE1BQU0sYUFBYSxHQUFHLFVBQVUsQ0FBQyxJQUFJLENBQUM7UUFDdEMsTUFBTSxNQUFNLEdBQUcsVUFBVSxDQUFDLE1BQU0sQ0FBQztRQUNqQyxNQUFNLFVBQVUsR0FBRyxVQUFVLENBQUMsVUFBVSxDQUFDO1FBRXpDLE1BQU0sTUFBTSxHQUFHLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxHQUFHLGFBQWEsQ0FBQyxLQUFLLENBQUMsR0FBRyxRQUFRLENBQUMsS0FBSyxDQUFDO1FBQ3RFLE1BQU0sTUFBTSxHQUFHLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxHQUFHLGFBQWEsQ0FBQyxNQUFNLENBQUMsR0FBRyxRQUFRLENBQUMsTUFBTSxDQUFDO1FBRXhFLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxTQUFTLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFO1lBQ2xDLE1BQU0sSUFBSSxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsUUFBUSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUM7WUFDdEQsTUFBTSxJQUFJLEdBQUcsSUFBSSxHQUFHLFFBQVEsQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDO1lBQzdDLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxTQUFTLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFO2dCQUNsQyxNQUFNLElBQUksR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxLQUFLLEdBQUcsTUFBTSxDQUFDO2dCQUNyRCxNQUFNLElBQUksR0FBRyxJQUFJLEdBQUcsUUFBUSxDQUFDLEtBQUssR0FBRyxNQUFNLENBQUM7Z0JBQzVDLFFBQVEsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUM7YUFDdEQ7U0FDSjtRQUVELE1BQU0sRUFBRSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLEtBQUssaUJBQWlCLENBQUMsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLGlCQUFpQixFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2xILENBQUM7SUFFRCxLQUFLLENBQUMsU0FBUyxDQUFDLEdBQVksRUFBRSxNQUFjLEVBQUUsS0FBYTtRQUN2RCxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFLEtBQUssRUFBRSxFQUFFLGlCQUFpQixDQUFDLENBQUM7UUFDL0MsTUFBTSxHQUFHLEdBQUcsR0FBRyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNoQyxJQUFJLENBQUMsR0FBRyxDQUFDLE9BQU8sRUFBRSxFQUFFO1lBQ2hCLE9BQU87U0FDVjtRQUVELE1BQU0sRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLEdBQUcsR0FBRyxDQUFDO1FBRXBDLE1BQU0sTUFBTSxHQUFHLDBCQUEwQixRQUFRLENBQUMsS0FBSyxtQkFBbUIsUUFBUSxDQUFDLE1BQU0sY0FBYyxDQUFDO1FBRXhHLE1BQU0sSUFBSSxHQUFHLENBQUMsUUFBUSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBQ2hDLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxTQUFTLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFO1lBQ2xDLElBQUksQ0FBQyxJQUFJLENBQUMsK0JBQStCLENBQUMsQ0FBQztZQUMzQyxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsU0FBUyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRTtnQkFDbEMsTUFBTSxJQUFJLEdBQUcsTUFBTSxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUM7Z0JBQzVDLElBQUksSUFBSSxJQUFJLElBQUksRUFBRTtvQkFDZCxJQUFJLENBQUMsSUFBSSxDQUFDLDJCQUEyQixDQUFDLENBQUM7b0JBQ3ZDLFNBQVM7aUJBQ1o7Z0JBRUQsSUFBSSxDQUFDLElBQUksQ0FBQyw2QkFBNkIsV0FBVyxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUM7YUFDeEY7WUFFRCxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1NBQ3pCO1FBQ0QsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUNyQixNQUFNLEVBQUUsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsWUFBWSxDQUFDLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBQ3pFLENBQUM7SUFFRCxLQUFLLENBQUMsU0FBUyxDQUFDLEdBQVksRUFBRSxNQUFjLEVBQUUsS0FBYTtRQUN2RCxNQUFNLFFBQVEsR0FBb0IsRUFBRSxDQUFDO1FBQ3JDLE1BQU0sR0FBRyxHQUFHLEdBQUcsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDaEMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxPQUFPLEVBQUUsRUFBRTtZQUNoQixPQUFPO1NBQ1Y7UUFFRCxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLFFBQVEsRUFBRSxHQUFHLEdBQUcsQ0FBQyxTQUFTLEVBQUUsRUFBRSxVQUFVLENBQUMsQ0FBQztRQUNwRSxNQUFNLFNBQVMsR0FBRyxHQUFHLENBQUMsU0FBUyxDQUFDO1FBRWhDLHNCQUFzQjtRQUN0QixNQUFNLEdBQUcsQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUFFLENBQUM7UUFFNUIsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUU7WUFDbEMsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUU7Z0JBQ2xDLE1BQU0sT0FBTyxHQUFHLFNBQVMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztnQkFDbEYsUUFBUSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztnQkFDdkIsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO2FBQ3RCO1NBQ0o7UUFFRCxNQUFNLE9BQU8sQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDaEMsQ0FBQztJQUVELEtBQUssQ0FBQyxTQUFTO1FBQ1gsSUFDSSxJQUFJLENBQUMsVUFBVSxJQUFJLElBQUk7WUFDdkIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLElBQUksSUFBSTtZQUM3QixJQUFJLENBQUMsTUFBTSxJQUFJLElBQUk7WUFDbkIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLElBQUksSUFBSSxFQUMzQjtZQUNFLE9BQU87U0FDVjtRQUNELElBQUksQ0FBQyxXQUFXLEdBQUcsQ0FBQyxDQUFDO1FBRXJCLE1BQU0sRUFBRSxHQUFHLEVBQUUsR0FBRyxNQUFNLFVBQVUsQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3pELE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDO1FBQ3BDLElBQUksS0FBSyxJQUFJLElBQUksSUFBSSxLQUFLLEdBQUcsR0FBRyxDQUFDLE1BQU0sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxJQUFJLEtBQUssR0FBRyxDQUFDLENBQUMsRUFBRTtZQUM5RCxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7WUFDdEIsTUFBTSxLQUFLLENBQUMsd0JBQXdCLEtBQUsseUJBQXlCLEdBQUcsQ0FBQyxNQUFNLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUM7U0FDOUY7UUFFRCxNQUFNLEdBQUcsR0FBRyxHQUFHLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ2hDLElBQUksQ0FBQyxHQUFHLENBQUMsT0FBTyxFQUFFLEVBQUU7WUFDaEIsTUFBTSxLQUFLLENBQUMsd0JBQXdCLENBQUMsQ0FBQztTQUN6QztRQUVELE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsSUFBSSxLQUFLLEVBQUUsQ0FBQyxDQUFDO1FBQ3pELE1BQU0sRUFBRSxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztRQUU1QyxNQUFNLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFLE1BQU0sRUFBRSxLQUFLLENBQUMsQ0FBQztRQUN6QyxNQUFNLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFLE1BQU0sRUFBRSxLQUFLLENBQUMsQ0FBQztRQUN6QyxNQUFNLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBRXJELE1BQU0sTUFBTSxHQUFHLEdBQUcsQ0FBQyxNQUF5QixDQUFDO1FBQzdDLE1BQU0sUUFBUSxHQUFHLENBQUMsR0FBSSxNQUFNLENBQUMsTUFBZ0MsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDO1FBQ3hFLE1BQU0sTUFBTSxHQUFtQjtZQUMzQjtnQkFDSSxJQUFJLEVBQUU7b0JBQ0YsRUFBRSxHQUFHLEVBQUUsV0FBVyxFQUFFLEtBQUssRUFBRSxHQUFHLFdBQVcsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLE1BQU0sTUFBTSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsR0FBRyxFQUFFO29CQUNwRixFQUFFLEdBQUcsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFFLGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLEVBQUU7b0JBQ3BFO3dCQUNJLEdBQUcsRUFBRSxZQUFZO3dCQUNqQixLQUFLLEVBQ0QsR0FBRyxnQkFBZ0IsQ0FBQyxRQUFRLENBQUMsTUFBTSxHQUFHLEdBQUcsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLEdBQUc7NEJBQzlELElBQUksUUFBUSxDQUFDLE1BQU0sU0FBUyxRQUFRLENBQUMsTUFBTSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUc7cUJBQ3RFO2lCQUNKO2FBQ0o7WUFDRDtnQkFDSSxLQUFLLEVBQUUsUUFBUTtnQkFDZixJQUFJLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQzthQUNyRDtTQUNKLENBQUM7UUFDRixNQUFNLEdBQUcsR0FBRyxVQUFVLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxNQUFNLENBQUMsQ0FBQztRQUN0RyxPQUFPLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztRQUM1QixPQUFPLE9BQU8sQ0FBQyxPQUFPLEVBQUUsQ0FBQztJQUM3QixDQUFDO0lBRVMsa0JBQWtCO1FBQ3hCLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLHFCQUFxQixDQUFDO1lBQ25DLFlBQVksRUFBRSxNQUFNO1lBQ3BCLGlCQUFpQixFQUFFLFFBQVE7WUFDM0Isa0JBQWtCLEVBQUUsSUFBSTtZQUN4QixXQUFXLEVBQUUsb0JBQW9CO1lBQ2pDLFFBQVEsRUFBRSxJQUFJO1NBQ2pCLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLHNCQUFzQixDQUFDO1lBQzFDLFlBQVksRUFBRSxPQUFPO1lBQ3JCLGtCQUFrQixFQUFFLElBQUk7WUFDeEIsaUJBQWlCLEVBQUUsU0FBUztZQUM1QixXQUFXLEVBQUUsc0NBQXNDO1lBQ25ELFFBQVEsRUFBRSxJQUFJO1NBQ2pCLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLHFCQUFxQixDQUFDO1lBQ3JDLFlBQVksRUFBRSxRQUFRO1lBQ3RCLGtCQUFrQixFQUFFLElBQUk7WUFDeEIsaUJBQWlCLEVBQUUsVUFBVTtZQUM3QixXQUFXLEVBQUUsMkJBQTJCO1lBQ3hDLFFBQVEsRUFBRSxJQUFJO1NBQ2pCLENBQUMsQ0FBQztJQUNQLENBQUM7Q0FDSiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvZ1RpZmYsIFRpZmZWZXJzaW9uIH0gZnJvbSAnQGNvZ2VvdGlmZi9jb3JlJztcbmltcG9ydCB7IENvbW1hbmRMaW5lQWN0aW9uLCBDb21tYW5kTGluZUludGVnZXJQYXJhbWV0ZXIsIENvbW1hbmRMaW5lU3RyaW5nUGFyYW1ldGVyIH0gZnJvbSAnQHJ1c2hzdGFjay90cy1jb21tYW5kLWxpbmUnO1xuaW1wb3J0IGMgZnJvbSAnYW5zaS1jb2xvcnMnO1xuaW1wb3J0IHsgcHJvbWlzZXMgYXMgZnMgfSBmcm9tICdmcyc7XG5pbXBvcnQgKiBhcyBwYXRoIGZyb20gJ3BhdGgnO1xuaW1wb3J0IHsgQWN0aW9uVXRpbCwgQ2xpUmVzdWx0TWFwIH0gZnJvbSAnLi9hY3Rpb24udXRpbC5qcyc7XG5pbXBvcnQgeyBsb2dnZXIgYXMgQ2xpTG9nZ2VyIH0gZnJvbSAnLi9jbGkubG9nLmpzJztcbmltcG9ydCB7IHRvQnl0ZVNpemVTdHJpbmcgfSBmcm9tICcuL3V0aWwuYnl0ZXMuanMnO1xuaW1wb3J0IHsgZ2V0VGlsZU5hbWUsIHdyaXRlVGlsZSB9IGZyb20gJy4vdXRpbC50aWxlLmpzJztcbmltcG9ydCBQTGltaXQgZnJvbSAncC1saW1pdCc7XG5pbXBvcnQgeyBDaHVua1NvdXJjZUJhc2UgfSBmcm9tICdAY2h1bmtkL2NvcmUnO1xuaW1wb3J0IHBpbm8gZnJvbSAncGlubyc7XG5cbmNvbnN0IFJhZDJEZWcgPSAxODAgLyBNYXRoLlBJO1xuY29uc3QgQSA9IDYzNzgxMzcuMDsgLy8gOTAwOTEzIHByb3BlcnRpZXMuXG5mdW5jdGlvbiB0b0xhdExuZyh4OiBudW1iZXIsIHk6IG51bWJlcik6IFtudW1iZXIsIG51bWJlcl0ge1xuICAgIHJldHVybiBbKHggKiBSYWQyRGVnKSAvIEEsIChNYXRoLlBJICogMC41IC0gMi4wICogTWF0aC5hdGFuKE1hdGguZXhwKC15IC8gQSkpKSAqIFJhZDJEZWddO1xufVxuXG5jb25zdCBUaWxlUXVldWUgPSBQTGltaXQoMjUpO1xuXG5leHBvcnQgaW50ZXJmYWNlIEdlb0pzb25Qb2x5Z29uIHtcbiAgICB0eXBlOiAnRmVhdHVyZSc7XG4gICAgZ2VvbWV0cnk6IHtcbiAgICAgICAgdHlwZTogJ1BvbHlnb24nO1xuICAgICAgICBjb29yZGluYXRlczogW1tbbnVtYmVyLCBudW1iZXJdLCBbbnVtYmVyLCBudW1iZXJdLCBbbnVtYmVyLCBudW1iZXJdLCBbbnVtYmVyLCBudW1iZXJdLCBbbnVtYmVyLCBudW1iZXJdXV07XG4gICAgfTtcbiAgICBwcm9wZXJ0aWVzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbn1cblxuZnVuY3Rpb24gbWFrZVBvbHlnb24oeE1pbjogbnVtYmVyLCB5TWluOiBudW1iZXIsIHhNYXg6IG51bWJlciwgeU1heDogbnVtYmVyKTogR2VvSnNvblBvbHlnb24ge1xuICAgIGNvbnN0IFtsbmdNaW4sIGxhdE1pbl0gPSB0b0xhdExuZyh4TWluLCB5TWluKTtcbiAgICBjb25zdCBbbG5nTWF4LCBsYXRNYXhdID0gdG9MYXRMbmcoeE1heCwgeU1heCk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgICB0eXBlOiAnRmVhdHVyZScsXG4gICAgICAgIHByb3BlcnRpZXM6IHt9LFxuICAgICAgICBnZW9tZXRyeToge1xuICAgICAgICAgICAgdHlwZTogJ1BvbHlnb24nLFxuICAgICAgICAgICAgY29vcmRpbmF0ZXM6IFtcbiAgICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgICAgIFtsbmdNaW4sIGxhdE1pbl0sXG4gICAgICAgICAgICAgICAgICAgIFtsbmdNaW4sIGxhdE1heF0sXG4gICAgICAgICAgICAgICAgICAgIFtsbmdNYXgsIGxhdE1heF0sXG4gICAgICAgICAgICAgICAgICAgIFtsbmdNYXgsIGxhdE1pbl0sXG4gICAgICAgICAgICAgICAgICAgIFtsbmdNaW4sIGxhdE1pbl0sXG4gICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIF0sXG4gICAgICAgIH0sXG4gICAgfTtcbn1cblxuZXhwb3J0IGNsYXNzIEFjdGlvbkR1bXBUaWxlIGV4dGVuZHMgQ29tbWFuZExpbmVBY3Rpb24ge1xuICAgIHByaXZhdGUgZmlsZTogQ29tbWFuZExpbmVTdHJpbmdQYXJhbWV0ZXIgfCBudWxsID0gbnVsbDtcbiAgICBwcml2YXRlIGltYWdlSW5kZXg6IENvbW1hbmRMaW5lSW50ZWdlclBhcmFtZXRlciB8IG51bGwgPSBudWxsO1xuICAgIHByaXZhdGUgb3V0cHV0OiBDb21tYW5kTGluZVN0cmluZ1BhcmFtZXRlciB8IG51bGwgPSBudWxsO1xuICAgIHByaXZhdGUgb3V0cHV0Q291bnQgPSAwO1xuICAgIHByaXZhdGUgbG9nZ2VyOiBwaW5vLkxvZ2dlcjtcblxuICAgIHB1YmxpYyBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoe1xuICAgICAgICAgICAgYWN0aW9uTmFtZTogJ2R1bXAnLFxuICAgICAgICAgICAgc3VtbWFyeTogJ0R1bXAgdGlsZXMgZnJvbSBhIENPRycsXG4gICAgICAgICAgICBkb2N1bWVudGF0aW9uOiAnU3R1ZmYnLFxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5sb2dnZXIgPSBDbGlMb2dnZXIuY2hpbGQoeyBhY3Rpb246ICd0aWxlJyB9KTtcbiAgICB9XG5cbiAgICAvLyBUT0RPIHRoaXMgb25seSB3b3JrcyBmb3IgV1NHODRcbiAgICBhc3luYyBkdW1wQm91bmRzKHRpZjogQ29nVGlmZiwgb3V0cHV0OiBzdHJpbmcsIGluZGV4OiBudW1iZXIpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgdGhpcy5sb2dnZXIuaW5mbyh7IGluZGV4IH0sICdDcmVhdGVUaWxlQm91bmRzJyk7XG4gICAgICAgIGNvbnN0IGltZyA9IHRpZi5nZXRJbWFnZShpbmRleCk7XG4gICAgICAgIGlmICghaW1nLmlzVGlsZWQoKSB8fCAhaW1nLmlzR2VvTG9jYXRlZCkgcmV0dXJuO1xuXG4gICAgICAgIGNvbnN0IGZlYXR1cmVzOiBHZW9Kc29uUG9seWdvbltdID0gW107XG4gICAgICAgIGNvbnN0IGZlYXR1cmVDb2xsZWN0aW9uID0ge1xuICAgICAgICAgICAgdHlwZTogJ0ZlYXR1cmVDb2xsZWN0aW9uJyxcbiAgICAgICAgICAgIGZlYXR1cmVzLFxuICAgICAgICB9O1xuXG4gICAgICAgIGNvbnN0IHRpbGVDb3VudCA9IGltZy50aWxlQ291bnQ7XG4gICAgICAgIGNvbnN0IHRpbGVJbmZvID0gaW1nLnRpbGVTaXplO1xuICAgICAgICBjb25zdCB0aWxlU2l6ZSA9IGltZy5zaXplO1xuXG4gICAgICAgIGNvbnN0IGZpcnN0SW1hZ2UgPSB0aWYuaW1hZ2VzWzBdO1xuICAgICAgICBjb25zdCBmaXJzdFRpbGVTaXplID0gZmlyc3RJbWFnZS5zaXplO1xuICAgICAgICBjb25zdCBvcmlnaW4gPSBmaXJzdEltYWdlLm9yaWdpbjtcbiAgICAgICAgY29uc3QgcmVzb2x1dGlvbiA9IGZpcnN0SW1hZ2UucmVzb2x1dGlvbjtcblxuICAgICAgICBjb25zdCB4U2NhbGUgPSAocmVzb2x1dGlvblswXSAqIGZpcnN0VGlsZVNpemUud2lkdGgpIC8gdGlsZVNpemUud2lkdGg7XG4gICAgICAgIGNvbnN0IHlTY2FsZSA9IChyZXNvbHV0aW9uWzFdICogZmlyc3RUaWxlU2l6ZS5oZWlnaHQpIC8gdGlsZVNpemUuaGVpZ2h0O1xuXG4gICAgICAgIGZvciAobGV0IHkgPSAwOyB5IDwgdGlsZUNvdW50Lnk7IHkrKykge1xuICAgICAgICAgICAgY29uc3QgeU1heCA9IG9yaWdpblsxXSArIHkgKiB0aWxlSW5mby5oZWlnaHQgKiB5U2NhbGU7XG4gICAgICAgICAgICBjb25zdCB5TWluID0geU1heCArIHRpbGVJbmZvLmhlaWdodCAqIHlTY2FsZTtcbiAgICAgICAgICAgIGZvciAobGV0IHggPSAwOyB4IDwgdGlsZUNvdW50Lng7IHgrKykge1xuICAgICAgICAgICAgICAgIGNvbnN0IHhNaW4gPSBvcmlnaW5bMF0gKyB4ICogdGlsZUluZm8ud2lkdGggKiB4U2NhbGU7XG4gICAgICAgICAgICAgICAgY29uc3QgeE1heCA9IHhNaW4gKyB0aWxlSW5mby53aWR0aCAqIHhTY2FsZTtcbiAgICAgICAgICAgICAgICBmZWF0dXJlcy5wdXNoKG1ha2VQb2x5Z29uKHhNaW4sIHlNaW4sIHhNYXgsIHlNYXgpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGF3YWl0IGZzLndyaXRlRmlsZShwYXRoLmpvaW4ob3V0cHV0LCBgaSR7aW5kZXh9LmJvdW5kcy5nZW9qc29uYCksIEpTT04uc3RyaW5naWZ5KGZlYXR1cmVDb2xsZWN0aW9uLCBudWxsLCAyKSk7XG4gICAgfVxuXG4gICAgYXN5bmMgZHVtcEluZGV4KHRpZjogQ29nVGlmZiwgb3V0cHV0OiBzdHJpbmcsIGluZGV4OiBudW1iZXIpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgdGhpcy5sb2dnZXIuaW5mbyh7IGluZGV4IH0sICdDcmVhdGVJbmRleEh0bWwnKTtcbiAgICAgICAgY29uc3QgaW1nID0gdGlmLmdldEltYWdlKGluZGV4KTtcbiAgICAgICAgaWYgKCFpbWcuaXNUaWxlZCgpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB7IHRpbGVDb3VudCwgdGlsZVNpemUgfSA9IGltZztcblxuICAgICAgICBjb25zdCBzdHlsZXMgPSBgPHN0eWxlPi5jIHsgbWluLXdpZHRoOiAke3RpbGVTaXplLndpZHRofXB4OyBtaW4taGVpZ2h0OiAke3RpbGVTaXplLmhlaWdodH1weCB9PC9zdHlsZT5gO1xuXG4gICAgICAgIGNvbnN0IGh0bWwgPSBbJzxodG1sPicsIHN0eWxlc107XG4gICAgICAgIGZvciAobGV0IHkgPSAwOyB5IDwgdGlsZUNvdW50Lnk7IHkrKykge1xuICAgICAgICAgICAgaHRtbC5wdXNoKCdcXHQ8ZGl2IHN0eWxlPVwiZGlzcGxheTpmbGV4O1wiPicpO1xuICAgICAgICAgICAgZm9yIChsZXQgeCA9IDA7IHggPCB0aWxlQ291bnQueDsgeCsrKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgdGlsZSA9IGF3YWl0IHRpZi5nZXRUaWxlKHgsIHksIGluZGV4KTtcbiAgICAgICAgICAgICAgICBpZiAodGlsZSA9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgIGh0bWwucHVzaChgXFx0XFx0PGRpdiBjbGFzcz1cImNcIj48L2Rpdj5gKTtcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaHRtbC5wdXNoKGBcXHRcXHQ8aW1nIGNsYXNzPVwiY1wiIHNyYz1cIi4vJHtnZXRUaWxlTmFtZSh0aWxlLm1pbWVUeXBlLCBpbmRleCwgeCwgeSl9XCIgPmApO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBodG1sLnB1c2goJ1xcdDwvZGl2PicpO1xuICAgICAgICB9XG4gICAgICAgIGh0bWwucHVzaCgnPC9odG1sPicpO1xuICAgICAgICBhd2FpdCBmcy53cml0ZUZpbGUocGF0aC5qb2luKG91dHB1dCwgJ2luZGV4Lmh0bWwnKSwgaHRtbC5qb2luKCdcXG4nKSk7XG4gICAgfVxuXG4gICAgYXN5bmMgZHVtcFRpbGVzKHRpZjogQ29nVGlmZiwgb3V0cHV0OiBzdHJpbmcsIGluZGV4OiBudW1iZXIpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgY29uc3QgcHJvbWlzZXM6IFByb21pc2U8dm9pZD5bXSA9IFtdO1xuICAgICAgICBjb25zdCBpbWcgPSB0aWYuZ2V0SW1hZ2UoaW5kZXgpO1xuICAgICAgICBpZiAoIWltZy5pc1RpbGVkKCkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMubG9nZ2VyLmluZm8oeyAuLi5pbWcudGlsZVNpemUsIC4uLmltZy50aWxlQ291bnQgfSwgJ1RpbGVJbmZvJyk7XG4gICAgICAgIGNvbnN0IHRpbGVDb3VudCA9IGltZy50aWxlQ291bnQ7XG5cbiAgICAgICAgLy8gTG9hZCBhbGwgb2Zmc2V0cyBpblxuICAgICAgICBhd2FpdCBpbWcudGlsZU9mZnNldC5sb2FkKCk7XG5cbiAgICAgICAgZm9yIChsZXQgeCA9IDA7IHggPCB0aWxlQ291bnQueDsgeCsrKSB7XG4gICAgICAgICAgICBmb3IgKGxldCB5ID0gMDsgeSA8IHRpbGVDb3VudC55OyB5KyspIHtcbiAgICAgICAgICAgICAgICBjb25zdCBwcm9taXNlID0gVGlsZVF1ZXVlKCgpID0+IHdyaXRlVGlsZSh0aWYsIHgsIHksIGluZGV4LCBvdXRwdXQsIHRoaXMubG9nZ2VyKSk7XG4gICAgICAgICAgICAgICAgcHJvbWlzZXMucHVzaChwcm9taXNlKTtcbiAgICAgICAgICAgICAgICB0aGlzLm91dHB1dENvdW50Kys7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBhd2FpdCBQcm9taXNlLmFsbChwcm9taXNlcyk7XG4gICAgfVxuXG4gICAgYXN5bmMgb25FeGVjdXRlKCk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgICB0aGlzLmltYWdlSW5kZXggPT0gbnVsbCB8fFxuICAgICAgICAgICAgdGhpcy5pbWFnZUluZGV4LnZhbHVlID09IG51bGwgfHxcbiAgICAgICAgICAgIHRoaXMub3V0cHV0ID09IG51bGwgfHxcbiAgICAgICAgICAgIHRoaXMub3V0cHV0LnZhbHVlID09IG51bGxcbiAgICAgICAgKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5vdXRwdXRDb3VudCA9IDA7XG5cbiAgICAgICAgY29uc3QgeyB0aWYgfSA9IGF3YWl0IEFjdGlvblV0aWwuZ2V0Q29nU291cmNlKHRoaXMuZmlsZSk7XG4gICAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy5pbWFnZUluZGV4LnZhbHVlO1xuICAgICAgICBpZiAoaW5kZXggPT0gbnVsbCB8fCBpbmRleCA+IHRpZi5pbWFnZXMubGVuZ3RoIC0gMSB8fCBpbmRleCA8IC0xKSB7XG4gICAgICAgICAgICB0aGlzLnJlbmRlckhlbHBUZXh0KCk7XG4gICAgICAgICAgICB0aHJvdyBFcnJvcihgSW52YWxpZCBpbmRleCBsZXZlbCBcIiR7aW5kZXh9XCIgbXVzdCBiZSBiZXR3ZWVuIDAgLSAke3RpZi5pbWFnZXMubGVuZ3RoIC0gMX1gKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGltZyA9IHRpZi5nZXRJbWFnZShpbmRleCk7XG4gICAgICAgIGlmICghaW1nLmlzVGlsZWQoKSkge1xuICAgICAgICAgICAgdGhyb3cgRXJyb3IoJ1RpZiBmaWxlIGlzIG5vdCB0aWxlZC4nKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IG91dHB1dCA9IHBhdGguam9pbih0aGlzLm91dHB1dC52YWx1ZSwgYGkke2luZGV4fWApO1xuICAgICAgICBhd2FpdCBmcy5ta2RpcihvdXRwdXQsIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuXG4gICAgICAgIGF3YWl0IHRoaXMuZHVtcFRpbGVzKHRpZiwgb3V0cHV0LCBpbmRleCk7XG4gICAgICAgIGF3YWl0IHRoaXMuZHVtcEluZGV4KHRpZiwgb3V0cHV0LCBpbmRleCk7XG4gICAgICAgIGF3YWl0IHRoaXMuZHVtcEJvdW5kcyh0aWYsIHRoaXMub3V0cHV0LnZhbHVlLCBpbmRleCk7XG5cbiAgICAgICAgY29uc3Qgc291cmNlID0gdGlmLnNvdXJjZSBhcyBDaHVua1NvdXJjZUJhc2U7XG4gICAgICAgIGNvbnN0IGNodW5rSWRzID0gWy4uLihzb3VyY2UuY2h1bmtzIGFzIE1hcDx1bmtub3duLCB1bmtub3duPikudmFsdWVzKCldO1xuICAgICAgICBjb25zdCByZXN1bHQ6IENsaVJlc3VsdE1hcFtdID0gW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGtleXM6IFtcbiAgICAgICAgICAgICAgICAgICAgeyBrZXk6ICdUaWZmIHR5cGUnLCB2YWx1ZTogYCR7VGlmZlZlcnNpb25bdGlmLnZlcnNpb25dfSAodiR7U3RyaW5nKHRpZi52ZXJzaW9uKX0pYCB9LFxuICAgICAgICAgICAgICAgICAgICB7IGtleTogJ0NodW5rIHNpemUnLCB2YWx1ZTogdG9CeXRlU2l6ZVN0cmluZyh0aWYuc291cmNlLmNodW5rU2l6ZSkgfSxcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAga2V5OiAnQnl0ZXMgcmVhZCcsXG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBgJHt0b0J5dGVTaXplU3RyaW5nKGNodW5rSWRzLmxlbmd0aCAqIHRpZi5zb3VyY2UuY2h1bmtTaXplKX0gYCArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYCgke2NodW5rSWRzLmxlbmd0aH0gQ2h1bmske2NodW5rSWRzLmxlbmd0aCA9PT0gMSA/ICcnIDogJ3MnfSlgLFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRpdGxlOiAnT3V0cHV0JyxcbiAgICAgICAgICAgICAgICBrZXlzOiBbeyBrZXk6ICdJbWFnZXMnLCB2YWx1ZTogdGhpcy5vdXRwdXRDb3VudCB9XSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIF07XG4gICAgICAgIGNvbnN0IG1zZyA9IEFjdGlvblV0aWwuZm9ybWF0UmVzdWx0KGAke2MuYm9sZCgnQ09HIEZpbGUgSW5mbycpfSAtICR7Yy5ib2xkKHRpZi5zb3VyY2UudXJpKX1gLCByZXN1bHQpO1xuICAgICAgICBjb25zb2xlLmxvZyhtc2cuam9pbignXFxuJykpO1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIG9uRGVmaW5lUGFyYW1ldGVycygpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5maWxlID0gdGhpcy5kZWZpbmVTdHJpbmdQYXJhbWV0ZXIoe1xuICAgICAgICAgICAgYXJndW1lbnROYW1lOiAnRklMRScsXG4gICAgICAgICAgICBwYXJhbWV0ZXJMb25nTmFtZTogJy0tZmlsZScsXG4gICAgICAgICAgICBwYXJhbWV0ZXJTaG9ydE5hbWU6ICctZicsXG4gICAgICAgICAgICBkZXNjcmlwdGlvbjogJ2NvZyBmaWxlIHRvIGFjY2VzcycsXG4gICAgICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5pbWFnZUluZGV4ID0gdGhpcy5kZWZpbmVJbnRlZ2VyUGFyYW1ldGVyKHtcbiAgICAgICAgICAgIGFyZ3VtZW50TmFtZTogJ0lNQUdFJyxcbiAgICAgICAgICAgIHBhcmFtZXRlclNob3J0TmFtZTogJy1pJyxcbiAgICAgICAgICAgIHBhcmFtZXRlckxvbmdOYW1lOiAnLS1pbWFnZScsXG4gICAgICAgICAgICBkZXNjcmlwdGlvbjogJ0ltYWdlIGlkIHRvIGV4cG9ydCAoc3RhcnRpbmcgZnJvbSAwKScsXG4gICAgICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5vdXRwdXQgPSB0aGlzLmRlZmluZVN0cmluZ1BhcmFtZXRlcih7XG4gICAgICAgICAgICBhcmd1bWVudE5hbWU6ICdPVVRQVVQnLFxuICAgICAgICAgICAgcGFyYW1ldGVyU2hvcnROYW1lOiAnLW8nLFxuICAgICAgICAgICAgcGFyYW1ldGVyTG9uZ05hbWU6ICctLW91dHB1dCcsXG4gICAgICAgICAgICBkZXNjcmlwdGlvbjogJ1doZXJlIHRvIHN0b3JlIHRoZSBvdXRwdXQnLFxuICAgICAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICAgIH0pO1xuICAgIH1cbn1cbiJdfQ==
@@ -1,10 +0,0 @@
1
- import { CommandLineAction } from '@rushstack/ts-command-line';
2
- export declare class ActionCogInfo extends CommandLineAction {
3
- private file?;
4
- private tags?;
5
- private tagsAll?;
6
- constructor();
7
- onExecute(): Promise<void>;
8
- protected onDefineParameters(): void;
9
- }
10
- //# sourceMappingURL=action.info.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"action.info.d.ts","sourceRoot":"","sources":["../src/action.info.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,iBAAiB,EAAwD,MAAM,4BAA4B,CAAC;AA8ErH,qBAAa,aAAc,SAAQ,iBAAiB;IAChD,OAAO,CAAC,IAAI,CAAC,CAA6B;IAC1C,OAAO,CAAC,IAAI,CAAC,CAA2B;IACxC,OAAO,CAAC,OAAO,CAAC,CAA2B;;IAUrC,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC;IAwFhC,SAAS,CAAC,kBAAkB,IAAI,IAAI;CAuBvC"}
@@ -1,183 +0,0 @@
1
- import { TiffTag, TiffTagGeo, TiffVersion } from '@cogeotiff/core';
2
- import { CommandLineAction } from '@rushstack/ts-command-line';
3
- import c from 'ansi-colors';
4
- import { ActionUtil } from './action.util.js';
5
- import { CliTable } from './cli.table.js';
6
- import { toByteSizeString } from './util.bytes.js';
7
- function formatTag(tagId, tagName, tagValue) {
8
- const key = `${String(tagId).padEnd(7, ' ')} ${String(tagName).padEnd(20)}`;
9
- if (Array.isArray(tagValue)) {
10
- return { key, value: tagValue.slice(0, 250).join(', ') };
11
- }
12
- return { key, value: String(tagValue).substr(0, 1024) };
13
- }
14
- function round(num) {
15
- const opt = 10 ** 4;
16
- return Math.floor(num * opt) / opt;
17
- }
18
- const TiffImageInfoTable = new CliTable();
19
- TiffImageInfoTable.add({ name: 'Id', width: 4, get: (i, index) => String(index) });
20
- TiffImageInfoTable.add({ name: 'Size', width: 20, get: (i) => `${i.size.width}x${i.size.height}` });
21
- TiffImageInfoTable.add({
22
- name: 'Tile Size',
23
- width: 20,
24
- get: (i) => `${i.tileCount.x}x${i.tileCount.y}`,
25
- enabled: (i) => i.isTiled(),
26
- });
27
- TiffImageInfoTable.add({
28
- name: 'Tile Count',
29
- width: 20,
30
- get: (i) => `${i.tileCount.x * i.tileCount.y}`,
31
- enabled: (i) => i.isTiled(),
32
- });
33
- TiffImageInfoTable.add({
34
- name: 'Strip Count',
35
- width: 20,
36
- get: (i) => { var _a; return `${(_a = i.tags.get(TiffTag.StripOffsets)) === null || _a === void 0 ? void 0 : _a.dataCount}`; },
37
- enabled: (i) => !i.isTiled(),
38
- });
39
- TiffImageInfoTable.add({
40
- name: 'Resolution',
41
- width: 20,
42
- get: (i) => `${round(i.resolution[0])}`,
43
- enabled: (i) => i.isGeoLocated,
44
- });
45
- // Show compression only if it varies between images
46
- TiffImageInfoTable.add({
47
- name: 'Compression',
48
- width: 20,
49
- get: (i) => i.compression,
50
- enabled: (i) => {
51
- const formats = new Set();
52
- i.tif.images.forEach((f) => formats.add(f.compression));
53
- return formats.size > 1;
54
- },
55
- });
56
- /**
57
- * Parse out the GDAL Metadata to be more friendly to read
58
- *
59
- * TODO using a XML Parser will make this even better
60
- * @param img
61
- */
62
- function parseGdalMetadata(img) {
63
- const metadata = img.value(TiffTag.GDAL_METADATA);
64
- if (typeof metadata !== 'string')
65
- return null;
66
- if (!metadata.startsWith('<GDALMetadata>'))
67
- return null;
68
- return metadata
69
- .replace('<GDALMetadata>\n', '')
70
- .replace('</GDALMetadata>\n', '')
71
- .replace('\n\x00', '')
72
- .split('\n')
73
- .map((c) => c.trim());
74
- }
75
- export class ActionCogInfo extends CommandLineAction {
76
- constructor() {
77
- super({
78
- actionName: 'info',
79
- summary: 'Shows info about a COG',
80
- documentation: '',
81
- });
82
- }
83
- async onExecute() {
84
- var _a, _b, _c;
85
- const { tif } = await ActionUtil.getCogSource(this.file);
86
- const [firstImage] = tif.images;
87
- await firstImage.loadGeoTiffTags();
88
- const source = tif.source;
89
- const chunkIds = [...source.chunks.values()];
90
- const imageInfo = '\n' + TiffImageInfoTable.print(tif.images, '\t\t').join('\n');
91
- const gdalMetadata = parseGdalMetadata(firstImage);
92
- const ghostOptions = [...tif.options.options.entries()];
93
- const isGeoLocated = firstImage.isGeoLocated;
94
- const result = [
95
- {
96
- keys: [
97
- { key: 'Tiff type', value: `${TiffVersion[tif.version]} (v${String(tif.version)})` },
98
- { key: 'Chunk size', value: toByteSizeString(tif.source.chunkSize) },
99
- {
100
- key: 'Bytes read',
101
- value: `${toByteSizeString(chunkIds.length * tif.source.chunkSize)} (${chunkIds.length} Chunk${chunkIds.length === 1 ? '' : 's'})`,
102
- },
103
- ],
104
- },
105
- {
106
- title: 'Images',
107
- keys: [
108
- { key: 'Compression', value: firstImage.compression },
109
- isGeoLocated ? { key: 'Origin', value: firstImage.origin.map(round).join(', ') } : null,
110
- isGeoLocated ? { key: 'Resolution', value: firstImage.resolution.map(round).join(', ') } : null,
111
- isGeoLocated ? { key: 'BoundingBox', value: firstImage.bbox.map(round).join(', ') } : null,
112
- firstImage.epsg
113
- ? { key: 'EPSG', value: `EPSG:${firstImage.epsg} (https://epsg.io/${firstImage.epsg})` }
114
- : null,
115
- { key: 'Info', value: imageInfo },
116
- ],
117
- },
118
- {
119
- title: 'GDAL',
120
- keys: [
121
- { key: 'COG optimized', value: tif.options.isCogOptimized },
122
- tif.options.isBroken ? { key: 'COG broken', value: tif.options.isBroken } : null,
123
- ghostOptions.length > 0
124
- ? {
125
- key: 'Ghost Options',
126
- value: '\n' + ghostOptions.map((c) => `\t\t${c[0]} = ${c[1]}`).join('\n'),
127
- }
128
- : null,
129
- gdalMetadata
130
- ? {
131
- key: 'Metadata',
132
- value: '\n' + gdalMetadata.map((c) => `\t\t${c}`).join('\n'),
133
- }
134
- : null,
135
- ],
136
- },
137
- ];
138
- if (((_a = this.tags) === null || _a === void 0 ? void 0 : _a.value) || ((_b = this.tagsAll) === null || _b === void 0 ? void 0 : _b.value)) {
139
- for (const img of tif.images) {
140
- const tiffTags = [...img.tags.keys()];
141
- result.push({
142
- title: `Image: ${img.id} - Tiff tags`,
143
- keys: tiffTags.map((tagId) => formatTag(tagId, TiffTag[tagId], img.value(tagId))),
144
- });
145
- await img.loadGeoTiffTags();
146
- if (img.tagsGeo) {
147
- const tiffTagsGeo = [...img.tagsGeo.keys()];
148
- result.push({
149
- title: `Image: ${img.id} - Geo Tiff tags`,
150
- keys: tiffTagsGeo.map((tagId) => formatTag(tagId, TiffTagGeo[tagId], img.valueGeo(tagId))),
151
- });
152
- }
153
- if (!((_c = this.tagsAll) === null || _c === void 0 ? void 0 : _c.value)) {
154
- break;
155
- }
156
- }
157
- }
158
- const msg = ActionUtil.formatResult(`${c.bold('COG File Info')} - ${c.bold(tif.source.uri)}`, result);
159
- console.log(msg.join('\n'));
160
- }
161
- onDefineParameters() {
162
- this.file = this.defineStringParameter({
163
- argumentName: 'FILE',
164
- parameterLongName: '--file',
165
- parameterShortName: '-f',
166
- description: 'cog file to access',
167
- required: true,
168
- });
169
- this.tags = this.defineFlagParameter({
170
- parameterLongName: '--tags',
171
- parameterShortName: '-t',
172
- description: 'Dump tiff tags',
173
- required: false,
174
- });
175
- this.tagsAll = this.defineFlagParameter({
176
- parameterLongName: '--tags-all',
177
- parameterShortName: '-T',
178
- description: 'Dump tiff tags for all images',
179
- required: false,
180
- });
181
- }
182
- }
183
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWN0aW9uLmluZm8uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvYWN0aW9uLmluZm8udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFnQixPQUFPLEVBQUUsVUFBVSxFQUFFLFdBQVcsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ2pGLE9BQU8sRUFBRSxpQkFBaUIsRUFBd0QsTUFBTSw0QkFBNEIsQ0FBQztBQUNySCxPQUFPLENBQUMsTUFBTSxhQUFhLENBQUM7QUFDNUIsT0FBTyxFQUFFLFVBQVUsRUFBZ0IsTUFBTSxrQkFBa0IsQ0FBQztBQUM1RCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDMUMsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFFbkQsU0FBUyxTQUFTLENBQUMsS0FBMkIsRUFBRSxPQUFlLEVBQUUsUUFBYTtJQUMxRSxNQUFNLEdBQUcsR0FBRyxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxJQUFJLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztJQUU1RSxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLEVBQUU7UUFDekIsT0FBTyxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7S0FDNUQ7SUFDRCxPQUFPLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDO0FBQzVELENBQUM7QUFFRCxTQUFTLEtBQUssQ0FBQyxHQUFXO0lBQ3RCLE1BQU0sR0FBRyxHQUFHLEVBQUUsSUFB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QkFBa0IsRUFBRSxJQUFJO1lBQ3hCLFdBQVcsRUFBRSxvQkFBb0I7WUFDakMsUUFBUSxFQUFFLElBQUk7U0FDakIsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQUM7WUFDakMsaUJBQWlCLEVBQUUsUUFBUTtZQUMzQixrQkFBa0IsRUFBRSxJQUFJO1lBQ3hCLFdBQVcsRUFBRSxnQkFBZ0I7WUFDN0IsUUFBUSxFQUFFLEtBQUs7U0FDbEIsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQUM7WUFDcEMsaUJBQWlCLEVBQUUsWUFBWTtZQUMvQixrQkFBa0IsRUFBRSxJQUFJO1lBQ3hCLFdBQVcsRUFBRSwrQkFBK0I7WUFDNUMsUUFBUSxFQUFFLEtBQUs7U0FDbEIsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztDQUNKIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2h1bmtTb3VyY2VCYXNlIH0gZnJvbSAnQGNodW5rZC9jb3JlJztcbmltcG9ydCB7IENvZ1RpZmZJbWFnZSwgVGlmZlRhZywgVGlmZlRhZ0dlbywgVGlmZlZlcnNpb24gfSBmcm9tICdAY29nZW90aWZmL2NvcmUnO1xuaW1wb3J0IHsgQ29tbWFuZExpbmVBY3Rpb24sIENvbW1hbmRMaW5lRmxhZ1BhcmFtZXRlciwgQ29tbWFuZExpbmVTdHJpbmdQYXJhbWV0ZXIgfSBmcm9tICdAcnVzaHN0YWNrL3RzLWNvbW1hbmQtbGluZSc7XG5pbXBvcnQgYyBmcm9tICdhbnNpLWNvbG9ycyc7XG5pbXBvcnQgeyBBY3Rpb25VdGlsLCBDbGlSZXN1bHRNYXAgfSBmcm9tICcuL2FjdGlvbi51dGlsLmpzJztcbmltcG9ydCB7IENsaVRhYmxlIH0gZnJvbSAnLi9jbGkudGFibGUuanMnO1xuaW1wb3J0IHsgdG9CeXRlU2l6ZVN0cmluZyB9IGZyb20gJy4vdXRpbC5ieXRlcy5qcyc7XG5cbmZ1bmN0aW9uIGZvcm1hdFRhZyh0YWdJZDogVGlmZlRhZyB8IFRpZmZUYWdHZW8sIHRhZ05hbWU6IHN0cmluZywgdGFnVmFsdWU6IGFueSk6IHsga2V5OiBzdHJpbmc7IHZhbHVlOiBzdHJpbmcgfSB7XG4gICAgY29uc3Qga2V5ID0gYCR7U3RyaW5nKHRhZ0lkKS5wYWRFbmQoNywgJyAnKX0gJHtTdHJpbmcodGFnTmFtZSkucGFkRW5kKDIwKX1gO1xuXG4gICAgaWYgKEFycmF5LmlzQXJyYXkodGFnVmFsdWUpKSB7XG4gICAgICAgIHJldHVybiB7IGtleSwgdmFsdWU6IHRhZ1ZhbHVlLnNsaWNlKDAsIDI1MCkuam9pbignLCAnKSB9O1xuICAgIH1cbiAgICByZXR1cm4geyBrZXksIHZhbHVlOiBTdHJpbmcodGFnVmFsdWUpLnN1YnN0cigwLCAxMDI0KSB9O1xufVxuXG5mdW5jdGlvbiByb3VuZChudW06IG51bWJlcik6IG51bWJlciB7XG4gICAgY29uc3Qgb3B0ID0gMTAgKiogNDtcbiAgICByZXR1cm4gTWF0aC5mbG9vcihudW0gKiBvcHQpIC8gb3B0O1xufVxuXG5jb25zdCBUaWZmSW1hZ2VJbmZvVGFibGUgPSBuZXcgQ2xpVGFibGU8Q29nVGlmZkltYWdlPigpO1xuVGlmZkltYWdlSW5mb1RhYmxlLmFkZCh7IG5hbWU6ICdJZCcsIHdpZHRoOiA0LCBnZXQ6IChpLCBpbmRleCkgPT4gU3RyaW5nKGluZGV4KSB9KTtcblRpZmZJbWFnZUluZm9UYWJsZS5hZGQoeyBuYW1lOiAnU2l6ZScsIHdpZHRoOiAyMCwgZ2V0OiAoaSkgPT4gYCR7aS5zaXplLndpZHRofXgke2kuc2l6ZS5oZWlnaHR9YCB9KTtcblRpZmZJbWFnZUluZm9UYWJsZS5hZGQoe1xuICAgIG5hbWU6ICdUaWxlIFNpemUnLFxuICAgIHdpZHRoOiAyMCxcbiAgICBnZXQ6IChpKSA9PiBgJHtpLnRpbGVDb3VudC54fXgke2kudGlsZUNvdW50Lnl9YCxcbiAgICBlbmFibGVkOiAoaSkgPT4gaS5pc1RpbGVkKCksXG59KTtcblRpZmZJbWFnZUluZm9UYWJsZS5hZGQoe1xuICAgIG5hbWU6ICdUaWxlIENvdW50JyxcbiAgICB3aWR0aDogMjAsXG4gICAgZ2V0OiAoaSkgPT4gYCR7aS50aWxlQ291bnQueCAqIGkudGlsZUNvdW50Lnl9YCxcbiAgICBlbmFibGVkOiAoaSkgPT4gaS5pc1RpbGVkKCksXG59KTtcblRpZmZJbWFnZUluZm9UYWJsZS5hZGQoe1xuICAgIG5hbWU6ICdTdHJpcCBDb3VudCcsXG4gICAgd2lkdGg6IDIwLFxuICAgIGdldDogKGkpID0+IGAke2kudGFncy5nZXQoVGlmZlRhZy5TdHJpcE9mZnNldHMpPy5kYXRhQ291bnR9YCxcbiAgICBlbmFibGVkOiAoaSkgPT4gIWkuaXNUaWxlZCgpLFxufSk7XG5UaWZmSW1hZ2VJbmZvVGFibGUuYWRkKHtcbiAgICBuYW1lOiAnUmVzb2x1dGlvbicsXG4gICAgd2lkdGg6IDIwLFxuICAgIGdldDogKGkpID0+IGAke3JvdW5kKGkucmVzb2x1dGlvblswXSl9YCxcbiAgICBlbmFibGVkOiAoaSkgPT4gaS5pc0dlb0xvY2F0ZWQsXG59KTtcblxuLy8gU2hvdyBjb21wcmVzc2lvbiBvbmx5IGlmIGl0IHZhcmllcyBiZXR3ZWVuIGltYWdlc1xuVGlmZkltYWdlSW5mb1RhYmxlLmFkZCh7XG4gICAgbmFtZTogJ0NvbXByZXNzaW9uJyxcbiAgICB3aWR0aDogMjAsXG4gICAgZ2V0OiAoaSkgPT4gaS5jb21wcmVzc2lvbixcbiAgICBlbmFibGVkOiAoaSkgPT4ge1xuICAgICAgICBjb25zdCBmb3JtYXRzID0gbmV3IFNldCgpO1xuICAgICAgICBpLnRpZi5pbWFnZXMuZm9yRWFjaCgoZikgPT4gZm9ybWF0cy5hZGQoZi5jb21wcmVzc2lvbikpO1xuICAgICAgICByZXR1cm4gZm9ybWF0cy5zaXplID4gMTtcbiAgICB9LFxufSk7XG5cbi8qKlxuICogUGFyc2Ugb3V0IHRoZSBHREFMIE1ldGFkYXRhIHRvIGJlIG1vcmUgZnJpZW5kbHkgdG8gcmVhZFxuICpcbiAqIFRPRE8gdXNpbmcgYSBYTUwgUGFyc2VyIHdpbGwgbWFrZSB0aGlzIGV2ZW4gYmV0dGVyXG4gKiBAcGFyYW0gaW1nXG4gKi9cbmZ1bmN0aW9uIHBhcnNlR2RhbE1ldGFkYXRhKGltZzogQ29nVGlmZkltYWdlKTogc3RyaW5nW10gfCBudWxsIHtcbiAgICBjb25zdCBtZXRhZGF0YSA9IGltZy52YWx1ZShUaWZmVGFnLkdEQUxfTUVUQURBVEEpO1xuICAgIGlmICh0eXBlb2YgbWV0YWRhdGEgIT09ICdzdHJpbmcnKSByZXR1cm4gbnVsbDtcbiAgICBpZiAoIW1ldGFkYXRhLnN0YXJ0c1dpdGgoJzxHREFMTWV0YWRhdGE+JykpIHJldHVybiBudWxsO1xuICAgIHJldHVybiBtZXRhZGF0YVxuICAgICAgICAucmVwbGFjZSgnPEdEQUxNZXRhZGF0YT5cXG4nLCAnJylcbiAgICAgICAgLnJlcGxhY2UoJzwvR0RBTE1ldGFkYXRhPlxcbicsICcnKVxuICAgICAgICAucmVwbGFjZSgnXFxuXFx4MDAnLCAnJylcbiAgICAgICAgLnNwbGl0KCdcXG4nKVxuICAgICAgICAubWFwKChjKSA9PiBjLnRyaW0oKSk7XG59XG5cbmV4cG9ydCBjbGFzcyBBY3Rpb25Db2dJbmZvIGV4dGVuZHMgQ29tbWFuZExpbmVBY3Rpb24ge1xuICAgIHByaXZhdGUgZmlsZT86IENvbW1hbmRMaW5lU3RyaW5nUGFyYW1ldGVyO1xuICAgIHByaXZhdGUgdGFncz86IENvbW1hbmRMaW5lRmxhZ1BhcmFtZXRlcjtcbiAgICBwcml2YXRlIHRhZ3NBbGw/OiBDb21tYW5kTGluZUZsYWdQYXJhbWV0ZXI7XG5cbiAgICBwdWJsaWMgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKHtcbiAgICAgICAgICAgIGFjdGlvbk5hbWU6ICdpbmZvJyxcbiAgICAgICAgICAgIHN1bW1hcnk6ICdTaG93cyBpbmZvIGFib3V0IGEgQ09HJyxcbiAgICAgICAgICAgIGRvY3VtZW50YXRpb246ICcnLFxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBhc3luYyBvbkV4ZWN1dGUoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGNvbnN0IHsgdGlmIH0gPSBhd2FpdCBBY3Rpb25VdGlsLmdldENvZ1NvdXJjZSh0aGlzLmZpbGUpO1xuICAgICAgICBjb25zdCBbZmlyc3RJbWFnZV0gPSB0aWYuaW1hZ2VzO1xuXG4gICAgICAgIGF3YWl0IGZpcnN0SW1hZ2UubG9hZEdlb1RpZmZUYWdzKCk7XG5cbiAgICAgICAgY29uc3Qgc291cmNlID0gdGlmLnNvdXJjZSBhcyBDaHVua1NvdXJjZUJhc2U7XG4gICAgICAgIGNvbnN0IGNodW5rSWRzID0gWy4uLihzb3VyY2UuY2h1bmtzIGFzIE1hcDx1bmtub3duLCB1bmtub3duPikudmFsdWVzKCldO1xuXG4gICAgICAgIGNvbnN0IGltYWdlSW5mbyA9ICdcXG4nICsgVGlmZkltYWdlSW5mb1RhYmxlLnByaW50KHRpZi5pbWFnZXMsICdcXHRcXHQnKS5qb2luKCdcXG4nKTtcblxuICAgICAgICBjb25zdCBnZGFsTWV0YWRhdGEgPSBwYXJzZUdkYWxNZXRhZGF0YShmaXJzdEltYWdlKTtcbiAgICAgICAgY29uc3QgZ2hvc3RPcHRpb25zID0gWy4uLnRpZi5vcHRpb25zLm9wdGlvbnMuZW50cmllcygpXTtcblxuICAgICAgICBjb25zdCBpc0dlb0xvY2F0ZWQgPSBmaXJzdEltYWdlLmlzR2VvTG9jYXRlZDtcblxuICAgICAgICBjb25zdCByZXN1bHQ6IENsaVJlc3VsdE1hcFtdID0gW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGtleXM6IFtcbiAgICAgICAgICAgICAgICAgICAgeyBrZXk6ICdUaWZmIHR5cGUnLCB2YWx1ZTogYCR7VGlmZlZlcnNpb25bdGlmLnZlcnNpb25dfSAodiR7U3RyaW5nKHRpZi52ZXJzaW9uKX0pYCB9LFxuICAgICAgICAgICAgICAgICAgICB7IGtleTogJ0NodW5rIHNpemUnLCB2YWx1ZTogdG9CeXRlU2l6ZVN0cmluZyh0aWYuc291cmNlLmNodW5rU2l6ZSkgfSxcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAga2V5OiAnQnl0ZXMgcmVhZCcsXG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogYCR7dG9CeXRlU2l6ZVN0cmluZyhjaHVua0lkcy5sZW5ndGggKiB0aWYuc291cmNlLmNodW5rU2l6ZSl9ICgke2NodW5rSWRzLmxlbmd0aH0gQ2h1bmske1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNodW5rSWRzLmxlbmd0aCA9PT0gMSA/ICcnIDogJ3MnXG4gICAgICAgICAgICAgICAgICAgICAgICB9KWAsXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdGl0bGU6ICdJbWFnZXMnLFxuICAgICAgICAgICAgICAgIGtleXM6IFtcbiAgICAgICAgICAgICAgICAgICAgeyBrZXk6ICdDb21wcmVzc2lvbicsIHZhbHVlOiBmaXJzdEltYWdlLmNvbXByZXNzaW9uIH0sXG4gICAgICAgICAgICAgICAgICAgIGlzR2VvTG9jYXRlZCA/IHsga2V5OiAnT3JpZ2luJywgdmFsdWU6IGZpcnN0SW1hZ2Uub3JpZ2luLm1hcChyb3VuZCkuam9pbignLCAnKSB9IDogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgaXNHZW9Mb2NhdGVkID8geyBrZXk6ICdSZXNvbHV0aW9uJywgdmFsdWU6IGZpcnN0SW1hZ2UucmVzb2x1dGlvbi5tYXAocm91bmQpLmpvaW4oJywgJykgfSA6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgIGlzR2VvTG9jYXRlZCA/IHsga2V5OiAnQm91bmRpbmdCb3gnLCB2YWx1ZTogZmlyc3RJbWFnZS5iYm94Lm1hcChyb3VuZCkuam9pbignLCAnKSB9IDogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgZmlyc3RJbWFnZS5lcHNnXG4gICAgICAgICAgICAgICAgICAgICAgICA/IHsga2V5OiAnRVBTRycsIHZhbHVlOiBgRVBTRzoke2ZpcnN0SW1hZ2UuZXBzZ30gKGh0dHBzOi8vZXBzZy5pby8ke2ZpcnN0SW1hZ2UuZXBzZ30pYCB9XG4gICAgICAgICAgICAgICAgICAgICAgICA6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgIHsga2V5OiAnSW5mbycsIHZhbHVlOiBpbWFnZUluZm8gfSxcbiAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB0aXRsZTogJ0dEQUwnLFxuICAgICAgICAgICAgICAgIGtleXM6IFtcbiAgICAgICAgICAgICAgICAgICAgeyBrZXk6ICdDT0cgb3B0aW1pemVkJywgdmFsdWU6IHRpZi5vcHRpb25zLmlzQ29nT3B0aW1pemVkIH0sXG4gICAgICAgICAgICAgICAgICAgIHRpZi5vcHRpb25zLmlzQnJva2VuID8geyBrZXk6ICdDT0cgYnJva2VuJywgdmFsdWU6IHRpZi5vcHRpb25zLmlzQnJva2VuIH0gOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICBnaG9zdE9wdGlvbnMubGVuZ3RoID4gMFxuICAgICAgICAgICAgICAgICAgICAgICAgPyB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6ICdHaG9zdCBPcHRpb25zJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiAnXFxuJyArIGdob3N0T3B0aW9ucy5tYXAoKGMpID0+IGBcXHRcXHQke2NbMF19ID0gJHtjWzFdfWApLmpvaW4oJ1xcbicpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICA6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgIGdkYWxNZXRhZGF0YVxuICAgICAgICAgICAgICAgICAgICAgICAgPyB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6ICdNZXRhZGF0YScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogJ1xcbicgKyBnZGFsTWV0YWRhdGEubWFwKChjKSA9PiBgXFx0XFx0JHtjfWApLmpvaW4oJ1xcbicpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICA6IG51bGwsXG4gICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIF07XG5cbiAgICAgICAgaWYgKHRoaXMudGFncz8udmFsdWUgfHwgdGhpcy50YWdzQWxsPy52YWx1ZSkge1xuICAgICAgICAgICAgZm9yIChjb25zdCBpbWcgb2YgdGlmLmltYWdlcykge1xuICAgICAgICAgICAgICAgIGNvbnN0IHRpZmZUYWdzID0gWy4uLmltZy50YWdzLmtleXMoKV07XG4gICAgICAgICAgICAgICAgcmVzdWx0LnB1c2goe1xuICAgICAgICAgICAgICAgICAgICB0aXRsZTogYEltYWdlOiAke2ltZy5pZH0gLSBUaWZmIHRhZ3NgLFxuICAgICAgICAgICAgICAgICAgICBrZXlzOiB0aWZmVGFncy5tYXAoKHRhZ0lkKSA9PiBmb3JtYXRUYWcodGFnSWQsIFRpZmZUYWdbdGFnSWRdLCBpbWcudmFsdWUodGFnSWQpKSksXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgYXdhaXQgaW1nLmxvYWRHZW9UaWZmVGFncygpO1xuICAgICAgICAgICAgICAgIGlmIChpbWcudGFnc0dlbykge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB0aWZmVGFnc0dlbyA9IFsuLi5pbWcudGFnc0dlby5rZXlzKCldO1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogYEltYWdlOiAke2ltZy5pZH0gLSBHZW8gVGlmZiB0YWdzYCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGtleXM6IHRpZmZUYWdzR2VvLm1hcCgodGFnSWQpID0+IGZvcm1hdFRhZyh0YWdJZCwgVGlmZlRhZ0dlb1t0YWdJZF0sIGltZy52YWx1ZUdlbyh0YWdJZCkpKSxcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICghdGhpcy50YWdzQWxsPy52YWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBtc2cgPSBBY3Rpb25VdGlsLmZvcm1hdFJlc3VsdChgJHtjLmJvbGQoJ0NPRyBGaWxlIEluZm8nKX0gLSAke2MuYm9sZCh0aWYuc291cmNlLnVyaSl9YCwgcmVzdWx0KTtcbiAgICAgICAgY29uc29sZS5sb2cobXNnLmpvaW4oJ1xcbicpKTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgb25EZWZpbmVQYXJhbWV0ZXJzKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmZpbGUgPSB0aGlzLmRlZmluZVN0cmluZ1BhcmFtZXRlcih7XG4gICAgICAgICAgICBhcmd1bWVudE5hbWU6ICdGSUxFJyxcbiAgICAgICAgICAgIHBhcmFtZXRlckxvbmdOYW1lOiAnLS1maWxlJyxcbiAgICAgICAgICAgIHBhcmFtZXRlclNob3J0TmFtZTogJy1mJyxcbiAgICAgICAgICAgIGRlc2NyaXB0aW9uOiAnY29nIGZpbGUgdG8gYWNjZXNzJyxcbiAgICAgICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLnRhZ3MgPSB0aGlzLmRlZmluZUZsYWdQYXJhbWV0ZXIoe1xuICAgICAgICAgICAgcGFyYW1ldGVyTG9uZ05hbWU6ICctLXRhZ3MnLFxuICAgICAgICAgICAgcGFyYW1ldGVyU2hvcnROYW1lOiAnLXQnLFxuICAgICAgICAgICAgZGVzY3JpcHRpb246ICdEdW1wIHRpZmYgdGFncycsXG4gICAgICAgICAgICByZXF1aXJlZDogZmFsc2UsXG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMudGFnc0FsbCA9IHRoaXMuZGVmaW5lRmxhZ1BhcmFtZXRlcih7XG4gICAgICAgICAgICBwYXJhbWV0ZXJMb25nTmFtZTogJy0tdGFncy1hbGwnLFxuICAgICAgICAgICAgcGFyYW1ldGVyU2hvcnROYW1lOiAnLVQnLFxuICAgICAgICAgICAgZGVzY3JpcHRpb246ICdEdW1wIHRpZmYgdGFncyBmb3IgYWxsIGltYWdlcycsXG4gICAgICAgICAgICByZXF1aXJlZDogZmFsc2UsXG4gICAgICAgIH0pO1xuICAgIH1cbn1cbiJdfQ==
@@ -1,9 +0,0 @@
1
- import { CommandLineAction } from '@rushstack/ts-command-line';
2
- export declare class ActionTile extends CommandLineAction {
3
- private file;
4
- private xyz;
5
- constructor();
6
- onExecute(): Promise<void>;
7
- protected onDefineParameters(): void;
8
- }
9
- //# sourceMappingURL=action.tile.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"action.tile.d.ts","sourceRoot":"","sources":["../src/action.tile.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,iBAAiB,EAA8B,MAAM,4BAA4B,CAAC;AAQ3F,qBAAa,UAAW,SAAQ,iBAAiB;IAC7C,OAAO,CAAC,IAAI,CAA2C;IACvD,OAAO,CAAC,GAAG,CAA2C;;IAUhD,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC;IAqChC,SAAS,CAAC,kBAAkB,IAAI,IAAI;CAiBvC"}
@@ -1,64 +0,0 @@
1
- import { TiffVersion } from '@cogeotiff/core';
2
- import { CommandLineAction } from '@rushstack/ts-command-line';
3
- import c from 'ansi-colors';
4
- import { ActionUtil } from './action.util.js';
5
- import { logger as Logger } from './cli.log.js';
6
- import { toByteSizeString } from './util.bytes.js';
7
- import { writeTile } from './util.tile.js';
8
- export class ActionTile extends CommandLineAction {
9
- constructor() {
10
- super({
11
- actionName: 'tile',
12
- summary: 'Fetch a specific tile from a COG',
13
- documentation: '',
14
- });
15
- this.file = null;
16
- this.xyz = null;
17
- }
18
- async onExecute() {
19
- const logger = Logger.child({ action: 'tile' });
20
- // abstract
21
- const { tif } = await ActionUtil.getCogSource(this.file);
22
- if (this.xyz == null || this.xyz.value == null) {
23
- throw new Error('XYZ was not defined');
24
- }
25
- const [x, y, z] = this.xyz.value.split(',').map((c) => parseInt(c));
26
- if (isNaN(x) || isNaN(y) || isNaN(z)) {
27
- throw new Error('Invalid XYZ, format: "X,Y,Z"');
28
- }
29
- await writeTile(tif, x, y, z, '.', logger);
30
- const source = tif.source;
31
- const chunkIds = [...source.chunks.values()];
32
- const result = [
33
- {
34
- keys: [
35
- { key: 'Tiff type', value: `${TiffVersion[tif.version]} (v${String(tif.version)})` },
36
- { key: 'Chunk size', value: toByteSizeString(tif.source.chunkSize) },
37
- {
38
- key: 'Bytes read',
39
- value: `${toByteSizeString(chunkIds.length * tif.source.chunkSize)} (${chunkIds.length} Chunk${chunkIds.length === 1 ? '' : 's'})`,
40
- },
41
- ],
42
- },
43
- ];
44
- const msg = ActionUtil.formatResult(`${c.bold('COG File Info')} - ${c.bold(tif.source.uri)}`, result);
45
- console.log(msg.join('\n'));
46
- }
47
- onDefineParameters() {
48
- // abstract
49
- this.file = this.defineStringParameter({
50
- argumentName: 'FILE',
51
- parameterLongName: '--file',
52
- parameterShortName: '-f',
53
- description: 'cog file to access',
54
- required: true,
55
- });
56
- this.xyz = this.defineStringParameter({
57
- argumentName: 'XYZ',
58
- parameterLongName: '--xyz',
59
- description: '"X,Y,Z" of the tile to fetch',
60
- required: true,
61
- });
62
- }
63
- }
64
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWN0aW9uLnRpbGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvYWN0aW9uLnRpbGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzlDLE9BQU8sRUFBRSxpQkFBaUIsRUFBOEIsTUFBTSw0QkFBNEIsQ0FBQztBQUMzRixPQUFPLENBQUMsTUFBTSxhQUFhLENBQUM7QUFFNUIsT0FBTyxFQUFFLFVBQVUsRUFBZ0IsTUFBTSxrQkFBa0IsQ0FBQztBQUM1RCxPQUFPLEVBQUUsTUFBTSxJQUFJLE1BQU0sRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUNoRCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNuRCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFM0MsTUFBTSxPQUFPLFVBQVcsU0FBUSxpQkFBaUI7SUFJN0M7UUFDSSxLQUFLLENBQUM7WUFDRixVQUFVLEVBQUUsTUFBTTtZQUNsQixPQUFPLEVBQUUsa0NBQWtDO1lBQzNDLGFBQWEsRUFBRSxFQUFFO1NBQ3BCLENBQUMsQ0FBQztRQVJDLFNBQUksR0FBc0MsSUFBSSxDQUFDO1FBQy9DLFFBQUcsR0FBc0MsSUFBSSxDQUFDO0lBUXRELENBQUM7SUFFRCxLQUFLLENBQUMsU0FBUztRQUNYLE1BQU0sTUFBTSxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQztRQUVoRCxXQUFXO1FBQ1gsTUFBTSxFQUFFLEdBQUcsRUFBRSxHQUFHLE1BQU0sVUFBVSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDekQsSUFBSSxJQUFJLENBQUMsR0FBRyxJQUFJLElBQUksSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssSUFBSSxJQUFJLEVBQUU7WUFDNUMsTUFBTSxJQUFJLEtBQUssQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO1NBQzFDO1FBRUQsTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDcEUsSUFBSSxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRTtZQUNsQyxNQUFNLElBQUksS0FBSyxDQUFDLDhCQUE4QixDQUFDLENBQUM7U0FDbkQ7UUFFRCxNQUFNLFNBQVMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBQzNDLE1BQU0sTUFBTSxHQUFHLEdBQUcsQ0FBQyxNQUF5QixDQUFDO1FBQzdDLE1BQU0sUUFBUSxHQUFHLENBQUMsR0FBSSxNQUFNLENBQUMsTUFBZ0MsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDO1FBRXhFLE1BQU0sTUFBTSxHQUFtQjtZQUMzQjtnQkFDSSxJQUFJLEVBQUU7b0JBQ0YsRUFBRSxHQUFHLEVBQUUsV0FBVyxFQUFFLEtBQUssRUFBRSxHQUFHLFdBQVcsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLE1BQU0sTUFBTSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsR0FBRyxFQUFFO29CQUNwRixFQUFFLEdBQUcsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFFLGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLEVBQUU7b0JBQ3BFO3dCQUNJLEdBQUcsRUFBRSxZQUFZO3dCQUNqQixLQUFLLEVBQUUsR0FBRyxnQkFBZ0IsQ0FBQyxRQUFRLENBQUMsTUFBTSxHQUFHLEdBQUcsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLEtBQUssUUFBUSxDQUFDLE1BQU0sU0FDbEYsUUFBUSxDQUFDLE1BQU0sS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FDakMsR0FBRztxQkFDTjtpQkFDSjthQUNKO1NBQ0osQ0FBQztRQUVGLE1BQU0sR0FBRyxHQUFHLFVBQVUsQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBQ3RHLE9BQU8sQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBQ2hDLENBQUM7SUFFUyxrQkFBa0I7UUFDeEIsV0FBVztRQUNYLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLHFCQUFxQixDQUFDO1lBQ25DLFlBQVksRUFBRSxNQUFNO1lBQ3BCLGlCQUFpQixFQUFFLFFBQVE7WUFDM0Isa0JBQWtCLEVBQUUsSUFBSTtZQUN4QixXQUFXLEVBQUUsb0JBQW9CO1lBQ2pDLFFBQVEsRUFBRSxJQUFJO1NBQ2pCLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLHFCQUFxQixDQUFDO1lBQ2xDLFlBQVksRUFBRSxLQUFLO1lBQ25CLGlCQUFpQixFQUFFLE9BQU87WUFDMUIsV0FBVyxFQUFFLDhCQUE4QjtZQUMzQyxRQUFRLEVBQUUsSUFBSTtTQUNqQixDQUFDLENBQUM7SUFDUCxDQUFDO0NBQ0oiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBUaWZmVmVyc2lvbiB9IGZyb20gJ0Bjb2dlb3RpZmYvY29yZSc7XG5pbXBvcnQgeyBDb21tYW5kTGluZUFjdGlvbiwgQ29tbWFuZExpbmVTdHJpbmdQYXJhbWV0ZXIgfSBmcm9tICdAcnVzaHN0YWNrL3RzLWNvbW1hbmQtbGluZSc7XG5pbXBvcnQgYyBmcm9tICdhbnNpLWNvbG9ycyc7XG5pbXBvcnQgeyBDaHVua1NvdXJjZUJhc2UgfSBmcm9tICdAY2h1bmtkL2NvcmUnO1xuaW1wb3J0IHsgQWN0aW9uVXRpbCwgQ2xpUmVzdWx0TWFwIH0gZnJvbSAnLi9hY3Rpb24udXRpbC5qcyc7XG5pbXBvcnQgeyBsb2dnZXIgYXMgTG9nZ2VyIH0gZnJvbSAnLi9jbGkubG9nLmpzJztcbmltcG9ydCB7IHRvQnl0ZVNpemVTdHJpbmcgfSBmcm9tICcuL3V0aWwuYnl0ZXMuanMnO1xuaW1wb3J0IHsgd3JpdGVUaWxlIH0gZnJvbSAnLi91dGlsLnRpbGUuanMnO1xuXG5leHBvcnQgY2xhc3MgQWN0aW9uVGlsZSBleHRlbmRzIENvbW1hbmRMaW5lQWN0aW9uIHtcbiAgICBwcml2YXRlIGZpbGU6IENvbW1hbmRMaW5lU3RyaW5nUGFyYW1ldGVyIHwgbnVsbCA9IG51bGw7XG4gICAgcHJpdmF0ZSB4eXo6IENvbW1hbmRMaW5lU3RyaW5nUGFyYW1ldGVyIHwgbnVsbCA9IG51bGw7XG5cbiAgICBwdWJsaWMgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKHtcbiAgICAgICAgICAgIGFjdGlvbk5hbWU6ICd0aWxlJyxcbiAgICAgICAgICAgIHN1bW1hcnk6ICdGZXRjaCBhIHNwZWNpZmljIHRpbGUgZnJvbSBhIENPRycsXG4gICAgICAgICAgICBkb2N1bWVudGF0aW9uOiAnJyxcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgYXN5bmMgb25FeGVjdXRlKCk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBjb25zdCBsb2dnZXIgPSBMb2dnZXIuY2hpbGQoeyBhY3Rpb246ICd0aWxlJyB9KTtcblxuICAgICAgICAvLyBhYnN0cmFjdFxuICAgICAgICBjb25zdCB7IHRpZiB9ID0gYXdhaXQgQWN0aW9uVXRpbC5nZXRDb2dTb3VyY2UodGhpcy5maWxlKTtcbiAgICAgICAgaWYgKHRoaXMueHl6ID09IG51bGwgfHwgdGhpcy54eXoudmFsdWUgPT0gbnVsbCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdYWVogd2FzIG5vdCBkZWZpbmVkJyk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBbeCwgeSwgel0gPSB0aGlzLnh5ei52YWx1ZS5zcGxpdCgnLCcpLm1hcCgoYykgPT4gcGFyc2VJbnQoYykpO1xuICAgICAgICBpZiAoaXNOYU4oeCkgfHwgaXNOYU4oeSkgfHwgaXNOYU4oeikpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBYWVosIGZvcm1hdDogXCJYLFksWlwiJyk7XG4gICAgICAgIH1cblxuICAgICAgICBhd2FpdCB3cml0ZVRpbGUodGlmLCB4LCB5LCB6LCAnLicsIGxvZ2dlcik7XG4gICAgICAgIGNvbnN0IHNvdXJjZSA9IHRpZi5zb3VyY2UgYXMgQ2h1bmtTb3VyY2VCYXNlO1xuICAgICAgICBjb25zdCBjaHVua0lkcyA9IFsuLi4oc291cmNlLmNodW5rcyBhcyBNYXA8dW5rbm93biwgdW5rbm93bj4pLnZhbHVlcygpXTtcblxuICAgICAgICBjb25zdCByZXN1bHQ6IENsaVJlc3VsdE1hcFtdID0gW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGtleXM6IFtcbiAgICAgICAgICAgICAgICAgICAgeyBrZXk6ICdUaWZmIHR5cGUnLCB2YWx1ZTogYCR7VGlmZlZlcnNpb25bdGlmLnZlcnNpb25dfSAodiR7U3RyaW5nKHRpZi52ZXJzaW9uKX0pYCB9LFxuICAgICAgICAgICAgICAgICAgICB7IGtleTogJ0NodW5rIHNpemUnLCB2YWx1ZTogdG9CeXRlU2l6ZVN0cmluZyh0aWYuc291cmNlLmNodW5rU2l6ZSkgfSxcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAga2V5OiAnQnl0ZXMgcmVhZCcsXG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogYCR7dG9CeXRlU2l6ZVN0cmluZyhjaHVua0lkcy5sZW5ndGggKiB0aWYuc291cmNlLmNodW5rU2l6ZSl9ICgke2NodW5rSWRzLmxlbmd0aH0gQ2h1bmske1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNodW5rSWRzLmxlbmd0aCA9PT0gMSA/ICcnIDogJ3MnXG4gICAgICAgICAgICAgICAgICAgICAgICB9KWAsXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIF07XG5cbiAgICAgICAgY29uc3QgbXNnID0gQWN0aW9uVXRpbC5mb3JtYXRSZXN1bHQoYCR7Yy5ib2xkKCdDT0cgRmlsZSBJbmZvJyl9IC0gJHtjLmJvbGQodGlmLnNvdXJjZS51cmkpfWAsIHJlc3VsdCk7XG4gICAgICAgIGNvbnNvbGUubG9nKG1zZy5qb2luKCdcXG4nKSk7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIG9uRGVmaW5lUGFyYW1ldGVycygpOiB2b2lkIHtcbiAgICAgICAgLy8gYWJzdHJhY3RcbiAgICAgICAgdGhpcy5maWxlID0gdGhpcy5kZWZpbmVTdHJpbmdQYXJhbWV0ZXIoe1xuICAgICAgICAgICAgYXJndW1lbnROYW1lOiAnRklMRScsXG4gICAgICAgICAgICBwYXJhbWV0ZXJMb25nTmFtZTogJy0tZmlsZScsXG4gICAgICAgICAgICBwYXJhbWV0ZXJTaG9ydE5hbWU6ICctZicsXG4gICAgICAgICAgICBkZXNjcmlwdGlvbjogJ2NvZyBmaWxlIHRvIGFjY2VzcycsXG4gICAgICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy54eXogPSB0aGlzLmRlZmluZVN0cmluZ1BhcmFtZXRlcih7XG4gICAgICAgICAgICBhcmd1bWVudE5hbWU6ICdYWVonLFxuICAgICAgICAgICAgcGFyYW1ldGVyTG9uZ05hbWU6ICctLXh5eicsXG4gICAgICAgICAgICBkZXNjcmlwdGlvbjogJ1wiWCxZLFpcIiBvZiB0aGUgdGlsZSB0byBmZXRjaCcsXG4gICAgICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgfSk7XG4gICAgfVxufVxuIl19
@@ -1 +0,0 @@
1
- {"version":3,"file":"action.util.d.ts","sourceRoot":"","sources":["../src/action.util.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAE3C,OAAO,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAC1C,OAAO,EAAE,0BAA0B,EAAE,MAAM,4BAA4B,CAAC;AAGxE,MAAM,WAAW,gBAAgB;IAC7B,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,MAAM,EAAE,GAAG,IAAI,CAAC;CACtD;AACD,MAAM,WAAW,YAAY;IACzB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,CAAC,gBAAgB,GAAG,IAAI,CAAC,EAAE,CAAC;CACrC;AAED,eAAO,MAAM,UAAU;wBACO,0BAA0B,GAAG,IAAI;gBAAqB,WAAW;aAAO,OAAO;;wBAWrF,MAAM,UAAU,YAAY,EAAE,GAAG,MAAM,EAAE;CAmBhE,CAAC"}
@@ -1,9 +0,0 @@
1
- import { CommandLineFlagParameter, CommandLineParser } from '@rushstack/ts-command-line';
2
- export declare class CogInfoCommandLine extends CommandLineParser {
3
- verbose?: CommandLineFlagParameter;
4
- extraVerbose?: CommandLineFlagParameter;
5
- constructor();
6
- protected onExecute(): Promise<void>;
7
- protected onDefineParameters(): void;
8
- }
9
- //# sourceMappingURL=cli.cog.info.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"cli.cog.info.d.ts","sourceRoot":"","sources":["../src/cli.cog.info.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,wBAAwB,EAAE,iBAAiB,EAAE,MAAM,4BAA4B,CAAC;AAMzF,qBAAa,kBAAmB,SAAQ,iBAAiB;IACrD,OAAO,CAAC,EAAE,wBAAwB,CAAC;IACnC,YAAY,CAAC,EAAE,wBAAwB,CAAC;;IAaxC,SAAS,CAAC,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC;IAWpC,SAAS,CAAC,kBAAkB,IAAI,IAAI;CAYvC"}
@@ -1,42 +0,0 @@
1
- import { CommandLineParser } from '@rushstack/ts-command-line';
2
- import { ActionDumpTile } from './action.dump.tile.js';
3
- import { ActionCogInfo } from './action.info.js';
4
- import { ActionTile } from './action.tile.js';
5
- import { logger } from './cli.log.js';
6
- export class CogInfoCommandLine extends CommandLineParser {
7
- constructor() {
8
- super({
9
- toolFilename: 'coginfo',
10
- toolDescription: 'Cloud optimized geotiff utilities',
11
- });
12
- this.addAction(new ActionDumpTile());
13
- this.addAction(new ActionCogInfo());
14
- this.addAction(new ActionTile());
15
- }
16
- onExecute() {
17
- var _a, _b;
18
- if ((_a = this.verbose) === null || _a === void 0 ? void 0 : _a.value) {
19
- logger.level = 'info';
20
- }
21
- else if ((_b = this.extraVerbose) === null || _b === void 0 ? void 0 : _b.value) {
22
- logger.level = 'trace';
23
- }
24
- else {
25
- logger.level = 'warn';
26
- }
27
- return super.onExecute();
28
- }
29
- onDefineParameters() {
30
- this.verbose = this.defineFlagParameter({
31
- parameterLongName: '--verbose',
32
- parameterShortName: '-v',
33
- description: 'Show extra logging detail',
34
- });
35
- this.extraVerbose = this.defineFlagParameter({
36
- parameterLongName: '--vv',
37
- parameterShortName: '-V',
38
- description: 'Show extra extra logging detail',
39
- });
40
- }
41
- }
42
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xpLmNvZy5pbmZvLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2NsaS5jb2cuaW5mby50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQTRCLGlCQUFpQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDekYsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUNqRCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDOUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUV0QyxNQUFNLE9BQU8sa0JBQW1CLFNBQVEsaUJBQWlCO0lBSXJEO1FBQ0ksS0FBSyxDQUFDO1lBQ0YsWUFBWSxFQUFFLFNBQVM7WUFDdkIsZUFBZSxFQUFFLG1DQUFtQztTQUN2RCxDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksY0FBYyxFQUFFLENBQUMsQ0FBQztRQUNyQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksYUFBYSxFQUFFLENBQUMsQ0FBQztRQUNwQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksVUFBVSxFQUFFLENBQUMsQ0FBQztJQUNyQyxDQUFDO0lBRVMsU0FBUzs7UUFDZixJQUFJLE1BQUEsSUFBSSxDQUFDLE9BQU8sMENBQUUsS0FBSyxFQUFFO1lBQ3JCLE1BQU0sQ0FBQyxLQUFLLEdBQUcsTUFBTSxDQUFDO1NBQ3pCO2FBQU0sSUFBSSxNQUFBLElBQUksQ0FBQyxZQUFZLDBDQUFFLEtBQUssRUFBRTtZQUNqQyxNQUFNLENBQUMsS0FBSyxHQUFHLE9BQU8sQ0FBQztTQUMxQjthQUFNO1lBQ0gsTUFBTSxDQUFDLEtBQUssR0FBRyxNQUFNLENBQUM7U0FDekI7UUFFRCxPQUFPLEtBQUssQ0FBQyxTQUFTLEVBQUUsQ0FBQztJQUM3QixDQUFDO0lBQ1Msa0JBQWtCO1FBQ3hCLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixDQUFDO1lBQ3BDLGlCQUFpQixFQUFFLFdBQVc7WUFDOUIsa0JBQWtCLEVBQUUsSUFBSTtZQUN4QixXQUFXLEVBQUUsMkJBQTJCO1NBQzNDLENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixDQUFDO1lBQ3pDLGlCQUFpQixFQUFFLE1BQU07WUFDekIsa0JBQWtCLEVBQUUsSUFBSTtZQUN4QixXQUFXLEVBQUUsaUNBQWlDO1NBQ2pELENBQUMsQ0FBQztJQUNQLENBQUM7Q0FDSiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbW1hbmRMaW5lRmxhZ1BhcmFtZXRlciwgQ29tbWFuZExpbmVQYXJzZXIgfSBmcm9tICdAcnVzaHN0YWNrL3RzLWNvbW1hbmQtbGluZSc7XG5pbXBvcnQgeyBBY3Rpb25EdW1wVGlsZSB9IGZyb20gJy4vYWN0aW9uLmR1bXAudGlsZS5qcyc7XG5pbXBvcnQgeyBBY3Rpb25Db2dJbmZvIH0gZnJvbSAnLi9hY3Rpb24uaW5mby5qcyc7XG5pbXBvcnQgeyBBY3Rpb25UaWxlIH0gZnJvbSAnLi9hY3Rpb24udGlsZS5qcyc7XG5pbXBvcnQgeyBsb2dnZXIgfSBmcm9tICcuL2NsaS5sb2cuanMnO1xuXG5leHBvcnQgY2xhc3MgQ29nSW5mb0NvbW1hbmRMaW5lIGV4dGVuZHMgQ29tbWFuZExpbmVQYXJzZXIge1xuICAgIHZlcmJvc2U/OiBDb21tYW5kTGluZUZsYWdQYXJhbWV0ZXI7XG4gICAgZXh0cmFWZXJib3NlPzogQ29tbWFuZExpbmVGbGFnUGFyYW1ldGVyO1xuXG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKHtcbiAgICAgICAgICAgIHRvb2xGaWxlbmFtZTogJ2NvZ2luZm8nLFxuICAgICAgICAgICAgdG9vbERlc2NyaXB0aW9uOiAnQ2xvdWQgb3B0aW1pemVkIGdlb3RpZmYgdXRpbGl0aWVzJyxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5hZGRBY3Rpb24obmV3IEFjdGlvbkR1bXBUaWxlKCkpO1xuICAgICAgICB0aGlzLmFkZEFjdGlvbihuZXcgQWN0aW9uQ29nSW5mbygpKTtcbiAgICAgICAgdGhpcy5hZGRBY3Rpb24obmV3IEFjdGlvblRpbGUoKSk7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIG9uRXhlY3V0ZSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgaWYgKHRoaXMudmVyYm9zZT8udmFsdWUpIHtcbiAgICAgICAgICAgIGxvZ2dlci5sZXZlbCA9ICdpbmZvJztcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLmV4dHJhVmVyYm9zZT8udmFsdWUpIHtcbiAgICAgICAgICAgIGxvZ2dlci5sZXZlbCA9ICd0cmFjZSc7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBsb2dnZXIubGV2ZWwgPSAnd2Fybic7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gc3VwZXIub25FeGVjdXRlKCk7XG4gICAgfVxuICAgIHByb3RlY3RlZCBvbkRlZmluZVBhcmFtZXRlcnMoKTogdm9pZCB7XG4gICAgICAgIHRoaXMudmVyYm9zZSA9IHRoaXMuZGVmaW5lRmxhZ1BhcmFtZXRlcih7XG4gICAgICAgICAgICBwYXJhbWV0ZXJMb25nTmFtZTogJy0tdmVyYm9zZScsXG4gICAgICAgICAgICBwYXJhbWV0ZXJTaG9ydE5hbWU6ICctdicsXG4gICAgICAgICAgICBkZXNjcmlwdGlvbjogJ1Nob3cgZXh0cmEgbG9nZ2luZyBkZXRhaWwnLFxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5leHRyYVZlcmJvc2UgPSB0aGlzLmRlZmluZUZsYWdQYXJhbWV0ZXIoe1xuICAgICAgICAgICAgcGFyYW1ldGVyTG9uZ05hbWU6ICctLXZ2JyxcbiAgICAgICAgICAgIHBhcmFtZXRlclNob3J0TmFtZTogJy1WJyxcbiAgICAgICAgICAgIGRlc2NyaXB0aW9uOiAnU2hvdyBleHRyYSBleHRyYSBsb2dnaW5nIGRldGFpbCcsXG4gICAgICAgIH0pO1xuICAgIH1cbn1cbiJdfQ==
@@ -1,3 +0,0 @@
1
- /// <reference types="node" />
2
- export declare const logger: import("pino").Logger<import("stream").PassThrough>;
3
- //# sourceMappingURL=cli.log.d.ts.map