@bitgo-beta/sdk-coin-ada 2.2.3-alpha.249 → 2.2.3-alpha.250

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
+ ## [4.5.5](https://github.com/BitGo/BitGoJS/compare/@bitgo/sdk-coin-ada@4.5.4...@bitgo/sdk-coin-ada@4.5.5) (2025-01-15)
7
+
8
+ **Note:** Version bump only for package @bitgo/sdk-coin-ada
9
+
6
10
  ## [4.5.4](https://github.com/BitGo/BitGoJS/compare/@bitgo/sdk-coin-ada@4.5.3...@bitgo/sdk-coin-ada@4.5.4) (2025-01-09)
7
11
 
8
12
  **Note:** Version bump only for package @bitgo/sdk-coin-ada
@@ -100,7 +100,7 @@ class Transaction extends sdk_core_1.BaseTransaction {
100
100
  for (let i = 0; i < this._transaction.body().outputs().len(); i++) {
101
101
  const output = this._transaction.body().outputs().get(i);
102
102
  result.outputs.push({
103
- address: output.address().to_bech32(),
103
+ address: utils_1.default.getAddressString(output.address()),
104
104
  amount: output.amount().coin().to_str(),
105
105
  multiAssets: output.amount().multiasset() || undefined,
106
106
  });
@@ -183,7 +183,7 @@ class Transaction extends sdk_core_1.BaseTransaction {
183
183
  for (let i = 0; i < tx_outputs.len(); i++) {
184
184
  const output = tx_outputs.get(i);
185
185
  outputs.push({
186
- address: output.address().to_bech32(),
186
+ address: utils_1.default.getAddressString(output.address()),
187
187
  value: output.amount().coin().to_str(),
188
188
  });
189
189
  }
@@ -368,4 +368,4 @@ class Transaction extends sdk_core_1.BaseTransaction {
368
368
  }
369
369
  }
370
370
  exports.Transaction = Transaction;
371
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNhY3Rpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL3RyYW5zYWN0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLG1EQU84QjtBQUM5QixzRkFBd0U7QUFDeEUsdUNBQW9DO0FBRXBDLG9EQUErQjtBQXVCL0IsSUFBWSxRQU1YO0FBTkQsV0FBWSxRQUFRO0lBQ2xCLHVFQUFvQixDQUFBO0lBQ3BCLG1FQUFrQixDQUFBO0lBQ2xCLDJFQUFzQixDQUFBO0lBQ3RCLHlFQUFxQixDQUFBO0lBQ3JCLDJEQUFjLENBQUE7QUFDaEIsQ0FBQyxFQU5XLFFBQVEsd0JBQVIsUUFBUSxRQU1uQjtBQWdERCxNQUFhLFdBQVksU0FBUSwwQkFBZTtJQUs5QyxZQUFZLFVBQWdDO1FBQzFDLEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUNwQixDQUFDO0lBRUQsSUFBSSxXQUFXO1FBQ2IsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDO0lBQzNCLENBQUM7SUFFRCxJQUFJLFdBQVcsQ0FBQyxFQUEyQjtRQUN6QyxJQUFJLENBQUMsWUFBWSxHQUFHLEVBQUUsQ0FBQztRQUN2QixJQUFJLENBQUMsR0FBRyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLGdCQUFnQixDQUFDLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzdGLENBQUM7SUFFRCxrQkFBa0I7SUFDbEIsT0FBTyxDQUFDLEdBQVk7UUFDbEIsSUFBSSxDQUFDO1lBQ0gsSUFBSSxpQkFBTyxDQUFDLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDO1lBQzlCLE9BQU8sSUFBSSxDQUFDO1FBQ2QsQ0FBQztRQUFDLE1BQU0sQ0FBQztZQUNQLE9BQU8s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WUFBWSxFQUFFLFlBQVk7WUFDMUIsYUFBYSxFQUFFLEVBQUU7WUFDakIsWUFBWSxFQUFFLEdBQUc7WUFDakIsR0FBRyxFQUFFLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQyxJQUFJLEVBQUU7WUFDdkIsSUFBSTtZQUNKLFlBQVksRUFBRSxNQUFNLENBQUMsS0FBSztZQUMxQixXQUFXLEVBQUUsTUFBTSxDQUFDLFdBQVc7WUFDL0IsYUFBYSxFQUFFLElBQUksQ0FBQyxjQUFjO1NBQ25DLENBQUM7SUFDSixDQUFDO0lBRUQsZ0JBQWdCO1FBQ2QsT0FBTyxJQUFJLENBQUMsY0FBYyxDQUFDO0lBQzdCLENBQUM7SUFFRDs7T0FFRztJQUNILElBQUksTUFBTTtRQUNSLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQztJQUNuQixDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILEdBQUcsQ0FBQyxHQUFXO1FBQ2IsSUFBSSxDQUFDLElBQUksR0FBRyxHQUFHLENBQUM7SUFDbEIsQ0FBQztDQUNGO0FBdFdELGtDQXNXQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIEJhc2VLZXksXG4gIEJhc2VUcmFuc2FjdGlvbixcbiAgRW50cnksXG4gIEludmFsaWRUcmFuc2FjdGlvbkVycm9yLFxuICBOb2RlRW52aXJvbm1lbnRFcnJvcixcbiAgVHJhbnNhY3Rpb25UeXBlLFxufSBmcm9tICdAYml0Z28tYmV0YS9zZGstY29yZSc7XG5pbXBvcnQgKiBhcyBDYXJkYW5vV2FzbSBmcm9tICdAZW11cmdvL2NhcmRhbm8tc2VyaWFsaXphdGlvbi1saWItbm9kZWpzJztcbmltcG9ydCB7IEtleVBhaXIgfSBmcm9tICcuL2tleVBhaXInO1xuaW1wb3J0IHsgQmFzZUNvaW4gYXMgQ29pbkNvbmZpZyB9IGZyb20gJ0BiaXRnby1iZXRhL3N0YXRpY3MnO1xuaW1wb3J0IGFkYVV0aWxzIGZyb20gJy4vdXRpbHMnO1xuXG5leHBvcnQgaW50ZXJmYWNlIFRyYW5zYWN0aW9uSW5wdXQge1xuICB0cmFuc2FjdGlvbl9pZDogc3RyaW5nO1xuICB0cmFuc2FjdGlvbl9pbmRleDogbnVtYmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEFzc2V0IHtcbiAgcG9saWN5X2lkOiBzdHJpbmc7XG4gIGFzc2V0X25hbWU6IHN0cmluZztcbiAgcXVhbnRpdHk6IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBUcmFuc2FjdGlvbk91dHB1dCB7XG4gIGFkZHJlc3M6IHN0cmluZztcbiAgYW1vdW50OiBzdHJpbmc7XG4gIG11bHRpQXNzZXRzPzogQ2FyZGFub1dhc20uTXVsdGlBc3NldDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBXaXRuZXNzIHtcbiAgcHVibGljS2V5OiBzdHJpbmc7XG4gIHNpZ25hdHVyZTogc3RyaW5nO1xufVxuZXhwb3J0IGVudW0gQ2VydFR5cGUge1xuICBTdGFrZUtleVJlZ2lzdHJhdGlvbixcbiAgU3Rha2VLZXlEZWxlZ2F0aW9uLFxuICBTdGFrZUtleURlcmVnaXN0cmF0aW9uLFxuICBTdGFrZVBvb2xSZWdpc3RyYXRpb24sXG4gIFZvdGVEZWxlZ2F0aW9uLFxufVxuXG5leHBvcnQgaW50ZXJmYWNlIENlcnQge1xuICB0eXBlOiBDZXJ0VHlwZTtcbiAgc3Rha2VDcmVkZW50aWFsSGFzaD86IHN0cmluZztcbiAgcG9vbEtleUhhc2g/OiBzdHJpbmc7XG4gIGRSZXBJZD86IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBXaXRoZHJhd2FsIHtcbiAgc3Rha2VBZGRyZXNzOiBzdHJpbmc7XG4gIHZhbHVlOiBzdHJpbmc7XG59XG5cbmV4cG9ydCB0eXBlIFN0YWtlS2V5UmVnaXN0cmF0aW9uQ2VydCA9IENlcnQ7XG5cbmV4cG9ydCB0eXBlIFN0YWtlS2V5RGVsZWdhdGlvbkNlcnQgPSBDZXJ0O1xuXG5leHBvcnQgaW50ZXJmYWNlIFN0YWtlUG9vbFJlZ2lzdHJhdGlvbkNlcnQgZXh0ZW5kcyBDZXJ0IHtcbiAgdnJmS2V5SGFzaDogc3RyaW5nO1xuICBwbGVkZ2U6IHN0cmluZztcbiAgY29zdDogc3RyaW5nO1xuICBtYXJnaW5OdW1lcmF0b3I6IHN0cmluZztcbiAgbWFyZ2luRGVub21pbmF0b3I6IHN0cmluZztcbiAgcmV3YXJkQWNjb3VudDogc3RyaW5nO1xuICBwb29sT3duZXJzOiBzdHJpbmdbXTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBQbGVkZ2VEZXRhaWxzIHtcbiAgc3Rha2VLZXlSZWdpc3RyYXRpb24/OiBTdGFrZUtleVJlZ2lzdHJhdGlvbkNlcnQ7XG4gIHN0YWtlS2V5RGVsZWdhdGlvbj86IFN0YWtlS2V5RGVsZWdhdGlvbkNlcnQ7XG4gIHN0YWtlUG9vbFJlZ2lzdHJhdGlvbjogU3Rha2VQb29sUmVnaXN0cmF0aW9uQ2VydDtcbn1cblxuLyoqXG4gKiBUaGUgdHJhbnNhY3Rpb24gZGF0YSByZXR1cm5lZCBmcm9tIHRoZSB0b0pzb24oKSBmdW5jdGlvbiBvZiBhIHRyYW5zYWN0aW9uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVHhEYXRhIHtcbiAgaWQ6IHN0cmluZztcbiAgdHlwZTogVHJhbnNhY3Rpb25UeXBlO1xuICBpbnB1dHM6IFRyYW5zYWN0aW9uSW5wdXRbXTtcbiAgb3V0cHV0czogVHJhbnNhY3Rpb25PdXRwdXRbXTtcbiAgd2l0bmVzc2VzOiBXaXRuZXNzW107XG4gIGNlcnRzOiBDZXJ0W107XG4gIHdpdGhkcmF3YWxzOiBXaXRoZHJhd2FsW107XG4gIHBsZWRnZURldGFpbHM/OiBQbGVkZ2VEZXRhaWxzO1xufVxuXG5leHBvcnQgY2xhc3MgVHJhbnNhY3Rpb24gZXh0ZW5kcyBCYXNlVHJhbnNhY3Rpb24ge1xuICBwcml2YXRlIF90cmFuc2FjdGlvbjogQ2FyZGFub1dhc20uVHJhbnNhY3Rpb247XG4gIHByaXZhdGUgX2ZlZTogc3RyaW5nO1xuICBwcml2YXRlIF9wbGVkZ2VEZXRhaWxzPzogUGxlZGdlRGV0YWlscztcblxuICBjb25zdHJ1Y3Rvcihjb2luQ29uZmlnOiBSZWFkb25seTxDb2luQ29uZmlnPikge1xuICAgIHN1cGVyKGNvaW5Db25maWcpO1xuICB9XG5cbiAgZ2V0IHRyYW5zYWN0aW9uKCk6IENhcmRhbm9XYXNtLlRyYW5zYWN0aW9uIHtcbiAgICByZXR1cm4gdGhpcy5fdHJhbnNhY3Rpb247XG4gIH1cblxuICBzZXQgdHJhbnNhY3Rpb24odHg6IENhcmRhbm9XYXNtLlRyYW5zYWN0aW9uKSB7XG4gICAgdGhpcy5fdHJhbnNhY3Rpb24gPSB0eDtcbiAgICB0aGlzLl9pZCA9IEJ1ZmZlci5mcm9tKENhcmRhbm9XYXNtLmhhc2hfdHJhbnNhY3Rpb24odHguYm9keSgpKS50b19ieXRlcygpKS50b1N0cmluZygnaGV4Jyk7XG4gIH1cblxuICAvKiogQGluaGVyaXRkb2MgKi9cbiAgY2FuU2lnbihrZXk6IEJhc2VLZXkpOiBib29sZWFuIHtcbiAgICB0cnkge1xuICAgICAgbmV3IEtleVBhaXIoeyBwcnY6IGtleS5rZXkgfSk7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICB0b0Jyb2FkY2FzdEZvcm1hdCgpOiBzdHJpbmcge1xuICAgIGlmICghdGhpcy5fdHJhbnNhY3Rpb24pIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkVHJhbnNhY3Rpb25FcnJvcignRW1wdHkgdHJhbnNhY3Rpb24gZGF0YScpO1xuICAgIH1cbiAgICByZXR1cm4gQnVmZmVyLmZyb20odGhpcy5fdHJhbnNhY3Rpb24udG9fYnl0ZXMoKSkudG9TdHJpbmcoJ2hleCcpO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0ZG9jICovXG4gIHRvSnNvbigpOiBUeERhdGEge1xuICAgIGlmICghdGhpcy5fdHJhbnNhY3Rpb24pIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkVHJhbnNhY3Rpb25FcnJvcignRW1wdHkgdHJhbnNhY3Rpb24gZGF0YScpO1xuICAgIH1cblxuICAgIGNvbnN0IHJlc3VsdDogVHhEYXRhID0ge1xuICAgICAgaWQ6IHRoaXMuaWQsXG4gICAgICB0eXBlOiB0aGlzLl90eXBlIGFzIFRyYW5zYWN0aW9uVHlwZSxcbiAgICAgIGlucHV0czogW10sXG4gICAgICBvdXRwdXRzOiBbXSxcbiAgICAgIHdpdG5lc3NlczogW10sXG4gICAgICBjZXJ0czogW10sXG4gICAgICB3aXRoZHJhd2FsczogW10sXG4gICAgfTtcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5fdHJhbnNhY3Rpb24uYm9keSgpLmlucHV0cygpLmxlbigpOyBpKyspIHtcbiAgICAgIGNvbnN0IGlucHV0ID0gdGhpcy5fdHJhbnNhY3Rpb24uYm9keSgpLmlucHV0cygpLmdldChpKTtcbiAgICAgIHJlc3VsdC5pbnB1dHMucHVzaCh7XG4gICAgICAgIHRyYW5zYWN0aW9uX2lkOiBCdWZmZXIuZnJvbShpbnB1dC50cmFuc2FjdGlvbl9pZCgpLnRvX2J5dGVzKCkpLnRvU3RyaW5nKCdoZXgnKSxcbiAgICAgICAgdHJhbnNhY3Rpb25faW5kZXg6IGlucHV0LmluZGV4KCksXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuX3RyYW5zYWN0aW9uLmJvZHkoKS5vdXRwdXRzKCkubGVuKCk7IGkrKykge1xuICAgICAgY29uc3Qgb3V0cHV0ID0gdGhpcy5fdHJhbnNhY3Rpb24uYm9keSgpLm91dHB1dHMoKS5nZXQoaSk7XG4gICAgICByZXN1bHQub3V0cHV0cy5wdXNoKHtcbiAgICAgICAgYWRkcmVzczogb3V0cHV0LmFkZHJlc3MoKS50b19iZWNoMzIoKSxcbiAgICAgICAgYW1vdW50OiBvdXRwdXQuYW1vdW50KCkuY29pbigpLnRvX3N0cigpLFxuICAgICAgICBtdWx0aUFzc2V0czogb3V0cHV0LmFtb3VudCgpLm11bHRpYXNzZXQoKSB8fCB1bmRlZmluZWQsXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5fdHJhbnNhY3Rpb24uYm9keSgpLmNlcnRzKCkpIHtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5fdHJhbnNhY3Rpb24uYm9keSgpLmNlcnRzKCkhLmxlbigpOyBpKyspIHtcbiAgICAgICAgY29uc3QgY2VydCA9IHRoaXMuX3RyYW5zYWN0aW9uLmJvZHkoKS5jZXJ0cygpIS5nZXQoaSk7XG4gICAgICAgIGlmIChjZXJ0LmFzX3N0YWtlX3JlZ2lzdHJhdGlvbigpICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBjb25zdCBzdGFrZVJlZ2lzdHJhdGlvbiA9IGNlcnQuYXNfc3Rha2VfcmVnaXN0cmF0aW9uKCkgYXMgQ2FyZGFub1dhc20uU3Rha2VSZWdpc3RyYXRpb247XG4gICAgICAgICAgcmVzdWx0LmNlcnRzLnB1c2goe1xuICAgICAgICAgICAgdHlwZTogQ2VydFR5cGUuU3Rha2VLZXlSZWdpc3RyYXRpb24sXG4gICAgICAgICAgICBzdGFrZUNyZWRlbnRpYWxIYXNoOiBCdWZmZXIuZnJvbShzdGFrZVJlZ2lzdHJhdGlvbi5zdGFrZV9jcmVkZW50aWFsKCkudG9fYnl0ZXMoKSkudG9TdHJpbmcoJ2hleCcpLFxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjZXJ0LmFzX3N0YWtlX2RlcmVnaXN0cmF0aW9uKCkgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIGNvbnN0IHN0YWtlRGVyZWdpc3RyYXRpb24gPSBjZXJ0LmFzX3N0YWtlX2RlcmVnaXN0cmF0aW9uKCkgYXMgQ2FyZGFub1dhc20uU3Rha2VEZXJlZ2lzdHJhdGlvbjtcbiAgICAgICAgICByZXN1bHQuY2VydHMucHVzaCh7XG4gICAgICAgICAgICB0eXBlOiBDZXJ0VHlwZS5TdGFrZUtleURlcmVnaXN0cmF0aW9uLFxuICAgICAgICAgICAgc3Rha2VDcmVkZW50aWFsSGFzaDogQnVmZmVyLmZyb20oc3Rha2VEZXJlZ2lzdHJhdGlvbi5zdGFrZV9jcmVkZW50aWFsKCkudG9fYnl0ZXMoKSkudG9TdHJpbmcoJ2hleCcpLFxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjZXJ0LmFzX3N0YWtlX2RlbGVnYXRpb24oKSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgY29uc3Qgc3Rha2VEZWxlZ2F0aW9uID0gY2VydC5hc19zdGFrZV9kZWxlZ2F0aW9uKCkgYXMgQ2FyZGFub1dhc20uU3Rha2VEZWxlZ2F0aW9uO1xuICAgICAgICAgIHJlc3VsdC5jZXJ0cy5wdXNoKHtcbiAgICAgICAgICAgIHR5cGU6IENlcnRUeXBlLlN0YWtlS2V5RGVsZWdhdGlvbixcbiAgICAgICAgICAgIHN0YWtlQ3JlZGVudGlhbEhhc2g6IEJ1ZmZlci5mcm9tKHN0YWtlRGVsZWdhdGlvbi5zdGFrZV9jcmVkZW50aWFsKCkudG9fYnl0ZXMoKSkudG9TdHJpbmcoJ2hleCcpLFxuICAgICAgICAgICAgcG9vbEtleUhhc2g6IEJ1ZmZlci5mcm9tKHN0YWtlRGVsZWdhdGlvbi5wb29sX2tleWhhc2goKS50b19ieXRlcygpKS50b1N0cmluZygnaGV4JyksXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNlcnQuYXNfcG9vbF9yZWdpc3RyYXRpb24oKSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgY29uc3Qgc3Rha2VQb29sUmVnaXN0cmF0aW9uID0gY2VydC5hc19wb29sX3JlZ2lzdHJhdGlvbigpIGFzIENhcmRhbm9XYXNtLlBvb2xSZWdpc3RyYXRpb247XG4gICAgICAgICAgcmVzdWx0LmNlcnRzLnB1c2goe1xuICAgICAgICAgICAgdHlwZTogQ2VydFR5cGUuU3Rha2VQb29sUmVnaXN0cmF0aW9uLFxuICAgICAgICAgICAgcG9vbEtleUhhc2g6IEJ1ZmZlci5mcm9tKHN0YWtlUG9vbFJlZ2lzdHJhdGlvbi5wb29sX3BhcmFtcygpLm9wZXJhdG9yKCkudG9fYnl0ZXMoKSkudG9TdHJpbmcoJ2hleCcpLFxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjZXJ0LmFzX3ZvdGVfZGVsZWdhdGlvbigpICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBjb25zdCB2b3RlRGVsZWdhdGlvbiA9IGNlcnQuYXNfdm90ZV9kZWxlZ2F0aW9uKCkgYXMgQ2FyZGFub1dhc20uVm90ZURlbGVnYXRpb247XG4gICAgICAgICAgcmVzdWx0LmNlcnRzLnB1c2goe1xuICAgICAgICAgICAgdHlwZTogQ2VydFR5cGUuVm90ZURlbGVnYXRpb24sXG4gICAgICAgICAgICBzdGFrZUNyZWRlbnRpYWxIYXNoOiBCdWZmZXIuZnJvbSh2b3RlRGVsZWdhdGlvbi5zdGFrZV9jcmVkZW50aWFsKCkudG9fYnl0ZXMoKSkudG9TdHJpbmcoJ2hleCcpLFxuICAgICAgICAgICAgZFJlcElkOiBhZGFVdGlscy5nZXREUmVwSWRGcm9tRFJlcCh2b3RlRGVsZWdhdGlvbi5kcmVwKCkpLFxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmVzdWx0LnBsZWRnZURldGFpbHMgPSB0aGlzLl9wbGVkZ2VEZXRhaWxzO1xuXG4gICAgaWYgKHRoaXMuX3RyYW5zYWN0aW9uLmJvZHkoKS53aXRoZHJhd2FscygpKSB7XG4gICAgICBjb25zdCB3aXRoZHJhd2FscyA9IHRoaXMuX3RyYW5zYWN0aW9uLmJvZHkoKS53aXRoZHJhd2FscygpIGFzIENhcmRhbm9XYXNtLldpdGhkcmF3YWxzO1xuICAgICAgY29uc3Qga2V5cyA9IHdpdGhkcmF3YWxzLmtleXMoKTtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwga2V5cy5sZW4oKTsgaSsrKSB7XG4gICAgICAgIGNvbnN0IHJld2FyZEFkZHJlc3MgPSBrZXlzLmdldChpKTtcbiAgICAgICAgY29uc3QgcmV3YXJkID0gd2l0aGRyYXdhbHMuZ2V0KHJld2FyZEFkZHJlc3MpIGFzIENhcmRhbm9XYXNtLkJpZ051bTtcbiAgICAgICAgcmVzdWx0LndpdGhkcmF3YWxzLnB1c2goe1xuICAgICAgICAgIHN0YWtlQWRkcmVzczogcmV3YXJkQWRkcmVzcy50b19hZGRyZXNzKCkudG9fYnl0ZXMoKS50b1N0cmluZygpLFxuICAgICAgICAgIHZhbHVlOiByZXdhcmQudG9fc3RyKCksXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0aGlzLl90cmFuc2FjdGlvbi53aXRuZXNzX3NldCgpLnZrZXlzKCkgIT09IHVuZGVmaW5lZCkge1xuICAgICAgY29uc3QgdmtleXMgPSB0aGlzLl90cmFuc2FjdGlvbi53aXRuZXNzX3NldCgpLnZrZXlzKCkgYXMgQ2FyZGFub1dhc20uVmtleXdpdG5lc3NlcztcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdmtleXMubGVuKCk7IGkrKykge1xuICAgICAgICBjb25zdCB2a2V5ID0gKHRoaXMuX3RyYW5zYWN0aW9uLndpdG5lc3Nfc2V0KCkudmtleXMoKSBhcyBDYXJkYW5vV2FzbS5Wa2V5d2l0bmVzc2VzKS5nZXQoaSk7XG4gICAgICAgIHJlc3VsdC53aXRuZXNzZXMucHVzaCh7XG4gICAgICAgICAgcHVibGljS2V5OiB2a2V5Py52a2V5KCkucHVibGljX2tleSgpLnRvX2hleCgpLFxuICAgICAgICAgIHNpZ25hdHVyZTogdmtleT8uc2lnbmF0dXJlKCkudG9faGV4KCksXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgLyoqXG4gICAqIEJ1aWxkIGlucHV0IGFuZCBvdXRwdXQgZmllbGQgZm9yIHRoaXMgdHJhbnNhY3Rpb25cbiAgICpcbiAgICovXG4gIGxvYWRJbnB1dHNBbmRPdXRwdXRzKCk6IHZvaWQge1xuICAgIGNvbnN0IG91dHB1dHM6IEVudHJ5W10gPSBbXTtcbiAgICBjb25zdCBpbnB1dHM6IEVudHJ5W10gPSBbXTtcblxuICAgIGNvbnN0IHR4X291dHB1dHMgPSB0aGlzLl90cmFuc2FjdGlvbi5ib2R5KCkub3V0cHV0cygpO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdHhfb3V0cHV0cy5sZW4oKTsgaSsrKSB7XG4gICAgICBjb25zdCBvdXRwdXQgPSB0eF9vdXRwdXRzLmdldChpKTtcbiAgICAgIG91dHB1dHMucHVzaCh7XG4gICAgICAgIGFkZHJlc3M6IG91dHB1dC5hZGRyZXNzKCkudG9fYmVjaDMyKCksXG4gICAgICAgIHZhbHVlOiBvdXRwdXQuYW1vdW50KCkuY29pbigpLnRvX3N0cigpLFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgdGhpcy5fb3V0cHV0cyA9IG91dHB1dHM7XG4gICAgdGhpcy5faW5wdXRzID0gaW5wdXRzO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0ZG9jICovXG4gIGdldCBzaWduYWJsZVBheWxvYWQoKTogQnVmZmVyIHtcbiAgICByZXR1cm4gQnVmZmVyLmZyb20oQ2FyZGFub1dhc20uaGFzaF90cmFuc2FjdGlvbih0aGlzLl90cmFuc2FjdGlvbi5ib2R5KCkpLnRvX2J5dGVzKCkpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldHMgdGhpcyB0cmFuc2FjdGlvbiBwYXlsb2FkXG4gICAqXG4gICAqIEBwYXJhbSByYXdUeFxuICAgKi9cbiAgZnJvbVJhd1RyYW5zYWN0aW9uKHJhd1R4OiBzdHJpbmcpOiB2b2lkIHtcbiAgICBpZiAoQ2FyZGFub1dhc20uVHJhbnNhY3Rpb24gPT09IHVuZGVmaW5lZCkge1xuICAgICAgLy8gYSB0ZW1wIGZpeCB1bnRpbCB3ZSBzb2x2ZSBpbXBvcnQgcHJvYmxlbSBpbiB3ZWJwYWNrXG4gICAgICB0aHJvdyBuZXcgTm9kZUVudmlyb25tZW50RXJyb3IoJ3VuYWJsZSB0byBsb2FkIGNhcmRhbm8gc2VyaWFsaXphdGlvbiBsaWJyYXJ5Jyk7XG4gICAgfVxuICAgIGNvbnN0IEhFWF9SRUdFWCA9IC9eWzAtOWEtZkEtRl0rJC87XG4gICAgY29uc3QgYnVmZmVyUmF3VHJhbnNhY3Rpb24gPSBIRVhfUkVHRVgudGVzdChyYXdUeCkgPyBCdWZmZXIuZnJvbShyYXdUeCwgJ2hleCcpIDogQnVmZmVyLmZyb20ocmF3VHgsICdiYXNlNjQnKTtcbiAgICB0cnkge1xuICAgICAgY29uc3QgdHhuID0gQ2FyZGFub1dhc20uVHJhbnNhY3Rpb24uZnJvbV9ieXRlcyhidWZmZXJSYXdUcmFuc2FjdGlvbik7XG4gICAgICB0aGlzLl90cmFuc2FjdGlvbiA9IHR4bjtcbiAgICAgIHRoaXMuX2lkID0gQnVmZmVyLmZyb20oQ2FyZGFub1dhc20uaGFzaF90cmFuc2FjdGlvbih0eG4uYm9keSgpKS50b19ieXRlcygpKS50b1N0cmluZygnaGV4Jyk7XG4gICAgICB0aGlzLl90eXBlID0gVHJhbnNhY3Rpb25UeXBlLlNlbmQ7XG4gICAgICBpZiAodGhpcy5fdHJhbnNhY3Rpb24uYm9keSgpLmNlcnRzKCkpIHtcbiAgICAgICAgY29uc3QgY2VydHM6IENhcmRhbm9XYXNtLkNlcnRpZmljYXRlW10gPSBbXTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLl90cmFuc2FjdGlvbi5ib2R5KCkuY2VydHMoKSEubGVuKCk7IGkrKykge1xuICAgICAgICAgIGNvbnN0IGNlcnQgPSB0aGlzLl90cmFuc2FjdGlvbi5ib2R5KCkuY2VydHMoKSEuZ2V0KGkpO1xuICAgICAgICAgIGNlcnRzLnB1c2goY2VydCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoY2VydHMuc29tZSgoYykgPT4gYy5hc19wb29sX3JlZ2lzdHJhdGlvbigpICE9PSB1bmRlZmluZWQpKSB7XG4gICAgICAgICAgdGhpcy5fdHlwZSA9IFRyYW5zYWN0aW9uVHlwZS5TdGFraW5nUGxlZGdlO1xuICAgICAgICAgIGNvbnN0IHN0YWtlS2V5UmVnaXN0cmF0aW9uID0gY2VydHMuZmluZCgoYykgPT4gYy5hc19zdGFrZV9yZWdpc3RyYXRpb24oKSAhPT0gdW5kZWZpbmVkKTtcbiAgICAgICAgICBjb25zdCBzdGFrZUtleURlbGVnYXRpb24gPSBjZXJ0cy5maW5kKChjKSA9PiBjLmFzX3N0YWtlX2RlbGVnYXRpb24oKSAhPT0gdW5kZWZpbmVkKTtcbiAgICAgICAgICBjb25zdCBzdGFrZVBvb2xSZWdpc3RyYXRpb24gPSBjZXJ0cy5maW5kKChjKSA9PiBjLmFzX3Bvb2xfcmVnaXN0cmF0aW9uKCkgIT09IHVuZGVmaW5lZCk7XG5cbiAgICAgICAgICB0aGlzLl9wbGVkZ2VEZXRhaWxzID0ge1xuICAgICAgICAgICAgc3Rha2VLZXlSZWdpc3RyYXRpb246IHRoaXMubG9hZFN0YWtlS2V5UmVnaXN0cmF0aW9uKHN0YWtlS2V5UmVnaXN0cmF0aW9uKSxcbiAgICAgICAgICAgIHN0YWtlS2V5RGVsZWdhdGlvbjogdGhpcy5sb2FkU3Rha2VLZXlEZWxlZ2F0aW9uKHN0YWtlS2V5RGVsZWdhdGlvbiksXG4gICAgICAgICAgICBzdGFrZVBvb2xSZWdpc3RyYXRpb246IHRoaXMubG9hZFN0YWtlUG9vbFJlZ2lzdHJhdGlvbihzdGFrZVBvb2xSZWdpc3RyYXRpb24hKSxcbiAgICAgICAgICB9O1xuICAgICAgICB9IGVsc2UgaWYgKGNlcnRzLnNvbWUoKGMpID0+IGMuYXNfc3Rha2VfcmVnaXN0cmF0aW9uKCkgIT09IHVuZGVmaW5lZCkpIHtcbiAgICAgICAgICB0aGlzLl90eXBlID0gVHJhbnNhY3Rpb25UeXBlLlN0YWtpbmdBY3RpdmF0ZTtcbiAgICAgICAgfSBlbHNlIGlmIChjZXJ0cy5zb21lKChjKSA9PiBjLmFzX3N0YWtlX2RlcmVnaXN0cmF0aW9uKCkgIT09IHVuZGVmaW5lZCkpIHtcbiAgICAgICAgICB0aGlzLl90eXBlID0gVHJhbnNhY3Rpb25UeXBlLlN0YWtpbmdEZWFjdGl2YXRlO1xuICAgICAgICB9IGVsc2UgaWYgKGNlcnRzLnNvbWUoKGMpID0+IGMuYXNfdm90ZV9kZWxlZ2F0aW9uKCkgIT09IHVuZGVmaW5lZCkpIHtcbiAgICAgICAgICB0aGlzLl90eXBlID0gVHJhbnNhY3Rpb25UeXBlLlZvdGVEZWxlZ2F0aW9uO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5fdHJhbnNhY3Rpb24uYm9keSgpLndpdGhkcmF3YWxzKCkpIHtcbiAgICAgICAgdGhpcy5fdHlwZSA9IFRyYW5zYWN0aW9uVHlwZS5TdGFraW5nV2l0aGRyYXc7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuX2ZlZSA9IHR4bi5ib2R5KCkuZmVlKCkudG9fc3RyKCk7XG4gICAgICB0aGlzLmxvYWRJbnB1dHNBbmRPdXRwdXRzKCk7XG5cbiAgICAgIGlmICh0aGlzLl90cmFuc2FjdGlvbi53aXRuZXNzX3NldCgpLnZrZXlzKCkpIHtcbiAgICAgICAgY29uc3QgdmtleXMgPSB0aGlzLl90cmFuc2FjdGlvbi53aXRuZXNzX3NldCgpLnZrZXlzKCkhIGFzIENhcmRhbm9XYXNtLlZrZXl3aXRuZXNzZXM7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdmtleXMubGVuKCk7IGkrKykge1xuICAgICAgICAgIGNvbnN0IHZrZXkgPSB2a2V5cy5nZXQoaSk7XG4gICAgICAgICAgdGhpcy5fc2lnbmF0dXJlcy5wdXNoKHZrZXkuc2lnbmF0dXJlKCkudG9faGV4KCkpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRUcmFuc2FjdGlvbkVycm9yKCd1bmFibGUgdG8gYnVpbGQgdHJhbnNhY3Rpb24gZnJvbSByYXcnKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGxvYWRTdGFrZUtleVJlZ2lzdHJhdGlvbihcbiAgICBjZXJ0aWZpY2F0ZTogQ2FyZGFub1dhc20uQ2VydGlmaWNhdGUgfCB1bmRlZmluZWRcbiAgKTogU3Rha2VLZXlSZWdpc3RyYXRpb25DZXJ0IHwgdW5kZWZpbmVkIHtcbiAgICBpZiAoY2VydGlmaWNhdGUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgY29uc3Qgc3Rha2VSZWdpc3RyYXRpb24gPSBjZXJ0aWZpY2F0ZS5hc19zdGFrZV9yZWdpc3RyYXRpb24oKTtcbiAgICBpZiAoc3Rha2VSZWdpc3RyYXRpb24gIT09IHVuZGVmaW5lZCAmJiBzdGFrZVJlZ2lzdHJhdGlvbiEuc3Rha2VfY3JlZGVudGlhbCgpLnRvX2tleWhhc2goKSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICB0eXBlOiBDZXJ0VHlwZS5TdGFrZUtleVJlZ2lzdHJhdGlvbixcbiAgICAgICAgc3Rha2VDcmVkZW50aWFsSGFzaDogc3Rha2VSZWdpc3RyYXRpb24hLnN0YWtlX2NyZWRlbnRpYWwoKS50b19rZXloYXNoKCkhLnRvX2hleCgpLFxuICAgICAgfTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGxvYWRTdGFrZUtleURlbGVnYXRpb24oY2VydGlmaWNhdGU6IENhcmRhbm9XYXNtLkNlcnRpZmljYXRlIHwgdW5kZWZpbmVkKTogU3Rha2VLZXlEZWxlZ2F0aW9uQ2VydCB8IHVuZGVmaW5lZCB7XG4gICAgaWYgKGNlcnRpZmljYXRlID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIGNvbnN0IHN0YWtlRGVsZWdhdGlvbiA9IGNlcnRpZmljYXRlLmFzX3N0YWtlX2RlbGVnYXRpb24oKTtcbiAgICBpZiAoc3Rha2VEZWxlZ2F0aW9uICE9PSB1bmRlZmluZWQgJiYgc3Rha2VEZWxlZ2F0aW9uIS5zdGFrZV9jcmVkZW50aWFsKCkudG9fa2V5aGFzaCgpICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHR5cGU6IENlcnRUeXBlLlN0YWtlS2V5RGVsZWdhdGlvbixcbiAgICAgICAgc3Rha2VDcmVkZW50aWFsSGFzaDogc3Rha2VEZWxlZ2F0aW9uIS5zdGFrZV9jcmVkZW50aWFsKCkudG9fa2V5aGFzaCgpIS50b19oZXgoKSxcbiAgICAgICAgcG9vbEtleUhhc2g6IHN0YWtlRGVsZWdhdGlvbiEucG9vbF9rZXloYXNoKCkudG9faGV4KCksXG4gICAgICB9O1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgbG9hZFN0YWtlUG9vbFJlZ2lzdHJhdGlvbihjZXJ0aWZpY2F0ZTogQ2FyZGFub1dhc20uQ2VydGlmaWNhdGUpOiBTdGFrZVBvb2xSZWdpc3RyYXRpb25DZXJ0IHtcbiAgICBjb25zdCBwb29sUmVnaXN0cmF0aW9uID0gY2VydGlmaWNhdGUuYXNfcG9vbF9yZWdpc3RyYXRpb24oKTtcbiAgICBjb25zdCByZXdhcmRBY2NvdW50ID0gcG9vbFJlZ2lzdHJhdGlvbiEucG9vbF9wYXJhbXMoKS5yZXdhcmRfYWNjb3VudCgpO1xuICAgIGNvbnN0IG5ldHdvcmtJZCA9IHJld2FyZEFjY291bnQudG9fYWRkcmVzcygpLm5ldHdvcmtfaWQoKTtcbiAgICBjb25zdCBvd25lcnM6IHN0cmluZ1tdID0gW107XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwb29sUmVnaXN0cmF0aW9uIS5wb29sX3BhcmFtcygpLnBvb2xfb3duZXJzKCkubGVuKCk7IGkrKykge1xuICAgICAgY29uc3QgcG9vbE93bmVyID0gcG9vbFJlZ2lzdHJhdGlvbiEucG9vbF9wYXJhbXMoKS5wb29sX293bmVycygpLmdldChpKTtcbiAgICAgIGNvbnN0IG93bmVyU3Rha2VLZXkgPSBDYXJkYW5vV2FzbS5DcmVkZW50aWFsLmZyb21fa2V5aGFzaChwb29sT3duZXIpO1xuICAgICAgb3duZXJzLnB1c2goQ2FyZGFub1dhc20uUmV3YXJkQWRkcmVzcy5uZXcobmV0d29ya0lkLCBvd25lclN0YWtlS2V5KS50b19hZGRyZXNzKCkudG9fYmVjaDMyKCkpO1xuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogQ2VydFR5cGUuU3Rha2VQb29sUmVnaXN0cmF0aW9uLFxuICAgICAgcG9vbEtleUhhc2g6IHBvb2xSZWdpc3RyYXRpb24hLnBvb2xfcGFyYW1zKCkub3BlcmF0b3IoKS50b19oZXgoKSxcbiAgICAgIHZyZktleUhhc2g6IHBvb2xSZWdpc3RyYXRpb24hLnBvb2xfcGFyYW1zKCkudnJmX2tleWhhc2goKS50b19oZXgoKSxcbiAgICAgIHBsZWRnZTogcG9vbFJlZ2lzdHJhdGlvbiEucG9vbF9wYXJhbXMoKS5wbGVkZ2UoKS50b19zdHIoKSxcbiAgICAgIGNvc3Q6IHBvb2xSZWdpc3RyYXRpb24hLnBvb2xfcGFyYW1zKCkuY29zdCgpLnRvX3N0cigpLFxuICAgICAgbWFyZ2luTnVtZXJhdG9yOiBwb29sUmVnaXN0cmF0aW9uIS5wb29sX3BhcmFtcygpLm1hcmdpbigpLm51bWVyYXRvcigpLnRvX3N0cigpLFxuICAgICAgbWFyZ2luRGVub21pbmF0b3I6IHBvb2xSZWdpc3RyYXRpb24hLnBvb2xfcGFyYW1zKCkubWFyZ2luKCkuZGVub21pbmF0b3IoKS50b19zdHIoKSxcbiAgICAgIHJld2FyZEFjY291bnQ6IHJld2FyZEFjY291bnQudG9fYWRkcmVzcygpLnRvX2JlY2gzMigpLFxuICAgICAgcG9vbE93bmVyczogb3duZXJzLFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogU2V0IHRoZSB0cmFuc2FjdGlvbiB0eXBlLlxuICAgKlxuICAgKiBAcGFyYW0ge1RyYW5zYWN0aW9uVHlwZX0gdHJhbnNhY3Rpb25UeXBlIFRoZSB0cmFuc2FjdGlvbiB0eXBlIHRvIGJlIHNldC5cbiAgICovXG4gIHNldFRyYW5zYWN0aW9uVHlwZSh0cmFuc2FjdGlvblR5cGU6IFRyYW5zYWN0aW9uVHlwZSk6IHZvaWQge1xuICAgIHRoaXMuX3R5cGUgPSB0cmFuc2FjdGlvblR5cGU7XG4gIH1cblxuICAvKiogQGluaGVyaXRkb2MgKi9cbiAgZXhwbGFpblRyYW5zYWN0aW9uKCk6IHtcbiAgICBvdXRwdXRzOiB7IGFtb3VudDogc3RyaW5nOyBhZGRyZXNzOiBzdHJpbmcgfVtdO1xuICAgIGNlcnRpZmljYXRlczogQ2VydFtdO1xuICAgIGNoYW5nZU91dHB1dHM6IHN0cmluZ1tdO1xuICAgIG91dHB1dEFtb3VudDogc3RyaW5nO1xuICAgIGZlZTogeyBmZWU6IHN0cmluZyB9O1xuICAgIGRpc3BsYXlPcmRlcjogc3RyaW5nW107XG4gICAgaWQ6IHN0cmluZztcbiAgICBjaGFuZ2VBbW91bnQ6IHN0cmluZztcbiAgICB0eXBlOiBzdHJpbmc7XG4gICAgd2l0aGRyYXdhbHM6IFdpdGhkcmF3YWxbXTtcbiAgICBwbGVkZ2VEZXRhaWxzPzogUGxlZGdlRGV0YWlscztcbiAgfSB7XG4gICAgY29uc3QgdHhKc29uID0gdGhpcy50b0pzb24oKTtcbiAgICBjb25zdCBkaXNwbGF5T3JkZXIgPSBbJ2lkJywgJ291dHB1dEFtb3VudCcsICdjaGFuZ2VBbW91bnQnLCAnb3V0cHV0cycsICdjaGFuZ2VPdXRwdXRzJywgJ2ZlZScsICd0eXBlJ107XG4gICAgY29uc3QgYW1vdW50ID0gdHhKc29uLm91dHB1dHMubWFwKChvKSA9PiAoeyBhbW91bnQ6IEJpZ0ludChvLmFtb3VudCkgfSkpO1xuICAgIGNvbnN0IG91dHB1dEFtb3VudCA9IGFtb3VudC5yZWR1Y2UoKHAsIG4pID0+IHAgKyBCaWdJbnQobi5hbW91bnQpLCBCaWdJbnQoJzAnKSkudG9TdHJpbmcoKTtcbiAgICBjb25zdCB0eXBlID1cbiAgICAgIHRoaXMuX3R5cGUgPT09IFRyYW5zYWN0aW9uVHlwZS5TZW5kXG4gICAgICAgID8gJ1RyYW5zZmVyJ1xuICAgICAgICA6IHRoaXMuX3R5cGUgPT09IFRyYW5zYWN0aW9uVHlwZS5TdGFraW5nQWN0aXZhdGVcbiAgICAgICAgPyAnU3Rha2luZ0FjdGl2YXRlJ1xuICAgICAgICA6IHRoaXMuX3R5cGUgPT09IFRyYW5zYWN0aW9uVHlwZS5TdGFraW5nV2l0aGRyYXdcbiAgICAgICAgPyAnU3Rha2luZ1dpdGhkcmF3J1xuICAgICAgICA6IHRoaXMuX3R5cGUgPT09IFRyYW5zYWN0aW9uVHlwZS5TdGFraW5nRGVhY3RpdmF0ZVxuICAgICAgICA/ICdTdGFraW5nRGVhY3RpdmF0ZSdcbiAgICAgICAgOiB0aGlzLl90eXBlID09PSBUcmFuc2FjdGlvblR5cGUuU3Rha2luZ1BsZWRnZVxuICAgICAgICA/ICdTdGFraW5nUGxlZGdlJ1xuICAgICAgICA6IHRoaXMuX3R5cGUgPT09IFRyYW5zYWN0aW9uVHlwZS5Wb3RlRGVsZWdhdGlvblxuICAgICAgICA/ICdWb3RlRGVsZWdhdGlvbidcbiAgICAgICAgOiAndW5kZWZpbmVkJztcbiAgICByZXR1cm4ge1xuICAgICAgZGlzcGxheU9yZGVyLFxuICAgICAgaWQ6IHR4SnNvbi5pZCxcbiAgICAgIG91dHB1dHM6IHR4SnNvbi5vdXRwdXRzLm1hcCgobykgPT4gKHsgYWRkcmVzczogby5hZGRyZXNzLCBhbW91bnQ6IG8uYW1vdW50IH0pKSxcbiAgICAgIG91dHB1dEFtb3VudDogb3V0cHV0QW1vdW50LFxuICAgICAgY2hhbmdlT3V0cHV0czogW10sXG4gICAgICBjaGFuZ2VBbW91bnQ6ICcwJyxcbiAgICAgIGZlZTogeyBmZWU6IHRoaXMuX2ZlZSB9LFxuICAgICAgdHlwZSxcbiAgICAgIGNlcnRpZmljYXRlczogdHhKc29uLmNlcnRzLFxuICAgICAgd2l0aGRyYXdhbHM6IHR4SnNvbi53aXRoZHJhd2FscyxcbiAgICAgIHBsZWRnZURldGFpbHM6IHRoaXMuX3BsZWRnZURldGFpbHMsXG4gICAgfTtcbiAgfVxuXG4gIGdldFBsZWRnZURldGFpbHMoKTogUGxlZGdlRGV0YWlscyB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuX3BsZWRnZURldGFpbHM7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRyYW5zYWN0aW9uIGZlZVxuICAgKi9cbiAgZ2V0IGdldEZlZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl9mZWU7XG4gIH1cblxuICAvKipcbiAgICogU2V0IHRyYW5zYWN0aW9uIGZlZVxuICAgKlxuICAgKiBAcGFyYW0gZmVlXG4gICAqL1xuICBmZWUoZmVlOiBzdHJpbmcpIHtcbiAgICB0aGlzLl9mZWUgPSBmZWU7XG4gIH1cbn1cbiJdfQ==
371
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNhY3Rpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL3RyYW5zYWN0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLG1EQU84QjtBQUM5QixzRkFBd0U7QUFDeEUsdUNBQW9DO0FBRXBDLG9EQUErQjtBQXVCL0IsSUFBWSxRQU1YO0FBTkQsV0FBWSxRQUFRO0lBQ2xCLHVFQUFvQixDQUFBO0lBQ3BCLG1FQUFrQixDQUFBO0lBQ2xCLDJFQUFzQixDQUFBO0lBQ3RCLHlFQUFxQixDQUFBO0lBQ3JCLDJEQUFjLENBQUE7QUFDaEIsQ0FBQyxFQU5XLFFBQVEsd0JBQVIsUUFBUSxRQU1uQjtBQWdERCxNQUFhLFdBQVksU0FBUSwwQkFBZTtJQUs5QyxZQUFZLFVBQWdDO1FBQzFDLEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUNwQixDQUFDO0lBRUQsSUFBSSxXQUFXO1FBQ2IsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDO0lBQzNCLENBQUM7SUFFRCxJQUFJLFdBQVcsQ0FBQyxFQUEyQjtRQUN6QyxJQUFJLENBQUMsWUFBWSxHQUFHLEVBQUUsQ0FBQztRQUN2QixJQUFJLENBQUMsR0FBRyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLGdCQUFnQixDQUFDLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzdGLENBQUM7SUFFRCxrQkFBa0I7SUFDbEIsT0FBTyxDQUFDLEdBQVk7UUFDbEIsSUFBSSxDQUFDO1lBQ0gsSUFBSSxpQkFBTyxDQUFDLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDO1lBQzlCLE9BQU8sSUFBSSxDQUFDO1FBQ2QsQ0FBQztRQUFDLE1BQU0sQ0FBQztZQUNQLE9BQU8s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QU0sRUFBRSxDQUFDLENBQUM7WUFDOUUsWUFBWSxFQUFFLFlBQVk7WUFDMUIsYUFBYSxFQUFFLEVBQUU7WUFDakIsWUFBWSxFQUFFLEdBQUc7WUFDakIsR0FBRyxFQUFFLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQyxJQUFJLEVBQUU7WUFDdkIsSUFBSTtZQUNKLFlBQVksRUFBRSxNQUFNLENBQUMsS0FBSztZQUMxQixXQUFXLEVBQUUsTUFBTSxDQUFDLFdBQVc7WUFDL0IsYUFBYSxFQUFFLElBQUksQ0FBQyxjQUFjO1NBQ25DLENBQUM7SUFDSixDQUFDO0lBRUQsZ0JBQWdCO1FBQ2QsT0FBTyxJQUFJLENBQUMsY0FBYyxDQUFDO0lBQzdCLENBQUM7SUFFRDs7T0FFRztJQUNILElBQUksTUFBTTtRQUNSLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQztJQUNuQixDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILEdBQUcsQ0FBQyxHQUFXO1FBQ2IsSUFBSSxDQUFDLElBQUksR0FBRyxHQUFHLENBQUM7SUFDbEIsQ0FBQztDQUNGO0FBdFdELGtDQXNXQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIEJhc2VLZXksXG4gIEJhc2VUcmFuc2FjdGlvbixcbiAgRW50cnksXG4gIEludmFsaWRUcmFuc2FjdGlvbkVycm9yLFxuICBOb2RlRW52aXJvbm1lbnRFcnJvcixcbiAgVHJhbnNhY3Rpb25UeXBlLFxufSBmcm9tICdAYml0Z28tYmV0YS9zZGstY29yZSc7XG5pbXBvcnQgKiBhcyBDYXJkYW5vV2FzbSBmcm9tICdAZW11cmdvL2NhcmRhbm8tc2VyaWFsaXphdGlvbi1saWItbm9kZWpzJztcbmltcG9ydCB7IEtleVBhaXIgfSBmcm9tICcuL2tleVBhaXInO1xuaW1wb3J0IHsgQmFzZUNvaW4gYXMgQ29pbkNvbmZpZyB9IGZyb20gJ0BiaXRnby1iZXRhL3N0YXRpY3MnO1xuaW1wb3J0IGFkYVV0aWxzIGZyb20gJy4vdXRpbHMnO1xuXG5leHBvcnQgaW50ZXJmYWNlIFRyYW5zYWN0aW9uSW5wdXQge1xuICB0cmFuc2FjdGlvbl9pZDogc3RyaW5nO1xuICB0cmFuc2FjdGlvbl9pbmRleDogbnVtYmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEFzc2V0IHtcbiAgcG9saWN5X2lkOiBzdHJpbmc7XG4gIGFzc2V0X25hbWU6IHN0cmluZztcbiAgcXVhbnRpdHk6IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBUcmFuc2FjdGlvbk91dHB1dCB7XG4gIGFkZHJlc3M6IHN0cmluZztcbiAgYW1vdW50OiBzdHJpbmc7XG4gIG11bHRpQXNzZXRzPzogQ2FyZGFub1dhc20uTXVsdGlBc3NldDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBXaXRuZXNzIHtcbiAgcHVibGljS2V5OiBzdHJpbmc7XG4gIHNpZ25hdHVyZTogc3RyaW5nO1xufVxuZXhwb3J0IGVudW0gQ2VydFR5cGUge1xuICBTdGFrZUtleVJlZ2lzdHJhdGlvbixcbiAgU3Rha2VLZXlEZWxlZ2F0aW9uLFxuICBTdGFrZUtleURlcmVnaXN0cmF0aW9uLFxuICBTdGFrZVBvb2xSZWdpc3RyYXRpb24sXG4gIFZvdGVEZWxlZ2F0aW9uLFxufVxuXG5leHBvcnQgaW50ZXJmYWNlIENlcnQge1xuICB0eXBlOiBDZXJ0VHlwZTtcbiAgc3Rha2VDcmVkZW50aWFsSGFzaD86IHN0cmluZztcbiAgcG9vbEtleUhhc2g/OiBzdHJpbmc7XG4gIGRSZXBJZD86IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBXaXRoZHJhd2FsIHtcbiAgc3Rha2VBZGRyZXNzOiBzdHJpbmc7XG4gIHZhbHVlOiBzdHJpbmc7XG59XG5cbmV4cG9ydCB0eXBlIFN0YWtlS2V5UmVnaXN0cmF0aW9uQ2VydCA9IENlcnQ7XG5cbmV4cG9ydCB0eXBlIFN0YWtlS2V5RGVsZWdhdGlvbkNlcnQgPSBDZXJ0O1xuXG5leHBvcnQgaW50ZXJmYWNlIFN0YWtlUG9vbFJlZ2lzdHJhdGlvbkNlcnQgZXh0ZW5kcyBDZXJ0IHtcbiAgdnJmS2V5SGFzaDogc3RyaW5nO1xuICBwbGVkZ2U6IHN0cmluZztcbiAgY29zdDogc3RyaW5nO1xuICBtYXJnaW5OdW1lcmF0b3I6IHN0cmluZztcbiAgbWFyZ2luRGVub21pbmF0b3I6IHN0cmluZztcbiAgcmV3YXJkQWNjb3VudDogc3RyaW5nO1xuICBwb29sT3duZXJzOiBzdHJpbmdbXTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBQbGVkZ2VEZXRhaWxzIHtcbiAgc3Rha2VLZXlSZWdpc3RyYXRpb24/OiBTdGFrZUtleVJlZ2lzdHJhdGlvbkNlcnQ7XG4gIHN0YWtlS2V5RGVsZWdhdGlvbj86IFN0YWtlS2V5RGVsZWdhdGlvbkNlcnQ7XG4gIHN0YWtlUG9vbFJlZ2lzdHJhdGlvbjogU3Rha2VQb29sUmVnaXN0cmF0aW9uQ2VydDtcbn1cblxuLyoqXG4gKiBUaGUgdHJhbnNhY3Rpb24gZGF0YSByZXR1cm5lZCBmcm9tIHRoZSB0b0pzb24oKSBmdW5jdGlvbiBvZiBhIHRyYW5zYWN0aW9uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVHhEYXRhIHtcbiAgaWQ6IHN0cmluZztcbiAgdHlwZTogVHJhbnNhY3Rpb25UeXBlO1xuICBpbnB1dHM6IFRyYW5zYWN0aW9uSW5wdXRbXTtcbiAgb3V0cHV0czogVHJhbnNhY3Rpb25PdXRwdXRbXTtcbiAgd2l0bmVzc2VzOiBXaXRuZXNzW107XG4gIGNlcnRzOiBDZXJ0W107XG4gIHdpdGhkcmF3YWxzOiBXaXRoZHJhd2FsW107XG4gIHBsZWRnZURldGFpbHM/OiBQbGVkZ2VEZXRhaWxzO1xufVxuXG5leHBvcnQgY2xhc3MgVHJhbnNhY3Rpb24gZXh0ZW5kcyBCYXNlVHJhbnNhY3Rpb24ge1xuICBwcml2YXRlIF90cmFuc2FjdGlvbjogQ2FyZGFub1dhc20uVHJhbnNhY3Rpb247XG4gIHByaXZhdGUgX2ZlZTogc3RyaW5nO1xuICBwcml2YXRlIF9wbGVkZ2VEZXRhaWxzPzogUGxlZGdlRGV0YWlscztcblxuICBjb25zdHJ1Y3Rvcihjb2luQ29uZmlnOiBSZWFkb25seTxDb2luQ29uZmlnPikge1xuICAgIHN1cGVyKGNvaW5Db25maWcpO1xuICB9XG5cbiAgZ2V0IHRyYW5zYWN0aW9uKCk6IENhcmRhbm9XYXNtLlRyYW5zYWN0aW9uIHtcbiAgICByZXR1cm4gdGhpcy5fdHJhbnNhY3Rpb247XG4gIH1cblxuICBzZXQgdHJhbnNhY3Rpb24odHg6IENhcmRhbm9XYXNtLlRyYW5zYWN0aW9uKSB7XG4gICAgdGhpcy5fdHJhbnNhY3Rpb24gPSB0eDtcbiAgICB0aGlzLl9pZCA9IEJ1ZmZlci5mcm9tKENhcmRhbm9XYXNtLmhhc2hfdHJhbnNhY3Rpb24odHguYm9keSgpKS50b19ieXRlcygpKS50b1N0cmluZygnaGV4Jyk7XG4gIH1cblxuICAvKiogQGluaGVyaXRkb2MgKi9cbiAgY2FuU2lnbihrZXk6IEJhc2VLZXkpOiBib29sZWFuIHtcbiAgICB0cnkge1xuICAgICAgbmV3IEtleVBhaXIoeyBwcnY6IGtleS5rZXkgfSk7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICB0b0Jyb2FkY2FzdEZvcm1hdCgpOiBzdHJpbmcge1xuICAgIGlmICghdGhpcy5fdHJhbnNhY3Rpb24pIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkVHJhbnNhY3Rpb25FcnJvcignRW1wdHkgdHJhbnNhY3Rpb24gZGF0YScpO1xuICAgIH1cbiAgICByZXR1cm4gQnVmZmVyLmZyb20odGhpcy5fdHJhbnNhY3Rpb24udG9fYnl0ZXMoKSkudG9TdHJpbmcoJ2hleCcpO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0ZG9jICovXG4gIHRvSnNvbigpOiBUeERhdGEge1xuICAgIGlmICghdGhpcy5fdHJhbnNhY3Rpb24pIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkVHJhbnNhY3Rpb25FcnJvcignRW1wdHkgdHJhbnNhY3Rpb24gZGF0YScpO1xuICAgIH1cblxuICAgIGNvbnN0IHJlc3VsdDogVHhEYXRhID0ge1xuICAgICAgaWQ6IHRoaXMuaWQsXG4gICAgICB0eXBlOiB0aGlzLl90eXBlIGFzIFRyYW5zYWN0aW9uVHlwZSxcbiAgICAgIGlucHV0czogW10sXG4gICAgICBvdXRwdXRzOiBbXSxcbiAgICAgIHdpdG5lc3NlczogW10sXG4gICAgICBjZXJ0czogW10sXG4gICAgICB3aXRoZHJhd2FsczogW10sXG4gICAgfTtcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5fdHJhbnNhY3Rpb24uYm9keSgpLmlucHV0cygpLmxlbigpOyBpKyspIHtcbiAgICAgIGNvbnN0IGlucHV0ID0gdGhpcy5fdHJhbnNhY3Rpb24uYm9keSgpLmlucHV0cygpLmdldChpKTtcbiAgICAgIHJlc3VsdC5pbnB1dHMucHVzaCh7XG4gICAgICAgIHRyYW5zYWN0aW9uX2lkOiBCdWZmZXIuZnJvbShpbnB1dC50cmFuc2FjdGlvbl9pZCgpLnRvX2J5dGVzKCkpLnRvU3RyaW5nKCdoZXgnKSxcbiAgICAgICAgdHJhbnNhY3Rpb25faW5kZXg6IGlucHV0LmluZGV4KCksXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuX3RyYW5zYWN0aW9uLmJvZHkoKS5vdXRwdXRzKCkubGVuKCk7IGkrKykge1xuICAgICAgY29uc3Qgb3V0cHV0ID0gdGhpcy5fdHJhbnNhY3Rpb24uYm9keSgpLm91dHB1dHMoKS5nZXQoaSk7XG4gICAgICByZXN1bHQub3V0cHV0cy5wdXNoKHtcbiAgICAgICAgYWRkcmVzczogYWRhVXRpbHMuZ2V0QWRkcmVzc1N0cmluZyhvdXRwdXQuYWRkcmVzcygpKSxcbiAgICAgICAgYW1vdW50OiBvdXRwdXQuYW1vdW50KCkuY29pbigpLnRvX3N0cigpLFxuICAgICAgICBtdWx0aUFzc2V0czogb3V0cHV0LmFtb3VudCgpLm11bHRpYXNzZXQoKSB8fCB1bmRlZmluZWQsXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5fdHJhbnNhY3Rpb24uYm9keSgpLmNlcnRzKCkpIHtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5fdHJhbnNhY3Rpb24uYm9keSgpLmNlcnRzKCkhLmxlbigpOyBpKyspIHtcbiAgICAgICAgY29uc3QgY2VydCA9IHRoaXMuX3RyYW5zYWN0aW9uLmJvZHkoKS5jZXJ0cygpIS5nZXQoaSk7XG4gICAgICAgIGlmIChjZXJ0LmFzX3N0YWtlX3JlZ2lzdHJhdGlvbigpICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBjb25zdCBzdGFrZVJlZ2lzdHJhdGlvbiA9IGNlcnQuYXNfc3Rha2VfcmVnaXN0cmF0aW9uKCkgYXMgQ2FyZGFub1dhc20uU3Rha2VSZWdpc3RyYXRpb247XG4gICAgICAgICAgcmVzdWx0LmNlcnRzLnB1c2goe1xuICAgICAgICAgICAgdHlwZTogQ2VydFR5cGUuU3Rha2VLZXlSZWdpc3RyYXRpb24sXG4gICAgICAgICAgICBzdGFrZUNyZWRlbnRpYWxIYXNoOiBCdWZmZXIuZnJvbShzdGFrZVJlZ2lzdHJhdGlvbi5zdGFrZV9jcmVkZW50aWFsKCkudG9fYnl0ZXMoKSkudG9TdHJpbmcoJ2hleCcpLFxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjZXJ0LmFzX3N0YWtlX2RlcmVnaXN0cmF0aW9uKCkgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIGNvbnN0IHN0YWtlRGVyZWdpc3RyYXRpb24gPSBjZXJ0LmFzX3N0YWtlX2RlcmVnaXN0cmF0aW9uKCkgYXMgQ2FyZGFub1dhc20uU3Rha2VEZXJlZ2lzdHJhdGlvbjtcbiAgICAgICAgICByZXN1bHQuY2VydHMucHVzaCh7XG4gICAgICAgICAgICB0eXBlOiBDZXJ0VHlwZS5TdGFrZUtleURlcmVnaXN0cmF0aW9uLFxuICAgICAgICAgICAgc3Rha2VDcmVkZW50aWFsSGFzaDogQnVmZmVyLmZyb20oc3Rha2VEZXJlZ2lzdHJhdGlvbi5zdGFrZV9jcmVkZW50aWFsKCkudG9fYnl0ZXMoKSkudG9TdHJpbmcoJ2hleCcpLFxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjZXJ0LmFzX3N0YWtlX2RlbGVnYXRpb24oKSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgY29uc3Qgc3Rha2VEZWxlZ2F0aW9uID0gY2VydC5hc19zdGFrZV9kZWxlZ2F0aW9uKCkgYXMgQ2FyZGFub1dhc20uU3Rha2VEZWxlZ2F0aW9uO1xuICAgICAgICAgIHJlc3VsdC5jZXJ0cy5wdXNoKHtcbiAgICAgICAgICAgIHR5cGU6IENlcnRUeXBlLlN0YWtlS2V5RGVsZWdhdGlvbixcbiAgICAgICAgICAgIHN0YWtlQ3JlZGVudGlhbEhhc2g6IEJ1ZmZlci5mcm9tKHN0YWtlRGVsZWdhdGlvbi5zdGFrZV9jcmVkZW50aWFsKCkudG9fYnl0ZXMoKSkudG9TdHJpbmcoJ2hleCcpLFxuICAgICAgICAgICAgcG9vbEtleUhhc2g6IEJ1ZmZlci5mcm9tKHN0YWtlRGVsZWdhdGlvbi5wb29sX2tleWhhc2goKS50b19ieXRlcygpKS50b1N0cmluZygnaGV4JyksXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNlcnQuYXNfcG9vbF9yZWdpc3RyYXRpb24oKSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgY29uc3Qgc3Rha2VQb29sUmVnaXN0cmF0aW9uID0gY2VydC5hc19wb29sX3JlZ2lzdHJhdGlvbigpIGFzIENhcmRhbm9XYXNtLlBvb2xSZWdpc3RyYXRpb247XG4gICAgICAgICAgcmVzdWx0LmNlcnRzLnB1c2goe1xuICAgICAgICAgICAgdHlwZTogQ2VydFR5cGUuU3Rha2VQb29sUmVnaXN0cmF0aW9uLFxuICAgICAgICAgICAgcG9vbEtleUhhc2g6IEJ1ZmZlci5mcm9tKHN0YWtlUG9vbFJlZ2lzdHJhdGlvbi5wb29sX3BhcmFtcygpLm9wZXJhdG9yKCkudG9fYnl0ZXMoKSkudG9TdHJpbmcoJ2hleCcpLFxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjZXJ0LmFzX3ZvdGVfZGVsZWdhdGlvbigpICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBjb25zdCB2b3RlRGVsZWdhdGlvbiA9IGNlcnQuYXNfdm90ZV9kZWxlZ2F0aW9uKCkgYXMgQ2FyZGFub1dhc20uVm90ZURlbGVnYXRpb247XG4gICAgICAgICAgcmVzdWx0LmNlcnRzLnB1c2goe1xuICAgICAgICAgICAgdHlwZTogQ2VydFR5cGUuVm90ZURlbGVnYXRpb24sXG4gICAgICAgICAgICBzdGFrZUNyZWRlbnRpYWxIYXNoOiBCdWZmZXIuZnJvbSh2b3RlRGVsZWdhdGlvbi5zdGFrZV9jcmVkZW50aWFsKCkudG9fYnl0ZXMoKSkudG9TdHJpbmcoJ2hleCcpLFxuICAgICAgICAgICAgZFJlcElkOiBhZGFVdGlscy5nZXREUmVwSWRGcm9tRFJlcCh2b3RlRGVsZWdhdGlvbi5kcmVwKCkpLFxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmVzdWx0LnBsZWRnZURldGFpbHMgPSB0aGlzLl9wbGVkZ2VEZXRhaWxzO1xuXG4gICAgaWYgKHRoaXMuX3RyYW5zYWN0aW9uLmJvZHkoKS53aXRoZHJhd2FscygpKSB7XG4gICAgICBjb25zdCB3aXRoZHJhd2FscyA9IHRoaXMuX3RyYW5zYWN0aW9uLmJvZHkoKS53aXRoZHJhd2FscygpIGFzIENhcmRhbm9XYXNtLldpdGhkcmF3YWxzO1xuICAgICAgY29uc3Qga2V5cyA9IHdpdGhkcmF3YWxzLmtleXMoKTtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwga2V5cy5sZW4oKTsgaSsrKSB7XG4gICAgICAgIGNvbnN0IHJld2FyZEFkZHJlc3MgPSBrZXlzLmdldChpKTtcbiAgICAgICAgY29uc3QgcmV3YXJkID0gd2l0aGRyYXdhbHMuZ2V0KHJld2FyZEFkZHJlc3MpIGFzIENhcmRhbm9XYXNtLkJpZ051bTtcbiAgICAgICAgcmVzdWx0LndpdGhkcmF3YWxzLnB1c2goe1xuICAgICAgICAgIHN0YWtlQWRkcmVzczogcmV3YXJkQWRkcmVzcy50b19hZGRyZXNzKCkudG9fYnl0ZXMoKS50b1N0cmluZygpLFxuICAgICAgICAgIHZhbHVlOiByZXdhcmQudG9fc3RyKCksXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0aGlzLl90cmFuc2FjdGlvbi53aXRuZXNzX3NldCgpLnZrZXlzKCkgIT09IHVuZGVmaW5lZCkge1xuICAgICAgY29uc3QgdmtleXMgPSB0aGlzLl90cmFuc2FjdGlvbi53aXRuZXNzX3NldCgpLnZrZXlzKCkgYXMgQ2FyZGFub1dhc20uVmtleXdpdG5lc3NlcztcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdmtleXMubGVuKCk7IGkrKykge1xuICAgICAgICBjb25zdCB2a2V5ID0gKHRoaXMuX3RyYW5zYWN0aW9uLndpdG5lc3Nfc2V0KCkudmtleXMoKSBhcyBDYXJkYW5vV2FzbS5Wa2V5d2l0bmVzc2VzKS5nZXQoaSk7XG4gICAgICAgIHJlc3VsdC53aXRuZXNzZXMucHVzaCh7XG4gICAgICAgICAgcHVibGljS2V5OiB2a2V5Py52a2V5KCkucHVibGljX2tleSgpLnRvX2hleCgpLFxuICAgICAgICAgIHNpZ25hdHVyZTogdmtleT8uc2lnbmF0dXJlKCkudG9faGV4KCksXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgLyoqXG4gICAqIEJ1aWxkIGlucHV0IGFuZCBvdXRwdXQgZmllbGQgZm9yIHRoaXMgdHJhbnNhY3Rpb25cbiAgICpcbiAgICovXG4gIGxvYWRJbnB1dHNBbmRPdXRwdXRzKCk6IHZvaWQge1xuICAgIGNvbnN0IG91dHB1dHM6IEVudHJ5W10gPSBbXTtcbiAgICBjb25zdCBpbnB1dHM6IEVudHJ5W10gPSBbXTtcblxuICAgIGNvbnN0IHR4X291dHB1dHMgPSB0aGlzLl90cmFuc2FjdGlvbi5ib2R5KCkub3V0cHV0cygpO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdHhfb3V0cHV0cy5sZW4oKTsgaSsrKSB7XG4gICAgICBjb25zdCBvdXRwdXQgPSB0eF9vdXRwdXRzLmdldChpKTtcbiAgICAgIG91dHB1dHMucHVzaCh7XG4gICAgICAgIGFkZHJlc3M6IGFkYVV0aWxzLmdldEFkZHJlc3NTdHJpbmcob3V0cHV0LmFkZHJlc3MoKSksXG4gICAgICAgIHZhbHVlOiBvdXRwdXQuYW1vdW50KCkuY29pbigpLnRvX3N0cigpLFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgdGhpcy5fb3V0cHV0cyA9IG91dHB1dHM7XG4gICAgdGhpcy5faW5wdXRzID0gaW5wdXRzO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0ZG9jICovXG4gIGdldCBzaWduYWJsZVBheWxvYWQoKTogQnVmZmVyIHtcbiAgICByZXR1cm4gQnVmZmVyLmZyb20oQ2FyZGFub1dhc20uaGFzaF90cmFuc2FjdGlvbih0aGlzLl90cmFuc2FjdGlvbi5ib2R5KCkpLnRvX2J5dGVzKCkpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldHMgdGhpcyB0cmFuc2FjdGlvbiBwYXlsb2FkXG4gICAqXG4gICAqIEBwYXJhbSByYXdUeFxuICAgKi9cbiAgZnJvbVJhd1RyYW5zYWN0aW9uKHJhd1R4OiBzdHJpbmcpOiB2b2lkIHtcbiAgICBpZiAoQ2FyZGFub1dhc20uVHJhbnNhY3Rpb24gPT09IHVuZGVmaW5lZCkge1xuICAgICAgLy8gYSB0ZW1wIGZpeCB1bnRpbCB3ZSBzb2x2ZSBpbXBvcnQgcHJvYmxlbSBpbiB3ZWJwYWNrXG4gICAgICB0aHJvdyBuZXcgTm9kZUVudmlyb25tZW50RXJyb3IoJ3VuYWJsZSB0byBsb2FkIGNhcmRhbm8gc2VyaWFsaXphdGlvbiBsaWJyYXJ5Jyk7XG4gICAgfVxuICAgIGNvbnN0IEhFWF9SRUdFWCA9IC9eWzAtOWEtZkEtRl0rJC87XG4gICAgY29uc3QgYnVmZmVyUmF3VHJhbnNhY3Rpb24gPSBIRVhfUkVHRVgudGVzdChyYXdUeCkgPyBCdWZmZXIuZnJvbShyYXdUeCwgJ2hleCcpIDogQnVmZmVyLmZyb20ocmF3VHgsICdiYXNlNjQnKTtcbiAgICB0cnkge1xuICAgICAgY29uc3QgdHhuID0gQ2FyZGFub1dhc20uVHJhbnNhY3Rpb24uZnJvbV9ieXRlcyhidWZmZXJSYXdUcmFuc2FjdGlvbik7XG4gICAgICB0aGlzLl90cmFuc2FjdGlvbiA9IHR4bjtcbiAgICAgIHRoaXMuX2lkID0gQnVmZmVyLmZyb20oQ2FyZGFub1dhc20uaGFzaF90cmFuc2FjdGlvbih0eG4uYm9keSgpKS50b19ieXRlcygpKS50b1N0cmluZygnaGV4Jyk7XG4gICAgICB0aGlzLl90eXBlID0gVHJhbnNhY3Rpb25UeXBlLlNlbmQ7XG4gICAgICBpZiAodGhpcy5fdHJhbnNhY3Rpb24uYm9keSgpLmNlcnRzKCkpIHtcbiAgICAgICAgY29uc3QgY2VydHM6IENhcmRhbm9XYXNtLkNlcnRpZmljYXRlW10gPSBbXTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLl90cmFuc2FjdGlvbi5ib2R5KCkuY2VydHMoKSEubGVuKCk7IGkrKykge1xuICAgICAgICAgIGNvbnN0IGNlcnQgPSB0aGlzLl90cmFuc2FjdGlvbi5ib2R5KCkuY2VydHMoKSEuZ2V0KGkpO1xuICAgICAgICAgIGNlcnRzLnB1c2goY2VydCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoY2VydHMuc29tZSgoYykgPT4gYy5hc19wb29sX3JlZ2lzdHJhdGlvbigpICE9PSB1bmRlZmluZWQpKSB7XG4gICAgICAgICAgdGhpcy5fdHlwZSA9IFRyYW5zYWN0aW9uVHlwZS5TdGFraW5nUGxlZGdlO1xuICAgICAgICAgIGNvbnN0IHN0YWtlS2V5UmVnaXN0cmF0aW9uID0gY2VydHMuZmluZCgoYykgPT4gYy5hc19zdGFrZV9yZWdpc3RyYXRpb24oKSAhPT0gdW5kZWZpbmVkKTtcbiAgICAgICAgICBjb25zdCBzdGFrZUtleURlbGVnYXRpb24gPSBjZXJ0cy5maW5kKChjKSA9PiBjLmFzX3N0YWtlX2RlbGVnYXRpb24oKSAhPT0gdW5kZWZpbmVkKTtcbiAgICAgICAgICBjb25zdCBzdGFrZVBvb2xSZWdpc3RyYXRpb24gPSBjZXJ0cy5maW5kKChjKSA9PiBjLmFzX3Bvb2xfcmVnaXN0cmF0aW9uKCkgIT09IHVuZGVmaW5lZCk7XG5cbiAgICAgICAgICB0aGlzLl9wbGVkZ2VEZXRhaWxzID0ge1xuICAgICAgICAgICAgc3Rha2VLZXlSZWdpc3RyYXRpb246IHRoaXMubG9hZFN0YWtlS2V5UmVnaXN0cmF0aW9uKHN0YWtlS2V5UmVnaXN0cmF0aW9uKSxcbiAgICAgICAgICAgIHN0YWtlS2V5RGVsZWdhdGlvbjogdGhpcy5sb2FkU3Rha2VLZXlEZWxlZ2F0aW9uKHN0YWtlS2V5RGVsZWdhdGlvbiksXG4gICAgICAgICAgICBzdGFrZVBvb2xSZWdpc3RyYXRpb246IHRoaXMubG9hZFN0YWtlUG9vbFJlZ2lzdHJhdGlvbihzdGFrZVBvb2xSZWdpc3RyYXRpb24hKSxcbiAgICAgICAgICB9O1xuICAgICAgICB9IGVsc2UgaWYgKGNlcnRzLnNvbWUoKGMpID0+IGMuYXNfc3Rha2VfcmVnaXN0cmF0aW9uKCkgIT09IHVuZGVmaW5lZCkpIHtcbiAgICAgICAgICB0aGlzLl90eXBlID0gVHJhbnNhY3Rpb25UeXBlLlN0YWtpbmdBY3RpdmF0ZTtcbiAgICAgICAgfSBlbHNlIGlmIChjZXJ0cy5zb21lKChjKSA9PiBjLmFzX3N0YWtlX2RlcmVnaXN0cmF0aW9uKCkgIT09IHVuZGVmaW5lZCkpIHtcbiAgICAgICAgICB0aGlzLl90eXBlID0gVHJhbnNhY3Rpb25UeXBlLlN0YWtpbmdEZWFjdGl2YXRlO1xuICAgICAgICB9IGVsc2UgaWYgKGNlcnRzLnNvbWUoKGMpID0+IGMuYXNfdm90ZV9kZWxlZ2F0aW9uKCkgIT09IHVuZGVmaW5lZCkpIHtcbiAgICAgICAgICB0aGlzLl90eXBlID0gVHJhbnNhY3Rpb25UeXBlLlZvdGVEZWxlZ2F0aW9uO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5fdHJhbnNhY3Rpb24uYm9keSgpLndpdGhkcmF3YWxzKCkpIHtcbiAgICAgICAgdGhpcy5fdHlwZSA9IFRyYW5zYWN0aW9uVHlwZS5TdGFraW5nV2l0aGRyYXc7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuX2ZlZSA9IHR4bi5ib2R5KCkuZmVlKCkudG9fc3RyKCk7XG4gICAgICB0aGlzLmxvYWRJbnB1dHNBbmRPdXRwdXRzKCk7XG5cbiAgICAgIGlmICh0aGlzLl90cmFuc2FjdGlvbi53aXRuZXNzX3NldCgpLnZrZXlzKCkpIHtcbiAgICAgICAgY29uc3QgdmtleXMgPSB0aGlzLl90cmFuc2FjdGlvbi53aXRuZXNzX3NldCgpLnZrZXlzKCkhIGFzIENhcmRhbm9XYXNtLlZrZXl3aXRuZXNzZXM7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdmtleXMubGVuKCk7IGkrKykge1xuICAgICAgICAgIGNvbnN0IHZrZXkgPSB2a2V5cy5nZXQoaSk7XG4gICAgICAgICAgdGhpcy5fc2lnbmF0dXJlcy5wdXNoKHZrZXkuc2lnbmF0dXJlKCkudG9faGV4KCkpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRUcmFuc2FjdGlvbkVycm9yKCd1bmFibGUgdG8gYnVpbGQgdHJhbnNhY3Rpb24gZnJvbSByYXcnKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGxvYWRTdGFrZUtleVJlZ2lzdHJhdGlvbihcbiAgICBjZXJ0aWZpY2F0ZTogQ2FyZGFub1dhc20uQ2VydGlmaWNhdGUgfCB1bmRlZmluZWRcbiAgKTogU3Rha2VLZXlSZWdpc3RyYXRpb25DZXJ0IHwgdW5kZWZpbmVkIHtcbiAgICBpZiAoY2VydGlmaWNhdGUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgY29uc3Qgc3Rha2VSZWdpc3RyYXRpb24gPSBjZXJ0aWZpY2F0ZS5hc19zdGFrZV9yZWdpc3RyYXRpb24oKTtcbiAgICBpZiAoc3Rha2VSZWdpc3RyYXRpb24gIT09IHVuZGVmaW5lZCAmJiBzdGFrZVJlZ2lzdHJhdGlvbiEuc3Rha2VfY3JlZGVudGlhbCgpLnRvX2tleWhhc2goKSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICB0eXBlOiBDZXJ0VHlwZS5TdGFrZUtleVJlZ2lzdHJhdGlvbixcbiAgICAgICAgc3Rha2VDcmVkZW50aWFsSGFzaDogc3Rha2VSZWdpc3RyYXRpb24hLnN0YWtlX2NyZWRlbnRpYWwoKS50b19rZXloYXNoKCkhLnRvX2hleCgpLFxuICAgICAgfTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGxvYWRTdGFrZUtleURlbGVnYXRpb24oY2VydGlmaWNhdGU6IENhcmRhbm9XYXNtLkNlcnRpZmljYXRlIHwgdW5kZWZpbmVkKTogU3Rha2VLZXlEZWxlZ2F0aW9uQ2VydCB8IHVuZGVmaW5lZCB7XG4gICAgaWYgKGNlcnRpZmljYXRlID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIGNvbnN0IHN0YWtlRGVsZWdhdGlvbiA9IGNlcnRpZmljYXRlLmFzX3N0YWtlX2RlbGVnYXRpb24oKTtcbiAgICBpZiAoc3Rha2VEZWxlZ2F0aW9uICE9PSB1bmRlZmluZWQgJiYgc3Rha2VEZWxlZ2F0aW9uIS5zdGFrZV9jcmVkZW50aWFsKCkudG9fa2V5aGFzaCgpICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHR5cGU6IENlcnRUeXBlLlN0YWtlS2V5RGVsZWdhdGlvbixcbiAgICAgICAgc3Rha2VDcmVkZW50aWFsSGFzaDogc3Rha2VEZWxlZ2F0aW9uIS5zdGFrZV9jcmVkZW50aWFsKCkudG9fa2V5aGFzaCgpIS50b19oZXgoKSxcbiAgICAgICAgcG9vbEtleUhhc2g6IHN0YWtlRGVsZWdhdGlvbiEucG9vbF9rZXloYXNoKCkudG9faGV4KCksXG4gICAgICB9O1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgbG9hZFN0YWtlUG9vbFJlZ2lzdHJhdGlvbihjZXJ0aWZpY2F0ZTogQ2FyZGFub1dhc20uQ2VydGlmaWNhdGUpOiBTdGFrZVBvb2xSZWdpc3RyYXRpb25DZXJ0IHtcbiAgICBjb25zdCBwb29sUmVnaXN0cmF0aW9uID0gY2VydGlmaWNhdGUuYXNfcG9vbF9yZWdpc3RyYXRpb24oKTtcbiAgICBjb25zdCByZXdhcmRBY2NvdW50ID0gcG9vbFJlZ2lzdHJhdGlvbiEucG9vbF9wYXJhbXMoKS5yZXdhcmRfYWNjb3VudCgpO1xuICAgIGNvbnN0IG5ldHdvcmtJZCA9IHJld2FyZEFjY291bnQudG9fYWRkcmVzcygpLm5ldHdvcmtfaWQoKTtcbiAgICBjb25zdCBvd25lcnM6IHN0cmluZ1tdID0gW107XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwb29sUmVnaXN0cmF0aW9uIS5wb29sX3BhcmFtcygpLnBvb2xfb3duZXJzKCkubGVuKCk7IGkrKykge1xuICAgICAgY29uc3QgcG9vbE93bmVyID0gcG9vbFJlZ2lzdHJhdGlvbiEucG9vbF9wYXJhbXMoKS5wb29sX293bmVycygpLmdldChpKTtcbiAgICAgIGNvbnN0IG93bmVyU3Rha2VLZXkgPSBDYXJkYW5vV2FzbS5DcmVkZW50aWFsLmZyb21fa2V5aGFzaChwb29sT3duZXIpO1xuICAgICAgb3duZXJzLnB1c2goQ2FyZGFub1dhc20uUmV3YXJkQWRkcmVzcy5uZXcobmV0d29ya0lkLCBvd25lclN0YWtlS2V5KS50b19hZGRyZXNzKCkudG9fYmVjaDMyKCkpO1xuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogQ2VydFR5cGUuU3Rha2VQb29sUmVnaXN0cmF0aW9uLFxuICAgICAgcG9vbEtleUhhc2g6IHBvb2xSZWdpc3RyYXRpb24hLnBvb2xfcGFyYW1zKCkub3BlcmF0b3IoKS50b19oZXgoKSxcbiAgICAgIHZyZktleUhhc2g6IHBvb2xSZWdpc3RyYXRpb24hLnBvb2xfcGFyYW1zKCkudnJmX2tleWhhc2goKS50b19oZXgoKSxcbiAgICAgIHBsZWRnZTogcG9vbFJlZ2lzdHJhdGlvbiEucG9vbF9wYXJhbXMoKS5wbGVkZ2UoKS50b19zdHIoKSxcbiAgICAgIGNvc3Q6IHBvb2xSZWdpc3RyYXRpb24hLnBvb2xfcGFyYW1zKCkuY29zdCgpLnRvX3N0cigpLFxuICAgICAgbWFyZ2luTnVtZXJhdG9yOiBwb29sUmVnaXN0cmF0aW9uIS5wb29sX3BhcmFtcygpLm1hcmdpbigpLm51bWVyYXRvcigpLnRvX3N0cigpLFxuICAgICAgbWFyZ2luRGVub21pbmF0b3I6IHBvb2xSZWdpc3RyYXRpb24hLnBvb2xfcGFyYW1zKCkubWFyZ2luKCkuZGVub21pbmF0b3IoKS50b19zdHIoKSxcbiAgICAgIHJld2FyZEFjY291bnQ6IHJld2FyZEFjY291bnQudG9fYWRkcmVzcygpLnRvX2JlY2gzMigpLFxuICAgICAgcG9vbE93bmVyczogb3duZXJzLFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogU2V0IHRoZSB0cmFuc2FjdGlvbiB0eXBlLlxuICAgKlxuICAgKiBAcGFyYW0ge1RyYW5zYWN0aW9uVHlwZX0gdHJhbnNhY3Rpb25UeXBlIFRoZSB0cmFuc2FjdGlvbiB0eXBlIHRvIGJlIHNldC5cbiAgICovXG4gIHNldFRyYW5zYWN0aW9uVHlwZSh0cmFuc2FjdGlvblR5cGU6IFRyYW5zYWN0aW9uVHlwZSk6IHZvaWQge1xuICAgIHRoaXMuX3R5cGUgPSB0cmFuc2FjdGlvblR5cGU7XG4gIH1cblxuICAvKiogQGluaGVyaXRkb2MgKi9cbiAgZXhwbGFpblRyYW5zYWN0aW9uKCk6IHtcbiAgICBvdXRwdXRzOiB7IGFtb3VudDogc3RyaW5nOyBhZGRyZXNzOiBzdHJpbmcgfVtdO1xuICAgIGNlcnRpZmljYXRlczogQ2VydFtdO1xuICAgIGNoYW5nZU91dHB1dHM6IHN0cmluZ1tdO1xuICAgIG91dHB1dEFtb3VudDogc3RyaW5nO1xuICAgIGZlZTogeyBmZWU6IHN0cmluZyB9O1xuICAgIGRpc3BsYXlPcmRlcjogc3RyaW5nW107XG4gICAgaWQ6IHN0cmluZztcbiAgICBjaGFuZ2VBbW91bnQ6IHN0cmluZztcbiAgICB0eXBlOiBzdHJpbmc7XG4gICAgd2l0aGRyYXdhbHM6IFdpdGhkcmF3YWxbXTtcbiAgICBwbGVkZ2VEZXRhaWxzPzogUGxlZGdlRGV0YWlscztcbiAgfSB7XG4gICAgY29uc3QgdHhKc29uID0gdGhpcy50b0pzb24oKTtcbiAgICBjb25zdCBkaXNwbGF5T3JkZXIgPSBbJ2lkJywgJ291dHB1dEFtb3VudCcsICdjaGFuZ2VBbW91bnQnLCAnb3V0cHV0cycsICdjaGFuZ2VPdXRwdXRzJywgJ2ZlZScsICd0eXBlJ107XG4gICAgY29uc3QgYW1vdW50ID0gdHhKc29uLm91dHB1dHMubWFwKChvKSA9PiAoeyBhbW91bnQ6IEJpZ0ludChvLmFtb3VudCkgfSkpO1xuICAgIGNvbnN0IG91dHB1dEFtb3VudCA9IGFtb3VudC5yZWR1Y2UoKHAsIG4pID0+IHAgKyBCaWdJbnQobi5hbW91bnQpLCBCaWdJbnQoJzAnKSkudG9TdHJpbmcoKTtcbiAgICBjb25zdCB0eXBlID1cbiAgICAgIHRoaXMuX3R5cGUgPT09IFRyYW5zYWN0aW9uVHlwZS5TZW5kXG4gICAgICAgID8gJ1RyYW5zZmVyJ1xuICAgICAgICA6IHRoaXMuX3R5cGUgPT09IFRyYW5zYWN0aW9uVHlwZS5TdGFraW5nQWN0aXZhdGVcbiAgICAgICAgPyAnU3Rha2luZ0FjdGl2YXRlJ1xuICAgICAgICA6IHRoaXMuX3R5cGUgPT09IFRyYW5zYWN0aW9uVHlwZS5TdGFraW5nV2l0aGRyYXdcbiAgICAgICAgPyAnU3Rha2luZ1dpdGhkcmF3J1xuICAgICAgICA6IHRoaXMuX3R5cGUgPT09IFRyYW5zYWN0aW9uVHlwZS5TdGFraW5nRGVhY3RpdmF0ZVxuICAgICAgICA/ICdTdGFraW5nRGVhY3RpdmF0ZSdcbiAgICAgICAgOiB0aGlzLl90eXBlID09PSBUcmFuc2FjdGlvblR5cGUuU3Rha2luZ1BsZWRnZVxuICAgICAgICA/ICdTdGFraW5nUGxlZGdlJ1xuICAgICAgICA6IHRoaXMuX3R5cGUgPT09IFRyYW5zYWN0aW9uVHlwZS5Wb3RlRGVsZWdhdGlvblxuICAgICAgICA/ICdWb3RlRGVsZWdhdGlvbidcbiAgICAgICAgOiAndW5kZWZpbmVkJztcbiAgICByZXR1cm4ge1xuICAgICAgZGlzcGxheU9yZGVyLFxuICAgICAgaWQ6IHR4SnNvbi5pZCxcbiAgICAgIG91dHB1dHM6IHR4SnNvbi5vdXRwdXRzLm1hcCgobykgPT4gKHsgYWRkcmVzczogby5hZGRyZXNzLCBhbW91bnQ6IG8uYW1vdW50IH0pKSxcbiAgICAgIG91dHB1dEFtb3VudDogb3V0cHV0QW1vdW50LFxuICAgICAgY2hhbmdlT3V0cHV0czogW10sXG4gICAgICBjaGFuZ2VBbW91bnQ6ICcwJyxcbiAgICAgIGZlZTogeyBmZWU6IHRoaXMuX2ZlZSB9LFxuICAgICAgdHlwZSxcbiAgICAgIGNlcnRpZmljYXRlczogdHhKc29uLmNlcnRzLFxuICAgICAgd2l0aGRyYXdhbHM6IHR4SnNvbi53aXRoZHJhd2FscyxcbiAgICAgIHBsZWRnZURldGFpbHM6IHRoaXMuX3BsZWRnZURldGFpbHMsXG4gICAgfTtcbiAgfVxuXG4gIGdldFBsZWRnZURldGFpbHMoKTogUGxlZGdlRGV0YWlscyB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuX3BsZWRnZURldGFpbHM7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRyYW5zYWN0aW9uIGZlZVxuICAgKi9cbiAgZ2V0IGdldEZlZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl9mZWU7XG4gIH1cblxuICAvKipcbiAgICogU2V0IHRyYW5zYWN0aW9uIGZlZVxuICAgKlxuICAgKiBAcGFyYW0gZmVlXG4gICAqL1xuICBmZWUoZmVlOiBzdHJpbmcpIHtcbiAgICB0aGlzLl9mZWUgPSBmZWU7XG4gIH1cbn1cbiJdfQ==
@@ -1 +1 @@
1
- {"version":3,"file":"transactionBuilder.d.ts","sourceRoot":"","sources":["../../../src/lib/transactionBuilder.ts"],"names":[],"mappings":"AAAA,OAAO,SAAS,MAAM,cAAc,CAAC;AACrC,OAAO,EAAE,QAAQ,IAAI,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAC7D,OAAO,EACL,WAAW,EACX,OAAO,EACP,sBAAsB,EAEtB,SAAS,IAAI,aAAa,EAC1B,SAAS,EACT,eAAe,EAEhB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,KAAK,EAAE,WAAW,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AACpG,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,OAAO,KAAK,WAAW,MAAM,0CAA0C,CAAC;AAGxE,8BAAsB,kBAAmB,SAAQ,sBAAsB;IACrE,SAAS,CAAC,YAAY,EAAG,WAAW,CAAC;IACrC,SAAS,CAAC,QAAQ,EAAE,OAAO,EAAE,CAAM;IACnC,SAAS,CAAC,kBAAkB,EAAE,gBAAgB,EAAE,CAAM;IACtD,SAAS,CAAC,mBAAmB,EAAE,iBAAiB,EAAE,CAAM;IACxD,SAAS,CAAC,eAAe,EAAE,SAAS,EAAE,CAAM;IAC5C,SAAS,CAAC,WAAW,EAAE,SAAS,EAAE,CAAM;IACxC,SAAS,CAAC,cAAc,EAAE,MAAM,CAAC;IACjC,SAAS,CAAC,cAAc,EAAE,MAAM,CAAC;IACjC,SAAS,CAAC,IAAI,SAAK;IACnB,SAAS,CAAC,MAAM,EAAE,WAAW,CAAC,WAAW,EAAE,CAAM;IACjD,SAAS,CAAC,YAAY,EAAE,UAAU,EAAE,CAAM;IAC1C,SAAS,CAAC,KAAK,EAAE,eAAe,CAAC;IACjC,SAAS,CAAC,YAAY,EAAE,KAAK,EAAE,CAAM;IACrC,OAAO,CAAC,IAAI,CAAS;gBAET,WAAW,EAAE,QAAQ,CAAC,UAAU,CAAC;IAM7C,KAAK,CAAC,CAAC,EAAE,gBAAgB,GAAG,IAAI;IAKhC,MAAM,CAAC,CAAC,EAAE,iBAAiB,GAAG,IAAI;IAKlC,MAAM,CAAC,CAAC,EAAE,KAAK,GAAG,IAAI;IAKtB,GAAG,CAAC,CAAC,EAAE,MAAM,GAAG,IAAI;IAKpB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,iBAAiB,EAAE,MAAM,GAAG,IAAI;IAM5D,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IAKtB;;;;OAIG;IACH,WAAW,CAAC,EAAE,EAAE,WAAW,GAAG,IAAI;IAmDlC,kBAAkB;IAClB,SAAS,CAAC,kBAAkB,CAAC,cAAc,EAAE,MAAM,GAAG,WAAW;IAMjE,kBAAkB;cACF,mBAAmB,IAAI,OAAO,CAAC,WAAW,CAAC;IAoT3D,kBAAkB;IAClB,SAAS,CAAC,kBAAkB,CAAC,GAAG,EAAE,OAAO,GAAG,WAAW;IAKvD,kBAAkB;IAClB,SAAS,KAAK,WAAW,IAAI,WAAW,CAEvC;IAED,kBAAkB;IAClB,SAAS,KAAK,WAAW,CAAC,WAAW,EAAE,WAAW,EAEjD;IAED,kBAAkB;IAClB,eAAe,CAAC,OAAO,EAAE,WAAW,EAAE,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI;IAMnE,kBAAkB;IAClB,WAAW,CAAC,GAAG,EAAE,OAAO,GAAG,IAAI;IAQ/B,kBAAkB;IAClB,sBAAsB,CAAC,cAAc,EAAE,GAAG,GAAG,IAAI;IAQjD,kBAAkB;IAClB,mBAAmB,CAAC,WAAW,EAAE,WAAW,GAAG,IAAI;IAMnD,kBAAkB;IAClB,aAAa,CAAC,KAAK,EAAE,SAAS,GAAG,IAAI;IAOrC,kBAAkB;IAClB,YAAY,CAAC,SAAS,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI;IAI/D,OAAO,CAAC,gBAAgB;CAGzB"}
1
+ {"version":3,"file":"transactionBuilder.d.ts","sourceRoot":"","sources":["../../../src/lib/transactionBuilder.ts"],"names":[],"mappings":"AAAA,OAAO,SAAS,MAAM,cAAc,CAAC;AACrC,OAAO,EAAE,QAAQ,IAAI,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAC7D,OAAO,EACL,WAAW,EACX,OAAO,EACP,sBAAsB,EAEtB,SAAS,IAAI,aAAa,EAC1B,SAAS,EACT,eAAe,EAEhB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,KAAK,EAAE,WAAW,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AACpG,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,OAAO,KAAK,WAAW,MAAM,0CAA0C,CAAC;AAGxE,8BAAsB,kBAAmB,SAAQ,sBAAsB;IACrE,SAAS,CAAC,YAAY,EAAG,WAAW,CAAC;IACrC,SAAS,CAAC,QAAQ,EAAE,OAAO,EAAE,CAAM;IACnC,SAAS,CAAC,kBAAkB,EAAE,gBAAgB,EAAE,CAAM;IACtD,SAAS,CAAC,mBAAmB,EAAE,iBAAiB,EAAE,CAAM;IACxD,SAAS,CAAC,eAAe,EAAE,SAAS,EAAE,CAAM;IAC5C,SAAS,CAAC,WAAW,EAAE,SAAS,EAAE,CAAM;IACxC,SAAS,CAAC,cAAc,EAAE,MAAM,CAAC;IACjC,SAAS,CAAC,cAAc,EAAE,MAAM,CAAC;IACjC,SAAS,CAAC,IAAI,SAAK;IACnB,SAAS,CAAC,MAAM,EAAE,WAAW,CAAC,WAAW,EAAE,CAAM;IACjD,SAAS,CAAC,YAAY,EAAE,UAAU,EAAE,CAAM;IAC1C,SAAS,CAAC,KAAK,EAAE,eAAe,CAAC;IACjC,SAAS,CAAC,YAAY,EAAE,KAAK,EAAE,CAAM;IACrC,OAAO,CAAC,IAAI,CAAS;gBAET,WAAW,EAAE,QAAQ,CAAC,UAAU,CAAC;IAM7C,KAAK,CAAC,CAAC,EAAE,gBAAgB,GAAG,IAAI;IAKhC,MAAM,CAAC,CAAC,EAAE,iBAAiB,GAAG,IAAI;IAKlC,MAAM,CAAC,CAAC,EAAE,KAAK,GAAG,IAAI;IAKtB,GAAG,CAAC,CAAC,EAAE,MAAM,GAAG,IAAI;IAKpB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,iBAAiB,EAAE,MAAM,GAAG,IAAI;IAM5D,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IAKtB;;;;OAIG;IACH,WAAW,CAAC,EAAE,EAAE,WAAW,GAAG,IAAI;IAmDlC,kBAAkB;IAClB,SAAS,CAAC,kBAAkB,CAAC,cAAc,EAAE,MAAM,GAAG,WAAW;IAMjE,kBAAkB;cACF,mBAAmB,IAAI,OAAO,CAAC,WAAW,CAAC;IAiT3D,kBAAkB;IAClB,SAAS,CAAC,kBAAkB,CAAC,GAAG,EAAE,OAAO,GAAG,WAAW;IAKvD,kBAAkB;IAClB,SAAS,KAAK,WAAW,IAAI,WAAW,CAEvC;IAED,kBAAkB;IAClB,SAAS,KAAK,WAAW,CAAC,WAAW,EAAE,WAAW,EAEjD;IAED,kBAAkB;IAClB,eAAe,CAAC,OAAO,EAAE,WAAW,EAAE,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI;IAMnE,kBAAkB;IAClB,WAAW,CAAC,GAAG,EAAE,OAAO,GAAG,IAAI;IAQ/B,kBAAkB;IAClB,sBAAsB,CAAC,cAAc,EAAE,GAAG,GAAG,IAAI;IAQjD,kBAAkB;IAClB,mBAAmB,CAAC,WAAW,EAAE,WAAW,GAAG,IAAI;IAMnD,kBAAkB;IAClB,aAAa,CAAC,KAAK,EAAE,SAAS,GAAG,IAAI;IAOrC,kBAAkB;IAClB,YAAY,CAAC,SAAS,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI;IAI/D,OAAO,CAAC,gBAAgB;CAGzB"}
@@ -147,14 +147,14 @@ class TransactionBuilder extends sdk_core_1.BaseTransactionBuilder {
147
147
  let totalAmountToSend = CardanoWasm.BigNum.zero();
148
148
  this._transactionOutputs.forEach((output) => {
149
149
  const amount = CardanoWasm.BigNum.from_str(output.amount);
150
- outputs.add(CardanoWasm.TransactionOutput.new(CardanoWasm.Address.from_bech32(output.address), CardanoWasm.Value.new(amount)));
150
+ outputs.add(CardanoWasm.TransactionOutput.new(utils_1.default.getWalletAddress(output.address), CardanoWasm.Value.new(amount)));
151
151
  totalAmountToSend = totalAmountToSend.checked_add(amount);
152
152
  });
153
153
  if (this._fee.is_zero()) {
154
154
  // estimate fee
155
155
  // add extra output for the change
156
156
  if (this._changeAddress && this._senderBalance) {
157
- const changeAddress = CardanoWasm.Address.from_bech32(this._changeAddress);
157
+ const changeAddress = utils_1.default.getWalletAddress(this._changeAddress);
158
158
  const utxoBalance = CardanoWasm.BigNum.from_str(this._senderBalance);
159
159
  const adjustment = cardano_serialization_lib_nodejs_1.BigNum.from_str('2000000');
160
160
  let change = utxoBalance.checked_sub(this._fee).checked_sub(totalAmountToSend);
@@ -180,7 +180,7 @@ class TransactionBuilder extends sdk_core_1.BaseTransactionBuilder {
180
180
  this._multiAssets.forEach((asset) => {
181
181
  let txOutputBuilder = CardanoWasm.TransactionOutputBuilder.new();
182
182
  // changeAddress is the root address, which is where we want the tokens assets to be sent to
183
- const toAddress = CardanoWasm.Address.from_bech32(this._changeAddress);
183
+ const toAddress = utils_1.default.getWalletAddress(this._changeAddress);
184
184
  txOutputBuilder = txOutputBuilder.with_address(toAddress);
185
185
  let txOutputAmountBuilder = txOutputBuilder.next();
186
186
  const assetName = CardanoWasm.AssetName.new(Buffer.from(asset.asset_name, 'hex'));
@@ -269,7 +269,7 @@ class TransactionBuilder extends sdk_core_1.BaseTransactionBuilder {
269
269
  const quantity = assets.get(assetName);
270
270
  let txOutputBuilder = CardanoWasm.TransactionOutputBuilder.new();
271
271
  const outputAmount = CardanoWasm.BigNum.from_str(output.amount);
272
- const toAddress = CardanoWasm.Address.from_bech32(output.address);
272
+ const toAddress = utils_1.default.getWalletAddress(output.address);
273
273
  txOutputBuilder = txOutputBuilder.with_address(toAddress);
274
274
  let txOutputAmountBuilder = txOutputBuilder.next();
275
275
  const multiAsset = CardanoWasm.MultiAsset.new();
@@ -281,11 +281,11 @@ class TransactionBuilder extends sdk_core_1.BaseTransactionBuilder {
281
281
  outputs.add(txOutput);
282
282
  }
283
283
  else {
284
- outputs.add(CardanoWasm.TransactionOutput.new(CardanoWasm.Address.from_bech32(output.address), CardanoWasm.Value.new(CardanoWasm.BigNum.from_str(output.amount))));
284
+ outputs.add(CardanoWasm.TransactionOutput.new(utils_1.default.getWalletAddress(output.address), CardanoWasm.Value.new(CardanoWasm.BigNum.from_str(output.amount))));
285
285
  }
286
286
  });
287
287
  if (this._changeAddress && this._senderBalance) {
288
- const changeAddress = CardanoWasm.Address.from_bech32(this._changeAddress);
288
+ const changeAddress = utils_1.default.getWalletAddress(this._changeAddress);
289
289
  const utxoBalance = CardanoWasm.BigNum.from_str(this._senderBalance);
290
290
  const adjustment = cardano_serialization_lib_nodejs_1.BigNum.from_str('2000000');
291
291
  let change = utxoBalance.checked_sub(this._fee).checked_sub(totalAmountToSend);
@@ -311,7 +311,7 @@ class TransactionBuilder extends sdk_core_1.BaseTransactionBuilder {
311
311
  this._multiAssets.forEach((asset) => {
312
312
  let txOutputBuilder = CardanoWasm.TransactionOutputBuilder.new();
313
313
  // changeAddress is the root address, which is where we want the tokens assets to be sent to
314
- const toAddress = CardanoWasm.Address.from_bech32(this._changeAddress);
314
+ const toAddress = utils_1.default.getWalletAddress(this._changeAddress);
315
315
  txOutputBuilder = txOutputBuilder.with_address(toAddress);
316
316
  let txOutputAmountBuilder = txOutputBuilder.next();
317
317
  const assetName = CardanoWasm.AssetName.new(Buffer.from(asset.asset_name, 'hex'));
@@ -442,4 +442,4 @@ class TransactionBuilder extends sdk_core_1.BaseTransactionBuilder {
442
442
  }
443
443
  }
444
444
  exports.TransactionBuilder = TransactionBuilder;
445
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNhY3Rpb25CdWlsZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xpYi90cmFuc2FjdGlvbkJ1aWxkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBRUEsbURBUzhCO0FBQzlCLCtDQUFvRztBQUNwRyx1Q0FBb0M7QUFDcEMsaURBQXNEO0FBQ3RELHNGQUF3RTtBQUN4RSwrRkFBa0U7QUFFbEUsTUFBc0Isa0JBQW1CLFNBQVEsaUNBQXNCO0lBZ0JyRSxZQUFZLFdBQWlDO1FBQzNDLEtBQUssQ0FBQyxXQUFXLENBQUMsQ0FBQztRQWZYLGFBQVEsR0FBYyxFQUFFLENBQUM7UUFDekIsdUJBQWtCLEdBQXVCLEVBQUUsQ0FBQztRQUM1Qyx3QkFBbUIsR0FBd0IsRUFBRSxDQUFDO1FBQzlDLG9CQUFlLEdBQWdCLEVBQUUsQ0FBQztRQUNsQyxnQkFBVyxHQUFnQixFQUFFLENBQUM7UUFHOUIsU0FBSSxHQUFHLENBQUMsQ0FBQztRQUNULFdBQU0sR0FBOEIsRUFBRSxDQUFDO1FBQ3ZDLGlCQUFZLEdBQWlCLEVBQUUsQ0FBQztRQUVoQyxpQkFBWSxHQUFZLEVBQUUsQ0FBQztRQUtuQyxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUkseUJBQVcsQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUNoRCxJQUFJLENBQUMsSUFBSSxHQUFHLHlDQUFNLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDNUIsQ0FBQztJQUVELEtBQUssQ0FBQyxDQUFtQjtRQUN2QixJQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2hDLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVELE1BQU0sQ0FBQyxDQUFvQjtRQUN6QixJQUFJLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2pDLE9BQU8sSUFBSSxDQUFDO0lBQ2Qs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YSxDQUFDLEtBQWdCO1FBQzVCLElBQUksS0FBSyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1lBQ3hCLE1BQU0sSUFBSSxnQ0FBcUIsQ0FBQyxnQ0FBZ0MsQ0FBQyxDQUFDO1FBQ3BFLENBQUM7SUFDSCxDQUFDO0lBQ0QsWUFBWTtJQUVaLGtCQUFrQjtJQUNsQixZQUFZLENBQUMsU0FBd0IsRUFBRSxTQUFpQjtRQUN0RCxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsQ0FBQyxDQUFDO0lBQ2xELENBQUM7SUFFTyxnQkFBZ0I7UUFDdEIsT0FBTyxJQUFJLENBQUMsZUFBZSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7SUFDdkQsQ0FBQztDQUNGO0FBemVELGdEQXllQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBCaWdOdW1iZXIgZnJvbSAnYmlnbnVtYmVyLmpzJztcbmltcG9ydCB7IEJhc2VDb2luIGFzIENvaW5Db25maWcgfSBmcm9tICdAYml0Z28tYmV0YS9zdGF0aWNzJztcbmltcG9ydCB7XG4gIEJhc2VBZGRyZXNzLFxuICBCYXNlS2V5LFxuICBCYXNlVHJhbnNhY3Rpb25CdWlsZGVyLFxuICBCdWlsZFRyYW5zYWN0aW9uRXJyb3IsXG4gIFB1YmxpY0tleSBhcyBCYXNlUHVibGljS2V5LFxuICBTaWduYXR1cmUsXG4gIFRyYW5zYWN0aW9uVHlwZSxcbiAgVXRpbHNFcnJvcixcbn0gZnJvbSAnQGJpdGdvLWJldGEvc2RrLWNvcmUnO1xuaW1wb3J0IHsgQXNzZXQsIFRyYW5zYWN0aW9uLCBUcmFuc2FjdGlvbklucHV0LCBUcmFuc2FjdGlvbk91dHB1dCwgV2l0aGRyYXdhbCB9IGZyb20gJy4vdHJhbnNhY3Rpb24nO1xuaW1wb3J0IHsgS2V5UGFpciB9IGZyb20gJy4va2V5UGFpcic7XG5pbXBvcnQgdXRpbCwgeyBNSU5fQURBX0ZPUl9PTkVfQVNTRVQgfSBmcm9tICcuL3V0aWxzJztcbmltcG9ydCAqIGFzIENhcmRhbm9XYXNtIGZyb20gJ0BlbXVyZ28vY2FyZGFuby1zZXJpYWxpemF0aW9uLWxpYi1ub2RlanMnO1xuaW1wb3J0IHsgQmlnTnVtIH0gZnJvbSAnQGVtdXJnby9jYXJkYW5vLXNlcmlhbGl6YXRpb24tbGliLW5vZGVqcyc7XG5cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBUcmFuc2FjdGlvbkJ1aWxkZXIgZXh0ZW5kcyBCYXNlVHJhbnNhY3Rpb25CdWlsZGVyIHtcbiAgcHJvdGVjdGVkIF90cmFuc2FjdGlvbiE6IFRyYW5zYWN0aW9uO1xuICBwcm90ZWN0ZWQgX3NpZ25lcnM6IEtleVBhaXJbXSA9IFtdO1xuICBwcm90ZWN0ZWQgX3RyYW5zYWN0aW9uSW5wdXRzOiBUcmFuc2FjdGlvbklucHV0W10gPSBbXTtcbiAgcHJvdGVjdGVkIF90cmFuc2FjdGlvbk91dHB1dHM6IFRyYW5zYWN0aW9uT3V0cHV0W10gPSBbXTtcbiAgcHJvdGVjdGVkIF9pbml0U2lnbmF0dXJlczogU2lnbmF0dXJlW10gPSBbXTtcbiAgcHJvdGVjdGVkIF9zaWduYXR1cmVzOiBTaWduYXR1cmVbXSA9IFtdO1xuICBwcm90ZWN0ZWQgX2NoYW5nZUFkZHJlc3M6IHN0cmluZztcbiAgcHJvdGVjdGVkIF9zZW5kZXJCYWxhbmNlOiBzdHJpbmc7XG4gIHByb3RlY3RlZCBfdHRsID0gMDtcbiAgcHJvdGVjdGVkIF9jZXJ0czogQ2FyZGFub1dhc20uQ2VydGlmaWNhdGVbXSA9IFtdO1xuICBwcm90ZWN0ZWQgX3dpdGhkcmF3YWxzOiBXaXRoZHJhd2FsW10gPSBbXTtcbiAgcHJvdGVjdGVkIF90eXBlOiBUcmFuc2FjdGlvblR5cGU7XG4gIHByb3RlY3RlZCBfbXVsdGlBc3NldHM6IEFzc2V0W10gPSBbXTtcbiAgcHJpdmF0ZSBfZmVlOiBCaWdOdW07XG5cbiAgY29uc3RydWN0b3IoX2NvaW5Db25maWc6IFJlYWRvbmx5PENvaW5Db25maWc+KSB7XG4gICAgc3VwZXIoX2NvaW5Db25maWcpO1xuICAgIHRoaXMudHJhbnNhY3Rpb24gPSBuZXcgVHJhbnNhY3Rpb24oX2NvaW5Db25maWcpO1xuICAgIHRoaXMuX2ZlZSA9IEJpZ051bS56ZXJvKCk7XG4gIH1cblxuICBpbnB1dChpOiBUcmFuc2FjdGlvbklucHV0KTogdGhpcyB7XG4gICAgdGhpcy5fdHJhbnNhY3Rpb25JbnB1dHMucHVzaChpKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIG91dHB1dChvOiBUcmFuc2FjdGlvbk91dHB1dCk6IHRoaXMge1xuICAgIHRoaXMuX3RyYW5zYWN0aW9uT3V0cHV0cy5wdXNoKG8pO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgYXNzZXRzKGE6IEFzc2V0KTogdGhpcyB7XG4gICAgdGhpcy5fbXVsdGlBc3NldHMucHVzaChhKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIHR0bCh0OiBudW1iZXIpOiB0aGlzIHtcbiAgICB0aGlzLl90dGwgPSB0O1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgY2hhbmdlQWRkcmVzcyhhZGRyOiBzdHJpbmcsIHRvdGFsSW5wdXRCYWxhbmNlOiBzdHJpbmcpOiB0aGlzIHtcbiAgICB0aGlzLl9jaGFuZ2VBZGRyZXNzID0gYWRkcjtcbiAgICB0aGlzLl9zZW5kZXJCYWxhbmNlID0gdG90YWxJbnB1dEJhbGFuY2U7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBmZWUoZmVlOiBzdHJpbmcpOiB0aGlzIHtcbiAgICB0aGlzLl9mZWUgPSBCaWdOdW0uZnJvbV9zdHIoZmVlKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBJbml0aWFsaXplIHRoZSB0cmFuc2FjdGlvbiBidWlsZGVyIGZpZWxkcyB1c2luZyB0aGUgZGVjb2RlZCB0cmFuc2FjdGlvbiBkYXRhXG4gICAqXG4gICAqIEBwYXJhbSB7VHJhbnNhY3Rpb259IHR4IHRoZSB0cmFuc2FjdGlvbiBkYXRhXG4gICAqL1xuICBpbml0QnVpbGRlcih0eDogVHJhbnNhY3Rpb24pOiB2b2lkIHtcbiAgICB0aGlzLl90cmFuc2FjdGlvbiA9IHR4O1xuICAgIGNvbnN0IHR4bkJvZHkgPSB0eC50cmFuc2FjdGlvbi5ib2R5KCk7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0eG5Cb2R5LmlucHV0cygpLmxlbigpOyBpKyspIHtcbiAgICAgIGNvbnN0IGlucHV0ID0gdHhuQm9keS5pbnB1dHMoKS5nZXQoaSk7XG4gICAgICB0aGlzLmlucHV0KHtcbiAgICAgICAgdHJhbnNhY3Rpb25faWQ6IEJ1ZmZlci5mcm9tKGlucHV0LnRyYW5zYWN0aW9uX2lkKCkudG9fYnl0ZXMoKSkudG9TdHJpbmcoJ2hleCcpLFxuICAgICAgICB0cmFuc2FjdGlvbl9pbmRleDogaW5wdXQuaW5kZXgoKSxcbiAgICAgIH0pO1xuICAgIH1cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHR4bkJvZHkub3V0cHV0cygpLmxlbigpOyBpKyspIHtcbiAgICAgIGNvbnN0IG91dHB1dCA9IHR4bkJvZHkub3V0cHV0cygpLmdldChpKTtcbiAgICAgIHRoaXMub3V0cHV0KHtcbiAgICAgICAgYWRkcmVzczogb3V0cHV0LmFkZHJlc3MoKS50b19iZWNoMzIoKSxcbiAgICAgICAgYW1vdW50OiBvdXRwdXQuYW1vdW50KCkuY29pbigpLnRvX3N0cigpLFxuICAgICAgICBtdWx0aUFzc2V0czogb3V0cHV0LmFtb3VudCgpLm11bHRpYXNzZXQoKSB8fCB1bmRlZmluZWQsXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBpZiAodHhuQm9keS5jZXJ0cygpICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGNvbnN0IGNlcnRzID0gdHhuQm9keS5jZXJ0cygpIGFzIENhcmRhbm9XYXNtLkNlcnRpZmljYXRlcztcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY2VydHMubGVuKCk7IGkrKykge1xuICAgICAgICB0aGlzLl9jZXJ0cy5wdXNoKGNlcnRzLmdldChpKSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHR4bkJvZHkud2l0aGRyYXdhbHMoKSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBjb25zdCB3aXRoZHJhd2FscyA9IHR4bkJvZHkud2l0aGRyYXdhbHMoKSBhcyBDYXJkYW5vV2FzbS5XaXRoZHJhd2FscztcbiAgICAgIGNvbnN0IGtleXMgPSB3aXRoZHJhd2Fscy5rZXlzKCk7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGtleXMubGVuKCk7IGkrKykge1xuICAgICAgICBjb25zdCByZXdhcmRBZGRyZXNzID0ga2V5cy5nZXQoaSkgYXMgQ2FyZGFub1dhc20uUmV3YXJkQWRkcmVzcztcbiAgICAgICAgY29uc3QgcmV3YXJkID0gd2l0aGRyYXdhbHMuZ2V0KHJld2FyZEFkZHJlc3MpIGFzIENhcmRhbm9XYXNtLkJpZ051bTtcbiAgICAgICAgdGhpcy5fd2l0aGRyYXdhbHMucHVzaCh7IHN0YWtlQWRkcmVzczogcmV3YXJkQWRkcmVzcy50b19hZGRyZXNzKCkudG9fYmVjaDMyKCksIHZhbHVlOiByZXdhcmQudG9fc3RyKCkgfSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5fdHRsID0gdHgudHJhbnNhY3Rpb24uYm9keSgpLnR0bCgpIGFzIG51bWJlcjtcbiAgICB0aGlzLl9mZWUgPSB0eC50cmFuc2FjdGlvbi5ib2R5KCkuZmVlKCk7XG5cbiAgICBpZiAodHgudHJhbnNhY3Rpb24ud2l0bmVzc19zZXQoKS52a2V5cygpKSB7XG4gICAgICBjb25zdCB2a2V5cyA9IHR4LnRyYW5zYWN0aW9uLndpdG5lc3Nfc2V0KCkudmtleXMoKSEgYXMgQ2FyZGFub1dhc20uVmtleXdpdG5lc3NlcztcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdmtleXMubGVuKCk7IGkrKykge1xuICAgICAgICBjb25zdCB2a2V5ID0gdmtleXMuZ2V0KGkpO1xuICAgICAgICB0aGlzLl9pbml0U2lnbmF0dXJlcy5wdXNoKHtcbiAgICAgICAgICBwdWJsaWNLZXk6IHsgcHViOiB2a2V5LnZrZXkoKS5wdWJsaWNfa2V5KCkudG9faGV4KCkgfSxcbiAgICAgICAgICBzaWduYXR1cmU6IEJ1ZmZlci5mcm9tKHZrZXkuc2lnbmF0dXJlKCkudG9faGV4KCksICdoZXgnKSxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqIEBpbmhlcml0ZG9jICovXG4gIHByb3RlY3RlZCBmcm9tSW1wbGVtZW50YXRpb24ocmF3VHJhbnNhY3Rpb246IHN0cmluZyk6IFRyYW5zYWN0aW9uIHtcbiAgICB0aGlzLnZhbGlkYXRlUmF3VHJhbnNhY3Rpb24ocmF3VHJhbnNhY3Rpb24pO1xuICAgIHRoaXMuYnVpbGRJbXBsZW1lbnRhdGlvbigpO1xuICAgIHJldHVybiB0aGlzLnRyYW5zYWN0aW9uO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0ZG9jICovXG4gIHByb3RlY3RlZCBhc3luYyBidWlsZEltcGxlbWVudGF0aW9uKCk6IFByb21pc2U8VHJhbnNhY3Rpb24+IHtcbiAgICBjb25zdCBpbnB1dHMgPSBDYXJkYW5vV2FzbS5UcmFuc2FjdGlvbklucHV0cy5uZXcoKTtcbiAgICB0aGlzLl90cmFuc2FjdGlvbklucHV0cy5mb3JFYWNoKChpbnB1dCkgPT4ge1xuICAgICAgaW5wdXRzLmFkZChcbiAgICAgICAgQ2FyZGFub1dhc20uVHJhbnNhY3Rpb25JbnB1dC5uZXcoXG4gICAgICAgICAgQ2FyZGFub1dhc20uVHJhbnNhY3Rpb25IYXNoLmZyb21fYnl0ZXMoQnVmZmVyLmZyb20oaW5wdXQudHJhbnNhY3Rpb25faWQsICdoZXgnKSksXG4gICAgICAgICAgaW5wdXQudHJhbnNhY3Rpb25faW5kZXhcbiAgICAgICAgKVxuICAgICAgKTtcbiAgICB9KTtcbiAgICBsZXQgb3V0cHV0cyA9IENhcmRhbm9XYXNtLlRyYW5zYWN0aW9uT3V0cHV0cy5uZXcoKTtcbiAgICBsZXQgdG90YWxBbW91bnRUb1NlbmQgPSBDYXJkYW5vV2FzbS5CaWdOdW0uemVybygpO1xuICAgIHRoaXMuX3RyYW5zYWN0aW9uT3V0cHV0cy5mb3JFYWNoKChvdXRwdXQpID0+IHtcbiAgICAgIGNvbnN0IGFtb3VudCA9IENhcmRhbm9XYXNtLkJpZ051bS5mcm9tX3N0cihvdXRwdXQuYW1vdW50KTtcbiAgICAgIG91dHB1dHMuYWRkKFxuICAgICAgICBDYXJkYW5vV2FzbS5UcmFuc2FjdGlvbk91dHB1dC5uZXcoXG4gICAgICAgICAgQ2FyZGFub1dhc20uQWRkcmVzcy5mcm9tX2JlY2gzMihvdXRwdXQuYWRkcmVzcyksXG4gICAgICAgICAgQ2FyZGFub1dhc20uVmFsdWUubmV3KGFtb3VudClcbiAgICAgICAgKVxuICAgICAgKTtcbiAgICAgIHRvdGFsQW1vdW50VG9TZW5kID0gdG90YWxBbW91bnRUb1NlbmQuY2hlY2tlZF9hZGQoYW1vdW50KTtcbiAgICB9KTtcblxuICAgIGlmICh0aGlzLl9mZWUuaXNfemVybygpKSB7XG4gICAgICAvLyBlc3RpbWF0ZSBmZWVcbiAgICAgIC8vIGFkZCBleHRyYSBvdXRwdXQgZm9yIHRoZSBjaGFuZ2VcbiAgICAgIGlmICh0aGlzLl9jaGFuZ2VBZGRyZXNzICYmIHRoaXMuX3NlbmRlckJhbGFuY2UpIHtcbiAgICAgICAgY29uc3QgY2hhbmdlQWRkcmVzcyA9IENhcmRhbm9XYXNtLkFkZHJlc3MuZnJvbV9iZWNoMzIodGhpcy5fY2hhbmdlQWRkcmVzcyk7XG4gICAgICAgIGNvbnN0IHV0eG9CYWxhbmNlID0gQ2FyZGFub1dhc20uQmlnTnVtLmZyb21fc3RyKHRoaXMuX3NlbmRlckJhbGFuY2UpO1xuXG4gICAgICAgIGNvbnN0IGFkanVzdG1lbnQgPSBCaWdOdW0uZnJvbV9zdHIoJzIwMDAwMDAnKTtcbiAgICAgICAgbGV0IGNoYW5nZSA9IHV0eG9CYWxhbmNlLmNoZWNrZWRfc3ViKHRoaXMuX2ZlZSkuY2hlY2tlZF9zdWIodG90YWxBbW91bnRUb1NlbmQpO1xuICAgICAgICBpZiAodGhpcy5fdHlwZSA9PT0gVHJhbnNhY3Rpb25UeXBlLlN0YWtpbmdBY3RpdmF0ZSkge1xuICAgICAgICAgIGNoYW5nZSA9IGNoYW5nZS5jaGVja2VkX3N1YihhZGp1c3RtZW50KTtcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLl90eXBlID09PSBUcmFuc2FjdGlvblR5cGUuU3Rha2luZ0RlYWN0aXZhdGUpIHtcbiAgICAgICAgICBjaGFuZ2UgPSBjaGFuZ2UuY2hlY2tlZF9hZGQoYWRqdXN0bWVudCk7XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5fdHlwZSA9PT0gVHJhbnNhY3Rpb25UeXBlLlN0YWtpbmdXaXRoZHJhdyB8fCB0aGlzLl90eXBlID09PSBUcmFuc2FjdGlvblR5cGUuU3Rha2luZ0NsYWltKSB7XG4gICAgICAgICAgdGhpcy5fd2l0aGRyYXdhbHMuZm9yRWFjaCgod2l0aGRyYXdhbDogV2l0aGRyYXdhbCkgPT4ge1xuICAgICAgICAgICAgY2hhbmdlID0gY2hhbmdlLmNoZWNrZWRfYWRkKENhcmRhbm9XYXNtLkJpZ051bS5mcm9tX3N0cih3aXRoZHJhd2FsLnZhbHVlKSk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBJZiB0b3RhbEFtb3VudFRvU2VuZCBpcyAwLCBpdHMgY29uc29saWRhdGlvblxuICAgICAgICBpZiAodG90YWxBbW91bnRUb1NlbmQudG9fc3RyKCkgPT0gJzAnKSB7XG4gICAgICAgICAgLy8gc3VwcG9ydCBmb3IgbXVsdGktYXNzZXQgY29uc29saWRhdGlvblxuICAgICAgICAgIGlmICh0aGlzLl9tdWx0aUFzc2V0cyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBjb25zdCB0b3RhbE51bWJlck9mQXNzZXRzID0gQ2FyZGFub1dhc20uQmlnTnVtLmZyb21fc3RyKHRoaXMuX211bHRpQXNzZXRzLmxlbmd0aC50b1N0cmluZygpKTtcbiAgICAgICAgICAgIGNvbnN0IG1pbkFtb3VudE5lZWRlZEZvck9uZUFzc2V0T3V0cHV0ID0gQ2FyZGFub1dhc20uQmlnTnVtLmZyb21fc3RyKE1JTl9BREFfRk9SX09ORV9BU1NFVCk7XG4gICAgICAgICAgICBjb25zdCBtaW5BbW91bnROZWVkZWRGb3JUb3RhbEFzc2V0T3V0cHV0cyA9XG4gICAgICAgICAgICAgIG1pbkFtb3VudE5lZWRlZEZvck9uZUFzc2V0T3V0cHV0LmNoZWNrZWRfbXVsKHRvdGFsTnVtYmVyT2ZBc3NldHMpO1xuXG4gICAgICAgICAgICBpZiAoIWNoYW5nZS5sZXNzX3RoYW4obWluQW1vdW50TmVlZGVkRm9yVG90YWxBc3NldE91dHB1dHMpKSB7XG4gICAgICAgICAgICAgIHRoaXMuX211bHRpQXNzZXRzLmZvckVhY2goKGFzc2V0KSA9PiB7XG4gICAgICAgICAgICAgICAgbGV0IHR4T3V0cHV0QnVpbGRlciA9IENhcmRhbm9XYXNtLlRyYW5zYWN0aW9uT3V0cHV0QnVpbGRlci5uZXcoKTtcbiAgICAgICAgICAgICAgICAvLyBjaGFuZ2VBZGRyZXNzIGlzIHRoZSByb290IGFkZHJlc3MsIHdoaWNoIGlzIHdoZXJlIHdlIHdhbnQgdGhlIHRva2VucyBhc3NldHMgdG8gYmUgc2VudCB0b1xuICAgICAgICAgICAgICAgIGNvbnN0IHRvQWRkcmVzcyA9IENhcmRhbm9XYXNtLkFkZHJlc3MuZnJvbV9iZWNoMzIodGhpcy5fY2hhbmdlQWRkcmVzcyk7XG4gICAgICAgICAgICAgICAgdHhPdXRwdXRCdWlsZGVyID0gdHhPdXRwdXRCdWlsZGVyLndpdGhfYWRkcmVzcyh0b0FkZHJlc3MpO1xuICAgICAgICAgICAgICAgIGxldCB0eE91dHB1dEFtb3VudEJ1aWxkZXIgPSB0eE91dHB1dEJ1aWxkZXIubmV4dCgpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGFzc2V0TmFtZSA9IENhcmRhbm9XYXNtLkFzc2V0TmFtZS5uZXcoQnVmZmVyLmZyb20oYXNzZXQuYXNzZXRfbmFtZSwgJ2hleCcpKTtcbiAgICAgICAgICAgICAgICBjb25zdCBwb2xpY3lJZCA9IENhcmRhbm9XYXNtLlNjcmlwdEhhc2guZnJvbV9ieXRlcyhCdWZmZXIuZnJvbShhc3NldC5wb2xpY3lfaWQsICdoZXgnKSk7XG4gICAgICAgICAgICAgICAgY29uc3QgbXVsdGlBc3NldCA9IENhcmRhbm9XYXNtLk11bHRpQXNzZXQubmV3KCk7XG4gICAgICAgICAgICAgICAgY29uc3QgYXNzZXRzID0gQ2FyZGFub1dhc20uQXNzZXRzLm5ldygpO1xuICAgICAgICAgICAgICAgIGFzc2V0cy5pbnNlcnQoYXNzZXROYW1lLCBDYXJkYW5vV2FzbS5CaWdOdW0uZnJvbV9zdHIoYXNzZXQucXVhbnRpdHkpKTtcbiAgICAgICAgICAgICAgICBtdWx0aUFzc2V0Lmluc2VydChwb2xpY3lJZCwgYXNzZXRzKTtcblxuICAgICAgICAgICAgICAgIHR4T3V0cHV0QW1vdW50QnVpbGRlciA9IHR4T3V0cHV0QW1vdW50QnVpbGRlci53aXRoX2NvaW5fYW5kX2Fzc2V0KFxuICAgICAgICAgICAgICAgICAgbWluQW1vdW50TmVlZGVkRm9yT25lQXNzZXRPdXRwdXQsXG4gICAgICAgICAgICAgICAgICBtdWx0aUFzc2V0XG4gICAgICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgICAgIGNvbnN0IHR4T3V0cHV0ID0gdHhPdXRwdXRBbW91bnRCdWlsZGVyLmJ1aWxkKCk7XG4gICAgICAgICAgICAgICAgb3V0cHV0cy5hZGQodHhPdXRwdXQpO1xuICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAvLyBmaW5hbGx5IHNlbmQgdGhlIHJlbWFpbmluZyBBREEgaW4gaXRzIG93biBvdXRwdXRcbiAgICAgICAgICAgICAgY29uc3QgcmVtYWluaW5nT3V0cHV0QW1vdW50ID0gY2hhbmdlLmNoZWNrZWRfc3ViKG1pbkFtb3VudE5lZWRlZEZvclRvdGFsQXNzZXRPdXRwdXRzKTtcbiAgICAgICAgICAgICAgY29uc3QgY2hhbmdlT3V0cHV0ID0gQ2FyZGFub1dhc20uVHJhbnNhY3Rpb25PdXRwdXQubmV3KFxuICAgICAgICAgICAgICAgIGNoYW5nZUFkZHJlc3MsXG4gICAgICAgICAgICAgICAgQ2FyZGFub1dhc20uVmFsdWUubmV3KHJlbWFpbmluZ091dHB1dEFtb3VudClcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgb3V0cHV0cy5hZGQoY2hhbmdlT3V0cHV0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gSWYgdGhlcmUgYXJlIG5vIHRva2VucyB0byBjb25zb2xpZGF0ZSwgeW91IG9ubHkgaGF2ZSAxIG91dHB1dCB3aGljaCBpcyBBREEgYWxvbmVcbiAgICAgICAgICAgIGNvbnN0IGNoYW5nZU91dHB1dCA9IENhcmRhbm9XYXNtLlRyYW5zYWN0aW9uT3V0cHV0Lm5ldyhjaGFuZ2VBZGRyZXNzLCBDYXJkYW5vV2FzbS5WYWx1ZS5uZXcoY2hhbmdlKSk7XG4gICAgICAgICAgICBvdXRwdXRzLmFkZChjaGFuZ2VPdXRwdXQpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBJZiB0aGlzIGlzbid0IGEgY29uc29saWRhdGUgcmVxdWVzdCwgd2hhdGV2ZXIgY2hhbmdlIHRoYXQgbmVlZHMgdG8gYmUgc2VudCBiYWNrIHRvIHRoZSByb290YWRkcmVzcyBpcyBhZGRlZCBhcyBhIHNlcGFyYXRlIG91dHB1dCBoZXJlXG4gICAgICAgICAgY29uc3QgY2hhbmdlT3V0cHV0ID0gQ2FyZGFub1dhc20uVHJhbnNhY3Rpb25PdXRwdXQubmV3KGNoYW5nZUFkZHJlc3MsIENhcmRhbm9XYXNtLlZhbHVlLm5ldyhjaGFuZ2UpKTtcbiAgICAgICAgICBvdXRwdXRzLmFkZChjaGFuZ2VPdXRwdXQpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHR4Qm9keSA9IENhcmRhbm9XYXNtLlRyYW5zYWN0aW9uQm9keS5uZXdfdHhfYm9keShpbnB1dHMsIG91dHB1dHMsIHRoaXMuX2ZlZSk7XG4gICAgICB0eEJvZHkuc2V0X3R0bChDYXJkYW5vV2FzbS5CaWdOdW0uZnJvbV9zdHIodGhpcy5fdHRsLnRvU3RyaW5nKCkpKTtcbiAgICAgIGNvbnN0IHR4SGFzaCA9IENhcmRhbm9XYXNtLmhhc2hfdHJhbnNhY3Rpb24odHhCb2R5KTtcblxuICAgICAgLy8gd2UgYWRkIHdpdG5lc3NlcyBvbmNlIHNvIHRoYXQgd2UgY2FuIGdldCB0aGUgYXBwcm9wcmlhdGUgYW1vdW50IG9mIHNpZ25lcnMgZm9yIGNhbGN1bGF0aW5nIHRoZSBmZWVcbiAgICAgIGNvbnN0IHdpdG5lc3NTZXQgPSBDYXJkYW5vV2FzbS5UcmFuc2FjdGlvbldpdG5lc3NTZXQubmV3KCk7XG4gICAgICBjb25zdCB2a2V5V2l0bmVzc2VzID0gQ2FyZGFub1dhc20uVmtleXdpdG5lc3Nlcy5uZXcoKTtcbiAgICAgIHRoaXMuX3NpZ25lcnMuZm9yRWFjaCgoa2V5UGFpcikgPT4ge1xuICAgICAgICBjb25zdCBwcnYgPSBrZXlQYWlyLmdldEtleXMoKS5wcnYgYXMgc3RyaW5nO1xuICAgICAgICBjb25zdCB2a2V5V2l0bmVzcyA9IENhcmRhbm9XYXNtLm1ha2VfdmtleV93aXRuZXNzKFxuICAgICAgICAgIHR4SGFzaCxcbiAgICAgICAgICBDYXJkYW5vV2FzbS5Qcml2YXRlS2V5LmZyb21fbm9ybWFsX2J5dGVzKEJ1ZmZlci5mcm9tKHBydiwgJ2hleCcpKVxuICAgICAgICApO1xuICAgICAgICB2a2V5V2l0bmVzc2VzLmFkZCh2a2V5V2l0bmVzcyk7XG4gICAgICB9KTtcbiAgICAgIHRoaXMuZ2V0QWxsU2lnbmF0dXJlcygpLmZvckVhY2goKHNpZ25hdHVyZSkgPT4ge1xuICAgICAgICBjb25zdCB2a2V5ID0gQ2FyZGFub1dhc20uVmtleS5uZXcoXG4gICAgICAgICAgQ2FyZGFub1dhc20uUHVibGljS2V5LmZyb21fYnl0ZXMoQnVmZmVyLmZyb20oc2lnbmF0dXJlLnB1YmxpY0tleS5wdWIsICdoZXgnKSlcbiAgICAgICAgKTtcbiAgICAgICAgY29uc3QgZWQyNTVTaWcgPSBDYXJkYW5vV2FzbS5FZDI1NTE5U2lnbmF0dXJlLmZyb21fYnl0ZXMoc2lnbmF0dXJlLnNpZ25hdHVyZSk7XG4gICAgICAgIHZrZXlXaXRuZXNzZXMuYWRkKENhcmRhbm9XYXNtLlZrZXl3aXRuZXNzLm5ldyh2a2V5LCBlZDI1NVNpZykpO1xuICAgICAgfSk7XG4gICAgICBpZiAodmtleVdpdG5lc3Nlcy5sZW4oKSA9PT0gMCkge1xuICAgICAgICBjb25zdCBwcnYgPSBDYXJkYW5vV2FzbS5Qcml2YXRlS2V5LmdlbmVyYXRlX2VkMjU1MTkoKTtcbiAgICAgICAgY29uc3QgdmtleVdpdG5lc3MgPSBDYXJkYW5vV2FzbS5tYWtlX3ZrZXlfd2l0bmVzcyh0eEhhc2gsIHBydik7XG4gICAgICAgIHZrZXlXaXRuZXNzZXMuYWRkKHZrZXlXaXRuZXNzKTtcbiAgICAgICAgaWYgKHRoaXMuX3R5cGUgIT09IFRyYW5zYWN0aW9uVHlwZS5TZW5kKSB7XG4gICAgICAgICAgdmtleVdpdG5lc3Nlcy5hZGQodmtleVdpdG5lc3MpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICB3aXRuZXNzU2V0LnNldF92a2V5cyh2a2V5V2l0bmVzc2VzKTtcblxuICAgICAgLy8gYWRkIGluIHdpdGhkcmF3YWwgaWYgdGhpcyBpcyBhIHdpdGhkcmF3YWwgdHhcbiAgICAgIGlmICh0aGlzLl93aXRoZHJhd2Fscy5sZW5ndGggPiAwKSB7XG4gICAgICAgIGNvbnN0IHdpdGhkcmF3YWxzID0gQ2FyZGFub1dhc20uV2l0aGRyYXdhbHMubmV3KCk7XG4gICAgICAgIHRoaXMuX3dpdGhkcmF3YWxzLmZvckVhY2goKHdpdGhkcmF3YWw6IFdpdGhkcmF3YWwpID0+IHtcbiAgICAgICAgICBjb25zdCByZXdhcmRBZGRyZXNzID0gQ2FyZGFub1dhc20uUmV3YXJkQWRkcmVzcy5mcm9tX2FkZHJlc3MoXG4gICAgICAgICAgICBDYXJkYW5vV2FzbS5BZGRyZXNzLmZyb21fYmVjaDMyKHdpdGhkcmF3YWwuc3Rha2VBZGRyZXNzKVxuICAgICAgICAgICk7XG4gICAgICAgICAgd2l0aGRyYXdhbHMuaW5zZXJ0KHJld2FyZEFkZHJlc3MhLCBDYXJkYW5vV2FzbS5CaWdOdW0uZnJvbV9zdHIod2l0aGRyYXdhbC52YWx1ZSkpO1xuICAgICAgICB9KTtcblxuICAgICAgICB0eEJvZHkuc2V0X3dpdGhkcmF3YWxzKHdpdGhkcmF3YWxzKTtcbiAgICAgIH1cblxuICAgICAgLy8gYWRkIGluIGNlcnRpZmljYXRlcyB0byBnZXQgbW9jayBzaXplXG4gICAgICBjb25zdCBkcmFmdENlcnRzID0gQ2FyZGFub1dhc20uQ2VydGlmaWNhdGVzLm5ldygpO1xuICAgICAgZm9yIChjb25zdCBjZXJ0IG9mIHRoaXMuX2NlcnRzKSB7XG4gICAgICAgIGRyYWZ0Q2VydHMuYWRkKGNlcnQpO1xuICAgICAgfVxuICAgICAgdHhCb2R5LnNldF9jZXJ0cyhkcmFmdENlcnRzKTtcblxuICAgICAgY29uc3QgdHhEcmFmdCA9IENhcmRhbm9XYXNtLlRyYW5zYWN0aW9uLm5ldyh0eEJvZHksIHdpdG5lc3NTZXQpO1xuICAgICAgY29uc3QgbGluZWFyRmVlID0gQ2FyZGFub1dhc20uTGluZWFyRmVlLm5ldyhcbiAgICAgICAgQ2FyZGFub1dhc20uQmlnTnVtLmZyb21fc3RyKCc0NCcpLFxuICAgICAgICBDYXJkYW5vV2FzbS5CaWdOdW0uZnJvbV9zdHIoJzE1NTM4MScpXG4gICAgICApO1xuXG4gICAgICAvLyBjYWxjdWxhdGUgdGhlIGZlZSBiYXNlZCBvZmYgb3VyIGR1bW15IHRyYW5zYWN0aW9uXG4gICAgICBjb25zdCBmZWUgPSBDYXJkYW5vV2FzbS5taW5fZmVlKHR4RHJhZnQsIGxpbmVhckZlZSkuY2hlY2tlZF9hZGQoQmlnTnVtLmZyb21fc3RyKCc0NDAnKSk7XG4gICAgICB0aGlzLl9mZWUgPSBmZWU7XG4gICAgfVxuICAgIHRoaXMuX3RyYW5zYWN0aW9uLmZlZSh0aGlzLl9mZWUudG9fc3RyKCkpO1xuICAgIC8vIG5vdyBjYWxjdWxhdGUgdGhlIGNoYW5nZSBiYXNlZCBvZmYgb2YgPHV0eG9CYWxhbmNlPiAtIDxmZWU+IC0gPGFtb3VudFRvU2VuZD5cbiAgICAvLyByZXNldCB0aGUgb3V0cHV0cyBjb2xsZWN0aW9uIGJlY2F1c2Ugbm93IG91ciBsYXN0IG91dHB1dCBoYXMgY2hhbmdlZFxuICAgIG91dHB1dHMgPSBDYXJkYW5vV2FzbS5UcmFuc2FjdGlvbk91dHB1dHMubmV3KCk7XG4gICAgdGhpcy5fdHJhbnNhY3Rpb25PdXRwdXRzLmZvckVhY2goKG91dHB1dCkgPT4ge1xuICAgICAgaWYgKG91dHB1dC5tdWx0aUFzc2V0cykge1xuICAgICAgICBjb25zdCBwb2xpY3lJZCA9IG91dHB1dC5tdWx0aUFzc2V0cy5rZXlzKCkuZ2V0KDApO1xuICAgICAgICBjb25zdCBhc3NldHMgPSBvdXRwdXQubXVsdGlBc3NldHMuZ2V0KHBvbGljeUlkKTtcbiAgICAgICAgY29uc3QgYXNzZXROYW1lID0gYXNzZXRzIS5rZXlzKCkuZ2V0KDApO1xuICAgICAgICBjb25zdCBxdWFudGl0eSA9IGFzc2V0cyEuZ2V0KGFzc2V0TmFtZSk7XG4gICAgICAgIGxldCB0eE91dHB1dEJ1aWxkZXIgPSBDYXJkYW5vV2FzbS5UcmFuc2FjdGlvbk91dHB1dEJ1aWxkZXIubmV3KCk7XG4gICAgICAgIGNvbnN0IG91dHB1dEFtb3VudCA9IENhcmRhbm9XYXNtLkJpZ051bS5mcm9tX3N0cihvdXRwdXQuYW1vdW50KTtcbiAgICAgICAgY29uc3QgdG9BZGRyZXNzID0gQ2FyZGFub1dhc20uQWRkcmVzcy5mcm9tX2JlY2gzMihvdXRwdXQuYWRkcmVzcyk7XG4gICAgICAgIHR4T3V0cHV0QnVpbGRlciA9IHR4T3V0cHV0QnVpbGRlci53aXRoX2FkZHJlc3ModG9BZGRyZXNzKTtcbiAgICAgICAgbGV0IHR4T3V0cHV0QW1vdW50QnVpbGRlciA9IHR4T3V0cHV0QnVpbGRlci5uZXh0KCk7XG4gICAgICAgIGNvbnN0IG11bHRpQXNzZXQgPSBDYXJkYW5vV2FzbS5NdWx0aUFzc2V0Lm5ldygpO1xuICAgICAgICBjb25zdCBhc3NldCA9IENhcmRhbm9XYXNtLkFzc2V0cy5uZXcoKTtcbiAgICAgICAgYXNzZXQuaW5zZXJ0KGFzc2V0TmFtZSwgcXVhbnRpdHkhKTtcbiAgICAgICAgbXVsdGlBc3NldC5pbnNlcnQocG9saWN5SWQsIGFzc2V0KTtcbiAgICAgICAgdHhPdXRwdXRBbW91bnRCdWlsZGVyID0gdHhPdXRwdXRBbW91bnRCdWlsZGVyLndpdGhfY29pbl9hbmRfYXNzZXQob3V0cHV0QW1vdW50LCBtdWx0aUFzc2V0KTtcbiAgICAgICAgY29uc3QgdHhPdXRwdXQgPSB0eE91dHB1dEFtb3VudEJ1aWxkZXIuYnVpbGQoKTtcbiAgICAgICAgb3V0cHV0cy5hZGQodHhPdXRwdXQpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgb3V0cHV0cy5hZGQoXG4gICAgICAgICAgQ2FyZGFub1dhc20uVHJhbnNhY3Rpb25PdXRwdXQubmV3KFxuICAgICAgICAgICAgQ2FyZGFub1dhc20uQWRkcmVzcy5mcm9tX2JlY2gzMihvdXRwdXQuYWRkcmVzcyksXG4gICAgICAgICAgICBDYXJkYW5vV2FzbS5WYWx1ZS5uZXcoQ2FyZGFub1dhc20uQmlnTnVtLmZyb21fc3RyKG91dHB1dC5hbW91bnQpKVxuICAgICAgICAgIClcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBpZiAodGhpcy5fY2hhbmdlQWRkcmVzcyAmJiB0aGlzLl9zZW5kZXJCYWxhbmNlKSB7XG4gICAgICBjb25zdCBjaGFuZ2VBZGRyZXNzID0gQ2FyZGFub1dhc20uQWRkcmVzcy5mcm9tX2JlY2gzMih0aGlzLl9jaGFuZ2VBZGRyZXNzKTtcbiAgICAgIGNvbnN0IHV0eG9CYWxhbmNlID0gQ2FyZGFub1dhc20uQmlnTnVtLmZyb21fc3RyKHRoaXMuX3NlbmRlckJhbGFuY2UpO1xuXG4gICAgICBjb25zdCBhZGp1c3RtZW50ID0gQmlnTnVtLmZyb21fc3RyKCcyMDAwMDAwJyk7XG4gICAgICBsZXQgY2hhbmdlID0gdXR4b0JhbGFuY2UuY2hlY2tlZF9zdWIodGhpcy5fZmVlKS5jaGVja2VkX3N1Yih0b3RhbEFtb3VudFRvU2VuZCk7XG4gICAgICBpZiAodGhpcy5fdHlwZSA9PT0gVHJhbnNhY3Rpb25UeXBlLlN0YWtpbmdBY3RpdmF0ZSkge1xuICAgICAgICBjaGFuZ2UgPSBjaGFuZ2UuY2hlY2tlZF9zdWIoYWRqdXN0bWVudCk7XG4gICAgICB9IGVsc2UgaWYgKHRoaXMuX3R5cGUgPT09IFRyYW5zYWN0aW9uVHlwZS5TdGFraW5nRGVhY3RpdmF0ZSkge1xuICAgICAgICBjaGFuZ2UgPSBjaGFuZ2UuY2hlY2tlZF9hZGQoYWRqdXN0bWVudCk7XG4gICAgICB9IGVsc2UgaWYgKHRoaXMuX3R5cGUgPT09IFRyYW5zYWN0aW9uVHlwZS5TdGFraW5nV2l0aGRyYXcgfHwgdGhpcy5fdHlwZSA9PT0gVHJhbnNhY3Rpb25UeXBlLlN0YWtpbmdDbGFpbSkge1xuICAgICAgICB0aGlzLl93aXRoZHJhd2Fscy5mb3JFYWNoKCh3aXRoZHJhd2FsOiBXaXRoZHJhd2FsKSA9PiB7XG4gICAgICAgICAgY2hhbmdlID0gY2hhbmdlLmNoZWNrZWRfYWRkKENhcmRhbm9XYXNtLkJpZ051bS5mcm9tX3N0cih3aXRoZHJhd2FsLnZhbHVlKSk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICAvLyBJZiB0b3RhbEFtb3VudFRvU2VuZCBpcyAwLCBpdHMgY29uc29saWRhdGlvblxuICAgICAgaWYgKHRvdGFsQW1vdW50VG9TZW5kLnRvX3N0cigpID09ICcwJykge1xuICAgICAgICAvLyBzdXBwb3J0IGZvciBtdWx0aS1hc3NldCBjb25zb2xpZGF0aW9uXG4gICAgICAgIGlmICh0aGlzLl9tdWx0aUFzc2V0cyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgY29uc3QgdG90YWxOdW1iZXJPZkFzc2V0cyA9IENhcmRhbm9XYXNtLkJpZ051bS5mcm9tX3N0cih0aGlzLl9tdWx0aUFzc2V0cy5sZW5ndGgudG9TdHJpbmcoKSk7XG4gICAgICAgICAgY29uc3QgbWluQW1vdW50TmVlZGVkRm9yT25lQXNzZXRPdXRwdXQgPSBDYXJkYW5vV2FzbS5CaWdOdW0uZnJvbV9zdHIoJzE1MDAwMDAnKTtcbiAgICAgICAgICBjb25zdCBtaW5BbW91bnROZWVkZWRGb3JUb3RhbEFzc2V0T3V0cHV0cyA9IG1pbkFtb3VudE5lZWRlZEZvck9uZUFzc2V0T3V0cHV0LmNoZWNrZWRfbXVsKHRvdGFsTnVtYmVyT2ZBc3NldHMpO1xuXG4gICAgICAgICAgaWYgKCFjaGFuZ2UubGVzc190aGFuKG1pbkFtb3VudE5lZWRlZEZvclRvdGFsQXNzZXRPdXRwdXRzKSkge1xuICAgICAgICAgICAgdGhpcy5fbXVsdGlBc3NldHMuZm9yRWFjaCgoYXNzZXQpID0+IHtcbiAgICAgICAgICAgICAgbGV0IHR4T3V0cHV0QnVpbGRlciA9IENhcmRhbm9XYXNtLlRyYW5zYWN0aW9uT3V0cHV0QnVpbGRlci5uZXcoKTtcbiAgICAgICAgICAgICAgLy8gY2hhbmdlQWRkcmVzcyBpcyB0aGUgcm9vdCBhZGRyZXNzLCB3aGljaCBpcyB3aGVyZSB3ZSB3YW50IHRoZSB0b2tlbnMgYXNzZXRzIHRvIGJlIHNlbnQgdG9cbiAgICAgICAgICAgICAgY29uc3QgdG9BZGRyZXNzID0gQ2FyZGFub1dhc20uQWRkcmVzcy5mcm9tX2JlY2gzMih0aGlzLl9jaGFuZ2VBZGRyZXNzKTtcbiAgICAgICAgICAgICAgdHhPdXRwdXRCdWlsZGVyID0gdHhPdXRwdXRCdWlsZGVyLndpdGhfYWRkcmVzcyh0b0FkZHJlc3MpO1xuICAgICAgICAgICAgICBsZXQgdHhPdXRwdXRBbW91bnRCdWlsZGVyID0gdHhPdXRwdXRCdWlsZGVyLm5leHQoKTtcbiAgICAgICAgICAgICAgY29uc3QgYXNzZXROYW1lID0gQ2FyZGFub1dhc20uQXNzZXROYW1lLm5ldyhCdWZmZXIuZnJvbShhc3NldC5hc3NldF9uYW1lLCAnaGV4JykpO1xuICAgICAgICAgICAgICBjb25zdCBwb2xpY3lJZCA9IENhcmRhbm9XYXNtLlNjcmlwdEhhc2guZnJvbV9ieXRlcyhCdWZmZXIuZnJvbShhc3NldC5wb2xpY3lfaWQsICdoZXgnKSk7XG4gICAgICAgICAgICAgIGNvbnN0IG11bHRpQXNzZXQgPSBDYXJkYW5vV2FzbS5NdWx0aUFzc2V0Lm5ldygpO1xuICAgICAgICAgICAgICBjb25zdCBhc3NldHMgPSBDYXJkYW5vV2FzbS5Bc3NldHMubmV3KCk7XG4gICAgICAgICAgICAgIGFzc2V0cy5pbnNlcnQoYXNzZXROYW1lLCBDYXJkYW5vV2FzbS5CaWdOdW0uZnJvbV9zdHIoYXNzZXQucXVhbnRpdHkpKTtcbiAgICAgICAgICAgICAgbXVsdGlBc3NldC5pbnNlcnQocG9saWN5SWQsIGFzc2V0cyk7XG5cbiAgICAgICAgICAgICAgdHhPdXRwdXRBbW91bnRCdWlsZGVyID0gdHhPdXRwdXRBbW91bnRCdWlsZGVyLndpdGhfY29pbl9hbmRfYXNzZXQoXG4gICAgICAgICAgICAgICAgbWluQW1vdW50TmVlZGVkRm9yT25lQXNzZXRPdXRwdXQsXG4gICAgICAgICAgICAgICAgbXVsdGlBc3NldFxuICAgICAgICAgICAgICApO1xuXG4gICAgICAgICAgICAgIGNvbnN0IHR4T3V0cHV0ID0gdHhPdXRwdXRBbW91bnRCdWlsZGVyLmJ1aWxkKCk7XG4gICAgICAgICAgICAgIG91dHB1dHMuYWRkKHR4T3V0cHV0KTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAvLyBmaW5hbGx5IHNlbmQgdGhlIHJlbWFpbmluZyBBREEgaW4gaXRzIG93biBvdXRwdXRcbiAgICAgICAgICAgIGNvbnN0IHJlbWFpbmluZ091dHB1dEFtb3VudCA9IGNoYW5nZS5jaGVja2VkX3N1YihtaW5BbW91bnROZWVkZWRGb3JUb3RhbEFzc2V0T3V0cHV0cyk7XG4gICAgICAgICAgICBjb25zdCBjaGFuZ2VPdXRwdXQgPSBDYXJkYW5vV2FzbS5UcmFuc2FjdGlvbk91dHB1dC5uZXcoXG4gICAgICAgICAgICAgIGNoYW5nZUFkZHJlc3MsXG4gICAgICAgICAgICAgIENhcmRhbm9XYXNtLlZhbHVlLm5ldyhyZW1haW5pbmdPdXRwdXRBbW91bnQpXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgb3V0cHV0cy5hZGQoY2hhbmdlT3V0cHV0KTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEJ1aWxkVHJhbnNhY3Rpb25FcnJvcihcbiAgICAgICAgICAgICAgJ0luc3VmZmljaWVudCBmdW5kczogbmVlZCBhIG1pbmltdW0gb2YgMS41IEFEQSBwZXIgb3V0cHV0IHRvIGNvbnN0cnVjdCB0b2tlbiBjb25zb2xpZGF0aW9uJ1xuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gSWYgdGhlcmUgYXJlIG5vIHRva2VucyB0byBjb25zb2xpZGF0ZSwgeW91IG9ubHkgaGF2ZSAxIG91dHB1dCB3aGljaCBpcyBBREEgYWxvbmVcbiAgICAgICAgICBjb25zdCBjaGFuZ2VPdXRwdXQgPSBDYXJkYW5vV2FzbS5UcmFuc2FjdGlvbk91dHB1dC5uZXcoY2hhbmdlQWRkcmVzcywgQ2FyZGFub1dhc20uVmFsdWUubmV3KGNoYW5nZSkpO1xuICAgICAgICAgIG91dHB1dHMuYWRkKGNoYW5nZU91dHB1dCk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIElmIHRoaXMgaXNuJ3QgYSBjb25zb2xpZGF0ZSByZXF1ZXN0LCB3aGF0ZXZlciBjaGFuZ2UgdGhhdCBuZWVkcyB0byBiZSBzZW50IGJhY2sgdG8gdGhlIHJvb3RhZGRyZXNzIGlzIGFkZGVkIGFzIGEgc2VwYXJhdGUgb3V0cHV0IGhlcmVcbiAgICAgICAgY29uc3QgY2hhbmdlT3V0cHV0ID0gQ2FyZGFub1dhc20uVHJhbnNhY3Rpb25PdXRwdXQubmV3KGNoYW5nZUFkZHJlc3MsIENhcmRhbm9XYXNtLlZhbHVlLm5ldyhjaGFuZ2UpKTtcbiAgICAgICAgb3V0cHV0cy5hZGQoY2hhbmdlT3V0cHV0KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCB0eFJhdyA9IENhcmRhbm9XYXNtLlRyYW5zYWN0aW9uQm9keS5uZXdfdHhfYm9keShpbnB1dHMsIG91dHB1dHMsIHRoaXMuX2ZlZSk7XG5cbiAgICBjb25zdCBjZXJ0cyA9IENhcmRhbm9XYXNtLkNlcnRpZmljYXRlcy5uZXcoKTtcbiAgICBmb3IgKGNvbnN0IGNlcnQgb2YgdGhpcy5fY2VydHMpIHtcbiAgICAgIGNlcnRzLmFkZChjZXJ0KTtcbiAgICB9XG4gICAgdHhSYXcuc2V0X2NlcnRzKGNlcnRzKTtcblxuICAgIC8vIGFkZCBpbiB3aXRoZHJhd2FsIGlmIHRoaXMgaXMgYSB3aXRoZHJhd2FsIHR4XG4gICAgaWYgKHRoaXMuX3dpdGhkcmF3YWxzLmxlbmd0aCA+IDApIHtcbiAgICAgIGNvbnN0IHdpdGhkcmF3YWxzID0gQ2FyZGFub1dhc20uV2l0aGRyYXdhbHMubmV3KCk7XG4gICAgICB0aGlzLl93aXRoZHJhd2Fscy5mb3JFYWNoKCh3aXRoZHJhd2FsOiBXaXRoZHJhd2FsKSA9PiB7XG4gICAgICAgIGNvbnN0IHJld2FyZEFkZHJlc3MgPSBDYXJkYW5vV2FzbS5SZXdhcmRBZGRyZXNzLmZyb21fYWRkcmVzcyhcbiAgICAgICAgICBDYXJkYW5vV2FzbS5BZGRyZXNzLmZyb21fYmVjaDMyKHdpdGhkcmF3YWwuc3Rha2VBZGRyZXNzKVxuICAgICAgICApO1xuICAgICAgICB3aXRoZHJhd2Fscy5pbnNlcnQocmV3YXJkQWRkcmVzcyEsIENhcmRhbm9XYXNtLkJpZ051bS5mcm9tX3N0cih3aXRoZHJhd2FsLnZhbHVlKSk7XG4gICAgICB9KTtcblxuICAgICAgdHhSYXcuc2V0X3dpdGhkcmF3YWxzKHdpdGhkcmF3YWxzKTtcbiAgICB9XG5cbiAgICB0eFJhdy5zZXRfdHRsKENhcmRhbm9XYXNtLkJpZ051bS5mcm9tX3N0cih0aGlzLl90dGwudG9TdHJpbmcoKSkpO1xuICAgIGNvbnN0IHR4UmF3SGFzaCA9IENhcmRhbm9XYXNtLmhhc2hfdHJhbnNhY3Rpb24odHhSYXcpO1xuXG4gICAgLy8gbm93IGFkZCB0aGUgd2l0bmVzc2VzIGFnYWluIHRoaXMgdGltZSBmb3IgcmVhbC4gV2UgbmVlZCB0byBkbyB0aGlzIGFnYWluXG4gICAgLy8gYmVjYXVzZSBub3cgdGhhdCB3ZSd2ZSBhZGRlZCBvdXIgcmVhbCBmZWUgYW5kIGNoYW5nZSBvdXRwdXQsIHdlIGhhdmUgYSBkaWZmZXJlbmNlIHRyYW5zYWN0aW9uIGhhc2hcbiAgICBjb25zdCB3aXRuZXNzU2V0ID0gQ2FyZGFub1dhc20uVHJhbnNhY3Rpb25XaXRuZXNzU2V0Lm5ldygpO1xuICAgIGNvbnN0IHZrZXlXaXRuZXNzZXMgPSBDYXJkYW5vV2FzbS5Wa2V5d2l0bmVzc2VzLm5ldygpO1xuICAgIHRoaXMuX3NpZ25lcnMuZm9yRWFjaCgoa2V5UGFpcikgPT4ge1xuICAgICAgY29uc3QgcHJ2ID0ga2V5UGFpci5nZXRLZXlzKCkucHJ2IGFzIHN0cmluZztcbiAgICAgIGNvbnN0IHZrZXlXaXRuZXNzID0gQ2FyZGFub1dhc20ubWFrZV92a2V5X3dpdG5lc3MoXG4gICAgICAgIHR4UmF3SGFzaCxcbiAgICAgICAgQ2FyZGFub1dhc20uUHJpdmF0ZUtleS5mcm9tX25vcm1hbF9ieXRlcyhCdWZmZXIuZnJvbShwcnYsICdoZXgnKSlcbiAgICAgICk7XG4gICAgICB2a2V5V2l0bmVzc2VzLmFkZCh2a2V5V2l0bmVzcyk7XG4gICAgfSk7XG5cbiAgICAvLyBDbGVhciB0aGUgY29zbWV0aWMgc2lnbmF0dXJlIGFycmF5IGluIG5hdGl2ZSB0eG4gd3JhcHBlciB0byBwcmV2ZW50IGR1cGxpY2F0ZSB3aGVuIGJ1aWxkZXIgaXMgaW5pdGVkIGZyb20gYSBwYXJ0aWFsbHkgd2l0bmVzc2VkIHR4blxuICAgIHRoaXMuX3RyYW5zYWN0aW9uLnNpZ25hdHVyZS5sZW5ndGggPSAwO1xuICAgIHRoaXMuZ2V0QWxsU2lnbmF0dXJlcygpLmZvckVhY2goKHNpZ25hdHVyZSkgPT4ge1xuICAgICAgY29uc3QgdmtleSA9IENhcmRhbm9XYXNtLlZrZXkubmV3KENhcmRhbm9XYXNtLlB1YmxpY0tleS5mcm9tX2J5dGVzKEJ1ZmZlci5mcm9tKHNpZ25hdHVyZS5wdWJsaWNLZXkucHViLCAnaGV4JykpKTtcbiAgICAgIGNvbnN0IGVkMjU1U2lnID0gQ2FyZGFub1dhc20uRWQyNTUxOVNpZ25hdHVyZS5mcm9tX2J5dGVzKHNpZ25hdHVyZS5zaWduYXR1cmUpO1xuICAgICAgdmtleVdpdG5lc3Nlcy5hZGQoQ2FyZGFub1dhc20uVmtleXdpdG5lc3MubmV3KHZrZXksIGVkMjU1U2lnKSk7XG4gICAgICB0aGlzLl90cmFuc2FjdGlvbi5zaWduYXR1cmUucHVzaChzaWduYXR1cmUuc2lnbmF0dXJlLnRvU3RyaW5nKCdoZXgnKSk7XG4gICAgfSk7XG4gICAgd2l0bmVzc1NldC5zZXRfdmtleXModmtleVdpdG5lc3Nlcyk7XG4gICAgdGhpcy5fdHJhbnNhY3Rpb24udHJhbnNhY3Rpb24gPSBDYXJkYW5vV2FzbS5UcmFuc2FjdGlvbi5uZXcodHhSYXcsIHdpdG5lc3NTZXQpO1xuICAgIHJldHVybiB0aGlzLnRyYW5zYWN0aW9uO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0ZG9jICovXG4gIHByb3RlY3RlZCBzaWduSW1wbGVtZW50YXRpb24oa2V5OiBCYXNlS2V5KTogVHJhbnNhY3Rpb24ge1xuICAgIHRoaXMuX3NpZ25lcnMucHVzaChuZXcgS2V5UGFpcih7IHBydjoga2V5LmtleSB9KSk7XG4gICAgcmV0dXJuIHRoaXMuX3RyYW5zYWN0aW9uO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0ZG9jICovXG4gIHByb3RlY3RlZCBnZXQgdHJhbnNhY3Rpb24oKTogVHJhbnNhY3Rpb24ge1xuICAgIHJldHVybiB0aGlzLl90cmFuc2FjdGlvbjtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdGRvYyAqL1xuICBwcm90ZWN0ZWQgc2V0IHRyYW5zYWN0aW9uKHRyYW5zYWN0aW9uOiBUcmFuc2FjdGlvbikge1xuICAgIHRoaXMuX3RyYW5zYWN0aW9uID0gdHJhbnNhY3Rpb247XG4gIH1cblxuICAvKiogQGluaGVyaXRkb2MgKi9cbiAgdmFsaWRhdGVBZGRyZXNzKGFkZHJlc3M6IEJhc2VBZGRyZXNzLCBhZGRyZXNzRm9ybWF0Pzogc3RyaW5nKTogdm9pZCB7XG4gICAgaWYgKCF1dGlsLmlzVmFsaWRBZGRyZXNzKGFkZHJlc3MuYWRkcmVzcykpIHtcbiAgICAgIHRocm93IG5ldyBVdGlsc0Vycm9yKCdpbnZhbGlkIGFkZHJlc3MgJyArIGFkZHJlc3MuYWRkcmVzcyk7XG4gICAgfVxuICB9XG5cbiAgLyoqIEBpbmhlcml0ZG9jICovXG4gIHZhbGlkYXRlS2V5KGtleTogQmFzZUtleSk6IHZvaWQge1xuICAgIHRyeSB7XG4gICAgICBuZXcgS2V5UGFpcih7IHBydjoga2V5LmtleSB9KTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIHRocm93IG5ldyBCdWlsZFRyYW5zYWN0aW9uRXJyb3IoYEtleSB2YWxpZGF0aW9uIGZhaWxlZGApO1xuICAgIH1cbiAgfVxuXG4gIC8qKiBAaW5oZXJpdGRvYyAqL1xuICB2YWxpZGF0ZVJhd1RyYW5zYWN0aW9uKHJhd1RyYW5zYWN0aW9uOiBhbnkpOiB2b2lkIHtcbiAgICB0cnkge1xuICAgICAgQ2FyZGFub1dhc20uVHJhbnNhY3Rpb24uZnJvbV9ieXRlcyhyYXdUcmFuc2FjdGlvbik7XG4gICAgfSBjYXRjaCB7XG4gICAgICB0aHJvdyBuZXcgQnVpbGRUcmFuc2FjdGlvbkVycm9yKCdpbnZhbGlkIHJhdyB0cmFuc2FjdGlvbicpO1xuICAgIH1cbiAgfVxuXG4gIC8qKiBAaW5oZXJpdGRvYyAqL1xuICB2YWxpZGF0ZVRyYW5zYWN0aW9uKHRyYW5zYWN0aW9uOiBUcmFuc2FjdGlvbik6IHZvaWQge1xuICAgIGlmICghdHJhbnNhY3Rpb24udHJhbnNhY3Rpb24pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gIH1cblxuICAvKiogQGluaGVyaXRkb2MgKi9cbiAgdmFsaWRhdGVWYWx1ZSh2YWx1ZTogQmlnTnVtYmVyKTogdm9pZCB7XG4gICAgaWYgKHZhbHVlLmlzTGVzc1RoYW4oMCkpIHtcbiAgICAgIHRocm93IG5ldyBCdWlsZFRyYW5zYWN0aW9uRXJyb3IoJ1ZhbHVlIGNhbm5vdCBiZSBsZXNzIHRoYW4gemVybycpO1xuICAgIH1cbiAgfVxuICAvLyBlbmRyZWdpb25cblxuICAvKiogQGluaGVyaXREb2MgKi9cbiAgYWRkU2lnbmF0dXJlKHB1YmxpY0tleTogQmFzZVB1YmxpY0tleSwgc2lnbmF0dXJlOiBCdWZmZXIpOiB2b2lkIHtcbiAgICB0aGlzLl9zaWduYXR1cmVzLnB1c2goeyBwdWJsaWNLZXksIHNpZ25hdHVyZSB9KTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0QWxsU2lnbmF0dXJlcygpOiBTaWduYXR1cmVbXSB7XG4gICAgcmV0dXJuIHRoaXMuX2luaXRTaWduYXR1cmVzLmNvbmNhdCh0aGlzLl9zaWduYXR1cmVzKTtcbiAgfVxufVxuIl19
445
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNhY3Rpb25CdWlsZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xpYi90cmFuc2FjdGlvbkJ1aWxkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBRUEsbURBUzhCO0FBQzlCLCtDQUFvRztBQUNwRyx1Q0FBb0M7QUFDcEMsaURBQXNEO0FBQ3RELHNGQUF3RTtBQUN4RSwrRkFBa0U7QUFFbEUsTUFBc0Isa0JBQW1CLFNBQVEsaUNBQXNCO0lBZ0JyRSxZQUFZLFdBQWlDO1FBQzNDLEtBQUssQ0FBQyxXQUFXLENBQUMsQ0FBQztRQWZYLGFBQVEsR0FBYyxFQUFFLENBQUM7UUFDekIsdUJBQWtCLEdBQXVCLEVBQUUsQ0FBQztRQUM1Qyx3QkFBbUIsR0FBd0IsRUFBRSxDQUFDO1FBQzlDLG9CQUFlLEdBQWdCLEVBQUUsQ0FBQztRQUNsQyxnQkFBVyxHQUFnQixFQUFFLENBQUM7UUFHOUIsU0FBSSxHQUFHLENBQUMsQ0FBQztRQUNULFdBQU0sR0FBOEIsRUFBRSxDQUFDO1FBQ3ZDLGlCQUFZLEdBQWlCLEVBQUUsQ0FBQztRQUVoQyxpQkFBWSxHQUFZLEVBQUUsQ0FBQztRQUtuQyxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUkseUJBQVcsQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUNoRCxJQUFJLENBQUMsSUFBSSxHQUFHLHlDQUFNLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDNUIsQ0FBQztJQUVELEtBQUssQ0FBQyxDQUFtQjtRQUN2QixJQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2hDLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVELE1BQU0sQ0FBQyxDQUFvQjtRQUN6QixJQUFJLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2pDLE9BQU8sSUFBSSxDQUFDO0lBQ2Qs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LENBQUM7WUFDeEIsTUFBTSxJQUFJLGdDQUFxQixDQUFDLGdDQUFnQyxDQUFDLENBQUM7UUFDcEUsQ0FBQztJQUNILENBQUM7SUFDRCxZQUFZO0lBRVosa0JBQWtCO0lBQ2xCLFlBQVksQ0FBQyxTQUF3QixFQUFFLFNBQWlCO1FBQ3RELElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxDQUFDLENBQUM7SUFDbEQsQ0FBQztJQUVPLGdCQUFnQjtRQUN0QixPQUFPLElBQUksQ0FBQyxlQUFlLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUN2RCxDQUFDO0NBQ0Y7QUF0ZUQsZ0RBc2VDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IEJpZ051bWJlciBmcm9tICdiaWdudW1iZXIuanMnO1xuaW1wb3J0IHsgQmFzZUNvaW4gYXMgQ29pbkNvbmZpZyB9IGZyb20gJ0BiaXRnby1iZXRhL3N0YXRpY3MnO1xuaW1wb3J0IHtcbiAgQmFzZUFkZHJlc3MsXG4gIEJhc2VLZXksXG4gIEJhc2VUcmFuc2FjdGlvbkJ1aWxkZXIsXG4gIEJ1aWxkVHJhbnNhY3Rpb25FcnJvcixcbiAgUHVibGljS2V5IGFzIEJhc2VQdWJsaWNLZXksXG4gIFNpZ25hdHVyZSxcbiAgVHJhbnNhY3Rpb25UeXBlLFxuICBVdGlsc0Vycm9yLFxufSBmcm9tICdAYml0Z28tYmV0YS9zZGstY29yZSc7XG5pbXBvcnQgeyBBc3NldCwgVHJhbnNhY3Rpb24sIFRyYW5zYWN0aW9uSW5wdXQsIFRyYW5zYWN0aW9uT3V0cHV0LCBXaXRoZHJhd2FsIH0gZnJvbSAnLi90cmFuc2FjdGlvbic7XG5pbXBvcnQgeyBLZXlQYWlyIH0gZnJvbSAnLi9rZXlQYWlyJztcbmltcG9ydCB1dGlsLCB7IE1JTl9BREFfRk9SX09ORV9BU1NFVCB9IGZyb20gJy4vdXRpbHMnO1xuaW1wb3J0ICogYXMgQ2FyZGFub1dhc20gZnJvbSAnQGVtdXJnby9jYXJkYW5vLXNlcmlhbGl6YXRpb24tbGliLW5vZGVqcyc7XG5pbXBvcnQgeyBCaWdOdW0gfSBmcm9tICdAZW11cmdvL2NhcmRhbm8tc2VyaWFsaXphdGlvbi1saWItbm9kZWpzJztcblxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIFRyYW5zYWN0aW9uQnVpbGRlciBleHRlbmRzIEJhc2VUcmFuc2FjdGlvbkJ1aWxkZXIge1xuICBwcm90ZWN0ZWQgX3RyYW5zYWN0aW9uITogVHJhbnNhY3Rpb247XG4gIHByb3RlY3RlZCBfc2lnbmVyczogS2V5UGFpcltdID0gW107XG4gIHByb3RlY3RlZCBfdHJhbnNhY3Rpb25JbnB1dHM6IFRyYW5zYWN0aW9uSW5wdXRbXSA9IFtdO1xuICBwcm90ZWN0ZWQgX3RyYW5zYWN0aW9uT3V0cHV0czogVHJhbnNhY3Rpb25PdXRwdXRbXSA9IFtdO1xuICBwcm90ZWN0ZWQgX2luaXRTaWduYXR1cmVzOiBTaWduYXR1cmVbXSA9IFtdO1xuICBwcm90ZWN0ZWQgX3NpZ25hdHVyZXM6IFNpZ25hdHVyZVtdID0gW107XG4gIHByb3RlY3RlZCBfY2hhbmdlQWRkcmVzczogc3RyaW5nO1xuICBwcm90ZWN0ZWQgX3NlbmRlckJhbGFuY2U6IHN0cmluZztcbiAgcHJvdGVjdGVkIF90dGwgPSAwO1xuICBwcm90ZWN0ZWQgX2NlcnRzOiBDYXJkYW5vV2FzbS5DZXJ0aWZpY2F0ZVtdID0gW107XG4gIHByb3RlY3RlZCBfd2l0aGRyYXdhbHM6IFdpdGhkcmF3YWxbXSA9IFtdO1xuICBwcm90ZWN0ZWQgX3R5cGU6IFRyYW5zYWN0aW9uVHlwZTtcbiAgcHJvdGVjdGVkIF9tdWx0aUFzc2V0czogQXNzZXRbXSA9IFtdO1xuICBwcml2YXRlIF9mZWU6IEJpZ051bTtcblxuICBjb25zdHJ1Y3RvcihfY29pbkNvbmZpZzogUmVhZG9ubHk8Q29pbkNvbmZpZz4pIHtcbiAgICBzdXBlcihfY29pbkNvbmZpZyk7XG4gICAgdGhpcy50cmFuc2FjdGlvbiA9IG5ldyBUcmFuc2FjdGlvbihfY29pbkNvbmZpZyk7XG4gICAgdGhpcy5fZmVlID0gQmlnTnVtLnplcm8oKTtcbiAgfVxuXG4gIGlucHV0KGk6IFRyYW5zYWN0aW9uSW5wdXQpOiB0aGlzIHtcbiAgICB0aGlzLl90cmFuc2FjdGlvbklucHV0cy5wdXNoKGkpO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgb3V0cHV0KG86IFRyYW5zYWN0aW9uT3V0cHV0KTogdGhpcyB7XG4gICAgdGhpcy5fdHJhbnNhY3Rpb25PdXRwdXRzLnB1c2gobyk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBhc3NldHMoYTogQXNzZXQpOiB0aGlzIHtcbiAgICB0aGlzLl9tdWx0aUFzc2V0cy5wdXNoKGEpO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgdHRsKHQ6IG51bWJlcik6IHRoaXMge1xuICAgIHRoaXMuX3R0bCA9IHQ7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBjaGFuZ2VBZGRyZXNzKGFkZHI6IHN0cmluZywgdG90YWxJbnB1dEJhbGFuY2U6IHN0cmluZyk6IHRoaXMge1xuICAgIHRoaXMuX2NoYW5nZUFkZHJlc3MgPSBhZGRyO1xuICAgIHRoaXMuX3NlbmRlckJhbGFuY2UgPSB0b3RhbElucHV0QmFsYW5jZTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIGZlZShmZWU6IHN0cmluZyk6IHRoaXMge1xuICAgIHRoaXMuX2ZlZSA9IEJpZ051bS5mcm9tX3N0cihmZWUpO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIEluaXRpYWxpemUgdGhlIHRyYW5zYWN0aW9uIGJ1aWxkZXIgZmllbGRzIHVzaW5nIHRoZSBkZWNvZGVkIHRyYW5zYWN0aW9uIGRhdGFcbiAgICpcbiAgICogQHBhcmFtIHtUcmFuc2FjdGlvbn0gdHggdGhlIHRyYW5zYWN0aW9uIGRhdGFcbiAgICovXG4gIGluaXRCdWlsZGVyKHR4OiBUcmFuc2FjdGlvbik6IHZvaWQge1xuICAgIHRoaXMuX3RyYW5zYWN0aW9uID0gdHg7XG4gICAgY29uc3QgdHhuQm9keSA9IHR4LnRyYW5zYWN0aW9uLmJvZHkoKTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHR4bkJvZHkuaW5wdXRzKCkubGVuKCk7IGkrKykge1xuICAgICAgY29uc3QgaW5wdXQgPSB0eG5Cb2R5LmlucHV0cygpLmdldChpKTtcbiAgICAgIHRoaXMuaW5wdXQoe1xuICAgICAgICB0cmFuc2FjdGlvbl9pZDogQnVmZmVyLmZyb20oaW5wdXQudHJhbnNhY3Rpb25faWQoKS50b19ieXRlcygpKS50b1N0cmluZygnaGV4JyksXG4gICAgICAgIHRyYW5zYWN0aW9uX2luZGV4OiBpbnB1dC5pbmRleCgpLFxuICAgICAgfSk7XG4gICAgfVxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdHhuQm9keS5vdXRwdXRzKCkubGVuKCk7IGkrKykge1xuICAgICAgY29uc3Qgb3V0cHV0ID0gdHhuQm9keS5vdXRwdXRzKCkuZ2V0KGkpO1xuICAgICAgdGhpcy5vdXRwdXQoe1xuICAgICAgICBhZGRyZXNzOiBvdXRwdXQuYWRkcmVzcygpLnRvX2JlY2gzMigpLFxuICAgICAgICBhbW91bnQ6IG91dHB1dC5hbW91bnQoKS5jb2luKCkudG9fc3RyKCksXG4gICAgICAgIG11bHRpQXNzZXRzOiBvdXRwdXQuYW1vdW50KCkubXVsdGlhc3NldCgpIHx8IHVuZGVmaW5lZCxcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGlmICh0eG5Cb2R5LmNlcnRzKCkgIT09IHVuZGVmaW5lZCkge1xuICAgICAgY29uc3QgY2VydHMgPSB0eG5Cb2R5LmNlcnRzKCkgYXMgQ2FyZGFub1dhc20uQ2VydGlmaWNhdGVzO1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjZXJ0cy5sZW4oKTsgaSsrKSB7XG4gICAgICAgIHRoaXMuX2NlcnRzLnB1c2goY2VydHMuZ2V0KGkpKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodHhuQm9keS53aXRoZHJhd2FscygpICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGNvbnN0IHdpdGhkcmF3YWxzID0gdHhuQm9keS53aXRoZHJhd2FscygpIGFzIENhcmRhbm9XYXNtLldpdGhkcmF3YWxzO1xuICAgICAgY29uc3Qga2V5cyA9IHdpdGhkcmF3YWxzLmtleXMoKTtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwga2V5cy5sZW4oKTsgaSsrKSB7XG4gICAgICAgIGNvbnN0IHJld2FyZEFkZHJlc3MgPSBrZXlzLmdldChpKSBhcyBDYXJkYW5vV2FzbS5SZXdhcmRBZGRyZXNzO1xuICAgICAgICBjb25zdCByZXdhcmQgPSB3aXRoZHJhd2Fscy5nZXQocmV3YXJkQWRkcmVzcykgYXMgQ2FyZGFub1dhc20uQmlnTnVtO1xuICAgICAgICB0aGlzLl93aXRoZHJhd2Fscy5wdXNoKHsgc3Rha2VBZGRyZXNzOiByZXdhcmRBZGRyZXNzLnRvX2FkZHJlc3MoKS50b19iZWNoMzIoKSwgdmFsdWU6IHJld2FyZC50b19zdHIoKSB9KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLl90dGwgPSB0eC50cmFuc2FjdGlvbi5ib2R5KCkudHRsKCkgYXMgbnVtYmVyO1xuICAgIHRoaXMuX2ZlZSA9IHR4LnRyYW5zYWN0aW9uLmJvZHkoKS5mZWUoKTtcblxuICAgIGlmICh0eC50cmFuc2FjdGlvbi53aXRuZXNzX3NldCgpLnZrZXlzKCkpIHtcbiAgICAgIGNvbnN0IHZrZXlzID0gdHgudHJhbnNhY3Rpb24ud2l0bmVzc19zZXQoKS52a2V5cygpISBhcyBDYXJkYW5vV2FzbS5Wa2V5d2l0bmVzc2VzO1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB2a2V5cy5sZW4oKTsgaSsrKSB7XG4gICAgICAgIGNvbnN0IHZrZXkgPSB2a2V5cy5nZXQoaSk7XG4gICAgICAgIHRoaXMuX2luaXRTaWduYXR1cmVzLnB1c2goe1xuICAgICAgICAgIHB1YmxpY0tleTogeyBwdWI6IHZrZXkudmtleSgpLnB1YmxpY19rZXkoKS50b19oZXgoKSB9LFxuICAgICAgICAgIHNpZ25hdHVyZTogQnVmZmVyLmZyb20odmtleS5zaWduYXR1cmUoKS50b19oZXgoKSwgJ2hleCcpLFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKiogQGluaGVyaXRkb2MgKi9cbiAgcHJvdGVjdGVkIGZyb21JbXBsZW1lbnRhdGlvbihyYXdUcmFuc2FjdGlvbjogc3RyaW5nKTogVHJhbnNhY3Rpb24ge1xuICAgIHRoaXMudmFsaWRhdGVSYXdUcmFuc2FjdGlvbihyYXdUcmFuc2FjdGlvbik7XG4gICAgdGhpcy5idWlsZEltcGxlbWVudGF0aW9uKCk7XG4gICAgcmV0dXJuIHRoaXMudHJhbnNhY3Rpb247XG4gIH1cblxuICAvKiogQGluaGVyaXRkb2MgKi9cbiAgcHJvdGVjdGVkIGFzeW5jIGJ1aWxkSW1wbGVtZW50YXRpb24oKTogUHJvbWlzZTxUcmFuc2FjdGlvbj4ge1xuICAgIGNvbnN0IGlucHV0cyA9IENhcmRhbm9XYXNtLlRyYW5zYWN0aW9uSW5wdXRzLm5ldygpO1xuICAgIHRoaXMuX3RyYW5zYWN0aW9uSW5wdXRzLmZvckVhY2goKGlucHV0KSA9PiB7XG4gICAgICBpbnB1dHMuYWRkKFxuICAgICAgICBDYXJkYW5vV2FzbS5UcmFuc2FjdGlvbklucHV0Lm5ldyhcbiAgICAgICAgICBDYXJkYW5vV2FzbS5UcmFuc2FjdGlvbkhhc2guZnJvbV9ieXRlcyhCdWZmZXIuZnJvbShpbnB1dC50cmFuc2FjdGlvbl9pZCwgJ2hleCcpKSxcbiAgICAgICAgICBpbnB1dC50cmFuc2FjdGlvbl9pbmRleFxuICAgICAgICApXG4gICAgICApO1xuICAgIH0pO1xuICAgIGxldCBvdXRwdXRzID0gQ2FyZGFub1dhc20uVHJhbnNhY3Rpb25PdXRwdXRzLm5ldygpO1xuICAgIGxldCB0b3RhbEFtb3VudFRvU2VuZCA9IENhcmRhbm9XYXNtLkJpZ051bS56ZXJvKCk7XG4gICAgdGhpcy5fdHJhbnNhY3Rpb25PdXRwdXRzLmZvckVhY2goKG91dHB1dCkgPT4ge1xuICAgICAgY29uc3QgYW1vdW50ID0gQ2FyZGFub1dhc20uQmlnTnVtLmZyb21fc3RyKG91dHB1dC5hbW91bnQpO1xuICAgICAgb3V0cHV0cy5hZGQoXG4gICAgICAgIENhcmRhbm9XYXNtLlRyYW5zYWN0aW9uT3V0cHV0Lm5ldyh1dGlsLmdldFdhbGxldEFkZHJlc3Mob3V0cHV0LmFkZHJlc3MpLCBDYXJkYW5vV2FzbS5WYWx1ZS5uZXcoYW1vdW50KSlcbiAgICAgICk7XG4gICAgICB0b3RhbEFtb3VudFRvU2VuZCA9IHRvdGFsQW1vdW50VG9TZW5kLmNoZWNrZWRfYWRkKGFtb3VudCk7XG4gICAgfSk7XG5cbiAgICBpZiAodGhpcy5fZmVlLmlzX3plcm8oKSkge1xuICAgICAgLy8gZXN0aW1hdGUgZmVlXG4gICAgICAvLyBhZGQgZXh0cmEgb3V0cHV0IGZvciB0aGUgY2hhbmdlXG4gICAgICBpZiAodGhpcy5fY2hhbmdlQWRkcmVzcyAmJiB0aGlzLl9zZW5kZXJCYWxhbmNlKSB7XG4gICAgICAgIGNvbnN0IGNoYW5nZUFkZHJlc3MgPSB1dGlsLmdldFdhbGxldEFkZHJlc3ModGhpcy5fY2hhbmdlQWRkcmVzcyk7XG4gICAgICAgIGNvbnN0IHV0eG9CYWxhbmNlID0gQ2FyZGFub1dhc20uQmlnTnVtLmZyb21fc3RyKHRoaXMuX3NlbmRlckJhbGFuY2UpO1xuXG4gICAgICAgIGNvbnN0IGFkanVzdG1lbnQgPSBCaWdOdW0uZnJvbV9zdHIoJzIwMDAwMDAnKTtcbiAgICAgICAgbGV0IGNoYW5nZSA9IHV0eG9CYWxhbmNlLmNoZWNrZWRfc3ViKHRoaXMuX2ZlZSkuY2hlY2tlZF9zdWIodG90YWxBbW91bnRUb1NlbmQpO1xuICAgICAgICBpZiAodGhpcy5fdHlwZSA9PT0gVHJhbnNhY3Rpb25UeXBlLlN0YWtpbmdBY3RpdmF0ZSkge1xuICAgICAgICAgIGNoYW5nZSA9IGNoYW5nZS5jaGVja2VkX3N1YihhZGp1c3RtZW50KTtcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLl90eXBlID09PSBUcmFuc2FjdGlvblR5cGUuU3Rha2luZ0RlYWN0aXZhdGUpIHtcbiAgICAgICAgICBjaGFuZ2UgPSBjaGFuZ2UuY2hlY2tlZF9hZGQoYWRqdXN0bWVudCk7XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5fdHlwZSA9PT0gVHJhbnNhY3Rpb25UeXBlLlN0YWtpbmdXaXRoZHJhdyB8fCB0aGlzLl90eXBlID09PSBUcmFuc2FjdGlvblR5cGUuU3Rha2luZ0NsYWltKSB7XG4gICAgICAgICAgdGhpcy5fd2l0aGRyYXdhbHMuZm9yRWFjaCgod2l0aGRyYXdhbDogV2l0aGRyYXdhbCkgPT4ge1xuICAgICAgICAgICAgY2hhbmdlID0gY2hhbmdlLmNoZWNrZWRfYWRkKENhcmRhbm9XYXNtLkJpZ051bS5mcm9tX3N0cih3aXRoZHJhd2FsLnZhbHVlKSk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBJZiB0b3RhbEFtb3VudFRvU2VuZCBpcyAwLCBpdHMgY29uc29saWRhdGlvblxuICAgICAgICBpZiAodG90YWxBbW91bnRUb1NlbmQudG9fc3RyKCkgPT0gJzAnKSB7XG4gICAgICAgICAgLy8gc3VwcG9ydCBmb3IgbXVsdGktYXNzZXQgY29uc29saWRhdGlvblxuICAgICAgICAgIGlmICh0aGlzLl9tdWx0aUFzc2V0cyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBjb25zdCB0b3RhbE51bWJlck9mQXNzZXRzID0gQ2FyZGFub1dhc20uQmlnTnVtLmZyb21fc3RyKHRoaXMuX211bHRpQXNzZXRzLmxlbmd0aC50b1N0cmluZygpKTtcbiAgICAgICAgICAgIGNvbnN0IG1pbkFtb3VudE5lZWRlZEZvck9uZUFzc2V0T3V0cHV0ID0gQ2FyZGFub1dhc20uQmlnTnVtLmZyb21fc3RyKE1JTl9BREFfRk9SX09ORV9BU1NFVCk7XG4gICAgICAgICAgICBjb25zdCBtaW5BbW91bnROZWVkZWRGb3JUb3RhbEFzc2V0T3V0cHV0cyA9XG4gICAgICAgICAgICAgIG1pbkFtb3VudE5lZWRlZEZvck9uZUFzc2V0T3V0cHV0LmNoZWNrZWRfbXVsKHRvdGFsTnVtYmVyT2ZBc3NldHMpO1xuXG4gICAgICAgICAgICBpZiAoIWNoYW5nZS5sZXNzX3RoYW4obWluQW1vdW50TmVlZGVkRm9yVG90YWxBc3NldE91dHB1dHMpKSB7XG4gICAgICAgICAgICAgIHRoaXMuX211bHRpQXNzZXRzLmZvckVhY2goKGFzc2V0KSA9PiB7XG4gICAgICAgICAgICAgICAgbGV0IHR4T3V0cHV0QnVpbGRlciA9IENhcmRhbm9XYXNtLlRyYW5zYWN0aW9uT3V0cHV0QnVpbGRlci5uZXcoKTtcbiAgICAgICAgICAgICAgICAvLyBjaGFuZ2VBZGRyZXNzIGlzIHRoZSByb290IGFkZHJlc3MsIHdoaWNoIGlzIHdoZXJlIHdlIHdhbnQgdGhlIHRva2VucyBhc3NldHMgdG8gYmUgc2VudCB0b1xuICAgICAgICAgICAgICAgIGNvbnN0IHRvQWRkcmVzcyA9IHV0aWwuZ2V0V2FsbGV0QWRkcmVzcyh0aGlzLl9jaGFuZ2VBZGRyZXNzKTtcbiAgICAgICAgICAgICAgICB0eE91dHB1dEJ1aWxkZXIgPSB0eE91dHB1dEJ1aWxkZXIud2l0aF9hZGRyZXNzKHRvQWRkcmVzcyk7XG4gICAgICAgICAgICAgICAgbGV0IHR4T3V0cHV0QW1vdW50QnVpbGRlciA9IHR4T3V0cHV0QnVpbGRlci5uZXh0KCk7XG4gICAgICAgICAgICAgICAgY29uc3QgYXNzZXROYW1lID0gQ2FyZGFub1dhc20uQXNzZXROYW1lLm5ldyhCdWZmZXIuZnJvbShhc3NldC5hc3NldF9uYW1lLCAnaGV4JykpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHBvbGljeUlkID0gQ2FyZGFub1dhc20uU2NyaXB0SGFzaC5mcm9tX2J5dGVzKEJ1ZmZlci5mcm9tKGFzc2V0LnBvbGljeV9pZCwgJ2hleCcpKTtcbiAgICAgICAgICAgICAgICBjb25zdCBtdWx0aUFzc2V0ID0gQ2FyZGFub1dhc20uTXVsdGlBc3NldC5uZXcoKTtcbiAgICAgICAgICAgICAgICBjb25zdCBhc3NldHMgPSBDYXJkYW5vV2FzbS5Bc3NldHMubmV3KCk7XG4gICAgICAgICAgICAgICAgYXNzZXRzLmluc2VydChhc3NldE5hbWUsIENhcmRhbm9XYXNtLkJpZ051bS5mcm9tX3N0cihhc3NldC5xdWFudGl0eSkpO1xuICAgICAgICAgICAgICAgIG11bHRpQXNzZXQuaW5zZXJ0KHBvbGljeUlkLCBhc3NldHMpO1xuXG4gICAgICAgICAgICAgICAgdHhPdXRwdXRBbW91bnRCdWlsZGVyID0gdHhPdXRwdXRBbW91bnRCdWlsZGVyLndpdGhfY29pbl9hbmRfYXNzZXQoXG4gICAgICAgICAgICAgICAgICBtaW5BbW91bnROZWVkZWRGb3JPbmVBc3NldE91dHB1dCxcbiAgICAgICAgICAgICAgICAgIG11bHRpQXNzZXRcbiAgICAgICAgICAgICAgICApO1xuXG4gICAgICAgICAgICAgICAgY29uc3QgdHhPdXRwdXQgPSB0eE91dHB1dEFtb3VudEJ1aWxkZXIuYnVpbGQoKTtcbiAgICAgICAgICAgICAgICBvdXRwdXRzLmFkZCh0eE91dHB1dCk7XG4gICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgIC8vIGZpbmFsbHkgc2VuZCB0aGUgcmVtYWluaW5nIEFEQSBpbiBpdHMgb3duIG91dHB1dFxuICAgICAgICAgICAgICBjb25zdCByZW1haW5pbmdPdXRwdXRBbW91bnQgPSBjaGFuZ2UuY2hlY2tlZF9zdWIobWluQW1vdW50TmVlZGVkRm9yVG90YWxBc3NldE91dHB1dHMpO1xuICAgICAgICAgICAgICBjb25zdCBjaGFuZ2VPdXRwdXQgPSBDYXJkYW5vV2FzbS5UcmFuc2FjdGlvbk91dHB1dC5uZXcoXG4gICAgICAgICAgICAgICAgY2hhbmdlQWRkcmVzcyxcbiAgICAgICAgICAgICAgICBDYXJkYW5vV2FzbS5WYWx1ZS5uZXcocmVtYWluaW5nT3V0cHV0QW1vdW50KVxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICBvdXRwdXRzLmFkZChjaGFuZ2VPdXRwdXQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBJZiB0aGVyZSBhcmUgbm8gdG9rZW5zIHRvIGNvbnNvbGlkYXRlLCB5b3Ugb25seSBoYXZlIDEgb3V0cHV0IHdoaWNoIGlzIEFEQSBhbG9uZVxuICAgICAgICAgICAgY29uc3QgY2hhbmdlT3V0cHV0ID0gQ2FyZGFub1dhc20uVHJhbnNhY3Rpb25PdXRwdXQubmV3KGNoYW5nZUFkZHJlc3MsIENhcmRhbm9XYXNtLlZhbHVlLm5ldyhjaGFuZ2UpKTtcbiAgICAgICAgICAgIG91dHB1dHMuYWRkKGNoYW5nZU91dHB1dCk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIElmIHRoaXMgaXNuJ3QgYSBjb25zb2xpZGF0ZSByZXF1ZXN0LCB3aGF0ZXZlciBjaGFuZ2UgdGhhdCBuZWVkcyB0byBiZSBzZW50IGJhY2sgdG8gdGhlIHJvb3RhZGRyZXNzIGlzIGFkZGVkIGFzIGEgc2VwYXJhdGUgb3V0cHV0IGhlcmVcbiAgICAgICAgICBjb25zdCBjaGFuZ2VPdXRwdXQgPSBDYXJkYW5vV2FzbS5UcmFuc2FjdGlvbk91dHB1dC5uZXcoY2hhbmdlQWRkcmVzcywgQ2FyZGFub1dhc20uVmFsdWUubmV3KGNoYW5nZSkpO1xuICAgICAgICAgIG91dHB1dHMuYWRkKGNoYW5nZU91dHB1dCk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgY29uc3QgdHhCb2R5ID0gQ2FyZGFub1dhc20uVHJhbnNhY3Rpb25Cb2R5Lm5ld190eF9ib2R5KGlucHV0cywgb3V0cHV0cywgdGhpcy5fZmVlKTtcbiAgICAgIHR4Qm9keS5zZXRfdHRsKENhcmRhbm9XYXNtLkJpZ051bS5mcm9tX3N0cih0aGlzLl90dGwudG9TdHJpbmcoKSkpO1xuICAgICAgY29uc3QgdHhIYXNoID0gQ2FyZGFub1dhc20uaGFzaF90cmFuc2FjdGlvbih0eEJvZHkpO1xuXG4gICAgICAvLyB3ZSBhZGQgd2l0bmVzc2VzIG9uY2Ugc28gdGhhdCB3ZSBjYW4gZ2V0IHRoZSBhcHByb3ByaWF0ZSBhbW91bnQgb2Ygc2lnbmVycyBmb3IgY2FsY3VsYXRpbmcgdGhlIGZlZVxuICAgICAgY29uc3Qgd2l0bmVzc1NldCA9IENhcmRhbm9XYXNtLlRyYW5zYWN0aW9uV2l0bmVzc1NldC5uZXcoKTtcbiAgICAgIGNvbnN0IHZrZXlXaXRuZXNzZXMgPSBDYXJkYW5vV2FzbS5Wa2V5d2l0bmVzc2VzLm5ldygpO1xuICAgICAgdGhpcy5fc2lnbmVycy5mb3JFYWNoKChrZXlQYWlyKSA9PiB7XG4gICAgICAgIGNvbnN0IHBydiA9IGtleVBhaXIuZ2V0S2V5cygpLnBydiBhcyBzdHJpbmc7XG4gICAgICAgIGNvbnN0IHZrZXlXaXRuZXNzID0gQ2FyZGFub1dhc20ubWFrZV92a2V5X3dpdG5lc3MoXG4gICAgICAgICAgdHhIYXNoLFxuICAgICAgICAgIENhcmRhbm9XYXNtLlByaXZhdGVLZXkuZnJvbV9ub3JtYWxfYnl0ZXMoQnVmZmVyLmZyb20ocHJ2LCAnaGV4JykpXG4gICAgICAgICk7XG4gICAgICAgIHZrZXlXaXRuZXNzZXMuYWRkKHZrZXlXaXRuZXNzKTtcbiAgICAgIH0pO1xuICAgICAgdGhpcy5nZXRBbGxTaWduYXR1cmVzKCkuZm9yRWFjaCgoc2lnbmF0dXJlKSA9PiB7XG4gICAgICAgIGNvbnN0IHZrZXkgPSBDYXJkYW5vV2FzbS5Wa2V5Lm5ldyhcbiAgICAgICAgICBDYXJkYW5vV2FzbS5QdWJsaWNLZXkuZnJvbV9ieXRlcyhCdWZmZXIuZnJvbShzaWduYXR1cmUucHVibGljS2V5LnB1YiwgJ2hleCcpKVxuICAgICAgICApO1xuICAgICAgICBjb25zdCBlZDI1NVNpZyA9IENhcmRhbm9XYXNtLkVkMjU1MTlTaWduYXR1cmUuZnJvbV9ieXRlcyhzaWduYXR1cmUuc2lnbmF0dXJlKTtcbiAgICAgICAgdmtleVdpdG5lc3Nlcy5hZGQoQ2FyZGFub1dhc20uVmtleXdpdG5lc3MubmV3KHZrZXksIGVkMjU1U2lnKSk7XG4gICAgICB9KTtcbiAgICAgIGlmICh2a2V5V2l0bmVzc2VzLmxlbigpID09PSAwKSB7XG4gICAgICAgIGNvbnN0IHBydiA9IENhcmRhbm9XYXNtLlByaXZhdGVLZXkuZ2VuZXJhdGVfZWQyNTUxOSgpO1xuICAgICAgICBjb25zdCB2a2V5V2l0bmVzcyA9IENhcmRhbm9XYXNtLm1ha2VfdmtleV93aXRuZXNzKHR4SGFzaCwgcHJ2KTtcbiAgICAgICAgdmtleVdpdG5lc3Nlcy5hZGQodmtleVdpdG5lc3MpO1xuICAgICAgICBpZiAodGhpcy5fdHlwZSAhPT0gVHJhbnNhY3Rpb25UeXBlLlNlbmQpIHtcbiAgICAgICAgICB2a2V5V2l0bmVzc2VzLmFkZCh2a2V5V2l0bmVzcyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHdpdG5lc3NTZXQuc2V0X3ZrZXlzKHZrZXlXaXRuZXNzZXMpO1xuXG4gICAgICAvLyBhZGQgaW4gd2l0aGRyYXdhbCBpZiB0aGlzIGlzIGEgd2l0aGRyYXdhbCB0eFxuICAgICAgaWYgKHRoaXMuX3dpdGhkcmF3YWxzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgY29uc3Qgd2l0aGRyYXdhbHMgPSBDYXJkYW5vV2FzbS5XaXRoZHJhd2Fscy5uZXcoKTtcbiAgICAgICAgdGhpcy5fd2l0aGRyYXdhbHMuZm9yRWFjaCgod2l0aGRyYXdhbDogV2l0aGRyYXdhbCkgPT4ge1xuICAgICAgICAgIGNvbnN0IHJld2FyZEFkZHJlc3MgPSBDYXJkYW5vV2FzbS5SZXdhcmRBZGRyZXNzLmZyb21fYWRkcmVzcyhcbiAgICAgICAgICAgIENhcmRhbm9XYXNtLkFkZHJlc3MuZnJvbV9iZWNoMzIod2l0aGRyYXdhbC5zdGFrZUFkZHJlc3MpXG4gICAgICAgICAgKTtcbiAgICAgICAgICB3aXRoZHJhd2Fscy5pbnNlcnQocmV3YXJkQWRkcmVzcyEsIENhcmRhbm9XYXNtLkJpZ051bS5mcm9tX3N0cih3aXRoZHJhd2FsLnZhbHVlKSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHR4Qm9keS5zZXRfd2l0aGRyYXdhbHMod2l0aGRyYXdhbHMpO1xuICAgICAgfVxuXG4gICAgICAvLyBhZGQgaW4gY2VydGlmaWNhdGVzIHRvIGdldCBtb2NrIHNpemVcbiAgICAgIGNvbnN0IGRyYWZ0Q2VydHMgPSBDYXJkYW5vV2FzbS5DZXJ0aWZpY2F0ZXMubmV3KCk7XG4gICAgICBmb3IgKGNvbnN0IGNlcnQgb2YgdGhpcy5fY2VydHMpIHtcbiAgICAgICAgZHJhZnRDZXJ0cy5hZGQoY2VydCk7XG4gICAgICB9XG4gICAgICB0eEJvZHkuc2V0X2NlcnRzKGRyYWZ0Q2VydHMpO1xuXG4gICAgICBjb25zdCB0eERyYWZ0ID0gQ2FyZGFub1dhc20uVHJhbnNhY3Rpb24ubmV3KHR4Qm9keSwgd2l0bmVzc1NldCk7XG4gICAgICBjb25zdCBsaW5lYXJGZWUgPSBDYXJkYW5vV2FzbS5MaW5lYXJGZWUubmV3KFxuICAgICAgICBDYXJkYW5vV2FzbS5CaWdOdW0uZnJvbV9zdHIoJzQ0JyksXG4gICAgICAgIENhcmRhbm9XYXNtLkJpZ051bS5mcm9tX3N0cignMTU1MzgxJylcbiAgICAgICk7XG5cbiAgICAgIC8vIGNhbGN1bGF0ZSB0aGUgZmVlIGJhc2VkIG9mZiBvdXIgZHVtbXkgdHJhbnNhY3Rpb25cbiAgICAgIGNvbnN0IGZlZSA9IENhcmRhbm9XYXNtLm1pbl9mZWUodHhEcmFmdCwgbGluZWFyRmVlKS5jaGVja2VkX2FkZChCaWdOdW0uZnJvbV9zdHIoJzQ0MCcpKTtcbiAgICAgIHRoaXMuX2ZlZSA9IGZlZTtcbiAgICB9XG4gICAgdGhpcy5fdHJhbnNhY3Rpb24uZmVlKHRoaXMuX2ZlZS50b19zdHIoKSk7XG4gICAgLy8gbm93IGNhbGN1bGF0ZSB0aGUgY2hhbmdlIGJhc2VkIG9mZiBvZiA8dXR4b0JhbGFuY2U+IC0gPGZlZT4gLSA8YW1vdW50VG9TZW5kPlxuICAgIC8vIHJlc2V0IHRoZSBvdXRwdXRzIGNvbGxlY3Rpb24gYmVjYXVzZSBub3cgb3VyIGxhc3Qgb3V0cHV0IGhhcyBjaGFuZ2VkXG4gICAgb3V0cHV0cyA9IENhcmRhbm9XYXNtLlRyYW5zYWN0aW9uT3V0cHV0cy5uZXcoKTtcbiAgICB0aGlzLl90cmFuc2FjdGlvbk91dHB1dHMuZm9yRWFjaCgob3V0cHV0KSA9PiB7XG4gICAgICBpZiAob3V0cHV0Lm11bHRpQXNzZXRzKSB7XG4gICAgICAgIGNvbnN0IHBvbGljeUlkID0gb3V0cHV0Lm11bHRpQXNzZXRzLmtleXMoKS5nZXQoMCk7XG4gICAgICAgIGNvbnN0IGFzc2V0cyA9IG91dHB1dC5tdWx0aUFzc2V0cy5nZXQocG9saWN5SWQpO1xuICAgICAgICBjb25zdCBhc3NldE5hbWUgPSBhc3NldHMhLmtleXMoKS5nZXQoMCk7XG4gICAgICAgIGNvbnN0IHF1YW50aXR5ID0gYXNzZXRzIS5nZXQoYXNzZXROYW1lKTtcbiAgICAgICAgbGV0IHR4T3V0cHV0QnVpbGRlciA9IENhcmRhbm9XYXNtLlRyYW5zYWN0aW9uT3V0cHV0QnVpbGRlci5uZXcoKTtcbiAgICAgICAgY29uc3Qgb3V0cHV0QW1vdW50ID0gQ2FyZGFub1dhc20uQmlnTnVtLmZyb21fc3RyKG91dHB1dC5hbW91bnQpO1xuICAgICAgICBjb25zdCB0b0FkZHJlc3MgPSB1dGlsLmdldFdhbGxldEFkZHJlc3Mob3V0cHV0LmFkZHJlc3MpO1xuICAgICAgICB0eE91dHB1dEJ1aWxkZXIgPSB0eE91dHB1dEJ1aWxkZXIud2l0aF9hZGRyZXNzKHRvQWRkcmVzcyk7XG4gICAgICAgIGxldCB0eE91dHB1dEFtb3VudEJ1aWxkZXIgPSB0eE91dHB1dEJ1aWxkZXIubmV4dCgpO1xuICAgICAgICBjb25zdCBtdWx0aUFzc2V0ID0gQ2FyZGFub1dhc20uTXVsdGlBc3NldC5uZXcoKTtcbiAgICAgICAgY29uc3QgYXNzZXQgPSBDYXJkYW5vV2FzbS5Bc3NldHMubmV3KCk7XG4gICAgICAgIGFzc2V0Lmluc2VydChhc3NldE5hbWUsIHF1YW50aXR5ISk7XG4gICAgICAgIG11bHRpQXNzZXQuaW5zZXJ0KHBvbGljeUlkLCBhc3NldCk7XG4gICAgICAgIHR4T3V0cHV0QW1vdW50QnVpbGRlciA9IHR4T3V0cHV0QW1vdW50QnVpbGRlci53aXRoX2NvaW5fYW5kX2Fzc2V0KG91dHB1dEFtb3VudCwgbXVsdGlBc3NldCk7XG4gICAgICAgIGNvbnN0IHR4T3V0cHV0ID0gdHhPdXRwdXRBbW91bnRCdWlsZGVyLmJ1aWxkKCk7XG4gICAgICAgIG91dHB1dHMuYWRkKHR4T3V0cHV0KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG91dHB1dHMuYWRkKFxuICAgICAgICAgIENhcmRhbm9XYXNtLlRyYW5zYWN0aW9uT3V0cHV0Lm5ldyhcbiAgICAgICAgICAgIHV0aWwuZ2V0V2FsbGV0QWRkcmVzcyhvdXRwdXQuYWRkcmVzcyksXG4gICAgICAgICAgICBDYXJkYW5vV2FzbS5WYWx1ZS5uZXcoQ2FyZGFub1dhc20uQmlnTnVtLmZyb21fc3RyKG91dHB1dC5hbW91bnQpKVxuICAgICAgICAgIClcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBpZiAodGhpcy5fY2hhbmdlQWRkcmVzcyAmJiB0aGlzLl9zZW5kZXJCYWxhbmNlKSB7XG4gICAgICBjb25zdCBjaGFuZ2VBZGRyZXNzID0gdXRpbC5nZXRXYWxsZXRBZGRyZXNzKHRoaXMuX2NoYW5nZUFkZHJlc3MpO1xuICAgICAgY29uc3QgdXR4b0JhbGFuY2UgPSBDYXJkYW5vV2FzbS5CaWdOdW0uZnJvbV9zdHIodGhpcy5fc2VuZGVyQmFsYW5jZSk7XG5cbiAgICAgIGNvbnN0IGFkanVzdG1lbnQgPSBCaWdOdW0uZnJvbV9zdHIoJzIwMDAwMDAnKTtcbiAgICAgIGxldCBjaGFuZ2UgPSB1dHhvQmFsYW5jZS5jaGVja2VkX3N1Yih0aGlzLl9mZWUpLmNoZWNrZWRfc3ViKHRvdGFsQW1vdW50VG9TZW5kKTtcbiAgICAgIGlmICh0aGlzLl90eXBlID09PSBUcmFuc2FjdGlvblR5cGUuU3Rha2luZ0FjdGl2YXRlKSB7XG4gICAgICAgIGNoYW5nZSA9IGNoYW5nZS5jaGVja2VkX3N1YihhZGp1c3RtZW50KTtcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5fdHlwZSA9PT0gVHJhbnNhY3Rpb25UeXBlLlN0YWtpbmdEZWFjdGl2YXRlKSB7XG4gICAgICAgIGNoYW5nZSA9IGNoYW5nZS5jaGVja2VkX2FkZChhZGp1c3RtZW50KTtcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5fdHlwZSA9PT0gVHJhbnNhY3Rpb25UeXBlLlN0YWtpbmdXaXRoZHJhdyB8fCB0aGlzLl90eXBlID09PSBUcmFuc2FjdGlvblR5cGUuU3Rha2luZ0NsYWltKSB7XG4gICAgICAgIHRoaXMuX3dpdGhkcmF3YWxzLmZvckVhY2goKHdpdGhkcmF3YWw6IFdpdGhkcmF3YWwpID0+IHtcbiAgICAgICAgICBjaGFuZ2UgPSBjaGFuZ2UuY2hlY2tlZF9hZGQoQ2FyZGFub1dhc20uQmlnTnVtLmZyb21fc3RyKHdpdGhkcmF3YWwudmFsdWUpKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIC8vIElmIHRvdGFsQW1vdW50VG9TZW5kIGlzIDAsIGl0cyBjb25zb2xpZGF0aW9uXG4gICAgICBpZiAodG90YWxBbW91bnRUb1NlbmQudG9fc3RyKCkgPT0gJzAnKSB7XG4gICAgICAgIC8vIHN1cHBvcnQgZm9yIG11bHRpLWFzc2V0IGNvbnNvbGlkYXRpb25cbiAgICAgICAgaWYgKHRoaXMuX211bHRpQXNzZXRzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBjb25zdCB0b3RhbE51bWJlck9mQXNzZXRzID0gQ2FyZGFub1dhc20uQmlnTnVtLmZyb21fc3RyKHRoaXMuX211bHRpQXNzZXRzLmxlbmd0aC50b1N0cmluZygpKTtcbiAgICAgICAgICBjb25zdCBtaW5BbW91bnROZWVkZWRGb3JPbmVBc3NldE91dHB1dCA9IENhcmRhbm9XYXNtLkJpZ051bS5mcm9tX3N0cignMTUwMDAwMCcpO1xuICAgICAgICAgIGNvbnN0IG1pbkFtb3VudE5lZWRlZEZvclRvdGFsQXNzZXRPdXRwdXRzID0gbWluQW1vdW50TmVlZGVkRm9yT25lQXNzZXRPdXRwdXQuY2hlY2tlZF9tdWwodG90YWxOdW1iZXJPZkFzc2V0cyk7XG5cbiAgICAgICAgICBpZiAoIWNoYW5nZS5sZXNzX3RoYW4obWluQW1vdW50TmVlZGVkRm9yVG90YWxBc3NldE91dHB1dHMpKSB7XG4gICAgICAgICAgICB0aGlzLl9tdWx0aUFzc2V0cy5mb3JFYWNoKChhc3NldCkgPT4ge1xuICAgICAgICAgICAgICBsZXQgdHhPdXRwdXRCdWlsZGVyID0gQ2FyZGFub1dhc20uVHJhbnNhY3Rpb25PdXRwdXRCdWlsZGVyLm5ldygpO1xuICAgICAgICAgICAgICAvLyBjaGFuZ2VBZGRyZXNzIGlzIHRoZSByb290IGFkZHJlc3MsIHdoaWNoIGlzIHdoZXJlIHdlIHdhbnQgdGhlIHRva2VucyBhc3NldHMgdG8gYmUgc2VudCB0b1xuICAgICAgICAgICAgICBjb25zdCB0b0FkZHJlc3MgPSB1dGlsLmdldFdhbGxldEFkZHJlc3ModGhpcy5fY2hhbmdlQWRkcmVzcyk7XG4gICAgICAgICAgICAgIHR4T3V0cHV0QnVpbGRlciA9IHR4T3V0cHV0QnVpbGRlci53aXRoX2FkZHJlc3ModG9BZGRyZXNzKTtcbiAgICAgICAgICAgICAgbGV0IHR4T3V0cHV0QW1vdW50QnVpbGRlciA9IHR4T3V0cHV0QnVpbGRlci5uZXh0KCk7XG4gICAgICAgICAgICAgIGNvbnN0IGFzc2V0TmFtZSA9IENhcmRhbm9XYXNtLkFzc2V0TmFtZS5uZXcoQnVmZmVyLmZyb20oYXNzZXQuYXNzZXRfbmFtZSwgJ2hleCcpKTtcbiAgICAgICAgICAgICAgY29uc3QgcG9saWN5SWQgPSBDYXJkYW5vV2FzbS5TY3JpcHRIYXNoLmZyb21fYnl0ZXMoQnVmZmVyLmZyb20oYXNzZXQucG9saWN5X2lkLCAnaGV4JykpO1xuICAgICAgICAgICAgICBjb25zdCBtdWx0aUFzc2V0ID0gQ2FyZGFub1dhc20uTXVsdGlBc3NldC5uZXcoKTtcbiAgICAgICAgICAgICAgY29uc3QgYXNzZXRzID0gQ2FyZGFub1dhc20uQXNzZXRzLm5ldygpO1xuICAgICAgICAgICAgICBhc3NldHMuaW5zZXJ0KGFzc2V0TmFtZSwgQ2FyZGFub1dhc20uQmlnTnVtLmZyb21fc3RyKGFzc2V0LnF1YW50aXR5KSk7XG4gICAgICAgICAgICAgIG11bHRpQXNzZXQuaW5zZXJ0KHBvbGljeUlkLCBhc3NldHMpO1xuXG4gICAgICAgICAgICAgIHR4T3V0cHV0QW1vdW50QnVpbGRlciA9IHR4T3V0cHV0QW1vdW50QnVpbGRlci53aXRoX2NvaW5fYW5kX2Fzc2V0KFxuICAgICAgICAgICAgICAgIG1pbkFtb3VudE5lZWRlZEZvck9uZUFzc2V0T3V0cHV0LFxuICAgICAgICAgICAgICAgIG11bHRpQXNzZXRcbiAgICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgICBjb25zdCB0eE91dHB1dCA9IHR4T3V0cHV0QW1vdW50QnVpbGRlci5idWlsZCgpO1xuICAgICAgICAgICAgICBvdXRwdXRzLmFkZCh0eE91dHB1dCk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgLy8gZmluYWxseSBzZW5kIHRoZSByZW1haW5pbmcgQURBIGluIGl0cyBvd24gb3V0cHV0XG4gICAgICAgICAgICBjb25zdCByZW1haW5pbmdPdXRwdXRBbW91bnQgPSBjaGFuZ2UuY2hlY2tlZF9zdWIobWluQW1vdW50TmVlZGVkRm9yVG90YWxBc3NldE91dHB1dHMpO1xuICAgICAgICAgICAgY29uc3QgY2hhbmdlT3V0cHV0ID0gQ2FyZGFub1dhc20uVHJhbnNhY3Rpb25PdXRwdXQubmV3KFxuICAgICAgICAgICAgICBjaGFuZ2VBZGRyZXNzLFxuICAgICAgICAgICAgICBDYXJkYW5vV2FzbS5WYWx1ZS5uZXcocmVtYWluaW5nT3V0cHV0QW1vdW50KVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIG91dHB1dHMuYWRkKGNoYW5nZU91dHB1dCk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBCdWlsZFRyYW5zYWN0aW9uRXJyb3IoXG4gICAgICAgICAgICAgICdJbnN1ZmZpY2llbnQgZnVuZHM6IG5lZWQgYSBtaW5pbXVtIG9mIDEuNSBBREEgcGVyIG91dHB1dCB0byBjb25zdHJ1Y3QgdG9rZW4gY29uc29saWRhdGlvbidcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIElmIHRoZXJlIGFyZSBubyB0b2tlbnMgdG8gY29uc29saWRhdGUsIHlvdSBvbmx5IGhhdmUgMSBvdXRwdXQgd2hpY2ggaXMgQURBIGFsb25lXG4gICAgICAgICAgY29uc3QgY2hhbmdlT3V0cHV0ID0gQ2FyZGFub1dhc20uVHJhbnNhY3Rpb25PdXRwdXQubmV3KGNoYW5nZUFkZHJlc3MsIENhcmRhbm9XYXNtLlZhbHVlLm5ldyhjaGFuZ2UpKTtcbiAgICAgICAgICBvdXRwdXRzLmFkZChjaGFuZ2VPdXRwdXQpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBJZiB0aGlzIGlzbid0IGEgY29uc29saWRhdGUgcmVxdWVzdCwgd2hhdGV2ZXIgY2hhbmdlIHRoYXQgbmVlZHMgdG8gYmUgc2VudCBiYWNrIHRvIHRoZSByb290YWRkcmVzcyBpcyBhZGRlZCBhcyBhIHNlcGFyYXRlIG91dHB1dCBoZXJlXG4gICAgICAgIGNvbnN0IGNoYW5nZU91dHB1dCA9IENhcmRhbm9XYXNtLlRyYW5zYWN0aW9uT3V0cHV0Lm5ldyhjaGFuZ2VBZGRyZXNzLCBDYXJkYW5vV2FzbS5WYWx1ZS5uZXcoY2hhbmdlKSk7XG4gICAgICAgIG91dHB1dHMuYWRkKGNoYW5nZU91dHB1dCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgdHhSYXcgPSBDYXJkYW5vV2FzbS5UcmFuc2FjdGlvbkJvZHkubmV3X3R4X2JvZHkoaW5wdXRzLCBvdXRwdXRzLCB0aGlzLl9mZWUpO1xuXG4gICAgY29uc3QgY2VydHMgPSBDYXJkYW5vV2FzbS5DZXJ0aWZpY2F0ZXMubmV3KCk7XG4gICAgZm9yIChjb25zdCBjZXJ0IG9mIHRoaXMuX2NlcnRzKSB7XG4gICAgICBjZXJ0cy5hZGQoY2VydCk7XG4gICAgfVxuICAgIHR4UmF3LnNldF9jZXJ0cyhjZXJ0cyk7XG5cbiAgICAvLyBhZGQgaW4gd2l0aGRyYXdhbCBpZiB0aGlzIGlzIGEgd2l0aGRyYXdhbCB0eFxuICAgIGlmICh0aGlzLl93aXRoZHJhd2Fscy5sZW5ndGggPiAwKSB7XG4gICAgICBjb25zdCB3aXRoZHJhd2FscyA9IENhcmRhbm9XYXNtLldpdGhkcmF3YWxzLm5ldygpO1xuICAgICAgdGhpcy5fd2l0aGRyYXdhbHMuZm9yRWFjaCgod2l0aGRyYXdhbDogV2l0aGRyYXdhbCkgPT4ge1xuICAgICAgICBjb25zdCByZXdhcmRBZGRyZXNzID0gQ2FyZGFub1dhc20uUmV3YXJkQWRkcmVzcy5mcm9tX2FkZHJlc3MoXG4gICAgICAgICAgQ2FyZGFub1dhc20uQWRkcmVzcy5mcm9tX2JlY2gzMih3aXRoZHJhd2FsLnN0YWtlQWRkcmVzcylcbiAgICAgICAgKTtcbiAgICAgICAgd2l0aGRyYXdhbHMuaW5zZXJ0KHJld2FyZEFkZHJlc3MhLCBDYXJkYW5vV2FzbS5CaWdOdW0uZnJvbV9zdHIod2l0aGRyYXdhbC52YWx1ZSkpO1xuICAgICAgfSk7XG5cbiAgICAgIHR4UmF3LnNldF93aXRoZHJhd2Fscyh3aXRoZHJhd2Fscyk7XG4gICAgfVxuXG4gICAgdHhSYXcuc2V0X3R0bChDYXJkYW5vV2FzbS5CaWdOdW0uZnJvbV9zdHIodGhpcy5fdHRsLnRvU3RyaW5nKCkpKTtcbiAgICBjb25zdCB0eFJhd0hhc2ggPSBDYXJkYW5vV2FzbS5oYXNoX3RyYW5zYWN0aW9uKHR4UmF3KTtcblxuICAgIC8vIG5vdyBhZGQgdGhlIHdpdG5lc3NlcyBhZ2FpbiB0aGlzIHRpbWUgZm9yIHJlYWwuIFdlIG5lZWQgdG8gZG8gdGhpcyBhZ2FpblxuICAgIC8vIGJlY2F1c2Ugbm93IHRoYXQgd2UndmUgYWRkZWQgb3VyIHJlYWwgZmVlIGFuZCBjaGFuZ2Ugb3V0cHV0LCB3ZSBoYXZlIGEgZGlmZmVyZW5jZSB0cmFuc2FjdGlvbiBoYXNoXG4gICAgY29uc3Qgd2l0bmVzc1NldCA9IENhcmRhbm9XYXNtLlRyYW5zYWN0aW9uV2l0bmVzc1NldC5uZXcoKTtcbiAgICBjb25zdCB2a2V5V2l0bmVzc2VzID0gQ2FyZGFub1dhc20uVmtleXdpdG5lc3Nlcy5uZXcoKTtcbiAgICB0aGlzLl9zaWduZXJzLmZvckVhY2goKGtleVBhaXIpID0+IHtcbiAgICAgIGNvbnN0IHBydiA9IGtleVBhaXIuZ2V0S2V5cygpLnBydiBhcyBzdHJpbmc7XG4gICAgICBjb25zdCB2a2V5V2l0bmVzcyA9IENhcmRhbm9XYXNtLm1ha2VfdmtleV93aXRuZXNzKFxuICAgICAgICB0eFJhd0hhc2gsXG4gICAgICAgIENhcmRhbm9XYXNtLlByaXZhdGVLZXkuZnJvbV9ub3JtYWxfYnl0ZXMoQnVmZmVyLmZyb20ocHJ2LCAnaGV4JykpXG4gICAgICApO1xuICAgICAgdmtleVdpdG5lc3Nlcy5hZGQodmtleVdpdG5lc3MpO1xuICAgIH0pO1xuXG4gICAgLy8gQ2xlYXIgdGhlIGNvc21ldGljIHNpZ25hdHVyZSBhcnJheSBpbiBuYXRpdmUgdHhuIHdyYXBwZXIgdG8gcHJldmVudCBkdXBsaWNhdGUgd2hlbiBidWlsZGVyIGlzIGluaXRlZCBmcm9tIGEgcGFydGlhbGx5IHdpdG5lc3NlZCB0eG5cbiAgICB0aGlzLl90cmFuc2FjdGlvbi5zaWduYXR1cmUubGVuZ3RoID0gMDtcbiAgICB0aGlzLmdldEFsbFNpZ25hdHVyZXMoKS5mb3JFYWNoKChzaWduYXR1cmUpID0+IHtcbiAgICAgIGNvbnN0IHZrZXkgPSBDYXJkYW5vV2FzbS5Wa2V5Lm5ldyhDYXJkYW5vV2FzbS5QdWJsaWNLZXkuZnJvbV9ieXRlcyhCdWZmZXIuZnJvbShzaWduYXR1cmUucHVibGljS2V5LnB1YiwgJ2hleCcpKSk7XG4gICAgICBjb25zdCBlZDI1NVNpZyA9IENhcmRhbm9XYXNtLkVkMjU1MTlTaWduYXR1cmUuZnJvbV9ieXRlcyhzaWduYXR1cmUuc2lnbmF0dXJlKTtcbiAgICAgIHZrZXlXaXRuZXNzZXMuYWRkKENhcmRhbm9XYXNtLlZrZXl3aXRuZXNzLm5ldyh2a2V5LCBlZDI1NVNpZykpO1xuICAgICAgdGhpcy5fdHJhbnNhY3Rpb24uc2lnbmF0dXJlLnB1c2goc2lnbmF0dXJlLnNpZ25hdHVyZS50b1N0cmluZygnaGV4JykpO1xuICAgIH0pO1xuICAgIHdpdG5lc3NTZXQuc2V0X3ZrZXlzKHZrZXlXaXRuZXNzZXMpO1xuICAgIHRoaXMuX3RyYW5zYWN0aW9uLnRyYW5zYWN0aW9uID0gQ2FyZGFub1dhc20uVHJhbnNhY3Rpb24ubmV3KHR4UmF3LCB3aXRuZXNzU2V0KTtcbiAgICByZXR1cm4gdGhpcy50cmFuc2FjdGlvbjtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdGRvYyAqL1xuICBwcm90ZWN0ZWQgc2lnbkltcGxlbWVudGF0aW9uKGtleTogQmFzZUtleSk6IFRyYW5zYWN0aW9uIHtcbiAgICB0aGlzLl9zaWduZXJzLnB1c2gobmV3IEtleVBhaXIoeyBwcnY6IGtleS5rZXkgfSkpO1xuICAgIHJldHVybiB0aGlzLl90cmFuc2FjdGlvbjtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdGRvYyAqL1xuICBwcm90ZWN0ZWQgZ2V0IHRyYW5zYWN0aW9uKCk6IFRyYW5zYWN0aW9uIHtcbiAgICByZXR1cm4gdGhpcy5fdHJhbnNhY3Rpb247XG4gIH1cblxuICAvKiogQGluaGVyaXRkb2MgKi9cbiAgcHJvdGVjdGVkIHNldCB0cmFuc2FjdGlvbih0cmFuc2FjdGlvbjogVHJhbnNhY3Rpb24pIHtcbiAgICB0aGlzLl90cmFuc2FjdGlvbiA9IHRyYW5zYWN0aW9uO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0ZG9jICovXG4gIHZhbGlkYXRlQWRkcmVzcyhhZGRyZXNzOiBCYXNlQWRkcmVzcywgYWRkcmVzc0Zvcm1hdD86IHN0cmluZyk6IHZvaWQge1xuICAgIGlmICghdXRpbC5pc1ZhbGlkQWRkcmVzcyhhZGRyZXNzLmFkZHJlc3MpKSB7XG4gICAgICB0aHJvdyBuZXcgVXRpbHNFcnJvcignaW52YWxpZCBhZGRyZXNzICcgKyBhZGRyZXNzLmFkZHJlc3MpO1xuICAgIH1cbiAgfVxuXG4gIC8qKiBAaW5oZXJpdGRvYyAqL1xuICB2YWxpZGF0ZUtleShrZXk6IEJhc2VLZXkpOiB2b2lkIHtcbiAgICB0cnkge1xuICAgICAgbmV3IEtleVBhaXIoeyBwcnY6IGtleS5rZXkgfSk7XG4gICAgfSBjYXRjaCB7XG4gICAgICB0aHJvdyBuZXcgQnVpbGRUcmFuc2FjdGlvbkVycm9yKGBLZXkgdmFsaWRhdGlvbiBmYWlsZWRgKTtcbiAgICB9XG4gIH1cblxuICAvKiogQGluaGVyaXRkb2MgKi9cbiAgdmFsaWRhdGVSYXdUcmFuc2FjdGlvbihyYXdUcmFuc2FjdGlvbjogYW55KTogdm9pZCB7XG4gICAgdHJ5IHtcbiAgICAgIENhcmRhbm9XYXNtLlRyYW5zYWN0aW9uLmZyb21fYnl0ZXMocmF3VHJhbnNhY3Rpb24pO1xuICAgIH0gY2F0Y2gge1xuICAgICAgdGhyb3cgbmV3IEJ1aWxkVHJhbnNhY3Rpb25FcnJvcignaW52YWxpZCByYXcgdHJhbnNhY3Rpb24nKTtcbiAgICB9XG4gIH1cblxuICAvKiogQGluaGVyaXRkb2MgKi9cbiAgdmFsaWRhdGVUcmFuc2FjdGlvbih0cmFuc2FjdGlvbjogVHJhbnNhY3Rpb24pOiB2b2lkIHtcbiAgICBpZiAoIXRyYW5zYWN0aW9uLnRyYW5zYWN0aW9uKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICB9XG5cbiAgLyoqIEBpbmhlcml0ZG9jICovXG4gIHZhbGlkYXRlVmFsdWUodmFsdWU6IEJpZ051bWJlcik6IHZvaWQge1xuICAgIGlmICh2YWx1ZS5pc0xlc3NUaGFuKDApKSB7XG4gICAgICB0aHJvdyBuZXcgQnVpbGRUcmFuc2FjdGlvbkVycm9yKCdWYWx1ZSBjYW5ub3QgYmUgbGVzcyB0aGFuIHplcm8nKTtcbiAgICB9XG4gIH1cbiAgLy8gZW5kcmVnaW9uXG5cbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIGFkZFNpZ25hdHVyZShwdWJsaWNLZXk6IEJhc2VQdWJsaWNLZXksIHNpZ25hdHVyZTogQnVmZmVyKTogdm9pZCB7XG4gICAgdGhpcy5fc2lnbmF0dXJlcy5wdXNoKHsgcHVibGljS2V5LCBzaWduYXR1cmUgfSk7XG4gIH1cblxuICBwcml2YXRlIGdldEFsbFNpZ25hdHVyZXMoKTogU2lnbmF0dXJlW10ge1xuICAgIHJldHVybiB0aGlzLl9pbml0U2lnbmF0dXJlcy5jb25jYXQodGhpcy5fc2lnbmF0dXJlcyk7XG4gIH1cbn1cbiJdfQ==
@@ -1,5 +1,5 @@
1
1
  import { AddressFormat, BaseUtils } from '@bitgo-beta/sdk-core';
2
- import { DRep } from '@emurgo/cardano-serialization-lib-nodejs';
2
+ import { DRep, Address } from '@emurgo/cardano-serialization-lib-nodejs';
3
3
  import { KeyPair } from './keyPair';
4
4
  export declare const MIN_ADA_FOR_ONE_ASSET = "1500000";
5
5
  export declare const VOTE_ALWAYS_ABSTAIN = "always-abstain";
@@ -30,6 +30,22 @@ export declare class Utils implements BaseUtils {
30
30
  * @returns {string} transaction body in hex format
31
31
  */
32
32
  getTransactionBody(serializedTx: string): string;
33
+ /**
34
+ * Decode wallet address from string.
35
+ * Attempts to decode as Shelley (bech32) first, then Byron (base58).
36
+ * @param {string} address - Valid Byron or Shelley-era address.
37
+ * @returns {Address} - Valid address object.
38
+ * @throws {InvalidAddressError} If the address is neither valid Shelley nor Byron.
39
+ */
40
+ getWalletAddress(address: string): Address;
41
+ /**
42
+ * Decode address string from Address object.
43
+ * Attempts to decode as Shelley (bech32) first, then Byron (base58).
44
+ * @param {Address} address - Valid Address object
45
+ * @returns {string} - Valid Byron or Shelley-era address string.
46
+ * @throws {InvalidAddressError} If the Address object is neither valid Shelley nor Byron.
47
+ */
48
+ getAddressString(address: Address): string;
33
49
  }
34
50
  declare const utils: Utils;
35
51
  export default utils;
@@ -1 +1 @@
1
- {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../src/lib/utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAChE,OAAO,EAQL,IAAI,EAIL,MAAM,0CAA0C,CAAC;AAClD,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAGpC,eAAO,MAAM,qBAAqB,YAAY,CAAC;AAC/C,eAAO,MAAM,mBAAmB,mBAAmB,CAAC;AACpD,eAAO,MAAM,yBAAyB,yBAAyB,CAAC;AAEhE,qBAAa,KAAM,YAAW,SAAS;IACrC,uCAAuC,CACrC,YAAY,EAAE,OAAO,EACrB,cAAc,EAAE,OAAO,EACvB,OAAO,EAAE,aAAa,GACrB,MAAM;IAiCT,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAUtC,gBAAgB,CAAC,aAAa,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM;IAcjE,aAAa,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO;IAStC,iBAAiB,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAuCvC,iBAAiB,CAAC,IAAI,EAAE,IAAI,GAAG,MAAM;IAWrC,kBAAkB;IAElB,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;IA6BxC,kBAAkB;IAClB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAIrC,kBAAkB;IAClB,iBAAiB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO;IAKvC,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO;IAShC,kBAAkB;IAClB,gBAAgB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO;IASzC,kBAAkB;IAClB,gBAAgB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO;IAS5C,kBAAkB;IAClB,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAI3C;;;;OAIG;IACH,kBAAkB,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM;CAOjD;AAED,QAAA,MAAM,KAAK,OAAc,CAAC;AAE1B,eAAe,KAAK,CAAC"}
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../src/lib/utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,SAAS,EAAuB,MAAM,sBAAsB,CAAC;AACrF,OAAO,EAQL,IAAI,EAKJ,OAAO,EAGR,MAAM,0CAA0C,CAAC;AAClD,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAGpC,eAAO,MAAM,qBAAqB,YAAY,CAAC;AAC/C,eAAO,MAAM,mBAAmB,mBAAmB,CAAC;AACpD,eAAO,MAAM,yBAAyB,yBAAyB,CAAC;AAEhE,qBAAa,KAAM,YAAW,SAAS;IACrC,uCAAuC,CACrC,YAAY,EAAE,OAAO,EACrB,cAAc,EAAE,OAAO,EACvB,OAAO,EAAE,aAAa,GACrB,MAAM;IAiCT,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAUtC,gBAAgB,CAAC,aAAa,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM;IAcjE,aAAa,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO;IAStC,iBAAiB,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAuCvC,iBAAiB,CAAC,IAAI,EAAE,IAAI,GAAG,MAAM;IAWrC,kBAAkB;IAElB,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;IAyCxC,kBAAkB;IAClB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAIrC,kBAAkB;IAClB,iBAAiB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO;IAKvC,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO;IAShC,kBAAkB;IAClB,gBAAgB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO;IASzC,kBAAkB;IAClB,gBAAgB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO;IAS5C,kBAAkB;IAClB,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAI3C;;;;OAIG;IACH,kBAAkB,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM;IAQhD;;;;;;OAMG;IACH,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;IAqB1C;;;;;;OAMG;IACH,gBAAgB,CAAC,OAAO,EAAE,OAAO,GAAG,MAAM;CAoB3C;AAED,QAAA,MAAM,KAAK,OAAc,CAAC;AAE1B,eAAe,KAAK,CAAC"}
@@ -117,26 +117,35 @@ class Utils {
117
117
  const REWARD_AND_ENTERPRISE_ADDR_LEN = 47;
118
118
  const POINTER_ADDR_LEN = 52;
119
119
  const VALIDATOR_ADDR_LEN = 56;
120
- // test if this is a bech32 address first
121
- if (new RegExp(bech32PrefixList.join('|')).test(address)) {
120
+ //Check for Shelley-era (Bech32) addresses
121
+ if (new RegExp(`^(${bech32PrefixList.join('|')})`).test(address)) {
122
122
  try {
123
123
  const decodedBech = bech32_1.bech32.decode(address, 108);
124
124
  const wordLength = decodedBech.words.length;
125
- if (!bech32PrefixList.includes(decodedBech.prefix)) {
126
- return false;
125
+ if (bech32PrefixList.includes(decodedBech.prefix) &&
126
+ (wordLength === BASE_ADDR_LEN ||
127
+ wordLength === REWARD_AND_ENTERPRISE_ADDR_LEN ||
128
+ wordLength === POINTER_ADDR_LEN)) {
129
+ return true;
127
130
  }
128
- return (wordLength === BASE_ADDR_LEN ||
129
- wordLength === REWARD_AND_ENTERPRISE_ADDR_LEN ||
130
- wordLength === POINTER_ADDR_LEN);
131
131
  }
132
- catch (err) {
133
- return false;
132
+ catch (e) {
133
+ console.log(`Address: ${address} failed Bech32 test with error: ${e}`);
134
134
  }
135
135
  }
136
- else {
137
- // maybe this is a validator address
138
- return new RegExp(`^(?!pool)[a-z0-9]\{${VALIDATOR_ADDR_LEN}\}$`).test(address);
136
+ //Check for Validator addresses
137
+ if (new RegExp(`^(?!pool)[a-z0-9]{${VALIDATOR_ADDR_LEN}}$`).test(address)) {
138
+ return true;
139
+ }
140
+ //Check for Byron-era address
141
+ try {
142
+ return cardano_serialization_lib_nodejs_1.ByronAddress.is_valid(address);
143
+ }
144
+ catch (e) {
145
+ console.log(`Address: ${address} failed Byron test with error: ${e}`);
146
+ console.log(e.stack);
139
147
  }
148
+ return false;
140
149
  }
141
150
  /** @inheritdoc */
142
151
  isValidBlockId(hash) {
@@ -192,8 +201,58 @@ class Utils {
192
201
  : Buffer.from(serializedTx, 'base64');
193
202
  return Buffer.from(cardano_serialization_lib_nodejs_1.Transaction.from_bytes(bufferRawTransaction).body().to_bytes()).toString('hex');
194
203
  }
204
+ /**
205
+ * Decode wallet address from string.
206
+ * Attempts to decode as Shelley (bech32) first, then Byron (base58).
207
+ * @param {string} address - Valid Byron or Shelley-era address.
208
+ * @returns {Address} - Valid address object.
209
+ * @throws {InvalidAddressError} If the address is neither valid Shelley nor Byron.
210
+ */
211
+ getWalletAddress(address) {
212
+ if (!address || typeof address !== 'string') {
213
+ throw new sdk_core_1.InvalidAddressError('Provided address is not a valid string');
214
+ }
215
+ // Try decoding as a Shelley (bech32) address first
216
+ try {
217
+ return cardano_serialization_lib_nodejs_1.Address.from_bech32(address);
218
+ }
219
+ catch (e) {
220
+ console.error(`Could not decode shelly address from string '${address}'`);
221
+ }
222
+ // Try decoding as a Byron (base58) address later
223
+ try {
224
+ return cardano_serialization_lib_nodejs_1.ByronAddress.from_base58(address).to_address();
225
+ }
226
+ catch (e) {
227
+ console.error(`Could not decode byron address from string '${address}'`);
228
+ }
229
+ throw new sdk_core_1.InvalidAddressError('Provided string is not a valid Shelley or Byron address');
230
+ }
231
+ /**
232
+ * Decode address string from Address object.
233
+ * Attempts to decode as Shelley (bech32) first, then Byron (base58).
234
+ * @param {Address} address - Valid Address object
235
+ * @returns {string} - Valid Byron or Shelley-era address string.
236
+ * @throws {InvalidAddressError} If the Address object is neither valid Shelley nor Byron.
237
+ */
238
+ getAddressString(address) {
239
+ // Check all Shelley address types
240
+ if (cardano_serialization_lib_nodejs_1.BaseAddress.from_address(address) ||
241
+ cardano_serialization_lib_nodejs_1.EnterpriseAddress.from_address(address) ||
242
+ cardano_serialization_lib_nodejs_1.RewardAddress.from_address(address) ||
243
+ cardano_serialization_lib_nodejs_1.PointerAddress.from_address(address)) {
244
+ return address.to_bech32();
245
+ }
246
+ // If not Shelley, try Byron
247
+ const byronAddress = cardano_serialization_lib_nodejs_1.ByronAddress.from_address(address);
248
+ if (byronAddress) {
249
+ return byronAddress.to_base58();
250
+ }
251
+ // If neither, it's invalid
252
+ throw new sdk_core_1.InvalidAddressError('Provided Address is not a valid Shelley or Byron address');
253
+ }
195
254
  }
196
255
  exports.Utils = Utils;
197
256
  const utils = new Utils();
198
257
  exports.default = utils;
199
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL3V0aWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLG1EQUFnRTtBQUNoRSwrRkFZa0Q7QUFDbEQsdUNBQW9DO0FBQ3BDLG1DQUFnQztBQUVuQixRQUFBLHFCQUFxQixHQUFHLFNBQVMsQ0FBQztBQUNsQyxRQUFBLG1CQUFtQixHQUFHLGdCQUFnQixDQUFDO0FBQ3ZDLFFBQUEseUJBQXlCLEdBQUcsc0JBQXNCLENBQUM7QUFFaEUsTUFBYSxLQUFLO0lBQ2hCLHVDQUF1QyxDQUNyQyxZQUFxQixFQUNyQixjQUF1QixFQUN2QixPQUFzQjtRQUV0QixJQUFJLFFBQVEsQ0FBQztRQUNiLElBQUksT0FBTyxLQUFLLHdCQUFhLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDdEMseUJBQXlCO1lBQ3pCLE1BQU0sR0FBRyxHQUFHLFlBQVksQ0FBQyxPQUFPLEVBQUUsQ0FBQyxHQUFHLENBQUM7WUFFdkMsTUFBTSxRQUFRLEdBQUcsNENBQVMsQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQztZQUMvRCwyQkFBMkI7WUFDM0IsTUFBTSxVQUFVLEdBQUcsNENBQVMsQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsT0FBTyxFQUFFLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUM7WUFDMUYsMENBQTBDO1lBQzFDLFFBQVEsR0FBRyw4Q0FBVyxDQUFDLEdBQUcsQ0FDeEIsOENBQVcsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxVQUFVLEVBQUUsRUFDbEMsNkNBQVUsQ0FBQyxZQUFZLENBQUMsVUFBVSxDQUFDLElBQUksRUFBRSxDQUFDLEVBQzFDLDZDQUFVLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUN6QyxDQUFDO1lBQ0YsT0FB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O1lBQ0gsbURBQWdCLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBQ3JDLE9BQU8sSUFBSSxDQUFDO1FBQ2QsQ0FBQztRQUFDLE9BQU8sR0FBRyxFQUFFLENBQUM7WUFDYixPQUFPLEtBQUssQ0FBQztRQUNmLENBQUM7SUFDSCxDQUFDO0lBRUQsa0JBQWtCO0lBQ2xCLG9CQUFvQixDQUFDLElBQVk7UUFDL0IsT0FBTyxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3BDLENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsa0JBQWtCLENBQUMsWUFBb0I7UUFDckMsTUFBTSxTQUFTLEdBQUcsZ0JBQWdCLENBQUM7UUFDbkMsTUFBTSxvQkFBb0IsR0FBRyxTQUFTLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQztZQUN2RCxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUUsS0FBSyxDQUFDO1lBQ2xDLENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRSxRQUFRLENBQUMsQ0FBQztRQUN4QyxPQUFPLE1BQU0sQ0FBQyxJQUFJLENBQUMsOENBQWtCLENBQUMsVUFBVSxDQUFDLG9CQUFvQixDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDNUcsQ0FBQztDQUNGO0FBak5ELHNCQWlOQztBQUVELE1BQU0sS0FBSyxHQUFHLElBQUksS0FBSyxFQUFFLENBQUM7QUFFMUIsa0JBQWUsS0FBSyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQWRkcmVzc0Zvcm1hdCwgQmFzZVV0aWxzIH0gZnJvbSAnQGJpdGdvLWJldGEvc2RrLWNvcmUnO1xuaW1wb3J0IHtcbiAgQmFzZUFkZHJlc3MsXG4gIFB1YmxpY0tleSxcbiAgRWQyNTUxOVNpZ25hdHVyZSxcbiAgTmV0d29ya0luZm8sXG4gIENyZWRlbnRpYWwsXG4gIFJld2FyZEFkZHJlc3MsXG4gIFRyYW5zYWN0aW9uIGFzIENhcmRhbm9UcmFuc2FjdGlvbixcbiAgRFJlcCxcbiAgRWQyNTUxOUtleUhhc2gsXG4gIFNjcmlwdEhhc2gsXG4gIERSZXBLaW5kLFxufSBmcm9tICdAZW11cmdvL2NhcmRhbm8tc2VyaWFsaXphdGlvbi1saWItbm9kZWpzJztcbmltcG9ydCB7IEtleVBhaXIgfSBmcm9tICcuL2tleVBhaXInO1xuaW1wb3J0IHsgYmVjaDMyIH0gZnJvbSAnYmVjaDMyJztcblxuZXhwb3J0IGNvbnN0IE1JTl9BREFfRk9SX09ORV9BU1NFVCA9ICcxNTAwMDAwJztcbmV4cG9ydCBjb25zdCBWT1RFX0FMV0FZU19BQlNUQUlOID0gJ2Fsd2F5cy1hYnN0YWluJztcbmV4cG9ydCBjb25zdCBWT1RFX0FMV0FZU19OT19DT05GSURFTkNFID0gJ2Fsd2F5cy1uby1jb25maWRlbmNlJztcblxuZXhwb3J0IGNsYXNzIFV0aWxzIGltcGxlbWVudHMgQmFzZVV0aWxzIHtcbiAgY3JlYXRlQmFzZUFkZHJlc3NXaXRoU3Rha2VBbmRQYXltZW50S2V5KFxuICAgIHN0YWtlS2V5UGFpcjogS2V5UGFpcixcbiAgICBwYXltZW50S2V5UGFpcjogS2V5UGFpcixcbiAgICBuZXR3b3JrOiBBZGRyZXNzRm9ybWF0XG4gICk6IHN0cmluZyB7XG4gICAgbGV0IGJhc2VBZGRyO1xuICAgIGlmIChuZXR3b3JrID09PSBBZGRyZXNzRm9ybWF0Lm1haW5uZXQpIHtcbiAgICAgIC8vIDEuIGNyZWF0ZSBzdGFrZSBwdWJLZXlcbiAgICAgIGNvbnN0IGtleSA9IHN0YWtlS2V5UGFpci5nZXRLZXlzKCkucHViO1xuXG4gICAgICBjb25zdCBzdGFrZVB1YiA9IFB1YmxpY0tleS5mcm9tX2J5dGVzKEJ1ZmZlci5mcm9tKGtleSwgJ2hleCcpKTtcbiAgICAgIC8vIDIuIGNyZWF0ZSBwYXltZW50IHB1YktleVxuICAgICAgY29uc3QgcGF5bWVudFB1YiA9IFB1YmxpY0tleS5mcm9tX2J5dGVzKEJ1ZmZlci5mcm9tKHBheW1lbnRLZXlQYWlyLmdldEtleXMoKS5wdWIsICdoZXgnKSk7XG4gICAgICAvLyAzLiBjcmVhdGUgZnVsbCBiYXNlIGFkZHJlc3MgZm9yIHN0YWtpbmdcbiAgICAgIGJhc2VBZGRyID0gQmFzZUFkZHJlc3MubmV3KFxuICAgICAgICBOZXR3b3JrSW5mby5tYWlubmV0KCkubmV0d29ya19pZCgpLFxuICAgICAgICBDcmVkZW50aWFsLmZyb21fa2V5aGFzaChwYXltZW50UHViLmhhc2goKSksXG4gICAgICAgIENyZWRlbnRpYWwuZnJvbV9rZXloYXNoKHN0YWtlUHViLmhhc2goKSlcbiAgICAgICk7XG4gICAgICByZXR1cm4gYmFzZUFkZHIudG9fYWRkcmVzcygpLnRvX2JlY2gzMigpO1xuICAgIH0gZWxzZSBpZiAobmV0d29yayA9PT0gQWRkcmVzc0Zvcm1hdC50ZXN0bmV0KSB7XG4gICAgICAvLyAxLiBjcmVhdGUgc3Rha2UgcHViS2V5XG4gICAgICBjb25zdCBzdGFrZVB1YiA9IFB1YmxpY0tleS5mcm9tX2J5dGVzKEJ1ZmZlci5mcm9tKHN0YWtlS2V5UGFpci5nZXRLZXlzKCkucHViLCAnaGV4JykpO1xuICAgICAgLy8gMi4gY3JlYXRlIHBheW1lbnQgcHViS2V5XG4gICAgICBjb25zdCBwYXltZW50UHViID0gUHVibGljS2V5LmZyb21fYnl0ZXMoQnVmZmVyLmZyb20ocGF5bWVudEtleVBhaXIuZ2V0S2V5cygpLnB1YiwgJ2hleCcpKTtcbiAgICAgIC8vIDMuIGNyZWF0ZSBmdWxsIGJhc2UgYWRkcmVzcyBmb3Igc3Rha2luZ1xuICAgICAgY29uc3QgYmFzZUFkZHIgPSBCYXNlQWRkcmVzcy5uZXcoXG4gICAgICAgIE5ldHdvcmtJbmZvLnRlc3RuZXRfcHJlcHJvZCgpLm5ldHdvcmtfaWQoKSxcbiAgICAgICAgQ3JlZGVudGlhbC5mcm9tX2tleWhhc2gocGF5bWVudFB1Yi5oYXNoKCkpLFxuICAgICAgICBDcmVkZW50aWFsLmZyb21fa2V5aGFzaChzdGFrZVB1Yi5oYXNoKCkpXG4gICAgICApO1xuICAgICAgcmV0dXJuIGJhc2VBZGRyLnRvX2FkZHJlc3MoKS50b19iZWNoMzIoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbXByb3BlciBOZXR3b3JrIFR5cGUhJyk7XG4gICAgfVxuICB9XG5cbiAgdmFsaWRhdGVCbGFrZTJiKGhhc2g6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIGlmICghaGFzaCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBpZiAoaGFzaC5sZW5ndGggIT09IDY0KSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiBoYXNoLm1hdGNoKC9eW2EtekEtWjAtOV0rJC8pICE9PSBudWxsO1xuICB9XG5cbiAgZ2V0UmV3YXJkQWRkcmVzcyhzdGFraW5nUHViS2V5OiBzdHJpbmcsIGNvaW5OYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGNvbnN0IHN0YWtlUHViID0gUHVibGljS2V5LmZyb21fYnl0ZXMoQnVmZmVyLmZyb20oc3Rha2luZ1B1YktleSwgJ2hleCcpKTtcbiAgICBsZXQgcmV3YXJkQWRkcmVzcztcbiAgICBpZiAoY29pbk5hbWUgPT09ICdhZGEnKSB7XG4gICAgICByZXdhcmRBZGRyZXNzID0gUmV3YXJkQWRkcmVzcy5uZXcoTmV0d29ya0luZm8ubWFpbm5ldCgpLm5ldHdvcmtfaWQoKSwgQ3JlZGVudGlhbC5mcm9tX2tleWhhc2goc3Rha2VQdWIuaGFzaCgpKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJld2FyZEFkZHJlc3MgPSBSZXdhcmRBZGRyZXNzLm5ldyhcbiAgICAgICAgTmV0d29ya0luZm8udGVzdG5ldF9wcmVwcm9kKCkubmV0d29ya19pZCgpLFxuICAgICAgICBDcmVkZW50aWFsLmZyb21fa2V5aGFzaChzdGFrZVB1Yi5oYXNoKCkpXG4gICAgICApO1xuICAgIH1cbiAgICByZXR1cm4gcmV3YXJkQWRkcmVzcy50b19hZGRyZXNzKCkudG9fYmVjaDMyKCk7XG4gIH1cblxuICBpc1ZhbGlkRFJlcElkKGRSZXBJZDogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgdHJ5IHtcbiAgICAgIHRoaXMuZ2V0RFJlcEZyb21EUmVwSWQoZFJlcElkKTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIGdldERSZXBGcm9tRFJlcElkKGRSZXBJZDogc3RyaW5nKTogRFJlcCB7XG4gICAgc3dpdGNoIChkUmVwSWQpIHtcbiAgICAgIGNhc2UgJ2Fsd2F5cy1hYnN0YWluJzpcbiAgICAgICAgcmV0dXJuIERSZXAubmV3X2Fsd2F5c19hYnN0YWluKCk7XG4gICAgICBjYXNlICdhbHdheXMtbm8tY29uZmlkZW5jZSc6XG4gICAgICAgIHJldHVybiBEUmVwLm5ld19hbHdheXNfbm9fY29uZmlkZW5jZSgpO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAvLyBmb3IgcGFyc2luZyBDSVAtMTA1IHN0YW5kYXJkIERSZXAgSURcbiAgICAgICAgICByZXR1cm4gRFJlcC5mcm9tX2JlY2gzMihkUmVwSWQpO1xuICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAvLyBmb3IgcGFyc2luZyBDSVAtMTI5IHN0YW5kYXJkIERSZXAgSURcbiAgICAgICAgICAvLyBodHRwczovL2NpcHMuY2FyZGFuby5vcmcvY2lwL0NJUC0wMTI5XG4gICAgICAgICAgY29uc3QgZGVjb2RlZEJlY2gzMiA9IGJlY2gzMi5kZWNvZGUoZFJlcElkKTtcbiAgICAgICAgICBjb25zdCBkZWNvZGVkQnl0ZXMgPSBCdWZmZXIuZnJvbShiZWNoMzIuZnJvbVdvcmRzKGRlY29kZWRCZWNoMzIud29yZHMpKTtcbiAgICAgICAgICBjb25zdCBoZWFkZXIgPSBkZWNvZGVkQnl0ZXNbMF07XG4gICAgICAgICAgY29uc3Qga2V5Qnl0ZXMgPSBkZWNvZGVkQnl0ZXMuc3ViYXJyYXkoMSk7XG5cbiAgICAgICAgICBjb25zdCBrZXlUeXBlID0gKGhlYWRlciAmIDB4ZjApID4+IDQ7XG4gICAgICAgICAgY29uc3QgY3JlZGVudGlhbFR5cGUgPSBoZWFkZXIgJiAweDBmO1xuXG4gICAgICAgICAgaWYgKGtleVR5cGUgIT09IDB4MDIpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBrZXkgdHlwZSBmb3IgRFJlcCcpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHN3aXRjaCAoY3JlZGVudGlhbFR5cGUpIHtcbiAgICAgICAgICAgIGNhc2UgMHgwMjpcbiAgICAgICAgICAgICAgY29uc3QgZWQyNTUxOUtleUhhc2ggPSBFZDI1NTE5S2V5SGFzaC5mcm9tX2J5dGVzKGtleUJ5dGVzKTtcbiAgICAgICAgICAgICAgcmV0dXJuIERSZXAubmV3X2tleV9oYXNoKGVkMjU1MTlLZXlIYXNoKTtcbiAgICAgICAgICAgIGNhc2UgMHgwMzpcbiAgICAgICAgICAgICAgY29uc3Qgc2NyaXB0SGFzaCA9IFNjcmlwdEhhc2guZnJvbV9ieXRlcyhrZXlCeXRlcyk7XG4gICAgICAgICAgICAgIHJldHVybiBEUmVwLm5ld19zY3JpcHRfaGFzaChzY3JpcHRIYXNoKTtcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBjcmVkZW50aWFsIHR5cGUgZm9yIERSZXAnKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gIH1cblxuICBnZXREUmVwSWRGcm9tRFJlcChkUmVwOiBEUmVwKTogc3RyaW5nIHtcbiAgICBzd2l0Y2ggKGRSZXAua2luZCgpKSB7XG4gICAgICBjYXNlIERSZXBLaW5kLkFsd2F5c0Fic3RhaW46XG4gICAgICAgIHJldHVybiBWT1RFX0FMV0FZU19BQlNUQUlOO1xuICAgICAgY2FzZSBEUmVwS2luZC5BbHdheXNOb0NvbmZpZGVuY2U6XG4gICAgICAgIHJldHVybiBWT1RFX0FMV0FZU19OT19DT05GSURFTkNFO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIGRSZXAudG9fYmVjaDMyKCk7XG4gICAgfVxuICB9XG5cbiAgLyoqIEBpbmhlcml0ZG9jICovXG4gIC8vIHRoaXMgd2lsbCB2YWxpZGF0ZSBib3RoIHN0YWtlIGFuZCBwYXltZW50IGFkZHJlc3Nlc1xuICBpc1ZhbGlkQWRkcmVzcyhhZGRyZXNzOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICBjb25zdCBiZWNoMzJQcmVmaXhMaXN0ID0gWydhZGRyJywgJ2FkZHJfdGVzdCcsICdzdGFrZScsICdzdGFrZV90ZXN0J107XG4gICAgY29uc3QgQkFTRV9BRERSX0xFTiA9IDkyO1xuICAgIGNvbnN0IFJFV0FSRF9BTkRfRU5URVJQUklTRV9BRERSX0xFTiA9IDQ3O1xuICAgIGNvbnN0IFBPSU5URVJfQUREUl9MRU4gPSA1MjtcbiAgICBjb25zdCBWQUxJREFUT1JfQUREUl9MRU4gPSA1NjtcblxuICAgIC8vIHRlc3QgaWYgdGhpcyBpcyBhIGJlY2gzMiBhZGRyZXNzIGZpcnN0XG4gICAgaWYgKG5ldyBSZWdFeHAoYmVjaDMyUHJlZml4TGlzdC5qb2luKCd8JykpLnRlc3QoYWRkcmVzcykpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IGRlY29kZWRCZWNoID0gYmVjaDMyLmRlY29kZShhZGRyZXNzLCAxMDgpO1xuICAgICAgICBjb25zdCB3b3JkTGVuZ3RoID0gZGVjb2RlZEJlY2gud29yZHMubGVuZ3RoO1xuICAgICAgICBpZiAoIWJlY2gzMlByZWZpeExpc3QuaW5jbHVkZXMoZGVjb2RlZEJlY2gucHJlZml4KSkge1xuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgIHdvcmRMZW5ndGggPT09IEJBU0VfQUREUl9MRU4gfHxcbiAgICAgICAgICB3b3JkTGVuZ3RoID09PSBSRVdBUkRfQU5EX0VOVEVSUFJJU0VfQUREUl9MRU4gfHxcbiAgICAgICAgICB3b3JkTGVuZ3RoID09PSBQT0lOVEVSX0FERFJfTEVOXG4gICAgICAgICk7XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBtYXliZSB0aGlzIGlzIGEgdmFsaWRhdG9yIGFkZHJlc3NcbiAgICAgIHJldHVybiBuZXcgUmVnRXhwKGBeKD8hcG9vbClbYS16MC05XVxceyR7VkFMSURBVE9SX0FERFJfTEVOfVxcfSRgKS50ZXN0KGFkZHJlc3MpO1xuICAgIH1cbiAgfVxuXG4gIC8qKiBAaW5oZXJpdGRvYyAqL1xuICBpc1ZhbGlkQmxvY2tJZChoYXNoOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy52YWxpZGF0ZUJsYWtlMmIoaGFzaCk7XG4gIH1cblxuICAvKiogQGluaGVyaXRkb2MgKi9cbiAgaXNWYWxpZFByaXZhdGVLZXkoa2V5OiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICAvLyB0aGlzIHdpbGwgcmV0dXJuIHRydWUgZm9yIGJvdGggZXh0ZW5kZWQgYW5kIG5vbi1leHRlbmRlZCBFRDI1NTE5IGtleXNcbiAgICByZXR1cm4gdGhpcy5pc1ZhbGlkS2V5KGtleSk7XG4gIH1cblxuICBpc1ZhbGlkS2V5KGtleTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgdHJ5IHtcbiAgICAgIG5ldyBLZXlQYWlyKHsgcHJ2OiBrZXkgfSk7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICAvKiogQGluaGVyaXRkb2MgKi9cbiAgaXNWYWxpZFB1YmxpY0tleShwdWJLZXk6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHRyeSB7XG4gICAgICBuZXcgS2V5UGFpcih7IHB1YjogcHViS2V5IH0pO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBjYXRjaCB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgLyoqIEBpbmhlcml0ZG9jICovXG4gIGlzVmFsaWRTaWduYXR1cmUoc2lnbmF0dXJlOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICB0cnkge1xuICAgICAgRWQyNTUxOVNpZ25hdHVyZS5mcm9tX2hleChzaWduYXR1cmUpO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgLyoqIEBpbmhlcml0ZG9jICovXG4gIGlzVmFsaWRUcmFuc2FjdGlvbklkKHR4SWQ6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnZhbGlkYXRlQmxha2UyYih0eElkKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIHRyYW5zYWN0aW9uIGJvZHkgZnJvbSBhIHNlcmlhbGl6ZWQgdHJhbnNhY3Rpb25cbiAgICogQHBhcmFtIHtzdHJpbmd9IHNlcmlhbGl6ZWRUeCAtIHNlcmlhbGl6ZWQgdHJhbnNhY3Rpb24gaW4gaGV4IG9yIGJhc2U2NCBmb3JtYXRcbiAgICogQHJldHVybnMge3N0cmluZ30gdHJhbnNhY3Rpb24gYm9keSBpbiBoZXggZm9ybWF0XG4gICAqL1xuICBnZXRUcmFuc2FjdGlvbkJvZHkoc2VyaWFsaXplZFR4OiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGNvbnN0IEhFWF9SRUdFWCA9IC9eWzAtOWEtZkEtRl0rJC87XG4gICAgY29uc3QgYnVmZmVyUmF3VHJhbnNhY3Rpb24gPSBIRVhfUkVHRVgudGVzdChzZXJpYWxpemVkVHgpXG4gICAgICA/IEJ1ZmZlci5mcm9tKHNlcmlhbGl6ZWRUeCwgJ2hleCcpXG4gICAgICA6IEJ1ZmZlci5mcm9tKHNlcmlhbGl6ZWRUeCwgJ2Jhc2U2NCcpO1xuICAgIHJldHVybiBCdWZmZXIuZnJvbShDYXJkYW5vVHJhbnNhY3Rpb24uZnJvbV9ieXRlcyhidWZmZXJSYXdUcmFuc2FjdGlvbikuYm9keSgpLnRvX2J5dGVzKCkpLnRvU3RyaW5nKCdoZXgnKTtcbiAgfVxufVxuXG5jb25zdCB1dGlscyA9IG5ldyBVdGlscygpO1xuXG5leHBvcnQgZGVmYXVsdCB1dGlscztcbiJdfQ==
258
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL3V0aWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLG1EQUFxRjtBQUNyRiwrRkFnQmtEO0FBQ2xELHVDQUFvQztBQUNwQyxtQ0FBZ0M7QUFFbkIsUUFBQSxxQkFBcUIsR0FBRyxTQUFTLENBQUM7QUFDbEMsUUFBQSxtQkFBbUIsR0FBRyxnQkFBZ0IsQ0FBQztBQUN2QyxRQUFBLHlCQUF5QixHQUFHLHNCQUFzQixDQUFDO0FBRWhFLE1BQWEsS0FBSztJQUNoQix1Q0FBdUMsQ0FDckMsWUFBcUIsRUFDckIsY0FBdUIsRUFDdkIsT0FBc0I7UUFFdEIsSUFBSSxRQUFRLENBQUM7UUFDYixJQUFJLE9BQU8sS0FBSyx3QkFBYSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ3RDLHlCQUF5QjtZQUN6QixNQUFNLEdBQUcsR0FBRyxZQUFZLENBQUMsT0FBTyxFQUFFLENBQUMsR0FBRyxDQUFDO1lBRXZDLE1BQU0sUUFBUSxHQUFHLDRDQUFTLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUM7WUFDL0QsMkJBQTJCO1lBQzNCLE1BQU0sVUFBVSxHQUFHLDRDQUFTLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLE9BQU8sRUFBRSxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDO1lBQzFGLDBDQUEwQztZQUMxQyxRQUFRLEdBQUcsOENBQVcsQ0FBQyxHQUFHLENBQ3hCLDhDQUFXLENBQUMsT0FBTyxFQUFFLENBQUMsVUFBVSxFQUFFLEVBQ2xDLDZDQUFVLENBQUMsWUFBWSxDQUFDLFVBQVUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxFQUMxQyw2Q0FBVSxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FDekMsQ0FBQztZQUNGLE9B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T0FBTyxDQUFDLENBQUM7UUFDeEQsSUFBSSxZQUFZLEVBQUUsQ0FBQztZQUNqQixPQUFPLFlBQVksQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUNsQyxDQUFDO1FBRUQsMkJBQTJCO1FBQzNCLE1BQU0sSUFBSSw4QkFBbUIsQ0FBQywwREFBMEQsQ0FBQyxDQUFDO0lBQzVGLENBQUM7Q0FDRjtBQXJSRCxzQkFxUkM7QUFFRCxNQUFNLEtBQUssR0FBRyxJQUFJLEtBQUssRUFBRSxDQUFDO0FBRTFCLGtCQUFlLEtBQUssQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFkZHJlc3NGb3JtYXQsIEJhc2VVdGlscywgSW52YWxpZEFkZHJlc3NFcnJvciB9IGZyb20gJ0BiaXRnby1iZXRhL3Nkay1jb3JlJztcbmltcG9ydCB7XG4gIEJhc2VBZGRyZXNzLFxuICBQdWJsaWNLZXksXG4gIEVkMjU1MTlTaWduYXR1cmUsXG4gIE5ldHdvcmtJbmZvLFxuICBDcmVkZW50aWFsLFxuICBSZXdhcmRBZGRyZXNzLFxuICBUcmFuc2FjdGlvbiBhcyBDYXJkYW5vVHJhbnNhY3Rpb24sXG4gIERSZXAsXG4gIEVkMjU1MTlLZXlIYXNoLFxuICBTY3JpcHRIYXNoLFxuICBEUmVwS2luZCxcbiAgQnlyb25BZGRyZXNzLFxuICBBZGRyZXNzLFxuICBFbnRlcnByaXNlQWRkcmVzcyxcbiAgUG9pbnRlckFkZHJlc3MsXG59IGZyb20gJ0BlbXVyZ28vY2FyZGFuby1zZXJpYWxpemF0aW9uLWxpYi1ub2RlanMnO1xuaW1wb3J0IHsgS2V5UGFpciB9IGZyb20gJy4va2V5UGFpcic7XG5pbXBvcnQgeyBiZWNoMzIgfSBmcm9tICdiZWNoMzInO1xuXG5leHBvcnQgY29uc3QgTUlOX0FEQV9GT1JfT05FX0FTU0VUID0gJzE1MDAwMDAnO1xuZXhwb3J0IGNvbnN0IFZPVEVfQUxXQVlTX0FCU1RBSU4gPSAnYWx3YXlzLWFic3RhaW4nO1xuZXhwb3J0IGNvbnN0IFZPVEVfQUxXQVlTX05PX0NPTkZJREVOQ0UgPSAnYWx3YXlzLW5vLWNvbmZpZGVuY2UnO1xuXG5leHBvcnQgY2xhc3MgVXRpbHMgaW1wbGVtZW50cyBCYXNlVXRpbHMge1xuICBjcmVhdGVCYXNlQWRkcmVzc1dpdGhTdGFrZUFuZFBheW1lbnRLZXkoXG4gICAgc3Rha2VLZXlQYWlyOiBLZXlQYWlyLFxuICAgIHBheW1lbnRLZXlQYWlyOiBLZXlQYWlyLFxuICAgIG5ldHdvcms6IEFkZHJlc3NGb3JtYXRcbiAgKTogc3RyaW5nIHtcbiAgICBsZXQgYmFzZUFkZHI7XG4gICAgaWYgKG5ldHdvcmsgPT09IEFkZHJlc3NGb3JtYXQubWFpbm5ldCkge1xuICAgICAgLy8gMS4gY3JlYXRlIHN0YWtlIHB1YktleVxuICAgICAgY29uc3Qga2V5ID0gc3Rha2VLZXlQYWlyLmdldEtleXMoKS5wdWI7XG5cbiAgICAgIGNvbnN0IHN0YWtlUHViID0gUHVibGljS2V5LmZyb21fYnl0ZXMoQnVmZmVyLmZyb20oa2V5LCAnaGV4JykpO1xuICAgICAgLy8gMi4gY3JlYXRlIHBheW1lbnQgcHViS2V5XG4gICAgICBjb25zdCBwYXltZW50UHViID0gUHVibGljS2V5LmZyb21fYnl0ZXMoQnVmZmVyLmZyb20ocGF5bWVudEtleVBhaXIuZ2V0S2V5cygpLnB1YiwgJ2hleCcpKTtcbiAgICAgIC8vIDMuIGNyZWF0ZSBmdWxsIGJhc2UgYWRkcmVzcyBmb3Igc3Rha2luZ1xuICAgICAgYmFzZUFkZHIgPSBCYXNlQWRkcmVzcy5uZXcoXG4gICAgICAgIE5ldHdvcmtJbmZvLm1haW5uZXQoKS5uZXR3b3JrX2lkKCksXG4gICAgICAgIENyZWRlbnRpYWwuZnJvbV9rZXloYXNoKHBheW1lbnRQdWIuaGFzaCgpKSxcbiAgICAgICAgQ3JlZGVudGlhbC5mcm9tX2tleWhhc2goc3Rha2VQdWIuaGFzaCgpKVxuICAgICAgKTtcbiAgICAgIHJldHVybiBiYXNlQWRkci50b19hZGRyZXNzKCkudG9fYmVjaDMyKCk7XG4gICAgfSBlbHNlIGlmIChuZXR3b3JrID09PSBBZGRyZXNzRm9ybWF0LnRlc3RuZXQpIHtcbiAgICAgIC8vIDEuIGNyZWF0ZSBzdGFrZSBwdWJLZXlcbiAgICAgIGNvbnN0IHN0YWtlUHViID0gUHVibGljS2V5LmZyb21fYnl0ZXMoQnVmZmVyLmZyb20oc3Rha2VLZXlQYWlyLmdldEtleXMoKS5wdWIsICdoZXgnKSk7XG4gICAgICAvLyAyLiBjcmVhdGUgcGF5bWVudCBwdWJLZXlcbiAgICAgIGNvbnN0IHBheW1lbnRQdWIgPSBQdWJsaWNLZXkuZnJvbV9ieXRlcyhCdWZmZXIuZnJvbShwYXltZW50S2V5UGFpci5nZXRLZXlzKCkucHViLCAnaGV4JykpO1xuICAgICAgLy8gMy4gY3JlYXRlIGZ1bGwgYmFzZSBhZGRyZXNzIGZvciBzdGFraW5nXG4gICAgICBjb25zdCBiYXNlQWRkciA9IEJhc2VBZGRyZXNzLm5ldyhcbiAgICAgICAgTmV0d29ya0luZm8udGVzdG5ldF9wcmVwcm9kKCkubmV0d29ya19pZCgpLFxuICAgICAgICBDcmVkZW50aWFsLmZyb21fa2V5aGFzaChwYXltZW50UHViLmhhc2goKSksXG4gICAgICAgIENyZWRlbnRpYWwuZnJvbV9rZXloYXNoKHN0YWtlUHViLmhhc2goKSlcbiAgICAgICk7XG4gICAgICByZXR1cm4gYmFzZUFkZHIudG9fYWRkcmVzcygpLnRvX2JlY2gzMigpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ltcHJvcGVyIE5ldHdvcmsgVHlwZSEnKTtcbiAgICB9XG4gIH1cblxuICB2YWxpZGF0ZUJsYWtlMmIoaGFzaDogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgaWYgKCFoYXNoKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGlmIChoYXNoLmxlbmd0aCAhPT0gNjQpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIGhhc2gubWF0Y2goL15bYS16QS1aMC05XSskLykgIT09IG51bGw7XG4gIH1cblxuICBnZXRSZXdhcmRBZGRyZXNzKHN0YWtpbmdQdWJLZXk6IHN0cmluZywgY29pbk5hbWU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgY29uc3Qgc3Rha2VQdWIgPSBQdWJsaWNLZXkuZnJvbV9ieXRlcyhCdWZmZXIuZnJvbShzdGFraW5nUHViS2V5LCAnaGV4JykpO1xuICAgIGxldCByZXdhcmRBZGRyZXNzO1xuICAgIGlmIChjb2luTmFtZSA9PT0gJ2FkYScpIHtcbiAgICAgIHJld2FyZEFkZHJlc3MgPSBSZXdhcmRBZGRyZXNzLm5ldyhOZXR3b3JrSW5mby5tYWlubmV0KCkubmV0d29ya19pZCgpLCBDcmVkZW50aWFsLmZyb21fa2V5aGFzaChzdGFrZVB1Yi5oYXNoKCkpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV3YXJkQWRkcmVzcyA9IFJld2FyZEFkZHJlc3MubmV3KFxuICAgICAgICBOZXR3b3JrSW5mby50ZXN0bmV0X3ByZXByb2QoKS5uZXR3b3JrX2lkKCksXG4gICAgICAgIENyZWRlbnRpYWwuZnJvbV9rZXloYXNoKHN0YWtlUHViLmhhc2goKSlcbiAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiByZXdhcmRBZGRyZXNzLnRvX2FkZHJlc3MoKS50b19iZWNoMzIoKTtcbiAgfVxuXG4gIGlzVmFsaWREUmVwSWQoZFJlcElkOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICB0cnkge1xuICAgICAgdGhpcy5nZXREUmVwRnJvbURSZXBJZChkUmVwSWQpO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgZ2V0RFJlcEZyb21EUmVwSWQoZFJlcElkOiBzdHJpbmcpOiBEUmVwIHtcbiAgICBzd2l0Y2ggKGRSZXBJZCkge1xuICAgICAgY2FzZSAnYWx3YXlzLWFic3RhaW4nOlxuICAgICAgICByZXR1cm4gRFJlcC5uZXdfYWx3YXlzX2Fic3RhaW4oKTtcbiAgICAgIGNhc2UgJ2Fsd2F5cy1uby1jb25maWRlbmNlJzpcbiAgICAgICAgcmV0dXJuIERSZXAubmV3X2Fsd2F5c19ub19jb25maWRlbmNlKCk7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICB0cnkge1xuICAgICAgICAgIC8vIGZvciBwYXJzaW5nIENJUC0xMDUgc3RhbmRhcmQgRFJlcCBJRFxuICAgICAgICAgIHJldHVybiBEUmVwLmZyb21fYmVjaDMyKGRSZXBJZCk7XG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgIC8vIGZvciBwYXJzaW5nIENJUC0xMjkgc3RhbmRhcmQgRFJlcCBJRFxuICAgICAgICAgIC8vIGh0dHBzOi8vY2lwcy5jYXJkYW5vLm9yZy9jaXAvQ0lQLTAxMjlcbiAgICAgICAgICBjb25zdCBkZWNvZGVkQmVjaDMyID0gYmVjaDMyLmRlY29kZShkUmVwSWQpO1xuICAgICAgICAgIGNvbnN0IGRlY29kZWRCeXRlcyA9IEJ1ZmZlci5mcm9tKGJlY2gzMi5mcm9tV29yZHMoZGVjb2RlZEJlY2gzMi53b3JkcykpO1xuICAgICAgICAgIGNvbnN0IGhlYWRlciA9IGRlY29kZWRCeXRlc1swXTtcbiAgICAgICAgICBjb25zdCBrZXlCeXRlcyA9IGRlY29kZWRCeXRlcy5zdWJhcnJheSgxKTtcblxuICAgICAgICAgIGNvbnN0IGtleVR5cGUgPSAoaGVhZGVyICYgMHhmMCkgPj4gNDtcbiAgICAgICAgICBjb25zdCBjcmVkZW50aWFsVHlwZSA9IGhlYWRlciAmIDB4MGY7XG5cbiAgICAgICAgICBpZiAoa2V5VHlwZSAhPT0gMHgwMikge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIGtleSB0eXBlIGZvciBEUmVwJyk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgc3dpdGNoIChjcmVkZW50aWFsVHlwZSkge1xuICAgICAgICAgICAgY2FzZSAweDAyOlxuICAgICAgICAgICAgICBjb25zdCBlZDI1NTE5S2V5SGFzaCA9IEVkMjU1MTlLZXlIYXNoLmZyb21fYnl0ZXMoa2V5Qnl0ZXMpO1xuICAgICAgICAgICAgICByZXR1cm4gRFJlcC5uZXdfa2V5X2hhc2goZWQyNTUxOUtleUhhc2gpO1xuICAgICAgICAgICAgY2FzZSAweDAzOlxuICAgICAgICAgICAgICBjb25zdCBzY3JpcHRIYXNoID0gU2NyaXB0SGFzaC5mcm9tX2J5dGVzKGtleUJ5dGVzKTtcbiAgICAgICAgICAgICAgcmV0dXJuIERSZXAubmV3X3NjcmlwdF9oYXNoKHNjcmlwdEhhc2gpO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIGNyZWRlbnRpYWwgdHlwZSBmb3IgRFJlcCcpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGdldERSZXBJZEZyb21EUmVwKGRSZXA6IERSZXApOiBzdHJpbmcge1xuICAgIHN3aXRjaCAoZFJlcC5raW5kKCkpIHtcbiAgICAgIGNhc2UgRFJlcEtpbmQuQWx3YXlzQWJzdGFpbjpcbiAgICAgICAgcmV0dXJuIFZPVEVfQUxXQVlTX0FCU1RBSU47XG4gICAgICBjYXNlIERSZXBLaW5kLkFsd2F5c05vQ29uZmlkZW5jZTpcbiAgICAgICAgcmV0dXJuIFZPVEVfQUxXQVlTX05PX0NPTkZJREVOQ0U7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gZFJlcC50b19iZWNoMzIoKTtcbiAgICB9XG4gIH1cblxuICAvKiogQGluaGVyaXRkb2MgKi9cbiAgLy8gdGhpcyB3aWxsIHZhbGlkYXRlIGJvdGggc3Rha2UgYW5kIHBheW1lbnQgYWRkcmVzc2VzXG4gIGlzVmFsaWRBZGRyZXNzKGFkZHJlc3M6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IGJlY2gzMlByZWZpeExpc3QgPSBbJ2FkZHInLCAnYWRkcl90ZXN0JywgJ3N0YWtlJywgJ3N0YWtlX3Rlc3QnXTtcbiAgICBjb25zdCBCQVNFX0FERFJfTEVOID0gOTI7XG4gICAgY29uc3QgUkVXQVJEX0FORF9FTlRFUlBSSVNFX0FERFJfTEVOID0gNDc7XG4gICAgY29uc3QgUE9JTlRFUl9BRERSX0xFTiA9IDUyO1xuICAgIGNvbnN0IFZBTElEQVRPUl9BRERSX0xFTiA9IDU2O1xuXG4gICAgLy9DaGVjayBmb3IgU2hlbGxleS1lcmEgKEJlY2gzMikgYWRkcmVzc2VzXG4gICAgaWYgKG5ldyBSZWdFeHAoYF4oJHtiZWNoMzJQcmVmaXhMaXN0LmpvaW4oJ3wnKX0pYCkudGVzdChhZGRyZXNzKSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgZGVjb2RlZEJlY2ggPSBiZWNoMzIuZGVjb2RlKGFkZHJlc3MsIDEwOCk7XG4gICAgICAgIGNvbnN0IHdvcmRMZW5ndGggPSBkZWNvZGVkQmVjaC53b3Jkcy5sZW5ndGg7XG4gICAgICAgIGlmIChcbiAgICAgICAgICBiZWNoMzJQcmVmaXhMaXN0LmluY2x1ZGVzKGRlY29kZWRCZWNoLnByZWZpeCkgJiZcbiAgICAgICAgICAod29yZExlbmd0aCA9PT0gQkFTRV9BRERSX0xFTiB8fFxuICAgICAgICAgICAgd29yZExlbmd0aCA9PT0gUkVXQVJEX0FORF9FTlRFUlBSSVNFX0FERFJfTEVOIHx8XG4gICAgICAgICAgICB3b3JkTGVuZ3RoID09PSBQT0lOVEVSX0FERFJfTEVOKVxuICAgICAgICApIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBjb25zb2xlLmxvZyhgQWRkcmVzczogJHthZGRyZXNzfSBmYWlsZWQgQmVjaDMyIHRlc3Qgd2l0aCBlcnJvcjogJHtlfWApO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vQ2hlY2sgZm9yIFZhbGlkYXRvciBhZGRyZXNzZXNcbiAgICBpZiAobmV3IFJlZ0V4cChgXig/IXBvb2wpW2EtejAtOV17JHtWQUxJREFUT1JfQUREUl9MRU59fSRgKS50ZXN0KGFkZHJlc3MpKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICAvL0NoZWNrIGZvciBCeXJvbi1lcmEgYWRkcmVzc1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gQnlyb25BZGRyZXNzLmlzX3ZhbGlkKGFkZHJlc3MpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGNvbnNvbGUubG9nKGBBZGRyZXNzOiAke2FkZHJlc3N9IGZhaWxlZCBCeXJvbiB0ZXN0IHdpdGggZXJyb3I6ICR7ZX1gKTtcbiAgICAgIGNvbnNvbGUubG9nKGUuc3RhY2spO1xuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdGRvYyAqL1xuICBpc1ZhbGlkQmxvY2tJZChoYXNoOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy52YWxpZGF0ZUJsYWtlMmIoaGFzaCk7XG4gIH1cblxuICAvKiogQGluaGVyaXRkb2MgKi9cbiAgaXNWYWxpZFByaXZhdGVLZXkoa2V5OiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICAvLyB0aGlzIHdpbGwgcmV0dXJuIHRydWUgZm9yIGJvdGggZXh0ZW5kZWQgYW5kIG5vbi1leHRlbmRlZCBFRDI1NTE5IGtleXNcbiAgICByZXR1cm4gdGhpcy5pc1ZhbGlkS2V5KGtleSk7XG4gIH1cblxuICBpc1ZhbGlkS2V5KGtleTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgdHJ5IHtcbiAgICAgIG5ldyBLZXlQYWlyKHsgcHJ2OiBrZXkgfSk7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICAvKiogQGluaGVyaXRkb2MgKi9cbiAgaXNWYWxpZFB1YmxpY0tleShwdWJLZXk6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHRyeSB7XG4gICAgICBuZXcgS2V5UGFpcih7IHB1YjogcHViS2V5IH0pO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBjYXRjaCB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgLyoqIEBpbmhlcml0ZG9jICovXG4gIGlzVmFsaWRTaWduYXR1cmUoc2lnbmF0dXJlOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICB0cnkge1xuICAgICAgRWQyNTUxOVNpZ25hdHVyZS5mcm9tX2hleChzaWduYXR1cmUpO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgLyoqIEBpbmhlcml0ZG9jICovXG4gIGlzVmFsaWRUcmFuc2FjdGlvbklkKHR4SWQ6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnZhbGlkYXRlQmxha2UyYih0eElkKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIHRyYW5zYWN0aW9uIGJvZHkgZnJvbSBhIHNlcmlhbGl6ZWQgdHJhbnNhY3Rpb25cbiAgICogQHBhcmFtIHtzdHJpbmd9IHNlcmlhbGl6ZWRUeCAtIHNlcmlhbGl6ZWQgdHJhbnNhY3Rpb24gaW4gaGV4IG9yIGJhc2U2NCBmb3JtYXRcbiAgICogQHJldHVybnMge3N0cmluZ30gdHJhbnNhY3Rpb24gYm9keSBpbiBoZXggZm9ybWF0XG4gICAqL1xuICBnZXRUcmFuc2FjdGlvbkJvZHkoc2VyaWFsaXplZFR4OiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGNvbnN0IEhFWF9SRUdFWCA9IC9eWzAtOWEtZkEtRl0rJC87XG4gICAgY29uc3QgYnVmZmVyUmF3VHJhbnNhY3Rpb24gPSBIRVhfUkVHRVgudGVzdChzZXJpYWxpemVkVHgpXG4gICAgICA/IEJ1ZmZlci5mcm9tKHNlcmlhbGl6ZWRUeCwgJ2hleCcpXG4gICAgICA6IEJ1ZmZlci5mcm9tKHNlcmlhbGl6ZWRUeCwgJ2Jhc2U2NCcpO1xuICAgIHJldHVybiBCdWZmZXIuZnJvbShDYXJkYW5vVHJhbnNhY3Rpb24uZnJvbV9ieXRlcyhidWZmZXJSYXdUcmFuc2FjdGlvbikuYm9keSgpLnRvX2J5dGVzKCkpLnRvU3RyaW5nKCdoZXgnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZWNvZGUgd2FsbGV0IGFkZHJlc3MgZnJvbSBzdHJpbmcuXG4gICAqIEF0dGVtcHRzIHRvIGRlY29kZSBhcyBTaGVsbGV5IChiZWNoMzIpIGZpcnN0LCB0aGVuIEJ5cm9uIChiYXNlNTgpLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gYWRkcmVzcyAtIFZhbGlkIEJ5cm9uIG9yIFNoZWxsZXktZXJhIGFkZHJlc3MuXG4gICAqIEByZXR1cm5zIHtBZGRyZXNzfSAtIFZhbGlkIGFkZHJlc3Mgb2JqZWN0LlxuICAgKiBAdGhyb3dzIHtJbnZhbGlkQWRkcmVzc0Vycm9yfSBJZiB0aGUgYWRkcmVzcyBpcyBuZWl0aGVyIHZhbGlkIFNoZWxsZXkgbm9yIEJ5cm9uLlxuICAgKi9cbiAgZ2V0V2FsbGV0QWRkcmVzcyhhZGRyZXNzOiBzdHJpbmcpOiBBZGRyZXNzIHtcbiAgICBpZiAoIWFkZHJlc3MgfHwgdHlwZW9mIGFkZHJlc3MgIT09ICdzdHJpbmcnKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFkZHJlc3NFcnJvcignUHJvdmlkZWQgYWRkcmVzcyBpcyBub3QgYSB2YWxpZCBzdHJpbmcnKTtcbiAgICB9XG5cbiAgICAvLyBUcnkgZGVjb2RpbmcgYXMgYSBTaGVsbGV5IChiZWNoMzIpIGFkZHJlc3MgZmlyc3RcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIEFkZHJlc3MuZnJvbV9iZWNoMzIoYWRkcmVzcyk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgY29uc29sZS5lcnJvcihgQ291bGQgbm90IGRlY29kZSBzaGVsbHkgYWRkcmVzcyBmcm9tIHN0cmluZyAnJHthZGRyZXNzfSdgKTtcbiAgICB9XG5cbiAgICAvLyBUcnkgZGVjb2RpbmcgYXMgYSBCeXJvbiAoYmFzZTU4KSBhZGRyZXNzIGxhdGVyXG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBCeXJvbkFkZHJlc3MuZnJvbV9iYXNlNTgoYWRkcmVzcykudG9fYWRkcmVzcygpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoYENvdWxkIG5vdCBkZWNvZGUgYnlyb24gYWRkcmVzcyBmcm9tIHN0cmluZyAnJHthZGRyZXNzfSdgKTtcbiAgICB9XG4gICAgdGhyb3cgbmV3IEludmFsaWRBZGRyZXNzRXJyb3IoJ1Byb3ZpZGVkIHN0cmluZyBpcyBub3QgYSB2YWxpZCBTaGVsbGV5IG9yIEJ5cm9uIGFkZHJlc3MnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZWNvZGUgYWRkcmVzcyBzdHJpbmcgZnJvbSBBZGRyZXNzIG9iamVjdC5cbiAgICogQXR0ZW1wdHMgdG8gZGVjb2RlIGFzIFNoZWxsZXkgKGJlY2gzMikgZmlyc3QsIHRoZW4gQnlyb24gKGJhc2U1OCkuXG4gICAqIEBwYXJhbSB7QWRkcmVzc30gYWRkcmVzcyAtIFZhbGlkIEFkZHJlc3Mgb2JqZWN0XG4gICAqIEByZXR1cm5zIHtzdHJpbmd9IC0gVmFsaWQgQnlyb24gb3IgU2hlbGxleS1lcmEgYWRkcmVzcyBzdHJpbmcuXG4gICAqIEB0aHJvd3Mge0ludmFsaWRBZGRyZXNzRXJyb3J9IElmIHRoZSBBZGRyZXNzIG9iamVjdCBpcyBuZWl0aGVyIHZhbGlkIFNoZWxsZXkgbm9yIEJ5cm9uLlxuICAgKi9cbiAgZ2V0QWRkcmVzc1N0cmluZyhhZGRyZXNzOiBBZGRyZXNzKTogc3RyaW5nIHtcbiAgICAvLyBDaGVjayBhbGwgU2hlbGxleSBhZGRyZXNzIHR5cGVzXG4gICAgaWYgKFxuICAgICAgQmFzZUFkZHJlc3MuZnJvbV9hZGRyZXNzKGFkZHJlc3MpIHx8XG4gICAgICBFbnRlcnByaXNlQWRkcmVzcy5mcm9tX2FkZHJlc3MoYWRkcmVzcykgfHxcbiAgICAgIFJld2FyZEFkZHJlc3MuZnJvbV9hZGRyZXNzKGFkZHJlc3MpIHx8XG4gICAgICBQb2ludGVyQWRkcmVzcy5mcm9tX2FkZHJlc3MoYWRkcmVzcylcbiAgICApIHtcbiAgICAgIHJldHVybiBhZGRyZXNzLnRvX2JlY2gzMigpO1xuICAgIH1cblxuICAgIC8vIElmIG5vdCBTaGVsbGV5LCB0cnkgQnlyb25cbiAgICBjb25zdCBieXJvbkFkZHJlc3MgPSBCeXJvbkFkZHJlc3MuZnJvbV9hZGRyZXNzKGFkZHJlc3MpO1xuICAgIGlmIChieXJvbkFkZHJlc3MpIHtcbiAgICAgIHJldHVybiBieXJvbkFkZHJlc3MudG9fYmFzZTU4KCk7XG4gICAgfVxuXG4gICAgLy8gSWYgbmVpdGhlciwgaXQncyBpbnZhbGlkXG4gICAgdGhyb3cgbmV3IEludmFsaWRBZGRyZXNzRXJyb3IoJ1Byb3ZpZGVkIEFkZHJlc3MgaXMgbm90IGEgdmFsaWQgU2hlbGxleSBvciBCeXJvbiBhZGRyZXNzJyk7XG4gIH1cbn1cblxuY29uc3QgdXRpbHMgPSBuZXcgVXRpbHMoKTtcblxuZXhwb3J0IGRlZmF1bHQgdXRpbHM7XG4iXX0=
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@bitgo-beta/sdk-coin-ada",
3
- "version": "2.2.3-alpha.249",
3
+ "version": "2.2.3-alpha.250",
4
4
  "description": "BitGo SDK coin library for Ada",
5
5
  "main": "./dist/src/index.js",
6
6
  "types": "./dist/src/index.d.ts",
@@ -40,9 +40,9 @@
40
40
  ]
41
41
  },
42
42
  "dependencies": {
43
- "@bitgo-beta/sdk-core": "2.4.1-alpha.250",
44
- "@bitgo-beta/sdk-lib-mpc": "8.2.1-alpha.206",
45
- "@bitgo-beta/statics": "10.0.1-alpha.250",
43
+ "@bitgo-beta/sdk-core": "2.4.1-alpha.251",
44
+ "@bitgo-beta/sdk-lib-mpc": "8.2.1-alpha.207",
45
+ "@bitgo-beta/statics": "10.0.1-alpha.251",
46
46
  "@emurgo/cardano-serialization-lib-browser": "^12.0.1",
47
47
  "@emurgo/cardano-serialization-lib-nodejs": "^12.0.1",
48
48
  "bech32": "^2.0.0",
@@ -52,8 +52,8 @@
52
52
  "tweetnacl": "^1.0.3"
53
53
  },
54
54
  "devDependencies": {
55
- "@bitgo-beta/sdk-api": "1.6.1-alpha.250",
56
- "@bitgo-beta/sdk-test": "^8.0.63"
55
+ "@bitgo-beta/sdk-api": "1.6.1-alpha.251",
56
+ "@bitgo-beta/sdk-test": "^8.0.64"
57
57
  },
58
- "gitHead": "0ad895c8d9246116b86fcd339a6a70127f661f9a"
58
+ "gitHead": "b9007ac817a642259d1c37b1b003eb5b1b89f195"
59
59
  }