@rudderstack/integrations-lib 0.2.48 → 0.2.50
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/build/cluster/manager.d.ts.map +1 -1
- package/build/cluster/manager.js +9 -5
- package/build/index.d.ts +1 -0
- package/build/index.d.ts.map +1 -1
- package/build/index.js +2 -1
- package/build/mock_utils/axios_client_mock_util.d.ts +5 -0
- package/build/mock_utils/axios_client_mock_util.d.ts.map +1 -0
- package/build/mock_utils/axios_client_mock_util.js +13 -0
- package/build/mock_utils/index.d.ts +2 -0
- package/build/mock_utils/index.d.ts.map +1 -0
- package/build/mock_utils/index.js +18 -0
- package/build/network/clients/axios_client.d.ts +6 -5
- package/build/network/clients/axios_client.d.ts.map +1 -1
- package/build/network/clients/axios_client.js +66 -40
- package/build/network/clients/types.d.ts +65 -5
- package/build/network/clients/types.d.ts.map +1 -1
- package/build/network/clients/types.js +1 -1
- package/build/network/factory.d.ts +12 -2
- package/build/network/factory.d.ts.map +1 -1
- package/build/network/factory.js +24 -1
- package/build/sdks/common/base-sdk.d.ts +64 -0
- package/build/sdks/common/base-sdk.d.ts.map +1 -0
- package/build/sdks/common/base-sdk.js +182 -0
- package/build/sdks/common/index.d.ts +3 -0
- package/build/sdks/common/index.d.ts.map +1 -0
- package/build/sdks/common/index.js +7 -0
- package/build/sdks/common/types.d.ts +13 -0
- package/build/sdks/common/types.d.ts.map +1 -0
- package/build/sdks/common/types.js +3 -0
- package/build/sdks/criteoAudience/criteoAudience.d.ts +11 -39
- package/build/sdks/criteoAudience/criteoAudience.d.ts.map +1 -1
- package/build/sdks/criteoAudience/criteoAudience.js +33 -69
- package/build/sdks/criteoAudience/types.d.ts +3 -0
- package/build/sdks/criteoAudience/types.d.ts.map +1 -1
- package/build/sdks/criteoAudience/types.js +1 -1
- package/build/sdks/customerio_audience/index.d.ts +11 -15
- package/build/sdks/customerio_audience/index.d.ts.map +1 -1
- package/build/sdks/customerio_audience/index.js +23 -34
- package/build/sdks/customerio_audience/type.d.ts +3 -0
- package/build/sdks/customerio_audience/type.d.ts.map +1 -1
- package/build/sdks/customerio_audience/type.js +1 -1
- package/build/sdks/googleAdsRestAPI/googleAds.d.ts +16 -17
- package/build/sdks/googleAdsRestAPI/googleAds.d.ts.map +1 -1
- package/build/sdks/googleAdsRestAPI/googleAds.js +44 -37
- package/build/sdks/googleAdsRestAPI/types.d.ts +3 -0
- package/build/sdks/googleAdsRestAPI/types.d.ts.map +1 -1
- package/build/sdks/googleAdsRestAPI/types.js +1 -1
- package/build/sdks/index.d.ts +1 -0
- package/build/sdks/index.d.ts.map +1 -1
- package/build/sdks/index.js +5 -1
- package/build/sdks/sfmc/index.d.ts +1 -1
- package/build/sdks/sfmc/index.d.ts.map +1 -1
- package/build/sdks/sfmc/index.js +4 -3
- package/build/sdks/zoho/types.d.ts +3 -0
- package/build/sdks/zoho/types.d.ts.map +1 -1
- package/build/sdks/zoho/types.js +1 -1
- package/build/sdks/zoho/zoho.d.ts +13 -17
- package/build/sdks/zoho/zoho.d.ts.map +1 -1
- package/build/sdks/zoho/zoho.js +44 -51
- package/mock/axios_client_mock_util.d.ts +2 -0
- package/mock/axios_client_mock_util.d.ts.map +1 -1
- package/mock/axios_client_mock_util.js +6 -3
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"manager.d.ts","sourceRoot":"","sources":["../../src/cluster/manager.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AAEtC,OAAO,EACL,qBAAqB,EACrB,oBAAoB,EAMrB,MAAM,SAAS,CAAC;AAGjB;;;;;;;;;GASG;AACH,qBAAa,cAAe,SAAQ,YAAY;IAC9C,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAkC;IAE1D,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAkC;IAE1D,OAAO,CAAC,OAAO,CAAS;IAExB,OAAO,CAAC,cAAc,CAAS;IAE/B,OAAO,CAAC,eAAe,CAA8B;IAErD,OAAO,CAAC,mBAAmB,CAA+B;IAE1D,OAAO,CAAC,cAAc,CAAyC;gBAEnD,OAAO,GAAE,qBAA0B;IAM/C;;;;OAIG;IACH,OAAO,CAAC,UAAU;IAUlB;;;;OAIG;IACU,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IASnC;;OAEG;IACI,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAqB/C;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAU3B;;OAEG;IACH,OAAO,CAAC,oBAAoB;IAO5B;;OAEG;YACW,YAAY;IAqB1B;;OAEG;YACW,WAAW;IAUzB;;OAEG;IACH,OAAO,CAAC,yBAAyB;IAWjC;;OAEG;IACH,OAAO,CAAC,0BAA0B;IAkBlC;;OAEG;IACH,OAAO,CAAC,WAAW;IAuBnB;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAqB3B;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAWxB;;OAEG;IACH,OAAO,CAAC,qBAAqB;IAM7B;;OAEG;IACH,OAAO,CAAC,oBAAoB;IAO5B;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAkB1B;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAkBxB;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAiCzB;;OAEG;IACH,OAAO,CAAC,gBAAgB;
|
|
1
|
+
{"version":3,"file":"manager.d.ts","sourceRoot":"","sources":["../../src/cluster/manager.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AAEtC,OAAO,EACL,qBAAqB,EACrB,oBAAoB,EAMrB,MAAM,SAAS,CAAC;AAGjB;;;;;;;;;GASG;AACH,qBAAa,cAAe,SAAQ,YAAY;IAC9C,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAkC;IAE1D,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAkC;IAE1D,OAAO,CAAC,OAAO,CAAS;IAExB,OAAO,CAAC,cAAc,CAAS;IAE/B,OAAO,CAAC,eAAe,CAA8B;IAErD,OAAO,CAAC,mBAAmB,CAA+B;IAE1D,OAAO,CAAC,cAAc,CAAyC;gBAEnD,OAAO,GAAE,qBAA0B;IAM/C;;;;OAIG;IACH,OAAO,CAAC,UAAU;IAUlB;;;;OAIG;IACU,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IASnC;;OAEG;IACI,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAqB/C;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAU3B;;OAEG;IACH,OAAO,CAAC,oBAAoB;IAO5B;;OAEG;YACW,YAAY;IAqB1B;;OAEG;YACW,WAAW;IAUzB;;OAEG;IACH,OAAO,CAAC,yBAAyB;IAWjC;;OAEG;IACH,OAAO,CAAC,0BAA0B;IAkBlC;;OAEG;IACH,OAAO,CAAC,WAAW;IAuBnB;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAqB3B;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAWxB;;OAEG;IACH,OAAO,CAAC,qBAAqB;IAM7B;;OAEG;IACH,OAAO,CAAC,oBAAoB;IAO5B;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAkB1B;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAkBxB;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAiCzB;;OAEG;IACH,OAAO,CAAC,gBAAgB;IA4BxB,OAAO,CAAC,WAAW;IAInB,OAAO,CAAC,kBAAkB;IAM1B;;OAEG;IACH,OAAO,CAAC,0BAA0B;IAsBlC;;OAEG;YACW,eAAe;IA2B7B;;OAEG;YACW,kBAAkB;IAwChC;;OAEG;YACW,uBAAuB;IAOrC;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAU3B;;OAEG;YACW,cAAc;IAwB5B;;OAEG;IACI,cAAc,IAAI,MAAM;IAI/B;;OAEG;IACI,aAAa,IAAI,KAAK,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAC;QAAC,YAAY,EAAE,MAAM,CAAA;KAAE,CAAC;IAQhF;;OAEG;IACI,SAAS,IAAI,OAAO;IAI3B;;OAEG;IACI,UAAU,IAAI,OAAO;CAG7B;AAGD,MAAM,WAAW,qBAAqB;IACpC,EAAE,CAAC,CAAC,SAAS,MAAM,oBAAoB,EAAE,KAAK,EAAE,CAAC,EAAE,QAAQ,EAAE,oBAAoB,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;IAC5F,IAAI,CAAC,CAAC,SAAS,MAAM,oBAAoB,EACvC,KAAK,EAAE,CAAC,EACR,GAAG,IAAI,EAAE,UAAU,CAAC,oBAAoB,CAAC,CAAC,CAAC,CAAC,GAC3C,OAAO,CAAC;CACZ"}
|
package/build/cluster/manager.js
CHANGED
|
@@ -323,16 +323,20 @@ class ClusterManager extends events_1.EventEmitter {
|
|
|
323
323
|
* Handles worker exit events
|
|
324
324
|
*/
|
|
325
325
|
handleWorkerExit(worker, code, signal) {
|
|
326
|
-
|
|
326
|
+
const workerId = this.getWorkerId(worker);
|
|
327
327
|
this.emit('worker:died', worker, code, signal);
|
|
328
328
|
const workerState = this.workers.get(worker.id);
|
|
329
|
-
if (!workerState)
|
|
329
|
+
if (!workerState) {
|
|
330
|
+
logger.warn(`Unknown worker ${workerId} (pid: ${worker.process.pid}) exited with code ${code} and signal ${signal}`);
|
|
330
331
|
return;
|
|
332
|
+
}
|
|
331
333
|
this.workers.delete(worker.id);
|
|
332
334
|
// If we're shutting down or worker was killed intentionally, don't restart
|
|
333
335
|
if (this.isShuttingDown || workerState.isShuttingDown) {
|
|
336
|
+
logger.info(`Worker ${workerId} (pid: ${worker.process.pid}) exited with code ${code} and signal ${signal}`);
|
|
334
337
|
return;
|
|
335
338
|
}
|
|
339
|
+
logger.error(`Worker ${workerId} (pid: ${worker.process.pid}) exited unexpectedly with code ${code} and signal ${signal}`);
|
|
336
340
|
// Handle unexpected exit
|
|
337
341
|
this.handleUnexpectedWorkerExit(workerState);
|
|
338
342
|
}
|
|
@@ -367,7 +371,7 @@ class ClusterManager extends events_1.EventEmitter {
|
|
|
367
371
|
* Shuts down the primary process
|
|
368
372
|
*/
|
|
369
373
|
async shutdownPrimary(signal) {
|
|
370
|
-
logger.
|
|
374
|
+
logger.warn(`Primary process (pid: ${process.pid}) shutting down (signal: ${signal ?? 'manual'})`);
|
|
371
375
|
this.stopHealthMonitoring();
|
|
372
376
|
this.removeSignalHandlers();
|
|
373
377
|
// Shutdown all workers
|
|
@@ -435,7 +439,7 @@ class ClusterManager extends events_1.EventEmitter {
|
|
|
435
439
|
* Shuts down a worker process
|
|
436
440
|
*/
|
|
437
441
|
async shutdownWorker(signal) {
|
|
438
|
-
logger.
|
|
442
|
+
logger.warn(`Worker ${this.getCurrentWorkerId()} (pid: ${process.pid}) shutting down (signal: ${signal ?? 'manual'})`);
|
|
439
443
|
this.removeSignalHandlers();
|
|
440
444
|
// Execute worker shutdown function
|
|
441
445
|
await (0, utils_1.safeExecute)(() => (0, utils_1.timeout)(this.options.workerShutdownFn(signal), this.options.shutdownTimeout, 'worker shutdown timeout'), `Error in worker ${this.getCurrentWorkerId()} (pid: ${process.pid}) shutdown function`);
|
|
@@ -472,4 +476,4 @@ class ClusterManager extends events_1.EventEmitter {
|
|
|
472
476
|
}
|
|
473
477
|
}
|
|
474
478
|
exports.ClusterManager = ClusterManager;
|
|
475
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFuYWdlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jbHVzdGVyL21hbmFnZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBR0EsbUNBQXNDO0FBQ3RDLGtEQUFvQztBQVVwQyxtQ0FBaUY7QUFFakY7Ozs7Ozs7OztHQVNHO0FBQ0gsTUFBYSxjQUFlLFNBQVEscUJBQVk7SUFlOUMsWUFBWSxVQUFpQyxFQUFFO1FBQzdDLEtBQUssRUFBRSxDQUFDO1FBYk8sWUFBTyxHQUFHLElBQUksR0FBRyxFQUF1QixDQUFDO1FBRWxELFlBQU8sR0FBRyxLQUFLLENBQUM7UUFFaEIsbUJBQWMsR0FBRyxLQUFLLENBQUM7UUFFdkIsb0JBQWUsR0FBeUIsSUFBSSxDQUFDO1FBRTdDLHdCQUFtQixHQUEwQixJQUFJLENBQUM7UUFFbEQsbUJBQWMsR0FBRyxJQUFJLEdBQUcsRUFBOEIsQ0FBQztRQUk3RCxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUEsaUNBQXlCLEVBQUMsT0FBTyxDQUFDLENBQUM7UUFDbEQsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO0lBQ3BCLENBQUM7SUFFRDs7OztPQUlHO0lBQ0ssVUFBVTtRQUNoQixnREFBZ0Q7UUFDaEQsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxTQUFTLEVBQUUsQ0FBQztZQUNuQyxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxZQUFZLENBQUM7Z0JBQ2hDLGFBQWEsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLGFBQWE7YUFDMUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztRQUNELElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO0lBQzdCLENBQUM7SUFFRDs7OztPQUlHO0lBQ0ksS0FBSyxDQUFDLEtBQUs7UUFDaEIsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxTQUFTLEVBQUUsQ0FBQztZ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QUNJLFVBQVU7UUFDZixPQUFPLElBQUksQ0FBQyxjQUFjLENBQUM7SUFDN0IsQ0FBQztDQUNGO0FBaGlCRCx3Q0FnaUJDIiwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgY2xhc3MtbWV0aG9kcy11c2UtdGhpcyAqL1xuLyogZXNsaW50LWRpc2FibGUgbm8tcGFyYW0tcmVhc3NpZ24gKi9cbmltcG9ydCB7IFdvcmtlciB9IGZyb20gJ2NsdXN0ZXInO1xuaW1wb3J0IHsgRXZlbnRFbWl0dGVyIH0gZnJvbSAnZXZlbnRzJztcbmltcG9ydCAqIGFzIGxvZ2dlciBmcm9tICcuLi9sb2dnZXInO1xuaW1wb3J0IHtcbiAgQ2x1c3Rlck1hbmFnZXJPcHRpb25zLFxuICBDbHVzdGVyTWFuYWdlckV2ZW50cyxcbiAgV29ya2VyU3RhdGUsXG4gIElQQ01lc3NhZ2UsXG4gIFBpbmdNZXNzYWdlLFxuICBQb25nTWVzc2FnZSxcbiAgU2h1dGRvd25NZXNzYWdlLFxufSBmcm9tICcuL3R5cGVzJztcbmltcG9ydCB7IGRlbGF5LCB0aW1lb3V0LCBzYWZlRXhlY3V0ZSwgdmFsaWRhdGVBbmREZWZhdWx0T3B0aW9ucyB9IGZyb20gJy4vdXRpbHMnO1xuXG4vKipcbiAqIENsdXN0ZXJNYW5hZ2VyIC0gQSBjbHVzdGVyIGxpZmVjeWNsZSBtYW5hZ2VtZW50IHN5c3RlbVxuICpcbiAqIFRoZSBtYW5hZ2VyIHN1cHBvcnRzIHRoZSBmb2xsb3dpbmcgZmVhdHVyZXM6XG4gKiAtIEdyYWNlZnVsIHNodXRkb3duIHdpdGggY29uZmlndXJhYmxlIHRpbWVvdXRcbiAqIC0gV29ya2VyIGhlYWx0aCBtb25pdG9yaW5nIHdpdGggcGluZy9wb25nIG1lY2hhbmlzbVxuICogLSBBdXRvbWF0aWMgd29ya2VyIHJlc3RhcnQgd2l0aCBjb25maWd1cmFibGUgbGltaXRzXG4gKiAtIFNpZ25hbCBoYW5kbGluZyBmb3Igc2h1dGRvd24gdHJpZ2dlcnNcbiAqIC0gRmxleGlibGUgcHJpbWFyeSBhbmQgd29ya2VyIGZ1bmN0aW9uIGhhbmRsZXJzXG4gKi9cbmV4cG9ydCBjbGFzcyBDbHVzdGVyTWFuYWdlciBleHRlbmRzIEV2ZW50RW1pdHRlciB7XG4gIHByaXZhdGUgcmVhZG9ubHkgb3B0aW9uczogUmVxdWlyZWQ8Q2x1c3Rlck1hbmFnZXJPcHRpb25zPjtcblxuICBwcml2YXRlIHJlYWRvbmx5IHdvcmtlcnMgPSBuZXcgTWFwPG51bWJlciwgV29ya2VyU3RhdGU+KCk7XG5cbiAgcHJpdmF0ZSBzdGFydGVkID0gZmFsc2U7XG5cbiAgcHJpdmF0ZSBpc1NodXR0aW5nRG93biA9IGZhbHNlO1xuXG4gIHByaXZhdGUgc2h1dGRvd25Qcm9taXNlOiBQcm9taXNlPHZvaWQ+IHwgbnVsbCA9IG51bGw7XG5cbiAgcHJpdmF0ZSBoZWFsdGhDaGVja0ludGVydmFsOiBOb2RlSlMuVGltZW91dCB8IG51bGwgPSBudWxsO1xuXG4gIHByaXZhdGUgc2lnbmFsSGFuZGxlcnMgPSBuZXcgTWFwPE5vZGVKUy5TaWduYWxzLCAoKSA9PiB2b2lkPigpO1xuXG4gIGNvbnN0cnVjdG9yKG9wdGlvbnM6IENsdXN0ZXJNYW5hZ2VyT3B0aW9ucyA9IHt9KSB7XG4gICAgc3VwZXIoKTtcbiAgICB0aGlzLm9wdGlvbnMgPSB2YWxpZGF0ZUFuZERlZmF1bHRPcHRpb25zKG9wdGlvbnMpO1xuICAgIHRoaXMuaW5pdGlhbGl6ZSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIEluaXRpYWxpemUgdGhlIGNsdXN0ZXIgbWFuYWdlciB3aXRoIHByaW1hcnkgcHJvY2VzcyBjb25maWd1cmF0aW9uXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vbm9kZWpzLm9yZy9kb2NzL2xhdGVzdC9hcGkvY2x1c3Rlci5odG1sI2NsdXN0ZXJzZXR1cHByaW1hcnlvcHRpb25zIE5vZGUuanMgY2x1c3Rlci5zZXR1cFByaW1hcnkoKX1cbiAgICovXG4gIHByaXZhdGUgaW5pdGlhbGl6ZSgpOiB2b2lkIHtcbiAgICAvLyBPbmx5IGNhbGwgc2V0dXBQcmltYXJ5IGluIHRoZSBwcmltYXJ5IHByb2Nlc3NcbiAgICBpZiAodGhpcy5vcHRpb25zLmNsdXN0ZXIuaXNQcmltYXJ5KSB7XG4gICAgICB0aGlzLm9wdGlvbnMuY2x1c3Rlci5zZXR1cFByaW1hcnkoe1xuICAgICAgICBzZXJpYWxpemF0aW9uOiB0aGlzLm9wdGlvbnMuc2VyaWFsaXphdGlvbixcbiAgICAgIH0pO1xuICAgIH1cbiAgICB0aGlzLnNldHVwU2lnbmFsSGFuZGxlcnMoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTdGFydHMgdGhlIGNsdXN0ZXIgbWFuYWdlclxuICAgKiBJbiBwcmltYXJ5IHByb2Nlc3M6IHN0YXJ0cyB3b3JrZXJzIGFuZCBoZWFsdGggbW9uaXRvcmluZ1xuICAgKiBJbiB3b3JrZXIgcHJvY2VzczogZXhlY3V0ZXMgd29ya2VyIGZ1bmN0aW9uXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgc3RhcnQoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKHRoaXMub3B0aW9ucy5jbHVzdGVyLmlzUHJpbWFyeSkge1xuICAgICAgYXdhaXQgdGhpcy5zdGFydFByaW1hcnkoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgYXdhaXQgdGhpcy5zdGFydFdvcmtlcigpO1xuICAgIH1cbiAgICB0aGlzLnN0YXJ0ZWQgPSB0cnVlO1xuICB9XG5cbiAgLyoqXG4gICAqIEluaXRpYXRlcyBncmFjZWZ1bCBzaHV0ZG93biBvZiB0aGUgY2x1c3RlclxuICAgKi9cbiAgcHVibGljIHNodXRkb3duKHNpZ25hbD86IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICghdGhpcy5zdGFydGVkKSB7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuc2h1dGRvd25Qcm9taXNlKSB7XG4gICAgICByZXR1cm4gdGhpcy5zaHV0ZG93blByb21pc2U7XG4gICAgfVxuXG4gICAgdGhpcy5pc1NodXR0aW5nRG93biA9IHRydWU7XG4gICAgdGhpcy5lbWl0KCdzaHV0ZG93bjpzdGFydGVkJywgc2lnbmFsKTtcblxuICAgIGlmICh0aGlzLm9wdGlvbnMuY2x1c3Rlci5pc1ByaW1hcnkpIHtcbiAgICAgIHRoaXMuc2h1dGRvd25Qcm9taXNlID0gdGhpcy5zaHV0ZG93blByaW1hcnkoc2lnbmFsKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zaHV0ZG93blByb21pc2UgPSB0aGlzLnNodXRkb3duV29ya2VyKHNpZ25hbCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuc2h1dGRvd25Qcm9taXNlO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldHMgdXAgc2lnbmFsIGhhbmRsZXJzIGZvciBncmFjZWZ1bCBzaHV0ZG93blxuICAgKi9cbiAgcHJpdmF0ZSBzZXR1cFNpZ25hbEhhbmRsZXJzKCk6IHZvaWQge1xuICAgIHRoaXMub3B0aW9ucy5zaHV0ZG93blNpZ25hbHMuZm9yRWFjaCgoc2lnbmFsKSA9PiB7XG4gICAgICBjb25zdCBoYW5kbGVyID0gKCkgPT4ge1xuICAgICAgICB0aGlzLnNodXRkb3duKHNpZ25hbCk7XG4gICAgICB9O1xuICAgICAgdGhpcy5zaWduYWxIYW5kbGVycy5zZXQoc2lnbmFsLCBoYW5kbGVyKTtcbiAgICAgIHByb2Nlc3Mub24oc2lnbmFsLCBoYW5kbGVyKTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZW1vdmVzIHNpZ25hbCBoYW5kbGVyc1xuICAgKi9cbiAgcHJpdmF0ZSByZW1vdmVTaWduYWxIYW5kbGVycygpOiB2b2lkIHtcbiAgICBBcnJheS5mcm9tKHRoaXMuc2lnbmFsSGFuZGxlcnMuZW50cmllcygpKS5mb3JFYWNoKChbc2lnbmFsLCBoYW5kbGVyXSkgPT4ge1xuICAgICAgcHJvY2Vzcy5yZW1vdmVMaXN0ZW5lcihzaWduYWwsIGhhbmRsZXIpO1xuICAgIH0pO1xuICAgIHRoaXMuc2lnbmFsSGFuZGxlcnMuY2xlYXIoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTdGFydHMgdGhlIHByaW1hcnkgcHJvY2Vzc1xuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyBzdGFydFByaW1hcnkoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgbG9nZ2VyLmluZm8oXG4gICAgICBgUHJpbWFyeSBwcm9jZXNzIChwaWQ6ICR7cHJvY2Vzcy5waWR9KSBzdGFydGluZyB3aXRoICR7dGhpcy5vcHRpb25zLm51bVdvcmtlcnN9IHdvcmtlcnNgLFxuICAgICk7XG5cbiAgICAvLyBFeGVjdXRlIHByaW1hcnkgaW5pdGlhbGl6YXRpb24gZnVuY3Rpb24sIGFueSBlcnJvciB3aWxsIHN0b3AgdGhlIGNsdXN0ZXIgZnJvbSBzdGFydGluZ1xuICAgIGF3YWl0IHRoaXMub3B0aW9ucy5wcmltYXJ5Rm4oKTtcblxuICAgIC8vIFNldCB1cCBjbHVzdGVyIGV2ZW50IGhhbmRsZXJzXG4gICAgdGhpcy5zZXR1cENsdXN0ZXJFdmVudEhhbmRsZXJzKCk7XG5cbiAgICAvLyBTcGF3biBpbml0aWFsIHdvcmtlcnNcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMub3B0aW9ucy5udW1Xb3JrZXJzOyBpICs9IDEpIHtcbiAgICAgIGNvbnN0IHdvcmtlcklkID0gaSArIDE7IC8vIFdvcmtlciBJRHMgc3RhcnQgZnJvbSAxXG4gICAgICB0aGlzLnNwYXduV29ya2VyKHdvcmtlcklkKTtcbiAgICB9XG5cbiAgICAvLyBTdGFydCBoZWFsdGggbW9uaXRvcmluZ1xuICAgIHRoaXMuc3RhcnRIZWFsdGhNb25pdG9yaW5nKCk7XG4gIH1cblxuICAvKipcbiAgICogU3RhcnRzIGEgd29ya2VyIHByb2Nlc3NcbiAgICovXG4gIHByaXZhdGUgYXN5bmMgc3RhcnRXb3JrZXIoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgbG9nZ2VyLmluZm8oYFdvcmtlciAke3RoaXMuZ2V0Q3VycmVudFdvcmtlcklkKCl9IChwaWQ6ICR7cHJvY2Vzcy5waWR9KSBzdGFydGluZ2ApO1xuXG4gICAgLy8gU2V0IHVwIElQQyBtZXNzYWdlIGhhbmRsZXJzXG4gICAgdGhpcy5zZXR1cFdvcmtlck1lc3NhZ2VIYW5kbGVycygpO1xuXG4gICAgLy8gRXhlY3V0ZSB3b3JrZXIgaW5pdGlhbGl6YXRpb24gZnVuY3Rpb24sIGFueSBlcnJvciB3aWxsIGJlIHByb3BhZ2F0ZWRcbiAgICBhd2FpdCB0aGlzLm9wdGlvbnMud29ya2VyRm4oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXRzIHVwIGNsdXN0ZXIgZXZlbnQgaGFuZGxlcnMgZm9yIHRoZSBwcmltYXJ5IHByb2Nlc3NcbiAgICovXG4gIHByaXZhdGUgc2V0dXBDbHVzdGVyRXZlbnRIYW5kbGVycygpOiB2b2lkIHtcbiAgICB0aGlzLm9wdGlvbnMuY2x1c3Rlci5vbignZXhpdCcsICh3b3JrZXI6IFdvcmtlciwgY29kZTogbnVtYmVyLCBzaWduYWw6IHN0cmluZykgPT4ge1xuICAgICAgdGhpcy5oYW5kbGVXb3JrZXJFeGl0KHdvcmtlciwgY29kZSwgc2lnbmFsKTtcbiAgICB9KTtcblxuICAgIHRoaXMub3B0aW9ucy5jbHVzdGVyLm9uKCdvbmxpbmUnLCAod29ya2VyOiBXb3JrZXIpID0+IHtcbiAgICAgIGxvZ2dlci5pbmZvKGBXb3JrZXIgJHt0aGlzLmdldFdvcmtlcklkKHdvcmtlcil9IChwaWQ6ICR7d29ya2VyLnByb2Nlc3MucGlkfSkgaXMgb25saW5lYCk7XG4gICAgICB0aGlzLmVtaXQoJ3dvcmtlcjpzdGFydGVkJywgd29ya2VyKTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXRzIHVwIElQQyBtZXNzYWdlIGhhbmRsZXJzIGZvciB3b3JrZXIgcHJvY2Vzc2VzXG4gICAqL1xuICBwcml2YXRlIHNldHVwV29ya2VyTWVzc2FnZUhhbmRsZXJzKCk6IHZvaWQge1xuICAgIHByb2Nlc3Mub24oJ21lc3NhZ2UnLCAobWVzc2FnZTogSVBDTWVzc2FnZSkgPT4ge1xuICAgICAgc3dpdGNoIChtZXNzYWdlLnR5cGUpIHtcbiAgICAgICAgY2FzZSAncGluZyc6XG4gICAgICAgICAgdGhpcy5oYW5kbGVXb3JrZXJQaW5nKG1lc3NhZ2UpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdzaHV0ZG93bic6XG4gICAgICAgICAgdGhpcy5zaHV0ZG93bihtZXNzYWdlLnNpZ25hbCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgaWYgKCFtZXNzYWdlLnR5cGUuaW5jbHVkZXMoJ01ldHJpY3MnKSkge1xuICAgICAgICAgICAgbG9nZ2VyLndhcm4oYGlnbm9yaW5nIHVua25vd24gbWVzc2FnZSB0eXBlIGluIHdvcmtlciAke3Byb2Nlc3MucGlkfTogJHttZXNzYWdlLnR5cGV9YCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFNwYXducyBhIG5ldyB3b3JrZXIgYW5kIHNldHMgdXAgaXRzIHN0YXRlXG4gICAqL1xuICBwcml2YXRlIHNwYXduV29ya2VyKGlkOiBudW1iZXIpOiBXb3JrZXIge1xuICAgIGNvbnN0IHdvcmtlciA9IHRoaXMub3B0aW9ucy5jbHVzdGVyLmZvcmsoe1xuICAgICAgV09SS0VSX0lEOiBpZCxcbiAgICB9KTtcbiAgICBjb25zdCB3b3JrZXJTdGF0ZTogV29ya2VyU3RhdGUgPSB7XG4gICAgICBpZCxcbiAgICAgIHdvcmtlcixcbiAgICAgIHJlc3RhcnRDb3VudDogMCxcbiAgICAgIGxhc3RQaW5nOiBEYXRlLm5vdygpLFxuICAgICAgcGVuZGluZ1Bpbmc6IGZhbHNlLFxuICAgICAgaXNTaHV0dGluZ0Rvd246IGZhbHNlLFxuICAgIH07XG5cbiAgICB0aGlzLndvcmtlcnMuc2V0KHdvcmtlci5pZCwgd29ya2VyU3RhdGUpO1xuXG4gICAgLy8gU2V0IHVwIHdvcmtlciBtZXNzYWdlIGhhbmRsZXJcbiAgICB3b3JrZXIub24oJ21lc3NhZ2UnLCAobWVzc2FnZTogSVBDTWVzc2FnZSkgPT4ge1xuICAgICAgdGhpcy5oYW5kbGVXb3JrZXJNZXNzYWdlKHdvcmtlciwgbWVzc2FnZSk7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gd29ya2VyO1xuICB9XG5cbiAgLyoqXG4gICAqIEhhbmRsZXMgbWVzc2FnZXMgZnJvbSB3b3JrZXJzXG4gICAqL1xuICBwcml2YXRlIGhhbmRsZVdvcmtlck1lc3NhZ2Uod29ya2VyOiBXb3JrZXIsIG1lc3NhZ2U6IElQQ01lc3NhZ2UpOiB2b2lkIHtcbiAgICBjb25zdCB3b3JrZXJTdGF0ZSA9IHRoaXMud29ya2Vycy5nZXQod29ya2VyLmlkKTtcbiAgICBpZiAoIXdvcmtlclN0YXRlKSByZXR1cm47XG5cbiAgICBzd2l0Y2ggKG1lc3NhZ2UudHlwZSkge1xuICAgICAgY2FzZSAncG9uZyc6XG4gICAgICAgIHdvcmtlclN0YXRlLmxhc3RQaW5nID0gRGF0ZS5ub3coKTtcbiAgICAgICAgd29ya2VyU3RhdGUucGVuZGluZ1BpbmcgPSBmYWxzZTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBpZiAoIW1lc3NhZ2UudHlwZS5pbmNsdWRlcygnTWV0cmljcycpKSB7XG4gICAgICAgICAgbG9nZ2VyLndhcm4oXG4gICAgICAgICAgICBgUmVjZWl2ZWQgdW5rbm93biBtZXNzYWdlIHR5cGUgZnJvbSB3b3JrZXIgJHt0aGlzLmdldFdvcmtlcklkKHdvcmtlcil9IChwaWQ6ICR7XG4gICAgICAgICAgICAgIHdvcmtlci5wcm9jZXNzLnBpZFxuICAgICAgICAgICAgfSk6ICR7bWVzc2FnZS50eXBlfWAsXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogSGFuZGxlcyBwaW5nIG1lc3NhZ2VzIGluIHdvcmtlciBwcm9jZXNzZXNcbiAgICovXG4gIHByaXZhdGUgaGFuZGxlV29ya2VyUGluZyhtZXNzYWdlOiBQaW5nTWVzc2FnZSk6IHZvaWQge1xuICAgIGNvbnN0IHBvbmdNZXNzYWdlOiBQb25nTWVzc2FnZSA9IHtcbiAgICAgIHR5cGU6ICdwb25nJyxcbiAgICAgIHRpbWVzdGFtcDogbWVzc2FnZS50aW1lc3RhbXAsXG4gICAgfTtcblxuICAgIGlmIChwcm9jZXNzLnNlbmQpIHtcbiAgICAgIHByb2Nlc3Muc2VuZChwb25nTWVzc2FnZSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFN0YXJ0cyBoZWFsdGggbW9uaXRvcmluZyBmb3IgYWxsIHdvcmtlcnNcbiAgICovXG4gIHByaXZhdGUgc3RhcnRIZWFsdGhNb25pdG9yaW5nKCk6IHZvaWQge1xuICAgIHRoaXMuaGVhbHRoQ2hlY2tJbnRlcnZhbCA9IHNldEludGVydmFsKCgpID0+IHtcbiAgICAgIHRoaXMucGVyZm9ybUhlYWx0aENoZWNrKCk7XG4gICAgfSwgdGhpcy5vcHRpb25zLnBpbmdGcmVxdWVuY3kpO1xuICB9XG5cbiAgLyoqXG4gICAqIFN0b3BzIGhlYWx0aCBtb25pdG9yaW5nXG4gICAqL1xuICBwcml2YXRlIHN0b3BIZWFsdGhNb25pdG9yaW5nKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmhlYWx0aENoZWNrSW50ZXJ2YWwpIHtcbiAgICAgIGNsZWFySW50ZXJ2YWwodGhpcy5oZWFsdGhDaGVja0ludGVydmFsKTtcbiAgICAgIHRoaXMuaGVhbHRoQ2hlY2tJbnRlcnZhbCA9IG51bGw7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFBlcmZvcm1zIGhlYWx0aCBjaGVjayBvbiBhbGwgd29ya2Vyc1xuICAgKi9cbiAgcHJpdmF0ZSBwZXJmb3JtSGVhbHRoQ2hlY2soKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuaXNTaHV0dGluZ0Rvd24pIHJldHVybjtcblxuICAgIEFycmF5LmZyb20odGhpcy53b3JrZXJzLnZhbHVlcygpKVxuICAgICAgLmZpbHRlcigod29ya2VyU3RhdGUpID0+ICF3b3JrZXJTdGF0ZS5pc1NodXR0aW5nRG93bilcbiAgICAgIC5mb3JFYWNoKCh3b3JrZXJTdGF0ZSkgPT4ge1xuICAgICAgICBjb25zdCB0aW1lU2luY2VMYXN0UGluZyA9IERhdGUubm93KCkgLSB3b3JrZXJTdGF0ZS5sYXN0UGluZztcblxuICAgICAgICBpZiAod29ya2VyU3RhdGUucGVuZGluZ1BpbmcgJiYgdGltZVNpbmNlTGFzdFBpbmcgPiB0aGlzLm9wdGlvbnMucGluZ1RpbWVvdXQpIHtcbiAgICAgICAgICAvLyBXb3JrZXIgaXMgc3R1Y2ssIGhhbmRsZSBpdFxuICAgICAgICAgIHRoaXMuaGFuZGxlU3R1Y2tXb3JrZXIod29ya2VyU3RhdGUpO1xuICAgICAgICB9IGVsc2UgaWYgKCF3b3JrZXJTdGF0ZS5wZW5kaW5nUGluZykge1xuICAgICAgICAgIC8vIFNlbmQgcGluZyB0byB3b3JrZXJcbiAgICAgICAgICB0aGlzLnNlbmRQaW5nVG9Xb3JrZXIod29ya2VyU3RhdGUpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZW5kcyBhIHBpbmcgbWVzc2FnZSB0byBhIHdvcmtlclxuICAgKi9cbiAgcHJpdmF0ZSBzZW5kUGluZ1RvV29ya2VyKHdvcmtlclN0YXRlOiBXb3JrZXJTdGF0ZSk6IHZvaWQge1xuICAgIGNvbnN0IHBpbmdNZXNzYWdlOiBQaW5nTWVzc2FnZSA9IHtcbiAgICAgIHR5cGU6ICdwaW5nJyxcbiAgICAgIHRpbWVzdGFtcDogRGF0ZS5ub3coKSxcbiAgICB9O1xuXG4gICAgd29ya2VyU3RhdGUucGVuZGluZ1BpbmcgPSB0cnVlO1xuICAgIHRyeSB7XG4gICAgICB3b3JrZXJTdGF0ZS53b3JrZXIuc2VuZChwaW5nTWVzc2FnZSk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGxvZ2dlci5lcnJvcihcbiAgICAgICAgYEZhaWxlZCB0byBzZW5kIHBpbmcgdG8gd29ya2VyICR7d29ya2VyU3RhdGUuaWR9IChwaWQ6ICR7XG4gICAgICAgICAgd29ya2VyU3RhdGUud29ya2VyLnByb2Nlc3MucGlkXG4gICAgICAgIH0pOiAke2Vycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogU3RyaW5nKGVycm9yKX1gLFxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogSGFuZGxlcyBhIHN0dWNrIHdvcmtlclxuICAgKi9cbiAgcHJpdmF0ZSBoYW5kbGVTdHVja1dvcmtlcih3b3JrZXJTdGF0ZTogV29ya2VyU3RhdGUpOiB2b2lkIHtcbiAgICBsb2dnZXIuZXJyb3IoXG4gICAgICBgV29ya2VyICR7d29ya2VyU3RhdGUuaWR9IChwaWQ6ICR7d29ya2VyU3RhdGUud29ya2VyLnByb2Nlc3MucGlkfSkgaXMgc3R1Y2ssIGtpbGxpbmcgaXRgLFxuICAgICk7XG4gICAgdGhpcy5lbWl0KCd3b3JrZXI6c3R1Y2snLCB3b3JrZXJTdGF0ZS53b3JrZXIpO1xuXG4gICAgLy8gUmVtb3ZlIHdvcmtlciBzdGF0ZVxuICAgIHRoaXMud29ya2Vycy5kZWxldGUod29ya2VyU3RhdGUud29ya2VyLmlkKTtcblxuICAgIC8vIEtpbGwgdGhlIHdvcmtlclxuICAgIHdvcmtlclN0YXRlLndvcmtlci5raWxsKCdTSUdLSUxMJyk7XG5cbiAgICAvLyBEZXRlcm1pbmUgaWYgd2Ugc2hvdWxkIHNwYXduIGEgcmVwbGFjZW1lbnRcbiAgICBjb25zdCBzaG91bGRTcGF3biA9IHRoaXMub3B0aW9ucy5zdHVja1dvcmtlclJlc3Bhd25GdW5jKHdvcmtlclN0YXRlLndvcmtlcik7XG5cbiAgICBpZiAoc2hvdWxkU3Bhd24gJiYgIXRoaXMuaXNTaHV0dGluZ0Rvd24pIHtcbiAgICAgIGxvZ2dlci5pbmZvKFxuICAgICAgICBgU3Bhd25pbmcgcmVwbGFjZW1lbnQgd29ya2VyIGZvciBzdHVjayB3b3JrZXIgJHt3b3JrZXJTdGF0ZS5pZH0gKHBpZDogJHt3b3JrZXJTdGF0ZS53b3JrZXIucHJvY2Vzcy5waWR9KWAsXG4gICAgICApO1xuICAgICAgY29uc3QgeyByZXN0YXJ0Q291bnQgfSA9IHdvcmtlclN0YXRlOyAvLyBQcmVzZXJ2ZSByZXN0YXJ0IGNvdW50XG4gICAgICBjb25zdCBuZXdXb3JrZXIgPSB0aGlzLnNwYXduV29ya2VyKHdvcmtlclN0YXRlLmlkKTtcbiAgICAgIGNvbnN0IG5ld1dvcmtlclN0YXRlID0gdGhpcy53b3JrZXJzLmdldChuZXdXb3JrZXIuaWQpO1xuICAgICAgaWYgKG5ld1dvcmtlclN0YXRlKSB7XG4gICAgICAgIG5ld1dvcmtlclN0YXRlLnJlc3RhcnRDb3VudCA9IHJlc3RhcnRDb3VudDtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgbG9nZ2VyLmVycm9yKFxuICAgICAgICBgVHJpZ2dlcmluZyBjbHVzdGVyIHNodXRkb3duIGR1ZSB0byBzdHVjayB3b3JrZXIgJHt3b3JrZXJTdGF0ZS5pZH0gKHBpZDogJHt3b3JrZXJTdGF0ZS53b3JrZXIucHJvY2Vzcy5waWR9KWAsXG4gICAgICApO1xuICAgICAgdGhpcy5zaHV0ZG93bignU1RVQ0tfV09SS0VSJyk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEhhbmRsZXMgd29ya2VyIGV4aXQgZXZlbnRzXG4gICAqL1xuICBwcml2YXRlIGhhbmRsZVdvcmtlckV4aXQod29ya2VyOiBXb3JrZXIsIGNvZGU6IG51bWJlciB8IG51bGwsIHNpZ25hbDogc3RyaW5nIHwgbnVsbCk6IHZvaWQge1xuICAgIGxvZ2dlci5pbmZvKFxuICAgICAgYFdvcmtlciAke3RoaXMuZ2V0V29ya2VySWQod29ya2VyKX0gKHBpZDogJHtcbiAgICAgICAgd29ya2VyLnByb2Nlc3MucGlkXG4gICAgICB9KSBkaWVkIHdpdGggY29kZSAke2NvZGV9IGFuZCBzaWduYWwgJHtzaWduYWx9YCxcbiAgICApO1xuICAgIHRoaXMuZW1pdCgnd29ya2VyOmRpZWQnLCB3b3JrZXIsIGNvZGUsIHNpZ25hbCk7XG5cbiAgICBjb25zdCB3b3JrZXJTdGF0ZSA9IHRoaXMud29ya2Vycy5nZXQod29ya2VyLmlkKTtcbiAgICBpZiAoIXdvcmtlclN0YXRlKSByZXR1cm47XG5cbiAgICB0aGlzLndvcmtlcnMuZGVsZXRlKHdvcmtlci5pZCk7XG5cbiAgICAvLyBJZiB3ZSdyZSBzaHV0dGluZyBkb3duIG9yIHdvcmtlciB3YXMga2lsbGVkIGludGVudGlvbmFsbHksIGRvbid0IHJlc3RhcnRcbiAgICBpZiAodGhpcy5pc1NodXR0aW5nRG93biB8fCB3b3JrZXJTdGF0ZS5pc1NodXR0aW5nRG93bikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIEhhbmRsZSB1bmV4cGVjdGVkIGV4aXRcbiAgICB0aGlzLmhhbmRsZVVuZXhwZWN0ZWRXb3JrZXJFeGl0KHdvcmtlclN0YXRlKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0V29ya2VySWQod29ya2VyOiBXb3JrZXIpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLndvcmtlcnMuZ2V0KHdvcmtlci5pZCk/LmlkID8/IHdvcmtlci5pZDtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0Q3VycmVudFdvcmtlcklkKCk6IG51bWJlciB7XG4gICAgY29uc3QgZW52V29ya2VySWQgPVxuICAgICAgcHJvY2Vzcy5lbnYuV09SS0VSX0lEICE9PSB1bmRlZmluZWQgPyBOdW1iZXIocHJvY2Vzcy5lbnYuV09SS0VSX0lEKSA6IHVuZGVmaW5lZDtcbiAgICByZXR1cm4gZW52V29ya2VySWQgPz8gdGhpcy5vcHRpb25zLmNsdXN0ZXIud29ya2VyPy5pZCA/PyAtMTtcbiAgfVxuXG4gIC8qKlxuICAgKiBIYW5kbGVzIHVuZXhwZWN0ZWQgd29ya2VyIGV4aXRzIHdpdGggcmVzdGFydCBsb2dpY1xuICAgKi9cbiAgcHJpdmF0ZSBoYW5kbGVVbmV4cGVjdGVkV29ya2VyRXhpdCh3b3JrZXJTdGF0ZTogV29ya2VyU3RhdGUpOiB2b2lkIHtcbiAgICBjb25zdCByZXN0YXJ0Q291bnQgPSB3b3JrZXJTdGF0ZS5yZXN0YXJ0Q291bnQgKyAxO1xuXG4gICAgaWYgKHJlc3RhcnRDb3VudCA8PSB0aGlzLm9wdGlvbnMucmVzdGFydE1heFRpbWVzKSB7XG4gICAgICBsb2dnZXIuZXJyb3IoXG4gICAgICAgIGBSZXN0YXJ0aW5nIHdvcmtlciAke3dvcmtlclN0YXRlLmlkfSAocGlkOiAke3dvcmtlclN0YXRlLndvcmtlci5wcm9jZXNzLnBpZH0pIChhdHRlbXB0ICR7cmVzdGFydENvdW50fS8ke3RoaXMub3B0aW9ucy5yZXN0YXJ0TWF4VGltZXN9KWAsXG4gICAgICApO1xuICAgICAgY29uc3QgbmV3V29ya2VyID0gdGhpcy5zcGF3bldvcmtlcih3b3JrZXJTdGF0ZS5pZCk7XG4gICAgICBjb25zdCBuZXdXb3JrZXJTdGF0ZSA9IHRoaXMud29ya2Vycy5nZXQobmV3V29ya2VyLmlkKTtcbiAgICAgIGlmIChuZXdXb3JrZXJTdGF0ZSkge1xuICAgICAgICBuZXdXb3JrZXJTdGF0ZS5yZXN0YXJ0Q291bnQgPSByZXN0YXJ0Q291bnQ7XG4gICAgICB9XG4gICAgICB0aGlzLmVtaXQoJ3dvcmtlcjpyZXN0YXJ0ZWQnLCBuZXdXb3JrZXIsIHdvcmtlclN0YXRlLnJlc3RhcnRDb3VudCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGxvZ2dlci5lcnJvcihcbiAgICAgICAgYFJlc3RhcnQgbGltaXQgKCR7dGhpcy5vcHRpb25zLnJlc3RhcnRNYXhUaW1lc30pIGV4Y2VlZGVkIGZvciB3b3JrZXIgJHt3b3JrZXJTdGF0ZS5pZH0gKHBpZDogJHt3b3JrZXJTdGF0ZS53b3JrZXIucHJvY2Vzcy5waWR9KSwgc2h1dHRpbmcgZG93biBjbHVzdGVyYCxcbiAgICAgICk7XG4gICAgICB0aGlzLmVtaXQoJ3dvcmtlcjpyZXN0YXJ0LWxpbWl0LWV4Y2VlZGVkJywgd29ya2VyU3RhdGUud29ya2VyLCB3b3JrZXJTdGF0ZS5yZXN0YXJ0Q291bnQpO1xuICAgICAgdGhpcy5zaHV0ZG93bignUkVTVEFSVF9MSU1JVF9FWENFRURFRCcpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBTaHV0cyBkb3duIHRoZSBwcmltYXJ5IHByb2Nlc3NcbiAgICovXG4gIHByaXZhdGUgYXN5bmMgc2h1dGRvd25QcmltYXJ5KHNpZ25hbD86IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICAgIGxvZ2dlci5pbmZvKFxuICAgICAgYFByaW1hcnkgcHJvY2VzcyAocGlkOiAke3Byb2Nlc3MucGlkfSkgc2h1dHRpbmcgZG93biAoc2lnbmFsOiAke3NpZ25hbCA/PyAnbWFudWFsJ30pYCxcbiAgICApO1xuXG4gICAgdGhpcy5zdG9wSGVhbHRoTW9uaXRvcmluZygpO1xuICAgIHRoaXMucmVtb3ZlU2lnbmFsSGFuZGxlcnMoKTtcblxuICAgIC8vIFNodXRkb3duIGFsbCB3b3JrZXJzXG4gICAgYXdhaXQgdGhpcy5zaHV0ZG93bkFsbFdvcmtlcnMoc2lnbmFsKTtcblxuICAgIC8vIEV4ZWN1dGUgcHJpbWFyeSBzaHV0ZG93biBmdW5jdGlvblxuICAgIGF3YWl0IHNhZmVFeGVjdXRlKFxuICAgICAgKCkgPT5cbiAgICAgICAgdGltZW91dChcbiAgICAgICAgICB0aGlzLm9wdGlvbnMucHJpbWFyeVNodXRkb3duRm4oc2lnbmFsKSxcbiAgICAgICAgICB0aGlzLm9wdGlvbnMuc2h1dGRvd25UaW1lb3V0LFxuICAgICAgICAgICdwcmltYXJ5IHNodXRkb3duIHRpbWVvdXQnLFxuICAgICAgICApLFxuICAgICAgJ0Vycm9yIGluIHByaW1hcnkgc2h1dGRvd24gZnVuY3Rpb24nLFxuICAgICk7XG5cbiAgICBsb2dnZXIuaW5mbyhgUHJpbWFyeSBwcm9jZXNzIChwaWQ6ICR7cHJvY2Vzcy5waWR9KSBzaHV0ZG93biBjb21wbGV0ZWRgKTtcbiAgICB0aGlzLmVtaXQoJ3NodXRkb3duOmNvbXBsZXRlZCcpO1xuICAgIHByb2Nlc3MuZXhpdCgwKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTaHV0cyBkb3duIGFsbCB3b3JrZXJzIGdyYWNlZnVsbHlcbiAgICovXG4gIHByaXZhdGUgYXN5bmMgc2h1dGRvd25BbGxXb3JrZXJzKHNpZ25hbD86IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICh0aGlzLndvcmtlcnMuc2l6ZSA9PT0gMCkgcmV0dXJuO1xuXG4gICAgbG9nZ2VyLmluZm8oYFNodXR0aW5nIGRvd24gJHt0aGlzLndvcmtlcnMuc2l6ZX0gd29ya2Vycy4uLmApO1xuXG4gICAgLy8gTWFyayBhbGwgd29ya2VycyBhcyBzaHV0dGluZyBkb3duIGFuZCBzZW5kIHNodXRkb3duIG1lc3NhZ2VcbiAgICBBcnJheS5mcm9tKHRoaXMud29ya2Vycy52YWx1ZXMoKSkuZm9yRWFjaCgod29ya2VyU3RhdGUpID0+IHtcbiAgICAgIHdvcmtlclN0YXRlLmlzU2h1dHRpbmdEb3duID0gdHJ1ZTtcbiAgICAgIC8vIE9ubHkgc2VuZCBzaHV0ZG93biBtZXNzYWdlIGlmIHdvcmtlciBpcyBzdGlsbCBjb25uZWN0ZWRcbiAgICAgIGlmICghd29ya2VyU3RhdGUud29ya2VyLmlzRGVhZCgpICYmIHdvcmtlclN0YXRlLndvcmtlci5wcm9jZXNzLmNvbm5lY3RlZCkge1xuICAgICAgICBjb25zdCBzaHV0ZG93bk1lc3NhZ2U6IFNodXRkb3duTWVzc2FnZSA9IHtcbiAgICAgICAgICB0eXBlOiAnc2h1dGRvd24nLFxuICAgICAgICAgIHNpZ25hbCxcbiAgICAgICAgfTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICB3b3JrZXJTdGF0ZS53b3JrZXIuc2VuZChzaHV0ZG93bk1lc3NhZ2UpO1xuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgIC8vIFdvcmtlciBJUEMgY2hhbm5lbCBpcyBhbHJlYWR5IGNsb3NlZCwgd2hpY2ggaXMgZmluZVxuICAgICAgICAgIGxvZ2dlci53YXJuKFxuICAgICAgICAgICAgYEZhaWxlZCB0byBzZW5kIHNodXRkb3duIG1lc3NhZ2UgdG8gd29ya2VyICR7d29ya2VyU3RhdGUuaWR9IChwaWQ6ICR7XG4gICAgICAgICAgICAgIHdvcmtlclN0YXRlLndvcmtlci5wcm9jZXNzLnBpZFxuICAgICAgICAgICAgfSk6ICR7ZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiBTdHJpbmcoZXJyb3IpfWAsXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuXG4gICAgLy8gV2FpdCBmb3Igd29ya2VycyB0byBleGl0IGdyYWNlZnVsbHkgb3IgdGltZW91dFxuICAgIHRyeSB7XG4gICAgICBhd2FpdCB0aW1lb3V0KFxuICAgICAgICB0aGlzLndhaXRGb3JBbGxXb3JrZXJzVG9FeGl0KCksXG4gICAgICAgIHRoaXMub3B0aW9ucy5zaHV0ZG93blRpbWVvdXQsXG4gICAgICAgICdXb3JrZXIgc2h1dGRvd24gdGltZW91dCcsXG4gICAgICApO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBsb2dnZXIuZXJyb3IoJ0dyYWNlZnVsIHNodXRkb3duIGZvciB3b3JrZXJzIHRpbWVkIG91dCwgZm9yY2luZyBzaHV0ZG93bicpO1xuICAgICAgdGhpcy5mb3JjZUtpbGxBbGxXb3JrZXJzKCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFdhaXRzIGZvciBhbGwgd29ya2VycyB0byBleGl0XG4gICAqL1xuICBwcml2YXRlIGFzeW5jIHdhaXRGb3JBbGxXb3JrZXJzVG9FeGl0KCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHdoaWxlICh0aGlzLndvcmtlcnMuc2l6ZSA+IDApIHtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1hd2FpdC1pbi1sb29wXG4gICAgICBhd2FpdCBkZWxheSgxMDApO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBGb3JjZSBraWxscyBhbGwgcmVtYWluaW5nIHdvcmtlcnNcbiAgICovXG4gIHByaXZhdGUgZm9yY2VLaWxsQWxsV29ya2VycygpOiB2b2lkIHtcbiAgICBBcnJheS5mcm9tKHRoaXMud29ya2Vycy52YWx1ZXMoKSkuZm9yRWFjaCgod29ya2VyU3RhdGUpID0+IHtcbiAgICAgIGxvZ2dlci5lcnJvcihcbiAgICAgICAgYEZvcmNlIGtpbGxpbmcgd29ya2VyICR7d29ya2VyU3RhdGUuaWR9IChwaWQ6ICR7d29ya2VyU3RhdGUud29ya2VyLnByb2Nlc3MucGlkfSlgLFxuICAgICAgKTtcbiAgICAgIHdvcmtlclN0YXRlLndvcmtlci5raWxsKCdTSUdLSUxMJyk7XG4gICAgfSk7XG4gICAgdGhpcy53b3JrZXJzLmNsZWFyKCk7XG4gIH1cblxuICAvKipcbiAgICogU2h1dHMgZG93biBhIHdvcmtlciBwcm9jZXNzXG4gICAqL1xuICBwcml2YXRlIGFzeW5jIHNodXRkb3duV29ya2VyKHNpZ25hbD86IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICAgIGxvZ2dlci5pbmZvKFxuICAgICAgYFdvcmtlciAke3RoaXMuZ2V0Q3VycmVudFdvcmtlcklkKCl9IChwaWQ6ICR7cHJvY2Vzcy5waWR9KSBzaHV0dGluZyBkb3duIChzaWduYWw6ICR7XG4gICAgICAgIHNpZ25hbCA/PyAnbWFudWFsJ1xuICAgICAgfSlgLFxuICAgICk7XG5cbiAgICB0aGlzLnJlbW92ZVNpZ25hbEhhbmRsZXJzKCk7XG5cbiAgICAvLyBFeGVjdXRlIHdvcmtlciBzaHV0ZG93biBmdW5jdGlvblxuICAgIGF3YWl0IHNhZmVFeGVjdXRlKFxuICAgICAgKCkgPT5cbiAgICAgICAgdGltZW91dChcbiAgICAgICAgICB0aGlzLm9wdGlvbnMud29ya2VyU2h1dGRvd25GbihzaWduYWwpLFxuICAgICAgICAgIHRoaXMub3B0aW9ucy5zaHV0ZG93blRpbWVvdXQsXG4gICAgICAgICAgJ3dvcmtlciBzaHV0ZG93biB0aW1lb3V0JyxcbiAgICAgICAgKSxcbiAgICAgIGBFcnJvciBpbiB3b3JrZXIgJHt0aGlzLmdldEN1cnJlbnRXb3JrZXJJZCgpfSAocGlkOiAke3Byb2Nlc3MucGlkfSkgc2h1dGRvd24gZnVuY3Rpb25gLFxuICAgICk7XG5cbiAgICBsb2dnZXIuaW5mbyhgV29ya2VyICR7dGhpcy5nZXRDdXJyZW50V29ya2VySWQoKX0gKHBpZDogJHtwcm9jZXNzLnBpZH0pIHNodXRkb3duIGNvbXBsZXRlZGApO1xuICAgIHByb2Nlc3MuZXhpdCgwKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIHRoZSBjdXJyZW50IG51bWJlciBvZiBhY3RpdmUgd29ya2Vyc1xuICAgKi9cbiAgcHVibGljIGdldFdvcmtlckNvdW50KCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMud29ya2Vycy5zaXplO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgaW5mb3JtYXRpb24gYWJvdXQgYWxsIHdvcmtlcnNcbiAgICovXG4gIHB1YmxpYyBnZXRXb3JrZXJJbmZvKCk6IEFycmF5PHsgaWQ6IG51bWJlcjsgcGlkOiBudW1iZXI7IHJlc3RhcnRDb3VudDogbnVtYmVyIH0+IHtcbiAgICByZXR1cm4gQXJyYXkuZnJvbSh0aGlzLndvcmtlcnMudmFsdWVzKCkpLm1hcCgoc3RhdGUpID0+ICh7XG4gICAgICBpZDogc3RhdGUuaWQsXG4gICAgICBwaWQ6IHN0YXRlLndvcmtlci5wcm9jZXNzLnBpZCA/PyAtMSxcbiAgICAgIHJlc3RhcnRDb3VudDogc3RhdGUucmVzdGFydENvdW50LFxuICAgIH0pKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVja3MgaWYgdGhlIGNsdXN0ZXIgaXMgY3VycmVudGx5IHN0YXJ0ZWRcbiAgICovXG4gIHB1YmxpYyBpc1N0YXJ0ZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnRlZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVja3MgaWYgdGhlIGNsdXN0ZXIgaXMgY3VycmVudGx5IHNodXR0aW5nIGRvd25cbiAgICovXG4gIHB1YmxpYyBpc1NodXRkb3duKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmlzU2h1dHRpbmdEb3duO1xuICB9XG59XG5cbi8vIFR5cGUtc2FmZSBldmVudCBlbWl0dGVyIGludGVyZmFjZVxuZXhwb3J0IGludGVyZmFjZSBDbHVzdGVyTWFuYWdlckVtaXR0ZXIge1xuICBvbjxLIGV4dGVuZHMga2V5b2YgQ2x1c3Rlck1hbmFnZXJFdmVudHM+KGV2ZW50OiBLLCBsaXN0ZW5lcjogQ2x1c3Rlck1hbmFnZXJFdmVudHNbS10pOiB0aGlzO1xuICBlbWl0PEsgZXh0ZW5kcyBrZXlvZiBDbHVzdGVyTWFuYWdlckV2ZW50cz4oXG4gICAgZXZlbnQ6IEssXG4gICAgLi4uYXJnczogUGFyYW1ldGVyczxDbHVzdGVyTWFuYWdlckV2ZW50c1tLXT5cbiAgKTogYm9vbGVhbjtcbn1cbiJdfQ==
|
|
479
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFuYWdlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jbHVzdGVyL21hbmFnZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBR0EsbUNBQXNDO0FBQ3RDLGtEQUFvQztBQVVwQyxtQ0FBaUY7QUFFakY7Ozs7Ozs7OztHQVNHO0FBQ0gsTUFBYSxjQUFlLFNBQVEscUJBQVk7SUFlOUMsWUFBWSxVQUFpQyxFQUFFO1FBQzdDLEtBQUssRUFBRSxDQUFDO1FBYk8sWUFBTyxHQUFHLElBQUksR0FBRyxFQUF1QixDQUFDO1FBRWxELFlBQU8sR0FBRyxLQUFLLENBQUM7UUFFaEIsbUJBQWMsR0FBRyxLQUFLLENBQUM7UUFFdkIsb0JBQWUsR0FBeUIsSUFBSSxDQUFDO1FBRTdDLHdCQUFtQixHQUEwQixJQUFJLENBQUM7UUFFbEQsbUJBQWMsR0FBRyxJQUFJLEdBQUcsRUFBOEIsQ0FBQztRQUk3RCxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUEsaUNBQXlCLEVBQUMsT0FBTyxDQUFDLENBQUM7UUFDbEQsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO0lBQ3BCLENBQUM7SUFFRDs7OztPQUlHO0lBQ0ssVUFBVTtRQUNoQixnREFBZ0Q7UUFDaEQsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxTQUFTLEVBQUUsQ0FBQztZQUNuQyxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxZQUFZLENBQUM7Z0JBQ2hDLGFBQWEsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLGFBQWE7YUFDMUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztRQUNELElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO0lBQzdCLENBQUM7SUFFRDs7OztPQUlHO0lBQ0ksS0FBSyxDQUFDLEtBQUs7UUFDaEIsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxTQUFTLEVBQUUsQ0FBQztZ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S0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBQ3ZELEVBQUUsRUFBRSxLQUFLLENBQUMsRUFBRTtZQUNaLEdBQUcsRUFBRSxLQUFLLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDO1lBQ25DLFlBQVksRUFBRSxLQUFLLENBQUMsWUFBWTtTQUNqQyxDQUFDLENBQUMsQ0FBQztJQUNOLENBQUM7SUFFRDs7T0FFRztJQUNJLFNBQVM7UUFDZCxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUM7SUFDdEIsQ0FBQztJQUVEOztPQUVHO0lBQ0ksVUFBVTtRQUNmLE9BQU8sSUFBSSxDQUFDLGNBQWMsQ0FBQztJQUM3QixDQUFDO0NBQ0Y7QUF0aUJELHdDQXNpQkMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBjbGFzcy1tZXRob2RzLXVzZS10aGlzICovXG4vKiBlc2xpbnQtZGlzYWJsZSBuby1wYXJhbS1yZWFzc2lnbiAqL1xuaW1wb3J0IHsgV29ya2VyIH0gZnJvbSAnY2x1c3Rlcic7XG5pbXBvcnQgeyBFdmVudEVtaXR0ZXIgfSBmcm9tICdldmVudHMnO1xuaW1wb3J0ICogYXMgbG9nZ2VyIGZyb20gJy4uL2xvZ2dlcic7XG5pbXBvcnQge1xuICBDbHVzdGVyTWFuYWdlck9wdGlvbnMsXG4gIENsdXN0ZXJNYW5hZ2VyRXZlbnRzLFxuICBXb3JrZXJTdGF0ZSxcbiAgSVBDTWVzc2FnZSxcbiAgUGluZ01lc3NhZ2UsXG4gIFBvbmdNZXNzYWdlLFxuICBTaHV0ZG93bk1lc3NhZ2UsXG59IGZyb20gJy4vdHlwZXMnO1xuaW1wb3J0IHsgZGVsYXksIHRpbWVvdXQsIHNhZmVFeGVjdXRlLCB2YWxpZGF0ZUFuZERlZmF1bHRPcHRpb25zIH0gZnJvbSAnLi91dGlscyc7XG5cbi8qKlxuICogQ2x1c3Rlck1hbmFnZXIgLSBBIGNsdXN0ZXIgbGlmZWN5Y2xlIG1hbmFnZW1lbnQgc3lzdGVtXG4gKlxuICogVGhlIG1hbmFnZXIgc3VwcG9ydHMgdGhlIGZvbGxvd2luZyBmZWF0dXJlczpcbiAqIC0gR3JhY2VmdWwgc2h1dGRvd24gd2l0aCBjb25maWd1cmFibGUgdGltZW91dFxuICogLSBXb3JrZXIgaGVhbHRoIG1vbml0b3Jpbmcgd2l0aCBwaW5nL3BvbmcgbWVjaGFuaXNtXG4gKiAtIEF1dG9tYXRpYyB3b3JrZXIgcmVzdGFydCB3aXRoIGNvbmZpZ3VyYWJsZSBsaW1pdHNcbiAqIC0gU2lnbmFsIGhhbmRsaW5nIGZvciBzaHV0ZG93biB0cmlnZ2Vyc1xuICogLSBGbGV4aWJsZSBwcmltYXJ5IGFuZCB3b3JrZXIgZnVuY3Rpb24gaGFuZGxlcnNcbiAqL1xuZXhwb3J0IGNsYXNzIENsdXN0ZXJNYW5hZ2VyIGV4dGVuZHMgRXZlbnRFbWl0dGVyIHtcbiAgcHJpdmF0ZSByZWFkb25seSBvcHRpb25zOiBSZXF1aXJlZDxDbHVzdGVyTWFuYWdlck9wdGlvbnM+O1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgd29ya2VycyA9IG5ldyBNYXA8bnVtYmVyLCBXb3JrZXJTdGF0ZT4oKTtcblxuICBwcml2YXRlIHN0YXJ0ZWQgPSBmYWxzZTtcblxuICBwcml2YXRlIGlzU2h1dHRpbmdEb3duID0gZmFsc2U7XG5cbiAgcHJpdmF0ZSBzaHV0ZG93blByb21pc2U6IFByb21pc2U8dm9pZD4gfCBudWxsID0gbnVsbDtcblxuICBwcml2YXRlIGhlYWx0aENoZWNrSW50ZXJ2YWw6IE5vZGVKUy5UaW1lb3V0IHwgbnVsbCA9IG51bGw7XG5cbiAgcHJpdmF0ZSBzaWduYWxIYW5kbGVycyA9IG5ldyBNYXA8Tm9kZUpTLlNpZ25hbHMsICgpID0+IHZvaWQ+KCk7XG5cbiAgY29uc3RydWN0b3Iob3B0aW9uczogQ2x1c3Rlck1hbmFnZXJPcHRpb25zID0ge30pIHtcbiAgICBzdXBlcigpO1xuICAgIHRoaXMub3B0aW9ucyA9IHZhbGlkYXRlQW5kRGVmYXVsdE9wdGlvbnMob3B0aW9ucyk7XG4gICAgdGhpcy5pbml0aWFsaXplKCk7XG4gIH1cblxuICAvKipcbiAgICogSW5pdGlhbGl6ZSB0aGUgY2x1c3RlciBtYW5hZ2VyIHdpdGggcHJpbWFyeSBwcm9jZXNzIGNvbmZpZ3VyYXRpb25cbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9ub2RlanMub3JnL2RvY3MvbGF0ZXN0L2FwaS9jbHVzdGVyLmh0bWwjY2x1c3RlcnNldHVwcHJpbWFyeW9wdGlvbnMgTm9kZS5qcyBjbHVzdGVyLnNldHVwUHJpbWFyeSgpfVxuICAgKi9cbiAgcHJpdmF0ZSBpbml0aWFsaXplKCk6IHZvaWQge1xuICAgIC8vIE9ubHkgY2FsbCBzZXR1cFByaW1hcnkgaW4gdGhlIHByaW1hcnkgcHJvY2Vzc1xuICAgIGlmICh0aGlzLm9wdGlvbnMuY2x1c3Rlci5pc1ByaW1hcnkpIHtcbiAgICAgIHRoaXMub3B0aW9ucy5jbHVzdGVyLnNldHVwUHJpbWFyeSh7XG4gICAgICAgIHNlcmlhbGl6YXRpb246IHRoaXMub3B0aW9ucy5zZXJpYWxpemF0aW9uLFxuICAgICAgfSk7XG4gICAgfVxuICAgIHRoaXMuc2V0dXBTaWduYWxIYW5kbGVycygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFN0YXJ0cyB0aGUgY2x1c3RlciBtYW5hZ2VyXG4gICAqIEluIHByaW1hcnkgcHJvY2Vzczogc3RhcnRzIHdvcmtlcnMgYW5kIGhlYWx0aCBtb25pdG9yaW5nXG4gICAqIEluIHdvcmtlciBwcm9jZXNzOiBleGVjdXRlcyB3b3JrZXIgZnVuY3Rpb25cbiAgICovXG4gIHB1YmxpYyBhc3luYyBzdGFydCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAodGhpcy5vcHRpb25zLmNsdXN0ZXIuaXNQcmltYXJ5KSB7XG4gICAgICBhd2FpdCB0aGlzLnN0YXJ0UHJpbWFyeSgpO1xuICAgIH0gZWxzZSB7XG4gICAgICBhd2FpdCB0aGlzLnN0YXJ0V29ya2VyKCk7XG4gICAgfVxuICAgIHRoaXMuc3RhcnRlZCA9IHRydWU7XG4gIH1cblxuICAvKipcbiAgICogSW5pdGlhdGVzIGdyYWNlZnVsIHNodXRkb3duIG9mIHRoZSBjbHVzdGVyXG4gICAqL1xuICBwdWJsaWMgc2h1dGRvd24oc2lnbmFsPzogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKCF0aGlzLnN0YXJ0ZWQpIHtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5zaHV0ZG93blByb21pc2UpIHtcbiAgICAgIHJldHVybiB0aGlzLnNodXRkb3duUHJvbWlzZTtcbiAgICB9XG5cbiAgICB0aGlzLmlzU2h1dHRpbmdEb3duID0gdHJ1ZTtcbiAgICB0aGlzLmVtaXQoJ3NodXRkb3duOnN0YXJ0ZWQnLCBzaWduYWwpO1xuXG4gICAgaWYgKHRoaXMub3B0aW9ucy5jbHVzdGVyLmlzUHJpbWFyeSkge1xuICAgICAgdGhpcy5zaHV0ZG93blByb21pc2UgPSB0aGlzLnNodXRkb3duUHJpbWFyeShzaWduYWwpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnNodXRkb3duUHJvbWlzZSA9IHRoaXMuc2h1dGRvd25Xb3JrZXIoc2lnbmFsKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5zaHV0ZG93blByb21pc2U7XG4gIH1cblxuICAvKipcbiAgICogU2V0cyB1cCBzaWduYWwgaGFuZGxlcnMgZm9yIGdyYWNlZnVsIHNodXRkb3duXG4gICAqL1xuICBwcml2YXRlIHNldHVwU2lnbmFsSGFuZGxlcnMoKTogdm9pZCB7XG4gICAgdGhpcy5vcHRpb25zLnNodXRkb3duU2lnbmFscy5mb3JFYWNoKChzaWduYWwpID0+IHtcbiAgICAgIGNvbnN0IGhhbmRsZXIgPSAoKSA9PiB7XG4gICAgICAgIHRoaXMuc2h1dGRvd24oc2lnbmFsKTtcbiAgICAgIH07XG4gICAgICB0aGlzLnNpZ25hbEhhbmRsZXJzLnNldChzaWduYWwsIGhhbmRsZXIpO1xuICAgICAgcHJvY2Vzcy5vbihzaWduYWwsIGhhbmRsZXIpO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlbW92ZXMgc2lnbmFsIGhhbmRsZXJzXG4gICAqL1xuICBwcml2YXRlIHJlbW92ZVNpZ25hbEhhbmRsZXJzKCk6IHZvaWQge1xuICAgIEFycmF5LmZyb20odGhpcy5zaWduYWxIYW5kbGVycy5lbnRyaWVzKCkpLmZvckVhY2goKFtzaWduYWwsIGhhbmRsZXJdKSA9PiB7XG4gICAgICBwcm9jZXNzLnJlbW92ZUxpc3RlbmVyKHNpZ25hbCwgaGFuZGxlcik7XG4gICAgfSk7XG4gICAgdGhpcy5zaWduYWxIYW5kbGVycy5jbGVhcigpO1xuICB9XG5cbiAgLyoqXG4gICAqIFN0YXJ0cyB0aGUgcHJpbWFyeSBwcm9jZXNzXG4gICAqL1xuICBwcml2YXRlIGFzeW5jIHN0YXJ0UHJpbWFyeSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBsb2dnZXIuaW5mbyhcbiAgICAgIGBQcmltYXJ5IHByb2Nlc3MgKHBpZDogJHtwcm9jZXNzLnBpZH0pIHN0YXJ0aW5nIHdpdGggJHt0aGlzLm9wdGlvbnMubnVtV29ya2Vyc30gd29ya2Vyc2AsXG4gICAgKTtcblxuICAgIC8vIEV4ZWN1dGUgcHJpbWFyeSBpbml0aWFsaXphdGlvbiBmdW5jdGlvbiwgYW55IGVycm9yIHdpbGwgc3RvcCB0aGUgY2x1c3RlciBmcm9tIHN0YXJ0aW5nXG4gICAgYXdhaXQgdGhpcy5vcHRpb25zLnByaW1hcnlGbigpO1xuXG4gICAgLy8gU2V0IHVwIGNsdXN0ZXIgZXZlbnQgaGFuZGxlcnNcbiAgICB0aGlzLnNldHVwQ2x1c3RlckV2ZW50SGFuZGxlcnMoKTtcblxuICAgIC8vIFNwYXduIGluaXRpYWwgd29ya2Vyc1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5vcHRpb25zLm51bVdvcmtlcnM7IGkgKz0gMSkge1xuICAgICAgY29uc3Qgd29ya2VySWQgPSBpICsgMTsgLy8gV29ya2VyIElEcyBzdGFydCBmcm9tIDFcbiAgICAgIHRoaXMuc3Bhd25Xb3JrZXIod29ya2VySWQpO1xuICAgIH1cblxuICAgIC8vIFN0YXJ0IGhlYWx0aCBtb25pdG9yaW5nXG4gICAgdGhpcy5zdGFydEhlYWx0aE1vbml0b3JpbmcoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTdGFydHMgYSB3b3JrZXIgcHJvY2Vzc1xuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyBzdGFydFdvcmtlcigpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBsb2dnZXIuaW5mbyhgV29ya2VyICR7dGhpcy5nZXRDdXJyZW50V29ya2VySWQoKX0gKHBpZDogJHtwcm9jZXNzLnBpZH0pIHN0YXJ0aW5nYCk7XG5cbiAgICAvLyBTZXQgdXAgSVBDIG1lc3NhZ2UgaGFuZGxlcnNcbiAgICB0aGlzLnNldHVwV29ya2VyTWVzc2FnZUhhbmRsZXJzKCk7XG5cbiAgICAvLyBFeGVjdXRlIHdvcmtlciBpbml0aWFsaXphdGlvbiBmdW5jdGlvbiwgYW55IGVycm9yIHdpbGwgYmUgcHJvcGFnYXRlZFxuICAgIGF3YWl0IHRoaXMub3B0aW9ucy53b3JrZXJGbigpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldHMgdXAgY2x1c3RlciBldmVudCBoYW5kbGVycyBmb3IgdGhlIHByaW1hcnkgcHJvY2Vzc1xuICAgKi9cbiAgcHJpdmF0ZSBzZXR1cENsdXN0ZXJFdmVudEhhbmRsZXJzKCk6IHZvaWQge1xuICAgIHRoaXMub3B0aW9ucy5jbHVzdGVyLm9uKCdleGl0JywgKHdvcmtlcjogV29ya2VyLCBjb2RlOiBudW1iZXIsIHNpZ25hbDogc3RyaW5nKSA9PiB7XG4gICAgICB0aGlzLmhhbmRsZVdvcmtlckV4aXQod29ya2VyLCBjb2RlLCBzaWduYWwpO1xuICAgIH0pO1xuXG4gICAgdGhpcy5vcHRpb25zLmNsdXN0ZXIub24oJ29ubGluZScsICh3b3JrZXI6IFdvcmtlcikgPT4ge1xuICAgICAgbG9nZ2VyLmluZm8oYFdvcmtlciAke3RoaXMuZ2V0V29ya2VySWQod29ya2VyKX0gKHBpZDogJHt3b3JrZXIucHJvY2Vzcy5waWR9KSBpcyBvbmxpbmVgKTtcbiAgICAgIHRoaXMuZW1pdCgnd29ya2VyOnN0YXJ0ZWQnLCB3b3JrZXIpO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldHMgdXAgSVBDIG1lc3NhZ2UgaGFuZGxlcnMgZm9yIHdvcmtlciBwcm9jZXNzZXNcbiAgICovXG4gIHByaXZhdGUgc2V0dXBXb3JrZXJNZXNzYWdlSGFuZGxlcnMoKTogdm9pZCB7XG4gICAgcHJvY2Vzcy5vbignbWVzc2FnZScsIChtZXNzYWdlOiBJUENNZXNzYWdlKSA9PiB7XG4gICAgICBzd2l0Y2ggKG1lc3NhZ2UudHlwZSkge1xuICAgICAgICBjYXNlICdwaW5nJzpcbiAgICAgICAgICB0aGlzLmhhbmRsZVdvcmtlclBpbmcobWVzc2FnZSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ3NodXRkb3duJzpcbiAgICAgICAgICB0aGlzLnNodXRkb3duKG1lc3NhZ2Uuc2lnbmFsKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICBpZiAoIW1lc3NhZ2UudHlwZS5pbmNsdWRlcygnTWV0cmljcycpKSB7XG4gICAgICAgICAgICBsb2dnZXIud2FybihgaWdub3JpbmcgdW5rbm93biBtZXNzYWdlIHR5cGUgaW4gd29ya2VyICR7cHJvY2Vzcy5waWR9OiAke21lc3NhZ2UudHlwZX1gKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogU3Bhd25zIGEgbmV3IHdvcmtlciBhbmQgc2V0cyB1cCBpdHMgc3RhdGVcbiAgICovXG4gIHByaXZhdGUgc3Bhd25Xb3JrZXIoaWQ6IG51bWJlcik6IFdvcmtlciB7XG4gICAgY29uc3Qgd29ya2VyID0gdGhpcy5vcHRpb25zLmNsdXN0ZXIuZm9yayh7XG4gICAgICBXT1JLRVJfSUQ6IGlkLFxuICAgIH0pO1xuICAgIGNvbnN0IHdvcmtlclN0YXRlOiBXb3JrZXJTdGF0ZSA9IHtcbiAgICAgIGlkLFxuICAgICAgd29ya2VyLFxuICAgICAgcmVzdGFydENvdW50OiAwLFxuICAgICAgbGFzdFBpbmc6IERhdGUubm93KCksXG4gICAgICBwZW5kaW5nUGluZzogZmFsc2UsXG4gICAgICBpc1NodXR0aW5nRG93bjogZmFsc2UsXG4gICAgfTtcblxuICAgIHRoaXMud29ya2Vycy5zZXQod29ya2VyLmlkLCB3b3JrZXJTdGF0ZSk7XG5cbiAgICAvLyBTZXQgdXAgd29ya2VyIG1lc3NhZ2UgaGFuZGxlclxuICAgIHdvcmtlci5vbignbWVzc2FnZScsIChtZXNzYWdlOiBJUENNZXNzYWdlKSA9PiB7XG4gICAgICB0aGlzLmhhbmRsZVdvcmtlck1lc3NhZ2Uod29ya2VyLCBtZXNzYWdlKTtcbiAgICB9KTtcblxuICAgIHJldHVybiB3b3JrZXI7XG4gIH1cblxuICAvKipcbiAgICogSGFuZGxlcyBtZXNzYWdlcyBmcm9tIHdvcmtlcnNcbiAgICovXG4gIHByaXZhdGUgaGFuZGxlV29ya2VyTWVzc2FnZSh3b3JrZXI6IFdvcmtlciwgbWVzc2FnZTogSVBDTWVzc2FnZSk6IHZvaWQge1xuICAgIGNvbnN0IHdvcmtlclN0YXRlID0gdGhpcy53b3JrZXJzLmdldCh3b3JrZXIuaWQpO1xuICAgIGlmICghd29ya2VyU3RhdGUpIHJldHVybjtcblxuICAgIHN3aXRjaCAobWVzc2FnZS50eXBlKSB7XG4gICAgICBjYXNlICdwb25nJzpcbiAgICAgICAgd29ya2VyU3RhdGUubGFzdFBpbmcgPSBEYXRlLm5vdygpO1xuICAgICAgICB3b3JrZXJTdGF0ZS5wZW5kaW5nUGluZyA9IGZhbHNlO1xuICAgICAgICBicmVhaztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGlmICghbWVzc2FnZS50eXBlLmluY2x1ZGVzKCdNZXRyaWNzJykpIHtcbiAgICAgICAgICBsb2dnZXIud2FybihcbiAgICAgICAgICAgIGBSZWNlaXZlZCB1bmtub3duIG1lc3NhZ2UgdHlwZSBmcm9tIHdvcmtlciAke3RoaXMuZ2V0V29ya2VySWQod29ya2VyKX0gKHBpZDogJHtcbiAgICAgICAgICAgICAgd29ya2VyLnByb2Nlc3MucGlkXG4gICAgICAgICAgICB9KTogJHttZXNzYWdlLnR5cGV9YCxcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBIYW5kbGVzIHBpbmcgbWVzc2FnZXMgaW4gd29ya2VyIHByb2Nlc3Nlc1xuICAgKi9cbiAgcHJpdmF0ZSBoYW5kbGVXb3JrZXJQaW5nKG1lc3NhZ2U6IFBpbmdNZXNzYWdlKTogdm9pZCB7XG4gICAgY29uc3QgcG9uZ01lc3NhZ2U6IFBvbmdNZXNzYWdlID0ge1xuICAgICAgdHlwZTogJ3BvbmcnLFxuICAgICAgdGltZXN0YW1wOiBtZXNzYWdlLnRpbWVzdGFtcCxcbiAgICB9O1xuXG4gICAgaWYgKHByb2Nlc3Muc2VuZCkge1xuICAgICAgcHJvY2Vzcy5zZW5kKHBvbmdNZXNzYWdlKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogU3RhcnRzIGhlYWx0aCBtb25pdG9yaW5nIGZvciBhbGwgd29ya2Vyc1xuICAgKi9cbiAgcHJpdmF0ZSBzdGFydEhlYWx0aE1vbml0b3JpbmcoKTogdm9pZCB7XG4gICAgdGhpcy5oZWFsdGhDaGVja0ludGVydmFsID0gc2V0SW50ZXJ2YWwoKCkgPT4ge1xuICAgICAgdGhpcy5wZXJmb3JtSGVhbHRoQ2hlY2soKTtcbiAgICB9LCB0aGlzLm9wdGlvbnMucGluZ0ZyZXF1ZW5jeSk7XG4gIH1cblxuICAvKipcbiAgICogU3RvcHMgaGVhbHRoIG1vbml0b3JpbmdcbiAgICovXG4gIHByaXZhdGUgc3RvcEhlYWx0aE1vbml0b3JpbmcoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuaGVhbHRoQ2hlY2tJbnRlcnZhbCkge1xuICAgICAgY2xlYXJJbnRlcnZhbCh0aGlzLmhlYWx0aENoZWNrSW50ZXJ2YWwpO1xuICAgICAgdGhpcy5oZWFsdGhDaGVja0ludGVydmFsID0gbnVsbDtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUGVyZm9ybXMgaGVhbHRoIGNoZWNrIG9uIGFsbCB3b3JrZXJzXG4gICAqL1xuICBwcml2YXRlIHBlcmZvcm1IZWFsdGhDaGVjaygpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5pc1NodXR0aW5nRG93bikgcmV0dXJuO1xuXG4gICAgQXJyYXkuZnJvbSh0aGlzLndvcmtlcnMudmFsdWVzKCkpXG4gICAgICAuZmlsdGVyKCh3b3JrZXJTdGF0ZSkgPT4gIXdvcmtlclN0YXRlLmlzU2h1dHRpbmdEb3duKVxuICAgICAgLmZvckVhY2goKHdvcmtlclN0YXRlKSA9PiB7XG4gICAgICAgIGNvbnN0IHRpbWVTaW5jZUxhc3RQaW5nID0gRGF0ZS5ub3coKSAtIHdvcmtlclN0YXRlLmxhc3RQaW5nO1xuXG4gICAgICAgIGlmICh3b3JrZXJTdGF0ZS5wZW5kaW5nUGluZyAmJiB0aW1lU2luY2VMYXN0UGluZyA+IHRoaXMub3B0aW9ucy5waW5nVGltZW91dCkge1xuICAgICAgICAgIC8vIFdvcmtlciBpcyBzdHVjaywgaGFuZGxlIGl0XG4gICAgICAgICAgdGhpcy5oYW5kbGVTdHVja1dvcmtlcih3b3JrZXJTdGF0ZSk7XG4gICAgICAgIH0gZWxzZSBpZiAoIXdvcmtlclN0YXRlLnBlbmRpbmdQaW5nKSB7XG4gICAgICAgICAgLy8gU2VuZCBwaW5nIHRvIHdvcmtlclxuICAgICAgICAgIHRoaXMuc2VuZFBpbmdUb1dvcmtlcih3b3JrZXJTdGF0ZSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFNlbmRzIGEgcGluZyBtZXNzYWdlIHRvIGEgd29ya2VyXG4gICAqL1xuICBwcml2YXRlIHNlbmRQaW5nVG9Xb3JrZXIod29ya2VyU3RhdGU6IFdvcmtlclN0YXRlKTogdm9pZCB7XG4gICAgY29uc3QgcGluZ01lc3NhZ2U6IFBpbmdNZXNzYWdlID0ge1xuICAgICAgdHlwZTogJ3BpbmcnLFxuICAgICAgdGltZXN0YW1wOiBEYXRlLm5vdygpLFxuICAgIH07XG5cbiAgICB3b3JrZXJTdGF0ZS5wZW5kaW5nUGluZyA9IHRydWU7XG4gICAgdHJ5IHtcbiAgICAgIHdvcmtlclN0YXRlLndvcmtlci5zZW5kKHBpbmdNZXNzYWdlKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgbG9nZ2VyLmVycm9yKFxuICAgICAgICBgRmFpbGVkIHRvIHNlbmQgcGluZyB0byB3b3JrZXIgJHt3b3JrZXJTdGF0ZS5pZH0gKHBpZDogJHtcbiAgICAgICAgICB3b3JrZXJTdGF0ZS53b3JrZXIucHJvY2Vzcy5waWRcbiAgICAgICAgfSk6ICR7ZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiBTdHJpbmcoZXJyb3IpfWAsXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBIYW5kbGVzIGEgc3R1Y2sgd29ya2VyXG4gICAqL1xuICBwcml2YXRlIGhhbmRsZVN0dWNrV29ya2VyKHdvcmtlclN0YXRlOiBXb3JrZXJTdGF0ZSk6IHZvaWQge1xuICAgIGxvZ2dlci5lcnJvcihcbiAgICAgIGBXb3JrZXIgJHt3b3JrZXJTdGF0ZS5pZH0gKHBpZDogJHt3b3JrZXJTdGF0ZS53b3JrZXIucHJvY2Vzcy5waWR9KSBpcyBzdHVjaywga2lsbGluZyBpdGAsXG4gICAgKTtcbiAgICB0aGlzLmVtaXQoJ3dvcmtlcjpzdHVjaycsIHdvcmtlclN0YXRlLndvcmtlcik7XG5cbiAgICAvLyBSZW1vdmUgd29ya2VyIHN0YXRlXG4gICAgdGhpcy53b3JrZXJzLmRlbGV0ZSh3b3JrZXJTdGF0ZS53b3JrZXIuaWQpO1xuXG4gICAgLy8gS2lsbCB0aGUgd29ya2VyXG4gICAgd29ya2VyU3RhdGUud29ya2VyLmtpbGwoJ1NJR0tJTEwnKTtcblxuICAgIC8vIERldGVybWluZSBpZiB3ZSBzaG91bGQgc3Bhd24gYSByZXBsYWNlbWVudFxuICAgIGNvbnN0IHNob3VsZFNwYXduID0gdGhpcy5vcHRpb25zLnN0dWNrV29ya2VyUmVzcGF3bkZ1bmMod29ya2VyU3RhdGUud29ya2VyKTtcblxuICAgIGlmIChzaG91bGRTcGF3biAmJiAhdGhpcy5pc1NodXR0aW5nRG93bikge1xuICAgICAgbG9nZ2VyLmluZm8oXG4gICAgICAgIGBTcGF3bmluZyByZXBsYWNlbWVudCB3b3JrZXIgZm9yIHN0dWNrIHdvcmtlciAke3dvcmtlclN0YXRlLmlkfSAocGlkOiAke3dvcmtlclN0YXRlLndvcmtlci5wcm9jZXNzLnBpZH0pYCxcbiAgICAgICk7XG4gICAgICBjb25zdCB7IHJlc3RhcnRDb3VudCB9ID0gd29ya2VyU3RhdGU7IC8vIFByZXNlcnZlIHJlc3RhcnQgY291bnRcbiAgICAgIGNvbnN0IG5ld1dvcmtlciA9IHRoaXMuc3Bhd25Xb3JrZXIod29ya2VyU3RhdGUuaWQpO1xuICAgICAgY29uc3QgbmV3V29ya2VyU3RhdGUgPSB0aGlzLndvcmtlcnMuZ2V0KG5ld1dvcmtlci5pZCk7XG4gICAgICBpZiAobmV3V29ya2VyU3RhdGUpIHtcbiAgICAgICAgbmV3V29ya2VyU3RhdGUucmVzdGFydENvdW50ID0gcmVzdGFydENvdW50O1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBsb2dnZXIuZXJyb3IoXG4gICAgICAgIGBUcmlnZ2VyaW5nIGNsdXN0ZXIgc2h1dGRvd24gZHVlIHRvIHN0dWNrIHdvcmtlciAke3dvcmtlclN0YXRlLmlkfSAocGlkOiAke3dvcmtlclN0YXRlLndvcmtlci5wcm9jZXNzLnBpZH0pYCxcbiAgICAgICk7XG4gICAgICB0aGlzLnNodXRkb3duKCdTVFVDS19XT1JLRVInKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogSGFuZGxlcyB3b3JrZXIgZXhpdCBldmVudHNcbiAgICovXG4gIHByaXZhdGUgaGFuZGxlV29ya2VyRXhpdCh3b3JrZXI6IFdvcmtlciwgY29kZTogbnVtYmVyIHwgbnVsbCwgc2lnbmFsOiBzdHJpbmcgfCBudWxsKTogdm9pZCB7XG4gICAgY29uc3Qgd29ya2VySWQgPSB0aGlzLmdldFdvcmtlcklkKHdvcmtlcik7XG4gICAgdGhpcy5lbWl0KCd3b3JrZXI6ZGllZCcsIHdvcmtlciwgY29kZSwgc2lnbmFsKTtcblxuICAgIGNvbnN0IHdvcmtlclN0YXRlID0gdGhpcy53b3JrZXJzLmdldCh3b3JrZXIuaWQpO1xuICAgIGlmICghd29ya2VyU3RhdGUpIHtcbiAgICAgIGxvZ2dlci53YXJuKFxuICAgICAgICBgVW5rbm93biB3b3JrZXIgJHt3b3JrZXJJZH0gKHBpZDogJHt3b3JrZXIucHJvY2Vzcy5waWR9KSBleGl0ZWQgd2l0aCBjb2RlICR7Y29kZX0gYW5kIHNpZ25hbCAke3NpZ25hbH1gLFxuICAgICAgKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLndvcmtlcnMuZGVsZXRlKHdvcmtlci5pZCk7XG5cbiAgICAvLyBJZiB3ZSdyZSBzaHV0dGluZyBkb3duIG9yIHdvcmtlciB3YXMga2lsbGVkIGludGVudGlvbmFsbHksIGRvbid0IHJlc3RhcnRcbiAgICBpZiAodGhpcy5pc1NodXR0aW5nRG93biB8fCB3b3JrZXJTdGF0ZS5pc1NodXR0aW5nRG93bikge1xuICAgICAgbG9nZ2VyLmluZm8oXG4gICAgICAgIGBXb3JrZXIgJHt3b3JrZXJJZH0gKHBpZDogJHt3b3JrZXIucHJvY2Vzcy5waWR9KSBleGl0ZWQgd2l0aCBjb2RlICR7Y29kZX0gYW5kIHNpZ25hbCAke3NpZ25hbH1gLFxuICAgICAgKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgbG9nZ2VyLmVycm9yKFxuICAgICAgYFdvcmtlciAke3dvcmtlcklkfSAocGlkOiAke3dvcmtlci5wcm9jZXNzLnBpZH0pIGV4aXRlZCB1bmV4cGVjdGVkbHkgd2l0aCBjb2RlICR7Y29kZX0gYW5kIHNpZ25hbCAke3NpZ25hbH1gLFxuICAgICk7XG4gICAgLy8gSGFuZGxlIHVuZXhwZWN0ZWQgZXhpdFxuICAgIHRoaXMuaGFuZGxlVW5leHBlY3RlZFdvcmtlckV4aXQod29ya2VyU3RhdGUpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRXb3JrZXJJZCh3b3JrZXI6IFdvcmtlcik6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMud29ya2Vycy5nZXQod29ya2VyLmlkKT8uaWQgPz8gd29ya2VyLmlkO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRDdXJyZW50V29ya2VySWQoKTogbnVtYmVyIHtcbiAgICBjb25zdCBlbnZXb3JrZXJJZCA9XG4gICAgICBwcm9jZXNzLmVudi5XT1JLRVJfSUQgIT09IHVuZGVmaW5lZCA/IE51bWJlcihwcm9jZXNzLmVudi5XT1JLRVJfSUQpIDogdW5kZWZpbmVkO1xuICAgIHJldHVybiBlbnZXb3JrZXJJZCA/PyB0aGlzLm9wdGlvbnMuY2x1c3Rlci53b3JrZXI/LmlkID8/IC0xO1xuICB9XG5cbiAgLyoqXG4gICAqIEhhbmRsZXMgdW5leHBlY3RlZCB3b3JrZXIgZXhpdHMgd2l0aCByZXN0YXJ0IGxvZ2ljXG4gICAqL1xuICBwcml2YXRlIGhhbmRsZVVuZXhwZWN0ZWRXb3JrZXJFeGl0KHdvcmtlclN0YXRlOiBXb3JrZXJTdGF0ZSk6IHZvaWQge1xuICAgIGNvbnN0IHJlc3RhcnRDb3VudCA9IHdvcmtlclN0YXRlLnJlc3RhcnRDb3VudCArIDE7XG5cbiAgICBpZiAocmVzdGFydENvdW50IDw9IHRoaXMub3B0aW9ucy5yZXN0YXJ0TWF4VGltZXMpIHtcbiAgICAgIGxvZ2dlci5lcnJvcihcbiAgICAgICAgYFJlc3RhcnRpbmcgd29ya2VyICR7d29ya2VyU3RhdGUuaWR9IChwaWQ6ICR7d29ya2VyU3RhdGUud29ya2VyLnByb2Nlc3MucGlkfSkgKGF0dGVtcHQgJHtyZXN0YXJ0Q291bnR9LyR7dGhpcy5vcHRpb25zLnJlc3RhcnRNYXhUaW1lc30pYCxcbiAgICAgICk7XG4gICAgICBjb25zdCBuZXdXb3JrZXIgPSB0aGlzLnNwYXduV29ya2VyKHdvcmtlclN0YXRlLmlkKTtcbiAgICAgIGNvbnN0IG5ld1dvcmtlclN0YXRlID0gdGhpcy53b3JrZXJzLmdldChuZXdXb3JrZXIuaWQpO1xuICAgICAgaWYgKG5ld1dvcmtlclN0YXRlKSB7XG4gICAgICAgIG5ld1dvcmtlclN0YXRlLnJlc3RhcnRDb3VudCA9IHJlc3RhcnRDb3VudDtcbiAgICAgIH1cbiAgICAgIHRoaXMuZW1pdCgnd29ya2VyOnJlc3RhcnRlZCcsIG5ld1dvcmtlciwgd29ya2VyU3RhdGUucmVzdGFydENvdW50KTtcbiAgICB9IGVsc2Uge1xuICAgICAgbG9nZ2VyLmVycm9yKFxuICAgICAgICBgUmVzdGFydCBsaW1pdCAoJHt0aGlzLm9wdGlvbnMucmVzdGFydE1heFRpbWVzfSkgZXhjZWVkZWQgZm9yIHdvcmtlciAke3dvcmtlclN0YXRlLmlkfSAocGlkOiAke3dvcmtlclN0YXRlLndvcmtlci5wcm9jZXNzLnBpZH0pLCBzaHV0dGluZyBkb3duIGNsdXN0ZXJgLFxuICAgICAgKTtcbiAgICAgIHRoaXMuZW1pdCgnd29ya2VyOnJlc3RhcnQtbGltaXQtZXhjZWVkZWQnLCB3b3JrZXJTdGF0ZS53b3JrZXIsIHdvcmtlclN0YXRlLnJlc3RhcnRDb3VudCk7XG4gICAgICB0aGlzLnNodXRkb3duKCdSRVNUQVJUX0xJTUlUX0VYQ0VFREVEJyk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFNodXRzIGRvd24gdGhlIHByaW1hcnkgcHJvY2Vzc1xuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyBzaHV0ZG93blByaW1hcnkoc2lnbmFsPzogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgbG9nZ2VyLndhcm4oXG4gICAgICBgUHJpbWFyeSBwcm9jZXNzIChwaWQ6ICR7cHJvY2Vzcy5waWR9KSBzaHV0dGluZyBkb3duIChzaWduYWw6ICR7c2lnbmFsID8/ICdtYW51YWwnfSlgLFxuICAgICk7XG5cbiAgICB0aGlzLnN0b3BIZWFsdGhNb25pdG9yaW5nKCk7XG4gICAgdGhpcy5yZW1vdmVTaWduYWxIYW5kbGVycygpO1xuXG4gICAgLy8gU2h1dGRvd24gYWxsIHdvcmtlcnNcbiAgICBhd2FpdCB0aGlzLnNodXRkb3duQWxsV29ya2VycyhzaWduYWwpO1xuXG4gICAgLy8gRXhlY3V0ZSBwcmltYXJ5IHNodXRkb3duIGZ1bmN0aW9uXG4gICAgYXdhaXQgc2FmZUV4ZWN1dGUoXG4gICAgICAoKSA9PlxuICAgICAgICB0aW1lb3V0KFxuICAgICAgICAgIHRoaXMub3B0aW9ucy5wcmltYXJ5U2h1dGRvd25GbihzaWduYWwpLFxuICAgICAgICAgIHRoaXMub3B0aW9ucy5zaHV0ZG93blRpbWVvdXQsXG4gICAgICAgICAgJ3ByaW1hcnkgc2h1dGRvd24gdGltZW91dCcsXG4gICAgICAgICksXG4gICAgICAnRXJyb3IgaW4gcHJpbWFyeSBzaHV0ZG93biBmdW5jdGlvbicsXG4gICAgKTtcblxuICAgIGxvZ2dlci5pbmZvKGBQcmltYXJ5IHByb2Nlc3MgKHBpZDogJHtwcm9jZXNzLnBpZH0pIHNodXRkb3duIGNvbXBsZXRlZGApO1xuICAgIHRoaXMuZW1pdCgnc2h1dGRvd246Y29tcGxldGVkJyk7XG4gICAgcHJvY2Vzcy5leGl0KDApO1xuICB9XG5cbiAgLyoqXG4gICAqIFNodXRzIGRvd24gYWxsIHdvcmtlcnMgZ3JhY2VmdWxseVxuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyBzaHV0ZG93bkFsbFdvcmtlcnMoc2lnbmFsPzogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKHRoaXMud29ya2Vycy5zaXplID09PSAwKSByZXR1cm47XG5cbiAgICBsb2dnZXIuaW5mbyhgU2h1dHRpbmcgZG93biAke3RoaXMud29ya2Vycy5zaXplfSB3b3JrZXJzLi4uYCk7XG5cbiAgICAvLyBNYXJrIGFsbCB3b3JrZXJzIGFzIHNodXR0aW5nIGRvd24gYW5kIHNlbmQgc2h1dGRvd24gbWVzc2FnZVxuICAgIEFycmF5LmZyb20odGhpcy53b3JrZXJzLnZhbHVlcygpKS5mb3JFYWNoKCh3b3JrZXJTdGF0ZSkgPT4ge1xuICAgICAgd29ya2VyU3RhdGUuaXNTaHV0dGluZ0Rvd24gPSB0cnVlO1xuICAgICAgLy8gT25seSBzZW5kIHNodXRkb3duIG1lc3NhZ2UgaWYgd29ya2VyIGlzIHN0aWxsIGNvbm5lY3RlZFxuICAgICAgaWYgKCF3b3JrZXJTdGF0ZS53b3JrZXIuaXNEZWFkKCkgJiYgd29ya2VyU3RhdGUud29ya2VyLnByb2Nlc3MuY29ubmVjdGVkKSB7XG4gICAgICAgIGNvbnN0IHNodXRkb3duTWVzc2FnZTogU2h1dGRvd25NZXNzYWdlID0ge1xuICAgICAgICAgIHR5cGU6ICdzaHV0ZG93bicsXG4gICAgICAgICAgc2lnbmFsLFxuICAgICAgICB9O1xuICAgICAgICB0cnkge1xuICAgICAgICAgIHdvcmtlclN0YXRlLndvcmtlci5zZW5kKHNodXRkb3duTWVzc2FnZSk7XG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgLy8gV29ya2VyIElQQyBjaGFubmVsIGlzIGFscmVhZHkgY2xvc2VkLCB3aGljaCBpcyBmaW5lXG4gICAgICAgICAgbG9nZ2VyLndhcm4oXG4gICAgICAgICAgICBgRmFpbGVkIHRvIHNlbmQgc2h1dGRvd24gbWVzc2FnZSB0byB3b3JrZXIgJHt3b3JrZXJTdGF0ZS5pZH0gKHBpZDogJHtcbiAgICAgICAgICAgICAgd29ya2VyU3RhdGUud29ya2VyLnByb2Nlc3MucGlkXG4gICAgICAgICAgICB9KTogJHtlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6IFN0cmluZyhlcnJvcil9YCxcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICAvLyBXYWl0IGZvciB3b3JrZXJzIHRvIGV4aXQgZ3JhY2VmdWxseSBvciB0aW1lb3V0XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHRpbWVvdXQoXG4gICAgICAgIHRoaXMud2FpdEZvckFsbFdvcmtlcnNUb0V4aXQoKSxcbiAgICAgICAgdGhpcy5vcHRpb25zLnNodXRkb3duVGltZW91dCxcbiAgICAgICAgJ1dvcmtlciBzaHV0ZG93biB0aW1lb3V0JyxcbiAgICAgICk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGxvZ2dlci5lcnJvcignR3JhY2VmdWwgc2h1dGRvd24gZm9yIHdvcmtlcnMgdGltZWQgb3V0LCBmb3JjaW5nIHNodXRkb3duJyk7XG4gICAgICB0aGlzLmZvcmNlS2lsbEFsbFdvcmtlcnMoKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogV2FpdHMgZm9yIGFsbCB3b3JrZXJzIHRvIGV4aXRcbiAgICovXG4gIHByaXZhdGUgYXN5bmMgd2FpdEZvckFsbFdvcmtlcnNUb0V4aXQoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgd2hpbGUgKHRoaXMud29ya2Vycy5zaXplID4gMCkge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWF3YWl0LWluLWxvb3BcbiAgICAgIGF3YWl0IGRlbGF5KDEwMCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEZvcmNlIGtpbGxzIGFsbCByZW1haW5pbmcgd29ya2Vyc1xuICAgKi9cbiAgcHJpdmF0ZSBmb3JjZUtpbGxBbGxXb3JrZXJzKCk6IHZvaWQge1xuICAgIEFycmF5LmZyb20odGhpcy53b3JrZXJzLnZhbHVlcygpKS5mb3JFYWNoKCh3b3JrZXJTdGF0ZSkgPT4ge1xuICAgICAgbG9nZ2VyLmVycm9yKFxuICAgICAgICBgRm9yY2Uga2lsbGluZyB3b3JrZXIgJHt3b3JrZXJTdGF0ZS5pZH0gKHBpZDogJHt3b3JrZXJTdGF0ZS53b3JrZXIucHJvY2Vzcy5waWR9KWAsXG4gICAgICApO1xuICAgICAgd29ya2VyU3RhdGUud29ya2VyLmtpbGwoJ1NJR0tJTEwnKTtcbiAgICB9KTtcbiAgICB0aGlzLndvcmtlcnMuY2xlYXIoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTaHV0cyBkb3duIGEgd29ya2VyIHByb2Nlc3NcbiAgICovXG4gIHByaXZhdGUgYXN5bmMgc2h1dGRvd25Xb3JrZXIoc2lnbmFsPzogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgbG9nZ2VyLndhcm4oXG4gICAgICBgV29ya2VyICR7dGhpcy5nZXRDdXJyZW50V29ya2VySWQoKX0gKHBpZDogJHtwcm9jZXNzLnBpZH0pIHNodXR0aW5nIGRvd24gKHNpZ25hbDogJHtcbiAgICAgICAgc2lnbmFsID8/ICdtYW51YWwnXG4gICAgICB9KWAsXG4gICAgKTtcblxuICAgIHRoaXMucmVtb3ZlU2lnbmFsSGFuZGxlcnMoKTtcblxuICAgIC8vIEV4ZWN1dGUgd29ya2VyIHNodXRkb3duIGZ1bmN0aW9uXG4gICAgYXdhaXQgc2FmZUV4ZWN1dGUoXG4gICAgICAoKSA9PlxuICAgICAgICB0aW1lb3V0KFxuICAgICAgICAgIHRoaXMub3B0aW9ucy53b3JrZXJTaHV0ZG93bkZuKHNpZ25hbCksXG4gICAgICAgICAgdGhpcy5vcHRpb25zLnNodXRkb3duVGltZW91dCxcbiAgICAgICAgICAnd29ya2VyIHNodXRkb3duIHRpbWVvdXQnLFxuICAgICAgICApLFxuICAgICAgYEVycm9yIGluIHdvcmtlciAke3RoaXMuZ2V0Q3VycmVudFdvcmtlcklkKCl9IChwaWQ6ICR7cHJvY2Vzcy5waWR9KSBzaHV0ZG93biBmdW5jdGlvbmAsXG4gICAgKTtcblxuICAgIGxvZ2dlci5pbmZvKGBXb3JrZXIgJHt0aGlzLmdldEN1cnJlbnRXb3JrZXJJZCgpfSAocGlkOiAke3Byb2Nlc3MucGlkfSkgc2h1dGRvd24gY29tcGxldGVkYCk7XG4gICAgcHJvY2Vzcy5leGl0KDApO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgdGhlIGN1cnJlbnQgbnVtYmVyIG9mIGFjdGl2ZSB3b3JrZXJzXG4gICAqL1xuICBwdWJsaWMgZ2V0V29ya2VyQ291bnQoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy53b3JrZXJzLnNpemU7XG4gIH1cblxuICAvKipcbiAgICogR2V0cyBpbmZvcm1hdGlvbiBhYm91dCBhbGwgd29ya2Vyc1xuICAgKi9cbiAgcHVibGljIGdldFdvcmtlckluZm8oKTogQXJyYXk8eyBpZDogbnVtYmVyOyBwaWQ6IG51bWJlcjsgcmVzdGFydENvdW50OiBudW1iZXIgfT4ge1xuICAgIHJldHVybiBBcnJheS5mcm9tKHRoaXMud29ya2Vycy52YWx1ZXMoKSkubWFwKChzdGF0ZSkgPT4gKHtcbiAgICAgIGlkOiBzdGF0ZS5pZCxcbiAgICAgIHBpZDogc3RhdGUud29ya2VyLnByb2Nlc3MucGlkID8/IC0xLFxuICAgICAgcmVzdGFydENvdW50OiBzdGF0ZS5yZXN0YXJ0Q291bnQsXG4gICAgfSkpO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrcyBpZiB0aGUgY2x1c3RlciBpcyBjdXJyZW50bHkgc3RhcnRlZFxuICAgKi9cbiAgcHVibGljIGlzU3RhcnRlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5zdGFydGVkO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrcyBpZiB0aGUgY2x1c3RlciBpcyBjdXJyZW50bHkgc2h1dHRpbmcgZG93blxuICAgKi9cbiAgcHVibGljIGlzU2h1dGRvd24oKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuaXNTaHV0dGluZ0Rvd247XG4gIH1cbn1cblxuLy8gVHlwZS1zYWZlIGV2ZW50IGVtaXR0ZXIgaW50ZXJmYWNlXG5leHBvcnQgaW50ZXJmYWNlIENsdXN0ZXJNYW5hZ2VyRW1pdHRlciB7XG4gIG9uPEsgZXh0ZW5kcyBrZXlvZiBDbHVzdGVyTWFuYWdlckV2ZW50cz4oZXZlbnQ6IEssIGxpc3RlbmVyOiBDbHVzdGVyTWFuYWdlckV2ZW50c1tLXSk6IHRoaXM7XG4gIGVtaXQ8SyBleHRlbmRzIGtleW9mIENsdXN0ZXJNYW5hZ2VyRXZlbnRzPihcbiAgICBldmVudDogSyxcbiAgICAuLi5hcmdzOiBQYXJhbWV0ZXJzPENsdXN0ZXJNYW5hZ2VyRXZlbnRzW0tdPlxuICApOiBib29sZWFuO1xufVxuIl19
|
package/build/index.d.ts
CHANGED
package/build/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,MAAM,iBAAiB,CAAC;AAEvC,cAAc,SAAS,CAAC;AACxB,cAAc,QAAQ,CAAC;AACvB,cAAc,UAAU,CAAC;AACzB,cAAc,UAAU,CAAC;AACzB,cAAc,qBAAqB,CAAC;AACpC,cAAc,WAAW,CAAC;AAC1B,cAAc,SAAS,CAAC;AACxB,cAAc,aAAa,CAAC;AAC5B,cAAc,QAAQ,CAAC;AACvB,cAAc,WAAW,CAAC;AAC1B,cAAc,iBAAiB,CAAC;AAChC,cAAc,cAAc,CAAC;AAC7B,OAAO,EAAE,QAAQ,EAAE,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,MAAM,iBAAiB,CAAC;AAEvC,cAAc,SAAS,CAAC;AACxB,cAAc,QAAQ,CAAC;AACvB,cAAc,UAAU,CAAC;AACzB,cAAc,UAAU,CAAC;AACzB,cAAc,qBAAqB,CAAC;AACpC,cAAc,WAAW,CAAC;AAC1B,cAAc,SAAS,CAAC;AACxB,cAAc,aAAa,CAAC;AAC5B,cAAc,QAAQ,CAAC;AACvB,cAAc,WAAW,CAAC;AAC1B,cAAc,iBAAiB,CAAC;AAChC,cAAc,cAAc,CAAC;AAC7B,cAAc,cAAc,CAAC;AAC7B,OAAO,EAAE,QAAQ,EAAE,CAAC"}
|
package/build/index.js
CHANGED
|
@@ -32,4 +32,5 @@ __exportStar(require("./sdks"), exports);
|
|
|
32
32
|
__exportStar(require("./cluster"), exports);
|
|
33
33
|
__exportStar(require("./feature-flags"), exports);
|
|
34
34
|
__exportStar(require("./auth-types"), exports);
|
|
35
|
-
|
|
35
|
+
__exportStar(require("./mock_utils"), exports);
|
|
36
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxnRUFBdUM7QUFlOUIsbUJBZkYsbUJBQVEsQ0FlRTtBQWJqQiwwQ0FBd0I7QUFDeEIseUNBQXVCO0FBQ3ZCLDJDQUF5QjtBQUN6QiwyQ0FBeUI7QUFDekIsc0RBQW9DO0FBQ3BDLDRDQUEwQjtBQUMxQiwwQ0FBd0I7QUFDeEIsOENBQTRCO0FBQzVCLHlDQUF1QjtBQUN2Qiw0Q0FBMEI7QUFDMUIsa0RBQWdDO0FBQ2hDLCtDQUE2QjtBQUM3QiwrQ0FBNkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgc2V0VmFsdWUgZnJvbSAnLi9saWIvc2V0LXZhbHVlJztcblxuZXhwb3J0ICogZnJvbSAnLi90eXBlcyc7XG5leHBvcnQgKiBmcm9tICcuL3RhZ3MnO1xuZXhwb3J0ICogZnJvbSAnLi9lcnJvcnMnO1xuZXhwb3J0ICogZnJvbSAnLi9sb2dnZXInO1xuZXhwb3J0ICogZnJvbSAnLi9zdHJ1Y3R1cmVkLWxvZ2dlcic7XG5leHBvcnQgKiBmcm9tICcuL25ldHdvcmsnO1xuZXhwb3J0ICogZnJvbSAnLi91dGlscyc7XG5leHBvcnQgKiBmcm9tICcuL2NvbnN0YW50cyc7XG5leHBvcnQgKiBmcm9tICcuL3Nka3MnO1xuZXhwb3J0ICogZnJvbSAnLi9jbHVzdGVyJztcbmV4cG9ydCAqIGZyb20gJy4vZmVhdHVyZS1mbGFncyc7XG5leHBvcnQgKiBmcm9tICcuL2F1dGgtdHlwZXMnO1xuZXhwb3J0ICogZnJvbSAnLi9tb2NrX3V0aWxzJztcbmV4cG9ydCB7IHNldFZhbHVlIH07XG4iXX0=
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"axios_client_mock_util.d.ts","sourceRoot":"","sources":["../../src/mock_utils/axios_client_mock_util.ts"],"names":[],"mappings":"AAAA,OAAO,YAAY,MAAM,OAAO,CAAC;AACjC,OAAO,WAAW,MAAM,oBAAoB,CAAC;AAE7C,eAAO,MAAM,gBAAgB,aAE3B,CAAC;AAGH,OAAO,EAAE,YAAY,EAAE,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.axiosFromLib = exports.mockAxiosFromLib = void 0;
|
|
7
|
+
const axios_1 = __importDefault(require("axios"));
|
|
8
|
+
exports.axiosFromLib = axios_1.default;
|
|
9
|
+
const axios_mock_adapter_1 = __importDefault(require("axios-mock-adapter"));
|
|
10
|
+
exports.mockAxiosFromLib = new axios_mock_adapter_1.default(axios_1.default, {
|
|
11
|
+
onNoMatch: 'throwException',
|
|
12
|
+
});
|
|
13
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXhpb3NfY2xpZW50X21vY2tfdXRpbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9tb2NrX3V0aWxzL2F4aW9zX2NsaWVudF9tb2NrX3V0aWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEsa0RBQWlDO0FBUXhCLHVCQVJGLGVBQVksQ0FRRTtBQVByQiw0RUFBNkM7QUFFaEMsUUFBQSxnQkFBZ0IsR0FBRyxJQUFJLDRCQUFXLENBQUMsZUFBbUIsRUFBRTtJQUNuRSxTQUFTLEVBQUUsZ0JBQWdCO0NBQzVCLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBheGlvc0Zyb21MaWIgZnJvbSAnYXhpb3MnO1xuaW1wb3J0IE1vY2tBZGFwdGVyIGZyb20gJ2F4aW9zLW1vY2stYWRhcHRlcic7XG5cbmV4cG9ydCBjb25zdCBtb2NrQXhpb3NGcm9tTGliID0gbmV3IE1vY2tBZGFwdGVyKGF4aW9zRnJvbUxpYiBhcyBhbnksIHtcbiAgb25Ob01hdGNoOiAndGhyb3dFeGNlcHRpb24nLFxufSk7XG5cbi8vIHdlIGFyZSBleHBvcnRpbmcgYXhpb3NGcm9tTGliIHRvIG1vY2sgdGhlIGF4aW9zIGxpYnJhcnkgaW4gdHJhbnNmb3JtZXIgdGVzdHNcbmV4cG9ydCB7IGF4aW9zRnJvbUxpYiB9O1xuIl19
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/mock_utils/index.ts"],"names":[],"mappings":"AAAA,cAAc,0BAA0B,CAAC"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
+
};
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
__exportStar(require("./axios_client_mock_util"), exports);
|
|
18
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvbW9ja191dGlscy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsMkRBQXlDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnLi9heGlvc19jbGllbnRfbW9ja191dGlsJztcbiJdfQ==
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { AxiosRequestConfig } from 'axios';
|
|
2
|
-
import { ApiResponse, HttpClient, ResponseParser } from './types';
|
|
2
|
+
import { ApiResponse, HttpClient, ResponseParser, AxiosClientObservabilityConfig } from './types';
|
|
3
3
|
/**
|
|
4
4
|
* A wrapper around axios to make http requests
|
|
5
5
|
*
|
|
@@ -27,12 +27,13 @@ import { ApiResponse, HttpClient, ResponseParser } from './types';
|
|
|
27
27
|
export declare class AxiosClient implements HttpClient {
|
|
28
28
|
private options;
|
|
29
29
|
private instance;
|
|
30
|
-
|
|
30
|
+
private observabilityConfig;
|
|
31
|
+
constructor(options?: AxiosRequestConfig, observabilityConfig?: AxiosClientObservabilityConfig);
|
|
31
32
|
private makeRequest;
|
|
32
33
|
get<T>(url: string, options?: AxiosRequestConfig, responseParser?: ResponseParser<T>): Promise<ApiResponse<T>>;
|
|
33
|
-
post<T>(url: string, data?:
|
|
34
|
-
put<T>(url: string, data?:
|
|
35
|
-
patch<T>(url: string, data?:
|
|
34
|
+
post<T>(url: string, data?: unknown, options?: AxiosRequestConfig, responseParser?: ResponseParser<T>): Promise<ApiResponse<T>>;
|
|
35
|
+
put<T>(url: string, data?: unknown, options?: AxiosRequestConfig, responseParser?: ResponseParser<T>): Promise<ApiResponse<T>>;
|
|
36
|
+
patch<T>(url: string, data?: unknown, options?: AxiosRequestConfig, responseParser?: ResponseParser<T>): Promise<ApiResponse<T>>;
|
|
36
37
|
delete<T>(url: string, options?: AxiosRequestConfig, responseParser?: ResponseParser<T>): Promise<ApiResponse<T>>;
|
|
37
38
|
}
|
|
38
39
|
//# sourceMappingURL=axios_client.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"axios_client.d.ts","sourceRoot":"","sources":["../../../src/network/clients/axios_client.ts"],"names":[],"mappings":"AACA,OAAc,EAAE,kBAAkB,EAA6B,MAAM,OAAO,CAAC;AAI7E,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"axios_client.d.ts","sourceRoot":"","sources":["../../../src/network/clients/axios_client.ts"],"names":[],"mappings":"AACA,OAAc,EAAE,kBAAkB,EAA6B,MAAM,OAAO,CAAC;AAI7E,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,cAAc,EAAE,8BAA8B,EAAE,MAAM,SAAS,CAAC;AAGlG;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,qBAAa,WAAY,YAAW,UAAU;IAC5C,OAAO,CAAC,OAAO,CAAqB;IAEpC,OAAO,CAAC,QAAQ,CAAgB;IAEhC,OAAO,CAAC,mBAAmB,CAAiC;gBAEhD,OAAO,CAAC,EAAE,kBAAkB,EAAE,mBAAmB,CAAC,EAAE,8BAA8B;YA4BhF,WAAW;IA2IZ,GAAG,CAAC,CAAC,EAChB,GAAG,EAAE,MAAM,EACX,OAAO,CAAC,EAAE,kBAAkB,EAC5B,cAAc,CAAC,EAAE,cAAc,CAAC,CAAC,CAAC,GACjC,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;IAWb,IAAI,CAAC,CAAC,EACjB,GAAG,EAAE,MAAM,EACX,IAAI,CAAC,EAAE,OAAO,EACd,OAAO,CAAC,EAAE,kBAAkB,EAC5B,cAAc,CAAC,EAAE,cAAc,CAAC,CAAC,CAAC,GACjC,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;IAYb,GAAG,CAAC,CAAC,EAChB,GAAG,EAAE,MAAM,EACX,IAAI,CAAC,EAAE,OAAO,EACd,OAAO,CAAC,EAAE,kBAAkB,EAC5B,cAAc,CAAC,EAAE,cAAc,CAAC,CAAC,CAAC,GACjC,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;IAYb,KAAK,CAAC,CAAC,EAClB,GAAG,EAAE,MAAM,EACX,IAAI,CAAC,EAAE,OAAO,EACd,OAAO,CAAC,EAAE,kBAAkB,EAC5B,cAAc,CAAC,EAAE,cAAc,CAAC,CAAC,CAAC,GACjC,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;IAYb,MAAM,CAAC,CAAC,EACnB,GAAG,EAAE,MAAM,EACX,OAAO,CAAC,EAAE,kBAAkB,EAC5B,cAAc,CAAC,EAAE,cAAc,CAAC,CAAC,CAAC,GACjC,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;CAY3B"}
|
|
@@ -1,44 +1,11 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
-
if (k2 === undefined) k2 = k;
|
|
4
|
-
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
-
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
-
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
-
}
|
|
8
|
-
Object.defineProperty(o, k2, desc);
|
|
9
|
-
}) : (function(o, m, k, k2) {
|
|
10
|
-
if (k2 === undefined) k2 = k;
|
|
11
|
-
o[k2] = m[k];
|
|
12
|
-
}));
|
|
13
|
-
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
-
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
-
}) : function(o, v) {
|
|
16
|
-
o["default"] = v;
|
|
17
|
-
});
|
|
18
|
-
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
-
var ownKeys = function(o) {
|
|
20
|
-
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
-
var ar = [];
|
|
22
|
-
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
-
return ar;
|
|
24
|
-
};
|
|
25
|
-
return ownKeys(o);
|
|
26
|
-
};
|
|
27
|
-
return function (mod) {
|
|
28
|
-
if (mod && mod.__esModule) return mod;
|
|
29
|
-
var result = {};
|
|
30
|
-
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
-
__setModuleDefault(result, mod);
|
|
32
|
-
return result;
|
|
33
|
-
};
|
|
34
|
-
})();
|
|
35
2
|
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
36
3
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
37
4
|
};
|
|
38
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
39
6
|
exports.AxiosClient = void 0;
|
|
40
7
|
/* eslint-disable require-await */
|
|
41
|
-
const axios_1 =
|
|
8
|
+
const axios_1 = __importDefault(require("axios"));
|
|
42
9
|
const http_1 = __importDefault(require("http"));
|
|
43
10
|
const https_1 = __importDefault(require("https"));
|
|
44
11
|
const constants_1 = require("../../constants");
|
|
@@ -68,7 +35,7 @@ const utils_1 = require("../../utils");
|
|
|
68
35
|
* }
|
|
69
36
|
*/
|
|
70
37
|
class AxiosClient {
|
|
71
|
-
constructor(options) {
|
|
38
|
+
constructor(options, observabilityConfig) {
|
|
72
39
|
const defaultOptions = {
|
|
73
40
|
timeout: 1000 * 10,
|
|
74
41
|
// `withCredentials` indicates whether or not cross-site Access-Control requests should be made using credentials
|
|
@@ -86,23 +53,58 @@ class AxiosClient {
|
|
|
86
53
|
};
|
|
87
54
|
this.options = { ...defaultOptions, ...options };
|
|
88
55
|
this.instance = axios_1.default.create(this.options);
|
|
56
|
+
// Merge with default config to eliminate null checks
|
|
57
|
+
const defaultObservabilityConfig = {
|
|
58
|
+
logger: undefined,
|
|
59
|
+
statsClient: undefined,
|
|
60
|
+
defaultStatTags: {},
|
|
61
|
+
};
|
|
62
|
+
this.observabilityConfig = { ...defaultObservabilityConfig, ...observabilityConfig };
|
|
89
63
|
}
|
|
90
64
|
async makeRequest(config, responseParser) {
|
|
91
|
-
|
|
65
|
+
const startTime = Date.now();
|
|
66
|
+
// Extract metadata for logging/metrics
|
|
67
|
+
const method = config.method?.toUpperCase() || 'UNKNOWN';
|
|
68
|
+
const url = config.url || 'unknown';
|
|
69
|
+
const statTags = {
|
|
70
|
+
requestMethod: method,
|
|
71
|
+
endpointPath: url,
|
|
72
|
+
...this.observabilityConfig.defaultStatTags,
|
|
73
|
+
};
|
|
74
|
+
// Optional request logging
|
|
75
|
+
this.observabilityConfig.logger?.requestLog(`[HTTP] ${method} ${url} request`, {
|
|
76
|
+
method,
|
|
77
|
+
url,
|
|
78
|
+
statTags,
|
|
79
|
+
});
|
|
92
80
|
try {
|
|
93
81
|
const requestConfig = config;
|
|
94
82
|
const response = await this.instance.request(requestConfig);
|
|
95
83
|
const { status, data, headers } = response;
|
|
84
|
+
const duration = Date.now() - startTime;
|
|
85
|
+
// Add status code to statTags for better observability
|
|
86
|
+
const successStatTags = {
|
|
87
|
+
...statTags,
|
|
88
|
+
statusCode: status,
|
|
89
|
+
};
|
|
90
|
+
// Optional response logging
|
|
91
|
+
this.observabilityConfig.logger?.responseLog(`[HTTP] ${method} ${url} response`, {
|
|
92
|
+
statusCode: status,
|
|
93
|
+
duration,
|
|
94
|
+
statTags: successStatTags,
|
|
95
|
+
});
|
|
96
|
+
// Optional success metrics
|
|
97
|
+
this.observabilityConfig.statsClient?.timing('outgoing_request_latency', duration, successStatTags);
|
|
98
|
+
this.observabilityConfig.statsClient?.increment('outgoing_request_count', 1, successStatTags);
|
|
96
99
|
if (responseParser) {
|
|
97
100
|
try {
|
|
98
101
|
const parsedData = responseParser(data);
|
|
99
|
-
|
|
102
|
+
return {
|
|
100
103
|
type: 'success',
|
|
101
104
|
statusCode: status,
|
|
102
105
|
responseBody: parsedData,
|
|
103
106
|
headers,
|
|
104
107
|
};
|
|
105
|
-
return output;
|
|
106
108
|
}
|
|
107
109
|
catch (error) {
|
|
108
110
|
const unknownError = error;
|
|
@@ -117,7 +119,31 @@ class AxiosClient {
|
|
|
117
119
|
return { type: 'success', statusCode: status, responseBody: data, headers };
|
|
118
120
|
}
|
|
119
121
|
catch (error) {
|
|
120
|
-
|
|
122
|
+
const duration = Date.now() - startTime;
|
|
123
|
+
// Determine status code for error metrics
|
|
124
|
+
let errorStatusCode = 500; // Default to 500 for network/unknown errors
|
|
125
|
+
if (axios_1.default.isAxiosError(error)) {
|
|
126
|
+
const axiosError = error;
|
|
127
|
+
if (axiosError.response) {
|
|
128
|
+
errorStatusCode = axiosError.response.status;
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
// Add status code and error flag to statTags for better observability
|
|
132
|
+
const errorStatTags = {
|
|
133
|
+
...statTags,
|
|
134
|
+
statusCode: errorStatusCode,
|
|
135
|
+
error: true,
|
|
136
|
+
};
|
|
137
|
+
// Optional error logging
|
|
138
|
+
this.observabilityConfig.logger?.error?.(`[HTTP] ${method} ${url} error`, {
|
|
139
|
+
error: error.message,
|
|
140
|
+
duration,
|
|
141
|
+
statTags: errorStatTags,
|
|
142
|
+
});
|
|
143
|
+
// Optional error metrics
|
|
144
|
+
this.observabilityConfig.statsClient?.timing('outgoing_request_latency', duration, errorStatTags);
|
|
145
|
+
this.observabilityConfig.statsClient?.increment('outgoing_request_count', 1, errorStatTags);
|
|
146
|
+
if (axios_1.default.isAxiosError(error)) {
|
|
121
147
|
const axiosError = error;
|
|
122
148
|
if (axiosError.response) {
|
|
123
149
|
const { response } = axiosError;
|
|
@@ -206,4 +232,4 @@ class AxiosClient {
|
|
|
206
232
|
}
|
|
207
233
|
}
|
|
208
234
|
exports.AxiosClient = AxiosClient;
|
|
209
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXhpb3NfY2xpZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL25ldHdvcmsvY2xpZW50cy9heGlvc19jbGllbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsa0NBQWtDO0FBQ2xDLCtDQUE2RTtBQUM3RSxnREFBd0I7QUFDeEIsa0RBQTBCO0FBQzFCLCtDQUF5RDtBQUV6RCx1Q0FBeUM7QUFFekM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBdUJHO0FBQ0gsTUFBYSxXQUFXO0lBS3RCLFlBQVksT0FBNEI7UUFDdEMsTUFBTSxjQUFjLEdBQUc7WUFDckIsT0FBTyxFQUFFLElBQUksR0FBRyxFQUFFO1lBQ2xCLGlIQUFpSDtZQUNqSCxlQUFlLEVBQUUsS0FBSztZQUN0QixzRkFBc0Y7WUFDdEYsZ0JBQWdCLEVBQUUsTUFBTTtZQUN4Qix3R0FBd0c7WUFDeEcsYUFBYSxFQUFFLElBQUksR0FBRyxJQUFJLEdBQUcsRUFBRTtZQUMvQiwrRUFBK0U7WUFDL0UsWUFBWSxFQUFFLENBQUM7WUFDZixxRkFBcUY7WUFDckYsU0FBUyxFQUFFLElBQUksY0FBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsQ0FBQztZQUM5QyxrSUFBa0k7WUFDbEksVUFBVSxFQUFFLElBQUksZUFBSyxDQUFDLEtBQUssQ0FBQyxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsQ0FBQztTQUNqRCxDQUFDO1FBQ0YsSUFBSSxDQUFDLE9BQU8sR0FBRyxFQUFFLEdBQUcsY0FBYyxFQUFFLEdBQUcsT0FBTyxFQUFFLENBQUM7UUFDakQsSUFBSSxDQUFDLFFBQVEsR0FBRyxlQUFLLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUM3QyxDQUFDO0lBRU8sS0FBSyxDQUFDLFdBQVcsQ0FDdkIsTUFBMEIsRUFDMUIsY0FBa0M7UUFF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L0IsTUFBTSxFQUFFLE9BQU87WUFDZixHQUFHO1lBQ0gsSUFBSTtTQUNMLENBQUM7UUFDRixJQUFJLElBQUEsa0JBQVUsRUFBQyxPQUFPLENBQUMsRUFBRSxDQUFDO1lBQ3hCLE1BQU0sR0FBRyxFQUFFLEdBQUcsTUFBTSxFQUFFLEdBQUcsT0FBTyxFQUFFLENBQUM7UUFDckMsQ0FBQztRQUNELE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBSSxNQUFNLEVBQUUsY0FBYyxDQUFDLENBQUM7SUFDckQsQ0FBQztJQUVNLEtBQUssQ0FBQyxNQUFNLENBQ2pCLEdBQVcsRUFDWCxPQUE0QixFQUM1QixjQUFrQztRQUVsQyxJQUFJLE1BQU0sR0FBdUI7WUFDL0IsTUFBTSxFQUFFLFFBQVE7WUFDaEIsR0FBRztTQUNKLENBQUM7UUFDRixJQUFJLElBQUEsa0JBQVUsRUFBQyxPQUFPLENBQUMsRUFBRSxDQUFDO1lBQ3hCLE1BQU0sR0FBRyxFQUFFLEdBQUcsTUFBTSxFQUFFLEdBQUcsT0FBTyxFQUFFLENBQUM7UUFDckMsQ0FBQztRQUNELE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBSSxNQUFNLEVBQUUsY0FBYyxDQUFDLENBQUM7SUFDckQsQ0FBQztDQUdGO0FBaExELGtDQWdMQyIsInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIHJlcXVpcmUtYXdhaXQgKi9cbmltcG9ydCBheGlvcywgeyBBeGlvc1JlcXVlc3RDb25maWcsIEF4aW9zRXJyb3IsIEF4aW9zSW5zdGFuY2UgfSBmcm9tICdheGlvcyc7XG5pbXBvcnQgaHR0cCBmcm9tICdodHRwJztcbmltcG9ydCBodHRwcyBmcm9tICdodHRwcyc7XG5pbXBvcnQgeyBORVRXT1JLX1NUQVRVU19FUlJfTUFQIH0gZnJvbSAnLi4vLi4vY29uc3RhbnRzJztcbmltcG9ydCB7IEFwaVJlc3BvbnNlLCBIdHRwQ2xpZW50LCBSZXNwb25zZVBhcnNlciB9IGZyb20gJy4vdHlwZXMnO1xuaW1wb3J0IHsgaXNOb3RFbXB0eSB9IGZyb20gJy4uLy4uL3V0aWxzJztcblxuLyoqXG4gKiBBIHdyYXBwZXIgYXJvdW5kIGF4aW9zIHRvIG1ha2UgaHR0cCByZXF1ZXN0c1xuICpcbiAqIEBjbGFzcyBBeGlvc0NsaWVudFxuICogQGNsYXNzZGVzY1xuICogVGhlIGBBeGlvc0NsaWVudGAgY2xhc3MgaXMgYSB3cmFwcGVyIGFyb3VuZCB0aGUgYXhpb3MgbGlicmFyeSB0aGF0IHByb3ZpZGVzIGEgc2ltcGxpZmllZCBpbnRlcmZhY2UgZm9yIG1ha2luZyBIVFRQIHJlcXVlc3RzLiBJdCBoYW5kbGVzIHZhcmlvdXMgdHlwZXMgb2YgZXJyb3JzIGFuZCBwcm92aWRlcyBhIGNvbnNpc3RlbnQgcmVzcG9uc2UgZm9ybWF0LlxuICpcbiAqIEBwYXJhbSB7QXhpb3NSZXF1ZXN0Q29uZmlnfSBvcHRpb25zIC0gVGhlIGRlZmF1bHQgb3B0aW9ucyBmb3IgdGhlIGh0dHAgY2xpZW50XG4gKlxuICogQGV4YW1wbGVcbiAqIGNvbnN0IGF4aW9zQ2xpZW50ID0gbmV3IEF4aW9zQ2xpZW50KHsgdGltZW91dDogMTAwMCAqIDEwIH0pO1xuICogY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBheGlvc0NsaWVudC5wb3N0KFwiaHR0cHM6Ly9leGFtcGxlLmNvbVwiLCB7IGZvbzogXCJiYXJcIiB9KTtcbiAqIGlmIChyZXNwb25zZS50eXBlID09PSBcInN1Y2Nlc3NcIikge1xuICogICBjb25zb2xlLmxvZyhyZXNwb25zZS5zdGF0dXNDb2RlKTtcbiAqICAgY29uc29sZS5sb2cocmVzcG9uc2UucmVzcG9uc2VCb2R5KTtcbiAqIH0gZWxzZSBpZiAocmVzcG9uc2UudHlwZSA9PT0gXCJhcHBsaWNhdGlvbi1lcnJvclwiKSB7XG4gKiAgIGNvbnNvbGUubG9nKHJlc3BvbnNlLnN0YXR1c0NvZGUpO1xuICogICBjb25zb2xlLmxvZyhyZXNwb25zZS5tZXNzYWdlKTtcbiAqICAgY29uc29sZS5sb2cocmVzcG9uc2UucmVzcG9uc2VCb2R5KTtcbiAqIH0gZWxzZSBpZiAocmVzcG9uc2UudHlwZSA9PT0gXCJjbGllbnQtZXJyb3JcIikge1xuICogICBjb25zb2xlLmxvZyhyZXNwb25zZS5zdGF0dXNDb2RlKTtcbiAqICAgY29uc29sZS5sb2cocmVzcG9uc2UubWVzc2FnZSk7XG4gKiB9XG4gKi9cbmV4cG9ydCBjbGFzcyBBeGlvc0NsaWVudCBpbXBsZW1lbnRzIEh0dHBDbGllbnQge1xuICBwcml2YXRlIG9wdGlvbnM6IEF4aW9zUmVxdWVzdENvbmZpZztcblxuICBwcml2YXRlIGluc3RhbmNlOiBBeGlvc0luc3RhbmNlO1xuXG4gIGNvbnN0cnVjdG9yKG9wdGlvbnM/OiBBeGlvc1JlcXVlc3RDb25maWcpIHtcbiAgICBjb25zdCBkZWZhdWx0T3B0aW9ucyA9IHtcbiAgICAgIHRpbWVvdXQ6IDEwMDAgKiAxMCxcbiAgICAgIC8vIGB3aXRoQ3JlZGVudGlhbHNgIGluZGljYXRlcyB3aGV0aGVyIG9yIG5vdCBjcm9zcy1zaXRlIEFjY2Vzcy1Db250cm9sIHJlcXVlc3RzIHNob3VsZCBiZSBtYWRlIHVzaW5nIGNyZWRlbnRpYWxzXG4gICAgICB3aXRoQ3JlZGVudGlhbHM6IGZhbHNlLFxuICAgICAgLy8gYHJlc3BvbnNlRW5jb2RpbmdgIGluZGljYXRlcyBlbmNvZGluZyB0byB1c2UgZm9yIGRlY29kaW5nIHJlc3BvbnNlcyAoTm9kZS5qcyBvbmx5KSxcbiAgICAgIHJlc3BvbnNlRW5jb2Rpbmc6ICd1dGY4JyxcbiAgICAgIC8vIGBtYXhCb2R5TGVuZ3RoYCAoTm9kZSBvbmx5IG9wdGlvbikgZGVmaW5lcyB0aGUgbWF4IHNpemUgb2YgdGhlIGh0dHAgcmVxdWVzdCBjb250ZW50IGluIGJ5dGVzIGFsbG93ZWQsXG4gICAgICBtYXhCb2R5TGVuZ3RoOiAxMDAwICogMTAwMCAqIDEwLFxuICAgICAgLy8gYG1heFJlZGlyZWN0c2AgZGVmaW5lcyB0aGUgbWF4aW11bSBudW1iZXIgb2YgcmVkaXJlY3RzIHRvIGZvbGxvdyBpbiBub2RlLmpzLFxuICAgICAgbWF4UmVkaXJlY3RzOiA1LFxuICAgICAgLy8gYGh0dHBBZ2VudGAgYW5kIGBodHRwc0FnZW50YCBkZWZpbmUgYSBjdXN0b20gYWdlbnQgdG8gYmUgdXNlZCB3aGVuIHBlcmZvcm1pbmcgaHR0cFxuICAgICAgaHR0cEFnZW50OiBuZXcgaHR0cC5BZ2VudCh7IGtlZXBBbGl2ZTogdHJ1ZSB9KSxcbiAgICAgIC8vIGFuZCBodHRwcyByZXF1ZXN0cywgcmVzcGVjdGl2ZWx5LCBpbiBub2RlLmpzLiBUaGlzIGFsbG93cyBvcHRpb25zIHRvIGJlIGFkZGVkIGxpa2UgYGtlZXBBbGl2ZWAgdGhhdCBhcmUgbm90IGVuYWJsZWQgYnkgZGVmYXVsdC5cbiAgICAgIGh0dHBzQWdlbnQ6IG5ldyBodHRwcy5BZ2VudCh7IGtlZXBBbGl2ZTogdHJ1ZSB9KSxcbiAgICB9O1xuICAgIHRoaXMub3B0aW9ucyA9IHsgLi4uZGVmYXVsdE9wdGlvbnMsIC4uLm9wdGlvbnMgfTtcbiAgICB0aGlzLmluc3RhbmNlID0gYXhpb3MuY3JlYXRlKHRoaXMub3B0aW9ucyk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIG1ha2VSZXF1ZXN0PFQ+KFxuICAgIGNvbmZpZzogQXhpb3NSZXF1ZXN0Q29uZmlnLFxuICAgIHJlc3BvbnNlUGFyc2VyPzogUmVzcG9uc2VQYXJzZXI8VD4sXG4gICk6IFByb21pc2U8QXBpUmVzcG9uc2U8VD4+IHtcbiAgICBsZXQgb3V0cHV0OiBBcGlSZXNwb25zZTxUPjtcbiAgICB0cnkge1xuICAgICAgY29uc3QgcmVxdWVzdENvbmZpZyA9IGNvbmZpZztcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5pbnN0YW5jZS5yZXF1ZXN0KHJlcXVlc3RDb25maWcpO1xuICAgICAgY29uc3QgeyBzdGF0dXMsIGRhdGEsIGhlYWRlcnMgfSA9IHJlc3BvbnNlO1xuXG4gICAgICBpZiAocmVzcG9uc2VQYXJzZXIpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCBwYXJzZWREYXRhID0gcmVzcG9uc2VQYXJzZXIoZGF0YSk7XG4gICAgICAgICAgb3V0cHV0ID0ge1xuICAgICAgICAgICAgdHlwZTogJ3N1Y2Nlc3MnLFxuICAgICAgICAgICAgc3RhdHVzQ29kZTogc3RhdHVzLFxuICAgICAgICAgICAgcmVzcG9uc2VCb2R5OiBwYXJzZWREYXRhLFxuICAgICAgICAgICAgaGVhZGVycyxcbiAgICAgICAgICB9O1xuICAgICAgICAgIHJldHVybiBvdXRwdXQ7XG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgY29uc3QgdW5rbm93bkVycm9yID0gZXJyb3IgYXMgRXJyb3I7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHR5cGU6ICdjbGllbnQtZXJyb3InLFxuICAgICAgICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvcjogRXJyb3IgaGFzIHN0YXR1c1xuICAgICAgICAgICAgc3RhdHVzQ29kZTogdW5rbm93bkVycm9yLnN0YXR1cyB8fCA1MDAsXG4gICAgICAgICAgICBtZXNzYWdlOiBgRmFpbGVkIHRvIHBhcnNlIHJlc3BvbnNlIGRhdGE6ICR7dW5rbm93bkVycm9yLm1lc3NhZ2V9YCxcbiAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4geyB0eXBlOiAnc3VjY2VzcycsIHN0YXR1c0NvZGU6IHN0YXR1cywgcmVzcG9uc2VCb2R5OiBkYXRhLCBoZWFkZXJzIH07XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIEF4aW9zRXJyb3IpIHtcbiAgICAgICAgY29uc3QgYXhpb3NFcnJvciA9IGVycm9yIGFzIEF4aW9zRXJyb3I7XG4gICAgICAgIGlmIChheGlvc0Vycm9yLnJlc3BvbnNlKSB7XG4gICAgICAgICAgY29uc3QgeyByZXNwb25zZSB9ID0gYXhpb3NFcnJvcjtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdHlwZTogJ2FwcGxpY2F0aW9uLWVycm9yJyxcbiAgICAgICAgICAgIHN0YXR1c0NvZGU6IHJlc3BvbnNlLnN0YXR1cyxcbiAgICAgICAgICAgIG1lc3NhZ2U6IHJlc3BvbnNlLnN0YXR1c1RleHQsXG4gICAgICAgICAgICByZXNwb25zZUJvZHk6IHJlc3BvbnNlLmRhdGEsXG4gICAgICAgICAgICBoZWFkZXJzOiByZXNwb25zZS5oZWFkZXJzLFxuICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGF4aW9zRXJyb3IuY29kZSkge1xuICAgICAgICAgIGNvbnN0IHJlc3AgPSBORVRXT1JLX1NUQVRVU19FUlJfTUFQW2F4aW9zRXJyb3IuY29kZV07XG4gICAgICAgICAgaWYgKCFyZXNwKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICB0eXBlOiAnY2xpZW50LWVycm9yJyxcbiAgICAgICAgICAgICAgc3RhdHVzQ29kZTogNTAwLFxuICAgICAgICAgICAgICBtZXNzYWdlOiBgVW5rbm93biBFcnJvcjoke2F4aW9zRXJyb3IubWVzc2FnZX1gLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHR5cGU6ICdjbGllbnQtZXJyb3InLFxuICAgICAgICAgICAgc3RhdHVzQ29kZTogcmVzcC5zdGF0dXMsXG4gICAgICAgICAgICBtZXNzYWdlOiByZXNwLm1lc3NhZ2UsXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBjb25zdCB1bmtub3duRXJyb3IgPSBlcnJvciBhcyBFcnJvcjtcbiAgICAgIGNvbnN0IHN0YXR1cyA9IDUwMDtcbiAgICAgIGNvbnN0IG1lc3NhZ2UgPSB1bmtub3duRXJyb3IubWVzc2FnZSB8fCAnVW5rbm93biBFcnJvcic7XG5cbiAgICAgIHJldHVybiB7IHR5cGU6ICdjbGllbnQtZXJyb3InLCBzdGF0dXNDb2RlOiBzdGF0dXMsIG1lc3NhZ2UgfTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgZ2V0PFQ+KFxuICAgIHVybDogc3RyaW5nLFxuICAgIG9wdGlvbnM/OiBBeGlvc1JlcXVlc3RDb25maWcsXG4gICAgcmVzcG9uc2VQYXJzZXI/OiBSZXNwb25zZVBhcnNlcjxUPixcbiAgKTogUHJvbWlzZTxBcGlSZXNwb25zZTxUPj4ge1xuICAgIGxldCBjb25maWc6IEF4aW9zUmVxdWVzdENvbmZpZyA9IHtcbiAgICAgIG1ldGhvZDogJ2dldCcsXG4gICAgICB1cmwsXG4gICAgfTtcbiAgICBpZiAoaXNOb3RFbXB0eShvcHRpb25zKSkge1xuICAgICAgY29uZmlnID0geyAuLi5jb25maWcsIC4uLm9wdGlvbnMgfTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMubWFrZVJlcXVlc3Q8VD4oY29uZmlnLCByZXNwb25zZVBhcnNlcik7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgcG9zdDxUPihcbiAgICB1cmw6IHN0cmluZyxcbiAgICBkYXRhPzogYW55LFxuICAgIG9wdGlvbnM/OiBBeGlvc1JlcXVlc3RDb25maWcsXG4gICAgcmVzcG9uc2VQYXJzZXI/OiBSZXNwb25zZVBhcnNlcjxUPixcbiAgKTogUHJvbWlzZTxBcGlSZXNwb25zZTxUPj4ge1xuICAgIGxldCBjb25maWc6IEF4aW9zUmVxdWVzdENvbmZpZyA9IHtcbiAgICAgIG1ldGhvZDogJ3Bvc3QnLFxuICAgICAgdXJsLFxuICAgICAgZGF0YSxcbiAgICB9O1xuICAgIGlmIChpc05vdEVtcHR5KG9wdGlvbnMpKSB7XG4gICAgICBjb25maWcgPSB7IC4uLmNvbmZpZywgLi4ub3B0aW9ucyB9O1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5tYWtlUmVxdWVzdDxUPihjb25maWcsIHJlc3BvbnNlUGFyc2VyKTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBwdXQ8VD4oXG4gICAgdXJsOiBzdHJpbmcsXG4gICAgZGF0YT86IGFueSxcbiAgICBvcHRpb25zPzogQXhpb3NSZXF1ZXN0Q29uZmlnLFxuICAgIHJlc3BvbnNlUGFyc2VyPzogUmVzcG9uc2VQYXJzZXI8VD4sXG4gICk6IFByb21pc2U8QXBpUmVzcG9uc2U8VD4+IHtcbiAgICBsZXQgY29uZmlnOiBBeGlvc1JlcXVlc3RDb25maWcgPSB7XG4gICAgICBtZXRob2Q6ICdwdXQnLFxuICAgICAgdXJsLFxuICAgICAgZGF0YSxcbiAgICB9O1xuICAgIGlmIChpc05vdEVtcHR5KG9wdGlvbnMpKSB7XG4gICAgICBjb25maWcgPSB7IC4uLmNvbmZpZywgLi4ub3B0aW9ucyB9O1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5tYWtlUmVxdWVzdDxUPihjb25maWcsIHJlc3BvbnNlUGFyc2VyKTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBwYXRjaDxUPihcbiAgICB1cmw6IHN0cmluZyxcbiAgICBkYXRhPzogYW55LFxuICAgIG9wdGlvbnM/OiBBeGlvc1JlcXVlc3RDb25maWcsXG4gICAgcmVzcG9uc2VQYXJzZXI/OiBSZXNwb25zZVBhcnNlcjxUPixcbiAgKTogUHJvbWlzZTxBcGlSZXNwb25zZTxUPj4ge1xuICAgIGxldCBjb25maWc6IEF4aW9zUmVxdWVzdENvbmZpZyA9IHtcbiAgICAgIG1ldGhvZDogJ3BhdGNoJyxcbiAgICAgIHVybCxcbiAgICAgIGRhdGEsXG4gICAgfTtcbiAgICBpZiAoaXNOb3RFbXB0eShvcHRpb25zKSkge1xuICAgICAgY29uZmlnID0geyAuLi5jb25maWcsIC4uLm9wdGlvbnMgfTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMubWFrZVJlcXVlc3Q8VD4oY29uZmlnLCByZXNwb25zZVBhcnNlcik7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgZGVsZXRlPFQ+KFxuICAgIHVybDogc3RyaW5nLFxuICAgIG9wdGlvbnM/OiBBeGlvc1JlcXVlc3RDb25maWcsXG4gICAgcmVzcG9uc2VQYXJzZXI/OiBSZXNwb25zZVBhcnNlcjxUPixcbiAgKTogUHJvbWlzZTxBcGlSZXNwb25zZTxUPj4ge1xuICAgIGxldCBjb25maWc6IEF4aW9zUmVxdWVzdENvbmZpZyA9IHtcbiAgICAgIG1ldGhvZDogJ2RlbGV0ZScsXG4gICAgICB1cmwsXG4gICAgfTtcbiAgICBpZiAoaXNOb3RFbXB0eShvcHRpb25zKSkge1xuICAgICAgY29uZmlnID0geyAuLi5jb25maWcsIC4uLm9wdGlvbnMgfTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMubWFrZVJlcXVlc3Q8VD4oY29uZmlnLCByZXNwb25zZVBhcnNlcik7XG4gIH1cblxuICAvLyBBZGQgb3RoZXIgSFRUUCBtZXRob2RzIGFzIG5lZWRlZFxufVxuIl19
|
|
235
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXhpb3NfY2xpZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL25ldHdvcmsvY2xpZW50cy9heGlvc19jbGllbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEsa0NBQWtDO0FBQ2xDLGtEQUE2RTtBQUM3RSxnREFBd0I7QUFDeEIsa0RBQTBCO0FBQzFCLCtDQUF5RDtBQUV6RCx1Q0FBeUM7QUFFekM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBdUJHO0FBQ0gsTUFBYSxXQUFXO0lBT3RCLFlBQVksT0FBNEIsRUFBRSxtQkFBb0Q7UUFDNUYsTUFBTSxjQUFjLEdBQUc7WUFDckIsT0FBTyxFQUFFLElBQUksR0FBRyxFQUFFO1lBQ2xCLGlIQUFpSDtZQUNqSCxlQUFlLEVBQUUsS0FBSztZQUN0QixzRkFBc0Y7WUFDdEYsZ0JBQWdCLEVBQUUsTUFBTTtZQUN4Qix3R0FBd0c7WUFDeEcsYUFBYSxFQUFFLElBQUksR0FBRyxJQUFJLEdBQUcsRUFBRTtZQUMvQiwrRUFBK0U7WUFDL0UsWUFBWSxFQUFFLENBQUM7WUFDZixxRkFBcUY7WUFDckYsU0FBUyxFQUFFLElBQUksY0FBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsQ0FBQztZQUM5QyxrSUFBa0k7WUFDbEksVUFBVSxFQUFFLElBQUksZUFBSyxDQUFDLEtBQUssQ0FBQyxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsQ0FBQztTQUNqRCxDQUFDO1FBQ0YsSUFBSSxDQUFDLE9BQU8sR0FBRyxFQUFFLEdBQUcsY0FBYyxFQUFFLEdBQUcsT0FBTyxFQUFFLENBQUM7UUFDakQsSUFBSSxDQUFDLFFBQVEsR0FBRyxlQUFLLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUUzQyxxREFBcUQ7UUFDckQsTUFBTSwwQkFBMEIsR0FBbUM7WUFDakUsTUFBTSxFQUFFLFNBQVM7WUFDakIsV0FBVyxFQUFFLFNBQVM7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QUFNLEVBQUUsT0FBTztZQUNmLEdBQUc7WUFDSCxJQUFJO1NBQ0wsQ0FBQztRQUNGLElBQUksSUFBQSxrQkFBVSxFQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7WUFDeEIsTUFBTSxHQUFHLEVBQUUsR0FBRyxNQUFNLEVBQUUsR0FBRyxPQUFPLEVBQUUsQ0FBQztRQUNyQyxDQUFDO1FBQ0QsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFJLE1BQU0sRUFBRSxjQUFjLENBQUMsQ0FBQztJQUNyRCxDQUFDO0lBRU0sS0FBSyxDQUFDLE1BQU0sQ0FDakIsR0FBVyxFQUNYLE9BQTRCLEVBQzVCLGNBQWtDO1FBRWxDLElBQUksTUFBTSxHQUF1QjtZQUMvQixNQUFNLEVBQUUsUUFBUTtZQUNoQixHQUFHO1NBQ0osQ0FBQztRQUNGLElBQUksSUFBQSxrQkFBVSxFQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7WUFDeEIsTUFBTSxHQUFHLEVBQUUsR0FBRyxNQUFNLEVBQUUsR0FBRyxPQUFPLEVBQUUsQ0FBQztRQUNyQyxDQUFDO1FBQ0QsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFJLE1BQU0sRUFBRSxjQUFjLENBQUMsQ0FBQztJQUNyRCxDQUFDO0NBR0Y7QUFoUUQsa0NBZ1FDIiwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgcmVxdWlyZS1hd2FpdCAqL1xuaW1wb3J0IGF4aW9zLCB7IEF4aW9zUmVxdWVzdENvbmZpZywgQXhpb3NFcnJvciwgQXhpb3NJbnN0YW5jZSB9IGZyb20gJ2F4aW9zJztcbmltcG9ydCBodHRwIGZyb20gJ2h0dHAnO1xuaW1wb3J0IGh0dHBzIGZyb20gJ2h0dHBzJztcbmltcG9ydCB7IE5FVFdPUktfU1RBVFVTX0VSUl9NQVAgfSBmcm9tICcuLi8uLi9jb25zdGFudHMnO1xuaW1wb3J0IHsgQXBpUmVzcG9uc2UsIEh0dHBDbGllbnQsIFJlc3BvbnNlUGFyc2VyLCBBeGlvc0NsaWVudE9ic2VydmFiaWxpdHlDb25maWcgfSBmcm9tICcuL3R5cGVzJztcbmltcG9ydCB7IGlzTm90RW1wdHkgfSBmcm9tICcuLi8uLi91dGlscyc7XG5cbi8qKlxuICogQSB3cmFwcGVyIGFyb3VuZCBheGlvcyB0byBtYWtlIGh0dHAgcmVxdWVzdHNcbiAqXG4gKiBAY2xhc3MgQXhpb3NDbGllbnRcbiAqIEBjbGFzc2Rlc2NcbiAqIFRoZSBgQXhpb3NDbGllbnRgIGNsYXNzIGlzIGEgd3JhcHBlciBhcm91bmQgdGhlIGF4aW9zIGxpYnJhcnkgdGhhdCBwcm92aWRlcyBhIHNpbXBsaWZpZWQgaW50ZXJmYWNlIGZvciBtYWtpbmcgSFRUUCByZXF1ZXN0cy4gSXQgaGFuZGxlcyB2YXJpb3VzIHR5cGVzIG9mIGVycm9ycyBhbmQgcHJvdmlkZXMgYSBjb25zaXN0ZW50IHJlc3BvbnNlIGZvcm1hdC5cbiAqXG4gKiBAcGFyYW0ge0F4aW9zUmVxdWVzdENvbmZpZ30gb3B0aW9ucyAtIFRoZSBkZWZhdWx0IG9wdGlvbnMgZm9yIHRoZSBodHRwIGNsaWVudFxuICpcbiAqIEBleGFtcGxlXG4gKiBjb25zdCBheGlvc0NsaWVudCA9IG5ldyBBeGlvc0NsaWVudCh7IHRpbWVvdXQ6IDEwMDAgKiAxMCB9KTtcbiAqIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgYXhpb3NDbGllbnQucG9zdChcImh0dHBzOi8vZXhhbXBsZS5jb21cIiwgeyBmb286IFwiYmFyXCIgfSk7XG4gKiBpZiAocmVzcG9uc2UudHlwZSA9PT0gXCJzdWNjZXNzXCIpIHtcbiAqICAgY29uc29sZS5sb2cocmVzcG9uc2Uuc3RhdHVzQ29kZSk7XG4gKiAgIGNvbnNvbGUubG9nKHJlc3BvbnNlLnJlc3BvbnNlQm9keSk7XG4gKiB9IGVsc2UgaWYgKHJlc3BvbnNlLnR5cGUgPT09IFwiYXBwbGljYXRpb24tZXJyb3JcIikge1xuICogICBjb25zb2xlLmxvZyhyZXNwb25zZS5zdGF0dXNDb2RlKTtcbiAqICAgY29uc29sZS5sb2cocmVzcG9uc2UubWVzc2FnZSk7XG4gKiAgIGNvbnNvbGUubG9nKHJlc3BvbnNlLnJlc3BvbnNlQm9keSk7XG4gKiB9IGVsc2UgaWYgKHJlc3BvbnNlLnR5cGUgPT09IFwiY2xpZW50LWVycm9yXCIpIHtcbiAqICAgY29uc29sZS5sb2cocmVzcG9uc2Uuc3RhdHVzQ29kZSk7XG4gKiAgIGNvbnNvbGUubG9nKHJlc3BvbnNlLm1lc3NhZ2UpO1xuICogfVxuICovXG5leHBvcnQgY2xhc3MgQXhpb3NDbGllbnQgaW1wbGVtZW50cyBIdHRwQ2xpZW50IHtcbiAgcHJpdmF0ZSBvcHRpb25zOiBBeGlvc1JlcXVlc3RDb25maWc7XG5cbiAgcHJpdmF0ZSBpbnN0YW5jZTogQXhpb3NJbnN0YW5jZTtcblxuICBwcml2YXRlIG9ic2VydmFiaWxpdHlDb25maWc6IEF4aW9zQ2xpZW50T2JzZXJ2YWJpbGl0eUNvbmZpZztcblxuICBjb25zdHJ1Y3RvcihvcHRpb25zPzogQXhpb3NSZXF1ZXN0Q29uZmlnLCBvYnNlcnZhYmlsaXR5Q29uZmlnPzogQXhpb3NDbGllbnRPYnNlcnZhYmlsaXR5Q29uZmlnKSB7XG4gICAgY29uc3QgZGVmYXVsdE9wdGlvbnMgPSB7XG4gICAgICB0aW1lb3V0OiAxMDAwICogMTAsXG4gICAgICAvLyBgd2l0aENyZWRlbnRpYWxzYCBpbmRpY2F0ZXMgd2hldGhlciBvciBub3QgY3Jvc3Mtc2l0ZSBBY2Nlc3MtQ29udHJvbCByZXF1ZXN0cyBzaG91bGQgYmUgbWFkZSB1c2luZyBjcmVkZW50aWFsc1xuICAgICAgd2l0aENyZWRlbnRpYWxzOiBmYWxzZSxcbiAgICAgIC8vIGByZXNwb25zZUVuY29kaW5nYCBpbmRpY2F0ZXMgZW5jb2RpbmcgdG8gdXNlIGZvciBkZWNvZGluZyByZXNwb25zZXMgKE5vZGUuanMgb25seSksXG4gICAgICByZXNwb25zZUVuY29kaW5nOiAndXRmOCcsXG4gICAgICAvLyBgbWF4Qm9keUxlbmd0aGAgKE5vZGUgb25seSBvcHRpb24pIGRlZmluZXMgdGhlIG1heCBzaXplIG9mIHRoZSBodHRwIHJlcXVlc3QgY29udGVudCBpbiBieXRlcyBhbGxvd2VkLFxuICAgICAgbWF4Qm9keUxlbmd0aDogMTAwMCAqIDEwMDAgKiAxMCxcbiAgICAgIC8vIGBtYXhSZWRpcmVjdHNgIGRlZmluZXMgdGhlIG1heGltdW0gbnVtYmVyIG9mIHJlZGlyZWN0cyB0byBmb2xsb3cgaW4gbm9kZS5qcyxcbiAgICAgIG1heFJlZGlyZWN0czogNSxcbiAgICAgIC8vIGBodHRwQWdlbnRgIGFuZCBgaHR0cHNBZ2VudGAgZGVmaW5lIGEgY3VzdG9tIGFnZW50IHRvIGJlIHVzZWQgd2hlbiBwZXJmb3JtaW5nIGh0dHBcbiAgICAgIGh0dHBBZ2VudDogbmV3IGh0dHAuQWdlbnQoeyBrZWVwQWxpdmU6IHRydWUgfSksXG4gICAgICAvLyBhbmQgaHR0cHMgcmVxdWVzdHMsIHJlc3BlY3RpdmVseSwgaW4gbm9kZS5qcy4gVGhpcyBhbGxvd3Mgb3B0aW9ucyB0byBiZSBhZGRlZCBsaWtlIGBrZWVwQWxpdmVgIHRoYXQgYXJlIG5vdCBlbmFibGVkIGJ5IGRlZmF1bHQuXG4gICAgICBodHRwc0FnZW50OiBuZXcgaHR0cHMuQWdlbnQoeyBrZWVwQWxpdmU6IHRydWUgfSksXG4gICAgfTtcbiAgICB0aGlzLm9wdGlvbnMgPSB7IC4uLmRlZmF1bHRPcHRpb25zLCAuLi5vcHRpb25zIH07XG4gICAgdGhpcy5pbnN0YW5jZSA9IGF4aW9zLmNyZWF0ZSh0aGlzLm9wdGlvbnMpO1xuXG4gICAgLy8gTWVyZ2Ugd2l0aCBkZWZhdWx0IGNvbmZpZyB0byBlbGltaW5hdGUgbnVsbCBjaGVja3NcbiAgICBjb25zdCBkZWZhdWx0T2JzZXJ2YWJpbGl0eUNvbmZpZzogQXhpb3NDbGllbnRPYnNlcnZhYmlsaXR5Q29uZmlnID0ge1xuICAgICAgbG9nZ2VyOiB1bmRlZmluZWQsXG4gICAgICBzdGF0c0NsaWVudDogdW5kZWZpbmVkLFxuICAgICAgZGVmYXVsdFN0YXRUYWdzOiB7fSxcbiAgICB9O1xuICAgIHRoaXMub2JzZXJ2YWJpbGl0eUNvbmZpZyA9IHsgLi4uZGVmYXVsdE9ic2VydmFiaWxpdHlDb25maWcsIC4uLm9ic2VydmFiaWxpdHlDb25maWcgfTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgbWFrZVJlcXVlc3Q8VD4oXG4gICAgY29uZmlnOiBBeGlvc1JlcXVlc3RDb25maWcsXG4gICAgcmVzcG9uc2VQYXJzZXI/OiBSZXNwb25zZVBhcnNlcjxUPixcbiAgKTogUHJvbWlzZTxBcGlSZXNwb25zZTxUPj4ge1xuICAgIGNvbnN0IHN0YXJ0VGltZSA9IERhdGUubm93KCk7XG4gICAgLy8gRXh0cmFjdCBtZXRhZGF0YSBmb3IgbG9nZ2luZy9tZXRyaWNzXG4gICAgY29uc3QgbWV0aG9kID0gY29uZmlnLm1ldGhvZD8udG9VcHBlckNhc2UoKSB8fCAnVU5LTk9XTic7XG4gICAgY29uc3QgdXJsID0gY29uZmlnLnVybCB8fCAndW5rbm93bic7XG4gICAgY29uc3Qgc3RhdFRhZ3MgPSB7XG4gICAgICByZXF1ZXN0TWV0aG9kOiBtZXRob2QsXG4gICAgICBlbmRwb2ludFBhdGg6IHVybCxcbiAgICAgIC4uLnRoaXMub2JzZXJ2YWJpbGl0eUNvbmZpZy5kZWZhdWx0U3RhdFRhZ3MsXG4gICAgfTtcblxuICAgIC8vIE9wdGlvbmFsIHJlcXVlc3QgbG9nZ2luZ1xuICAgIHRoaXMub2JzZXJ2YWJpbGl0eUNvbmZpZy5sb2dnZXI/LnJlcXVlc3RMb2coYFtIVFRQXSAke21ldGhvZH0gJHt1cmx9IHJlcXVlc3RgLCB7XG4gICAgICBtZXRob2QsXG4gICAgICB1cmwsXG4gICAgICBzdGF0VGFncyxcbiAgICB9KTtcblxuICAgIHRyeSB7XG4gICAgICBjb25zdCByZXF1ZXN0Q29uZmlnID0gY29uZmlnO1xuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmluc3RhbmNlLnJlcXVlc3QocmVxdWVzdENvbmZpZyk7XG4gICAgICBjb25zdCB7IHN0YXR1cywgZGF0YSwgaGVhZGVycyB9ID0gcmVzcG9uc2U7XG4gICAgICBjb25zdCBkdXJhdGlvbiA9IERhdGUubm93KCkgLSBzdGFydFRpbWU7XG5cbiAgICAgIC8vIEFkZCBzdGF0dXMgY29kZSB0byBzdGF0VGFncyBmb3IgYmV0dGVyIG9ic2VydmFiaWxpdHlcbiAgICAgIGNvbnN0IHN1Y2Nlc3NTdGF0VGFncyA9IHtcbiAgICAgICAgLi4uc3RhdFRhZ3MsXG4gICAgICAgIHN0YXR1c0NvZGU6IHN0YXR1cyxcbiAgICAgIH07XG5cbiAgICAgIC8vIE9wdGlvbmFsIHJlc3BvbnNlIGxvZ2dpbmdcbiAgICAgIHRoaXMub2JzZXJ2YWJpbGl0eUNvbmZpZy5sb2dnZXI/LnJlc3BvbnNlTG9nKGBbSFRUUF0gJHttZXRob2R9ICR7dXJsfSByZXNwb25zZWAsIHtcbiAgICAgICAgc3RhdHVzQ29kZTogc3RhdHVzLFxuICAgICAgICBkdXJhdGlvbixcbiAgICAgICAgc3RhdFRhZ3M6IHN1Y2Nlc3NTdGF0VGFncyxcbiAgICAgIH0pO1xuXG4gICAgICAvLyBPcHRpb25hbCBzdWNjZXNzIG1ldHJpY3NcbiAgICAgIHRoaXMub2JzZXJ2YWJpbGl0eUNvbmZpZy5zdGF0c0NsaWVudD8udGltaW5nKFxuICAgICAgICAnb3V0Z29pbmdfcmVxdWVzdF9sYXRlbmN5JyxcbiAgICAgICAgZHVyYXRpb24sXG4gICAgICAgIHN1Y2Nlc3NTdGF0VGFncyxcbiAgICAgICk7XG4gICAgICB0aGlzLm9ic2VydmFiaWxpdHlDb25maWcuc3RhdHNDbGllbnQ/LmluY3JlbWVudCgnb3V0Z29pbmdfcmVxdWVzdF9jb3VudCcsIDEsIHN1Y2Nlc3NTdGF0VGFncyk7XG5cbiAgICAgIGlmIChyZXNwb25zZVBhcnNlcikge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IHBhcnNlZERhdGEgPSByZXNwb25zZVBhcnNlcihkYXRhKTtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdHlwZTogJ3N1Y2Nlc3MnLFxuICAgICAgICAgICAgc3RhdHVzQ29kZTogc3RhdHVzLFxuICAgICAgICAgICAgcmVzcG9uc2VCb2R5OiBwYXJzZWREYXRhLFxuICAgICAgICAgICAgaGVhZGVycyxcbiAgICAgICAgICB9O1xuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgIGNvbnN0IHVua25vd25FcnJvciA9IGVycm9yIGFzIEVycm9yO1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB0eXBlOiAnY2xpZW50LWVycm9yJyxcbiAgICAgICAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3I6IEVycm9yIGhhcyBzdGF0dXNcbiAgICAgICAgICAgIHN0YXR1c0NvZGU6IHVua25vd25FcnJvci5zdGF0dXMgfHwgNTAwLFxuICAgICAgICAgICAgbWVzc2FnZTogYEZhaWxlZCB0byBwYXJzZSByZXNwb25zZSBkYXRhOiAke3Vua25vd25FcnJvci5tZXNzYWdlfWAsXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHsgdHlwZTogJ3N1Y2Nlc3MnLCBzdGF0dXNDb2RlOiBzdGF0dXMsIHJlc3BvbnNlQm9keTogZGF0YSwgaGVhZGVycyB9O1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zdCBkdXJhdGlvbiA9IERhdGUubm93KCkgLSBzdGFydFRpbWU7XG5cbiAgICAgIC8vIERldGVybWluZSBzdGF0dXMgY29kZSBmb3IgZXJyb3IgbWV0cmljc1xuICAgICAgbGV0IGVycm9yU3RhdHVzQ29kZSA9IDUwMDsgLy8gRGVmYXVsdCB0byA1MDAgZm9yIG5ldHdvcmsvdW5rbm93biBlcnJvcnNcbiAgICAgIGlmIChheGlvcy5pc0F4aW9zRXJyb3IoZXJyb3IpKSB7XG4gICAgICAgIGNvbnN0IGF4aW9zRXJyb3IgPSBlcnJvciBhcyBBeGlvc0Vycm9yO1xuICAgICAgICBpZiAoYXhpb3NFcnJvci5yZXNwb25zZSkge1xuICAgICAgICAgIGVycm9yU3RhdHVzQ29kZSA9IGF4aW9zRXJyb3IucmVzcG9uc2Uuc3RhdHVzO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIEFkZCBzdGF0dXMgY29kZSBhbmQgZXJyb3IgZmxhZyB0byBzdGF0VGFncyBmb3IgYmV0dGVyIG9ic2VydmFiaWxpdHlcbiAgICAgIGNvbnN0IGVycm9yU3RhdFRhZ3MgPSB7XG4gICAgICAgIC4uLnN0YXRUYWdzLFxuICAgICAgICBzdGF0dXNDb2RlOiBlcnJvclN0YXR1c0NvZGUsXG4gICAgICAgIGVycm9yOiB0cnVlLFxuICAgICAgfTtcblxuICAgICAgLy8gT3B0aW9uYWwgZXJyb3IgbG9nZ2luZ1xuICAgICAgdGhpcy5vYnNlcnZhYmlsaXR5Q29uZmlnLmxvZ2dlcj8uZXJyb3I/LihgW0hUVFBdICR7bWV0aG9kfSAke3VybH0gZXJyb3JgLCB7XG4gICAgICAgIGVycm9yOiAoZXJyb3IgYXMgRXJyb3IpLm1lc3NhZ2UsXG4gICAgICAgIGR1cmF0aW9uLFxuICAgICAgICBzdGF0VGFnczogZXJyb3JTdGF0VGFncyxcbiAgICAgIH0pO1xuXG4gICAgICAvLyBPcHRpb25hbCBlcnJvciBtZXRyaWNzXG4gICAgICB0aGlzLm9ic2VydmFiaWxpdHlDb25maWcuc3RhdHNDbGllbnQ/LnRpbWluZyhcbiAgICAgICAgJ291dGdvaW5nX3JlcXVlc3RfbGF0ZW5jeScsXG4gICAgICAgIGR1cmF0aW9uLFxuICAgICAgICBlcnJvclN0YXRUYWdzLFxuICAgICAgKTtcbiAgICAgIHRoaXMub2JzZXJ2YWJpbGl0eUNvbmZpZy5zdGF0c0NsaWVudD8uaW5jcmVtZW50KCdvdXRnb2luZ19yZXF1ZXN0X2NvdW50JywgMSwgZXJyb3JTdGF0VGFncyk7XG5cbiAgICAgIGlmIChheGlvcy5pc0F4aW9zRXJyb3IoZXJyb3IpKSB7XG4gICAgICAgIGNvbnN0IGF4aW9zRXJyb3IgPSBlcnJvciBhcyBBeGlvc0Vycm9yO1xuICAgICAgICBpZiAoYXhpb3NFcnJvci5yZXNwb25zZSkge1xuICAgICAgICAgIGNvbnN0IHsgcmVzcG9uc2UgfSA9IGF4aW9zRXJyb3I7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHR5cGU6ICdhcHBsaWNhdGlvbi1lcnJvcicsXG4gICAgICAgICAgICBzdGF0dXNDb2RlOiByZXNwb25zZS5zdGF0dXMsXG4gICAgICAgICAgICBtZXNzYWdlOiByZXNwb25zZS5zdGF0dXNUZXh0LFxuICAgICAgICAgICAgcmVzcG9uc2VCb2R5OiByZXNwb25zZS5kYXRhLFxuICAgICAgICAgICAgaGVhZGVyczogcmVzcG9uc2UuaGVhZGVycyxcbiAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIGlmIChheGlvc0Vycm9yLmNvZGUpIHtcbiAgICAgICAgICBjb25zdCByZXNwID0gTkVUV09SS19TVEFUVVNfRVJSX01BUFtheGlvc0Vycm9yLmNvZGVdO1xuICAgICAgICAgIGlmICghcmVzcCkge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgdHlwZTogJ2NsaWVudC1lcnJvcicsXG4gICAgICAgICAgICAgIHN0YXR1c0NvZGU6IDUwMCxcbiAgICAgICAgICAgICAgbWVzc2FnZTogYFVua25vd24gRXJyb3I6JHtheGlvc0Vycm9yLm1lc3NhZ2V9YCxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB0eXBlOiAnY2xpZW50LWVycm9yJyxcbiAgICAgICAgICAgIHN0YXR1c0NvZGU6IHJlc3Auc3RhdHVzLFxuICAgICAgICAgICAgbWVzc2FnZTogcmVzcC5tZXNzYWdlLFxuICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgY29uc3QgdW5rbm93bkVycm9yID0gZXJyb3IgYXMgRXJyb3I7XG4gICAgICBjb25zdCBzdGF0dXMgPSA1MDA7XG4gICAgICBjb25zdCBtZXNzYWdlID0gdW5rbm93bkVycm9yLm1lc3NhZ2UgfHwgJ1Vua25vd24gRXJyb3InO1xuXG4gICAgICByZXR1cm4geyB0eXBlOiAnY2xpZW50LWVycm9yJywgc3RhdHVzQ29kZTogc3RhdHVzLCBtZXNzYWdlIH07XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGFzeW5jIGdldDxUPihcbiAgICB1cmw6IHN0cmluZyxcbiAgICBvcHRpb25zPzogQXhpb3NSZXF1ZXN0Q29uZmlnLFxuICAgIHJlc3BvbnNlUGFyc2VyPzogUmVzcG9uc2VQYXJzZXI8VD4sXG4gICk6IFByb21pc2U8QXBpUmVzcG9uc2U8VD4+IHtcbiAgICBsZXQgY29uZmlnOiBBeGlvc1JlcXVlc3RDb25maWcgPSB7XG4gICAgICBtZXRob2Q6ICdnZXQnLFxuICAgICAgdXJsLFxuICAgIH07XG4gICAgaWYgKGlzTm90RW1wdHkob3B0aW9ucykpIHtcbiAgICAgIGNvbmZpZyA9IHsgLi4uY29uZmlnLCAuLi5vcHRpb25zIH07XG4gICAgfVxuICAgIHJldHVybiB0aGlzLm1ha2VSZXF1ZXN0PFQ+KGNvbmZpZywgcmVzcG9uc2VQYXJzZXIpO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIHBvc3Q8VD4oXG4gICAgdXJsOiBzdHJpbmcsXG4gICAgZGF0YT86IHVua25vd24sXG4gICAgb3B0aW9ucz86IEF4aW9zUmVxdWVzdENvbmZpZyxcbiAgICByZXNwb25zZVBhcnNlcj86IFJlc3BvbnNlUGFyc2VyPFQ+LFxuICApOiBQcm9taXNlPEFwaVJlc3BvbnNlPFQ+PiB7XG4gICAgbGV0IGNvbmZpZzogQXhpb3NSZXF1ZXN0Q29uZmlnID0ge1xuICAgICAgbWV0aG9kOiAncG9zdCcsXG4gICAgICB1cmwsXG4gICAgICBkYXRhLFxuICAgIH07XG4gICAgaWYgKGlzTm90RW1wdHkob3B0aW9ucykpIHtcbiAgICAgIGNvbmZpZyA9IHsgLi4uY29uZmlnLCAuLi5vcHRpb25zIH07XG4gICAgfVxuICAgIHJldHVybiB0aGlzLm1ha2VSZXF1ZXN0PFQ+KGNvbmZpZywgcmVzcG9uc2VQYXJzZXIpO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIHB1dDxUPihcbiAgICB1cmw6IHN0cmluZyxcbiAgICBkYXRhPzogdW5rbm93bixcbiAgICBvcHRpb25zPzogQXhpb3NSZXF1ZXN0Q29uZmlnLFxuICAgIHJlc3BvbnNlUGFyc2VyPzogUmVzcG9uc2VQYXJzZXI8VD4sXG4gICk6IFByb21pc2U8QXBpUmVzcG9uc2U8VD4+IHtcbiAgICBsZXQgY29uZmlnOiBBeGlvc1JlcXVlc3RDb25maWcgPSB7XG4gICAgICBtZXRob2Q6ICdwdXQnLFxuICAgICAgdXJsLFxuICAgICAgZGF0YSxcbiAgICB9O1xuICAgIGlmIChpc05vdEVtcHR5KG9wdGlvbnMpKSB7XG4gICAgICBjb25maWcgPSB7IC4uLmNvbmZpZywgLi4ub3B0aW9ucyB9O1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5tYWtlUmVxdWVzdDxUPihjb25maWcsIHJlc3BvbnNlUGFyc2VyKTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBwYXRjaDxUPihcbiAgICB1cmw6IHN0cmluZyxcbiAgICBkYXRhPzogdW5rbm93bixcbiAgICBvcHRpb25zPzogQXhpb3NSZXF1ZXN0Q29uZmlnLFxuICAgIHJlc3BvbnNlUGFyc2VyPzogUmVzcG9uc2VQYXJzZXI8VD4sXG4gICk6IFByb21pc2U8QXBpUmVzcG9uc2U8VD4+IHtcbiAgICBsZXQgY29uZmlnOiBBeGlvc1JlcXVlc3RDb25maWcgPSB7XG4gICAgICBtZXRob2Q6ICdwYXRjaCcsXG4gICAgICB1cmwsXG4gICAgICBkYXRhLFxuICAgIH07XG4gICAgaWYgKGlzTm90RW1wdHkob3B0aW9ucykpIHtcbiAgICAgIGNvbmZpZyA9IHsgLi4uY29uZmlnLCAuLi5vcHRpb25zIH07XG4gICAgfVxuICAgIHJldHVybiB0aGlzLm1ha2VSZXF1ZXN0PFQ+KGNvbmZpZywgcmVzcG9uc2VQYXJzZXIpO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIGRlbGV0ZTxUPihcbiAgICB1cmw6IHN0cmluZyxcbiAgICBvcHRpb25zPzogQXhpb3NSZXF1ZXN0Q29uZmlnLFxuICAgIHJlc3BvbnNlUGFyc2VyPzogUmVzcG9uc2VQYXJzZXI8VD4sXG4gICk6IFByb21pc2U8QXBpUmVzcG9uc2U8VD4+IHtcbiAgICBsZXQgY29uZmlnOiBBeGlvc1JlcXVlc3RDb25maWcgPSB7XG4gICAgICBtZXRob2Q6ICdkZWxldGUnLFxuICAgICAgdXJsLFxuICAgIH07XG4gICAgaWYgKGlzTm90RW1wdHkob3B0aW9ucykpIHtcbiAgICAgIGNvbmZpZyA9IHsgLi4uY29uZmlnLCAuLi5vcHRpb25zIH07XG4gICAgfVxuICAgIHJldHVybiB0aGlzLm1ha2VSZXF1ZXN0PFQ+KGNvbmZpZywgcmVzcG9uc2VQYXJzZXIpO1xuICB9XG5cbiAgLy8gQWRkIG90aGVyIEhUVFAgbWV0aG9kcyBhcyBuZWVkZWRcbn1cbiJdfQ==
|