@discordeno/gateway 22.0.1-next.f274ec6 → 22.0.1-next.f2e8d7e
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/Shard.d.ts +2 -3
- package/dist/Shard.d.ts.map +1 -1
- package/dist/Shard.js +5 -10
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/manager.d.ts +0 -5
- package/dist/manager.d.ts.map +1 -1
- package/dist/manager.js +1 -12
- package/dist/types.d.ts +2 -2
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +1 -1
- package/package.json +21 -23
package/dist/Shard.d.ts
CHANGED
|
@@ -41,7 +41,7 @@ export declare class DiscordenoShard {
|
|
|
41
41
|
* @remarks
|
|
42
42
|
* This will be true if the close method has been called with either 1000 or 1001
|
|
43
43
|
*
|
|
44
|
-
* @
|
|
44
|
+
* @private
|
|
45
45
|
* This is for internal purposes only, and subject to breaking changes.
|
|
46
46
|
*/
|
|
47
47
|
goingOffline: boolean;
|
|
@@ -58,7 +58,7 @@ export declare class DiscordenoShard {
|
|
|
58
58
|
/**
|
|
59
59
|
* A function that will be called once the socket is closed and handleClose() has finished updating internal states.
|
|
60
60
|
*
|
|
61
|
-
* @
|
|
61
|
+
* @private
|
|
62
62
|
* This is for internal purposes only, and subject to breaking changes.
|
|
63
63
|
*/
|
|
64
64
|
resolveAfterClose?: (close: CloseEvent) => void;
|
|
@@ -104,7 +104,6 @@ export declare class DiscordenoShard {
|
|
|
104
104
|
decompressPacket(data: ArrayBuffer | Buffer): Promise<DiscordGatewayPayload | null>;
|
|
105
105
|
/** Handles a incoming gateway packet. */
|
|
106
106
|
handleDiscordPacket(packet: DiscordGatewayPayload): Promise<void>;
|
|
107
|
-
forwardToBot(packet: DiscordGatewayPayload): void;
|
|
108
107
|
/**
|
|
109
108
|
* Override in order to make the shards presence.
|
|
110
109
|
* async in case devs create the presence based on eg. database values.
|
package/dist/Shard.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Shard.d.ts","sourceRoot":"","sources":["../src/Shard.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,
|
|
1
|
+
{"version":3,"file":"Shard.d.ts","sourceRoot":"","sources":["../src/Shard.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,KAAK,EAAE,qBAAqB,EAA8B,qBAAqB,EAAE,MAAM,mBAAmB,CAAC;AAElH,OAAO,EAAS,WAAW,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAC/D,OAAO,KAAK,EAAE,UAAU,IAAI,eAAe,EAAE,MAAM,OAAO,CAAC;AAE3D,OAAO,EACL,KAAK,WAAW,EAChB,KAAK,kBAAkB,EACvB,KAAK,UAAU,EAEf,KAAK,kBAAkB,EACvB,UAAU,EAEX,MAAM,YAAY,CAAC;AAWpB,qBAAa,eAAe;IAC1B,2BAA2B;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,qFAAqF;IACrF,UAAU,EAAE,kBAAkB,CAAC;IAC/B,kDAAkD;IAClD,KAAK,EAAE,UAAU,CAAC;IAClB,4HAA4H;IAC5H,2BAA2B,EAAE,MAAM,CAAO;IAC1C,4CAA4C;IAC5C,sBAAsB,EAAE,MAAM,GAAG,IAAI,CAAQ;IAC7C,8EAA8E;IAC9E,sBAAsB,EAAE,MAAM,CAAS;IACvC,kDAAkD;IAClD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,iFAAiF;IACjF,MAAM,CAAC,EAAE,SAAS,CAAC;IACnB,0CAA0C;IAC1C,KAAK,aAAsB;IAC3B,mFAAmF;IACnF,gBAAgB,EAAE,MAAM,CAAM;IAC9B,wCAAwC;IACxC,MAAM,EAAE,WAAW,CAAM;IACzB,qGAAqG;IACrG,gBAAgB,EAAE,CAAC,MAAM,IAAI,CAAC,EAAE,CAAM;IACtC,mFAAmF;IACnF,QAAQ,yDAA8D,qBAAqB,KAAK,IAAI,EAAI;IACxG,oHAAoH;IACpH,MAAM,EAAE,WAAW,CAAC;IACpB,6BAA6B;IAC7B,MAAM,EAAE,IAAI,CAAC,OAAO,MAAM,EAAE,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,OAAO,CAAC,CAAC;IAC3E;;;;;;;;OAQG;IACH,YAAY,UAAS;IACrB,iDAAiD;IACjD,WAAW,cAAqB;IAChC,wFAAwF;IACxF,OAAO,CAAC,EAAE,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,cAAc,CAAC;IAC7C,2BAA2B;IAC3B,aAAa,EAAE,UAAU,GAAG,IAAI,CAAQ;IACxC,mEAAmE;IACnE,cAAc,CAAC,EAAE,eAAe,CAAC;IACjC,wDAAwD;IACxD,0BAA0B,EAAE,CAAC,CAAC,IAAI,EAAE,qBAAqB,KAAK,IAAI,CAAC,EAAE,CAAM;IAC3E;;;;;OAKG;IACH,iBAAiB,CAAC,EAAE,CAAC,KAAK,EAAE,UAAU,KAAK,IAAI,CAAC;gBAEpC,OAAO,EAAE,kBAAkB;IAsBvC,qEAAqE;IACrE,IAAI,aAAa,IAAI,kBAAkB,CAEtC;IAED,6IAA6I;IAC7I,IAAI,aAAa,IAAI,MAAM,CAG1B;IAED,6JAA6J;IAC7J,qBAAqB,IAAI,MAAM;IAOzB,YAAY,CAAC,YAAY,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IAUxD,yDAAyD;IACnD,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IA4BxD,kHAAkH;IAC5G,OAAO,IAAI,OAAO,CAAC,eAAe,CAAC;IAiIzC;;;OAGG;IACG,QAAQ,CAAC,aAAa,UAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;IAoDpD,iEAAiE;IACjE,MAAM,IAAI,OAAO;IAIjB,sEAAsE;IAChE,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC;IAiD7B;;;OAGG;IACG,IAAI,CAAC,OAAO,EAAE,kBAAkB,EAAE,YAAY,GAAE,OAAe,GAAG,OAAO,CAAC,IAAI,CAAC;IAarF,4HAA4H;IACtH,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;IAK/B,wCAAwC;IACxC,WAAW,CAAC,KAAK,EAAE,KAAK,GAAG,IAAI;IAI/B,yCAAyC;IACnC,WAAW,CAAC,KAAK,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;IA6FnD,0CAA0C;IACpC,aAAa,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC;IAYzD;;;;OAIG;IACG,gBAAgB,CAAC,IAAI,EAAE,WAAW,GAAG,MAAM,GAAG,OAAO,CAAC,qBAAqB,GAAG,IAAI,CAAC;IA2EzF,yCAAyC;IACnC,mBAAmB,CAAC,MAAM,EAAE,qBAAqB,GAAG,OAAO,CAAC,IAAI,CAAC;IA8IvE;;;;OAIG;IACG,YAAY,IAAI,OAAO,CAAC,qBAAqB,GAAG,SAAS,CAAC;IAIhE;;;OAGG;IACG,eAAe,IAAI,OAAO,CAAC,IAAI,CAAC;IAEtC,4EAA4E;IAC5E,iBAAiB,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI;IA0EzC,kDAAkD;IAClD,gBAAgB,IAAI,IAAI;CAOzB;AAaD,MAAM,WAAW,kBAAkB;IACjC,mBAAmB;IACnB,EAAE,EAAE,MAAM,CAAC;IACX,6BAA6B;IAC7B,UAAU,EAAE,kBAAkB,CAAC;IAC/B,kDAAkD;IAClD,MAAM,EAAE,WAAW,CAAC;IACpB,+BAA+B;IAC/B,MAAM,CAAC,EAAE,IAAI,CAAC,OAAO,MAAM,EAAE,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,OAAO,CAAC,CAAC;IAC5E,kEAAkE;IAClE,eAAe,CAAC,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IACtC,qEAAqE;IACrE,YAAY,CAAC,EAAE,MAAM,OAAO,CAAC,qBAAqB,GAAG,SAAS,CAAC,CAAC;CACjE;AAED,eAAe,eAAe,CAAC"}
|
package/dist/Shard.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { Buffer } from 'node:buffer';
|
|
2
2
|
import zlib from 'node:zlib';
|
|
3
3
|
import { GatewayCloseEventCodes, GatewayOpcodes } from '@discordeno/types';
|
|
4
|
-
import {
|
|
4
|
+
import { delay, LeakyBucket, logger } from '@discordeno/utils';
|
|
5
5
|
import NodeWebSocket from 'ws';
|
|
6
6
|
import { ShardSocketCloseCodes, ShardState, TransportCompression } from './types.js';
|
|
7
7
|
const ZLIB_SYNC_FLUSH = new Uint8Array([
|
|
@@ -30,7 +30,7 @@ export class DiscordenoShard {
|
|
|
30
30
|
* @remarks
|
|
31
31
|
* This will be true if the close method has been called with either 1000 or 1001
|
|
32
32
|
*
|
|
33
|
-
* @
|
|
33
|
+
* @private
|
|
34
34
|
* This is for internal purposes only, and subject to breaking changes.
|
|
35
35
|
*/ this.goingOffline = false;
|
|
36
36
|
/** Text decoder used for compressed payloads. */ this.textDecoder = new TextDecoder();
|
|
@@ -548,12 +548,12 @@ export class DiscordenoShard {
|
|
|
548
548
|
case 'READY':
|
|
549
549
|
{
|
|
550
550
|
const payload = packet.d;
|
|
551
|
-
this.events.ready?.(this);
|
|
552
551
|
// Important for future resumes.
|
|
553
552
|
this.resumeGatewayUrl = payload.resume_gateway_url;
|
|
554
553
|
this.sessionId = payload.session_id;
|
|
555
554
|
this.state = ShardState.Connected;
|
|
556
555
|
this.logger.debug(`[Shard] Shard #${this.id} received READY`);
|
|
556
|
+
this.events.ready?.(this);
|
|
557
557
|
// Continue the requests which have been queued since the shard went offline.
|
|
558
558
|
// Important when this is a re-identify
|
|
559
559
|
this.offlineSendQueue.forEach((resolve)=>resolve());
|
|
@@ -570,12 +570,7 @@ export class DiscordenoShard {
|
|
|
570
570
|
if (packet.s !== null) {
|
|
571
571
|
this.previousSequenceNumber = packet.s;
|
|
572
572
|
}
|
|
573
|
-
this.
|
|
574
|
-
}
|
|
575
|
-
forwardToBot(packet) {
|
|
576
|
-
// The necessary handling required for the Shards connection has been finished.
|
|
577
|
-
// Now the event can be safely forwarded.
|
|
578
|
-
this.events.message?.(this, camelize(packet));
|
|
573
|
+
this.events.message?.(this, packet);
|
|
579
574
|
}
|
|
580
575
|
/**
|
|
581
576
|
* Override in order to make the shards presence.
|
|
@@ -662,4 +657,4 @@ export class DiscordenoShard {
|
|
|
662
657
|
}
|
|
663
658
|
export default DiscordenoShard;
|
|
664
659
|
|
|
665
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9TaGFyZC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBCdWZmZXIgfSBmcm9tICdub2RlOmJ1ZmZlcidcbmltcG9ydCB6bGliIGZyb20gJ25vZGU6emxpYidcbmltcG9ydCB0eXBlIHsgRGlzY29yZEdhdGV3YXlQYXlsb2FkLCBEaXNjb3JkSGVsbG8sIERpc2NvcmRSZWFkeSwgRGlzY29yZFVwZGF0ZVByZXNlbmNlIH0gZnJvbSAnQGRpc2NvcmRlbm8vdHlwZXMnXG5pbXBvcnQgeyBHYXRld2F5Q2xvc2VFdmVudENvZGVzLCBHYXRld2F5T3Bjb2RlcyB9IGZyb20gJ0BkaXNjb3JkZW5vL3R5cGVzJ1xuaW1wb3J0IHsgY2FtZWxpemUsIGRlbGF5LCBMZWFreUJ1Y2tldCwgbG9nZ2VyIH0gZnJvbSAnQGRpc2NvcmRlbm8vdXRpbHMnXG5pbXBvcnQgdHlwZSB7IERlY29tcHJlc3MgYXMgRlpzdGREZWNvbXByZXNzIH0gZnJvbSAnZnpzdGQnXG5pbXBvcnQgTm9kZVdlYlNvY2tldCBmcm9tICd3cydcbmltcG9ydCB7XG4gIHR5cGUgU2hhcmRFdmVudHMsXG4gIHR5cGUgU2hhcmRHYXRld2F5Q29uZmlnLFxuICB0eXBlIFNoYXJkSGVhcnQsXG4gIFNoYXJkU29ja2V0Q2xvc2VDb2RlcyxcbiAgdHlwZSBTaGFyZFNvY2tldFJlcXVlc3QsXG4gIFNoYXJkU3RhdGUsXG4gIFRyYW5zcG9ydENvbXByZXNzaW9uLFxufSBmcm9tICcuL3R5cGVzLmpzJ1xuXG5jb25zdCBaTElCX1NZTkNfRkxVU0ggPSBuZXcgVWludDhBcnJheShbMHgwLCAweDAsIDB4ZmYsIDB4ZmZdKVxuXG5sZXQgZnpzdGQ6IHR5cGVvZiBpbXBvcnQoJ2Z6c3RkJylcblxuLyoqIFNpbmNlIGZ6c3RkIGlzIGFuIG9wdGlvbmFsIGRlcGVuZGVuY3ksIHdlIG5lZWQgdG8gaW1wb3J0IGl0IGxhemlseS4gKi9cbmFzeW5jIGZ1bmN0aW9uIGdldEZaU3RkKCkge1xuICByZXR1cm4gKGZ6c3RkID8/PSBhd2FpdCBpbXBvcnQoJ2Z6c3RkJykpXG59XG5cbmV4cG9ydCBjbGFzcyBEaXNjb3JkZW5vU2hhcmQge1xuICAvKiogVGhlIGlkIG9mIHRoZSBzaGFyZC4gKi9cbiAgaWQ6IG51bWJlclxuICAvKiogVGhlIGNvbm5lY3Rpb24gY29uZmlnIGRldGFpbHMgdGhhdCB0aGlzIHNoYXJkIHdpbGwgdXNlZCB0byBjb25uZWN0IHRvIGRpc2NvcmQuICovXG4gIGNvbm5lY3Rpb246IFNoYXJkR2F0ZXdheUNvbmZpZ1xuICAvKiogVGhpcyBjb250YWlucyBhbGwgdGhlIGhlYXJ0YmVhdCBpbmZvcm1hdGlvbiAqL1xuICBoZWFydDogU2hhcmRIZWFydFxuICAvKiogVGhlIG1heGltdW0gb2YgcmVxdWVzdHMgd2hpY2ggY2FuIGJlIHNlbmQgdG8gZGlzY29yZCBwZXIgcmF0ZSBsaW1pdCB0aWNrLiBUeXBpY2FsbHkgdGhpcyB2YWx1ZSBzaG91bGQgbm90IGJlIGNoYW5nZWQuICovXG4gIG1heFJlcXVlc3RzUGVyUmF0ZUxpbWl0VGljazogbnVtYmVyID0gMTIwXG4gIC8qKiBUaGUgcHJldmlvdXMgcGF5bG9hZCBzZXF1ZW5jZSBudW1iZXIuICovXG4gIHByZXZpb3VzU2VxdWVuY2VOdW1iZXI6IG51bWJlciB8IG51bGwgPSBudWxsXG4gIC8qKiBJbiB3aGljaCBpbnRlcnZhbCAoaW4gbWlsbGlzZWNvbmRzKSB0aGUgZ2F0ZXdheSByZXNldHMgaXQncyByYXRlIGxpbWl0LiAqL1xuICByYXRlTGltaXRSZXNldEludGVydmFsOiBudW1iZXIgPSA2MDAwMFxuICAvKiogQ3VycmVudCBzZXNzaW9uIGlkIG9mIHRoZSBzaGFyZCBpZiBwcmVzZW50LiAqL1xuICBzZXNzaW9uSWQ/OiBzdHJpbmdcbiAgLyoqIFRoaXMgY29udGFpbnMgdGhlIFdlYlNvY2tldCBjb25uZWN0aW9uIHRvIERpc2NvcmQsIGlmIGN1cnJlbnRseSBjb25uZWN0ZWQuICovXG4gIHNvY2tldD86IFdlYlNvY2tldFxuICAvKiogQ3VycmVudCBpbnRlcm5hbCBzdGF0ZSBvZiB0aGUgdGhpcy4gKi9cbiAgc3RhdGUgPSBTaGFyZFN0YXRlLk9mZmxpbmVcbiAgLyoqIFRoZSB1cmwgcHJvdmlkZWQgYnkgZGlzY29yZCB0byB1c2Ugd2hlbiByZXN1bWluZyBhIGNvbm5lY3Rpb24gZm9yIHRoaXMgdGhpcy4gKi9cbiAgcmVzdW1lR2F0ZXdheVVybDogc3RyaW5nID0gJydcbiAgLyoqIFRoZSBzaGFyZCByZWxhdGVkIGV2ZW50IGhhbmRsZXJzLiAqL1xuICBldmVudHM6IFNoYXJkRXZlbnRzID0ge31cbiAgLyoqIENhY2hlIGZvciBwZW5kaW5nIGdhdGV3YXkgcmVxdWVzdHMgd2hpY2ggc2hvdWxkIGhhdmUgYmVlbiBzZW5kIHdoaWxlIHRoZSBnYXRld2F5IHdlbnQgb2ZmbGluZS4gKi9cbiAgb2ZmbGluZVNlbmRRdWV1ZTogKCgpID0+IHZvaWQpW10gPSBbXVxuICAvKiogUmVzb2x2ZSBpbnRlcm5hbCB3YWl0aW5nIHN0YXRlcy4gTWFwcGVkIGJ5IFNlbGVjdGVkRXZlbnRzID0+IFJlc29sdmVGdW5jdGlvbiAqL1xuICByZXNvbHZlcyA9IG5ldyBNYXA8J1JFQURZJyB8ICdSRVNVTUVEJyB8ICdJTlZBTElEX1NFU1NJT04nLCAocGF5bG9hZDogRGlzY29yZEdhdGV3YXlQYXlsb2FkKSA9PiB2b2lkPigpXG4gIC8qKiBTaGFyZCBidWNrZXQuIE9ubHkgYWNjZXNzIHRoaXMgaWYgeW91IGtub3cgd2hhdCB5b3UgYXJlIGRvaW5nLiBCdWNrZXQgZm9yIGhhbmRsaW5nIHNoYXJkIHJlcXVlc3QgcmF0ZSBsaW1pdHMuICovXG4gIGJ1Y2tldDogTGVha3lCdWNrZXRcbiAgLyoqIExvZ2dlciBmb3IgdGhlIGJ1Y2tldC4gKi9cbiAgbG9nZ2VyOiBQaWNrPHR5cGVvZiBsb2dnZXIsICdkZWJ1ZycgfCAnaW5mbycgfCAnd2FybicgfCAnZXJyb3InIHwgJ2ZhdGFsJz5cbiAgLyoqXG4gICAqIElzIHRoZSBzaGFyZCBnb2luZyBvZmZsaW5lP1xuICAgKlxuICAgKiBAcmVtYXJrc1xuICAgKiBUaGlzIHdpbGwgYmUgdHJ1ZSBpZiB0aGUgY2xvc2UgbWV0aG9kIGhhcyBiZWVuIGNhbGxlZCB3aXRoIGVpdGhlciAxMDAwIG9yIDEwMDFcbiAgICpcbiAgICogQGludGVybmFsXG4gICAqIFRoaXMgaXMgZm9yIGludGVybmFsIHB1cnBvc2VzIG9ubHksIGFuZCBzdWJqZWN0IHRvIGJyZWFraW5nIGNoYW5nZXMuXG4gICAqL1xuICBnb2luZ09mZmxpbmUgPSBmYWxzZVxuICAvKiogVGV4dCBkZWNvZGVyIHVzZWQgZm9yIGNvbXByZXNzZWQgcGF5bG9hZHMuICovXG4gIHRleHREZWNvZGVyID0gbmV3IFRleHREZWNvZGVyKClcbiAgLyoqIHpsaWIgSW5mbGF0ZSBvciB6c3RkIGRlY29tcHJlc3MgKGZyb20gbm9kZTp6bGliKSBpbnN0YW5jZSBmb3IgdHJhbnNwb3J0IHBheWxvYWRzLiAqL1xuICBpbmZsYXRlPzogemxpYi5JbmZsYXRlIHwgemxpYi5ac3RkRGVjb21wcmVzc1xuICAvKiogWkxpYiBpbmZsYXRlIGJ1ZmZlci4gKi9cbiAgaW5mbGF0ZUJ1ZmZlcjogVWludDhBcnJheSB8IG51bGwgPSBudWxsXG4gIC8qKiBaU3RkIERlY29tcHJlc3MgaW5zdGFuY2UgZm9yIFpTdGQtc3RyZWFtIHRyYW5zcG9ydCBwYXlsb2Fkcy4gKi9cbiAgenN0ZERlY29tcHJlc3M/OiBGWnN0ZERlY29tcHJlc3NcbiAgLyoqIFF1ZXVlIGZvciBjb21wcmVzc2VkIHBheWxvYWRzIGZvciBac3RkIERlY29tcHJlc3MgKi9cbiAgZGVjb21wcmVzc2lvblByb21pc2VzUXVldWU6ICgoZGF0YTogRGlzY29yZEdhdGV3YXlQYXlsb2FkKSA9PiB2b2lkKVtdID0gW11cbiAgLyoqXG4gICAqIEEgZnVuY3Rpb24gdGhhdCB3aWxsIGJlIGNhbGxlZCBvbmNlIHRoZSBzb2NrZXQgaXMgY2xvc2VkIGFuZCBoYW5kbGVDbG9zZSgpIGhhcyBmaW5pc2hlZCB1cGRhdGluZyBpbnRlcm5hbCBzdGF0ZXMuXG4gICAqXG4gICAqIEBpbnRlcm5hbFxuICAgKiBUaGlzIGlzIGZvciBpbnRlcm5hbCBwdXJwb3NlcyBvbmx5LCBhbmQgc3ViamVjdCB0byBicmVha2luZyBjaGFuZ2VzLlxuICAgKi9cbiAgcmVzb2x2ZUFmdGVyQ2xvc2U/OiAoY2xvc2U6IENsb3NlRXZlbnQpID0+IHZvaWRcblxuICBjb25zdHJ1Y3RvcihvcHRpb25zOiBTaGFyZENyZWF0ZU9wdGlvbnMpIHtcbiAgICB0aGlzLmlkID0gb3B0aW9ucy5pZFxuICAgIHRoaXMuY29ubmVjdGlvbiA9IG9wdGlvbnMuY29ubmVjdGlvblxuICAgIHRoaXMuZXZlbnRzID0gb3B0aW9ucy5ldmVudHNcbiAgICB0aGlzLmxvZ2dlciA9IG9wdGlvbnMubG9nZ2VyID8/IGxvZ2dlclxuXG4gICAgdGhpcy5oZWFydCA9IHtcbiAgICAgIGFja25vd2xlZGdlZDogZmFsc2UsXG4gICAgICBpbnRlcnZhbDogNDUwMDAsXG4gICAgfVxuXG4gICAgaWYgKG9wdGlvbnMucmVxdWVzdElkZW50aWZ5KSB0aGlzLnJlcXVlc3RJZGVudGlmeSA9IG9wdGlvbnMucmVxdWVzdElkZW50aWZ5XG4gICAgaWYgKG9wdGlvbnMubWFrZVByZXNlbmNlKSB0aGlzLm1ha2VQcmVzZW5jZSA9IG9wdGlvbnMubWFrZVByZXNlbmNlXG5cbiAgICB0aGlzLmJ1Y2tldCA9IG5ldyBMZWFreUJ1Y2tldCh7XG4gICAgICBtYXg6IHRoaXMuY2FsY3VsYXRlU2FmZVJlcXVlc3RzKCksXG4gICAgICByZWZpbGxBbW91bnQ6IHRoaXMuY2FsY3VsYXRlU2FmZVJlcXVlc3RzKCksXG4gICAgICByZWZpbGxJbnRlcnZhbDogNjAwMDAsXG4gICAgICBsb2dnZXI6IHRoaXMubG9nZ2VyLFxuICAgIH0pXG4gIH1cblxuICAvKiogVGhlIGdhdGV3YXkgY29uZmlndXJhdGlvbiB3aGljaCBpcyB1c2VkIHRvIGNvbm5lY3QgdG8gRGlzY29yZC4gKi9cbiAgZ2V0IGdhdGV3YXlDb25maWcoKTogU2hhcmRHYXRld2F5Q29uZmlnIHtcbiAgICByZXR1cm4gdGhpcy5jb25uZWN0aW9uXG4gIH1cblxuICAvKiogVGhlIHVybCB0byBjb25uZWN0IHRvLiBJbml0aWFsbHkgdGhpcyBpcyB0aGUgZGlzY29yZCBnYXRld2F5IHVybCwgYW5kIHRoZW4gaXMgc3dpdGNoZWQgdG8gcmVzdW1lIGdhdGV3YXkgdXJsIG9uY2UgYSBSRUFEWSBpcyByZWNlaXZlZC4gKi9cbiAgZ2V0IGNvbm5lY3Rpb25VcmwoKTogc3RyaW5nIHtcbiAgICAvLyBVc2UgfHwgYW5kIG5vdCA/PyBoZXJlLiA/PyB3aWxsIGNhdXNlIGEgYnVnLlxuICAgIHJldHVybiB0aGlzLnJlc3VtZUdhdGV3YXlVcmwgfHwgdGhpcy5nYXRld2F5Q29uZmlnLnVybFxuICB9XG5cbiAgLyoqIENhbGN1bGF0ZSB0aGUgYW1vdW50IG9mIHJlcXVlc3RzIHdoaWNoIGNhbiBzYWZlbHkgYmUgbWFkZSBwZXIgcmF0ZSBsaW1pdCBpbnRlcnZhbCwgYmVmb3JlIHRoZSBnYXRld2F5IGdldHMgZGlzY29ubmVjdGVkIGR1ZSB0byBhbiBleGNlZWRlZCByYXRlIGxpbWl0LiAqL1xuICBjYWxjdWxhdGVTYWZlUmVxdWVzdHMoKTogbnVtYmVyIHtcbiAgICAvLyAqIDIgYWRkcyBleHRyYSBzYWZldHkgbGF5ZXIgZm9yIGRpc2NvcmRzIE9QIDEgcmVxdWVzdHMgdGhhdCB3ZSBuZWVkIHRvIHJlc3BvbmQgdG9cbiAgICBjb25zdCBzYWZlUmVxdWVzdHMgPSB0aGlzLm1heFJlcXVlc3RzUGVyUmF0ZUxpbWl0VGljayAtIE1hdGguY2VpbCh0aGlzLnJhdGVMaW1pdFJlc2V0SW50ZXJ2YWwgLyB0aGlzLmhlYXJ0LmludGVydmFsKSAqIDJcblxuICAgIHJldHVybiBzYWZlUmVxdWVzdHMgPCAwID8gMCA6IHNhZmVSZXF1ZXN0c1xuICB9XG5cbiAgYXN5bmMgY2hlY2tPZmZsaW5lKGhpZ2hQcmlvcml0eTogYm9vbGVhbik6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICh0aGlzLmlzT3BlbigpKSByZXR1cm5cblxuICAgIHJldHVybiBhd2FpdCBuZXcgUHJvbWlzZTx2b2lkPigocmVzb2x2ZSkgPT4ge1xuICAgICAgLy8gSGlnaGVyIHByaW9yaXR5IHJlcXVlc3RzIGdldCBhZGRlZCBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBhcnJheS5cbiAgICAgIGlmIChoaWdoUHJpb3JpdHkpIHRoaXMub2ZmbGluZVNlbmRRdWV1ZS51bnNoaWZ0KHJlc29sdmUpXG4gICAgICBlbHNlIHRoaXMub2ZmbGluZVNlbmRRdWV1ZS5wdXNoKHJlc29sdmUpXG4gICAgfSlcbiAgfVxuXG4gIC8qKiBDbG9zZSB0aGUgc29ja2V0IGNvbm5lY3Rpb24gdG8gZGlzY29yZCBpZiBwcmVzZW50LiAqL1xuICBhc3luYyBjbG9zZShjb2RlOiBudW1iZXIsIHJlYXNvbjogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdGhpcy5sb2dnZXIuZGVidWcoYFtTaGFyZF0gUmVxdWVzdCBmb3IgU2hhcmQgIyR7dGhpcy5pZH0gdG8gY2xvc2UgdGhlIHNvY2tldCB3aXRoIGNvZGUgJHtjb2RlfS5gKVxuXG4gICAgaWYgKHRoaXMuc29ja2V0Py5yZWFkeVN0YXRlICE9PSBOb2RlV2ViU29ja2V0Lk9QRU4pIHtcbiAgICAgIHRoaXMubG9nZ2VyLmRlYnVnKGBbU2hhcmRdIFNoYXJkICMke3RoaXMuaWR9J3MgcmVhZHkgc3RhdGUgaXMgJHt0aGlzLnNvY2tldD8ucmVhZHlTdGF0ZX0sIFVuYWJsZSB0byBjbG9zZS5gKVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgdGhpcy5nb2luZ09mZmxpbmUgPSBjb2RlID09PSBHYXRld2F5Q2xvc2VFdmVudENvZGVzLk5vcm1hbENsb3N1cmUgfHwgY29kZSA9PT0gR2F0ZXdheUNsb3NlRXZlbnRDb2Rlcy5Hb2luZ0F3YXlcblxuICAgIC8vIFRoaXMgaGFzIHRvIGJlIGNyZWF0ZWQgYmVmb3JlIHRoZSBhY3R1YWwgY2FsbCB0byBzb2NrZXQuY2xvc2UgYXMgZm9yIGV4YW1wbGUgQnVuIGNhbGxzIHNvY2tldC5vbmNsb3NlIGltbWVkaWF0ZWx5IG9uIHRoZSAuY2xvc2UoKSBjYWxsIGluc3RlYWQgb2Ygd2FpdGluZyBmb3IgdGhlIGNvbm5lY3Rpb24gdG8gZW5kXG4gICAgY29uc3QgcHJvbWlzZSA9IG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgICB0aGlzLnJlc29sdmVBZnRlckNsb3NlID0gcmVzb2x2ZVxuICAgIH0pXG5cbiAgICB0aGlzLnNvY2tldC5jbG9zZShjb2RlLCByZWFzb24pXG5cbiAgICB0aGlzLmxvZ2dlci5kZWJ1ZyhgW1NoYXJkXSBXYWl0aW5nIGZvciBTaGFyZCAjJHt0aGlzLmlkfSB0byBjbG9zZSB0aGUgc29ja2V0IHdpdGggY29kZSAke2NvZGV9LmApXG5cbiAgICAvLyBXZSBuZWVkIHRvIHdhaXQgZm9yIHRoZSBzb2NrZXQgdG8gYmUgZnVsbHkgY2xvc2VkLCBvdGhlcndpc2UgdGhlcmUnbGwgYmUgcmFjZSBjb25kaXRpb24gaXNzdWVzIGlmIHdlIHRyeSB0byBjb25uZWN0IGFnYWluLCByZXN1bHRpbmcgaW4gdW5leHBlY3RlZCBiZWhhdmlvci5cbiAgICBhd2FpdCBwcm9taXNlXG5cbiAgICB0aGlzLmxvZ2dlci5kZWJ1ZyhgW1NoYXJkXSBTaGFyZCAjJHt0aGlzLmlkfSBjbG9zZWQgdGhlIHNvY2tldCB3aXRoIGNvZGUgJHtjb2RlfS5gKVxuXG4gICAgLy8gUmVzZXQgdGhlIHJlc29sdmVBZnRlckNsb3NlIGZ1bmN0aW9uIGFmdGVyIGl0IGhhcyBiZWVuIHJlc29sdmVkLlxuICAgIHRoaXMucmVzb2x2ZUFmdGVyQ2xvc2UgPSB1bmRlZmluZWRcbiAgfVxuXG4gIC8qKiBDb25uZWN0IHRoZSBzaGFyZCB3aXRoIHRoZSBnYXRld2F5IGFuZCBzdGFydCBoZWFydGJlYXRpbmcuIFRoaXMgd2lsbCBub3QgaWRlbnRpZnkgdGhlIHNoYXJkIHRvIHRoZSBnYXRld2F5LiAqL1xuICBhc3luYyBjb25uZWN0KCk6IFByb21pc2U8RGlzY29yZGVub1NoYXJkPiB7XG4gICAgLy8gT25seSBzZXQgdGhlIHNoYXJkIHRvIGBDb25uZWN0aW5nYCBzdGF0ZSxcbiAgICAvLyBpZiB0aGUgY29ubmVjdGlvbiByZXF1ZXN0IGRvZXMgbm90IGNvbWUgZnJvbSBhbiBpZGVudGlmeSBvciByZXN1bWUgYWN0aW9uLlxuICAgIGlmICghW1NoYXJkU3RhdGUuSWRlbnRpZnlpbmcsIFNoYXJkU3RhdGUuUmVzdW1pbmddLmluY2x1ZGVzKHRoaXMuc3RhdGUpKSB7XG4gICAgICB0aGlzLnN0YXRlID0gU2hhcmRTdGF0ZS5Db25uZWN0aW5nXG4gICAgfVxuXG4gICAgdGhpcy5sb2dnZXIuZGVidWcoYFtTaGFyZF0gQ29ubmVjdGluZyBTaGFyZCAjJHt0aGlzLmlkfSBzb2NrZXQuYClcblxuICAgIHRoaXMuZXZlbnRzLmNvbm5lY3Rpbmc/Lih0aGlzKVxuXG4gICAgY29uc3QgdXJsID0gbmV3IFVSTCh0aGlzLmNvbm5lY3Rpb25VcmwpXG4gICAgdXJsLnNlYXJjaFBhcmFtcy5zZXQoJ3YnLCB0aGlzLmdhdGV3YXlDb25maWcudmVyc2lvbi50b1N0cmluZygpKVxuICAgIHVybC5zZWFyY2hQYXJhbXMuc2V0KCdlbmNvZGluZycsICdqc29uJylcblxuICAgIC8vIFNldCB0aGUgY29tcHJlc3MgdXJsIHBhcmFtIGFuZCBpbml0aWFsaXplIHRoZSBkZWNvbXByZXNzaW9uIGNvbnRleHRzXG4gICAgaWYgKHRoaXMuZ2F0ZXdheUNvbmZpZy50cmFuc3BvcnRDb21wcmVzc2lvbikge1xuICAgICAgdXJsLnNlYXJjaFBhcmFtcy5zZXQoJ2NvbXByZXNzJywgdGhpcy5nYXRld2F5Q29uZmlnLnRyYW5zcG9ydENvbXByZXNzaW9uKVxuXG4gICAgICBpZiAodGhpcy5nYXRld2F5Q29uZmlnLnRyYW5zcG9ydENvbXByZXNzaW9uID09PSBUcmFuc3BvcnRDb21wcmVzc2lvbi56bGliKSB7XG4gICAgICAgIHRoaXMuaW5mbGF0ZUJ1ZmZlciA9IG51bGxcbiAgICAgICAgdGhpcy5pbmZsYXRlID0gemxpYi5jcmVhdGVJbmZsYXRlKHtcbiAgICAgICAgICBmaW5pc2hGbHVzaDogemxpYi5jb25zdGFudHMuWl9TWU5DX0ZMVVNILFxuICAgICAgICAgIGNodW5rU2l6ZTogNjQgKiAxMDI0LFxuICAgICAgICB9KVxuXG4gICAgICAgIHRoaXMuaW5mbGF0ZS5vbignZXJyb3InLCAoZSkgPT4ge1xuICAgICAgICAgIHRoaXMubG9nZ2VyLmVycm9yKCdUaGUgd2FzIGFuIGVycm9yIGluIGRlY29tcHJlc3NpbmcgYSBaTGliIGNvbXByZXNzZWQgcGF5bG9hZCcsIGUpXG4gICAgICAgIH0pXG5cbiAgICAgICAgdGhpcy5pbmZsYXRlLm9uKCdkYXRhJywgKGRhdGEpID0+IHtcbiAgICAgICAgICBpZiAoIShkYXRhIGluc3RhbmNlb2YgVWludDhBcnJheSkpIHJldHVyblxuXG4gICAgICAgICAgaWYgKHRoaXMuaW5mbGF0ZUJ1ZmZlcikge1xuICAgICAgICAgICAgY29uc3QgbmV3QnVmZmVyID0gbmV3IFVpbnQ4QXJyYXkodGhpcy5pbmZsYXRlQnVmZmVyLmJ5dGVMZW5ndGggKyBkYXRhLmJ5dGVMZW5ndGgpXG4gICAgICAgICAgICBuZXdCdWZmZXIuc2V0KHRoaXMuaW5mbGF0ZUJ1ZmZlcilcbiAgICAgICAgICAgIG5ld0J1ZmZlci5zZXQoZGF0YSwgdGhpcy5pbmZsYXRlQnVmZmVyLmJ5dGVMZW5ndGgpXG4gICAgICAgICAgICB0aGlzLmluZmxhdGVCdWZmZXIgPSBuZXdCdWZmZXJcblxuICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdGhpcy5pbmZsYXRlQnVmZmVyID0gZGF0YVxuICAgICAgICB9KVxuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5nYXRld2F5Q29uZmlnLnRyYW5zcG9ydENvbXByZXNzaW9uID09PSBUcmFuc3BvcnRDb21wcmVzc2lvbi56c3RkKSB7XG4gICAgICAgIGlmICgnY3JlYXRlWnN0ZERlY29tcHJlc3MnIGluIHpsaWIpIHtcbiAgICAgICAgICB0aGlzLmxvZ2dlci5kZWJ1ZygnW1NoYXJkXSBVc2luZyBub2RlOnpsaWIgenN0ZCBkZWNvbXByZXNzaW9uLicpXG5cbiAgICAgICAgICB0aGlzLmluZmxhdGVCdWZmZXIgPSBudWxsXG4gICAgICAgICAgdGhpcy5pbmZsYXRlID0gemxpYi5jcmVhdGVac3RkRGVjb21wcmVzcyh7XG4gICAgICAgICAgICBjaHVua1NpemU6IDY0ICogMTAyNCxcbiAgICAgICAgICB9KVxuXG4gICAgICAgICAgdGhpcy5pbmZsYXRlLm9uKCdlcnJvcicsIChlKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmxvZ2dlci5lcnJvcignVGhlIHdhcyBhbiBlcnJvciBpbiBkZWNvbXByZXNzaW5nIGEgWnN0ZCBjb21wcmVzc2VkIHBheWxvYWQnLCBlKVxuICAgICAgICAgIH0pXG5cbiAgICAgICAgICB0aGlzLmluZmxhdGUub24oJ2RhdGEnLCAoZGF0YSkgPT4ge1xuICAgICAgICAgICAgaWYgKCEoZGF0YSBpbnN0YW5jZW9mIFVpbnQ4QXJyYXkpKSByZXR1cm5cblxuICAgICAgICAgICAgaWYgKHRoaXMuaW5mbGF0ZUJ1ZmZlcikge1xuICAgICAgICAgICAgICBjb25zdCBuZXdCdWZmZXIgPSBuZXcgVWludDhBcnJheSh0aGlzLmluZmxhdGVCdWZmZXIuYnl0ZUxlbmd0aCArIGRhdGEuYnl0ZUxlbmd0aClcbiAgICAgICAgICAgICAgbmV3QnVmZmVyLnNldCh0aGlzLmluZmxhdGVCdWZmZXIpXG4gICAgICAgICAgICAgIG5ld0J1ZmZlci5zZXQoZGF0YSwgdGhpcy5pbmZsYXRlQnVmZmVyLmJ5dGVMZW5ndGgpXG4gICAgICAgICAgICAgIHRoaXMuaW5mbGF0ZUJ1ZmZlciA9IG5ld0J1ZmZlclxuXG4gICAgICAgICAgICAgIHJldHVyblxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLmluZmxhdGVCdWZmZXIgPSBkYXRhXG4gICAgICAgICAgfSlcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zdCBmenN0ZCA9IGF3YWl0IGdldEZaU3RkKCkuY2F0Y2goKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5sb2dnZXIud2FybignW1NoYXJkXSBcImZ6c3RkXCIgaXMgbm90IGluc3RhbGxlZC4gRGlzYWJsZWQgdHJhbnNwb3J0IGNvbXByZXNzaW9uLicpXG4gICAgICAgICAgICB1cmwuc2VhcmNoUGFyYW1zLmRlbGV0ZSgnY29tcHJlc3MnKVxuXG4gICAgICAgICAgICByZXR1cm4gbnVsbFxuICAgICAgICAgIH0pXG5cbiAgICAgICAgICBpZiAoZnpzdGQpIHtcbiAgICAgICAgICAgIHRoaXMubG9nZ2VyLmRlYnVnKCdbU2hhcmRdIFVzaW5nIGZ6c3RkIHpzdGQgZGVjb21wcmVzc2lvbi4nKVxuXG4gICAgICAgICAgICB0aGlzLnpzdGREZWNvbXByZXNzID0gbmV3IGZ6c3RkLkRlY29tcHJlc3MoKGRhdGEpID0+IHtcbiAgICAgICAgICAgICAgY29uc3QgZGVjb2RlZERhdGEgPSB0aGlzLnRleHREZWNvZGVyLmRlY29kZShkYXRhKVxuICAgICAgICAgICAgICBjb25zdCBwYXJzZWREYXRhID0gSlNPTi5wYXJzZShkZWNvZGVkRGF0YSlcbiAgICAgICAgICAgICAgdGhpcy5kZWNvbXByZXNzaW9uUHJvbWlzZXNRdWV1ZS5zaGlmdCgpPy4ocGFyc2VkRGF0YSlcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuZ2F0ZXdheUNvbmZpZy5jb21wcmVzcyAmJiB0aGlzLmdhdGV3YXlDb25maWcudHJhbnNwb3J0Q29tcHJlc3Npb24pIHtcbiAgICAgIHRoaXMubG9nZ2VyLndhcm4oJ1tTaGFyZF0gUGF5bG9hZCBjb21wcmVzc2lvbiBoYXMgYmVlbiBkaXNhYmxlZCBzaW5jZSB0cmFuc3BvcnQgY29tcHJlc3Npb24gaXMgZW5hYmxlZCBhcyB3ZWxsLicpXG4gICAgICB0aGlzLmdhdGV3YXlDb25maWcuY29tcHJlc3MgPSBmYWxzZVxuICAgIH1cblxuICAgIC8vIFdlIGNoZWNrIGZvciBidWlsdC1pbiBXZWJTb2NrZXQgaW1wbGVtZW50YXRpb25zIGluIEJ1biBvciBEZW5vLCBOb2RlSlMgdjIyIGhhcyBhbiBpbXBsZW1lbnRhdGlvbiB0b28gYnV0IGl0IHNlZW1zIHRvIGJlIGxlc3Mgb3B0aW1pemVkIHNvIGZvciBub3cgaXQgaXMgYmV0dGVyIHRvIHVzZSB0aGUgd3MgbnBtIHBhY2thZ2VcbiAgICBjb25zdCBzaG91bGRVc2VCdWlsdGluID0gUmVmbGVjdC5oYXMoZ2xvYmFsVGhpcywgJ1dlYlNvY2tldCcpICYmIChSZWZsZWN0LmhhcyhnbG9iYWxUaGlzLCAnQnVuJykgfHwgUmVmbGVjdC5oYXMoZ2xvYmFsVGhpcywgJ0Rlbm8nKSlcblxuICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgTm9kZVdlYlNvY2tldCBkb2Vzbid0IHN1cHBvcnQgXCJkaXNwYXRjaEV2ZW50XCIsIGFuZCB3aGlsZSB3ZSBkb24ndCB1c2UgaXQsIGl0IGlzIHJlcXVpcmVkIG9uIHRoZSBcIldlYlNvY2tldFwiIHR5cGVcbiAgICBjb25zdCBzb2NrZXQ6IFdlYlNvY2tldCA9IHNob3VsZFVzZUJ1aWx0aW4gPyBuZXcgV2ViU29ja2V0KHVybCkgOiBuZXcgTm9kZVdlYlNvY2tldCh1cmwpXG4gICAgdGhpcy5zb2NrZXQgPSBzb2NrZXRcblxuICAgIC8vIEJ5IGRlZmF1bHQgV2ViU29ja2V0IHdpbGwgZ2l2ZSB1cyBhIEJsb2IsIHRoaXMgY2hhbmdlcyBpdCBzbyB0aGF0IGl0IGdpdmVzIHVzIGFuIEFycmF5QnVmZmVyXG4gICAgc29ja2V0LmJpbmFyeVR5cGUgPSAnYXJyYXlidWZmZXInXG5cbiAgICBzb2NrZXQub25lcnJvciA9IChldmVudCkgPT4gdGhpcy5oYW5kbGVFcnJvcihldmVudClcbiAgICBzb2NrZXQub25jbG9zZSA9IChjbG9zZUV2ZW50KSA9PiB0aGlzLmhhbmRsZUNsb3NlKGNsb3NlRXZlbnQpXG4gICAgc29ja2V0Lm9ubWVzc2FnZSA9IChtZXNzYWdlRXZlbnQpID0+IHRoaXMuaGFuZGxlTWVzc2FnZShtZXNzYWdlRXZlbnQpXG5cbiAgICByZXR1cm4gYXdhaXQgbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICAgIHNvY2tldC5vbm9wZW4gPSAoKSA9PiB7XG4gICAgICAgIC8vIE9ubHkgc2V0IHRoZSBzaGFyZCB0byBgVW5pZGVudGlmaWVkYCBzdGF0ZSBpZiB0aGUgY29ubmVjdGlvbiByZXF1ZXN0IGRvZXMgbm90IGNvbWUgZnJvbSBhbiBpZGVudGlmeSBvciByZXN1bWUgYWN0aW9uLlxuICAgICAgICBpZiAoIVtTaGFyZFN0YXRlLklkZW50aWZ5aW5nLCBTaGFyZFN0YXRlLlJlc3VtaW5nXS5pbmNsdWRlcyh0aGlzLnN0YXRlKSkge1xuICAgICAgICAgIHRoaXMuc3RhdGUgPSBTaGFyZFN0YXRlLlVuaWRlbnRpZmllZFxuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5sb2dnZXIuZGVidWcoYFtTaGFyZF0gU2hhcmQgIyR7dGhpcy5pZH0gc29ja2V0IGNvbm5lY3RlZC5gKVxuXG4gICAgICAgIHRoaXMuZXZlbnRzLmNvbm5lY3RlZD8uKHRoaXMpXG5cbiAgICAgICAgcmVzb2x2ZSh0aGlzKVxuICAgICAgfVxuICAgIH0pXG4gIH1cblxuICAvKipcbiAgICogSWRlbnRpZnkgdGhlIHNoYXJkIHRvIHRoZSBnYXRld2F5LiBJZiBub3QgY29ubmVjdGVkLCB0aGlzIHdpbGwgYWxzbyBjb25uZWN0IHRoZSBzaGFyZCB0byB0aGUgZ2F0ZXdheS5cbiAgICogQHBhcmFtIGJ5cGFzc1JlcXVlc3QgLSBXaGV0aGVyIHRvIGJ5cGFzcyB0aGUgcmVxdWVzdElkZW50aWZ5IGhhbmRsZXIgYW5kIGlkZW50aWZ5IGltbWVkaWF0ZWx5LiBUaGlzIHNob3VsZCBiZSB1c2VkIGNhcmVmdWxseSBhcyBpdCBjYW4gY2F1c2UgaW52YWxpZCBzZXNzaW9ucy5cbiAgICovXG4gIGFzeW5jIGlkZW50aWZ5KGJ5cGFzc1JlcXVlc3QgPSBmYWxzZSk6IFByb21pc2U8dm9pZD4ge1xuICAgIC8vIEEgbmV3IGlkZW50aWZ5IGhhcyBiZWVuIHJlcXVlc3RlZCBldmVuIHRob3VnaCB0aGVyZSBpcyBhbHJlYWR5IGEgY29ubmVjdGlvbiBvcGVuLlxuICAgIC8vIFRoZXJlZm9yZSB3ZSBuZWVkIHRvIGNsb3NlIHRoZSBvbGQgY29ubmVjdGlvbiBhbmQgaGVhcnRiZWF0aW5nIGJlZm9yZSBjcmVhdGluZyBhIG5ldyBvbmUuXG4gICAgaWYgKHRoaXMuaXNPcGVuKCkpIHtcbiAgICAgIHRoaXMubG9nZ2VyLmRlYnVnKGBbU2hhcmRdIElkZW50aWZ5aW5nIG9wZW4gU2hhcmQgIyR7dGhpcy5pZH0sIGNsb3NpbmcgdGhlIGNvbm5lY3Rpb25gKVxuICAgICAgYXdhaXQgdGhpcy5jbG9zZShTaGFyZFNvY2tldENsb3NlQ29kZXMuUmVJZGVudGlmeWluZywgJ1JlLWlkZW50aWZ5aW5nIGNsb3N1cmUgb2Ygb2xkIGNvbm5lY3Rpb24uJylcbiAgICB9XG5cbiAgICBpZiAoIWJ5cGFzc1JlcXVlc3QpIHtcbiAgICAgIGF3YWl0IHRoaXMucmVxdWVzdElkZW50aWZ5KClcbiAgICB9XG5cbiAgICB0aGlzLnN0YXRlID0gU2hhcmRTdGF0ZS5JZGVudGlmeWluZ1xuICAgIHRoaXMuZXZlbnRzLmlkZW50aWZ5aW5nPy4odGhpcylcblxuICAgIC8vIEl0IGlzIHBvc3NpYmxlIHRoYXQgdGhlIHNoYXJkIGlzIGluIEhlYXJ0YmVhdGluZyBzdGF0ZSBidXQgbm90IGlkZW50aWZpZWQsXG4gICAgLy8gc28gY2hlY2sgd2hldGhlciB0aGVyZSBpcyBhbHJlYWR5IGEgZ2F0ZXdheSBjb25uZWN0aW9uIGV4aXN0aW5nLlxuICAgIC8vIElmIG5vdCB3ZSBuZWVkIHRvIGNyZWF0ZSBvbmUgYmVmb3JlIHdlIGlkZW50aWZ5LlxuICAgIGlmICghdGhpcy5pc09wZW4oKSkge1xuICAgICAgYXdhaXQgdGhpcy5jb25uZWN0KClcbiAgICB9XG5cbiAgICB0aGlzLmxvZ2dlci5kZWJ1ZyhgW1NoYXJkXSBTZW5kaW5nIElkZW50aWZ5IHBheWxvYWQgZm9yIFNoYXJkICMke3RoaXMuaWR9LmApXG5cbiAgICB0aGlzLnNlbmQoXG4gICAgICB7XG4gICAgICAgIG9wOiBHYXRld2F5T3Bjb2Rlcy5JZGVudGlmeSxcbiAgICAgICAgZDoge1xuICAgICAgICAgIHRva2VuOiBgQm90ICR7dGhpcy5nYXRld2F5Q29uZmlnLnRva2VufWAsXG4gICAgICAgICAgY29tcHJlc3M6IHRoaXMuZ2F0ZXdheUNvbmZpZy5jb21wcmVzcyxcbiAgICAgICAgICBwcm9wZXJ0aWVzOiB0aGlzLmdhdGV3YXlDb25maWcucHJvcGVydGllcyxcbiAgICAgICAgICBpbnRlbnRzOiB0aGlzLmdhdGV3YXlDb25maWcuaW50ZW50cyxcbiAgICAgICAgICBzaGFyZDogW3RoaXMuaWQsIHRoaXMuZ2F0ZXdheUNvbmZpZy50b3RhbFNoYXJkc10sXG4gICAgICAgICAgcHJlc2VuY2U6IGF3YWl0IHRoaXMubWFrZVByZXNlbmNlKCksXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgICAgdHJ1ZSxcbiAgICApXG5cbiAgICByZXR1cm4gYXdhaXQgbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICAgIHRoaXMucmVzb2x2ZXMuc2V0KCdSRUFEWScsICgpID0+IHtcbiAgICAgICAgcmVzb2x2ZSgpXG4gICAgICB9KVxuICAgICAgLy8gV2hlbiBpZGVudGlmeWluZyB0b28gZmFzdCwgRGlzY29yZCBzZW5kcyBhbiBpbnZhbGlkIHNlc3Npb24gcGF5bG9hZC5cbiAgICAgIC8vIFRoaXMgY2FuIHNhZmVseSBiZSBpZ25vcmVkIHRob3VnaCBhbmQgdGhlIHNoYXJkIHN0YXJ0cyBhIG5ldyBpZGVudGlmeSBhY3Rpb24uXG4gICAgICB0aGlzLnJlc29sdmVzLnNldCgnSU5WQUxJRF9TRVNTSU9OJywgKCkgPT4ge1xuICAgICAgICB0aGlzLnJlc29sdmVzLmRlbGV0ZSgnUkVBRFknKVxuICAgICAgICByZXNvbHZlKClcbiAgICAgIH0pXG4gICAgfSlcbiAgfVxuXG4gIC8qKiBDaGVjayB3aGV0aGVyIHRoZSBjb25uZWN0aW9uIHRvIERpc2NvcmQgaXMgY3VycmVudGx5IG9wZW4uICovXG4gIGlzT3BlbigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5zb2NrZXQ/LnJlYWR5U3RhdGUgPT09IE5vZGVXZWJTb2NrZXQuT1BFTlxuICB9XG5cbiAgLyoqIEF0dGVtcHQgdG8gcmVzdW1lIHRoZSBwcmV2aW91cyBzaGFyZHMgc2Vzc2lvbiB3aXRoIHRoZSBnYXRld2F5LiAqL1xuICBhc3luYyByZXN1bWUoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdGhpcy5sb2dnZXIuZGVidWcoYFtTaGFyZF0gUmVzdW1pbmcgU2hhcmQgIyR7dGhpcy5pZH1gKVxuXG4gICAgLy8gSXQgaGFzIGJlZW4gcmVxdWVzdGVkIHRvIHJlc3VtZSB0aGUgU2hhcmRzIHNlc3Npb24uXG4gICAgLy8gSXQncyBwb3NzaWJsZSB0aGF0IHRoZSBzaGFyZCBpcyBzdGlsbCBjb25uZWN0ZWQgd2l0aCBEaXNjb3JkJ3MgZ2F0ZXdheSB0aGVyZWZvcmUgd2UgbmVlZCB0byBmb3JjZWZ1bGx5IGNsb3NlIGl0LlxuICAgIGlmICh0aGlzLmlzT3BlbigpKSB7XG4gICAgICB0aGlzLmxvZ2dlci5kZWJ1ZyhgW1NoYXJkXSBSZXN1bWluZyBvcGVuIFNoYXJkICMke3RoaXMuaWR9LCBjbG9zaW5nIHRoZSBjb25uZWN0aW9uYClcbiAgICAgIGF3YWl0IHRoaXMuY2xvc2UoU2hhcmRTb2NrZXRDbG9zZUNvZGVzLlJlc3VtZUNsb3NpbmdPbGRDb25uZWN0aW9uLCAnUmVjb25uZWN0aW5nIHRoZSBzaGFyZCwgY2xvc2luZyBvbGQgY29ubmVjdGlvbi4nKVxuICAgIH1cblxuICAgIC8vIFNoYXJkIGhhcyBuZXZlciBpZGVudGlmaWVkLCBzbyB3ZSBjYW5ub3QgcmVzdW1lLlxuICAgIGlmICghdGhpcy5zZXNzaW9uSWQpIHtcbiAgICAgIHRoaXMubG9nZ2VyLmRlYnVnKGBbU2hhcmRdIFRyeWluZyB0byByZXN1bWUgU2hhcmQgIyR7dGhpcy5pZH0gd2l0aG91dCB0aGUgc2Vzc2lvbiBpZC4gSWRlbnRpZnlpbmcgdGhlIHNoYXJkIGluc3RlYWQuYClcblxuICAgICAgYXdhaXQgdGhpcy5pZGVudGlmeSgpXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICB0aGlzLnN0YXRlID0gU2hhcmRTdGF0ZS5SZXN1bWluZ1xuXG4gICAgLy8gQmVmb3JlIHdlIGNhbiByZXN1bWUsIHdlIG5lZWQgdG8gY3JlYXRlIGEgbmV3IGNvbm5lY3Rpb24gd2l0aCBEaXNjb3JkJ3MgZ2F0ZXdheS5cbiAgICBhd2FpdCB0aGlzLmNvbm5lY3QoKVxuXG4gICAgdGhpcy5sb2dnZXIuZGVidWcoYFtTaGFyZF0gUmVzdW1pbmcgU2hhcmQgIyR7dGhpcy5pZH0gY29ubmVjdGVkLiBTZXNzaW9uIGlkOiAke3RoaXMuc2Vzc2lvbklkfSB8IFNlcXVlbmNlOiAke3RoaXMucHJldmlvdXNTZXF1ZW5jZU51bWJlcn1gKVxuXG4gICAgdGhpcy5zZW5kKFxuICAgICAge1xuICAgICAgICBvcDogR2F0ZXdheU9wY29kZXMuUmVzdW1lLFxuICAgICAgICBkOiB7XG4gICAgICAgICAgdG9rZW46IGBCb3QgJHt0aGlzLmdhdGV3YXlDb25maWcudG9rZW59YCxcbiAgICAgICAgICBzZXNzaW9uX2lkOiB0aGlzLnNlc3Npb25JZCxcbiAgICAgICAgICBzZXE6IHRoaXMucHJldmlvdXNTZXF1ZW5jZU51bWJlciA/PyAwLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICAgIHRydWUsXG4gICAgKVxuXG4gICAgcmV0dXJuIGF3YWl0IG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgICB0aGlzLnJlc29sdmVzLnNldCgnUkVTVU1FRCcsICgpID0+IHJlc29sdmUoKSlcblxuICAgICAgLy8gSWYgaXQgaXMgYXR0ZW1wdGVkIHRvIHJlc3VtZSB3aXRoIGFuIGludmFsaWQgc2Vzc2lvbiBpZCwgRGlzY29yZCBzZW5kcyBhbiBpbnZhbGlkIHNlc3Npb24gcGF5bG9hZFxuICAgICAgLy8gTm90IGVycm9yaW5nIGhlcmUgc2luY2UgaXQgaXMgZWFzeSB0aGF0IHRoaXMgaGFwcGVucywgYWxzbyBpdCB3b3VsZCBiZSBub3QgY2F0Y2hhYmxlXG4gICAgICB0aGlzLnJlc29sdmVzLnNldCgnSU5WQUxJRF9TRVNTSU9OJywgKCkgPT4ge1xuICAgICAgICB0aGlzLnJlc29sdmVzLmRlbGV0ZSgnUkVTVU1FRCcpXG4gICAgICAgIHJlc29sdmUoKVxuICAgICAgfSlcbiAgICB9KVxuICB9XG5cbiAgLyoqXG4gICAqIFNlbmQgYSBtZXNzYWdlIHRvIERpc2NvcmQuXG4gICAqIEBwYXJhbSBoaWdoUHJpb3JpdHkgLSBXaGV0aGVyIHRoaXMgbWVzc2FnZSBzaG91bGQgYmUgc2VuZCBhc2FwLlxuICAgKi9cbiAgYXN5bmMgc2VuZChtZXNzYWdlOiBTaGFyZFNvY2tldFJlcXVlc3QsIGhpZ2hQcmlvcml0eTogYm9vbGVhbiA9IGZhbHNlKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgLy8gQmVmb3JlIGFjcXVpcmluZyBhIHRva2VuIGZyb20gdGhlIGJ1Y2tldCwgY2hlY2sgd2hldGhlciB0aGUgc2hhcmQgaXMgY3VycmVudGx5IG9mZmxpbmUgb3Igbm90LlxuICAgIC8vIEVsc2UgYnVja2V0IGFuZCB0b2tlbiB3YWl0IHRpbWUganVzdCBnZXQgd2FzdGVkLlxuICAgIGF3YWl0IHRoaXMuY2hlY2tPZmZsaW5lKGhpZ2hQcmlvcml0eSlcblxuICAgIGF3YWl0IHRoaXMuYnVja2V0LmFjcXVpcmUoaGlnaFByaW9yaXR5KVxuXG4gICAgLy8gSXQncyBwb3NzaWJsZSwgdGhhdCB0aGUgc2hhcmQgd2VudCBvZmZsaW5lIGFmdGVyIGEgdG9rZW4gaGFzIGJlZW4gYWNxdWlyZWQgZnJvbSB0aGUgYnVja2V0LlxuICAgIGF3YWl0IHRoaXMuY2hlY2tPZmZsaW5lKGhpZ2hQcmlvcml0eSlcblxuICAgIHRoaXMuc29ja2V0Py5zZW5kKEpTT04uc3RyaW5naWZ5KG1lc3NhZ2UpKVxuICB9XG5cbiAgLyoqIFNodXRkb3duIHRoZSB0aGlzLiBGb3JjZWZ1bGx5IGRpc2Nvbm5lY3QgdGhlIHNoYXJkIGZyb20gRGlzY29yZC4gVGhlIHNoYXJkIG1heSBub3QgYXR0ZW1wdCB0byByZWNvbm5lY3Qgd2l0aCBEaXNjb3JkLiAqL1xuICBhc3luYyBzaHV0ZG93bigpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBhd2FpdCB0aGlzLmNsb3NlKFNoYXJkU29ja2V0Q2xvc2VDb2Rlcy5TaHV0ZG93biwgJ1NoYXJkIHNodXR0aW5nIGRvd24uJylcbiAgICB0aGlzLnN0YXRlID0gU2hhcmRTdGF0ZS5PZmZsaW5lXG4gIH1cblxuICAvKiogSGFuZGxlIGEgZ2F0ZXdheSBjb25uZWN0aW9uIGVycm9yICovXG4gIGhhbmRsZUVycm9yKGVycm9yOiBFdmVudCk6IHZvaWQge1xuICAgIHRoaXMubG9nZ2VyLmVycm9yKGBbU2hhcmRdIFRoZXJlIHdhcyBhbiBlcnJvciBjb25uZWN0aW5nIFNoYXJkICMke3RoaXMuaWR9LmAsIGVycm9yKVxuICB9XG5cbiAgLyoqIEhhbmRsZSBhIGdhdGV3YXkgY29ubmVjdGlvbiBjbG9zZS4gKi9cbiAgYXN5bmMgaGFuZGxlQ2xvc2UoY2xvc2U6IENsb3NlRXZlbnQpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0aGlzLnNvY2tldCA9IHVuZGVmaW5lZFxuICAgIHRoaXMuc3RvcEhlYXJ0YmVhdGluZygpXG5cbiAgICAvLyBDbGVhciB0aGUgemxpYi96c3RkIGRhdGFcbiAgICB0aGlzLmluZmxhdGUgPSB1bmRlZmluZWRcbiAgICB0aGlzLnpzdGREZWNvbXByZXNzID0gdW5kZWZpbmVkXG4gICAgdGhpcy5pbmZsYXRlQnVmZmVyID0gbnVsbFxuICAgIHRoaXMuZGVjb21wcmVzc2lvblByb21pc2VzUXVldWUgPSBbXVxuXG4gICAgdGhpcy5sb2dnZXIuZGVidWcoYFtTaGFyZF0gU2hhcmQgIyR7dGhpcy5pZH0gY2xvc2VkIHdpdGggY29kZSAke2Nsb3NlLmNvZGV9JHtjbG9zZS5yZWFzb24gPyBgLCBhbmQgcmVhc29uOiAke2Nsb3NlLnJlYXNvbn1gIDogJyd9LmApXG5cbiAgICAvLyBSZXNvbHZlIHRoZSBjbG9zZSBwcm9taXNlIGlmIGl0IGV4aXN0c1xuICAgIHRoaXMucmVzb2x2ZUFmdGVyQ2xvc2U/LihjbG9zZSlcblxuICAgIHN3aXRjaCAoY2xvc2UuY29kZSkge1xuICAgICAgY2FzZSBTaGFyZFNvY2tldENsb3NlQ29kZXMuVGVzdGluZ0ZpbmlzaGVkOiB7XG4gICAgICAgIHRoaXMuc3RhdGUgPSBTaGFyZFN0YXRlLk9mZmxpbmVcbiAgICAgICAgdGhpcy5ldmVudHMuZGlzY29ubmVjdGVkPy4odGhpcylcblxuICAgICAgICByZXR1cm5cbiAgICAgIH1cbiAgICAgIC8vIE9uIHRoZXNlIGNvZGVzIGEgbWFudWFsIHN0YXJ0IHdpbGwgYmUgZG9uZS5cbiAgICAgIGNhc2UgU2hhcmRTb2NrZXRDbG9zZUNvZGVzLlNodXRkb3duOlxuICAgICAgY2FzZSBTaGFyZFNvY2tldENsb3NlQ29kZXMuUmVJZGVudGlmeWluZzpcbiAgICAgIGNhc2UgU2hhcmRTb2NrZXRDbG9zZUNvZGVzLlJlc2hhcmRlZDpcbiAgICAgIGNhc2UgU2hhcmRTb2NrZXRDbG9zZUNvZGVzLlJlc3VtZUNsb3NpbmdPbGRDb25uZWN0aW9uOiB7XG4gICAgICAgIHRoaXMuc3RhdGUgPSBTaGFyZFN0YXRlLkRpc2Nvbm5lY3RlZFxuICAgICAgICB0aGlzLmV2ZW50cy5kaXNjb25uZWN0ZWQ/Lih0aGlzKVxuXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuICAgICAgLy8gV2hlbiB0aGVzZSBjb2RlcyBhcmUgcmVjZWl2ZWQgc29tZXRoaW5nIHdlbnQgcmVhbGx5IHdyb25nLlxuICAgICAgLy8gT24gdGhvc2Ugd2UgY2Fubm90IHN0YXJ0IGEgcmVjb25uZWN0IGF0dGVtcHQuXG4gICAgICBjYXNlIEdhdGV3YXlDbG9zZUV2ZW50Q29kZXMuQXV0aGVudGljYXRpb25GYWlsZWQ6XG4gICAgICBjYXNlIEdhdGV3YXlDbG9zZUV2ZW50Q29kZXMuSW52YWxpZFNoYXJkOlxuICAgICAgY2FzZSBHYXRld2F5Q2xvc2VFdmVudENvZGVzLlNoYXJkaW5nUmVxdWlyZWQ6XG4gICAgICBjYXNlIEdhdGV3YXlDbG9zZUV2ZW50Q29kZXMuSW52YWxpZEFwaVZlcnNpb246XG4gICAgICBjYXNlIEdhdGV3YXlDbG9zZUV2ZW50Q29kZXMuSW52YWxpZEludGVudHM6XG4gICAgICBjYXNlIEdhdGV3YXlDbG9zZUV2ZW50Q29kZXMuRGlzYWxsb3dlZEludGVudHM6IHtcbiAgICAgICAgdGhpcy5zdGF0ZSA9IFNoYXJkU3RhdGUuT2ZmbGluZVxuICAgICAgICB0aGlzLmV2ZW50cy5kaXNjb25uZWN0ZWQ/Lih0aGlzKVxuXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihjbG9zZS5yZWFzb24gfHwgJ0Rpc2NvcmQgZ2F2ZSBubyByZWFzb24hIEdHISBZb3UgYnJva2UgRGlzY29yZCEnKVxuICAgICAgfVxuICAgICAgLy8gR2F0ZXdheSBjb25uZWN0aW9uIGNsb3NlcyB3aGljaCByZXF1aXJlIGEgbmV3IGlkZW50aWZ5LlxuICAgICAgY2FzZSBHYXRld2F5Q2xvc2VFdmVudENvZGVzLk5vdEF1dGhlbnRpY2F0ZWQ6XG4gICAgICBjYXNlIEdhdGV3YXlDbG9zZUV2ZW50Q29kZXMuSW52YWxpZFNlcTpcbiAgICAgIGNhc2UgR2F0ZXdheUNsb3NlRXZlbnRDb2Rlcy5TZXNzaW9uVGltZWRPdXQ6IHtcbiAgICAgICAgdGhpcy5sb2dnZXIuZGVidWcoYFtTaGFyZF0gU2hhcmQgIyR7dGhpcy5pZH0gY2xvc2VkIHJlcXVpcmluZyByZS1pZGVudGlmeS5gKVxuICAgICAgICB0aGlzLnN0YXRlID0gU2hhcmRTdGF0ZS5JZGVudGlmeWluZ1xuICAgICAgICB0aGlzLmV2ZW50cy5kaXNjb25uZWN0ZWQ/Lih0aGlzKVxuXG4gICAgICAgIGF3YWl0IHRoaXMuaWRlbnRpZnkoKVxuICAgICAgICByZXR1cm5cbiAgICAgIH1cbiAgICAgIC8vIE5PVEU6IFRoaXMgY2FzZSBtdXN0IGFsd2F5cyBiZSByaWdodCBhYm92ZSB0aGUgY2FzZXMgdGhhdCBydW5zIHdpdGggZGVmYXVsdCBjYXNlIGJlY2F1c2Ugb2YgaG93IHN3aXRjaCB3b3JrcyB3aGVuIHlvdSBkb24ndCBicmVhayAvIHJldHVybiwgbW9yZSBpbmZvIGJlbG93LlxuICAgICAgY2FzZSBHYXRld2F5Q2xvc2VFdmVudENvZGVzLk5vcm1hbENsb3N1cmU6XG4gICAgICBjYXNlIEdhdGV3YXlDbG9zZUV2ZW50Q29kZXMuR29pbmdBd2F5OiB7XG4gICAgICAgIC8vIElmIHRoZSBzaGFyZCBpcyBtYXJrZWQgYXMgZ29pbmdPZmZsaW5lLCBpdCBzdGF5cyBkaXNjb25uZWN0ZWQuXG4gICAgICAgIGlmICh0aGlzLmdvaW5nT2ZmbGluZSkge1xuICAgICAgICAgIHRoaXMuc3RhdGUgPSBTaGFyZFN0YXRlLkRpc2Nvbm5lY3RlZFxuICAgICAgICAgIHRoaXMuZXZlbnRzLmRpc2Nvbm5lY3RlZD8uKHRoaXMpXG5cbiAgICAgICAgICB0aGlzLmdvaW5nT2ZmbGluZSA9IGZhbHNlXG5cbiAgICAgICAgICByZXR1cm5cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIE90aGVyd2lzZSwgd2Ugd2FudCB0aGUgc2hhcmQgdG8gZ28gdGhyb3VnaCB0aGUgZGVmYXVsdCBjYXNlIHdoZXJlIGl0IGdldHMgcmVzdW1lZCwgYXMgaXQgbWlnaHQgYmUgYW4gdW5leHBlY3RlZCBjbG9zdXJlIGZyb20gRGlzY29yZCBvciBDbG91ZGZsYXJlIGZvciBleGFtcGxlLCBzbyB3ZSBkb24ndCB1c2UgYnJlYWsgLyByZXR1cm4gaGVyZS5cbiAgICAgIH1cbiAgICAgIC8vIEdhdGV3YXkgY29ubmVjdGlvbiBjbG9zZXMgb24gd2hpY2ggYSByZXN1bWUgaXMgYWxsb3dlZC5cbiAgICAgIGNhc2UgR2F0ZXdheUNsb3NlRXZlbnRDb2Rlcy5Vbmtub3duRXJyb3I6XG4gICAgICBjYXNlIEdhdGV3YXlDbG9zZUV2ZW50Q29kZXMuVW5rbm93bk9wY29kZTpcbiAgICAgIGNhc2UgR2F0ZXdheUNsb3NlRXZlbnRDb2Rlcy5EZWNvZGVFcnJvcjpcbiAgICAgIGNhc2UgR2F0ZXdheUNsb3NlRXZlbnRDb2Rlcy5SYXRlTGltaXRlZDpcbiAgICAgIGNhc2UgR2F0ZXdheUNsb3NlRXZlbnRDb2Rlcy5BbHJlYWR5QXV0aGVudGljYXRlZDpcbiAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgLy8gV2UgZG9uJ3Qgd2FudCB0byBnZXQgaW50byBhbiBpbmZpbml0ZSBsb29wIHdoZXJlIHdlIHJlc3VtZSBmb3JldmVyLCBzbyBpZiB3ZSB3ZXJlIGFscmVhZHkgcmVzdW1pbmcgd2UgaWRlbnRpZnkgaW5zdGVhZFxuICAgICAgICB0aGlzLnN0YXRlID0gdGhpcy5zdGF0ZSA9PT0gU2hhcmRTdGF0ZS5SZXN1bWluZyA/IFNoYXJkU3RhdGUuSWRlbnRpZnlpbmcgOiBTaGFyZFN0YXRlLlJlc3VtaW5nXG4gICAgICAgIHRoaXMuZXZlbnRzLmRpc2Nvbm5lY3RlZD8uKHRoaXMpXG5cbiAgICAgICAgaWYgKHRoaXMuc3RhdGUgPT09IFNoYXJkU3RhdGUuUmVzdW1pbmcpIHtcbiAgICAgICAgICBhd2FpdCB0aGlzLnJlc3VtZSgpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgYXdhaXQgdGhpcy5pZGVudGlmeSgpXG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm5cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKiogSGFuZGxlIGFuIGluY29taW5nIGdhdGV3YXkgbWVzc2FnZS4gKi9cbiAgYXN5bmMgaGFuZGxlTWVzc2FnZShtZXNzYWdlOiBNZXNzYWdlRXZlbnQpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAvLyBUaGUgd3MgbnBtIHBhY2thZ2Ugd2lsbCB1c2UgYSBCdWZmZXIsIHdoaWxlIHRoZSBnbG9iYWwgYnVpbHQtaW4gd2lsbCB1c2UgQXJyYXlCdWZmZXJcbiAgICBjb25zdCBpc0NvbXByZXNzZWQgPSBtZXNzYWdlLmRhdGEgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlciB8fCBtZXNzYWdlLmRhdGEgaW5zdGFuY2VvZiBCdWZmZXJcblxuICAgIGNvbnN0IGRhdGEgPSBpc0NvbXByZXNzZWQgPyBhd2FpdCB0aGlzLmRlY29tcHJlc3NQYWNrZXQobWVzc2FnZS5kYXRhKSA6IChKU09OLnBhcnNlKG1lc3NhZ2UuZGF0YSkgYXMgRGlzY29yZEdhdGV3YXlQYXlsb2FkKVxuXG4gICAgLy8gQ2hlY2sgaWYgdGhlIGRlY29tcHJlc3Npb24gd2FzIG5vdCBzdWNjZXNzZnVsXG4gICAgaWYgKCFkYXRhKSByZXR1cm5cblxuICAgIGF3YWl0IHRoaXMuaGFuZGxlRGlzY29yZFBhY2tldChkYXRhKVxuICB9XG5cbiAgLyoqXG4gICAqIERlY29tcHJlc3MgYSB6bGliL3pzdGQgY29tcHJlc3NlZCBwYWNrZXRcbiAgICpcbiAgICogQHByaXZhdGVcbiAgICovXG4gIGFzeW5jIGRlY29tcHJlc3NQYWNrZXQoZGF0YTogQXJyYXlCdWZmZXIgfCBCdWZmZXIpOiBQcm9taXNlPERpc2NvcmRHYXRld2F5UGF5bG9hZCB8IG51bGw+IHtcbiAgICAvLyBBIGJ1ZmZlciBpcyBhIFVpbnQ4QXJyYXkgdW5kZXIgdGhlIGhvb2QuIEFuIEFycmF5QnVmZmVyIGlzIGdlbmVyaWMsIHNvIHdlIG5lZWQgdG8gY3JlYXRlIHRoZSBVaW50OEFycmF5IHRoYXQgdXNlcyB0aGUgd2hvbGUgQXJyYXlCdWZmZXJcbiAgICBjb25zdCBjb21wcmVzc2VkRGF0YTogVWludDhBcnJheSA9IGRhdGEgaW5zdGFuY2VvZiBCdWZmZXIgPyBkYXRhIDogbmV3IFVpbnQ4QXJyYXkoZGF0YSlcblxuICAgIGlmICh0aGlzLmdhdGV3YXlDb25maWcudHJhbnNwb3J0Q29tcHJlc3Npb24gPT09IFRyYW5zcG9ydENvbXByZXNzaW9uLnpsaWIpIHtcbiAgICAgIGlmICghdGhpcy5pbmZsYXRlKSB7XG4gICAgICAgIHRoaXMubG9nZ2VyLmZhdGFsKCdbU2hhcmRdIHpsaWItc3RyZWFtIHRyYW5zcG9ydCBjb21wcmVzc2lvbiB3YXMgZW5hYmxlZCBidXQgbm8gaW5zdGFuY2Ugb2YgSW5mbGF0ZSB3YXMgZm91bmQuJylcbiAgICAgICAgcmV0dXJuIG51bGxcbiAgICAgIH1cblxuICAgICAgLy8gQWxpYXMsIHVzZWQgdG8gYXZvaWQgc29tZSBudWxsIGNoZWNrcyBpbiB0aGUgUHJvbWlzZSBjb25zdHJ1Y3RvclxuICAgICAgY29uc3QgaW5mbGF0ZSA9IHRoaXMuaW5mbGF0ZVxuXG4gICAgICBjb25zdCB3cml0ZVByb21pc2UgPSBuZXcgUHJvbWlzZTx2b2lkPigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgIGluZmxhdGUud3JpdGUoY29tcHJlc3NlZERhdGEsICdiaW5hcnknLCAoZXJyb3IpID0+IChlcnJvciA/IHJlamVjdChlcnJvcikgOiByZXNvbHZlKCkpKVxuICAgICAgfSlcblxuICAgICAgaWYgKCFlbmRzV2l0aE1hcmtlcihjb21wcmVzc2VkRGF0YSwgWkxJQl9TWU5DX0ZMVVNIKSkgcmV0dXJuIG51bGxcblxuICAgICAgYXdhaXQgd3JpdGVQcm9taXNlXG5cbiAgICAgIGlmICghdGhpcy5pbmZsYXRlQnVmZmVyKSB7XG4gICAgICAgIHRoaXMubG9nZ2VyLndhcm4oJ1tTaGFyZF0gVGhlIFpMaWIgaW5mbGF0ZSBidWZmZXIgd2FzIGNsZWFyZWQgYXQgYW4gdW5leHBlY3RlZCBtb21lbnQuJylcbiAgICAgICAgcmV0dXJuIG51bGxcbiAgICAgIH1cblxuICAgICAgY29uc3QgZGVjb2RlZERhdGEgPSB0aGlzLnRleHREZWNvZGVyLmRlY29kZSh0aGlzLmluZmxhdGVCdWZmZXIpXG4gICAgICB0aGlzLmluZmxhdGVCdWZmZXIgPSBudWxsXG5cbiAgICAgIHJldHVybiBKU09OLnBhcnNlKGRlY29kZWREYXRhKVxuICAgIH1cblxuICAgIGlmICh0aGlzLmdhdGV3YXlDb25maWcudHJhbnNwb3J0Q29tcHJlc3Npb24gPT09IFRyYW5zcG9ydENvbXByZXNzaW9uLnpzdGQpIHtcbiAgICAgIGlmICh0aGlzLnpzdGREZWNvbXByZXNzKSB7XG4gICAgICAgIHRoaXMuenN0ZERlY29tcHJlc3MucHVzaChjb21wcmVzc2VkRGF0YSlcblxuICAgICAgICBjb25zdCBkZWNvbXByZXNzaW9uUHJvbWlzZSA9IG5ldyBQcm9taXNlPERpc2NvcmRHYXRld2F5UGF5bG9hZD4oKHIpID0+IHRoaXMuZGVjb21wcmVzc2lvblByb21pc2VzUXVldWUucHVzaChyKSlcbiAgICAgICAgcmV0dXJuIGF3YWl0IGRlY29tcHJlc3Npb25Qcm9taXNlXG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLmluZmxhdGUpIHtcbiAgICAgICAgLy8gQWxpYXMsIHVzZWQgdG8gYXZvaWQgc29tZSBudWxsIGNoZWNrcyBpbiB0aGUgUHJvbWlzZSBjb25zdHJ1Y3RvclxuICAgICAgICBjb25zdCBkZWNvbXByZXNzID0gdGhpcy5pbmZsYXRlXG5cbiAgICAgICAgY29uc3Qgd3JpdGVQcm9taXNlID0gbmV3IFByb21pc2U8dm9pZD4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAgIGRlY29tcHJlc3Mud3JpdGUoY29tcHJlc3NlZERhdGEsICdiaW5hcnknLCAoZXJyb3IpID0+IChlcnJvciA/IHJlamVjdChlcnJvcikgOiByZXNvbHZlKCkpKVxuICAgICAgICB9KVxuXG4gICAgICAgIGF3YWl0IHdyaXRlUHJvbWlzZVxuXG4gICAgICAgIGlmICghdGhpcy5pbmZsYXRlQnVmZmVyKSB7XG4gICAgICAgICAgdGhpcy5sb2dnZXIud2FybignW1NoYXJkXSBUaGUgWkxpYiBpbmZsYXRlIGJ1ZmZlciB3YXMgY2xlYXJlZCBhdCBhbiB1bmV4cGVjdGVkIG1vbWVudC4nKVxuICAgICAgICAgIHJldHVybiBudWxsXG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBkZWNvZGVkRGF0YSA9IHRoaXMudGV4dERlY29kZXIuZGVjb2RlKHRoaXMuaW5mbGF0ZUJ1ZmZlcilcbiAgICAgICAgdGhpcy5pbmZsYXRlQnVmZmVyID0gbnVsbFxuXG4gICAgICAgIHJldHVybiBKU09OLnBhcnNlKGRlY29kZWREYXRhKVxuICAgICAgfVxuXG4gICAgICB0aGlzLmxvZ2dlci5mYXRhbCgnW1NoYXJkXSB6c3RkLXN0cmVhbSB0cmFuc3BvcnQgY29tcHJlc3Npb24gd2FzIGVuYWJsZWQgYnV0IG5vIHpzdGQgZGVjb21wcmVzc29yIHdhcyBmb3VuZC4nKVxuICAgICAgcmV0dXJuIG51bGxcbiAgICB9XG5cbiAgICBpZiAodGhpcy5nYXRld2F5Q29uZmlnLmNvbXByZXNzKSB7XG4gICAgICBjb25zdCBkZWNvbXByZXNzZWQgPSB6bGliLmluZmxhdGVTeW5jKGNvbXByZXNzZWREYXRhKVxuICAgICAgY29uc3QgZGVjb2RlZERhdGEgPSB0aGlzLnRleHREZWNvZGVyLmRlY29kZShkZWNvbXByZXNzZWQpXG5cbiAgICAgIHJldHVybiBKU09OLnBhcnNlKGRlY29kZWREYXRhKVxuICAgIH1cblxuICAgIHJldHVybiBudWxsXG4gIH1cblxuICAvKiogSGFuZGxlcyBhIGluY29taW5nIGdhdGV3YXkgcGFja2V0LiAqL1xuICBhc3luYyBoYW5kbGVEaXNjb3JkUGFja2V0KHBhY2tldDogRGlzY29yZEdhdGV3YXlQYXlsb2FkKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgLy8gRWRnZSBjYXNlIHN0YXJ0OiBodHRwczovL2dpdGh1Yi5jb20vZGlzY29yZGVuby9kaXNjb3JkZW5vL2lzc3Vlcy8yMzExXG4gICAgdGhpcy5oZWFydC5sYXN0QWNrID0gRGF0ZS5ub3coKVxuICAgIHRoaXMuaGVhcnQuYWNrbm93bGVkZ2VkID0gdHJ1ZVxuICAgIC8vIEVkZ2UgY2FzZSBlbmQhXG5cbiAgICBzd2l0Y2ggKHBhY2tldC5vcCkge1xuICAgICAgY2FzZSBHYXRld2F5T3Bjb2Rlcy5IZWFydGJlYXQ6IHtcbiAgICAgICAgaWYgKCF0aGlzLmlzT3BlbigpKSByZXR1cm5cblxuICAgICAgICB0aGlzLmhlYXJ0Lmxhc3RCZWF0ID0gRGF0ZS5ub3coKVxuICAgICAgICAvLyBEaXNjb3JkIHJhbmRvbWx5IHNlbmRzIHRoaXMgcmVxdWlyaW5nIGFuIGltbWVkaWF0ZSBoZWFydGJlYXQgYmFjay5cbiAgICAgICAgLy8gVXNpbmcgYSBkaXJlY3Qgc29ja2V0LnNlbmQgY2FsbCBoZXJlIGJlY2F1c2UgaGVhcnRiZWF0IHJlcXVlc3RzIGFyZSByZXNlcnZlZCBieSB1cy5cbiAgICAgICAgdGhpcy5zb2NrZXQ/LnNlbmQoXG4gICAgICAgICAgSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgICAgICAgb3A6IEdhdGV3YXlPcGNvZGVzLkhlYXJ0YmVhdCxcbiAgICAgICAgICAgIGQ6IHRoaXMucHJldmlvdXNTZXF1ZW5jZU51bWJlcixcbiAgICAgICAgICB9KSxcbiAgICAgICAgKVxuICAgICAgICB0aGlzLmV2ZW50cy5oZWFydGJlYXQ/Lih0aGlzKVxuXG4gICAgICAgIGJyZWFrXG4gICAgICB9XG4gICAgICBjYXNlIEdhdGV3YXlPcGNvZGVzLkhlbGxvOiB7XG4gICAgICAgIGNvbnN0IGludGVydmFsID0gKHBhY2tldC5kIGFzIERpc2NvcmRIZWxsbykuaGVhcnRiZWF0X2ludGVydmFsXG4gICAgICAgIHRoaXMubG9nZ2VyLmRlYnVnKGBbU2hhcmRdIFNoYXJkICMke3RoaXMuaWR9IHJlY2VpdmVkIEhlbGxvYClcbiAgICAgICAgdGhpcy5zdGFydEhlYXJ0YmVhdGluZyhpbnRlcnZhbClcblxuICAgICAgICBpZiAodGhpcy5zdGF0ZSAhPT0gU2hhcmRTdGF0ZS5SZXN1bWluZykge1xuICAgICAgICAgIGNvbnN0IGN1cnJlbnRRdWV1ZSA9IFsuLi50aGlzLmJ1Y2tldC5xdWV1ZV1cbiAgICAgICAgICAvLyBIRUxMTyBoYXMgYmVlbiBzZW5kIG9uIGEgbm9uIHJlc3VtZSBhY3Rpb24uXG4gICAgICAgICAgLy8gVGhpcyBtZWFucyB0aGF0IHRoZSBzaGFyZCBzdGFydHMgYSBuZXcgc2Vzc2lvbixcbiAgICAgICAgICAvLyB0aGVyZWZvcmUgdGhlIHJhdGUgbGltaXQgaW50ZXJ2YWwgaGFzIGJlZW4gcmVzZXQgdG9vLlxuICAgICAgICAgIHRoaXMuYnVja2V0ID0gbmV3IExlYWt5QnVja2V0KHtcbiAgICAgICAgICAgIG1heDogdGhpcy5jYWxjdWxhdGVTYWZlUmVxdWVzdHMoKSxcbiAgICAgICAgICAgIHJlZmlsbEludGVydmFsOiA2MDAwMCxcbiAgICAgICAgICAgIHJlZmlsbEFtb3VudDogdGhpcy5jYWxjdWxhdGVTYWZlUmVxdWVzdHMoKSxcbiAgICAgICAgICAgIGxvZ2dlcjogdGhpcy5sb2dnZXIsXG4gICAgICAgICAgfSlcblxuICAgICAgICAgIC8vIFF1ZXVlIHNob3VsZCBub3QgYmUgbG9zdCBvbiBhIHJlLWlkZW50aWZ5LlxuICAgICAgICAgIHRoaXMuYnVja2V0LnF1ZXVlLnVuc2hpZnQoLi4uY3VycmVudFF1ZXVlKVxuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5ldmVudHMuaGVsbG8/Lih0aGlzKVxuXG4gICAgICAgIGJyZWFrXG4gICAgICB9XG4gICAgICBjYXNlIEdhdGV3YXlPcGNvZGVzLkhlYXJ0YmVhdEFDSzoge1xuICAgICAgICAvLyBNYW51YWxseSBjYWxjdWxhdGluZyB0aGUgcm91bmQgdHJpcCB0aW1lIGZvciB1c2VycyB3aG8gbmVlZCBpdC5cbiAgICAgICAgaWYgKHRoaXMuaGVhcnQubGFzdEJlYXQpIHtcbiAgICAgICAgICB0aGlzLmhlYXJ0LnJ0dCA9IHRoaXMuaGVhcnQubGFzdEFjayAtIHRoaXMuaGVhcnQubGFzdEJlYXRcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuZXZlbnRzLmhlYXJ0YmVhdEFjaz8uKHRoaXMpXG5cbiAgICAgICAgYnJlYWtcbiAgICAgIH1cbiAgICAgIGNhc2UgR2F0ZXdheU9wY29kZXMuUmVjb25uZWN0OiB7XG4gICAgICAgIHRoaXMubG9nZ2VyLmRlYnVnKGBbU2hhcmRdIFJlY2VpdmVkIGEgUmVjb25uZWN0IGZvciBTaGFyZCAjJHt0aGlzLmlkfWApXG4gICAgICAgIHRoaXMuZXZlbnRzLnJlcXVlc3RlZFJlY29ubmVjdD8uKHRoaXMpXG5cbiAgICAgICAgYXdhaXQgdGhpcy5yZXN1bWUoKVxuXG4gICAgICAgIGJyZWFrXG4gICAgICB9XG4gICAgICBjYXNlIEdhdGV3YXlPcGNvZGVzLkludmFsaWRTZXNzaW9uOiB7XG4gICAgICAgIGNvbnN0IHJlc3VtYWJsZSA9IHBhY2tldC5kIGFzIGJvb2xlYW5cbiAgICAgICAgdGhpcy5sb2dnZXIuZGVidWcoYFtTaGFyZF0gUmVjZWl2ZWQgSW52YWxpZCBTZXNzaW9uIGZvciBTaGFyZCAjJHt0aGlzLmlkfSB3aXRoIHJlc3VtYWJsZSBhcyAke3Jlc3VtYWJsZX1gKVxuXG4gICAgICAgIHRoaXMuZXZlbnRzLmludmFsaWRTZXNzaW9uPy4odGhpcywgcmVzdW1hYmxlKVxuXG4gICAgICAgIC8vIFdlIG5lZWQgdG8gd2FpdCBmb3IgYSByYW5kb20gYW1vdW50IG9mIHRpbWUgYmV0d2VlbiAxIGFuZCA1XG4gICAgICAgIC8vIFJlZmVyZW5jZTogaHR0cHM6Ly9kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL2RvY3MvdG9waWNzL2dhdGV3YXkjcmVzdW1pbmdcbiAgICAgICAgYXdhaXQgZGVsYXkoTWF0aC5mbG9vcigoTWF0aC5yYW5kb20oKSAqIDQgKyAxKSAqIDEwMDApKVxuXG4gICAgICAgIHRoaXMucmVzb2x2ZXMuZ2V0KCdJTlZBTElEX1NFU1NJT04nKT8uKHBhY2tldClcbiAgICAgICAgdGhpcy5yZXNvbHZlcy5kZWxldGUoJ0lOVkFMSURfU0VTU0lPTicpXG5cbiAgICAgICAgLy8gV2hlbiByZXN1bWFibGUgaXMgZmFsc2Ugd2UgbmVlZCB0byByZS1pZGVudGlmeVxuICAgICAgICBpZiAoIXJlc3VtYWJsZSkge1xuICAgICAgICAgIGF3YWl0IHRoaXMuaWRlbnRpZnkoKVxuXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFRoZSBzZXNzaW9uIGlzIGludmFsaWQgYnV0IGFwcGFyZW50bHkgaXQgaXMgcmVzdW1hYmxlXG4gICAgICAgIGF3YWl0IHRoaXMucmVzdW1lKClcblxuICAgICAgICBicmVha1xuICAgICAgfVxuICAgIH1cblxuICAgIHN3aXRjaCAocGFja2V0LnQpIHtcbiAgICAgIGNhc2UgJ1JFU1VNRUQnOlxuICAgICAgICB0aGlzLnN0YXRlID0gU2hhcmRTdGF0ZS5Db25uZWN0ZWRcbiAgICAgICAgdGhpcy5ldmVudHMucmVzdW1lZD8uKHRoaXMpXG5cbiAgICAgICAgdGhpcy5sb2dnZXIuZGVidWcoYFtTaGFyZF0gU2hhcmQgIyR7dGhpcy5pZH0gcmVjZWl2ZWQgUkVTVU1FRGApXG5cbiAgICAgICAgLy8gQ29udGludWUgdGhlIHJlcXVlc3RzIHdoaWNoIGhhdmUgYmVlbiBxdWV1ZWQgc2luY2UgdGhlIHNoYXJkIHdlbnQgb2ZmbGluZS5cbiAgICAgICAgdGhpcy5vZmZsaW5lU2VuZFF1ZXVlLmZvckVhY2goKHJlc29sdmUpID0+IHJlc29sdmUoKSlcbiAgICAgICAgLy8gU2V0dGluZyB0aGUgbGVuZ3RoIHRvIDAgd2lsbCBkZWxldGUgdGhlIGVsZW1lbnRzIGluIGl0XG4gICAgICAgIHRoaXMub2ZmbGluZVNlbmRRdWV1ZS5sZW5ndGggPSAwXG5cbiAgICAgICAgdGhpcy5yZXNvbHZlcy5nZXQoJ1JFU1VNRUQnKT8uKHBhY2tldClcbiAgICAgICAgdGhpcy5yZXNvbHZlcy5kZWxldGUoJ1JFU1VNRUQnKVxuICAgICAgICBicmVha1xuICAgICAgY2FzZSAnUkVBRFknOiB7XG4gICAgICAgIGNvbnN0IHBheWxvYWQgPSBwYWNrZXQuZCBhcyBEaXNjb3JkUmVhZHlcbiAgICAgICAgdGhpcy5ldmVudHMucmVhZHk/Lih0aGlzKVxuXG4gICAgICAgIC8vIEltcG9ydGFudCBmb3IgZnV0dXJlIHJlc3VtZXMuXG4gICAgICAgIHRoaXMucmVzdW1lR2F0ZXdheVVybCA9IHBheWxvYWQucmVzdW1lX2dhdGV3YXlfdXJsXG4gICAgICAgIHRoaXMuc2Vzc2lvbklkID0gcGF5bG9hZC5zZXNzaW9uX2lkXG5cbiAgICAgICAgdGhpcy5zdGF0ZSA9IFNoYXJkU3RhdGUuQ29ubmVjdGVkXG5cbiAgICAgICAgdGhpcy5sb2dnZXIuZGVidWcoYFtTaGFyZF0gU2hhcmQgIyR7dGhpcy5pZH0gcmVjZWl2ZWQgUkVBRFlgKVxuXG4gICAgICAgIC8vIENvbnRpbnVlIHRoZSByZXF1ZXN0cyB3aGljaCBoYXZlIGJlZW4gcXVldWVkIHNpbmNlIHRoZSBzaGFyZCB3ZW50IG9mZmxpbmUuXG4gICAgICAgIC8vIEltcG9ydGFudCB3aGVuIHRoaXMgaXMgYSByZS1pZGVudGlmeVxuICAgICAgICB0aGlzLm9mZmxpbmVTZW5kUXVldWUuZm9yRWFjaCgocmVzb2x2ZSkgPT4gcmVzb2x2ZSgpKVxuICAgICAgICAvLyBTZXR0aW5nIHRoZSBsZW5ndGggdG8gMCB3aWxsIGRlbGV0ZSB0aGUgZWxlbWVudHMgaW4gaXRcbiAgICAgICAgdGhpcy5vZmZsaW5lU2VuZFF1ZXVlLmxlbmd0aCA9IDBcblxuICAgICAgICB0aGlzLnJlc29sdmVzLmdldCgnUkVBRFknKT8uKHBhY2tldClcbiAgICAgICAgdGhpcy5yZXNvbHZlcy5kZWxldGUoJ1JFQURZJylcbiAgICAgICAgYnJlYWtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBVcGRhdGUgdGhlIHNlcXVlbmNlIG51bWJlciBpZiBpdCBpcyBwcmVzZW50XG4gICAgLy8gYHNgIGNhbiBiZSBlaXRoZXIgYG51bGxgIG9yIGEgYG51bWJlcmAuXG4gICAgLy8gSW4gb3JkZXIgdG8gcHJldmVudCB1cGRhdGUgbWlzc2VzIHdoZW4gYHNgIGlzIGAwYCB3ZSBjaGVjayBhZ2FpbnN0IG51bGwuXG4gICAgaWYgKHBhY2tldC5zICE9PSBudWxsKSB7XG4gICAgICB0aGlzLnByZXZpb3VzU2VxdWVuY2VOdW1iZXIgPSBwYWNrZXQuc1xuICAgIH1cblxuICAgIHRoaXMuZm9yd2FyZFRvQm90KHBhY2tldClcbiAgfVxuXG4gIGZvcndhcmRUb0JvdChwYWNrZXQ6IERpc2NvcmRHYXRld2F5UGF5bG9hZCk6IHZvaWQge1xuICAgIC8vIFRoZSBuZWNlc3NhcnkgaGFuZGxpbmcgcmVxdWlyZWQgZm9yIHRoZSBTaGFyZHMgY29ubmVjdGlvbiBoYXMgYmVlbiBmaW5pc2hlZC5cbiAgICAvLyBOb3cgdGhlIGV2ZW50IGNhbiBiZSBzYWZlbHkgZm9yd2FyZGVkLlxuICAgIHRoaXMuZXZlbnRzLm1lc3NhZ2U/Lih0aGlzLCBjYW1lbGl6ZShwYWNrZXQpKVxuICB9XG5cbiAgLyoqXG4gICAqIE92ZXJyaWRlIGluIG9yZGVyIHRvIG1ha2UgdGhlIHNoYXJkcyBwcmVzZW5jZS5cbiAgICogYXN5bmMgaW4gY2FzZSBkZXZzIGNyZWF0ZSB0aGUgcHJlc2VuY2UgYmFzZWQgb24gZWcuIGRhdGFiYXNlIHZhbHVlcy5cbiAgICogUGFzc2luZyB0aGUgc2hhcmQncyBpZCB0aGVyZSB0byBtYWtlIGl0IGVhc2llciBmb3IgdGhlIGRldiB0byB1c2UgdGhpcyBmdW5jdGlvbi5cbiAgICovXG4gIGFzeW5jIG1ha2VQcmVzZW5jZSgpOiBQcm9taXNlPERpc2NvcmRVcGRhdGVQcmVzZW5jZSB8IHVuZGVmaW5lZD4ge1xuICAgIHJldHVyblxuICB9XG5cbiAgLyoqXG4gICAqIFRoaXMgZnVuY3Rpb24gY29tbXVuaWNhdGVzIHdpdGggdGhlIG1hbmFnZW1lbnQgcHJvY2VzcywgaW4gb3JkZXIgdG8ga25vdyB3aGV0aGVyIGl0cyBmcmVlIHRvIGlkZW50aWZ5LlxuICAgKiBXaGVuIHRoaXMgZnVuY3Rpb24gcmVzb2x2ZXMsIHRoaXMgbWVhbnMgdGhhdCB0aGUgc2hhcmQgaXMgYWxsb3dlZCB0byBzZW5kIGFuIGlkZW50aWZ5IHBheWxvYWQgdG8gZGlzY29yZC5cbiAgICovXG4gIGFzeW5jIHJlcXVlc3RJZGVudGlmeSgpOiBQcm9taXNlPHZvaWQ+IHt9XG5cbiAgLyoqIFN0YXJ0IHNlbmRpbmcgaGVhcnRiZWF0IHBheWxvYWRzIHRvIERpc2NvcmQgaW4gdGhlIHByb3ZpZGVkIGludGVydmFsLiAqL1xuICBzdGFydEhlYXJ0YmVhdGluZyhpbnRlcnZhbDogbnVtYmVyKTogdm9pZCB7XG4gICAgdGhpcy5sb2dnZXIuZGVidWcoYFtTaGFyZF0gU3RhcnQgaGVhcnRiZWF0aW5nIG9uIFNoYXJkICMke3RoaXMuaWR9YClcblxuICAgIC8vIElmIG9sZCBoZWFydGJlYXN0IGV4aXN0IGxpa2UgYWZ0ZXIgcmVzdW1lLCBjbGVhciB0aGUgb2xkIG9uZXMuXG4gICAgdGhpcy5zdG9wSGVhcnRiZWF0aW5nKClcblxuICAgIHRoaXMuaGVhcnQuaW50ZXJ2YWwgPSBpbnRlcnZhbFxuXG4gICAgLy8gT25seSBzZXQgdGhlIHNoYXJkJ3Mgc3RhdGUgdG8gYFVuaWRlbnRpZmllZGBcbiAgICAvLyBpZiBoZWFydGJlYXRpbmcgaGFzIG5vdCBiZWVuIHN0YXJ0ZWQgZHVlIHRvIGFuIGlkZW50aWZ5IG9yIHJlc3VtZSBhY3Rpb24uXG4gICAgaWYgKFtTaGFyZFN0YXRlLkRpc2Nvbm5lY3RlZCwgU2hhcmRTdGF0ZS5PZmZsaW5lXS5pbmNsdWRlcyh0aGlzLnN0YXRlKSkge1xuICAgICAgdGhpcy5sb2dnZXIuZGVidWcoYFtTaGFyZF0gU2hhcmQgaXMgZGlzY29ubmVjdGVkIG9yIG9mZmxpbmUgYnV0IHRoZSBoZWFydGJlYXQgd2FzIHN0YXJ0ZWQgIyR7dGhpcy5pZH1gKVxuICAgICAgdGhpcy5zdGF0ZSA9IFNoYXJkU3RhdGUuVW5pZGVudGlmaWVkXG4gICAgfVxuXG4gICAgLy8gVGhlIGZpcnN0IGhlYXJ0YmVhdCBuZWVkcyB0byBiZSBzZW5kIHdpdGggYSByYW5kb20gZGVsYXkgYmV0d2VlbiBgMGAgYW5kIGBpbnRlcnZhbGBcbiAgICAvLyBVc2luZyBhIGBzZXRUaW1lb3V0KF8sIGppdHRlcilgIGhlcmUgdG8gYWNjb21wbGlzaCB0aGF0LlxuICAgIC8vIGBNYXRoLnJhbmRvbSgpYCBjYW4gYmUgYDBgIHNvIHdlIHVzZSBgMC41YCBpZiB0aGlzIGhhcHBlbnNcbiAgICAvLyBSZWZlcmVuY2U6IGh0dHBzOi8vZGlzY29yZC5jb20vZGV2ZWxvcGVycy9kb2NzL3RvcGljcy9nYXRld2F5I2hlYXJ0YmVhdGluZ1xuICAgIGNvbnN0IGppdHRlciA9IE1hdGguY2VpbCh0aGlzLmhlYXJ0LmludGVydmFsICogKE1hdGgucmFuZG9tKCkgfHwgMC41KSlcblxuICAgIHRoaXMuaGVhcnQudGltZW91dElkID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLmxvZ2dlci5kZWJ1ZyhgW1NoYXJkXSBCZWdpbm5pbmcgaGVhcnRiZWF0aW5nIHByb2Nlc3MgZm9yIFNoYXJkICMke3RoaXMuaWR9YClcblxuICAgICAgaWYgKCF0aGlzLmlzT3BlbigpKSByZXR1cm5cblxuICAgICAgdGhpcy5sb2dnZXIuZGVidWcoYFtTaGFyZF0gSGVhcnRiZWF0aW5nIG9uIFNoYXJkICMke3RoaXMuaWR9LiBQcmV2aW91cyBzZXF1ZW5jZSBudW1iZXI6ICR7dGhpcy5wcmV2aW91c1NlcXVlbmNlTnVtYmVyfWApXG5cbiAgICAgIC8vIFVzaW5nIGEgZGlyZWN0IHNvY2tldC5zZW5kIGNhbGwgaGVyZSBiZWNhdXNlIGhlYXJ0YmVhdCByZXF1ZXN0cyBhcmUgcmVzZXJ2ZWQgYnkgdXMuXG4gICAgICB0aGlzLnNvY2tldD8uc2VuZChcbiAgICAgICAgSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgICAgIG9wOiBHYXRld2F5T3Bjb2Rlcy5IZWFydGJlYXQsXG4gICAgICAgICAgZDogdGhpcy5wcmV2aW91c1NlcXVlbmNlTnVtYmVyLFxuICAgICAgICB9KSxcbiAgICAgIClcblxuICAgICAgdGhpcy5oZWFydC5sYXN0QmVhdCA9IERhdGUubm93KClcbiAgICAgIHRoaXMuaGVhcnQuYWNrbm93bGVkZ2VkID0gZmFsc2VcblxuICAgICAgLy8gQWZ0ZXIgdGhlIHJhbmRvbSBoZWFydGJlYXQgaml0dGVyIHdlIGNhbiBzdGFydCBhIG5vcm1hbCBpbnRlcnZhbC5cbiAgICAgIHRoaXMuaGVhcnQuaW50ZXJ2YWxJZCA9IHNldEludGVydmFsKGFzeW5jICgpID0+IHtcbiAgICAgICAgaWYgKCF0aGlzLmlzT3BlbigpKSB7XG4gICAgICAgICAgdGhpcy5sb2dnZXIuZGVidWcoYFtTaGFyZF0gU2hhcmQgIyR7dGhpcy5pZH0gaXMgbm90IG9wZW4sIGJ1dCBhdHRlbXB0ZWQgaGVhcnRiZWF0LCBpZ25vcmluZy5gKVxuICAgICAgICAgIHJldHVyblxuICAgICAgICB9XG5cbiAgICAgICAgLy8gVGhlIFNoYXJkIGRpZCBub3QgcmVjZWl2ZSBhIGhlYXJ0YmVhdCBBQ0sgZnJvbSBEaXNjb3JkIGluIHRpbWUsXG4gICAgICAgIC8vIHRoZXJlZm9yZSB3ZSBoYXZlIHRvIGFzc3VtZSB0aGF0IHRoZSBjb25uZWN0aW9uIGhhcyBmYWlsZWQgb3IgZ290IFwiem9tYmllZFwiLlxuICAgICAgICAvLyBUaGUgU2hhcmQgbmVlZHMgdG8gc3RhcnQgYSByZS1pZGVudGlmeSBhY3Rpb24gYWNjb3JkaW5nbHkuXG4gICAgICAgIC8vIFJlZmVyZW5jZTogaHR0cHM6Ly9kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL2RvY3MvdG9waWNzL2dhdGV3YXkjaGVhcnRiZWF0aW5nLWV4YW1wbGUtZ2F0ZXdheS1oZWFydGJlYXQtYWNrXG4gICAgICAgIGlmICghdGhpcy5oZWFydC5hY2tub3dsZWRnZWQpIHtcbiAgICAgICAgICB0aGlzLmxvZ2dlci5kZWJ1ZyhgW1NoYXJkXSBIZWFydGJlYXQgbm90IGFja25vd2xlZGdlZCBmb3IgU2hhcmQgIyR7dGhpcy5pZH0uIEFzc3VtaW5nIHpvbWJpZWQgY29ubmVjdGlvbi5gKVxuICAgICAgICAgIGF3YWl0IHRoaXMuY2xvc2UoU2hhcmRTb2NrZXRDbG9zZUNvZGVzLlpvbWJpZWRDb25uZWN0aW9uLCAnWm9tYmllZCBjb25uZWN0aW9uLCBkaWQgbm90IHJlY2VpdmUgYW4gaGVhcnRiZWF0IEFDSyBpbiB0aW1lLicpXG4gICAgICAgICAgcmV0dXJuXG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmxvZ2dlci5kZWJ1ZyhgW1NoYXJkXSBIZWFydGJlYXRpbmcgb24gU2hhcmQgIyR7dGhpcy5pZH0uIFByZXZpb3VzIHNlcXVlbmNlIG51bWJlcjogJHt0aGlzLnByZXZpb3VzU2VxdWVuY2VOdW1iZXJ9YClcblxuICAgICAgICAvLyBVc2luZyBhIGRpcmVjdCBzb2NrZXQuc2VuZCBjYWxsIGhlcmUgYmVjYXVzZSBoZWFydGJlYXQgcmVxdWVzdHMgYXJlIHJlc2VydmVkIGJ5IHVzLlxuICAgICAgICB0aGlzLnNvY2tldD8uc2VuZChcbiAgICAgICAgICBKU09OLnN0cmluZ2lmeSh7XG4gICAgICAgICAgICBvcDogR2F0ZXdheU9wY29kZXMuSGVhcnRiZWF0LFxuICAgICAgICAgICAgZDogdGhpcy5wcmV2aW91c1NlcXVlbmNlTnVtYmVyLFxuICAgICAgICAgIH0pLFxuICAgICAgICApXG5cbiAgICAgICAgdGhpcy5oZWFydC5sYXN0QmVhdCA9IERhdGUubm93KClcbiAgICAgICAgdGhpcy5oZWFydC5hY2tub3dsZWRnZWQgPSBmYWxzZVxuXG4gICAgICAgIHRoaXMuZXZlbnRzLmhlYXJ0YmVhdD8uKHRoaXMpXG4gICAgICB9LCB0aGlzLmhlYXJ0LmludGVydmFsKVxuICAgIH0sIGppdHRlcilcbiAgfVxuXG4gIC8qKiBTdG9wIHRoZSBoZWFydGJlYXRpbmcgcHJvY2VzcyB3aXRoIGRpc2NvcmQuICovXG4gIHN0b3BIZWFydGJlYXRpbmcoKTogdm9pZCB7XG4gICAgLy8gQ2xlYXIgdGhlIHJlZ3VsYXIgaGVhcnRiZWF0IGludGVydmFsLlxuICAgIGNsZWFySW50ZXJ2YWwodGhpcy5oZWFydC5pbnRlcnZhbElkKVxuICAgIC8vIEl0J3MgcG9zc2libGUgdGhhdCB0aGUgU2hhcmQgZ290IGNsb3NlZCBiZWZvcmUgdGhlIGZpcnN0IGppdHRlcmVkIGhlYXJ0YmVhdC5cbiAgICAvLyBUbyBnbyBzYWZlIHdlIHNob3VsZCBjbGVhciB0aGUgcmVsYXRlZCB0aW1lb3V0IHRvby5cbiAgICBjbGVhclRpbWVvdXQodGhpcy5oZWFydC50aW1lb3V0SWQpXG4gIH1cbn1cblxuLyoqIENoZWNrIGlmIHRoZSBidWZmZXIgZW5kcyB3aXRoIHRoZSBtYXJrZXIgKi9cbmZ1bmN0aW9uIGVuZHNXaXRoTWFya2VyKGJ1ZmZlcjogVWludDhBcnJheSwgbWFya2VyOiBVaW50OEFycmF5KSB7XG4gIGlmIChidWZmZXIubGVuZ3RoIDwgbWFya2VyLmxlbmd0aCkgcmV0dXJuIGZhbHNlXG5cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBtYXJrZXIubGVuZ3RoOyBpKyspIHtcbiAgICBpZiAoYnVmZmVyW2J1ZmZlci5sZW5ndGggLSBtYXJrZXIubGVuZ3RoICsgaV0gIT09IG1hcmtlcltpXSkgcmV0dXJuIGZhbHNlXG4gIH1cblxuICByZXR1cm4gdHJ1ZVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIFNoYXJkQ3JlYXRlT3B0aW9ucyB7XG4gIC8qKiBUaGUgc2hhcmQgaWQgKi9cbiAgaWQ6IG51bWJlclxuICAvKiogVGhlIGNvbm5lY3Rpb24gZGV0YWlscyAqL1xuICBjb25uZWN0aW9uOiBTaGFyZEdhdGV3YXlDb25maWdcbiAgLyoqIFRoZSBldmVudCBoYW5kbGVycyBmb3IgZXZlbnRzIG9uIHRoZSBzaGFyZC4gKi9cbiAgZXZlbnRzOiBTaGFyZEV2ZW50c1xuICAvKiogVGhlIGxvZ2dlciBmb3IgdGhlIHNoYXJkICovXG4gIGxvZ2dlcj86IFBpY2s8dHlwZW9mIGxvZ2dlciwgJ2RlYnVnJyB8ICdpbmZvJyB8ICd3YXJuJyB8ICdlcnJvcicgfCAnZmF0YWwnPlxuICAvKiogVGhlIGhhbmRsZXIgdG8gcmVxdWVzdCBhIHNwYWNlIHRvIG1ha2UgYW4gaWRlbnRpZnkgcmVxdWVzdC4gKi9cbiAgcmVxdWVzdElkZW50aWZ5PzogKCkgPT4gUHJvbWlzZTx2b2lkPlxuICAvKiogRnVuY3Rpb24gdG8gY3JlYXRlIHRoZSBib3Qgc3RhdHVzIHRvIHNlbmQgb24gSWRlbnRpZnkgcmVxdWVzdHMgKi9cbiAgbWFrZVByZXNlbmNlPzogKCkgPT4gUHJvbWlzZTxEaXNjb3JkVXBkYXRlUHJlc2VuY2UgfCB1bmRlZmluZWQ+XG59XG5cbmV4cG9ydCBkZWZhdWx0IERpc2NvcmRlbm9TaGFyZFxuIl0sIm5hbWVzIjpbIkJ1ZmZlciIsInpsaWIiLCJHYXRld2F5Q2xvc2VFdmVudENvZGVzIiwiR2F0ZXdheU9wY29kZXMiLCJjYW1lbGl6ZSIsImRlbGF5IiwiTGVha3lCdWNrZXQiLCJsb2dnZXIiLCJOb2RlV2ViU29ja2V0IiwiU2hhcmRTb2NrZXRDbG9zZUNvZGVzIiwiU2hhcmRTdGF0ZSIsIlRyYW5zcG9ydENvbXByZXNzaW9uIiwiWkxJQl9TWU5DX0ZMVVNIIiwiVWludDhBcnJheSIsImZ6c3RkIiwiZ2V0RlpTdGQiLCJEaXNjb3JkZW5vU2hhcmQiLCJvcHRpb25zIiwibWF4UmVxdWVzdHNQZXJSYXRlTGltaXRUaWNrIiwicHJldmlvdXNTZXF1ZW5jZU51bWJlciIsInJhdGVMaW1pdFJlc2V0SW50ZXJ2YWwiLCJzdGF0ZSIsIk9mZmxpbmUiLCJyZXN1bWVHYXRld2F5VXJsIiwiZXZlbnRzIiwib2ZmbGluZVNlbmRRdWV1ZSIsInJlc29sdmVzIiwiTWFwIiwiZ29pbmdPZmZsaW5lIiwidGV4dERlY29kZXIiLCJUZXh0RGVjb2RlciIsImluZmxhdGVCdWZmZXIiLCJkZWNvbXByZXNzaW9uUHJvbWlzZXNRdWV1ZSIsImlkIiwiY29ubmVjdGlvbiIsImhlYXJ0IiwiYWNrbm93bGVkZ2VkIiwiaW50ZXJ2YWwiLCJyZXF1ZXN0SWRlbnRpZnkiLCJtYWtlUHJlc2VuY2UiLCJidWNrZXQiLCJtYXgiLCJjYWxjdWxhdGVTYWZlUmVxdWVzdHMiLCJyZWZpbGxBbW91bnQiLCJyZWZpbGxJbnRlcnZhbCIsImdhdGV3YXlDb25maWciLCJjb25uZWN0aW9uVXJsIiwidXJsIiwic2FmZVJlcXVlc3RzIiwiTWF0aCIsImNlaWwiLCJjaGVja09mZmxpbmUiLCJoaWdoUHJpb3JpdHkiLCJpc09wZW4iLCJQcm9taXNlIiwicmVzb2x2ZSIsInVuc2hpZnQiLCJwdXNoIiwiY2xvc2UiLCJjb2RlIiwicmVhc29uIiwiZGVidWciLCJzb2NrZXQiLCJyZWFkeVN0YXRlIiwiT1BFTiIsIk5vcm1hbENsb3N1cmUiLCJHb2luZ0F3YXkiLCJwcm9taXNlIiwicmVzb2x2ZUFmdGVyQ2xvc2UiLCJ1bmRlZmluZWQiLCJjb25uZWN0IiwiSWRlbnRpZnlpbmciLCJSZXN1bWluZyIsImluY2x1ZGVzIiwiQ29ubmVjdGluZyIsImNvbm5lY3RpbmciLCJVUkwiLCJzZWFyY2hQYXJhbXMiLCJzZXQiLCJ2ZXJzaW9uIiwidG9TdHJpbmciLCJ0cmFuc3BvcnRDb21wcmVzc2lvbiIsImluZmxhdGUiLCJjcmVhdGVJbmZsYXRlIiwiZmluaXNoRmx1c2giLCJjb25zdGFudHMiLCJaX1NZTkNfRkxVU0giLCJjaHVua1NpemUiLCJvbiIsImUiLCJlcnJvciIsImRhdGEiLCJuZXdCdWZmZXIiLCJieXRlTGVuZ3RoIiwienN0ZCIsImNyZWF0ZVpzdGREZWNvbXByZXNzIiwiY2F0Y2giLCJ3YXJuIiwiZGVsZXRlIiwienN0ZERlY29tcHJlc3MiLCJEZWNvbXByZXNzIiwiZGVjb2RlZERhdGEiLCJkZWNvZGUiLCJwYXJzZWREYXRhIiwiSlNPTiIsInBhcnNlIiwic2hpZnQiLCJjb21wcmVzcyIsInNob3VsZFVzZUJ1aWx0aW4iLCJSZWZsZWN0IiwiaGFzIiwiZ2xvYmFsVGhpcyIsIldlYlNvY2tldCIsImJpbmFyeVR5cGUiLCJvbmVycm9yIiwiZXZlbnQiLCJoYW5kbGVFcnJvciIsIm9uY2xvc2UiLCJjbG9zZUV2ZW50IiwiaGFuZGxlQ2xvc2UiLCJvbm1lc3NhZ2UiLCJtZXNzYWdlRXZlbnQiLCJoYW5kbGVNZXNzYWdlIiwib25vcGVuIiwiVW5pZGVudGlmaWVkIiwiY29ubmVjdGVkIiwiaWRlbnRpZnkiLCJieXBhc3NSZXF1ZXN0IiwiUmVJZGVudGlmeWluZyIsImlkZW50aWZ5aW5nIiwic2VuZCIsIm9wIiwiSWRlbnRpZnkiLCJkIiwidG9rZW4iLCJwcm9wZXJ0aWVzIiwiaW50ZW50cyIsInNoYXJkIiwidG90YWxTaGFyZHMiLCJwcmVzZW5jZSIsInJlc3VtZSIsIlJlc3VtZUNsb3NpbmdPbGRDb25uZWN0aW9uIiwic2Vzc2lvbklkIiwiUmVzdW1lIiwic2Vzc2lvbl9pZCIsInNlcSIsIm1lc3NhZ2UiLCJhY3F1aXJlIiwic3RyaW5naWZ5Iiwic2h1dGRvd24iLCJTaHV0ZG93biIsInN0b3BIZWFydGJlYXRpbmciLCJUZXN0aW5nRmluaXNoZWQiLCJkaXNjb25uZWN0ZWQiLCJSZXNoYXJkZWQiLCJEaXNjb25uZWN0ZWQiLCJBdXRoZW50aWNhdGlvbkZhaWxlZCIsIkludmFsaWRTaGFyZCIsIlNoYXJkaW5nUmVxdWlyZWQiLCJJbnZhbGlkQXBpVmVyc2lvbiIsIkludmFsaWRJbnRlbnRzIiwiRGlzYWxsb3dlZEludGVudHMiLCJFcnJvciIsIk5vdEF1dGhlbnRpY2F0ZWQiLCJJbnZhbGlkU2VxIiwiU2Vzc2lvblRpbWVkT3V0IiwiVW5rbm93bkVycm9yIiwiVW5rbm93bk9wY29kZSIsIkRlY29kZUVycm9yIiwiUmF0ZUxpbWl0ZWQiLCJBbHJlYWR5QXV0aGVudGljYXRlZCIsImlzQ29tcHJlc3NlZCIsIkFycmF5QnVmZmVyIiwiZGVjb21wcmVzc1BhY2tldCIsImhhbmRsZURpc2NvcmRQYWNrZXQiLCJjb21wcmVzc2VkRGF0YSIsImZhdGFsIiwid3JpdGVQcm9taXNlIiwicmVqZWN0Iiwid3JpdGUiLCJlbmRzV2l0aE1hcmtlciIsImRlY29tcHJlc3Npb25Qcm9taXNlIiwiciIsImRlY29tcHJlc3MiLCJkZWNvbXByZXNzZWQiLCJpbmZsYXRlU3luYyIsInBhY2tldCIsImxhc3RBY2siLCJEYXRlIiwibm93IiwiSGVhcnRiZWF0IiwibGFzdEJlYXQiLCJoZWFydGJlYXQiLCJIZWxsbyIsImhlYXJ0YmVhdF9pbnRlcnZhbCIsInN0YXJ0SGVhcnRiZWF0aW5nIiwiY3VycmVudFF1ZXVlIiwicXVldWUiLCJoZWxsbyIsIkhlYXJ0YmVhdEFDSyIsInJ0dCIsImhlYXJ0YmVhdEFjayIsIlJlY29ubmVjdCIsInJlcXVlc3RlZFJlY29ubmVjdCIsIkludmFsaWRTZXNzaW9uIiwicmVzdW1hYmxlIiwiaW52YWxpZFNlc3Npb24iLCJmbG9vciIsInJhbmRvbSIsImdldCIsInQiLCJDb25uZWN0ZWQiLCJyZXN1bWVkIiwiZm9yRWFjaCIsImxlbmd0aCIsInBheWxvYWQiLCJyZWFkeSIsInJlc3VtZV9nYXRld2F5X3VybCIsInMiLCJmb3J3YXJkVG9Cb3QiLCJqaXR0ZXIiLCJ0aW1lb3V0SWQiLCJzZXRUaW1lb3V0IiwiaW50ZXJ2YWxJZCIsInNldEludGVydmFsIiwiWm9tYmllZENvbm5lY3Rpb24iLCJjbGVhckludGVydmFsIiwiY2xlYXJUaW1lb3V0IiwiYnVmZmVyIiwibWFya2VyIiwiaSJdLCJtYXBwaW5ncyI6IkFBQUEsU0FBU0EsTUFBTSxRQUFRLGNBQWE7QUFDcEMsT0FBT0MsVUFBVSxZQUFXO0FBRTVCLFNBQVNDLHNCQUFzQixFQUFFQyxjQUFjLFFBQVEsb0JBQW1CO0FBQzFFLFNBQVNDLFFBQVEsRUFBRUMsS0FBSyxFQUFFQyxXQUFXLEVBQUVDLE1BQU0sUUFBUSxvQkFBbUI7QUFFeEUsT0FBT0MsbUJBQW1CLEtBQUk7QUFDOUIsU0FJRUMscUJBQXFCLEVBRXJCQyxVQUFVLEVBQ1ZDLG9CQUFvQixRQUNmLGFBQVk7QUFFbkIsTUFBTUMsa0JBQWtCLElBQUlDLFdBQVc7SUFBQztJQUFLO0lBQUs7SUFBTTtDQUFLO0FBRTdELElBQUlDO0FBRUosd0VBQXdFLEdBQ3hFLGVBQWVDO0lBQ2IsT0FBUUQsVUFBVSxNQUFNLE1BQU0sQ0FBQztBQUNqQztBQUVBLE9BQU8sTUFBTUU7SUEyRFgsWUFBWUMsT0FBMkIsQ0FBRTtRQXBEekMsMEhBQTBILFFBQzFIQyw4QkFBc0M7UUFDdEMsMENBQTBDLFFBQzFDQyx5QkFBd0M7UUFDeEMsNEVBQTRFLFFBQzVFQyx5QkFBaUM7UUFLakMsd0NBQXdDLFFBQ3hDQyxRQUFRWCxXQUFXWSxPQUFPO1FBQzFCLGlGQUFpRixRQUNqRkMsbUJBQTJCO1FBQzNCLHNDQUFzQyxRQUN0Q0MsU0FBc0IsQ0FBQztRQUN2QixtR0FBbUcsUUFDbkdDLG1CQUFtQyxFQUFFO1FBQ3JDLGlGQUFpRixRQUNqRkMsV0FBVyxJQUFJQztRQUtmOzs7Ozs7OztHQVFDLFFBQ0RDLGVBQWU7UUFDZiwrQ0FBK0MsUUFDL0NDLGNBQWMsSUFBSUM7UUFHbEIseUJBQXlCLFFBQ3pCQyxnQkFBbUM7UUFHbkMsc0RBQXNELFFBQ3REQyw2QkFBd0UsRUFBRTtRQVV4RSxJQUFJLENBQUNDLEVBQUUsR0FBR2hCLFFBQVFnQixFQUFFO1FBQ3BCLElBQUksQ0FBQ0MsVUFBVSxHQUFHakIsUUFBUWlCLFVBQVU7UUFDcEMsSUFBSSxDQUFDVixNQUFNLEdBQUdQLFFBQVFPLE1BQU07UUFDNUIsSUFBSSxDQUFDakIsTUFBTSxHQUFHVSxRQUFRVixNQUFNLElBQUlBO1FBRWhDLElBQUksQ0FBQzRCLEtBQUssR0FBRztZQUNYQyxjQUFjO1lBQ2RDLFVBQVU7UUFDWjtRQUVBLElBQUlwQixRQUFRcUIsZUFBZSxFQUFFLElBQUksQ0FBQ0EsZUFBZSxHQUFHckIsUUFBUXFCLGVBQWU7UUFDM0UsSUFBSXJCLFFBQVFzQixZQUFZLEVBQUUsSUFBSSxDQUFDQSxZQUFZLEdBQUd0QixRQUFRc0IsWUFBWTtRQUVsRSxJQUFJLENBQUNDLE1BQU0sR0FBRyxJQUFJbEMsWUFBWTtZQUM1Qm1DLEtBQUssSUFBSSxDQUFDQyxxQkFBcUI7WUFDL0JDLGNBQWMsSUFBSSxDQUFDRCxxQkFBcUI7WUFDeENFLGdCQUFnQjtZQUNoQnJDLFFBQVEsSUFBSSxDQUFDQSxNQUFNO1FBQ3JCO0lBQ0Y7SUFFQSxtRUFBbUUsR0FDbkUsSUFBSXNDLGdCQUFvQztRQUN0QyxPQUFPLElBQUksQ0FBQ1gsVUFBVTtJQUN4QjtJQUVBLDJJQUEySSxHQUMzSSxJQUFJWSxnQkFBd0I7UUFDMUIsK0NBQStDO1FBQy9DLE9BQU8sSUFBSSxDQUFDdkIsZ0JBQWdCLElBQUksSUFBSSxDQUFDc0IsYUFBYSxDQUFDRSxHQUFHO0lBQ3hEO0lBRUEsMkpBQTJKLEdBQzNKTCx3QkFBZ0M7UUFDOUIsb0ZBQW9GO1FBQ3BGLE1BQU1NLGVBQWUsSUFBSSxDQUFDOUIsMkJBQTJCLEdBQUcrQixLQUFLQyxJQUFJLENBQUMsSUFBSSxDQUFDOUIsc0JBQXNCLEdBQUcsSUFBSSxDQUFDZSxLQUFLLENBQUNFLFFBQVEsSUFBSTtRQUV2SCxPQUFPVyxlQUFlLElBQUksSUFBSUE7SUFDaEM7SUFFQSxNQUFNRyxhQUFhQyxZQUFxQixFQUFpQjtRQUN2RCxJQUFJLElBQUksQ0FBQ0MsTUFBTSxJQUFJO1FBRW5CLE9BQU8sTUFBTSxJQUFJQyxRQUFjLENBQUNDO1lBQzlCLG9FQUFvRTtZQUNwRSxJQUFJSCxjQUFjLElBQUksQ0FBQzNCLGdCQUFnQixDQUFDK0IsT0FBTyxDQUFDRDtpQkFDM0MsSUFBSSxDQUFDOUIsZ0JBQWdCLENBQUNnQyxJQUFJLENBQUNGO1FBQ2xDO0lBQ0Y7SUFFQSx1REFBdUQsR0FDdkQsTUFBTUcsTUFBTUMsSUFBWSxFQUFFQyxNQUFjLEVBQWlCO1FBQ3ZELElBQUksQ0FBQ3JELE1BQU0sQ0FBQ3NELEtBQUssQ0FBQyxDQUFDLDJCQUEyQixFQUFFLElBQUksQ0FBQzVCLEVBQUUsQ0FBQywrQkFBK0IsRUFBRTBCLEtBQUssQ0FBQyxDQUFDO1FBRWhHLElBQUksSUFBSSxDQUFDRyxNQUFNLEVBQUVDLGVBQWV2RCxjQUFjd0QsSUFBSSxFQUFFO1lBQ2xELElBQUksQ0FBQ3pELE1BQU0sQ0FBQ3NELEtBQUssQ0FBQyxDQUFDLGVBQWUsRUFBRSxJQUFJLENBQUM1QixFQUFFLENBQUMsa0JBQWtCLEVBQUUsSUFBSSxDQUFDNkIsTUFBTSxFQUFFQyxXQUFXLGtCQUFrQixDQUFDO1lBQzNHO1FBQ0Y7UUFFQSxJQUFJLENBQUNuQyxZQUFZLEdBQUcrQixTQUFTekQsdUJBQXVCK0QsYUFBYSxJQUFJTixTQUFTekQsdUJBQXVCZ0UsU0FBUztRQUU5RyxzTEFBc0w7UUFDdEwsTUFBTUMsVUFBVSxJQUFJYixRQUFRLENBQUNDO1lBQzNCLElBQUksQ0FBQ2EsaUJBQWlCLEdBQUdiO1FBQzNCO1FBRUEsSUFBSSxDQUFDTyxNQUFNLENBQUNKLEtBQUssQ0FBQ0MsTUFBTUM7UUFFeEIsSUFBSSxDQUFDckQsTUFBTSxDQUFDc0QsS0FBSyxDQUFDLENBQUMsMkJBQTJCLEVBQUUsSUFBSSxDQUFDNUIsRUFBRSxDQUFDLCtCQUErQixFQUFFMEIsS0FBSyxDQUFDLENBQUM7UUFFaEcsK0pBQStKO1FBQy9KLE1BQU1RO1FBRU4sSUFBSSxDQUFDNUQsTUFBTSxDQUFDc0QsS0FBSyxDQUFDLENBQUMsZUFBZSxFQUFFLElBQUksQ0FBQzVCLEVBQUUsQ0FBQyw2QkFBNkIsRUFBRTBCLEtBQUssQ0FBQyxDQUFDO1FBRWxGLG1FQUFtRTtRQUNuRSxJQUFJLENBQUNTLGlCQUFpQixHQUFHQztJQUMzQjtJQUVBLGdIQUFnSCxHQUNoSCxNQUFNQyxVQUFvQztRQUN4Qyw0Q0FBNEM7UUFDNUMsNkVBQTZFO1FBQzdFLElBQUksQ0FBQztZQUFDNUQsV0FBVzZELFdBQVc7WUFBRTdELFdBQVc4RCxRQUFRO1NBQUMsQ0FBQ0MsUUFBUSxDQUFDLElBQUksQ0FBQ3BELEtBQUssR0FBRztZQUN2RSxJQUFJLENBQUNBLEtBQUssR0FBR1gsV0FBV2dFLFVBQVU7UUFDcEM7UUFFQSxJQUFJLENBQUNuRSxNQUFNLENBQUNzRCxLQUFLLENBQUMsQ0FBQywwQkFBMEIsRUFBRSxJQUFJLENBQUM1QixFQUFFLENBQUMsUUFBUSxDQUFDO1FBRWhFLElBQUksQ0FBQ1QsTUFBTSxDQUFDbUQsVUFBVSxHQUFHLElBQUk7UUFFN0IsTUFBTTVCLE1BQU0sSUFBSTZCLElBQUksSUFBSSxDQUFDOUIsYUFBYTtRQUN0Q0MsSUFBSThCLFlBQVksQ0FBQ0MsR0FBRyxDQUFDLEtBQUssSUFBSSxDQUFDakMsYUFBYSxDQUFDa0MsT0FBTyxDQUFDQyxRQUFRO1FBQzdEakMsSUFBSThCLFlBQVksQ0FBQ0MsR0FBRyxDQUFDLFlBQVk7UUFFakMsdUVBQXVFO1FBQ3ZFLElBQUksSUFBSSxDQUFDakMsYUFBYSxDQUFDb0Msb0JBQW9CLEVBQUU7WUFDM0NsQyxJQUFJOEIsWUFBWSxDQUFDQyxHQUFHLENBQUMsWUFBWSxJQUFJLENBQUNqQyxhQUFhLENBQUNvQyxvQkFBb0I7WUFFeEUsSUFBSSxJQUFJLENBQUNwQyxhQUFhLENBQUNvQyxvQkFBb0IsS0FBS3RFLHFCQUFxQlYsSUFBSSxFQUFFO2dCQUN6RSxJQUFJLENBQUM4QixhQUFhLEdBQUc7Z0JBQ3JCLElBQUksQ0FBQ21ELE9BQU8sR0FBR2pGLEtBQUtrRixhQUFhLENBQUM7b0JBQ2hDQyxhQUFhbkYsS0FBS29GLFNBQVMsQ0FBQ0MsWUFBWTtvQkFDeENDLFdBQVcsS0FBSztnQkFDbEI7Z0JBRUEsSUFBSSxDQUFDTCxPQUFPLENBQUNNLEVBQUUsQ0FBQyxTQUFTLENBQUNDO29CQUN4QixJQUFJLENBQUNsRixNQUFNLENBQUNtRixLQUFLLENBQUMsK0RBQStERDtnQkFDbkY7Z0JBRUEsSUFBSSxDQUFDUCxPQUFPLENBQUNNLEVBQUUsQ0FBQyxRQUFRLENBQUNHO29CQUN2QixJQUFJLENBQUVBLENBQUFBLGdCQUFnQjlFLFVBQVMsR0FBSTtvQkFFbkMsSUFBSSxJQUFJLENBQUNrQixhQUFhLEVBQUU7d0JBQ3RCLE1BQU02RCxZQUFZLElBQUkvRSxXQUFXLElBQUksQ0FBQ2tCLGFBQWEsQ0FBQzhELFVBQVUsR0FBR0YsS0FBS0UsVUFBVTt3QkFDaEZELFVBQVVkLEdBQUcsQ0FBQyxJQUFJLENBQUMvQyxhQUFhO3dCQUNoQzZELFVBQVVkLEdBQUcsQ0FBQ2EsTUFBTSxJQUFJLENBQUM1RCxhQUFhLENBQUM4RCxVQUFVO3dCQUNqRCxJQUFJLENBQUM5RCxhQUFhLEdBQUc2RDt3QkFFckI7b0JBQ0Y7b0JBRUEsSUFBSSxDQUFDN0QsYUFBYSxHQUFHNEQ7Z0JBQ3ZCO1lBQ0Y7WUFFQSxJQUFJLElBQUksQ0FBQzlDLGFBQWEsQ0FBQ29DLG9CQUFvQixLQUFLdEUscUJBQXFCbUYsSUFBSSxFQUFFO2dCQUN6RSxJQUFJLDBCQUEwQjdGLE1BQU07b0JBQ2xDLElBQUksQ0FBQ00sTUFBTSxDQUFDc0QsS0FBSyxDQUFDO29CQUVsQixJQUFJLENBQUM5QixhQUFhLEdBQUc7b0JBQ3JCLElBQUksQ0FBQ21ELE9BQU8sR0FBR2pGLEtBQUs4RixvQkFBb0IsQ0FBQzt3QkFDdkNSLFdBQVcsS0FBSztvQkFDbEI7b0JBRUEsSUFBSSxDQUFDTCxPQUFPLENBQUNNLEVBQUUsQ0FBQyxTQUFTLENBQUNDO3dCQUN4QixJQUFJLENBQUNsRixNQUFNLENBQUNtRixLQUFLLENBQUMsK0RBQStERDtvQkFDbkY7b0JBRUEsSUFBSSxDQUFDUCxPQUFPLENBQUNNLEVBQUUsQ0FBQyxRQUFRLENBQUNHO3dCQUN2QixJQUFJLENBQUVBLENBQUFBLGdCQUFnQjlFLFVBQVMsR0FBSTt3QkFFbkMsSUFBSSxJQUFJLENBQUNrQixhQUFhLEVBQUU7NEJBQ3RCLE1BQU02RCxZQUFZLElBQUkvRSxXQUFXLElBQUksQ0FBQ2tCLGFBQWEsQ0FBQzhELFVBQVUsR0FBR0YsS0FBS0UsVUFBVTs0QkFDaEZELFVBQVVkLEdBQUcsQ0FBQyxJQUFJLENBQUMvQyxhQUFhOzRCQUNoQzZELFVBQVVkLEdBQUcsQ0FBQ2EsTUFBTSxJQUFJLENBQUM1RCxhQUFhLENBQUM4RCxVQUFVOzRCQUNqRCxJQUFJLENBQUM5RCxhQUFhLEdBQUc2RDs0QkFFckI7d0JBQ0Y7d0JBRUEsSUFBSSxDQUFDN0QsYUFBYSxHQUFHNEQ7b0JBQ3ZCO2dCQUNGLE9BQU87b0JBQ0wsTUFBTTdFLFFBQVEsTUFBTUMsV0FBV2lGLEtBQUssQ0FBQzt3QkFDbkMsSUFBSSxDQUFDekYsTUFBTSxDQUFDMEYsSUFBSSxDQUFDO3dCQUNqQmxELElBQUk4QixZQUFZLENBQUNxQixNQUFNLENBQUM7d0JBRXhCLE9BQU87b0JBQ1Q7b0JBRUEsSUFBSXBGLE9BQU87d0JBQ1QsSUFBSSxDQUFDUCxNQUFNLENBQUNzRCxLQUFLLENBQUM7d0JBRWxCLElBQUksQ0FBQ3NDLGNBQWMsR0FBRyxJQUFJckYsTUFBTXNGLFVBQVUsQ0FBQyxDQUFDVDs0QkFDMUMsTUFBTVUsY0FBYyxJQUFJLENBQUN4RSxXQUFXLENBQUN5RSxNQUFNLENBQUNYOzRCQUM1QyxNQUFNWSxhQUFhQyxLQUFLQyxLQUFLLENBQUNKOzRCQUM5QixJQUFJLENBQUNyRSwwQkFBMEIsQ0FBQzBFLEtBQUssS0FBS0g7d0JBQzVDO29CQUNGO2dCQUNGO1lBQ0Y7UUFDRjtRQUVBLElBQUksSUFBSSxDQUFDMUQsYUFBYSxDQUFDOEQsUUFBUSxJQUFJLElBQUksQ0FBQzlELGFBQWEsQ0FBQ29DLG9CQUFvQixFQUFFO1lBQzFFLElBQUksQ0FBQzFFLE1BQU0sQ0FBQzBGLElBQUksQ0FBQztZQUNqQixJQUFJLENBQUNwRCxhQUFhLENBQUM4RCxRQUFRLEdBQUc7UUFDaEM7UUFFQSwyTEFBMkw7UUFDM0wsTUFBTUMsbUJBQW1CQyxRQUFRQyxHQUFHLENBQUNDLFlBQVksZ0JBQWlCRixDQUFBQSxRQUFRQyxHQUFHLENBQUNDLFlBQVksVUFBVUYsUUFBUUMsR0FBRyxDQUFDQyxZQUFZLE9BQU07UUFFbEksb0lBQW9JO1FBQ3BJLE1BQU1qRCxTQUFvQjhDLG1CQUFtQixJQUFJSSxVQUFVakUsT0FBTyxJQUFJdkMsY0FBY3VDO1FBQ3BGLElBQUksQ0FBQ2UsTUFBTSxHQUFHQTtRQUVkLCtGQUErRjtRQUMvRkEsT0FBT21ELFVBQVUsR0FBRztRQUVwQm5ELE9BQU9vRCxPQUFPLEdBQUcsQ0FBQ0MsUUFBVSxJQUFJLENBQUNDLFdBQVcsQ0FBQ0Q7UUFDN0NyRCxPQUFPdUQsT0FBTyxHQUFHLENBQUNDLGFBQWUsSUFBSSxDQUFDQyxXQUFXLENBQUNEO1FBQ2xEeEQsT0FBTzBELFNBQVMsR0FBRyxDQUFDQyxlQUFpQixJQUFJLENBQUNDLGFBQWEsQ0FBQ0Q7UUFFeEQsT0FBTyxNQUFNLElBQUluRSxRQUFRLENBQUNDO1lBQ3hCTyxPQUFPNkQsTUFBTSxHQUFHO2dCQUNkLHdIQUF3SDtnQkFDeEgsSUFBSSxDQUFDO29CQUFDakgsV0FBVzZELFdBQVc7b0JBQUU3RCxXQUFXOEQsUUFBUTtpQkFBQyxDQUFDQyxRQUFRLENBQUMsSUFBSSxDQUFDcEQsS0FBSyxHQUFHO29CQUN2RSxJQUFJLENBQUNBLEtBQUssR0FBR1gsV0FBV2tILFlBQVk7Z0JBQ3RDO2dCQUVBLElBQUksQ0FBQ3JILE1BQU0sQ0FBQ3NELEtBQUssQ0FBQyxDQUFDLGVBQWUsRUFBRSxJQUFJLENBQUM1QixFQUFFLENBQUMsa0JBQWtCLENBQUM7Z0JBRS9ELElBQUksQ0FBQ1QsTUFBTSxDQUFDcUcsU0FBUyxHQUFHLElBQUk7Z0JBRTVCdEUsUUFBUSxJQUFJO1lBQ2Q7UUFDRjtJQUNGO0lBRUE7OztHQUdDLEdBQ0QsTUFBTXVFLFNBQVNDLGdCQUFnQixLQUFLLEVBQWlCO1FBQ25ELG9GQUFvRjtRQUNwRiw0RkFBNEY7UUFDNUYsSUFBSSxJQUFJLENBQUMxRSxNQUFNLElBQUk7WUFDakIsSUFBSSxDQUFDOUMsTUFBTSxDQUFDc0QsS0FBSyxDQUFDLENBQUMsZ0NBQWdDLEVBQUUsSUFBSSxDQUFDNUIsRUFBRSxDQUFDLHdCQUF3QixDQUFDO1lBQ3RGLE1BQU0sSUFBSSxDQUFDeUIsS0FBSyxDQUFDakQsc0JBQXNCdUgsYUFBYSxFQUFFO1FBQ3hEO1FBRUEsSUFBSSxDQUFDRCxlQUFlO1lBQ2xCLE1BQU0sSUFBSSxDQUFDekYsZUFBZTtRQUM1QjtRQUVBLElBQUksQ0FBQ2pCLEtBQUssR0FBR1gsV0FBVzZELFdBQVc7UUFDbkMsSUFBSSxDQUFDL0MsTUFBTSxDQUFDeUcsV0FBVyxHQUFHLElBQUk7UUFFOUIsNkVBQTZFO1FBQzdFLG1FQUFtRTtRQUNuRSxtREFBbUQ7UUFDbkQsSUFBSSxDQUFDLElBQUksQ0FBQzVFLE1BQU0sSUFBSTtZQUNsQixNQUFNLElBQUksQ0FBQ2lCLE9BQU87UUFDcEI7UUFFQSxJQUFJLENBQUMvRCxNQUFNLENBQUNzRCxLQUFLLENBQUMsQ0FBQyw0Q0FBNEMsRUFBRSxJQUFJLENBQUM1QixFQUFFLENBQUMsQ0FBQyxDQUFDO1FBRTNFLElBQUksQ0FBQ2lHLElBQUksQ0FDUDtZQUNFQyxJQUFJaEksZUFBZWlJLFFBQVE7WUFDM0JDLEdBQUc7Z0JBQ0RDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDekYsYUFBYSxDQUFDeUYsS0FBSyxFQUFFO2dCQUN4QzNCLFVBQVUsSUFBSSxDQUFDOUQsYUFBYSxDQUFDOEQsUUFBUTtnQkFDckM0QixZQUFZLElBQUksQ0FBQzFGLGFBQWEsQ0FBQzBGLFVBQVU7Z0JBQ3pDQyxTQUFTLElBQUksQ0FBQzNGLGFBQWEsQ0FBQzJGLE9BQU87Z0JBQ25DQyxPQUFPO29CQUFDLElBQUksQ0FBQ3hHLEVBQUU7b0JBQUUsSUFBSSxDQUFDWSxhQUFhLENBQUM2RixXQUFXO2lCQUFDO2dCQUNoREMsVUFBVSxNQUFNLElBQUksQ0FBQ3BHLFlBQVk7WUFDbkM7UUFDRixHQUNBO1FBR0YsT0FBTyxNQUFNLElBQUllLFFBQVEsQ0FBQ0M7WUFDeEIsSUFBSSxDQUFDN0IsUUFBUSxDQUFDb0QsR0FBRyxDQUFDLFNBQVM7Z0JBQ3pCdkI7WUFDRjtZQUNBLHVFQUF1RTtZQUN2RSxnRkFBZ0Y7WUFDaEYsSUFBSSxDQUFDN0IsUUFBUSxDQUFDb0QsR0FBRyxDQUFDLG1CQUFtQjtnQkFDbkMsSUFBSSxDQUFDcEQsUUFBUSxDQUFDd0UsTUFBTSxDQUFDO2dCQUNyQjNDO1lBQ0Y7UUFDRjtJQUNGO0lBRUEsK0RBQStELEdBQy9ERixTQUFrQjtRQUNoQixPQUFPLElBQUksQ0FBQ1MsTUFBTSxFQUFFQyxlQUFldkQsY0FBY3dELElBQUk7SUFDdkQ7SUFFQSxvRUFBb0UsR0FDcEUsTUFBTTRFLFNBQXdCO1FBQzVCLElBQUksQ0FBQ3JJLE1BQU0sQ0FBQ3NELEtBQUssQ0FBQyxDQUFDLHdCQUF3QixFQUFFLElBQUksQ0FBQzVCLEVBQUUsRUFBRTtRQUV0RCxzREFBc0Q7UUFDdEQsbUhBQW1IO1FBQ25ILElBQUksSUFBSSxDQUFDb0IsTUFBTSxJQUFJO1lBQ2pCLElBQUksQ0FBQzlDLE1BQU0sQ0FBQ3NELEtBQUssQ0FBQyxDQUFDLDZCQUE2QixFQUFFLElBQUksQ0FBQzVCLEVBQUUsQ0FBQyx3QkFBd0IsQ0FBQztZQUNuRixNQUFNLElBQUksQ0FBQ3lCLEtBQUssQ0FBQ2pELHNCQUFzQm9JLDBCQUEwQixFQUFFO1FBQ3JFO1FBRUEsbURBQW1EO1FBQ25ELElBQUksQ0FBQyxJQUFJLENBQUNDLFNBQVMsRUFBRTtZQUNuQixJQUFJLENBQUN2SSxNQUFNLENBQUNzRCxLQUFLLENBQUMsQ0FBQyxnQ0FBZ0MsRUFBRSxJQUFJLENBQUM1QixFQUFFLENBQUMsdURBQXVELENBQUM7WUFFckgsTUFBTSxJQUFJLENBQUM2RixRQUFRO1lBQ25CO1FBQ0Y7UUFFQSxJQUFJLENBQUN6RyxLQUFLLEdBQUdYLFdBQVc4RCxRQUFRO1FBRWhDLG1GQUFtRjtRQUNuRixNQUFNLElBQUksQ0FBQ0YsT0FBTztRQUVsQixJQUFJLENBQUMvRCxNQUFNLENBQUNzRCxLQUFLLENBQUMsQ0FBQyx3QkFBd0IsRUFBRSxJQUFJLENBQUM1QixFQUFFLENBQUMsd0JBQXdCLEVBQUUsSUFBSSxDQUFDNkcsU0FBUyxDQUFDLGFBQWEsRUFBRSxJQUFJLENBQUMzSCxzQkFBc0IsRUFBRTtRQUUxSSxJQUFJLENBQUMrRyxJQUFJLENBQ1A7WUFDRUMsSUFBSWhJLGVBQWU0SSxNQUFNO1lBQ3pCVixHQUFHO2dCQUNEQyxPQUFPLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQ3pGLGFBQWEsQ0FBQ3lGLEtBQUssRUFBRTtnQkFDeENVLFlBQVksSUFBSSxDQUFDRixTQUFTO2dCQUMxQkcsS0FBSyxJQUFJLENBQUM5SCxzQkFBc0IsSUFBSTtZQUN0QztRQUNGLEdBQ0E7UUFHRixPQUFPLE1BQU0sSUFBSW1DLFFBQVEsQ0FBQ0M7WUFDeEIsSUFBSSxDQUFDN0IsUUFBUSxDQUFDb0QsR0FBRyxDQUFDLFdBQVcsSUFBTXZCO1lBRW5DLG9HQUFvRztZQUNwRyx1RkFBdUY7WUFDdkYsSUFBSSxDQUFDN0IsUUFBUSxDQUFDb0QsR0FBRyxDQUFDLG1CQUFtQjtnQkFDbkMsSUFBSSxDQUFDcEQsUUFBUSxDQUFDd0UsTUFBTSxDQUFDO2dCQUNyQjNDO1lBQ0Y7UUFDRjtJQUNGO0lBRUE7OztHQUdDLEdBQ0QsTUFBTTJFLEtBQUtnQixPQUEyQixFQUFFOUYsZUFBd0IsS0FBSyxFQUFpQjtRQUNwRixpR0FBaUc7UUFDakcsbURBQW1EO1FBQ25ELE1BQU0sSUFBSSxDQUFDRCxZQUFZLENBQUNDO1FBRXhCLE1BQU0sSUFBSSxDQUFDWixNQUFNLENBQUMyRyxPQUFPLENBQUMvRjtRQUUxQiw4RkFBOEY7UUFDOUYsTUFBTSxJQUFJLENBQUNELFlBQVksQ0FBQ0M7UUFFeEIsSUFBSSxDQUFDVSxNQUFNLEVBQUVvRSxLQUFLMUIsS0FBSzRDLFNBQVMsQ0FBQ0Y7SUFDbkM7SUFFQSwwSEFBMEgsR0FDMUgsTUFBTUcsV0FBMEI7UUFDOUIsTUFBTSxJQUFJLENBQUMzRixLQUFLLENBQUNqRCxzQkFBc0I2SSxRQUFRLEVBQUU7UUFDakQsSUFBSSxDQUFDakksS0FBSyxHQUFHWCxXQUFXWSxPQUFPO0lBQ2pDO0lBRUEsc0NBQXNDLEdBQ3RDOEYsWUFBWTFCLEtBQVksRUFBUTtRQUM5QixJQUFJLENBQUNuRixNQUFNLENBQUNtRixLQUFLLENBQUMsQ0FBQyw2Q0FBNkMsRUFBRSxJQUFJLENBQUN6RCxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUV5RDtJQUNoRjtJQUVBLHVDQUF1QyxHQUN2QyxNQUFNNkIsWUFBWTdELEtBQWlCLEVBQWlCO1FBQ2xELElBQUksQ0FBQ0ksTUFBTSxHQUFHTztRQUNkLElBQUksQ0FBQ2tGLGdCQUFnQjtRQUVyQiwyQkFBMkI7UUFDM0IsSUFBSSxDQUFDckUsT0FBTyxHQUFHYjtRQUNmLElBQUksQ0FBQzhCLGNBQWMsR0FBRzlCO1FBQ3RCLElBQUksQ0FBQ3RDLGFBQWEsR0FBRztRQUNyQixJQUFJLENBQUNDLDBCQUEwQixHQUFHLEVBQUU7UUFFcEMsSUFBSSxDQUFDekIsTUFBTSxDQUFDc0QsS0FBSyxDQUFDLENBQUMsZUFBZSxFQUFFLElBQUksQ0FBQzVCLEVBQUUsQ0FBQyxrQkFBa0IsRUFBRXlCLE1BQU1DLElBQUksR0FBR0QsTUFBTUUsTUFBTSxHQUFHLENBQUMsY0FBYyxFQUFFRixNQUFNRSxNQUFNLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQztRQUVuSSx5Q0FBeUM7UUFDekMsSUFBSSxDQUFDUSxpQkFBaUIsR0FBR1Y7UUFFekIsT0FBUUEsTUFBTUMsSUFBSTtZQUNoQixLQUFLbEQsc0JBQXNCK0ksZUFBZTtnQkFBRTtvQkFDMUMsSUFBSSxDQUFDbkksS0FBSyxHQUFHWCxXQUFXWSxPQUFPO29CQUMvQixJQUFJLENBQUNFLE1BQU0sQ0FBQ2lJLFlBQVksR0FBRyxJQUFJO29CQUUvQjtnQkFDRjtZQUNBLDhDQUE4QztZQUM5QyxLQUFLaEosc0JBQXNCNkksUUFBUTtZQUNuQyxLQUFLN0ksc0JBQXNCdUgsYUFBYTtZQUN4QyxLQUFLdkgsc0JBQXNCaUosU0FBUztZQUNwQyxLQUFLakosc0JBQXNCb0ksMEJBQTBCO2dCQUFFO29CQUNyRCxJQUFJLENBQUN4SCxLQUFLLEdBQUdYLFdBQVdpSixZQUFZO29CQUNwQyxJQUFJLENBQUNuSSxNQUFNLENBQUNpSSxZQUFZLEdBQUcsSUFBSTtvQkFFL0I7Z0JBQ0Y7WUFDQSw2REFBNkQ7WUFDN0QsZ0RBQWdEO1lBQ2hELEtBQUt2Six1QkFBdUIwSixvQkFBb0I7WUFDaEQsS0FBSzFKLHVCQUF1QjJKLFlBQVk7WUFDeEMsS0FBSzNKLHVCQUF1QjRKLGdCQUFnQjtZQUM1QyxLQUFLNUosdUJBQXVCNkosaUJBQWlCO1lBQzdDLEtBQUs3Six1QkFBdUI4SixjQUFjO1lBQzFDLEtBQUs5Six1QkFBdUIrSixpQkFBaUI7Z0JBQUU7b0JBQzdDLElBQUksQ0FBQzVJLEtBQUssR0FBR1gsV0FBV1ksT0FBTztvQkFDL0IsSUFBSSxDQUFDRSxNQUFNLENBQUNpSSxZQUFZLEdBQUcsSUFBSTtvQkFFL0IsTUFBTSxJQUFJUyxNQUFNeEcsTUFBTUUsTUFBTSxJQUFJO2dCQUNsQztZQUNBLDBEQUEwRDtZQUMxRCxLQUFLMUQsdUJBQXVCaUssZ0JBQWdCO1lBQzVDLEtBQUtqSyx1QkFBdUJrSyxVQUFVO1lBQ3RDLEtBQUtsSyx1QkFBdUJtSyxlQUFlO2dCQUFFO29CQUMzQyxJQUFJLENBQUM5SixNQUFNLENBQUNzRCxLQUFLLENBQUMsQ0FBQyxlQUFlLEVBQUUsSUFBSSxDQUFDNUIsRUFBRSxDQUFDLDhCQUE4QixDQUFDO29CQUMzRSxJQUFJLENBQUNaLEtBQUssR0FBR1gsV0FBVzZELFdBQVc7b0JBQ25DLElBQUksQ0FBQy9DLE1BQU0sQ0FBQ2lJLFlBQVksR0FBRyxJQUFJO29CQUUvQixNQUFNLElBQUksQ0FBQzNCLFFBQVE7b0JBQ25CO2dCQUNGO1lBQ0EsK0pBQStKO1lBQy9KLEtBQUs1SCx1QkFBdUIrRCxhQUFhO1lBQ3pDLEtBQUsvRCx1QkFBdUJnRSxTQUFTO2dCQUFFO29CQUNyQyxpRUFBaUU7b0JBQ2pFLElBQUksSUFBSSxDQUFDdEMsWUFBWSxFQUFFO3dCQUNyQixJQUFJLENBQUNQLEtBQUssR0FBR1gsV0FBV2lKLFlBQVk7d0JBQ3BDLElBQUksQ0FBQ25JLE1BQU0sQ0FBQ2lJLFlBQVksR0FBRyxJQUFJO3dCQUUvQixJQUFJLENBQUM3SCxZQUFZLEdBQUc7d0JBRXBCO29CQUNGO2dCQUVBLHVNQUF1TTtnQkFDek07WUFDQSwwREFBMEQ7WUFDMUQsS0FBSzFCLHVCQUF1Qm9LLFlBQVk7WUFDeEMsS0FBS3BLLHVCQUF1QnFLLGFBQWE7WUFDekMsS0FBS3JLLHVCQUF1QnNLLFdBQVc7WUFDdkMsS0FBS3RLLHVCQUF1QnVLLFdBQVc7WUFDdkMsS0FBS3ZLLHVCQUF1QndLLG9CQUFvQjtZQUNoRDtnQkFBUztvQkFDUCx5SEFBeUg7b0JBQ3pILElBQUksQ0FBQ3JKLEtBQUssR0FBRyxJQUFJLENBQUNBLEtBQUssS0FBS1gsV0FBVzhELFFBQVEsR0FBRzlELFdBQVc2RCxXQUFXLEdBQUc3RCxXQUFXOEQsUUFBUTtvQkFDOUYsSUFBSSxDQUFDaEQsTUFBTSxDQUFDaUksWUFBWSxHQUFHLElBQUk7b0JBRS9CLElBQUksSUFBSSxDQUFDcEksS0FBSyxLQUFLWCxXQUFXOEQsUUFBUSxFQUFFO3dCQUN0QyxNQUFNLElBQUksQ0FBQ29FLE1BQU07b0JBQ25CLE9BQU87d0JBQ0wsTUFBTSxJQUFJLENBQUNkLFFBQVE7b0JBQ3JCO29CQUVBO2dCQUNGO1FBQ0Y7SUFDRjtJQUVBLHdDQUF3QyxHQUN4QyxNQUFNSixjQUFjd0IsT0FBcUIsRUFBaUI7UUFDeEQsdUZBQXVGO1FBQ3ZGLE1BQU15QixlQUFlekIsUUFBUXZELElBQUksWUFBWWlGLGVBQWUxQixRQUFRdkQsSUFBSSxZQUFZM0Y7UUFFcEYsTUFBTTJGLE9BQU9nRixlQUFlLE1BQU0sSUFBSSxDQUFDRSxnQkFBZ0IsQ0FBQzNCLFFBQVF2RCxJQUFJLElBQUthLEtBQUtDLEtBQUssQ0FBQ3lDLFFBQVF2RCxJQUFJO1FBRWhHLGdEQUFnRDtRQUNoRCxJQUFJLENBQUNBLE1BQU07UUFFWCxNQUFNLElBQUksQ0FBQ21GLG1CQUFtQixDQUFDbkY7SUFDakM7SUFFQTs7OztHQUlDLEdBQ0QsTUFBTWtGLGlCQUFpQmxGLElBQTBCLEVBQXlDO1FBQ3hGLDBJQUEwSTtRQUMxSSxNQUFNb0YsaUJBQTZCcEYsZ0JBQWdCM0YsU0FBUzJGLE9BQU8sSUFBSTlFLFdBQVc4RTtRQUVsRixJQUFJLElBQUksQ0FBQzlDLGFBQWEsQ0FBQ29DLG9CQUFvQixLQUFLdEUscUJBQXFCVixJQUFJLEVBQUU7WUFDekUsSUFBSSxDQUFDLElBQUksQ0FBQ2lGLE9BQU8sRUFBRTtnQkFDakIsSUFBSSxDQUFDM0UsTUFBTSxDQUFDeUssS0FBSyxDQUFDO2dCQUNsQixPQUFPO1lBQ1Q7WUFFQSxtRUFBbUU7WUFDbkUsTUFBTTlGLFVBQVUsSUFBSSxDQUFDQSxPQUFPO1lBRTVCLE1BQU0rRixlQUFlLElBQUkzSCxRQUFjLENBQUNDLFNBQVMySDtnQkFDL0NoRyxRQUFRaUcsS0FBSyxDQUFDSixnQkFBZ0IsVUFBVSxDQUFDckYsUUFBV0EsUUFBUXdGLE9BQU94RixTQUFTbkM7WUFDOUU7WUFFQSxJQUFJLENBQUM2SCxlQUFlTCxnQkFBZ0JuSyxrQkFBa0IsT0FBTztZQUU3RCxNQUFNcUs7WUFFTixJQUFJLENBQUMsSUFBSSxDQUFDbEosYUFBYSxFQUFFO2dCQUN2QixJQUFJLENBQUN4QixNQUFNLENBQUMwRixJQUFJLENBQUM7Z0JBQ2pCLE9BQU87WUFDVDtZQUVBLE1BQU1JLGNBQWMsSUFBSSxDQUFDeEUsV0FBVyxDQUFDeUUsTUFBTSxDQUFDLElBQUksQ0FBQ3ZFLGFBQWE7WUFDOUQsSUFBSSxDQUFDQSxhQUFhLEdBQUc7WUFFckIsT0FBT3lFLEtBQUtDLEtBQUssQ0FBQ0o7UUFDcEI7UUFFQSxJQUFJLElBQUksQ0FBQ3hELGFBQWEsQ0FBQ29DLG9CQUFvQixLQUFLdEUscUJBQXFCbUYsSUFBSSxFQUFFO1lBQ3pFLElBQUksSUFBSSxDQUFDSyxjQUFjLEVBQUU7Z0JBQ3ZCLElBQUksQ0FBQ0EsY0FBYyxDQUFDMUMsSUFBSSxDQUFDc0g7Z0JBRXpCLE1BQU1NLHVCQUF1QixJQUFJL0gsUUFBK0IsQ0FBQ2dJLElBQU0sSUFBSSxDQUFDdEosMEJBQTBCLENBQUN5QixJQUFJLENBQUM2SDtnQkFDNUcsT0FBTyxNQUFNRDtZQUNmO1lBRUEsSUFBSSxJQUFJLENBQUNuRyxPQUFPLEVBQUU7Z0JBQ2hCLG1FQUFtRTtnQkFDbkUsTUFBTXFHLGFBQWEsSUFBSSxDQUFDckcsT0FBTztnQkFFL0IsTUFBTStGLGVBQWUsSUFBSTNILFFBQWMsQ0FBQ0MsU0FBUzJIO29CQUMvQ0ssV0FBV0osS0FBSyxDQUFDSixnQkFBZ0IsVUFBVSxDQUFDckYsUUFBV0EsUUFBUXdGLE9BQU94RixTQUFTbkM7Z0JBQ2pGO2dCQUVBLE1BQU0wSDtnQkFFTixJQUFJLENBQUMsSUFBSSxDQUFDbEosYUFBYSxFQUFFO29CQUN2QixJQUFJLENBQUN4QixNQUFNLENBQUMwRixJQUFJLENBQUM7b0JBQ2pCLE9BQU87Z0JBQ1Q7Z0JBRUEsTUFBTUksY0FBYyxJQUFJLENBQUN4RSxXQUFXLENBQUN5RSxNQUFNLENBQUMsSUFBSSxDQUFDdkUsYUFBYTtnQkFDOUQsSUFBSSxDQUFDQSxhQUFhLEdBQUc7Z0JBRXJCLE9BQU95RSxLQUFLQyxLQUFLLENBQUNKO1lBQ3BCO1lBRUEsSUFBSSxDQUFDOUYsTUFBTSxDQUFDeUssS0FBSyxDQUFDO1lBQ2xCLE9BQU87UUFDVDtRQUVBLElBQUksSUFBSSxDQUFDbkksYUFBYSxDQUFDOEQsUUFBUSxFQUFFO1lBQy9CLE1BQU02RSxlQUFldkwsS0FBS3dMLFdBQVcsQ0FBQ1Y7WUFDdEMsTUFBTTFFLGNBQWMsSUFBSSxDQUFDeEUsV0FBVyxDQUFDeUUsTUFBTSxDQUFDa0Y7WUFFNUMsT0FBT2hGLEtBQUtDLEtBQUssQ0FBQ0o7UUFDcEI7UUFFQSxPQUFPO0lBQ1Q7SUFFQSx1Q0FBdUMsR0FDdkMsTUFBTXlFLG9CQUFvQlksTUFBNkIsRUFBaUI7UUFDdEUsd0VBQXdFO1FBQ3hFLElBQUksQ0FBQ3ZKLEtBQUssQ0FBQ3dKLE9BQU8sR0FBR0MsS0FBS0MsR0FBRztRQUM3QixJQUFJLENBQUMxSixLQUFLLENBQUNDLFlBQVksR0FBRztRQUMxQixpQkFBaUI7UUFFakIsT0FBUXNKLE9BQU92RCxFQUFFO1lBQ2YsS0FBS2hJLGVBQWUyTCxTQUFTO2dCQUFFO29CQUM3QixJQUFJLENBQUMsSUFBSSxDQUFDekksTUFBTSxJQUFJO29CQUVwQixJQUFJLENBQUNsQixLQUFLLENBQUM0SixRQUFRLEdBQUdILEtBQUtDLEdBQUc7b0JBQzlCLHFFQUFxRTtvQkFDckUsc0ZBQXNGO29CQUN0RixJQUFJLENBQUMvSCxNQUFNLEVBQUVvRSxLQUNYMUIsS0FBSzRDLFNBQVMsQ0FBQzt3QkFDYmpCLElBQUloSSxlQUFlMkwsU0FBUzt3QkFDNUJ6RCxHQUFHLElBQUksQ0FBQ2xILHNCQUFzQjtvQkFDaEM7b0JBRUYsSUFBSSxDQUFDSyxNQUFNLENBQUN3SyxTQUFTLEdBQUcsSUFBSTtvQkFFNUI7Z0JBQ0Y7WUFDQSxLQUFLN0wsZUFBZThMLEtBQUs7Z0JBQUU7b0JBQ3pCLE1BQU01SixXQUFXLEFBQUNxSixPQUFPckQsQ0FBQyxDQUFrQjZELGtCQUFrQjtvQkFDOUQsSUFBSSxDQUFDM0wsTUFBTSxDQUFDc0QsS0FBSyxDQUFDLENBQUMsZUFBZSxFQUFFLElBQUksQ0FBQzVCLEVBQUUsQ0FBQyxlQUFlLENBQUM7b0JBQzVELElBQUksQ0FBQ2tLLGlCQUFpQixDQUFDOUo7b0JBRXZCLElBQUksSUFBSSxDQUFDaEIsS0FBSyxLQUFLWCxXQUFXOEQsUUFBUSxFQUFFO3dCQUN0QyxNQUFNNEgsZUFBZTsrQkFBSSxJQUFJLENBQUM1SixNQUFNLENBQUM2SixLQUFLO3lCQUFDO3dCQUMzQyw4Q0FBOEM7d0JBQzlDLGtEQUFrRDt3QkFDbEQsd0RBQXdEO3dCQUN4RCxJQUFJLENBQUM3SixNQUFNLEdBQUcsSUFBSWxDLFlBQVk7NEJBQzVCbUMsS0FBSyxJQUFJLENBQUNDLHFCQUFxQjs0QkFDL0JFLGdCQUFnQjs0QkFDaEJELGNBQWMsSUFBSSxDQUFDRCxxQkFBcUI7NEJBQ3hDbkMsUUFBUSxJQUFJLENBQUNBLE1BQU07d0JBQ3JCO3dCQUVBLDZDQUE2Qzt3QkFDN0MsSUFBSSxDQUFDaUMsTUFBTSxDQUFDNkosS0FBSyxDQUFDN0ksT0FBTyxJQUFJNEk7b0JBQy9CO29CQUVBLElBQUksQ0FBQzVLLE1BQU0sQ0FBQzhLLEtBQUssR0FBRyxJQUFJO29CQUV4QjtnQkFDRjtZQUNBLEtBQUtuTSxlQUFlb00sWUFBWTtnQkFBRTtvQkFDaEMsa0VBQWtFO29CQUNsRSxJQUFJLElBQUksQ0FBQ3BLLEtBQUssQ0FBQzRKLFFBQVEsRUFBRTt3QkFDdkIsSUFBSSxDQUFDNUosS0FBSyxDQUFDcUssR0FBRyxHQUFHLElBQUksQ0FBQ3JLLEtBQUssQ0FBQ3dKLE9BQU8sR0FBRyxJQUFJLENBQUN4SixLQUFLLENBQUM0SixRQUFRO29CQUMzRDtvQkFFQSxJQUFJLENBQUN2SyxNQUFNLENBQUNpTCxZQUFZLEdBQUcsSUFBSTtvQkFFL0I7Z0JBQ0Y7WUFDQSxLQUFLdE0sZUFBZXVNLFNBQVM7Z0JBQUU7b0JBQzdCLElBQUksQ0FBQ25NLE1BQU0sQ0FBQ3NELEtBQUssQ0FBQyxDQUFDLHdDQUF3QyxFQUFFLElBQUksQ0FBQzVCLEVBQUUsRUFBRTtvQkFDdEUsSUFBSSxDQUFDVCxNQUFNLENBQUNtTCxrQkFBa0IsR0FBRyxJQUFJO29CQUVyQyxNQUFNLElBQUksQ0FBQy9ELE1BQU07b0JBRWpCO2dCQUNGO1lBQ0EsS0FBS3pJLGVBQWV5TSxjQUFjO2dCQUFFO29CQUNsQyxNQUFNQyxZQUFZbkIsT0FBT3JELENBQUM7b0JBQzFCLElBQUksQ0FBQzlILE1BQU0sQ0FBQ3NELEtBQUssQ0FBQyxDQUFDLDRDQUE0QyxFQUFFLElBQUksQ0FBQzVCLEVBQUUsQ0FBQyxtQkFBbUIsRUFBRTRLLFdBQVc7b0JBRXpHLElBQUksQ0FBQ3JMLE1BQU0sQ0FBQ3NMLGNBQWMsR0FBRyxJQUFJLEVBQUVEO29CQUVuQyw4REFBOEQ7b0JBQzlELHlFQUF5RTtvQkFDekUsTUFBTXhNLE1BQU00QyxLQUFLOEosS0FBSyxDQUFDLEFBQUM5SixDQUFBQSxLQUFLK0osTUFBTSxLQUFLLElBQUksQ0FBQSxJQUFLO29CQUVqRCxJQUFJLENBQUN0TCxRQUFRLENBQUN1TCxHQUFHLENBQUMscUJBQXFCdkI7b0JBQ3ZDLElBQUksQ0FBQ2hLLFFBQVEsQ0FBQ3dFLE1BQU0sQ0FBQztvQkFFckIsaURBQWlEO29CQUNqRCxJQUFJLENBQUMyRyxXQUFXO3dCQUNkLE1BQU0sSUFBSSxDQUFDL0UsUUFBUTt3QkFFbkI7b0JBQ0Y7b0JBRUEsd0RBQXdEO29CQUN4RCxNQUFNLElBQUksQ0FBQ2MsTUFBTTtvQkFFakI7Z0JBQ0Y7UUFDRjtRQUVBLE9BQVE4QyxPQUFPd0IsQ0FBQztZQUNkLEtBQUs7Z0JBQ0gsSUFBSSxDQUFDN0wsS0FBSyxHQUFHWCxXQUFXeU0sU0FBUztnQkFDakMsSUFBSSxDQUFDM0wsTUFBTSxDQUFDNEwsT0FBTyxHQUFHLElBQUk7Z0JBRTFCLElBQUksQ0FBQzdNLE1BQU0sQ0FBQ3NELEtBQUssQ0FBQyxDQUFDLGVBQWUsRUFBRSxJQUFJLENBQUM1QixFQUFFLENBQUMsaUJBQWlCLENBQUM7Z0JBRTlELDZFQUE2RTtnQkFDN0UsSUFBSSxDQUFDUixnQkFBZ0IsQ0FBQzRMLE9BQU8sQ0FBQyxDQUFDOUosVUFBWUE7Z0JBQzNDLHlEQUF5RDtnQkFDekQsSUFBSSxDQUFDOUIsZ0JBQWdCLENBQUM2TCxNQUFNLEdBQUc7Z0JBRS9CLElBQUksQ0FBQzVMLFFBQVEsQ0FBQ3VMLEdBQUcsQ0FBQyxhQUFhdkI7Z0JBQy9CLElBQUksQ0FBQ2hLLFFBQVEsQ0FBQ3dFLE1BQU0sQ0FBQztnQkFDckI7WUFDRixLQUFLO2dCQUFTO29CQUNaLE1BQU1xSCxVQUFVN0IsT0FBT3JELENBQUM7b0JBQ3hCLElBQUksQ0FBQzdHLE1BQU0sQ0FBQ2dNLEtBQUssR0FBRyxJQUFJO29CQUV4QixnQ0FBZ0M7b0JBQ2hDLElBQUksQ0FBQ2pNLGdCQUFnQixHQUFHZ00sUUFBUUUsa0JBQWtCO29CQUNsRCxJQUFJLENBQUMzRSxTQUFTLEdBQUd5RSxRQUFRdkUsVUFBVTtvQkFFbkMsSUFBSSxDQUFDM0gsS0FBSyxHQUFHWCxXQUFXeU0sU0FBUztvQkFFakMsSUFBSSxDQUFDNU0sTUFBTSxDQUFDc0QsS0FBSyxDQUFDLENBQUMsZUFBZSxFQUFFLElBQUksQ0FBQzVCLEVBQUUsQ0FBQyxlQUFlLENBQUM7b0JBRTVELDZFQUE2RTtvQkFDN0UsdUNBQXVDO29CQUN2QyxJQUFJLENBQUNSLGdCQUFnQixDQUFDNEwsT0FBTyxDQUFDLENBQUM5SixVQUFZQTtvQkFDM0MseURBQXlEO29CQUN6RCxJQUFJLENBQUM5QixnQkFBZ0IsQ0FBQzZMLE1BQU0sR0FBRztvQkFFL0IsSUFBSSxDQUFDNUwsUUFBUSxDQUFDdUwsR0FBRyxDQUFDLFdBQVd2QjtvQkFDN0IsSUFBSSxDQUFDaEssUUFBUSxDQUFDd0UsTUFBTSxDQUFDO29CQUNyQjtnQkFDRjtRQUNGO1FBRUEsOENBQThDO1FBQzlDLDBDQUEwQztRQUMxQywyRUFBMkU7UUFDM0UsSUFBSXdGLE9BQU9nQyxDQUFDLEtBQUssTUFBTTtZQUNyQixJQUFJLENBQUN2TSxzQkFBc0IsR0FBR3VLLE9BQU9nQyxDQUFDO1FBQ3hDO1FBRUEsSUFBSSxDQUFDQyxZQUFZLENBQUNqQztJQUNwQjtJQUVBaUMsYUFBYWpDLE1BQTZCLEVBQVE7UUFDaEQsK0VBQStFO1FBQy9FLHlDQUF5QztRQUN6QyxJQUFJLENBQUNsSyxNQUFNLENBQUMwSCxPQUFPLEdBQUcsSUFBSSxFQUFFOUksU0FBU3NMO0lBQ3ZDO0lBRUE7Ozs7R0FJQyxHQUNELE1BQU1uSixlQUEyRDtRQUMvRDtJQUNGO0lBRUE7OztHQUdDLEdBQ0QsTUFBTUQsa0JBQWlDLENBQUM7SUFFeEMsMEVBQTBFLEdBQzFFNkosa0JBQWtCOUosUUFBZ0IsRUFBUTtRQUN4QyxJQUFJLENBQUM5QixNQUFNLENBQUNzRCxLQUFLLENBQUMsQ0FBQyxxQ0FBcUMsRUFBRSxJQUFJLENBQUM1QixFQUFFLEVBQUU7UUFFbkUsaUVBQWlFO1FBQ2pFLElBQUksQ0FBQ3NILGdCQUFnQjtRQUVyQixJQUFJLENBQUNwSCxLQUFLLENBQUNFLFFBQVEsR0FBR0E7UUFFdEIsK0NBQStDO1FBQy9DLDRFQUE0RTtRQUM1RSxJQUFJO1lBQUMzQixXQUFXaUosWUFBWTtZQUFFakosV0FBV1ksT0FBTztTQUFDLENBQUNtRCxRQUFRLENBQUMsSUFBSSxDQUFDcEQsS0FBSyxHQUFHO1lBQ3RFLElBQUksQ0FBQ2QsTUFBTSxDQUFDc0QsS0FBSyxDQUFDLENBQUMsd0VBQXdFLEVBQUUsSUFBSSxDQUFDNUIsRUFBRSxFQUFFO1lBQ3RHLElBQUksQ0FBQ1osS0FBSyxHQUFHWCxXQUFXa0gsWUFBWTtRQUN0QztRQUVBLHNGQUFzRjtRQUN0RiwyREFBMkQ7UUFDM0QsNkRBQTZEO1FBQzdELDZFQUE2RTtRQUM3RSxNQUFNZ0csU0FBUzNLLEtBQUtDLElBQUksQ0FBQyxJQUFJLENBQUNmLEtBQUssQ0FBQ0UsUUFBUSxHQUFJWSxDQUFBQSxLQUFLK0osTUFBTSxNQUFNLEdBQUU7UUFFbkUsSUFBSSxDQUFDN0ssS0FBSyxDQUFDMEwsU0FBUyxHQUFHQyxXQUFXO1lBQ2hDLElBQUksQ0FBQ3ZOLE1BQU0sQ0FBQ3NELEtBQUssQ0FBQyxDQUFDLGtEQUFrRCxFQUFFLElBQUksQ0FBQzVCLEVBQUUsRUFBRTtZQUVoRixJQUFJLENBQUMsSUFBSSxDQUFDb0IsTUFBTSxJQUFJO1lBRXBCLElBQUksQ0FBQzlDLE1BQU0sQ0FBQ3NELEtBQUssQ0FBQyxDQUFDLCtCQUErQixFQUFFLElBQUksQ0FBQzVCLEVBQUUsQ0FBQyw0QkFBNEIsRUFBRSxJQUFJLENBQUNkLHNCQUFzQixFQUFFO1lBRXZILHNGQUFzRjtZQUN0RixJQUFJLENBQUMyQyxNQUFNLEVBQUVvRSxLQUNYMUIsS0FBSzRDLFNBQVMsQ0FBQztnQkFDYmpCLElBQUloSSxlQUFlMkwsU0FBUztnQkFDNUJ6RCxHQUFHLElBQUksQ0FBQ2xILHNCQUFzQjtZQUNoQztZQUdGLElBQUksQ0FBQ2dCLEtBQUssQ0FBQzRKLFFBQVEsR0FBR0gsS0FBS0MsR0FBRztZQUM5QixJQUFJLENBQUMxSixLQUFLLENBQUNDLFlBQVksR0FBRztZQUUxQixvRUFBb0U7WUFDcEUsSUFBSSxDQUFDRCxLQUFLLENBQUM0TCxVQUFVLEdBQUdDLFlBQVk7Z0JBQ2xDLElBQUksQ0FBQyxJQUFJLENBQUMzSyxNQUFNLElBQUk7b0JBQ2xCLElBQUksQ0FBQzlDLE1BQU0sQ0FBQ3NELEtBQUssQ0FBQyxDQUFDLGVBQWUsRUFBRSxJQUFJLENBQUM1QixFQUFFLENBQUMsZ0RBQWdELENBQUM7b0JBQzdGO2dCQUNGO2dCQUVBLGtFQUFrRTtnQkFDbEUsK0VBQStFO2dCQUMvRSw2REFBNkQ7Z0JBQzdELDJHQUEyRztnQkFDM0csSUFBSSxDQUFDLElBQUksQ0FBQ0UsS0FBSyxDQUFDQyxZQUFZLEVBQUU7b0JBQzVCLElBQUksQ0FBQzdCLE1BQU0sQ0FBQ3NELEtBQUssQ0FBQyxDQUFDLDhDQUE4QyxFQUFFLElBQUksQ0FBQzVCLEVBQUUsQ0FBQyw4QkFBOEIsQ0FBQztvQkFDMUcsTUFBTSxJQUFJLENBQUN5QixLQUFLLENBQUNqRCxzQkFBc0J3TixpQkFBaUIsRUFBRTtvQkFDMUQ7Z0JBQ0Y7Z0JBRUEsSUFBSSxDQUFDMU4sTUFBTSxDQUFDc0QsS0FBSyxDQUFDLENBQUMsK0JBQStCLEVBQUUsSUFBSSxDQUFDNUIsRUFBRSxDQUFDLDRCQUE0QixFQUFFLElBQUksQ0FBQ2Qsc0JBQXNCLEVBQUU7Z0JBRXZILHNGQUFzRjtnQkFDdEYsSUFBSSxDQUFDMkMsTUFBTSxFQUFFb0UsS0FDWDFCLEtBQUs0QyxTQUFTLENBQUM7b0JBQ2JqQixJQUFJaEksZUFBZTJMLFNBQVM7b0JBQzVCekQsR0FBRyxJQUFJLENBQUNsSCxzQkFBc0I7Z0JBQ2hDO2dCQUdGLElBQUksQ0FBQ2dCLEtBQUssQ0FBQzRKLFFBQVEsR0FBR0gsS0FBS0MsR0FBRztnQkFDOUIsSUFBSSxDQUFDMUosS0FBSyxDQUFDQyxZQUFZLEdBQUc7Z0JBRTFCLElBQUksQ0FBQ1osTUFBTSxDQUFDd0ssU0FBUyxHQUFHLElBQUk7WUFDOUIsR0FBRyxJQUFJLENBQUM3SixLQUFLLENBQUNFLFFBQVE7UUFDeEIsR0FBR3VMO0lBQ0w7SUFFQSxnREFBZ0QsR0FDaERyRSxtQkFBeUI7UUFDdkIsd0NBQXdDO1FBQ3hDMkUsY0FBYyxJQUFJLENBQUMvTCxLQUFLLENBQUM0TCxVQUFVO1FBQ25DLCtFQUErRTtRQUMvRSxzREFBc0Q7UUFDdERJLGFBQWEsSUFBSSxDQUFDaE0sS0FBSyxDQUFDMEwsU0FBUztJQUNuQztBQUNGO0FBRUEsNkNBQTZDLEdBQzdDLFNBQVN6QyxlQUFlZ0QsTUFBa0IsRUFBRUMsTUFBa0I7SUFDNUQsSUFBSUQsT0FBT2QsTUFBTSxHQUFHZSxPQUFPZixNQUFNLEVBQUUsT0FBTztJQUUxQyxJQUFLLElBQUlnQixJQUFJLEdBQUdBLElBQUlELE9BQU9mLE1BQU0sRUFBRWdCLElBQUs7UUFDdEMsSUFBSUYsTUFBTSxDQUFDQSxPQUFPZCxNQUFNLEdBQUdlLE9BQU9mLE1BQU0sR0FBR2dCLEVBQUUsS0FBS0QsTUFBTSxDQUFDQyxFQUFFLEVBQUUsT0FBTztJQUN0RTtJQUVBLE9BQU87QUFDVDtBQWlCQSxlQUFldE4sZ0JBQWUifQ==
|
|
660
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9TaGFyZC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBCdWZmZXIgfSBmcm9tICdub2RlOmJ1ZmZlcic7XG5pbXBvcnQgemxpYiBmcm9tICdub2RlOnpsaWInO1xuaW1wb3J0IHR5cGUgeyBEaXNjb3JkR2F0ZXdheVBheWxvYWQsIERpc2NvcmRIZWxsbywgRGlzY29yZFJlYWR5LCBEaXNjb3JkVXBkYXRlUHJlc2VuY2UgfSBmcm9tICdAZGlzY29yZGVuby90eXBlcyc7XG5pbXBvcnQgeyBHYXRld2F5Q2xvc2VFdmVudENvZGVzLCBHYXRld2F5T3Bjb2RlcyB9IGZyb20gJ0BkaXNjb3JkZW5vL3R5cGVzJztcbmltcG9ydCB7IGRlbGF5LCBMZWFreUJ1Y2tldCwgbG9nZ2VyIH0gZnJvbSAnQGRpc2NvcmRlbm8vdXRpbHMnO1xuaW1wb3J0IHR5cGUgeyBEZWNvbXByZXNzIGFzIEZac3RkRGVjb21wcmVzcyB9IGZyb20gJ2Z6c3RkJztcbmltcG9ydCBOb2RlV2ViU29ja2V0IGZyb20gJ3dzJztcbmltcG9ydCB7XG4gIHR5cGUgU2hhcmRFdmVudHMsXG4gIHR5cGUgU2hhcmRHYXRld2F5Q29uZmlnLFxuICB0eXBlIFNoYXJkSGVhcnQsXG4gIFNoYXJkU29ja2V0Q2xvc2VDb2RlcyxcbiAgdHlwZSBTaGFyZFNvY2tldFJlcXVlc3QsXG4gIFNoYXJkU3RhdGUsXG4gIFRyYW5zcG9ydENvbXByZXNzaW9uLFxufSBmcm9tICcuL3R5cGVzLmpzJztcblxuY29uc3QgWkxJQl9TWU5DX0ZMVVNIID0gbmV3IFVpbnQ4QXJyYXkoWzB4MCwgMHgwLCAweGZmLCAweGZmXSk7XG5cbmxldCBmenN0ZDogdHlwZW9mIGltcG9ydCgnZnpzdGQnKTtcblxuLyoqIFNpbmNlIGZ6c3RkIGlzIGFuIG9wdGlvbmFsIGRlcGVuZGVuY3ksIHdlIG5lZWQgdG8gaW1wb3J0IGl0IGxhemlseS4gKi9cbmFzeW5jIGZ1bmN0aW9uIGdldEZaU3RkKCkge1xuICByZXR1cm4gKGZ6c3RkID8/PSBhd2FpdCBpbXBvcnQoJ2Z6c3RkJykpO1xufVxuXG5leHBvcnQgY2xhc3MgRGlzY29yZGVub1NoYXJkIHtcbiAgLyoqIFRoZSBpZCBvZiB0aGUgc2hhcmQuICovXG4gIGlkOiBudW1iZXI7XG4gIC8qKiBUaGUgY29ubmVjdGlvbiBjb25maWcgZGV0YWlscyB0aGF0IHRoaXMgc2hhcmQgd2lsbCB1c2VkIHRvIGNvbm5lY3QgdG8gZGlzY29yZC4gKi9cbiAgY29ubmVjdGlvbjogU2hhcmRHYXRld2F5Q29uZmlnO1xuICAvKiogVGhpcyBjb250YWlucyBhbGwgdGhlIGhlYXJ0YmVhdCBpbmZvcm1hdGlvbiAqL1xuICBoZWFydDogU2hhcmRIZWFydDtcbiAgLyoqIFRoZSBtYXhpbXVtIG9mIHJlcXVlc3RzIHdoaWNoIGNhbiBiZSBzZW5kIHRvIGRpc2NvcmQgcGVyIHJhdGUgbGltaXQgdGljay4gVHlwaWNhbGx5IHRoaXMgdmFsdWUgc2hvdWxkIG5vdCBiZSBjaGFuZ2VkLiAqL1xuICBtYXhSZXF1ZXN0c1BlclJhdGVMaW1pdFRpY2s6IG51bWJlciA9IDEyMDtcbiAgLyoqIFRoZSBwcmV2aW91cyBwYXlsb2FkIHNlcXVlbmNlIG51bWJlci4gKi9cbiAgcHJldmlvdXNTZXF1ZW5jZU51bWJlcjogbnVtYmVyIHwgbnVsbCA9IG51bGw7XG4gIC8qKiBJbiB3aGljaCBpbnRlcnZhbCAoaW4gbWlsbGlzZWNvbmRzKSB0aGUgZ2F0ZXdheSByZXNldHMgaXQncyByYXRlIGxpbWl0LiAqL1xuICByYXRlTGltaXRSZXNldEludGVydmFsOiBudW1iZXIgPSA2MDAwMDtcbiAgLyoqIEN1cnJlbnQgc2Vzc2lvbiBpZCBvZiB0aGUgc2hhcmQgaWYgcHJlc2VudC4gKi9cbiAgc2Vzc2lvbklkPzogc3RyaW5nO1xuICAvKiogVGhpcyBjb250YWlucyB0aGUgV2ViU29ja2V0IGNvbm5lY3Rpb24gdG8gRGlzY29yZCwgaWYgY3VycmVudGx5IGNvbm5lY3RlZC4gKi9cbiAgc29ja2V0PzogV2ViU29ja2V0O1xuICAvKiogQ3VycmVudCBpbnRlcm5hbCBzdGF0ZSBvZiB0aGUgdGhpcy4gKi9cbiAgc3RhdGUgPSBTaGFyZFN0YXRlLk9mZmxpbmU7XG4gIC8qKiBUaGUgdXJsIHByb3ZpZGVkIGJ5IGRpc2NvcmQgdG8gdXNlIHdoZW4gcmVzdW1pbmcgYSBjb25uZWN0aW9uIGZvciB0aGlzIHRoaXMuICovXG4gIHJlc3VtZUdhdGV3YXlVcmw6IHN0cmluZyA9ICcnO1xuICAvKiogVGhlIHNoYXJkIHJlbGF0ZWQgZXZlbnQgaGFuZGxlcnMuICovXG4gIGV2ZW50czogU2hhcmRFdmVudHMgPSB7fTtcbiAgLyoqIENhY2hlIGZvciBwZW5kaW5nIGdhdGV3YXkgcmVxdWVzdHMgd2hpY2ggc2hvdWxkIGhhdmUgYmVlbiBzZW5kIHdoaWxlIHRoZSBnYXRld2F5IHdlbnQgb2ZmbGluZS4gKi9cbiAgb2ZmbGluZVNlbmRRdWV1ZTogKCgpID0+IHZvaWQpW10gPSBbXTtcbiAgLyoqIFJlc29sdmUgaW50ZXJuYWwgd2FpdGluZyBzdGF0ZXMuIE1hcHBlZCBieSBTZWxlY3RlZEV2ZW50cyA9PiBSZXNvbHZlRnVuY3Rpb24gKi9cbiAgcmVzb2x2ZXMgPSBuZXcgTWFwPCdSRUFEWScgfCAnUkVTVU1FRCcgfCAnSU5WQUxJRF9TRVNTSU9OJywgKHBheWxvYWQ6IERpc2NvcmRHYXRld2F5UGF5bG9hZCkgPT4gdm9pZD4oKTtcbiAgLyoqIFNoYXJkIGJ1Y2tldC4gT25seSBhY2Nlc3MgdGhpcyBpZiB5b3Uga25vdyB3aGF0IHlvdSBhcmUgZG9pbmcuIEJ1Y2tldCBmb3IgaGFuZGxpbmcgc2hhcmQgcmVxdWVzdCByYXRlIGxpbWl0cy4gKi9cbiAgYnVja2V0OiBMZWFreUJ1Y2tldDtcbiAgLyoqIExvZ2dlciBmb3IgdGhlIGJ1Y2tldC4gKi9cbiAgbG9nZ2VyOiBQaWNrPHR5cGVvZiBsb2dnZXIsICdkZWJ1ZycgfCAnaW5mbycgfCAnd2FybicgfCAnZXJyb3InIHwgJ2ZhdGFsJz47XG4gIC8qKlxuICAgKiBJcyB0aGUgc2hhcmQgZ29pbmcgb2ZmbGluZT9cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogVGhpcyB3aWxsIGJlIHRydWUgaWYgdGhlIGNsb3NlIG1ldGhvZCBoYXMgYmVlbiBjYWxsZWQgd2l0aCBlaXRoZXIgMTAwMCBvciAxMDAxXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqIFRoaXMgaXMgZm9yIGludGVybmFsIHB1cnBvc2VzIG9ubHksIGFuZCBzdWJqZWN0IHRvIGJyZWFraW5nIGNoYW5nZXMuXG4gICAqL1xuICBnb2luZ09mZmxpbmUgPSBmYWxzZTtcbiAgLyoqIFRleHQgZGVjb2RlciB1c2VkIGZvciBjb21wcmVzc2VkIHBheWxvYWRzLiAqL1xuICB0ZXh0RGVjb2RlciA9IG5ldyBUZXh0RGVjb2RlcigpO1xuICAvKiogemxpYiBJbmZsYXRlIG9yIHpzdGQgZGVjb21wcmVzcyAoZnJvbSBub2RlOnpsaWIpIGluc3RhbmNlIGZvciB0cmFuc3BvcnQgcGF5bG9hZHMuICovXG4gIGluZmxhdGU/OiB6bGliLkluZmxhdGUgfCB6bGliLlpzdGREZWNvbXByZXNzO1xuICAvKiogWkxpYiBpbmZsYXRlIGJ1ZmZlci4gKi9cbiAgaW5mbGF0ZUJ1ZmZlcjogVWludDhBcnJheSB8IG51bGwgPSBudWxsO1xuICAvKiogWlN0ZCBEZWNvbXByZXNzIGluc3RhbmNlIGZvciBaU3RkLXN0cmVhbSB0cmFuc3BvcnQgcGF5bG9hZHMuICovXG4gIHpzdGREZWNvbXByZXNzPzogRlpzdGREZWNvbXByZXNzO1xuICAvKiogUXVldWUgZm9yIGNvbXByZXNzZWQgcGF5bG9hZHMgZm9yIFpzdGQgRGVjb21wcmVzcyAqL1xuICBkZWNvbXByZXNzaW9uUHJvbWlzZXNRdWV1ZTogKChkYXRhOiBEaXNjb3JkR2F0ZXdheVBheWxvYWQpID0+IHZvaWQpW10gPSBbXTtcbiAgLyoqXG4gICAqIEEgZnVuY3Rpb24gdGhhdCB3aWxsIGJlIGNhbGxlZCBvbmNlIHRoZSBzb2NrZXQgaXMgY2xvc2VkIGFuZCBoYW5kbGVDbG9zZSgpIGhhcyBmaW5pc2hlZCB1cGRhdGluZyBpbnRlcm5hbCBzdGF0ZXMuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqIFRoaXMgaXMgZm9yIGludGVybmFsIHB1cnBvc2VzIG9ubHksIGFuZCBzdWJqZWN0IHRvIGJyZWFraW5nIGNoYW5nZXMuXG4gICAqL1xuICByZXNvbHZlQWZ0ZXJDbG9zZT86IChjbG9zZTogQ2xvc2VFdmVudCkgPT4gdm9pZDtcblxuICBjb25zdHJ1Y3RvcihvcHRpb25zOiBTaGFyZENyZWF0ZU9wdGlvbnMpIHtcbiAgICB0aGlzLmlkID0gb3B0aW9ucy5pZDtcbiAgICB0aGlzLmNvbm5lY3Rpb24gPSBvcHRpb25zLmNvbm5lY3Rpb247XG4gICAgdGhpcy5ldmVudHMgPSBvcHRpb25zLmV2ZW50cztcbiAgICB0aGlzLmxvZ2dlciA9IG9wdGlvbnMubG9nZ2VyID8/IGxvZ2dlcjtcblxuICAgIHRoaXMuaGVhcnQgPSB7XG4gICAgICBhY2tub3dsZWRnZWQ6IGZhbHNlLFxuICAgICAgaW50ZXJ2YWw6IDQ1MDAwLFxuICAgIH07XG5cbiAgICBpZiAob3B0aW9ucy5yZXF1ZXN0SWRlbnRpZnkpIHRoaXMucmVxdWVzdElkZW50aWZ5ID0gb3B0aW9ucy5yZXF1ZXN0SWRlbnRpZnk7XG4gICAgaWYgKG9wdGlvbnMubWFrZVByZXNlbmNlKSB0aGlzLm1ha2VQcmVzZW5jZSA9IG9wdGlvbnMubWFrZVByZXNlbmNlO1xuXG4gICAgdGhpcy5idWNrZXQgPSBuZXcgTGVha3lCdWNrZXQoe1xuICAgICAgbWF4OiB0aGlzLmNhbGN1bGF0ZVNhZmVSZXF1ZXN0cygpLFxuICAgICAgcmVmaWxsQW1vdW50OiB0aGlzLmNhbGN1bGF0ZVNhZmVSZXF1ZXN0cygpLFxuICAgICAgcmVmaWxsSW50ZXJ2YWw6IDYwMDAwLFxuICAgICAgbG9nZ2VyOiB0aGlzLmxvZ2dlcixcbiAgICB9KTtcbiAgfVxuXG4gIC8qKiBUaGUgZ2F0ZXdheSBjb25maWd1cmF0aW9uIHdoaWNoIGlzIHVzZWQgdG8gY29ubmVjdCB0byBEaXNjb3JkLiAqL1xuICBnZXQgZ2F0ZXdheUNvbmZpZygpOiBTaGFyZEdhdGV3YXlDb25maWcge1xuICAgIHJldHVybiB0aGlzLmNvbm5lY3Rpb247XG4gIH1cblxuICAvKiogVGhlIHVybCB0byBjb25uZWN0IHRvLiBJbml0aWFsbHkgdGhpcyBpcyB0aGUgZGlzY29yZCBnYXRld2F5IHVybCwgYW5kIHRoZW4gaXMgc3dpdGNoZWQgdG8gcmVzdW1lIGdhdGV3YXkgdXJsIG9uY2UgYSBSRUFEWSBpcyByZWNlaXZlZC4gKi9cbiAgZ2V0IGNvbm5lY3Rpb25VcmwoKTogc3RyaW5nIHtcbiAgICAvLyBVc2UgfHwgYW5kIG5vdCA/PyBoZXJlLiA/PyB3aWxsIGNhdXNlIGEgYnVnLlxuICAgIHJldHVybiB0aGlzLnJlc3VtZUdhdGV3YXlVcmwgfHwgdGhpcy5nYXRld2F5Q29uZmlnLnVybDtcbiAgfVxuXG4gIC8qKiBDYWxjdWxhdGUgdGhlIGFtb3VudCBvZiByZXF1ZXN0cyB3aGljaCBjYW4gc2FmZWx5IGJlIG1hZGUgcGVyIHJhdGUgbGltaXQgaW50ZXJ2YWwsIGJlZm9yZSB0aGUgZ2F0ZXdheSBnZXRzIGRpc2Nvbm5lY3RlZCBkdWUgdG8gYW4gZXhjZWVkZWQgcmF0ZSBsaW1pdC4gKi9cbiAgY2FsY3VsYXRlU2FmZVJlcXVlc3RzKCk6IG51bWJlciB7XG4gICAgLy8gKiAyIGFkZHMgZXh0cmEgc2FmZXR5IGxheWVyIGZvciBkaXNjb3JkcyBPUCAxIHJlcXVlc3RzIHRoYXQgd2UgbmVlZCB0byByZXNwb25kIHRvXG4gICAgY29uc3Qgc2FmZVJlcXVlc3RzID0gdGhpcy5tYXhSZXF1ZXN0c1BlclJhdGVMaW1pdFRpY2sgLSBNYXRoLmNlaWwodGhpcy5yYXRlTGltaXRSZXNldEludGVydmFsIC8gdGhpcy5oZWFydC5pbnRlcnZhbCkgKiAyO1xuXG4gICAgcmV0dXJuIHNhZmVSZXF1ZXN0cyA8IDAgPyAwIDogc2FmZVJlcXVlc3RzO1xuICB9XG5cbiAgYXN5bmMgY2hlY2tPZmZsaW5lKGhpZ2hQcmlvcml0eTogYm9vbGVhbik6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICh0aGlzLmlzT3BlbigpKSByZXR1cm47XG5cbiAgICByZXR1cm4gYXdhaXQgbmV3IFByb21pc2U8dm9pZD4oKHJlc29sdmUpID0+IHtcbiAgICAgIC8vIEhpZ2hlciBwcmlvcml0eSByZXF1ZXN0cyBnZXQgYWRkZWQgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgYXJyYXkuXG4gICAgICBpZiAoaGlnaFByaW9yaXR5KSB0aGlzLm9mZmxpbmVTZW5kUXVldWUudW5zaGlmdChyZXNvbHZlKTtcbiAgICAgIGVsc2UgdGhpcy5vZmZsaW5lU2VuZFF1ZXVlLnB1c2gocmVzb2x2ZSk7XG4gICAgfSk7XG4gIH1cblxuICAvKiogQ2xvc2UgdGhlIHNvY2tldCBjb25uZWN0aW9uIHRvIGRpc2NvcmQgaWYgcHJlc2VudC4gKi9cbiAgYXN5bmMgY2xvc2UoY29kZTogbnVtYmVyLCByZWFzb246IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICAgIHRoaXMubG9nZ2VyLmRlYnVnKGBbU2hhcmRdIFJlcXVlc3QgZm9yIFNoYXJkICMke3RoaXMuaWR9IHRvIGNsb3NlIHRoZSBzb2NrZXQgd2l0aCBjb2RlICR7Y29kZX0uYCk7XG5cbiAgICBpZiAodGhpcy5zb2NrZXQ/LnJlYWR5U3RhdGUgIT09IE5vZGVXZWJTb2NrZXQuT1BFTikge1xuICAgICAgdGhpcy5sb2dnZXIuZGVidWcoYFtTaGFyZF0gU2hhcmQgIyR7dGhpcy5pZH0ncyByZWFkeSBzdGF0ZSBpcyAke3RoaXMuc29ja2V0Py5yZWFkeVN0YXRlfSwgVW5hYmxlIHRvIGNsb3NlLmApO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuZ29pbmdPZmZsaW5lID0gY29kZSA9PT0gR2F0ZXdheUNsb3NlRXZlbnRDb2Rlcy5Ob3JtYWxDbG9zdXJlIHx8IGNvZGUgPT09IEdhdGV3YXlDbG9zZUV2ZW50Q29kZXMuR29pbmdBd2F5O1xuXG4gICAgLy8gVGhpcyBoYXMgdG8gYmUgY3JlYXRlZCBiZWZvcmUgdGhlIGFjdHVhbCBjYWxsIHRvIHNvY2tldC5jbG9zZSBhcyBmb3IgZXhhbXBsZSBCdW4gY2FsbHMgc29ja2V0Lm9uY2xvc2UgaW1tZWRpYXRlbHkgb24gdGhlIC5jbG9zZSgpIGNhbGwgaW5zdGVhZCBvZiB3YWl0aW5nIGZvciB0aGUgY29ubmVjdGlvbiB0byBlbmRcbiAgICBjb25zdCBwcm9taXNlID0gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICAgIHRoaXMucmVzb2x2ZUFmdGVyQ2xvc2UgPSByZXNvbHZlO1xuICAgIH0pO1xuXG4gICAgdGhpcy5zb2NrZXQuY2xvc2UoY29kZSwgcmVhc29uKTtcblxuICAgIHRoaXMubG9nZ2VyLmRlYnVnKGBbU2hhcmRdIFdhaXRpbmcgZm9yIFNoYXJkICMke3RoaXMuaWR9IHRvIGNsb3NlIHRoZSBzb2NrZXQgd2l0aCBjb2RlICR7Y29kZX0uYCk7XG5cbiAgICAvLyBXZSBuZWVkIHRvIHdhaXQgZm9yIHRoZSBzb2NrZXQgdG8gYmUgZnVsbHkgY2xvc2VkLCBvdGhlcndpc2UgdGhlcmUnbGwgYmUgcmFjZSBjb25kaXRpb24gaXNzdWVzIGlmIHdlIHRyeSB0byBjb25uZWN0IGFnYWluLCByZXN1bHRpbmcgaW4gdW5leHBlY3RlZCBiZWhhdmlvci5cbiAgICBhd2FpdCBwcm9taXNlO1xuXG4gICAgdGhpcy5sb2dnZXIuZGVidWcoYFtTaGFyZF0gU2hhcmQgIyR7dGhpcy5pZH0gY2xvc2VkIHRoZSBzb2NrZXQgd2l0aCBjb2RlICR7Y29kZX0uYCk7XG5cbiAgICAvLyBSZXNldCB0aGUgcmVzb2x2ZUFmdGVyQ2xvc2UgZnVuY3Rpb24gYWZ0ZXIgaXQgaGFzIGJlZW4gcmVzb2x2ZWQuXG4gICAgdGhpcy5yZXNvbHZlQWZ0ZXJDbG9zZSA9IHVuZGVmaW5lZDtcbiAgfVxuXG4gIC8qKiBDb25uZWN0IHRoZSBzaGFyZCB3aXRoIHRoZSBnYXRld2F5IGFuZCBzdGFydCBoZWFydGJlYXRpbmcuIFRoaXMgd2lsbCBub3QgaWRlbnRpZnkgdGhlIHNoYXJkIHRvIHRoZSBnYXRld2F5LiAqL1xuICBhc3luYyBjb25uZWN0KCk6IFByb21pc2U8RGlzY29yZGVub1NoYXJkPiB7XG4gICAgLy8gT25seSBzZXQgdGhlIHNoYXJkIHRvIGBDb25uZWN0aW5nYCBzdGF0ZSxcbiAgICAvLyBpZiB0aGUgY29ubmVjdGlvbiByZXF1ZXN0IGRvZXMgbm90IGNvbWUgZnJvbSBhbiBpZGVudGlmeSBvciByZXN1bWUgYWN0aW9uLlxuICAgIGlmICghW1NoYXJkU3RhdGUuSWRlbnRpZnlpbmcsIFNoYXJkU3RhdGUuUmVzdW1pbmddLmluY2x1ZGVzKHRoaXMuc3RhdGUpKSB7XG4gICAgICB0aGlzLnN0YXRlID0gU2hhcmRTdGF0ZS5Db25uZWN0aW5nO1xuICAgIH1cblxuICAgIHRoaXMubG9nZ2VyLmRlYnVnKGBbU2hhcmRdIENvbm5lY3RpbmcgU2hhcmQgIyR7dGhpcy5pZH0gc29ja2V0LmApO1xuXG4gICAgdGhpcy5ldmVudHMuY29ubmVjdGluZz8uKHRoaXMpO1xuXG4gICAgY29uc3QgdXJsID0gbmV3IFVSTCh0aGlzLmNvbm5lY3Rpb25VcmwpO1xuICAgIHVybC5zZWFyY2hQYXJhbXMuc2V0KCd2JywgdGhpcy5nYXRld2F5Q29uZmlnLnZlcnNpb24udG9TdHJpbmcoKSk7XG4gICAgdXJsLnNlYXJjaFBhcmFtcy5zZXQoJ2VuY29kaW5nJywgJ2pzb24nKTtcblxuICAgIC8vIFNldCB0aGUgY29tcHJlc3MgdXJsIHBhcmFtIGFuZCBpbml0aWFsaXplIHRoZSBkZWNvbXByZXNzaW9uIGNvbnRleHRzXG4gICAgaWYgKHRoaXMuZ2F0ZXdheUNvbmZpZy50cmFuc3BvcnRDb21wcmVzc2lvbikge1xuICAgICAgdXJsLnNlYXJjaFBhcmFtcy5zZXQoJ2NvbXByZXNzJywgdGhpcy5nYXRld2F5Q29uZmlnLnRyYW5zcG9ydENvbXByZXNzaW9uKTtcblxuICAgICAgaWYgKHRoaXMuZ2F0ZXdheUNvbmZpZy50cmFuc3BvcnRDb21wcmVzc2lvbiA9PT0gVHJhbnNwb3J0Q29tcHJlc3Npb24uemxpYikge1xuICAgICAgICB0aGlzLmluZmxhdGVCdWZmZXIgPSBudWxsO1xuICAgICAgICB0aGlzLmluZmxhdGUgPSB6bGliLmNyZWF0ZUluZmxhdGUoe1xuICAgICAgICAgIGZpbmlzaEZsdXNoOiB6bGliLmNvbnN0YW50cy5aX1NZTkNfRkxVU0gsXG4gICAgICAgICAgY2h1bmtTaXplOiA2NCAqIDEwMjQsXG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMuaW5mbGF0ZS5vbignZXJyb3InLCAoZSkgPT4ge1xuICAgICAgICAgIHRoaXMubG9nZ2VyLmVycm9yKCdUaGUgd2FzIGFuIGVycm9yIGluIGRlY29tcHJlc3NpbmcgYSBaTGliIGNvbXByZXNzZWQgcGF5bG9hZCcsIGUpO1xuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLmluZmxhdGUub24oJ2RhdGEnLCAoZGF0YSkgPT4ge1xuICAgICAgICAgIGlmICghKGRhdGEgaW5zdGFuY2VvZiBVaW50OEFycmF5KSkgcmV0dXJuO1xuXG4gICAgICAgICAgaWYgKHRoaXMuaW5mbGF0ZUJ1ZmZlcikge1xuICAgICAgICAgICAgY29uc3QgbmV3QnVmZmVyID0gbmV3IFVpbnQ4QXJyYXkodGhpcy5pbmZsYXRlQnVmZmVyLmJ5dGVMZW5ndGggKyBkYXRhLmJ5dGVMZW5ndGgpO1xuICAgICAgICAgICAgbmV3QnVmZmVyLnNldCh0aGlzLmluZmxhdGVCdWZmZXIpO1xuICAgICAgICAgICAgbmV3QnVmZmVyLnNldChkYXRhLCB0aGlzLmluZmxhdGVCdWZmZXIuYnl0ZUxlbmd0aCk7XG4gICAgICAgICAgICB0aGlzLmluZmxhdGVCdWZmZXIgPSBuZXdCdWZmZXI7XG5cbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICB0aGlzLmluZmxhdGVCdWZmZXIgPSBkYXRhO1xuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMuZ2F0ZXdheUNvbmZpZy50cmFuc3BvcnRDb21wcmVzc2lvbiA9PT0gVHJhbnNwb3J0Q29tcHJlc3Npb24uenN0ZCkge1xuICAgICAgICBpZiAoJ2NyZWF0ZVpzdGREZWNvbXByZXNzJyBpbiB6bGliKSB7XG4gICAgICAgICAgdGhpcy5sb2dnZXIuZGVidWcoJ1tTaGFyZF0gVXNpbmcgbm9kZTp6bGliIHpzdGQgZGVjb21wcmVzc2lvbi4nKTtcblxuICAgICAgICAgIHRoaXMuaW5mbGF0ZUJ1ZmZlciA9IG51bGw7XG4gICAgICAgICAgdGhpcy5pbmZsYXRlID0gemxpYi5jcmVhdGVac3RkRGVjb21wcmVzcyh7XG4gICAgICAgICAgICBjaHVua1NpemU6IDY0ICogMTAyNCxcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIHRoaXMuaW5mbGF0ZS5vbignZXJyb3InLCAoZSkgPT4ge1xuICAgICAgICAgICAgdGhpcy5sb2dnZXIuZXJyb3IoJ1RoZSB3YXMgYW4gZXJyb3IgaW4gZGVjb21wcmVzc2luZyBhIFpzdGQgY29tcHJlc3NlZCBwYXlsb2FkJywgZSk7XG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICB0aGlzLmluZmxhdGUub24oJ2RhdGEnLCAoZGF0YSkgPT4ge1xuICAgICAgICAgICAgaWYgKCEoZGF0YSBpbnN0YW5jZW9mIFVpbnQ4QXJyYXkpKSByZXR1cm47XG5cbiAgICAgICAgICAgIGlmICh0aGlzLmluZmxhdGVCdWZmZXIpIHtcbiAgICAgICAgICAgICAgY29uc3QgbmV3QnVmZmVyID0gbmV3IFVpbnQ4QXJyYXkodGhpcy5pbmZsYXRlQnVmZmVyLmJ5dGVMZW5ndGggKyBkYXRhLmJ5dGVMZW5ndGgpO1xuICAgICAgICAgICAgICBuZXdCdWZmZXIuc2V0KHRoaXMuaW5mbGF0ZUJ1ZmZlcik7XG4gICAgICAgICAgICAgIG5ld0J1ZmZlci5zZXQoZGF0YSwgdGhpcy5pbmZsYXRlQnVmZmVyLmJ5dGVMZW5ndGgpO1xuICAgICAgICAgICAgICB0aGlzLmluZmxhdGVCdWZmZXIgPSBuZXdCdWZmZXI7XG5cbiAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLmluZmxhdGVCdWZmZXIgPSBkYXRhO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnN0IGZ6c3RkID0gYXdhaXQgZ2V0RlpTdGQoKS5jYXRjaCgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmxvZ2dlci53YXJuKCdbU2hhcmRdIFwiZnpzdGRcIiBpcyBub3QgaW5zdGFsbGVkLiBEaXNhYmxlZCB0cmFuc3BvcnQgY29tcHJlc3Npb24uJyk7XG4gICAgICAgICAgICB1cmwuc2VhcmNoUGFyYW1zLmRlbGV0ZSgnY29tcHJlc3MnKTtcblxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICBpZiAoZnpzdGQpIHtcbiAgICAgICAgICAgIHRoaXMubG9nZ2VyLmRlYnVnKCdbU2hhcmRdIFVzaW5nIGZ6c3RkIHpzdGQgZGVjb21wcmVzc2lvbi4nKTtcblxuICAgICAgICAgICAgdGhpcy56c3RkRGVjb21wcmVzcyA9IG5ldyBmenN0ZC5EZWNvbXByZXNzKChkYXRhKSA9PiB7XG4gICAgICAgICAgICAgIGNvbnN0IGRlY29kZWREYXRhID0gdGhpcy50ZXh0RGVjb2Rlci5kZWNvZGUoZGF0YSk7XG4gICAgICAgICAgICAgIGNvbnN0IHBhcnNlZERhdGEgPSBKU09OLnBhcnNlKGRlY29kZWREYXRhKTtcbiAgICAgICAgICAgICAgdGhpcy5kZWNvbXByZXNzaW9uUHJvbWlzZXNRdWV1ZS5zaGlmdCgpPy4ocGFyc2VkRGF0YSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodGhpcy5nYXRld2F5Q29uZmlnLmNvbXByZXNzICYmIHRoaXMuZ2F0ZXdheUNvbmZpZy50cmFuc3BvcnRDb21wcmVzc2lvbikge1xuICAgICAgdGhpcy5sb2dnZXIud2FybignW1NoYXJkXSBQYXlsb2FkIGNvbXByZXNzaW9uIGhhcyBiZWVuIGRpc2FibGVkIHNpbmNlIHRyYW5zcG9ydCBjb21wcmVzc2lvbiBpcyBlbmFibGVkIGFzIHdlbGwuJyk7XG4gICAgICB0aGlzLmdhdGV3YXlDb25maWcuY29tcHJlc3MgPSBmYWxzZTtcbiAgICB9XG5cbiAgICAvLyBXZSBjaGVjayBmb3IgYnVpbHQtaW4gV2ViU29ja2V0IGltcGxlbWVudGF0aW9ucyBpbiBCdW4gb3IgRGVubywgTm9kZUpTIHYyMiBoYXMgYW4gaW1wbGVtZW50YXRpb24gdG9vIGJ1dCBpdCBzZWVtcyB0byBiZSBsZXNzIG9wdGltaXplZCBzbyBmb3Igbm93IGl0IGlzIGJldHRlciB0byB1c2UgdGhlIHdzIG5wbSBwYWNrYWdlXG4gICAgY29uc3Qgc2hvdWxkVXNlQnVpbHRpbiA9IFJlZmxlY3QuaGFzKGdsb2JhbFRoaXMsICdXZWJTb2NrZXQnKSAmJiAoUmVmbGVjdC5oYXMoZ2xvYmFsVGhpcywgJ0J1bicpIHx8IFJlZmxlY3QuaGFzKGdsb2JhbFRoaXMsICdEZW5vJykpO1xuXG4gICAgLy8gQHRzLWV4cGVjdC1lcnJvciBOb2RlV2ViU29ja2V0IGRvZXNuJ3Qgc3VwcG9ydCBcImRpc3BhdGNoRXZlbnRcIiwgYW5kIHdoaWxlIHdlIGRvbid0IHVzZSBpdCwgaXQgaXMgcmVxdWlyZWQgb24gdGhlIFwiV2ViU29ja2V0XCIgdHlwZVxuICAgIGNvbnN0IHNvY2tldDogV2ViU29ja2V0ID0gc2hvdWxkVXNlQnVpbHRpbiA/IG5ldyBXZWJTb2NrZXQodXJsKSA6IG5ldyBOb2RlV2ViU29ja2V0KHVybCk7XG4gICAgdGhpcy5zb2NrZXQgPSBzb2NrZXQ7XG5cbiAgICAvLyBCeSBkZWZhdWx0IFdlYlNvY2tldCB3aWxsIGdpdmUgdXMgYSBCbG9iLCB0aGlzIGNoYW5nZXMgaXQgc28gdGhhdCBpdCBnaXZlcyB1cyBhbiBBcnJheUJ1ZmZlclxuICAgIHNvY2tldC5iaW5hcnlUeXBlID0gJ2FycmF5YnVmZmVyJztcblxuICAgIHNvY2tldC5vbmVycm9yID0gKGV2ZW50KSA9PiB0aGlzLmhhbmRsZUVycm9yKGV2ZW50KTtcbiAgICBzb2NrZXQub25jbG9zZSA9IChjbG9zZUV2ZW50KSA9PiB0aGlzLmhhbmRsZUNsb3NlKGNsb3NlRXZlbnQpO1xuICAgIHNvY2tldC5vbm1lc3NhZ2UgPSAobWVzc2FnZUV2ZW50KSA9PiB0aGlzLmhhbmRsZU1lc3NhZ2UobWVzc2FnZUV2ZW50KTtcblxuICAgIHJldHVybiBhd2FpdCBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuICAgICAgc29ja2V0Lm9ub3BlbiA9ICgpID0+IHtcbiAgICAgICAgLy8gT25seSBzZXQgdGhlIHNoYXJkIHRvIGBVbmlkZW50aWZpZWRgIHN0YXRlIGlmIHRoZSBjb25uZWN0aW9uIHJlcXVlc3QgZG9lcyBub3QgY29tZSBmcm9tIGFuIGlkZW50aWZ5IG9yIHJlc3VtZSBhY3Rpb24uXG4gICAgICAgIGlmICghW1NoYXJkU3RhdGUuSWRlbnRpZnlpbmcsIFNoYXJkU3RhdGUuUmVzdW1pbmddLmluY2x1ZGVzKHRoaXMuc3RhdGUpKSB7XG4gICAgICAgICAgdGhpcy5zdGF0ZSA9IFNoYXJkU3RhdGUuVW5pZGVudGlmaWVkO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5sb2dnZXIuZGVidWcoYFtTaGFyZF0gU2hhcmQgIyR7dGhpcy5pZH0gc29ja2V0IGNvbm5lY3RlZC5gKTtcblxuICAgICAgICB0aGlzLmV2ZW50cy5jb25uZWN0ZWQ/Lih0aGlzKTtcblxuICAgICAgICByZXNvbHZlKHRoaXMpO1xuICAgICAgfTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJZGVudGlmeSB0aGUgc2hhcmQgdG8gdGhlIGdhdGV3YXkuIElmIG5vdCBjb25uZWN0ZWQsIHRoaXMgd2lsbCBhbHNvIGNvbm5lY3QgdGhlIHNoYXJkIHRvIHRoZSBnYXRld2F5LlxuICAgKiBAcGFyYW0gYnlwYXNzUmVxdWVzdCAtIFdoZXRoZXIgdG8gYnlwYXNzIHRoZSByZXF1ZXN0SWRlbnRpZnkgaGFuZGxlciBhbmQgaWRlbnRpZnkgaW1tZWRpYXRlbHkuIFRoaXMgc2hvdWxkIGJlIHVzZWQgY2FyZWZ1bGx5IGFzIGl0IGNhbiBjYXVzZSBpbnZhbGlkIHNlc3Npb25zLlxuICAgKi9cbiAgYXN5bmMgaWRlbnRpZnkoYnlwYXNzUmVxdWVzdCA9IGZhbHNlKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgLy8gQSBuZXcgaWRlbnRpZnkgaGFzIGJlZW4gcmVxdWVzdGVkIGV2ZW4gdGhvdWdoIHRoZXJlIGlzIGFscmVhZHkgYSBjb25uZWN0aW9uIG9wZW4uXG4gICAgLy8gVGhlcmVmb3JlIHdlIG5lZWQgdG8gY2xvc2UgdGhlIG9sZCBjb25uZWN0aW9uIGFuZCBoZWFydGJlYXRpbmcgYmVmb3JlIGNyZWF0aW5nIGEgbmV3IG9uZS5cbiAgICBpZiAodGhpcy5pc09wZW4oKSkge1xuICAgICAgdGhpcy5sb2dnZXIuZGVidWcoYFtTaGFyZF0gSWRlbnRpZnlpbmcgb3BlbiBTaGFyZCAjJHt0aGlzLmlkfSwgY2xvc2luZyB0aGUgY29ubmVjdGlvbmApO1xuICAgICAgYXdhaXQgdGhpcy5jbG9zZShTaGFyZFNvY2tldENsb3NlQ29kZXMuUmVJZGVudGlmeWluZywgJ1JlLWlkZW50aWZ5aW5nIGNsb3N1cmUgb2Ygb2xkIGNvbm5lY3Rpb24uJyk7XG4gICAgfVxuXG4gICAgaWYgKCFieXBhc3NSZXF1ZXN0KSB7XG4gICAgICBhd2FpdCB0aGlzLnJlcXVlc3RJZGVudGlmeSgpO1xuICAgIH1cblxuICAgIHRoaXMuc3RhdGUgPSBTaGFyZFN0YXRlLklkZW50aWZ5aW5nO1xuICAgIHRoaXMuZXZlbnRzLmlkZW50aWZ5aW5nPy4odGhpcyk7XG5cbiAgICAvLyBJdCBpcyBwb3NzaWJsZSB0aGF0IHRoZSBzaGFyZCBpcyBpbiBIZWFydGJlYXRpbmcgc3RhdGUgYnV0IG5vdCBpZGVudGlmaWVkLFxuICAgIC8vIHNvIGNoZWNrIHdoZXRoZXIgdGhlcmUgaXMgYWxyZWFkeSBhIGdhdGV3YXkgY29ubmVjdGlvbiBleGlzdGluZy5cbiAgICAvLyBJZiBub3Qgd2UgbmVlZCB0byBjcmVhdGUgb25lIGJlZm9yZSB3ZSBpZGVudGlmeS5cbiAgICBpZiAoIXRoaXMuaXNPcGVuKCkpIHtcbiAgICAgIGF3YWl0IHRoaXMuY29ubmVjdCgpO1xuICAgIH1cblxuICAgIHRoaXMubG9nZ2VyLmRlYnVnKGBbU2hhcmRdIFNlbmRpbmcgSWRlbnRpZnkgcGF5bG9hZCBmb3IgU2hhcmQgIyR7dGhpcy5pZH0uYCk7XG5cbiAgICB0aGlzLnNlbmQoXG4gICAgICB7XG4gICAgICAgIG9wOiBHYXRld2F5T3Bjb2Rlcy5JZGVudGlmeSxcbiAgICAgICAgZDoge1xuICAgICAgICAgIHRva2VuOiBgQm90ICR7dGhpcy5nYXRld2F5Q29uZmlnLnRva2VufWAsXG4gICAgICAgICAgY29tcHJlc3M6IHRoaXMuZ2F0ZXdheUNvbmZpZy5jb21wcmVzcyxcbiAgICAgICAgICBwcm9wZXJ0aWVzOiB0aGlzLmdhdGV3YXlDb25maWcucHJvcGVydGllcyxcbiAgICAgICAgICBpbnRlbnRzOiB0aGlzLmdhdGV3YXlDb25maWcuaW50ZW50cyxcbiAgICAgICAgICBzaGFyZDogW3RoaXMuaWQsIHRoaXMuZ2F0ZXdheUNvbmZpZy50b3RhbFNoYXJkc10sXG4gICAgICAgICAgcHJlc2VuY2U6IGF3YWl0IHRoaXMubWFrZVByZXNlbmNlKCksXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgICAgdHJ1ZSxcbiAgICApO1xuXG4gICAgcmV0dXJuIGF3YWl0IG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgICB0aGlzLnJlc29sdmVzLnNldCgnUkVBRFknLCAoKSA9PiB7XG4gICAgICAgIHJlc29sdmUoKTtcbiAgICAgIH0pO1xuICAgICAgLy8gV2hlbiBpZGVudGlmeWluZyB0b28gZmFzdCwgRGlzY29yZCBzZW5kcyBhbiBpbnZhbGlkIHNlc3Npb24gcGF5bG9hZC5cbiAgICAgIC8vIFRoaXMgY2FuIHNhZmVseSBiZSBpZ25vcmVkIHRob3VnaCBhbmQgdGhlIHNoYXJkIHN0YXJ0cyBhIG5ldyBpZGVudGlmeSBhY3Rpb24uXG4gICAgICB0aGlzLnJlc29sdmVzLnNldCgnSU5WQUxJRF9TRVNTSU9OJywgKCkgPT4ge1xuICAgICAgICB0aGlzLnJlc29sdmVzLmRlbGV0ZSgnUkVBRFknKTtcbiAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICAvKiogQ2hlY2sgd2hldGhlciB0aGUgY29ubmVjdGlvbiB0byBEaXNjb3JkIGlzIGN1cnJlbnRseSBvcGVuLiAqL1xuICBpc09wZW4oKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuc29ja2V0Py5yZWFkeVN0YXRlID09PSBOb2RlV2ViU29ja2V0Lk9QRU47XG4gIH1cblxuICAvKiogQXR0ZW1wdCB0byByZXN1bWUgdGhlIHByZXZpb3VzIHNoYXJkcyBzZXNzaW9uIHdpdGggdGhlIGdhdGV3YXkuICovXG4gIGFzeW5jIHJlc3VtZSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0aGlzLmxvZ2dlci5kZWJ1ZyhgW1NoYXJkXSBSZXN1bWluZyBTaGFyZCAjJHt0aGlzLmlkfWApO1xuXG4gICAgLy8gSXQgaGFzIGJlZW4gcmVxdWVzdGVkIHRvIHJlc3VtZSB0aGUgU2hhcmRzIHNlc3Npb24uXG4gICAgLy8gSXQncyBwb3NzaWJsZSB0aGF0IHRoZSBzaGFyZCBpcyBzdGlsbCBjb25uZWN0ZWQgd2l0aCBEaXNjb3JkJ3MgZ2F0ZXdheSB0aGVyZWZvcmUgd2UgbmVlZCB0byBmb3JjZWZ1bGx5IGNsb3NlIGl0LlxuICAgIGlmICh0aGlzLmlzT3BlbigpKSB7XG4gICAgICB0aGlzLmxvZ2dlci5kZWJ1ZyhgW1NoYXJkXSBSZXN1bWluZyBvcGVuIFNoYXJkICMke3RoaXMuaWR9LCBjbG9zaW5nIHRoZSBjb25uZWN0aW9uYCk7XG4gICAgICBhd2FpdCB0aGlzLmNsb3NlKFNoYXJkU29ja2V0Q2xvc2VDb2Rlcy5SZXN1bWVDbG9zaW5nT2xkQ29ubmVjdGlvbiwgJ1JlY29ubmVjdGluZyB0aGUgc2hhcmQsIGNsb3Npbmcgb2xkIGNvbm5lY3Rpb24uJyk7XG4gICAgfVxuXG4gICAgLy8gU2hhcmQgaGFzIG5ldmVyIGlkZW50aWZpZWQsIHNvIHdlIGNhbm5vdCByZXN1bWUuXG4gICAgaWYgKCF0aGlzLnNlc3Npb25JZCkge1xuICAgICAgdGhpcy5sb2dnZXIuZGVidWcoYFtTaGFyZF0gVHJ5aW5nIHRvIHJlc3VtZSBTaGFyZCAjJHt0aGlzLmlkfSB3aXRob3V0IHRoZSBzZXNzaW9uIGlkLiBJZGVudGlmeWluZyB0aGUgc2hhcmQgaW5zdGVhZC5gKTtcblxuICAgICAgYXdhaXQgdGhpcy5pZGVudGlmeSgpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuc3RhdGUgPSBTaGFyZFN0YXRlLlJlc3VtaW5nO1xuXG4gICAgLy8gQmVmb3JlIHdlIGNhbiByZXN1bWUsIHdlIG5lZWQgdG8gY3JlYXRlIGEgbmV3IGNvbm5lY3Rpb24gd2l0aCBEaXNjb3JkJ3MgZ2F0ZXdheS5cbiAgICBhd2FpdCB0aGlzLmNvbm5lY3QoKTtcblxuICAgIHRoaXMubG9nZ2VyLmRlYnVnKGBbU2hhcmRdIFJlc3VtaW5nIFNoYXJkICMke3RoaXMuaWR9IGNvbm5lY3RlZC4gU2Vzc2lvbiBpZDogJHt0aGlzLnNlc3Npb25JZH0gfCBTZXF1ZW5jZTogJHt0aGlzLnByZXZpb3VzU2VxdWVuY2VOdW1iZXJ9YCk7XG5cbiAgICB0aGlzLnNlbmQoXG4gICAgICB7XG4gICAgICAgIG9wOiBHYXRld2F5T3Bjb2Rlcy5SZXN1bWUsXG4gICAgICAgIGQ6IHtcbiAgICAgICAgICB0b2tlbjogYEJvdCAke3RoaXMuZ2F0ZXdheUNvbmZpZy50b2tlbn1gLFxuICAgICAgICAgIHNlc3Npb25faWQ6IHRoaXMuc2Vzc2lvbklkLFxuICAgICAgICAgIHNlcTogdGhpcy5wcmV2aW91c1NlcXVlbmNlTnVtYmVyID8/IDAsXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgICAgdHJ1ZSxcbiAgICApO1xuXG4gICAgcmV0dXJuIGF3YWl0IG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgICB0aGlzLnJlc29sdmVzLnNldCgnUkVTVU1FRCcsICgpID0+IHJlc29sdmUoKSk7XG5cbiAgICAgIC8vIElmIGl0IGlzIGF0dGVtcHRlZCB0byByZXN1bWUgd2l0aCBhbiBpbnZhbGlkIHNlc3Npb24gaWQsIERpc2NvcmQgc2VuZHMgYW4gaW52YWxpZCBzZXNzaW9uIHBheWxvYWRcbiAgICAgIC8vIE5vdCBlcnJvcmluZyBoZXJlIHNpbmNlIGl0IGlzIGVhc3kgdGhhdCB0aGlzIGhhcHBlbnMsIGFsc28gaXQgd291bGQgYmUgbm90IGNhdGNoYWJsZVxuICAgICAgdGhpcy5yZXNvbHZlcy5zZXQoJ0lOVkFMSURfU0VTU0lPTicsICgpID0+IHtcbiAgICAgICAgdGhpcy5yZXNvbHZlcy5kZWxldGUoJ1JFU1VNRUQnKTtcbiAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogU2VuZCBhIG1lc3NhZ2UgdG8gRGlzY29yZC5cbiAgICogQHBhcmFtIGhpZ2hQcmlvcml0eSAtIFdoZXRoZXIgdGhpcyBtZXNzYWdlIHNob3VsZCBiZSBzZW5kIGFzYXAuXG4gICAqL1xuICBhc3luYyBzZW5kKG1lc3NhZ2U6IFNoYXJkU29ja2V0UmVxdWVzdCwgaGlnaFByaW9yaXR5OiBib29sZWFuID0gZmFsc2UpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAvLyBCZWZvcmUgYWNxdWlyaW5nIGEgdG9rZW4gZnJvbSB0aGUgYnVja2V0LCBjaGVjayB3aGV0aGVyIHRoZSBzaGFyZCBpcyBjdXJyZW50bHkgb2ZmbGluZSBvciBub3QuXG4gICAgLy8gRWxzZSBidWNrZXQgYW5kIHRva2VuIHdhaXQgdGltZSBqdXN0IGdldCB3YXN0ZWQuXG4gICAgYXdhaXQgdGhpcy5jaGVja09mZmxpbmUoaGlnaFByaW9yaXR5KTtcblxuICAgIGF3YWl0IHRoaXMuYnVja2V0LmFjcXVpcmUoaGlnaFByaW9yaXR5KTtcblxuICAgIC8vIEl0J3MgcG9zc2libGUsIHRoYXQgdGhlIHNoYXJkIHdlbnQgb2ZmbGluZSBhZnRlciBhIHRva2VuIGhhcyBiZWVuIGFjcXVpcmVkIGZyb20gdGhlIGJ1Y2tldC5cbiAgICBhd2FpdCB0aGlzLmNoZWNrT2ZmbGluZShoaWdoUHJpb3JpdHkpO1xuXG4gICAgdGhpcy5zb2NrZXQ/LnNlbmQoSlNPTi5zdHJpbmdpZnkobWVzc2FnZSkpO1xuICB9XG5cbiAgLyoqIFNodXRkb3duIHRoZSB0aGlzLiBGb3JjZWZ1bGx5IGRpc2Nvbm5lY3QgdGhlIHNoYXJkIGZyb20gRGlzY29yZC4gVGhlIHNoYXJkIG1heSBub3QgYXR0ZW1wdCB0byByZWNvbm5lY3Qgd2l0aCBEaXNjb3JkLiAqL1xuICBhc3luYyBzaHV0ZG93bigpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBhd2FpdCB0aGlzLmNsb3NlKFNoYXJkU29ja2V0Q2xvc2VDb2Rlcy5TaHV0ZG93biwgJ1NoYXJkIHNodXR0aW5nIGRvd24uJyk7XG4gICAgdGhpcy5zdGF0ZSA9IFNoYXJkU3RhdGUuT2ZmbGluZTtcbiAgfVxuXG4gIC8qKiBIYW5kbGUgYSBnYXRld2F5IGNvbm5lY3Rpb24gZXJyb3IgKi9cbiAgaGFuZGxlRXJyb3IoZXJyb3I6IEV2ZW50KTogdm9pZCB7XG4gICAgdGhpcy5sb2dnZXIuZXJyb3IoYFtTaGFyZF0gVGhlcmUgd2FzIGFuIGVycm9yIGNvbm5lY3RpbmcgU2hhcmQgIyR7dGhpcy5pZH0uYCwgZXJyb3IpO1xuICB9XG5cbiAgLyoqIEhhbmRsZSBhIGdhdGV3YXkgY29ubmVjdGlvbiBjbG9zZS4gKi9cbiAgYXN5bmMgaGFuZGxlQ2xvc2UoY2xvc2U6IENsb3NlRXZlbnQpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0aGlzLnNvY2tldCA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLnN0b3BIZWFydGJlYXRpbmcoKTtcblxuICAgIC8vIENsZWFyIHRoZSB6bGliL3pzdGQgZGF0YVxuICAgIHRoaXMuaW5mbGF0ZSA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLnpzdGREZWNvbXByZXNzID0gdW5kZWZpbmVkO1xuICAgIHRoaXMuaW5mbGF0ZUJ1ZmZlciA9IG51bGw7XG4gICAgdGhpcy5kZWNvbXByZXNzaW9uUHJvbWlzZXNRdWV1ZSA9IFtdO1xuXG4gICAgdGhpcy5sb2dnZXIuZGVidWcoYFtTaGFyZF0gU2hhcmQgIyR7dGhpcy5pZH0gY2xvc2VkIHdpdGggY29kZSAke2Nsb3NlLmNvZGV9JHtjbG9zZS5yZWFzb24gPyBgLCBhbmQgcmVhc29uOiAke2Nsb3NlLnJlYXNvbn1gIDogJyd9LmApO1xuXG4gICAgLy8gUmVzb2x2ZSB0aGUgY2xvc2UgcHJvbWlzZSBpZiBpdCBleGlzdHNcbiAgICB0aGlzLnJlc29sdmVBZnRlckNsb3NlPy4oY2xvc2UpO1xuXG4gICAgc3dpdGNoIChjbG9zZS5jb2RlKSB7XG4gICAgICBjYXNlIFNoYXJkU29ja2V0Q2xvc2VDb2Rlcy5UZXN0aW5nRmluaXNoZWQ6IHtcbiAgICAgICAgdGhpcy5zdGF0ZSA9IFNoYXJkU3RhdGUuT2ZmbGluZTtcbiAgICAgICAgdGhpcy5ldmVudHMuZGlzY29ubmVjdGVkPy4odGhpcyk7XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgLy8gT24gdGhlc2UgY29kZXMgYSBtYW51YWwgc3RhcnQgd2lsbCBiZSBkb25lLlxuICAgICAgY2FzZSBTaGFyZFNvY2tldENsb3NlQ29kZXMuU2h1dGRvd246XG4gICAgICBjYXNlIFNoYXJkU29ja2V0Q2xvc2VDb2Rlcy5SZUlkZW50aWZ5aW5nOlxuICAgICAgY2FzZSBTaGFyZFNvY2tldENsb3NlQ29kZXMuUmVzaGFyZGVkOlxuICAgICAgY2FzZSBTaGFyZFNvY2tldENsb3NlQ29kZXMuUmVzdW1lQ2xvc2luZ09sZENvbm5lY3Rpb246IHtcbiAgICAgICAgdGhpcy5zdGF0ZSA9IFNoYXJkU3RhdGUuRGlzY29ubmVjdGVkO1xuICAgICAgICB0aGlzLmV2ZW50cy5kaXNjb25uZWN0ZWQ/Lih0aGlzKTtcblxuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICAvLyBXaGVuIHRoZXNlIGNvZGVzIGFyZSByZWNlaXZlZCBzb21ldGhpbmcgd2VudCByZWFsbHkgd3JvbmcuXG4gICAgICAvLyBPbiB0aG9zZSB3ZSBjYW5ub3Qgc3RhcnQgYSByZWNvbm5lY3QgYXR0ZW1wdC5cbiAgICAgIGNhc2UgR2F0ZXdheUNsb3NlRXZlbnRDb2Rlcy5BdXRoZW50aWNhdGlvbkZhaWxlZDpcbiAgICAgIGNhc2UgR2F0ZXdheUNsb3NlRXZlbnRDb2Rlcy5JbnZhbGlkU2hhcmQ6XG4gICAgICBjYXNlIEdhdGV3YXlDbG9zZUV2ZW50Q29kZXMuU2hhcmRpbmdSZXF1aXJlZDpcbiAgICAgIGNhc2UgR2F0ZXdheUNsb3NlRXZlbnRDb2Rlcy5JbnZhbGlkQXBpVmVyc2lvbjpcbiAgICAgIGNhc2UgR2F0ZXdheUNsb3NlRXZlbnRDb2Rlcy5JbnZhbGlkSW50ZW50czpcbiAgICAgIGNhc2UgR2F0ZXdheUNsb3NlRXZlbnRDb2Rlcy5EaXNhbGxvd2VkSW50ZW50czoge1xuICAgICAgICB0aGlzLnN0YXRlID0gU2hhcmRTdGF0ZS5PZmZsaW5lO1xuICAgICAgICB0aGlzLmV2ZW50cy5kaXNjb25uZWN0ZWQ/Lih0aGlzKTtcblxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoY2xvc2UucmVhc29uIHx8ICdEaXNjb3JkIGdhdmUgbm8gcmVhc29uISBHRyEgWW91IGJyb2tlIERpc2NvcmQhJyk7XG4gICAgICB9XG4gICAgICAvLyBHYXRld2F5IGNvbm5lY3Rpb24gY2xvc2VzIHdoaWNoIHJlcXVpcmUgYSBuZXcgaWRlbnRpZnkuXG4gICAgICBjYXNlIEdhdGV3YXlDbG9zZUV2ZW50Q29kZXMuTm90QXV0aGVudGljYXRlZDpcbiAgICAgIGNhc2UgR2F0ZXdheUNsb3NlRXZlbnRDb2Rlcy5JbnZhbGlkU2VxOlxuICAgICAgY2FzZSBHYXRld2F5Q2xvc2VFdmVudENvZGVzLlNlc3Npb25UaW1lZE91dDoge1xuICAgICAgICB0aGlzLmxvZ2dlci5kZWJ1ZyhgW1NoYXJkXSBTaGFyZCAjJHt0aGlzLmlkfSBjbG9zZWQgcmVxdWlyaW5nIHJlLWlkZW50aWZ5LmApO1xuICAgICAgICB0aGlzLnN0YXRlID0gU2hhcmRTdGF0ZS5JZGVudGlmeWluZztcbiAgICAgICAgdGhpcy5ldmVudHMuZGlzY29ubmVjdGVkPy4odGhpcyk7XG5cbiAgICAgICAgYXdhaXQgdGhpcy5pZGVudGlmeSgpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICAvLyBOT1RFOiBUaGlzIGNhc2UgbXVzdCBhbHdheXMgYmUgcmlnaHQgYWJvdmUgdGhlIGNhc2VzIHRoYXQgcnVucyB3aXRoIGRlZmF1bHQgY2FzZSBiZWNhdXNlIG9mIGhvdyBzd2l0Y2ggd29ya3Mgd2hlbiB5b3UgZG9uJ3QgYnJlYWsgLyByZXR1cm4sIG1vcmUgaW5mbyBiZWxvdy5cbiAgICAgIGNhc2UgR2F0ZXdheUNsb3NlRXZlbnRDb2Rlcy5Ob3JtYWxDbG9zdXJlOlxuICAgICAgY2FzZSBHYXRld2F5Q2xvc2VFdmVudENvZGVzLkdvaW5nQXdheToge1xuICAgICAgICAvLyBJZiB0aGUgc2hhcmQgaXMgbWFya2VkIGFzIGdvaW5nT2ZmbGluZSwgaXQgc3RheXMgZGlzY29ubmVjdGVkLlxuICAgICAgICBpZiAodGhpcy5nb2luZ09mZmxpbmUpIHtcbiAgICAgICAgICB0aGlzLnN0YXRlID0gU2hhcmRTdGF0ZS5EaXNjb25uZWN0ZWQ7XG4gICAgICAgICAgdGhpcy5ldmVudHMuZGlzY29ubmVjdGVkPy4odGhpcyk7XG5cbiAgICAgICAgICB0aGlzLmdvaW5nT2ZmbGluZSA9IGZhbHNlO1xuXG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gT3RoZXJ3aXNlLCB3ZSB3YW50IHRoZSBzaGFyZCB0byBnbyB0aHJvdWdoIHRoZSBkZWZhdWx0IGNhc2Ugd2hlcmUgaXQgZ2V0cyByZXN1bWVkLCBhcyBpdCBtaWdodCBiZSBhbiB1bmV4cGVjdGVkIGNsb3N1cmUgZnJvbSBEaXNjb3JkIG9yIENsb3VkZmxhcmUgZm9yIGV4YW1wbGUsIHNvIHdlIGRvbid0IHVzZSBicmVhayAvIHJldHVybiBoZXJlLlxuICAgICAgfVxuICAgICAgLy8gR2F0ZXdheSBjb25uZWN0aW9uIGNsb3NlcyBvbiB3aGljaCBhIHJlc3VtZSBpcyBhbGxvd2VkLlxuICAgICAgY2FzZSBHYXRld2F5Q2xvc2VFdmVudENvZGVzLlVua25vd25FcnJvcjpcbiAgICAgIGNhc2UgR2F0ZXdheUNsb3NlRXZlbnRDb2Rlcy5Vbmtub3duT3Bjb2RlOlxuICAgICAgY2FzZSBHYXRld2F5Q2xvc2VFdmVudENvZGVzLkRlY29kZUVycm9yOlxuICAgICAgY2FzZSBHYXRld2F5Q2xvc2VFdmVudENvZGVzLlJhdGVMaW1pdGVkOlxuICAgICAgY2FzZSBHYXRld2F5Q2xvc2VFdmVudENvZGVzLkFscmVhZHlBdXRoZW50aWNhdGVkOlxuICAgICAgZGVmYXVsdDoge1xuICAgICAgICAvLyBXZSBkb24ndCB3YW50IHRvIGdldCBpbnRvIGFuIGluZmluaXRlIGxvb3Agd2hlcmUgd2UgcmVzdW1lIGZvcmV2ZXIsIHNvIGlmIHdlIHdlcmUgYWxyZWFkeSByZXN1bWluZyB3ZSBpZGVudGlmeSBpbnN0ZWFkXG4gICAgICAgIHRoaXMuc3RhdGUgPSB0aGlzLnN0YXRlID09PSBTaGFyZFN0YXRlLlJlc3VtaW5nID8gU2hhcmRTdGF0ZS5JZGVudGlmeWluZyA6IFNoYXJkU3RhdGUuUmVzdW1pbmc7XG4gICAgICAgIHRoaXMuZXZlbnRzLmRpc2Nvbm5lY3RlZD8uKHRoaXMpO1xuXG4gICAgICAgIGlmICh0aGlzLnN0YXRlID09PSBTaGFyZFN0YXRlLlJlc3VtaW5nKSB7XG4gICAgICAgICAgYXdhaXQgdGhpcy5yZXN1bWUoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBhd2FpdCB0aGlzLmlkZW50aWZ5KCk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqIEhhbmRsZSBhbiBpbmNvbWluZyBnYXRld2F5IG1lc3NhZ2UuICovXG4gIGFzeW5jIGhhbmRsZU1lc3NhZ2UobWVzc2FnZTogTWVzc2FnZUV2ZW50KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgLy8gVGhlIHdzIG5wbSBwYWNrYWdlIHdpbGwgdXNlIGEgQnVmZmVyLCB3aGlsZSB0aGUgZ2xvYmFsIGJ1aWx0LWluIHdpbGwgdXNlIEFycmF5QnVmZmVyXG4gICAgY29uc3QgaXNDb21wcmVzc2VkID0gbWVzc2FnZS5kYXRhIGluc3RhbmNlb2YgQXJyYXlCdWZmZXIgfHwgbWVzc2FnZS5kYXRhIGluc3RhbmNlb2YgQnVmZmVyO1xuXG4gICAgY29uc3QgZGF0YSA9IGlzQ29tcHJlc3NlZCA/IGF3YWl0IHRoaXMuZGVjb21wcmVzc1BhY2tldChtZXNzYWdlLmRhdGEpIDogKEpTT04ucGFyc2UobWVzc2FnZS5kYXRhKSBhcyBEaXNjb3JkR2F0ZXdheVBheWxvYWQpO1xuXG4gICAgLy8gQ2hlY2sgaWYgdGhlIGRlY29tcHJlc3Npb24gd2FzIG5vdCBzdWNjZXNzZnVsXG4gICAgaWYgKCFkYXRhKSByZXR1cm47XG5cbiAgICBhd2FpdCB0aGlzLmhhbmRsZURpc2NvcmRQYWNrZXQoZGF0YSk7XG4gIH1cblxuICAvKipcbiAgICogRGVjb21wcmVzcyBhIHpsaWIvenN0ZCBjb21wcmVzc2VkIHBhY2tldFxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgYXN5bmMgZGVjb21wcmVzc1BhY2tldChkYXRhOiBBcnJheUJ1ZmZlciB8IEJ1ZmZlcik6IFByb21pc2U8RGlzY29yZEdhdGV3YXlQYXlsb2FkIHwgbnVsbD4ge1xuICAgIC8vIEEgYnVmZmVyIGlzIGEgVWludDhBcnJheSB1bmRlciB0aGUgaG9vZC4gQW4gQXJyYXlCdWZmZXIgaXMgZ2VuZXJpYywgc28gd2UgbmVlZCB0byBjcmVhdGUgdGhlIFVpbnQ4QXJyYXkgdGhhdCB1c2VzIHRoZSB3aG9sZSBBcnJheUJ1ZmZlclxuICAgIGNvbnN0IGNvbXByZXNzZWREYXRhOiBVaW50OEFycmF5ID0gZGF0YSBpbnN0YW5jZW9mIEJ1ZmZlciA/IGRhdGEgOiBuZXcgVWludDhBcnJheShkYXRhKTtcblxuICAgIGlmICh0aGlzLmdhdGV3YXlDb25maWcudHJhbnNwb3J0Q29tcHJlc3Npb24gPT09IFRyYW5zcG9ydENvbXByZXNzaW9uLnpsaWIpIHtcbiAgICAgIGlmICghdGhpcy5pbmZsYXRlKSB7XG4gICAgICAgIHRoaXMubG9nZ2VyLmZhdGFsKCdbU2hhcmRdIHpsaWItc3RyZWFtIHRyYW5zcG9ydCBjb21wcmVzc2lvbiB3YXMgZW5hYmxlZCBidXQgbm8gaW5zdGFuY2Ugb2YgSW5mbGF0ZSB3YXMgZm91bmQuJyk7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuXG4gICAgICAvLyBBbGlhcywgdXNlZCB0byBhdm9pZCBzb21lIG51bGwgY2hlY2tzIGluIHRoZSBQcm9taXNlIGNvbnN0cnVjdG9yXG4gICAgICBjb25zdCBpbmZsYXRlID0gdGhpcy5pbmZsYXRlO1xuXG4gICAgICBjb25zdCB3cml0ZVByb21pc2UgPSBuZXcgUHJvbWlzZTx2b2lkPigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgIGluZmxhdGUud3JpdGUoY29tcHJlc3NlZERhdGEsICdiaW5hcnknLCAoZXJyb3IpID0+IChlcnJvciA/IHJlamVjdChlcnJvcikgOiByZXNvbHZlKCkpKTtcbiAgICAgIH0pO1xuXG4gICAgICBpZiAoIWVuZHNXaXRoTWFya2VyKGNvbXByZXNzZWREYXRhLCBaTElCX1NZTkNfRkxVU0gpKSByZXR1cm4gbnVsbDtcblxuICAgICAgYXdhaXQgd3JpdGVQcm9taXNlO1xuXG4gICAgICBpZiAoIXRoaXMuaW5mbGF0ZUJ1ZmZlcikge1xuICAgICAgICB0aGlzLmxvZ2dlci53YXJuKCdbU2hhcmRdIFRoZSBaTGliIGluZmxhdGUgYnVmZmVyIHdhcyBjbGVhcmVkIGF0IGFuIHVuZXhwZWN0ZWQgbW9tZW50LicpO1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cblxuICAgICAgY29uc3QgZGVjb2RlZERhdGEgPSB0aGlzLnRleHREZWNvZGVyLmRlY29kZSh0aGlzLmluZmxhdGVCdWZmZXIpO1xuICAgICAgdGhpcy5pbmZsYXRlQnVmZmVyID0gbnVsbDtcblxuICAgICAgcmV0dXJuIEpTT04ucGFyc2UoZGVjb2RlZERhdGEpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmdhdGV3YXlDb25maWcudHJhbnNwb3J0Q29tcHJlc3Npb24gPT09IFRyYW5zcG9ydENvbXByZXNzaW9uLnpzdGQpIHtcbiAgICAgIGlmICh0aGlzLnpzdGREZWNvbXByZXNzKSB7XG4gICAgICAgIHRoaXMuenN0ZERlY29tcHJlc3MucHVzaChjb21wcmVzc2VkRGF0YSk7XG5cbiAgICAgICAgY29uc3QgZGVjb21wcmVzc2lvblByb21pc2UgPSBuZXcgUHJvbWlzZTxEaXNjb3JkR2F0ZXdheVBheWxvYWQ+KChyKSA9PiB0aGlzLmRlY29tcHJlc3Npb25Qcm9taXNlc1F1ZXVlLnB1c2gocikpO1xuICAgICAgICByZXR1cm4gYXdhaXQgZGVjb21wcmVzc2lvblByb21pc2U7XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLmluZmxhdGUpIHtcbiAgICAgICAgLy8gQWxpYXMsIHVzZWQgdG8gYXZvaWQgc29tZSBudWxsIGNoZWNrcyBpbiB0aGUgUHJvbWlzZSBjb25zdHJ1Y3RvclxuICAgICAgICBjb25zdCBkZWNvbXByZXNzID0gdGhpcy5pbmZsYXRlO1xuXG4gICAgICAgIGNvbnN0IHdyaXRlUHJvbWlzZSA9IG5ldyBQcm9taXNlPHZvaWQ+KChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICBkZWNvbXByZXNzLndyaXRlKGNvbXByZXNzZWREYXRhLCAnYmluYXJ5JywgKGVycm9yKSA9PiAoZXJyb3IgPyByZWplY3QoZXJyb3IpIDogcmVzb2x2ZSgpKSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGF3YWl0IHdyaXRlUHJvbWlzZTtcblxuICAgICAgICBpZiAoIXRoaXMuaW5mbGF0ZUJ1ZmZlcikge1xuICAgICAgICAgIHRoaXMubG9nZ2VyLndhcm4oJ1tTaGFyZF0gVGhlIFpMaWIgaW5mbGF0ZSBidWZmZXIgd2FzIGNsZWFyZWQgYXQgYW4gdW5leHBlY3RlZCBtb21lbnQuJyk7XG4gICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBkZWNvZGVkRGF0YSA9IHRoaXMudGV4dERlY29kZXIuZGVjb2RlKHRoaXMuaW5mbGF0ZUJ1ZmZlcik7XG4gICAgICAgIHRoaXMuaW5mbGF0ZUJ1ZmZlciA9IG51bGw7XG5cbiAgICAgICAgcmV0dXJuIEpTT04ucGFyc2UoZGVjb2RlZERhdGEpO1xuICAgICAgfVxuXG4gICAgICB0aGlzLmxvZ2dlci5mYXRhbCgnW1NoYXJkXSB6c3RkLXN0cmVhbSB0cmFuc3BvcnQgY29tcHJlc3Npb24gd2FzIGVuYWJsZWQgYnV0IG5vIHpzdGQgZGVjb21wcmVzc29yIHdhcyBmb3VuZC4nKTtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmdhdGV3YXlDb25maWcuY29tcHJlc3MpIHtcbiAgICAgIGNvbnN0IGRlY29tcHJlc3NlZCA9IHpsaWIuaW5mbGF0ZVN5bmMoY29tcHJlc3NlZERhdGEpO1xuICAgICAgY29uc3QgZGVjb2RlZERhdGEgPSB0aGlzLnRleHREZWNvZGVyLmRlY29kZShkZWNvbXByZXNzZWQpO1xuXG4gICAgICByZXR1cm4gSlNPTi5wYXJzZShkZWNvZGVkRGF0YSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICAvKiogSGFuZGxlcyBhIGluY29taW5nIGdhdGV3YXkgcGFja2V0LiAqL1xuICBhc3luYyBoYW5kbGVEaXNjb3JkUGFja2V0KHBhY2tldDogRGlzY29yZEdhdGV3YXlQYXlsb2FkKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgLy8gRWRnZSBjYXNlIHN0YXJ0OiBodHRwczovL2dpdGh1Yi5jb20vZGlzY29yZGVuby9kaXNjb3JkZW5vL2lzc3Vlcy8yMzExXG4gICAgdGhpcy5oZWFydC5sYXN0QWNrID0gRGF0ZS5ub3coKTtcbiAgICB0aGlzLmhlYXJ0LmFja25vd2xlZGdlZCA9IHRydWU7XG4gICAgLy8gRWRnZSBjYXNlIGVuZCFcblxuICAgIHN3aXRjaCAocGFja2V0Lm9wKSB7XG4gICAgICBjYXNlIEdhdGV3YXlPcGNvZGVzLkhlYXJ0YmVhdDoge1xuICAgICAgICBpZiAoIXRoaXMuaXNPcGVuKCkpIHJldHVybjtcblxuICAgICAgICB0aGlzLmhlYXJ0Lmxhc3RCZWF0ID0gRGF0ZS5ub3coKTtcbiAgICAgICAgLy8gRGlzY29yZCByYW5kb21seSBzZW5kcyB0aGlzIHJlcXVpcmluZyBhbiBpbW1lZGlhdGUgaGVhcnRiZWF0IGJhY2suXG4gICAgICAgIC8vIFVzaW5nIGEgZGlyZWN0IHNvY2tldC5zZW5kIGNhbGwgaGVyZSBiZWNhdXNlIGhlYXJ0YmVhdCByZXF1ZXN0cyBhcmUgcmVzZXJ2ZWQgYnkgdXMuXG4gICAgICAgIHRoaXMuc29ja2V0Py5zZW5kKFxuICAgICAgICAgIEpTT04uc3RyaW5naWZ5KHtcbiAgICAgICAgICAgIG9wOiBHYXRld2F5T3Bjb2Rlcy5IZWFydGJlYXQsXG4gICAgICAgICAgICBkOiB0aGlzLnByZXZpb3VzU2VxdWVuY2VOdW1iZXIsXG4gICAgICAgICAgfSksXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMuZXZlbnRzLmhlYXJ0YmVhdD8uKHRoaXMpO1xuXG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgY2FzZSBHYXRld2F5T3Bjb2Rlcy5IZWxsbzoge1xuICAgICAgICBjb25zdCBpbnRlcnZhbCA9IChwYWNrZXQuZCBhcyBEaXNjb3JkSGVsbG8pLmhlYXJ0YmVhdF9pbnRlcnZhbDtcbiAgICAgICAgdGhpcy5sb2dnZXIuZGVidWcoYFtTaGFyZF0gU2hhcmQgIyR7dGhpcy5pZH0gcmVjZWl2ZWQgSGVsbG9gKTtcbiAgICAgICAgdGhpcy5zdGFydEhlYXJ0YmVhdGluZyhpbnRlcnZhbCk7XG5cbiAgICAgICAgaWYgKHRoaXMuc3RhdGUgIT09IFNoYXJkU3RhdGUuUmVzdW1pbmcpIHtcbiAgICAgICAgICBjb25zdCBjdXJyZW50UXVldWUgPSBbLi4udGhpcy5idWNrZXQucXVldWVdO1xuICAgICAgICAgIC8vIEhFTExPIGhhcyBiZWVuIHNlbmQgb24gYSBub24gcmVzdW1lIGFjdGlvbi5cbiAgICAgICAgICAvLyBUaGlzIG1lYW5zIHRoYXQgdGhlIHNoYXJkIHN0YXJ0cyBhIG5ldyBzZXNzaW9uLFxuICAgICAgICAgIC8vIHRoZXJlZm9yZSB0aGUgcmF0ZSBsaW1pdCBpbnRlcnZhbCBoYXMgYmVlbiByZXNldCB0b28uXG4gICAgICAgICAgdGhpcy5idWNrZXQgPSBuZXcgTGVha3lCdWNrZXQoe1xuICAgICAgICAgICAgbWF4OiB0aGlzLmNhbGN1bGF0ZVNhZmVSZXF1ZXN0cygpLFxuICAgICAgICAgICAgcmVmaWxsSW50ZXJ2YWw6IDYwMDAwLFxuICAgICAgICAgICAgcmVmaWxsQW1vdW50OiB0aGlzLmNhbGN1bGF0ZVNhZmVSZXF1ZXN0cygpLFxuICAgICAgICAgICAgbG9nZ2VyOiB0aGlzLmxvZ2dlcixcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIC8vIFF1ZXVlIHNob3VsZCBub3QgYmUgbG9zdCBvbiBhIHJlLWlkZW50aWZ5LlxuICAgICAgICAgIHRoaXMuYnVja2V0LnF1ZXVlLnVuc2hpZnQoLi4uY3VycmVudFF1ZXVlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuZXZlbnRzLmhlbGxvPy4odGhpcyk7XG5cbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBjYXNlIEdhdGV3YXlPcGNvZGVzLkhlYXJ0YmVhdEFDSzoge1xuICAgICAgICAvLyBNYW51YWxseSBjYWxjdWxhdGluZyB0aGUgcm91bmQgdHJpcCB0aW1lIGZvciB1c2VycyB3aG8gbmVlZCBpdC5cbiAgICAgICAgaWYgKHRoaXMuaGVhcnQubGFzdEJlYXQpIHtcbiAgICAgICAgICB0aGlzLmhlYXJ0LnJ0dCA9IHRoaXMuaGVhcnQubGFzdEFjayAtIHRoaXMuaGVhcnQubGFzdEJlYXQ7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmV2ZW50cy5oZWFydGJlYXRBY2s/Lih0aGlzKTtcblxuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIGNhc2UgR2F0ZXdheU9wY29kZXMuUmVjb25uZWN0OiB7XG4gICAgICAgIHRoaXMubG9nZ2VyLmRlYnVnKGBbU2hhcmRdIFJlY2VpdmVkIGEgUmVjb25uZWN0IGZvciBTaGFyZCAjJHt0aGlzLmlkfWApO1xuICAgICAgICB0aGlzLmV2ZW50cy5yZXF1ZXN0ZWRSZWNvbm5lY3Q/Lih0aGlzKTtcblxuICAgICAgICBhd2FpdCB0aGlzLnJlc3VtZSgpO1xuXG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgY2FzZSBHYXRld2F5T3Bjb2Rlcy5JbnZhbGlkU2Vzc2lvbjoge1xuICAgICAgICBjb25zdCByZXN1bWFibGUgPSBwYWNrZXQuZCBhcyBib29sZWFuO1xuICAgICAgICB0aGlzLmxvZ2dlci5kZWJ1ZyhgW1NoYXJkXSBSZWNlaXZlZCBJbnZhbGlkIFNlc3Npb24gZm9yIFNoYXJkICMke3RoaXMuaWR9IHdpdGggcmVzdW1hYmxlIGFzICR7cmVzdW1hYmxlfWApO1xuXG4gICAgICAgIHRoaXMuZXZlbnRzLmludmFsaWRTZXNzaW9uPy4odGhpcywgcmVzdW1hYmxlKTtcblxuICAgICAgICAvLyBXZSBuZWVkIHRvIHdhaXQgZm9yIGEgcmFuZG9tIGFtb3VudCBvZiB0aW1lIGJldHdlZW4gMSBhbmQgNVxuICAgICAgICAvLyBSZWZlcmVuY2U6IGh0dHBzOi8vZGlzY29yZC5jb20vZGV2ZWxvcGVycy9kb2NzL3RvcGljcy9nYXRld2F5I3Jlc3VtaW5nXG4gICAgICAgIGF3YWl0IGRlbGF5KE1hdGguZmxvb3IoKE1hdGgucmFuZG9tKCkgKiA0ICsgMSkgKiAxMDAwKSk7XG5cbiAgICAgICAgdGhpcy5yZXNvbHZlcy5nZXQoJ0lOVkFMSURfU0VTU0lPTicpPy4ocGFja2V0KTtcbiAgICAgICAgdGhpcy5yZXNvbHZlcy5kZWxldGUoJ0lOVkFMSURfU0VTU0lPTicpO1xuXG4gICAgICAgIC8vIFdoZW4gcmVzdW1hYmxlIGlzIGZhbHNlIHdlIG5lZWQgdG8gcmUtaWRlbnRpZnlcbiAgICAgICAgaWYgKCFyZXN1bWFibGUpIHtcbiAgICAgICAgICBhd2FpdCB0aGlzLmlkZW50aWZ5KCk7XG5cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFRoZSBzZXNzaW9uIGlzIGludmFsaWQgYnV0IGFwcGFyZW50bHkgaXQgaXMgcmVzdW1hYmxlXG4gICAgICAgIGF3YWl0IHRoaXMucmVzdW1lKCk7XG5cbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuXG4gICAgc3dpdGNoIChwYWNrZXQudCkge1xuICAgICAgY2FzZSAnUkVTVU1FRCc6XG4gICAgICAgIHRoaXMuc3RhdGUgPSBTaGFyZFN0YXRlLkNvbm5lY3RlZDtcbiAgICAgICAgdGhpcy5ldmVudHMucmVzdW1lZD8uKHRoaXMpO1xuXG4gICAgICAgIHRoaXMubG9nZ2VyLmRlYnVnKGBbU2hhcmRdIFNoYXJkICMke3RoaXMuaWR9IHJlY2VpdmVkIFJFU1VNRURgKTtcblxuICAgICAgICAvLyBDb250aW51ZSB0aGUgcmVxdWVzdHMgd2hpY2ggaGF2ZSBiZWVuIHF1ZXVlZCBzaW5jZSB0aGUgc2hhcmQgd2VudCBvZmZsaW5lLlxuICAgICAgICB0aGlzLm9mZmxpbmVTZW5kUXVldWUuZm9yRWFjaCgocmVzb2x2ZSkgPT4gcmVzb2x2ZSgpKTtcbiAgICAgICAgLy8gU2V0dGluZyB0aGUgbGVuZ3RoIHRvIDAgd2lsbCBkZWxldGUgdGhlIGVsZW1lbnRzIGluIGl0XG4gICAgICAgIHRoaXMub2ZmbGluZVNlbmRRdWV1ZS5sZW5ndGggPSAwO1xuXG4gICAgICAgIHRoaXMucmVzb2x2ZXMuZ2V0KCdSRVNVTUVEJyk/LihwYWNrZXQpO1xuICAgICAgICB0aGlzLnJlc29sdmVzLmRlbGV0ZSgnUkVTVU1FRCcpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ1JFQURZJzoge1xuICAgICAgICBjb25zdCBwYXlsb2FkID0gcGFja2V0LmQgYXMgRGlzY29yZFJlYWR5O1xuXG4gICAgICAgIC8vIEltcG9ydGFudCBmb3IgZnV0dXJlIHJlc3VtZXMuXG4gICAgICAgIHRoaXMucmVzdW1lR2F0ZXdheVVybCA9IHBheWxvYWQucmVzdW1lX2dhdGV3YXlfdXJsO1xuICAgICAgICB0aGlzLnNlc3Npb25JZCA9IHBheWxvYWQuc2Vzc2lvbl9pZDtcblxuICAgICAgICB0aGlzLnN0YXRlID0gU2hhcmRTdGF0ZS5Db25uZWN0ZWQ7XG5cbiAgICAgICAgdGhpcy5sb2dnZXIuZGVidWcoYFtTaGFyZF0gU2hhcmQgIyR7dGhpcy5pZH0gcmVjZWl2ZWQgUkVBRFlgKTtcbiAgICAgICAgdGhpcy5ldmVudHMucmVhZHk/Lih0aGlzKTtcblxuICAgICAgICAvLyBDb250aW51ZSB0aGUgcmVxdWVzdHMgd2hpY2ggaGF2ZSBiZWVuIHF1ZXVlZCBzaW5jZSB0aGUgc2hhcmQgd2VudCBvZmZsaW5lLlxuICAgICAgICAvLyBJbXBvcnRhbnQgd2hlbiB0aGlzIGlzIGEgcmUtaWRlbnRpZnlcbiAgICAgICAgdGhpcy5vZmZsaW5lU2VuZFF1ZXVlLmZvckVhY2goKHJlc29sdmUpID0+IHJlc29sdmUoKSk7XG4gICAgICAgIC8vIFNldHRpbmcgdGhlIGxlbmd0aCB0byAwIHdpbGwgZGVsZXRlIHRoZSBlbGVtZW50cyBpbiBpdFxuICAgICAgICB0aGlzLm9mZmxpbmVTZW5kUXVldWUubGVuZ3RoID0gMDtcblxuICAgICAgICB0aGlzLnJlc29sdmVzLmdldCgnUkVBRFknKT8uKHBhY2tldCk7XG4gICAgICAgIHRoaXMucmVzb2x2ZXMuZGVsZXRlKCdSRUFEWScpO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBVcGRhdGUgdGhlIHNlcXVlbmNlIG51bWJlciBpZiBpdCBpcyBwcmVzZW50XG4gICAgLy8gYHNgIGNhbiBiZSBlaXRoZXIgYG51bGxgIG9yIGEgYG51bWJlcmAuXG4gICAgLy8gSW4gb3JkZXIgdG8gcHJldmVudCB1cGRhdGUgbWlzc2VzIHdoZW4gYHNgIGlzIGAwYCB3ZSBjaGVjayBhZ2FpbnN0IG51bGwuXG4gICAgaWYgKHBhY2tldC5zICE9PSBudWxsKSB7XG4gICAgICB0aGlzLnByZXZpb3VzU2VxdWVuY2VOdW1iZXIgPSBwYWNrZXQucztcbiAgICB9XG5cbiAgICB0aGlzLmV2ZW50cy5tZXNzYWdlPy4odGhpcywgcGFja2V0KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBPdmVycmlkZSBpbiBvcmRlciB0byBtYWtlIHRoZSBzaGFyZHMgcHJlc2VuY2UuXG4gICAqIGFzeW5jIGluIGNhc2UgZGV2cyBjcmVhdGUgdGhlIHByZXNlbmNlIGJhc2VkIG9uIGVnLiBkYXRhYmFzZSB2YWx1ZXMuXG4gICAqIFBhc3NpbmcgdGhlIHNoYXJkJ3MgaWQgdGhlcmUgdG8gbWFrZSBpdCBlYXNpZXIgZm9yIHRoZSBkZXYgdG8gdXNlIHRoaXMgZnVuY3Rpb24uXG4gICAqL1xuICBhc3luYyBtYWtlUHJlc2VuY2UoKTogUHJvbWlzZTxEaXNjb3JkVXBkYXRlUHJlc2VuY2UgfCB1bmRlZmluZWQ+IHtcbiAgICByZXR1cm47XG4gIH1cblxuICAvKipcbiAgICogVGhpcyBmdW5jdGlvbiBjb21tdW5pY2F0ZXMgd2l0aCB0aGUgbWFuYWdlbWVudCBwcm9jZXNzLCBpbiBvcmRlciB0byBrbm93IHdoZXRoZXIgaXRzIGZyZWUgdG8gaWRlbnRpZnkuXG4gICAqIFdoZW4gdGhpcyBmdW5jdGlvbiByZXNvbHZlcywgdGhpcyBtZWFucyB0aGF0IHRoZSBzaGFyZCBpcyBhbGxvd2VkIHRvIHNlbmQgYW4gaWRlbnRpZnkgcGF5bG9hZCB0byBkaXNjb3JkLlxuICAgKi9cbiAgYXN5bmMgcmVxdWVzdElkZW50aWZ5KCk6IFByb21pc2U8dm9pZD4ge31cblxuICAvKiogU3RhcnQgc2VuZGluZyBoZWFydGJlYXQgcGF5bG9hZHMgdG8gRGlzY29yZCBpbiB0aGUgcHJvdmlkZWQgaW50ZXJ2YWwuICovXG4gIHN0YXJ0SGVhcnRiZWF0aW5nKGludGVydmFsOiBudW1iZXIpOiB2b2lkIHtcbiAgICB0aGlzLmxvZ2dlci5kZWJ1ZyhgW1NoYXJkXSBTdGFydCBoZWFydGJlYXRpbmcgb24gU2hhcmQgIyR7dGhpcy5pZH1gKTtcblxuICAgIC8vIElmIG9sZCBoZWFydGJlYXN0IGV4aXN0IGxpa2UgYWZ0ZXIgcmVzdW1lLCBjbGVhciB0aGUgb2xkIG9uZXMuXG4gICAgdGhpcy5zdG9wSGVhcnRiZWF0aW5nKCk7XG5cbiAgICB0aGlzLmhlYXJ0LmludGVydmFsID0gaW50ZXJ2YWw7XG5cbiAgICAvLyBPbmx5IHNldCB0aGUgc2hhcmQncyBzdGF0ZSB0byBgVW5pZGVudGlmaWVkYFxuICAgIC8vIGlmIGhlYXJ0YmVhdGluZyBoYXMgbm90IGJlZW4gc3RhcnRlZCBkdWUgdG8gYW4gaWRlbnRpZnkgb3IgcmVzdW1lIGFjdGlvbi5cbiAgICBpZiAoW1NoYXJkU3RhdGUuRGlzY29ubmVjdGVkLCBTaGFyZFN0YXRlLk9mZmxpbmVdLmluY2x1ZGVzKHRoaXMuc3RhdGUpKSB7XG4gICAgICB0aGlzLmxvZ2dlci5kZWJ1ZyhgW1NoYXJkXSBTaGFyZCBpcyBkaXNjb25uZWN0ZWQgb3Igb2ZmbGluZSBidXQgdGhlIGhlYXJ0YmVhdCB3YXMgc3RhcnRlZCAjJHt0aGlzLmlkfWApO1xuICAgICAgdGhpcy5zdGF0ZSA9IFNoYXJkU3RhdGUuVW5pZGVudGlmaWVkO1xuICAgIH1cblxuICAgIC8vIFRoZSBmaXJzdCBoZWFydGJlYXQgbmVlZHMgdG8gYmUgc2VuZCB3aXRoIGEgcmFuZG9tIGRlbGF5IGJldHdlZW4gYDBgIGFuZCBgaW50ZXJ2YWxgXG4gICAgLy8gVXNpbmcgYSBgc2V0VGltZW91dChfLCBqaXR0ZXIpYCBoZXJlIHRvIGFjY29tcGxpc2ggdGhhdC5cbiAgICAvLyBgTWF0aC5yYW5kb20oKWAgY2FuIGJlIGAwYCBzbyB3ZSB1c2UgYDAuNWAgaWYgdGhpcyBoYXBwZW5zXG4gICAgLy8gUmVmZXJlbmNlOiBodHRwczovL2Rpc2NvcmQuY29tL2RldmVsb3BlcnMvZG9jcy90b3BpY3MvZ2F0ZXdheSNoZWFydGJlYXRpbmdcbiAgICBjb25zdCBqaXR0ZXIgPSBNYXRoLmNlaWwodGhpcy5oZWFydC5pbnRlcnZhbCAqIChNYXRoLnJhbmRvbSgpIHx8IDAuNSkpO1xuXG4gICAgdGhpcy5oZWFydC50aW1lb3V0SWQgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMubG9nZ2VyLmRlYnVnKGBbU2hhcmRdIEJlZ2lubmluZyBoZWFydGJlYXRpbmcgcHJvY2VzcyBmb3IgU2hhcmQgIyR7dGhpcy5pZH1gKTtcblxuICAgICAgaWYgKCF0aGlzLmlzT3BlbigpKSByZXR1cm47XG5cbiAgICAgIHRoaXMubG9nZ2VyLmRlYnVnKGBbU2hhcmRdIEhlYXJ0YmVhdGluZyBvbiBTaGFyZCAjJHt0aGlzLmlkfS4gUHJldmlvdXMgc2VxdWVuY2UgbnVtYmVyOiAke3RoaXMucHJldmlvdXNTZXF1ZW5jZU51bWJlcn1gKTtcblxuICAgICAgLy8gVXNpbmcgYSBkaXJlY3Qgc29ja2V0LnNlbmQgY2FsbCBoZXJlIGJlY2F1c2UgaGVhcnRiZWF0IHJlcXVlc3RzIGFyZSByZXNlcnZlZCBieSB1cy5cbiAgICAgIHRoaXMuc29ja2V0Py5zZW5kKFxuICAgICAgICBKU09OLnN0cmluZ2lmeSh7XG4gICAgICAgICAgb3A6IEdhdGV3YXlPcGNvZGVzLkhlYXJ0YmVhdCxcbiAgICAgICAgICBkOiB0aGlzLnByZXZpb3VzU2VxdWVuY2VOdW1iZXIsXG4gICAgICAgIH0pLFxuICAgICAgKTtcblxuICAgICAgdGhpcy5oZWFydC5sYXN0QmVhdCA9IERhdGUubm93KCk7XG4gICAgICB0aGlzLmhlYXJ0LmFja25vd2xlZGdlZCA9IGZhbHNlO1xuXG4gICAgICAvLyBBZnRlciB0aGUgcmFuZG9tIGhlYXJ0YmVhdCBqaXR0ZXIgd2UgY2FuIHN0YXJ0IGEgbm9ybWFsIGludGVydmFsLlxuICAgICAgdGhpcy5oZWFydC5pbnRlcnZhbElkID0gc2V0SW50ZXJ2YWwoYXN5bmMgKCkgPT4ge1xuICAgICAgICBpZiAoIXRoaXMuaXNPcGVuKCkpIHtcbiAgICAgICAgICB0aGlzLmxvZ2dlci5kZWJ1ZyhgW1NoYXJkXSBTaGFyZCAjJHt0aGlzLmlkfSBpcyBub3Qgb3BlbiwgYnV0IGF0dGVtcHRlZCBoZWFydGJlYXQsIGlnbm9yaW5nLmApO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFRoZSBTaGFyZCBkaWQgbm90IHJlY2VpdmUgYSBoZWFydGJlYXQgQUNLIGZyb20gRGlzY29yZCBpbiB0aW1lLFxuICAgICAgICAvLyB0aGVyZWZvcmUgd2UgaGF2ZSB0byBhc3N1bWUgdGhhdCB0aGUgY29ubmVjdGlvbiBoYXMgZmFpbGVkIG9yIGdvdCBcInpvbWJpZWRcIi5cbiAgICAgICAgLy8gVGhlIFNoYXJkIG5lZWRzIHRvIHN0YXJ0IGEgcmUtaWRlbnRpZnkgYWN0aW9uIGFjY29yZGluZ2x5LlxuICAgICAgICAvLyBSZWZlcmVuY2U6IGh0dHBzOi8vZGlzY29yZC5jb20vZGV2ZWxvcGVycy9kb2NzL3RvcGljcy9nYXRld2F5I2hlYXJ0YmVhdGluZy1leGFtcGxlLWdhdGV3YXktaGVhcnRiZWF0LWFja1xuICAgICAgICBpZiAoIXRoaXMuaGVhcnQuYWNrbm93bGVkZ2VkKSB7XG4gICAgICAgICAgdGhpcy5sb2dnZXIuZGVidWcoYFtTaGFyZF0gSGVhcnRiZWF0IG5vdCBhY2tub3dsZWRnZWQgZm9yIFNoYXJkICMke3RoaXMuaWR9LiBBc3N1bWluZyB6b21iaWVkIGNvbm5lY3Rpb24uYCk7XG4gICAgICAgICAgYXdhaXQgdGhpcy5jbG9zZShTaGFyZFNvY2tldENsb3NlQ29kZXMuWm9tYmllZENvbm5lY3Rpb24sICdab21iaWVkIGNvbm5lY3Rpb24sIGRpZCBub3QgcmVjZWl2ZSBhbiBoZWFydGJlYXQgQUNLIGluIHRpbWUuJyk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5sb2dnZXIuZGVidWcoYFtTaGFyZF0gSGVhcnRiZWF0aW5nIG9uIFNoYXJkICMke3RoaXMuaWR9LiBQcmV2aW91cyBzZXF1ZW5jZSBudW1iZXI6ICR7dGhpcy5wcmV2aW91c1NlcXVlbmNlTnVtYmVyfWApO1xuXG4gICAgICAgIC8vIFVzaW5nIGEgZGlyZWN0IHNvY2tldC5zZW5kIGNhbGwgaGVyZSBiZWNhdXNlIGhlYXJ0YmVhdCByZXF1ZXN0cyBhcmUgcmVzZXJ2ZWQgYnkgdXMuXG4gICAgICAgIHRoaXMuc29ja2V0Py5zZW5kKFxuICAgICAgICAgIEpTT04uc3RyaW5naWZ5KHtcbiAgICAgICAgICAgIG9wOiBHYXRld2F5T3Bjb2Rlcy5IZWFydGJlYXQsXG4gICAgICAgICAgICBkOiB0aGlzLnByZXZpb3VzU2VxdWVuY2VOdW1iZXIsXG4gICAgICAgICAgfSksXG4gICAgICAgICk7XG5cbiAgICAgICAgdGhpcy5oZWFydC5sYXN0QmVhdCA9IERhdGUubm93KCk7XG4gICAgICAgIHRoaXMuaGVhcnQuYWNrbm93bGVkZ2VkID0gZmFsc2U7XG5cbiAgICAgICAgdGhpcy5ldmVudHMuaGVhcnRiZWF0Py4odGhpcyk7XG4gICAgICB9LCB0aGlzLmhlYXJ0LmludGVydmFsKTtcbiAgICB9LCBqaXR0ZXIpO1xuICB9XG5cbiAgLyoqIFN0b3AgdGhlIGhlYXJ0YmVhdGluZyBwcm9jZXNzIHdpdGggZGlzY29yZC4gKi9cbiAgc3RvcEhlYXJ0YmVhdGluZygpOiB2b2lkIHtcbiAgICAvLyBDbGVhciB0aGUgcmVndWxhciBoZWFydGJlYXQgaW50ZXJ2YWwuXG4gICAgY2xlYXJJbnRlcnZhbCh0aGlzLmhlYXJ0LmludGVydmFsSWQpO1xuICAgIC8vIEl0J3MgcG9zc2libGUgdGhhdCB0aGUgU2hhcmQgZ290IGNsb3NlZCBiZWZvcmUgdGhlIGZpcnN0IGppdHRlcmVkIGhlYXJ0YmVhdC5cbiAgICAvLyBUbyBnbyBzYWZlIHdlIHNob3VsZCBjbGVhciB0aGUgcmVsYXRlZCB0aW1lb3V0IHRvby5cbiAgICBjbGVhclRpbWVvdXQodGhpcy5oZWFydC50aW1lb3V0SWQpO1xuICB9XG59XG5cbi8qKiBDaGVjayBpZiB0aGUgYnVmZmVyIGVuZHMgd2l0aCB0aGUgbWFya2VyICovXG5mdW5jdGlvbiBlbmRzV2l0aE1hcmtlcihidWZmZXI6IFVpbnQ4QXJyYXksIG1hcmtlcjogVWludDhBcnJheSkge1xuICBpZiAoYnVmZmVyLmxlbmd0aCA8IG1hcmtlci5sZW5ndGgpIHJldHVybiBmYWxzZTtcblxuICBmb3IgKGxldCBpID0gMDsgaSA8IG1hcmtlci5sZW5ndGg7IGkrKykge1xuICAgIGlmIChidWZmZXJbYnVmZmVyLmxlbmd0aCAtIG1hcmtlci5sZW5ndGggKyBpXSAhPT0gbWFya2VyW2ldKSByZXR1cm4gZmFsc2U7XG4gIH1cblxuICByZXR1cm4gdHJ1ZTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBTaGFyZENyZWF0ZU9wdGlvbnMge1xuICAvKiogVGhlIHNoYXJkIGlkICovXG4gIGlkOiBudW1iZXI7XG4gIC8qKiBUaGUgY29ubmVjdGlvbiBkZXRhaWxzICovXG4gIGNvbm5lY3Rpb246IFNoYXJkR2F0ZXdheUNvbmZpZztcbiAgLyoqIFRoZSBldmVudCBoYW5kbGVycyBmb3IgZXZlbnRzIG9uIHRoZSBzaGFyZC4gKi9cbiAgZXZlbnRzOiBTaGFyZEV2ZW50cztcbiAgLyoqIFRoZSBsb2dnZXIgZm9yIHRoZSBzaGFyZCAqL1xuICBsb2dnZXI/OiBQaWNrPHR5cGVvZiBsb2dnZXIsICdkZWJ1ZycgfCAnaW5mbycgfCAnd2FybicgfCAnZXJyb3InIHwgJ2ZhdGFsJz47XG4gIC8qKiBUaGUgaGFuZGxlciB0byByZXF1ZXN0IGEgc3BhY2UgdG8gbWFrZSBhbiBpZGVudGlmeSByZXF1ZXN0LiAqL1xuICByZXF1ZXN0SWRlbnRpZnk/OiAoKSA9PiBQcm9taXNlPHZvaWQ+O1xuICAvKiogRnVuY3Rpb24gdG8gY3JlYXRlIHRoZSBib3Qgc3RhdHVzIHRvIHNlbmQgb24gSWRlbnRpZnkgcmVxdWVzdHMgKi9cbiAgbWFrZVByZXNlbmNlPzogKCkgPT4gUHJvbWlzZTxEaXNjb3JkVXBkYXRlUHJlc2VuY2UgfCB1bmRlZmluZWQ+O1xufVxuXG5leHBvcnQgZGVmYXVsdCBEaXNjb3JkZW5vU2hhcmQ7XG4iXSwibmFtZXMiOlsiQnVmZmVyIiwiemxpYiIsIkdhdGV3YXlDbG9zZUV2ZW50Q29kZXMiLCJHYXRld2F5T3Bjb2RlcyIsImRlbGF5IiwiTGVha3lCdWNrZXQiLCJsb2dnZXIiLCJOb2RlV2ViU29ja2V0IiwiU2hhcmRTb2NrZXRDbG9zZUNvZGVzIiwiU2hhcmRTdGF0ZSIsIlRyYW5zcG9ydENvbXByZXNzaW9uIiwiWkxJQl9TWU5DX0ZMVVNIIiwiVWludDhBcnJheSIsImZ6c3RkIiwiZ2V0RlpTdGQiLCJEaXNjb3JkZW5vU2hhcmQiLCJvcHRpb25zIiwibWF4UmVxdWVzdHNQZXJSYXRlTGltaXRUaWNrIiwicHJldmlvdXNTZXF1ZW5jZU51bWJlciIsInJhdGVMaW1pdFJlc2V0SW50ZXJ2YWwiLCJzdGF0ZSIsIk9mZmxpbmUiLCJyZXN1bWVHYXRld2F5VXJsIiwiZXZlbnRzIiwib2ZmbGluZVNlbmRRdWV1ZSIsInJlc29sdmVzIiwiTWFwIiwiZ29pbmdPZmZsaW5lIiwidGV4dERlY29kZXIiLCJUZXh0RGVjb2RlciIsImluZmxhdGVCdWZmZXIiLCJkZWNvbXByZXNzaW9uUHJvbWlzZXNRdWV1ZSIsImlkIiwiY29ubmVjdGlvbiIsImhlYXJ0IiwiYWNrbm93bGVkZ2VkIiwiaW50ZXJ2YWwiLCJyZXF1ZXN0SWRlbnRpZnkiLCJtYWtlUHJlc2VuY2UiLCJidWNrZXQiLCJtYXgiLCJjYWxjdWxhdGVTYWZlUmVxdWVzdHMiLCJyZWZpbGxBbW91bnQiLCJyZWZpbGxJbnRlcnZhbCIsImdhdGV3YXlDb25maWciLCJjb25uZWN0aW9uVXJsIiwidXJsIiwic2FmZVJlcXVlc3RzIiwiTWF0aCIsImNlaWwiLCJjaGVja09mZmxpbmUiLCJoaWdoUHJpb3JpdHkiLCJpc09wZW4iLCJQcm9taXNlIiwicmVzb2x2ZSIsInVuc2hpZnQiLCJwdXNoIiwiY2xvc2UiLCJjb2RlIiwicmVhc29uIiwiZGVidWciLCJzb2NrZXQiLCJyZWFkeVN0YXRlIiwiT1BFTiIsIk5vcm1hbENsb3N1cmUiLCJHb2luZ0F3YXkiLCJwcm9taXNlIiwicmVzb2x2ZUFmdGVyQ2xvc2UiLCJ1bmRlZmluZWQiLCJjb25uZWN0IiwiSWRlbnRpZnlpbmciLCJSZXN1bWluZyIsImluY2x1ZGVzIiwiQ29ubmVjdGluZyIsImNvbm5lY3RpbmciLCJVUkwiLCJzZWFyY2hQYXJhbXMiLCJzZXQiLCJ2ZXJzaW9uIiwidG9TdHJpbmciLCJ0cmFuc3BvcnRDb21wcmVzc2lvbiIsImluZmxhdGUiLCJjcmVhdGVJbmZsYXRlIiwiZmluaXNoRmx1c2giLCJjb25zdGFudHMiLCJaX1NZTkNfRkxVU0giLCJjaHVua1NpemUiLCJvbiIsImUiLCJlcnJvciIsImRhdGEiLCJuZXdCdWZmZXIiLCJieXRlTGVuZ3RoIiwienN0ZCIsImNyZWF0ZVpzdGREZWNvbXByZXNzIiwiY2F0Y2giLCJ3YXJuIiwiZGVsZXRlIiwienN0ZERlY29tcHJlc3MiLCJEZWNvbXByZXNzIiwiZGVjb2RlZERhdGEiLCJkZWNvZGUiLCJwYXJzZWREYXRhIiwiSlNPTiIsInBhcnNlIiwic2hpZnQiLCJjb21wcmVzcyIsInNob3VsZFVzZUJ1aWx0aW4iLCJSZWZsZWN0IiwiaGFzIiwiZ2xvYmFsVGhpcyIsIldlYlNvY2tldCIsImJpbmFyeVR5cGUiLCJvbmVycm9yIiwiZXZlbnQiLCJoYW5kbGVFcnJvciIsIm9uY2xvc2UiLCJjbG9zZUV2ZW50IiwiaGFuZGxlQ2xvc2UiLCJvbm1lc3NhZ2UiLCJtZXNzYWdlRXZlbnQiLCJoYW5kbGVNZXNzYWdlIiwib25vcGVuIiwiVW5pZGVudGlmaWVkIiwiY29ubmVjdGVkIiwiaWRlbnRpZnkiLCJieXBhc3NSZXF1ZXN0IiwiUmVJZGVudGlmeWluZyIsImlkZW50aWZ5aW5nIiwic2VuZCIsIm9wIiwiSWRlbnRpZnkiLCJkIiwidG9rZW4iLCJwcm9wZXJ0aWVzIiwiaW50ZW50cyIsInNoYXJkIiwidG90YWxTaGFyZHMiLCJwcmVzZW5jZSIsInJlc3VtZSIsIlJlc3VtZUNsb3NpbmdPbGRDb25uZWN0aW9uIiwic2Vzc2lvbklkIiwiUmVzdW1lIiwic2Vzc2lvbl9pZCIsInNlcSIsIm1lc3NhZ2UiLCJhY3F1aXJlIiwic3RyaW5naWZ5Iiwic2h1dGRvd24iLCJTaHV0ZG93biIsInN0b3BIZWFydGJlYXRpbmciLCJUZXN0aW5nRmluaXNoZWQiLCJkaXNjb25uZWN0ZWQiLCJSZXNoYXJkZWQiLCJEaXNjb25uZWN0ZWQiLCJBdXRoZW50aWNhdGlvbkZhaWxlZCIsIkludmFsaWRTaGFyZCIsIlNoYXJkaW5nUmVxdWlyZWQiLCJJbnZhbGlkQXBpVmVyc2lvbiIsIkludmFsaWRJbnRlbnRzIiwiRGlzYWxsb3dlZEludGVudHMiLCJFcnJvciIsIk5vdEF1dGhlbnRpY2F0ZWQiLCJJbnZhbGlkU2VxIiwiU2Vzc2lvblRpbWVkT3V0IiwiVW5rbm93bkVycm9yIiwiVW5rbm93bk9wY29kZSIsIkRlY29kZUVycm9yIiwiUmF0ZUxpbWl0ZWQiLCJBbHJlYWR5QXV0aGVudGljYXRlZCIsImlzQ29tcHJlc3NlZCIsIkFycmF5QnVmZmVyIiwiZGVjb21wcmVzc1BhY2tldCIsImhhbmRsZURpc2NvcmRQYWNrZXQiLCJjb21wcmVzc2VkRGF0YSIsImZhdGFsIiwid3JpdGVQcm9taXNlIiwicmVqZWN0Iiwid3JpdGUiLCJlbmRzV2l0aE1hcmtlciIsImRlY29tcHJlc3Npb25Qcm9taXNlIiwiciIsImRlY29tcHJlc3MiLCJkZWNvbXByZXNzZWQiLCJpbmZsYXRlU3luYyIsInBhY2tldCIsImxhc3RBY2siLCJEYXRlIiwibm93IiwiSGVhcnRiZWF0IiwibGFzdEJlYXQiLCJoZWFydGJlYXQiLCJIZWxsbyIsImhlYXJ0YmVhdF9pbnRlcnZhbCIsInN0YXJ0SGVhcnRiZWF0aW5nIiwiY3VycmVudFF1ZXVlIiwicXVldWUiLCJoZWxsbyIsIkhlYXJ0YmVhdEFDSyIsInJ0dCIsImhlYXJ0YmVhdEFjayIsIlJlY29ubmVjdCIsInJlcXVlc3RlZFJlY29ubmVjdCIsIkludmFsaWRTZXNzaW9uIiwicmVzdW1hYmxlIiwiaW52YWxpZFNlc3Npb24iLCJmbG9vciIsInJhbmRvbSIsImdldCIsInQiLCJDb25uZWN0ZWQiLCJyZXN1bWVkIiwiZm9yRWFjaCIsImxlbmd0aCIsInBheWxvYWQiLCJyZXN1bWVfZ2F0ZXdheV91cmwiLCJyZWFkeSIsInMiLCJqaXR0ZXIiLCJ0aW1lb3V0SWQiLCJzZXRUaW1lb3V0IiwiaW50ZXJ2YWxJZCIsInNldEludGVydmFsIiwiWm9tYmllZENvbm5lY3Rpb24iLCJjbGVhckludGVydmFsIiwiY2xlYXJUaW1lb3V0IiwiYnVmZmVyIiwibWFya2VyIiwiaSJdLCJtYXBwaW5ncyI6IkFBQUEsU0FBU0EsTUFBTSxRQUFRLGNBQWM7QUFDckMsT0FBT0MsVUFBVSxZQUFZO0FBRTdCLFNBQVNDLHNCQUFzQixFQUFFQyxjQUFjLFFBQVEsb0JBQW9CO0FBQzNFLFNBQVNDLEtBQUssRUFBRUMsV0FBVyxFQUFFQyxNQUFNLFFBQVEsb0JBQW9CO0FBRS9ELE9BQU9DLG1CQUFtQixLQUFLO0FBQy9CLFNBSUVDLHFCQUFxQixFQUVyQkMsVUFBVSxFQUNWQyxvQkFBb0IsUUFDZixhQUFhO0FBRXBCLE1BQU1DLGtCQUFrQixJQUFJQyxXQUFXO0lBQUM7SUFBSztJQUFLO0lBQU07Q0FBSztBQUU3RCxJQUFJQztBQUVKLHdFQUF3RSxHQUN4RSxlQUFlQztJQUNiLE9BQVFELFVBQVUsTUFBTSxNQUFNLENBQUM7QUFDakM7QUFFQSxPQUFPLE1BQU1FO0lBMkRYLFlBQVlDLE9BQTJCLENBQUU7UUFwRHpDLDBIQUEwSCxRQUMxSEMsOEJBQXNDO1FBQ3RDLDBDQUEwQyxRQUMxQ0MseUJBQXdDO1FBQ3hDLDRFQUE0RSxRQUM1RUMseUJBQWlDO1FBS2pDLHdDQUF3QyxRQUN4Q0MsUUFBUVgsV0FBV1ksT0FBTztRQUMxQixpRkFBaUYsUUFDakZDLG1CQUEyQjtRQUMzQixzQ0FBc0MsUUFDdENDLFNBQXNCLENBQUM7UUFDdkIsbUdBQW1HLFFBQ25HQyxtQkFBbUMsRUFBRTtRQUNyQyxpRkFBaUYsUUFDakZDLFdBQVcsSUFBSUM7UUFLZjs7Ozs7Ozs7R0FRQyxRQUNEQyxlQUFlO1FBQ2YsK0NBQStDLFFBQy9DQyxjQUFjLElBQUlDO1FBR2xCLHlCQUF5QixR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
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,cAAc,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,cAAc,CAAC;AAC7B,cAAc,YAAY,CAAC;AAC3B,cAAc,YAAY,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -2,4 +2,4 @@ export * from './manager.js';
|
|
|
2
2
|
export * from './Shard.js';
|
|
3
3
|
export * from './types.js';
|
|
4
4
|
|
|
5
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
5
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9pbmRleC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICcuL21hbmFnZXIuanMnO1xuZXhwb3J0ICogZnJvbSAnLi9TaGFyZC5qcyc7XG5leHBvcnQgKiBmcm9tICcuL3R5cGVzLmpzJztcbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLGVBQWU7QUFDN0IsY0FBYyxhQUFhO0FBQzNCLGNBQWMsYUFBYSJ9
|
package/dist/manager.d.ts
CHANGED
|
@@ -19,11 +19,6 @@ export interface CreateGatewayManagerOptions {
|
|
|
19
19
|
* @default 5300
|
|
20
20
|
*/
|
|
21
21
|
spawnShardDelay?: number;
|
|
22
|
-
/**
|
|
23
|
-
* Whether to send the discord packets in snake case form.
|
|
24
|
-
* @default false
|
|
25
|
-
*/
|
|
26
|
-
preferSnakeCase?: boolean;
|
|
27
22
|
/**
|
|
28
23
|
* Total amount of shards your bot uses. Useful for zero-downtime updates or resharding.
|
|
29
24
|
* @default 1
|
package/dist/manager.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"manager.d.ts","sourceRoot":"","sources":["../src/manager.ts"],"names":[],"mappings":"AACA,OAAO,EACL,KAAK,UAAU,EACf,KAAK,SAAS,EACd,KAAK,QAAQ,EACb,KAAK,oBAAoB,EACzB,KAAK,qBAAqB,EAE1B,KAAK,qBAAqB,EAG1B,KAAK,mBAAmB,EACzB,MAAM,mBAAmB,
|
|
1
|
+
{"version":3,"file":"manager.d.ts","sourceRoot":"","sources":["../src/manager.ts"],"names":[],"mappings":"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"}
|
package/dist/manager.js
CHANGED
|
@@ -35,7 +35,6 @@ export function createGatewayManager(options) {
|
|
|
35
35
|
shardsPerWorker: options.shardsPerWorker ?? 25,
|
|
36
36
|
spawnShardDelay: options.spawnShardDelay ?? 5300,
|
|
37
37
|
spreadShardsInRoundRobin: options.spreadShardsInRoundRobin ?? false,
|
|
38
|
-
preferSnakeCase: options.preferSnakeCase ?? false,
|
|
39
38
|
shards: new Map(),
|
|
40
39
|
buckets: new Map(),
|
|
41
40
|
cache: {
|
|
@@ -150,11 +149,6 @@ export function createGatewayManager(options) {
|
|
|
150
149
|
requestIdentify: async ()=>await gateway.requestIdentify(shardId),
|
|
151
150
|
makePresence: gateway.makePresence
|
|
152
151
|
});
|
|
153
|
-
if (gateway.preferSnakeCase) {
|
|
154
|
-
shard.forwardToBot = async (payload)=>{
|
|
155
|
-
shard.events?.message?.(shard, payload);
|
|
156
|
-
};
|
|
157
|
-
}
|
|
158
152
|
gateway.resharding.shards.set(shardId, shard);
|
|
159
153
|
await shard.identify();
|
|
160
154
|
gateway.logger.debug(`[Resharding] Shard #${shardId} identified.`);
|
|
@@ -307,11 +301,6 @@ export function createGatewayManager(options) {
|
|
|
307
301
|
requestIdentify: async ()=>await gateway.requestIdentify(shardId),
|
|
308
302
|
makePresence: gateway.makePresence
|
|
309
303
|
});
|
|
310
|
-
if (this.preferSnakeCase) {
|
|
311
|
-
shard.forwardToBot = async (payload)=>{
|
|
312
|
-
shard.events.message?.(shard, payload);
|
|
313
|
-
};
|
|
314
|
-
}
|
|
315
304
|
this.shards.set(shardId, shard);
|
|
316
305
|
}
|
|
317
306
|
await shard.identify();
|
|
@@ -461,4 +450,4 @@ export function createGatewayManager(options) {
|
|
|
461
450
|
return gateway;
|
|
462
451
|
}
|
|
463
452
|
|
|
464
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9tYW5hZ2VyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHJhbmRvbUJ5dGVzIH0gZnJvbSAnbm9kZTpjcnlwdG8nXG5pbXBvcnQge1xuICB0eXBlIEF0TGVhc3RPbmUsXG4gIHR5cGUgQmlnU3RyaW5nLFxuICB0eXBlIENhbWVsaXplLFxuICB0eXBlIERpc2NvcmRHZXRHYXRld2F5Qm90LFxuICB0eXBlIERpc2NvcmRNZW1iZXJXaXRoVXNlcixcbiAgdHlwZSBEaXNjb3JkUmVhZHksXG4gIHR5cGUgRGlzY29yZFVwZGF0ZVByZXNlbmNlLFxuICBHYXRld2F5SW50ZW50cyxcbiAgR2F0ZXdheU9wY29kZXMsXG4gIHR5cGUgUmVxdWVzdEd1aWxkTWVtYmVycyxcbn0gZnJvbSAnQGRpc2NvcmRlbm8vdHlwZXMnXG5pbXBvcnQgeyBDb2xsZWN0aW9uLCBqc29uU2FmZVJlcGxhY2VyLCBMZWFreUJ1Y2tldCwgbG9nZ2VyIH0gZnJvbSAnQGRpc2NvcmRlbm8vdXRpbHMnXG5pbXBvcnQgU2hhcmQgZnJvbSAnLi9TaGFyZC5qcydcbmltcG9ydCB7IHR5cGUgU2hhcmRFdmVudHMsIFNoYXJkU29ja2V0Q2xvc2VDb2RlcywgdHlwZSBTaGFyZFNvY2tldFJlcXVlc3QsIHR5cGUgVHJhbnNwb3J0Q29tcHJlc3Npb24sIHR5cGUgVXBkYXRlVm9pY2VTdGF0ZSB9IGZyb20gJy4vdHlwZXMuanMnXG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVHYXRld2F5TWFuYWdlcihvcHRpb25zOiBDcmVhdGVHYXRld2F5TWFuYWdlck9wdGlvbnMpOiBHYXRld2F5TWFuYWdlciB7XG4gIGNvbnN0IGNvbm5lY3Rpb25PcHRpb25zID0gb3B0aW9ucy5jb25uZWN0aW9uID8/IHtcbiAgICB1cmw6ICd3c3M6Ly9nYXRld2F5LmRpc2NvcmQuZ2cnLFxuICAgIHNoYXJkczogMSxcbiAgICBzZXNzaW9uU3RhcnRMaW1pdDoge1xuICAgICAgbWF4Q29uY3VycmVuY3k6IDEsXG4gICAgICByZW1haW5pbmc6IDEwMDAsXG4gICAgICB0b3RhbDogMTAwMCxcbiAgICAgIHJlc2V0QWZ0ZXI6IDEwMDAgKiA2MCAqIDYwICogMjQsXG4gICAgfSxcbiAgfVxuXG4gIGNvbnN0IGdhdGV3YXk6IEdhdGV3YXlNYW5hZ2VyID0ge1xuICAgIGV2ZW50czogb3B0aW9ucy5ldmVudHMgPz8ge30sXG4gICAgY29tcHJlc3M6IG9wdGlvbnMuY29tcHJlc3MgPz8gZmFsc2UsXG4gICAgdHJhbnNwb3J0Q29tcHJlc3Npb246IG9wdGlvbnMudHJhbnNwb3J0Q29tcHJlc3Npb24gPz8gbnVsbCxcbiAgICBpbnRlbnRzOiBvcHRpb25zLmludGVudHMgPz8gMCxcbiAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICBvczogb3B0aW9ucy5wcm9wZXJ0aWVzPy5vcyA/PyBwcm9jZXNzLnBsYXRmb3JtLFxuICAgICAgYnJvd3Nlcjogb3B0aW9ucy5wcm9wZXJ0aWVzPy5icm93c2VyID8/ICdEaXNjb3JkZW5vJyxcbiAgICAgIGRldmljZTogb3B0aW9ucy5wcm9wZXJ0aWVzPy5kZXZpY2UgPz8gJ0Rpc2NvcmRlbm8nLFxuICAgIH0sXG4gICAgdG9rZW46IG9wdGlvbnMudG9rZW4sXG4gICAgdXJsOiBvcHRpb25zLnVybCA/PyBjb25uZWN0aW9uT3B0aW9ucy51cmwgPz8gJ3dzczovL2dhdGV3YXkuZGlzY29yZC5nZycsXG4gICAgdmVyc2lvbjogb3B0aW9ucy52ZXJzaW9uID8/IDEwLFxuICAgIGNvbm5lY3Rpb246IGNvbm5lY3Rpb25PcHRpb25zLFxuICAgIHRvdGFsU2hhcmRzOiBvcHRpb25zLnRvdGFsU2hhcmRzID8/IGNvbm5lY3Rpb25PcHRpb25zLnNoYXJkcyA/PyAxLFxuICAgIGxhc3RTaGFyZElkOiBvcHRpb25zLmxhc3RTaGFyZElkID8/IChvcHRpb25zLnRvdGFsU2hhcmRzID8gb3B0aW9ucy50b3RhbFNoYXJkcyAtIDEgOiBjb25uZWN0aW9uT3B0aW9ucyA/IGNvbm5lY3Rpb25PcHRpb25zLnNoYXJkcyAtIDEgOiAwKSxcbiAgICBmaXJzdFNoYXJkSWQ6IG9wdGlvbnMuZmlyc3RTaGFyZElkID8/IDAsXG4gICAgdG90YWxXb3JrZXJzOiBvcHRpb25zLnRvdGFsV29ya2VycyA/PyA0LFxuICAgIHNoYXJkc1Blcldvcmtlcjogb3B0aW9ucy5zaGFyZHNQZXJXb3JrZXIgPz8gMjUsXG4gICAgc3Bhd25TaGFyZERlbGF5OiBvcHRpb25zLnNwYXduU2hhcmREZWxheSA/PyA1MzAwLFxuICAgIHNwcmVhZFNoYXJkc0luUm91bmRSb2Jpbjogb3B0aW9ucy5zcHJlYWRTaGFyZHNJblJvdW5kUm9iaW4gPz8gZmFsc2UsXG4gICAgcHJlZmVyU25ha2VDYXNlOiBvcHRpb25zLnByZWZlclNuYWtlQ2FzZSA/PyBmYWxzZSxcbiAgICBzaGFyZHM6IG5ldyBNYXAoKSxcbiAgICBidWNrZXRzOiBuZXcgTWFwKCksXG4gICAgY2FjaGU6IHtcbiAgICAgIHJlcXVlc3RNZW1iZXJzOiB7XG4gICAgICAgIGVuYWJsZWQ6IG9wdGlvbnMuY2FjaGU/LnJlcXVlc3RNZW1iZXJzPy5lbmFibGVkID8/IGZhbHNlLFxuICAgICAgICBwZW5kaW5nOiBuZXcgQ29sbGVjdGlvbigpLFxuICAgICAgfSxcbiAgICB9LFxuICAgIGxvZ2dlcjogb3B0aW9ucy5sb2dnZXIgPz8gbG9nZ2VyLFxuICAgIG1ha2VQcmVzZW5jZTogb3B0aW9ucy5tYWtlUHJlc2VuY2UgPz8gKCgpID0+IFByb21pc2UucmVzb2x2ZSh1bmRlZmluZWQpKSxcbiAgICByZXNoYXJkaW5nOiB7XG4gICAgICBlbmFibGVkOiBvcHRpb25zLnJlc2hhcmRpbmc/LmVuYWJsZWQgPz8gdHJ1ZSxcbiAgICAgIHNoYXJkc0Z1bGxQZXJjZW50YWdlOiBvcHRpb25zLnJlc2hhcmRpbmc/LnNoYXJkc0Z1bGxQZXJjZW50YWdlID8/IDgwLFxuICAgICAgY2hlY2tJbnRlcnZhbDogb3B0aW9ucy5yZXNoYXJkaW5nPy5jaGVja0ludGVydmFsID8/IDI4ODAwMDAwLCAvLyA4IGhvdXJzXG4gICAgICBzaGFyZHM6IG5ldyBNYXAoKSxcbiAgICAgIGdldFNlc3Npb25JbmZvOiBvcHRpb25zLnJlc2hhcmRpbmc/LmdldFNlc3Npb25JbmZvLFxuICAgICAgdXBkYXRlR3VpbGRzU2hhcmRJZDogb3B0aW9ucy5yZXNoYXJkaW5nPy51cGRhdGVHdWlsZHNTaGFyZElkLFxuICAgICAgYXN5bmMgY2hlY2tJZlJlc2hhcmRpbmdJc05lZWRlZCgpIHtcbiAgICAgICAgZ2F0ZXdheS5sb2dnZXIuZGVidWcoJ1tSZXNoYXJkaW5nXSBDaGVja2luZyBpZiByZXNoYXJkaW5nIGlzIG5lZWRlZC4nKVxuXG4gICAgICAgIGlmICghZ2F0ZXdheS5yZXNoYXJkaW5nLmVuYWJsZWQpIHtcbiAgICAgICAgICBnYXRld2F5LmxvZ2dlci5kZWJ1ZygnW1Jlc2hhcmRpbmddIFJlc2hhcmRpbmcgaXMgZGlzYWJsZWQuJylcblxuICAgICAgICAgIHJldHVybiB7IG5lZWRlZDogZmFsc2UgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFnYXRld2F5LnJlc2hhcmRpbmcuZ2V0U2Vzc2lvbkluZm8pIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJbUmVzaGFyZGluZ10gUmVzaGFyZGluZyBpcyBlbmFibGVkIGJ1dCBubyAncmVzaGFyZGluZy5nZXRTZXNzaW9uSW5mbygpJyBpcyBub3QgcHJvdmlkZWQuXCIpXG4gICAgICAgIH1cblxuICAgICAgICBnYXRld2F5LmxvZ2dlci5kZWJ1ZygnW1Jlc2hhcmRpbmddIFJlc2hhcmRpbmcgaXMgZW5hYmxlZC4nKVxuXG4gICAgICAgIGNvbnN0IHNlc3Npb25JbmZvID0gYXdhaXQgZ2F0ZXdheS5yZXNoYXJkaW5nLmdldFNlc3Npb25JbmZvKClcblxuICAgICAgICBnYXRld2F5LmxvZ2dlci5kZWJ1ZyhgW1Jlc2hhcmRpbmddIFNlc3Npb24gaW5mbyByZXRyaWV2ZWQ6ICR7SlNPTi5zdHJpbmdpZnkoc2Vzc2lvbkluZm8pfWApXG5cbiAgICAgICAgLy8gRG9uJ3QgaGF2ZSBlbm91Z2ggaWRlbnRpZnkgbGltaXRzIHRvIHRyeSByZXNoYXJkaW5nXG4gICAgICAgIGlmIChzZXNzaW9uSW5mby5zZXNzaW9uU3RhcnRMaW1pdC5yZW1haW5pbmcgPCBzZXNzaW9uSW5mby5zaGFyZHMpIHtcbiAgICAgICAgICBnYXRld2F5LmxvZ2dlci5kZWJ1ZygnW1Jlc2hhcmRpbmddIE5vdCBlbm91Z2ggc2Vzc2lvbiBzdGFydCBsaW1pdHMgbGVmdCB0byByZXNoYXJkLicpXG5cbiAgICAgICAgICByZXR1cm4geyBuZWVkZWQ6IGZhbHNlLCBpbmZvOiBzZXNzaW9uSW5mbyB9XG4gICAgICAgIH1cblxuICAgICAgICBnYXRld2F5LmxvZ2dlci5kZWJ1ZygnW1Jlc2hhcmRpbmddIEFibGUgdG8gcmVzaGFyZCwgY2hlY2tpbmcgd2hldGhlciBuZWNlc3Nhcnkgbm93LicpXG5cbiAgICAgICAgLy8gMjUwMCBpcyB0aGUgbWF4IGFtb3VudCBvZiBndWlsZHMgYSBzaW5nbGUgc2hhcmQgY2FuIGhhbmRsZVxuICAgICAgICAvLyAxMDAwIGlzIHRoZSBhbW91bnQgb2YgZ3VpbGRzIGRpc2NvcmQgdXNlcyB0byBkZXRlcm1pbmUgaG93IG1hbnkgc2hhcmRzIHRvIHJlY29tbWVuZC5cbiAgICAgICAgLy8gVGhpcyBhbGdvIGhlbHBzIGNoZWNrIGlmIHlvdXIgYm90IGhhcyBncm93biBlbm91Z2ggdG8gcmVzaGFyZC5cbiAgICAgICAgLy8gV2hpbGUgdGhpcyBpcyBpbXByZWNpc2UgYXMgZGlzY29yZCBjaGFuZ2VzIHRoZSByZWNvbW1lbmRlZCBudW1iZXIgb2Ygc2hhcmQgZXZlcnkgMTAwMCBndWlsZHMgaXQgaXMgZ29vZCBlbm91Z2hcbiAgICAgICAgLy8gVGhlIGFsdGVybmF0aXZlIGlzIHRvIHN0b3JlIHRoZSBndWlsZCBjb3VudCBmb3IgZWFjaCBzaGFyZCBhbmQgcmVxdWlyZSB0aGUgR3VpbGRzIGludGVudCBmb3IgYEdVSUxEX0NSRUFURWAgYW5kIGBHVUlMRF9ERUxFVEVgIGV2ZW50c1xuICAgICAgICBjb25zdCBwZXJjZW50YWdlID0gKHNlc3Npb25JbmZvLnNoYXJkcyAvICgoZ2F0ZXdheS50b3RhbFNoYXJkcyAqIDI1MDApIC8gMTAwMCkpICogMTAwXG5cbiAgICAgICAgLy8gTGVzcyB0aGFuIG5lY2Vzc2FyeSUgYmVpbmcgdXNlZCBzbyBkbyBub3RoaW5nXG4gICAgICAgIGlmIChwZXJjZW50YWdlIDwgZ2F0ZXdheS5yZXNoYXJkaW5nLnNoYXJkc0Z1bGxQZXJjZW50YWdlKSB7XG4gICAgICAgICAgZ2F0ZXdheS5sb2dnZXIuZGVidWcoJ1tSZXNoYXJkaW5nXSBSZXNoYXJkaW5nIG5vdCBuZWVkZWQuJylcblxuICAgICAgICAgIHJldHVybiB7IG5lZWRlZDogZmFsc2UsIGluZm86IHNlc3Npb25JbmZvIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGdhdGV3YXkubG9nZ2VyLmluZm8oJ1tSZXNoYXJkaW5nXSBSZXNoYXJkaW5nIGlzIG5lZWRlZC4nKVxuXG4gICAgICAgIHJldHVybiB7IG5lZWRlZDogdHJ1ZSwgaW5mbzogc2Vzc2lvbkluZm8gfVxuICAgICAgfSxcbiAgICAgIGFzeW5jIHJlc2hhcmQoaW5mbykge1xuICAgICAgICBnYXRld2F5LmxvZ2dlci5pbmZvKGBbUmVzaGFyZGluZ10gU3RhcnRpbmcgdGhlIHJlc2hhcmQgcHJvY2Vzcy4gUHJldmlvdXMgdG90YWwgc2hhcmRzOiAke2dhdGV3YXkudG90YWxTaGFyZHN9YClcbiAgICAgICAgLy8gU2V0IHZhbHVlcyBvbiBnYXRld2F5XG4gICAgICAgIGdhdGV3YXkudG90YWxTaGFyZHMgPSBpbmZvLnNoYXJkc1xuICAgICAgICAvLyBIYW5kbGVzIHByZXBhcmluZyBtaWQgc2l6ZWQgYm90cyBmb3IgTEJTXG4gICAgICAgIGdhdGV3YXkudG90YWxTaGFyZHMgPSBnYXRld2F5LmNhbGN1bGF0ZVRvdGFsU2hhcmRzKClcbiAgICAgICAgLy8gU2V0IGZpcnN0IHNoYXJkIGlkIGlmIHByb3ZpZGVkIGluIGluZm9cbiAgICAgICAgaWYgKHR5cGVvZiBpbmZvLmZpcnN0U2hhcmRJZCA9PT0gJ251bWJlcicpIGdhdGV3YXkuZmlyc3RTaGFyZElkID0gaW5mby5maXJzdFNoYXJkSWRcbiAgICAgICAgLy8gU2V0IGxhc3Qgc2hhcmQgaWQgaWYgcHJvdmlkZWQgaW4gaW5mb1xuICAgICAgICBpZiAodHlwZW9mIGluZm8ubGFzdFNoYXJkSWQgPT09ICdudW1iZXInKSBnYXRld2F5Lmxhc3RTaGFyZElkID0gaW5mby5sYXN0U2hhcmRJZFxuICAgICAgICAvLyBJZiB3ZSBkaWRuJ3QgZ2V0IGFueSBsYXN0U2hhcmRJZCwgd2UgYXNzdW1lIGFsbCB0aGUgc2hhcmRzIGFyZSB0byBiZSB1c2VkXG4gICAgICAgIGVsc2UgZ2F0ZXdheS5sYXN0U2hhcmRJZCA9IGdhdGV3YXkudG90YWxTaGFyZHMgLSAxXG4gICAgICAgIGdhdGV3YXkubG9nZ2VyLmluZm8oYFtSZXNoYXJkaW5nXSBTdGFydGluZyB0aGUgcmVzaGFyZCBwcm9jZXNzLiBOZXcgdG90YWwgc2hhcmRzOiAke2dhdGV3YXkudG90YWxTaGFyZHN9YClcblxuICAgICAgICAvLyBSZXNldHRpbmcgYnVja2V0c1xuICAgICAgICBnYXRld2F5LmJ1Y2tldHMuY2xlYXIoKVxuICAgICAgICAvLyBSZWZpbGxpbmcgYnVja2V0cyB3aXRoIG5ldyB2YWx1ZXNcbiAgICAgICAgZ2F0ZXdheS5wcmVwYXJlQnVja2V0cygpXG5cbiAgICAgICAgLy8gQ2FsbCBhbGwgdGhlIGJ1Y2tldHMgYW5kIHRlbGwgdGhlaXIgd29ya2VycyAmIHNoYXJkcyB0byBpZGVudGlmeVxuICAgICAgICBjb25zdCBwcm9taXNlcyA9IEFycmF5LmZyb20oZ2F0ZXdheS5idWNrZXRzLmVudHJpZXMoKSkubWFwKGFzeW5jIChbYnVja2V0SWQsIGJ1Y2tldF0pID0+IHtcbiAgICAgICAgICBmb3IgKGNvbnN0IHdvcmtlciBvZiBidWNrZXQud29ya2Vycykge1xuICAgICAgICAgICAgZm9yIChjb25zdCBzaGFyZElkIG9mIHdvcmtlci5xdWV1ZSkge1xuICAgICAgICAgICAgICBhd2FpdCBnYXRld2F5LnJlc2hhcmRpbmcudGVsbFdvcmtlclRvUHJlcGFyZSh3b3JrZXIuaWQsIHNoYXJkSWQsIGJ1Y2tldElkKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSlcblxuICAgICAgICBhd2FpdCBQcm9taXNlLmFsbChwcm9taXNlcylcblxuICAgICAgICBnYXRld2F5LmxvZ2dlci5pbmZvKGBbUmVzaGFyZGluZ10gQWxsIHNoYXJkcyBhcmUgbm93IG9ubGluZS5gKVxuXG4gICAgICAgIGF3YWl0IGdhdGV3YXkucmVzaGFyZGluZy5vblJlc2hhcmRpbmdTd2l0Y2goKVxuICAgICAgfSxcbiAgICAgIGFzeW5jIHRlbGxXb3JrZXJUb1ByZXBhcmUod29ya2VySWQsIHNoYXJkSWQsIGJ1Y2tldElkKSB7XG4gICAgICAgIGdhdGV3YXkubG9nZ2VyLmRlYnVnKGBbUmVzaGFyZGluZ10gVGVsbGluZyB3b3JrZXIgdG8gcHJlcGFyZS4gV29ya2VyOiAke3dvcmtlcklkfSB8IFNoYXJkOiAke3NoYXJkSWR9IHwgQnVja2V0OiAke2J1Y2tldElkfS5gKVxuICAgICAgICBjb25zdCBzaGFyZCA9IG5ldyBTaGFyZCh7XG4gICAgICAgICAgaWQ6IHNoYXJkSWQsXG4gICAgICAgICAgY29ubmVjdGlvbjoge1xuICAgICAgICAgICAgY29tcHJlc3M6IGdhdGV3YXkuY29tcHJlc3MsXG4gICAgICAgICAgICB0cmFuc3BvcnRDb21wcmVzc2lvbjogZ2F0ZXdheS50cmFuc3BvcnRDb21wcmVzc2lvbiA/PyBudWxsLFxuICAgICAgICAgICAgaW50ZW50czogZ2F0ZXdheS5pbnRlbnRzLFxuICAgICAgICAgICAgcHJvcGVydGllczogZ2F0ZXdheS5wcm9wZXJ0aWVzLFxuICAgICAgICAgICAgdG9rZW46IGdhdGV3YXkudG9rZW4sXG4gICAgICAgICAgICB0b3RhbFNoYXJkczogZ2F0ZXdheS50b3RhbFNoYXJkcyxcbiAgICAgICAgICAgIHVybDogZ2F0ZXdheS51cmwsXG4gICAgICAgICAgICB2ZXJzaW9uOiBnYXRld2F5LnZlcnNpb24sXG4gICAgICAgICAgfSxcbiAgICAgICAgICBldmVudHM6IHtcbiAgICAgICAgICAgIGFzeW5jIG1lc3NhZ2UoX3NoYXJkLCBwYXlsb2FkKSB7XG4gICAgICAgICAgICAgIC8vIElnbm9yZSBhbGwgZXZlbnRzIHVudGlsIHdlIHN3aWNoIGZyb20gdGhlIG9sZCBzaGFyZHMgdG8gdGhlIG5ldyBvbmVzLlxuICAgICAgICAgICAgICBpZiAocGF5bG9hZC50ID09PSAnUkVBRFknKSB7XG4gICAgICAgICAgICAgICAgYXdhaXQgZ2F0ZXdheS5yZXNoYXJkaW5nLnVwZGF0ZUd1aWxkc1NoYXJkSWQ/LihcbiAgICAgICAgICAgICAgICAgIChwYXlsb2FkLmQgYXMgRGlzY29yZFJlYWR5KS5ndWlsZHMubWFwKChnKSA9PiBnLmlkKSxcbiAgICAgICAgICAgICAgICAgIHNoYXJkSWQsXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0sXG4gICAgICAgICAgbG9nZ2VyOiBnYXRld2F5LmxvZ2dlcixcbiAgICAgICAgICByZXF1ZXN0SWRlbnRpZnk6IGFzeW5jICgpID0+IGF3YWl0IGdhdGV3YXkucmVxdWVzdElkZW50aWZ5KHNoYXJkSWQpLFxuICAgICAgICAgIG1ha2VQcmVzZW5jZTogZ2F0ZXdheS5tYWtlUHJlc2VuY2UsXG4gICAgICAgIH0pXG5cbiAgICAgICAgaWYgKGdhdGV3YXkucHJlZmVyU25ha2VDYXNlKSB7XG4gICAgICAgICAgc2hhcmQuZm9yd2FyZFRvQm90ID0gYXN5bmMgKHBheWxvYWQpID0+IHtcbiAgICAgICAgICAgIHNoYXJkLmV2ZW50cz8ubWVzc2FnZT8uKHNoYXJkLCBwYXlsb2FkKVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGdhdGV3YXkucmVzaGFyZGluZy5zaGFyZHMuc2V0KHNoYXJkSWQsIHNoYXJkKVxuXG4gICAgICAgIGF3YWl0IHNoYXJkLmlkZW50aWZ5KClcblxuICAgICAgICBnYXRld2F5LmxvZ2dlci5kZWJ1ZyhgW1Jlc2hhcmRpbmddIFNoYXJkICMke3NoYXJkSWR9IGlkZW50aWZpZWQuYClcbiAgICAgIH0sXG4gICAgICBhc3luYyBvblJlc2hhcmRpbmdTd2l0Y2goKSB7XG4gICAgICAgIGdhdGV3YXkubG9nZ2VyLmRlYnVnKGBbUmVzaGFyZGluZ10gTWFraW5nIHRoZSBzd2l0Y2ggZnJvbSB0aGUgb2xkIHNoYXJkcyB0byB0aGUgbmV3IG9uZXMuYClcblxuICAgICAgICAvLyBNb3ZlIHRoZSBldmVudHMgZnJvbSB0aGUgb2xkIHNoYXJkcyB0byB0aGUgbmV3IG9uZXNcbiAgICAgICAgZm9yIChjb25zdCBzaGFyZCBvZiBnYXRld2F5LnJlc2hhcmRpbmcuc2hhcmRzLnZhbHVlcygpKSB7XG4gICAgICAgICAgc2hhcmQuZXZlbnRzID0gb3B0aW9ucy5ldmVudHMgPz8ge31cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIE9sZCBzaGFyZHMgc3RvcCBwcm9jZXNzaW5nIGV2ZW50c1xuICAgICAgICBmb3IgKGNvbnN0IHNoYXJkIG9mIGdhdGV3YXkuc2hhcmRzLnZhbHVlcygpKSB7XG4gICAgICAgICAgY29uc3Qgb2xkSGFuZGxlciA9IHNoYXJkLmV2ZW50cy5tZXNzYWdlXG5cbiAgICAgICAgICAvLyBDaGFuZ2Ugd2l0aCBzcHJlYWQgb3BlcmF0b3IgdG8gbm90IGFmZmVjdCBuZXcgc2hhcmRzLCBhcyBjaGFuZ2luZyBhbnl0aGluZyBvbiBzaGFyZC5ldmVudHMgd2lsbCBkaXJlY3RseSBjaGFuZ2Ugb3B0aW9ucy5ldmVudHMsIHdoaWNoIGNoYW5nZXMgbmV3IHNoYXJkcycgZXZlbnRzXG4gICAgICAgICAgc2hhcmQuZXZlbnRzID0ge1xuICAgICAgICAgICAgLi4uc2hhcmQuZXZlbnRzLFxuICAgICAgICAgICAgbWVzc2FnZTogYXN5bmMgZnVuY3Rpb24gKF8sIG1lc3NhZ2UpIHtcbiAgICAgICAgICAgICAgLy8gTWVtYmVyIGNoZWNrcyBuZWVkIHRvIGNvbnRpbnVlIGJ1dCBvdGhlcnMgY2FuIHN0b3BcbiAgICAgICAgICAgICAgaWYgKG1lc3NhZ2UudCA9PT0gJ0dVSUxEX01FTUJFUlNfQ0hVTksnKSB7XG4gICAgICAgICAgICAgICAgb2xkSGFuZGxlcj8uKHNoYXJkLCBtZXNzYWdlKVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGdhdGV3YXkubG9nZ2VyLmluZm8oYFtSZXNoYXJkaW5nXSBTaHV0dGluZyBkb3duIG9sZCBzaGFyZHMuYClcbiAgICAgICAgYXdhaXQgZ2F0ZXdheS5zaHV0ZG93bihTaGFyZFNvY2tldENsb3NlQ29kZXMuUmVzaGFyZGVkLCAnUmVzaGFyZGVkIScsIGZhbHNlKVxuXG4gICAgICAgIGdhdGV3YXkubG9nZ2VyLmluZm8oYFtSZXNoYXJkaW5nXSBDb21wbGV0ZWQuYClcbiAgICAgICAgZ2F0ZXdheS5zaGFyZHMgPSBuZXcgTWFwKGdhdGV3YXkucmVzaGFyZGluZy5zaGFyZHMpXG4gICAgICAgIGdhdGV3YXkucmVzaGFyZGluZy5zaGFyZHMuY2xlYXIoKVxuICAgICAgfSxcbiAgICB9LFxuXG4gICAgY2FsY3VsYXRlVG90YWxTaGFyZHMoKSB7XG4gICAgICAvLyBCb3RzIHVuZGVyIDEwMGsgc2VydmVycyBkbyBub3QgaGF2ZSBhY2Nlc3MgdG8gTEJTLlxuICAgICAgaWYgKGdhdGV3YXkudG90YWxTaGFyZHMgPCAxMDApIHtcbiAgICAgICAgZ2F0ZXdheS5sb2dnZXIuZGVidWcoYFtHYXRld2F5XSBDYWxjdWxhdGluZyB0b3RhbCBzaGFyZHM6ICR7Z2F0ZXdheS50b3RhbFNoYXJkc31gKVxuICAgICAgICByZXR1cm4gZ2F0ZXdheS50b3RhbFNoYXJkc1xuICAgICAgfVxuXG4gICAgICBnYXRld2F5LmxvZ2dlci5kZWJ1ZyhgW0dhdGV3YXldIENhbGN1bGF0aW5nIHRvdGFsIHNoYXJkc2AsIGdhdGV3YXkudG90YWxTaGFyZHMsIGdhdGV3YXkuY29ubmVjdGlvbi5zZXNzaW9uU3RhcnRMaW1pdC5tYXhDb25jdXJyZW5jeSlcbiAgICAgIC8vIENhbGN1bGF0ZSBhIG11bHRpcGxlIG9mIGBtYXhDb25jdXJyZW5jeWAgd2hpY2ggY2FuIGJlIHVzZWQgdG8gY29ubmVjdCB0byB0aGUgZ2F0ZXdheS5cbiAgICAgIHJldHVybiAoXG4gICAgICAgIE1hdGguY2VpbChcbiAgICAgICAgICBnYXRld2F5LnRvdGFsU2hhcmRzIC9cbiAgICAgICAgICAgIC8vIElmIGBtYXhDb25jdXJyZW5jeWAgaXMgMSwgd2UgY2FuIHNhZmVseSB1c2UgMTYgdG8gZ2V0IGB0b3RhbFNoYXJkc2AgdG8gYmUgaW4gYSBtdWx0aXBsZSBvZiAxNiBzbyB0aGF0IHdlIGNhbiBwcmVwYXJlIGJvdHMgd2l0aCAxMDBrIHNlcnZlcnMgZm9yIExCUy5cbiAgICAgICAgICAgIChnYXRld2F5LmNvbm5lY3Rpb24uc2Vzc2lvblN0YXJ0TGltaXQubWF4Q29uY3VycmVuY3kgPT09IDEgPyAxNiA6IGdhdGV3YXkuY29ubmVjdGlvbi5zZXNzaW9uU3RhcnRMaW1pdC5tYXhDb25jdXJyZW5jeSksXG4gICAgICAgICkgKiAoZ2F0ZXdheS5jb25uZWN0aW9uLnNlc3Npb25TdGFydExpbWl0Lm1heENvbmN1cnJlbmN5ID09PSAxID8gMTYgOiBnYXRld2F5LmNvbm5lY3Rpb24uc2Vzc2lvblN0YXJ0TGltaXQubWF4Q29uY3VycmVuY3kpXG4gICAgICApXG4gICAgfSxcbiAgICBjYWxjdWxhdGVXb3JrZXJJZChzaGFyZElkKSB7XG4gICAgICBjb25zdCB3b3JrZXJJZCA9IG9wdGlvbnMuc3ByZWFkU2hhcmRzSW5Sb3VuZFJvYmluXG4gICAgICAgID8gc2hhcmRJZCAlIGdhdGV3YXkudG90YWxXb3JrZXJzXG4gICAgICAgIDogTWF0aC5taW4oTWF0aC5mbG9vcihzaGFyZElkIC8gZ2F0ZXdheS5zaGFyZHNQZXJXb3JrZXIpLCBnYXRld2F5LnRvdGFsV29ya2VycyAtIDEpXG4gICAgICBnYXRld2F5LmxvZ2dlci5kZWJ1ZyhcbiAgICAgICAgYFtHYXRld2F5XSBDYWxjdWxhdGluZyB3b3JrZXJJZDogU2hhcmQ6ICR7c2hhcmRJZH0gLT4gV29ya2VyOiAke3dvcmtlcklkfSAtPiBQZXIgV29ya2VyOiAke2dhdGV3YXkuc2hhcmRzUGVyV29ya2VyfSAtPiBUb3RhbDogJHtnYXRld2F5LnRvdGFsV29ya2Vyc31gLFxuICAgICAgKVxuICAgICAgcmV0dXJuIHdvcmtlcklkXG4gICAgfSxcbiAgICBwcmVwYXJlQnVja2V0cygpIHtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZ2F0ZXdheS5jb25uZWN0aW9uLnNlc3Npb25TdGFydExpbWl0Lm1heENvbmN1cnJlbmN5OyArK2kpIHtcbiAgICAgICAgZ2F0ZXdheS5sb2dnZXIuZGVidWcoYFtHYXRld2F5XSBQcmVwYXJpbmcgYnVja2V0cyBmb3IgY29uY3VycmVuY3k6ICR7aX1gKVxuICAgICAgICBnYXRld2F5LmJ1Y2tldHMuc2V0KGksIHtcbiAgICAgICAgICB3b3JrZXJzOiBbXSxcbiAgICAgICAgICBsZWFreUJ1Y2tldDogbmV3IExlYWt5QnVja2V0KHtcbiAgICAgICAgICAgIG1heDogMSxcbiAgICAgICAgICAgIHJlZmlsbEFtb3VudDogMSxcbiAgICAgICAgICAgIHJlZmlsbEludGVydmFsOiBnYXRld2F5LnNwYXduU2hhcmREZWxheSxcbiAgICAgICAgICAgIGxvZ2dlcjogdGhpcy5sb2dnZXIsXG4gICAgICAgICAgfSksXG4gICAgICAgIH0pXG4gICAgICB9XG5cbiAgICAgIC8vIE9yZ2FuaXplIGFsbCBzaGFyZHMgaW50byB0aGVpciBvd24gYnVja2V0c1xuICAgICAgZm9yIChsZXQgc2hhcmRJZCA9IGdhdGV3YXkuZmlyc3RTaGFyZElkOyBzaGFyZElkIDw9IGdhdGV3YXkubGFzdFNoYXJkSWQ7ICsrc2hhcmRJZCkge1xuICAgICAgICBnYXRld2F5LmxvZ2dlci5kZWJ1ZyhgW0dhdGV3YXldIFByZXBhcmluZyBidWNrZXRzIGZvciBzaGFyZDogJHtzaGFyZElkfWApXG5cbiAgICAgICAgaWYgKHNoYXJkSWQgPj0gZ2F0ZXdheS50b3RhbFNoYXJkcykge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgU2hhcmQgKGlkOiAke3NoYXJkSWR9KSBpcyBiaWdnZXIgb3IgZXF1YWwgdG8gdGhlIHVzZWQgYW1vdW50IG9mIHVzZWQgc2hhcmRzIHdoaWNoIGlzICR7Z2F0ZXdheS50b3RhbFNoYXJkc31gKVxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgYnVja2V0SWQgPSBzaGFyZElkICUgZ2F0ZXdheS5jb25uZWN0aW9uLnNlc3Npb25TdGFydExpbWl0Lm1heENvbmN1cnJlbmN5XG4gICAgICAgIGNvbnN0IGJ1Y2tldCA9IGdhdGV3YXkuYnVja2V0cy5nZXQoYnVja2V0SWQpXG5cbiAgICAgICAgaWYgKCFidWNrZXQpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICBgU2hhcmQgKGlkOiAke3NoYXJkSWR9KSBnb3QgYXNzaWduZWQgdG8gYW4gaWxsZWdhbCBidWNrZXQgaWQ6ICR7YnVja2V0SWR9LCBleHBlY3RlZCBhIGJ1Y2tldCBpZCBiZXR3ZWVuIDAgYW5kICR7XG4gICAgICAgICAgICAgIGdhdGV3YXkuY29ubmVjdGlvbi5zZXNzaW9uU3RhcnRMaW1pdC5tYXhDb25jdXJyZW5jeSAtIDFcbiAgICAgICAgICAgIH1gLFxuICAgICAgICAgIClcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEdldCB0aGUgd29ya2VyIGlkIGZvciB0aGlzIHNoYXJkXG4gICAgICAgIGNvbnN0IHdvcmtlcklkID0gZ2F0ZXdheS5jYWxjdWxhdGVXb3JrZXJJZChzaGFyZElkKVxuICAgICAgICBjb25zdCB3b3JrZXIgPSBidWNrZXQud29ya2Vycy5maW5kKCh3KSA9PiB3LmlkID09PSB3b3JrZXJJZClcblxuICAgICAgICAvLyBJZiB0aGlzIHdvcmtlciBhbHJlYWR5IGV4aXN0cywgYWRkIHRoZSBzaGFyZCB0byBpdHMgcXVldWVcbiAgICAgICAgaWYgKHdvcmtlcikge1xuICAgICAgICAgIHdvcmtlci5xdWV1ZS5wdXNoKHNoYXJkSWQpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgYnVja2V0LndvcmtlcnMucHVzaCh7IGlkOiB3b3JrZXJJZCwgcXVldWU6IFtzaGFyZElkXSB9KVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcbiAgICBhc3luYyBzcGF3blNoYXJkcygpIHtcbiAgICAgIC8vIFByZXBhcmUgdGhlIGNvbmN1cnJlbmN5IGJ1Y2tldHNcbiAgICAgIGdhdGV3YXkucHJlcGFyZUJ1Y2tldHMoKVxuXG4gICAgICBjb25zdCBwcm9taXNlcyA9IFsuLi5nYXRld2F5LmJ1Y2tldHMuZW50cmllcygpXS5tYXAoYXN5bmMgKFtidWNrZXRJZCwgYnVja2V0XSkgPT4ge1xuICAgICAgICBmb3IgKGNvbnN0IHdvcmtlciBvZiBidWNrZXQud29ya2Vycykge1xuICAgICAgICAgIGZvciAoY29uc3Qgc2hhcmRJZCBvZiB3b3JrZXIucXVldWUpIHtcbiAgICAgICAgICAgIGF3YWl0IGdhdGV3YXkudGVsbFdvcmtlclRvSWRlbnRpZnkod29ya2VyLmlkLCBzaGFyZElkLCBidWNrZXRJZClcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pXG5cbiAgICAgIC8vIFdlIHVzZSBQcm9taXNlLmFsbCBzbyB3ZSBjYW4gc3RhcnQgYWxsIGJ1Y2tldHMgYXQgdGhlIHNhbWUgdGltZVxuICAgICAgYXdhaXQgUHJvbWlzZS5hbGwocHJvbWlzZXMpXG5cbiAgICAgIC8vIENoZWNrIGFuZCByZXNoYXJkIGF1dG9tYXRpY2FsbHkgaWYgYXV0byByZXNoYXJkaW5nIGlzIGVuYWJsZWQuXG4gICAgICBpZiAoZ2F0ZXdheS5yZXNoYXJkaW5nLmVuYWJsZWQgJiYgZ2F0ZXdheS5yZXNoYXJkaW5nLmNoZWNrSW50ZXJ2YWwgIT09IC0xKSB7XG4gICAgICAgIC8vIEl0IGlzIGJldHRlciB0byBlbnN1cmUgdGhlcmUgaXMgYWx3YXlzIG9ubHkgb25lXG4gICAgICAgIGNsZWFySW50ZXJ2YWwoZ2F0ZXdheS5yZXNoYXJkaW5nLmNoZWNrSW50ZXJ2YWxJZClcblxuICAgICAgICBpZiAoIWdhdGV3YXkucmVzaGFyZGluZy5nZXRTZXNzaW9uSW5mbykge1xuICAgICAgICAgIGdhdGV3YXkucmVzaGFyZGluZy5lbmFibGVkID0gZmFsc2VcbiAgICAgICAgICBnYXRld2F5LmxvZ2dlci53YXJuKFwiW1Jlc2hhcmRpbmddIFJlc2hhcmRpbmcgaXMgZW5hYmxlZCBidXQgJ3Jlc2hhcmRpbmcuZ2V0U2Vzc2lvbkluZm8oKScgd2FzIG5vdCBwcm92aWRlZC4gRGlzYWJsaW5nIHJlc2hhcmRpbmcuXCIpXG5cbiAgICAgICAgICByZXR1cm5cbiAgICAgICAgfVxuXG4gICAgICAgIGdhdGV3YXkucmVzaGFyZGluZy5jaGVja0ludGVydmFsSWQgPSBzZXRJbnRlcnZhbChhc3luYyAoKSA9PiB7XG4gICAgICAgICAgY29uc3QgcmVzaGFyZGluZ0luZm8gPSBhd2FpdCBnYXRld2F5LnJlc2hhcmRpbmcuY2hlY2tJZlJlc2hhcmRpbmdJc05lZWRlZCgpXG5cbiAgICAgICAgICBpZiAocmVzaGFyZGluZ0luZm8ubmVlZGVkICYmIHJlc2hhcmRpbmdJbmZvLmluZm8pIGF3YWl0IGdhdGV3YXkucmVzaGFyZGluZy5yZXNoYXJkKHJlc2hhcmRpbmdJbmZvLmluZm8pXG4gICAgICAgIH0sIGdhdGV3YXkucmVzaGFyZGluZy5jaGVja0ludGVydmFsKVxuICAgICAgfVxuICAgIH0sXG4gICAgYXN5bmMgc2h1dGRvd24oY29kZSwgcmVhc29uLCBjbGVhclJlc2hhcmRpbmdJbnRlcnZhbCA9IHRydWUpIHtcbiAgICAgIGlmIChjbGVhclJlc2hhcmRpbmdJbnRlcnZhbCkgY2xlYXJJbnRlcnZhbChnYXRld2F5LnJlc2hhcmRpbmcuY2hlY2tJbnRlcnZhbElkKVxuXG4gICAgICBhd2FpdCBQcm9taXNlLmFsbChBcnJheS5mcm9tKGdhdGV3YXkuc2hhcmRzLnZhbHVlcygpKS5tYXAoKHNoYXJkKSA9PiBzaGFyZC5jbG9zZShjb2RlLCByZWFzb24pKSlcbiAgICB9LFxuICAgIGFzeW5jIHNlbmRQYXlsb2FkKHNoYXJkSWQsIHBheWxvYWQpIHtcbiAgICAgIGNvbnN0IHNoYXJkID0gZ2F0ZXdheS5zaGFyZHMuZ2V0KHNoYXJkSWQpXG5cbiAgICAgIGlmICghc2hhcmQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBTaGFyZCAoaWQ6ICR7c2hhcmRJZH0gbm90IGZvdW5kYClcbiAgICAgIH1cblxuICAgICAgYXdhaXQgc2hhcmQuc2VuZChwYXlsb2FkKVxuICAgIH0sXG4gICAgYXN5bmMgdGVsbFdvcmtlclRvSWRlbnRpZnkod29ya2VySWQsIHNoYXJkSWQsIGJ1Y2tldElkKSB7XG4gICAgICBnYXRld2F5LmxvZ2dlci5kZWJ1ZyhgW0dhdGV3YXldIFRlbGwgd29ya2VyICMke3dvcmtlcklkfSB0byBpZGVudGlmeSBzaGFyZCAjJHtzaGFyZElkfSBmcm9tIGJ1Y2tldCAke2J1Y2tldElkfWApXG4gICAgICBhd2FpdCBnYXRld2F5LmlkZW50aWZ5KHNoYXJkSWQpXG4gICAgfSxcbiAgICBhc3luYyBpZGVudGlmeShzaGFyZElkOiBudW1iZXIpIHtcbiAgICAgIGxldCBzaGFyZCA9IHRoaXMuc2hhcmRzLmdldChzaGFyZElkKVxuICAgICAgZ2F0ZXdheS5sb2dnZXIuZGVidWcoYFtHYXRld2F5XSBJZGVudGlmeWluZyAke3NoYXJkID8gJ2V4aXN0aW5nJyA6ICduZXcnfSBzaGFyZCAoJHtzaGFyZElkfSlgKVxuXG4gICAgICBpZiAoIXNoYXJkKSB7XG4gICAgICAgIHNoYXJkID0gbmV3IFNoYXJkKHtcbiAgICAgICAgICBpZDogc2hhcmRJZCxcbiAgICAgICAgICBjb25uZWN0aW9uOiB7XG4gICAgICAgICAgICBjb21wcmVzczogdGhpcy5jb21wcmVzcyxcbiAgICAgICAgICAgIHRyYW5zcG9ydENvbXByZXNzaW9uOiBnYXRld2F5LnRyYW5zcG9ydENvbXByZXNzaW9uLFxuICAgICAgICAgICAgaW50ZW50czogdGhpcy5pbnRlbnRzLFxuICAgICAgICAgICAgcHJvcGVydGllczogdGhpcy5wcm9wZXJ0aWVzLFxuICAgICAgICAgICAgdG9rZW46IHRoaXMudG9rZW4sXG4gICAgICAgICAgICB0b3RhbFNoYXJkczogdGhpcy50b3RhbFNoYXJkcyxcbiAgICAgICAgICAgIHVybDogdGhpcy51cmwsXG4gICAgICAgICAgICB2ZXJzaW9uOiB0aGlzLnZlcnNpb24sXG4gICAgICAgICAgfSxcbiAgICAgICAgICBldmVudHM6IG9wdGlvbnMuZXZlbnRzID8/IHt9LFxuICAgICAgICAgIGxvZ2dlcjogdGhpcy5sb2dnZXIsXG4gICAgICAgICAgcmVxdWVzdElkZW50aWZ5OiBhc3luYyAoKSA9PiBhd2FpdCBnYXRld2F5LnJlcXVlc3RJZGVudGlmeShzaGFyZElkKSxcbiAgICAgICAgICBtYWtlUHJlc2VuY2U6IGdhdGV3YXkubWFrZVByZXNlbmNlLFxuICAgICAgICB9KVxuXG4gICAgICAgIGlmICh0aGlzLnByZWZlclNuYWtlQ2FzZSkge1xuICAgICAgICAgIHNoYXJkLmZvcndhcmRUb0JvdCA9IGFzeW5jIChwYXlsb2FkKSA9PiB7XG4gICAgICAgICAgICBzaGFyZCEuZXZlbnRzLm1lc3NhZ2U/LihzaGFyZCEsIHBheWxvYWQpXG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5zaGFyZHMuc2V0KHNoYXJkSWQsIHNoYXJkKVxuICAgICAgfVxuXG4gICAgICBhd2FpdCBzaGFyZC5pZGVudGlmeSgpXG4gICAgfSxcblxuICAgIGFzeW5jIHJlcXVlc3RJZGVudGlmeShzaGFyZElkKSB7XG4gICAgICBnYXRld2F5LmxvZ2dlci5kZWJ1ZyhgW0dhdGV3YXldIFNoYXJkICMke3NoYXJkSWR9IHJlcXVlc3RlZCBhbiBpZGVudGlmeS5gKVxuXG4gICAgICBjb25zdCBidWNrZXQgPSBnYXRld2F5LmJ1Y2tldHMuZ2V0KHNoYXJkSWQgJSBnYXRld2F5LmNvbm5lY3Rpb24uc2Vzc2lvblN0YXJ0TGltaXQubWF4Q29uY3VycmVuY3kpXG5cbiAgICAgIGlmICghYnVja2V0KSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIkNhbid0IHJlcXVlc3QgaWRlbnRpZnkgZm9yIGEgc2hhcmQgdGhhdCBpcyBub3QgYXNzaWduZWQgdG8gYW55IGJ1Y2tldC5cIilcbiAgICAgIH1cblxuICAgICAgYXdhaXQgYnVja2V0LmxlYWt5QnVja2V0LmFjcXVpcmUoKVxuXG4gICAgICBnYXRld2F5LmxvZ2dlci5kZWJ1ZyhgW0dhdGV3YXldIEFwcHJvdmVkIGlkZW50aWZ5IHJlcXVlc3QgZm9yIFNoYXJkICMke3NoYXJkSWR9LmApXG4gICAgfSxcblxuICAgIGFzeW5jIGtpbGwoc2hhcmRJZDogbnVtYmVyKSB7XG4gICAgICBjb25zdCBzaGFyZCA9IHRoaXMuc2hhcmRzLmdldChzaGFyZElkKVxuICAgICAgaWYgKCFzaGFyZCkge1xuICAgICAgICBnYXRld2F5LmxvZ2dlci5kZWJ1ZyhgW0dhdGV3YXldIFNoYXJkICMke3NoYXJkSWR9IHdhcyByZXF1ZXN0ZWQgdG8gYmUga2lsbGVkLCBidXQgdGhlIHNoYXJkIGNvdWxkIG5vdCBiZSBmb3VuZC5gKVxuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgZ2F0ZXdheS5sb2dnZXIuZGVidWcoYFtHYXRld2F5XSBLaWxsaW5nIFNoYXJkICMke3NoYXJkSWR9YClcbiAgICAgIHRoaXMuc2hhcmRzLmRlbGV0ZShzaGFyZElkKVxuICAgICAgYXdhaXQgc2hhcmQuc2h1dGRvd24oKVxuICAgIH0sXG5cbiAgICAvLyBIZWxwZXJzIG1ldGhvZHMgYmVsb3cgdGhpc1xuXG4gICAgY2FsY3VsYXRlU2hhcmRJZChndWlsZElkLCB0b3RhbFNoYXJkcykge1xuICAgICAgLy8gSWYgbm9uZSBpcyBwcm92aWRlZCwgdXNlIHRoZSB0b3RhbCBzaGFyZHMgbnVtYmVyIGZyb20gZ2F0ZXdheSBvYmplY3QuXG4gICAgICBpZiAoIXRvdGFsU2hhcmRzKSB0b3RhbFNoYXJkcyA9IGdhdGV3YXkudG90YWxTaGFyZHNcbiAgICAgIC8vIElmIGl0IGlzIG9ubHkgMSBzaGFyZCwgaXQgd2lsbCBhbHdheXMgYmUgc2hhcmQgaWQgMFxuICAgICAgaWYgKHRvdGFsU2hhcmRzID09PSAxKSB7XG4gICAgICAgIGdhdGV3YXkubG9nZ2VyLmRlYnVnKGBbR2F0ZXdheV0gY2FsY3VsYXRlU2hhcmRJZCAoMSBzaGFyZClgKVxuICAgICAgICByZXR1cm4gMFxuICAgICAgfVxuXG4gICAgICBnYXRld2F5LmxvZ2dlci5kZWJ1ZyhgW0dhdGV3YXldIGNhbGN1bGF0ZVNoYXJkSWQgKGd1aWxkSWQ6ICR7Z3VpbGRJZH0sIHRvdGFsU2hhcmRzOiAke3RvdGFsU2hhcmRzfSlgKVxuICAgICAgcmV0dXJuIE51bWJlcigoQmlnSW50KGd1aWxkSWQpID4+IDIybikgJSBCaWdJbnQodG90YWxTaGFyZHMpKVxuICAgIH0sXG5cbiAgICBhc3luYyBqb2luVm9pY2VDaGFubmVsKGd1aWxkSWQsIGNoYW5uZWxJZCwgb3B0aW9ucykge1xuICAgICAgY29uc3Qgc2hhcmRJZCA9IGdhdGV3YXkuY2FsY3VsYXRlU2hhcmRJZChndWlsZElkKVxuXG4gICAgICBnYXRld2F5LmxvZ2dlci5kZWJ1ZyhgW0dhdGV3YXldIGpvaW5Wb2ljZUNoYW5uZWwgZ3VpbGRJZDogJHtndWlsZElkfSBjaGFubmVsSWQ6ICR7Y2hhbm5lbElkfWApXG5cbiAgICAgIGF3YWl0IGdhdGV3YXkuc2VuZFBheWxvYWQoc2hhcmRJZCwge1xuICAgICAgICBvcDogR2F0ZXdheU9wY29kZXMuVm9pY2VTdGF0ZVVwZGF0ZSxcbiAgICAgICAgZDoge1xuICAgICAgICAgIGd1aWxkX2lkOiBndWlsZElkLnRvU3RyaW5nKCksXG4gICAgICAgICAgY2hhbm5lbF9pZDogY2hhbm5lbElkLnRvU3RyaW5nKCksXG4gICAgICAgICAgc2VsZl9tdXRlOiBvcHRpb25zPy5zZWxmTXV0ZSA/PyBmYWxzZSxcbiAgICAgICAgICBzZWxmX2RlYWY6IG9wdGlvbnM/LnNlbGZEZWFmID8/IHRydWUsXG4gICAgICAgIH0sXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBlZGl0Qm90U3RhdHVzKGRhdGEpIHtcbiAgICAgIGdhdGV3YXkubG9nZ2VyLmRlYnVnKGBbR2F0ZXdheV0gZWRpdEJvdFN0YXR1cyBkYXRhOiAke0pTT04uc3RyaW5naWZ5KGRhdGEsIGpzb25TYWZlUmVwbGFjZXIpfWApXG5cbiAgICAgIGF3YWl0IFByb21pc2UuYWxsKFxuICAgICAgICBbLi4uZ2F0ZXdheS5zaGFyZHMudmFsdWVzKCldLm1hcChhc3luYyAoc2hhcmQpID0+IHtcbiAgICAgICAgICBnYXRld2F5LmVkaXRTaGFyZFN0YXR1cyhzaGFyZC5pZCwgZGF0YSlcbiAgICAgICAgfSksXG4gICAgICApXG4gICAgfSxcblxuICAgIGFzeW5jIGVkaXRTaGFyZFN0YXR1cyhzaGFyZElkLCBkYXRhKSB7XG4gICAgICBnYXRld2F5LmxvZ2dlci5kZWJ1ZyhgW0dhdGV3YXldIGVkaXRTaGFyZFN0YXR1cyBzaGFyZElkOiAke3NoYXJkSWR9IC0+IGRhdGE6ICR7SlNPTi5zdHJpbmdpZnkoZGF0YSl9YClcblxuICAgICAgYXdhaXQgZ2F0ZXdheS5zZW5kUGF5bG9hZChzaGFyZElkLCB7XG4gICAgICAgIG9wOiBHYXRld2F5T3Bjb2Rlcy5QcmVzZW5jZVVwZGF0ZSxcbiAgICAgICAgZDoge1xuICAgICAgICAgIHNpbmNlOiBudWxsLFxuICAgICAgICAgIGFmazogZmFsc2UsXG4gICAgICAgICAgYWN0aXZpdGllczogZGF0YS5hY3Rpdml0aWVzLFxuICAgICAgICAgIHN0YXR1czogZGF0YS5zdGF0dXMsXG4gICAgICAgIH0sXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBhc3luYyByZXF1ZXN0TWVtYmVycyhndWlsZElkLCBvcHRpb25zKSB7XG4gICAgICBjb25zdCBzaGFyZElkID0gZ2F0ZXdheS5jYWxjdWxhdGVTaGFyZElkKGd1aWxkSWQpXG5cbiAgICAgIGlmIChnYXRld2F5LmludGVudHMgJiYgKCFvcHRpb25zPy5saW1pdCB8fCBvcHRpb25zLmxpbWl0ID4gMSkgJiYgIShnYXRld2F5LmludGVudHMgJiBHYXRld2F5SW50ZW50cy5HdWlsZE1lbWJlcnMpKVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCBmZXRjaCBtb3JlIHRoZW4gMSBtZW1iZXIgd2l0aG91dCB0aGUgR1VJTERfTUVNQkVSUyBpbnRlbnQnKVxuXG4gICAgICBnYXRld2F5LmxvZ2dlci5kZWJ1ZyhgW0dhdGV3YXldIHJlcXVlc3RNZW1iZXJzIGd1aWxkSWQ6ICR7Z3VpbGRJZH0gLT4gZGF0YTogJHtKU09OLnN0cmluZ2lmeShvcHRpb25zKX1gKVxuXG4gICAgICBpZiAob3B0aW9ucz8udXNlcklkcz8ubGVuZ3RoKSB7XG4gICAgICAgIGdhdGV3YXkubG9nZ2VyLmRlYnVnKGBbR2F0ZXdheV0gcmVxdWVzdE1lbWJlcnMgZ3VpbGRJZDogJHtndWlsZElkfSAtPiBzZXR0aW5nIHVzZXIgbGltaXQgYmFzZWQgb24gdXNlcklkcyBsZW5ndGg6ICR7b3B0aW9ucy51c2VySWRzLmxlbmd0aH1gKVxuXG4gICAgICAgIG9wdGlvbnMubGltaXQgPSBvcHRpb25zLnVzZXJJZHMubGVuZ3RoXG4gICAgICB9XG5cbiAgICAgIGlmICghb3B0aW9ucz8ubm9uY2UpIHtcbiAgICAgICAgbGV0IG5vbmNlID0gJydcblxuICAgICAgICB3aGlsZSAoIW5vbmNlIHx8IGdhdGV3YXkuY2FjaGUucmVxdWVzdE1lbWJlcnMucGVuZGluZy5oYXMobm9uY2UpKSB7XG4gICAgICAgICAgbm9uY2UgPSByYW5kb21CeXRlcygxNikudG9TdHJpbmcoJ2hleCcpXG4gICAgICAgIH1cblxuICAgICAgICBvcHRpb25zID8/PSB7IGxpbWl0OiAwIH1cbiAgICAgICAgb3B0aW9ucy5ub25jZSA9IG5vbmNlXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IG1lbWJlcnMgPSAhZ2F0ZXdheS5jYWNoZS5yZXF1ZXN0TWVtYmVycy5lbmFibGVkXG4gICAgICAgID8gW11cbiAgICAgICAgOiBuZXcgUHJvbWlzZTxDYW1lbGl6ZTxEaXNjb3JkTWVtYmVyV2l0aFVzZXJbXT4+KChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICAgIC8vIFNob3VsZCBuZXZlciBoYXBwZW4uXG4gICAgICAgICAgICBpZiAoIWdhdGV3YXkuY2FjaGUucmVxdWVzdE1lbWJlcnMuZW5hYmxlZCB8fCAhb3B0aW9ucz8ubm9uY2UpIHtcbiAgICAgICAgICAgICAgcmVqZWN0KG5ldyBFcnJvcihcIkNhbid0IHJlcXVlc3QgdGhlIG1lbWJlcnMgd2l0aG91dCB0aGUgbm9uY2Ugb3Igd2l0aCB0aGUgZmVhdHVyZSBkaXNhYmxlZC5cIikpXG4gICAgICAgICAgICAgIHJldHVyblxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBnYXRld2F5LmNhY2hlLnJlcXVlc3RNZW1iZXJzLnBlbmRpbmcuc2V0KG9wdGlvbnMubm9uY2UsIHtcbiAgICAgICAgICAgICAgbm9uY2U6IG9wdGlvbnMubm9uY2UsXG4gICAgICAgICAgICAgIHJlc29sdmUsXG4gICAgICAgICAgICAgIG1lbWJlcnM6IFtdLFxuICAgICAgICAgICAgfSlcbiAgICAgICAgICB9KVxuXG4gICAgICBhd2FpdCBnYXRld2F5LnNlbmRQYXlsb2FkKHNoYXJkSWQsIHtcbiAgICAgICAgb3A6IEdhdGV3YXlPcGNvZGVzLlJlcXVlc3RHdWlsZE1lbWJlcnMsXG4gICAgICAgIGQ6IHtcbiAgICAgICAgICBndWlsZF9pZDogZ3VpbGRJZC50b1N0cmluZygpLFxuICAgICAgICAgIC8vIElmIGEgcXVlcnkgaXMgcHJvdmlkZWQgdXNlIGl0LCBPUiBpZiBhIGxpbWl0IGlzIE5PVCBwcm92aWRlZCB1c2UgXCJcIlxuICAgICAgICAgIHF1ZXJ5OiBvcHRpb25zPy5xdWVyeSA/PyAob3B0aW9ucz8ubGltaXQgPyB1bmRlZmluZWQgOiAnJyksXG4gICAgICAgICAgbGltaXQ6IG9wdGlvbnM/LmxpbWl0ID8/IDAsXG4gICAgICAgICAgcHJlc2VuY2VzOiBvcHRpb25zPy5wcmVzZW5jZXMgPz8gZmFsc2UsXG4gICAgICAgICAgdXNlcl9pZHM6IG9wdGlvbnM/LnVzZXJJZHM/Lm1hcCgoaWQpID0+IGlkLnRvU3RyaW5nKCkpLFxuICAgICAgICAgIG5vbmNlOiBvcHRpb25zPy5ub25jZSxcbiAgICAgICAgfSxcbiAgICAgIH0pXG5cbiAgICAgIHJldHVybiBhd2FpdCBtZW1iZXJzXG4gICAgfSxcblxuICAgIGFzeW5jIGxlYXZlVm9pY2VDaGFubmVsKGd1aWxkSWQpIHtcbiAgICAgIGNvbnN0IHNoYXJkSWQgPSBnYXRld2F5LmNhbGN1bGF0ZVNoYXJkSWQoZ3VpbGRJZClcblxuICAgICAgZ2F0ZXdheS5sb2dnZXIuZGVidWcoYFtHYXRld2F5XSBsZWF2ZVZvaWNlQ2hhbm5lbCBndWlsZElkOiAke2d1aWxkSWR9IFNoYXJkICR7c2hhcmRJZH1gKVxuXG4gICAgICBhd2FpdCBnYXRld2F5LnNlbmRQYXlsb2FkKHNoYXJkSWQsIHtcbiAgICAgICAgb3A6IEdhdGV3YXlPcGNvZGVzLlZvaWNlU3RhdGVVcGRhdGUsXG4gICAgICAgIGQ6IHtcbiAgICAgICAgICBndWlsZF9pZDogZ3VpbGRJZC50b1N0cmluZygpLFxuICAgICAgICAgIGNoYW5uZWxfaWQ6IG51bGwsXG4gICAgICAgICAgc2VsZl9tdXRlOiBmYWxzZSxcbiAgICAgICAgICBzZWxmX2RlYWY6IGZhbHNlLFxuICAgICAgICB9LFxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgcmVxdWVzdFNvdW5kYm9hcmRTb3VuZHMoZ3VpbGRJZHMpIHtcbiAgICAgIC8qKlxuICAgICAgICogRGlzY29yZCB3aWxsIHNlbmQgdGhlIGV2ZW50cyBmb3IgdGhlIGd1aWxkcyB0aGF0IGFyZSBcInVuZGVyIHRoZSBzaGFyZFwiIHRoYXQgc2VuZHMgdGhlIG9wY29kZS5cbiAgICAgICAqIEZvciB0aGlzIHJlYXNvbiB3ZSBuZWVkIHRvIGdyb3VwIHRoZSBpZHMgd2l0aCB0aGUgc2hhcmQgdGhlIGNhbGN1bGF0ZVNoYXJkSWQgbWV0aG9kIGdpdmVzXG4gICAgICAgKi9cblxuICAgICAgY29uc3QgbWFwID0gbmV3IE1hcDxudW1iZXIsIEJpZ1N0cmluZ1tdPigpXG5cbiAgICAgIGZvciAoY29uc3QgZ3VpbGRJZCBvZiBndWlsZElkcykge1xuICAgICAgICBjb25zdCBzaGFyZElkID0gZ2F0ZXdheS5jYWxjdWxhdGVTaGFyZElkKGd1aWxkSWQpXG5cbiAgICAgICAgY29uc3QgaWRzID0gbWFwLmdldChzaGFyZElkKSA/PyBbXVxuICAgICAgICBtYXAuc2V0KHNoYXJkSWQsIGlkcylcblxuICAgICAgICBpZHMucHVzaChndWlsZElkKVxuICAgICAgfVxuXG4gICAgICBhd2FpdCBQcm9taXNlLmFsbChcbiAgICAgICAgWy4uLm1hcC5lbnRyaWVzKCldLm1hcCgoW3NoYXJkSWQsIGlkc10pID0+XG4gICAgICAgICAgZ2F0ZXdheS5zZW5kUGF5bG9hZChzaGFyZElkLCB7XG4gICAgICAgICAgICBvcDogR2F0ZXdheU9wY29kZXMuUmVxdWVzdFNvdW5kYm9hcmRTb3VuZHMsXG4gICAgICAgICAgICBkOiB7XG4gICAgICAgICAgICAgIGd1aWxkX2lkczogaWRzLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9KSxcbiAgICAgICAgKSxcbiAgICAgIClcbiAgICB9LFxuICB9XG5cbiAgcmV0dXJuIGdhdGV3YXlcbn1cblxuZXhwb3J0IGludGVyZmFjZSBDcmVhdGVHYXRld2F5TWFuYWdlck9wdGlvbnMge1xuICAvKipcbiAgICogSWQgb2YgdGhlIGZpcnN0IFNoYXJkIHdoaWNoIHNob3VsZCBnZXQgY29udHJvbGxlZCBieSB0aGlzIG1hbmFnZXIuXG4gICAqIEBkZWZhdWx0IDBcbiAgICovXG4gIGZpcnN0U2hhcmRJZD86IG51bWJlclxuICAvKipcbiAgICogSWQgb2YgdGhlIGxhc3QgU2hhcmQgd2hpY2ggc2hvdWxkIGdldCBjb250cm9sbGVkIGJ5IHRoaXMgbWFuYWdlci5cbiAgICogQGRlZmF1bHQgMFxuICAgKi9cbiAgbGFzdFNoYXJkSWQ/OiBudW1iZXJcbiAgLyoqXG4gICAqIERlbGF5IGluIG1pbGxpc2Vjb25kcyB0byB3YWl0IGJlZm9yZSBzcGF3bmluZyBuZXh0IHNoYXJkLiBPUFRJTUFMIElTIEFCT1ZFIDUxMDAuIFlPVSBET04nVCBXQU5UIFRPIEhJVCBUSEUgUkFURSBMSU1JVCEhIVxuICAgKiBAZGVmYXVsdCA1MzAwXG4gICAqL1xuICBzcGF3blNoYXJkRGVsYXk/OiBudW1iZXJcbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gc2VuZCB0aGUgZGlzY29yZCBwYWNrZXRzIGluIHNuYWtlIGNhc2UgZm9ybS5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIHByZWZlclNuYWtlQ2FzZT86IGJvb2xlYW5cbiAgLyoqXG4gICAqIFRvdGFsIGFtb3VudCBvZiBzaGFyZHMgeW91ciBib3QgdXNlcy4gVXNlZnVsIGZvciB6ZXJvLWRvd250aW1lIHVwZGF0ZXMgb3IgcmVzaGFyZGluZy5cbiAgICogQGRlZmF1bHQgMVxuICAgKi9cbiAgdG90YWxTaGFyZHM/OiBudW1iZXJcbiAgLyoqXG4gICAqIFRoZSBhbW91bnQgb2Ygc2hhcmRzIHRvIGxvYWQgcGVyIHdvcmtlci5cbiAgICogQGRlZmF1bHQgMjVcbiAgICovXG4gIHNoYXJkc1Blcldvcmtlcj86IG51bWJlclxuICAvKipcbiAgICogVGhlIHRvdGFsIGFtb3VudCBvZiB3b3JrZXJzIHRvIHVzZSBmb3IgeW91ciBib3QuXG4gICAqIEBkZWZhdWx0IDRcbiAgICovXG4gIHRvdGFsV29ya2Vycz86IG51bWJlclxuICAvKipcbiAgICogV2hldGhlciB0byBzcHJlYWQgc2hhcmRzIGFjcm9zcyB3b3JrZXJzIGluIGEgcm91bmQtcm9iaW4gbWFubmVyLlxuICAgKlxuICAgKiBAcmVtYXJrc1xuICAgKiBCeSBkZWZhdWx0LCBzaGFyZHMgYXJlIGFzc2lnbmVkIHRvIHdvcmtlcnMgaW4gY29udGlndW91cyBibG9ja3MgYmFzZWQgb24gc2hhcmRzUGVyV29ya2VyLiBJZiBhbnkgc2hhcmQgaXMgbGVmdCBvdmVyLCBpdCB3aWxsIGJlIGFzc2lnbmVkIHRvIHRoZSBsYXN0IHdvcmtlci5cbiAgICogVGhpcyBtZWFucyB0aGF0IGlmIHlvdSBoYXZlIDMgd29ya2VycyBhbmQgNDAgc2hhcmRzIHdoaWxlIHNoYXJkc1BlcldvcmtlciBpcyAxMCwgdGhlIGZpcnN0IHdvcmtlciB3aWxsIGdldCBzaGFyZHMgMC05LCB0aGUgc2Vjb25kIHdvcmtlciB3aWxsIGdldCBzaGFyZHMgMTAtMTksIGFuZCBzbyBvbiwgdGhlIGxhc3Qgd29ya2VyIHdpbGwgZ2V0IHNoYXJkcyAyMC0zOS5cbiAgICpcbiAgICogSWYgdGhpcyBvcHRpb24gaXMgc2V0IHRvIHRydWUsIHRoZSBzaGFyZHMgd2lsbCBiZSBhc3NpZ25lZCBpbiBhIHJvdW5kLXJvYmluIG1hbm5lciB0byBzcHJlYWQgbW9yZSBldmVubHkgYWNyb3NzIHdvcmtlcnMuXG4gICAqIEZvciBleGFtcGxlLCB3aXRoIDMgd29ya2VycyBhbmQgNDAgc2hhcmRzLCB0aGUgZmlyc3Qgc2hhcmQgd2lsbCBnbyB0byB3b3JrZXIgMCwgdGhlIHNlY29uZCBzaGFyZCB0byB3b3JrZXIgMSwgdGhlIHRoaXJkIHNoYXJkIHRvIHdvcmtlciAyLCB0aGUgZm91cnRoIHNoYXJkIHRvIHdvcmtlciAwLCBhbmQgc28gb24uXG4gICAqXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBzcHJlYWRTaGFyZHNJblJvdW5kUm9iaW4/OiBib29sZWFuXG4gIC8qKiBJbXBvcnRhbnQgZGF0YSB3aGljaCBpcyB1c2VkIGJ5IHRoZSBtYW5hZ2VyIHRvIGNvbm5lY3Qgc2hhcmRzIHRvIHRoZSBnYXRld2F5LiAqL1xuICBjb25uZWN0aW9uPzogQ2FtZWxpemU8RGlzY29yZEdldEdhdGV3YXlCb3Q+XG4gIC8qKiBXaGV0aGVyIGluY29taW5nIHBheWxvYWRzIGFyZSBjb21wcmVzc2VkIHVzaW5nIHpsaWIuXG4gICAqXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBjb21wcmVzcz86IGJvb2xlYW5cbiAgLyoqIFdoYXQgdHJhbnNwb3J0IGNvbXByZXNzaW9uIHNob3VsZCBiZSB1c2VkICovXG4gIHRyYW5zcG9ydENvbXByZXNzaW9uPzogVHJhbnNwb3J0Q29tcHJlc3Npb24gfCBudWxsXG4gIC8qKiBUaGUgY2FsY3VsYXRlZCBpbnRlbnQgdmFsdWUgb2YgdGhlIGV2ZW50cyB3aGljaCB0aGUgc2hhcmQgc2hvdWxkIHJlY2VpdmUuXG4gICAqXG4gICAqIEBkZWZhdWx0IDBcbiAgICovXG4gIGludGVudHM/OiBudW1iZXJcbiAgLyoqIElkZW50aWZ5IHByb3BlcnRpZXMgdG8gdXNlICovXG4gIHByb3BlcnRpZXM/OiB7XG4gICAgLyoqIE9wZXJhdGluZyBzeXN0ZW0gdGhlIHNoYXJkIHJ1bnMgb24uXG4gICAgICpcbiAgICAgKiBAZGVmYXVsdCBcImRhcndpblwiIHwgXCJsaW51eFwiIHwgXCJ3aW5kb3dzXCJcbiAgICAgKi9cbiAgICBvczogc3RyaW5nXG4gICAgLyoqIFRoZSBcImJyb3dzZXJcIiB3aGVyZSB0aGlzIHNoYXJkIGlzIHJ1bm5pbmcgb24uXG4gICAgICpcbiAgICAgKiBAZGVmYXVsdCBcIkRpc2NvcmRlbm9cIlxuICAgICAqL1xuICAgIGJyb3dzZXI6IHN0cmluZ1xuICAgIC8qKiBUaGUgZGV2aWNlIG9uIHdoaWNoIHRoZSBzaGFyZCBpcyBydW5uaW5nLlxuICAgICAqXG4gICAgICogQGRlZmF1bHQgXCJEaXNjb3JkZW5vXCJcbiAgICAgKi9cbiAgICBkZXZpY2U6IHN0cmluZ1xuICB9XG4gIC8qKiBCb3QgdG9rZW4gd2hpY2ggaXMgdXNlZCB0byBjb25uZWN0IHRvIERpc2NvcmQgKi9cbiAgdG9rZW46IHN0cmluZ1xuICAvKiogVGhlIFVSTCBvZiB0aGUgZ2F0ZXdheSB3aGljaCBzaG91bGQgYmUgY29ubmVjdGVkIHRvLlxuICAgKlxuICAgKiBAZGVmYXVsdCBcIndzczovL2dhdGV3YXkuZGlzY29yZC5nZ1wiXG4gICAqL1xuICB1cmw/OiBzdHJpbmdcbiAgLyoqIFRoZSBnYXRld2F5IHZlcnNpb24gd2hpY2ggc2hvdWxkIGJlIHVzZWQuXG4gICAqXG4gICAqIEBkZWZhdWx0IDEwXG4gICAqL1xuICB2ZXJzaW9uPzogbnVtYmVyXG4gIC8qKiBUaGUgZXZlbnRzIGhhbmRsZXJzICovXG4gIGV2ZW50cz86IFNoYXJkRXZlbnRzXG4gIC8qKiBUaGlzIG1hbmFnZXJzIGNhY2hlIHJlbGF0ZWQgc2V0dGluZ3MuICovXG4gIGNhY2hlPzoge1xuICAgIHJlcXVlc3RNZW1iZXJzPzoge1xuICAgICAgLyoqXG4gICAgICAgKiBXaGV0aGVyIG9yIG5vdCByZXF1ZXN0IG1lbWJlciByZXF1ZXN0cyBzaG91bGQgYmUgY2FjaGVkLlxuICAgICAgICogQGRlZmF1bHQgZmFsc2VcbiAgICAgICAqL1xuICAgICAgZW5hYmxlZD86IGJvb2xlYW5cbiAgICB9XG4gIH1cbiAgLyoqXG4gICAqIFRoZSBsb2dnZXIgdGhhdCB0aGUgZ2F0ZXdheSBtYW5hZ2VyIHdpbGwgdXNlLlxuICAgKiBAZGVmYXVsdCBsb2dnZXIgLy8gVGhlIGxvZ2dlciBleHBvcnRlZCBieSBgQGRpc2NvcmRlbm8vdXRpbHNgXG4gICAqL1xuICBsb2dnZXI/OiBQaWNrPHR5cGVvZiBsb2dnZXIsICdkZWJ1ZycgfCAnaW5mbycgfCAnd2FybicgfCAnZXJyb3InIHwgJ2ZhdGFsJz5cbiAgLyoqXG4gICAqIE1ha2UgdGhlIHByZXNlbmNlIGZvciB3aGVuIHRoZSBib3QgY29ubmVjdHMgdG8gdGhlIGdhdGV3YXlcbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogVGhpcyBmdW5jdGlvbiB3aWxsIGJlIGNhbGxlZCBlYWNoIHRpbWUgYSBTaGFyZCBpcyBnb2luZyB0byBpZGVudGlmeVxuICAgKi9cbiAgbWFrZVByZXNlbmNlPzogKCkgPT4gUHJvbWlzZTxEaXNjb3JkVXBkYXRlUHJlc2VuY2UgfCB1bmRlZmluZWQ+XG4gIC8qKiBPcHRpb25zIHJlbGF0ZWQgdG8gcmVzaGFyZGluZy4gKi9cbiAgcmVzaGFyZGluZz86IHtcbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIG9yIG5vdCBhdXRvbWF0ZWQgcmVzaGFyZGluZyBzaG91bGQgYmUgZW5hYmxlZC5cbiAgICAgKiBAZGVmYXVsdCB0cnVlXG4gICAgICovXG4gICAgZW5hYmxlZDogYm9vbGVhblxuICAgIC8qKlxuICAgICAqIFRoZSAlIG9mIGhvdyBmdWxsIGEgc2hhcmQgaXMgd2hlbiByZXNoYXJkaW5nIHNob3VsZCBiZSB0cmlnZ2VyZWQuXG4gICAgICpcbiAgICAgKiBAcmVtYXJrc1xuICAgICAqIFdlIHVzZSBkaXNjb3JkIHJlY29tbWVuZGVkIHNoYXJkIHZhbHVlIHRvIGdldCBhbiAqKmFwcHJveGltYXRpb24qKiBvZiB0aGUgc2hhcmQgZnVsbCBwZXJjZW50YWdlIHRvIGNvbXBhcmUgd2l0aCB0aGlzIHZhbHVlIHNvIHRoZSBib3QgbWF5IG5vdCByZXNoYXJkIGF0IHRoZSBleGFjdCBwZXJjZW50YWdlIHByb3ZpZGVkIGJ1dCBtYXkgcmVzaGFyZCB3aGVuIGl0IGlzIGEgYml0IGhpZ2hlciB0aGFuIHRoZSBwcm92aWRlZCBwZXJjZW50YWdlLlxuICAgICAqIEZvciBhY2N1cmF0ZSBjYWxjdWxhdGlvbiwgeW91IG1heSBvdmVycmlkZSB0aGUgYGNoZWNrSWZSZXNoYXJkaW5nSXNOZWVkZWRgIGZ1bmN0aW9uXG4gICAgICpcbiAgICAgKiBAZGVmYXVsdCA4MCBhcyBpbiA4MCVcbiAgICAgKi9cbiAgICBzaGFyZHNGdWxsUGVyY2VudGFnZTogbnVtYmVyXG4gICAgLyoqXG4gICAgICogVGhlIGludGVydmFsIGluIG1pbGxpc2Vjb25kcywgb2YgaG93IG9mdGVuIHRvIGNoZWNrIHdoZXRoZXIgcmVzaGFyZGluZyBpcyBuZWVkZWQgYW5kIHJlc2hhcmQgYXV0b21hdGljYWxseS4gU2V0IHRvIC0xIHRvIGRpc2FibGUgYXV0byByZXNoYXJkaW5nLlxuICAgICAqIEBkZWZhdWx0IDI4ODAwMDAwICg4IGhvdXJzKVxuICAgICAqL1xuICAgIGNoZWNrSW50ZXJ2YWw6IG51bWJlclxuICAgIC8qKiBIYW5kbGVyIHRvIGdldCBzaGFyZCBjb3VudCBhbmQgb3RoZXIgc2Vzc2lvbiBpbmZvLiAqL1xuICAgIGdldFNlc3Npb25JbmZvPzogKCkgPT4gUHJvbWlzZTxDYW1lbGl6ZTxEaXNjb3JkR2V0R2F0ZXdheUJvdD4+XG4gICAgLyoqIEhhbmRsZXIgdG8gZWRpdCB0aGUgc2hhcmQgaWQgb24gYW55IGNhY2hlZCBndWlsZHMuICovXG4gICAgdXBkYXRlR3VpbGRzU2hhcmRJZD86IChndWlsZElkczogc3RyaW5nW10sIHNoYXJkSWQ6IG51bWJlcikgPT4gUHJvbWlzZTx2b2lkPlxuICB9XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgR2F0ZXdheU1hbmFnZXIgZXh0ZW5kcyBSZXF1aXJlZDxDcmVhdGVHYXRld2F5TWFuYWdlck9wdGlvbnM+IHtcbiAgLyoqIFRoZSBtYXggY29uY3VycmVuY3kgYnVja2V0cy4gVGhvc2Ugd2lsbCBiZSBjcmVhdGVkIHdoZW4gdGhlIGBzcGF3blNoYXJkc2AgKHdoaWNoIGNhbGxzIGBwcmVwYXJlQnVja2V0c2AgdW5kZXIgdGhlIGhvb2QpIGZ1bmN0aW9uIGdldHMgY2FsbGVkLiAqL1xuICBidWNrZXRzOiBNYXA8XG4gICAgbnVtYmVyLFxuICAgIHtcbiAgICAgIHdvcmtlcnM6IEFycmF5PHsgaWQ6IG51bWJlcjsgcXVldWU6IG51bWJlcltdIH0+XG4gICAgICAvKiogVGhlIGJ1Y2tldCB0byBxdWV1ZSB0aGUgaWRlbnRpZmllcy4gKi9cbiAgICAgIGxlYWt5QnVja2V0OiBMZWFreUJ1Y2tldFxuICAgIH1cbiAgPlxuICAvKiogVGhlIHNoYXJkcyB0aGF0IGFyZSBjcmVhdGVkLiAqL1xuICBzaGFyZHM6IE1hcDxudW1iZXIsIFNoYXJkPlxuICAvKiogVGhlIGxvZ2dlciBmb3IgdGhlIGdhdGV3YXkgbWFuYWdlci4gKi9cbiAgbG9nZ2VyOiBQaWNrPHR5cGVvZiBsb2dnZXIsICdkZWJ1ZycgfCAnaW5mbycgfCAnd2FybicgfCAnZXJyb3InIHwgJ2ZhdGFsJz5cbiAgLyoqIEV2ZXJ5dGhpbmcgcmVsYXRlZCB0byByZXNoYXJkaW5nLiAqL1xuICByZXNoYXJkaW5nOiBDcmVhdGVHYXRld2F5TWFuYWdlck9wdGlvbnNbJ3Jlc2hhcmRpbmcnXSAmIHtcbiAgICAvKiogVGhlIGludGVydmFsIGlkIG9mIHRoZSBjaGVjayBpbnRlcnZhbC4gVGhpcyBpcyB1c2VkIHRvIGNsZWFyIHRoZSBpbnRlcnZhbCB3aGVuIHRoZSBtYW5hZ2VyIGlzIHNodXRkb3duLiAqL1xuICAgIGNoZWNrSW50ZXJ2YWxJZD86IE5vZGVKUy5UaW1lb3V0IHwgdW5kZWZpbmVkXG4gICAgLyoqIEhvbGRzIHRoZSBzaGFyZHMgdGhhdCByZXNoYXJkaW5nIGhhcyBjcmVhdGVkLiBPbmNlIHJlc2hhcmRpbmcgaXMgZG9uZSwgdGhpcyByZXBsYWNlcyB0aGUgZ2F0ZXdheS5zaGFyZHMgKi9cbiAgICBzaGFyZHM6IE1hcDxudW1iZXIsIFNoYXJkPlxuICAgIC8qKiBIYW5kbGVyIHRvIGNoZWNrIGlmIHJlc2hhcmRpbmcgaXMgbmVjZXNzYXJ5LiAqL1xuICAgIGNoZWNrSWZSZXNoYXJkaW5nSXNOZWVkZWQ6ICgpID0+IFByb21pc2U8eyBuZWVkZWQ6IGJvb2xlYW47IGluZm8/OiBDYW1lbGl6ZTxEaXNjb3JkR2V0R2F0ZXdheUJvdD4gfT5cbiAgICAvKipcbiAgICAgKiBIYW5kbGVyIHRvIGJlZ2luIHJlc2hhcmRpbmcuXG4gICAgICpcbiAgICAgKiBAcmVtYXJrc1xuICAgICAqIFRoaXMgZnVuY3Rpb24gd2lsbCByZXNvbHZlIG9uY2UgdGhlIHJlc2hhcmRpbmcgaXMgZG9uZS5cbiAgICAgKiBTbyB3aGVuIGFsbCB0aGUgY2FsbHMgdG8ge0BsaW5rIHRlbGxXb3JrZXJUb1ByZXBhcmV9IGFuZCB7QGxpbmsgb25SZXNoYXJkaW5nU3dpdGNofSBhcmUgZG9uZS5cbiAgICAgKi9cbiAgICByZXNoYXJkOiAoaW5mbzogQ2FtZWxpemU8RGlzY29yZEdldEdhdGV3YXlCb3Q+ICYgeyBmaXJzdFNoYXJkSWQ/OiBudW1iZXI7IGxhc3RTaGFyZElkPzogbnVtYmVyIH0pID0+IFByb21pc2U8dm9pZD5cbiAgICAvKipcbiAgICAgKiBIYW5kbGVyIHRvIGNvbW11bmljYXRlIHRvIGEgd29ya2VyIHRoYXQgaXQgbmVlZHMgdG8gc3Bhd24gYSBuZXcgc2hhcmQgYW5kIGlkZW50aWZ5IGl0IGZvciB0aGUgcmVzaGFyZGluZy5cbiAgICAgKlxuICAgICAqIEByZW1hcmtzXG4gICAgICogVGhpcyBoYW5kbGVyIHdvcmtzIGluIHRoZSBzYW1lIHdheSBhcyB0aGUge0BsaW5rIHRlbGxXb3JrZXJUb0lkZW50aWZ5fSBoYW5kbGVyLlxuICAgICAqIFNvIHlvdSBzaG91bGQgd2FpdCBmb3IgdGhlIHdvcmtlciB0byBoYXZlIGlkZW50aWZpZWQgdGhlIHNoYXJkIGJlZm9yZSByZXNvbHZpbmcgdGhlIHByb21pc2VcbiAgICAgKi9cbiAgICB0ZWxsV29ya2VyVG9QcmVwYXJlOiAod29ya2VySWQ6IG51bWJlciwgc2hhcmRJZDogbnVtYmVyLCBidWNrZXRJZDogbnVtYmVyKSA9PiBQcm9taXNlPHZvaWQ+XG4gICAgLyoqXG4gICAgICogSGFuZGxlIGNhbGxlZCB3aGVuIGFsbCB0aGUgd29ya2VycyBoYXZlIGZpbmlzaGVkIHByZXBhcmluZyBmb3IgdGhlIHJlc2hhcmRpbmcuXG4gICAgICpcbiAgICAgKiBUaGlzIHNob3VsZCBtYWtlIHRoZSBuZXcgcmVzaGFyZGVkIHNoYXJkcyBiZWNvbWUgdGhlIGFjdGl2ZSBvbmVzIGFuZCBzaHV0ZG93biB0aGUgb2xkIG9uZXNcbiAgICAgKi9cbiAgICBvblJlc2hhcmRpbmdTd2l0Y2g6ICgpID0+IFByb21pc2U8dm9pZD5cbiAgfVxuICAvKiogRGV0ZXJtaW5lIG1heCBudW1iZXIgb2Ygc2hhcmRzIHRvIHVzZSBiYXNlZCB1cG9uIHRoZSBtYXggY29uY3VycmVuY3kuICovXG4gIGNhbGN1bGF0ZVRvdGFsU2hhcmRzOiAoKSA9PiBudW1iZXJcbiAgLyoqIERldGVybWluZSB0aGUgaWQgb2YgdGhlIHdvcmtlciB3aGljaCBpcyBoYW5kbGluZyBhIHNoYXJkLiAqL1xuICBjYWxjdWxhdGVXb3JrZXJJZDogKHNoYXJkSWQ6IG51bWJlcikgPT4gbnVtYmVyXG4gIC8qKiBQcmVwYXJlcyBhbGwgdGhlIGJ1Y2tldHMgdGhhdCBhcmUgYXZhaWxhYmxlIGZvciBpZGVudGlmeWluZyB0aGUgc2hhcmRzLiAqL1xuICBwcmVwYXJlQnVja2V0czogKCkgPT4gdm9pZFxuICAvKiogU3RhcnQgaWRlbnRpZnlpbmcgYWxsIHRoZSBzaGFyZHMuICovXG4gIHNwYXduU2hhcmRzOiAoKSA9PiBQcm9taXNlPHZvaWQ+XG4gIC8qKiBTaHV0ZG93biBhbGwgc2hhcmRzLiAqL1xuICBzaHV0ZG93bjogKGNvZGU6IG51bWJlciwgcmVhc29uOiBzdHJpbmcsIGNsZWFyUmVzaGFyZGluZ0ludGVydmFsPzogYm9vbGVhbikgPT4gUHJvbWlzZTx2b2lkPlxuICBzZW5kUGF5bG9hZDogKHNoYXJkSWQ6IG51bWJlciwgcGF5bG9hZDogU2hhcmRTb2NrZXRSZXF1ZXN0KSA9PiBQcm9taXNlPHZvaWQ+XG4gIC8qKlxuICAgKiBBbGxvd3MgdXNlcnMgdG8gaG9vayBpbiBhbmQgY2hhbmdlIHRvIGNvbW11bmljYXRlIHRvIGRpZmZlcmVudCB3b3JrZXJzIGFjcm9zcyBkaWZmZXJlbnQgc2VydmVycyBvciBhbnl0aGluZyB0aGV5IGxpa2UuXG4gICAqIEZvciBleGFtcGxlIHVzaW5nIHJlZGlzIHB1YnN1YiB0byB0YWxrIHRvIG90aGVyIHNlcnZlcnMuXG4gICAqXG4gICAqIEByZW1hcmtzXG4gICAqIFRoaXMgc2hvdWxkIHdhaXQgZm9yIHRoZSB3b3JrZXIgdG8gaGF2ZSBpZGVudGlmaWVkIHRoZSBzaGFyZCBiZWZvcmUgcmVzb2x2aW5nIHRoZSByZXR1cm5lZCBwcm9taXNlXG4gICAqL1xuICB0ZWxsV29ya2VyVG9JZGVudGlmeTogKHdvcmtlcklkOiBudW1iZXIsIHNoYXJkSWQ6IG51bWJlciwgYnVja2V0SWQ6IG51bWJlcikgPT4gUHJvbWlzZTx2b2lkPlxuICAvKiogVGVsbCB0aGUgbWFuYWdlciB0byBpZGVudGlmeSBhIFNoYXJkLiBJZiB0aGlzIFNoYXJkIGlzIG5vdCBhbHJlYWR5IG1hbmFnZWQgdGhpcyB3aWxsIGFsc28gYWRkIHRoZSBTaGFyZCB0byB0aGUgbWFuYWdlci4gKi9cbiAgaWRlbnRpZnk6IChzaGFyZElkOiBudW1iZXIpID0+IFByb21pc2U8dm9pZD5cbiAgLyoqIEtpbGwgYSBzaGFyZC4gQ2xvc2UgYSBzaGFyZHMgY29ubmVjdGlvbiB0byBEaXNjb3JkJ3MgZ2F0ZXdheSAoaWYgYW55KSBhbmQgcmVtb3ZlIGl0IGZyb20gdGhlIG1hbmFnZXIuICovXG4gIGtpbGw6IChzaGFyZElkOiBudW1iZXIpID0+IFByb21pc2U8dm9pZD5cbiAgLyoqIFRoaXMgZnVuY3Rpb24gbWFrZXMgc3VyZSB0aGF0IHRoZSBidWNrZXQgaXMgYWxsb3dlZCB0byBtYWtlIHRoZSBuZXh0IGlkZW50aWZ5IHJlcXVlc3QuICovXG4gIHJlcXVlc3RJZGVudGlmeTogKHNoYXJkSWQ6IG51bWJlcikgPT4gUHJvbWlzZTx2b2lkPlxuICAvKiogQ2FsY3VsYXRlcyB0aGUgbnVtYmVyIG9mIHNoYXJkcyBiYXNlZCBvbiB0aGUgZ3VpbGQgaWQgYW5kIHRvdGFsIHNoYXJkcy4gKi9cbiAgY2FsY3VsYXRlU2hhcmRJZDogKGd1aWxkSWQ6IEJpZ1N0cmluZywgdG90YWxTaGFyZHM/OiBudW1iZXIpID0+IG51bWJlclxuICAvKipcbiAgICogQ29ubmVjdHMgdGhlIGJvdCB1c2VyIHRvIGEgdm9pY2Ugb3Igc3RhZ2UgY2hhbm5lbC5cbiAgICpcbiAgICogVGhpcyBmdW5jdGlvbiBzZW5kcyB0aGUgX1VwZGF0ZSBWb2ljZSBTdGF0ZV8gZ2F0ZXdheSBjb21tYW5kIG92ZXIgdGhlIGdhdGV3YXkgYmVoaW5kIHRoZSBzY2VuZXMuXG4gICAqXG4gICAqIEBwYXJhbSBndWlsZElkIC0gVGhlIElEIG9mIHRoZSBndWlsZCB0aGUgdm9pY2UgY2hhbm5lbCB0byBsZWF2ZSBpcyBpbi5cbiAgICogQHBhcmFtIGNoYW5uZWxJZCAtIFRoZSBJRCBvZiB0aGUgY2hhbm5lbCB5b3Ugd2FudCB0byBqb2luLlxuICAgKlxuICAgKiBAcmVtYXJrc1xuICAgKiBSZXF1aXJlcyB0aGUgYENPTk5FQ1RgIHBlcm1pc3Npb24uXG4gICAqXG4gICAqIEZpcmVzIGEgX1ZvaWNlIFN0YXRlIFVwZGF0ZV8gZ2F0ZXdheSBldmVudC5cbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL2RvY3MvdG9waWNzL2dhdGV3YXkjdXBkYXRlLXZvaWNlLXN0YXRlfVxuICAgKi9cbiAgam9pblZvaWNlQ2hhbm5lbDogKGd1aWxkSWQ6IEJpZ1N0cmluZywgY2hhbm5lbElkOiBCaWdTdHJpbmcsIG9wdGlvbnM/OiBBdExlYXN0T25lPE9taXQ8VXBkYXRlVm9pY2VTdGF0ZSwgJ2d1aWxkSWQnIHwgJ2NoYW5uZWxJZCc+PikgPT4gUHJvbWlzZTx2b2lkPlxuICAvKipcbiAgICogRWRpdHMgdGhlIGJvdCBzdGF0dXMgaW4gYWxsIHNoYXJkcyB0aGF0IHRoaXMgZ2F0ZXdheSBtYW5hZ2VzLlxuICAgKlxuICAgKiBAcGFyYW0gZGF0YSBUaGUgc3RhdHVzIGRhdGEgdG8gc2V0IHRoZSBib3RzIHN0YXR1cyB0by5cbiAgICogQHJldHVybnMgbm90aGluZ1xuICAgKi9cbiAgZWRpdEJvdFN0YXR1czogKGRhdGE6IERpc2NvcmRVcGRhdGVQcmVzZW5jZSkgPT4gUHJvbWlzZTx2b2lkPlxuICAvKipcbiAgICogRWRpdHMgdGhlIGJvdCdzIHN0YXR1cyBvbiBvbmUgc2hhcmQuXG4gICAqXG4gICAqIEBwYXJhbSBzaGFyZElkIFRoZSBzaGFyZCBpZCB0byBlZGl0IHRoZSBzdGF0dXMgZm9yLlxuICAgKiBAcGFyYW0gZGF0YSBUaGUgc3RhdHVzIGRhdGEgdG8gc2V0IHRoZSBib3RzIHN0YXR1cyB0by5cbiAgICogQHJldHVybnMgbm90aGluZ1xuICAgKi9cbiAgZWRpdFNoYXJkU3RhdHVzOiAoc2hhcmRJZDogbnVtYmVyLCBkYXRhOiBEaXNjb3JkVXBkYXRlUHJlc2VuY2UpID0+IFByb21pc2U8dm9pZD5cbiAgLyoqXG4gICAqIEZldGNoZXMgdGhlIGxpc3Qgb2YgbWVtYmVycyBmb3IgYSBndWlsZCBvdmVyIHRoZSBnYXRld2F5LiBJZiBgZ2F0ZXdheS5jYWNoZS5yZXF1ZXN0TWVtYmVycy5lbmFibGVkYCBpcyBub3Qgc2V0LCB0aGlzIGZ1bmN0aW9uIHdpbGwgcmV0dXJuIGFuIGVtcHR5IGFycmF5IGFuZCB5b3UnbGwgaGF2ZSB0byBoYW5kbGUgdGhlIGBHVUlMRF9NRU1CRVJTX0NIVU5LYCBldmVudHMgeW91cnNlbGYuXG4gICAqXG4gICAqIEBwYXJhbSBndWlsZElkIC0gVGhlIElEIG9mIHRoZSBndWlsZCB0byBnZXQgdGhlIGxpc3Qgb2YgbWVtYmVycyBmb3IuXG4gICAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIHBhcmFtZXRlcnMgZm9yIHRoZSBmZXRjaGluZyBvZiB0aGUgbWVtYmVycy5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogSWYgcmVxdWVzdGluZyB0aGUgZW50aXJlIG1lbWJlciBsaXN0OlxuICAgKiAtIFJlcXVpcmVzIHRoZSBgR1VJTERfTUVNQkVSU2AgaW50ZW50LlxuICAgKlxuICAgKiBJZiByZXF1ZXN0aW5nIHByZXNlbmNlcyAoe0BsaW5rIFJlcXVlc3RHdWlsZE1lbWJlcnMucHJlc2VuY2VzIHwgcHJlc2VuY2VzfSBzZXQgdG8gYHRydWVgKTpcbiAgICogLSBSZXF1aXJlcyB0aGUgYEdVSUxEX1BSRVNFTkNFU2AgaW50ZW50LlxuICAgKlxuICAgKiBJZiByZXF1ZXN0aW5nIGEgcHJlZml4ICh7QGxpbmsgUmVxdWVzdEd1aWxkTWVtYmVycy5xdWVyeSB8IHF1ZXJ5fSBub24tYHVuZGVmaW5lZGApOlxuICAgKiAtIFJldHVybnMgYSBtYXhpbXVtIG9mIDEwMCBtZW1iZXJzLlxuICAgKlxuICAgKiBJZiByZXF1ZXN0aW5nIGEgdXNlcnMgYnkgSUQgKHtAbGluayBSZXF1ZXN0R3VpbGRNZW1iZXJzLnVzZXJJZHMgfCB1c2VySWRzfSBub24tYHVuZGVmaW5lZGApOlxuICAgKiAtIFJldHVybnMgYSBtYXhpbXVtIG9mIDEwMCBtZW1iZXJzLlxuICAgKlxuICAgKiBGaXJlcyBhIF9HdWlsZCBNZW1iZXJzIENodW5rXyBnYXRld2F5IGV2ZW50IGZvciBldmVyeSAxMDAwIG1lbWJlcnMgZmV0Y2hlZC5cbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL2RvY3MvdG9waWNzL2dhdGV3YXkjcmVxdWVzdC1ndWlsZC1tZW1iZXJzfVxuICAgKi9cbiAgcmVxdWVzdE1lbWJlcnM6IChndWlsZElkOiBCaWdTdHJpbmcsIG9wdGlvbnM/OiBPbWl0PFJlcXVlc3RHdWlsZE1lbWJlcnMsICdndWlsZElkJz4pID0+IFByb21pc2U8Q2FtZWxpemU8RGlzY29yZE1lbWJlcldpdGhVc2VyW10+PlxuICAvKipcbiAgICogTGVhdmVzIHRoZSB2b2ljZSBjaGFubmVsIHRoZSBib3QgdXNlciBpcyBjdXJyZW50bHkgaW4uXG4gICAqXG4gICAqIFRoaXMgZnVuY3Rpb24gc2VuZHMgdGhlIF9VcGRhdGUgVm9pY2UgU3RhdGVfIGdhdGV3YXkgY29tbWFuZCBvdmVyIHRoZSBnYXRld2F5IGJlaGluZCB0aGUgc2NlbmVzLlxuICAgKlxuICAgKiBAcGFyYW0gZ3VpbGRJZCAtIFRoZSBJRCBvZiB0aGUgZ3VpbGQgdGhlIHZvaWNlIGNoYW5uZWwgdG8gbGVhdmUgaXMgaW4uXG4gICAqXG4gICAqIEByZW1hcmtzXG4gICAqIEZpcmVzIGEgX1ZvaWNlIFN0YXRlIFVwZGF0ZV8gZ2F0ZXdheSBldmVudC5cbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL2RvY3MvdG9waWNzL2dhdGV3YXkjdXBkYXRlLXZvaWNlLXN0YXRlfVxuICAgKi9cbiAgbGVhdmVWb2ljZUNoYW5uZWw6IChndWlsZElkOiBCaWdTdHJpbmcpID0+IFByb21pc2U8dm9pZD5cbiAgLyoqXG4gICAqIFVzZWQgdG8gcmVxdWVzdCBzb3VuZGJvYXJkIHNvdW5kcyBmb3IgYSBsaXN0IG9mIGd1aWxkcy5cbiAgICpcbiAgICogVGhpcyBmdW5jdGlvbiBzZW5kcyBtdWx0aXBsZSAoc2VlIHJlbWFya3MpIF9SZXF1ZXN0IFNvdW5kYm9hcmQgU291bmRzXyBnYXRld2F5IGNvbW1hbmQgb3ZlciB0aGUgZ2F0ZXdheSBiZWhpbmQgdGhlIHNjZW5lcy5cbiAgICpcbiAgICogQHBhcmFtIGd1aWxkSWRzIC0gVGhlIGd1aWxkcyB0byBnZXQgdGhlIHNvdW5kcyBmcm9tXG4gICAqXG4gICAqIEByZW1hcmtzXG4gICAqIEZpcmVzIGEgX1NvdW5kYm9hcmQgU291bmRzXyBnYXRld2F5IGV2ZW50LlxuICAgKlxuICAgKiDimqDvuI8gRGlzY29yZCB3aWxsIHNlbmQgdGhlIF9Tb3VuZGJvYXJkIFNvdW5kc18gZm9yIGVhY2ggb2YgdGhlIGd1aWxkIGlkc1xuICAgKiBob3dldmVyIHlvdSBtYXkgbm90IHJlY2VpdmUgdGhlIHNhbWUgbnVtYmVyIG9mIGV2ZW50cyBhcyB0aGUgaWRzIHBhc3NlZCB0byBfUmVxdWVzdCBTb3VuZGJvYXJkIFNvdW5kc18gZm9yIG9uZSBvZiB0aGUgZm9sbG93aW5nIHJlYXNvbnM6XG4gICAqIC0gVGhlIGJvdCBpcyBub3QgaW4gdGhlIHNlcnZlciBwcm92aWRlZFxuICAgKiAtIFRoZSBzaGFyZCB0aGUgbWVzc2FnZSBoYXMgYmVlbiBzZW50IGZyb20gZG9lcyBub3QgcmVjZWl2ZSBldmVudHMgZm9yIHRoZSBzcGVjaWZpZWQgZ3VpbGRcbiAgICpcbiAgICogVG8gYXZvaWQgdGhpcyBEaXNjb3JkZW5vIHdpbGwgYXV0b21hdGljYWxseSB0cnkgdG8gZ3JvdXAgdGhlIGlkcyBiYXNlZCBvbiB3aGF0IHNoYXJkIHRoZXkgd2lsbCBuZWVkIHRvIGJlIHNlbnQsIGJ1dCB0aGlzIGludm9sdmVzIHNlbmRpbmcgbXVsdGlwbGUgbWVzc2FnZXMgaW4gbXVsdGlwbGUgc2hhcmRzXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGlzY29yZC5jb20vZGV2ZWxvcGVycy9kb2NzL3RvcGljcy9nYXRld2F5LWV2ZW50cyNyZXF1ZXN0LXNvdW5kYm9hcmQtc291bmRzfVxuICAgKi9cbiAgcmVxdWVzdFNvdW5kYm9hcmRTb3VuZHM6IChndWlsZElkczogQmlnU3RyaW5nW10pID0+IFByb21pc2U8dm9pZD5cbiAgLyoqIFRoaXMgbWFuYWdlcnMgY2FjaGUgcmVsYXRlZCBzZXR0aW5ncy4gKi9cbiAgY2FjaGU6IHtcbiAgICByZXF1ZXN0TWVtYmVyczoge1xuICAgICAgLyoqXG4gICAgICAgKiBXaGV0aGVyIG9yIG5vdCByZXF1ZXN0IG1lbWJlciByZXF1ZXN0cyBzaG91bGQgYmUgY2FjaGVkLlxuICAgICAgICogQGRlZmF1bHQgZmFsc2VcbiAgICAgICAqL1xuICAgICAgZW5hYmxlZDogYm9vbGVhblxuICAgICAgLyoqIFRoZSBwZW5kaW5nIHJlcXVlc3RzLiAqL1xuICAgICAgcGVuZGluZzogQ29sbGVjdGlvbjxzdHJpbmcsIFJlcXVlc3RNZW1iZXJSZXF1ZXN0PlxuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIFJlcXVlc3RNZW1iZXJSZXF1ZXN0IHtcbiAgLyoqIFRoZSB1bmlxdWUgbm9uY2UgZm9yIHRoaXMgcmVxdWVzdC4gKi9cbiAgbm9uY2U6IHN0cmluZ1xuICAvKiogVGhlIHJlc29sdmVyIGhhbmRsZXIgdG8gcnVuIHdoZW4gYWxsIG1lbWJlcnMgYXJyaXZlLiAqL1xuICByZXNvbHZlOiAodmFsdWU6IENhbWVsaXplPERpc2NvcmRNZW1iZXJXaXRoVXNlcltdPiB8IFByb21pc2VMaWtlPENhbWVsaXplPERpc2NvcmRNZW1iZXJXaXRoVXNlcltdPj4pID0+IHZvaWRcbiAgLyoqIFRoZSBtZW1iZXJzIHRoYXQgaGF2ZSBhbHJlYWR5IGFycml2ZWQgZm9yIHRoaXMgcmVxdWVzdC4gKi9cbiAgbWVtYmVyczogRGlzY29yZE1lbWJlcldpdGhVc2VyW11cbn1cbiJdLCJuYW1lcyI6WyJyYW5kb21CeXRlcyIsIkdhdGV3YXlJbnRlbnRzIiwiR2F0ZXdheU9wY29kZXMiLCJDb2xsZWN0aW9uIiwianNvblNhZmVSZXBsYWNlciIsIkxlYWt5QnVja2V0IiwibG9nZ2VyIiwiU2hhcmQiLCJTaGFyZFNvY2tldENsb3NlQ29kZXMiLCJjcmVhdGVHYXRld2F5TWFuYWdlciIsIm9wdGlvbnMiLCJjb25uZWN0aW9uT3B0aW9ucyIsImNvbm5lY3Rpb24iLCJ1cmwiLCJzaGFyZHMiLCJzZXNzaW9uU3RhcnRMaW1pdCIsIm1heENvbmN1cnJlbmN5IiwicmVtYWluaW5nIiwidG90YWwiLCJyZXNldEFmdGVyIiwiZ2F0ZXdheSIsImV2ZW50cyIsImNvbXByZXNzIiwidHJhbnNwb3J0Q29tcHJlc3Npb24iLCJpbnRlbnRzIiwicHJvcGVydGllcyIsIm9zIiwicHJvY2VzcyIsInBsYXRmb3JtIiwiYnJvd3NlciIsImRldmljZSIsInRva2VuIiwidmVyc2lvbiIsInRvdGFsU2hhcmRzIiwibGFzdFNoYXJkSWQiLCJmaXJzdFNoYXJkSWQiLCJ0b3RhbFdvcmtlcnMiLCJzaGFyZHNQZXJXb3JrZXIiLCJzcGF3blNoYXJkRGVsYXkiLCJzcHJlYWRTaGFyZHNJblJvdW5kUm9iaW4iLCJwcmVmZXJTbmFrZUNhc2UiLCJNYXAiLCJidWNrZXRzIiwiY2FjaGUiLCJyZXF1ZXN0TWVtYmVycyIsImVuYWJsZWQiLCJwZW5kaW5nIiwibWFrZVByZXNlbmNlIiwiUHJvbWlzZSIsInJlc29sdmUiLCJ1bmRlZmluZWQiLCJyZXNoYXJkaW5nIiwic2hhcmRzRnVsbFBlcmNlbnRhZ2UiLCJjaGVja0ludGVydmFsIiwiZ2V0U2Vzc2lvbkluZm8iLCJ1cGRhdGVHdWlsZHNTaGFyZElkIiwiY2hlY2tJZlJlc2hhcmRpbmdJc05lZWRlZCIsImRlYnVnIiwibmVlZGVkIiwiRXJyb3IiLCJzZXNzaW9uSW5mbyIsIkpTT04iLCJzdHJpbmdpZnkiLCJpbmZvIiwicGVyY2VudGFnZSIsInJlc2hhcmQiLCJjYWxjdWxhdGVUb3RhbFNoYXJkcyIsImNsZWFyIiwicHJlcGFyZUJ1Y2tldHMiLCJwcm9taXNlcyIsIkFycmF5IiwiZnJvbSIsImVudHJpZXMiLCJtYXAiLCJidWNrZXRJZCIsImJ1Y2tldCIsIndvcmtlciIsIndvcmtlcnMiLCJzaGFyZElkIiwicXVldWUiLCJ0ZWxsV29ya2VyVG9QcmVwYXJlIiwiaWQiLCJhbGwiLCJvblJlc2hhcmRpbmdTd2l0Y2giLCJ3b3JrZXJJZCIsInNoYXJkIiwibWVzc2FnZSIsIl9zaGFyZCIsInBheWxvYWQiLCJ0IiwiZCIsImd1aWxkcyIsImciLCJyZXF1ZXN0SWRlbnRpZnkiLCJmb3J3YXJkVG9Cb3QiLCJzZXQiLCJpZGVudGlmeSIsInZhbHVlcyIsIm9sZEhhbmRsZXIiLCJfIiwic2h1dGRvd24iLCJSZXNoYXJkZWQiLCJNYXRoIiwiY2VpbCIsImNhbGN1bGF0ZVdvcmtlcklkIiwibWluIiwiZmxvb3IiLCJpIiwibGVha3lCdWNrZXQiLCJtYXgiLCJyZWZpbGxBbW91bnQiLCJyZWZpbGxJbnRlcnZhbCIsImdldCIsImZpbmQiLCJ3IiwicHVzaCIsInNwYXduU2hhcmRzIiwidGVsbFdvcmtlclRvSWRlbnRpZnkiLCJjbGVhckludGVydmFsIiwiY2hlY2tJbnRlcnZhbElkIiwid2FybiIsInNldEludGVydmFsIiwicmVzaGFyZGluZ0luZm8iLCJjb2RlIiwicmVhc29uIiwiY2xlYXJSZXNoYXJkaW5nSW50ZXJ2YWwiLCJjbG9zZSIsInNlbmRQYXlsb2FkIiwic2VuZCIsImFjcXVpcmUiLCJraWxsIiwiZGVsZXRlIiwiY2FsY3VsYXRlU2hhcmRJZCIsImd1aWxkSWQiLCJOdW1iZXIiLCJCaWdJbnQiLCJqb2luVm9pY2VDaGFubmVsIiwiY2hhbm5lbElkIiwib3AiLCJWb2ljZVN0YXRlVXBkYXRlIiwiZ3VpbGRfaWQiLCJ0b1N0cmluZyIsImNoYW5uZWxfaWQiLCJzZWxmX211dGUiLCJzZWxmTXV0ZSIsInNlbGZfZGVhZiIsInNlbGZEZWFmIiwiZWRpdEJvdFN0YXR1cyIsImRhdGEiLCJlZGl0U2hhcmRTdGF0dXMiLCJQcmVzZW5jZVVwZGF0ZSIsInNpbmNlIiwiYWZrIiwiYWN0aXZpdGllcyIsInN0YXR1cyIsImxpbWl0IiwiR3VpbGRNZW1iZXJzIiwidXNlcklkcyIsImxlbmd0aCIsIm5vbmNlIiwiaGFzIiwibWVtYmVycyIsInJlamVjdCIsIlJlcXVlc3RHdWlsZE1lbWJlcnMiLCJxdWVyeSIsInByZXNlbmNlcyIsInVzZXJfaWRzIiwibGVhdmVWb2ljZUNoYW5uZWwiLCJyZXF1ZXN0U291bmRib2FyZFNvdW5kcyIsImd1aWxkSWRzIiwiaWRzIiwiUmVxdWVzdFNvdW5kYm9hcmRTb3VuZHMiLCJndWlsZF9pZHMiXSwibWFwcGluZ3MiOiJBQUFBLFNBQVNBLFdBQVcsUUFBUSxjQUFhO0FBQ3pDLFNBUUVDLGNBQWMsRUFDZEMsY0FBYyxRQUVULG9CQUFtQjtBQUMxQixTQUFTQyxVQUFVLEVBQUVDLGdCQUFnQixFQUFFQyxXQUFXLEVBQUVDLE1BQU0sUUFBUSxvQkFBbUI7QUFDckYsT0FBT0MsV0FBVyxhQUFZO0FBQzlCLFNBQTJCQyxxQkFBcUIsUUFBbUYsYUFBWTtBQUUvSSxPQUFPLFNBQVNDLHFCQUFxQkMsT0FBb0M7SUFDdkUsTUFBTUMsb0JBQW9CRCxRQUFRRSxVQUFVLElBQUk7UUFDOUNDLEtBQUs7UUFDTEMsUUFBUTtRQUNSQyxtQkFBbUI7WUFDakJDLGdCQUFnQjtZQUNoQkMsV0FBVztZQUNYQyxPQUFPO1lBQ1BDLFlBQVksT0FBTyxLQUFLLEtBQUs7UUFDL0I7SUFDRjtJQUVBLE1BQU1DLFVBQTBCO1FBQzlCQyxRQUFRWCxRQUFRVyxNQUFNLElBQUksQ0FBQztRQUMzQkMsVUFBVVosUUFBUVksUUFBUSxJQUFJO1FBQzlCQyxzQkFBc0JiLFFBQVFhLG9CQUFvQixJQUFJO1FBQ3REQyxTQUFTZCxRQUFRYyxPQUFPLElBQUk7UUFDNUJDLFlBQVk7WUFDVkMsSUFBSWhCLFFBQVFlLFVBQVUs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
|
|
453
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9tYW5hZ2VyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHJhbmRvbUJ5dGVzIH0gZnJvbSAnbm9kZTpjcnlwdG8nO1xuaW1wb3J0IHtcbiAgdHlwZSBBdExlYXN0T25lLFxuICB0eXBlIEJpZ1N0cmluZyxcbiAgdHlwZSBDYW1lbGl6ZSxcbiAgdHlwZSBEaXNjb3JkR2V0R2F0ZXdheUJvdCxcbiAgdHlwZSBEaXNjb3JkTWVtYmVyV2l0aFVzZXIsXG4gIHR5cGUgRGlzY29yZFJlYWR5LFxuICB0eXBlIERpc2NvcmRVcGRhdGVQcmVzZW5jZSxcbiAgR2F0ZXdheUludGVudHMsXG4gIEdhdGV3YXlPcGNvZGVzLFxuICB0eXBlIFJlcXVlc3RHdWlsZE1lbWJlcnMsXG59IGZyb20gJ0BkaXNjb3JkZW5vL3R5cGVzJztcbmltcG9ydCB7IENvbGxlY3Rpb24sIGpzb25TYWZlUmVwbGFjZXIsIExlYWt5QnVja2V0LCBsb2dnZXIgfSBmcm9tICdAZGlzY29yZGVuby91dGlscyc7XG5pbXBvcnQgU2hhcmQgZnJvbSAnLi9TaGFyZC5qcyc7XG5pbXBvcnQgeyB0eXBlIFNoYXJkRXZlbnRzLCBTaGFyZFNvY2tldENsb3NlQ29kZXMsIHR5cGUgU2hhcmRTb2NrZXRSZXF1ZXN0LCB0eXBlIFRyYW5zcG9ydENvbXByZXNzaW9uLCB0eXBlIFVwZGF0ZVZvaWNlU3RhdGUgfSBmcm9tICcuL3R5cGVzLmpzJztcblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUdhdGV3YXlNYW5hZ2VyKG9wdGlvbnM6IENyZWF0ZUdhdGV3YXlNYW5hZ2VyT3B0aW9ucyk6IEdhdGV3YXlNYW5hZ2VyIHtcbiAgY29uc3QgY29ubmVjdGlvbk9wdGlvbnMgPSBvcHRpb25zLmNvbm5lY3Rpb24gPz8ge1xuICAgIHVybDogJ3dzczovL2dhdGV3YXkuZGlzY29yZC5nZycsXG4gICAgc2hhcmRzOiAxLFxuICAgIHNlc3Npb25TdGFydExpbWl0OiB7XG4gICAgICBtYXhDb25jdXJyZW5jeTogMSxcbiAgICAgIHJlbWFpbmluZzogMTAwMCxcbiAgICAgIHRvdGFsOiAxMDAwLFxuICAgICAgcmVzZXRBZnRlcjogMTAwMCAqIDYwICogNjAgKiAyNCxcbiAgICB9LFxuICB9O1xuXG4gIGNvbnN0IGdhdGV3YXk6IEdhdGV3YXlNYW5hZ2VyID0ge1xuICAgIGV2ZW50czogb3B0aW9ucy5ldmVudHMgPz8ge30sXG4gICAgY29tcHJlc3M6IG9wdGlvbnMuY29tcHJlc3MgPz8gZmFsc2UsXG4gICAgdHJhbnNwb3J0Q29tcHJlc3Npb246IG9wdGlvbnMudHJhbnNwb3J0Q29tcHJlc3Npb24gPz8gbnVsbCxcbiAgICBpbnRlbnRzOiBvcHRpb25zLmludGVudHMgPz8gMCxcbiAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICBvczogb3B0aW9ucy5wcm9wZXJ0aWVzPy5vcyA/PyBwcm9jZXNzLnBsYXRmb3JtLFxuICAgICAgYnJvd3Nlcjogb3B0aW9ucy5wcm9wZXJ0aWVzPy5icm93c2VyID8/ICdEaXNjb3JkZW5vJyxcbiAgICAgIGRldmljZTogb3B0aW9ucy5wcm9wZXJ0aWVzPy5kZXZpY2UgPz8gJ0Rpc2NvcmRlbm8nLFxuICAgIH0sXG4gICAgdG9rZW46IG9wdGlvbnMudG9rZW4sXG4gICAgdXJsOiBvcHRpb25zLnVybCA/PyBjb25uZWN0aW9uT3B0aW9ucy51cmwgPz8gJ3dzczovL2dhdGV3YXkuZGlzY29yZC5nZycsXG4gICAgdmVyc2lvbjogb3B0aW9ucy52ZXJzaW9uID8/IDEwLFxuICAgIGNvbm5lY3Rpb246IGNvbm5lY3Rpb25PcHRpb25zLFxuICAgIHRvdGFsU2hhcmRzOiBvcHRpb25zLnRvdGFsU2hhcmRzID8/IGNvbm5lY3Rpb25PcHRpb25zLnNoYXJkcyA/PyAxLFxuICAgIGxhc3RTaGFyZElkOiBvcHRpb25zLmxhc3RTaGFyZElkID8/IChvcHRpb25zLnRvdGFsU2hhcmRzID8gb3B0aW9ucy50b3RhbFNoYXJkcyAtIDEgOiBjb25uZWN0aW9uT3B0aW9ucyA/IGNvbm5lY3Rpb25PcHRpb25zLnNoYXJkcyAtIDEgOiAwKSxcbiAgICBmaXJzdFNoYXJkSWQ6IG9wdGlvbnMuZmlyc3RTaGFyZElkID8/IDAsXG4gICAgdG90YWxXb3JrZXJzOiBvcHRpb25zLnRvdGFsV29ya2VycyA/PyA0LFxuICAgIHNoYXJkc1Blcldvcmtlcjogb3B0aW9ucy5zaGFyZHNQZXJXb3JrZXIgPz8gMjUsXG4gICAgc3Bhd25TaGFyZERlbGF5OiBvcHRpb25zLnNwYXduU2hhcmREZWxheSA/PyA1MzAwLFxuICAgIHNwcmVhZFNoYXJkc0luUm91bmRSb2Jpbjogb3B0aW9ucy5zcHJlYWRTaGFyZHNJblJvdW5kUm9iaW4gPz8gZmFsc2UsXG4gICAgc2hhcmRzOiBuZXcgTWFwKCksXG4gICAgYnVja2V0czogbmV3IE1hcCgpLFxuICAgIGNhY2hlOiB7XG4gICAgICByZXF1ZXN0TWVtYmVyczoge1xuICAgICAgICBlbmFibGVkOiBvcHRpb25zLmNhY2hlPy5yZXF1ZXN0TWVtYmVycz8uZW5hYmxlZCA/PyBmYWxzZSxcbiAgICAgICAgcGVuZGluZzogbmV3IENvbGxlY3Rpb24oKSxcbiAgICAgIH0sXG4gICAgfSxcbiAgICBsb2dnZXI6IG9wdGlvbnMubG9nZ2VyID8/IGxvZ2dlcixcbiAgICBtYWtlUHJlc2VuY2U6IG9wdGlvbnMubWFrZVByZXNlbmNlID8/ICgoKSA9PiBQcm9taXNlLnJlc29sdmUodW5kZWZpbmVkKSksXG4gICAgcmVzaGFyZGluZzoge1xuICAgICAgZW5hYmxlZDogb3B0aW9ucy5yZXNoYXJkaW5nPy5lbmFibGVkID8/IHRydWUsXG4gICAgICBzaGFyZHNGdWxsUGVyY2VudGFnZTogb3B0aW9ucy5yZXNoYXJkaW5nPy5zaGFyZHNGdWxsUGVyY2VudGFnZSA/PyA4MCxcbiAgICAgIGNoZWNrSW50ZXJ2YWw6IG9wdGlvbnMucmVzaGFyZGluZz8uY2hlY2tJbnRlcnZhbCA/PyAyODgwMDAwMCwgLy8gOCBob3Vyc1xuICAgICAgc2hhcmRzOiBuZXcgTWFwKCksXG4gICAgICBnZXRTZXNzaW9uSW5mbzogb3B0aW9ucy5yZXNoYXJkaW5nPy5nZXRTZXNzaW9uSW5mbyxcbiAgICAgIHVwZGF0ZUd1aWxkc1NoYXJkSWQ6IG9wdGlvbnMucmVzaGFyZGluZz8udXBkYXRlR3VpbGRzU2hhcmRJZCxcbiAgICAgIGFzeW5jIGNoZWNrSWZSZXNoYXJkaW5nSXNOZWVkZWQoKSB7XG4gICAgICAgIGdhdGV3YXkubG9nZ2VyLmRlYnVnKCdbUmVzaGFyZGluZ10gQ2hlY2tpbmcgaWYgcmVzaGFyZGluZyBpcyBuZWVkZWQuJyk7XG5cbiAgICAgICAgaWYgKCFnYXRld2F5LnJlc2hhcmRpbmcuZW5hYmxlZCkge1xuICAgICAgICAgIGdhdGV3YXkubG9nZ2VyLmRlYnVnKCdbUmVzaGFyZGluZ10gUmVzaGFyZGluZyBpcyBkaXNhYmxlZC4nKTtcblxuICAgICAgICAgIHJldHVybiB7IG5lZWRlZDogZmFsc2UgfTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghZ2F0ZXdheS5yZXNoYXJkaW5nLmdldFNlc3Npb25JbmZvKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiW1Jlc2hhcmRpbmddIFJlc2hhcmRpbmcgaXMgZW5hYmxlZCBidXQgbm8gJ3Jlc2hhcmRpbmcuZ2V0U2Vzc2lvbkluZm8oKScgaXMgbm90IHByb3ZpZGVkLlwiKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGdhdGV3YXkubG9nZ2VyLmRlYnVnKCdbUmVzaGFyZGluZ10gUmVzaGFyZGluZyBpcyBlbmFibGVkLicpO1xuXG4gICAgICAgIGNvbnN0IHNlc3Npb25JbmZvID0gYXdhaXQgZ2F0ZXdheS5yZXNoYXJkaW5nLmdldFNlc3Npb25JbmZvKCk7XG5cbiAgICAgICAgZ2F0ZXdheS5sb2dnZXIuZGVidWcoYFtSZXNoYXJkaW5nXSBTZXNzaW9uIGluZm8gcmV0cmlldmVkOiAke0pTT04uc3RyaW5naWZ5KHNlc3Npb25JbmZvKX1gKTtcblxuICAgICAgICAvLyBEb24ndCBoYXZlIGVub3VnaCBpZGVudGlmeSBsaW1pdHMgdG8gdHJ5IHJlc2hhcmRpbmdcbiAgICAgICAgaWYgKHNlc3Npb25JbmZvLnNlc3Npb25TdGFydExpbWl0LnJlbWFpbmluZyA8IHNlc3Npb25JbmZvLnNoYXJkcykge1xuICAgICAgICAgIGdhdGV3YXkubG9nZ2VyLmRlYnVnKCdbUmVzaGFyZGluZ10gTm90IGVub3VnaCBzZXNzaW9uIHN0YXJ0IGxpbWl0cyBsZWZ0IHRvIHJlc2hhcmQuJyk7XG5cbiAgICAgICAgICByZXR1cm4geyBuZWVkZWQ6IGZhbHNlLCBpbmZvOiBzZXNzaW9uSW5mbyB9O1xuICAgICAgICB9XG5cbiAgICAgICAgZ2F0ZXdheS5sb2dnZXIuZGVidWcoJ1tSZXNoYXJkaW5nXSBBYmxlIHRvIHJlc2hhcmQsIGNoZWNraW5nIHdoZXRoZXIgbmVjZXNzYXJ5IG5vdy4nKTtcblxuICAgICAgICAvLyAyNTAwIGlzIHRoZSBtYXggYW1vdW50IG9mIGd1aWxkcyBhIHNpbmdsZSBzaGFyZCBjYW4gaGFuZGxlXG4gICAgICAgIC8vIDEwMDAgaXMgdGhlIGFtb3VudCBvZiBndWlsZHMgZGlzY29yZCB1c2VzIHRvIGRldGVybWluZSBob3cgbWFueSBzaGFyZHMgdG8gcmVjb21tZW5kLlxuICAgICAgICAvLyBUaGlzIGFsZ28gaGVscHMgY2hlY2sgaWYgeW91ciBib3QgaGFzIGdyb3duIGVub3VnaCB0byByZXNoYXJkLlxuICAgICAgICAvLyBXaGlsZSB0aGlzIGlzIGltcHJlY2lzZSBhcyBkaXNjb3JkIGNoYW5nZXMgdGhlIHJlY29tbWVuZGVkIG51bWJlciBvZiBzaGFyZCBldmVyeSAxMDAwIGd1aWxkcyBpdCBpcyBnb29kIGVub3VnaFxuICAgICAgICAvLyBUaGUgYWx0ZXJuYXRpdmUgaXMgdG8gc3RvcmUgdGhlIGd1aWxkIGNvdW50IGZvciBlYWNoIHNoYXJkIGFuZCByZXF1aXJlIHRoZSBHdWlsZHMgaW50ZW50IGZvciBgR1VJTERfQ1JFQVRFYCBhbmQgYEdVSUxEX0RFTEVURWAgZXZlbnRzXG4gICAgICAgIGNvbnN0IHBlcmNlbnRhZ2UgPSAoc2Vzc2lvbkluZm8uc2hhcmRzIC8gKChnYXRld2F5LnRvdGFsU2hhcmRzICogMjUwMCkgLyAxMDAwKSkgKiAxMDA7XG5cbiAgICAgICAgLy8gTGVzcyB0aGFuIG5lY2Vzc2FyeSUgYmVpbmcgdXNlZCBzbyBkbyBub3RoaW5nXG4gICAgICAgIGlmIChwZXJjZW50YWdlIDwgZ2F0ZXdheS5yZXNoYXJkaW5nLnNoYXJkc0Z1bGxQZXJjZW50YWdlKSB7XG4gICAgICAgICAgZ2F0ZXdheS5sb2dnZXIuZGVidWcoJ1tSZXNoYXJkaW5nXSBSZXNoYXJkaW5nIG5vdCBuZWVkZWQuJyk7XG5cbiAgICAgICAgICByZXR1cm4geyBuZWVkZWQ6IGZhbHNlLCBpbmZvOiBzZXNzaW9uSW5mbyB9O1xuICAgICAgICB9XG5cbiAgICAgICAgZ2F0ZXdheS5sb2dnZXIuaW5mbygnW1Jlc2hhcmRpbmddIFJlc2hhcmRpbmcgaXMgbmVlZGVkLicpO1xuXG4gICAgICAgIHJldHVybiB7IG5lZWRlZDogdHJ1ZSwgaW5mbzogc2Vzc2lvbkluZm8gfTtcbiAgICAgIH0sXG4gICAgICBhc3luYyByZXNoYXJkKGluZm8pIHtcbiAgICAgICAgZ2F0ZXdheS5sb2dnZXIuaW5mbyhgW1Jlc2hhcmRpbmddIFN0YXJ0aW5nIHRoZSByZXNoYXJkIHByb2Nlc3MuIFByZXZpb3VzIHRvdGFsIHNoYXJkczogJHtnYXRld2F5LnRvdGFsU2hhcmRzfWApO1xuICAgICAgICAvLyBTZXQgdmFsdWVzIG9uIGdhdGV3YXlcbiAgICAgICAgZ2F0ZXdheS50b3RhbFNoYXJkcyA9IGluZm8uc2hhcmRzO1xuICAgICAgICAvLyBIYW5kbGVzIHByZXBhcmluZyBtaWQgc2l6ZWQgYm90cyBmb3IgTEJTXG4gICAgICAgIGdhdGV3YXkudG90YWxTaGFyZHMgPSBnYXRld2F5LmNhbGN1bGF0ZVRvdGFsU2hhcmRzKCk7XG4gICAgICAgIC8vIFNldCBmaXJzdCBzaGFyZCBpZCBpZiBwcm92aWRlZCBpbiBpbmZvXG4gICAgICAgIGlmICh0eXBlb2YgaW5mby5maXJzdFNoYXJkSWQgPT09ICdudW1iZXInKSBnYXRld2F5LmZpcnN0U2hhcmRJZCA9IGluZm8uZmlyc3RTaGFyZElkO1xuICAgICAgICAvLyBTZXQgbGFzdCBzaGFyZCBpZCBpZiBwcm92aWRlZCBpbiBpbmZvXG4gICAgICAgIGlmICh0eXBlb2YgaW5mby5sYXN0U2hhcmRJZCA9PT0gJ251bWJlcicpIGdhdGV3YXkubGFzdFNoYXJkSWQgPSBpbmZvLmxhc3RTaGFyZElkO1xuICAgICAgICAvLyBJZiB3ZSBkaWRuJ3QgZ2V0IGFueSBsYXN0U2hhcmRJZCwgd2UgYXNzdW1lIGFsbCB0aGUgc2hhcmRzIGFyZSB0byBiZSB1c2VkXG4gICAgICAgIGVsc2UgZ2F0ZXdheS5sYXN0U2hhcmRJZCA9IGdhdGV3YXkudG90YWxTaGFyZHMgLSAxO1xuICAgICAgICBnYXRld2F5LmxvZ2dlci5pbmZvKGBbUmVzaGFyZGluZ10gU3RhcnRpbmcgdGhlIHJlc2hhcmQgcHJvY2Vzcy4gTmV3IHRvdGFsIHNoYXJkczogJHtnYXRld2F5LnRvdGFsU2hhcmRzfWApO1xuXG4gICAgICAgIC8vIFJlc2V0dGluZyBidWNrZXRzXG4gICAgICAgIGdhdGV3YXkuYnVja2V0cy5jbGVhcigpO1xuICAgICAgICAvLyBSZWZpbGxpbmcgYnVja2V0cyB3aXRoIG5ldyB2YWx1ZXNcbiAgICAgICAgZ2F0ZXdheS5wcmVwYXJlQnVja2V0cygpO1xuXG4gICAgICAgIC8vIENhbGwgYWxsIHRoZSBidWNrZXRzIGFuZCB0ZWxsIHRoZWlyIHdvcmtlcnMgJiBzaGFyZHMgdG8gaWRlbnRpZnlcbiAgICAgICAgY29uc3QgcHJvbWlzZXMgPSBBcnJheS5mcm9tKGdhdGV3YXkuYnVja2V0cy5lbnRyaWVzKCkpLm1hcChhc3luYyAoW2J1Y2tldElkLCBidWNrZXRdKSA9PiB7XG4gICAgICAgICAgZm9yIChjb25zdCB3b3JrZXIgb2YgYnVja2V0LndvcmtlcnMpIHtcbiAgICAgICAgICAgIGZvciAoY29uc3Qgc2hhcmRJZCBvZiB3b3JrZXIucXVldWUpIHtcbiAgICAgICAgICAgICAgYXdhaXQgZ2F0ZXdheS5yZXNoYXJkaW5nLnRlbGxXb3JrZXJUb1ByZXBhcmUod29ya2VyLmlkLCBzaGFyZElkLCBidWNrZXRJZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICBhd2FpdCBQcm9taXNlLmFsbChwcm9taXNlcyk7XG5cbiAgICAgICAgZ2F0ZXdheS5sb2dnZXIuaW5mbyhgW1Jlc2hhcmRpbmddIEFsbCBzaGFyZHMgYXJlIG5vdyBvbmxpbmUuYCk7XG5cbiAgICAgICAgYXdhaXQgZ2F0ZXdheS5yZXNoYXJkaW5nLm9uUmVzaGFyZGluZ1N3aXRjaCgpO1xuICAgICAgfSxcbiAgICAgIGFzeW5jIHRlbGxXb3JrZXJUb1ByZXBhcmUod29ya2VySWQsIHNoYXJkSWQsIGJ1Y2tldElkKSB7XG4gICAgICAgIGdhdGV3YXkubG9nZ2VyLmRlYnVnKGBbUmVzaGFyZGluZ10gVGVsbGluZyB3b3JrZXIgdG8gcHJlcGFyZS4gV29ya2VyOiAke3dvcmtlcklkfSB8IFNoYXJkOiAke3NoYXJkSWR9IHwgQnVja2V0OiAke2J1Y2tldElkfS5gKTtcbiAgICAgICAgY29uc3Qgc2hhcmQgPSBuZXcgU2hhcmQoe1xuICAgICAgICAgIGlkOiBzaGFyZElkLFxuICAgICAgICAgIGNvbm5lY3Rpb246IHtcbiAgICAgICAgICAgIGNvbXByZXNzOiBnYXRld2F5LmNvbXByZXNzLFxuICAgICAgICAgICAgdHJhbnNwb3J0Q29tcHJlc3Npb246IGdhdGV3YXkudHJhbnNwb3J0Q29tcHJlc3Npb24gPz8gbnVsbCxcbiAgICAgICAgICAgIGludGVudHM6IGdhdGV3YXkuaW50ZW50cyxcbiAgICAgICAgICAgIHByb3BlcnRpZXM6IGdhdGV3YXkucHJvcGVydGllcyxcbiAgICAgICAgICAgIHRva2VuOiBnYXRld2F5LnRva2VuLFxuICAgICAgICAgICAgdG90YWxTaGFyZHM6IGdhdGV3YXkudG90YWxTaGFyZHMsXG4gICAgICAgICAgICB1cmw6IGdhdGV3YXkudXJsLFxuICAgICAgICAgICAgdmVyc2lvbjogZ2F0ZXdheS52ZXJzaW9uLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgZXZlbnRzOiB7XG4gICAgICAgICAgICBhc3luYyBtZXNzYWdlKF9zaGFyZCwgcGF5bG9hZCkge1xuICAgICAgICAgICAgICAvLyBJZ25vcmUgYWxsIGV2ZW50cyB1bnRpbCB3ZSBzd2ljaCBmcm9tIHRoZSBvbGQgc2hhcmRzIHRvIHRoZSBuZXcgb25lcy5cbiAgICAgICAgICAgICAgaWYgKHBheWxvYWQudCA9PT0gJ1JFQURZJykge1xuICAgICAgICAgICAgICAgIGF3YWl0IGdhdGV3YXkucmVzaGFyZGluZy51cGRhdGVHdWlsZHNTaGFyZElkPy4oXG4gICAgICAgICAgICAgICAgICAocGF5bG9hZC5kIGFzIERpc2NvcmRSZWFkeSkuZ3VpbGRzLm1hcCgoZykgPT4gZy5pZCksXG4gICAgICAgICAgICAgICAgICBzaGFyZElkLFxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSxcbiAgICAgICAgICBsb2dnZXI6IGdhdGV3YXkubG9nZ2VyLFxuICAgICAgICAgIHJlcXVlc3RJZGVudGlmeTogYXN5bmMgKCkgPT4gYXdhaXQgZ2F0ZXdheS5yZXF1ZXN0SWRlbnRpZnkoc2hhcmRJZCksXG4gICAgICAgICAgbWFrZVByZXNlbmNlOiBnYXRld2F5Lm1ha2VQcmVzZW5jZSxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgZ2F0ZXdheS5yZXNoYXJkaW5nLnNoYXJkcy5zZXQoc2hhcmRJZCwgc2hhcmQpO1xuXG4gICAgICAgIGF3YWl0IHNoYXJkLmlkZW50aWZ5KCk7XG5cbiAgICAgICAgZ2F0ZXdheS5sb2dnZXIuZGVidWcoYFtSZXNoYXJkaW5nXSBTaGFyZCAjJHtzaGFyZElkfSBpZGVudGlmaWVkLmApO1xuICAgICAgfSxcbiAgICAgIGFzeW5jIG9uUmVzaGFyZGluZ1N3aXRjaCgpIHtcbiAgICAgICAgZ2F0ZXdheS5sb2dnZXIuZGVidWcoYFtSZXNoYXJkaW5nXSBNYWtpbmcgdGhlIHN3aXRjaCBmcm9tIHRoZSBvbGQgc2hhcmRzIHRvIHRoZSBuZXcgb25lcy5gKTtcblxuICAgICAgICAvLyBNb3ZlIHRoZSBldmVudHMgZnJvbSB0aGUgb2xkIHNoYXJkcyB0byB0aGUgbmV3IG9uZXNcbiAgICAgICAgZm9yIChjb25zdCBzaGFyZCBvZiBnYXRld2F5LnJlc2hhcmRpbmcuc2hhcmRzLnZhbHVlcygpKSB7XG4gICAgICAgICAgc2hhcmQuZXZlbnRzID0gb3B0aW9ucy5ldmVudHMgPz8ge307XG4gICAgICAgIH1cblxuICAgICAgICAvLyBPbGQgc2hhcmRzIHN0b3AgcHJvY2Vzc2luZyBldmVudHNcbiAgICAgICAgZm9yIChjb25zdCBzaGFyZCBvZiBnYXRld2F5LnNoYXJkcy52YWx1ZXMoKSkge1xuICAgICAgICAgIGNvbnN0IG9sZEhhbmRsZXIgPSBzaGFyZC5ldmVudHMubWVzc2FnZTtcblxuICAgICAgICAgIC8vIENoYW5nZSB3aXRoIHNwcmVhZCBvcGVyYXRvciB0byBub3QgYWZmZWN0IG5ldyBzaGFyZHMsIGFzIGNoYW5naW5nIGFueXRoaW5nIG9uIHNoYXJkLmV2ZW50cyB3aWxsIGRpcmVjdGx5IGNoYW5nZSBvcHRpb25zLmV2ZW50cywgd2hpY2ggY2hhbmdlcyBuZXcgc2hhcmRzJyBldmVudHNcbiAgICAgICAgICBzaGFyZC5ldmVudHMgPSB7XG4gICAgICAgICAgICAuLi5zaGFyZC5ldmVudHMsXG4gICAgICAgICAgICBtZXNzYWdlOiBhc3luYyBmdW5jdGlvbiAoXywgbWVzc2FnZSkge1xuICAgICAgICAgICAgICAvLyBNZW1iZXIgY2hlY2tzIG5lZWQgdG8gY29udGludWUgYnV0IG90aGVycyBjYW4gc3RvcFxuICAgICAgICAgICAgICBpZiAobWVzc2FnZS50ID09PSAnR1VJTERfTUVNQkVSU19DSFVOSycpIHtcbiAgICAgICAgICAgICAgICBvbGRIYW5kbGVyPy4oc2hhcmQsIG1lc3NhZ2UpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH07XG4gICAgICAgIH1cblxuICAgICAgICBnYXRld2F5LmxvZ2dlci5pbmZvKGBbUmVzaGFyZGluZ10gU2h1dHRpbmcgZG93biBvbGQgc2hhcmRzLmApO1xuICAgICAgICBhd2FpdCBnYXRld2F5LnNodXRkb3duKFNoYXJkU29ja2V0Q2xvc2VDb2Rlcy5SZXNoYXJkZWQsICdSZXNoYXJkZWQhJywgZmFsc2UpO1xuXG4gICAgICAgIGdhdGV3YXkubG9nZ2VyLmluZm8oYFtSZXNoYXJkaW5nXSBDb21wbGV0ZWQuYCk7XG4gICAgICAgIGdhdGV3YXkuc2hhcmRzID0gbmV3IE1hcChnYXRld2F5LnJlc2hhcmRpbmcuc2hhcmRzKTtcbiAgICAgICAgZ2F0ZXdheS5yZXNoYXJkaW5nLnNoYXJkcy5jbGVhcigpO1xuICAgICAgfSxcbiAgICB9LFxuXG4gICAgY2FsY3VsYXRlVG90YWxTaGFyZHMoKSB7XG4gICAgICAvLyBCb3RzIHVuZGVyIDEwMGsgc2VydmVycyBkbyBub3QgaGF2ZSBhY2Nlc3MgdG8gTEJTLlxuICAgICAgaWYgKGdhdGV3YXkudG90YWxTaGFyZHMgPCAxMDApIHtcbiAgICAgICAgZ2F0ZXdheS5sb2dnZXIuZGVidWcoYFtHYXRld2F5XSBDYWxjdWxhdGluZyB0b3RhbCBzaGFyZHM6ICR7Z2F0ZXdheS50b3RhbFNoYXJkc31gKTtcbiAgICAgICAgcmV0dXJuIGdhdGV3YXkudG90YWxTaGFyZHM7XG4gICAgICB9XG5cbiAgICAgIGdhdGV3YXkubG9nZ2VyLmRlYnVnKGBbR2F0ZXdheV0gQ2FsY3VsYXRpbmcgdG90YWwgc2hhcmRzYCwgZ2F0ZXdheS50b3RhbFNoYXJkcywgZ2F0ZXdheS5jb25uZWN0aW9uLnNlc3Npb25TdGFydExpbWl0Lm1heENvbmN1cnJlbmN5KTtcbiAgICAgIC8vIENhbGN1bGF0ZSBhIG11bHRpcGxlIG9mIGBtYXhDb25jdXJyZW5jeWAgd2hpY2ggY2FuIGJlIHVzZWQgdG8gY29ubmVjdCB0byB0aGUgZ2F0ZXdheS5cbiAgICAgIHJldHVybiAoXG4gICAgICAgIE1hdGguY2VpbChcbiAgICAgICAgICBnYXRld2F5LnRvdGFsU2hhcmRzIC9cbiAgICAgICAgICAgIC8vIElmIGBtYXhDb25jdXJyZW5jeWAgaXMgMSwgd2UgY2FuIHNhZmVseSB1c2UgMTYgdG8gZ2V0IGB0b3RhbFNoYXJkc2AgdG8gYmUgaW4gYSBtdWx0aXBsZSBvZiAxNiBzbyB0aGF0IHdlIGNhbiBwcmVwYXJlIGJvdHMgd2l0aCAxMDBrIHNlcnZlcnMgZm9yIExCUy5cbiAgICAgICAgICAgIChnYXRld2F5LmNvbm5lY3Rpb24uc2Vzc2lvblN0YXJ0TGltaXQubWF4Q29uY3VycmVuY3kgPT09IDEgPyAxNiA6IGdhdGV3YXkuY29ubmVjdGlvbi5zZXNzaW9uU3RhcnRMaW1pdC5tYXhDb25jdXJyZW5jeSksXG4gICAgICAgICkgKiAoZ2F0ZXdheS5jb25uZWN0aW9uLnNlc3Npb25TdGFydExpbWl0Lm1heENvbmN1cnJlbmN5ID09PSAxID8gMTYgOiBnYXRld2F5LmNvbm5lY3Rpb24uc2Vzc2lvblN0YXJ0TGltaXQubWF4Q29uY3VycmVuY3kpXG4gICAgICApO1xuICAgIH0sXG4gICAgY2FsY3VsYXRlV29ya2VySWQoc2hhcmRJZCkge1xuICAgICAgY29uc3Qgd29ya2VySWQgPSBvcHRpb25zLnNwcmVhZFNoYXJkc0luUm91bmRSb2JpblxuICAgICAgICA/IHNoYXJkSWQgJSBnYXRld2F5LnRvdGFsV29ya2Vyc1xuICAgICAgICA6IE1hdGgubWluKE1hdGguZmxvb3Ioc2hhcmRJZCAvIGdhdGV3YXkuc2hhcmRzUGVyV29ya2VyKSwgZ2F0ZXdheS50b3RhbFdvcmtlcnMgLSAxKTtcbiAgICAgIGdhdGV3YXkubG9nZ2VyLmRlYnVnKFxuICAgICAgICBgW0dhdGV3YXldIENhbGN1bGF0aW5nIHdvcmtlcklkOiBTaGFyZDogJHtzaGFyZElkfSAtPiBXb3JrZXI6ICR7d29ya2VySWR9IC0+IFBlciBXb3JrZXI6ICR7Z2F0ZXdheS5zaGFyZHNQZXJXb3JrZXJ9IC0+IFRvdGFsOiAke2dhdGV3YXkudG90YWxXb3JrZXJzfWAsXG4gICAgICApO1xuICAgICAgcmV0dXJuIHdvcmtlcklkO1xuICAgIH0sXG4gICAgcHJlcGFyZUJ1Y2tldHMoKSB7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGdhdGV3YXkuY29ubmVjdGlvbi5zZXNzaW9uU3RhcnRMaW1pdC5tYXhDb25jdXJyZW5jeTsgKytpKSB7XG4gICAgICAgIGdhdGV3YXkubG9nZ2VyLmRlYnVnKGBbR2F0ZXdheV0gUHJlcGFyaW5nIGJ1Y2tldHMgZm9yIGNvbmN1cnJlbmN5OiAke2l9YCk7XG4gICAgICAgIGdhdGV3YXkuYnVja2V0cy5zZXQoaSwge1xuICAgICAgICAgIHdvcmtlcnM6IFtdLFxuICAgICAgICAgIGxlYWt5QnVja2V0OiBuZXcgTGVha3lCdWNrZXQoe1xuICAgICAgICAgICAgbWF4OiAxLFxuICAgICAgICAgICAgcmVmaWxsQW1vdW50OiAxLFxuICAgICAgICAgICAgcmVmaWxsSW50ZXJ2YWw6IGdhdGV3YXkuc3Bhd25TaGFyZERlbGF5LFxuICAgICAgICAgICAgbG9nZ2VyOiB0aGlzLmxvZ2dlcixcbiAgICAgICAgICB9KSxcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIC8vIE9yZ2FuaXplIGFsbCBzaGFyZHMgaW50byB0aGVpciBvd24gYnVja2V0c1xuICAgICAgZm9yIChsZXQgc2hhcmRJZCA9IGdhdGV3YXkuZmlyc3RTaGFyZElkOyBzaGFyZElkIDw9IGdhdGV3YXkubGFzdFNoYXJkSWQ7ICsrc2hhcmRJZCkge1xuICAgICAgICBnYXRld2F5LmxvZ2dlci5kZWJ1ZyhgW0dhdGV3YXldIFByZXBhcmluZyBidWNrZXRzIGZvciBzaGFyZDogJHtzaGFyZElkfWApO1xuXG4gICAgICAgIGlmIChzaGFyZElkID49IGdhdGV3YXkudG90YWxTaGFyZHMpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFNoYXJkIChpZDogJHtzaGFyZElkfSkgaXMgYmlnZ2VyIG9yIGVxdWFsIHRvIHRoZSB1c2VkIGFtb3VudCBvZiB1c2VkIHNoYXJkcyB3aGljaCBpcyAke2dhdGV3YXkudG90YWxTaGFyZHN9YCk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBidWNrZXRJZCA9IHNoYXJkSWQgJSBnYXRld2F5LmNvbm5lY3Rpb24uc2Vzc2lvblN0YXJ0TGltaXQubWF4Q29uY3VycmVuY3k7XG4gICAgICAgIGNvbnN0IGJ1Y2tldCA9IGdhdGV3YXkuYnVja2V0cy5nZXQoYnVja2V0SWQpO1xuXG4gICAgICAgIGlmICghYnVja2V0KSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgYFNoYXJkIChpZDogJHtzaGFyZElkfSkgZ290IGFzc2lnbmVkIHRvIGFuIGlsbGVnYWwgYnVja2V0IGlkOiAke2J1Y2tldElkfSwgZXhwZWN0ZWQgYSBidWNrZXQgaWQgYmV0d2VlbiAwIGFuZCAke1xuICAgICAgICAgICAgICBnYXRld2F5LmNvbm5lY3Rpb24uc2Vzc2lvblN0YXJ0TGltaXQubWF4Q29uY3VycmVuY3kgLSAxXG4gICAgICAgICAgICB9YCxcbiAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gR2V0IHRoZSB3b3JrZXIgaWQgZm9yIHRoaXMgc2hhcmRcbiAgICAgICAgY29uc3Qgd29ya2VySWQgPSBnYXRld2F5LmNhbGN1bGF0ZVdvcmtlcklkKHNoYXJkSWQpO1xuICAgICAgICBjb25zdCB3b3JrZXIgPSBidWNrZXQud29ya2Vycy5maW5kKCh3KSA9PiB3LmlkID09PSB3b3JrZXJJZCk7XG5cbiAgICAgICAgLy8gSWYgdGhpcyB3b3JrZXIgYWxyZWFkeSBleGlzdHMsIGFkZCB0aGUgc2hhcmQgdG8gaXRzIHF1ZXVlXG4gICAgICAgIGlmICh3b3JrZXIpIHtcbiAgICAgICAgICB3b3JrZXIucXVldWUucHVzaChzaGFyZElkKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBidWNrZXQud29ya2Vycy5wdXNoKHsgaWQ6IHdvcmtlcklkLCBxdWV1ZTogW3NoYXJkSWRdIH0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcbiAgICBhc3luYyBzcGF3blNoYXJkcygpIHtcbiAgICAgIC8vIFByZXBhcmUgdGhlIGNvbmN1cnJlbmN5IGJ1Y2tldHNcbiAgICAgIGdhdGV3YXkucHJlcGFyZUJ1Y2tldHMoKTtcblxuICAgICAgY29uc3QgcHJvbWlzZXMgPSBbLi4uZ2F0ZXdheS5idWNrZXRzLmVudHJpZXMoKV0ubWFwKGFzeW5jIChbYnVja2V0SWQsIGJ1Y2tldF0pID0+IHtcbiAgICAgICAgZm9yIChjb25zdCB3b3JrZXIgb2YgYnVja2V0LndvcmtlcnMpIHtcbiAgICAgICAgICBmb3IgKGNvbnN0IHNoYXJkSWQgb2Ygd29ya2VyLnF1ZXVlKSB7XG4gICAgICAgICAgICBhd2FpdCBnYXRld2F5LnRlbGxXb3JrZXJUb0lkZW50aWZ5KHdvcmtlci5pZCwgc2hhcmRJZCwgYnVja2V0SWQpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIC8vIFdlIHVzZSBQcm9taXNlLmFsbCBzbyB3ZSBjYW4gc3RhcnQgYWxsIGJ1Y2tldHMgYXQgdGhlIHNhbWUgdGltZVxuICAgICAgYXdhaXQgUHJvbWlzZS5hbGwocHJvbWlzZXMpO1xuXG4gICAgICAvLyBDaGVjayBhbmQgcmVzaGFyZCBhdXRvbWF0aWNhbGx5IGlmIGF1dG8gcmVzaGFyZGluZyBpcyBlbmFibGVkLlxuICAgICAgaWYgKGdhdGV3YXkucmVzaGFyZGluZy5lbmFibGVkICYmIGdhdGV3YXkucmVzaGFyZGluZy5jaGVja0ludGVydmFsICE9PSAtMSkge1xuICAgICAgICAvLyBJdCBpcyBiZXR0ZXIgdG8gZW5zdXJlIHRoZXJlIGlzIGFsd2F5cyBvbmx5IG9uZVxuICAgICAgICBjbGVhckludGVydmFsKGdhdGV3YXkucmVzaGFyZGluZy5jaGVja0ludGVydmFsSWQpO1xuXG4gICAgICAgIGlmICghZ2F0ZXdheS5yZXNoYXJkaW5nLmdldFNlc3Npb25JbmZvKSB7XG4gICAgICAgICAgZ2F0ZXdheS5yZXNoYXJkaW5nLmVuYWJsZWQgPSBmYWxzZTtcbiAgICAgICAgICBnYXRld2F5LmxvZ2dlci53YXJuKFwiW1Jlc2hhcmRpbmddIFJlc2hhcmRpbmcgaXMgZW5hYmxlZCBidXQgJ3Jlc2hhcmRpbmcuZ2V0U2Vzc2lvbkluZm8oKScgd2FzIG5vdCBwcm92aWRlZC4gRGlzYWJsaW5nIHJlc2hhcmRpbmcuXCIpO1xuXG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgZ2F0ZXdheS5yZXNoYXJkaW5nLmNoZWNrSW50ZXJ2YWxJZCA9IHNldEludGVydmFsKGFzeW5jICgpID0+IHtcbiAgICAgICAgICBjb25zdCByZXNoYXJkaW5nSW5mbyA9IGF3YWl0IGdhdGV3YXkucmVzaGFyZGluZy5jaGVja0lmUmVzaGFyZGluZ0lzTmVlZGVkKCk7XG5cbiAgICAgICAgICBpZiAocmVzaGFyZGluZ0luZm8ubmVlZGVkICYmIHJlc2hhcmRpbmdJbmZvLmluZm8pIGF3YWl0IGdhdGV3YXkucmVzaGFyZGluZy5yZXNoYXJkKHJlc2hhcmRpbmdJbmZvLmluZm8pO1xuICAgICAgICB9LCBnYXRld2F5LnJlc2hhcmRpbmcuY2hlY2tJbnRlcnZhbCk7XG4gICAgICB9XG4gICAgfSxcbiAgICBhc3luYyBzaHV0ZG93bihjb2RlLCByZWFzb24sIGNsZWFyUmVzaGFyZGluZ0ludGVydmFsID0gdHJ1ZSkge1xuICAgICAgaWYgKGNsZWFyUmVzaGFyZGluZ0ludGVydmFsKSBjbGVhckludGVydmFsKGdhdGV3YXkucmVzaGFyZGluZy5jaGVja0ludGVydmFsSWQpO1xuXG4gICAgICBhd2FpdCBQcm9taXNlLmFsbChBcnJheS5mcm9tKGdhdGV3YXkuc2hhcmRzLnZhbHVlcygpKS5tYXAoKHNoYXJkKSA9PiBzaGFyZC5jbG9zZShjb2RlLCByZWFzb24pKSk7XG4gICAgfSxcbiAgICBhc3luYyBzZW5kUGF5bG9hZChzaGFyZElkLCBwYXlsb2FkKSB7XG4gICAgICBjb25zdCBzaGFyZCA9IGdhdGV3YXkuc2hhcmRzLmdldChzaGFyZElkKTtcblxuICAgICAgaWYgKCFzaGFyZCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFNoYXJkIChpZDogJHtzaGFyZElkfSBub3QgZm91bmRgKTtcbiAgICAgIH1cblxuICAgICAgYXdhaXQgc2hhcmQuc2VuZChwYXlsb2FkKTtcbiAgICB9LFxuICAgIGFzeW5jIHRlbGxXb3JrZXJUb0lkZW50aWZ5KHdvcmtlcklkLCBzaGFyZElkLCBidWNrZXRJZCkge1xuICAgICAgZ2F0ZXdheS5sb2dnZXIuZGVidWcoYFtHYXRld2F5XSBUZWxsIHdvcmtlciAjJHt3b3JrZXJJZH0gdG8gaWRlbnRpZnkgc2hhcmQgIyR7c2hhcmRJZH0gZnJvbSBidWNrZXQgJHtidWNrZXRJZH1gKTtcbiAgICAgIGF3YWl0IGdhdGV3YXkuaWRlbnRpZnkoc2hhcmRJZCk7XG4gICAgfSxcbiAgICBhc3luYyBpZGVudGlmeShzaGFyZElkOiBudW1iZXIpIHtcbiAgICAgIGxldCBzaGFyZCA9IHRoaXMuc2hhcmRzLmdldChzaGFyZElkKTtcbiAgICAgIGdhdGV3YXkubG9nZ2VyLmRlYnVnKGBbR2F0ZXdheV0gSWRlbnRpZnlpbmcgJHtzaGFyZCA/ICdleGlzdGluZycgOiAnbmV3J30gc2hhcmQgKCR7c2hhcmRJZH0pYCk7XG5cbiAgICAgIGlmICghc2hhcmQpIHtcbiAgICAgICAgc2hhcmQgPSBuZXcgU2hhcmQoe1xuICAgICAgICAgIGlkOiBzaGFyZElkLFxuICAgICAgICAgIGNvbm5lY3Rpb246IHtcbiAgICAgICAgICAgIGNvbXByZXNzOiB0aGlzLmNvbXByZXNzLFxuICAgICAgICAgICAgdHJhbnNwb3J0Q29tcHJlc3Npb246IGdhdGV3YXkudHJhbnNwb3J0Q29tcHJlc3Npb24sXG4gICAgICAgICAgICBpbnRlbnRzOiB0aGlzLmludGVudHMsXG4gICAgICAgICAgICBwcm9wZXJ0aWVzOiB0aGlzLnByb3BlcnRpZXMsXG4gICAgICAgICAgICB0b2tlbjogdGhpcy50b2tlbixcbiAgICAgICAgICAgIHRvdGFsU2hhcmRzOiB0aGlzLnRvdGFsU2hhcmRzLFxuICAgICAgICAgICAgdXJsOiB0aGlzLnVybCxcbiAgICAgICAgICAgIHZlcnNpb246IHRoaXMudmVyc2lvbixcbiAgICAgICAgICB9LFxuICAgICAgICAgIGV2ZW50czogb3B0aW9ucy5ldmVudHMgPz8ge30sXG4gICAgICAgICAgbG9nZ2VyOiB0aGlzLmxvZ2dlcixcbiAgICAgICAgICByZXF1ZXN0SWRlbnRpZnk6IGFzeW5jICgpID0+IGF3YWl0IGdhdGV3YXkucmVxdWVzdElkZW50aWZ5KHNoYXJkSWQpLFxuICAgICAgICAgIG1ha2VQcmVzZW5jZTogZ2F0ZXdheS5tYWtlUHJlc2VuY2UsXG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMuc2hhcmRzLnNldChzaGFyZElkLCBzaGFyZCk7XG4gICAgICB9XG5cbiAgICAgIGF3YWl0IHNoYXJkLmlkZW50aWZ5KCk7XG4gICAgfSxcblxuICAgIGFzeW5jIHJlcXVlc3RJZGVudGlmeShzaGFyZElkKSB7XG4gICAgICBnYXRld2F5LmxvZ2dlci5kZWJ1ZyhgW0dhdGV3YXldIFNoYXJkICMke3NoYXJkSWR9IHJlcXVlc3RlZCBhbiBpZGVudGlmeS5gKTtcblxuICAgICAgY29uc3QgYnVja2V0ID0gZ2F0ZXdheS5idWNrZXRzLmdldChzaGFyZElkICUgZ2F0ZXdheS5jb25uZWN0aW9uLnNlc3Npb25TdGFydExpbWl0Lm1heENvbmN1cnJlbmN5KTtcblxuICAgICAgaWYgKCFidWNrZXQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQ2FuJ3QgcmVxdWVzdCBpZGVudGlmeSBmb3IgYSBzaGFyZCB0aGF0IGlzIG5vdCBhc3NpZ25lZCB0byBhbnkgYnVja2V0LlwiKTtcbiAgICAgIH1cblxuICAgICAgYXdhaXQgYnVja2V0LmxlYWt5QnVja2V0LmFjcXVpcmUoKTtcblxuICAgICAgZ2F0ZXdheS5sb2dnZXIuZGVidWcoYFtHYXRld2F5XSBBcHByb3ZlZCBpZGVudGlmeSByZXF1ZXN0IGZvciBTaGFyZCAjJHtzaGFyZElkfS5gKTtcbiAgICB9LFxuXG4gICAgYXN5bmMga2lsbChzaGFyZElkOiBudW1iZXIpIHtcbiAgICAgIGNvbnN0IHNoYXJkID0gdGhpcy5zaGFyZHMuZ2V0KHNoYXJkSWQpO1xuICAgICAgaWYgKCFzaGFyZCkge1xuICAgICAgICBnYXRld2F5LmxvZ2dlci5kZWJ1ZyhgW0dhdGV3YXldIFNoYXJkICMke3NoYXJkSWR9IHdhcyByZXF1ZXN0ZWQgdG8gYmUga2lsbGVkLCBidXQgdGhlIHNoYXJkIGNvdWxkIG5vdCBiZSBmb3VuZC5gKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBnYXRld2F5LmxvZ2dlci5kZWJ1ZyhgW0dhdGV3YXldIEtpbGxpbmcgU2hhcmQgIyR7c2hhcmRJZH1gKTtcbiAgICAgIHRoaXMuc2hhcmRzLmRlbGV0ZShzaGFyZElkKTtcbiAgICAgIGF3YWl0IHNoYXJkLnNodXRkb3duKCk7XG4gICAgfSxcblxuICAgIC8vIEhlbHBlcnMgbWV0aG9kcyBiZWxvdyB0aGlzXG5cbiAgICBjYWxjdWxhdGVTaGFyZElkKGd1aWxkSWQsIHRvdGFsU2hhcmRzKSB7XG4gICAgICAvLyBJZiBub25lIGlzIHByb3ZpZGVkLCB1c2UgdGhlIHRvdGFsIHNoYXJkcyBudW1iZXIgZnJvbSBnYXRld2F5IG9iamVjdC5cbiAgICAgIGlmICghdG90YWxTaGFyZHMpIHRvdGFsU2hhcmRzID0gZ2F0ZXdheS50b3RhbFNoYXJkcztcbiAgICAgIC8vIElmIGl0IGlzIG9ubHkgMSBzaGFyZCwgaXQgd2lsbCBhbHdheXMgYmUgc2hhcmQgaWQgMFxuICAgICAgaWYgKHRvdGFsU2hhcmRzID09PSAxKSB7XG4gICAgICAgIGdhdGV3YXkubG9nZ2VyLmRlYnVnKGBbR2F0ZXdheV0gY2FsY3VsYXRlU2hhcmRJZCAoMSBzaGFyZClgKTtcbiAgICAgICAgcmV0dXJuIDA7XG4gICAgICB9XG5cbiAgICAgIGdhdGV3YXkubG9nZ2VyLmRlYnVnKGBbR2F0ZXdheV0gY2FsY3VsYXRlU2hhcmRJZCAoZ3VpbGRJZDogJHtndWlsZElkfSwgdG90YWxTaGFyZHM6ICR7dG90YWxTaGFyZHN9KWApO1xuICAgICAgcmV0dXJuIE51bWJlcigoQmlnSW50KGd1aWxkSWQpID4+IDIybikgJSBCaWdJbnQodG90YWxTaGFyZHMpKTtcbiAgICB9LFxuXG4gICAgYXN5bmMgam9pblZvaWNlQ2hhbm5lbChndWlsZElkLCBjaGFubmVsSWQsIG9wdGlvbnMpIHtcbiAgICAgIGNvbnN0IHNoYXJkSWQgPSBnYXRld2F5LmNhbGN1bGF0ZVNoYXJkSWQoZ3VpbGRJZCk7XG5cbiAgICAgIGdhdGV3YXkubG9nZ2VyLmRlYnVnKGBbR2F0ZXdheV0gam9pblZvaWNlQ2hhbm5lbCBndWlsZElkOiAke2d1aWxkSWR9IGNoYW5uZWxJZDogJHtjaGFubmVsSWR9YCk7XG5cbiAgICAgIGF3YWl0IGdhdGV3YXkuc2VuZFBheWxvYWQoc2hhcmRJZCwge1xuICAgICAgICBvcDogR2F0ZXdheU9wY29kZXMuVm9pY2VTdGF0ZVVwZGF0ZSxcbiAgICAgICAgZDoge1xuICAgICAgICAgIGd1aWxkX2lkOiBndWlsZElkLnRvU3RyaW5nKCksXG4gICAgICAgICAgY2hhbm5lbF9pZDogY2hhbm5lbElkLnRvU3RyaW5nKCksXG4gICAgICAgICAgc2VsZl9tdXRlOiBvcHRpb25zPy5zZWxmTXV0ZSA/PyBmYWxzZSxcbiAgICAgICAgICBzZWxmX2RlYWY6IG9wdGlvbnM/LnNlbGZEZWFmID8/IHRydWUsXG4gICAgICAgIH0sXG4gICAgICB9KTtcbiAgICB9LFxuXG4gICAgYXN5bmMgZWRpdEJvdFN0YXR1cyhkYXRhKSB7XG4gICAgICBnYXRld2F5LmxvZ2dlci5kZWJ1ZyhgW0dhdGV3YXldIGVkaXRCb3RTdGF0dXMgZGF0YTogJHtKU09OLnN0cmluZ2lmeShkYXRhLCBqc29uU2FmZVJlcGxhY2VyKX1gKTtcblxuICAgICAgYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgICAgIFsuLi5nYXRld2F5LnNoYXJkcy52YWx1ZXMoKV0ubWFwKGFzeW5jIChzaGFyZCkgPT4ge1xuICAgICAgICAgIGdhdGV3YXkuZWRpdFNoYXJkU3RhdHVzKHNoYXJkLmlkLCBkYXRhKTtcbiAgICAgICAgfSksXG4gICAgICApO1xuICAgIH0sXG5cbiAgICBhc3luYyBlZGl0U2hhcmRTdGF0dXMoc2hhcmRJZCwgZGF0YSkge1xuICAgICAgZ2F0ZXdheS5sb2dnZXIuZGVidWcoYFtHYXRld2F5XSBlZGl0U2hhcmRTdGF0dXMgc2hhcmRJZDogJHtzaGFyZElkfSAtPiBkYXRhOiAke0pTT04uc3RyaW5naWZ5KGRhdGEpfWApO1xuXG4gICAgICBhd2FpdCBnYXRld2F5LnNlbmRQYXlsb2FkKHNoYXJkSWQsIHtcbiAgICAgICAgb3A6IEdhdGV3YXlPcGNvZGVzLlByZXNlbmNlVXBkYXRlLFxuICAgICAgICBkOiB7XG4gICAgICAgICAgc2luY2U6IG51bGwsXG4gICAgICAgICAgYWZrOiBmYWxzZSxcbiAgICAgICAgICBhY3Rpdml0aWVzOiBkYXRhLmFjdGl2aXRpZXMsXG4gICAgICAgICAgc3RhdHVzOiBkYXRhLnN0YXR1cyxcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuICAgIH0sXG5cbiAgICBhc3luYyByZXF1ZXN0TWVtYmVycyhndWlsZElkLCBvcHRpb25zKSB7XG4gICAgICBjb25zdCBzaGFyZElkID0gZ2F0ZXdheS5jYWxjdWxhdGVTaGFyZElkKGd1aWxkSWQpO1xuXG4gICAgICBpZiAoZ2F0ZXdheS5pbnRlbnRzICYmICghb3B0aW9ucz8ubGltaXQgfHwgb3B0aW9ucy5saW1pdCA+IDEpICYmICEoZ2F0ZXdheS5pbnRlbnRzICYgR2F0ZXdheUludGVudHMuR3VpbGRNZW1iZXJzKSlcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgZmV0Y2ggbW9yZSB0aGVuIDEgbWVtYmVyIHdpdGhvdXQgdGhlIEdVSUxEX01FTUJFUlMgaW50ZW50Jyk7XG5cbiAgICAgIGdhdGV3YXkubG9nZ2VyLmRlYnVnKGBbR2F0ZXdheV0gcmVxdWVzdE1lbWJlcnMgZ3VpbGRJZDogJHtndWlsZElkfSAtPiBkYXRhOiAke0pTT04uc3RyaW5naWZ5KG9wdGlvbnMpfWApO1xuXG4gICAgICBpZiAob3B0aW9ucz8udXNlcklkcz8ubGVuZ3RoKSB7XG4gICAgICAgIGdhdGV3YXkubG9nZ2VyLmRlYnVnKGBbR2F0ZXdheV0gcmVxdWVzdE1lbWJlcnMgZ3VpbGRJZDogJHtndWlsZElkfSAtPiBzZXR0aW5nIHVzZXIgbGltaXQgYmFzZWQgb24gdXNlcklkcyBsZW5ndGg6ICR7b3B0aW9ucy51c2VySWRzLmxlbmd0aH1gKTtcblxuICAgICAgICBvcHRpb25zLmxpbWl0ID0gb3B0aW9ucy51c2VySWRzLmxlbmd0aDtcbiAgICAgIH1cblxuICAgICAgaWYgKCFvcHRpb25zPy5ub25jZSkge1xuICAgICAgICBsZXQgbm9uY2UgPSAnJztcblxuICAgICAgICB3aGlsZSAoIW5vbmNlIHx8IGdhdGV3YXkuY2FjaGUucmVxdWVzdE1lbWJlcnMucGVuZGluZy5oYXMobm9uY2UpKSB7XG4gICAgICAgICAgbm9uY2UgPSByYW5kb21CeXRlcygxNikudG9TdHJpbmcoJ2hleCcpO1xuICAgICAgICB9XG5cbiAgICAgICAgb3B0aW9ucyA/Pz0geyBsaW1pdDogMCB9O1xuICAgICAgICBvcHRpb25zLm5vbmNlID0gbm9uY2U7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IG1lbWJlcnMgPSAhZ2F0ZXdheS5jYWNoZS5yZXF1ZXN0TWVtYmVycy5lbmFibGVkXG4gICAgICAgID8gW11cbiAgICAgICAgOiBuZXcgUHJvbWlzZTxDYW1lbGl6ZTxEaXNjb3JkTWVtYmVyV2l0aFVzZXJbXT4+KChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICAgIC8vIFNob3VsZCBuZXZlciBoYXBwZW4uXG4gICAgICAgICAgICBpZiAoIWdhdGV3YXkuY2FjaGUucmVxdWVzdE1lbWJlcnMuZW5hYmxlZCB8fCAhb3B0aW9ucz8ubm9uY2UpIHtcbiAgICAgICAgICAgICAgcmVqZWN0KG5ldyBFcnJvcihcIkNhbid0IHJlcXVlc3QgdGhlIG1lbWJlcnMgd2l0aG91dCB0aGUgbm9uY2Ugb3Igd2l0aCB0aGUgZmVhdHVyZSBkaXNhYmxlZC5cIikpO1xuICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGdhdGV3YXkuY2FjaGUucmVxdWVzdE1lbWJlcnMucGVuZGluZy5zZXQob3B0aW9ucy5ub25jZSwge1xuICAgICAgICAgICAgICBub25jZTogb3B0aW9ucy5ub25jZSxcbiAgICAgICAgICAgICAgcmVzb2x2ZSxcbiAgICAgICAgICAgICAgbWVtYmVyczogW10sXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9KTtcblxuICAgICAgYXdhaXQgZ2F0ZXdheS5zZW5kUGF5bG9hZChzaGFyZElkLCB7XG4gICAgICAgIG9wOiBHYXRld2F5T3Bjb2Rlcy5SZXF1ZXN0R3VpbGRNZW1iZXJzLFxuICAgICAgICBkOiB7XG4gICAgICAgICAgZ3VpbGRfaWQ6IGd1aWxkSWQudG9TdHJpbmcoKSxcbiAgICAgICAgICAvLyBJZiBhIHF1ZXJ5IGlzIHByb3ZpZGVkIHVzZSBpdCwgT1IgaWYgYSBsaW1pdCBpcyBOT1QgcHJvdmlkZWQgdXNlIFwiXCJcbiAgICAgICAgICBxdWVyeTogb3B0aW9ucz8ucXVlcnkgPz8gKG9wdGlvbnM/LmxpbWl0ID8gdW5kZWZpbmVkIDogJycpLFxuICAgICAgICAgIGxpbWl0OiBvcHRpb25zPy5saW1pdCA/PyAwLFxuICAgICAgICAgIHByZXNlbmNlczogb3B0aW9ucz8ucHJlc2VuY2VzID8/IGZhbHNlLFxuICAgICAgICAgIHVzZXJfaWRzOiBvcHRpb25zPy51c2VySWRzPy5tYXAoKGlkKSA9PiBpZC50b1N0cmluZygpKSxcbiAgICAgICAgICBub25jZTogb3B0aW9ucz8ubm9uY2UsXG4gICAgICAgIH0sXG4gICAgICB9KTtcblxuICAgICAgcmV0dXJuIGF3YWl0IG1lbWJlcnM7XG4gICAgfSxcblxuICAgIGFzeW5jIGxlYXZlVm9pY2VDaGFubmVsKGd1aWxkSWQpIHtcbiAgICAgIGNvbnN0IHNoYXJkSWQgPSBnYXRld2F5LmNhbGN1bGF0ZVNoYXJkSWQoZ3VpbGRJZCk7XG5cbiAgICAgIGdhdGV3YXkubG9nZ2VyLmRlYnVnKGBbR2F0ZXdheV0gbGVhdmVWb2ljZUNoYW5uZWwgZ3VpbGRJZDogJHtndWlsZElkfSBTaGFyZCAke3NoYXJkSWR9YCk7XG5cbiAgICAgIGF3YWl0IGdhdGV3YXkuc2VuZFBheWxvYWQoc2hhcmRJZCwge1xuICAgICAgICBvcDogR2F0ZXdheU9wY29kZXMuVm9pY2VTdGF0ZVVwZGF0ZSxcbiAgICAgICAgZDoge1xuICAgICAgICAgIGd1aWxkX2lkOiBndWlsZElkLnRvU3RyaW5nKCksXG4gICAgICAgICAgY2hhbm5lbF9pZDogbnVsbCxcbiAgICAgICAgICBzZWxmX211dGU6IGZhbHNlLFxuICAgICAgICAgIHNlbGZfZGVhZjogZmFsc2UsXG4gICAgICAgIH0sXG4gICAgICB9KTtcbiAgICB9LFxuXG4gICAgYXN5bmMgcmVxdWVzdFNvdW5kYm9hcmRTb3VuZHMoZ3VpbGRJZHMpIHtcbiAgICAgIC8qKlxuICAgICAgICogRGlzY29yZCB3aWxsIHNlbmQgdGhlIGV2ZW50cyBmb3IgdGhlIGd1aWxkcyB0aGF0IGFyZSBcInVuZGVyIHRoZSBzaGFyZFwiIHRoYXQgc2VuZHMgdGhlIG9wY29kZS5cbiAgICAgICAqIEZvciB0aGlzIHJlYXNvbiB3ZSBuZWVkIHRvIGdyb3VwIHRoZSBpZHMgd2l0aCB0aGUgc2hhcmQgdGhlIGNhbGN1bGF0ZVNoYXJkSWQgbWV0aG9kIGdpdmVzXG4gICAgICAgKi9cblxuICAgICAgY29uc3QgbWFwID0gbmV3IE1hcDxudW1iZXIsIEJpZ1N0cmluZ1tdPigpO1xuXG4gICAgICBmb3IgKGNvbnN0IGd1aWxkSWQgb2YgZ3VpbGRJZHMpIHtcbiAgICAgICAgY29uc3Qgc2hhcmRJZCA9IGdhdGV3YXkuY2FsY3VsYXRlU2hhcmRJZChndWlsZElkKTtcblxuICAgICAgICBjb25zdCBpZHMgPSBtYXAuZ2V0KHNoYXJkSWQpID8/IFtdO1xuICAgICAgICBtYXAuc2V0KHNoYXJkSWQsIGlkcyk7XG5cbiAgICAgICAgaWRzLnB1c2goZ3VpbGRJZCk7XG4gICAgICB9XG5cbiAgICAgIGF3YWl0IFByb21pc2UuYWxsKFxuICAgICAgICBbLi4ubWFwLmVudHJpZXMoKV0ubWFwKChbc2hhcmRJZCwgaWRzXSkgPT5cbiAgICAgICAgICBnYXRld2F5LnNlbmRQYXlsb2FkKHNoYXJkSWQsIHtcbiAgICAgICAgICAgIG9wOiBHYXRld2F5T3Bjb2Rlcy5SZXF1ZXN0U291bmRib2FyZFNvdW5kcyxcbiAgICAgICAgICAgIGQ6IHtcbiAgICAgICAgICAgICAgZ3VpbGRfaWRzOiBpZHMsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0pLFxuICAgICAgICApLFxuICAgICAgKTtcbiAgICB9LFxuICB9O1xuXG4gIHJldHVybiBnYXRld2F5O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIENyZWF0ZUdhdGV3YXlNYW5hZ2VyT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBJZCBvZiB0aGUgZmlyc3QgU2hhcmQgd2hpY2ggc2hvdWxkIGdldCBjb250cm9sbGVkIGJ5IHRoaXMgbWFuYWdlci5cbiAgICogQGRlZmF1bHQgMFxuICAgKi9cbiAgZmlyc3RTaGFyZElkPzogbnVtYmVyO1xuICAvKipcbiAgICogSWQgb2YgdGhlIGxhc3QgU2hhcmQgd2hpY2ggc2hvdWxkIGdldCBjb250cm9sbGVkIGJ5IHRoaXMgbWFuYWdlci5cbiAgICogQGRlZmF1bHQgMFxuICAgKi9cbiAgbGFzdFNoYXJkSWQ/OiBudW1iZXI7XG4gIC8qKlxuICAgKiBEZWxheSBpbiBtaWxsaXNlY29uZHMgdG8gd2FpdCBiZWZvcmUgc3Bhd25pbmcgbmV4dCBzaGFyZC4gT1BUSU1BTCBJUyBBQk9WRSA1MTAwLiBZT1UgRE9OJ1QgV0FOVCBUTyBISVQgVEhFIFJBVEUgTElNSVQhISFcbiAgICogQGRlZmF1bHQgNTMwMFxuICAgKi9cbiAgc3Bhd25TaGFyZERlbGF5PzogbnVtYmVyO1xuICAvKipcbiAgICogVG90YWwgYW1vdW50IG9mIHNoYXJkcyB5b3VyIGJvdCB1c2VzLiBVc2VmdWwgZm9yIHplcm8tZG93bnRpbWUgdXBkYXRlcyBvciByZXNoYXJkaW5nLlxuICAgKiBAZGVmYXVsdCAxXG4gICAqL1xuICB0b3RhbFNoYXJkcz86IG51bWJlcjtcbiAgLyoqXG4gICAqIFRoZSBhbW91bnQgb2Ygc2hhcmRzIHRvIGxvYWQgcGVyIHdvcmtlci5cbiAgICogQGRlZmF1bHQgMjVcbiAgICovXG4gIHNoYXJkc1Blcldvcmtlcj86IG51bWJlcjtcbiAgLyoqXG4gICAqIFRoZSB0b3RhbCBhbW91bnQgb2Ygd29ya2VycyB0byB1c2UgZm9yIHlvdXIgYm90LlxuICAgKiBAZGVmYXVsdCA0XG4gICAqL1xuICB0b3RhbFdvcmtlcnM/OiBudW1iZXI7XG4gIC8qKlxuICAgKiBXaGV0aGVyIHRvIHNwcmVhZCBzaGFyZHMgYWNyb3NzIHdvcmtlcnMgaW4gYSByb3VuZC1yb2JpbiBtYW5uZXIuXG4gICAqXG4gICAqIEByZW1hcmtzXG4gICAqIEJ5IGRlZmF1bHQsIHNoYXJkcyBhcmUgYXNzaWduZWQgdG8gd29ya2VycyBpbiBjb250aWd1b3VzIGJsb2NrcyBiYXNlZCBvbiBzaGFyZHNQZXJXb3JrZXIuIElmIGFueSBzaGFyZCBpcyBsZWZ0IG92ZXIsIGl0IHdpbGwgYmUgYXNzaWduZWQgdG8gdGhlIGxhc3Qgd29ya2VyLlxuICAgKiBUaGlzIG1lYW5zIHRoYXQgaWYgeW91IGhhdmUgMyB3b3JrZXJzIGFuZCA0MCBzaGFyZHMgd2hpbGUgc2hhcmRzUGVyV29ya2VyIGlzIDEwLCB0aGUgZmlyc3Qgd29ya2VyIHdpbGwgZ2V0IHNoYXJkcyAwLTksIHRoZSBzZWNvbmQgd29ya2VyIHdpbGwgZ2V0IHNoYXJkcyAxMC0xOSwgYW5kIHNvIG9uLCB0aGUgbGFzdCB3b3JrZXIgd2lsbCBnZXQgc2hhcmRzIDIwLTM5LlxuICAgKlxuICAgKiBJZiB0aGlzIG9wdGlvbiBpcyBzZXQgdG8gdHJ1ZSwgdGhlIHNoYXJkcyB3aWxsIGJlIGFzc2lnbmVkIGluIGEgcm91bmQtcm9iaW4gbWFubmVyIHRvIHNwcmVhZCBtb3JlIGV2ZW5seSBhY3Jvc3Mgd29ya2Vycy5cbiAgICogRm9yIGV4YW1wbGUsIHdpdGggMyB3b3JrZXJzIGFuZCA0MCBzaGFyZHMsIHRoZSBmaXJzdCBzaGFyZCB3aWxsIGdvIHRvIHdvcmtlciAwLCB0aGUgc2Vjb25kIHNoYXJkIHRvIHdvcmtlciAxLCB0aGUgdGhpcmQgc2hhcmQgdG8gd29ya2VyIDIsIHRoZSBmb3VydGggc2hhcmQgdG8gd29ya2VyIDAsIGFuZCBzbyBvbi5cbiAgICpcbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIHNwcmVhZFNoYXJkc0luUm91bmRSb2Jpbj86IGJvb2xlYW47XG4gIC8qKiBJbXBvcnRhbnQgZGF0YSB3aGljaCBpcyB1c2VkIGJ5IHRoZSBtYW5hZ2VyIHRvIGNvbm5lY3Qgc2hhcmRzIHRvIHRoZSBnYXRld2F5LiAqL1xuICBjb25uZWN0aW9uPzogQ2FtZWxpemU8RGlzY29yZEdldEdhdGV3YXlCb3Q+O1xuICAvKiogV2hldGhlciBpbmNvbWluZyBwYXlsb2FkcyBhcmUgY29tcHJlc3NlZCB1c2luZyB6bGliLlxuICAgKlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgY29tcHJlc3M/OiBib29sZWFuO1xuICAvKiogV2hhdCB0cmFuc3BvcnQgY29tcHJlc3Npb24gc2hvdWxkIGJlIHVzZWQgKi9cbiAgdHJhbnNwb3J0Q29tcHJlc3Npb24/OiBUcmFuc3BvcnRDb21wcmVzc2lvbiB8IG51bGw7XG4gIC8qKiBUaGUgY2FsY3VsYXRlZCBpbnRlbnQgdmFsdWUgb2YgdGhlIGV2ZW50cyB3aGljaCB0aGUgc2hhcmQgc2hvdWxkIHJlY2VpdmUuXG4gICAqXG4gICAqIEBkZWZhdWx0IDBcbiAgICovXG4gIGludGVudHM/OiBudW1iZXI7XG4gIC8qKiBJZGVudGlmeSBwcm9wZXJ0aWVzIHRvIHVzZSAqL1xuICBwcm9wZXJ0aWVzPzoge1xuICAgIC8qKiBPcGVyYXRpbmcgc3lzdGVtIHRoZSBzaGFyZCBydW5zIG9uLlxuICAgICAqXG4gICAgICogQGRlZmF1bHQgXCJkYXJ3aW5cIiB8IFwibGludXhcIiB8IFwid2luZG93c1wiXG4gICAgICovXG4gICAgb3M6IHN0cmluZztcbiAgICAvKiogVGhlIFwiYnJvd3NlclwiIHdoZXJlIHRoaXMgc2hhcmQgaXMgcnVubmluZyBvbi5cbiAgICAgKlxuICAgICAqIEBkZWZhdWx0IFwiRGlzY29yZGVub1wiXG4gICAgICovXG4gICAgYnJvd3Nlcjogc3RyaW5nO1xuICAgIC8qKiBUaGUgZGV2aWNlIG9uIHdoaWNoIHRoZSBzaGFyZCBpcyBydW5uaW5nLlxuICAgICAqXG4gICAgICogQGRlZmF1bHQgXCJEaXNjb3JkZW5vXCJcbiAgICAgKi9cbiAgICBkZXZpY2U6IHN0cmluZztcbiAgfTtcbiAgLyoqIEJvdCB0b2tlbiB3aGljaCBpcyB1c2VkIHRvIGNvbm5lY3QgdG8gRGlzY29yZCAqL1xuICB0b2tlbjogc3RyaW5nO1xuICAvKiogVGhlIFVSTCBvZiB0aGUgZ2F0ZXdheSB3aGljaCBzaG91bGQgYmUgY29ubmVjdGVkIHRvLlxuICAgKlxuICAgKiBAZGVmYXVsdCBcIndzczovL2dhdGV3YXkuZGlzY29yZC5nZ1wiXG4gICAqL1xuICB1cmw/OiBzdHJpbmc7XG4gIC8qKiBUaGUgZ2F0ZXdheSB2ZXJzaW9uIHdoaWNoIHNob3VsZCBiZSB1c2VkLlxuICAgKlxuICAgKiBAZGVmYXVsdCAxMFxuICAgKi9cbiAgdmVyc2lvbj86IG51bWJlcjtcbiAgLyoqIFRoZSBldmVudHMgaGFuZGxlcnMgKi9cbiAgZXZlbnRzPzogU2hhcmRFdmVudHM7XG4gIC8qKiBUaGlzIG1hbmFnZXJzIGNhY2hlIHJlbGF0ZWQgc2V0dGluZ3MuICovXG4gIGNhY2hlPzoge1xuICAgIHJlcXVlc3RNZW1iZXJzPzoge1xuICAgICAgLyoqXG4gICAgICAgKiBXaGV0aGVyIG9yIG5vdCByZXF1ZXN0IG1lbWJlciByZXF1ZXN0cyBzaG91bGQgYmUgY2FjaGVkLlxuICAgICAgICogQGRlZmF1bHQgZmFsc2VcbiAgICAgICAqL1xuICAgICAgZW5hYmxlZD86IGJvb2xlYW47XG4gICAgfTtcbiAgfTtcbiAgLyoqXG4gICAqIFRoZSBsb2dnZXIgdGhhdCB0aGUgZ2F0ZXdheSBtYW5hZ2VyIHdpbGwgdXNlLlxuICAgKiBAZGVmYXVsdCBsb2dnZXIgLy8gVGhlIGxvZ2dlciBleHBvcnRlZCBieSBgQGRpc2NvcmRlbm8vdXRpbHNgXG4gICAqL1xuICBsb2dnZXI/OiBQaWNrPHR5cGVvZiBsb2dnZXIsICdkZWJ1ZycgfCAnaW5mbycgfCAnd2FybicgfCAnZXJyb3InIHwgJ2ZhdGFsJz47XG4gIC8qKlxuICAgKiBNYWtlIHRoZSBwcmVzZW5jZSBmb3Igd2hlbiB0aGUgYm90IGNvbm5lY3RzIHRvIHRoZSBnYXRld2F5XG4gICAqXG4gICAqIEByZW1hcmtzXG4gICAqIFRoaXMgZnVuY3Rpb24gd2lsbCBiZSBjYWxsZWQgZWFjaCB0aW1lIGEgU2hhcmQgaXMgZ29pbmcgdG8gaWRlbnRpZnlcbiAgICovXG4gIG1ha2VQcmVzZW5jZT86ICgpID0+IFByb21pc2U8RGlzY29yZFVwZGF0ZVByZXNlbmNlIHwgdW5kZWZpbmVkPjtcbiAgLyoqIE9wdGlvbnMgcmVsYXRlZCB0byByZXNoYXJkaW5nLiAqL1xuICByZXNoYXJkaW5nPzoge1xuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgb3Igbm90IGF1dG9tYXRlZCByZXNoYXJkaW5nIHNob3VsZCBiZSBlbmFibGVkLlxuICAgICAqIEBkZWZhdWx0IHRydWVcbiAgICAgKi9cbiAgICBlbmFibGVkOiBib29sZWFuO1xuICAgIC8qKlxuICAgICAqIFRoZSAlIG9mIGhvdyBmdWxsIGEgc2hhcmQgaXMgd2hlbiByZXNoYXJkaW5nIHNob3VsZCBiZSB0cmlnZ2VyZWQuXG4gICAgICpcbiAgICAgKiBAcmVtYXJrc1xuICAgICAqIFdlIHVzZSBkaXNjb3JkIHJlY29tbWVuZGVkIHNoYXJkIHZhbHVlIHRvIGdldCBhbiAqKmFwcHJveGltYXRpb24qKiBvZiB0aGUgc2hhcmQgZnVsbCBwZXJjZW50YWdlIHRvIGNvbXBhcmUgd2l0aCB0aGlzIHZhbHVlIHNvIHRoZSBib3QgbWF5IG5vdCByZXNoYXJkIGF0IHRoZSBleGFjdCBwZXJjZW50YWdlIHByb3ZpZGVkIGJ1dCBtYXkgcmVzaGFyZCB3aGVuIGl0IGlzIGEgYml0IGhpZ2hlciB0aGFuIHRoZSBwcm92aWRlZCBwZXJjZW50YWdlLlxuICAgICAqIEZvciBhY2N1cmF0ZSBjYWxjdWxhdGlvbiwgeW91IG1heSBvdmVycmlkZSB0aGUgYGNoZWNrSWZSZXNoYXJkaW5nSXNOZWVkZWRgIGZ1bmN0aW9uXG4gICAgICpcbiAgICAgKiBAZGVmYXVsdCA4MCBhcyBpbiA4MCVcbiAgICAgKi9cbiAgICBzaGFyZHNGdWxsUGVyY2VudGFnZTogbnVtYmVyO1xuICAgIC8qKlxuICAgICAqIFRoZSBpbnRlcnZhbCBpbiBtaWxsaXNlY29uZHMsIG9mIGhvdyBvZnRlbiB0byBjaGVjayB3aGV0aGVyIHJlc2hhcmRpbmcgaXMgbmVlZGVkIGFuZCByZXNoYXJkIGF1dG9tYXRpY2FsbHkuIFNldCB0byAtMSB0byBkaXNhYmxlIGF1dG8gcmVzaGFyZGluZy5cbiAgICAgKiBAZGVmYXVsdCAyODgwMDAwMCAoOCBob3VycylcbiAgICAgKi9cbiAgICBjaGVja0ludGVydmFsOiBudW1iZXI7XG4gICAgLyoqIEhhbmRsZXIgdG8gZ2V0IHNoYXJkIGNvdW50IGFuZCBvdGhlciBzZXNzaW9uIGluZm8uICovXG4gICAgZ2V0U2Vzc2lvbkluZm8/OiAoKSA9PiBQcm9taXNlPENhbWVsaXplPERpc2NvcmRHZXRHYXRld2F5Qm90Pj47XG4gICAgLyoqIEhhbmRsZXIgdG8gZWRpdCB0aGUgc2hhcmQgaWQgb24gYW55IGNhY2hlZCBndWlsZHMuICovXG4gICAgdXBkYXRlR3VpbGRzU2hhcmRJZD86IChndWlsZElkczogc3RyaW5nW10sIHNoYXJkSWQ6IG51bWJlcikgPT4gUHJvbWlzZTx2b2lkPjtcbiAgfTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBHYXRld2F5TWFuYWdlciBleHRlbmRzIFJlcXVpcmVkPENyZWF0ZUdhdGV3YXlNYW5hZ2VyT3B0aW9ucz4ge1xuICAvKiogVGhlIG1heCBjb25jdXJyZW5jeSBidWNrZXRzLiBUaG9zZSB3aWxsIGJlIGNyZWF0ZWQgd2hlbiB0aGUgYHNwYXduU2hhcmRzYCAod2hpY2ggY2FsbHMgYHByZXBhcmVCdWNrZXRzYCB1bmRlciB0aGUgaG9vZCkgZnVuY3Rpb24gZ2V0cyBjYWxsZWQuICovXG4gIGJ1Y2tldHM6IE1hcDxcbiAgICBudW1iZXIsXG4gICAge1xuICAgICAgd29ya2VyczogQXJyYXk8eyBpZDogbnVtYmVyOyBxdWV1ZTogbnVtYmVyW10gfT47XG4gICAgICAvKiogVGhlIGJ1Y2tldCB0byBxdWV1ZSB0aGUgaWRlbnRpZmllcy4gKi9cbiAgICAgIGxlYWt5QnVja2V0OiBMZWFreUJ1Y2tldDtcbiAgICB9XG4gID47XG4gIC8qKiBUaGUgc2hhcmRzIHRoYXQgYXJlIGNyZWF0ZWQuICovXG4gIHNoYXJkczogTWFwPG51bWJlciwgU2hhcmQ+O1xuICAvKiogVGhlIGxvZ2dlciBmb3IgdGhlIGdhdGV3YXkgbWFuYWdlci4gKi9cbiAgbG9nZ2VyOiBQaWNrPHR5cGVvZiBsb2dnZXIsICdkZWJ1ZycgfCAnaW5mbycgfCAnd2FybicgfCAnZXJyb3InIHwgJ2ZhdGFsJz47XG4gIC8qKiBFdmVyeXRoaW5nIHJlbGF0ZWQgdG8gcmVzaGFyZGluZy4gKi9cbiAgcmVzaGFyZGluZzogQ3JlYXRlR2F0ZXdheU1hbmFnZXJPcHRpb25zWydyZXNoYXJkaW5nJ10gJiB7XG4gICAgLyoqIFRoZSBpbnRlcnZhbCBpZCBvZiB0aGUgY2hlY2sgaW50ZXJ2YWwuIFRoaXMgaXMgdXNlZCB0byBjbGVhciB0aGUgaW50ZXJ2YWwgd2hlbiB0aGUgbWFuYWdlciBpcyBzaHV0ZG93bi4gKi9cbiAgICBjaGVja0ludGVydmFsSWQ/OiBOb2RlSlMuVGltZW91dCB8IHVuZGVmaW5lZDtcbiAgICAvKiogSG9sZHMgdGhlIHNoYXJkcyB0aGF0IHJlc2hhcmRpbmcgaGFzIGNyZWF0ZWQuIE9uY2UgcmVzaGFyZGluZyBpcyBkb25lLCB0aGlzIHJlcGxhY2VzIHRoZSBnYXRld2F5LnNoYXJkcyAqL1xuICAgIHNoYXJkczogTWFwPG51bWJlciwgU2hhcmQ+O1xuICAgIC8qKiBIYW5kbGVyIHRvIGNoZWNrIGlmIHJlc2hhcmRpbmcgaXMgbmVjZXNzYXJ5LiAqL1xuICAgIGNoZWNrSWZSZXNoYXJkaW5nSXNOZWVkZWQ6ICgpID0+IFByb21pc2U8eyBuZWVkZWQ6IGJvb2xlYW47IGluZm8/OiBDYW1lbGl6ZTxEaXNjb3JkR2V0R2F0ZXdheUJvdD4gfT47XG4gICAgLyoqXG4gICAgICogSGFuZGxlciB0byBiZWdpbiByZXNoYXJkaW5nLlxuICAgICAqXG4gICAgICogQHJlbWFya3NcbiAgICAgKiBUaGlzIGZ1bmN0aW9uIHdpbGwgcmVzb2x2ZSBvbmNlIHRoZSByZXNoYXJkaW5nIGlzIGRvbmUuXG4gICAgICogU28gd2hlbiBhbGwgdGhlIGNhbGxzIHRvIHtAbGluayB0ZWxsV29ya2VyVG9QcmVwYXJlfSBhbmQge0BsaW5rIG9uUmVzaGFyZGluZ1N3aXRjaH0gYXJlIGRvbmUuXG4gICAgICovXG4gICAgcmVzaGFyZDogKGluZm86IENhbWVsaXplPERpc2NvcmRHZXRHYXRld2F5Qm90PiAmIHsgZmlyc3RTaGFyZElkPzogbnVtYmVyOyBsYXN0U2hhcmRJZD86IG51bWJlciB9KSA9PiBQcm9taXNlPHZvaWQ+O1xuICAgIC8qKlxuICAgICAqIEhhbmRsZXIgdG8gY29tbXVuaWNhdGUgdG8gYSB3b3JrZXIgdGhhdCBpdCBuZWVkcyB0byBzcGF3biBhIG5ldyBzaGFyZCBhbmQgaWRlbnRpZnkgaXQgZm9yIHRoZSByZXNoYXJkaW5nLlxuICAgICAqXG4gICAgICogQHJlbWFya3NcbiAgICAgKiBUaGlzIGhhbmRsZXIgd29ya3MgaW4gdGhlIHNhbWUgd2F5IGFzIHRoZSB7QGxpbmsgdGVsbFdvcmtlclRvSWRlbnRpZnl9IGhhbmRsZXIuXG4gICAgICogU28geW91IHNob3VsZCB3YWl0IGZvciB0aGUgd29ya2VyIHRvIGhhdmUgaWRlbnRpZmllZCB0aGUgc2hhcmQgYmVmb3JlIHJlc29sdmluZyB0aGUgcHJvbWlzZVxuICAgICAqL1xuICAgIHRlbGxXb3JrZXJUb1ByZXBhcmU6ICh3b3JrZXJJZDogbnVtYmVyLCBzaGFyZElkOiBudW1iZXIsIGJ1Y2tldElkOiBudW1iZXIpID0+IFByb21pc2U8dm9pZD47XG4gICAgLyoqXG4gICAgICogSGFuZGxlIGNhbGxlZCB3aGVuIGFsbCB0aGUgd29ya2VycyBoYXZlIGZpbmlzaGVkIHByZXBhcmluZyBmb3IgdGhlIHJlc2hhcmRpbmcuXG4gICAgICpcbiAgICAgKiBUaGlzIHNob3VsZCBtYWtlIHRoZSBuZXcgcmVzaGFyZGVkIHNoYXJkcyBiZWNvbWUgdGhlIGFjdGl2ZSBvbmVzIGFuZCBzaHV0ZG93biB0aGUgb2xkIG9uZXNcbiAgICAgKi9cbiAgICBvblJlc2hhcmRpbmdTd2l0Y2g6ICgpID0+IFByb21pc2U8dm9pZD47XG4gIH07XG4gIC8qKiBEZXRlcm1pbmUgbWF4IG51bWJlciBvZiBzaGFyZHMgdG8gdXNlIGJhc2VkIHVwb24gdGhlIG1heCBjb25jdXJyZW5jeS4gKi9cbiAgY2FsY3VsYXRlVG90YWxTaGFyZHM6ICgpID0+IG51bWJlcjtcbiAgLyoqIERldGVybWluZSB0aGUgaWQgb2YgdGhlIHdvcmtlciB3aGljaCBpcyBoYW5kbGluZyBhIHNoYXJkLiAqL1xuICBjYWxjdWxhdGVXb3JrZXJJZDogKHNoYXJkSWQ6IG51bWJlcikgPT4gbnVtYmVyO1xuICAvKiogUHJlcGFyZXMgYWxsIHRoZSBidWNrZXRzIHRoYXQgYXJlIGF2YWlsYWJsZSBmb3IgaWRlbnRpZnlpbmcgdGhlIHNoYXJkcy4gKi9cbiAgcHJlcGFyZUJ1Y2tldHM6ICgpID0+IHZvaWQ7XG4gIC8qKiBTdGFydCBpZGVudGlmeWluZyBhbGwgdGhlIHNoYXJkcy4gKi9cbiAgc3Bhd25TaGFyZHM6ICgpID0+IFByb21pc2U8dm9pZD47XG4gIC8qKiBTaHV0ZG93biBhbGwgc2hhcmRzLiAqL1xuICBzaHV0ZG93bjogKGNvZGU6IG51bWJlciwgcmVhc29uOiBzdHJpbmcsIGNsZWFyUmVzaGFyZGluZ0ludGVydmFsPzogYm9vbGVhbikgPT4gUHJvbWlzZTx2b2lkPjtcbiAgc2VuZFBheWxvYWQ6IChzaGFyZElkOiBudW1iZXIsIHBheWxvYWQ6IFNoYXJkU29ja2V0UmVxdWVzdCkgPT4gUHJvbWlzZTx2b2lkPjtcbiAgLyoqXG4gICAqIEFsbG93cyB1c2VycyB0byBob29rIGluIGFuZCBjaGFuZ2UgdG8gY29tbXVuaWNhdGUgdG8gZGlmZmVyZW50IHdvcmtlcnMgYWNyb3NzIGRpZmZlcmVudCBzZXJ2ZXJzIG9yIGFueXRoaW5nIHRoZXkgbGlrZS5cbiAgICogRm9yIGV4YW1wbGUgdXNpbmcgcmVkaXMgcHVic3ViIHRvIHRhbGsgdG8gb3RoZXIgc2VydmVycy5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogVGhpcyBzaG91bGQgd2FpdCBmb3IgdGhlIHdvcmtlciB0byBoYXZlIGlkZW50aWZpZWQgdGhlIHNoYXJkIGJlZm9yZSByZXNvbHZpbmcgdGhlIHJldHVybmVkIHByb21pc2VcbiAgICovXG4gIHRlbGxXb3JrZXJUb0lkZW50aWZ5OiAod29ya2VySWQ6IG51bWJlciwgc2hhcmRJZDogbnVtYmVyLCBidWNrZXRJZDogbnVtYmVyKSA9PiBQcm9taXNlPHZvaWQ+O1xuICAvKiogVGVsbCB0aGUgbWFuYWdlciB0byBpZGVudGlmeSBhIFNoYXJkLiBJZiB0aGlzIFNoYXJkIGlzIG5vdCBhbHJlYWR5IG1hbmFnZWQgdGhpcyB3aWxsIGFsc28gYWRkIHRoZSBTaGFyZCB0byB0aGUgbWFuYWdlci4gKi9cbiAgaWRlbnRpZnk6IChzaGFyZElkOiBudW1iZXIpID0+IFByb21pc2U8dm9pZD47XG4gIC8qKiBLaWxsIGEgc2hhcmQuIENsb3NlIGEgc2hhcmRzIGNvbm5lY3Rpb24gdG8gRGlzY29yZCdzIGdhdGV3YXkgKGlmIGFueSkgYW5kIHJlbW92ZSBpdCBmcm9tIHRoZSBtYW5hZ2VyLiAqL1xuICBraWxsOiAoc2hhcmRJZDogbnVtYmVyKSA9PiBQcm9taXNlPHZvaWQ+O1xuICAvKiogVGhpcyBmdW5jdGlvbiBtYWtlcyBzdXJlIHRoYXQgdGhlIGJ1Y2tldCBpcyBhbGxvd2VkIHRvIG1ha2UgdGhlIG5leHQgaWRlbnRpZnkgcmVxdWVzdC4gKi9cbiAgcmVxdWVzdElkZW50aWZ5OiAoc2hhcmRJZDogbnVtYmVyKSA9PiBQcm9taXNlPHZvaWQ+O1xuICAvKiogQ2FsY3VsYXRlcyB0aGUgbnVtYmVyIG9mIHNoYXJkcyBiYXNlZCBvbiB0aGUgZ3VpbGQgaWQgYW5kIHRvdGFsIHNoYXJkcy4gKi9cbiAgY2FsY3VsYXRlU2hhcmRJZDogKGd1aWxkSWQ6IEJpZ1N0cmluZywgdG90YWxTaGFyZHM/OiBudW1iZXIpID0+IG51bWJlcjtcbiAgLyoqXG4gICAqIENvbm5lY3RzIHRoZSBib3QgdXNlciB0byBhIHZvaWNlIG9yIHN0YWdlIGNoYW5uZWwuXG4gICAqXG4gICAqIFRoaXMgZnVuY3Rpb24gc2VuZHMgdGhlIF9VcGRhdGUgVm9pY2UgU3RhdGVfIGdhdGV3YXkgY29tbWFuZCBvdmVyIHRoZSBnYXRld2F5IGJlaGluZCB0aGUgc2NlbmVzLlxuICAgKlxuICAgKiBAcGFyYW0gZ3VpbGRJZCAtIFRoZSBJRCBvZiB0aGUgZ3VpbGQgdGhlIHZvaWNlIGNoYW5uZWwgdG8gbGVhdmUgaXMgaW4uXG4gICAqIEBwYXJhbSBjaGFubmVsSWQgLSBUaGUgSUQgb2YgdGhlIGNoYW5uZWwgeW91IHdhbnQgdG8gam9pbi5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogUmVxdWlyZXMgdGhlIGBDT05ORUNUYCBwZXJtaXNzaW9uLlxuICAgKlxuICAgKiBGaXJlcyBhIF9Wb2ljZSBTdGF0ZSBVcGRhdGVfIGdhdGV3YXkgZXZlbnQuXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGlzY29yZC5jb20vZGV2ZWxvcGVycy9kb2NzL3RvcGljcy9nYXRld2F5I3VwZGF0ZS12b2ljZS1zdGF0ZX1cbiAgICovXG4gIGpvaW5Wb2ljZUNoYW5uZWw6IChcbiAgICBndWlsZElkOiBCaWdTdHJpbmcsXG4gICAgY2hhbm5lbElkOiBCaWdTdHJpbmcsXG4gICAgb3B0aW9ucz86IEF0TGVhc3RPbmU8T21pdDxVcGRhdGVWb2ljZVN0YXRlLCAnZ3VpbGRJZCcgfCAnY2hhbm5lbElkJz4+LFxuICApID0+IFByb21pc2U8dm9pZD47XG4gIC8qKlxuICAgKiBFZGl0cyB0aGUgYm90IHN0YXR1cyBpbiBhbGwgc2hhcmRzIHRoYXQgdGhpcyBnYXRld2F5IG1hbmFnZXMuXG4gICAqXG4gICAqIEBwYXJhbSBkYXRhIFRoZSBzdGF0dXMgZGF0YSB0byBzZXQgdGhlIGJvdHMgc3RhdHVzIHRvLlxuICAgKiBAcmV0dXJucyBub3RoaW5nXG4gICAqL1xuICBlZGl0Qm90U3RhdHVzOiAoZGF0YTogRGlzY29yZFVwZGF0ZVByZXNlbmNlKSA9PiBQcm9taXNlPHZvaWQ+O1xuICAvKipcbiAgICogRWRpdHMgdGhlIGJvdCdzIHN0YXR1cyBvbiBvbmUgc2hhcmQuXG4gICAqXG4gICAqIEBwYXJhbSBzaGFyZElkIFRoZSBzaGFyZCBpZCB0byBlZGl0IHRoZSBzdGF0dXMgZm9yLlxuICAgKiBAcGFyYW0gZGF0YSBUaGUgc3RhdHVzIGRhdGEgdG8gc2V0IHRoZSBib3RzIHN0YXR1cyB0by5cbiAgICogQHJldHVybnMgbm90aGluZ1xuICAgKi9cbiAgZWRpdFNoYXJkU3RhdHVzOiAoc2hhcmRJZDogbnVtYmVyLCBkYXRhOiBEaXNjb3JkVXBkYXRlUHJlc2VuY2UpID0+IFByb21pc2U8dm9pZD47XG4gIC8qKlxuICAgKiBGZXRjaGVzIHRoZSBsaXN0IG9mIG1lbWJlcnMgZm9yIGEgZ3VpbGQgb3ZlciB0aGUgZ2F0ZXdheS4gSWYgYGdhdGV3YXkuY2FjaGUucmVxdWVzdE1lbWJlcnMuZW5hYmxlZGAgaXMgbm90IHNldCwgdGhpcyBmdW5jdGlvbiB3aWxsIHJldHVybiBhbiBlbXB0eSBhcnJheSBhbmQgeW91J2xsIGhhdmUgdG8gaGFuZGxlIHRoZSBgR1VJTERfTUVNQkVSU19DSFVOS2AgZXZlbnRzIHlvdXJzZWxmLlxuICAgKlxuICAgKiBAcGFyYW0gZ3VpbGRJZCAtIFRoZSBJRCBvZiB0aGUgZ3VpbGQgdG8gZ2V0IHRoZSBsaXN0IG9mIG1lbWJlcnMgZm9yLlxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgZmV0Y2hpbmcgb2YgdGhlIG1lbWJlcnMuXG4gICAqXG4gICAqIEByZW1hcmtzXG4gICAqIElmIHJlcXVlc3RpbmcgdGhlIGVudGlyZSBtZW1iZXIgbGlzdDpcbiAgICogLSBSZXF1aXJlcyB0aGUgYEdVSUxEX01FTUJFUlNgIGludGVudC5cbiAgICpcbiAgICogSWYgcmVxdWVzdGluZyBwcmVzZW5jZXMgKHtAbGluayBSZXF1ZXN0R3VpbGRNZW1iZXJzLnByZXNlbmNlcyB8IHByZXNlbmNlc30gc2V0IHRvIGB0cnVlYCk6XG4gICAqIC0gUmVxdWlyZXMgdGhlIGBHVUlMRF9QUkVTRU5DRVNgIGludGVudC5cbiAgICpcbiAgICogSWYgcmVxdWVzdGluZyBhIHByZWZpeCAoe0BsaW5rIFJlcXVlc3RHdWlsZE1lbWJlcnMucXVlcnkgfCBxdWVyeX0gbm9uLWB1bmRlZmluZWRgKTpcbiAgICogLSBSZXR1cm5zIGEgbWF4aW11bSBvZiAxMDAgbWVtYmVycy5cbiAgICpcbiAgICogSWYgcmVxdWVzdGluZyBhIHVzZXJzIGJ5IElEICh7QGxpbmsgUmVxdWVzdEd1aWxkTWVtYmVycy51c2VySWRzIHwgdXNlcklkc30gbm9uLWB1bmRlZmluZWRgKTpcbiAgICogLSBSZXR1cm5zIGEgbWF4aW11bSBvZiAxMDAgbWVtYmVycy5cbiAgICpcbiAgICogRmlyZXMgYSBfR3VpbGQgTWVtYmVycyBDaHVua18gZ2F0ZXdheSBldmVudCBmb3IgZXZlcnkgMTAwMCBtZW1iZXJzIGZldGNoZWQuXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGlzY29yZC5jb20vZGV2ZWxvcGVycy9kb2NzL3RvcGljcy9nYXRld2F5I3JlcXVlc3QtZ3VpbGQtbWVtYmVyc31cbiAgICovXG4gIHJlcXVlc3RNZW1iZXJzOiAoZ3VpbGRJZDogQmlnU3RyaW5nLCBvcHRpb25zPzogT21pdDxSZXF1ZXN0R3VpbGRNZW1iZXJzLCAnZ3VpbGRJZCc+KSA9PiBQcm9taXNlPENhbWVsaXplPERpc2NvcmRNZW1iZXJXaXRoVXNlcltdPj47XG4gIC8qKlxuICAgKiBMZWF2ZXMgdGhlIHZvaWNlIGNoYW5uZWwgdGhlIGJvdCB1c2VyIGlzIGN1cnJlbnRseSBpbi5cbiAgICpcbiAgICogVGhpcyBmdW5jdGlvbiBzZW5kcyB0aGUgX1VwZGF0ZSBWb2ljZSBTdGF0ZV8gZ2F0ZXdheSBjb21tYW5kIG92ZXIgdGhlIGdhdGV3YXkgYmVoaW5kIHRoZSBzY2VuZXMuXG4gICAqXG4gICAqIEBwYXJhbSBndWlsZElkIC0gVGhlIElEIG9mIHRoZSBndWlsZCB0aGUgdm9pY2UgY2hhbm5lbCB0byBsZWF2ZSBpcyBpbi5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogRmlyZXMgYSBfVm9pY2UgU3RhdGUgVXBkYXRlXyBnYXRld2F5IGV2ZW50LlxuICAgKlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL2Rpc2NvcmQuY29tL2RldmVsb3BlcnMvZG9jcy90b3BpY3MvZ2F0ZXdheSN1cGRhdGUtdm9pY2Utc3RhdGV9XG4gICAqL1xuICBsZWF2ZVZvaWNlQ2hhbm5lbDogKGd1aWxkSWQ6IEJpZ1N0cmluZykgPT4gUHJvbWlzZTx2b2lkPjtcbiAgLyoqXG4gICAqIFVzZWQgdG8gcmVxdWVzdCBzb3VuZGJvYXJkIHNvdW5kcyBmb3IgYSBsaXN0IG9mIGd1aWxkcy5cbiAgICpcbiAgICogVGhpcyBmdW5jdGlvbiBzZW5kcyBtdWx0aXBsZSAoc2VlIHJlbWFya3MpIF9SZXF1ZXN0IFNvdW5kYm9hcmQgU291bmRzXyBnYXRld2F5IGNvbW1hbmQgb3ZlciB0aGUgZ2F0ZXdheSBiZWhpbmQgdGhlIHNjZW5lcy5cbiAgICpcbiAgICogQHBhcmFtIGd1aWxkSWRzIC0gVGhlIGd1aWxkcyB0byBnZXQgdGhlIHNvdW5kcyBmcm9tXG4gICAqXG4gICAqIEByZW1hcmtzXG4gICAqIEZpcmVzIGEgX1NvdW5kYm9hcmQgU291bmRzXyBnYXRld2F5IGV2ZW50LlxuICAgKlxuICAgKiDimqDvuI8gRGlzY29yZCB3aWxsIHNlbmQgdGhlIF9Tb3VuZGJvYXJkIFNvdW5kc18gZm9yIGVhY2ggb2YgdGhlIGd1aWxkIGlkc1xuICAgKiBob3dldmVyIHlvdSBtYXkgbm90IHJlY2VpdmUgdGhlIHNhbWUgbnVtYmVyIG9mIGV2ZW50cyBhcyB0aGUgaWRzIHBhc3NlZCB0byBfUmVxdWVzdCBTb3VuZGJvYXJkIFNvdW5kc18gZm9yIG9uZSBvZiB0aGUgZm9sbG93aW5nIHJlYXNvbnM6XG4gICAqIC0gVGhlIGJvdCBpcyBub3QgaW4gdGhlIHNlcnZlciBwcm92aWRlZFxuICAgKiAtIFRoZSBzaGFyZCB0aGUgbWVzc2FnZSBoYXMgYmVlbiBzZW50IGZyb20gZG9lcyBub3QgcmVjZWl2ZSBldmVudHMgZm9yIHRoZSBzcGVjaWZpZWQgZ3VpbGRcbiAgICpcbiAgICogVG8gYXZvaWQgdGhpcyBEaXNjb3JkZW5vIHdpbGwgYXV0b21hdGljYWxseSB0cnkgdG8gZ3JvdXAgdGhlIGlkcyBiYXNlZCBvbiB3aGF0IHNoYXJkIHRoZXkgd2lsbCBuZWVkIHRvIGJlIHNlbnQsIGJ1dCB0aGlzIGludm9sdmVzIHNlbmRpbmcgbXVsdGlwbGUgbWVzc2FnZXMgaW4gbXVsdGlwbGUgc2hhcmRzXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGlzY29yZC5jb20vZGV2ZWxvcGVycy9kb2NzL3RvcGljcy9nYXRld2F5LWV2ZW50cyNyZXF1ZXN0LXNvdW5kYm9hcmQtc291bmRzfVxuICAgKi9cbiAgcmVxdWVzdFNvdW5kYm9hcmRTb3VuZHM6IChndWlsZElkczogQmlnU3RyaW5nW10pID0+IFByb21pc2U8dm9pZD47XG4gIC8qKiBUaGlzIG1hbmFnZXJzIGNhY2hlIHJlbGF0ZWQgc2V0dGluZ3MuICovXG4gIGNhY2hlOiB7XG4gICAgcmVxdWVzdE1lbWJlcnM6IHtcbiAgICAgIC8qKlxuICAgICAgICogV2hldGhlciBvciBub3QgcmVxdWVzdCBtZW1iZXIgcmVxdWVzdHMgc2hvdWxkIGJlIGNhY2hlZC5cbiAgICAgICAqIEBkZWZhdWx0IGZhbHNlXG4gICAgICAgKi9cbiAgICAgIGVuYWJsZWQ6IGJvb2xlYW47XG4gICAgICAvKiogVGhlIHBlbmRpbmcgcmVxdWVzdHMuICovXG4gICAgICBwZW5kaW5nOiBDb2xsZWN0aW9uPHN0cmluZywgUmVxdWVzdE1lbWJlclJlcXVlc3Q+O1xuICAgIH07XG4gIH07XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUmVxdWVzdE1lbWJlclJlcXVlc3Qge1xuICAvKiogVGhlIHVuaXF1ZSBub25jZSBmb3IgdGhpcyByZXF1ZXN0LiAqL1xuICBub25jZTogc3RyaW5nO1xuICAvKiogVGhlIHJlc29sdmVyIGhhbmRsZXIgdG8gcnVuIHdoZW4gYWxsIG1lbWJlcnMgYXJyaXZlLiAqL1xuICByZXNvbHZlOiAodmFsdWU6IENhbWVsaXplPERpc2NvcmRNZW1iZXJXaXRoVXNlcltdPiB8IFByb21pc2VMaWtlPENhbWVsaXplPERpc2NvcmRNZW1iZXJXaXRoVXNlcltdPj4pID0+IHZvaWQ7XG4gIC8qKiBUaGUgbWVtYmVycyB0aGF0IGhhdmUgYWxyZWFkeSBhcnJpdmVkIGZvciB0aGlzIHJlcXVlc3QuICovXG4gIG1lbWJlcnM6IERpc2NvcmRNZW1iZXJXaXRoVXNlcltdO1xufVxuIl0sIm5hbWVzIjpbInJhbmRvbUJ5dGVzIiwiR2F0ZXdheUludGVudHMiLCJHYXRld2F5T3Bjb2RlcyIsIkNvbGxlY3Rpb24iLCJqc29uU2FmZVJlcGxhY2VyIiwiTGVha3lCdWNrZXQiLCJsb2dnZXIiLCJTaGFyZCIsIlNoYXJkU29ja2V0Q2xvc2VDb2RlcyIsImNyZWF0ZUdhdGV3YXlNYW5hZ2VyIiwib3B0aW9ucyIsImNvbm5lY3Rpb25PcHRpb25zIiwiY29ubmVjdGlvbiIsInVybCIsInNoYXJkcyIsInNlc3Npb25TdGFydExpbWl0IiwibWF4Q29uY3VycmVuY3kiLCJyZW1haW5pbmciLCJ0b3RhbCIsInJlc2V0QWZ0ZXIiLCJnYXRld2F5IiwiZXZlbnRzIiwiY29tcHJlc3MiLCJ0cmFuc3BvcnRDb21wcmVzc2lvbiIsImludGVudHMiLCJwcm9wZXJ0aWVzIiwib3MiLCJwcm9jZXNzIiwicGxhdGZvcm0iLCJicm93c2VyIiwiZGV2aWNlIiwidG9rZW4iLCJ2ZXJzaW9uIiwidG90YWxTaGFyZHMiLCJsYXN0U2hhcmRJZCIsImZpcnN0U2hhcmRJZCIsInRvdGFsV29ya2VycyIsInNoYXJkc1BlcldvcmtlciIsInNwYXduU2hhcmREZWxheSIsInNwcmVhZFNoYXJkc0luUm91bmRSb2JpbiIsIk1hcCIsImJ1Y2tldHMiLCJjYWNoZSIsInJlcXVlc3RNZW1iZXJzIiwiZW5hYmxlZCIsInBlbmRpbmciLCJtYWtlUHJlc2VuY2UiLCJQcm9taXNlIiwicmVzb2x2ZSIsInVuZGVmaW5lZCIsInJlc2hhcmRpbmciLCJzaGFyZHNGdWxsUGVyY2VudGFnZSIsImNoZWNrSW50ZXJ2YWwiLCJnZXRTZXNzaW9uSW5mbyIsInVwZGF0ZUd1aWxkc1NoYXJkSWQiLCJjaGVja0lmUmVzaGFyZGluZ0lzTmVlZGVkIiwiZGVidWciLCJuZWVkZWQiLCJFcnJvciIsInNlc3Npb25JbmZvIiwiSlNPTiIsInN0cmluZ2lmeSIsImluZm8iLCJwZXJjZW50YWdlIiwicmVzaGFyZCIsImNhbGN1bGF0ZVRvdGFsU2hhcmRzIiwiY2xlYXIiLCJwcmVwYXJlQnVja2V0cyIsInByb21pc2VzIiwiQXJyYXkiLCJmcm9tIiwiZW50cmllcyIsIm1hcCIsImJ1Y2tldElkIiwiYnVja2V0Iiwid29ya2VyIiwid29ya2VycyIsInNoYXJkSWQiLCJxdWV1ZSIsInRlbGxXb3JrZXJUb1ByZXBhcmUiLCJpZCIsImFsbCIsIm9uUmVzaGFyZGluZ1N3aXRjaCIsIndvcmtlcklkIiwic2hhcmQiLCJtZXNzYWdlIiwiX3NoYXJkIiwicGF5bG9hZCIsInQiLCJkIiwiZ3VpbGRzIiwiZyIsInJlcXVlc3RJZGVudGlmeSIsInNldCIsImlkZW50aWZ5IiwidmFsdWVzIiwib2xkSGFuZGxlciIsIl8iLCJzaHV0ZG93biIsIlJlc2hhcmRlZCIsIk1hdGgiLCJjZWlsIiwiY2FsY3VsYXRlV29ya2VySWQiLCJtaW4iLCJmbG9vciIsImkiLCJsZWFreUJ1Y2tldCIsIm1heCIsInJlZmlsbEFtb3VudCIsInJlZmlsbEludGVydmFsIiwiZ2V0IiwiZmluZCIsInciLCJwdXNoIiwic3Bhd25TaGFyZHMiLCJ0ZWxsV29ya2VyVG9JZGVudGlmeSIsImNsZWFySW50ZXJ2YWwiLCJjaGVja0ludGVydmFsSWQiLCJ3YXJuIiwic2V0SW50ZXJ2YWwiLCJyZXNoYXJkaW5nSW5mbyIsImNvZGUiLCJyZWFzb24iLCJjbGVhclJlc2hhcmRpbmdJbnRlcnZhbCIsImNsb3NlIiwic2VuZFBheWxvYWQiLCJzZW5kIiwiYWNxdWlyZSIsImtpbGwiLCJkZWxldGUiLCJjYWxjdWxhdGVTaGFyZElkIiwiZ3VpbGRJZCIsIk51bWJlciIsIkJpZ0ludCIsImpvaW5Wb2ljZUNoYW5uZWwiLCJjaGFubmVsSWQiLCJvcCIsIlZvaWNlU3RhdGVVcGRhdGUiLCJndWlsZF9pZCIsInRvU3RyaW5nIiwiY2hhbm5lbF9pZCIsInNlbGZfbXV0ZSIsInNlbGZNdXRlIiwic2VsZl9kZWFmIiwic2VsZkRlYWYiLCJlZGl0Qm90U3RhdHVzIiwiZGF0YSIsImVkaXRTaGFyZFN0YXR1cyIsIlByZXNlbmNlVXBkYXRlIiwic2luY2UiLCJhZmsiLCJhY3Rpdml0aWVzIiwic3RhdHVzIiwibGltaXQiLCJHdWlsZE1lbWJlcnMiLCJ1c2VySWRzIiwibGVuZ3RoIiwibm9uY2UiLCJoYXMiLCJtZW1iZXJzIiwicmVqZWN0IiwiUmVxdWVzdEd1aWxkTWVtYmVycyIsInF1ZXJ5IiwicHJlc2VuY2VzIiwidXNlcl9pZHMiLCJsZWF2ZVZvaWNlQ2hhbm5lbCIsInJlcXVlc3RTb3VuZGJvYXJkU291bmRzIiwiZ3VpbGRJZHMiLCJpZHMiLCJSZXF1ZXN0U291bmRib2Fy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
|
package/dist/types.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { DiscordGatewayPayload, GatewayOpcodes } from '@discordeno/types';
|
|
2
2
|
import type Shard from './Shard.js';
|
|
3
3
|
export declare enum ShardState {
|
|
4
4
|
/** Shard is fully connected to the gateway and receiving events from Discord. */
|
|
@@ -144,7 +144,7 @@ export interface ShardEvents {
|
|
|
144
144
|
/** The shard has successfully been identified itself with Discord. */
|
|
145
145
|
ready?: (shard: Shard) => unknown;
|
|
146
146
|
/** The shard has received a message from Discord. */
|
|
147
|
-
message?: (shard: Shard, payload:
|
|
147
|
+
message?: (shard: Shard, payload: DiscordGatewayPayload) => unknown;
|
|
148
148
|
}
|
|
149
149
|
export declare enum ShardSocketCloseCodes {
|
|
150
150
|
/** A regular Shard shutdown. */
|
package/dist/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|
package/dist/types.js
CHANGED
|
@@ -42,4 +42,4 @@ export var ShardSocketCloseCodes = /*#__PURE__*/ function(ShardSocketCloseCodes)
|
|
|
42
42
|
return ShardSocketCloseCodes;
|
|
43
43
|
}({});
|
|
44
44
|
|
|
45
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
45
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy90eXBlcy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IERpc2NvcmRHYXRld2F5UGF5bG9hZCwgR2F0ZXdheU9wY29kZXMgfSBmcm9tICdAZGlzY29yZGVuby90eXBlcyc7XG5pbXBvcnQgdHlwZSBTaGFyZCBmcm9tICcuL1NoYXJkLmpzJztcblxuZXhwb3J0IGVudW0gU2hhcmRTdGF0ZSB7XG4gIC8qKiBTaGFyZCBpcyBmdWxseSBjb25uZWN0ZWQgdG8gdGhlIGdhdGV3YXkgYW5kIHJlY2VpdmluZyBldmVudHMgZnJvbSBEaXNjb3JkLiAqL1xuICBDb25uZWN0ZWQgPSAwLFxuICAvKiogU2hhcmQgc3RhcnRlZCB0byBjb25uZWN0IHRvIHRoZSBnYXRld2F5LiBUaGlzIGlzIG9ubHkgdXNlZCBpZiB0aGUgc2hhcmQgaXMgbm90IGN1cnJlbnRseSB0cnlpbmcgdG8gaWRlbnRpZnkgb3IgcmVzdW1lLiAqL1xuICBDb25uZWN0aW5nID0gMSxcbiAgLyoqIFNoYXJkIGdvdCBkaXNjb25uZWN0ZWQgYW5kIHJlY29ubmVjdGlvbiBhY3Rpb25zIGhhdmUgYmVlbiBzdGFydGVkLiAqL1xuICBEaXNjb25uZWN0ZWQgPSAyLFxuICAvKiogVGhlIHNoYXJkIGlzIGNvbm5lY3RlZCB0byB0aGUgZ2F0ZXdheSBidXQgb25seSBoZWFydGJlYXRpbmcuIEF0IHRoaXMgc3RhdGUgdGhlIHNoYXJkIGhhcyBub3QgYmVlbiBpZGVudGlmaWVkIHdpdGggZGlzY29yZC4gKi9cbiAgVW5pZGVudGlmaWVkID0gMyxcbiAgLyoqIFNoYXJkIGlzIHRyeWluZyB0byBpZGVudGlmeSB3aXRoIHRoZSBnYXRld2F5IHRvIGNyZWF0ZSBhIG5ldyBzZXNzaW9uLiAqL1xuICBJZGVudGlmeWluZyA9IDQsXG4gIC8qKiBTaGFyZCBpcyB0cnlpbmcgdG8gcmVzdW1lIGEgc2Vzc2lvbiB3aXRoIHRoZSBnYXRld2F5LiAqL1xuICBSZXN1bWluZyA9IDUsXG4gIC8qKiBTaGFyZCBnb3Qgc2h1dCBkb3duIHN0dWRpZWQgb3IgZHVlIHRvIGEgbm90IChzZWxmKSBmaXhhYmxlIGVycm9yIGFuZCBtYXkgbm90IGF0dGVtcHQgdG8gcmVjb25uZWN0IG9uIGl0cyBvd24uICovXG4gIE9mZmxpbmUgPSA2LFxufVxuXG5leHBvcnQgZW51bSBUcmFuc3BvcnRDb21wcmVzc2lvbiB7XG4gIC8qKlxuICAgKiBaTGliLVN0cmVhbSBUcmFuc3BvcnQgQ29tcHJlc3Npb24uXG4gICAqXG4gICAqIEByZW1hcmtzXG4gICAqIFVzZXMgYG5vZGU6emxpYmAgdG8gZGVjb21wcmVzcyB0aGUgcGF5bG9hZHNcbiAgICpcbiAgICogQHNlZSBodHRwczovL2Rpc2NvcmQuY29tL2RldmVsb3BlcnMvZG9jcy90b3BpY3MvZ2F0ZXdheSN6bGlic3RyZWFtXG4gICAqL1xuICB6bGliID0gJ3psaWItc3RyZWFtJyxcbiAgLyoqXG4gICAqIFpTdGQtU3RyZWFtIFRyYW5zcG9ydCBDb21wcmVzc2lvbi5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogVGhpcyB3aWxsIHVzZSBgbm9kZTp6bGliYCB6c3RkIGltcGxlbWVudGF0aW9uIGlmIGF2YWlsYWJsZSAobm9kZSB2MjIuMTUrIG9yIG5vZGUgdjIzLjgrKSBvciBgZnpzdGRgIG90aGVyd2lzZS5cbiAgICpcbiAgICogYGZ6c3RkYCBpcyBhbiBvcHRpb25hbCBkZXBlbmRlbmN5LiBZb3Ugd2lsbCBuZWVkIHRvIGluc3RhbGwgaXQgdG8gYmUgYWJsZSB0byB1c2UgaXQuXG4gICAqXG4gICAqIEBzZWUgaHR0cHM6Ly9kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL2RvY3MvdG9waWNzL2dhdGV3YXkjenN0ZHN0cmVhbVxuICAgKi9cbiAgenN0ZCA9ICd6c3RkLXN0cmVhbScsXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgU2hhcmRHYXRld2F5Q29uZmlnIHtcbiAgLyoqXG4gICAqIFdoYXRldmVyIHRvIGVuYWJsZSBQYXlsb2FkIGNvbXByZXNzaW9uLlxuICAgKlxuICAgKiBAcmVtYXJrc1xuICAgKiBUaGlzIGlzIGNvbXBhdGlibGUgd2l0aCB7QGxpbmsgdHJhbnNwb3J0Q29tcHJlc3Npb259XG4gICAqXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqXG4gICAqIEBzZWUgaHR0cHM6Ly9kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL2RvY3MvdG9waWNzL2dhdGV3YXkjcGF5bG9hZC1jb21wcmVzc2lvblxuICAgKi9cbiAgY29tcHJlc3M6IGJvb2xlYW47XG4gIC8qKlxuICAgKiBXaGF0IFRyYW5zcG9ydCBDb21wcmVzc2lvbiBzaG91bGQgYmUgdXNlXG4gICAqXG4gICAqIEBkZWZhdWx0IG51bGxcbiAgICpcbiAgICogQHNlZSBodHRwczovL2Rpc2NvcmQuY29tL2RldmVsb3BlcnMvZG9jcy90b3BpY3MvZ2F0ZXdheSN0cmFuc3BvcnQtY29tcHJlc3Npb25cbiAgICovXG4gIHRyYW5zcG9ydENvbXByZXNzaW9uOiBUcmFuc3BvcnRDb21wcmVzc2lvbiB8IG51bGw7XG4gIC8qKiBUaGUgY2FsY3VsYXRlZCBpbnRlbnQgdmFsdWUgb2YgdGhlIGV2ZW50cyB3aGljaCB0aGUgc2hhcmQgc2hvdWxkIHJlY2VpdmUuXG4gICAqXG4gICAqIEBkZWZhdWx0IDBcbiAgICovXG4gIGludGVudHM6IG51bWJlcjtcbiAgLyoqIElkZW50aWZ5IHByb3BlcnRpZXMgdG8gdXNlICovXG4gIHByb3BlcnRpZXM6IHtcbiAgICAvKiogT3BlcmF0aW5nIHN5c3RlbSB0aGUgc2hhcmQgcnVucyBvbi5cbiAgICAgKlxuICAgICAqIEBkZWZhdWx0IFwiZGFyd2luXCIgfCBcImxpbnV4XCIgfCBcIndpbmRvd3NcIlxuICAgICAqL1xuICAgIG9zOiBzdHJpbmc7XG4gICAgLyoqIFRoZSBcImJyb3dzZXJcIiB3aGVyZSB0aGlzIHNoYXJkIGlzIHJ1bm5pbmcgb24uXG4gICAgICpcbiAgICAgKiBAZGVmYXVsdCBcIkRpc2NvcmRlbm9cIlxuICAgICAqL1xuICAgIGJyb3dzZXI6IHN0cmluZztcbiAgICAvKiogVGhlIGRldmljZSBvbiB3aGljaCB0aGUgc2hhcmQgaXMgcnVubmluZy5cbiAgICAgKlxuICAgICAqIEBkZWZhdWx0IFwiRGlzY29yZGVub1wiXG4gICAgICovXG4gICAgZGV2aWNlOiBzdHJpbmc7XG4gIH07XG4gIC8qKiBCb3QgdG9rZW4gd2hpY2ggaXMgdXNlZCB0byBjb25uZWN0IHRvIERpc2NvcmQgKi9cbiAgdG9rZW46IHN0cmluZztcbiAgLyoqIFRoZSBVUkwgb2YgdGhlIGdhdGV3YXkgd2hpY2ggc2hvdWxkIGJlIGNvbm5lY3RlZCB0by5cbiAgICpcbiAgICogQGRlZmF1bHQgXCJ3c3M6Ly9nYXRld2F5LmRpc2NvcmQuZ2dcIlxuICAgKi9cbiAgdXJsOiBzdHJpbmc7XG4gIC8qKiBUaGUgZ2F0ZXdheSB2ZXJzaW9uIHdoaWNoIHNob3VsZCBiZSB1c2VkLlxuICAgKlxuICAgKiBAZGVmYXVsdCAxMFxuICAgKi9cbiAgdmVyc2lvbjogbnVtYmVyO1xuICAvKipcbiAgICogVGhlIHRvdGFsIG51bWJlciBvZiBzaGFyZHMgdG8gY29ubmVjdCB0byBhY3Jvc3MgdGhlIGVudGlyZSBib3QuXG4gICAqIEBkZWZhdWx0IDFcbiAgICovXG4gIHRvdGFsU2hhcmRzOiBudW1iZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgU2hhcmRIZWFydCB7XG4gIC8qKiBXaGV0aGVyIG9yIG5vdCB0aGUgaGVhcnRiZWF0IHdhcyBhY2tub3dsZWRnZWQgYnkgRGlzY29yZCBpbiB0aW1lLiAqL1xuICBhY2tub3dsZWRnZWQ6IGJvb2xlYW47XG4gIC8qKiBJbnRlcnZhbCBiZXR3ZWVuIGhlYXJ0YmVhdHMgcmVxdWVzdGVkIGJ5IERpc2NvcmQuICovXG4gIGludGVydmFsOiBudW1iZXI7XG4gIC8qKiBJZCBvZiB0aGUgaW50ZXJ2YWwsIHdoaWNoIGlzIHVzZWQgZm9yIHNlbmRpbmcgdGhlIGhlYXJ0YmVhdHMuICovXG4gIGludGVydmFsSWQ/OiBOb2RlSlMuVGltZW91dDtcbiAgLyoqIFVuaXggKGluIG1pbGxpc2Vjb25kcykgdGltZXN0YW1wIHdoZW4gdGhlIGxhc3QgaGVhcnRiZWF0IEFDSyB3YXMgcmVjZWl2ZWQgZnJvbSBEaXNjb3JkLiAqL1xuICBsYXN0QWNrPzogbnVtYmVyO1xuICAvKiogVW5peCB0aW1lc3RhbXAgKGluIG1pbGxpc2Vjb25kcykgd2hlbiB0aGUgbGFzdCBoZWFydGJlYXQgd2FzIHNlbnQuICovXG4gIGxhc3RCZWF0PzogbnVtYmVyO1xuICAvKiogUm91bmQgdHJpcCB0aW1lIChpbiBtaWxsaXNlY29uZHMpIGZyb20gU2hhcmQgdG8gRGlzY29yZCBhbmQgYmFjay5cbiAgICogQ2FsY3VsYXRlZCB1c2luZyB0aGUgaGVhcnRiZWF0IHN5c3RlbS5cbiAgICogTm90ZTogdGhpcyB2YWx1ZSBpcyB1bmRlZmluZWQgdW50aWwgdGhlIGZpcnN0IGhlYXJ0YmVhdCB0byBEaXNjb3JkIGhhcyBoYXBwZW5lZC5cbiAgICovXG4gIHJ0dD86IG51bWJlcjtcbiAgLyoqIElkIG9mIHRoZSB0aW1lb3V0IHdoaWNoIGlzIHVzZWQgZm9yIHNlbmRpbmcgdGhlIGZpcnN0IGhlYXJ0YmVhdCB0byBEaXNjb3JkIHNpbmNlIGl0J3MgXCJzcGVjaWFsXCIuICovXG4gIHRpbWVvdXRJZD86IE5vZGVKUy5UaW1lb3V0O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFNoYXJkRXZlbnRzIHtcbiAgLyoqIEEgaGVhcnRiZWF0IGhhcyBiZWVuIHNlbmQuICovXG4gIGhlYXJ0YmVhdD86IChzaGFyZDogU2hhcmQpID0+IHVua25vd247XG4gIC8qKiBBIGhlYXJ0YmVhdCBBQ0sgd2FzIHJlY2VpdmVkLiAqL1xuICBoZWFydGJlYXRBY2s/OiAoc2hhcmQ6IFNoYXJkKSA9PiB1bmtub3duO1xuICAvKiogU2hhcmQgaGFzIHJlY2VpdmVkIGEgSGVsbG8gcGF5bG9hZC4gKi9cbiAgaGVsbG8/OiAoc2hhcmQ6IFNoYXJkKSA9PiB1bmtub3duO1xuICAvKiogVGhlIFNoYXJkcyBzZXNzaW9uIGhhcyBiZWVuIGludmFsaWRhdGVkLiAqL1xuICBpbnZhbGlkU2Vzc2lvbj86IChzaGFyZDogU2hhcmQsIHJlc3VtYWJsZTogYm9vbGVhbikgPT4gdW5rbm93bjtcbiAgLyoqIFRoZSBzaGFyZCBoYXMgc3RhcnRlZCBhIHJlc3VtZSBhY3Rpb24uICovXG4gIHJlc3VtaW5nPzogKHNoYXJkOiBTaGFyZCkgPT4gdW5rbm93bjtcbiAgLyoqIFRoZSBzaGFyZCBoYXMgc3VjY2Vzc2Z1bGx5IHJlc3VtZWQgYW4gb2xkIHNlc3Npb24uICovXG4gIHJlc3VtZWQ/OiAoc2hhcmQ6IFNoYXJkKSA9PiB1bmtub3duO1xuICAvKiogRGlzY29yZCBoYXMgcmVxdWVzdGVkIHRoZSBTaGFyZCB0byByZWNvbm5lY3QuICovXG4gIHJlcXVlc3RlZFJlY29ubmVjdD86IChzaGFyZDogU2hhcmQpID0+IHVua25vd247XG4gIC8qKiBUaGUgc2hhcmQgc3RhcnRlZCB0byBjb25uZWN0IHRvIERpc2NvcmQncyBnYXRld2F5LiAqL1xuICBjb25uZWN0aW5nPzogKHNoYXJkOiBTaGFyZCkgPT4gdW5rbm93bjtcbiAgLyoqIFRoZSBzaGFyZCBpcyBjb25uZWN0ZWQgd2l0aCBEaXNjb3JkJ3MgZ2F0ZXdheS4gKi9cbiAgY29ubmVjdGVkPzogKHNoYXJkOiBTaGFyZCkgPT4gdW5rbm93bjtcbiAgLyoqIFRoZSBzaGFyZCBoYXMgYmVlbiBkaXNjb25uZWN0ZWQgZnJvbSBEaXNjb3JkJ3MgZ2F0ZXdheS4gKi9cbiAgZGlzY29ubmVjdGVkPzogKHNoYXJkOiBTaGFyZCkgPT4gdW5rbm93bjtcbiAgLyoqIFRoZSBzaGFyZCBoYXMgc3RhcnRlZCB0byBpZGVudGlmeSBpdHNlbGYgdG8gRGlzY29yZC4gKi9cbiAgaWRlbnRpZnlpbmc/OiAoc2hhcmQ6IFNoYXJkKSA9PiB1bmtub3duO1xuICAvKiogVGhlIHNoYXJkIGhhcyBzdWNjZXNzZnVsbHkgYmVlbiBpZGVudGlmaWVkIGl0c2VsZiB3aXRoIERpc2NvcmQuICovXG4gIHJlYWR5PzogKHNoYXJkOiBTaGFyZCkgPT4gdW5rbm93bjtcbiAgLyoqIFRoZSBzaGFyZCBoYXMgcmVjZWl2ZWQgYSBtZXNzYWdlIGZyb20gRGlzY29yZC4gKi9cbiAgbWVzc2FnZT86IChzaGFyZDogU2hhcmQsIHBheWxvYWQ6IERpc2NvcmRHYXRld2F5UGF5bG9hZCkgPT4gdW5rbm93bjtcbn1cblxuZXhwb3J0IGVudW0gU2hhcmRTb2NrZXRDbG9zZUNvZGVzIHtcbiAgLyoqIEEgcmVndWxhciBTaGFyZCBzaHV0ZG93bi4gKi9cbiAgU2h1dGRvd24gPSAzMDAwLFxuICAvKiogQSByZXN1bWUgaGFzIGJlZW4gcmVxdWVzdGVkIGFuZCB0aGVyZWZvcmUgdGhlIG9sZCBjb25uZWN0aW9uIG5lZWRzIHRvIGJlIGNsb3NlZC4gKi9cbiAgUmVzdW1lQ2xvc2luZ09sZENvbm5lY3Rpb24gPSAzMDI0LFxuICAvKipcbiAgICogRGlkIG5vdCByZWNlaXZlIGEgaGVhcnRiZWF0IEFDSyBpbiB0aW1lLlxuICAgKiBDbG9zaW5nIHRoZSBzaGFyZCBhbmQgY3JlYXRpbmcgYSBuZXcgc2Vzc2lvbi5cbiAgICovXG4gIFpvbWJpZWRDb25uZWN0aW9uID0gMzAxMCxcbiAgLyoqIERpc2NvcmRlbm8ncyBnYXRld2F5IHRlc3RzIGhhZSBiZWVuIGZpbmlzaGVkLCB0aGVyZWZvcmUgdGhlIFNoYXJkIGNhbiBiZSB0dXJuZWQgb2ZmLiAqL1xuICBUZXN0aW5nRmluaXNoZWQgPSAzMDY0LFxuICAvKiogU3BlY2lhbCBjbG9zZSBjb2RlIHJlc2VydmVkIGZvciBEaXNjb3JkZW5vJ3MgemVyby1kb3dudGltZSByZXNoYXJkaW5nIHN5c3RlbS4gKi9cbiAgUmVzaGFyZGVkID0gMzA2NSxcbiAgLyoqIFNoYXJkIGlzIHJlLWlkZW50aWZ5aW5nIHRoZXJlZm9yZSB0aGUgb2xkIGNvbm5lY3Rpb24gbmVlZHMgdG8gYmUgY2xvc2VkLiAqL1xuICBSZUlkZW50aWZ5aW5nID0gMzA2Nixcbn1cblxuZXhwb3J0IGludGVyZmFjZSBTaGFyZFNvY2tldFJlcXVlc3Qge1xuICAvKiogVGhlIE9QLUNvZGUgZm9yIHRoZSBwYXlsb2FkIHRvIHNlbmQuICovXG4gIG9wOiBHYXRld2F5T3Bjb2RlcztcbiAgLyoqIFBheWxvYWQgZGF0YS4gKi9cbiAgZDogdW5rbm93bjtcbn1cblxuLyoqIGh0dHBzOi8vZGlzY29yZC5jb20vZGV2ZWxvcGVycy9kb2NzL3RvcGljcy9nYXRld2F5I3VwZGF0ZS12b2ljZS1zdGF0ZSAqL1xuZXhwb3J0IGludGVyZmFjZSBVcGRhdGVWb2ljZVN0YXRlIHtcbiAgLyoqIGlkIG9mIHRoZSBndWlsZCAqL1xuICBndWlsZElkOiBzdHJpbmc7XG4gIC8qKiBpZCBvZiB0aGUgdm9pY2UgY2hhbm5lbCBjbGllbnQgd2FudHMgdG8gam9pbiAobnVsbCBpZiBkaXNjb25uZWN0aW5nKSAqL1xuICBjaGFubmVsSWQ6IHN0cmluZyB8IG51bGw7XG4gIC8qKiBJcyB0aGUgY2xpZW50IG11dGVkICovXG4gIHNlbGZNdXRlOiBib29sZWFuO1xuICAvKiogSXMgdGhlIGNsaWVudCBkZWFmZW5lZCAqL1xuICBzZWxmRGVhZjogYm9vbGVhbjtcbn1cbiJdLCJuYW1lcyI6WyJTaGFyZFN0YXRlIiwiVHJhbnNwb3J0Q29tcHJlc3Npb24iLCJTaGFyZFNvY2tldENsb3NlQ29kZXMiXSwibWFwcGluZ3MiOiJBQUdBLE9BQU8sSUFBQSxBQUFLQSxvQ0FBQUE7SUFDViwrRUFBK0U7SUFFL0UsMkhBQTJIO0lBRTNILHVFQUF1RTtJQUV2RSwrSEFBK0g7SUFFL0gsMEVBQTBFO0lBRTFFLDBEQUEwRDtJQUUxRCxrSEFBa0g7V0FieEdBO01BZVg7QUFFRCxPQUFPLElBQUEsQUFBS0MsOENBQUFBO0lBQ1Y7Ozs7Ozs7R0FPQztJQUVEOzs7Ozs7Ozs7R0FTQztXQW5CU0E7TUFxQlg7QUFpSEQsT0FBTyxJQUFBLEFBQUtDLCtDQUFBQTtJQUNWLDhCQUE4QjtJQUU5QixxRkFBcUY7SUFFckY7OztHQUdDO0lBRUQseUZBQXlGO0lBRXpGLGtGQUFrRjtJQUVsRiw2RUFBNkU7V0FkbkVBO01BZ0JYIn0=
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@discordeno/gateway",
|
|
3
|
-
"version": "22.0.1-next.
|
|
3
|
+
"version": "22.0.1-next.f2e8d7e",
|
|
4
4
|
"exports": "./dist/index.js",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"license": "Apache-2.0",
|
|
@@ -13,42 +13,40 @@
|
|
|
13
13
|
"!dist/.tsbuildinfo"
|
|
14
14
|
],
|
|
15
15
|
"scripts": {
|
|
16
|
-
"build": "swc src --strip-leading-paths
|
|
16
|
+
"build": "swc src --strip-leading-paths src --out-dir dist",
|
|
17
17
|
"build:type": "tsc --declaration --emitDeclarationOnly --declarationDir dist",
|
|
18
18
|
"release-build": "yarn build && yarn build:type",
|
|
19
19
|
"check": "biome check --write",
|
|
20
|
-
"test:unit
|
|
21
|
-
"test:unit": "
|
|
22
|
-
"test:unit
|
|
23
|
-
"test:
|
|
24
|
-
"test:
|
|
25
|
-
"test:
|
|
26
|
-
"test:type": "tsc --noEmit",
|
|
27
|
-
"test:test-type": "tsc --project tests/tsconfig.json"
|
|
20
|
+
"test:unit": "c8 -r lcov mocha 'tests/unit/**/*.spec.ts' && node ../../scripts/coveragePathFixing.js gateway",
|
|
21
|
+
"test:deno-unit": "deno -A npm:mocha 'tests/unit/**/*.spec.ts'",
|
|
22
|
+
"test:bun-unit": "bun --bun mocha 'tests/unit/**/*.spec.ts'",
|
|
23
|
+
"test:integration": "c8 -r lcov mocha -t 15000 'tests/integration/**/*.spec.ts' && node ../../scripts/coveragePathFixing.js gateway",
|
|
24
|
+
"test:test-type": "tsc --project tests/tsconfig.json",
|
|
25
|
+
"test:type": "tsc --noEmit"
|
|
28
26
|
},
|
|
29
27
|
"dependencies": {
|
|
30
|
-
"@discordeno/types": "22.0.1-next.
|
|
31
|
-
"@discordeno/utils": "22.0.1-next.
|
|
32
|
-
"ws": "^8.
|
|
28
|
+
"@discordeno/types": "22.0.1-next.f2e8d7e",
|
|
29
|
+
"@discordeno/utils": "22.0.1-next.f2e8d7e",
|
|
30
|
+
"ws": "^8.19.0"
|
|
33
31
|
},
|
|
34
32
|
"optionalDependencies": {
|
|
35
33
|
"fzstd": "^0.1.1"
|
|
36
34
|
},
|
|
37
35
|
"devDependencies": {
|
|
38
|
-
"@biomejs/biome": "2.
|
|
39
|
-
"@swc/cli": "^0.7.
|
|
40
|
-
"@swc/core": "^1.
|
|
41
|
-
"@types/chai": "^5.2.
|
|
36
|
+
"@biomejs/biome": "2.3.13",
|
|
37
|
+
"@swc/cli": "^0.7.10",
|
|
38
|
+
"@swc/core": "^1.15.10",
|
|
39
|
+
"@types/chai": "^5.2.3",
|
|
42
40
|
"@types/mocha": "^10.0.10",
|
|
43
|
-
"@types/node": "^
|
|
44
|
-
"@types/sinon": "^
|
|
41
|
+
"@types/node": "^25.0.10",
|
|
42
|
+
"@types/sinon": "^21.0.0",
|
|
45
43
|
"@types/ws": "^8.18.1",
|
|
46
44
|
"c8": "^10.1.3",
|
|
47
|
-
"chai": "^
|
|
48
|
-
"mocha": "
|
|
49
|
-
"sinon": "^21.0.
|
|
45
|
+
"chai": "^6.2.2",
|
|
46
|
+
"mocha": "^11.7.5",
|
|
47
|
+
"sinon": "^21.0.1",
|
|
50
48
|
"ts-node": "^10.9.2",
|
|
51
49
|
"tsconfig": "*",
|
|
52
|
-
"typescript": "^5.9.
|
|
50
|
+
"typescript": "^5.9.3"
|
|
53
51
|
}
|
|
54
52
|
}
|