@bitgo-beta/utxo-lib 8.0.3-beta.1264 → 8.0.3-beta.1266

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 (46) hide show
  1. package/dist/src/bitgo/Musig2.js +14 -14
  2. package/dist/src/bitgo/UtxoPsbt.d.ts +1 -1
  3. package/dist/src/bitgo/UtxoPsbt.d.ts.map +1 -1
  4. package/dist/src/bitgo/UtxoPsbt.js +3 -3
  5. package/dist/src/bitgo/keyutil.d.ts +1 -1
  6. package/dist/src/bitgo/keyutil.d.ts.map +1 -1
  7. package/dist/src/bitgo/keyutil.js +4 -4
  8. package/dist/src/bitgo/legacysafe/index.js +3 -3
  9. package/dist/src/bitgo/outputScripts.js +7 -7
  10. package/dist/src/bitgo/signature.d.ts +1 -1
  11. package/dist/src/bitgo/signature.d.ts.map +1 -1
  12. package/dist/src/bitgo/signature.js +6 -6
  13. package/dist/src/bitgo/wallet/Psbt.d.ts +1 -1
  14. package/dist/src/bitgo/wallet/Psbt.d.ts.map +1 -1
  15. package/dist/src/bitgo/wallet/Psbt.js +1 -1
  16. package/dist/src/bitgo/wallet/WalletKeys.d.ts +1 -1
  17. package/dist/src/bitgo/wallet/WalletKeys.d.ts.map +1 -1
  18. package/dist/src/bitgo/wallet/WalletKeys.js +1 -1
  19. package/dist/src/bitgo/wallet/WalletUnspentSigner.d.ts +1 -1
  20. package/dist/src/bitgo/wallet/WalletUnspentSigner.d.ts.map +1 -1
  21. package/dist/src/bitgo/wallet/WalletUnspentSigner.js +1 -1
  22. package/dist/src/bitgo/wallet/chains.d.ts +1 -1
  23. package/dist/src/bitgo/wallet/psbt/PsbtOutputs.d.ts +1 -1
  24. package/dist/src/bitgo/wallet/psbt/PsbtOutputs.d.ts.map +1 -1
  25. package/dist/src/bitgo/wallet/psbt/PsbtOutputs.js +1 -1
  26. package/dist/src/bitgo/wallet/psbt/RootNodes.d.ts +1 -1
  27. package/dist/src/bitgo/wallet/psbt/RootNodes.d.ts.map +1 -1
  28. package/dist/src/bitgo/wallet/psbt/RootNodes.js +3 -4
  29. package/dist/src/index.d.ts +2 -1
  30. package/dist/src/index.d.ts.map +1 -1
  31. package/dist/src/index.js +6 -3
  32. package/dist/src/payments/p2tr.d.ts.map +1 -1
  33. package/dist/src/payments/p2tr.js +4 -12
  34. package/dist/src/taproot.js +5 -5
  35. package/dist/src/templates/taprootnofn/output.js +3 -3
  36. package/dist/src/testutil/keys.d.ts +1 -2
  37. package/dist/src/testutil/keys.d.ts.map +1 -1
  38. package/dist/src/testutil/keys.js +4 -5
  39. package/dist/src/testutil/mock.d.ts +1 -1
  40. package/dist/src/testutil/mock.d.ts.map +1 -1
  41. package/dist/src/testutil/mock.js +2 -6
  42. package/dist/src/transaction_builder.js +15 -15
  43. package/package.json +4 -9
  44. package/dist/src/noble_ecc.d.ts +0 -28
  45. package/dist/src/noble_ecc.d.ts.map +0 -1
  46. package/dist/src/noble_ecc.js +0 -172
package/dist/src/index.js CHANGED
@@ -14,7 +14,7 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
14
  for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
15
  };
16
16
  Object.defineProperty(exports, "__esModule", { value: true });
17
- exports.TransactionBuilder = exports.supportsSegwit = exports.supportsTaproot = exports.isTestnet = exports.isMainnet = exports.getTestnet = exports.getMainnet = exports.getNetworkName = exports.isValidNetwork = exports.getNetworkList = exports.networks = exports.p2trPayments = exports.testutil = exports.taproot = exports.classify = exports.addressFormat = exports.address = exports.bitgo = exports.bufferutils = void 0;
17
+ exports.TransactionBuilder = exports.supportsSegwit = exports.supportsTaproot = exports.isTestnet = exports.isMainnet = exports.getTestnet = exports.getMainnet = exports.getNetworkName = exports.isValidNetwork = exports.getNetworkList = exports.networks = exports.p2trPayments = exports.ECPair = exports.ecc = exports.bip32 = exports.testutil = exports.taproot = exports.classify = exports.addressFormat = exports.address = exports.bitgo = exports.bufferutils = void 0;
18
18
  __exportStar(require("bitcoinjs-lib"), exports);
19
19
  exports.bufferutils = require("bitcoinjs-lib/src/bufferutils");
20
20
  exports.bitgo = require("./bitgo");
@@ -23,7 +23,10 @@ exports.addressFormat = require("./addressFormat");
23
23
  exports.classify = require("./classify");
24
24
  exports.taproot = require("./taproot");
25
25
  exports.testutil = require("./testutil");
26
- __exportStar(require("./noble_ecc"), exports);
26
+ const secp256k1_1 = require("@bitgo-beta/secp256k1");
27
+ Object.defineProperty(exports, "bip32", { enumerable: true, get: function () { return secp256k1_1.bip32; } });
28
+ Object.defineProperty(exports, "ecc", { enumerable: true, get: function () { return secp256k1_1.ecc; } });
29
+ Object.defineProperty(exports, "ECPair", { enumerable: true, get: function () { return secp256k1_1.ECPair; } });
27
30
  exports.p2trPayments = require("./payments");
28
31
  var networks_1 = require("./networks");
29
32
  Object.defineProperty(exports, "networks", { enumerable: true, get: function () { return networks_1.networks; } });
@@ -38,4 +41,4 @@ Object.defineProperty(exports, "supportsTaproot", { enumerable: true, get: funct
38
41
  Object.defineProperty(exports, "supportsSegwit", { enumerable: true, get: function () { return networks_1.supportsSegwit; } });
39
42
  var transaction_builder_1 = require("./transaction_builder");
40
43
  Object.defineProperty(exports, "TransactionBuilder", { enumerable: true, get: function () { return transaction_builder_1.TransactionBuilder; } });
41
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxnREFBOEI7QUFFOUIsK0RBQTZEO0FBRTdELG1DQUFpQztBQUVqQyx1Q0FBcUM7QUFFckMsbURBQWlEO0FBRWpELHlDQUF1QztBQUV2Qyx1Q0FBcUM7QUFFckMseUNBQXVDO0FBRXZDLDhDQUE0QjtBQUU1Qiw2Q0FBMkM7QUFFM0MsdUNBYW9CO0FBWmxCLG9HQUFBLFFBQVEsT0FBQTtBQUdSLDBHQUFBLGNBQWMsT0FBQTtBQUNkLDBHQUFBLGNBQWMsT0FBQTtBQUNkLDBHQUFBLGNBQWMsT0FBQTtBQUNkLHNHQUFBLFVBQVUsT0FBQTtBQUNWLHNHQUFBLFVBQVUsT0FBQTtBQUNWLHFHQUFBLFNBQVMsT0FBQTtBQUNULHFHQUFBLFNBQVMsT0FBQTtBQUNULDJHQUFBLGVBQWUsT0FBQTtBQUNmLDBHQUFBLGNBQWMsT0FBQTtBQUdoQiw2REFBMkQ7QUFBbEQseUhBQUEsa0JBQWtCLE9BQUEiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICdiaXRjb2luanMtbGliJztcblxuZXhwb3J0ICogYXMgYnVmZmVydXRpbHMgZnJvbSAnYml0Y29pbmpzLWxpYi9zcmMvYnVmZmVydXRpbHMnO1xuXG5leHBvcnQgKiBhcyBiaXRnbyBmcm9tICcuL2JpdGdvJztcblxuZXhwb3J0ICogYXMgYWRkcmVzcyBmcm9tICcuL2FkZHJlc3MnO1xuXG5leHBvcnQgKiBhcyBhZGRyZXNzRm9ybWF0IGZyb20gJy4vYWRkcmVzc0Zvcm1hdCc7XG5cbmV4cG9ydCAqIGFzIGNsYXNzaWZ5IGZyb20gJy4vY2xhc3NpZnknO1xuXG5leHBvcnQgKiBhcyB0YXByb290IGZyb20gJy4vdGFwcm9vdCc7XG5cbmV4cG9ydCAqIGFzIHRlc3R1dGlsIGZyb20gJy4vdGVzdHV0aWwnO1xuXG5leHBvcnQgKiBmcm9tICcuL25vYmxlX2VjYyc7XG5cbmV4cG9ydCAqIGFzIHAydHJQYXltZW50cyBmcm9tICcuL3BheW1lbnRzJztcblxuZXhwb3J0IHtcbiAgbmV0d29ya3MsXG4gIE5ldHdvcmssXG4gIE5ldHdvcmtOYW1lLFxuICBnZXROZXR3b3JrTGlzdCxcbiAgaXNWYWxpZE5ldHdvcmssXG4gIGdldE5ldHdvcmtOYW1lLFxuICBnZXRNYWlubmV0LFxuICBnZXRUZXN0bmV0LFxuICBpc01haW5uZXQsXG4gIGlzVGVzdG5ldCxcbiAgc3VwcG9ydHNUYXByb290LFxuICBzdXBwb3J0c1NlZ3dpdCxcbn0gZnJvbSAnLi9uZXR3b3Jrcyc7XG5cbmV4cG9ydCB7IFRyYW5zYWN0aW9uQnVpbGRlciB9IGZyb20gJy4vdHJhbnNhY3Rpb25fYnVpbGRlcic7XG5cbmV4cG9ydCB7IE5ldHdvcmsgYXMgQml0Y29pbkpTTmV0d29yayB9IGZyb20gJ2JpdGNvaW5qcy1saWInO1xuIl19
44
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxnREFBOEI7QUFFOUIsK0RBQTZEO0FBRTdELG1DQUFpQztBQUVqQyx1Q0FBcUM7QUFFckMsbURBQWlEO0FBRWpELHlDQUF1QztBQUV2Qyx1Q0FBcUM7QUFFckMseUNBQXVDO0FBRXZDLHFEQUFpSDtBQUkvRyxzRkFKTyxpQkFBSyxPQUlQO0FBTUwsb0ZBVndDLGVBQUcsT0FVeEM7QUFFSCx1RkFaNkMsa0JBQU0sT0FZN0M7QUFPUiw2Q0FBMkM7QUFFM0MsdUNBYW9CO0FBWmxCLG9HQUFBLFFBQVEsT0FBQTtBQUdSLDBHQUFBLGNBQWMsT0FBQTtBQUNkLDBHQUFBLGNBQWMsT0FBQTtBQUNkLDBHQUFBLGNBQWMsT0FBQTtBQUNkLHNHQUFBLFVBQVUsT0FBQTtBQUNWLHNHQUFBLFVBQVUsT0FBQTtBQUNWLHFHQUFBLFNBQVMsT0FBQTtBQUNULHFHQUFBLFNBQVMsT0FBQTtBQUNULDJHQUFBLGVBQWUsT0FBQTtBQUNmLDBHQUFBLGNBQWMsT0FBQTtBQUdoQiw2REFBMkQ7QUFBbEQseUhBQUEsa0JBQWtCLE9BQUEiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICdiaXRjb2luanMtbGliJztcblxuZXhwb3J0ICogYXMgYnVmZmVydXRpbHMgZnJvbSAnYml0Y29pbmpzLWxpYi9zcmMvYnVmZmVydXRpbHMnO1xuXG5leHBvcnQgKiBhcyBiaXRnbyBmcm9tICcuL2JpdGdvJztcblxuZXhwb3J0ICogYXMgYWRkcmVzcyBmcm9tICcuL2FkZHJlc3MnO1xuXG5leHBvcnQgKiBhcyBhZGRyZXNzRm9ybWF0IGZyb20gJy4vYWRkcmVzc0Zvcm1hdCc7XG5cbmV4cG9ydCAqIGFzIGNsYXNzaWZ5IGZyb20gJy4vY2xhc3NpZnknO1xuXG5leHBvcnQgKiBhcyB0YXByb290IGZyb20gJy4vdGFwcm9vdCc7XG5cbmV4cG9ydCAqIGFzIHRlc3R1dGlsIGZyb20gJy4vdGVzdHV0aWwnO1xuXG5pbXBvcnQgeyBiaXAzMiwgQklQMzJBUEksIEJJUDMySW50ZXJmYWNlLCBlY2MsIEVDUGFpciwgRUNQYWlySW50ZXJmYWNlLCBFQ1BhaXJBUEkgfSBmcm9tICdAYml0Z28tYmV0YS9zZWNwMjU2azEnO1xuXG5leHBvcnQge1xuICAvLyBAZGVwcmVjYXRlZCB1c2UgaW1wb3J0IHsgYmlwMzIgfSBmcm9tICdAYml0Z28tYmV0YS9zZWNwMjU2azEnIGluc3RlYWRcbiAgYmlwMzIsXG4gIC8vIEBkZXByZWNhdGVkIHVzZSBpbXBvcnQgeyBCSVAzMkFQSSB9IGZyb20gJ0BiaXRnby1iZXRhL3NlY3AyNTZrMScgaW5zdGVhZFxuICBCSVAzMkFQSSxcbiAgLy8gQGRlcHJlY2F0ZWQgdXNlIGltcG9ydCB7IEJJUDMySW50ZXJmYWNlIH0gZnJvbSAnQGJpdGdvLWJldGEvc2VjcDI1NmsxJyBpbnN0ZWFkXG4gIEJJUDMySW50ZXJmYWNlLFxuICAvLyBAZGVwcmVjYXRlZCB1c2UgaW1wb3J0IHsgZWNjIH0gZnJvbSAnQGJpdGdvLWJldGEvc2VjcDI1NmsxJyBpbnN0ZWFkXG4gIGVjYyxcbiAgLy8gQGRlcHJlY2F0ZWQgdXNlIGltcG9ydCB7IEVDUGFpciB9IGZyb20gJ0BiaXRnby1iZXRhL3NlY3AyNTZrMScgaW5zdGVhZFxuICBFQ1BhaXIsXG4gIC8vIEBkZXByZWNhdGVkIHVzZSBpbXBvcnQgeyBFQ1BhaXJBUEkgfSBmcm9tICdAYml0Z28tYmV0YS9zZWNwMjU2azEnIGluc3RlYWRcbiAgRUNQYWlyQVBJLFxuICAvLyBAZGVwcmVjYXRlZCB1c2UgaW1wb3J0IHsgRUNQYWlySW50ZXJmYWNlIH0gZnJvbSAnQGJpdGdvLWJldGEvc2VjcDI1NmsxJyBpbnN0ZWFkXG4gIEVDUGFpckludGVyZmFjZSxcbn07XG5cbmV4cG9ydCAqIGFzIHAydHJQYXltZW50cyBmcm9tICcuL3BheW1lbnRzJztcblxuZXhwb3J0IHtcbiAgbmV0d29ya3MsXG4gIE5ldHdvcmssXG4gIE5ldHdvcmtOYW1lLFxuICBnZXROZXR3b3JrTGlzdCxcbiAgaXNWYWxpZE5ldHdvcmssXG4gIGdldE5ldHdvcmtOYW1lLFxuICBnZXRNYWlubmV0LFxuICBnZXRUZXN0bmV0LFxuICBpc01haW5uZXQsXG4gIGlzVGVzdG5ldCxcbiAgc3VwcG9ydHNUYXByb290LFxuICBzdXBwb3J0c1NlZ3dpdCxcbn0gZnJvbSAnLi9uZXR3b3Jrcyc7XG5cbmV4cG9ydCB7IFRyYW5zYWN0aW9uQnVpbGRlciB9IGZyb20gJy4vdHJhbnNhY3Rpb25fYnVpbGRlcic7XG5cbmV4cG9ydCB7IE5ldHdvcmsgYXMgQml0Y29pbkpTTmV0d29yayB9IGZyb20gJ2JpdGNvaW5qcy1saWInO1xuIl19
@@ -1 +1 @@
1
- {"version":3,"file":"p2tr.d.ts","sourceRoot":"","sources":["../../../src/payments/p2tr.ts"],"names":[],"mappings":"AAIA,OAAO,EAAqB,OAAO,EAAE,WAAW,EAAQ,MAAM,eAAe,CAAC;AAiC9E,wBAAgB,IAAI,CAAC,CAAC,EAAE,OAAO,EAAE,IAAI,CAAC,EAAE,WAAW,GAAG,OAAO,CA+U5D"}
1
+ {"version":3,"file":"p2tr.d.ts","sourceRoot":"","sources":["../../../src/payments/p2tr.ts"],"names":[],"mappings":"AAIA,OAAO,EAAqB,OAAO,EAAE,WAAW,EAAQ,MAAM,eAAe,CAAC;AA2B9E,wBAAgB,IAAI,CAAC,CAAC,EAAE,OAAO,EAAE,IAAI,CAAC,EAAE,WAAW,GAAG,OAAO,CA+U5D"}
@@ -6,8 +6,7 @@ exports.p2tr = p2tr;
6
6
  const networks_1 = require("../networks");
7
7
  const bitcoinjs_lib_1 = require("bitcoinjs-lib");
8
8
  const taproot = require("../taproot");
9
- const noble_ecc_1 = require("../noble_ecc");
10
- const secp256k1_1 = require("@noble/curves/secp256k1");
9
+ const secp256k1_1 = require("@bitgo-beta/secp256k1");
11
10
  const typef = require('typeforce');
12
11
  const OPS = bitcoinjs_lib_1.script.OPS;
13
12
  const { bech32m } = require('bech32');
@@ -19,14 +18,7 @@ const BITCOIN_NETWORK = networks_1.networks.bitcoin;
19
18
  const H = Buffer.from('50929b74c1a04954b78b4b6035e97a5e078a5a0f28ec96d547bfee9ace803ac0', 'hex');
20
19
  const EMPTY_BUFFER = Buffer.alloc(0);
21
20
  function isPlainPubkey(pubKey) {
22
- if (pubKey.length !== 33)
23
- return false;
24
- try {
25
- return !!secp256k1_1.secp256k1.ProjectivePoint.fromHex(pubKey);
26
- }
27
- catch (e) {
28
- return false;
29
- }
21
+ return secp256k1_1.ecc.isPoint(pubKey);
30
22
  }
31
23
  function isPlainPubkeys(pubkeys) {
32
24
  return pubkeys.every(isPlainPubkey);
@@ -119,7 +111,7 @@ function p2tr(a, opts) {
119
111
  else if (a.pubkeys && a.pubkeys.length > 1) {
120
112
  // multiple pubkeys
121
113
  if (isPlainPubkeys(a.pubkeys)) {
122
- return Buffer.from(noble_ecc_1.musig.getXOnlyPubkey(noble_ecc_1.musig.keyAgg(a.pubkeys)));
114
+ return Buffer.from(secp256k1_1.musig.getXOnlyPubkey(secp256k1_1.musig.keyAgg(a.pubkeys)));
123
115
  }
124
116
  return Buffer.from(taproot.aggregateMuSigPubkeys(ecc, a.pubkeys));
125
117
  }
@@ -346,4 +338,4 @@ function p2tr(a, opts) {
346
338
  }
347
339
  return Object.assign(o, a);
348
340
  }
349
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicDJ0ci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9wYXltZW50cy9wMnRyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSwyREFBMkQ7QUFDM0QsaUVBQWlFOztBQW9DakUsb0JBK1VDO0FBalhELDBDQUF1QztBQUN2QyxpREFBOEU7QUFDOUUsc0NBQXNDO0FBQ3RDLDRDQUFxQztBQUNyQyx1REFBNEQ7QUFFNUQsTUFBTSxLQUFLLEdBQUcsT0FBTyxDQUFDLFdBQVcsQ0FBQyxDQUFDO0FBQ25DLE1BQU0sR0FBRyxHQUFHLHNCQUFPLENBQUMsR0FBRyxDQUFDO0FBRXhCLE1BQU0sRUFBRSxPQUFPLEVBQUUsR0FBRyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUM7QUFFdEMsTUFBTSxlQUFlLEdBQUcsbUJBQVEsQ0FBQyxPQUFPLENBQUM7QUFFekM7OztHQUdHO0FBQ0gsTUFBTSxDQUFDLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxrRUFBa0UsRUFBRSxLQUFLLENBQUMsQ0FBQztBQUNqRyxNQUFNLFlBQVksR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBRXJDLFNBQVMsYUFBYSxDQUFDLE1BQWtCO0lBQ3ZDLElBQUksTUFBTSxDQUFDLE1BQU0sS0FBSyxFQUFFO1FBQUUsT0FBTyxLQUFLLENBQUM7SUFDdkMsSUFBSSxDQUFDO1FBQ0gsT0FBTyxDQUFDLENBQUMscUJBQUksQ0FBQyxlQUFlLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ2hELENBQUM7SUFBQyxPQUFPLENBQUMsRUFBRSxDQUFDO1FBQ1gsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0FBQ0gsQ0FBQztBQUVELFNBQVMsY0FBYyxDQUFDLE9BQWlCO0lBQ3ZDLE9BQU8sT0FBTyxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsQ0FBQztBQUN0QyxDQUFDO0FBRUQsZ0NBQWdDO0FBQ2hDLFNBQWdCLElBQUksQ0FBQyxD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QUFDO1lBRUQsSUFBSSxDQUFDLENBQUMsWUFBWSxJQUFJLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsYUFBYSxDQUFDLFlBQVksQ0FBQyxFQUFFLENBQUM7Z0JBQ3pFLE1BQU0sSUFBSSxTQUFTLENBQUMsd0JBQXdCLENBQUMsQ0FBQztZQUNoRCxDQUFDO1lBRUQsSUFBSSxDQUFDLENBQUMsS0FBSyxJQUFJLGFBQWEsQ0FBQyxLQUFLLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztnQkFDM0UsTUFBTSxJQUFJLFNBQVMsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1lBQ3hDLENBQUM7WUFFRCxJQUFJLFlBQVksSUFBSSxZQUFZLENBQUMsTUFBTSxJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsYUFBYSxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUM7Z0JBQ2hHLE1BQU0sSUFBSSxTQUFTLENBQUMsb0JBQW9CLENBQUMsQ0FBQztZQUM1QyxDQUFDO1FBQ0gsQ0FBQztJQUNILENBQUM7SUFFRCxPQUFPLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQzdCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBTZWdXaXQgdmVyc2lvbiAxIFAyVFIgb3V0cHV0IHR5cGUgZm9yIFRhcHJvb3QgZGVmaW5lZCBpblxuLy8gaHR0cHM6Ly9naXRodWIuY29tL2JpdGNvaW4vYmlwcy9ibG9iL21hc3Rlci9iaXAtMDM0MS5tZWRpYXdpa2lcblxuaW1wb3J0IHsgbmV0d29ya3MgfSBmcm9tICcuLi9uZXR3b3Jrcyc7XG5pbXBvcnQgeyBzY3JpcHQgYXMgYnNjcmlwdCwgUGF5bWVudCwgUGF5bWVudE9wdHMsIGxhenkgfSBmcm9tICdiaXRjb2luanMtbGliJztcbmltcG9ydCAqIGFzIHRhcHJvb3QgZnJvbSAnLi4vdGFwcm9vdCc7XG5pbXBvcnQgeyBtdXNpZyB9IGZyb20gJy4uL25vYmxlX2VjYyc7XG5pbXBvcnQgeyBzZWNwMjU2azEgYXMgbmVjYyB9IGZyb20gJ0Bub2JsZS9jdXJ2ZXMvc2VjcDI1NmsxJztcblxuY29uc3QgdHlwZWYgPSByZXF1aXJlKCd0eXBlZm9yY2UnKTtcbmNvbnN0IE9QUyA9IGJzY3JpcHQuT1BTO1xuXG5jb25zdCB7IGJlY2gzMm0gfSA9IHJlcXVpcmUoJ2JlY2gzMicpO1xuXG5jb25zdCBCSVRDT0lOX05FVFdPUksgPSBuZXR3b3Jrcy5iaXRjb2luO1xuXG4vKipcbiAqIEEgc2VjcDI1NmsxIHggY29vcmRpbmF0ZSB3aXRoIHVua25vd24gZGlzY3JldGUgbG9nYXJpdGhtIHVzZWQgZm9yIGVsaW1pbmF0aW5nXG4gKiBrZXlwYXRoIHNwZW5kcywgZXF1YWwgdG8gU0hBMjU2KHVuY29tcHJlc3NlZERFUihTRUNQMjU2SzFfR0VORVJBVE9SX1BPSU5UKSkuXG4gKi9cbmNvbnN0IEggPSBCdWZmZXIuZnJvbSgnNTA5MjliNzRjMWEwNDk1NGI3OGI0YjYwMzVlOTdhNWUwNzhhNWEwZjI4ZWM5NmQ1NDdiZmVlOWFjZTgwM2FjMCcsICdoZXgnKTtcbmNvbnN0IEVNUFRZX0JVRkZFUiA9IEJ1ZmZlci5hbGxvYygwKTtcblxuZnVuY3Rpb24gaXNQbGFpblB1YmtleShwdWJLZXk6IFVpbnQ4QXJyYXkpOiBib29sZWFuIHtcbiAgaWYgKHB1YktleS5sZW5ndGggIT09IDMzKSByZXR1cm4gZmFsc2U7XG4gIHRyeSB7XG4gICAgcmV0dXJuICEhbmVjYy5Qcm9qZWN0aXZlUG9pbnQuZnJvbUhleChwdWJLZXkpO1xuICB9IGNhdGNoIChlKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59XG5cbmZ1bmN0aW9uIGlzUGxhaW5QdWJrZXlzKHB1YmtleXM6IEJ1ZmZlcltdKSB7XG4gIHJldHVybiBwdWJrZXlzLmV2ZXJ5KGlzUGxhaW5QdWJrZXkpO1xufVxuXG4vLyBvdXRwdXQ6IE9QXzEge3dpdG5lc3NQcm9ncmFtfVxuZXhwb3J0IGZ1bmN0aW9uIHAydHIoYTogUGF5bWVudCwgb3B0cz86IFBheW1lbnRPcHRzKTogUGF5bWVudCB7XG4gIGlmICghYS5hZGRyZXNzICYmICFhLnB1YmtleSAmJiAhYS5wdWJrZXlzICYmICEoYS5yZWRlZW1zICYmIGEucmVkZWVtcy5sZW5ndGgpICYmICFhLm91dHB1dCAmJiAhYS53aXRuZXNzKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignTm90IGVub3VnaCBkYXRhJyk7XG4gIH1cbiAgb3B0cyA9IE9iamVjdC5hc3NpZ24oeyB2YWxpZGF0ZTogdHJ1ZSB9LCBvcHRzIHx8IHt9KTtcblxuICBpZiAoIW9wdHMuZWNjTGliKSB0aHJvdyBuZXcgRXJyb3IoJ0VDQyBMaWJyYXJ5IGlzIHJlcXVpcmVkIGZvciBwMnRyLicpO1xuICBjb25zdCBlY2MgPSBvcHRzLmVjY0xpYjtcblxuICB0eXBlZihcbiAgICB7XG4gICAgICBuZXR3b3JrOiB0eXBlZi5tYXliZSh0eXBlZi5PYmplY3QpLFxuXG4gICAgICBhZGRyZXNzOiB0eXBlZi5tYXliZSh0eXBlZi5TdHJpbmcpLFxuICAgICAgLy8gdGhlIG91dHB1dCBzY3JpcHQgc2hvdWxkIGJlIGEgZml4ZWQgMzQgYnl0ZXMuXG4gICAgICAvLyAxIGJ5dGUgZm9yIE9QXzEgaW5kaWNhdGluZyBzZWd3aXQgdmVyc2lvbiAxLCBvbmUgYnl0ZSBmb3IgMHgyMCB0byBwdXNoXG4gICAgICAvLyB0aGUgbmV4dCAzMiBieXRlcywgZm9sbG93ZWQgYnkgdGhlIDMyIGJ5dGUgd2l0bmVzcyBwcm9ncmFtXG4gICAgICBvdXRwdXQ6IHR5cGVmLm1heWJlKHR5cGVmLkJ1ZmZlck4oMzQpKSxcbiAgICAgIC8vIGEgc2luZ2xlIHB1YmtleVxuICAgICAgcHVia2V5OiB0eXBlZi5tYXliZShlY2MuaXNYT25seVBvaW50KSxcbiAgICAgIC8vIHRoZSBwdWIga2V5KHMpIHVzZWQgZm9yIGtleXBhdGggc2lnbmluZy5cbiAgICAgIC8vIGFnZ3JlZ2F0ZWQgd2l0aCBNdVNpZzIqIGlmID4gMVxuICAgICAgcHVia2V5czogdHlwZWYubWF5YmUodHlwZWYuYW55T2YodHlwZWYuYXJyYXlPZihlY2MuaXNYT25seVBvaW50KSwgdHlwZWYuYXJyYXlPZihpc1BsYWluUHVia2V5KSkpLFxuXG4gICAgICByZWRlZW1zOiB0eXBlZi5tYXliZShcbiAgICAgICAgdHlwZWYuYXJyYXlPZih7XG4gICAgICAgICAgbmV0d29yazogdHlwZWYubWF5YmUodHlwZWYuT2JqZWN0KSxcbiAgICAgICAgICBvdXRwdXQ6IHR5cGVmLm1heWJlKHR5cGVmLkJ1ZmZlciksXG4gICAgICAgICAgd2VpZ2h0OiB0eXBlZi5tYXliZSh0eXBlZi5OdW1iZXIpLFxuICAgICAgICAgIGRlcHRoOiB0eXBlZi5tYXliZSh0eXBlZi5OdW1iZXIpLFxuICAgICAgICAgIHdpdG5lc3M6IHR5cGVmLm1heWJlKHR5cGVmLmFycmF5T2YodHlwZWYuQnVmZmVyKSksXG4gICAgICAgIH0pXG4gICAgICApLFxuICAgICAgcmVkZWVtSW5kZXg6IHR5cGVmLm1heWJlKHR5cGVmLk51bWJlciksIC8vIFNlbGVjdHMgdGhlIHJlZGVlbSB0byBzcGVuZFxuXG4gICAgICBzaWduYXR1cmU6IHR5cGVmLm1heWJlKGJzY3JpcHQuaXNDYW5vbmljYWxTY2hub3JyU2lnbmF0dXJlKSxcbiAgICAgIGNvbnRyb2xCbG9jazogdHlwZWYubWF5YmUodHlwZWYuQnVmZmVyKSxcbiAgICAgIGFubmV4OiB0eXBlZi5tYXliZSh0eXBlZi5CdWZmZXIpLFxuICAgIH0sXG4gICAgYVxuICApO1xuXG4gIGNvbnN0IF9hZGRyZXNzID0gbGF6eS52YWx1ZSgoKSA9PiB7XG4gICAgaWYgKCFhLmFkZHJlc3MpIHJldHVybiB1bmRlZmluZWQ7XG5cbiAgICBjb25zdCByZXN1bHQgPSBiZWNoMzJtLmRlY29kZShhLmFkZHJlc3MpO1xuICAgIGNvbnN0IHZlcnNpb24gPSByZXN1bHQud29yZHMuc2hpZnQoKTtcbiAgICBjb25zdCBkYXRhID0gYmVjaDMybS5mcm9tV29yZHMocmVzdWx0LndvcmRzKTtcbiAgICByZXR1cm4ge1xuICAgICAgdmVyc2lvbixcbiAgICAgIHByZWZpeDogcmVzdWx0LnByZWZpeCxcbiAgICAgIGRhdGE6IEJ1ZmZlci5mcm9tKGRhdGEpLFxuICAgIH07XG4gIH0pO1xuICBjb25zdCBfb3V0cHV0UHVia2V5ID0gbGF6eS52YWx1ZSgoKSA9PiB7XG4gICAgLy8gd2UgcmVtb3ZlIHRoZSBmaXJzdCB0d28gYnl0ZXMgKE9QXzEgMHgyMCkgZnJvbSB0aGUgb3V0cHV0IHNjcmlwdCB0b1xuICAgIC8vIGV4dHJhY3QgdGhlIDMyIGJ5dGUgdGFwcm9vdCBwdWJrZXkgKGFrYSB3aXRuZXNzIHByb2dyYW0pXG4gICAgcmV0dXJuIGEub3V0cHV0ICYmIGEub3V0cHV0LnNsaWNlKDIpO1xuICB9KTtcblxuICBjb25zdCBuZXR3b3JrID0gYS5uZXR3b3JrIHx8IEJJVENPSU5fTkVUV09SSztcblxuICBjb25zdCBvOiBQYXltZW50ID0geyBuZXR3b3JrIH07XG5cbiAgY29uc3QgX3RhcHJvb3RQYXRocyA9IGxhenkudmFsdWUoKCkgPT4ge1xuICAgIGlmICghYS5yZWRlZW1zKSByZXR1cm47XG4gICAgaWYgKG8udGFwVHJlZSkge1xuICAgICAgcmV0dXJuIHRhcHJvb3QuZ2V0RGVwdGhGaXJzdFRhcHRyZWUoby50YXBUcmVlKTtcbiAgICB9XG4gICAgY29uc3Qgb3V0cHV0czogQXJyYXk8QnVmZmVyIHwgdW5kZWZpbmVkPiA9IGEucmVkZWVtcy5tYXAoKHsgb3V0cHV0IH0pID0+IG91dHB1dCk7XG4gICAgaWYgKCFvdXRwdXRzLmV2ZXJ5KChvdXRwdXQpID0+IG91dHB1dCkpIHJldHVybjtcbiAgICByZXR1cm4gdGFwcm9vdC5nZXRIdWZmbWFuVGFwdHJlZShcbiAgICAgIG91dHB1dHMgYXMgQnVmZmVyW10sXG4gICAgICBhLnJlZGVlbXMubWFwKCh7IHdlaWdodCB9KSA9PiB3ZWlnaHQpXG4gICAgKTtcbiAgfSk7XG4gIGNvbnN0IF9wYXJzZWRXaXRuZXNzID0gbGF6eS52YWx1ZSgoKSA9PiB7XG4gICAgaWYgKCFhLndpdG5lc3MpIHJldHVybjtcbiAgICByZXR1cm4gdGFwcm9vdC5wYXJzZVRhcHJvb3RXaXRuZXNzKGEud2l0bmVzcyk7XG4gIH0pO1xuICBjb25zdCBfcGFyc2VkQ29udHJvbEJsb2NrID0gbGF6eS52YWx1ZSgoKSA9PiB7XG4gICAgLy8gQ2FuJ3QgdXNlIG8uY29udHJvbEJsb2NrLCBiZWNhdXNlIGl0IGNvdWxkIGJlIGNpcmN1bGFyXG4gICAgaWYgKGEuY29udHJvbEJsb2NrKSByZXR1cm4gdGFwcm9vdC5wYXJzZUNvbnRyb2xCbG9jayhlY2MsIGEuY29udHJvbEJsb2NrKTtcbiAgICBjb25zdCBwYXJzZWRXaXRuZXNzID0gX3BhcnNlZFdpdG5lc3MoKTtcbiAgICBpZiAocGFyc2VkV2l0bmVzcyAmJiBwYXJzZWRXaXRuZXNzLnNwZW5kVHlwZSA9PT0gJ1NjcmlwdCcpIHtcbiAgICAgIHJldHVybiB0YXByb290LnBhcnNlQ29udHJvbEJsb2NrKGVjYywgcGFyc2VkV2l0bmVzcy5jb250cm9sQmxvY2spO1xuICAgIH1cbiAgfSk7XG5cbiAgbGF6eS5wcm9wKG8sICdpbnRlcm5hbFB1YmtleScsICgpID0+IHtcbiAgICBpZiAoYS5wdWJrZXkpIHtcbiAgICAgIC8vIHNpbmdsZSBwdWJrZXlcbiAgICAgIHJldHVybiBhLnB1YmtleTtcbiAgICB9IGVsc2UgaWYgKGEucHVia2V5cyAmJiBhLnB1YmtleXMubGVuZ3RoID09PSAxKSB7XG4gICAgICByZXR1cm4gYS5wdWJrZXlzWzBdO1xuICAgIH0gZWxzZSBpZiAoYS5wdWJrZXlzICYmIGEucHVia2V5cy5sZW5ndGggPiAxKSB7XG4gICAgICAvLyBtdWx0aXBsZSBwdWJrZXlzXG4gICAgICBpZiAoaXNQbGFpblB1YmtleXMoYS5wdWJrZXlzKSkge1xuICAgICAgICByZXR1cm4gQnVmZmVyLmZyb20obXVzaWcuZ2V0WE9ubHlQdWJrZXkobXVzaWcua2V5QWdnKGEucHVia2V5cykpKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIEJ1ZmZlci5mcm9tKHRhcHJvb3QuYWdncmVnYXRlTXVTaWdQdWJrZXlzKGVjYywgYS5wdWJrZXlzKSk7XG4gICAgfSBlbHNlIGlmIChfcGFyc2VkQ29udHJvbEJsb2NrKCkpIHtcbiAgICAgIHJldHVybiBfcGFyc2VkQ29udHJvbEJsb2NrKCk/LmludGVybmFsUHVia2V5O1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBJZiB0aGVyZSBpcyBubyBrZXkgcGF0aCBzcGVuZGluZyBjb25kaXRpb24sIHdlIHVzZSBhbiBpbnRlcm5hbCBrZXkgd2l0aCB1bmtub3duIHNlY3JldCBrZXkuXG4gICAgICAvLyBUT0RPOiBJbiBvcmRlciB0byBhdm9pZCBsZWFraW5nIHRoZSBpbmZvcm1hdGlvbiB0aGF0IGtleSBwYXRoIHNwZW5kaW5nIGlzIG5vdCBwb3NzaWJsZSBpdFxuICAgICAgLy8gaXMgcmVjb21tZW5kZWQgdG8gcGljayBhIGZyZXNoIGludGVnZXIgciBpbiB0aGUgcmFuZ2UgMC4uLm4tMSB1bmlmb3JtbHkgYXQgcmFuZG9tIGFuZCB1c2VcbiAgICAgIC8vIEggKyByRyBhcyBpbnRlcm5hbCBrZXkuIEl0IGlzIHBvc3NpYmxlIHRvIHByb3ZlIHRoYXQgdGhpcyBpbnRlcm5hbCBrZXkgZG9lcyBub3QgaGF2ZSBhXG4gICAgICAvLyBrbm93biBkaXNjcmV0ZSBsb2dhcml0aG0gd2l0aCByZXNwZWN0IHRvIEcgYnkgcmV2ZWFsaW5nIHIgdG8gYSB2ZXJpZmllciB3aG8gY2FuIHRoZW5cbiAgICAgIC8vIHJlY29uc3RydWN0IGhvdyB0aGUgaW50ZXJuYWwga2V5IHdhcyBjcmVhdGVkLlxuICAgICAgcmV0dXJuIEg7XG4gICAgfVxuICB9KTtcblxuICBsYXp5LnByb3AobywgJ3RhcHRyZWVSb290JywgKCkgPT4ge1xuICAgIGNvbnN0IHBhcnNlZENvbnRyb2xCbG9jayA9IF9wYXJzZWRDb250cm9sQmxvY2soKTtcbiAgICBjb25zdCBwYXJzZWRXaXRuZXNzID0gX3BhcnNlZFdpdG5lc3MoKTtcbiAgICBsZXQgdGFwdHJlZVJvb3Q7XG4gICAgLy8gUHJlZmVyIHRvIGdldCB0aGUgcm9vdCB2aWEgdGhlIGNvbnRyb2wgYmxvY2sgYmVjYXVzZSBub3QgYWxsIHJlZGVlbXMgbWF5XG4gICAgLy8gYmUgYXZhaWxhYmxlXG4gICAgaWYgKHBhcnNlZENvbnRyb2xCbG9jaykge1xuICAgICAgbGV0IHRhcHNjcmlwdDtcbiAgICAgIGlmIChwYXJzZWRXaXRuZXNzICYmIHBhcnNlZFdpdG5lc3Muc3BlbmRUeXBlID09PSAnU2NyaXB0Jykge1xuICAgICAgICB0YXBzY3JpcHQgPSBwYXJzZWRXaXRuZXNzLnRhcHNjcmlwdDtcbiAgICAgIH0gZWxzZSBpZiAoby5yZWRlZW0gJiYgby5yZWRlZW0ub3V0cHV0KSB7XG4gICAgICAgIHRhcHNjcmlwdCA9IG8ucmVkZWVtLm91dHB1dDtcbiAgICAgIH1cbiAgICAgIGlmICh0YXBzY3JpcHQpIHRhcHRyZWVSb290ID0gdGFwcm9vdC5nZXRUYXB0cmVlUm9vdChlY2MsIHBhcnNlZENvbnRyb2xCbG9jaywgdGFwc2NyaXB0KTtcbiAgICB9XG4gICAgaWYgKCF0YXB0cmVlUm9vdCAmJiBfdGFwcm9vdFBhdGhzKCkpIHRhcHRyZWVSb290ID0gX3RhcHJvb3RQYXRocygpPy5yb290O1xuXG4gICAgcmV0dXJuIHRhcHRyZWVSb290O1xuICB9KTtcblxuICBjb25zdCBfdGFwcm9vdFB1YmtleSA9IGxhenkudmFsdWUoKCkgPT4ge1xuICAgIGNvbnN0IHRhcHRyZWVSb290ID0gby50YXB0cmVlUm9vdDtcbiAgICAvLyBSZWZ1c2UgdG8gY3JlYXRlIGFuIHVuc3BlbmRhYmxlIGtleVxuICAgIGlmICghYS5wdWJrZXkgJiYgIShhLnB1YmtleXMgJiYgYS5wdWJrZXlzLmxlbmd0aCkgJiYgIWEucmVkZWVtcyAmJiAhdGFwdHJlZVJvb3QpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgcmV0dXJuIHRhcHJvb3QudGFwVHdlYWtQdWJrZXkoZWNjLCBvPy5pbnRlcm5hbFB1YmtleSBhcyBVaW50OEFycmF5LCB0YXB0cmVlUm9vdCk7XG4gIH0pO1xuXG4gIGxhenkucHJvcChvLCAndGFwVHJlZScsICgpID0+IHtcbiAgICBpZiAoIWEucmVkZWVtcykgcmV0dXJuO1xuICAgIGlmIChhLnJlZGVlbXMuZmluZCgoeyBkZXB0aCB9KSA9PiBkZXB0aCA9PT0gdW5kZWZpbmVkKSkge1xuICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICAnRGVwcmVjYXRpb24gV2FybmluZzogV2VpZ2h0LWJhc2VkIHRhcCB0cmVlIGNvbnN0cnVjdGlvbiB3aWxsIGJlIHJlbW92ZWQgaW4gdGhlIGZ1dHVyZS4gJyArXG4gICAgICAgICAgJ1BsZWFzZSB1c2UgZGVwdGgtZmlyc3QgY29kaW5nIGFzIHNwZWNpZmllZCBpbiBCSVAtMDM3MS4nXG4gICAgICApO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoIWEucmVkZWVtcy5ldmVyeSgoeyBvdXRwdXQgfSkgPT4gb3V0cHV0KSkgcmV0dXJuO1xuICAgIHJldHVybiB7XG4gICAgICBsZWF2ZXM6IGEucmVkZWVtcy5tYXAoKHsgb3V0cHV0LCBkZXB0aCB9KSA9PiB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgc2NyaXB0OiBvdXRwdXQsXG4gICAgICAgICAgbGVhZlZlcnNpb246IHRhcHJvb3QuSU5JVElBTF9UQVBTQ1JJUFRfVkVSU0lPTixcbiAgICAgICAgICBkZXB0aCxcbiAgICAgICAgfTtcbiAgICAgIH0pLFxuICAgIH07XG4gIH0pO1xuICBsYXp5LnByb3AobywgJ2FkZHJlc3MnLCAoKSA9PiB7XG4gICAgY29uc3QgcHVia2V5ID0gX291dHB1dFB1YmtleSgpIHx8IChfdGFwcm9vdFB1YmtleSgpICYmIF90YXByb290UHVia2V5KCk/LnhPbmx5UHVia2V5KTtcbiAgICAvLyBvbmx5IGVuY29kZSB0aGUgMzIgYnl0ZSB3aXRuZXNzIHByb2dyYW0gYXMgYmVjaDMybVxuICAgIGNvbnN0IHdvcmRzID0gYmVjaDMybS50b1dvcmRzKHB1YmtleSk7XG4gICAgd29yZHMudW5zaGlmdCgweDAxKTtcbiAgICByZXR1cm4gYmVjaDMybS5lbmNvZGUobmV0d29yay5iZWNoMzIsIHdvcmRzKTtcbiAgfSk7XG4gIGxhenkucHJvcChvLCAnY29udHJvbEJsb2NrJywgKCkgPT4ge1xuICAgIGNvbnN0IHBhcnNlZFdpdG5lc3MgPSBfcGFyc2VkV2l0bmVzcygpO1xuICAgIGlmIChwYXJzZWRXaXRuZXNzICYmIHBhcnNlZFdpdG5lc3Muc3BlbmRUeXBlID09PSAnU2NyaXB0Jykge1xuICAgICAgcmV0dXJuIHBhcnNlZFdpdG5lc3MuY29udHJvbEJsb2NrO1xuICAgIH1cbiAgICBjb25zdCB0YXByb290UHVia2V5ID0gX3RhcHJvb3RQdWJrZXkoKTtcbiAgICBjb25zdCB0YXByb290UGF0aHMgPSBfdGFwcm9vdFBhdGhzKCk7XG4gICAgaWYgKCF0YXByb290UGF0aHMgfHwgIXRhcHJvb3RQdWJrZXkgfHwgYS5yZWRlZW1JbmRleCA9PT0gdW5kZWZpbmVkKSByZXR1cm47XG4gICAgcmV0dXJuIHRhcHJvb3QuZ2V0Q29udHJvbEJsb2NrKHRhcHJvb3RQdWJrZXkucGFyaXR5LCBvLmludGVybmFsUHVia2V5ISwgdGFwcm9vdFBhdGhzLnBhdGhzW2EucmVkZWVtSW5kZXhdKTtcbiAgfSk7XG4gIGxhenkucHJvcChvLCAnc2lnbmF0dXJlJywgKCkgPT4ge1xuICAgIGNvbnN0IHBhcnNlZFdpdG5lc3MgPSBfcGFyc2VkV2l0bmVzcygpO1xuICAgIGlmIChwYXJzZWRXaXRuZXNzICYmIHBhcnNlZFdpdG5lc3Muc3BlbmRUeXBlID09PSAnS2V5Jykge1xuICAgICAgcmV0dXJuIHBhcnNlZFdpdG5lc3Muc2lnbmF0dXJlO1xuICAgIH1cbiAgfSk7XG4gIGxhenkucHJvcChvLCAnYW5uZXgnLCAoKSA9PiB7XG4gICAgaWYgKCFfcGFyc2VkV2l0bmVzcygpKSByZXR1cm47XG4gICAgcmV0dXJuIF9wYXJzZWRXaXRuZXNzKCkhLmFubmV4O1xuICB9KTtcbiAgbGF6eS5wcm9wKG8sICdvdXRwdXQnLCAoKSA9PiB7XG4gICAgaWYgKGEuYWRkcmVzcykge1xuICAgICAgY29uc3QgeyBkYXRhIH0gPSBfYWRkcmVzcygpITtcbiAgICAgIHJldHVybiBic2NyaXB0LmNvbXBpbGUoW09QUy5PUF8xLCBkYXRhXSk7XG4gICAgfVxuXG4gICAgY29uc3QgdGFwcm9vdFB1YmtleSA9IF90YXByb290UHVia2V5KCk7XG4gICAgaWYgKCF0YXByb290UHVia2V5KSByZXR1cm47XG5cbiAgICAvLyBPUF8xIGluZGljYXRlcyBzZWd3aXQgdmVyc2lvbiAxXG4gICAgcmV0dXJuIGJzY3JpcHQuY29tcGlsZShbT1BTLk9QXzEsIEJ1ZmZlci5mcm9tKHRhcHJvb3RQdWJrZXkueE9ubHlQdWJrZXkpXSk7XG4gIH0pO1xuICBsYXp5LnByb3AobywgJ3dpdG5lc3MnLCAoKSA9PiB7XG4gICAgaWYgKCFhLnJlZGVlbXMpIHtcbiAgICAgIGlmIChhLnNpZ25hdHVyZSkgcmV0dXJuIFthLnNpZ25hdHVyZV07IC8vIEtleXBhdGggc3BlbmRcbiAgICAgIHJldHVybjtcbiAgICB9IGVsc2UgaWYgKCFvLnJlZGVlbSkge1xuICAgICAgcmV0dXJuOyAvLyBObyBjaG9zZW4gcmVkZWVtIHNjcmlwdCwgY2FuJ3QgbWFrZSB3aXRuZXNzXG4gICAgfSBlbHNlIGlmICghby5jb250cm9sQmxvY2spIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBsZXQgcmVkZWVtV2l0bmVzcztcbiAgICAvLyBzb21lIGNhbGxlcnMgbWF5IHByb3ZpZGUgd2l0bmVzcyBlbGVtZW50cyBpbiB0aGUgaW5wdXQgc2NyaXB0XG4gICAgaWYgKG8ucmVkZWVtLmlucHV0ICYmIG8ucmVkZWVtLmlucHV0Lmxlbmd0aCA+IDAgJiYgby5yZWRlZW0ub3V0cHV0ICYmIG8ucmVkZWVtLm91dHB1dC5sZW5ndGggPiAwKSB7XG4gICAgICAvLyB0cmFuc2Zvcm0gcmVkZWVtIGlucHV0IHRvIHdpdG5lc3Mgc3RhY2tcbiAgICAgIHJlZGVlbVdpdG5lc3MgPSBic2NyaXB0LnRvU3RhY2soYnNjcmlwdC5kZWNvbXBpbGUoby5yZWRlZW0uaW5wdXQpISk7XG5cbiAgICAgIC8vIGFzc2lnbnMgYSBuZXcgb2JqZWN0IHRvIG8ucmVkZWVtXG4gICAgICBvLnJlZGVlbXMhW2EucmVkZWVtSW5kZXghXSA9IE9iamVjdC5hc3NpZ24oeyB3aXRuZXNzOiByZWRlZW1XaXRuZXNzIH0sIG8ucmVkZWVtKTtcbiAgICAgIG8ucmVkZWVtLmlucHV0ID0gRU1QVFlfQlVGRkVSO1xuICAgIH0gZWxzZSBpZiAoby5yZWRlZW0ub3V0cHV0ICYmIG8ucmVkZWVtLm91dHB1dC5sZW5ndGggPiAwICYmIG8ucmVkZWVtLndpdG5lc3MgJiYgby5yZWRlZW0ud2l0bmVzcy5sZW5ndGggPiAwKSB7XG4gICAgICByZWRlZW1XaXRuZXNzID0gby5yZWRlZW0ud2l0bmVzcztcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHdpdG5lc3MgPSBbLi4ucmVkZWVtV2l0bmVzcywgby5yZWRlZW0ub3V0cHV0LCBvLmNvbnRyb2xCbG9ja107XG5cbiAgICBpZiAoYS5hbm5leCkge1xuICAgICAgd2l0bmVzcy5wdXNoKGEuYW5uZXgpO1xuICAgIH1cblxuICAgIHJldHVybiB3aXRuZXNzO1xuICB9KTtcbiAgbGF6eS5wcm9wKG8sICduYW1lJywgKCkgPT4ge1xuICAgIGNvbnN0IG5hbWVQYXJ0cyA9IFsncDJ0ciddO1xuICAgIHJldHVybiBuYW1lUGFydHMuam9pbignLScpO1xuICB9KTtcbiAgbGF6eS5wcm9wKG8sICdyZWRlZW0nLCAoKSA9PiB7XG4gICAgaWYgKGEucmVkZWVtcykge1xuICAgICAgaWYgKGEucmVkZWVtSW5kZXggPT09IHVuZGVmaW5lZCkgcmV0dXJuO1xuICAgICAgcmV0dXJuIGEucmVkZWVtc1thLnJlZGVlbUluZGV4XTtcbiAgICB9XG4gICAgY29uc3QgcGFyc2VkV2l0bmVzcyA9IF9wYXJzZWRXaXRuZXNzKCk7XG4gICAgaWYgKHBhcnNlZFdpdG5lc3MgJiYgcGFyc2VkV2l0bmVzcy5zcGVuZFR5cGUgPT09ICdTY3JpcHQnKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICB3aXRuZXNzOiBwYXJzZWRXaXRuZXNzLnNjcmlwdFNpZyxcbiAgICAgICAgb3V0cHV0OiBwYXJzZWRXaXRuZXNzLnRhcHNjcmlwdCxcbiAgICAgIH07XG4gICAgfVxuICB9KTtcblxuICAvLyBleHRlbmRlZCB2YWxpZGF0aW9uXG4gIGlmIChvcHRzLnZhbGlkYXRlKSB7XG4gICAgY29uc3QgdGFwcm9vdFB1YmtleSA9IF90YXByb290UHVia2V5KCk7XG5cbiAgICBpZiAoYS5vdXRwdXQpIHtcbiAgICAgIGlmIChhLm91dHB1dFswXSAhPT0gT1BTLk9QXzEgfHwgYS5vdXRwdXRbMV0gIT09IDB4MjApIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignT3V0cHV0IGlzIGludmFsaWQnKTtcbiAgICAgIH1cblxuICAgICAgLy8gaWYgd2UncmUgcGFzc2VkIGJvdGggYW4gb3V0cHV0IHNjcmlwdCBhbmQgYW4gYWRkcmVzcywgZW5zdXJlIHRoZXkgbWF0Y2hcbiAgICAgIGlmIChhLmFkZHJlc3MgJiYgX291dHB1dFB1YmtleSAmJiAhX291dHB1dFB1YmtleSgpPy5lcXVhbHMoX2FkZHJlc3MoKT8uZGF0YSBhcyBCdWZmZXIpKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ21pc21hdGNoIGJldHdlZW4gYWRkcmVzcyAmIG91dHB1dCcpO1xuICAgICAgfVxuXG4gICAgICAvLyBXcmFwcGluZyBgdGFwcm9vdFB1YmtleS54T25seVB1YmtleWAgaW4gQnVmZmVyIGJlY2F1c2Ugb2YgYSBwZWN1bGlhciBpc3N1ZSBpbiB0aGUgZnJvbnRlbmRcbiAgICAgIC8vIHdoZXJlIGEgcG9seWZpbGwgZm9yIEJ1ZmZlciBpcyB1c2VkLiBSZWZlcjogaHR0cHM6Ly9iaXRnb2luYy5hdGxhc3NpYW4ubmV0L2Jyb3dzZS9CRy02MTQyMFxuICAgICAgaWYgKHRhcHJvb3RQdWJrZXkgJiYgX291dHB1dFB1YmtleSAmJiAhX291dHB1dFB1YmtleSgpPy5lcXVhbHMoQnVmZmVyLmZyb20odGFwcm9vdFB1YmtleS54T25seVB1YmtleSkpKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ21pc21hdGNoIGJldHdlZW4gb3V0cHV0IGFuZCB0YXByb290IHB1YmtleScpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChhLmFkZHJlc3MpIHtcbiAgICAgIGlmICh0YXByb290UHVia2V5ICYmICFfYWRkcmVzcygpPy5kYXRhLmVxdWFscyhCdWZmZXIuZnJvbSh0YXByb290UHVia2V5LnhPbmx5UHVia2V5KSkpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignbWlzbWF0Y2ggYmV0d2VlbiBhZGRyZXNzIGFuZCB0YXByb290IHB1YmtleScpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IHBhcnNlZENvbnRyb2xCbG9jayA9IF9wYXJzZWRDb250cm9sQmxvY2soKTtcbiAgICBpZiAocGFyc2VkQ29udHJvbEJsb2NrKSB7XG4gICAgICBpZiAoIXBhcnNlZENvbnRyb2xCbG9jay5pbnRlcm5hbFB1YmtleS5lcXVhbHMobz8uaW50ZXJuYWxQdWJrZXkgYXMgVWludDhBcnJheSkpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignSW50ZXJuYWwgcHVia2V5IG1pc21hdGNoJyk7XG4gICAgICB9XG4gICAgICBpZiAodGFwcm9vdFB1YmtleSAmJiBwYXJzZWRDb250cm9sQmxvY2sucGFyaXR5ICE9PSB0YXByb290UHVia2V5LnBhcml0eSkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdQYXJpdHkgbWlzbWF0Y2gnKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoYS5yZWRlZW1zKSB7XG4gICAgICBpZiAoIWEucmVkZWVtcy5sZW5ndGgpIHRocm93IG5ldyBUeXBlRXJyb3IoJ0VtcHR5IHJlZGVlbXMnKTtcbiAgICAgIGlmIChhLnJlZGVlbUluZGV4ICE9PSB1bmRlZmluZWQgJiYgKGEucmVkZWVtSW5kZXggPCAwIHx8IGEucmVkZWVtSW5kZXggPj0gYS5yZWRlZW1zLmxlbmd0aCkpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignaW52YWxpZCByZWRlZW0gaW5kZXgnKTtcbiAgICAgIH1cbiAgICAgIGEucmVkZWVtcy5mb3JFYWNoKChyZWRlZW0pID0+IHtcbiAgICAgICAgaWYgKHJlZGVlbS5uZXR3b3JrICYmIHJlZGVlbS5uZXR3b3JrICE9PSBuZXR3b3JrKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignTmV0d29yayBtaXNtYXRjaCcpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBjb25zdCBjaG9zZW5SZWRlZW0gPSBhLnJlZGVlbXMgJiYgYS5yZWRlZW1JbmRleCAhPT0gdW5kZWZpbmVkICYmIGEucmVkZWVtc1thLnJlZGVlbUluZGV4XTtcblxuICAgIGNvbnN0IHBhcnNlZFdpdG5lc3MgPSBfcGFyc2VkV2l0bmVzcygpO1xuICAgIGlmIChwYXJzZWRXaXRuZXNzICYmIHBhcnNlZFdpdG5lc3Muc3BlbmRUeXBlID09PSAnS2V5Jykge1xuICAgICAgaWYgKGEuY29udHJvbEJsb2NrKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ3VuZXhwZWN0ZWQgY29udHJvbCBibG9jayBmb3Iga2V5IHBhdGgnKTtcbiAgICAgIH1cblxuICAgICAgaWYgKGEuc2lnbmF0dXJlICYmICFhLnNpZ25hdHVyZS5lcXVhbHMocGFyc2VkV2l0bmVzcy5zaWduYXR1cmUpKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ21pc21hdGNoIGJldHdlZW4gd2l0bmVzcyAmIHNpZ25hdHVyZScpO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAocGFyc2VkV2l0bmVzcyAmJiBwYXJzZWRXaXRuZXNzLnNwZW5kVHlwZSA9PT0gJ1NjcmlwdCcpIHtcbiAgICAgIGlmIChhLnNpZ25hdHVyZSkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCd1bmV4cGVjdGVkIHNpZ25hdHVyZSB3aXRoIHNjcmlwdCBwYXRoIHdpdG5lc3MnKTtcbiAgICAgIH1cblxuICAgICAgaWYgKGEuY29udHJvbEJsb2NrICYmICFhLmNvbnRyb2xCbG9jay5lcXVhbHMocGFyc2VkV2l0bmVzcy5jb250cm9sQmxvY2spKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ2NvbnRyb2wgYmxvY2sgbWlzbWF0Y2gnKTtcbiAgICAgIH1cblxuICAgICAgaWYgKGEuYW5uZXggJiYgcGFyc2VkV2l0bmVzcy5hbm5leCAmJiAhYS5hbm5leC5lcXVhbHMocGFyc2VkV2l0bmVzcy5hbm5leCkpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignYW5uZXggbWlzbWF0Y2gnKTtcbiAgICAgIH1cblxuICAgICAgaWYgKGNob3NlblJlZGVlbSAmJiBjaG9zZW5SZWRlZW0ub3V0cHV0ICYmICFjaG9zZW5SZWRlZW0ub3V0cHV0LmVxdWFscyhwYXJzZWRXaXRuZXNzLnRhcHNjcmlwdCkpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcigndGFwc2NyaXB0IG1pc21hdGNoJyk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIE9iamVjdC5hc3NpZ24obywgYSk7XG59XG4iXX0=
341
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicDJ0ci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9wYXltZW50cy9wMnRyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSwyREFBMkQ7QUFDM0QsaUVBQWlFOztBQThCakUsb0JBK1VDO0FBM1dELDBDQUF1QztBQUN2QyxpREFBOEU7QUFDOUUsc0NBQXNDO0FBQ3RDLHFEQUFtRDtBQUVuRCxNQUFNLEtBQUssR0FBRyxPQUFPLENBQUMsV0FBVyxDQUFDLENBQUM7QUFDbkMsTUFBTSxHQUFHLEdBQUcsc0JBQU8sQ0FBQyxHQUFHLENBQUM7QUFFeEIsTUFBTSxFQUFFLE9BQU8sRUFBRSxHQUFHLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQztBQUV0QyxNQUFNLGVBQWUsR0FBRyxtQkFBUSxDQUFDLE9BQU8sQ0FBQztBQUV6Qzs7O0dBR0c7QUFDSCxNQUFNLENBQUMsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLGtFQUFrRSxFQUFFLEtBQUssQ0FBQyxDQUFDO0FBQ2pHLE1BQU0sWUFBWSxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFFckMsU0FBUyxhQUFhLENBQUMsTUFBa0I7SUFDdkMsT0FBTyxlQUFHLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQzdCLENBQUM7QUFFRCxTQUFTLGNBQWMsQ0FBQyxPQUFpQjtJQUN2QyxPQUFPLE9BQU8sQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLENBQUM7QUFDdEMsQ0FBQztBQUVELGdDQUFnQztBQUNoQyxTQUFnQixJQUFJLENBQUMsQ0FBVSxFQUFFLElBQWtCO0lBQ2pELElBQUksQ0FBQyxDQUFDLENBQUMsT0FBTyxJQUFJLENBQUMsQ0FBQyxDQUFDLE1BQU0sSUFBSSxDQUFDLENBQUMsQ0FBQyxPQUFPLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLElBQUksQ0FBQyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFD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QUFDLEtBQUssSUFBSSxhQUFhLENBQUMsS0FBSyxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7Z0JBQzNFLE1BQU0sSUFBSSxTQUFTLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztZQUN4QyxDQUFDO1lBRUQsSUFBSSxZQUFZLElBQUksWUFBWSxDQUFDLE1BQU0sSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLGFBQWEsQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDO2dCQUNoRyxNQUFNLElBQUksU0FBUyxDQUFDLG9CQUFvQixDQUFDLENBQUM7WUFDNUMsQ0FBQztRQUNILENBQUM7SUFDSCxDQUFDO0lBRUQsT0FBTyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUM3QixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gU2VnV2l0IHZlcnNpb24gMSBQMlRSIG91dHB1dCB0eXBlIGZvciBUYXByb290IGRlZmluZWQgaW5cbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9iaXRjb2luL2JpcHMvYmxvYi9tYXN0ZXIvYmlwLTAzNDEubWVkaWF3aWtpXG5cbmltcG9ydCB7IG5ldHdvcmtzIH0gZnJvbSAnLi4vbmV0d29ya3MnO1xuaW1wb3J0IHsgc2NyaXB0IGFzIGJzY3JpcHQsIFBheW1lbnQsIFBheW1lbnRPcHRzLCBsYXp5IH0gZnJvbSAnYml0Y29pbmpzLWxpYic7XG5pbXBvcnQgKiBhcyB0YXByb290IGZyb20gJy4uL3RhcHJvb3QnO1xuaW1wb3J0IHsgbXVzaWcsIGVjYyB9IGZyb20gJ0BiaXRnby1iZXRhL3NlY3AyNTZrMSc7XG5cbmNvbnN0IHR5cGVmID0gcmVxdWlyZSgndHlwZWZvcmNlJyk7XG5jb25zdCBPUFMgPSBic2NyaXB0Lk9QUztcblxuY29uc3QgeyBiZWNoMzJtIH0gPSByZXF1aXJlKCdiZWNoMzInKTtcblxuY29uc3QgQklUQ09JTl9ORVRXT1JLID0gbmV0d29ya3MuYml0Y29pbjtcblxuLyoqXG4gKiBBIHNlY3AyNTZrMSB4IGNvb3JkaW5hdGUgd2l0aCB1bmtub3duIGRpc2NyZXRlIGxvZ2FyaXRobSB1c2VkIGZvciBlbGltaW5hdGluZ1xuICoga2V5cGF0aCBzcGVuZHMsIGVxdWFsIHRvIFNIQTI1Nih1bmNvbXByZXNzZWRERVIoU0VDUDI1NksxX0dFTkVSQVRPUl9QT0lOVCkpLlxuICovXG5jb25zdCBIID0gQnVmZmVyLmZyb20oJzUwOTI5Yjc0YzFhMDQ5NTRiNzhiNGI2MDM1ZTk3YTVlMDc4YTVhMGYyOGVjOTZkNTQ3YmZlZTlhY2U4MDNhYzAnLCAnaGV4Jyk7XG5jb25zdCBFTVBUWV9CVUZGRVIgPSBCdWZmZXIuYWxsb2MoMCk7XG5cbmZ1bmN0aW9uIGlzUGxhaW5QdWJrZXkocHViS2V5OiBVaW50OEFycmF5KTogYm9vbGVhbiB7XG4gIHJldHVybiBlY2MuaXNQb2ludChwdWJLZXkpO1xufVxuXG5mdW5jdGlvbiBpc1BsYWluUHVia2V5cyhwdWJrZXlzOiBCdWZmZXJbXSkge1xuICByZXR1cm4gcHVia2V5cy5ldmVyeShpc1BsYWluUHVia2V5KTtcbn1cblxuLy8gb3V0cHV0OiBPUF8xIHt3aXRuZXNzUHJvZ3JhbX1cbmV4cG9ydCBmdW5jdGlvbiBwMnRyKGE6IFBheW1lbnQsIG9wdHM/OiBQYXltZW50T3B0cyk6IFBheW1lbnQge1xuICBpZiAoIWEuYWRkcmVzcyAmJiAhYS5wdWJrZXkgJiYgIWEucHVia2V5cyAmJiAhKGEucmVkZWVtcyAmJiBhLnJlZGVlbXMubGVuZ3RoKSAmJiAhYS5vdXRwdXQgJiYgIWEud2l0bmVzcykge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ05vdCBlbm91Z2ggZGF0YScpO1xuICB9XG4gIG9wdHMgPSBPYmplY3QuYXNzaWduKHsgdmFsaWRhdGU6IHRydWUgfSwgb3B0cyB8fCB7fSk7XG5cbiAgaWYgKCFvcHRzLmVjY0xpYikgdGhyb3cgbmV3IEVycm9yKCdFQ0MgTGlicmFyeSBpcyByZXF1aXJlZCBmb3IgcDJ0ci4nKTtcbiAgY29uc3QgZWNjID0gb3B0cy5lY2NMaWI7XG5cbiAgdHlwZWYoXG4gICAge1xuICAgICAgbmV0d29yazogdHlwZWYubWF5YmUodHlwZWYuT2JqZWN0KSxcblxuICAgICAgYWRkcmVzczogdHlwZWYubWF5YmUodHlwZWYuU3RyaW5nKSxcbiAgICAgIC8vIHRoZSBvdXRwdXQgc2NyaXB0IHNob3VsZCBiZSBhIGZpeGVkIDM0IGJ5dGVzLlxuICAgICAgLy8gMSBieXRlIGZvciBPUF8xIGluZGljYXRpbmcgc2Vnd2l0IHZlcnNpb24gMSwgb25lIGJ5dGUgZm9yIDB4MjAgdG8gcHVzaFxuICAgICAgLy8gdGhlIG5leHQgMzIgYnl0ZXMsIGZvbGxvd2VkIGJ5IHRoZSAzMiBieXRlIHdpdG5lc3MgcHJvZ3JhbVxuICAgICAgb3V0cHV0OiB0eXBlZi5tYXliZSh0eXBlZi5CdWZmZXJOKDM0KSksXG4gICAgICAvLyBhIHNpbmdsZSBwdWJrZXlcbiAgICAgIHB1YmtleTogdHlwZWYubWF5YmUoZWNjLmlzWE9ubHlQb2ludCksXG4gICAgICAvLyB0aGUgcHViIGtleShzKSB1c2VkIGZvciBrZXlwYXRoIHNpZ25pbmcuXG4gICAgICAvLyBhZ2dyZWdhdGVkIHdpdGggTXVTaWcyKiBpZiA+IDFcbiAgICAgIHB1YmtleXM6IHR5cGVmLm1heWJlKHR5cGVmLmFueU9mKHR5cGVmLmFycmF5T2YoZWNjLmlzWE9ubHlQb2ludCksIHR5cGVmLmFycmF5T2YoaXNQbGFpblB1YmtleSkpKSxcblxuICAgICAgcmVkZWVtczogdHlwZWYubWF5YmUoXG4gICAgICAgIHR5cGVmLmFycmF5T2Yoe1xuICAgICAgICAgIG5ldHdvcms6IHR5cGVmLm1heWJlKHR5cGVmLk9iamVjdCksXG4gICAgICAgICAgb3V0cHV0OiB0eXBlZi5tYXliZSh0eXBlZi5CdWZmZXIpLFxuICAgICAgICAgIHdlaWdodDogdHlwZWYubWF5YmUodHlwZWYuTnVtYmVyKSxcbiAgICAgICAgICBkZXB0aDogdHlwZWYubWF5YmUodHlwZWYuTnVtYmVyKSxcbiAgICAgICAgICB3aXRuZXNzOiB0eXBlZi5tYXliZSh0eXBlZi5hcnJheU9mKHR5cGVmLkJ1ZmZlcikpLFxuICAgICAgICB9KVxuICAgICAgKSxcbiAgICAgIHJlZGVlbUluZGV4OiB0eXBlZi5tYXliZSh0eXBlZi5OdW1iZXIpLCAvLyBTZWxlY3RzIHRoZSByZWRlZW0gdG8gc3BlbmRcblxuICAgICAgc2lnbmF0dXJlOiB0eXBlZi5tYXliZShic2NyaXB0LmlzQ2Fub25pY2FsU2Nobm9yclNpZ25hdHVyZSksXG4gICAgICBjb250cm9sQmxvY2s6IHR5cGVmLm1heWJlKHR5cGVmLkJ1ZmZlciksXG4gICAgICBhbm5leDogdHlwZWYubWF5YmUodHlwZWYuQnVmZmVyKSxcbiAgICB9LFxuICAgIGFcbiAgKTtcblxuICBjb25zdCBfYWRkcmVzcyA9IGxhenkudmFsdWUoKCkgPT4ge1xuICAgIGlmICghYS5hZGRyZXNzKSByZXR1cm4gdW5kZWZpbmVkO1xuXG4gICAgY29uc3QgcmVzdWx0ID0gYmVjaDMybS5kZWNvZGUoYS5hZGRyZXNzKTtcbiAgICBjb25zdCB2ZXJzaW9uID0gcmVzdWx0LndvcmRzLnNoaWZ0KCk7XG4gICAgY29uc3QgZGF0YSA9IGJlY2gzMm0uZnJvbVdvcmRzKHJlc3VsdC53b3Jkcyk7XG4gICAgcmV0dXJuIHtcbiAgICAgIHZlcnNpb24sXG4gICAgICBwcmVmaXg6IHJlc3VsdC5wcmVmaXgsXG4gICAgICBkYXRhOiBCdWZmZXIuZnJvbShkYXRhKSxcbiAgICB9O1xuICB9KTtcbiAgY29uc3QgX291dHB1dFB1YmtleSA9IGxhenkudmFsdWUoKCkgPT4ge1xuICAgIC8vIHdlIHJlbW92ZSB0aGUgZmlyc3QgdHdvIGJ5dGVzIChPUF8xIDB4MjApIGZyb20gdGhlIG91dHB1dCBzY3JpcHQgdG9cbiAgICAvLyBleHRyYWN0IHRoZSAzMiBieXRlIHRhcHJvb3QgcHVia2V5IChha2Egd2l0bmVzcyBwcm9ncmFtKVxuICAgIHJldHVybiBhLm91dHB1dCAmJiBhLm91dHB1dC5zbGljZSgyKTtcbiAgfSk7XG5cbiAgY29uc3QgbmV0d29yayA9IGEubmV0d29yayB8fCBCSVRDT0lOX05FVFdPUks7XG5cbiAgY29uc3QgbzogUGF5bWVudCA9IHsgbmV0d29yayB9O1xuXG4gIGNvbnN0IF90YXByb290UGF0aHMgPSBsYXp5LnZhbHVlKCgpID0+IHtcbiAgICBpZiAoIWEucmVkZWVtcykgcmV0dXJuO1xuICAgIGlmIChvLnRhcFRyZWUpIHtcbiAgICAgIHJldHVybiB0YXByb290LmdldERlcHRoRmlyc3RUYXB0cmVlKG8udGFwVHJlZSk7XG4gICAgfVxuICAgIGNvbnN0IG91dHB1dHM6IEFycmF5PEJ1ZmZlciB8IHVuZGVmaW5lZD4gPSBhLnJlZGVlbXMubWFwKCh7IG91dHB1dCB9KSA9PiBvdXRwdXQpO1xuICAgIGlmICghb3V0cHV0cy5ldmVyeSgob3V0cHV0KSA9PiBvdXRwdXQpKSByZXR1cm47XG4gICAgcmV0dXJuIHRhcHJvb3QuZ2V0SHVmZm1hblRhcHRyZWUoXG4gICAgICBvdXRwdXRzIGFzIEJ1ZmZlcltdLFxuICAgICAgYS5yZWRlZW1zLm1hcCgoeyB3ZWlnaHQgfSkgPT4gd2VpZ2h0KVxuICAgICk7XG4gIH0pO1xuICBjb25zdCBfcGFyc2VkV2l0bmVzcyA9IGxhenkudmFsdWUoKCkgPT4ge1xuICAgIGlmICghYS53aXRuZXNzKSByZXR1cm47XG4gICAgcmV0dXJuIHRhcHJvb3QucGFyc2VUYXByb290V2l0bmVzcyhhLndpdG5lc3MpO1xuICB9KTtcbiAgY29uc3QgX3BhcnNlZENvbnRyb2xCbG9jayA9IGxhenkudmFsdWUoKCkgPT4ge1xuICAgIC8vIENhbid0IHVzZSBvLmNvbnRyb2xCbG9jaywgYmVjYXVzZSBpdCBjb3VsZCBiZSBjaXJjdWxhclxuICAgIGlmIChhLmNvbnRyb2xCbG9jaykgcmV0dXJuIHRhcHJvb3QucGFyc2VDb250cm9sQmxvY2soZWNjLCBhLmNvbnRyb2xCbG9jayk7XG4gICAgY29uc3QgcGFyc2VkV2l0bmVzcyA9IF9wYXJzZWRXaXRuZXNzKCk7XG4gICAgaWYgKHBhcnNlZFdpdG5lc3MgJiYgcGFyc2VkV2l0bmVzcy5zcGVuZFR5cGUgPT09ICdTY3JpcHQnKSB7XG4gICAgICByZXR1cm4gdGFwcm9vdC5wYXJzZUNvbnRyb2xCbG9jayhlY2MsIHBhcnNlZFdpdG5lc3MuY29udHJvbEJsb2NrKTtcbiAgICB9XG4gIH0pO1xuXG4gIGxhenkucHJvcChvLCAnaW50ZXJuYWxQdWJrZXknLCAoKSA9PiB7XG4gICAgaWYgKGEucHVia2V5KSB7XG4gICAgICAvLyBzaW5nbGUgcHVia2V5XG4gICAgICByZXR1cm4gYS5wdWJrZXk7XG4gICAgfSBlbHNlIGlmIChhLnB1YmtleXMgJiYgYS5wdWJrZXlzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgcmV0dXJuIGEucHVia2V5c1swXTtcbiAgICB9IGVsc2UgaWYgKGEucHVia2V5cyAmJiBhLnB1YmtleXMubGVuZ3RoID4gMSkge1xuICAgICAgLy8gbXVsdGlwbGUgcHVia2V5c1xuICAgICAgaWYgKGlzUGxhaW5QdWJrZXlzKGEucHVia2V5cykpIHtcbiAgICAgICAgcmV0dXJuIEJ1ZmZlci5mcm9tKG11c2lnLmdldFhPbmx5UHVia2V5KG11c2lnLmtleUFnZyhhLnB1YmtleXMpKSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBCdWZmZXIuZnJvbSh0YXByb290LmFnZ3JlZ2F0ZU11U2lnUHVia2V5cyhlY2MsIGEucHVia2V5cykpO1xuICAgIH0gZWxzZSBpZiAoX3BhcnNlZENvbnRyb2xCbG9jaygpKSB7XG4gICAgICByZXR1cm4gX3BhcnNlZENvbnRyb2xCbG9jaygpPy5pbnRlcm5hbFB1YmtleTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gSWYgdGhlcmUgaXMgbm8ga2V5IHBhdGggc3BlbmRpbmcgY29uZGl0aW9uLCB3ZSB1c2UgYW4gaW50ZXJuYWwga2V5IHdpdGggdW5rbm93biBzZWNyZXQga2V5LlxuICAgICAgLy8gVE9ETzogSW4gb3JkZXIgdG8gYXZvaWQgbGVha2luZyB0aGUgaW5mb3JtYXRpb24gdGhhdCBrZXkgcGF0aCBzcGVuZGluZyBpcyBub3QgcG9zc2libGUgaXRcbiAgICAgIC8vIGlzIHJlY29tbWVuZGVkIHRvIHBpY2sgYSBmcmVzaCBpbnRlZ2VyIHIgaW4gdGhlIHJhbmdlIDAuLi5uLTEgdW5pZm9ybWx5IGF0IHJhbmRvbSBhbmQgdXNlXG4gICAgICAvLyBIICsgckcgYXMgaW50ZXJuYWwga2V5LiBJdCBpcyBwb3NzaWJsZSB0byBwcm92ZSB0aGF0IHRoaXMgaW50ZXJuYWwga2V5IGRvZXMgbm90IGhhdmUgYVxuICAgICAgLy8ga25vd24gZGlzY3JldGUgbG9nYXJpdGhtIHdpdGggcmVzcGVjdCB0byBHIGJ5IHJldmVhbGluZyByIHRvIGEgdmVyaWZpZXIgd2hvIGNhbiB0aGVuXG4gICAgICAvLyByZWNvbnN0cnVjdCBob3cgdGhlIGludGVybmFsIGtleSB3YXMgY3JlYXRlZC5cbiAgICAgIHJldHVybiBIO1xuICAgIH1cbiAgfSk7XG5cbiAgbGF6eS5wcm9wKG8sICd0YXB0cmVlUm9vdCcsICgpID0+IHtcbiAgICBjb25zdCBwYXJzZWRDb250cm9sQmxvY2sgPSBfcGFyc2VkQ29udHJvbEJsb2NrKCk7XG4gICAgY29uc3QgcGFyc2VkV2l0bmVzcyA9IF9wYXJzZWRXaXRuZXNzKCk7XG4gICAgbGV0IHRhcHRyZWVSb290O1xuICAgIC8vIFByZWZlciB0byBnZXQgdGhlIHJvb3QgdmlhIHRoZSBjb250cm9sIGJsb2NrIGJlY2F1c2Ugbm90IGFsbCByZWRlZW1zIG1heVxuICAgIC8vIGJlIGF2YWlsYWJsZVxuICAgIGlmIChwYXJzZWRDb250cm9sQmxvY2spIHtcbiAgICAgIGxldCB0YXBzY3JpcHQ7XG4gICAgICBpZiAocGFyc2VkV2l0bmVzcyAmJiBwYXJzZWRXaXRuZXNzLnNwZW5kVHlwZSA9PT0gJ1NjcmlwdCcpIHtcbiAgICAgICAgdGFwc2NyaXB0ID0gcGFyc2VkV2l0bmVzcy50YXBzY3JpcHQ7XG4gICAgICB9IGVsc2UgaWYgKG8ucmVkZWVtICYmIG8ucmVkZWVtLm91dHB1dCkge1xuICAgICAgICB0YXBzY3JpcHQgPSBvLnJlZGVlbS5vdXRwdXQ7XG4gICAgICB9XG4gICAgICBpZiAodGFwc2NyaXB0KSB0YXB0cmVlUm9vdCA9IHRhcHJvb3QuZ2V0VGFwdHJlZVJvb3QoZWNjLCBwYXJzZWRDb250cm9sQmxvY2ssIHRhcHNjcmlwdCk7XG4gICAgfVxuICAgIGlmICghdGFwdHJlZVJvb3QgJiYgX3RhcHJvb3RQYXRocygpKSB0YXB0cmVlUm9vdCA9IF90YXByb290UGF0aHMoKT8ucm9vdDtcblxuICAgIHJldHVybiB0YXB0cmVlUm9vdDtcbiAgfSk7XG5cbiAgY29uc3QgX3RhcHJvb3RQdWJrZXkgPSBsYXp5LnZhbHVlKCgpID0+IHtcbiAgICBjb25zdCB0YXB0cmVlUm9vdCA9IG8udGFwdHJlZVJvb3Q7XG4gICAgLy8gUmVmdXNlIHRvIGNyZWF0ZSBhbiB1bnNwZW5kYWJsZSBrZXlcbiAgICBpZiAoIWEucHVia2V5ICYmICEoYS5wdWJrZXlzICYmIGEucHVia2V5cy5sZW5ndGgpICYmICFhLnJlZGVlbXMgJiYgIXRhcHRyZWVSb290KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHJldHVybiB0YXByb290LnRhcFR3ZWFrUHVia2V5KGVjYywgbz8uaW50ZXJuYWxQdWJrZXkgYXMgVWludDhBcnJheSwgdGFwdHJlZVJvb3QpO1xuICB9KTtcblxuICBsYXp5LnByb3AobywgJ3RhcFRyZWUnLCAoKSA9PiB7XG4gICAgaWYgKCFhLnJlZGVlbXMpIHJldHVybjtcbiAgICBpZiAoYS5yZWRlZW1zLmZpbmQoKHsgZGVwdGggfSkgPT4gZGVwdGggPT09IHVuZGVmaW5lZCkpIHtcbiAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgJ0RlcHJlY2F0aW9uIFdhcm5pbmc6IFdlaWdodC1iYXNlZCB0YXAgdHJlZSBjb25zdHJ1Y3Rpb24gd2lsbCBiZSByZW1vdmVkIGluIHRoZSBmdXR1cmUuICcgK1xuICAgICAgICAgICdQbGVhc2UgdXNlIGRlcHRoLWZpcnN0IGNvZGluZyBhcyBzcGVjaWZpZWQgaW4gQklQLTAzNzEuJ1xuICAgICAgKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKCFhLnJlZGVlbXMuZXZlcnkoKHsgb3V0cHV0IH0pID0+IG91dHB1dCkpIHJldHVybjtcbiAgICByZXR1cm4ge1xuICAgICAgbGVhdmVzOiBhLnJlZGVlbXMubWFwKCh7IG91dHB1dCwgZGVwdGggfSkgPT4ge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHNjcmlwdDogb3V0cHV0LFxuICAgICAgICAgIGxlYWZWZXJzaW9uOiB0YXByb290LklOSVRJQUxfVEFQU0NSSVBUX1ZFUlNJT04sXG4gICAgICAgICAgZGVwdGgsXG4gICAgICAgIH07XG4gICAgICB9KSxcbiAgICB9O1xuICB9KTtcbiAgbGF6eS5wcm9wKG8sICdhZGRyZXNzJywgKCkgPT4ge1xuICAgIGNvbnN0IHB1YmtleSA9IF9vdXRwdXRQdWJrZXkoKSB8fCAoX3RhcHJvb3RQdWJrZXkoKSAmJiBfdGFwcm9vdFB1YmtleSgpPy54T25seVB1YmtleSk7XG4gICAgLy8gb25seSBlbmNvZGUgdGhlIDMyIGJ5dGUgd2l0bmVzcyBwcm9ncmFtIGFzIGJlY2gzMm1cbiAgICBjb25zdCB3b3JkcyA9IGJlY2gzMm0udG9Xb3JkcyhwdWJrZXkpO1xuICAgIHdvcmRzLnVuc2hpZnQoMHgwMSk7XG4gICAgcmV0dXJuIGJlY2gzMm0uZW5jb2RlKG5ldHdvcmsuYmVjaDMyLCB3b3Jkcyk7XG4gIH0pO1xuICBsYXp5LnByb3AobywgJ2NvbnRyb2xCbG9jaycsICgpID0+IHtcbiAgICBjb25zdCBwYXJzZWRXaXRuZXNzID0gX3BhcnNlZFdpdG5lc3MoKTtcbiAgICBpZiAocGFyc2VkV2l0bmVzcyAmJiBwYXJzZWRXaXRuZXNzLnNwZW5kVHlwZSA9PT0gJ1NjcmlwdCcpIHtcbiAgICAgIHJldHVybiBwYXJzZWRXaXRuZXNzLmNvbnRyb2xCbG9jaztcbiAgICB9XG4gICAgY29uc3QgdGFwcm9vdFB1YmtleSA9IF90YXByb290UHVia2V5KCk7XG4gICAgY29uc3QgdGFwcm9vdFBhdGhzID0gX3RhcHJvb3RQYXRocygpO1xuICAgIGlmICghdGFwcm9vdFBhdGhzIHx8ICF0YXByb290UHVia2V5IHx8IGEucmVkZWVtSW5kZXggPT09IHVuZGVmaW5lZCkgcmV0dXJuO1xuICAgIHJldHVybiB0YXByb290LmdldENvbnRyb2xCbG9jayh0YXByb290UHVia2V5LnBhcml0eSwgby5pbnRlcm5hbFB1YmtleSEsIHRhcHJvb3RQYXRocy5wYXRoc1thLnJlZGVlbUluZGV4XSk7XG4gIH0pO1xuICBsYXp5LnByb3AobywgJ3NpZ25hdHVyZScsICgpID0+IHtcbiAgICBjb25zdCBwYXJzZWRXaXRuZXNzID0gX3BhcnNlZFdpdG5lc3MoKTtcbiAgICBpZiAocGFyc2VkV2l0bmVzcyAmJiBwYXJzZWRXaXRuZXNzLnNwZW5kVHlwZSA9PT0gJ0tleScpIHtcbiAgICAgIHJldHVybiBwYXJzZWRXaXRuZXNzLnNpZ25hdHVyZTtcbiAgICB9XG4gIH0pO1xuICBsYXp5LnByb3AobywgJ2FubmV4JywgKCkgPT4ge1xuICAgIGlmICghX3BhcnNlZFdpdG5lc3MoKSkgcmV0dXJuO1xuICAgIHJldHVybiBfcGFyc2VkV2l0bmVzcygpIS5hbm5leDtcbiAgfSk7XG4gIGxhenkucHJvcChvLCAnb3V0cHV0JywgKCkgPT4ge1xuICAgIGlmIChhLmFkZHJlc3MpIHtcbiAgICAgIGNvbnN0IHsgZGF0YSB9ID0gX2FkZHJlc3MoKSE7XG4gICAgICByZXR1cm4gYnNjcmlwdC5jb21waWxlKFtPUFMuT1BfMSwgZGF0YV0pO1xuICAgIH1cblxuICAgIGNvbnN0IHRhcHJvb3RQdWJrZXkgPSBfdGFwcm9vdFB1YmtleSgpO1xuICAgIGlmICghdGFwcm9vdFB1YmtleSkgcmV0dXJuO1xuXG4gICAgLy8gT1BfMSBpbmRpY2F0ZXMgc2Vnd2l0IHZlcnNpb24gMVxuICAgIHJldHVybiBic2NyaXB0LmNvbXBpbGUoW09QUy5PUF8xLCBCdWZmZXIuZnJvbSh0YXByb290UHVia2V5LnhPbmx5UHVia2V5KV0pO1xuICB9KTtcbiAgbGF6eS5wcm9wKG8sICd3aXRuZXNzJywgKCkgPT4ge1xuICAgIGlmICghYS5yZWRlZW1zKSB7XG4gICAgICBpZiAoYS5zaWduYXR1cmUpIHJldHVybiBbYS5zaWduYXR1cmVdOyAvLyBLZXlwYXRoIHNwZW5kXG4gICAgICByZXR1cm47XG4gICAgfSBlbHNlIGlmICghby5yZWRlZW0pIHtcbiAgICAgIHJldHVybjsgLy8gTm8gY2hvc2VuIHJlZGVlbSBzY3JpcHQsIGNhbid0IG1ha2Ugd2l0bmVzc1xuICAgIH0gZWxzZSBpZiAoIW8uY29udHJvbEJsb2NrKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgbGV0IHJlZGVlbVdpdG5lc3M7XG4gICAgLy8gc29tZSBjYWxsZXJzIG1heSBwcm92aWRlIHdpdG5lc3MgZWxlbWVudHMgaW4gdGhlIGlucHV0IHNjcmlwdFxuICAgIGlmIChvLnJlZGVlbS5pbnB1dCAmJiBvLnJlZGVlbS5pbnB1dC5sZW5ndGggPiAwICYmIG8ucmVkZWVtLm91dHB1dCAmJiBvLnJlZGVlbS5vdXRwdXQubGVuZ3RoID4gMCkge1xuICAgICAgLy8gdHJhbnNmb3JtIHJlZGVlbSBpbnB1dCB0byB3aXRuZXNzIHN0YWNrXG4gICAgICByZWRlZW1XaXRuZXNzID0gYnNjcmlwdC50b1N0YWNrKGJzY3JpcHQuZGVjb21waWxlKG8ucmVkZWVtLmlucHV0KSEpO1xuXG4gICAgICAvLyBhc3NpZ25zIGEgbmV3IG9iamVjdCB0byBvLnJlZGVlbVxuICAgICAgby5yZWRlZW1zIVthLnJlZGVlbUluZGV4IV0gPSBPYmplY3QuYXNzaWduKHsgd2l0bmVzczogcmVkZWVtV2l0bmVzcyB9LCBvLnJlZGVlbSk7XG4gICAgICBvLnJlZGVlbS5pbnB1dCA9IEVNUFRZX0JVRkZFUjtcbiAgICB9IGVsc2UgaWYgKG8ucmVkZWVtLm91dHB1dCAmJiBvLnJlZGVlbS5vdXRwdXQubGVuZ3RoID4gMCAmJiBvLnJlZGVlbS53aXRuZXNzICYmIG8ucmVkZWVtLndpdG5lc3MubGVuZ3RoID4gMCkge1xuICAgICAgcmVkZWVtV2l0bmVzcyA9IG8ucmVkZWVtLndpdG5lc3M7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCB3aXRuZXNzID0gWy4uLnJlZGVlbVdpdG5lc3MsIG8ucmVkZWVtLm91dHB1dCwgby5jb250cm9sQmxvY2tdO1xuXG4gICAgaWYgKGEuYW5uZXgpIHtcbiAgICAgIHdpdG5lc3MucHVzaChhLmFubmV4KTtcbiAgICB9XG5cbiAgICByZXR1cm4gd2l0bmVzcztcbiAgfSk7XG4gIGxhenkucHJvcChvLCAnbmFtZScsICgpID0+IHtcbiAgICBjb25zdCBuYW1lUGFydHMgPSBbJ3AydHInXTtcbiAgICByZXR1cm4gbmFtZVBhcnRzLmpvaW4oJy0nKTtcbiAgfSk7XG4gIGxhenkucHJvcChvLCAncmVkZWVtJywgKCkgPT4ge1xuICAgIGlmIChhLnJlZGVlbXMpIHtcbiAgICAgIGlmIChhLnJlZGVlbUluZGV4ID09PSB1bmRlZmluZWQpIHJldHVybjtcbiAgICAgIHJldHVybiBhLnJlZGVlbXNbYS5yZWRlZW1JbmRleF07XG4gICAgfVxuICAgIGNvbnN0IHBhcnNlZFdpdG5lc3MgPSBfcGFyc2VkV2l0bmVzcygpO1xuICAgIGlmIChwYXJzZWRXaXRuZXNzICYmIHBhcnNlZFdpdG5lc3Muc3BlbmRUeXBlID09PSAnU2NyaXB0Jykge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgd2l0bmVzczogcGFyc2VkV2l0bmVzcy5zY3JpcHRTaWcsXG4gICAgICAgIG91dHB1dDogcGFyc2VkV2l0bmVzcy50YXBzY3JpcHQsXG4gICAgICB9O1xuICAgIH1cbiAgfSk7XG5cbiAgLy8gZXh0ZW5kZWQgdmFsaWRhdGlvblxuICBpZiAob3B0cy52YWxpZGF0ZSkge1xuICAgIGNvbnN0IHRhcHJvb3RQdWJrZXkgPSBfdGFwcm9vdFB1YmtleSgpO1xuXG4gICAgaWYgKGEub3V0cHV0KSB7XG4gICAgICBpZiAoYS5vdXRwdXRbMF0gIT09IE9QUy5PUF8xIHx8IGEub3V0cHV0WzFdICE9PSAweDIwKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ091dHB1dCBpcyBpbnZhbGlkJyk7XG4gICAgICB9XG5cbiAgICAgIC8vIGlmIHdlJ3JlIHBhc3NlZCBib3RoIGFuIG91dHB1dCBzY3JpcHQgYW5kIGFuIGFkZHJlc3MsIGVuc3VyZSB0aGV5IG1hdGNoXG4gICAgICBpZiAoYS5hZGRyZXNzICYmIF9vdXRwdXRQdWJrZXkgJiYgIV9vdXRwdXRQdWJrZXkoKT8uZXF1YWxzKF9hZGRyZXNzKCk/LmRhdGEgYXMgQnVmZmVyKSkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdtaXNtYXRjaCBiZXR3ZWVuIGFkZHJlc3MgJiBvdXRwdXQnKTtcbiAgICAgIH1cblxuICAgICAgLy8gV3JhcHBpbmcgYHRhcHJvb3RQdWJrZXkueE9ubHlQdWJrZXlgIGluIEJ1ZmZlciBiZWNhdXNlIG9mIGEgcGVjdWxpYXIgaXNzdWUgaW4gdGhlIGZyb250ZW5kXG4gICAgICAvLyB3aGVyZSBhIHBvbHlmaWxsIGZvciBCdWZmZXIgaXMgdXNlZC4gUmVmZXI6IGh0dHBzOi8vYml0Z29pbmMuYXRsYXNzaWFuLm5ldC9icm93c2UvQkctNjE0MjBcbiAgICAgIGlmICh0YXByb290UHVia2V5ICYmIF9vdXRwdXRQdWJrZXkgJiYgIV9vdXRwdXRQdWJrZXkoKT8uZXF1YWxzKEJ1ZmZlci5mcm9tKHRhcHJvb3RQdWJrZXkueE9ubHlQdWJrZXkpKSkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdtaXNtYXRjaCBiZXR3ZWVuIG91dHB1dCBhbmQgdGFwcm9vdCBwdWJrZXknKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoYS5hZGRyZXNzKSB7XG4gICAgICBpZiAodGFwcm9vdFB1YmtleSAmJiAhX2FkZHJlc3MoKT8uZGF0YS5lcXVhbHMoQnVmZmVyLmZyb20odGFwcm9vdFB1YmtleS54T25seVB1YmtleSkpKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ21pc21hdGNoIGJldHdlZW4gYWRkcmVzcyBhbmQgdGFwcm9vdCBwdWJrZXknKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBwYXJzZWRDb250cm9sQmxvY2sgPSBfcGFyc2VkQ29udHJvbEJsb2NrKCk7XG4gICAgaWYgKHBhcnNlZENvbnRyb2xCbG9jaykge1xuICAgICAgaWYgKCFwYXJzZWRDb250cm9sQmxvY2suaW50ZXJuYWxQdWJrZXkuZXF1YWxzKG8/LmludGVybmFsUHVia2V5IGFzIFVpbnQ4QXJyYXkpKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0ludGVybmFsIHB1YmtleSBtaXNtYXRjaCcpO1xuICAgICAgfVxuICAgICAgaWYgKHRhcHJvb3RQdWJrZXkgJiYgcGFyc2VkQ29udHJvbEJsb2NrLnBhcml0eSAhPT0gdGFwcm9vdFB1YmtleS5wYXJpdHkpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignUGFyaXR5IG1pc21hdGNoJyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGEucmVkZWVtcykge1xuICAgICAgaWYgKCFhLnJlZGVlbXMubGVuZ3RoKSB0aHJvdyBuZXcgVHlwZUVycm9yKCdFbXB0eSByZWRlZW1zJyk7XG4gICAgICBpZiAoYS5yZWRlZW1JbmRleCAhPT0gdW5kZWZpbmVkICYmIChhLnJlZGVlbUluZGV4IDwgMCB8fCBhLnJlZGVlbUluZGV4ID49IGEucmVkZWVtcy5sZW5ndGgpKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ2ludmFsaWQgcmVkZWVtIGluZGV4Jyk7XG4gICAgICB9XG4gICAgICBhLnJlZGVlbXMuZm9yRWFjaCgocmVkZWVtKSA9PiB7XG4gICAgICAgIGlmIChyZWRlZW0ubmV0d29yayAmJiByZWRlZW0ubmV0d29yayAhPT0gbmV0d29yaykge1xuICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ05ldHdvcmsgbWlzbWF0Y2gnKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgY29uc3QgY2hvc2VuUmVkZWVtID0gYS5yZWRlZW1zICYmIGEucmVkZWVtSW5kZXggIT09IHVuZGVmaW5lZCAmJiBhLnJlZGVlbXNbYS5yZWRlZW1JbmRleF07XG5cbiAgICBjb25zdCBwYXJzZWRXaXRuZXNzID0gX3BhcnNlZFdpdG5lc3MoKTtcbiAgICBpZiAocGFyc2VkV2l0bmVzcyAmJiBwYXJzZWRXaXRuZXNzLnNwZW5kVHlwZSA9PT0gJ0tleScpIHtcbiAgICAgIGlmIChhLmNvbnRyb2xCbG9jaykge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCd1bmV4cGVjdGVkIGNvbnRyb2wgYmxvY2sgZm9yIGtleSBwYXRoJyk7XG4gICAgICB9XG5cbiAgICAgIGlmIChhLnNpZ25hdHVyZSAmJiAhYS5zaWduYXR1cmUuZXF1YWxzKHBhcnNlZFdpdG5lc3Muc2lnbmF0dXJlKSkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdtaXNtYXRjaCBiZXR3ZWVuIHdpdG5lc3MgJiBzaWduYXR1cmUnKTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKHBhcnNlZFdpdG5lc3MgJiYgcGFyc2VkV2l0bmVzcy5zcGVuZFR5cGUgPT09ICdTY3JpcHQnKSB7XG4gICAgICBpZiAoYS5zaWduYXR1cmUpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcigndW5leHBlY3RlZCBzaWduYXR1cmUgd2l0aCBzY3JpcHQgcGF0aCB3aXRuZXNzJyk7XG4gICAgICB9XG5cbiAgICAgIGlmIChhLmNvbnRyb2xCbG9jayAmJiAhYS5jb250cm9sQmxvY2suZXF1YWxzKHBhcnNlZFdpdG5lc3MuY29udHJvbEJsb2NrKSkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdjb250cm9sIGJsb2NrIG1pc21hdGNoJyk7XG4gICAgICB9XG5cbiAgICAgIGlmIChhLmFubmV4ICYmIHBhcnNlZFdpdG5lc3MuYW5uZXggJiYgIWEuYW5uZXguZXF1YWxzKHBhcnNlZFdpdG5lc3MuYW5uZXgpKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ2FubmV4IG1pc21hdGNoJyk7XG4gICAgICB9XG5cbiAgICAgIGlmIChjaG9zZW5SZWRlZW0gJiYgY2hvc2VuUmVkZWVtLm91dHB1dCAmJiAhY2hvc2VuUmVkZWVtLm91dHB1dC5lcXVhbHMocGFyc2VkV2l0bmVzcy50YXBzY3JpcHQpKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ3RhcHNjcmlwdCBtaXNtYXRjaCcpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBPYmplY3QuYXNzaWduKG8sIGEpO1xufVxuIl19
@@ -24,7 +24,7 @@ exports.getTaprootOutputKey = getTaprootOutputKey;
24
24
  const assert = require("assert");
25
25
  const FastPriorityQueue = require("fastpriorityqueue");
26
26
  const bitcoinjs_lib_1 = require("bitcoinjs-lib");
27
- const noble_ecc_1 = require("./noble_ecc");
27
+ const secp256k1_1 = require("@bitgo-beta/secp256k1");
28
28
  const varuint = require('varuint-bitcoin');
29
29
  /**
30
30
  * The 0x02 prefix indicating an even Y coordinate which is implicitly assumed
@@ -402,10 +402,10 @@ function createTaprootOutputScript(p2trArgs) {
402
402
  taptreeRoot = p2trArgs.taptreeRoot;
403
403
  }
404
404
  else {
405
- internalPubKey = parseControlBlock(noble_ecc_1.ecc, p2trArgs.controlBlock).internalPubkey;
406
- taptreeRoot = getTaptreeRoot(noble_ecc_1.ecc, p2trArgs.controlBlock, p2trArgs.leafScript);
405
+ internalPubKey = parseControlBlock(secp256k1_1.ecc, p2trArgs.controlBlock).internalPubkey;
406
+ taptreeRoot = getTaptreeRoot(secp256k1_1.ecc, p2trArgs.controlBlock, p2trArgs.leafScript);
407
407
  }
408
- const outputKey = tapTweakPubkey(noble_ecc_1.ecc, internalPubKey, taptreeRoot).xOnlyPubkey;
408
+ const outputKey = tapTweakPubkey(secp256k1_1.ecc, internalPubKey, taptreeRoot).xOnlyPubkey;
409
409
  return bitcoinjs_lib_1.script.compile([bitcoinjs_lib_1.script.OPS.OP_1, Buffer.from(outputKey)]);
410
410
  }
411
411
  /**
@@ -422,4 +422,4 @@ function getTaprootOutputKey(outputScript) {
422
422
  }
423
423
  return outputKey;
424
424
  }
425
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFwcm9vdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy90YXByb290LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxvRUFBb0U7QUFDcEUsaUVBQWlFO0FBQ2pFLGlFQUFpRTs7O0FBaUNqRSxzREFnREM7QUFPRCxrREFFQztBQU9ELGtDQUdDO0FBU0Qsc0NBS0M7QUFFRCw4Q0FjQztBQVVELDBDQWNDO0FBY0Qsd0NBU0M7QUEyQ0Qsb0RBS0M7QUFTRCw4Q0FvRUM7QUFFRCwwQ0FTQztBQThCRCxrREEyQ0M7QUFTRCw4Q0ErQkM7QUFTRCx3Q0FjQztBQVVELHdDQXdCQztBQUVELGtEQU1DO0FBTUQsOERBY0M7QUFLRCxrREFVQztBQTNnQkQsaUNBQWtDO0FBQ2xDLHVEQUF3RDtBQUN4RCxpREFBNEY7QUFDNUYsMkNBQTRDO0FBQzVDLE1BQU0sT0FBTyxHQUFHLE9BQU8sQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO0FBRTNDOzs7R0FHRztBQUNVLFFBQUEsbUJBQW1CLEdBQUcsTUFBTSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUN0QyxRQUFBLHlCQUF5QixHQUFHLElBQUksQ0FBQztBQVk5Qzs7Ozs7O0dBTUc7QUFDSCxTQUFnQixxQkFBcUIsQ0FBQyxHQUEyQixFQUFFLE9BQWlCO0lBQ2xGLDJDQUEyQztJQUMzQyxNQUFNLENBQUMsT0FBTyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsNkRBQTZELENBQUMsQ0FBQztJQUUxRixtQ0FBbUM7SUFDbkMsT0FBTyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUM7SUFFN0Isd0VBQXdFO0lBQ3hFLHFCQUFxQjtJQUNyQixFQUFFO0lBQ0YsMEJBQTBCO0lBQzFCLEVBQUU7SUFDRiw2RUFBNkU7SUFDN0UsbUVBQW1FO0lBQ25FLEVBQUU7SUFDRixrQ0FBa0M7SUFDbEMsb0JBQW9CO0lBRXBCLE1BQU0sQ0FBQyxHQUFHLHNCQUFPLENBQUMsVUFB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QUFDLFlBQTBDO0lBQzVFLE1BQU0sZ0JBQWdCLEdBQUcsc0JBQU8sQ0FBQyxTQUFTLENBQUMsWUFBWSxDQUFDLENBQUM7SUFDekQsSUFBSSxnQkFBZ0IsRUFBRSxNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUM7UUFDbkMsTUFBTSxJQUFJLEtBQUssQ0FBQywrQkFBK0IsQ0FBQyxDQUFDO0lBQ25ELENBQUM7SUFDRCxNQUFNLENBQUMsR0FBRyxFQUFFLFNBQVMsQ0FBQyxHQUFHLGdCQUFnQixDQUFDO0lBQzFDLElBQUksR0FBRyxLQUFLLHNCQUFPLENBQUMsR0FBRyxDQUFDLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLElBQUksU0FBUyxDQUFDLE1BQU0sS0FBSyxFQUFFLEVBQUUsQ0FBQztRQUN2RixNQUFNLElBQUksS0FBSyxDQUFDLCtCQUErQixDQUFDLENBQUM7SUFDbkQsQ0FBQztJQUNELE9BQU8sU0FBUyxDQUFDO0FBQ25CLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBUYXByb290LXNwZWNpZmljIGtleSBhZ2dyZWdhdGlvbiBhbmQgdGFwdHJlZSBsb2dpYyBhcyBkZWZpbmVkIGluOlxuLy8gaHR0cHM6Ly9naXRodWIuY29tL2JpdGNvaW4vYmlwcy9ibG9iL21hc3Rlci9iaXAtMDM0MC5tZWRpYXdpa2lcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9iaXRjb2luL2JpcHMvYmxvYi9tYXN0ZXIvYmlwLTAzNDEubWVkaWF3aWtpXG5cbmltcG9ydCB7IFRhcFRyZWUgYXMgUHNidFRhcFRyZWUsIFRhcExlYWYgYXMgUHNidFRhcExlYWYgfSBmcm9tICdiaXAxNzQvc3JjL2xpYi9pbnRlcmZhY2VzJztcbmltcG9ydCBhc3NlcnQgPSByZXF1aXJlKCdhc3NlcnQnKTtcbmltcG9ydCBGYXN0UHJpb3JpdHlRdWV1ZSA9IHJlcXVpcmUoJ2Zhc3Rwcmlvcml0eXF1ZXVlJyk7XG5pbXBvcnQgeyBzY3JpcHQgYXMgYnNjcmlwdCwgY3J5cHRvIGFzIGJjcnlwdG8sIHBheW1lbnRzIGFzIGJwYXltZW50cyB9IGZyb20gJ2JpdGNvaW5qcy1saWInO1xuaW1wb3J0IHsgZWNjIGFzIGVjY0xpYiB9IGZyb20gJy4vbm9ibGVfZWNjJztcbmNvbnN0IHZhcnVpbnQgPSByZXF1aXJlKCd2YXJ1aW50LWJpdGNvaW4nKTtcblxuLyoqXG4gKiBUaGUgMHgwMiBwcmVmaXggaW5kaWNhdGluZyBhbiBldmVuIFkgY29vcmRpbmF0ZSB3aGljaCBpcyBpbXBsaWNpdGx5IGFzc3VtZWRcbiAqIG9uIGFsbCAzMiBieXRlIHgtb25seSBwdWIga2V5cyBhcyBkZWZpbmVkIGluIEJJUDM0MC5cbiAqL1xuZXhwb3J0IGNvbnN0IEVWRU5fWV9DT09SRF9QUkVGSVggPSBCdWZmZXIub2YoMHgwMik7XG5leHBvcnQgY29uc3QgSU5JVElBTF9UQVBTQ1JJUFRfVkVSU0lPTiA9IDB4YzA7XG5cbmV4cG9ydCBpbnRlcmZhY2UgVGlueVNlY3AyNTZrMUludGVyZmFjZSB7XG4gIGlzWE9ubHlQb2ludChwOiBVaW50OEFycmF5KTogYm9vbGVhbjtcbiAgeE9ubHlQb2ludEFkZFR3ZWFrKHA6IFVpbnQ4QXJyYXksIHR3ZWFrOiBVaW50OEFycmF5KTogWE9ubHlQb2ludEFkZFR3ZWFrUmVzdWx0IHwgbnVsbDtcbiAgcG9pbnRGcm9tU2NhbGFyKHNrOiBVaW50OEFycmF5LCBjb21wcmVzc2VkPzogYm9vbGVhbik6IFVpbnQ4QXJyYXkgfCBudWxsO1xuICBwb2ludE11bHRpcGx5KGE6IFVpbnQ4QXJyYXksIGI6IFVpbnQ4QXJyYXkpOiBVaW50OEFycmF5IHwgbnVsbDtcbiAgcG9pbnRBZGQoYTogVWludDhBcnJheSwgYjogVWludDhBcnJheSk6IFVpbnQ4QXJyYXkgfCBudWxsO1xuICBwcml2YXRlQWRkKGQ6IFVpbnQ4QXJyYXksIHR3ZWFrOiBVaW50OEFycmF5KTogVWludDhBcnJheSB8IG51bGw7XG4gIHByaXZhdGVOZWdhdGUoZDogVWludDhBcnJheSk6IFVpbnQ4QXJyYXk7XG59XG5cbi8qKlxuICogQWdncmVnYXRlcyBhIGxpc3Qgb2YgcHVibGljIGtleXMgaW50byBhIHNpbmdsZSBNdVNpZzIqIHB1YmxpYyBrZXlcbiAqIGFjY29yZGluZyB0byB0aGUgTXVTaWcyIHBhcGVyLlxuICogQHBhcmFtIGVjYyBFbGxpcHRpYyBjdXJ2ZSBpbXBsZW1lbnRhdGlvblxuICogQHBhcmFtIHB1YmtleXMgVGhlIGxpc3Qgb2YgcHViIGtleXMgdG8gYWdncmVnYXRlXG4gKiBAcmV0dXJucyBhIDMyIGJ5dGUgQnVmZmVyIHJlcHJlc2VudGluZyB0aGUgYWdncmVnYXRlIGtleVxuICovXG5leHBvcnQgZnVuY3Rpb24gYWdncmVnYXRlTXVTaWdQdWJrZXlzKGVjYzogVGlueVNlY3AyNTZrMUludGVyZmFjZSwgcHVia2V5czogQnVmZmVyW10pOiBVaW50OEFycmF5IHtcbiAgLy8gVE9ETzogQ29uc2lkZXIgZW5mb3JjaW5nIGtleSB1bmlxdWVuZXNzLlxuICBhc3NlcnQocHVia2V5cy5sZW5ndGggPiAxLCAnYXQgbGVhc3QgdHdvIHB1YmtleXMgYXJlIHJlcXVpcmVkIGZvciBtdXNpZyBrZXkgYWdncmVnYXRpb24nKTtcblxuICAvLyBTb3J0IHRoZSBrZXlzIGluIGFzY2VuZGluZyBvcmRlclxuICBwdWJrZXlzLnNvcnQoQnVmZmVyLmNvbXBhcmUpO1xuXG4gIC8vIEluIE11U2lnIGFsbCBzaWduZXJzIGNvbnRyaWJ1dGUga2V5IG1hdGVyaWFsIHRvIGEgc2luZ2xlIHNpZ25pbmcga2V5LFxuICAvLyB1c2luZyB0aGUgZXF1YXRpb25cbiAgLy9cbiAgLy8gICAgIFAgPSBzdW1faSDCtV9pICogUF9pXG4gIC8vXG4gIC8vIHdoZXJlIGBQX2lgIGlzIHRoZSBwdWJsaWMga2V5IG9mIHRoZSBgaWB0aCBzaWduZXIgYW5kIGDCtV9pYCBpcyBhIHNvLWNhbGxlZFxuICAvLyBfTXVTaWcgY29lZmZpY2llbnRfIGNvbXB1dGVkIGFjY29yZGluZyB0byB0aGUgZm9sbG93aW5nIGVxdWF0aW9uXG4gIC8vXG4gIC8vIEwgPSBIKFBfMSB8fCBQXzIgfHwgLi4uIHx8IFBfbilcbiAgLy8gwrVfaSA9IEgoTCB8fCBQX2kpXG5cbiAgY29uc3QgTCA9IGJjcnlwdG8udGFnZ2VkSGFzaCgnS2V5QWdnIGxpc3QnLCBCdWZmZXIuY29uY2F0KHB1YmtleXMpKTtcblxuICBjb25zdCBzZWNvbmRVbmlxdWVQdWJrZXkgPSBwdWJrZXlzLmZpbmQoKHB1YmtleSkgPT4gIXB1YmtleXNbMF0uZXF1YWxzKHB1YmtleSkpO1xuXG4gIGNvbnN0IHR3ZWFrZWRQdWJrZXlzOiBVaW50OEFycmF5W10gPSBwdWJrZXlzLm1hcCgocHVia2V5KSA9PiB7XG4gICAgY29uc3QgeHlQdWJrZXkgPSBCdWZmZXIuY29uY2F0KFtFVkVOX1lfQ09PUkRfUFJFRklYLCBwdWJrZXldKTtcblxuICAgIGlmIChzZWNvbmRVbmlxdWVQdWJrZXkgIT09IHVuZGVmaW5lZCAmJiBzZWNvbmRVbmlxdWVQdWJrZXkuZXF1YWxzKHB1YmtleSkpIHtcbiAgICAgIC8vIFRoZSBzZWNvbmQgdW5pcXVlIGtleSBpbiB0aGUgcHVia2V5IGxpc3QgZ2l2ZW4gdG8gJydLZXlBZ2cnJyAoYXMgd2VsbFxuICAgICAgLy8gYXMgYW55IGtleXMgaWRlbnRpY2FsIHRvIHRoaXMga2V5KSBnZXRzIHRoZSBjb25zdGFudCBLZXlBZ2dcbiAgICAgIC8vIGNvZWZmaWNpZW50IDEgd2hpY2ggc2F2ZXMgYW4gZXhwb25lbnRpYXRpb24gKHNlZSB0aGUgTXVTaWcyKiBhcHBlbmRpeFxuICAgICAgLy8gaW4gdGhlIE11U2lnMiBwYXBlcikuXG4gICAgICByZXR1cm4geHlQdWJrZXk7XG4gICAgfVxuXG4gICAgY29uc3QgYyA9IGJjcnlwdG8udGFnZ2VkSGFzaCgnS2V5QWdnIGNvZWZmaWNpZW50JywgQnVmZmVyLmNvbmNhdChbTCwgcHVia2V5XSkpO1xuXG4gICAgY29uc3QgdHdlYWtlZFB1YmtleSA9IGVjYy5wb2ludE11bHRpcGx5KHh5UHVia2V5LCBjKTtcbiAgICBpZiAoIXR3ZWFrZWRQdWJrZXkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignRmFpbGVkIHRvIG11bHRpcGx5IHB1YmtleSBieSBjb2VmZmljaWVudCcpO1xuICAgIH1cbiAgICByZXR1cm4gdHdlYWtlZFB1YmtleTtcbiAgfSk7XG4gIGNvbnN0IGFnZ3JlZ2F0ZVB1YmtleSA9IHR3ZWFrZWRQdWJrZXlzLnJlZHVjZSgocHJldiwgY3VycikgPT4ge1xuICAgIGNvbnN0IG5leHQgPSBlY2MucG9pbnRBZGQocHJldiwgY3Vycik7XG4gICAgaWYgKCFuZXh0KSB0aHJvdyBuZXcgRXJyb3IoJ0ZhaWxlZCB0byBzdW0gcHVia2V5cycpO1xuICAgIHJldHVybiBuZXh0O1xuICB9KTtcblxuICByZXR1cm4gYWdncmVnYXRlUHVia2V5LnNsaWNlKDEpO1xufVxuXG4vKipcbiAqIEVuY29kZXMgdGhlIGxlbmd0aCBvZiBhIHNjcmlwdCBhcyBhIGJpdGNvaW4gdmFyaWFibGUgbGVuZ3RoIGludGVnZXIuXG4gKiBAcGFyYW0gc2NyaXB0XG4gKiBAcmV0dXJuc1xuICovXG5leHBvcnQgZnVuY3Rpb24gc2VyaWFsaXplU2NyaXB0U2l6ZShzY3JpcHQ6IEJ1ZmZlcik6IEJ1ZmZlciB7XG4gIHJldHVybiB2YXJ1aW50LmVuY29kZShzY3JpcHQubGVuZ3RoKTtcbn1cblxuLyoqXG4gKiBHZXRzIGEgdGFwbGVhZiB0YWdnZWQgaGFzaCBmcm9tIGEgc2NyaXB0LlxuICogQHBhcmFtIHNjcmlwdFxuICogQHJldHVybnNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGhhc2hUYXBMZWFmKHNjcmlwdDogQnVmZmVyLCBsZWFmVmVyc2lvbiA9IElOSVRJQUxfVEFQU0NSSVBUX1ZFUlNJT04pOiBCdWZmZXIge1xuICBjb25zdCBzaXplID0gc2VyaWFsaXplU2NyaXB0U2l6ZShzY3JpcHQpO1xuICByZXR1cm4gYmNyeXB0by50YWdnZWRIYXNoKCdUYXBMZWFmJywgQnVmZmVyLmNvbmNhdChbQnVmZmVyLm9mKGxlYWZWZXJzaW9uKSwgc2l6ZSwgc2NyaXB0XSkpO1xufVxuXG4vKipcbiAqIENyZWF0ZXMgYSBsZXhpY29ncmFwaGljYWxseSBzb3J0ZWQgdGFwYnJhbmNoIGZyb20gdHdvIGNoaWxkIHRhcHRyZWUgbm9kZXNcbiAqIGFuZCByZXR1cm5zIGl0cyB0YWdnZWQgaGFzaC5cbiAqIEBwYXJhbSBjaGlsZDFcbiAqIEBwYXJhbSBjaGlsZDJcbiAqIEByZXR1cm5zIHRoZSB0YWdnZWQgdGFwYnJhbmNoIGhhc2hcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGhhc2hUYXBCcmFuY2goY2hpbGQxOiBCdWZmZXIsIGNoaWxkMjogQnVmZmVyKTogQnVmZmVyIHtcbiAgLy8gc29ydCB0aGUgY2hpbGRyZW4gbGV4aWNvZ3JhcGhpY2FsbHlcbiAgY29uc3Qgc29ydGVkQ2hpbGRyZW4gPSBbY2hpbGQxLCBjaGlsZDJdLnNvcnQoQnVmZmVyLmNvbXBhcmUpO1xuXG4gIHJldHVybiBiY3J5cHRvLnRhZ2dlZEhhc2goJ1RhcEJyYW5jaCcsIEJ1ZmZlci5jb25jYXQoc29ydGVkQ2hpbGRyZW4pKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNhbGN1bGF0ZVRhcFR3ZWFrKHB1YmtleTogVWludDhBcnJheSwgdGFwdHJlZVJvb3Q/OiBVaW50OEFycmF5KTogVWludDhBcnJheSB7XG4gIGlmIChwdWJrZXkubGVuZ3RoICE9PSAzMikge1xuICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBwdWJrZXkgc2l6ZSAke3B1YmtleS5sZW5ndGh9LmApO1xuICB9XG4gIGlmICh0YXB0cmVlUm9vdCkge1xuICAgIGlmICh0YXB0cmVlUm9vdC5sZW5ndGggIT09IDMyKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgdGFwdHJlZVJvb3Qgc2l6ZSAke3RhcHRyZWVSb290Lmxlbmd0aH0uYCk7XG4gICAgfVxuICAgIHJldHVybiBiY3J5cHRvLnRhZ2dlZEhhc2goJ1RhcFR3ZWFrJywgQnVmZmVyLmNvbmNhdChbcHVia2V5LCB0YXB0cmVlUm9vdF0pKTtcbiAgfVxuICAvLyBJZiB0aGUgc3BlbmRpbmcgY29uZGl0aW9ucyBkbyBub3QgcmVxdWlyZSBhIHNjcmlwdCBwYXRoLCB0aGUgb3V0cHV0IGtleSBzaG91bGQgY29tbWl0IHRvIGFuXG4gIC8vIHVuc3BlbmRhYmxlIHNjcmlwdCBwYXRoIGluc3RlYWQgb2YgaGF2aW5nIG5vIHNjcmlwdCBwYXRoLlxuICAvLyBodHRwczovL2dpdGh1Yi5jb20vYml0Y29pbi9iaXBzL2Jsb2IvbWFzdGVyL2JpcC0wMzQxLm1lZGlhd2lraSNjaXRlX25vdGUtMjJcbiAgcmV0dXJuIGJjcnlwdG8udGFnZ2VkSGFzaCgnVGFwVHdlYWsnLCBCdWZmZXIuZnJvbShwdWJrZXkpKTtcbn1cblxuLyoqXG4gKiBUd2Vha3MgYSBwcml2a2V5LCB1c2luZyB0aGUgdGFnZ2VkIGhhc2ggb2YgaXRzIHB1YmtleSwgYW5kIChvcHRpb25hbGx5KSBhIHRhcHRyZWUgcm9vdFxuICogQHBhcmFtIGVjYyBFbGxpcHRpYyBjdXJ2ZSBpbXBsZW1lbnRhdGlvblxuICogQHBhcmFtIHB1YmtleSBwdWJsaWMga2V5LCB1c2VkIHRvIGNhbGN1bGF0ZSB0aGUgdHdlYWtcbiAqIEBwYXJhbSBwcml2a2V5IHRoZSBwcml2a2V5IHRvIHR3ZWFrXG4gKiBAcGFyYW0gdGFwdHJlZVJvb3QgdGhlIHRhcHRyZWUgcm9vdCB0YWdnZWQgaGFzaFxuICogQHJldHVybnMge0J1ZmZlcn0gdGhlIHR3ZWFrZWQgcHJpdmtleVxuICovXG5leHBvcnQgZnVuY3Rpb24gdGFwVHdlYWtQcml2a2V5KFxuICBlY2M6IFRpbnlTZWNwMjU2azFJbnRlcmZhY2UsXG4gIHB1YmtleTogVWludDhBcnJheSxcbiAgcHJpdmtleTogVWludDhBcnJheSxcbiAgdGFwdHJlZVJvb3Q/OiBVaW50OEFycmF5XG4pOiBVaW50OEFycmF5IHtcbiAgY29uc3QgdGFwVHdlYWsgPSBjYWxjdWxhdGVUYXBUd2VhayhwdWJrZXksIHRhcHRyZWVSb290KTtcblxuICBjb25zdCBwb2ludCA9IGVjYy5wb2ludEZyb21TY2FsYXIocHJpdmtleSk7XG4gIGlmICghcG9pbnQpIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBwcml2YXRlIGtleScpO1xuICBpZiAocG9pbnRbMF0gJSAyID09PSAxKSBwcml2a2V5ID0gZWNjLnByaXZhdGVOZWdhdGUocHJpdmtleSk7XG4gIGNvbnN0IHJlc3VsdCA9IGVjYy5wcml2YXRlQWRkKHByaXZrZXksIHRhcFR3ZWFrKTtcbiAgaWYgKCFyZXN1bHQpIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBwcml2YXRlIGtleScpO1xuICByZXR1cm4gcmVzdWx0O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFhPbmx5UG9pbnRBZGRUd2Vha1Jlc3VsdCB7XG4gIHBhcml0eTogMSB8IDA7XG4gIHhPbmx5UHVia2V5OiBVaW50OEFycmF5O1xufVxuXG4vKipcbiAqIFR3ZWFrcyBhbiBpbnRlcm5hbCBwdWJrZXksIHVzaW5nIHRoZSB0YWdnZWQgaGFzaCBvZiBpdHNlbGYsIGFuZCAob3B0aW9uYWxseSkgYSB0YXB0cmVlIHJvb3RcbiAqIEBwYXJhbSBlY2MgRWxsaXB0aWMgY3VydmUgaW1wbGVtZW50YXRpb25cbiAqIEBwYXJhbSBwdWJrZXkgdGhlIGludGVybmFsIHB1YmtleSB0byB0d2Vha1xuICogQHBhcmFtIHRhcHRyZWVSb290IHRoZSB0YXB0cmVlIHJvb3QgdGFnZ2VkIGhhc2hcbiAqIEByZXR1cm5zIHtUd2Vha2VkUHVia2V5fSB0aGUgdHdlYWtlZCBwdWJrZXlcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRhcFR3ZWFrUHVia2V5KFxuICBlY2M6IFRpbnlTZWNwMjU2azFJbnRlcmZhY2UsXG4gIHB1YmtleTogVWludDhBcnJheSxcbiAgdGFwdHJlZVJvb3Q/OiBCdWZmZXJcbik6IFhPbmx5UG9pbnRBZGRUd2Vha1Jlc3VsdCB7XG4gIGNvbnN0IHRhcFR3ZWFrID0gY2FsY3VsYXRlVGFwVHdlYWsocHVia2V5LCB0YXB0cmVlUm9vdCk7XG4gIGNvbnN0IHJlc3VsdCA9IGVjYy54T25seVBvaW50QWRkVHdlYWsocHVia2V5LCB0YXBUd2Vhayk7XG4gIGlmICghcmVzdWx0KSB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgcHVia2V5Jyk7XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVGFwdHJlZSB7XG4gIHJvb3Q6IEJ1ZmZlcjtcbiAgcGF0aHM6IEJ1ZmZlcltdW107XG59XG5cbmludGVyZmFjZSBXZWlnaHRlZFRhcFNjcmlwdCB7XG4gIC8qKiBBIFRhcExlYWYgb3IgVGFwQnJhbmNoIHRhZ2dlZCBoYXNoICovXG4gIHRhZ2dlZEhhc2g6IEJ1ZmZlcjtcbiAgd2VpZ2h0OiBudW1iZXI7XG4gIHBhdGhzOiB7XG4gICAgW2luZGV4OiBudW1iZXJdOiBCdWZmZXJbXTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gcmVjdXJzZVRhcHRyZWUobGVhdmVzOiBJdGVyYXRvcjxbbnVtYmVyLCBQc2J0VGFwTGVhZl0+LCB0YXJnZXREZXB0aCA9IDApOiBUYXB0cmVlIHtcbiAgY29uc3QgeyB2YWx1ZSwgZG9uZSB9ID0gbGVhdmVzLm5leHQoKTtcbiAgYXNzZXJ0KCFkb25lLCAnaW5zdWZmaWNpZW50IGxlYXZlcyB0byByZWNvbnN0cnVjdCB0YXAgdHJlZScpO1xuICBjb25zdCBbaW5kZXgsIGxlYWZdID0gdmFsdWU7XG4gIGNvbnN0IHRyZWU6IFRhcHRyZWUgPSB7XG4gICAgcm9vdDogaGFzaFRhcExlYWYobGVhZi5zY3JpcHQsIGxlYWYubGVhZlZlcnNpb24pLFxuICAgIHBhdGhzOiBbXSxcbiAgfTtcbiAgdHJlZS5wYXRoc1tpbmRleF0gPSBbXTtcbiAgZm9yIChsZXQgZGVwdGggPSBsZWFmLmRlcHRoOyBkZXB0aCA+IHRhcmdldERlcHRoOyBkZXB0aC0tKSB7XG4gICAgY29uc3Qgc2libGluZyA9IHJlY3Vyc2VUYXB0cmVlKGxlYXZlcywgZGVwdGgpO1xuICAgIHRyZWUucGF0aHMuZm9yRWFjaCgocGF0aCkgPT4gcGF0aC5wdXNoKHNpYmxpbmcucm9vdCkpO1xuICAgIHNpYmxpbmcucGF0aHMuZm9yRWFjaCgocGF0aCkgPT4gcGF0aC5wdXNoKHRyZWUucm9vdCkpO1xuICAgIHRyZWUucm9vdCA9IGhhc2hUYXBCcmFuY2godHJlZS5yb290LCBzaWJsaW5nLnJvb3QpO1xuICAgIC8vIE1lcmdlIGRpc2pvaW50IHNwYXJzZSBhcnJheXMgb2YgcGF0aHMgaW50byB0cmVlLnBhdGhzXG4gICAgT2JqZWN0LmFzc2lnbih0cmVlLnBhdGhzLCBzaWJsaW5nLnBhdGhzKTtcbiAgfVxuICByZXR1cm4gdHJlZTtcbn1cblxuLyoqXG4gKiBHZXRzIHRoZSByb290IGhhc2ggYW5kIGhhc2gtcGF0aHMgb2YgYSB0YXB0cmVlIGZyb20gdGhlIGRlcHRoLWZpcnN0XG4gKiBjb25zdHJ1Y3Rpb24gdXNlZCBpbiBCSVAtMDM3MSBQU0JUc1xuICogQHBhcmFtIHRyZWVcbiAqIEByZXR1cm5zIHtUYXB0cmVlfSB0aGUgdHJlZSwgcmVwcmVzZW50ZWQgYnkgaXRzIHJvb3QgaGFzaCwgYW5kIHRoZSBwYXRocyB0b1xuICogdGhhdCByb290IGZyb20gZWFjaCBvZiB0aGUgaW5wdXQgc2NyaXB0c1xuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0RGVwdGhGaXJzdFRhcHRyZWUodHJlZTogUHNidFRhcFRyZWUpOiBUYXB0cmVlIHtcbiAgY29uc3QgaXRlciA9IHRyZWUubGVhdmVzLmVudHJpZXMoKTtcbiAgY29uc3QgcmV0ID0gcmVjdXJzZVRhcHRyZWUoaXRlcik7XG4gIGFzc2VydChpdGVyLm5leHQoKS5kb25lLCAnaW52YWxpZCB0YXAgdHJlZSwgbm8gcGF0aCB0byBzb21lIGxlYXZlcycpO1xuICByZXR1cm4gcmV0O1xufVxuXG4vKipcbiAqIEdldHMgdGhlIHJvb3QgaGFzaCBvZiBhIHRhcHRyZWUgdXNpbmcgYSB3ZWlnaHRlZCBIdWZmbWFuIGNvbnN0cnVjdGlvbiBmcm9tIGFcbiAqIGxpc3Qgb2Ygc2NyaXB0cyBhbmQgY29ycmVzcG9uZGluZyB3ZWlnaHRzLlxuICogQHBhcmFtIHNjcmlwdHNcbiAqIEBwYXJhbSB3ZWlnaHRzXG4gKiBAcmV0dXJucyB7VGFwdHJlZX0gdGhlIHRyZWUsIHJlcHJlc2VudGVkIGJ5IGl0cyByb290IGhhc2gsIGFuZCB0aGUgcGF0aHMgdG8gdGhhdCByb290IGZyb20gZWFjaCBvZiB0aGUgaW5wdXQgc2NyaXB0c1xuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0SHVmZm1hblRhcHRyZWUoc2NyaXB0czogQnVmZmVyW10sIHdlaWdodHM6IEFycmF5PG51bWJlciB8IHVuZGVmaW5lZD4pOiBUYXB0cmVlIHtcbiAgYXNzZXJ0KHNjcmlwdHMubGVuZ3RoID4gMCwgJ2F0IGxlYXN0IG9uZSBzY3JpcHQgaXMgcmVxdWlyZWQgdG8gY29uc3RydWN0IGEgdGFwIHRyZWUnKTtcblxuICAvLyBDcmVhdGUgYSBxdWV1ZS9oZWFwIG9mIHRoZSBwcm92aWRlZCBzY3JpcHRzIHByaW9yaXRpemVkIGFjY29yZGluZyB0byB0aGVpclxuICAvLyBjb3JyZXNwb25kaW5nIHdlaWdodHMuXG4gIGNvbnN0IHF1ZXVlID0gbmV3IEZhc3RQcmlvcml0eVF1ZXVlPFdlaWdodGVkVGFwU2NyaXB0PigoYSwgYik6IGJvb2xlYW4gPT4ge1xuICAgIHJldHVybiBhLndlaWdodCA8IGIud2VpZ2h0O1xuICB9KTtcbiAgc2NyaXB0cy5mb3JFYWNoKChzY3JpcHQsIGluZGV4KSA9PiB7XG4gICAgY29uc3Qgd2VpZ2h0ID0gd2VpZ2h0c1tpbmRleF0gfHwgMTtcbiAgICBhc3NlcnQod2VpZ2h0ID4gMCwgJ3NjcmlwdCB3ZWlnaHQgbXVzdCBiZSBhIHBvc2l0aXZlIHZhbHVlJyk7XG5cbiAgICBxdWV1ZS5hZGQoe1xuICAgICAgd2VpZ2h0LFxuICAgICAgdGFnZ2VkSGFzaDogaGFzaFRhcExlYWYoc2NyaXB0KSxcbiAgICAgIHBhdGhzOiB7IFtpbmRleF06IFtdIH0sXG4gICAgfSk7XG4gIH0pO1xuXG4gIC8vIE5vdyB0aGF0IHdlIGhhdmUgYSBxdWV1ZSBvZiB3ZWlnaHRlZCBzY3JpcHRzLCB3ZSBiZWdpbiBhIGxvb3Agd2hlcmVieSB3ZVxuICAvLyByZW1vdmUgdGhlIHR3byBsb3dlc3Qgd2VpZ2h0ZWQgaXRlbXMgZnJvbSB0aGUgcXVldWUuIFdlIGNyZWF0ZSBhIHRhcCBicmFuY2hcbiAgLy8gbm9kZSBmcm9tIHRoZSB0d28gaXRlbXMsIGFuZCBhZGQgdGhlIGJyYW5jaCBiYWNrIHRvIHRoZSBxdWV1ZSB3aXRoIHRoZVxuICAvLyBjb21iaW5lZCB3ZWlnaHQgb2YgYm90aCBpdHMgY2hpbGRyZW4uIEVhY2ggbG9vcCByZWR1Y2VzIHRoZSBudW1iZXIgb2YgaXRlbXNcbiAgLy8gaW4gdGhlIHF1ZXVlIGJ5IG9uZSwgYW5kIHdlIHJlcGVhdCB1bnRpbCB3ZSBhcmUgbGVmdCB3aXRoIG9ubHkgb25lIGl0ZW0gLVxuICAvLyB0aGlzIGJlY29tZXMgdGhlIHRhcCB0cmVlIHJvb3QuXG4gIC8vXG4gIC8vIEZvciBleGFtcGxlLCBpZiB3ZSBiZWdpbiB3aXRoIHNjcmlwdHMgQSwgQiwgQywgRCB3aXRoIHdlaWdodHMgNiwgMywgMSwgMVxuICAvLyBBZnRlciBmaXJzdCBsb29wOiBBKDYpLCBCKDMpLCBDRCgxICsgMSlcbiAgLy8gQWZ0ZXIgc2Vjb25kIGxvb3A6IEEoNiksIEJbQ0RdKDMgKyAyKVxuICAvLyBGaW5hbCBsb29wOiBBW0JbQ0RdXSg2KzUpXG4gIC8vIFRoZSBmaW5hbCB0cmVlIHdpbGwgbG9vayBsaWtlOlxuICAvL1xuICAvLyAgICAgICAgQVtCW0NEXV1cbiAgLy8gICAgICAgLyAgICAgICAgXFxcbiAgLy8gICAgICBBICAgICAgICAgQltDRF1cbiAgLy8gICAgICAgICAgICAgICAvICAgICBcXFxuICAvLyAgICAgICAgICAgICAgQiAgICAgIFtDRF1cbiAgLy8gICAgICAgICAgICAgICAgICAgIC8gICAgXFxcbiAgLy8gICAgICAgICAgICAgICAgICAgQyAgICAgIERcbiAgLy9cbiAgLy8gVGhpcyBlbnN1cmVzIHRoYXQgdGhlIHNwZW5kaW5nIGNvbmRpdGlvbnMgd2UgYmVsaWV2ZSB0byBoYXZlIHRoZSBoaWdoZXN0XG4gIC8vIHByb2JhYmlsaXR5IG9mIGJlaW5nIHVzZWQgYXJlIGZ1cnRoZXIgdXAgdGhlIHRyZWUgdGhhbiBsZXNzIGxpa2VseSBzY3JpcHRzLFxuICAvLyB0aGVyZWJ5IHJlZHVjaW5nIHRoZSBzaXplIG9mIHRoZSBtZXJrbGUgcHJvb2ZzIGZvciB0aGUgbW9yZSBsaWtlbHkgc2NyaXB0cy5cbiAgd2hpbGUgKHF1ZXVlLnNpemUgPiAxKSB7XG4gICAgLy8gV2UgY2FuIHNhZmVseSBleHBlY3QgdHdvIHBvbGxzIHRvIHJldHVybiBub24tbnVsbCBlbGVtZW50cyBzaW5jZSB3ZSd2ZVxuICAgIC8vIGNoZWNrZWQgdGhhdCB0aGUgcXVldWUgaGFzIGF0IGxlYXN0IHR3byBlbGVtZW50cyBiZWZvcmUgbG9vcGluZy5cbiAgICBjb25zdCBjaGlsZDEgPSBxdWV1ZS5wb2xsKCkgYXMgV2VpZ2h0ZWRUYXBTY3JpcHQ7XG4gICAgY29uc3QgY2hpbGQyID0gcXVldWUucG9sbCgpIGFzIFdlaWdodGVkVGFwU2NyaXB0O1xuXG4gICAgT2JqZWN0LnZhbHVlcyhjaGlsZDEucGF0aHMpLmZvckVhY2goKHBhdGgpID0+IHBhdGgucHVzaChjaGlsZDIudGFnZ2VkSGFzaCkpO1xuICAgIE9iamVjdC52YWx1ZXMoY2hpbGQyLnBhdGhzKS5mb3JFYWNoKChwYXRoKSA9PiBwYXRoLnB1c2goY2hpbGQxLnRhZ2dlZEhhc2gpKTtcblxuICAgIHF1ZXVlLmFkZCh7XG4gICAgICB0YWdnZWRIYXNoOiBoYXNoVGFwQnJhbmNoKGNoaWxkMS50YWdnZWRIYXNoLCBjaGlsZDIudGFnZ2VkSGFzaCksXG4gICAgICB3ZWlnaHQ6IGNoaWxkMS53ZWlnaHQgKyBjaGlsZDIud2VpZ2h0LFxuICAgICAgcGF0aHM6IHsgLi4uY2hpbGQxLnBhdGhzLCAuLi5jaGlsZDIucGF0aHMgfSxcbiAgICB9KTtcbiAgfVxuXG4gIC8vIEFmdGVyIHRoZSB3aGlsZSBsb29wIGFib3ZlIGNvbXBsZXRlcyB3ZSBzaG91bGQgaGF2ZSBleGFjdGx5IG9uZSBlbGVtZW50XG4gIC8vIHJlbWFpbmluZyBpbiB0aGUgcXVldWUsIHdoaWNoIHdlIGNhbiBzYWZlbHkgZXh0cmFjdCBiZWxvdy5cbiAgY29uc3Qgcm9vdE5vZGUgPSBxdWV1ZS5wb2xsKCkgYXMgV2VpZ2h0ZWRUYXBTY3JpcHQ7XG5cbiAgY29uc3QgcGF0aHMgPSBPYmplY3QuZW50cmllcyhyb290Tm9kZS5wYXRocykucmVkdWNlKChhY2MsIFtpbmRleCwgcGF0aF0pID0+IHtcbiAgICBhY2NbTnVtYmVyKGluZGV4KV0gPSBwYXRoOyAvLyBUT0RPOiBXaHkgZG9lc24ndCBUUyBrbm93IGl0J3MgYSBudW1iZXI/XG4gICAgcmV0dXJuIGFjYztcbiAgfSwgQXJyYXkoc2NyaXB0cy5sZW5ndGgpKTtcbiAgcmV0dXJuIHsgcm9vdDogcm9vdE5vZGUudGFnZ2VkSGFzaCwgcGF0aHMgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldENvbnRyb2xCbG9jayhcbiAgcGFyaXR5OiAwIHwgMSxcbiAgcHVia2V5OiBVaW50OEFycmF5LFxuICBwYXRoOiBCdWZmZXJbXSxcbiAgbGVhZlZlcnNpb24gPSBJTklUSUFMX1RBUFNDUklQVF9WRVJTSU9OXG4pOiBCdWZmZXIge1xuICBjb25zdCBwYXJpdHlWZXJzaW9uID0gbGVhZlZlcnNpb24gKyBwYXJpdHk7XG5cbiAgcmV0dXJuIEJ1ZmZlci5jb25jYXQoW0J1ZmZlci5vZihwYXJpdHlWZXJzaW9uKSwgcHVia2V5LCAuLi5wYXRoXSk7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgS2V5UGF0aFdpdG5lc3Mge1xuICBzcGVuZFR5cGU6ICdLZXknO1xuICBzaWduYXR1cmU6IEJ1ZmZlcjtcbiAgYW5uZXg/OiBCdWZmZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgU2NyaXB0UGF0aFdpdG5lc3Mge1xuICBzcGVuZFR5cGU6ICdTY3JpcHQnO1xuICBzY3JpcHRTaWc6IEJ1ZmZlcltdO1xuICB0YXBzY3JpcHQ6IEJ1ZmZlcjtcbiAgY29udHJvbEJsb2NrOiBCdWZmZXI7XG4gIGFubmV4PzogQnVmZmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIENvbnRyb2xCbG9jayB7XG4gIHBhcml0eTogbnVtYmVyO1xuICBpbnRlcm5hbFB1YmtleTogQnVmZmVyO1xuICBsZWFmVmVyc2lvbjogbnVtYmVyO1xuICBwYXRoOiBCdWZmZXJbXTtcbn1cblxuLyoqXG4gKiBQYXJzZXMgYSB0YXByb290IHdpdG5lc3Mgc3RhY2sgYW5kIGV4dHJhY3RzIGtleSBkYXRhIGVsZW1lbnRzLlxuICogQHBhcmFtIHdpdG5lc3NTdGFja1xuICogQHJldHVybnMge1NjcmlwdFBhdGhXaXRuZXNzfEtleVBhdGhXaXRuZXNzfSBhbiBvYmplY3QgcmVwcmVzZW50aW5nIHRoZVxuICogcGFyc2VkIHdpdG5lc3MgZm9yIGEgc2NyaXB0IHBhdGggb3Iga2V5IHBhdGggc3BlbmQuXG4gKiBAdGhyb3dzIHtFcnJvcn0gaWYgdGhlIHdpdG5lc3Mgc3RhY2sgZG9lcyBub3QgY29uZm9ybSB0byB0aGUgQklQIDM0MSBzY3JpcHQgdmFsaWRhdGlvbiBydWxlc1xuICovXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VUYXByb290V2l0bmVzcyh3aXRuZXNzU3RhY2s6IEJ1ZmZlcltdKTogU2NyaXB0UGF0aFdpdG5lc3MgfCBLZXlQYXRoV2l0bmVzcyB7XG4gIGxldCBhbm5leDtcbiAgaWYgKHdpdG5lc3NTdGFjay5sZW5ndGggPj0gMiAmJiB3aXRuZXNzU3RhY2tbd2l0bmVzc1N0YWNrLmxlbmd0aCAtIDFdWzBdID09PSAweDUwKSB7XG4gICAgLy8gSWYgdGhlcmUgYXJlIGF0IGxlYXN0IHR3byB3aXRuZXNzIGVsZW1lbnRzLCBhbmQgdGhlIGZpcnN0IGJ5dGUgb2YgdGhlIGxhc3QgZWxlbWVudCBpc1xuICAgIC8vIDB4NTAsIHRoaXMgbGFzdCBlbGVtZW50IGlzIGNhbGxlZCBhbm5leCBhIGFuZCBpcyByZW1vdmVkIGZyb20gdGhlIHdpdG5lc3Mgc3RhY2tcbiAgICBhbm5leCA9IHdpdG5lc3NTdGFja1t3aXRuZXNzU3RhY2subGVuZ3RoIC0gMV07XG4gICAgd2l0bmVzc1N0YWNrID0gd2l0bmVzc1N0YWNrLnNsaWNlKDAsIC0xKTtcbiAgfVxuXG4gIGlmICh3aXRuZXNzU3RhY2subGVuZ3RoIDwgMSkge1xuICAgIHRocm93IG5ldyBFcnJvcignd2l0bmVzcyBzdGFjayBtdXN0IGhhdmUgYXQgbGVhc3Qgb25lIGVsZW1lbnQnKTtcbiAgfSBlbHNlIGlmICh3aXRuZXNzU3RhY2subGVuZ3RoID09PSAxKSB7XG4gICAgLy8ga2V5IHBhdGggc3BlbmRcbiAgICBjb25zdCBzaWduYXR1cmUgPSB3aXRuZXNzU3RhY2tbMF07XG4gICAgaWYgKCFic2NyaXB0LmlzQ2Fub25pY2FsU2Nobm9yclNpZ25hdHVyZShzaWduYXR1cmUpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ2ludmFsaWQgc2lnbmF0dXJlJyk7XG4gICAgfVxuICAgIHJldHVybiB7IHNwZW5kVHlwZTogJ0tleScsIHNpZ25hdHVyZSwgYW5uZXggfTtcbiAgfVxuXG4gIC8vIHNjcmlwdCBwYXRoIHNwZW5kXG4gIC8vIHNlY29uZCB0byBsYXN0IGVsZW1lbnQgaXMgdGhlIHRhcHNjcmlwdFxuICBjb25zdCB0YXBzY3JpcHQgPSB3aXRuZXNzU3RhY2tbd2l0bmVzc1N0YWNrLmxlbmd0aCAtIDJdO1xuICBjb25zdCB0YXBzY3JpcHRDaHVua3MgPSBic2NyaXB0LmRlY29tcGlsZSh0YXBzY3JpcHQpO1xuXG4gIGlmICghdGFwc2NyaXB0Q2h1bmtzIHx8IHRhcHNjcmlwdENodW5rcy5sZW5ndGggPT09IDApIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3RhcHNjcmlwdCBpcyBub3QgYSB2YWxpZCBzY3JpcHQnKTtcbiAgfVxuXG4gIC8vIFRoZSBsYXN0IHN0YWNrIGVsZW1lbnQgaXMgY2FsbGVkIHRoZSBjb250cm9sIGJsb2NrIGMsIGFuZCBtdXN0IGhhdmUgbGVuZ3RoIDMzICsgMzJtLFxuICAvLyBmb3IgYSB2YWx1ZSBvZiBtIHRoYXQgaXMgYW4gaW50ZWdlciBiZXR3ZWVuIDAgYW5kIDEyOCwgaW5jbHVzaXZlXG4gIGNvbnN0IGNvbnRyb2xCbG9jayA9IHdpdG5lc3NTdGFja1t3aXRuZXNzU3RhY2subGVuZ3RoIC0gMV07XG4gIGlmIChjb250cm9sQmxvY2subGVuZ3RoIDwgMzMgfHwgY29udHJvbEJsb2NrLmxlbmd0aCA+IDMzICsgMzIgKiAxMjggfHwgY29udHJvbEJsb2NrLmxlbmd0aCAlIDMyICE9PSAxKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdpbnZhbGlkIGNvbnRyb2wgYmxvY2sgbGVuZ3RoJyk7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIHNwZW5kVHlwZTogJ1NjcmlwdCcsXG4gICAgc2NyaXB0U2lnOiB3aXRuZXNzU3RhY2suc2xpY2UoMCwgLTIpLFxuICAgIHRhcHNjcmlwdCxcbiAgICBjb250cm9sQmxvY2ssXG4gICAgYW5uZXgsXG4gIH07XG59XG5cbi8qKlxuICogUGFyc2VzIGEgdGFwcm9vdCBjb250cm9sIGJsb2NrLlxuICogQHBhcmFtIGVjYyBFbGxpcHRpYyBjdXJ2ZSBpbXBsZW1lbnRhdGlvblxuICogQHBhcmFtIGNvbnRyb2xCbG9jayB0aGUgY29udHJvbCBibG9jayB0byBwYXJzZVxuICogQHJldHVybnMge0NvbnRyb2xCbG9ja30gdGhlIHBhcnNlZCBjb250cm9sIGJsb2NrXG4gKiBAdGhyb3dzIHtFcnJvcn0gaWYgdGhlIHdpdG5lc3Mgc3RhY2sgZG9lcyBub3QgY29uZm9ybSB0byB0aGUgQklQIDM0MSBzY3JpcHQgdmFsaWRhdGlvbiBydWxlc1xuICovXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VDb250cm9sQmxvY2soZWNjOiBUaW55U2VjcDI1NmsxSW50ZXJmYWNlLCBjb250cm9sQmxvY2s6IEJ1ZmZlcik6IENvbnRyb2xCbG9jayB7XG4gIGlmICgoY29udHJvbEJsb2NrLmxlbmd0aCAtIDEpICUgMzIgIT09IDApIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdJbnZhbGlkIGNvbnRyb2wgYmxvY2sgbGVuZ3RoJyk7XG4gIH1cblxuICBjb25zdCBwYXJpdHkgPSBjb250cm9sQmxvY2tbMF0gJiAweDAxO1xuXG4gIC8vIExldCBwID0gY1sxOjMzXSBhbmQgbGV0IFAgPSBsaWZ0X3goaW50KHApKSB3aGVyZSBsaWZ0X3ggYW5kIFs6XSBhcmUgZGVmaW5lZCBhcyBpbiBCSVAzNDAuXG4gIC8vIEZhaWwgaWYgdGhpcyBwb2ludCBpcyBub3Qgb24gdGhlIGN1cnZlXG4gIGNvbnN0IGludGVybmFsUHVia2V5ID0gY29udHJvbEJsb2NrLnNsaWNlKDEsIDMzKTtcbiAgaWYgKCFlY2MuaXNYT25seVBvaW50KGludGVybmFsUHVia2V5KSkge1xuICAgIHRocm93IG5ldyBFcnJvcignaW50ZXJuYWwgcHVia2V5IGlzIG5vdCBhbiBFQyBwb2ludCcpO1xuICB9XG5cbiAgLy8gVGhlIGxlYWYgdmVyc2lvbiBjYW5ub3QgYmUgMHg1MCBhcyB0aGF0IHdvdWxkIHJlc3VsdCBpbiBhbWJpZ3VpdHkgd2l0aCB0aGUgYW5uZXguXG4gIGNvbnN0IGxlYWZWZXJzaW9uID0gY29udHJvbEJsb2NrWzBdICYgMHhmZTtcbiAgaWYgKGxlYWZWZXJzaW9uID09PSAweDUwKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdpbnZhbGlkIGxlYWYgdmVyc2lvbicpO1xuICB9XG5cbiAgY29uc3QgcGF0aDogQnVmZmVyW10gPSBbXTtcbiAgZm9yIChsZXQgaiA9IDMzOyBqIDwgY29udHJvbEJsb2NrLmxlbmd0aDsgaiArPSAzMikge1xuICAgIHBhdGgucHVzaChjb250cm9sQmxvY2suc2xpY2UoaiwgaiArIDMyKSk7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIHBhcml0eSxcbiAgICBpbnRlcm5hbFB1YmtleSxcbiAgICBsZWFmVmVyc2lvbixcbiAgICBwYXRoLFxuICB9O1xufVxuXG4vKipcbiAqIENhbGN1bGF0ZXMgdGhlIHRhcGxlYWYgaGFzaCBmcm9tIGEgY29udHJvbCBibG9jayBhbmQgc2NyaXB0LlxuICogQHBhcmFtIGVjYyBFbGxpcHRpYyBjdXJ2ZSBpbXBsZW1lbnRhdGlvblxuICogQHBhcmFtIGNvbnRyb2xCbG9jayB0aGUgY29udHJvbCBibG9jaywgZWl0aGVyIHJhdyBvciBwYXJzZWRcbiAqIEBwYXJhbSB0YXBzY3JpcHQgdGhlIGxlYWYgc2NyaXB0IGNvcnJlc2Rwb25kaW5nIHRvIHRoZSBjb250cm9sIGJsb2NrXG4gKiBAcmV0dXJucyB7QnVmZmVyfSB0aGUgdGFwbGVhZiBoYXNoXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRUYXBsZWFmSGFzaChcbiAgZWNjOiBUaW55U2VjcDI1NmsxSW50ZXJmYWNlLFxuICBjb250cm9sQmxvY2s6IEJ1ZmZlciB8IENvbnRyb2xCbG9jayxcbiAgdGFwc2NyaXB0OiBCdWZmZXJcbik6IEJ1ZmZlciB7XG4gIGlmIChCdWZmZXIuaXNCdWZmZXIoY29udHJvbEJsb2NrKSkge1xuICAgIGNvbnRyb2xCbG9jayA9IHBhcnNlQ29udHJvbEJsb2NrKGVjYywgY29udHJvbEJsb2NrKTtcbiAgfVxuICBjb25zdCB7IGxlYWZWZXJzaW9uIH0gPSBjb250cm9sQmxvY2s7XG5cbiAgcmV0dXJuIGJjcnlwdG8udGFnZ2VkSGFzaChcbiAgICAnVGFwTGVhZicsXG4gICAgQnVmZmVyLmNvbmNhdChbQnVmZmVyLm9mKGxlYWZWZXJzaW9uKSwgc2VyaWFsaXplU2NyaXB0U2l6ZSh0YXBzY3JpcHQpLCB0YXBzY3JpcHRdKVxuICApO1xufVxuXG4vKipcbiAqIENhbGN1bGF0ZXMgdGhlIHRhcHRyZWUgcm9vdCBoYXNoIGZyb20gYSBjb250cm9sIGJsb2NrIGFuZCBzY3JpcHQuXG4gKiBAcGFyYW0gZWNjIEVsbGlwdGljIGN1cnZlIGltcGxlbWVudGF0aW9uXG4gKiBAcGFyYW0gY29udHJvbEJsb2NrIHRoZSBjb250cm9sIGJsb2NrLCBlaXRoZXIgcmF3IG9yIHBhcnNlZFxuICogQHBhcmFtIHRhcHNjcmlwdCB0aGUgbGVhZiBzY3JpcHQgY29ycmVzZHBvbmRpbmcgdG8gdGhlIGNvbnRyb2wgYmxvY2tcbiAqIEBwYXJhbSB0YXBsZWFmSGFzaCB0aGUgbGVhZiBoYXNoIGlmIGFscmVhZHkgY2FsY3VsYXRlZFxuICogQHJldHVybnMge0J1ZmZlcn0gdGhlIHRhcHRyZWUgcm9vdCBoYXNoXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRUYXB0cmVlUm9vdChcbiAgZWNjOiBUaW55U2VjcDI1NmsxSW50ZXJmYWNlLFxuICBjb250cm9sQmxvY2s6IEJ1ZmZlciB8IENvbnRyb2xCbG9jayxcbiAgdGFwc2NyaXB0OiBCdWZmZXIsXG4gIHRhcGxlYWZIYXNoPzogQnVmZmVyXG4pOiBCdWZmZXIge1xuICBpZiAoQnVmZmVyLmlzQnVmZmVyKGNvbnRyb2xCbG9jaykpIHtcbiAgICBjb250cm9sQmxvY2sgPSBwYXJzZUNvbnRyb2xCbG9jayhlY2MsIGNvbnRyb2xCbG9jayk7XG4gIH1cbiAgY29uc3QgeyBwYXRoIH0gPSBjb250cm9sQmxvY2s7XG5cbiAgdGFwbGVhZkhhc2ggPSB0YXBsZWFmSGFzaCB8fCBnZXRUYXBsZWFmSGFzaChlY2MsIGNvbnRyb2xCbG9jaywgdGFwc2NyaXB0KTtcblxuICAvLyBgdGFwdHJlZU1lcmtsZUhhc2hgIGJlZ2lucyBhcyBvdXIgdGFwc2NyaXB0IHRhcGxlYWYgaGFzaCBhbmQgaXRzIHZhbHVlIGl0ZXJhdGVzXG4gIC8vIHRocm91Z2ggaXRzIHBhcmVudCB0YXBicmFuY2ggaGFzaGVzIHVudGlsIGl0IGVuZHMgdXAgYXMgdGhlIHRhcHRyZWUgcm9vdCBoYXNoXG4gIGxldCB0YXB0cmVlTWVya2xlSGFzaCA9IHRhcGxlYWZIYXNoO1xuICBmb3IgKGNvbnN0IHRhcHRyZWVTaWJsaW5nSGFzaCBvZiBwYXRoKSB7XG4gICAgdGFwdHJlZU1lcmtsZUhhc2ggPVxuICAgICAgQnVmZmVyLmNvbXBhcmUodGFwdHJlZU1lcmtsZUhhc2gsIHRhcHRyZWVTaWJsaW5nSGFzaCkgPT09IC0xXG4gICAgICAgID8gYmNyeXB0by50YWdnZWRIYXNoKCdUYXBCcmFuY2gnLCBCdWZmZXIuY29uY2F0KFt0YXB0cmVlTWVya2xlSGFzaCwgdGFwdHJlZVNpYmxpbmdIYXNoXSkpXG4gICAgICAgIDogYmNyeXB0by50YWdnZWRIYXNoKCdUYXBCcmFuY2gnLCBCdWZmZXIuY29uY2F0KFt0YXB0cmVlU2libGluZ0hhc2gsIHRhcHRyZWVNZXJrbGVIYXNoXSkpO1xuICB9XG5cbiAgcmV0dXJuIHRhcHRyZWVNZXJrbGVIYXNoO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0VHdlYWtlZE91dHB1dEtleShwYXltZW50OiBicGF5bWVudHMuUGF5bWVudCk6IEJ1ZmZlciB7XG4gIGFzc2VydChwYXltZW50Lm91dHB1dCk7XG4gIGlmIChwYXltZW50Lm91dHB1dC5sZW5ndGggPT09IDM0KSB7XG4gICAgcmV0dXJuIHBheW1lbnQub3V0cHV0Py5zdWJhcnJheSgyKTtcbiAgfVxuICB0aHJvdyBuZXcgRXJyb3IoYGludmFsaWQgcDJ0ciB0d2Vha2VkIG91dHB1dCBrZXkgc2l6ZSAke3BheW1lbnQub3V0cHV0Lmxlbmd0aH1gKTtcbn1cblxuLyoqXG4gKiBAcmV0dXJucyBvdXRwdXQgc2NyaXB0IGZvciBlaXRoZXIgc2NyaXB0IHBhdGggaW5wdXQgY29udHJvbEJsb2NrXG4gKiAmIGxlYWZTY3JpcHQgT1Iga2V5IHBhdGggaW5wdXQgaW50ZXJuYWxQdWJLZXkgJiB0YXB0cmVlUm9vdFxuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlVGFwcm9vdE91dHB1dFNjcmlwdChcbiAgcDJ0ckFyZ3M6IHsgaW50ZXJuYWxQdWJLZXk6IEJ1ZmZlcjsgdGFwdHJlZVJvb3Q6IEJ1ZmZlciB9IHwgeyBjb250cm9sQmxvY2s6IEJ1ZmZlcjsgbGVhZlNjcmlwdDogQnVmZmVyIH1cbik6IEJ1ZmZlciB7XG4gIGxldCBpbnRlcm5hbFB1YktleTogQnVmZmVyIHwgdW5kZWZpbmVkO1xuICBsZXQgdGFwdHJlZVJvb3Q6IEJ1ZmZlciB8IHVuZGVmaW5lZDtcbiAgaWYgKCdpbnRlcm5hbFB1YktleScgaW4gcDJ0ckFyZ3MpIHtcbiAgICBpbnRlcm5hbFB1YktleSA9IHAydHJBcmdzLmludGVybmFsUHViS2V5O1xuICAgIHRhcHRyZWVSb290ID0gcDJ0ckFyZ3MudGFwdHJlZVJvb3Q7XG4gIH0gZWxzZSB7XG4gICAgaW50ZXJuYWxQdWJLZXkgPSBwYXJzZUNvbnRyb2xCbG9jayhlY2NMaWIsIHAydHJBcmdzLmNvbnRyb2xCbG9jaykuaW50ZXJuYWxQdWJrZXk7XG4gICAgdGFwdHJlZVJvb3QgPSBnZXRUYXB0cmVlUm9vdChlY2NMaWIsIHAydHJBcmdzLmNvbnRyb2xCbG9jaywgcDJ0ckFyZ3MubGVhZlNjcmlwdCk7XG4gIH1cbiAgY29uc3Qgb3V0cHV0S2V5ID0gdGFwVHdlYWtQdWJrZXkoZWNjTGliLCBpbnRlcm5hbFB1YktleSwgdGFwdHJlZVJvb3QpLnhPbmx5UHVia2V5O1xuICByZXR1cm4gYnNjcmlwdC5jb21waWxlKFtic2NyaXB0Lk9QUy5PUF8xLCBCdWZmZXIuZnJvbShvdXRwdXRLZXkpXSk7XG59XG5cbi8qKlxuICogQHJldHVybnMgeC1vbmx5IHRhcHJvb3Qgb3V0cHV0IGtleSAodGFwT3V0cHV0S2V5KVxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0VGFwcm9vdE91dHB1dEtleShvdXRwdXRTY3JpcHQ6IEJ1ZmZlciB8IChudW1iZXIgfCBCdWZmZXIpW10pOiBCdWZmZXIge1xuICBjb25zdCBvdXRwdXREZWNvbXBpbGVkID0gYnNjcmlwdC5kZWNvbXBpbGUob3V0cHV0U2NyaXB0KTtcbiAgaWYgKG91dHB1dERlY29tcGlsZWQ/Lmxlbmd0aCAhPT0gMikge1xuICAgIHRocm93IG5ldyBFcnJvcignaW52YWxpZCB0YXByb290IG91dHB1dCBzY3JpcHQnKTtcbiAgfVxuICBjb25zdCBbb3AxLCBvdXRwdXRLZXldID0gb3V0cHV0RGVjb21waWxlZDtcbiAgaWYgKG9wMSAhPT0gYnNjcmlwdC5PUFMuT1BfMSB8fCAhQnVmZmVyLmlzQnVmZmVyKG91dHB1dEtleSkgfHwgb3V0cHV0S2V5Lmxlbmd0aCAhPT0gMzIpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2ludmFsaWQgdGFwcm9vdCBvdXRwdXQgc2NyaXB0Jyk7XG4gIH1cbiAgcmV0dXJuIG91dHB1dEtleTtcbn1cbiJdfQ==
425
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFwcm9vdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy90YXByb290LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxvRUFBb0U7QUFDcEUsaUVBQWlFO0FBQ2pFLGlFQUFpRTs7O0FBaUNqRSxzREFnREM7QUFPRCxrREFFQztBQU9ELGtDQUdDO0FBU0Qsc0NBS0M7QUFFRCw4Q0FjQztBQVVELDBDQWNDO0FBY0Qsd0NBU0M7QUEyQ0Qsb0RBS0M7QUFTRCw4Q0FvRUM7QUFFRCwwQ0FTQztBQThCRCxrREEyQ0M7QUFTRCw4Q0ErQkM7QUFTRCx3Q0FjQztBQVVELHdDQXdCQztBQUVELGtEQU1DO0FBTUQsOERBY0M7QUFLRCxrREFVQztBQTNnQkQsaUNBQWtDO0FBQ2xDLHVEQUF3RDtBQUN4RCxpREFBNEY7QUFDNUYscURBQXNEO0FBQ3RELE1BQU0sT0FBTyxHQUFHLE9BQU8sQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO0FBRTNDOzs7R0FHRztBQUNVLFFBQUEsbUJBQW1CLEdBQUcsTUFBTSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUN0QyxRQUFBLHlCQUF5QixHQUFHLElBQUksQ0FBQztBQVk5Qzs7Ozs7O0dBTUc7QUFDSCxTQUFnQixxQkFBcUIsQ0FBQyxHQUEyQixFQUFFLE9BQWlCO0lBQ2xGLDJDQUEyQztJQUMzQyxNQUFNLENBQUMsT0FBTyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsNkRBQTZELENBQUMsQ0FBQztJQUUxRixtQ0FBbUM7SUFDbkMsT0FBTyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUM7SUFFN0Isd0VBQXdFO0lBQ3hFLHFCQUFxQjtJQUNyQixFQUFFO0lBQ0YsMEJBQTBCO0lBQzFCLEVBQUU7SUFDRiw2RUFBNkU7SUFDN0UsbUVBQW1FO0lBQ25FLEVBQUU7SUFDRixrQ0FBa0M7SUFDbEMsb0JBQW9CO0lBRXBCLE1BQU0sQ0FBQyxHQUFHLHNCQUFPLENBQUMsVUFB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QUFDLFlBQTBDO0lBQzVFLE1BQU0sZ0JBQWdCLEdBQUcsc0JBQU8sQ0FBQyxTQUFTLENBQUMsWUFBWSxDQUFDLENBQUM7SUFDekQsSUFBSSxnQkFBZ0IsRUFBRSxNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUM7UUFDbkMsTUFBTSxJQUFJLEtBQUssQ0FBQywrQkFBK0IsQ0FBQyxDQUFDO0lBQ25ELENBQUM7SUFDRCxNQUFNLENBQUMsR0FBRyxFQUFFLFNBQVMsQ0FBQyxHQUFHLGdCQUFnQixDQUFDO0lBQzFDLElBQUksR0FBRyxLQUFLLHNCQUFPLENBQUMsR0FBRyxDQUFDLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLElBQUksU0FBUyxDQUFDLE1BQU0sS0FBSyxFQUFFLEVBQUUsQ0FBQztRQUN2RixNQUFNLElBQUksS0FBSyxDQUFDLCtCQUErQixDQUFDLENBQUM7SUFDbkQsQ0FBQztJQUNELE9BQU8sU0FBUyxDQUFDO0FBQ25CLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBUYXByb290LXNwZWNpZmljIGtleSBhZ2dyZWdhdGlvbiBhbmQgdGFwdHJlZSBsb2dpYyBhcyBkZWZpbmVkIGluOlxuLy8gaHR0cHM6Ly9naXRodWIuY29tL2JpdGNvaW4vYmlwcy9ibG9iL21hc3Rlci9iaXAtMDM0MC5tZWRpYXdpa2lcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9iaXRjb2luL2JpcHMvYmxvYi9tYXN0ZXIvYmlwLTAzNDEubWVkaWF3aWtpXG5cbmltcG9ydCB7IFRhcFRyZWUgYXMgUHNidFRhcFRyZWUsIFRhcExlYWYgYXMgUHNidFRhcExlYWYgfSBmcm9tICdiaXAxNzQvc3JjL2xpYi9pbnRlcmZhY2VzJztcbmltcG9ydCBhc3NlcnQgPSByZXF1aXJlKCdhc3NlcnQnKTtcbmltcG9ydCBGYXN0UHJpb3JpdHlRdWV1ZSA9IHJlcXVpcmUoJ2Zhc3Rwcmlvcml0eXF1ZXVlJyk7XG5pbXBvcnQgeyBzY3JpcHQgYXMgYnNjcmlwdCwgY3J5cHRvIGFzIGJjcnlwdG8sIHBheW1lbnRzIGFzIGJwYXltZW50cyB9IGZyb20gJ2JpdGNvaW5qcy1saWInO1xuaW1wb3J0IHsgZWNjIGFzIGVjY0xpYiB9IGZyb20gJ0BiaXRnby1iZXRhL3NlY3AyNTZrMSc7XG5jb25zdCB2YXJ1aW50ID0gcmVxdWlyZSgndmFydWludC1iaXRjb2luJyk7XG5cbi8qKlxuICogVGhlIDB4MDIgcHJlZml4IGluZGljYXRpbmcgYW4gZXZlbiBZIGNvb3JkaW5hdGUgd2hpY2ggaXMgaW1wbGljaXRseSBhc3N1bWVkXG4gKiBvbiBhbGwgMzIgYnl0ZSB4LW9ubHkgcHViIGtleXMgYXMgZGVmaW5lZCBpbiBCSVAzNDAuXG4gKi9cbmV4cG9ydCBjb25zdCBFVkVOX1lfQ09PUkRfUFJFRklYID0gQnVmZmVyLm9mKDB4MDIpO1xuZXhwb3J0IGNvbnN0IElOSVRJQUxfVEFQU0NSSVBUX1ZFUlNJT04gPSAweGMwO1xuXG5leHBvcnQgaW50ZXJmYWNlIFRpbnlTZWNwMjU2azFJbnRlcmZhY2Uge1xuICBpc1hPbmx5UG9pbnQocDogVWludDhBcnJheSk6IGJvb2xlYW47XG4gIHhPbmx5UG9pbnRBZGRUd2VhayhwOiBVaW50OEFycmF5LCB0d2VhazogVWludDhBcnJheSk6IFhPbmx5UG9pbnRBZGRUd2Vha1Jlc3VsdCB8IG51bGw7XG4gIHBvaW50RnJvbVNjYWxhcihzazogVWludDhBcnJheSwgY29tcHJlc3NlZD86IGJvb2xlYW4pOiBVaW50OEFycmF5IHwgbnVsbDtcbiAgcG9pbnRNdWx0aXBseShhOiBVaW50OEFycmF5LCBiOiBVaW50OEFycmF5KTogVWludDhBcnJheSB8IG51bGw7XG4gIHBvaW50QWRkKGE6IFVpbnQ4QXJyYXksIGI6IFVpbnQ4QXJyYXkpOiBVaW50OEFycmF5IHwgbnVsbDtcbiAgcHJpdmF0ZUFkZChkOiBVaW50OEFycmF5LCB0d2VhazogVWludDhBcnJheSk6IFVpbnQ4QXJyYXkgfCBudWxsO1xuICBwcml2YXRlTmVnYXRlKGQ6IFVpbnQ4QXJyYXkpOiBVaW50OEFycmF5O1xufVxuXG4vKipcbiAqIEFnZ3JlZ2F0ZXMgYSBsaXN0IG9mIHB1YmxpYyBrZXlzIGludG8gYSBzaW5nbGUgTXVTaWcyKiBwdWJsaWMga2V5XG4gKiBhY2NvcmRpbmcgdG8gdGhlIE11U2lnMiBwYXBlci5cbiAqIEBwYXJhbSBlY2MgRWxsaXB0aWMgY3VydmUgaW1wbGVtZW50YXRpb25cbiAqIEBwYXJhbSBwdWJrZXlzIFRoZSBsaXN0IG9mIHB1YiBrZXlzIHRvIGFnZ3JlZ2F0ZVxuICogQHJldHVybnMgYSAzMiBieXRlIEJ1ZmZlciByZXByZXNlbnRpbmcgdGhlIGFnZ3JlZ2F0ZSBrZXlcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFnZ3JlZ2F0ZU11U2lnUHVia2V5cyhlY2M6IFRpbnlTZWNwMjU2azFJbnRlcmZhY2UsIHB1YmtleXM6IEJ1ZmZlcltdKTogVWludDhBcnJheSB7XG4gIC8vIFRPRE86IENvbnNpZGVyIGVuZm9yY2luZyBrZXkgdW5pcXVlbmVzcy5cbiAgYXNzZXJ0KHB1YmtleXMubGVuZ3RoID4gMSwgJ2F0IGxlYXN0IHR3byBwdWJrZXlzIGFyZSByZXF1aXJlZCBmb3IgbXVzaWcga2V5IGFnZ3JlZ2F0aW9uJyk7XG5cbiAgLy8gU29ydCB0aGUga2V5cyBpbiBhc2NlbmRpbmcgb3JkZXJcbiAgcHVia2V5cy5zb3J0KEJ1ZmZlci5jb21wYXJlKTtcblxuICAvLyBJbiBNdVNpZyBhbGwgc2lnbmVycyBjb250cmlidXRlIGtleSBtYXRlcmlhbCB0byBhIHNpbmdsZSBzaWduaW5nIGtleSxcbiAgLy8gdXNpbmcgdGhlIGVxdWF0aW9uXG4gIC8vXG4gIC8vICAgICBQID0gc3VtX2kgwrVfaSAqIFBfaVxuICAvL1xuICAvLyB3aGVyZSBgUF9pYCBpcyB0aGUgcHVibGljIGtleSBvZiB0aGUgYGlgdGggc2lnbmVyIGFuZCBgwrVfaWAgaXMgYSBzby1jYWxsZWRcbiAgLy8gX011U2lnIGNvZWZmaWNpZW50XyBjb21wdXRlZCBhY2NvcmRpbmcgdG8gdGhlIGZvbGxvd2luZyBlcXVhdGlvblxuICAvL1xuICAvLyBMID0gSChQXzEgfHwgUF8yIHx8IC4uLiB8fCBQX24pXG4gIC8vIMK1X2kgPSBIKEwgfHwgUF9pKVxuXG4gIGNvbnN0IEwgPSBiY3J5cHRvLnRhZ2dlZEhhc2goJ0tleUFnZyBsaXN0JywgQnVmZmVyLmNvbmNhdChwdWJrZXlzKSk7XG5cbiAgY29uc3Qgc2Vjb25kVW5pcXVlUHVia2V5ID0gcHVia2V5cy5maW5kKChwdWJrZXkpID0+ICFwdWJrZXlzWzBdLmVxdWFscyhwdWJrZXkpKTtcblxuICBjb25zdCB0d2Vha2VkUHVia2V5czogVWludDhBcnJheVtdID0gcHVia2V5cy5tYXAoKHB1YmtleSkgPT4ge1xuICAgIGNvbnN0IHh5UHVia2V5ID0gQnVmZmVyLmNvbmNhdChbRVZFTl9ZX0NPT1JEX1BSRUZJWCwgcHVia2V5XSk7XG5cbiAgICBpZiAoc2Vjb25kVW5pcXVlUHVia2V5ICE9PSB1bmRlZmluZWQgJiYgc2Vjb25kVW5pcXVlUHVia2V5LmVxdWFscyhwdWJrZXkpKSB7XG4gICAgICAvLyBUaGUgc2Vjb25kIHVuaXF1ZSBrZXkgaW4gdGhlIHB1YmtleSBsaXN0IGdpdmVuIHRvICcnS2V5QWdnJycgKGFzIHdlbGxcbiAgICAgIC8vIGFzIGFueSBrZXlzIGlkZW50aWNhbCB0byB0aGlzIGtleSkgZ2V0cyB0aGUgY29uc3RhbnQgS2V5QWdnXG4gICAgICAvLyBjb2VmZmljaWVudCAxIHdoaWNoIHNhdmVzIGFuIGV4cG9uZW50aWF0aW9uIChzZWUgdGhlIE11U2lnMiogYXBwZW5kaXhcbiAgICAgIC8vIGluIHRoZSBNdVNpZzIgcGFwZXIpLlxuICAgICAgcmV0dXJuIHh5UHVia2V5O1xuICAgIH1cblxuICAgIGNvbnN0IGMgPSBiY3J5cHRvLnRhZ2dlZEhhc2goJ0tleUFnZyBjb2VmZmljaWVudCcsIEJ1ZmZlci5jb25jYXQoW0wsIHB1YmtleV0pKTtcblxuICAgIGNvbnN0IHR3ZWFrZWRQdWJrZXkgPSBlY2MucG9pbnRNdWx0aXBseSh4eVB1YmtleSwgYyk7XG4gICAgaWYgKCF0d2Vha2VkUHVia2V5KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ZhaWxlZCB0byBtdWx0aXBseSBwdWJrZXkgYnkgY29lZmZpY2llbnQnKTtcbiAgICB9XG4gICAgcmV0dXJuIHR3ZWFrZWRQdWJrZXk7XG4gIH0pO1xuICBjb25zdCBhZ2dyZWdhdGVQdWJrZXkgPSB0d2Vha2VkUHVia2V5cy5yZWR1Y2UoKHByZXYsIGN1cnIpID0+IHtcbiAgICBjb25zdCBuZXh0ID0gZWNjLnBvaW50QWRkKHByZXYsIGN1cnIpO1xuICAgIGlmICghbmV4dCkgdGhyb3cgbmV3IEVycm9yKCdGYWlsZWQgdG8gc3VtIHB1YmtleXMnKTtcbiAgICByZXR1cm4gbmV4dDtcbiAgfSk7XG5cbiAgcmV0dXJuIGFnZ3JlZ2F0ZVB1YmtleS5zbGljZSgxKTtcbn1cblxuLyoqXG4gKiBFbmNvZGVzIHRoZSBsZW5ndGggb2YgYSBzY3JpcHQgYXMgYSBiaXRjb2luIHZhcmlhYmxlIGxlbmd0aCBpbnRlZ2VyLlxuICogQHBhcmFtIHNjcmlwdFxuICogQHJldHVybnNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNlcmlhbGl6ZVNjcmlwdFNpemUoc2NyaXB0OiBCdWZmZXIpOiBCdWZmZXIge1xuICByZXR1cm4gdmFydWludC5lbmNvZGUoc2NyaXB0Lmxlbmd0aCk7XG59XG5cbi8qKlxuICogR2V0cyBhIHRhcGxlYWYgdGFnZ2VkIGhhc2ggZnJvbSBhIHNjcmlwdC5cbiAqIEBwYXJhbSBzY3JpcHRcbiAqIEByZXR1cm5zXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBoYXNoVGFwTGVhZihzY3JpcHQ6IEJ1ZmZlciwgbGVhZlZlcnNpb24gPSBJTklUSUFMX1RBUFNDUklQVF9WRVJTSU9OKTogQnVmZmVyIHtcbiAgY29uc3Qgc2l6ZSA9IHNlcmlhbGl6ZVNjcmlwdFNpemUoc2NyaXB0KTtcbiAgcmV0dXJuIGJjcnlwdG8udGFnZ2VkSGFzaCgnVGFwTGVhZicsIEJ1ZmZlci5jb25jYXQoW0J1ZmZlci5vZihsZWFmVmVyc2lvbiksIHNpemUsIHNjcmlwdF0pKTtcbn1cblxuLyoqXG4gKiBDcmVhdGVzIGEgbGV4aWNvZ3JhcGhpY2FsbHkgc29ydGVkIHRhcGJyYW5jaCBmcm9tIHR3byBjaGlsZCB0YXB0cmVlIG5vZGVzXG4gKiBhbmQgcmV0dXJucyBpdHMgdGFnZ2VkIGhhc2guXG4gKiBAcGFyYW0gY2hpbGQxXG4gKiBAcGFyYW0gY2hpbGQyXG4gKiBAcmV0dXJucyB0aGUgdGFnZ2VkIHRhcGJyYW5jaCBoYXNoXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBoYXNoVGFwQnJhbmNoKGNoaWxkMTogQnVmZmVyLCBjaGlsZDI6IEJ1ZmZlcik6IEJ1ZmZlciB7XG4gIC8vIHNvcnQgdGhlIGNoaWxkcmVuIGxleGljb2dyYXBoaWNhbGx5XG4gIGNvbnN0IHNvcnRlZENoaWxkcmVuID0gW2NoaWxkMSwgY2hpbGQyXS5zb3J0KEJ1ZmZlci5jb21wYXJlKTtcblxuICByZXR1cm4gYmNyeXB0by50YWdnZWRIYXNoKCdUYXBCcmFuY2gnLCBCdWZmZXIuY29uY2F0KHNvcnRlZENoaWxkcmVuKSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjYWxjdWxhdGVUYXBUd2VhayhwdWJrZXk6IFVpbnQ4QXJyYXksIHRhcHRyZWVSb290PzogVWludDhBcnJheSk6IFVpbnQ4QXJyYXkge1xuICBpZiAocHVia2V5Lmxlbmd0aCAhPT0gMzIpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgcHVia2V5IHNpemUgJHtwdWJrZXkubGVuZ3RofS5gKTtcbiAgfVxuICBpZiAodGFwdHJlZVJvb3QpIHtcbiAgICBpZiAodGFwdHJlZVJvb3QubGVuZ3RoICE9PSAzMikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIHRhcHRyZWVSb290IHNpemUgJHt0YXB0cmVlUm9vdC5sZW5ndGh9LmApO1xuICAgIH1cbiAgICByZXR1cm4gYmNyeXB0by50YWdnZWRIYXNoKCdUYXBUd2VhaycsIEJ1ZmZlci5jb25jYXQoW3B1YmtleSwgdGFwdHJlZVJvb3RdKSk7XG4gIH1cbiAgLy8gSWYgdGhlIHNwZW5kaW5nIGNvbmRpdGlvbnMgZG8gbm90IHJlcXVpcmUgYSBzY3JpcHQgcGF0aCwgdGhlIG91dHB1dCBrZXkgc2hvdWxkIGNvbW1pdCB0byBhblxuICAvLyB1bnNwZW5kYWJsZSBzY3JpcHQgcGF0aCBpbnN0ZWFkIG9mIGhhdmluZyBubyBzY3JpcHQgcGF0aC5cbiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2JpdGNvaW4vYmlwcy9ibG9iL21hc3Rlci9iaXAtMDM0MS5tZWRpYXdpa2kjY2l0ZV9ub3RlLTIyXG4gIHJldHVybiBiY3J5cHRvLnRhZ2dlZEhhc2goJ1RhcFR3ZWFrJywgQnVmZmVyLmZyb20ocHVia2V5KSk7XG59XG5cbi8qKlxuICogVHdlYWtzIGEgcHJpdmtleSwgdXNpbmcgdGhlIHRhZ2dlZCBoYXNoIG9mIGl0cyBwdWJrZXksIGFuZCAob3B0aW9uYWxseSkgYSB0YXB0cmVlIHJvb3RcbiAqIEBwYXJhbSBlY2MgRWxsaXB0aWMgY3VydmUgaW1wbGVtZW50YXRpb25cbiAqIEBwYXJhbSBwdWJrZXkgcHVibGljIGtleSwgdXNlZCB0byBjYWxjdWxhdGUgdGhlIHR3ZWFrXG4gKiBAcGFyYW0gcHJpdmtleSB0aGUgcHJpdmtleSB0byB0d2Vha1xuICogQHBhcmFtIHRhcHRyZWVSb290IHRoZSB0YXB0cmVlIHJvb3QgdGFnZ2VkIGhhc2hcbiAqIEByZXR1cm5zIHtCdWZmZXJ9IHRoZSB0d2Vha2VkIHByaXZrZXlcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRhcFR3ZWFrUHJpdmtleShcbiAgZWNjOiBUaW55U2VjcDI1NmsxSW50ZXJmYWNlLFxuICBwdWJrZXk6IFVpbnQ4QXJyYXksXG4gIHByaXZrZXk6IFVpbnQ4QXJyYXksXG4gIHRhcHRyZWVSb290PzogVWludDhBcnJheVxuKTogVWludDhBcnJheSB7XG4gIGNvbnN0IHRhcFR3ZWFrID0gY2FsY3VsYXRlVGFwVHdlYWsocHVia2V5LCB0YXB0cmVlUm9vdCk7XG5cbiAgY29uc3QgcG9pbnQgPSBlY2MucG9pbnRGcm9tU2NhbGFyKHByaXZrZXkpO1xuICBpZiAoIXBvaW50KSB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgcHJpdmF0ZSBrZXknKTtcbiAgaWYgKHBvaW50WzBdICUgMiA9PT0gMSkgcHJpdmtleSA9IGVjYy5wcml2YXRlTmVnYXRlKHByaXZrZXkpO1xuICBjb25zdCByZXN1bHQgPSBlY2MucHJpdmF0ZUFkZChwcml2a2V5LCB0YXBUd2Vhayk7XG4gIGlmICghcmVzdWx0KSB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgcHJpdmF0ZSBrZXknKTtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBYT25seVBvaW50QWRkVHdlYWtSZXN1bHQge1xuICBwYXJpdHk6IDEgfCAwO1xuICB4T25seVB1YmtleTogVWludDhBcnJheTtcbn1cblxuLyoqXG4gKiBUd2Vha3MgYW4gaW50ZXJuYWwgcHVia2V5LCB1c2luZyB0aGUgdGFnZ2VkIGhhc2ggb2YgaXRzZWxmLCBhbmQgKG9wdGlvbmFsbHkpIGEgdGFwdHJlZSByb290XG4gKiBAcGFyYW0gZWNjIEVsbGlwdGljIGN1cnZlIGltcGxlbWVudGF0aW9uXG4gKiBAcGFyYW0gcHVia2V5IHRoZSBpbnRlcm5hbCBwdWJrZXkgdG8gdHdlYWtcbiAqIEBwYXJhbSB0YXB0cmVlUm9vdCB0aGUgdGFwdHJlZSByb290IHRhZ2dlZCBoYXNoXG4gKiBAcmV0dXJucyB7VHdlYWtlZFB1YmtleX0gdGhlIHR3ZWFrZWQgcHVia2V5XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0YXBUd2Vha1B1YmtleShcbiAgZWNjOiBUaW55U2VjcDI1NmsxSW50ZXJmYWNlLFxuICBwdWJrZXk6IFVpbnQ4QXJyYXksXG4gIHRhcHRyZWVSb290PzogQnVmZmVyXG4pOiBYT25seVBvaW50QWRkVHdlYWtSZXN1bHQge1xuICBjb25zdCB0YXBUd2VhayA9IGNhbGN1bGF0ZVRhcFR3ZWFrKHB1YmtleSwgdGFwdHJlZVJvb3QpO1xuICBjb25zdCByZXN1bHQgPSBlY2MueE9ubHlQb2ludEFkZFR3ZWFrKHB1YmtleSwgdGFwVHdlYWspO1xuICBpZiAoIXJlc3VsdCkgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIHB1YmtleScpO1xuICByZXR1cm4gcmVzdWx0O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFRhcHRyZWUge1xuICByb290OiBCdWZmZXI7XG4gIHBhdGhzOiBCdWZmZXJbXVtdO1xufVxuXG5pbnRlcmZhY2UgV2VpZ2h0ZWRUYXBTY3JpcHQge1xuICAvKiogQSBUYXBMZWFmIG9yIFRhcEJyYW5jaCB0YWdnZWQgaGFzaCAqL1xuICB0YWdnZWRIYXNoOiBCdWZmZXI7XG4gIHdlaWdodDogbnVtYmVyO1xuICBwYXRoczoge1xuICAgIFtpbmRleDogbnVtYmVyXTogQnVmZmVyW107XG4gIH07XG59XG5cbmZ1bmN0aW9uIHJlY3Vyc2VUYXB0cmVlKGxlYXZlczogSXRlcmF0b3I8W251bWJlciwgUHNidFRhcExlYWZdPiwgdGFyZ2V0RGVwdGggPSAwKTogVGFwdHJlZSB7XG4gIGNvbnN0IHsgdmFsdWUsIGRvbmUgfSA9IGxlYXZlcy5uZXh0KCk7XG4gIGFzc2VydCghZG9uZSwgJ2luc3VmZmljaWVudCBsZWF2ZXMgdG8gcmVjb25zdHJ1Y3QgdGFwIHRyZWUnKTtcbiAgY29uc3QgW2luZGV4LCBsZWFmXSA9IHZhbHVlO1xuICBjb25zdCB0cmVlOiBUYXB0cmVlID0ge1xuICAgIHJvb3Q6IGhhc2hUYXBMZWFmKGxlYWYuc2NyaXB0LCBsZWFmLmxlYWZWZXJzaW9uKSxcbiAgICBwYXRoczogW10sXG4gIH07XG4gIHRyZWUucGF0aHNbaW5kZXhdID0gW107XG4gIGZvciAobGV0IGRlcHRoID0gbGVhZi5kZXB0aDsgZGVwdGggPiB0YXJnZXREZXB0aDsgZGVwdGgtLSkge1xuICAgIGNvbnN0IHNpYmxpbmcgPSByZWN1cnNlVGFwdHJlZShsZWF2ZXMsIGRlcHRoKTtcbiAgICB0cmVlLnBhdGhzLmZvckVhY2goKHBhdGgpID0+IHBhdGgucHVzaChzaWJsaW5nLnJvb3QpKTtcbiAgICBzaWJsaW5nLnBhdGhzLmZvckVhY2goKHBhdGgpID0+IHBhdGgucHVzaCh0cmVlLnJvb3QpKTtcbiAgICB0cmVlLnJvb3QgPSBoYXNoVGFwQnJhbmNoKHRyZWUucm9vdCwgc2libGluZy5yb290KTtcbiAgICAvLyBNZXJnZSBkaXNqb2ludCBzcGFyc2UgYXJyYXlzIG9mIHBhdGhzIGludG8gdHJlZS5wYXRoc1xuICAgIE9iamVjdC5hc3NpZ24odHJlZS5wYXRocywgc2libGluZy5wYXRocyk7XG4gIH1cbiAgcmV0dXJuIHRyZWU7XG59XG5cbi8qKlxuICogR2V0cyB0aGUgcm9vdCBoYXNoIGFuZCBoYXNoLXBhdGhzIG9mIGEgdGFwdHJlZSBmcm9tIHRoZSBkZXB0aC1maXJzdFxuICogY29uc3RydWN0aW9uIHVzZWQgaW4gQklQLTAzNzEgUFNCVHNcbiAqIEBwYXJhbSB0cmVlXG4gKiBAcmV0dXJucyB7VGFwdHJlZX0gdGhlIHRyZWUsIHJlcHJlc2VudGVkIGJ5IGl0cyByb290IGhhc2gsIGFuZCB0aGUgcGF0aHMgdG9cbiAqIHRoYXQgcm9vdCBmcm9tIGVhY2ggb2YgdGhlIGlucHV0IHNjcmlwdHNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldERlcHRoRmlyc3RUYXB0cmVlKHRyZWU6IFBzYnRUYXBUcmVlKTogVGFwdHJlZSB7XG4gIGNvbnN0IGl0ZXIgPSB0cmVlLmxlYXZlcy5lbnRyaWVzKCk7XG4gIGNvbnN0IHJldCA9IHJlY3Vyc2VUYXB0cmVlKGl0ZXIpO1xuICBhc3NlcnQoaXRlci5uZXh0KCkuZG9uZSwgJ2ludmFsaWQgdGFwIHRyZWUsIG5vIHBhdGggdG8gc29tZSBsZWF2ZXMnKTtcbiAgcmV0dXJuIHJldDtcbn1cblxuLyoqXG4gKiBHZXRzIHRoZSByb290IGhhc2ggb2YgYSB0YXB0cmVlIHVzaW5nIGEgd2VpZ2h0ZWQgSHVmZm1hbiBjb25zdHJ1Y3Rpb24gZnJvbSBhXG4gKiBsaXN0IG9mIHNjcmlwdHMgYW5kIGNvcnJlc3BvbmRpbmcgd2VpZ2h0cy5cbiAqIEBwYXJhbSBzY3JpcHRzXG4gKiBAcGFyYW0gd2VpZ2h0c1xuICogQHJldHVybnMge1RhcHRyZWV9IHRoZSB0cmVlLCByZXByZXNlbnRlZCBieSBpdHMgcm9vdCBoYXNoLCBhbmQgdGhlIHBhdGhzIHRvIHRoYXQgcm9vdCBmcm9tIGVhY2ggb2YgdGhlIGlucHV0IHNjcmlwdHNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEh1ZmZtYW5UYXB0cmVlKHNjcmlwdHM6IEJ1ZmZlcltdLCB3ZWlnaHRzOiBBcnJheTxudW1iZXIgfCB1bmRlZmluZWQ+KTogVGFwdHJlZSB7XG4gIGFzc2VydChzY3JpcHRzLmxlbmd0aCA+IDAsICdhdCBsZWFzdCBvbmUgc2NyaXB0IGlzIHJlcXVpcmVkIHRvIGNvbnN0cnVjdCBhIHRhcCB0cmVlJyk7XG5cbiAgLy8gQ3JlYXRlIGEgcXVldWUvaGVhcCBvZiB0aGUgcHJvdmlkZWQgc2NyaXB0cyBwcmlvcml0aXplZCBhY2NvcmRpbmcgdG8gdGhlaXJcbiAgLy8gY29ycmVzcG9uZGluZyB3ZWlnaHRzLlxuICBjb25zdCBxdWV1ZSA9IG5ldyBGYXN0UHJpb3JpdHlRdWV1ZTxXZWlnaHRlZFRhcFNjcmlwdD4oKGEsIGIpOiBib29sZWFuID0+IHtcbiAgICByZXR1cm4gYS53ZWlnaHQgPCBiLndlaWdodDtcbiAgfSk7XG4gIHNjcmlwdHMuZm9yRWFjaCgoc2NyaXB0LCBpbmRleCkgPT4ge1xuICAgIGNvbnN0IHdlaWdodCA9IHdlaWdodHNbaW5kZXhdIHx8IDE7XG4gICAgYXNzZXJ0KHdlaWdodCA+IDAsICdzY3JpcHQgd2VpZ2h0IG11c3QgYmUgYSBwb3NpdGl2ZSB2YWx1ZScpO1xuXG4gICAgcXVldWUuYWRkKHtcbiAgICAgIHdlaWdodCxcbiAgICAgIHRhZ2dlZEhhc2g6IGhhc2hUYXBMZWFmKHNjcmlwdCksXG4gICAgICBwYXRoczogeyBbaW5kZXhdOiBbXSB9LFxuICAgIH0pO1xuICB9KTtcblxuICAvLyBOb3cgdGhhdCB3ZSBoYXZlIGEgcXVldWUgb2Ygd2VpZ2h0ZWQgc2NyaXB0cywgd2UgYmVnaW4gYSBsb29wIHdoZXJlYnkgd2VcbiAgLy8gcmVtb3ZlIHRoZSB0d28gbG93ZXN0IHdlaWdodGVkIGl0ZW1zIGZyb20gdGhlIHF1ZXVlLiBXZSBjcmVhdGUgYSB0YXAgYnJhbmNoXG4gIC8vIG5vZGUgZnJvbSB0aGUgdHdvIGl0ZW1zLCBhbmQgYWRkIHRoZSBicmFuY2ggYmFjayB0byB0aGUgcXVldWUgd2l0aCB0aGVcbiAgLy8gY29tYmluZWQgd2VpZ2h0IG9mIGJvdGggaXRzIGNoaWxkcmVuLiBFYWNoIGxvb3AgcmVkdWNlcyB0aGUgbnVtYmVyIG9mIGl0ZW1zXG4gIC8vIGluIHRoZSBxdWV1ZSBieSBvbmUsIGFuZCB3ZSByZXBlYXQgdW50aWwgd2UgYXJlIGxlZnQgd2l0aCBvbmx5IG9uZSBpdGVtIC1cbiAgLy8gdGhpcyBiZWNvbWVzIHRoZSB0YXAgdHJlZSByb290LlxuICAvL1xuICAvLyBGb3IgZXhhbXBsZSwgaWYgd2UgYmVnaW4gd2l0aCBzY3JpcHRzIEEsIEIsIEMsIEQgd2l0aCB3ZWlnaHRzIDYsIDMsIDEsIDFcbiAgLy8gQWZ0ZXIgZmlyc3QgbG9vcDogQSg2KSwgQigzKSwgQ0QoMSArIDEpXG4gIC8vIEFmdGVyIHNlY29uZCBsb29wOiBBKDYpLCBCW0NEXSgzICsgMilcbiAgLy8gRmluYWwgbG9vcDogQVtCW0NEXV0oNis1KVxuICAvLyBUaGUgZmluYWwgdHJlZSB3aWxsIGxvb2sgbGlrZTpcbiAgLy9cbiAgLy8gICAgICAgIEFbQltDRF1dXG4gIC8vICAgICAgIC8gICAgICAgIFxcXG4gIC8vICAgICAgQSAgICAgICAgIEJbQ0RdXG4gIC8vICAgICAgICAgICAgICAgLyAgICAgXFxcbiAgLy8gICAgICAgICAgICAgIEIgICAgICBbQ0RdXG4gIC8vICAgICAgICAgICAgICAgICAgICAvICAgIFxcXG4gIC8vICAgICAgICAgICAgICAgICAgIEMgICAgICBEXG4gIC8vXG4gIC8vIFRoaXMgZW5zdXJlcyB0aGF0IHRoZSBzcGVuZGluZyBjb25kaXRpb25zIHdlIGJlbGlldmUgdG8gaGF2ZSB0aGUgaGlnaGVzdFxuICAvLyBwcm9iYWJpbGl0eSBvZiBiZWluZyB1c2VkIGFyZSBmdXJ0aGVyIHVwIHRoZSB0cmVlIHRoYW4gbGVzcyBsaWtlbHkgc2NyaXB0cyxcbiAgLy8gdGhlcmVieSByZWR1Y2luZyB0aGUgc2l6ZSBvZiB0aGUgbWVya2xlIHByb29mcyBmb3IgdGhlIG1vcmUgbGlrZWx5IHNjcmlwdHMuXG4gIHdoaWxlIChxdWV1ZS5zaXplID4gMSkge1xuICAgIC8vIFdlIGNhbiBzYWZlbHkgZXhwZWN0IHR3byBwb2xscyB0byByZXR1cm4gbm9uLW51bGwgZWxlbWVudHMgc2luY2Ugd2UndmVcbiAgICAvLyBjaGVja2VkIHRoYXQgdGhlIHF1ZXVlIGhhcyBhdCBsZWFzdCB0d28gZWxlbWVudHMgYmVmb3JlIGxvb3BpbmcuXG4gICAgY29uc3QgY2hpbGQxID0gcXVldWUucG9sbCgpIGFzIFdlaWdodGVkVGFwU2NyaXB0O1xuICAgIGNvbnN0IGNoaWxkMiA9IHF1ZXVlLnBvbGwoKSBhcyBXZWlnaHRlZFRhcFNjcmlwdDtcblxuICAgIE9iamVjdC52YWx1ZXMoY2hpbGQxLnBhdGhzKS5mb3JFYWNoKChwYXRoKSA9PiBwYXRoLnB1c2goY2hpbGQyLnRhZ2dlZEhhc2gpKTtcbiAgICBPYmplY3QudmFsdWVzKGNoaWxkMi5wYXRocykuZm9yRWFjaCgocGF0aCkgPT4gcGF0aC5wdXNoKGNoaWxkMS50YWdnZWRIYXNoKSk7XG5cbiAgICBxdWV1ZS5hZGQoe1xuICAgICAgdGFnZ2VkSGFzaDogaGFzaFRhcEJyYW5jaChjaGlsZDEudGFnZ2VkSGFzaCwgY2hpbGQyLnRhZ2dlZEhhc2gpLFxuICAgICAgd2VpZ2h0OiBjaGlsZDEud2VpZ2h0ICsgY2hpbGQyLndlaWdodCxcbiAgICAgIHBhdGhzOiB7IC4uLmNoaWxkMS5wYXRocywgLi4uY2hpbGQyLnBhdGhzIH0sXG4gICAgfSk7XG4gIH1cblxuICAvLyBBZnRlciB0aGUgd2hpbGUgbG9vcCBhYm92ZSBjb21wbGV0ZXMgd2Ugc2hvdWxkIGhhdmUgZXhhY3RseSBvbmUgZWxlbWVudFxuICAvLyByZW1haW5pbmcgaW4gdGhlIHF1ZXVlLCB3aGljaCB3ZSBjYW4gc2FmZWx5IGV4dHJhY3QgYmVsb3cuXG4gIGNvbnN0IHJvb3ROb2RlID0gcXVldWUucG9sbCgpIGFzIFdlaWdodGVkVGFwU2NyaXB0O1xuXG4gIGNvbnN0IHBhdGhzID0gT2JqZWN0LmVudHJpZXMocm9vdE5vZGUucGF0aHMpLnJlZHVjZSgoYWNjLCBbaW5kZXgsIHBhdGhdKSA9PiB7XG4gICAgYWNjW051bWJlcihpbmRleCldID0gcGF0aDsgLy8gVE9ETzogV2h5IGRvZXNuJ3QgVFMga25vdyBpdCdzIGEgbnVtYmVyP1xuICAgIHJldHVybiBhY2M7XG4gIH0sIEFycmF5KHNjcmlwdHMubGVuZ3RoKSk7XG4gIHJldHVybiB7IHJvb3Q6IHJvb3ROb2RlLnRhZ2dlZEhhc2gsIHBhdGhzIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRDb250cm9sQmxvY2soXG4gIHBhcml0eTogMCB8IDEsXG4gIHB1YmtleTogVWludDhBcnJheSxcbiAgcGF0aDogQnVmZmVyW10sXG4gIGxlYWZWZXJzaW9uID0gSU5JVElBTF9UQVBTQ1JJUFRfVkVSU0lPTlxuKTogQnVmZmVyIHtcbiAgY29uc3QgcGFyaXR5VmVyc2lvbiA9IGxlYWZWZXJzaW9uICsgcGFyaXR5O1xuXG4gIHJldHVybiBCdWZmZXIuY29uY2F0KFtCdWZmZXIub2YocGFyaXR5VmVyc2lvbiksIHB1YmtleSwgLi4ucGF0aF0pO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEtleVBhdGhXaXRuZXNzIHtcbiAgc3BlbmRUeXBlOiAnS2V5JztcbiAgc2lnbmF0dXJlOiBCdWZmZXI7XG4gIGFubmV4PzogQnVmZmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFNjcmlwdFBhdGhXaXRuZXNzIHtcbiAgc3BlbmRUeXBlOiAnU2NyaXB0JztcbiAgc2NyaXB0U2lnOiBCdWZmZXJbXTtcbiAgdGFwc2NyaXB0OiBCdWZmZXI7XG4gIGNvbnRyb2xCbG9jazogQnVmZmVyO1xuICBhbm5leD86IEJ1ZmZlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBDb250cm9sQmxvY2sge1xuICBwYXJpdHk6IG51bWJlcjtcbiAgaW50ZXJuYWxQdWJrZXk6IEJ1ZmZlcjtcbiAgbGVhZlZlcnNpb246IG51bWJlcjtcbiAgcGF0aDogQnVmZmVyW107XG59XG5cbi8qKlxuICogUGFyc2VzIGEgdGFwcm9vdCB3aXRuZXNzIHN0YWNrIGFuZCBleHRyYWN0cyBrZXkgZGF0YSBlbGVtZW50cy5cbiAqIEBwYXJhbSB3aXRuZXNzU3RhY2tcbiAqIEByZXR1cm5zIHtTY3JpcHRQYXRoV2l0bmVzc3xLZXlQYXRoV2l0bmVzc30gYW4gb2JqZWN0IHJlcHJlc2VudGluZyB0aGVcbiAqIHBhcnNlZCB3aXRuZXNzIGZvciBhIHNjcmlwdCBwYXRoIG9yIGtleSBwYXRoIHNwZW5kLlxuICogQHRocm93cyB7RXJyb3J9IGlmIHRoZSB3aXRuZXNzIHN0YWNrIGRvZXMgbm90IGNvbmZvcm0gdG8gdGhlIEJJUCAzNDEgc2NyaXB0IHZhbGlkYXRpb24gcnVsZXNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlVGFwcm9vdFdpdG5lc3Mod2l0bmVzc1N0YWNrOiBCdWZmZXJbXSk6IFNjcmlwdFBhdGhXaXRuZXNzIHwgS2V5UGF0aFdpdG5lc3Mge1xuICBsZXQgYW5uZXg7XG4gIGlmICh3aXRuZXNzU3RhY2subGVuZ3RoID49IDIgJiYgd2l0bmVzc1N0YWNrW3dpdG5lc3NTdGFjay5sZW5ndGggLSAxXVswXSA9PT0gMHg1MCkge1xuICAgIC8vIElmIHRoZXJlIGFyZSBhdCBsZWFzdCB0d28gd2l0bmVzcyBlbGVtZW50cywgYW5kIHRoZSBmaXJzdCBieXRlIG9mIHRoZSBsYXN0IGVsZW1lbnQgaXNcbiAgICAvLyAweDUwLCB0aGlzIGxhc3QgZWxlbWVudCBpcyBjYWxsZWQgYW5uZXggYSBhbmQgaXMgcmVtb3ZlZCBmcm9tIHRoZSB3aXRuZXNzIHN0YWNrXG4gICAgYW5uZXggPSB3aXRuZXNzU3RhY2tbd2l0bmVzc1N0YWNrLmxlbmd0aCAtIDFdO1xuICAgIHdpdG5lc3NTdGFjayA9IHdpdG5lc3NTdGFjay5zbGljZSgwLCAtMSk7XG4gIH1cblxuICBpZiAod2l0bmVzc1N0YWNrLmxlbmd0aCA8IDEpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3dpdG5lc3Mgc3RhY2sgbXVzdCBoYXZlIGF0IGxlYXN0IG9uZSBlbGVtZW50Jyk7XG4gIH0gZWxzZSBpZiAod2l0bmVzc1N0YWNrLmxlbmd0aCA9PT0gMSkge1xuICAgIC8vIGtleSBwYXRoIHNwZW5kXG4gICAgY29uc3Qgc2lnbmF0dXJlID0gd2l0bmVzc1N0YWNrWzBdO1xuICAgIGlmICghYnNjcmlwdC5pc0Nhbm9uaWNhbFNjaG5vcnJTaWduYXR1cmUoc2lnbmF0dXJlKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdpbnZhbGlkIHNpZ25hdHVyZScpO1xuICAgIH1cbiAgICByZXR1cm4geyBzcGVuZFR5cGU6ICdLZXknLCBzaWduYXR1cmUsIGFubmV4IH07XG4gIH1cblxuICAvLyBzY3JpcHQgcGF0aCBzcGVuZFxuICAvLyBzZWNvbmQgdG8gbGFzdCBlbGVtZW50IGlzIHRoZSB0YXBzY3JpcHRcbiAgY29uc3QgdGFwc2NyaXB0ID0gd2l0bmVzc1N0YWNrW3dpdG5lc3NTdGFjay5sZW5ndGggLSAyXTtcbiAgY29uc3QgdGFwc2NyaXB0Q2h1bmtzID0gYnNjcmlwdC5kZWNvbXBpbGUodGFwc2NyaXB0KTtcblxuICBpZiAoIXRhcHNjcmlwdENodW5rcyB8fCB0YXBzY3JpcHRDaHVua3MubGVuZ3RoID09PSAwKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCd0YXBzY3JpcHQgaXMgbm90IGEgdmFsaWQgc2NyaXB0Jyk7XG4gIH1cblxuICAvLyBUaGUgbGFzdCBzdGFjayBlbGVtZW50IGlzIGNhbGxlZCB0aGUgY29udHJvbCBibG9jayBjLCBhbmQgbXVzdCBoYXZlIGxlbmd0aCAzMyArIDMybSxcbiAgLy8gZm9yIGEgdmFsdWUgb2YgbSB0aGF0IGlzIGFuIGludGVnZXIgYmV0d2VlbiAwIGFuZCAxMjgsIGluY2x1c2l2ZVxuICBjb25zdCBjb250cm9sQmxvY2sgPSB3aXRuZXNzU3RhY2tbd2l0bmVzc1N0YWNrLmxlbmd0aCAtIDFdO1xuICBpZiAoY29udHJvbEJsb2NrLmxlbmd0aCA8IDMzIHx8IGNvbnRyb2xCbG9jay5sZW5ndGggPiAzMyArIDMyICogMTI4IHx8IGNvbnRyb2xCbG9jay5sZW5ndGggJSAzMiAhPT0gMSkge1xuICAgIHRocm93IG5ldyBFcnJvcignaW52YWxpZCBjb250cm9sIGJsb2NrIGxlbmd0aCcpO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBzcGVuZFR5cGU6ICdTY3JpcHQnLFxuICAgIHNjcmlwdFNpZzogd2l0bmVzc1N0YWNrLnNsaWNlKDAsIC0yKSxcbiAgICB0YXBzY3JpcHQsXG4gICAgY29udHJvbEJsb2NrLFxuICAgIGFubmV4LFxuICB9O1xufVxuXG4vKipcbiAqIFBhcnNlcyBhIHRhcHJvb3QgY29udHJvbCBibG9jay5cbiAqIEBwYXJhbSBlY2MgRWxsaXB0aWMgY3VydmUgaW1wbGVtZW50YXRpb25cbiAqIEBwYXJhbSBjb250cm9sQmxvY2sgdGhlIGNvbnRyb2wgYmxvY2sgdG8gcGFyc2VcbiAqIEByZXR1cm5zIHtDb250cm9sQmxvY2t9IHRoZSBwYXJzZWQgY29udHJvbCBibG9ja1xuICogQHRocm93cyB7RXJyb3J9IGlmIHRoZSB3aXRuZXNzIHN0YWNrIGRvZXMgbm90IGNvbmZvcm0gdG8gdGhlIEJJUCAzNDEgc2NyaXB0IHZhbGlkYXRpb24gcnVsZXNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlQ29udHJvbEJsb2NrKGVjYzogVGlueVNlY3AyNTZrMUludGVyZmFjZSwgY29udHJvbEJsb2NrOiBCdWZmZXIpOiBDb250cm9sQmxvY2sge1xuICBpZiAoKGNvbnRyb2xCbG9jay5sZW5ndGggLSAxKSAlIDMyICE9PSAwKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignSW52YWxpZCBjb250cm9sIGJsb2NrIGxlbmd0aCcpO1xuICB9XG5cbiAgY29uc3QgcGFyaXR5ID0gY29udHJvbEJsb2NrWzBdICYgMHgwMTtcblxuICAvLyBMZXQgcCA9IGNbMTozM10gYW5kIGxldCBQID0gbGlmdF94KGludChwKSkgd2hlcmUgbGlmdF94IGFuZCBbOl0gYXJlIGRlZmluZWQgYXMgaW4gQklQMzQwLlxuICAvLyBGYWlsIGlmIHRoaXMgcG9pbnQgaXMgbm90IG9uIHRoZSBjdXJ2ZVxuICBjb25zdCBpbnRlcm5hbFB1YmtleSA9IGNvbnRyb2xCbG9jay5zbGljZSgxLCAzMyk7XG4gIGlmICghZWNjLmlzWE9ubHlQb2ludChpbnRlcm5hbFB1YmtleSkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2ludGVybmFsIHB1YmtleSBpcyBub3QgYW4gRUMgcG9pbnQnKTtcbiAgfVxuXG4gIC8vIFRoZSBsZWFmIHZlcnNpb24gY2Fubm90IGJlIDB4NTAgYXMgdGhhdCB3b3VsZCByZXN1bHQgaW4gYW1iaWd1aXR5IHdpdGggdGhlIGFubmV4LlxuICBjb25zdCBsZWFmVmVyc2lvbiA9IGNvbnRyb2xCbG9ja1swXSAmIDB4ZmU7XG4gIGlmIChsZWFmVmVyc2lvbiA9PT0gMHg1MCkge1xuICAgIHRocm93IG5ldyBFcnJvcignaW52YWxpZCBsZWFmIHZlcnNpb24nKTtcbiAgfVxuXG4gIGNvbnN0IHBhdGg6IEJ1ZmZlcltdID0gW107XG4gIGZvciAobGV0IGogPSAzMzsgaiA8IGNvbnRyb2xCbG9jay5sZW5ndGg7IGogKz0gMzIpIHtcbiAgICBwYXRoLnB1c2goY29udHJvbEJsb2NrLnNsaWNlKGosIGogKyAzMikpO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBwYXJpdHksXG4gICAgaW50ZXJuYWxQdWJrZXksXG4gICAgbGVhZlZlcnNpb24sXG4gICAgcGF0aCxcbiAgfTtcbn1cblxuLyoqXG4gKiBDYWxjdWxhdGVzIHRoZSB0YXBsZWFmIGhhc2ggZnJvbSBhIGNvbnRyb2wgYmxvY2sgYW5kIHNjcmlwdC5cbiAqIEBwYXJhbSBlY2MgRWxsaXB0aWMgY3VydmUgaW1wbGVtZW50YXRpb25cbiAqIEBwYXJhbSBjb250cm9sQmxvY2sgdGhlIGNvbnRyb2wgYmxvY2ssIGVpdGhlciByYXcgb3IgcGFyc2VkXG4gKiBAcGFyYW0gdGFwc2NyaXB0IHRoZSBsZWFmIHNjcmlwdCBjb3JyZXNkcG9uZGluZyB0byB0aGUgY29udHJvbCBibG9ja1xuICogQHJldHVybnMge0J1ZmZlcn0gdGhlIHRhcGxlYWYgaGFzaFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0VGFwbGVhZkhhc2goXG4gIGVjYzogVGlueVNlY3AyNTZrMUludGVyZmFjZSxcbiAgY29udHJvbEJsb2NrOiBCdWZmZXIgfCBDb250cm9sQmxvY2ssXG4gIHRhcHNjcmlwdDogQnVmZmVyXG4pOiBCdWZmZXIge1xuICBpZiAoQnVmZmVyLmlzQnVmZmVyKGNvbnRyb2xCbG9jaykpIHtcbiAgICBjb250cm9sQmxvY2sgPSBwYXJzZUNvbnRyb2xCbG9jayhlY2MsIGNvbnRyb2xCbG9jayk7XG4gIH1cbiAgY29uc3QgeyBsZWFmVmVyc2lvbiB9ID0gY29udHJvbEJsb2NrO1xuXG4gIHJldHVybiBiY3J5cHRvLnRhZ2dlZEhhc2goXG4gICAgJ1RhcExlYWYnLFxuICAgIEJ1ZmZlci5jb25jYXQoW0J1ZmZlci5vZihsZWFmVmVyc2lvbiksIHNlcmlhbGl6ZVNjcmlwdFNpemUodGFwc2NyaXB0KSwgdGFwc2NyaXB0XSlcbiAgKTtcbn1cblxuLyoqXG4gKiBDYWxjdWxhdGVzIHRoZSB0YXB0cmVlIHJvb3QgaGFzaCBmcm9tIGEgY29udHJvbCBibG9jayBhbmQgc2NyaXB0LlxuICogQHBhcmFtIGVjYyBFbGxpcHRpYyBjdXJ2ZSBpbXBsZW1lbnRhdGlvblxuICogQHBhcmFtIGNvbnRyb2xCbG9jayB0aGUgY29udHJvbCBibG9jaywgZWl0aGVyIHJhdyBvciBwYXJzZWRcbiAqIEBwYXJhbSB0YXBzY3JpcHQgdGhlIGxlYWYgc2NyaXB0IGNvcnJlc2Rwb25kaW5nIHRvIHRoZSBjb250cm9sIGJsb2NrXG4gKiBAcGFyYW0gdGFwbGVhZkhhc2ggdGhlIGxlYWYgaGFzaCBpZiBhbHJlYWR5IGNhbGN1bGF0ZWRcbiAqIEByZXR1cm5zIHtCdWZmZXJ9IHRoZSB0YXB0cmVlIHJvb3QgaGFzaFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0VGFwdHJlZVJvb3QoXG4gIGVjYzogVGlueVNlY3AyNTZrMUludGVyZmFjZSxcbiAgY29udHJvbEJsb2NrOiBCdWZmZXIgfCBDb250cm9sQmxvY2ssXG4gIHRhcHNjcmlwdDogQnVmZmVyLFxuICB0YXBsZWFmSGFzaD86IEJ1ZmZlclxuKTogQnVmZmVyIHtcbiAgaWYgKEJ1ZmZlci5pc0J1ZmZlcihjb250cm9sQmxvY2spKSB7XG4gICAgY29udHJvbEJsb2NrID0gcGFyc2VDb250cm9sQmxvY2soZWNjLCBjb250cm9sQmxvY2spO1xuICB9XG4gIGNvbnN0IHsgcGF0aCB9ID0gY29udHJvbEJsb2NrO1xuXG4gIHRhcGxlYWZIYXNoID0gdGFwbGVhZkhhc2ggfHwgZ2V0VGFwbGVhZkhhc2goZWNjLCBjb250cm9sQmxvY2ssIHRhcHNjcmlwdCk7XG5cbiAgLy8gYHRhcHRyZWVNZXJrbGVIYXNoYCBiZWdpbnMgYXMgb3VyIHRhcHNjcmlwdCB0YXBsZWFmIGhhc2ggYW5kIGl0cyB2YWx1ZSBpdGVyYXRlc1xuICAvLyB0aHJvdWdoIGl0cyBwYXJlbnQgdGFwYnJhbmNoIGhhc2hlcyB1bnRpbCBpdCBlbmRzIHVwIGFzIHRoZSB0YXB0cmVlIHJvb3QgaGFzaFxuICBsZXQgdGFwdHJlZU1lcmtsZUhhc2ggPSB0YXBsZWFmSGFzaDtcbiAgZm9yIChjb25zdCB0YXB0cmVlU2libGluZ0hhc2ggb2YgcGF0aCkge1xuICAgIHRhcHRyZWVNZXJrbGVIYXNoID1cbiAgICAgIEJ1ZmZlci5jb21wYXJlKHRhcHRyZWVNZXJrbGVIYXNoLCB0YXB0cmVlU2libGluZ0hhc2gpID09PSAtMVxuICAgICAgICA/IGJjcnlwdG8udGFnZ2VkSGFzaCgnVGFwQnJhbmNoJywgQnVmZmVyLmNvbmNhdChbdGFwdHJlZU1lcmtsZUhhc2gsIHRhcHRyZWVTaWJsaW5nSGFzaF0pKVxuICAgICAgICA6IGJjcnlwdG8udGFnZ2VkSGFzaCgnVGFwQnJhbmNoJywgQnVmZmVyLmNvbmNhdChbdGFwdHJlZVNpYmxpbmdIYXNoLCB0YXB0cmVlTWVya2xlSGFzaF0pKTtcbiAgfVxuXG4gIHJldHVybiB0YXB0cmVlTWVya2xlSGFzaDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFR3ZWFrZWRPdXRwdXRLZXkocGF5bWVudDogYnBheW1lbnRzLlBheW1lbnQpOiBCdWZmZXIge1xuICBhc3NlcnQocGF5bWVudC5vdXRwdXQpO1xuICBpZiAocGF5bWVudC5vdXRwdXQubGVuZ3RoID09PSAzNCkge1xuICAgIHJldHVybiBwYXltZW50Lm91dHB1dD8uc3ViYXJyYXkoMik7XG4gIH1cbiAgdGhyb3cgbmV3IEVycm9yKGBpbnZhbGlkIHAydHIgdHdlYWtlZCBvdXRwdXQga2V5IHNpemUgJHtwYXltZW50Lm91dHB1dC5sZW5ndGh9YCk7XG59XG5cbi8qKlxuICogQHJldHVybnMgb3V0cHV0IHNjcmlwdCBmb3IgZWl0aGVyIHNjcmlwdCBwYXRoIGlucHV0IGNvbnRyb2xCbG9ja1xuICogJiBsZWFmU2NyaXB0IE9SIGtleSBwYXRoIGlucHV0IGludGVybmFsUHViS2V5ICYgdGFwdHJlZVJvb3RcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVRhcHJvb3RPdXRwdXRTY3JpcHQoXG4gIHAydHJBcmdzOiB7IGludGVybmFsUHViS2V5OiBCdWZmZXI7IHRhcHRyZWVSb290OiBCdWZmZXIgfSB8IHsgY29udHJvbEJsb2NrOiBCdWZmZXI7IGxlYWZTY3JpcHQ6IEJ1ZmZlciB9XG4pOiBCdWZmZXIge1xuICBsZXQgaW50ZXJuYWxQdWJLZXk6IEJ1ZmZlciB8IHVuZGVmaW5lZDtcbiAgbGV0IHRhcHRyZWVSb290OiBCdWZmZXIgfCB1bmRlZmluZWQ7XG4gIGlmICgnaW50ZXJuYWxQdWJLZXknIGluIHAydHJBcmdzKSB7XG4gICAgaW50ZXJuYWxQdWJLZXkgPSBwMnRyQXJncy5pbnRlcm5hbFB1YktleTtcbiAgICB0YXB0cmVlUm9vdCA9IHAydHJBcmdzLnRhcHRyZWVSb290O1xuICB9IGVsc2Uge1xuICAgIGludGVybmFsUHViS2V5ID0gcGFyc2VDb250cm9sQmxvY2soZWNjTGliLCBwMnRyQXJncy5jb250cm9sQmxvY2spLmludGVybmFsUHVia2V5O1xuICAgIHRhcHRyZWVSb290ID0gZ2V0VGFwdHJlZVJvb3QoZWNjTGliLCBwMnRyQXJncy5jb250cm9sQmxvY2ssIHAydHJBcmdzLmxlYWZTY3JpcHQpO1xuICB9XG4gIGNvbnN0IG91dHB1dEtleSA9IHRhcFR3ZWFrUHVia2V5KGVjY0xpYiwgaW50ZXJuYWxQdWJLZXksIHRhcHRyZWVSb290KS54T25seVB1YmtleTtcbiAgcmV0dXJuIGJzY3JpcHQuY29tcGlsZShbYnNjcmlwdC5PUFMuT1BfMSwgQnVmZmVyLmZyb20ob3V0cHV0S2V5KV0pO1xufVxuXG4vKipcbiAqIEByZXR1cm5zIHgtb25seSB0YXByb290IG91dHB1dCBrZXkgKHRhcE91dHB1dEtleSlcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFRhcHJvb3RPdXRwdXRLZXkob3V0cHV0U2NyaXB0OiBCdWZmZXIgfCAobnVtYmVyIHwgQnVmZmVyKVtdKTogQnVmZmVyIHtcbiAgY29uc3Qgb3V0cHV0RGVjb21waWxlZCA9IGJzY3JpcHQuZGVjb21waWxlKG91dHB1dFNjcmlwdCk7XG4gIGlmIChvdXRwdXREZWNvbXBpbGVkPy5sZW5ndGggIT09IDIpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2ludmFsaWQgdGFwcm9vdCBvdXRwdXQgc2NyaXB0Jyk7XG4gIH1cbiAgY29uc3QgW29wMSwgb3V0cHV0S2V5XSA9IG91dHB1dERlY29tcGlsZWQ7XG4gIGlmIChvcDEgIT09IGJzY3JpcHQuT1BTLk9QXzEgfHwgIUJ1ZmZlci5pc0J1ZmZlcihvdXRwdXRLZXkpIHx8IG91dHB1dEtleS5sZW5ndGggIT09IDMyKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdpbnZhbGlkIHRhcHJvb3Qgb3V0cHV0IHNjcmlwdCcpO1xuICB9XG4gIHJldHVybiBvdXRwdXRLZXk7XG59XG4iXX0=
@@ -4,7 +4,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
4
4
  exports.check = check;
5
5
  const __1 = require("../../");
6
6
  const __2 = require("../../");
7
- const noble_ecc_1 = require("../../noble_ecc");
7
+ const secp256k1_1 = require("@bitgo-beta/secp256k1");
8
8
  function check(script, allowIncomplete) {
9
9
  const chunks = __1.script.decompile(script);
10
10
  if (chunks.length < 3)
@@ -19,9 +19,9 @@ function check(script, allowIncomplete) {
19
19
  if (allowIncomplete)
20
20
  return true;
21
21
  const keys = chunks.filter((_, index) => index % 2 === 0);
22
- return keys.every(noble_ecc_1.ecc.isXOnlyPoint);
22
+ return keys.every(secp256k1_1.ecc.isXOnlyPoint);
23
23
  }
24
24
  check.toJSON = () => {
25
25
  return 'taproot n-of-n output';
26
26
  };
27
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3V0cHV0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL3RlbXBsYXRlcy90YXByb290bm9mbi9vdXRwdXQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLDhEQUE4RDs7QUFPOUQsc0JBYUM7QUFqQkQsOEJBQTJDO0FBQzNDLDhCQUFpQztBQUNqQywrQ0FBc0M7QUFFdEMsU0FBZ0IsS0FBSyxDQUFDLE1BQXNCLEVBQUUsZUFBeUI7SUFDckUsTUFBTSxNQUFNLEdBQUcsVUFBTyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQVUsQ0FBQztJQUVsRCxJQUFJLE1BQU0sQ0FBQyxNQUFNLEdBQUcsQ0FBQztRQUFFLE9BQU8sS0FBSyxDQUFDO0lBQ3BDLE1BQU0sR0FBRyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO0lBQ3pELElBQUksR0FBRyxDQUFDLEdBQUcsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLEtBQUssV0FBTyxDQUFDLFdBQVc7UUFBRSxPQUFPLEtBQUssQ0FBQztJQUM5RCxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsS0FBSyxXQUFPLENBQUMsaUJBQWlCLENBQUM7UUFBRSxPQUFPLEtBQUssQ0FBQztJQUVwRixJQUFJLE1BQU0sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxHQUFHLEVBQUU7UUFBRSxPQUFPLEtBQUssQ0FBQztJQUN6QyxJQUFJLGVBQWU7UUFBRSxPQUFPLElBQUksQ0FBQztJQUVqQyxNQUFNLElBQUksR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQWEsQ0FBQztJQUN0RSxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsZUFBRyxDQUFDLFlBQVksQ0FBQyxDQUFDO0FBQ3RDLENBQUM7QUFDRCxLQUFLLENBQUMsTUFBTSxHQUFHLEdBQVcsRUFBRTtJQUMxQixPQUFPLHVCQUF1QixDQUFDO0FBQ2pDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIFtwdWJLZXlzWzA6bi0xXSBPUF9DSEVDS1NJR1ZFUklGWV0gcHViS2V5c1tuLTFdIE9QX0NIRUNLU0lHXG5cbmltcG9ydCB7IFN0YWNrIH0gZnJvbSAnLi4vLi4vJztcbmltcG9ydCB7IHNjcmlwdCBhcyBic2NyaXB0IH0gZnJvbSAnLi4vLi4vJztcbmltcG9ydCB7IG9wY29kZXMgfSBmcm9tICcuLi8uLi8nO1xuaW1wb3J0IHsgZWNjIH0gZnJvbSAnLi4vLi4vbm9ibGVfZWNjJztcblxuZXhwb3J0IGZ1bmN0aW9uIGNoZWNrKHNjcmlwdDogQnVmZmVyIHwgU3RhY2ssIGFsbG93SW5jb21wbGV0ZT86IGJvb2xlYW4pOiBib29sZWFuIHtcbiAgY29uc3QgY2h1bmtzID0gYnNjcmlwdC5kZWNvbXBpbGUoc2NyaXB0KSBhcyBTdGFjaztcblxuICBpZiAoY2h1bmtzLmxlbmd0aCA8IDMpIHJldHVybiBmYWxzZTtcbiAgY29uc3Qgb3BzID0gY2h1bmtzLmZpbHRlcigoXywgaW5kZXgpID0+IGluZGV4ICUgMiA9PT0gMSk7XG4gIGlmIChvcHNbb3BzLmxlbmd0aCAtIDFdICE9PSBvcGNvZGVzLk9QX0NIRUNLU0lHKSByZXR1cm4gZmFsc2U7XG4gIGlmICghb3BzLnNsaWNlKDAsIC0xKS5ldmVyeSgob3ApID0+IG9wID09PSBvcGNvZGVzLk9QX0NIRUNLU0lHVkVSSUZZKSkgcmV0dXJuIGZhbHNlO1xuXG4gIGlmIChjaHVua3MubGVuZ3RoIC8gMiA+IDE2KSByZXR1cm4gZmFsc2U7XG4gIGlmIChhbGxvd0luY29tcGxldGUpIHJldHVybiB0cnVlO1xuXG4gIGNvbnN0IGtleXMgPSBjaHVua3MuZmlsdGVyKChfLCBpbmRleCkgPT4gaW5kZXggJSAyID09PSAwKSBhcyBCdWZmZXJbXTtcbiAgcmV0dXJuIGtleXMuZXZlcnkoZWNjLmlzWE9ubHlQb2ludCk7XG59XG5jaGVjay50b0pTT04gPSAoKTogc3RyaW5nID0+IHtcbiAgcmV0dXJuICd0YXByb290IG4tb2YtbiBvdXRwdXQnO1xufTtcbiJdfQ==
27
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3V0cHV0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL3RlbXBsYXRlcy90YXByb290bm9mbi9vdXRwdXQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLDhEQUE4RDs7QUFPOUQsc0JBYUM7QUFqQkQsOEJBQTJDO0FBQzNDLDhCQUFpQztBQUNqQyxxREFBNEM7QUFFNUMsU0FBZ0IsS0FBSyxDQUFDLE1BQXNCLEVBQUUsZUFBeUI7SUFDckUsTUFBTSxNQUFNLEdBQUcsVUFBTyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQVUsQ0FBQztJQUVsRCxJQUFJLE1BQU0sQ0FBQyxNQUFNLEdBQUcsQ0FBQztRQUFFLE9BQU8sS0FBSyxDQUFDO0lBQ3BDLE1BQU0sR0FBRyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO0lBQ3pELElBQUksR0FBRyxDQUFDLEdBQUcsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLEtBQUssV0FBTyxDQUFDLFdBQVc7UUFBRSxPQUFPLEtBQUssQ0FBQztJQUM5RCxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsS0FBSyxXQUFPLENBQUMsaUJBQWlCLENBQUM7UUFBRSxPQUFPLEtBQUssQ0FBQztJQUVwRixJQUFJLE1BQU0sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxHQUFHLEVBQUU7UUFBRSxPQUFPLEtBQUssQ0FBQztJQUN6QyxJQUFJLGVBQWU7UUFBRSxPQUFPLElBQUksQ0FBQztJQUVqQyxNQUFNLElBQUksR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQWEsQ0FBQztJQUN0RSxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsZUFBRyxDQUFDLFlBQVksQ0FBQyxDQUFDO0FBQ3RDLENBQUM7QUFDRCxLQUFLLENBQUMsTUFBTSxHQUFHLEdBQVcsRUFBRTtJQUMxQixPQUFPLHVCQUF1QixDQUFDO0FBQ2pDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIFtwdWJLZXlzWzA6bi0xXSBPUF9DSEVDS1NJR1ZFUklGWV0gcHViS2V5c1tuLTFdIE9QX0NIRUNLU0lHXG5cbmltcG9ydCB7IFN0YWNrIH0gZnJvbSAnLi4vLi4vJztcbmltcG9ydCB7IHNjcmlwdCBhcyBic2NyaXB0IH0gZnJvbSAnLi4vLi4vJztcbmltcG9ydCB7IG9wY29kZXMgfSBmcm9tICcuLi8uLi8nO1xuaW1wb3J0IHsgZWNjIH0gZnJvbSAnQGJpdGdvLWJldGEvc2VjcDI1NmsxJztcblxuZXhwb3J0IGZ1bmN0aW9uIGNoZWNrKHNjcmlwdDogQnVmZmVyIHwgU3RhY2ssIGFsbG93SW5jb21wbGV0ZT86IGJvb2xlYW4pOiBib29sZWFuIHtcbiAgY29uc3QgY2h1bmtzID0gYnNjcmlwdC5kZWNvbXBpbGUoc2NyaXB0KSBhcyBTdGFjaztcblxuICBpZiAoY2h1bmtzLmxlbmd0aCA8IDMpIHJldHVybiBmYWxzZTtcbiAgY29uc3Qgb3BzID0gY2h1bmtzLmZpbHRlcigoXywgaW5kZXgpID0+IGluZGV4ICUgMiA9PT0gMSk7XG4gIGlmIChvcHNbb3BzLmxlbmd0aCAtIDFdICE9PSBvcGNvZGVzLk9QX0NIRUNLU0lHKSByZXR1cm4gZmFsc2U7XG4gIGlmICghb3BzLnNsaWNlKDAsIC0xKS5ldmVyeSgob3ApID0+IG9wID09PSBvcGNvZGVzLk9QX0NIRUNLU0lHVkVSSUZZKSkgcmV0dXJuIGZhbHNlO1xuXG4gIGlmIChjaHVua3MubGVuZ3RoIC8gMiA+IDE2KSByZXR1cm4gZmFsc2U7XG4gIGlmIChhbGxvd0luY29tcGxldGUpIHJldHVybiB0cnVlO1xuXG4gIGNvbnN0IGtleXMgPSBjaHVua3MuZmlsdGVyKChfLCBpbmRleCkgPT4gaW5kZXggJSAyID09PSAwKSBhcyBCdWZmZXJbXTtcbiAgcmV0dXJuIGtleXMuZXZlcnkoZWNjLmlzWE9ubHlQb2ludCk7XG59XG5jaGVjay50b0pTT04gPSAoKTogc3RyaW5nID0+IHtcbiAgcmV0dXJuICd0YXByb290IG4tb2YtbiBvdXRwdXQnO1xufTtcbiJdfQ==
@@ -1,7 +1,6 @@
1
- import { BIP32Interface } from 'bip32';
2
1
  import { Triple } from '../bitgo/types';
3
2
  import { RootWalletKeys } from '../bitgo/wallet/WalletKeys';
4
- import { ECPairInterface } from '../noble_ecc';
3
+ import { BIP32Interface, ECPairInterface } from '@bitgo-beta/secp256k1';
5
4
  export type KeyTriple = Triple<BIP32Interface>;
6
5
  export type UncompressedKeyTriple = Triple<ECPairInterface>;
7
6
  export declare function getKey(seed: string): BIP32Interface;
@@ -1 +1 @@
1
- {"version":3,"file":"keys.d.ts","sourceRoot":"","sources":["../../../src/testutil/keys.ts"],"names":[],"mappings":"AAAA,OAAO,EAA0B,cAAc,EAAE,MAAM,OAAO,CAAC;AAG/D,OAAO,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;AACxC,OAAO,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAC5D,OAAO,EAAe,eAAe,EAAE,MAAM,cAAc,CAAC;AAK5D,MAAM,MAAM,SAAS,GAAG,MAAM,CAAC,cAAc,CAAC,CAAC;AAC/C,MAAM,MAAM,qBAAqB,GAAG,MAAM,CAAC,eAAe,CAAC,CAAC;AAE5D,wBAAgB,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,cAAc,CAEnD;AAED,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,CAEpD;AAaD,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,GAAG,qBAAqB,CAEtF;AAED,wBAAgB,UAAU,CAAC,MAAM,EAAE,MAAM,CAAC,cAAc,CAAC,EAAE,CAAC,EAAE,cAAc,GAAG,MAAM,GAAG,SAAS,CAEhG;AAED,wBAAgB,kBAAkB,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,GAAG,CAAC,CAarE;AAED,wBAAgB,oBAAoB,IAAI,cAAc,CAErD"}
1
+ {"version":3,"file":"keys.d.ts","sourceRoot":"","sources":["../../../src/testutil/keys.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;AACxC,OAAO,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAC5D,OAAO,EAA0B,cAAc,EAAe,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAK7G,MAAM,MAAM,SAAS,GAAG,MAAM,CAAC,cAAc,CAAC,CAAC;AAC/C,MAAM,MAAM,qBAAqB,GAAG,MAAM,CAAC,eAAe,CAAC,CAAC;AAE5D,wBAAgB,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,cAAc,CAEnD;AAED,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,CAEpD;AAaD,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,GAAG,qBAAqB,CAEtF;AAED,wBAAgB,UAAU,CAAC,MAAM,EAAE,MAAM,CAAC,cAAc,CAAC,EAAE,CAAC,EAAE,cAAc,GAAG,MAAM,GAAG,SAAS,CAEhG;AAED,wBAAgB,kBAAkB,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,GAAG,CAAC,CAarE;AAED,wBAAgB,oBAAoB,IAAI,cAAc,CAErD"}
@@ -6,12 +6,11 @@ exports.getUncompressedKeyTriple = getUncompressedKeyTriple;
6
6
  exports.getKeyName = getKeyName;
7
7
  exports.getDefaultCosigner = getDefaultCosigner;
8
8
  exports.getDefaultWalletKeys = getDefaultWalletKeys;
9
- const bip32_1 = require("bip32");
10
9
  const crypto = require("crypto");
11
10
  const WalletKeys_1 = require("../bitgo/wallet/WalletKeys");
12
- const noble_ecc_1 = require("../noble_ecc");
11
+ const secp256k1_1 = require("@bitgo-beta/secp256k1");
13
12
  const networks_1 = require("../networks");
14
- const bip32 = (0, bip32_1.BIP32Factory)(noble_ecc_1.ecc);
13
+ const bip32 = (0, secp256k1_1.BIP32Factory)(secp256k1_1.ecc);
15
14
  function getKey(seed) {
16
15
  return bip32.fromSeed(crypto.createHash('sha256').update(seed).digest());
17
16
  }
@@ -20,7 +19,7 @@ function getKeyTriple(seed) {
20
19
  }
21
20
  function getUncompressedKey(input) {
22
21
  // Using input for deterministic randomness
23
- return noble_ecc_1.ECPair.makeRandom({
22
+ return secp256k1_1.ECPair.makeRandom({
24
23
  compressed: false,
25
24
  network: networks_1.networks.testnet,
26
25
  rng: () => {
@@ -51,4 +50,4 @@ function getDefaultCosigner(keyset, signer) {
51
50
  function getDefaultWalletKeys() {
52
51
  return new WalletKeys_1.RootWalletKeys(getKeyTriple('default'));
53
52
  }
54
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoia2V5cy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy90ZXN0dXRpbC9rZXlzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBYUEsd0JBRUM7QUFFRCxvQ0FFQztBQWFELDREQUVDO0FBRUQsZ0NBRUM7QUFFRCxnREFhQztBQUVELG9EQUVDO0FBekRELGlDQUErRDtBQUMvRCxpQ0FBaUM7QUFHakMsMkRBQTREO0FBQzVELDRDQUE0RDtBQUM1RCwwQ0FBdUM7QUFFdkMsTUFBTSxLQUFLLEdBQWEsSUFBQSxvQkFBWSxFQUFDLGVBQUcsQ0FBQyxDQUFDO0FBSzFDLFNBQWdCLE1BQU0sQ0FBQyxJQUFZO0lBQ2pDLE9BQU8sS0FBSyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDO0FBQzNFLENBQUM7QUFFRCxTQUFnQixZQUFZLENBQUMsSUFBWTtJQUN2QyxPQUFPLENBQUMsTUFBTSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsRUFBRSxNQUFNLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxFQUFFLE1BQU0sQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUN6RSxDQUFDO0FBRUQsU0FBUyxrQkFBa0IsQ0FBQyxLQUFLO0lBQy9CLDJDQUEyQztJQUMzQyxPQUFPLGtCQUFNLENBQUMsVUFBVSxDQUFDO1FBQ3ZCLFVBQVUsRUFBRSxLQUFLO1FBQ2pCLE9BQU8sRUFBRSxtQkFBUSxDQUFDLE9BQU87UUFDekIsR0FBRyxFQUFFLEdBQVcsRUFBRTtZQUNoQixPQUFPLE1BQU0sQ0FBQyxLQUFLLENBQUMsRUFBRSxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQ2pDLENBQUM7S0FDRixDQUFDLENBQUM7QUFDTCxDQUFDO0FBRUQsU0FBZ0Isd0JBQXdCLENBQUMsTUFBc0I7SUFDN0QsT0FBTyxDQUFDLGtCQUFrQixDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLGtCQUFrQixDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLGtCQUFrQixDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdkcsQ0FBQztBQUVELFNBQWdCLFVBQVUsQ0FBQyxNQUE4QixFQUFFLENBQWlCO0lBQzFFLE9BQU8sQ0FBQyxNQUFNLEVBQUUsUUFBUSxFQUFFLE9BQU8sQ0FBQyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN4RCxDQUFDO0FBRUQsU0FBZ0Isa0JBQWtCLENBQUksTUFBaUIsRUFBRSxNQUFTO0lBQ2hFLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBSSxFQUFFLENBQUksRUFBRSxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLElBQUksTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDaEcsTUFBTSxDQUFDLElBQUksRUFBRSxNQUFNLEVBQUUsS0FBSyxDQUFDLEdBQUcsTUFBTSxDQUFDO0lBQ3JDLElBQUksRUFBRSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDO1FBQ3JCLE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztJQUNELElBQUksRUFBRSxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsRUFBRSxDQUFDO1FBQ3ZCLE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztJQUNELElBQUksRUFBRSxDQUFDLE1BQU0sRUFBRSxLQUFLLENBQUMsRUFBRSxDQUFDO1FBQ3RCLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUNELE1BQU0sSUFBSSxLQUFLLENBQUMsdUJBQXVCLENBQUMsQ0FBQztBQUMzQyxDQUFDO0FBRUQsU0FBZ0Isb0JBQW9CO0lBQ2xDLE9BQU8sSUFBSSwyQkFBYyxDQUFDLFlBQVksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDO0FBQ3JELENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBCSVAzMkFQSSwgQklQMzJGYWN0b3J5LCBCSVAzMkludGVyZmFjZSB9IGZyb20gJ2JpcDMyJztcbmltcG9ydCAqIGFzIGNyeXB0byBmcm9tICdjcnlwdG8nO1xuXG5pbXBvcnQgeyBUcmlwbGUgfSBmcm9tICcuLi9iaXRnby90eXBlcyc7XG5pbXBvcnQgeyBSb290V2FsbGV0S2V5cyB9IGZyb20gJy4uL2JpdGdvL3dhbGxldC9XYWxsZXRLZXlzJztcbmltcG9ydCB7IGVjYywgRUNQYWlyLCBFQ1BhaXJJbnRlcmZhY2UgfSBmcm9tICcuLi9ub2JsZV9lY2MnO1xuaW1wb3J0IHsgbmV0d29ya3MgfSBmcm9tICcuLi9uZXR3b3Jrcyc7XG5cbmNvbnN0IGJpcDMyOiBCSVAzMkFQSSA9IEJJUDMyRmFjdG9yeShlY2MpO1xuXG5leHBvcnQgdHlwZSBLZXlUcmlwbGUgPSBUcmlwbGU8QklQMzJJbnRlcmZhY2U+O1xuZXhwb3J0IHR5cGUgVW5jb21wcmVzc2VkS2V5VHJpcGxlID0gVHJpcGxlPEVDUGFpckludGVyZmFjZT47XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRLZXkoc2VlZDogc3RyaW5nKTogQklQMzJJbnRlcmZhY2Uge1xuICByZXR1cm4gYmlwMzIuZnJvbVNlZWQoY3J5cHRvLmNyZWF0ZUhhc2goJ3NoYTI1NicpLnVwZGF0ZShzZWVkKS5kaWdlc3QoKSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRLZXlUcmlwbGUoc2VlZDogc3RyaW5nKTogS2V5VHJpcGxlIHtcbiAgcmV0dXJuIFtnZXRLZXkoc2VlZCArICcuMCcpLCBnZXRLZXkoc2VlZCArICcuMScpLCBnZXRLZXkoc2VlZCArICcuMicpXTtcbn1cblxuZnVuY3Rpb24gZ2V0VW5jb21wcmVzc2VkS2V5KGlucHV0KSB7XG4gIC8vIFVzaW5nIGlucHV0IGZvciBkZXRlcm1pbmlzdGljIHJhbmRvbW5lc3NcbiAgcmV0dXJuIEVDUGFpci5tYWtlUmFuZG9tKHtcbiAgICBjb21wcmVzc2VkOiBmYWxzZSxcbiAgICBuZXR3b3JrOiBuZXR3b3Jrcy50ZXN0bmV0LFxuICAgIHJuZzogKCk6IEJ1ZmZlciA9PiB7XG4gICAgICByZXR1cm4gQnVmZmVyLmFsbG9jKDMyLCBpbnB1dCk7XG4gICAgfSxcbiAgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRVbmNvbXByZXNzZWRLZXlUcmlwbGUoaW5wdXRzOiBUcmlwbGU8bnVtYmVyPik6IFVuY29tcHJlc3NlZEtleVRyaXBsZSB7XG4gIHJldHVybiBbZ2V0VW5jb21wcmVzc2VkS2V5KGlucHV0c1swXSksIGdldFVuY29tcHJlc3NlZEtleShpbnB1dHNbMV0pLCBnZXRVbmNvbXByZXNzZWRLZXkoaW5wdXRzWzJdKV07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRLZXlOYW1lKHRyaXBsZTogVHJpcGxlPEJJUDMySW50ZXJmYWNlPiwgazogQklQMzJJbnRlcmZhY2UpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICByZXR1cm4gWyd1c2VyJywgJ2JhY2t1cCcsICdiaXRnbyddW3RyaXBsZS5pbmRleE9mKGspXTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldERlZmF1bHRDb3NpZ25lcjxUPihrZXlzZXQ6IFRyaXBsZTxUPiwgc2lnbmVyOiBUKTogVCB7XG4gIGNvbnN0IGVxID0gKGE6IFQsIGI6IFQpID0+IGEgPT09IGIgfHwgKEJ1ZmZlci5pc0J1ZmZlcihhKSAmJiBCdWZmZXIuaXNCdWZmZXIoYikgJiYgYS5lcXVhbHMoYikpO1xuICBjb25zdCBbdXNlciwgYmFja3VwLCBiaXRnb10gPSBrZXlzZXQ7XG4gIGlmIChlcShzaWduZXIsIHVzZXIpKSB7XG4gICAgcmV0dXJuIGJpdGdvO1xuICB9XG4gIGlmIChlcShzaWduZXIsIGJhY2t1cCkpIHtcbiAgICByZXR1cm4gYml0Z287XG4gIH1cbiAgaWYgKGVxKHNpZ25lciwgYml0Z28pKSB7XG4gICAgcmV0dXJuIHVzZXI7XG4gIH1cbiAgdGhyb3cgbmV3IEVycm9yKGBzaWduZXIgbm90IGluIHB1YmtleXNgKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldERlZmF1bHRXYWxsZXRLZXlzKCk6IFJvb3RXYWxsZXRLZXlzIHtcbiAgcmV0dXJuIG5ldyBSb290V2FsbGV0S2V5cyhnZXRLZXlUcmlwbGUoJ2RlZmF1bHQnKSk7XG59XG4iXX0=
53
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoia2V5cy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy90ZXN0dXRpbC9rZXlzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBWUEsd0JBRUM7QUFFRCxvQ0FFQztBQWFELDREQUVDO0FBRUQsZ0NBRUM7QUFFRCxnREFhQztBQUVELG9EQUVDO0FBeERELGlDQUFpQztBQUdqQywyREFBNEQ7QUFDNUQscURBQTZHO0FBQzdHLDBDQUF1QztBQUV2QyxNQUFNLEtBQUssR0FBYSxJQUFBLHdCQUFZLEVBQUMsZUFBRyxDQUFDLENBQUM7QUFLMUMsU0FBZ0IsTUFBTSxDQUFDLElBQVk7SUFDakMsT0FBTyxLQUFLLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUM7QUFDM0UsQ0FBQztBQUVELFNBQWdCLFlBQVksQ0FBQyxJQUFZO0lBQ3ZDLE9BQU8sQ0FBQyxNQUFNLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxFQUFFLE1BQU0sQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLEVBQUUsTUFBTSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ3pFLENBQUM7QUFFRCxTQUFTLGtCQUFrQixDQUFDLEtBQUs7SUFDL0IsMkNBQTJDO0lBQzNDLE9BQU8sa0JBQU0sQ0FBQyxVQUFVLENBQUM7UUFDdkIsVUFBVSxFQUFFLEtBQUs7UUFDakIsT0FBTyxFQUFFLG1CQUFRLENBQUMsT0FBTztRQUN6QixHQUFHLEVBQUUsR0FBVyxFQUFFO1lBQ2hCLE9BQU8sTUFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDakMsQ0FBQztLQUNGLENBQUMsQ0FBQztBQUNMLENBQUM7QUFFRCxTQUFnQix3QkFBd0IsQ0FBQyxNQUFzQjtJQUM3RCxPQUFPLENBQUMsa0JBQWtCLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsa0JBQWtCLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsa0JBQWtCLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN2RyxDQUFDO0FBRUQsU0FBZ0IsVUFBVSxDQUFDLE1BQThCLEVBQUUsQ0FBaUI7SUFDMUUsT0FBTyxDQUFDLE1BQU0sRUFBRSxRQUFRLEVBQUUsT0FBTyxDQUFDLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3hELENBQUM7QUFFRCxTQUFnQixrQkFBa0IsQ0FBSSxNQUFpQixFQUFFLE1BQVM7SUFDaEUsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFJLEVBQUUsQ0FBSSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSSxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNoRyxNQUFNLENBQUMsSUFBSSxFQUFFLE1BQU0sRUFBRSxLQUFLLENBQUMsR0FBRyxNQUFNLENBQUM7SUFDckMsSUFBSSxFQUFFLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUM7UUFDckIsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0lBQ0QsSUFBSSxFQUFFLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxFQUFFLENBQUM7UUFDdkIsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0lBQ0QsSUFBSSxFQUFFLENBQUMsTUFBTSxFQUFFLEtBQUssQ0FBQyxFQUFFLENBQUM7UUFDdEIsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBQ0QsTUFBTSxJQUFJLEtBQUssQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDO0FBQzNDLENBQUM7QUFFRCxTQUFnQixvQkFBb0I7SUFDbEMsT0FBTyxJQUFJLDJCQUFjLENBQUMsWUFBWSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUM7QUFDckQsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIGNyeXB0byBmcm9tICdjcnlwdG8nO1xuXG5pbXBvcnQgeyBUcmlwbGUgfSBmcm9tICcuLi9iaXRnby90eXBlcyc7XG5pbXBvcnQgeyBSb290V2FsbGV0S2V5cyB9IGZyb20gJy4uL2JpdGdvL3dhbGxldC9XYWxsZXRLZXlzJztcbmltcG9ydCB7IEJJUDMyQVBJLCBCSVAzMkZhY3RvcnksIEJJUDMySW50ZXJmYWNlLCBlY2MsIEVDUGFpciwgRUNQYWlySW50ZXJmYWNlIH0gZnJvbSAnQGJpdGdvLWJldGEvc2VjcDI1NmsxJztcbmltcG9ydCB7IG5ldHdvcmtzIH0gZnJvbSAnLi4vbmV0d29ya3MnO1xuXG5jb25zdCBiaXAzMjogQklQMzJBUEkgPSBCSVAzMkZhY3RvcnkoZWNjKTtcblxuZXhwb3J0IHR5cGUgS2V5VHJpcGxlID0gVHJpcGxlPEJJUDMySW50ZXJmYWNlPjtcbmV4cG9ydCB0eXBlIFVuY29tcHJlc3NlZEtleVRyaXBsZSA9IFRyaXBsZTxFQ1BhaXJJbnRlcmZhY2U+O1xuXG5leHBvcnQgZnVuY3Rpb24gZ2V0S2V5KHNlZWQ6IHN0cmluZyk6IEJJUDMySW50ZXJmYWNlIHtcbiAgcmV0dXJuIGJpcDMyLmZyb21TZWVkKGNyeXB0by5jcmVhdGVIYXNoKCdzaGEyNTYnKS51cGRhdGUoc2VlZCkuZGlnZXN0KCkpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0S2V5VHJpcGxlKHNlZWQ6IHN0cmluZyk6IEtleVRyaXBsZSB7XG4gIHJldHVybiBbZ2V0S2V5KHNlZWQgKyAnLjAnKSwgZ2V0S2V5KHNlZWQgKyAnLjEnKSwgZ2V0S2V5KHNlZWQgKyAnLjInKV07XG59XG5cbmZ1bmN0aW9uIGdldFVuY29tcHJlc3NlZEtleShpbnB1dCkge1xuICAvLyBVc2luZyBpbnB1dCBmb3IgZGV0ZXJtaW5pc3RpYyByYW5kb21uZXNzXG4gIHJldHVybiBFQ1BhaXIubWFrZVJhbmRvbSh7XG4gICAgY29tcHJlc3NlZDogZmFsc2UsXG4gICAgbmV0d29yazogbmV0d29ya3MudGVzdG5ldCxcbiAgICBybmc6ICgpOiBCdWZmZXIgPT4ge1xuICAgICAgcmV0dXJuIEJ1ZmZlci5hbGxvYygzMiwgaW5wdXQpO1xuICAgIH0sXG4gIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0VW5jb21wcmVzc2VkS2V5VHJpcGxlKGlucHV0czogVHJpcGxlPG51bWJlcj4pOiBVbmNvbXByZXNzZWRLZXlUcmlwbGUge1xuICByZXR1cm4gW2dldFVuY29tcHJlc3NlZEtleShpbnB1dHNbMF0pLCBnZXRVbmNvbXByZXNzZWRLZXkoaW5wdXRzWzFdKSwgZ2V0VW5jb21wcmVzc2VkS2V5KGlucHV0c1syXSldO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0S2V5TmFtZSh0cmlwbGU6IFRyaXBsZTxCSVAzMkludGVyZmFjZT4sIGs6IEJJUDMySW50ZXJmYWNlKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgcmV0dXJuIFsndXNlcicsICdiYWNrdXAnLCAnYml0Z28nXVt0cmlwbGUuaW5kZXhPZihrKV07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXREZWZhdWx0Q29zaWduZXI8VD4oa2V5c2V0OiBUcmlwbGU8VD4sIHNpZ25lcjogVCk6IFQge1xuICBjb25zdCBlcSA9IChhOiBULCBiOiBUKSA9PiBhID09PSBiIHx8IChCdWZmZXIuaXNCdWZmZXIoYSkgJiYgQnVmZmVyLmlzQnVmZmVyKGIpICYmIGEuZXF1YWxzKGIpKTtcbiAgY29uc3QgW3VzZXIsIGJhY2t1cCwgYml0Z29dID0ga2V5c2V0O1xuICBpZiAoZXEoc2lnbmVyLCB1c2VyKSkge1xuICAgIHJldHVybiBiaXRnbztcbiAgfVxuICBpZiAoZXEoc2lnbmVyLCBiYWNrdXApKSB7XG4gICAgcmV0dXJuIGJpdGdvO1xuICB9XG4gIGlmIChlcShzaWduZXIsIGJpdGdvKSkge1xuICAgIHJldHVybiB1c2VyO1xuICB9XG4gIHRocm93IG5ldyBFcnJvcihgc2lnbmVyIG5vdCBpbiBwdWJrZXlzYCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXREZWZhdWx0V2FsbGV0S2V5cygpOiBSb290V2FsbGV0S2V5cyB7XG4gIHJldHVybiBuZXcgUm9vdFdhbGxldEtleXMoZ2V0S2V5VHJpcGxlKCdkZWZhdWx0JykpO1xufVxuIl19
@@ -1,4 +1,4 @@
1
- import { BIP32Interface } from 'bip32';
1
+ import { BIP32Interface } from '@bitgo-beta/secp256k1';
2
2
  import { Network } from '../networks';
3
3
  import { ChainCode, NonWitnessWalletUnspent, outputScripts, RootWalletKeys, Unspent, UnspentWithPrevTx, UtxoTransaction, WalletUnspent } from '../bitgo';
4
4
  export type InputType = outputScripts.ScriptType2Of3;
@@ -1 +1 @@
1
- {"version":3,"file":"mock.d.ts","sourceRoot":"","sources":["../../../src/testutil/mock.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,MAAM,OAAO,CAAC;AAGvC,OAAO,EAAc,OAAO,EAAY,MAAM,aAAa,CAAC;AAE5D,OAAO,EACL,SAAS,EAMT,uBAAuB,EACvB,aAAa,EACb,cAAc,EAEd,OAAO,EACP,iBAAiB,EACjB,eAAe,EACf,aAAa,EACd,MAAM,UAAU,CAAC;AAMlB,MAAM,MAAM,SAAS,GAAG,aAAa,CAAC,cAAc,CAAC;AAErD,wBAAgB,UAAU,CACxB,IAAI,EAAE,MAAM,EACZ,YAAY,EAAE,MAAM,EACpB,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,OAAO,GACf,eAAe,CAAC,MAAM,CAAC,CAiCzB;AAED,eAAO,MAAM,uBAAuB,gBAA8B,CAAC;AAGnE,wBAAgB,yBAAyB,CAAC,OAAO,SAAS,MAAM,GAAG,MAAM,EACvE,CAAC,EAAE,OAAO,CAAC,OAAO,CAAC,EACnB,OAAO,EAAE,OAAO,GACf,OAAO,CAET;AAED,wBAAgB,2BAA2B,CAAC,OAAO,SAAS,MAAM,GAAG,MAAM,EACzE,OAAO,EAAE,OAAO,EAChB,KAAK,EAAE,OAAO,EACd,EAAE,GAA6B,EAAE,IAAQ,EAAE,GAAE;IAAE,GAAG,CAAC,EAAE,cAAc,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAO,GACxF,iBAAiB,CAAC,OAAO,CAAC,CAI5B;AAED,wBAAgB,iBAAiB,CAAC,OAAO,SAAS,MAAM,GAAG,MAAM,EAC/D,OAAO,EAAE,OAAO,EAChB,KAAK,EAAE,OAAO,EACd,EACE,KAAS,EACT,KAAS,EACT,IAA6B,EAC7B,IAAQ,EACR,EAAE,GACH,GAAE;IAAE,KAAK,CAAC,EAAE,SAAS,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,cAAc,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,EAAE,CAAC,EAAE,MAAM,CAAA;CAAO,GAC/F,aAAa,CAAC,OAAO,CAAC,GAAG,uBAAuB,CAAC,OAAO,CAAC,CA0B3D;AAED,wBAAgB,YAAY,CAAC,OAAO,SAAS,MAAM,GAAG,MAAM,EAC1D,cAAc,EAAE,cAAc,EAC9B,gBAAgB,EAAE,CAAC,SAAS,GAAG,aAAa,CAAC,kBAAkB,CAAC,EAAE,EAClE,gBAAgB,EAAE,OAAO,EACzB,OAAO,EAAE,OAAO,GACf,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,aAAa,CAAC,OAAO,CAAC,CAAC,EAAE,CAgB/C"}
1
+ {"version":3,"file":"mock.d.ts","sourceRoot":"","sources":["../../../src/testutil/mock.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAEvD,OAAO,EAAc,OAAO,EAAY,MAAM,aAAa,CAAC;AAE5D,OAAO,EACL,SAAS,EAMT,uBAAuB,EACvB,aAAa,EACb,cAAc,EAEd,OAAO,EACP,iBAAiB,EACjB,eAAe,EACf,aAAa,EACd,MAAM,UAAU,CAAC;AAMlB,MAAM,MAAM,SAAS,GAAG,aAAa,CAAC,cAAc,CAAC;AAErD,wBAAgB,UAAU,CACxB,IAAI,EAAE,MAAM,EACZ,YAAY,EAAE,MAAM,EACpB,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,OAAO,GACf,eAAe,CAAC,MAAM,CAAC,CA6BzB;AAED,eAAO,MAAM,uBAAuB,gBAA8B,CAAC;AAGnE,wBAAgB,yBAAyB,CAAC,OAAO,SAAS,MAAM,GAAG,MAAM,EACvE,CAAC,EAAE,OAAO,CAAC,OAAO,CAAC,EACnB,OAAO,EAAE,OAAO,GACf,OAAO,CAET;AAED,wBAAgB,2BAA2B,CAAC,OAAO,SAAS,MAAM,GAAG,MAAM,EACzE,OAAO,EAAE,OAAO,EAChB,KAAK,EAAE,OAAO,EACd,EAAE,GAA6B,EAAE,IAAQ,EAAE,GAAE;IAAE,GAAG,CAAC,EAAE,cAAc,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAO,GACxF,iBAAiB,CAAC,OAAO,CAAC,CAI5B;AAED,wBAAgB,iBAAiB,CAAC,OAAO,SAAS,MAAM,GAAG,MAAM,EAC/D,OAAO,EAAE,OAAO,EAChB,KAAK,EAAE,OAAO,EACd,EACE,KAAS,EACT,KAAS,EACT,IAA6B,EAC7B,IAAQ,EACR,EAAE,GACH,GAAE;IAAE,KAAK,CAAC,EAAE,SAAS,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,cAAc,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,EAAE,CAAC,EAAE,MAAM,CAAA;CAAO,GAC/F,aAAa,CAAC,OAAO,CAAC,GAAG,uBAAuB,CAAC,OAAO,CAAC,CA0B3D;AAED,wBAAgB,YAAY,CAAC,OAAO,SAAS,MAAM,GAAG,MAAM,EAC1D,cAAc,EAAE,cAAc,EAC9B,gBAAgB,EAAE,CAAC,SAAS,GAAG,aAAa,CAAC,kBAAkB,CAAC,EAAE,EAClE,gBAAgB,EAAE,OAAO,EACzB,OAAO,EAAE,OAAO,GACf,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,aAAa,CAAC,OAAO,CAAC,CAAC,EAAE,CAgB/C"}