@bitgo/sdk-coin-tempo 1.10.0 → 1.12.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/src/lib/transaction.d.ts +5 -2
- package/dist/src/lib/transaction.d.ts.map +1 -1
- package/dist/src/lib/transaction.js +20 -8
- package/dist/src/lib/transactionBuilder.d.ts +17 -2
- package/dist/src/lib/transactionBuilder.d.ts.map +1 -1
- package/dist/src/lib/transactionBuilder.js +63 -8
- package/dist/src/lib/types.d.ts +10 -0
- package/dist/src/lib/types.d.ts.map +1 -1
- package/dist/src/lib/types.js +1 -1
- package/dist/src/lib/utils.d.ts +6 -0
- package/dist/src/lib/utils.d.ts.map +1 -1
- package/dist/src/lib/utils.js +10 -1
- package/dist/src/tempo.d.ts +9 -2
- package/dist/src/tempo.d.ts.map +1 -1
- package/dist/src/tempo.js +56 -16
- package/dist/src/tip20Token.js +2 -2
- package/dist/test/resources/tempo.js +2 -2
- package/dist/test/unit/transactionBuilder.js +299 -2
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +7 -7
|
@@ -185,7 +185,7 @@ const mockCoinConfig = statics_1.coins.get('ttempo');
|
|
|
185
185
|
(0, mocha_1.it)('should throw error when no operations added', async () => {
|
|
186
186
|
const builder = new transactionBuilder_1.Tip20TransactionBuilder(mockCoinConfig);
|
|
187
187
|
builder.nonce(0).gas(100000n).maxFeePerGas(1000000000n).maxPriorityFeePerGas(500000000n);
|
|
188
|
-
await assert_1.default.rejects(async () => await builder.build(),
|
|
188
|
+
await assert_1.default.rejects(async () => await builder.build(), /At least one operation or raw call is required/);
|
|
189
189
|
});
|
|
190
190
|
(0, mocha_1.it)('should throw error when nonce not set', async () => {
|
|
191
191
|
const builder = new transactionBuilder_1.Tip20TransactionBuilder(mockCoinConfig);
|
|
@@ -557,5 +557,302 @@ const mockCoinConfig = statics_1.coins.get('ttempo');
|
|
|
557
557
|
assert_1.default.strictEqual(result, true);
|
|
558
558
|
});
|
|
559
559
|
});
|
|
560
|
+
(0, mocha_1.describe)('verifyTransaction with feeToken', () => {
|
|
561
|
+
(0, mocha_1.it)('should verify transaction with matching fee token', async () => {
|
|
562
|
+
const feeToken = ethers_1.ethers.utils.getAddress(tempo_1.TESTNET_TOKENS.betaUSD.address);
|
|
563
|
+
const builder = new transactionBuilder_1.Tip20TransactionBuilder(statics_1.coins.get('ttempo'));
|
|
564
|
+
builder
|
|
565
|
+
.addOperation({ token: mockToken, to: mockRecipient, amount: '100' })
|
|
566
|
+
.feeToken(feeToken)
|
|
567
|
+
.nonce(0)
|
|
568
|
+
.gas(100000n)
|
|
569
|
+
.maxFeePerGas(tempo_1.TX_PARAMS.defaultMaxFeePerGas)
|
|
570
|
+
.maxPriorityFeePerGas(tempo_1.TX_PARAMS.defaultMaxPriorityFeePerGas);
|
|
571
|
+
const tx = (await builder.build());
|
|
572
|
+
const txHex = await tx.serialize();
|
|
573
|
+
const result = await coin.verifyTransaction({
|
|
574
|
+
txPrebuild: { txHex },
|
|
575
|
+
txParams: { feeToken: feeToken },
|
|
576
|
+
});
|
|
577
|
+
assert_1.default.strictEqual(result, true);
|
|
578
|
+
});
|
|
579
|
+
(0, mocha_1.it)('should throw when fee token does not match', async () => {
|
|
580
|
+
const feeToken = ethers_1.ethers.utils.getAddress(tempo_1.TESTNET_TOKENS.betaUSD.address);
|
|
581
|
+
const wrongFeeToken = ethers_1.ethers.utils.getAddress(tempo_1.TESTNET_TOKENS.alphaUSD.address);
|
|
582
|
+
const builder = new transactionBuilder_1.Tip20TransactionBuilder(statics_1.coins.get('ttempo'));
|
|
583
|
+
builder
|
|
584
|
+
.addOperation({ token: mockToken, to: mockRecipient, amount: '100' })
|
|
585
|
+
.feeToken(feeToken)
|
|
586
|
+
.nonce(0)
|
|
587
|
+
.gas(100000n)
|
|
588
|
+
.maxFeePerGas(tempo_1.TX_PARAMS.defaultMaxFeePerGas)
|
|
589
|
+
.maxPriorityFeePerGas(tempo_1.TX_PARAMS.defaultMaxPriorityFeePerGas);
|
|
590
|
+
const tx = (await builder.build());
|
|
591
|
+
const txHex = await tx.serialize();
|
|
592
|
+
await assert_1.default.rejects(() => coin.verifyTransaction({
|
|
593
|
+
txPrebuild: { txHex },
|
|
594
|
+
txParams: { feeToken: wrongFeeToken },
|
|
595
|
+
}), /Fee token mismatch/);
|
|
596
|
+
});
|
|
597
|
+
(0, mocha_1.it)('should throw when fee token is expected but transaction has none', async () => {
|
|
598
|
+
const expectedFeeToken = ethers_1.ethers.utils.getAddress(tempo_1.TESTNET_TOKENS.betaUSD.address);
|
|
599
|
+
const builder = new transactionBuilder_1.Tip20TransactionBuilder(statics_1.coins.get('ttempo'));
|
|
600
|
+
builder
|
|
601
|
+
.addOperation({ token: mockToken, to: mockRecipient, amount: '100' })
|
|
602
|
+
.nonce(0)
|
|
603
|
+
.gas(100000n)
|
|
604
|
+
.maxFeePerGas(tempo_1.TX_PARAMS.defaultMaxFeePerGas)
|
|
605
|
+
.maxPriorityFeePerGas(tempo_1.TX_PARAMS.defaultMaxPriorityFeePerGas);
|
|
606
|
+
const tx = (await builder.build());
|
|
607
|
+
const txHex = await tx.serialize();
|
|
608
|
+
await assert_1.default.rejects(() => coin.verifyTransaction({
|
|
609
|
+
txPrebuild: { txHex },
|
|
610
|
+
txParams: { feeToken: expectedFeeToken },
|
|
611
|
+
}), /Fee token mismatch/);
|
|
612
|
+
});
|
|
613
|
+
(0, mocha_1.it)('should pass verification when no fee token is specified in params', async () => {
|
|
614
|
+
const feeToken = ethers_1.ethers.utils.getAddress(tempo_1.TESTNET_TOKENS.betaUSD.address);
|
|
615
|
+
const builder = new transactionBuilder_1.Tip20TransactionBuilder(statics_1.coins.get('ttempo'));
|
|
616
|
+
builder
|
|
617
|
+
.addOperation({ token: mockToken, to: mockRecipient, amount: '100' })
|
|
618
|
+
.feeToken(feeToken)
|
|
619
|
+
.nonce(0)
|
|
620
|
+
.gas(100000n)
|
|
621
|
+
.maxFeePerGas(tempo_1.TX_PARAMS.defaultMaxFeePerGas)
|
|
622
|
+
.maxPriorityFeePerGas(tempo_1.TX_PARAMS.defaultMaxPriorityFeePerGas);
|
|
623
|
+
const tx = (await builder.build());
|
|
624
|
+
const txHex = await tx.serialize();
|
|
625
|
+
// No feeToken in txParams - should not verify, just pass
|
|
626
|
+
const result = await coin.verifyTransaction({
|
|
627
|
+
txPrebuild: { txHex },
|
|
628
|
+
txParams: {},
|
|
629
|
+
});
|
|
630
|
+
assert_1.default.strictEqual(result, true);
|
|
631
|
+
});
|
|
632
|
+
});
|
|
633
|
+
});
|
|
634
|
+
(0, mocha_1.describe)('Raw Contract Call Builder', () => {
|
|
635
|
+
const mockContract = ethers_1.ethers.utils.getAddress('0xdeadbeefdeadbeefdeadbeefdeadbeefdeadbeef');
|
|
636
|
+
const mockCalldata = '0xa9059cbb000000000000000000000000742d35cc6634c0532925a3b844bc454e4438f44e0000000000000000000000000000000000000000000000000000000000989680';
|
|
637
|
+
(0, mocha_1.describe)('addRawCall', () => {
|
|
638
|
+
(0, mocha_1.it)('should add a raw call and return it via getRawCalls()', () => {
|
|
639
|
+
const builder = new transactionBuilder_1.Tip20TransactionBuilder(mockCoinConfig);
|
|
640
|
+
builder.addRawCall({ to: mockContract, data: mockCalldata });
|
|
641
|
+
const rawCalls = builder.getRawCalls();
|
|
642
|
+
assert_1.default.strictEqual(rawCalls.length, 1);
|
|
643
|
+
assert_1.default.strictEqual(rawCalls[0].to, mockContract);
|
|
644
|
+
assert_1.default.strictEqual(rawCalls[0].data, mockCalldata);
|
|
645
|
+
});
|
|
646
|
+
(0, mocha_1.it)('should support chaining addRawCall', () => {
|
|
647
|
+
const builder = new transactionBuilder_1.Tip20TransactionBuilder(mockCoinConfig);
|
|
648
|
+
const result = builder.addRawCall({ to: mockContract, data: mockCalldata });
|
|
649
|
+
assert_1.default.strictEqual(result, builder);
|
|
650
|
+
});
|
|
651
|
+
(0, mocha_1.it)('should throw for invalid contract address', () => {
|
|
652
|
+
const builder = new transactionBuilder_1.Tip20TransactionBuilder(mockCoinConfig);
|
|
653
|
+
assert_1.default.throws(() => builder.addRawCall({ to: '0xinvalid', data: mockCalldata }), /Invalid contract address/);
|
|
654
|
+
});
|
|
655
|
+
(0, mocha_1.it)('should throw for empty calldata', () => {
|
|
656
|
+
const builder = new transactionBuilder_1.Tip20TransactionBuilder(mockCoinConfig);
|
|
657
|
+
assert_1.default.throws(() => builder.addRawCall({ to: mockContract, data: '0x' }), /Invalid calldata/);
|
|
658
|
+
});
|
|
659
|
+
(0, mocha_1.it)('should throw for non-hex calldata', () => {
|
|
660
|
+
const builder = new transactionBuilder_1.Tip20TransactionBuilder(mockCoinConfig);
|
|
661
|
+
assert_1.default.throws(() => builder.addRawCall({ to: mockContract, data: 'not-hex-data' }), /Invalid calldata/);
|
|
662
|
+
});
|
|
663
|
+
(0, mocha_1.it)('should throw for calldata missing 0x prefix', () => {
|
|
664
|
+
const builder = new transactionBuilder_1.Tip20TransactionBuilder(mockCoinConfig);
|
|
665
|
+
assert_1.default.throws(() => builder.addRawCall({ to: mockContract, data: 'a9059cbb' }), /Invalid calldata/);
|
|
666
|
+
});
|
|
667
|
+
(0, mocha_1.it)('should throw for odd-length hex calldata', () => {
|
|
668
|
+
const builder = new transactionBuilder_1.Tip20TransactionBuilder(mockCoinConfig);
|
|
669
|
+
assert_1.default.throws(() => builder.addRawCall({ to: mockContract, data: '0xabc' }), /Invalid calldata/);
|
|
670
|
+
});
|
|
671
|
+
(0, mocha_1.it)('should throw for invalid value string', () => {
|
|
672
|
+
const builder = new transactionBuilder_1.Tip20TransactionBuilder(mockCoinConfig);
|
|
673
|
+
assert_1.default.throws(() => builder.addRawCall({ to: mockContract, data: mockCalldata, value: '1e18' }), /Invalid value/);
|
|
674
|
+
});
|
|
675
|
+
(0, mocha_1.it)('should throw for negative value', () => {
|
|
676
|
+
const builder = new transactionBuilder_1.Tip20TransactionBuilder(mockCoinConfig);
|
|
677
|
+
assert_1.default.throws(() => builder.addRawCall({ to: mockContract, data: mockCalldata, value: '-1' }), /Invalid value/);
|
|
678
|
+
});
|
|
679
|
+
(0, mocha_1.it)('should allow raw-call-only transaction (no operations)', async () => {
|
|
680
|
+
const builder = new transactionBuilder_1.Tip20TransactionBuilder(mockCoinConfig);
|
|
681
|
+
builder
|
|
682
|
+
.addRawCall({ to: mockContract, data: mockCalldata })
|
|
683
|
+
.nonce(0)
|
|
684
|
+
.gas(100000n)
|
|
685
|
+
.maxFeePerGas(tempo_1.TX_PARAMS.defaultMaxFeePerGas)
|
|
686
|
+
.maxPriorityFeePerGas(tempo_1.TX_PARAMS.defaultMaxPriorityFeePerGas);
|
|
687
|
+
const tx = (await builder.build());
|
|
688
|
+
assert_1.default.ok(tx instanceof transaction_1.Tip20Transaction);
|
|
689
|
+
assert_1.default.strictEqual(tx.getOperations().length, 0);
|
|
690
|
+
assert_1.default.strictEqual(tx.getRawCalls().length, 1);
|
|
691
|
+
assert_1.default.strictEqual(tx.getOperationCount(), 1);
|
|
692
|
+
});
|
|
693
|
+
});
|
|
694
|
+
(0, mocha_1.describe)('Round-Trip: Build -> Serialize -> From (raw call deserialization)', () => {
|
|
695
|
+
(0, mocha_1.it)('should preserve raw call calldata through a round-trip', async () => {
|
|
696
|
+
const builder = new transactionBuilder_1.Tip20TransactionBuilder(mockCoinConfig);
|
|
697
|
+
builder
|
|
698
|
+
.addRawCall({ to: mockContract, data: mockCalldata })
|
|
699
|
+
.nonce(5)
|
|
700
|
+
.gas(150000n)
|
|
701
|
+
.maxFeePerGas(tempo_1.TX_PARAMS.defaultMaxFeePerGas)
|
|
702
|
+
.maxPriorityFeePerGas(tempo_1.TX_PARAMS.defaultMaxPriorityFeePerGas);
|
|
703
|
+
const originalTx = (await builder.build());
|
|
704
|
+
const serialized = await originalTx.serialize();
|
|
705
|
+
const builder2 = new transactionBuilder_1.Tip20TransactionBuilder(mockCoinConfig);
|
|
706
|
+
builder2.from(serialized);
|
|
707
|
+
const restoredTx = (await builder2.build());
|
|
708
|
+
assert_1.default.strictEqual(restoredTx.getOperations().length, 0);
|
|
709
|
+
const rawCalls = restoredTx.getRawCalls();
|
|
710
|
+
assert_1.default.strictEqual(rawCalls.length, 1);
|
|
711
|
+
assert_1.default.strictEqual(rawCalls[0].to.toLowerCase(), mockContract.toLowerCase());
|
|
712
|
+
assert_1.default.strictEqual(rawCalls[0].data.toLowerCase(), mockCalldata.toLowerCase());
|
|
713
|
+
});
|
|
714
|
+
(0, mocha_1.it)('should preserve calldata through a signed round-trip', async () => {
|
|
715
|
+
const builder = new transactionBuilder_1.Tip20TransactionBuilder(mockCoinConfig);
|
|
716
|
+
builder
|
|
717
|
+
.addRawCall({ to: mockContract, data: mockCalldata })
|
|
718
|
+
.nonce(7)
|
|
719
|
+
.gas(120000n)
|
|
720
|
+
.maxFeePerGas(tempo_1.TX_PARAMS.defaultMaxFeePerGas)
|
|
721
|
+
.maxPriorityFeePerGas(tempo_1.TX_PARAMS.defaultMaxPriorityFeePerGas);
|
|
722
|
+
const tx = (await builder.build());
|
|
723
|
+
tx.setSignature(tempo_1.SIGNATURE_TEST_DATA.validSignature);
|
|
724
|
+
const signedHex = await tx.toBroadcastFormat();
|
|
725
|
+
const builder2 = new transactionBuilder_1.Tip20TransactionBuilder(mockCoinConfig);
|
|
726
|
+
builder2.from(signedHex);
|
|
727
|
+
const restoredTx = (await builder2.build());
|
|
728
|
+
const rawCalls = restoredTx.getRawCalls();
|
|
729
|
+
assert_1.default.strictEqual(rawCalls.length, 1);
|
|
730
|
+
assert_1.default.strictEqual(rawCalls[0].data.toLowerCase(), mockCalldata.toLowerCase());
|
|
731
|
+
const sig = restoredTx.getSignature();
|
|
732
|
+
assert_1.default.ok(sig !== undefined);
|
|
733
|
+
assert_1.default.strictEqual(sig.yParity, tempo_1.SIGNATURE_TEST_DATA.validSignature.yParity);
|
|
734
|
+
});
|
|
735
|
+
(0, mocha_1.it)('should preserve raw call tx id through a round-trip', async () => {
|
|
736
|
+
const builder = new transactionBuilder_1.Tip20TransactionBuilder(mockCoinConfig);
|
|
737
|
+
builder
|
|
738
|
+
.addRawCall({ to: mockContract, data: mockCalldata })
|
|
739
|
+
.nonce(3)
|
|
740
|
+
.gas(100000n)
|
|
741
|
+
.maxFeePerGas(tempo_1.TX_PARAMS.defaultMaxFeePerGas)
|
|
742
|
+
.maxPriorityFeePerGas(tempo_1.TX_PARAMS.defaultMaxPriorityFeePerGas);
|
|
743
|
+
const originalTx = (await builder.build());
|
|
744
|
+
const serialized = await originalTx.serialize();
|
|
745
|
+
const originalId = originalTx.id;
|
|
746
|
+
const builder2 = new transactionBuilder_1.Tip20TransactionBuilder(mockCoinConfig);
|
|
747
|
+
builder2.from(serialized);
|
|
748
|
+
const restoredTx = (await builder2.build());
|
|
749
|
+
assert_1.default.strictEqual(restoredTx.id, originalId);
|
|
750
|
+
});
|
|
751
|
+
});
|
|
752
|
+
(0, mocha_1.describe)('Raw call toJson and outputs', () => {
|
|
753
|
+
(0, mocha_1.it)('should expose raw call contract address as output', async () => {
|
|
754
|
+
const builder = new transactionBuilder_1.Tip20TransactionBuilder(mockCoinConfig);
|
|
755
|
+
builder
|
|
756
|
+
.addRawCall({ to: mockContract, data: mockCalldata, value: '0' })
|
|
757
|
+
.nonce(2)
|
|
758
|
+
.gas(200000n)
|
|
759
|
+
.maxFeePerGas(tempo_1.TX_PARAMS.defaultMaxFeePerGas)
|
|
760
|
+
.maxPriorityFeePerGas(tempo_1.TX_PARAMS.defaultMaxPriorityFeePerGas);
|
|
761
|
+
const tx = (await builder.build());
|
|
762
|
+
assert_1.default.strictEqual(tx.outputs.length, 1);
|
|
763
|
+
assert_1.default.strictEqual(tx.outputs[0].address.toLowerCase(), mockContract.toLowerCase());
|
|
764
|
+
});
|
|
765
|
+
(0, mocha_1.it)('should include rawCalls in toJson() output', async () => {
|
|
766
|
+
const builder = new transactionBuilder_1.Tip20TransactionBuilder(mockCoinConfig);
|
|
767
|
+
builder
|
|
768
|
+
.addRawCall({ to: mockContract, data: mockCalldata })
|
|
769
|
+
.nonce(0)
|
|
770
|
+
.gas(100000n)
|
|
771
|
+
.maxFeePerGas(tempo_1.TX_PARAMS.defaultMaxFeePerGas)
|
|
772
|
+
.maxPriorityFeePerGas(tempo_1.TX_PARAMS.defaultMaxPriorityFeePerGas);
|
|
773
|
+
const tx = (await builder.build());
|
|
774
|
+
const json = tx.toJson();
|
|
775
|
+
assert_1.default.ok(Array.isArray(json.rawCalls));
|
|
776
|
+
assert_1.default.strictEqual(json.rawCalls.length, 1);
|
|
777
|
+
assert_1.default.strictEqual(json.rawCalls[0].to, mockContract);
|
|
778
|
+
assert_1.default.strictEqual(json.rawCalls[0].data, mockCalldata);
|
|
779
|
+
});
|
|
780
|
+
});
|
|
781
|
+
});
|
|
782
|
+
(0, mocha_1.describe)('Tempo coin - verifyTransaction with raw calls', () => {
|
|
783
|
+
let bitgo;
|
|
784
|
+
let coin;
|
|
785
|
+
const mockContract = ethers_1.ethers.utils.getAddress('0xdeadbeefdeadbeefdeadbeefdeadbeefdeadbeef');
|
|
786
|
+
const mockCalldata = '0xa9059cbb000000000000000000000000742d35cc6634c0532925a3b844bc454e4438f44e0000000000000000000000000000000000000000000000000000000000989680';
|
|
787
|
+
(0, mocha_1.before)(function () {
|
|
788
|
+
bitgo = sdk_test_1.TestBitGo.decorate(sdk_api_1.BitGoAPI, { env: 'mock' });
|
|
789
|
+
bitgo.safeRegister('ttempo', (bg) => {
|
|
790
|
+
const mockStaticsCoin = {
|
|
791
|
+
name: 'ttempo',
|
|
792
|
+
fullName: 'Testnet Tempo',
|
|
793
|
+
network: { type: 'testnet' },
|
|
794
|
+
features: [],
|
|
795
|
+
};
|
|
796
|
+
return ttempo_1.Ttempo.createInstance(bg, mockStaticsCoin);
|
|
797
|
+
});
|
|
798
|
+
bitgo.initializeTestVars();
|
|
799
|
+
coin = bitgo.coin('ttempo');
|
|
800
|
+
});
|
|
801
|
+
async function buildRawCallTx(contract, calldata, nonce = 0) {
|
|
802
|
+
const builder = new transactionBuilder_1.Tip20TransactionBuilder(statics_1.coins.get('ttempo'));
|
|
803
|
+
builder
|
|
804
|
+
.addRawCall({ to: contract, data: calldata })
|
|
805
|
+
.nonce(nonce)
|
|
806
|
+
.gas(150000n)
|
|
807
|
+
.maxFeePerGas(tempo_1.TX_PARAMS.defaultMaxFeePerGas)
|
|
808
|
+
.maxPriorityFeePerGas(tempo_1.TX_PARAMS.defaultMaxPriorityFeePerGas);
|
|
809
|
+
const tx = (await builder.build());
|
|
810
|
+
return tx.serialize();
|
|
811
|
+
}
|
|
812
|
+
(0, mocha_1.it)('should verify a raw call transaction when recipient data matches', async () => {
|
|
813
|
+
const txHex = await buildRawCallTx(mockContract, mockCalldata);
|
|
814
|
+
const result = await coin.verifyTransaction({
|
|
815
|
+
txPrebuild: { txHex },
|
|
816
|
+
txParams: {
|
|
817
|
+
recipients: [{ address: mockContract, amount: '0', data: mockCalldata }],
|
|
818
|
+
},
|
|
819
|
+
});
|
|
820
|
+
assert_1.default.strictEqual(result, true);
|
|
821
|
+
});
|
|
822
|
+
(0, mocha_1.it)('should throw when raw call address does not match recipient', async () => {
|
|
823
|
+
const txHex = await buildRawCallTx(mockContract, mockCalldata);
|
|
824
|
+
const wrongAddress = ethers_1.ethers.utils.getAddress('0x1111111111111111111111111111111111111111');
|
|
825
|
+
await assert_1.default.rejects(() => coin.verifyTransaction({
|
|
826
|
+
txPrebuild: { txHex },
|
|
827
|
+
txParams: { recipients: [{ address: wrongAddress, amount: '0', data: mockCalldata }] },
|
|
828
|
+
}), /address mismatch/);
|
|
829
|
+
});
|
|
830
|
+
(0, mocha_1.it)('should throw when raw call calldata does not match', async () => {
|
|
831
|
+
const txHex = await buildRawCallTx(mockContract, mockCalldata);
|
|
832
|
+
const wrongCalldata = '0xdeadbeef01020304';
|
|
833
|
+
await assert_1.default.rejects(() => coin.verifyTransaction({
|
|
834
|
+
txPrebuild: { txHex },
|
|
835
|
+
txParams: { recipients: [{ address: mockContract, amount: '0', data: wrongCalldata }] },
|
|
836
|
+
}), /calldata mismatch/);
|
|
837
|
+
});
|
|
838
|
+
(0, mocha_1.it)('should throw when recipient count does not match call count', async () => {
|
|
839
|
+
const txHex = await buildRawCallTx(mockContract, mockCalldata);
|
|
840
|
+
await assert_1.default.rejects(() => coin.verifyTransaction({
|
|
841
|
+
txPrebuild: { txHex },
|
|
842
|
+
txParams: {
|
|
843
|
+
recipients: [
|
|
844
|
+
{ address: mockContract, amount: '0', data: mockCalldata },
|
|
845
|
+
{ address: mockContract, amount: '0', data: mockCalldata },
|
|
846
|
+
],
|
|
847
|
+
},
|
|
848
|
+
}), /call\(s\)/);
|
|
849
|
+
});
|
|
850
|
+
(0, mocha_1.it)('should parse a raw call transaction and expose the contract as an output', async () => {
|
|
851
|
+
const txHex = await buildRawCallTx(mockContract, mockCalldata);
|
|
852
|
+
const parsed = await coin.parseTransaction({ txHex });
|
|
853
|
+
assert_1.default.ok(Array.isArray(parsed.outputs));
|
|
854
|
+
assert_1.default.strictEqual(parsed.outputs.length, 1);
|
|
855
|
+
assert_1.default.strictEqual(parsed.outputs[0].address.toLowerCase(), mockContract.toLowerCase());
|
|
856
|
+
});
|
|
560
857
|
});
|
|
561
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNhY3Rpb25CdWlsZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vdGVzdC91bml0L3RyYW5zYWN0aW9uQnVpbGRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLG9EQUE0QjtBQUM1QixpQ0FBNkM7QUFDN0MsbUNBQWdDO0FBQ2hDLHlFQUEyRTtBQUMzRSwyREFBNkQ7QUFDN0QsK0NBTTZCO0FBQzdCLHVEQUE4RTtBQUM5RSw0Q0FBdUM7QUFDdkMsNkNBQTBDO0FBQzFDLDRDQUEwQztBQUMxQyw4Q0FBMEQ7QUFFMUQsOENBTTRCO0FBRTVCLE1BQU0sY0FBYyxHQUFHLGVBQUssQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUM7QUFFM0MsSUFBQSxnQkFBUSxFQUFDLGtCQUFrQixFQUFFLEdBQUcsRUFBRTtJQUNoQyxJQUFBLGdCQUFRLEVBQUMsb0JBQW9CLEVBQUUsR0FBRyxFQUFFO1FBQ2xDLElBQUEsVUFBRSxFQUFDLGtEQUFrRCxFQUFFLEdBQUcsRUFBRTtZQUMxRCxnQkFBTSxDQUFDLFdBQVcsQ0FBQyxJQUFBLDBCQUFrQixFQUFDLEtBQUssQ0FBQyxFQUFFLFFBQVEsQ0FBQyxDQUFDO1lBQ3hELGdCQUFNLENBQUMsV0FBVyxDQUFDLElBQUEsMEJBQWtCLEVBQUMsS0FBSyxDQUFDLEVBQUUsVUFBVSxDQUFDLENBQUM7WUFDMUQsZ0JBQU0sQ0FBQyxXQUFXLENBQUMsSUFBQSwwQkFBa0IsRUFBQyxVQUFVLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztRQUN6RCxDQUFDLENBQUMsQ0FBQztRQUVILElBQUEsVUFBRSxFQUFDLHVDQUF1QyxFQUFFLEdBQUcsRUFBRTtZQUMvQyxnQkFBTSxDQUFDLE1BQU0sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFBLDBCQUFrQixFQUFDLFNBQVMsQ0FBQyxFQUFFLHVCQUF1QixDQUFDLENBQUM7UUFDOUUsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FB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RUFBZ0UsRUFBRSxLQUFLLElBQUksRUFBRTtZQUM5RSxNQUFNLEtBQUssR0FBRyxNQUFNLGlCQUFpQixDQUFDLENBQUMsRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLEVBQUUsRUFBRSxhQUFhLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQztZQUMvRixNQUFNLGdCQUFNLENBQUMsT0FBTyxDQUNsQixHQUFHLEVBQUUsQ0FDSCxJQUFJLENBQUMsaUJBQWlCLENBQUM7Z0JBQ3JCLFVBQVUsRUFBRSxFQUFFLEtBQUssRUFBRTtnQkFDckIsUUFBUSxFQUFFO29CQUNSLFVBQVUsRUFBRTt3QkFDVixFQUFFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRTt3QkFDOUMsRUFBRSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUU7cUJBQy9DO2lCQUNGO2FBQ0YsQ0FBQyxFQUNKLGdCQUFnQixDQUNqQixDQUFDO1FBQ0osQ0FBQyxDQUFDLENBQUM7UUFFSCxJQUFBLFVBQUUsRUFBQyw4Q0FBOEMsRUFBRSxLQUFLLElBQUksRUFBRTtZQUM1RCxNQUFNLE1BQU0sR0FBRyxNQUFNLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxFQUFFLFVBQVUsRUFBRSxFQUFFLEVBQUUsUUFBUSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFDOUUsZ0JBQU0sQ0FBQyxXQUFXLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQ25DLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBhc3NlcnQgZnJvbSAnYXNzZXJ0JztcbmltcG9ydCB7IGRlc2NyaWJlLCBpdCwgYmVmb3JlIH0gZnJvbSAnbW9jaGEnO1xuaW1wb3J0IHsgZXRoZXJzIH0gZnJvbSAnZXRoZXJzJztcbmltcG9ydCB7IFRpcDIwVHJhbnNhY3Rpb25CdWlsZGVyIH0gZnJvbSAnLi4vLi4vc3JjL2xpYi90cmFuc2FjdGlvbkJ1aWxkZXInO1xuaW1wb3J0IHsgVGlwMjBUcmFuc2FjdGlvbiB9IGZyb20gJy4uLy4uL3NyYy9saWIvdHJhbnNhY3Rpb24nO1xuaW1wb3J0IHtcbiAgYW1vdW50VG9UaXAyMFVuaXRzLFxuICB0aXAyMFVuaXRzVG9BbW91bnQsXG4gIHN0cmluZ1RvQnl0ZXMzMixcbiAgZW5jb2RlVGlwMjBUcmFuc2ZlcldpdGhNZW1vLFxuICBpc1ZhbGlkVGlwMjBBbW91bnQsXG59IGZyb20gJy4uLy4uL3NyYy9saWIvdXRpbHMnO1xuaW1wb3J0IHsgVElQMjBfREVDSU1BTFMsIEFBX1RSQU5TQUNUSU9OX1RZUEUgfSBmcm9tICcuLi8uLi9zcmMvbGliL2NvbnN0YW50cyc7XG5pbXBvcnQgeyBjb2lucyB9IGZyb20gJ0BiaXRnby9zdGF0aWNzJztcbmltcG9ydCB7IFR0ZW1wbyB9IGZyb20gJy4uLy4uL3NyYy90dGVtcG8nO1xuaW1wb3J0IHsgQml0R29BUEkgfSBmcm9tICdAYml0Z28vc2RrLWFwaSc7XG5pbXBvcnQgeyBUZXN0Qml0R28sIFRlc3RCaXRHb0FQSSB9IGZyb20gJ0BiaXRnby9zZGstdGVzdCc7XG5pbXBvcnQgeyBCaXRHb0Jhc2UgfSBmcm9tICdAYml0Z28vc2RrLWNvcmUnO1xuaW1wb3J0IHtcbiAgVEVTVE5FVF9UT0tFTlMsXG4gIFRYX1BBUkFNUyxcbiAgRVJST1JfTUVTU0FHRVMsXG4gIFNJR05BVFVSRV9URVNUX0RBVEEsXG4gIFRFU1RfUkVDSVBJRU5UX0FERFJFU1MsXG59IGZyb20gJy4uL3Jlc291cmNlcy90ZW1wbyc7XG5cbmNvbnN0IG1vY2tDb2luQ29uZmlnID0gY29pbnMuZ2V0KCd0dGVtcG8nKTtcblxuZGVzY3JpYmUoJ1RJUC0yMCBVdGlsaXRpZXMnLCAoKSA9PiB7XG4gIGRlc2NyaWJlKCdhbW91bnRUb1RpcDIwVW5pdHMnLCAoKSA9PiB7XG4gICAgaXQoJ3Nob3VsZCBjb252ZXJ0IGRlY2ltYWwgYW1vdW50IHRvIDYtZGVjaW1hbCB1bml0cycsICgpID0+IHtcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChhbW91bnRUb1RpcDIwVW5pdHMoJzEuNScpLCAxNTAwMDAwbik7XG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwoYW1vdW50VG9UaXAyMFVuaXRzKCcxMDAnKSwgMTAwMDAwMDAwbik7XG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwoYW1vdW50VG9UaXAyMFVuaXRzKCcwLjAwMDAwMScpLCAxbik7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHRocm93IGVycm9yIGZvciBpbnZhbGlkIGFtb3VudCcsICgpID0+IHtcbiAgICAgIGFzc2VydC50aHJvd3MoKCkgPT4gYW1vdW50VG9UaXAyMFVuaXRzKCdpbnZhbGlkJyksIC9JbnZhbGlkIGFtb3VudCBmb3JtYXQvKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ3RpcDIwVW5pdHNUb0Ftb3VudCcsICgpID0+IHtcbiAgICBpdCgnc2hvdWxkIGNvbnZlcnQgNi1kZWNpbWFsIHVuaXRzIHRvIGh1bWFuLXJlYWRhYmxlIGFtb3VudCcsICgpID0+IHtcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbCh0aXAyMFVuaXRzVG9BbW91bnQoMTUwMDAwMG4pLCAnMS41Jyk7XG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwodGlwMjBVbml0c1RvQW1vdW50KDEwMDAwMDAwMG4pLCAnMTAwLjAnKTtcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbCh0aXAyMFVuaXRzVG9BbW91bnQoMW4pLCAnMC4wMDAwMDEnKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ3N0cmluZ1RvQnl0ZXMzMicsICgpID0+IHtcbiAgICBpdCgnc2hvdWxkIGNvbnZlcnQgc3RyaW5nIHRvIGJ5dGVzMzInLCAoKSA9PiB7XG4gICAgICBjb25zdCByZXN1bHQgPSBzdHJpbmdUb0J5dGVzMzIoJzEyMzQ1Jyk7XG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwocmVzdWx0Lmxlbmd0aCwgNjYpO1xuICAgICAgYXNzZXJ0Lm9rKHJlc3VsdC5zdGFydHNXaXRoKCcweCcpKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgdGhyb3cgZXJyb3IgZm9yIHN0cmluZyBsb25nZXIgdGhhbiAzMiBieXRlcycsICgpID0+IHtcbiAgICAgIGFzc2VydC50aHJvd3MoKCkgPT4gc3RyaW5nVG9CeXRlczMyKCdhJy5yZXBlYXQoMzMpKSwgL01lbW8gdG9vIGxvbmcvKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ2VuY29kZVRpcDIwVHJhbnNmZXJXaXRoTWVtbycsICgpID0+IHtcbiAgICBpdCgnc2hvdWxkIGVuY29kZSB0cmFuc2ZlcldpdGhNZW1vIGNhbGwnLCAoKSA9PiB7XG4gICAgICBjb25zdCB0byA9IGV0aGVycy51dGlscy5nZXRBZGRyZXNzKCcweDc0MmQzNWNjNjYzNGMwNTMyOTI1YTNiODQ0YmM5ZTc1OTVmMGJlYjEnKTtcbiAgICAgIGNvbnN0IGVuY29kZWQgPSBlbmNvZGVUaXAyMFRyYW5zZmVyV2l0aE1lbW8odG8sIDE1MDAwMDBuLCAnMTIzNDUnKTtcbiAgICAgIGFzc2VydC5vayhlbmNvZGVkLnN0YXJ0c1dpdGgoJzB4JykpO1xuICAgICAgYXNzZXJ0Lm9rKGVuY29kZWQubGVuZ3RoID4gMTApO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnaXNWYWxpZFRpcDIwQW1vdW50JywgKCkgPT4ge1xuICAgIGl0KCdzaG91bGQgdmFsaWRhdGUgYW1vdW50cyBjb3JyZWN0bHknLCAoKSA9PiB7XG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwoaXNWYWxpZFRpcDIwQW1vdW50KCcxLjUnKSwgdHJ1ZSk7XG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwoaXNWYWxpZFRpcDIwQW1vdW50KCdpbnZhbGlkJyksIGZhbHNlKTtcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChpc1ZhbGlkVGlwMjBBbW91bnQoJy01JyksIGZhbHNlKTtcbiAgICB9KTtcbiAgfSk7XG59KTtcblxuZGVzY3JpYmUoJ1RJUC0yMCBUcmFuc2FjdGlvbiBCdWlsZGVyJywgKCkgPT4ge1xuICBjb25zdCBtb2NrVG9rZW4gPSBldGhlcnMudXRpbHMuZ2V0QWRkcmVzcygnMHgxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwJyk7XG4gIGNvbnN0IG1vY2tSZWNpcGllbnQgPSBldGhlcnMudXRpbHMuZ2V0QWRkcmVzcygnMHg3NDJkMzVjYzY2MzRjMDUzMjkyNWEzYjg0NGJjOWU3NTk1ZjBiZWIxJyk7XG4gIGNvbnN0IG1vY2tGZWVUb2tlbiA9IGV0aGVycy51dGlscy5nZXRBZGRyZXNzKCcweGFiY2RlZmFiY2RlZmFiY2RlZmFiY2RlZmFiY2RlZmFiY2RlZmFiY2QnKTtcblxuICBkZXNjcmliZSgnYWRkT3BlcmF0aW9uJywgKCkgPT4ge1xuICAgIGl0KCdzaG91bGQgYWRkIG9wZXJhdGlvbiB3aXRoIGFuZCB3aXRob3V0IG1lbW8nLCAoKSA9PiB7XG4gICAgICBjb25zdCBidWlsZGVyID0gbmV3IFRpcDIwVHJhbnNhY3Rpb25CdWlsZGVyKG1vY2tDb2luQ29uZmlnKTtcbiAgICAgIGJ1aWxkZXIuYWRkT3BlcmF0aW9uKHsgdG9rZW46IG1vY2tUb2tlbiwgdG86IG1vY2tSZWNpcGllbnQsIGFtb3VudDogJzEwMCcgfSk7XG4gICAgICBidWlsZGVyLmFkZE9wZXJhdGlvbih7IHRva2VuOiBtb2NrVG9rZW4sIHRvOiBtb2NrUmVjaXBpZW50LCBhbW91bnQ6ICc1MCcsIG1lbW86ICcxJyB9KTtcblxuICAgICAgY29uc3Qgb3BlcmF0aW9ucyA9IGJ1aWxkZXIuZ2V0T3BlcmF0aW9ucygpO1xuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKG9wZXJhdGlvbnMubGVuZ3RoLCAyKTtcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChvcGVyYXRpb25zWzBdLm1lbW8sIHVuZGVmaW5lZCk7XG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwob3BlcmF0aW9uc1sxXS5tZW1vLCAnMScpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCB0aHJvdyBlcnJvciBmb3IgaW52YWxpZCBhZGRyZXNzZXMnLCAoKSA9PiB7XG4gICAgICBjb25zdCBidWlsZGVyID0gbmV3IFRpcDIwVHJhbnNhY3Rpb25CdWlsZGVyKG1vY2tDb2luQ29uZmlnKTtcbiAgICAgIGFzc2VydC50aHJvd3MoXG4gICAgICAgICgpID0+IGJ1aWxkZXIuYWRkT3BlcmF0aW9uKHsgdG9rZW46ICcweGludmFsaWQnIGFzIGFueSwgdG86IG1vY2tSZWNpcGllbnQsIGFtb3VudDogJzEwMCcgfSksXG4gICAgICAgIC9JbnZhbGlkIHRva2VuIGFkZHJlc3MvXG4gICAgICApO1xuICAgICAgYXNzZXJ0LnRocm93cyhcbiAgICAgICAgKCkgPT4gYnVpbGRlci5hZGRPcGVyYXRpb24oeyB0b2tlbjogbW9ja1Rva2VuLCB0bzogJzB4aW52YWxpZCcgYXMgYW55LCBhbW91bnQ6ICcxMDAnIH0pLFxuICAgICAgICAvSW52YWxpZCByZWNpcGllbnQgYWRkcmVzcy9cbiAgICAgICk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHRocm93IGVycm9yIGZvciBpbnZhbGlkIGFtb3VudCcsICgpID0+IHtcbiAgICAgIGNvbnN0IGJ1aWxkZXIgPSBuZXcgVGlwMjBUcmFuc2FjdGlvbkJ1aWxkZXIobW9ja0NvaW5Db25maWcpO1xuICAgICAgYXNzZXJ0LnRocm93cyhcbiAgICAgICAgKCkgPT4gYnVpbGRlci5hZGRPcGVyYXRpb24oeyB0b2tlbjogbW9ja1Rva2VuLCB0bzogbW9ja1JlY2lwaWVudCwgYW1vdW50OiAnaW52YWxpZC1hbW91bnQnIH0pLFxuICAgICAgICAvSW52YWxpZCBhbW91bnQvXG4gICAgICApO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCB0aHJvdyBlcnJvciBmb3IgaW52YWxpZCAobm9uLW51bWVyaWMpIG1lbW8nLCAoKSA9PiB7XG4gICAgICBjb25zdCBidWlsZGVyID0gbmV3IFRpcDIwVHJhbnNhY3Rpb25CdWlsZGVyKG1vY2tDb2luQ29uZmlnKTtcbiAgICAgIGFzc2VydC50aHJvd3MoXG4gICAgICAgICgpID0+IGJ1aWxkZXIuYWRkT3BlcmF0aW9uKHsgdG9rZW46IG1vY2tUb2tlbiwgdG86IG1vY2tSZWNpcGllbnQsIGFtb3VudDogJzEwMCcsIG1lbW86ICdJTlYtMDAxJyB9KSxcbiAgICAgICAgL0ludmFsaWQgbWVtby9cbiAgICAgICk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdmZWVUb2tlbicsICgpID0+IHtcbiAgICBpdCgnc2hvdWxkIHNldCBhbmQgZ2V0IGZlZSB0b2tlbicsICgpID0+IHtcbiAgICAgIGNvbnN0IGJ1aWxkZXIgPSBuZXcgVGlwMjBUcmFuc2FjdGlvbkJ1aWxkZXIobW9ja0NvaW5Db25maWcpO1xuICAgICAgYnVpbGRlci5mZWVUb2tlbihtb2NrRmVlVG9rZW4pO1xuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKGJ1aWxkZXIuZ2V0RmVlVG9rZW4oKSwgbW9ja0ZlZVRva2VuKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgdGhyb3cgZXJyb3IgZm9yIGludmFsaWQgZmVlIHRva2VuIGFkZHJlc3MnLCAoKSA9PiB7XG4gICAgICBjb25zdCBidWlsZGVyID0gbmV3IFRpcDIwVHJhbnNhY3Rpb25CdWlsZGVyKG1vY2tDb2luQ29uZmlnKTtcbiAgICAgIGFzc2VydC50aHJvd3MoKCkgPT4gYnVpbGRlci5mZWVUb2tlbignaW52YWxpZC1hZGRyZXNzJyksIC9JbnZhbGlkIGZlZSB0b2tlbiBhZGRyZXNzLyk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdUcmFuc2FjdGlvbiBwYXJhbWV0ZXJzJywgKCkgPT4ge1xuICAgIGl0KCdzaG91bGQgc2V0IG5vbmNlLCBnYXMsIG1heEZlZVBlckdhcywgYW5kIG1heFByaW9yaXR5RmVlUGVyR2FzJywgKCkgPT4ge1xuICAgICAgY29uc3QgYnVpbGRlciA9IG5ldyBUaXAyMFRyYW5zYWN0aW9uQnVpbGRlcihtb2NrQ29pbkNvbmZpZyk7XG4gICAgICBidWlsZGVyLm5vbmNlKDQyKS5nYXMoNTAwMDAwbikubWF4RmVlUGVyR2FzKDEwMDAwMDAwMDBuKS5tYXhQcmlvcml0eUZlZVBlckdhcyg1MDAwMDAwMDBuKTtcblxuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKChidWlsZGVyIGFzIGFueSkuX25vbmNlLCA0Mik7XG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwoKGJ1aWxkZXIgYXMgYW55KS5fZ2FzLCA1MDAwMDBuKTtcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbCgoYnVpbGRlciBhcyBhbnkpLl9tYXhGZWVQZXJHYXMsIDEwMDAwMDAwMDBuKTtcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbCgoYnVpbGRlciBhcyBhbnkpLl9tYXhQcmlvcml0eUZlZVBlckdhcywgNTAwMDAwMDAwbik7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHRocm93IGVycm9yIGZvciBpbnZhbGlkIG5vbmNlIGFuZCBnYXMnLCAoKSA9PiB7XG4gICAgICBjb25zdCBidWlsZGVyID0gbmV3IFRpcDIwVHJhbnNhY3Rpb25CdWlsZGVyKG1vY2tDb2luQ29uZmlnKTtcbiAgICAgIGFzc2VydC50aHJvd3MoKCkgPT4gYnVpbGRlci5ub25jZSgtMSksIC9JbnZhbGlkIG5vbmNlLyk7XG4gICAgICBhc3NlcnQudGhyb3dzKCgpID0+IGJ1aWxkZXIuZ2FzKDBuKSwgL0ludmFsaWQgZ2FzIGxpbWl0Lyk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdNZXRob2QgY2hhaW5pbmcnLCAoKSA9PiB7XG4gICAgaXQoJ3Nob3VsZCBzdXBwb3J0IGZsdWVudCBpbnRlcmZhY2UnLCAoKSA9PiB7XG4gICAgICBjb25zdCBidWlsZGVyID0gbmV3IFRpcDIwVHJhbnNhY3Rpb25CdWlsZGVyKG1vY2tDb2luQ29uZmlnKTtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGJ1aWxkZXJcbiAgICAgICAgLmFkZE9wZXJhdGlvbih7IHRva2VuOiBtb2NrVG9rZW4sIHRvOiBtb2NrUmVjaXBpZW50LCBhbW91bnQ6ICcxMDAnLCBtZW1vOiAnNScgfSlcbiAgICAgICAgLmZlZVRva2VuKG1vY2tGZWVUb2tlbilcbiAgICAgICAgLm5vbmNlKDEwKVxuICAgICAgICAuZ2FzKDQwMDAwMG4pXG4gICAgICAgIC5tYXhGZWVQZXJHYXMoMjAwMDAwMDAwMG4pXG4gICAgICAgIC5tYXhQcmlvcml0eUZlZVBlckdhcygxMDAwMDAwMDAwbik7XG5cbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChyZXN1bHQsIGJ1aWxkZXIpO1xuICAgIH0pO1xuICB9KTtcbn0pO1xuXG5kZXNjcmliZSgnVElQLTIwIENvbnN0YW50cycsICgpID0+IHtcbiAgaXQoJ3Nob3VsZCBoYXZlIGNvcnJlY3QgZGVjaW1hbCBwbGFjZXMnLCAoKSA9PiB7XG4gICAgYXNzZXJ0LnN0cmljdEVxdWFsKFRJUDIwX0RFQ0lNQUxTLCA2KTtcbiAgfSk7XG59KTtcblxuZGVzY3JpYmUoJ1RJUC0yMCBUcmFuc2FjdGlvbiBCdWlsZCcsICgpID0+IHtcbiAgY29uc3QgbW9ja1Rva2VuID0gZXRoZXJzLnV0aWxzLmdldEFkZHJlc3MoVEVTVE5FVF9UT0tFTlMuYWxwaGFVU0QuYWRkcmVzcyk7XG4gIGNvbnN0IG1vY2tSZWNpcGllbnQgPSBldGhlcnMudXRpbHMuZ2V0QWRkcmVzcyhURVNUX1JFQ0lQSUVOVF9BRERSRVNTKTtcbiAgY29uc3QgbW9ja0ZlZVRva2VuID0gZXRoZXJzLnV0aWxzLmdldEFkZHJlc3MoVEVTVE5FVF9UT0tFTlMuYmV0YVVTRC5hZGRyZXNzKTtcblxuICBkZXNjcmliZSgnQnVpbGQgVHJhbnNhY3Rpb24nLCAoKSA9PiB7XG4gICAgaXQoJ3Nob3VsZCBidWlsZCBzaW5nbGUtb3BlcmF0aW9uIHRyYW5zYWN0aW9uJywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgYnVpbGRlciA9IG5ldyBUaXAyMFRyYW5zYWN0aW9uQnVpbGRlcihtb2NrQ29pbkNvbmZpZyk7XG4gICAgICBidWlsZGVyXG4gICAgICAgIC5hZGRPcGVyYXRpb24oeyB0b2tlbjogbW9ja1Rva2VuLCB0bzogbW9ja1JlY2lwaWVudCwgYW1vdW50OiAnMTAwJywgbWVtbzogJzEnIH0pXG4gICAgICAgIC5mZWVUb2tlbihtb2NrRmVlVG9rZW4pXG4gICAgICAgIC5ub25jZSgwKVxuICAgICAgICAuZ2FzKDEwMDAwMG4pXG4gICAgICAgIC5tYXhGZWVQZXJHYXMoVFhfUEFSQU1TLmRlZmF1bHRNYXhGZWVQZXJHYXMpXG4gICAgICAgIC5tYXhQcmlvcml0eUZlZVBlckdhcyhUWF9QQVJBTVMuZGVmYXVsdE1heFByaW9yaXR5RmVlUGVyR2FzKTtcblxuICAgICAgY29uc3QgdHggPSAoYXdhaXQgYnVpbGRlci5idWlsZCgpKSBhcyBUaXAyMFRyYW5zYWN0aW9uO1xuXG4gICAgICBhc3NlcnQub2sodHggaW5zdGFuY2VvZiBUaXAyMFRyYW5zYWN0aW9uKTtcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbCh0eC5nZXRPcGVyYXRpb25Db3VudCgpLCAxKTtcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbCh0eC5nZXRGZWVUb2tlbigpLCBtb2NrRmVlVG9rZW4pO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBidWlsZCBiYXRjaCB0cmFuc2FjdGlvbiB3aXRoIG11bHRpcGxlIG9wZXJhdGlvbnMnLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCBidWlsZGVyID0gbmV3IFRpcDIwVHJhbnNhY3Rpb25CdWlsZGVyKG1vY2tDb2luQ29uZmlnKTtcbiAgICAgIGJ1aWxkZXJcbiAgICAgICAgLmFkZE9wZXJhdGlvbih7IHRva2VuOiBURVNUTkVUX1RPS0VOUy5hbHBoYVVTRC5hZGRyZXNzLCB0bzogbW9ja1JlY2lwaWVudCwgYW1vdW50OiAnMTAnLCBtZW1vOiAnMScgfSlcbiAgICAgICAgLmFkZE9wZXJhdGlvbih7IHRva2VuOiBURVNUTkVUX1RPS0VOUy5iZXRhVVNELmFkZHJlc3MsIHRvOiBtb2NrUmVjaXBpZW50LCBhbW91bnQ6ICcyMCcsIG1lbW86ICcyJyB9KVxuICAgICAgICAuYWRkT3BlcmF0aW9uKHsgdG9rZW46IFRFU1RORVRfVE9LRU5TLnRoZXRhVVNELmFkZHJlc3MsIHRvOiBtb2NrUmVjaXBpZW50LCBhbW91bnQ6ICczMCcsIG1lbW86ICczJyB9KVxuICAgICAgICAuZmVlVG9rZW4obW9ja0ZlZVRva2VuKVxuICAgICAgICAubm9uY2UoNDIpXG4gICAgICAgIC5nYXMoMzAwMDAwbilcbiAgICAgICAgLm1heEZlZVBlckdhcyhUWF9QQVJBTVMuZGVmYXVsdE1heEZlZVBlckdhcylcbiAgICAgICAgLm1heFByaW9yaXR5RmVlUGVyR2FzKFRYX1BBUkFNUy5kZWZhdWx0TWF4UHJpb3JpdHlGZWVQZXJHYXMpO1xuXG4gICAgICBjb25zdCB0eCA9IChhd2FpdCBidWlsZGVyLmJ1aWxkKCkpIGFzIFRpcDIwVHJhbnNhY3Rpb247XG5cbiAgICAgIGFzc2VydC5vayh0eCBpbnN0YW5jZW9mIFRpcDIwVHJhbnNhY3Rpb24pO1xuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHR4LmdldE9wZXJhdGlvbkNvdW50KCksIDMpO1xuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHR4LmlzQmF0Y2goKSwgdHJ1ZSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGJ1aWxkIHRyYW5zYWN0aW9uIHdpdGhvdXQgZmVlIHRva2VuJywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgYnVpbGRlciA9IG5ldyBUaXAyMFRyYW5zYWN0aW9uQnVpbGRlcihtb2NrQ29pbkNvbmZpZyk7XG4gICAgICBidWlsZGVyXG4gICAgICAgIC5hZGRPcGVyYXRpb24oeyB0b2tlbjogbW9ja1Rva2VuLCB0bzogbW9ja1JlY2lwaWVudCwgYW1vdW50OiAnNTAnIH0pXG4gICAgICAgIC5ub25jZSgxKVxuICAgICAgICAuZ2FzKDEwMDAwMG4pXG4gICAgICAgIC5tYXhGZWVQZXJHYXMoVFhfUEFSQU1TLmRlZmF1bHRNYXhGZWVQZXJHYXMpXG4gICAgICAgIC5tYXhQcmlvcml0eUZlZVBlckdhcyhUWF9QQVJBTVMuZGVmYXVsdE1heFByaW9yaXR5RmVlUGVyR2FzKTtcblxuICAgICAgY29uc3QgdHggPSAoYXdhaXQgYnVpbGRlci5idWlsZCgpKSBhcyBUaXAyMFRyYW5zYWN0aW9uO1xuXG4gICAgICBhc3NlcnQub2sodHggaW5zdGFuY2VvZiBUaXAyMFRyYW5zYWN0aW9uKTtcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbCh0eC5nZXRGZWVUb2tlbigpLCB1bmRlZmluZWQpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnQnVpbGQgVmFsaWRhdGlvbiBFcnJvcnMnLCAoKSA9PiB7XG4gICAgaXQoJ3Nob3VsZCB0aHJvdyBlcnJvciB3aGVuIG5vIG9wZXJhdGlvbnMgYWRkZWQnLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCBidWlsZGVyID0gbmV3IFRpcDIwVHJhbnNhY3Rpb25CdWlsZGVyKG1vY2tDb2luQ29uZmlnKTtcbiAgICAgIGJ1aWxkZXIubm9uY2UoMCkuZ2FzKDEwMDAwMG4pLm1heEZlZVBlckdhcygxMDAwMDAwMDAwbikubWF4UHJpb3JpdHlGZWVQZXJHYXMoNTAwMDAwMDAwbik7XG4gICAgICBhd2FpdCBhc3NlcnQucmVqZWN0cyhhc3luYyAoKSA9PiBhd2FpdCBidWlsZGVyLmJ1aWxkKCksIEVSUk9SX01FU1NBR0VTLm5vT3BlcmF0aW9ucyk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHRocm93IGVycm9yIHdoZW4gbm9uY2Ugbm90IHNldCcsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IGJ1aWxkZXIgPSBuZXcgVGlwMjBUcmFuc2FjdGlvbkJ1aWxkZXIobW9ja0NvaW5Db25maWcpO1xuICAgICAgYnVpbGRlclxuICAgICAgICAuYWRkT3BlcmF0aW9uKHsgdG9rZW46IG1vY2tUb2tlbiwgdG86IG1vY2tSZWNpcGllbnQsIGFtb3VudDogJzEwMCcgfSlcbiAgICAgICAgLmdhcygxMDAwMDBuKVxuICAgICAgICAubWF4RmVlUGVyR2FzKDEwMDAwMDAwMDBuKVxuICAgICAgICAubWF4UHJpb3JpdHlGZWVQZXJHYXMoNTAwMDAwMDAwbik7XG4gICAgICBhd2FpdCBhc3NlcnQucmVqZWN0cyhhc3luYyAoKSA9PiBhd2FpdCBidWlsZGVyLmJ1aWxkKCksIEVSUk9SX01FU1NBR0VTLm1pc3NpbmdOb25jZSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHRocm93IGVycm9yIHdoZW4gZ2FzIG5vdCBzZXQnLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCBidWlsZGVyID0gbmV3IFRpcDIwVHJhbnNhY3Rpb25CdWlsZGVyKG1vY2tDb2luQ29uZmlnKTtcbiAgICAgIGJ1aWxkZXJcbiAgICAgICAgLmFkZE9wZXJhdGlvbih7IHRva2VuOiBtb2NrVG9rZW4sIHRvOiBtb2NrUmVjaXBpZW50LCBhbW91bnQ6ICcxMDAnIH0pXG4gICAgICAgIC5ub25jZSgwKVxuICAgICAgICAubWF4RmVlUGVyR2FzKDEwMDAwMDAwMDBuKVxuICAgICAgICAubWF4UHJpb3JpdHlGZWVQZXJHYXMoNTAwMDAwMDAwbik7XG4gICAgICBhd2FpdCBhc3NlcnQucmVqZWN0cyhhc3luYyAoKSA9PiBhd2FpdCBidWlsZGVyLmJ1aWxkKCksIEVSUk9SX01FU1NBR0VTLm1pc3NpbmdHYXMpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCB0aHJvdyBlcnJvciB3aGVuIG1heEZlZVBlckdhcyBub3Qgc2V0JywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgYnVpbGRlciA9IG5ldyBUaXAyMFRyYW5zYWN0aW9uQnVpbGRlcihtb2NrQ29pbkNvbmZpZyk7XG4gICAgICBidWlsZGVyXG4gICAgICAgIC5hZGRPcGVyYXRpb24oeyB0b2tlbjogbW9ja1Rva2VuLCB0bzogbW9ja1JlY2lwaWVudCwgYW1vdW50OiAnMTAwJyB9KVxuICAgICAgICAubm9uY2UoMClcbiAgICAgICAgLmdhcygxMDAwMDBuKVxuICAgICAgICAubWF4UHJpb3JpdHlGZWVQZXJHYXMoNTAwMDAwMDAwbik7XG4gICAgICBhd2FpdCBhc3NlcnQucmVqZWN0cyhhc3luYyAoKSA9PiBhd2FpdCBidWlsZGVyLmJ1aWxkKCksIEVSUk9SX01FU1NBR0VTLm1pc3NpbmdNYXhGZWVQZXJHYXMpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCB0aHJvdyBlcnJvciB3aGVuIG1heFByaW9yaXR5RmVlUGVyR2FzIG5vdCBzZXQnLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCBidWlsZGVyID0gbmV3IFRpcDIwVHJhbnNhY3Rpb25CdWlsZGVyKG1vY2tDb2luQ29uZmlnKTtcbiAgICAgIGJ1aWxkZXJcbiAgICAgICAgLmFkZE9wZXJhdGlvbih7IHRva2VuOiBtb2NrVG9rZW4sIHRvOiBtb2NrUmVjaXBpZW50LCBhbW91bnQ6ICcxMDAnIH0pXG4gICAgICAgIC5ub25jZSgwKVxuICAgICAgICAuZ2FzKDEwMDAwMG4pXG4gICAgICAgIC5tYXhGZWVQZXJHYXMoMTAwMDAwMDAwMG4pO1xuICAgICAgYXdhaXQgYXNzZXJ0LnJlamVjdHMoYXN5bmMgKCkgPT4gYXdhaXQgYnVpbGRlci5idWlsZCgpLCBFUlJPUl9NRVNTQUdFUy5taXNzaW5nTWF4UHJpb3JpdHlGZWVQZXJHYXMpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnUm91bmQtVHJpcDogQnVpbGQgLT4gU2VyaWFsaXplIC0+IE9wZXJhdGlvbnMgQ2hlY2snLCAoKSA9PiB7XG4gICAgaXQoJ3Nob3VsZCBwcmVzZXJ2ZSBvcGVyYXRpb24gZGF0YSB0aHJvdWdoIGJ1aWxkJywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3Qgb3BlcmF0aW9ucyA9IFt7IHRva2VuOiBtb2NrVG9rZW4sIHRvOiBtb2NrUmVjaXBpZW50LCBhbW91bnQ6ICcxMjMnLCBtZW1vOiAnMScgfV07XG5cbiAgICAgIGNvbnN0IGJ1aWxkZXIgPSBuZXcgVGlwMjBUcmFuc2FjdGlvbkJ1aWxkZXIobW9ja0NvaW5Db25maWcpO1xuICAgICAgYnVpbGRlclxuICAgICAgICAuYWRkT3BlcmF0aW9uKG9wZXJhdGlvbnNbMF0pXG4gICAgICAgIC5mZWVUb2tlbihtb2NrRmVlVG9rZW4pXG4gICAgICAgIC5ub25jZSgxMClcbiAgICAgICAgLmdhcygxNTAwMDBuKVxuICAgICAgICAubWF4RmVlUGVyR2FzKDIwMDAwMDAwMDBuKVxuICAgICAgICAubWF4UHJpb3JpdHlGZWVQZXJHYXMoMTAwMDAwMDAwMG4pO1xuXG4gICAgICBjb25zdCB0eCA9IChhd2FpdCBidWlsZGVyLmJ1aWxkKCkpIGFzIFRpcDIwVHJhbnNhY3Rpb247XG4gICAgICBjb25zdCB0eE9wcyA9IHR4LmdldE9wZXJhdGlvbnMoKTtcblxuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHR4T3BzLmxlbmd0aCwgMSk7XG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwodHhPcHNbMF0udG9rZW4sIG9wZXJhdGlvbnNbMF0udG9rZW4pO1xuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHR4T3BzWzBdLnRvLCBvcGVyYXRpb25zWzBdLnRvKTtcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbCh0eE9wc1swXS5hbW91bnQsIG9wZXJhdGlvbnNbMF0uYW1vdW50KTtcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbCh0eE9wc1swXS5tZW1vLCBvcGVyYXRpb25zWzBdLm1lbW8pO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnQnVpbGQgLT4gU2VyaWFsaXplIC0+IFNpZ24gRmxvdycsICgpID0+IHtcbiAgICBpdCgnc2hvdWxkIHByb2R1Y2Ugc2VyaWFsaXphYmxlIHVuc2lnbmVkIHRyYW5zYWN0aW9uJywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgYnVpbGRlciA9IG5ldyBUaXAyMFRyYW5zYWN0aW9uQnVpbGRlcihtb2NrQ29pbkNvbmZpZyk7XG4gICAgICBidWlsZGVyXG4gICAgICAgIC5hZGRPcGVyYXRpb24oeyB0b2tlbjogbW9ja1Rva2VuLCB0bzogbW9ja1JlY2lwaWVudCwgYW1vdW50OiAnNTAnLCBtZW1vOiAnMicgfSlcbiAgICAgICAgLmZlZVRva2VuKG1vY2tGZWVUb2tlbilcbiAgICAgICAgLm5vbmNlKDUpXG4gICAgICAgIC5nYXMoMTAwMDAwbilcbiAgICAgICAgLm1heEZlZVBlckdhcygyMDAwMDAwMDAwbilcbiAgICAgICAgLm1heFByaW9yaXR5RmVlUGVyR2FzKDEwMDAwMDAwMDBuKTtcblxuICAgICAgY29uc3QgdHggPSAoYXdhaXQgYnVpbGRlci5idWlsZCgpKSBhcyBUaXAyMFRyYW5zYWN0aW9uO1xuICAgICAgY29uc3QgdW5zaWduZWRIZXggPSBhd2FpdCB0eC5zZXJpYWxpemUoKTtcblxuICAgICAgYXNzZXJ0Lm9rKHVuc2lnbmVkSGV4LnN0YXJ0c1dpdGgoQUFfVFJBTlNBQ1RJT05fVFlQRSkpO1xuICAgICAgYXNzZXJ0Lm9rKC9eMHhbMC05YS1mXSskL2kudGVzdCh1bnNpZ25lZEhleCkpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBzdXBwb3J0IGZ1bGwgc2lnbiBhbmQgYnJvYWRjYXN0IGZsb3cnLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCBidWlsZGVyID0gbmV3IFRpcDIwVHJhbnNhY3Rpb25CdWlsZGVyKG1vY2tDb2luQ29uZmlnKTtcbiAgICAgIGJ1aWxkZXJcbiAgICAgICAgLmFkZE9wZXJhdGlvbih7IHRva2VuOiBtb2NrVG9rZW4sIHRvOiBtb2NrUmVjaXBpZW50LCBhbW91bnQ6ICc3NScsIG1lbW86ICczJyB9KVxuICAgICAgICAuZmVlVG9rZW4obW9ja0ZlZVRva2VuKVxuICAgICAgICAubm9uY2UoMTIzKVxuICAgICAgICAuZ2FzKDEyMDAwMG4pXG4gICAgICAgIC5tYXhGZWVQZXJHYXMoMjUwMDAwMDAwMG4pXG4gICAgICAgIC5tYXhQcmlvcml0eUZlZVBlckdhcygxMjAwMDAwMDAwbik7XG5cbiAgICAgIGNvbnN0IHR4ID0gKGF3YWl0IGJ1aWxkZXIuYnVpbGQoKSkgYXMgVGlwMjBUcmFuc2FjdGlvbjtcbiAgICAgIGNvbnN0IHVuc2lnbmVkSGV4ID0gYXdhaXQgdHguc2VyaWFsaXplKCk7XG5cbiAgICAgIHR4LnNldFNpZ25hdHVyZShTSUdOQVRVUkVfVEVTVF9EQVRBLnZhbGlkU2lnbmF0dXJlKTtcblxuICAgICAgY29uc3QgYnJvYWRjYXN0SGV4ID0gYXdhaXQgdHgudG9Ccm9hZGNhc3RGb3JtYXQoKTtcbiAgICAgIGFzc2VydC5vayhicm9hZGNhc3RIZXguc3RhcnRzV2l0aChBQV9UUkFOU0FDVElPTl9UWVBFKSk7XG4gICAgICBhc3NlcnQub2soYnJvYWRjYXN0SGV4Lmxlbmd0aCA+IHVuc2lnbmVkSGV4Lmxlbmd0aCwgJ1NpZ25lZCBzaG91bGQgYmUgbG9uZ2VyJyk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdUcmFuc2FjdGlvbiBKU09OIFJlcHJlc2VudGF0aW9uJywgKCkgPT4ge1xuICAgIGl0KCdzaG91bGQgcHJvZHVjZSBjb25zaXN0ZW50IEpTT04gZnJvbSBidWlsdCB0cmFuc2FjdGlvbicsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IGJ1aWxkZXIgPSBuZXcgVGlwMjBUcmFuc2FjdGlvbkJ1aWxkZXIobW9ja0NvaW5Db25maWcpO1xuICAgICAgYnVpbGRlclxuICAgICAgICAuYWRkT3BlcmF0aW9uKHsgdG9rZW46IG1vY2tUb2tlbiwgdG86IG1vY2tSZWNpcGllbnQsIGFtb3VudDogJzEwMCcsIG1lbW86ICc0JyB9KVxuICAgICAgICAuZmVlVG9rZW4obW9ja0ZlZVRva2VuKVxuICAgICAgICAubm9uY2UoNTApXG4gICAgICAgIC5nYXMoMjAwMDAwbilcbiAgICAgICAgLm1heEZlZVBlckdhcygzMDAwMDAwMDAwbilcbiAgICAgICAgLm1heFByaW9yaXR5RmVlUGVyR2FzKDE1MDAwMDAwMDBuKTtcblxuICAgICAgY29uc3QgdHggPSAoYXdhaXQgYnVpbGRlci5idWlsZCgpKSBhcyBUaXAyMFRyYW5zYWN0aW9uO1xuICAgICAgY29uc3QganNvbiA9IHR4LnRvSnNvbigpO1xuXG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwoanNvbi50eXBlLCBBQV9UUkFOU0FDVElPTl9UWVBFKTtcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChqc29uLm5vbmNlLCA1MCk7XG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwoanNvbi5nYXMsICcyMDAwMDAnKTtcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChqc29uLm1heEZlZVBlckdhcywgJzMwMDAwMDAwMDAnKTtcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChqc29uLm1heFByaW9yaXR5RmVlUGVyR2FzLCAnMTUwMDAwMDAwMCcpO1xuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKGpzb24uY2FsbENvdW50LCAxKTtcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChqc29uLmZlZVRva2VuLCBtb2NrRmVlVG9rZW4pO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnVHJhbnNhY3Rpb24gaWQgZ2V0dGVyJywgKCkgPT4ge1xuICAgIGl0KCd1bnNpZ25lZCBhbmQgc2lnbmVkIHRyYW5zYWN0aW9ucyBzaG91bGQgaGF2ZSBkaWZmZXJlbnQgaWRzJywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgYnVpbGRlciA9IG5ldyBUaXAyMFRyYW5zYWN0aW9uQnVpbGRlcihtb2NrQ29pbkNvbmZpZyk7XG4gICAgICBidWlsZGVyXG4gICAgICAgIC5hZGRPcGVyYXRpb24oeyB0b2tlbjogbW9ja1Rva2VuLCB0bzogbW9ja1JlY2lwaWVudCwgYW1vdW50OiAnMTAnIH0pXG4gICAgICAgIC5ub25jZSgxKVxuICAgICAgICAuZ2FzKDEwMDAwMG4pXG4gICAgICAgIC5tYXhGZWVQZXJHYXMoVFhfUEFSQU1TLmRlZmF1bHRNYXhGZWVQZXJHYXMpXG4gICAgICAgIC5tYXhQcmlvcml0eUZlZVBlckdhcyhUWF9QQVJBTVMuZGVmYXVsdE1heFByaW9yaXR5RmVlUGVyR2FzKTtcblxuICAgICAgY29uc3QgdHggPSAoYXdhaXQgYnVpbGRlci5idWlsZCgpKSBhcyBUaXAyMFRyYW5zYWN0aW9uO1xuICAgICAgY29uc3QgdW5zaWduZWRJZCA9IHR4LmlkO1xuXG4gICAgICB0eC5zZXRTaWduYXR1cmUoU0lHTkFUVVJFX1RFU1RfREFUQS52YWxpZFNpZ25hdHVyZSk7XG4gICAgICBjb25zdCBzaWduZWRJZCA9IHR4LmlkO1xuXG4gICAgICBhc3NlcnQubm90U3RyaWN0RXF1YWwodW5zaWduZWRJZCwgc2lnbmVkSWQsICdTaWduZWQgYW5kIHVuc2lnbmVkIHR4IHNob3VsZCBoYXZlIGRpZmZlcmVudCBpZHMnKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ291dHB1dHMgLyBpbnB1dHMgcG9wdWxhdGlvbicsICgpID0+IHtcbiAgICBpdCgnc2hvdWxkIGV4cG9zZSBvdXRwdXRzIHdpdGggYmFzZS11bml0IHZhbHVlIGFuZCB0b2tlbiBhZGRyZXNzIGFzIGNvaW4nLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCBidWlsZGVyID0gbmV3IFRpcDIwVHJhbnNhY3Rpb25CdWlsZGVyKG1vY2tDb2luQ29uZmlnKTtcbiAgICAgIGJ1aWxkZXJcbiAgICAgICAgLmFkZE9wZXJhdGlvbih7IHRva2VuOiBtb2NrVG9rZW4sIHRvOiBtb2NrUmVjaXBpZW50LCBhbW91bnQ6ICcxLjUnLCBtZW1vOiAnNycgfSlcbiAgICAgICAgLm5vbmNlKDApXG4gICAgICAgIC5nYXMoMTAwMDAwbilcbiAgICAgICAgLm1heEZlZVBlckdhcyhUWF9QQVJBTVMuZGVmYXVsdE1heEZlZVBlckdhcylcbiAgICAgICAgLm1heFByaW9yaXR5RmVlUGVyR2FzKFRYX1BBUkFNUy5kZWZhdWx0TWF4UHJpb3JpdHlGZWVQZXJHYXMpO1xuXG4gICAgICBjb25zdCB0eCA9IChhd2FpdCBidWlsZGVyLmJ1aWxkKCkpIGFzIFRpcDIwVHJhbnNhY3Rpb247XG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwodHgub3V0cHV0cy5sZW5ndGgsIDEpO1xuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHR4Lm91dHB1dHNbMF0uYWRkcmVzcywgbW9ja1JlY2lwaWVudCk7XG4gICAgICAvLyAxLjUgdG9rZW5zICogMTBeNiA9IDFfNTAwXzAwMCBiYXNlIHVuaXRzXG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwodHgub3V0cHV0c1swXS52YWx1ZSwgJzE1MDAwMDAnKTtcbiAgICAgIC8vIGNvaW4gaXMgdGhlIHRva2VuIGNvbnRyYWN0IGFkZHJlc3MsIG5vdCB0aGUgY2hhaW4gbmFtZVxuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHR4Lm91dHB1dHNbMF0uY29pbj8udG9Mb3dlckNhc2UoKSwgbW9ja1Rva2VuLnRvTG93ZXJDYXNlKCkpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBleHBvc2UgYSBzaW5nbGUgaW5wdXQgd2l0aCB0aGUgdG90YWwgaW4gYmFzZSB1bml0cycsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IGJ1aWxkZXIgPSBuZXcgVGlwMjBUcmFuc2FjdGlvbkJ1aWxkZXIobW9ja0NvaW5Db25maWcpO1xuICAgICAgYnVpbGRlclxuICAgICAgICAuYWRkT3BlcmF0aW9uKHsgdG9rZW46IG1vY2tUb2tlbiwgdG86IG1vY2tSZWNpcGllbnQsIGFtb3VudDogJzEuNScgfSlcbiAgICAgICAgLmFkZE9wZXJhdGlvbih7IHRva2VuOiBtb2NrVG9rZW4sIHRvOiBtb2NrUmVjaXBpZW50LCBhbW91bnQ6ICczLjUnIH0pXG4gICAgICAgIC5ub25jZSgwKVxuICAgICAgICAuZ2FzKDEwMDAwMG4pXG4gICAgICAgIC5tYXhGZWVQZXJHYXMoVFhfUEFSQU1TLmRlZmF1bHRNYXhGZWVQZXJHYXMpXG4gICAgICAgIC5tYXhQcmlvcml0eUZlZVBlckdhcyhUWF9QQVJBTVMuZGVmYXVsdE1heFByaW9yaXR5RmVlUGVyR2FzKTtcblxuICAgICAgY29uc3QgdHggPSAoYXdhaXQgYnVpbGRlci5idWlsZCgpKSBhcyBUaXAyMFRyYW5zYWN0aW9uO1xuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHR4LmlucHV0cy5sZW5ndGgsIDEpO1xuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHR4LmlucHV0c1swXS5hZGRyZXNzLCAnJyk7XG4gICAgICAvLyAoMS41ICsgMy41KSB0b2tlbnMgKiAxMF42ID0gNV8wMDBfMDAwIGJhc2UgdW5pdHNcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbCh0eC5pbnB1dHNbMF0udmFsdWUsICc1MDAwMDAwJyk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdSb3VuZC1UcmlwOiBCdWlsZCAtPiBTZXJpYWxpemUgLT4gRnJvbSAoZGVzZXJpYWxpemF0aW9uKScsICgpID0+IHtcbiAgICBpdCgnc2hvdWxkIHJvdW5kLXRyaXAgYSBzaW5nbGUtb3BlcmF0aW9uIHRyYW5zYWN0aW9uIHdpdGhvdXQgYSBzaWduYXR1cmUnLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCBvcGVyYXRpb24gPSB7IHRva2VuOiBtb2NrVG9rZW4sIHRvOiBtb2NrUmVjaXBpZW50LCBhbW91bnQ6ICcyNS41JywgbWVtbzogJzEyMzQ1JyB9O1xuXG4gICAgICBjb25zdCBidWlsZGVyID0gbmV3IFRpcDIwVHJhbnNhY3Rpb25CdWlsZGVyKG1vY2tDb2luQ29uZmlnKTtcbiAgICAgIGJ1aWxkZXJcbiAgICAgICAgLmFkZE9wZXJhdGlvbihvcGVyYXRpb24pXG4gICAgICAgIC5mZWVUb2tlbihtb2NrRmVlVG9rZW4pXG4gICAgICAgIC5ub25jZSg3KVxuICAgICAgICAuZ2FzKDE1MDAwMG4pXG4gICAgICAgIC5tYXhGZWVQZXJHYXMoVFhfUEFSQU1TLmRlZmF1bHRNYXhGZWVQZXJHYXMpXG4gICAgICAgIC5tYXhQcmlvcml0eUZlZVBlckdhcyhUWF9QQVJBTVMuZGVmYXVsdE1heFByaW9yaXR5RmVlUGVyR2FzKTtcblxuICAgICAgY29uc3Qgb3JpZ2luYWxUeCA9IChhd2FpdCBidWlsZGVyLmJ1aWxkKCkpIGFzIFRpcDIwVHJhbnNhY3Rpb247XG4gICAgICBjb25zdCBzZXJpYWxpemVkID0gYXdhaXQgb3JpZ2luYWxUeC5zZXJpYWxpemUoKTtcblxuICAgICAgLy8gRGVzZXJpYWxpemUgdmlhIGZyb20oKVxuICAgICAgY29uc3QgYnVpbGRlcjIgPSBuZXcgVGlwMjBUcmFuc2FjdGlvbkJ1aWxkZXIobW9ja0NvaW5Db25maWcpO1xuICAgICAgYnVpbGRlcjIuZnJvbShzZXJpYWxpemVkKTtcbiAgICAgIGNvbnN0IHJlc3RvcmVkVHggPSAoYXdhaXQgYnVpbGRlcjIuYnVpbGQoKSkgYXMgVGlwMjBUcmFuc2FjdGlvbjtcblxuICAgICAgY29uc3Qgb3BzID0gcmVzdG9yZWRUeC5nZXRPcGVyYXRpb25zKCk7XG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwob3BzLmxlbmd0aCwgMSk7XG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwob3BzWzBdLnRva2VuLnRvTG93ZXJDYXNlKCksIG9wZXJhdGlvbi50b2tlbi50b0xvd2VyQ2FzZSgpKTtcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChvcHNbMF0udG8udG9Mb3dlckNhc2UoKSwgb3BlcmF0aW9uLnRvLnRvTG93ZXJDYXNlKCkpO1xuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKG9wc1swXS5hbW91bnQsIG9wZXJhdGlvbi5hbW91bnQpO1xuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKG9wc1swXS5tZW1vLCBvcGVyYXRpb24ubWVtbyk7XG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwocmVzdG9yZWRUeC5nZXRGZWVUb2tlbigpPy50b0xvd2VyQ2FzZSgpLCBtb2NrRmVlVG9rZW4udG9Mb3dlckNhc2UoKSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHJvdW5kLXRyaXAgYSBiYXRjaCB0cmFuc2FjdGlvbicsIGFzeW5jICgpID0+IHtcbiAgICAgIC8vIFVzZSBhbW91bnRzIHRoYXQgbWF0Y2ggdGlwMjBVbml0c1RvQW1vdW50IG91dHB1dDogZXRoZXJzIGZvcm1hdFVuaXRzIGFsd2F5cyBpbmNsdWRlcyBkZWNpbWFsXG4gICAgICBjb25zdCBvcGVyYXRpb25zID0gW1xuICAgICAgICB7IHRva2VuOiBURVNUTkVUX1RPS0VOUy5hbHBoYVVTRC5hZGRyZXNzLCB0bzogbW9ja1JlY2lwaWVudCwgYW1vdW50OiAnMTAuMCcsIG1lbW86ICcxJyB9LFxuICAgICAgICB7IHRva2VuOiBURVNUTkVUX1RPS0VOUy5iZXRhVVNELmFkZHJlc3MsIHRvOiBtb2NrUmVjaXBpZW50LCBhbW91bnQ6ICcyMC4wJywgbWVtbzogJzInIH0sXG4gICAgICBdO1xuXG4gICAgICBjb25zdCBidWlsZGVyID0gbmV3IFRpcDIwVHJhbnNhY3Rpb25CdWlsZGVyKG1vY2tDb2luQ29uZmlnKTtcbiAgICAgIGJ1aWxkZXJcbiAgICAgICAgLmFkZE9wZXJhdGlvbihvcGVyYXRpb25zWzBdKVxuICAgICAgICAuYWRkT3BlcmF0aW9uKG9wZXJhdGlvbnNbMV0pXG4gICAgICAgIC5ub25jZSg0MilcbiAgICAgICAgLmdhcygyNTAwMDBuKVxuICAgICAgICAubWF4RmVlUGVyR2FzKFRYX1BBUkFNUy5kZWZhdWx0TWF4RmVlUGVyR2FzKVxuICAgICAgICAubWF4UHJpb3JpdHlGZWVQZXJHYXMoVFhfUEFSQU1TLmRlZmF1bHRNYXhQcmlvcml0eUZlZVBlckdhcyk7XG5cbiAgICAgIGNvbnN0IG9yaWdpbmFsVHggPSAoYXdhaXQgYnVpbGRlci5idWlsZCgpKSBhcyBUaXAyMFRyYW5zYWN0aW9uO1xuICAgICAgY29uc3Qgc2VyaWFsaXplZCA9IGF3YWl0IG9yaWdpbmFsVHguc2VyaWFsaXplKCk7XG5cbiAgICAgIGNvbnN0IGJ1aWxkZXIyID0gbmV3IFRpcDIwVHJhbnNhY3Rpb25CdWlsZGVyKG1vY2tDb2luQ29uZmlnKTtcbiAgICAgIGJ1aWxkZXIyLmZyb20oc2VyaWFsaXplZCk7XG4gICAgICBjb25zdCByZXN0b3JlZFR4ID0gKGF3YWl0IGJ1aWxkZXIyLmJ1aWxkKCkpIGFzIFRpcDIwVHJhbnNhY3Rpb247XG5cbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChyZXN0b3JlZFR4LmdldE9wZXJhdGlvbkNvdW50KCksIDIpO1xuICAgICAgYXNzZXJ0Lm9rKHJlc3RvcmVkVHguaXNCYXRjaCgpKTtcblxuICAgICAgY29uc3QganNvbiA9IHJlc3RvcmVkVHgudG9Kc29uKCk7XG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwoanNvbi5ub25jZSwgNDIpO1xuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKGpzb24uZ2FzLCAnMjUwMDAwJyk7XG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwoanNvbi5tYXhGZWVQZXJHYXMsIFRYX1BBUkFNUy5kZWZhdWx0TWF4RmVlUGVyR2FzLnRvU3RyaW5nKCkpO1xuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKGpzb24ubWF4UHJpb3JpdHlGZWVQZXJHYXMsIFRYX1BBUkFNUy5kZWZhdWx0TWF4UHJpb3JpdHlGZWVQZXJHYXMudG9TdHJpbmcoKSk7XG5cbiAgICAgIGNvbnN0IG9wcyA9IHJlc3RvcmVkVHguZ2V0T3BlcmF0aW9ucygpO1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBvcGVyYXRpb25zLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChvcHNbaV0udG9rZW4udG9Mb3dlckNhc2UoKSwgb3BlcmF0aW9uc1tpXS50b2tlbi50b0xvd2VyQ2FzZSgpKTtcbiAgICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKG9wc1tpXS50by50b0xvd2VyQ2FzZSgpLCBtb2NrUmVjaXBpZW50LnRvTG93ZXJDYXNlKCkpO1xuICAgICAgICBhc3NlcnQuc3RyaWN0RXF1YWwob3BzW2ldLmFtb3VudCwgb3BlcmF0aW9uc1tpXS5hbW91bnQpO1xuICAgICAgICBhc3NlcnQuc3RyaWN0RXF1YWwob3BzW2ldLm1lbW8sIG9wZXJhdGlvbnNbaV0ubWVtbyk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHJvdW5kLXRyaXAgYSBzaWduZWQgdHJhbnNhY3Rpb24gYW5kIHByZXNlcnZlIHRoZSBzaWduYXR1cmUnLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCBidWlsZGVyID0gbmV3IFRpcDIwVHJhbnNhY3Rpb25CdWlsZGVyKG1vY2tDb2luQ29uZmlnKTtcbiAgICAgIGJ1aWxkZXJcbiAgICAgICAgLmFkZE9wZXJhdGlvbih7IHRva2VuOiBtb2NrVG9rZW4sIHRvOiBtb2NrUmVjaXBpZW50LCBhbW91bnQ6ICc1JyB9KVxuICAgICAgICAubm9uY2UoOTkpXG4gICAgICAgIC5nYXMoMTAwMDAwbilcbiAgICAgICAgLm1heEZlZVBlckdhcyhUWF9QQVJBTVMuZGVmYXVsdE1heEZlZVBlckdhcylcbiAgICAgICAgLm1heFByaW9yaXR5RmVlUGVyR2FzKFRYX1BBUkFNUy5kZWZhdWx0TWF4UHJpb3JpdHlGZWVQZXJHYXMpO1xuXG4gICAgICBjb25zdCB0eCA9IChhd2FpdCBidWlsZGVyLmJ1aWxkKCkpIGFzIFRpcDIwVHJhbnNhY3Rpb247XG4gICAgICB0eC5zZXRTaWduYXR1cmUoU0lHTkFUVVJFX1RFU1RfREFUQS52YWxpZFNpZ25hdHVyZSk7XG4gICAgICBjb25zdCBzaWduZWRIZXggPSBhd2FpdCB0eC50b0Jyb2FkY2FzdEZvcm1hdCgpO1xuXG4gICAgICAvLyBEZXNlcmlhbGl6ZSB0aGUgc2lnbmVkIHRyYW5zYWN0aW9uXG4gICAgICBjb25zdCBidWlsZGVyMiA9IG5ldyBUaXAyMFRyYW5zYWN0aW9uQnVpbGRlcihtb2NrQ29pbkNvbmZpZyk7XG4gICAgICBidWlsZGVyMi5mcm9tKHNpZ25lZEhleCk7XG4gICAgICBjb25zdCByZXN0b3JlZFR4ID0gKGF3YWl0IGJ1aWxkZXIyLmJ1aWxkKCkpIGFzIFRpcDIwVHJhbnNhY3Rpb247XG5cbiAgICAgIGNvbnN0IHNpZyA9IHJlc3RvcmVkVHguZ2V0U2lnbmF0dXJlKCk7XG4gICAgICBhc3NlcnQub2soc2lnICE9PSB1bmRlZmluZWQsICdTaWduYXR1cmUgc2hvdWxkIGJlIHByZXNlcnZlZCcpO1xuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHNpZyEueVBhcml0eSwgU0lHTkFUVVJFX1RFU1RfREFUQS52YWxpZFNpZ25hdHVyZS55UGFyaXR5KTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgcHJvZHVjZSB0aGUgc2FtZSB0eCBpZCBhZnRlciBhIHNlcmlhbGl6YXRpb24gcm91bmQtdHJpcCcsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IGJ1aWxkZXIgPSBuZXcgVGlwMjBUcmFuc2FjdGlvbkJ1aWxkZXIobW9ja0NvaW5Db25maWcpO1xuICAgICAgYnVpbGRlclxuICAgICAgICAuYWRkT3BlcmF0aW9uKHsgdG9rZW46IG1vY2tUb2tlbiwgdG86IG1vY2tSZWNpcGllbnQsIGFtb3VudDogJzEwMC4wJywgbWVtbzogJzk5JyB9KVxuICAgICAgICAubm9uY2UoMylcbiAgICAgICAgLmdhcygxMDAwMDBuKVxuICAgICAgICAubWF4RmVlUGVyR2FzKFRYX1BBUkFNUy5kZWZhdWx0TWF4RmVlUGVyR2FzKVxuICAgICAgICAubWF4UHJpb3JpdHlGZWVQZXJHYXMoVFhfUEFSQU1TLmRlZmF1bHRNYXhQcmlvcml0eUZlZVBlckdhcyk7XG5cbiAgICAgIGNvbnN0IG9yaWdpbmFsVHggPSAoYXdhaXQgYnVpbGRlci5idWlsZCgpKSBhcyBUaXAyMFRyYW5zYWN0aW9uO1xuICAgICAgY29uc3Qgc2VyaWFsaXplZCA9IGF3YWl0IG9yaWdpbmFsVHguc2VyaWFsaXplKCk7XG4gICAgICBjb25zdCBvcmlnaW5hbElkID0gb3JpZ2luYWxUeC5pZDtcblxuICAgICAgY29uc3QgYnVpbGRlcjIgPSBuZXcgVGlwMjBUcmFuc2FjdGlvbkJ1aWxkZXIobW9ja0NvaW5Db25maWcpO1xuICAgICAgYnVpbGRlcjIuZnJvbShzZXJpYWxpemVkKTtcbiAgICAgIGNvbnN0IHJlc3RvcmVkVHggPSAoYXdhaXQgYnVpbGRlcjIuYnVpbGQoKSkgYXMgVGlwMjBUcmFuc2FjdGlvbjtcblxuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHJlc3RvcmVkVHguaWQsIG9yaWdpbmFsSWQpO1xuXG4gICAgICBjb25zdCBvcmlnaW5hbEpzb24gPSBvcmlnaW5hbFR4LnRvSnNvbigpO1xuICAgICAgY29uc3QgcmVzdG9yZWRKc29uID0gcmVzdG9yZWRUeC50b0pzb24oKTtcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChyZXN0b3JlZEpzb24ubm9uY2UsIG9yaWdpbmFsSnNvbi5ub25jZSk7XG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwocmVzdG9yZWRKc29uLmdhcywgb3JpZ2luYWxKc29uLmdhcyk7XG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwocmVzdG9yZWRKc29uLm1heEZlZVBlckdhcywgb3JpZ2luYWxKc29uLm1heEZlZVBlckdhcyk7XG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwocmVzdG9yZWRKc29uLm1heFByaW9yaXR5RmVlUGVyR2FzLCBvcmlnaW5hbEpzb24ubWF4UHJpb3JpdHlGZWVQZXJHYXMpO1xuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHJlc3RvcmVkSnNvbi5mZWVUb2tlbiwgb3JpZ2luYWxKc29uLmZlZVRva2VuKTtcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChyZXN0b3JlZEpzb24uY2FsbENvdW50LCBvcmlnaW5hbEpzb24uY2FsbENvdW50KTtcblxuICAgICAgY29uc3Qgb3JpZ2luYWxPcHMgPSBvcmlnaW5hbFR4LmdldE9wZXJhdGlvbnMoKTtcbiAgICAgIGNvbnN0IHJlc3RvcmVkT3BzID0gcmVzdG9yZWRUeC5nZXRPcGVyYXRpb25zKCk7XG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwocmVzdG9yZWRPcHMubGVuZ3RoLCBvcmlnaW5hbE9wcy5sZW5ndGgpO1xuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHJlc3RvcmVkT3BzWzBdLnRva2VuLnRvTG93ZXJDYXNlKCksIG9yaWdpbmFsT3BzWzBdLnRva2VuLnRvTG93ZXJDYXNlKCkpO1xuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHJlc3RvcmVkT3BzWzBdLnRvLnRvTG93ZXJDYXNlKCksIG9yaWdpbmFsT3BzWzBdLnRvLnRvTG93ZXJDYXNlKCkpO1xuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHJlc3RvcmVkT3BzWzBdLmFtb3VudCwgb3JpZ2luYWxPcHNbMF0uYW1vdW50KTtcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChyZXN0b3JlZE9wc1swXS5tZW1vLCBvcmlnaW5hbE9wc1swXS5tZW1vKTtcblxuICAgICAgY29uc3QgcmVzdG9yZWRTZXJpYWxpemVkID0gYXdhaXQgcmVzdG9yZWRUeC5zZXJpYWxpemUoKTtcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChyZXN0b3JlZFNlcmlhbGl6ZWQsIHNlcmlhbGl6ZWQpO1xuICAgIH0pO1xuICB9KTtcbn0pO1xuXG5kZXNjcmliZSgnVGVtcG8gY29pbiAtIHBhcnNlVHJhbnNhY3Rpb24gLyB2ZXJpZnlUcmFuc2FjdGlvbicsICgpID0+IHtcbiAgbGV0IGJpdGdvOiBUZXN0Qml0R29BUEk7XG4gIGxldCBjb2luOiBhbnk7XG5cbiAgY29uc3QgbW9ja1Rva2VuID0gZXRoZXJzLnV0aWxzLmdldEFkZHJlc3MoVEVTVE5FVF9UT0tFTlMuYWxwaGFVU0QuYWRkcmVzcyk7XG4gIGNvbnN0IG1vY2tSZWNpcGllbnQgPSBldGhlcnMudXRpbHMuZ2V0QWRkcmVzcyhURVNUX1JFQ0lQSUVOVF9BRERSRVNTKTtcblxuICBiZWZvcmUoZnVuY3Rpb24gKCkge1xuICAgIGJpdGdvID0gVGVzdEJpdEdvLmRlY29yYXRlKEJpdEdvQVBJLCB7IGVudjogJ21vY2snIH0pO1xuICAgIGJpdGdvLnNhZmVSZWdpc3RlcigndHRlbXBvJywgKGJnOiBCaXRHb0Jhc2UpID0+IHtcbiAgICAgIGNvbnN0IG1vY2tTdGF0aWNzQ29pbiA9IHtcbiAgICAgICAgbmFtZTogJ3R0ZW1wbycsXG4gICAgICAgIGZ1bGxOYW1lOiAnVGVzdG5ldCBUZW1wbycsXG4gICAgICAgIG5ldHdvcms6IHsgdHlwZTogJ3Rlc3RuZXQnIH0sXG4gICAgICAgIGZlYXR1cmVzOiBbXSxcbiAgICAgIH0gYXMgYW55O1xuICAgICAgcmV0dXJuIFR0ZW1wby5jcmVhdGVJbnN0YW5jZShiZywgbW9ja1N0YXRpY3NDb2luKTtcbiAgICB9KTtcbiAgICBiaXRnby5pbml0aWFsaXplVGVzdFZhcnMoKTtcbiAgICBjb2luID0gYml0Z28uY29pbigndHRlbXBvJyk7XG4gIH0pO1xuXG4gIGFzeW5jIGZ1bmN0aW9uIGJ1aWxkU2VyaWFsaXplZFR4KFxuICAgIG9wZXJhdGlvbnM6IHsgdG9rZW46IHN0cmluZzsgdG86IHN0cmluZzsgYW1vdW50OiBzdHJpbmc7IG1lbW8/OiBzdHJpbmcgfVtdLFxuICAgIG5vbmNlID0gMFxuICApOiBQcm9taXNlPHN0cmluZz4ge1xuICAgIGNvbnN0IGJ1aWxkZXIgPSBuZXcgVGlwMjBUcmFuc2FjdGlvbkJ1aWxkZXIoY29pbnMuZ2V0KCd0dGVtcG8nKSk7XG4gICAgZm9yIChjb25zdCBvcCBvZiBvcGVyYXRpb25zKSB7XG4gICAgICBidWlsZGVyLmFkZE9wZXJhdGlvbihvcCk7XG4gICAgfVxuICAgIGJ1aWxkZXJcbiAgICAgIC5ub25jZShub25jZSlcbiAgICAgIC5nYXMoMTAwMDAwbilcbiAgICAgIC5tYXhGZWVQZXJHYXMoVFhfUEFSQU1TLmRlZmF1bHRNYXhGZWVQZXJHYXMpXG4gICAgICAubWF4UHJpb3JpdHlGZWVQZXJHYXMoVFhfUEFSQU1TLmRlZmF1bHRNYXhQcmlvcml0eUZlZVBlckdhcyk7XG4gICAgY29uc3QgdHggPSAoYXdhaXQgYnVpbGRlci5idWlsZCgpKSBhcyBUaXAyMFRyYW5zYWN0aW9uO1xuICAgIHJldHVybiB0eC5zZXJpYWxpemUoKTtcbiAgfVxuXG4gIGRlc2NyaWJlKCdwYXJzZVRyYW5zYWN0aW9uJywgKCkgPT4ge1xuICAgIGl0KCdzaG91bGQgcGFyc2UgYSBzaW5nbGUtb3BlcmF0aW9uIHRyYW5zYWN0aW9uIGludG8gb3V0cHV0cycsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IHR4SGV4ID0gYXdhaXQgYnVpbGRTZXJpYWxpemVkVHgoW3sgdG9rZW46IG1vY2tUb2tlbiwgdG86IG1vY2tSZWNpcGllbnQsIGFtb3VudDogJzUwJywgbWVtbzogJzEnIH1dKTtcbiAgICAgIGNvbnN0IHBhcnNlZCA9IGF3YWl0IGNvaW4ucGFyc2VUcmFuc2FjdGlvbih7IHR4SGV4IH0pO1xuICAgICAgYXNzZXJ0Lm9rKEFycmF5LmlzQXJyYXkocGFyc2VkLm91dHB1dHMpLCAnb3V0cHV0cyBzaG91bGQgYmUgYW4gYXJyYXknKTtcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChwYXJzZWQub3V0cHV0cy5sZW5ndGgsIDEpO1xuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHBhcnNlZC5vdXRwdXRzWzBdLmFkZHJlc3MudG9Mb3dlckNhc2UoKSwgbW9ja1JlY2lwaWVudC50b0xvd2VyQ2FzZSgpKTtcbiAgICAgIC8vIDUwIHRva2VucyAqIDEwXjYgPSA1MF8wMDBfMDAwIGJhc2UgdW5pdHNcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChwYXJzZWQub3V0cHV0c1swXS5hbW91bnQsICc1MDAwMDAwMCcpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gZW1wdHkgb2JqZWN0IHdoZW4gbm8gdHhIZXggaXMgcHJvdmlkZWQnLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCBwYXJzZWQgPSBhd2FpdCBjb2luLnBhcnNlVHJhbnNhY3Rpb24oe30pO1xuICAgICAgYXNzZXJ0LmRlZXBTdHJpY3RFcXVhbChwYXJzZWQsIHt9KTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ3ZlcmlmeVRyYW5zYWN0aW9uJywgKCkgPT4ge1xuICAgIGl0KCdzaG91bGQgcmV0dXJuIHRydWUgd2hlbiBubyByZWNpcGllbnRzIGFyZSBzcGVjaWZpZWQnLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCB0eEhleCA9IGF3YWl0IGJ1aWxkU2VyaWFsaXplZFR4KFt7IHRva2VuOiBtb2NrVG9rZW4sIHRvOiBtb2NrUmVjaXBpZW50LCBhbW91bnQ6ICcxMCcgfV0pO1xuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgY29pbi52ZXJpZnlUcmFuc2FjdGlvbih7XG4gICAgICAgIHR4UHJlYnVpbGQ6IHsgdHhIZXggfSxcbiAgICAgICAgdHhQYXJhbXM6IHt9LFxuICAgICAgfSk7XG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwocmVzdWx0LCB0cnVlKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgcmV0dXJuIHRydWUgd2hlbiByZWNpcGllbnRzIG1hdGNoIG9wZXJhdGlvbnMnLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCB0eEhleCA9IGF3YWl0IGJ1aWxkU2VyaWFsaXplZFR4KFt7IHRva2VuOiBtb2NrVG9rZW4sIHRvOiBtb2NrUmVjaXBpZW50LCBhbW91bnQ6ICcxMDAnIH1dKTtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGNvaW4udmVyaWZ5VHJhbnNhY3Rpb24oe1xuICAgICAgICB0eFByZWJ1aWxkOiB7IHR4SGV4IH0sXG4gICAgICAgIHR4UGFyYW1zOiB7XG4gICAgICAgICAgcmVjaXBpZW50czogW3sgYWRkcmVzczogbW9ja1JlY2lwaWVudCwgYW1vdW50OiAnMTAwMDAwMDAwJyB9XSwgLy8gMTAwICogMTBeNiBiYXNlIHVuaXRzXG4gICAgICAgIH0sXG4gICAgICB9KTtcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChyZXN1bHQsIHRydWUpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCB0aHJvdyB3aGVuIHJlY2lwaWVudCBhZGRyZXNzIGRvZXMgbm90IG1hdGNoJywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgdHhIZXggPSBhd2FpdCBidWlsZFNlcmlhbGl6ZWRUeChbeyB0b2tlbjogbW9ja1Rva2VuLCB0bzogbW9ja1JlY2lwaWVudCwgYW1vdW50OiAnMTAwJyB9XSk7XG4gICAgICBjb25zdCB3cm9uZ0FkZHJlc3MgPSBldGhlcnMudXRpbHMuZ2V0QWRkcmVzcygnMHgxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExJyk7XG4gICAgICBhd2FpdCBhc3NlcnQucmVqZWN0cyhcbiAgICAgICAgKCkgPT5cbiAgICAgICAgICBjb2luLnZlcmlmeVRyYW5zYWN0aW9uKHtcbiAgICAgICAgICAgIHR4UHJlYnVpbGQ6IHsgdHhIZXggfSxcbiAgICAgICAgICAgIHR4UGFyYW1zOiB7IHJlY2lwaWVudHM6IFt7IGFkZHJlc3M6IHdyb25nQWRkcmVzcywgYW1vdW50OiAnMTAwMDAwMDAwJyB9XSB9LFxuICAgICAgICAgIH0pLFxuICAgICAgICAvcmVjaXBpZW50IG1pc21hdGNoL1xuICAgICAgKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgdGhyb3cgd2hlbiByZWNpcGllbnQgYW1vdW50IGRvZXMgbm90IG1hdGNoJywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgdHhIZXggPSBhd2FpdCBidWlsZFNlcmlhbGl6ZWRUeChbeyB0b2tlbjogbW9ja1Rva2VuLCB0bzogbW9ja1JlY2lwaWVudCwgYW1vdW50OiAnMTAwJyB9XSk7XG4gICAgICBhd2FpdCBhc3NlcnQucmVqZWN0cyhcbiAgICAgICAgKCkgPT5cbiAgICAgICAgICBjb2luLnZlcmlmeVRyYW5zYWN0aW9uKHtcbiAgICAgICAgICAgIHR4UHJlYnVpbGQ6IHsgdHhIZXggfSxcbiAgICAgICAgICAgIHR4UGFyYW1zOiB7IHJlY2lwaWVudHM6IFt7IGFkZHJlc3M6IG1vY2tSZWNpcGllbnQsIGFtb3VudDogJzk5OScgfV0gfSxcbiAgICAgICAgICB9KSxcbiAgICAgICAgL2Ftb3VudCBtaXNtYXRjaC9cbiAgICAgICk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHRocm93IHdoZW4gb3BlcmF0aW9uIGNvdW50IGRpZmZlcnMgZnJvbSByZWNpcGllbnQgY291bnQnLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCB0eEhleCA9IGF3YWl0IGJ1aWxkU2VyaWFsaXplZFR4KFt7IHRva2VuOiBtb2NrVG9rZW4sIHRvOiBtb2NrUmVjaXBpZW50LCBhbW91bnQ6ICcxMCcgfV0pO1xuICAgICAgYXdhaXQgYXNzZXJ0LnJlamVjdHMoXG4gICAgICAgICgpID0+XG4gICAgICAgICAgY29pbi52ZXJpZnlUcmFuc2FjdGlvbih7XG4gICAgICAgICAgICB0eFByZWJ1aWxkOiB7IHR4SGV4IH0sXG4gICAgICAgICAgICB0eFBhcmFtczoge1xuICAgICAgICAgICAgICByZWNpcGllbnRzOiBbXG4gICAgICAgICAgICAgICAgeyBhZGRyZXNzOiBtb2NrUmVjaXBpZW50LCBhbW91bnQ6ICcxMDAwMDAwMCcgfSxcbiAgICAgICAgICAgICAgICB7IGFkZHJlc3M6IG1vY2tSZWNpcGllbnQsIGFtb3VudDogJzEwMDAwMDAwJyB9LFxuICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9KSxcbiAgICAgICAgL29wZXJhdGlvblxcKHNcXCkvXG4gICAgICApO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gdHJ1ZSB3aGVuIG5vIHR4SGV4IGlzIHByb3ZpZGVkJywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgY29pbi52ZXJpZnlUcmFuc2FjdGlvbih7IHR4UHJlYnVpbGQ6IHt9LCB0eFBhcmFtczoge30gfSk7XG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwocmVzdWx0LCB0cnVlKTtcbiAgICB9KTtcbiAgfSk7XG59KTtcbiJdfQ==
|
|
858
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNhY3Rpb25CdWlsZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vdGVzdC91bml0L3RyYW5zYWN0aW9uQnVpbGRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLG9EQUE0QjtBQUM1QixpQ0FBNkM7QUFDN0MsbUNBQWdDO0FBQ2hDLHlFQUEyRTtBQUMzRSwyREFBNkQ7QUFDN0QsK0NBTTZCO0FBQzdCLHVEQUE4RTtBQUM5RSw0Q0FBdUM7QUFDdkMsNkNBQTBDO0FBQzFDLDRDQUEwQztBQUMxQyw4Q0FBMEQ7QUFFMUQsOENBTTRCO0FBRTVCLE1BQU0sY0FBYyxHQUFHLGVBQUssQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUM7QUFFM0MsSUFBQSxnQkFBUSxFQUFDLGtCQUFrQixFQUFFLEdBQUcsRUFBRTtJQUNoQyxJQUFBLGdCQUFRLEVBQUMsb0JBQW9CLEVBQUUsR0FBRyxFQUFFO1FBQ2xDLElBQUEsVUFBRSxFQUFDLGtEQUFrRCxFQUFFLEdBQUcsRUFBRTtZQUMxRCxnQkFBTSxDQUFDLFdBQVcsQ0FBQyxJQUFBLDBCQUFrQixFQUFDLEtBQUssQ0FBQyxFQUFFLFFBQVEsQ0FBQyxDQUFDO1lBQ3hELGdCQUFNLENBQUMsV0FBVyxDQUFDLElBQUEsMEJBQWtCLEVBQUMsS0FBSyxDQUFDLEVBQUUsVUFBVSxDQUFDLENBQUM7WUFDMUQsZ0JBQU0sQ0FBQyxXQUFXLENBQUMsSUFBQSwwQkFBa0IsRUFBQyxVQUFVLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztRQUN6RCxDQUFDLENBQUMsQ0FBQztRQUVILElBQUEsVUFBRSxFQUFDLHVDQUF1QyxFQUFFLEdBQUcsRUFBRTtZQUMvQyxnQkFBTSxDQUFDLE1BQU0sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFBLDBCQUFrQixFQUFDLFNBQVMsQ0FBQyxFQUFFLHVCQUF1QixDQUFDLENBQUM7UUFDOUUsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FB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QUcsRUFBRSxJQUFJLEVBQUUsWUFBWSxFQUFFO2lCQUMzRDthQUNGO1NBQ0YsQ0FBQyxFQUNKLFdBQVcsQ0FDWixDQUFDO0lBQ0osQ0FBQyxDQUFDLENBQUM7SUFFSCxJQUFBLFVBQUUsRUFBQywwRUFBMEUsRUFBRSxLQUFLLElBQUksRUFBRTtRQUN4RixNQUFNLEtBQUssR0FBRyxNQUFNLGNBQWMsQ0FBQyxZQUFZLEVBQUUsWUFBWSxDQUFDLENBQUM7UUFDL0QsTUFBTSxNQUFNLEdBQUcsTUFBTSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO1FBQ3RELGdCQUFNLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7UUFDekMsZ0JBQU0sQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDN0MsZ0JBQU0sQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsV0FBVyxFQUFFLEVBQUUsWUFBWSxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUM7SUFDMUYsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBhc3NlcnQgZnJvbSAnYXNzZXJ0JztcbmltcG9ydCB7IGRlc2NyaWJlLCBpdCwgYmVmb3JlIH0gZnJvbSAnbW9jaGEnO1xuaW1wb3J0IHsgZXRoZXJzIH0gZnJvbSAnZXRoZXJzJztcbmltcG9ydCB7IFRpcDIwVHJhbnNhY3Rpb25CdWlsZGVyIH0gZnJvbSAnLi4vLi4vc3JjL2xpYi90cmFuc2FjdGlvbkJ1aWxkZXInO1xuaW1wb3J0IHsgVGlwMjBUcmFuc2FjdGlvbiB9IGZyb20gJy4uLy4uL3NyYy9saWIvdHJhbnNhY3Rpb24nO1xuaW1wb3J0IHtcbiAgYW1vdW50VG9UaXAyMFVuaXRzLFxuICB0aXAyMFVuaXRzVG9BbW91bnQsXG4gIHN0cmluZ1RvQnl0ZXMzMixcbiAgZW5jb2RlVGlwMjBUcmFuc2ZlcldpdGhNZW1vLFxuICBpc1ZhbGlkVGlwMjBBbW91bnQsXG59IGZyb20gJy4uLy4uL3NyYy9saWIvdXRpbHMnO1xuaW1wb3J0IHsgVElQMjBfREVDSU1BTFMsIEFBX1RSQU5TQUNUSU9OX1RZUEUgfSBmcm9tICcuLi8uLi9zcmMvbGliL2NvbnN0YW50cyc7XG5pbXBvcnQgeyBjb2lucyB9IGZyb20gJ0BiaXRnby9zdGF0aWNzJztcbmltcG9ydCB7IFR0ZW1wbyB9IGZyb20gJy4uLy4uL3NyYy90dGVtcG8nO1xuaW1wb3J0IHsgQml0R29BUEkgfSBmcm9tICdAYml0Z28vc2RrLWFwaSc7XG5pbXBvcnQgeyBUZXN0Qml0R28sIFRlc3RCaXRHb0FQSSB9IGZyb20gJ0BiaXRnby9zZGstdGVzdCc7XG5pbXBvcnQgeyBCaXRHb0Jhc2UgfSBmcm9tICdAYml0Z28vc2RrLWNvcmUnO1xuaW1wb3J0IHtcbiAgVEVTVE5FVF9UT0tFTlMsXG4gIFRYX1BBUkFNUyxcbiAgRVJST1JfTUVTU0FHRVMsXG4gIFNJR05BVFVSRV9URVNUX0RBVEEsXG4gIFRFU1RfUkVDSVBJRU5UX0FERFJFU1MsXG59IGZyb20gJy4uL3Jlc291cmNlcy90ZW1wbyc7XG5cbmNvbnN0IG1vY2tDb2luQ29uZmlnID0gY29pbnMuZ2V0KCd0dGVtcG8nKTtcblxuZGVzY3JpYmUoJ1RJUC0yMCBVdGlsaXRpZXMnLCAoKSA9PiB7XG4gIGRlc2NyaWJlKCdhbW91bnRUb1RpcDIwVW5pdHMnLCAoKSA9PiB7XG4gICAgaXQoJ3Nob3VsZCBjb252ZXJ0IGRlY2ltYWwgYW1vdW50IHRvIDYtZGVjaW1hbCB1bml0cycsICgpID0+IHtcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChhbW91bnRUb1RpcDIwVW5pdHMoJzEuNScpLCAxNTAwMDAwbik7XG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwoYW1vdW50VG9UaXAyMFVuaXRzKCcxMDAnKSwgMTAwMDAwMDAwbik7XG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwoYW1vdW50VG9UaXAyMFVuaXRzKCcwLjAwMDAwMScpLCAxbik7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHRocm93IGVycm9yIGZvciBpbnZhbGlkIGFtb3VudCcsICgpID0+IHtcbiAgICAgIGFzc2VydC50aHJvd3MoKCkgPT4gYW1vdW50VG9UaXAyMFVuaXRzKCdpbnZhbGlkJyksIC9JbnZhbGlkIGFtb3VudCBmb3JtYXQvKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ3RpcDIwVW5pdHNUb0Ftb3VudCcsICgpID0+IHtcbiAgICBpdCgnc2hvdWxkIGNvbnZlcnQgNi1kZWNpbWFsIHVuaXRzIHRvIGh1bWFuLXJlYWRhYmxlIGFtb3VudCcsICgpID0+IHtcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbCh0aXAyMFVuaXRzVG9BbW91bnQoMTUwMDAwMG4pLCAnMS41Jyk7XG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwodGlwMjBVbml0c1RvQW1vdW50KDEwMDAwMDAwMG4pLCAnMTAwLjAnKTtcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbCh0aXAyMFVuaXRzVG9BbW91bnQoMW4pLCAnMC4wMDAwMDEnKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ3N0cmluZ1RvQnl0ZXMzMicsICgpID0+IHtcbiAgICBpdCgnc2hvdWxkIGNvbnZlcnQgc3RyaW5nIHRvIGJ5dGVzMzInLCAoKSA9PiB7XG4gICAgICBjb25zdCByZXN1bHQgPSBzdHJpbmdUb0J5dGVzMzIoJzEyMzQ1Jyk7XG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwocmVzdWx0Lmxlbmd0aCwgNjYpO1xuICAgICAgYXNzZXJ0Lm9rKHJlc3VsdC5zdGFydHNXaXRoKCcweCcpKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgdGhyb3cgZXJyb3IgZm9yIHN0cmluZyBsb25nZXIgdGhhbiAzMiBieXRlcycsICgpID0+IHtcbiAgICAgIGFzc2VydC50aHJvd3MoKCkgPT4gc3RyaW5nVG9CeXRlczMyKCdhJy5yZXBlYXQoMzMpKSwgL01lbW8gdG9vIGxvbmcvKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ2VuY29kZVRpcDIwVHJhbnNmZXJXaXRoTWVtbycsICgpID0+IHtcbiAgICBpdCgnc2hvdWxkIGVuY29kZSB0cmFuc2ZlcldpdGhNZW1vIGNhbGwnLCAoKSA9PiB7XG4gICAgICBjb25zdCB0byA9IGV0aGVycy51dGlscy5nZXRBZGRyZXNzKCcweDc0MmQzNWNjNjYzNGMwNTMyOTI1YTNiODQ0YmM5ZTc1OTVmMGJlYjEnKTtcbiAgICAgIGNvbnN0IGVuY29kZWQgPSBlbmNvZGVUaXAyMFRyYW5zZmVyV2l0aE1lbW8odG8sIDE1MDAwMDBuLCAnMTIzNDUnKTtcbiAgICAgIGFzc2VydC5vayhlbmNvZGVkLnN0YXJ0c1dpdGgoJzB4JykpO1xuICAgICAgYXNzZXJ0Lm9rKGVuY29kZWQubGVuZ3RoID4gMTApO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnaXNWYWxpZFRpcDIwQW1vdW50JywgKCkgPT4ge1xuICAgIGl0KCdzaG91bGQgdmFsaWRhdGUgYW1vdW50cyBjb3JyZWN0bHknLCAoKSA9PiB7XG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwoaXNWYWxpZFRpcDIwQW1vdW50KCcxLjUnKSwgdHJ1ZSk7XG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwoaXNWYWxpZFRpcDIwQW1vdW50KCdpbnZhbGlkJyksIGZhbHNlKTtcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChpc1ZhbGlkVGlwMjBBbW91bnQoJy01JyksIGZhbHNlKTtcbiAgICB9KTtcbiAgfSk7XG59KTtcblxuZGVzY3JpYmUoJ1RJUC0yMCBUcmFuc2FjdGlvbiBCdWlsZGVyJywgKCkgPT4ge1xuICBjb25zdCBtb2NrVG9rZW4gPSBldGhlcnMudXRpbHMuZ2V0QWRkcmVzcygnMHgxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwJyk7XG4gIGNvbnN0IG1vY2tSZWNpcGllbnQgPSBldGhlcnMudXRpbHMuZ2V0QWRkcmVzcygnMHg3NDJkMzVjYzY2MzRjMDUzMjkyNWEzYjg0NGJjOWU3NTk1ZjBiZWIxJyk7XG4gIGNvbnN0IG1vY2tGZWVUb2tlbiA9IGV0aGVycy51dGlscy5nZXRBZGRyZXNzKCcweGFiY2RlZmFiY2RlZmFiY2RlZmFiY2RlZmFiY2RlZmFiY2RlZmFiY2QnKTtcblxuICBkZXNjcmliZSgnYWRkT3BlcmF0aW9uJywgKCkgPT4ge1xuICAgIGl0KCdzaG91bGQgYWRkIG9wZXJhdGlvbiB3aXRoIGFuZCB3aXRob3V0IG1lbW8nLCAoKSA9PiB7XG4gICAgICBjb25zdCBidWlsZGVyID0gbmV3IFRpcDIwVHJhbnNhY3Rpb25CdWlsZGVyKG1vY2tDb2luQ29uZmlnKTtcbiAgICAgIGJ1aWxkZXIuYWRkT3BlcmF0aW9uKHsgdG9rZW46IG1vY2tUb2tlbiwgdG86IG1vY2tSZWNpcGllbnQsIGFtb3VudDogJzEwMCcgfSk7XG4gICAgICBidWlsZGVyLmFkZE9wZXJhdGlvbih7IHRva2VuOiBtb2NrVG9rZW4sIHRvOiBtb2NrUmVjaXBpZW50LCBhbW91bnQ6ICc1MCcsIG1lbW86ICcxJyB9KTtcblxuICAgICAgY29uc3Qgb3BlcmF0aW9ucyA9IGJ1aWxkZXIuZ2V0T3BlcmF0aW9ucygpO1xuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKG9wZXJhdGlvbnMubGVuZ3RoLCAyKTtcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChvcGVyYXRpb25zWzBdLm1lbW8sIHVuZGVmaW5lZCk7XG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwob3BlcmF0aW9uc1sxXS5tZW1vLCAnMScpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCB0aHJvdyBlcnJvciBmb3IgaW52YWxpZCBhZGRyZXNzZXMnLCAoKSA9PiB7XG4gICAgICBjb25zdCBidWlsZGVyID0gbmV3IFRpcDIwVHJhbnNhY3Rpb25CdWlsZGVyKG1vY2tDb2luQ29uZmlnKTtcbiAgICAgIGFzc2VydC50aHJvd3MoXG4gICAgICAgICgpID0+IGJ1aWxkZXIuYWRkT3BlcmF0aW9uKHsgdG9rZW46ICcweGludmFsaWQnIGFzIGFueSwgdG86IG1vY2tSZWNpcGllbnQsIGFtb3VudDogJzEwMCcgfSksXG4gICAgICAgIC9JbnZhbGlkIHRva2VuIGFkZHJlc3MvXG4gICAgICApO1xuICAgICAgYXNzZXJ0LnRocm93cyhcbiAgICAgICAgKCkgPT4gYnVpbGRlci5hZGRPcGVyYXRpb24oeyB0b2tlbjogbW9ja1Rva2VuLCB0bzogJzB4aW52YWxpZCcgYXMgYW55LCBhbW91bnQ6ICcxMDAnIH0pLFxuICAgICAgICAvSW52YWxpZCByZWNpcGllbnQgYWRkcmVzcy9cbiAgICAgICk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHRocm93IGVycm9yIGZvciBpbnZhbGlkIGFtb3VudCcsICgpID0+IHtcbiAgICAgIGNvbnN0IGJ1aWxkZXIgPSBuZXcgVGlwMjBUcmFuc2FjdGlvbkJ1aWxkZXIobW9ja0NvaW5Db25maWcpO1xuICAgICAgYXNzZXJ0LnRocm93cyhcbiAgICAgICAgKCkgPT4gYnVpbGRlci5hZGRPcGVyYXRpb24oeyB0b2tlbjogbW9ja1Rva2VuLCB0bzogbW9ja1JlY2lwaWVudCwgYW1vdW50OiAnaW52YWxpZC1hbW91bnQnIH0pLFxuICAgICAgICAvSW52YWxpZCBhbW91bnQvXG4gICAgICApO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCB0aHJvdyBlcnJvciBmb3IgaW52YWxpZCAobm9uLW51bWVyaWMpIG1lbW8nLCAoKSA9PiB7XG4gICAgICBjb25zdCBidWlsZGVyID0gbmV3IFRpcDIwVHJhbnNhY3Rpb25CdWlsZGVyKG1vY2tDb2luQ29uZmlnKTtcbiAgICAgIGFzc2VydC50aHJvd3MoXG4gICAgICAgICgpID0+IGJ1aWxkZXIuYWRkT3BlcmF0aW9uKHsgdG9rZW46IG1vY2tUb2tlbiwgdG86IG1vY2tSZWNpcGllbnQsIGFtb3VudDogJzEwMCcsIG1lbW86ICdJTlYtMDAxJyB9KSxcbiAgICAgICAgL0ludmFsaWQgbWVtby9cbiAgICAgICk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdmZWVUb2tlbicsICgpID0+IHtcbiAgICBpdCgnc2hvdWxkIHNldCBhbmQgZ2V0IGZlZSB0b2tlbicsICgpID0+IHtcbiAgICAgIGNvbnN0IGJ1aWxkZXIgPSBuZXcgVGlwMjBUcmFuc2FjdGlvbkJ1aWxkZXIobW9ja0NvaW5Db25maWcpO1xuICAgICAgYnVpbGRlci5mZWVUb2tlbihtb2NrRmVlVG9rZW4pO1xuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKGJ1aWxkZXIuZ2V0RmVlVG9rZW4oKSwgbW9ja0ZlZVRva2VuKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgdGhyb3cgZXJyb3IgZm9yIGludmFsaWQgZmVlIHRva2VuIGFkZHJlc3MnLCAoKSA9PiB7XG4gICAgICBjb25zdCBidWlsZGVyID0gbmV3IFRpcDIwVHJhbnNhY3Rpb25CdWlsZGVyKG1vY2tDb2luQ29uZmlnKTtcbiAgICAgIGFzc2VydC50aHJvd3MoKCkgPT4gYnVpbGRlci5mZWVUb2tlbignaW52YWxpZC1hZGRyZXNzJyksIC9JbnZhbGlkIGZlZSB0b2tlbiBhZGRyZXNzLyk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdUcmFuc2FjdGlvbiBwYXJhbWV0ZXJzJywgKCkgPT4ge1xuICAgIGl0KCdzaG91bGQgc2V0IG5vbmNlLCBnYXMsIG1heEZlZVBlckdhcywgYW5kIG1heFByaW9yaXR5RmVlUGVyR2FzJywgKCkgPT4ge1xuICAgICAgY29uc3QgYnVpbGRlciA9IG5ldyBUaXAyMFRyYW5zYWN0aW9uQnVpbGRlcihtb2NrQ29pbkNvbmZpZyk7XG4gICAgICBidWlsZGVyLm5vbmNlKDQyKS5nYXMoNTAwMDAwbikubWF4RmVlUGVyR2FzKDEwMDAwMDAwMDBuKS5tYXhQcmlvcml0eUZlZVBlckdhcyg1MDAwMDAwMDBuKTtcblxuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKChidWlsZGVyIGFzIGFueSkuX25vbmNlLCA0Mik7XG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwoKGJ1aWxkZXIgYXMgYW55KS5fZ2FzLCA1MDAwMDBuKTtcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbCgoYnVpbGRlciBhcyBhbnkpLl9tYXhGZWVQZXJHYXMsIDEwMDAwMDAwMDBuKTtcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbCgoYnVpbGRlciBhcyBhbnkpLl9tYXhQcmlvcml0eUZlZVBlckdhcywgNTAwMDAwMDAwbik7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHRocm93IGVycm9yIGZvciBpbnZhbGlkIG5vbmNlIGFuZCBnYXMnLCAoKSA9PiB7XG4gICAgICBjb25zdCBidWlsZGVyID0gbmV3IFRpcDIwVHJhbnNhY3Rpb25CdWlsZGVyKG1vY2tDb2luQ29uZmlnKTtcbiAgICAgIGFzc2VydC50aHJvd3MoKCkgPT4gYnVpbGRlci5ub25jZSgtMSksIC9JbnZhbGlkIG5vbmNlLyk7XG4gICAgICBhc3NlcnQudGhyb3dzKCgpID0+IGJ1aWxkZXIuZ2FzKDBuKSwgL0ludmFsaWQgZ2FzIGxpbWl0Lyk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdNZXRob2QgY2hhaW5pbmcnLCAoKSA9PiB7XG4gICAgaXQoJ3Nob3VsZCBzdXBwb3J0IGZsdWVudCBpbnRlcmZhY2UnLCAoKSA9PiB7XG4gICAgICBjb25zdCBidWlsZGVyID0gbmV3IFRpcDIwVHJhbnNhY3Rpb25CdWlsZGVyKG1vY2tDb2luQ29uZmlnKTtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGJ1aWxkZXJcbiAgICAgICAgLmFkZE9wZXJhdGlvbih7IHRva2VuOiBtb2NrVG9rZW4sIHRvOiBtb2NrUmVjaXBpZW50LCBhbW91bnQ6ICcxMDAnLCBtZW1vOiAnNScgfSlcbiAgICAgICAgLmZlZVRva2VuKG1vY2tGZWVUb2tlbilcbiAgICAgICAgLm5vbmNlKDEwKVxuICAgICAgICAuZ2FzKDQwMDAwMG4pXG4gICAgICAgIC5tYXhGZWVQZXJHYXMoMjAwMDAwMDAwMG4pXG4gICAgICAgIC5tYXhQcmlvcml0eUZlZVBlckdhcygxMDAwMDAwMDAwbik7XG5cbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChyZXN1bHQsIGJ1aWxkZXIpO1xuICAgIH0pO1xuICB9KTtcbn0pO1xuXG5kZXNjcmliZSgnVElQLTIwIENvbnN0YW50cycsICgpID0+IHtcbiAgaXQoJ3Nob3VsZCBoYXZlIGNvcnJlY3QgZGVjaW1hbCBwbGFjZXMnLCAoKSA9PiB7XG4gICAgYXNzZXJ0LnN0cmljdEVxdWFsKFRJUDIwX0RFQ0lNQUxTLCA2KTtcbiAgfSk7XG59KTtcblxuZGVzY3JpYmUoJ1RJUC0yMCBUcmFuc2FjdGlvbiBCdWlsZCcsICgpID0+IHtcbiAgY29uc3QgbW9ja1Rva2VuID0gZXRoZXJzLnV0aWxzLmdldEFkZHJlc3MoVEVTVE5FVF9UT0tFTlMuYWxwaGFVU0QuYWRkcmVzcyk7XG4gIGNvbnN0IG1vY2tSZWNpcGllbnQgPSBldGhlcnMudXRpbHMuZ2V0QWRkcmVzcyhURVNUX1JFQ0lQSUVOVF9BRERSRVNTKTtcbiAgY29uc3QgbW9ja0ZlZVRva2VuID0gZXRoZXJzLnV0aWxzLmdldEFkZHJlc3MoVEVTVE5FVF9UT0tFTlMuYmV0YVVTRC5hZGRyZXNzKTtcblxuICBkZXNjcmliZSgnQnVpbGQgVHJhbnNhY3Rpb24nLCAoKSA9PiB7XG4gICAgaXQoJ3Nob3VsZCBidWlsZCBzaW5nbGUtb3BlcmF0aW9uIHRyYW5zYWN0aW9uJywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgYnVpbGRlciA9IG5ldyBUaXAyMFRyYW5zYWN0aW9uQnVpbGRlcihtb2NrQ29pbkNvbmZpZyk7XG4gICAgICBidWlsZGVyXG4gICAgICAgIC5hZGRPcGVyYXRpb24oeyB0b2tlbjogbW9ja1Rva2VuLCB0bzogbW9ja1JlY2lwaWVudCwgYW1vdW50OiAnMTAwJywgbWVtbzogJzEnIH0pXG4gICAgICAgIC5mZWVUb2tlbihtb2NrRmVlVG9rZW4pXG4gICAgICAgIC5ub25jZSgwKVxuICAgICAgICAuZ2FzKDEwMDAwMG4pXG4gICAgICAgIC5tYXhGZWVQZXJHYXMoVFhfUEFSQU1TLmRlZmF1bHRNYXhGZWVQZXJHYXMpXG4gICAgICAgIC5tYXhQcmlvcml0eUZlZVBlckdhcyhUWF9QQVJBTVMuZGVmYXVsdE1heFByaW9yaXR5RmVlUGVyR2FzKTtcblxuICAgICAgY29uc3QgdHggPSAoYXdhaXQgYnVpbGRlci5idWlsZCgpKSBhcyBUaXAyMFRyYW5zYWN0aW9uO1xuXG4gICAgICBhc3NlcnQub2sodHggaW5zdGFuY2VvZiBUaXAyMFRyYW5zYWN0aW9uKTtcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbCh0eC5nZXRPcGVyYXRpb25Db3VudCgpLCAxKTtcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbCh0eC5nZXRGZWVUb2tlbigpLCBtb2NrRmVlVG9rZW4pO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBidWlsZCBiYXRjaCB0cmFuc2FjdGlvbiB3aXRoIG11bHRpcGxlIG9wZXJhdGlvbnMnLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCBidWlsZGVyID0gbmV3IFRpcDIwVHJhbnNhY3Rpb25CdWlsZGVyKG1vY2tDb2luQ29uZmlnKTtcbiAgICAgIGJ1aWxkZXJcbiAgICAgICAgLmFkZE9wZXJhdGlvbih7IHRva2VuOiBURVNUTkVUX1RPS0VOUy5hbHBoYVVTRC5hZGRyZXNzLCB0bzogbW9ja1JlY2lwaWVudCwgYW1vdW50OiAnMTAnLCBtZW1vOiAnMScgfSlcbiAgICAgICAgLmFkZE9wZXJhdGlvbih7IHRva2VuOiBURVNUTkVUX1RPS0VOUy5iZXRhVVNELmFkZHJlc3MsIHRvOiBtb2NrUmVjaXBpZW50LCBhbW91bnQ6ICcyMCcsIG1lbW86ICcyJyB9KVxuICAgICAgICAuYWRkT3BlcmF0aW9uKHsgdG9rZW46IFRFU1RORVRfVE9LRU5TLnRoZXRhVVNELmFkZHJlc3MsIHRvOiBtb2NrUmVjaXBpZW50LCBhbW91bnQ6ICczMCcsIG1lbW86ICczJyB9KVxuICAgICAgICAuZmVlVG9rZW4obW9ja0ZlZVRva2VuKVxuICAgICAgICAubm9uY2UoNDIpXG4gICAgICAgIC5nYXMoMzAwMDAwbilcbiAgICAgICAgLm1heEZlZVBlckdhcyhUWF9QQVJBTVMuZGVmYXVsdE1heEZlZVBlckdhcylcbiAgICAgICAgLm1heFByaW9yaXR5RmVlUGVyR2FzKFRYX1BBUkFNUy5kZWZhdWx0TWF4UHJpb3JpdHlGZWVQZXJHYXMpO1xuXG4gICAgICBjb25zdCB0eCA9IChhd2FpdCBidWlsZGVyLmJ1aWxkKCkpIGFzIFRpcDIwVHJhbnNhY3Rpb247XG5cbiAgICAgIGFzc2VydC5vayh0eCBpbnN0YW5jZW9mIFRpcDIwVHJhbnNhY3Rpb24pO1xuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHR4LmdldE9wZXJhdGlvbkNvdW50KCksIDMpO1xuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHR4LmlzQmF0Y2goKSwgdHJ1ZSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGJ1aWxkIHRyYW5zYWN0aW9uIHdpdGhvdXQgZmVlIHRva2VuJywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgYnVpbGRlciA9IG5ldyBUaXAyMFRyYW5zYWN0aW9uQnVpbGRlcihtb2NrQ29pbkNvbmZpZyk7XG4gICAgICBidWlsZGVyXG4gICAgICAgIC5hZGRPcGVyYXRpb24oeyB0b2tlbjogbW9ja1Rva2VuLCB0bzogbW9ja1JlY2lwaWVudCwgYW1vdW50OiAnNTAnIH0pXG4gICAgICAgIC5ub25jZSgxKVxuICAgICAgICAuZ2FzKDEwMDAwMG4pXG4gICAgICAgIC5tYXhGZWVQZXJHYXMoVFhfUEFSQU1TLmRlZmF1bHRNYXhGZWVQZXJHYXMpXG4gICAgICAgIC5tYXhQcmlvcml0eUZlZVBlckdhcyhUWF9QQVJBTVMuZGVmYXVsdE1heFByaW9yaXR5RmVlUGVyR2FzKTtcblxuICAgICAgY29uc3QgdHggPSAoYXdhaXQgYnVpbGRlci5idWlsZCgpKSBhcyBUaXAyMFRyYW5zYWN0aW9uO1xuXG4gICAgICBhc3NlcnQub2sodHggaW5zdGFuY2VvZiBUaXAyMFRyYW5zYWN0aW9uKTtcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbCh0eC5nZXRGZWVUb2tlbigpLCB1bmRlZmluZWQpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnQnVpbGQgVmFsaWRhdGlvbiBFcnJvcnMnLCAoKSA9PiB7XG4gICAgaXQoJ3Nob3VsZCB0aHJvdyBlcnJvciB3aGVuIG5vIG9wZXJhdGlvbnMgYWRkZWQnLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCBidWlsZGVyID0gbmV3IFRpcDIwVHJhbnNhY3Rpb25CdWlsZGVyKG1vY2tDb2luQ29uZmlnKTtcbiAgICAgIGJ1aWxkZXIubm9uY2UoMCkuZ2FzKDEwMDAwMG4pLm1heEZlZVBlckdhcygxMDAwMDAwMDAwbikubWF4UHJpb3JpdHlGZWVQZXJHYXMoNTAwMDAwMDAwbik7XG4gICAgICBhd2FpdCBhc3NlcnQucmVqZWN0cyhhc3luYyAoKSA9PiBhd2FpdCBidWlsZGVyLmJ1aWxkKCksIC9BdCBsZWFzdCBvbmUgb3BlcmF0aW9uIG9yIHJhdyBjYWxsIGlzIHJlcXVpcmVkLyk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHRocm93IGVycm9yIHdoZW4gbm9uY2Ugbm90IHNldCcsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IGJ1aWxkZXIgPSBuZXcgVGlwMjBUcmFuc2FjdGlvbkJ1aWxkZXIobW9ja0NvaW5Db25maWcpO1xuICAgICAgYnVpbGRlclxuICAgICAgICAuYWRkT3BlcmF0aW9uKHsgdG9rZW46IG1vY2tUb2tlbiwgdG86IG1vY2tSZWNpcGllbnQsIGFtb3VudDogJzEwMCcgfSlcbiAgICAgICAgLmdhcygxMDAwMDBuKVxuICAgICAgICAubWF4RmVlUGVyR2FzKDEwMDAwMDAwMDBuKVxuICAgICAgICAubWF4UHJpb3JpdHlGZWVQZXJHYXMoNTAwMDAwMDAwbik7XG4gICAgICBhd2FpdCBhc3NlcnQucmVqZWN0cyhhc3luYyAoKSA9PiBhd2FpdCBidWlsZGVyLmJ1aWxkKCksIEVSUk9SX01FU1NBR0VTLm1pc3NpbmdOb25jZSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHRocm93IGVycm9yIHdoZW4gZ2FzIG5vdCBzZXQnLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCBidWlsZGVyID0gbmV3IFRpcDIwVHJhbnNhY3Rpb25CdWlsZGVyKG1vY2tDb2luQ29uZmlnKTtcbiAgICAgIGJ1aWxkZXJcbiAgICAgICAgLmFkZE9wZXJhdGlvbih7IHRva2VuOiBtb2NrVG9rZW4sIHRvOiBtb2NrUmVjaXBpZW50LCBhbW91bnQ6ICcxMDAnIH0pXG4gICAgICAgIC5ub25jZSgwKVxuICAgICAgICAubWF4RmVlUGVyR2FzKDEwMDAwMDAwMDBuKVxuICAgICAgICAubWF4UHJpb3JpdHlGZWVQZXJHYXMoNTAwMDAwMDAwbik7XG4gICAgICBhd2FpdCBhc3NlcnQucmVqZWN0cyhhc3luYyAoKSA9PiBhd2FpdCBidWlsZGVyLmJ1aWxkKCksIEVSUk9SX01FU1NBR0VTLm1pc3NpbmdHYXMpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCB0aHJvdyBlcnJvciB3aGVuIG1heEZlZVBlckdhcyBub3Qgc2V0JywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgYnVpbGRlciA9IG5ldyBUaXAyMFRyYW5zYWN0aW9uQnVpbGRlcihtb2NrQ29pbkNvbmZpZyk7XG4gICAgICBidWlsZGVyXG4gICAgICAgIC5hZGRPcGVyYXRpb24oeyB0b2tlbjogbW9ja1Rva2VuLCB0bzogbW9ja1JlY2lwaWVudCwgYW1vdW50OiAnMTAwJyB9KVxuICAgICAgICAubm9uY2UoMClcbiAgICAgICAgLmdhcygxMDAwMDBuKVxuICAgICAgICAubWF4UHJpb3JpdHlGZWVQZXJHYXMoNTAwMDAwMDAwbik7XG4gICAgICBhd2FpdCBhc3NlcnQucmVqZWN0cyhhc3luYyAoKSA9PiBhd2FpdCBidWlsZGVyLmJ1aWxkKCksIEVSUk9SX01FU1NBR0VTLm1pc3NpbmdNYXhGZWVQZXJHYXMpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCB0aHJvdyBlcnJvciB3aGVuIG1heFByaW9yaXR5RmVlUGVyR2FzIG5vdCBzZXQnLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCBidWlsZGVyID0gbmV3IFRpcDIwVHJhbnNhY3Rpb25CdWlsZGVyKG1vY2tDb2luQ29uZmlnKTtcbiAgICAgIGJ1aWxkZXJcbiAgICAgICAgLmFkZE9wZXJhdGlvbih7IHRva2VuOiBtb2NrVG9rZW4sIHRvOiBtb2NrUmVjaXBpZW50LCBhbW91bnQ6ICcxMDAnIH0pXG4gICAgICAgIC5ub25jZSgwKVxuICAgICAgICAuZ2FzKDEwMDAwMG4pXG4gICAgICAgIC5tYXhGZWVQZXJHYXMoMTAwMDAwMDAwMG4pO1xuICAgICAgYXdhaXQgYXNzZXJ0LnJlamVjdHMoYXN5bmMgKCkgPT4gYXdhaXQgYnVpbGRlci5idWlsZCgpLCBFUlJPUl9NRVNTQUdFUy5taXNzaW5nTWF4UHJpb3JpdHlGZWVQZXJHYXMpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnUm91bmQtVHJpcDogQnVpbGQgLT4gU2VyaWFsaXplIC0+IE9wZXJhdGlvbnMgQ2hlY2snLCAoKSA9PiB7XG4gICAgaXQoJ3Nob3VsZCBwcmVzZXJ2ZSBvcGVyYXRpb24gZGF0YSB0aHJvdWdoIGJ1aWxkJywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3Qgb3BlcmF0aW9ucyA9IFt7IHRva2VuOiBtb2NrVG9rZW4sIHRvOiBtb2NrUmVjaXBpZW50LCBhbW91bnQ6ICcxMjMnLCBtZW1vOiAnMScgfV07XG5cbiAgICAgIGNvbnN0IGJ1aWxkZXIgPSBuZXcgVGlwMjBUcmFuc2FjdGlvbkJ1aWxkZXIobW9ja0NvaW5Db25maWcpO1xuICAgICAgYnVpbGRlclxuICAgICAgICAuYWRkT3BlcmF0aW9uKG9wZXJhdGlvbnNbMF0pXG4gICAgICAgIC5mZWVUb2tlbihtb2NrRmVlVG9rZW4pXG4gICAgICAgIC5ub25jZSgxMClcbiAgICAgICAgLmdhcygxNTAwMDBuKVxuICAgICAgICAubWF4RmVlUGVyR2FzKDIwMDAwMDAwMDBuKVxuICAgICAgICAubWF4UHJpb3JpdHlGZWVQZXJHYXMoMTAwMDAwMDAwMG4pO1xuXG4gICAgICBjb25zdCB0eCA9IChhd2FpdCBidWlsZGVyLmJ1aWxkKCkpIGFzIFRpcDIwVHJhbnNhY3Rpb247XG4gICAgICBjb25zdCB0eE9wcyA9IHR4LmdldE9wZXJhdGlvbnMoKTtcblxuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHR4T3BzLmxlbmd0aCwgMSk7XG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwodHhPcHNbMF0udG9rZW4sIG9wZXJhdGlvbnNbMF0udG9rZW4pO1xuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHR4T3BzWzBdLnRvLCBvcGVyYXRpb25zWzBdLnRvKTtcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbCh0eE9wc1swXS5hbW91bnQsIG9wZXJhdGlvbnNbMF0uYW1vdW50KTtcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbCh0eE9wc1swXS5tZW1vLCBvcGVyYXRpb25zWzBdLm1lbW8pO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnQnVpbGQgLT4gU2VyaWFsaXplIC0+IFNpZ24gRmxvdycsICgpID0+IHtcbiAgICBpdCgnc2hvdWxkIHByb2R1Y2Ugc2VyaWFsaXphYmxlIHVuc2lnbmVkIHRyYW5zYWN0aW9uJywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgYnVpbGRlciA9IG5ldyBUaXAyMFRyYW5zYWN0aW9uQnVpbGRlcihtb2NrQ29pbkNvbmZpZyk7XG4gICAgICBidWlsZGVyXG4gICAgICAgIC5hZGRPcGVyYXRpb24oeyB0b2tlbjogbW9ja1Rva2VuLCB0bzogbW9ja1JlY2lwaWVudCwgYW1vdW50OiAnNTAnLCBtZW1vOiAnMicgfSlcbiAgICAgICAgLmZlZVRva2VuKG1vY2tGZWVUb2tlbilcbiAgICAgICAgLm5vbmNlKDUpXG4gICAgICAgIC5nYXMoMTAwMDAwbilcbiAgICAgICAgLm1heEZlZVBlckdhcygyMDAwMDAwMDAwbilcbiAgICAgICAgLm1heFByaW9yaXR5RmVlUGVyR2FzKDEwMDAwMDAwMDBuKTtcblxuICAgICAgY29uc3QgdHggPSAoYXdhaXQgYnVpbGRlci5idWlsZCgpKSBhcyBUaXAyMFRyYW5zYWN0aW9uO1xuICAgICAgY29uc3QgdW5zaWduZWRIZXggPSBhd2FpdCB0eC5zZXJpYWxpemUoKTtcblxuICAgICAgYXNzZXJ0Lm9rKHVuc2lnbmVkSGV4LnN0YXJ0c1dpdGgoQUFfVFJBTlNBQ1RJT05fVFlQRSkpO1xuICAgICAgYXNzZXJ0Lm9rKC9eMHhbMC05YS1mXSskL2kudGVzdCh1bnNpZ25lZEhleCkpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBzdXBwb3J0IGZ1bGwgc2lnbiBhbmQgYnJvYWRjYXN0IGZsb3cnLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCBidWlsZGVyID0gbmV3IFRpcDIwVHJhbnNhY3Rpb25CdWlsZGVyKG1vY2tDb2luQ29uZmlnKTtcbiAgICAgIGJ1aWxkZXJcbiAgICAgICAgLmFkZE9wZXJhdGlvbih7IHRva2VuOiBtb2NrVG9rZW4sIHRvOiBtb2NrUmVjaXBpZW50LCBhbW91bnQ6ICc3NScsIG1lbW86ICczJyB9KVxuICAgICAgICAuZmVlVG9rZW4obW9ja0ZlZVRva2VuKVxuICAgICAgICAubm9uY2UoMTIzKVxuICAgICAgICAuZ2FzKDEyMDAwMG4pXG4gICAgICAgIC5tYXhGZWVQZXJHYXMoMjUwMDAwMDAwMG4pXG4gICAgICAgIC5tYXhQcmlvcml0eUZlZVBlckdhcygxMjAwMDAwMDAwbik7XG5cbiAgICAgIGNvbnN0IHR4ID0gKGF3YWl0IGJ1aWxkZXIuYnVpbGQoKSkgYXMgVGlwMjBUcmFuc2FjdGlvbjtcbiAgICAgIGNvbnN0IHVuc2lnbmVkSGV4ID0gYXdhaXQgdHguc2VyaWFsaXplKCk7XG5cbiAgICAgIHR4LnNldFNpZ25hdHVyZShTSUdOQVRVUkVfVEVTVF9EQVRBLnZhbGlkU2lnbmF0dXJlKTtcblxuICAgICAgY29uc3QgYnJvYWRjYXN0SGV4ID0gYXdhaXQgdHgudG9Ccm9hZGNhc3RGb3JtYXQoKTtcbiAgICAgIGFzc2VydC5vayhicm9hZGNhc3RIZXguc3RhcnRzV2l0aChBQV9UUkFOU0FDVElPTl9UWVBFKSk7XG4gICAgICBhc3NlcnQub2soYnJvYWRjYXN0SGV4Lmxlbmd0aCA+IHVuc2lnbmVkSGV4Lmxlbmd0aCwgJ1NpZ25lZCBzaG91bGQgYmUgbG9uZ2VyJyk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdUcmFuc2FjdGlvbiBKU09OIFJlcHJlc2VudGF0aW9uJywgKCkgPT4ge1xuICAgIGl0KCdzaG91bGQgcHJvZHVjZSBjb25zaXN0ZW50IEpTT04gZnJvbSBidWlsdCB0cmFuc2FjdGlvbicsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IGJ1aWxkZXIgPSBuZXcgVGlwMjBUcmFuc2FjdGlvbkJ1aWxkZXIobW9ja0NvaW5Db25maWcpO1xuICAgICAgYnVpbGRlclxuICAgICAgICAuYWRkT3BlcmF0aW9uKHsgdG9rZW46IG1vY2tUb2tlbiwgdG86IG1vY2tSZWNpcGllbnQsIGFtb3VudDogJzEwMCcsIG1lbW86ICc0JyB9KVxuICAgICAgICAuZmVlVG9rZW4obW9ja0ZlZVRva2VuKVxuICAgICAgICAubm9uY2UoNTApXG4gICAgICAgIC5nYXMoMjAwMDAwbilcbiAgICAgICAgLm1heEZlZVBlckdhcygzMDAwMDAwMDAwbilcbiAgICAgICAgLm1heFByaW9yaXR5RmVlUGVyR2FzKDE1MDAwMDAwMDBuKTtcblxuICAgICAgY29uc3QgdHggPSAoYXdhaXQgYnVpbGRlci5idWlsZCgpKSBhcyBUaXAyMFRyYW5zYWN0aW9uO1xuICAgICAgY29uc3QganNvbiA9IHR4LnRvSnNvbigpO1xuXG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwoanNvbi50eXBlLCBBQV9UUkFOU0FDVElPTl9UWVBFKTtcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChqc29uLm5vbmNlLCA1MCk7XG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwoanNvbi5nYXMsICcyMDAwMDAnKTtcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChqc29uLm1heEZlZVBlckdhcywgJzMwMDAwMDAwMDAnKTtcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChqc29uLm1heFByaW9yaXR5RmVlUGVyR2FzLCAnMTUwMDAwMDAwMCcpO1xuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKGpzb24uY2FsbENvdW50LCAxKTtcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChqc29uLmZlZVRva2VuLCBtb2NrRmVlVG9rZW4pO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnVHJhbnNhY3Rpb24gaWQgZ2V0dGVyJywgKCkgPT4ge1xuICAgIGl0KCd1bnNpZ25lZCBhbmQgc2lnbmVkIHRyYW5zYWN0aW9ucyBzaG91bGQgaGF2ZSBkaWZmZXJlbnQgaWRzJywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgYnVpbGRlciA9IG5ldyBUaXAyMFRyYW5zYWN0aW9uQnVpbGRlcihtb2NrQ29pbkNvbmZpZyk7XG4gICAgICBidWlsZGVyXG4gICAgICAgIC5hZGRPcGVyYXRpb24oeyB0b2tlbjogbW9ja1Rva2VuLCB0bzogbW9ja1JlY2lwaWVudCwgYW1vdW50OiAnMTAnIH0pXG4gICAgICAgIC5ub25jZSgxKVxuICAgICAgICAuZ2FzKDEwMDAwMG4pXG4gICAgICAgIC5tYXhGZWVQZXJHYXMoVFhfUEFSQU1TLmRlZmF1bHRNYXhGZWVQZXJHYXMpXG4gICAgICAgIC5tYXhQcmlvcml0eUZlZVBlckdhcyhUWF9QQVJBTVMuZGVmYXVsdE1heFByaW9yaXR5RmVlUGVyR2FzKTtcblxuICAgICAgY29uc3QgdHggPSAoYXdhaXQgYnVpbGRlci5idWlsZCgpKSBhcyBUaXAyMFRyYW5zYWN0aW9uO1xuICAgICAgY29uc3QgdW5zaWduZWRJZCA9IHR4LmlkO1xuXG4gICAgICB0eC5zZXRTaWduYXR1cmUoU0lHTkFUVVJFX1RFU1RfREFUQS52YWxpZFNpZ25hdHVyZSk7XG4gICAgICBjb25zdCBzaWduZWRJZCA9IHR4LmlkO1xuXG4gICAgICBhc3NlcnQubm90U3RyaWN0RXF1YWwodW5zaWduZWRJZCwgc2lnbmVkSWQsICdTaWduZWQgYW5kIHVuc2lnbmVkIHR4IHNob3VsZCBoYXZlIGRpZmZlcmVudCBpZHMnKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ291dHB1dHMgLyBpbnB1dHMgcG9wdWxhdGlvbicsICgpID0+IHtcbiAgICBpdCgnc2hvdWxkIGV4cG9zZSBvdXRwdXRzIHdpdGggYmFzZS11bml0IHZhbHVlIGFuZCB0b2tlbiBhZGRyZXNzIGFzIGNvaW4nLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCBidWlsZGVyID0gbmV3IFRpcDIwVHJhbnNhY3Rpb25CdWlsZGVyKG1vY2tDb2luQ29uZmlnKTtcbiAgICAgIGJ1aWxkZXJcbiAgICAgICAgLmFkZE9wZXJhdGlvbih7IHRva2VuOiBtb2NrVG9rZW4sIHRvOiBtb2NrUmVjaXBpZW50LCBhbW91bnQ6ICcxLjUnLCBtZW1vOiAnNycgfSlcbiAgICAgICAgLm5vbmNlKDApXG4gICAgICAgIC5nYXMoMTAwMDAwbilcbiAgICAgICAgLm1heEZlZVBlckdhcyhUWF9QQVJBTVMuZGVmYXVsdE1heEZlZVBlckdhcylcbiAgICAgICAgLm1heFByaW9yaXR5RmVlUGVyR2FzKFRYX1BBUkFNUy5kZWZhdWx0TWF4UHJpb3JpdHlGZWVQZXJHYXMpO1xuXG4gICAgICBjb25zdCB0eCA9IChhd2FpdCBidWlsZGVyLmJ1aWxkKCkpIGFzIFRpcDIwVHJhbnNhY3Rpb247XG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwodHgub3V0cHV0cy5sZW5ndGgsIDEpO1xuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHR4Lm91dHB1dHNbMF0uYWRkcmVzcywgbW9ja1JlY2lwaWVudCk7XG4gICAgICAvLyAxLjUgdG9rZW5zICogMTBeNiA9IDFfNTAwXzAwMCBiYXNlIHVuaXRzXG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwodHgub3V0cHV0c1swXS52YWx1ZSwgJzE1MDAwMDAnKTtcbiAgICAgIC8vIGNvaW4gaXMgdGhlIHRva2VuIGNvbnRyYWN0IGFkZHJlc3MsIG5vdCB0aGUgY2hhaW4gbmFtZVxuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHR4Lm91dHB1dHNbMF0uY29pbj8udG9Mb3dlckNhc2UoKSwgbW9ja1Rva2VuLnRvTG93ZXJDYXNlKCkpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBleHBvc2UgYSBzaW5nbGUgaW5wdXQgd2l0aCB0aGUgdG90YWwgaW4gYmFzZSB1bml0cycsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IGJ1aWxkZXIgPSBuZXcgVGlwMjBUcmFuc2FjdGlvbkJ1aWxkZXIobW9ja0NvaW5Db25maWcpO1xuICAgICAgYnVpbGRlclxuICAgICAgICAuYWRkT3BlcmF0aW9uKHsgdG9rZW46IG1vY2tUb2tlbiwgdG86IG1vY2tSZWNpcGllbnQsIGFtb3VudDogJzEuNScgfSlcbiAgICAgICAgLmFkZE9wZXJhdGlvbih7IHRva2VuOiBtb2NrVG9rZW4sIHRvOiBtb2NrUmVjaXBpZW50LCBhbW91bnQ6ICczLjUnIH0pXG4gICAgICAgIC5ub25jZSgwKVxuICAgICAgICAuZ2FzKDEwMDAwMG4pXG4gICAgICAgIC5tYXhGZWVQZXJHYXMoVFhfUEFSQU1TLmRlZmF1bHRNYXhGZWVQZXJHYXMpXG4gICAgICAgIC5tYXhQcmlvcml0eUZlZVBlckdhcyhUWF9QQVJBTVMuZGVmYXVsdE1heFByaW9yaXR5RmVlUGVyR2FzKTtcblxuICAgICAgY29uc3QgdHggPSAoYXdhaXQgYnVpbGRlci5idWlsZCgpKSBhcyBUaXAyMFRyYW5zYWN0aW9uO1xuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHR4LmlucHV0cy5sZW5ndGgsIDEpO1xuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHR4LmlucHV0c1swXS5hZGRyZXNzLCAnJyk7XG4gICAgICAvLyAoMS41ICsgMy41KSB0b2tlbnMgKiAxMF42ID0gNV8wMDBfMDAwIGJhc2UgdW5pdHNcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbCh0eC5pbnB1dHNbMF0udmFsdWUsICc1MDAwMDAwJyk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdSb3VuZC1UcmlwOiBCdWlsZCAtPiBTZXJpYWxpemUgLT4gRnJvbSAoZGVzZXJpYWxpemF0aW9uKScsICgpID0+IHtcbiAgICBpdCgnc2hvdWxkIHJvdW5kLXRyaXAgYSBzaW5nbGUtb3BlcmF0aW9uIHRyYW5zYWN0aW9uIHdpdGhvdXQgYSBzaWduYXR1cmUnLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCBvcGVyYXRpb24gPSB7IHRva2VuOiBtb2NrVG9rZW4sIHRvOiBtb2NrUmVjaXBpZW50LCBhbW91bnQ6ICcyNS41JywgbWVtbzogJzEyMzQ1JyB9O1xuXG4gICAgICBjb25zdCBidWlsZGVyID0gbmV3IFRpcDIwVHJhbnNhY3Rpb25CdWlsZGVyKG1vY2tDb2luQ29uZmlnKTtcbiAgICAgIGJ1aWxkZXJcbiAgICAgICAgLmFkZE9wZXJhdGlvbihvcGVyYXRpb24pXG4gICAgICAgIC5mZWVUb2tlbihtb2NrRmVlVG9rZW4pXG4gICAgICAgIC5ub25jZSg3KVxuICAgICAgICAuZ2FzKDE1MDAwMG4pXG4gICAgICAgIC5tYXhGZWVQZXJHYXMoVFhfUEFSQU1TLmRlZmF1bHRNYXhGZWVQZXJHYXMpXG4gICAgICAgIC5tYXhQcmlvcml0eUZlZVBlckdhcyhUWF9QQVJBTVMuZGVmYXVsdE1heFByaW9yaXR5RmVlUGVyR2FzKTtcblxuICAgICAgY29uc3Qgb3JpZ2luYWxUeCA9IChhd2FpdCBidWlsZGVyLmJ1aWxkKCkpIGFzIFRpcDIwVHJhbnNhY3Rpb247XG4gICAgICBjb25zdCBzZXJpYWxpemVkID0gYXdhaXQgb3JpZ2luYWxUeC5zZXJpYWxpemUoKTtcblxuICAgICAgLy8gRGVzZXJpYWxpemUgdmlhIGZyb20oKVxuICAgICAgY29uc3QgYnVpbGRlcjIgPSBuZXcgVGlwMjBUcmFuc2FjdGlvbkJ1aWxkZXIobW9ja0NvaW5Db25maWcpO1xuICAgICAgYnVpbGRlcjIuZnJvbShzZXJpYWxpemVkKTtcbiAgICAgIGNvbnN0IHJlc3RvcmVkVHggPSAoYXdhaXQgYnVpbGRlcjIuYnVpbGQoKSkgYXMgVGlwMjBUcmFuc2FjdGlvbjtcblxuICAgICAgY29uc3Qgb3BzID0gcmVzdG9yZWRUeC5nZXRPcGVyYXRpb25zKCk7XG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwob3BzLmxlbmd0aCwgMSk7XG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwob3BzWzBdLnRva2VuLnRvTG93ZXJDYXNlKCksIG9wZXJhdGlvbi50b2tlbi50b0xvd2VyQ2FzZSgpKTtcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChvcHNbMF0udG8udG9Mb3dlckNhc2UoKSwgb3BlcmF0aW9uLnRvLnRvTG93ZXJDYXNlKCkpO1xuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKG9wc1swXS5hbW91bnQsIG9wZXJhdGlvbi5hbW91bnQpO1xuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKG9wc1swXS5tZW1vLCBvcGVyYXRpb24ubWVtbyk7XG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwocmVzdG9yZWRUeC5nZXRGZWVUb2tlbigpPy50b0xvd2VyQ2FzZSgpLCBtb2NrRmVlVG9rZW4udG9Mb3dlckNhc2UoKSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHJvdW5kLXRyaXAgYSBiYXRjaCB0cmFuc2FjdGlvbicsIGFzeW5jICgpID0+IHtcbiAgICAgIC8vIFVzZSBhbW91bnRzIHRoYXQgbWF0Y2ggdGlwMjBVbml0c1RvQW1vdW50IG91dHB1dDogZXRoZXJzIGZvcm1hdFVuaXRzIGFsd2F5cyBpbmNsdWRlcyBkZWNpbWFsXG4gICAgICBjb25zdCBvcGVyYXRpb25zID0gW1xuICAgICAgICB7IHRva2VuOiBURVNUTkVUX1RPS0VOUy5hbHBoYVVTRC5hZGRyZXNzLCB0bzogbW9ja1JlY2lwaWVudCwgYW1vdW50OiAnMTAuMCcsIG1lbW86ICcxJyB9LFxuICAgICAgICB7IHRva2VuOiBURVNUTkVUX1RPS0VOUy5iZXRhVVNELmFkZHJlc3MsIHRvOiBtb2NrUmVjaXBpZW50LCBhbW91bnQ6ICcyMC4wJywgbWVtbzogJzInIH0sXG4gICAgICBdO1xuXG4gICAgICBjb25zdCBidWlsZGVyID0gbmV3IFRpcDIwVHJhbnNhY3Rpb25CdWlsZGVyKG1vY2tDb2luQ29uZmlnKTtcbiAgICAgIGJ1aWxkZXJcbiAgICAgICAgLmFkZE9wZXJhdGlvbihvcGVyYXRpb25zWzBdKVxuICAgICAgICAuYWRkT3BlcmF0aW9uKG9wZXJhdGlvbnNbMV0pXG4gICAgICAgIC5ub25jZSg0MilcbiAgICAgICAgLmdhcygyNTAwMDBuKVxuICAgICAgICAubWF4RmVlUGVyR2FzKFRYX1BBUkFNUy5kZWZhdWx0TWF4RmVlUGVyR2FzKVxuICAgICAgICAubWF4UHJpb3JpdHlGZWVQZXJHYXMoVFhfUEFSQU1TLmRlZmF1bHRNYXhQcmlvcml0eUZlZVBlckdhcyk7XG5cbiAgICAgIGNvbnN0IG9yaWdpbmFsVHggPSAoYXdhaXQgYnVpbGRlci5idWlsZCgpKSBhcyBUaXAyMFRyYW5zYWN0aW9uO1xuICAgICAgY29uc3Qgc2VyaWFsaXplZCA9IGF3YWl0IG9yaWdpbmFsVHguc2VyaWFsaXplKCk7XG5cbiAgICAgIGNvbnN0IGJ1aWxkZXIyID0gbmV3IFRpcDIwVHJhbnNhY3Rpb25CdWlsZGVyKG1vY2tDb2luQ29uZmlnKTtcbiAgICAgIGJ1aWxkZXIyLmZyb20oc2VyaWFsaXplZCk7XG4gICAgICBjb25zdCByZXN0b3JlZFR4ID0gKGF3YWl0IGJ1aWxkZXIyLmJ1aWxkKCkpIGFzIFRpcDIwVHJhbnNhY3Rpb247XG5cbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChyZXN0b3JlZFR4LmdldE9wZXJhdGlvbkNvdW50KCksIDIpO1xuICAgICAgYXNzZXJ0Lm9rKHJlc3RvcmVkVHguaXNCYXRjaCgpKTtcblxuICAgICAgY29uc3QganNvbiA9IHJlc3RvcmVkVHgudG9Kc29uKCk7XG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwoanNvbi5ub25jZSwgNDIpO1xuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKGpzb24uZ2FzLCAnMjUwMDAwJyk7XG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwoanNvbi5tYXhGZWVQZXJHYXMsIFRYX1BBUkFNUy5kZWZhdWx0TWF4RmVlUGVyR2FzLnRvU3RyaW5nKCkpO1xuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKGpzb24ubWF4UHJpb3JpdHlGZWVQZXJHYXMsIFRYX1BBUkFNUy5kZWZhdWx0TWF4UHJpb3JpdHlGZWVQZXJHYXMudG9TdHJpbmcoKSk7XG5cbiAgICAgIGNvbnN0IG9wcyA9IHJlc3RvcmVkVHguZ2V0T3BlcmF0aW9ucygpO1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBvcGVyYXRpb25zLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChvcHNbaV0udG9rZW4udG9Mb3dlckNhc2UoKSwgb3BlcmF0aW9uc1tpXS50b2tlbi50b0xvd2VyQ2FzZSgpKTtcbiAgICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKG9wc1tpXS50by50b0xvd2VyQ2FzZSgpLCBtb2NrUmVjaXBpZW50LnRvTG93ZXJDYXNlKCkpO1xuICAgICAgICBhc3NlcnQuc3RyaWN0RXF1YWwob3BzW2ldLmFtb3VudCwgb3BlcmF0aW9uc1tpXS5hbW91bnQpO1xuICAgICAgICBhc3NlcnQuc3RyaWN0RXF1YWwob3BzW2ldLm1lbW8sIG9wZXJhdGlvbnNbaV0ubWVtbyk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHJvdW5kLXRyaXAgYSBzaWduZWQgdHJhbnNhY3Rpb24gYW5kIHByZXNlcnZlIHRoZSBzaWduYXR1cmUnLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCBidWlsZGVyID0gbmV3IFRpcDIwVHJhbnNhY3Rpb25CdWlsZGVyKG1vY2tDb2luQ29uZmlnKTtcbiAgICAgIGJ1aWxkZXJcbiAgICAgICAgLmFkZE9wZXJhdGlvbih7IHRva2VuOiBtb2NrVG9rZW4sIHRvOiBtb2NrUmVjaXBpZW50LCBhbW91bnQ6ICc1JyB9KVxuICAgICAgICAubm9uY2UoOTkpXG4gICAgICAgIC5nYXMoMTAwMDAwbilcbiAgICAgICAgLm1heEZlZVBlckdhcyhUWF9QQVJBTVMuZGVmYXVsdE1heEZlZVBlckdhcylcbiAgICAgICAgLm1heFByaW9yaXR5RmVlUGVyR2FzKFRYX1BBUkFNUy5kZWZhdWx0TWF4UHJpb3JpdHlGZWVQZXJHYXMpO1xuXG4gICAgICBjb25zdCB0eCA9IChhd2FpdCBidWlsZGVyLmJ1aWxkKCkpIGFzIFRpcDIwVHJhbnNhY3Rpb247XG4gICAgICB0eC5zZXRTaWduYXR1cmUoU0lHTkFUVVJFX1RFU1RfREFUQS52YWxpZFNpZ25hdHVyZSk7XG4gICAgICBjb25zdCBzaWduZWRIZXggPSBhd2FpdCB0eC50b0Jyb2FkY2FzdEZvcm1hdCgpO1xuXG4gICAgICAvLyBEZXNlcmlhbGl6ZSB0aGUgc2lnbmVkIHRyYW5zYWN0aW9uXG4gICAgICBjb25zdCBidWlsZGVyMiA9IG5ldyBUaXAyMFRyYW5zYWN0aW9uQnVpbGRlcihtb2NrQ29pbkNvbmZpZyk7XG4gICAgICBidWlsZGVyMi5mcm9tKHNpZ25lZEhleCk7XG4gICAgICBjb25zdCByZXN0b3JlZFR4ID0gKGF3YWl0IGJ1aWxkZXIyLmJ1aWxkKCkpIGFzIFRpcDIwVHJhbnNhY3Rpb247XG5cbiAgICAgIGNvbnN0IHNpZyA9IHJlc3RvcmVkVHguZ2V0U2lnbmF0dXJlKCk7XG4gICAgICBhc3NlcnQub2soc2lnICE9PSB1bmRlZmluZWQsICdTaWduYXR1cmUgc2hvdWxkIGJlIHByZXNlcnZlZCcpO1xuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHNpZyEueVBhcml0eSwgU0lHTkFUVVJFX1RFU1RfREFUQS52YWxpZFNpZ25hdHVyZS55UGFyaXR5KTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgcHJvZHVjZSB0aGUgc2FtZSB0eCBpZCBhZnRlciBhIHNlcmlhbGl6YXRpb24gcm91bmQtdHJpcCcsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IGJ1aWxkZXIgPSBuZXcgVGlwMjBUcmFuc2FjdGlvbkJ1aWxkZXIobW9ja0NvaW5Db25maWcpO1xuICAgICAgYnVpbGRlclxuICAgICAgICAuYWRkT3BlcmF0aW9uKHsgdG9rZW46IG1vY2tUb2tlbiwgdG86IG1vY2tSZWNpcGllbnQsIGFtb3VudDogJzEwMC4wJywgbWVtbzogJzk5JyB9KVxuICAgICAgICAubm9uY2UoMylcbiAgICAgICAgLmdhcygxMDAwMDBuKVxuICAgICAgICAubWF4RmVlUGVyR2FzKFRYX1BBUkFNUy5kZWZhdWx0TWF4RmVlUGVyR2FzKVxuICAgICAgICAubWF4UHJpb3JpdHlGZWVQZXJHYXMoVFhfUEFSQU1TLmRlZmF1bHRNYXhQcmlvcml0eUZlZVBlckdhcyk7XG5cbiAgICAgIGNvbnN0IG9yaWdpbmFsVHggPSAoYXdhaXQgYnVpbGRlci5idWlsZCgpKSBhcyBUaXAyMFRyYW5zYWN0aW9uO1xuICAgICAgY29uc3Qgc2VyaWFsaXplZCA9IGF3YWl0IG9yaWdpbmFsVHguc2VyaWFsaXplKCk7XG4gICAgICBjb25zdCBvcmlnaW5hbElkID0gb3JpZ2luYWxUeC5pZDtcblxuICAgICAgY29uc3QgYnVpbGRlcjIgPSBuZXcgVGlwMjBUcmFuc2FjdGlvbkJ1aWxkZXIobW9ja0NvaW5Db25maWcpO1xuICAgICAgYnVpbGRlcjIuZnJvbShzZXJpYWxpemVkKTtcbiAgICAgIGNvbnN0IHJlc3RvcmVkVHggPSAoYXdhaXQgYnVpbGRlcjIuYnVpbGQoKSkgYXMgVGlwMjBUcmFuc2FjdGlvbjtcblxuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHJlc3RvcmVkVHguaWQsIG9yaWdpbmFsSWQpO1xuXG4gICAgICBjb25zdCBvcmlnaW5hbEpzb24gPSBvcmlnaW5hbFR4LnRvSnNvbigpO1xuICAgICAgY29uc3QgcmVzdG9yZWRKc29uID0gcmVzdG9yZWRUeC50b0pzb24oKTtcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChyZXN0b3JlZEpzb24ubm9uY2UsIG9yaWdpbmFsSnNvbi5ub25jZSk7XG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwocmVzdG9yZWRKc29uLmdhcywgb3JpZ2luYWxKc29uLmdhcyk7XG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwocmVzdG9yZWRKc29uLm1heEZlZVBlckdhcywgb3JpZ2luYWxKc29uLm1heEZlZVBlckdhcyk7XG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwocmVzdG9yZWRKc29uLm1heFByaW9yaXR5RmVlUGVyR2FzLCBvcmlnaW5hbEpzb24ubWF4UHJpb3JpdHlGZWVQZXJHYXMpO1xuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHJlc3RvcmVkSnNvbi5mZWVUb2tlbiwgb3JpZ2luYWxKc29uLmZlZVRva2VuKTtcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChyZXN0b3JlZEpzb24uY2FsbENvdW50LCBvcmlnaW5hbEpzb24uY2FsbENvdW50KTtcblxuICAgICAgY29uc3Qgb3JpZ2luYWxPcHMgPSBvcmlnaW5hbFR4LmdldE9wZXJhdGlvbnMoKTtcbiAgICAgIGNvbnN0IHJlc3RvcmVkT3BzID0gcmVzdG9yZWRUeC5nZXRPcGVyYXRpb25zKCk7XG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwocmVzdG9yZWRPcHMubGVuZ3RoLCBvcmlnaW5hbE9wcy5sZW5ndGgpO1xuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHJlc3RvcmVkT3BzWzBdLnRva2VuLnRvTG93ZXJDYXNlKCksIG9yaWdpbmFsT3BzWzBdLnRva2VuLnRvTG93ZXJDYXNlKCkpO1xuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHJlc3RvcmVkT3BzWzBdLnRvLnRvTG93ZXJDYXNlKCksIG9yaWdpbmFsT3BzWzBdLnRvLnRvTG93ZXJDYXNlKCkpO1xuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHJlc3RvcmVkT3BzWzBdLmFtb3VudCwgb3JpZ2luYWxPcHNbMF0uYW1vdW50KTtcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChyZXN0b3JlZE9wc1swXS5tZW1vLCBvcmlnaW5hbE9wc1swXS5tZW1vKTtcblxuICAgICAgY29uc3QgcmVzdG9yZWRTZXJpYWxpemVkID0gYXdhaXQgcmVzdG9yZWRUeC5zZXJpYWxpemUoKTtcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChyZXN0b3JlZFNlcmlhbGl6ZWQsIHNlcmlhbGl6ZWQpO1xuICAgIH0pO1xuICB9KTtcbn0pO1xuXG5kZXNjcmliZSgnVGVtcG8gY29pbiAtIHBhcnNlVHJhbnNhY3Rpb24gLyB2ZXJpZnlUcmFuc2FjdGlvbicsICgpID0+IHtcbiAgbGV0IGJpdGdvOiBUZXN0Qml0R29BUEk7XG4gIGxldCBjb2luOiBhbnk7XG5cbiAgY29uc3QgbW9ja1Rva2VuID0gZXRoZXJzLnV0aWxzLmdldEFkZHJlc3MoVEVTVE5FVF9UT0tFTlMuYWxwaGFVU0QuYWRkcmVzcyk7XG4gIGNvbnN0IG1vY2tSZWNpcGllbnQgPSBldGhlcnMudXRpbHMuZ2V0QWRkcmVzcyhURVNUX1JFQ0lQSUVOVF9BRERSRVNTKTtcblxuICBiZWZvcmUoZnVuY3Rpb24gKCkge1xuICAgIGJpdGdvID0gVGVzdEJpdEdvLmRlY29yYXRlKEJpdEdvQVBJLCB7IGVudjogJ21vY2snIH0pO1xuICAgIGJpdGdvLnNhZmVSZWdpc3RlcigndHRlbXBvJywgKGJnOiBCaXRHb0Jhc2UpID0+IHtcbiAgICAgIGNvbnN0IG1vY2tTdGF0aWNzQ29pbiA9IHtcbiAgICAgICAgbmFtZTogJ3R0ZW1wbycsXG4gICAgICAgIGZ1bGxOYW1lOiAnVGVzdG5ldCBUZW1wbycsXG4gICAgICAgIG5ldHdvcms6IHsgdHlwZTogJ3Rlc3RuZXQnIH0sXG4gICAgICAgIGZlYXR1cmVzOiBbXSxcbiAgICAgIH0gYXMgYW55O1xuICAgICAgcmV0dXJuIFR0ZW1wby5jcmVhdGVJbnN0YW5jZShiZywgbW9ja1N0YXRpY3NDb2luKTtcbiAgICB9KTtcbiAgICBiaXRnby5pbml0aWFsaXplVGVzdFZhcnMoKTtcbiAgICBjb2luID0gYml0Z28uY29pbigndHRlbXBvJyk7XG4gIH0pO1xuXG4gIGFzeW5jIGZ1bmN0aW9uIGJ1aWxkU2VyaWFsaXplZFR4KFxuICAgIG9wZXJhdGlvbnM6IHsgdG9rZW46IHN0cmluZzsgdG86IHN0cmluZzsgYW1vdW50OiBzdHJpbmc7IG1lbW8/OiBzdHJpbmcgfVtdLFxuICAgIG5vbmNlID0gMFxuICApOiBQcm9taXNlPHN0cmluZz4ge1xuICAgIGNvbnN0IGJ1aWxkZXIgPSBuZXcgVGlwMjBUcmFuc2FjdGlvbkJ1aWxkZXIoY29pbnMuZ2V0KCd0dGVtcG8nKSk7XG4gICAgZm9yIChjb25zdCBvcCBvZiBvcGVyYXRpb25zKSB7XG4gICAgICBidWlsZGVyLmFkZE9wZXJhdGlvbihvcCk7XG4gICAgfVxuICAgIGJ1aWxkZXJcbiAgICAgIC5ub25jZShub25jZSlcbiAgICAgIC5nYXMoMTAwMDAwbilcbiAgICAgIC5tYXhGZWVQZXJHYXMoVFhfUEFSQU1TLmRlZmF1bHRNYXhGZWVQZXJHYXMpXG4gICAgICAubWF4UHJpb3JpdHlGZWVQZXJHYXMoVFhfUEFSQU1TLmRlZmF1bHRNYXhQcmlvcml0eUZlZVBlckdhcyk7XG4gICAgY29uc3QgdHggPSAoYXdhaXQgYnVpbGRlci5idWlsZCgpKSBhcyBUaXAyMFRyYW5zYWN0aW9uO1xuICAgIHJldHVybiB0eC5zZXJpYWxpemUoKTtcbiAgfVxuXG4gIGRlc2NyaWJlKCdwYXJzZVRyYW5zYWN0aW9uJywgKCkgPT4ge1xuICAgIGl0KCdzaG91bGQgcGFyc2UgYSBzaW5nbGUtb3BlcmF0aW9uIHRyYW5zYWN0aW9uIGludG8gb3V0cHV0cycsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IHR4SGV4ID0gYXdhaXQgYnVpbGRTZXJpYWxpemVkVHgoW3sgdG9rZW46IG1vY2tUb2tlbiwgdG86IG1vY2tSZWNpcGllbnQsIGFtb3VudDogJzUwJywgbWVtbzogJzEnIH1dKTtcbiAgICAgIGNvbnN0IHBhcnNlZCA9IGF3YWl0IGNvaW4ucGFyc2VUcmFuc2FjdGlvbih7IHR4SGV4IH0pO1xuICAgICAgYXNzZXJ0Lm9rKEFycmF5LmlzQXJyYXkocGFyc2VkLm91dHB1dHMpLCAnb3V0cHV0cyBzaG91bGQgYmUgYW4gYXJyYXknKTtcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChwYXJzZWQub3V0cHV0cy5sZW5ndGgsIDEpO1xuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHBhcnNlZC5vdXRwdXRzWzBdLmFkZHJlc3MudG9Mb3dlckNhc2UoKSwgbW9ja1JlY2lwaWVudC50b0xvd2VyQ2FzZSgpKTtcbiAgICAgIC8vIDUwIHRva2VucyAqIDEwXjYgPSA1MF8wMDBfMDAwIGJhc2UgdW5pdHNcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChwYXJzZWQub3V0cHV0c1swXS5hbW91bnQsICc1MDAwMDAwMCcpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gZW1wdHkgb2JqZWN0IHdoZW4gbm8gdHhIZXggaXMgcHJvdmlkZWQnLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCBwYXJzZWQgPSBhd2FpdCBjb2luLnBhcnNlVHJhbnNhY3Rpb24oe30pO1xuICAgICAgYXNzZXJ0LmRlZXBTdHJpY3RFcXVhbChwYXJzZWQsIHt9KTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ3ZlcmlmeVRyYW5zYWN0aW9uJywgKCkgPT4ge1xuICAgIGl0KCdzaG91bGQgcmV0dXJuIHRydWUgd2hlbiBubyByZWNpcGllbnRzIGFyZSBzcGVjaWZpZWQnLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCB0eEhleCA9IGF3YWl0IGJ1aWxkU2VyaWFsaXplZFR4KFt7IHRva2VuOiBtb2NrVG9rZW4sIHRvOiBtb2NrUmVjaXBpZW50LCBhbW91bnQ6ICcxMCcgfV0pO1xuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgY29pbi52ZXJpZnlUcmFuc2FjdGlvbih7XG4gICAgICAgIHR4UHJlYnVpbGQ6IHsgdHhIZXggfSxcbiAgICAgICAgdHhQYXJhbXM6IHt9LFxuICAgICAgfSk7XG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwocmVzdWx0LCB0cnVlKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgcmV0dXJuIHRydWUgd2hlbiByZWNpcGllbnRzIG1hdGNoIG9wZXJhdGlvbnMnLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCB0eEhleCA9IGF3YWl0IGJ1aWxkU2VyaWFsaXplZFR4KFt7IHRva2VuOiBtb2NrVG9rZW4sIHRvOiBtb2NrUmVjaXBpZW50LCBhbW91bnQ6ICcxMDAnIH1dKTtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGNvaW4udmVyaWZ5VHJhbnNhY3Rpb24oe1xuICAgICAgICB0eFByZWJ1aWxkOiB7IHR4SGV4IH0sXG4gICAgICAgIHR4UGFyYW1zOiB7XG4gICAgICAgICAgcmVjaXBpZW50czogW3sgYWRkcmVzczogbW9ja1JlY2lwaWVudCwgYW1vdW50OiAnMTAwMDAwMDAwJyB9XSwgLy8gMTAwICogMTBeNiBiYXNlIHVuaXRzXG4gICAgICAgIH0sXG4gICAgICB9KTtcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChyZXN1bHQsIHRydWUpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCB0aHJvdyB3aGVuIHJlY2lwaWVudCBhZGRyZXNzIGRvZXMgbm90IG1hdGNoJywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgdHhIZXggPSBhd2FpdCBidWlsZFNlcmlhbGl6ZWRUeChbeyB0b2tlbjogbW9ja1Rva2VuLCB0bzogbW9ja1JlY2lwaWVudCwgYW1vdW50OiAnMTAwJyB9XSk7XG4gICAgICBjb25zdCB3cm9uZ0FkZHJlc3MgPSBldGhlcnMudXRpbHMuZ2V0QWRkcmVzcygnMHgxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExJyk7XG4gICAgICBhd2FpdCBhc3NlcnQucmVqZWN0cyhcbiAgICAgICAgKCkgPT5cbiAgICAgICAgICBjb2luLnZlcmlmeVRyYW5zYWN0aW9uKHtcbiAgICAgICAgICAgIHR4UHJlYnVpbGQ6IHsgdHhIZXggfSxcbiAgICAgICAgICAgIHR4UGFyYW1zOiB7IHJlY2lwaWVudHM6IFt7IGFkZHJlc3M6IHdyb25nQWRkcmVzcywgYW1vdW50OiAnMTAwMDAwMDAwJyB9XSB9LFxuICAgICAgICAgIH0pLFxuICAgICAgICAvcmVjaXBpZW50IG1pc21hdGNoL1xuICAgICAgKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgdGhyb3cgd2hlbiByZWNpcGllbnQgYW1vdW50IGRvZXMgbm90IG1hdGNoJywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgdHhIZXggPSBhd2FpdCBidWlsZFNlcmlhbGl6ZWRUeChbeyB0b2tlbjogbW9ja1Rva2VuLCB0bzogbW9ja1JlY2lwaWVudCwgYW1vdW50OiAnMTAwJyB9XSk7XG4gICAgICBhd2FpdCBhc3NlcnQucmVqZWN0cyhcbiAgICAgICAgKCkgPT5cbiAgICAgICAgICBjb2luLnZlcmlmeVRyYW5zYWN0aW9uKHtcbiAgICAgICAgICAgIHR4UHJlYnVpbGQ6IHsgdHhIZXggfSxcbiAgICAgICAgICAgIHR4UGFyYW1zOiB7IHJlY2lwaWVudHM6IFt7IGFkZHJlc3M6IG1vY2tSZWNpcGllbnQsIGFtb3VudDogJzk5OScgfV0gfSxcbiAgICAgICAgICB9KSxcbiAgICAgICAgL2Ftb3VudCBtaXNtYXRjaC9cbiAgICAgICk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHRocm93IHdoZW4gb3BlcmF0aW9uIGNvdW50IGRpZmZlcnMgZnJvbSByZWNpcGllbnQgY291bnQnLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCB0eEhleCA9IGF3YWl0IGJ1aWxkU2VyaWFsaXplZFR4KFt7IHRva2VuOiBtb2NrVG9rZW4sIHRvOiBtb2NrUmVjaXBpZW50LCBhbW91bnQ6ICcxMCcgfV0pO1xuICAgICAgYXdhaXQgYXNzZXJ0LnJlamVjdHMoXG4gICAgICAgICgpID0+XG4gICAgICAgICAgY29pbi52ZXJpZnlUcmFuc2FjdGlvbih7XG4gICAgICAgICAgICB0eFByZWJ1aWxkOiB7IHR4SGV4IH0sXG4gICAgICAgICAgICB0eFBhcmFtczoge1xuICAgICAgICAgICAgICByZWNpcGllbnRzOiBbXG4gICAgICAgICAgICAgICAgeyBhZGRyZXNzOiBtb2NrUmVjaXBpZW50LCBhbW91bnQ6ICcxMDAwMDAwMCcgfSxcbiAgICAgICAgICAgICAgICB7IGFkZHJlc3M6IG1vY2tSZWNpcGllbnQsIGFtb3VudDogJzEwMDAwMDAwJyB9LFxuICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9KSxcbiAgICAgICAgL29wZXJhdGlvblxcKHNcXCkvXG4gICAgICApO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gdHJ1ZSB3aGVuIG5vIHR4SGV4IGlzIHByb3ZpZGVkJywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgY29pbi52ZXJpZnlUcmFuc2FjdGlvbih7IHR4UHJlYnVpbGQ6IHt9LCB0eFBhcmFtczoge30gfSk7XG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwocmVzdWx0LCB0cnVlKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ3ZlcmlmeVRyYW5zYWN0aW9uIHdpdGggZmVlVG9rZW4nLCAoKSA9PiB7XG4gICAgaXQoJ3Nob3VsZCB2ZXJpZnkgdHJhbnNhY3Rpb24gd2l0aCBtYXRjaGluZyBmZWUgdG9rZW4nLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCBmZWVUb2tlbiA9IGV0aGVycy51dGlscy5nZXRBZGRyZXNzKFRFU1RORVRfVE9LRU5TLmJldGFVU0QuYWRkcmVzcyk7XG4gICAgICBjb25zdCBidWlsZGVyID0gbmV3IFRpcDIwVHJhbnNhY3Rpb25CdWlsZGVyKGNvaW5zLmdldCgndHRlbXBvJykpO1xuICAgICAgYnVpbGRlclxuICAgICAgICAuYWRkT3BlcmF0aW9uKHsgdG9rZW46IG1vY2tUb2tlbiwgdG86IG1vY2tSZWNpcGllbnQsIGFtb3VudDogJzEwMCcgfSlcbiAgICAgICAgLmZlZVRva2VuKGZlZVRva2VuKVxuICAgICAgICAubm9uY2UoMClcbiAgICAgICAgLmdhcygxMDAwMDBuKVxuICAgICAgICAubWF4RmVlUGVyR2FzKFRYX1BBUkFNUy5kZWZhdWx0TWF4RmVlUGVyR2FzKVxuICAgICAgICAubWF4UHJpb3JpdHlGZWVQZXJHYXMoVFhfUEFSQU1TLmRlZmF1bHRNYXhQcmlvcml0eUZlZVBlckdhcyk7XG4gICAgICBjb25zdCB0eCA9IChhd2FpdCBidWlsZGVyLmJ1aWxkKCkpIGFzIFRpcDIwVHJhbnNhY3Rpb247XG4gICAgICBjb25zdCB0eEhleCA9IGF3YWl0IHR4LnNlcmlhbGl6ZSgpO1xuXG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBjb2luLnZlcmlmeVRyYW5zYWN0aW9uKHtcbiAgICAgICAgdHhQcmVidWlsZDogeyB0eEhleCB9LFxuICAgICAgICB0eFBhcmFtczogeyBmZWVUb2tlbjogZmVlVG9rZW4gfSxcbiAgICAgIH0pO1xuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHJlc3VsdCwgdHJ1ZSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHRocm93IHdoZW4gZmVlIHRva2VuIGRvZXMgbm90IG1hdGNoJywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgZmVlVG9rZW4gPSBldGhlcnMudXRpbHMuZ2V0QWRkcmVzcyhURVNUTkVUX1RPS0VOUy5iZXRhVVNELmFkZHJlc3MpO1xuICAgICAgY29uc3Qgd3JvbmdGZWVUb2tlbiA9IGV0aGVycy51dGlscy5nZXRBZGRyZXNzKFRFU1RORVRfVE9LRU5TLmFscGhhVVNELmFkZHJlc3MpO1xuICAgICAgY29uc3QgYnVpbGRlciA9IG5ldyBUaXAyMFRyYW5zYWN0aW9uQnVpbGRlcihjb2lucy5nZXQoJ3R0ZW1wbycpKTtcbiAgICAgIGJ1aWxkZXJcbiAgICAgICAgLmFkZE9wZXJhdGlvbih7IHRva2VuOiBtb2NrVG9rZW4sIHRvOiBtb2NrUmVjaXBpZW50LCBhbW91bnQ6ICcxMDAnIH0pXG4gICAgICAgIC5mZWVUb2tlbihmZWVUb2tlbilcbiAgICAgICAgLm5vbmNlKDApXG4gICAgICAgIC5nYXMoMTAwMDAwbilcbiAgICAgICAgLm1heEZlZVBlckdhcyhUWF9QQVJBTVMuZGVmYXVsdE1heEZlZVBlckdhcylcbiAgICAgICAgLm1heFByaW9yaXR5RmVlUGVyR2FzKFRYX1BBUkFNUy5kZWZhdWx0TWF4UHJpb3JpdHlGZWVQZXJHYXMpO1xuICAgICAgY29uc3QgdHggPSAoYXdhaXQgYnVpbGRlci5idWlsZCgpKSBhcyBUaXAyMFRyYW5zYWN0aW9uO1xuICAgICAgY29uc3QgdHhIZXggPSBhd2FpdCB0eC5zZXJpYWxpemUoKTtcblxuICAgICAgYXdhaXQgYXNzZXJ0LnJlamVjdHMoXG4gICAgICAgICgpID0+XG4gICAgICAgICAgY29pbi52ZXJpZnlUcmFuc2FjdGlvbih7XG4gICAgICAgICAgICB0eFByZWJ1aWxkOiB7IHR4SGV4IH0sXG4gICAgICAgICAgICB0eFBhcmFtczogeyBmZWVUb2tlbjogd3JvbmdGZWVUb2tlbiB9LFxuICAgICAgICAgIH0pLFxuICAgICAgICAvRmVlIHRva2VuIG1pc21hdGNoL1xuICAgICAgKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgdGhyb3cgd2hlbiBmZWUgdG9rZW4gaXMgZXhwZWN0ZWQgYnV0IHRyYW5zYWN0aW9uIGhhcyBub25lJywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgZXhwZWN0ZWRGZWVUb2tlbiA9IGV0aGVycy51dGlscy5nZXRBZGRyZXNzKFRFU1RORVRfVE9LRU5TLmJldGFVU0QuYWRkcmVzcyk7XG4gICAgICBjb25zdCBidWlsZGVyID0gbmV3IFRpcDIwVHJhbnNhY3Rpb25CdWlsZGVyKGNvaW5zLmdldCgndHRlbXBvJykpO1xuICAgICAgYnVpbGRlclxuICAgICAgICAuYWRkT3BlcmF0aW9uKHsgdG9rZW46IG1vY2tUb2tlbiwgdG86IG1vY2tSZWNpcGllbnQsIGFtb3VudDogJzEwMCcgfSlcbiAgICAgICAgLm5vbmNlKDApXG4gICAgICAgIC5nYXMoMTAwMDAwbilcbiAgICAgICAgLm1heEZlZVBlckdhcyhUWF9QQVJBTVMuZGVmYXVsdE1heEZlZVBlckdhcylcbiAgICAgICAgLm1heFByaW9yaXR5RmVlUGVyR2FzKFRYX1BBUkFNUy5kZWZhdWx0TWF4UHJpb3JpdHlGZWVQZXJHYXMpO1xuICAgICAgY29uc3QgdHggPSAoYXdhaXQgYnVpbGRlci5idWlsZCgpKSBhcyBUaXAyMFRyYW5zYWN0aW9uO1xuICAgICAgY29uc3QgdHhIZXggPSBhd2FpdCB0eC5zZXJpYWxpemUoKTtcblxuICAgICAgYXdhaXQgYXNzZXJ0LnJlamVjdHMoXG4gICAgICAgICgpID0+XG4gICAgICAgICAgY29pbi52ZXJpZnlUcmFuc2FjdGlvbih7XG4gICAgICAgICAgICB0eFByZWJ1aWxkOiB7IHR4SGV4IH0sXG4gICAgICAgICAgICB0eFBhcmFtczogeyBmZWVUb2tlbjogZXhwZWN0ZWRGZWVUb2tlbiB9LFxuICAgICAgICAgIH0pLFxuICAgICAgICAvRmVlIHRva2VuIG1pc21hdGNoL1xuICAgICAgKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgcGFzcyB2ZXJpZmljYXRpb24gd2hlbiBubyBmZWUgdG9rZW4gaXMgc3BlY2lmaWVkIGluIHBhcmFtcycsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IGZlZVRva2VuID0gZXRoZXJzLnV0aWxzLmdldEFkZHJlc3MoVEVTVE5FVF9UT0tFTlMuYmV0YVVTRC5hZGRyZXNzKTtcbiAgICAgIGNvbnN0IGJ1aWxkZXIgPSBuZXcgVGlwMjBUcmFuc2FjdGlvbkJ1aWxkZXIoY29pbnMuZ2V0KCd0dGVtcG8nKSk7XG4gICAgICBidWlsZGVyXG4gICAgICAgIC5hZGRPcGVyYXRpb24oeyB0b2tlbjogbW9ja1Rva2VuLCB0bzogbW9ja1JlY2lwaWVudCwgYW1vdW50OiAnMTAwJyB9KVxuICAgICAgICAuZmVlVG9rZW4oZmVlVG9rZW4pXG4gICAgICAgIC5ub25jZSgwKVxuICAgICAgICAuZ2FzKDEwMDAwMG4pXG4gICAgICAgIC5tYXhGZWVQZXJHYXMoVFhfUEFSQU1TLmRlZmF1bHRNYXhGZWVQZXJHYXMpXG4gICAgICAgIC5tYXhQcmlvcml0eUZlZVBlckdhcyhUWF9QQVJBTVMuZGVmYXVsdE1heFByaW9yaXR5RmVlUGVyR2FzKTtcbiAgICAgIGNvbnN0IHR4ID0gKGF3YWl0IGJ1aWxkZXIuYnVpbGQoKSkgYXMgVGlwMjBUcmFuc2FjdGlvbjtcbiAgICAgIGNvbnN0IHR4SGV4ID0gYXdhaXQgdHguc2VyaWFsaXplKCk7XG5cbiAgICAgIC8vIE5vIGZlZVRva2VuIGluIHR4UGFyYW1zIC0gc2hvdWxkIG5vdCB2ZXJpZnksIGp1c3QgcGFzc1xuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgY29pbi52ZXJpZnlUcmFuc2FjdGlvbih7XG4gICAgICAgIHR4UHJlYnVpbGQ6IHsgdHhIZXggfSxcbiAgICAgICAgdHhQYXJhbXM6IHt9LFxuICAgICAgfSk7XG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwocmVzdWx0LCB0cnVlKTtcbiAgICB9KTtcbiAgfSk7XG59KTtcblxuZGVzY3JpYmUoJ1JhdyBDb250cmFjdCBDYWxsIEJ1aWxkZXInLCAoKSA9PiB7XG4gIGNvbnN0IG1vY2tDb250cmFjdCA9IGV0aGVycy51dGlscy5nZXRBZGRyZXNzKCcweGRlYWRiZWVmZGVhZGJlZWZkZWFkYmVlZmRlYWRiZWVmZGVhZGJlZWYnKTtcbiAgY29uc3QgbW9ja0NhbGxkYXRhID1cbiAgICAnMHhhOTA1OWNiYjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDc0MmQzNWNjNjYzNGMwNTMyOTI1YTNiODQ0YmM0NTRlNDQzOGY0NGUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOTg5NjgwJztcblxuICBkZXNjcmliZSgnYWRkUmF3Q2FsbCcsICgpID0+IHtcbiAgICBpdCgnc2hvdWxkIGFkZCBhIHJhdyBjYWxsIGFuZCByZXR1cm4gaXQgdmlhIGdldFJhd0NhbGxzKCknLCAoKSA9PiB7XG4gICAgICBjb25zdCBidWlsZGVyID0gbmV3IFRpcDIwVHJhbnNhY3Rpb25CdWlsZGVyKG1vY2tDb2luQ29uZmlnKTtcbiAgICAgIGJ1aWxkZXIuYWRkUmF3Q2FsbCh7IHRvOiBtb2NrQ29udHJhY3QsIGRhdGE6IG1vY2tDYWxsZGF0YSB9KTtcblxuICAgICAgY29uc3QgcmF3Q2FsbHMgPSBidWlsZGVyLmdldFJhd0NhbGxzKCk7XG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwocmF3Q2FsbHMubGVuZ3RoLCAxKTtcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChyYXdDYWxsc1swXS50bywgbW9ja0NvbnRyYWN0KTtcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChyYXdDYWxsc1swXS5kYXRhLCBtb2NrQ2FsbGRhdGEpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBzdXBwb3J0IGNoYWluaW5nIGFkZFJhd0NhbGwnLCAoKSA9PiB7XG4gICAgICBjb25zdCBidWlsZGVyID0gbmV3IFRpcDIwVHJhbnNhY3Rpb25CdWlsZGVyKG1vY2tDb2luQ29uZmlnKTtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGJ1aWxkZXIuYWRkUmF3Q2FsbCh7IHRvOiBtb2NrQ29udHJhY3QsIGRhdGE6IG1vY2tDYWxsZGF0YSB9KTtcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChyZXN1bHQsIGJ1aWxkZXIpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCB0aHJvdyBmb3IgaW52YWxpZCBjb250cmFjdCBhZGRyZXNzJywgKCkgPT4ge1xuICAgICAgY29uc3QgYnVpbGRlciA9IG5ldyBUaXAyMFRyYW5zYWN0aW9uQnVpbGRlcihtb2NrQ29pbkNvbmZpZyk7XG4gICAgICBhc3NlcnQudGhyb3dzKCgpID0+IGJ1aWxkZXIuYWRkUmF3Q2FsbCh7IHRvOiAnMHhpbnZhbGlkJywgZGF0YTogbW9ja0NhbGxkYXRhIH0pLCAvSW52YWxpZCBjb250cmFjdCBhZGRyZXNzLyk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHRocm93IGZvciBlbXB0eSBjYWxsZGF0YScsICgpID0+IHtcbiAgICAgIGNvbnN0IGJ1aWxkZXIgPSBuZXcgVGlwMjBUcmFuc2FjdGlvbkJ1aWxkZXIobW9ja0NvaW5Db25maWcpO1xuICAgICAgYXNzZXJ0LnRocm93cygoKSA9PiBidWlsZGVyLmFkZFJhd0NhbGwoeyB0bzogbW9ja0NvbnRyYWN0LCBkYXRhOiAnMHgnIH0pLCAvSW52YWxpZCBjYWxsZGF0YS8pO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCB0aHJvdyBmb3Igbm9uLWhleCBjYWxsZGF0YScsICgpID0+IHtcbiAgICAgIGNvbnN0IGJ1aWxkZXIgPSBuZXcgVGlwMjBUcmFuc2FjdGlvbkJ1aWxkZXIobW9ja0NvaW5Db25maWcpO1xuICAgICAgYXNzZXJ0LnRocm93cygoKSA9PiBidWlsZGVyLmFkZFJhd0NhbGwoeyB0bzogbW9ja0NvbnRyYWN0LCBkYXRhOiAnbm90LWhleC1kYXRhJyB9KSwgL0ludmFsaWQgY2FsbGRhdGEvKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgdGhyb3cgZm9yIGNhbGxkYXRhIG1pc3NpbmcgMHggcHJlZml4JywgKCkgPT4ge1xuICAgICAgY29uc3QgYnVpbGRlciA9IG5ldyBUaXAyMFRyYW5zYWN0aW9uQnVpbGRlcihtb2NrQ29pbkNvbmZpZyk7XG4gICAgICBhc3NlcnQudGhyb3dzKCgpID0+IGJ1aWxkZXIuYWRkUmF3Q2FsbCh7IHRvOiBtb2NrQ29udHJhY3QsIGRhdGE6ICdhOTA1OWNiYicgfSksIC9JbnZhbGlkIGNhbGxkYXRhLyk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHRocm93IGZvciBvZGQtbGVuZ3RoIGhleCBjYWxsZGF0YScsICgpID0+IHtcbiAgICAgIGNvbnN0IGJ1aWxkZXIgPSBuZXcgVGlwMjBUcmFuc2FjdGlvbkJ1aWxkZXIobW9ja0NvaW5Db25maWcpO1xuICAgICAgYXNzZXJ0LnRocm93cygoKSA9PiBidWlsZGVyLmFkZFJhd0NhbGwoeyB0bzogbW9ja0NvbnRyYWN0LCBkYXRhOiAnMHhhYmMnIH0pLCAvSW52YWxpZCBjYWxsZGF0YS8pO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCB0aHJvdyBmb3IgaW52YWxpZCB2YWx1ZSBzdHJpbmcnLCAoKSA9PiB7XG4gICAgICBjb25zdCBidWlsZGVyID0gbmV3IFRpcDIwVHJhbnNhY3Rpb25CdWlsZGVyKG1vY2tDb2luQ29uZmlnKTtcbiAgICAgIGFzc2VydC50aHJvd3MoKCkgPT4gYnVpbGRlci5hZGRSYXdDYWxsKHsgdG86IG1vY2tDb250cmFjdCwgZGF0YTogbW9ja0NhbGxkYXRhLCB2YWx1ZTogJzFlMTgnIH0pLCAvSW52YWxpZCB2YWx1ZS8pO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCB0aHJvdyBmb3IgbmVnYXRpdmUgdmFsdWUnLCAoKSA9PiB7XG4gICAgICBjb25zdCBidWlsZGVyID0gbmV3IFRpcDIwVHJhbnNhY3Rpb25CdWlsZGVyKG1vY2tDb2luQ29uZmlnKTtcbiAgICAgIGFzc2VydC50aHJvd3MoKCkgPT4gYnVpbGRlci5hZGRSYXdDYWxsKHsgdG86IG1vY2tDb250cmFjdCwgZGF0YTogbW9ja0NhbGxkYXRhLCB2YWx1ZTogJy0xJyB9KSwgL0ludmFsaWQgdmFsdWUvKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgYWxsb3cgcmF3LWNhbGwtb25seSB0cmFuc2FjdGlvbiAobm8gb3BlcmF0aW9ucyknLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCBidWlsZGVyID0gbmV3IFRpcDIwVHJhbnNhY3Rpb25CdWlsZGVyKG1vY2tDb2luQ29uZmlnKTtcbiAgICAgIGJ1aWxkZXJcbiAgICAgICAgLmFkZFJhd0NhbGwoeyB0bzogbW9ja0NvbnRyYWN0LCBkYXRhOiBtb2NrQ2FsbGRhdGEgfSlcbiAgICAgICAgLm5vbmNlKDApXG4gICAgICAgIC5nYXMoMTAwMDAwbilcbiAgICAgICAgLm1heEZlZVBlckdhcyhUWF9QQVJBTVMuZGVmYXVsdE1heEZlZVBlckdhcylcbiAgICAgICAgLm1heFByaW9yaXR5RmVlUGVyR2FzKFRYX1BBUkFNUy5kZWZhdWx0TWF4UHJpb3JpdHlGZWVQZXJHYXMpO1xuXG4gICAgICBjb25zdCB0eCA9IChhd2FpdCBidWlsZGVyLmJ1aWxkKCkpIGFzIFRpcDIwVHJhbnNhY3Rpb247XG4gICAgICBhc3NlcnQub2sodHggaW5zdGFuY2VvZiBUaXAyMFRyYW5zYWN0aW9uKTtcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbCh0eC5nZXRPcGVyYXRpb25zKCkubGVuZ3RoLCAwKTtcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbCh0eC5nZXRSYXdDYWxscygpLmxlbmd0aCwgMSk7XG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwodHguZ2V0T3BlcmF0aW9uQ291bnQoKSwgMSk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdSb3VuZC1UcmlwOiBCdWlsZCAtPiBTZXJpYWxpemUgLT4gRnJvbSAocmF3IGNhbGwgZGVzZXJpYWxpemF0aW9uKScsICgpID0+IHtcbiAgICBpdCgnc2hvdWxkIHByZXNlcnZlIHJhdyBjYWxsIGNhbGxkYXRhIHRocm91Z2ggYSByb3VuZC10cmlwJywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgYnVpbGRlciA9IG5ldyBUaXAyMFRyYW5zYWN0aW9uQnVpbGRlcihtb2NrQ29pbkNvbmZpZyk7XG4gICAgICBidWlsZGVyXG4gICAgICAgIC5hZGRSYXdDYWxsKHsgdG86IG1vY2tDb250cmFjdCwgZGF0YTogbW9ja0NhbGxkYXRhIH0pXG4gICAgICAgIC5ub25jZSg1KVxuICAgICAgICAuZ2FzKDE1MDAwMG4pXG4gICAgICAgIC5tYXhGZWVQZXJHYXMoVFhfUEFSQU1TLmRlZmF1bHRNYXhGZWVQZXJHYXMpXG4gICAgICAgIC5tYXhQcmlvcml0eUZlZVBlckdhcyhUWF9QQVJBTVMuZGVmYXVsdE1heFByaW9yaXR5RmVlUGVyR2FzKTtcblxuICAgICAgY29uc3Qgb3JpZ2luYWxUeCA9IChhd2FpdCBidWlsZGVyLmJ1aWxkKCkpIGFzIFRpcDIwVHJhbnNhY3Rpb247XG4gICAgICBjb25zdCBzZXJpYWxpemVkID0gYXdhaXQgb3JpZ2luYWxUeC5zZXJpYWxpemUoKTtcblxuICAgICAgY29uc3QgYnVpbGRlcjIgPSBuZXcgVGlwMjBUcmFuc2FjdGlvbkJ1aWxkZXIobW9ja0NvaW5Db25maWcpO1xuICAgICAgYnVpbGRlcjIuZnJvbShzZXJpYWxpemVkKTtcbiAgICAgIGNvbnN0IHJlc3RvcmVkVHggPSAoYXdhaXQgYnVpbGRlcjIuYnVpbGQoKSkgYXMgVGlwMjBUcmFuc2FjdGlvbjtcblxuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHJlc3RvcmVkVHguZ2V0T3BlcmF0aW9ucygpLmxlbmd0aCwgMCk7XG4gICAgICBjb25zdCByYXdDYWxscyA9IHJlc3RvcmVkVHguZ2V0UmF3Q2FsbHMoKTtcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChyYXdDYWxscy5sZW5ndGgsIDEpO1xuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHJhd0NhbGxzWzBdLnRvLnRvTG93ZXJDYXNlKCksIG1vY2tDb250cmFjdC50b0xvd2VyQ2FzZSgpKTtcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChyYXdDYWxsc1swXS5kYXRhLnRvTG93ZXJDYXNlKCksIG1vY2tDYWxsZGF0YS50b0xvd2VyQ2FzZSgpKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgcHJlc2VydmUgY2FsbGRhdGEgdGhyb3VnaCBhIHNpZ25lZCByb3VuZC10cmlwJywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgYnVpbGRlciA9IG5ldyBUaXAyMFRyYW5zYWN0aW9uQnVpbGRlcihtb2NrQ29pbkNvbmZpZyk7XG4gICAgICBidWlsZGVyXG4gICAgICAgIC5hZGRSYXdDYWxsKHsgdG86IG1vY2tDb250cmFjdCwgZGF0YTogbW9ja0NhbGxkYXRhIH0pXG4gICAgICAgIC5ub25jZSg3KVxuICAgICAgICAuZ2FzKDEyMDAwMG4pXG4gICAgICAgIC5tYXhGZWVQZXJHYXMoVFhfUEFSQU1TLmRlZmF1bHRNYXhGZWVQZXJHYXMpXG4gICAgICAgIC5tYXhQcmlvcml0eUZlZVBlckdhcyhUWF9QQVJBTVMuZGVmYXVsdE1heFByaW9yaXR5RmVlUGVyR2FzKTtcblxuICAgICAgY29uc3QgdHggPSAoYXdhaXQgYnVpbGRlci5idWlsZCgpKSBhcyBUaXAyMFRyYW5zYWN0aW9uO1xuICAgICAgdHguc2V0U2lnbmF0dXJlKFNJR05BVFVSRV9URVNUX0RBVEEudmFsaWRTaWduYXR1cmUpO1xuICAgICAgY29uc3Qgc2lnbmVkSGV4ID0gYXdhaXQgdHgudG9Ccm9hZGNhc3RGb3JtYXQoKTtcblxuICAgICAgY29uc3QgYnVpbGRlcjIgPSBuZXcgVGlwMjBUcmFuc2FjdGlvbkJ1aWxkZXIobW9ja0NvaW5Db25maWcpO1xuICAgICAgYnVpbGRlcjIuZnJvbShzaWduZWRIZXgpO1xuICAgICAgY29uc3QgcmVzdG9yZWRUeCA9IChhd2FpdCBidWlsZGVyMi5idWlsZCgpKSBhcyBUaXAyMFRyYW5zYWN0aW9uO1xuXG4gICAgICBjb25zdCByYXdDYWxscyA9IHJlc3RvcmVkVHguZ2V0UmF3Q2FsbHMoKTtcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChyYXdDYWxscy5sZW5ndGgsIDEpO1xuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHJhd0NhbGxzWzBdLmRhdGEudG9Mb3dlckNhc2UoKSwgbW9ja0NhbGxkYXRhLnRvTG93ZXJDYXNlKCkpO1xuICAgICAgY29uc3Qgc2lnID0gcmVzdG9yZWRUeC5nZXRTaWduYXR1cmUoKTtcbiAgICAgIGFzc2VydC5vayhzaWcgIT09IHVuZGVmaW5lZCk7XG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwoc2lnIS55UGFyaXR5LCBTSUdOQVRVUkVfVEVTVF9EQVRBLnZhbGlkU2lnbmF0dXJlLnlQYXJpdHkpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBwcmVzZXJ2ZSByYXcgY2FsbCB0eCBpZCB0aHJvdWdoIGEgcm91bmQtdHJpcCcsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IGJ1aWxkZXIgPSBuZXcgVGlwMjBUcmFuc2FjdGlvbkJ1aWxkZXIobW9ja0NvaW5Db25maWcpO1xuICAgICAgYnVpbGRlclxuICAgICAgICAuYWRkUmF3Q2FsbCh7IHRvOiBtb2NrQ29udHJhY3QsIGRhdGE6IG1vY2tDYWxsZGF0YSB9KVxuICAgICAgICAubm9uY2UoMylcbiAgICAgICAgLmdhcygxMDAwMDBuKVxuICAgICAgICAubWF4RmVlUGVyR2FzKFRYX1BBUkFNUy5kZWZhdWx0TWF4RmVlUGVyR2FzKVxuICAgICAgICAubWF4UHJpb3JpdHlGZWVQZXJHYXMoVFhfUEFSQU1TLmRlZmF1bHRNYXhQcmlvcml0eUZlZVBlckdhcyk7XG5cbiAgICAgIGNvbnN0IG9yaWdpbmFsVHggPSAoYXdhaXQgYnVpbGRlci5idWlsZCgpKSBhcyBUaXAyMFRyYW5zYWN0aW9uO1xuICAgICAgY29uc3Qgc2VyaWFsaXplZCA9IGF3YWl0IG9yaWdpbmFsVHguc2VyaWFsaXplKCk7XG4gICAgICBjb25zdCBvcmlnaW5hbElkID0gb3JpZ2luYWxUeC5pZDtcblxuICAgICAgY29uc3QgYnVpbGRlcjIgPSBuZXcgVGlwMjBUcmFuc2FjdGlvbkJ1aWxkZXIobW9ja0NvaW5Db25maWcpO1xuICAgICAgYnVpbGRlcjIuZnJvbShzZXJpYWxpemVkKTtcbiAgICAgIGNvbnN0IHJlc3RvcmVkVHggPSAoYXdhaXQgYnVpbGRlcjIuYnVpbGQoKSkgYXMgVGlwMjBUcmFuc2FjdGlvbjtcblxuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHJlc3RvcmVkVHguaWQsIG9yaWdpbmFsSWQpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnUmF3IGNhbGwgdG9Kc29uIGFuZCBvdXRwdXRzJywgKCkgPT4ge1xuICAgIGl0KCdzaG91bGQgZXhwb3NlIHJhdyBjYWxsIGNvbnRyYWN0IGFkZHJlc3MgYXMgb3V0cHV0JywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgYnVpbGRlciA9IG5ldyBUaXAyMFRyYW5zYWN0aW9uQnVpbGRlcihtb2NrQ29pbkNvbmZpZyk7XG4gICAgICBidWlsZGVyXG4gICAgICAgIC5hZGRSYXdDYWxsKHsgdG86IG1vY2tDb250cmFjdCwgZGF0YTogbW9ja0NhbGxkYXRhLCB2YWx1ZTogJzAnIH0pXG4gICAgICAgIC5ub25jZSgyKVxuICAgICAgICAuZ2FzKDIwMDAwMG4pXG4gICAgICAgIC5tYXhGZWVQZXJHYXMoVFhfUEFSQU1TLmRlZmF1bHRNYXhGZWVQZXJHYXMpXG4gICAgICAgIC5tYXhQcmlvcml0eUZlZVBlckdhcyhUWF9QQVJBTVMuZGVmYXVsdE1heFByaW9yaXR5RmVlUGVyR2FzKTtcblxuICAgICAgY29uc3QgdHggPSAoYXdhaXQgYnVpbGRlci5idWlsZCgpKSBhcyBUaXAyMFRyYW5zYWN0aW9uO1xuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHR4Lm91dHB1dHMubGVuZ3RoLCAxKTtcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbCh0eC5vdXRwdXRzWzBdLmFkZHJlc3MudG9Mb3dlckNhc2UoKSwgbW9ja0NvbnRyYWN0LnRvTG93ZXJDYXNlKCkpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBpbmNsdWRlIHJhd0NhbGxzIGluIHRvSnNvbigpIG91dHB1dCcsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IGJ1aWxkZXIgPSBuZXcgVGlwMjBUcmFuc2FjdGlvbkJ1aWxkZXIobW9ja0NvaW5Db25maWcpO1xuICAgICAgYnVpbGRlclxuICAgICAgICAuYWRkUmF3Q2FsbCh7IHRvOiBtb2NrQ29udHJhY3QsIGRhdGE6IG1vY2tDYWxsZGF0YSB9KVxuICAgICAgICAubm9uY2UoMClcbiAgICAgICAgLmdhcygxMDAwMDBuKVxuICAgICAgICAubWF4RmVlUGVyR2FzKFRYX1BBUkFNUy5kZWZhdWx0TWF4RmVlUGVyR2FzKVxuICAgICAgICAubWF4UHJpb3JpdHlGZWVQZXJHYXMoVFhfUEFSQU1TLmRlZmF1bHRNYXhQcmlvcml0eUZlZVBlckdhcyk7XG5cbiAgICAgIGNvbnN0IHR4ID0gKGF3YWl0IGJ1aWxkZXIuYnVpbGQoKSkgYXMgVGlwMjBUcmFuc2FjdGlvbjtcbiAgICAgIGNvbnN0IGpzb24gPSB0eC50b0pzb24oKTtcblxuICAgICAgYXNzZXJ0Lm9rKEFycmF5LmlzQXJyYXkoanNvbi5yYXdDYWxscykpO1xuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKGpzb24ucmF3Q2FsbHMubGVuZ3RoLCAxKTtcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChqc29uLnJhd0NhbGxzWzBdLnRvLCBtb2NrQ29udHJhY3QpO1xuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKGpzb24ucmF3Q2FsbHNbMF0uZGF0YSwgbW9ja0NhbGxkYXRhKTtcbiAgICB9KTtcbiAgfSk7XG59KTtcblxuZGVzY3JpYmUoJ1RlbXBvIGNvaW4gLSB2ZXJpZnlUcmFuc2FjdGlvbiB3aXRoIHJhdyBjYWxscycsICgpID0+IHtcbiAgbGV0IGJpdGdvOiBUZXN0Qml0R29BUEk7XG4gIGxldCBjb2luOiBhbnk7XG5cbiAgY29uc3QgbW9ja0NvbnRyYWN0ID0gZXRoZXJzLnV0aWxzLmdldEFkZHJlc3MoJzB4ZGVhZGJlZWZkZWFkYmVlZmRlYWRiZWVmZGVhZGJlZWZkZWFkYmVlZicpO1xuICBjb25zdCBtb2NrQ2FsbGRhdGEgPVxuICAgICcweGE5MDU5Y2JiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNzQyZDM1Y2M2NjM0YzA1MzI5MjVhM2I4NDRiYzQ1NGU0NDM4ZjQ0ZTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5ODk2ODAnO1xuXG4gIGJlZm9yZShmdW5jdGlvbiAoKSB7XG4gICAgYml0Z28gPSBUZXN0Qml0R28uZGVjb3JhdGUoQml0R29BUEksIHsgZW52OiAnbW9jaycgfSk7XG4gICAgYml0Z28uc2FmZVJlZ2lzdGVyKCd0dGVtcG8nLCAoYmc6IEJpdEdvQmFzZSkgPT4ge1xuICAgICAgY29uc3QgbW9ja1N0YXRpY3NDb2luID0ge1xuICAgICAgICBuYW1lOiAndHRlbXBvJyxcbiAgICAgICAgZnVsbE5hbWU6ICdUZXN0bmV0IFRlbXBvJyxcbiAgICAgICAgbmV0d29yazogeyB0eXBlOiAndGVzdG5ldCcgfSxcbiAgICAgICAgZmVhdHVyZXM6IFtdLFxuICAgICAgfSBhcyBhbnk7XG4gICAgICByZXR1cm4gVHRlbXBvLmNyZWF0ZUluc3RhbmNlKGJnLCBtb2NrU3RhdGljc0NvaW4pO1xuICAgIH0pO1xuICAgIGJpdGdvLmluaXRpYWxpemVUZXN0VmFycygpO1xuICAgIGNvaW4gPSBiaXRnby5jb2luKCd0dGVtcG8nKTtcbiAgfSk7XG5cbiAgYXN5bmMgZnVuY3Rpb24gYnVpbGRSYXdDYWxsVHgoY29udHJhY3Q6IHN0cmluZywgY2FsbGRhdGE6IHN0cmluZywgbm9uY2UgPSAwKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICBjb25zdCBidWlsZGVyID0gbmV3IFRpcDIwVHJhbnNhY3Rpb25CdWlsZGVyKGNvaW5zLmdldCgndHRlbXBvJykpO1xuICAgIGJ1aWxkZXJcbiAgICAgIC5hZGRSYXdDYWxsKHsgdG86IGNvbnRyYWN0LCBkYXRhOiBjYWxsZGF0YSB9KVxuICAgICAgLm5vbmNlKG5vbmNlKVxuICAgICAgLmdhcygxNTAwMDBuKVxuICAgICAgLm1heEZlZVBlckdhcyhUWF9QQVJBTVMuZGVmYXVsdE1heEZlZVBlckdhcylcbiAgICAgIC5tYXhQcmlvcml0eUZlZVBlckdhcyhUWF9QQVJBTVMuZGVmYXVsdE1heFByaW9yaXR5RmVlUGVyR2FzKTtcbiAgICBjb25zdCB0eCA9IChhd2FpdCBidWlsZGVyLmJ1aWxkKCkpIGFzIFRpcDIwVHJhbnNhY3Rpb247XG4gICAgcmV0dXJuIHR4LnNlcmlhbGl6ZSgpO1xuICB9XG5cbiAgaXQoJ3Nob3VsZCB2ZXJpZnkgYSByYXcgY2FsbCB0cmFuc2FjdGlvbiB3aGVuIHJlY2lwaWVudCBkYXRhIG1hdGNoZXMnLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgdHhIZXggPSBhd2FpdCBidWlsZFJhd0NhbGxUeChtb2NrQ29udHJhY3QsIG1vY2tDYWxsZGF0YSk7XG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgY29pbi52ZXJpZnlUcmFuc2FjdGlvbih7XG4gICAgICB0eFByZWJ1aWxkOiB7IHR4SGV4IH0sXG4gICAgICB0eFBhcmFtczoge1xuICAgICAgICByZWNpcGllbnRzOiBbeyBhZGRyZXNzOiBtb2NrQ29udHJhY3QsIGFtb3VudDogJzAnLCBkYXRhOiBtb2NrQ2FsbGRhdGEgfV0sXG4gICAgICB9LFxuICAgIH0pO1xuICAgIGFzc2VydC5zdHJpY3RFcXVhbChyZXN1bHQsIHRydWUpO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIHRocm93IHdoZW4gcmF3IGNhbGwgYWRkcmVzcyBkb2VzIG5vdCBtYXRjaCByZWNpcGllbnQnLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgdHhIZXggPSBhd2FpdCBidWlsZFJhd0NhbGxUeChtb2NrQ29udHJhY3QsIG1vY2tDYWxsZGF0YSk7XG4gICAgY29uc3Qgd3JvbmdBZGRyZXNzID0gZXRoZXJzLnV0aWxzLmdldEFkZHJlc3MoJzB4MTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMScpO1xuICAgIGF3YWl0IGFzc2VydC5yZWplY3RzKFxuICAgICAgKCkgPT5cbiAgICAgICAgY29pbi52ZXJpZnlUcmFuc2FjdGlvbih7XG4gICAgICAgICAgdHhQcmVidWlsZDogeyB0eEhleCB9LFxuICAgICAgICAgIHR4UGFyYW1zOiB7IHJlY2lwaWVudHM6IFt7IGFkZHJlc3M6IHdyb25nQWRkcmVzcywgYW1vdW50OiAnMCcsIGRhdGE6IG1vY2tDYWxsZGF0YSB9XSB9LFxuICAgICAgICB9KSxcbiAgICAgIC9hZGRyZXNzIG1pc21hdGNoL1xuICAgICk7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgdGhyb3cgd2hlbiByYXcgY2FsbCBjYWxsZGF0YSBkb2VzIG5vdCBtYXRjaCcsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCB0eEhleCA9IGF3YWl0IGJ1aWxkUmF3Q2FsbFR4KG1vY2tDb250cmFjdCwgbW9ja0NhbGxkYXRhKTtcbiAgICBjb25zdCB3cm9uZ0NhbGxkYXRhID0gJzB4ZGVhZGJlZWYwMTAyMDMwNCc7XG4gICAgYXdhaXQgYXNzZXJ0LnJlamVjdHMoXG4gICAgICAoKSA9PlxuICAgICAgICBjb2luLnZlcmlmeVRyYW5zYWN0aW9uKHtcbiAgICAgICAgICB0eFByZWJ1aWxkOiB7IHR4SGV4IH0sXG4gICAgICAgICAgdHhQYXJhbXM6IHsgcmVjaXBpZW50czogW3sgYWRkcmVzczogbW9ja0NvbnRyYWN0LCBhbW91bnQ6ICcwJywgZGF0YTogd3JvbmdDYWxsZGF0YSB9XSB9LFxuICAgICAgICB9KSxcbiAgICAgIC9jYWxsZGF0YSBtaXNtYXRjaC9cbiAgICApO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIHRocm93IHdoZW4gcmVjaXBpZW50IGNvdW50IGRvZXMgbm90IG1hdGNoIGNhbGwgY291bnQnLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgdHhIZXggPSBhd2FpdCBidWlsZFJhd0NhbGxUeChtb2NrQ29udHJhY3QsIG1vY2tDYWxsZGF0YSk7XG4gICAgYXdhaXQgYXNzZXJ0LnJlamVjdHMoXG4gICAgICAoKSA9PlxuICAgICAgICBjb2luLnZlcmlmeVRyYW5zYWN0aW9uKHtcbiAgICAgICAgICB0eFByZWJ1aWxkOiB7IHR4SGV4IH0sXG4gICAgICAgICAgdHhQYXJhbXM6IHtcbiAgICAgICAgICAgIHJlY2lwaWVudHM6IFtcbiAgICAgICAgICAgICAgeyBhZGRyZXNzOiBtb2NrQ29udHJhY3QsIGFtb3VudDogJzAnLCBkYXRhOiBtb2NrQ2FsbGRhdGEgfSxcbiAgICAgICAgICAgICAgeyBhZGRyZXNzOiBtb2NrQ29udHJhY3QsIGFtb3VudDogJzAnLCBkYXRhOiBtb2NrQ2FsbGRhdGEgfSxcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgfSxcbiAgICAgICAgfSksXG4gICAgICAvY2FsbFxcKHNcXCkvXG4gICAgKTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCBwYXJzZSBhIHJhdyBjYWxsIHRyYW5zYWN0aW9uIGFuZCBleHBvc2UgdGhlIGNvbnRyYWN0IGFzIGFuIG91dHB1dCcsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCB0eEhleCA9IGF3YWl0IGJ1aWxkUmF3Q2FsbFR4KG1vY2tDb250cmFjdCwgbW9ja0NhbGxkYXRhKTtcbiAgICBjb25zdCBwYXJzZWQgPSBhd2FpdCBjb2luLnBhcnNlVHJhbnNhY3Rpb24oeyB0eEhleCB9KTtcbiAgICBhc3NlcnQub2soQXJyYXkuaXNBcnJheShwYXJzZWQub3V0cHV0cykpO1xuICAgIGFzc2VydC5zdHJpY3RFcXVhbChwYXJzZWQub3V0cHV0cy5sZW5ndGgsIDEpO1xuICAgIGFzc2VydC5zdHJpY3RFcXVhbChwYXJzZWQub3V0cHV0c1swXS5hZGRyZXNzLnRvTG93ZXJDYXNlKCksIG1vY2tDb250cmFjdC50b0xvd2VyQ2FzZSgpKTtcbiAgfSk7XG59KTtcbiJdfQ==
|