@discordeno/gateway 22.0.1-next.c7074d7 → 22.0.1-next.dea32e8

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 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
- * @internal
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
- * @internal
61
+ * @private
62
62
  * This is for internal purposes only, and subject to breaking changes.
63
63
  */
64
64
  resolveAfterClose?: (close: CloseEvent) => void;
package/dist/Shard.js CHANGED
@@ -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
- * @internal
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();
@@ -662,4 +662,4 @@ export class DiscordenoShard {
662
662
  }
663
663
  export default DiscordenoShard;
664
664
 
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+XG59XG5cbmV4cG9ydCBkZWZhdWx0IERpc2NvcmRlbm9TaGFyZFxuIl0sIm5hbWVzIjpbIkJ1ZmZlciIsInpsaWIiLCJHYXRld2F5Q2xvc2VFdmVudENvZGVzIiwiR2F0ZXdheU9wY29kZXMiLCJjYW1lbGl6ZSIsImRlbGF5IiwiTGVha3lCdWNrZXQiLCJsb2dnZXIiLCJOb2RlV2ViU29ja2V0IiwiU2hhcmRTb2NrZXRDbG9zZUNvZGVzIiwiU2hhcmRTdGF0ZSIsIlRyYW5zcG9ydENvbXByZXNzaW9uIiwiWkxJQl9TWU5DX0ZMVVNIIiwiVWludDhBcnJheSIsImZ6c3RkIiwiZ2V0RlpTdGQiLCJEaXNjb3JkZW5vU2hhcmQiLCJvcHRpb25zIiwibWF4UmVxdWVzdHNQZXJSYXRlTGltaXRUaWNrIiwicHJldmlvdXNTZXF1ZW5jZU51bWJlciIsInJhdGVMaW1pdFJlc2V0SW50ZXJ2YWwiLCJzdGF0ZSIsIk9mZmxpbmUiLCJyZXN1bWVHYXRld2F5VXJsIiwiZXZlbnRzIiwib2ZmbGluZVNlbmRRdWV1ZSIsInJlc29sdmVzIiwiTWFwIiwiZ29pbmdPZmZsaW5lIiwidGV4dERlY29kZXIiLCJUZXh0RGVjb2RlciIsImluZmxhdGVCdWZmZXIiLCJkZWNvbXByZXNzaW9uUHJvbWlzZXNRdWV1ZSIsImlkIiwiY29ubmVjdGlvbiIsImhlYXJ0IiwiYWNrbm93bGVkZ2VkIiwiaW50ZXJ2YWwiLCJyZXF1ZXN0SWRlbnRpZnkiLCJtYWtlUHJlc2VuY2UiLCJidWNrZXQiLCJtYXgiLCJjYWxjdWxhdGVTYWZlUmVxdWVzdHMiLCJyZWZpbGxBbW91bnQiLCJyZWZpbGxJbnRlcnZhbCIsImdhdGV3YXlDb25maWciLCJjb25uZWN0aW9uVXJsIiwidXJsIiwic2FmZVJlcXVlc3RzIiwiTWF0aCIsImNlaWwiLCJjaGVja09mZmxpbmUiLCJoaWdoUHJpb3JpdHkiLCJpc09wZW4iLCJQcm9taXNlIiwicmVzb2x2ZSIsInVuc2hpZnQiLCJwdXNoIiwiY2xvc2UiLCJjb2RlIiwicmVhc29uIiwiZGVidWciLCJzb2NrZXQiLCJyZWFkeVN0YXRlIiwiT1BFTiIsIk5vcm1hbENsb3N1cmUiLCJHb2luZ0F3YXkiLCJwcm9taXNlIiwicmVzb2x2ZUFmdGVyQ2xvc2UiLCJ1bmRlZmluZWQiLCJjb25uZWN0IiwiSWRlbnRpZnlpbmciLCJSZXN1bWluZyIsImluY2x1ZGVzIiwiQ29ubmVjdGluZyIsImNvbm5lY3RpbmciLCJVUkwiLCJzZWFyY2hQYXJhbXMiLCJzZXQiLCJ2ZXJzaW9uIiwidG9TdHJpbmciLCJ0cmFuc3BvcnRDb21wcmVzc2lvbiIsImluZmxhdGUiLCJjcmVhdGVJbmZsYXRlIiwiZmluaXNoRmx1c2giLCJjb25zdGFudHMiLCJaX1NZTkNfRkxVU0giLCJjaHVua1NpemUiLCJvbiIsImUiLCJlcnJvciIsImRhdGEiLCJuZXdCdWZmZXIiLCJieXRlTGVuZ3RoIiwienN0ZCIsImNyZWF0ZVpzdGREZWNvbXByZXNzIiwiY2F0Y2giLCJ3YXJuIiwiZGVsZXRlIiwienN0ZERlY29tcHJlc3MiLCJEZWNvbXByZXNzIiwiZGVjb2RlZERhdGEiLCJkZWNvZGUiLCJwYXJzZWREYXRhIiwiSlNPTiIsInBhcnNlIiwic2hpZnQiLCJjb21wcmVzcyIsInNob3VsZFVzZUJ1aWx0aW4iLCJSZWZsZWN0IiwiaGFzIiwiZ2xvYmFsVGhpcyIsIldlYlNvY2tldCIsImJpbmFyeVR5cGUiLCJvbmVycm9yIiwiZXZlbnQiLCJoYW5kbGVFcnJvciIsIm9uY2xvc2UiLCJjbG9zZUV2ZW50IiwiaGFuZGxlQ2xvc2UiLCJvbm1lc3NhZ2UiLCJtZXNzYWdlRXZlbnQiLCJoYW5kbGVNZXNzYWdlIiwib25vcGVuIiwiVW5pZGVudGlmaWVkIiwiY29ubmVjdGVkIiwiaWRlbnRpZnkiLCJieXBhc3NSZXF1ZXN0IiwiUmVJZGVudGlmeWluZyIsImlkZW50aWZ5aW5nIiwic2VuZCIsIm9wIiwiSWRlbnRpZnkiLCJkIiwidG9rZW4iLCJwcm9wZXJ0aWVzIiwiaW50ZW50cyIsInNoYXJkIiwidG90YWxTaGFyZHMiLCJwcmVzZW5jZSIsInJlc3VtZSIsIlJlc3VtZUNsb3NpbmdPbGRDb25uZWN0aW9uIiwic2Vzc2lvbklkIiwiUmVzdW1lIiwic2Vzc2lvbl9pZCIsInNlcSIsIm1lc3NhZ2UiLCJhY3F1aXJlIiwic3RyaW5naWZ5Iiwic2h1dGRvd24iLCJTaHV0ZG93biIsInN0b3BIZWFydGJlYXRpbmciLCJUZXN0aW5nRmluaXNoZWQiLCJkaXNjb25uZWN0ZWQiLCJSZXNoYXJkZWQiLCJEaXNjb25uZWN0ZWQiLCJBdXRoZW50aWNhdGlvbkZhaWxlZCIsIkludmFsaWRTaGFyZCIsIlNoYXJkaW5nUmVxdWlyZWQiLCJJbnZhbGlkQXBpVmVyc2lvbiIsIkludmFsaWRJbnRlbnRzIiwiRGlzYWxsb3dlZEludGVudHMiLCJFcnJvciIsIk5vdEF1dGhlbnRpY2F0ZWQiLCJJbnZhbGlkU2VxIiwiU2Vzc2lvblRpbWVkT3V0IiwiVW5rbm93bkVycm9yIiwiVW5rbm93bk9wY29kZSIsIkRlY29kZUVycm9yIiwiUmF0ZUxpbWl0ZWQiLCJBbHJlYWR5QXV0aGVudGljYXRlZCIsImlzQ29tcHJlc3NlZCIsIkFycmF5QnVmZmVyIiwiZGVjb21wcmVzc1BhY2tldCIsImhhbmRsZURpc2NvcmRQYWNrZXQiLCJjb21wcmVzc2VkRGF0YSIsImZhdGFsIiwid3JpdGVQcm9taXNlIiwicmVqZWN0Iiwid3JpdGUiLCJlbmRzV2l0aE1hcmtlciIsImRlY29tcHJlc3Npb25Qcm9taXNlIiwiciIsImRlY29tcHJlc3MiLCJkZWNvbXByZXNzZWQiLCJpbmZsYXRlU3luYyIsInBhY2tldCIsImxhc3RBY2siLCJEYXRlIiwibm93IiwiSGVhcnRiZWF0IiwibGFzdEJlYXQiLCJoZWFydGJlYXQiLCJIZWxsbyIsImhlYXJ0YmVhdF9pbnRlcnZhbCIsInN0YXJ0SGVhcnRiZWF0aW5nIiwiY3VycmVudFF1ZXVlIiwicXVldWUiLCJoZWxsbyIsIkhlYXJ0YmVhdEFDSyIsInJ0dCIsImhlYXJ0YmVhdEFjayIsIlJlY29ubmVjdCIsInJlcXVlc3RlZFJlY29ubmVjdCIsIkludmFsaWRTZXNzaW9uIiwicmVzdW1hYmxlIiwiaW52YWxpZFNlc3Npb24iLCJmbG9vciIsInJhbmRvbSIsImdldCIsInQiLCJDb25uZWN0ZWQiLCJyZXN1bWVkIiwiZm9yRWFjaCIsImxlbmd0aCIsInBheWxvYWQiLCJyZWFkeSIsInJlc3VtZV9nYXRld2F5X3VybCIsInMiLCJmb3J3YXJkVG9Cb3QiLCJqaXR0ZXIiLCJ0aW1lb3V0SWQiLCJzZXRUaW1lb3V0IiwiaW50ZXJ2YWxJZCIsInNldEludGVydmFsIiwiWm9tYmllZENvbm5lY3Rpb24iLCJjbGVhckludGVydmFsIiwiY2xlYXJUaW1lb3V0IiwiYnVmZmVyIiwibWFya2VyIiwiaSJdLCJtYXBwaW5ncyI6IkFBQUEsU0FBU0EsTUFBTSxRQUFRLGNBQWE7QUFDcEMsT0FBT0MsVUFBVSxZQUFXO0FBRTVCLFNBQVNDLHNCQUFzQixFQUFFQyxjQUFjLFFBQVEsb0JBQW1CO0FBQzFFLFNBQVNDLFFBQVEsRUFBRUMsS0FBSyxFQUFFQyxXQUFXLEVBQUVDLE1BQU0sUUFBUSxvQkFBbUI7QUFFeEUsT0FBT0MsbUJBQW1CLEtBQUk7QUFDOUIsU0FJRUMscUJBQXFCLEVBRXJCQyxVQUFVLEVBQ1ZDLG9CQUFvQixRQUNmLGFBQVk7QUFFbkIsTUFBTUMsa0JBQWtCLElBQUlDLFdBQVc7SUFBQztJQUFLO0lBQUs7SUFBTTtDQUFLO0FBRTdELElBQUlDO0FBRUosd0VBQXdFLEdBQ3hFLGVBQWVDO0lBQ2IsT0FBUUQsVUFBVSxNQUFNLE1BQU0sQ0FBQztBQUNqQztBQUVBLE9BQU8sTUFBTUU7SUEyRFgsWUFBWUMsT0FBMkIsQ0FBRTtRQXBEekMsMEhBQTBILFFBQzFIQyw4QkFBc0M7UUFDdEMsMENBQTBDLFFBQzFDQyx5QkFBd0M7UUFDeEMsNEVBQTRFLFFBQzVFQyx5QkFBaUM7UUFLakMsd0NBQXdDLFFBQ3hDQyxRQUFRWCxXQUFXWSxPQUFPO1FBQzFCLGlGQUFpRixRQUNqRkMsbUJBQTJCO1FBQzNCLHNDQUFzQyxRQUN0Q0MsU0FBc0IsQ0FBQztRQUN2QixtR0FBbUcsUUFDbkdDLG1CQUFtQyxFQUFFO1FBQ3JDLGlGQUFpRixRQUNqRkMsV0FBVyxJQUFJQztRQUtmOzs7Ozs7OztHQVFDLFFBQ0RDLGVBQWU7UUFDZiwrQ0FBK0MsUUFDL0NDLGNBQWMsSUFBSUM7UUFHbEIseUJBQXlCLFFBQ3pCQyxnQkFBbUM7UUFHbkMsc0RBQXNE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
665
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9TaGFyZC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBCdWZmZXIgfSBmcm9tICdub2RlOmJ1ZmZlcidcbmltcG9ydCB6bGliIGZyb20gJ25vZGU6emxpYidcbmltcG9ydCB0eXBlIHsgRGlzY29yZEdhdGV3YXlQYXlsb2FkLCBEaXNjb3JkSGVsbG8sIERpc2NvcmRSZWFkeSwgRGlzY29yZFVwZGF0ZVByZXNlbmNlIH0gZnJvbSAnQGRpc2NvcmRlbm8vdHlwZXMnXG5pbXBvcnQgeyBHYXRld2F5Q2xvc2VFdmVudENvZGVzLCBHYXRld2F5T3Bjb2RlcyB9IGZyb20gJ0BkaXNjb3JkZW5vL3R5cGVzJ1xuaW1wb3J0IHsgY2FtZWxpemUsIGRlbGF5LCBMZWFreUJ1Y2tldCwgbG9nZ2VyIH0gZnJvbSAnQGRpc2NvcmRlbm8vdXRpbHMnXG5pbXBvcnQgdHlwZSB7IERlY29tcHJlc3MgYXMgRlpzdGREZWNvbXByZXNzIH0gZnJvbSAnZnpzdGQnXG5pbXBvcnQgTm9kZVdlYlNvY2tldCBmcm9tICd3cydcbmltcG9ydCB7XG4gIHR5cGUgU2hhcmRFdmVudHMsXG4gIHR5cGUgU2hhcmRHYXRld2F5Q29uZmlnLFxuICB0eXBlIFNoYXJkSGVhcnQsXG4gIFNoYXJkU29ja2V0Q2xvc2VDb2RlcyxcbiAgdHlwZSBTaGFyZFNvY2tldFJlcXVlc3QsXG4gIFNoYXJkU3RhdGUsXG4gIFRyYW5zcG9ydENvbXByZXNzaW9uLFxufSBmcm9tICcuL3R5cGVzLmpzJ1xuXG5jb25zdCBaTElCX1NZTkNfRkxVU0ggPSBuZXcgVWludDhBcnJheShbMHgwLCAweDAsIDB4ZmYsIDB4ZmZdKVxuXG5sZXQgZnpzdGQ6IHR5cGVvZiBpbXBvcnQoJ2Z6c3RkJylcblxuLyoqIFNpbmNlIGZ6c3RkIGlzIGFuIG9wdGlvbmFsIGRlcGVuZGVuY3ksIHdlIG5lZWQgdG8gaW1wb3J0IGl0IGxhemlseS4gKi9cbmFzeW5jIGZ1bmN0aW9uIGdldEZaU3RkKCkge1xuICByZXR1cm4gKGZ6c3RkID8/PSBhd2FpdCBpbXBvcnQoJ2Z6c3RkJykpXG59XG5cbmV4cG9ydCBjbGFzcyBEaXNjb3JkZW5vU2hhcmQge1xuICAvKiogVGhlIGlkIG9mIHRoZSBzaGFyZC4gKi9cbiAgaWQ6IG51bWJlclxuICAvKiogVGhlIGNvbm5lY3Rpb24gY29uZmlnIGRldGFpbHMgdGhhdCB0aGlzIHNoYXJkIHdpbGwgdXNlZCB0byBjb25uZWN0IHRvIGRpc2NvcmQuICovXG4gIGNvbm5lY3Rpb246IFNoYXJkR2F0ZXdheUNvbmZpZ1xuICAvKiogVGhpcyBjb250YWlucyBhbGwgdGhlIGhlYXJ0YmVhdCBpbmZvcm1hdGlvbiAqL1xuICBoZWFydDogU2hhcmRIZWFydFxuICAvKiogVGhlIG1heGltdW0gb2YgcmVxdWVzdHMgd2hpY2ggY2FuIGJlIHNlbmQgdG8gZGlzY29yZCBwZXIgcmF0ZSBsaW1pdCB0aWNrLiBUeXBpY2FsbHkgdGhpcyB2YWx1ZSBzaG91bGQgbm90IGJlIGNoYW5nZWQuICovXG4gIG1heFJlcXVlc3RzUGVyUmF0ZUxpbWl0VGljazogbnVtYmVyID0gMTIwXG4gIC8qKiBUaGUgcHJldmlvdXMgcGF5bG9hZCBzZXF1ZW5jZSBudW1iZXIuICovXG4gIHByZXZpb3VzU2VxdWVuY2VOdW1iZXI6IG51bWJlciB8IG51bGwgPSBudWxsXG4gIC8qKiBJbiB3aGljaCBpbnRlcnZhbCAoaW4gbWlsbGlzZWNvbmRzKSB0aGUgZ2F0ZXdheSByZXNldHMgaXQncyByYXRlIGxpbWl0LiAqL1xuICByYXRlTGltaXRSZXNldEludGVydmFsOiBudW1iZXIgPSA2MDAwMFxuICAvKiogQ3VycmVudCBzZXNzaW9uIGlkIG9mIHRoZSBzaGFyZCBpZiBwcmVzZW50LiAqL1xuICBzZXNzaW9uSWQ/OiBzdHJpbmdcbiAgLyoqIFRoaXMgY29udGFpbnMgdGhlIFdlYlNvY2tldCBjb25uZWN0aW9uIHRvIERpc2NvcmQsIGlmIGN1cnJlbnRseSBjb25uZWN0ZWQuICovXG4gIHNvY2tldD86IFdlYlNvY2tldFxuICAvKiogQ3VycmVudCBpbnRlcm5hbCBzdGF0ZSBvZiB0aGUgdGhpcy4gKi9cbiAgc3RhdGUgPSBTaGFyZFN0YXRlLk9mZmxpbmVcbiAgLyoqIFRoZSB1cmwgcHJvdmlkZWQgYnkgZGlzY29yZCB0byB1c2Ugd2hlbiByZXN1bWluZyBhIGNvbm5lY3Rpb24gZm9yIHRoaXMgdGhpcy4gKi9cbiAgcmVzdW1lR2F0ZXdheVVybDogc3RyaW5nID0gJydcbiAgLyoqIFRoZSBzaGFyZCByZWxhdGVkIGV2ZW50IGhhbmRsZXJzLiAqL1xuICBldmVudHM6IFNoYXJkRXZlbnRzID0ge31cbiAgLyoqIENhY2hlIGZvciBwZW5kaW5nIGdhdGV3YXkgcmVxdWVzdHMgd2hpY2ggc2hvdWxkIGhhdmUgYmVlbiBzZW5kIHdoaWxlIHRoZSBnYXRld2F5IHdlbnQgb2ZmbGluZS4gKi9cbiAgb2ZmbGluZVNlbmRRdWV1ZTogKCgpID0+IHZvaWQpW10gPSBbXVxuICAvKiogUmVzb2x2ZSBpbnRlcm5hbCB3YWl0aW5nIHN0YXRlcy4gTWFwcGVkIGJ5IFNlbGVjdGVkRXZlbnRzID0+IFJlc29sdmVGdW5jdGlvbiAqL1xuICByZXNvbHZlcyA9IG5ldyBNYXA8J1JFQURZJyB8ICdSRVNVTUVEJyB8ICdJTlZBTElEX1NFU1NJT04nLCAocGF5bG9hZDogRGlzY29yZEdhdGV3YXlQYXlsb2FkKSA9PiB2b2lkPigpXG4gIC8qKiBTaGFyZCBidWNrZXQuIE9ubHkgYWNjZXNzIHRoaXMgaWYgeW91IGtub3cgd2hhdCB5b3UgYXJlIGRvaW5nLiBCdWNrZXQgZm9yIGhhbmRsaW5nIHNoYXJkIHJlcXVlc3QgcmF0ZSBsaW1pdHMuICovXG4gIGJ1Y2tldDogTGVha3lCdWNrZXRcbiAgLyoqIExvZ2dlciBmb3IgdGhlIGJ1Y2tldC4gKi9cbiAgbG9nZ2VyOiBQaWNrPHR5cGVvZiBsb2dnZXIsICdkZWJ1ZycgfCAnaW5mbycgfCAnd2FybicgfCAnZXJyb3InIHwgJ2ZhdGFsJz5cbiAgLyoqXG4gICAqIElzIHRoZSBzaGFyZCBnb2luZyBvZmZsaW5lP1xuICAgKlxuICAgKiBAcmVtYXJrc1xuICAgKiBUaGlzIHdpbGwgYmUgdHJ1ZSBpZiB0aGUgY2xvc2UgbWV0aG9kIGhhcyBiZWVuIGNhbGxlZCB3aXRoIGVpdGhlciAxMDAwIG9yIDEwMDFcbiAgICpcbiAgICogQHByaXZhdGVcbiAgICogVGhpcyBpcyBmb3IgaW50ZXJuYWwgcHVycG9zZXMgb25seSwgYW5kIHN1YmplY3QgdG8gYnJlYWtpbmcgY2hhbmdlcy5cbiAgICovXG4gIGdvaW5nT2ZmbGluZSA9IGZhbHNlXG4gIC8qKiBUZXh0IGRlY29kZXIgdXNlZCBmb3IgY29tcHJlc3NlZCBwYXlsb2Fkcy4gKi9cbiAgdGV4dERlY29kZXIgPSBuZXcgVGV4dERlY29kZXIoKVxuICAvKiogemxpYiBJbmZsYXRlIG9yIHpzdGQgZGVjb21wcmVzcyAoZnJvbSBub2RlOnpsaWIpIGluc3RhbmNlIGZvciB0cmFuc3BvcnQgcGF5bG9hZHMuICovXG4gIGluZmxhdGU/OiB6bGliLkluZmxhdGUgfCB6bGliLlpzdGREZWNvbXByZXNzXG4gIC8qKiBaTGliIGluZmxhdGUgYnVmZmVyLiAqL1xuICBpbmZsYXRlQnVmZmVyOiBVaW50OEFycmF5IHwgbnVsbCA9IG51bGxcbiAgLyoqIFpTdGQgRGVjb21wcmVzcyBpbnN0YW5jZSBmb3IgWlN0ZC1zdHJlYW0gdHJhbnNwb3J0IHBheWxvYWRzLiAqL1xuICB6c3RkRGVjb21wcmVzcz86IEZac3RkRGVjb21wcmVzc1xuICAvKiogUXVldWUgZm9yIGNvbXByZXNzZWQgcGF5bG9hZHMgZm9yIFpzdGQgRGVjb21wcmVzcyAqL1xuICBkZWNvbXByZXNzaW9uUHJvbWlzZXNRdWV1ZTogKChkYXRhOiBEaXNjb3JkR2F0ZXdheVBheWxvYWQpID0+IHZvaWQpW10gPSBbXVxuICAvKipcbiAgICogQSBmdW5jdGlvbiB0aGF0IHdpbGwgYmUgY2FsbGVkIG9uY2UgdGhlIHNvY2tldCBpcyBjbG9zZWQgYW5kIGhhbmRsZUNsb3NlKCkgaGFzIGZpbmlzaGVkIHVwZGF0aW5nIGludGVybmFsIHN0YXRlcy5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICogVGhpcyBpcyBmb3IgaW50ZXJuYWwgcHVycG9zZXMgb25seSwgYW5kIHN1YmplY3QgdG8gYnJlYWtpbmcgY2hhbmdlcy5cbiAgICovXG4gIHJlc29sdmVBZnRlckNsb3NlPzogKGNsb3NlOiBDbG9zZUV2ZW50KSA9PiB2b2lkXG5cbiAgY29uc3RydWN0b3Iob3B0aW9uczogU2hhcmRDcmVhdGVPcHRpb25zKSB7XG4gICAgdGhpcy5pZCA9IG9wdGlvbnMuaWRcbiAgICB0aGlzLmNvbm5lY3Rpb24gPSBvcHRpb25zLmNvbm5lY3Rpb25cbiAgICB0aGlzLmV2ZW50cyA9IG9wdGlvbnMuZXZlbnRzXG4gICAgdGhpcy5sb2dnZXIgPSBvcHRpb25zLmxvZ2dlciA/PyBsb2dnZXJcblxuICAgIHRoaXMuaGVhcnQgPSB7XG4gICAgICBhY2tub3dsZWRnZWQ6IGZhbHNlLFxuICAgICAgaW50ZXJ2YWw6IDQ1MDAwLFxuICAgIH1cblxuICAgIGlmIChvcHRpb25zLnJlcXVlc3RJZGVudGlmeSkgdGhpcy5yZXF1ZXN0SWRlbnRpZnkgPSBvcHRpb25zLnJlcXVlc3RJZGVudGlmeVxuICAgIGlmIChvcHRpb25zLm1ha2VQcmVzZW5jZSkgdGhpcy5tYWtlUHJlc2VuY2UgPSBvcHRpb25zLm1ha2VQcmVzZW5jZVxuXG4gICAgdGhpcy5idWNrZXQgPSBuZXcgTGVha3lCdWNrZXQoe1xuICAgICAgbWF4OiB0aGlzLmNhbGN1bGF0ZVNhZmVSZXF1ZXN0cygpLFxuICAgICAgcmVmaWxsQW1vdW50OiB0aGlzLmNhbGN1bGF0ZVNhZmVSZXF1ZXN0cygpLFxuICAgICAgcmVmaWxsSW50ZXJ2YWw6IDYwMDAwLFxuICAgICAgbG9nZ2VyOiB0aGlzLmxvZ2dlcixcbiAgICB9KVxuICB9XG5cbiAgLyoqIFRoZSBnYXRld2F5IGNvbmZpZ3VyYXRpb24gd2hpY2ggaXMgdXNlZCB0byBjb25uZWN0IHRvIERpc2NvcmQuICovXG4gIGdldCBnYXRld2F5Q29uZmlnKCk6IFNoYXJkR2F0ZXdheUNvbmZpZyB7XG4gICAgcmV0dXJuIHRoaXMuY29ubmVjdGlvblxuICB9XG5cbiAgLyoqIFRoZSB1cmwgdG8gY29ubmVjdCB0by4gSW5pdGlhbGx5IHRoaXMgaXMgdGhlIGRpc2NvcmQgZ2F0ZXdheSB1cmwsIGFuZCB0aGVuIGlzIHN3aXRjaGVkIHRvIHJlc3VtZSBnYXRld2F5IHVybCBvbmNlIGEgUkVBRFkgaXMgcmVjZWl2ZWQuICovXG4gIGdldCBjb25uZWN0aW9uVXJsKCk6IHN0cmluZyB7XG4gICAgLy8gVXNlIHx8IGFuZCBub3QgPz8gaGVyZS4gPz8gd2lsbCBjYXVzZSBhIGJ1Zy5cbiAgICByZXR1cm4gdGhpcy5yZXN1bWVHYXRld2F5VXJsIHx8IHRoaXMuZ2F0ZXdheUNvbmZpZy51cmxcbiAgfVxuXG4gIC8qKiBDYWxjdWxhdGUgdGhlIGFtb3VudCBvZiByZXF1ZXN0cyB3aGljaCBjYW4gc2FmZWx5IGJlIG1hZGUgcGVyIHJhdGUgbGltaXQgaW50ZXJ2YWwsIGJlZm9yZSB0aGUgZ2F0ZXdheSBnZXRzIGRpc2Nvbm5lY3RlZCBkdWUgdG8gYW4gZXhjZWVkZWQgcmF0ZSBsaW1pdC4gKi9cbiAgY2FsY3VsYXRlU2FmZVJlcXVlc3RzKCk6IG51bWJlciB7XG4gICAgLy8gKiAyIGFkZHMgZXh0cmEgc2FmZXR5IGxheWVyIGZvciBkaXNjb3JkcyBPUCAxIHJlcXVlc3RzIHRoYXQgd2UgbmVlZCB0byByZXNwb25kIHRvXG4gICAgY29uc3Qgc2FmZVJlcXVlc3RzID0gdGhpcy5tYXhSZXF1ZXN0c1BlclJhdGVMaW1pdFRpY2sgLSBNYXRoLmNlaWwodGhpcy5yYXRlTGltaXRSZXNldEludGVydmFsIC8gdGhpcy5oZWFydC5pbnRlcnZhbCkgKiAyXG5cbiAgICByZXR1cm4gc2FmZVJlcXVlc3RzIDwgMCA/IDAgOiBzYWZlUmVxdWVzdHNcbiAgfVxuXG4gIGFzeW5jIGNoZWNrT2ZmbGluZShoaWdoUHJpb3JpdHk6IGJvb2xlYW4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAodGhpcy5pc09wZW4oKSkgcmV0dXJuXG5cbiAgICByZXR1cm4gYXdhaXQgbmV3IFByb21pc2U8dm9pZD4oKHJlc29sdmUpID0+IHtcbiAgICAgIC8vIEhpZ2hlciBwcmlvcml0eSByZXF1ZXN0cyBnZXQgYWRkZWQgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgYXJyYXkuXG4gICAgICBpZiAoaGlnaFByaW9yaXR5KSB0aGlzLm9mZmxpbmVTZW5kUXVldWUudW5zaGlmdChyZXNvbHZlKVxuICAgICAgZWxzZSB0aGlzLm9mZmxpbmVTZW5kUXVldWUucHVzaChyZXNvbHZlKVxuICAgIH0pXG4gIH1cblxuICAvKiogQ2xvc2UgdGhlIHNvY2tldCBjb25uZWN0aW9uIHRvIGRpc2NvcmQgaWYgcHJlc2VudC4gKi9cbiAgYXN5bmMgY2xvc2UoY29kZTogbnVtYmVyLCByZWFzb246IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICAgIHRoaXMubG9nZ2VyLmRlYnVnKGBbU2hhcmRdIFJlcXVlc3QgZm9yIFNoYXJkICMke3RoaXMuaWR9IHRvIGNsb3NlIHRoZSBzb2NrZXQgd2l0aCBjb2RlICR7Y29kZX0uYClcblxuICAgIGlmICh0aGlzLnNvY2tldD8ucmVhZHlTdGF0ZSAhPT0gTm9kZVdlYlNvY2tldC5PUEVOKSB7XG4gICAgICB0aGlzLmxvZ2dlci5kZWJ1ZyhgW1NoYXJkXSBTaGFyZCAjJHt0aGlzLmlkfSdzIHJlYWR5IHN0YXRlIGlzICR7dGhpcy5zb2NrZXQ/LnJlYWR5U3RhdGV9LCBVbmFibGUgdG8gY2xvc2UuYClcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIHRoaXMuZ29pbmdPZmZsaW5lID0gY29kZSA9PT0gR2F0ZXdheUNsb3NlRXZlbnRDb2Rlcy5Ob3JtYWxDbG9zdXJlIHx8IGNvZGUgPT09IEdhdGV3YXlDbG9zZUV2ZW50Q29kZXMuR29pbmdBd2F5XG5cbiAgICAvLyBUaGlzIGhhcyB0byBiZSBjcmVhdGVkIGJlZm9yZSB0aGUgYWN0dWFsIGNhbGwgdG8gc29ja2V0LmNsb3NlIGFzIGZvciBleGFtcGxlIEJ1biBjYWxscyBzb2NrZXQub25jbG9zZSBpbW1lZGlhdGVseSBvbiB0aGUgLmNsb3NlKCkgY2FsbCBpbnN0ZWFkIG9mIHdhaXRpbmcgZm9yIHRoZSBjb25uZWN0aW9uIHRvIGVuZFxuICAgIGNvbnN0IHByb21pc2UgPSBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuICAgICAgdGhpcy5yZXNvbHZlQWZ0ZXJDbG9zZSA9IHJlc29sdmVcbiAgICB9KVxuXG4gICAgdGhpcy5zb2NrZXQuY2xvc2UoY29kZSwgcmVhc29uKVxuXG4gICAgdGhpcy5sb2dnZXIuZGVidWcoYFtTaGFyZF0gV2FpdGluZyBmb3IgU2hhcmQgIyR7dGhpcy5pZH0gdG8gY2xvc2UgdGhlIHNvY2tldCB3aXRoIGNvZGUgJHtjb2RlfS5gKVxuXG4gICAgLy8gV2UgbmVlZCB0byB3YWl0IGZvciB0aGUgc29ja2V0IHRvIGJlIGZ1bGx5IGNsb3NlZCwgb3RoZXJ3aXNlIHRoZXJlJ2xsIGJlIHJhY2UgY29uZGl0aW9uIGlzc3VlcyBpZiB3ZSB0cnkgdG8gY29ubmVjdCBhZ2FpbiwgcmVzdWx0aW5nIGluIHVuZXhwZWN0ZWQgYmVoYXZpb3IuXG4gICAgYXdhaXQgcHJvbWlzZVxuXG4gICAgdGhpcy5sb2dnZXIuZGVidWcoYFtTaGFyZF0gU2hhcmQgIyR7dGhpcy5pZH0gY2xvc2VkIHRoZSBzb2NrZXQgd2l0aCBjb2RlICR7Y29kZX0uYClcblxuICAgIC8vIFJlc2V0IHRoZSByZXNvbHZlQWZ0ZXJDbG9zZSBmdW5jdGlvbiBhZnRlciBpdCBoYXMgYmVlbiByZXNvbHZlZC5cbiAgICB0aGlzLnJlc29sdmVBZnRlckNsb3NlID0gdW5kZWZpbmVkXG4gIH1cblxuICAvKiogQ29ubmVjdCB0aGUgc2hhcmQgd2l0aCB0aGUgZ2F0ZXdheSBhbmQgc3RhcnQgaGVhcnRiZWF0aW5nLiBUaGlzIHdpbGwgbm90IGlkZW50aWZ5IHRoZSBzaGFyZCB0byB0aGUgZ2F0ZXdheS4gKi9cbiAgYXN5bmMgY29ubmVjdCgpOiBQcm9taXNlPERpc2NvcmRlbm9TaGFyZD4ge1xuICAgIC8vIE9ubHkgc2V0IHRoZSBzaGFyZCB0byBgQ29ubmVjdGluZ2Agc3RhdGUsXG4gICAgLy8gaWYgdGhlIGNvbm5lY3Rpb24gcmVxdWVzdCBkb2VzIG5vdCBjb21lIGZyb20gYW4gaWRlbnRpZnkgb3IgcmVzdW1lIGFjdGlvbi5cbiAgICBpZiAoIVtTaGFyZFN0YXRlLklkZW50aWZ5aW5nLCBTaGFyZFN0YXRlLlJlc3VtaW5nXS5pbmNsdWRlcyh0aGlzLnN0YXRlKSkge1xuICAgICAgdGhpcy5zdGF0ZSA9IFNoYXJkU3RhdGUuQ29ubmVjdGluZ1xuICAgIH1cblxuICAgIHRoaXMubG9nZ2VyLmRlYnVnKGBbU2hhcmRdIENvbm5lY3RpbmcgU2hhcmQgIyR7dGhpcy5pZH0gc29ja2V0LmApXG5cbiAgICB0aGlzLmV2ZW50cy5jb25uZWN0aW5nPy4odGhpcylcblxuICAgIGNvbnN0IHVybCA9IG5ldyBVUkwodGhpcy5jb25uZWN0aW9uVXJsKVxuICAgIHVybC5zZWFyY2hQYXJhbXMuc2V0KCd2JywgdGhpcy5nYXRld2F5Q29uZmlnLnZlcnNpb24udG9TdHJpbmcoKSlcbiAgICB1cmwuc2VhcmNoUGFyYW1zLnNldCgnZW5jb2RpbmcnLCAnanNvbicpXG5cbiAgICAvLyBTZXQgdGhlIGNvbXByZXNzIHVybCBwYXJhbSBhbmQgaW5pdGlhbGl6ZSB0aGUgZGVjb21wcmVzc2lvbiBjb250ZXh0c1xuICAgIGlmICh0aGlzLmdhdGV3YXlDb25maWcudHJhbnNwb3J0Q29tcHJlc3Npb24pIHtcbiAgICAgIHVybC5zZWFyY2hQYXJhbXMuc2V0KCdjb21wcmVzcycsIHRoaXMuZ2F0ZXdheUNvbmZpZy50cmFuc3BvcnRDb21wcmVzc2lvbilcblxuICAgICAgaWYgKHRoaXMuZ2F0ZXdheUNvbmZpZy50cmFuc3BvcnRDb21wcmVzc2lvbiA9PT0gVHJhbnNwb3J0Q29tcHJlc3Npb24uemxpYikge1xuICAgICAgICB0aGlzLmluZmxhdGVCdWZmZXIgPSBudWxsXG4gICAgICAgIHRoaXMuaW5mbGF0ZSA9IHpsaWIuY3JlYXRlSW5mbGF0ZSh7XG4gICAgICAgICAgZmluaXNoRmx1c2g6IHpsaWIuY29uc3RhbnRzLlpfU1lOQ19GTFVTSCxcbiAgICAgICAgICBjaHVua1NpemU6IDY0ICogMTAyNCxcbiAgICAgICAgfSlcblxuICAgICAgICB0aGlzLmluZmxhdGUub24oJ2Vycm9yJywgKGUpID0+IHtcbiAgICAgICAgICB0aGlzLmxvZ2dlci5lcnJvcignVGhlIHdhcyBhbiBlcnJvciBpbiBkZWNvbXByZXNzaW5nIGEgWkxpYiBjb21wcmVzc2VkIHBheWxvYWQnLCBlKVxuICAgICAgICB9KVxuXG4gICAgICAgIHRoaXMuaW5mbGF0ZS5vbignZGF0YScsIChkYXRhKSA9PiB7XG4gICAgICAgICAgaWYgKCEoZGF0YSBpbnN0YW5jZW9mIFVpbnQ4QXJyYXkpKSByZXR1cm5cblxuICAgICAgICAgIGlmICh0aGlzLmluZmxhdGVCdWZmZXIpIHtcbiAgICAgICAgICAgIGNvbnN0IG5ld0J1ZmZlciA9IG5ldyBVaW50OEFycmF5KHRoaXMuaW5mbGF0ZUJ1ZmZlci5ieXRlTGVuZ3RoICsgZGF0YS5ieXRlTGVuZ3RoKVxuICAgICAgICAgICAgbmV3QnVmZmVyLnNldCh0aGlzLmluZmxhdGVCdWZmZXIpXG4gICAgICAgICAgICBuZXdCdWZmZXIuc2V0KGRhdGEsIHRoaXMuaW5mbGF0ZUJ1ZmZlci5ieXRlTGVuZ3RoKVxuICAgICAgICAgICAgdGhpcy5pbmZsYXRlQnVmZmVyID0gbmV3QnVmZmVyXG5cbiAgICAgICAgICAgIHJldHVyblxuICAgICAgICAgIH1cblxuICAgICAgICAgIHRoaXMuaW5mbGF0ZUJ1ZmZlciA9IGRhdGFcbiAgICAgICAgfSlcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMuZ2F0ZXdheUNvbmZpZy50cmFuc3BvcnRDb21wcmVzc2lvbiA9PT0gVHJhbnNwb3J0Q29tcHJlc3Npb24uenN0ZCkge1xuICAgICAgICBpZiAoJ2NyZWF0ZVpzdGREZWNvbXByZXNzJyBpbiB6bGliKSB7XG4gICAgICAgICAgdGhpcy5sb2dnZXIuZGVidWcoJ1tTaGFyZF0gVXNpbmcgbm9kZTp6bGliIHpzdGQgZGVjb21wcmVzc2lvbi4nKVxuXG4gICAgICAgICAgdGhpcy5pbmZsYXRlQnVmZmVyID0gbnVsbFxuICAgICAgICAgIHRoaXMuaW5mbGF0ZSA9IHpsaWIuY3JlYXRlWnN0ZERlY29tcHJlc3Moe1xuICAgICAgICAgICAgY2h1bmtTaXplOiA2NCAqIDEwMjQsXG4gICAgICAgICAgfSlcblxuICAgICAgICAgIHRoaXMuaW5mbGF0ZS5vbignZXJyb3InLCAoZSkgPT4ge1xuICAgICAgICAgICAgdGhpcy5sb2dnZXIuZXJyb3IoJ1RoZSB3YXMgYW4gZXJyb3IgaW4gZGVjb21wcmVzc2luZyBhIFpzdGQgY29tcHJlc3NlZCBwYXlsb2FkJywgZSlcbiAgICAgICAgICB9KVxuXG4gICAgICAgICAgdGhpcy5pbmZsYXRlLm9uKCdkYXRhJywgKGRhdGEpID0+IHtcbiAgICAgICAgICAgIGlmICghKGRhdGEgaW5zdGFuY2VvZiBVaW50OEFycmF5KSkgcmV0dXJuXG5cbiAgICAgICAgICAgIGlmICh0aGlzLmluZmxhdGVCdWZmZXIpIHtcbiAgICAgICAgICAgICAgY29uc3QgbmV3QnVmZmVyID0gbmV3IFVpbnQ4QXJyYXkodGhpcy5pbmZsYXRlQnVmZmVyLmJ5dGVMZW5ndGggKyBkYXRhLmJ5dGVMZW5ndGgpXG4gICAgICAgICAgICAgIG5ld0J1ZmZlci5zZXQodGhpcy5pbmZsYXRlQnVmZmVyKVxuICAgICAgICAgICAgICBuZXdCdWZmZXIuc2V0KGRhdGEsIHRoaXMuaW5mbGF0ZUJ1ZmZlci5ieXRlTGVuZ3RoKVxuICAgICAgICAgICAgICB0aGlzLmluZmxhdGVCdWZmZXIgPSBuZXdCdWZmZXJcblxuICAgICAgICAgICAgICByZXR1cm5cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5pbmZsYXRlQnVmZmVyID0gZGF0YVxuICAgICAgICAgIH0pXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc3QgZnpzdGQgPSBhd2FpdCBnZXRGWlN0ZCgpLmNhdGNoKCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMubG9nZ2VyLndhcm4oJ1tTaGFyZF0gXCJmenN0ZFwiIGlzIG5vdCBpbnN0YWxsZWQuIERpc2FibGVkIHRyYW5zcG9ydCBjb21wcmVzc2lvbi4nKVxuICAgICAgICAgICAgdXJsLnNlYXJjaFBhcmFtcy5kZWxldGUoJ2NvbXByZXNzJylcblxuICAgICAgICAgICAgcmV0dXJuIG51bGxcbiAgICAgICAgICB9KVxuXG4gICAgICAgICAgaWYgKGZ6c3RkKSB7XG4gICAgICAgICAgICB0aGlzLmxvZ2dlci5kZWJ1ZygnW1NoYXJkXSBVc2luZyBmenN0ZCB6c3RkIGRlY29tcHJlc3Npb24uJylcblxuICAgICAgICAgICAgdGhpcy56c3RkRGVjb21wcmVzcyA9IG5ldyBmenN0ZC5EZWNvbXByZXNzKChkYXRhKSA9PiB7XG4gICAgICAgICAgICAgIGNvbnN0IGRlY29kZWREYXRhID0gdGhpcy50ZXh0RGVjb2Rlci5kZWNvZGUoZGF0YSlcbiAgICAgICAgICAgICAgY29uc3QgcGFyc2VkRGF0YSA9IEpTT04ucGFyc2UoZGVjb2RlZERhdGEpXG4gICAgICAgICAgICAgIHRoaXMuZGVjb21wcmVzc2lvblByb21pc2VzUXVldWUuc2hpZnQoKT8uKHBhcnNlZERhdGEpXG4gICAgICAgICAgICB9KVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0aGlzLmdhdGV3YXlDb25maWcuY29tcHJlc3MgJiYgdGhpcy5nYXRld2F5Q29uZmlnLnRyYW5zcG9ydENvbXByZXNzaW9uKSB7XG4gICAgICB0aGlzLmxvZ2dlci53YXJuKCdbU2hhcmRdIFBheWxvYWQgY29tcHJlc3Npb24gaGFzIGJlZW4gZGlzYWJsZWQgc2luY2UgdHJhbnNwb3J0IGNvbXByZXNzaW9uIGlzIGVuYWJsZWQgYXMgd2VsbC4nKVxuICAgICAgdGhpcy5nYXRld2F5Q29uZmlnLmNvbXByZXNzID0gZmFsc2VcbiAgICB9XG5cbiAgICAvLyBXZSBjaGVjayBmb3IgYnVpbHQtaW4gV2ViU29ja2V0IGltcGxlbWVudGF0aW9ucyBpbiBCdW4gb3IgRGVubywgTm9kZUpTIHYyMiBoYXMgYW4gaW1wbGVtZW50YXRpb24gdG9vIGJ1dCBpdCBzZWVtcyB0byBiZSBsZXNzIG9wdGltaXplZCBzbyBmb3Igbm93IGl0IGlzIGJldHRlciB0byB1c2UgdGhlIHdzIG5wbSBwYWNrYWdlXG4gICAgY29uc3Qgc2hvdWxkVXNlQnVpbHRpbiA9IFJlZmxlY3QuaGFzKGdsb2JhbFRoaXMsICdXZWJTb2NrZXQnKSAmJiAoUmVmbGVjdC5oYXMoZ2xvYmFsVGhpcywgJ0J1bicpIHx8IFJlZmxlY3QuaGFzKGdsb2JhbFRoaXMsICdEZW5vJykpXG5cbiAgICAvLyBAdHMtZXhwZWN0LWVycm9yIE5vZGVXZWJTb2NrZXQgZG9lc24ndCBzdXBwb3J0IFwiZGlzcGF0Y2hFdmVudFwiLCBhbmQgd2hpbGUgd2UgZG9uJ3QgdXNlIGl0LCBpdCBpcyByZXF1aXJlZCBvbiB0aGUgXCJXZWJTb2NrZXRcIiB0eXBlXG4gICAgY29uc3Qgc29ja2V0OiBXZWJTb2NrZXQgPSBzaG91bGRVc2VCdWlsdGluID8gbmV3IFdlYlNvY2tldCh1cmwpIDogbmV3IE5vZGVXZWJTb2NrZXQodXJsKVxuICAgIHRoaXMuc29ja2V0ID0gc29ja2V0XG5cbiAgICAvLyBCeSBkZWZhdWx0IFdlYlNvY2tldCB3aWxsIGdpdmUgdXMgYSBCbG9iLCB0aGlzIGNoYW5nZXMgaXQgc28gdGhhdCBpdCBnaXZlcyB1cyBhbiBBcnJheUJ1ZmZlclxuICAgIHNvY2tldC5iaW5hcnlUeXBlID0gJ2FycmF5YnVmZmVyJ1xuXG4gICAgc29ja2V0Lm9uZXJyb3IgPSAoZXZlbnQpID0+IHRoaXMuaGFuZGxlRXJyb3IoZXZlbnQpXG4gICAgc29ja2V0Lm9uY2xvc2UgPSAoY2xvc2VFdmVudCkgPT4gdGhpcy5oYW5kbGVDbG9zZShjbG9zZUV2ZW50KVxuICAgIHNvY2tldC5vbm1lc3NhZ2UgPSAobWVzc2FnZUV2ZW50KSA9PiB0aGlzLmhhbmRsZU1lc3NhZ2UobWVzc2FnZUV2ZW50KVxuXG4gICAgcmV0dXJuIGF3YWl0IG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgICBzb2NrZXQub25vcGVuID0gKCkgPT4ge1xuICAgICAgICAvLyBPbmx5IHNldCB0aGUgc2hhcmQgdG8gYFVuaWRlbnRpZmllZGAgc3RhdGUgaWYgdGhlIGNvbm5lY3Rpb24gcmVxdWVzdCBkb2VzIG5vdCBjb21lIGZyb20gYW4gaWRlbnRpZnkgb3IgcmVzdW1lIGFjdGlvbi5cbiAgICAgICAgaWYgKCFbU2hhcmRTdGF0ZS5JZGVudGlmeWluZywgU2hhcmRTdGF0ZS5SZXN1bWluZ10uaW5jbHVkZXModGhpcy5zdGF0ZSkpIHtcbiAgICAgICAgICB0aGlzLnN0YXRlID0gU2hhcmRTdGF0ZS5VbmlkZW50aWZpZWRcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMubG9nZ2VyLmRlYnVnKGBbU2hhcmRdIFNoYXJkICMke3RoaXMuaWR9IHNvY2tldCBjb25uZWN0ZWQuYClcblxuICAgICAgICB0aGlzLmV2ZW50cy5jb25uZWN0ZWQ/Lih0aGlzKVxuXG4gICAgICAgIHJlc29sdmUodGhpcylcbiAgICAgIH1cbiAgICB9KVxuICB9XG5cbiAgLyoqXG4gICAqIElkZW50aWZ5IHRoZSBzaGFyZCB0byB0aGUgZ2F0ZXdheS4gSWYgbm90IGNvbm5lY3RlZCwgdGhpcyB3aWxsIGFsc28gY29ubmVjdCB0aGUgc2hhcmQgdG8gdGhlIGdhdGV3YXkuXG4gICAqIEBwYXJhbSBieXBhc3NSZXF1ZXN0IC0gV2hldGhlciB0byBieXBhc3MgdGhlIHJlcXVlc3RJZGVudGlmeSBoYW5kbGVyIGFuZCBpZGVudGlmeSBpbW1lZGlhdGVseS4gVGhpcyBzaG91bGQgYmUgdXNlZCBjYXJlZnVsbHkgYXMgaXQgY2FuIGNhdXNlIGludmFsaWQgc2Vzc2lvbnMuXG4gICAqL1xuICBhc3luYyBpZGVudGlmeShieXBhc3NSZXF1ZXN0ID0gZmFsc2UpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAvLyBBIG5ldyBpZGVudGlmeSBoYXMgYmVlbiByZXF1ZXN0ZWQgZXZlbiB0aG91Z2ggdGhlcmUgaXMgYWxyZWFkeSBhIGNvbm5lY3Rpb24gb3Blbi5cbiAgICAvLyBUaGVyZWZvcmUgd2UgbmVlZCB0byBjbG9zZSB0aGUgb2xkIGNvbm5lY3Rpb24gYW5kIGhlYXJ0YmVhdGluZyBiZWZvcmUgY3JlYXRpbmcgYSBuZXcgb25lLlxuICAgIGlmICh0aGlzLmlzT3BlbigpKSB7XG4gICAgICB0aGlzLmxvZ2dlci5kZWJ1ZyhgW1NoYXJkXSBJZGVudGlmeWluZyBvcGVuIFNoYXJkICMke3RoaXMuaWR9LCBjbG9zaW5nIHRoZSBjb25uZWN0aW9uYClcbiAgICAgIGF3YWl0IHRoaXMuY2xvc2UoU2hhcmRTb2NrZXRDbG9zZUNvZGVzLlJlSWRlbnRpZnlpbmcsICdSZS1pZGVudGlmeWluZyBjbG9zdXJlIG9mIG9sZCBjb25uZWN0aW9uLicpXG4gICAgfVxuXG4gICAgaWYgKCFieXBhc3NSZXF1ZXN0KSB7XG4gICAgICBhd2FpdCB0aGlzLnJlcXVlc3RJZGVudGlmeSgpXG4gICAgfVxuXG4gICAgdGhpcy5zdGF0ZSA9IFNoYXJkU3RhdGUuSWRlbnRpZnlpbmdcbiAgICB0aGlzLmV2ZW50cy5pZGVudGlmeWluZz8uKHRoaXMpXG5cbiAgICAvLyBJdCBpcyBwb3NzaWJsZSB0aGF0IHRoZSBzaGFyZCBpcyBpbiBIZWFydGJlYXRpbmcgc3RhdGUgYnV0IG5vdCBpZGVudGlmaWVkLFxuICAgIC8vIHNvIGNoZWNrIHdoZXRoZXIgdGhlcmUgaXMgYWxyZWFkeSBhIGdhdGV3YXkgY29ubmVjdGlvbiBleGlzdGluZy5cbiAgICAvLyBJZiBub3Qgd2UgbmVlZCB0byBjcmVhdGUgb25lIGJlZm9yZSB3ZSBpZGVudGlmeS5cbiAgICBpZiAoIXRoaXMuaXNPcGVuKCkpIHtcbiAgICAgIGF3YWl0IHRoaXMuY29ubmVjdCgpXG4gICAgfVxuXG4gICAgdGhpcy5sb2dnZXIuZGVidWcoYFtTaGFyZF0gU2VuZGluZyBJZGVudGlmeSBwYXlsb2FkIGZvciBTaGFyZCAjJHt0aGlzLmlkfS5gKVxuXG4gICAgdGhpcy5zZW5kKFxuICAgICAge1xuICAgICAgICBvcDogR2F0ZXdheU9wY29kZXMuSWRlbnRpZnksXG4gICAgICAgIGQ6IHtcbiAgICAgICAgICB0b2tlbjogYEJvdCAke3RoaXMuZ2F0ZXdheUNvbmZpZy50b2tlbn1gLFxuICAgICAgICAgIGNvbXByZXNzOiB0aGlzLmdhdGV3YXlDb25maWcuY29tcHJlc3MsXG4gICAgICAgICAgcHJvcGVydGllczogdGhpcy5nYXRld2F5Q29uZmlnLnByb3BlcnRpZXMsXG4gICAgICAgICAgaW50ZW50czogdGhpcy5nYXRld2F5Q29uZmlnLmludGVudHMsXG4gICAgICAgICAgc2hhcmQ6IFt0aGlzLmlkLCB0aGlzLmdhdGV3YXlDb25maWcudG90YWxTaGFyZHNdLFxuICAgICAgICAgIHByZXNlbmNlOiBhd2FpdCB0aGlzLm1ha2VQcmVzZW5jZSgpLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICAgIHRydWUsXG4gICAgKVxuXG4gICAgcmV0dXJuIGF3YWl0IG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgICB0aGlzLnJlc29sdmVzLnNldCgnUkVBRFknLCAoKSA9PiB7XG4gICAgICAgIHJlc29sdmUoKVxuICAgICAgfSlcbiAgICAgIC8vIFdoZW4gaWRlbnRpZnlpbmcgdG9vIGZhc3QsIERpc2NvcmQgc2VuZHMgYW4gaW52YWxpZCBzZXNzaW9uIHBheWxvYWQuXG4gICAgICAvLyBUaGlzIGNhbiBzYWZlbHkgYmUgaWdub3JlZCB0aG91Z2ggYW5kIHRoZSBzaGFyZCBzdGFydHMgYSBuZXcgaWRlbnRpZnkgYWN0aW9uLlxuICAgICAgdGhpcy5yZXNvbHZlcy5zZXQoJ0lOVkFMSURfU0VTU0lPTicsICgpID0+IHtcbiAgICAgICAgdGhpcy5yZXNvbHZlcy5kZWxldGUoJ1JFQURZJylcbiAgICAgICAgcmVzb2x2ZSgpXG4gICAgICB9KVxuICAgIH0pXG4gIH1cblxuICAvKiogQ2hlY2sgd2hldGhlciB0aGUgY29ubmVjdGlvbiB0byBEaXNjb3JkIGlzIGN1cnJlbnRseSBvcGVuLiAqL1xuICBpc09wZW4oKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuc29ja2V0Py5yZWFkeVN0YXRlID09PSBOb2RlV2ViU29ja2V0Lk9QRU5cbiAgfVxuXG4gIC8qKiBBdHRlbXB0IHRvIHJlc3VtZSB0aGUgcHJldmlvdXMgc2hhcmRzIHNlc3Npb24gd2l0aCB0aGUgZ2F0ZXdheS4gKi9cbiAgYXN5bmMgcmVzdW1lKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHRoaXMubG9nZ2VyLmRlYnVnKGBbU2hhcmRdIFJlc3VtaW5nIFNoYXJkICMke3RoaXMuaWR9YClcblxuICAgIC8vIEl0IGhhcyBiZWVuIHJlcXVlc3RlZCB0byByZXN1bWUgdGhlIFNoYXJkcyBzZXNzaW9uLlxuICAgIC8vIEl0J3MgcG9zc2libGUgdGhhdCB0aGUgc2hhcmQgaXMgc3RpbGwgY29ubmVjdGVkIHdpdGggRGlzY29yZCdzIGdhdGV3YXkgdGhlcmVmb3JlIHdlIG5lZWQgdG8gZm9yY2VmdWxseSBjbG9zZSBpdC5cbiAgICBpZiAodGhpcy5pc09wZW4oKSkge1xuICAgICAgdGhpcy5sb2dnZXIuZGVidWcoYFtTaGFyZF0gUmVzdW1pbmcgb3BlbiBTaGFyZCAjJHt0aGlzLmlkfSwgY2xvc2luZyB0aGUgY29ubmVjdGlvbmApXG4gICAgICBhd2FpdCB0aGlzLmNsb3NlKFNoYXJkU29ja2V0Q2xvc2VDb2Rlcy5SZXN1bWVDbG9zaW5nT2xkQ29ubmVjdGlvbiwgJ1JlY29ubmVjdGluZyB0aGUgc2hhcmQsIGNsb3Npbmcgb2xkIGNvbm5lY3Rpb24uJylcbiAgICB9XG5cbiAgICAvLyBTaGFyZCBoYXMgbmV2ZXIgaWRlbnRpZmllZCwgc28gd2UgY2Fubm90IHJlc3VtZS5cbiAgICBpZiAoIXRoaXMuc2Vzc2lvbklkKSB7XG4gICAgICB0aGlzLmxvZ2dlci5kZWJ1ZyhgW1NoYXJkXSBUcnlpbmcgdG8gcmVzdW1lIFNoYXJkICMke3RoaXMuaWR9IHdpdGhvdXQgdGhlIHNlc3Npb24gaWQuIElkZW50aWZ5aW5nIHRoZSBzaGFyZCBpbnN0ZWFkLmApXG5cbiAgICAgIGF3YWl0IHRoaXMuaWRlbnRpZnkoKVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgdGhpcy5zdGF0ZSA9IFNoYXJkU3RhdGUuUmVzdW1pbmdcblxuICAgIC8vIEJlZm9yZSB3ZSBjYW4gcmVzdW1lLCB3ZSBuZWVkIHRvIGNyZWF0ZSBhIG5ldyBjb25uZWN0aW9uIHdpdGggRGlzY29yZCdzIGdhdGV3YXkuXG4gICAgYXdhaXQgdGhpcy5jb25uZWN0KClcblxuICAgIHRoaXMubG9nZ2VyLmRlYnVnKGBbU2hhcmRdIFJlc3VtaW5nIFNoYXJkICMke3RoaXMuaWR9IGNvbm5lY3RlZC4gU2Vzc2lvbiBpZDogJHt0aGlzLnNlc3Npb25JZH0gfCBTZXF1ZW5jZTogJHt0aGlzLnByZXZpb3VzU2VxdWVuY2VOdW1iZXJ9YClcblxuICAgIHRoaXMuc2VuZChcbiAgICAgIHtcbiAgICAgICAgb3A6IEdhdGV3YXlPcGNvZGVzLlJlc3VtZSxcbiAgICAgICAgZDoge1xuICAgICAgICAgIHRva2VuOiBgQm90ICR7dGhpcy5nYXRld2F5Q29uZmlnLnRva2VufWAsXG4gICAgICAgICAgc2Vzc2lvbl9pZDogdGhpcy5zZXNzaW9uSWQsXG4gICAgICAgICAgc2VxOiB0aGlzLnByZXZpb3VzU2VxdWVuY2VOdW1iZXIgPz8gMCxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgICB0cnVlLFxuICAgIClcblxuICAgIHJldHVybiBhd2FpdCBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuICAgICAgdGhpcy5yZXNvbHZlcy5zZXQoJ1JFU1VNRUQnLCAoKSA9PiByZXNvbHZlKCkpXG5cbiAgICAgIC8vIElmIGl0IGlzIGF0dGVtcHRlZCB0byByZXN1bWUgd2l0aCBhbiBpbnZhbGlkIHNlc3Npb24gaWQsIERpc2NvcmQgc2VuZHMgYW4gaW52YWxpZCBzZXNzaW9uIHBheWxvYWRcbiAgICAgIC8vIE5vdCBlcnJvcmluZyBoZXJlIHNpbmNlIGl0IGlzIGVhc3kgdGhhdCB0aGlzIGhhcHBlbnMsIGFsc28gaXQgd291bGQgYmUgbm90IGNhdGNoYWJsZVxuICAgICAgdGhpcy5yZXNvbHZlcy5zZXQoJ0lOVkFMSURfU0VTU0lPTicsICgpID0+IHtcbiAgICAgICAgdGhpcy5yZXNvbHZlcy5kZWxldGUoJ1JFU1VNRUQnKVxuICAgICAgICByZXNvbHZlKClcbiAgICAgIH0pXG4gICAgfSlcbiAgfVxuXG4gIC8qKlxuICAgKiBTZW5kIGEgbWVzc2FnZSB0byBEaXNjb3JkLlxuICAgKiBAcGFyYW0gaGlnaFByaW9yaXR5IC0gV2hldGhlciB0aGlzIG1lc3NhZ2Ugc2hvdWxkIGJlIHNlbmQgYXNhcC5cbiAgICovXG4gIGFzeW5jIHNlbmQobWVzc2FnZTogU2hhcmRTb2NrZXRSZXF1ZXN0LCBoaWdoUHJpb3JpdHk6IGJvb2xlYW4gPSBmYWxzZSk6IFByb21pc2U8dm9pZD4ge1xuICAgIC8vIEJlZm9yZSBhY3F1aXJpbmcgYSB0b2tlbiBmcm9tIHRoZSBidWNrZXQsIGNoZWNrIHdoZXRoZXIgdGhlIHNoYXJkIGlzIGN1cnJlbnRseSBvZmZsaW5lIG9yIG5vdC5cbiAgICAvLyBFbHNlIGJ1Y2tldCBhbmQgdG9rZW4gd2FpdCB0aW1lIGp1c3QgZ2V0IHdhc3RlZC5cbiAgICBhd2FpdCB0aGlzLmNoZWNrT2ZmbGluZShoaWdoUHJpb3JpdHkpXG5cbiAgICBhd2FpdCB0aGlzLmJ1Y2tldC5hY3F1aXJlKGhpZ2hQcmlvcml0eSlcblxuICAgIC8vIEl0J3MgcG9zc2libGUsIHRoYXQgdGhlIHNoYXJkIHdlbnQgb2ZmbGluZSBhZnRlciBhIHRva2VuIGhhcyBiZWVuIGFjcXVpcmVkIGZyb20gdGhlIGJ1Y2tldC5cbiAgICBhd2FpdCB0aGlzLmNoZWNrT2ZmbGluZShoaWdoUHJpb3JpdHkpXG5cbiAgICB0aGlzLnNvY2tldD8uc2VuZChKU09OLnN0cmluZ2lmeShtZXNzYWdlKSlcbiAgfVxuXG4gIC8qKiBTaHV0ZG93biB0aGUgdGhpcy4gRm9yY2VmdWxseSBkaXNjb25uZWN0IHRoZSBzaGFyZCBmcm9tIERpc2NvcmQuIFRoZSBzaGFyZCBtYXkgbm90IGF0dGVtcHQgdG8gcmVjb25uZWN0IHdpdGggRGlzY29yZC4gKi9cbiAgYXN5bmMgc2h1dGRvd24oKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgYXdhaXQgdGhpcy5jbG9zZShTaGFyZFNvY2tldENsb3NlQ29kZXMuU2h1dGRvd24sICdTaGFyZCBzaHV0dGluZyBkb3duLicpXG4gICAgdGhpcy5zdGF0ZSA9IFNoYXJkU3RhdGUuT2ZmbGluZVxuICB9XG5cbiAgLyoqIEhhbmRsZSBhIGdhdGV3YXkgY29ubmVjdGlvbiBlcnJvciAqL1xuICBoYW5kbGVFcnJvcihlcnJvcjogRXZlbnQpOiB2b2lkIHtcbiAgICB0aGlzLmxvZ2dlci5lcnJvcihgW1NoYXJkXSBUaGVyZSB3YXMgYW4gZXJyb3IgY29ubmVjdGluZyBTaGFyZCAjJHt0aGlzLmlkfS5gLCBlcnJvcilcbiAgfVxuXG4gIC8qKiBIYW5kbGUgYSBnYXRld2F5IGNvbm5lY3Rpb24gY2xvc2UuICovXG4gIGFzeW5jIGhhbmRsZUNsb3NlKGNsb3NlOiBDbG9zZUV2ZW50KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdGhpcy5zb2NrZXQgPSB1bmRlZmluZWRcbiAgICB0aGlzLnN0b3BIZWFydGJlYXRpbmcoKVxuXG4gICAgLy8gQ2xlYXIgdGhlIHpsaWIvenN0ZCBkYXRhXG4gICAgdGhpcy5pbmZsYXRlID0gdW5kZWZpbmVkXG4gICAgdGhpcy56c3RkRGVjb21wcmVzcyA9IHVuZGVmaW5lZFxuICAgIHRoaXMuaW5mbGF0ZUJ1ZmZlciA9IG51bGxcbiAgICB0aGlzLmRlY29tcHJlc3Npb25Qcm9taXNlc1F1ZXVlID0gW11cblxuICAgIHRoaXMubG9nZ2VyLmRlYnVnKGBbU2hhcmRdIFNoYXJkICMke3RoaXMuaWR9IGNsb3NlZCB3aXRoIGNvZGUgJHtjbG9zZS5jb2RlfSR7Y2xvc2UucmVhc29uID8gYCwgYW5kIHJlYXNvbjogJHtjbG9zZS5yZWFzb259YCA6ICcnfS5gKVxuXG4gICAgLy8gUmVzb2x2ZSB0aGUgY2xvc2UgcHJvbWlzZSBpZiBpdCBleGlzdHNcbiAgICB0aGlzLnJlc29sdmVBZnRlckNsb3NlPy4oY2xvc2UpXG5cbiAgICBzd2l0Y2ggKGNsb3NlLmNvZGUpIHtcbiAgICAgIGNhc2UgU2hhcmRTb2NrZXRDbG9zZUNvZGVzLlRlc3RpbmdGaW5pc2hlZDoge1xuICAgICAgICB0aGlzLnN0YXRlID0gU2hhcmRTdGF0ZS5PZmZsaW5lXG4gICAgICAgIHRoaXMuZXZlbnRzLmRpc2Nvbm5lY3RlZD8uKHRoaXMpXG5cbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG4gICAgICAvLyBPbiB0aGVzZSBjb2RlcyBhIG1hbnVhbCBzdGFydCB3aWxsIGJlIGRvbmUuXG4gICAgICBjYXNlIFNoYXJkU29ja2V0Q2xvc2VDb2Rlcy5TaHV0ZG93bjpcbiAgICAgIGNhc2UgU2hhcmRTb2NrZXRDbG9zZUNvZGVzLlJlSWRlbnRpZnlpbmc6XG4gICAgICBjYXNlIFNoYXJkU29ja2V0Q2xvc2VDb2Rlcy5SZXNoYXJkZWQ6XG4gICAgICBjYXNlIFNoYXJkU29ja2V0Q2xvc2VDb2Rlcy5SZXN1bWVDbG9zaW5nT2xkQ29ubmVjdGlvbjoge1xuICAgICAgICB0aGlzLnN0YXRlID0gU2hhcmRTdGF0ZS5EaXNjb25uZWN0ZWRcbiAgICAgICAgdGhpcy5ldmVudHMuZGlzY29ubmVjdGVkPy4odGhpcylcblxuICAgICAgICByZXR1cm5cbiAgICAgIH1cbiAgICAgIC8vIFdoZW4gdGhlc2UgY29kZXMgYXJlIHJlY2VpdmVkIHNvbWV0aGluZyB3ZW50IHJlYWxseSB3cm9uZy5cbiAgICAgIC8vIE9uIHRob3NlIHdlIGNhbm5vdCBzdGFydCBhIHJlY29ubmVjdCBhdHRlbXB0LlxuICAgICAgY2FzZSBHYXRld2F5Q2xvc2VFdmVudENvZGVzLkF1dGhlbnRpY2F0aW9uRmFpbGVkOlxuICAgICAgY2FzZSBHYXRld2F5Q2xvc2VFdmVudENvZGVzLkludmFsaWRTaGFyZDpcbiAgICAgIGNhc2UgR2F0ZXdheUNsb3NlRXZlbnRDb2Rlcy5TaGFyZGluZ1JlcXVpcmVkOlxuICAgICAgY2FzZSBHYXRld2F5Q2xvc2VFdmVudENvZGVzLkludmFsaWRBcGlWZXJzaW9uOlxuICAgICAgY2FzZSBHYXRld2F5Q2xvc2VFdmVudENvZGVzLkludmFsaWRJbnRlbnRzOlxuICAgICAgY2FzZSBHYXRld2F5Q2xvc2VFdmVudENvZGVzLkRpc2FsbG93ZWRJbnRlbnRzOiB7XG4gICAgICAgIHRoaXMuc3RhdGUgPSBTaGFyZFN0YXRlLk9mZmxpbmVcbiAgICAgICAgdGhpcy5ldmVudHMuZGlzY29ubmVjdGVkPy4odGhpcylcblxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoY2xvc2UucmVhc29uIHx8ICdEaXNjb3JkIGdhdmUgbm8gcmVhc29uISBHRyEgWW91IGJyb2tlIERpc2NvcmQhJylcbiAgICAgIH1cbiAgICAgIC8vIEdhdGV3YXkgY29ubmVjdGlvbiBjbG9zZXMgd2hpY2ggcmVxdWlyZSBhIG5ldyBpZGVudGlmeS5cbiAgICAgIGNhc2UgR2F0ZXdheUNsb3NlRXZlbnRDb2Rlcy5Ob3RBdXRoZW50aWNhdGVkOlxuICAgICAgY2FzZSBHYXRld2F5Q2xvc2VFdmVudENvZGVzLkludmFsaWRTZXE6XG4gICAgICBjYXNlIEdhdGV3YXlDbG9zZUV2ZW50Q29kZXMuU2Vzc2lvblRpbWVkT3V0OiB7XG4gICAgICAgIHRoaXMubG9nZ2VyLmRlYnVnKGBbU2hhcmRdIFNoYXJkICMke3RoaXMuaWR9IGNsb3NlZCByZXF1aXJpbmcgcmUtaWRlbnRpZnkuYClcbiAgICAgICAgdGhpcy5zdGF0ZSA9IFNoYXJkU3RhdGUuSWRlbnRpZnlpbmdcbiAgICAgICAgdGhpcy5ldmVudHMuZGlzY29ubmVjdGVkPy4odGhpcylcblxuICAgICAgICBhd2FpdCB0aGlzLmlkZW50aWZ5KClcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG4gICAgICAvLyBOT1RFOiBUaGlzIGNhc2UgbXVzdCBhbHdheXMgYmUgcmlnaHQgYWJvdmUgdGhlIGNhc2VzIHRoYXQgcnVucyB3aXRoIGRlZmF1bHQgY2FzZSBiZWNhdXNlIG9mIGhvdyBzd2l0Y2ggd29ya3Mgd2hlbiB5b3UgZG9uJ3QgYnJlYWsgLyByZXR1cm4sIG1vcmUgaW5mbyBiZWxvdy5cbiAgICAgIGNhc2UgR2F0ZXdheUNsb3NlRXZlbnRDb2Rlcy5Ob3JtYWxDbG9zdXJlOlxuICAgICAgY2FzZSBHYXRld2F5Q2xvc2VFdmVudENvZGVzLkdvaW5nQXdheToge1xuICAgICAgICAvLyBJZiB0aGUgc2hhcmQgaXMgbWFya2VkIGFzIGdvaW5nT2ZmbGluZSwgaXQgc3RheXMgZGlzY29ubmVjdGVkLlxuICAgICAgICBpZiAodGhpcy5nb2luZ09mZmxpbmUpIHtcbiAgICAgICAgICB0aGlzLnN0YXRlID0gU2hhcmRTdGF0ZS5EaXNjb25uZWN0ZWRcbiAgICAgICAgICB0aGlzLmV2ZW50cy5kaXNjb25uZWN0ZWQ/Lih0aGlzKVxuXG4gICAgICAgICAgdGhpcy5nb2luZ09mZmxpbmUgPSBmYWxzZVxuXG4gICAgICAgICAgcmV0dXJuXG4gICAgICAgIH1cblxuICAgICAgICAvLyBPdGhlcndpc2UsIHdlIHdhbnQgdGhlIHNoYXJkIHRvIGdvIHRocm91Z2ggdGhlIGRlZmF1bHQgY2FzZSB3aGVyZSBpdCBnZXRzIHJlc3VtZWQsIGFzIGl0IG1pZ2h0IGJlIGFuIHVuZXhwZWN0ZWQgY2xvc3VyZSBmcm9tIERpc2NvcmQgb3IgQ2xvdWRmbGFyZSBmb3IgZXhhbXBsZSwgc28gd2UgZG9uJ3QgdXNlIGJyZWFrIC8gcmV0dXJuIGhlcmUuXG4gICAgICB9XG4gICAgICAvLyBHYXRld2F5IGNvbm5lY3Rpb24gY2xvc2VzIG9uIHdoaWNoIGEgcmVzdW1lIGlzIGFsbG93ZWQuXG4gICAgICBjYXNlIEdhdGV3YXlDbG9zZUV2ZW50Q29kZXMuVW5rbm93bkVycm9yOlxuICAgICAgY2FzZSBHYXRld2F5Q2xvc2VFdmVudENvZGVzLlVua25vd25PcGNvZGU6XG4gICAgICBjYXNlIEdhdGV3YXlDbG9zZUV2ZW50Q29kZXMuRGVjb2RlRXJyb3I6XG4gICAgICBjYXNlIEdhdGV3YXlDbG9zZUV2ZW50Q29kZXMuUmF0ZUxpbWl0ZWQ6XG4gICAgICBjYXNlIEdhdGV3YXlDbG9zZUV2ZW50Q29kZXMuQWxyZWFkeUF1dGhlbnRpY2F0ZWQ6XG4gICAgICBkZWZhdWx0OiB7XG4gICAgICAgIC8vIFdlIGRvbid0IHdhbnQgdG8gZ2V0IGludG8gYW4gaW5maW5pdGUgbG9vcCB3aGVyZSB3ZSByZXN1bWUgZm9yZXZlciwgc28gaWYgd2Ugd2VyZSBhbHJlYWR5IHJlc3VtaW5nIHdlIGlkZW50aWZ5IGluc3RlYWRcbiAgICAgICAgdGhpcy5zdGF0ZSA9IHRoaXMuc3RhdGUgPT09IFNoYXJkU3RhdGUuUmVzdW1pbmcgPyBTaGFyZFN0YXRlLklkZW50aWZ5aW5nIDogU2hhcmRTdGF0ZS5SZXN1bWluZ1xuICAgICAgICB0aGlzLmV2ZW50cy5kaXNjb25uZWN0ZWQ/Lih0aGlzKVxuXG4gICAgICAgIGlmICh0aGlzLnN0YXRlID09PSBTaGFyZFN0YXRlLlJlc3VtaW5nKSB7XG4gICAgICAgICAgYXdhaXQgdGhpcy5yZXN1bWUoKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGF3YWl0IHRoaXMuaWRlbnRpZnkoKVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqIEhhbmRsZSBhbiBpbmNvbWluZyBnYXRld2F5IG1lc3NhZ2UuICovXG4gIGFzeW5jIGhhbmRsZU1lc3NhZ2UobWVzc2FnZTogTWVzc2FnZUV2ZW50KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgLy8gVGhlIHdzIG5wbSBwYWNrYWdlIHdpbGwgdXNlIGEgQnVmZmVyLCB3aGlsZSB0aGUgZ2xvYmFsIGJ1aWx0LWluIHdpbGwgdXNlIEFycmF5QnVmZmVyXG4gICAgY29uc3QgaXNDb21wcmVzc2VkID0gbWVzc2FnZS5kYXRhIGluc3RhbmNlb2YgQXJyYXlCdWZmZXIgfHwgbWVzc2FnZS5kYXRhIGluc3RhbmNlb2YgQnVmZmVyXG5cbiAgICBjb25zdCBkYXRhID0gaXNDb21wcmVzc2VkID8gYXdhaXQgdGhpcy5kZWNvbXByZXNzUGFja2V0KG1lc3NhZ2UuZGF0YSkgOiAoSlNPTi5wYXJzZShtZXNzYWdlLmRhdGEpIGFzIERpc2NvcmRHYXRld2F5UGF5bG9hZClcblxuICAgIC8vIENoZWNrIGlmIHRoZSBkZWNvbXByZXNzaW9uIHdhcyBub3Qgc3VjY2Vzc2Z1bFxuICAgIGlmICghZGF0YSkgcmV0dXJuXG5cbiAgICBhd2FpdCB0aGlzLmhhbmRsZURpc2NvcmRQYWNrZXQoZGF0YSlcbiAgfVxuXG4gIC8qKlxuICAgKiBEZWNvbXByZXNzIGEgemxpYi96c3RkIGNvbXByZXNzZWQgcGFja2V0XG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBhc3luYyBkZWNvbXByZXNzUGFja2V0KGRhdGE6IEFycmF5QnVmZmVyIHwgQnVmZmVyKTogUHJvbWlzZTxEaXNjb3JkR2F0ZXdheVBheWxvYWQgfCBudWxsPiB7XG4gICAgLy8gQSBidWZmZXIgaXMgYSBVaW50OEFycmF5IHVuZGVyIHRoZSBob29kLiBBbiBBcnJheUJ1ZmZlciBpcyBnZW5lcmljLCBzbyB3ZSBuZWVkIHRvIGNyZWF0ZSB0aGUgVWludDhBcnJheSB0aGF0IHVzZXMgdGhlIHdob2xlIEFycmF5QnVmZmVyXG4gICAgY29uc3QgY29tcHJlc3NlZERhdGE6IFVpbnQ4QXJyYXkgPSBkYXRhIGluc3RhbmNlb2YgQnVmZmVyID8gZGF0YSA6IG5ldyBVaW50OEFycmF5KGRhdGEpXG5cbiAgICBpZiAodGhpcy5nYXRld2F5Q29uZmlnLnRyYW5zcG9ydENvbXByZXNzaW9uID09PSBUcmFuc3BvcnRDb21wcmVzc2lvbi56bGliKSB7XG4gICAgICBpZiAoIXRoaXMuaW5mbGF0ZSkge1xuICAgICAgICB0aGlzLmxvZ2dlci5mYXRhbCgnW1NoYXJkXSB6bGliLXN0cmVhbSB0cmFuc3BvcnQgY29tcHJlc3Npb24gd2FzIGVuYWJsZWQgYnV0IG5vIGluc3RhbmNlIG9mIEluZmxhdGUgd2FzIGZvdW5kLicpXG4gICAgICAgIHJldHVybiBudWxsXG4gICAgICB9XG5cbiAgICAgIC8vIEFsaWFzLCB1c2VkIHRvIGF2b2lkIHNvbWUgbnVsbCBjaGVja3MgaW4gdGhlIFByb21pc2UgY29uc3RydWN0b3JcbiAgICAgIGNvbnN0IGluZmxhdGUgPSB0aGlzLmluZmxhdGVcblxuICAgICAgY29uc3Qgd3JpdGVQcm9taXNlID0gbmV3IFByb21pc2U8dm9pZD4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICBpbmZsYXRlLndyaXRlKGNvbXByZXNzZWREYXRhLCAnYmluYXJ5JywgKGVycm9yKSA9PiAoZXJyb3IgPyByZWplY3QoZXJyb3IpIDogcmVzb2x2ZSgpKSlcbiAgICAgIH0pXG5cbiAgICAgIGlmICghZW5kc1dpdGhNYXJrZXIoY29tcHJlc3NlZERhdGEsIFpMSUJfU1lOQ19GTFVTSCkpIHJldHVybiBudWxsXG5cbiAgICAgIGF3YWl0IHdyaXRlUHJvbWlzZVxuXG4gICAgICBpZiAoIXRoaXMuaW5mbGF0ZUJ1ZmZlcikge1xuICAgICAgICB0aGlzLmxvZ2dlci53YXJuKCdbU2hhcmRdIFRoZSBaTGliIGluZmxhdGUgYnVmZmVyIHdhcyBjbGVhcmVkIGF0IGFuIHVuZXhwZWN0ZWQgbW9tZW50LicpXG4gICAgICAgIHJldHVybiBudWxsXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGRlY29kZWREYXRhID0gdGhpcy50ZXh0RGVjb2Rlci5kZWNvZGUodGhpcy5pbmZsYXRlQnVmZmVyKVxuICAgICAgdGhpcy5pbmZsYXRlQnVmZmVyID0gbnVsbFxuXG4gICAgICByZXR1cm4gSlNPTi5wYXJzZShkZWNvZGVkRGF0YSlcbiAgICB9XG5cbiAgICBpZiAodGhpcy5nYXRld2F5Q29uZmlnLnRyYW5zcG9ydENvbXByZXNzaW9uID09PSBUcmFuc3BvcnRDb21wcmVzc2lvbi56c3RkKSB7XG4gICAgICBpZiAodGhpcy56c3RkRGVjb21wcmVzcykge1xuICAgICAgICB0aGlzLnpzdGREZWNvbXByZXNzLnB1c2goY29tcHJlc3NlZERhdGEpXG5cbiAgICAgICAgY29uc3QgZGVjb21wcmVzc2lvblByb21pc2UgPSBuZXcgUHJvbWlzZTxEaXNjb3JkR2F0ZXdheVBheWxvYWQ+KChyKSA9PiB0aGlzLmRlY29tcHJlc3Npb25Qcm9taXNlc1F1ZXVlLnB1c2gocikpXG4gICAgICAgIHJldHVybiBhd2FpdCBkZWNvbXByZXNzaW9uUHJvbWlzZVxuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5pbmZsYXRlKSB7XG4gICAgICAgIC8vIEFsaWFzLCB1c2VkIHRvIGF2b2lkIHNvbWUgbnVsbCBjaGVja3MgaW4gdGhlIFByb21pc2UgY29uc3RydWN0b3JcbiAgICAgICAgY29uc3QgZGVjb21wcmVzcyA9IHRoaXMuaW5mbGF0ZVxuXG4gICAgICAgIGNvbnN0IHdyaXRlUHJvbWlzZSA9IG5ldyBQcm9taXNlPHZvaWQ+KChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICBkZWNvbXByZXNzLndyaXRlKGNvbXByZXNzZWREYXRhLCAnYmluYXJ5JywgKGVycm9yKSA9PiAoZXJyb3IgPyByZWplY3QoZXJyb3IpIDogcmVzb2x2ZSgpKSlcbiAgICAgICAgfSlcblxuICAgICAgICBhd2FpdCB3cml0ZVByb21pc2VcblxuICAgICAgICBpZiAoIXRoaXMuaW5mbGF0ZUJ1ZmZlcikge1xuICAgICAgICAgIHRoaXMubG9nZ2VyLndhcm4oJ1tTaGFyZF0gVGhlIFpMaWIgaW5mbGF0ZSBidWZmZXIgd2FzIGNsZWFyZWQgYXQgYW4gdW5leHBlY3RlZCBtb21lbnQuJylcbiAgICAgICAgICByZXR1cm4gbnVsbFxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZGVjb2RlZERhdGEgPSB0aGlzLnRleHREZWNvZGVyLmRlY29kZSh0aGlzLmluZmxhdGVCdWZmZXIpXG4gICAgICAgIHRoaXMuaW5mbGF0ZUJ1ZmZlciA9IG51bGxcblxuICAgICAgICByZXR1cm4gSlNPTi5wYXJzZShkZWNvZGVkRGF0YSlcbiAgICAgIH1cblxuICAgICAgdGhpcy5sb2dnZXIuZmF0YWwoJ1tTaGFyZF0genN0ZC1zdHJlYW0gdHJhbnNwb3J0IGNvbXByZXNzaW9uIHdhcyBlbmFibGVkIGJ1dCBubyB6c3RkIGRlY29tcHJlc3NvciB3YXMgZm91bmQuJylcbiAgICAgIHJldHVybiBudWxsXG4gICAgfVxuXG4gICAgaWYgKHRoaXMuZ2F0ZXdheUNvbmZpZy5jb21wcmVzcykge1xuICAgICAgY29uc3QgZGVjb21wcmVzc2VkID0gemxpYi5pbmZsYXRlU3luYyhjb21wcmVzc2VkRGF0YSlcbiAgICAgIGNvbnN0IGRlY29kZWREYXRhID0gdGhpcy50ZXh0RGVjb2Rlci5kZWNvZGUoZGVjb21wcmVzc2VkKVxuXG4gICAgICByZXR1cm4gSlNPTi5wYXJzZShkZWNvZGVkRGF0YSlcbiAgICB9XG5cbiAgICByZXR1cm4gbnVsbFxuICB9XG5cbiAgLyoqIEhhbmRsZXMgYSBpbmNvbWluZyBnYXRld2F5IHBhY2tldC4gKi9cbiAgYXN5bmMgaGFuZGxlRGlzY29yZFBhY2tldChwYWNrZXQ6IERpc2NvcmRHYXRld2F5UGF5bG9hZCk6IFByb21pc2U8dm9pZD4ge1xuICAgIC8vIEVkZ2UgY2FzZSBzdGFydDogaHR0cHM6Ly9naXRodWIuY29tL2Rpc2NvcmRlbm8vZGlzY29yZGVuby9pc3N1ZXMvMjMxMVxuICAgIHRoaXMuaGVhcnQubGFzdEFjayA9IERhdGUubm93KClcbiAgICB0aGlzLmhlYXJ0LmFja25vd2xlZGdlZCA9IHRydWVcbiAgICAvLyBFZGdlIGNhc2UgZW5kIVxuXG4gICAgc3dpdGNoIChwYWNrZXQub3ApIHtcbiAgICAgIGNhc2UgR2F0ZXdheU9wY29kZXMuSGVhcnRiZWF0OiB7XG4gICAgICAgIGlmICghdGhpcy5pc09wZW4oKSkgcmV0dXJuXG5cbiAgICAgICAgdGhpcy5oZWFydC5sYXN0QmVhdCA9IERhdGUubm93KClcbiAgICAgICAgLy8gRGlzY29yZCByYW5kb21seSBzZW5kcyB0aGlzIHJlcXVpcmluZyBhbiBpbW1lZGlhdGUgaGVhcnRiZWF0IGJhY2suXG4gICAgICAgIC8vIFVzaW5nIGEgZGlyZWN0IHNvY2tldC5zZW5kIGNhbGwgaGVyZSBiZWNhdXNlIGhlYXJ0YmVhdCByZXF1ZXN0cyBhcmUgcmVzZXJ2ZWQgYnkgdXMuXG4gICAgICAgIHRoaXMuc29ja2V0Py5zZW5kKFxuICAgICAgICAgIEpTT04uc3RyaW5naWZ5KHtcbiAgICAgICAgICAgIG9wOiBHYXRld2F5T3Bjb2Rlcy5IZWFydGJlYXQsXG4gICAgICAgICAgICBkOiB0aGlzLnByZXZpb3VzU2VxdWVuY2VOdW1iZXIsXG4gICAgICAgICAgfSksXG4gICAgICAgIClcbiAgICAgICAgdGhpcy5ldmVudHMuaGVhcnRiZWF0Py4odGhpcylcblxuICAgICAgICBicmVha1xuICAgICAgfVxuICAgICAgY2FzZSBHYXRld2F5T3Bjb2Rlcy5IZWxsbzoge1xuICAgICAgICBjb25zdCBpbnRlcnZhbCA9IChwYWNrZXQuZCBhcyBEaXNjb3JkSGVsbG8pLmhlYXJ0YmVhdF9pbnRlcnZhbFxuICAgICAgICB0aGlzLmxvZ2dlci5kZWJ1ZyhgW1NoYXJkXSBTaGFyZCAjJHt0aGlzLmlkfSByZWNlaXZlZCBIZWxsb2ApXG4gICAgICAgIHRoaXMuc3RhcnRIZWFydGJlYXRpbmcoaW50ZXJ2YWwpXG5cbiAgICAgICAgaWYgKHRoaXMuc3RhdGUgIT09IFNoYXJkU3RhdGUuUmVzdW1pbmcpIHtcbiAgICAgICAgICBjb25zdCBjdXJyZW50UXVldWUgPSBbLi4udGhpcy5idWNrZXQucXVldWVdXG4gICAgICAgICAgLy8gSEVMTE8gaGFzIGJlZW4gc2VuZCBvbiBhIG5vbiByZXN1bWUgYWN0aW9uLlxuICAgICAgICAgIC8vIFRoaXMgbWVhbnMgdGhhdCB0aGUgc2hhcmQgc3RhcnRzIGEgbmV3IHNlc3Npb24sXG4gICAgICAgICAgLy8gdGhlcmVmb3JlIHRoZSByYXRlIGxpbWl0IGludGVydmFsIGhhcyBiZWVuIHJlc2V0IHRvby5cbiAgICAgICAgICB0aGlzLmJ1Y2tldCA9IG5ldyBMZWFreUJ1Y2tldCh7XG4gICAgICAgICAgICBtYXg6IHRoaXMuY2FsY3VsYXRlU2FmZVJlcXVlc3RzKCksXG4gICAgICAgICAgICByZWZpbGxJbnRlcnZhbDogNjAwMDAsXG4gICAgICAgICAgICByZWZpbGxBbW91bnQ6IHRoaXMuY2FsY3VsYXRlU2FmZVJlcXVlc3RzKCksXG4gICAgICAgICAgICBsb2dnZXI6IHRoaXMubG9nZ2VyLFxuICAgICAgICAgIH0pXG5cbiAgICAgICAgICAvLyBRdWV1ZSBzaG91bGQgbm90IGJlIGxvc3Qgb24gYSByZS1pZGVudGlmeS5cbiAgICAgICAgICB0aGlzLmJ1Y2tldC5xdWV1ZS51bnNoaWZ0KC4uLmN1cnJlbnRRdWV1ZSlcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuZXZlbnRzLmhlbGxvPy4odGhpcylcblxuICAgICAgICBicmVha1xuICAgICAgfVxuICAgICAgY2FzZSBHYXRld2F5T3Bjb2Rlcy5IZWFydGJlYXRBQ0s6IHtcbiAgICAgICAgLy8gTWFudWFsbHkgY2FsY3VsYXRpbmcgdGhlIHJvdW5kIHRyaXAgdGltZSBmb3IgdXNlcnMgd2hvIG5lZWQgaXQuXG4gICAgICAgIGlmICh0aGlzLmhlYXJ0Lmxhc3RCZWF0KSB7XG4gICAgICAgICAgdGhpcy5oZWFydC5ydHQgPSB0aGlzLmhlYXJ0Lmxhc3RBY2sgLSB0aGlzLmhlYXJ0Lmxhc3RCZWF0XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmV2ZW50cy5oZWFydGJlYXRBY2s/Lih0aGlzKVxuXG4gICAgICAgIGJyZWFrXG4gICAgICB9XG4gICAgICBjYXNlIEdhdGV3YXlPcGNvZGVzLlJlY29ubmVjdDoge1xuICAgICAgICB0aGlzLmxvZ2dlci5kZWJ1ZyhgW1NoYXJkXSBSZWNlaXZlZCBhIFJlY29ubmVjdCBmb3IgU2hhcmQgIyR7dGhpcy5pZH1gKVxuICAgICAgICB0aGlzLmV2ZW50cy5yZXF1ZXN0ZWRSZWNvbm5lY3Q/Lih0aGlzKVxuXG4gICAgICAgIGF3YWl0IHRoaXMucmVzdW1lKClcblxuICAgICAgICBicmVha1xuICAgICAgfVxuICAgICAgY2FzZSBHYXRld2F5T3Bjb2Rlcy5JbnZhbGlkU2Vzc2lvbjoge1xuICAgICAgICBjb25zdCByZXN1bWFibGUgPSBwYWNrZXQuZCBhcyBib29sZWFuXG4gICAgICAgIHRoaXMubG9nZ2VyLmRlYnVnKGBbU2hhcmRdIFJlY2VpdmVkIEludmFsaWQgU2Vzc2lvbiBmb3IgU2hhcmQgIyR7dGhpcy5pZH0gd2l0aCByZXN1bWFibGUgYXMgJHtyZXN1bWFibGV9YClcblxuICAgICAgICB0aGlzLmV2ZW50cy5pbnZhbGlkU2Vzc2lvbj8uKHRoaXMsIHJlc3VtYWJsZSlcblxuICAgICAgICAvLyBXZSBuZWVkIHRvIHdhaXQgZm9yIGEgcmFuZG9tIGFtb3VudCBvZiB0aW1lIGJldHdlZW4gMSBhbmQgNVxuICAgICAgICAvLyBSZWZlcmVuY2U6IGh0dHBzOi8vZGlzY29yZC5jb20vZGV2ZWxvcGVycy9kb2NzL3RvcGljcy9nYXRld2F5I3Jlc3VtaW5nXG4gICAgICAgIGF3YWl0IGRlbGF5KE1hdGguZmxvb3IoKE1hdGgucmFuZG9tKCkgKiA0ICsgMSkgKiAxMDAwKSlcblxuICAgICAgICB0aGlzLnJlc29sdmVzLmdldCgnSU5WQUxJRF9TRVNTSU9OJyk/LihwYWNrZXQpXG4gICAgICAgIHRoaXMucmVzb2x2ZXMuZGVsZXRlKCdJTlZBTElEX1NFU1NJT04nKVxuXG4gICAgICAgIC8vIFdoZW4gcmVzdW1hYmxlIGlzIGZhbHNlIHdlIG5lZWQgdG8gcmUtaWRlbnRpZnlcbiAgICAgICAgaWYgKCFyZXN1bWFibGUpIHtcbiAgICAgICAgICBhd2FpdCB0aGlzLmlkZW50aWZ5KClcblxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIH1cblxuICAgICAgICAvLyBUaGUgc2Vzc2lvbiBpcyBpbnZhbGlkIGJ1dCBhcHBhcmVudGx5IGl0IGlzIHJlc3VtYWJsZVxuICAgICAgICBhd2FpdCB0aGlzLnJlc3VtZSgpXG5cbiAgICAgICAgYnJlYWtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBzd2l0Y2ggKHBhY2tldC50KSB7XG4gICAgICBjYXNlICdSRVNVTUVEJzpcbiAgICAgICAgdGhpcy5zdGF0ZSA9IFNoYXJkU3RhdGUuQ29ubmVjdGVkXG4gICAgICAgIHRoaXMuZXZlbnRzLnJlc3VtZWQ/Lih0aGlzKVxuXG4gICAgICAgIHRoaXMubG9nZ2VyLmRlYnVnKGBbU2hhcmRdIFNoYXJkICMke3RoaXMuaWR9IHJlY2VpdmVkIFJFU1VNRURgKVxuXG4gICAgICAgIC8vIENvbnRpbnVlIHRoZSByZXF1ZXN0cyB3aGljaCBoYXZlIGJlZW4gcXVldWVkIHNpbmNlIHRoZSBzaGFyZCB3ZW50IG9mZmxpbmUuXG4gICAgICAgIHRoaXMub2ZmbGluZVNlbmRRdWV1ZS5mb3JFYWNoKChyZXNvbHZlKSA9PiByZXNvbHZlKCkpXG4gICAgICAgIC8vIFNldHRpbmcgdGhlIGxlbmd0aCB0byAwIHdpbGwgZGVsZXRlIHRoZSBlbGVtZW50cyBpbiBpdFxuICAgICAgICB0aGlzLm9mZmxpbmVTZW5kUXVldWUubGVuZ3RoID0gMFxuXG4gICAgICAgIHRoaXMucmVzb2x2ZXMuZ2V0KCdSRVNVTUVEJyk/LihwYWNrZXQpXG4gICAgICAgIHRoaXMucmVzb2x2ZXMuZGVsZXRlKCdSRVNVTUVEJylcbiAgICAgICAgYnJlYWtcbiAgICAgIGNhc2UgJ1JFQURZJzoge1xuICAgICAgICBjb25zdCBwYXlsb2FkID0gcGFja2V0LmQgYXMgRGlzY29yZFJlYWR5XG4gICAgICAgIHRoaXMuZXZlbnRzLnJlYWR5Py4odGhpcylcblxuICAgICAgICAvLyBJbXBvcnRhbnQgZm9yIGZ1dHVyZSByZXN1bWVzLlxuICAgICAgICB0aGlzLnJlc3VtZUdhdGV3YXlVcmwgPSBwYXlsb2FkLnJlc3VtZV9nYXRld2F5X3VybFxuICAgICAgICB0aGlzLnNlc3Npb25JZCA9IHBheWxvYWQuc2Vzc2lvbl9pZFxuXG4gICAgICAgIHRoaXMuc3RhdGUgPSBTaGFyZFN0YXRlLkNvbm5lY3RlZFxuXG4gICAgICAgIHRoaXMubG9nZ2VyLmRlYnVnKGBbU2hhcmRdIFNoYXJkICMke3RoaXMuaWR9IHJlY2VpdmVkIFJFQURZYClcblxuICAgICAgICAvLyBDb250aW51ZSB0aGUgcmVxdWVzdHMgd2hpY2ggaGF2ZSBiZWVuIHF1ZXVlZCBzaW5jZSB0aGUgc2hhcmQgd2VudCBvZmZsaW5lLlxuICAgICAgICAvLyBJbXBvcnRhbnQgd2hlbiB0aGlzIGlzIGEgcmUtaWRlbnRpZnlcbiAgICAgICAgdGhpcy5vZmZsaW5lU2VuZFF1ZXVlLmZvckVhY2goKHJlc29sdmUpID0+IHJlc29sdmUoKSlcbiAgICAgICAgLy8gU2V0dGluZyB0aGUgbGVuZ3RoIHRvIDAgd2lsbCBkZWxldGUgdGhlIGVsZW1lbnRzIGluIGl0XG4gICAgICAgIHRoaXMub2ZmbGluZVNlbmRRdWV1ZS5sZW5ndGggPSAwXG5cbiAgICAgICAgdGhpcy5yZXNvbHZlcy5nZXQoJ1JFQURZJyk/LihwYWNrZXQpXG4gICAgICAgIHRoaXMucmVzb2x2ZXMuZGVsZXRlKCdSRUFEWScpXG4gICAgICAgIGJyZWFrXG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gVXBkYXRlIHRoZSBzZXF1ZW5jZSBudW1iZXIgaWYgaXQgaXMgcHJlc2VudFxuICAgIC8vIGBzYCBjYW4gYmUgZWl0aGVyIGBudWxsYCBvciBhIGBudW1iZXJgLlxuICAgIC8vIEluIG9yZGVyIHRvIHByZXZlbnQgdXBkYXRlIG1pc3NlcyB3aGVuIGBzYCBpcyBgMGAgd2UgY2hlY2sgYWdhaW5zdCBudWxsLlxuICAgIGlmIChwYWNrZXQucyAhPT0gbnVsbCkge1xuICAgICAgdGhpcy5wcmV2aW91c1NlcXVlbmNlTnVtYmVyID0gcGFja2V0LnNcbiAgICB9XG5cbiAgICB0aGlzLmZvcndhcmRUb0JvdChwYWNrZXQpXG4gIH1cblxuICBmb3J3YXJkVG9Cb3QocGFja2V0OiBEaXNjb3JkR2F0ZXdheVBheWxvYWQpOiB2b2lkIHtcbiAgICAvLyBUaGUgbmVjZXNzYXJ5IGhhbmRsaW5nIHJlcXVpcmVkIGZvciB0aGUgU2hhcmRzIGNvbm5lY3Rpb24gaGFzIGJlZW4gZmluaXNoZWQuXG4gICAgLy8gTm93IHRoZSBldmVudCBjYW4gYmUgc2FmZWx5IGZvcndhcmRlZC5cbiAgICB0aGlzLmV2ZW50cy5tZXNzYWdlPy4odGhpcywgY2FtZWxpemUocGFja2V0KSlcbiAgfVxuXG4gIC8qKlxuICAgKiBPdmVycmlkZSBpbiBvcmRlciB0byBtYWtlIHRoZSBzaGFyZHMgcHJlc2VuY2UuXG4gICAqIGFzeW5jIGluIGNhc2UgZGV2cyBjcmVhdGUgdGhlIHByZXNlbmNlIGJhc2VkIG9uIGVnLiBkYXRhYmFzZSB2YWx1ZXMuXG4gICAqIFBhc3NpbmcgdGhlIHNoYXJkJ3MgaWQgdGhlcmUgdG8gbWFrZSBpdCBlYXNpZXIgZm9yIHRoZSBkZXYgdG8gdXNlIHRoaXMgZnVuY3Rpb24uXG4gICAqL1xuICBhc3luYyBtYWtlUHJlc2VuY2UoKTogUHJvbWlzZTxEaXNjb3JkVXBkYXRlUHJlc2VuY2UgfCB1bmRlZmluZWQ+IHtcbiAgICByZXR1cm5cbiAgfVxuXG4gIC8qKlxuICAgKiBUaGlzIGZ1bmN0aW9uIGNvbW11bmljYXRlcyB3aXRoIHRoZSBtYW5hZ2VtZW50IHByb2Nlc3MsIGluIG9yZGVyIHRvIGtub3cgd2hldGhlciBpdHMgZnJlZSB0byBpZGVudGlmeS5cbiAgICogV2hlbiB0aGlzIGZ1bmN0aW9uIHJlc29sdmVzLCB0aGlzIG1lYW5zIHRoYXQgdGhlIHNoYXJkIGlzIGFsbG93ZWQgdG8gc2VuZCBhbiBpZGVudGlmeSBwYXlsb2FkIHRvIGRpc2NvcmQuXG4gICAqL1xuICBhc3luYyByZXF1ZXN0SWRlbnRpZnkoKTogUHJvbWlzZTx2b2lkPiB7fVxuXG4gIC8qKiBTdGFydCBzZW5kaW5nIGhlYXJ0YmVhdCBwYXlsb2FkcyB0byBEaXNjb3JkIGluIHRoZSBwcm92aWRlZCBpbnRlcnZhbC4gKi9cbiAgc3RhcnRIZWFydGJlYXRpbmcoaW50ZXJ2YWw6IG51bWJlcik6IHZvaWQge1xuICAgIHRoaXMubG9nZ2VyLmRlYnVnKGBbU2hhcmRdIFN0YXJ0IGhlYXJ0YmVhdGluZyBvbiBTaGFyZCAjJHt0aGlzLmlkfWApXG5cbiAgICAvLyBJZiBvbGQgaGVhcnRiZWFzdCBleGlzdCBsaWtlIGFmdGVyIHJlc3VtZSwgY2xlYXIgdGhlIG9sZCBvbmVzLlxuICAgIHRoaXMuc3RvcEhlYXJ0YmVhdGluZygpXG5cbiAgICB0aGlzLmhlYXJ0LmludGVydmFsID0gaW50ZXJ2YWxcblxuICAgIC8vIE9ubHkgc2V0IHRoZSBzaGFyZCdzIHN0YXRlIHRvIGBVbmlkZW50aWZpZWRgXG4gICAgLy8gaWYgaGVhcnRiZWF0aW5nIGhhcyBub3QgYmVlbiBzdGFydGVkIGR1ZSB0byBhbiBpZGVudGlmeSBvciByZXN1bWUgYWN0aW9uLlxuICAgIGlmIChbU2hhcmRTdGF0ZS5EaXNjb25uZWN0ZWQsIFNoYXJkU3RhdGUuT2ZmbGluZV0uaW5jbHVkZXModGhpcy5zdGF0ZSkpIHtcbiAgICAgIHRoaXMubG9nZ2VyLmRlYnVnKGBbU2hhcmRdIFNoYXJkIGlzIGRpc2Nvbm5lY3RlZCBvciBvZmZsaW5lIGJ1dCB0aGUgaGVhcnRiZWF0IHdhcyBzdGFydGVkICMke3RoaXMuaWR9YClcbiAgICAgIHRoaXMuc3RhdGUgPSBTaGFyZFN0YXRlLlVuaWRlbnRpZmllZFxuICAgIH1cblxuICAgIC8vIFRoZSBmaXJzdCBoZWFydGJlYXQgbmVlZHMgdG8gYmUgc2VuZCB3aXRoIGEgcmFuZG9tIGRlbGF5IGJldHdlZW4gYDBgIGFuZCBgaW50ZXJ2YWxgXG4gICAgLy8gVXNpbmcgYSBgc2V0VGltZW91dChfLCBqaXR0ZXIpYCBoZXJlIHRvIGFjY29tcGxpc2ggdGhhdC5cbiAgICAvLyBgTWF0aC5yYW5kb20oKWAgY2FuIGJlIGAwYCBzbyB3ZSB1c2UgYDAuNWAgaWYgdGhpcyBoYXBwZW5zXG4gICAgLy8gUmVmZXJlbmNlOiBodHRwczovL2Rpc2NvcmQuY29tL2RldmVsb3BlcnMvZG9jcy90b3BpY3MvZ2F0ZXdheSNoZWFydGJlYXRpbmdcbiAgICBjb25zdCBqaXR0ZXIgPSBNYXRoLmNlaWwodGhpcy5oZWFydC5pbnRlcnZhbCAqIChNYXRoLnJhbmRvbSgpIHx8IDAuNSkpXG5cbiAgICB0aGlzLmhlYXJ0LnRpbWVvdXRJZCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhpcy5sb2dnZXIuZGVidWcoYFtTaGFyZF0gQmVnaW5uaW5nIGhlYXJ0YmVhdGluZyBwcm9jZXNzIGZvciBTaGFyZCAjJHt0aGlzLmlkfWApXG5cbiAgICAgIGlmICghdGhpcy5pc09wZW4oKSkgcmV0dXJuXG5cbiAgICAgIHRoaXMubG9nZ2VyLmRlYnVnKGBbU2hhcmRdIEhlYXJ0YmVhdGluZyBvbiBTaGFyZCAjJHt0aGlzLmlkfS4gUHJldmlvdXMgc2VxdWVuY2UgbnVtYmVyOiAke3RoaXMucHJldmlvdXNTZXF1ZW5jZU51bWJlcn1gKVxuXG4gICAgICAvLyBVc2luZyBhIGRpcmVjdCBzb2NrZXQuc2VuZCBjYWxsIGhlcmUgYmVjYXVzZSBoZWFydGJlYXQgcmVxdWVzdHMgYXJlIHJlc2VydmVkIGJ5IHVzLlxuICAgICAgdGhpcy5zb2NrZXQ/LnNlbmQoXG4gICAgICAgIEpTT04uc3RyaW5naWZ5KHtcbiAgICAgICAgICBvcDogR2F0ZXdheU9wY29kZXMuSGVhcnRiZWF0LFxuICAgICAgICAgIGQ6IHRoaXMucHJldmlvdXNTZXF1ZW5jZU51bWJlcixcbiAgICAgICAgfSksXG4gICAgICApXG5cbiAgICAgIHRoaXMuaGVhcnQubGFzdEJlYXQgPSBEYXRlLm5vdygpXG4gICAgICB0aGlzLmhlYXJ0LmFja25vd2xlZGdlZCA9IGZhbHNlXG5cbiAgICAgIC8vIEFmdGVyIHRoZSByYW5kb20gaGVhcnRiZWF0IGppdHRlciB3ZSBjYW4gc3RhcnQgYSBub3JtYWwgaW50ZXJ2YWwuXG4gICAgICB0aGlzLmhlYXJ0LmludGVydmFsSWQgPSBzZXRJbnRlcnZhbChhc3luYyAoKSA9PiB7XG4gICAgICAgIGlmICghdGhpcy5pc09wZW4oKSkge1xuICAgICAgICAgIHRoaXMubG9nZ2VyLmRlYnVnKGBbU2hhcmRdIFNoYXJkICMke3RoaXMuaWR9IGlzIG5vdCBvcGVuLCBidXQgYXR0ZW1wdGVkIGhlYXJ0YmVhdCwgaWdub3JpbmcuYClcbiAgICAgICAgICByZXR1cm5cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFRoZSBTaGFyZCBkaWQgbm90IHJlY2VpdmUgYSBoZWFydGJlYXQgQUNLIGZyb20gRGlzY29yZCBpbiB0aW1lLFxuICAgICAgICAvLyB0aGVyZWZvcmUgd2UgaGF2ZSB0byBhc3N1bWUgdGhhdCB0aGUgY29ubmVjdGlvbiBoYXMgZmFpbGVkIG9yIGdvdCBcInpvbWJpZWRcIi5cbiAgICAgICAgLy8gVGhlIFNoYXJkIG5lZWRzIHRvIHN0YXJ0IGEgcmUtaWRlbnRpZnkgYWN0aW9uIGFjY29yZGluZ2x5LlxuICAgICAgICAvLyBSZWZlcmVuY2U6IGh0dHBzOi8vZGlzY29yZC5jb20vZGV2ZWxvcGVycy9kb2NzL3RvcGljcy9nYXRld2F5I2hlYXJ0YmVhdGluZy1leGFtcGxlLWdhdGV3YXktaGVhcnRiZWF0LWFja1xuICAgICAgICBpZiAoIXRoaXMuaGVhcnQuYWNrbm93bGVkZ2VkKSB7XG4gICAgICAgICAgdGhpcy5sb2dnZXIuZGVidWcoYFtTaGFyZF0gSGVhcnRiZWF0IG5vdCBhY2tub3dsZWRnZWQgZm9yIFNoYXJkICMke3RoaXMuaWR9LiBBc3N1bWluZyB6b21iaWVkIGNvbm5lY3Rpb24uYClcbiAgICAgICAgICBhd2FpdCB0aGlzLmNsb3NlKFNoYXJkU29ja2V0Q2xvc2VDb2Rlcy5ab21iaWVkQ29ubmVjdGlvbiwgJ1pvbWJpZWQgY29ubmVjdGlvbiwgZGlkIG5vdCByZWNlaXZlIGFuIGhlYXJ0YmVhdCBBQ0sgaW4gdGltZS4nKVxuICAgICAgICAgIHJldHVyblxuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5sb2dnZXIuZGVidWcoYFtTaGFyZF0gSGVhcnRiZWF0aW5nIG9uIFNoYXJkICMke3RoaXMuaWR9LiBQcmV2aW91cyBzZXF1ZW5jZSBudW1iZXI6ICR7dGhpcy5wcmV2aW91c1NlcXVlbmNlTnVtYmVyfWApXG5cbiAgICAgICAgLy8gVXNpbmcgYSBkaXJlY3Qgc29ja2V0LnNlbmQgY2FsbCBoZXJlIGJlY2F1c2UgaGVhcnRiZWF0IHJlcXVlc3RzIGFyZSByZXNlcnZlZCBieSB1cy5cbiAgICAgICAgdGhpcy5zb2NrZXQ/LnNlbmQoXG4gICAgICAgICAgSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgICAgICAgb3A6IEdhdGV3YXlPcGNvZGVzLkhlYXJ0YmVhdCxcbiAgICAgICAgICAgIGQ6IHRoaXMucHJldmlvdXNTZXF1ZW5jZU51bWJlcixcbiAgICAgICAgICB9KSxcbiAgICAgICAgKVxuXG4gICAgICAgIHRoaXMuaGVhcnQubGFzdEJlYXQgPSBEYXRlLm5vdygpXG4gICAgICAgIHRoaXMuaGVhcnQuYWNrbm93bGVkZ2VkID0gZmFsc2VcblxuICAgICAgICB0aGlzLmV2ZW50cy5oZWFydGJlYXQ/Lih0aGlzKVxuICAgICAgfSwgdGhpcy5oZWFydC5pbnRlcnZhbClcbiAgICB9LCBqaXR0ZXIpXG4gIH1cblxuICAvKiogU3RvcCB0aGUgaGVhcnRiZWF0aW5nIHByb2Nlc3Mgd2l0aCBkaXNjb3JkLiAqL1xuICBzdG9wSGVhcnRiZWF0aW5nKCk6IHZvaWQge1xuICAgIC8vIENsZWFyIHRoZSByZWd1bGFyIGhlYXJ0YmVhdCBpbnRlcnZhbC5cbiAgICBjbGVhckludGVydmFsKHRoaXMuaGVhcnQuaW50ZXJ2YWxJZClcbiAgICAvLyBJdCdzIHBvc3NpYmxlIHRoYXQgdGhlIFNoYXJkIGdvdCBjbG9zZWQgYmVmb3JlIHRoZSBmaXJzdCBqaXR0ZXJlZCBoZWFydGJlYXQuXG4gICAgLy8gVG8gZ28gc2FmZSB3ZSBzaG91bGQgY2xlYXIgdGhlIHJlbGF0ZWQgdGltZW91dCB0b28uXG4gICAgY2xlYXJUaW1lb3V0KHRoaXMuaGVhcnQudGltZW91dElkKVxuICB9XG59XG5cbi8qKiBDaGVjayBpZiB0aGUgYnVmZmVyIGVuZHMgd2l0aCB0aGUgbWFya2VyICovXG5mdW5jdGlvbiBlbmRzV2l0aE1hcmtlcihidWZmZXI6IFVpbnQ4QXJyYXksIG1hcmtlcjogVWludDhBcnJheSkge1xuICBpZiAoYnVmZmVyLmxlbmd0aCA8IG1hcmtlci5sZW5ndGgpIHJldHVybiBmYWxzZVxuXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgbWFya2VyLmxlbmd0aDsgaSsrKSB7XG4gICAgaWYgKGJ1ZmZlcltidWZmZXIubGVuZ3RoIC0gbWFya2VyLmxlbmd0aCArIGldICE9PSBtYXJrZXJbaV0pIHJldHVybiBmYWxzZVxuICB9XG5cbiAgcmV0dXJuIHRydWVcbn1cblxuZXhwb3J0IGludGVyZmFjZSBTaGFyZENyZWF0ZU9wdGlvbnMge1xuICAvKiogVGhlIHNoYXJkIGlkICovXG4gIGlkOiBudW1iZXJcbiAgLyoqIFRoZSBjb25uZWN0aW9uIGRldGFpbHMgKi9cbiAgY29ubmVjdGlvbjogU2hhcmRHYXRld2F5Q29uZmlnXG4gIC8qKiBUaGUgZXZlbnQgaGFuZGxlcnMgZm9yIGV2ZW50cyBvbiB0aGUgc2hhcmQuICovXG4gIGV2ZW50czogU2hhcmRFdmVudHNcbiAgLyoqIFRoZSBsb2dnZXIgZm9yIHRoZSBzaGFyZCAqL1xuICBsb2dnZXI/OiBQaWNrPHR5cGVvZiBsb2dnZXIsICdkZWJ1ZycgfCAnaW5mbycgfCAnd2FybicgfCAnZXJyb3InIHwgJ2ZhdGFsJz5cbiAgLyoqIFRoZSBoYW5kbGVyIHRvIHJlcXVlc3QgYSBzcGFjZSB0byBtYWtlIGFuIGlkZW50aWZ5IHJlcXVlc3QuICovXG4gIHJlcXVlc3RJZGVudGlmeT86ICgpID0+IFByb21pc2U8dm9pZD5cbiAgLyoqIEZ1bmN0aW9uIHRvIGNyZWF0ZSB0aGUgYm90IHN0YXR1cyB0byBzZW5kIG9uIElkZW50aWZ5IHJlcXVlc3RzICovXG4gIG1ha2VQcmVzZW5jZT86ICgpID0+IFByb21pc2U8RGlzY29yZFVwZGF0ZVByZXNlbmNlIHwgdW5kZWZpbmVkPlxufVxuXG5leHBvcnQgZGVmYXVsdCBEaXNjb3JkZW5vU2hhcmRcbiJdLCJuYW1lcyI6WyJCdWZmZXIiLCJ6bGliIiwiR2F0ZXdheUNsb3NlRXZlbnRDb2RlcyIsIkdhdGV3YXlPcGNvZGVzIiwiY2FtZWxpemUiLCJkZWxheSIsIkxlYWt5QnVja2V0IiwibG9nZ2VyIiwiTm9kZVdlYlNvY2tldCIsIlNoYXJkU29ja2V0Q2xvc2VDb2RlcyIsIlNoYXJkU3RhdGUiLCJUcmFuc3BvcnRDb21wcmVzc2lvbiIsIlpMSUJfU1lOQ19GTFVTSCIsIlVpbnQ4QXJyYXkiLCJmenN0ZCIsImdldEZaU3RkIiwiRGlzY29yZGVub1NoYXJkIiwib3B0aW9ucyIsIm1heFJlcXVlc3RzUGVyUmF0ZUxpbWl0VGljayIsInByZXZpb3VzU2VxdWVuY2VOdW1iZXIiLCJyYXRlTGltaXRSZXNldEludGVydmFsIiwic3RhdGUiLCJPZmZsaW5lIiwicmVzdW1lR2F0ZXdheVVybCIsImV2ZW50cyIsIm9mZmxpbmVTZW5kUXVldWUiLCJyZXNvbHZlcyIsIk1hcCIsImdvaW5nT2ZmbGluZSIsInRleHREZWNvZGVyIiwiVGV4dERlY29kZXIiLCJpbmZsYXRlQnVmZmVyIiwiZGVjb21wcmVzc2lvblByb21pc2VzUXVldWUiLCJpZCIsImNvbm5lY3Rpb24iLCJoZWFydCIsImFja25vd2xlZGdlZCIsImludGVydmFsIiwicmVxdWVzdElkZW50aWZ5IiwibWFrZVByZXNlbmNlIiwiYnVja2V0IiwibWF4IiwiY2FsY3VsYXRlU2FmZVJlcXVlc3RzIiwicmVmaWxsQW1vdW50IiwicmVmaWxsSW50ZXJ2YWwiLCJnYXRld2F5Q29uZmlnIiwiY29ubmVjdGlvblVybCIsInVybCIsInNhZmVSZXF1ZXN0cyIsIk1hdGgiLCJjZWlsIiwiY2hlY2tPZmZsaW5lIiwiaGlnaFByaW9yaXR5IiwiaXNPcGVuIiwiUHJvbWlzZSIsInJlc29sdmUiLCJ1bnNoaWZ0IiwicHVzaCIsImNsb3NlIiwiY29kZSIsInJlYXNvbiIsImRlYnVnIiwic29ja2V0IiwicmVhZHlTdGF0ZSIsIk9QRU4iLCJOb3JtYWxDbG9zdXJlIiwiR29pbmdBd2F5IiwicHJvbWlzZSIsInJlc29sdmVBZnRlckNsb3NlIiwidW5kZWZpbmVkIiwiY29ubmVjdCIsIklkZW50aWZ5aW5nIiwiUmVzdW1pbmciLCJpbmNsdWRlcyIsIkNvbm5lY3RpbmciLCJjb25uZWN0aW5nIiwiVVJMIiwic2VhcmNoUGFyYW1zIiwic2V0IiwidmVyc2lvbiIsInRvU3RyaW5nIiwidHJhbnNwb3J0Q29tcHJlc3Npb24iLCJpbmZsYXRlIiwiY3JlYXRlSW5mbGF0ZSIsImZpbmlzaEZsdXNoIiwiY29uc3RhbnRzIiwiWl9TWU5DX0ZMVVNIIiwiY2h1bmtTaXplIiwib24iLCJlIiwiZXJyb3IiLCJkYXRhIiwibmV3QnVmZmVyIiwiYnl0ZUxlbmd0aCIsInpzdGQiLCJjcmVhdGVac3RkRGVjb21wcmVzcyIsImNhdGNoIiwid2FybiIsImRlbGV0ZSIsInpzdGREZWNvbXByZXNzIiwiRGVjb21wcmVzcyIsImRlY29kZWREYXRhIiwiZGVjb2RlIiwicGFyc2VkRGF0YSIsIkpTT04iLCJwYXJzZSIsInNoaWZ0IiwiY29tcHJlc3MiLCJzaG91bGRVc2VCdWlsdGluIiwiUmVmbGVjdCIsImhhcyIsImdsb2JhbFRoaXMiLCJXZWJTb2NrZXQiLCJiaW5hcnlUeXBlIiwib25lcnJvciIsImV2ZW50IiwiaGFuZGxlRXJyb3IiLCJvbmNsb3NlIiwiY2xvc2VFdmVudCIsImhhbmRsZUNsb3NlIiwib25tZXNzYWdlIiwibWVzc2FnZUV2ZW50IiwiaGFuZGxlTWVzc2FnZSIsIm9ub3BlbiIsIlVuaWRlbnRpZmllZCIsImNvbm5lY3RlZCIsImlkZW50aWZ5IiwiYnlwYXNzUmVxdWVzdCIsIlJlSWRlbnRpZnlpbmciLCJpZGVudGlmeWluZyIsInNlbmQiLCJvcCIsIklkZW50aWZ5IiwiZCIsInRva2VuIiwicHJvcGVydGllcyIsImludGVudHMiLCJzaGFyZCIsInRvdGFsU2hhcmRzIiwicHJlc2VuY2UiLCJyZXN1bWUiLCJSZXN1bWVDbG9zaW5nT2xkQ29ubmVjdGlvbiIsInNlc3Npb25JZCIsIlJlc3VtZSIsInNlc3Npb25faWQiLCJzZXEiLCJtZXNzYWdlIiwiYWNxdWlyZSIsInN0cmluZ2lmeSIsInNodXRkb3duIiwiU2h1dGRvd24iLCJzdG9wSGVhcnRiZWF0aW5nIiwiVGVzdGluZ0ZpbmlzaGVkIiwiZGlzY29ubmVjdGVkIiwiUmVzaGFyZGVkIiwiRGlzY29ubmVjdGVkIiwiQXV0aGVudGljYXRpb25GYWlsZWQiLCJJbnZhbGlkU2hhcmQiLCJTaGFyZGluZ1JlcXVpcmVkIiwiSW52YWxpZEFwaVZlcnNpb24iLCJJbnZhbGlkSW50ZW50cyIsIkRpc2FsbG93ZWRJbnRlbnRzIiwiRXJyb3IiLCJOb3RBdXRoZW50aWNhdGVkIiwiSW52YWxpZFNlcSIsIlNlc3Npb25UaW1lZE91dCIsIlVua25vd25FcnJvciIsIlVua25vd25PcGNvZGUiLCJEZWNvZGVFcnJvciIsIlJhdGVMaW1pdGVkIiwiQWxyZWFkeUF1dGhlbnRpY2F0ZWQiLCJpc0NvbXByZXNzZWQiLCJBcnJheUJ1ZmZlciIsImRlY29tcHJlc3NQYWNrZXQiLCJoYW5kbGVEaXNjb3JkUGFja2V0IiwiY29tcHJlc3NlZERhdGEiLCJmYXRhbCIsIndyaXRlUHJvbWlzZSIsInJlamVjdCIsIndyaXRlIiwiZW5kc1dpdGhNYXJrZXIiLCJkZWNvbXByZXNzaW9uUHJvbWlzZSIsInIiLCJkZWNvbXByZXNzIiwiZGVjb21wcmVzc2VkIiwiaW5mbGF0ZVN5bmMiLCJwYWNrZXQiLCJsYXN0QWNrIiwiRGF0ZSIsIm5vdyIsIkhlYXJ0YmVhdCIsImxhc3RCZWF0IiwiaGVhcnRiZWF0IiwiSGVsbG8iLCJoZWFydGJlYXRfaW50ZXJ2YWwiLCJzdGFydEhlYXJ0YmVhdGluZyIsImN1cnJlbnRRdWV1ZSIsInF1ZXVlIiwiaGVsbG8iLCJIZWFydGJlYXRBQ0siLCJydHQiLCJoZWFydGJlYXRBY2siLCJSZWNvbm5lY3QiLCJyZXF1ZXN0ZWRSZWNvbm5lY3QiLCJJbnZhbGlkU2Vzc2lvbiIsInJlc3VtYWJsZSIsImludmFsaWRTZXNzaW9uIiwiZmxvb3IiLCJyYW5kb20iLCJnZXQiLCJ0IiwiQ29ubmVjdGVkIiwicmVzdW1lZCIsImZvckVhY2giLCJsZW5ndGgiLCJwYXlsb2FkIiwicmVhZHkiLCJyZXN1bWVfZ2F0ZXdheV91cmwiLCJzIiwiZm9yd2FyZFRvQm90Iiwiaml0dGVyIiwidGltZW91dElkIiwic2V0VGltZW91dCIsImludGVydmFsSWQiLCJzZXRJbnRlcnZhbCIsIlpvbWJpZWRDb25uZWN0aW9uIiwiY2xlYXJJbnRlcnZhbCIsImNsZWFyVGltZW91dCIsImJ1ZmZlciIsIm1hcmtlciIsImkiXSwibWFwcGluZ3MiOiJBQUFBLFNBQVNBLE1BQU0sUUFBUSxjQUFhO0FBQ3BDLE9BQU9DLFVBQVUsWUFBVztBQUU1QixTQUFTQyxzQkFBc0IsRUFBRUMsY0FBYyxRQUFRLG9CQUFtQjtBQUMxRSxTQUFTQyxRQUFRLEVBQUVDLEtBQUssRUFBRUMsV0FBVyxFQUFFQyxNQUFNLFFBQVEsb0JBQW1CO0FBRXhFLE9BQU9DLG1CQUFtQixLQUFJO0FBQzlCLFNBSUVDLHFCQUFxQixFQUVyQkMsVUFBVSxFQUNWQyxvQkFBb0IsUUFDZixhQUFZO0FBRW5CLE1BQU1DLGtCQUFrQixJQUFJQyxXQUFXO0lBQUM7SUFBSztJQUFLO0lBQU07Q0FBSztBQUU3RCxJQUFJQztBQUVKLHdFQUF3RSxHQUN4RSxlQUFlQztJQUNiLE9BQVFELFVBQVUsTUFBTSxNQUFNLENBQUM7QUFDakM7QUFFQSxPQUFPLE1BQU1FO0lBMkRYLFlBQVlDLE9BQTJCLENBQUU7UUFwRHpDLDBIQUEwSCxRQUMxSEMsOEJBQXNDO1FBQ3RDLDBDQUEwQyxRQUMxQ0MseUJBQXdDO1FBQ3hDLDRFQUE0RSxRQUM1RUMseUJBQWlDO1FBS2pDLHdDQUF3QyxRQUN4Q0MsUUFBUVgsV0FBV1ksT0FBTztRQUMxQixpRkFBaUYsUUFDakZDLG1CQUEyQjtRQUMzQixzQ0FBc0MsUUFDdENDLFNBQXNCLENBQUM7UUFDdkIsbUdBQW1HLFFBQ25HQyxtQkFBbUMsRUFBRTtRQUNyQyxpRkFBaUYsUUFDakZDLFdBQVcsSUFBSUM7UUFLZjs7Ozs7Ozs7R0FRQyxRQUNEQyxlQUFlO1FBQ2YsK0NBQStDLFFBQy9DQyxjQUFjLElBQUlDO1FBR2xCLHlCQUF5QixRQUN6QkMsZ0JBQW1DO1FBR25DLHNEQUFzRCxR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
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@discordeno/gateway",
3
- "version": "22.0.1-next.c7074d7",
3
+ "version": "22.0.1-next.dea32e8",
4
4
  "exports": "./dist/index.js",
5
5
  "type": "module",
6
6
  "license": "Apache-2.0",
@@ -27,17 +27,17 @@
27
27
  "test:test-type": "tsc --project tests/tsconfig.json"
28
28
  },
29
29
  "dependencies": {
30
- "@discordeno/types": "22.0.1-next.c7074d7",
31
- "@discordeno/utils": "22.0.1-next.c7074d7",
30
+ "@discordeno/types": "22.0.1-next.dea32e8",
31
+ "@discordeno/utils": "22.0.1-next.dea32e8",
32
32
  "ws": "^8.18.3"
33
33
  },
34
34
  "optionalDependencies": {
35
35
  "fzstd": "^0.1.1"
36
36
  },
37
37
  "devDependencies": {
38
- "@biomejs/biome": "2.1.4",
38
+ "@biomejs/biome": "2.2.2",
39
39
  "@swc/cli": "^0.7.8",
40
- "@swc/core": "^1.13.3",
40
+ "@swc/core": "^1.13.5",
41
41
  "@types/chai": "^5.2.2",
42
42
  "@types/mocha": "^10.0.10",
43
43
  "@types/node": "^24.2.1",