@bitgo-beta/sdk-coin-trx 1.0.2-beta.2291 → 1.0.2-beta.2292

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.
@@ -136,6 +136,23 @@ const resources_1 = require("../resources");
136
136
  node_assert_1.default.equal(basecoin.canonicalAddress(hex0x), base58);
137
137
  node_assert_1.default.equal(basecoin.canonicalAddress('not-an-address'), 'not-an-address');
138
138
  });
139
+ (0, node_test_1.it)('should reject hex forms in strict Base58 mode', function () {
140
+ const base58 = 'TGai5uHgBcoLERrzDXMepqZB8Et7D8nV8K';
141
+ const hex41 = '414887974f42a789ef6d4dfc7ba28b1583219434b3';
142
+ const hex0x = '0x4887974f42a789ef6d4dfc7ba28b1583219434b3';
143
+ // default behavior unchanged: all three forms accepted
144
+ node_assert_1.default.equal(basecoin.isValidAddress(base58), true);
145
+ node_assert_1.default.equal(basecoin.isValidAddress(hex41), true);
146
+ node_assert_1.default.equal(basecoin.isValidAddress(hex0x), true);
147
+ // strictBase58: only canonical Base58 accepted
148
+ node_assert_1.default.equal(basecoin.isValidAddress(base58, { strictBase58: true }), true);
149
+ node_assert_1.default.equal(basecoin.isValidAddress(hex41, { strictBase58: true }), false);
150
+ node_assert_1.default.equal(basecoin.isValidAddress(hex0x, { strictBase58: true }), false);
151
+ node_assert_1.default.equal(basecoin.isValidAddress('', { strictBase58: true }), false);
152
+ node_assert_1.default.equal(basecoin.isValidAddress('TBChwKYNaTo4a4N68Me1qEiiKsRDspXqLLZ', { strictBase58: true }), false);
153
+ // explicit false keeps lenient behavior
154
+ node_assert_1.default.equal(basecoin.isValidAddress(hex0x, { strictBase58: false }), true);
155
+ });
139
156
  (0, node_test_1.it)('should throw if the params object is missing parameters', async function () {
140
157
  const explainParams = {
141
158
  feeInfo: { fee: 1 },
@@ -806,4 +823,4 @@ const resources_1 = require("../resources");
806
823
  });
807
824
  });
808
825
  });
809
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJ4LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vdGVzdC91bml0L3RyeC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLDhEQUFpQztBQUNqQyx5Q0FBa0U7QUFDbEUsaURBQStDO0FBQy9DLG1EQUErRDtBQUMvRCwwQ0FBNEI7QUFDNUIsbUNBQTZDO0FBQzdDLDBDQUFvRDtBQUNwRCw0Q0FPc0I7QUFFdEIsSUFBQSxvQkFBUSxFQUFDLE9BQU8sRUFBRTtJQUNoQixNQUFNLEtBQUssR0FBaUIsb0JBQVMsQ0FBQyxRQUFRLENBQUMsa0JBQVEsRUFBRSxFQUFFLEdBQUcsRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFDO0lBQzFFLEtBQUssQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO0lBQzNCLEtBQUssQ0FBQyxZQUFZLENBQUMsS0FBSyxFQUFFLFNBQUcsQ0FBQyxjQUFjLENBQUMsQ0FBQztJQUM5QyxLQUFLLENBQUMsWUFBWSxDQUFDLE1BQU0sRUFBRSxVQUFJLENBQUMsY0FBYyxDQUFDLENBQUM7SUFFaEQsSUFBSSxRQUFRLENBQUM7SUFFYix5REFBeUQ7SUFDekQsTUFBTSxjQUFjLEdBQUc7UUFDckIsV0FBVyxFQUFFLG9DQUFvQztRQUNqRCxjQUFjLEVBQUUsb0NBQW9DO1FBQ3BELG1CQUFtQixFQUFFLENBQUM7UUFDdEIsU0FBUyxFQUFFO1lBQ1Q7Z0JBQ0UsRUFBRSxFQUFFLGtDQUFrQztnQkFDdEMsR0FBRyxFQUFFLGlIQUFpSDthQUN2SDtZQUNEO2dCQUNFLEVBQUUsRUFBRSxrQ0FBa0M7Z0JBQ3RDLEdBQUcsRUFBRSxpSEFBaUg7YUFDdkg7WUFDRDtnQkFDRSxFQUFFLEVBQUUsa0NBQWtDO2dCQUN0QyxHQUFHLEVBQUUsaUhBQWlIO2FBQ3ZIO1NBQ0Y7S0FDRixDQUFDO0lBRUYsSUFBQSxrQkFBTSxFQUFDO1FBQ0wsUUFBUSxHQUFHLEtBQUssQ0FBQyxJ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eURBQXlEO2FBQ25FLENBQ0YsQ0FBQztRQUNKLENBQUMsQ0FBQyxDQUFDO1FBRUgsSUFBQSxjQUFFLEVBQUMsbUVBQW1FLEVBQUUsS0FBSztZQUMzRSxNQUFNLHFCQUFNLENBQUMsT0FBTyxDQUNsQixRQUFRLENBQUMsZUFBZSxDQUFDO2dCQUN2QixPQUFPLEVBQUUsY0FBYyxDQUFDLGNBQWM7Z0JBQ3RDLFNBQVMsRUFBRSxFQUFFLEVBQUUsVUFBVTtnQkFDekIsS0FBSyxFQUFFLGNBQWMsQ0FBQyxtQkFBbUI7YUFDMUMsQ0FBQyxFQUNGO2dCQUNFLE9BQU8sRUFBRSwyREFBMkQ7YUFDckUsQ0FDRixDQUFDO1FBQ0osQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGFzc2VydCBmcm9tICdub2RlOmFzc2VydCc7XG5pbXBvcnQgeyBhZnRlckVhY2gsIGJlZm9yZSwgZGVzY3JpYmUsIGl0LCBtb2NrIH0gZnJvbSAnbm9kZTp0ZXN0JztcbmltcG9ydCB7IEJpdEdvQVBJIH0gZnJvbSAnQGJpdGdvLWJldGEvc2RrLWFwaSc7XG5pbXBvcnQgeyBUZXN0Qml0R29BUEksIFRlc3RCaXRHbyB9IGZyb20gJ0BiaXRnby1iZXRhL3Nkay10ZXN0JztcbmltcG9ydCAqIGFzIF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCB7IFRyeCwgVHRyeCwgVXRpbHMgfSBmcm9tICcuLi8uLi9zcmMnO1xuaW1wb3J0IHsgc2lnblR4T3B0aW9ucywgbW9ja1R4IH0gZnJvbSAnLi4vZml4dHVyZXMnO1xuaW1wb3J0IHtcbiAgYmFzZUFkZHJlc3NCYWxhbmNlLFxuICBTYW1wbGVSYXdUb2tlblNlbmRUeG4sXG4gIHJlY2VpdmVBZGRyZXNzQmFsYW5jZSxcbiAgVGVzdFJlY292ZXJEYXRhLFxuICBUc3NUZXN0UmVjb3ZlckRhdGEsXG4gIGNyZWF0aW9uVHJhbnNhY3Rpb24sXG59IGZyb20gJy4uL3Jlc291cmNlcyc7XG5cbmRlc2NyaWJlKCdUUk9OOicsIGZ1bmN0aW9uICgpIHtcbiAgY29uc3QgYml0Z286IFRlc3RCaXRHb0FQSSA9IFRlc3RCaXRHby5kZWNvcmF0ZShCaXRHb0FQSSwgeyBlbnY6ICd0ZXN0JyB9KTtcbiAgYml0Z28uaW5pdGlhbGl6ZVRlc3RWYXJzKCk7XG4gIGJpdGdvLnNhZmVSZWdpc3RlcigndHJ4JywgVHJ4LmNyZWF0ZUluc3RhbmNlKTtcbiAgYml0Z28uc2FmZVJlZ2lzdGVyKCd0dHJ4JywgVHRyeC5jcmVhdGVJbnN0YW5jZSk7XG5cbiAgbGV0IGJhc2Vjb2luO1xuXG4gIC8vIFRlc3QgZGF0YSBmcm9tIHdhbGxldCA2OTNiMDExYTNlYzI2OTg2ZjU2OWIwMjE0MGM3NjI3ZVxuICBjb25zdCB0ZXN0V2FsbGV0RGF0YSA9IHtcbiAgICByb290QWRkcmVzczogJ1RBZjM2YjM2ZXFvTUN6SkptM2p3U3NQODFVdmtNeHJQYmknLFxuICAgIHJlY2VpdmVBZGRyZXNzOiAnVEZhRDZEZUtGTWNCdUd1REQ3TGJicXhUbkt1bmhYZmR5YScsXG4gICAgcmVjZWl2ZUFkZHJlc3NJbmRleDogMixcbiAgICBrZXljaGFpbnM6IFtcbiAgICAgIHtcbiAgICAgICAgaWQ6ICc2OTNiMDExMDI3MWZjM2Y1NzQ5NzU0MDk3NzkzYmI4ZCcsXG4gICAgICAgIHB1YjogJ3hwdWI2NjFNeU13QXFSYmNGc1ZBZFp5TjJtOHAyMVdIWGc4TlJOa3FLQXB5UzVnd21Gc1BkUlRybUhZQ256Ujl2WWU4RFE0dVdHQ0JjQUFzV0Uzcjk3SHNGUzNLMmZhWjJlalhOaEh4ZEVvQUVXQycsXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBpZDogJzY5M2IwMTEwNjViOWM0Njc0ODI1Y2UxZjg0OWI3YmVmJyxcbiAgICAgICAgcHViOiAneHB1YjY2MU15TXdBcVJiY0VyS3Bacjl6dFRGSms2ZnpYV2F0TUZnUm5wWGZzanliV0JmRTk4NDdFVkdySEhCc0dQOGZjbnpKbUp1ZXZBYlBVRXBqSFRqRUVXZllVV05NRURhaHZzc1FlaW44NDhvJyxcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGlkOiAnNjkzYjAxMTE3YzQxODQ2YWJiMDQ4MTg4MTViODliNmMnLFxuICAgICAgICBwdWI6ICd4cHViNjYxTXlNd0FxUmJjRnFaZDdYVTlERlc0ZjI5Vkp6UXQ3VUNBNTF5cGFXYTV5bWhRMnBSWkRUZ1ZpdzN2WjU2UHFaOGRqMWNyYWNOM2ZBV2hhaUcxUUtqOW12eXQ5Q2JhNG5NMnRQaWJOS3cnLFxuICAgICAgfSxcbiAgICBdLFxuICB9O1xuXG4gIGJlZm9yZShmdW5jdGlvbiAoKSB7XG4gICAgYmFzZWNvaW4gPSBiaXRnby5jb2luKCd0dHJ4Jyk7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgaW5zdGFudGlhdGUgdGhlIGNvaW4nLCBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3QgYmFzZWNvaW4gPSBiaXRnby5jb2luKCd0cngnKTtcbiAgICBhc3NlcnQub2soYmFzZWNvaW4gaW5zdGFuY2VvZiBUcngpO1xuICB9KTtcblxuICBpdCgnZXhwbGFpbiBhIHR4SGV4JywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IHR4SGV4ID0gSlNPTi5zdHJpbmdpZnkobW9ja1R4KTtcbiAgICBjb25zdCBleHBsYWluUGFyYW1zID0ge1xuICAgICAgdHhIZXgsXG4gICAgICBmZWVJbmZvOiB7IGZlZTogMSB9LFxuICAgICAgdHhJRDogbW9ja1R4LnR4SUQsXG4gICAgfTtcbiAgICBjb25zdCBleHBsYW5hdGlvbiA9IGF3YWl0IGJhc2Vjb2luLmV4cGxhaW5UcmFuc2FjdGlvbihleHBsYWluUGFyYW1zKTtcbiAgICBjb25zdCB0b0FkZHJlc3MgPSBVdGlscy5nZXRCYXNlNThBZGRyZXNzRnJvbUhleChtb2NrVHgucmF3X2RhdGEuY29udHJhY3RbMF0ucGFyYW1ldGVyLnZhbHVlLnRvX2FkZHJlc3MpO1xuICAgIGFzc2VydC5lcXVhbChleHBsYW5hdGlvbi5pZCwgbW9ja1R4LnR4SUQpO1xuICAgIGFzc2VydC5lcXVhbChleHBsYW5hdGlvbi5vdXRwdXRzLmxlbmd0aCwgMSk7XG4gICAgYXNzZXJ0LmVxdWFsKGV4cGxhbmF0aW9uLm91dHB1dHNbMF0uYW1vdW50LCAnMTAnKTtcbiAgICBhc3NlcnQuZXF1YWwoZXhwbGFuYXRpb24ub3V0cHV0c1swXS5hZGRyZXNzLCB0b0FkZHJlc3MpO1xuICAgIGFzc2VydC5lcXVhbChleHBsYW5hdGlvbi5vdXRwdXRBbW91bnQsICcxMCcpO1xuICAgIGFzc2VydC5lcXVhbChleHBsYW5hdGlvbi5jaGFuZ2VBbW91bnQsICcwJyk7XG4gICAgYXNzZXJ0LmVxdWFsKGV4cGxhbmF0aW9uLmNoYW5nZU91dHB1dHMubGVuZ3RoLCAwKTtcbiAgICBhc3NlcnQuZXF1YWwoZXhwbGFuYXRpb24uZmVlLmZlZSwgMSk7XG4gICAgYXNzZXJ0LmVxdWFsKGV4cGxhbmF0aW9uLmV4cGlyYXRpb24sIG1vY2tUeC5yYXdfZGF0YS5leHBpcmF0aW9uKTtcbiAgICBhc3NlcnQuZXF1YWwoZXhwbGFuYXRpb24udGltZXN0YW1wLCBtb2NrVHgucmF3X2RhdGEudGltZXN0YW1wKTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCBjaGVjayB2YWxpZCBhZGRyZXNzZXMnLCBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3QgYmFkQWRkcmVzc2VzID0gW1xuICAgICAgJycsXG4gICAgICBudWxsLFxuICAgICAgJ3h4eHgnLFxuICAgICAgJ1laMDlmZC0nLFxuICAgICAgJzQxMkMyQkE0QTlGRjZDNTMyMDdEQzVCNjg2QkZFQ0Y3NUVBN0I4MDU3NzInLCAvLyA0MyBoZXggY2hhcnMg4oCUIHRvbyBsb25nXG4gICAgICAnNDEyQzJCQTRBOUZGNkM1MzIwN0RDNUI2ODZCRkVDRjc1RUE3QjgwJywgLy8gdG9vIHNob3J0XG4gICAgICAnVEJDaHdLWU5hVG80YTRONjhNZTFxRWlpS3NSRHNwWHFMTFonLCAvLyBpbnZhbGlkIGJhc2U1OCBjaGVja3N1bVxuICAgICAgJzB4MzQxcWczOTIyYjEnLCAvLyBub24taGV4XG4gICAgICAnOTZiZTExMzk5MmJkYzNiZTI0YzExZjYwMTcwODViNjA1ZDI1MzY0OScsIC8vIGJhcmUgMjAtYnl0ZSDigJQgbm90IGFuIG9uLWNoYWluIGFkZHJlc3MgZm9ybVxuICAgIF07XG4gICAgLy8gYmFzZTU4IGFuZCBoZXggKDB4IC8gNDEpIGFyZSBhbHRlcm5hdGl2ZSBlbmNvZGluZ3Mgb2YgdGhlIHNhbWUgYWRkcmVzcyAoQ09JTlMtMTU3NSlcbiAgICBjb25zdCBnb29kQWRkcmVzc2VzID0gW1xuICAgICAgJ1RCQ2h3S1lOYVRvNGE0TjY4TWUxcUVpaUtzUkRzcFhxTHAnLFxuICAgICAgJ1RQY2Y1anRZVWhDTjFYMTR0TjU3N3pGNE5lcGJEWmJ4VDcnLFxuICAgICAgJzB4OTZiZTExMzk5MmJkYzNiZTI0YzExZjYwMTcwODViNjA1ZDI1MzY0OScsXG4gICAgICAnNDFFMEMwRjU4MUQ3RDAyRDQwODI2QzFDNkNCRUU3MUY2MjVENjM0NEQwJyxcbiAgICAgICc0MTJDMkJBNEE5RkY2QzUzMjA3REM1QjY4NkJGRUNGNzVFQTdCODA1NzcnLFxuICAgICAgJzQxODg0MEU2QzU1QjlBREEzMjZEMjExRDgxOEMzNEE5OTRBRUNFRDgwOCcsXG4gICAgICAnNDEyQTJCOUY3NjQxRDA3NTBDMUU4MjJEMEU0OUVGNzY1QzgxMDY1MjRCJyxcbiAgICAgICc0MUE2MTRGODAzQjZGRDc4MDk4NkE0MkM3OEVDOUM3Rjc3RTZERUQxM0MnLFxuICAgIF07XG5cbiAgICBiYWRBZGRyZXNzZXMubWFwKChhZGRyKSA9PiB7XG4gICAgICBhc3NlcnQuZXF1YWwoYmFzZWNvaW4uaXNWYWxpZEFkZHJlc3MoYWRkciBhcyBzdHJpbmcpLCBmYWxzZSk7XG4gICAgfSk7XG4gICAgZ29vZEFkZHJlc3Nlcy5tYXAoKGFkZHIpID0+IHtcbiAgICAgIGFzc2VydC5lcXVhbChiYXNlY29pbi5pc1ZhbGlkQWRkcmVzcyhhZGRyKSwgdHJ1ZSk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgY2Fub25pY2FsaXplIGhleCBhZGRyZXNzZXMgdG8gYmFzZTU4IChDT0lOUy0xNTc1KScsIGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCBiYXNlNTggPSAnVEdhaTV1SGdCY29MRVJyekRYTWVwcVpCOEV0N0Q4blY4Syc7XG4gICAgY29uc3QgaGV4NDEgPSAnNDE0ODg3OTc0ZjQyYTc4OWVmNmQ0ZGZjN2JhMjhiMTU4MzIxOTQzNGIzJztcbiAgICBjb25zdCBoZXgweCA9ICcweDQ4ODc5NzRmNDJhNzg5ZWY2ZDRkZmM3YmEyOGIxNTgzMjE5NDM0YjMnO1xuXG4gICAgYXNzZXJ0LmVxdWFsKGJhc2Vjb2luLmNhbm9uaWNhbEFkZHJlc3MoYmFzZTU4KSwgYmFzZTU4KTtcbiAgICBhc3NlcnQuZXF1YWwoYmFzZWNvaW4uY2Fub25pY2FsQWRkcmVzcyhoZXg0MSksIGJhc2U1OCk7XG4gICAgYXNzZXJ0LmVxdWFsKGJhc2Vjb2luLmNhbm9uaWNhbEFkZHJlc3MoaGV4MHgpLCBiYXNlNTgpO1xuICAgIGFzc2VydC5lcXVhbChiYXNlY29pbi5jYW5vbmljYWxBZGRyZXNzKCdub3QtYW4tYWRkcmVzcycpLCAnbm90LWFuLWFkZHJlc3MnKTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCB0aHJvdyBpZiB0aGUgcGFyYW1zIG9iamVjdCBpcyBtaXNzaW5nIHBhcmFtZXRlcnMnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3QgZXhwbGFpblBhcmFtcyA9IHtcbiAgICAgIGZlZUluZm86IHsgZmVlOiAxIH0sXG4gICAgICB0eElEOiBtb2NrVHgudHhJRCxcbiAgICAgIHR4SGV4OiBudWxsLFxuICAgIH07XG4gICAgYXdhaXQgYXNzZXJ0LnJlamVjdHMoYmFzZWNvaW4uZXhwbGFpblRyYW5zYWN0aW9uKGV4cGxhaW5QYXJhbXMpLCB7XG4gICAgICBtZXNzYWdlOiAnbWlzc2luZyBleHBsYWluIHR4IHBhcmFtZXRlcnMnLFxuICAgIH0pO1xuICB9KTtcblxuICBpdCgnZXhwbGFpbiBhbiBoYWxmLXNpZ25lZC9mdWxseSBzaWduZWQgdHJhbnNhY3Rpb24nLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3QgdHhIZXggPSBKU09OLnN0cmluZ2lmeShtb2NrVHgpO1xuICAgIGNvbnN0IGV4cGxhaW5QYXJhbXMgPSB7XG4gICAgICBoYWxmU2lnbmVkOiB7IHR4SGV4IH0sXG4gICAgICBmZWVJbmZvOiB7IGZlZTogMSB9LFxuICAgICAgdHhJRDogbW9ja1R4LnR4SUQsXG4gICAgfTtcbiAgICBjb25zdCBleHBsYW5hdGlvbiA9IGF3YWl0IGJhc2Vjb2luLmV4cGxhaW5UcmFuc2FjdGlvbihleHBsYWluUGFyYW1zKTtcbiAgICBjb25zdCB0b0FkZHJlc3MgPSBVdGlscy5nZXRCYXNlNThBZGRyZXNzRnJvbUhleChtb2NrVHgucmF3X2RhdGEuY29udHJhY3RbMF0ucGFyYW1ldGVyLnZhbHVlLnRvX2FkZHJlc3MpO1xuICAgIGFzc2VydC5lcXVhbChleHBsYW5hdGlvbi5pZCwgbW9ja1R4LnR4SUQpO1xuICAgIGFzc2VydC5lcXVhbChleHBsYW5hdGlvbi5vdXRwdXRzLmxlbmd0aCwgMSk7XG4gICAgYXNzZXJ0LmVxdWFsKGV4cGxhbmF0aW9uLm91dHB1dHNbMF0uYW1vdW50LCAnMTAnKTtcbiAgICBhc3NlcnQuZXF1YWwoZXhwbGFuYXRpb24ub3V0cHV0c1swXS5hZGRyZXNzLCB0b0FkZHJlc3MpO1xuICAgIGFzc2VydC5lcXVhbChleHBsYW5hdGlvbi5vdXRwdXRBbW91bnQsICcxMCcpO1xuICAgIGFzc2VydC5lcXVhbChleHBsYW5hdGlvbi5jaGFuZ2VBbW91bnQsICcwJyk7XG4gICAgYXNzZXJ0LmVxdWFsKGV4cGxhbmF0aW9uLmNoYW5nZU91dHB1dHMubGVuZ3RoLCAwKTtcbiAgICBhc3NlcnQuZXF1YWwoZXhwbGFuYXRpb24uZmVlLmZlZSwgMSk7XG4gICAgYXNzZXJ0LmVxdWFsKGV4cGxhbmF0aW9uLmV4cGlyYXRpb24sIG1vY2tUeC5yYXdfZGF0YS5leHBpcmF0aW9uKTtcbiAgICBhc3NlcnQuZXF1YWwoZXhwbGFuYXRpb24udGltZXN0YW1wLCBtb2NrVHgucmF3X2RhdGEudGltZXN0YW1wKTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCBzaWduIGEgaGFsZiBzaWduZWQgdHgnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3QgdHggPSBhd2FpdCBiYXNlY29pbi5zaWduVHJhbnNhY3Rpb24oc2lnblR4T3B0aW9ucyk7XG4gICAgY29uc3QgdW5zaWduZWRUeEpzb24gPSBKU09OLnBhcnNlKHNpZ25UeE9wdGlvbnMudHhQcmVidWlsZC50eEhleCk7XG4gICAgY29uc3Qgc2lnbmVkVHhKc29uID0gSlNPTi5wYXJzZSh0eC5oYWxmU2lnbmVkLnR4SGV4KTtcblxuICAgIGFzc2VydC5lcXVhbChzaWduZWRUeEpzb24udHhJRCwgdW5zaWduZWRUeEpzb24udHhJRCk7XG4gICAgYXNzZXJ0LmVxdWFsKHNpZ25lZFR4SnNvbi5yYXdfZGF0YV9oZXgsIHVuc2lnbmVkVHhKc29uLnJhd19kYXRhX2hleCk7XG4gICAgYXNzZXJ0LmRlZXBTdHJpY3RFcXVhbChKU09OLnN0cmluZ2lmeShzaWduZWRUeEpzb24ucmF3X2RhdGEpLCBKU09OLnN0cmluZ2lmeSh1bnNpZ25lZFR4SnNvbi5yYXdfZGF0YSkpO1xuICAgIGFzc2VydC5lcXVhbChzaWduZWRUeEpzb24uc2lnbmF0dXJlLmxlbmd0aCwgMSk7XG4gICAgYXNzZXJ0LmVxdWFsKFxuICAgICAgc2lnbmVkVHhKc29uLnNpZ25hdHVyZVswXSxcbiAgICAgICcwYTk5NDQzMTY5MjRlYzdmYmE0ODk1ZjFlYTFlN2NjOTVmOWUyYjgyOGFlMjY4YTQ4YThkYmVkZGVmNDBjNmY1ZTEyNzE3MGE5NWFlZDlmM2Y1NDI1YjEzMDU4ZDBjYjZlZjFmNWMyMjEzMTkwZTQ4MmU4NzA0MzY5MWYyMmU2ODAwJ1xuICAgICk7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgc2lnbiB3aXRoIGFuIFhwcnYgYSBoYWxmIHNpZ25lZCB0eCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCBwID0ge1xuICAgICAgcHJ2OiAneHBydjlzMjFaclFIMTQzSzJzZzJDdWtrNVhxTFFkclluTUNEYWgzeTFGRlZ5Nkh6OWJRZnFNU2ZtVWlIUFZIS2hjVXlmdDNOMWVtRTVGdWRKVnhnRm01TjEyTUFnNW83RFRQc0RBVFRrd05ncjczJyxcbiAgICAgIHR4UHJlYnVpbGQ6IHtcbiAgICAgICAgdHhIZXg6IHNpZ25UeE9wdGlvbnMudHhQcmVidWlsZC50eEhleCxcbiAgICAgIH0sXG4gICAgfTtcbiAgICBjb25zdCB0eCA9IGF3YWl0IGJhc2Vjb2luLnNpZ25UcmFuc2FjdGlvbihwKTtcbiAgICBjb25zdCB1bnNpZ25lZFR4SnNvbiA9IEpTT04ucGFyc2Uoc2lnblR4T3B0aW9ucy50eFByZWJ1aWxkLnR4SGV4KTtcbiAgICBjb25zdCBzaWduZWRUeEpzb24gPSBKU09OLnBhcnNlKHR4LmhhbGZTaWduZWQudHhIZXgpO1xuXG4gICAgYXNzZXJ0LmVxdWFsKHNpZ25lZFR4SnNvbi50eElELCB1bnNpZ25lZFR4SnNvbi50eElEKTtcbiAgICBhc3NlcnQuZXF1YWwoc2lnbmVkVHhKc29uLnJhd19kYXRhX2hleCwgdW5zaWduZWRUeEpzb24ucmF3X2RhdGFfaGV4KTtcbiAgICBhc3NlcnQuZGVlcFN0cmljdEVxdWFsKEpTT04uc3RyaW5naWZ5KHNpZ25lZFR4SnNvbi5yYXdfZGF0YSksIEpTT04uc3RyaW5naWZ5KHVuc2lnbmVkVHhKc29uLnJhd19kYXRhKSk7XG4gICAgYXNzZXJ0LmVxdWFsKHNpZ25lZFR4SnNvbi5zaWduYXR1cmUubGVuZ3RoLCAxKTtcbiAgICBhc3NlcnQuZXF1YWwoXG4gICAgICBzaWduZWRUeEpzb24uc2lnbmF0dXJlWzBdLFxuICAgICAgJzY1ZTU2ZjUzYTQ1OGM2ZjgyZDFlZjM5YjJjZjViZTY4NWE5MDZhZDIyYmIwMjY5OWY5MDdmY2I3MmVmMjZmMWU5MWNmYzJiNmE0M2JmNTQzMmZhYTBiNjNiZGM1YWViZjFkYzJmNDlhNjc1ZDI4ZDIzZmQ3ZTAzOGIzMzU4YjA2MDAnXG4gICAgKTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCBhZGQgZmVlTGltaXQgdG8gcmVjaXBpZW50JywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IGZlZUxpbWl0ID0gMTAwO1xuICAgIGNvbnN0IGJ1aWxkUGFyYW1zID0ge1xuICAgICAgcmVjaXBpZW50czogW3sgZGF0YTogJ3Rlc3QnIH1dLFxuICAgICAgZmVlTGltaXQsXG4gICAgfTtcbiAgICBiYXNlY29pbi5nZXRFeHRyYVByZWJ1aWxkUGFyYW1zKGJ1aWxkUGFyYW1zKTtcbiAgICBhc3NlcnQuZXF1YWwoKGJ1aWxkUGFyYW1zIGFzIGFueSkucmVjaXBpZW50c1swXS5mZWVMaW1pdCwgZmVlTGltaXQpO1xuICB9KTtcblxuICBpdCgnc2hvdWxkYHQgYWRkIGFueSBuZXcgZmllbGQnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3QgYnVpbGRQYXJhbXMgPSB7XG4gICAgICByZWNpcGllbnRzOiBbeyBkYXRhOiAndGVzdCcgfV0sXG4gICAgfTtcbiAgICBjb25zdCB1bm1vZGlmaWVkQnVpbGRQYXJhbXMgPSBfLmNsb25lRGVlcChidWlsZFBhcmFtcyk7XG4gICAgYXdhaXQgYmFzZWNvaW4uZ2V0RXh0cmFQcmVidWlsZFBhcmFtcyhidWlsZFBhcmFtcyk7XG4gICAgYXNzZXJ0LmRlZXBTdHJpY3RFcXVhbChidWlsZFBhcmFtcywgdW5tb2RpZmllZEJ1aWxkUGFyYW1zKTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ0tleXBhaXJzOicsICgpID0+IHtcbiAgICBpdCgnc2hvdWxkIGdlbmVyYXRlIGEga2V5cGFpciBmcm9tIHJhbmRvbSBzZWVkJywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3Qga2V5UGFpciA9IGJhc2Vjb2luLmdlbmVyYXRlS2V5UGFpcigpO1xuICAgICAgYXNzZXJ0Lm9rKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChrZXlQYWlyLCAncHViJykpO1xuICAgICAgYXNzZXJ0Lm9rKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChrZXlQYWlyLCAncHJ2JykpO1xuICAgICAgYXNzZXJ0LmVxdWFsKGJhc2Vjb2luLmlzVmFsaWRQdWIoa2V5UGFpci5wdWIpLCB0cnVlKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgZ2VuZXJhdGUgYSBrZXlwYWlyIGZyb20gYSBzZWVkJywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3Qgc2VlZFRleHQgPVxuICAgICAgICAnODAzNTBiNDIwOGQzODFmYmZlMjI3NmEzMjY2MDMwNDlmZTUwMDczMWM0NmQzYzk5MzZiNWNlMDM2YjUxMzc3ZjI0YmFiN2RkMGMyYWY3ZjEwNzQxNmVmODU4ZmY3OWIwNjcwYzcyNDA2ZGFkMDY0ZTcyYmIxN2ZjMGE5MDM4YmInO1xuICAgICAgY29uc3Qgc2VlZCA9IEJ1ZmZlci5mcm9tKHNlZWRUZXh0LCAnaGV4Jyk7XG4gICAgICBjb25zdCBrZXlQYWlyID0gYmFzZWNvaW4uZ2VuZXJhdGVLZXlQYWlyKHNlZWQpO1xuICAgICAgYXNzZXJ0LmVxdWFsKFxuICAgICAgICBrZXlQYWlyLnB1YixcbiAgICAgICAgJ3hwdWI2NjFNeU13QXFSYmNGQXdxdlNHYmszNWtKZjdDUXFkTjF3NENNVUJCVHFINWUzaXZqVTZEOHVndjloUlNnUmJSZW5DNHczYWhYZExWYWh3amdqWGhTdVFLTWROZG41NVk5VE5TYWdCa3R3cydcbiAgICAgICk7XG4gICAgICBhc3NlcnQuZXF1YWwoXG4gICAgICAgIGtleVBhaXIucHJ2LFxuICAgICAgICAneHBydjlzMjFaclFIMTQzSzJnc05wUWpiTnU5MWtkR2kxTnVXZWk4Ylo1bVp1Vms2bUZQbkJ2bXhiN05TSlFkYlpXM0ZHcEszWWNuN2pvckFYY0V6TXZ2aUd0YnlCejV0QnJqZm5XeVFwM2c3NUZLJ1xuICAgICAgKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ0J1aWxkIFVuc2lnbmVkIFN3ZWVwJywgKCkgPT4ge1xuICAgIGFmdGVyRWFjaCgoKSA9PiB7XG4gICAgICBtb2NrLnJlc2V0KCk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHJlY292ZXIgdHJ4IGZyb20gYmFzZSBhZGRyZXNzIHRvIHJlY292ZXJ5IGFkZHJlc3MnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBtb2NrLm1ldGhvZChUcngucHJvdG90eXBlIGFzIGFueSwgJ2dldEFjY291bnRCYWxhbmNlc0Zyb21Ob2RlJywgKC4uLmFyZ3MpID0+IHtcbiAgICAgICAgaWYgKGFyZ3MubGVuZ3RoID4gMCAmJiBhcmdzWzBdID09PSBUZXN0UmVjb3ZlckRhdGEuYmFzZUFkZHJlc3MpIHtcbiAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGJhc2VBZGRyZXNzQmFsYW5jZSgzMDAwMDAwKSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgfSk7XG5cbiAgICAgIGNvbnN0IGJhc2VBZGRySGV4ID0gVXRpbHMuZ2V0SGV4QWRkcmVzc0Zyb21CYXNlNThBZGRyZXNzKFRlc3RSZWNvdmVyRGF0YS5iYXNlQWRkcmVzcyk7XG4gICAgICBjb25zdCBkZXN0aW5hdGlvbkhleCA9IFV0aWxzLmdldEhleEFkZHJlc3NGcm9tQmFzZTU4QWRkcmVzcyhUZXN0UmVjb3ZlckRhdGEucmVjb3ZlcnlEZXN0aW5hdGlvbik7XG5cbiAgICAgIG1vY2subWV0aG9kKFRyeC5wcm90b3R5cGUgYXMgYW55LCAnZ2V0QnVpbGRUcmFuc2FjdGlvbicsICguLi5hcmdzKSA9PiB7XG4gICAgICAgIGlmIChhcmdzLmxlbmd0aCA+IDAgJiYgYXJnc1swXSA9PT0gZGVzdGluYXRpb25IZXggJiYgYXJnc1sxXSA9PT0gYmFzZUFkZHJIZXggJiYgYXJnc1syXSA9PT0gOTAwMDAwKSB7XG4gICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShjcmVhdGlvblRyYW5zYWN0aW9uKGJhc2VBZGRySGV4LCBkZXN0aW5hdGlvbkhleCwgOTAwMDAwKSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgfSk7XG5cbiAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IGJhc2Vjb2luLnJlY292ZXIoe1xuICAgICAgICB1c2VyS2V5OiBUZXN0UmVjb3ZlckRhdGEudXNlcktleSxcbiAgICAgICAgYmFja3VwS2V5OiBUZXN0UmVjb3ZlckRhdGEuYmFja3VwS2V5LFxuICAgICAgICBiaXRnb0tleTogVGVzdFJlY292ZXJEYXRhLmJpdGdvS2V5LFxuICAgICAgICByZWNvdmVyeURlc3RpbmF0aW9uOiBUZXN0UmVjb3ZlckRhdGEucmVjb3ZlcnlEZXN0aW5hdGlvbixcbiAgICAgIH0pO1xuICAgICAgYXNzZXJ0Lm5vdEVxdWFsKHJlcy5sZW5ndGgsIDApO1xuICAgICAgYXNzZXJ0Lm9rKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChyZXMsICd0eEhleCcpKTtcbiAgICAgIGFzc2VydC5vayhPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocmVzLCAnZmVlSW5mbycpKTtcbiAgICAgIGNvbnN0IHJhd0RhdGEgPSBKU09OLnBhcnNlKHJlcy50eEhleCkucmF3X2RhdGE7XG4gICAgICBhc3NlcnQub2soT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHJhd0RhdGEsICdjb250cmFjdCcpKTtcbiAgICAgIGNvbnN0IHZhbHVlID0gcmF3RGF0YS5jb250cmFjdFswXS5wYXJhbWV0ZXIudmFsdWU7XG4gICAgICBhc3NlcnQuZXF1YWwodmFsdWUuYW1vdW50LCA5MDAwMDApO1xuICAgICAgYXNzZXJ0LmVxdWFsKFV0aWxzLmdldEJhc2U1OEFkZHJlc3NGcm9tSGV4KHZhbHVlLm93bmVyX2FkZHJlc3MpLCBUZXN0UmVjb3ZlckRhdGEuYmFzZUFkZHJlc3MpO1xuICAgICAgYXNzZXJ0LmVxdWFsKFV0aWxzLmdldEJhc2U1OEFkZHJlc3NGcm9tSGV4KHZhbHVlLnRvX2FkZHJlc3MpLCBUZXN0UmVjb3ZlckRhdGEucmVjb3ZlcnlEZXN0aW5hdGlvbik7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHJlY292ZXIgdHJ4IGZyb20gYmFzZSBhZGRyZXNzIHRvIHJlY292ZXJ5IGFkZHJlc3Mgd2l0aCBzY2FuIHBhc3NlZCBhcyB2YWxpZCBpbnRlZ2VyIHN0cmluZycsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIG1vY2subWV0aG9kKFRyeC5wcm90b3R5cGUgYXMgYW55LCAnZ2V0QWNjb3VudEJhbGFuY2VzRnJvbU5vZGUnLCAoLi4uYXJncykgPT4ge1xuICAgICAgICBpZiAoYXJncy5sZW5ndGggPiAwICYmIGFyZ3NbMF0gPT09IFRlc3RSZWNvdmVyRGF0YS5iYXNlQWRkcmVzcykge1xuICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoYmFzZUFkZHJlc3NCYWxhbmNlKDMwMDAwMDApKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICB9KTtcblxuICAgICAgY29uc3QgYmFzZUFkZHJIZXggPSBVdGlscy5nZXRIZXhBZGRyZXNzRnJvbUJhc2U1OEFkZHJlc3MoVGVzdFJlY292ZXJEYXRhLmJhc2VBZGRyZXNzKTtcbiAgICAgIGNvbnN0IGRlc3RpbmF0aW9uSGV4ID0gVXRpbHMuZ2V0SGV4QWRkcmVzc0Zyb21CYXNlNThBZGRyZXNzKFRlc3RSZWNvdmVyRGF0YS5yZWNvdmVyeURlc3RpbmF0aW9uKTtcblxuICAgICAgbW9jay5tZXRob2QoVHJ4LnByb3RvdHlwZSBhcyBhbnksICdnZXRCdWlsZFRyYW5zYWN0aW9uJywgKC4uLmFyZ3MpID0+IHtcbiAgICAgICAgaWYgKGFyZ3MubGVuZ3RoID4gMCAmJiBhcmdzWzBdID09PSBkZXN0aW5hdGlvbkhleCAmJiBhcmdzWzFdID09PSBiYXNlQWRkckhleCAmJiBhcmdzWzJdID09PSA5MDAwMDApIHtcbiAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGNyZWF0aW9uVHJhbnNhY3Rpb24oYmFzZUFkZHJIZXgsIGRlc3RpbmF0aW9uSGV4LCA5MDAwMDApKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICB9KTtcblxuICAgICAgY29uc3QgcmVzID0gYXdhaXQgYmFzZWNvaW4ucmVjb3Zlcih7XG4gICAgICAgIHVzZXJLZXk6IFRlc3RSZWNvdmVyRGF0YS51c2VyS2V5LFxuICAgICAgICBiYWNrdXBLZXk6IFRlc3RSZWNvdmVyRGF0YS5iYWNrdXBLZXksXG4gICAgICAgIGJpdGdvS2V5OiBUZXN0UmVjb3ZlckRhdGEuYml0Z29LZXksXG4gICAgICAgIHJlY292ZXJ5RGVzdGluYXRpb246IFRlc3RSZWNvdmVyRGF0YS5yZWNvdmVyeURlc3RpbmF0aW9uLFxuICAgICAgICBzY2FuOiAnMTAnLFxuICAgICAgfSk7XG4gICAgICBhc3NlcnQubm90RXF1YWwocmVzLmxlbmd0aCwgMCk7XG4gICAgICBhc3NlcnQub2soT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHJlcywgJ3R4SGV4JykpO1xuICAgICAgYXNzZXJ0Lm9rKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChyZXMsICdmZWVJbmZvJykpO1xuICAgICAgY29uc3QgcmF3RGF0YSA9IEpTT04ucGFyc2UocmVzLnR4SGV4KS5yYXdfZGF0YTtcbiAgICAgIGFzc2VydC5vayhPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocmF3RGF0YSwgJ2NvbnRyYWN0JykpO1xuICAgICAgY29uc3QgdmFsdWUgPSByYXdEYXRhLmNvbnRyYWN0WzBdLnBhcmFtZXRlci52YWx1ZTtcbiAgICAgIGFzc2VydC5lcXVhbCh2YWx1ZS5hbW91bnQsIDkwMDAwMCk7XG4gICAgICBhc3NlcnQuZXF1YWwoVXRpbHMuZ2V0QmFzZTU4QWRkcmVzc0Zyb21IZXgodmFsdWUub3duZXJfYWRkcmVzcyksIFRlc3RSZWNvdmVyRGF0YS5iYXNlQWRkcmVzcyk7XG4gICAgICBhc3NlcnQuZXF1YWwoVXRpbHMuZ2V0QmFzZTU4QWRkcmVzc0Zyb21IZXgodmFsdWUudG9fYWRkcmVzcyksIFRlc3RSZWNvdmVyRGF0YS5yZWNvdmVyeURlc3RpbmF0aW9uKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgZmFpbCByZWNvdmVyIHRyeCBmcm9tIGJhc2UgYWRkcmVzcyB0byByZWNvdmVyeSBhZGRyZXNzIHdpdGggc2NhbiBwYXNzZWQgYXMgdmFsaWQgaW50ZWdlciBzdHJpbmcnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBtb2NrLm1ldGhvZChUcngucHJvdG90eXBlIGFzIGFueSwgJ2dldEFjY291bnRCYWxhbmNlc0Zyb21Ob2RlJywgKC4uLmFyZ3MpID0+IHtcbiAgICAgICAgaWYgKGFyZ3MubGVuZ3RoID4gMCAmJiBhcmdzWzBdID09PSBUZXN0UmVjb3ZlckRhdGEuYmFzZUFkZHJlc3MpIHtcbiAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGJhc2VBZGRyZXNzQmFsYW5jZSgzMDAwMDAwKSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgfSk7XG5cbiAgICAgIGNvbnN0IGJhc2VBZGRySGV4ID0gVXRpbHMuZ2V0SGV4QWRkcmVzc0Zyb21CYXNlNThBZGRyZXNzKFRlc3RSZWNvdmVyRGF0YS5iYXNlQWRkcmVzcyk7XG4gICAgICBjb25zdCBkZXN0aW5hdGlvbkhleCA9IFV0aWxzLmdldEhleEFkZHJlc3NGcm9tQmFzZTU4QWRkcmVzcyhUZXN0UmVjb3ZlckRhdGEucmVjb3ZlcnlEZXN0aW5hdGlvbik7XG5cbiAgICAgIG1vY2subWV0aG9kKFRyeC5wcm90b3R5cGUgYXMgYW55LCAnZ2V0QnVpbGRUcmFuc2FjdGlvbicsICguLi5hcmdzKSA9PiB7XG4gICAgICAgIGlmIChhcmdzLmxlbmd0aCA+IDAgJiYgYXJnc1swXSA9PT0gZGVzdGluYXRpb25IZXggJiYgYXJnc1sxXSA9PT0gYmFzZUFkZHJIZXggJiYgYXJnc1syXSA9PT0gOTAwMDAwKSB7XG4gICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShjcmVhdGlvblRyYW5zYWN0aW9uKGJhc2VBZGRySGV4LCBkZXN0aW5hdGlvbkhleCwgOTAwMDAwKSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgfSk7XG5cbiAgICAgIGF3YWl0IGFzc2VydC5yZWplY3RzKFxuICAgICAgICBiYXNlY29pbi5yZWNvdmVyKHtcbiAgICAgICAgICB1c2VyS2V5OiBUZXN0UmVjb3ZlckRhdGEudXNlcktleSxcbiAgICAgICAgICBiYWNrdXBLZXk6IFRlc3RSZWNvdmVyRGF0YS5iYWNrdXBLZXksXG4gICAgICAgICAgYml0Z29LZXk6IFRlc3RSZWNvdmVyRGF0YS5iaXRnb0tleSxcbiAgICAgICAgICByZWNvdmVyeURlc3RpbmF0aW9uOiBUZXN0UmVjb3ZlckRhdGEucmVjb3ZlcnlEZXN0aW5hdGlvbixcbiAgICAgICAgICBzY2FuOiAnYWJjJyxcbiAgICAgICAgfSksXG4gICAgICAgIHtcbiAgICAgICAgICBtZXNzYWdlOiAnSW52YWxpZCBzY2FubmluZyBmYWN0b3InLFxuICAgICAgICB9XG4gICAgICApO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCByZWNvdmVyIHRyeCBmcm9tIHJlY2VpdmUgYWRkcmVzcyB0byBiYXNlIGFkZHJlc3MnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBtb2NrLm1ldGhvZChUcngucHJvdG90eXBlIGFzIGFueSwgJ2dldEFjY291bnRCYWxhbmNlc0Zyb21Ob2RlJywgKC4uLmFyZ3MpID0+IHtcbiAgICAgICAgaWYgKGFyZ3MubGVuZ3RoID4gMCAmJiBhcmdzWzBdID09PSBUZXN0UmVjb3ZlckRhdGEuYmFzZUFkZHJlc3MpIHtcbiAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGJhc2VBZGRyZXNzQmFsYW5jZSgyMDAwMDAwKSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoYXJncy5sZW5ndGggPiAwICYmIGFyZ3NbMF0gPT09IFRlc3RSZWNvdmVyRGF0YS5maXJzdFJlY2VpdmVBZGRyZXNzKSB7XG4gICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShyZWNlaXZlQWRkcmVzc0JhbGFuY2UoMTAyMTAwMDAwLCBUZXN0UmVjb3ZlckRhdGEuZmlyc3RSZWNlaXZlQWRkcmVzcykpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgIH0pO1xuXG4gICAgICBjb25zdCBmaXJzdFJlY2VpdmVBZGRyZXNzSGV4ID0gVXRpbHMuZ2V0SGV4QWRkcmVzc0Zyb21CYXNlNThBZGRyZXNzKFRlc3RSZWNvdmVyRGF0YS5maXJzdFJlY2VpdmVBZGRyZXNzKTtcbiAgICAgIGNvbnN0IGJhc2VBZGRySGV4ID0gVXRpbHMuZ2V0SGV4QWRkcmVzc0Zyb21CYXNlNThBZGRyZXNzKFRlc3RSZWNvdmVyRGF0YS5iYXNlQWRkcmVzcyk7XG5cbiAgICAgIG1vY2subWV0aG9kKFRyeC5wcm90b3R5cGUgYXMgYW55LCAnZ2V0QnVpbGRUcmFuc2FjdGlvbicsICguLi5hcmdzKSA9PiB7XG4gICAgICAgIGlmIChhcmdzLmxlbmd0aCA+IDAgJiYgYXJnc1swXSA9PT0gYmFzZUFkZHJIZXggJiYgYXJnc1sxXSA9PT0gZmlyc3RSZWNlaXZlQWRkcmVzc0hleCAmJiBhcmdzWzJdID09PSAxMDAwMDAwMDApIHtcbiAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGNyZWF0aW9uVHJhbnNhY3Rpb24oZmlyc3RSZWNlaXZlQWRkcmVzc0hleCwgYmFzZUFkZHJIZXgsIDEwMDAwMDAwMCkpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgIH0pO1xuXG4gICAgICBjb25zdCByZXMgPSBhd2FpdCBiYXNlY29pbi5yZWNvdmVyKHtcbiAgICAgICAgdXNlcktleTogVGVzdFJlY292ZXJEYXRhLnVzZXJLZXksXG4gICAgICAgIGJhY2t1cEtleTogVGVzdFJlY292ZXJEYXRhLmJhY2t1cEtleSxcbiAgICAgICAgYml0Z29LZXk6IFRlc3RSZWNvdmVyRGF0YS5iaXRnb0tleSxcbiAgICAgICAgcmVjb3ZlcnlEZXN0aW5hdGlvbjogVGVzdFJlY292ZXJEYXRhLnJlY292ZXJ5RGVzdGluYXRpb24sXG4gICAgICB9KTtcbiAgICAgIGFzc2VydC5ub3RFcXVhbChyZXMubGVuZ3RoLCAwKTtcbiAgICAgIGFzc2VydC5vayhPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocmVzLCAndHhIZXgnKSk7XG4gICAgICBhc3NlcnQub2soT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHJlcywgJ2ZlZUluZm8nKSk7XG4gICAgICBjb25zdCByYXdEYXRhID0gSlNPTi5wYXJzZShyZXMudHhIZXgpLnJhd19kYXRhO1xuICAgICAgYXNzZXJ0Lm9rKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChyYXdEYXRhLCAnY29udHJhY3QnKSk7XG4gICAgICBjb25zdCB2YWx1ZSA9IHJhd0RhdGEuY29udHJhY3RbMF0ucGFyYW1ldGVyLnZhbHVlO1xuICAgICAgYXNzZXJ0LmVxdWFsKHZhbHVlLmFtb3VudCwgMTAwMDAwMDAwKTtcbiAgICAgIGFzc2VydC5lcXVhbChVdGlscy5nZXRCYXNlNThBZGRyZXNzRnJvbUhleCh2YWx1ZS5vd25lcl9hZGRyZXNzKSwgVGVzdFJlY292ZXJEYXRhLmZpcnN0UmVjZWl2ZUFkZHJlc3MpO1xuICAgICAgYXNzZXJ0LmVxdWFsKFV0aWxzLmdldEJhc2U1OEFkZHJlc3NGcm9tSGV4KHZhbHVlLnRvX2FkZHJlc3MpLCBUZXN0UmVjb3ZlckRhdGEuYmFzZUFkZHJlc3MpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCByZWNvdmVyIHRva2VuIGZyb20gYmFzZSBhZGRyZXNzIHRvIHJlY292ZXJ5IGFkZHJlc3MnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBtb2NrLm1ldGhvZChUcngucHJvdG90eXBlIGFzIGFueSwgJ2dldEFjY291bnRCYWxhbmNlc0Zyb21Ob2RlJywgKC4uLmFyZ3MpID0+IHtcbiAgICAgICAgaWYgKGFyZ3MubGVuZ3RoID4gMCAmJiBhcmdzWzBdID09PSBUZXN0UmVjb3ZlckRhdGEuYmFzZUFkZHJlc3MpIHtcbiAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKFxuICAgICAgICAgICAgYmFzZUFkZHJlc3NCYWxhbmNlKDEwMDAwMDAwMCwgW1xuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgVFNkWndOcXBIb2Z6UDZCc0JLR1FVV2RCZUpwaExtRjZpZDogJzEwMDAwMDAwMDAnLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgVEczWFh5RXhCa1BwOW56ZGFqRFpzb3pFdTRCa2FTSm96czogJzExMDAwMDAwMDAnLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgXSlcbiAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgIH0pO1xuXG4gICAgICBtb2NrLm1ldGhvZChUcngucHJvdG90eXBlIGFzIGFueSwgJ2dldFRyaWdnZXJTbWFydENvbnRyYWN0VHJhbnNhY3Rpb24nLCAoLi4uYXJncykgPT4ge1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKFNhbXBsZVJhd1Rva2VuU2VuZFR4bik7XG4gICAgICB9KTtcblxuICAgICAgY29uc3QgcmVzID0gYXdhaXQgYmFzZWNvaW4ucmVjb3Zlcih7XG4gICAgICAgIHVzZXJLZXk6IFRlc3RSZWNvdmVyRGF0YS51c2VyS2V5LFxuICAgICAgICBiYWNrdXBLZXk6IFRlc3RSZWNvdmVyRGF0YS5iYWNrdXBLZXksXG4gICAgICAgIGJpdGdvS2V5OiBUZXN0UmVjb3ZlckRhdGEuYml0Z29LZXksXG4gICAgICAgIHRva2VuQ29udHJhY3RBZGRyZXNzOiAnVEczWFh5RXhCa1BwOW56ZGFqRFpzb3pFdTRCa2FTSm96cycsXG4gICAgICAgIHJlY292ZXJ5RGVzdGluYXRpb246IFRlc3RSZWNvdmVyRGF0YS5yZWNvdmVyeURlc3RpbmF0aW9uLFxuICAgICAgfSk7XG4gICAgICBhc3NlcnQubm90RXF1YWwocmVzLmxlbmd0aCwgMCk7XG4gICAgICBhc3NlcnQuZXF1YWwocmVzLnJlY292ZXJ5QW1vdW50LCAxMTAwMDAwMDAwKTtcbiAgICAgIGFzc2VydC5lcXVhbChyZXMuZmVlSW5mby5mZWUsICcxMDAwMDAwMDAnKTtcbiAgICAgIGNvbnN0IGV4cGlyYXRpb25EdXJhdGlvbiA9IHJlcy50eC5yYXdfZGF0YS5leHBpcmF0aW9uIC0gcmVzLnR4LnJhd19kYXRhLnRpbWVzdGFtcDtcbiAgICAgIGFzc2VydC5vayhleHBpcmF0aW9uRHVyYXRpb24gPj0gODY0MDAwMDApO1xuICAgICAgYXNzZXJ0LmVxdWFsKHJlcy5hZGRyZXNzSW5mbywgdW5kZWZpbmVkKTtcbiAgICAgIGNvbnN0IHJhd0RhdGEgPSBKU09OLnBhcnNlKHJlcy50eEhleCkucmF3X2RhdGE7XG4gICAgICBhc3NlcnQub2soT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHJhd0RhdGEsICdjb250cmFjdCcpKTtcbiAgICAgIGNvbnN0IHZhbHVlID0gcmF3RGF0YS5jb250cmFjdFswXS5wYXJhbWV0ZXIudmFsdWU7XG4gICAgICBhc3NlcnQuZXF1YWwoVXRpbHMuZ2V0QmFzZTU4QWRkcmVzc0Zyb21IZXgodmFsdWUub3duZXJfYWRkcmVzcyksIFRlc3RSZWNvdmVyRGF0YS5iYXNlQWRkcmVzcyk7XG4gICAgICBhc3NlcnQuZXF1YWwoVXRpbHMuZ2V0QmFzZTU4QWRkcmVzc0Zyb21IZXgodmFsdWUuY29udHJhY3RfYWRkcmVzcyksICdURzNYWHlFeEJrUHA5bnpkYWpEWnNvekV1NEJrYVNKb3pzJyk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHRocm93IGlmIHRyeCBiYWxhbmNlIGF0IGJhc2UgYWRkcmVzcyBpcyBub3Qgc3VmZmljaWVudCB0byBjb3ZlciB0b2tlbiBzZW5kJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgbW9jay5tZXRob2QoVHJ4LnByb3RvdHlwZSBhcyBhbnksICdnZXRBY2NvdW50QmFsYW5jZXNGcm9tTm9kZScsICguLi5hcmdzKSA9PiB7XG4gICAgICAgIGlmIChhcmdzLmxlbmd0aCA+IDAgJiYgYXJnc1swXSA9PT0gVGVzdFJlY292ZXJEYXRhLmJhc2VBZGRyZXNzKSB7XG4gICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShcbiAgICAgICAgICAgIGJhc2VBZGRyZXNzQmFsYW5jZSgxMDAwMDAwLCBbXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBURzNYWHlFeEJrUHA5bnpkYWpEWnNvekV1NEJrYVNKb3pzOiAnMTEwMDAwMDAwMCcsXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBdKVxuICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgfSk7XG5cbiAgICAgIG1vY2subWV0aG9kKFRyeC5wcm90b3R5cGUgYXMgYW55LCAnZ2V0VHJpZ2dlclNtYXJ0Q29udHJhY3RUcmFuc2FjdGlvbicsICguLi5hcmdzKSA9PiB7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoU2FtcGxlUmF3VG9rZW5TZW5kVHhuKTtcbiAgICAgIH0pO1xuXG4gICAgICBhd2FpdCBhc3NlcnQucmVqZWN0cyhcbiAgICAgICAgYmFzZWNvaW4ucmVjb3Zlcih7XG4gICAgICAgICAgdXNlcktleTogVGVzdFJlY292ZXJEYXRhLnVzZXJLZXksXG4gICAgICAgICAgYmFja3VwS2V5OiBUZXN0UmVjb3ZlckRhdGEuYmFja3VwS2V5LFxuICAgICAgICAgIGJpdGdvS2V5OiBUZXN0UmVjb3ZlckRhdGEuYml0Z29LZXksXG4gICAgICAgICAgdG9rZW5Db250cmFjdEFkZHJlc3M6ICdURzNYWHlFeEJrUHA5bnpkYWpEWnNvekV1NEJrYVNKb3pzJyxcbiAgICAgICAgICByZWNvdmVyeURlc3RpbmF0aW9uOiBUZXN0UmVjb3ZlckRhdGEucmVjb3ZlcnlEZXN0aW5hdGlvbixcbiAgICAgICAgfSksXG4gICAgICAgIHtcbiAgICAgICAgICBtZXNzYWdlOlxuICAgICAgICAgICAgXCJBbW91bnQgb2YgZnVuZHMgdG8gcmVjb3ZlciAxMDAwMDAwIGlzIGxlc3MgdGhhbiAxMDAwMDAwMDAgYW5kIHdvdWxkbid0IGJlIGFibGUgdG8gZnVuZCBhIHRyYzIwIHNlbmRcIixcbiAgICAgICAgfVxuICAgICAgKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ0J1aWxkIFVuc2lnbmVkIENvbnNvbGlkYXRpb24gUmVjb3ZlcmllcycsICgpID0+IHtcbiAgICBhZnRlckVhY2goKCkgPT4ge1xuICAgICAgbW9jay5yZXNldCgpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCB0aHJvdyBpZiBzdGFydGluZ1NjYW5JbmRleCBpcyBub3QgZ2UgdG8gMScsIGFzeW5jICgpID0+IHtcbiAgICAgIGF3YWl0IGFzc2VydC5yZWplY3RzKFxuICAgICAgICBiYXNlY29pbi5yZWNvdmVyQ29uc29saWRhdGlvbnMoe1xuICAgICAgICAgIHVzZXJLZXk6IFRlc3RSZWNvdmVyRGF0YS51c2VyS2V5LFxuICAgICAgICAgIGJhY2t1cEtleTogVGVzdFJlY292ZXJEYXRhLmJhY2t1cEtleSxcbiAgICAgICAgICBiaXRnb0tleTogVGVzdFJlY292ZXJEYXRhLmJpdGdvS2V5LFxuICAgICAgICAgIHN0YXJ0aW5nU2NhbkluZGV4OiAtMSxcbiAgICAgICAgfSksXG4gICAgICAgIHtcbiAgICAgICAgICBtZXNzYWdlOlxuICAgICAgICAgICAgJ0ludmFsaWQgc3RhcnRpbmcgb3IgZW5kaW5nIGluZGV4IHRvIHNjYW4gZm9yIGFkZHJlc3Nlcy4gc3RhcnRpbmdTY2FuSW5kZXg6IC0xLCBlbmRpbmdTY2FuSW5kZXg6IDE5LicsXG4gICAgICAgIH1cbiAgICAgICk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHRocm93IGlmIHNjYW4gZmFjdG9yIGlzIHRvbyBoaWdoJywgYXN5bmMgKCkgPT4ge1xuICAgICAgYXdhaXQgYXNzZXJ0LnJlamVjdHMoXG4gICAgICAgIGJhc2Vjb2luLnJlY292ZXJDb25zb2xpZGF0aW9ucyh7XG4gICAgICAgICAgdXNlcktleTogVGVzdFJlY292ZXJEYXRhLnVzZXJLZXksXG4gICAgICAgICAgYmFja3VwS2V5OiBUZXN0UmVjb3ZlckRhdGEuYmFja3VwS2V5LFxuICAgICAgICAgIGJpdGdvS2V5OiBUZXN0UmVjb3ZlckRhdGEuYml0Z29LZXksXG4gICAgICAgICAgc3RhcnRpbmdTY2FuSW5kZXg6IDEsXG4gICAgICAgICAgZW5kaW5nU2NhbkluZGV4OiAzMDAsXG4gICAgICAgIH0pLFxuICAgICAgICB7XG4gICAgICAgICAgbWVzc2FnZTpcbiAgICAgICAgICAgICdJbnZhbGlkIHN0YXJ0aW5nIG9yIGVuZGluZyBpbmRleCB0byBzY2FuIGZvciBhZGRyZXNzZXMuIHN0YXJ0aW5nU2NhbkluZGV4OiAxLCBlbmRpbmdTY2FuSW5kZXg6IDMwMC4nLFxuICAgICAgICB9XG4gICAgICApO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBidWlsZCBjb25zb2xpZGF0ZSByZWNvdmVyaWVzJywgYXN5bmMgKCkgPT4ge1xuICAgICAgbW9jay5tZXRob2QoVHJ4LnByb3RvdHlwZSBhcyBhbnksICdnZXRBY2NvdW50QmFsYW5jZXNGcm9tTm9kZScsICguLi5hcmdzKSA9PiB7XG4gICAgICAgIGlmIChhcmdzLmxlbmd0aCA+IDAgJiYgYXJnc1swXSA9PT0gVGVzdFJlY292ZXJEYXRhLmZpcnN0UmVjZWl2ZUFkZHJlc3MpIHtcbiAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHJlY2VpdmVBZGRyZXNzQmFsYW5jZSgxMDIxMDAwMDAsIFRlc3RSZWNvdmVyRGF0YS5maXJzdFJlY2VpdmVBZGRyZXNzKSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoYXJncy5sZW5ndGggPiAwICYmIGFyZ3NbMF0gPT09IFRlc3RSZWNvdmVyRGF0YS5zZWNvbmRSZWNlaXZlQWRkcmVzcykge1xuICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUocmVjZWl2ZUFkZHJlc3NCYWxhbmNlKDUwMDAwMDAwLCBUZXN0UmVjb3ZlckRhdGEuc2Vjb25kUmVjZWl2ZUFkZHJlc3MpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICB9KTtcblxuICAgICAgbW9jay5tZXRob2QoVHJ4LnByb3RvdHlwZSBhcyBhbnksICdnZXRCdWlsZFRyYW5zYWN0aW9uJywgKC4uLmFyZ3MpID0+IHtcbiAgICAgICAgaWYgKGFyZ3MubGVuZ3RoID4gMCAmJiBhcmdzWzBdID09PSBiYXNlQWRkckhleCAmJiBhcmdzWzFdID09PSBmaXJzdFJlY2VpdmVBZGRySGV4ICYmIGFyZ3NbMl0gPT09IDEwMDAwMDAwMCkge1xuICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoY3JlYXRpb25UcmFuc2FjdGlvbihmaXJzdFJlY2VpdmVBZGRySGV4LCBiYXNlQWRkckhleCwgMTAwMDAwMDAwKSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoYXJncy5sZW5ndGggPiAwICYmIGFyZ3NbMF0gPT09IGJhc2VBZGRySGV4ICYmIGFyZ3NbMV0gPT09IHNlY29uZFJlY2VpdmVBZGRySGV4ICYmIGFyZ3NbMl0gPT09IDQ3OTAwMDAwKSB7XG4gICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShjcmVhdGlvblRyYW5zYWN0aW9uKHNlY29uZFJlY2VpdmVBZGRySGV4LCBiYXNlQWRkckhleCwgNDc5MDAwMDApKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICB9KTtcblxuICAgICAgY29uc3QgZmlyc3RSZWNlaXZlQWRkckhleCA9IFV0aWxzLmdldEhleEFkZHJlc3NGcm9tQmFzZTU4QWRkcmVzcyhUZXN0UmVjb3ZlckRhdGEuZmlyc3RSZWNlaXZlQWRkcmVzcyk7XG4gICAgICBjb25zdCBzZWNvbmRSZWNlaXZlQWRkckhleCA9IFV0aWxzLmdldEhleEFkZHJlc3NGcm9tQmFzZTU4QWRkcmVzcyhUZXN0UmVjb3ZlckRhdGEuc2Vjb25kUmVjZWl2ZUFkZHJlc3MpO1xuICAgICAgY29uc3QgYmFzZUFkZHJIZXggPSBVdGlscy5nZXRIZXhBZGRyZXNzRnJvbUJhc2U1OEFkZHJlc3MoVGVzdFJlY292ZXJEYXRhLmJhc2VBZGRyZXNzKTtcblxuICAgICAgY29uc3QgcmVzID0gYXdhaXQgYmFzZWNvaW4ucmVjb3ZlckNvbnNvbGlkYXRpb25zKHtcbiAgICAgICAgdXNlcktleTogVGVzdFJlY292ZXJEYXRhLnVzZXJLZXksXG4gICAgICAgIGJhY2t1cEtleTogVGVzdFJlY292ZXJEYXRhLmJhY2t1cEtleSxcbiAgICAgICAgYml0Z29LZXk6IFRlc3RSZWNvdmVyRGF0YS5iaXRnb0tleSxcbiAgICAgICAgc3RhcnRpbmdTY2FuSW5kZXg6IDEsXG4gICAgICAgIGVuZGluZ1NjYW5JbmRleDogMyxcbiAgICAgIH0pO1xuXG4gICAgICBhc3NlcnQubm90RXF1YWwocmVzLmxlbmd0aCwgMCk7XG4gICAgICBhc3NlcnQub2soT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHJlcywgJ3RyYW5zYWN0aW9ucycpKTtcbiAgICAgIGFzc2VydC5lcXVhbChyZXMudHJhbnNhY3Rpb25zLmxlbmd0aCwgMik7XG4gICAgICBjb25zdCB0eG4xID0gcmVzLnRyYW5zYWN0aW9uc1swXTtcbiAgICAgIGNvbnN0IHJhd0RhdGExID0gSlNPTi5wYXJzZSh0eG4xLnR4SGV4KS5yYXdfZGF0YTtcbiAgICAgIGFzc2VydC5vayhPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocmF3RGF0YTEsICdjb250cmFjdCcpKTtcbiAgICAgIGNvbnN0IHZhbHVlMSA9IHJhd0RhdGExLmNvbnRyYWN0WzBdLnBhcmFtZXRlci52YWx1ZTtcbiAgICAgIGFzc2VydC5lcXVhbCh2YWx1ZTEuYW1vdW50LCAxMDAwMDAwMDApO1xuICAgICAgYXNzZXJ0LmVxdWFsKFV0aWxzLmdldEJhc2U1OEFkZHJlc3NGcm9tSGV4KHZhbHVlMS5vd25lcl9hZGRyZXNzKSwgVGVzdFJlY292ZXJEYXRhLmZpcnN0UmVjZWl2ZUFkZHJlc3MpO1xuICAgICAgYXNzZXJ0LmVxdWFsKFV0aWxzLmdldEJhc2U1OEFkZHJlc3NGcm9tSGV4KHZhbHVlMS50b19hZGRyZXNzKSwgVGVzdFJlY292ZXJEYXRhLmJhc2VBZGRyZXNzKTtcbiAgICAgIGNvbnN0IHR4bjIgPSByZXMudHJhbnNhY3Rpb25zWzFdO1xuICAgICAgY29uc3QgcmF3RGF0YTIgPSBKU09OLnBhcnNlKHR4bjIudHhIZXgpLnJhd19kYXRhO1xuICAgICAgYXNzZXJ0Lm9rKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChyYXdEYXRhMiwgJ2NvbnRyYWN0JykpO1xuICAgICAgY29uc3QgdmFsdWUyID0gcmF3RGF0YTIuY29udHJhY3RbMF0ucGFyYW1ldGVyLnZhbHVlO1xuICAgICAgYXNzZXJ0LmVxdWFsKHZhbHVlMi5hbW91bnQsIDQ3OTAwMDAwKTtcbiAgICAgIGFzc2VydC5lcXVhbChVdGlscy5nZXRCYXNlNThBZGRyZXNzRnJvbUhleCh2YWx1ZTIub3duZXJfYWRkcmVzcyksIFRlc3RSZWNvdmVyRGF0YS5zZWNvbmRSZWNlaXZlQWRkcmVzcyk7XG4gICAgICBhc3NlcnQuZXF1YWwoVXRpbHMuZ2V0QmFzZTU4QWRkcmVzc0Zyb21IZXgodmFsdWUyLnRvX2FkZHJlc3MpLCBUZXN0UmVjb3ZlckRhdGEuYmFzZUFkZHJlc3MpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBidWlsZCBjb25zb2xpZGF0ZSB0b2tlbiByZWNvdmVyaWVzJywgYXN5bmMgKCkgPT4ge1xuICAgICAgbW9jay5tZXRob2QoVHJ4LnByb3RvdHlwZSBhcyBhbnksICdnZXRBY2NvdW50QmFsYW5jZXNGcm9tTm9kZScsICguLi5hcmdzKSA9PiB7XG4gICAgICAgIGlmIChhcmdzLmxlbmd0aCA+IDAgJiYgYXJnc1swXSA9PT0gVGVzdFJlY292ZXJEYXRhLmZpcnN0UmVjZWl2ZUFkZHJlc3MpIHtcbiAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKFxuICAgICAgICAgICAgcmVjZWl2ZUFkZHJlc3NCYWxhbmNlKDIwMjEwMDAwMCwgVGVzdFJlY292ZXJEYXRhLmZpcnN0UmVjZWl2ZUFkZHJlc3MsIFtcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIFRTZFp3TnFwSG9melA2QnNCS0dRVVdkQmVKcGhMbUY2aWQ6ICcxMTAwMDAwMDAwJyxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIF0pXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChhcmdzLmxlbmd0aCA+IDAgJiYgYXJnc1swXSA9PT0gVGVzdFJlY292ZXJEYXRhLnNlY29uZFJlY2VpdmVBZGRyZXNzKSB7XG4gICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShyZWNlaXZlQWRkcmVzc0JhbGFuY2UoNTAwLCBUZXN0UmVjb3ZlckRhdGEuc2Vjb25kUmVjZWl2ZUFkZHJlc3MpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICB9KTtcblxuICAgICAgbW9jay5tZXRob2QoVHJ4LnByb3RvdHlwZSBhcyBhbnksICdnZXRCdWlsZFRyYW5zYWN0aW9uJywgKC4uLmFyZ3MpID0+IHtcbiAgICAgICAgaWYgKGFyZ3MubGVuZ3RoID4gMCAmJiBhcmdzWzBdID09PSBiYXNlQWRkckhleCAmJiBhcmdzWzFdID09PSBmaXJzdFJlY2VpdmVBZGRySGV4ICYmIGFyZ3NbMl0gPT09IDExMDAwMDAwMDApIHtcbiAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGNyZWF0aW9uVHJhbnNhY3Rpb24oZmlyc3RSZWNlaXZlQWRkckhleCwgYmFzZUFkZHJIZXgsIDExMDAwMDAwMDApKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICB9KTtcblxuICAgICAgY29uc3QgZmlyc3RSZWNlaXZlQWRkckhleCA9IFV0aWxzLmdldEhleEFkZHJlc3NGcm9tQmFzZTU4QWRkcmVzcyhUZXN0UmVjb3ZlckRhdGEuZmlyc3RSZWNlaXZlQWRkcmVzcyk7XG4gICAgICBjb25zdCBiYXNlQWRkckhleCA9IFV0aWxzLmdldEhleEFkZHJlc3NGcm9tQmFzZTU4QWRkcmVzcyhUZXN0UmVjb3ZlckRhdGEuYmFzZUFkZHJlc3MpO1xuXG4gICAgICBjb25zdCByZXMgPSBhd2FpdCBiYXNlY29pbi5yZWNvdmVyQ29uc29saWRhdGlvbnMoe1xuICAgICAgICB1c2VyS2V5OiBUZXN0UmVjb3ZlckRhdGEudXNlcktleSxcbiAgICAgICAgYmFja3VwS2V5OiBUZXN0UmVjb3ZlckRhdGEuYmFja3VwS2V5LFxuICAgICAgICBiaXRnb0tleTogVGVzdFJlY292ZXJEYXRhLmJpdGdvS2V5LFxuICAgICAgICB0b2tlbkNvbnRyYWN0QWRkcmVzczogJ1RTZFp3TnFwSG9melA2QnNCS0dRVVdkQmVKcGhMbUY2aWQnLFxuICAgICAgICBzdGFydGluZ1NjYW5JbmRleDogMSxcbiAgICAgICAgZW5kaW5nU2NhbkluZGV4OiAzLFxuICAgICAgfSk7XG5cbiAgICAgIGFzc2VydC5ub3RFcXVhbChyZXMubGVuZ3RoLCAwKTtcbiAgICAgIGFzc2VydC5vayhPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocmVzLCAndHJhbnNhY3Rpb25zJykpO1xuICAgICAgYXNzZXJ0LmVxdWFsKHJlcy50cmFuc2FjdGlvbnMubGVuZ3RoLCAxKTtcbiAgICAgIGNvbnN0IHR4biA9IHJlcy50cmFuc2FjdGlvbnNbMF07XG4gICAgICBjb25zdCByYXdEYXRhID0gSlNPTi5wYXJzZSh0eG4udHhIZXgpLnJhd19kYXRhO1xuICAgICAgYXNzZXJ0Lm9rKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChyYXdEYXRhLCAnY29udHJhY3QnKSk7XG4gICAgICBjb25zdCB2YWx1ZSA9IHJhd0RhdGEuY29udHJhY3RbMF0ucGFyYW1ldGVyLnZhbHVlO1xuICAgICAgYXNzZXJ0LmVxdWFsKFxuICAgICAgICB2YWx1ZS5kYXRhLFxuICAgICAgICAnYTkwNTljYmIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBjMjU0MjAyNTVjMmM1YTJkZDU0ZWY2OWY5MmVmMjYxZTZiZDQyMTZhMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0MTkwYWIwMCdcbiAgICAgICk7XG4gICAgICBhc3NlcnQuZXF1YWwoVXRpbHMuZ2V0QmFzZTU4QWRkcmVzc0Zyb21IZXgodmFsdWUub3duZXJfYWRkcmVzcyksIFRlc3RSZWNvdmVyRGF0YS5maXJzdFJlY2VpdmVBZGRyZXNzKTtcbiAgICAgIGFzc2VydC5lcXVhbChVdGlscy5nZXRCYXNlNThBZGRyZXNzRnJvbUhleCh2YWx1ZS5jb250cmFjdF9hZGRyZXNzKSwgJ1RTZFp3TnFwSG9melA2QnNCS0dRVVdkQmVKcGhMbUY2aWQnKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgc2tpcCBidWlsZGluZyBjb25zb2xpZGF0ZSB0cmFuc2FjdGlvbiBpZiBiYWxhbmNlIGlzIGxvd2VyIHRoYW4gcmVzZXJ2ZWQgZmVlJywgYXN5bmMgKCkgPT4ge1xuICAgICAgbW9jay5tZXRob2QoVHJ4LnByb3RvdHlwZSBhcyBhbnksICdnZXRBY2NvdW50QmFsYW5jZXNGcm9tTm9kZScsICguLi5hcmdzKSA9PiB7XG4gICAgICAgIGlmIChhcmdzLmxlbmd0aCA+IDAgJiYgYXJnc1swXSA9PT0gVGVzdFJlY292ZXJEYXRhLmZpcnN0UmVjZWl2ZUFkZHJlc3MpIHtcbiAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHJlY2VpdmVBZGRyZXNzQmFsYW5jZSgxMDIxMDAwMDAsIFRlc3RSZWNvdmVyRGF0YS5maXJzdFJlY2VpdmVBZGRyZXNzKSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoYXJncy5sZW5ndGggPiAwICYmIGFyZ3NbMF0gPT09IFRlc3RSZWNvdmVyRGF0YS5zZWNvbmRSZWNlaXZlQWRkcmVzcykge1xuICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUocmVjZWl2ZUFkZHJlc3NCYWxhbmNlKDIwMDAwMDAsIFRlc3RSZWNvdmVyRGF0YS5zZWNvbmRSZWNlaXZlQWRkcmVzcykpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgIH0pO1xuXG4gICAgICBtb2NrLm1ldGhvZChUcngucHJvdG90eXBlIGFzIGFueSwgJ2dldEJ1aWxkVHJhbnNhY3Rpb24nLCAoLi4uYXJncykgPT4ge1xuICAgICAgICBpZiAoYXJncy5sZW5ndGggPiAwICYmIGFyZ3NbMF0gPT09IGJhc2VBZGRySGV4ICYmIGFyZ3NbMV0gPT09IGZpcnN0UmVjZWl2ZUFkZHJIZXggJiYgYXJnc1syXSA9PT0gMTAwMDAwMDAwKSB7XG4gICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShjcmVhdGlvblRyYW5zYWN0aW9uKGZpcnN0UmVjZWl2ZUFkZHJIZXgsIGJhc2VBZGRySGV4LCAxMDAwMDAwMDApKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICB9KTtcblxuICAgICAgY29uc3QgZmlyc3RSZWNlaXZlQWRkckhleCA9IFV0aWxzLmdldEhleEFkZHJlc3NGcm9tQmFzZTU4QWRkcmVzcyhUZXN0UmVjb3ZlckRhdGEuZmlyc3RSZWNlaXZlQWRkcmVzcyk7XG4gICAgICBjb25zdCBiYXNlQWRkckhleCA9IFV0aWxzLmdldEhleEFkZHJlc3NGcm9tQmFzZTU4QWRkcmVzcyhUZXN0UmVjb3ZlckRhdGEuYmFzZUFkZHJlc3MpO1xuXG4gICAgICBjb25zdCByZXMgPSBhd2FpdCBiYXNlY29pbi5yZWNvdmVyQ29uc29saWRhdGlvbnMoe1xuICAgICAgICB1c2VyS2V5OiBUZXN0UmVjb3ZlckRhdGEudXNlcktleSxcbiAgICAgICAgYmFja3VwS2V5OiBUZXN0UmVjb3ZlckRhdGEuYmFja3VwS2V5LFxuICAgICAgICBiaXRnb0tleTogVGVzdFJlY292ZXJEYXRhLmJpdGdvS2V5LFxuICAgICAgICBzdGFydGluZ1NjYW5JbmRleDogMSxcbiAgICAgICAgZW5kaW5nU2NhbkluZGV4OiAzLFxuICAgICAgfSk7XG5cbiAgICAgIGFzc2VydC5ub3RFcXVhbChyZXMubGVuZ3RoLCAwKTtcbiAgICAgIGFzc2VydC5vayhPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocmVzLCAndHJhbnNhY3Rpb25zJykpO1xuICAgICAgYXNzZXJ0LmVxdWFsKHJlcy50cmFuc2FjdGlvbnMubGVuZ3RoLCAxKTtcbiAgICAgIGNvbnN0IHR4bjEgPSByZXMudHJhbnNhY3Rpb25zWzBdO1xuICAgICAgY29uc3QgcmF3RGF0YTEgPSBKU09OLnBhcnNlKHR4bjEudHhIZXgpLnJhd19kYXRhO1xuICAgICAgYXNzZXJ0Lm9rKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChyYXdEYXRhMSwgJ2NvbnRyYWN0JykpO1xuICAgICAgY29uc3QgdmFsdWUxID0gcmF3RGF0YTEuY29udHJhY3RbMF0ucGFyYW1ldGVyLnZhbHVlO1xuICAgICAgYXNzZXJ0LmVxdWFsKHZhbHVlMS5hbW91bnQsIDEwMDAwMDAwMCk7XG4gICAgICBhc3NlcnQuZXF1YWwoVXRpbHMuZ2V0QmFzZTU4QWRkcmVzc0Zyb21IZXgodmFsdWUxLm93bmVyX2FkZHJlc3MpLCBUZXN0UmVjb3ZlckRhdGEuZmlyc3RSZWNlaXZlQWRkcmVzcyk7XG4gICAgICBhc3NlcnQuZXF1YWwoVXRpbHMuZ2V0QmFzZTU4QWRkcmVzc0Zyb21IZXgodmFsdWUxLnRvX2FkZHJlc3MpLCBUZXN0UmVjb3ZlckRhdGEuYmFzZUFkZHJlc3MpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnVFNTIFJlY292ZXJ5JywgKCkgPT4ge1xuICAgIGFmdGVyRWFjaCgoKSA9PiB7XG4gICAgICBtb2NrLnJlc2V0KCk7XG4gICAgfSk7XG5cbiAgICBjb25zdCB3YWxsZXRBZGRySGV4ID0gVXRpbHMuZ2V0SGV4QWRkcmVzc0Zyb21CYXNlNThBZGRyZXNzKFRzc1Rlc3RSZWNvdmVyRGF0YS53YWxsZXRBZGRyZXNzKTtcbiAgICBjb25zdCBkZXN0aW5hdGlvbkhleCA9IFV0aWxzLmdldEhleEFkZHJlc3NGcm9tQmFzZTU4QWRkcmVzcyhUc3NUZXN0UmVjb3ZlckRhdGEucmVjb3ZlcnlEZXN0aW5hdGlvbik7XG5cbiAgICBpdCgnc2hvdWxkIHJlY292ZXIgVFJYIGZyb20gVFNTIHdhbGxldCAodW5zaWduZWQgc3dlZXApJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgbW9jay5tZXRob2QoVHJ4LnByb3RvdHlwZSBhcyBhbnksICdnZXRBY2NvdW50QmFsYW5jZXNGcm9tTm9kZScsICgpID0+IHtcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShiYXNlQWRkcmVzc0JhbGFuY2UoMzAwMDAwMCkpO1xuICAgICAgfSk7XG5cbiAgICAgIG1vY2subWV0aG9kKFRyeC5wcm90b3R5cGUgYXMgYW55LCAnZ2V0QnVpbGRUcmFuc2FjdGlvbicsICguLi5hcmdzKSA9PiB7XG4gICAgICAgIGlmIChhcmdzWzBdID09PSBkZXN0aW5hdGlvbkhleCAmJiBhcmdzWzFdID09PSB3YWxsZXRBZGRySGV4ICYmIGFyZ3NbMl0gPT09IDkwMDAwMCkge1xuICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoY3JlYXRpb25UcmFuc2FjdGlvbih3YWxsZXRBZGRySGV4LCBkZXN0aW5hdGlvbkhleCwgOTAwMDAwKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgIH0pO1xuXG4gICAgICBjb25zdCByZXMgPSBhd2FpdCBiYXNlY29pbi5yZWNvdmVyKHtcbiAgICAgICAgdXNlcktleTogVHNzVGVzdFJlY292ZXJEYXRhLnVzZXJLZXksXG4gICAgICAgIGJhY2t1cEtleTogVHNzVGVzdFJlY292ZXJEYXRhLmJhY2t1cEtleSxcbiAgICAgICAgYml0Z29LZXk6IFRzc1Rlc3RSZWNvdmVyRGF0YS5iaXRnb0tleSxcbiAgICAgICAgcmVjb3ZlcnlEZXN0aW5hdGlvbjogVHNzVGVzdFJlY292ZXJEYXRhLnJlY292ZXJ5RGVzdGluYXRpb24sXG4gICAgICAgIGlzVHNzOiB0cnVlLFxuICAgICAgfSk7XG5cbiAgICAgIGFzc2VydC5vayhPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocmVzLCAndHhIZXgnKSk7XG4gICAgICBhc3NlcnQub2soT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHJlcywgJ2ZlZUluZm8nKSk7XG4gICAgICBhc3NlcnQuZXF1YWwocmVzLnJlY292ZXJ5QW1vdW50LCA5MDAwMDApO1xuICAgICAgY29uc3QgcmF3RGF0YSA9IEpTT04ucGFyc2UocmVzLnR4SGV4KS5yYXdfZGF0YTtcbiAgICAgIGFzc2VydC5vayhPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocmF3RGF0YSwgJ2NvbnRyYWN0JykpO1xuICAgICAgY29uc3QgdmFsdWUgPSByYXdEYXRhLmNvbnRyYWN0WzBdLnBhcmFtZXRlci52YWx1ZTtcbiAgICAgIGFzc2VydC5lcXVhbCh2YWx1ZS5hbW91bnQsIDkwMDAwMCk7XG4gICAgICBhc3NlcnQuZXF1YWwoVXRpbHMuZ2V0QmFzZTU4QWRkcmVzc0Zyb21IZXgodmFsdWUub3duZXJfYWRkcmVzcyksIFRzc1Rlc3RSZWNvdmVyRGF0YS53YWxsZXRBZGRyZXNzKTtcbiAgICAgIGFzc2VydC5lcXVhbChVdGlscy5nZXRCYXNlNThBZGRyZXNzRnJvbUhleCh2YWx1ZS50b19hZGRyZXNzKSwgVHNzVGVzdFJlY292ZXJEYXRhLnJlY292ZXJ5RGVzdGluYXRpb24pO1xuICAgICAgLy8gdW5zaWduZWQgc3dlZXA6IG5vIHNpZ25hdHVyZXNcbiAgICAgIGNvbnN0IHNpZyA9IEpTT04ucGFyc2UocmVzLnR4SGV4KS5zaWduYXR1cmU7XG4gICAgICBhc3NlcnQub2soIXNpZyB8fCBzaWcubGVuZ3RoID09PSAwKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgcmVjb3ZlciBUUlggZnJvbSBUU1Mgd2FsbGV0IChzaWduZWQgcmVjb3ZlcnkpJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgbW9jay5tZXRob2QoVHJ4LnByb3RvdHlwZSBhcyBhbnksICdnZXRBY2NvdW50QmFsYW5jZXNGcm9tTm9kZScsICgpID0+IHtcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShiYXNlQWRkcmVzc0JhbGFuY2UoMzAwMDAwMCkpO1xuICAgICAgfSk7XG5cbiAgICAgIG1vY2subWV0aG9kKFRyeC5wcm90b3R5cGUgYXMgYW55LCAnZ2V0QnVpbGRUcmFuc2FjdGlvbicsICguLi5hcmdzKSA9PiB7XG4gICAgICAgIGlmIChhcmdzWzBdID09PSBkZXN0aW5hdGlvbkhleCAmJiBhcmdzWzFdID09PSB3YWxsZXRBZGRySGV4ICYmIGFyZ3NbMl0gPT09IDkwMDAwMCkge1xuICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoY3JlYXRpb25UcmFuc2FjdGlvbih3YWxsZXRBZGRySGV4LCBkZXN0aW5hdGlvbkhleCwgOTAwMDAwKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgIH0pO1xuXG4gICAgICBtb2NrLm1ldGhvZChiaXRnbyBhcyBhbnksICdkZWNyeXB0JywgKCkgPT4ge1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKFRzc1Rlc3RSZWNvdmVyRGF0YS51c2VyUHJ2S2V5KTtcbiAgICAgIH0pO1xuXG4gICAgICBjb25zdCByZXMgPSBhd2FpdCBiYXNlY29pbi5yZWNvdmVyKHtcbiAgICAgICAgdXNlcktleTogVHNzVGVzdFJlY292ZXJEYXRhLmVuY3J5cHRlZFVzZXJLZXksXG4gICAgICAgIGJhY2t1cEtleTogVHNzVGVzdFJlY292ZXJEYXRhLmVuY3J5cHRlZFVzZXJLZXksXG4gICAgICAgIGJpdGdvS2V5OiBUc3NUZXN0UmVjb3ZlckRhdGEuYml0Z29LZXksXG4gICAgICAgIHJlY292ZXJ5RGVzdGluYXRpb246IFRzc1Rlc3RSZWNvdmVyRGF0YS5yZWNvdmVyeURlc3RpbmF0aW9uLFxuICAgICAgICB3YWxsZXRQYXNzcGhyYXNlOiBUc3NUZXN0UmVjb3ZlckRhdGEud2FsbGV0UGFzc3BocmFzZSxcbiAgICAgICAgaXNUc3M6IHRydWUsXG4gICAgICB9KTtcblxuICAgICAgYXNzZXJ0Lm9rKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChyZXMsICd0eEhleCcpKTtcbiAgICAgIGFzc2VydC5vayhPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocmVzLCAnZmVlSW5mbycpKTtcbiAgICAgIGFzc2VydC5lcXVhbChyZXMucmVjb3ZlcnlBbW91bnQsIDkwMDAwMCk7XG4gICAgICBjb25zdCByYXdEYXRhID0gSlNPTi5wYXJzZShyZXMudHhIZXgpLnJhd19kYXRhO1xuICAgICAgY29uc3QgdmFsdWUgPSByYXdEYXRhLmNvbnRyYWN0WzBdLnBhcmFtZXRlci52YWx1ZTtcbiAgICAgIGFzc2VydC5lcXVhbCh2YWx1ZS5hbW91bnQsIDkwMDAwMCk7XG4gICAgICBhc3NlcnQuZXF1YWwoVXRpbHMuZ2V0QmFzZTU4QWRkcmVzc0Zyb21IZXgodmFsdWUub3duZXJfYWRkcmVzcyksIFRzc1Rlc3RSZWNvdmVyRGF0YS53YWxsZXRBZGRyZXNzKTtcbiAgICAgIGFzc2VydC5lcXVhbChVdGlscy5nZXRCYXNlNThBZGRyZXNzRnJvbUhleCh2YWx1ZS50b19hZGRyZXNzKSwgVHNzVGVzdFJlY292ZXJEYXRhLnJlY292ZXJ5RGVzdGluYXRpb24pO1xuICAgICAgLy8gc2lnbmVkIHJlY292ZXJ5OiBzaG91bGQgaGF2ZSBleGFjdGx5IDEgc2lnbmF0dXJlXG4gICAgICBjb25zdCBzaWcgPSBKU09OLnBhcnNlKHJlcy50eEhleCkuc2lnbmF0dXJlO1xuICAgICAgYXNzZXJ0LmVxdWFsKHNpZy5sZW5ndGgsIDEpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCByZWNvdmVyIFRSQy0yMCB0b2tlbiBmcm9tIFRTUyB3YWxsZXQgKHVuc2lnbmVkIHN3ZWVwKScsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIG1vY2subWV0aG9kKFRyeC5wcm90b3R5cGUgYXMgYW55LCAnZ2V0QWNjb3VudEJhbGFuY2VzRnJvbU5vZGUnLCAoKSA9PiB7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoXG4gICAgICAgICAgYmFzZUFkZHJlc3NCYWxhbmNlKDEwMDAwMDAwMCwgW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBURzNYWHlFeEJrUHA5bnpkYWpEWnNvekV1NEJrYVNKb3pzOiAnMTEwMDAwMDAwMCcsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIF0pXG4gICAgICAgICk7XG4gICAgICB9KTtcblxuICAgICAgbW9jay5tZXRob2QoVHJ4LnByb3RvdHlwZSBhcyBhbnksICdnZXRUcmlnZ2VyU21hcnRDb250cmFjdFRyYW5zYWN0aW9uJywgKCkgPT4ge1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKFNhbXBsZVJhd1Rva2VuU2VuZFR4bik7XG4gICAgICB9KTtcblxuICAgICAgY29uc3QgcmVzID0gYXdhaXQgYmFzZWNvaW4ucmVjb3Zlcih7XG4gICAgICAgIHVzZXJLZXk6IFRzc1Rlc3RSZWNvdmVyRGF0YS51c2VyS2V5LFxuICAgICAgICBiYWNrdXBLZXk6IFRzc1Rlc3RSZWNvdmVyRGF0YS5iYWNrdXBLZXksXG4gICAgICAgIGJpdGdvS2V5OiBUc3NUZXN0UmVjb3ZlckRhdGEuYml0Z29LZXksXG4gICAgICAgIHRva2VuQ29udHJhY3RBZGRyZXNzOiAnVEczWFh5RXhCa1BwOW56ZGFqRFpzb3pFdTRCa2FTSm96cycsXG4gICAgICAgIHJlY292ZXJ5RGVzdGluYXRpb246IFRzc1Rlc3RSZWNvdmVyRGF0YS5yZWNvdmVyeURlc3RpbmF0aW9uLFxuICAgICAgICBpc1RzczogdHJ1ZSxcbiAgICAgIH0pO1xuXG4gICAgICBhc3NlcnQub2soT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHJlcywgJ3R4SGV4JykpO1xuICAgICAgYXNzZXJ0LmVxdWFsKHJlcy5yZWNvdmVyeUFtb3VudCwgMTEwMDAwMDAwMCk7XG4gICAgICBhc3NlcnQuZXF1YWwocmVzLmZlZUluZm8uZmVlLCAnMTAwMDAwMDAwJyk7XG4gICAgICBjb25zdCBleHBpcmF0aW9uRHVyYXRpb24gPSByZXMudHgucmF3X2RhdGEuZXhwaXJhdGlvbiAtIHJlcy50eC5yYXdfZGF0YS50aW1lc3RhbXA7XG4gICAgICBhc3NlcnQub2soZXhwaXJhdGlvbkR1cmF0aW9uID49IDg2NDAwMDAwKTtcbiAgICAgIC8vIHVuc2lnbmVkIHN3ZWVwOiBubyBzaWduYXR1cmVzXG4gICAgICBjb25zdCBzaWcgPSBKU09OLnBhcnNlKHJlcy50eEhleCkuc2lnbmF0dXJlO1xuICAgICAgYXNzZXJ0Lm9rKCFzaWcgfHwgc2lnLmxlbmd0aCA9PT0gMCk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHJlY292ZXIgVFJDLTIwIHRva2VuIGZyb20gVFNTIHdhbGxldCAoc2lnbmVkIHJlY292ZXJ5KScsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIG1vY2subWV0aG9kKFRyeC5wcm90b3R5cGUgYXMgYW55LCAnZ2V0QWNjb3VudEJhbGFuY2VzRnJvbU5vZGUnLCAoKSA9PiB7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoXG4gICAgICAgICAgYmFzZUFkZHJlc3NCYWxhbmNlKDEwMDAwMDAwMCwgW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBURzNYWHlFeEJrUHA5bnpkYWpEWnNvekV1NEJrYVNKb3pzOiAnMTEwMDAwMDAwMCcsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIF0pXG4gICAgICAgICk7XG4gICAgICB9KTtcblxuICAgICAgbW9jay5tZXRob2QoVHJ4LnByb3RvdHlwZSBhcyBhbnksICdnZXRUcmlnZ2VyU21hcnRDb250cmFjdFRyYW5zYWN0aW9uJywgKCkgPT4ge1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKFNhbXBsZVJhd1Rva2VuU2VuZFR4bik7XG4gICAgICB9KTtcblxuICAgICAgbW9jay5tZXRob2QoYml0Z28gYXMgYW55LCAnZGVjcnlwdCcsICgpID0+IHtcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShUc3NUZXN0UmVjb3ZlckRhdGEudXNlclBydktleSk7XG4gICAgICB9KTtcblxuICAgICAgY29uc3QgcmVzID0gYXdhaXQgYmFzZWNvaW4ucmVjb3Zlcih7XG4gICAgICAgIHVzZXJLZXk6IFRzc1Rlc3RSZWNvdmVyRGF0YS5lbmNyeXB0ZWRVc2VyS2V5LFxuICAgICAgICBiYWNrdXBLZXk6IFRzc1Rlc3RSZWNvdmVyRGF0YS5lbmNyeXB0ZWRVc2VyS2V5LFxuICAgICAgICBiaXRnb0tleTogVHNzVGVzdFJlY292ZXJEYXRhLmJpdGdvS2V5LFxuICAgICAgICB0b2tlbkNvbnRyYWN0QWRkcmVzczogJ1RHM1hYeUV4QmtQcDluemRhakRac296RXU0QmthU0pvenMnLFxuICAgICAgICByZWNvdmVyeURlc3RpbmF0aW9uOiBUc3NUZXN0UmVjb3ZlckRhdGEucmVjb3ZlcnlEZXN0aW5hdGlvbixcbiAgICAgICAgd2FsbGV0UGFzc3BocmFzZTogVHNzVGVzdFJlY292ZXJEYXRhLndhbGxldFBhc3NwaHJhc2UsXG4gICAgICAgIGlzVHNzOiB0cnVlLFxuICAgICAgfSk7XG5cbiAgICAgIGFzc2VydC5vayhPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocmVzLCAndHhIZXgnKSk7XG4gICAgICBhc3NlcnQuZXF1YWwocmVzLnJlY292ZXJ5QW1vdW50LCAxMTAwMDAwMDAwKTtcbiAgICAgIGFzc2VydC5lcXVhbChyZXMuZmVlSW5mby5mZWUsICcxMDAwMDAwMDAnKTtcbiAgICAgIC8vIHNpZ25lZCByZWNvdmVyeTogc2hvdWxkIGhhdmUgZXhhY3RseSAxIHNpZ25hdHVyZVxuICAgICAgY29uc3Qgc2lnID0gSlNPTi5wYXJzZShyZXMudHhIZXgpLnNpZ25hdHVyZTtcbiAgICAgIGFzc2VydC5lcXVhbChzaWcubGVuZ3RoLCAxKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgdGhyb3cgaWYgVFNTIHdhbGxldCBoYXMgaW5zdWZmaWNpZW50IGJhbGFuY2UnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBtb2NrLm1ldGhvZChUcngucHJvdG90eXBlIGFzIGFueSwgJ2dldEFjY291bnRCYWxhbmNlc0Zyb21Ob2RlJywgKCkgPT4ge1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGJhc2VBZGRyZXNzQmFsYW5jZSgxMDAwMDAwKSk7IC8vIGxlc3MgdGhhbiBTQUZFX1RST05fVFJBTlNBQ1RJT05fRkVFICgyLjFlNilcbiAgICAgIH0pO1xuXG4gICAgICBhd2FpdCBhc3NlcnQucmVqZWN0cyhcbiAgICAgICAgYmFzZWNvaW4ucmVjb3Zlcih7XG4gICAgICAgICAgdXNlcktleTogVHNzVGVzdFJlY292ZXJEYXRhLnVzZXJLZXksXG4gICAgICAgICAgYmFja3VwS2V5OiBUc3NUZXN0UmVjb3ZlckRhdGEuYmFja3VwS2V5LFxuICAgICAgICAgIGJpdGdvS2V5OiBUc3NUZXN0UmVjb3ZlckRhdGEuYml0Z29LZXksXG4gICAgICAgICAgcmVjb3ZlcnlEZXN0aW5hdGlvbjogVHNzVGVzdFJlY292ZXJEYXRhLnJlY292ZXJ5RGVzdGluYXRpb24sXG4gICAgICAgICAgaXNUc3M6IHRydWUsXG4gICAgICAgIH0pLFxuICAgICAgICB7XG4gICAgICAgICAgbWVzc2FnZTogXCJBbW91bnQgb2YgZnVuZHMgdG8gcmVjb3ZlciAxMDAwMDAwIGlzIGxlc3MgdGhhbiAyMTAwMDAwIGFuZCB3b3VsZG4ndCBiZSBhYmxlIHRvIGZ1bmQgYSBzZW5kXCIsXG4gICAgICAgIH1cbiAgICAgICk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHRocm93IGlmIFRSQy0yMCB0b2tlbiBub3QgZm91bmQgZm9yIFRTUyB3YWxsZXQnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBtb2NrLm1ldGhvZChUcngucHJvdG90eXBlIGFzIGFueSwgJ2dldEFjY291bnRCYWxhbmNlc0Zyb21Ob2RlJywgKCkgPT4ge1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGJhc2VBZGRyZXNzQmFsYW5jZSgxMDAwMDAwMDAsIFtdKSk7XG4gICAgICB9KTtcblxuICAgICAgYXdhaXQgYXNzZXJ0LnJlamVjdHMoXG4gICAgICAgIGJhc2Vjb2luLnJlY292ZXIoe1xuICAgICAgICAgIHVzZXJLZXk6IFRzc1Rlc3RSZWNvdmVyRGF0YS51c2VyS2V5LFxuICAgICAgICAgIGJhY2t1cEtleTogVHNzVGVzdFJlY292ZXJEYXRhLmJhY2t1cEtleSxcbiAgICAgICAgICBiaXRnb0tleTogVHNzVGVzdFJlY292ZXJEYXRhLmJpdGdvS2V5LFxuICAgICAgICAgIHRva2VuQ29udHJhY3RBZGRyZXNzOiAnVEczWFh5RXhCa1BwOW56ZGFqRFpzb3pFdTRCa2FTSm96cycsXG4gICAgICAgICAgcmVjb3ZlcnlEZXN0aW5hdGlvbjogVHNzVGVzdFJlY292ZXJEYXRhLnJlY292ZXJ5RGVzdGluYXRpb24sXG4gICAgICAgICAgaXNUc3M6IHRydWUsXG4gICAgICAgIH0pLFxuICAgICAgICB7XG4gICAgICAgICAgbWVzc2FnZTogJ05vdCBmb3VuZCB0b2tlbiB0byByZWNvdmVyLCBwbGVhc2UgY2hlY2sgdG9rZW4gYmFsYW5jZScsXG4gICAgICAgIH1cbiAgICAgICk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdpc1dhbGxldEFkZHJlc3MnLCAoKSA9PiB7XG4gICAgaXQoJ3Nob3VsZCB2ZXJpZnkgcm9vdCBhZGRyZXNzIChpbmRleCAwKScsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGJhc2Vjb2luLmlzV2FsbGV0QWRkcmVzcyh7XG4gICAgICAgIGFkZHJlc3M6IHRlc3RXYWxsZXREYXRhLnJvb3RBZGRyZXNzLFxuICAgICAgICBrZXljaGFpbnM6IHRlc3RXYWxsZXREYXRhLmtleWNoYWlucyxcbiAgICAgICAgaW5kZXg6IDAsXG4gICAgICB9KTtcbiAgICAgIGFzc2VydC5lcXVhbChyZXN1bHQsIHRydWUpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCB2ZXJpZnkgcmVjZWl2ZSBhZGRyZXNzIChpbmRleCA+IDApJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgYmFzZWNvaW4uaXNXYWxsZXRBZGRyZXNzKHtcbiAgICAgICAgYWRkcmVzczogdGVzdFdhbGxldERhdGEucmVjZWl2ZUFkZHJlc3MsXG4gICAgICAgIGtleWNoYWluczogdGVzdFdhbGxldERhdGEua2V5Y2hhaW5zLFxuICAgICAgICBpbmRleDogdGVzdFdhbGxldERhdGEucmVjZWl2ZUFkZHJlc3NJbmRleCxcbiAgICAgICAgY2hhaW46IDAsXG4gICAgICB9KTtcbiAgICAgIGFzc2VydC5lcXVhbChyZXN1bHQsIHRydWUpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCB2ZXJpZnkgYWRkcmVzcyB3aXRoIGluZGV4IGluIGNvaW5TcGVjaWZpYycsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGJhc2Vjb2luLmlzV2FsbGV0QWRkcmVzcyh7XG4gICAgICAgIGFkZHJlc3M6IHRlc3RXYWxsZXREYXRhLnJvb3RBZGRyZXNzLFxuICAgICAgICBrZXljaGFpbnM6IHRlc3RXYWxsZXREYXRhLmtleWNoYWlucyxcbiAgICAgICAgY29pblNwZWNpZmljOiB7IGluZGV4OiAwIH0sXG4gICAgICB9KTtcbiAgICAgIGFzc2VydC5lcXVhbChyZXN1bHQsIHRydWUpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCB2ZXJpZnkgYWRkcmVzcyB3aXRoIHN0cmluZyBpbmRleCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGJhc2Vjb2luLmlzV2FsbGV0QWRkcmVzcyh7XG4gICAgICAgIGFkZHJlc3M6IHRlc3RXYWxsZXREYXRhLnJvb3RBZGRyZXNzLFxuICAgICAgICBrZXljaGFpbnM6IHRlc3RXYWxsZXREYXRhLmtleWNoYWlucyxcbiAgICAgICAgaW5kZXg6ICcwJyxcbiAgICAgIH0pO1xuICAgICAgYXNzZXJ0LmVxdWFsKHJlc3VsdCwgdHJ1ZSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHJldHVybiBmYWxzZSBmb3Igd3JvbmcgYWRkcmVzcyBhdCBpbmRleCAwJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgYmFzZWNvaW4uaXNXYWxsZXRBZGRyZXNzKHtcbiAgICAgICAgYWRkcmVzczogdGVzdFdhbGxldERhdGEucmVjZWl2ZUFkZHJlc3MsIC8vIHdyb25nIGFkZHJlc3MgZm9yIGluZGV4IDBcbiAgICAgICAga2V5Y2hhaW5zOiB0ZXN0V2FsbGV0RGF0YS5rZXljaGFpbnMsXG4gICAgICAgIGluZGV4OiAwLFxuICAgICAgfSk7XG4gICAgICBhc3NlcnQuZXF1YWwocmVzdWx0LCBmYWxzZSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHJldHVybiBmYWxzZSBmb3Igd3JvbmcgYWRkcmVzcyBhdCByZWNlaXZlIGluZGV4JywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgYmFzZWNvaW4uaXNXYWxsZXRBZGRyZXNzKHtcbiAgICAgICAgYWRkcmVzczogdGVzdFdhbGxldERhdGEucm9vdEFkZHJlc3MsIC8vIHdyb25nIGFkZHJlc3MgZm9yIGluZGV4IDFcbiAgICAgICAga2V5Y2hhaW5zOiB0ZXN0V2FsbGV0RGF0YS5rZXljaGFpbnMsXG4gICAgICAgIGluZGV4OiB0ZXN0V2FsbGV0RGF0YS5yZWNlaXZlQWRkcmVzc0luZGV4LFxuICAgICAgICBjaGFpbjogMCxcbiAgICAgIH0pO1xuICAgICAgYXNzZXJ0LmVxdWFsKHJlc3VsdCwgZmFsc2UpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCB0aHJvdyBmb3IgaW52YWxpZCBhZGRyZXNzJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgYXdhaXQgYXNzZXJ0LnJlamVjdHMoXG4gICAgICAgIGJhc2Vjb2luLmlzV2FsbGV0QWRkcmVzcyh7XG4gICAgICAgICAgYWRkcmVzczogJ2ludmFsaWQtYWRkcmVzcycsXG4gICAgICAgICAga2V5Y2hhaW5zOiB0ZXN0V2FsbGV0RGF0YS5rZXljaGFpbnMsXG4gICAgICAgICAgaW5kZXg6IDAsXG4gICAgICAgIH0pLFxuICAgICAgICB7XG4gICAgICAgICAgbWVzc2FnZTogJ0ludmFsaWQgYWRkcmVzczogaW52YWxpZC1hZGRyZXNzJyxcbiAgICAgICAgfVxuICAgICAgKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgdGhyb3cgZm9yIG1pc3NpbmcgaW5kZXgnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBhd2FpdCBhc3NlcnQucmVqZWN0cyhcbiAgICAgICAgYmFzZWNvaW4uaXNXYWxsZXRBZGRyZXNzKHtcbiAgICAgICAgICBhZGRyZXNzOiB0ZXN0V2FsbGV0RGF0YS5yb290QWRkcmVzcyxcbiAgICAgICAgICBrZXljaGFpbnM6IHRlc3RXYWxsZXREYXRhLmtleWNoYWlucyxcbiAgICAgICAgfSksXG4gICAgICAgIHtcbiAgICAgICAgICBtZXNzYWdlOiAnSW52YWxpZCBvciBtaXNzaW5nIGluZGV4IGZvciBhZGRyZXNzIHZlcmlmaWNhdGlvbicsXG4gICAgICAgIH1cbiAgICAgICk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHRocm93IGZvciBtaXNzaW5nIGJpdGdvIGtleSBvbiByb290IGFkZHJlc3MgdmVyaWZpY2F0aW9uJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgYXdhaXQgYXNzZXJ0LnJlamVjdHMoXG4gICAgICAgIGJhc2Vjb2luLmlzV2FsbGV0QWRkcmVzcyh7XG4gICAgICAgICAgYWRkcmVzczogdGVzdFdhbGxldERhdGEucm9vdEFkZHJlc3MsXG4gICAgICAgICAga2V5Y2hhaW5zOiB0ZXN0V2FsbGV0RGF0YS5rZXljaGFpbnMuc2xpY2UoMCwgMiksIC8vIG9ubHkgdXNlciBhbmQgYmFja3VwIGtleXNcbiAgICAgICAgICBpbmRleDogMCxcbiAgICAgICAgfSksXG4gICAgICAgIHtcbiAgICAgICAgICBtZXNzYWdlOiAnQml0R28gcHVibGljIGtleSByZXF1aXJlZCBmb3Igcm9vdCBhZGRyZXNzIHZlcmlmaWNhdGlvbicsXG4gICAgICAgIH1cbiAgICAgICk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHRocm93IGZvciBtaXNzaW5nIHVzZXIga2V5IG9uIHJlY2VpdmUgYWRkcmVzcyB2ZXJpZmljYXRpb24nLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBhd2FpdCBhc3NlcnQucmVqZWN0cyhcbiAgICAgICAgYmFzZWNvaW4uaXNXYWxsZXRBZGRyZXNzKHtcbiAgICAgICAgICBhZGRyZXNzOiB0ZXN0V2FsbGV0RGF0YS5yZWNlaXZlQWRkcmVzcyxcbiAgICAgICAgICBrZXljaGFpbnM6IFtdLCAvLyBubyBrZXlzXG4gICAgICAgICAgaW5kZXg6IHRlc3RXYWxsZXREYXRhLnJlY2VpdmVBZGRyZXNzSW5kZXgsXG4gICAgICAgIH0pLFxuICAgICAgICB7XG4gICAgICAgICAgbWVzc2FnZTogJ1VzZXIgcHVibGljIGtleSByZXF1aXJlZCBmb3IgcmVjZWl2ZSBhZGRyZXNzIHZlcmlmaWNhdGlvbicsXG4gICAgICAgIH1cbiAgICAgICk7XG4gICAgfSk7XG4gIH0pO1xufSk7XG4iXX0=
826
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJ4LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vdGVzdC91bml0L3RyeC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLDhEQUFpQztBQUNqQyx5Q0FBa0U7QUFDbEUsaURBQStDO0FBQy9DLG1EQUErRDtBQUMvRCwwQ0FBNEI7QUFDNUIsbUNBQTZDO0FBQzdDLDBDQUFvRDtBQUNwRCw0Q0FPc0I7QUFFdEIsSUFBQSxvQkFBUSxFQUFDLE9BQU8sRUFBRTtJQUNoQixNQUFNLEtBQUssR0FBaUIsb0JBQVMsQ0FBQyxRQUFRLENBQUMsa0JBQVEsRUFBRSxFQUFFLEdBQUcsRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFDO0lBQzFFLEtBQUssQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO0lBQzNCLEtBQUssQ0FBQyxZQUFZLENBQUMsS0FBSyxFQUFFLFNBQUcsQ0FBQyxjQUFjLENBQUMsQ0FBQztJQUM5QyxLQUFLLENBQUMsWUFBWSxDQUFDLE1BQU0sRUFBRSxVQUFJLENBQUMsY0FBYyxDQUFDLENBQUM7SUFFaEQsSUFBSSxRQUFRLENBQUM7SUFFYix5REFBeUQ7SUFDekQsTUFBTSxjQUFjLEdBQUc7UUFDckIsV0FBVyxFQUFFLG9DQUFvQztRQUNqRCxjQUFjLEVBQUUsb0NBQW9DO1FBQ3BELG1CQUFtQixFQUFFLENBQUM7UUFDdEIsU0FBUyxFQUFFO1lBQ1Q7Z0JBQ0UsRUFBRSxFQUFFLGtDQUFrQztnQkFDdEMsR0FBRyxFQUFFLGlIQUFpSDthQUN2SDtZQUNEO2dCQUNFLEVBQUUsRUFBRSxrQ0FBa0M7Z0JBQ3RDLEdBQUcsRUFBRSxpSEFBaUg7YUFDdkg7WUFDRDtnQkFDRSxFQUFFLEVBQUUsa0NBQWtDO2dCQUN0QyxHQUFHLEVBQUUsaUhBQWlIO2FBQ3ZIO1NBQ0Y7S0FDRixDQUFDO0lBRUYsSUFBQSxrQkFBTSxFQUFDO1FBQ0wsUUFBUSxHQUFHLEtBQUssQ0FBQyxJ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QztnQkFDdkIsT0FBTyxFQUFFLGNBQWMsQ0FBQyxXQUFXO2dCQUNuQyxTQUFTLEVBQUUsY0FBYyxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLDRCQUE0QjtnQkFDN0UsS0FBSyxFQUFFLENBQUM7YUFDVCxDQUFDLEVBQ0Y7Z0JBQ0UsT0FBTyxFQUFFLHlEQUF5RDthQUNuRSxDQUNGLENBQUM7UUFDSixDQUFDLENBQUMsQ0FBQztRQUVILElBQUEsY0FBRSxFQUFDLG1FQUFtRSxFQUFFLEtBQUs7WUFDM0UsTUFBTSxxQkFBTSxDQUFDLE9BQU8sQ0FDbEIsUUFBUSxDQUFDLGVBQWUsQ0FBQztnQkFDdkIsT0FBTyxFQUFFLGNBQWMsQ0FBQyxjQUFjO2dCQUN0QyxTQUFTLEVBQUUsRUFBRSxFQUFFLFVBQVU7Z0JBQ3pCLEtBQUssRUFBRSxjQUFjLENBQUMsbUJBQW1CO2FBQzFDLENBQUMsRUFDRjtnQkFDRSxPQUFPLEVBQUUsMkRBQTJEO2FBQ3JFLENBQ0YsQ0FBQztRQUNKLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBhc3NlcnQgZnJvbSAnbm9kZTphc3NlcnQnO1xuaW1wb3J0IHsgYWZ0ZXJFYWNoLCBiZWZvcmUsIGRlc2NyaWJlLCBpdCwgbW9jayB9IGZyb20gJ25vZGU6dGVzdCc7XG5pbXBvcnQgeyBCaXRHb0FQSSB9IGZyb20gJ0BiaXRnby1iZXRhL3Nkay1hcGknO1xuaW1wb3J0IHsgVGVzdEJpdEdvQVBJLCBUZXN0Qml0R28gfSBmcm9tICdAYml0Z28tYmV0YS9zZGstdGVzdCc7XG5pbXBvcnQgKiBhcyBfIGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgeyBUcngsIFR0cngsIFV0aWxzIH0gZnJvbSAnLi4vLi4vc3JjJztcbmltcG9ydCB7IHNpZ25UeE9wdGlvbnMsIG1vY2tUeCB9IGZyb20gJy4uL2ZpeHR1cmVzJztcbmltcG9ydCB7XG4gIGJhc2VBZGRyZXNzQmFsYW5jZSxcbiAgU2FtcGxlUmF3VG9rZW5TZW5kVHhuLFxuICByZWNlaXZlQWRkcmVzc0JhbGFuY2UsXG4gIFRlc3RSZWNvdmVyRGF0YSxcbiAgVHNzVGVzdFJlY292ZXJEYXRhLFxuICBjcmVhdGlvblRyYW5zYWN0aW9uLFxufSBmcm9tICcuLi9yZXNvdXJjZXMnO1xuXG5kZXNjcmliZSgnVFJPTjonLCBmdW5jdGlvbiAoKSB7XG4gIGNvbnN0IGJpdGdvOiBUZXN0Qml0R29BUEkgPSBUZXN0Qml0R28uZGVjb3JhdGUoQml0R29BUEksIHsgZW52OiAndGVzdCcgfSk7XG4gIGJpdGdvLmluaXRpYWxpemVUZXN0VmFycygpO1xuICBiaXRnby5zYWZlUmVnaXN0ZXIoJ3RyeCcsIFRyeC5jcmVhdGVJbnN0YW5jZSk7XG4gIGJpdGdvLnNhZmVSZWdpc3RlcigndHRyeCcsIFR0cnguY3JlYXRlSW5zdGFuY2UpO1xuXG4gIGxldCBiYXNlY29pbjtcblxuICAvLyBUZXN0IGRhdGEgZnJvbSB3YWxsZXQgNjkzYjAxMWEzZWMyNjk4NmY1NjliMDIxNDBjNzYyN2VcbiAgY29uc3QgdGVzdFdhbGxldERhdGEgPSB7XG4gICAgcm9vdEFkZHJlc3M6ICdUQWYzNmIzNmVxb01DekpKbTNqd1NzUDgxVXZrTXhyUGJpJyxcbiAgICByZWNlaXZlQWRkcmVzczogJ1RGYUQ2RGVLRk1jQnVHdUREN0xiYnF4VG5LdW5oWGZkeWEnLFxuICAgIHJlY2VpdmVBZGRyZXNzSW5kZXg6IDIsXG4gICAga2V5Y2hhaW5zOiBbXG4gICAgICB7XG4gICAgICAgIGlkOiAnNjkzYjAxMTAyNzFmYzNmNTc0OTc1NDA5Nzc5M2JiOGQnLFxuICAgICAgICBwdWI6ICd4cHViNjYxTXlNd0FxUmJjRnNWQWRaeU4ybThwMjFXSFhnOE5STmtxS0FweVM1Z3dtRnNQZFJUcm1IWUNuelI5dlllOERRNHVXR0NCY0FBc1dFM3I5N0hzRlMzSzJmYVoyZWpYTmhIeGRFb0FFV0MnLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgaWQ6ICc2OTNiMDExMDY1YjljNDY3NDgyNWNlMWY4NDliN2JlZicsXG4gICAgICAgIHB1YjogJ3hwdWI2NjFNeU13QXFSYmNFcktwWnI5enRURkprNmZ6WFdhdE1GZ1JucFhmc2p5YldCZkU5ODQ3RVZHckhIQnNHUDhmY256Sm1KdWV2QWJQVUVwakhUakVFV2ZZVVdOTUVEYWh2c3NRZWluODQ4bycsXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBpZDogJzY5M2IwMTExN2M0MTg0NmFiYjA0ODE4ODE1Yjg5YjZjJyxcbiAgICAgICAgcHViOiAneHB1YjY2MU15TXdBcVJiY0ZxWmQ3WFU5REZXNGYyOVZKelF0N1VDQTUxeXBhV2E1eW1oUTJwUlpEVGdWaXczdlo1NlBxWjhkajFjcmFjTjNmQVdoYWlHMVFLajltdnl0OUNiYTRuTTJ0UGliTkt3JyxcbiAgICAgIH0sXG4gICAgXSxcbiAgfTtcblxuICBiZWZvcmUoZnVuY3Rpb24gKCkge1xuICAgIGJhc2Vjb2luID0gYml0Z28uY29pbigndHRyeCcpO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIGluc3RhbnRpYXRlIHRoZSBjb2luJywgZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IGJhc2Vjb2luID0gYml0Z28uY29pbigndHJ4Jyk7XG4gICAgYXNzZXJ0Lm9rKGJhc2Vjb2luIGluc3RhbmNlb2YgVHJ4KTtcbiAgfSk7XG5cbiAgaXQoJ2V4cGxhaW4gYSB0eEhleCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCB0eEhleCA9IEpTT04uc3RyaW5naWZ5KG1vY2tUeCk7XG4gICAgY29uc3QgZXhwbGFpblBhcmFtcyA9IHtcbiAgICAgIHR4SGV4LFxuICAgICAgZmVlSW5mbzogeyBmZWU6IDEgfSxcbiAgICAgIHR4SUQ6IG1vY2tUeC50eElELFxuICAgIH07XG4gICAgY29uc3QgZXhwbGFuYXRpb24gPSBhd2FpdCBiYXNlY29pbi5leHBsYWluVHJhbnNhY3Rpb24oZXhwbGFpblBhcmFtcyk7XG4gICAgY29uc3QgdG9BZGRyZXNzID0gVXRpbHMuZ2V0QmFzZTU4QWRkcmVzc0Zyb21IZXgobW9ja1R4LnJhd19kYXRhLmNvbnRyYWN0WzBdLnBhcmFtZXRlci52YWx1ZS50b19hZGRyZXNzKTtcbiAgICBhc3NlcnQuZXF1YWwoZXhwbGFuYXRpb24uaWQsIG1vY2tUeC50eElEKTtcbiAgICBhc3NlcnQuZXF1YWwoZXhwbGFuYXRpb24ub3V0cHV0cy5sZW5ndGgsIDEpO1xuICAgIGFzc2VydC5lcXVhbChleHBsYW5hdGlvbi5vdXRwdXRzWzBdLmFtb3VudCwgJzEwJyk7XG4gICAgYXNzZXJ0LmVxdWFsKGV4cGxhbmF0aW9uLm91dHB1dHNbMF0uYWRkcmVzcywgdG9BZGRyZXNzKTtcbiAgICBhc3NlcnQuZXF1YWwoZXhwbGFuYXRpb24ub3V0cHV0QW1vdW50LCAnMTAnKTtcbiAgICBhc3NlcnQuZXF1YWwoZXhwbGFuYXRpb24uY2hhbmdlQW1vdW50LCAnMCcpO1xuICAgIGFzc2VydC5lcXVhbChleHBsYW5hdGlvbi5jaGFuZ2VPdXRwdXRzLmxlbmd0aCwgMCk7XG4gICAgYXNzZXJ0LmVxdWFsKGV4cGxhbmF0aW9uLmZlZS5mZWUsIDEpO1xuICAgIGFzc2VydC5lcXVhbChleHBsYW5hdGlvbi5leHBpcmF0aW9uLCBtb2NrVHgucmF3X2RhdGEuZXhwaXJhdGlvbik7XG4gICAgYXNzZXJ0LmVxdWFsKGV4cGxhbmF0aW9uLnRpbWVzdGFtcCwgbW9ja1R4LnJhd19kYXRhLnRpbWVzdGFtcCk7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgY2hlY2sgdmFsaWQgYWRkcmVzc2VzJywgZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IGJhZEFkZHJlc3NlcyA9IFtcbiAgICAgICcnLFxuICAgICAgbnVsbCxcbiAgICAgICd4eHh4JyxcbiAgICAgICdZWjA5ZmQtJyxcbiAgICAgICc0MTJDMkJBNEE5RkY2QzUzMjA3REM1QjY4NkJGRUNGNzVFQTdCODA1NzcyJywgLy8gNDMgaGV4IGNoYXJzIOKAlCB0b28gbG9uZ1xuICAgICAgJzQxMkMyQkE0QTlGRjZDNTMyMDdEQzVCNjg2QkZFQ0Y3NUVBN0I4MCcsIC8vIHRvbyBzaG9ydFxuICAgICAgJ1RCQ2h3S1lOYVRvNGE0TjY4TWUxcUVpaUtzUkRzcFhxTExaJywgLy8gaW52YWxpZCBiYXNlNTggY2hlY2tzdW1cbiAgICAgICcweDM0MXFnMzkyMmIxJywgLy8gbm9uLWhleFxuICAgICAgJzk2YmUxMTM5OTJiZGMzYmUyNGMxMWY2MDE3MDg1YjYwNWQyNTM2NDknLCAvLyBiYXJlIDIwLWJ5dGUg4oCUIG5vdCBhbiBvbi1jaGFpbiBhZGRyZXNzIGZvcm1cbiAgICBdO1xuICAgIC8vIGJhc2U1OCBhbmQgaGV4ICgweCAvIDQxKSBhcmUgYWx0ZXJuYXRpdmUgZW5jb2RpbmdzIG9mIHRoZSBzYW1lIGFkZHJlc3MgKENPSU5TLTE1NzUpXG4gICAgY29uc3QgZ29vZEFkZHJlc3NlcyA9IFtcbiAgICAgICdUQkNod0tZTmFUbzRhNE42OE1lMXFFaWlLc1JEc3BYcUxwJyxcbiAgICAgICdUUGNmNWp0WVVoQ04xWDE0dE41Nzd6RjROZXBiRFpieFQ3JyxcbiAgICAgICcweDk2YmUxMTM5OTJiZGMzYmUyNGMxMWY2MDE3MDg1YjYwNWQyNTM2NDknLFxuICAgICAgJzQxRTBDMEY1ODFEN0QwMkQ0MDgyNkMxQzZDQkVFNzFGNjI1RDYzNDREMCcsXG4gICAgICAnNDEyQzJCQTRBOUZGNkM1MzIwN0RDNUI2ODZCRkVDRjc1RUE3QjgwNTc3JyxcbiAgICAgICc0MTg4NDBFNkM1NUI5QURBMzI2RDIxMUQ4MThDMzRBOTk0QUVDRUQ4MDgnLFxuICAgICAgJzQxMkEyQjlGNzY0MUQwNzUwQzFFODIyRDBFNDlFRjc2NUM4MTA2NTI0QicsXG4gICAgICAnNDFBNjE0RjgwM0I2RkQ3ODA5ODZBNDJDNzhFQzlDN0Y3N0U2REVEMTNDJyxcbiAgICBdO1xuXG4gICAgYmFkQWRkcmVzc2VzLm1hcCgoYWRkcikgPT4ge1xuICAgICAgYXNzZXJ0LmVxdWFsKGJhc2Vjb2luLmlzVmFsaWRBZGRyZXNzKGFkZHIgYXMgc3RyaW5nKSwgZmFsc2UpO1xuICAgIH0pO1xuICAgIGdvb2RBZGRyZXNzZXMubWFwKChhZGRyKSA9PiB7XG4gICAgICBhc3NlcnQuZXF1YWwoYmFzZWNvaW4uaXNWYWxpZEFkZHJlc3MoYWRkciksIHRydWUpO1xuICAgIH0pO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIGNhbm9uaWNhbGl6ZSBoZXggYWRkcmVzc2VzIHRvIGJhc2U1OCAoQ09JTlMtMTU3NSknLCBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3QgYmFzZTU4ID0gJ1RHYWk1dUhnQmNvTEVScnpEWE1lcHFaQjhFdDdEOG5WOEsnO1xuICAgIGNvbnN0IGhleDQxID0gJzQxNDg4Nzk3NGY0MmE3ODllZjZkNGRmYzdiYTI4YjE1ODMyMTk0MzRiMyc7XG4gICAgY29uc3QgaGV4MHggPSAnMHg0ODg3OTc0ZjQyYTc4OWVmNmQ0ZGZjN2JhMjhiMTU4MzIxOTQzNGIzJztcblxuICAgIGFzc2VydC5lcXVhbChiYXNlY29pbi5jYW5vbmljYWxBZGRyZXNzKGJhc2U1OCksIGJhc2U1OCk7XG4gICAgYXNzZXJ0LmVxdWFsKGJhc2Vjb2luLmNhbm9uaWNhbEFkZHJlc3MoaGV4NDEpLCBiYXNlNTgpO1xuICAgIGFzc2VydC5lcXVhbChiYXNlY29pbi5jYW5vbmljYWxBZGRyZXNzKGhleDB4KSwgYmFzZTU4KTtcbiAgICBhc3NlcnQuZXF1YWwoYmFzZWNvaW4uY2Fub25pY2FsQWRkcmVzcygnbm90LWFuLWFkZHJlc3MnKSwgJ25vdC1hbi1hZGRyZXNzJyk7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgcmVqZWN0IGhleCBmb3JtcyBpbiBzdHJpY3QgQmFzZTU4IG1vZGUnLCBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3QgYmFzZTU4ID0gJ1RHYWk1dUhnQmNvTEVScnpEWE1lcHFaQjhFdDdEOG5WOEsnO1xuICAgIGNvbnN0IGhleDQxID0gJzQxNDg4Nzk3NGY0MmE3ODllZjZkNGRmYzdiYTI4YjE1ODMyMTk0MzRiMyc7XG4gICAgY29uc3QgaGV4MHggPSAnMHg0ODg3OTc0ZjQyYTc4OWVmNmQ0ZGZjN2JhMjhiMTU4MzIxOTQzNGIzJztcblxuICAgIC8vIGRlZmF1bHQgYmVoYXZpb3IgdW5jaGFuZ2VkOiBhbGwgdGhyZWUgZm9ybXMgYWNjZXB0ZWRcbiAgICBhc3NlcnQuZXF1YWwoYmFzZWNvaW4uaXNWYWxpZEFkZHJlc3MoYmFzZTU4KSwgdHJ1ZSk7XG4gICAgYXNzZXJ0LmVxdWFsKGJhc2Vjb2luLmlzVmFsaWRBZGRyZXNzKGhleDQxKSwgdHJ1ZSk7XG4gICAgYXNzZXJ0LmVxdWFsKGJhc2Vjb2luLmlzVmFsaWRBZGRyZXNzKGhleDB4KSwgdHJ1ZSk7XG5cbiAgICAvLyBzdHJpY3RCYXNlNTg6IG9ubHkgY2Fub25pY2FsIEJhc2U1OCBhY2NlcHRlZFxuICAgIGFzc2VydC5lcXVhbChiYXNlY29pbi5pc1ZhbGlkQWRkcmVzcyhiYXNlNTgsIHsgc3RyaWN0QmFzZTU4OiB0cnVlIH0pLCB0cnVlKTtcbiAgICBhc3NlcnQuZXF1YWwoYmFzZWNvaW4uaXNWYWxpZEFkZHJlc3MoaGV4NDEsIHsgc3RyaWN0QmFzZTU4OiB0cnVlIH0pLCBmYWxzZSk7XG4gICAgYXNzZXJ0LmVxdWFsKGJhc2Vjb2luLmlzVmFsaWRBZGRyZXNzKGhleDB4LCB7IHN0cmljdEJhc2U1ODogdHJ1ZSB9KSwgZmFsc2UpO1xuICAgIGFzc2VydC5lcXVhbChiYXNlY29pbi5pc1ZhbGlkQWRkcmVzcygnJywgeyBzdHJpY3RCYXNlNTg6IHRydWUgfSksIGZhbHNlKTtcbiAgICBhc3NlcnQuZXF1YWwoYmFzZWNvaW4uaXNWYWxpZEFkZHJlc3MoJ1RCQ2h3S1lOYVRvNGE0TjY4TWUxcUVpaUtzUkRzcFhxTExaJywgeyBzdHJpY3RCYXNlNTg6IHRydWUgfSksIGZhbHNlKTtcblxuICAgIC8vIGV4cGxpY2l0IGZhbHNlIGtlZXBzIGxlbmllbnQgYmVoYXZpb3JcbiAgICBhc3NlcnQuZXF1YWwoYmFzZWNvaW4uaXNWYWxpZEFkZHJlc3MoaGV4MHgsIHsgc3RyaWN0QmFzZTU4OiBmYWxzZSB9KSwgdHJ1ZSk7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgdGhyb3cgaWYgdGhlIHBhcmFtcyBvYmplY3QgaXMgbWlzc2luZyBwYXJhbWV0ZXJzJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IGV4cGxhaW5QYXJhbXMgPSB7XG4gICAgICBmZWVJbmZvOiB7IGZlZTogMSB9LFxuICAgICAgdHhJRDogbW9ja1R4LnR4SUQsXG4gICAgICB0eEhleDogbnVsbCxcbiAgICB9O1xuICAgIGF3YWl0IGFzc2VydC5yZWplY3RzKGJhc2Vjb2luLmV4cGxhaW5UcmFuc2FjdGlvbihleHBsYWluUGFyYW1zKSwge1xuICAgICAgbWVzc2FnZTogJ21pc3NpbmcgZXhwbGFpbiB0eCBwYXJhbWV0ZXJzJyxcbiAgICB9KTtcbiAgfSk7XG5cbiAgaXQoJ2V4cGxhaW4gYW4gaGFsZi1zaWduZWQvZnVsbHkgc2lnbmVkIHRyYW5zYWN0aW9uJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IHR4SGV4ID0gSlNPTi5zdHJpbmdpZnkobW9ja1R4KTtcbiAgICBjb25zdCBleHBsYWluUGFyYW1zID0ge1xuICAgICAgaGFsZlNpZ25lZDogeyB0eEhleCB9LFxuICAgICAgZmVlSW5mbzogeyBmZWU6IDEgfSxcbiAgICAgIHR4SUQ6IG1vY2tUeC50eElELFxuICAgIH07XG4gICAgY29uc3QgZXhwbGFuYXRpb24gPSBhd2FpdCBiYXNlY29pbi5leHBsYWluVHJhbnNhY3Rpb24oZXhwbGFpblBhcmFtcyk7XG4gICAgY29uc3QgdG9BZGRyZXNzID0gVXRpbHMuZ2V0QmFzZTU4QWRkcmVzc0Zyb21IZXgobW9ja1R4LnJhd19kYXRhLmNvbnRyYWN0WzBdLnBhcmFtZXRlci52YWx1ZS50b19hZGRyZXNzKTtcbiAgICBhc3NlcnQuZXF1YWwoZXhwbGFuYXRpb24uaWQsIG1vY2tUeC50eElEKTtcbiAgICBhc3NlcnQuZXF1YWwoZXhwbGFuYXRpb24ub3V0cHV0cy5sZW5ndGgsIDEpO1xuICAgIGFzc2VydC5lcXVhbChleHBsYW5hdGlvbi5vdXRwdXRzWzBdLmFtb3VudCwgJzEwJyk7XG4gICAgYXNzZXJ0LmVxdWFsKGV4cGxhbmF0aW9uLm91dHB1dHNbMF0uYWRkcmVzcywgdG9BZGRyZXNzKTtcbiAgICBhc3NlcnQuZXF1YWwoZXhwbGFuYXRpb24ub3V0cHV0QW1vdW50LCAnMTAnKTtcbiAgICBhc3NlcnQuZXF1YWwoZXhwbGFuYXRpb24uY2hhbmdlQW1vdW50LCAnMCcpO1xuICAgIGFzc2VydC5lcXVhbChleHBsYW5hdGlvbi5jaGFuZ2VPdXRwdXRzLmxlbmd0aCwgMCk7XG4gICAgYXNzZXJ0LmVxdWFsKGV4cGxhbmF0aW9uLmZlZS5mZWUsIDEpO1xuICAgIGFzc2VydC5lcXVhbChleHBsYW5hdGlvbi5leHBpcmF0aW9uLCBtb2NrVHgucmF3X2RhdGEuZXhwaXJhdGlvbik7XG4gICAgYXNzZXJ0LmVxdWFsKGV4cGxhbmF0aW9uLnRpbWVzdGFtcCwgbW9ja1R4LnJhd19kYXRhLnRpbWVzdGFtcCk7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgc2lnbiBhIGhhbGYgc2lnbmVkIHR4JywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IHR4ID0gYXdhaXQgYmFzZWNvaW4uc2lnblRyYW5zYWN0aW9uKHNpZ25UeE9wdGlvbnMpO1xuICAgIGNvbnN0IHVuc2lnbmVkVHhKc29uID0gSlNPTi5wYXJzZShzaWduVHhPcHRpb25zLnR4UHJlYnVpbGQudHhIZXgpO1xuICAgIGNvbnN0IHNpZ25lZFR4SnNvbiA9IEpTT04ucGFyc2UodHguaGFsZlNpZ25lZC50eEhleCk7XG5cbiAgICBhc3NlcnQuZXF1YWwoc2lnbmVkVHhKc29uLnR4SUQsIHVuc2lnbmVkVHhKc29uLnR4SUQpO1xuICAgIGFzc2VydC5lcXVhbChzaWduZWRUeEpzb24ucmF3X2RhdGFfaGV4LCB1bnNpZ25lZFR4SnNvbi5yYXdfZGF0YV9oZXgpO1xuICAgIGFzc2VydC5kZWVwU3RyaWN0RXF1YWwoSlNPTi5zdHJpbmdpZnkoc2lnbmVkVHhKc29uLnJhd19kYXRhKSwgSlNPTi5zdHJpbmdpZnkodW5zaWduZWRUeEpzb24ucmF3X2RhdGEpKTtcbiAgICBhc3NlcnQuZXF1YWwoc2lnbmVkVHhKc29uLnNpZ25hdHVyZS5sZW5ndGgsIDEpO1xuICAgIGFzc2VydC5lcXVhbChcbiAgICAgIHNpZ25lZFR4SnNvbi5zaWduYXR1cmVbMF0sXG4gICAgICAnMGE5OTQ0MzE2OTI0ZWM3ZmJhNDg5NWYxZWExZTdjYzk1ZjllMmI4MjhhZTI2OGE0OGE4ZGJlZGRlZjQwYzZmNWUxMjcxNzBhOTVhZWQ5ZjNmNTQyNWIxMzA1OGQwY2I2ZWYxZjVjMjIxMzE5MGU0ODJlODcwNDM2OTFmMjJlNjgwMCdcbiAgICApO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIHNpZ24gd2l0aCBhbiBYcHJ2IGEgaGFsZiBzaWduZWQgdHgnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3QgcCA9IHtcbiAgICAgIHBydjogJ3hwcnY5czIxWnJRSDE0M0syc2cyQ3VrazVYcUxRZHJZbk1DRGFoM3kxRkZWeTZIejliUWZxTVNmbVVpSFBWSEtoY1V5ZnQzTjFlbUU1RnVkSlZ4Z0ZtNU4xMk1BZzVvN0RUUHNEQVRUa3dOZ3I3MycsXG4gICAgICB0eFByZWJ1aWxkOiB7XG4gICAgICAgIHR4SGV4OiBzaWduVHhPcHRpb25zLnR4UHJlYnVpbGQudHhIZXgsXG4gICAgICB9LFxuICAgIH07XG4gICAgY29uc3QgdHggPSBhd2FpdCBiYXNlY29pbi5zaWduVHJhbnNhY3Rpb24ocCk7XG4gICAgY29uc3QgdW5zaWduZWRUeEpzb24gPSBKU09OLnBhcnNlKHNpZ25UeE9wdGlvbnMudHhQcmVidWlsZC50eEhleCk7XG4gICAgY29uc3Qgc2lnbmVkVHhKc29uID0gSlNPTi5wYXJzZSh0eC5oYWxmU2lnbmVkLnR4SGV4KTtcblxuICAgIGFzc2VydC5lcXVhbChzaWduZWRUeEpzb24udHhJRCwgdW5zaWduZWRUeEpzb24udHhJRCk7XG4gICAgYXNzZXJ0LmVxdWFsKHNpZ25lZFR4SnNvbi5yYXdfZGF0YV9oZXgsIHVuc2lnbmVkVHhKc29uLnJhd19kYXRhX2hleCk7XG4gICAgYXNzZXJ0LmRlZXBTdHJpY3RFcXVhbChKU09OLnN0cmluZ2lmeShzaWduZWRUeEpzb24ucmF3X2RhdGEpLCBKU09OLnN0cmluZ2lmeSh1bnNpZ25lZFR4SnNvbi5yYXdfZGF0YSkpO1xuICAgIGFzc2VydC5lcXVhbChzaWduZWRUeEpzb24uc2lnbmF0dXJlLmxlbmd0aCwgMSk7XG4gICAgYXNzZXJ0LmVxdWFsKFxuICAgICAgc2lnbmVkVHhKc29uLnNpZ25hdHVyZVswXSxcbiAgICAgICc2NWU1NmY1M2E0NThjNmY4MmQxZWYzOWIyY2Y1YmU2ODVhOTA2YWQyMmJiMDI2OTlmOTA3ZmNiNzJlZjI2ZjFlOTFjZmMyYjZhNDNiZjU0MzJmYWEwYjYzYmRjNWFlYmYxZGMyZjQ5YTY3NWQyOGQyM2ZkN2UwMzhiMzM1OGIwNjAwJ1xuICAgICk7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgYWRkIGZlZUxpbWl0IHRvIHJlY2lwaWVudCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCBmZWVMaW1pdCA9IDEwMDtcbiAgICBjb25zdCBidWlsZFBhcmFtcyA9IHtcbiAgICAgIHJlY2lwaWVudHM6IFt7IGRhdGE6ICd0ZXN0JyB9XSxcbiAgICAgIGZlZUxpbWl0LFxuICAgIH07XG4gICAgYmFzZWNvaW4uZ2V0RXh0cmFQcmVidWlsZFBhcmFtcyhidWlsZFBhcmFtcyk7XG4gICAgYXNzZXJ0LmVxdWFsKChidWlsZFBhcmFtcyBhcyBhbnkpLnJlY2lwaWVudHNbMF0uZmVlTGltaXQsIGZlZUxpbWl0KTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZGB0IGFkZCBhbnkgbmV3IGZpZWxkJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IGJ1aWxkUGFyYW1zID0ge1xuICAgICAgcmVjaXBpZW50czogW3sgZGF0YTogJ3Rlc3QnIH1dLFxuICAgIH07XG4gICAgY29uc3QgdW5tb2RpZmllZEJ1aWxkUGFyYW1zID0gXy5jbG9uZURlZXAoYnVpbGRQYXJhbXMpO1xuICAgIGF3YWl0IGJhc2Vjb2luLmdldEV4dHJhUHJlYnVpbGRQYXJhbXMoYnVpbGRQYXJhbXMpO1xuICAgIGFzc2VydC5kZWVwU3RyaWN0RXF1YWwoYnVpbGRQYXJhbXMsIHVubW9kaWZpZWRCdWlsZFBhcmFtcyk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdLZXlwYWlyczonLCAoKSA9PiB7XG4gICAgaXQoJ3Nob3VsZCBnZW5lcmF0ZSBhIGtleXBhaXIgZnJvbSByYW5kb20gc2VlZCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGtleVBhaXIgPSBiYXNlY29pbi5nZW5lcmF0ZUtleVBhaXIoKTtcbiAgICAgIGFzc2VydC5vayhPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoa2V5UGFpciwgJ3B1YicpKTtcbiAgICAgIGFzc2VydC5vayhPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoa2V5UGFpciwgJ3BydicpKTtcbiAgICAgIGFzc2VydC5lcXVhbChiYXNlY29pbi5pc1ZhbGlkUHViKGtleVBhaXIucHViKSwgdHJ1ZSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGdlbmVyYXRlIGEga2V5cGFpciBmcm9tIGEgc2VlZCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHNlZWRUZXh0ID1cbiAgICAgICAgJzgwMzUwYjQyMDhkMzgxZmJmZTIyNzZhMzI2NjAzMDQ5ZmU1MDA3MzFjNDZkM2M5OTM2YjVjZTAzNmI1MTM3N2YyNGJhYjdkZDBjMmFmN2YxMDc0MTZlZjg1OGZmNzliMDY3MGM3MjQwNmRhZDA2NGU3MmJiMTdmYzBhOTAzOGJiJztcbiAgICAgIGNvbnN0IHNlZWQgPSBCdWZmZXIuZnJvbShzZWVkVGV4dCwgJ2hleCcpO1xuICAgICAgY29uc3Qga2V5UGFpciA9IGJhc2Vjb2luLmdlbmVyYXRlS2V5UGFpcihzZWVkKTtcbiAgICAgIGFzc2VydC5lcXVhbChcbiAgICAgICAga2V5UGFpci5wdWIsXG4gICAgICAgICd4cHViNjYxTXlNd0FxUmJjRkF3cXZTR2JrMzVrSmY3Q1FxZE4xdzRDTVVCQlRxSDVlM2l2alU2RDh1Z3Y5aFJTZ1JiUmVuQzR3M2FoWGRMVmFod2pnalhoU3VRS01kTmRuNTVZOVROU2FnQmt0d3MnXG4gICAgICApO1xuICAgICAgYXNzZXJ0LmVxdWFsKFxuICAgICAgICBrZXlQYWlyLnBydixcbiAgICAgICAgJ3hwcnY5czIxWnJRSDE0M0syZ3NOcFFqYk51OTFrZEdpMU51V2VpOGJaNW1adVZrNm1GUG5Cdm14YjdOU0pRZGJaVzNGR3BLM1ljbjdqb3JBWGNFek12dmlHdGJ5Qno1dEJyamZuV3lRcDNnNzVGSydcbiAgICAgICk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdCdWlsZCBVbnNpZ25lZCBTd2VlcCcsICgpID0+IHtcbiAgICBhZnRlckVhY2goKCkgPT4ge1xuICAgICAgbW9jay5yZXNldCgpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCByZWNvdmVyIHRyeCBmcm9tIGJhc2UgYWRkcmVzcyB0byByZWNvdmVyeSBhZGRyZXNzJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgbW9jay5tZXRob2QoVHJ4LnByb3RvdHlwZSBhcyBhbnksICdnZXRBY2NvdW50QmFsYW5jZXNGcm9tTm9kZScsICguLi5hcmdzKSA9PiB7XG4gICAgICAgIGlmIChhcmdzLmxlbmd0aCA+IDAgJiYgYXJnc1swXSA9PT0gVGVzdFJlY292ZXJEYXRhLmJhc2VBZGRyZXNzKSB7XG4gICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShiYXNlQWRkcmVzc0JhbGFuY2UoMzAwMDAwMCkpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgIH0pO1xuXG4gICAgICBjb25zdCBiYXNlQWRkckhleCA9IFV0aWxzLmdldEhleEFkZHJlc3NGcm9tQmFzZTU4QWRkcmVzcyhUZXN0UmVjb3ZlckRhdGEuYmFzZUFkZHJlc3MpO1xuICAgICAgY29uc3QgZGVzdGluYXRpb25IZXggPSBVdGlscy5nZXRIZXhBZGRyZXNzRnJvbUJhc2U1OEFkZHJlc3MoVGVzdFJlY292ZXJEYXRhLnJlY292ZXJ5RGVzdGluYXRpb24pO1xuXG4gICAgICBtb2NrLm1ldGhvZChUcngucHJvdG90eXBlIGFzIGFueSwgJ2dldEJ1aWxkVHJhbnNhY3Rpb24nLCAoLi4uYXJncykgPT4ge1xuICAgICAgICBpZiAoYXJncy5sZW5ndGggPiAwICYmIGFyZ3NbMF0gPT09IGRlc3RpbmF0aW9uSGV4ICYmIGFyZ3NbMV0gPT09IGJhc2VBZGRySGV4ICYmIGFyZ3NbMl0gPT09IDkwMDAwMCkge1xuICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoY3JlYXRpb25UcmFuc2FjdGlvbihiYXNlQWRkckhleCwgZGVzdGluYXRpb25IZXgsIDkwMDAwMCkpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgIH0pO1xuXG4gICAgICBjb25zdCByZXMgPSBhd2FpdCBiYXNlY29pbi5yZWNvdmVyKHtcbiAgICAgICAgdXNlcktleTogVGVzdFJlY292ZXJEYXRhLnVzZXJLZXksXG4gICAgICAgIGJhY2t1cEtleTogVGVzdFJlY292ZXJEYXRhLmJhY2t1cEtleSxcbiAgICAgICAgYml0Z29LZXk6IFRlc3RSZWNvdmVyRGF0YS5iaXRnb0tleSxcbiAgICAgICAgcmVjb3ZlcnlEZXN0aW5hdGlvbjogVGVzdFJlY292ZXJEYXRhLnJlY292ZXJ5RGVzdGluYXRpb24sXG4gICAgICB9KTtcbiAgICAgIGFzc2VydC5ub3RFcXVhbChyZXMubGVuZ3RoLCAwKTtcbiAgICAgIGFzc2VydC5vayhPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocmVzLCAndHhIZXgnKSk7XG4gICAgICBhc3NlcnQub2soT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHJlcywgJ2ZlZUluZm8nKSk7XG4gICAgICBjb25zdCByYXdEYXRhID0gSlNPTi5wYXJzZShyZXMudHhIZXgpLnJhd19kYXRhO1xuICAgICAgYXNzZXJ0Lm9rKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChyYXdEYXRhLCAnY29udHJhY3QnKSk7XG4gICAgICBjb25zdCB2YWx1ZSA9IHJhd0RhdGEuY29udHJhY3RbMF0ucGFyYW1ldGVyLnZhbHVlO1xuICAgICAgYXNzZXJ0LmVxdWFsKHZhbHVlLmFtb3VudCwgOTAwMDAwKTtcbiAgICAgIGFzc2VydC5lcXVhbChVdGlscy5nZXRCYXNlNThBZGRyZXNzRnJvbUhleCh2YWx1ZS5vd25lcl9hZGRyZXNzKSwgVGVzdFJlY292ZXJEYXRhLmJhc2VBZGRyZXNzKTtcbiAgICAgIGFzc2VydC5lcXVhbChVdGlscy5nZXRCYXNlNThBZGRyZXNzRnJvbUhleCh2YWx1ZS50b19hZGRyZXNzKSwgVGVzdFJlY292ZXJEYXRhLnJlY292ZXJ5RGVzdGluYXRpb24pO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCByZWNvdmVyIHRyeCBmcm9tIGJhc2UgYWRkcmVzcyB0byByZWNvdmVyeSBhZGRyZXNzIHdpdGggc2NhbiBwYXNzZWQgYXMgdmFsaWQgaW50ZWdlciBzdHJpbmcnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBtb2NrLm1ldGhvZChUcngucHJvdG90eXBlIGFzIGFueSwgJ2dldEFjY291bnRCYWxhbmNlc0Zyb21Ob2RlJywgKC4uLmFyZ3MpID0+IHtcbiAgICAgICAgaWYgKGFyZ3MubGVuZ3RoID4gMCAmJiBhcmdzWzBdID09PSBUZXN0UmVjb3ZlckRhdGEuYmFzZUFkZHJlc3MpIHtcbiAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGJhc2VBZGRyZXNzQmFsYW5jZSgzMDAwMDAwKSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgfSk7XG5cbiAgICAgIGNvbnN0IGJhc2VBZGRySGV4ID0gVXRpbHMuZ2V0SGV4QWRkcmVzc0Zyb21CYXNlNThBZGRyZXNzKFRlc3RSZWNvdmVyRGF0YS5iYXNlQWRkcmVzcyk7XG4gICAgICBjb25zdCBkZXN0aW5hdGlvbkhleCA9IFV0aWxzLmdldEhleEFkZHJlc3NGcm9tQmFzZTU4QWRkcmVzcyhUZXN0UmVjb3ZlckRhdGEucmVjb3ZlcnlEZXN0aW5hdGlvbik7XG5cbiAgICAgIG1vY2subWV0aG9kKFRyeC5wcm90b3R5cGUgYXMgYW55LCAnZ2V0QnVpbGRUcmFuc2FjdGlvbicsICguLi5hcmdzKSA9PiB7XG4gICAgICAgIGlmIChhcmdzLmxlbmd0aCA+IDAgJiYgYXJnc1swXSA9PT0gZGVzdGluYXRpb25IZXggJiYgYXJnc1sxXSA9PT0gYmFzZUFkZHJIZXggJiYgYXJnc1syXSA9PT0gOTAwMDAwKSB7XG4gICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShjcmVhdGlvblRyYW5zYWN0aW9uKGJhc2VBZGRySGV4LCBkZXN0aW5hdGlvbkhleCwgOTAwMDAwKSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgfSk7XG5cbiAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IGJhc2Vjb2luLnJlY292ZXIoe1xuICAgICAgICB1c2VyS2V5OiBUZXN0UmVjb3ZlckRhdGEudXNlcktleSxcbiAgICAgICAgYmFja3VwS2V5OiBUZXN0UmVjb3ZlckRhdGEuYmFja3VwS2V5LFxuICAgICAgICBiaXRnb0tleTogVGVzdFJlY292ZXJEYXRhLmJpdGdvS2V5LFxuICAgICAgICByZWNvdmVyeURlc3RpbmF0aW9uOiBUZXN0UmVjb3ZlckRhdGEucmVjb3ZlcnlEZXN0aW5hdGlvbixcbiAgICAgICAgc2NhbjogJzEwJyxcbiAgICAgIH0pO1xuICAgICAgYXNzZXJ0Lm5vdEVxdWFsKHJlcy5sZW5ndGgsIDApO1xuICAgICAgYXNzZXJ0Lm9rKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChyZXMsICd0eEhleCcpKTtcbiAgICAgIGFzc2VydC5vayhPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocmVzLCAnZmVlSW5mbycpKTtcbiAgICAgIGNvbnN0IHJhd0RhdGEgPSBKU09OLnBhcnNlKHJlcy50eEhleCkucmF3X2RhdGE7XG4gICAgICBhc3NlcnQub2soT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHJhd0RhdGEsICdjb250cmFjdCcpKTtcbiAgICAgIGNvbnN0IHZhbHVlID0gcmF3RGF0YS5jb250cmFjdFswXS5wYXJhbWV0ZXIudmFsdWU7XG4gICAgICBhc3NlcnQuZXF1YWwodmFsdWUuYW1vdW50LCA5MDAwMDApO1xuICAgICAgYXNzZXJ0LmVxdWFsKFV0aWxzLmdldEJhc2U1OEFkZHJlc3NGcm9tSGV4KHZhbHVlLm93bmVyX2FkZHJlc3MpLCBUZXN0UmVjb3ZlckRhdGEuYmFzZUFkZHJlc3MpO1xuICAgICAgYXNzZXJ0LmVxdWFsKFV0aWxzLmdldEJhc2U1OEFkZHJlc3NGcm9tSGV4KHZhbHVlLnRvX2FkZHJlc3MpLCBUZXN0UmVjb3ZlckRhdGEucmVjb3ZlcnlEZXN0aW5hdGlvbik7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGZhaWwgcmVjb3ZlciB0cnggZnJvbSBiYXNlIGFkZHJlc3MgdG8gcmVjb3ZlcnkgYWRkcmVzcyB3aXRoIHNjYW4gcGFzc2VkIGFzIHZhbGlkIGludGVnZXIgc3RyaW5nJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgbW9jay5tZXRob2QoVHJ4LnByb3RvdHlwZSBhcyBhbnksICdnZXRBY2NvdW50QmFsYW5jZXNGcm9tTm9kZScsICguLi5hcmdzKSA9PiB7XG4gICAgICAgIGlmIChhcmdzLmxlbmd0aCA+IDAgJiYgYXJnc1swXSA9PT0gVGVzdFJlY292ZXJEYXRhLmJhc2VBZGRyZXNzKSB7XG4gICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShiYXNlQWRkcmVzc0JhbGFuY2UoMzAwMDAwMCkpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgIH0pO1xuXG4gICAgICBjb25zdCBiYXNlQWRkckhleCA9IFV0aWxzLmdldEhleEFkZHJlc3NGcm9tQmFzZTU4QWRkcmVzcyhUZXN0UmVjb3ZlckRhdGEuYmFzZUFkZHJlc3MpO1xuICAgICAgY29uc3QgZGVzdGluYXRpb25IZXggPSBVdGlscy5nZXRIZXhBZGRyZXNzRnJvbUJhc2U1OEFkZHJlc3MoVGVzdFJlY292ZXJEYXRhLnJlY292ZXJ5RGVzdGluYXRpb24pO1xuXG4gICAgICBtb2NrLm1ldGhvZChUcngucHJvdG90eXBlIGFzIGFueSwgJ2dldEJ1aWxkVHJhbnNhY3Rpb24nLCAoLi4uYXJncykgPT4ge1xuICAgICAgICBpZiAoYXJncy5sZW5ndGggPiAwICYmIGFyZ3NbMF0gPT09IGRlc3RpbmF0aW9uSGV4ICYmIGFyZ3NbMV0gPT09IGJhc2VBZGRySGV4ICYmIGFyZ3NbMl0gPT09IDkwMDAwMCkge1xuICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoY3JlYXRpb25UcmFuc2FjdGlvbihiYXNlQWRkckhleCwgZGVzdGluYXRpb25IZXgsIDkwMDAwMCkpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgIH0pO1xuXG4gICAgICBhd2FpdCBhc3NlcnQucmVqZWN0cyhcbiAgICAgICAgYmFzZWNvaW4ucmVjb3Zlcih7XG4gICAgICAgICAgdXNlcktleTogVGVzdFJlY292ZXJEYXRhLnVzZXJLZXksXG4gICAgICAgICAgYmFja3VwS2V5OiBUZXN0UmVjb3ZlckRhdGEuYmFja3VwS2V5LFxuICAgICAgICAgIGJpdGdvS2V5OiBUZXN0UmVjb3ZlckRhdGEuYml0Z29LZXksXG4gICAgICAgICAgcmVjb3ZlcnlEZXN0aW5hdGlvbjogVGVzdFJlY292ZXJEYXRhLnJlY292ZXJ5RGVzdGluYXRpb24sXG4gICAgICAgICAgc2NhbjogJ2FiYycsXG4gICAgICAgIH0pLFxuICAgICAgICB7XG4gICAgICAgICAgbWVzc2FnZTogJ0ludmFsaWQgc2Nhbm5pbmcgZmFjdG9yJyxcbiAgICAgICAgfVxuICAgICAgKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgcmVjb3ZlciB0cnggZnJvbSByZWNlaXZlIGFkZHJlc3MgdG8gYmFzZSBhZGRyZXNzJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgbW9jay5tZXRob2QoVHJ4LnByb3RvdHlwZSBhcyBhbnksICdnZXRBY2NvdW50QmFsYW5jZXNGcm9tTm9kZScsICguLi5hcmdzKSA9PiB7XG4gICAgICAgIGlmIChhcmdzLmxlbmd0aCA+IDAgJiYgYXJnc1swXSA9PT0gVGVzdFJlY292ZXJEYXRhLmJhc2VBZGRyZXNzKSB7XG4gICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShiYXNlQWRkcmVzc0JhbGFuY2UoMjAwMDAwMCkpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGFyZ3MubGVuZ3RoID4gMCAmJiBhcmdzWzBdID09PSBUZXN0UmVjb3ZlckRhdGEuZmlyc3RSZWNlaXZlQWRkcmVzcykge1xuICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUocmVjZWl2ZUFkZHJlc3NCYWxhbmNlKDEwMjEwMDAwMCwgVGVzdFJlY292ZXJEYXRhLmZpcnN0UmVjZWl2ZUFkZHJlc3MpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICB9KTtcblxuICAgICAgY29uc3QgZmlyc3RSZWNlaXZlQWRkcmVzc0hleCA9IFV0aWxzLmdldEhleEFkZHJlc3NGcm9tQmFzZTU4QWRkcmVzcyhUZXN0UmVjb3ZlckRhdGEuZmlyc3RSZWNlaXZlQWRkcmVzcyk7XG4gICAgICBjb25zdCBiYXNlQWRkckhleCA9IFV0aWxzLmdldEhleEFkZHJlc3NGcm9tQmFzZTU4QWRkcmVzcyhUZXN0UmVjb3ZlckRhdGEuYmFzZUFkZHJlc3MpO1xuXG4gICAgICBtb2NrLm1ldGhvZChUcngucHJvdG90eXBlIGFzIGFueSwgJ2dldEJ1aWxkVHJhbnNhY3Rpb24nLCAoLi4uYXJncykgPT4ge1xuICAgICAgICBpZiAoYXJncy5sZW5ndGggPiAwICYmIGFyZ3NbMF0gPT09IGJhc2VBZGRySGV4ICYmIGFyZ3NbMV0gPT09IGZpcnN0UmVjZWl2ZUFkZHJlc3NIZXggJiYgYXJnc1syXSA9PT0gMTAwMDAwMDAwKSB7XG4gICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShjcmVhdGlvblRyYW5zYWN0aW9uKGZpcnN0UmVjZWl2ZUFkZHJlc3NIZXgsIGJhc2VBZGRySGV4LCAxMDAwMDAwMDApKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICB9KTtcblxuICAgICAgY29uc3QgcmVzID0gYXdhaXQgYmFzZWNvaW4ucmVjb3Zlcih7XG4gICAgICAgIHVzZXJLZXk6IFRlc3RSZWNvdmVyRGF0YS51c2VyS2V5LFxuICAgICAgICBiYWNrdXBLZXk6IFRlc3RSZWNvdmVyRGF0YS5iYWNrdXBLZXksXG4gICAgICAgIGJpdGdvS2V5OiBUZXN0UmVjb3ZlckRhdGEuYml0Z29LZXksXG4gICAgICAgIHJlY292ZXJ5RGVzdGluYXRpb246IFRlc3RSZWNvdmVyRGF0YS5yZWNvdmVyeURlc3RpbmF0aW9uLFxuICAgICAgfSk7XG4gICAgICBhc3NlcnQubm90RXF1YWwocmVzLmxlbmd0aCwgMCk7XG4gICAgICBhc3NlcnQub2soT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHJlcywgJ3R4SGV4JykpO1xuICAgICAgYXNzZXJ0Lm9rKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChyZXMsICdmZWVJbmZvJykpO1xuICAgICAgY29uc3QgcmF3RGF0YSA9IEpTT04ucGFyc2UocmVzLnR4SGV4KS5yYXdfZGF0YTtcbiAgICAgIGFzc2VydC5vayhPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocmF3RGF0YSwgJ2NvbnRyYWN0JykpO1xuICAgICAgY29uc3QgdmFsdWUgPSByYXdEYXRhLmNvbnRyYWN0WzBdLnBhcmFtZXRlci52YWx1ZTtcbiAgICAgIGFzc2VydC5lcXVhbCh2YWx1ZS5hbW91bnQsIDEwMDAwMDAwMCk7XG4gICAgICBhc3NlcnQuZXF1YWwoVXRpbHMuZ2V0QmFzZTU4QWRkcmVzc0Zyb21IZXgodmFsdWUub3duZXJfYWRkcmVzcyksIFRlc3RSZWNvdmVyRGF0YS5maXJzdFJlY2VpdmVBZGRyZXNzKTtcbiAgICAgIGFzc2VydC5lcXVhbChVdGlscy5nZXRCYXNlNThBZGRyZXNzRnJvbUhleCh2YWx1ZS50b19hZGRyZXNzKSwgVGVzdFJlY292ZXJEYXRhLmJhc2VBZGRyZXNzKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgcmVjb3ZlciB0b2tlbiBmcm9tIGJhc2UgYWRkcmVzcyB0byByZWNvdmVyeSBhZGRyZXNzJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgbW9jay5tZXRob2QoVHJ4LnByb3RvdHlwZSBhcyBhbnksICdnZXRBY2NvdW50QmFsYW5jZXNGcm9tTm9kZScsICguLi5hcmdzKSA9PiB7XG4gICAgICAgIGlmIChhcmdzLmxlbmd0aCA+IDAgJiYgYXJnc1swXSA9PT0gVGVzdFJlY292ZXJEYXRhLmJhc2VBZGRyZXNzKSB7XG4gICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShcbiAgICAgICAgICAgIGJhc2VBZGRyZXNzQmFsYW5jZSgxMDAwMDAwMDAsIFtcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIFRTZFp3TnFwSG9melA2QnNCS0dRVVdkQmVKcGhMbUY2aWQ6ICcxMDAwMDAwMDAwJyxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIFRHM1hYeUV4QmtQcDluemRhakRac296RXU0QmthU0pvenM6ICcxMTAwMDAwMDAwJyxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIF0pXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICB9KTtcblxuICAgICAgbW9jay5tZXRob2QoVHJ4LnByb3RvdHlwZSBhcyBhbnksICdnZXRUcmlnZ2VyU21hcnRDb250cmFjdFRyYW5zYWN0aW9uJywgKC4uLmFyZ3MpID0+IHtcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShTYW1wbGVSYXdUb2tlblNlbmRUeG4pO1xuICAgICAgfSk7XG5cbiAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IGJhc2Vjb2luLnJlY292ZXIoe1xuICAgICAgICB1c2VyS2V5OiBUZXN0UmVjb3ZlckRhdGEudXNlcktleSxcbiAgICAgICAgYmFja3VwS2V5OiBUZXN0UmVjb3ZlckRhdGEuYmFja3VwS2V5LFxuICAgICAgICBiaXRnb0tleTogVGVzdFJlY292ZXJEYXRhLmJpdGdvS2V5LFxuICAgICAgICB0b2tlbkNvbnRyYWN0QWRkcmVzczogJ1RHM1hYeUV4QmtQcDluemRhakRac296RXU0QmthU0pvenMnLFxuICAgICAgICByZWNvdmVyeURlc3RpbmF0aW9uOiBUZXN0UmVjb3ZlckRhdGEucmVjb3ZlcnlEZXN0aW5hdGlvbixcbiAgICAgIH0pO1xuICAgICAgYXNzZXJ0Lm5vdEVxdWFsKHJlcy5sZW5ndGgsIDApO1xuICAgICAgYXNzZXJ0LmVxdWFsKHJlcy5yZWNvdmVyeUFtb3VudCwgMTEwMDAwMDAwMCk7XG4gICAgICBhc3NlcnQuZXF1YWwocmVzLmZlZUluZm8uZmVlLCAnMTAwMDAwMDAwJyk7XG4gICAgICBjb25zdCBleHBpcmF0aW9uRHVyYXRpb24gPSByZXMudHgucmF3X2RhdGEuZXhwaXJhdGlvbiAtIHJlcy50eC5yYXdfZGF0YS50aW1lc3RhbXA7XG4gICAgICBhc3NlcnQub2soZXhwaXJhdGlvbkR1cmF0aW9uID49IDg2NDAwMDAwKTtcbiAgICAgIGFzc2VydC5lcXVhbChyZXMuYWRkcmVzc0luZm8sIHVuZGVmaW5lZCk7XG4gICAgICBjb25zdCByYXdEYXRhID0gSlNPTi5wYXJzZShyZXMudHhIZXgpLnJhd19kYXRhO1xuICAgICAgYXNzZXJ0Lm9rKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChyYXdEYXRhLCAnY29udHJhY3QnKSk7XG4gICAgICBjb25zdCB2YWx1ZSA9IHJhd0RhdGEuY29udHJhY3RbMF0ucGFyYW1ldGVyLnZhbHVlO1xuICAgICAgYXNzZXJ0LmVxdWFsKFV0aWxzLmdldEJhc2U1OEFkZHJlc3NGcm9tSGV4KHZhbHVlLm93bmVyX2FkZHJlc3MpLCBUZXN0UmVjb3ZlckRhdGEuYmFzZUFkZHJlc3MpO1xuICAgICAgYXNzZXJ0LmVxdWFsKFV0aWxzLmdldEJhc2U1OEFkZHJlc3NGcm9tSGV4KHZhbHVlLmNvbnRyYWN0X2FkZHJlc3MpLCAnVEczWFh5RXhCa1BwOW56ZGFqRFpzb3pFdTRCa2FTSm96cycpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCB0aHJvdyBpZiB0cnggYmFsYW5jZSBhdCBiYXNlIGFkZHJlc3MgaXMgbm90IHN1ZmZpY2llbnQgdG8gY292ZXIgdG9rZW4gc2VuZCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIG1vY2subWV0aG9kKFRyeC5wcm90b3R5cGUgYXMgYW55LCAnZ2V0QWNjb3VudEJhbGFuY2VzRnJvbU5vZGUnLCAoLi4uYXJncykgPT4ge1xuICAgICAgICBpZiAoYXJncy5sZW5ndGggPiAwICYmIGFyZ3NbMF0gPT09IFRlc3RSZWNvdmVyRGF0YS5iYXNlQWRkcmVzcykge1xuICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoXG4gICAgICAgICAgICBiYXNlQWRkcmVzc0JhbGFuY2UoMTAwMDAwMCwgW1xuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgVEczWFh5RXhCa1BwOW56ZGFqRFpzb3pFdTRCa2FTSm96czogJzExMDAwMDAwMDAnLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgXSlcbiAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgIH0pO1xuXG4gICAgICBtb2NrLm1ldGhvZChUcngucHJvdG90eXBlIGFzIGFueSwgJ2dldFRyaWdnZXJTbWFydENvbnRyYWN0VHJhbnNhY3Rpb24nLCAoLi4uYXJncykgPT4ge1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKFNhbXBsZVJhd1Rva2VuU2VuZFR4bik7XG4gICAgICB9KTtcblxuICAgICAgYXdhaXQgYXNzZXJ0LnJlamVjdHMoXG4gICAgICAgIGJhc2Vjb2luLnJlY292ZXIoe1xuICAgICAgICAgIHVzZXJLZXk6IFRlc3RSZWNvdmVyRGF0YS51c2VyS2V5LFxuICAgICAgICAgIGJhY2t1cEtleTogVGVzdFJlY292ZXJEYXRhLmJhY2t1cEtleSxcbiAgICAgICAgICBiaXRnb0tleTogVGVzdFJlY292ZXJEYXRhLmJpdGdvS2V5LFxuICAgICAgICAgIHRva2VuQ29udHJhY3RBZGRyZXNzOiAnVEczWFh5RXhCa1BwOW56ZGFqRFpzb3pFdTRCa2FTSm96cycsXG4gICAgICAgICAgcmVjb3ZlcnlEZXN0aW5hdGlvbjogVGVzdFJlY292ZXJEYXRhLnJlY292ZXJ5RGVzdGluYXRpb24sXG4gICAgICAgIH0pLFxuICAgICAgICB7XG4gICAgICAgICAgbWVzc2FnZTpcbiAgICAgICAgICAgIFwiQW1vdW50IG9mIGZ1bmRzIHRvIHJlY292ZXIgMTAwMDAwMCBpcyBsZXNzIHRoYW4gMTAwMDAwMDAwIGFuZCB3b3VsZG4ndCBiZSBhYmxlIHRvIGZ1bmQgYSB0cmMyMCBzZW5kXCIsXG4gICAgICAgIH1cbiAgICAgICk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdCdWlsZCBVbnNpZ25lZCBDb25zb2xpZGF0aW9uIFJlY292ZXJpZXMnLCAoKSA9PiB7XG4gICAgYWZ0ZXJFYWNoKCgpID0+IHtcbiAgICAgIG1vY2sucmVzZXQoKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgdGhyb3cgaWYgc3RhcnRpbmdTY2FuSW5kZXggaXMgbm90IGdlIHRvIDEnLCBhc3luYyAoKSA9PiB7XG4gICAgICBhd2FpdCBhc3NlcnQucmVqZWN0cyhcbiAgICAgICAgYmFzZWNvaW4ucmVjb3ZlckNvbnNvbGlkYXRpb25zKHtcbiAgICAgICAgICB1c2VyS2V5OiBUZXN0UmVjb3ZlckRhdGEudXNlcktleSxcbiAgICAgICAgICBiYWNrdXBLZXk6IFRlc3RSZWNvdmVyRGF0YS5iYWNrdXBLZXksXG4gICAgICAgICAgYml0Z29LZXk6IFRlc3RSZWNvdmVyRGF0YS5iaXRnb0tleSxcbiAgICAgICAgICBzdGFydGluZ1NjYW5JbmRleDogLTEsXG4gICAgICAgIH0pLFxuICAgICAgICB7XG4gICAgICAgICAgbWVzc2FnZTpcbiAgICAgICAgICAgICdJbnZhbGlkIHN0YXJ0aW5nIG9yIGVuZGluZyBpbmRleCB0byBzY2FuIGZvciBhZGRyZXNzZXMuIHN0YXJ0aW5nU2NhbkluZGV4OiAtMSwgZW5kaW5nU2NhbkluZGV4OiAxOS4nLFxuICAgICAgICB9XG4gICAgICApO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCB0aHJvdyBpZiBzY2FuIGZhY3RvciBpcyB0b28gaGlnaCcsIGFzeW5jICgpID0+IHtcbiAgICAgIGF3YWl0IGFzc2VydC5yZWplY3RzKFxuICAgICAgICBiYXNlY29pbi5yZWNvdmVyQ29uc29saWRhdGlvbnMoe1xuICAgICAgICAgIHVzZXJLZXk6IFRlc3RSZWNvdmVyRGF0YS51c2VyS2V5LFxuICAgICAgICAgIGJhY2t1cEtleTogVGVzdFJlY292ZXJEYXRhLmJhY2t1cEtleSxcbiAgICAgICAgICBiaXRnb0tleTogVGVzdFJlY292ZXJEYXRhLmJpdGdvS2V5LFxuICAgICAgICAgIHN0YXJ0aW5nU2NhbkluZGV4OiAxLFxuICAgICAgICAgIGVuZGluZ1NjYW5JbmRleDogMzAwLFxuICAgICAgICB9KSxcbiAgICAgICAge1xuICAgICAgICAgIG1lc3NhZ2U6XG4gICAgICAgICAgICAnSW52YWxpZCBzdGFydGluZyBvciBlbmRpbmcgaW5kZXggdG8gc2NhbiBmb3IgYWRkcmVzc2VzLiBzdGFydGluZ1NjYW5JbmRleDogMSwgZW5kaW5nU2NhbkluZGV4OiAzMDAuJyxcbiAgICAgICAgfVxuICAgICAgKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgYnVpbGQgY29uc29saWRhdGUgcmVjb3ZlcmllcycsIGFzeW5jICgpID0+IHtcbiAgICAgIG1vY2subWV0aG9kKFRyeC5wcm90b3R5cGUgYXMgYW55LCAnZ2V0QWNjb3VudEJhbGFuY2VzRnJvbU5vZGUnLCAoLi4uYXJncykgPT4ge1xuICAgICAgICBpZiAoYXJncy5sZW5ndGggPiAwICYmIGFyZ3NbMF0gPT09IFRlc3RSZWNvdmVyRGF0YS5maXJzdFJlY2VpdmVBZGRyZXNzKSB7XG4gICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShyZWNlaXZlQWRkcmVzc0JhbGFuY2UoMTAyMTAwMDAwLCBUZXN0UmVjb3ZlckRhdGEuZmlyc3RSZWNlaXZlQWRkcmVzcykpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGFyZ3MubGVuZ3RoID4gMCAmJiBhcmdzWzBdID09PSBUZXN0UmVjb3ZlckRhdGEuc2Vjb25kUmVjZWl2ZUFkZHJlc3MpIHtcbiAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHJlY2VpdmVBZGRyZXNzQmFsYW5jZSg1MDAwMDAwMCwgVGVzdFJlY292ZXJEYXRhLnNlY29uZFJlY2VpdmVBZGRyZXNzKSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgfSk7XG5cbiAgICAgIG1vY2subWV0aG9kKFRyeC5wcm90b3R5cGUgYXMgYW55LCAnZ2V0QnVpbGRUcmFuc2FjdGlvbicsICguLi5hcmdzKSA9PiB7XG4gICAgICAgIGlmIChhcmdzLmxlbmd0aCA+IDAgJiYgYXJnc1swXSA9PT0gYmFzZUFkZHJIZXggJiYgYXJnc1sxXSA9PT0gZmlyc3RSZWNlaXZlQWRkckhleCAmJiBhcmdzWzJdID09PSAxMDAwMDAwMDApIHtcbiAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGNyZWF0aW9uVHJhbnNhY3Rpb24oZmlyc3RSZWNlaXZlQWRkckhleCwgYmFzZUFkZHJIZXgsIDEwMDAwMDAwMCkpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGFyZ3MubGVuZ3RoID4gMCAmJiBhcmdzWzBdID09PSBiYXNlQWRkckhleCAmJiBhcmdzWzFdID09PSBzZWNvbmRSZWNlaXZlQWRkckhleCAmJiBhcmdzWzJdID09PSA0NzkwMDAwMCkge1xuICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoY3JlYXRpb25UcmFuc2FjdGlvbihzZWNvbmRSZWNlaXZlQWRkckhleCwgYmFzZUFkZHJIZXgsIDQ3OTAwMDAwKSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgfSk7XG5cbiAgICAgIGNvbnN0IGZpcnN0UmVjZWl2ZUFkZHJIZXggPSBVdGlscy5nZXRIZXhBZGRyZXNzRnJvbUJhc2U1OEFkZHJlc3MoVGVzdFJlY292ZXJEYXRhLmZpcnN0UmVjZWl2ZUFkZHJlc3MpO1xuICAgICAgY29uc3Qgc2Vjb25kUmVjZWl2ZUFkZHJIZXggPSBVdGlscy5nZXRIZXhBZGRyZXNzRnJvbUJhc2U1OEFkZHJlc3MoVGVzdFJlY292ZXJEYXRhLnNlY29uZFJlY2VpdmVBZGRyZXNzKTtcbiAgICAgIGNvbnN0IGJhc2VBZGRySGV4ID0gVXRpbHMuZ2V0SGV4QWRkcmVzc0Zyb21CYXNlNThBZGRyZXNzKFRlc3RSZWNvdmVyRGF0YS5iYXNlQWRkcmVzcyk7XG5cbiAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IGJhc2Vjb2luLnJlY292ZXJDb25zb2xpZGF0aW9ucyh7XG4gICAgICAgIHVzZXJLZXk6IFRlc3RSZWNvdmVyRGF0YS51c2VyS2V5LFxuICAgICAgICBiYWNrdXBLZXk6IFRlc3RSZWNvdmVyRGF0YS5iYWNrdXBLZXksXG4gICAgICAgIGJpdGdvS2V5OiBUZXN0UmVjb3ZlckRhdGEuYml0Z29LZXksXG4gICAgICAgIHN0YXJ0aW5nU2NhbkluZGV4OiAxLFxuICAgICAgICBlbmRpbmdTY2FuSW5kZXg6IDMsXG4gICAgICB9KTtcblxuICAgICAgYXNzZXJ0Lm5vdEVxdWFsKHJlcy5sZW5ndGgsIDApO1xuICAgICAgYXNzZXJ0Lm9rKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChyZXMsICd0cmFuc2FjdGlvbnMnKSk7XG4gICAgICBhc3NlcnQuZXF1YWwocmVzLnRyYW5zYWN0aW9ucy5sZW5ndGgsIDIpO1xuICAgICAgY29uc3QgdHhuMSA9IHJlcy50cmFuc2FjdGlvbnNbMF07XG4gICAgICBjb25zdCByYXdEYXRhMSA9IEpTT04ucGFyc2UodHhuMS50eEhleCkucmF3X2RhdGE7XG4gICAgICBhc3NlcnQub2soT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHJhd0RhdGExLCAnY29udHJhY3QnKSk7XG4gICAgICBjb25zdCB2YWx1ZTEgPSByYXdEYXRhMS5jb250cmFjdFswXS5wYXJhbWV0ZXIudmFsdWU7XG4gICAgICBhc3NlcnQuZXF1YWwodmFsdWUxLmFtb3VudCwgMTAwMDAwMDAwKTtcbiAgICAgIGFzc2VydC5lcXVhbChVdGlscy5nZXRCYXNlNThBZGRyZXNzRnJvbUhleCh2YWx1ZTEub3duZXJfYWRkcmVzcyksIFRlc3RSZWNvdmVyRGF0YS5maXJzdFJlY2VpdmVBZGRyZXNzKTtcbiAgICAgIGFzc2VydC5lcXVhbChVdGlscy5nZXRCYXNlNThBZGRyZXNzRnJvbUhleCh2YWx1ZTEudG9fYWRkcmVzcyksIFRlc3RSZWNvdmVyRGF0YS5iYXNlQWRkcmVzcyk7XG4gICAgICBjb25zdCB0eG4yID0gcmVzLnRyYW5zYWN0aW9uc1sxXTtcbiAgICAgIGNvbnN0IHJhd0RhdGEyID0gSlNPTi5wYXJzZSh0eG4yLnR4SGV4KS5yYXdfZGF0YTtcbiAgICAgIGFzc2VydC5vayhPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocmF3RGF0YTIsICdjb250cmFjdCcpKTtcbiAgICAgIGNvbnN0IHZhbHVlMiA9IHJhd0RhdGEyLmNvbnRyYWN0WzBdLnBhcmFtZXRlci52YWx1ZTtcbiAgICAgIGFzc2VydC5lcXVhbCh2YWx1ZTIuYW1vdW50LCA0NzkwMDAwMCk7XG4gICAgICBhc3NlcnQuZXF1YWwoVXRpbHMuZ2V0QmFzZTU4QWRkcmVzc0Zyb21IZXgodmFsdWUyLm93bmVyX2FkZHJlc3MpLCBUZXN0UmVjb3ZlckRhdGEuc2Vjb25kUmVjZWl2ZUFkZHJlc3MpO1xuICAgICAgYXNzZXJ0LmVxdWFsKFV0aWxzLmdldEJhc2U1OEFkZHJlc3NGcm9tSGV4KHZhbHVlMi50b19hZGRyZXNzKSwgVGVzdFJlY292ZXJEYXRhLmJhc2VBZGRyZXNzKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgYnVpbGQgY29uc29saWRhdGUgdG9rZW4gcmVjb3ZlcmllcycsIGFzeW5jICgpID0+IHtcbiAgICAgIG1vY2subWV0aG9kKFRyeC5wcm90b3R5cGUgYXMgYW55LCAnZ2V0QWNjb3VudEJhbGFuY2VzRnJvbU5vZGUnLCAoLi4uYXJncykgPT4ge1xuICAgICAgICBpZiAoYXJncy5sZW5ndGggPiAwICYmIGFyZ3NbMF0gPT09IFRlc3RSZWNvdmVyRGF0YS5maXJzdFJlY2VpdmVBZGRyZXNzKSB7XG4gICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShcbiAgICAgICAgICAgIHJlY2VpdmVBZGRyZXNzQmFsYW5jZSgyMDIxMDAwMDAsIFRlc3RSZWNvdmVyRGF0YS5maXJzdFJlY2VpdmVBZGRyZXNzLCBbXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBUU2Rad05xcEhvZnpQNkJzQktHUVVXZEJlSnBoTG1GNmlkOiAnMTEwMDAwMDAwMCcsXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBdKVxuICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoYXJncy5sZW5ndGggPiAwICYmIGFyZ3NbMF0gPT09IFRlc3RSZWNvdmVyRGF0YS5zZWNvbmRSZWNlaXZlQWRkcmVzcykge1xuICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUocmVjZWl2ZUFkZHJlc3NCYWxhbmNlKDUwMCwgVGVzdFJlY292ZXJEYXRhLnNlY29uZFJlY2VpdmVBZGRyZXNzKSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgfSk7XG5cbiAgICAgIG1vY2subWV0aG9kKFRyeC5wcm90b3R5cGUgYXMgYW55LCAnZ2V0QnVpbGRUcmFuc2FjdGlvbicsICguLi5hcmdzKSA9PiB7XG4gICAgICAgIGlmIChhcmdzLmxlbmd0aCA+IDAgJiYgYXJnc1swXSA9PT0gYmFzZUFkZHJIZXggJiYgYXJnc1sxXSA9PT0gZmlyc3RSZWNlaXZlQWRkckhleCAmJiBhcmdzWzJdID09PSAxMTAwMDAwMDAwKSB7XG4gICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShjcmVhdGlvblRyYW5zYWN0aW9uKGZpcnN0UmVjZWl2ZUFkZHJIZXgsIGJhc2VBZGRySGV4LCAxMTAwMDAwMDAwKSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgfSk7XG5cbiAgICAgIGNvbnN0IGZpcnN0UmVjZWl2ZUFkZHJIZXggPSBVdGlscy5nZXRIZXhBZGRyZXNzRnJvbUJhc2U1OEFkZHJlc3MoVGVzdFJlY292ZXJEYXRhLmZpcnN0UmVjZWl2ZUFkZHJlc3MpO1xuICAgICAgY29uc3QgYmFzZUFkZHJIZXggPSBVdGlscy5nZXRIZXhBZGRyZXNzRnJvbUJhc2U1OEFkZHJlc3MoVGVzdFJlY292ZXJEYXRhLmJhc2VBZGRyZXNzKTtcblxuICAgICAgY29uc3QgcmVzID0gYXdhaXQgYmFzZWNvaW4ucmVjb3ZlckNvbnNvbGlkYXRpb25zKHtcbiAgICAgICAgdXNlcktleTogVGVzdFJlY292ZXJEYXRhLnVzZXJLZXksXG4gICAgICAgIGJhY2t1cEtleTogVGVzdFJlY292ZXJEYXRhLmJhY2t1cEtleSxcbiAgICAgICAgYml0Z29LZXk6IFRlc3RSZWNvdmVyRGF0YS5iaXRnb0tleSxcbiAgICAgICAgdG9rZW5Db250cmFjdEFkZHJlc3M6ICdUU2Rad05xcEhvZnpQNkJzQktHUVVXZEJlSnBoTG1GNmlkJyxcbiAgICAgICAgc3RhcnRpbmdTY2FuSW5kZXg6IDEsXG4gICAgICAgIGVuZGluZ1NjYW5JbmRleDogMyxcbiAgICAgIH0pO1xuXG4gICAgICBhc3NlcnQubm90RXF1YWwocmVzLmxlbmd0aCwgMCk7XG4gICAgICBhc3NlcnQub2soT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHJlcywgJ3RyYW5zYWN0aW9ucycpKTtcbiAgICAgIGFzc2VydC5lcXVhbChyZXMudHJhbnNhY3Rpb25zLmxlbmd0aCwgMSk7XG4gICAgICBjb25zdCB0eG4gPSByZXMudHJhbnNhY3Rpb25zWzBdO1xuICAgICAgY29uc3QgcmF3RGF0YSA9IEpTT04ucGFyc2UodHhuLnR4SGV4KS5yYXdfZGF0YTtcbiAgICAgIGFzc2VydC5vayhPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocmF3RGF0YSwgJ2NvbnRyYWN0JykpO1xuICAgICAgY29uc3QgdmFsdWUgPSByYXdEYXRhLmNvbnRyYWN0WzBdLnBhcmFtZXRlci52YWx1ZTtcbiAgICAgIGFzc2VydC5lcXVhbChcbiAgICAgICAgdmFsdWUuZGF0YSxcbiAgICAgICAgJ2E5MDU5Y2JiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwYzI1NDIwMjU1YzJjNWEyZGQ1NGVmNjlmOTJlZjI2MWU2YmQ0MjE2YTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDE5MGFiMDAnXG4gICAgICApO1xuICAgICAgYXNzZXJ0LmVxdWFsKFV0aWxzLmdldEJhc2U1OEFkZHJlc3NGcm9tSGV4KHZhbHVlLm93bmVyX2FkZHJlc3MpLCBUZXN0UmVjb3ZlckRhdGEuZmlyc3RSZWNlaXZlQWRkcmVzcyk7XG4gICAgICBhc3NlcnQuZXF1YWwoVXRpbHMuZ2V0QmFzZTU4QWRkcmVzc0Zyb21IZXgodmFsdWUuY29udHJhY3RfYWRkcmVzcyksICdUU2Rad05xcEhvZnpQNkJzQktHUVVXZEJlSnBoTG1GNmlkJyk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHNraXAgYnVpbGRpbmcgY29uc29saWRhdGUgdHJhbnNhY3Rpb24gaWYgYmFsYW5jZSBpcyBsb3dlciB0aGFuIHJlc2VydmVkIGZlZScsIGFzeW5jICgpID0+IHtcbiAgICAgIG1vY2subWV0aG9kKFRyeC5wcm90b3R5cGUgYXMgYW55LCAnZ2V0QWNjb3VudEJhbGFuY2VzRnJvbU5vZGUnLCAoLi4uYXJncykgPT4ge1xuICAgICAgICBpZiAoYXJncy5sZW5ndGggPiAwICYmIGFyZ3NbMF0gPT09IFRlc3RSZWNvdmVyRGF0YS5maXJzdFJlY2VpdmVBZGRyZXNzKSB7XG4gICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShyZWNlaXZlQWRkcmVzc0JhbGFuY2UoMTAyMTAwMDAwLCBUZXN0UmVjb3ZlckRhdGEuZmlyc3RSZWNlaXZlQWRkcmVzcykpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGFyZ3MubGVuZ3RoID4gMCAmJiBhcmdzWzBdID09PSBUZXN0UmVjb3ZlckRhdGEuc2Vjb25kUmVjZWl2ZUFkZHJlc3MpIHtcbiAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHJlY2VpdmVBZGRyZXNzQmFsYW5jZSgyMDAwMDAwLCBUZXN0UmVjb3ZlckRhdGEuc2Vjb25kUmVjZWl2ZUFkZHJlc3MpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICB9KTtcblxuICAgICAgbW9jay5tZXRob2QoVHJ4LnByb3RvdHlwZSBhcyBhbnksICdnZXRCdWlsZFRyYW5zYWN0aW9uJywgKC4uLmFyZ3MpID0+IHtcbiAgICAgICAgaWYgKGFyZ3MubGVuZ3RoID4gMCAmJiBhcmdzWzBdID09PSBiYXNlQWRkckhleCAmJiBhcmdzWzFdID09PSBmaXJzdFJlY2VpdmVBZGRySGV4ICYmIGFyZ3NbMl0gPT09IDEwMDAwMDAwMCkge1xuICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoY3JlYXRpb25UcmFuc2FjdGlvbihmaXJzdFJlY2VpdmVBZGRySGV4LCBiYXNlQWRkckhleCwgMTAwMDAwMDAwKSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgfSk7XG5cbiAgICAgIGNvbnN0IGZpcnN0UmVjZWl2ZUFkZHJIZXggPSBVdGlscy5nZXRIZXhBZGRyZXNzRnJvbUJhc2U1OEFkZHJlc3MoVGVzdFJlY292ZXJEYXRhLmZpcnN0UmVjZWl2ZUFkZHJlc3MpO1xuICAgICAgY29uc3QgYmFzZUFkZHJIZXggPSBVdGlscy5nZXRIZXhBZGRyZXNzRnJvbUJhc2U1OEFkZHJlc3MoVGVzdFJlY292ZXJEYXRhLmJhc2VBZGRyZXNzKTtcblxuICAgICAgY29uc3QgcmVzID0gYXdhaXQgYmFzZWNvaW4ucmVjb3ZlckNvbnNvbGlkYXRpb25zKHtcbiAgICAgICAgdXNlcktleTogVGVzdFJlY292ZXJEYXRhLnVzZXJLZXksXG4gICAgICAgIGJhY2t1cEtleTogVGVzdFJlY292ZXJEYXRhLmJhY2t1cEtleSxcbiAgICAgICAgYml0Z29LZXk6IFRlc3RSZWNvdmVyRGF0YS5iaXRnb0tleSxcbiAgICAgICAgc3RhcnRpbmdTY2FuSW5kZXg6IDEsXG4gICAgICAgIGVuZGluZ1NjYW5JbmRleDogMyxcbiAgICAgIH0pO1xuXG4gICAgICBhc3NlcnQubm90RXF1YWwocmVzLmxlbmd0aCwgMCk7XG4gICAgICBhc3NlcnQub2soT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHJlcywgJ3RyYW5zYWN0aW9ucycpKTtcbiAgICAgIGFzc2VydC5lcXVhbChyZXMudHJhbnNhY3Rpb25zLmxlbmd0aCwgMSk7XG4gICAgICBjb25zdCB0eG4xID0gcmVzLnRyYW5zYWN0aW9uc1swXTtcbiAgICAgIGNvbnN0IHJhd0RhdGExID0gSlNPTi5wYXJzZSh0eG4xLnR4SGV4KS5yYXdfZGF0YTtcbiAgICAgIGFzc2VydC5vayhPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocmF3RGF0YTEsICdjb250cmFjdCcpKTtcbiAgICAgIGNvbnN0IHZhbHVlMSA9IHJhd0RhdGExLmNvbnRyYWN0WzBdLnBhcmFtZXRlci52YWx1ZTtcbiAgICAgIGFzc2VydC5lcXVhbCh2YWx1ZTEuYW1vdW50LCAxMDAwMDAwMDApO1xuICAgICAgYXNzZXJ0LmVxdWFsKFV0aWxzLmdldEJhc2U1OEFkZHJlc3NGcm9tSGV4KHZhbHVlMS5vd25lcl9hZGRyZXNzKSwgVGVzdFJlY292ZXJEYXRhLmZpcnN0UmVjZWl2ZUFkZHJlc3MpO1xuICAgICAgYXNzZXJ0LmVxdWFsKFV0aWxzLmdldEJhc2U1OEFkZHJlc3NGcm9tSGV4KHZhbHVlMS50b19hZGRyZXNzKSwgVGVzdFJlY292ZXJEYXRhLmJhc2VBZGRyZXNzKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ1RTUyBSZWNvdmVyeScsICgpID0+IHtcbiAgICBhZnRlckVhY2goKCkgPT4ge1xuICAgICAgbW9jay5yZXNldCgpO1xuICAgIH0pO1xuXG4gICAgY29uc3Qgd2FsbGV0QWRkckhleCA9IFV0aWxzLmdldEhleEFkZHJlc3NGcm9tQmFzZTU4QWRkcmVzcyhUc3NUZXN0UmVjb3ZlckRhdGEud2FsbGV0QWRkcmVzcyk7XG4gICAgY29uc3QgZGVzdGluYXRpb25IZXggPSBVdGlscy5nZXRIZXhBZGRyZXNzRnJvbUJhc2U1OEFkZHJlc3MoVHNzVGVzdFJlY292ZXJEYXRhLnJlY292ZXJ5RGVzdGluYXRpb24pO1xuXG4gICAgaXQoJ3Nob3VsZCByZWNvdmVyIFRSWCBmcm9tIFRTUyB3YWxsZXQgKHVuc2lnbmVkIHN3ZWVwKScsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIG1vY2subWV0aG9kKFRyeC5wcm90b3R5cGUgYXMgYW55LCAnZ2V0QWNjb3VudEJhbGFuY2VzRnJvbU5vZGUnLCAoKSA9PiB7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoYmFzZUFkZHJlc3NCYWxhbmNlKDMwMDAwMDApKTtcbiAgICAgIH0pO1xuXG4gICAgICBtb2NrLm1ldGhvZChUcngucHJvdG90eXBlIGFzIGFueSwgJ2dldEJ1aWxkVHJhbnNhY3Rpb24nLCAoLi4uYXJncykgPT4ge1xuICAgICAgICBpZiAoYXJnc1swXSA9PT0gZGVzdGluYXRpb25IZXggJiYgYXJnc1sxXSA9PT0gd2FsbGV0QWRkckhleCAmJiBhcmdzWzJdID09PSA5MDAwMDApIHtcbiAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGNyZWF0aW9uVHJhbnNhY3Rpb24od2FsbGV0QWRkckhleCwgZGVzdGluYXRpb25IZXgsIDkwMDAwMCkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICB9KTtcblxuICAgICAgY29uc3QgcmVzID0gYXdhaXQgYmFzZWNvaW4ucmVjb3Zlcih7XG4gICAgICAgIHVzZXJLZXk6IFRzc1Rlc3RSZWNvdmVyRGF0YS51c2VyS2V5LFxuICAgICAgICBiYWNrdXBLZXk6IFRzc1Rlc3RSZWNvdmVyRGF0YS5iYWNrdXBLZXksXG4gICAgICAgIGJpdGdvS2V5OiBUc3NUZXN0UmVjb3ZlckRhdGEuYml0Z29LZXksXG4gICAgICAgIHJlY292ZXJ5RGVzdGluYXRpb246IFRzc1Rlc3RSZWNvdmVyRGF0YS5yZWNvdmVyeURlc3RpbmF0aW9uLFxuICAgICAgICBpc1RzczogdHJ1ZSxcbiAgICAgIH0pO1xuXG4gICAgICBhc3NlcnQub2soT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHJlcywgJ3R4SGV4JykpO1xuICAgICAgYXNzZXJ0Lm9rKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChyZXMsICdmZWVJbmZvJykpO1xuICAgICAgYXNzZXJ0LmVxdWFsKHJlcy5yZWNvdmVyeUFtb3VudCwgOTAwMDAwKTtcbiAgICAgIGNvbnN0IHJhd0RhdGEgPSBKU09OLnBhcnNlKHJlcy50eEhleCkucmF3X2RhdGE7XG4gICAgICBhc3NlcnQub2soT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHJhd0RhdGEsICdjb250cmFjdCcpKTtcbiAgICAgIGNvbnN0IHZhbHVlID0gcmF3RGF0YS5jb250cmFjdFswXS5wYXJhbWV0ZXIudmFsdWU7XG4gICAgICBhc3NlcnQuZXF1YWwodmFsdWUuYW1vdW50LCA5MDAwMDApO1xuICAgICAgYXNzZXJ0LmVxdWFsKFV0aWxzLmdldEJhc2U1OEFkZHJlc3NGcm9tSGV4KHZhbHVlLm93bmVyX2FkZHJlc3MpLCBUc3NUZXN0UmVjb3ZlckRhdGEud2FsbGV0QWRkcmVzcyk7XG4gICAgICBhc3NlcnQuZXF1YWwoVXRpbHMuZ2V0QmFzZTU4QWRkcmVzc0Zyb21IZXgodmFsdWUudG9fYWRkcmVzcyksIFRzc1Rlc3RSZWNvdmVyRGF0YS5yZWNvdmVyeURlc3RpbmF0aW9uKTtcbiAgICAgIC8vIHVuc2lnbmVkIHN3ZWVwOiBubyBzaWduYXR1cmVzXG4gICAgICBjb25zdCBzaWcgPSBKU09OLnBhcnNlKHJlcy50eEhleCkuc2lnbmF0dXJlO1xuICAgICAgYXNzZXJ0Lm9rKCFzaWcgfHwgc2lnLmxlbmd0aCA9PT0gMCk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHJlY292ZXIgVFJYIGZyb20gVFNTIHdhbGxldCAoc2lnbmVkIHJlY292ZXJ5KScsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIG1vY2subWV0aG9kKFRyeC5wcm90b3R5cGUgYXMgYW55LCAnZ2V0QWNjb3VudEJhbGFuY2VzRnJvbU5vZGUnLCAoKSA9PiB7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoYmFzZUFkZHJlc3NCYWxhbmNlKDMwMDAwMDApKTtcbiAgICAgIH0pO1xuXG4gICAgICBtb2NrLm1ldGhvZChUcngucHJvdG90eXBlIGFzIGFueSwgJ2dldEJ1aWxkVHJhbnNhY3Rpb24nLCAoLi4uYXJncykgPT4ge1xuICAgICAgICBpZiAoYXJnc1swXSA9PT0gZGVzdGluYXRpb25IZXggJiYgYXJnc1sxXSA9PT0gd2FsbGV0QWRkckhleCAmJiBhcmdzWzJdID09PSA5MDAwMDApIHtcbiAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGNyZWF0aW9uVHJhbnNhY3Rpb24od2FsbGV0QWRkckhleCwgZGVzdGluYXRpb25IZXgsIDkwMDAwMCkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICB9KTtcblxuICAgICAgbW9jay5tZXRob2QoYml0Z28gYXMgYW55LCAnZGVjcnlwdCcsICgpID0+IHtcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShUc3NUZXN0UmVjb3ZlckRhdGEudXNlclBydktleSk7XG4gICAgICB9KTtcblxuICAgICAgY29uc3QgcmVzID0gYXdhaXQgYmFzZWNvaW4ucmVjb3Zlcih7XG4gICAgICAgIHVzZXJLZXk6IFRzc1Rlc3RSZWNvdmVyRGF0YS5lbmNyeXB0ZWRVc2VyS2V5LFxuICAgICAgICBiYWNrdXBLZXk6IFRzc1Rlc3RSZWNvdmVyRGF0YS5lbmNyeXB0ZWRVc2VyS2V5LFxuICAgICAgICBiaXRnb0tleTogVHNzVGVzdFJlY292ZXJEYXRhLmJpdGdvS2V5LFxuICAgICAgICByZWNvdmVyeURlc3RpbmF0aW9uOiBUc3NUZXN0UmVjb3ZlckRhdGEucmVjb3ZlcnlEZXN0aW5hdGlvbixcbiAgICAgICAgd2FsbGV0UGFzc3BocmFzZTogVHNzVGVzdFJlY292ZXJEYXRhLndhbGxldFBhc3NwaHJhc2UsXG4gICAgICAgIGlzVHNzOiB0cnVlLFxuICAgICAgfSk7XG5cbiAgICAgIGFzc2VydC5vayhPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocmVzLCAndHhIZXgnKSk7XG4gICAgICBhc3NlcnQub2soT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHJlcywgJ2ZlZUluZm8nKSk7XG4gICAgICBhc3NlcnQuZXF1YWwocmVzLnJlY292ZXJ5QW1vdW50LCA5MDAwMDApO1xuICAgICAgY29uc3QgcmF3RGF0YSA9IEpTT04ucGFyc2UocmVzLnR4SGV4KS5yYXdfZGF0YTtcbiAgICAgIGNvbnN0IHZhbHVlID0gcmF3RGF0YS5jb250cmFjdFswXS5wYXJhbWV0ZXIudmFsdWU7XG4gICAgICBhc3NlcnQuZXF1YWwodmFsdWUuYW1vdW50LCA5MDAwMDApO1xuICAgICAgYXNzZXJ0LmVxdWFsKFV0aWxzLmdldEJhc2U1OEFkZHJlc3NGcm9tSGV4KHZhbHVlLm93bmVyX2FkZHJlc3MpLCBUc3NUZXN0UmVjb3ZlckRhdGEud2FsbGV0QWRkcmVzcyk7XG4gICAgICBhc3NlcnQuZXF1YWwoVXRpbHMuZ2V0QmFzZTU4QWRkcmVzc0Zyb21IZXgodmFsdWUudG9fYWRkcmVzcyksIFRzc1Rlc3RSZWNvdmVyRGF0YS5yZWNvdmVyeURlc3RpbmF0aW9uKTtcbiAgICAgIC8vIHNpZ25lZCByZWNvdmVyeTogc2hvdWxkIGhhdmUgZXhhY3RseSAxIHNpZ25hdHVyZVxuICAgICAgY29uc3Qgc2lnID0gSlNPTi5wYXJzZShyZXMudHhIZXgpLnNpZ25hdHVyZTtcbiAgICAgIGFzc2VydC5lcXVhbChzaWcubGVuZ3RoLCAxKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgcmVjb3ZlciBUUkMtMjAgdG9rZW4gZnJvbSBUU1Mgd2FsbGV0ICh1bnNpZ25lZCBzd2VlcCknLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBtb2NrLm1ldGhvZChUcngucHJvdG90eXBlIGFzIGFueSwgJ2dldEFjY291bnRCYWxhbmNlc0Zyb21Ob2RlJywgKCkgPT4ge1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKFxuICAgICAgICAgIGJhc2VBZGRyZXNzQmFsYW5jZSgxMDAwMDAwMDAsIFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgVEczWFh5RXhCa1BwOW56ZGFqRFpzb3pFdTRCa2FTSm96czogJzExMDAwMDAwMDAnLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICBdKVxuICAgICAgICApO1xuICAgICAgfSk7XG5cbiAgICAgIG1vY2subWV0aG9kKFRyeC5wcm90b3R5cGUgYXMgYW55LCAnZ2V0VHJpZ2dlclNtYXJ0Q29udHJhY3RUcmFuc2FjdGlvbicsICgpID0+IHtcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShTYW1wbGVSYXdUb2tlblNlbmRUeG4pO1xuICAgICAgfSk7XG5cbiAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IGJhc2Vjb2luLnJlY292ZXIoe1xuICAgICAgICB1c2VyS2V5OiBUc3NUZXN0UmVjb3ZlckRhdGEudXNlcktleSxcbiAgICAgICAgYmFja3VwS2V5OiBUc3NUZXN0UmVjb3ZlckRhdGEuYmFja3VwS2V5LFxuICAgICAgICBiaXRnb0tleTogVHNzVGVzdFJlY292ZXJEYXRhLmJpdGdvS2V5LFxuICAgICAgICB0b2tlbkNvbnRyYWN0QWRkcmVzczogJ1RHM1hYeUV4QmtQcDluemRhakRac296RXU0QmthU0pvenMnLFxuICAgICAgICByZWNvdmVyeURlc3RpbmF0aW9uOiBUc3NUZXN0UmVjb3ZlckRhdGEucmVjb3ZlcnlEZXN0aW5hdGlvbixcbiAgICAgICAgaXNUc3M6IHRydWUsXG4gICAgICB9KTtcblxuICAgICAgYXNzZXJ0Lm9rKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChyZXMsICd0eEhleCcpKTtcbiAgICAgIGFzc2VydC5lcXVhbChyZXMucmVjb3ZlcnlBbW91bnQsIDExMDAwMDAwMDApO1xuICAgICAgYXNzZXJ0LmVxdWFsKHJlcy5mZWVJbmZvLmZlZSwgJzEwMDAwMDAwMCcpO1xuICAgICAgY29uc3QgZXhwaXJhdGlvbkR1cmF0aW9uID0gcmVzLnR4LnJhd19kYXRhLmV4cGlyYXRpb24gLSByZXMudHgucmF3X2RhdGEudGltZXN0YW1wO1xuICAgICAgYXNzZXJ0Lm9rKGV4cGlyYXRpb25EdXJhdGlvbiA+PSA4NjQwMDAwMCk7XG4gICAgICAvLyB1bnNpZ25lZCBzd2VlcDogbm8gc2lnbmF0dXJlc1xuICAgICAgY29uc3Qgc2lnID0gSlNPTi5wYXJzZShyZXMudHhIZXgpLnNpZ25hdHVyZTtcbiAgICAgIGFzc2VydC5vayghc2lnIHx8IHNpZy5sZW5ndGggPT09IDApO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCByZWNvdmVyIFRSQy0yMCB0b2tlbiBmcm9tIFRTUyB3YWxsZXQgKHNpZ25lZCByZWNvdmVyeSknLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBtb2NrLm1ldGhvZChUcngucHJvdG90eXBlIGFzIGFueSwgJ2dldEFjY291bnRCYWxhbmNlc0Zyb21Ob2RlJywgKCkgPT4ge1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKFxuICAgICAgICAgIGJhc2VBZGRyZXNzQmFsYW5jZSgxMDAwMDAwMDAsIFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgVEczWFh5RXhCa1BwOW56ZGFqRFpzb3pFdTRCa2FTSm96czogJzExMDAwMDAwMDAnLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICBdKVxuICAgICAgICApO1xuICAgICAgfSk7XG5cbiAgICAgIG1vY2subWV0aG9kKFRyeC5wcm90b3R5cGUgYXMgYW55LCAnZ2V0VHJpZ2dlclNtYXJ0Q29udHJhY3RUcmFuc2FjdGlvbicsICgpID0+IHtcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShTYW1wbGVSYXdUb2tlblNlbmRUeG4pO1xuICAgICAgfSk7XG5cbiAgICAgIG1vY2subWV0aG9kKGJpdGdvIGFzIGFueSwgJ2RlY3J5cHQnLCAoKSA9PiB7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoVHNzVGVzdFJlY292ZXJEYXRhLnVzZXJQcnZLZXkpO1xuICAgICAgfSk7XG5cbiAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IGJhc2Vjb2luLnJlY292ZXIoe1xuICAgICAgICB1c2VyS2V5OiBUc3NUZXN0UmVjb3ZlckRhdGEuZW5jcnlwdGVkVXNlcktleSxcbiAgICAgICAgYmFja3VwS2V5OiBUc3NUZXN0UmVjb3ZlckRhdGEuZW5jcnlwdGVkVXNlcktleSxcbiAgICAgICAgYml0Z29LZXk6IFRzc1Rlc3RSZWNvdmVyRGF0YS5iaXRnb0tleSxcbiAgICAgICAgdG9rZW5Db250cmFjdEFkZHJlc3M6ICdURzNYWHlFeEJrUHA5bnpkYWpEWnNvekV1NEJrYVNKb3pzJyxcbiAgICAgICAgcmVjb3ZlcnlEZXN0aW5hdGlvbjogVHNzVGVzdFJlY292ZXJEYXRhLnJlY292ZXJ5RGVzdGluYXRpb24sXG4gICAgICAgIHdhbGxldFBhc3NwaHJhc2U6IFRzc1Rlc3RSZWNvdmVyRGF0YS53YWxsZXRQYXNzcGhyYXNlLFxuICAgICAgICBpc1RzczogdHJ1ZSxcbiAgICAgIH0pO1xuXG4gICAgICBhc3NlcnQub2soT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHJlcywgJ3R4SGV4JykpO1xuICAgICAgYXNzZXJ0LmVxdWFsKHJlcy5yZWNvdmVyeUFtb3VudCwgMTEwMDAwMDAwMCk7XG4gICAgICBhc3NlcnQuZXF1YWwocmVzLmZlZUluZm8uZmVlLCAnMTAwMDAwMDAwJyk7XG4gICAgICAvLyBzaWduZWQgcmVjb3Zlcnk6IHNob3VsZCBoYXZlIGV4YWN0bHkgMSBzaWduYXR1cmVcbiAgICAgIGNvbnN0IHNpZyA9IEpTT04ucGFyc2UocmVzLnR4SGV4KS5zaWduYXR1cmU7XG4gICAgICBhc3NlcnQuZXF1YWwoc2lnLmxlbmd0aCwgMSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHRocm93IGlmIFRTUyB3YWxsZXQgaGFzIGluc3VmZmljaWVudCBiYWxhbmNlJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgbW9jay5tZXRob2QoVHJ4LnByb3RvdHlwZSBhcyBhbnksICdnZXRBY2NvdW50QmFsYW5jZXNGcm9tTm9kZScsICgpID0+IHtcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShiYXNlQWRkcmVzc0JhbGFuY2UoMTAwMDAwMCkpOyAvLyBsZXNzIHRoYW4gU0FGRV9UUk9OX1RSQU5TQUNUSU9OX0ZFRSAoMi4xZTYpXG4gICAgICB9KTtcblxuICAgICAgYXdhaXQgYXNzZXJ0LnJlamVjdHMoXG4gICAgICAgIGJhc2Vjb2luLnJlY292ZXIoe1xuICAgICAgICAgIHVzZXJLZXk6IFRzc1Rlc3RSZWNvdmVyRGF0YS51c2VyS2V5LFxuICAgICAgICAgIGJhY2t1cEtleTogVHNzVGVzdFJlY292ZXJEYXRhLmJhY2t1cEtleSxcbiAgICAgICAgICBiaXRnb0tleTogVHNzVGVzdFJlY292ZXJEYXRhLmJpdGdvS2V5LFxuICAgICAgICAgIHJlY292ZXJ5RGVzdGluYXRpb246IFRzc1Rlc3RSZWNvdmVyRGF0YS5yZWNvdmVyeURlc3RpbmF0aW9uLFxuICAgICAgICAgIGlzVHNzOiB0cnVlLFxuICAgICAgICB9KSxcbiAgICAgICAge1xuICAgICAgICAgIG1lc3NhZ2U6IFwiQW1vdW50IG9mIGZ1bmRzIHRvIHJlY292ZXIgMTAwMDAwMCBpcyBsZXNzIHRoYW4gMjEwMDAwMCBhbmQgd291bGRuJ3QgYmUgYWJsZSB0byBmdW5kIGEgc2VuZFwiLFxuICAgICAgICB9XG4gICAgICApO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCB0aHJvdyBpZiBUUkMtMjAgdG9rZW4gbm90IGZvdW5kIGZvciBUU1Mgd2FsbGV0JywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgbW9jay5tZXRob2QoVHJ4LnByb3RvdHlwZSBhcyBhbnksICdnZXRBY2NvdW50QmFsYW5jZXNGcm9tTm9kZScsICgpID0+IHtcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShiYXNlQWRkcmVzc0JhbGFuY2UoMTAwMDAwMDAwLCBbXSkpO1xuICAgICAgfSk7XG5cbiAgICAgIGF3YWl0IGFzc2VydC5yZWplY3RzKFxuICAgICAgICBiYXNlY29pbi5yZWNvdmVyKHtcbiAgICAgICAgICB1c2VyS2V5OiBUc3NUZXN0UmVjb3ZlckRhdGEudXNlcktleSxcbiAgICAgICAgICBiYWNrdXBLZXk6IFRzc1Rlc3RSZWNvdmVyRGF0YS5iYWNrdXBLZXksXG4gICAgICAgICAgYml0Z29LZXk6IFRzc1Rlc3RSZWNvdmVyRGF0YS5iaXRnb0tleSxcbiAgICAgICAgICB0b2tlbkNvbnRyYWN0QWRkcmVzczogJ1RHM1hYeUV4QmtQcDluemRhakRac296RXU0QmthU0pvenMnLFxuICAgICAgICAgIHJlY292ZXJ5RGVzdGluYXRpb246IFRzc1Rlc3RSZWNvdmVyRGF0YS5yZWNvdmVyeURlc3RpbmF0aW9uLFxuICAgICAgICAgIGlzVHNzOiB0cnVlLFxuICAgICAgICB9KSxcbiAgICAgICAge1xuICAgICAgICAgIG1lc3NhZ2U6ICdOb3QgZm91bmQgdG9rZW4gdG8gcmVjb3ZlciwgcGxlYXNlIGNoZWNrIHRva2VuIGJhbGFuY2UnLFxuICAgICAgICB9XG4gICAgICApO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnaXNXYWxsZXRBZGRyZXNzJywgKCkgPT4ge1xuICAgIGl0KCdzaG91bGQgdmVyaWZ5IHJvb3QgYWRkcmVzcyAoaW5kZXggMCknLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBiYXNlY29pbi5pc1dhbGxldEFkZHJlc3Moe1xuICAgICAgICBhZGRyZXNzOiB0ZXN0V2FsbGV0RGF0YS5yb290QWRkcmVzcyxcbiAgICAgICAga2V5Y2hhaW5zOiB0ZXN0V2FsbGV0RGF0YS5rZXljaGFpbnMsXG4gICAgICAgIGluZGV4OiAwLFxuICAgICAgfSk7XG4gICAgICBhc3NlcnQuZXF1YWwocmVzdWx0LCB0cnVlKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgdmVyaWZ5IHJlY2VpdmUgYWRkcmVzcyAoaW5kZXggPiAwKScsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGJhc2Vjb2luLmlzV2FsbGV0QWRkcmVzcyh7XG4gICAgICAgIGFkZHJlc3M6IHRlc3RXYWxsZXREYXRhLnJlY2VpdmVBZGRyZXNzLFxuICAgICAgICBrZXljaGFpbnM6IHRlc3RXYWxsZXREYXRhLmtleWNoYWlucyxcbiAgICAgICAgaW5kZXg6IHRlc3RXYWxsZXREYXRhLnJlY2VpdmVBZGRyZXNzSW5kZXgsXG4gICAgICAgIGNoYWluOiAwLFxuICAgICAgfSk7XG4gICAgICBhc3NlcnQuZXF1YWwocmVzdWx0LCB0cnVlKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgdmVyaWZ5IGFkZHJlc3Mgd2l0aCBpbmRleCBpbiBjb2luU3BlY2lmaWMnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBiYXNlY29pbi5pc1dhbGxldEFkZHJlc3Moe1xuICAgICAgICBhZGRyZXNzOiB0ZXN0V2FsbGV0RGF0YS5yb290QWRkcmVzcyxcbiAgICAgICAga2V5Y2hhaW5zOiB0ZXN0V2FsbGV0RGF0YS5rZXljaGFpbnMsXG4gICAgICAgIGNvaW5TcGVjaWZpYzogeyBpbmRleDogMCB9LFxuICAgICAgfSk7XG4gICAgICBhc3NlcnQuZXF1YWwocmVzdWx0LCB0cnVlKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgdmVyaWZ5IGFkZHJlc3Mgd2l0aCBzdHJpbmcgaW5kZXgnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBiYXNlY29pbi5pc1dhbGxldEFkZHJlc3Moe1xuICAgICAgICBhZGRyZXNzOiB0ZXN0V2FsbGV0RGF0YS5yb290QWRkcmVzcyxcbiAgICAgICAga2V5Y2hhaW5zOiB0ZXN0V2FsbGV0RGF0YS5rZXljaGFpbnMsXG4gICAgICAgIGluZGV4OiAnMCcsXG4gICAgICB9KTtcbiAgICAgIGFzc2VydC5lcXVhbChyZXN1bHQsIHRydWUpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gZmFsc2UgZm9yIHdyb25nIGFkZHJlc3MgYXQgaW5kZXggMCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGJhc2Vjb2luLmlzV2FsbGV0QWRkcmVzcyh7XG4gICAgICAgIGFkZHJlc3M6IHRlc3RXYWxsZXREYXRhLnJlY2VpdmVBZGRyZXNzLCAvLyB3cm9uZyBhZGRyZXNzIGZvciBpbmRleCAwXG4gICAgICAgIGtleWNoYWluczogdGVzdFdhbGxldERhdGEua2V5Y2hhaW5zLFxuICAgICAgICBpbmRleDogMCxcbiAgICAgIH0pO1xuICAgICAgYXNzZXJ0LmVxdWFsKHJlc3VsdCwgZmFsc2UpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gZmFsc2UgZm9yIHdyb25nIGFkZHJlc3MgYXQgcmVjZWl2ZSBpbmRleCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGJhc2Vjb2luLmlzV2FsbGV0QWRkcmVzcyh7XG4gICAgICAgIGFkZHJlc3M6IHRlc3RXYWxsZXREYXRhLnJvb3RBZGRyZXNzLCAvLyB3cm9uZyBhZGRyZXNzIGZvciBpbmRleCAxXG4gICAgICAgIGtleWNoYWluczogdGVzdFdhbGxldERhdGEua2V5Y2hhaW5zLFxuICAgICAgICBpbmRleDogdGVzdFdhbGxldERhdGEucmVjZWl2ZUFkZHJlc3NJbmRleCxcbiAgICAgICAgY2hhaW46IDAsXG4gICAgICB9KTtcbiAgICAgIGFzc2VydC5lcXVhbChyZXN1bHQsIGZhbHNlKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgdGhyb3cgZm9yIGludmFsaWQgYWRkcmVzcycsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGF3YWl0IGFzc2VydC5yZWplY3RzKFxuICAgICAgICBiYXNlY29pbi5pc1dhbGxldEFkZHJlc3Moe1xuICAgICAgICAgIGFkZHJlc3M6ICdpbnZhbGlkLWFkZHJlc3MnLFxuICAgICAgICAgIGtleWNoYWluczogdGVzdFdhbGxldERhdGEua2V5Y2hhaW5zLFxuICAgICAgICAgIGluZGV4OiAwLFxuICAgICAgICB9KSxcbiAgICAgICAge1xuICAgICAgICAgIG1lc3NhZ2U6ICdJbnZhbGlkIGFkZHJlc3M6IGludmFsaWQtYWRkcmVzcycsXG4gICAgICAgIH1cbiAgICAgICk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHRocm93IGZvciBtaXNzaW5nIGluZGV4JywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgYXdhaXQgYXNzZXJ0LnJlamVjdHMoXG4gICAgICAgIGJhc2Vjb2luLmlzV2FsbGV0QWRkcmVzcyh7XG4gICAgICAgICAgYWRkcmVzczogdGVzdFdhbGxldERhdGEucm9vdEFkZHJlc3MsXG4gICAgICAgICAga2V5Y2hhaW5zOiB0ZXN0V2FsbGV0RGF0YS5rZXljaGFpbnMsXG4gICAgICAgIH0pLFxuICAgICAgICB7XG4gICAgICAgICAgbWVzc2FnZTogJ0ludmFsaWQgb3IgbWlzc2luZyBpbmRleCBmb3IgYWRkcmVzcyB2ZXJpZmljYXRpb24nLFxuICAgICAgICB9XG4gICAgICApO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCB0aHJvdyBmb3IgbWlzc2luZyBiaXRnbyBrZXkgb24gcm9vdCBhZGRyZXNzIHZlcmlmaWNhdGlvbicsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGF3YWl0IGFzc2VydC5yZWplY3RzKFxuICAgICAgICBiYXNlY29pbi5pc1dhbGxldEFkZHJlc3Moe1xuICAgICAgICAgIGFkZHJlc3M6IHRlc3RXYWxsZXREYXRhLnJvb3RBZGRyZXNzLFxuICAgICAgICAgIGtleWNoYWluczogdGVzdFdhbGxldERhdGEua2V5Y2hhaW5zLnNsaWNlKDAsIDIpLCAvLyBvbmx5IHVzZXIgYW5kIGJhY2t1cCBrZXlzXG4gICAgICAgICAgaW5kZXg6IDAsXG4gICAgICAgIH0pLFxuICAgICAgICB7XG4gICAgICAgICAgbWVzc2FnZTogJ0JpdEdvIHB1YmxpYyBrZXkgcmVxdWlyZWQgZm9yIHJvb3QgYWRkcmVzcyB2ZXJpZmljYXRpb24nLFxuICAgICAgICB9XG4gICAgICApO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCB0aHJvdyBmb3IgbWlzc2luZyB1c2VyIGtleSBvbiByZWNlaXZlIGFkZHJlc3MgdmVyaWZpY2F0aW9uJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgYXdhaXQgYXNzZXJ0LnJlamVjdHMoXG4gICAgICAgIGJhc2Vjb2luLmlzV2FsbGV0QWRkcmVzcyh7XG4gICAgICAgICAgYWRkcmVzczogdGVzdFdhbGxldERhdGEucmVjZWl2ZUFkZHJlc3MsXG4gICAgICAgICAga2V5Y2hhaW5zOiBbXSwgLy8gbm8ga2V5c1xuICAgICAgICAgIGluZGV4OiB0ZXN0V2FsbGV0RGF0YS5yZWNlaXZlQWRkcmVzc0luZGV4LFxuICAgICAgICB9KSxcbiAgICAgICAge1xuICAgICAgICAgIG1lc3NhZ2U6ICdVc2VyIHB1YmxpYyBrZXkgcmVxdWlyZWQgZm9yIHJlY2VpdmUgYWRkcmVzcyB2ZXJpZmljYXRpb24nLFxuICAgICAgICB9XG4gICAgICApO1xuICAgIH0pO1xuICB9KTtcbn0pO1xuIl19