@bitgo/sdk-coin-xrp 3.6.7 → 3.6.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -3,6 +3,10 @@
3
3
  All notable changes to this project will be documented in this file.
4
4
  See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
5
5
 
6
+ ## [3.6.8](https://github.com/BitGo/BitGoJS/compare/@bitgo/sdk-coin-xrp@3.6.7...@bitgo/sdk-coin-xrp@3.6.8) (2024-12-19)
7
+
8
+ **Note:** Version bump only for package @bitgo/sdk-coin-xrp
9
+
6
10
  ## [3.6.7](https://github.com/BitGo/BitGoJS/compare/@bitgo/sdk-coin-xrp@3.6.5...@bitgo/sdk-coin-xrp@3.6.7) (2024-12-17)
7
11
 
8
12
  **Note:** Version bump only for package @bitgo/sdk-coin-xrp
@@ -76,10 +76,9 @@ class KeyPair extends sdk_core_1.Secp256k1ExtendedKeyPair {
76
76
  }
77
77
  /** @inheritdoc */
78
78
  getKeys() {
79
- var _a;
80
79
  return {
81
80
  pub: this.getPublicKey({ compressed: true }).toString('hex'),
82
- prv: (_a = this.getPrivateKey()) === null || _a === void 0 ? void 0 : _a.toString('hex'),
81
+ prv: this.getPrivateKey()?.toString('hex'),
83
82
  };
84
83
  }
85
84
  /** @inheritdoc */
@@ -116,4 +115,4 @@ class KeyPair extends sdk_core_1.Secp256k1ExtendedKeyPair {
116
115
  }
117
116
  }
118
117
  exports.KeyPair = KeyPair;
119
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoia2V5UGFpci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9saWIva2V5UGFpci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSw4Q0FPeUI7QUFDekIsOENBQXdDO0FBQ3hDLG1DQUFxQztBQUNyQywyQ0FBNkI7QUFDN0Isb0RBQTRCO0FBRTVCLE1BQU0sdUJBQXVCLEdBQUcsRUFBRSxDQUFDO0FBRW5DOztHQUVHO0FBQ0gsTUFBYSxPQUFRLFNBQVEsbUNBQXdCO0lBQ25EOzs7O09BSUc7SUFDSCxZQUFZLE1BQXVCO1FBQ2pDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUNkLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUNaLE1BQU0sSUFBSSxHQUFHLElBQUEsb0JBQVcsRUFBQyx1QkFBdUIsQ0FBQyxDQUFDO1lBQ2xELElBQUksQ0FBQyxNQUFNLEdBQUcsZ0JBQUssQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDckMsQ0FBQzthQUFNLElBQUksSUFBQSxpQkFBTSxFQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUM7WUFDMUIsSUFBSSxDQUFDLE1BQU0sR0FBRyxnQkFBSyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDNUMsQ0FBQzthQUFNLElBQUksSUFBQSx1QkFBWSxFQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUM7WUFDaEMsS0FBSyxDQUFDLHdCQUF3QixDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUM3QyxDQUFDO2FBQU0sSUFBSSxJQUFBLHNCQUFXLEVBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQztZQUMvQixLQUFLLENBQUMsdUJBQXVCLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQzVDLENBQUM7YUFBTSxDQUFDO1lBQ04sTUFBTSxJQUFJLEtBQUssQ0FBQywwQkFBMEIsQ0FBQyxDQUFDO1FBQzlDLENBQUM7UUFFRCxJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUNoQixJQUFJLENBQUMsT0FBTyxHQUFHLG1DQUF3QixDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDakUsQ0FBQztJQUNILENBQUM7SUFFRCxrQkFBa0I7SUFDbEIsT0FBTzs7UUFDTCxPQUFPO1lBQ0wsR0FBRyxFQUFFLElBQUksQ0FBQyxZQUFZLENBQUMsRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDO1lBQzVELEdBQUcsRUFBRSxNQUFBLElBQUksQ0FBQyxhQUFhLEVBQUUsMENBQUUsUUFBUSxDQUFDLEtBQUssQ0FBQztTQUMzQyxDQUFDO0lBQ0osQ0FBQztJQUVELGtCQUFrQjtJQUNsQixVQUFVO1FBQ1IsT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNoRCxDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0gsV0FBVyxDQUFDLE9BQWU7UUFDekIsTUFBTSxhQUFhLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDM0QsTUFBTSxFQUFFLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUMvQixJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7WUFDVCxNQUFNLElBQUksS0FBSyxDQUFDLHFCQUFxQixDQUFDLENBQUM7UUFDekMsQ0FBQztRQUNELE1BQU0sU0FBUyxHQUFHLGVBQUssQ0FBQyxVQUFVLENBQUMsYUFBYSxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQ3ZELE9BQU8sTUFBTSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDdkMsQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNILGVBQWUsQ0FBQyxPQUFlLEVBQUUsU0FBaUI7UUFDaEQsTUFBTSxlQUFlLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDN0QsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDLEdBQUcsQ0FBQztRQUNsQyxPQUFPLGVBQUssQ0FBQyxlQUFlLENBQUMsZUFBZSxFQUFFLE1BQU0sRUFBRSxTQUFTLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7SUFDbkYsQ0FBQztDQUNGO0FBcEVELDBCQW9FQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIERlZmF1bHRLZXlzLFxuICBpc1ByaXZhdGVLZXksXG4gIGlzUHVibGljS2V5LFxuICBpc1NlZWQsXG4gIEtleVBhaXJPcHRpb25zLFxuICBTZWNwMjU2azFFeHRlbmRlZEtleVBhaXIsXG59IGZyb20gJ0BiaXRnby9zZGstY29yZSc7XG5pbXBvcnQgeyBiaXAzMiB9IGZyb20gJ0BiaXRnby91dHhvLWxpYic7XG5pbXBvcnQgeyByYW5kb21CeXRlcyB9IGZyb20gJ2NyeXB0byc7XG5pbXBvcnQgKiBhcyB4cnBsIGZyb20gJ3hycGwnO1xuaW1wb3J0IHV0aWxzIGZyb20gJy4vdXRpbHMnO1xuXG5jb25zdCBERUZBVUxUX1NFRURfU0laRV9CWVRFUyA9IDMyO1xuXG4vKipcbiAqIFhSUCBrZXlzIGFuZCBhZGRyZXNzIG1hbmFnZW1lbnQuXG4gKi9cbmV4cG9ydCBjbGFzcyBLZXlQYWlyIGV4dGVuZHMgU2VjcDI1NmsxRXh0ZW5kZWRLZXlQYWlyIHtcbiAgLyoqXG4gICAqIFB1YmxpYyBjb25zdHJ1Y3Rvci4gQnkgZGVmYXVsdCwgY3JlYXRlcyBhIGtleSBwYWlyIHdpdGggYSByYW5kb20gbWFzdGVyIHNlZWQuXG4gICAqXG4gICAqIEBwYXJhbSB7S2V5UGFpck9wdGlvbnN9IHNvdXJjZSBFaXRoZXIgYSBtYXN0ZXIgc2VlZCwgYSBwcml2YXRlIGtleSwgb3IgYSBwdWJsaWMga2V5XG4gICAqL1xuICBjb25zdHJ1Y3Rvcihzb3VyY2U/OiBLZXlQYWlyT3B0aW9ucykge1xuICAgIHN1cGVyKHNvdXJjZSk7XG4gICAgaWYgKCFzb3VyY2UpIHtcbiAgICAgIGNvbnN0IHNlZWQgPSByYW5kb21CeXRlcyhERUZBVUxUX1NFRURfU0laRV9CWVRFUyk7XG4gICAgICB0aGlzLmhkTm9kZSA9IGJpcDMyLmZyb21TZWVkKHNlZWQpO1xuICAgIH0gZWxzZSBpZiAoaXNTZWVkKHNvdXJjZSkpIHtcbiAgICAgIHRoaXMuaGROb2RlID0gYmlwMzIuZnJvbVNlZWQoc291cmNlLnNlZWQpO1xuICAgIH0gZWxzZSBpZiAoaXNQcml2YXRlS2V5KHNvdXJjZSkpIHtcbiAgICAgIHN1cGVyLnJlY29yZEtleXNGcm9tUHJpdmF0ZUtleShzb3VyY2UucHJ2KTtcbiAgICB9IGVsc2UgaWYgKGlzUHVibGljS2V5KHNvdXJjZSkpIHtcbiAgICAgIHN1cGVyLnJlY29yZEtleXNGcm9tUHVibGljS2V5KHNvdXJjZS5wdWIpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQga2V5IHBhaXIgb3B0aW9ucycpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmhkTm9kZSkge1xuICAgICAgdGhpcy5rZXlQYWlyID0gU2VjcDI1NmsxRXh0ZW5kZWRLZXlQYWlyLnRvS2V5UGFpcih0aGlzLmhkTm9kZSk7XG4gICAgfVxuICB9XG5cbiAgLyoqIEBpbmhlcml0ZG9jICovXG4gIGdldEtleXMoKTogRGVmYXVsdEtleXMge1xuICAgIHJldHVybiB7XG4gICAgICBwdWI6IHRoaXMuZ2V0UHVibGljS2V5KHsgY29tcHJlc3NlZDogdHJ1ZSB9KS50b1N0cmluZygnaGV4JyksXG4gICAgICBwcnY6IHRoaXMuZ2V0UHJpdmF0ZUtleSgpPy50b1N0cmluZygnaGV4JyksXG4gICAgfTtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdGRvYyAqL1xuICBnZXRBZGRyZXNzKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHhycGwuZGVyaXZlQWRkcmVzcyh0aGlzLmdldEtleXMoKS5wdWIpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdlbmVyYXRlcyBhIHNpZ25hdHVyZSBmb3IgYW4gYXJiaXRyYXJ5IHN0cmluZyB3aXRoIHRoZSBjdXJyZW50IHByaXZhdGUga2V5IHVzaW5nIGtlY2NhazI1NlxuICAgKiBoYXNoaW5nIGFsZ29yaXRobS4gVGhyb3dzIGlmIHRoZXJlIGlzIG5vIHByaXZhdGUga2V5LlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gbWVzc2FnZSB0byBwcm9kdWNlIGEgc2lnbmF0dXJlIGZvclxuICAgKiBAcmV0dXJucyB7QnVmZmVyfSBUaGUgc2lnbmF0dXJlIGFzIGEgYnVmZmVyXG4gICAqL1xuICBzaWduTWVzc2FnZShtZXNzYWdlOiBzdHJpbmcpOiBCdWZmZXIge1xuICAgIGNvbnN0IG1lc3NhZ2VUb1NpZ24gPSBCdWZmZXIuZnJvbShtZXNzYWdlKS50b1N0cmluZygnaGV4Jyk7XG4gICAgY29uc3QgeyBwcnYgfSA9IHRoaXMuZ2V0S2V5cygpO1xuICAgIGlmICghcHJ2KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ01pc3NpbmcgcHJpdmF0ZSBrZXknKTtcbiAgICB9XG4gICAgY29uc3Qgc2lnbmF0dXJlID0gdXRpbHMuc2lnblN0cmluZyhtZXNzYWdlVG9TaWduLCBwcnYpO1xuICAgIHJldHVybiBCdWZmZXIuZnJvbShzaWduYXR1cmUsICdoZXgnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBWZXJpZmllcyBhIG1lc3NhZ2Ugc2lnbmF0dXJlIHVzaW5nIHRoZSBjdXJyZW50IHB1YmxpYyBrZXkuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBtZXNzYWdlIHNpZ25lZFxuICAgKiBAcGFyYW0ge0J1ZmZlcn0gc2lnbmF0dXJlIHRvIHZlcmlmeVxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB0aGUgbWVzc2FnZSB3YXMgc2lnbmVkIHdpdGggdGhlIGN1cnJlbnQga2V5IHBhaXJcbiAgICovXG4gIHZlcmlmeVNpZ25hdHVyZShtZXNzYWdlOiBzdHJpbmcsIHNpZ25hdHVyZTogQnVmZmVyKTogYm9vbGVhbiB7XG4gICAgY29uc3QgbWVzc2FnZVRvVmVyaWZ5ID0gQnVmZmVyLmZyb20obWVzc2FnZSkudG9TdHJpbmcoJ2hleCcpO1xuICAgIGNvbnN0IHB1YktleSA9IHRoaXMuZ2V0S2V5cygpLnB1YjtcbiAgICByZXR1cm4gdXRpbHMudmVyaWZ5U2lnbmF0dXJlKG1lc3NhZ2VUb1ZlcmlmeSwgcHViS2V5LCBzaWduYXR1cmUudG9TdHJpbmcoJ2hleCcpKTtcbiAgfVxufVxuIl19
118
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoia2V5UGFpci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9saWIva2V5UGFpci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSw4Q0FPeUI7QUFDekIsOENBQXdDO0FBQ3hDLG1DQUFxQztBQUNyQywyQ0FBNkI7QUFDN0Isb0RBQTRCO0FBRTVCLE1BQU0sdUJBQXVCLEdBQUcsRUFBRSxDQUFDO0FBRW5DOztHQUVHO0FBQ0gsTUFBYSxPQUFRLFNBQVEsbUNBQXdCO0lBQ25EOzs7O09BSUc7SUFDSCxZQUFZLE1BQXVCO1FBQ2pDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUNkLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUNaLE1BQU0sSUFBSSxHQUFHLElBQUEsb0JBQVcsRUFBQyx1QkFBdUIsQ0FBQyxDQUFDO1lBQ2xELElBQUksQ0FBQyxNQUFNLEdBQUcsZ0JBQUssQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDckMsQ0FBQzthQUFNLElBQUksSUFBQSxpQkFBTSxFQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUM7WUFDMUIsSUFBSSxDQUFDLE1BQU0sR0FBRyxnQkFBSyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDNUMsQ0FBQzthQUFNLElBQUksSUFBQSx1QkFBWSxFQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUM7WUFDaEMsS0FBSyxDQUFDLHdCQUF3QixDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUM3QyxDQUFDO2FBQU0sSUFBSSxJQUFBLHNCQUFXLEVBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQztZQUMvQixLQUFLLENBQUMsdUJBQXVCLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQzVDLENBQUM7YUFBTSxDQUFDO1lBQ04sTUFBTSxJQUFJLEtBQUssQ0FBQywwQkFBMEIsQ0FBQyxDQUFDO1FBQzlDLENBQUM7UUFFRCxJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUNoQixJQUFJLENBQUMsT0FBTyxHQUFHLG1DQUF3QixDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDakUsQ0FBQztJQUNILENBQUM7SUFFRCxrQkFBa0I7SUFDbEIsT0FBTztRQUNMLE9BQU87WUFDTCxHQUFHLEVBQUUsSUFBSSxDQUFDLFlBQVksQ0FBQyxFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUM7WUFDNUQsR0FBRyxFQUFFLElBQUksQ0FBQyxhQUFhLEVBQUUsRUFBRSxRQUFRLENBQUMsS0FBSyxDQUFDO1NBQzNDLENBQUM7SUFDSixDQUFDO0lBRUQsa0JBQWtCO0lBQ2xCLFVBQVU7UUFDUixPQUFPLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ2hELENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDSCxXQUFXLENBQUMsT0FBZTtRQUN6QixNQUFNLGFBQWEsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUMzRCxNQUFNLEVBQUUsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQy9CLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztZQUNULE1BQU0sSUFBSSxLQUFLLENBQUMscUJBQXFCLENBQUMsQ0FBQztRQUN6QyxDQUFDO1FBQ0QsTUFBTSxTQUFTLEdBQUcsZUFBSyxDQUFDLFVBQVUsQ0FBQyxhQUFhLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFDdkQsT0FBTyxNQUFNLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxLQUFLLENBQUMsQ0FBQztJQUN2QyxDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0gsZUFBZSxDQUFDLE9BQWUsRUFBRSxTQUFpQjtRQUNoRCxNQUFNLGVBQWUsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUM3RCxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUMsR0FBRyxDQUFDO1FBQ2xDLE9BQU8sZUFBSyxDQUFDLGVBQWUsQ0FBQyxlQUFlLEVBQUUsTUFBTSxFQUFFLFNBQVMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztJQUNuRixDQUFDO0NBQ0Y7QUFwRUQsMEJBb0VDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgRGVmYXVsdEtleXMsXG4gIGlzUHJpdmF0ZUtleSxcbiAgaXNQdWJsaWNLZXksXG4gIGlzU2VlZCxcbiAgS2V5UGFpck9wdGlvbnMsXG4gIFNlY3AyNTZrMUV4dGVuZGVkS2V5UGFpcixcbn0gZnJvbSAnQGJpdGdvL3Nkay1jb3JlJztcbmltcG9ydCB7IGJpcDMyIH0gZnJvbSAnQGJpdGdvL3V0eG8tbGliJztcbmltcG9ydCB7IHJhbmRvbUJ5dGVzIH0gZnJvbSAnY3J5cHRvJztcbmltcG9ydCAqIGFzIHhycGwgZnJvbSAneHJwbCc7XG5pbXBvcnQgdXRpbHMgZnJvbSAnLi91dGlscyc7XG5cbmNvbnN0IERFRkFVTFRfU0VFRF9TSVpFX0JZVEVTID0gMzI7XG5cbi8qKlxuICogWFJQIGtleXMgYW5kIGFkZHJlc3MgbWFuYWdlbWVudC5cbiAqL1xuZXhwb3J0IGNsYXNzIEtleVBhaXIgZXh0ZW5kcyBTZWNwMjU2azFFeHRlbmRlZEtleVBhaXIge1xuICAvKipcbiAgICogUHVibGljIGNvbnN0cnVjdG9yLiBCeSBkZWZhdWx0LCBjcmVhdGVzIGEga2V5IHBhaXIgd2l0aCBhIHJhbmRvbSBtYXN0ZXIgc2VlZC5cbiAgICpcbiAgICogQHBhcmFtIHtLZXlQYWlyT3B0aW9uc30gc291cmNlIEVpdGhlciBhIG1hc3RlciBzZWVkLCBhIHByaXZhdGUga2V5LCBvciBhIHB1YmxpYyBrZXlcbiAgICovXG4gIGNvbnN0cnVjdG9yKHNvdXJjZT86IEtleVBhaXJPcHRpb25zKSB7XG4gICAgc3VwZXIoc291cmNlKTtcbiAgICBpZiAoIXNvdXJjZSkge1xuICAgICAgY29uc3Qgc2VlZCA9IHJhbmRvbUJ5dGVzKERFRkFVTFRfU0VFRF9TSVpFX0JZVEVTKTtcbiAgICAgIHRoaXMuaGROb2RlID0gYmlwMzIuZnJvbVNlZWQoc2VlZCk7XG4gICAgfSBlbHNlIGlmIChpc1NlZWQoc291cmNlKSkge1xuICAgICAgdGhpcy5oZE5vZGUgPSBiaXAzMi5mcm9tU2VlZChzb3VyY2Uuc2VlZCk7XG4gICAgfSBlbHNlIGlmIChpc1ByaXZhdGVLZXkoc291cmNlKSkge1xuICAgICAgc3VwZXIucmVjb3JkS2V5c0Zyb21Qcml2YXRlS2V5KHNvdXJjZS5wcnYpO1xuICAgIH0gZWxzZSBpZiAoaXNQdWJsaWNLZXkoc291cmNlKSkge1xuICAgICAgc3VwZXIucmVjb3JkS2V5c0Zyb21QdWJsaWNLZXkoc291cmNlLnB1Yik7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBrZXkgcGFpciBvcHRpb25zJyk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuaGROb2RlKSB7XG4gICAgICB0aGlzLmtleVBhaXIgPSBTZWNwMjU2azFFeHRlbmRlZEtleVBhaXIudG9LZXlQYWlyKHRoaXMuaGROb2RlKTtcbiAgICB9XG4gIH1cblxuICAvKiogQGluaGVyaXRkb2MgKi9cbiAgZ2V0S2V5cygpOiBEZWZhdWx0S2V5cyB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHB1YjogdGhpcy5nZXRQdWJsaWNLZXkoeyBjb21wcmVzc2VkOiB0cnVlIH0pLnRvU3RyaW5nKCdoZXgnKSxcbiAgICAgIHBydjogdGhpcy5nZXRQcml2YXRlS2V5KCk/LnRvU3RyaW5nKCdoZXgnKSxcbiAgICB9O1xuICB9XG5cbiAgLyoqIEBpbmhlcml0ZG9jICovXG4gIGdldEFkZHJlc3MoKTogc3RyaW5nIHtcbiAgICByZXR1cm4geHJwbC5kZXJpdmVBZGRyZXNzKHRoaXMuZ2V0S2V5cygpLnB1Yik7XG4gIH1cblxuICAvKipcbiAgICogR2VuZXJhdGVzIGEgc2lnbmF0dXJlIGZvciBhbiBhcmJpdHJhcnkgc3RyaW5nIHdpdGggdGhlIGN1cnJlbnQgcHJpdmF0ZSBrZXkgdXNpbmcga2VjY2FrMjU2XG4gICAqIGhhc2hpbmcgYWxnb3JpdGhtLiBUaHJvd3MgaWYgdGhlcmUgaXMgbm8gcHJpdmF0ZSBrZXkuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBtZXNzYWdlIHRvIHByb2R1Y2UgYSBzaWduYXR1cmUgZm9yXG4gICAqIEByZXR1cm5zIHtCdWZmZXJ9IFRoZSBzaWduYXR1cmUgYXMgYSBidWZmZXJcbiAgICovXG4gIHNpZ25NZXNzYWdlKG1lc3NhZ2U6IHN0cmluZyk6IEJ1ZmZlciB7XG4gICAgY29uc3QgbWVzc2FnZVRvU2lnbiA9IEJ1ZmZlci5mcm9tKG1lc3NhZ2UpLnRvU3RyaW5nKCdoZXgnKTtcbiAgICBjb25zdCB7IHBydiB9ID0gdGhpcy5nZXRLZXlzKCk7XG4gICAgaWYgKCFwcnYpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignTWlzc2luZyBwcml2YXRlIGtleScpO1xuICAgIH1cbiAgICBjb25zdCBzaWduYXR1cmUgPSB1dGlscy5zaWduU3RyaW5nKG1lc3NhZ2VUb1NpZ24sIHBydik7XG4gICAgcmV0dXJuIEJ1ZmZlci5mcm9tKHNpZ25hdHVyZSwgJ2hleCcpO1xuICB9XG5cbiAgLyoqXG4gICAqIFZlcmlmaWVzIGEgbWVzc2FnZSBzaWduYXR1cmUgdXNpbmcgdGhlIGN1cnJlbnQgcHVibGljIGtleS5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IG1lc3NhZ2Ugc2lnbmVkXG4gICAqIEBwYXJhbSB7QnVmZmVyfSBzaWduYXR1cmUgdG8gdmVyaWZ5XG4gICAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHRoZSBtZXNzYWdlIHdhcyBzaWduZWQgd2l0aCB0aGUgY3VycmVudCBrZXkgcGFpclxuICAgKi9cbiAgdmVyaWZ5U2lnbmF0dXJlKG1lc3NhZ2U6IHN0cmluZywgc2lnbmF0dXJlOiBCdWZmZXIpOiBib29sZWFuIHtcbiAgICBjb25zdCBtZXNzYWdlVG9WZXJpZnkgPSBCdWZmZXIuZnJvbShtZXNzYWdlKS50b1N0cmluZygnaGV4Jyk7XG4gICAgY29uc3QgcHViS2V5ID0gdGhpcy5nZXRLZXlzKCkucHViO1xuICAgIHJldHVybiB1dGlscy52ZXJpZnlTaWduYXR1cmUobWVzc2FnZVRvVmVyaWZ5LCBwdWJLZXksIHNpZ25hdHVyZS50b1N0cmluZygnaGV4JykpO1xuICB9XG59XG4iXX0=
@@ -42,7 +42,7 @@ class WalletInitializationBuilder extends transactionBuilder_1.TransactionBuilde
42
42
  if (signerQuorum) {
43
43
  this.signerQuorum(signerQuorum);
44
44
  }
45
- if (signerEntries === null || signerEntries === void 0 ? void 0 : signerEntries.length) {
45
+ if (signerEntries?.length) {
46
46
  signerEntries.forEach((signer) => this.signer({
47
47
  address: signer.SignerEntry.Account,
48
48
  weight: signer.SignerEntry.SignerWeight,
@@ -73,4 +73,4 @@ class WalletInitializationBuilder extends transactionBuilder_1.TransactionBuilde
73
73
  }
74
74
  }
75
75
  exports.WalletInitializationBuilder = WalletInitializationBuilder;
76
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2FsbGV0SW5pdGlhbGl6YXRpb25CdWlsZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xpYi93YWxsZXRJbml0aWFsaXphdGlvbkJ1aWxkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEsOENBQXlFO0FBR3pFLDJDQUEwRTtBQUcxRSw2REFBMEQ7QUFDMUQsb0RBQTRCO0FBRTVCLE1BQWEsMkJBQTRCLFNBQVEsdUNBQWtCO0lBR2pFLFlBQVksV0FBaUM7UUFDM0MsS0FBSyxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBRlgsbUJBQWMsR0FBa0IsRUFBRSxDQUFDO0lBRzdDLENBQUM7SUFFRCxJQUFjLGVBQWU7UUFDM0IsT0FBTywwQkFBZSxDQUFDLG9CQUFvQixDQUFDO0lBQzlDLENBQUM7SUFFRCxJQUFjLGtCQUFrQjtRQUM5QixPQUFPLGVBQWUsQ0FBQztJQUN6QixDQUFDO0lBRUQsWUFBWSxDQUFDLE1BQWM7UUFDekIsSUFBSSxPQUFPLE1BQU0sS0FBSyxRQUFRLElBQUksTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQzdDLE1BQU0sSUFBSSxLQUFLLENBQUMsc0RBQXNELE1BQU0sRUFBRSxDQUFDLENBQUM7UUFDbEYsQ0FBQztRQUNELElBQUksQ0FBQyxhQUFhLEdBQUcsTUFBTSxDQUFDO1FBQzVCLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVELE1BQU0sQ0FBQyxNQUFxQjtRQUMxQixJQUFJLElBQUksQ0FBQyxjQUFjLENBQUMsTUFBTSxHQUFHLHVCQUFXLEVBQUUsQ0FBQztZQUM3QyxNQUFNLElBQUksZ0NBQXFCLENBQUMseUJBQXlCLHVCQUFXLFVBQVUsQ0FBQyxDQUFDO1FBQ2xGLENBQUM7UUFDRCxlQUFLLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQzdCLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDO1lBQ3ZCLFdBQVcsRUFBRSxFQUFFLE9BQU8sRUFBRSxNQUFNLENBQUMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLENBQUMsTUFBTSxFQUFFO1NBQ3RFLENBQUMsQ0FBQztRQUNILE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVELFdBQVcsQ0FBQyxFQUFlO1FBQ3pCLEtBQUssQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDLENBQUM7UUFFdEIsTUFBTSxFQUFFLGFBQWEsRUFBRSxZQUFZLEVBQUUsR0FBRyxFQUFFLENBQUMsTUFBTSxFQUFFLENBQUM7UUFDcEQsSUFBSSxZQUFZLEVBQUUsQ0FBQztZQUNqQixJQUFJLENBQUMsWUFBWSxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQ2xDLENBQUM7UUFFRCxJQUFJLGFBQWEsYUFBYixhQUFhLHVCQUFiLGFBQWEsQ0FBRSxNQUFNLEVBQUUsQ0FBQztZQUMxQixhQUFhLENBQUMsT0FBTyxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FDL0IsSUFBSSxDQUFDLE1BQU0sQ0FBQztnQkFDVixPQUFPLEVBQUUsTUFBTSxDQUFDLFdBQVcsQ0FBQyxPQUFPO2dCQUNuQyxNQUFNLEVBQUUsTUFBTSxDQUFDLFdBQVcsQ0FBQyxZQUFZO2FBQ3hDLENBQUMsQ0FDSCxDQUFDO1FBQ0osQ0FBQztJQUNILENBQUM7SUFFRCxrQkFBa0I7SUFDUixLQUFLLENBQUMsbUJBQW1CO1FBQ2pDLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDbEIsTUFBTSxJQUFJLGdDQUFxQixDQUFDLG9EQUFvRCxDQUFDLENBQUM7UUFDeEYsQ0FBQztRQUNELElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxJQUFJLElBQUksQ0FBQyxhQUFhLEdBQUcsNkJBQWlCLEVBQUUsQ0FBQztZQUNsRSxNQUFNLElBQUksZ0NBQXFCLENBQUMsMkRBQTJELENBQUMsQ0FBQztRQUMvRixDQUFDO1FBQ0QsSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztZQUN6QixNQUFNLElBQUksZ0NBQXFCLENBQUMscURBQXFELENBQUMsQ0FBQztRQUN6RixDQUFDO1FBRUQsSUFBSSxJQUFJLENBQUMsY0FBYyxDQUFDLE1BQU0sR0FBRyx1QkFBVyxJQUFJLElBQUksQ0FBQyxjQUFjLENBQUMsTUFBTSxHQUFHLHVCQUFXLEVBQUUsQ0FBQztZQUN6RixNQUFNLElBQUksZ0NBQXFCLENBQUMsMkJBQTJCLHVCQUFXLFFBQVEsdUJBQVcsRUFBRSxDQUFDLENBQUM7UUFDL0YsQ0FBQztRQUVELElBQUksQ0FBQyxlQUFlLEdBQUc7WUFDckIsZUFBZSxFQUFFLElBQUksQ0FBQyxrQkFBa0I7WUFDeEMsT0FBTyxFQUFFLElBQUksQ0FBQyxPQUFPO1lBQ3JCLFlBQVksRUFBRSxJQUFJLENBQUMsYUFBYTtZQUNoQyxhQUFhLEVBQUUsSUFBSSxDQUFDLGNBQWM7U0FDbkMsQ0FBQztRQUNGLE9BQU8sTUFBTSxLQUFLLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztJQUMzQyxDQUFDO0NBQ0Y7QUE1RUQsa0VBNEVDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQnVpbGRUcmFuc2FjdGlvbkVycm9yLCBUcmFuc2FjdGlvblR5cGUgfSBmcm9tICdAYml0Z28vc2RrLWNvcmUnO1xuaW1wb3J0IHsgQmFzZUNvaW4gYXMgQ29pbkNvbmZpZyB9IGZyb20gJ0BiaXRnby9zdGF0aWNzJztcbmltcG9ydCB7IFNpZ25lckVudHJ5IH0gZnJvbSAneHJwbC9kaXN0L25wbS9tb2RlbHMvY29tbW9uJztcbmltcG9ydCB7IE1BWF9TSUdORVJTLCBNSU5fU0lHTkVSX1FVT1JVTSwgTUlOX1NJR05FUlMgfSBmcm9tICcuL2NvbnN0YW50cyc7XG5pbXBvcnQgeyBTaWduZXJEZXRhaWxzIH0gZnJvbSAnLi9pZmFjZSc7XG5pbXBvcnQgeyBUcmFuc2FjdGlvbiB9IGZyb20gJy4vdHJhbnNhY3Rpb24nO1xuaW1wb3J0IHsgVHJhbnNhY3Rpb25CdWlsZGVyIH0gZnJvbSAnLi90cmFuc2FjdGlvbkJ1aWxkZXInO1xuaW1wb3J0IHV0aWxzIGZyb20gJy4vdXRpbHMnO1xuXG5leHBvcnQgY2xhc3MgV2FsbGV0SW5pdGlhbGl6YXRpb25CdWlsZGVyIGV4dGVuZHMgVHJhbnNhY3Rpb25CdWlsZGVyIHtcbiAgcHJvdGVjdGVkIF9zaWduZXJRdW9ydW06IG51bWJlcjtcbiAgcHJvdGVjdGVkIF9zaWduZXJFbnRyaWVzOiBTaWduZXJFbnRyeVtdID0gW107XG4gIGNvbnN0cnVjdG9yKF9jb2luQ29uZmlnOiBSZWFkb25seTxDb2luQ29uZmlnPikge1xuICAgIHN1cGVyKF9jb2luQ29uZmlnKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBnZXQgdHJhbnNhY3Rpb25UeXBlKCk6IFRyYW5zYWN0aW9uVHlwZSB7XG4gICAgcmV0dXJuIFRyYW5zYWN0aW9uVHlwZS5XYWxsZXRJbml0aWFsaXphdGlvbjtcbiAgfVxuXG4gIHByb3RlY3RlZCBnZXQgeHJwVHJhbnNhY3Rpb25UeXBlKCk6ICdTaWduZXJMaXN0U2V0JyB7XG4gICAgcmV0dXJuICdTaWduZXJMaXN0U2V0JztcbiAgfVxuXG4gIHNpZ25lclF1b3J1bShxdW9ydW06IG51bWJlcik6IFRyYW5zYWN0aW9uQnVpbGRlciB7XG4gICAgaWYgKHR5cGVvZiBxdW9ydW0gIT09ICdudW1iZXInIHx8IHF1b3J1bSA8IDEpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgcXVvcnVtIG11c3QgYmUgYSB2YWxpZCBudW1iZXIgZ3JlYXRlciB0aGFuIDAsIGdvdDogJHtxdW9ydW19YCk7XG4gICAgfVxuICAgIHRoaXMuX3NpZ25lclF1b3J1bSA9IHF1b3J1bTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIHNpZ25lcihzaWduZXI6IFNpZ25lckRldGFpbHMpOiBUcmFuc2FjdGlvbkJ1aWxkZXIge1xuICAgIGlmICh0aGlzLl9zaWduZXJFbnRyaWVzLmxlbmd0aCA+IE1BWF9TSUdORVJTKSB7XG4gICAgICB0aHJvdyBuZXcgQnVpbGRUcmFuc2FjdGlvbkVycm9yKGBDYW5ub3QgaGF2ZSBtb3JlIHRoYW4gJHtNQVhfU0lHTkVSU30gc2lnbmVyc2ApO1xuICAgIH1cbiAgICB1dGlscy52YWxpZGF0ZVNpZ25lcihzaWduZXIpO1xuICAgIHRoaXMuX3NpZ25lckVudHJpZXMucHVzaCh7XG4gICAgICBTaWduZXJFbnRyeTogeyBBY2NvdW50OiBzaWduZXIuYWRkcmVzcywgU2lnbmVyV2VpZ2h0OiBzaWduZXIud2VpZ2h0IH0sXG4gICAgfSk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBpbml0QnVpbGRlcih0eDogVHJhbnNhY3Rpb24pOiB2b2lkIHtcbiAgICBzdXBlci5pbml0QnVpbGRlcih0eCk7XG5cbiAgICBjb25zdCB7IHNpZ25lckVudHJpZXMsIHNpZ25lclF1b3J1bSB9ID0gdHgudG9Kc29uKCk7XG4gICAgaWYgKHNpZ25lclF1b3J1bSkge1xuICAgICAgdGhpcy5zaWduZXJRdW9ydW0oc2lnbmVyUXVvcnVtKTtcbiAgICB9XG5cbiAgICBpZiAoc2lnbmVyRW50cmllcz8ubGVuZ3RoKSB7XG4gICAgICBzaWduZXJFbnRyaWVzLmZvckVhY2goKHNpZ25lcikgPT5cbiAgICAgICAgdGhpcy5zaWduZXIoe1xuICAgICAgICAgIGFkZHJlc3M6IHNpZ25lci5TaWduZXJFbnRyeS5BY2NvdW50LFxuICAgICAgICAgIHdlaWdodDogc2lnbmVyLlNpZ25lckVudHJ5LlNpZ25lcldlaWdodCxcbiAgICAgICAgfSlcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgLyoqIEBpbmhlcml0ZG9jICovXG4gIHByb3RlY3RlZCBhc3luYyBidWlsZEltcGxlbWVudGF0aW9uKCk6IFByb21pc2U8VHJhbnNhY3Rpb24+IHtcbiAgICBpZiAoIXRoaXMuX3NlbmRlcikge1xuICAgICAgdGhyb3cgbmV3IEJ1aWxkVHJhbnNhY3Rpb25FcnJvcignU2VuZGVyIG11c3QgYmUgc2V0IGJlZm9yZSBidWlsZGluZyB0aGUgdHJhbnNhY3Rpb24nKTtcbiAgICB9XG4gICAgaWYgKCF0aGlzLl9zaWduZXJRdW9ydW0gfHwgdGhpcy5fc2lnbmVyUXVvcnVtIDwgTUlOX1NJR05FUl9RVU9SVU0pIHtcbiAgICAgIHRocm93IG5ldyBCdWlsZFRyYW5zYWN0aW9uRXJyb3IoJ1NpZ25lciBxdW9ydW0gbXVzdCBiZSBzZXQgYmVmb3JlIGJ1aWxkaW5nIHRoZSB0cmFuc2FjdGlvbicpO1xuICAgIH1cbiAgICBpZiAoIXRoaXMuX3NpZ25lckVudHJpZXMpIHtcbiAgICAgIHRocm93IG5ldyBCdWlsZFRyYW5zYWN0aW9uRXJyb3IoJ1NpZ25lcnMgbXVzdCBiZSBzZXQgYmVmb3JlIGJ1aWxkaW5nIHRoZSB0cmFuc2FjdGlvbicpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLl9zaWduZXJFbnRyaWVzLmxlbmd0aCA8IE1JTl9TSUdORVJTIHx8IHRoaXMuX3NpZ25lckVudHJpZXMubGVuZ3RoID4gTUFYX1NJR05FUlMpIHtcbiAgICAgIHRocm93IG5ldyBCdWlsZFRyYW5zYWN0aW9uRXJyb3IoYFNpZ25lcnMgbXVzdCBiZSBiZXR3ZWVuICR7TUlOX1NJR05FUlN9IGFuZCAke01BWF9TSUdORVJTfWApO1xuICAgIH1cblxuICAgIHRoaXMuX3NwZWNpZmljRmllbGRzID0ge1xuICAgICAgVHJhbnNhY3Rpb25UeXBlOiB0aGlzLnhycFRyYW5zYWN0aW9uVHlwZSxcbiAgICAgIEFjY291bnQ6IHRoaXMuX3NlbmRlcixcbiAgICAgIFNpZ25lclF1b3J1bTogdGhpcy5fc2lnbmVyUXVvcnVtLFxuICAgICAgU2lnbmVyRW50cmllczogdGhpcy5fc2lnbmVyRW50cmllcyxcbiAgICB9O1xuICAgIHJldHVybiBhd2FpdCBzdXBlci5idWlsZEltcGxlbWVudGF0aW9uKCk7XG4gIH1cbn1cbiJdfQ==
76
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2FsbGV0SW5pdGlhbGl6YXRpb25CdWlsZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xpYi93YWxsZXRJbml0aWFsaXphdGlvbkJ1aWxkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEsOENBQXlFO0FBR3pFLDJDQUEwRTtBQUcxRSw2REFBMEQ7QUFDMUQsb0RBQTRCO0FBRTVCLE1BQWEsMkJBQTRCLFNBQVEsdUNBQWtCO0lBR2pFLFlBQVksV0FBaUM7UUFDM0MsS0FBSyxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBRlgsbUJBQWMsR0FBa0IsRUFBRSxDQUFDO0lBRzdDLENBQUM7SUFFRCxJQUFjLGVBQWU7UUFDM0IsT0FBTywwQkFBZSxDQUFDLG9CQUFvQixDQUFDO0lBQzlDLENBQUM7SUFFRCxJQUFjLGtCQUFrQjtRQUM5QixPQUFPLGVBQWUsQ0FBQztJQUN6QixDQUFDO0lBRUQsWUFBWSxDQUFDLE1BQWM7UUFDekIsSUFBSSxPQUFPLE1BQU0sS0FBSyxRQUFRLElBQUksTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQzdDLE1BQU0sSUFBSSxLQUFLLENBQUMsc0RBQXNELE1BQU0sRUFBRSxDQUFDLENBQUM7UUFDbEYsQ0FBQztRQUNELElBQUksQ0FBQyxhQUFhLEdBQUcsTUFBTSxDQUFDO1FBQzVCLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVELE1BQU0sQ0FBQyxNQUFxQjtRQUMxQixJQUFJLElBQUksQ0FBQyxjQUFjLENBQUMsTUFBTSxHQUFHLHVCQUFXLEVBQUUsQ0FBQztZQUM3QyxNQUFNLElBQUksZ0NBQXFCLENBQUMseUJBQXlCLHVCQUFXLFVBQVUsQ0FBQyxDQUFDO1FBQ2xGLENBQUM7UUFDRCxlQUFLLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQzdCLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDO1lBQ3ZCLFdBQVcsRUFBRSxFQUFFLE9BQU8sRUFBRSxNQUFNLENBQUMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLENBQUMsTUFBTSxFQUFFO1NBQ3RFLENBQUMsQ0FBQztRQUNILE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVELFdBQVcsQ0FBQyxFQUFlO1FBQ3pCLEtBQUssQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDLENBQUM7UUFFdEIsTUFBTSxFQUFFLGFBQWEsRUFBRSxZQUFZLEVBQUUsR0FBRyxFQUFFLENBQUMsTUFBTSxFQUFFLENBQUM7UUFDcEQsSUFBSSxZQUFZLEVBQUUsQ0FBQztZQUNqQixJQUFJLENBQUMsWUFBWSxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQ2xDLENBQUM7UUFFRCxJQUFJLGFBQWEsRUFBRSxNQUFNLEVBQUUsQ0FBQztZQUMxQixhQUFhLENBQUMsT0FBTyxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FDL0IsSUFBSSxDQUFDLE1BQU0sQ0FBQztnQkFDVixPQUFPLEVBQUUsTUFBTSxDQUFDLFdBQVcsQ0FBQyxPQUFPO2dCQUNuQyxNQUFNLEVBQUUsTUFBTSxDQUFDLFdBQVcsQ0FBQyxZQUFZO2FBQ3hDLENBQUMsQ0FDSCxDQUFDO1FBQ0osQ0FBQztJQUNILENBQUM7SUFFRCxrQkFBa0I7SUFDUixLQUFLLENBQUMsbUJBQW1CO1FBQ2pDLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDbEIsTUFBTSxJQUFJLGdDQUFxQixDQUFDLG9EQUFvRCxDQUFDLENBQUM7UUFDeEYsQ0FBQztRQUNELElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxJQUFJLElBQUksQ0FBQyxhQUFhLEdBQUcsNkJBQWlCLEVBQUUsQ0FBQztZQUNsRSxNQUFNLElBQUksZ0NBQXFCLENBQUMsMkRBQTJELENBQUMsQ0FBQztRQUMvRixDQUFDO1FBQ0QsSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztZQUN6QixNQUFNLElBQUksZ0NBQXFCLENBQUMscURBQXFELENBQUMsQ0FBQztRQUN6RixDQUFDO1FBRUQsSUFBSSxJQUFJLENBQUMsY0FBYyxDQUFDLE1BQU0sR0FBRyx1QkFBVyxJQUFJLElBQUksQ0FBQyxjQUFjLENBQUMsTUFBTSxHQUFHLHVCQUFXLEVBQUUsQ0FBQztZQUN6RixNQUFNLElBQUksZ0NBQXFCLENBQUMsMkJBQTJCLHVCQUFXLFFBQVEsdUJBQVcsRUFBRSxDQUFDLENBQUM7UUFDL0YsQ0FBQztRQUVELElBQUksQ0FBQyxlQUFlLEdBQUc7WUFDckIsZUFBZSxFQUFFLElBQUksQ0FBQyxrQkFBa0I7WUFDeEMsT0FBTyxFQUFFLElBQUksQ0FBQyxPQUFPO1lBQ3JCLFlBQVksRUFBRSxJQUFJLENBQUMsYUFBYTtZQUNoQyxhQUFhLEVBQUUsSUFBSSxDQUFDLGNBQWM7U0FDbkMsQ0FBQztRQUNGLE9BQU8sTUFBTSxLQUFLLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztJQUMzQyxDQUFDO0NBQ0Y7QUE1RUQsa0VBNEVDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQnVpbGRUcmFuc2FjdGlvbkVycm9yLCBUcmFuc2FjdGlvblR5cGUgfSBmcm9tICdAYml0Z28vc2RrLWNvcmUnO1xuaW1wb3J0IHsgQmFzZUNvaW4gYXMgQ29pbkNvbmZpZyB9IGZyb20gJ0BiaXRnby9zdGF0aWNzJztcbmltcG9ydCB7IFNpZ25lckVudHJ5IH0gZnJvbSAneHJwbC9kaXN0L25wbS9tb2RlbHMvY29tbW9uJztcbmltcG9ydCB7IE1BWF9TSUdORVJTLCBNSU5fU0lHTkVSX1FVT1JVTSwgTUlOX1NJR05FUlMgfSBmcm9tICcuL2NvbnN0YW50cyc7XG5pbXBvcnQgeyBTaWduZXJEZXRhaWxzIH0gZnJvbSAnLi9pZmFjZSc7XG5pbXBvcnQgeyBUcmFuc2FjdGlvbiB9IGZyb20gJy4vdHJhbnNhY3Rpb24nO1xuaW1wb3J0IHsgVHJhbnNhY3Rpb25CdWlsZGVyIH0gZnJvbSAnLi90cmFuc2FjdGlvbkJ1aWxkZXInO1xuaW1wb3J0IHV0aWxzIGZyb20gJy4vdXRpbHMnO1xuXG5leHBvcnQgY2xhc3MgV2FsbGV0SW5pdGlhbGl6YXRpb25CdWlsZGVyIGV4dGVuZHMgVHJhbnNhY3Rpb25CdWlsZGVyIHtcbiAgcHJvdGVjdGVkIF9zaWduZXJRdW9ydW06IG51bWJlcjtcbiAgcHJvdGVjdGVkIF9zaWduZXJFbnRyaWVzOiBTaWduZXJFbnRyeVtdID0gW107XG4gIGNvbnN0cnVjdG9yKF9jb2luQ29uZmlnOiBSZWFkb25seTxDb2luQ29uZmlnPikge1xuICAgIHN1cGVyKF9jb2luQ29uZmlnKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBnZXQgdHJhbnNhY3Rpb25UeXBlKCk6IFRyYW5zYWN0aW9uVHlwZSB7XG4gICAgcmV0dXJuIFRyYW5zYWN0aW9uVHlwZS5XYWxsZXRJbml0aWFsaXphdGlvbjtcbiAgfVxuXG4gIHByb3RlY3RlZCBnZXQgeHJwVHJhbnNhY3Rpb25UeXBlKCk6ICdTaWduZXJMaXN0U2V0JyB7XG4gICAgcmV0dXJuICdTaWduZXJMaXN0U2V0JztcbiAgfVxuXG4gIHNpZ25lclF1b3J1bShxdW9ydW06IG51bWJlcik6IFRyYW5zYWN0aW9uQnVpbGRlciB7XG4gICAgaWYgKHR5cGVvZiBxdW9ydW0gIT09ICdudW1iZXInIHx8IHF1b3J1bSA8IDEpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgcXVvcnVtIG11c3QgYmUgYSB2YWxpZCBudW1iZXIgZ3JlYXRlciB0aGFuIDAsIGdvdDogJHtxdW9ydW19YCk7XG4gICAgfVxuICAgIHRoaXMuX3NpZ25lclF1b3J1bSA9IHF1b3J1bTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIHNpZ25lcihzaWduZXI6IFNpZ25lckRldGFpbHMpOiBUcmFuc2FjdGlvbkJ1aWxkZXIge1xuICAgIGlmICh0aGlzLl9zaWduZXJFbnRyaWVzLmxlbmd0aCA+IE1BWF9TSUdORVJTKSB7XG4gICAgICB0aHJvdyBuZXcgQnVpbGRUcmFuc2FjdGlvbkVycm9yKGBDYW5ub3QgaGF2ZSBtb3JlIHRoYW4gJHtNQVhfU0lHTkVSU30gc2lnbmVyc2ApO1xuICAgIH1cbiAgICB1dGlscy52YWxpZGF0ZVNpZ25lcihzaWduZXIpO1xuICAgIHRoaXMuX3NpZ25lckVudHJpZXMucHVzaCh7XG4gICAgICBTaWduZXJFbnRyeTogeyBBY2NvdW50OiBzaWduZXIuYWRkcmVzcywgU2lnbmVyV2VpZ2h0OiBzaWduZXIud2VpZ2h0IH0sXG4gICAgfSk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBpbml0QnVpbGRlcih0eDogVHJhbnNhY3Rpb24pOiB2b2lkIHtcbiAgICBzdXBlci5pbml0QnVpbGRlcih0eCk7XG5cbiAgICBjb25zdCB7IHNpZ25lckVudHJpZXMsIHNpZ25lclF1b3J1bSB9ID0gdHgudG9Kc29uKCk7XG4gICAgaWYgKHNpZ25lclF1b3J1bSkge1xuICAgICAgdGhpcy5zaWduZXJRdW9ydW0oc2lnbmVyUXVvcnVtKTtcbiAgICB9XG5cbiAgICBpZiAoc2lnbmVyRW50cmllcz8ubGVuZ3RoKSB7XG4gICAgICBzaWduZXJFbnRyaWVzLmZvckVhY2goKHNpZ25lcikgPT5cbiAgICAgICAgdGhpcy5zaWduZXIoe1xuICAgICAgICAgIGFkZHJlc3M6IHNpZ25lci5TaWduZXJFbnRyeS5BY2NvdW50LFxuICAgICAgICAgIHdlaWdodDogc2lnbmVyLlNpZ25lckVudHJ5LlNpZ25lcldlaWdodCxcbiAgICAgICAgfSlcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgLyoqIEBpbmhlcml0ZG9jICovXG4gIHByb3RlY3RlZCBhc3luYyBidWlsZEltcGxlbWVudGF0aW9uKCk6IFByb21pc2U8VHJhbnNhY3Rpb24+IHtcbiAgICBpZiAoIXRoaXMuX3NlbmRlcikge1xuICAgICAgdGhyb3cgbmV3IEJ1aWxkVHJhbnNhY3Rpb25FcnJvcignU2VuZGVyIG11c3QgYmUgc2V0IGJlZm9yZSBidWlsZGluZyB0aGUgdHJhbnNhY3Rpb24nKTtcbiAgICB9XG4gICAgaWYgKCF0aGlzLl9zaWduZXJRdW9ydW0gfHwgdGhpcy5fc2lnbmVyUXVvcnVtIDwgTUlOX1NJR05FUl9RVU9SVU0pIHtcbiAgICAgIHRocm93IG5ldyBCdWlsZFRyYW5zYWN0aW9uRXJyb3IoJ1NpZ25lciBxdW9ydW0gbXVzdCBiZSBzZXQgYmVmb3JlIGJ1aWxkaW5nIHRoZSB0cmFuc2FjdGlvbicpO1xuICAgIH1cbiAgICBpZiAoIXRoaXMuX3NpZ25lckVudHJpZXMpIHtcbiAgICAgIHRocm93IG5ldyBCdWlsZFRyYW5zYWN0aW9uRXJyb3IoJ1NpZ25lcnMgbXVzdCBiZSBzZXQgYmVmb3JlIGJ1aWxkaW5nIHRoZSB0cmFuc2FjdGlvbicpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLl9zaWduZXJFbnRyaWVzLmxlbmd0aCA8IE1JTl9TSUdORVJTIHx8IHRoaXMuX3NpZ25lckVudHJpZXMubGVuZ3RoID4gTUFYX1NJR05FUlMpIHtcbiAgICAgIHRocm93IG5ldyBCdWlsZFRyYW5zYWN0aW9uRXJyb3IoYFNpZ25lcnMgbXVzdCBiZSBiZXR3ZWVuICR7TUlOX1NJR05FUlN9IGFuZCAke01BWF9TSUdORVJTfWApO1xuICAgIH1cblxuICAgIHRoaXMuX3NwZWNpZmljRmllbGRzID0ge1xuICAgICAgVHJhbnNhY3Rpb25UeXBlOiB0aGlzLnhycFRyYW5zYWN0aW9uVHlwZSxcbiAgICAgIEFjY291bnQ6IHRoaXMuX3NlbmRlcixcbiAgICAgIFNpZ25lclF1b3J1bTogdGhpcy5fc2lnbmVyUXVvcnVtLFxuICAgICAgU2lnbmVyRW50cmllczogdGhpcy5fc2lnbmVyRW50cmllcyxcbiAgICB9O1xuICAgIHJldHVybiBhd2FpdCBzdXBlci5idWlsZEltcGxlbWVudGF0aW9uKCk7XG4gIH1cbn1cbiJdfQ==
package/dist/src/xrp.js CHANGED
@@ -281,7 +281,6 @@ class Xrp extends sdk_core_1.BaseCoin {
281
281
  * @returns {boolean}
282
282
  */
283
283
  async verifyTransaction({ txParams, txPrebuild }) {
284
- var _a;
285
284
  const coinConfig = statics_1.coins.get(this.getChain());
286
285
  const explanation = await this.explainTransaction({
287
286
  txHex: txPrebuild.txHex,
@@ -302,7 +301,7 @@ class Xrp extends sdk_core_1.BaseCoin {
302
301
  throw new Error('transaction prebuild does not match expected output');
303
302
  }
304
303
  if (txParams.type === 'enabletoken') {
305
- if (((_a = txParams.recipients) === null || _a === void 0 ? void 0 : _a.length) !== 1) {
304
+ if (txParams.recipients?.length !== 1) {
306
305
  throw new Error(`${this.getChain()} doesn't support sending to more than 1 destination address within a single transaction. Try again, using only a single recipient.`);
307
306
  }
308
307
  const recipient = txParams.recipients[0];
@@ -472,8 +471,8 @@ class Xrp extends sdk_core_1.BaseCoin {
472
471
  if (recoverableBalance.toNumber() <= 0) {
473
472
  throw new Error(`Quantity of XRP to recover must be greater than 0. Current balance: ${balance.toNumber()}, blockchain reserve: ${reserve.toNumber()}, spendable balance: ${recoverableBalance.toNumber()}`);
474
473
  }
475
- const issuer = params === null || params === void 0 ? void 0 : params.issuerAddress;
476
- const currency = params === null || params === void 0 ? void 0 : params.currencyCode;
474
+ const issuer = params?.issuerAddress;
475
+ const currency = params?.currencyCode;
477
476
  if (!!issuer && !!currency) {
478
477
  const tokenParams = {
479
478
  recoveryDestination: params.recoveryDestination,
@@ -623,4 +622,4 @@ class Xrp extends sdk_core_1.BaseCoin {
623
622
  }
624
623
  }
625
624
  exports.Xrp = Xrp;
626
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoieHJwLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3hycC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTs7R0FFRztBQUNILCtDQUF5QztBQUN6QywwQ0FBNEI7QUFDNUIseURBQTJDO0FBQzNDLHlDQUEyQjtBQUUzQiw4Q0FheUI7QUFDekIsNENBQTZFO0FBQzdFLHVFQUF5RDtBQUN6RCxnRUFBa0Q7QUFDbEQsMkNBQTZCO0FBYzdCLDJDQUFzRDtBQUN0RCx3REFBZ0M7QUFDaEMsc0RBQThCO0FBQzlCLCtCQUF5RjtBQUV6RixNQUFhLEdBQUksU0FBUSxtQkFBUTtJQUUvQixZQUFzQixLQUFnQixFQUFFLFdBQXVDO1FBQzdFLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNiLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztZQUNqQixNQUFNLElBQUksS0FBSyxDQUFDLG9EQUFvRCxDQUFDLENBQUM7UUFDeEUsQ0FBQztRQUNELElBQUksQ0FBQyxZQUFZLEdBQUcsV0FBVyxDQUFDO0lBQ2xDLENBQUM7SUFFRCxNQUFNLENBQUMsY0FBYyxDQUFDLEtBQWdCLEVBQUUsV0FBdUM7UUFDN0UsT0FBTyxJQUFJLEdBQUcsQ0FBQyxLQUFLLEVBQUUsV0FBVyxDQUFDLENBQUM7SUFDckMsQ0FBQztJQUVEOztPQUVHO0lBQ0ksYUFBYTtRQUNsQixPQUFPLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxZQUFZLENBQUMsYUFBYSxDQUFDLENBQUM7SUFDdkQsQ0FBQztJQUVEOztPQUVHO0lBQ0ksUUFBUTtRQUNiLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUM7SUFDaEMsQ0FBQztJQUVEOztPQUVHO0lBQ0ksU0FBUztRQUNkLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUM7SUFDbEMsQ0FBQztJQUVEOztPQUVH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LENBQUM7WUFDZixNQUFNLElBQUksS0FBSyxDQUFDLGdDQUFnQyxDQUFDLENBQUM7UUFDcEQsQ0FBQztRQUNELE9BQU87WUFDTCxHQUFHLEVBQUUsSUFBSSxDQUFDLElBQUk7WUFDZCxHQUFHLEVBQUUsSUFBSSxDQUFDLElBQUk7U0FDZixDQUFDO0lBQ0osQ0FBQztJQUVELEtBQUssQ0FBQyxnQkFBZ0IsQ0FBQyxNQUErQjtRQUNwRCxPQUFPLEVBQUUsQ0FBQztJQUNaLENBQUM7Q0FDRjtBQW5wQkQsa0JBbXBCQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQHByZXR0aWVyXG4gKi9cbmltcG9ydCB7IEJpZ051bWJlciB9IGZyb20gJ2JpZ251bWJlci5qcyc7XG5pbXBvcnQgKiBhcyBfIGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgKiBhcyBxdWVyeXN0cmluZyBmcm9tICdxdWVyeXN0cmluZyc7XG5pbXBvcnQgKiBhcyB1cmwgZnJvbSAndXJsJztcblxuaW1wb3J0IHtcbiAgQmFzZUNvaW4sXG4gIEJpdEdvQmFzZSxcbiAgY2hlY2tLcnNQcm92aWRlcixcbiAgZ2V0QmlwMzJLZXlzLFxuICBJbnZhbGlkQWRkcmVzc0Vycm9yLFxuICBLZXlQYWlyLFxuICBQYXJzZWRUcmFuc2FjdGlvbixcbiAgUGFyc2VUcmFuc2FjdGlvbk9wdGlvbnMsXG4gIHByb21pc2VQcm9wcyxcbiAgVG9rZW5FbmFibGVtZW50Q29uZmlnLFxuICBVbmV4cGVjdGVkQWRkcmVzc0Vycm9yLFxuICBWZXJpZnlUcmFuc2FjdGlvbk9wdGlvbnMsXG59IGZyb20gJ0BiaXRnby9zZGstY29yZSc7XG5pbXBvcnQgeyBCYXNlQ29pbiBhcyBTdGF0aWNzQmFzZUNvaW4sIGNvaW5zLCBYcnBDb2luIH0gZnJvbSAnQGJpdGdvL3N0YXRpY3MnO1xuaW1wb3J0ICogYXMgcmlwcGxlQmluYXJ5Q29kZWMgZnJvbSAncmlwcGxlLWJpbmFyeS1jb2RlYyc7XG5pbXBvcnQgKiBhcyByaXBwbGVLZXlwYWlycyBmcm9tICdyaXBwbGUta2V5cGFpcnMnO1xuaW1wb3J0ICogYXMgeHJwbCBmcm9tICd4cnBsJztcblxuaW1wb3J0IHtcbiAgRXhwbGFpblRyYW5zYWN0aW9uT3B0aW9ucyxcbiAgRmVlSW5mbyxcbiAgSGFsZlNpZ25lZFRyYW5zYWN0aW9uLFxuICBSZWNvdmVyeUluZm8sXG4gIFJlY292ZXJ5T3B0aW9ucyxcbiAgUmVjb3ZlcnlUcmFuc2FjdGlvbixcbiAgU2lnblRyYW5zYWN0aW9uT3B0aW9ucyxcbiAgU3VwcGxlbWVudEdlbmVyYXRlV2FsbGV0T3B0aW9ucyxcbiAgVHJhbnNhY3Rpb25FeHBsYW5hdGlvbixcbiAgVmVyaWZ5QWRkcmVzc09wdGlvbnMsXG59IGZyb20gJy4vbGliL2lmYWNlJztcbmltcG9ydCB7IEtleVBhaXIgYXMgWHJwS2V5UGFpciB9IGZyb20gJy4vbGliL2tleVBhaXInO1xuaW1wb3J0IHV0aWxzIGZyb20gJy4vbGliL3V0aWxzJztcbmltcG9ydCByaXBwbGUgZnJvbSAnLi9yaXBwbGUnO1xuaW1wb3J0IHsgVG9rZW5UcmFuc2ZlckJ1aWxkZXIsIFRyYW5zYWN0aW9uQnVpbGRlckZhY3RvcnksIFRyYW5zZmVyQnVpbGRlciB9IGZyb20gJy4vbGliJztcblxuZXhwb3J0IGNsYXNzIFhycCBleHRlbmRzIEJhc2VDb2luIHtcbiAgcHJvdGVjdGVkIF9zdGF0aWNzQ29pbjogUmVhZG9ubHk8U3RhdGljc0Jhc2VDb2luPjtcbiAgcHJvdGVjdGVkIGNvbnN0cnVjdG9yKGJpdGdvOiBCaXRHb0Jhc2UsIHN0YXRpY3NDb2luPzogUmVhZG9ubHk8U3RhdGljc0Jhc2VDb2luPikge1xuICAgIHN1cGVyKGJpdGdvKTtcbiAgICBpZiAoIXN0YXRpY3NDb2luKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ21pc3NpbmcgcmVxdWlyZWQgY29uc3RydWN0b3IgcGFyYW1ldGVyIHN0YXRpY3NDb2luJyk7XG4gICAgfVxuICAgIHRoaXMuX3N0YXRpY3NDb2luID0gc3RhdGljc0NvaW47XG4gIH1cblxuICBzdGF0aWMgY3JlYXRlSW5zdGFuY2UoYml0Z286IEJpdEdvQmFzZSwgc3RhdGljc0NvaW4/OiBSZWFkb25seTxTdGF0aWNzQmFzZUNvaW4+KTogQmFzZUNvaW4ge1xuICAgIHJldHVybiBuZXcgWHJwKGJpdGdvLCBzdGF0aWNzQ29pbik7XG4gIH1cblxuICAvKipcbiAgICogRmFjdG9yIGJldHdlZW4gdGhlIGNvaW4ncyBiYXNlIHVuaXQgYW5kIGl0cyBzbWFsbGVzdCBzdWJkaXZpc29uXG4gICAqL1xuICBwdWJsaWMgZ2V0QmFzZUZhY3RvcigpOiBudW1iZXIge1xuICAgIHJldHVybiBNYXRoLnBvdygxMCwgdGhpcy5fc3RhdGljc0NvaW4uZGVjaW1hbFBsYWNlcyk7XG4gIH1cblxuICAvKipcbiAgICogSWRlbnRpZmllciBmb3IgdGhlIGJsb2NrY2hhaW4gd2hpY2ggc3VwcG9ydHMgdGhpcyBjb2luXG4gICAqL1xuICBwdWJsaWMgZ2V0Q2hhaW4oKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fc3RhdGljc0NvaW4ubmFtZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJZGVudGlmaWVyIGZvciB0aGUgY29pbiBmYW1pbHlcbiAgICovXG4gIHB1YmxpYyBnZXRGYW1pbHkoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fc3RhdGljc0NvaW4uZmFtaWx5O1xuICB9XG5cbiAgLyoqXG4gICAqIENvbXBsZXRlIGh1bWFuLXJlYWRhYmxlIG5hbWUgb2YgdGhpcyBjb2luXG4gICAqL1xuICBwdWJsaWMgZ2V0RnVsbE5hbWUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fc3RhdGljc0NvaW4uZnVsbE5hbWU7XG4gIH1cblxuICAvKipcbiAgICogRXZhbHVhdGVzIHdoZXRoZXIgYW4gYWRkcmVzcyBzdHJpbmcgaXMgdmFsaWQgZm9yIHRoaXMgY29pblxuICAgKiBAcGFyYW0gYWRkcmVzc1xuICAgKi9cbiAgcHVibGljIGlzVmFsaWRBZGRyZXNzKGFkZHJlc3M6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB1dGlscy5pc1ZhbGlkQWRkcmVzcyhhZGRyZXNzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gYm9vbGVhbiBpbmRpY2F0aW5nIHdoZXRoZXIgaW5wdXQgaXMgdmFsaWQgcHVibGljIGtleSBmb3IgdGhlIGNvaW4uXG4gICAqXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBwdWIgdGhlIHB1YiB0byBiZSBjaGVja2VkXG4gICAqIEByZXR1cm5zIHtCb29sZWFufSBpcyBpdCB2YWxpZD9cbiAgICovXG4gIHB1YmxpYyBpc1ZhbGlkUHViKHB1Yjogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHV0aWxzLmlzVmFsaWRQdWJsaWNLZXkocHViKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgZmVlIGluZm8gZnJvbSBzZXJ2ZXJcbiAgICovXG4gIHB1YmxpYyBhc3luYyBnZXRGZWVJbmZvKCk6IFByb21pc2U8RmVlSW5mbz4ge1xuICAgIHJldHVybiB0aGlzLmJpdGdvLmdldCh0aGlzLnVybCgnL3B1YmxpYy9mZWVpbmZvJykpLnJlc3VsdCgpO1xuICB9XG5cbiAgcHVibGljIGdldFRva2VuRW5hYmxlbWVudENvbmZpZygpOiBUb2tlbkVuYWJsZW1lbnRDb25maWcge1xuICAgIHJldHVybiB7XG4gICAgICByZXF1aXJlc1Rva2VuRW5hYmxlbWVudDogdHJ1ZSxcbiAgICAgIHN1cHBvcnRzTXVsdGlwbGVUb2tlbkVuYWJsZW1lbnRzOiBmYWxzZSxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIEFzc2VtYmxlIGtleWNoYWluIGFuZCBoYWxmLXNpZ24gcHJlYnVpbHQgdHJhbnNhY3Rpb25cbiAgICogQHBhcmFtIHBhcmFtc1xuICAgKiAtIHR4UHJlYnVpbGRcbiAgICogLSBwcnZcbiAgICogQHJldHVybnMgQmx1ZWJpcmQ8SGFsZlNpZ25lZFRyYW5zYWN0aW9uPlxuICAgKi9cbiAgcHVibGljIGFzeW5jIHNpZ25UcmFuc2FjdGlvbih7XG4gICAgdHhQcmVidWlsZCxcbiAgICBwcnYsXG4gICAgaXNMYXN0U2lnbmF0dXJlLFxuICB9OiBTaWduVHJhbnNhY3Rpb25PcHRpb25zKTogUHJvbWlzZTxIYWxmU2lnbmVkVHJhbnNhY3Rpb24gfCBSZWNvdmVyeVRyYW5zYWN0aW9uPiB7XG4gICAgaWYgKF8uaXNVbmRlZmluZWQodHhQcmVidWlsZCkgfHwgIV8uaXNPYmplY3QodHhQcmVidWlsZCkpIHtcbiAgICAgIGlmICghXy5pc1VuZGVmaW5lZCh0eFByZWJ1aWxkKSAmJiAhXy5pc09iamVjdCh0eFByZWJ1aWxkKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYHR4UHJlYnVpbGQgbXVzdCBiZSBhbiBvYmplY3QsIGdvdCB0eXBlICR7dHlwZW9mIHR4UHJlYnVpbGR9YCk7XG4gICAgICB9XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ21pc3NpbmcgdHhQcmVidWlsZCBwYXJhbWV0ZXInKTtcbiAgICB9XG5cbiAgICBpZiAoXy5pc1VuZGVmaW5lZChwcnYpIHx8ICFfLmlzU3RyaW5nKHBydikpIHtcbiAgICAgIGlmICghXy5pc1VuZGVmaW5lZChwcnYpICYmICFfLmlzU3RyaW5nKHBydikpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBwcnYgbXVzdCBiZSBhIHN0cmluZywgZ290IHR5cGUgJHt0eXBlb2YgcHJ2fWApO1xuICAgICAgfVxuICAgICAgdGhyb3cgbmV3IEVycm9yKCdtaXNzaW5nIHBydiBwYXJhbWV0ZXIgdG8gc2lnbiB0cmFuc2FjdGlvbicpO1xuICAgIH1cblxuICAgIGlmICghdHhQcmVidWlsZC50eEhleCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBtaXNzaW5nIHR4SGV4IGluIHR4UHJlYnVpbGRgKTtcbiAgICB9XG4gICAgY29uc3Qga2V5UGFpciA9IG5ldyBYcnBLZXlQYWlyKHsgcHJ2IH0pO1xuICAgIGNvbnN0IGFkZHJlc3MgPSBrZXlQYWlyLmdldEFkZHJlc3MoKTtcbiAgICBjb25zdCBwcml2YXRlS2V5ID0gKGtleVBhaXIuZ2V0UHJpdmF0ZUtleSgpIGFzIEJ1ZmZlcikudG9TdHJpbmcoJ2hleCcpO1xuXG4gICAgY29uc3QgdHggPSByaXBwbGUuc2lnbldpdGhQcml2YXRlS2V5KHR4UHJlYnVpbGQudHhIZXgsIHByaXZhdGVLZXksIHtcbiAgICAgIHNpZ25BczogYWRkcmVzcyxcbiAgICB9KTtcblxuICAgIC8vIE5vcm1hbGx5IHRoZSBTREsgcHJvdmlkZXMgdGhlIGZpcnN0IHNpZ25hdHVyZSBmb3IgYW4gWFJQIHR4LCBidXQgb2NjYXNpb25hbGx5IGl0IHByb3ZpZGVzIHRoZSBmaW5hbCBvbmUgYXMgd2VsbFxuICAgIC8vIChyZWNvdmVyaWVzKVxuICAgIGlmIChpc0xhc3RTaWduYXR1cmUpIHtcbiAgICAgIHJldHVybiB7IHR4SGV4OiB0eC5zaWduZWRUcmFuc2FjdGlvbiB9O1xuICAgIH1cbiAgICByZXR1cm4geyBoYWxmU2lnbmVkOiB7IHR4SGV4OiB0eC5zaWduZWRUcmFuc2FjdGlvbiB9IH07XG4gIH1cblxuICAvKipcbiAgICogUmlwcGxlIHJlcXVpcmVzIGFkZGl0aW9uYWwgcGFyYW1ldGVycyBmb3Igd2FsbGV0IGdlbmVyYXRpb24gdG8gYmUgc2VudCB0byB0aGUgc2VydmVyLiBUaGUgYWRkaXRpb25hbCBwYXJhbWV0ZXJzIGFyZVxuICAgKiB0aGUgcm9vdCBwdWJsaWMga2V5LCB3aGljaCBpcyB0aGUgYmFzaXMgb2YgdGhlIHJvb3QgYWRkcmVzcywgdHdvIHNpZ25lZCwgYW5kIG9uZSBoYWxmLXNpZ25lZCBpbml0aWFsaXphdGlvbiB0eHNcbiAgICogQHBhcmFtIHdhbGxldFBhcmFtc1xuICAgKiAtIHJvb3RQcml2YXRlS2V5OiBvcHRpb25hbCBoZXgtZW5jb2RlZCBSaXBwbGUgcHJpdmF0ZSBrZXlcbiAgICovXG4gIGFzeW5jIHN1cHBsZW1lbnRHZW5lcmF0ZVdhbGxldChcbiAgICB3YWxsZXRQYXJhbXM6IFN1cHBsZW1lbnRHZW5lcmF0ZVdhbGxldE9wdGlvbnNcbiAgKTogUHJvbWlzZTxTdXBwbGVtZW50R2VuZXJhdGVXYWxsZXRPcHRpb25zPiB7XG4gICAgaWYgKHdhbGxldFBhcmFtcy5yb290UHJpdmF0ZUtleSkge1xuICAgICAgaWYgKHdhbGxldFBhcmFtcy5yb290UHJpdmF0ZUtleS5sZW5ndGggIT09IDY0KSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcigncm9vdFByaXZhdGVLZXkgbmVlZHMgdG8gYmUgYSBoZXhhZGVjaW1hbCBwcml2YXRlIGtleSBzdHJpbmcnKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3Qga2V5UGFpciA9IG5ldyBYcnBLZXlQYWlyKCkuZ2V0S2V5cygpO1xuICAgICAgaWYgKCFrZXlQYWlyLnBydikge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ25vIHByaXZhdGVLZXknKTtcbiAgICAgIH1cbiAgICAgIHdhbGxldFBhcmFtcy5yb290UHJpdmF0ZUtleSA9IGtleVBhaXIucHJ2O1xuICAgIH1cbiAgICByZXR1cm4gd2FsbGV0UGFyYW1zO1xuICB9XG5cbiAgLyoqXG4gICAqIEV4cGxhaW4vcGFyc2UgdHJhbnNhY3Rpb25cbiAgICogQHBhcmFtIHBhcmFtc1xuICAgKi9cbiAgYXN5bmMgZXhwbGFpblRyYW5zYWN0aW9uKHBhcmFtczogRXhwbGFpblRyYW5zYWN0aW9uT3B0aW9ucyA9IHt9KTogUHJvbWlzZTxUcmFuc2FjdGlvbkV4cGxhbmF0aW9uPiB7XG4gICAgbGV0IHRyYW5zYWN0aW9uO1xuICAgIGxldCB0eEhleDogc3RyaW5nID0gcGFyYW1zLnR4SGV4IHx8ICgocGFyYW1zLmhhbGZTaWduZWQgJiYgcGFyYW1zLmhhbGZTaWduZWQudHhIZXgpIGFzIHN0cmluZyk7XG4gICAgaWYgKCF0eEhleCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdtaXNzaW5nIHJlcXVpcmVkIHBhcmFtIHR4SGV4Jyk7XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICB0cmFuc2FjdGlvbiA9IHJpcHBsZUJpbmFyeUNvZGVjLmRlY29kZSh0eEhleCk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgdHJhbnNhY3Rpb24gPSBKU09OLnBhcnNlKHR4SGV4KTtcbiAgICAgICAgdHhIZXggPSByaXBwbGVCaW5hcnlDb2RlYy5lbmNvZGUodHJhbnNhY3Rpb24pO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3R4SGV4IG5lZWRzIHRvIGJlIGVpdGhlciBoZXggb3IgSlNPTiBzdHJpbmcgZm9yIFhSUCcpO1xuICAgICAgfVxuICAgIH1cbiAgICBsZXQgaWQ6IHN0cmluZztcbiAgICAvLyBoYXNoZXMgaWRzIGFyZSBkaWZmZXJlbnQgZm9yIHNpZ25lZCBhbmQgdW5zaWduZWQgdHhcbiAgICAvLyBmaXJzdCB3ZSB0cnkgdG8gZ2V0IHRoZSBoYXNoIGlkIGFzIGlmIGl0IGlzIHNpZ25lZCwgd2lsbCB0aHJvdyBpZiBpdHMgbm90XG4gICAgdHJ5IHtcbiAgICAgIGlkID0geHJwbC5oYXNoZXMuaGFzaFNpZ25lZFR4KHR4SGV4KTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBpZCA9IHhycGwuaGFzaGVzLmhhc2hUeCh0eEhleCk7XG4gICAgfVxuXG4gICAgaWYgKHRyYW5zYWN0aW9uLlRyYW5zYWN0aW9uVHlwZSA9PT0gJ0FjY291bnRTZXQnKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBkaXNwbGF5T3JkZXI6IFsnaWQnLCAnb3V0cHV0QW1vdW50JywgJ2NoYW5nZUFtb3VudCcsICdvdXRwdXRzJywgJ2NoYW5nZU91dHB1dHMnLCAnZmVlJywgJ2FjY291bnRTZXQnXSxcbiAgICAgICAgaWQ6IGlkLFxuICAgICAgICBjaGFuZ2VPdXRwdXRzOiBbXSxcbiAgICAgICAgb3V0cHV0QW1vdW50OiAwLFxuICAgICAgICBjaGFuZ2VBbW91bnQ6IDAsXG4gICAgICAgIG91dHB1dHM6IFtdLFxuICAgICAgICBmZWU6IHtcbiAgICAgICAgICBmZWU6IHRyYW5zYWN0aW9uLkZlZSxcbiAgICAgICAgICBmZWVSYXRlOiB1bmRlZmluZWQsXG4gICAgICAgICAgc2l6ZTogdHhIZXgubGVuZ3RoIC8gMixcbiAgICAgICAgfSxcbiAgICAgICAgYWNjb3VudFNldDoge1xuICAgICAgICAgIG1lc3NhZ2VLZXk6IHRyYW5zYWN0aW9uLk1lc3NhZ2VLZXksXG4gICAgICAgICAgc2V0RmxhZzogdHJhbnNhY3Rpb24uU2V0RmxhZyxcbiAgICAgICAgfSxcbiAgICAgIH07XG4gICAgfSBlbHNlIGlmICh0cmFuc2FjdGlvbi5UcmFuc2FjdGlvblR5cGUgPT09ICdUcnVzdFNldCcpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGRpc3BsYXlPcmRlcjogW1xuICAgICAgICAgICdpZCcsXG4gICAgICAgICAgJ291dHB1dEFtb3VudCcsXG4gICAgICAgICAgJ2NoYW5nZUFtb3VudCcsXG4gICAgICAgICAgJ291dHB1dHMnLFxuICAgICAgICAgICdjaGFuZ2VPdXRwdXRzJyxcbiAgICAgICAgICAnZmVlJyxcbiAgICAgICAgICAnYWNjb3VudCcsXG4gICAgICAgICAgJ2xpbWl0QW1vdW50JyxcbiAgICAgICAgXSxcbiAgICAgICAgaWQ6IGlkLFxuICAgICAgICBjaGFuZ2VPdXRwdXRzOiBbXSxcbiAgICAgICAgb3V0cHV0QW1vdW50OiAwLFxuICAgICAgICBjaGFuZ2VBbW91bnQ6IDAsXG4gICAgICAgIG91dHB1dHM6IFtdLFxuICAgICAgICBmZWU6IHtcbiAgICAgICAgICBmZWU6IHRyYW5zYWN0aW9uLkZlZSxcbiAgICAgICAgICBmZWVSYXRlOiB1bmRlZmluZWQsXG4gICAgICAgICAgc2l6ZTogdHhIZXgubGVuZ3RoIC8gMixcbiAgICAgICAgfSxcbiAgICAgICAgYWNjb3VudDogdHJhbnNhY3Rpb24uQWNjb3VudCxcbiAgICAgICAgbGltaXRBbW91bnQ6IHtcbiAgICAgICAgICBjdXJyZW5jeTogdHJhbnNhY3Rpb24uTGltaXRBbW91bnQuY3VycmVuY3ksXG4gICAgICAgICAgaXNzdWVyOiB0cmFuc2FjdGlvbi5MaW1pdEFtb3VudC5pc3N1ZXIsXG4gICAgICAgICAgdmFsdWU6IHRyYW5zYWN0aW9uLkxpbWl0QW1vdW50LnZhbHVlLFxuICAgICAgICB9LFxuICAgICAgfTtcbiAgICB9XG5cbiAgICBjb25zdCBhZGRyZXNzID1cbiAgICAgIHRyYW5zYWN0aW9uLkRlc3RpbmF0aW9uICsgKHRyYW5zYWN0aW9uLkRlc3RpbmF0aW9uVGFnID49IDAgPyAnP2R0PScgKyB0cmFuc2FjdGlvbi5EZXN0aW5hdGlvblRhZyA6ICcnKTtcbiAgICByZXR1cm4ge1xuICAgICAgZGlzcGxheU9yZGVyOiBbJ2lkJywgJ291dHB1dEFtb3VudCcsICdjaGFuZ2VBbW91bnQnLCAnb3V0cHV0cycsICdjaGFuZ2VPdXRwdXRzJywgJ2ZlZSddLFxuICAgICAgaWQ6IGlkLFxuICAgICAgY2hhbmdlT3V0cHV0czogW10sXG4gICAgICBvdXRwdXRBbW91bnQ6IHRyYW5zYWN0aW9uLkFtb3VudCxcbiAgICAgIGNoYW5nZUFtb3VudDogMCxcbiAgICAgIG91dHB1dHM6IFtcbiAgICAgICAge1xuICAgICAgICAgIGFkZHJlc3MsXG4gICAgICAgICAgYW1vdW50OiB0cmFuc2FjdGlvbi5BbW91bnQsXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgICAgZmVlOiB7XG4gICAgICAgIGZlZTogdHJhbnNhY3Rpb24uRmVlLFxuICAgICAgICBmZWVSYXRlOiB1bmRlZmluZWQsXG4gICAgICAgIHNpemU6IHR4SGV4Lmxlbmd0aCAvIDIsXG4gICAgICB9LFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogVmVyaWZ5IHRoYXQgYSB0cmFuc2FjdGlvbiBwcmVidWlsZCBjb21wbGllcyB3aXRoIHRoZSBvcmlnaW5hbCBpbnRlbnRpb25cbiAgICogQHBhcmFtIHR4UGFyYW1zIHBhcmFtcyBvYmplY3QgcGFzc2VkIHRvIHNlbmRcbiAgICogQHBhcmFtIHR4UHJlYnVpbGQgcHJlYnVpbGQgb2JqZWN0IHJldHVybmVkIGJ5IHNlcnZlclxuICAgKiBAcGFyYW0gd2FsbGV0XG4gICAqIEByZXR1cm5zIHtib29sZWFufVxuICAgKi9cbiAgcHVibGljIGFzeW5jIHZlcmlmeVRyYW5zYWN0aW9uKHsgdHhQYXJhbXMsIHR4UHJlYnVpbGQgfTogVmVyaWZ5VHJhbnNhY3Rpb25PcHRpb25zKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgY29uc3QgY29pbkNvbmZpZyA9IGNvaW5zLmdldCh0aGlzLmdldENoYWluKCkpIGFzIFhycENvaW47XG4gICAgY29uc3QgZXhwbGFuYXRpb24gPSBhd2FpdCB0aGlzLmV4cGxhaW5UcmFuc2FjdGlvbih7XG4gICAgICB0eEhleDogdHhQcmVidWlsZC50eEhleCxcbiAgICB9KTtcblxuICAgIGNvbnN0IG91dHB1dCA9IFsuLi5leHBsYW5hdGlvbi5vdXRwdXRzLCAuLi5leHBsYW5hdGlvbi5jaGFuZ2VPdXRwdXRzXVswXTtcbiAgICBjb25zdCBleHBlY3RlZE91dHB1dCA9IHR4UGFyYW1zLnJlY2lwaWVudHMgJiYgdHhQYXJhbXMucmVjaXBpZW50c1swXTtcblxuICAgIGNvbnN0IGNvbXBhcmF0b3IgPSAocmVjaXBpZW50MSwgcmVjaXBpZW50MikgPT4ge1xuICAgICAgaWYgKHJlY2lwaWVudDEuYWRkcmVzcyAhPT0gcmVjaXBpZW50Mi5hZGRyZXNzKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGFtb3VudDEgPSBuZXcgQmlnTnVtYmVyKHJlY2lwaWVudDEuYW1vdW50KTtcbiAgICAgIGNvbnN0IGFtb3VudDIgPSBuZXcgQmlnTnVtYmVyKHJlY2lwaWVudDIuYW1vdW50KTtcbiAgICAgIHJldHVybiBhbW91bnQxLnRvRml4ZWQoKSA9PT0gYW1vdW50Mi50b0ZpeGVkKCk7XG4gICAgfTtcblxuICAgIGlmIChcbiAgICAgICh0eFBhcmFtcy50eXBlID09PSB1bmRlZmluZWQgfHwgdHhQYXJhbXMudHlwZSA9PT0gJ3BheW1lbnQnKSAmJlxuICAgICAgdHlwZW9mIG91dHB1dC5hbW91bnQgIT09ICdvYmplY3QnICYmXG4gICAgICAhY29tcGFyYXRvcihvdXRwdXQsIGV4cGVjdGVkT3V0cHV0KVxuICAgICkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCd0cmFuc2FjdGlvbiBwcmVidWlsZCBkb2VzIG5vdCBtYXRjaCBleHBlY3RlZCBvdXRwdXQnKTtcbiAgICB9XG5cbiAgICBpZiAodHhQYXJhbXMudHlwZSA9PT0gJ2VuYWJsZXRva2VuJykge1xuICAgICAgaWYgKHR4UGFyYW1zLnJlY2lwaWVudHM/Lmxlbmd0aCAhPT0gMSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgYCR7dGhpcy5nZXRDaGFpbigpfSBkb2Vzbid0IHN1cHBvcnQgc2VuZGluZyB0byBtb3JlIHRoYW4gMSBkZXN0aW5hdGlvbiBhZGRyZXNzIHdpdGhpbiBhIHNpbmdsZSB0cmFuc2FjdGlvbi4gVHJ5IGFnYWluLCB1c2luZyBvbmx5IGEgc2luZ2xlIHJlY2lwaWVudC5gXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICBjb25zdCByZWNpcGllbnQgPSB0eFBhcmFtcy5yZWNpcGllbnRzWzBdO1xuICAgICAgaWYgKCFyZWNpcGllbnQudG9rZW5OYW1lKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignUmVjaXBpZW50IG11c3QgaW5jbHVkZSBhIHRva2VuIG5hbWUuJyk7XG4gICAgICB9XG4gICAgICBjb25zdCByZWNpcGllbnRDdXJyZW5jeSA9IHV0aWxzLmdldFhycEN1cnJlbmN5RnJvbVRva2VuTmFtZShyZWNpcGllbnQudG9rZW5OYW1lKS5jdXJyZW5jeTtcbiAgICAgIGlmIChjb2luQ29uZmlnLmlzVG9rZW4pIHtcbiAgICAgICAgaWYgKHJlY2lwaWVudEN1cnJlbmN5ICE9PSBjb2luQ29uZmlnLmN1cnJlbmN5Q29kZSkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcignSW5jb3JyZWN0IHRva2VuIG5hbWUgc3BlY2lmaWVkIGluIHJlY2lwaWVudHMnKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKCEoJ2FjY291bnQnIGluIGV4cGxhbmF0aW9uKSB8fCAhKCdsaW1pdEFtb3VudCcgaW4gZXhwbGFuYXRpb24pIHx8ICFleHBsYW5hdGlvbi5saW1pdEFtb3VudC5jdXJyZW5jeSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0V4cGxhbmF0aW9uIGlzIG1pc3NpbmcgcmVxdWlyZWQga2V5cyAoYWNjb3VudCBvciBsaW1pdEFtb3VudCB3aXRoIGN1cnJlbmN5KScpO1xuICAgICAgfVxuICAgICAgY29uc3QgYmFzZUFkZHJlc3MgPSBleHBsYW5hdGlvbi5hY2NvdW50O1xuICAgICAgY29uc3QgY3VycmVuY3kgPSBleHBsYW5hdGlvbi5saW1pdEFtb3VudC5jdXJyZW5jeTtcblxuICAgICAgaWYgKHJlY2lwaWVudC5hZGRyZXNzICE9PSBiYXNlQWRkcmVzcyB8fCByZWNpcGllbnRDdXJyZW5jeSAhPT0gY3VycmVuY3kpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdUeCBvdXRwdXRzIGRvZXMgbm90IG1hdGNoIHdpdGggZXhwZWN0ZWQgdHhQYXJhbXMgcmVjaXBpZW50cycpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayBpZiBhZGRyZXNzIGlzIGEgdmFsaWQgWFJQIGFkZHJlc3MsIGFuZCB0aGVuIG1ha2Ugc3VyZSB0aGUgcm9vdCBhZGRyZXNzZXMgbWF0Y2guXG4gICAqIFRoaXMgcHJldmVudHMgYXR0YWNrcyB3aGVyZSBhbiBhdHRhY2sgbWF5IHN3aXRjaCBvdXQgdGhlIG5ldyBhZGRyZXNzIGZvciBvbmUgb2YgdGhlaXIgb3duXG4gICAqIEBwYXJhbSBhZGRyZXNzIHtTdHJpbmd9IHRoZSBhZGRyZXNzIHRvIHZlcmlmeVxuICAgKiBAcGFyYW0gcm9vdEFkZHJlc3Mge1N0cmluZ30gdGhlIHdhbGxldCdzIHJvb3QgYWRkcmVzc1xuICAgKiBAcmV0dXJuIHRydWUgaWZmIGFkZHJlc3MgaXMgYSB3YWxsZXQgYWRkcmVzcyAoYmFzZWQgb24gcm9vdEFkZHJlc3MpXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgaXNXYWxsZXRBZGRyZXNzKHsgYWRkcmVzcywgcm9vdEFkZHJlc3MgfTogVmVyaWZ5QWRkcmVzc09wdGlvbnMpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBpZiAoIXRoaXMuaXNWYWxpZEFkZHJlc3MoYWRkcmVzcykpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQWRkcmVzc0Vycm9yKGBhZGRyZXNzIHZlcmlmaWNhdGlvbiBmYWlsdXJlOiBhZGRyZXNzIFwiJHthZGRyZXNzfVwiIGlzIG5vdCB2YWxpZGApO1xuICAgIH1cblxuICAgIGNvbnN0IGFkZHJlc3NEZXRhaWxzID0gdXRpbHMuZ2V0QWRkcmVzc0RldGFpbHMoYWRkcmVzcyk7XG4gICAgY29uc3Qgcm9vdEFkZHJlc3NEZXRhaWxzID0gdXRpbHMuZ2V0QWRkcmVzc0RldGFpbHMocm9vdEFkZHJlc3MpO1xuXG4gICAgaWYgKGFkZHJlc3NEZXRhaWxzLmFkZHJlc3MgIT09IHJvb3RBZGRyZXNzRGV0YWlscy5hZGRyZXNzKSB7XG4gICAgICB0aHJvdyBuZXcgVW5leHBlY3RlZEFkZHJlc3NFcnJvcihcbiAgICAgICAgYGFkZHJlc3MgdmFsaWRhdGlvbiBmYWlsdXJlOiAke2FkZHJlc3NEZXRhaWxzLmFkZHJlc3N9IHZzLiAke3Jvb3RBZGRyZXNzRGV0YWlscy5hZGRyZXNzfWBcbiAgICAgICk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICAvKipcbiAgICogVVJMIG9mIGEgd2VsbC1rbm93biwgcHVibGljIGZhY2luZyAobm9uLWJpdGdvKSByaXBwbGVkIGluc3RhbmNlIHdoaWNoIGNhbiBiZSB1c2VkIGZvciByZWNvdmVyeVxuICAgKi9cbiAgcHVibGljIGdldFJpcHBsZWRVcmwoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gJ2h0dHBzOi8vczEucmlwcGxlLmNvbTo1MTIzNCc7XG4gIH1cblxuICAvKipcbiAgICogQnVpbGRzIGEgZnVuZHMgcmVjb3ZlcnkgdHJhbnNhY3Rpb24gd2l0aG91dCBCaXRHb1xuICAgKiBAcGFyYW0gcGFyYW1zXG4gICAqIC0gcm9vdEFkZHJlc3M6IHJvb3QgWFJQIHdhbGxldCBhZGRyZXNzIHRvIHJlY292ZXIgZnVuZHMgZnJvbVxuICAgKiAtIHVzZXJLZXk6IFtlbmNyeXB0ZWRdIHhwcnZcbiAgICogLSBiYWNrdXBLZXk6IFtlbmNyeXB0ZWRdIHhwcnYsIG9yIHhwdWIgaWYgdGhlIHhwcnYgaXMgaGVsZCBieSBhIEtSUyBwcm92aWRlclxuICAgKiAtIHdhbGxldFBhc3NwaHJhc2U6IG5lY2Vzc2FyeSBpZiBvbmUgb2YgdGhlIHhwcnZzIGlzIGVuY3J5cHRlZFxuICAgKiAtIGJpdGdvS2V5OiB4cHViXG4gICAqIC0ga3JzUHJvdmlkZXI6IG5lY2Vzc2FyeSBpZiBiYWNrdXAga2V5IGlzIGhlbGQgYnkgS1JTXG4gICAqIC0gcmVjb3ZlcnlEZXN0aW5hdGlvbjogdGFyZ2V0IGFkZHJlc3MgdG8gc2VuZCByZWNvdmVyZWQgZnVuZHMgdG9cbiAgICovXG4gIHB1YmxpYyBhc3luYyByZWNvdmVyKHBhcmFtczogUmVjb3ZlcnlPcHRpb25zKTogUHJvbWlzZTxSZWNvdmVyeUluZm8gfCBSZWNvdmVyeVRyYW5zYWN0aW9uPiB7XG4gICAgY29uc3QgcmlwcGxlZFVybCA9IHRoaXMuZ2V0UmlwcGxlZFVybCgpO1xuICAgIGNvbnN0IGlzS3JzUmVjb3ZlcnkgPSBwYXJhbXMuYmFja3VwS2V5LnN0YXJ0c1dpdGgoJ3hwdWInKSAmJiAhcGFyYW1zLnVzZXJLZXkuc3RhcnRzV2l0aCgneHB1YicpO1xuICAgIGNvbnN0IGlzVW5zaWduZWRTd2VlcCA9IHBhcmFtcy5iYWNrdXBLZXkuc3RhcnRzV2l0aCgneHB1YicpICYmIHBhcmFtcy51c2VyS2V5LnN0YXJ0c1dpdGgoJ3hwdWInKTtcblxuICAgIGNvbnN0IGFjY291bnRJbmZvUGFyYW1zID0ge1xuICAgICAgbWV0aG9kOiAnYWNjb3VudF9pbmZvJyxcbiAgICAgIHBhcmFtczogW1xuICAgICAgICB7XG4gICAgICAgICAgYWNjb3VudDogcGFyYW1zLnJvb3RBZGRyZXNzLFxuICAgICAgICAgIGxlZGdlcl9pbmRleDogJ2N1cnJlbnQnLFxuICAgICAgICAgIHF1ZXVlOiB0cnVlLFxuICAgICAgICAgIHN0cmljdDogdHJ1ZSxcbiAgICAgICAgICBzaWduZXJfbGlzdHM6IHRydWUsXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgIH07XG5cbiAgICBjb25zdCBhY2NvdW50TGluZXNQYXJhbXMgPSB7XG4gICAgICBtZXRob2Q6ICdhY2NvdW50X2xpbmVzJyxcbiAgICAgIHBhcmFtczogW1xuICAgICAgICB7XG4gICAgICAgICAgYWNjb3VudDogcGFyYW1zLnJvb3RBZGRyZXNzLFxuICAgICAgICAgIGxlZGdlcl9pbmRleDogJ3ZhbGlkYXRlZCcsXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgIH07XG5cbiAgICBpZiAoaXNLcnNSZWNvdmVyeSkge1xuICAgICAgY2hlY2tLcnNQcm92aWRlcih0aGlzLCBwYXJhbXMua3JzUHJvdmlkZXIpO1xuICAgIH1cblxuICAgIC8vIFZhbGlkYXRlIHRoZSBkZXN0aW5hdGlvbiBhZGRyZXNzXG4gICAgaWYgKCF0aGlzLmlzVmFsaWRBZGRyZXNzKHBhcmFtcy5yZWNvdmVyeURlc3RpbmF0aW9uKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIGRlc3RpbmF0aW9uIGFkZHJlc3MhJyk7XG4gICAgfVxuXG4gICAgY29uc3Qga2V5cyA9IGdldEJpcDMyS2V5cyh0aGlzLmJpdGdvLCBwYXJhbXMsIHsgcmVxdWlyZUJpdEdvWHB1YjogZmFsc2UgfSk7XG5cbiAgICBjb25zdCB7IGFkZHJlc3NEZXRhaWxzLCBmZWVEZXRhaWxzLCBzZXJ2ZXJEZXRhaWxzLCBhY2NvdW50TGluZXMgfSA9IGF3YWl0IHByb21pc2VQcm9wcyh7XG4gICAgICBhZGRyZXNzRGV0YWlsczogdGhpcy5iaXRnby5wb3N0KHJpcHBsZWRVcmwpLnNlbmQoYWNjb3VudEluZm9QYXJhbXMpLFxuICAgICAgZmVlRGV0YWlsczogdGhpcy5iaXRnby5wb3N0KHJpcHBsZWRVcmwpLnNlbmQoeyBtZXRob2Q6ICdmZWUnIH0pLFxuICAgICAgc2VydmVyRGV0YWlsczogdGhpcy5iaXRnby5wb3N0KHJpcHBsZWRVcmwpLnNlbmQoeyBtZXRob2Q6ICdzZXJ2ZXJfaW5mbycgfSksXG4gICAgICBhY2NvdW50TGluZXM6IHRoaXMuYml0Z28ucG9zdChyaXBwbGVkVXJsKS5zZW5kKGFjY291bnRMaW5lc1BhcmFtcyksXG4gICAgfSk7XG5cbiAgICBjb25zdCBvcGVuTGVkZ2VyRmVlID0gbmV3IEJpZ051bWJlcihmZWVEZXRhaWxzLmJvZHkucmVzdWx0LmRyb3BzLm9wZW5fbGVkZ2VyX2ZlZSk7XG4gICAgY29uc3QgYmFzZVJlc2VydmUgPSBuZXcgQmlnTnVtYmVyKHNlcnZlckRldGFpbHMuYm9keS5yZXN1bHQuaW5mby52YWxpZGF0ZWRfbGVkZ2VyLnJlc2VydmVfYmFzZV94cnApLnRpbWVzKFxuICAgICAgdGhpcy5nZXRCYXNlRmFjdG9yKClcbiAgICApO1xuICAgIGNvbnN0IHJlc2VydmVEZWx0YSA9IG5ldyBCaWdOdW1iZXIoc2VydmVyRGV0YWlscy5ib2R5LnJlc3VsdC5pbmZvLnZhbGlkYXRlZF9sZWRnZXIucmVzZXJ2ZV9pbmNfeHJwKS50aW1lcyhcbiAgICAgIHRoaXMuZ2V0QmFzZUZhY3RvcigpXG4gICAgKTtcbiAgICBjb25zdCBjdXJyZW50TGVkZ2VyID0gc2VydmVyRGV0YWlscy5ib2R5LnJlc3VsdC5pbmZvLnZhbGlkYXRlZF9sZWRnZXIuc2VxO1xuICAgIGNvbnN0IHNlcXVlbmNlSWQgPSBhZGRyZXNzRGV0YWlscy5ib2R5LnJlc3VsdC5hY2NvdW50X2RhdGEuU2VxdWVuY2U7XG4gICAgY29uc3QgYmFsYW5jZSA9IG5ldyBCaWdOdW1iZXIoYWRkcmVzc0RldGFpbHMuYm9keS5yZXN1bHQuYWNjb3VudF9kYXRhLkJhbGFuY2UpO1xuICAgIGNvbnN0IHNpZ25lckxpc3RzID0gYWRkcmVzc0RldGFpbHMuYm9keS5yZXN1bHQuYWNjb3VudF9kYXRhLnNpZ25lcl9saXN0cztcbiAgICBjb25zdCBhY2NvdW50RmxhZ3MgPSBhZGRyZXNzRGV0YWlscy5ib2R5LnJlc3VsdC5hY2NvdW50X2RhdGEuRmxhZ3M7XG4gICAgY29uc3Qgb3duZXJDb3VudCA9IG5ldyBCaWdOdW1iZXIoYWRkcmVzc0RldGFpbHMuYm9keS5yZXN1bHQuYWNjb3VudF9kYXRhLk93bmVyQ291bnQpO1xuXG4gICAgLy8gbWFrZSBzdXJlIHRoZXJlIGlzIG9ubHkgb25lIHNpZ25lciBsaXN0IHNldFxuICAgIGlmIChzaWduZXJMaXN0cy5sZW5ndGggIT09IDEpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcigndW5leHBlY3RlZCBzZXQgb2Ygc2lnbmVyIGxpc3RzJyk7XG4gICAgfVxuXG4gICAgLy8gbWFrZSBzdXJlIHRoZSBzaWduZXJzIGFyZSB1c2VyLCBiYWNrdXAsIGJpdGdvXG4gICAgY29uc3QgdXNlckFkZHJlc3MgPSByaXBwbGVLZXlwYWlycy5kZXJpdmVBZGRyZXNzKGtleXNbMF0ucHVibGljS2V5LnRvU3RyaW5nKCdoZXgnKSk7XG4gICAgY29uc3QgYmFja3VwQWRkcmVzcyA9IHJpcHBsZUtleXBhaXJzLmRlcml2ZUFkZHJlc3Moa2V5c1sxXS5wdWJsaWNLZXkudG9TdHJpbmcoJ2hleCcpKTtcblxuICAgIGNvbnN0IHNpZ25lckxpc3QgPSBzaWduZXJMaXN0c1swXTtcbiAgICBpZiAoc2lnbmVyTGlzdC5TaWduZXJRdW9ydW0gIT09IDIpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignaW52YWxpZCBtaW5pbXVtIHNpZ25hdHVyZSBjb3VudCcpO1xuICAgIH1cbiAgICBjb25zdCBmb3VuZEFkZHJlc3NlcyA9IHt9O1xuXG4gICAgY29uc3Qgc2lnbmVyRW50cmllcyA9IHNpZ25lckxpc3QuU2lnbmVyRW50cmllcztcbiAgICBpZiAoc2lnbmVyRW50cmllcy5sZW5ndGggIT09IDMpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignaW52YWxpZCBzaWduZXIgbGlzdCBsZW5ndGgnKTtcbiAgICB9XG4gICAgZm9yIChjb25zdCB7IFNpZ25lckVudHJ5IH0gb2Ygc2lnbmVyRW50cmllcykge1xuICAgICAgY29uc3Qgd2VpZ2h0ID0gU2lnbmVyRW50cnkuU2lnbmVyV2VpZ2h0O1xuICAgICAgY29uc3QgYWRkcmVzcyA9IFNpZ25lckVudHJ5LkFjY291bnQ7XG4gICAgICBpZiAod2VpZ2h0ICE9PSAxKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignaW52YWxpZCBzaWduZXIgd2VpZ2h0Jyk7XG4gICAgICB9XG5cbiAgICAgIC8vIGlmIGl0J3MgYSBkdXBlIG9mIGFuIGFkZHJlc3Mgd2UgYWxyZWFkeSBrbm93LCBibG9ja1xuICAgICAgaWYgKGZvdW5kQWRkcmVzc2VzW2FkZHJlc3NdID49IDEpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdkdXBsaWNhdGUgc2lnbmVyIGFkZHJlc3MnKTtcbiAgICAgIH1cbiAgICAgIGZvdW5kQWRkcmVzc2VzW2FkZHJlc3NdID0gKGZvdW5kQWRkcmVzc2VzW2FkZHJlc3NdIHx8IDApICsgMTtcbiAgICB9XG5cbiAgICBpZiAoZm91bmRBZGRyZXNzZXNbdXNlckFkZHJlc3NdICE9PSAxKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ3VuZXhwZWN0ZWQgaW5jaWRlbmNlIGZyZXF1ZW5jeSBvZiB1c2VyIHNpZ25lciBhZGRyZXNzJyk7XG4gICAgfVxuICAgIGlmIChmb3VuZEFkZHJlc3Nlc1tiYWNrdXBBZGRyZXNzXSAhPT0gMSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCd1bmV4cGVjdGVkIGluY2lkZW5jZSBmcmVxdWVuY3kgb2YgdXNlciBzaWduZXIgYWRkcmVzcycpO1xuICAgIH1cblxuICAgIC8vIG1ha2Ugc3VyZSB0aGUgZmxhZ3MgZGlzYWJsZSB0aGUgbWFzdGVyIGtleSBhbmQgZW5mb3JjZSBkZXN0aW5hdGlvbiB0YWdzXG4gICAgY29uc3QgVVNFUl9LRVlfU0VUVElOR19GTEFHID0gNjU1MzY7XG4gICAgY29uc3QgTUFTVEVSX0tFWV9ERUFDVElWQVRJT05fRkxBRyA9IDEwNDg1NzY7XG4gICAgY29uc3QgUkVRVUlSRV9ERVNUSU5BVElPTl9UQUdfRkxBRyA9IDEzMTA3MjtcbiAgICBpZiAoKGFjY291bnRGbGFncyAmIFVTRVJfS0VZX1NFVFRJTkdfRkxBRykgIT09IDApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignYSBjdXN0b20gdXNlciBrZXkgaGFzIGJlZW4gc2V0Jyk7XG4gICAgfVxuICAgIGlmICgoYWNjb3VudEZsYWdzICYgTUFTVEVSX0tFWV9ERUFDVElWQVRJT05fRkxBRykgIT09IE1BU1RFUl9LRVlfREVBQ1RJVkFUSU9OX0ZMQUcpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcigndGhlIG1hc3RlciBrZXkgaGFzIG5vdCBiZWVuIGRlYWN0aXZhdGVkJyk7XG4gICAgfVxuICAgIGlmICgoYWNjb3VudEZsYWdzICYgUkVRVUlSRV9ERVNUSU5BVElPTl9UQUdfRkxBRykgIT09IFJFUVVJUkVfREVTVElOQVRJT05fVEFHX0ZMQUcpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcigndGhlIGRlc3RpbmF0aW9uIGZsYWcgcmVxdWlyZW1lbnQgaGFzIG5vdCBiZWVuIGFjdGl2YXRlZCcpO1xuICAgIH1cblxuICAgIC8vIHJlY292ZXIgdGhlIGZ1bmRzXG4gICAgY29uc3QgdG90YWxSZXNlcnZlRGVsdGEgPSByZXNlcnZlRGVsdGEudGltZXMob3duZXJDb3VudCk7XG4gICAgY29uc3QgcmVzZXJ2ZSA9IGJhc2VSZXNlcnZlLnBsdXModG90YWxSZXNlcnZlRGVsdGEpO1xuICAgIGNvbnN0IHJlY292ZXJhYmxlQmFsYW5jZSA9IGJhbGFuY2UubWludXMocmVzZXJ2ZSk7XG5cbiAgICBjb25zdCByYXdEZXN0aW5hdGlvbiA9IHBhcmFtcy5yZWNvdmVyeURlc3RpbmF0aW9uO1xuICAgIGNvbnN0IGRlc3RpbmF0aW9uRGV0YWlscyA9IHVybC5wYXJzZShyYXdEZXN0aW5hdGlvbik7XG5cbiAgICBpZiAoZGVzdGluYXRpb25EZXRhaWxzLnF1ZXJ5KSB7XG4gICAgICBjb25zdCBxdWVyeURldGFpbHMgPSBxdWVyeXN0cmluZy5wYXJzZShkZXN0aW5hdGlvbkRldGFpbHMucXVlcnkpO1xuICAgICAgaWYgKEFycmF5LmlzQXJyYXkocXVlcnlEZXRhaWxzLmR0KSkge1xuICAgICAgICAvLyBpZiBxdWVyeURldGFpbHMuZHQgaXMgYW4gYXJyYXksIHRoYXQgbWVhbnMgZHQgd2FzIGdpdmVuIG11bHRpcGxlIHRpbWVzLCB3aGljaCBpcyBub3QgdmFsaWRcbiAgICAgICAgdGhyb3cgbmV3IEludmFsaWRBZGRyZXNzRXJyb3IoXG4gICAgICAgICAgYGRlc3RpbmF0aW9uIHRhZyBjYW4gYXBwZWFyIGF0IG1vc3Qgb25jZSwgYnV0ICR7cXVlcnlEZXRhaWxzLmR0Lmxlbmd0aH0gZGVzdGluYXRpb24gdGFncyB3ZXJlIGZvdW5kYFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChyZWNvdmVyYWJsZUJhbGFuY2UudG9OdW1iZXIoKSA8PSAwKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBRdWFudGl0eSBvZiBYUlAgdG8gcmVjb3ZlciBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAwLiBDdXJyZW50IGJhbGFuY2U6ICR7YmFsYW5jZS50b051bWJlcigpfSwgYmxvY2tjaGFpbiByZXNlcnZlOiAke3Jlc2VydmUudG9OdW1iZXIoKX0sIHNwZW5kYWJsZSBiYWxhbmNlOiAke3JlY292ZXJhYmxlQmFsYW5jZS50b051bWJlcigpfWBcbiAgICAgICk7XG4gICAgfVxuXG4gICAgY29uc3QgaXNzdWVyID0gcGFyYW1zPy5pc3N1ZXJBZGRyZXNzO1xuICAgIGNvbnN0IGN1cnJlbmN5ID0gcGFyYW1zPy5jdXJyZW5jeUNvZGU7XG4gICAgaWYgKCEhaXNzdWVyICYmICEhY3VycmVuY3kpIHtcbiAgICAgIGNvbnN0IHRva2VuUGFyYW1zID0ge1xuICAgICAgICByZWNvdmVyeURlc3RpbmF0aW9uOiBwYXJhbXMucmVjb3ZlcnlEZXN0aW5hdGlvbixcbiAgICAgICAgcmVjb3ZlcmFibGVCYWxhbmNlLFxuICAgICAgICBjdXJyZW50TGVkZ2VyLFxuICAgICAgICBvcGVuTGVkZ2VyRmVlLFxuICAgICAgICBzZXF1ZW5jZUlkLFxuICAgICAgICBhY2NvdW50TGluZXMsXG4gICAgICAgIGtleXMsXG4gICAgICAgIGlzS3JzUmVjb3ZlcnksXG4gICAgICAgIGlzVW5zaWduZWRTd2VlcCxcbiAgICAgICAgdXNlckFkZHJlc3MsXG4gICAgICAgIGJhY2t1cEFkZHJlc3MsXG4gICAgICAgIGlzc3VlcixcbiAgICAgICAgY3VycmVuY3ksXG4gICAgICB9O1xuXG4gICAgICByZXR1cm4gdGhpcy5yZWNvdmVyWHJwVG9rZW4ocGFyYW1zLCB0b2tlblBhcmFtcyk7XG4gICAgfVxuXG4gICAgY29uc3QgZmFjdG9yeSA9IG5ldyBUcmFuc2FjdGlvbkJ1aWxkZXJGYWN0b3J5KGNvaW5zLmdldCh0aGlzLmdldENoYWluKCkpKTtcbiAgICBjb25zdCB0eEJ1aWxkZXIgPSBmYWN0b3J5LmdldFRyYW5zZmVyQnVpbGRlcigpIGFzIFRyYW5zZmVyQnVpbGRlcjtcbiAgICB0eEJ1aWxkZXJcbiAgICAgIC50byhwYXJhbXMucmVjb3ZlcnlEZXN0aW5hdGlvbiBhcyBzdHJpbmcpXG4gICAgICAuYW1vdW50KHJlY292ZXJhYmxlQmFsYW5jZS50b0ZpeGVkKDApKVxuICAgICAgLnNlbmRlcihwYXJhbXMucm9vdEFkZHJlc3MpXG4gICAgICAuZmxhZ3MoMjE0NzQ4MzY0OClcbiAgICAgIC5sYXN0TGVkZ2VyU2VxdWVuY2UoY3VycmVudExlZGdlciArIDEwMDAwMDApIC8vIGdpdmUgaXQgMSBtaWxsaW9uIGxlZGdlcnMnIHRpbWUgKH4xIG1vbnRoLCBzdWl0YWJsZSBmb3IgS1JTKVxuICAgICAgLmZlZShvcGVuTGVkZ2VyRmVlLnRpbWVzKDMpLnRvRml4ZWQoMCkpIC8vIHRoZSBmYWN0b3IgdGhyZWUgaXMgZm9yIHRoZSBtdWx0aXNpZ25pbmdcbiAgICAgIC5zZXF1ZW5jZShzZXF1ZW5jZUlkKTtcblxuICAgIGNvbnN0IHR4ID0gYXdhaXQgdHhCdWlsZGVyLmJ1aWxkKCk7XG4gICAgY29uc3Qgc2VyaWFsaXplZFR4ID0gdHgudG9Ccm9hZGNhc3RGb3JtYXQoKTtcblxuICAgIGlmIChpc1Vuc2lnbmVkU3dlZXApIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHR4SGV4OiBzZXJpYWxpemVkVHgsXG4gICAgICAgIGNvaW46IHRoaXMuZ2V0Q2hhaW4oKSxcbiAgICAgIH07XG4gICAgfVxuXG4gICAgaWYgKCFrZXlzWzBdLnByaXZhdGVLZXkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgdXNlcktleSBpcyBub3QgYSBwcml2YXRlIGtleWApO1xuICAgIH1cbiAgICBjb25zdCB1c2VyS2V5ID0ga2V5c1swXS5wcml2YXRlS2V5LnRvU3RyaW5nKCdoZXgnKTtcbiAgICBjb25zdCB1c2VyU2lnbmF0dXJlID0gcmlwcGxlLnNpZ25XaXRoUHJpdmF0ZUtleShzZXJpYWxpemVkVHgsIHVzZXJLZXksIHsgc2lnbkFzOiB1c2VyQWRkcmVzcyB9KTtcblxuICAgIGxldCBzaWduZWRUcmFuc2FjdGlvbjogc3RyaW5nO1xuXG4gICAgaWYgKGlzS3JzUmVjb3ZlcnkpIHtcbiAgICAgIHNpZ25lZFRyYW5zYWN0aW9uID0gdXNlclNpZ25hdHVyZS5zaWduZWRUcmFuc2FjdGlvbjtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKCFrZXlzWzFdLnByaXZhdGVLZXkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBiYWNrdXBLZXkgaXMgbm90IGEgcHJpdmF0ZSBrZXlgKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGJhY2t1cEtleSA9IGtleXNbMV0ucHJpdmF0ZUtleS50b1N0cmluZygnaGV4Jyk7XG4gICAgICBjb25zdCBiYWNrdXBTaWduYXR1cmUgPSByaXBwbGUuc2lnbldpdGhQcml2YXRlS2V5KHNlcmlhbGl6ZWRUeCwgYmFja3VwS2V5LCB7IHNpZ25BczogYmFja3VwQWRkcmVzcyB9KTtcbiAgICAgIHNpZ25lZFRyYW5zYWN0aW9uID0gcmlwcGxlLm11bHRpc2lnbihbdXNlclNpZ25hdHVyZS5zaWduZWRUcmFuc2FjdGlvbiwgYmFja3VwU2lnbmF0dXJlLnNpZ25lZFRyYW5zYWN0aW9uXSk7XG4gICAgfVxuXG4gICAgY29uc3QgdHJhbnNhY3Rpb25FeHBsYW5hdGlvbjogUmVjb3ZlcnlJbmZvID0gKGF3YWl0IHRoaXMuZXhwbGFpblRyYW5zYWN0aW9uKHtcbiAgICAgIHR4SGV4OiBzaWduZWRUcmFuc2FjdGlvbixcbiAgICB9KSkgYXMgUmVjb3ZlcnlJbmZvO1xuXG4gICAgdHJhbnNhY3Rpb25FeHBsYW5hdGlvbi50eEhleCA9IHNpZ25lZFRyYW5zYWN0aW9uO1xuXG4gICAgaWYgKGlzS3JzUmVjb3ZlcnkpIHtcbiAgICAgIHRyYW5zYWN0aW9uRXhwbGFuYXRpb24uYmFja3VwS2V5ID0gcGFyYW1zLmJhY2t1cEtleTtcbiAgICAgIHRyYW5zYWN0aW9uRXhwbGFuYXRpb24uY29pbiA9IHRoaXMuZ2V0Q2hhaW4oKTtcbiAgICB9XG4gICAgcmV0dXJuIHRyYW5zYWN0aW9uRXhwbGFuYXRpb247XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgcmVjb3ZlclhycFRva2VuKHBhcmFtcywgdG9rZW5QYXJhbXMpIHtcbiAgICBjb25zdCB7IGN1cnJlbmN5LCBpc3N1ZXIgfSA9IHRva2VuUGFyYW1zO1xuICAgIGNvbnN0IHRva2VuTmFtZSA9ICh1dGlscy5nZXRYcnBUb2tlbihpc3N1ZXIsIGN1cnJlbmN5KSBhcyBYcnBDb2luKS5uYW1lO1xuICAgIGNvbnN0IGxpbmVzID0gdG9rZW5QYXJhbXMuYWNjb3VudExpbmVzLmJvZHkucmVzdWx0LmxpbmVzO1xuXG4gICAgbGV0IGFtb3VudDtcbiAgICBmb3IgKGNvbnN0IGxpbmUgb2YgbGluZXMpIHtcbiAgICAgIGlmIChsaW5lLmN1cnJlbmN5ID09PSBjdXJyZW5jeSAmJiBsaW5lLmFjY291bnQgPT09IGlzc3Vlcikge1xuICAgICAgICBhbW91bnQgPSBsaW5lLmJhbGFuY2U7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChhbW91bnQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBEb2VzIG5vdCBoYXZlIFRydXN0bGluZSB3aXRoICR7aXNzdWVyfWApO1xuICAgIH1cbiAgICBpZiAoYW1vdW50ID09PSAnMCcpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgRG9lcyBub3QgaGF2ZSBmdW5kcyB0byByZWNvdmVyYCk7XG4gICAgfVxuXG4gICAgY29uc3QgZGVjaW1hbFBsYWNlcyA9IGNvaW5zLmdldCh0b2tlbk5hbWUpLmRlY2ltYWxQbGFjZXM7XG4gICAgYW1vdW50ID0gbmV3IEJpZ051bWJlcihhbW91bnQpLnNoaWZ0ZWRCeShkZWNpbWFsUGxhY2VzKS50b0ZpeGVkKCk7XG5cbiAgICBjb25zdCBGTEFHX1ZBTFVFID0gMjE0NzQ4MzY0ODtcblxuICAgIGNvbnN0IGZhY3RvcnkgPSBuZXcgVHJhbnNhY3Rpb25CdWlsZGVyRmFjdG9yeShjb2lucy5nZXQodG9rZW5OYW1lKSk7XG4gICAgY29uc3QgdHhCdWlsZGVyID0gZmFjdG9yeS5nZXRUb2tlblRyYW5zZmVyQnVpbGRlcigpIGFzIFRva2VuVHJhbnNmZXJCdWlsZGVyO1xuICAgIHR4QnVpbGRlclxuICAgICAgLnRvKHRva2VuUGFyYW1zLnJlY292ZXJ5RGVzdGluYXRpb24pXG4gICAgICAuYW1vdW50KGFtb3VudClcbiAgICAgIC5zZW5kZXIocGFyYW1zLnJvb3RBZGRyZXNzKVxuICAgICAgLmZsYWdzKEZMQUdfVkFMVUUpXG4gICAgICAubGFzdExlZGdlclNlcXVlbmNlKHRva2VuUGFyYW1zLmN1cnJlbnRMZWRnZXIgKyAxMDAwMDAwKSAvLyBnaXZlIGl0IDEgbWlsbGlvbiBsZWRnZXJzJyB0aW1lICh+MSBtb250aCwgc3VpdGFibGUgZm9yIEtSUylcbiAgICAgIC5mZWUodG9rZW5QYXJhbXMub3BlbkxlZGdlckZlZS50aW1lcygzKS50b0ZpeGVkKDApKSAvLyB0aGUgZmFjdG9yIHRocmVlIGlzIGZvciB0aGUgbXVsdGlzaWduaW5nXG4gICAgICAuc2VxdWVuY2UodG9rZW5QYXJhbXMuc2VxdWVuY2VJZCk7XG5cbiAgICBjb25zdCB0eCA9IGF3YWl0IHR4QnVpbGRlci5idWlsZCgpO1xuICAgIGNvbnN0IHNlcmlhbGl6ZWRUeCA9IHR4LnRvQnJvYWRjYXN0Rm9ybWF0KCk7XG5cbiAgICBjb25zdCB7IGtleXMsIGlzS3JzUmVjb3ZlcnksIGlzVW5zaWduZWRTd2VlcCwgdXNlckFkZHJlc3MsIGJhY2t1cEFkZHJlc3MgfSA9IHRva2VuUGFyYW1zO1xuXG4gICAgaWYgKGlzVW5zaWduZWRTd2VlcCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdHhIZXg6IHNlcmlhbGl6ZWRUeCxcbiAgICAgICAgY29pbjogdGhpcy5nZXRDaGFpbigpLFxuICAgICAgfTtcbiAgICB9XG5cbiAgICBpZiAoIWtleXNbMF0ucHJpdmF0ZUtleSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGB1c2VyS2V5IGlzIG5vdCBhIHByaXZhdGUga2V5YCk7XG4gICAgfVxuXG4gICAgY29uc3QgdXNlcktleSA9IGtleXNbMF0ucHJpdmF0ZUtleS50b1N0cmluZygnaGV4Jyk7XG4gICAgY29uc3QgdXNlclNpZ25hdHVyZSA9IHJpcHBsZS5zaWduV2l0aFByaXZhdGVLZXkoc2VyaWFsaXplZFR4LCB1c2VyS2V5LCB7IHNpZ25BczogdXNlckFkZHJlc3MgfSk7XG5cbiAgICBsZXQgc2lnbmVkVHJhbnNhY3Rpb246IHN0cmluZztcblxuICAgIGlmIChpc0tyc1JlY292ZXJ5KSB7XG4gICAgICBzaWduZWRUcmFuc2FjdGlvbiA9IHVzZXJTaWduYXR1cmUuc2lnbmVkVHJhbnNhY3Rpb247XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICgha2V5c1sxXS5wcml2YXRlS2V5KSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgYmFja3VwS2V5IGlzIG5vdCBhIHByaXZhdGUga2V5YCk7XG4gICAgICB9XG4gICAgICBjb25zdCBiYWNrdXBLZXkgPSBrZXlzWzFdLnByaXZhdGVLZXkudG9TdHJpbmcoJ2hleCcpO1xuICAgICAgY29uc3QgYmFja3VwU2lnbmF0dXJlID0gcmlwcGxlLnNpZ25XaXRoUHJpdmF0ZUtleShzZXJpYWxpemVkVHgsIGJhY2t1cEtleSwgeyBzaWduQXM6IGJhY2t1cEFkZHJlc3MgfSk7XG4gICAgICBzaWduZWRUcmFuc2FjdGlvbiA9IHJpcHBsZS5tdWx0aXNpZ24oW3VzZXJTaWduYXR1cmUuc2lnbmVkVHJhbnNhY3Rpb24sIGJhY2t1cFNpZ25hdHVyZS5zaWduZWRUcmFuc2FjdGlvbl0pO1xuICAgIH1cblxuICAgIGNvbnN0IHRyYW5zYWN0aW9uRXhwbGFuYXRpb246IFJlY292ZXJ5SW5mbyA9IChhd2FpdCB0aGlzLmV4cGxhaW5UcmFuc2FjdGlvbih7XG4gICAgICB0eEhleDogc2lnbmVkVHJhbnNhY3Rpb24sXG4gICAgfSkpIGFzIFJlY292ZXJ5SW5mbztcblxuICAgIHRyYW5zYWN0aW9uRXhwbGFuYXRpb24udHhIZXggPSBzaWduZWRUcmFuc2FjdGlvbjtcblxuICAgIGlmIChpc0tyc1JlY292ZXJ5KSB7XG4gICAgICB0cmFuc2FjdGlvbkV4cGxhbmF0aW9uLmJhY2t1cEtleSA9IHBhcmFtcy5iYWNrdXBLZXk7XG4gICAgICB0cmFuc2FjdGlvbkV4cGxhbmF0aW9uLmNvaW4gPSB0aGlzLmdldENoYWluKCk7XG4gICAgfVxuICAgIHJldHVybiB0cmFuc2FjdGlvbkV4cGxhbmF0aW9uO1xuICB9XG5cbiAgLyoqXG4gICAqIEdlbmVyYXRlIGEgbmV3IGtleXBhaXIgZm9yIHRoaXMgY29pbi5cbiAgICogQHBhcmFtIHNlZWQgU2VlZCBmcm9tIHdoaWNoIHRoZSBuZXcga2V5cGFpciBzaG91bGQgYmUgZ2VuZXJhdGVkLCBvdGhlcndpc2UgYSByYW5kb20gc2VlZCBpcyB1c2VkXG4gICAqL1xuICBwdWJsaWMgZ2VuZXJhdGVLZXlQYWlyKHNlZWQ/OiBCdWZmZXIpOiBLZXlQYWlyIHtcbiAgICBjb25zdCBrZXlQYWlyID0gc2VlZCA/IG5ldyBYcnBLZXlQYWlyKHsgc2VlZCB9KSA6IG5ldyBYcnBLZXlQYWlyKCk7XG4gICAgY29uc3Qga2V5cyA9IGtleVBhaXIuZ2V0RXh0ZW5kZWRLZXlzKCk7XG4gICAgaWYgKCFrZXlzLnhwcnYpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignTWlzc2luZyBwcnYgaW4ga2V5IGdlbmVyYXRpb24uJyk7XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICBwdWI6IGtleXMueHB1YixcbiAgICAgIHBydjoga2V5cy54cHJ2LFxuICAgIH07XG4gIH1cblxuICBhc3luYyBwYXJzZVRyYW5zYWN0aW9uKHBhcmFtczogUGFyc2VUcmFuc2FjdGlvbk9wdGlvbnMpOiBQcm9taXNlPFBhcnNlZFRyYW5zYWN0aW9uPiB7XG4gICAgcmV0dXJuIHt9O1xuICB9XG59XG4iXX0=
625
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoieHJwLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3hycC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTs7R0FFRztBQUNILCtDQUF5QztBQUN6QywwQ0FBNEI7QUFDNUIseURBQTJDO0FBQzNDLHlDQUEyQjtBQUUzQiw4Q0FheUI7QUFDekIsNENBQTZFO0FBQzdFLHVFQUF5RDtBQUN6RCxnRUFBa0Q7QUFDbEQsMkNBQTZCO0FBYzdCLDJDQUFzRDtBQUN0RCx3REFBZ0M7QUFDaEMsc0RBQThCO0FBQzlCLCtCQUF5RjtBQUV6RixNQUFhLEdBQUksU0FBUSxtQkFBUTtJQUUvQixZQUFzQixLQUFnQixFQUFFLFdBQXVDO1FBQzdFLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNiLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztZQUNqQixNQUFNLElBQUksS0FBSyxDQUFDLG9EQUFvRCxDQUFDLENBQUM7UUFDeEUsQ0FBQztRQUNELElBQUksQ0FBQyxZQUFZLEdBQUcsV0FBVyxDQUFDO0lBQ2xDLENBQUM7SUFFRCxNQUFNLENBQUMsY0FBYyxDQUFDLEtBQWdCLEVBQUUsV0FBdUM7UUFDN0UsT0FBTyxJQUFJLEdBQUcsQ0FBQyxLQUFLLEVBQUUsV0FBVyxDQUFDLENBQUM7SUFDckMsQ0FBQztJQUVEOztPQUVHO0lBQ0ksYUFBYTtRQUNsQixPQUFPLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxZQUFZLENBQUMsYUFBYSxDQUFDLENBQUM7SUFDdkQsQ0FBQztJQUVEOztPQUVHO0lBQ0ksUUFBUTtRQUNiLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUM7SUFDaEMsQ0FBQztJQUVEOztPQUVHO0lBQ0ksU0FBUztRQUNkLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUM7SUFDbEMsQ0FBQztJQUVEOztPQUVH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Q0FBQztRQUNELE9BQU87WUFDTCxHQUFHLEVBQUUsSUFBSSxDQUFDLElBQUk7WUFDZCxHQUFHLEVBQUUsSUFBSSxDQUFDLElBQUk7U0FDZixDQUFDO0lBQ0osQ0FBQztJQUVELEtBQUssQ0FBQyxnQkFBZ0IsQ0FBQyxNQUErQjtRQUNwRCxPQUFPLEVBQUUsQ0FBQztJQUNaLENBQUM7Q0FDRjtBQW5wQkQsa0JBbXBCQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQHByZXR0aWVyXG4gKi9cbmltcG9ydCB7IEJpZ051bWJlciB9IGZyb20gJ2JpZ251bWJlci5qcyc7XG5pbXBvcnQgKiBhcyBfIGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgKiBhcyBxdWVyeXN0cmluZyBmcm9tICdxdWVyeXN0cmluZyc7XG5pbXBvcnQgKiBhcyB1cmwgZnJvbSAndXJsJztcblxuaW1wb3J0IHtcbiAgQmFzZUNvaW4sXG4gIEJpdEdvQmFzZSxcbiAgY2hlY2tLcnNQcm92aWRlcixcbiAgZ2V0QmlwMzJLZXlzLFxuICBJbnZhbGlkQWRkcmVzc0Vycm9yLFxuICBLZXlQYWlyLFxuICBQYXJzZWRUcmFuc2FjdGlvbixcbiAgUGFyc2VUcmFuc2FjdGlvbk9wdGlvbnMsXG4gIHByb21pc2VQcm9wcyxcbiAgVG9rZW5FbmFibGVtZW50Q29uZmlnLFxuICBVbmV4cGVjdGVkQWRkcmVzc0Vycm9yLFxuICBWZXJpZnlUcmFuc2FjdGlvbk9wdGlvbnMsXG59IGZyb20gJ0BiaXRnby9zZGstY29yZSc7XG5pbXBvcnQgeyBCYXNlQ29pbiBhcyBTdGF0aWNzQmFzZUNvaW4sIGNvaW5zLCBYcnBDb2luIH0gZnJvbSAnQGJpdGdvL3N0YXRpY3MnO1xuaW1wb3J0ICogYXMgcmlwcGxlQmluYXJ5Q29kZWMgZnJvbSAncmlwcGxlLWJpbmFyeS1jb2RlYyc7XG5pbXBvcnQgKiBhcyByaXBwbGVLZXlwYWlycyBmcm9tICdyaXBwbGUta2V5cGFpcnMnO1xuaW1wb3J0ICogYXMgeHJwbCBmcm9tICd4cnBsJztcblxuaW1wb3J0IHtcbiAgRXhwbGFpblRyYW5zYWN0aW9uT3B0aW9ucyxcbiAgRmVlSW5mbyxcbiAgSGFsZlNpZ25lZFRyYW5zYWN0aW9uLFxuICBSZWNvdmVyeUluZm8sXG4gIFJlY292ZXJ5T3B0aW9ucyxcbiAgUmVjb3ZlcnlUcmFuc2FjdGlvbixcbiAgU2lnblRyYW5zYWN0aW9uT3B0aW9ucyxcbiAgU3VwcGxlbWVudEdlbmVyYXRlV2FsbGV0T3B0aW9ucyxcbiAgVHJhbnNhY3Rpb25FeHBsYW5hdGlvbixcbiAgVmVyaWZ5QWRkcmVzc09wdGlvbnMsXG59IGZyb20gJy4vbGliL2lmYWNlJztcbmltcG9ydCB7IEtleVBhaXIgYXMgWHJwS2V5UGFpciB9IGZyb20gJy4vbGliL2tleVBhaXInO1xuaW1wb3J0IHV0aWxzIGZyb20gJy4vbGliL3V0aWxzJztcbmltcG9ydCByaXBwbGUgZnJvbSAnLi9yaXBwbGUnO1xuaW1wb3J0IHsgVG9rZW5UcmFuc2ZlckJ1aWxkZXIsIFRyYW5zYWN0aW9uQnVpbGRlckZhY3RvcnksIFRyYW5zZmVyQnVpbGRlciB9IGZyb20gJy4vbGliJztcblxuZXhwb3J0IGNsYXNzIFhycCBleHRlbmRzIEJhc2VDb2luIHtcbiAgcHJvdGVjdGVkIF9zdGF0aWNzQ29pbjogUmVhZG9ubHk8U3RhdGljc0Jhc2VDb2luPjtcbiAgcHJvdGVjdGVkIGNvbnN0cnVjdG9yKGJpdGdvOiBCaXRHb0Jhc2UsIHN0YXRpY3NDb2luPzogUmVhZG9ubHk8U3RhdGljc0Jhc2VDb2luPikge1xuICAgIHN1cGVyKGJpdGdvKTtcbiAgICBpZiAoIXN0YXRpY3NDb2luKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ21pc3NpbmcgcmVxdWlyZWQgY29uc3RydWN0b3IgcGFyYW1ldGVyIHN0YXRpY3NDb2luJyk7XG4gICAgfVxuICAgIHRoaXMuX3N0YXRpY3NDb2luID0gc3RhdGljc0NvaW47XG4gIH1cblxuICBzdGF0aWMgY3JlYXRlSW5zdGFuY2UoYml0Z286IEJpdEdvQmFzZSwgc3RhdGljc0NvaW4/OiBSZWFkb25seTxTdGF0aWNzQmFzZUNvaW4+KTogQmFzZUNvaW4ge1xuICAgIHJldHVybiBuZXcgWHJwKGJpdGdvLCBzdGF0aWNzQ29pbik7XG4gIH1cblxuICAvKipcbiAgICogRmFjdG9yIGJldHdlZW4gdGhlIGNvaW4ncyBiYXNlIHVuaXQgYW5kIGl0cyBzbWFsbGVzdCBzdWJkaXZpc29uXG4gICAqL1xuICBwdWJsaWMgZ2V0QmFzZUZhY3RvcigpOiBudW1iZXIge1xuICAgIHJldHVybiBNYXRoLnBvdygxMCwgdGhpcy5fc3RhdGljc0NvaW4uZGVjaW1hbFBsYWNlcyk7XG4gIH1cblxuICAvKipcbiAgICogSWRlbnRpZmllciBmb3IgdGhlIGJsb2NrY2hhaW4gd2hpY2ggc3VwcG9ydHMgdGhpcyBjb2luXG4gICAqL1xuICBwdWJsaWMgZ2V0Q2hhaW4oKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fc3RhdGljc0NvaW4ubmFtZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJZGVudGlmaWVyIGZvciB0aGUgY29pbiBmYW1pbHlcbiAgICovXG4gIHB1YmxpYyBnZXRGYW1pbHkoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fc3RhdGljc0NvaW4uZmFtaWx5O1xuICB9XG5cbiAgLyoqXG4gICAqIENvbXBsZXRlIGh1bWFuLXJlYWRhYmxlIG5hbWUgb2YgdGhpcyBjb2luXG4gICAqL1xuICBwdWJsaWMgZ2V0RnVsbE5hbWUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fc3RhdGljc0NvaW4uZnVsbE5hbWU7XG4gIH1cblxuICAvKipcbiAgICogRXZhbHVhdGVzIHdoZXRoZXIgYW4gYWRkcmVzcyBzdHJpbmcgaXMgdmFsaWQgZm9yIHRoaXMgY29pblxuICAgKiBAcGFyYW0gYWRkcmVzc1xuICAgKi9cbiAgcHVibGljIGlzVmFsaWRBZGRyZXNzKGFkZHJlc3M6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB1dGlscy5pc1ZhbGlkQWRkcmVzcyhhZGRyZXNzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gYm9vbGVhbiBpbmRpY2F0aW5nIHdoZXRoZXIgaW5wdXQgaXMgdmFsaWQgcHVibGljIGtleSBmb3IgdGhlIGNvaW4uXG4gICAqXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBwdWIgdGhlIHB1YiB0byBiZSBjaGVja2VkXG4gICAqIEByZXR1cm5zIHtCb29sZWFufSBpcyBpdCB2YWxpZD9cbiAgICovXG4gIHB1YmxpYyBpc1ZhbGlkUHViKHB1Yjogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHV0aWxzLmlzVmFsaWRQdWJsaWNLZXkocHViKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgZmVlIGluZm8gZnJvbSBzZXJ2ZXJcbiAgICovXG4gIHB1YmxpYyBhc3luYyBnZXRGZWVJbmZvKCk6IFByb21pc2U8RmVlSW5mbz4ge1xuICAgIHJldHVybiB0aGlzLmJpdGdvLmdldCh0aGlzLnVybCgnL3B1YmxpYy9mZWVpbmZvJykpLnJlc3VsdCgpO1xuICB9XG5cbiAgcHVibGljIGdldFRva2VuRW5hYmxlbWVudENvbmZpZygpOiBUb2tlbkVuYWJsZW1lbnRDb25maWcge1xuICAgIHJldHVybiB7XG4gICAgICByZXF1aXJlc1Rva2VuRW5hYmxlbWVudDogdHJ1ZSxcbiAgICAgIHN1cHBvcnRzTXVsdGlwbGVUb2tlbkVuYWJsZW1lbnRzOiBmYWxzZSxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIEFzc2VtYmxlIGtleWNoYWluIGFuZCBoYWxmLXNpZ24gcHJlYnVpbHQgdHJhbnNhY3Rpb25cbiAgICogQHBhcmFtIHBhcmFtc1xuICAgKiAtIHR4UHJlYnVpbGRcbiAgICogLSBwcnZcbiAgICogQHJldHVybnMgQmx1ZWJpcmQ8SGFsZlNpZ25lZFRyYW5zYWN0aW9uPlxuICAgKi9cbiAgcHVibGljIGFzeW5jIHNpZ25UcmFuc2FjdGlvbih7XG4gICAgdHhQcmVidWlsZCxcbiAgICBwcnYsXG4gICAgaXNMYXN0U2lnbmF0dXJlLFxuICB9OiBTaWduVHJhbnNhY3Rpb25PcHRpb25zKTogUHJvbWlzZTxIYWxmU2lnbmVkVHJhbnNhY3Rpb24gfCBSZWNvdmVyeVRyYW5zYWN0aW9uPiB7XG4gICAgaWYgKF8uaXNVbmRlZmluZWQodHhQcmVidWlsZCkgfHwgIV8uaXNPYmplY3QodHhQcmVidWlsZCkpIHtcbiAgICAgIGlmICghXy5pc1VuZGVmaW5lZCh0eFByZWJ1aWxkKSAmJiAhXy5pc09iamVjdCh0eFByZWJ1aWxkKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYHR4UHJlYnVpbGQgbXVzdCBiZSBhbiBvYmplY3QsIGdvdCB0eXBlICR7dHlwZW9mIHR4UHJlYnVpbGR9YCk7XG4gICAgICB9XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ21pc3NpbmcgdHhQcmVidWlsZCBwYXJhbWV0ZXInKTtcbiAgICB9XG5cbiAgICBpZiAoXy5pc1VuZGVmaW5lZChwcnYpIHx8ICFfLmlzU3RyaW5nKHBydikpIHtcbiAgICAgIGlmICghXy5pc1VuZGVmaW5lZChwcnYpICYmICFfLmlzU3RyaW5nKHBydikpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBwcnYgbXVzdCBiZSBhIHN0cmluZywgZ290IHR5cGUgJHt0eXBlb2YgcHJ2fWApO1xuICAgICAgfVxuICAgICAgdGhyb3cgbmV3IEVycm9yKCdtaXNzaW5nIHBydiBwYXJhbWV0ZXIgdG8gc2lnbiB0cmFuc2FjdGlvbicpO1xuICAgIH1cblxuICAgIGlmICghdHhQcmVidWlsZC50eEhleCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBtaXNzaW5nIHR4SGV4IGluIHR4UHJlYnVpbGRgKTtcbiAgICB9XG4gICAgY29uc3Qga2V5UGFpciA9IG5ldyBYcnBLZXlQYWlyKHsgcHJ2IH0pO1xuICAgIGNvbnN0IGFkZHJlc3MgPSBrZXlQYWlyLmdldEFkZHJlc3MoKTtcbiAgICBjb25zdCBwcml2YXRlS2V5ID0gKGtleVBhaXIuZ2V0UHJpdmF0ZUtleSgpIGFzIEJ1ZmZlcikudG9TdHJpbmcoJ2hleCcpO1xuXG4gICAgY29uc3QgdHggPSByaXBwbGUuc2lnbldpdGhQcml2YXRlS2V5KHR4UHJlYnVpbGQudHhIZXgsIHByaXZhdGVLZXksIHtcbiAgICAgIHNpZ25BczogYWRkcmVzcyxcbiAgICB9KTtcblxuICAgIC8vIE5vcm1hbGx5IHRoZSBTREsgcHJvdmlkZXMgdGhlIGZpcnN0IHNpZ25hdHVyZSBmb3IgYW4gWFJQIHR4LCBidXQgb2NjYXNpb25hbGx5IGl0IHByb3ZpZGVzIHRoZSBmaW5hbCBvbmUgYXMgd2VsbFxuICAgIC8vIChyZWNvdmVyaWVzKVxuICAgIGlmIChpc0xhc3RTaWduYXR1cmUpIHtcbiAgICAgIHJldHVybiB7IHR4SGV4OiB0eC5zaWduZWRUcmFuc2FjdGlvbiB9O1xuICAgIH1cbiAgICByZXR1cm4geyBoYWxmU2lnbmVkOiB7IHR4SGV4OiB0eC5zaWduZWRUcmFuc2FjdGlvbiB9IH07XG4gIH1cblxuICAvKipcbiAgICogUmlwcGxlIHJlcXVpcmVzIGFkZGl0aW9uYWwgcGFyYW1ldGVycyBmb3Igd2FsbGV0IGdlbmVyYXRpb24gdG8gYmUgc2VudCB0byB0aGUgc2VydmVyLiBUaGUgYWRkaXRpb25hbCBwYXJhbWV0ZXJzIGFyZVxuICAgKiB0aGUgcm9vdCBwdWJsaWMga2V5LCB3aGljaCBpcyB0aGUgYmFzaXMgb2YgdGhlIHJvb3QgYWRkcmVzcywgdHdvIHNpZ25lZCwgYW5kIG9uZSBoYWxmLXNpZ25lZCBpbml0aWFsaXphdGlvbiB0eHNcbiAgICogQHBhcmFtIHdhbGxldFBhcmFtc1xuICAgKiAtIHJvb3RQcml2YXRlS2V5OiBvcHRpb25hbCBoZXgtZW5jb2RlZCBSaXBwbGUgcHJpdmF0ZSBrZXlcbiAgICovXG4gIGFzeW5jIHN1cHBsZW1lbnRHZW5lcmF0ZVdhbGxldChcbiAgICB3YWxsZXRQYXJhbXM6IFN1cHBsZW1lbnRHZW5lcmF0ZVdhbGxldE9wdGlvbnNcbiAgKTogUHJvbWlzZTxTdXBwbGVtZW50R2VuZXJhdGVXYWxsZXRPcHRpb25zPiB7XG4gICAgaWYgKHdhbGxldFBhcmFtcy5yb290UHJpdmF0ZUtleSkge1xuICAgICAgaWYgKHdhbGxldFBhcmFtcy5yb290UHJpdmF0ZUtleS5sZW5ndGggIT09IDY0KSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcigncm9vdFByaXZhdGVLZXkgbmVlZHMgdG8gYmUgYSBoZXhhZGVjaW1hbCBwcml2YXRlIGtleSBzdHJpbmcnKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3Qga2V5UGFpciA9IG5ldyBYcnBLZXlQYWlyKCkuZ2V0S2V5cygpO1xuICAgICAgaWYgKCFrZXlQYWlyLnBydikge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ25vIHByaXZhdGVLZXknKTtcbiAgICAgIH1cbiAgICAgIHdhbGxldFBhcmFtcy5yb290UHJpdmF0ZUtleSA9IGtleVBhaXIucHJ2O1xuICAgIH1cbiAgICByZXR1cm4gd2FsbGV0UGFyYW1zO1xuICB9XG5cbiAgLyoqXG4gICAqIEV4cGxhaW4vcGFyc2UgdHJhbnNhY3Rpb25cbiAgICogQHBhcmFtIHBhcmFtc1xuICAgKi9cbiAgYXN5bmMgZXhwbGFpblRyYW5zYWN0aW9uKHBhcmFtczogRXhwbGFpblRyYW5zYWN0aW9uT3B0aW9ucyA9IHt9KTogUHJvbWlzZTxUcmFuc2FjdGlvbkV4cGxhbmF0aW9uPiB7XG4gICAgbGV0IHRyYW5zYWN0aW9uO1xuICAgIGxldCB0eEhleDogc3RyaW5nID0gcGFyYW1zLnR4SGV4IHx8ICgocGFyYW1zLmhhbGZTaWduZWQgJiYgcGFyYW1zLmhhbGZTaWduZWQudHhIZXgpIGFzIHN0cmluZyk7XG4gICAgaWYgKCF0eEhleCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdtaXNzaW5nIHJlcXVpcmVkIHBhcmFtIHR4SGV4Jyk7XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICB0cmFuc2FjdGlvbiA9IHJpcHBsZUJpbmFyeUNvZGVjLmRlY29kZSh0eEhleCk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgdHJhbnNhY3Rpb24gPSBKU09OLnBhcnNlKHR4SGV4KTtcbiAgICAgICAgdHhIZXggPSByaXBwbGVCaW5hcnlDb2RlYy5lbmNvZGUodHJhbnNhY3Rpb24pO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3R4SGV4IG5lZWRzIHRvIGJlIGVpdGhlciBoZXggb3IgSlNPTiBzdHJpbmcgZm9yIFhSUCcpO1xuICAgICAgfVxuICAgIH1cbiAgICBsZXQgaWQ6IHN0cmluZztcbiAgICAvLyBoYXNoZXMgaWRzIGFyZSBkaWZmZXJlbnQgZm9yIHNpZ25lZCBhbmQgdW5zaWduZWQgdHhcbiAgICAvLyBmaXJzdCB3ZSB0cnkgdG8gZ2V0IHRoZSBoYXNoIGlkIGFzIGlmIGl0IGlzIHNpZ25lZCwgd2lsbCB0aHJvdyBpZiBpdHMgbm90XG4gICAgdHJ5IHtcbiAgICAgIGlkID0geHJwbC5oYXNoZXMuaGFzaFNpZ25lZFR4KHR4SGV4KTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBpZCA9IHhycGwuaGFzaGVzLmhhc2hUeCh0eEhleCk7XG4gICAgfVxuXG4gICAgaWYgKHRyYW5zYWN0aW9uLlRyYW5zYWN0aW9uVHlwZSA9PT0gJ0FjY291bnRTZXQnKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBkaXNwbGF5T3JkZXI6IFsnaWQnLCAnb3V0cHV0QW1vdW50JywgJ2NoYW5nZUFtb3VudCcsICdvdXRwdXRzJywgJ2NoYW5nZU91dHB1dHMnLCAnZmVlJywgJ2FjY291bnRTZXQnXSxcbiAgICAgICAgaWQ6IGlkLFxuICAgICAgICBjaGFuZ2VPdXRwdXRzOiBbXSxcbiAgICAgICAgb3V0cHV0QW1vdW50OiAwLFxuICAgICAgICBjaGFuZ2VBbW91bnQ6IDAsXG4gICAgICAgIG91dHB1dHM6IFtdLFxuICAgICAgICBmZWU6IHtcbiAgICAgICAgICBmZWU6IHRyYW5zYWN0aW9uLkZlZSxcbiAgICAgICAgICBmZWVSYXRlOiB1bmRlZmluZWQsXG4gICAgICAgICAgc2l6ZTogdHhIZXgubGVuZ3RoIC8gMixcbiAgICAgICAgfSxcbiAgICAgICAgYWNjb3VudFNldDoge1xuICAgICAgICAgIG1lc3NhZ2VLZXk6IHRyYW5zYWN0aW9uLk1lc3NhZ2VLZXksXG4gICAgICAgICAgc2V0RmxhZzogdHJhbnNhY3Rpb24uU2V0RmxhZyxcbiAgICAgICAgfSxcbiAgICAgIH07XG4gICAgfSBlbHNlIGlmICh0cmFuc2FjdGlvbi5UcmFuc2FjdGlvblR5cGUgPT09ICdUcnVzdFNldCcpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGRpc3BsYXlPcmRlcjogW1xuICAgICAgICAgICdpZCcsXG4gICAgICAgICAgJ291dHB1dEFtb3VudCcsXG4gICAgICAgICAgJ2NoYW5nZUFtb3VudCcsXG4gICAgICAgICAgJ291dHB1dHMnLFxuICAgICAgICAgICdjaGFuZ2VPdXRwdXRzJyxcbiAgICAgICAgICAnZmVlJyxcbiAgICAgICAgICAnYWNjb3VudCcsXG4gICAgICAgICAgJ2xpbWl0QW1vdW50JyxcbiAgICAgICAgXSxcbiAgICAgICAgaWQ6IGlkLFxuICAgICAgICBjaGFuZ2VPdXRwdXRzOiBbXSxcbiAgICAgICAgb3V0cHV0QW1vdW50OiAwLFxuICAgICAgICBjaGFuZ2VBbW91bnQ6IDAsXG4gICAgICAgIG91dHB1dHM6IFtdLFxuICAgICAgICBmZWU6IHtcbiAgICAgICAgICBmZWU6IHRyYW5zYWN0aW9uLkZlZSxcbiAgICAgICAgICBmZWVSYXRlOiB1bmRlZmluZWQsXG4gICAgICAgICAgc2l6ZTogdHhIZXgubGVuZ3RoIC8gMixcbiAgICAgICAgfSxcbiAgICAgICAgYWNjb3VudDogdHJhbnNhY3Rpb24uQWNjb3VudCxcbiAgICAgICAgbGltaXRBbW91bnQ6IHtcbiAgICAgICAgICBjdXJyZW5jeTogdHJhbnNhY3Rpb24uTGltaXRBbW91bnQuY3VycmVuY3ksXG4gICAgICAgICAgaXNzdWVyOiB0cmFuc2FjdGlvbi5MaW1pdEFtb3VudC5pc3N1ZXIsXG4gICAgICAgICAgdmFsdWU6IHRyYW5zYWN0aW9uLkxpbWl0QW1vdW50LnZhbHVlLFxuICAgICAgICB9LFxuICAgICAgfTtcbiAgICB9XG5cbiAgICBjb25zdCBhZGRyZXNzID1cbiAgICAgIHRyYW5zYWN0aW9uLkRlc3RpbmF0aW9uICsgKHRyYW5zYWN0aW9uLkRlc3RpbmF0aW9uVGFnID49IDAgPyAnP2R0PScgKyB0cmFuc2FjdGlvbi5EZXN0aW5hdGlvblRhZyA6ICcnKTtcbiAgICByZXR1cm4ge1xuICAgICAgZGlzcGxheU9yZGVyOiBbJ2lkJywgJ291dHB1dEFtb3VudCcsICdjaGFuZ2VBbW91bnQnLCAnb3V0cHV0cycsICdjaGFuZ2VPdXRwdXRzJywgJ2ZlZSddLFxuICAgICAgaWQ6IGlkLFxuICAgICAgY2hhbmdlT3V0cHV0czogW10sXG4gICAgICBvdXRwdXRBbW91bnQ6IHRyYW5zYWN0aW9uLkFtb3VudCxcbiAgICAgIGNoYW5nZUFtb3VudDogMCxcbiAgICAgIG91dHB1dHM6IFtcbiAgICAgICAge1xuICAgICAgICAgIGFkZHJlc3MsXG4gICAgICAgICAgYW1vdW50OiB0cmFuc2FjdGlvbi5BbW91bnQsXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgICAgZmVlOiB7XG4gICAgICAgIGZlZTogdHJhbnNhY3Rpb24uRmVlLFxuICAgICAgICBmZWVSYXRlOiB1bmRlZmluZWQsXG4gICAgICAgIHNpemU6IHR4SGV4Lmxlbmd0aCAvIDIsXG4gICAgICB9LFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogVmVyaWZ5IHRoYXQgYSB0cmFuc2FjdGlvbiBwcmVidWlsZCBjb21wbGllcyB3aXRoIHRoZSBvcmlnaW5hbCBpbnRlbnRpb25cbiAgICogQHBhcmFtIHR4UGFyYW1zIHBhcmFtcyBvYmplY3QgcGFzc2VkIHRvIHNlbmRcbiAgICogQHBhcmFtIHR4UHJlYnVpbGQgcHJlYnVpbGQgb2JqZWN0IHJldHVybmVkIGJ5IHNlcnZlclxuICAgKiBAcGFyYW0gd2FsbGV0XG4gICAqIEByZXR1cm5zIHtib29sZWFufVxuICAgKi9cbiAgcHVibGljIGFzeW5jIHZlcmlmeVRyYW5zYWN0aW9uKHsgdHhQYXJhbXMsIHR4UHJlYnVpbGQgfTogVmVyaWZ5VHJhbnNhY3Rpb25PcHRpb25zKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgY29uc3QgY29pbkNvbmZpZyA9IGNvaW5zLmdldCh0aGlzLmdldENoYWluKCkpIGFzIFhycENvaW47XG4gICAgY29uc3QgZXhwbGFuYXRpb24gPSBhd2FpdCB0aGlzLmV4cGxhaW5UcmFuc2FjdGlvbih7XG4gICAgICB0eEhleDogdHhQcmVidWlsZC50eEhleCxcbiAgICB9KTtcblxuICAgIGNvbnN0IG91dHB1dCA9IFsuLi5leHBsYW5hdGlvbi5vdXRwdXRzLCAuLi5leHBsYW5hdGlvbi5jaGFuZ2VPdXRwdXRzXVswXTtcbiAgICBjb25zdCBleHBlY3RlZE91dHB1dCA9IHR4UGFyYW1zLnJlY2lwaWVudHMgJiYgdHhQYXJhbXMucmVjaXBpZW50c1swXTtcblxuICAgIGNvbnN0IGNvbXBhcmF0b3IgPSAocmVjaXBpZW50MSwgcmVjaXBpZW50MikgPT4ge1xuICAgICAgaWYgKHJlY2lwaWVudDEuYWRkcmVzcyAhPT0gcmVjaXBpZW50Mi5hZGRyZXNzKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGFtb3VudDEgPSBuZXcgQmlnTnVtYmVyKHJlY2lwaWVudDEuYW1vdW50KTtcbiAgICAgIGNvbnN0IGFtb3VudDIgPSBuZXcgQmlnTnVtYmVyKHJlY2lwaWVudDIuYW1vdW50KTtcbiAgICAgIHJldHVybiBhbW91bnQxLnRvRml4ZWQoKSA9PT0gYW1vdW50Mi50b0ZpeGVkKCk7XG4gICAgfTtcblxuICAgIGlmIChcbiAgICAgICh0eFBhcmFtcy50eXBlID09PSB1bmRlZmluZWQgfHwgdHhQYXJhbXMudHlwZSA9PT0gJ3BheW1lbnQnKSAmJlxuICAgICAgdHlwZW9mIG91dHB1dC5hbW91bnQgIT09ICdvYmplY3QnICYmXG4gICAgICAhY29tcGFyYXRvcihvdXRwdXQsIGV4cGVjdGVkT3V0cHV0KVxuICAgICkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCd0cmFuc2FjdGlvbiBwcmVidWlsZCBkb2VzIG5vdCBtYXRjaCBleHBlY3RlZCBvdXRwdXQnKTtcbiAgICB9XG5cbiAgICBpZiAodHhQYXJhbXMudHlwZSA9PT0gJ2VuYWJsZXRva2VuJykge1xuICAgICAgaWYgKHR4UGFyYW1zLnJlY2lwaWVudHM/Lmxlbmd0aCAhPT0gMSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgYCR7dGhpcy5nZXRDaGFpbigpfSBkb2Vzbid0IHN1cHBvcnQgc2VuZGluZyB0byBtb3JlIHRoYW4gMSBkZXN0aW5hdGlvbiBhZGRyZXNzIHdpdGhpbiBhIHNpbmdsZSB0cmFuc2FjdGlvbi4gVHJ5IGFnYWluLCB1c2luZyBvbmx5IGEgc2luZ2xlIHJlY2lwaWVudC5gXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICBjb25zdCByZWNpcGllbnQgPSB0eFBhcmFtcy5yZWNpcGllbnRzWzBdO1xuICAgICAgaWYgKCFyZWNpcGllbnQudG9rZW5OYW1lKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignUmVjaXBpZW50IG11c3QgaW5jbHVkZSBhIHRva2VuIG5hbWUuJyk7XG4gICAgICB9XG4gICAgICBjb25zdCByZWNpcGllbnRDdXJyZW5jeSA9IHV0aWxzLmdldFhycEN1cnJlbmN5RnJvbVRva2VuTmFtZShyZWNpcGllbnQudG9rZW5OYW1lKS5jdXJyZW5jeTtcbiAgICAgIGlmIChjb2luQ29uZmlnLmlzVG9rZW4pIHtcbiAgICAgICAgaWYgKHJlY2lwaWVudEN1cnJlbmN5ICE9PSBjb2luQ29uZmlnLmN1cnJlbmN5Q29kZSkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcignSW5jb3JyZWN0IHRva2VuIG5hbWUgc3BlY2lmaWVkIGluIHJlY2lwaWVudHMnKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKCEoJ2FjY291bnQnIGluIGV4cGxhbmF0aW9uKSB8fCAhKCdsaW1pdEFtb3VudCcgaW4gZXhwbGFuYXRpb24pIHx8ICFleHBsYW5hdGlvbi5saW1pdEFtb3VudC5jdXJyZW5jeSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0V4cGxhbmF0aW9uIGlzIG1pc3NpbmcgcmVxdWlyZWQga2V5cyAoYWNjb3VudCBvciBsaW1pdEFtb3VudCB3aXRoIGN1cnJlbmN5KScpO1xuICAgICAgfVxuICAgICAgY29uc3QgYmFzZUFkZHJlc3MgPSBleHBsYW5hdGlvbi5hY2NvdW50O1xuICAgICAgY29uc3QgY3VycmVuY3kgPSBleHBsYW5hdGlvbi5saW1pdEFtb3VudC5jdXJyZW5jeTtcblxuICAgICAgaWYgKHJlY2lwaWVudC5hZGRyZXNzICE9PSBiYXNlQWRkcmVzcyB8fCByZWNpcGllbnRDdXJyZW5jeSAhPT0gY3VycmVuY3kpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdUeCBvdXRwdXRzIGRvZXMgbm90IG1hdGNoIHdpdGggZXhwZWN0ZWQgdHhQYXJhbXMgcmVjaXBpZW50cycpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayBpZiBhZGRyZXNzIGlzIGEgdmFsaWQgWFJQIGFkZHJlc3MsIGFuZCB0aGVuIG1ha2Ugc3VyZSB0aGUgcm9vdCBhZGRyZXNzZXMgbWF0Y2guXG4gICAqIFRoaXMgcHJldmVudHMgYXR0YWNrcyB3aGVyZSBhbiBhdHRhY2sgbWF5IHN3aXRjaCBvdXQgdGhlIG5ldyBhZGRyZXNzIGZvciBvbmUgb2YgdGhlaXIgb3duXG4gICAqIEBwYXJhbSBhZGRyZXNzIHtTdHJpbmd9IHRoZSBhZGRyZXNzIHRvIHZlcmlmeVxuICAgKiBAcGFyYW0gcm9vdEFkZHJlc3Mge1N0cmluZ30gdGhlIHdhbGxldCdzIHJvb3QgYWRkcmVzc1xuICAgKiBAcmV0dXJuIHRydWUgaWZmIGFkZHJlc3MgaXMgYSB3YWxsZXQgYWRkcmVzcyAoYmFzZWQgb24gcm9vdEFkZHJlc3MpXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgaXNXYWxsZXRBZGRyZXNzKHsgYWRkcmVzcywgcm9vdEFkZHJlc3MgfTogVmVyaWZ5QWRkcmVzc09wdGlvbnMpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBpZiAoIXRoaXMuaXNWYWxpZEFkZHJlc3MoYWRkcmVzcykpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQWRkcmVzc0Vycm9yKGBhZGRyZXNzIHZlcmlmaWNhdGlvbiBmYWlsdXJlOiBhZGRyZXNzIFwiJHthZGRyZXNzfVwiIGlzIG5vdCB2YWxpZGApO1xuICAgIH1cblxuICAgIGNvbnN0IGFkZHJlc3NEZXRhaWxzID0gdXRpbHMuZ2V0QWRkcmVzc0RldGFpbHMoYWRkcmVzcyk7XG4gICAgY29uc3Qgcm9vdEFkZHJlc3NEZXRhaWxzID0gdXRpbHMuZ2V0QWRkcmVzc0RldGFpbHMocm9vdEFkZHJlc3MpO1xuXG4gICAgaWYgKGFkZHJlc3NEZXRhaWxzLmFkZHJlc3MgIT09IHJvb3RBZGRyZXNzRGV0YWlscy5hZGRyZXNzKSB7XG4gICAgICB0aHJvdyBuZXcgVW5leHBlY3RlZEFkZHJlc3NFcnJvcihcbiAgICAgICAgYGFkZHJlc3MgdmFsaWRhdGlvbiBmYWlsdXJlOiAke2FkZHJlc3NEZXRhaWxzLmFkZHJlc3N9IHZzLiAke3Jvb3RBZGRyZXNzRGV0YWlscy5hZGRyZXNzfWBcbiAgICAgICk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICAvKipcbiAgICogVVJMIG9mIGEgd2VsbC1rbm93biwgcHVibGljIGZhY2luZyAobm9uLWJpdGdvKSByaXBwbGVkIGluc3RhbmNlIHdoaWNoIGNhbiBiZSB1c2VkIGZvciByZWNvdmVyeVxuICAgKi9cbiAgcHVibGljIGdldFJpcHBsZWRVcmwoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gJ2h0dHBzOi8vczEucmlwcGxlLmNvbTo1MTIzNCc7XG4gIH1cblxuICAvKipcbiAgICogQnVpbGRzIGEgZnVuZHMgcmVjb3ZlcnkgdHJhbnNhY3Rpb24gd2l0aG91dCBCaXRHb1xuICAgKiBAcGFyYW0gcGFyYW1zXG4gICAqIC0gcm9vdEFkZHJlc3M6IHJvb3QgWFJQIHdhbGxldCBhZGRyZXNzIHRvIHJlY292ZXIgZnVuZHMgZnJvbVxuICAgKiAtIHVzZXJLZXk6IFtlbmNyeXB0ZWRdIHhwcnZcbiAgICogLSBiYWNrdXBLZXk6IFtlbmNyeXB0ZWRdIHhwcnYsIG9yIHhwdWIgaWYgdGhlIHhwcnYgaXMgaGVsZCBieSBhIEtSUyBwcm92aWRlclxuICAgKiAtIHdhbGxldFBhc3NwaHJhc2U6IG5lY2Vzc2FyeSBpZiBvbmUgb2YgdGhlIHhwcnZzIGlzIGVuY3J5cHRlZFxuICAgKiAtIGJpdGdvS2V5OiB4cHViXG4gICAqIC0ga3JzUHJvdmlkZXI6IG5lY2Vzc2FyeSBpZiBiYWNrdXAga2V5IGlzIGhlbGQgYnkgS1JTXG4gICAqIC0gcmVjb3ZlcnlEZXN0aW5hdGlvbjogdGFyZ2V0IGFkZHJlc3MgdG8gc2VuZCByZWNvdmVyZWQgZnVuZHMgdG9cbiAgICovXG4gIHB1YmxpYyBhc3luYyByZWNvdmVyKHBhcmFtczogUmVjb3ZlcnlPcHRpb25zKTogUHJvbWlzZTxSZWNvdmVyeUluZm8gfCBSZWNvdmVyeVRyYW5zYWN0aW9uPiB7XG4gICAgY29uc3QgcmlwcGxlZFVybCA9IHRoaXMuZ2V0UmlwcGxlZFVybCgpO1xuICAgIGNvbnN0IGlzS3JzUmVjb3ZlcnkgPSBwYXJhbXMuYmFja3VwS2V5LnN0YXJ0c1dpdGgoJ3hwdWInKSAmJiAhcGFyYW1zLnVzZXJLZXkuc3RhcnRzV2l0aCgneHB1YicpO1xuICAgIGNvbnN0IGlzVW5zaWduZWRTd2VlcCA9IHBhcmFtcy5iYWNrdXBLZXkuc3RhcnRzV2l0aCgneHB1YicpICYmIHBhcmFtcy51c2VyS2V5LnN0YXJ0c1dpdGgoJ3hwdWInKTtcblxuICAgIGNvbnN0IGFjY291bnRJbmZvUGFyYW1zID0ge1xuICAgICAgbWV0aG9kOiAnYWNjb3VudF9pbmZvJyxcbiAgICAgIHBhcmFtczogW1xuICAgICAgICB7XG4gICAgICAgICAgYWNjb3VudDogcGFyYW1zLnJvb3RBZGRyZXNzLFxuICAgICAgICAgIGxlZGdlcl9pbmRleDogJ2N1cnJlbnQnLFxuICAgICAgICAgIHF1ZXVlOiB0cnVlLFxuICAgICAgICAgIHN0cmljdDogdHJ1ZSxcbiAgICAgICAgICBzaWduZXJfbGlzdHM6IHRydWUsXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgIH07XG5cbiAgICBjb25zdCBhY2NvdW50TGluZXNQYXJhbXMgPSB7XG4gICAgICBtZXRob2Q6ICdhY2NvdW50X2xpbmVzJyxcbiAgICAgIHBhcmFtczogW1xuICAgICAgICB7XG4gICAgICAgICAgYWNjb3VudDogcGFyYW1zLnJvb3RBZGRyZXNzLFxuICAgICAgICAgIGxlZGdlcl9pbmRleDogJ3ZhbGlkYXRlZCcsXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgIH07XG5cbiAgICBpZiAoaXNLcnNSZWNvdmVyeSkge1xuICAgICAgY2hlY2tLcnNQcm92aWRlcih0aGlzLCBwYXJhbXMua3JzUHJvdmlkZXIpO1xuICAgIH1cblxuICAgIC8vIFZhbGlkYXRlIHRoZSBkZXN0aW5hdGlvbiBhZGRyZXNzXG4gICAgaWYgKCF0aGlzLmlzVmFsaWRBZGRyZXNzKHBhcmFtcy5yZWNvdmVyeURlc3RpbmF0aW9uKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIGRlc3RpbmF0aW9uIGFkZHJlc3MhJyk7XG4gICAgfVxuXG4gICAgY29uc3Qga2V5cyA9IGdldEJpcDMyS2V5cyh0aGlzLmJpdGdvLCBwYXJhbXMsIHsgcmVxdWlyZUJpdEdvWHB1YjogZmFsc2UgfSk7XG5cbiAgICBjb25zdCB7IGFkZHJlc3NEZXRhaWxzLCBmZWVEZXRhaWxzLCBzZXJ2ZXJEZXRhaWxzLCBhY2NvdW50TGluZXMgfSA9IGF3YWl0IHByb21pc2VQcm9wcyh7XG4gICAgICBhZGRyZXNzRGV0YWlsczogdGhpcy5iaXRnby5wb3N0KHJpcHBsZWRVcmwpLnNlbmQoYWNjb3VudEluZm9QYXJhbXMpLFxuICAgICAgZmVlRGV0YWlsczogdGhpcy5iaXRnby5wb3N0KHJpcHBsZWRVcmwpLnNlbmQoeyBtZXRob2Q6ICdmZWUnIH0pLFxuICAgICAgc2VydmVyRGV0YWlsczogdGhpcy5iaXRnby5wb3N0KHJpcHBsZWRVcmwpLnNlbmQoeyBtZXRob2Q6ICdzZXJ2ZXJfaW5mbycgfSksXG4gICAgICBhY2NvdW50TGluZXM6IHRoaXMuYml0Z28ucG9zdChyaXBwbGVkVXJsKS5zZW5kKGFjY291bnRMaW5lc1BhcmFtcyksXG4gICAgfSk7XG5cbiAgICBjb25zdCBvcGVuTGVkZ2VyRmVlID0gbmV3IEJpZ051bWJlcihmZWVEZXRhaWxzLmJvZHkucmVzdWx0LmRyb3BzLm9wZW5fbGVkZ2VyX2ZlZSk7XG4gICAgY29uc3QgYmFzZVJlc2VydmUgPSBuZXcgQmlnTnVtYmVyKHNlcnZlckRldGFpbHMuYm9keS5yZXN1bHQuaW5mby52YWxpZGF0ZWRfbGVkZ2VyLnJlc2VydmVfYmFzZV94cnApLnRpbWVzKFxuICAgICAgdGhpcy5nZXRCYXNlRmFjdG9yKClcbiAgICApO1xuICAgIGNvbnN0IHJlc2VydmVEZWx0YSA9IG5ldyBCaWdOdW1iZXIoc2VydmVyRGV0YWlscy5ib2R5LnJlc3VsdC5pbmZvLnZhbGlkYXRlZF9sZWRnZXIucmVzZXJ2ZV9pbmNfeHJwKS50aW1lcyhcbiAgICAgIHRoaXMuZ2V0QmFzZUZhY3RvcigpXG4gICAgKTtcbiAgICBjb25zdCBjdXJyZW50TGVkZ2VyID0gc2VydmVyRGV0YWlscy5ib2R5LnJlc3VsdC5pbmZvLnZhbGlkYXRlZF9sZWRnZXIuc2VxO1xuICAgIGNvbnN0IHNlcXVlbmNlSWQgPSBhZGRyZXNzRGV0YWlscy5ib2R5LnJlc3VsdC5hY2NvdW50X2RhdGEuU2VxdWVuY2U7XG4gICAgY29uc3QgYmFsYW5jZSA9IG5ldyBCaWdOdW1iZXIoYWRkcmVzc0RldGFpbHMuYm9keS5yZXN1bHQuYWNjb3VudF9kYXRhLkJhbGFuY2UpO1xuICAgIGNvbnN0IHNpZ25lckxpc3RzID0gYWRkcmVzc0RldGFpbHMuYm9keS5yZXN1bHQuYWNjb3VudF9kYXRhLnNpZ25lcl9saXN0cztcbiAgICBjb25zdCBhY2NvdW50RmxhZ3MgPSBhZGRyZXNzRGV0YWlscy5ib2R5LnJlc3VsdC5hY2NvdW50X2RhdGEuRmxhZ3M7XG4gICAgY29uc3Qgb3duZXJDb3VudCA9IG5ldyBCaWdOdW1iZXIoYWRkcmVzc0RldGFpbHMuYm9keS5yZXN1bHQuYWNjb3VudF9kYXRhLk93bmVyQ291bnQpO1xuXG4gICAgLy8gbWFrZSBzdXJlIHRoZXJlIGlzIG9ubHkgb25lIHNpZ25lciBsaXN0IHNldFxuICAgIGlmIChzaWduZXJMaXN0cy5sZW5ndGggIT09IDEpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcigndW5leHBlY3RlZCBzZXQgb2Ygc2lnbmVyIGxpc3RzJyk7XG4gICAgfVxuXG4gICAgLy8gbWFrZSBzdXJlIHRoZSBzaWduZXJzIGFyZSB1c2VyLCBiYWNrdXAsIGJpdGdvXG4gICAgY29uc3QgdXNlckFkZHJlc3MgPSByaXBwbGVLZXlwYWlycy5kZXJpdmVBZGRyZXNzKGtleXNbMF0ucHVibGljS2V5LnRvU3RyaW5nKCdoZXgnKSk7XG4gICAgY29uc3QgYmFja3VwQWRkcmVzcyA9IHJpcHBsZUtleXBhaXJzLmRlcml2ZUFkZHJlc3Moa2V5c1sxXS5wdWJsaWNLZXkudG9TdHJpbmcoJ2hleCcpKTtcblxuICAgIGNvbnN0IHNpZ25lckxpc3QgPSBzaWduZXJMaXN0c1swXTtcbiAgICBpZiAoc2lnbmVyTGlzdC5TaWduZXJRdW9ydW0gIT09IDIpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignaW52YWxpZCBtaW5pbXVtIHNpZ25hdHVyZSBjb3VudCcpO1xuICAgIH1cbiAgICBjb25zdCBmb3VuZEFkZHJlc3NlcyA9IHt9O1xuXG4gICAgY29uc3Qgc2lnbmVyRW50cmllcyA9IHNpZ25lckxpc3QuU2lnbmVyRW50cmllcztcbiAgICBpZiAoc2lnbmVyRW50cmllcy5sZW5ndGggIT09IDMpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignaW52YWxpZCBzaWduZXIgbGlzdCBsZW5ndGgnKTtcbiAgICB9XG4gICAgZm9yIChjb25zdCB7IFNpZ25lckVudHJ5IH0gb2Ygc2lnbmVyRW50cmllcykge1xuICAgICAgY29uc3Qgd2VpZ2h0ID0gU2lnbmVyRW50cnkuU2lnbmVyV2VpZ2h0O1xuICAgICAgY29uc3QgYWRkcmVzcyA9IFNpZ25lckVudHJ5LkFjY291bnQ7XG4gICAgICBpZiAod2VpZ2h0ICE9PSAxKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignaW52YWxpZCBzaWduZXIgd2VpZ2h0Jyk7XG4gICAgICB9XG5cbiAgICAgIC8vIGlmIGl0J3MgYSBkdXBlIG9mIGFuIGFkZHJlc3Mgd2UgYWxyZWFkeSBrbm93LCBibG9ja1xuICAgICAgaWYgKGZvdW5kQWRkcmVzc2VzW2FkZHJlc3NdID49IDEpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdkdXBsaWNhdGUgc2lnbmVyIGFkZHJlc3MnKTtcbiAgICAgIH1cbiAgICAgIGZvdW5kQWRkcmVzc2VzW2FkZHJlc3NdID0gKGZvdW5kQWRkcmVzc2VzW2FkZHJlc3NdIHx8IDApICsgMTtcbiAgICB9XG5cbiAgICBpZiAoZm91bmRBZGRyZXNzZXNbdXNlckFkZHJlc3NdICE9PSAxKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ3VuZXhwZWN0ZWQgaW5jaWRlbmNlIGZyZXF1ZW5jeSBvZiB1c2VyIHNpZ25lciBhZGRyZXNzJyk7XG4gICAgfVxuICAgIGlmIChmb3VuZEFkZHJlc3Nlc1tiYWNrdXBBZGRyZXNzXSAhPT0gMSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCd1bmV4cGVjdGVkIGluY2lkZW5jZSBmcmVxdWVuY3kgb2YgdXNlciBzaWduZXIgYWRkcmVzcycpO1xuICAgIH1cblxuICAgIC8vIG1ha2Ugc3VyZSB0aGUgZmxhZ3MgZGlzYWJsZSB0aGUgbWFzdGVyIGtleSBhbmQgZW5mb3JjZSBkZXN0aW5hdGlvbiB0YWdzXG4gICAgY29uc3QgVVNFUl9LRVlfU0VUVElOR19GTEFHID0gNjU1MzY7XG4gICAgY29uc3QgTUFTVEVSX0tFWV9ERUFDVElWQVRJT05fRkxBRyA9IDEwNDg1NzY7XG4gICAgY29uc3QgUkVRVUlSRV9ERVNUSU5BVElPTl9UQUdfRkxBRyA9IDEzMTA3MjtcbiAgICBpZiAoKGFjY291bnRGbGFncyAmIFVTRVJfS0VZX1NFVFRJTkdfRkxBRykgIT09IDApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignYSBjdXN0b20gdXNlciBrZXkgaGFzIGJlZW4gc2V0Jyk7XG4gICAgfVxuICAgIGlmICgoYWNjb3VudEZsYWdzICYgTUFTVEVSX0tFWV9ERUFDVElWQVRJT05fRkxBRykgIT09IE1BU1RFUl9LRVlfREVBQ1RJVkFUSU9OX0ZMQUcpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcigndGhlIG1hc3RlciBrZXkgaGFzIG5vdCBiZWVuIGRlYWN0aXZhdGVkJyk7XG4gICAgfVxuICAgIGlmICgoYWNjb3VudEZsYWdzICYgUkVRVUlSRV9ERVNUSU5BVElPTl9UQUdfRkxBRykgIT09IFJFUVVJUkVfREVTVElOQVRJT05fVEFHX0ZMQUcpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcigndGhlIGRlc3RpbmF0aW9uIGZsYWcgcmVxdWlyZW1lbnQgaGFzIG5vdCBiZWVuIGFjdGl2YXRlZCcpO1xuICAgIH1cblxuICAgIC8vIHJlY292ZXIgdGhlIGZ1bmRzXG4gICAgY29uc3QgdG90YWxSZXNlcnZlRGVsdGEgPSByZXNlcnZlRGVsdGEudGltZXMob3duZXJDb3VudCk7XG4gICAgY29uc3QgcmVzZXJ2ZSA9IGJhc2VSZXNlcnZlLnBsdXModG90YWxSZXNlcnZlRGVsdGEpO1xuICAgIGNvbnN0IHJlY292ZXJhYmxlQmFsYW5jZSA9IGJhbGFuY2UubWludXMocmVzZXJ2ZSk7XG5cbiAgICBjb25zdCByYXdEZXN0aW5hdGlvbiA9IHBhcmFtcy5yZWNvdmVyeURlc3RpbmF0aW9uO1xuICAgIGNvbnN0IGRlc3RpbmF0aW9uRGV0YWlscyA9IHVybC5wYXJzZShyYXdEZXN0aW5hdGlvbik7XG5cbiAgICBpZiAoZGVzdGluYXRpb25EZXRhaWxzLnF1ZXJ5KSB7XG4gICAgICBjb25zdCBxdWVyeURldGFpbHMgPSBxdWVyeXN0cmluZy5wYXJzZShkZXN0aW5hdGlvbkRldGFpbHMucXVlcnkpO1xuICAgICAgaWYgKEFycmF5LmlzQXJyYXkocXVlcnlEZXRhaWxzLmR0KSkge1xuICAgICAgICAvLyBpZiBxdWVyeURldGFpbHMuZHQgaXMgYW4gYXJyYXksIHRoYXQgbWVhbnMgZHQgd2FzIGdpdmVuIG11bHRpcGxlIHRpbWVzLCB3aGljaCBpcyBub3QgdmFsaWRcbiAgICAgICAgdGhyb3cgbmV3IEludmFsaWRBZGRyZXNzRXJyb3IoXG4gICAgICAgICAgYGRlc3RpbmF0aW9uIHRhZyBjYW4gYXBwZWFyIGF0IG1vc3Qgb25jZSwgYnV0ICR7cXVlcnlEZXRhaWxzLmR0Lmxlbmd0aH0gZGVzdGluYXRpb24gdGFncyB3ZXJlIGZvdW5kYFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChyZWNvdmVyYWJsZUJhbGFuY2UudG9OdW1iZXIoKSA8PSAwKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBRdWFudGl0eSBvZiBYUlAgdG8gcmVjb3ZlciBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAwLiBDdXJyZW50IGJhbGFuY2U6ICR7YmFsYW5jZS50b051bWJlcigpfSwgYmxvY2tjaGFpbiByZXNlcnZlOiAke3Jlc2VydmUudG9OdW1iZXIoKX0sIHNwZW5kYWJsZSBiYWxhbmNlOiAke3JlY292ZXJhYmxlQmFsYW5jZS50b051bWJlcigpfWBcbiAgICAgICk7XG4gICAgfVxuXG4gICAgY29uc3QgaXNzdWVyID0gcGFyYW1zPy5pc3N1ZXJBZGRyZXNzO1xuICAgIGNvbnN0IGN1cnJlbmN5ID0gcGFyYW1zPy5jdXJyZW5jeUNvZGU7XG4gICAgaWYgKCEhaXNzdWVyICYmICEhY3VycmVuY3kpIHtcbiAgICAgIGNvbnN0IHRva2VuUGFyYW1zID0ge1xuICAgICAgICByZWNvdmVyeURlc3RpbmF0aW9uOiBwYXJhbXMucmVjb3ZlcnlEZXN0aW5hdGlvbixcbiAgICAgICAgcmVjb3ZlcmFibGVCYWxhbmNlLFxuICAgICAgICBjdXJyZW50TGVkZ2VyLFxuICAgICAgICBvcGVuTGVkZ2VyRmVlLFxuICAgICAgICBzZXF1ZW5jZUlkLFxuICAgICAgICBhY2NvdW50TGluZXMsXG4gICAgICAgIGtleXMsXG4gICAgICAgIGlzS3JzUmVjb3ZlcnksXG4gICAgICAgIGlzVW5zaWduZWRTd2VlcCxcbiAgICAgICAgdXNlckFkZHJlc3MsXG4gICAgICAgIGJhY2t1cEFkZHJlc3MsXG4gICAgICAgIGlzc3VlcixcbiAgICAgICAgY3VycmVuY3ksXG4gICAgICB9O1xuXG4gICAgICByZXR1cm4gdGhpcy5yZWNvdmVyWHJwVG9rZW4ocGFyYW1zLCB0b2tlblBhcmFtcyk7XG4gICAgfVxuXG4gICAgY29uc3QgZmFjdG9yeSA9IG5ldyBUcmFuc2FjdGlvbkJ1aWxkZXJGYWN0b3J5KGNvaW5zLmdldCh0aGlzLmdldENoYWluKCkpKTtcbiAgICBjb25zdCB0eEJ1aWxkZXIgPSBmYWN0b3J5LmdldFRyYW5zZmVyQnVpbGRlcigpIGFzIFRyYW5zZmVyQnVpbGRlcjtcbiAgICB0eEJ1aWxkZXJcbiAgICAgIC50byhwYXJhbXMucmVjb3ZlcnlEZXN0aW5hdGlvbiBhcyBzdHJpbmcpXG4gICAgICAuYW1vdW50KHJlY292ZXJhYmxlQmFsYW5jZS50b0ZpeGVkKDApKVxuICAgICAgLnNlbmRlcihwYXJhbXMucm9vdEFkZHJlc3MpXG4gICAgICAuZmxhZ3MoMjE0NzQ4MzY0OClcbiAgICAgIC5sYXN0TGVkZ2VyU2VxdWVuY2UoY3VycmVudExlZGdlciArIDEwMDAwMDApIC8vIGdpdmUgaXQgMSBtaWxsaW9uIGxlZGdlcnMnIHRpbWUgKH4xIG1vbnRoLCBzdWl0YWJsZSBmb3IgS1JTKVxuICAgICAgLmZlZShvcGVuTGVkZ2VyRmVlLnRpbWVzKDMpLnRvRml4ZWQoMCkpIC8vIHRoZSBmYWN0b3IgdGhyZWUgaXMgZm9yIHRoZSBtdWx0aXNpZ25pbmdcbiAgICAgIC5zZXF1ZW5jZShzZXF1ZW5jZUlkKTtcblxuICAgIGNvbnN0IHR4ID0gYXdhaXQgdHhCdWlsZGVyLmJ1aWxkKCk7XG4gICAgY29uc3Qgc2VyaWFsaXplZFR4ID0gdHgudG9Ccm9hZGNhc3RGb3JtYXQoKTtcblxuICAgIGlmIChpc1Vuc2lnbmVkU3dlZXApIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHR4SGV4OiBzZXJpYWxpemVkVHgsXG4gICAgICAgIGNvaW46IHRoaXMuZ2V0Q2hhaW4oKSxcbiAgICAgIH07XG4gICAgfVxuXG4gICAgaWYgKCFrZXlzWzBdLnByaXZhdGVLZXkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgdXNlcktleSBpcyBub3QgYSBwcml2YXRlIGtleWApO1xuICAgIH1cbiAgICBjb25zdCB1c2VyS2V5ID0ga2V5c1swXS5wcml2YXRlS2V5LnRvU3RyaW5nKCdoZXgnKTtcbiAgICBjb25zdCB1c2VyU2lnbmF0dXJlID0gcmlwcGxlLnNpZ25XaXRoUHJpdmF0ZUtleShzZXJpYWxpemVkVHgsIHVzZXJLZXksIHsgc2lnbkFzOiB1c2VyQWRkcmVzcyB9KTtcblxuICAgIGxldCBzaWduZWRUcmFuc2FjdGlvbjogc3RyaW5nO1xuXG4gICAgaWYgKGlzS3JzUmVjb3ZlcnkpIHtcbiAgICAgIHNpZ25lZFRyYW5zYWN0aW9uID0gdXNlclNpZ25hdHVyZS5zaWduZWRUcmFuc2FjdGlvbjtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKCFrZXlzWzFdLnByaXZhdGVLZXkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBiYWNrdXBLZXkgaXMgbm90IGEgcHJpdmF0ZSBrZXlgKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGJhY2t1cEtleSA9IGtleXNbMV0ucHJpdmF0ZUtleS50b1N0cmluZygnaGV4Jyk7XG4gICAgICBjb25zdCBiYWNrdXBTaWduYXR1cmUgPSByaXBwbGUuc2lnbldpdGhQcml2YXRlS2V5KHNlcmlhbGl6ZWRUeCwgYmFja3VwS2V5LCB7IHNpZ25BczogYmFja3VwQWRkcmVzcyB9KTtcbiAgICAgIHNpZ25lZFRyYW5zYWN0aW9uID0gcmlwcGxlLm11bHRpc2lnbihbdXNlclNpZ25hdHVyZS5zaWduZWRUcmFuc2FjdGlvbiwgYmFja3VwU2lnbmF0dXJlLnNpZ25lZFRyYW5zYWN0aW9uXSk7XG4gICAgfVxuXG4gICAgY29uc3QgdHJhbnNhY3Rpb25FeHBsYW5hdGlvbjogUmVjb3ZlcnlJbmZvID0gKGF3YWl0IHRoaXMuZXhwbGFpblRyYW5zYWN0aW9uKHtcbiAgICAgIHR4SGV4OiBzaWduZWRUcmFuc2FjdGlvbixcbiAgICB9KSkgYXMgUmVjb3ZlcnlJbmZvO1xuXG4gICAgdHJhbnNhY3Rpb25FeHBsYW5hdGlvbi50eEhleCA9IHNpZ25lZFRyYW5zYWN0aW9uO1xuXG4gICAgaWYgKGlzS3JzUmVjb3ZlcnkpIHtcbiAgICAgIHRyYW5zYWN0aW9uRXhwbGFuYXRpb24uYmFja3VwS2V5ID0gcGFyYW1zLmJhY2t1cEtleTtcbiAgICAgIHRyYW5zYWN0aW9uRXhwbGFuYXRpb24uY29pbiA9IHRoaXMuZ2V0Q2hhaW4oKTtcbiAgICB9XG4gICAgcmV0dXJuIHRyYW5zYWN0aW9uRXhwbGFuYXRpb247XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgcmVjb3ZlclhycFRva2VuKHBhcmFtcywgdG9rZW5QYXJhbXMpIHtcbiAgICBjb25zdCB7IGN1cnJlbmN5LCBpc3N1ZXIgfSA9IHRva2VuUGFyYW1zO1xuICAgIGNvbnN0IHRva2VuTmFtZSA9ICh1dGlscy5nZXRYcnBUb2tlbihpc3N1ZXIsIGN1cnJlbmN5KSBhcyBYcnBDb2luKS5uYW1lO1xuICAgIGNvbnN0IGxpbmVzID0gdG9rZW5QYXJhbXMuYWNjb3VudExpbmVzLmJvZHkucmVzdWx0LmxpbmVzO1xuXG4gICAgbGV0IGFtb3VudDtcbiAgICBmb3IgKGNvbnN0IGxpbmUgb2YgbGluZXMpIHtcbiAgICAgIGlmIChsaW5lLmN1cnJlbmN5ID09PSBjdXJyZW5jeSAmJiBsaW5lLmFjY291bnQgPT09IGlzc3Vlcikge1xuICAgICAgICBhbW91bnQgPSBsaW5lLmJhbGFuY2U7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChhbW91bnQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBEb2VzIG5vdCBoYXZlIFRydXN0bGluZSB3aXRoICR7aXNzdWVyfWApO1xuICAgIH1cbiAgICBpZiAoYW1vdW50ID09PSAnMCcpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgRG9lcyBub3QgaGF2ZSBmdW5kcyB0byByZWNvdmVyYCk7XG4gICAgfVxuXG4gICAgY29uc3QgZGVjaW1hbFBsYWNlcyA9IGNvaW5zLmdldCh0b2tlbk5hbWUpLmRlY2ltYWxQbGFjZXM7XG4gICAgYW1vdW50ID0gbmV3IEJpZ051bWJlcihhbW91bnQpLnNoaWZ0ZWRCeShkZWNpbWFsUGxhY2VzKS50b0ZpeGVkKCk7XG5cbiAgICBjb25zdCBGTEFHX1ZBTFVFID0gMjE0NzQ4MzY0ODtcblxuICAgIGNvbnN0IGZhY3RvcnkgPSBuZXcgVHJhbnNhY3Rpb25CdWlsZGVyRmFjdG9yeShjb2lucy5nZXQodG9rZW5OYW1lKSk7XG4gICAgY29uc3QgdHhCdWlsZGVyID0gZmFjdG9yeS5nZXRUb2tlblRyYW5zZmVyQnVpbGRlcigpIGFzIFRva2VuVHJhbnNmZXJCdWlsZGVyO1xuICAgIHR4QnVpbGRlclxuICAgICAgLnRvKHRva2VuUGFyYW1zLnJlY292ZXJ5RGVzdGluYXRpb24pXG4gICAgICAuYW1vdW50KGFtb3VudClcbiAgICAgIC5zZW5kZXIocGFyYW1zLnJvb3RBZGRyZXNzKVxuICAgICAgLmZsYWdzKEZMQUdfVkFMVUUpXG4gICAgICAubGFzdExlZGdlclNlcXVlbmNlKHRva2VuUGFyYW1zLmN1cnJlbnRMZWRnZXIgKyAxMDAwMDAwKSAvLyBnaXZlIGl0IDEgbWlsbGlvbiBsZWRnZXJzJyB0aW1lICh+MSBtb250aCwgc3VpdGFibGUgZm9yIEtSUylcbiAgICAgIC5mZWUodG9rZW5QYXJhbXMub3BlbkxlZGdlckZlZS50aW1lcygzKS50b0ZpeGVkKDApKSAvLyB0aGUgZmFjdG9yIHRocmVlIGlzIGZvciB0aGUgbXVsdGlzaWduaW5nXG4gICAgICAuc2VxdWVuY2UodG9rZW5QYXJhbXMuc2VxdWVuY2VJZCk7XG5cbiAgICBjb25zdCB0eCA9IGF3YWl0IHR4QnVpbGRlci5idWlsZCgpO1xuICAgIGNvbnN0IHNlcmlhbGl6ZWRUeCA9IHR4LnRvQnJvYWRjYXN0Rm9ybWF0KCk7XG5cbiAgICBjb25zdCB7IGtleXMsIGlzS3JzUmVjb3ZlcnksIGlzVW5zaWduZWRTd2VlcCwgdXNlckFkZHJlc3MsIGJhY2t1cEFkZHJlc3MgfSA9IHRva2VuUGFyYW1zO1xuXG4gICAgaWYgKGlzVW5zaWduZWRTd2VlcCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdHhIZXg6IHNlcmlhbGl6ZWRUeCxcbiAgICAgICAgY29pbjogdGhpcy5nZXRDaGFpbigpLFxuICAgICAgfTtcbiAgICB9XG5cbiAgICBpZiAoIWtleXNbMF0ucHJpdmF0ZUtleSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGB1c2VyS2V5IGlzIG5vdCBhIHByaXZhdGUga2V5YCk7XG4gICAgfVxuXG4gICAgY29uc3QgdXNlcktleSA9IGtleXNbMF0ucHJpdmF0ZUtleS50b1N0cmluZygnaGV4Jyk7XG4gICAgY29uc3QgdXNlclNpZ25hdHVyZSA9IHJpcHBsZS5zaWduV2l0aFByaXZhdGVLZXkoc2VyaWFsaXplZFR4LCB1c2VyS2V5LCB7IHNpZ25BczogdXNlckFkZHJlc3MgfSk7XG5cbiAgICBsZXQgc2lnbmVkVHJhbnNhY3Rpb246IHN0cmluZztcblxuICAgIGlmIChpc0tyc1JlY292ZXJ5KSB7XG4gICAgICBzaWduZWRUcmFuc2FjdGlvbiA9IHVzZXJTaWduYXR1cmUuc2lnbmVkVHJhbnNhY3Rpb247XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICgha2V5c1sxXS5wcml2YXRlS2V5KSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgYmFja3VwS2V5IGlzIG5vdCBhIHByaXZhdGUga2V5YCk7XG4gICAgICB9XG4gICAgICBjb25zdCBiYWNrdXBLZXkgPSBrZXlzWzFdLnByaXZhdGVLZXkudG9TdHJpbmcoJ2hleCcpO1xuICAgICAgY29uc3QgYmFja3VwU2lnbmF0dXJlID0gcmlwcGxlLnNpZ25XaXRoUHJpdmF0ZUtleShzZXJpYWxpemVkVHgsIGJhY2t1cEtleSwgeyBzaWduQXM6IGJhY2t1cEFkZHJlc3MgfSk7XG4gICAgICBzaWduZWRUcmFuc2FjdGlvbiA9IHJpcHBsZS5tdWx0aXNpZ24oW3VzZXJTaWduYXR1cmUuc2lnbmVkVHJhbnNhY3Rpb24sIGJhY2t1cFNpZ25hdHVyZS5zaWduZWRUcmFuc2FjdGlvbl0pO1xuICAgIH1cblxuICAgIGNvbnN0IHRyYW5zYWN0aW9uRXhwbGFuYXRpb246IFJlY292ZXJ5SW5mbyA9IChhd2FpdCB0aGlzLmV4cGxhaW5UcmFuc2FjdGlvbih7XG4gICAgICB0eEhleDogc2lnbmVkVHJhbnNhY3Rpb24sXG4gICAgfSkpIGFzIFJlY292ZXJ5SW5mbztcblxuICAgIHRyYW5zYWN0aW9uRXhwbGFuYXRpb24udHhIZXggPSBzaWduZWRUcmFuc2FjdGlvbjtcblxuICAgIGlmIChpc0tyc1JlY292ZXJ5KSB7XG4gICAgICB0cmFuc2FjdGlvbkV4cGxhbmF0aW9uLmJhY2t1cEtleSA9IHBhcmFtcy5iYWNrdXBLZXk7XG4gICAgICB0cmFuc2FjdGlvbkV4cGxhbmF0aW9uLmNvaW4gPSB0aGlzLmdldENoYWluKCk7XG4gICAgfVxuICAgIHJldHVybiB0cmFuc2FjdGlvbkV4cGxhbmF0aW9uO1xuICB9XG5cbiAgLyoqXG4gICAqIEdlbmVyYXRlIGEgbmV3IGtleXBhaXIgZm9yIHRoaXMgY29pbi5cbiAgICogQHBhcmFtIHNlZWQgU2VlZCBmcm9tIHdoaWNoIHRoZSBuZXcga2V5cGFpciBzaG91bGQgYmUgZ2VuZXJhdGVkLCBvdGhlcndpc2UgYSByYW5kb20gc2VlZCBpcyB1c2VkXG4gICAqL1xuICBwdWJsaWMgZ2VuZXJhdGVLZXlQYWlyKHNlZWQ/OiBCdWZmZXIpOiBLZXlQYWlyIHtcbiAgICBjb25zdCBrZXlQYWlyID0gc2VlZCA/IG5ldyBYcnBLZXlQYWlyKHsgc2VlZCB9KSA6IG5ldyBYcnBLZXlQYWlyKCk7XG4gICAgY29uc3Qga2V5cyA9IGtleVBhaXIuZ2V0RXh0ZW5kZWRLZXlzKCk7XG4gICAgaWYgKCFrZXlzLnhwcnYpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignTWlzc2luZyBwcnYgaW4ga2V5IGdlbmVyYXRpb24uJyk7XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICBwdWI6IGtleXMueHB1YixcbiAgICAgIHBydjoga2V5cy54cHJ2LFxuICAgIH07XG4gIH1cblxuICBhc3luYyBwYXJzZVRyYW5zYWN0aW9uKHBhcmFtczogUGFyc2VUcmFuc2FjdGlvbk9wdGlvbnMpOiBQcm9taXNlPFBhcnNlZFRyYW5zYWN0aW9uPiB7XG4gICAgcmV0dXJuIHt9O1xuICB9XG59XG4iXX0=