@bitgo-beta/sdk-coin-sol 2.4.3-beta.1344 → 2.4.3-beta.1345
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/test/unit/utils.js
CHANGED
|
@@ -455,5 +455,51 @@ describe('SOL util library', function () {
|
|
|
455
455
|
});
|
|
456
456
|
});
|
|
457
457
|
});
|
|
458
|
+
describe('isIdempotentAtaInstruction', function () {
|
|
459
|
+
const mockKeys = [
|
|
460
|
+
{ pubkey: new web3_js_1.PublicKey('9i8CSiz2un7rfuNvTMt1tTXbHSaMkPZyJ4MexY1yeZBD'), isSigner: true, isWritable: true },
|
|
461
|
+
{ pubkey: new web3_js_1.PublicKey('3F7X7ifwMR29Z3t1YamFg6yzCcsSkjAZpZF8yU1kWURh'), isSigner: false, isWritable: true },
|
|
462
|
+
];
|
|
463
|
+
it('should return true for idempotent ATA instruction with discriminator byte 1', function () {
|
|
464
|
+
const instruction = new web3_js_1.TransactionInstruction({
|
|
465
|
+
programId: spl_token_1.ASSOCIATED_TOKEN_PROGRAM_ID,
|
|
466
|
+
keys: mockKeys,
|
|
467
|
+
data: Buffer.from([1]),
|
|
468
|
+
});
|
|
469
|
+
lib_1.Utils.isIdempotentAtaInstruction(instruction).should.equal(true);
|
|
470
|
+
});
|
|
471
|
+
it('should return true for idempotent ATA instruction from base64 "AQ=="', function () {
|
|
472
|
+
const instruction = new web3_js_1.TransactionInstruction({
|
|
473
|
+
programId: spl_token_1.ASSOCIATED_TOKEN_PROGRAM_ID,
|
|
474
|
+
keys: mockKeys,
|
|
475
|
+
data: Buffer.from('AQ==', 'base64'),
|
|
476
|
+
});
|
|
477
|
+
lib_1.Utils.isIdempotentAtaInstruction(instruction).should.equal(true);
|
|
478
|
+
});
|
|
479
|
+
it('should return false for legacy ATA instruction with empty data', function () {
|
|
480
|
+
const instruction = new web3_js_1.TransactionInstruction({
|
|
481
|
+
programId: spl_token_1.ASSOCIATED_TOKEN_PROGRAM_ID,
|
|
482
|
+
keys: mockKeys,
|
|
483
|
+
data: Buffer.from([]),
|
|
484
|
+
});
|
|
485
|
+
lib_1.Utils.isIdempotentAtaInstruction(instruction).should.equal(false);
|
|
486
|
+
});
|
|
487
|
+
it('should return false for instruction with wrong discriminator', function () {
|
|
488
|
+
const instruction = new web3_js_1.TransactionInstruction({
|
|
489
|
+
programId: spl_token_1.ASSOCIATED_TOKEN_PROGRAM_ID,
|
|
490
|
+
keys: mockKeys,
|
|
491
|
+
data: Buffer.from([2]),
|
|
492
|
+
});
|
|
493
|
+
lib_1.Utils.isIdempotentAtaInstruction(instruction).should.equal(false);
|
|
494
|
+
});
|
|
495
|
+
it('should return false for instruction with multiple bytes', function () {
|
|
496
|
+
const instruction = new web3_js_1.TransactionInstruction({
|
|
497
|
+
programId: spl_token_1.ASSOCIATED_TOKEN_PROGRAM_ID,
|
|
498
|
+
keys: mockKeys,
|
|
499
|
+
data: Buffer.from([1, 2]),
|
|
500
|
+
});
|
|
501
|
+
lib_1.Utils.isIdempotentAtaInstruction(instruction).should.equal(false);
|
|
502
|
+
});
|
|
503
|
+
});
|
|
458
504
|
});
|
|
459
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi90ZXN0L3VuaXQvdXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxvREFBNEI7QUFDNUIsdUNBQXNDO0FBQ3RDLDJEQUE2QztBQUM3Qyw2Q0FBeUc7QUFDekcsdURBS2lDO0FBQ2pDLGdFQUFxQztBQUNyQyxpREFBMEQ7QUFFMUQsUUFBUSxDQUFDLGtCQUFrQixFQUFFO0lBQzNCLFFBQVEsQ0FBQyxnQkFBZ0IsRUFBRTtRQUN6QixFQUFFLENBQUMsMkNBQTJDLEVBQUU7WUFDOUMsS0FBSyxNQUFNLE9BQU8sSUFBSSxRQUFRLENBQUMsU0FBUyxDQUFDLGdCQUFnQixFQUFFLENBQUM7Z0JBQzFELGdCQUFNLENBQUMsWUFBWSxDQUFDLEdBQUcsRUFBRSxDQUFDLFdBQUssQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztnQkFDekQsZ0JBQU0sQ0FBQyxLQUFLLENBQUMsV0FBSyxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQztZQUNyRCxDQUFDO1lBQ0Qsd0VBQXdFO1lBQ3hFLGdCQUFNLENBQUMsWUFBWSxDQUFDLEdBQUcsRUFBRSxDQUFDLFdBQUssQ0FBQyxjQUFjLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQztZQUMzRCxrRUFBa0U7WUFDbEUsZ0JBQU0sQ0FBQyxLQUFLLENBQUMsV0FBSyxDQUFDLGNBQWMsQ0FBQyxTQUFTLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUN2RCxDQUFDLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQyw0Q0FBNEMsRUFBRTtZQUMvQyxLQUFLLE1BQU0sT0FBTyxJQUFJLFFBQVEsQ0FBQyxTQUFTLENBQUMsY0FBYyxFQUFFLENBQUM7Z0JBQ3hELGdCQUFNLENBQUMsS0FBSyxDQUFDLFdBQUssQ0FBQyxjQUFjLENBQUMs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LENBQUM7Z0JBQ2hHLE1BQU0sUUFBUSxHQUFHLFdBQUssQ0FBQyx1Q0FBdUMsQ0FDNUQsWUFBWSxFQUNaLDhDQUFrQyxDQUNuQyxDQUFDO2dCQUNGLFFBQVEsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDO1lBQzVCLENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHNob3VsZCBmcm9tICdzaG91bGQnO1xuaW1wb3J0IHsgVXRpbHMgfSBmcm9tICcuLi8uLi9zcmMvbGliJztcbmltcG9ydCAqIGFzIHRlc3REYXRhIGZyb20gJy4uL3Jlc291cmNlcy9zb2wnO1xuaW1wb3J0IHsgTG9ja3VwLCBQdWJsaWNLZXksIFN0YWtlUHJvZ3JhbSwgU3lzdGVtUHJvZ3JhbSwgVHJhbnNhY3Rpb25JbnN0cnVjdGlvbiB9IGZyb20gJ0Bzb2xhbmEvd2ViMy5qcyc7XG5pbXBvcnQge1xuICBNRU1PX1BST0dSQU1fUEssXG4gIHN0YWtpbmdBY3RpdmF0ZUluc3RydWN0aW9uc0luZGV4ZXMsXG4gIHN0YWtpbmdEZWFjdGl2YXRlSW5zdHJ1Y3Rpb25zSW5kZXhlcyxcbiAgc3Rha2luZ1dpdGhkcmF3SW5zdHJ1Y3Rpb25zSW5kZXhlcyxcbn0gZnJvbSAnLi4vLi4vc3JjL2xpYi9jb25zdGFudHMnO1xuaW1wb3J0IEJpZ051bWJlciBmcm9tICdiaWdudW1iZXIuanMnO1xuaW1wb3J0IHsgVE9LRU5fMjAyMl9QUk9HUkFNX0lEIH0gZnJvbSAnQHNvbGFuYS9zcGwtdG9rZW4nO1xuXG5kZXNjcmliZSgnU09MIHV0aWwgbGlicmFyeScsIGZ1bmN0aW9uICgpIHtcbiAgZGVzY3JpYmUoJ2lzVmFsaWRBZGRyZXNzJywgZnVuY3Rpb24gKCkge1xuICAgIGl0KCdzaG91bGQgZmFpbCB0byB2YWxpZGF0ZSBpbnZhbGlkIGFkZHJlc3NlcycsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGZvciAoY29uc3QgYWRkcmVzcyBvZiB0ZXN0RGF0YS5hZGRyZXNzZXMuaW52YWxpZEFkZHJlc3Nlcykge1xuICAgICAgICBzaG91bGQuZG9lc05vdFRocm93KCgpID0+IFV0aWxzLmlzVmFsaWRBZGRyZXNzKGFkZHJlc3MpKTtcbiAgICAgICAgc2hvdWxkLmVxdWFsKFV0aWxzLmlzVmFsaWRBZGRyZXNzKGFkZHJlc3MpLCBmYWxzZSk7XG4gICAgICB9XG4gICAgICAvLyBAdHMtZXhwZWN0LWVycm9yIFRlc3RpbmcgZm9yIG1pc3NpbmcgcGFyYW0sIHNob3VsZCBub3QgdGhyb3cgYW4gZXJyb3JcbiAgICAgIHNob3VsZC5kb2VzTm90VGhyb3coKCkgPT4gVXRpbHMuaXNWYWxpZEFkZHJlc3ModW5kZWZpbmVkKSk7XG4gICAgICAvLyBAdHMtZXhwZWN0LWVycm9yIFRlc3RpbmcgZm9yIG1pc3NpbmcgcGFyYW0sIHNob3VsZCByZXR1cm4gZmFsc2VcbiAgICAgIHNob3VsZC5lcXVhbChVdGlscy5pc1ZhbGlkQWRkcmVzcyh1bmRlZmluZWQpLCBmYWxzZSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHN1Y2NlZWQgdG8gdmFsaWRhdGUgdmFsaWQgYWRkcmVzc2VzJywgZnVuY3Rpb24gKCkge1xuICAgICAgZm9yIChjb25zdCBhZGRyZXNzIG9mIHRlc3REYXRhLmFkZHJlc3Nlcy52YWxpZEFkZHJlc3Nlcykge1xuICAgICAgICBzaG91bGQuZXF1YWwoVXRpbHMuaXNWYWxpZEFkZHJlc3MoYWRkcmVzcyksIHRydWUpO1xuICAgICAgfVxuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnaXNWYWxpZEJsb2NrSWQnLCBmdW5jdGlvbiAoKSB7XG4gICAgaXQoJ3Nob3VsZCBmYWlsIHRvIHZhbGlkYXRlIGludmFsaWQgQmxvY2sgaGFzaGVzJywgZnVuY3Rpb24gKCkge1xuICAgICAgZm9yIChjb25zdCBibG9ja0hhc2ggb2YgdGVzdERhdGEuYmxvY2tIYXNoZXMuaW52YWxpZEJsb2NrSGFzaGVzKSB7XG4gICAgICAgIHNob3VsZC5kb2VzTm90VGhyb3coKCkgPT4gVXRpbHMuaXNWYWxpZEJsb2NrSWQoYmxvY2tIYXNoKSk7XG4gICAgICAgIHNob3VsZC5lcXVhbChVdGlscy5pc1ZhbGlkQmxvY2tJZChibG9ja0hhc2gpLCBmYWxzZSk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHN1Y2NlZWQgdG8gdmFsaWRhdGUgdmFsaWQgQmxvY2sgaGFzaGVzJywgZnVuY3Rpb24gKCkge1xuICAgICAgZm9yIChjb25zdCBibG9ja0hhc2ggb2YgdGVzdERhdGEuYmxvY2tIYXNoZXMudmFsaWRCbG9ja0hhc2hlcykge1xuICAgICAgICBzaG91bGQuZXF1YWwoVXRpbHMuaXNWYWxpZEJsb2NrSWQoYmxvY2tIYXNoKSwgdHJ1ZSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdpc1ZhbGlkUHVibGljS2V5JywgZnVuY3Rpb24gKCkge1xuICAgIGl0KCdzaG91bGQgZmFpbCB0byB2YWxpZGF0ZSBpbnZhbGlkIHB1YmxpYyBrZXlzJywgZnVuY3Rpb24gKCkge1xuICAgICAgZm9yIChjb25zdCBwdWJLZXkgb2YgdGVzdERhdGEucHViS2V5cy5pbnZhbGlkUHViS2V5cykge1xuICAgICAgICBzaG91bGQuZG9lc05vdFRocm93KCgpID0+IFV0aWxzLmlzVmFsaWRQdWJsaWNLZXkocHViS2V5KSk7XG4gICAgICAgIHNob3VsZC5lcXVhbChVdGlscy5pc1ZhbGlkUHVibGljS2V5KHB1YktleSksIGZhbHNlKTtcbiAgICAgIH1cbiAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgVGVzdGluZyBmb3IgbWlzc2luZyBwYXJhbSwgc2hvdWxkIG5vdCB0aHJvdyBhbiBlcnJvclxuICAgICAgc2hvdWxkLmRvZXNOb3RUaHJvdygoKSA9PiBVdGlscy5pc1ZhbGlkUHVibGljS2V5KHVuZGVmaW5lZCkpO1xuICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvciBUZXN0aW5nIGZvciBtaXNzaW5nIHBhcmFtLCBzaG91bGQgcmV0dXJuIGZhbHNlXG4gICAgICBzaG91bGQuZXF1YWwoVXRpbHMuaXNWYWxpZFB1YmxpY0tleSh1bmRlZmluZWQpLCBmYWxzZSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHN1Y2NlZWQgdG8gdmFsaWRhdGUgcHVibGljIGtleXMnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBmb3IgKGNvbnN0IHB1YktleSBvZiB0ZXN0RGF0YS5wdWJLZXlzLnZhbGlkUHViS2V5cykge1xuICAgICAgICBzaG91bGQuZXF1YWwoVXRpbHMuaXNWYWxpZFB1YmxpY0tleShwdWJLZXkpLCB0cnVlKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ2lzVmFsaWRQcml2YXRlS2V5JywgZnVuY3Rpb24gKCkge1xuICAgIGl0KCdzaG91bGQgZmFpbCB0byB2YWxpZGF0ZSBpbnZhbGlkIHByaXZhdGUga2V5cycsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGZvciAoY29uc3QgcHJ2S2V5IG9mIHRlc3REYXRhLnBydktleXMuaW52YWxpZFBydktleXMpIHtcbiAgICAgICAgc2hvdWxkLmRvZXNOb3RUaHJvdygoKSA9PiBVdGlscy5pc1ZhbGlkUHJpdmF0ZUtleShwcnZLZXkpKTtcbiAgICAgICAgc2hvdWxkLmVxdWFsKFV0aWxzLmlzVmFsaWRQcml2YXRlS2V5KHBydktleSksIGZhbHNlKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgc3VjY2VlZCB0byB2YWxpZGF0ZSBwcml2YXRlIGtleXMnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCB2YWxpZFBydktleSA9IFt0ZXN0RGF0YS5wcnZLZXlzLnBydktleTEuYmFzZTU4LCB0ZXN0RGF0YS5wcnZLZXlzLnBydktleTEudWludDhBcnJheV07XG4gICAgICBmb3IgKGNvbnN0IHBydktleSBvZiB2YWxpZFBydktleSkge1xuICAgICAgICBzaG91bGQuZXF1YWwoVXRpbHMuaXNWYWxpZFByaXZhdGVLZXkocHJ2S2V5KSwgdHJ1ZSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdpc1ZhbGlkUmF3VHJhbnNhY3Rpb24nLCBmdW5jdGlvbiAoKSB7XG4gICAgaXQoJ3Nob3VsZCBmYWlsIHRvIHZhbGlkYXRlIGFuIGludmFsaWQgcmF3IHRyYW5zYWN0aW9uJywgZnVuY3Rpb24gKCkge1xuICAgICAgc2hvdWxkLmRvZXNOb3RUaHJvdygoKSA9PiBVdGlscy5pc1ZhbGlkUmF3VHJhbnNhY3Rpb24odGVzdERhdGEuSU5WQUxJRF9SQVdfVFgpKTtcbiAgICAgIHNob3VsZC5lcXVhbChVdGlscy5pc1ZhbGlkUmF3VHJhbnNhY3Rpb24odGVzdERhdGEuSU5WQUxJRF9SQVdfVFgpLCBmYWxzZSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHN1Y2NlZWQgdG8gdmFsaWRhdGUgYSB2YWxpZCByYXcgdHJhbnNhY3Rpb24nLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCB2YWxpZFJhd1R4cyA9IFt0ZXN0RGF0YS5SQVdfVFhfVU5TSUdORUQsIHRlc3REYXRhLlJBV19UWF9TSUdORURdO1xuICAgICAgZm9yIChjb25zdCByYXdUeCBvZiB2YWxpZFJhd1R4cykge1xuICAgICAgICBzaG91bGQuZXF1YWwoVXRpbHMuaXNWYWxpZFJhd1RyYW5zYWN0aW9uKHJhd1R4KSwgdHJ1ZSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdpc1ZhbGlkU2lnbmF0dXJlIGFuZCBpc1ZhbGlkVHJhbnNhY3Rpb25JZCcsIGZ1bmN0aW9uICgpIHtcbiAgICBpdCgnc2hvdWxkIGZhaWwgdG8gdmFsaWRhdGUgaW52YWxpZCBzaWduYXR1cmVzJywgZnVuY3Rpb24gKCkge1xuICAgICAgZm9yIChjb25zdCBzaWduYXR1cmUgb2YgdGVzdERhdGEuc2lnbmF0dXJlcy5pbnZhbGlkU2lnbmF0dXJlcykge1xuICAgICAgICBzaG91bGQuZG9lc05vdFRocm93KCgpID0+IFV0aWxzLmlzVmFsaWRTaWduYXR1cmUoc2lnbmF0dXJlKSk7XG4gICAgICAgIHNob3VsZC5lcXVhbChVdGlscy5pc1ZhbGlkU2lnbmF0dXJlKHNpZ25hdHVyZSksIGZhbHNlKTtcbiAgICAgICAgc2hvdWxkLmRvZXNOb3RUaHJvdygoKSA9PiBVdGlscy5pc1ZhbGlkVHJhbnNhY3Rpb25JZChzaWduYXR1cmUpKTtcbiAgICAgICAgc2hvdWxkLmVxdWFsKFV0aWxzLmlzVmFsaWRUcmFuc2FjdGlvbklkKHNpZ25hdHVyZSksIGZhbHNlKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgc3VjY2VlZCB0byB2YWxpZGF0ZSB2YWxpZCBzaWduYXR1cmVzJywgZnVuY3Rpb24gKCkge1xuICAgICAgZm9yIChjb25zdCBzaWduYXR1cmUgb2YgdGVzdERhdGEuc2lnbmF0dXJlcy52YWxpZFNpZ25hdHVyZXMpIHtcbiAgICAgICAgc2hvdWxkLmVxdWFsKFV0aWxzLmlzVmFsaWRTaWduYXR1cmUoc2lnbmF0dXJlKSwgdHJ1ZSk7XG4gICAgICAgIHNob3VsZC5lcXVhbChVdGlscy5pc1ZhbGlkVHJhbnNhY3Rpb25JZChzaWduYXR1cmUpLCB0cnVlKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ2Jhc2U1OCBhbmQgVWludDhBcnJheSBlbmNvZGluZycsIGZ1bmN0aW9uICgpIHtcbiAgICBpdCgnc2hvdWxkIHN1Y2NlZWQgdG8gYmFzZTU4VG9VaW50OEFycmF5JywgZnVuY3Rpb24gKCkge1xuICAgICAgc2hvdWxkLmRlZXBFcXVhbChVdGlscy5iYXNlNThUb1VpbnQ4QXJyYXkodGVzdERhdGEucHJ2S2V5cy5wcnZLZXkxLmJhc2U1OCksIHRlc3REYXRhLnBydktleXMucHJ2S2V5MS51aW50OEFycmF5KTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgc3VjY2VlZCB0byBVaW50OEFycmF5VG9iYXNlNTgnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBzaG91bGQuZGVlcEVxdWFsKFV0aWxzLlVpbnQ4QXJyYXlUb2Jhc2U1OCh0ZXN0RGF0YS5wcnZLZXlzLnBydktleTEudWludDhBcnJheSksIHRlc3REYXRhLnBydktleXMucHJ2S2V5MS5iYXNlNTgpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnaXNWYWxpZEFtb3VudCcsIGZ1bmN0aW9uICgpIHtcbiAgICBpdCgnc2hvdWxkIHN1Y2NlZWQgZm9yIHZhbGlkIGFtb3VudHMnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCB2YWxpZEFtb3VudHMgPSBbJzAnLCAnMTIzMTIzMTInXTtcbiAgICAgIGZvciAoY29uc3QgYW1vdW50IG9mIHZhbGlkQW1vdW50cykge1xuICAgICAgICBzaG91bGQuZXF1YWwoVXRpbHMuaXNWYWxpZEFtb3VudChhbW91bnQpLCB0cnVlKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgZmFpbCBmb3IgaW52YWxpZCBhbW91bnRzJywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgaW52YWxpZEFtb3VudHMgPSBbJy0xJywgJ3JhbmRvbXN0cmluZycsICczMy4wNDIzNSddO1xuICAgICAgZm9yIChjb25zdCBhbW91bnQgb2YgaW52YWxpZEFtb3VudHMpIHtcbiAgICAgICAgc2hvdWxkLmVxdWFsKFV0aWxzLmlzVmFsaWRBbW91bnQoYW1vdW50KSwgZmFsc2UpO1xuICAgICAgfVxuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgndmVyaWZ5U2lnbmF0dXJlJywgZnVuY3Rpb24gKCkge1xuICAgIGl0KCdzaG91bGQgc3VjY2VlZCBmb3IgdmFsaWQgc2lnbmF0dXJlIGluIGEgdW5zaWduZWQgdHgnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBzaWduYXR1cmUgPSAnMzM1c3hBdVZqNXVjWHFWV1c4MlF3cEZMQXJQYmREM2dYZlhyNEtyeGtMa1VwbUxCM053ejJHODJ6MlRxaUREN21OQUFiSGtjQXFENXljRFpwMXZWS3RqZic7XG4gICAgICBVdGlscy52ZXJpZnlTaWduYXR1cmUoXG4gICAgICAgIHRlc3REYXRhLlRPS0VOX1RSQU5TRkVSX1VOU0lHTkVEX1RYX1dJVEhfTUVNT19BTkRfRFVSQUJMRV9OT05DRV9PTEQsXG4gICAgICAgIHNpZ25hdHVyZSxcbiAgICAgICAgdGVzdERhdGEuYXNzb2NpYXRlZFRva2VuQWNjb3VudHMuYWNjb3VudHNbMF0ucHViXG4gICAgICApLnNob3VsZC5lcXVhbCh0cnVlKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgc3VjY2VlZCBmb3IgdmFsaWQgc2lnbmF0dXJlIGluIGEgc2lnbmVkIHR4JywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3Qgc2lnbmF0dXJlID0gJzMzNXN4QXVWajV1Y1hxVldXODJRd3BGTEFyUGJkRDNnWGZYcjRLcnhrTGtVcG1MQjNOd3oyRzgyejJUcWlERDdtTkFBYkhrY0FxRDV5Y0RacDF2Vkt0amYnO1xuICAgICAgVXRpbHMudmVyaWZ5U2lnbmF0dXJlKFxuICAgICAgICB0ZXN0RGF0YS5UT0tFTl9UUkFOU0ZFUl9TSUdORURfVFhfV0lUSF9NRU1PX0FORF9EVVJBQkxFX05PTkNFX09MRCxcbiAgICAgICAgc2lnbmF0dXJlLFxuICAgICAgICB0ZXN0RGF0YS5hc3NvY2lhdGVkVG9rZW5BY2NvdW50cy5hY2NvdW50c1swXS5wdWJcbiAgICAgICkuc2hvdWxkLmVxdWFsKHRydWUpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBmYWlsIGZvciBpbnZhbGlkIHNpZ25hdHVyZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHNpZ25hdHVyZSA9ICcyUWRLQUxxNGFkYVRhaEpIMTNBR3pNNWJBRnVOc2h3NDNpUUJkVlM5RDJMb3E3MzZ6VWdQWGZIajMyY05KS1g2RnlqVXpZSmhHZkV5QUFCNUZnWVVXNnpSJztcbiAgICAgIFV0aWxzLnZlcmlmeVNpZ25hdHVyZShcbiAgICAgICAgdGVzdERhdGEuVFJBTlNGRVJfVU5TSUdORURfVFhfV0lUSF9NRU1PX0FORF9EVVJBQkxFX05PTkNFLFxuICAgICAgICBzaWduYXR1cmUsXG4gICAgICAgIHRlc3REYXRhLmF1dGhBY2NvdW50LnB1YlxuICAgICAgKS5zaG91bGQuZXF1YWwoZmFsc2UpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBmYWlsIGZvciBpbnZhbGlkIHB1YiBrZXknLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBzaWduYXR1cmUgPSAnM3BENmF5V3R2RmtuOEZlNWVmWWJTYUNZTXBuRHd6RFRtbWVvTWhjU01BY01yR3Ztd1BGaEx4b2s1dnhoSG5vb0EzWVNYZm55WmdpNGUzSzNzQ0htZ1Uzayc7XG4gICAgICBVdGlscy52ZXJpZnlTaWduYXR1cmUoXG4gICAgICAgIHRlc3REYXRhLlRSQU5TRkVSX1VOU0lHTkVEX1RYX1dJVEhfTUVNT19BTkRfRFVSQUJMRV9OT05DRSxcbiAgICAgICAgc2lnbmF0dXJlLFxuICAgICAgICB0ZXN0RGF0YS5ub25jZUFjY291bnQucHViXG4gICAgICApLnNob3VsZC5lcXVhbChmYWxzZSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHRocm93IGZvciBpbnZhbGlkIHR4JywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3Qgc2lnbmF0dXJlID0gJzNwRDZheVd0dkZrbjhGZTVlZlliU2FDWU1wbkR3ekRUbW1lb01oY1NNQWNNckd2bXdQRmhMeG9rNXZ4aEhub29BM1lTWGZueVpnaTRlM0szc0NIbWdVM2snO1xuICAgICAgc2hvdWxkKCgpID0+IFV0aWxzLnZlcmlmeVNpZ25hdHVyZSh0ZXN0RGF0YS5JTlZBTElEX1JBV19UWCwgc2lnbmF0dXJlLCB0ZXN0RGF0YS5ub25jZUFjY291bnQucHViKSkudGhyb3dFcnJvcihcbiAgICAgICAgJ0ludmFsaWQgc2VyaWFsaXplZFR4J1xuICAgICAgKTtcbiAgICB9KTtcbiAgICBpdCgnc2hvdWxkIHRocm93IGZvciBpbnZhbGlkIHB1YmtleScsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHNpZ25hdHVyZSA9ICczcEQ2YXlXdHZGa244RmU1ZWZZYlNhQ1lNcG5Ed3pEVG1tZW9NaGNTTUFjTXJHdm13UEZoTHhvazV2eGhIbm9vQTNZU1hmbnlaZ2k0ZTNLM3NDSG1nVTNrJztcbiAgICAgIHNob3VsZCgoKSA9PlxuICAgICAgICBVdGlscy52ZXJpZnlTaWduYXR1cmUoXG4gICAgICAgICAgdGVzdERhdGEuVFJBTlNGRVJfVU5TSUdORURfVFhfV0lUSF9NRU1PX0FORF9EVVJBQkxFX05PTkNFLFxuICAgICAgICAgIHNpZ25hdHVyZSxcbiAgICAgICAgICB0ZXN0RGF0YS5wdWJLZXlzLmludmFsaWRQdWJLZXlzWzBdXG4gICAgICAgIClcbiAgICAgICkudGhyb3dFcnJvcignSW52YWxpZCBwdWJsaWNLZXknKTtcbiAgICB9KTtcbiAgICBpdCgnc2hvdWxkIHRocm93IGZvciBpbnZhbGlkIHNpZ25hdHVyZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHNpZ25hdHVyZSA9ICdyYW5kb21zdHJpbmcnO1xuICAgICAgc2hvdWxkKCgpID0+XG4gICAgICAgIFV0aWxzLnZlcmlmeVNpZ25hdHVyZShcbiAgICAgICAgICB0ZXN0RGF0YS5UUkFOU0ZFUl9VTlNJR05FRF9UWF9XSVRIX01FTU9fQU5EX0RVUkFCTEVfTk9OQ0UsXG4gICAgICAgICAgc2lnbmF0dXJlLFxuICAgICAgICAgIHRlc3REYXRhLm5vbmNlQWNjb3VudC5wdWJcbiAgICAgICAgKVxuICAgICAgKS50aHJvd0Vycm9yKCdJbnZhbGlkIHNpZ25hdHVyZScpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnaXNWYWxpZE1lbW8nLCBmdW5jdGlvbiAoKSB7XG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gdHJ1ZSBmb3IgdmFsaWQgbWVtbycsIGZ1bmN0aW9uICgpIHtcbiAgICAgIFV0aWxzLmlzVmFsaWRNZW1vKCd0ZXN0bWVtbycpLnNob3VsZC5lcXVhbCh0cnVlKTtcbiAgICB9KTtcbiAgICBpdCgnc2hvdWxkIHJldHVybiBmYWxzZSBmb3IgYSBsb25nIG1lbW8nLCBmdW5jdGlvbiAoKSB7XG4gICAgICBVdGlscy5pc1ZhbGlkTWVtbyhcbiAgICAgICAgJzNwRDZheVd0dkZrbjhGZTVlZlliU2FDWU1wbkR3ekRUbW1lb01oY1NNQWNNckd2bXdQRmhMeG9rNXZ4aEhub29BM1lTWGZueVpnaTRlM0szc0NIbWdVM2tQRmhMeG9rNXZ4aEhub29BM1lTWGZueVpnaTRlM0szc0NIbWdVM2snXG4gICAgICApLnNob3VsZC5lcXVhbCh0cnVlKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ2dldEluc3RydWN0aW9uVHlwZScsIGZ1bmN0aW9uICgpIHtcbiAgICBpdCgnc2hvdWxkIHN1Y2NlZWQgZm9yIG1lbW8gcHJvZ3JhbScsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IG1lbW9JbnN0cnVjdGlvbiA9IG5ldyBUcmFuc2FjdGlvbkluc3RydWN0aW9uKHtcbiAgICAgICAga2V5czogW10sXG4gICAgICAgIHByb2dyYW1JZDogbmV3IFB1YmxpY0tleShNRU1PX1BST0dSQU1fUEspLFxuICAgICAgICBkYXRhOiBCdWZmZXIuZnJvbSgncmFuZG9tIG1lbW8nKSxcbiAgICAgIH0pO1xuICAgICAgVXRpbHMuZ2V0SW5zdHJ1Y3Rpb25UeXBlKG1lbW9JbnN0cnVjdGlvbikuc2hvdWxkLmVxdWFsKCdNZW1vJyk7XG4gICAgfSk7XG4gICAgaXQoJ3Nob3VsZCBzdWNjZWVkIGZvciBzeXN0ZW0gcHJvZ3JhbScsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGZyb21BZGRyZXNzID0gdGVzdERhdGEuYXV0aEFjY291bnQucHViO1xuICAgICAgY29uc3QgdG9BZGRyZXNzID0gdGVzdERhdGEubm9uY2VBY2NvdW50LnB1YjtcbiAgICAgIGNvbnN0IGFtb3VudCA9ICcxMDAwMDAnO1xuICAgICAgY29uc3QgdHJhbnNmZXJJbnN0cnVjdGlvbiA9IFN5c3RlbVByb2dyYW0udHJhbnNmZXIoe1xuICAgICAgICBmcm9tUHVia2V5OiBuZXcgUHVibGljS2V5KGZyb21BZGRyZXNzKSxcbiAgICAgICAgdG9QdWJrZXk6IG5ldyBQdWJsaWNLZXkodG9BZGRyZXNzKSxcbiAgICAgICAgbGFtcG9ydHM6IG5ldyBCaWdOdW1iZXIoYW1vdW50KS50b051bWJlcigpLFxuICAgICAgfSk7XG4gICAgICBVdGlscy5nZXRJbnN0cnVjdGlvblR5cGUodHJhbnNmZXJJbnN0cnVjdGlvbikuc2hvdWxkLmVxdWFsKCdUcmFuc2ZlcicpO1xuICAgIH0pO1xuICAgIGl0KCdzaG91bGQgZmFsbGJhY2sgdG8gY3VzdG9tSW5zdHJ1Y3Rpb24gZm9yIHVuc3VwcG9ydGVkIGluc3RydWN0aW9uVHlwZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHZvdGVBZGRyZXNzID0gJ1ZvdGUxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEnO1xuICAgICAgY29uc3QgaW52YWxpZEluc3RydWN0aW9uID0gbmV3IFRyYW5zYWN0aW9uSW5zdHJ1Y3Rpb24oe1xuICAgICAgICBrZXlzOiBbXSxcbiAgICAgICAgcHJvZ3JhbUlkOiBuZXcgUHVibGljS2V5KHZvdGVBZGRyZXNzKSxcbiAgICAgICAgZGF0YTogQnVmZmVyLmZyb20oJ3JhbmRvbSBtZW1vJyksXG4gICAgICB9KTtcbiAgICAgIFV0aWxzLmdldEluc3RydWN0aW9uVHlwZShpbnZhbGlkSW5zdHJ1Y3Rpb24pLnNob3VsZC5lcXVhbCgnQ3VzdG9tSW5zdHJ1Y3Rpb24nKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ3ZhbGlkYXRlSW50cnVjdGlvblR5cGVzJywgZnVuY3Rpb24gKCkge1xuICAgIGl0KCdzaG91bGQgc3VjY2VlZCBmb3IgdmFsaWQgaW5zdHJ1Y3Rpb24gdHlwZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGZyb21BZGRyZXNzID0gdGVzdERhdGEuYXV0aEFjY291bnQucHViO1xuICAgICAgY29uc3QgdG9BZGRyZXNzID0gdGVzdERhdGEubm9uY2VBY2NvdW50LnB1YjtcbiAgICAgIGNvbnN0IGFtb3VudCA9ICcxMDAwMDAnO1xuICAgICAgY29uc3QgdHJhbnNmZXJJbnN0cnVjdGlvbiA9IFN5c3RlbVByb2dyYW0udHJhbnNmZXIoe1xuICAgICAgICBmcm9tUHVia2V5OiBuZXcgUHVibGljS2V5KGZyb21BZGRyZXNzKSxcbiAgICAgICAgdG9QdWJrZXk6IG5ldyBQdWJsaWNLZXkodG9BZGRyZXNzKSxcbiAgICAgICAgbGFtcG9ydHM6IG5ldyBCaWdOdW1iZXIoYW1vdW50KS50b051bWJlcigpLFxuICAgICAgfSk7XG4gICAgICBzaG91bGQuZG9lc05vdFRocm93KCgpID0+IFV0aWxzLnZhbGlkYXRlSW50cnVjdGlvblR5cGVzKFt0cmFuc2Zlckluc3RydWN0aW9uXSkpO1xuICAgIH0pO1xuICAgIGl0KCdzaG91bGQgZmFpbCBmb3IgaW52YWxpZCBpbnN0cnVjdGlvbiB0eXBlJywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgYWNjb3VudFB1YmtleSA9IHRlc3REYXRhLmF1dGhBY2NvdW50LnB1YjtcblxuICAgICAgY29uc3QgYXNzaWduSW5zdHJ1Y3Rpb24gPSBTeXN0ZW1Qcm9ncmFtLm5vbmNlV2l0aGRyYXcoe1xuICAgICAgICBub25jZVB1YmtleTogbmV3IFB1YmxpY0tleShhY2NvdW50UHVia2V5KSxcbiAgICAgICAgYXV0aG9yaXplZFB1YmtleTogbmV3IFB1YmxpY0tleShhY2NvdW50UHVia2V5KSxcbiAgICAgICAgdG9QdWJrZXk6IG5ldyBQdWJsaWNLZXkoYWNjb3VudFB1YmtleSksXG4gICAgICAgIGxhbXBvcnRzOiAyMDAsXG4gICAgICB9KTtcbiAgICAgIHNob3VsZCgoKSA9PiBVdGlscy52YWxpZGF0ZUludHJ1Y3Rpb25UeXBlcyhbYXNzaWduSW5zdHJ1Y3Rpb25dKSkudGhyb3dFcnJvcihcbiAgICAgICAgJ0ludmFsaWQgdHJhbnNhY3Rpb24sIGluc3RydWN0aW9uIHR5cGUgbm90IHN1cHBvcnRlZDogJyArIFV0aWxzLmdldEluc3RydWN0aW9uVHlwZShhc3NpZ25JbnN0cnVjdGlvbilcbiAgICAgICk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCd2YWxpZGF0ZVJhd1RyYW5zYWN0aW9uJywgZnVuY3Rpb24gKCkge1xuICAgIGl0KCdzaG91bGQgc3VjY2VlZCBmb3IgdmFsaWQgcmF3IHRyYW5zYWN0aW9uJywgZnVuY3Rpb24gKCkge1xuICAgICAgc2hvdWxkLmRvZXNOb3RUaHJvdygoKSA9PiBVdGlscy52YWxpZGF0ZVJhd1RyYW5zYWN0aW9uKHRlc3REYXRhLlJBV19UWF9VTlNJR05FRCkpO1xuICAgIH0pO1xuICAgIGl0KCdzaG91bGQgZmFpbCBmb3IgaW52YWxpZCByYXcgdHJhbnNhY3Rpb24nLCBmdW5jdGlvbiAoKSB7XG4gICAgICBzaG91bGQoKCkgPT4gVXRpbHMudmFsaWRhdGVSYXdUcmFuc2FjdGlvbignQUFBQUFBQUFBQUFBQUFBQUEnKSkudGhyb3dFcnJvcignSW52YWxpZCByYXcgdHJhbnNhY3Rpb24nKTtcbiAgICB9KTtcbiAgICBpdCgnc2hvdWxkIGZhaWwgZm9yIG1pc3NpbmcgcGFyYW0nLCBmdW5jdGlvbiAoKSB7XG4gICAgICAvLyBAdHMtZXhwZWN0LWVycm9yIFRlc3RpbmcgZm9yIG1pc3NpbmcgcGFyYW0sIHNob3VsZCB0aHJvdyBlcnJvclxuICAgICAgc2hvdWxkKCgpID0+IFV0aWxzLnZhbGlkYXRlUmF3VHJhbnNhY3Rpb24oKSkudGhyb3dFcnJvcignSW52YWxpZCByYXcgdHJhbnNhY3Rpb246IFVuZGVmaW5lZCcpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnZ2V0U29sVG9rZW5Gcm9tVG9rZW5OYW1lJywgZnVuY3Rpb24gKCkge1xuICAgIGl0KCdzaG91bGQgc3VjY2VlZCBmb3Igc29sIHRva2VuJywgZnVuY3Rpb24gKCkge1xuICAgICAgc2hvdWxkLm5vdEVxdWFsKFV0aWxzLmdldFNvbFRva2VuRnJvbVRva2VuTmFtZSgndHNvbDp1c2RjJyksIHVuZGVmaW5lZCk7XG4gICAgfSk7XG4gICAgaXQoJ3Nob3VsZCBmYWlsIGZvciBub24gdG9rZW5zJywgZnVuY3Rpb24gKCkge1xuICAgICAgc2hvdWxkLmVxdWFsKFV0aWxzLmdldFNvbFRva2VuRnJvbVRva2VuTmFtZSgndHNvbCcpLCB1bmRlZmluZWQpO1xuICAgIH0pO1xuICAgIGl0KCdzaG91bGQgZmFpbCBpZiB0b2tlbk5hbWUgaXMgbm90IGluIGNvaW5zJywgZnVuY3Rpb24gKCkge1xuICAgICAgc2hvdWxkLmVxdWFsKFV0aWxzLmdldFNvbFRva2VuRnJvbVRva2VuTmFtZSgnc29tZXRoaW5nIHJhbmRvbScpLCB1bmRlZmluZWQpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnZ2V0QXNzb2NpYXRlZFRva2VuQWNjb3VudEFkZHJlc3MnLCBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3QgdXNkY01pbnRBZGRyZXNzID0gdGVzdERhdGEudG9rZW5UcmFuc2ZlcnMubWludFVTREM7XG4gICAgY29uc3QgdG9rZW5BZGRyZXNzID0gJzE0MUJGTmVtM3BrbmM4Q3pQVkx2MVJpM2J0Z0tkQ3NhZllQNW5Yd21YZnhVJztcbiAgICBpdCgnc2hvdWxkIHN1Y2NlZWQgZm9yIG5hdGl2ZSBhZGRyZXNzIGFzIG93bmVyIGFkZHJlc3MnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBvd25lckFkZHJlc3MgPSB0ZXN0RGF0YS5hdXRoQWNjb3VudC5wdWI7XG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBVdGlscy5nZXRBc3NvY2lhdGVkVG9rZW5BY2NvdW50QWRkcmVzcyh1c2RjTWludEFkZHJlc3MsIG93bmVyQWRkcmVzcyk7XG4gICAgICByZXN1bHQuc2hvdWxkLmJlLmVxdWFsKHRva2VuQWRkcmVzcyk7XG4gICAgfSk7XG4gICAgaXQoJ3Nob3VsZCBmYWlsIGZvciB0b2tlbiBhZGRyZXNzIGFzIG93bmVyIGFkZHJlc3MnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBpbnZhbGlkT3duZXJBZGRyZXNzID0gdG9rZW5BZGRyZXNzO1xuICAgICAgYXdhaXQgVXRpbHMuZ2V0QXNzb2NpYXRlZFRva2VuQWNjb3VudEFkZHJlc3ModXNkY01pbnRBZGRyZXNzLCBpbnZhbGlkT3duZXJBZGRyZXNzKS5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKFxuICAgICAgICAnSW52YWxpZCBvd25lckFkZHJlc3MgLSBhZGRyZXNzIG9mZiBlZDI1NTE5IGN1cnZlLCBnb3Q6ICcgKyBpbnZhbGlkT3duZXJBZGRyZXNzXG4gICAgICApO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnZ2V0QXNzb2NpYXRlZFRva2VuQWNjb3VudEFkZHJlc3MgZm9yIHNvbCAyMDIyIHRva2VuJywgZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IGFpMTZaTWludEFkZHJlc3MgPSB0ZXN0RGF0YS50b2tlblRyYW5zZmVycy5taW50QUkxNlo7XG4gICAgY29uc3QgdG9rZW5BZGRyZXNzID0gJ0pDMkhBaXhSTnJoQmdOakNzVjJQQmZaRWR5aXRFbldxSlBOR29rRkQ4eFNBJztcbiAgICBpdCgnc2hvdWxkIHN1Y2NlZWQgZm9yIG5hdGl2ZSBhZGRyZXNzIGFzIG93bmVyIGFkZHJlc3MnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBvd25lckFkZHJlc3MgPSB0ZXN0RGF0YS5zb2wyMDIyQXV0aEFjY291bnQucHViO1xuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgVXRpbHMuZ2V0QXNzb2NpYXRlZFRva2VuQWNjb3VudEFkZHJlc3MoXG4gICAgICAgIGFpMTZaTWludEFkZHJlc3MsXG4gICAgICAgIG93bmVyQWRkcmVzcyxcbiAgICAgICAgZmFsc2UsXG4gICAgICAgIFRPS0VOXzIwMjJfUFJPR1JBTV9JRC50b1N0cmluZygpXG4gICAgICApO1xuICAgICAgcmVzdWx0LnNob3VsZC5iZS5lcXVhbCh0b2tlbkFkZHJlc3MpO1xuICAgIH0pO1xuICAgIGl0KCdzaG91bGQgZmFpbCBmb3IgdG9rZW4gYWRkcmVzcyBhcyBvd25lciBhZGRyZXNzJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgaW52YWxpZE93bmVyQWRkcmVzcyA9IHRva2VuQWRkcmVzcztcbiAgICAgIGF3YWl0IFV0aWxzLmdldEFzc29jaWF0ZWRUb2tlbkFjY291bnRBZGRyZXNzKFxuICAgICAgICBhaTE2Wk1pbnRBZGRyZXNzLFxuICAgICAgICBpbnZhbGlkT3duZXJBZGRyZXNzLFxuICAgICAgICBmYWxzZSxcbiAgICAgICAgVE9LRU5fMjAyMl9QUk9HUkFNX0lELnRvU3RyaW5nKClcbiAgICAgICkuc2hvdWxkLmJlLnJlamVjdGVkV2l0aCgnSW52YWxpZCBvd25lckFkZHJlc3MgLSBhZGRyZXNzIG9mZiBlZDI1NTE5IGN1cnZlLCBnb3Q6ICcgKyBpbnZhbGlkT3duZXJBZGRyZXNzKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ2dldEFzc29jaWF0ZWRUb2tlbkFjY291bnRBZGRyZXNzIGZvciBzb2wgMjAyMiB0b2tlbiBvZmYgY3VydmUgYWRkcmVzcycsIGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCBtaW50QWRkcmVzcyA9IHRlc3REYXRhLnNvbDIwMjJQdW1wVHJhbnNmZXJzLm1pbnQ7XG4gICAgY29uc3QgdG9rZW5BZGRyZXNzID0gJzZmeHJWOHpGVm83UTdVOVJ6Z2ZOaVpHSEZ5Z2RDelhhRlpIeWlGaE5aak5GJztcbiAgICBpdCgnc2hvdWxkIHN1Y2NlZWQgZm9yIG5hdGl2ZSBhZGRyZXNzIGFzIG93bmVyIGFkZHJlc3MnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBvd25lckFkZHJlc3MgPSB0ZXN0RGF0YS5zb2wyMDIyUHVtcFRyYW5zZmVycy5vd25lcjtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IFV0aWxzLmdldEFzc29jaWF0ZWRUb2tlbkFjY291bnRBZGRyZXNzKFxuICAgICAgICBtaW50QWRkcmVzcyxcbiAgICAgICAgb3duZXJBZGRyZXNzLFxuICAgICAgICB0cnVlLFxuICAgICAgICBUT0tFTl8yMDIyX1BST0dSQU1fSUQudG9TdHJpbmcoKVxuICAgICAgKTtcbiAgICAgIHJlc3VsdC5zaG91bGQuYmUuZXF1YWwodG9rZW5BZGRyZXNzKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ21hdGNoVHJhbnNhY3Rpb25UeXBlQnlJbnN0cnVjdGlvbnNPcmRlcicsIGZ1bmN0aW9uICgpIHtcbiAgICBkZXNjcmliZSgnQWN0aXZhdGUgc3Rha2UgaW5zdHJ1Y3Rpb25zJywgZnVuY3Rpb24gKCkge1xuICAgICAgaXQoJ3Nob3VsZCBtYXRjaCBzdGFraW5nIGFjdGl2YXRlIGluc3RydWN0aW9ucycsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY29uc3QgZnJvbUFjY291bnQgPSBuZXcgUHVibGljS2V5KHRlc3REYXRhLmF1dGhBY2NvdW50LnB1Yik7XG4gICAgICAgIGNvbnN0IHN0YWtpbmdBY2NvdW50ID0gbmV3IFB1YmxpY0tleSh0ZXN0RGF0YS5zdGFrZUFjY291bnQucHViKTtcbiAgICAgICAgY29uc3QgdmFsaWRhdG9yID0gbmV3IFB1YmxpY0tleSh0ZXN0RGF0YS52YWxpZGF0b3IucHViKTtcbiAgICAgICAgY29uc3QgYW1vdW50ID0gJzEwMDAwMCc7XG5cbiAgICAgICAgLy8gSW5zdHJ1Y3Rpb25zXG4gICAgICAgIGNvbnN0IHN0YWtpbmdBY3RpdmF0ZUluc3RydWN0aW9ucyA9IFN0YWtlUHJvZ3JhbS5jcmVhdGVBY2NvdW50KHtcbiAgICAgICAgICBmcm9tUHVia2V5OiBmcm9tQWNjb3VudCxcbiAgICAgICAgICBzdGFrZVB1YmtleTogc3Rha2luZ0FjY291bnQsXG4gICAgICAgICAgYXV0aG9yaXplZDoge1xuICAgICAgICAgICAgc3Rha2VyOiBmcm9tQWNjb3VudCxcbiAgICAgICAgICAgIHdpdGhkcmF3ZXI6IGZyb21BY2NvdW50LFxuICAgICAgICAgIH0sXG4gICAgICAgICAgbG9ja3VwOiBuZXcgTG9ja3VwKDAsIDAsIGZyb21BY2NvdW50KSxcbiAgICAgICAgICBsYW1wb3J0czogbmV3IEJpZ051bWJlcihhbW91bnQpLnRvTnVtYmVyKCksXG4gICAgICAgIH0pLmluc3RydWN0aW9ucztcblxuICAgICAgICBjb25zdCBzdGFraW5nRGVsZWdhdGVJbnN0cnVjdGlvbnMgPSBTdGFrZVByb2dyYW0uZGVsZWdhdGUoe1xuICAgICAgICAgIGF1dGhvcml6ZWRQdWJrZXk6IGZyb21BY2NvdW50LFxuICAgICAgICAgIHN0YWtlUHVia2V5OiBzdGFraW5nQWNjb3VudCxcbiAgICAgICAgICB2b3RlUHVia2V5OiB2YWxpZGF0b3IsXG4gICAgICAgIH0pLmluc3RydWN0aW9ucztcblxuICAgICAgICBjb25zdCBpbnN0cnVjdGlvbnMgPSBbLi4uc3Rha2luZ0FjdGl2YXRlSW5zdHJ1Y3Rpb25zLCAuLi5zdGFraW5nRGVsZWdhdGVJbnN0cnVjdGlvbnNdO1xuICAgICAgICBjb25zdCBpc0FNYXRjaCA9IFV0aWxzLm1hdGNoVHJhbnNhY3Rpb25UeXBlQnlJbnN0cnVjdGlvbnNPcmRlcihcbiAgICAgICAgICBpbnN0cnVjdGlvbnMsXG4gICAgICAgICAgc3Rha2luZ0FjdGl2YXRlSW5zdHJ1Y3Rpb25zSW5kZXhlc1xuICAgICAgICApO1xuICAgICAgICBpc0FNYXRjaC5zaG91bGQuYmUudHJ1ZSgpO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdzaG91bGQgbWF0Y2ggc3Rha2luZyBhY3RpdmF0ZSBpbnN0cnVjdGlvbnMgd2l0aCBtZW1vIGFuZCBkdXJhYmxlIG5vbmNlJywgZnVuY3Rpb24gKCkge1xuICAgICAgICBjb25zdCBmcm9tQWNjb3VudCA9IG5ldyBQdWJsaWNLZXkodGVzdERhdGEuYXV0aEFjY291bnQucHViKTtcbiAgICAgICAgY29uc3Qgbm9uY2VBY2NvdW50ID0gdGVzdERhdGEubm9uY2VBY2NvdW50LnB1YjtcbiAgICAgICAgY29uc3Qgc3Rha2luZ0FjY291bnQgPSBuZXcgUHVibGljS2V5KHRlc3REYXRhLnN0YWtlQWNjb3VudC5wdWIpO1xuICAgICAgICBjb25zdCB2YWxpZGF0b3IgPSBuZXcgUHVibGljS2V5KHRlc3REYXRhLnZhbGlkYXRvci5wdWIpO1xuICAgICAgICBjb25zdCBhbW91bnQgPSAnMTAwMDAwJztcbiAgICAgICAgY29uc3QgbWVtbyA9ICd0ZXN0IG1lbW8nO1xuXG4gICAgICAgIC8vIEluc3RydWN0aW9uc1xuICAgICAgICBjb25zdCBub25jZUFkdmFuY2VJbnN0cnVjdGlvbiA9IFN5c3RlbVByb2dyYW0ubm9uY2VBZHZhbmNlKHtcbiAgICAgICAgICBub25jZVB1YmtleTogbmV3IFB1YmxpY0tleShub25jZUFjY291bnQpLFxuICAgICAgICAgIGF1dGhvcml6ZWRQdWJrZXk6IGZyb21BY2NvdW50LFxuICAgICAgICB9KTtcblxuICAgICAgICBjb25zdCBzdGFraW5nQWN0aXZhdGVJbnN0cnVjdGlvbnMgPSBTdGFrZVByb2dyYW0uY3JlYXRlQWNjb3VudCh7XG4gICAgICAgICAgZnJvbVB1YmtleTogZnJvbUFjY291bnQsXG4gICAgICAgICAgc3Rha2VQdWJrZXk6IHN0YWtpbmdBY2NvdW50LFxuICAgICAgICAgIGF1dGhvcml6ZWQ6IHtcbiAgICAgICAgICAgIHN0YWtlcjogZnJvbUFjY291bnQsXG4gICAgICAgICAgICB3aXRoZHJhd2VyOiBmcm9tQWNjb3VudCxcbiAgICAgICAgICB9LFxuICAgICAgICAgIGxvY2t1cDogbmV3IExvY2t1cCgwLCAwLCBmcm9tQWNjb3VudCksXG4gICAgICAgICAgbGFtcG9ydHM6IG5ldyBCaWdOdW1iZXIoYW1vdW50KS50b051bWJlcigpLFxuICAgICAgICB9KS5pbnN0cnVjdGlvbnM7XG5cbiAgICAgICAgY29uc3Qgc3Rha2luZ0RlbGVnYXRlSW5zdHJ1Y3Rpb25zID0gU3Rha2VQcm9ncmFtLmRlbGVnYXRlKHtcbiAgICAgICAgICBhdXRob3JpemVkUHVia2V5OiBmcm9tQWNjb3VudCxcbiAgICAgICAgICBzdGFrZVB1YmtleTogc3Rha2luZ0FjY291bnQsXG4gICAgICAgICAgdm90ZVB1YmtleTogdmFsaWRhdG9yLFxuICAgICAgICB9KS5pbnN0cnVjdGlvbnM7XG5cbiAgICAgICAgY29uc3QgbWVtb0luc3RydWN0aW9uID0gbmV3IFRyYW5zYWN0aW9uSW5zdHJ1Y3Rpb24oe1xuICAgICAgICAgIGtleXM6IFtdLFxuICAgICAgICAgIHByb2dyYW1JZDogbmV3IFB1YmxpY0tleShNRU1PX1BST0dSQU1fUEspLFxuICAgICAgICAgIGRhdGE6IEJ1ZmZlci5mcm9tKG1lbW8pLFxuICAgICAgICB9KTtcblxuICAgICAgICBjb25zdCBpbnN0cnVjdGlvbnMgPSBbXG4gICAgICAgICAgbm9uY2VBZHZhbmNlSW5zdHJ1Y3Rpb24sXG4gICAgICAgICAgLi4uc3Rha2luZ0FjdGl2YXRlSW5zdHJ1Y3Rpb25zLFxuICAgICAgICAgIC4uLnN0YWtpbmdEZWxlZ2F0ZUluc3RydWN0aW9ucyxcbiAgICAgICAgICBtZW1vSW5zdHJ1Y3Rpb24sXG4gICAgICAgIF07XG4gICAgICAgIGNvbnN0IGlzQU1hdGNoID0gVXRpbHMubWF0Y2hUcmFuc2FjdGlvblR5cGVCeUluc3RydWN0aW9uc09yZGVyKFxuICAgICAgICAgIGluc3RydWN0aW9ucyxcbiAgICAgICAgICBzdGFraW5nQWN0aXZhdGVJbnN0cnVjdGlvbnNJbmRleGVzXG4gICAgICAgICk7XG4gICAgICAgIGlzQU1hdGNoLnNob3VsZC5iZS50cnVlKCk7XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCdEZWFjdGl2YXRlIHN0YWtlIGluc3RydWN0aW9ucycsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGl0KCdzaG91bGQgbWF0Y2ggc3Rha2luZyBkZWFjdGl2YXRlIGluc3RydWN0aW9ucycsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY29uc3QgZnJvbUFjY291bnQgPSBuZXcgUHVibGljS2V5KHRlc3REYXRhLmF1dGhBY2NvdW50LnB1Yik7XG4gICAgICAgIGNvbnN0IHN0YWtpbmdBY2NvdW50ID0gbmV3IFB1YmxpY0tleSh0ZXN0RGF0YS5zdGFrZUFjY291bnQucHViKTtcblxuICAgICAgICAvLyBJbnN0cnVjdGlvbnNcbiAgICAgICAgY29uc3Qgc3Rha2luZ0RlYWN0aXZhdGVJbnN0cnVjdGlvbnMgPSBTdGFrZVByb2dyYW0uZGVhY3RpdmF0ZSh7XG4gICAgICAgICAgYXV0aG9yaXplZFB1YmtleTogZnJvbUFjY291bnQsXG4gICAgICAgICAgc3Rha2VQdWJrZXk6IHN0YWtpbmdBY2NvdW50LFxuICAgICAgICB9KS5pbnN0cnVjdGlvbnM7XG5cbiAgICAgICAgY29uc3QgaW5zdHJ1Y3Rpb25zID0gWy4uLnN0YWtpbmdEZWFjdGl2YXRlSW5zdHJ1Y3Rpb25zXTtcbiAgICAgICAgY29uc3QgaXNBTWF0Y2ggPSBVdGlscy5tYXRjaFRyYW5zYWN0aW9uVHlwZUJ5SW5zdHJ1Y3Rpb25zT3JkZXIoXG4gICAgICAgICAgaW5zdHJ1Y3Rpb25zLFxuICAgICAgICAgIHN0YWtpbmdEZWFjdGl2YXRlSW5zdHJ1Y3Rpb25zSW5kZXhlc1xuICAgICAgICApO1xuICAgICAgICBpc0FNYXRjaC5zaG91bGQuYmUudHJ1ZSgpO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdzaG91bGQgbWF0Y2ggc3Rha2luZyBkZWFjdGl2YXRlIGluc3RydWN0aW9ucyB3aXRoIG1lbW8gYW5kIGR1cmFibGUgbm9uY2UnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGNvbnN0IGZyb21BY2NvdW50ID0gbmV3IFB1YmxpY0tleSh0ZXN0RGF0YS5hdXRoQWNjb3VudC5wdWIpO1xuICAgICAgICBjb25zdCBub25jZUFjY291bnQgPSB0ZXN0RGF0YS5ub25jZUFjY291bnQucHViO1xuICAgICAgICBjb25zdCBzdGFraW5nQWNjb3VudCA9IG5ldyBQdWJsaWNLZXkodGVzdERhdGEuc3Rha2VBY2NvdW50LnB1Yik7XG4gICAgICAgIGNvbnN0IG1lbW8gPSAndGVzdCBtZW1vJztcblxuICAgICAgICAvLyBJbnN0cnVjdGlvbnNcbiAgICAgICAgY29uc3Qgbm9uY2VBZHZhbmNlSW5zdHJ1Y3Rpb24gPSBTeXN0ZW1Qcm9ncmFtLm5vbmNlQWR2YW5jZSh7XG4gICAgICAgICAgbm9uY2VQdWJrZXk6IG5ldyBQdWJsaWNLZXkobm9uY2VBY2NvdW50KSxcbiAgICAgICAgICBhdXRob3JpemVkUHVia2V5OiBmcm9tQWNjb3VudCxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgY29uc3Qgc3Rha2luZ0RlYWN0aXZhdGVJbnN0cnVjdGlvbnMgPSBTdGFrZVByb2dyYW0uZGVhY3RpdmF0ZSh7XG4gICAgICAgICAgYXV0aG9yaXplZFB1YmtleTogZnJvbUFjY291bnQsXG4gICAgICAgICAgc3Rha2VQdWJrZXk6IHN0YWtpbmdBY2NvdW50LFxuICAgICAgICB9KS5pbnN0cnVjdGlvbnM7XG5cbiAgICAgICAgY29uc3QgbWVtb0luc3RydWN0aW9uID0gbmV3IFRyYW5zYWN0aW9uSW5zdHJ1Y3Rpb24oe1xuICAgICAgICAgIGtleXM6IFtdLFxuICAgICAgICAgIHByb2dyYW1JZDogbmV3IFB1YmxpY0tleShNRU1PX1BST0dSQU1fUEspLFxuICAgICAgICAgIGRhdGE6IEJ1ZmZlci5mcm9tKG1lbW8pLFxuICAgICAgICB9KTtcblxuICAgICAgICBjb25zdCBpbnN0cnVjdGlvbnMgPSBbbm9uY2VBZHZhbmNlSW5zdHJ1Y3Rpb24sIC4uLnN0YWtpbmdEZWFjdGl2YXRlSW5zdHJ1Y3Rpb25zLCBtZW1vSW5zdHJ1Y3Rpb25dO1xuICAgICAgICBjb25zdCBpc0FNYXRjaCA9IFV0aWxzLm1hdGNoVHJhbnNhY3Rpb25UeXBlQnlJbnN0cnVjdGlvbnNPcmRlcihcbiAgICAgICAgICBpbnN0cnVjdGlvbnMsXG4gICAgICAgICAgc3Rha2luZ0RlYWN0aXZhdGVJbnN0cnVjdGlvbnNJbmRleGVzXG4gICAgICAgICk7XG4gICAgICAgIGlzQU1hdGNoLnNob3VsZC5iZS50cnVlKCk7XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCdTdGFraW5nIHdpdGhkcmF3IGluc3RydWN0aW9ucycsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGl0KCdzaG91bGQgbWF0Y2ggc3Rha2luZyB3aXRoZHJhdyBpbnN0cnVjdGlvbnMnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGNvbnN0IGZyb21BY2NvdW50ID0gbmV3IFB1YmxpY0tleSh0ZXN0RGF0YS5hdXRoQWNjb3VudC5wdWIpO1xuICAgICAgICBjb25zdCBzdGFraW5nQWNjb3VudCA9IG5ldyBQdWJsaWNLZXkodGVzdERhdGEuc3Rha2VBY2NvdW50LnB1Yik7XG4gICAgICAgIGNvbnN0IGFtb3VudCA9ICcxMDAwMDAnO1xuXG4gICAgICAgIC8vIEluc3RydWN0aW9uc1xuICAgICAgICBjb25zdCBzdGFraW5nV2l0aGRyYXdJbnN0cnVjdGlvbnMgPSBTdGFrZVByb2dyYW0ud2l0aGRyYXcoe1xuICAgICAgICAgIGF1dGhvcml6ZWRQdWJrZXk6IGZyb21BY2NvdW50LFxuICAgICAgICAgIHN0YWtlUHVia2V5OiBzdGFraW5nQWNjb3VudCxcbiAgICAgICAgICB0b1B1YmtleTogZnJvbUFjY291bnQsXG4gICAgICAgICAgbGFtcG9ydHM6IG5ldyBCaWdOdW1iZXIoYW1vdW50KS50b051bWJlcigpLFxuICAgICAgICB9KS5pbnN0cnVjdGlvbnM7XG5cbiAgICAgICAgY29uc3QgaW5zdHJ1Y3Rpb25zID0gWy4uLnN0YWtpbmdXaXRoZHJhd0luc3RydWN0aW9uc107XG4gICAgICAgIGNvbnN0IGlzQU1hdGNoID0gVXRpbHMubWF0Y2hUcmFuc2FjdGlvblR5cGVCeUluc3RydWN0aW9uc09yZGVyKFxuICAgICAgICAgIGluc3RydWN0aW9ucyxcbiAgICAgICAgICBzdGFraW5nV2l0aGRyYXdJbnN0cnVjdGlvbnNJbmRleGVzXG4gICAgICAgICk7XG4gICAgICAgIGlzQU1hdGNoLnNob3VsZC5iZS50cnVlKCk7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ3Nob3VsZCBtYXRjaCBzdGFraW5nIHdpdGhkcmF3IGluc3RydWN0aW9ucyB3aXRoIG1lbW8gYW5kIGR1cmFibGUgbm9uY2UnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGNvbnN0IGZyb21BY2NvdW50ID0gbmV3IFB1YmxpY0tleSh0ZXN0RGF0YS5hdXRoQWNjb3VudC5wdWIpO1xuICAgICAgICBjb25zdCBub25jZUFjY291bnQgPSB0ZXN0RGF0YS5ub25jZUFjY291bnQucHViO1xuICAgICAgICBjb25zdCBzdGFraW5nQWNjb3VudCA9IG5ldyBQdWJsaWNLZXkodGVzdERhdGEuc3Rha2VBY2NvdW50LnB1Yik7XG4gICAgICAgIGNvbnN0IGFtb3VudCA9ICcxMDAwMDAnO1xuICAgICAgICBjb25zdCBtZW1vID0gJ3Rlc3QgbWVtbyc7XG5cbiAgICAgICAgLy8gSW5zdHJ1Y3Rpb25zXG4gICAgICAgIGNvbnN0IG5vbmNlQWR2YW5jZUluc3RydWN0aW9uID0gU3lzdGVtUHJvZ3JhbS5ub25jZUFkdmFuY2Uoe1xuICAgICAgICAgIG5vbmNlUHVia2V5OiBuZXcgUHVibGljS2V5KG5vbmNlQWNjb3VudCksXG4gICAgICAgICAgYXV0aG9yaXplZFB1YmtleTogZnJvbUFjY291bnQsXG4gICAgICAgIH0pO1xuXG4gICAgICAgIC8vIEluc3RydWN0aW9uc1xuICAgICAgICBjb25zdCBzdGFraW5nV2l0aGRyYXdJbnN0cnVjdGlvbnMgPSBTdGFrZVByb2dyYW0ud2l0aGRyYXcoe1xuICAgICAgICAgIGF1dGhvcml6ZWRQdWJrZXk6IGZyb21BY2NvdW50LFxuICAgICAgICAgIHN0YWtlUHVia2V5OiBzdGFraW5nQWNjb3VudCxcbiAgICAgICAgICB0b1B1YmtleTogZnJvbUFjY291bnQsXG4gICAgICAgICAgbGFtcG9ydHM6IG5ldyBCaWdOdW1iZXIoYW1vdW50KS50b051bWJlcigpLFxuICAgICAgICB9KS5pbnN0cnVjdGlvbnM7XG5cbiAgICAgICAgY29uc3QgbWVtb0luc3RydWN0aW9uID0gbmV3IFRyYW5zYWN0aW9uSW5zdHJ1Y3Rpb24oe1xuICAgICAgICAgIGtleXM6IFtdLFxuICAgICAgICAgIHByb2dyYW1JZDogbmV3IFB1YmxpY0tleShNRU1PX1BST0dSQU1fUEspLFxuICAgICAgICAgIGRhdGE6IEJ1ZmZlci5mcm9tKG1lbW8pLFxuICAgICAgICB9KTtcblxuICAgICAgICBjb25zdCBpbnN0cnVjdGlvbnMgPSBbbm9uY2VBZHZhbmNlSW5zdHJ1Y3Rpb24sIC4uLnN0YWtpbmdXaXRoZHJhd0luc3RydWN0aW9ucywgbWVtb0luc3RydWN0aW9uXTtcbiAgICAgICAgY29uc3QgaXNBTWF0Y2ggPSBVdGlscy5tYXRjaFRyYW5zYWN0aW9uVHlwZUJ5SW5zdHJ1Y3Rpb25zT3JkZXIoXG4gICAgICAgICAgaW5zdHJ1Y3Rpb25zLFxuICAgICAgICAgIHN0YWtpbmdXaXRoZHJhd0luc3RydWN0aW9uc0luZGV4ZXNcbiAgICAgICAgKTtcbiAgICAgICAgaXNBTWF0Y2guc2hvdWxkLmJlLnRydWUoKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9KTtcbn0pO1xuIl19
|
|
505
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi90ZXN0L3VuaXQvdXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxvREFBNEI7QUFDNUIsdUNBQXNDO0FBQ3RDLDJEQUE2QztBQUM3Qyw2Q0FBeUc7QUFDekcsdURBS2lDO0FBQ2pDLGdFQUFxQztBQUNyQyxpREFBdUY7QUFFdkYsUUFBUSxDQUFDLGtCQUFrQixFQUFFO0lBQzNCLFFBQVEsQ0FBQyxnQkFBZ0IsRUFBRTtRQUN6QixFQUFFLENBQUMsMkNBQTJDLEVBQUU7WUFDOUMsS0FBSyxNQUFNLE9BQU8sSUFBSSxRQUFRLENBQUMsU0FBUyxDQUFDLGdCQUFnQixFQUFFLENBQUM7Z0JBQzFELGdCQUFNLENBQUMsWUFBWSxDQUFDLEdBQUcsRUFBRSxDQUFDLFdBQUssQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztnQkFDekQsZ0JBQU0sQ0FBQyxLQUFLLENBQUMsV0FBSyxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQztZQUNyRCxDQUFDO1lBQ0Qsd0VBQXdFO1lBQ3hFLGdCQUFNLENBQUMsWUFBWSxDQUFDLEdBQUcsRUFBRSxDQUFDLFdBQUssQ0FBQyxjQUFjLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQztZQUMzRCxrRUFBa0U7WUFDbEUsZ0JBQU0sQ0FBQyxLQUFLLENBQUMsV0FBSyxDQUFDLGNBQWMsQ0FBQyxTQUFTLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUN2RCxDQUFDLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQyw0Q0FBNEMsRUFBRTtZQUMvQyxLQUFLLE1BQU0sT0FBTyxJQUFJLFFBQVEsQ0FBQyxTQUFTLENBQUMsY0FBYyxFQUFFLENBQUM7Z0JBQ3hELGdCQUFNLENBQUMsS0FBSyxDQUFDLFdBQUssQ0FBQyxjQUFjLENBQUMs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LENBQUMsS0FBSyxDQUFDLENBQUM7UUFDcEUsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHNob3VsZCBmcm9tICdzaG91bGQnO1xuaW1wb3J0IHsgVXRpbHMgfSBmcm9tICcuLi8uLi9zcmMvbGliJztcbmltcG9ydCAqIGFzIHRlc3REYXRhIGZyb20gJy4uL3Jlc291cmNlcy9zb2wnO1xuaW1wb3J0IHsgTG9ja3VwLCBQdWJsaWNLZXksIFN0YWtlUHJvZ3JhbSwgU3lzdGVtUHJvZ3JhbSwgVHJhbnNhY3Rpb25JbnN0cnVjdGlvbiB9IGZyb20gJ0Bzb2xhbmEvd2ViMy5qcyc7XG5pbXBvcnQge1xuICBNRU1PX1BST0dSQU1fUEssXG4gIHN0YWtpbmdBY3RpdmF0ZUluc3RydWN0aW9uc0luZGV4ZXMsXG4gIHN0YWtpbmdEZWFjdGl2YXRlSW5zdHJ1Y3Rpb25zSW5kZXhlcyxcbiAgc3Rha2luZ1dpdGhkcmF3SW5zdHJ1Y3Rpb25zSW5kZXhlcyxcbn0gZnJvbSAnLi4vLi4vc3JjL2xpYi9jb25zdGFudHMnO1xuaW1wb3J0IEJpZ051bWJlciBmcm9tICdiaWdudW1iZXIuanMnO1xuaW1wb3J0IHsgVE9LRU5fMjAyMl9QUk9HUkFNX0lELCBBU1NPQ0lBVEVEX1RPS0VOX1BST0dSQU1fSUQgfSBmcm9tICdAc29sYW5hL3NwbC10b2tlbic7XG5cbmRlc2NyaWJlKCdTT0wgdXRpbCBsaWJyYXJ5JywgZnVuY3Rpb24gKCkge1xuICBkZXNjcmliZSgnaXNWYWxpZEFkZHJlc3MnLCBmdW5jdGlvbiAoKSB7XG4gICAgaXQoJ3Nob3VsZCBmYWlsIHRvIHZhbGlkYXRlIGludmFsaWQgYWRkcmVzc2VzJywgZnVuY3Rpb24gKCkge1xuICAgICAgZm9yIChjb25zdCBhZGRyZXNzIG9mIHRlc3REYXRhLmFkZHJlc3Nlcy5pbnZhbGlkQWRkcmVzc2VzKSB7XG4gICAgICAgIHNob3VsZC5kb2VzTm90VGhyb3coKCkgPT4gVXRpbHMuaXNWYWxpZEFkZHJlc3MoYWRkcmVzcykpO1xuICAgICAgICBzaG91bGQuZXF1YWwoVXRpbHMuaXNWYWxpZEFkZHJlc3MoYWRkcmVzcyksIGZhbHNlKTtcbiAgICAgIH1cbiAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgVGVzdGluZyBmb3IgbWlzc2luZyBwYXJhbSwgc2hvdWxkIG5vdCB0aHJvdyBhbiBlcnJvclxuICAgICAgc2hvdWxkLmRvZXNOb3RUaHJvdygoKSA9PiBVdGlscy5pc1ZhbGlkQWRkcmVzcyh1bmRlZmluZWQpKTtcbiAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgVGVzdGluZyBmb3IgbWlzc2luZyBwYXJhbSwgc2hvdWxkIHJldHVybiBmYWxzZVxuICAgICAgc2hvdWxkLmVxdWFsKFV0aWxzLmlzVmFsaWRBZGRyZXNzKHVuZGVmaW5lZCksIGZhbHNlKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgc3VjY2VlZCB0byB2YWxpZGF0ZSB2YWxpZCBhZGRyZXNzZXMnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBmb3IgKGNvbnN0IGFkZHJlc3Mgb2YgdGVzdERhdGEuYWRkcmVzc2VzLnZhbGlkQWRkcmVzc2VzKSB7XG4gICAgICAgIHNob3VsZC5lcXVhbChVdGlscy5pc1ZhbGlkQWRkcmVzcyhhZGRyZXNzKSwgdHJ1ZSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdpc1ZhbGlkQmxvY2tJZCcsIGZ1bmN0aW9uICgpIHtcbiAgICBpdCgnc2hvdWxkIGZhaWwgdG8gdmFsaWRhdGUgaW52YWxpZCBCbG9jayBoYXNoZXMnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBmb3IgKGNvbnN0IGJsb2NrSGFzaCBvZiB0ZXN0RGF0YS5ibG9ja0hhc2hlcy5pbnZhbGlkQmxvY2tIYXNoZXMpIHtcbiAgICAgICAgc2hvdWxkLmRvZXNOb3RUaHJvdygoKSA9PiBVdGlscy5pc1ZhbGlkQmxvY2tJZChibG9ja0hhc2gpKTtcbiAgICAgICAgc2hvdWxkLmVxdWFsKFV0aWxzLmlzVmFsaWRCbG9ja0lkKGJsb2NrSGFzaCksIGZhbHNlKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgc3VjY2VlZCB0byB2YWxpZGF0ZSB2YWxpZCBCbG9jayBoYXNoZXMnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBmb3IgKGNvbnN0IGJsb2NrSGFzaCBvZiB0ZXN0RGF0YS5ibG9ja0hhc2hlcy52YWxpZEJsb2NrSGFzaGVzKSB7XG4gICAgICAgIHNob3VsZC5lcXVhbChVdGlscy5pc1ZhbGlkQmxvY2tJZChibG9ja0hhc2gpLCB0cnVlKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ2lzVmFsaWRQdWJsaWNLZXknLCBmdW5jdGlvbiAoKSB7XG4gICAgaXQoJ3Nob3VsZCBmYWlsIHRvIHZhbGlkYXRlIGludmFsaWQgcHVibGljIGtleXMnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBmb3IgKGNvbnN0IHB1YktleSBvZiB0ZXN0RGF0YS5wdWJLZXlzLmludmFsaWRQdWJLZXlzKSB7XG4gICAgICAgIHNob3VsZC5kb2VzTm90VGhyb3coKCkgPT4gVXRpbHMuaXNWYWxpZFB1YmxpY0tleShwdWJLZXkpKTtcbiAgICAgICAgc2hvdWxkLmVxdWFsKFV0aWxzLmlzVmFsaWRQdWJsaWNLZXkocHViS2V5KSwgZmFsc2UpO1xuICAgICAgfVxuICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvciBUZXN0aW5nIGZvciBtaXNzaW5nIHBhcmFtLCBzaG91bGQgbm90IHRocm93IGFuIGVycm9yXG4gICAgICBzaG91bGQuZG9lc05vdFRocm93KCgpID0+IFV0aWxzLmlzVmFsaWRQdWJsaWNLZXkodW5kZWZpbmVkKSk7XG4gICAgICAvLyBAdHMtZXhwZWN0LWVycm9yIFRlc3RpbmcgZm9yIG1pc3NpbmcgcGFyYW0sIHNob3VsZCByZXR1cm4gZmFsc2VcbiAgICAgIHNob3VsZC5lcXVhbChVdGlscy5pc1ZhbGlkUHVibGljS2V5KHVuZGVmaW5lZCksIGZhbHNlKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgc3VjY2VlZCB0byB2YWxpZGF0ZSBwdWJsaWMga2V5cycsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGZvciAoY29uc3QgcHViS2V5IG9mIHRlc3REYXRhLnB1YktleXMudmFsaWRQdWJLZXlzKSB7XG4gICAgICAgIHNob3VsZC5lcXVhbChVdGlscy5pc1ZhbGlkUHVibGljS2V5KHB1YktleSksIHRydWUpO1xuICAgICAgfVxuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnaXNWYWxpZFByaXZhdGVLZXknLCBmdW5jdGlvbiAoKSB7XG4gICAgaXQoJ3Nob3VsZCBmYWlsIHRvIHZhbGlkYXRlIGludmFsaWQgcHJpdmF0ZSBrZXlzJywgZnVuY3Rpb24gKCkge1xuICAgICAgZm9yIChjb25zdCBwcnZLZXkgb2YgdGVzdERhdGEucHJ2S2V5cy5pbnZhbGlkUHJ2S2V5cykge1xuICAgICAgICBzaG91bGQuZG9lc05vdFRocm93KCgpID0+IFV0aWxzLmlzVmFsaWRQcml2YXRlS2V5KHBydktleSkpO1xuICAgICAgICBzaG91bGQuZXF1YWwoVXRpbHMuaXNWYWxpZFByaXZhdGVLZXkocHJ2S2V5KSwgZmFsc2UpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBzdWNjZWVkIHRvIHZhbGlkYXRlIHByaXZhdGUga2V5cycsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHZhbGlkUHJ2S2V5ID0gW3Rlc3REYXRhLnBydktleXMucHJ2S2V5MS5iYXNlNTgsIHRlc3REYXRhLnBydktleXMucHJ2S2V5MS51aW50OEFycmF5XTtcbiAgICAgIGZvciAoY29uc3QgcHJ2S2V5IG9mIHZhbGlkUHJ2S2V5KSB7XG4gICAgICAgIHNob3VsZC5lcXVhbChVdGlscy5pc1ZhbGlkUHJpdmF0ZUtleShwcnZLZXkpLCB0cnVlKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ2lzVmFsaWRSYXdUcmFuc2FjdGlvbicsIGZ1bmN0aW9uICgpIHtcbiAgICBpdCgnc2hvdWxkIGZhaWwgdG8gdmFsaWRhdGUgYW4gaW52YWxpZCByYXcgdHJhbnNhY3Rpb24nLCBmdW5jdGlvbiAoKSB7XG4gICAgICBzaG91bGQuZG9lc05vdFRocm93KCgpID0+IFV0aWxzLmlzVmFsaWRSYXdUcmFuc2FjdGlvbih0ZXN0RGF0YS5JTlZBTElEX1JBV19UWCkpO1xuICAgICAgc2hvdWxkLmVxdWFsKFV0aWxzLmlzVmFsaWRSYXdUcmFuc2FjdGlvbih0ZXN0RGF0YS5JTlZBTElEX1JBV19UWCksIGZhbHNlKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgc3VjY2VlZCB0byB2YWxpZGF0ZSBhIHZhbGlkIHJhdyB0cmFuc2FjdGlvbicsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHZhbGlkUmF3VHhzID0gW3Rlc3REYXRhLlJBV19UWF9VTlNJR05FRCwgdGVzdERhdGEuUkFXX1RYX1NJR05FRF07XG4gICAgICBmb3IgKGNvbnN0IHJhd1R4IG9mIHZhbGlkUmF3VHhzKSB7XG4gICAgICAgIHNob3VsZC5lcXVhbChVdGlscy5pc1ZhbGlkUmF3VHJhbnNhY3Rpb24ocmF3VHgpLCB0cnVlKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ2lzVmFsaWRTaWduYXR1cmUgYW5kIGlzVmFsaWRUcmFuc2FjdGlvbklkJywgZnVuY3Rpb24gKCkge1xuICAgIGl0KCdzaG91bGQgZmFpbCB0byB2YWxpZGF0ZSBpbnZhbGlkIHNpZ25hdHVyZXMnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBmb3IgKGNvbnN0IHNpZ25hdHVyZSBvZiB0ZXN0RGF0YS5zaWduYXR1cmVzLmludmFsaWRTaWduYXR1cmVzKSB7XG4gICAgICAgIHNob3VsZC5kb2VzTm90VGhyb3coKCkgPT4gVXRpbHMuaXNWYWxpZFNpZ25hdHVyZShzaWduYXR1cmUpKTtcbiAgICAgICAgc2hvdWxkLmVxdWFsKFV0aWxzLmlzVmFsaWRTaWduYXR1cmUoc2lnbmF0dXJlKSwgZmFsc2UpO1xuICAgICAgICBzaG91bGQuZG9lc05vdFRocm93KCgpID0+IFV0aWxzLmlzVmFsaWRUcmFuc2FjdGlvbklkKHNpZ25hdHVyZSkpO1xuICAgICAgICBzaG91bGQuZXF1YWwoVXRpbHMuaXNWYWxpZFRyYW5zYWN0aW9uSWQoc2lnbmF0dXJlKSwgZmFsc2UpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBzdWNjZWVkIHRvIHZhbGlkYXRlIHZhbGlkIHNpZ25hdHVyZXMnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBmb3IgKGNvbnN0IHNpZ25hdHVyZSBvZiB0ZXN0RGF0YS5zaWduYXR1cmVzLnZhbGlkU2lnbmF0dXJlcykge1xuICAgICAgICBzaG91bGQuZXF1YWwoVXRpbHMuaXNWYWxpZFNpZ25hdHVyZShzaWduYXR1cmUpLCB0cnVlKTtcbiAgICAgICAgc2hvdWxkLmVxdWFsKFV0aWxzLmlzVmFsaWRUcmFuc2FjdGlvbklkKHNpZ25hdHVyZSksIHRydWUpO1xuICAgICAgfVxuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnYmFzZTU4IGFuZCBVaW50OEFycmF5IGVuY29kaW5nJywgZnVuY3Rpb24gKCkge1xuICAgIGl0KCdzaG91bGQgc3VjY2VlZCB0byBiYXNlNThUb1VpbnQ4QXJyYXknLCBmdW5jdGlvbiAoKSB7XG4gICAgICBzaG91bGQuZGVlcEVxdWFsKFV0aWxzLmJhc2U1OFRvVWludDhBcnJheSh0ZXN0RGF0YS5wcnZLZXlzLnBydktleTEuYmFzZTU4KSwgdGVzdERhdGEucHJ2S2V5cy5wcnZLZXkxLnVpbnQ4QXJyYXkpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBzdWNjZWVkIHRvIFVpbnQ4QXJyYXlUb2Jhc2U1OCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgIHNob3VsZC5kZWVwRXF1YWwoVXRpbHMuVWludDhBcnJheVRvYmFzZTU4KHRlc3REYXRhLnBydktleXMucHJ2S2V5MS51aW50OEFycmF5KSwgdGVzdERhdGEucHJ2S2V5cy5wcnZLZXkxLmJhc2U1OCk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdpc1ZhbGlkQW1vdW50JywgZnVuY3Rpb24gKCkge1xuICAgIGl0KCdzaG91bGQgc3VjY2VlZCBmb3IgdmFsaWQgYW1vdW50cycsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHZhbGlkQW1vdW50cyA9IFsnMCcsICcxMjMxMjMxMiddO1xuICAgICAgZm9yIChjb25zdCBhbW91bnQgb2YgdmFsaWRBbW91bnRzKSB7XG4gICAgICAgIHNob3VsZC5lcXVhbChVdGlscy5pc1ZhbGlkQW1vdW50KGFtb3VudCksIHRydWUpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBmYWlsIGZvciBpbnZhbGlkIGFtb3VudHMnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBpbnZhbGlkQW1vdW50cyA9IFsnLTEnLCAncmFuZG9tc3RyaW5nJywgJzMzLjA0MjM1J107XG4gICAgICBmb3IgKGNvbnN0IGFtb3VudCBvZiBpbnZhbGlkQW1vdW50cykge1xuICAgICAgICBzaG91bGQuZXF1YWwoVXRpbHMuaXNWYWxpZEFtb3VudChhbW91bnQpLCBmYWxzZSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCd2ZXJpZnlTaWduYXR1cmUnLCBmdW5jdGlvbiAoKSB7XG4gICAgaXQoJ3Nob3VsZCBzdWNjZWVkIGZvciB2YWxpZCBzaWduYXR1cmUgaW4gYSB1bnNpZ25lZCB0eCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHNpZ25hdHVyZSA9ICczMzVzeEF1Vmo1dWNYcVZXVzgyUXdwRkxBclBiZEQzZ1hmWHI0S3J4a0xrVXBtTEIzTnd6Mkc4MnoyVHFpREQ3bU5BQWJIa2NBcUQ1eWNEWnAxdlZLdGpmJztcbiAgICAgIFV0aWxzLnZlcmlmeVNpZ25hdHVyZShcbiAgICAgICAgdGVzdERhdGEuVE9LRU5fVFJBTlNGRVJfVU5TSUdORURfVFhfV0lUSF9NRU1PX0FORF9EVVJBQkxFX05PTkNFX09MRCxcbiAgICAgICAgc2lnbmF0dXJlLFxuICAgICAgICB0ZXN0RGF0YS5hc3NvY2lhdGVkVG9rZW5BY2NvdW50cy5hY2NvdW50c1swXS5wdWJcbiAgICAgICkuc2hvdWxkLmVxdWFsKHRydWUpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBzdWNjZWVkIGZvciB2YWxpZCBzaWduYXR1cmUgaW4gYSBzaWduZWQgdHgnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBzaWduYXR1cmUgPSAnMzM1c3hBdVZqNXVjWHFWV1c4MlF3cEZMQXJQYmREM2dYZlhyNEtyeGtMa1VwbUxCM053ejJHODJ6MlRxaUREN21OQUFiSGtjQXFENXljRFpwMXZWS3RqZic7XG4gICAgICBVdGlscy52ZXJpZnlTaWduYXR1cmUoXG4gICAgICAgIHRlc3REYXRhLlRPS0VOX1RSQU5TRkVSX1NJR05FRF9UWF9XSVRIX01FTU9fQU5EX0RVUkFCTEVfTk9OQ0VfT0xELFxuICAgICAgICBzaWduYXR1cmUsXG4gICAgICAgIHRlc3REYXRhLmFzc29jaWF0ZWRUb2tlbkFjY291bnRzLmFjY291bnRzWzBdLnB1YlxuICAgICAgKS5zaG91bGQuZXF1YWwodHJ1ZSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGZhaWwgZm9yIGludmFsaWQgc2lnbmF0dXJlJywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3Qgc2lnbmF0dXJlID0gJzJRZEtBTHE0YWRhVGFoSkgxM0FHek01YkFGdU5zaHc0M2lRQmRWUzlEMkxvcTczNnpVZ1BYZkhqMzJjTkpLWDZGeWpVellKaEdmRXlBQUI1RmdZVVc2elInO1xuICAgICAgVXRpbHMudmVyaWZ5U2lnbmF0dXJlKFxuICAgICAgICB0ZXN0RGF0YS5UUkFOU0ZFUl9VTlNJR05FRF9UWF9XSVRIX01FTU9fQU5EX0RVUkFCTEVfTk9OQ0UsXG4gICAgICAgIHNpZ25hdHVyZSxcbiAgICAgICAgdGVzdERhdGEuYXV0aEFjY291bnQucHViXG4gICAgICApLnNob3VsZC5lcXVhbChmYWxzZSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGZhaWwgZm9yIGludmFsaWQgcHViIGtleScsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHNpZ25hdHVyZSA9ICczcEQ2YXlXdHZGa244RmU1ZWZZYlNhQ1lNcG5Ed3pEVG1tZW9NaGNTTUFjTXJHdm13UEZoTHhvazV2eGhIbm9vQTNZU1hmbnlaZ2k0ZTNLM3NDSG1nVTNrJztcbiAgICAgIFV0aWxzLnZlcmlmeVNpZ25hdHVyZShcbiAgICAgICAgdGVzdERhdGEuVFJBTlNGRVJfVU5TSUdORURfVFhfV0lUSF9NRU1PX0FORF9EVVJBQkxFX05PTkNFLFxuICAgICAgICBzaWduYXR1cmUsXG4gICAgICAgIHRlc3REYXRhLm5vbmNlQWNjb3VudC5wdWJcbiAgICAgICkuc2hvdWxkLmVxdWFsKGZhbHNlKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgdGhyb3cgZm9yIGludmFsaWQgdHgnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBzaWduYXR1cmUgPSAnM3BENmF5V3R2RmtuOEZlNWVmWWJTYUNZTXBuRHd6RFRtbWVvTWhjU01BY01yR3Ztd1BGaEx4b2s1dnhoSG5vb0EzWVNYZm55WmdpNGUzSzNzQ0htZ1Uzayc7XG4gICAgICBzaG91bGQoKCkgPT4gVXRpbHMudmVyaWZ5U2lnbmF0dXJlKHRlc3REYXRhLklOVkFMSURfUkFXX1RYLCBzaWduYXR1cmUsIHRlc3REYXRhLm5vbmNlQWNjb3VudC5wdWIpKS50aHJvd0Vycm9yKFxuICAgICAgICAnSW52YWxpZCBzZXJpYWxpemVkVHgnXG4gICAgICApO1xuICAgIH0pO1xuICAgIGl0KCdzaG91bGQgdGhyb3cgZm9yIGludmFsaWQgcHVia2V5JywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3Qgc2lnbmF0dXJlID0gJzNwRDZheVd0dkZrbjhGZTVlZlliU2FDWU1wbkR3ekRUbW1lb01oY1NNQWNNckd2bXdQRmhMeG9rNXZ4aEhub29BM1lTWGZueVpnaTRlM0szc0NIbWdVM2snO1xuICAgICAgc2hvdWxkKCgpID0+XG4gICAgICAgIFV0aWxzLnZlcmlmeVNpZ25hdHVyZShcbiAgICAgICAgICB0ZXN0RGF0YS5UUkFOU0ZFUl9VTlNJR05FRF9UWF9XSVRIX01FTU9fQU5EX0RVUkFCTEVfTk9OQ0UsXG4gICAgICAgICAgc2lnbmF0dXJlLFxuICAgICAgICAgIHRlc3REYXRhLnB1YktleXMuaW52YWxpZFB1YktleXNbMF1cbiAgICAgICAgKVxuICAgICAgKS50aHJvd0Vycm9yKCdJbnZhbGlkIHB1YmxpY0tleScpO1xuICAgIH0pO1xuICAgIGl0KCdzaG91bGQgdGhyb3cgZm9yIGludmFsaWQgc2lnbmF0dXJlJywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3Qgc2lnbmF0dXJlID0gJ3JhbmRvbXN0cmluZyc7XG4gICAgICBzaG91bGQoKCkgPT5cbiAgICAgICAgVXRpbHMudmVyaWZ5U2lnbmF0dXJlKFxuICAgICAgICAgIHRlc3REYXRhLlRSQU5TRkVSX1VOU0lHTkVEX1RYX1dJVEhfTUVNT19BTkRfRFVSQUJMRV9OT05DRSxcbiAgICAgICAgICBzaWduYXR1cmUsXG4gICAgICAgICAgdGVzdERhdGEubm9uY2VBY2NvdW50LnB1YlxuICAgICAgICApXG4gICAgICApLnRocm93RXJyb3IoJ0ludmFsaWQgc2lnbmF0dXJlJyk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdpc1ZhbGlkTWVtbycsIGZ1bmN0aW9uICgpIHtcbiAgICBpdCgnc2hvdWxkIHJldHVybiB0cnVlIGZvciB2YWxpZCBtZW1vJywgZnVuY3Rpb24gKCkge1xuICAgICAgVXRpbHMuaXNWYWxpZE1lbW8oJ3Rlc3RtZW1vJykuc2hvdWxkLmVxdWFsKHRydWUpO1xuICAgIH0pO1xuICAgIGl0KCdzaG91bGQgcmV0dXJuIGZhbHNlIGZvciBhIGxvbmcgbWVtbycsIGZ1bmN0aW9uICgpIHtcbiAgICAgIFV0aWxzLmlzVmFsaWRNZW1vKFxuICAgICAgICAnM3BENmF5V3R2RmtuOEZlNWVmWWJTYUNZTXBuRHd6RFRtbWVvTWhjU01BY01yR3Ztd1BGaEx4b2s1dnhoSG5vb0EzWVNYZm55WmdpNGUzSzNzQ0htZ1Uza1BGaEx4b2s1dnhoSG5vb0EzWVNYZm55WmdpNGUzSzNzQ0htZ1UzaydcbiAgICAgICkuc2hvdWxkLmVxdWFsKHRydWUpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnZ2V0SW5zdHJ1Y3Rpb25UeXBlJywgZnVuY3Rpb24gKCkge1xuICAgIGl0KCdzaG91bGQgc3VjY2VlZCBmb3IgbWVtbyBwcm9ncmFtJywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgbWVtb0luc3RydWN0aW9uID0gbmV3IFRyYW5zYWN0aW9uSW5zdHJ1Y3Rpb24oe1xuICAgICAgICBrZXlzOiBbXSxcbiAgICAgICAgcHJvZ3JhbUlkOiBuZXcgUHVibGljS2V5KE1FTU9fUFJPR1JBTV9QSyksXG4gICAgICAgIGRhdGE6IEJ1ZmZlci5mcm9tKCdyYW5kb20gbWVtbycpLFxuICAgICAgfSk7XG4gICAgICBVdGlscy5nZXRJbnN0cnVjdGlvblR5cGUobWVtb0luc3RydWN0aW9uKS5zaG91bGQuZXF1YWwoJ01lbW8nKTtcbiAgICB9KTtcbiAgICBpdCgnc2hvdWxkIHN1Y2NlZWQgZm9yIHN5c3RlbSBwcm9ncmFtJywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgZnJvbUFkZHJlc3MgPSB0ZXN0RGF0YS5hdXRoQWNjb3VudC5wdWI7XG4gICAgICBjb25zdCB0b0FkZHJlc3MgPSB0ZXN0RGF0YS5ub25jZUFjY291bnQucHViO1xuICAgICAgY29uc3QgYW1vdW50ID0gJzEwMDAwMCc7XG4gICAgICBjb25zdCB0cmFuc2Zlckluc3RydWN0aW9uID0gU3lzdGVtUHJvZ3JhbS50cmFuc2Zlcih7XG4gICAgICAgIGZyb21QdWJrZXk6IG5ldyBQdWJsaWNLZXkoZnJvbUFkZHJlc3MpLFxuICAgICAgICB0b1B1YmtleTogbmV3IFB1YmxpY0tleSh0b0FkZHJlc3MpLFxuICAgICAgICBsYW1wb3J0czogbmV3IEJpZ051bWJlcihhbW91bnQpLnRvTnVtYmVyKCksXG4gICAgICB9KTtcbiAgICAgIFV0aWxzLmdldEluc3RydWN0aW9uVHlwZSh0cmFuc2Zlckluc3RydWN0aW9uKS5zaG91bGQuZXF1YWwoJ1RyYW5zZmVyJyk7XG4gICAgfSk7XG4gICAgaXQoJ3Nob3VsZCBmYWxsYmFjayB0byBjdXN0b21JbnN0cnVjdGlvbiBmb3IgdW5zdXBwb3J0ZWQgaW5zdHJ1Y3Rpb25UeXBlJywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3Qgdm90ZUFkZHJlc3MgPSAnVm90ZTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSc7XG4gICAgICBjb25zdCBpbnZhbGlkSW5zdHJ1Y3Rpb24gPSBuZXcgVHJhbnNhY3Rpb25JbnN0cnVjdGlvbih7XG4gICAgICAgIGtleXM6IFtdLFxuICAgICAgICBwcm9ncmFtSWQ6IG5ldyBQdWJsaWNLZXkodm90ZUFkZHJlc3MpLFxuICAgICAgICBkYXRhOiBCdWZmZXIuZnJvbSgncmFuZG9tIG1lbW8nKSxcbiAgICAgIH0pO1xuICAgICAgVXRpbHMuZ2V0SW5zdHJ1Y3Rpb25UeXBlKGludmFsaWRJbnN0cnVjdGlvbikuc2hvdWxkLmVxdWFsKCdDdXN0b21JbnN0cnVjdGlvbicpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgndmFsaWRhdGVJbnRydWN0aW9uVHlwZXMnLCBmdW5jdGlvbiAoKSB7XG4gICAgaXQoJ3Nob3VsZCBzdWNjZWVkIGZvciB2YWxpZCBpbnN0cnVjdGlvbiB0eXBlJywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgZnJvbUFkZHJlc3MgPSB0ZXN0RGF0YS5hdXRoQWNjb3VudC5wdWI7XG4gICAgICBjb25zdCB0b0FkZHJlc3MgPSB0ZXN0RGF0YS5ub25jZUFjY291bnQucHViO1xuICAgICAgY29uc3QgYW1vdW50ID0gJzEwMDAwMCc7XG4gICAgICBjb25zdCB0cmFuc2Zlckluc3RydWN0aW9uID0gU3lzdGVtUHJvZ3JhbS50cmFuc2Zlcih7XG4gICAgICAgIGZyb21QdWJrZXk6IG5ldyBQdWJsaWNLZXkoZnJvbUFkZHJlc3MpLFxuICAgICAgICB0b1B1YmtleTogbmV3IFB1YmxpY0tleSh0b0FkZHJlc3MpLFxuICAgICAgICBsYW1wb3J0czogbmV3IEJpZ051bWJlcihhbW91bnQpLnRvTnVtYmVyKCksXG4gICAgICB9KTtcbiAgICAgIHNob3VsZC5kb2VzTm90VGhyb3coKCkgPT4gVXRpbHMudmFsaWRhdGVJbnRydWN0aW9uVHlwZXMoW3RyYW5zZmVySW5zdHJ1Y3Rpb25dKSk7XG4gICAgfSk7XG4gICAgaXQoJ3Nob3VsZCBmYWlsIGZvciBpbnZhbGlkIGluc3RydWN0aW9uIHR5cGUnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBhY2NvdW50UHVia2V5ID0gdGVzdERhdGEuYXV0aEFjY291bnQucHViO1xuXG4gICAgICBjb25zdCBhc3NpZ25JbnN0cnVjdGlvbiA9IFN5c3RlbVByb2dyYW0ubm9uY2VXaXRoZHJhdyh7XG4gICAgICAgIG5vbmNlUHVia2V5OiBuZXcgUHVibGljS2V5KGFjY291bnRQdWJrZXkpLFxuICAgICAgICBhdXRob3JpemVkUHVia2V5OiBuZXcgUHVibGljS2V5KGFjY291bnRQdWJrZXkpLFxuICAgICAgICB0b1B1YmtleTogbmV3IFB1YmxpY0tleShhY2NvdW50UHVia2V5KSxcbiAgICAgICAgbGFtcG9ydHM6IDIwMCxcbiAgICAgIH0pO1xuICAgICAgc2hvdWxkKCgpID0+IFV0aWxzLnZhbGlkYXRlSW50cnVjdGlvblR5cGVzKFthc3NpZ25JbnN0cnVjdGlvbl0pKS50aHJvd0Vycm9yKFxuICAgICAgICAnSW52YWxpZCB0cmFuc2FjdGlvbiwgaW5zdHJ1Y3Rpb24gdHlwZSBub3Qgc3VwcG9ydGVkOiAnICsgVXRpbHMuZ2V0SW5zdHJ1Y3Rpb25UeXBlKGFzc2lnbkluc3RydWN0aW9uKVxuICAgICAgKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ3ZhbGlkYXRlUmF3VHJhbnNhY3Rpb24nLCBmdW5jdGlvbiAoKSB7XG4gICAgaXQoJ3Nob3VsZCBzdWNjZWVkIGZvciB2YWxpZCByYXcgdHJhbnNhY3Rpb24nLCBmdW5jdGlvbiAoKSB7XG4gICAgICBzaG91bGQuZG9lc05vdFRocm93KCgpID0+IFV0aWxzLnZhbGlkYXRlUmF3VHJhbnNhY3Rpb24odGVzdERhdGEuUkFXX1RYX1VOU0lHTkVEKSk7XG4gICAgfSk7XG4gICAgaXQoJ3Nob3VsZCBmYWlsIGZvciBpbnZhbGlkIHJhdyB0cmFuc2FjdGlvbicsIGZ1bmN0aW9uICgpIHtcbiAgICAgIHNob3VsZCgoKSA9PiBVdGlscy52YWxpZGF0ZVJhd1RyYW5zYWN0aW9uKCdBQUFBQUFBQUFBQUFBQUFBQScpKS50aHJvd0Vycm9yKCdJbnZhbGlkIHJhdyB0cmFuc2FjdGlvbicpO1xuICAgIH0pO1xuICAgIGl0KCdzaG91bGQgZmFpbCBmb3IgbWlzc2luZyBwYXJhbScsIGZ1bmN0aW9uICgpIHtcbiAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgVGVzdGluZyBmb3IgbWlzc2luZyBwYXJhbSwgc2hvdWxkIHRocm93IGVycm9yXG4gICAgICBzaG91bGQoKCkgPT4gVXRpbHMudmFsaWRhdGVSYXdUcmFuc2FjdGlvbigpKS50aHJvd0Vycm9yKCdJbnZhbGlkIHJhdyB0cmFuc2FjdGlvbjogVW5kZWZpbmVkJyk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdnZXRTb2xUb2tlbkZyb21Ub2tlbk5hbWUnLCBmdW5jdGlvbiAoKSB7XG4gICAgaXQoJ3Nob3VsZCBzdWNjZWVkIGZvciBzb2wgdG9rZW4nLCBmdW5jdGlvbiAoKSB7XG4gICAgICBzaG91bGQubm90RXF1YWwoVXRpbHMuZ2V0U29sVG9rZW5Gcm9tVG9rZW5OYW1lKCd0c29sOnVzZGMnKSwgdW5kZWZpbmVkKTtcbiAgICB9KTtcbiAgICBpdCgnc2hvdWxkIGZhaWwgZm9yIG5vbiB0b2tlbnMnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBzaG91bGQuZXF1YWwoVXRpbHMuZ2V0U29sVG9rZW5Gcm9tVG9rZW5OYW1lKCd0c29sJyksIHVuZGVmaW5lZCk7XG4gICAgfSk7XG4gICAgaXQoJ3Nob3VsZCBmYWlsIGlmIHRva2VuTmFtZSBpcyBub3QgaW4gY29pbnMnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBzaG91bGQuZXF1YWwoVXRpbHMuZ2V0U29sVG9rZW5Gcm9tVG9rZW5OYW1lKCdzb21ldGhpbmcgcmFuZG9tJyksIHVuZGVmaW5lZCk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdnZXRBc3NvY2lhdGVkVG9rZW5BY2NvdW50QWRkcmVzcycsIGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCB1c2RjTWludEFkZHJlc3MgPSB0ZXN0RGF0YS50b2tlblRyYW5zZmVycy5taW50VVNEQztcbiAgICBjb25zdCB0b2tlbkFkZHJlc3MgPSAnMTQxQkZOZW0zcGtuYzhDelBWTHYxUmkzYnRnS2RDc2FmWVA1blh3bVhmeFUnO1xuICAgIGl0KCdzaG91bGQgc3VjY2VlZCBmb3IgbmF0aXZlIGFkZHJlc3MgYXMgb3duZXIgYWRkcmVzcycsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IG93bmVyQWRkcmVzcyA9IHRlc3REYXRhLmF1dGhBY2NvdW50LnB1YjtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IFV0aWxzLmdldEFzc29jaWF0ZWRUb2tlbkFjY291bnRBZGRyZXNzKHVzZGNNaW50QWRkcmVzcywgb3duZXJBZGRyZXNzKTtcbiAgICAgIHJlc3VsdC5zaG91bGQuYmUuZXF1YWwodG9rZW5BZGRyZXNzKTtcbiAgICB9KTtcbiAgICBpdCgnc2hvdWxkIGZhaWwgZm9yIHRva2VuIGFkZHJlc3MgYXMgb3duZXIgYWRkcmVzcycsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGludmFsaWRPd25lckFkZHJlc3MgPSB0b2tlbkFkZHJlc3M7XG4gICAgICBhd2FpdCBVdGlscy5nZXRBc3NvY2lhdGVkVG9rZW5BY2NvdW50QWRkcmVzcyh1c2RjTWludEFkZHJlc3MsIGludmFsaWRPd25lckFkZHJlc3MpLnNob3VsZC5iZS5yZWplY3RlZFdpdGgoXG4gICAgICAgICdJbnZhbGlkIG93bmVyQWRkcmVzcyAtIGFkZHJlc3Mgb2ZmIGVkMjU1MTkgY3VydmUsIGdvdDogJyArIGludmFsaWRPd25lckFkZHJlc3NcbiAgICAgICk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdnZXRBc3NvY2lhdGVkVG9rZW5BY2NvdW50QWRkcmVzcyBmb3Igc29sIDIwMjIgdG9rZW4nLCBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3QgYWkxNlpNaW50QWRkcmVzcyA9IHRlc3REYXRhLnRva2VuVHJhbnNmZXJzLm1pbnRBSTE2WjtcbiAgICBjb25zdCB0b2tlbkFkZHJlc3MgPSAnSkMySEFpeFJOcmhCZ05qQ3NWMlBCZlpFZHlpdEVuV3FKUE5Hb2tGRDh4U0EnO1xuICAgIGl0KCdzaG91bGQgc3VjY2VlZCBmb3IgbmF0aXZlIGFkZHJlc3MgYXMgb3duZXIgYWRkcmVzcycsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IG93bmVyQWRkcmVzcyA9IHRlc3REYXRhLnNvbDIwMjJBdXRoQWNjb3VudC5wdWI7XG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBVdGlscy5nZXRBc3NvY2lhdGVkVG9rZW5BY2NvdW50QWRkcmVzcyhcbiAgICAgICAgYWkxNlpNaW50QWRkcmVzcyxcbiAgICAgICAgb3duZXJBZGRyZXNzLFxuICAgICAgICBmYWxzZSxcbiAgICAgICAgVE9LRU5fMjAyMl9QUk9HUkFNX0lELnRvU3RyaW5nKClcbiAgICAgICk7XG4gICAgICByZXN1bHQuc2hvdWxkLmJlLmVxdWFsKHRva2VuQWRkcmVzcyk7XG4gICAgfSk7XG4gICAgaXQoJ3Nob3VsZCBmYWlsIGZvciB0b2tlbiBhZGRyZXNzIGFzIG93bmVyIGFkZHJlc3MnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBpbnZhbGlkT3duZXJBZGRyZXNzID0gdG9rZW5BZGRyZXNzO1xuICAgICAgYXdhaXQgVXRpbHMuZ2V0QXNzb2NpYXRlZFRva2VuQWNjb3VudEFkZHJlc3MoXG4gICAgICAgIGFpMTZaTWludEFkZHJlc3MsXG4gICAgICAgIGludmFsaWRPd25lckFkZHJlc3MsXG4gICAgICAgIGZhbHNlLFxuICAgICAgICBUT0tFTl8yMDIyX1BST0dSQU1fSUQudG9TdHJpbmcoKVxuICAgICAgKS5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKCdJbnZhbGlkIG93bmVyQWRkcmVzcyAtIGFkZHJlc3Mgb2ZmIGVkMjU1MTkgY3VydmUsIGdvdDogJyArIGludmFsaWRPd25lckFkZHJlc3MpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnZ2V0QXNzb2NpYXRlZFRva2VuQWNjb3VudEFkZHJlc3MgZm9yIHNvbCAyMDIyIHRva2VuIG9mZiBjdXJ2ZSBhZGRyZXNzJywgZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IG1pbnRBZGRyZXNzID0gdGVzdERhdGEuc29sMjAyMlB1bXBUcmFuc2ZlcnMubWludDtcbiAgICBjb25zdCB0b2tlbkFkZHJlc3MgPSAnNmZ4clY4ekZWbzdRN1U5UnpnZk5pWkdIRnlnZEN6WGFGWkh5aUZoTlpqTkYnO1xuICAgIGl0KCdzaG91bGQgc3VjY2VlZCBmb3IgbmF0aXZlIGFkZHJlc3MgYXMgb3duZXIgYWRkcmVzcycsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IG93bmVyQWRkcmVzcyA9IHRlc3REYXRhLnNvbDIwMjJQdW1wVHJhbnNmZXJzLm93bmVyO1xuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgVXRpbHMuZ2V0QXNzb2NpYXRlZFRva2VuQWNjb3VudEFkZHJlc3MoXG4gICAgICAgIG1pbnRBZGRyZXNzLFxuICAgICAgICBvd25lckFkZHJlc3MsXG4gICAgICAgIHRydWUsXG4gICAgICAgIFRPS0VOXzIwMjJfUFJPR1JBTV9JRC50b1N0cmluZygpXG4gICAgICApO1xuICAgICAgcmVzdWx0LnNob3VsZC5iZS5lcXVhbCh0b2tlbkFkZHJlc3MpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnbWF0Y2hUcmFuc2FjdGlvblR5cGVCeUluc3RydWN0aW9uc09yZGVyJywgZnVuY3Rpb24gKCkge1xuICAgIGRlc2NyaWJlKCdBY3RpdmF0ZSBzdGFrZSBpbnN0cnVjdGlvbnMnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBpdCgnc2hvdWxkIG1hdGNoIHN0YWtpbmcgYWN0aXZhdGUgaW5zdHJ1Y3Rpb25zJywgZnVuY3Rpb24gKCkge1xuICAgICAgICBjb25zdCBmcm9tQWNjb3VudCA9IG5ldyBQdWJsaWNLZXkodGVzdERhdGEuYXV0aEFjY291bnQucHViKTtcbiAgICAgICAgY29uc3Qgc3Rha2luZ0FjY291bnQgPSBuZXcgUHVibGljS2V5KHRlc3REYXRhLnN0YWtlQWNjb3VudC5wdWIpO1xuICAgICAgICBjb25zdCB2YWxpZGF0b3IgPSBuZXcgUHVibGljS2V5KHRlc3REYXRhLnZhbGlkYXRvci5wdWIpO1xuICAgICAgICBjb25zdCBhbW91bnQgPSAnMTAwMDAwJztcblxuICAgICAgICAvLyBJbnN0cnVjdGlvbnNcbiAgICAgICAgY29uc3Qgc3Rha2luZ0FjdGl2YXRlSW5zdHJ1Y3Rpb25zID0gU3Rha2VQcm9ncmFtLmNyZWF0ZUFjY291bnQoe1xuICAgICAgICAgIGZyb21QdWJrZXk6IGZyb21BY2NvdW50LFxuICAgICAgICAgIHN0YWtlUHVia2V5OiBzdGFraW5nQWNjb3VudCxcbiAgICAgICAgICBhdXRob3JpemVkOiB7XG4gICAgICAgICAgICBzdGFrZXI6IGZyb21BY2NvdW50LFxuICAgICAgICAgICAgd2l0aGRyYXdlcjogZnJvbUFjY291bnQsXG4gICAgICAgICAgfSxcbiAgICAgICAgICBsb2NrdXA6IG5ldyBMb2NrdXAoMCwgMCwgZnJvbUFjY291bnQpLFxuICAgICAgICAgIGxhbXBvcnRzOiBuZXcgQmlnTnVtYmVyKGFtb3VudCkudG9OdW1iZXIoKSxcbiAgICAgICAgfSkuaW5zdHJ1Y3Rpb25zO1xuXG4gICAgICAgIGNvbnN0IHN0YWtpbmdEZWxlZ2F0ZUluc3RydWN0aW9ucyA9IFN0YWtlUHJvZ3JhbS5kZWxlZ2F0ZSh7XG4gICAgICAgICAgYXV0aG9yaXplZFB1YmtleTogZnJvbUFjY291bnQsXG4gICAgICAgICAgc3Rha2VQdWJrZXk6IHN0YWtpbmdBY2NvdW50LFxuICAgICAgICAgIHZvdGVQdWJrZXk6IHZhbGlkYXRvcixcbiAgICAgICAgfSkuaW5zdHJ1Y3Rpb25zO1xuXG4gICAgICAgIGNvbnN0IGluc3RydWN0aW9ucyA9IFsuLi5zdGFraW5nQWN0aXZhdGVJbnN0cnVjdGlvbnMsIC4uLnN0YWtpbmdEZWxlZ2F0ZUluc3RydWN0aW9uc107XG4gICAgICAgIGNvbnN0IGlzQU1hdGNoID0gVXRpbHMubWF0Y2hUcmFuc2FjdGlvblR5cGVCeUluc3RydWN0aW9uc09yZGVyKFxuICAgICAgICAgIGluc3RydWN0aW9ucyxcbiAgICAgICAgICBzdGFraW5nQWN0aXZhdGVJbnN0cnVjdGlvbnNJbmRleGVzXG4gICAgICAgICk7XG4gICAgICAgIGlzQU1hdGNoLnNob3VsZC5iZS50cnVlKCk7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ3Nob3VsZCBtYXRjaCBzdGFraW5nIGFjdGl2YXRlIGluc3RydWN0aW9ucyB3aXRoIG1lbW8gYW5kIGR1cmFibGUgbm9uY2UnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGNvbnN0IGZyb21BY2NvdW50ID0gbmV3IFB1YmxpY0tleSh0ZXN0RGF0YS5hdXRoQWNjb3VudC5wdWIpO1xuICAgICAgICBjb25zdCBub25jZUFjY291bnQgPSB0ZXN0RGF0YS5ub25jZUFjY291bnQucHViO1xuICAgICAgICBjb25zdCBzdGFraW5nQWNjb3VudCA9IG5ldyBQdWJsaWNLZXkodGVzdERhdGEuc3Rha2VBY2NvdW50LnB1Yik7XG4gICAgICAgIGNvbnN0IHZhbGlkYXRvciA9IG5ldyBQdWJsaWNLZXkodGVzdERhdGEudmFsaWRhdG9yLnB1Yik7XG4gICAgICAgIGNvbnN0IGFtb3VudCA9ICcxMDAwMDAnO1xuICAgICAgICBjb25zdCBtZW1vID0gJ3Rlc3QgbWVtbyc7XG5cbiAgICAgICAgLy8gSW5zdHJ1Y3Rpb25zXG4gICAgICAgIGNvbnN0IG5vbmNlQWR2YW5jZUluc3RydWN0aW9uID0gU3lzdGVtUHJvZ3JhbS5ub25jZUFkdmFuY2Uoe1xuICAgICAgICAgIG5vbmNlUHVia2V5OiBuZXcgUHVibGljS2V5KG5vbmNlQWNjb3VudCksXG4gICAgICAgICAgYXV0aG9yaXplZFB1YmtleTogZnJvbUFjY291bnQsXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGNvbnN0IHN0YWtpbmdBY3RpdmF0ZUluc3RydWN0aW9ucyA9IFN0YWtlUHJvZ3JhbS5jcmVhdGVBY2NvdW50KHtcbiAgICAgICAgICBmcm9tUHVia2V5OiBmcm9tQWNjb3VudCxcbiAgICAgICAgICBzdGFrZVB1YmtleTogc3Rha2luZ0FjY291bnQsXG4gICAgICAgICAgYXV0aG9yaXplZDoge1xuICAgICAgICAgICAgc3Rha2VyOiBmcm9tQWNjb3VudCxcbiAgICAgICAgICAgIHdpdGhkcmF3ZXI6IGZyb21BY2NvdW50LFxuICAgICAgICAgIH0sXG4gICAgICAgICAgbG9ja3VwOiBuZXcgTG9ja3VwKDAsIDAsIGZyb21BY2NvdW50KSxcbiAgICAgICAgICBsYW1wb3J0czogbmV3IEJpZ051bWJlcihhbW91bnQpLnRvTnVtYmVyKCksXG4gICAgICAgIH0pLmluc3RydWN0aW9ucztcblxuICAgICAgICBjb25zdCBzdGFraW5nRGVsZWdhdGVJbnN0cnVjdGlvbnMgPSBTdGFrZVByb2dyYW0uZGVsZWdhdGUoe1xuICAgICAgICAgIGF1dGhvcml6ZWRQdWJrZXk6IGZyb21BY2NvdW50LFxuICAgICAgICAgIHN0YWtlUHVia2V5OiBzdGFraW5nQWNjb3VudCxcbiAgICAgICAgICB2b3RlUHVia2V5OiB2YWxpZGF0b3IsXG4gICAgICAgIH0pLmluc3RydWN0aW9ucztcblxuICAgICAgICBjb25zdCBtZW1vSW5zdHJ1Y3Rpb24gPSBuZXcgVHJhbnNhY3Rpb25JbnN0cnVjdGlvbih7XG4gICAgICAgICAga2V5czogW10sXG4gICAgICAgICAgcHJvZ3JhbUlkOiBuZXcgUHVibGljS2V5KE1FTU9fUFJPR1JBTV9QSyksXG4gICAgICAgICAgZGF0YTogQnVmZmVyLmZyb20obWVtbyksXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGNvbnN0IGluc3RydWN0aW9ucyA9IFtcbiAgICAgICAgICBub25jZUFkdmFuY2VJbnN0cnVjdGlvbixcbiAgICAgICAgICAuLi5zdGFraW5nQWN0aXZhdGVJbnN0cnVjdGlvbnMsXG4gICAgICAgICAgLi4uc3Rha2luZ0RlbGVnYXRlSW5zdHJ1Y3Rpb25zLFxuICAgICAgICAgIG1lbW9JbnN0cnVjdGlvbixcbiAgICAgICAgXTtcbiAgICAgICAgY29uc3QgaXNBTWF0Y2ggPSBVdGlscy5tYXRjaFRyYW5zYWN0aW9uVHlwZUJ5SW5zdHJ1Y3Rpb25zT3JkZXIoXG4gICAgICAgICAgaW5zdHJ1Y3Rpb25zLFxuICAgICAgICAgIHN0YWtpbmdBY3RpdmF0ZUluc3RydWN0aW9uc0luZGV4ZXNcbiAgICAgICAgKTtcbiAgICAgICAgaXNBTWF0Y2guc2hvdWxkLmJlLnRydWUoKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJ0RlYWN0aXZhdGUgc3Rha2UgaW5zdHJ1Y3Rpb25zJywgZnVuY3Rpb24gKCkge1xuICAgICAgaXQoJ3Nob3VsZCBtYXRjaCBzdGFraW5nIGRlYWN0aXZhdGUgaW5zdHJ1Y3Rpb25zJywgZnVuY3Rpb24gKCkge1xuICAgICAgICBjb25zdCBmcm9tQWNjb3VudCA9IG5ldyBQdWJsaWNLZXkodGVzdERhdGEuYXV0aEFjY291bnQucHViKTtcbiAgICAgICAgY29uc3Qgc3Rha2luZ0FjY291bnQgPSBuZXcgUHVibGljS2V5KHRlc3REYXRhLnN0YWtlQWNjb3VudC5wdWIpO1xuXG4gICAgICAgIC8vIEluc3RydWN0aW9uc1xuICAgICAgICBjb25zdCBzdGFraW5nRGVhY3RpdmF0ZUluc3RydWN0aW9ucyA9IFN0YWtlUHJvZ3JhbS5kZWFjdGl2YXRlKHtcbiAgICAgICAgICBhdXRob3JpemVkUHVia2V5OiBmcm9tQWNjb3VudCxcbiAgICAgICAgICBzdGFrZVB1YmtleTogc3Rha2luZ0FjY291bnQsXG4gICAgICAgIH0pLmluc3RydWN0aW9ucztcblxuICAgICAgICBjb25zdCBpbnN0cnVjdGlvbnMgPSBbLi4uc3Rha2luZ0RlYWN0aXZhdGVJbnN0cnVjdGlvbnNdO1xuICAgICAgICBjb25zdCBpc0FNYXRjaCA9IFV0aWxzLm1hdGNoVHJhbnNhY3Rpb25UeXBlQnlJbnN0cnVjdGlvbnNPcmRlcihcbiAgICAgICAgICBpbnN0cnVjdGlvbnMsXG4gICAgICAgICAgc3Rha2luZ0RlYWN0aXZhdGVJbnN0cnVjdGlvbnNJbmRleGVzXG4gICAgICAgICk7XG4gICAgICAgIGlzQU1hdGNoLnNob3VsZC5iZS50cnVlKCk7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ3Nob3VsZCBtYXRjaCBzdGFraW5nIGRlYWN0aXZhdGUgaW5zdHJ1Y3Rpb25zIHdpdGggbWVtbyBhbmQgZHVyYWJsZSBub25jZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY29uc3QgZnJvbUFjY291bnQgPSBuZXcgUHVibGljS2V5KHRlc3REYXRhLmF1dGhBY2NvdW50LnB1Yik7XG4gICAgICAgIGNvbnN0IG5vbmNlQWNjb3VudCA9IHRlc3REYXRhLm5vbmNlQWNjb3VudC5wdWI7XG4gICAgICAgIGNvbnN0IHN0YWtpbmdBY2NvdW50ID0gbmV3IFB1YmxpY0tleSh0ZXN0RGF0YS5zdGFrZUFjY291bnQucHViKTtcbiAgICAgICAgY29uc3QgbWVtbyA9ICd0ZXN0IG1lbW8nO1xuXG4gICAgICAgIC8vIEluc3RydWN0aW9uc1xuICAgICAgICBjb25zdCBub25jZUFkdmFuY2VJbnN0cnVjdGlvbiA9IFN5c3RlbVByb2dyYW0ubm9uY2VBZHZhbmNlKHtcbiAgICAgICAgICBub25jZVB1YmtleTogbmV3IFB1YmxpY0tleShub25jZUFjY291bnQpLFxuICAgICAgICAgIGF1dGhvcml6ZWRQdWJrZXk6IGZyb21BY2NvdW50LFxuICAgICAgICB9KTtcblxuICAgICAgICBjb25zdCBzdGFraW5nRGVhY3RpdmF0ZUluc3RydWN0aW9ucyA9IFN0YWtlUHJvZ3JhbS5kZWFjdGl2YXRlKHtcbiAgICAgICAgICBhdXRob3JpemVkUHVia2V5OiBmcm9tQWNjb3VudCxcbiAgICAgICAgICBzdGFrZVB1YmtleTogc3Rha2luZ0FjY291bnQsXG4gICAgICAgIH0pLmluc3RydWN0aW9ucztcblxuICAgICAgICBjb25zdCBtZW1vSW5zdHJ1Y3Rpb24gPSBuZXcgVHJhbnNhY3Rpb25JbnN0cnVjdGlvbih7XG4gICAgICAgICAga2V5czogW10sXG4gICAgICAgICAgcHJvZ3JhbUlkOiBuZXcgUHVibGljS2V5KE1FTU9fUFJPR1JBTV9QSyksXG4gICAgICAgICAgZGF0YTogQnVmZmVyLmZyb20obWVtbyksXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGNvbnN0IGluc3RydWN0aW9ucyA9IFtub25jZUFkdmFuY2VJbnN0cnVjdGlvbiwgLi4uc3Rha2luZ0RlYWN0aXZhdGVJbnN0cnVjdGlvbnMsIG1lbW9JbnN0cnVjdGlvbl07XG4gICAgICAgIGNvbnN0IGlzQU1hdGNoID0gVXRpbHMubWF0Y2hUcmFuc2FjdGlvblR5cGVCeUluc3RydWN0aW9uc09yZGVyKFxuICAgICAgICAgIGluc3RydWN0aW9ucyxcbiAgICAgICAgICBzdGFraW5nRGVhY3RpdmF0ZUluc3RydWN0aW9uc0luZGV4ZXNcbiAgICAgICAgKTtcbiAgICAgICAgaXNBTWF0Y2guc2hvdWxkLmJlLnRydWUoKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJ1N0YWtpbmcgd2l0aGRyYXcgaW5zdHJ1Y3Rpb25zJywgZnVuY3Rpb24gKCkge1xuICAgICAgaXQoJ3Nob3VsZCBtYXRjaCBzdGFraW5nIHdpdGhkcmF3IGluc3RydWN0aW9ucycsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY29uc3QgZnJvbUFjY291bnQgPSBuZXcgUHVibGljS2V5KHRlc3REYXRhLmF1dGhBY2NvdW50LnB1Yik7XG4gICAgICAgIGNvbnN0IHN0YWtpbmdBY2NvdW50ID0gbmV3IFB1YmxpY0tleSh0ZXN0RGF0YS5zdGFrZUFjY291bnQucHViKTtcbiAgICAgICAgY29uc3QgYW1vdW50ID0gJzEwMDAwMCc7XG5cbiAgICAgICAgLy8gSW5zdHJ1Y3Rpb25zXG4gICAgICAgIGNvbnN0IHN0YWtpbmdXaXRoZHJhd0luc3RydWN0aW9ucyA9IFN0YWtlUHJvZ3JhbS53aXRoZHJhdyh7XG4gICAgICAgICAgYXV0aG9yaXplZFB1YmtleTogZnJvbUFjY291bnQsXG4gICAgICAgICAgc3Rha2VQdWJrZXk6IHN0YWtpbmdBY2NvdW50LFxuICAgICAgICAgIHRvUHVia2V5OiBmcm9tQWNjb3VudCxcbiAgICAgICAgICBsYW1wb3J0czogbmV3IEJpZ051bWJlcihhbW91bnQpLnRvTnVtYmVyKCksXG4gICAgICAgIH0pLmluc3RydWN0aW9ucztcblxuICAgICAgICBjb25zdCBpbnN0cnVjdGlvbnMgPSBbLi4uc3Rha2luZ1dpdGhkcmF3SW5zdHJ1Y3Rpb25zXTtcbiAgICAgICAgY29uc3QgaXNBTWF0Y2ggPSBVdGlscy5tYXRjaFRyYW5zYWN0aW9uVHlwZUJ5SW5zdHJ1Y3Rpb25zT3JkZXIoXG4gICAgICAgICAgaW5zdHJ1Y3Rpb25zLFxuICAgICAgICAgIHN0YWtpbmdXaXRoZHJhd0luc3RydWN0aW9uc0luZGV4ZXNcbiAgICAgICAgKTtcbiAgICAgICAgaXNBTWF0Y2guc2hvdWxkLmJlLnRydWUoKTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgnc2hvdWxkIG1hdGNoIHN0YWtpbmcgd2l0aGRyYXcgaW5zdHJ1Y3Rpb25zIHdpdGggbWVtbyBhbmQgZHVyYWJsZSBub25jZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY29uc3QgZnJvbUFjY291bnQgPSBuZXcgUHVibGljS2V5KHRlc3REYXRhLmF1dGhBY2NvdW50LnB1Yik7XG4gICAgICAgIGNvbnN0IG5vbmNlQWNjb3VudCA9IHRlc3REYXRhLm5vbmNlQWNjb3VudC5wdWI7XG4gICAgICAgIGNvbnN0IHN0YWtpbmdBY2NvdW50ID0gbmV3IFB1YmxpY0tleSh0ZXN0RGF0YS5zdGFrZUFjY291bnQucHViKTtcbiAgICAgICAgY29uc3QgYW1vdW50ID0gJzEwMDAwMCc7XG4gICAgICAgIGNvbnN0IG1lbW8gPSAndGVzdCBtZW1vJztcblxuICAgICAgICAvLyBJbnN0cnVjdGlvbnNcbiAgICAgICAgY29uc3Qgbm9uY2VBZHZhbmNlSW5zdHJ1Y3Rpb24gPSBTeXN0ZW1Qcm9ncmFtLm5vbmNlQWR2YW5jZSh7XG4gICAgICAgICAgbm9uY2VQdWJrZXk6IG5ldyBQdWJsaWNLZXkobm9uY2VBY2NvdW50KSxcbiAgICAgICAgICBhdXRob3JpemVkUHVia2V5OiBmcm9tQWNjb3VudCxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgLy8gSW5zdHJ1Y3Rpb25zXG4gICAgICAgIGNvbnN0IHN0YWtpbmdXaXRoZHJhd0luc3RydWN0aW9ucyA9IFN0YWtlUHJvZ3JhbS53aXRoZHJhdyh7XG4gICAgICAgICAgYXV0aG9yaXplZFB1YmtleTogZnJvbUFjY291bnQsXG4gICAgICAgICAgc3Rha2VQdWJrZXk6IHN0YWtpbmdBY2NvdW50LFxuICAgICAgICAgIHRvUHVia2V5OiBmcm9tQWNjb3VudCxcbiAgICAgICAgICBsYW1wb3J0czogbmV3IEJpZ051bWJlcihhbW91bnQpLnRvTnVtYmVyKCksXG4gICAgICAgIH0pLmluc3RydWN0aW9ucztcblxuICAgICAgICBjb25zdCBtZW1vSW5zdHJ1Y3Rpb24gPSBuZXcgVHJhbnNhY3Rpb25JbnN0cnVjdGlvbih7XG4gICAgICAgICAga2V5czogW10sXG4gICAgICAgICAgcHJvZ3JhbUlkOiBuZXcgUHVibGljS2V5KE1FTU9fUFJPR1JBTV9QSyksXG4gICAgICAgICAgZGF0YTogQnVmZmVyLmZyb20obWVtbyksXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGNvbnN0IGluc3RydWN0aW9ucyA9IFtub25jZUFkdmFuY2VJbnN0cnVjdGlvbiwgLi4uc3Rha2luZ1dpdGhkcmF3SW5zdHJ1Y3Rpb25zLCBtZW1vSW5zdHJ1Y3Rpb25dO1xuICAgICAgICBjb25zdCBpc0FNYXRjaCA9IFV0aWxzLm1hdGNoVHJhbnNhY3Rpb25UeXBlQnlJbnN0cnVjdGlvbnNPcmRlcihcbiAgICAgICAgICBpbnN0cnVjdGlvbnMsXG4gICAgICAgICAgc3Rha2luZ1dpdGhkcmF3SW5zdHJ1Y3Rpb25zSW5kZXhlc1xuICAgICAgICApO1xuICAgICAgICBpc0FNYXRjaC5zaG91bGQuYmUudHJ1ZSgpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdpc0lkZW1wb3RlbnRBdGFJbnN0cnVjdGlvbicsIGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCBtb2NrS2V5cyA9IFtcbiAgICAgIHsgcHVia2V5OiBuZXcgUHVibGljS2V5KCc5aThDU2l6MnVuN3JmdU52VE10MXRUWGJIU2FNa1BaeUo0TWV4WTF5ZVpCRCcpLCBpc1NpZ25lcjogdHJ1ZSwgaXNXcml0YWJsZTogdHJ1ZSB9LFxuICAgICAgeyBwdWJrZXk6IG5ldyBQdWJsaWNLZXkoJzNGN1g3aWZ3TVIyOVozdDFZYW1GZzZ5ekNjc1NrakFacFpGOHlVMWtXVVJoJyksIGlzU2lnbmVyOiBmYWxzZSwgaXNXcml0YWJsZTogdHJ1ZSB9LFxuICAgIF07XG5cbiAgICBpdCgnc2hvdWxkIHJldHVybiB0cnVlIGZvciBpZGVtcG90ZW50IEFUQSBpbnN0cnVjdGlvbiB3aXRoIGRpc2NyaW1pbmF0b3IgYnl0ZSAxJywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgaW5zdHJ1Y3Rpb24gPSBuZXcgVHJhbnNhY3Rpb25JbnN0cnVjdGlvbih7XG4gICAgICAgIHByb2dyYW1JZDogQVNTT0NJQVRFRF9UT0tFTl9QUk9HUkFNX0lELFxuICAgICAgICBrZXlzOiBtb2NrS2V5cyxcbiAgICAgICAgZGF0YTogQnVmZmVyLmZyb20oWzFdKSxcbiAgICAgIH0pO1xuICAgICAgVXRpbHMuaXNJZGVtcG90ZW50QXRhSW5zdHJ1Y3Rpb24oaW5zdHJ1Y3Rpb24pLnNob3VsZC5lcXVhbCh0cnVlKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgcmV0dXJuIHRydWUgZm9yIGlkZW1wb3RlbnQgQVRBIGluc3RydWN0aW9uIGZyb20gYmFzZTY0IFwiQVE9PVwiJywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgaW5zdHJ1Y3Rpb24gPSBuZXcgVHJhbnNhY3Rpb25JbnN0cnVjdGlvbih7XG4gICAgICAgIHByb2dyYW1JZDogQVNTT0NJQVRFRF9UT0tFTl9QUk9HUkFNX0lELFxuICAgICAgICBrZXlzOiBtb2NrS2V5cyxcbiAgICAgICAgZGF0YTogQnVmZmVyLmZyb20oJ0FRPT0nLCAnYmFzZTY0JyksXG4gICAgICB9KTtcbiAgICAgIFV0aWxzLmlzSWRlbXBvdGVudEF0YUluc3RydWN0aW9uKGluc3RydWN0aW9uKS5zaG91bGQuZXF1YWwodHJ1ZSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHJldHVybiBmYWxzZSBmb3IgbGVnYWN5IEFUQSBpbnN0cnVjdGlvbiB3aXRoIGVtcHR5IGRhdGEnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBpbnN0cnVjdGlvbiA9IG5ldyBUcmFuc2FjdGlvbkluc3RydWN0aW9uKHtcbiAgICAgICAgcHJvZ3JhbUlkOiBBU1NPQ0lBVEVEX1RPS0VOX1BST0dSQU1fSUQsXG4gICAgICAgIGtleXM6IG1vY2tLZXlzLFxuICAgICAgICBkYXRhOiBCdWZmZXIuZnJvbShbXSksXG4gICAgICB9KTtcbiAgICAgIFV0aWxzLmlzSWRlbXBvdGVudEF0YUluc3RydWN0aW9uKGluc3RydWN0aW9uKS5zaG91bGQuZXF1YWwoZmFsc2UpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gZmFsc2UgZm9yIGluc3RydWN0aW9uIHdpdGggd3JvbmcgZGlzY3JpbWluYXRvcicsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGluc3RydWN0aW9uID0gbmV3IFRyYW5zYWN0aW9uSW5zdHJ1Y3Rpb24oe1xuICAgICAgICBwcm9ncmFtSWQ6IEFTU09DSUFURURfVE9LRU5fUFJPR1JBTV9JRCxcbiAgICAgICAga2V5czogbW9ja0tleXMsXG4gICAgICAgIGRhdGE6IEJ1ZmZlci5mcm9tKFsyXSksXG4gICAgICB9KTtcbiAgICAgIFV0aWxzLmlzSWRlbXBvdGVudEF0YUluc3RydWN0aW9uKGluc3RydWN0aW9uKS5zaG91bGQuZXF1YWwoZmFsc2UpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gZmFsc2UgZm9yIGluc3RydWN0aW9uIHdpdGggbXVsdGlwbGUgYnl0ZXMnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBpbnN0cnVjdGlvbiA9IG5ldyBUcmFuc2FjdGlvbkluc3RydWN0aW9uKHtcbiAgICAgICAgcHJvZ3JhbUlkOiBBU1NPQ0lBVEVEX1RPS0VOX1BST0dSQU1fSUQsXG4gICAgICAgIGtleXM6IG1vY2tLZXlzLFxuICAgICAgICBkYXRhOiBCdWZmZXIuZnJvbShbMSwgMl0pLFxuICAgICAgfSk7XG4gICAgICBVdGlscy5pc0lkZW1wb3RlbnRBdGFJbnN0cnVjdGlvbihpbnN0cnVjdGlvbikuc2hvdWxkLmVxdWFsKGZhbHNlKTtcbiAgICB9KTtcbiAgfSk7XG59KTtcbiJdfQ==
|