@bitgo/sdk-core 38.18.0 → 38.19.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (52) hide show
  1. package/dist/src/account-lib/baseCoin/enum.d.ts +2 -1
  2. package/dist/src/account-lib/baseCoin/enum.d.ts.map +1 -1
  3. package/dist/src/account-lib/baseCoin/enum.js +4 -1
  4. package/dist/src/bitgo/coinFactory.d.ts +7 -0
  5. package/dist/src/bitgo/coinFactory.d.ts.map +1 -1
  6. package/dist/src/bitgo/coinFactory.js +10 -1
  7. package/dist/src/bitgo/keychain/keychains.d.ts +4 -0
  8. package/dist/src/bitgo/keychain/keychains.d.ts.map +1 -1
  9. package/dist/src/bitgo/keychain/keychains.js +9 -5
  10. package/dist/src/bitgo/safe/iSafe.d.ts +2 -2
  11. package/dist/src/bitgo/safe/iSafe.js +1 -1
  12. package/dist/src/bitgo/safe/safe.d.ts.map +1 -1
  13. package/dist/src/bitgo/safe/safe.js +5 -10
  14. package/dist/src/bitgo/utils/tss/baseTypes.d.ts +1 -0
  15. package/dist/src/bitgo/utils/tss/baseTypes.d.ts.map +1 -1
  16. package/dist/src/bitgo/utils/tss/baseTypes.js +1 -1
  17. package/dist/src/bitgo/utils/tss/ecdsa/ecdsaMPCv2.d.ts +6 -2
  18. package/dist/src/bitgo/utils/tss/ecdsa/ecdsaMPCv2.d.ts.map +1 -1
  19. package/dist/src/bitgo/utils/tss/ecdsa/ecdsaMPCv2.js +18 -14
  20. package/dist/src/bitgo/utils/tss/ecdsa/ecdsaVrfMPCv2.d.ts +0 -19
  21. package/dist/src/bitgo/utils/tss/ecdsa/ecdsaVrfMPCv2.d.ts.map +1 -1
  22. package/dist/src/bitgo/utils/tss/ecdsa/ecdsaVrfMPCv2.js +4 -64
  23. package/dist/src/bitgo/utils/tss/eddsa/SMC/utils.d.ts +2 -2
  24. package/dist/src/bitgo/utils/tss/eddsa/SMC/utils.d.ts.map +1 -1
  25. package/dist/src/bitgo/utils/tss/eddsa/SMC/utils.js +5 -4
  26. package/dist/src/bitgo/utils/tss/eddsa/eddsaMPCv2.d.ts +16 -2
  27. package/dist/src/bitgo/utils/tss/eddsa/eddsaMPCv2.d.ts.map +1 -1
  28. package/dist/src/bitgo/utils/tss/eddsa/eddsaMPCv2.js +34 -6
  29. package/dist/src/bitgo/utils/tss/eddsa/eddsaMPCv2KeyGenSender.d.ts +3 -1
  30. package/dist/src/bitgo/utils/tss/eddsa/eddsaMPCv2KeyGenSender.d.ts.map +1 -1
  31. package/dist/src/bitgo/utils/tss/eddsa/eddsaMPCv2KeyGenSender.js +1 -1
  32. package/dist/src/bitgo/utils/tss/eddsa/eddsaVrfMPCv2.d.ts +0 -8
  33. package/dist/src/bitgo/utils/tss/eddsa/eddsaVrfMPCv2.d.ts.map +1 -1
  34. package/dist/src/bitgo/utils/tss/eddsa/eddsaVrfMPCv2.js +4 -23
  35. package/dist/src/bitgo/utils/tss/eddsa/types.d.ts +3 -0
  36. package/dist/src/bitgo/utils/tss/eddsa/types.d.ts.map +1 -1
  37. package/dist/src/bitgo/utils/tss/eddsa/types.js +1 -1
  38. package/dist/src/bitgo/utils/tss/index.d.ts +1 -0
  39. package/dist/src/bitgo/utils/tss/index.d.ts.map +1 -1
  40. package/dist/src/bitgo/utils/tss/index.js +2 -1
  41. package/dist/src/bitgo/utils/tss/keyShareEnvelope.d.ts +40 -0
  42. package/dist/src/bitgo/utils/tss/keyShareEnvelope.d.ts.map +1 -0
  43. package/dist/src/bitgo/utils/tss/keyShareEnvelope.js +103 -0
  44. package/dist/test/unit/bitgo/safe/safe.js +15 -2
  45. package/dist/test/unit/bitgo/utils/tss/eddsa/eddsaMPCv2.js +76 -1
  46. package/dist/test/unit/bitgo/utils/tss/eddsa/eddsaVrfMPCv2.js +4 -3
  47. package/dist/test/unit/bitgo/utils/tss/eddsa/smcUtil.js +66 -1
  48. package/dist/test/unit/bitgo/utils/tss/keyShareEnvelope.d.ts +2 -0
  49. package/dist/test/unit/bitgo/utils/tss/keyShareEnvelope.d.ts.map +1 -0
  50. package/dist/test/unit/bitgo/utils/tss/keyShareEnvelope.js +83 -0
  51. package/dist/tsconfig.tsbuildinfo +1 -1
  52. package/package.json +4 -4
@@ -268,10 +268,23 @@ describe('Safe', function () {
268
268
  addArgs.should.not.have.property('path');
269
269
  addArgs.should.not.have.property('derivedFromParentWithSeed');
270
270
  });
271
+ it('mints hteth onchain from secp256k1Multisig roots when default wallet type is tss', async function () {
272
+ stubCoin('hteth', { getDefaultMultisigType: 'tss' });
273
+ await safe.createWallet({ coin: 'hteth', label: 'evm onchain', passphrase: 'pw' });
274
+ derivationQuery.calledOnceWithExactly({ slot: 'secp256k1Multisig' }).should.be.true();
275
+ keychainsGet.calledOnceWithExactly({ id: 'user-root-id' }).should.be.true();
276
+ mintSend.firstCall.args[0].should.containEql({
277
+ coin: 'hteth',
278
+ label: 'evm onchain',
279
+ type: 'hot',
280
+ multisigType: 'onchain',
281
+ keys: ['child-key-id'],
282
+ });
283
+ });
271
284
  it('mints a TSS wallet via the user/BitGo derive ceremony', async function () {
272
285
  stubCoin('hteth', { getDefaultMultisigType: 'tss' });
273
286
  // Real VRF key envelope: `{version: 1, prvKeyShare, vrf}`.
274
- const userBlob = src_1.ECDSAUtils.buildVrfKeyEnvelopes(Buffer.from('signing-1'), Buffer.from('reduced-1'), Buffer.from('vrf-1')).envelope.toString('base64');
287
+ const userBlob = (0, src_1.buildSafeMpcKeyEnvelopes)(Buffer.from('signing-1'), Buffer.from('reduced-1'), Buffer.from('vrf-1')).envelope.toString('base64');
275
288
  keychainsGet.onFirstCall().resolves({ id: 'ecdsa-user', source: 'user', encryptedPrv: `enc:${userBlob}` });
276
289
  mockBitGo.decrypt = sinon
277
290
  .stub()
@@ -399,4 +412,4 @@ describe('Safe', function () {
399
412
  });
400
413
  });
401
414
  });
402
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2FmZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Rlc3QvdW5pdC9iaXRnby9zYWZlL3NhZmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSw2Q0FBK0I7QUFDL0Isa0JBQWdCO0FBRWhCLHlDQU15QjtBQUV6QixNQUFNLFNBQVMsR0FDYixpSEFBaUgsQ0FBQztBQUVwSCxtR0FBbUc7QUFDbkcsMENBQTBDO0FBQzFDLE1BQU0sd0JBQXdCLEdBQUcsMERBQTBELENBQUM7QUFDNUYsTUFBTSxlQUFlLEdBQUcsSUFBQSxvQ0FBOEIsRUFBQyx3QkFBd0IsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUVwRixRQUFRLENBQUMsTUFBTSxFQUFFO0lBQ2YsSUFBSSxJQUFVLENBQUM7SUFDZixJQUFJLFNBQWMsQ0FBQztJQUNuQixJQUFJLFFBQWtCLENBQUM7SUFDdkIsOEZBQThGO0lBQzlGLElBQUksWUFBaUIsQ0FBQztJQUV0QixNQUFNLGlCQUFpQixHQUE2QixDQUFDLGNBQWMsRUFBRSxnQkFBZ0IsRUFBRSxlQUFlLENBQUMsQ0FBQztJQUN4RyxNQUFNLFFBQVEsR0FBNkIsQ0FBQyxZQUFZLEVBQUUsY0FBYyxFQUFFLGFBQWEsQ0FBQyxDQUFDO0lBQ3pGLE1BQU0sUUFBUSxHQUE2QixDQUFDLFlBQVksRUFBRSxjQUFjLEVBQUUsYUFBYSxDQUFDLENBQUM7SUFDekYsTUFBTSxlQUFlLEdBQTZCLENBQUMsU0FBUyxFQUFFLFdBQVcsRUFBRSxVQUFVLENBQUMsQ0FBQztJQUN2RixNQUFNLFFBQVEsR0FBRztRQUNmLEdBQUcsRUFBRTtZQUNILGlCQUFpQjtZQUNqQixRQUFRO1lBQ1IsUUFBUTtZQUNSLGVBQWU7U0FDaEI7S0FDRixDQUFDO0lBRUYsVUFBVSxDQUFDO1FBQ1QsU0FBUyxHQUFHO1lBQ1YsR0FBRyxFQUFFLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQyxT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UztvQkFDakIsTUFBTSxFQUFFLGNBQWM7b0JBQ3RCLHlCQUF5QixFQUFFLE1BQU07aUJBQ2xDLENBQUMsQ0FBQztnQkFDSCxRQUFRLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDO29CQUNwQyxJQUFJLEVBQUUsS0FBSztvQkFDWCxLQUFLLEVBQUUsR0FBRyxLQUFLLE9BQU87b0JBQ3RCLElBQUksRUFBRSxLQUFLO29CQUNYLFlBQVksRUFBRSxTQUFTO29CQUN2QixJQUFJLEVBQUUsQ0FBQyxjQUFjLENBQUM7aUJBQ3ZCLENBQUMsQ0FBQztZQUNMLENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztRQUVELEVBQUUsQ0FBQyw2QkFBNkIsRUFBRSxLQUFLO1lBQ3JDLE1BQU0sSUFBSTtpQkFDUCxZQUFZLENBQUMsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsVUFBVSxFQUFFLEVBQUUsRUFBRSxDQUFDO2lCQUMxRCxNQUFNLENBQUMsRUFBRSxDQUFDLFlBQVksQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDO1FBQ3RELENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLDRCQUE0QixFQUFFLEtBQUs7WUFDcEMsTUFBTSxJQUFJO2lCQUNQLFlBQVksQ0FBQyxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLENBQUM7aUJBQzlELE1BQU0sQ0FBQyxFQUFFLENBQUMsWUFBWSxDQUFDLDRCQUFzQixDQUFDLENBQUM7UUFDcEQsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgc2lub24gZnJvbSAnc2lub24nO1xuaW1wb3J0ICdzaG91bGQnO1xuaW1wb3J0IHsgU2FmZURhdGEgfSBmcm9tICdAYml0Z28vcHVibGljLXR5cGVzJztcbmltcG9ydCB7XG4gIEVDRFNBVXRpbHMsXG4gIEluY29ycmVjdFBhc3N3b3JkRXJyb3IsXG4gIFNhZmUsXG4gIGRlcml2ZVNhZmVDaGlsZEVkMjU1MTlIYXJkZW5lZCxcbiAgZGVyaXZlU2FmZUNoaWxkSGFyZGVuZWRGcm9tWHBydixcbn0gZnJvbSAnLi4vLi4vLi4vLi4vc3JjJztcblxuY29uc3QgUk9PVF9YUFJWID1cbiAgJ3hwcnY5czIxWnJRSDE0M0szaGVreU5qN1RjaVI0WE5ZZTFrTWo2OFcyaXBqSkdOSEVUV1A3bzQyQWpEblNQZ0toZFo0eDhOQkF2YUw3MlJyWGp1WE5kbWtNcUxFUlp6YTczb1l1Z0d0YkxGWEc4Zyc7XG5cbi8vIDMyLWJ5dGUgc3ludGhldGljIHNlZWQsIFN0cktleSBzcGVsbGluZyBnZW5lcmF0ZWQgd2l0aCBzdGVsbGFyLXNkazsgcGlubmVkIGRlcml2YXRpb24gdmVjdG9ycyBpblxuLy8gdGVzdC91bml0L2JpdGdvL3NhZmUvc2FmZURlcml2YXRpb24udHMuXG5jb25zdCBST09UX0VEMjU1MTlfU0VFRF9TVFJLRVkgPSAnU0FBQUNBUURBUUNRTUJZSUJFRkFXREFOQllIUkFFSVNDTUtCS0ZRWERBTVJVR1k0RFVQQjZOS0knO1xuY29uc3QgZWQyNTUxOUNoaWxkQXQwID0gZGVyaXZlU2FmZUNoaWxkRWQyNTUxOUhhcmRlbmVkKFJPT1RfRUQyNTUxOV9TRUVEX1NUUktFWSwgMCk7XG5cbmRlc2NyaWJlKCdTYWZlJywgZnVuY3Rpb24gKCkge1xuICBsZXQgc2FmZTogU2FmZTtcbiAgbGV0IG1vY2tCaXRHbzogYW55O1xuICBsZXQgc2FmZURhdGE6IFNhZmVEYXRhO1xuICAvLyB3aXJlLXNoYXBlZCBTYWZlRGF0YSAodGltZXN0YW1wcyBhcyBJU08gc3RyaW5ncykgZm9yIG1vY2tlZCBSRVNUIHJlc3BvbnNlcyB0aGF0IGdldCBkZWNvZGVkXG4gIGxldCBzYWZlRGF0YVdpcmU6IGFueTtcblxuICBjb25zdCBzZWNwMjU2azFNdWx0aXNpZzogW3N0cmluZywgc3RyaW5nLCBzdHJpbmddID0gWyd1c2VyLXJvb3QtaWQnLCAnYmFja3VwLXJvb3QtaWQnLCAnYml0Z28tcm9vdC1pZCddO1xuICBjb25zdCBlY2RzYU1wYzogW3N0cmluZywgc3RyaW5nLCBzdHJpbmddID0gWydlY2RzYS11c2VyJywgJ2VjZHNhLWJhY2t1cCcsICdlY2RzYS1iaXRnbyddO1xuICBjb25zdCBlZGRzYU1wYzogW3N0cmluZywgc3RyaW5nLCBzdHJpbmddID0gWydlZGRzYS11c2VyJywgJ2VkZHNhLWJhY2t1cCcsICdlZGRzYS1iaXRnbyddO1xuICBjb25zdCBlZDI1NTE5TXVsdGlzaWc6IFtzdHJpbmcsIHN0cmluZywgc3RyaW5nXSA9IFsnZWQtdXNlcicsICdlZC1iYWNrdXAnLCAnZWQtYml0Z28nXTtcbiAgY29uc3Qgcm9vdEtleXMgPSB7XG4gICAgaG90OiB7XG4gICAgICBzZWNwMjU2azFNdWx0aXNpZyxcbiAgICAgIGVjZHNhTXBjLFxuICAgICAgZWRkc2FNcGMsXG4gICAgICBlZDI1NTE5TXVsdGlzaWcsXG4gICAgfSxcbiAgfTtcblxuICBiZWZvcmVFYWNoKGZ1bmN0aW9uICgpIHtcbiAgICBtb2NrQml0R28gPSB7XG4gICAgICB1cmw6IHNpbm9uLnN0dWIoKS5jYWxsc0Zha2UoKHBhdGg6IHN0cmluZykgPT4gcGF0aCksXG4gICAgICBwb3N0OiBzaW5vbi5zdHViKCksXG4gICAgICBwdXQ6IHNpbm9uLnN0dWIoKSxcbiAgICAgIGdldDogc2lub24uc3R1YigpLFxuICAgIH07XG4gICAgc2FmZURhdGEgPSB7XG4gICAgICBpZDogJ3Rlc3Qtc2FmZS1pZCcsXG4gICAgICBlbnRlcnByaXNlSWQ6ICd0ZXN0LWVudGVycHJpc2UtaWQnLFxuICAgICAgbGFiZWw6ICdteSBzYWZlJyxcbiAgICAgIHN0YXR1czogJ2FjdGl2ZScsXG4gICAgICBjcmVhdG9yOiAnY3JlYXRvci1pZCcsXG4gICAgICB1c2VyczogW3sgdXNlcklkOiAnY3JlYXRvci1pZCcsIHBlcm1pc3Npb25zOiBbJ2FkbWluJywgJ3NwZW5kJ10gfV0sXG4gICAgICBjcmVhdGVkQXQ6IG5ldyBEYXRlKCcyMDI2LTA3LTA3VDAwOjAwOjAwLjAwMFonKSxcbiAgICAgIHJvb3RLZXlzLFxuICAgIH07XG4gICAgc2FmZURhdGFXaXJlID0ge1xuICAgICAgaWQ6ICd0ZXN0LXNhZmUtaWQnLFxuICAgICAgZW50ZXJwcmlzZUlkOiAndGVzdC1lbnRlcnByaXNlLWlkJyxcbiAgICAgIGxhYmVsOiAnbXkgc2FmZScsXG4gICAgICBzdGF0dXM6ICdhY3RpdmUnLFxuICAgICAgY3JlYXRvcjogJ2NyZWF0b3ItaWQnLFxuICAgICAgdXNlcnM6IFt7IHVzZXJJZDogJ2NyZWF0b3ItaWQnLCBwZXJtaXNzaW9uczogWydhZG1pbicsICdzcGVuZCddIH1dLFxuICAgICAgY3JlYXRlZEF0OiAnMjAyNi0wNy0wN1QwMDowMDowMC4wMDBaJyxcbiAgICAgIHJvb3RLZXlzLFxuICAgIH07XG4gICAgc2FmZSA9IG5ldyBTYWZlKG1vY2tCaXRHbywgc2FmZURhdGEpO1xuICB9KTtcblxuICBhZnRlckVhY2goZnVuY3Rpb24gKCkge1xuICAgIHNpbm9uLnJlc3RvcmUoKTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ2dldHRlcnMnLCBmdW5jdGlvbiAoKSB7XG4gICAgaXQoJ2V4cG9zZXMgaWQvZW50ZXJwcmlzZUlkL2xhYmVsL3N0YXR1cycsIGZ1bmN0aW9uICgpIHtcbiAgICAgIHNhZmUuaWQoKS5zaG91bGQuZXF1YWwoJ3Rlc3Qtc2FmZS1pZCcpO1xuICAgICAgc2FmZS5lbnRlcnByaXNlSWQoKS5zaG91bGQuZXF1YWwoJ3Rlc3QtZW50ZXJwcmlzZS1pZCcpO1xuICAgICAgc2FmZS5sYWJlbCgpLnNob3VsZC5lcXVhbCgnbXkgc2FmZScpO1xuICAgICAgc2FmZS5zdGF0dXMoKS5zaG91bGQuZXF1YWwoJ2FjdGl2ZScpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3RvSlNPTiByZXR1cm5zIHRoZSB1bmRlcmx5aW5nIGRhdGEnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBzYWZlLnRvSlNPTigpLnNob3VsZC5lcXVhbChzYWZlRGF0YSk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCd1cmwnLCBmdW5jdGlvbiAoKSB7XG4gICAgaXQoJ2J1aWxkcyB0aGUgZW50ZXJwcmlzZS1zY29wZWQgdjIgcGF0aCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgIHNhZmUudXJsKCkuc2hvdWxkLmVxdWFsKCcvZW50ZXJwcmlzZS90ZXN0LWVudGVycHJpc2UtaWQvc2FmZXMvdGVzdC1zYWZlLWlkJyk7XG4gICAgICBzYWZlLnVybCgnL2ZyZWV6ZScpLnNob3VsZC5lcXVhbCgnL2VudGVycHJpc2UvdGVzdC1lbnRlcnByaXNlLWlkL3NhZmVzL3Rlc3Qtc2FmZS1pZC9mcmVlemUnKTtcbiAgICAgIG1vY2tCaXRHby51cmwuY2FsbGVkV2l0aCgnL2VudGVycHJpc2UvdGVzdC1lbnRlcnByaXNlLWlkL3NhZmVzL3Rlc3Qtc2FmZS1pZCcsIDIpLnNob3VsZC5iZS50cnVlKCk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCd1cGRhdGUgUkVTVCBwbHVtYmluZycsIGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBzdHViUHV0KHJlc3BvbnNlOiB1bmtub3duKSB7XG4gICAgICBjb25zdCByZXN1bHRTdHViID0gc2lub24uc3R1YigpLnJlc29sdmVzKHJlc3BvbnNlKTtcbiAgICAgIGNvbnN0IHNlbmRTdHViID0gc2lub24uc3R1YigpLnJldHVybnMoeyByZXN1bHQ6IHJlc3VsdFN0dWIgfSk7XG4gICAgICBtb2NrQml0R28ucHV0LnJldHVybnMoeyBzZW5kOiBzZW5kU3R1YiB9KTtcbiAgICAgIHJldHVybiB7IHJlc3VsdFN0dWIsIHNlbmRTdHViIH07XG4gICAgfVxuXG4gICAgaXQoJ3VwZGF0ZXMgdGhlIGxhYmVsIGFuZCBkZWNvZGVzIFNhZmVEYXRhJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgdXBkYXRlZCA9IHsgLi4uc2FmZURhdGFXaXJlLCBsYWJlbDogJ3JlbmFtZWQgc2FmZScgfTtcbiAgICAgIGNvbnN0IHsgc2VuZFN0dWIgfSA9IHN0dWJQdXQodXBkYXRlZCk7XG5cbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHNhZmUudXBkYXRlKHsgbGFiZWw6ICdyZW5hbWVkIHNhZmUnIH0pO1xuXG4gICAgICBtb2NrQml0R28ucHV0LmNhbGxlZFdpdGgoJy9lbnRlcnByaXNlL3Rlc3QtZW50ZXJwcmlzZS1pZC9zYWZlcy90ZXN0LXNhZmUtaWQnKS5zaG91bGQuYmUudHJ1ZSgpO1xuICAgICAgc2VuZFN0dWIuY2FsbGVkV2l0aEV4YWN0bHkoeyBsYWJlbDogJ3JlbmFtZWQgc2FmZScgfSkuc2hvdWxkLmJlLnRydWUoKTtcbiAgICAgIHJlc3VsdC5sYWJlbC5zaG91bGQuZXF1YWwoJ3JlbmFtZWQgc2FmZScpO1xuICAgICAgcmVzdWx0LmNyZWF0ZWRBdC5zaG91bGQuYmUuaW5zdGFuY2VvZihEYXRlKTtcbiAgICAgIHNhZmUubGFiZWwoKS5zaG91bGQuZXF1YWwoJ215IHNhZmUnKTtcbiAgICB9KTtcblxuICAgIGl0KCdwcm9wYWdhdGVzIHVwZGF0ZSBlcnJvcnMnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCByZXN1bHRTdHViID0gc2lub24uc3R1YigpLnJlamVjdHMobmV3IEVycm9yKCdyZW5hbWUgZmFpbGVkJykpO1xuICAgICAgY29uc3Qgc2VuZFN0dWIgPSBzaW5vbi5zdHViKCkucmV0dXJucyh7IHJlc3VsdDogcmVzdWx0U3R1YiB9KTtcbiAgICAgIG1vY2tCaXRHby5wdXQucmV0dXJucyh7IHNlbmQ6IHNlbmRTdHViIH0pO1xuXG4gICAgICBhd2FpdCBzYWZlLnVwZGF0ZSh7IGxhYmVsOiAncmVuYW1lZCBzYWZlJyB9KS5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKCdyZW5hbWUgZmFpbGVkJyk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdmcmVlemUgLyBhcmNoaXZlIFJFU1QgcGx1bWJpbmcnLCBmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gc3R1YlBvc3QocmVzcG9uc2U6IHVua25vd24pIHtcbiAgICAgIGNvbnN0IHJlc3VsdFN0dWIgPSBzaW5vbi5zdHViKCkucmVzb2x2ZXMocmVzcG9uc2UpO1xuICAgICAgY29uc3Qgc2VuZFN0dWIgPSBzaW5vbi5zdHViKCkucmV0dXJucyh7IHJlc3VsdDogcmVzdWx0U3R1YiB9KTtcbiAgICAgIG1vY2tCaXRHby5wb3N0LnJldHVybnMoeyBzZW5kOiBzZW5kU3R1YiB9KTtcbiAgICAgIHJldHVybiB7IHNlbmRTdHViIH07XG4gICAgfVxuXG4gICAgaXQoJ2ZyZWV6ZSBwb3N0cyB0aGUgZW5jb2RlZCBib2R5IHRvIHRoZSBmcmVlemUgcm91dGUgYW5kIGRlY29kZXMgU2FmZURhdGEnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBmcm96ZW4gPSB7IC4uLnNhZmVEYXRhV2lyZSwgZnJlZXplOiB7IHJlYXNvbjogJ2luY2lkZW50JyB9IH07XG4gICAgICBjb25zdCB7IHNlbmRTdHViIH0gPSBzdHViUG9zdChmcm96ZW4pO1xuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgc2FmZS5mcmVlemUoeyByZWFzb246ICdpbmNpZGVudCcgfSk7XG4gICAgICBtb2NrQml0R28ucG9zdC5jYWxsZWRXaXRoKCcvZW50ZXJwcmlzZS90ZXN0LWVudGVycHJpc2UtaWQvc2FmZXMvdGVzdC1zYWZlLWlkL2ZyZWV6ZScpLnNob3VsZC5iZS50cnVlKCk7XG4gICAgICBzZW5kU3R1Yi5jYWxsZWRXaXRoKHsgcmVhc29uOiAnaW5jaWRlbnQnIH0pLnNob3VsZC5iZS50cnVlKCk7XG4gICAgICByZXN1bHQuZnJlZXplIS5yZWFzb24hLnNob3VsZC5lcXVhbCgnaW5jaWRlbnQnKTtcbiAgICAgIHJlc3VsdC5jcmVhdGVkQXQuc2hvdWxkLmJlLmluc3RhbmNlb2YoRGF0ZSk7XG4gICAgfSk7XG5cbiAgICBpdCgnYXJjaGl2ZSBwb3N0cyBhbiBlbXB0eSBib2R5IHRvIHRoZSBhcmNoaXZlIHJvdXRlIGFuZCBkZWNvZGVzIFNhZmVEYXRhJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgYXJjaGl2ZWQgPSB7IC4uLnNhZmVEYXRhV2lyZSwgc3RhdHVzOiAnYXJjaGl2ZWQnIGFzIGNvbnN0IH07XG4gICAgICBjb25zdCB7IHNlbmRTdHViIH0gPSBzdHViUG9zdChhcmNoaXZlZCk7XG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBzYWZlLmFyY2hpdmUoKTtcbiAgICAgIG1vY2tCaXRHby5wb3N0LmNhbGxlZFdpdGgoJy9lbnRlcnByaXNlL3Rlc3QtZW50ZXJwcmlzZS1pZC9zYWZlcy90ZXN0LXNhZmUtaWQvYXJjaGl2ZScpLnNob3VsZC5iZS50cnVlKCk7XG4gICAgICBzZW5kU3R1Yi5jYWxsZWRXaXRoRXhhY3RseSgpLnNob3VsZC5iZS50cnVlKCk7XG4gICAgICByZXN1bHQuc3RhdHVzLnNob3VsZC5lcXVhbCgnYXJjaGl2ZWQnKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ21lbWJlci9zaGFyZSBtZXRob2RzIGFyZSBzdHViYmVkJywgZnVuY3Rpb24gKCkge1xuICAgIGl0KCdhZGRNZW1iZXIgdGhyb3dzIG5vdC1pbXBsZW1lbnRlZCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGF3YWl0IHNhZmUuYWRkTWVtYmVyKHsgdXNlcklkOiAndScsIHBlcm1pc3Npb25zOiBbJ3ZpZXcnXSB9KS5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKC9ub3QgeWV0IGltcGxlbWVudGVkLyk7XG4gICAgfSk7XG5cbiAgICBpdCgnYWRkTWVtYmVyVG9XYWxsZXQgdGhyb3dzIG5vdC1pbXBsZW1lbnRlZCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGF3YWl0IHNhZmVcbiAgICAgICAgLmFkZE1lbWJlclRvV2FsbGV0KHsgd2FsbGV0SWQ6ICd3Jywgd2FsbGV0UGFzc3BocmFzZTogJ3AnIH0pXG4gICAgICAgIC5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKC9ub3QgeWV0IGltcGxlbWVudGVkLyk7XG4gICAgfSk7XG5cbiAgICBpdCgnbGlzdFNoYXJlcyB0aHJvd3Mgbm90LWltcGxlbWVudGVkJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgYXdhaXQgc2FmZS5saXN0U2hhcmVzKCkuc2hvdWxkLmJlLnJlamVjdGVkV2l0aCgvbm90IHlldCBpbXBsZW1lbnRlZC8pO1xuICAgIH0pO1xuXG4gICAgaXQoJ2FjY2VwdFNoYXJlIHRocm93cyBub3QtaW1wbGVtZW50ZWQnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBhd2FpdCBzYWZlLmFjY2VwdFNoYXJlKHsgc2FmZVNoYXJlSWQ6ICdzJyB9KS5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKC9ub3QgeWV0IGltcGxlbWVudGVkLyk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdjcmVhdGVXYWxsZXQgKFdDTi0xMjAzKScsIGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCBjaGlsZEF0MCA9IGRlcml2ZVNhZmVDaGlsZEhhcmRlbmVkRnJvbVhwcnYoUk9PVF9YUFJWLCAwKTtcbiAgICBjb25zdCBjaGlsZEF0NyA9IGRlcml2ZVNhZmVDaGlsZEhhcmRlbmVkRnJvbVhwcnYoUk9PVF9YUFJWLCA3KTtcbiAgICBsZXQga2V5Y2hhaW5zQWRkOiBzaW5vbi5TaW5vblN0dWI7XG4gICAgbGV0IGtleWNoYWluc0dldDogc2lub24uU2lub25TdHViO1xuICAgIGxldCBkZXJpdmF0aW9uUXVlcnk6IHNpbm9uLlNpbm9uU3R1YjtcbiAgICBsZXQgbWludFNlbmQ6IHNpbm9uLlNpbm9uU3R1YjtcblxuICAgIGZ1bmN0aW9uIHN0dWJDb2luKGNoYWluOiBzdHJpbmcsIG9wdHM6IHsgZ2V0RGVmYXVsdE11bHRpc2lnVHlwZT86IHN0cmluZyB9ID0ge30pIHtcbiAgICAgIGtleWNoYWluc0dldCA9IHNpbm9uLnN0dWIoKS5yZXNvbHZlcyh7XG4gICAgICAgIGlkOiAndXNlci1yb290LWlkJyxcbiAgICAgICAgc291cmNlOiAndXNlcicsXG4gICAgICAgIGVuY3J5cHRlZFBydjogYGVuYzoke1JPT1RfWFBSVn1gLFxuICAgICAgICBwdWI6ICdyb290LXhwdWInLFxuICAgICAgICB0eXBlOiAnaW5kZXBlbmRlbnQnLFxuICAgICAgfSk7XG4gICAgICBrZXljaGFpbnNBZGQgPSBzaW5vbi5zdHViKCkucmVzb2x2ZXMoeyBpZDogJ2NoaWxkLWtleS1pZCcsIHB1YjogY2hpbGRBdDAucHViLCB0eXBlOiAnaW5kZXBlbmRlbnQnIH0pO1xuICAgICAgbW9ja0JpdEdvLmNvaW4gPSBzaW5vbi5zdHViKCkucmV0dXJucyh7XG4gICAgICAgIGdldENoYWluOiBzaW5vbi5zdHViKCkucmV0dXJucyhjaGFpbiksXG4gICAgICAgIGdldERlZmF1bHRNdWx0aXNpZ1R5cGU6IHNpbm9uLnN0dWIoKS5yZXR1cm5zKG9wdHMuZ2V0RGVmYXVsdE11bHRpc2lnVHlwZSksXG4gICAgICAgIHN1cHBvcnRzVHNzOiBzaW5vbi5zdHViKCkucmV0dXJucyhmYWxzZSksXG4gICAgICAgIGtleWNoYWluczogc2lub24uc3R1YigpLnJldHVybnMoeyBnZXQ6IGtleWNoYWluc0dldCwgYWRkOiBrZXljaGFpbnNBZGQgfSksXG4gICAgICB9KTtcbiAgICB9XG4gICAgYmVmb3JlRWFjaChmdW5jdGlvbiAoKSB7XG4gICAgICBzdHViQ29pbigndGJ0YycpO1xuICAgICAgbW9ja0JpdEdvLmRlY3J5cHQgPSBzaW5vbi5zdHViKCkuY2FsbHNGYWtlKCh7IGlucHV0LCBwYXNzd29yZCB9OiB7IGlucHV0OiBzdHJpbmc7IHBhc3N3b3JkOiBzdHJpbmcgfSkgPT4ge1xuICAgICAgICBpZiAocGFzc3dvcmQgIT09ICdwdycpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2JhZCBwYXNzd29yZCcpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpbnB1dC5zdGFydHNXaXRoKCdlbmM6JykpIHtcbiAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGlucHV0LnNsaWNlKDQpKTtcbiAgICAgICAgfVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2JhZCBjaXBoZXJ0ZXh0Jyk7XG4gICAgICB9KTtcbiAgICAgIGRlcml2YXRpb25RdWVyeSA9IHNpbm9uLnN0dWIoKS5yZXR1cm5zKHtcbiAgICAgICAgcmVzdWx0OiBzaW5vbi5zdHViKCkucmVzb2x2ZXMoeyBzbG90OiAnc2VjcDI1NmsxTXVsdGlzaWcnLCBpbmRleDogMCB9KSxcbiAgICAgIH0pO1xuICAgICAgbW9ja0JpdEdvLmdldC5yZXR1cm5zKHsgcXVlcnk6IGRlcml2YXRpb25RdWVyeSB9KTtcbiAgICAgIGNvbnN0IG1pbnRSZXN1bHQgPSBzaW5vbi5zdHViKCkucmVzb2x2ZXMoe1xuICAgICAgICBpZDogJ3dhbGxldC1pZCcsXG4gICAgICAgIGNvaW46ICd0YnRjJyxcbiAgICAgICAga2V5czogWydjaGlsZC1rZXktaWQnLCAnYmFja3VwLWNoaWxkJywgJ2JpdGdvLWNoaWxkJ10sXG4gICAgICAgIHR5cGU6ICdob3QnLFxuICAgICAgICBtdWx0aXNpZ1R5cGU6ICdvbmNoYWluJyxcbiAgICAgICAgZW50ZXJwcmlzZTogJ3Rlc3QtZW50ZXJwcmlzZS1pZCcsXG4gICAgICAgIHNhZmU6ICd0ZXN0LXNhZmUtaWQnLFxuICAgICAgfSk7XG4gICAgICBtaW50U2VuZCA9IHNpbm9uLnN0dWIoKS5yZXR1cm5zKHsgcmVzdWx0OiBtaW50UmVzdWx0IH0pO1xuICAgICAgbW9ja0JpdEdvLnBvc3QucmV0dXJucyh7IHNlbmQ6IG1pbnRTZW5kIH0pO1xuICAgIH0pO1xuXG4gICAgaXQoJ3BlZWtzIHRoZSBpbmRleCwgcmVnaXN0ZXJzIGEgcHVibGljLW9ubHkgdXNlciBjaGlsZCwgYW5kIG1pbnRzJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3Qgd2FsbGV0ID0gYXdhaXQgc2FmZS5jcmVhdGVXYWxsZXQoeyBjb2luOiAndGJ0YycsIGxhYmVsOiAnZGVzayAxJywgcGFzc3BocmFzZTogJ3B3JyB9KTtcblxuICAgICAgZGVyaXZhdGlvblF1ZXJ5LmNhbGxlZE9uY2VXaXRoRXhhY3RseSh7IHNsb3Q6ICdzZWNwMjU2azFNdWx0aXNpZycgfSkuc2hvdWxkLmJlLnRydWUoKTtcbiAgICAgIGtleWNoYWluc0dldC5jYWxsZWRPbmNlV2l0aEV4YWN0bHkoeyBpZDogJ3VzZXItcm9vdC1pZCcgfSkuc2hvdWxkLmJlLnRydWUoKTtcbiAgICAgIGtleWNoYWluc0FkZC5jYWxsZWRPbmNlLnNob3VsZC5iZS50cnVlKCk7XG4gICAgICBjb25zdCBhZGRBcmdzID0ga2V5Y2hhaW5zQWRkLmZpcnN0Q2FsbC5hcmdzWzBdO1xuICAgICAgYWRkQXJncy5zaG91bGQuZXFsKHtcbiAgICAgICAgcHViOiBjaGlsZEF0MC5wdWIsXG4gICAgICAgIHNvdXJjZTogJ3VzZXInLFxuICAgICAgICBrZXlUeXBlOiAnaW5kZXBlbmRlbnQnLFxuICAgICAgICBwYXJlbnQ6ICd1c2VyLXJvb3QtaWQnLFxuICAgICAgICBzYWZlSWQ6ICd0ZXN0LXNhZmUtaWQnLFxuICAgICAgICBkZXJpdmVkRnJvbVBhcmVudFdpdGhQYXRoOiBcIm0vMCdcIixcbiAgICAgIH0pO1xuICAgICAgYWRkQXJncy5zaG91bGQubm90LmhhdmUucHJvcGVydHkoJ2VuY3J5cHRlZFBydicpO1xuICAgICAgYWRkQXJncy5zaG91bGQubm90LmhhdmUucHJvcGVydHkoJ2Rlcml2ZWRGcm9tUGFyZW50V2l0aFNlZWQnKTtcbiAgICAgIGFkZEFyZ3Muc2hvdWxkLm5vdC5oYXZlLnByb3BlcnR5KCdwYXRoJyk7XG5cbiAgICAgIG1vY2tCaXRHby5wb3N0LmNhbGxlZFdpdGgoJy9lbnRlcnByaXNlL3Rlc3QtZW50ZXJwcmlzZS1pZC9zYWZlcy90ZXN0LXNhZmUtaWQvd2FsbGV0cycpLnNob3VsZC5iZS50cnVlKCk7XG4gICAgICBtaW50U2VuZC5maXJzdENhbGwuYXJnc1swXS5zaG91bGQuZXFsKHtcbiAgICAgICAgY29pbjogJ3RidGMnLFxuICAgICAgICBsYWJlbDogJ2Rlc2sgMScsXG4gICAgICAgIHR5cGU6ICdob3QnLFxuICAgICAgICBtdWx0aXNpZ1R5cGU6ICdvbmNoYWluJyxcbiAgICAgICAga2V5czogWydjaGlsZC1rZXktaWQnXSxcbiAgICAgIH0pO1xuICAgICAgd2FsbGV0LmlkKCkuc2hvdWxkLmVxdWFsKCd3YWxsZXQtaWQnKTtcbiAgICAgIGNvbnN0IG1pbnRlZFNhZmVJZCA9IHdhbGxldC5zYWZlSWQoKTtcbiAgICAgIGlmIChtaW50ZWRTYWZlSWQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2V4cGVjdGVkIG1pbnRlZCB3YWxsZXQgdG8gaW5jbHVkZSBzYWZlSWQnKTtcbiAgICAgIH1cbiAgICAgIG1pbnRlZFNhZmVJZC5zaG91bGQuZXF1YWwoJ3Rlc3Qtc2FmZS1pZCcpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3JlZ2lzdGVycyB0aGUgY2hpbGQgd2l0aCBkZXJpdmVkRnJvbVBhcmVudFdpdGhQYXRoIGF0IGEgbm9uLXplcm8gbWludCBpbmRleCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGRlcml2YXRpb25RdWVyeS5yZXR1cm5zKHtcbiAgICAgICAgcmVzdWx0OiBzaW5vbi5zdHViKCkucmVzb2x2ZXMoeyBzbG90OiAnc2VjcDI1NmsxTXVsdGlzaWcnLCBpbmRleDogNyB9KSxcbiAgICAgIH0pO1xuICAgICAga2V5Y2hhaW5zQWRkLnJlc29sdmVzKHsgaWQ6ICdjaGlsZC1rZXktaWQnLCBwdWI6IGNoaWxkQXQ3LnB1YiwgdHlwZTogJ2luZGVwZW5kZW50JyB9KTtcblxuICAgICAgYXdhaXQgc2FmZS5jcmVhdGVXYWxsZXQoeyBjb2luOiAndGJ0YycsIGxhYmVsOiAnZGVzayA4JywgcGFzc3BocmFzZTogJ3B3JyB9KTtcblxuICAgICAgY29uc3QgYWRkQXJncyA9IGtleWNoYWluc0FkZC5maXJzdENhbGwuYXJnc1swXTtcbiAgICAgIGFkZEFyZ3MucHViLnNob3VsZC5lcXVhbChjaGlsZEF0Ny5wdWIpO1xuICAgICAgYWRkQXJncy5kZXJpdmVkRnJvbVBhcmVudFdpdGhQYXRoLnNob3VsZC5lcXVhbChcIm0vNydcIik7XG4gICAgICBhZGRBcmdzLnNob3VsZC5ub3QuaGF2ZS5wcm9wZXJ0eSgncGF0aCcpO1xuICAgICAgYWRkQXJncy5zaG91bGQubm90LmhhdmUucHJvcGVydHkoJ2Rlcml2ZWRGcm9tUGFyZW50V2l0aFNlZWQnKTtcbiAgICB9KTtcblxuICAgIGl0KCdtaW50cyBhIFRTUyB3YWxsZXQgdmlhIHRoZSB1c2VyL0JpdEdvIGRlcml2ZSBjZXJlbW9ueScsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIHN0dWJDb2luKCdodGV0aCcsIHsgZ2V0RGVmYXVsdE11bHRpc2lnVHlwZTogJ3RzcycgfSk7XG4gICAgICAvLyBSZWFsIFZSRiBrZXkgZW52ZWxvcGU6IGB7dmVyc2lvbjogMSwgcHJ2S2V5U2hhcmUsIHZyZn1gLlxuICAgICAgY29uc3QgdXNlckJsb2IgPSBFQ0RTQVV0aWxzLmJ1aWxkVnJmS2V5RW52ZWxvcGVzKFxuICAgICAgICBCdWZmZXIuZnJvbSgnc2lnbmluZy0xJyksXG4gICAgICAgIEJ1ZmZlci5mcm9tKCdyZWR1Y2VkLTEnKSxcbiAgICAgICAgQnVmZmVyLmZyb20oJ3ZyZi0xJylcbiAgICAgICkuZW52ZWxvcGUudG9TdHJpbmcoJ2Jhc2U2NCcpO1xuICAgICAga2V5Y2hhaW5zR2V0Lm9uRmlyc3RDYWxsKCkucmVzb2x2ZXMoeyBpZDogJ2VjZHNhLXVzZXInLCBzb3VyY2U6ICd1c2VyJywgZW5jcnlwdGVkUHJ2OiBgZW5jOiR7dXNlckJsb2J9YCB9KTtcbiAgICAgIG1vY2tCaXRHby5kZWNyeXB0ID0gc2lub25cbiAgICAgICAgLnN0dWIoKVxuICAgICAgICAuY2FsbHNGYWtlKCh7IGlucHV0IH06IHsgaW5wdXQ6IHN0cmluZyB9KSA9PiBQcm9taXNlLnJlc29sdmUoaW5wdXQuc3RhcnRzV2l0aCgnZW5jOicpID8gaW5wdXQuc2xpY2UoNCkgOiAnJykpO1xuXG4gICAgICBkZXJpdmF0aW9uUXVlcnkucmV0dXJucyh7XG4gICAgICAgIHJlc3VsdDogc2lub24uc3R1YigpLnJlc29sdmVzKHsgc2xvdDogJ2VjZHNhTXBjJywgaW5kZXg6IDAgfSksXG4gICAgICB9KTtcblxuICAgICAgY29uc3QgY2VyZW1vbnlTdHViID0gc2lub24uc3R1YihFQ0RTQVV0aWxzLkVjZHNhVnJmTVBDdjJVdGlscy5wcm90b3R5cGUsICdjcmVhdGVTYWZlQ2hpbGRLZXljaGFpbnMnKS5yZXNvbHZlcyh7XG4gICAgICAgIHVzZXJLZXljaGFpbjogeyBpZDogJ2VjZHNhLWNoaWxkLXVzZXInIH0sXG4gICAgICAgIGJhY2t1cEtleWNoYWluOiB7IGlkOiAnZWNkc2EtY2hpbGQtYmFja3VwLXBsYWNlaG9sZGVyJyB9LFxuICAgICAgICBiaXRnb0tleWNoYWluOiB7IGlkOiAnZWNkc2EtY2hpbGQtYml0Z28tcGxhY2Vob2xkZXInIH0sXG4gICAgICB9IGFzIG5ldmVyKTtcblxuICAgICAgY29uc3Qgd2FsbGV0ID0gYXdhaXQgc2FmZS5jcmVhdGVXYWxsZXQoeyBjb2luOiAnaHRldGgnLCBsYWJlbDogJ2V2bScsIHBhc3NwaHJhc2U6ICdwdycsIG11bHRpc2lnVHlwZTogJ3RzcycgfSk7XG5cbiAgICAgIGRlcml2YXRpb25RdWVyeS5jYWxsZWRPbmNlV2l0aEV4YWN0bHkoeyBzbG90OiAnZWNkc2FNcGMnIH0pLnNob3VsZC5iZS50cnVlKCk7XG4gICAgICBrZXljaGFpbnNHZXQuY2FsbGVkT25jZVdpdGhFeGFjdGx5KHsgaWQ6ICdlY2RzYS11c2VyJyB9KS5zaG91bGQuYmUudHJ1ZSgpO1xuICAgICAgY29uc3QgY2VyZW1vbnlBcmdzID0gY2VyZW1vbnlTdHViLmZpcnN0Q2FsbC5hcmdzWzBdO1xuICAgICAgY2VyZW1vbnlBcmdzLnNob3VsZC5jb250YWluRXFsKHtcbiAgICAgICAgc2FmZUlkOiAndGVzdC1zYWZlLWlkJyxcbiAgICAgICAgZW50ZXJwcmlzZTogJ3Rlc3QtZW50ZXJwcmlzZS1pZCcsXG4gICAgICAgIHBhcmVudEtleUlkOiAnZWNkc2EtYml0Z28nLFxuICAgICAgICBkZXJpdmF0aW9uSW5kZXg6IDAsXG4gICAgICAgIHVzZXJSb290S2V5SWQ6ICdlY2RzYS11c2VyJyxcbiAgICAgICAgYmFja3VwUm9vdEtleUlkOiAnZWNkc2EtYmFja3VwJyxcbiAgICAgIH0pO1xuICAgICAgY2VyZW1vbnlBcmdzLnNob3VsZC5ub3QuaGF2ZS5wcm9wZXJ0eSgnYmFja3VwUm9vdEtleVNoYXJlJyk7XG4gICAgICBjZXJlbW9ueUFyZ3Muc2hvdWxkLm5vdC5oYXZlLnByb3BlcnR5KCdiYWNrdXBSb290VnJmS2V5U2hhcmUnKTtcbiAgICAgIGNlcmVtb255QXJncy51c2VyUm9vdEtleVNoYXJlLnNob3VsZC5kZWVwRXF1YWwoQnVmZmVyLmZyb20oJ3NpZ25pbmctMScpKTtcbiAgICAgIGNlcmVtb255QXJncy51c2VyUm9vdFZyZktleVNoYXJlLnNob3VsZC5kZWVwRXF1YWwoQnVmZmVyLmZyb20oJ3ZyZi0xJykpO1xuXG4gICAgICBtaW50U2VuZC5maXJzdENhbGwuYXJnc1swXS5zaG91bGQuZXFsKHtcbiAgICAgICAgY29pbjogJ2h0ZXRoJyxcbiAgICAgICAgbGFiZWw6ICdldm0nLFxuICAgICAgICB0eXBlOiAnaG90JyxcbiAgICAgICAgbXVsdGlzaWdUeXBlOiAndHNzJyxcbiAgICAgICAga2V5czogWydlY2RzYS1jaGlsZC11c2VyJywgJ2VjZHNhLWNoaWxkLWJhY2t1cC1wbGFjZWhvbGRlcicsICdlY2RzYS1jaGlsZC1iaXRnby1wbGFjZWhvbGRlciddLFxuICAgICAgfSk7XG4gICAgICB3YWxsZXQuaWQoKS5zaG91bGQuZXF1YWwoJ3dhbGxldC1pZCcpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3JlamVjdHMgYSBwZWVrZWQgZGVyaXZhdGlvbiBpbmRleCBmb3IgdGhlIHdyb25nIHNsb3QnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBkZXJpdmF0aW9uUXVlcnkucmV0dXJucyh7XG4gICAgICAgIHJlc3VsdDogc2lub24uc3R1YigpLnJlc29sdmVzKHsgc2xvdDogJ2VjZHNhTXBjJywgaW5kZXg6IDAgfSksXG4gICAgICB9KTtcbiAgICAgIGF3YWl0IHNhZmVcbiAgICAgICAgLmNyZWF0ZVdhbGxldCh7IGNvaW46ICd0YnRjJywgbGFiZWw6ICdkZXNrIDEnLCBwYXNzcGhyYXNlOiAncHcnIH0pXG4gICAgICAgIC5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKC9yZXR1cm5lZCBzbG90ICdlY2RzYU1wYycvKTtcbiAgICB9KTtcblxuICAgIGl0KCdtaW50cyBhbiBlZDI1NTE5IHdhbGxldCBmcm9tIHRoZSBTdHJLZXkgc2VlZCB1c2VyIHJvb3QnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBzdHViQ29pbigndHhsbScpO1xuICAgICAga2V5Y2hhaW5zR2V0LnJlc29sdmVzKHtcbiAgICAgICAgaWQ6ICd1c2VyLXJvb3QtaWQnLFxuICAgICAgICBzb3VyY2U6ICd1c2VyJyxcbiAgICAgICAgZW5jcnlwdGVkUHJ2OiBgZW5jOiR7Uk9PVF9FRDI1NTE5X1NFRURfU1RSS0VZfWAsXG4gICAgICAgIHB1YjogJ0dBQjJDQjU3NlBIQkJQUTVPRE9SUloyTFlDTVdQWkdXR0NOMktESzdEWE9JTVpBU0tVWTNRWjZRJyxcbiAgICAgICAgdHlwZTogJ2luZGVwZW5kZW50JyxcbiAgICAgIH0pO1xuICAgICAga2V5Y2hhaW5zQWRkLnJlc29sdmVzKHsgaWQ6ICdjaGlsZC1rZXktaWQnLCBwdWI6IGVkMjU1MTlDaGlsZEF0MC5wdWIsIHR5cGU6ICdpbmRlcGVuZGVudCcgfSk7XG4gICAgICBkZXJpdmF0aW9uUXVlcnkucmV0dXJucyh7XG4gICAgICAgIHJlc3VsdDogc2lub24uc3R1YigpLnJlc29sdmVzKHsgc2xvdDogJ2VkMjU1MTlNdWx0aXNpZycsIGluZGV4OiAwIH0pLFxuICAgICAgfSk7XG5cbiAgICAgIGF3YWl0IHNhZmUuY3JlYXRlV2FsbGV0KHsgY29pbjogJ3R4bG0nLCBsYWJlbDogJ3hsbSBkZXNrJywgcGFzc3BocmFzZTogJ3B3JyB9KTtcblxuICAgICAgZGVyaXZhdGlvblF1ZXJ5LmNhbGxlZE9uY2VXaXRoRXhhY3RseSh7IHNsb3Q6ICdlZDI1NTE5TXVsdGlzaWcnIH0pLnNob3VsZC5iZS50cnVlKCk7XG4gICAgICBrZXljaGFpbnNHZXQuY2FsbGVkT25jZVdpdGhFeGFjdGx5KHsgaWQ6ICdlZC11c2VyJyB9KS5zaG91bGQuYmUudHJ1ZSgpO1xuICAgICAgY29uc3QgYWRkQXJncyA9IGtleWNoYWluc0FkZC5maXJzdENhbGwuYXJnc1swXTtcbiAgICAgIGFkZEFyZ3Muc2hvdWxkLmVxbCh7XG4gICAgICAgIHB1YjogZWQyNTUxOUNoaWxkQXQwLnB1YixcbiAgICAgICAgc291cmNlOiAndXNlcicsXG4gICAgICAgIGtleVR5cGU6ICdpbmRlcGVuZGVudCcsXG4gICAgICAgIHBhcmVudDogJ2VkLXVzZXInLFxuICAgICAgICBzYWZlSWQ6ICd0ZXN0LXNhZmUtaWQnLFxuICAgICAgICBkZXJpdmVkRnJvbVBhcmVudFdpdGhQYXRoOiBcIm0vMCdcIixcbiAgICAgIH0pO1xuICAgICAgYWRkQXJncy5zaG91bGQubm90LmhhdmUucHJvcGVydHkoJ2VuY3J5cHRlZFBydicpO1xuICAgICAgbWludFNlbmQuZmlyc3RDYWxsLmFyZ3NbMF0uc2hvdWxkLmVxbCh7XG4gICAgICAgIGNvaW46ICd0eGxtJyxcbiAgICAgICAgbGFiZWw6ICd4bG0gZGVzaycsXG4gICAgICAgIHR5cGU6ICdob3QnLFxuICAgICAgICBtdWx0aXNpZ1R5cGU6ICdvbmNoYWluJyxcbiAgICAgICAga2V5czogWydjaGlsZC1rZXktaWQnXSxcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgZm9yIChjb25zdCBjaGFpbiBvZiBbJ3RhbGdvJywgJ3RoYmFyJ10pIHtcbiAgICAgIGl0KGBtaW50cyBhbiBlZDI1NTE5ICR7Y2hhaW59IHdhbGxldCBwb3N0aW5nIHRoZSB1c2VyIGNoaWxkIGFzIGEgU3RyS2V5IChzZXJ2ZXIgY29udmVydHMpYCwgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICAvLyBUaGUgdXNlciBjaGlsZCBpcyBoYXJkZW5lZC1kZXJpdmVkIGZyb20gdGhlIHR4bG0gU3RyS2V5IHVzZXIgcm9vdCwgc28gdGhlIFNESyBwb3N0cyBhXG4gICAgICAgIC8vIFN0ZWxsYXIgU3RyS2V5IGZvciBFVkVSWSBlZDI1NTE5IHdhbGxldCBjb2luLiBXYWxsZXQgUGxhdGZvcm0gY29udmVydHMgdGhlIHB1YiB0byB0aGVcbiAgICAgICAgLy8gd2FsbGV0IGNvaW4ncyByZXByZXNlbnRhdGlvbiBhdCByZWdpc3RyYXRpb247IHRoZSBTREsgbmV2ZXIgY29pbi1lbmNvZGVzIGNoaWxkcmVuLlxuICAgICAgICBzdHViQ29pbihjaGFpbik7XG4gICAgICAgIGtleWNoYWluc0dldC5yZXNvbHZlcyh7XG4gICAgICAgICAgaWQ6ICd1c2VyLXJvb3QtaWQnLFxuICAgICAgICAgIHNvdXJjZTogJ3VzZXInLFxuICAgICAgICAgIGVuY3J5cHRlZFBydjogYGVuYzoke1JPT1RfRUQyNTUxOV9TRUVEX1NUUktFWX1gLFxuICAgICAgICAgIHB1YjogJ0dBQjJDQjU3NlBIQkJQUTVPRE9SUloyTFlDTVdQWkdXR0NOMktESzdEWE9JTVpBU0tVWTNRWjZRJyxcbiAgICAgICAgICB0eXBlOiAnaW5kZXBlbmRlbnQnLFxuICAgICAgICB9KTtcbiAgICAgICAga2V5Y2hhaW5zQWRkLnJlc29sdmVzKHsgaWQ6ICdjaGlsZC1rZXktaWQnLCBwdWI6IGBjb252ZXJ0ZWQtJHtjaGFpbn0tcHViYCwgdHlwZTogJ2luZGVwZW5kZW50JyB9KTtcbiAgICAgICAgZGVyaXZhdGlvblF1ZXJ5LnJldHVybnMoe1xuICAgICAgICAgIHJlc3VsdDogc2lub24uc3R1YigpLnJlc29sdmVzKHsgc2xvdDogJ2VkMjU1MTlNdWx0aXNpZycsIGluZGV4OiAwIH0pLFxuICAgICAgICB9KTtcblxuICAgICAgICBhd2FpdCBzYWZlLmNyZWF0ZVdhbGxldCh7IGNvaW46IGNoYWluLCBsYWJlbDogYCR7Y2hhaW59IGRlc2tgLCBwYXNzcGhyYXNlOiAncHcnIH0pO1xuXG4gICAgICAgIGNvbnN0IGFkZEFyZ3MgPSBrZXljaGFpbnNBZGQuZmlyc3RDYWxsLmFyZ3NbMF07XG4gICAgICAgIGFkZEFyZ3Muc2hvdWxkLmVxbCh7XG4gICAgICAgICAgcHViOiBlZDI1NTE5Q2hpbGRBdDAucHViLFxuICAgICAgICAgIHNvdXJjZTogJ3VzZXInLFxuICAgICAgICAgIGtleVR5cGU6ICdpbmRlcGVuZGVudCcsXG4gICAgICAgICAgcGFyZW50OiAnZWQtdXNlcicsXG4gICAgICAgICAgc2FmZUlkOiAndGVzdC1zYWZlLWlkJyxcbiAgICAgICAgICBkZXJpdmVkRnJvbVBhcmVudFdpdGhQYXRoOiBcIm0vMCdcIixcbiAgICAgICAgfSk7XG4gICAgICAgIG1pbnRTZW5kLmZpcnN0Q2FsbC5hcmdzWzBdLnNob3VsZC5lcWwoe1xuICAgICAgICAgIGNvaW46IGNoYWluLFxuICAgICAgICAgIGxhYmVsOiBgJHtjaGFpbn0gZGVza2AsXG4gICAgICAgICAgdHlwZTogJ2hvdCcsXG4gICAgICAgICAgbXVsdGlzaWdUeXBlOiAnb25jaGFpbicsXG4gICAgICAgICAga2V5czogWydjaGlsZC1rZXktaWQnXSxcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBpdCgncmVqZWN0cyBhbiBlbXB0eSBwYXNzcGhyYXNlJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgYXdhaXQgc2FmZVxuICAgICAgICAuY3JlYXRlV2FsbGV0KHsgY29pbjogJ3RidGMnLCBsYWJlbDogJ3cnLCBwYXNzcGhyYXNlOiAnJyB9KVxuICAgICAgICAuc2hvdWxkLmJlLnJlamVjdGVkV2l0aCgvcGFzc3BocmFzZSBpcyByZXF1aXJlZC8pO1xuICAgIH0pO1xuXG4gICAgaXQoJ3JlamVjdHMgYSB3cm9uZyBwYXNzcGhyYXNlJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgYXdhaXQgc2FmZVxuICAgICAgICAuY3JlYXRlV2FsbGV0KHsgY29pbjogJ3RidGMnLCBsYWJlbDogJ3cnLCBwYXNzcGhyYXNlOiAnbm9wZScgfSlcbiAgICAgICAgLnNob3VsZC5iZS5yZWplY3RlZFdpdGgoSW5jb3JyZWN0UGFzc3dvcmRFcnJvcik7XG4gICAgfSk7XG4gIH0pO1xufSk7XG4iXX0=
415
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2FmZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Rlc3QvdW5pdC9iaXRnby9zYWZlL3NhZmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSw2Q0FBK0I7QUFDL0Isa0JBQWdCO0FBRWhCLHlDQU95QjtBQUV6QixNQUFNLFNBQVMsR0FDYixpSEFBaUgsQ0FBQztBQUVwSCxtR0FBbUc7QUFDbkcsMENBQTBDO0FBQzFDLE1BQU0sd0JBQXdCLEdBQUcsMERBQTBELENBQUM7QUFDNUYsTUFBTSxlQUFlLEdBQUcsSUFBQSxvQ0FBOEIsRUFBQyx3QkFBd0IsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUVwRixRQUFRLENBQUMsTUFBTSxFQUFFO0lBQ2YsSUFBSSxJQUFVLENBQUM7SUFDZixJQUFJLFNBQWMsQ0FBQztJQUNuQixJQUFJLFFBQWtCLENBQUM7SUFDdkIsOEZBQThGO0lBQzlGLElBQUksWUFBaUIsQ0FBQztJQUV0QixNQUFNLGlCQUFpQixHQUE2QixDQUFDLGNBQWMsRUFBRSxnQkFBZ0IsRUFBRSxlQUFlLENBQUMsQ0FBQztJQUN4RyxNQUFNLFFBQVEsR0FBNkIsQ0FBQyxZQUFZLEVBQUUsY0FBYyxFQUFFLGFBQWEsQ0FBQyxDQUFDO0lBQ3pGLE1BQU0sUUFBUSxHQUE2QixDQUFDLFlBQVksRUFBRSxjQUFjLEVBQUUsYUFBYSxDQUFDLENBQUM7SUFDekYsTUFBTSxlQUFlLEdBQTZCLENBQUMsU0FBUyxFQUFFLFdBQVcsRUFBRSxVQUFVLENBQUMsQ0FBQztJQUN2RixNQUFNLFFBQVEsR0FBRztRQUNmLEdBQUcsRUFBRTtZQUNILGlCQUFpQjtZQUNqQixRQUFRO1lBQ1IsUUFBUTtZQUNSLGVBQWU7U0FDaEI7S0FDRixDQUFDO0lBRUYsVUFBVSxDQUFDO1FBQ1QsU0FBUyxHQUFHO1lBQ1YsR0FBRyxFQUFFLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQyxT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QUNMLENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztRQUVELEVBQUUsQ0FBQyw2QkFBNkIsRUFBRSxLQUFLO1lBQ3JDLE1BQU0sSUFBSTtpQkFDUCxZQUFZLENBQUMsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsVUFBVSxFQUFFLEVBQUUsRUFBRSxDQUFDO2lCQUMxRCxNQUFNLENBQUMsRUFBRSxDQUFDLFlBQVksQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDO1FBQ3RELENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLDRCQUE0QixFQUFFLEtBQUs7WUFDcEMsTUFBTSxJQUFJO2lCQUNQLFlBQVksQ0FBQyxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLENBQUM7aUJBQzlELE1BQU0sQ0FBQyxFQUFFLENBQUMsWUFBWSxDQUFDLDRCQUFzQixDQUFDLENBQUM7UUFDcEQsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgc2lub24gZnJvbSAnc2lub24nO1xuaW1wb3J0ICdzaG91bGQnO1xuaW1wb3J0IHsgU2FmZURhdGEgfSBmcm9tICdAYml0Z28vcHVibGljLXR5cGVzJztcbmltcG9ydCB7XG4gIEVDRFNBVXRpbHMsXG4gIEluY29ycmVjdFBhc3N3b3JkRXJyb3IsXG4gIGJ1aWxkU2FmZU1wY0tleUVudmVsb3BlcyxcbiAgU2FmZSxcbiAgZGVyaXZlU2FmZUNoaWxkRWQyNTUxOUhhcmRlbmVkLFxuICBkZXJpdmVTYWZlQ2hpbGRIYXJkZW5lZEZyb21YcHJ2LFxufSBmcm9tICcuLi8uLi8uLi8uLi9zcmMnO1xuXG5jb25zdCBST09UX1hQUlYgPVxuICAneHBydjlzMjFaclFIMTQzSzNoZWt5Tmo3VGNpUjRYTlllMWtNajY4VzJpcGpKR05IRVRXUDdvNDJBakRuU1BnS2hkWjR4OE5CQXZhTDcyUnJYanVYTmRta01xTEVSWnphNzNvWXVnR3RiTEZYRzhnJztcblxuLy8gMzItYnl0ZSBzeW50aGV0aWMgc2VlZCwgU3RyS2V5IHNwZWxsaW5nIGdlbmVyYXRlZCB3aXRoIHN0ZWxsYXItc2RrOyBwaW5uZWQgZGVyaXZhdGlvbiB2ZWN0b3JzIGluXG4vLyB0ZXN0L3VuaXQvYml0Z28vc2FmZS9zYWZlRGVyaXZhdGlvbi50cy5cbmNvbnN0IFJPT1RfRUQyNTUxOV9TRUVEX1NUUktFWSA9ICdTQUFBQ0FRREFRQ1FNQllJQkVGQVdEQU5CWUhSQUVJU0NNS0JLRlFYREFNUlVHWTREVVBCNk5LSSc7XG5jb25zdCBlZDI1NTE5Q2hpbGRBdDAgPSBkZXJpdmVTYWZlQ2hpbGRFZDI1NTE5SGFyZGVuZWQoUk9PVF9FRDI1NTE5X1NFRURfU1RSS0VZLCAwKTtcblxuZGVzY3JpYmUoJ1NhZmUnLCBmdW5jdGlvbiAoKSB7XG4gIGxldCBzYWZlOiBTYWZlO1xuICBsZXQgbW9ja0JpdEdvOiBhbnk7XG4gIGxldCBzYWZlRGF0YTogU2FmZURhdGE7XG4gIC8vIHdpcmUtc2hhcGVkIFNhZmVEYXRhICh0aW1lc3RhbXBzIGFzIElTTyBzdHJpbmdzKSBmb3IgbW9ja2VkIFJFU1QgcmVzcG9uc2VzIHRoYXQgZ2V0IGRlY29kZWRcbiAgbGV0IHNhZmVEYXRhV2lyZTogYW55O1xuXG4gIGNvbnN0IHNlY3AyNTZrMU11bHRpc2lnOiBbc3RyaW5nLCBzdHJpbmcsIHN0cmluZ10gPSBbJ3VzZXItcm9vdC1pZCcsICdiYWNrdXAtcm9vdC1pZCcsICdiaXRnby1yb290LWlkJ107XG4gIGNvbnN0IGVjZHNhTXBjOiBbc3RyaW5nLCBzdHJpbmcsIHN0cmluZ10gPSBbJ2VjZHNhLXVzZXInLCAnZWNkc2EtYmFja3VwJywgJ2VjZHNhLWJpdGdvJ107XG4gIGNvbnN0IGVkZHNhTXBjOiBbc3RyaW5nLCBzdHJpbmcsIHN0cmluZ10gPSBbJ2VkZHNhLXVzZXInLCAnZWRkc2EtYmFja3VwJywgJ2VkZHNhLWJpdGdvJ107XG4gIGNvbnN0IGVkMjU1MTlNdWx0aXNpZzogW3N0cmluZywgc3RyaW5nLCBzdHJpbmddID0gWydlZC11c2VyJywgJ2VkLWJhY2t1cCcsICdlZC1iaXRnbyddO1xuICBjb25zdCByb290S2V5cyA9IHtcbiAgICBob3Q6IHtcbiAgICAgIHNlY3AyNTZrMU11bHRpc2lnLFxuICAgICAgZWNkc2FNcGMsXG4gICAgICBlZGRzYU1wYyxcbiAgICAgIGVkMjU1MTlNdWx0aXNpZyxcbiAgICB9LFxuICB9O1xuXG4gIGJlZm9yZUVhY2goZnVuY3Rpb24gKCkge1xuICAgIG1vY2tCaXRHbyA9IHtcbiAgICAgIHVybDogc2lub24uc3R1YigpLmNhbGxzRmFrZSgocGF0aDogc3RyaW5nKSA9PiBwYXRoKSxcbiAgICAgIHBvc3Q6IHNpbm9uLnN0dWIoKSxcbiAgICAgIHB1dDogc2lub24uc3R1YigpLFxuICAgICAgZ2V0OiBzaW5vbi5zdHViKCksXG4gICAgfTtcbiAgICBzYWZlRGF0YSA9IHtcbiAgICAgIGlkOiAndGVzdC1zYWZlLWlkJyxcbiAgICAgIGVudGVycHJpc2VJZDogJ3Rlc3QtZW50ZXJwcmlzZS1pZCcsXG4gICAgICBsYWJlbDogJ215IHNhZmUnLFxuICAgICAgc3RhdHVzOiAnYWN0aXZlJyxcbiAgICAgIGNyZWF0b3I6ICdjcmVhdG9yLWlkJyxcbiAgICAgIHVzZXJzOiBbeyB1c2VySWQ6ICdjcmVhdG9yLWlkJywgcGVybWlzc2lvbnM6IFsnYWRtaW4nLCAnc3BlbmQnXSB9XSxcbiAgICAgIGNyZWF0ZWRBdDogbmV3IERhdGUoJzIwMjYtMDctMDdUMDA6MDA6MDAuMDAwWicpLFxuICAgICAgcm9vdEtleXMsXG4gICAgfTtcbiAgICBzYWZlRGF0YVdpcmUgPSB7XG4gICAgICBpZDogJ3Rlc3Qtc2FmZS1pZCcsXG4gICAgICBlbnRlcnByaXNlSWQ6ICd0ZXN0LWVudGVycHJpc2UtaWQnLFxuICAgICAgbGFiZWw6ICdteSBzYWZlJyxcbiAgICAgIHN0YXR1czogJ2FjdGl2ZScsXG4gICAgICBjcmVhdG9yOiAnY3JlYXRvci1pZCcsXG4gICAgICB1c2VyczogW3sgdXNlcklkOiAnY3JlYXRvci1pZCcsIHBlcm1pc3Npb25zOiBbJ2FkbWluJywgJ3NwZW5kJ10gfV0sXG4gICAgICBjcmVhdGVkQXQ6ICcyMDI2LTA3LTA3VDAwOjAwOjAwLjAwMFonLFxuICAgICAgcm9vdEtleXMsXG4gICAgfTtcbiAgICBzYWZlID0gbmV3IFNhZmUobW9ja0JpdEdvLCBzYWZlRGF0YSk7XG4gIH0pO1xuXG4gIGFmdGVyRWFjaChmdW5jdGlvbiAoKSB7XG4gICAgc2lub24ucmVzdG9yZSgpO1xuICB9KTtcblxuICBkZXNjcmliZSgnZ2V0dGVycycsIGZ1bmN0aW9uICgpIHtcbiAgICBpdCgnZXhwb3NlcyBpZC9lbnRlcnByaXNlSWQvbGFiZWwvc3RhdHVzJywgZnVuY3Rpb24gKCkge1xuICAgICAgc2FmZS5pZCgpLnNob3VsZC5lcXVhbCgndGVzdC1zYWZlLWlkJyk7XG4gICAgICBzYWZlLmVudGVycHJpc2VJZCgpLnNob3VsZC5lcXVhbCgndGVzdC1lbnRlcnByaXNlLWlkJyk7XG4gICAgICBzYWZlLmxhYmVsKCkuc2hvdWxkLmVxdWFsKCdteSBzYWZlJyk7XG4gICAgICBzYWZlLnN0YXR1cygpLnNob3VsZC5lcXVhbCgnYWN0aXZlJyk7XG4gICAgfSk7XG5cbiAgICBpdCgndG9KU09OIHJldHVybnMgdGhlIHVuZGVybHlpbmcgZGF0YScsIGZ1bmN0aW9uICgpIHtcbiAgICAgIHNhZmUudG9KU09OKCkuc2hvdWxkLmVxdWFsKHNhZmVEYXRhKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ3VybCcsIGZ1bmN0aW9uICgpIHtcbiAgICBpdCgnYnVpbGRzIHRoZSBlbnRlcnByaXNlLXNjb3BlZCB2MiBwYXRoJywgZnVuY3Rpb24gKCkge1xuICAgICAgc2FmZS51cmwoKS5zaG91bGQuZXF1YWwoJy9lbnRlcnByaXNlL3Rlc3QtZW50ZXJwcmlzZS1pZC9zYWZlcy90ZXN0LXNhZmUtaWQnKTtcbiAgICAgIHNhZmUudXJsKCcvZnJlZXplJykuc2hvdWxkLmVxdWFsKCcvZW50ZXJwcmlzZS90ZXN0LWVudGVycHJpc2UtaWQvc2FmZXMvdGVzdC1zYWZlLWlkL2ZyZWV6ZScpO1xuICAgICAgbW9ja0JpdEdvLnVybC5jYWxsZWRXaXRoKCcvZW50ZXJwcmlzZS90ZXN0LWVudGVycHJpc2UtaWQvc2FmZXMvdGVzdC1zYWZlLWlkJywgMikuc2hvdWxkLmJlLnRydWUoKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ3VwZGF0ZSBSRVNUIHBsdW1iaW5nJywgZnVuY3Rpb24gKCkge1xuICAgIGZ1bmN0aW9uIHN0dWJQdXQocmVzcG9uc2U6IHVua25vd24pIHtcbiAgICAgIGNvbnN0IHJlc3VsdFN0dWIgPSBzaW5vbi5zdHViKCkucmVzb2x2ZXMocmVzcG9uc2UpO1xuICAgICAgY29uc3Qgc2VuZFN0dWIgPSBzaW5vbi5zdHViKCkucmV0dXJucyh7IHJlc3VsdDogcmVzdWx0U3R1YiB9KTtcbiAgICAgIG1vY2tCaXRHby5wdXQucmV0dXJucyh7IHNlbmQ6IHNlbmRTdHViIH0pO1xuICAgICAgcmV0dXJuIHsgcmVzdWx0U3R1Yiwgc2VuZFN0dWIgfTtcbiAgICB9XG5cbiAgICBpdCgndXBkYXRlcyB0aGUgbGFiZWwgYW5kIGRlY29kZXMgU2FmZURhdGEnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCB1cGRhdGVkID0geyAuLi5zYWZlRGF0YVdpcmUsIGxhYmVsOiAncmVuYW1lZCBzYWZlJyB9O1xuICAgICAgY29uc3QgeyBzZW5kU3R1YiB9ID0gc3R1YlB1dCh1cGRhdGVkKTtcblxuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgc2FmZS51cGRhdGUoeyBsYWJlbDogJ3JlbmFtZWQgc2FmZScgfSk7XG5cbiAgICAgIG1vY2tCaXRHby5wdXQuY2FsbGVkV2l0aCgnL2VudGVycHJpc2UvdGVzdC1lbnRlcnByaXNlLWlkL3NhZmVzL3Rlc3Qtc2FmZS1pZCcpLnNob3VsZC5iZS50cnVlKCk7XG4gICAgICBzZW5kU3R1Yi5jYWxsZWRXaXRoRXhhY3RseSh7IGxhYmVsOiAncmVuYW1lZCBzYWZlJyB9KS5zaG91bGQuYmUudHJ1ZSgpO1xuICAgICAgcmVzdWx0LmxhYmVsLnNob3VsZC5lcXVhbCgncmVuYW1lZCBzYWZlJyk7XG4gICAgICByZXN1bHQuY3JlYXRlZEF0LnNob3VsZC5iZS5pbnN0YW5jZW9mKERhdGUpO1xuICAgICAgc2FmZS5sYWJlbCgpLnNob3VsZC5lcXVhbCgnbXkgc2FmZScpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Byb3BhZ2F0ZXMgdXBkYXRlIGVycm9ycycsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHJlc3VsdFN0dWIgPSBzaW5vbi5zdHViKCkucmVqZWN0cyhuZXcgRXJyb3IoJ3JlbmFtZSBmYWlsZWQnKSk7XG4gICAgICBjb25zdCBzZW5kU3R1YiA9IHNpbm9uLnN0dWIoKS5yZXR1cm5zKHsgcmVzdWx0OiByZXN1bHRTdHViIH0pO1xuICAgICAgbW9ja0JpdEdvLnB1dC5yZXR1cm5zKHsgc2VuZDogc2VuZFN0dWIgfSk7XG5cbiAgICAgIGF3YWl0IHNhZmUudXBkYXRlKHsgbGFiZWw6ICdyZW5hbWVkIHNhZmUnIH0pLnNob3VsZC5iZS5yZWplY3RlZFdpdGgoJ3JlbmFtZSBmYWlsZWQnKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ2ZyZWV6ZSAvIGFyY2hpdmUgUkVTVCBwbHVtYmluZycsIGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBzdHViUG9zdChyZXNwb25zZTogdW5rbm93bikge1xuICAgICAgY29uc3QgcmVzdWx0U3R1YiA9IHNpbm9uLnN0dWIoKS5yZXNvbHZlcyhyZXNwb25zZSk7XG4gICAgICBjb25zdCBzZW5kU3R1YiA9IHNpbm9uLnN0dWIoKS5yZXR1cm5zKHsgcmVzdWx0OiByZXN1bHRTdHViIH0pO1xuICAgICAgbW9ja0JpdEdvLnBvc3QucmV0dXJucyh7IHNlbmQ6IHNlbmRTdHViIH0pO1xuICAgICAgcmV0dXJuIHsgc2VuZFN0dWIgfTtcbiAgICB9XG5cbiAgICBpdCgnZnJlZXplIHBvc3RzIHRoZSBlbmNvZGVkIGJvZHkgdG8gdGhlIGZyZWV6ZSByb3V0ZSBhbmQgZGVjb2RlcyBTYWZlRGF0YScsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGZyb3plbiA9IHsgLi4uc2FmZURhdGFXaXJlLCBmcmVlemU6IHsgcmVhc29uOiAnaW5jaWRlbnQnIH0gfTtcbiAgICAgIGNvbnN0IHsgc2VuZFN0dWIgfSA9IHN0dWJQb3N0KGZyb3plbik7XG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBzYWZlLmZyZWV6ZSh7IHJlYXNvbjogJ2luY2lkZW50JyB9KTtcbiAgICAgIG1vY2tCaXRHby5wb3N0LmNhbGxlZFdpdGgoJy9lbnRlcnByaXNlL3Rlc3QtZW50ZXJwcmlzZS1pZC9zYWZlcy90ZXN0LXNhZmUtaWQvZnJlZXplJykuc2hvdWxkLmJlLnRydWUoKTtcbiAgICAgIHNlbmRTdHViLmNhbGxlZFdpdGgoeyByZWFzb246ICdpbmNpZGVudCcgfSkuc2hvdWxkLmJlLnRydWUoKTtcbiAgICAgIHJlc3VsdC5mcmVlemUhLnJlYXNvbiEuc2hvdWxkLmVxdWFsKCdpbmNpZGVudCcpO1xuICAgICAgcmVzdWx0LmNyZWF0ZWRBdC5zaG91bGQuYmUuaW5zdGFuY2VvZihEYXRlKTtcbiAgICB9KTtcblxuICAgIGl0KCdhcmNoaXZlIHBvc3RzIGFuIGVtcHR5IGJvZHkgdG8gdGhlIGFyY2hpdmUgcm91dGUgYW5kIGRlY29kZXMgU2FmZURhdGEnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBhcmNoaXZlZCA9IHsgLi4uc2FmZURhdGFXaXJlLCBzdGF0dXM6ICdhcmNoaXZlZCcgYXMgY29uc3QgfTtcbiAgICAgIGNvbnN0IHsgc2VuZFN0dWIgfSA9IHN0dWJQb3N0KGFyY2hpdmVkKTtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHNhZmUuYXJjaGl2ZSgpO1xuICAgICAgbW9ja0JpdEdvLnBvc3QuY2FsbGVkV2l0aCgnL2VudGVycHJpc2UvdGVzdC1lbnRlcnByaXNlLWlkL3NhZmVzL3Rlc3Qtc2FmZS1pZC9hcmNoaXZlJykuc2hvdWxkLmJlLnRydWUoKTtcbiAgICAgIHNlbmRTdHViLmNhbGxlZFdpdGhFeGFjdGx5KCkuc2hvdWxkLmJlLnRydWUoKTtcbiAgICAgIHJlc3VsdC5zdGF0dXMuc2hvdWxkLmVxdWFsKCdhcmNoaXZlZCcpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnbWVtYmVyL3NoYXJlIG1ldGhvZHMgYXJlIHN0dWJiZWQnLCBmdW5jdGlvbiAoKSB7XG4gICAgaXQoJ2FkZE1lbWJlciB0aHJvd3Mgbm90LWltcGxlbWVudGVkJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgYXdhaXQgc2FmZS5hZGRNZW1iZXIoeyB1c2VySWQ6ICd1JywgcGVybWlzc2lvbnM6IFsndmlldyddIH0pLnNob3VsZC5iZS5yZWplY3RlZFdpdGgoL25vdCB5ZXQgaW1wbGVtZW50ZWQvKTtcbiAgICB9KTtcblxuICAgIGl0KCdhZGRNZW1iZXJUb1dhbGxldCB0aHJvd3Mgbm90LWltcGxlbWVudGVkJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgYXdhaXQgc2FmZVxuICAgICAgICAuYWRkTWVtYmVyVG9XYWxsZXQoeyB3YWxsZXRJZDogJ3cnLCB3YWxsZXRQYXNzcGhyYXNlOiAncCcgfSlcbiAgICAgICAgLnNob3VsZC5iZS5yZWplY3RlZFdpdGgoL25vdCB5ZXQgaW1wbGVtZW50ZWQvKTtcbiAgICB9KTtcblxuICAgIGl0KCdsaXN0U2hhcmVzIHRocm93cyBub3QtaW1wbGVtZW50ZWQnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBhd2FpdCBzYWZlLmxpc3RTaGFyZXMoKS5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKC9ub3QgeWV0IGltcGxlbWVudGVkLyk7XG4gICAgfSk7XG5cbiAgICBpdCgnYWNjZXB0U2hhcmUgdGhyb3dzIG5vdC1pbXBsZW1lbnRlZCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGF3YWl0IHNhZmUuYWNjZXB0U2hhcmUoeyBzYWZlU2hhcmVJZDogJ3MnIH0pLnNob3VsZC5iZS5yZWplY3RlZFdpdGgoL25vdCB5ZXQgaW1wbGVtZW50ZWQvKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ2NyZWF0ZVdhbGxldCAoV0NOLTEyMDMpJywgZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IGNoaWxkQXQwID0gZGVyaXZlU2FmZUNoaWxkSGFyZGVuZWRGcm9tWHBydihST09UX1hQUlYsIDApO1xuICAgIGNvbnN0IGNoaWxkQXQ3ID0gZGVyaXZlU2FmZUNoaWxkSGFyZGVuZWRGcm9tWHBydihST09UX1hQUlYsIDcpO1xuICAgIGxldCBrZXljaGFpbnNBZGQ6IHNpbm9uLlNpbm9uU3R1YjtcbiAgICBsZXQga2V5Y2hhaW5zR2V0OiBzaW5vbi5TaW5vblN0dWI7XG4gICAgbGV0IGRlcml2YXRpb25RdWVyeTogc2lub24uU2lub25TdHViO1xuICAgIGxldCBtaW50U2VuZDogc2lub24uU2lub25TdHViO1xuXG4gICAgZnVuY3Rpb24gc3R1YkNvaW4oY2hhaW46IHN0cmluZywgb3B0czogeyBnZXREZWZhdWx0TXVsdGlzaWdUeXBlPzogc3RyaW5nIH0gPSB7fSkge1xuICAgICAga2V5Y2hhaW5zR2V0ID0gc2lub24uc3R1YigpLnJlc29sdmVzKHtcbiAgICAgICAgaWQ6ICd1c2VyLXJvb3QtaWQnLFxuICAgICAgICBzb3VyY2U6ICd1c2VyJyxcbiAgICAgICAgZW5jcnlwdGVkUHJ2OiBgZW5jOiR7Uk9PVF9YUFJWfWAsXG4gICAgICAgIHB1YjogJ3Jvb3QteHB1YicsXG4gICAgICAgIHR5cGU6ICdpbmRlcGVuZGVudCcsXG4gICAgICB9KTtcbiAgICAgIGtleWNoYWluc0FkZCA9IHNpbm9uLnN0dWIoKS5yZXNvbHZlcyh7IGlkOiAnY2hpbGQta2V5LWlkJywgcHViOiBjaGlsZEF0MC5wdWIsIHR5cGU6ICdpbmRlcGVuZGVudCcgfSk7XG4gICAgICBtb2NrQml0R28uY29pbiA9IHNpbm9uLnN0dWIoKS5yZXR1cm5zKHtcbiAgICAgICAgZ2V0Q2hhaW46IHNpbm9uLnN0dWIoKS5yZXR1cm5zKGNoYWluKSxcbiAgICAgICAgZ2V0RGVmYXVsdE11bHRpc2lnVHlwZTogc2lub24uc3R1YigpLnJldHVybnMob3B0cy5nZXREZWZhdWx0TXVsdGlzaWdUeXBlKSxcbiAgICAgICAgc3VwcG9ydHNUc3M6IHNpbm9uLnN0dWIoKS5yZXR1cm5zKGZhbHNlKSxcbiAgICAgICAga2V5Y2hhaW5zOiBzaW5vbi5zdHViKCkucmV0dXJucyh7IGdldDoga2V5Y2hhaW5zR2V0LCBhZGQ6IGtleWNoYWluc0FkZCB9KSxcbiAgICAgIH0pO1xuICAgIH1cbiAgICBiZWZvcmVFYWNoKGZ1bmN0aW9uICgpIHtcbiAgICAgIHN0dWJDb2luKCd0YnRjJyk7XG4gICAgICBtb2NrQml0R28uZGVjcnlwdCA9IHNpbm9uLnN0dWIoKS5jYWxsc0Zha2UoKHsgaW5wdXQsIHBhc3N3b3JkIH06IHsgaW5wdXQ6IHN0cmluZzsgcGFzc3dvcmQ6IHN0cmluZyB9KSA9PiB7XG4gICAgICAgIGlmIChwYXNzd29yZCAhPT0gJ3B3Jykge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcignYmFkIHBhc3N3b3JkJyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlucHV0LnN0YXJ0c1dpdGgoJ2VuYzonKSkge1xuICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoaW5wdXQuc2xpY2UoNCkpO1xuICAgICAgICB9XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignYmFkIGNpcGhlcnRleHQnKTtcbiAgICAgIH0pO1xuICAgICAgZGVyaXZhdGlvblF1ZXJ5ID0gc2lub24uc3R1YigpLnJldHVybnMoe1xuICAgICAgICByZXN1bHQ6IHNpbm9uLnN0dWIoKS5yZXNvbHZlcyh7IHNsb3Q6ICdzZWNwMjU2azFNdWx0aXNpZycsIGluZGV4OiAwIH0pLFxuICAgICAgfSk7XG4gICAgICBtb2NrQml0R28uZ2V0LnJldHVybnMoeyBxdWVyeTogZGVyaXZhdGlvblF1ZXJ5IH0pO1xuICAgICAgY29uc3QgbWludFJlc3VsdCA9IHNpbm9uLnN0dWIoKS5yZXNvbHZlcyh7XG4gICAgICAgIGlkOiAnd2FsbGV0LWlkJyxcbiAgICAgICAgY29pbjogJ3RidGMnLFxuICAgICAgICBrZXlzOiBbJ2NoaWxkLWtleS1pZCcsICdiYWNrdXAtY2hpbGQnLCAnYml0Z28tY2hpbGQnXSxcbiAgICAgICAgdHlwZTogJ2hvdCcsXG4gICAgICAgIG11bHRpc2lnVHlwZTogJ29uY2hhaW4nLFxuICAgICAgICBlbnRlcnByaXNlOiAndGVzdC1lbnRlcnByaXNlLWlkJyxcbiAgICAgICAgc2FmZTogJ3Rlc3Qtc2FmZS1pZCcsXG4gICAgICB9KTtcbiAgICAgIG1pbnRTZW5kID0gc2lub24uc3R1YigpLnJldHVybnMoeyByZXN1bHQ6IG1pbnRSZXN1bHQgfSk7XG4gICAgICBtb2NrQml0R28ucG9zdC5yZXR1cm5zKHsgc2VuZDogbWludFNlbmQgfSk7XG4gICAgfSk7XG5cbiAgICBpdCgncGVla3MgdGhlIGluZGV4LCByZWdpc3RlcnMgYSBwdWJsaWMtb25seSB1c2VyIGNoaWxkLCBhbmQgbWludHMnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCB3YWxsZXQgPSBhd2FpdCBzYWZlLmNyZWF0ZVdhbGxldCh7IGNvaW46ICd0YnRjJywgbGFiZWw6ICdkZXNrIDEnLCBwYXNzcGhyYXNlOiAncHcnIH0pO1xuXG4gICAgICBkZXJpdmF0aW9uUXVlcnkuY2FsbGVkT25jZVdpdGhFeGFjdGx5KHsgc2xvdDogJ3NlY3AyNTZrMU11bHRpc2lnJyB9KS5zaG91bGQuYmUudHJ1ZSgpO1xuICAgICAga2V5Y2hhaW5zR2V0LmNhbGxlZE9uY2VXaXRoRXhhY3RseSh7IGlkOiAndXNlci1yb290LWlkJyB9KS5zaG91bGQuYmUudHJ1ZSgpO1xuICAgICAga2V5Y2hhaW5zQWRkLmNhbGxlZE9uY2Uuc2hvdWxkLmJlLnRydWUoKTtcbiAgICAgIGNvbnN0IGFkZEFyZ3MgPSBrZXljaGFpbnNBZGQuZmlyc3RDYWxsLmFyZ3NbMF07XG4gICAgICBhZGRBcmdzLnNob3VsZC5lcWwoe1xuICAgICAgICBwdWI6IGNoaWxkQXQwLnB1YixcbiAgICAgICAgc291cmNlOiAndXNlcicsXG4gICAgICAgIGtleVR5cGU6ICdpbmRlcGVuZGVudCcsXG4gICAgICAgIHBhcmVudDogJ3VzZXItcm9vdC1pZCcsXG4gICAgICAgIHNhZmVJZDogJ3Rlc3Qtc2FmZS1pZCcsXG4gICAgICAgIGRlcml2ZWRGcm9tUGFyZW50V2l0aFBhdGg6IFwibS8wJ1wiLFxuICAgICAgfSk7XG4gICAgICBhZGRBcmdzLnNob3VsZC5ub3QuaGF2ZS5wcm9wZXJ0eSgnZW5jcnlwdGVkUHJ2Jyk7XG4gICAgICBhZGRBcmdzLnNob3VsZC5ub3QuaGF2ZS5wcm9wZXJ0eSgnZGVyaXZlZEZyb21QYXJlbnRXaXRoU2VlZCcpO1xuICAgICAgYWRkQXJncy5zaG91bGQubm90LmhhdmUucHJvcGVydHkoJ3BhdGgnKTtcblxuICAgICAgbW9ja0JpdEdvLnBvc3QuY2FsbGVkV2l0aCgnL2VudGVycHJpc2UvdGVzdC1lbnRlcnByaXNlLWlkL3NhZmVzL3Rlc3Qtc2FmZS1pZC93YWxsZXRzJykuc2hvdWxkLmJlLnRydWUoKTtcbiAgICAgIG1pbnRTZW5kLmZpcnN0Q2FsbC5hcmdzWzBdLnNob3VsZC5lcWwoe1xuICAgICAgICBjb2luOiAndGJ0YycsXG4gICAgICAgIGxhYmVsOiAnZGVzayAxJyxcbiAgICAgICAgdHlwZTogJ2hvdCcsXG4gICAgICAgIG11bHRpc2lnVHlwZTogJ29uY2hhaW4nLFxuICAgICAgICBrZXlzOiBbJ2NoaWxkLWtleS1pZCddLFxuICAgICAgfSk7XG4gICAgICB3YWxsZXQuaWQoKS5zaG91bGQuZXF1YWwoJ3dhbGxldC1pZCcpO1xuICAgICAgY29uc3QgbWludGVkU2FmZUlkID0gd2FsbGV0LnNhZmVJZCgpO1xuICAgICAgaWYgKG1pbnRlZFNhZmVJZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignZXhwZWN0ZWQgbWludGVkIHdhbGxldCB0byBpbmNsdWRlIHNhZmVJZCcpO1xuICAgICAgfVxuICAgICAgbWludGVkU2FmZUlkLnNob3VsZC5lcXVhbCgndGVzdC1zYWZlLWlkJyk7XG4gICAgfSk7XG5cbiAgICBpdCgncmVnaXN0ZXJzIHRoZSBjaGlsZCB3aXRoIGRlcml2ZWRGcm9tUGFyZW50V2l0aFBhdGggYXQgYSBub24temVybyBtaW50IGluZGV4JywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgZGVyaXZhdGlvblF1ZXJ5LnJldHVybnMoe1xuICAgICAgICByZXN1bHQ6IHNpbm9uLnN0dWIoKS5yZXNvbHZlcyh7IHNsb3Q6ICdzZWNwMjU2azFNdWx0aXNpZycsIGluZGV4OiA3IH0pLFxuICAgICAgfSk7XG4gICAgICBrZXljaGFpbnNBZGQucmVzb2x2ZXMoeyBpZDogJ2NoaWxkLWtleS1pZCcsIHB1YjogY2hpbGRBdDcucHViLCB0eXBlOiAnaW5kZXBlbmRlbnQnIH0pO1xuXG4gICAgICBhd2FpdCBzYWZlLmNyZWF0ZVdhbGxldCh7IGNvaW46ICd0YnRjJywgbGFiZWw6ICdkZXNrIDgnLCBwYXNzcGhyYXNlOiAncHcnIH0pO1xuXG4gICAgICBjb25zdCBhZGRBcmdzID0ga2V5Y2hhaW5zQWRkLmZpcnN0Q2FsbC5hcmdzWzBdO1xuICAgICAgYWRkQXJncy5wdWIuc2hvdWxkLmVxdWFsKGNoaWxkQXQ3LnB1Yik7XG4gICAgICBhZGRBcmdzLmRlcml2ZWRGcm9tUGFyZW50V2l0aFBhdGguc2hvdWxkLmVxdWFsKFwibS83J1wiKTtcbiAgICAgIGFkZEFyZ3Muc2hvdWxkLm5vdC5oYXZlLnByb3BlcnR5KCdwYXRoJyk7XG4gICAgICBhZGRBcmdzLnNob3VsZC5ub3QuaGF2ZS5wcm9wZXJ0eSgnZGVyaXZlZEZyb21QYXJlbnRXaXRoU2VlZCcpO1xuICAgIH0pO1xuXG4gICAgaXQoJ21pbnRzIGh0ZXRoIG9uY2hhaW4gZnJvbSBzZWNwMjU2azFNdWx0aXNpZyByb290cyB3aGVuIGRlZmF1bHQgd2FsbGV0IHR5cGUgaXMgdHNzJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgc3R1YkNvaW4oJ2h0ZXRoJywgeyBnZXREZWZhdWx0TXVsdGlzaWdUeXBlOiAndHNzJyB9KTtcblxuICAgICAgYXdhaXQgc2FmZS5jcmVhdGVXYWxsZXQoeyBjb2luOiAnaHRldGgnLCBsYWJlbDogJ2V2bSBvbmNoYWluJywgcGFzc3BocmFzZTogJ3B3JyB9KTtcblxuICAgICAgZGVyaXZhdGlvblF1ZXJ5LmNhbGxlZE9uY2VXaXRoRXhhY3RseSh7IHNsb3Q6ICdzZWNwMjU2azFNdWx0aXNpZycgfSkuc2hvdWxkLmJlLnRydWUoKTtcbiAgICAgIGtleWNoYWluc0dldC5jYWxsZWRPbmNlV2l0aEV4YWN0bHkoeyBpZDogJ3VzZXItcm9vdC1pZCcgfSkuc2hvdWxkLmJlLnRydWUoKTtcbiAgICAgIG1pbnRTZW5kLmZpcnN0Q2FsbC5hcmdzWzBdLnNob3VsZC5jb250YWluRXFsKHtcbiAgICAgICAgY29pbjogJ2h0ZXRoJyxcbiAgICAgICAgbGFiZWw6ICdldm0gb25jaGFpbicsXG4gICAgICAgIHR5cGU6ICdob3QnLFxuICAgICAgICBtdWx0aXNpZ1R5cGU6ICdvbmNoYWluJyxcbiAgICAgICAga2V5czogWydjaGlsZC1rZXktaWQnXSxcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgaXQoJ21pbnRzIGEgVFNTIHdhbGxldCB2aWEgdGhlIHVzZXIvQml0R28gZGVyaXZlIGNlcmVtb255JywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgc3R1YkNvaW4oJ2h0ZXRoJywgeyBnZXREZWZhdWx0TXVsdGlzaWdUeXBlOiAndHNzJyB9KTtcbiAgICAgIC8vIFJlYWwgVlJGIGtleSBlbnZlbG9wZTogYHt2ZXJzaW9uOiAxLCBwcnZLZXlTaGFyZSwgdnJmfWAuXG4gICAgICBjb25zdCB1c2VyQmxvYiA9IGJ1aWxkU2FmZU1wY0tleUVudmVsb3BlcyhcbiAgICAgICAgQnVmZmVyLmZyb20oJ3NpZ25pbmctMScpLFxuICAgICAgICBCdWZmZXIuZnJvbSgncmVkdWNlZC0xJyksXG4gICAgICAgIEJ1ZmZlci5mcm9tKCd2cmYtMScpXG4gICAgICApLmVudmVsb3BlLnRvU3RyaW5nKCdiYXNlNjQnKTtcbiAgICAgIGtleWNoYWluc0dldC5vbkZpcnN0Q2FsbCgpLnJlc29sdmVzKHsgaWQ6ICdlY2RzYS11c2VyJywgc291cmNlOiAndXNlcicsIGVuY3J5cHRlZFBydjogYGVuYzoke3VzZXJCbG9ifWAgfSk7XG4gICAgICBtb2NrQml0R28uZGVjcnlwdCA9IHNpbm9uXG4gICAgICAgIC5zdHViKClcbiAgICAgICAgLmNhbGxzRmFrZSgoeyBpbnB1dCB9OiB7IGlucHV0OiBzdHJpbmcgfSkgPT4gUHJvbWlzZS5yZXNvbHZlKGlucHV0LnN0YXJ0c1dpdGgoJ2VuYzonKSA/IGlucHV0LnNsaWNlKDQpIDogJycpKTtcblxuICAgICAgZGVyaXZhdGlvblF1ZXJ5LnJldHVybnMoe1xuICAgICAgICByZXN1bHQ6IHNpbm9uLnN0dWIoKS5yZXNvbHZlcyh7IHNsb3Q6ICdlY2RzYU1wYycsIGluZGV4OiAwIH0pLFxuICAgICAgfSk7XG5cbiAgICAgIGNvbnN0IGNlcmVtb255U3R1YiA9IHNpbm9uLnN0dWIoRUNEU0FVdGlscy5FY2RzYVZyZk1QQ3YyVXRpbHMucHJvdG90eXBlLCAnY3JlYXRlU2FmZUNoaWxkS2V5Y2hhaW5zJykucmVzb2x2ZXMoe1xuICAgICAgICB1c2VyS2V5Y2hhaW46IHsgaWQ6ICdlY2RzYS1jaGlsZC11c2VyJyB9LFxuICAgICAgICBiYWNrdXBLZXljaGFpbjogeyBpZDogJ2VjZHNhLWNoaWxkLWJhY2t1cC1wbGFjZWhvbGRlcicgfSxcbiAgICAgICAgYml0Z29LZXljaGFpbjogeyBpZDogJ2VjZHNhLWNoaWxkLWJpdGdvLXBsYWNlaG9sZGVyJyB9LFxuICAgICAgfSBhcyBuZXZlcik7XG5cbiAgICAgIGNvbnN0IHdhbGxldCA9IGF3YWl0IHNhZmUuY3JlYXRlV2FsbGV0KHsgY29pbjogJ2h0ZXRoJywgbGFiZWw6ICdldm0nLCBwYXNzcGhyYXNlOiAncHcnLCBtdWx0aXNpZ1R5cGU6ICd0c3MnIH0pO1xuXG4gICAgICBkZXJpdmF0aW9uUXVlcnkuY2FsbGVkT25jZVdpdGhFeGFjdGx5KHsgc2xvdDogJ2VjZHNhTXBjJyB9KS5zaG91bGQuYmUudHJ1ZSgpO1xuICAgICAga2V5Y2hhaW5zR2V0LmNhbGxlZE9uY2VXaXRoRXhhY3RseSh7IGlkOiAnZWNkc2EtdXNlcicgfSkuc2hvdWxkLmJlLnRydWUoKTtcbiAgICAgIGNvbnN0IGNlcmVtb255QXJncyA9IGNlcmVtb255U3R1Yi5maXJzdENhbGwuYXJnc1swXTtcbiAgICAgIGNlcmVtb255QXJncy5zaG91bGQuY29udGFpbkVxbCh7XG4gICAgICAgIHNhZmVJZDogJ3Rlc3Qtc2FmZS1pZCcsXG4gICAgICAgIGVudGVycHJpc2U6ICd0ZXN0LWVudGVycHJpc2UtaWQnLFxuICAgICAgICBwYXJlbnRLZXlJZDogJ2VjZHNhLWJpdGdvJyxcbiAgICAgICAgZGVyaXZhdGlvbkluZGV4OiAwLFxuICAgICAgICB1c2VyUm9vdEtleUlkOiAnZWNkc2EtdXNlcicsXG4gICAgICAgIGJhY2t1cFJvb3RLZXlJZDogJ2VjZHNhLWJhY2t1cCcsXG4gICAgICB9KTtcbiAgICAgIGNlcmVtb255QXJncy5zaG91bGQubm90LmhhdmUucHJvcGVydHkoJ2JhY2t1cFJvb3RLZXlTaGFyZScpO1xuICAgICAgY2VyZW1vbnlBcmdzLnNob3VsZC5ub3QuaGF2ZS5wcm9wZXJ0eSgnYmFja3VwUm9vdFZyZktleVNoYXJlJyk7XG4gICAgICBjZXJlbW9ueUFyZ3MudXNlclJvb3RLZXlTaGFyZS5zaG91bGQuZGVlcEVxdWFsKEJ1ZmZlci5mcm9tKCdzaWduaW5nLTEnKSk7XG4gICAgICBjZXJlbW9ueUFyZ3MudXNlclJvb3RWcmZLZXlTaGFyZS5zaG91bGQuZGVlcEVxdWFsKEJ1ZmZlci5mcm9tKCd2cmYtMScpKTtcblxuICAgICAgbWludFNlbmQuZmlyc3RDYWxsLmFyZ3NbMF0uc2hvdWxkLmVxbCh7XG4gICAgICAgIGNvaW46ICdodGV0aCcsXG4gICAgICAgIGxhYmVsOiAnZXZtJyxcbiAgICAgICAgdHlwZTogJ2hvdCcsXG4gICAgICAgIG11bHRpc2lnVHlwZTogJ3RzcycsXG4gICAgICAgIGtleXM6IFsnZWNkc2EtY2hpbGQtdXNlcicsICdlY2RzYS1jaGlsZC1iYWNrdXAtcGxhY2Vob2xkZXInLCAnZWNkc2EtY2hpbGQtYml0Z28tcGxhY2Vob2xkZXInXSxcbiAgICAgIH0pO1xuICAgICAgd2FsbGV0LmlkKCkuc2hvdWxkLmVxdWFsKCd3YWxsZXQtaWQnKTtcbiAgICB9KTtcblxuICAgIGl0KCdyZWplY3RzIGEgcGVla2VkIGRlcml2YXRpb24gaW5kZXggZm9yIHRoZSB3cm9uZyBzbG90JywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgZGVyaXZhdGlvblF1ZXJ5LnJldHVybnMoe1xuICAgICAgICByZXN1bHQ6IHNpbm9uLnN0dWIoKS5yZXNvbHZlcyh7IHNsb3Q6ICdlY2RzYU1wYycsIGluZGV4OiAwIH0pLFxuICAgICAgfSk7XG4gICAgICBhd2FpdCBzYWZlXG4gICAgICAgIC5jcmVhdGVXYWxsZXQoeyBjb2luOiAndGJ0YycsIGxhYmVsOiAnZGVzayAxJywgcGFzc3BocmFzZTogJ3B3JyB9KVxuICAgICAgICAuc2hvdWxkLmJlLnJlamVjdGVkV2l0aCgvcmV0dXJuZWQgc2xvdCAnZWNkc2FNcGMnLyk7XG4gICAgfSk7XG5cbiAgICBpdCgnbWludHMgYW4gZWQyNTUxOSB3YWxsZXQgZnJvbSB0aGUgU3RyS2V5IHNlZWQgdXNlciByb290JywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgc3R1YkNvaW4oJ3R4bG0nKTtcbiAgICAgIGtleWNoYWluc0dldC5yZXNvbHZlcyh7XG4gICAgICAgIGlkOiAndXNlci1yb290LWlkJyxcbiAgICAgICAgc291cmNlOiAndXNlcicsXG4gICAgICAgIGVuY3J5cHRlZFBydjogYGVuYzoke1JPT1RfRUQyNTUxOV9TRUVEX1NUUktFWX1gLFxuICAgICAgICBwdWI6ICdHQUIyQ0I1NzZQSEJCUFE1T0RPUlJaMkxZQ01XUFpHV0dDTjJLREs3RFhPSU1aQVNLVVkzUVo2UScsXG4gICAgICAgIHR5cGU6ICdpbmRlcGVuZGVudCcsXG4gICAgICB9KTtcbiAgICAgIGtleWNoYWluc0FkZC5yZXNvbHZlcyh7IGlkOiAnY2hpbGQta2V5LWlkJywgcHViOiBlZDI1NTE5Q2hpbGRBdDAucHViLCB0eXBlOiAnaW5kZXBlbmRlbnQnIH0pO1xuICAgICAgZGVyaXZhdGlvblF1ZXJ5LnJldHVybnMoe1xuICAgICAgICByZXN1bHQ6IHNpbm9uLnN0dWIoKS5yZXNvbHZlcyh7IHNsb3Q6ICdlZDI1NTE5TXVsdGlzaWcnLCBpbmRleDogMCB9KSxcbiAgICAgIH0pO1xuXG4gICAgICBhd2FpdCBzYWZlLmNyZWF0ZVdhbGxldCh7IGNvaW46ICd0eGxtJywgbGFiZWw6ICd4bG0gZGVzaycsIHBhc3NwaHJhc2U6ICdwdycgfSk7XG5cbiAgICAgIGRlcml2YXRpb25RdWVyeS5jYWxsZWRPbmNlV2l0aEV4YWN0bHkoeyBzbG90OiAnZWQyNTUxOU11bHRpc2lnJyB9KS5zaG91bGQuYmUudHJ1ZSgpO1xuICAgICAga2V5Y2hhaW5zR2V0LmNhbGxlZE9uY2VXaXRoRXhhY3RseSh7IGlkOiAnZWQtdXNlcicgfSkuc2hvdWxkLmJlLnRydWUoKTtcbiAgICAgIGNvbnN0IGFkZEFyZ3MgPSBrZXljaGFpbnNBZGQuZmlyc3RDYWxsLmFyZ3NbMF07XG4gICAgICBhZGRBcmdzLnNob3VsZC5lcWwoe1xuICAgICAgICBwdWI6IGVkMjU1MTlDaGlsZEF0MC5wdWIsXG4gICAgICAgIHNvdXJjZTogJ3VzZXInLFxuICAgICAgICBrZXlUeXBlOiAnaW5kZXBlbmRlbnQnLFxuICAgICAgICBwYXJlbnQ6ICdlZC11c2VyJyxcbiAgICAgICAgc2FmZUlkOiAndGVzdC1zYWZlLWlkJyxcbiAgICAgICAgZGVyaXZlZEZyb21QYXJlbnRXaXRoUGF0aDogXCJtLzAnXCIsXG4gICAgICB9KTtcbiAgICAgIGFkZEFyZ3Muc2hvdWxkLm5vdC5oYXZlLnByb3BlcnR5KCdlbmNyeXB0ZWRQcnYnKTtcbiAgICAgIG1pbnRTZW5kLmZpcnN0Q2FsbC5hcmdzWzBdLnNob3VsZC5lcWwoe1xuICAgICAgICBjb2luOiAndHhsbScsXG4gICAgICAgIGxhYmVsOiAneGxtIGRlc2snLFxuICAgICAgICB0eXBlOiAnaG90JyxcbiAgICAgICAgbXVsdGlzaWdUeXBlOiAnb25jaGFpbicsXG4gICAgICAgIGtleXM6IFsnY2hpbGQta2V5LWlkJ10sXG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIGZvciAoY29uc3QgY2hhaW4gb2YgWyd0YWxnbycsICd0aGJhciddKSB7XG4gICAgICBpdChgbWludHMgYW4gZWQyNTUxOSAke2NoYWlufSB3YWxsZXQgcG9zdGluZyB0aGUgdXNlciBjaGlsZCBhcyBhIFN0cktleSAoc2VydmVyIGNvbnZlcnRzKWAsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgLy8gVGhlIHVzZXIgY2hpbGQgaXMgaGFyZGVuZWQtZGVyaXZlZCBmcm9tIHRoZSB0eGxtIFN0cktleSB1c2VyIHJvb3QsIHNvIHRoZSBTREsgcG9zdHMgYVxuICAgICAgICAvLyBTdGVsbGFyIFN0cktleSBmb3IgRVZFUlkgZWQyNTUxOSB3YWxsZXQgY29pbi4gV2FsbGV0IFBsYXRmb3JtIGNvbnZlcnRzIHRoZSBwdWIgdG8gdGhlXG4gICAgICAgIC8vIHdhbGxldCBjb2luJ3MgcmVwcmVzZW50YXRpb24gYXQgcmVnaXN0cmF0aW9uOyB0aGUgU0RLIG5ldmVyIGNvaW4tZW5jb2RlcyBjaGlsZHJlbi5cbiAgICAgICAgc3R1YkNvaW4oY2hhaW4pO1xuICAgICAgICBrZXljaGFpbnNHZXQucmVzb2x2ZXMoe1xuICAgICAgICAgIGlkOiAndXNlci1yb290LWlkJyxcbiAgICAgICAgICBzb3VyY2U6ICd1c2VyJyxcbiAgICAgICAgICBlbmNyeXB0ZWRQcnY6IGBlbmM6JHtST09UX0VEMjU1MTlfU0VFRF9TVFJLRVl9YCxcbiAgICAgICAgICBwdWI6ICdHQUIyQ0I1NzZQSEJCUFE1T0RPUlJaMkxZQ01XUFpHV0dDTjJLREs3RFhPSU1aQVNLVVkzUVo2UScsXG4gICAgICAgICAgdHlwZTogJ2luZGVwZW5kZW50JyxcbiAgICAgICAgfSk7XG4gICAgICAgIGtleWNoYWluc0FkZC5yZXNvbHZlcyh7IGlkOiAnY2hpbGQta2V5LWlkJywgcHViOiBgY29udmVydGVkLSR7Y2hhaW59LXB1YmAsIHR5cGU6ICdpbmRlcGVuZGVudCcgfSk7XG4gICAgICAgIGRlcml2YXRpb25RdWVyeS5yZXR1cm5zKHtcbiAgICAgICAgICByZXN1bHQ6IHNpbm9uLnN0dWIoKS5yZXNvbHZlcyh7IHNsb3Q6ICdlZDI1NTE5TXVsdGlzaWcnLCBpbmRleDogMCB9KSxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgYXdhaXQgc2FmZS5jcmVhdGVXYWxsZXQoeyBjb2luOiBjaGFpbiwgbGFiZWw6IGAke2NoYWlufSBkZXNrYCwgcGFzc3BocmFzZTogJ3B3JyB9KTtcblxuICAgICAgICBjb25zdCBhZGRBcmdzID0ga2V5Y2hhaW5zQWRkLmZpcnN0Q2FsbC5hcmdzWzBdO1xuICAgICAgICBhZGRBcmdzLnNob3VsZC5lcWwoe1xuICAgICAgICAgIHB1YjogZWQyNTUxOUNoaWxkQXQwLnB1YixcbiAgICAgICAgICBzb3VyY2U6ICd1c2VyJyxcbiAgICAgICAgICBrZXlUeXBlOiAnaW5kZXBlbmRlbnQnLFxuICAgICAgICAgIHBhcmVudDogJ2VkLXVzZXInLFxuICAgICAgICAgIHNhZmVJZDogJ3Rlc3Qtc2FmZS1pZCcsXG4gICAgICAgICAgZGVyaXZlZEZyb21QYXJlbnRXaXRoUGF0aDogXCJtLzAnXCIsXG4gICAgICAgIH0pO1xuICAgICAgICBtaW50U2VuZC5maXJzdENhbGwuYXJnc1swXS5zaG91bGQuZXFsKHtcbiAgICAgICAgICBjb2luOiBjaGFpbixcbiAgICAgICAgICBsYWJlbDogYCR7Y2hhaW59IGRlc2tgLFxuICAgICAgICAgIHR5cGU6ICdob3QnLFxuICAgICAgICAgIG11bHRpc2lnVHlwZTogJ29uY2hhaW4nLFxuICAgICAgICAgIGtleXM6IFsnY2hpbGQta2V5LWlkJ10sXG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgaXQoJ3JlamVjdHMgYW4gZW1wdHkgcGFzc3BocmFzZScsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGF3YWl0IHNhZmVcbiAgICAgICAgLmNyZWF0ZVdhbGxldCh7IGNvaW46ICd0YnRjJywgbGFiZWw6ICd3JywgcGFzc3BocmFzZTogJycgfSlcbiAgICAgICAgLnNob3VsZC5iZS5yZWplY3RlZFdpdGgoL3Bhc3NwaHJhc2UgaXMgcmVxdWlyZWQvKTtcbiAgICB9KTtcblxuICAgIGl0KCdyZWplY3RzIGEgd3JvbmcgcGFzc3BocmFzZScsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGF3YWl0IHNhZmVcbiAgICAgICAgLmNyZWF0ZVdhbGxldCh7IGNvaW46ICd0YnRjJywgbGFiZWw6ICd3JywgcGFzc3BocmFzZTogJ25vcGUnIH0pXG4gICAgICAgIC5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKEluY29ycmVjdFBhc3N3b3JkRXJyb3IpO1xuICAgIH0pO1xuICB9KTtcbn0pO1xuIl19