@bitgo/sdk-core 33.0.0 → 33.2.0

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.
Files changed (31) hide show
  1. package/CHANGELOG.md +28 -0
  2. package/dist/src/bitgo/baseCoin/iBaseCoin.d.ts +1 -1
  3. package/dist/src/bitgo/baseCoin/iBaseCoin.d.ts.map +1 -1
  4. package/dist/src/bitgo/baseCoin/iBaseCoin.js +1 -1
  5. package/dist/src/bitgo/environments.d.ts +6 -0
  6. package/dist/src/bitgo/environments.d.ts.map +1 -1
  7. package/dist/src/bitgo/environments.js +15 -2
  8. package/dist/src/bitgo/errors.d.ts +3 -0
  9. package/dist/src/bitgo/errors.d.ts.map +1 -1
  10. package/dist/src/bitgo/errors.js +8 -2
  11. package/dist/src/bitgo/utils/tss/baseTypes.d.ts +2 -1
  12. package/dist/src/bitgo/utils/tss/baseTypes.d.ts.map +1 -1
  13. package/dist/src/bitgo/utils/tss/baseTypes.js +1 -1
  14. package/dist/src/bitgo/utils/tss/ecdsa/ecdsa.d.ts.map +1 -1
  15. package/dist/src/bitgo/utils/tss/ecdsa/ecdsa.js +21 -1
  16. package/dist/src/bitgo/utils/tss/ecdsa/ecdsaMPCv2.d.ts.map +1 -1
  17. package/dist/src/bitgo/utils/tss/ecdsa/ecdsaMPCv2.js +21 -1
  18. package/dist/src/bitgo/wallet/iWallet.d.ts +6 -0
  19. package/dist/src/bitgo/wallet/iWallet.d.ts.map +1 -1
  20. package/dist/src/bitgo/wallet/iWallet.js +1 -1
  21. package/dist/src/bitgo/wallet/iWallets.d.ts +4 -1
  22. package/dist/src/bitgo/wallet/iWallets.d.ts.map +1 -1
  23. package/dist/src/bitgo/wallet/iWallets.js +1 -1
  24. package/dist/src/bitgo/wallet/wallet.d.ts +7 -1
  25. package/dist/src/bitgo/wallet/wallet.d.ts.map +1 -1
  26. package/dist/src/bitgo/wallet/wallet.js +38 -2
  27. package/dist/src/bitgo/wallet/wallets.d.ts +5 -5
  28. package/dist/src/bitgo/wallet/wallets.d.ts.map +1 -1
  29. package/dist/src/bitgo/wallet/wallets.js +3 -3
  30. package/dist/tsconfig.tsbuildinfo +1 -1
  31. package/package.json +3 -3
@@ -494,6 +494,26 @@ class EcdsaUtils extends base_1.BaseEcdsaUtils {
494
494
  if (requestType === baseTypes_1.RequestType.tx) {
495
495
  (0, assert_1.default)(txRequest.transactions || txRequest.unsignedTxs, 'Unable to find transactions in txRequest');
496
496
  const unsignedTx = txRequest.apiVersion === 'full' ? txRequest.transactions[0].unsignedTx : txRequest.unsignedTxs[0];
497
+ // For ICP transactions, the HSM signs the serializedTxHex, while the user signs the signableHex separately.
498
+ // Verification cannot be performed directly on the signableHex alone. However, we can parse the serializedTxHex
499
+ // to regenerate the signableHex and compare it against the provided value for verification.
500
+ // In contrast, for other coin families, verification is typically done using just the signableHex.
501
+ if (this.baseCoin.getConfig().family === 'icp') {
502
+ await this.baseCoin.verifyTransaction({
503
+ txPrebuild: { txHex: unsignedTx.serializedTxHex, txInfo: unsignedTx.signableHex },
504
+ txParams: params.txParams || { recipients: [] },
505
+ wallet: this.wallet,
506
+ walletType: this.wallet.multisigType(),
507
+ });
508
+ }
509
+ else {
510
+ await this.baseCoin.verifyTransaction({
511
+ txPrebuild: { txHex: unsignedTx.signableHex },
512
+ txParams: params.txParams || { recipients: [] },
513
+ wallet: this.wallet,
514
+ walletType: this.wallet.multisigType(),
515
+ });
516
+ }
497
517
  signablePayload = buffer_1.Buffer.from(unsignedTx.signableHex, 'hex');
498
518
  derivationPath = unsignedTx.derivationPath;
499
519
  }
@@ -827,4 +847,4 @@ class EcdsaUtils extends base_1.BaseEcdsaUtils {
827
847
  }
828
848
  }
829
849
  exports.EcdsaUtils = EcdsaUtils;
830
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWNkc2EuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvYml0Z28vdXRpbHMvdHNzL2VjZHNhL2VjZHNhLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLG9EQUE0QjtBQUM1QixtQ0FBZ0M7QUFDaEMsaURBQW1DO0FBR25DLG9EQUF1SDtBQUN2SCw4Q0FBd0M7QUFFeEMseURBQStEO0FBRS9ELCtEQUFvRTtBQVVwRSw0Q0Fhc0I7QUFDdEIsc0NBQTRDO0FBQzVDLG9EQUFrSDtBQUNsSCxxREFBNkY7QUFFN0Ysb0RBQWlFO0FBQ2pFLHdDQUFtRjtBQUNuRixnREFBNEQ7QUFDNUQsOENBSzRCO0FBQzVCLGlDQUF3QztBQUd4QyxNQUFNLGFBQWEsR0FBRyxlQUFZLENBQUMsYUFBYSxDQUFDO0FBRWpELGtCQUFrQjtBQUNsQixNQUFhLFVBQVcsU0FBUSxxQkFBYztJQUM1QyxLQUFLLENBQUMsK0JBQStCLENBQ25DLEtBQWEsRUFDYixjQUFzQixFQUN0QixZQUFzQixFQUN0QixhQUF1QixFQUN2QixVQUFxQyxFQUNyQyw0QkFBaUM7UUFFakMsTUFBTSwwQkFBMEIsR0FBRyxNQUFNLGFBQWEsQ0FDcEQsWUFBWSxFQUNaLENBQUMsRUFDRCw0QkFBNEIsQ0FBQyxLQUFLLEVBQUUsRUFDcEMsVUFBVSxDQUNYLENBQUM7UUFDRixNQUFNLHFCQUFxQixHQUFHLGFBQWEsQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUN6RCxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUMsUUFBUSxDQUFDLElBQUksS0FBSyxPQUFPLElBQUksUUFBUSxDQUFDLEVBQUUsS0FBSyxRQUFRLENBQ3BFLENBQUM7UUFDRixNQUFNLGVBQWUsR0FBRyxlQUFNLENBQUMsTUFBTSxDQUFDO1lBQ3BDLGVBQU0sQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMs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RUFBRSxZQUFZLENBQUMsTUFBTTtnQkFDM0IsRUFBRSxFQUFFLFlBQVksQ0FBQyxFQUFFO2dCQUNuQixFQUFFLEVBQUUsWUFBWSxDQUFDLEVBQUU7Z0JBQ25CLFNBQVMsRUFBRTtvQkFDVCxjQUFjLEVBQUUscUJBQXFCO2lCQUN0QzthQUNGO1lBQ0QscUJBQXFCLEVBQUU7Z0JBQ3JCLFNBQVMsRUFBRTtvQkFDVCxjQUFjLEVBQUUsMEJBQTBCO2lCQUMzQzthQUNGO1lBQ0QsYUFBYSxFQUFFO2dCQUNiLFNBQVMsRUFBRTtvQkFDVCxjQUFjLEVBQUUsNEJBQTRCO2lCQUM3QzthQUNGO1NBQ0YsQ0FBQztRQUNGLElBQUksYUFBYSxJQUFJLFlBQVksRUFBRSxDQUFDO1lBQ2xDLElBQUksQ0FBQyxVQUFVLENBQUMsYUFBYSxDQUFDLEdBQUcsWUFBWSxDQUFDLFdBQVcsQ0FBQztRQUM1RCxDQUFDO1FBQ0QsTUFBTSxLQUFLO2FBQ1IsR0FBRyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsZUFBZSxLQUFLLDRCQUE0QixFQUFFLENBQUMsQ0FBQyxDQUFDO2FBQ25FLElBQUksQ0FBQyxJQUFJLENBQUM7YUFDVixNQUFNLEVBQUUsQ0FBQztJQUNkLENBQUM7Q0FDRjtBQTlxQ0QsZ0NBOHFDQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBhc3NlcnQgZnJvbSAnYXNzZXJ0JztcbmltcG9ydCB7IEJ1ZmZlciB9IGZyb20gJ2J1ZmZlcic7XG5pbXBvcnQgKiBhcyBvcGVucGdwIGZyb20gJ29wZW5wZ3AnO1xuaW1wb3J0IHsgS2V5LCBTZXJpYWxpemVkS2V5UGFpciB9IGZyb20gJ29wZW5wZ3AnO1xuaW1wb3J0IHsgSGFzaCB9IGZyb20gJ2NyeXB0byc7XG5pbXBvcnQgeyBFY2RzYVBhaWxsaWVyUHJvb2YsIEVjZHNhUmFuZ2VQcm9vZiwgRWNkc2FUeXBlcywgaGV4VG9CaWdJbnQsIG1pbk1vZHVsdXNCaXRMZW5ndGggfSBmcm9tICdAYml0Z28vc2RrLWxpYi1tcGMnO1xuaW1wb3J0IHsgYmlwMzIgfSBmcm9tICdAYml0Z28vdXR4by1saWInO1xuXG5pbXBvcnQgeyBFQ0RTQSwgRWNkc2EgfSBmcm9tICcuLi8uLi8uLi8uLi9hY2NvdW50LWxpYi9tcGMvdHNzJztcbmltcG9ydCB7IEFkZEtleWNoYWluT3B0aW9ucywgS2V5Y2hhaW4sIEtleVR5cGUgfSBmcm9tICcuLi8uLi8uLi9rZXljaGFpbic7XG5pbXBvcnQgRUNEU0FNZXRob2RzLCB7IEVDRFNBTWV0aG9kVHlwZXMgfSBmcm9tICcuLi8uLi8uLi90c3MvZWNkc2EnO1xuaW1wb3J0IHsgS2V5Y2hhaW5zVHJpcGxldCB9IGZyb20gJy4uLy4uLy4uL2Jhc2VDb2luJztcbmltcG9ydCB7XG4gIEJpdEdvUHJvb2ZTaWduYXR1cmVzLFxuICBDcmVhdGVFY2RzYUJpdEdvS2V5Y2hhaW5QYXJhbXMsXG4gIENyZWF0ZUVjZHNhS2V5Y2hhaW5QYXJhbXMsXG4gIERlY3J5cHRhYmxlTlNoYXJlLFxuICBHZXRCaXRHb0NoYWxsZW5nZXNBcGksXG4gIEtleVNoYXJlLFxufSBmcm9tICcuL3R5cGVzJztcbmltcG9ydCB7XG4gIEJhY2t1cEtleVNoYXJlLFxuICBCaXRnb0hlbGRCYWNrdXBLZXlTaGFyZSxcbiAgQ3VzdG9tS1NoYXJlR2VuZXJhdGluZ0Z1bmN0aW9uLFxuICBDdXN0b21NdURlbHRhU2hhcmVHZW5lcmF0aW5nRnVuY3Rpb24sXG4gIEN1c3RvbVBhaWxsaWVyTW9kdWx1c0dldHRlckZ1bmN0aW9uLFxuICBDdXN0b21TU2hhcmVHZW5lcmF0aW5nRnVuY3Rpb24sXG4gIFJlcXVlc3RUeXBlLFxuICBUU1NQYXJhbXMsXG4gIFRTU1BhcmFtc0Zvck1lc3NhZ2UsXG4gIFRTU1BhcmFtc0Zvck1lc3NhZ2VXaXRoUHJ2LFxuICBUU1NQYXJhbXNXaXRoUHJ2LFxuICBUeFJlcXVlc3QsXG59IGZyb20gJy4uL2Jhc2VUeXBlcyc7XG5pbXBvcnQgeyBnZXRUeFJlcXVlc3QgfSBmcm9tICcuLi8uLi8uLi90c3MnO1xuaW1wb3J0IHsgQVNoYXJlLCBEU2hhcmUsIEVuY3J5cHRlZE5TaGFyZSwgU2VuZFNoYXJlVHlwZSwgU1NoYXJlLCBXU2hhcmUsIE9TaGFyZSB9IGZyb20gJy4uLy4uLy4uL3Rzcy9lY2RzYS90eXBlcyc7XG5pbXBvcnQgeyBjcmVhdGVTaGFyZVByb29mLCBnZW5lcmF0ZUdQR0tleVBhaXIsIGdldEJpdGdvR3BnUHViS2V5IH0gZnJvbSAnLi4vLi4vb3BlbmdwZ1V0aWxzJztcbmltcG9ydCB7IEJpdEdvQmFzZSB9IGZyb20gJy4uLy4uLy4uL2JpdGdvQmFzZSc7XG5pbXBvcnQgeyB2ZXJpZnlXYWxsZXRTaWduYXR1cmUgfSBmcm9tICcuLi8uLi8uLi90c3MvZWNkc2EvZWNkc2EnO1xuaW1wb3J0IHsgc2lnbk1lc3NhZ2VXaXRoRGVyaXZlZEVjZGhLZXksIHZlcmlmeUVjZGhTaWduYXR1cmUgfSBmcm9tICcuLi8uLi8uLi9lY2RoJztcbmltcG9ydCB7IGdldFR4UmVxdWVzdENoYWxsZW5nZSB9IGZyb20gJy4uLy4uLy4uL3Rzcy9jb21tb24nO1xuaW1wb3J0IHtcbiAgU2hhcmVLZXlQb3NpdGlvbixcbiAgVHNzRWNkc2FTdGVwMVJldHVybk1lc3NhZ2UsXG4gIFRzc0VjZHNhU3RlcDJSZXR1cm5NZXNzYWdlLFxuICBUeFJlcXVlc3RDaGFsbGVuZ2VSZXNwb25zZSxcbn0gZnJvbSAnLi4vLi4vLi4vdHNzL3R5cGVzJztcbmltcG9ydCB7IEJhc2VFY2RzYVV0aWxzIH0gZnJvbSAnLi9iYXNlJztcbmltcG9ydCB7IElSZXF1ZXN0VHJhY2VyIH0gZnJvbSAnLi4vLi4vLi4vLi4vYXBpJztcblxuY29uc3QgZW5jcnlwdE5TaGFyZSA9IEVDRFNBTWV0aG9kcy5lbmNyeXB0TlNoYXJlO1xuXG4vKiogQGluaGVyaXRkb2MgKi9cbmV4cG9ydCBjbGFzcyBFY2RzYVV0aWxzIGV4dGVuZHMgQmFzZUVjZHNhVXRpbHMge1xuICBhc3luYyBmaW5hbGl6ZUJpdGdvSGVsZEJhY2t1cEtleVNoYXJlKFxuICAgIGtleUlkOiBzdHJpbmcsXG4gICAgY29tbW9uS2V5Y2hhaW46IHN0cmluZyxcbiAgICB1c2VyS2V5U2hhcmU6IEtleVNoYXJlLFxuICAgIGJpdGdvS2V5Y2hhaW46IEtleWNoYWluLFxuICAgIHVzZXJHcGdLZXk6IFNlcmlhbGl6ZWRLZXlQYWlyPHN0cmluZz4sXG4gICAgdGhpcmRQYXJ0eUJhY2t1cFB1YmxpY0dwZ0tleTogS2V5XG4gICk6IFByb21pc2U8Qml0Z29IZWxkQmFja3VwS2V5U2hhcmU+IHtcbiAgICBjb25zdCBlbmNyeXB0ZWRVc2VyVG9CYWNrdXBTaGFyZSA9IGF3YWl0IGVuY3J5cHROU2hhcmUoXG4gICAgICB1c2VyS2V5U2hhcmUsXG4gICAgICAyLFxuICAgICAgdGhpcmRQYXJ0eUJhY2t1cFB1YmxpY0dwZ0tleS5hcm1vcigpLFxuICAgICAgdXNlckdwZ0tleVxuICAgICk7XG4gICAgY29uc3QgYml0Z29Ub0JhY2t1cEtleVNoYXJlID0gYml0Z29LZXljaGFpbi5rZXlTaGFyZXM/LmZpbmQoXG4gICAgICAoa2V5U2hhcmUpID0+IGtleVNoYXJlLmZyb20gPT09ICdiaXRnbycgJiYga2V5U2hhcmUudG8gPT09ICdiYWNrdXAnXG4gICAgKTtcbiAgICBjb25zdCB1c2VyUHVibGljU2hhcmUgPSBCdWZmZXIuY29uY2F0KFtcbiAgICAgIEJ1ZmZlci5mcm9tKHVzZXJLZXlTaGFyZS5uU2hhcmVzWzJdLnksICdoZXgnKSxcbiAgICAgIEJ1ZmZlci5mcm9tKHVzZXJLZXlTaGFyZS5uU2hhcmVzWzJdLmNoYWluY29kZSwgJ2hleCcpLFxuICAgIF0pLnRvU3RyaW5nKCdoZXgnKTtcbiAgICBhc3NlcnQoYml0Z29Ub0JhY2t1cEtleVNoYXJlKTtcbiAgICBjb25zdCBrZXlSZXNwb25zZSA9IGF3YWl0IHRoaXMuYml0Z29cbiAgICAgIC5wdXQodGhpcy5iYXNlQ29pbi51cmwoYC9rcnMvYmFja3Vwa2V5cy8ke2tleUlkfWApKVxuICAgICAgLnNlbmQoe1xuICAgICAgICBjb21tb25LZXljaGFpbixcbiAgICAgICAga2V5U2hhcmVzOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgZnJvbTogJ3VzZXInLFxuICAgICAgICAgICAgdG86ICdiYWNrdXAnLFxuICAgICAgICAgICAgcHVibGljU2hhcmU6IHVzZXJQdWJsaWNTaGFyZSxcbiAgICAgICAgICAgIHByaXZhdGVTaGFyZTogZW5jcnlwdGVkVXNlclRvQmFja3VwU2hhcmUuZW5jcnlwdGVkUHJpdmF0ZVNoYXJlLFxuICAgICAgICAgICAgcHJpdmF0ZVNoYXJlUHJvb2Y6IGVuY3J5cHRlZFVzZXJUb0JhY2t1cFNoYXJlLnByaXZhdGVTaGFyZVByb29mLFxuICAgICAgICAgICAgdnNzUHJvb2Y6IGVuY3J5cHRlZFVzZXJUb0JhY2t1cFNoYXJlLnZzc1Byb29mLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgYml0Z29Ub0JhY2t1cEtleVNoYXJlLFxuICAgICAgICBdLFxuICAgICAgfSlcbiAgICAgIC5yZXN1bHQoKTtcbiAgICBpZiAoIWtleVJlc3BvbnNlIHx8ICFrZXlSZXNwb25zZS5jb21tb25LZXljaGFpbikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdGYWlsZWQgYmFja3VwIGtleSB2ZXJpZmljYXRpb24uJyk7XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICBpZDoga2V5UmVzcG9uc2UuaWQsXG4gICAgICBrZXlTaGFyZXM6IGtleVJlc3BvbnNlLmtleVNoYXJlcyxcbiAgICAgIGNvbW1vbktleWNoYWluOiBrZXlSZXNwb25zZS5jb21tb25LZXljaGFpbixcbiAgICB9O1xuICB9XG5cbiAgLyoqIEBpbmhlcml0ZG9jICovXG4gIGFzeW5jIGNyZWF0ZUtleWNoYWlucyhwYXJhbXM6IHtcbiAgICBwYXNzcGhyYXNlOiBzdHJpbmc7XG4gICAgZW50ZXJwcmlzZT86IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICBvcmlnaW5hbFBhc3Njb2RlRW5jcnlwdGlvbkNvZGU/OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gIH0pOiBQcm9taXNlPEtleWNoYWluc1RyaXBsZXQ+IHtcbiAgICBjb25zdCBNUEMgPSBuZXcgRWNkc2EoKTtcbiAgICBjb25zdCBtID0gMjtcbiAgICBjb25zdCBuID0gMztcblxuICAgIGNvbnN0IHVzZXJLZXlTaGFyZSA9IGF3YWl0IE1QQy5rZXlTaGFyZSgxLCBtLCBuKTtcbiAgICBjb25zdCB1c2VyR3BnS2V5ID0gYXdhaXQgZ2VuZXJhdGVHUEdLZXlQYWlyKCdzZWNwMjU2azEnKTtcbiAgICBjb25zdCBiYWNrdXBLZXlTaGFyZSA9IGF3YWl0IHRoaXMuY3JlYXRlQmFja3VwS2V5U2hhcmVzKCk7XG4gICAgY29uc3QgYmFja3VwR3BnS2V5ID0gYXdhaXQgdGhpcy5nZXRCYWNrdXBHcGdQdWJLZXkoKTtcblxuICAgIC8vIEdldCB0aGUgQml0R28gcHVibGljIGtleSBiYXNlZCBvbiB1c2VyL2VudGVycHJpc2UgZmVhdHVyZSBmbGFnc1xuICAgIC8vIElmIGl0IGRvZXNuJ3Qgd29yaywgdXNlIHRoZSBkZWZhdWx0IHB1YmxpYyBrZXkgZnJvbSB0aGUgY29uc3RhbnRzXG4gICAgY29uc3QgYml0Z29QdWJsaWNHcGdLZXkgPVxuICAgICAgKGF3YWl0IHRoaXMuZ2V0Qml0Z29HcGdQdWJrZXlCYXNlZE9uRmVhdHVyZUZsYWdzKHBhcmFtcy5lbnRlcnByaXNlKSkgPz8gdGhpcy5iaXRnb1B1YmxpY0dwZ0tleTtcblxuICAgIGNvbnN0IGJpdGdvS2V5Y2hhaW4gPSBhd2FpdCB0aGlzLmNyZWF0ZUJpdGdvS2V5Y2hhaW4oe1xuICAgICAgdXNlckdwZ0tleSxcbiAgICAgIGJhY2t1cEdwZ0tleSxcbiAgICAgIGJpdGdvUHVibGljR3BnS2V5LFxuICAgICAgdXNlcktleVNoYXJlLFxuICAgICAgYmFja3VwS2V5U2hhcmUsXG4gICAgICBlbnRlcnByaXNlOiBwYXJhbXMuZW50ZXJwcmlzZSxcbiAgICB9KTtcbiAgICBjb25zdCB1c2VyS2V5Y2hhaW5Qcm9taXNlID0gdGhpcy5jcmVhdGVVc2VyS2V5Y2hhaW4oe1xuICAgICAgdXNlckdwZ0tleSxcbiAgICAgIGJhY2t1cEdwZ0tleSxcbiAgICAgIGJpdGdvUHVibGljR3BnS2V5LFxuICAgICAgdXNlcktleVNoYXJlLFxuICAgICAgYmFja3VwS2V5U2hhcmUsXG4gICAgICBiaXRnb0tleWNoYWluLFxuICAgICAgcGFzc3BocmFzZTogcGFyYW1zLnBhc3NwaHJhc2UsXG4gICAgICBvcmlnaW5hbFBhc3Njb2RlRW5jcnlwdGlvbkNvZGU6IHBhcmFtcy5vcmlnaW5hbFBhc3Njb2RlRW5jcnlwdGlvbkNvZGUsXG4gICAgfSk7XG4gICAgY29uc3QgYmFja3VwS2V5Y2hhaW5Qcm9taXNlID0gdGhpcy5jcmVhdGVCYWNrdXBLZXljaGFpbih7XG4gICAgICB1c2VyR3BnS2V5LFxuICAgICAgYmFja3VwR3BnS2V5LFxuICAgICAgYml0Z29QdWJsaWNHcGdLZXksXG4gICAgICB1c2VyS2V5U2hhcmUsXG4gICAgICBiYWNrdXBLZXlTaGFyZSxcbiAgICAgIGJpdGdvS2V5Y2hhaW4sXG4gICAgICBwYXNzcGhyYXNlOiBwYXJhbXMucGFzc3BocmFzZSxcbiAgICB9KTtcblxuICAgIGNvbnN0IFt1c2VyS2V5Y2hhaW4sIGJhY2t1cEtleWNoYWluXSA9IGF3YWl0IFByb21pc2UuYWxsKFt1c2VyS2V5Y2hhaW5Qcm9taXNlLCBiYWNrdXBLZXljaGFpblByb21pc2VdKTtcblxuICAgIHJldHVybiB7XG4gICAgICB1c2VyS2V5Y2hhaW4sXG4gICAgICBiYWNrdXBLZXljaGFpbixcbiAgICAgIGJpdGdvS2V5Y2hhaW4sXG4gICAgfTtcbiAgfVxuXG4gIGFzeW5jIGNyZWF0ZUJhY2t1cEtleVNoYXJlcygpOiBQcm9taXNlPEJhY2t1cEtleVNoYXJlPiB7XG4gICAgY29uc3QgTVBDID0gbmV3IEVjZHNhKCk7XG4gICAgY29uc3QgbSA9IDI7XG4gICAgY29uc3QgbiA9IDM7XG4gICAgY29uc3QgYmFja3VwS2V5U2hhcmUgPSB7XG4gICAgICB1c2VySGVsZEtleVNoYXJlOiBhd2FpdCBNUEMua2V5U2hhcmUoMiwgbSwgbiksXG4gICAgfTtcbiAgICByZXR1cm4gYmFja3VwS2V5U2hhcmU7XG4gIH1cblxuICBjcmVhdGVVc2VyS2V5Y2hhaW4oe1xuICAgIHVzZXJHcGdLZXksXG4gICAgYmFja3VwR3BnS2V5LFxuICAgIGJpdGdvUHVibGljR3BnS2V5LFxuICAgIHVzZXJLZXlTaGFyZSxcbiAgICBiYWNrdXBLZXlTaGFyZSxcbiAgICBiaXRnb0tleWNoYWluLFxuICAgIHBhc3NwaHJhc2UsXG4gICAgb3JpZ2luYWxQYXNzY29kZUVuY3J5cHRpb25Db2RlLFxuICB9OiBDcmVhdGVFY2RzYUtleWNoYWluUGFyYW1zKTogUHJvbWlzZTxLZXljaGFpbj4ge1xuICAgIGlmICghcGFzc3BocmFzZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdQbGVhc2UgcHJvdmlkZSBhIHdhbGxldCBwYXNzcGhyYXNlJyk7XG4gICAgfVxuICAgIGFzc2VydChiYWNrdXBLZXlTaGFyZS51c2VySGVsZEtleVNoYXJlKTtcbiAgICByZXR1cm4gdGhpcy5jcmVhdGVQYXJ0aWNpcGFudEtleWNoYWluKFxuICAgICAgdXNlckdwZ0tleSxcbiAgICAgIGJhY2t1cEdwZ0tleSBhcyBTZXJpYWxpemVkS2V5UGFpcjxzdHJpbmc+LFxuICAgICAgYml0Z29QdWJsaWNHcGdLZXksXG4gICAgICAxLFxuICAgICAgdXNlcktleVNoYXJlLFxuICAgICAgYmFja3VwS2V5U2hhcmUudXNlckhlbGRLZXlTaGFyZSxcbiAgICAgIGJpdGdvS2V5Y2hhaW4sXG4gICAgICBwYXNzcGhyYXNlLFxuICAgICAgb3JpZ2luYWxQYXNzY29kZUVuY3J5cHRpb25Db2RlXG4gICAgKTtcbiAgfVxuXG4gIGFzeW5jIGNyZWF0ZUJhY2t1cEtleWNoYWluKHtcbiAgICB1c2VyR3BnS2V5LFxuICAgIHVzZXJLZXlTaGFyZSxcbiAgICBiYWNrdXBHcGdLZXksXG4gICAgYmFja3VwS2V5U2hhcmUsXG4gICAgYml0Z29LZXljaGFpbixcbiAgICBiaXRnb1B1YmxpY0dwZ0tleSxcbiAgICBwYXNzcGhyYXNlLFxuICB9OiBDcmVhdGVFY2RzYUtleWNoYWluUGFyYW1zKTogUHJvbWlzZTxLZXljaGFpbj4ge1xuICAgIGFzc2VydChiYWNrdXBLZXlTaGFyZS51c2VySGVsZEtleVNoYXJlKTtcbiAgICBhc3NlcnQocGFzc3BocmFzZSk7XG4gICAgcmV0dXJuIHRoaXMuY3JlYXRlUGFydGljaXBhbnRLZXljaGFpbihcbiAgICAgIHVzZXJHcGdLZXksXG4gICAgICBiYWNrdXBHcGdLZXkgYXMgU2VyaWFsaXplZEtleVBhaXI8c3RyaW5nPixcbiAgICAgIGJpdGdvUHVibGljR3BnS2V5LFxuICAgICAgMixcbiAgICAgIHVzZXJLZXlTaGFyZSxcbiAgICAgIGJhY2t1cEtleVNoYXJlLnVzZXJIZWxkS2V5U2hhcmUsXG4gICAgICBiaXRnb0tleWNoYWluLFxuICAgICAgcGFzc3BocmFzZVxuICAgICk7XG4gIH1cblxuICAvKiogQGluaGVyaXRkb2MgKi9cbiAgYXN5bmMgY3JlYXRlQml0Z29LZXljaGFpbih7XG4gICAgdXNlckdwZ0tleSxcbiAgICBiYWNrdXBHcGdLZXksXG4gICAgdXNlcktleVNoYXJlLFxuICAgIGJhY2t1cEtleVNoYXJlLFxuICAgIGVudGVycHJpc2UsXG4gICAgYml0Z29QdWJsaWNHcGdLZXksXG4gIH06IENyZWF0ZUVjZHNhQml0R29LZXljaGFpblBhcmFtcyk6IFByb21pc2U8S2V5Y2hhaW4+IHtcbiAgICBjb25zdCByZWNpcGllbnRJbmRleCA9IDM7XG4gICAgY29uc3QgdXNlclRvQml0Z29TaGFyZSA9IGF3YWl0IGVuY3J5cHROU2hhcmUodXNlcktleVNoYXJlLCByZWNpcGllbnRJbmRleCwgYml0Z29QdWJsaWNHcGdLZXkuYXJtb3IoKSwgdXNlckdwZ0tleSk7XG5cbiAgICBjb25zdCBiYWNrdXBUb0JpdGdvU2hhcmUgPSBhd2FpdCB0aGlzLmdldEJhY2t1cEVuY3J5cHRlZE5TaGFyZShcbiAgICAgIGJhY2t1cEtleVNoYXJlLFxuICAgICAgcmVjaXBpZW50SW5kZXgsXG4gICAgICBiaXRnb1B1YmxpY0dwZ0tleS5hcm1vcigpLFxuICAgICAgYmFja3VwR3BnS2V5IGFzIFNlcmlhbGl6ZWRLZXlQYWlyPHN0cmluZz5cbiAgICApO1xuXG4gICAgY29uc3QgY3JlYXRlQml0R29NUENQYXJhbXM6IEFkZEtleWNoYWluT3B0aW9ucyA9IHtcbiAgICAgIGtleVR5cGU6ICd0c3MnIGFzIEtleVR5cGUsXG4gICAgICBzb3VyY2U6ICdiaXRnbycsXG4gICAgICBrZXlTaGFyZXM6IFtcbiAgICAgICAge1xuICAgICAgICAgIGZyb206ICd1c2VyJyxcbiAgICAgICAgICB0bzogJ2JpdGdvJyxcbiAgICAgICAgICBwdWJsaWNTaGFyZTogdXNlclRvQml0Z29TaGFyZS5wdWJsaWNTaGFyZSxcbiAgICAgICAgICBwcml2YXRlU2hhcmU6IHVzZXJUb0JpdGdvU2hhcmUuZW5jcnlwdGVkUHJpdmF0ZVNoYXJlLFxuICAgICAgICAgIG46IHVzZXJUb0JpdGdvU2hhcmUubixcbiAgICAgICAgICB2c3NQcm9vZjogdXNlclRvQml0Z29TaGFyZS52c3NQcm9vZixcbiAgICAgICAgICBwcml2YXRlU2hhcmVQcm9vZjogdXNlclRvQml0Z29TaGFyZS5wcml2YXRlU2hhcmVQcm9vZixcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGZyb206ICdiYWNrdXAnLFxuICAgICAgICAgIHRvOiAnYml0Z28nLFxuICAgICAgICAgIHB1YmxpY1NoYXJlOiBiYWNrdXBUb0JpdGdvU2hhcmUucHVibGljU2hhcmUsXG4gICAgICAgICAgcHJpdmF0ZVNoYXJlOiBiYWNrdXBUb0JpdGdvU2hhcmUuZW5jcnlwdGVkUHJpdmF0ZVNoYXJlLFxuICAgICAgICAgIG46IGJhY2t1cFRvQml0Z29TaGFyZS5uLFxuICAgICAgICAgIHZzc1Byb29mOiBiYWNrdXBUb0JpdGdvU2hhcmUudnNzUHJvb2YsXG4gICAgICAgICAgcHJpdmF0ZVNoYXJlUHJvb2Y6IGJhY2t1cFRvQml0Z29TaGFyZS5wcml2YXRlU2hhcmVQcm9vZixcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgICB1c2VyR1BHUHVibGljS2V5OiB1c2VyR3BnS2V5LnB1YmxpY0tleSxcbiAgICAgIGJhY2t1cEdQR1B1YmxpY0tleTogKGJhY2t1cEdwZ0tleSBhcyBTZXJpYWxpemVkS2V5UGFpcjxzdHJpbmc+KS5wdWJsaWNLZXksXG4gICAgICBlbnRlcnByaXNlOiBlbnRlcnByaXNlLFxuICAgICAgYWxnb1VzZWQ6ICdlY2RzYScsXG4gICAgfTtcblxuICAgIHJldHVybiBhd2FpdCB0aGlzLmJhc2VDb2luLmtleWNoYWlucygpLmFkZChjcmVhdGVCaXRHb01QQ1BhcmFtcyk7XG4gIH1cblxuICAvKipcbiAgICogVGhpcyBidWlsZHMgdGhlIHJlbGV2YW50IGJhY2t1cCBlbmNyeXB0ZWROU2hhcmUgYmFzZWQgb24gd2hldGhlciB0aGVcbiAgICogYmFja3VwIGtleSBpcyB1c2VyIG9yIHRoaXJkIHBhcnR5IGdlbmVyYXRlZFxuICAgKiBAcGFyYW0gYmFja3VwU2hhcmUgY2FuIGVpdGhlciBoYXZlIGtleSBzaGFyZXMgZnJvbSB0aGUgdXNlciBvciB0aGlyZCBwYXJ0eVxuICAgKiBAcGFyYW0gcmVjaXBpZW50SW5kZXggaW5kZXggb2YgdGhlIHBhcnR5IHJlY2VpdmluZyB0aGUgYmFja3VwIHNoYXJlc1xuICAgKiBAcGFyYW0gcmVjaXBpZW50R3BnUHVibGljQXJtb3IgZ3BnIGFybW9yIG9mIHRoZSBwYXJ0eSByZWNlaXZpbmcgdGhlIGJhY2t1cCBzaGFyZXNcbiAgICogQHBhcmFtIGJhY2t1cEdwZ0tleSBiYWNrdXAgZ3BnIGtleVxuICAgKiBAcGFyYW0gaXNUaGlyZFBhcnR5QmFja3VwIHdoZXRoZXIgdGhlIGJhY2t1cCBpcyBnZW5lcmF0ZWQgYnkgdGhpcmQgcGFydHlcbiAgICovXG4gIGFzeW5jIGdldEJhY2t1cEVuY3J5cHRlZE5TaGFyZShcbiAgICBiYWNrdXBTaGFyZTogQmFja3VwS2V5U2hhcmUsXG4gICAgcmVjaXBpZW50SW5kZXg6IG51bWJlcixcbiAgICByZWNpcGllbnRHcGdQdWJsaWNBcm1vcjogc3RyaW5nLFxuICAgIGJhY2t1cEdwZ0tleTogU2VyaWFsaXplZEtleVBhaXI8c3RyaW5nPlxuICApOiBQcm9taXNlPEVuY3J5cHRlZE5TaGFyZT4ge1xuICAgIGFzc2VydChiYWNrdXBTaGFyZS51c2VySGVsZEtleVNoYXJlKTtcbiAgICBjb25zdCBiYWNrdXBUb1JlY2lwaWVudFNoYXJlID0gYXdhaXQgZW5jcnlwdE5TaGFyZShcbiAgICAgIGJhY2t1cFNoYXJlLnVzZXJIZWxkS2V5U2hhcmUsXG4gICAgICByZWNpcGllbnRJbmRleCxcbiAgICAgIHJlY2lwaWVudEdwZ1B1YmxpY0FybW9yLFxuICAgICAgYmFja3VwR3BnS2V5XG4gICAgKTtcbiAgICByZXR1cm4gYmFja3VwVG9SZWNpcGllbnRTaGFyZTtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdGRvYyAqL1xuICBhc3luYyBjcmVhdGVQYXJ0aWNpcGFudEtleWNoYWluKFxuICAgIHVzZXJHcGdLZXk6IG9wZW5wZ3AuU2VyaWFsaXplZEtleVBhaXI8c3RyaW5nPixcbiAgICB1c2VyTG9jYWxCYWNrdXBHcGdLZXk6IG9wZW5wZ3AuU2VyaWFsaXplZEtleVBhaXI8c3RyaW5nPixcbiAgICBiaXRnb1B1YmxpY0dwZ0tleTogS2V5LFxuICAgIHJlY2lwaWVudEluZGV4OiBudW1iZXIsXG4gICAgdXNlcktleVNoYXJlOiBLZXlTaGFyZSxcbiAgICBiYWNrdXBLZXlTaGFyZTogS2V5U2hhcmUsXG4gICAgYml0Z29LZXljaGFpbjogS2V5Y2hhaW4sXG4gICAgcGFzc3BocmFzZTogc3RyaW5nLFxuICAgIG9yaWdpbmFsUGFzc2NvZGVFbmNyeXB0aW9uQ29kZT86IHN0cmluZ1xuICApOiBQcm9taXNlPEtleWNoYWluPiB7XG4gICAgY29uc3QgYml0Z29LZXlTaGFyZXMgPSBiaXRnb0tleWNoYWluLmtleVNoYXJlcztcbiAgICBpZiAoIWJpdGdvS2V5U2hhcmVzKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ01pc3NpbmcgQml0R28ga2V5IHNoYXJlcycpO1xuICAgIH1cbiAgICBpZiAoIWJpdGdvS2V5Y2hhaW4uY29tbW9uS2V5Y2hhaW4pIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgTWlzc2luZyBjb21tb24ga2V5IGNoYWluOiAke2JpdGdvS2V5Y2hhaW4uY29tbW9uS2V5Y2hhaW59YCk7XG4gICAgfVxuXG4gICAgbGV0IHJlY2lwaWVudDogc3RyaW5nO1xuICAgIGxldCBrZXlTaGFyZTogS2V5U2hhcmU7XG4gICAgbGV0IG90aGVyU2hhcmU6IEtleVNoYXJlO1xuICAgIGxldCByZWNpcGllbnRHcGdLZXk6IG9wZW5wZ3AuU2VyaWFsaXplZEtleVBhaXI8c3RyaW5nPjtcbiAgICBsZXQgc2VuZGVyR3BnS2V5OiBvcGVucGdwLlNlcmlhbGl6ZWRLZXlQYWlyPHN0cmluZz47XG4gICAgaWYgKHJlY2lwaWVudEluZGV4ID09PSAxKSB7XG4gICAgICBrZXlTaGFyZSA9IHVzZXJLZXlTaGFyZTtcbiAgICAgIG90aGVyU2hhcmUgPSBiYWNrdXBLZXlTaGFyZTtcbiAgICAgIHJlY2lwaWVudCA9ICd1c2VyJztcbiAgICAgIHJlY2lwaWVudEdwZ0tleSA9IHVzZXJHcGdLZXk7XG4gICAgICBzZW5kZXJHcGdLZXkgPSB1c2VyTG9jYWxCYWNrdXBHcGdLZXk7XG4gICAgfSBlbHNlIGlmIChyZWNpcGllbnRJbmRleCA9PT0gMikge1xuICAgICAga2V5U2hhcmUgPSBiYWNrdXBLZXlTaGFyZTtcbiAgICAgIG90aGVyU2hhcmUgPSB1c2VyS2V5U2hhcmU7XG4gICAgICByZWNpcGllbnQgPSAnYmFja3VwJztcbiAgICAgIHJlY2lwaWVudEdwZ0tleSA9IHVzZXJMb2NhbEJhY2t1cEdwZ0tleTtcbiAgICAgIHNlbmRlckdwZ0tleSA9IHVzZXJHcGdLZXk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCB1c2VyIGluZGV4Jyk7XG4gICAgfVxuXG4gICAgY29uc3QgYml0R29Ub1JlY2lwaWVudFNoYXJlID0gYml0Z29LZXlTaGFyZXMuZmluZChcbiAgICAgIChrZXlTaGFyZSkgPT4ga2V5U2hhcmUuZnJvbSA9PT0gJ2JpdGdvJyAmJiBrZXlTaGFyZS50byA9PT0gcmVjaXBpZW50XG4gICAgKTtcbiAgICBpZiAoIWJpdEdvVG9SZWNpcGllbnRTaGFyZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBNaXNzaW5nIEJpdEdvIHRvICR7cmVjaXBpZW50fSBrZXkgc2hhcmVgKTtcbiAgICB9XG5cbiAgICBjb25zdCBkZWNyeXB0ZWRTaGFyZSA9IGF3YWl0IHRoaXMuZGVjcnlwdFByaXZhdGVTaGFyZShiaXRHb1RvUmVjaXBpZW50U2hhcmUucHJpdmF0ZVNoYXJlLCByZWNpcGllbnRHcGdLZXkpO1xuXG4gICAgYXdhaXQgdGhpcy52ZXJpZnlXYWxsZXRTaWduYXR1cmVzKFxuICAgICAgdXNlckdwZ0tleS5wdWJsaWNLZXksXG4gICAgICB1c2VyTG9jYWxCYWNrdXBHcGdLZXkucHVibGljS2V5LFxuICAgICAgYml0Z29LZXljaGFpbixcbiAgICAgIGRlY3J5cHRlZFNoYXJlLFxuICAgICAgcmVjaXBpZW50SW5kZXhcbiAgICApO1xuXG4gICAgY29uc3Qgc2VuZGVyVG9SZWNpcGllbnRTaGFyZSA9IGF3YWl0IGVuY3J5cHROU2hhcmUoXG4gICAgICBvdGhlclNoYXJlLFxuICAgICAgcmVjaXBpZW50SW5kZXgsXG4gICAgICByZWNpcGllbnRHcGdLZXkucHVibGljS2V5LFxuICAgICAgc2VuZGVyR3BnS2V5XG4gICAgKTtcbiAgICBjb25zdCBlbmNyeXB0ZWROU2hhcmVzOiBEZWNyeXB0YWJsZU5TaGFyZVtdID0gW1xuICAgICAge1xuICAgICAgICAvLyB1c2VyVG9CYWNrdXAgb3IgYmFja3VwVG9Vc2VyXG4gICAgICAgIG5TaGFyZTogc2VuZGVyVG9SZWNpcGllbnRTaGFyZSxcbiAgICAgICAgcmVjaXBpZW50UHJpdmF0ZUFybW9yOiByZWNpcGllbnRHcGdLZXkucHJpdmF0ZUtleSxcbiAgICAgICAgc2VuZGVyUHVibGljQXJtb3I6IHNlbmRlckdwZ0tleS5wdWJsaWNLZXksXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICAvLyBiaXRnb1RvUmVjaXBpZW50XG4gICAgICAgIG5TaGFyZToge1xuICAgICAgICAgIGk6IHJlY2lwaWVudEluZGV4LFxuICAgICAgICAgIGo6IDMsXG4gICAgICAgICAgcHVibGljU2hhcmU6IGJpdEdvVG9SZWNpcGllbnRTaGFyZS5wdWJsaWNTaGFyZSxcbiAgICAgICAgICBlbmNyeXB0ZWRQcml2YXRlU2hhcmU6IGJpdEdvVG9SZWNpcGllbnRTaGFyZS5wcml2YXRlU2hhcmUsXG4gICAgICAgICAgbjogYml0R29Ub1JlY2lwaWVudFNoYXJlLm4hLFxuICAgICAgICAgIHZzc1Byb29mOiBiaXRHb1RvUmVjaXBpZW50U2hhcmUudnNzUHJvb2YsXG4gICAgICAgICAgcHJpdmF0ZVNoYXJlUHJvb2Y6IGJpdEdvVG9SZWNpcGllbnRTaGFyZS5wcml2YXRlU2hhcmVQcm9vZixcbiAgICAgICAgfSxcbiAgICAgICAgcmVjaXBpZW50UHJpdmF0ZUFybW9yOiByZWNpcGllbnRHcGdLZXkucHJpdmF0ZUtleSxcbiAgICAgICAgc2VuZGVyUHVibGljQXJtb3I6IGJpdGdvUHVibGljR3BnS2V5LmFybW9yKCksXG4gICAgICAgIGlzYnM1OEVuY29kZWQ6IGZhbHNlLFxuICAgICAgfSxcbiAgICBdO1xuXG4gICAgY29uc3QgcmVjaXBpZW50Q29tYmluZWRLZXkgPSBhd2FpdCBFQ0RTQU1ldGhvZHMuY3JlYXRlQ29tYmluZWRLZXkoXG4gICAgICBrZXlTaGFyZSxcbiAgICAgIGVuY3J5cHRlZE5TaGFyZXMsXG4gICAgICBiaXRnb0tleWNoYWluLmNvbW1vbktleWNoYWluXG4gICAgKTtcblxuICAgIGNvbnN0IHBydiA9IEpTT04uc3RyaW5naWZ5KHJlY2lwaWVudENvbWJpbmVkS2V5LnNpZ25pbmdNYXRlcmlhbCk7XG4gICAgY29uc3QgcmVjaXBpZW50S2V5Y2hhaW5QYXJhbXMgPSB7XG4gICAgICBzb3VyY2U6IHJlY2lwaWVudCxcbiAgICAgIGtleVR5cGU6ICd0c3MnIGFzIEtleVR5cGUsXG4gICAgICBjb21tb25LZXljaGFpbjogYml0Z29LZXljaGFpbi5jb21tb25LZXljaGFpbixcbiAgICAgIHBydjogcHJ2LFxuICAgICAgZW5jcnlwdGVkUHJ2OiB0aGlzLmJpdGdvLmVuY3J5cHQoe1xuICAgICAgICBpbnB1dDogcHJ2LFxuICAgICAgICBwYXNzd29yZDogcGFzc3BocmFzZSxcbiAgICAgIH0pLFxuICAgICAgb3JpZ2luYWxQYXNzY29kZUVuY3J5cHRpb25Db2RlLFxuICAgIH07XG5cbiAgICBjb25zdCBrZXljaGFpbnMgPSB0aGlzLmJhc2VDb2luLmtleWNoYWlucygpO1xuICAgIHJldHVybiByZWNpcGllbnRJbmRleCA9PT0gMVxuICAgICAgPyBhd2FpdCBrZXljaGFpbnMuYWRkKHJlY2lwaWVudEtleWNoYWluUGFyYW1zKVxuICAgICAgOiBhd2FpdCBrZXljaGFpbnMuY3JlYXRlQmFja3VwKHJlY2lwaWVudEtleWNoYWluUGFyYW1zKTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgY3JlYXRlVHNzRWNkc2FTdGVwMVNpZ25pbmdNYXRlcmlhbChwYXJhbXM6IHtcbiAgICBjaGFsbGVuZ2VzOiB7XG4gICAgICBlbnRlcnByaXNlQ2hhbGxlbmdlOiBFY2RzYVR5cGVzLlNlcmlhbGl6ZWRFY2RzYUNoYWxsZW5nZXM7XG4gICAgICBiaXRnb0NoYWxsZW5nZTogVHhSZXF1ZXN0Q2hhbGxlbmdlUmVzcG9uc2U7XG4gICAgfTtcbiAgICBwcnY6IHN0cmluZztcbiAgICBkZXJpdmF0aW9uUGF0aDogc3RyaW5nO1xuICAgIHdhbGxldFBhc3NwaHJhc2U/OiBzdHJpbmc7XG4gIH0pOiBQcm9taXNlPFRzc0VjZHNhU3RlcDFSZXR1cm5NZXNzYWdlPiB7XG4gICAgY29uc3QgeyBjaGFsbGVuZ2VzLCBkZXJpdmF0aW9uUGF0aCwgcHJ2IH0gPSBwYXJhbXM7XG4gICAgY29uc3QgdXNlclNpZ25pbmdNYXRlcmlhbDogRUNEU0FNZXRob2RUeXBlcy5TaWduaW5nTWF0ZXJpYWwgPSBKU09OLnBhcnNlKHBydik7XG4gICAgaWYgKHVzZXJTaWduaW5nTWF0ZXJpYWwucFNoYXJlLmkgIT09IDEpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCB1c2VyIGtleScpO1xuICAgIH1cbiAgICBpZiAoIXVzZXJTaWduaW5nTWF0ZXJpYWwuYmFja3VwTlNoYXJlKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgdXNlciBrZXkgLSBtaXNzaW5nIGJhY2t1cE5TaGFyZScpO1xuICAgIH1cbiAgICBjb25zdCBNUEMgPSBuZXcgRWNkc2EoKTtcbiAgICBjb25zdCBzaWduaW5nS2V5ID0gTVBDLmtleURlcml2ZShcbiAgICAgIHVzZXJTaWduaW5nTWF0ZXJpYWwucFNoYXJlLFxuICAgICAgW3VzZXJTaWduaW5nTWF0ZXJpYWwuYml0Z29OU2hhcmUsIHVzZXJTaWduaW5nTWF0ZXJpYWwuYmFja3VwTlNoYXJlXSxcbiAgICAgIGRlcml2YXRpb25QYXRoXG4gICAgKTtcblxuICAgIGNvbnN0IGJpdGdvSW5kZXggPSBTaGFyZUtleVBvc2l0aW9uLkJJVEdPO1xuICAgIGNvbnN0IHVzZXJJbmRleCA9IHVzZXJTaWduaW5nTWF0ZXJpYWwucFNoYXJlLmk7XG5cbiAgICBjb25zdCB7IG50aWxkZTogbnRpbGRlYSwgaDE6IGgxYSwgaDI6IGgyYSwgcDogcGEgfSA9IGNoYWxsZW5nZXMuZW50ZXJwcmlzZUNoYWxsZW5nZTtcbiAgICBjb25zdCB7IG50aWxkZTogbnRpbGRlYiwgaDE6IGgxYiwgaDI6IGgyYiwgcDogcGIsIG46IG5iIH0gPSBjaGFsbGVuZ2VzLmJpdGdvQ2hhbGxlbmdlO1xuICAgIGNvbnN0IHVzZXJYU2hhcmUgPSBNUEMuYXBwZW5kQ2hhbGxlbmdlKHNpZ25pbmdLZXkueFNoYXJlLCB7IG50aWxkZTogbnRpbGRlYSwgaDE6IGgxYSwgaDI6IGgyYSB9LCB7IHA6IHBhIH0pO1xuICAgIGNvbnN0IGJpdGdvWVNoYXJlID0gTVBDLmFwcGVuZENoYWxsZW5nZShcbiAgICAgIHtcbiAgICAgICAgaTogdXNlckluZGV4LFxuICAgICAgICBqOiBiaXRnb0luZGV4LFxuICAgICAgICBuOiBuYixcbiAgICAgIH0sXG4gICAgICB7IG50aWxkZTogbnRpbGRlYiwgaDE6IGgxYiwgaDI6IGgyYiB9LFxuICAgICAgeyBwOiBwYiB9XG4gICAgKTtcblxuICAgIGNvbnN0IHVzZXJTaWduU2hhcmUgPSBhd2FpdCBFQ0RTQU1ldGhvZHMuY3JlYXRlVXNlclNpZ25TaGFyZSh1c2VyWFNoYXJlLCBiaXRnb1lTaGFyZSk7XG4gICAgY29uc3QgdSA9IHNpZ25pbmdLZXkublNoYXJlc1tiaXRnb0luZGV4XS51O1xuXG4gICAgbGV0IGNoYWluY29kZSA9IHVzZXJTaWduaW5nTWF0ZXJpYWwuYml0Z29OU2hhcmUuY2hhaW5jb2RlO1xuICAgIHdoaWxlIChjaGFpbmNvZGUubGVuZ3RoIDwgNjQpIHtcbiAgICAgIGNoYWluY29kZSA9ICcwJyArIGNoYWluY29kZTtcbiAgICB9XG4gICAgY29uc3Qgc2lnbmVyU2hhcmUgPSBiaXAzMi5mcm9tUHJpdmF0ZUtleShCdWZmZXIuZnJvbSh1LCAnaGV4JyksIEJ1ZmZlci5mcm9tKGNoYWluY29kZSwgJ2hleCcpKS50b0Jhc2U1OCgpO1xuICAgIGNvbnN0IGJpdGdvR3BnS2V5ID0gKGF3YWl0IGdldEJpdGdvR3BnUHViS2V5KHRoaXMuYml0Z28pKS5tcGNWMTtcbiAgICBjb25zdCBlbmNyeXB0ZWRTaWduZXJTaGFyZSA9IChhd2FpdCBvcGVucGdwLmVuY3J5cHQoe1xuICAgICAgbWVzc2FnZTogYXdhaXQgb3BlbnBncC5jcmVhdGVNZXNzYWdlKHtcbiAgICAgICAgdGV4dDogc2lnbmVyU2hhcmUsXG4gICAgICB9KSxcbiAgICAgIGNvbmZpZzoge1xuICAgICAgICByZWplY3RDdXJ2ZXM6IG5ldyBTZXQoKSxcbiAgICAgIH0sXG4gICAgICBlbmNyeXB0aW9uS2V5czogW2JpdGdvR3BnS2V5XSxcbiAgICB9KSkgYXMgc3RyaW5nO1xuICAgIGNvbnN0IHVzZXJHcGdLZXkgPSBhd2FpdCBnZW5lcmF0ZUdQR0tleVBhaXIoJ3NlY3AyNTZrMScpO1xuICAgIGNvbnN0IHByaXZhdGVTaGFyZVByb29mID0gYXdhaXQgY3JlYXRlU2hhcmVQcm9vZih1c2VyR3BnS2V5LnByaXZhdGVLZXksIHNpZ25pbmdLZXkublNoYXJlc1tiaXRnb0luZGV4XS51LCAnZWNkc2EnKTtcbiAgICBjb25zdCB2c3NQcm9vZiA9IHNpZ25pbmdLZXkublNoYXJlc1tiaXRnb0luZGV4XS52O1xuICAgIGNvbnN0IHVzZXJQdWJsaWNHcGdLZXkgPSB1c2VyR3BnS2V5LnB1YmxpY0tleTtcbiAgICBjb25zdCBwdWJsaWNTaGFyZSA9IHNpZ25pbmdLZXkublNoYXJlc1tiaXRnb0luZGV4XS55ICsgc2lnbmluZ0tleS5uU2hhcmVzW2JpdGdvSW5kZXhdLmNoYWluY29kZTtcbiAgICByZXR1cm4ge1xuICAgICAgcHJpdmF0ZVNoYXJlUHJvb2Y6IHByaXZhdGVTaGFyZVByb29mLFxuICAgICAgdnNzUHJvb2Y6IHZzc1Byb29mLFxuICAgICAgcHVibGljU2hhcmU6IHB1YmxpY1NoYXJlLFxuICAgICAgZW5jcnlwdGVkU2lnbmVyT2Zmc2V0U2hhcmU6IGVuY3J5cHRlZFNpZ25lclNoYXJlLFxuICAgICAgdXNlclB1YmxpY0dwZ0tleTogdXNlclB1YmxpY0dwZ0tleSxcbiAgICAgIGtTaGFyZTogdXNlclNpZ25TaGFyZS5rU2hhcmUsXG4gICAgICB3U2hhcmU6IHBhcmFtcy53YWxsZXRQYXNzcGhyYXNlXG4gICAgICAgID8gdGhpcy5iaXRnby5lbmNyeXB0KHsgaW5wdXQ6IEpTT04uc3RyaW5naWZ5KHVzZXJTaWduU2hhcmUud1NoYXJlKSwgcGFzc3dvcmQ6IHBhcmFtcy53YWxsZXRQYXNzcGhyYXNlIH0pXG4gICAgICAgIDogdXNlclNpZ25TaGFyZS53U2hhcmUsXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgY3JlYXRlVHNzRWNkc2FTdGVwMlNpZ25pbmdNYXRlcmlhbChwYXJhbXM6IHtcbiAgICBiaXRnb0NoYWxsZW5nZTogVHhSZXF1ZXN0Q2hhbGxlbmdlUmVzcG9uc2U7XG4gICAgd1NoYXJlOiBXU2hhcmU7XG4gICAgYVNoYXJlRnJvbUJpdGdvOiBPbWl0PEFTaGFyZSwgJ2gxJyB8ICdoMicgfCAnbnRpbGRlJz47XG4gICAgd2FsbGV0UGFzc3BocmFzZT86IHN0cmluZztcbiAgfSk6IFByb21pc2U8VHNzRWNkc2FTdGVwMlJldHVybk1lc3NhZ2U+IHtcbiAgICAvLyBBcHBlbmQgdGhlIEJpdEdvIGNoYWxsZW5nZSB0byB0aGUgQXNoYXJlIHRvIGJlIHVzZWQgaW4gc3Vic2VxdWVudCBwcm9vZnNcbiAgICBjb25zdCBiaXRnb1RvVXNlckFTaGFyZVdpdGhOdGlsZGU6IEFTaGFyZSA9IHtcbiAgICAgIC4uLnBhcmFtcy5hU2hhcmVGcm9tQml0Z28sXG4gICAgICAuLi5wYXJhbXMuYml0Z29DaGFsbGVuZ2UsXG4gICAgfTtcbiAgICBjb25zdCB1c2VyR2FtbWFBbmRNdVNoYXJlcyA9IGF3YWl0IEVDRFNBTWV0aG9kcy5jcmVhdGVVc2VyR2FtbWFBbmRNdVNoYXJlKFxuICAgICAgcGFyYW1zLndTaGFyZSxcbiAgICAgIGJpdGdvVG9Vc2VyQVNoYXJlV2l0aE50aWxkZVxuICAgICk7XG4gICAgY29uc3QgdXNlck9taWNyb25BbmREZWx0YVNoYXJlID0gYXdhaXQgRUNEU0FNZXRob2RzLmNyZWF0ZVVzZXJPbWljcm9uQW5kRGVsdGFTaGFyZShcbiAgICAgIHVzZXJHYW1tYUFuZE11U2hhcmVzLmdTaGFyZSBhcyBFQ0RTQS5HU2hhcmVcbiAgICApO1xuICAgIHJldHVybiB7XG4gICAgICBtdURTaGFyZToge1xuICAgICAgICBtdVNoYXJlOiB1c2VyR2FtbWFBbmRNdVNoYXJlcy5tdVNoYXJlLFxuICAgICAgICBkU2hhcmU6IHVzZXJPbWljcm9uQW5kRGVsdGFTaGFyZS5kU2hhcmUsXG4gICAgICAgIGk6IHVzZXJHYW1tYUFuZE11U2hhcmVzLm11U2hhcmUuaSxcbiAgICAgIH0sXG4gICAgICBvU2hhcmU6IHBhcmFtcy53YWxsZXRQYXNzcGhyYXNlXG4gICAgICAgID8gdGhpcy5iaXRnby5lbmNyeXB0KHtcbiAgICAgICAgICAgIGlucHV0OiBKU09OLnN0cmluZ2lmeSh1c2VyT21pY3JvbkFuZERlbHRhU2hhcmUub1NoYXJlKSxcbiAgICAgICAgICAgIHBhc3N3b3JkOiBwYXJhbXMud2FsbGV0UGFzc3BocmFzZSxcbiAgICAgICAgICB9KVxuICAgICAgICA6IHVzZXJPbWljcm9uQW5kRGVsdGFTaGFyZS5vU2hhcmUsXG4gICAgfTtcbiAgfVxuXG4gIGdldE9mZmxpbmVTaWduZXJQYWlsbGllck1vZHVsdXMocGFyYW1zOiB7IHBydjogc3RyaW5nIH0pOiB7IHVzZXJQYWlsbGllck1vZHVsdXM6IHN0cmluZyB9IHtcbiAgICBhc3NlcnQocGFyYW1zLnBydiwgJ1BhcmFtcyB0byBnZXQgcGFpbGxpZXIgbW9kdWx1cyBhcmUgbWlzc2luZyBwcnYuJyk7XG4gICAgY29uc3QgdXNlclNpZ25pbmdNYXRlcmlhbDogRUNEU0FNZXRob2RUeXBlcy5TaWduaW5nTWF0ZXJpYWwgPSBKU09OLnBhcnNlKHBhcmFtcy5wcnYpO1xuICAgIHJldHVybiB7IHVzZXJQYWlsbGllck1vZHVsdXM6IHVzZXJTaWduaW5nTWF0ZXJpYWwucFNoYXJlLm4gfTtcbiAgfVxuXG4gIGFzeW5jIGNyZWF0ZU9mZmxpbmVLU2hhcmUocGFyYW1zOiB7XG4gICAgdHNzUGFyYW1zOiBUU1NQYXJhbXMgfCBUU1NQYXJhbXNGb3JNZXNzYWdlO1xuICAgIGNoYWxsZW5nZXM6IHtcbiAgICAgIGVudGVycHJpc2VDaGFsbGVuZ2U6IEVjZHNhVHlwZXMuU2VyaWFsaXplZEVjZHNhQ2hhbGxlbmdlcztcbiAgICAgIGJpdGdvQ2hhbGxlbmdlOiBUeFJlcXVlc3RDaGFsbGVuZ2VSZXNwb25zZTtcbiAgICB9O1xuICAgIHJlcXVlc3RUeXBlOiBSZXF1ZXN0VHlwZTtcbiAgICBwcnY6IHN0cmluZztcbiAgICB3YWxsZXRQYXNzcGhyYXNlOiBzdHJpbmc7XG4gIH0pOiBQcm9taXNlPFRzc0VjZHNhU3RlcDFSZXR1cm5NZXNzYWdlPiB7XG4gICAgY29uc3QgeyB0c3NQYXJhbXMsIHBydiwgcmVxdWVzdFR5cGUsIGNoYWxsZW5nZXMgfSA9IHBhcmFtcztcbiAgICBhc3NlcnQodHlwZW9mIHRzc1BhcmFtcy50eFJlcXVlc3QgIT09ICdzdHJpbmcnLCAnSW52YWxpZCB0eFJlcXVlc3QgdHlwZScpO1xuICAgIGNvbnN0IHR4UmVxdWVzdDogVHhSZXF1ZXN0ID0gdHNzUGFyYW1zLnR4UmVxdWVzdDtcbiAgICBsZXQgZGVyaXZhdGlvblBhdGg7XG5cbiAgICBpZiAocmVxdWVzdFR5cGUgPT09IFJlcXVlc3RUeXBlLnR4KSB7XG4gICAgICBhc3NlcnQoXG4gICAgICAgIHR4UmVxdWVzdC50cmFuc2FjdGlvbnMgfHwgKHR4UmVxdWVzdCBhcyBUeFJlcXVlc3QpLnVuc2lnbmVkVHhzLFxuICAgICAgICAnVW5hYmxlIHRvIGZpbmQgdHJhbnNhY3Rpb25zIGluIHR4UmVxdWVzdCdcbiAgICAgICk7XG4gICAgICBjb25zdCB1bnNpZ25lZFR4ID1cbiAgICAgICAgdHhSZXF1ZXN0LmFwaVZlcnNpb24gPT09ICdmdWxsJyA/IHR4UmVxdWVzdC50cmFuc2FjdGlvbnMhWzBdLnVuc2lnbmVkVHggOiB0eFJlcXVlc3QudW5zaWduZWRUeHNbMF07XG4gICAgICBkZXJpdmF0aW9uUGF0aCA9IHVuc2lnbmVkVHguZGVyaXZhdGlvblBhdGg7XG4gICAgfSBlbHNlIGlmIChyZXF1ZXN0VHlwZSA9PT0gUmVxdWVzdFR5cGUubWVzc2FnZSkge1xuICAgICAgLy8gVE9ETyBCRy02NzI5OSBNZXNzYWdlIHNpZ25pbmcgd2l0aCBkZXJpdmF0aW9uIHBhdGhcbiAgICAgIGRlcml2YXRpb25QYXRoID0gJyc7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmNyZWF0ZVRzc0VjZHNhU3RlcDFTaWduaW5nTWF0ZXJpYWwoe1xuICAgICAgcHJ2OiBwcnYsXG4gICAgICBjaGFsbGVuZ2VzOiBjaGFsbGVuZ2VzLFxuICAgICAgZGVyaXZhdGlvblBhdGg6IGRlcml2YXRpb25QYXRoLFxuICAgICAgd2FsbGV0UGFzc3BocmFzZTogcGFyYW1zLndhbGxldFBhc3NwaHJhc2UsXG4gICAgfSk7XG4gIH1cblxuICBhc3luYyBjcmVhdGVPZmZsaW5lTXVEZWx0YVNoYXJlKHBhcmFtczoge1xuICAgIGFTaGFyZUZyb21CaXRnbzogT21pdDxBU2hhcmUsICdudGlsZGUnIHwgJ2gxJyB8ICdoMic+O1xuICAgIGJpdGdvQ2hhbGxlbmdlOiBUeFJlcXVlc3RDaGFsbGVuZ2VSZXNwb25zZTtcbiAgICBlbmNyeXB0ZWRXU2hhcmU6IHN0cmluZztcbiAgICB3YWxsZXRQYXNzcGhyYXNlOiBzdHJpbmc7XG4gIH0pOiBQcm9taXNlPFRzc0VjZHNhU3RlcDJSZXR1cm5NZXNzYWdlPiB7XG4gICAgY29uc3QgZGVjcnlwdGVkV1NoYXJlID0gdGhpcy5iaXRnby5kZWNyeXB0KHsgaW5wdXQ6IHBhcmFtcy5lbmNyeXB0ZWRXU2hhcmUsIHBhc3N3b3JkOiBwYXJhbXMud2FsbGV0UGFzc3BocmFzZSB9KTtcbiAgICByZXR1cm4gYXdhaXQgdGhpcy5jcmVhdGVUc3NFY2RzYVN0ZXAyU2lnbmluZ01hdGVyaWFsKHtcbiAgICAgIGFTaGFyZUZyb21CaXRnbzogcGFyYW1zLmFTaGFyZUZyb21CaXRnbyxcbiAgICAgIGJpdGdvQ2hhbGxlbmdlOiBwYXJhbXMuYml0Z29DaGFsbGVuZ2UsXG4gICAgICB3U2hhcmU6IEpTT04ucGFyc2UoZGVjcnlwdGVkV1NoYXJlKSxcbiAgICAgIHdhbGxldFBhc3NwaHJhc2U6IHBhcmFtcy53YWxsZXRQYXNzcGhyYXNlLFxuICAgIH0pO1xuICB9XG5cbiAgYXN5bmMgY3JlYXRlT2ZmbGluZVNTaGFyZShwYXJhbXM6IHtcbiAgICB0c3NQYXJhbXM6IFRTU1BhcmFtcyB8IFRTU1BhcmFtc0Zvck1lc3NhZ2U7XG4gICAgZFNoYXJlRnJvbUJpdGdvOiBEU2hhcmU7XG4gICAgcmVxdWVzdFR5cGU6IFJlcXVlc3RUeXBlO1xuICAgIGVuY3J5cHRlZE9TaGFyZTogc3RyaW5nO1xuICAgIHdhbGxldFBhc3NwaHJhc2U6IHN0cmluZztcbiAgfSk6IFByb21pc2U8U1NoYXJlPiB7XG4gICAgY29uc3QgeyB0c3NQYXJhbXMsIHJlcXVlc3RUeXBlLCBkU2hhcmVGcm9tQml0Z28sIGVuY3J5cHRlZE9TaGFyZSwgd2FsbGV0UGFzc3BocmFzZSB9ID0gcGFyYW1zO1xuICAgIGFzc2VydCh0eXBlb2YgdHNzUGFyYW1zLnR4UmVxdWVzdCAhPT0gJ3N0cmluZycsICdJbnZhbGlkIHR4UmVxdWVzdCB0eXBlJyk7XG4gICAgY29uc3QgdHhSZXF1ZXN0OiBUeFJlcXVlc3QgPSB0c3NQYXJhbXMudHhSZXF1ZXN0O1xuICAgIGxldCBzaWduYWJsZVBheWxvYWQ7XG4gICAgaWYgKHJlcXVlc3RUeXBlID09PSBSZXF1ZXN0VHlwZS50eCkge1xuICAgICAgYXNzZXJ0KHR4UmVxdWVzdC50cmFuc2FjdGlvbnMgfHwgdHhSZXF1ZXN0LnVuc2lnbmVkVHhzLCAnVW5hYmxlIHRvIGZpbmQgdHJhbnNhY3Rpb25zIGluIHR4UmVxdWVzdCcpO1xuICAgICAgY29uc3QgdW5zaWduZWRUeCA9XG4gICAgICAgIHR4UmVxdWVzdC5hcGlWZXJzaW9uID09PSAnZnVsbCcgPyB0eFJlcXVlc3QudHJhbnNhY3Rpb25zIVswXS51bnNpZ25lZFR4IDogdHhSZXF1ZXN0LnVuc2lnbmVkVHhzWzBdO1xuICAgICAgc2lnbmFibGVQYXlsb2FkID0gQnVmZmVyLmZyb20odW5zaWduZWRUeC5zaWduYWJsZUhleCwgJ2hleCcpO1xuICAgIH0gZWxzZSBpZiAocmVxdWVzdFR5cGUgPT09IFJlcXVlc3RUeXBlLm1lc3NhZ2UpIHtcbiAgICAgIHNpZ25hYmxlUGF5bG9hZCA9IChwYXJhbXMudHNzUGFyYW1zIGFzIFRTU1BhcmFtc0Zvck1lc3NhZ2UpLmJ1ZmZlclRvU2lnbjtcbiAgICB9XG4gICAgbGV0IGhhc2g6IEhhc2ggfCB1bmRlZmluZWQ7XG4gICAgdHJ5IHtcbiAgICAgIGhhc2ggPSB0aGlzLmJhc2VDb2luLmdldEhhc2hGdW5jdGlvbigpO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgaGFzaCA9IHVuZGVmaW5lZDtcbiAgICB9XG4gICAgY29uc3QgZGVjcnlwdGVkT1NoYXJlID0gdGhpcy5iaXRnby5kZWNyeXB0KHsgaW5wdXQ6IGVuY3J5cHRlZE9TaGFyZSwgcGFzc3dvcmQ6IHdhbGxldFBhc3NwaHJhc2UgfSk7XG4gICAgY29uc3QgeyBpLCBSLCBzLCB5IH0gPSBhd2FpdCBFQ0RTQU1ldGhvZHMuY3JlYXRlVXNlclNpZ25hdHVyZVNoYXJlKFxuICAgICAgSlNPTi5wYXJzZShkZWNyeXB0ZWRPU2hhcmUpLFxuICAgICAgZFNoYXJlRnJvbUJpdGdvLFxuICAgICAgc2lnbmFibGVQYXlsb2FkLFxuICAgICAgaGFzaFxuICAgICk7XG4gICAgLy8gcmV0dXJuIG9ubHkgcmVxdWlyZWQgU1NoYXJlIHdpdGhvdXQgYmlnaW50cyBmcm9tIFZBU2hhcmVcbiAgICByZXR1cm4ge1xuICAgICAgaSxcbiAgICAgIFIsXG4gICAgICBzLFxuICAgICAgeSxcbiAgICB9O1xuICB9XG4gIGFzeW5jIHNpZ25FY2RzYVRzc1VzaW5nRXh0ZXJuYWxTaWduZXIoXG4gICAgcGFyYW1zOiBUU1NQYXJhbXMgfCBUU1NQYXJhbXNGb3JNZXNzYWdlLFxuICAgIHJlcXVlc3RUeXBlOiBSZXF1ZXN0VHlwZSxcbiAgICBleHRlcm5hbFNpZ25lclBhaWxsaWVyTW9kdWx1c0dldHRlcjogQ3VzdG9tUGFpbGxpZXJNb2R1bHVzR2V0dGVyRnVuY3Rpb24sXG4gICAgZXh0ZXJuYWxTaWduZXJLU2hhcmVHZW5lcmF0b3I6IEN1c3RvbUtTaGFyZUdlbmVyYXRpbmdGdW5jdGlvbixcbiAgICBleHRlcm5hbFNpZ25lck11RGVsdGFTaGFyZUdlbmVyYXRvcjogQ3VzdG9tTXVEZWx0YVNoYXJlR2VuZXJhdGluZ0Z1bmN0aW9uLFxuICAgIGV4dGVybmFsU2lnbmVyU1NoYXJlR2VuZXJhdG9yOiBDdXN0b21TU2hhcmVHZW5lcmF0aW5nRnVuY3Rpb25cbiAgKTogUHJvbWlzZTxUeFJlcXVlc3Q+IHtcbiAgICBjb25zdCB7IHR4UmVxdWVzdCB9ID0gcGFyYW1zO1xuICAgIGNvbnN0IHBlbmRpbmdFY2RzYVRzc0luaXRpYWxpemF0aW9uID0gdGhpcy53YWxsZXQuY29pblNwZWNpZmljKCk/LnBlbmRpbmdFY2RzYVRzc0luaXRpYWxpemF0aW9uO1xuICAgIGlmIChwZW5kaW5nRWNkc2FUc3NJbml0aWFsaXphdGlvbikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAnV2FsbGV0IGlzIG5vdCByZWFkeSBmb3IgVFNTIEVDRFNBIHNpZ25pbmcuIFBsZWFzZSBjb250YWN0IHlvdXIgZW50ZXJwcmlzZSBhZG1pbiB0byBmaW5pc2ggdGhlIGVudGVycHJpc2UgVFNTIGluaXRpYWxpemF0aW9uLidcbiAgICAgICk7XG4gICAgfVxuICAgIGNvbnN0IHR4UmVxdWVzdE9iajogVHhSZXF1ZXN0ID0gYXdhaXQgZ2V0VHhSZXF1ZXN0KHRoaXMuYml0Z28sIHRoaXMud2FsbGV0LmlkKCksIHR4UmVxdWVzdCBhcyBzdHJpbmcsIHBhcmFtcy5yZXFJZCk7XG4gICAgY29uc3QgeyB1c2VyUGFpbGxpZXJNb2R1bHVzIH0gPSBhd2FpdCBleHRlcm5hbFNpZ25lclBhaWxsaWVyTW9kdWx1c0dldHRlcih7IHR4UmVxdWVzdDogdHhSZXF1ZXN0T2JqIH0pO1xuICAgIGNvbnN0IHsgZW50ZXJwcmlzZUNoYWxsZW5nZSwgYml0Z29DaGFsbGVuZ2UgfSA9IGF3YWl0IHRoaXMuZ2V0RWNkc2FTaWduaW5nQ2hhbGxlbmdlcyhcbiAgICAgIHR4UmVxdWVzdCBhcyBzdHJpbmcsXG4gICAgICByZXF1ZXN0VHlwZSxcbiAgICAgIHVzZXJQYWlsbGllck1vZHVsdXMsXG4gICAgICAwLFxuICAgICAgcGFyYW1zLnJlcUlkXG4gICAgKTtcbiAgICBjb25zdCBzdGVwMVNpZ25pbmdNYXRlcmlhbCA9IGF3YWl0IGV4dGVybmFsU2lnbmVyS1NoYXJlR2VuZXJhdG9yKHtcbiAgICAgIHRzc1BhcmFtczoge1xuICAgICAgICAuLi5wYXJhbXMsXG4gICAgICAgIHR4UmVxdWVzdDogdHhSZXF1ZXN0T2JqLFxuICAgICAgfSxcbiAgICAgIGNoYWxsZW5nZXM6IHsgZW50ZXJwcmlzZUNoYWxsZW5nZSwgYml0Z29DaGFsbGVuZ2UgfSxcbiAgICAgIHJlcXVlc3RUeXBlOiByZXF1ZXN0VHlwZSxcbiAgICB9KTtcbiAgICAvLyBzaWduaW5nIHN0YWdlIG9uZSB3aXRoIEsgc2hhcmUgc2VuZCB0byBiaXRnbyBhbmQgcmVjZWl2ZXMgQSBzaGFyZVxuICAgIGNvbnN0IGJpdGdvVG9Vc2VyQVNoYXJlID0gKGF3YWl0IEVDRFNBTWV0aG9kcy5zZW5kU2hhcmVUb0JpdGdvKFxuICAgICAgdGhpcy5iaXRnbyxcbiAgICAgIHRoaXMud2FsbGV0LmlkKCksXG4gICAgICB0eFJlcXVlc3RPYmoudHhSZXF1ZXN0SWQsXG4gICAgICByZXF1ZXN0VHlwZSxcbiAgICAgIFNlbmRTaGFyZVR5cGUuS1NoYXJlLFxuICAgICAgc3RlcDFTaWduaW5nTWF0ZXJpYWwua1NoYXJlLFxuICAgICAgc3RlcDFTaWduaW5nTWF0ZXJpYWwuZW5jcnlwdGVkU2lnbmVyT2Zmc2V0U2hhcmUsXG4gICAgICBzdGVwMVNpZ25pbmdNYXRlcmlhbC52c3NQcm9vZixcbiAgICAgIHN0ZXAxU2lnbmluZ01hdGVyaWFsLnByaXZhdGVTaGFyZVByb29mLFxuICAgICAgc3RlcDFTaWduaW5nTWF0ZXJpYWwucHVibGljU2hhcmUsXG4gICAgICBzdGVwMVNpZ25pbmdNYXRlcmlhbC51c2VyUHVibGljR3BnS2V5LFxuICAgICAgcGFyYW1zLnJlcUlkXG4gICAgKSkgYXMgT21pdDxBU2hhcmUsICdudGlsZGUnIHwgJ2gxJyB8ICdoMic+OyAvLyBXUC9IU00gZG9lcyBub3QgcmV0dXJuIHRoZSBpbml0aWFsIGNoYWxsZW5nZVxuICAgIGNvbnN0IHN0ZXAyUmV0dXJuID0gYXdhaXQgZXh0ZXJuYWxTaWduZXJNdURlbHRhU2hhcmVHZW5lcmF0b3Ioe1xuICAgICAgdHhSZXF1ZXN0OiB0eFJlcXVlc3RPYmosXG4gICAgICBhU2hhcmVGcm9tQml0Z286IGJpdGdvVG9Vc2VyQVNoYXJlLFxuICAgICAgYml0Z29DaGFsbGVuZ2U6IGJpdGdvQ2hhbGxlbmdlLFxuICAgICAgZW5jcnlwdGVkV1NoYXJlOiBzdGVwMVNpZ25pbmdNYXRlcmlhbC53U2hhcmUgYXMgc3RyaW5nLFxuICAgIH0pO1xuICAgIC8vIHNpZ25pbmcgc3RhZ2UgdHdvIHdpdGggbXVTaGFyZSBhbmQgZFNoYXJlIHNlbmQgdG8gYml0Z28gYW5kIHJlY2VpdmVzIEQgc2hhcmVcbiAgICBjb25zdCBiaXRnb1RvVXNlckRTaGFyZSA9IChhd2FpdCBFQ0RTQU1ldGhvZHMuc2VuZFNoYXJlVG9CaXRnbyhcbiAgICAgIHRoaXMuYml0Z28sXG4gICAgICB0aGlzLndhbGxldC5pZCgpLFxuICAgICAgdHhSZXF1ZXN0T2JqLnR4UmVxdWVzdElkLFxuICAgICAgcmVxdWVzdFR5cGUsXG4gICAgICBTZW5kU2hhcmVUeXBlLk1VU2hhcmUsXG4gICAgICBzdGVwMlJldHVybi5tdURTaGFyZSxcbiAgICAgIHVuZGVmaW5lZCxcbiAgICAgIHVuZGVmaW5lZCxcbiAgICAgIHVuZGVmaW5lZCxcbiAgICAgIHVuZGVmaW5lZCxcbiAgICAgIHVuZGVmaW5lZCxcbiAgICAgIHBhcmFtcy5yZXFJZFxuICAgICkpIGFzIERTaGFyZTtcbiAgICBjb25zdCB1c2VyU1NoYXJlID0gYXdhaXQgZXh0ZXJuYWxTaWduZXJTU2hhcmVHZW5lcmF0b3Ioe1xuICAgICAgdHNzUGFyYW1zOiB7XG4gICAgICAgIC4uLnBhcmFtcyxcbiAgICAgICAgdHhSZXF1ZXN0OiB0eFJlcXVlc3RPYmosXG4gICAgICB9LFxuICAgICAgZFNoYXJlRnJvbUJpdGdvOiBiaXRnb1RvVXNlckRTaGFyZSxcbiAgICAgIHJlcXVlc3RUeXBlOiByZXF1ZXN0VHlwZSxcbiAgICAgIGVuY3J5cHRlZE9TaGFyZTogc3RlcDJSZXR1cm4ub1NoYXJlIGFzIHN0cmluZyxcbiAgICB9KTtcbiAgICAvLyBzaWduaW5nIHN0YWdlIHRocmVlIHdpdGggU1NoYXJlIHNlbmQgdG8gYml0Z28gYW5kIHJlY2VpdmVzIFNTaGFyZVxuICAgIGF3YWl0IEVDRFNBTWV0aG9kcy5zZW5kU2hhcmVUb0JpdGdvKFxuICAgICAgdGhpcy5iaXRnbyxcbiAgICAgIHRoaXMud2FsbGV0LmlkKCksXG4gICAgICB0eFJlcXVlc3RPYmoudHhSZXF1ZXN0SWQsXG4gICAgICByZXF1ZXN0VHlwZSxcbiAgICAgIFNlbmRTaGFyZVR5cGUuU1NoYXJlLFxuICAgICAgdXNlclNTaGFyZSxcbiAgICAgIHVuZGVmaW5lZCxcbiAgICAgIHVuZGVmaW5lZCxcbiAgICAgIHVuZGVmaW5lZCxcbiAgICAgIHVuZGVmaW5lZCxcbiAgICAgIHVuZGVmaW5lZCxcbiAgICAgIHBhcmFtcy5yZXFJZFxuICAgICk7XG4gICAgcmV0dXJuIGF3YWl0IGdldFR4UmVxdWVzdCh0aGlzLmJpdGdvLCB0aGlzLndhbGxldC5pZCgpLCB0eFJlcXVlc3RPYmoudHhSZXF1ZXN0SWQsIHBhcmFtcy5yZXFJZCk7XG4gIH1cblxuICAvKipcbiAgICogR2V0cyBzaWduaW5nIGtleSwgdHhSZXF1ZXN0UmVzb2x2ZWQgYW5kIHR4UmVxdWVzdElkXG4gICAqIEBwYXJhbSB7c3RyaW5nIHwgVHhSZXF1ZXN0fSBwYXJhbXMudHhSZXF1ZXN0IC0gdHJhbnNhY3Rpb24gcmVxdWVzdCBvYmplY3Qgb3IgaWRcbiAgICogQHBhcmFtIHtzdHJpbmd9IHBhcmFtcy5wcnYgLSBkZWNyeXB0ZWQgcHJpdmF0ZSBrZXlcbiAgICogQHBhcmFtIHsgc3RyaW5nfSBwYXJhbXMucmVxSWQgLSByZXF1ZXN0IGlkXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPFR4UmVxdWVzdD59XG4gICAqL1xuICBwcml2YXRlIGFzeW5jIHNpZ25SZXF1ZXN0QmFzZShcbiAgICBwYXJhbXM6IFRTU1BhcmFtc1dpdGhQcnYgfCBUU1NQYXJhbXNGb3JNZXNzYWdlV2l0aFBydixcbiAgICByZXF1ZXN0VHlwZTogUmVxdWVzdFR5cGVcbiAgKTogUHJvbWlzZTxUeFJlcXVlc3Q+IHtcbiAgICBjb25zdCBwZW5kaW5nRWNkc2FUc3NJbml0aWFsaXphdGlvbiA9IHRoaXMud2FsbGV0LmNvaW5TcGVjaWZpYygpPy5wZW5kaW5nRWNkc2FUc3NJbml0aWFsaXphdGlvbjtcbiAgICBpZiAocGVuZGluZ0VjZHNhVHNzSW5pdGlhbGl6YXRpb24pIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgJ1dhbGxldCBpcyBub3QgcmVhZHkgZm9yIFRTUyBFQ0RTQSBzaWduaW5nLiBQbGVhc2UgY29udGFjdCB5b3VyIGVudGVycHJpc2UgYWRtaW4gdG8gZmluaXNoIHRoZSBlbnRlcnByaXNlIFRTUyBpbml0aWFsaXphdGlvbi4nXG4gICAgICApO1xuICAgIH1cbiAgICBjb25zdCB1c2VyU2lnbmluZ01hdGVyaWFsOiBFQ0RTQU1ldGhvZFR5cGVzLlNpZ25pbmdNYXRlcmlhbCA9IEpTT04ucGFyc2UocGFyYW1zLnBydik7XG4gICAgaWYgKHVzZXJTaWduaW5nTWF0ZXJpYWwucFNoYXJlLmkgIT09IDEpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCB1c2VyIGtleScpO1xuICAgIH1cbiAgICBpZiAoIXVzZXJTaWduaW5nTWF0ZXJpYWwuYmFja3VwTlNoYXJlKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgdXNlciBrZXkgLSBtaXNzaW5nIGJhY2t1cE5TaGFyZScpO1xuICAgIH1cblxuICAgIGNvbnN0IHR4UmVxdWVzdDogVHhSZXF1ZXN0ID1cbiAgICAgIHR5cGVvZiBwYXJhbXMudHhSZXF1ZXN0ID09PSAnc3RyaW5nJ1xuICAgICAgICA/IGF3YWl0IGdldFR4UmVxdWVzdCh0aGlzLmJpdGdvLCB0aGlzLndhbGxldC5pZCgpLCBwYXJhbXMudHhSZXF1ZXN0LCBwYXJhbXMucmVxSWQpXG4gICAgICAgIDogcGFyYW1zLnR4UmVxdWVzdDtcblxuICAgIGxldCBzaWduYWJsZVBheWxvYWQgPSBuZXcgQnVmZmVyKCcnKTtcbiAgICBsZXQgZGVyaXZhdGlvblBhdGggPSAnJztcblxuICAgIGlmIChyZXF1ZXN0VHlwZSA9PT0gUmVxdWVzdFR5cGUudHgpIHtcbiAgICAgIGFzc2VydCh0eFJlcXVlc3QudHJhbnNhY3Rpb25zIHx8IHR4UmVxdWVzdC51bnNpZ25lZFR4cywgJ1VuYWJsZSB0byBmaW5kIHRyYW5zYWN0aW9ucyBpbiB0eFJlcXVlc3QnKTtcbiAgICAgIGNvbnN0IHVuc2lnbmVkVHggPVxuICAgICAgICB0eFJlcXVlc3QuYXBpVmVyc2lvbiA9PT0gJ2Z1bGwnID8gdHhSZXF1ZXN0LnRyYW5zYWN0aW9ucyFbMF0udW5zaWduZWRUeCA6IHR4UmVxdWVzdC51bnNpZ25lZFR4c1swXTtcbiAgICAgIHNpZ25hYmxlUGF5bG9hZCA9IEJ1ZmZlci5mcm9tKHVuc2lnbmVkVHguc2lnbmFibGVIZXgsICdoZXgnKTtcbiAgICAgIGRlcml2YXRpb25QYXRoID0gdW5zaWduZWRUeC5kZXJpdmF0aW9uUGF0aDtcbiAgICB9IGVsc2UgaWYgKHJlcXVlc3RUeXBlID09PSBSZXF1ZXN0VHlwZS5tZXNzYWdlKSB7XG4gICAgICBzaWduYWJsZVBheWxvYWQgPSAocGFyYW1zIGFzIFRTU1BhcmFtc0Zvck1lc3NhZ2UpLmJ1ZmZlclRvU2lnbjtcbiAgICAgIC8vIFRPRE8gQkctNjcyOTkgTWVzc2FnZSBzaWduaW5nIHdpdGggZGVyaXZhdGlvbiBwYXRoXG4gICAgfVxuICAgIGNvbnN0IHBhaWxsaWVyTW9kdWx1cyA9IHRoaXMuZ2V0T2ZmbGluZVNpZ25lclBhaWxsaWVyTW9kdWx1cyh7IHBydjogcGFyYW1zLnBydiB9KTtcbiAgICBjb25zdCBjaGFsbGVuZ2VzID0gYXdhaXQgdGhpcy5nZXRFY2RzYVNpZ25pbmdDaGFsbGVuZ2VzKFxuICAgICAgdHhSZXF1ZXN0LnR4UmVxdWVzdElkLFxuICAgICAgcmVxdWVzdFR5cGUsXG4gICAgICBwYWlsbGllck1vZHVsdXMudXNlclBhaWxsaWVyTW9kdWx1cyxcbiAgICAgIDAsXG4gICAgICBwYXJhbXMucmVxSWRcbiAgICApO1xuXG4gICAgY29uc3Qgc3RlcDFSZXR1cm4gPSBhd2FpdCB0aGlzLmNyZWF0ZVRzc0VjZHNhU3RlcDFTaWduaW5nTWF0ZXJpYWwoe1xuICAgICAgcHJ2OiBwYXJhbXMucHJ2LFxuICAgICAgY2hhbGxlbmdlczogY2hhbGxlbmdlcyxcbiAgICAgIGRlcml2YXRpb25QYXRoOiBkZXJpdmF0aW9uUGF0aCxcbiAgICB9KTtcblxuICAgIC8vIHNpZ25pbmcgc3RhZ2Ugb25lIHdpdGggSyBzaGFyZSBzZW5kIHRvIGJpdGdvIGFuZCByZWNlaXZlcyBBIHNoYXJlXG4gICAgY29uc3QgYml0Z29Ub1VzZXJBU2hhcmUgPSAoYXdhaXQgRUNEU0FNZXRob2RzLnNlbmRTaGFyZVRvQml0Z28oXG4gICAgICB0aGlzLmJpdGdvLFxuICAgICAgdGhpcy53YWxsZXQuaWQoKSxcbiAgICAgIHR4UmVxdWVzdC50eFJlcXVlc3RJZCxcbiAgICAgIHJlcXVlc3RUeXBlLFxuICAgICAgU2VuZFNoYXJlVHlwZS5LU2hhcmUsXG4gICAgICBzdGVwMVJldHVybi5rU2hhcmUsXG4gICAgICBzdGVwMVJldHVybi5lbmNyeXB0ZWRTaWduZXJPZmZzZXRTaGFyZSxcbiAgICAgIHN0ZXAxUmV0dXJuLnZzc1Byb29mLFxuICAgICAgc3RlcDFSZXR1cm4ucHJpdmF0ZVNoYXJlUHJvb2YsXG4gICAgICBzdGVwMVJldHVybi5wdWJsaWNTaGFyZSxcbiAgICAgIHN0ZXAxUmV0dXJuLnVzZXJQdWJsaWNHcGdLZXksXG4gICAgICBwYXJhbXMucmVxSWRcbiAgICApKSBhcyBPbWl0PEFTaGFyZSwgJ250aWxkZScgfCAnaDEnIHwgJ2gyJz47IC8vIFdQL0hTTSBkb2VzIG5vdCByZXR1cm4gdGhlIGluaXRpYWwgY2hhbGxlbmdlXG5cbiAgICBjb25zdCBzdGVwMlJldHVybiA9IGF3YWl0IHRoaXMuY3JlYXRlVHNzRWNkc2FTdGVwMlNpZ25pbmdNYXRlcmlhbCh7XG4gICAgICBhU2hhcmVGcm9tQml0Z286IGJpdGdvVG9Vc2VyQVNoYXJlLFxuICAgICAgYml0Z29DaGFsbGVuZ2U6IGNoYWxsZW5nZXMuYml0Z29DaGFsbGVuZ2UsXG4gICAgICB3U2hhcmU6IHN0ZXAxUmV0dXJuLndTaGFyZSBhcyBXU2hhcmUsXG4gICAgfSk7XG5cbiAgICAvLyBzaWduaW5nIHN0YWdlIHR3byB3aXRoIG11U2hhcmUgYW5kIGRTaGFyZSBzZW5kIHRvIGJpdGdvIGFuZCByZWNlaXZlcyBEIHNoYXJlXG4gICAgY29uc3QgYml0Z29Ub1VzZXJEU2hhcmUgPSAoYXdhaXQgRUNEU0FNZXRob2RzLnNlbmRTaGFyZVRvQml0Z28oXG4gICAgICB0aGlzLmJpdGdvLFxuICAgICAgdGhpcy53YWxsZXQuaWQoKSxcbiAgICAgIHR4UmVxdWVzdC50eFJlcXVlc3RJZCxcbiAgICAgIHJlcXVlc3RUeXBlLFxuICAgICAgU2VuZFNoYXJlVHlwZS5NVVNoYXJlLFxuICAgICAgc3RlcDJSZXR1cm4ubXVEU2hhcmUsXG4gICAgICB1bmRlZmluZWQsXG4gICAgICB1bmRlZmluZWQsXG4gICAgICB1bmRlZmluZWQsXG4gICAgICB1bmRlZmluZWQsXG4gICAgICB1bmRlZmluZWQsXG4gICAgICBwYXJhbXMucmVxSWRcbiAgICApKSBhcyBEU2hhcmU7XG5cbiAgICAvLyBJZiBvbmx5IHRoZSBnZXRIYXNoRnVuY3Rpb24oKSBpcyBkZWZpbmVkIGZvciB0aGUgY29pbiB1c2UgaXQgb3RoZXJ3aXNlXG4gICAgLy8gcGFzcyB1bmRlZmluZWQgaGFzaCwgZGVmYXVsdCBoYXNoIHdpbGwgYmUgdXNlZCBpbiB0aGF0IGNhc2UuXG4gICAgbGV0IGhhc2g6IEhhc2ggfCB1bmRlZmluZWQ7XG4gICAgdHJ5IHtcbiAgICAgIGhhc2ggPSB0aGlzLmJhc2VDb2luLmdldEhhc2hGdW5jdGlvbigpO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgaGFzaCA9IHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICBjb25zdCB1c2VyU1NoYXJlID0gYXdhaXQgRUNEU0FNZXRob2RzLmNyZWF0ZVVzZXJTaWduYXR1cmVTaGFyZShcbiAgICAgIHN0ZXAyUmV0dXJuLm9TaGFyZSBhcyBPU2hhcmUsXG4gICAgICBiaXRnb1RvVXNlckRTaGFyZSxcbiAgICAgIHNpZ25hYmxlUGF5bG9hZCxcbiAgICAgIGhhc2hcbiAgICApO1xuXG4gICAgLy8gc2lnbmluZyBzdGFnZSB0aHJlZSB3aXRoIFNTaGFyZSBzZW5kIHRvIGJpdGdvIGFuZCByZWNlaXZlcyBTU2hhcmVcbiAgICBhd2FpdCBFQ0RTQU1ldGhvZHMuc2VuZFNoYXJlVG9CaXRnbyhcbiAgICAgIHRoaXMuYml0Z28sXG4gICAgICB0aGlzLndhbGxldC5pZCgpLFxuICAgICAgdHhSZXF1ZXN0LnR4UmVxdWVzdElkLFxuICAgICAgcmVxdWVzdFR5cGUsXG4gICAgICBTZW5kU2hhcmVUeXBlLlNTaGFyZSxcbiAgICAgIHVzZXJTU2hhcmUsXG4gICAgICB1bmRlZmluZWQsXG4gICAgICB1bmRlZmluZWQsXG4gICAgICB1bmRlZmluZWQsXG4gICAgICB1bmRlZmluZWQsXG4gICAgICB1bmRlZmluZWQsXG4gICAgICBwYXJhbXMucmVxSWRcbiAgICApO1xuICAgIHJldHVybiBhd2FpdCBnZXRUeFJlcXVlc3QodGhpcy5iaXRnbywgdGhpcy53YWxsZXQuaWQoKSwgdHhSZXF1ZXN0LnR4UmVxdWVzdElkLCBwYXJhbXMucmVxSWQpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNpZ25zIHRoZSB0cmFuc2FjdGlvbiBhc3NvY2lhdGVkIHRvIHRoZSB0cmFuc2FjdGlvbiByZXF1ZXN0LlxuICAgKiBAcGFyYW0ge3N0cmluZyB8IFR4UmVxdWVzdH0gcGFyYW1zLnR4UmVxdWVzdCAtIHRyYW5zYWN0aW9uIHJlcXVlc3Qgb2JqZWN0IG9yIGlkXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBwYXJhbXMucHJ2IC0gZGVjcnlwdGVkIHByaXZhdGUga2V5XG4gICAqIEBwYXJhbSB7c3RyaW5nfSBwYXJhbXMucmVxSWQgLSByZXF1ZXN0IGlkXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPFR4UmVxdWVzdD59IGZ1bGx5IHNpZ25lZCBUeFJlcXVlc3Qgb2JqZWN0XG4gICAqL1xuICBhc3luYyBzaWduVHhSZXF1ZXN0KHBhcmFtczogVFNTUGFyYW1zV2l0aFBydik6IFByb21pc2U8VHhSZXF1ZXN0PiB7XG4gICAgdGhpcy5iaXRnby5zZXRSZXF1ZXN0VHJhY2VyKHBhcmFtcy5yZXFJZCk7XG4gICAgcmV0dXJuIHRoaXMuc2lnblJlcXVlc3RCYXNlKHBhcmFtcywgUmVxdWVzdFR5cGUudHgpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNpZ25zIHRoZSBtZXNzYWdlIGFzc29jaWF0ZWQgdG8gdGhlIHRyYW5zYWN0aW9uIHJlcXVlc3QuXG4gICAqIEBwYXJhbSB7c3RyaW5nIHwgVHhSZXF1ZXN0fSBwYXJhbXMudHhSZXF1ZXN0IC0gdHJhbnNhY3Rpb24gcmVxdWVzdCBvYmplY3Qgb3IgaWRcbiAgICogQHBhcmFtIHtzdHJpbmd9IHBhcmFtcy5wcnYgLSBkZWNyeXB0ZWQgcHJpdmF0ZSBrZXlcbiAgICogQHBhcmFtIHtzdHJpbmd9IHBhcmFtcy5yZXFJZCAtIHJlcXVlc3QgaWRcbiAgICogQHJldHVybnMge1Byb21pc2U8VHhSZXF1ZXN0Pn0gZnVsbHkgc2lnbmVkIFR4UmVxdWVzdCBvYmplY3RcbiAgICovXG4gIGFzeW5jIHNpZ25UeFJlcXVlc3RGb3JNZXNzYWdlKHBhcmFtczogVFNTUGFyYW1zRm9yTWVzc2FnZVdpdGhQcnYpOiBQcm9taXNlPFR4UmVxdWVzdD4ge1xuICAgIGlmICghcGFyYW1zLm1lc3NhZ2VSYXcpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignUmF3IG1lc3NhZ2UgcmVxdWlyZWQgdG8gc2lnbiBtZXNzYWdlJyk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLnNpZ25SZXF1ZXN0QmFzZShwYXJhbXMsIFJlcXVlc3RUeXBlLm1lc3NhZ2UpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgY2hhbGxlbmdlIHZhbHVlcyBmb3IgZW50ZXJwcmlzZSBhbmQgQml0R28gaW4gRUNEU0Egc2lnbmluZ1xuICAgKiBPbmx5IHJldHVybnMgdGhlIGNoYWxsZW5nZXMgaWYgdGhleSBhcmUgdmVyaWZpZWQgYnkgdGhlIHVzZXIncyBlbnRlcnByaXNlIGFkbWluJ3MgZWNkaCBrZXlcbiAgICogQHBhcmFtIHtzdHJpbmd9IHR4UmVxdWVzdElkIC0gdHJhbnNhY3Rpb24gcmVxdWVzdCBpZFxuICAgKiBAcGFyYW0ge1JlcXVlc3RUeXBlfSByZXF1ZXN0VHlwZSAtICAoMCBmb3IgdHgsIDEgZm9yIG1lc3NhZ2UpXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB3YWxsZXRQYWlsbGllck1vZHVsdXMgLSBwYWlsbGllciBwdWJrZXkgJG4kXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBpbmRleCAtIGluZGV4IG9mIHRoZSByZXF1ZXN0VHlwZVxuICAgKiBAcGFyYW0ge0lSZXF1ZXN0VHJhY2VyfSByZXFJZCAtIHJlcXVlc3QgdHJhY2VyIHJlcXVlc3QgaWRcbiAgICovXG4gIGFzeW5jIGdldEVjZHNhU2lnbmluZ0NoYWxsZW5nZXMoXG4gICAgdHhSZXF1ZXN0SWQ6IHN0cmluZyxcbiAgICByZXF1ZXN0VHlwZTogUmVxdWVzdFR5cGUsXG4gICAgd2FsbGV0UGFpbGxpZXJNb2R1bHVzOiBzdHJpbmcsXG4gICAgaW5kZXggPSAwLFxuICAgIHJlcUlkPzogSVJlcXVlc3RUcmFjZXJcbiAgKTogUHJvbWlzZTx7XG4gICAgZW50ZXJwcmlzZUNoYWxsZW5nZTogRWNkc2FUeXBlcy5TZXJpYWxpemVkRWNkc2FDaGFsbGVuZ2VzO1xuICAgIGJpdGdvQ2hhbGxlbmdlOiBUeFJlcXVlc3RDaGFsbGVuZ2VSZXNwb25zZTtcbiAgfT4ge1xuICAgIGNvbnN0IGVudGVycHJpc2VJZCA9IHRoaXMud2FsbGV0LnRvSlNPTigpLmVudGVycHJpc2U7XG4gICAgaWYgKCFlbnRlcnByaXNlSWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignV2FsbGV0IG11c3QgYmUgYW4gZW50ZXJwcmlzZSB3YWxsZXQuJyk7XG4gICAgfVxuXG4gICAgLy8gY3JlYXRlIEJpdEdvIHJhbmdlIHByb29mIGFuZCBwYWlsbGllciBwcm9vZiBjaGFsbGVuZ2VcbiAgICBjb25zdCBjcmVhdGVCaXRnb0NoYWxsZW5nZVJlc3BvbnNlID0gYXdhaXQgZ2V0VHhSZXF1ZXN0Q2hhbGxlbmdlKFxuICAgICAgdGhpcy5iaXRnbyxcbiAgICAgIHRoaXMud2FsbGV0LmlkKCksXG4gICAgICB0eFJlcXVlc3RJZCxcbiAgICAgIGluZGV4LnRvU3RyaW5nKCksXG4gICAgICByZXF1ZXN0VHlwZSxcbiAgICAgIHdhbGxldFBhaWxsaWVyTW9kdWx1cyxcbiAgICAgIHJlcUlkXG4gICAgKTtcblxuICAgIGNvbnN0IGJpdGdvVG9FbnRlcnByaXNlUGFpbGxpZXJDaGFsbGVuZ2UgPSB7IHA6IGNyZWF0ZUJpdGdvQ2hhbGxlbmdlUmVzcG9uc2UucCB9O1xuICAgIGNvbnN0IGVudGVycHJpc2VUb0JpdGdvUGFpbGxpZXJDaGFsbGVuZ2UgPSBFY2RzYVR5cGVzLnNlcmlhbGl6ZVBhaWxsaWVyQ2hhbGxlbmdlKHtcbiAgICAgIHA6IGF3YWl0IEVjZHNhUGFpbGxpZXJQcm9vZi5nZW5lcmF0ZVAoaGV4VG9CaWdJbnQoY3JlYXRlQml0Z29DaGFsbGVuZ2VSZXNwb25zZS5uKSksXG4gICAgfSk7XG5cbiAgICAvLyBUT0RPKEJHLTc4NzY0KTogb25jZSB0aGUgcGFpbGxpZXIgcHJvb2ZzIGFyZSBjb21wbGV0ZSwgcmVkdWNlIGNoYWxsZW5nZSBjcmVhdGlvbiB0byBvbmUgQVBJIGNhbGxcbiAgICBjb25zdCB3YWxsZXRDaGFsbGVuZ2VzID0gYXdhaXQgdGhpcy53YWxsZXQuZ2V0Q2hhbGxlbmdlc0ZvckVjZHNhU2lnbmluZygpO1xuXG4gICAgY29uc3QgY2hhbGxlbmdlVmVyaWZpZXJVc2VySWQgPSB3YWxsZXRDaGFsbGVuZ2VzLmNyZWF0ZWRCeTtcbiAgICBjb25zdCBhZG1pblNpZ25pbmdLZXlSZXNwb25zZSA9IGF3YWl0IHRoaXMuYml0Z28uZ2V0U2lnbmluZ0tleUZvclVzZXIoZW50ZXJwcmlzZUlkLCBjaGFsbGVuZ2VWZXJpZmllclVzZXJJZCk7XG4gICAgY29uc3QgcHVia2V5T2ZBZG1pbkVjZGhLZXlIZXggPSBhZG1pblNpZ25pbmdLZXlSZXNwb25zZS5kZXJpdmVkUHVia2V5O1xuXG4gICAgLy8gVmVyaWZ5IGVudGVycHJpc2UncyBjaGFsbGVuZ2UgaXMgc2lnbmVkIGJ5IHRoZSByZXNwZWN0aXZlIGFkbWlucyBlY2RoIGtleWNoYWluXG4gICAgY29uc3QgZW50ZXJwcmlzZVJhd0NoYWxsZW5nZSA9IHtcbiAgICAgIG50aWxkZTogd2FsbGV0Q2hhbGxlbmdlcy5lbnRlcnByaXNlQ2hhbGxlbmdlLm50aWxkZSxcbiAgICAgIGgxOiB3YWxsZXRDaGFsbGVuZ2VzLmVudGVycHJpc2VDaGFsbGVuZ2UuaDEsXG4gICAgICBoMjogd2FsbGV0Q2hhbGxlbmdlcy5lbnRlcnByaXNlQ2hhbGxlbmdlLmgyLFxuICAgIH07XG4gICAgY29uc3QgYWRtaW5TaWduYXR1cmVPbkVudENoYWxsZW5nZTogc3RyaW5nID0gd2FsbGV0Q2hhbGxlbmdlcy5lbnRlcnByaXNlQ2hhbGxlbmdlLnZlcmlmaWVycy5hZG1pblNpZ25hdHVyZTtcbiAgICBpZiAoXG4gICAgICAhdmVyaWZ5RWNkaFNpZ25hdHVyZShcbiAgICAgICAgRWNkc2FVdGlscy5nZXRNZXNzYWdlVG9TaWduRnJvbUNoYWxsZW5nZShlbnRlcnByaXNlUmF3Q2hhbGxlbmdlKSxcbiAgICAgICAgYWRtaW5TaWduYXR1cmVPbkVudENoYWxsZW5nZSxcbiAgICAgICAgQnVmZmVyLmZyb20ocHVia2V5T2ZBZG1pbkVjZGhLZXlIZXgsICdoZXgnKVxuICAgICAgKVxuICAgICkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBBZG1pbiBzaWduYXR1cmUgZm9yIGVudGVycHJpc2UgY2hhbGxlbmdlIGlzIG5vdCB2YWxpZC4gUGxlYXNlIGNvbnRhY3QgeW91ciBlbnRlcnByaXNlIGFkbWluLmApO1xuICAgIH1cblxuICAgIC8vIFZlcmlmeSB0aGF0IHRoZSBCaXRHbyBjaGFsbGVuZ2UncyBaSyBwcm9vZnMgaGF2ZSBiZWVuIHZlcmlmaWVkIGJ5IHRoZSBhZG1pblxuICAgIGNvbnN0IGJpdGdvQ2hhbGxlbmdlOiBUeFJlcXVlc3RDaGFsbGVuZ2VSZXNwb25zZSA9IHtcbiAgICAgIG50aWxkZTogd2FsbGV0Q2hhbGxlbmdlcy5iaXRnb0NoYWxsZW5nZS5udGlsZGUsXG4gICAgICBoMTogd2FsbGV0Q2hhbGxlbmdlcy5iaXRnb0NoYWxsZW5nZS5oMSxcbiAgICAgIGgyOiB3YWxsZXRDaGFsbGVuZ2VzLmJpdGdvQ2hhbGxlbmdlLmgyLFxuICAgICAgcDogYml0Z29Ub0VudGVycHJpc2VQYWlsbGllckNoYWxsZW5nZS5wLFxuICAgICAgbjogY3JlYXRlQml0Z29DaGFsbGVuZ2VSZXNwb25zZS5uLFxuICAgIH07XG4gICAgY29uc3QgYWRtaW5WZXJpZmljYXRpb25TaWduYXR1cmVGb3JCaXRHb0NoYWxsZW5nZSA9IHdhbGxldENoYWxsZW5nZXMuYml0Z29DaGFsbGVuZ2UudmVyaWZpZXJzLmFkbWluU2lnbmF0dXJlO1xuICAgIGlmIChcbiAgICAgICF2ZXJpZnlFY2RoU2lnbmF0dXJlKFxuICAgICAgICBFY2RzYVV0aWxzLmdldE1lc3NhZ2VUb1NpZ25Gcm9tQ2hhbGxlbmdlKGJpdGdvQ2hhbGxlbmdlKSxcbiAgICAgICAgYWRtaW5WZXJpZmljYXRpb25TaWduYXR1cmVGb3JCaXRHb0NoYWxsZW5nZSxcbiAgICAgICAgQnVmZmVyLmZyb20ocHVia2V5T2ZBZG1pbkVjZGhLZXlIZXgsICdoZXgnKVxuICAgICAgKVxuICAgICkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBBZG1pbiBzaWduYXR1cmUgZm9yIEJpdEdvJ3MgY2hhbGxlbmdlIGlzIG5vdCB2YWxpZC4gUGxlYXNlIGNvbnRhY3QgeW91ciBlbnRlcnByaXNlIGFkbWluLmApO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBlbnRlcnByaXNlQ2hhbGxlbmdlOiB7XG4gICAgICAgIC4uLmVudGVycHJpc2VSYXdDaGFsbGVuZ2UsXG4gICAgICAgIHA6IGVudGVycHJpc2VUb0JpdGdvUGFpbGxpZXJDaGFsbGVuZ2UucCxcbiAgICAgIH0sXG4gICAgICBiaXRnb0NoYWxsZW5nZSxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIFZlcmlmaWVzIHRoZSB1LXZhbHVlIHByb29mcyBhbmQgR1BHIGtleXMgdXNlZCBpbiBnZW5lcmF0aW5nIGEgVFNTIEVDRFNBIHdhbGxldC5cbiAgICogQHBhcmFtIHVzZXJHcGdQdWIgVGhlIHVzZXIncyBwdWJsaWMgR1BHIGtleSBmb3IgZW5jcnlwdGlvbiBiZXR3ZWVuIHVzZXIvc2VydmVyXG4gICAqIEBwYXJhbSBiYWNrdXBHcGdQdWIgVGhlIGJhY2t1cCdzIHB1YmxpYyBHUEcga2V5IGZvciBlbmNyeXB0aW9uIGJldHdlZW4gYmFja3VwL3NlcnZlclxuICAgKiBAcGFyYW0gYml0Z29LZXljaGFpbiBwcmV2aW91c2x5IGNyZWF0ZWQgQml0R28ga2V5Y2hhaW47IG11c3QgYmUgY29tcGF0aWJsZSB3aXRoIHVzZXIgYW5kIGJhY2t1cCBrZXkgc2hhcmVzXG4gICAqIEBwYXJhbSBkZWNyeXB0ZWRTaGFyZSBUaGUgZGVjcnlwdGVkIGJpdGdvLXRvLXVzZXIvYmFja3VwIHByaXZhdGUgc2hhcmUgcmV0cmlldmVkIGZyb20gdGhlIGtleWNoYWluXG4gICAqIEBwYXJhbSB2ZXJpZmllckluZGV4IFRoZSBpbmRleCBvZiB0aGUgcGFydHkgdG8gdmVyaWZ5OiAxID0gdXNlciwgMiA9IGJhY2t1cFxuICAgKi9cbiAgYXN5bmMgdmVyaWZ5V2FsbGV0U2lnbmF0dXJlcyhcbiAgICB1c2VyR3BnUHViOiBzdHJpbmcsXG4gICAgYmFja3VwR3BnUHViOiBzdHJpbmcsXG4gICAgYml0Z29LZXljaGFpbjogS2V5Y2hhaW4sXG4gICAgZGVjcnlwdGVkU2hhcmU6IHN0cmluZyxcbiAgICB2ZXJpZmllckluZGV4OiAxIHwgMlxuICApOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBhc3NlcnQoYml0Z29LZXljaGFpbi5jb21tb25LZXljaGFpbik7XG4gICAgYXNzZXJ0KGJpdGdvS2V5Y2hhaW4ud2FsbGV0SFNNR1BHUHVibGljS2V5U2lncyk7XG5cbiAgICBjb25zdCBiaXRnb0dwZ0tleSA9IChhd2FpdCBnZXRCaXRnb0dwZ1B1YktleSh0aGlzLmJpdGdvKSkubXBjVjE7XG4gICAgY29uc3QgdXNlcktleVB1YiA9IGF3YWl0IG9wZW5wZ3AucmVhZEtleSh7IGFybW9yZWRLZXk6IHVzZXJHcGdQdWIgfSk7XG4gICAgY29uc3QgdXNlcktleUlkID0gdXNlcktleVB1Yi5rZXlQYWNrZXQuZ2V0RmluZ2VycHJpbnQoKTtcbiAgICBjb25zdCBiYWNrdXBLZXlQdWIgPSBhd2FpdCBvcGVucGdwLnJlYWRLZXkoeyBhcm1vcmVkS2V5OiBiYWNrdXBHcGdQdWIgfSk7XG4gICAgY29uc3QgYmFja3VwS2V5SWQgPSBiYWNrdXBLZXlQdWIua2V5UGFja2V0LmdldEZpbmdlcnByaW50KCk7XG5cbiAgICBjb25zdCB3YWxsZXRTaWduYXR1cmVzID0gYXdhaXQgb3BlbnBncC5yZWFkS2V5cyh7IGFybW9yZWRLZXlzOiBiaXRnb0tleWNoYWluLndhbGxldEhTTUdQR1B1YmxpY0tleVNpZ3MgfSk7XG4gICAgaWYgKHdhbGxldFNpZ25hdHVyZXMubGVuZ3RoICE9PSAyKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgd2FsbGV0IHNpZ25hdHVyZXMnKTtcbiAgICB9XG4gICAgaWYgKHVzZXJLZXlJZCAhPT0gd2FsbGV0U2lnbmF0dXJlc1swXS5rZXlQYWNrZXQuZ2V0RmluZ2VycHJpbnQoKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBmaXJzdCB3YWxsZXQgc2lnbmF0dXJlJ3MgZmluZ2VycHJpbnQgZG9lcyBub3QgbWF0Y2ggcGFzc2VkIHVzZXIgZ3BnIGtleSdzIGZpbmdlcnByaW50YCk7XG4gICAgfVxuICAgIGlmIChiYWNrdXBLZXlJZCAhPT0gd2FsbGV0U2lnbmF0dXJlc1sxXS5rZXlQYWNrZXQuZ2V0RmluZ2VycHJpbnQoKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBzZWNvbmQgd2FsbGV0IHNpZ25hdHVyZSdzIGZpbmdlcnByaW50IGRvZXMgbm90IG1hdGNoIHBhc3NlZCBiYWNrdXAgZ3BnIGtleSdzIGZpbmdlcnByaW50YCk7XG4gICAgfVxuXG4gICAgYXdhaXQgdmVyaWZ5V2FsbGV0U2lnbmF0dXJlKHtcbiAgICAgIHdhbGxldFNpZ25hdHVyZTogd2FsbGV0U2lnbmF0dXJlc1swXSxcbiAgICAgIGNvbW1vbktleWNoYWluOiBiaXRnb0tleWNoYWluLmNvbW1vbktleWNoYWluLFxuICAgICAgdXNlcktleUlkLFxuICAgICAgYmFja3VwS2V5SWQsXG4gICAgICBiaXRnb1B1YjogYml0Z29HcGdLZXksXG4gICAgICBkZWNyeXB0ZWRTaGFyZSxcbiAgICAgIHZlcmlmaWVySW5kZXgsXG4gICAgfSk7XG5cbiAgICBhd2FpdCB2ZXJpZnlXYWxsZXRTaWduYXR1cmUoe1xuICAgICAgd2FsbGV0U2lnbmF0dXJlOiB3YWxsZXRTaWduYXR1cmVzWzFdLFxuICAgICAgY29tbW9uS2V5Y2hhaW46IGJpdGdvS2V5Y2hhaW4uY29tbW9uS2V5Y2hhaW4sXG4gICAgICB1c2VyS2V5SWQsXG4gICAgICBiYWNrdXBLZXlJZCxcbiAgICAgIGJpdGdvUHViOiBiaXRnb0dwZ0tleSxcbiAgICAgIGRlY3J5cHRlZFNoYXJlLFxuICAgICAgdmVyaWZpZXJJbmRleCxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTaWducyBhIGNoYWxsZW5nZSB3aXRoIHRoZSBwcm92aWRlZCB2MSBlY2RoIGtleSBhdCBhIGRlcml2ZWQgcGF0aFxuICAgKiBAcGFyYW0gY2hhbGxlbmdlIGNoYWxsZW5nZSB0byBzaWduXG4gICAqIEBwYXJhbSBlY2RoWHBydiB4cHJ2IG9mIHRoZSBlY2RoIGtleVxuICAgKiBAcGFyYW0gZGVyaXZhdGlvblBhdGggdGhlIGRlcml2ZWQgcGF0aCBhdCB3aGljaCB0aGUgZWNkaCBrZXkgd2lsbCBzaWduXG4gICAqL1xuICBzdGF0aWMgc2lnbkNoYWxsZW5nZShjaGFsbGVuZ2U6IEVjZHNhVHlwZXMuU2VyaWFsaXplZE50aWxkZSwgZWNkaFhwcnY6IHN0cmluZywgZGVyaXZhdGlvblBhdGg6IHN0cmluZyk6IEJ1ZmZlciB7XG4gICAgY29uc3QgbWVzc2FnZVRvU2lnbiA9IHRoaXMuZ2V0TWVzc2FnZVRvU2lnbkZyb21DaGFsbGVuZ2UoY2hhbGxlbmdlKTtcbiAgICByZXR1cm4gc2lnbk1lc3NhZ2VXaXRoRGVyaXZlZEVjZGhLZXkobWVzc2FnZVRvU2lnbiwgZWNkaFhwcnYsIGRlcml2YXRpb25QYXRoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb252ZXJ0cyBjaGFsbGVuZ2UgdG8gYSBjb21tb24gbWVzc2FnZSBmb3JtYXQgd2hpY2ggY2FuIGJlIHNpZ25lZC5cbiAgICogQHBhcmFtIGNoYWxsZW5nZVxuICAgKi9cbiAgc3RhdGljIGdldE1lc3NhZ2VUb1NpZ25Gcm9tQ2hhbGxlbmdlKGNoYWxsZW5nZTogRWNkc2FUeXBlcy5TZXJpYWxpemVkTnRpbGRlKTogc3RyaW5nIHtcbiAgICByZXR1cm4gY2hhbGxlbmdlLm50aWxkZS5jb25jYXQoY2hhbGxlbmdlLmgxKS5jb25jYXQoY2hhbGxlbmdlLmgyKTtcbiAgfVxuXG4gIC8qKlxuICAgVmVyaWZpZXMgWksgcHJvb2ZzIG9mIEJpdEdvJ3MgY2hhbGxlbmdlcyBmb3IgYm90aCBuaXRybyBhbmQgaW5zdGl0dXRpb25hbCBIU01zXG4gICB3aGljaCBhcmUgZmV0Y2hlZCBmcm9tIHRoZSBXUCBBUEkuXG4gICAqL1xuICBzdGF0aWMgYXN5bmMgdmVyaWZ5Qml0R29DaGFsbGVuZ2VzKGJpdGdvQ2hhbGxlbmdlczogR2V0Qml0R29DaGFsbGVuZ2VzQXBpKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgLy8gVmVyaWZ5IGluc3RpdHV0aW9uYWwgaHNtIGNoYWxsZW5nZSBwcm9vZlxuICAgIGNvbnN0IGluc3RDaGFsbGVuZ2VWZXJpZmllZCA9IGF3YWl0IHRoaXMudmVyaWZ5Qml0R29DaGFsbGVuZ2Uoe1xuICAgICAgbnRpbGRlOiBiaXRnb0NoYWxsZW5nZXMuYml0Z29JbnN0aXR1dGlvbmFsSHNtLm50aWxkZSxcbiAgICAgIGgxOiBiaXRnb0NoYWxsZW5nZXMuYml0Z29JbnN0aXR1dGlvbmFsSHNtLmgxLFxuICAgICAgaDI6IGJpdGdvQ2hhbGxlbmdlcy5iaXRnb0luc3RpdHV0aW9uYWxIc20uaDIsXG4gICAgICBudGlsZGVQcm9vZjogYml0Z29DaGFsbGVuZ2VzLmJpdGdvSW5zdGl0dXRpb25hbEhzbS5udGlsZGVQcm9vZixcbiAgICB9KTtcblxuICAgIC8vIFZlcmlmeSBuaXRybyBoc20gY2hhbGxlbmdlIHByb29mXG4gICAgY29uc3Qgbml0cm9DaGFsbGVuZ2VWZXJpZmllZCA9IGF3YWl0IHRoaXMudmVyaWZ5Qml0R29DaGFsbGVuZ2Uoe1xuICAgICAgbnRpbGRlOiBiaXRnb0NoYWxsZW5nZXMuYml0Z29OaXRyb0hzbS5udGlsZGUsXG4gICAgICBoMTogYml0Z29DaGFsbGVuZ2VzLmJpdGdvTml0cm9Ic20uaDEsXG4gICAgICBoMjogYml0Z29DaGFsbGVuZ2VzLmJpdGdvTml0cm9Ic20uaDIsXG4gICAgICBudGlsZGVQcm9vZjogYml0Z29DaGFsbGVuZ2VzLmJpdGdvTml0cm9Ic20ubnRpbGRlUHJvb2YsXG4gICAgfSk7XG5cbiAgICByZXR1cm4gaW5zdENoYWxsZW5nZVZlcmlmaWVkICYmIG5pdHJvQ2hhbGxlbmdlVmVyaWZpZWQ7XG4gIH1cblxuICAvKipcbiAgICogVmVyaWZpZXMgWksgcHJvb2YgZm9yIGEgc2luZ2xlIEJpdEdvIGNoYWxsZW5nZVxuICAgKiBAcGFyYW0gYml0Z29DaGFsbGVuZ2VcbiAgICovXG4gIHN0YXRpYyBhc3luYyB2ZXJpZnlCaXRHb0NoYWxsZW5nZShiaXRnb0NoYWxsZW5nZTogRWNkc2FUeXBlcy5TZXJpYWxpemVkTnRpbGRlV2l0aFByb29mcyk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGNvbnN0IGRlc2VyaWFsaXplZEluc3RDaGFsbGVuZ2UgPSBFY2RzYVR5cGVzLmRlc2VyaWFsaXplTnRpbGRlV2l0aFByb29mcyhiaXRnb0NoYWxsZW5nZSk7XG4gICAgY29uc3QgbnRpbGRlUHJvb2ZIMVdydEgyVmVyaWZpZWQgPSBhd2FpdCBFY2RzYVJhbmdlUHJvb2YudmVyaWZ5TnRpbGRlUHJvb2YoXG4gICAgICB7XG4gICAgICAgIG50aWxkZTogZGVzZXJpYWxpemVkSW5zdENoYWxsZW5nZS5udGlsZGUsXG4gICAgICAgIGgxOiBkZXNlcmlhbGl6ZWRJbnN0Q2hhbGxlbmdlLmgxLFxuICAgICAgICBoMjogZGVzZXJpYWxpemVkSW5zdENoYWxsZW5nZS5oMixcbiAgICAgIH0sXG4gICAgICBkZXNlcmlhbGl6ZWRJbnN0Q2hhbGxlbmdlLm50aWxkZVByb29mLmgxV3J0SDJcbiAgICApO1xuICAgIGNvbnN0IG50aWxkZVByb29mSDJXcnRIMVZlcmlmaWVkID0gYXdhaXQgRWNkc2FSYW5nZVByb29mLnZlcmlmeU50aWxkZVByb29mKFxuICAgICAge1xuICAgICAgICBudGlsZGU6IGRlc2VyaWFsaXplZEluc3RDaGFsbGVuZ2UubnRpbGRlLFxuICAgICAgICBoMTogZGVzZXJpYWxpemVkSW5zdENoYWxsZW5nZS5oMixcbiAgICAgICAgaDI6IGRlc2VyaWFsaXplZEluc3RDaGFsbGVuZ2UuaDEsXG4gICAgICB9LFxuICAgICAgZGVzZXJpYWxpemVkSW5zdENoYWxsZW5nZS5udGlsZGVQcm9vZi5oMldydEgxXG4gICAgKTtcbiAgICByZXR1cm4gbnRpbGRlUHJvb2ZIMVdydEgyVmVyaWZpZWQgJiYgbnRpbGRlUHJvb2ZIMldydEgxVmVyaWZpZWQ7XG4gIH1cblxuICAvKipcbiAgICogR2V0cyB0aGUgYml0Z28gY2hhbGxlbmdlcyBmb3IgYm90aCBuaXRybyBhbmQgaW5zdGl0dXRpb25hbCBIU01zIGZyb20gV1AgQVBJLlxuICAgKiBAcGFyYW0gYml0Z29cbiAgICovXG4gIHN0YXRpYyBhc3luYyBnZXRCaXRHb0NoYWxsZW5nZXMoYml0Z286IEJpdEdvQmFzZSk6IFByb21pc2U8R2V0Qml0R29DaGFsbGVuZ2VzQXBpPiB7XG4gICAgY29uc3QgcmVzID0gYXdhaXQgYml0Z28uZ2V0KGJpdGdvLnVybCgnL3Rzcy9lY2RzYS9jaGFsbGVuZ2VzJywgMikpLnNlbmQoKS5yZXN1bHQoKTtcbiAgICBpZiAoXG4gICAgICAhcmVzLmJpdGdvTml0cm9Ic20gfHxcbiAgICAgICFyZXMuYml0Z29OaXRyb0hzbS5udGlsZGUgfHxcbiAgICAgICFyZXMuYml0Z29OaXRyb0hzbS5oMSB8fFxuICAgICAgIXJlcy5iaXRnb05pdHJvSHNtLmgyIHx8XG4gICAgICAhcmVzLmJpdGdvTml0cm9Ic20ubnRpbGRlUHJvb2YgfHxcbiAgICAgICFyZXMuYml0Z29JbnN0aXR1dGlvbmFsSHNtIHx8XG4gICAgICAhcmVzLmJpdGdvSW5zdGl0dXRpb25hbEhzbS5udGlsZGUgfHxcbiAgICAgICFyZXMuYml0Z29JbnN0aXR1dGlvbmFsSHNtLmgxIHx8XG4gICAgICAhcmVzLmJpdGdvSW5zdGl0dXRpb25hbEhzbS5oMiB8fFxuICAgICAgIXJlcy5iaXRnb0luc3RpdHV0aW9uYWxIc20ubnRpbGRlUHJvb2ZcbiAgICApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignRXhwZWN0ZWQgQml0R28gY2hhbGxlbmdlIHByb29mIHRvIGJlIHByZXNlbnQuIENvbnRhY3Qgc3VwcG9ydEBiaXRnby5jb20uJyk7XG4gICAgfVxuICAgIHJldHVybiByZXM7XG4gIH1cblxuICAvKipcbiAgICogR2V0cyBCaXRHbydzIHByb29mcyBmcm9tIEFQSSBhbmQgc2lnbnMgdGhlbSBpZiB0aGUgcHJvb2ZzIGFyZSB2YWxpZC5cbiAgICogQHBhcmFtIGJpdGdvXG4gICAqIEBwYXJhbSBlbnRlcnByaXNlSWRcbiAgICogQHBhcmFtIHVzZXJQYXNzd29yZFxuICAgKi9cbiAgc3RhdGljIGFzeW5jIGdldFZlcmlmeUFuZFNpZ25CaXRHb0NoYWxsZW5nZXMoXG4gICAgYml0Z286IEJpdEdvQmFzZSxcbiAgICBlbnRlcnByaXNlSWQ6IHN0cmluZyxcbiAgICB1c2VyUGFzc3dvcmQ6IHN0cmluZ1xuICApOiBQcm9taXNlPEJpdEdvUHJvb2ZTaWduYXR1cmVzPiB7XG4gICAgLy8gRmV0Y2ggQml0R28ncyBjaGFsbGVuZ2UgYW5kIHZlcmlmeVxuICAgIGNvbnN0IGJpdGdvQ2hhbGxlbmdlc1dpdGhQcm9vZnMgPSBhd2FpdCBFY2RzYVV0aWxzLmdldEJpdEdvQ2hhbGxlbmdlcyhiaXRnbyk7XG4gICAgaWYgKCEoYXdhaXQgRWNkc2FVdGlscy52ZXJpZnlCaXRHb0NoYWxsZW5nZXMoYml0Z29DaGFsbGVuZ2VzV2l0aFByb29mcykpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBGYWlsZWQgdG8gdmVyaWZ5IEJpdEdvJ3MgY2hhbGxlbmdlIG5lZWRlZCB0byBlbmFibGUgRUNEU0Egc2lnbmluZy4gUGxlYXNlIGNvbnRhY3Qgc3VwcG9ydEBiaXRnby5jb21gXG4gICAgICApO1xuICAgIH1cbiAgICByZXR1cm4gYXdhaXQgRWNkc2FVdGlscy5zaWduQml0Z29DaGFsbGVuZ2VzKGJpdGdvLCBlbnRlcnByaXNlSWQsIHVzZXJQYXNzd29yZCwgYml0Z29DaGFsbGVuZ2VzV2l0aFByb29mcyk7XG4gIH1cblxuICAvKipcbiAgICogU2lnbiBCaXRnbydzIHByb29mcywgdmVyaWZpY2F0aW9uIG9mIHByb29mcyBpcyBsZWZ0IHRvIHRoZSBjYWxsZXJcbiAgICogQHBhcmFtIGJpdGdvXG4gICAqIEBwYXJhbSBlbnRlcnByaXNlSWRcbiAgICogQHBhcmFtIHVzZXJQYXNzd29yZFxuICAgKiBAcGFyYW0gYml0Z29DaGFsbGVuZ2VzV2l0aFByb29mcyBPcHRpb25hbGx5IHByb3ZpZGUgQml0Z28gQ2hhbGxhZW5nZSAmIFByb29mcyBpbnN0ZWFkIG9mIGZldGNoaW5nIGZyb20gQVBJXG4gICAqL1xuICBzdGF0aWMgYXN5bmMgc2lnbkJpdGdvQ2hhbGxlbmdlcyhcbiAgICBiaXRnbzogQml0R29CYXNlLFxuICAgIGVudGVycHJpc2VJZDogc3RyaW5nLFxuICAgIHVzZXJQYXNzd29yZDogc3RyaW5nLFxuICAgIGJpdGdvQ2hhbGxlbmdlc1dpdGhQcm9vZnM/OiBHZXRCaXRHb0NoYWxsZW5nZXNBcGlcbiAgKTogUHJvbWlzZTxCaXRHb1Byb29mU2lnbmF0dXJlcz4ge1xuICAgIC8vIGZldGNoIGNoYWxsZW5nZSAmIHByb29mIGlmIG5vbmUgYXJlIHByb3ZpZGVkXG4gICAgY29uc3QgY2hhbGxlbmdlc1dpdGhQcm9vZnMgPSBiaXRnb0NoYWxsZW5nZXNXaXRoUHJvb2ZzXG4gICAgICA/IGJpdGdvQ2hhbGxlbmdlc1dpdGhQcm9vZnNcbiAgICAgIDogYXdhaXQgRWNkc2FVdGlscy5nZXRCaXRHb0NoYWxsZW5nZXMoYml0Z28pO1xuXG4gICAgLy8gRmV0Y2ggdXNlcidzIGVjZGggcHVibGljIGtleWNoYWluIG5lZWRlZCBmb3Igc2lnbmluZyB0aGUgY2hhbGxlbmdlc1xuICAgIGNvbnN0IGVjZGhLZXlwYWlyID0gYXdhaXQgYml0Z28uZ2V0RWNkaEtleXBhaXJQcml2YXRlKHVzZXJQYXNzd29yZCwgZW50ZXJwcmlzZUlkKTtcblxuICAgIGNvbnN0IHNpZ25lZEJpdEdvSW5zdENoYWxsZW5nZSA9IEVjZHNhVXRpbHMuc2lnbkNoYWxsZW5nZShcbiAgICAgIGNoYWxsZW5nZXNXaXRoUHJvb2ZzLmJpdGdvSW5zdGl0dXRpb25hbEhzbSxcbiAgICAgIGVjZGhLZXlwYWlyLnhwcnYsXG4gICAgICBlY2RoS2V5cGFpci5kZXJpdmF0aW9uUGF0aFxuICAgICk7XG4gICAgY29uc3Qgc2lnbmVkQml0R29OaXRyb0NoYWxsZW5nZSA9IEVjZHNhVXRpbHMuc2lnbkNoYWxsZW5nZShcbiAgICAgIGNoYWxsZW5nZXNXaXRoUHJvb2ZzLmJpdGdvTml0cm9Ic20sXG4gICAgICBlY2RoS2V5cGFpci54cHJ2LFxuICAgICAgZWNkaEtleXBhaXIuZGVyaXZhdGlvblBhdGhcbiAgICApO1xuICAgIHJldHVybiB7XG4gICAgICBiaXRnb0luc3RIc21BZG1pblNpZ25hdHVyZTogc2lnbmVkQml0R29JbnN0Q2hhbGxlbmdlLFxuICAgICAgYml0Z29OaXRyb0hzbUFkbWluU2lnbmF0dXJlOiBzaWduZWRCaXRHb05pdHJvQ2hhbGxlbmdlLFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogVGhpcyBpcyBuZWVkZWQgdG8gZW5hYmxlIGVjZHNhIHNpZ25pbmcgb24gdGhlIGVudGVycHJpc2UuXG4gICAqIEl0IHJlY2VpdmVzIHRoZSBlbnRlcnByaXNlIGNoYWxsZW5nZSBhbmQgc2lnbmF0dXJlcyBvZiB2ZXJpZmllZCBiaXRnbyBwcm9vZnNcbiAgICogYW5kIHVwbG9hZHMgdGhlbSBvbiB0aGUgZW50ZXJwcmlzZS5cbiAgICogQHBhcmFtIGJpdGdvXG4gICAqIEBwYXJhbSBlbnRJZCAtIGVudGVycHJpc2UgaWQgdG8gZW5hYmxlIGVjZHNhIHNpZ25pbmcgb25cbiAgICogQHBhcmFtIHVzZXJQYXNzd29yZCAtIGVudGVycHJpc2UgYWRtaW4ncyBsb2dpbiBwd1xuICAgKiBAcGFyYW0gYml0Z29JbnN0Q2hhbGxlbmdlUHJvb2ZTaWduYXR1cmUgLSBzaWduYXR1cmUgb24gYml0Z28ncyBpbnN0aXR1dGlvbmFsIEhTTSBjaGFsbGVuZ2UgYWZ0ZXIgdmVyaWZpY2F0aW9uXG4gICAqIEBwYXJhbSBiaXRnb05pdHJvQ2hhbGxlbmdlUHJvb2ZTaWduYXR1cmUgLSBzaWduYXR1cmUgb24gYml0Z28ncyBuaXRybyBIU00gY2hhbGxlbmdlIGFmdGVyIHZlcmlmaWNhdGlvblxuICAgKiBAcGFyYW0gY2hhbGxlbmdlIC0gb3B0aW9uYWxseSB1c2UgdGhlIGNoYWxsZW5nZSBmb3IgZW50ZXJwcmlzZSBjaGFsbGVuZ2VcbiAgICovXG4gIHN0YXRpYyBhc3luYyBpbml0aWF0ZUNoYWxsZW5nZXNGb3JFbnRlcnByaXNlKFxuICAgIGJpdGdvOiBCaXRHb0Jhc2UsXG4gICAgZW50SWQ6IHN0cmluZyxcbiAgICB1c2VyUGFzc3dvcmQ6IHN0cmluZyxcbiAgICBiaXRnb0luc3RDaGFsbGVuZ2VQcm9vZlNpZ25hdHVyZTogQnVmZmVyLFxuICAgIGJpdGdvTml0cm9DaGFsbGVuZ2VQcm9vZlNpZ25hdHVyZTogQnVmZmVyLFxuICAgIG9wZW5TU0xCeXRlczogVWludDhBcnJheSxcbiAgICBjaGFsbGVuZ2U/OiBFY2RzYVR5cGVzLkRlc2VyaWFsaXplZE50aWxkZVdpdGhQcm9vZnNcbiAgKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgLy8gRmV0Y2ggdXNlcidzIGVjZGggcHVibGljIGtleWNoYWluIG5lZWRlZCBmb3Igc2lnbmluZyB0aGUgY2hhbGxlbmdlc1xuICAgIGNvbnN0IGVjZGhLZXlwYWlyID0gYXdhaXQgYml0Z28uZ2V0RWNkaEtleXBhaXJQcml2YXRlKHVzZXJQYXNzd29yZCwgZW50SWQpO1xuXG4gICAgLy8gR2VuZXJhdGUgYW5kIHNpZ24gZW50ZXJwcmlzZSBjaGFsbGVuZ2VcbiAgICBjb25zdCBlbnRDaGFsbGVuZ2VXaXRoUHJvb2YgPVxuICAgICAgY2hhbGxlbmdlID8/IChhd2FpdCBFY2RzYVJhbmdlUHJvb2YuZ2VuZXJhdGVOdGlsZGUob3BlblNTTEJ5dGVzLCBtaW5Nb2R1bHVzQml0TGVuZ3RoKSk7XG4gICAgY29uc3Qgc2VyaWFsaXplZEVudENoYWxsZW5nZVdpdGhQcm9vZiA9IEVjZHNhVHlwZXMuc2VyaWFsaXplTnRpbGRlV2l0aFByb29mcyhlbnRDaGFsbGVuZ2VXaXRoUHJvb2YpO1xuICAgIGNvbnN0IHNpZ25lZEVudGVycHJpc2VDaGFsbGVuZ2UgPSBFY2RzYVV0aWxzLnNpZ25DaGFsbGVuZ2UoXG4gICAgICBzZXJpYWxpemVkRW50Q2hhbGxlbmdlV2l0aFByb29mLFxuICAgICAgZWNkaEtleXBhaXIueHBydixcbiAgICAgIGVjZGhLZXlwYWlyLmRlcml2YXRpb25QYXRoXG4gICAgKTtcblxuICAgIGF3YWl0IHRoaXMudXBsb2FkQ2hhbGxlbmdlc1RvRW50ZXJwcmlzZShcbiAgICAgIGJpdGdvLFxuICAgICAgZW50SWQsXG4gICAgICBzZXJpYWxpemVkRW50Q2hhbGxlbmdlV2l0aFByb29mLFxuICAgICAgc2lnbmVkRW50ZXJwcmlzZUNoYWxsZW5nZS50b1N0cmluZygnaGV4JyksXG4gICAgICBiaXRnb0luc3RDaGFsbGVuZ2VQcm9vZlNpZ25hdHVyZS50b1N0cmluZygnaGV4JyksXG4gICAgICBiaXRnb05pdHJvQ2hhbGxlbmdlUHJvb2ZTaWduYXR1cmUudG9TdHJpbmcoJ2hleCcpXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVcGxvYWRzIHRoZSBzaWduZWQgY2hhbGxlbmdlcyBhbmQgdGhlaXIgcHJvb2ZzIG9uIHRoZSBlbnRlcnByaXNlLlxuICAgKiBUaGlzIGluaXRpYXRlcyBlY2RzYSBzaWduaW5nIGZvciB0aGUgZW50ZXJwcmlzZSB1c2Vycy5cbiAgICogQHBhcmFtIGJpdGdvXG4gICAqIEBwYXJhbSBlbnRJZCAtIGVudGVycHJpc2UgdG8gZW5hYmxlIGVjZHNhIHNpZ25pbmcgb25cbiAgICogQHBhcmFtIGVudENoYWxsZW5nZSAtIGNsaWVudCBzaWRlIGdlbmVyYXRlZCBlbnQgY2hhbGxlbmdlIHdpdGggWksgcHJvb2ZzXG4gICAqIEBwYXJhbSBlbnRDaGFsbGVuZ2VTaWduYXR1cmUgLSBzaWduYXR1cmUgb24gZW50ZXJwcmlzZSBjaGFsbGVuZ2VcbiAgICogQHBhcmFtIGJpdGdvSW50Q2hhbGxlbmdlU2lnbmF0dXJlIC0gc2lnbmF0dXJlIG9uIEJpdEdvJ3MgaW5zdGl0dXRpb25hbCBIU00gY2hhbGxlbmdlXG4gICAqIEBwYXJhbSBiaXRnb05pdHJvQ2hhbGxlbmdlU2lnbmF0dXJlIC0gc2lnbmF0dXJlIG9uIEJpdEdvJ3Mgbml0cm8gSFNNIGNoYWxsZW5nZVxuICAgKi9cbiAgc3RhdGljIGFzeW5jIHVwbG9hZENoYWxsZW5nZXNUb0VudGVycHJpc2UoXG4gICAgYml0Z286IEJpdEdvQmFzZSxcbiAgICBlbnRJZDogc3RyaW5nLFxuICAgIGVudENoYWxsZW5nZTogRWNkc2FUeXBlcy5TZXJpYWxpemVkTnRpbGRlIHwgRWNkc2FUeXBlcy5TZXJpYWxpemVkTnRpbGRlV2l0aFByb29mcyxcbiAgICBlbnRDaGFsbGVuZ2VTaWduYXR1cmU6IHN0cmluZyxcbiAgICBiaXRnb0ludENoYWxsZW5nZVNpZ25hdHVyZTogc3RyaW5nLFxuICAgIGJpdGdvTml0cm9DaGFsbGVuZ2VTaWduYXR1cmU6IHN0cmluZ1xuICApOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBib2R5ID0ge1xuICAgICAgZW50ZXJwcmlzZToge1xuICAgICAgICBudGlsZGU6IGVudENoYWxsZW5nZS5udGlsZGUsXG4gICAgICAgIGgxOiBlbnRDaGFsbGVuZ2UuaDEsXG4gICAgICAgIGgyOiBlbnRDaGFsbGVuZ2UuaDIsXG4gICAgICAgIHZlcmlmaWVyczoge1xuICAgICAgICAgIGFkbWluU2lnbmF0dXJlOiBlbnRDaGFsbGVuZ2VTaWduYXR1cmUsXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgICAgYml0Z29JbnN0aXR1dGlvbmFsSHNtOiB7XG4gICAgICAgIHZlcmlmaWVyczoge1xuICAgICAgICAgIGFkbWluU2lnbmF0dXJlOiBiaXRnb0ludENoYWxsZW5nZVNpZ25hdHVyZSxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgICBiaXRnb05pdHJvSHNtOiB7XG4gICAgICAgIHZlcmlmaWVyczoge1xuICAgICAgICAgIGFkbWluU2lnbmF0dXJlOiBiaXRnb05pdHJvQ2hhbGxlbmdlU2lnbmF0dXJlLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICB9O1xuICAgIGlmICgnbnRpbGRlUHJvb2YnIGluIGVudENoYWxsZW5nZSkge1xuICAgICAgYm9keS5lbnRlcnByaXNlWydudGlsZGVQcm9vZiddID0gZW50Q2hhbGxlbmdlLm50aWxkZVByb29mO1xuICAgIH1cbiAgICBhd2FpdCBiaXRnb1xuICAgICAgLnB1dChiaXRnby51cmwoYC9lbnRlcnByaXNlLyR7ZW50SWR9L3Rzc2NvbmZpZy9lY2RzYS9jaGFsbGVuZ2VgLCAyKSlcbiAgICAgIC5zZW5kKGJvZHkpXG4gICAgICAucmVzdWx0KCk7XG4gIH1cbn1cbiJdfQ==
850
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWNkc2EuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvYml0Z28vdXRpbHMvdHNzL2VjZHNhL2VjZHNhLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLG9EQUE0QjtBQUM1QixtQ0FBZ0M7QUFDaEMsaURBQW1DO0FBR25DLG9EQUF1SDtBQUN2SCw4Q0FBd0M7QUFFeEMseURBQStEO0FBRS9ELCtEQUFvRTtBQVVwRSw0Q0Fhc0I7QUFDdEIsc0NBQTRDO0FBQzVDLG9EQUFrSDtBQUNsSCxxREFBNkY7QUFFN0Ysb0RBQWlFO0FBQ2pFLHdDQUFtRjtBQUNuRixnREFBNEQ7QUFDNUQsOENBSzRCO0FBQzVCLGlDQUF3QztBQUd4QyxNQUFNLGFBQWEsR0FBRyxlQUFZLENBQUMsYUFBYSxDQUFDO0FBRWpELGtCQUFrQjtBQUNsQixNQUFhLFVBQVcsU0FBUSxxQkFBYztJQUM1QyxLQUFLLENBQUMsK0JBQStCLENBQ25DLEtBQWEsRUFDYixjQUFzQixFQUN0QixZQUFzQixFQUN0QixhQUF1QixFQUN2QixVQUFxQyxFQUNyQyw0QkFBaUM7UUFFakMsTUFBTSwwQkFBMEIsR0FBRyxNQUFNLGFBQWEsQ0FDcEQsWUFBWSxFQUNaLENBQUMsRUFDRCw0QkFBNEIsQ0FBQyxLQUFLLEVBQUUsRUFDcEMsVUFBVSxDQUNYLENBQUM7UUFDRixNQUFNLHFCQUFxQixHQUFHLGFBQWEsQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUN6RCxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUMsUUFBUSxDQUFDLElBQUksS0FBSyxPQUFPLElBQUksUUFBUSxDQUFDLEVBQUUsS0FBSyxRQUFRLENBQ3BFLENBQUM7UUFDRixNQUFNLGVBQWUsR0FBRyxlQUFNLENBQUMsTUFBTSxDQUFDO1lBQ3BDLGVBQU0sQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMs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YUFBYSxFQUFFO2dCQUNiLFNBQVMsRUFBRTtvQkFDVCxjQUFjLEVBQUUsNEJBQTRCO2lCQUM3QzthQUNGO1NBQ0YsQ0FBQztRQUNGLElBQUksYUFBYSxJQUFJLFlBQVksRUFBRSxDQUFDO1lBQ2xDLElBQUksQ0FBQyxVQUFVLENBQUMsYUFBYSxDQUFDLEdBQUcsWUFBWSxDQUFDLFdBQVcsQ0FBQztRQUM1RCxDQUFDO1FBQ0QsTUFBTSxLQUFLO2FBQ1IsR0FBRyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsZUFBZSxLQUFLLDRCQUE0QixFQUFFLENBQUMsQ0FBQyxDQUFDO2FBQ25FLElBQUksQ0FBQyxJQUFJLENBQUM7YUFDVixNQUFNLEVBQUUsQ0FBQztJQUNkLENBQUM7Q0FDRjtBQWxzQ0QsZ0NBa3NDQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBhc3NlcnQgZnJvbSAnYXNzZXJ0JztcbmltcG9ydCB7IEJ1ZmZlciB9IGZyb20gJ2J1ZmZlcic7XG5pbXBvcnQgKiBhcyBvcGVucGdwIGZyb20gJ29wZW5wZ3AnO1xuaW1wb3J0IHsgS2V5LCBTZXJpYWxpemVkS2V5UGFpciB9IGZyb20gJ29wZW5wZ3AnO1xuaW1wb3J0IHsgSGFzaCB9IGZyb20gJ2NyeXB0byc7XG5pbXBvcnQgeyBFY2RzYVBhaWxsaWVyUHJvb2YsIEVjZHNhUmFuZ2VQcm9vZiwgRWNkc2FUeXBlcywgaGV4VG9CaWdJbnQsIG1pbk1vZHVsdXNCaXRMZW5ndGggfSBmcm9tICdAYml0Z28vc2RrLWxpYi1tcGMnO1xuaW1wb3J0IHsgYmlwMzIgfSBmcm9tICdAYml0Z28vdXR4by1saWInO1xuXG5pbXBvcnQgeyBFQ0RTQSwgRWNkc2EgfSBmcm9tICcuLi8uLi8uLi8uLi9hY2NvdW50LWxpYi9tcGMvdHNzJztcbmltcG9ydCB7IEFkZEtleWNoYWluT3B0aW9ucywgS2V5Y2hhaW4sIEtleVR5cGUgfSBmcm9tICcuLi8uLi8uLi9rZXljaGFpbic7XG5pbXBvcnQgRUNEU0FNZXRob2RzLCB7IEVDRFNBTWV0aG9kVHlwZXMgfSBmcm9tICcuLi8uLi8uLi90c3MvZWNkc2EnO1xuaW1wb3J0IHsgS2V5Y2hhaW5zVHJpcGxldCB9IGZyb20gJy4uLy4uLy4uL2Jhc2VDb2luJztcbmltcG9ydCB7XG4gIEJpdEdvUHJvb2ZTaWduYXR1cmVzLFxuICBDcmVhdGVFY2RzYUJpdEdvS2V5Y2hhaW5QYXJhbXMsXG4gIENyZWF0ZUVjZHNhS2V5Y2hhaW5QYXJhbXMsXG4gIERlY3J5cHRhYmxlTlNoYXJlLFxuICBHZXRCaXRHb0NoYWxsZW5nZXNBcGksXG4gIEtleVNoYXJlLFxufSBmcm9tICcuL3R5cGVzJztcbmltcG9ydCB7XG4gIEJhY2t1cEtleVNoYXJlLFxuICBCaXRnb0hlbGRCYWNrdXBLZXlTaGFyZSxcbiAgQ3VzdG9tS1NoYXJlR2VuZXJhdGluZ0Z1bmN0aW9uLFxuICBDdXN0b21NdURlbHRhU2hhcmVHZW5lcmF0aW5nRnVuY3Rpb24sXG4gIEN1c3RvbVBhaWxsaWVyTW9kdWx1c0dldHRlckZ1bmN0aW9uLFxuICBDdXN0b21TU2hhcmVHZW5lcmF0aW5nRnVuY3Rpb24sXG4gIFJlcXVlc3RUeXBlLFxuICBUU1NQYXJhbXMsXG4gIFRTU1BhcmFtc0Zvck1lc3NhZ2UsXG4gIFRTU1BhcmFtc0Zvck1lc3NhZ2VXaXRoUHJ2LFxuICBUU1NQYXJhbXNXaXRoUHJ2LFxuICBUeFJlcXVlc3QsXG59IGZyb20gJy4uL2Jhc2VUeXBlcyc7XG5pbXBvcnQgeyBnZXRUeFJlcXVlc3QgfSBmcm9tICcuLi8uLi8uLi90c3MnO1xuaW1wb3J0IHsgQVNoYXJlLCBEU2hhcmUsIEVuY3J5cHRlZE5TaGFyZSwgU2VuZFNoYXJlVHlwZSwgU1NoYXJlLCBXU2hhcmUsIE9TaGFyZSB9IGZyb20gJy4uLy4uLy4uL3Rzcy9lY2RzYS90eXBlcyc7XG5pbXBvcnQgeyBjcmVhdGVTaGFyZVByb29mLCBnZW5lcmF0ZUdQR0tleVBhaXIsIGdldEJpdGdvR3BnUHViS2V5IH0gZnJvbSAnLi4vLi4vb3BlbmdwZ1V0aWxzJztcbmltcG9ydCB7IEJpdEdvQmFzZSB9IGZyb20gJy4uLy4uLy4uL2JpdGdvQmFzZSc7XG5pbXBvcnQgeyB2ZXJpZnlXYWxsZXRTaWduYXR1cmUgfSBmcm9tICcuLi8uLi8uLi90c3MvZWNkc2EvZWNkc2EnO1xuaW1wb3J0IHsgc2lnbk1lc3NhZ2VXaXRoRGVyaXZlZEVjZGhLZXksIHZlcmlmeUVjZGhTaWduYXR1cmUgfSBmcm9tICcuLi8uLi8uLi9lY2RoJztcbmltcG9ydCB7IGdldFR4UmVxdWVzdENoYWxsZW5nZSB9IGZyb20gJy4uLy4uLy4uL3Rzcy9jb21tb24nO1xuaW1wb3J0IHtcbiAgU2hhcmVLZXlQb3NpdGlvbixcbiAgVHNzRWNkc2FTdGVwMVJldHVybk1lc3NhZ2UsXG4gIFRzc0VjZHNhU3RlcDJSZXR1cm5NZXNzYWdlLFxuICBUeFJlcXVlc3RDaGFsbGVuZ2VSZXNwb25zZSxcbn0gZnJvbSAnLi4vLi4vLi4vdHNzL3R5cGVzJztcbmltcG9ydCB7IEJhc2VFY2RzYVV0aWxzIH0gZnJvbSAnLi9iYXNlJztcbmltcG9ydCB7IElSZXF1ZXN0VHJhY2VyIH0gZnJvbSAnLi4vLi4vLi4vLi4vYXBpJztcblxuY29uc3QgZW5jcnlwdE5TaGFyZSA9IEVDRFNBTWV0aG9kcy5lbmNyeXB0TlNoYXJlO1xuXG4vKiogQGluaGVyaXRkb2MgKi9cbmV4cG9ydCBjbGFzcyBFY2RzYVV0aWxzIGV4dGVuZHMgQmFzZUVjZHNhVXRpbHMge1xuICBhc3luYyBmaW5hbGl6ZUJpdGdvSGVsZEJhY2t1cEtleVNoYXJlKFxuICAgIGtleUlkOiBzdHJpbmcsXG4gICAgY29tbW9uS2V5Y2hhaW46IHN0cmluZyxcbiAgICB1c2VyS2V5U2hhcmU6IEtleVNoYXJlLFxuICAgIGJpdGdvS2V5Y2hhaW46IEtleWNoYWluLFxuICAgIHVzZXJHcGdLZXk6IFNlcmlhbGl6ZWRLZXlQYWlyPHN0cmluZz4sXG4gICAgdGhpcmRQYXJ0eUJhY2t1cFB1YmxpY0dwZ0tleTogS2V5XG4gICk6IFByb21pc2U8Qml0Z29IZWxkQmFja3VwS2V5U2hhcmU+IHtcbiAgICBjb25zdCBlbmNyeXB0ZWRVc2VyVG9CYWNrdXBTaGFyZSA9IGF3YWl0IGVuY3J5cHROU2hhcmUoXG4gICAgICB1c2VyS2V5U2hhcmUsXG4gICAgICAyLFxuICAgICAgdGhpcmRQYXJ0eUJhY2t1cFB1YmxpY0dwZ0tleS5hcm1vcigpLFxuICAgICAgdXNlckdwZ0tleVxuICAgICk7XG4gICAgY29uc3QgYml0Z29Ub0JhY2t1cEtleVNoYXJlID0gYml0Z29LZXljaGFpbi5rZXlTaGFyZXM/LmZpbmQoXG4gICAgICAoa2V5U2hhcmUpID0+IGtleVNoYXJlLmZyb20gPT09ICdiaXRnbycgJiYga2V5U2hhcmUudG8gPT09ICdiYWNrdXAnXG4gICAgKTtcbiAgICBjb25zdCB1c2VyUHVibGljU2hhcmUgPSBCdWZmZXIuY29uY2F0KFtcbiAgICAgIEJ1ZmZlci5mcm9tKHVzZXJLZXlTaGFyZS5uU2hhcmVzWzJdLnksICdoZXgnKSxcbiAgICAgIEJ1ZmZlci5mcm9tKHVzZXJLZXlTaGFyZS5uU2hhcmVzWzJdLmNoYWluY29kZSwgJ2hleCcpLFxuICAgIF0pLnRvU3RyaW5nKCdoZXgnKTtcbiAgICBhc3NlcnQoYml0Z29Ub0JhY2t1cEtleVNoYXJlKTtcbiAgICBjb25zdCBrZXlSZXNwb25zZSA9IGF3YWl0IHRoaXMuYml0Z29cbiAgICAgIC5wdXQodGhpcy5iYXNlQ29pbi51cmwoYC9rcnMvYmFja3Vwa2V5cy8ke2tleUlkfWApKVxuICAgICAgLnNlbmQoe1xuICAgICAgICBjb21tb25LZXljaGFpbixcbiAgICAgICAga2V5U2hhcmVzOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgZnJvbTogJ3VzZXInLFxuICAgICAgICAgICAgdG86ICdiYWNrdXAnLFxuICAgICAgICAgICAgcHVibGljU2hhcmU6IHVzZXJQdWJsaWNTaGFyZSxcbiAgICAgICAgICAgIHByaXZhdGVTaGFyZTogZW5jcnlwdGVkVXNlclRvQmFja3VwU2hhcmUuZW5jcnlwdGVkUHJpdmF0ZVNoYXJlLFxuICAgICAgICAgICAgcHJpdmF0ZVNoYXJlUHJvb2Y6IGVuY3J5cHRlZFVzZXJUb0JhY2t1cFNoYXJlLnByaXZhdGVTaGFyZVByb29mLFxuICAgICAgICAgICAgdnNzUHJvb2Y6IGVuY3J5cHRlZFVzZXJUb0JhY2t1cFNoYXJlLnZzc1Byb29mLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgYml0Z29Ub0JhY2t1cEtleVNoYXJlLFxuICAgICAgICBdLFxuICAgICAgfSlcbiAgICAgIC5yZXN1bHQoKTtcbiAgICBpZiAoIWtleVJlc3BvbnNlIHx8ICFrZXlSZXNwb25zZS5jb21tb25LZXljaGFpbikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdGYWlsZWQgYmFja3VwIGtleSB2ZXJpZmljYXRpb24uJyk7XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICBpZDoga2V5UmVzcG9uc2UuaWQsXG4gICAgICBrZXlTaGFyZXM6IGtleVJlc3BvbnNlLmtleVNoYXJlcyxcbiAgICAgIGNvbW1vbktleWNoYWluOiBrZXlSZXNwb25zZS5jb21tb25LZXljaGFpbixcbiAgICB9O1xuICB9XG5cbiAgLyoqIEBpbmhlcml0ZG9jICovXG4gIGFzeW5jIGNyZWF0ZUtleWNoYWlucyhwYXJhbXM6IHtcbiAgICBwYXNzcGhyYXNlOiBzdHJpbmc7XG4gICAgZW50ZXJwcmlzZT86IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICBvcmlnaW5hbFBhc3Njb2RlRW5jcnlwdGlvbkNvZGU/OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gIH0pOiBQcm9taXNlPEtleWNoYWluc1RyaXBsZXQ+IHtcbiAgICBjb25zdCBNUEMgPSBuZXcgRWNkc2EoKTtcbiAgICBjb25zdCBtID0gMjtcbiAgICBjb25zdCBuID0gMztcblxuICAgIGNvbnN0IHVzZXJLZXlTaGFyZSA9IGF3YWl0IE1QQy5rZXlTaGFyZSgxLCBtLCBuKTtcbiAgICBjb25zdCB1c2VyR3BnS2V5ID0gYXdhaXQgZ2VuZXJhdGVHUEdLZXlQYWlyKCdzZWNwMjU2azEnKTtcbiAgICBjb25zdCBiYWNrdXBLZXlTaGFyZSA9IGF3YWl0IHRoaXMuY3JlYXRlQmFja3VwS2V5U2hhcmVzKCk7XG4gICAgY29uc3QgYmFja3VwR3BnS2V5ID0gYXdhaXQgdGhpcy5nZXRCYWNrdXBHcGdQdWJLZXkoKTtcblxuICAgIC8vIEdldCB0aGUgQml0R28gcHVibGljIGtleSBiYXNlZCBvbiB1c2VyL2VudGVycHJpc2UgZmVhdHVyZSBmbGFnc1xuICAgIC8vIElmIGl0IGRvZXNuJ3Qgd29yaywgdXNlIHRoZSBkZWZhdWx0IHB1YmxpYyBrZXkgZnJvbSB0aGUgY29uc3RhbnRzXG4gICAgY29uc3QgYml0Z29QdWJsaWNHcGdLZXkgPVxuICAgICAgKGF3YWl0IHRoaXMuZ2V0Qml0Z29HcGdQdWJrZXlCYXNlZE9uRmVhdHVyZUZsYWdzKHBhcmFtcy5lbnRlcnByaXNlKSkgPz8gdGhpcy5iaXRnb1B1YmxpY0dwZ0tleTtcblxuICAgIGNvbnN0IGJpdGdvS2V5Y2hhaW4gPSBhd2FpdCB0aGlzLmNyZWF0ZUJpdGdvS2V5Y2hhaW4oe1xuICAgICAgdXNlckdwZ0tleSxcbiAgICAgIGJhY2t1cEdwZ0tleSxcbiAgICAgIGJpdGdvUHVibGljR3BnS2V5LFxuICAgICAgdXNlcktleVNoYXJlLFxuICAgICAgYmFja3VwS2V5U2hhcmUsXG4gICAgICBlbnRlcnByaXNlOiBwYXJhbXMuZW50ZXJwcmlzZSxcbiAgICB9KTtcbiAgICBjb25zdCB1c2VyS2V5Y2hhaW5Qcm9taXNlID0gdGhpcy5jcmVhdGVVc2VyS2V5Y2hhaW4oe1xuICAgICAgdXNlckdwZ0tleSxcbiAgICAgIGJhY2t1cEdwZ0tleSxcbiAgICAgIGJpdGdvUHVibGljR3BnS2V5LFxuICAgICAgdXNlcktleVNoYXJlLFxuICAgICAgYmFja3VwS2V5U2hhcmUsXG4gICAgICBiaXRnb0tleWNoYWluLFxuICAgICAgcGFzc3BocmFzZTogcGFyYW1zLnBhc3NwaHJhc2UsXG4gICAgICBvcmlnaW5hbFBhc3Njb2RlRW5jcnlwdGlvbkNvZGU6IHBhcmFtcy5vcmlnaW5hbFBhc3Njb2RlRW5jcnlwdGlvbkNvZGUsXG4gICAgfSk7XG4gICAgY29uc3QgYmFja3VwS2V5Y2hhaW5Qcm9taXNlID0gdGhpcy5jcmVhdGVCYWNrdXBLZXljaGFpbih7XG4gICAgICB1c2VyR3BnS2V5LFxuICAgICAgYmFja3VwR3BnS2V5LFxuICAgICAgYml0Z29QdWJsaWNHcGdLZXksXG4gICAgICB1c2VyS2V5U2hhcmUsXG4gICAgICBiYWNrdXBLZXlTaGFyZSxcbiAgICAgIGJpdGdvS2V5Y2hhaW4sXG4gICAgICBwYXNzcGhyYXNlOiBwYXJhbXMucGFzc3BocmFzZSxcbiAgICB9KTtcblxuICAgIGNvbnN0IFt1c2VyS2V5Y2hhaW4sIGJhY2t1cEtleWNoYWluXSA9IGF3YWl0IFByb21pc2UuYWxsKFt1c2VyS2V5Y2hhaW5Qcm9taXNlLCBiYWNrdXBLZXljaGFpblByb21pc2VdKTtcblxuICAgIHJldHVybiB7XG4gICAgICB1c2VyS2V5Y2hhaW4sXG4gICAgICBiYWNrdXBLZXljaGFpbixcbiAgICAgIGJpdGdvS2V5Y2hhaW4sXG4gICAgfTtcbiAgfVxuXG4gIGFzeW5jIGNyZWF0ZUJhY2t1cEtleVNoYXJlcygpOiBQcm9taXNlPEJhY2t1cEtleVNoYXJlPiB7XG4gICAgY29uc3QgTVBDID0gbmV3IEVjZHNhKCk7XG4gICAgY29uc3QgbSA9IDI7XG4gICAgY29uc3QgbiA9IDM7XG4gICAgY29uc3QgYmFja3VwS2V5U2hhcmUgPSB7XG4gICAgICB1c2VySGVsZEtleVNoYXJlOiBhd2FpdCBNUEMua2V5U2hhcmUoMiwgbSwgbiksXG4gICAgfTtcbiAgICByZXR1cm4gYmFja3VwS2V5U2hhcmU7XG4gIH1cblxuICBjcmVhdGVVc2VyS2V5Y2hhaW4oe1xuICAgIHVzZXJHcGdLZXksXG4gICAgYmFja3VwR3BnS2V5LFxuICAgIGJpdGdvUHVibGljR3BnS2V5LFxuICAgIHVzZXJLZXlTaGFyZSxcbiAgICBiYWNrdXBLZXlTaGFyZSxcbiAgICBiaXRnb0tleWNoYWluLFxuICAgIHBhc3NwaHJhc2UsXG4gICAgb3JpZ2luYWxQYXNzY29kZUVuY3J5cHRpb25Db2RlLFxuICB9OiBDcmVhdGVFY2RzYUtleWNoYWluUGFyYW1zKTogUHJvbWlzZTxLZXljaGFpbj4ge1xuICAgIGlmICghcGFzc3BocmFzZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdQbGVhc2UgcHJvdmlkZSBhIHdhbGxldCBwYXNzcGhyYXNlJyk7XG4gICAgfVxuICAgIGFzc2VydChiYWNrdXBLZXlTaGFyZS51c2VySGVsZEtleVNoYXJlKTtcbiAgICByZXR1cm4gdGhpcy5jcmVhdGVQYXJ0aWNpcGFudEtleWNoYWluKFxuICAgICAgdXNlckdwZ0tleSxcbiAgICAgIGJhY2t1cEdwZ0tleSBhcyBTZXJpYWxpemVkS2V5UGFpcjxzdHJpbmc+LFxuICAgICAgYml0Z29QdWJsaWNHcGdLZXksXG4gICAgICAxLFxuICAgICAgdXNlcktleVNoYXJlLFxuICAgICAgYmFja3VwS2V5U2hhcmUudXNlckhlbGRLZXlTaGFyZSxcbiAgICAgIGJpdGdvS2V5Y2hhaW4sXG4gICAgICBwYXNzcGhyYXNlLFxuICAgICAgb3JpZ2luYWxQYXNzY29kZUVuY3J5cHRpb25Db2RlXG4gICAgKTtcbiAgfVxuXG4gIGFzeW5jIGNyZWF0ZUJhY2t1cEtleWNoYWluKHtcbiAgICB1c2VyR3BnS2V5LFxuICAgIHVzZXJLZXlTaGFyZSxcbiAgICBiYWNrdXBHcGdLZXksXG4gICAgYmFja3VwS2V5U2hhcmUsXG4gICAgYml0Z29LZXljaGFpbixcbiAgICBiaXRnb1B1YmxpY0dwZ0tleSxcbiAgICBwYXNzcGhyYXNlLFxuICB9OiBDcmVhdGVFY2RzYUtleWNoYWluUGFyYW1zKTogUHJvbWlzZTxLZXljaGFpbj4ge1xuICAgIGFzc2VydChiYWNrdXBLZXlTaGFyZS51c2VySGVsZEtleVNoYXJlKTtcbiAgICBhc3NlcnQocGFzc3BocmFzZSk7XG4gICAgcmV0dXJuIHRoaXMuY3JlYXRlUGFydGljaXBhbnRLZXljaGFpbihcbiAgICAgIHVzZXJHcGdLZXksXG4gICAgICBiYWNrdXBHcGdLZXkgYXMgU2VyaWFsaXplZEtleVBhaXI8c3RyaW5nPixcbiAgICAgIGJpdGdvUHVibGljR3BnS2V5LFxuICAgICAgMixcbiAgICAgIHVzZXJLZXlTaGFyZSxcbiAgICAgIGJhY2t1cEtleVNoYXJlLnVzZXJIZWxkS2V5U2hhcmUsXG4gICAgICBiaXRnb0tleWNoYWluLFxuICAgICAgcGFzc3BocmFzZVxuICAgICk7XG4gIH1cblxuICAvKiogQGluaGVyaXRkb2MgKi9cbiAgYXN5bmMgY3JlYXRlQml0Z29LZXljaGFpbih7XG4gICAgdXNlckdwZ0tleSxcbiAgICBiYWNrdXBHcGdLZXksXG4gICAgdXNlcktleVNoYXJlLFxuICAgIGJhY2t1cEtleVNoYXJlLFxuICAgIGVudGVycHJpc2UsXG4gICAgYml0Z29QdWJsaWNHcGdLZXksXG4gIH06IENyZWF0ZUVjZHNhQml0R29LZXljaGFpblBhcmFtcyk6IFByb21pc2U8S2V5Y2hhaW4+IHtcbiAgICBjb25zdCByZWNpcGllbnRJbmRleCA9IDM7XG4gICAgY29uc3QgdXNlclRvQml0Z29TaGFyZSA9IGF3YWl0IGVuY3J5cHROU2hhcmUodXNlcktleVNoYXJlLCByZWNpcGllbnRJbmRleCwgYml0Z29QdWJsaWNHcGdLZXkuYXJtb3IoKSwgdXNlckdwZ0tleSk7XG5cbiAgICBjb25zdCBiYWNrdXBUb0JpdGdvU2hhcmUgPSBhd2FpdCB0aGlzLmdldEJhY2t1cEVuY3J5cHRlZE5TaGFyZShcbiAgICAgIGJhY2t1cEtleVNoYXJlLFxuICAgICAgcmVjaXBpZW50SW5kZXgsXG4gICAgICBiaXRnb1B1YmxpY0dwZ0tleS5hcm1vcigpLFxuICAgICAgYmFja3VwR3BnS2V5IGFzIFNlcmlhbGl6ZWRLZXlQYWlyPHN0cmluZz5cbiAgICApO1xuXG4gICAgY29uc3QgY3JlYXRlQml0R29NUENQYXJhbXM6IEFkZEtleWNoYWluT3B0aW9ucyA9IHtcbiAgICAgIGtleVR5cGU6ICd0c3MnIGFzIEtleVR5cGUsXG4gICAgICBzb3VyY2U6ICdiaXRnbycsXG4gICAgICBrZXlTaGFyZXM6IFtcbiAgICAgICAge1xuICAgICAgICAgIGZyb206ICd1c2VyJyxcbiAgICAgICAgICB0bzogJ2JpdGdvJyxcbiAgICAgICAgICBwdWJsaWNTaGFyZTogdXNlclRvQml0Z29TaGFyZS5wdWJsaWNTaGFyZSxcbiAgICAgICAgICBwcml2YXRlU2hhcmU6IHVzZXJUb0JpdGdvU2hhcmUuZW5jcnlwdGVkUHJpdmF0ZVNoYXJlLFxuICAgICAgICAgIG46IHVzZXJUb0JpdGdvU2hhcmUubixcbiAgICAgICAgICB2c3NQcm9vZjogdXNlclRvQml0Z29TaGFyZS52c3NQcm9vZixcbiAgICAgICAgICBwcml2YXRlU2hhcmVQcm9vZjogdXNlclRvQml0Z29TaGFyZS5wcml2YXRlU2hhcmVQcm9vZixcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGZyb206ICdiYWNrdXAnLFxuICAgICAgICAgIHRvOiAnYml0Z28nLFxuICAgICAgICAgIHB1YmxpY1NoYXJlOiBiYWNrdXBUb0JpdGdvU2hhcmUucHVibGljU2hhcmUsXG4gICAgICAgICAgcHJpdmF0ZVNoYXJlOiBiYWNrdXBUb0JpdGdvU2hhcmUuZW5jcnlwdGVkUHJpdmF0ZVNoYXJlLFxuICAgICAgICAgIG46IGJhY2t1cFRvQml0Z29TaGFyZS5uLFxuICAgICAgICAgIHZzc1Byb29mOiBiYWNrdXBUb0JpdGdvU2hhcmUudnNzUHJvb2YsXG4gICAgICAgICAgcHJpdmF0ZVNoYXJlUHJvb2Y6IGJhY2t1cFRvQml0Z29TaGFyZS5wcml2YXRlU2hhcmVQcm9vZixcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgICB1c2VyR1BHUHVibGljS2V5OiB1c2VyR3BnS2V5LnB1YmxpY0tleSxcbiAgICAgIGJhY2t1cEdQR1B1YmxpY0tleTogKGJhY2t1cEdwZ0tleSBhcyBTZXJpYWxpemVkS2V5UGFpcjxzdHJpbmc+KS5wdWJsaWNLZXksXG4gICAgICBlbnRlcnByaXNlOiBlbnRlcnByaXNlLFxuICAgICAgYWxnb1VzZWQ6ICdlY2RzYScsXG4gICAgfTtcblxuICAgIHJldHVybiBhd2FpdCB0aGlzLmJhc2VDb2luLmtleWNoYWlucygpLmFkZChjcmVhdGVCaXRHb01QQ1BhcmFtcyk7XG4gIH1cblxuICAvKipcbiAgICogVGhpcyBidWlsZHMgdGhlIHJlbGV2YW50IGJhY2t1cCBlbmNyeXB0ZWROU2hhcmUgYmFzZWQgb24gd2hldGhlciB0aGVcbiAgICogYmFja3VwIGtleSBpcyB1c2VyIG9yIHRoaXJkIHBhcnR5IGdlbmVyYXRlZFxuICAgKiBAcGFyYW0gYmFja3VwU2hhcmUgY2FuIGVpdGhlciBoYXZlIGtleSBzaGFyZXMgZnJvbSB0aGUgdXNlciBvciB0aGlyZCBwYXJ0eVxuICAgKiBAcGFyYW0gcmVjaXBpZW50SW5kZXggaW5kZXggb2YgdGhlIHBhcnR5IHJlY2VpdmluZyB0aGUgYmFja3VwIHNoYXJlc1xuICAgKiBAcGFyYW0gcmVjaXBpZW50R3BnUHVibGljQXJtb3IgZ3BnIGFybW9yIG9mIHRoZSBwYXJ0eSByZWNlaXZpbmcgdGhlIGJhY2t1cCBzaGFyZXNcbiAgICogQHBhcmFtIGJhY2t1cEdwZ0tleSBiYWNrdXAgZ3BnIGtleVxuICAgKiBAcGFyYW0gaXNUaGlyZFBhcnR5QmFja3VwIHdoZXRoZXIgdGhlIGJhY2t1cCBpcyBnZW5lcmF0ZWQgYnkgdGhpcmQgcGFydHlcbiAgICovXG4gIGFzeW5jIGdldEJhY2t1cEVuY3J5cHRlZE5TaGFyZShcbiAgICBiYWNrdXBTaGFyZTogQmFja3VwS2V5U2hhcmUsXG4gICAgcmVjaXBpZW50SW5kZXg6IG51bWJlcixcbiAgICByZWNpcGllbnRHcGdQdWJsaWNBcm1vcjogc3RyaW5nLFxuICAgIGJhY2t1cEdwZ0tleTogU2VyaWFsaXplZEtleVBhaXI8c3RyaW5nPlxuICApOiBQcm9taXNlPEVuY3J5cHRlZE5TaGFyZT4ge1xuICAgIGFzc2VydChiYWNrdXBTaGFyZS51c2VySGVsZEtleVNoYXJlKTtcbiAgICBjb25zdCBiYWNrdXBUb1JlY2lwaWVudFNoYXJlID0gYXdhaXQgZW5jcnlwdE5TaGFyZShcbiAgICAgIGJhY2t1cFNoYXJlLnVzZXJIZWxkS2V5U2hhcmUsXG4gICAgICByZWNpcGllbnRJbmRleCxcbiAgICAgIHJlY2lwaWVudEdwZ1B1YmxpY0FybW9yLFxuICAgICAgYmFja3VwR3BnS2V5XG4gICAgKTtcbiAgICByZXR1cm4gYmFja3VwVG9SZWNpcGllbnRTaGFyZTtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdGRvYyAqL1xuICBhc3luYyBjcmVhdGVQYXJ0aWNpcGFudEtleWNoYWluKFxuICAgIHVzZXJHcGdLZXk6IG9wZW5wZ3AuU2VyaWFsaXplZEtleVBhaXI8c3RyaW5nPixcbiAgICB1c2VyTG9jYWxCYWNrdXBHcGdLZXk6IG9wZW5wZ3AuU2VyaWFsaXplZEtleVBhaXI8c3RyaW5nPixcbiAgICBiaXRnb1B1YmxpY0dwZ0tleTogS2V5LFxuICAgIHJlY2lwaWVudEluZGV4OiBudW1iZXIsXG4gICAgdXNlcktleVNoYXJlOiBLZXlTaGFyZSxcbiAgICBiYWNrdXBLZXlTaGFyZTogS2V5U2hhcmUsXG4gICAgYml0Z29LZXljaGFpbjogS2V5Y2hhaW4sXG4gICAgcGFzc3BocmFzZTogc3RyaW5nLFxuICAgIG9yaWdpbmFsUGFzc2NvZGVFbmNyeXB0aW9uQ29kZT86IHN0cmluZ1xuICApOiBQcm9taXNlPEtleWNoYWluPiB7XG4gICAgY29uc3QgYml0Z29LZXlTaGFyZXMgPSBiaXRnb0tleWNoYWluLmtleVNoYXJlcztcbiAgICBpZiAoIWJpdGdvS2V5U2hhcmVzKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ01pc3NpbmcgQml0R28ga2V5IHNoYXJlcycpO1xuICAgIH1cbiAgICBpZiAoIWJpdGdvS2V5Y2hhaW4uY29tbW9uS2V5Y2hhaW4pIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgTWlzc2luZyBjb21tb24ga2V5IGNoYWluOiAke2JpdGdvS2V5Y2hhaW4uY29tbW9uS2V5Y2hhaW59YCk7XG4gICAgfVxuXG4gICAgbGV0IHJlY2lwaWVudDogc3RyaW5nO1xuICAgIGxldCBrZXlTaGFyZTogS2V5U2hhcmU7XG4gICAgbGV0IG90aGVyU2hhcmU6IEtleVNoYXJlO1xuICAgIGxldCByZWNpcGllbnRHcGdLZXk6IG9wZW5wZ3AuU2VyaWFsaXplZEtleVBhaXI8c3RyaW5nPjtcbiAgICBsZXQgc2VuZGVyR3BnS2V5OiBvcGVucGdwLlNlcmlhbGl6ZWRLZXlQYWlyPHN0cmluZz47XG4gICAgaWYgKHJlY2lwaWVudEluZGV4ID09PSAxKSB7XG4gICAgICBrZXlTaGFyZSA9IHVzZXJLZXlTaGFyZTtcbiAgICAgIG90aGVyU2hhcmUgPSBiYWNrdXBLZXlTaGFyZTtcbiAgICAgIHJlY2lwaWVudCA9ICd1c2VyJztcbiAgICAgIHJlY2lwaWVudEdwZ0tleSA9IHVzZXJHcGdLZXk7XG4gICAgICBzZW5kZXJHcGdLZXkgPSB1c2VyTG9jYWxCYWNrdXBHcGdLZXk7XG4gICAgfSBlbHNlIGlmIChyZWNpcGllbnRJbmRleCA9PT0gMikge1xuICAgICAga2V5U2hhcmUgPSBiYWNrdXBLZXlTaGFyZTtcbiAgICAgIG90aGVyU2hhcmUgPSB1c2VyS2V5U2hhcmU7XG4gICAgICByZWNpcGllbnQgPSAnYmFja3VwJztcbiAgICAgIHJlY2lwaWVudEdwZ0tleSA9IHVzZXJMb2NhbEJhY2t1cEdwZ0tleTtcbiAgICAgIHNlbmRlckdwZ0tleSA9IHVzZXJHcGdLZXk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCB1c2VyIGluZGV4Jyk7XG4gICAgfVxuXG4gICAgY29uc3QgYml0R29Ub1JlY2lwaWVudFNoYXJlID0gYml0Z29LZXlTaGFyZXMuZmluZChcbiAgICAgIChrZXlTaGFyZSkgPT4ga2V5U2hhcmUuZnJvbSA9PT0gJ2JpdGdvJyAmJiBrZXlTaGFyZS50byA9PT0gcmVjaXBpZW50XG4gICAgKTtcbiAgICBpZiAoIWJpdEdvVG9SZWNpcGllbnRTaGFyZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBNaXNzaW5nIEJpdEdvIHRvICR7cmVjaXBpZW50fSBrZXkgc2hhcmVgKTtcbiAgICB9XG5cbiAgICBjb25zdCBkZWNyeXB0ZWRTaGFyZSA9IGF3YWl0IHRoaXMuZGVjcnlwdFByaXZhdGVTaGFyZShiaXRHb1RvUmVjaXBpZW50U2hhcmUucHJpdmF0ZVNoYXJlLCByZWNpcGllbnRHcGdLZXkpO1xuXG4gICAgYXdhaXQgdGhpcy52ZXJpZnlXYWxsZXRTaWduYXR1cmVzKFxuICAgICAgdXNlckdwZ0tleS5wdWJsaWNLZXksXG4gICAgICB1c2VyTG9jYWxCYWNrdXBHcGdLZXkucHVibGljS2V5LFxuICAgICAgYml0Z29LZXljaGFpbixcbiAgICAgIGRlY3J5cHRlZFNoYXJlLFxuICAgICAgcmVjaXBpZW50SW5kZXhcbiAgICApO1xuXG4gICAgY29uc3Qgc2VuZGVyVG9SZWNpcGllbnRTaGFyZSA9IGF3YWl0IGVuY3J5cHROU2hhcmUoXG4gICAgICBvdGhlclNoYXJlLFxuICAgICAgcmVjaXBpZW50SW5kZXgsXG4gICAgICByZWNpcGllbnRHcGdLZXkucHVibGljS2V5LFxuICAgICAgc2VuZGVyR3BnS2V5XG4gICAgKTtcbiAgICBjb25zdCBlbmNyeXB0ZWROU2hhcmVzOiBEZWNyeXB0YWJsZU5TaGFyZVtdID0gW1xuICAgICAge1xuICAgICAgICAvLyB1c2VyVG9CYWNrdXAgb3IgYmFja3VwVG9Vc2VyXG4gICAgICAgIG5TaGFyZTogc2VuZGVyVG9SZWNpcGllbnRTaGFyZSxcbiAgICAgICAgcmVjaXBpZW50UHJpdmF0ZUFybW9yOiByZWNpcGllbnRHcGdLZXkucHJpdmF0ZUtleSxcbiAgICAgICAgc2VuZGVyUHVibGljQXJtb3I6IHNlbmRlckdwZ0tleS5wdWJsaWNLZXksXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICAvLyBiaXRnb1RvUmVjaXBpZW50XG4gICAgICAgIG5TaGFyZToge1xuICAgICAgICAgIGk6IHJlY2lwaWVudEluZGV4LFxuICAgICAgICAgIGo6IDMsXG4gICAgICAgICAgcHVibGljU2hhcmU6IGJpdEdvVG9SZWNpcGllbnRTaGFyZS5wdWJsaWNTaGFyZSxcbiAgICAgICAgICBlbmNyeXB0ZWRQcml2YXRlU2hhcmU6IGJpdEdvVG9SZWNpcGllbnRTaGFyZS5wcml2YXRlU2hhcmUsXG4gICAgICAgICAgbjogYml0R29Ub1JlY2lwaWVudFNoYXJlLm4hLFxuICAgICAgICAgIHZzc1Byb29mOiBiaXRHb1RvUmVjaXBpZW50U2hhcmUudnNzUHJvb2YsXG4gICAgICAgICAgcHJpdmF0ZVNoYXJlUHJvb2Y6IGJpdEdvVG9SZWNpcGllbnRTaGFyZS5wcml2YXRlU2hhcmVQcm9vZixcbiAgICAgICAgfSxcbiAgICAgICAgcmVjaXBpZW50UHJpdmF0ZUFybW9yOiByZWNpcGllbnRHcGdLZXkucHJpdmF0ZUtleSxcbiAgICAgICAgc2VuZGVyUHVibGljQXJtb3I6IGJpdGdvUHVibGljR3BnS2V5LmFybW9yKCksXG4gICAgICAgIGlzYnM1OEVuY29kZWQ6IGZhbHNlLFxuICAgICAgfSxcbiAgICBdO1xuXG4gICAgY29uc3QgcmVjaXBpZW50Q29tYmluZWRLZXkgPSBhd2FpdCBFQ0RTQU1ldGhvZHMuY3JlYXRlQ29tYmluZWRLZXkoXG4gICAgICBrZXlTaGFyZSxcbiAgICAgIGVuY3J5cHRlZE5TaGFyZXMsXG4gICAgICBiaXRnb0tleWNoYWluLmNvbW1vbktleWNoYWluXG4gICAgKTtcblxuICAgIGNvbnN0IHBydiA9IEpTT04uc3RyaW5naWZ5KHJlY2lwaWVudENvbWJpbmVkS2V5LnNpZ25pbmdNYXRlcmlhbCk7XG4gICAgY29uc3QgcmVjaXBpZW50S2V5Y2hhaW5QYXJhbXMgPSB7XG4gICAgICBzb3VyY2U6IHJlY2lwaWVudCxcbiAgICAgIGtleVR5cGU6ICd0c3MnIGFzIEtleVR5cGUsXG4gICAgICBjb21tb25LZXljaGFpbjogYml0Z29LZXljaGFpbi5jb21tb25LZXljaGFpbixcbiAgICAgIHBydjogcHJ2LFxuICAgICAgZW5jcnlwdGVkUHJ2OiB0aGlzLmJpdGdvLmVuY3J5cHQoe1xuICAgICAgICBpbnB1dDogcHJ2LFxuICAgICAgICBwYXNzd29yZDogcGFzc3BocmFzZSxcbiAgICAgIH0pLFxuICAgICAgb3JpZ2luYWxQYXNzY29kZUVuY3J5cHRpb25Db2RlLFxuICAgIH07XG5cbiAgICBjb25zdCBrZXljaGFpbnMgPSB0aGlzLmJhc2VDb2luLmtleWNoYWlucygpO1xuICAgIHJldHVybiByZWNpcGllbnRJbmRleCA9PT0gMVxuICAgICAgPyBhd2FpdCBrZXljaGFpbnMuYWRkKHJlY2lwaWVudEtleWNoYWluUGFyYW1zKVxuICAgICAgOiBhd2FpdCBrZXljaGFpbnMuY3JlYXRlQmFja3VwKHJlY2lwaWVudEtleWNoYWluUGFyYW1zKTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgY3JlYXRlVHNzRWNkc2FTdGVwMVNpZ25pbmdNYXRlcmlhbChwYXJhbXM6IHtcbiAgICBjaGFsbGVuZ2VzOiB7XG4gICAgICBlbnRlcnByaXNlQ2hhbGxlbmdlOiBFY2RzYVR5cGVzLlNlcmlhbGl6ZWRFY2RzYUNoYWxsZW5nZXM7XG4gICAgICBiaXRnb0NoYWxsZW5nZTogVHhSZXF1ZXN0Q2hhbGxlbmdlUmVzcG9uc2U7XG4gICAgfTtcbiAgICBwcnY6IHN0cmluZztcbiAgICBkZXJpdmF0aW9uUGF0aDogc3RyaW5nO1xuICAgIHdhbGxldFBhc3NwaHJhc2U/OiBzdHJpbmc7XG4gIH0pOiBQcm9taXNlPFRzc0VjZHNhU3RlcDFSZXR1cm5NZXNzYWdlPiB7XG4gICAgY29uc3QgeyBjaGFsbGVuZ2VzLCBkZXJpdmF0aW9uUGF0aCwgcHJ2IH0gPSBwYXJhbXM7XG4gICAgY29uc3QgdXNlclNpZ25pbmdNYXRlcmlhbDogRUNEU0FNZXRob2RUeXBlcy5TaWduaW5nTWF0ZXJpYWwgPSBKU09OLnBhcnNlKHBydik7XG4gICAgaWYgKHVzZXJTaWduaW5nTWF0ZXJpYWwucFNoYXJlLmkgIT09IDEpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCB1c2VyIGtleScpO1xuICAgIH1cbiAgICBpZiAoIXVzZXJTaWduaW5nTWF0ZXJpYWwuYmFja3VwTlNoYXJlKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgdXNlciBrZXkgLSBtaXNzaW5nIGJhY2t1cE5TaGFyZScpO1xuICAgIH1cbiAgICBjb25zdCBNUEMgPSBuZXcgRWNkc2EoKTtcbiAgICBjb25zdCBzaWduaW5nS2V5ID0gTVBDLmtleURlcml2ZShcbiAgICAgIHVzZXJTaWduaW5nTWF0ZXJpYWwucFNoYXJlLFxuICAgICAgW3VzZXJTaWduaW5nTWF0ZXJpYWwuYml0Z29OU2hhcmUsIHVzZXJTaWduaW5nTWF0ZXJpYWwuYmFja3VwTlNoYXJlXSxcbiAgICAgIGRlcml2YXRpb25QYXRoXG4gICAgKTtcblxuICAgIGNvbnN0IGJpdGdvSW5kZXggPSBTaGFyZUtleVBvc2l0aW9uLkJJVEdPO1xuICAgIGNvbnN0IHVzZXJJbmRleCA9IHVzZXJTaWduaW5nTWF0ZXJpYWwucFNoYXJlLmk7XG5cbiAgICBjb25zdCB7IG50aWxkZTogbnRpbGRlYSwgaDE6IGgxYSwgaDI6IGgyYSwgcDogcGEgfSA9IGNoYWxsZW5nZXMuZW50ZXJwcmlzZUNoYWxsZW5nZTtcbiAgICBjb25zdCB7IG50aWxkZTogbnRpbGRlYiwgaDE6IGgxYiwgaDI6IGgyYiwgcDogcGIsIG46IG5iIH0gPSBjaGFsbGVuZ2VzLmJpdGdvQ2hhbGxlbmdlO1xuICAgIGNvbnN0IHVzZXJYU2hhcmUgPSBNUEMuYXBwZW5kQ2hhbGxlbmdlKHNpZ25pbmdLZXkueFNoYXJlLCB7IG50aWxkZTogbnRpbGRlYSwgaDE6IGgxYSwgaDI6IGgyYSB9LCB7IHA6IHBhIH0pO1xuICAgIGNvbnN0IGJpdGdvWVNoYXJlID0gTVBDLmFwcGVuZENoYWxsZW5nZShcbiAgICAgIHtcbiAgICAgICAgaTogdXNlckluZGV4LFxuICAgICAgICBqOiBiaXRnb0luZGV4LFxuICAgICAgICBuOiBuYixcbiAgICAgIH0sXG4gICAgICB7IG50aWxkZTogbnRpbGRlYiwgaDE6IGgxYiwgaDI6IGgyYiB9LFxuICAgICAgeyBwOiBwYiB9XG4gICAgKTtcblxuICAgIGNvbnN0IHVzZXJTaWduU2hhcmUgPSBhd2FpdCBFQ0RTQU1ldGhvZHMuY3JlYXRlVXNlclNpZ25TaGFyZSh1c2VyWFNoYXJlLCBiaXRnb1lTaGFyZSk7XG4gICAgY29uc3QgdSA9IHNpZ25pbmdLZXkublNoYXJlc1tiaXRnb0luZGV4XS51O1xuXG4gICAgbGV0IGNoYWluY29kZSA9IHVzZXJTaWduaW5nTWF0ZXJpYWwuYml0Z29OU2hhcmUuY2hhaW5jb2RlO1xuICAgIHdoaWxlIChjaGFpbmNvZGUubGVuZ3RoIDwgNjQpIHtcbiAgICAgIGNoYWluY29kZSA9ICcwJyArIGNoYWluY29kZTtcbiAgICB9XG4gICAgY29uc3Qgc2lnbmVyU2hhcmUgPSBiaXAzMi5mcm9tUHJpdmF0ZUtleShCdWZmZXIuZnJvbSh1LCAnaGV4JyksIEJ1ZmZlci5mcm9tKGNoYWluY29kZSwgJ2hleCcpKS50b0Jhc2U1OCgpO1xuICAgIGNvbnN0IGJpdGdvR3BnS2V5ID0gKGF3YWl0IGdldEJpdGdvR3BnUHViS2V5KHRoaXMuYml0Z28pKS5tcGNWMTtcbiAgICBjb25zdCBlbmNyeXB0ZWRTaWduZXJTaGFyZSA9IChhd2FpdCBvcGVucGdwLmVuY3J5cHQoe1xuICAgICAgbWVzc2FnZTogYXdhaXQgb3BlbnBncC5jcmVhdGVNZXNzYWdlKHtcbiAgICAgICAgdGV4dDogc2lnbmVyU2hhcmUsXG4gICAgICB9KSxcbiAgICAgIGNvbmZpZzoge1xuICAgICAgICByZWplY3RDdXJ2ZXM6IG5ldyBTZXQoKSxcbiAgICAgIH0sXG4gICAgICBlbmNyeXB0aW9uS2V5czogW2JpdGdvR3BnS2V5XSxcbiAgICB9KSkgYXMgc3RyaW5nO1xuICAgIGNvbnN0IHVzZXJHcGdLZXkgPSBhd2FpdCBnZW5lcmF0ZUdQR0tleVBhaXIoJ3NlY3AyNTZrMScpO1xuICAgIGNvbnN0IHByaXZhdGVTaGFyZVByb29mID0gYXdhaXQgY3JlYXRlU2hhcmVQcm9vZih1c2VyR3BnS2V5LnByaXZhdGVLZXksIHNpZ25pbmdLZXkublNoYXJlc1tiaXRnb0luZGV4XS51LCAnZWNkc2EnKTtcbiAgICBjb25zdCB2c3NQcm9vZiA9IHNpZ25pbmdLZXkublNoYXJlc1tiaXRnb0luZGV4XS52O1xuICAgIGNvbnN0IHVzZXJQdWJsaWNHcGdLZXkgPSB1c2VyR3BnS2V5LnB1YmxpY0tleTtcbiAgICBjb25zdCBwdWJsaWNTaGFyZSA9IHNpZ25pbmdLZXkublNoYXJlc1tiaXRnb0luZGV4XS55ICsgc2lnbmluZ0tleS5uU2hhcmVzW2JpdGdvSW5kZXhdLmNoYWluY29kZTtcbiAgICByZXR1cm4ge1xuICAgICAgcHJpdmF0ZVNoYXJlUHJvb2Y6IHByaXZhdGVTaGFyZVByb29mLFxuICAgICAgdnNzUHJvb2Y6IHZzc1Byb29mLFxuICAgICAgcHVibGljU2hhcmU6IHB1YmxpY1NoYXJlLFxuICAgICAgZW5jcnlwdGVkU2lnbmVyT2Zmc2V0U2hhcmU6IGVuY3J5cHRlZFNpZ25lclNoYXJlLFxuICAgICAgdXNlclB1YmxpY0dwZ0tleTogdXNlclB1YmxpY0dwZ0tleSxcbiAgICAgIGtTaGFyZTogdXNlclNpZ25TaGFyZS5rU2hhcmUsXG4gICAgICB3U2hhcmU6IHBhcmFtcy53YWxsZXRQYXNzcGhyYXNlXG4gICAgICAgID8gdGhpcy5iaXRnby5lbmNyeXB0KHsgaW5wdXQ6IEpTT04uc3RyaW5naWZ5KHVzZXJTaWduU2hhcmUud1NoYXJlKSwgcGFzc3dvcmQ6IHBhcmFtcy53YWxsZXRQYXNzcGhyYXNlIH0pXG4gICAgICAgIDogdXNlclNpZ25TaGFyZS53U2hhcmUsXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgY3JlYXRlVHNzRWNkc2FTdGVwMlNpZ25pbmdNYXRlcmlhbChwYXJhbXM6IHtcbiAgICBiaXRnb0NoYWxsZW5nZTogVHhSZXF1ZXN0Q2hhbGxlbmdlUmVzcG9uc2U7XG4gICAgd1NoYXJlOiBXU2hhcmU7XG4gICAgYVNoYXJlRnJvbUJpdGdvOiBPbWl0PEFTaGFyZSwgJ2gxJyB8ICdoMicgfCAnbnRpbGRlJz47XG4gICAgd2FsbGV0UGFzc3BocmFzZT86IHN0cmluZztcbiAgfSk6IFByb21pc2U8VHNzRWNkc2FTdGVwMlJldHVybk1lc3NhZ2U+IHtcbiAgICAvLyBBcHBlbmQgdGhlIEJpdEdvIGNoYWxsZW5nZSB0byB0aGUgQXNoYXJlIHRvIGJlIHVzZWQgaW4gc3Vic2VxdWVudCBwcm9vZnNcbiAgICBjb25zdCBiaXRnb1RvVXNlckFTaGFyZVdpdGhOdGlsZGU6IEFTaGFyZSA9IHtcbiAgICAgIC4uLnBhcmFtcy5hU2hhcmVGcm9tQml0Z28sXG4gICAgICAuLi5wYXJhbXMuYml0Z29DaGFsbGVuZ2UsXG4gICAgfTtcbiAgICBjb25zdCB1c2VyR2FtbWFBbmRNdVNoYXJlcyA9IGF3YWl0IEVDRFNBTWV0aG9kcy5jcmVhdGVVc2VyR2FtbWFBbmRNdVNoYXJlKFxuICAgICAgcGFyYW1zLndTaGFyZSxcbiAgICAgIGJpdGdvVG9Vc2VyQVNoYXJlV2l0aE50aWxkZVxuICAgICk7XG4gICAgY29uc3QgdXNlck9taWNyb25BbmREZWx0YVNoYXJlID0gYXdhaXQgRUNEU0FNZXRob2RzLmNyZWF0ZVVzZXJPbWljcm9uQW5kRGVsdGFTaGFyZShcbiAgICAgIHVzZXJHYW1tYUFuZE11U2hhcmVzLmdTaGFyZSBhcyBFQ0RTQS5HU2hhcmVcbiAgICApO1xuICAgIHJldHVybiB7XG4gICAgICBtdURTaGFyZToge1xuICAgICAgICBtdVNoYXJlOiB1c2VyR2FtbWFBbmRNdVNoYXJlcy5tdVNoYXJlLFxuICAgICAgICBkU2hhcmU6IHVzZXJPbWljcm9uQW5kRGVsdGFTaGFyZS5kU2hhcmUsXG4gICAgICAgIGk6IHVzZXJHYW1tYUFuZE11U2hhcmVzLm11U2hhcmUuaSxcbiAgICAgIH0sXG4gICAgICBvU2hhcmU6IHBhcmFtcy53YWxsZXRQYXNzcGhyYXNlXG4gICAgICAgID8gdGhpcy5iaXRnby5lbmNyeXB0KHtcbiAgICAgICAgICAgIGlucHV0OiBKU09OLnN0cmluZ2lmeSh1c2VyT21pY3JvbkFuZERlbHRhU2hhcmUub1NoYXJlKSxcbiAgICAgICAgICAgIHBhc3N3b3JkOiBwYXJhbXMud2FsbGV0UGFzc3BocmFzZSxcbiAgICAgICAgICB9KVxuICAgICAgICA6IHVzZXJPbWljcm9uQW5kRGVsdGFTaGFyZS5vU2hhcmUsXG4gICAgfTtcbiAgfVxuXG4gIGdldE9mZmxpbmVTaWduZXJQYWlsbGllck1vZHVsdXMocGFyYW1zOiB7IHBydjogc3RyaW5nIH0pOiB7IHVzZXJQYWlsbGllck1vZHVsdXM6IHN0cmluZyB9IHtcbiAgICBhc3NlcnQocGFyYW1zLnBydiwgJ1BhcmFtcyB0byBnZXQgcGFpbGxpZXIgbW9kdWx1cyBhcmUgbWlzc2luZyBwcnYuJyk7XG4gICAgY29uc3QgdXNlclNpZ25pbmdNYXRlcmlhbDogRUNEU0FNZXRob2RUeXBlcy5TaWduaW5nTWF0ZXJpYWwgPSBKU09OLnBhcnNlKHBhcmFtcy5wcnYpO1xuICAgIHJldHVybiB7IHVzZXJQYWlsbGllck1vZHVsdXM6IHVzZXJTaWduaW5nTWF0ZXJpYWwucFNoYXJlLm4gfTtcbiAgfVxuXG4gIGFzeW5jIGNyZWF0ZU9mZmxpbmVLU2hhcmUocGFyYW1zOiB7XG4gICAgdHNzUGFyYW1zOiBUU1NQYXJhbXMgfCBUU1NQYXJhbXNGb3JNZXNzYWdlO1xuICAgIGNoYWxsZW5nZXM6IHtcbiAgICAgIGVudGVycHJpc2VDaGFsbGVuZ2U6IEVjZHNhVHlwZXMuU2VyaWFsaXplZEVjZHNhQ2hhbGxlbmdlcztcbiAgICAgIGJpdGdvQ2hhbGxlbmdlOiBUeFJlcXVlc3RDaGFsbGVuZ2VSZXNwb25zZTtcbiAgICB9O1xuICAgIHJlcXVlc3RUeXBlOiBSZXF1ZXN0VHlwZTtcbiAgICBwcnY6IHN0cmluZztcbiAgICB3YWxsZXRQYXNzcGhyYXNlOiBzdHJpbmc7XG4gIH0pOiBQcm9taXNlPFRzc0VjZHNhU3RlcDFSZXR1cm5NZXNzYWdlPiB7XG4gICAgY29uc3QgeyB0c3NQYXJhbXMsIHBydiwgcmVxdWVzdFR5cGUsIGNoYWxsZW5nZXMgfSA9IHBhcmFtcztcbiAgICBhc3NlcnQodHlwZW9mIHRzc1BhcmFtcy50eFJlcXVlc3QgIT09ICdzdHJpbmcnLCAnSW52YWxpZCB0eFJlcXVlc3QgdHlwZScpO1xuICAgIGNvbnN0IHR4UmVxdWVzdDogVHhSZXF1ZXN0ID0gdHNzUGFyYW1zLnR4UmVxdWVzdDtcbiAgICBsZXQgZGVyaXZhdGlvblBhdGg7XG5cbiAgICBpZiAocmVxdWVzdFR5cGUgPT09IFJlcXVlc3RUeXBlLnR4KSB7XG4gICAgICBhc3NlcnQoXG4gICAgICAgIHR4UmVxdWVzdC50cmFuc2FjdGlvbnMgfHwgKHR4UmVxdWVzdCBhcyBUeFJlcXVlc3QpLnVuc2lnbmVkVHhzLFxuICAgICAgICAnVW5hYmxlIHRvIGZpbmQgdHJhbnNhY3Rpb25zIGluIHR4UmVxdWVzdCdcbiAgICAgICk7XG4gICAgICBjb25zdCB1bnNpZ25lZFR4ID1cbiAgICAgICAgdHhSZXF1ZXN0LmFwaVZlcnNpb24gPT09ICdmdWxsJyA/IHR4UmVxdWVzdC50cmFuc2FjdGlvbnMhWzBdLnVuc2lnbmVkVHggOiB0eFJlcXVlc3QudW5zaWduZWRUeHNbMF07XG4gICAgICBkZXJpdmF0aW9uUGF0aCA9IHVuc2lnbmVkVHguZGVyaXZhdGlvblBhdGg7XG4gICAgfSBlbHNlIGlmIChyZXF1ZXN0VHlwZSA9PT0gUmVxdWVzdFR5cGUubWVzc2FnZSkge1xuICAgICAgLy8gVE9ETyBCRy02NzI5OSBNZXNzYWdlIHNpZ25pbmcgd2l0aCBkZXJpdmF0aW9uIHBhdGhcbiAgICAgIGRlcml2YXRpb25QYXRoID0gJyc7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmNyZWF0ZVRzc0VjZHNhU3RlcDFTaWduaW5nTWF0ZXJpYWwoe1xuICAgICAgcHJ2OiBwcnYsXG4gICAgICBjaGFsbGVuZ2VzOiBjaGFsbGVuZ2VzLFxuICAgICAgZGVyaXZhdGlvblBhdGg6IGRlcml2YXRpb25QYXRoLFxuICAgICAgd2FsbGV0UGFzc3BocmFzZTogcGFyYW1zLndhbGxldFBhc3NwaHJhc2UsXG4gICAgfSk7XG4gIH1cblxuICBhc3luYyBjcmVhdGVPZmZsaW5lTXVEZWx0YVNoYXJlKHBhcmFtczoge1xuICAgIGFTaGFyZUZyb21CaXRnbzogT21pdDxBU2hhcmUsICdudGlsZGUnIHwgJ2gxJyB8ICdoMic+O1xuICAgIGJpdGdvQ2hhbGxlbmdlOiBUeFJlcXVlc3RDaGFsbGVuZ2VSZXNwb25zZTtcbiAgICBlbmNyeXB0ZWRXU2hhcmU6IHN0cmluZztcbiAgICB3YWxsZXRQYXNzcGhyYXNlOiBzdHJpbmc7XG4gIH0pOiBQcm9taXNlPFRzc0VjZHNhU3RlcDJSZXR1cm5NZXNzYWdlPiB7XG4gICAgY29uc3QgZGVjcnlwdGVkV1NoYXJlID0gdGhpcy5iaXRnby5kZWNyeXB0KHsgaW5wdXQ6IHBhcmFtcy5lbmNyeXB0ZWRXU2hhcmUsIHBhc3N3b3JkOiBwYXJhbXMud2FsbGV0UGFzc3BocmFzZSB9KTtcbiAgICByZXR1cm4gYXdhaXQgdGhpcy5jcmVhdGVUc3NFY2RzYVN0ZXAyU2lnbmluZ01hdGVyaWFsKHtcbiAgICAgIGFTaGFyZUZyb21CaXRnbzogcGFyYW1zLmFTaGFyZUZyb21CaXRnbyxcbiAgICAgIGJpdGdvQ2hhbGxlbmdlOiBwYXJhbXMuYml0Z29DaGFsbGVuZ2UsXG4gICAgICB3U2hhcmU6IEpTT04ucGFyc2UoZGVjcnlwdGVkV1NoYXJlKSxcbiAgICAgIHdhbGxldFBhc3NwaHJhc2U6IHBhcmFtcy53YWxsZXRQYXNzcGhyYXNlLFxuICAgIH0pO1xuICB9XG5cbiAgYXN5bmMgY3JlYXRlT2ZmbGluZVNTaGFyZShwYXJhbXM6IHtcbiAgICB0c3NQYXJhbXM6IFRTU1BhcmFtcyB8IFRTU1BhcmFtc0Zvck1lc3NhZ2U7XG4gICAgZFNoYXJlRnJvbUJpdGdvOiBEU2hhcmU7XG4gICAgcmVxdWVzdFR5cGU6IFJlcXVlc3RUeXBlO1xuICAgIGVuY3J5cHRlZE9TaGFyZTogc3RyaW5nO1xuICAgIHdhbGxldFBhc3NwaHJhc2U6IHN0cmluZztcbiAgfSk6IFByb21pc2U8U1NoYXJlPiB7XG4gICAgY29uc3QgeyB0c3NQYXJhbXMsIHJlcXVlc3RUeXBlLCBkU2hhcmVGcm9tQml0Z28sIGVuY3J5cHRlZE9TaGFyZSwgd2FsbGV0UGFzc3BocmFzZSB9ID0gcGFyYW1zO1xuICAgIGFzc2VydCh0eXBlb2YgdHNzUGFyYW1zLnR4UmVxdWVzdCAhPT0gJ3N0cmluZycsICdJbnZhbGlkIHR4UmVxdWVzdCB0eXBlJyk7XG4gICAgY29uc3QgdHhSZXF1ZXN0OiBUeFJlcXVlc3QgPSB0c3NQYXJhbXMudHhSZXF1ZXN0O1xuICAgIGxldCBzaWduYWJsZVBheWxvYWQ7XG4gICAgaWYgKHJlcXVlc3RUeXBlID09PSBSZXF1ZXN0VHlwZS50eCkge1xuICAgICAgYXNzZXJ0KHR4UmVxdWVzdC50cmFuc2FjdGlvbnMgfHwgdHhSZXF1ZXN0LnVuc2lnbmVkVHhzLCAnVW5hYmxlIHRvIGZpbmQgdHJhbnNhY3Rpb25zIGluIHR4UmVxdWVzdCcpO1xuICAgICAgY29uc3QgdW5zaWduZWRUeCA9XG4gICAgICAgIHR4UmVxdWVzdC5hcGlWZXJzaW9uID09PSAnZnVsbCcgPyB0eFJlcXVlc3QudHJhbnNhY3Rpb25zIVswXS51bnNpZ25lZFR4IDogdHhSZXF1ZXN0LnVuc2lnbmVkVHhzWzBdO1xuICAgICAgc2lnbmFibGVQYXlsb2FkID0gQnVmZmVyLmZyb20odW5zaWduZWRUeC5zaWduYWJsZUhleCwgJ2hleCcpO1xuICAgIH0gZWxzZSBpZiAocmVxdWVzdFR5cGUgPT09IFJlcXVlc3RUeXBlLm1lc3NhZ2UpIHtcbiAgICAgIHNpZ25hYmxlUGF5bG9hZCA9IChwYXJhbXMudHNzUGFyYW1zIGFzIFRTU1BhcmFtc0Zvck1lc3NhZ2UpLmJ1ZmZlclRvU2lnbjtcbiAgICB9XG4gICAgbGV0IGhhc2g6IEhhc2ggfCB1bmRlZmluZWQ7XG4gICAgdHJ5IHtcbiAgICAgIGhhc2ggPSB0aGlzLmJhc2VDb2luLmdldEhhc2hGdW5jdGlvbigpO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgaGFzaCA9IHVuZGVmaW5lZDtcbiAgICB9XG4gICAgY29uc3QgZGVjcnlwdGVkT1NoYXJlID0gdGhpcy5iaXRnby5kZWNyeXB0KHsgaW5wdXQ6IGVuY3J5cHRlZE9TaGFyZSwgcGFzc3dvcmQ6IHdhbGxldFBhc3NwaHJhc2UgfSk7XG4gICAgY29uc3QgeyBpLCBSLCBzLCB5IH0gPSBhd2FpdCBFQ0RTQU1ldGhvZHMuY3JlYXRlVXNlclNpZ25hdHVyZVNoYXJlKFxuICAgICAgSlNPTi5wYXJzZShkZWNyeXB0ZWRPU2hhcmUpLFxuICAgICAgZFNoYXJlRnJvbUJpdGdvLFxuICAgICAgc2lnbmFibGVQYXlsb2FkLFxuICAgICAgaGFzaFxuICAgICk7XG4gICAgLy8gcmV0dXJuIG9ubHkgcmVxdWlyZWQgU1NoYXJlIHdpdGhvdXQgYmlnaW50cyBmcm9tIFZBU2hhcmVcbiAgICByZXR1cm4ge1xuICAgICAgaSxcbiAgICAgIFIsXG4gICAgICBzLFxuICAgICAgeSxcbiAgICB9O1xuICB9XG4gIGFzeW5jIHNpZ25FY2RzYVRzc1VzaW5nRXh0ZXJuYWxTaWduZXIoXG4gICAgcGFyYW1zOiBUU1NQYXJhbXMgfCBUU1NQYXJhbXNGb3JNZXNzYWdlLFxuICAgIHJlcXVlc3RUeXBlOiBSZXF1ZXN0VHlwZSxcbiAgICBleHRlcm5hbFNpZ25lclBhaWxsaWVyTW9kdWx1c0dldHRlcjogQ3VzdG9tUGFpbGxpZXJNb2R1bHVzR2V0dGVyRnVuY3Rpb24sXG4gICAgZXh0ZXJuYWxTaWduZXJLU2hhcmVHZW5lcmF0b3I6IEN1c3RvbUtTaGFyZUdlbmVyYXRpbmdGdW5jdGlvbixcbiAgICBleHRlcm5hbFNpZ25lck11RGVsdGFTaGFyZUdlbmVyYXRvcjogQ3VzdG9tTXVEZWx0YVNoYXJlR2VuZXJhdGluZ0Z1bmN0aW9uLFxuICAgIGV4dGVybmFsU2lnbmVyU1NoYXJlR2VuZXJhdG9yOiBDdXN0b21TU2hhcmVHZW5lcmF0aW5nRnVuY3Rpb25cbiAgKTogUHJvbWlzZTxUeFJlcXVlc3Q+IHtcbiAgICBjb25zdCB7IHR4UmVxdWVzdCB9ID0gcGFyYW1zO1xuICAgIGNvbnN0IHBlbmRpbmdFY2RzYVRzc0luaXRpYWxpemF0aW9uID0gdGhpcy53YWxsZXQuY29pblNwZWNpZmljKCk/LnBlbmRpbmdFY2RzYVRzc0luaXRpYWxpemF0aW9uO1xuICAgIGlmIChwZW5kaW5nRWNkc2FUc3NJbml0aWFsaXphdGlvbikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAnV2FsbGV0IGlzIG5vdCByZWFkeSBmb3IgVFNTIEVDRFNBIHNpZ25pbmcuIFBsZWFzZSBjb250YWN0IHlvdXIgZW50ZXJwcmlzZSBhZG1pbiB0byBmaW5pc2ggdGhlIGVudGVycHJpc2UgVFNTIGluaXRpYWxpemF0aW9uLidcbiAgICAgICk7XG4gICAgfVxuICAgIGNvbnN0IHR4UmVxdWVzdE9iajogVHhSZXF1ZXN0ID0gYXdhaXQgZ2V0VHhSZXF1ZXN0KHRoaXMuYml0Z28sIHRoaXMud2FsbGV0LmlkKCksIHR4UmVxdWVzdCBhcyBzdHJpbmcsIHBhcmFtcy5yZXFJZCk7XG4gICAgY29uc3QgeyB1c2VyUGFpbGxpZXJNb2R1bHVzIH0gPSBhd2FpdCBleHRlcm5hbFNpZ25lclBhaWxsaWVyTW9kdWx1c0dldHRlcih7IHR4UmVxdWVzdDogdHhSZXF1ZXN0T2JqIH0pO1xuICAgIGNvbnN0IHsgZW50ZXJwcmlzZUNoYWxsZW5nZSwgYml0Z29DaGFsbGVuZ2UgfSA9IGF3YWl0IHRoaXMuZ2V0RWNkc2FTaWduaW5nQ2hhbGxlbmdlcyhcbiAgICAgIHR4UmVxdWVzdCBhcyBzdHJpbmcsXG4gICAgICByZXF1ZXN0VHlwZSxcbiAgICAgIHVzZXJQYWlsbGllck1vZHVsdXMsXG4gICAgICAwLFxuICAgICAgcGFyYW1zLnJlcUlkXG4gICAgKTtcbiAgICBjb25zdCBzdGVwMVNpZ25pbmdNYXRlcmlhbCA9IGF3YWl0IGV4dGVybmFsU2lnbmVyS1NoYXJlR2VuZXJhdG9yKHtcbiAgICAgIHRzc1BhcmFtczoge1xuICAgICAgICAuLi5wYXJhbXMsXG4gICAgICAgIHR4UmVxdWVzdDogdHhSZXF1ZXN0T2JqLFxuICAgICAgfSxcbiAgICAgIGNoYWxsZW5nZXM6IHsgZW50ZXJwcmlzZUNoYWxsZW5nZSwgYml0Z29DaGFsbGVuZ2UgfSxcbiAgICAgIHJlcXVlc3RUeXBlOiByZXF1ZXN0VHlwZSxcbiAgICB9KTtcbiAgICAvLyBzaWduaW5nIHN0YWdlIG9uZSB3aXRoIEsgc2hhcmUgc2VuZCB0byBiaXRnbyBhbmQgcmVjZWl2ZXMgQSBzaGFyZVxuICAgIGNvbnN0IGJpdGdvVG9Vc2VyQVNoYXJlID0gKGF3YWl0IEVDRFNBTWV0aG9kcy5zZW5kU2hhcmVUb0JpdGdvKFxuICAgICAgdGhpcy5iaXRnbyxcbiAgICAgIHRoaXMud2FsbGV0LmlkKCksXG4gICAgICB0eFJlcXVlc3RPYmoudHhSZXF1ZXN0SWQsXG4gICAgICByZXF1ZXN0VHlwZSxcbiAgICAgIFNlbmRTaGFyZVR5cGUuS1NoYXJlLFxuICAgICAgc3RlcDFTaWduaW5nTWF0ZXJpYWwua1NoYXJlLFxuICAgICAgc3RlcDFTaWduaW5nTWF0ZXJpYWwuZW5jcnlwdGVkU2lnbmVyT2Zmc2V0U2hhcmUsXG4gICAgICBzdGVwMVNpZ25pbmdNYXRlcmlhbC52c3NQcm9vZixcbiAgICAgIHN0ZXAxU2lnbmluZ01hdGVyaWFsLnByaXZhdGVTaGFyZVByb29mLFxuICAgICAgc3RlcDFTaWduaW5nTWF0ZXJpYWwucHVibGljU2hhcmUsXG4gICAgICBzdGVwMVNpZ25pbmdNYXRlcmlhbC51c2VyUHVibGljR3BnS2V5LFxuICAgICAgcGFyYW1zLnJlcUlkXG4gICAgKSkgYXMgT21pdDxBU2hhcmUsICdudGlsZGUnIHwgJ2gxJyB8ICdoMic+OyAvLyBXUC9IU00gZG9lcyBub3QgcmV0dXJuIHRoZSBpbml0aWFsIGNoYWxsZW5nZVxuICAgIGNvbnN0IHN0ZXAyUmV0dXJuID0gYXdhaXQgZXh0ZXJuYWxTaWduZXJNdURlbHRhU2hhcmVHZW5lcmF0b3Ioe1xuICAgICAgdHhSZXF1ZXN0OiB0eFJlcXVlc3RPYmosXG4gICAgICBhU2hhcmVGcm9tQml0Z286IGJpdGdvVG9Vc2VyQVNoYXJlLFxuICAgICAgYml0Z29DaGFsbGVuZ2U6IGJpdGdvQ2hhbGxlbmdlLFxuICAgICAgZW5jcnlwdGVkV1NoYXJlOiBzdGVwMVNpZ25pbmdNYXRlcmlhbC53U2hhcmUgYXMgc3RyaW5nLFxuICAgIH0pO1xuICAgIC8vIHNpZ25pbmcgc3RhZ2UgdHdvIHdpdGggbXVTaGFyZSBhbmQgZFNoYXJlIHNlbmQgdG8gYml0Z28gYW5kIHJlY2VpdmVzIEQgc2hhcmVcbiAgICBjb25zdCBiaXRnb1RvVXNlckRTaGFyZSA9IChhd2FpdCBFQ0RTQU1ldGhvZHMuc2VuZFNoYXJlVG9CaXRnbyhcbiAgICAgIHRoaXMuYml0Z28sXG4gICAgICB0aGlzLndhbGxldC5pZCgpLFxuICAgICAgdHhSZXF1ZXN0T2JqLnR4UmVxdWVzdElkLFxuICAgICAgcmVxdWVzdFR5cGUsXG4gICAgICBTZW5kU2hhcmVUeXBlLk1VU2hhcmUsXG4gICAgICBzdGVwMlJldHVybi5tdURTaGFyZSxcbiAgICAgIHVuZGVmaW5lZCxcbiAgICAgIHVuZGVmaW5lZCxcbiAgICAgIHVuZGVmaW5lZCxcbiAgICAgIHVuZGVmaW5lZCxcbiAgICAgIHVuZGVmaW5lZCxcbiAgICAgIHBhcmFtcy5yZXFJZFxuICAgICkpIGFzIERTaGFyZTtcbiAgICBjb25zdCB1c2VyU1NoYXJlID0gYXdhaXQgZXh0ZXJuYWxTaWduZXJTU2hhcmVHZW5lcmF0b3Ioe1xuICAgICAgdHNzUGFyYW1zOiB7XG4gICAgICAgIC4uLnBhcmFtcyxcbiAgICAgICAgdHhSZXF1ZXN0OiB0eFJlcXVlc3RPYmosXG4gICAgICB9LFxuICAgICAgZFNoYXJlRnJvbUJpdGdvOiBiaXRnb1RvVXNlckRTaGFyZSxcbiAgICAgIHJlcXVlc3RUeXBlOiByZXF1ZXN0VHlwZSxcbiAgICAgIGVuY3J5cHRlZE9TaGFyZTogc3RlcDJSZXR1cm4ub1NoYXJlIGFzIHN0cmluZyxcbiAgICB9KTtcbiAgICAvLyBzaWduaW5nIHN0YWdlIHRocmVlIHdpdGggU1NoYXJlIHNlbmQgdG8gYml0Z28gYW5kIHJlY2VpdmVzIFNTaGFyZVxuICAgIGF3YWl0IEVDRFNBTWV0aG9kcy5zZW5kU2hhcmVUb0JpdGdvKFxuICAgICAgdGhpcy5iaXRnbyxcbiAgICAgIHRoaXMud2FsbGV0LmlkKCksXG4gICAgICB0eFJlcXVlc3RPYmoudHhSZXF1ZXN0SWQsXG4gICAgICByZXF1ZXN0VHlwZSxcbiAgICAgIFNlbmRTaGFyZVR5cGUuU1NoYXJlLFxuICAgICAgdXNlclNTaGFyZSxcbiAgICAgIHVuZGVmaW5lZCxcbiAgICAgIHVuZGVmaW5lZCxcbiAgICAgIHVuZGVmaW5lZCxcbiAgICAgIHVuZGVmaW5lZCxcbiAgICAgIHVuZGVmaW5lZCxcbiAgICAgIHBhcmFtcy5yZXFJZFxuICAgICk7XG4gICAgcmV0dXJuIGF3YWl0IGdldFR4UmVxdWVzdCh0aGlzLmJpdGdvLCB0aGlzLndhbGxldC5pZCgpLCB0eFJlcXVlc3RPYmoudHhSZXF1ZXN0SWQsIHBhcmFtcy5yZXFJZCk7XG4gIH1cblxuICAvKipcbiAgICogR2V0cyBzaWduaW5nIGtleSwgdHhSZXF1ZXN0UmVzb2x2ZWQgYW5kIHR4UmVxdWVzdElkXG4gICAqIEBwYXJhbSB7c3RyaW5nIHwgVHhSZXF1ZXN0fSBwYXJhbXMudHhSZXF1ZXN0IC0gdHJhbnNhY3Rpb24gcmVxdWVzdCBvYmplY3Qgb3IgaWRcbiAgICogQHBhcmFtIHtzdHJpbmd9IHBhcmFtcy5wcnYgLSBkZWNyeXB0ZWQgcHJpdmF0ZSBrZXlcbiAgICogQHBhcmFtIHsgc3RyaW5nfSBwYXJhbXMucmVxSWQgLSByZXF1ZXN0IGlkXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPFR4UmVxdWVzdD59XG4gICAqL1xuICBwcml2YXRlIGFzeW5jIHNpZ25SZXF1ZXN0QmFzZShcbiAgICBwYXJhbXM6IFRTU1BhcmFtc1dpdGhQcnYgfCBUU1NQYXJhbXNGb3JNZXNzYWdlV2l0aFBydixcbiAgICByZXF1ZXN0VHlwZTogUmVxdWVzdFR5cGVcbiAgKTogUHJvbWlzZTxUeFJlcXVlc3Q+IHtcbiAgICBjb25zdCBwZW5kaW5nRWNkc2FUc3NJbml0aWFsaXphdGlvbiA9IHRoaXMud2FsbGV0LmNvaW5TcGVjaWZpYygpPy5wZW5kaW5nRWNkc2FUc3NJbml0aWFsaXphdGlvbjtcbiAgICBpZiAocGVuZGluZ0VjZHNhVHNzSW5pdGlhbGl6YXRpb24pIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgJ1dhbGxldCBpcyBub3QgcmVhZHkgZm9yIFRTUyBFQ0RTQSBzaWduaW5nLiBQbGVhc2UgY29udGFjdCB5b3VyIGVudGVycHJpc2UgYWRtaW4gdG8gZmluaXNoIHRoZSBlbnRlcnByaXNlIFRTUyBpbml0aWFsaXphdGlvbi4nXG4gICAgICApO1xuICAgIH1cbiAgICBjb25zdCB1c2VyU2lnbmluZ01hdGVyaWFsOiBFQ0RTQU1ldGhvZFR5cGVzLlNpZ25pbmdNYXRlcmlhbCA9IEpTT04ucGFyc2UocGFyYW1zLnBydik7XG4gICAgaWYgKHVzZXJTaWduaW5nTWF0ZXJpYWwucFNoYXJlLmkgIT09IDEpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCB1c2VyIGtleScpO1xuICAgIH1cbiAgICBpZiAoIXVzZXJTaWduaW5nTWF0ZXJpYWwuYmFja3VwTlNoYXJlKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgdXNlciBrZXkgLSBtaXNzaW5nIGJhY2t1cE5TaGFyZScpO1xuICAgIH1cblxuICAgIGNvbnN0IHR4UmVxdWVzdDogVHhSZXF1ZXN0ID1cbiAgICAgIHR5cGVvZiBwYXJhbXMudHhSZXF1ZXN0ID09PSAnc3RyaW5nJ1xuICAgICAgICA/IGF3YWl0IGdldFR4UmVxdWVzdCh0aGlzLmJpdGdvLCB0aGlzLndhbGxldC5pZCgpLCBwYXJhbXMudHhSZXF1ZXN0LCBwYXJhbXMucmVxSWQpXG4gICAgICAgIDogcGFyYW1zLnR4UmVxdWVzdDtcblxuICAgIGxldCBzaWduYWJsZVBheWxvYWQgPSBuZXcgQnVmZmVyKCcnKTtcbiAgICBsZXQgZGVyaXZhdGlvblBhdGggPSAnJztcblxuICAgIGlmIChyZXF1ZXN0VHlwZSA9PT0gUmVxdWVzdFR5cGUudHgpIHtcbiAgICAgIGFzc2VydCh0eFJlcXVlc3QudHJhbnNhY3Rpb25zIHx8IHR4UmVxdWVzdC51bnNpZ25lZFR4cywgJ1VuYWJsZSB0byBmaW5kIHRyYW5zYWN0aW9ucyBpbiB0eFJlcXVlc3QnKTtcbiAgICAgIGNvbnN0IHVuc2lnbmVkVHggPVxuICAgICAgICB0eFJlcXVlc3QuYXBpVmVyc2lvbiA9PT0gJ2Z1bGwnID8gdHhSZXF1ZXN0LnRyYW5zYWN0aW9ucyFbMF0udW5zaWduZWRUeCA6IHR4UmVxdWVzdC51bnNpZ25lZFR4c1swXTtcblxuICAgICAgLy8gRm9yIElDUCB0cmFuc2FjdGlvbnMsIHRoZSBIU00gc2lnbnMgdGhlIHNlcmlhbGl6ZWRUeEhleCwgd2hpbGUgdGhlIHVzZXIgc2lnbnMgdGhlIHNpZ25hYmxlSGV4IHNlcGFyYXRlbHkuXG4gICAgICAvLyBWZXJpZmljYXRpb24gY2Fubm90IGJlIHBlcmZvcm1lZCBkaXJlY3RseSBvbiB0aGUgc2lnbmFibGVIZXggYWxvbmUuIEhvd2V2ZXIsIHdlIGNhbiBwYXJzZSB0aGUgc2VyaWFsaXplZFR4SGV4XG4gICAgICAvLyB0byByZWdlbmVyYXRlIHRoZSBzaWduYWJsZUhleCBhbmQgY29tcGFyZSBpdCBhZ2FpbnN0IHRoZSBwcm92aWRlZCB2YWx1ZSBmb3IgdmVyaWZpY2F0aW9uLlxuICAgICAgLy8gSW4gY29udHJhc3QsIGZvciBvdGhlciBjb2luIGZhbWlsaWVzLCB2ZXJpZmljYXRpb24gaXMgdHlwaWNhbGx5IGRvbmUgdXNpbmcganVzdCB0aGUgc2lnbmFibGVIZXguXG4gICAgICBpZiAodGhpcy5iYXNlQ29pbi5nZXRDb25maWcoKS5mYW1pbHkgPT09ICdpY3AnKSB7XG4gICAgICAgIGF3YWl0IHRoaXMuYmFzZUNvaW4udmVyaWZ5VHJhbnNhY3Rpb24oe1xuICAgICAgICAgIHR4UHJlYnVpbGQ6IHsgdHhIZXg6IHVuc2lnbmVkVHguc2VyaWFsaXplZFR4SGV4LCB0eEluZm86IHVuc2lnbmVkVHguc2lnbmFibGVIZXggfSxcbiAgICAgICAgICB0eFBhcmFtczogcGFyYW1zLnR4UGFyYW1zIHx8IHsgcmVjaXBpZW50czogW10gfSxcbiAgICAgICAgICB3YWxsZXQ6IHRoaXMud2FsbGV0LFxuICAgICAgICAgIHdhbGxldFR5cGU6IHRoaXMud2FsbGV0Lm11bHRpc2lnVHlwZSgpLFxuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGF3YWl0IHRoaXMuYmFzZUNvaW4udmVyaWZ5VHJhbnNhY3Rpb24oe1xuICAgICAgICAgIHR4UHJlYnVpbGQ6IHsgdHhIZXg6IHVuc2lnbmVkVHguc2lnbmFibGVIZXggfSxcbiAgICAgICAgICB0eFBhcmFtczogcGFyYW1zLnR4UGFyYW1zIHx8IHsgcmVjaXBpZW50czogW10gfSxcbiAgICAgICAgICB3YWxsZXQ6IHRoaXMud2FsbGV0LFxuICAgICAgICAgIHdhbGxldFR5cGU6IHRoaXMud2FsbGV0Lm11bHRpc2lnVHlwZSgpLFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIHNpZ25hYmxlUGF5bG9hZCA9IEJ1ZmZlci5mcm9tKHVuc2lnbmVkVHguc2lnbmFibGVIZXgsICdoZXgnKTtcbiAgICAgIGRlcml2YXRpb25QYXRoID0gdW5zaWduZWRUeC5kZXJpdmF0aW9uUGF0aDtcbiAgICB9IGVsc2UgaWYgKHJlcXVlc3RUeXBlID09PSBSZXF1ZXN0VHlwZS5tZXNzYWdlKSB7XG4gICAgICBzaWduYWJsZVBheWxvYWQgPSAocGFyYW1zIGFzIFRTU1BhcmFtc0Zvck1lc3NhZ2UpLmJ1ZmZlclRvU2lnbjtcbiAgICAgIC8vIFRPRE8gQkctNjcyOTkgTWVzc2FnZSBzaWduaW5nIHdpdGggZGVyaXZhdGlvbiBwYXRoXG4gICAgfVxuICAgIGNvbnN0IHBhaWxsaWVyTW9kdWx1cyA9IHRoaXMuZ2V0T2ZmbGluZVNpZ25lclBhaWxsaWVyTW9kdWx1cyh7IHBydjogcGFyYW1zLnBydiB9KTtcbiAgICBjb25zdCBjaGFsbGVuZ2VzID0gYXdhaXQgdGhpcy5nZXRFY2RzYVNpZ25pbmdDaGFsbGVuZ2VzKFxuICAgICAgdHhSZXF1ZXN0LnR4UmVxdWVzdElkLFxuICAgICAgcmVxdWVzdFR5cGUsXG4gICAgICBwYWlsbGllck1vZHVsdXMudXNlclBhaWxsaWVyTW9kdWx1cyxcbiAgICAgIDAsXG4gICAgICBwYXJhbXMucmVxSWRcbiAgICApO1xuXG4gICAgY29uc3Qgc3RlcDFSZXR1cm4gPSBhd2FpdCB0aGlzLmNyZWF0ZVRzc0VjZHNhU3RlcDFTaWduaW5nTWF0ZXJpYWwoe1xuICAgICAgcHJ2OiBwYXJhbXMucHJ2LFxuICAgICAgY2hhbGxlbmdlczogY2hhbGxlbmdlcyxcbiAgICAgIGRlcml2YXRpb25QYXRoOiBkZXJpdmF0aW9uUGF0aCxcbiAgICB9KTtcblxuICAgIC8vIHNpZ25pbmcgc3RhZ2Ugb25lIHdpdGggSyBzaGFyZSBzZW5kIHRvIGJpdGdvIGFuZCByZWNlaXZlcyBBIHNoYXJlXG4gICAgY29uc3QgYml0Z29Ub1VzZXJBU2hhcmUgPSAoYXdhaXQgRUNEU0FNZXRob2RzLnNlbmRTaGFyZVRvQml0Z28oXG4gICAgICB0aGlzLmJpdGdvLFxuICAgICAgdGhpcy53YWxsZXQuaWQoKSxcbiAgICAgIHR4UmVxdWVzdC50eFJlcXVlc3RJZCxcbiAgICAgIHJlcXVlc3RUeXBlLFxuICAgICAgU2VuZFNoYXJlVHlwZS5LU2hhcmUsXG4gICAgICBzdGVwMVJldHVybi5rU2hhcmUsXG4gICAgICBzdGVwMVJldHVybi5lbmNyeXB0ZWRTaWduZXJPZmZzZXRTaGFyZSxcbiAgICAgIHN0ZXAxUmV0dXJuLnZzc1Byb29mLFxuICAgICAgc3RlcDFSZXR1cm4ucHJpdmF0ZVNoYXJlUHJvb2YsXG4gICAgICBzdGVwMVJldHVybi5wdWJsaWNTaGFyZSxcbiAgICAgIHN0ZXAxUmV0dXJuLnVzZXJQdWJsaWNHcGdLZXksXG4gICAgICBwYXJhbXMucmVxSWRcbiAgICApKSBhcyBPbWl0PEFTaGFyZSwgJ250aWxkZScgfCAnaDEnIHwgJ2gyJz47IC8vIFdQL0hTTSBkb2VzIG5vdCByZXR1cm4gdGhlIGluaXRpYWwgY2hhbGxlbmdlXG5cbiAgICBjb25zdCBzdGVwMlJldHVybiA9IGF3YWl0IHRoaXMuY3JlYXRlVHNzRWNkc2FTdGVwMlNpZ25pbmdNYXRlcmlhbCh7XG4gICAgICBhU2hhcmVGcm9tQml0Z286IGJpdGdvVG9Vc2VyQVNoYXJlLFxuICAgICAgYml0Z29DaGFsbGVuZ2U6IGNoYWxsZW5nZXMuYml0Z29DaGFsbGVuZ2UsXG4gICAgICB3U2hhcmU6IHN0ZXAxUmV0dXJuLndTaGFyZSBhcyBXU2hhcmUsXG4gICAgfSk7XG5cbiAgICAvLyBzaWduaW5nIHN0YWdlIHR3byB3aXRoIG11U2hhcmUgYW5kIGRTaGFyZSBzZW5kIHRvIGJpdGdvIGFuZCByZWNlaXZlcyBEIHNoYXJlXG4gICAgY29uc3QgYml0Z29Ub1VzZXJEU2hhcmUgPSAoYXdhaXQgRUNEU0FNZXRob2RzLnNlbmRTaGFyZVRvQml0Z28oXG4gICAgICB0aGlzLmJpdGdvLFxuICAgICAgdGhpcy53YWxsZXQuaWQoKSxcbiAgICAgIHR4UmVxdWVzdC50eFJlcXVlc3RJZCxcbiAgICAgIHJlcXVlc3RUeXBlLFxuICAgICAgU2VuZFNoYXJlVHlwZS5NVVNoYXJlLFxuICAgICAgc3RlcDJSZXR1cm4ubXVEU2hhcmUsXG4gICAgICB1bmRlZmluZWQsXG4gICAgICB1bmRlZmluZWQsXG4gICAgICB1bmRlZmluZWQsXG4gICAgICB1bmRlZmluZWQsXG4gICAgICB1bmRlZmluZWQsXG4gICAgICBwYXJhbXMucmVxSWRcbiAgICApKSBhcyBEU2hhcmU7XG5cbiAgICAvLyBJZiBvbmx5IHRoZSBnZXRIYXNoRnVuY3Rpb24oKSBpcyBkZWZpbmVkIGZvciB0aGUgY29pbiB1c2UgaXQgb3RoZXJ3aXNlXG4gICAgLy8gcGFzcyB1bmRlZmluZWQgaGFzaCwgZGVmYXVsdCBoYXNoIHdpbGwgYmUgdXNlZCBpbiB0aGF0IGNhc2UuXG4gICAgbGV0IGhhc2g6IEhhc2ggfCB1bmRlZmluZWQ7XG4gICAgdHJ5IHtcbiAgICAgIGhhc2ggPSB0aGlzLmJhc2VDb2luLmdldEhhc2hGdW5jdGlvbigpO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgaGFzaCA9IHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICBjb25zdCB1c2VyU1NoYXJlID0gYXdhaXQgRUNEU0FNZXRob2RzLmNyZWF0ZVVzZXJTaWduYXR1cmVTaGFyZShcbiAgICAgIHN0ZXAyUmV0dXJuLm9TaGFyZSBhcyBPU2hhcmUsXG4gICAgICBiaXRnb1RvVXNlckRTaGFyZSxcbiAgICAgIHNpZ25hYmxlUGF5bG9hZCxcbiAgICAgIGhhc2hcbiAgICApO1xuXG4gICAgLy8gc2lnbmluZyBzdGFnZSB0aHJlZSB3aXRoIFNTaGFyZSBzZW5kIHRvIGJpdGdvIGFuZCByZWNlaXZlcyBTU2hhcmVcbiAgICBhd2FpdCBFQ0RTQU1ldGhvZHMuc2VuZFNoYXJlVG9CaXRnbyhcbiAgICAgIHRoaXMuYml0Z28sXG4gICAgICB0aGlzLndhbGxldC5pZCgpLFxuICAgICAgdHhSZXF1ZXN0LnR4UmVxdWVzdElkLFxuICAgICAgcmVxdWVzdFR5cGUsXG4gICAgICBTZW5kU2hhcmVUeXBlLlNTaGFyZSxcbiAgICAgIHVzZXJTU2hhcmUsXG4gICAgICB1bmRlZmluZWQsXG4gICAgICB1bmRlZmluZWQsXG4gICAgICB1bmRlZmluZWQsXG4gICAgICB1bmRlZmluZWQsXG4gICAgICB1bmRlZmluZWQsXG4gICAgICBwYXJhbXMucmVxSWRcbiAgICApO1xuICAgIHJldHVybiBhd2FpdCBnZXRUeFJlcXVlc3QodGhpcy5iaXRnbywgdGhpcy53YWxsZXQuaWQoKSwgdHhSZXF1ZXN0LnR4UmVxdWVzdElkLCBwYXJhbXMucmVxSWQpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNpZ25zIHRoZSB0cmFuc2FjdGlvbiBhc3NvY2lhdGVkIHRvIHRoZSB0cmFuc2FjdGlvbiByZXF1ZXN0LlxuICAgKiBAcGFyYW0ge3N0cmluZyB8IFR4UmVxdWVzdH0gcGFyYW1zLnR4UmVxdWVzdCAtIHRyYW5zYWN0aW9uIHJlcXVlc3Qgb2JqZWN0IG9yIGlkXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBwYXJhbXMucHJ2IC0gZGVjcnlwdGVkIHByaXZhdGUga2V5XG4gICAqIEBwYXJhbSB7c3RyaW5nfSBwYXJhbXMucmVxSWQgLSByZXF1ZXN0IGlkXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPFR4UmVxdWVzdD59IGZ1bGx5IHNpZ25lZCBUeFJlcXVlc3Qgb2JqZWN0XG4gICAqL1xuICBhc3luYyBzaWduVHhSZXF1ZXN0KHBhcmFtczogVFNTUGFyYW1zV2l0aFBydik6IFByb21pc2U8VHhSZXF1ZXN0PiB7XG4gICAgdGhpcy5iaXRnby5zZXRSZXF1ZXN0VHJhY2VyKHBhcmFtcy5yZXFJZCk7XG4gICAgcmV0dXJuIHRoaXMuc2lnblJlcXVlc3RCYXNlKHBhcmFtcywgUmVxdWVzdFR5cGUudHgpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNpZ25zIHRoZSBtZXNzYWdlIGFzc29jaWF0ZWQgdG8gdGhlIHRyYW5zYWN0aW9uIHJlcXVlc3QuXG4gICAqIEBwYXJhbSB7c3RyaW5nIHwgVHhSZXF1ZXN0fSBwYXJhbXMudHhSZXF1ZXN0IC0gdHJhbnNhY3Rpb24gcmVxdWVzdCBvYmplY3Qgb3IgaWRcbiAgICogQHBhcmFtIHtzdHJpbmd9IHBhcmFtcy5wcnYgLSBkZWNyeXB0ZWQgcHJpdmF0ZSBrZXlcbiAgICogQHBhcmFtIHtzdHJpbmd9IHBhcmFtcy5yZXFJZCAtIHJlcXVlc3QgaWRcbiAgICogQHJldHVybnMge1Byb21pc2U8VHhSZXF1ZXN0Pn0gZnVsbHkgc2lnbmVkIFR4UmVxdWVzdCBvYmplY3RcbiAgICovXG4gIGFzeW5jIHNpZ25UeFJlcXVlc3RGb3JNZXNzYWdlKHBhcmFtczogVFNTUGFyYW1zRm9yTWVzc2FnZVdpdGhQcnYpOiBQcm9taXNlPFR4UmVxdWVzdD4ge1xuICAgIGlmICghcGFyYW1zLm1lc3NhZ2VSYXcpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignUmF3IG1lc3NhZ2UgcmVxdWlyZWQgdG8gc2lnbiBtZXNzYWdlJyk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLnNpZ25SZXF1ZXN0QmFzZShwYXJhbXMsIFJlcXVlc3RUeXBlLm1lc3NhZ2UpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgY2hhbGxlbmdlIHZhbHVlcyBmb3IgZW50ZXJwcmlzZSBhbmQgQml0R28gaW4gRUNEU0Egc2lnbmluZ1xuICAgKiBPbmx5IHJldHVybnMgdGhlIGNoYWxsZW5nZXMgaWYgdGhleSBhcmUgdmVyaWZpZWQgYnkgdGhlIHVzZXIncyBlbnRlcnByaXNlIGFkbWluJ3MgZWNkaCBrZXlcbiAgICogQHBhcmFtIHtzdHJpbmd9IHR4UmVxdWVzdElkIC0gdHJhbnNhY3Rpb24gcmVxdWVzdCBpZFxuICAgKiBAcGFyYW0ge1JlcXVlc3RUeXBlfSByZXF1ZXN0VHlwZSAtICAoMCBmb3IgdHgsIDEgZm9yIG1lc3NhZ2UpXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB3YWxsZXRQYWlsbGllck1vZHVsdXMgLSBwYWlsbGllciBwdWJrZXkgJG4kXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBpbmRleCAtIGluZGV4IG9mIHRoZSByZXF1ZXN0VHlwZVxuICAgKiBAcGFyYW0ge0lSZXF1ZXN0VHJhY2VyfSByZXFJZCAtIHJlcXVlc3QgdHJhY2VyIHJlcXVlc3QgaWRcbiAgICovXG4gIGFzeW5jIGdldEVjZHNhU2lnbmluZ0NoYWxsZW5nZXMoXG4gICAgdHhSZXF1ZXN0SWQ6IHN0cmluZyxcbiAgICByZXF1ZXN0VHlwZTogUmVxdWVzdFR5cGUsXG4gICAgd2FsbGV0UGFpbGxpZXJNb2R1bHVzOiBzdHJpbmcsXG4gICAgaW5kZXggPSAwLFxuICAgIHJlcUlkPzogSVJlcXVlc3RUcmFjZXJcbiAgKTogUHJvbWlzZTx7XG4gICAgZW50ZXJwcmlzZUNoYWxsZW5nZTogRWNkc2FUeXBlcy5TZXJpYWxpemVkRWNkc2FDaGFsbGVuZ2VzO1xuICAgIGJpdGdvQ2hhbGxlbmdlOiBUeFJlcXVlc3RDaGFsbGVuZ2VSZXNwb25zZTtcbiAgfT4ge1xuICAgIGNvbnN0IGVudGVycHJpc2VJZCA9IHRoaXMud2FsbGV0LnRvSlNPTigpLmVudGVycHJpc2U7XG4gICAgaWYgKCFlbnRlcnByaXNlSWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignV2FsbGV0IG11c3QgYmUgYW4gZW50ZXJwcmlzZSB3YWxsZXQuJyk7XG4gICAgfVxuXG4gICAgLy8gY3JlYXRlIEJpdEdvIHJhbmdlIHByb29mIGFuZCBwYWlsbGllciBwcm9vZiBjaGFsbGVuZ2VcbiAgICBjb25zdCBjcmVhdGVCaXRnb0NoYWxsZW5nZVJlc3BvbnNlID0gYXdhaXQgZ2V0VHhSZXF1ZXN0Q2hhbGxlbmdlKFxuICAgICAgdGhpcy5iaXRnbyxcbiAgICAgIHRoaXMud2FsbGV0LmlkKCksXG4gICAgICB0eFJlcXVlc3RJZCxcbiAgICAgIGluZGV4LnRvU3RyaW5nKCksXG4gICAgICByZXF1ZXN0VHlwZSxcbiAgICAgIHdhbGxldFBhaWxsaWVyTW9kdWx1cyxcbiAgICAgIHJlcUlkXG4gICAgKTtcblxuICAgIGNvbnN0IGJpdGdvVG9FbnRlcnByaXNlUGFpbGxpZXJDaGFsbGVuZ2UgPSB7IHA6IGNyZWF0ZUJpdGdvQ2hhbGxlbmdlUmVzcG9uc2UucCB9O1xuICAgIGNvbnN0IGVudGVycHJpc2VUb0JpdGdvUGFpbGxpZXJDaGFsbGVuZ2UgPSBFY2RzYVR5cGVzLnNlcmlhbGl6ZVBhaWxsaWVyQ2hhbGxlbmdlKHtcbiAgICAgIHA6IGF3YWl0IEVjZHNhUGFpbGxpZXJQcm9vZi5nZW5lcmF0ZVAoaGV4VG9CaWdJbnQoY3JlYXRlQml0Z29DaGFsbGVuZ2VSZXNwb25zZS5uKSksXG4gICAgfSk7XG5cbiAgICAvLyBUT0RPKEJHLTc4NzY0KTogb25jZSB0aGUgcGFpbGxpZXIgcHJvb2ZzIGFyZSBjb21wbGV0ZSwgcmVkdWNlIGNoYWxsZW5nZSBjcmVhdGlvbiB0byBvbmUgQVBJIGNhbGxcbiAgICBjb25zdCB3YWxsZXRDaGFsbGVuZ2VzID0gYXdhaXQgdGhpcy53YWxsZXQuZ2V0Q2hhbGxlbmdlc0ZvckVjZHNhU2lnbmluZygpO1xuXG4gICAgY29uc3QgY2hhbGxlbmdlVmVyaWZpZXJVc2VySWQgPSB3YWxsZXRDaGFsbGVuZ2VzLmNyZWF0ZWRCeTtcbiAgICBjb25zdCBhZG1pblNpZ25pbmdLZXlSZXNwb25zZSA9IGF3YWl0IHRoaXMuYml0Z28uZ2V0U2lnbmluZ0tleUZvclVzZXIoZW50ZXJwcmlzZUlkLCBjaGFsbGVuZ2VWZXJpZmllclVzZXJJZCk7XG4gICAgY29uc3QgcHVia2V5T2ZBZG1pbkVjZGhLZXlIZXggPSBhZG1pblNpZ25pbmdLZXlSZXNwb25zZS5kZXJpdmVkUHVia2V5O1xuXG4gICAgLy8gVmVyaWZ5IGVudGVycHJpc2UncyBjaGFsbGVuZ2UgaXMgc2lnbmVkIGJ5IHRoZSByZXNwZWN0aXZlIGFkbWlucyBlY2RoIGtleWNoYWluXG4gICAgY29uc3QgZW50ZXJwcmlzZVJhd0NoYWxsZW5nZSA9IHtcbiAgICAgIG50aWxkZTogd2FsbGV0Q2hhbGxlbmdlcy5lbnRlcnByaXNlQ2hhbGxlbmdlLm50aWxkZSxcbiAgICAgIGgxOiB3YWxsZXRDaGFsbGVuZ2VzLmVudGVycHJpc2VDaGFsbGVuZ2UuaDEsXG4gICAgICBoMjogd2FsbGV0Q2hhbGxlbmdlcy5lbnRlcnByaXNlQ2hhbGxlbmdlLmgyLFxuICAgIH07XG4gICAgY29uc3QgYWRtaW5TaWduYXR1cmVPbkVudENoYWxsZW5nZTogc3RyaW5nID0gd2FsbGV0Q2hhbGxlbmdlcy5lbnRlcnByaXNlQ2hhbGxlbmdlLnZlcmlmaWVycy5hZG1pblNpZ25hdHVyZTtcbiAgICBpZiAoXG4gICAgICAhdmVyaWZ5RWNkaFNpZ25hdHVyZShcbiAgICAgICAgRWNkc2FVdGlscy5nZXRNZXNzYWdlVG9TaWduRnJvbUNoYWxsZW5nZShlbnRlcnByaXNlUmF3Q2hhbGxlbmdlKSxcbiAgICAgICAgYWRtaW5TaWduYXR1cmVPbkVudENoYWxsZW5nZSxcbiAgICAgICAgQnVmZmVyLmZyb20ocHVia2V5T2ZBZG1pbkVjZGhLZXlIZXgsICdoZXgnKVxuICAgICAgKVxuICAgICkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBBZG1pbiBzaWduYXR1cmUgZm9yIGVudGVycHJpc2UgY2hhbGxlbmdlIGlzIG5vdCB2YWxpZC4gUGxlYXNlIGNvbnRhY3QgeW91ciBlbnRlcnByaXNlIGFkbWluLmApO1xuICAgIH1cblxuICAgIC8vIFZlcmlmeSB0aGF0IHRoZSBCaXRHbyBjaGFsbGVuZ2UncyBaSyBwcm9vZnMgaGF2ZSBiZWVuIHZlcmlmaWVkIGJ5IHRoZSBhZG1pblxuICAgIGNvbnN0IGJpdGdvQ2hhbGxlbmdlOiBUeFJlcXVlc3RDaGFsbGVuZ2VSZXNwb25zZSA9IHtcbiAgICAgIG50aWxkZTogd2FsbGV0Q2hhbGxlbmdlcy5iaXRnb0NoYWxsZW5nZS5udGlsZGUsXG4gICAgICBoMTogd2FsbGV0Q2hhbGxlbmdlcy5iaXRnb0NoYWxsZW5nZS5oMSxcbiAgICAgIGgyOiB3YWxsZXRDaGFsbGVuZ2VzLmJpdGdvQ2hhbGxlbmdlLmgyLFxuICAgICAgcDogYml0Z29Ub0VudGVycHJpc2VQYWlsbGllckNoYWxsZW5nZS5wLFxuICAgICAgbjogY3JlYXRlQml0Z29DaGFsbGVuZ2VSZXNwb25zZS5uLFxuICAgIH07XG4gICAgY29uc3QgYWRtaW5WZXJpZmljYXRpb25TaWduYXR1cmVGb3JCaXRHb0NoYWxsZW5nZSA9IHdhbGxldENoYWxsZW5nZXMuYml0Z29DaGFsbGVuZ2UudmVyaWZpZXJzLmFkbWluU2lnbmF0dXJlO1xuICAgIGlmIChcbiAgICAgICF2ZXJpZnlFY2RoU2lnbmF0dXJlKFxuICAgICAgICBFY2RzYVV0aWxzLmdldE1lc3NhZ2VUb1NpZ25Gcm9tQ2hhbGxlbmdlKGJpdGdvQ2hhbGxlbmdlKSxcbiAgICAgICAgYWRtaW5WZXJpZmljYXRpb25TaWduYXR1cmVGb3JCaXRHb0NoYWxsZW5nZSxcbiAgICAgICAgQnVmZmVyLmZyb20ocHVia2V5T2ZBZG1pbkVjZGhLZXlIZXgsICdoZXgnKVxuICAgICAgKVxuICAgICkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBBZG1pbiBzaWduYXR1cmUgZm9yIEJpdEdvJ3MgY2hhbGxlbmdlIGlzIG5vdCB2YWxpZC4gUGxlYXNlIGNvbnRhY3QgeW91ciBlbnRlcnByaXNlIGFkbWluLmApO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBlbnRlcnByaXNlQ2hhbGxlbmdlOiB7XG4gICAgICAgIC4uLmVudGVycHJpc2VSYXdDaGFsbGVuZ2UsXG4gICAgICAgIHA6IGVudGVycHJpc2VUb0JpdGdvUGFpbGxpZXJDaGFsbGVuZ2UucCxcbiAgICAgIH0sXG4gICAgICBiaXRnb0NoYWxsZW5nZSxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIFZlcmlmaWVzIHRoZSB1LXZhbHVlIHByb29mcyBhbmQgR1BHIGtleXMgdXNlZCBpbiBnZW5lcmF0aW5nIGEgVFNTIEVDRFNBIHdhbGxldC5cbiAgICogQHBhcmFtIHVzZXJHcGdQdWIgVGhlIHVzZXIncyBwdWJsaWMgR1BHIGtleSBmb3IgZW5jcnlwdGlvbiBiZXR3ZWVuIHVzZXIvc2VydmVyXG4gICAqIEBwYXJhbSBiYWNrdXBHcGdQdWIgVGhlIGJhY2t1cCdzIHB1YmxpYyBHUEcga2V5IGZvciBlbmNyeXB0aW9uIGJldHdlZW4gYmFja3VwL3NlcnZlclxuICAgKiBAcGFyYW0gYml0Z29LZXljaGFpbiBwcmV2aW91c2x5IGNyZWF0ZWQgQml0R28ga2V5Y2hhaW47IG11c3QgYmUgY29tcGF0aWJsZSB3aXRoIHVzZXIgYW5kIGJhY2t1cCBrZXkgc2hhcmVzXG4gICAqIEBwYXJhbSBkZWNyeXB0ZWRTaGFyZSBUaGUgZGVjcnlwdGVkIGJpdGdvLXRvLXVzZXIvYmFja3VwIHByaXZhdGUgc2hhcmUgcmV0cmlldmVkIGZyb20gdGhlIGtleWNoYWluXG4gICAqIEBwYXJhbSB2ZXJpZmllckluZGV4IFRoZSBpbmRleCBvZiB0aGUgcGFydHkgdG8gdmVyaWZ5OiAxID0gdXNlciwgMiA9IGJhY2t1cFxuICAgKi9cbiAgYXN5bmMgdmVyaWZ5V2FsbGV0U2lnbmF0dXJlcyhcbiAgICB1c2VyR3BnUHViOiBzdHJpbmcsXG4gICAgYmFja3VwR3BnUHViOiBzdHJpbmcsXG4gICAgYml0Z29LZXljaGFpbjogS2V5Y2hhaW4sXG4gICAgZGVjcnlwdGVkU2hhcmU6IHN0cmluZyxcbiAgICB2ZXJpZmllckluZGV4OiAxIHwgMlxuICApOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBhc3NlcnQoYml0Z29LZXljaGFpbi5jb21tb25LZXljaGFpbik7XG4gICAgYXNzZXJ0KGJpdGdvS2V5Y2hhaW4ud2FsbGV0SFNNR1BHUHVibGljS2V5U2lncyk7XG5cbiAgICBjb25zdCBiaXRnb0dwZ0tleSA9IChhd2FpdCBnZXRCaXRnb0dwZ1B1YktleSh0aGlzLmJpdGdvKSkubXBjVjE7XG4gICAgY29uc3QgdXNlcktleVB1YiA9IGF3YWl0IG9wZW5wZ3AucmVhZEtleSh7IGFybW9yZWRLZXk6IHVzZXJHcGdQdWIgfSk7XG4gICAgY29uc3QgdXNlcktleUlkID0gdXNlcktleVB1Yi5rZXlQYWNrZXQuZ2V0RmluZ2VycHJpbnQoKTtcbiAgICBjb25zdCBiYWNrdXBLZXlQdWIgPSBhd2FpdCBvcGVucGdwLnJlYWRLZXkoeyBhcm1vcmVkS2V5OiBiYWNrdXBHcGdQdWIgfSk7XG4gICAgY29uc3QgYmFja3VwS2V5SWQgPSBiYWNrdXBLZXlQdWIua2V5UGFja2V0LmdldEZpbmdlcnByaW50KCk7XG5cbiAgICBjb25zdCB3YWxsZXRTaWduYXR1cmVzID0gYXdhaXQgb3BlbnBncC5yZWFkS2V5cyh7IGFybW9yZWRLZXlzOiBiaXRnb0tleWNoYWluLndhbGxldEhTTUdQR1B1YmxpY0tleVNpZ3MgfSk7XG4gICAgaWYgKHdhbGxldFNpZ25hdHVyZXMubGVuZ3RoICE9PSAyKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgd2FsbGV0IHNpZ25hdHVyZXMnKTtcbiAgICB9XG4gICAgaWYgKHVzZXJLZXlJZCAhPT0gd2FsbGV0U2lnbmF0dXJlc1swXS5rZXlQYWNrZXQuZ2V0RmluZ2VycHJpbnQoKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBmaXJzdCB3YWxsZXQgc2lnbmF0dXJlJ3MgZmluZ2VycHJpbnQgZG9lcyBub3QgbWF0Y2ggcGFzc2VkIHVzZXIgZ3BnIGtleSdzIGZpbmdlcnByaW50YCk7XG4gICAgfVxuICAgIGlmIChiYWNrdXBLZXlJZCAhPT0gd2FsbGV0U2lnbmF0dXJlc1sxXS5rZXlQYWNrZXQuZ2V0RmluZ2VycHJpbnQoKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBzZWNvbmQgd2FsbGV0IHNpZ25hdHVyZSdzIGZpbmdlcnByaW50IGRvZXMgbm90IG1hdGNoIHBhc3NlZCBiYWNrdXAgZ3BnIGtleSdzIGZpbmdlcnByaW50YCk7XG4gICAgfVxuXG4gICAgYXdhaXQgdmVyaWZ5V2FsbGV0U2lnbmF0dXJlKHtcbiAgICAgIHdhbGxldFNpZ25hdHVyZTogd2FsbGV0U2lnbmF0dXJlc1swXSxcbiAgICAgIGNvbW1vbktleWNoYWluOiBiaXRnb0tleWNoYWluLmNvbW1vbktleWNoYWluLFxuICAgICAgdXNlcktleUlkLFxuICAgICAgYmFja3VwS2V5SWQsXG4gICAgICBiaXRnb1B1YjogYml0Z29HcGdLZXksXG4gICAgICBkZWNyeXB0ZWRTaGFyZSxcbiAgICAgIHZlcmlmaWVySW5kZXgsXG4gICAgfSk7XG5cbiAgICBhd2FpdCB2ZXJpZnlXYWxsZXRTaWduYXR1cmUoe1xuICAgICAgd2FsbGV0U2lnbmF0dXJlOiB3YWxsZXRTaWduYXR1cmVzWzFdLFxuICAgICAgY29tbW9uS2V5Y2hhaW46IGJpdGdvS2V5Y2hhaW4uY29tbW9uS2V5Y2hhaW4sXG4gICAgICB1c2VyS2V5SWQsXG4gICAgICBiYWNrdXBLZXlJZCxcbiAgICAgIGJpdGdvUHViOiBiaXRnb0dwZ0tleSxcbiAgICAgIGRlY3J5cHRlZFNoYXJlLFxuICAgICAgdmVyaWZpZXJJbmRleCxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTaWducyBhIGNoYWxsZW5nZSB3aXRoIHRoZSBwcm92aWRlZCB2MSBlY2RoIGtleSBhdCBhIGRlcml2ZWQgcGF0aFxuICAgKiBAcGFyYW0gY2hhbGxlbmdlIGNoYWxsZW5nZSB0byBzaWduXG4gICAqIEBwYXJhbSBlY2RoWHBydiB4cHJ2IG9mIHRoZSBlY2RoIGtleVxuICAgKiBAcGFyYW0gZGVyaXZhdGlvblBhdGggdGhlIGRlcml2ZWQgcGF0aCBhdCB3aGljaCB0aGUgZWNkaCBrZXkgd2lsbCBzaWduXG4gICAqL1xuICBzdGF0aWMgc2lnbkNoYWxsZW5nZShjaGFsbGVuZ2U6IEVjZHNhVHlwZXMuU2VyaWFsaXplZE50aWxkZSwgZWNkaFhwcnY6IHN0cmluZywgZGVyaXZhdGlvblBhdGg6IHN0cmluZyk6IEJ1ZmZlciB7XG4gICAgY29uc3QgbWVzc2FnZVRvU2lnbiA9IHRoaXMuZ2V0TWVzc2FnZVRvU2lnbkZyb21DaGFsbGVuZ2UoY2hhbGxlbmdlKTtcbiAgICByZXR1cm4gc2lnbk1lc3NhZ2VXaXRoRGVyaXZlZEVjZGhLZXkobWVzc2FnZVRvU2lnbiwgZWNkaFhwcnYsIGRlcml2YXRpb25QYXRoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb252ZXJ0cyBjaGFsbGVuZ2UgdG8gYSBjb21tb24gbWVzc2FnZSBmb3JtYXQgd2hpY2ggY2FuIGJlIHNpZ25lZC5cbiAgICogQHBhcmFtIGNoYWxsZW5nZVxuICAgKi9cbiAgc3RhdGljIGdldE1lc3NhZ2VUb1NpZ25Gcm9tQ2hhbGxlbmdlKGNoYWxsZW5nZTogRWNkc2FUeXBlcy5TZXJpYWxpemVkTnRpbGRlKTogc3RyaW5nIHtcbiAgICByZXR1cm4gY2hhbGxlbmdlLm50aWxkZS5jb25jYXQoY2hhbGxlbmdlLmgxKS5jb25jYXQoY2hhbGxlbmdlLmgyKTtcbiAgfVxuXG4gIC8qKlxuICAgVmVyaWZpZXMgWksgcHJvb2ZzIG9mIEJpdEdvJ3MgY2hhbGxlbmdlcyBmb3IgYm90aCBuaXRybyBhbmQgaW5zdGl0dXRpb25hbCBIU01zXG4gICB3aGljaCBhcmUgZmV0Y2hlZCBmcm9tIHRoZSBXUCBBUEkuXG4gICAqL1xuICBzdGF0aWMgYXN5bmMgdmVyaWZ5Qml0R29DaGFsbGVuZ2VzKGJpdGdvQ2hhbGxlbmdlczogR2V0Qml0R29DaGFsbGVuZ2VzQXBpKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgLy8gVmVyaWZ5IGluc3RpdHV0aW9uYWwgaHNtIGNoYWxsZW5nZSBwcm9vZlxuICAgIGNvbnN0IGluc3RDaGFsbGVuZ2VWZXJpZmllZCA9IGF3YWl0IHRoaXMudmVyaWZ5Qml0R29DaGFsbGVuZ2Uoe1xuICAgICAgbnRpbGRlOiBiaXRnb0NoYWxsZW5nZXMuYml0Z29JbnN0aXR1dGlvbmFsSHNtLm50aWxkZSxcbiAgICAgIGgxOiBiaXRnb0NoYWxsZW5nZXMuYml0Z29JbnN0aXR1dGlvbmFsSHNtLmgxLFxuICAgICAgaDI6IGJpdGdvQ2hhbGxlbmdlcy5iaXRnb0luc3RpdHV0aW9uYWxIc20uaDIsXG4gICAgICBudGlsZGVQcm9vZjogYml0Z29DaGFsbGVuZ2VzLmJpdGdvSW5zdGl0dXRpb25hbEhzbS5udGlsZGVQcm9vZixcbiAgICB9KTtcblxuICAgIC8vIFZlcmlmeSBuaXRybyBoc20gY2hhbGxlbmdlIHByb29mXG4gICAgY29uc3Qgbml0cm9DaGFsbGVuZ2VWZXJpZmllZCA9IGF3YWl0IHRoaXMudmVyaWZ5Qml0R29DaGFsbGVuZ2Uoe1xuICAgICAgbnRpbGRlOiBiaXRnb0NoYWxsZW5nZXMuYml0Z29OaXRyb0hzbS5udGlsZGUsXG4gICAgICBoMTogYml0Z29DaGFsbGVuZ2VzLmJpdGdvTml0cm9Ic20uaDEsXG4gICAgICBoMjogYml0Z29DaGFsbGVuZ2VzLmJpdGdvTml0cm9Ic20uaDIsXG4gICAgICBudGlsZGVQcm9vZjogYml0Z29DaGFsbGVuZ2VzLmJpdGdvTml0cm9Ic20ubnRpbGRlUHJvb2YsXG4gICAgfSk7XG5cbiAgICByZXR1cm4gaW5zdENoYWxsZW5nZVZlcmlmaWVkICYmIG5pdHJvQ2hhbGxlbmdlVmVyaWZpZWQ7XG4gIH1cblxuICAvKipcbiAgICogVmVyaWZpZXMgWksgcHJvb2YgZm9yIGEgc2luZ2xlIEJpdEdvIGNoYWxsZW5nZVxuICAgKiBAcGFyYW0gYml0Z29DaGFsbGVuZ2VcbiAgICovXG4gIHN0YXRpYyBhc3luYyB2ZXJpZnlCaXRHb0NoYWxsZW5nZShiaXRnb0NoYWxsZW5nZTogRWNkc2FUeXBlcy5TZXJpYWxpemVkTnRpbGRlV2l0aFByb29mcyk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGNvbnN0IGRlc2VyaWFsaXplZEluc3RDaGFsbGVuZ2UgPSBFY2RzYVR5cGVzLmRlc2VyaWFsaXplTnRpbGRlV2l0aFByb29mcyhiaXRnb0NoYWxsZW5nZSk7XG4gICAgY29uc3QgbnRpbGRlUHJvb2ZIMVdydEgyVmVyaWZpZWQgPSBhd2FpdCBFY2RzYVJhbmdlUHJvb2YudmVyaWZ5TnRpbGRlUHJvb2YoXG4gICAgICB7XG4gICAgICAgIG50aWxkZTogZGVzZXJpYWxpemVkSW5zdENoYWxsZW5nZS5udGlsZGUsXG4gICAgICAgIGgxOiBkZXNlcmlhbGl6ZWRJbnN0Q2hhbGxlbmdlLmgxLFxuICAgICAgICBoMjogZGVzZXJpYWxpemVkSW5zdENoYWxsZW5nZS5oMixcbiAgICAgIH0sXG4gICAgICBkZXNlcmlhbGl6ZWRJbnN0Q2hhbGxlbmdlLm50aWxkZVByb29mLmgxV3J0SDJcbiAgICApO1xuICAgIGNvbnN0IG50aWxkZVByb29mSDJXcnRIMVZlcmlmaWVkID0gYXdhaXQgRWNkc2FSYW5nZVByb29mLnZlcmlmeU50aWxkZVByb29mKFxuICAgICAge1xuICAgICAgICBudGlsZGU6IGRlc2VyaWFsaXplZEluc3RDaGFsbGVuZ2UubnRpbGRlLFxuICAgICAgICBoMTogZGVzZXJpYWxpemVkSW5zdENoYWxsZW5nZS5oMixcbiAgICAgICAgaDI6IGRlc2VyaWFsaXplZEluc3RDaGFsbGVuZ2UuaDEsXG4gICAgICB9LFxuICAgICAgZGVzZXJpYWxpemVkSW5zdENoYWxsZW5nZS5udGlsZGVQcm9vZi5oMldydEgxXG4gICAgKTtcbiAgICByZXR1cm4gbnRpbGRlUHJvb2ZIMVdydEgyVmVyaWZpZWQgJiYgbnRpbGRlUHJvb2ZIMldydEgxVmVyaWZpZWQ7XG4gIH1cblxuICAvKipcbiAgICogR2V0cyB0aGUgYml0Z28gY2hhbGxlbmdlcyBmb3IgYm90aCBuaXRybyBhbmQgaW5zdGl0dXRpb25hbCBIU01zIGZyb20gV1AgQVBJLlxuICAgKiBAcGFyYW0gYml0Z29cbiAgICovXG4gIHN0YXRpYyBhc3luYyBnZXRCaXRHb0NoYWxsZW5nZXMoYml0Z286IEJpdEdvQmFzZSk6IFByb21pc2U8R2V0Qml0R29DaGFsbGVuZ2VzQXBpPiB7XG4gICAgY29uc3QgcmVzID0gYXdhaXQgYml0Z28uZ2V0KGJpdGdvLnVybCgnL3Rzcy9lY2RzYS9jaGFsbGVuZ2VzJywgMikpLnNlbmQoKS5yZXN1bHQoKTtcbiAgICBpZiAoXG4gICAgICAhcmVzLmJpdGdvTml0cm9Ic20gfHxcbiAgICAgICFyZXMuYml0Z29OaXRyb0hzbS5udGlsZGUgfHxcbiAgICAgICFyZXMuYml0Z29OaXRyb0hzbS5oMSB8fFxuICAgICAgIXJlcy5iaXRnb05pdHJvSHNtLmgyIHx8XG4gICAgICAhcmVzLmJpdGdvTml0cm9Ic20ubnRpbGRlUHJvb2YgfHxcbiAgICAgICFyZXMuYml0Z29JbnN0aXR1dGlvbmFsSHNtIHx8XG4gICAgICAhcmVzLmJpdGdvSW5zdGl0dXRpb25hbEhzbS5udGlsZGUgfHxcbiAgICAgICFyZXMuYml0Z29JbnN0aXR1dGlvbmFsSHNtLmgxIHx8XG4gICAgICAhcmVzLmJpdGdvSW5zdGl0dXRpb25hbEhzbS5oMiB8fFxuICAgICAgIXJlcy5iaXRnb0luc3RpdHV0aW9uYWxIc20ubnRpbGRlUHJvb2ZcbiAgICApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignRXhwZWN0ZWQgQml0R28gY2hhbGxlbmdlIHByb29mIHRvIGJlIHByZXNlbnQuIENvbnRhY3Qgc3VwcG9ydEBiaXRnby5jb20uJyk7XG4gICAgfVxuICAgIHJldHVybiByZXM7XG4gIH1cblxuICAvKipcbiAgICogR2V0cyBCaXRHbydzIHByb29mcyBmcm9tIEFQSSBhbmQgc2lnbnMgdGhlbSBpZiB0aGUgcHJvb2ZzIGFyZSB2YWxpZC5cbiAgICogQHBhcmFtIGJpdGdvXG4gICAqIEBwYXJhbSBlbnRlcnByaXNlSWRcbiAgICogQHBhcmFtIHVzZXJQYXNzd29yZFxuICAgKi9cbiAgc3RhdGljIGFzeW5jIGdldFZlcmlmeUFuZFNpZ25CaXRHb0NoYWxsZW5nZXMoXG4gICAgYml0Z286IEJpdEdvQmFzZSxcbiAgICBlbnRlcnByaXNlSWQ6IHN0cmluZyxcbiAgICB1c2VyUGFzc3dvcmQ6IHN0cmluZ1xuICApOiBQcm9taXNlPEJpdEdvUHJvb2ZTaWduYXR1cmVzPiB7XG4gICAgLy8gRmV0Y2ggQml0R28ncyBjaGFsbGVuZ2UgYW5kIHZlcmlmeVxuICAgIGNvbnN0IGJpdGdvQ2hhbGxlbmdlc1dpdGhQcm9vZnMgPSBhd2FpdCBFY2RzYVV0aWxzLmdldEJpdEdvQ2hhbGxlbmdlcyhiaXRnbyk7XG4gICAgaWYgKCEoYXdhaXQgRWNkc2FVdGlscy52ZXJpZnlCaXRHb0NoYWxsZW5nZXMoYml0Z29DaGFsbGVuZ2VzV2l0aFByb29mcykpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBGYWlsZWQgdG8gdmVyaWZ5IEJpdEdvJ3MgY2hhbGxlbmdlIG5lZWRlZCB0byBlbmFibGUgRUNEU0Egc2lnbmluZy4gUGxlYXNlIGNvbnRhY3Qgc3VwcG9ydEBiaXRnby5jb21gXG4gICAgICApO1xuICAgIH1cbiAgICByZXR1cm4gYXdhaXQgRWNkc2FVdGlscy5zaWduQml0Z29DaGFsbGVuZ2VzKGJpdGdvLCBlbnRlcnByaXNlSWQsIHVzZXJQYXNzd29yZCwgYml0Z29DaGFsbGVuZ2VzV2l0aFByb29mcyk7XG4gIH1cblxuICAvKipcbiAgICogU2lnbiBCaXRnbydzIHByb29mcywgdmVyaWZpY2F0aW9uIG9mIHByb29mcyBpcyBsZWZ0IHRvIHRoZSBjYWxsZXJcbiAgICogQHBhcmFtIGJpdGdvXG4gICAqIEBwYXJhbSBlbnRlcnByaXNlSWRcbiAgICogQHBhcmFtIHVzZXJQYXNzd29yZFxuICAgKiBAcGFyYW0gYml0Z29DaGFsbGVuZ2VzV2l0aFByb29mcyBPcHRpb25hbGx5IHByb3ZpZGUgQml0Z28gQ2hhbGxhZW5nZSAmIFByb29mcyBpbnN0ZWFkIG9mIGZldGNoaW5nIGZyb20gQVBJXG4gICAqL1xuICBzdGF0aWMgYXN5bmMgc2lnbkJpdGdvQ2hhbGxlbmdlcyhcbiAgICBiaXRnbzogQml0R29CYXNlLFxuICAgIGVudGVycHJpc2VJZDogc3RyaW5nLFxuICAgIHVzZXJQYXNzd29yZDogc3RyaW5nLFxuICAgIGJpdGdvQ2hhbGxlbmdlc1dpdGhQcm9vZnM/OiBHZXRCaXRHb0NoYWxsZW5nZXNBcGlcbiAgKTogUHJvbWlzZTxCaXRHb1Byb29mU2lnbmF0dXJlcz4ge1xuICAgIC8vIGZldGNoIGNoYWxsZW5nZSAmIHByb29mIGlmIG5vbmUgYXJlIHByb3ZpZGVkXG4gICAgY29uc3QgY2hhbGxlbmdlc1dpdGhQcm9vZnMgPSBiaXRnb0NoYWxsZW5nZXNXaXRoUHJvb2ZzXG4gICAgICA/IGJpdGdvQ2hhbGxlbmdlc1dpdGhQcm9vZnNcbiAgICAgIDogYXdhaXQgRWNkc2FVdGlscy5nZXRCaXRHb0NoYWxsZW5nZXMoYml0Z28pO1xuXG4gICAgLy8gRmV0Y2ggdXNlcidzIGVjZGggcHVibGljIGtleWNoYWluIG5lZWRlZCBmb3Igc2lnbmluZyB0aGUgY2hhbGxlbmdlc1xuICAgIGNvbnN0IGVjZGhLZXlwYWlyID0gYXdhaXQgYml0Z28uZ2V0RWNkaEtleXBhaXJQcml2YXRlKHVzZXJQYXNzd29yZCwgZW50ZXJwcmlzZUlkKTtcblxuICAgIGNvbnN0IHNpZ25lZEJpdEdvSW5zdENoYWxsZW5nZSA9IEVjZHNhVXRpbHMuc2lnbkNoYWxsZW5nZShcbiAgICAgIGNoYWxsZW5nZXNXaXRoUHJvb2ZzLmJpdGdvSW5zdGl0dXRpb25hbEhzbSxcbiAgICAgIGVjZGhLZXlwYWlyLnhwcnYsXG4gICAgICBlY2RoS2V5cGFpci5kZXJpdmF0aW9uUGF0aFxuICAgICk7XG4gICAgY29uc3Qgc2lnbmVkQml0R29OaXRyb0NoYWxsZW5nZSA9IEVjZHNhVXRpbHMuc2lnbkNoYWxsZW5nZShcbiAgICAgIGNoYWxsZW5nZXNXaXRoUHJvb2ZzLmJpdGdvTml0cm9Ic20sXG4gICAgICBlY2RoS2V5cGFpci54cHJ2LFxuICAgICAgZWNkaEtleXBhaXIuZGVyaXZhdGlvblBhdGhcbiAgICApO1xuICAgIHJldHVybiB7XG4gICAgICBiaXRnb0luc3RIc21BZG1pblNpZ25hdHVyZTogc2lnbmVkQml0R29JbnN0Q2hhbGxlbmdlLFxuICAgICAgYml0Z29OaXRyb0hzbUFkbWluU2lnbmF0dXJlOiBzaWduZWRCaXRHb05pdHJvQ2hhbGxlbmdlLFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogVGhpcyBpcyBuZWVkZWQgdG8gZW5hYmxlIGVjZHNhIHNpZ25pbmcgb24gdGhlIGVudGVycHJpc2UuXG4gICAqIEl0IHJlY2VpdmVzIHRoZSBlbnRlcnByaXNlIGNoYWxsZW5nZSBhbmQgc2lnbmF0dXJlcyBvZiB2ZXJpZmllZCBiaXRnbyBwcm9vZnNcbiAgICogYW5kIHVwbG9hZHMgdGhlbSBvbiB0aGUgZW50ZXJwcmlzZS5cbiAgICogQHBhcmFtIGJpdGdvXG4gICAqIEBwYXJhbSBlbnRJZCAtIGVudGVycHJpc2UgaWQgdG8gZW5hYmxlIGVjZHNhIHNpZ25pbmcgb25cbiAgICogQHBhcmFtIHVzZXJQYXNzd29yZCAtIGVudGVycHJpc2UgYWRtaW4ncyBsb2dpbiBwd1xuICAgKiBAcGFyYW0gYml0Z29JbnN0Q2hhbGxlbmdlUHJvb2ZTaWduYXR1cmUgLSBzaWduYXR1cmUgb24gYml0Z28ncyBpbnN0aXR1dGlvbmFsIEhTTSBjaGFsbGVuZ2UgYWZ0ZXIgdmVyaWZpY2F0aW9uXG4gICAqIEBwYXJhbSBiaXRnb05pdHJvQ2hhbGxlbmdlUHJvb2ZTaWduYXR1cmUgLSBzaWduYXR1cmUgb24gYml0Z28ncyBuaXRybyBIU00gY2hhbGxlbmdlIGFmdGVyIHZlcmlmaWNhdGlvblxuICAgKiBAcGFyYW0gY2hhbGxlbmdlIC0gb3B0aW9uYWxseSB1c2UgdGhlIGNoYWxsZW5nZSBmb3IgZW50ZXJwcmlzZSBjaGFsbGVuZ2VcbiAgICovXG4gIHN0YXRpYyBhc3luYyBpbml0aWF0ZUNoYWxsZW5nZXNGb3JFbnRlcnByaXNlKFxuICAgIGJpdGdvOiBCaXRHb0Jhc2UsXG4gICAgZW50SWQ6IHN0cmluZyxcbiAgICB1c2VyUGFzc3dvcmQ6IHN0cmluZyxcbiAgICBiaXRnb0luc3RDaGFsbGVuZ2VQcm9vZlNpZ25hdHVyZTogQnVmZmVyLFxuICAgIGJpdGdvTml0cm9DaGFsbGVuZ2VQcm9vZlNpZ25hdHVyZTogQnVmZmVyLFxuICAgIG9wZW5TU0xCeXRlczogVWludDhBcnJheSxcbiAgICBjaGFsbGVuZ2U/OiBFY2RzYVR5cGVzLkRlc2VyaWFsaXplZE50aWxkZVdpdGhQcm9vZnNcbiAgKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgLy8gRmV0Y2ggdXNlcidzIGVjZGggcHVibGljIGtleWNoYWluIG5lZWRlZCBmb3Igc2lnbmluZyB0aGUgY2hhbGxlbmdlc1xuICAgIGNvbnN0IGVjZGhLZXlwYWlyID0gYXdhaXQgYml0Z28uZ2V0RWNkaEtleXBhaXJQcml2YXRlKHVzZXJQYXNzd29yZCwgZW50SWQpO1xuXG4gICAgLy8gR2VuZXJhdGUgYW5kIHNpZ24gZW50ZXJwcmlzZSBjaGFsbGVuZ2VcbiAgICBjb25zdCBlbnRDaGFsbGVuZ2VXaXRoUHJvb2YgPVxuICAgICAgY2hhbGxlbmdlID8/IChhd2FpdCBFY2RzYVJhbmdlUHJvb2YuZ2VuZXJhdGVOdGlsZGUob3BlblNTTEJ5dGVzLCBtaW5Nb2R1bHVzQml0TGVuZ3RoKSk7XG4gICAgY29uc3Qgc2VyaWFsaXplZEVudENoYWxsZW5nZVdpdGhQcm9vZiA9IEVjZHNhVHlwZXMuc2VyaWFsaXplTnRpbGRlV2l0aFByb29mcyhlbnRDaGFsbGVuZ2VXaXRoUHJvb2YpO1xuICAgIGNvbnN0IHNpZ25lZEVudGVycHJpc2VDaGFsbGVuZ2UgPSBFY2RzYVV0aWxzLnNpZ25DaGFsbGVuZ2UoXG4gICAgICBzZXJpYWxpemVkRW50Q2hhbGxlbmdlV2l0aFByb29mLFxuICAgICAgZWNkaEtleXBhaXIueHBydixcbiAgICAgIGVjZGhLZXlwYWlyLmRlcml2YXRpb25QYXRoXG4gICAgKTtcblxuICAgIGF3YWl0IHRoaXMudXBsb2FkQ2hhbGxlbmdlc1RvRW50ZXJwcmlzZShcbiAgICAgIGJpdGdvLFxuICAgICAgZW50SWQsXG4gICAgICBzZXJpYWxpemVkRW50Q2hhbGxlbmdlV2l0aFByb29mLFxuICAgICAgc2lnbmVkRW50ZXJwcmlzZUNoYWxsZW5nZS50b1N0cmluZygnaGV4JyksXG4gICAgICBiaXRnb0luc3RDaGFsbGVuZ2VQcm9vZlNpZ25hdHVyZS50b1N0cmluZygnaGV4JyksXG4gICAgICBiaXRnb05pdHJvQ2hhbGxlbmdlUHJvb2ZTaWduYXR1cmUudG9TdHJpbmcoJ2hleCcpXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVcGxvYWRzIHRoZSBzaWduZWQgY2hhbGxlbmdlcyBhbmQgdGhlaXIgcHJvb2ZzIG9uIHRoZSBlbnRlcnByaXNlLlxuICAgKiBUaGlzIGluaXRpYXRlcyBlY2RzYSBzaWduaW5nIGZvciB0aGUgZW50ZXJwcmlzZSB1c2Vycy5cbiAgICogQHBhcmFtIGJpdGdvXG4gICAqIEBwYXJhbSBlbnRJZCAtIGVudGVycHJpc2UgdG8gZW5hYmxlIGVjZHNhIHNpZ25pbmcgb25cbiAgICogQHBhcmFtIGVudENoYWxsZW5nZSAtIGNsaWVudCBzaWRlIGdlbmVyYXRlZCBlbnQgY2hhbGxlbmdlIHdpdGggWksgcHJvb2ZzXG4gICAqIEBwYXJhbSBlbnRDaGFsbGVuZ2VTaWduYXR1cmUgLSBzaWduYXR1cmUgb24gZW50ZXJwcmlzZSBjaGFsbGVuZ2VcbiAgICogQHBhcmFtIGJpdGdvSW50Q2hhbGxlbmdlU2lnbmF0dXJlIC0gc2lnbmF0dXJlIG9uIEJpdEdvJ3MgaW5zdGl0dXRpb25hbCBIU00gY2hhbGxlbmdlXG4gICAqIEBwYXJhbSBiaXRnb05pdHJvQ2hhbGxlbmdlU2lnbmF0dXJlIC0gc2lnbmF0dXJlIG9uIEJpdEdvJ3Mgbml0cm8gSFNNIGNoYWxsZW5nZVxuICAgKi9cbiAgc3RhdGljIGFzeW5jIHVwbG9hZENoYWxsZW5nZXNUb0VudGVycHJpc2UoXG4gICAgYml0Z286IEJpdEdvQmFzZSxcbiAgICBlbnRJZDogc3RyaW5nLFxuICAgIGVudENoYWxsZW5nZTogRWNkc2FUeXBlcy5TZXJpYWxpemVkTnRpbGRlIHwgRWNkc2FUeXBlcy5TZXJpYWxpemVkTnRpbGRlV2l0aFByb29mcyxcbiAgICBlbnRDaGFsbGVuZ2VTaWduYXR1cmU6IHN0cmluZyxcbiAgICBiaXRnb0ludENoYWxsZW5nZVNpZ25hdHVyZTogc3RyaW5nLFxuICAgIGJpdGdvTml0cm9DaGFsbGVuZ2VTaWduYXR1cmU6IHN0cmluZ1xuICApOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBib2R5ID0ge1xuICAgICAgZW50ZXJwcmlzZToge1xuICAgICAgICBudGlsZGU6IGVudENoYWxsZW5nZS5udGlsZGUsXG4gICAgICAgIGgxOiBlbnRDaGFsbGVuZ2UuaDEsXG4gICAgICAgIGgyOiBlbnRDaGFsbGVuZ2UuaDIsXG4gICAgICAgIHZlcmlmaWVyczoge1xuICAgICAgICAgIGFkbWluU2lnbmF0dXJlOiBlbnRDaGFsbGVuZ2VTaWduYXR1cmUsXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgICAgYml0Z29JbnN0aXR1dGlvbmFsSHNtOiB7XG4gICAgICAgIHZlcmlmaWVyczoge1xuICAgICAgICAgIGFkbWluU2lnbmF0dXJlOiBiaXRnb0ludENoYWxsZW5nZVNpZ25hdHVyZSxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgICBiaXRnb05pdHJvSHNtOiB7XG4gICAgICAgIHZlcmlmaWVyczoge1xuICAgICAgICAgIGFkbWluU2lnbmF0dXJlOiBiaXRnb05pdHJvQ2hhbGxlbmdlU2lnbmF0dXJlLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICB9O1xuICAgIGlmICgnbnRpbGRlUHJvb2YnIGluIGVudENoYWxsZW5nZSkge1xuICAgICAgYm9keS5lbnRlcnByaXNlWydudGlsZGVQcm9vZiddID0gZW50Q2hhbGxlbmdlLm50aWxkZVByb29mO1xuICAgIH1cbiAgICBhd2FpdCBiaXRnb1xuICAgICAgLnB1dChiaXRnby51cmwoYC9lbnRlcnByaXNlLyR7ZW50SWR9L3Rzc2NvbmZpZy9lY2RzYS9jaGFsbGVuZ2VgLCAyKSlcbiAgICAgIC5zZW5kKGJvZHkpXG4gICAgICAucmVzdWx0KCk7XG4gIH1cbn1cbiJdfQ==
@@ -1 +1 @@
1
- {"version":3,"file":"ecdsaMPCv2.d.ts","sourceRoot":"","sources":["../../../../../../src/bitgo/utils/tss/ecdsa/ecdsaMPCv2.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ecdsaMPCv2.d.ts","sourceRoot":"","sources":["../../../../../../src/bitgo/utils/tss/ecdsa/ecdsaMPCv2.ts"],"names":[],"mappings":"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"}