@rosen-bridge/abstract-scanner 1.0.4 → 1.1.0-db631ff1
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/CHANGELOG.md +6 -0
- package/dist/constants.d.ts +3 -0
- package/dist/constants.d.ts.map +1 -0
- package/dist/constants.js +3 -0
- package/dist/scanner/abstract/generalScanner.d.ts +2 -1
- package/dist/scanner/abstract/generalScanner.d.ts.map +1 -1
- package/dist/scanner/abstract/generalScanner.js +5 -4
- package/dist/scanner/abstract/scanner.d.ts +10 -2
- package/dist/scanner/abstract/scanner.d.ts.map +1 -1
- package/dist/scanner/abstract/scanner.js +34 -2
- package/dist/scanner/abstract/webSocketScanner.d.ts +2 -1
- package/dist/scanner/abstract/webSocketScanner.d.ts.map +1 -1
- package/dist/scanner/abstract/webSocketScanner.js +5 -4
- package/dist/scanner/action.d.ts +22 -1
- package/dist/scanner/action.d.ts.map +1 -1
- package/dist/scanner/action.js +60 -1
- package/dist/scanner/interfaces.d.ts +6 -0
- package/dist/scanner/interfaces.d.ts.map +1 -1
- package/dist/scanner/interfaces.js +1 -1
- package/package.json +1 -1
- package/dist/tsconfig.tsbuildinfo +0 -1
package/dist/scanner/action.js
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { uniqueId } from 'lodash-es';
|
|
1
2
|
import { DummyLogger } from '@rosen-bridge/abstract-logger';
|
|
2
3
|
import { MoreThanOrEqual, In, } from '@rosen-bridge/extended-typeorm';
|
|
3
4
|
import { BlockEntity, PROCEED, PROCESSING } from '../entities/blockEntity';
|
|
@@ -247,5 +248,63 @@ export class BlockDbAction {
|
|
|
247
248
|
extractorId: In(extractorIds),
|
|
248
249
|
});
|
|
249
250
|
};
|
|
251
|
+
/**
|
|
252
|
+
* Generates queries with unique parameters
|
|
253
|
+
*
|
|
254
|
+
* @param queryBuilders
|
|
255
|
+
* @returns queries and their unique parameters
|
|
256
|
+
*/
|
|
257
|
+
generateQueriesWithUniqueParams = (queryBuilders) => {
|
|
258
|
+
let queryParts = [], parameters = {};
|
|
259
|
+
queryBuilders.forEach((queryBuilder) => {
|
|
260
|
+
const prefix = uniqueId('query');
|
|
261
|
+
const queryWithUniqueParams = queryBuilder
|
|
262
|
+
.getQuery()
|
|
263
|
+
.replace(/:(\w+)/g, (_, key) => `:${prefix}${key}`);
|
|
264
|
+
queryParts.push(queryWithUniqueParams);
|
|
265
|
+
const queryParams = queryBuilder.getParameters();
|
|
266
|
+
const prefixedParams = Object.fromEntries(Object.entries(queryParams).map(([key, value]) => [
|
|
267
|
+
`${prefix}${key}`,
|
|
268
|
+
value,
|
|
269
|
+
]));
|
|
270
|
+
parameters = { ...parameters, ...prefixedParams };
|
|
271
|
+
});
|
|
272
|
+
return { queryParts, parameters };
|
|
273
|
+
};
|
|
274
|
+
/**
|
|
275
|
+
* Removes unused blocks based on the queries retrieving used blocks
|
|
276
|
+
*
|
|
277
|
+
* @param extractorUsedBlocksQueries
|
|
278
|
+
* @param deletedBlockCount
|
|
279
|
+
* @param scannerName
|
|
280
|
+
* @param blockAgeThreshold
|
|
281
|
+
* @param lastSavedBlock
|
|
282
|
+
* @returns The hashes of the removed unused blocks
|
|
283
|
+
*/
|
|
284
|
+
removeUnusedBlocksInBatches = async (extractorUsedBlocksQueries, deletedBlockCount, scannerName, blockAgeThreshold, lastSavedBlock) => {
|
|
285
|
+
const { queryParts, parameters } = this.generateQueriesWithUniqueParams(extractorUsedBlocksQueries);
|
|
286
|
+
const unionQuery = queryParts.map((sql) => `${sql}`).join(' UNION ');
|
|
287
|
+
const thresholdTimestamp = lastSavedBlock
|
|
288
|
+
? lastSavedBlock.timestamp - blockAgeThreshold
|
|
289
|
+
: 0;
|
|
290
|
+
const blocksToDelete = await this.blockRepository
|
|
291
|
+
.createQueryBuilder('blockEntity')
|
|
292
|
+
.addSelect('blockEntity.hash', 'hash')
|
|
293
|
+
.where(`blockEntity.hash NOT IN (${unionQuery})`)
|
|
294
|
+
.andWhere(`blockEntity.scanner = :scannerName`, { scannerName })
|
|
295
|
+
.andWhere('blockEntity.timestamp < :thresholdTimestamp', {
|
|
296
|
+
thresholdTimestamp,
|
|
297
|
+
})
|
|
298
|
+
.setParameters({ ...parameters })
|
|
299
|
+
.distinct(true)
|
|
300
|
+
.orderBy('blockEntity.height', 'ASC')
|
|
301
|
+
.take(deletedBlockCount)
|
|
302
|
+
.getRawMany();
|
|
303
|
+
const unusedBlockHashes = blocksToDelete.map((row) => row.hash);
|
|
304
|
+
await this.blockRepository.delete({
|
|
305
|
+
hash: In(unusedBlockHashes),
|
|
306
|
+
});
|
|
307
|
+
return unusedBlockHashes;
|
|
308
|
+
};
|
|
250
309
|
}
|
|
251
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWN0aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vbGliL3NjYW5uZXIvYWN0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBa0IsV0FBVyxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDNUUsT0FBTyxFQUdMLGVBQWUsRUFFZixFQUFFLEdBQ0gsTUFBTSxnQ0FBZ0MsQ0FBQztBQUd4QyxPQUFPLEVBQUUsV0FBVyxFQUFFLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUMzRSxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUUxRSxNQUFNLE9BQU8sYUFBYTtJQUNmLGVBQWUsQ0FBMEI7SUFDekMseUJBQXlCLENBQW9DO0lBQzdELFVBQVUsQ0FBYTtJQUN2QixXQUFXLENBQVM7SUFDcEIsTUFBTSxDQUFpQjtJQUVoQyxZQUNFLFVBQXNCLEVBQ3RCLFdBQW1CLEVBQ25CLE1BQXVCO1FBRXZCLElBQUksQ0FBQyxlQUFlLEdBQUcsVUFBVSxDQUFDLGFBQWEsQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUM3RCxJQUFJLENBQUMseUJBQXlCLEdBQUcsVUFBVSxDQUFDLGFBQWEsQ0FDdkQscUJBQXFCLENBQ3RCLENBQUM7UUFDRixJQUFJLENBQUMsVUFBVSxHQUFHLFVBQVUsQ0FBQztRQUM3QixJQUFJLENBQUMsV0FBVyxHQUFHLFdBQVcsQ0FBQztRQUMvQixJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLFdBQVcsRUFBRSxDQUFDO0lBQ3BELENBQUM7SUFFUSxJQUFJLEdBQUcsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQztJQUV2Qzs7O09BR0c7SUFDSCxpQkFBaUIsR0FBRyxLQUFLLElBQXNDLEVBQUU7UUFDL0QsTUFBTSxTQUFTLEdBQUcsTUFBTSxJQUFJLENBQUMsZUFBZSxDQUFD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LE9BQU8sQ0FBQztJQUNqQixDQUFDLENBQUM7SUFFRjs7Ozs7T0FLRztJQUNILDZCQUE2QixHQUFHLEtBQUssRUFDbkMsV0FBbUIsRUFDbkIsTUFBYyxFQUNkLFNBQWlCLEVBQ2pCLEVBQUU7UUFDRixJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FDZiwrRUFBK0UsRUFDL0U7WUFDRSxXQUFXO1lBQ1gsTUFBTTtZQUNOLFNBQVM7U0FDVixDQUNGLENBQUM7UUFDRixPQUFPLE1BQU0sSUFBSSxDQUFDLHlCQUF5QixDQUFDLElBQUksQ0FBQztZQUMvQyxTQUFTLEVBQUUsSUFBSSxDQUFDLElBQUksRUFBRTtZQUN0QixXQUFXO1lBQ1gsWUFBWSxFQUFFLE1BQU07WUFDcEIsZUFBZSxFQUFFLFNBQVM7U0FDM0IsQ0FBQyxDQUFDO0lBQ0wsQ0FBQyxDQUFDO0lBRUY7Ozs7T0FJRztJQUNILG1CQUFtQixHQUFHLEtBQUssRUFDekIsWUFBc0IsRUFDWSxFQUFFO1FBQ3BDLE9BQU8sTUFBTSxJQUFJLENBQUMseUJBQXlCLENBQUMsTUFBTSxDQUFDO1lBQ2pELFNBQVMsRUFBRSxJQUFJLENBQUMsSUFBSSxFQUFFO1lBQ3RCLFdBQVcsRUFBRSxFQUFFLENBQUMsWUFBWSxDQUFDO1NBQzlCLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQztDQUNIIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQWJzdHJhY3RMb2dnZXIsIER1bW15TG9nZ2VyIH0gZnJvbSAnQHJvc2VuLWJyaWRnZS9hYnN0cmFjdC1sb2dnZXInO1xuaW1wb3J0IHtcbiAgRGF0YVNvdXJjZSxcbiAgRGVsZXRlUmVzdWx0LFxuICBNb3JlVGhhbk9yRXF1YWwsXG4gIFJlcG9zaXRvcnksXG4gIEluLFxufSBmcm9tICdAcm9zZW4tYnJpZGdlL2V4dGVuZGVkLXR5cGVvcm0nO1xuaW1wb3J0IHsgQmxvY2sgfSBmcm9tICdAcm9zZW4tYnJpZGdlL3NjYW5uZXItaW50ZXJmYWNlcyc7XG5cbmltcG9ydCB7IEJsb2NrRW50aXR5LCBQUk9DRUVELCBQUk9DRVNTSU5HIH0gZnJvbSAnLi4vZW50aXRpZXMvYmxvY2tFbnRpdHknO1xuaW1wb3J0IHsgRXh0cmFjdG9yU3RhdHVzRW50aXR5IH0gZnJvbSAnLi4vZW50aXRpZXMvZXh0cmFjdG9yU3RhdHVzRW50aXR5JztcblxuZXhwb3J0IGNsYXNzIEJsb2NrRGJBY3Rpb24ge1xuICByZWFkb25seSBibG9ja1JlcG9zaXRvcnk6IFJlcG9zaXRvcnk8QmxvY2tFbnRpdHk+O1xuICByZWFkb25seSBleHRyYWN0b3JTdGF0dXNSZXBvc2l0b3J5OiBSZXBvc2l0b3J5PEV4dHJhY3RvclN0YXR1c0VudGl0eT47XG4gIHJlYWRvbmx5IGRhdGFTb3VyY2U6IERhdGFTb3VyY2U7XG4gIHJlYWRvbmx5IHNjYW5uZXJOYW1lOiBzdHJpbmc7XG4gIHJlYWRvbmx5IGxvZ2dlcjogQWJzdHJhY3RMb2dnZXI7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgZGF0YVNvdXJjZTogRGF0YVNvdXJjZSxcbiAgICBzY2FubmVyTmFtZTogc3RyaW5nLFxuICAgIGxvZ2dlcj86IEFic3RyYWN0TG9nZ2VyLFxuICApIHtcbiAgICB0aGlzLmJsb2NrUmVwb3NpdG9yeSA9IGRhdGFTb3VyY2UuZ2V0UmVwb3NpdG9yeShCbG9ja0VudGl0eSk7XG4gICAgdGhpcy5leHRyYWN0b3JTdGF0dXNSZXBvc2l0b3J5ID0gZGF0YVNvdXJjZS5nZXRSZXBvc2l0b3J5KFxuICAgICAgRXh0cmFjdG9yU3RhdHVzRW50aXR5LFxuICAgICk7XG4gICAgdGhpcy5kYXRhU291cmNlID0gZGF0YVNvdXJjZTtcbiAgICB0aGlzLnNjYW5uZXJOYW1lID0gc2Nhbm5lck5hbWU7XG4gICAgdGhpcy5sb2dnZXIgPSBsb2dnZXIgPyBsb2dnZXIgOiBuZXcgRHVtbXlMb2dnZXIoKTtcbiAgfVxuXG4gIHJlYWRvbmx5IG5hbWUgPSAoKSA9PiB0aGlzLnNjYW5uZXJOYW1lO1xuXG4gIC8qKlxuICAgKiBnZXQgbGFzdCBzYXZlZCBibG9ja1xuICAgKiBAcmV0dXJuIFByb21pc2U8QmxvY2tFbnRpdHkgb3IgdW5kZWZpbmVkPlxuICAgKi9cbiAgZ2V0TGFzdFNhdmVkQmxvY2sgPSBhc3luYyAoKTogUHJvbWlzZTxCbG9ja0VudGl0eSB8IHVuZGVmaW5lZD4gPT4ge1xuICAgIGNvbnN0IGxhc3RCbG9jayA9IGF3YWl0IHRoaXMuYmxvY2tSZXBvc2l0b3J5LmZpbmQoe1xuICAgICAgd2hlcmU6IHsgc3RhdHVzOiBQUk9DRUVELCBzY2FubmVyOiB0aGlzLm5hbWUoKSB9LFxuICAgICAgb3JkZXI6IHsgaGVpZ2h0OiAnREVTQycgfSxcbiAgICAgIHRha2U6IDEsXG4gICAgfSk7XG4gICAgaWYgKGxhc3RCbG9jay5sZW5ndGggIT09IDApIHtcbiAgICAgIHJldHVybiBsYXN0QmxvY2tbMF07XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICB9O1xuXG4gIC8qKlxuICAgKiBnZXQgbGFzdCBuIHN0b3JlZCBibG9ja3MgaW4gZGF0YWJhc2VcbiAgICogQHBhcmFtIHNraXBcbiAgICogQHBhcmFtIGNvdW50XG4gICAqL1xuICBnZXRMYXN0U2F2ZWRCbG9ja3MgPSBhc3luYyAoXG4gICAgc2tpcDogbnVtYmVyLFxuICAgIGNvdW50OiBudW1iZXIsXG4gICk6IFByb21pc2U8QXJyYXk8QmxvY2tFbnRpdHk+PiA9PiB7XG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuYmxvY2tSZXBvc2l0b3J5LmZpbmQoe1xuICAgICAgd2hlcmU6IHsgc3RhdHVzOiBQUk9DRUVELCBzY2FubmVyOiB0aGlzLm5hbWUoKSB9LFxuICAgICAgb3JkZXI6IHsgaGVpZ2h0OiAnREVTQycgfSxcbiAgICAgIHNraXA6IHNraXAsXG4gICAgICB0YWtlOiBjb3VudCxcbiAgICB9KTtcbiAgfTtcblxuICAvKipcbiAgICogZ2V0IGZpcnN0IHNhdmVkIGJsb2NrXG4gICAqIEByZXR1cm4gUHJvbWlzZTxCbG9ja0VudGl0eSBvciB1bmRlZmluZWQ+XG4gICAqL1xuICBnZXRGaXJzdFNhdmVkQmxvY2sgPSBhc3luYyAoKTogUHJvbWlzZTxCbG9ja0VudGl0eSB8IHVuZGVmaW5lZD4gPT4ge1xuICAgIGNvbnN0IGxhc3RCbG9jayA9IGF3YWl0IHRoaXMuYmxvY2tSZXBvc2l0b3J5LmZpbmQoe1xuICAgICAgd2hlcmU6IHsgc3RhdHVzOiBQUk9DRUVELCBzY2FubmVyOiB0aGlzLm5hbWUoKSB9LFxuICAgICAgb3JkZXI6IHsgaGVpZ2h0OiAnQVNDJyB9LFxuICAgICAgdGFrZTogMSxcbiAgICB9KTtcbiAgICBpZiAobGFzdEJsb2NrLmxlbmd0aCAhPT0gMCkge1xuICAgICAgcmV0dXJuIGxhc3RCbG9ja1swXTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gIH07XG5cbiAgLyoqXG4gICAqIGdldCBibG9jayBoYXNoIGFuZCBoZWlnaHRcbiAgICogQHBhcmFtIGhlaWdodFxuICAgKiBAcGFyYW0gc3RhdHVzXG4gICAqIEByZXR1cm4gUHJvbWlzZTxCbG9ja0VudGl0eXx1bmRlZmluZWQ+XG4gICAqL1xuICBnZXRCbG9ja0F0SGVpZ2h0ID0gYXN5bmMgKFxuICAgIGhlaWdodDogbnVtYmVyLFxuICAgIHN0YXR1czogc3RyaW5nID0gUFJPQ0VFRCxcbiAgKTogUHJvbWlzZTxCbG9ja0VudGl0eSB8IHVuZGVmaW5lZD4gPT4ge1xuICAgIGNvbnN0IGJsb2NrID0gYXdhaXQgdGhpcy5ibG9ja1JlcG9zaXRvcnkuZmluZE9uZUJ5KHtcbiAgICAgIHN0YXR1czogc3RhdHVzLFxuICAgICAgaGVpZ2h0OiBoZWlnaHQsXG4gICAgICBzY2FubmVyOiB0aGlzLm5hbWUoKSxcbiAgICB9KTtcbiAgICBpZiAoYmxvY2sgIT09IG51bGwpIHtcbiAgICAgIHJldHVybiBibG9jaztcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gIH07XG5cbiAgLyoqXG4gICAqIGdldCBibG9jayB3aXRoIGVudGVyZWQgYmxvY2toYXNoXG4gICAqIEBwYXJhbSBoYXNoXG4gICAqIEBwYXJhbSBzdGF0dXNcbiAgICovXG4gIGdldEJsb2NrV2l0aEhhc2ggPSBhc3luYyAoaGFzaDogc3RyaW5nLCBzdGF0dXM6IHN0cmluZyA9IFBST0NFRUQpID0+IHtcbiAgICByZXR1cm4gdGhpcy5ibG9ja1JlcG9zaXRvcnkuZmluZE9uZUJ5KHtcbiAgICAgIGhhc2g6IGhhc2gsXG4gICAgICBzdGF0dXM6IHN0YXR1cyxcbiAgICAgIHNjYW5uZXI6IHRoaXMubmFtZSgpLFxuICAgIH0pO1xuICB9O1xuXG4gIC8qKlxuICAgKiBpdCBkZWxldGVzIGV2ZXJ5IGJsb2NrIHRoYXQgbW9yZSB0aGFuIG9yIGVxdWFsIGhlaWdodFxuICAgKiBAcGFyYW0gaGVpZ2h0XG4gICAqIEByZXR1cm4gUHJvbWlzZTxEZWxldGVSZXN1bHQ+XG4gICAqL1xuICByZW1vdmVCbG9ja3NGcm9tSGVpZ2h0ID0gYXN5bmMgKGhlaWdodDogbnVtYmVyKTogUHJvbWlzZTxEZWxldGVSZXN1bHQ+ID0+IHtcbiAgICB0aGlzLmxvZ2dlci5kZWJ1ZyhgUmVtb3ZpbmcgYmxvY2tzIGZyb20gaGVpZ2h0ICR7aGVpZ2h0fWApO1xuICAgIHJldHVybiBhd2FpdCB0aGlzLmJsb2NrUmVwb3NpdG9yeS5kZWxldGUoe1xuICAgICAgaGVpZ2h0OiBNb3JlVGhhbk9yRXF1YWwoaGVpZ2h0KSxcbiAgICAgIHNjYW5uZXI6IHRoaXMubmFtZSgpLFxuICAgIH0pO1xuICB9O1xuXG4gIC8qKlxuICAgKiBzdG9yZSBhIGJsb2NrIGludG8gZGF0YWJhc2UuXG4gICAqIEBwYXJhbSBibG9ja1xuICAgKi9cbiAgc2F2ZUJsb2NrID0gYXN5bmMgKGJsb2NrOiBCbG9jayk6IFByb21pc2U8QmxvY2tFbnRpdHkgfCBib29sZWFuPiA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGluc3RhbmNlID0gYXdhaXQgdGhpcy5ibG9ja1JlcG9zaXRvcnkuZmluZE9uZUJ5KHtcbiAgICAgICAgaGVpZ2h0OiBibG9jay5oZWlnaHQsXG4gICAgICAgIHNjYW5uZXI6IHRoaXMubmFtZSgpLFxuICAgICAgfSk7XG4gICAgICBjb25zdCBkYXRlID0gbmV3IERhdGUoYmxvY2sudGltZXN0YW1wICogMTAwMCk7XG4gICAgICBjb25zdCBibG9ja0luZm8gPSB7XG4gICAgICAgIGhlaWdodDogYmxvY2suaGVpZ2h0LFxuICAgICAgICBoYXNoOiBibG9jay5oYXNoLFxuICAgICAgICBwYXJlbnRIYXNoOiBibG9jay5wYXJlbnRIYXNoLFxuICAgICAgICBzdGF0dXM6IFBST0NFU1NJTkcsXG4gICAgICAgIHNjYW5uZXI6IHRoaXMubmFtZSgpLFxuICAgICAgICBleHRyYTogYmxvY2suZXh0cmEsXG4gICAgICAgIHRpbWVzdGFtcDogYmxvY2sudGltZXN0YW1wLFxuICAgICAgICB5ZWFyOiBkYXRlLmdldEZ1bGxZZWFyKCksXG4gICAgICAgIG1vbnRoOiBkYXRlLmdldE1vbnRoKCkgKyAxLFxuICAgICAgICBkYXk6IGRhdGUuZ2V0RGF0ZSgpLFxuICAgICAgfTtcbiAgICAgIGlmICghaW5zdGFuY2UpIHtcbiAgICAgICAgdGhpcy5sb2dnZXIuZGVidWcoXG4gICAgICAgICAgYEluc2VydGluZyBibG9jayB3aXRoIGluZm86ICR7SlNPTi5zdHJpbmdpZnkoYmxvY2tJbmZvKX1gLFxuICAgICAgICApO1xuICAgICAgICBhd2FpdCB0aGlzLmJsb2NrUmVwb3NpdG9yeS5pbnNlcnQoYmxvY2tJbmZvKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMubG9nZ2VyLmRlYnVnKFxuICAgICAgICAgIGBVcGRhdGluZyBibG9jayB3aXRoIGluZm86ICR7SlNPTi5zdHJpbmdpZnkoYmxvY2tJbmZvKX1gLFxuICAgICAgICApO1xuICAgICAgICBhd2FpdCB0aGlzLmJsb2NrUmVwb3NpdG9yeS51cGRhdGUoXG4gICAgICAgICAgeyBoZWlnaHQ6IGJsb2NrLmhlaWdodCwgc2Nhbm5lcjogdGhpcy5uYW1lKCkgfSxcbiAgICAgICAgICBibG9ja0luZm8sXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICBjb25zdCByZXMgPSBhd2FpdCB0aGlzLmJsb2NrUmVwb3NpdG9yeS5maW5kT25lQnkoe1xuICAgICAgICBoZWlnaHQ6IGJsb2NrLmhlaWdodCxcbiAgICAgICAgc2Nhbm5lcjogdGhpcy5uYW1lKCksXG4gICAgICB9KTtcbiAgICAgIHJldHVybiByZXMgPyByZXMgOiBmYWxzZTtcbiAgICB9IGNhdGNoIChleHApIHtcbiAgICAgIHRoaXMubG9nZ2VyLmVycm9yKGBBbiBlcnJvciBvY2N1cnJlZCBkdXJpbmcgc2F2ZSBuZXcgYmxvY2s6ICR7ZXhwfWApO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfTtcblxuICAvKipcbiAgICogVXBkYXRlIHN0YXR1cyBvZiBhIGJsb2NrIHRvIHByb2NlZWRcbiAgICogQHBhcmFtIGhlaWdodDogaGVpZ2h0IG9mIGV4cGVjdGVkIGJsb2NrXG4gICAqL1xuICB1cGRhdGVCbG9ja1N0YXR1cyA9IGFzeW5jIChcbiAgICBoZWlnaHQ6IG51bWJlcixcbiAgICBibG9ja0hhc2g6IHN0cmluZyxcbiAgICBleHRyYWN0b3JJZHM6IHN0cmluZ1tdLFxuICApOiBQcm9taXNlPGJvb2xlYW4+ID0+IHtcbiAgICBsZXQgc3VjY2VzcyA9IHRydWU7XG4gICAgdGhpcy5sb2dnZXIuZGVidWcoXG4gICAgICBgQmxvY2sgYXQgaGVpZ2h0ICR7aGVpZ2h0fSBoYXMgYmVlbiBwcm9jZWVkIGluIHNjYW5uZXIgJHt0aGlzLm5hbWUoKX0sIHVwZGF0aW5nIHN0YXR1c2AsXG4gICAgKTtcbiAgICBjb25zdCBydW5uZXIgPSB0aGlzLmRhdGFTb3VyY2UuY3JlYXRlUXVlcnlSdW5uZXIoKTtcbiAgICBhd2FpdCBydW5uZXIuY29ubmVjdCgpO1xuICAgIGF3YWl0IHJ1bm5lci5zdGFydFRyYW5zYWN0aW9uKCk7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHJ1bm5lci5tYW5hZ2VyLmdldFJlcG9zaXRvcnkoQmxvY2tFbnRpdHkpLnVwZGF0ZShcbiAgICAgICAge1xuICAgICAgICAgIGhlaWdodDogaGVpZ2h0LFxuICAgICAgICAgIHN0YXR1czogUFJPQ0VTU0lORyxcbiAgICAgICAgICBzY2FubmVyOiB0aGlzLm5hbWUoKSxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIHN0YXR1czogUFJPQ0VFRCxcbiAgICAgICAgfSxcbiAgICAgICk7XG5cbiAgICAgIHRoaXMubG9nZ2VyLmRlYnVnKCdVcGRhdGluZyBleHRyYWN0b3JzIHN0YXR1cycsIHtcbiAgICAgICAgZXh0cmFjdG9ySWRzLFxuICAgICAgfSk7XG4gICAgICBhd2FpdCBydW5uZXIubWFuYWdlclxuICAgICAgICAuZ2V0UmVwb3NpdG9yeShFeHRyYWN0b3JTdGF0dXNFbnRpdHkpXG4gICAgICAgIC51cGRhdGUoXG4gICAgICAgICAgeyBleHRyYWN0b3JJZDogSW4oZXh0cmFjdG9ySWRzKSwgc2Nhbm5lcklkOiB0aGlzLm5hbWUoKSB9LFxuICAgICAgICAgIHsgdXBkYXRlSGVpZ2h0OiBoZWlnaHQsIHVwZGF0ZUJsb2NrSGFzaDogYmxvY2tIYXNoIH0sXG4gICAgICAgICk7XG4gICAgICBhd2FpdCBydW5uZXIuY29tbWl0VHJhbnNhY3Rpb24oKTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIGF3YWl0IHJ1bm5lci5yb2xsYmFja1RyYW5zYWN0aW9uKCk7XG4gICAgICBzdWNjZXNzID0gZmFsc2U7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIGF3YWl0IHJ1bm5lci5yZWxlYXNlKCk7XG4gICAgfVxuICAgIHJldHVybiBzdWNjZXNzO1xuICB9O1xuXG4gIC8qKlxuICAgKiBVcGRhdGUgc3RhdHVzIG9mIGEgYmxvY2sgdG8gcHJvY2Vzc2luZyBpbiBjYXNlIG9mIGZvcmtcbiAgICogQHBhcmFtIGhlaWdodDogaGVpZ2h0IG9mIGV4cGVjdGVkIGJsb2NrXG4gICAqL1xuICByZXZlcnRCbG9ja1N0YXR1cyA9IGFzeW5jIChcbiAgICBoZWlnaHQ6IG51bWJlcixcbiAgICBwYXJlbnRIYXNoOiBzdHJpbmcsXG4gICAgZXh0cmFjdG9ySWRzOiBzdHJpbmdbXSxcbiAgKTogUHJvbWlzZTxib29sZWFuPiA9PiB7XG4gICAgbGV0IHN1Y2Nlc3MgPSB0cnVlO1xuICAgIGNvbnN0IHJ1bm5lciA9IHRoaXMuZGF0YVNvdXJjZS5jcmVhdGVRdWVyeVJ1bm5lcigpO1xuICAgIGF3YWl0IHJ1bm5lci5jb25uZWN0KCk7XG4gICAgYXdhaXQgcnVubmVyLnN0YXJ0VHJhbnNhY3Rpb24oKTtcbiAgICB0cnkge1xuICAgICAgdGhpcy5sb2dnZXIuZGVidWcoYFJldmVydGluZyBibG9jayBzdGF0dXMgYXQgaGVpZ2h0ICR7aGVpZ2h0fWApO1xuICAgICAgYXdhaXQgcnVubmVyLm1hbmFnZXIuZ2V0UmVwb3NpdG9yeShCbG9ja0VudGl0eSkudXBkYXRlKFxuICAgICAgICB7XG4gICAgICAgICAgaGVpZ2h0OiBoZWlnaHQsXG4gICAgICAgICAgc3RhdHVzOiBQUk9DRUVELFxuICAgICAgICAgIHNjYW5uZXI6IHRoaXMubmFtZSgpLFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgc3RhdHVzOiBQUk9DRVNTSU5HLFxuICAgICAgICB9LFxuICAgICAgKTtcblxuICAgICAgdGhpcy5sb2dnZXIuZGVidWcoXG4gICAgICAgIGBSZXZlcnRpbmcgZXh0cmFjdG9ycyB1cGRhdGUgaGVpZ2h0IHRvIHByZXZpb3VzIGJsb2NrIGF0IGhlaWdodCAke1xuICAgICAgICAgIGhlaWdodCAtIDFcbiAgICAgICAgfWAsXG4gICAgICApO1xuICAgICAgYXdhaXQgcnVubmVyLm1hbmFnZXJcbiAgICAgICAgLmdldFJlcG9zaXRvcnkoRXh0cmFjdG9yU3RhdHVzRW50aXR5KVxuICAgICAgICAudXBkYXRlKFxuICAgICAgICAgIHsgZXh0cmFjdG9ySWQ6IEluKGV4dHJhY3RvcklkcyksIHNjYW5uZXJJZDogdGhpcy5uYW1lKCkgfSxcbiAgICAgICAgICB7IHVwZGF0ZUhlaWdodDogaGVpZ2h0IC0gMSwgdXBkYXRlQmxvY2tIYXNoOiBwYXJlbnRIYXNoIH0sXG4gICAgICAgICk7XG4gICAgICBhd2FpdCBydW5uZXIuY29tbWl0VHJhbnNhY3Rpb24oKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICB0aGlzLmxvZ2dlci53YXJuKGBBbiBFcnJvciBvY2N1cnJlZCB3aGlsZSByZXZlcnRpbmcgYmxvY2sgc3RhdHVzOiAke2V9YCk7XG4gICAgICBhd2FpdCBydW5uZXIucm9sbGJhY2tUcmFuc2FjdGlvbigpO1xuICAgICAgc3VjY2VzcyA9IGZhbHNlO1xuICAgIH0gZmluYWxseSB7XG4gICAgICBhd2FpdCBydW5uZXIucmVsZWFzZSgpO1xuICAgIH1cbiAgICByZXR1cm4gc3VjY2VzcztcbiAgfTtcblxuICAvKipcbiAgICogSW5zZXJ0IGEgbmV3bHkgaW5pdGlhbGl6ZWQgZXh0cmFjdG9yIG9yIHVwZGF0ZSBhbiBleGlzdGluZyBleHRyYWN0b3Igc3RhdHVzXG4gICAqIEBwYXJhbSBleHRyYWN0b3JJZFxuICAgKiBAcGFyYW0gaGVpZ2h0XG4gICAqIEByZXR1cm5zXG4gICAqL1xuICB1cGRhdGVPckluc2VydEV4dHJhY3RvclN0YXR1cyA9IGFzeW5jIChcbiAgICBleHRyYWN0b3JJZDogc3RyaW5nLFxuICAgIGhlaWdodDogbnVtYmVyLFxuICAgIGJsb2NrSGFzaDogc3RyaW5nLFxuICApID0+IHtcbiAgICB0aGlzLmxvZ2dlci5kZWJ1ZyhcbiAgICAgICdJbnNlcnRpbmcgbmV3IGV4dHJhY3RvciBzdGF0dXMgb3IgVXBkYXRpbmcgZXhpc3RpbmcgcmVzeW5jZWQgZXh0cmFjdG9yIHN0YXR1cycsXG4gICAgICB7XG4gICAgICAgIGV4dHJhY3RvcklkLFxuICAgICAgICBoZWlnaHQsXG4gICAgICAgIGJsb2NrSGFzaCxcbiAgICAgIH0sXG4gICAgKTtcbiAgICByZXR1cm4gYXdhaXQgdGhpcy5leHRyYWN0b3JTdGF0dXNSZXBvc2l0b3J5LnNhdmUoe1xuICAgICAgc2Nhbm5lcklkOiB0aGlzLm5hbWUoKSxcbiAgICAgIGV4dHJhY3RvcklkLFxuICAgICAgdXBkYXRlSGVpZ2h0OiBoZWlnaHQsXG4gICAgICB1cGRhdGVCbG9ja0hhc2g6IGJsb2NrSGFzaCxcbiAgICB9KTtcbiAgfTtcblxuICAvKipcbiAgICogUmV0dXJuIGV4dHJhY3RvcnNgIHN0YXR1cyBzcGVjaWZpZWQgYnkgaWRcbiAgICogQHBhcmFtIGV4dHJhY3Rvcklkc1xuICAgKiBAcmV0dXJucyBleHRyYWN0b3JzYCBzdGF0dXNcbiAgICovXG4gIGdldEV4dHJhY3RvcnNTdGF0dXMgPSBhc3luYyAoXG4gICAgZXh0cmFjdG9ySWRzOiBzdHJpbmdbXSxcbiAgKTogUHJvbWlzZTxFeHRyYWN0b3JTdGF0dXNFbnRpdHlbXT4gPT4ge1xuICAgIHJldHVybiBhd2FpdCB0aGlzLmV4dHJhY3RvclN0YXR1c1JlcG9zaXRvcnkuZmluZEJ5KHtcbiAgICAgIHNjYW5uZXJJZDogdGhpcy5uYW1lKCksXG4gICAgICBleHRyYWN0b3JJZDogSW4oZXh0cmFjdG9ySWRzKSxcbiAgICB9KTtcbiAgfTtcbn1cbiJdfQ==
|
|
310
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWN0aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vbGliL3NjYW5uZXIvYWN0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFFckMsT0FBTyxFQUFrQixXQUFXLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUM1RSxPQUFPLEVBR0wsZUFBZSxFQUVmLEVBQUUsR0FHSCxNQUFNLGdDQUFnQyxDQUFDO0FBR3hDLE9BQU8sRUFBRSxXQUFXLEVBQUUsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQzNFLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBRTFFLE1BQU0sT0FBTyxhQUFhO0lBQ2YsZUFBZSxDQUEwQjtJQUN6Qyx5QkFBeUIsQ0FBb0M7SUFDN0QsVUFBVSxDQUFhO0lBQ3ZCLFdBQVcsQ0FBUztJQUNwQixNQUFNLENBQWlCO0lBRWhDLFlBQ0UsVUFBc0IsRUFDdEIsV0FBbUIsRUFDbkIsTUFBdUI7UUFFdkIsSUFBSSxDQUFDLGVBQWUsR0FBRyxVQUFVLENBQUMsYUFBYSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQzdELElBQUksQ0FBQyx5QkFBeUIsR0FBRyxVQUFVLENBQUMsYUFBYSxDQUN2RCxxQkFBcUIsQ0FDdEIsQ0FBQztRQUNGLElBQUksQ0FBQyxVQUFVLEdBQUcsVUFBVSxDQUFDO1FBQzdCLElBQUksQ0FBQyxXQUFXLEdBQUcsV0FBVyxDQUFDO1FBQy9CLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksV0FBVyxFQUFFLENBQUM7SUFDcEQsQ0FBQztJQUVRLElBQUksR0FBRyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDO0lBRXZDOzs7T0FHRztJQUNILGlCQUFpQixHQUFHLEtBQUssSUFBc0MsRUFBRTtRQUMv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TUFBTSxJQUFJLENBQUMsZUFBZTthQUM5QyxrQkFBa0IsQ0FBQyxhQUFhLENBQUM7YUFDakMsU0FBUyxDQUFDLGtCQUFrQixFQUFFLE1BQU0sQ0FBQzthQUNyQyxLQUFLLENBQUMsNEJBQTRCLFVBQVUsR0FBRyxDQUFDO2FBQ2hELFFBQVEsQ0FBQyxvQ0FBb0MsRUFBRSxFQUFFLFdBQVcsRUFBRSxDQUFDO2FBQy9ELFFBQVEsQ0FBQyw2Q0FBNkMsRUFBRTtZQUN2RCxrQkFBa0I7U0FDbkIsQ0FBQzthQUNELGFBQWEsQ0FBQyxFQUFFLEdBQUcsVUFBVSxFQUFFLENBQUM7YUFDaEMsUUFBUSxDQUFDLElBQUksQ0FBQzthQUNkLE9BQU8sQ0FBQyxvQkFBb0IsRUFBRSxLQUFLLENBQUM7YUFDcEMsSUFBSSxDQUFDLGlCQUFpQixDQUFDO2FBQ3ZCLFVBQVUsRUFBRSxDQUFDO1FBRWhCLE1BQU0saUJBQWlCLEdBQUcsY0FBYyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBRWhFLE1BQU0sSUFBSSxDQUFDLGVBQWUsQ0FBQyxNQUFNLENBQUM7WUFDaEMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxpQkFBaUIsQ0FBQztTQUM1QixDQUFDLENBQUM7UUFFSCxPQUFPLGlCQUFpQixDQUFDO0lBQzNCLENBQUMsQ0FBQztDQUNIIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgdW5pcXVlSWQgfSBmcm9tICdsb2Rhc2gtZXMnO1xuXG5pbXBvcnQgeyBBYnN0cmFjdExvZ2dlciwgRHVtbXlMb2dnZXIgfSBmcm9tICdAcm9zZW4tYnJpZGdlL2Fic3RyYWN0LWxvZ2dlcic7XG5pbXBvcnQge1xuICBEYXRhU291cmNlLFxuICBEZWxldGVSZXN1bHQsXG4gIE1vcmVUaGFuT3JFcXVhbCxcbiAgUmVwb3NpdG9yeSxcbiAgSW4sXG4gIE9iamVjdExpdGVyYWwsXG4gIFNlbGVjdFF1ZXJ5QnVpbGRlcixcbn0gZnJvbSAnQHJvc2VuLWJyaWRnZS9leHRlbmRlZC10eXBlb3JtJztcbmltcG9ydCB7IEJsb2NrIH0gZnJvbSAnQHJvc2VuLWJyaWRnZS9zY2FubmVyLWludGVyZmFjZXMnO1xuXG5pbXBvcnQgeyBCbG9ja0VudGl0eSwgUFJPQ0VFRCwgUFJPQ0VTU0lORyB9IGZyb20gJy4uL2VudGl0aWVzL2Jsb2NrRW50aXR5JztcbmltcG9ydCB7IEV4dHJhY3RvclN0YXR1c0VudGl0eSB9IGZyb20gJy4uL2VudGl0aWVzL2V4dHJhY3RvclN0YXR1c0VudGl0eSc7XG5cbmV4cG9ydCBjbGFzcyBCbG9ja0RiQWN0aW9uIHtcbiAgcmVhZG9ubHkgYmxvY2tSZXBvc2l0b3J5OiBSZXBvc2l0b3J5PEJsb2NrRW50aXR5PjtcbiAgcmVhZG9ubHkgZXh0cmFjdG9yU3RhdHVzUmVwb3NpdG9yeTogUmVwb3NpdG9yeTxFeHRyYWN0b3JTdGF0dXNFbnRpdHk+O1xuICByZWFkb25seSBkYXRhU291cmNlOiBEYXRhU291cmNlO1xuICByZWFkb25seSBzY2FubmVyTmFtZTogc3RyaW5nO1xuICByZWFkb25seSBsb2dnZXI6IEFic3RyYWN0TG9nZ2VyO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIGRhdGFTb3VyY2U6IERhdGFTb3VyY2UsXG4gICAgc2Nhbm5lck5hbWU6IHN0cmluZyxcbiAgICBsb2dnZXI/OiBBYnN0cmFjdExvZ2dlcixcbiAgKSB7XG4gICAgdGhpcy5ibG9ja1JlcG9zaXRvcnkgPSBkYXRhU291cmNlLmdldFJlcG9zaXRvcnkoQmxvY2tFbnRpdHkpO1xuICAgIHRoaXMuZXh0cmFjdG9yU3RhdHVzUmVwb3NpdG9yeSA9IGRhdGFTb3VyY2UuZ2V0UmVwb3NpdG9yeShcbiAgICAgIEV4dHJhY3RvclN0YXR1c0VudGl0eSxcbiAgICApO1xuICAgIHRoaXMuZGF0YVNvdXJjZSA9IGRhdGFTb3VyY2U7XG4gICAgdGhpcy5zY2FubmVyTmFtZSA9IHNjYW5uZXJOYW1lO1xuICAgIHRoaXMubG9nZ2VyID0gbG9nZ2VyID8gbG9nZ2VyIDogbmV3IER1bW15TG9nZ2VyKCk7XG4gIH1cblxuICByZWFkb25seSBuYW1lID0gKCkgPT4gdGhpcy5zY2FubmVyTmFtZTtcblxuICAvKipcbiAgICogZ2V0IGxhc3Qgc2F2ZWQgYmxvY2tcbiAgICogQHJldHVybiBQcm9taXNlPEJsb2NrRW50aXR5IG9yIHVuZGVmaW5lZD5cbiAgICovXG4gIGdldExhc3RTYXZlZEJsb2NrID0gYXN5bmMgKCk6IFByb21pc2U8QmxvY2tFbnRpdHkgfCB1bmRlZmluZWQ+ID0+IHtcbiAgICBjb25zdCBsYXN0QmxvY2sgPSBhd2FpdCB0aGlzLmJsb2NrUmVwb3NpdG9yeS5maW5kKHtcbiAgICAgIHdoZXJlOiB7IHN0YXR1czogUFJPQ0VFRCwgc2Nhbm5lcjogdGhpcy5uYW1lKCkgfSxcbiAgICAgIG9yZGVyOiB7IGhlaWdodDogJ0RFU0MnIH0sXG4gICAgICB0YWtlOiAxLFxuICAgIH0pO1xuICAgIGlmIChsYXN0QmxvY2subGVuZ3RoICE9PSAwKSB7XG4gICAgICByZXR1cm4gbGFzdEJsb2NrWzBdO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgfTtcblxuICAvKipcbiAgICogZ2V0IGxhc3QgbiBzdG9yZWQgYmxvY2tzIGluIGRhdGFiYXNlXG4gICAqIEBwYXJhbSBza2lwXG4gICAqIEBwYXJhbSBjb3VudFxuICAgKi9cbiAgZ2V0TGFzdFNhdmVkQmxvY2tzID0gYXN5bmMgKFxuICAgIHNraXA6IG51bWJlcixcbiAgICBjb3VudDogbnVtYmVyLFxuICApOiBQcm9taXNlPEFycmF5PEJsb2NrRW50aXR5Pj4gPT4ge1xuICAgIHJldHVybiBhd2FpdCB0aGlzLmJsb2NrUmVwb3NpdG9yeS5maW5kKHtcbiAgICAgIHdoZXJlOiB7IHN0YXR1czogUFJPQ0VFRCwgc2Nhbm5lcjogdGhpcy5uYW1lKCkgfSxcbiAgICAgIG9yZGVyOiB7IGhlaWdodDogJ0RFU0MnIH0sXG4gICAgICBza2lwOiBza2lwLFxuICAgICAgdGFrZTogY291bnQsXG4gICAgfSk7XG4gIH07XG5cbiAgLyoqXG4gICAqIGdldCBmaXJzdCBzYXZlZCBibG9ja1xuICAgKiBAcmV0dXJuIFByb21pc2U8QmxvY2tFbnRpdHkgb3IgdW5kZWZpbmVkPlxuICAgKi9cbiAgZ2V0Rmlyc3RTYXZlZEJsb2NrID0gYXN5bmMgKCk6IFByb21pc2U8QmxvY2tFbnRpdHkgfCB1bmRlZmluZWQ+ID0+IHtcbiAgICBjb25zdCBsYXN0QmxvY2sgPSBhd2FpdCB0aGlzLmJsb2NrUmVwb3NpdG9yeS5maW5kKHtcbiAgICAgIHdoZXJlOiB7IHN0YXR1czogUFJPQ0VFRCwgc2Nhbm5lcjogdGhpcy5uYW1lKCkgfSxcbiAgICAgIG9yZGVyOiB7IGhlaWdodDogJ0FTQycgfSxcbiAgICAgIHRha2U6IDEsXG4gICAgfSk7XG4gICAgaWYgKGxhc3RCbG9jay5sZW5ndGggIT09IDApIHtcbiAgICAgIHJldHVybiBsYXN0QmxvY2tbMF07XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICB9O1xuXG4gIC8qKlxuICAgKiBnZXQgYmxvY2sgaGFzaCBhbmQgaGVpZ2h0XG4gICAqIEBwYXJhbSBoZWlnaHRcbiAgICogQHBhcmFtIHN0YXR1c1xuICAgKiBAcmV0dXJuIFByb21pc2U8QmxvY2tFbnRpdHl8dW5kZWZpbmVkPlxuICAgKi9cbiAgZ2V0QmxvY2tBdEhlaWdodCA9IGFzeW5jIChcbiAgICBoZWlnaHQ6IG51bWJlcixcbiAgICBzdGF0dXM6IHN0cmluZyA9IFBST0NFRUQsXG4gICk6IFByb21pc2U8QmxvY2tFbnRpdHkgfCB1bmRlZmluZWQ+ID0+IHtcbiAgICBjb25zdCBibG9jayA9IGF3YWl0IHRoaXMuYmxvY2tSZXBvc2l0b3J5LmZpbmRPbmVCeSh7XG4gICAgICBzdGF0dXM6IHN0YXR1cyxcbiAgICAgIGhlaWdodDogaGVpZ2h0LFxuICAgICAgc2Nhbm5lcjogdGhpcy5uYW1lKCksXG4gICAgfSk7XG4gICAgaWYgKGJsb2NrICE9PSBudWxsKSB7XG4gICAgICByZXR1cm4gYmxvY2s7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICB9O1xuXG4gIC8qKlxuICAgKiBnZXQgYmxvY2sgd2l0aCBlbnRlcmVkIGJsb2NraGFzaFxuICAgKiBAcGFyYW0gaGFzaFxuICAgKiBAcGFyYW0gc3RhdHVzXG4gICAqL1xuICBnZXRCbG9ja1dpdGhIYXNoID0gYXN5bmMgKGhhc2g6IHN0cmluZywgc3RhdHVzOiBzdHJpbmcgPSBQUk9DRUVEKSA9PiB7XG4gICAgcmV0dXJuIHRoaXMuYmxvY2tSZXBvc2l0b3J5LmZpbmRPbmVCeSh7XG4gICAgICBoYXNoOiBoYXNoLFxuICAgICAgc3RhdHVzOiBzdGF0dXMsXG4gICAgICBzY2FubmVyOiB0aGlzLm5hbWUoKSxcbiAgICB9KTtcbiAgfTtcblxuICAvKipcbiAgICogaXQgZGVsZXRlcyBldmVyeSBibG9jayB0aGF0IG1vcmUgdGhhbiBvciBlcXVhbCBoZWlnaHRcbiAgICogQHBhcmFtIGhlaWdodFxuICAgKiBAcmV0dXJuIFByb21pc2U8RGVsZXRlUmVzdWx0PlxuICAgKi9cbiAgcmVtb3ZlQmxvY2tzRnJvbUhlaWdodCA9IGFzeW5jIChoZWlnaHQ6IG51bWJlcik6IFByb21pc2U8RGVsZXRlUmVzdWx0PiA9PiB7XG4gICAgdGhpcy5sb2dnZXIuZGVidWcoYFJlbW92aW5nIGJsb2NrcyBmcm9tIGhlaWdodCAke2hlaWdodH1gKTtcbiAgICByZXR1cm4gYXdhaXQgdGhpcy5ibG9ja1JlcG9zaXRvcnkuZGVsZXRlKHtcbiAgICAgIGhlaWdodDogTW9yZVRoYW5PckVxdWFsKGhlaWdodCksXG4gICAgICBzY2FubmVyOiB0aGlzLm5hbWUoKSxcbiAgICB9KTtcbiAgfTtcblxuICAvKipcbiAgICogc3RvcmUgYSBibG9jayBpbnRvIGRhdGFiYXNlLlxuICAgKiBAcGFyYW0gYmxvY2tcbiAgICovXG4gIHNhdmVCbG9jayA9IGFzeW5jIChibG9jazogQmxvY2spOiBQcm9taXNlPEJsb2NrRW50aXR5IHwgYm9vbGVhbj4gPT4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBpbnN0YW5jZSA9IGF3YWl0IHRoaXMuYmxvY2tSZXBvc2l0b3J5LmZpbmRPbmVCeSh7XG4gICAgICAgIGhlaWdodDogYmxvY2suaGVpZ2h0LFxuICAgICAgICBzY2FubmVyOiB0aGlzLm5hbWUoKSxcbiAgICAgIH0pO1xuICAgICAgY29uc3QgZGF0ZSA9IG5ldyBEYXRlKGJsb2NrLnRpbWVzdGFtcCAqIDEwMDApO1xuICAgICAgY29uc3QgYmxvY2tJbmZvID0ge1xuICAgICAgICBoZWlnaHQ6IGJsb2NrLmhlaWdodCxcbiAgICAgICAgaGFzaDogYmxvY2suaGFzaCxcbiAgICAgICAgcGFyZW50SGFzaDogYmxvY2sucGFyZW50SGFzaCxcbiAgICAgICAgc3RhdHVzOiBQUk9DRVNTSU5HLFxuICAgICAgICBzY2FubmVyOiB0aGlzLm5hbWUoKSxcbiAgICAgICAgZXh0cmE6IGJsb2NrLmV4dHJhLFxuICAgICAgICB0aW1lc3RhbXA6IGJsb2NrLnRpbWVzdGFtcCxcbiAgICAgICAgeWVhcjogZGF0ZS5nZXRGdWxsWWVhcigpLFxuICAgICAgICBtb250aDogZGF0ZS5nZXRNb250aCgpICsgMSxcbiAgICAgICAgZGF5OiBkYXRlLmdldERhdGUoKSxcbiAgICAgIH07XG4gICAgICBpZiAoIWluc3RhbmNlKSB7XG4gICAgICAgIHRoaXMubG9nZ2VyLmRlYnVnKFxuICAgICAgICAgIGBJbnNlcnRpbmcgYmxvY2sgd2l0aCBpbmZvOiAke0pTT04uc3RyaW5naWZ5KGJsb2NrSW5mbyl9YCxcbiAgICAgICAgKTtcbiAgICAgICAgYXdhaXQgdGhpcy5ibG9ja1JlcG9zaXRvcnkuaW5zZXJ0KGJsb2NrSW5mbyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmxvZ2dlci5kZWJ1ZyhcbiAgICAgICAgICBgVXBkYXRpbmcgYmxvY2sgd2l0aCBpbmZvOiAke0pTT04uc3RyaW5naWZ5KGJsb2NrSW5mbyl9YCxcbiAgICAgICAgKTtcbiAgICAgICAgYXdhaXQgdGhpcy5ibG9ja1JlcG9zaXRvcnkudXBkYXRlKFxuICAgICAgICAgIHsgaGVpZ2h0OiBibG9jay5oZWlnaHQsIHNjYW5uZXI6IHRoaXMubmFtZSgpIH0sXG4gICAgICAgICAgYmxvY2tJbmZvLFxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgY29uc3QgcmVzID0gYXdhaXQgdGhpcy5ibG9ja1JlcG9zaXRvcnkuZmluZE9uZUJ5KHtcbiAgICAgICAgaGVpZ2h0OiBibG9jay5oZWlnaHQsXG4gICAgICAgIHNjYW5uZXI6IHRoaXMubmFtZSgpLFxuICAgICAgfSk7XG4gICAgICByZXR1cm4gcmVzID8gcmVzIDogZmFsc2U7XG4gICAgfSBjYXRjaCAoZXhwKSB7XG4gICAgICB0aGlzLmxvZ2dlci5lcnJvcihgQW4gZXJyb3Igb2NjdXJyZWQgZHVyaW5nIHNhdmUgbmV3IGJsb2NrOiAke2V4cH1gKTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH07XG5cbiAgLyoqXG4gICAqIFVwZGF0ZSBzdGF0dXMgb2YgYSBibG9jayB0byBwcm9jZWVkXG4gICAqIEBwYXJhbSBoZWlnaHQ6IGhlaWdodCBvZiBleHBlY3RlZCBibG9ja1xuICAgKi9cbiAgdXBkYXRlQmxvY2tTdGF0dXMgPSBhc3luYyAoXG4gICAgaGVpZ2h0OiBudW1iZXIsXG4gICAgYmxvY2tIYXNoOiBzdHJpbmcsXG4gICAgZXh0cmFjdG9ySWRzOiBzdHJpbmdbXSxcbiAgKTogUHJvbWlzZTxib29sZWFuPiA9PiB7XG4gICAgbGV0IHN1Y2Nlc3MgPSB0cnVlO1xuICAgIHRoaXMubG9nZ2VyLmRlYnVnKFxuICAgICAgYEJsb2NrIGF0IGhlaWdodCAke2hlaWdodH0gaGFzIGJlZW4gcHJvY2VlZCBpbiBzY2FubmVyICR7dGhpcy5uYW1lKCl9LCB1cGRhdGluZyBzdGF0dXNgLFxuICAgICk7XG4gICAgY29uc3QgcnVubmVyID0gdGhpcy5kYXRhU291cmNlLmNyZWF0ZVF1ZXJ5UnVubmVyKCk7XG4gICAgYXdhaXQgcnVubmVyLmNvbm5lY3QoKTtcbiAgICBhd2FpdCBydW5uZXIuc3RhcnRUcmFuc2FjdGlvbigpO1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCBydW5uZXIubWFuYWdlci5nZXRSZXBvc2l0b3J5KEJsb2NrRW50aXR5KS51cGRhdGUoXG4gICAgICAgIHtcbiAgICAgICAgICBoZWlnaHQ6IGhlaWdodCxcbiAgICAgICAgICBzdGF0dXM6IFBST0NFU1NJTkcsXG4gICAgICAgICAgc2Nhbm5lcjogdGhpcy5uYW1lKCksXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBzdGF0dXM6IFBST0NFRUQsXG4gICAgICAgIH0sXG4gICAgICApO1xuXG4gICAgICB0aGlzLmxvZ2dlci5kZWJ1ZygnVXBkYXRpbmcgZXh0cmFjdG9ycyBzdGF0dXMnLCB7XG4gICAgICAgIGV4dHJhY3RvcklkcyxcbiAgICAgIH0pO1xuICAgICAgYXdhaXQgcnVubmVyLm1hbmFnZXJcbiAgICAgICAgLmdldFJlcG9zaXRvcnkoRXh0cmFjdG9yU3RhdHVzRW50aXR5KVxuICAgICAgICAudXBkYXRlKFxuICAgICAgICAgIHsgZXh0cmFjdG9ySWQ6IEluKGV4dHJhY3RvcklkcyksIHNjYW5uZXJJZDogdGhpcy5uYW1lKCkgfSxcbiAgICAgICAgICB7IHVwZGF0ZUhlaWdodDogaGVpZ2h0LCB1cGRhdGVCbG9ja0hhc2g6IGJsb2NrSGFzaCB9LFxuICAgICAgICApO1xuICAgICAgYXdhaXQgcnVubmVyLmNvbW1pdFRyYW5zYWN0aW9uKCk7XG4gICAgfSBjYXRjaCB7XG4gICAgICBhd2FpdCBydW5uZXIucm9sbGJhY2tUcmFuc2FjdGlvbigpO1xuICAgICAgc3VjY2VzcyA9IGZhbHNlO1xuICAgIH0gZmluYWxseSB7XG4gICAgICBhd2FpdCBydW5uZXIucmVsZWFzZSgpO1xuICAgIH1cbiAgICByZXR1cm4gc3VjY2VzcztcbiAgfTtcblxuICAvKipcbiAgICogVXBkYXRlIHN0YXR1cyBvZiBhIGJsb2NrIHRvIHByb2Nlc3NpbmcgaW4gY2FzZSBvZiBmb3JrXG4gICAqIEBwYXJhbSBoZWlnaHQ6IGhlaWdodCBvZiBleHBlY3RlZCBibG9ja1xuICAgKi9cbiAgcmV2ZXJ0QmxvY2tTdGF0dXMgPSBhc3luYyAoXG4gICAgaGVpZ2h0OiBudW1iZXIsXG4gICAgcGFyZW50SGFzaDogc3RyaW5nLFxuICAgIGV4dHJhY3Rvcklkczogc3RyaW5nW10sXG4gICk6IFByb21pc2U8Ym9vbGVhbj4gPT4ge1xuICAgIGxldCBzdWNjZXNzID0gdHJ1ZTtcbiAgICBjb25zdCBydW5uZXIgPSB0aGlzLmRhdGFTb3VyY2UuY3JlYXRlUXVlcnlSdW5uZXIoKTtcbiAgICBhd2FpdCBydW5uZXIuY29ubmVjdCgpO1xuICAgIGF3YWl0IHJ1bm5lci5zdGFydFRyYW5zYWN0aW9uKCk7XG4gICAgdHJ5IHtcbiAgICAgIHRoaXMubG9nZ2VyLmRlYnVnKGBSZXZlcnRpbmcgYmxvY2sgc3RhdHVzIGF0IGhlaWdodCAke2hlaWdodH1gKTtcbiAgICAgIGF3YWl0IHJ1bm5lci5tYW5hZ2VyLmdldFJlcG9zaXRvcnkoQmxvY2tFbnRpdHkpLnVwZGF0ZShcbiAgICAgICAge1xuICAgICAgICAgIGhlaWdodDogaGVpZ2h0LFxuICAgICAgICAgIHN0YXR1czogUFJPQ0VFRCxcbiAgICAgICAgICBzY2FubmVyOiB0aGlzLm5hbWUoKSxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIHN0YXR1czogUFJPQ0VTU0lORyxcbiAgICAgICAgfSxcbiAgICAgICk7XG5cbiAgICAgIHRoaXMubG9nZ2VyLmRlYnVnKFxuICAgICAgICBgUmV2ZXJ0aW5nIGV4dHJhY3RvcnMgdXBkYXRlIGhlaWdodCB0byBwcmV2aW91cyBibG9jayBhdCBoZWlnaHQgJHtcbiAgICAgICAgICBoZWlnaHQgLSAxXG4gICAgICAgIH1gLFxuICAgICAgKTtcbiAgICAgIGF3YWl0IHJ1bm5lci5tYW5hZ2VyXG4gICAgICAgIC5nZXRSZXBvc2l0b3J5KEV4dHJhY3RvclN0YXR1c0VudGl0eSlcbiAgICAgICAgLnVwZGF0ZShcbiAgICAgICAgICB7IGV4dHJhY3RvcklkOiBJbihleHRyYWN0b3JJZHMpLCBzY2FubmVySWQ6IHRoaXMubmFtZSgpIH0sXG4gICAgICAgICAgeyB1cGRhdGVIZWlnaHQ6IGhlaWdodCAtIDEsIHVwZGF0ZUJsb2NrSGFzaDogcGFyZW50SGFzaCB9LFxuICAgICAgICApO1xuICAgICAgYXdhaXQgcnVubmVyLmNvbW1pdFRyYW5zYWN0aW9uKCk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgdGhpcy5sb2dnZXIud2FybihgQW4gRXJyb3Igb2NjdXJyZWQgd2hpbGUgcmV2ZXJ0aW5nIGJsb2NrIHN0YXR1czogJHtlfWApO1xuICAgICAgYXdhaXQgcnVubmVyLnJvbGxiYWNrVHJhbnNhY3Rpb24oKTtcbiAgICAgIHN1Y2Nlc3MgPSBmYWxzZTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgYXdhaXQgcnVubmVyLnJlbGVhc2UoKTtcbiAgICB9XG4gICAgcmV0dXJuIHN1Y2Nlc3M7XG4gIH07XG5cbiAgLyoqXG4gICAqIEluc2VydCBhIG5ld2x5IGluaXRpYWxpemVkIGV4dHJhY3RvciBvciB1cGRhdGUgYW4gZXhpc3RpbmcgZXh0cmFjdG9yIHN0YXR1c1xuICAgKiBAcGFyYW0gZXh0cmFjdG9ySWRcbiAgICogQHBhcmFtIGhlaWdodFxuICAgKiBAcmV0dXJuc1xuICAgKi9cbiAgdXBkYXRlT3JJbnNlcnRFeHRyYWN0b3JTdGF0dXMgPSBhc3luYyAoXG4gICAgZXh0cmFjdG9ySWQ6IHN0cmluZyxcbiAgICBoZWlnaHQ6IG51bWJlcixcbiAgICBibG9ja0hhc2g6IHN0cmluZyxcbiAgKSA9PiB7XG4gICAgdGhpcy5sb2dnZXIuZGVidWcoXG4gICAgICAnSW5zZXJ0aW5nIG5ldyBleHRyYWN0b3Igc3RhdHVzIG9yIFVwZGF0aW5nIGV4aXN0aW5nIHJlc3luY2VkIGV4dHJhY3RvciBzdGF0dXMnLFxuICAgICAge1xuICAgICAgICBleHRyYWN0b3JJZCxcbiAgICAgICAgaGVpZ2h0LFxuICAgICAgICBibG9ja0hhc2gsXG4gICAgICB9LFxuICAgICk7XG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuZXh0cmFjdG9yU3RhdHVzUmVwb3NpdG9yeS5zYXZlKHtcbiAgICAgIHNjYW5uZXJJZDogdGhpcy5uYW1lKCksXG4gICAgICBleHRyYWN0b3JJZCxcbiAgICAgIHVwZGF0ZUhlaWdodDogaGVpZ2h0LFxuICAgICAgdXBkYXRlQmxvY2tIYXNoOiBibG9ja0hhc2gsXG4gICAgfSk7XG4gIH07XG5cbiAgLyoqXG4gICAqIFJldHVybiBleHRyYWN0b3JzYCBzdGF0dXMgc3BlY2lmaWVkIGJ5IGlkXG4gICAqIEBwYXJhbSBleHRyYWN0b3JJZHNcbiAgICogQHJldHVybnMgZXh0cmFjdG9yc2Agc3RhdHVzXG4gICAqL1xuICBnZXRFeHRyYWN0b3JzU3RhdHVzID0gYXN5bmMgKFxuICAgIGV4dHJhY3Rvcklkczogc3RyaW5nW10sXG4gICk6IFByb21pc2U8RXh0cmFjdG9yU3RhdHVzRW50aXR5W10+ID0+IHtcbiAgICByZXR1cm4gYXdhaXQgdGhpcy5leHRyYWN0b3JTdGF0dXNSZXBvc2l0b3J5LmZpbmRCeSh7XG4gICAgICBzY2FubmVySWQ6IHRoaXMubmFtZSgpLFxuICAgICAgZXh0cmFjdG9ySWQ6IEluKGV4dHJhY3RvcklkcyksXG4gICAgfSk7XG4gIH07XG5cbiAgLyoqXG4gICAqIEdlbmVyYXRlcyBxdWVyaWVzIHdpdGggdW5pcXVlIHBhcmFtZXRlcnNcbiAgICpcbiAgICogQHBhcmFtIHF1ZXJ5QnVpbGRlcnNcbiAgICogQHJldHVybnMgcXVlcmllcyBhbmQgdGhlaXIgdW5pcXVlIHBhcmFtZXRlcnNcbiAgICovXG4gIGdlbmVyYXRlUXVlcmllc1dpdGhVbmlxdWVQYXJhbXMgPSAoXG4gICAgcXVlcnlCdWlsZGVyczogU2VsZWN0UXVlcnlCdWlsZGVyPE9iamVjdExpdGVyYWw+W10sXG4gICk6IHsgcXVlcnlQYXJ0czogc3RyaW5nW107IHBhcmFtZXRlcnM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+IH0gPT4ge1xuICAgIGxldCBxdWVyeVBhcnRzOiBzdHJpbmdbXSA9IFtdLFxuICAgICAgcGFyYW1ldGVyczogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSB7fTtcblxuICAgIHF1ZXJ5QnVpbGRlcnMuZm9yRWFjaCgocXVlcnlCdWlsZGVyKSA9PiB7XG4gICAgICBjb25zdCBwcmVmaXggPSB1bmlxdWVJZCgncXVlcnknKTtcblxuICAgICAgY29uc3QgcXVlcnlXaXRoVW5pcXVlUGFyYW1zID0gcXVlcnlCdWlsZGVyXG4gICAgICAgIC5nZXRRdWVyeSgpXG4gICAgICAgIC5yZXBsYWNlKC86KFxcdyspL2csIChfLCBrZXkpID0+IGA6JHtwcmVmaXh9JHtrZXl9YCk7XG5cbiAgICAgIHF1ZXJ5UGFydHMucHVzaChxdWVyeVdpdGhVbmlxdWVQYXJhbXMpO1xuXG4gICAgICBjb25zdCBxdWVyeVBhcmFtcyA9IHF1ZXJ5QnVpbGRlci5nZXRQYXJhbWV0ZXJzKCk7XG4gICAgICBjb25zdCBwcmVmaXhlZFBhcmFtcyA9IE9iamVjdC5mcm9tRW50cmllcyhcbiAgICAgICAgT2JqZWN0LmVudHJpZXMocXVlcnlQYXJhbXMpLm1hcCgoW2tleSwgdmFsdWVdKSA9PiBbXG4gICAgICAgICAgYCR7cHJlZml4fSR7a2V5fWAsXG4gICAgICAgICAgdmFsdWUsXG4gICAgICAgIF0pLFxuICAgICAgKTtcbiAgICAgIHBhcmFtZXRlcnMgPSB7IC4uLnBhcmFtZXRlcnMsIC4uLnByZWZpeGVkUGFyYW1zIH07XG4gICAgfSk7XG5cbiAgICByZXR1cm4geyBxdWVyeVBhcnRzLCBwYXJhbWV0ZXJzIH07XG4gIH07XG5cbiAgLyoqXG4gICAqIFJlbW92ZXMgdW51c2VkIGJsb2NrcyBiYXNlZCBvbiB0aGUgcXVlcmllcyByZXRyaWV2aW5nIHVzZWQgYmxvY2tzXG4gICAqXG4gICAqIEBwYXJhbSBleHRyYWN0b3JVc2VkQmxvY2tzUXVlcmllc1xuICAgKiBAcGFyYW0gZGVsZXRlZEJsb2NrQ291bnRcbiAgICogQHBhcmFtIHNjYW5uZXJOYW1lXG4gICAqIEBwYXJhbSBibG9ja0FnZVRocmVzaG9sZFxuICAgKiBAcGFyYW0gbGFzdFNhdmVkQmxvY2tcbiAgICogQHJldHVybnMgVGhlIGhhc2hlcyBvZiB0aGUgcmVtb3ZlZCB1bnVzZWQgYmxvY2tzXG4gICAqL1xuICByZW1vdmVVbnVzZWRCbG9ja3NJbkJhdGNoZXMgPSBhc3luYyAoXG4gICAgZXh0cmFjdG9yVXNlZEJsb2Nrc1F1ZXJpZXM6IFNlbGVjdFF1ZXJ5QnVpbGRlcjxPYmplY3RMaXRlcmFsPltdLFxuICAgIGRlbGV0ZWRCbG9ja0NvdW50OiBudW1iZXIsXG4gICAgc2Nhbm5lck5hbWU6IHN0cmluZyxcbiAgICBibG9ja0FnZVRocmVzaG9sZDogbnVtYmVyLFxuICAgIGxhc3RTYXZlZEJsb2NrOiBCbG9ja0VudGl0eSB8IHVuZGVmaW5lZCxcbiAgKTogUHJvbWlzZTxzdHJpbmdbXT4gPT4ge1xuICAgIGNvbnN0IHsgcXVlcnlQYXJ0cywgcGFyYW1ldGVycyB9ID0gdGhpcy5nZW5lcmF0ZVF1ZXJpZXNXaXRoVW5pcXVlUGFyYW1zKFxuICAgICAgZXh0cmFjdG9yVXNlZEJsb2Nrc1F1ZXJpZXMsXG4gICAgKTtcblxuICAgIGNvbnN0IHVuaW9uUXVlcnkgPSBxdWVyeVBhcnRzLm1hcCgoc3FsKSA9PiBgJHtzcWx9YCkuam9pbignIFVOSU9OICcpO1xuICAgIGNvbnN0IHRocmVzaG9sZFRpbWVzdGFtcCA9IGxhc3RTYXZlZEJsb2NrXG4gICAgICA/IGxhc3RTYXZlZEJsb2NrLnRpbWVzdGFtcCAtIGJsb2NrQWdlVGhyZXNob2xkXG4gICAgICA6IDA7XG5cbiAgICBjb25zdCBibG9ja3NUb0RlbGV0ZSA9IGF3YWl0IHRoaXMuYmxvY2tSZXBvc2l0b3J5XG4gICAgICAuY3JlYXRlUXVlcnlCdWlsZGVyKCdibG9ja0VudGl0eScpXG4gICAgICAuYWRkU2VsZWN0KCdibG9ja0VudGl0eS5oYXNoJywgJ2hhc2gnKVxuICAgICAgLndoZXJlKGBibG9ja0VudGl0eS5oYXNoIE5PVCBJTiAoJHt1bmlvblF1ZXJ5fSlgKVxuICAgICAgLmFuZFdoZXJlKGBibG9ja0VudGl0eS5zY2FubmVyID0gOnNjYW5uZXJOYW1lYCwgeyBzY2FubmVyTmFtZSB9KVxuICAgICAgLmFuZFdoZXJlKCdibG9ja0VudGl0eS50aW1lc3RhbXAgPCA6dGhyZXNob2xkVGltZXN0YW1wJywge1xuICAgICAgICB0aHJlc2hvbGRUaW1lc3RhbXAsXG4gICAgICB9KVxuICAgICAgLnNldFBhcmFtZXRlcnMoeyAuLi5wYXJhbWV0ZXJzIH0pXG4gICAgICAuZGlzdGluY3QodHJ1ZSlcbiAgICAgIC5vcmRlckJ5KCdibG9ja0VudGl0eS5oZWlnaHQnLCAnQVNDJylcbiAgICAgIC50YWtlKGRlbGV0ZWRCbG9ja0NvdW50KVxuICAgICAgLmdldFJhd01hbnkoKTtcblxuICAgIGNvbnN0IHVudXNlZEJsb2NrSGFzaGVzID0gYmxvY2tzVG9EZWxldGUubWFwKChyb3cpID0+IHJvdy5oYXNoKTtcblxuICAgIGF3YWl0IHRoaXMuYmxvY2tSZXBvc2l0b3J5LmRlbGV0ZSh7XG4gICAgICBoYXNoOiBJbih1bnVzZWRCbG9ja0hhc2hlcyksXG4gICAgfSk7XG5cbiAgICByZXR1cm4gdW51c2VkQmxvY2tIYXNoZXM7XG4gIH07XG59XG4iXX0=
|
|
@@ -6,7 +6,13 @@ export interface ScannerConfig<TransactionType> {
|
|
|
6
6
|
initialHeight: number;
|
|
7
7
|
network: AbstractNetworkConnector<TransactionType>;
|
|
8
8
|
blockRetrieveGap?: number;
|
|
9
|
+
blockTimeConfig: BlockTimeConfig;
|
|
9
10
|
suffix?: string;
|
|
10
11
|
logger?: AbstractLogger;
|
|
11
12
|
}
|
|
13
|
+
export interface BlockTimeConfig {
|
|
14
|
+
blockTime: number;
|
|
15
|
+
blockAgeThreshold?: number;
|
|
16
|
+
blockTrimCountInRound?: number;
|
|
17
|
+
}
|
|
12
18
|
//# sourceMappingURL=interfaces.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"interfaces.d.ts","sourceRoot":"","sources":["../../lib/scanner/interfaces.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAC/D,OAAO,EAAE,UAAU,EAAE,MAAM,gCAAgC,CAAC;AAC5D,OAAO,EAAE,wBAAwB,EAAE,MAAM,kCAAkC,CAAC;AAE5E,MAAM,WAAW,aAAa,CAAC,eAAe;IAC5C,UAAU,EAAE,UAAU,CAAC;IACvB,aAAa,EAAE,MAAM,CAAC;IACtB,OAAO,EAAE,wBAAwB,CAAC,eAAe,CAAC,CAAC;IACnD,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,cAAc,CAAC;CACzB"}
|
|
1
|
+
{"version":3,"file":"interfaces.d.ts","sourceRoot":"","sources":["../../lib/scanner/interfaces.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAC/D,OAAO,EAAE,UAAU,EAAE,MAAM,gCAAgC,CAAC;AAC5D,OAAO,EAAE,wBAAwB,EAAE,MAAM,kCAAkC,CAAC;AAE5E,MAAM,WAAW,aAAa,CAAC,eAAe;IAC5C,UAAU,EAAE,UAAU,CAAC;IACvB,aAAa,EAAE,MAAM,CAAC;IACtB,OAAO,EAAE,wBAAwB,CAAC,eAAe,CAAC,CAAC;IACnD,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,eAAe,EAAE,eAAe,CAAC;IACjC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,cAAc,CAAC;CACzB;AAED,MAAM,WAAW,eAAe;IAC9B,SAAS,EAAE,MAAM,CAAC;IAClB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,qBAAqB,CAAC,EAAE,MAAM,CAAC;CAChC"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
export {};
|
|
2
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW50ZXJmYWNlcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL2xpYi9zY2FubmVyL2ludGVyZmFjZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFic3RyYWN0TG9nZ2VyIH0gZnJvbSAnQHJvc2VuLWJyaWRnZS9hYnN0cmFjdC1sb2dnZXInO1xuaW1wb3J0IHsgRGF0YVNvdXJjZSB9IGZyb20gJ0Byb3Nlbi1icmlkZ2UvZXh0ZW5kZWQtdHlwZW9ybSc7XG5pbXBvcnQgeyBBYnN0cmFjdE5ldHdvcmtDb25uZWN0b3IgfSBmcm9tICdAcm9zZW4tYnJpZGdlL3NjYW5uZXItaW50ZXJmYWNlcyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgU2Nhbm5lckNvbmZpZzxUcmFuc2FjdGlvblR5cGU+
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW50ZXJmYWNlcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL2xpYi9zY2FubmVyL2ludGVyZmFjZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFic3RyYWN0TG9nZ2VyIH0gZnJvbSAnQHJvc2VuLWJyaWRnZS9hYnN0cmFjdC1sb2dnZXInO1xuaW1wb3J0IHsgRGF0YVNvdXJjZSB9IGZyb20gJ0Byb3Nlbi1icmlkZ2UvZXh0ZW5kZWQtdHlwZW9ybSc7XG5pbXBvcnQgeyBBYnN0cmFjdE5ldHdvcmtDb25uZWN0b3IgfSBmcm9tICdAcm9zZW4tYnJpZGdlL3NjYW5uZXItaW50ZXJmYWNlcyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgU2Nhbm5lckNvbmZpZzxUcmFuc2FjdGlvblR5cGU+IHtcbiAgZGF0YVNvdXJjZTogRGF0YVNvdXJjZTtcbiAgaW5pdGlhbEhlaWdodDogbnVtYmVyO1xuICBuZXR3b3JrOiBBYnN0cmFjdE5ldHdvcmtDb25uZWN0b3I8VHJhbnNhY3Rpb25UeXBlPjtcbiAgYmxvY2tSZXRyaWV2ZUdhcD86IG51bWJlcjtcbiAgYmxvY2tUaW1lQ29uZmlnOiBCbG9ja1RpbWVDb25maWc7XG4gIHN1ZmZpeD86IHN0cmluZztcbiAgbG9nZ2VyPzogQWJzdHJhY3RMb2dnZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQmxvY2tUaW1lQ29uZmlnIHtcbiAgYmxvY2tUaW1lOiBudW1iZXI7XG4gIGJsb2NrQWdlVGhyZXNob2xkPzogbnVtYmVyO1xuICBibG9ja1RyaW1Db3VudEluUm91bmQ/OiBudW1iZXI7XG59XG4iXX0=
|