@bitgo/sdk-coin-ada 4.23.3 → 4.24.1
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/adaToken.d.ts.map +1 -1
- package/dist/src/adaToken.js +4 -3
- package/dist/src/lib/index.d.ts +1 -1
- package/dist/src/lib/index.d.ts.map +1 -1
- package/dist/src/lib/index.js +1 -1
- package/dist/src/lib/transaction.d.ts +9 -0
- package/dist/src/lib/transaction.d.ts.map +1 -1
- package/dist/src/lib/transaction.js +1 -1
- package/dist/src/lib/transactionBuilder.d.ts +33 -1
- package/dist/src/lib/transactionBuilder.d.ts.map +1 -1
- package/dist/src/lib/transactionBuilder.js +93 -1
- package/dist/test/unit/tokenWithdrawal.js +118 -1
- package/dist/test/unit/transactionBuilder.js +92 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +7 -7
|
@@ -837,6 +837,123 @@ describe('ADA Token Operations', async () => {
|
|
|
837
837
|
})
|
|
838
838
|
.should.be.rejectedWith('tx outputs does not match with expected address');
|
|
839
839
|
});
|
|
840
|
+
it('should verify sponsored token consolidation when fee address output is present', async () => {
|
|
841
|
+
const feeAddress = 'addr_test1qz2fxv2umyhttkxyxp8x0dlpdt3k6cwng5pxj3jhsydzer3jcu5d8ps7zex2k2xt3uqxgjqnnj83ws8lhrn648jjxtwq2ytjqp';
|
|
842
|
+
const quantity = '100';
|
|
843
|
+
const senderInputBalance = 5000000;
|
|
844
|
+
const feeAddressInputBalance = 20000000;
|
|
845
|
+
const totalAssetList = {
|
|
846
|
+
[fingerprint]: {
|
|
847
|
+
quantity: '100',
|
|
848
|
+
policy_id: policyId,
|
|
849
|
+
asset_name: asciiEncodedName,
|
|
850
|
+
},
|
|
851
|
+
};
|
|
852
|
+
// Build a sponsored token consolidation: tokens go back to senderAddress, fee sponsor gets ADA change
|
|
853
|
+
const txBuilder = factory.getTransferBuilder();
|
|
854
|
+
txBuilder.input({
|
|
855
|
+
transaction_id: '3677e75c7ba699bfdc6cd57d42f246f86f63aefd76025006ac78313fad2bba21',
|
|
856
|
+
transaction_index: 1,
|
|
857
|
+
});
|
|
858
|
+
txBuilder.input({
|
|
859
|
+
transaction_id: '3677e75c7ba699bfdc6cd57d42f246f86f63aefd76025006ac78313fad2bba22',
|
|
860
|
+
transaction_index: 0,
|
|
861
|
+
});
|
|
862
|
+
// Consolidation output: tokens go back to the sender's base address
|
|
863
|
+
txBuilder.output({
|
|
864
|
+
address: senderAddress,
|
|
865
|
+
amount: '0',
|
|
866
|
+
multiAssets: {
|
|
867
|
+
asset_name: asciiEncodedName,
|
|
868
|
+
policy_id: policyId,
|
|
869
|
+
quantity,
|
|
870
|
+
fingerprint,
|
|
871
|
+
},
|
|
872
|
+
});
|
|
873
|
+
txBuilder.changeAddress(senderAddress, senderInputBalance.toString(), totalAssetList);
|
|
874
|
+
txBuilder.sponsorshipInfo({
|
|
875
|
+
feeAddress: feeAddress,
|
|
876
|
+
feeAddressInputBalance: feeAddressInputBalance.toString(),
|
|
877
|
+
});
|
|
878
|
+
txBuilder.ttl(800000000);
|
|
879
|
+
txBuilder.isTokenTransaction();
|
|
880
|
+
const tx = (await txBuilder.build());
|
|
881
|
+
const txHex = tx.toBroadcastFormat();
|
|
882
|
+
const mockWallet = {
|
|
883
|
+
coinSpecific: () => ({
|
|
884
|
+
baseAddress: senderAddress,
|
|
885
|
+
}),
|
|
886
|
+
};
|
|
887
|
+
const txParams = { recipients: undefined };
|
|
888
|
+
const txPrebuild = { txHex, txInfo: { feeAddress } };
|
|
889
|
+
const verification = { consolidationToBaseAddress: true };
|
|
890
|
+
const isVerified = await adaToken.verifyTransaction({
|
|
891
|
+
txParams,
|
|
892
|
+
txPrebuild,
|
|
893
|
+
verification,
|
|
894
|
+
wallet: mockWallet,
|
|
895
|
+
});
|
|
896
|
+
isVerified.should.equal(true);
|
|
897
|
+
});
|
|
898
|
+
it('should fail sponsored token consolidation when output goes to unexpected third-party address', async () => {
|
|
899
|
+
const feeAddress = 'addr_test1qz2fxv2umyhttkxyxp8x0dlpdt3k6cwng5pxj3jhsydzer3jcu5d8ps7zex2k2xt3uqxgjqnnj83ws8lhrn648jjxtwq2ytjqp';
|
|
900
|
+
const quantity = '100';
|
|
901
|
+
const senderInputBalance = 5000000;
|
|
902
|
+
const feeAddressInputBalance = 20000000;
|
|
903
|
+
const totalAssetList = {
|
|
904
|
+
[fingerprint]: {
|
|
905
|
+
quantity: '100',
|
|
906
|
+
policy_id: policyId,
|
|
907
|
+
asset_name: asciiEncodedName,
|
|
908
|
+
},
|
|
909
|
+
};
|
|
910
|
+
// Build transaction where token output goes to an unexpected third-party address
|
|
911
|
+
const txBuilder = factory.getTransferBuilder();
|
|
912
|
+
txBuilder.input({
|
|
913
|
+
transaction_id: '3677e75c7ba699bfdc6cd57d42f246f86f63aefd76025006ac78313fad2bba21',
|
|
914
|
+
transaction_index: 1,
|
|
915
|
+
});
|
|
916
|
+
txBuilder.input({
|
|
917
|
+
transaction_id: '3677e75c7ba699bfdc6cd57d42f246f86f63aefd76025006ac78313fad2bba22',
|
|
918
|
+
transaction_index: 0,
|
|
919
|
+
});
|
|
920
|
+
// Output goes to receiverAddress (third party), not the base address
|
|
921
|
+
txBuilder.output({
|
|
922
|
+
address: receiverAddress,
|
|
923
|
+
amount: '0',
|
|
924
|
+
multiAssets: {
|
|
925
|
+
asset_name: asciiEncodedName,
|
|
926
|
+
policy_id: policyId,
|
|
927
|
+
quantity,
|
|
928
|
+
fingerprint,
|
|
929
|
+
},
|
|
930
|
+
});
|
|
931
|
+
txBuilder.changeAddress(senderAddress, senderInputBalance.toString(), totalAssetList);
|
|
932
|
+
txBuilder.sponsorshipInfo({
|
|
933
|
+
feeAddress: feeAddress,
|
|
934
|
+
feeAddressInputBalance: feeAddressInputBalance.toString(),
|
|
935
|
+
});
|
|
936
|
+
txBuilder.ttl(800000000);
|
|
937
|
+
txBuilder.isTokenTransaction();
|
|
938
|
+
const tx = (await txBuilder.build());
|
|
939
|
+
const txHex = tx.toBroadcastFormat();
|
|
940
|
+
const mockWallet = {
|
|
941
|
+
coinSpecific: () => ({
|
|
942
|
+
baseAddress: senderAddress,
|
|
943
|
+
}),
|
|
944
|
+
};
|
|
945
|
+
const txParams = { recipients: undefined };
|
|
946
|
+
const txPrebuild = { txHex, txInfo: { feeAddress } };
|
|
947
|
+
const verification = { consolidationToBaseAddress: true };
|
|
948
|
+
await adaToken
|
|
949
|
+
.verifyTransaction({
|
|
950
|
+
txParams,
|
|
951
|
+
txPrebuild,
|
|
952
|
+
verification,
|
|
953
|
+
wallet: mockWallet,
|
|
954
|
+
})
|
|
955
|
+
.should.be.rejectedWith('tx outputs does not match with expected address');
|
|
956
|
+
});
|
|
840
957
|
});
|
|
841
958
|
});
|
|
842
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9rZW5XaXRoZHJhd2FsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vdGVzdC91bml0L3Rva2VuV2l0aGRyYXdhbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLG9EQUE0QjtBQUM1Qiw4Q0FBa0Q7QUFDbEQsdURBQXlDO0FBQ3pDLG1DQUFnRTtBQUNoRSw0Q0FBdUM7QUFDdkMsc0ZBQXdFO0FBRXhFLDhDQUEwRDtBQUMxRCw0Q0FBMEM7QUFFMUMsUUFBUSxDQUFDLHNCQUFzQixFQUFFLEtBQUssSUFBSSxFQUFFO0lBQzFDLE1BQU0sT0FBTyxHQUFHLElBQUksK0JBQXlCLENBQUMsZUFBSyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO0lBRWpFLE1BQU0sZUFBZSxHQUFHLFFBQVEsQ0FBQyxLQUFLLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FBQztJQUM5RCxNQUFNLGFBQWEsR0FBRyxRQUFRLENBQUMsS0FBSyxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUM7SUFFNUQsTUFBTSxRQUFRLEdBQUcsMERBQTBELENBQUM7SUFDNUUsTUFBTSxnQkFBZ0IsR0FBRyxXQUFXLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUNuRSxNQUFNLFNBQVMsR0FBRyxZQUFZLENBQUM7SUFDL0IsTUFBTSxJQUFJLEdBQUcsT0FBTyxDQUFDO0lBQ3JCLE1BQU0sZ0JBQWdCLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsT0FBTyxDQUFDLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3BFLE1BQU0sV0FBVyxHQUFHLDhDQUE4QyxDQUFDO0lBRW5FLE1BQU0sbUJBQW1CLEdBQUcsMERBQTBELENBQUM7SUFDdkYsTUFBTSwyQkFBMkIsR0FBRyxXQUFXLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxtQkFBbUIs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LEVBQUUsZ0JBQWdCO29CQUM1QixTQUFTLEVBQUUsUUFBUTtvQkFDbkIsUUFBUTtvQkFDUixXQUFXO2lCQUNaO2FBQ0YsQ0FBQyxDQUFDO1lBRUgsU0FBUyxDQUFDLGFBQWEsQ0FBQyxhQUFhLEVBQUUsVUFBVSxDQUFDLFFBQVEsRUFBRSxFQUFFLGNBQWMsQ0FBQyxDQUFDO1lBQzlFLFNBQVMsQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUM7WUFDekIsU0FBUyxDQUFDLGtCQUFrQixFQUFFLENBQUM7WUFDL0IsTUFBTSxFQUFFLEdBQUcsQ0FBQyxNQUFNLFNBQVMsQ0FBQyxLQUFLLEVBQUUsQ0FBZ0IsQ0FBQztZQUNwRCxNQUFNLEtBQUssR0FBRyxFQUFFLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztZQUVyQywwQ0FBMEM7WUFDMUMsTUFBTSxVQUFVLEdBQUc7Z0JBQ2pCLFlBQVksRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDO29CQUNuQixXQUFXLEVBQUUsYUFBYSxFQUFFLHNEQUFzRDtpQkFDbkYsQ0FBQzthQUNILENBQUM7WUFFRixNQUFNLFFBQVEsR0FBRztnQkFDZixVQUFVLEVBQUUsU0FBUzthQUN0QixDQUFDO1lBRUYsTUFBTSxVQUFVLEdBQUcsRUFBRSxLQUFLLEVBQUUsQ0FBQztZQUM3QixNQUFNLFlBQVksR0FBRyxFQUFFLDBCQUEwQixFQUFFLElBQUksRUFBRSxDQUFDO1lBRTFELE1BQU0sUUFBUTtpQkFDWCxpQkFBaUIsQ0FBQztnQkFDakIsUUFBUTtnQkFDUixVQUFVO2dCQUNWLFlBQVk7Z0JBQ1osTUFBTSxFQUFFLFVBQWlCO2FBQzFCLENBQUM7aUJBQ0QsTUFBTSxDQUFDLEVBQUUsQ0FBQyxZQUFZLENBQUMsaURBQWlELENBQUMsQ0FBQztRQUMvRSxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgc2hvdWxkIGZyb20gJ3Nob3VsZCc7XG5pbXBvcnQgeyBUcmFuc2FjdGlvblR5cGUgfSBmcm9tICdAYml0Z28vc2RrLWNvcmUnO1xuaW1wb3J0ICogYXMgdGVzdERhdGEgZnJvbSAnLi4vcmVzb3VyY2VzJztcbmltcG9ydCB7IFRyYW5zYWN0aW9uQnVpbGRlckZhY3RvcnksIEFkYVRva2VuIH0gZnJvbSAnLi4vLi4vc3JjJztcbmltcG9ydCB7IGNvaW5zIH0gZnJvbSAnQGJpdGdvL3N0YXRpY3MnO1xuaW1wb3J0ICogYXMgQ2FyZGFub1dhc20gZnJvbSAnQGVtdXJnby9jYXJkYW5vLXNlcmlhbGl6YXRpb24tbGliLW5vZGVqcyc7XG5pbXBvcnQgeyBUcmFuc2FjdGlvbiB9IGZyb20gJy4uLy4uL3NyYy9saWIvdHJhbnNhY3Rpb24nO1xuaW1wb3J0IHsgVGVzdEJpdEdvLCBUZXN0Qml0R29BUEkgfSBmcm9tICdAYml0Z28vc2RrLXRlc3QnO1xuaW1wb3J0IHsgQml0R29BUEkgfSBmcm9tICdAYml0Z28vc2RrLWFwaSc7XG5cbmRlc2NyaWJlKCdBREEgVG9rZW4gT3BlcmF0aW9ucycsIGFzeW5jICgpID0+IHtcbiAgY29uc3QgZmFjdG9yeSA9IG5ldyBUcmFuc2FjdGlvbkJ1aWxkZXJGYWN0b3J5KGNvaW5zLmdldCgndGFkYScpKTtcblxuICBjb25zdCByZWNlaXZlckFkZHJlc3MgPSB0ZXN0RGF0YS5yYXdUeC5vdXRwdXRBZGRyZXNzMi5hZGRyZXNzO1xuICBjb25zdCBzZW5kZXJBZGRyZXNzID0gdGVzdERhdGEucmF3VHgub3V0cHV0QWRkcmVzczEuYWRkcmVzcztcblxuICBjb25zdCBwb2xpY3lJZCA9ICdlMTZjMmRjOGFlOTM3ZThkMzc5MGM3ZmQ3MTY4ZDdiOTk0NjIxYmExNGNhMTE0MTVmMzlmZWQ3Mic7XG4gIGNvbnN0IHBvbGljeVNjcmlwdEhhc2ggPSBDYXJkYW5vV2FzbS5TY3JpcHRIYXNoLmZyb21faGV4KHBvbGljeUlkKTtcbiAgY29uc3QgYXNzZXROYW1lID0gJ3RhZGE6d2F0ZXInO1xuICBjb25zdCBuYW1lID0gJ1dBVEVSJztcbiAgY29uc3QgYXNjaWlFbmNvZGVkTmFtZSA9IEJ1ZmZlci5mcm9tKG5hbWUsICdhc2NpaScpLnRvU3RyaW5nKCdoZXgnKTtcbiAgY29uc3QgZmluZ2VycHJpbnQgPSAnYXNzZXQxbjY5eGY2MGQwNzYweHZuOHYyZmZkNWZydnNtMGNsMnI4aGZqZjYnO1xuXG4gIGNvbnN0IHVuc3VwcG9ydGVkUG9saWN5SWQgPSAnMjc5YzkwOWYzNDhlNTMzZGE1ODA4ODk4Zjg3ZjlhMTRiYjJjM2RmYmJhY2NjZDYzMWQ5MjdhM2YnO1xuICBjb25zdCB1bnN1cHBvcnRlZFBvbGljeVNjcmlwdEhhc2ggPSBDYXJkYW5vV2FzbS5TY3JpcHRIYXNoLmZyb21faGV4KHVuc3VwcG9ydGVkUG9saWN5SWQpO1xuICBjb25zdCB1bnN1cHBvcnRlZE5hbWUgPSAnQklUR08nO1xuICBjb25zdCB1bnN1cHBvcnRlZEFzY2lpRW5jb2RlZE5hbWUgPSBCdWZmZXIuZnJvbSh1bnN1cHBvcnRlZE5hbWUsICdhc2NpaScpLnRvU3RyaW5nKCdoZXgnKTtcbiAgY29uc3QgdW5zdXBwb3J0ZWRGaW5nZXJwcmludCA9ICdhc3NldDFtOGgwZ2s3ZjZ4NWo1cWcweDVtNHE1ZjVqNXFnMHg1bTRxNWY1aic7XG5cbiAgaXQoYHNob3VsZCBidWlsZCBhIHRyYW5zYWN0aW9uIHdpdGggdG9rZW4gJHthc3NldE5hbWV9IC0gYWRhICsgJHthc3NldE5hbWV9YCwgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IHF1YW50aXR5ID0gJzIwJztcbiAgICBjb25zdCB0b3RhbElucHV0ID0gMjAwMDAwMDA7XG4gICAgY29uc3QgdG90YWxBc3NldExpc3QgPSB7XG4gICAgICBbZmluZ2VycHJpbnRdOiB7XG4gICAgICAgIHF1YW50aXR5OiAnMTAwJyxcbiAgICAgICAgcG9saWN5X2lkOiBwb2xpY3lJZCxcbiAgICAgICAgYXNzZXRfbmFtZTogYXNjaWlFbmNvZGVkTmFtZSxcbiAgICAgIH0sXG4gICAgfTtcbiAgICBjb25zdCBleHBlY3RlZENoYW5nZUFkYSA9IChcbiAgICAgIHRvdGFsSW5wdXQgLVxuICAgICAgMTUwMDAwMCAvKiBtaW4gYWRhIGZvciBjaGFuZ2UgdG9rZW4gdXR4byAqLyAtXG4gICAgICAxNTAwMDAwIC8qIG1pbiBhZGEgZm9yIHJlY2lwaWVudCB0b2tlbiB1dHhvKi8gLVxuICAgICAgMTczNTk3XG4gICAgKSAvKiBmZWUgKi9cbiAgICAgIC50b1N0cmluZygpO1xuICAgIGNvbnN0IGV4cGVjdGVkQ2hhbmdlVG9rZW4gPSAnODAnO1xuXG4gICAgY29uc3QgdHhCdWlsZGVyID0gZmFjdG9yeS5nZXRUcmFuc2ZlckJ1aWxkZXIoKTtcbiAgICB0eEJ1aWxkZXIuaW5wdXQoe1xuICAgICAgdHJhbnNhY3Rpb25faWQ6ICczNjc3ZTc1YzdiYTY5OWJmZGM2Y2Q1N2Q0MmYyNDZmODZmNjNhZWZkNzYwMjUwMDZhYzc4MzEzZmFkMmJiYTIxJyxcbiAgICAgIHRyYW5zYWN0aW9uX2luZGV4OiAxLFxuICAgIH0pO1xuXG4gICAgdHhCdWlsZGVyLm91dHB1dCh7XG4gICAgICBhZGRyZXNzOiByZWNlaXZlckFkZHJlc3MsXG4gICAgICBhbW91bnQ6ICcwJywgLy8gU2V0IEFEQSBhbW91bnQgdG8gMCBmb3IgdG9rZW4gdHJhbnNmZXIgKG1pbiBBREEgaXMgaGFuZGxlZCBpbiBzZGsgYnVpbGQpXG4gICAgICBtdWx0aUFzc2V0czoge1xuICAgICAgICBhc3NldF9uYW1lOiBhc2NpaUVuY29kZWROYW1lLFxuICAgICAgICBwb2xpY3lfaWQ6IHBvbGljeUlkLFxuICAgICAgICBxdWFudGl0eSxcbiAgICAgICAgZmluZ2VycHJpbnQsXG4gICAgICB9LFxuICAgIH0pO1xuXG4gICAgdHhCdWlsZGVyLmNoYW5nZUFkZHJlc3Moc2VuZGVyQWRkcmVzcywgdG90YWxJbnB1dC50b1N0cmluZygpLCB0b3RhbEFzc2V0TGlzdCk7XG4gICAgdHhCdWlsZGVyLnR0bCg4MDAwMDAwMDApO1xuICAgIHR4QnVpbGRlci5pc1Rva2VuVHJhbnNhY3Rpb24oKTtcbiAgICBjb25zdCB0eCA9IChhd2FpdCB0eEJ1aWxkZXIuYnVpbGQoKSkgYXMgVHJhbnNhY3Rpb247XG5cbiAgICBzaG91bGQuZXF1YWwodHgudHlwZSwgVHJhbnNhY3Rpb25UeXBlLlNlbmQpO1xuICAgIGNvbnN0IHR4RGF0YSA9IHR4LnRvSnNvbigpO1xuXG4gICAgLy8gQ2hlY2sgb3V0cHV0cyAoc2hvdWxkIGluY2x1ZGUgbXVsdGktYXNzZXQgYW5kIHJlZ3VsYXIgY2hhbmdlKVxuICAgIHR4RGF0YS5vdXRwdXRzLmxlbmd0aC5zaG91bGQuZXF1YWwoMyk7XG4gICAgdHhEYXRhLmlucHV0cy5sZW5ndGguc2hvdWxkLmVxdWFsKDEpO1xuXG4gICAgLy8gT25lIG91dHB1dCBzaG91bGQgaGF2ZSB0aGUgbXVsdGktYXNzZXQgY2hhbmdlIGFuZCB0aGUgb3RoZXIgZm9yIHRoZSB0cmFuc2ZlclxuICAgIGNvbnN0IGFzc2V0T3V0cHV0ID0gdHhEYXRhLm91dHB1dHMuZmlsdGVyKChvdXRwdXQpID0+IG91dHB1dC5tdWx0aUFzc2V0cyAhPT0gdW5kZWZpbmVkKTtcbiAgICBhc3NldE91dHB1dCEubGVuZ3RoLnNob3VsZC5lcXVhbCgyKTtcblxuICAgIC8vIFZlcmlmeSBpbnB1dHMgYW5kIG91dHB1dHNcbiAgICBjb25zdCBpbnB1dCA9IHR4RGF0YS5pbnB1dHNbMF07XG4gICAgaW5wdXQudHJhbnNhY3Rpb25faWQuc2hvdWxkLmVxdWFsKCczNjc3ZTc1YzdiYTY5OWJmZGM2Y2Q1N2Q0MmYyNDZmODZmNjNhZWZkNzYwMjUwMDZhYzc4MzEzZmFkMmJiYTIxJyk7XG4gICAgaW5wdXQudHJhbnNhY3Rpb25faW5kZXguc2hvdWxkLmVxdWFsKDEpO1xuXG4gICAgLy8gVmFsaWRhdGUgcmVjZWl2ZXIgb3V0cHV0XG4gICAgY29uc3QgcmVjZWl2ZXJPdXRwdXQgPSB0eERhdGEub3V0cHV0cy5maWx0ZXIoKG91dHB1dCkgPT4gb3V0cHV0LmFkZHJlc3MgPT09IHJlY2VpdmVyQWRkcmVzcyk7XG4gICAgcmVjZWl2ZXJPdXRwdXQubGVuZ3RoLnNob3VsZC5lcXVhbCgxKTtcbiAgICByZWNlaXZlck91dHB1dFswXS5hbW91bnQuc2hvdWxkLmVxdWFsKCcxNTAwMDAwJyk7IC8vIE1pbmltdW0gQURBIGZvciBhc3NldCBvdXRwdXRcbiAgICAocmVjZWl2ZXJPdXRwdXRbMF0ubXVsdGlBc3NldHMhIGFzIENhcmRhbm9XYXNtLk11bHRpQXNzZXQpXG4gICAgICAuZ2V0X2Fzc2V0KHBvbGljeVNjcmlwdEhhc2gsIENhcmRhbm9XYXNtLkFzc2V0TmFtZS5uZXcoQnVmZmVyLmZyb20oYXNjaWlFbmNvZGVkTmFtZSwgJ2hleCcpKSlcbiAgICAgIC50b19zdHIoKVxuICAgICAgLnNob3VsZC5lcXVhbChxdWFudGl0eSk7XG5cbiAgICAvLyBWYWxpZGF0ZSBjaGFuZ2Ugb3V0cHV0cyAob25lIHdpdGggYXNzZXQgYW5kIG9uZSB3aXRob3V0KVxuICAgIGNvbnN0IGNoYW5nZU91dHB1dCA9IHR4RGF0YS5vdXRwdXRzLmZpbHRlcigob3V0cHV0KSA9PiBvdXRwdXQuYWRkcmVzcyA9PT0gc2VuZGVyQWRkcmVzcyk7XG4gICAgY2hhbmdlT3V0cHV0Lmxlbmd0aC5zaG91bGQuZXF1YWwoMik7XG4gICAgY29uc3QgY2hhbmdlV2l0aEFzc2V0ID0gY2hhbmdlT3V0cHV0LmZpbmQoKG91dHB1dCkgPT4gb3V0cHV0Lm11bHRpQXNzZXRzICE9PSB1bmRlZmluZWQpO1xuICAgIHNob3VsZC5leGlzdChjaGFuZ2VXaXRoQXNzZXQpO1xuICAgIGNoYW5nZVdpdGhBc3NldCEuYW1vdW50LnNob3VsZC5lcXVhbCgnMTUwMDAwMCcpOyAvLyBNaW5pbXVtIEFEQSBmb3IgYXNzZXQgb3V0cHV0XG4gICAgKGNoYW5nZVdpdGhBc3NldCEubXVsdGlBc3NldHMhIGFzIENhcmRhbm9XYXNtLk11bHRpQXNzZXQpXG4gICAgICAuZ2V0X2Fzc2V0KHBvbGljeVNjcmlwdEhhc2gsIENhcmRhbm9XYXNtLkFzc2V0TmFtZS5uZXcoQnVmZmVyLmZyb20oYXNjaWlFbmNvZGVkTmFtZSwgJ2hleCcpKSlcbiAgICAgIC50b19zdHIoKVxuICAgICAgLnNob3VsZC5lcXVhbChleHBlY3RlZENoYW5nZVRva2VuKTtcblxuICAgIGNvbnN0IGNoYW5nZVdpdGhvdXRBc3NldCA9IGNoYW5nZU91dHB1dC5maW5kKChvdXRwdXQpID0+IG91dHB1dC5tdWx0aUFzc2V0cyA9PT0gdW5kZWZpbmVkKTtcbiAgICBzaG91bGQuZXhpc3QoY2hhbmdlV2l0aG91dEFzc2V0KTtcbiAgICBjaGFuZ2VXaXRob3V0QXNzZXQhLmFtb3VudC5zaG91bGQuZXF1YWwoZXhwZWN0ZWRDaGFuZ2VBZGEpOyAvLyBSZW1haW5pbmcgQURBIGFmdGVyIGZlZXMgYW5kIG1pbiBBREFzXG4gIH0pO1xuXG4gIGl0KGBzaG91bGQgYnVpbGQgYSB0cmFuc2FjdGlvbiB3aXRoIHRva2VuICR7YXNzZXROYW1lfSAtIGFkYSArICR7YXNzZXROYW1lfSArIHVuc3VwcG9ydGVkIHRva2VuYCwgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IHF1YW50aXR5ID0gJzIwJztcbiAgICBjb25zdCB0b3RhbElucHV0ID0gMjAwMDAwMDA7XG4gICAgY29uc3QgdG90YWxBc3NldExpc3QgPSB7XG4gICAgICBbZmluZ2VycHJpbnRdOiB7XG4gICAgICAgIHF1YW50aXR5OiAnMTAwJyxcbiAgICAgICAgcG9saWN5X2lkOiBwb2xpY3lJZCxcbiAgICAgICAgYXNzZXRfbmFtZTogYXNjaWlFbmNvZGVkTmFtZSxcbiAgICAgIH0sXG4gICAgICBbdW5zdXBwb3J0ZWRGaW5nZXJwcmludF06IHtcbiAgICAgICAgcXVhbnRpdHk6ICcxMDAwMCcsXG4gICAgICAgIHBvbGljeV9pZDogdW5zdXBwb3J0ZWRQb2xpY3lJZCxcbiAgICAgICAgYXNzZXRfbmFtZTogdW5zdXBwb3J0ZWRBc2NpaUVuY29kZWROYW1lLFxuICAgICAgfSxcbiAgICB9O1xuICAgIGNvbnN0IGV4cGVjdGVkQ2hhbmdlQWRhID0gKFxuICAgICAgdG90YWxJbnB1dCAtXG4gICAgICAxNTAwMDAwIC8qIG1pbiBhZGEgZm9yIGNoYW5nZSB0b2tlbiB1dHhvICovIC1cbiAgICAgIDE1MDAwMDAgLyogbWluIGFkYSBmb3IgcmVjaXBpZW50IHRva2VuIHV0eG8qLyAtXG4gICAgICAxNTAwMDAwIC8qIG1pbiBhZGEgZm9yIHVuc3VwcG9ydGVkIHRva2VuIGNoYW5nZSB1dHhvICovIC1cbiAgICAgIDE3OTg4OVxuICAgICkgLyogZmVlICovXG4gICAgICAudG9TdHJpbmcoKTtcbiAgICBjb25zdCBleHBlY3RlZENoYW5nZVRva2VuID0gJzgwJztcblxuICAgIGNvbnN0IHR4QnVpbGRlciA9IGZhY3RvcnkuZ2V0VHJhbnNmZXJCdWlsZGVyKCk7XG4gICAgdHhCdWlsZGVyLmlucHV0KHtcbiAgICAgIHRyYW5zYWN0aW9uX2lkOiAnMzY3N2U3NWM3YmE2OTliZmRjNmNkNTdkNDJmMjQ2Zjg2ZjYzYWVmZDc2MDI1MDA2YWM3ODMxM2ZhZDJiYmEyMScsXG4gICAgICB0cmFuc2FjdGlvbl9pbmRleDogMSxcbiAgICB9KTtcbiAgICB0eEJ1aWxkZXIuaW5wdXQoe1xuICAgICAgdHJhbnNhY3Rpb25faWQ6ICczNjc3ZTc1YzdiYTY5OWJmZGM2Y2Q1N2Q0MmYyNDZmODZmNjNhZWZkNzYwMjUwMDZhYzc4MzEzZmFkMmJiYTIyJyxcbiAgICAgIHRyYW5zYWN0aW9uX2luZGV4OiAxLFxuICAgIH0pO1xuXG4gICAgdHhCdWlsZGVyLm91dHB1dCh7XG4gICAgICBhZGRyZXNzOiByZWNlaXZlckFkZHJlc3MsXG4gICAgICBhbW91bnQ6ICcwJywgLy8gU2V0IEFEQSBhbW91bnQgdG8gMCBmb3IgdG9rZW4gdHJhbnNmZXIgKG1pbiBBREEgaXMgaGFuZGxlZCBpbiBzZGsgYnVpbGQpXG4gICAgICBtdWx0aUFzc2V0czoge1xuICAgICAgICBhc3NldF9uYW1lOiBhc2NpaUVuY29kZWROYW1lLFxuICAgICAgICBwb2xpY3lfaWQ6IHBvbGljeUlkLFxuICAgICAgICBxdWFudGl0eSxcbiAgICAgICAgZmluZ2VycHJpbnQsXG4gICAgICB9LFxuICAgIH0pO1xuXG4gICAgdHhCdWlsZGVyLmNoYW5nZUFkZHJlc3Moc2VuZGVyQWRkcmVzcywgdG90YWxJbnB1dC50b1N0cmluZygpLCB0b3RhbEFzc2V0TGlzdCk7XG4gICAgdHhCdWlsZGVyLnR0bCg4MDAwMDAwMDApO1xuICAgIHR4QnVpbGRlci5pc1Rva2VuVHJhbnNhY3Rpb24oKTtcbiAgICBjb25zdCB0eCA9IChhd2FpdCB0eEJ1aWxkZXIuYnVpbGQoKSkgYXMgVHJhbnNhY3Rpb247XG5cbiAgICBzaG91bGQuZXF1YWwodHgudHlwZSwgVHJhbnNhY3Rpb25UeXBlLlNlbmQpO1xuICAgIGNvbnN0IHR4RGF0YSA9IHR4LnRvSnNvbigpO1xuXG4gICAgLy8gQ2hlY2sgb3V0cHV0cyAoc2hvdWxkIGluY2x1ZGUgbXVsdGktYXNzZXQgYW5kIHJlZ3VsYXIgY2hhbmdlKVxuICAgIHR4RGF0YS5vdXRwdXRzLmxlbmd0aC5zaG91bGQuZXF1YWwoNCk7XG4gICAgdHhEYXRhLmlucHV0cy5sZW5ndGguc2hvdWxkLmVxdWFsKDIpO1xuXG4gICAgLy8gT25lIG91dHB1dCBzaG91bGQgaGF2ZSB0aGUgbXVsdGktYXNzZXQgY2hhbmdlIGFuZCB0aGUgb3RoZXIgZm9yIHRoZSB0cmFuc2ZlclxuICAgIGNvbnN0IGFzc2V0T3V0cHV0ID0gdHhEYXRhLm91dHB1dHMuZmlsdGVyKChvdXRwdXQpID0+IG91dHB1dC5tdWx0aUFzc2V0cyAhPT0gdW5kZWZpbmVkKTtcbiAgICBhc3NldE91dHB1dCEubGVuZ3RoLnNob3VsZC5lcXVhbCgzKTtcblxuICAgIC8vIFZlcmlmeSBpbnB1dHMgYW5kIG91dHB1dHNcbiAgICB0eERhdGEuaW5wdXRzWzBdLnRyYW5zYWN0aW9uX2lkLnNob3VsZC5lcXVhbCgnMzY3N2U3NWM3YmE2OTliZmRjNmNkNTdkNDJmMjQ2Zjg2ZjYzYWVmZDc2MDI1MDA2YWM3ODMxM2ZhZDJiYmEyMScpO1xuICAgIHR4RGF0YS5pbnB1dHNbMF0udHJhbnNhY3Rpb25faW5kZXguc2hvdWxkLmVxdWFsKDEpO1xuXG4gICAgdHhEYXRhLmlucHV0c1sxXS50cmFuc2FjdGlvbl9pZC5zaG91bGQuZXF1YWwoJzM2NzdlNzVjN2JhNjk5YmZkYzZjZDU3ZDQyZjI0NmY4NmY2M2FlZmQ3NjAyNTAwNmFjNzgzMTNmYWQyYmJhMjInKTtcbiAgICB0eERhdGEuaW5wdXRzWzFdLnRyYW5zYWN0aW9uX2luZGV4LnNob3VsZC5lcXVhbCgxKTtcblxuICAgIC8vIFZhbGlkYXRlIHJlY2VpdmVyIG91dHB1dFxuICAgIGNvbnN0IHJlY2VpdmVyT3V0cHV0ID0gdHhEYXRhLm91dHB1dHMuZmlsdGVyKChvdXRwdXQpID0+IG91dHB1dC5hZGRyZXNzID09PSByZWNlaXZlckFkZHJlc3MpO1xuICAgIHJlY2VpdmVyT3V0cHV0Lmxlbmd0aC5zaG91bGQuZXF1YWwoMSk7XG4gICAgcmVjZWl2ZXJPdXRwdXRbMF0uYW1vdW50LnNob3VsZC5lcXVhbCgnMTUwMDAwMCcpOyAvLyBNaW5pbXVtIEFEQSBmb3IgYXNzZXQgb3V0cHV0XG4gICAgKHJlY2VpdmVyT3V0cHV0WzBdLm11bHRpQXNzZXRzISBhcyBDYXJkYW5vV2FzbS5NdWx0aUFzc2V0KVxuICAgICAgLmdldF9hc3NldChwb2xpY3lTY3JpcHRIYXNoLCBDYXJkYW5vV2FzbS5Bc3NldE5hbWUubmV3KEJ1ZmZlci5mcm9tKGFzY2lpRW5jb2RlZE5hbWUsICdoZXgnKSkpXG4gICAgICAudG9fc3RyKClcbiAgICAgIC5zaG91bGQuZXF1YWwocXVhbnRpdHkpO1xuXG4gICAgLy8gVmFsaWRhdGUgY2hhbmdlIG91dHB1dHMgKG9uZSB3aXRoIHN1cHBvcnRlZCB0b2tlbiwgb25lIHdpdGggdW5zdXBwb3J0ZWQgdG9rZW4gYW5kIG9uZSBmb3IgcHVyZSBhZGEpXG4gICAgY29uc3QgY2hhbmdlT3V0cHV0ID0gdHhEYXRhLm91dHB1dHMuZmlsdGVyKChvdXRwdXQpID0+IG91dHB1dC5hZGRyZXNzID09PSBzZW5kZXJBZGRyZXNzKTtcbiAgICBjaGFuZ2VPdXRwdXQubGVuZ3RoLnNob3VsZC5lcXVhbCgzKTtcblxuICAgIGNvbnN0IGNoYW5nZVdpdGhBc3NldCA9IGNoYW5nZU91dHB1dC5maWx0ZXIoKG91dHB1dCkgPT4gb3V0cHV0Lm11bHRpQXNzZXRzICE9PSB1bmRlZmluZWQpO1xuICAgIGNoYW5nZVdpdGhBc3NldC5sZW5ndGguc2hvdWxkLmVxdWFsKDIpO1xuICAgIGxldCB0b2tlbnMgPSAwO1xuICAgIGNoYW5nZVdpdGhBc3NldC5mb3JFYWNoKChvdXRwdXQpID0+IHtcbiAgICAgIG91dHB1dCEuYW1vdW50LnNob3VsZC5lcXVhbCgnMTUwMDAwMCcpOyAvLyBNaW5pbXVtIEFEQSBmb3IgYXNzZXQgb3V0cHV0XG4gICAgICBjb25zdCBzdXBwb3J0ZWRUb2tlbkNoYW5nZVF0eSA9IChvdXRwdXQhLm11bHRpQXNzZXRzISBhcyBDYXJkYW5vV2FzbS5NdWx0aUFzc2V0KVxuICAgICAgICAuZ2V0X2Fzc2V0KHBvbGljeVNjcmlwdEhhc2gsIENhcmRhbm9XYXNtLkFzc2V0TmFtZS5uZXcoQnVmZmVyLmZyb20oYXNjaWlFbmNvZGVkTmFtZSwgJ2hleCcpKSlcbiAgICAgICAgLnRvX3N0cigpO1xuICAgICAgY29uc3QgdW5zdXBwb3J0ZWRUb2tlbkNoYW5nZVF0eSA9IChvdXRwdXQhLm11bHRpQXNzZXRzISBhcyBDYXJkYW5vV2FzbS5NdWx0aUFzc2V0KVxuICAgICAgICAuZ2V0X2Fzc2V0KFxuICAgICAgICAgIHVuc3VwcG9ydGVkUG9saWN5U2NyaXB0SGFzaCxcbiAgICAgICAgICBDYXJkYW5vV2FzbS5Bc3NldE5hbWUubmV3KEJ1ZmZlci5mcm9tKHVuc3VwcG9ydGVkQXNjaWlFbmNvZGVkTmFtZSwgJ2hleCcpKVxuICAgICAgICApXG4gICAgICAgIC50b19zdHIoKTtcbiAgICAgIGlmIChzdXBwb3J0ZWRUb2tlbkNoYW5nZVF0eSAhPT0gJzAnKSB7XG4gICAgICAgIHN1cHBvcnRlZFRva2VuQ2hhbmdlUXR5LnNob3VsZC5lcXVhbChleHBlY3RlZENoYW5nZVRva2VuKTtcbiAgICAgICAgdG9rZW5zKys7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB1bnN1cHBvcnRlZFRva2VuQ2hhbmdlUXR5IS5zaG91bGQuZXF1YWwoJzEwMDAwJyk7XG4gICAgICAgIHRva2VucysrO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHRva2Vucy5zaG91bGQuZXF1YWwoMik7XG5cbiAgICBjb25zdCBjaGFuZ2VXaXRob3V0QXNzZXQgPSBjaGFuZ2VPdXRwdXQuZmluZCgob3V0cHV0KSA9PiBvdXRwdXQubXVsdGlBc3NldHMgPT09IHVuZGVmaW5lZCk7XG4gICAgc2hvdWxkLmV4aXN0KGNoYW5nZVdpdGhvdXRBc3NldCk7XG4gICAgY2hhbmdlV2l0aG91dEFzc2V0IS5hbW91bnQuc2hvdWxkLmVxdWFsKGV4cGVjdGVkQ2hhbmdlQWRhKTsgLy8gUmVtYWluaW5nIEFEQSBhZnRlciBmZWVzIGFuZCBtaW4gQURBc1xuICB9KTtcblxuICBpdChgc2hvdWxkIGZhaWwgdG8gYnVpbGQgYSB0cmFuc2FjdGlvbiB3aXRoICR7YXNzZXROYW1lfSB0b2tlbiBhbmQgaW5zdWZmaWNpZW50IG1pbmltdW0gQURBYCwgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IHF1YW50aXR5ID0gJzIwJztcbiAgICBjb25zdCB0b3RhbElucHV0ID0gMjAwMDAwMDtcbiAgICBjb25zdCB0b3RhbEFzc2V0TGlzdCA9IHtcbiAgICAgIFtmaW5nZXJwcmludF06IHtcbiAgICAgICAgcXVhbnRpdHk6ICcxMDAnLFxuICAgICAgICBwb2xpY3lfaWQ6IHBvbGljeUlkLFxuICAgICAgICBhc3NldF9uYW1lOiBhc2NpaUVuY29kZWROYW1lLFxuICAgICAgfSxcbiAgICB9O1xuXG4gICAgY29uc3QgdHhCdWlsZGVyID0gZmFjdG9yeS5nZXRUcmFuc2ZlckJ1aWxkZXIoKTtcbiAgICB0eEJ1aWxkZXIuaW5wdXQoe1xuICAgICAgdHJhbnNhY3Rpb25faWQ6ICczNjc3ZTc1YzdiYTY5OWJmZGM2Y2Q1N2Q0MmYyNDZmODZmNjNhZWZkNzYwMjUwMDZhYzc4MzEzZmFkMmJiYTIxJyxcbiAgICAgIHRyYW5zYWN0aW9uX2luZGV4OiAxLFxuICAgIH0pO1xuXG4gICAgdHhCdWlsZGVyLm91dHB1dCh7XG4gICAgICBhZGRyZXNzOiByZWNlaXZlckFkZHJlc3MsXG4gICAgICBhbW91bnQ6ICcwJywgLy8gU2V0IEFEQSBhbW91bnQgdG8gMCBmb3IgdG9rZW4gdHJhbnNmZXIgKG1pbiBBREEgaXMgaGFuZGxlZCBpbiBzZGsgYnVpbGQpXG4gICAgICBtdWx0aUFzc2V0czoge1xuICAgICAgICBhc3NldF9uYW1lOiBhc2NpaUVuY29kZWROYW1lLFxuICAgICAgICBwb2xpY3lfaWQ6IHBvbGljeUlkLFxuICAgICAgICBxdWFudGl0eSxcbiAgICAgICAgZmluZ2VycHJpbnQsXG4gICAgICB9LFxuICAgIH0pO1xuXG4gICAgdHhCdWlsZGVyLmNoYW5nZUFkZHJlc3Moc2VuZGVyQWRkcmVzcywgdG90YWxJbnB1dC50b1N0cmluZygpLCB0b3RhbEFzc2V0TGlzdCk7XG4gICAgdHhCdWlsZGVyLnR0bCg4MDAwMDAwMDApO1xuICAgIHR4QnVpbGRlci5pc1Rva2VuVHJhbnNhY3Rpb24oKTtcblxuICAgIGF3YWl0IHR4QnVpbGRlclxuICAgICAgLmJ1aWxkKClcbiAgICAgIC5zaG91bGQucmVqZWN0ZWRXaXRoKFxuICAgICAgICAnSW5zdWZmaWNpZW50IGZ1bmRzOiBuZWVkIGEgbWluaW11bSBvZiAxNTAwMDAwIGxvdmVsYWNlIHBlciBvdXRwdXQgdG8gY29uc3RydWN0IHRva2VuIHRyYW5zYWN0aW9ucydcbiAgICAgICk7XG4gIH0pO1xuXG4gIGl0KGBzaG91bGQgZmFpbCB0byBidWlsZCBhIHRyYW5zYWN0aW9uIHdpdGggJHthc3NldE5hbWV9IGFuZCBpbnN1ZmZpY2llbnQgdG9rZW4gcXR5YCwgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IHF1YW50aXR5ID0gJzIwJztcbiAgICBjb25zdCB0b3RhbElucHV0ID0gMjAwMDAwMDA7XG4gICAgY29uc3QgdG90YWxBc3NldExpc3QgPSB7XG4gICAgICBbZmluZ2VycHJpbnRdOiB7XG4gICAgICAgIHF1YW50aXR5OiAnNScsXG4gICAgICAgIHBvbGljeV9pZDogcG9saWN5SWQsXG4gICAgICAgIGFzc2V0X25hbWU6IGFzY2lpRW5jb2RlZE5hbWUsXG4gICAgICB9LFxuICAgIH07XG5cbiAgICBjb25zdCB0eEJ1aWxkZXIgPSBmYWN0b3J5LmdldFRyYW5zZmVyQnVpbGRlcigpO1xuICAgIHR4QnVpbGRlci5pbnB1dCh7XG4gICAgICB0cmFuc2FjdGlvbl9pZDogJzM2NzdlNzVjN2JhNjk5YmZkYzZjZDU3ZDQyZjI0NmY4NmY2M2FlZmQ3NjAyNTAwNmFjNzgzMTNmYWQyYmJhMjEnLFxuICAgICAgdHJhbnNhY3Rpb25faW5kZXg6IDEsXG4gICAgfSk7XG5cbiAgICB0eEJ1aWxkZXIub3V0cHV0KHtcbiAgICAgIGFkZHJlc3M6IHJlY2VpdmVyQWRkcmVzcyxcbiAgICAgIGFtb3VudDogJzAnLCAvLyBTZXQgQURBIGFtb3VudCB0byAwIGZvciB0b2tlbiB0cmFuc2ZlciAobWluIEFEQSBpcyBoYW5kbGVkIGluIHNkayBidWlsZClcbiAgICAgIG11bHRpQXNzZXRzOiB7XG4gICAgICAgIGFzc2V0X25hbWU6IGFzY2lpRW5jb2RlZE5hbWUsXG4gICAgICAgIHBvbGljeV9pZDogcG9saWN5SWQsXG4gICAgICAgIHF1YW50aXR5LFxuICAgICAgICBmaW5nZXJwcmludCxcbiAgICAgIH0sXG4gICAgfSk7XG5cbiAgICB0eEJ1aWxkZXIuY2hhbmdlQWRkcmVzcyhzZW5kZXJBZGRyZXNzLCB0b3RhbElucHV0LnRvU3RyaW5nKCksIHRvdGFsQXNzZXRMaXN0KTtcbiAgICB0eEJ1aWxkZXIudHRsKDgwMDAwMDAwMCk7XG4gICAgdHhCdWlsZGVyLmlzVG9rZW5UcmFuc2FjdGlvbigpO1xuXG4gICAgYXdhaXQgdHhCdWlsZGVyLmJ1aWxkKCkuc2hvdWxkLnJlamVjdGVkV2l0aCgnSW5zdWZmaWNpZW50IHF0eTogbm90IGVub3VnaCB0b2tlbiBxdHkgdG8gY292ZXIgcmVjZWl2ZXIgb3V0cHV0Jyk7XG4gIH0pO1xuXG4gIGl0KGBzaG91bGQgYnVpbGQgYSB0cmFuc2FjdGlvbiB3aXRoICR7YXNzZXROYW1lfSB3aGVuIHRoZSB0b2tlbiBxdHkgaXMgZXhhY3RseSB0aGUgcXR5IGluIHdpdGhkcmF3YWxgLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgcXVhbnRpdHkgPSAnMSc7XG4gICAgY29uc3QgdG90YWxJbnB1dCA9IDIwMDAwMDAwO1xuICAgIGNvbnN0IHRvdGFsQXNzZXRMaXN0ID0ge1xuICAgICAgW2ZpbmdlcnByaW50XToge1xuICAgICAgICBxdWFudGl0eTogJzEnLFxuICAgICAgICBwb2xpY3lfaWQ6IHBvbGljeUlkLFxuICAgICAgICBhc3NldF9uYW1lOiBhc2NpaUVuY29kZWROYW1lLFxuICAgICAgfSxcbiAgICB9O1xuXG4gICAgY29uc3QgdHhCdWlsZGVyID0gZmFjdG9yeS5nZXRUcmFuc2ZlckJ1aWxkZXIoKTtcbiAgICB0eEJ1aWxkZXIuaW5wdXQoe1xuICAgICAgdHJhbnNhY3Rpb25faWQ6ICczNjc3ZTc1YzdiYTY5OWJmZGM2Y2Q1N2Q0MmYyNDZmODZmNjNhZWZkNzYwMjUwMDZhYzc4MzEzZmFkMmJiYTIxJyxcbiAgICAgIHRyYW5zYWN0aW9uX2luZGV4OiAxLFxuICAgIH0pO1xuXG4gICAgdHhCdWlsZGVyLm91dHB1dCh7XG4gICAgICBhZGRyZXNzOiByZWNlaXZlckFkZHJlc3MsXG4gICAgICBhbW91bnQ6ICcwJywgLy8gU2V0IEFEQSBhbW91bnQgdG8gMCBmb3IgdG9rZW4gdHJhbnNmZXIgKG1pbiBBREEgaXMgaGFuZGxlZCBpbiBzZGsgYnVpbGQpXG4gICAgICBtdWx0aUFzc2V0czoge1xuICAgICAgICBhc3NldF9uYW1lOiBhc2NpaUVuY29kZWROYW1lLFxuICAgICAgICBwb2xpY3lfaWQ6IHBvbGljeUlkLFxuICAgICAgICBxdWFudGl0eSxcbiAgICAgICAgZmluZ2VycHJpbnQsXG4gICAgICB9LFxuICAgIH0pO1xuXG4gICAgdHhCdWlsZGVyLmNoYW5nZUFkZHJlc3Moc2VuZGVyQWRkcmVzcywgdG90YWxJbnB1dC50b1N0cmluZygpLCB0b3RhbEFzc2V0TGlzdCk7XG4gICAgdHhCdWlsZGVyLnR0bCg4MDAwMDAwMDApO1xuICAgIHR4QnVpbGRlci5pc1Rva2VuVHJhbnNhY3Rpb24oKTtcblxuICAgIGF3YWl0IHR4QnVpbGRlci5idWlsZCgpLnNob3VsZC5ub3QuYmUucmVqZWN0ZWQoKTtcbiAgfSk7XG5cbiAgaXQoYHNob3VsZCBidWlsZCBhIHNwb25zb3JlZCB0b2tlbiB0cmFuc2FjdGlvbiB3aGVyZSBmZWUgYWRkcmVzcyBzcG9uc29ycyBtaW4gQURBIGZvciByZWNlaXZlcmAsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBmZWVBZGRyZXNzID1cbiAgICAgICdhZGRyX3Rlc3QxcXoyZnh2MnVteWh0dGt4eXhwOHgwZGxwZHQzazZjd25nNXB4ajNqaHN5ZHplcjNqY3U1ZDhwczd6ZXgyazJ4dDN1cXhnanFubmo4M3dzOGxocm42NDhqanh0d3EyeXRqcXAnO1xuICAgIGNvbnN0IHF1YW50aXR5ID0gJzIwJztcbiAgICBjb25zdCBzZW5kZXJJbnB1dEJhbGFuY2UgPSA1MDAwMDAwO1xuICAgIGNvbnN0IGZlZUFkZHJlc3NJbnB1dEJhbGFuY2UgPSAyMDAwMDAwMDsgLy8gRmVlIGFkZHJlc3MgaGFzIGVub3VnaCBBREEgdG8gc3BvbnNvclxuICAgIGNvbnN0IHRvdGFsQXNzZXRMaXN0ID0ge1xuICAgICAgW2ZpbmdlcnByaW50XToge1xuICAgICAgICBxdWFudGl0eTogJzEwMCcsXG4gICAgICAgIHBvbGljeV9pZDogcG9saWN5SWQsXG4gICAgICAgIGFzc2V0X25hbWU6IGFzY2lpRW5jb2RlZE5hbWUsXG4gICAgICB9LFxuICAgIH07XG5cbiAgICBjb25zdCB0eEJ1aWxkZXIgPSBmYWN0b3J5LmdldFRyYW5zZmVyQnVpbGRlcigpO1xuICAgIC8vIFNlbmRlciBpbnB1dCAoaGFzIHRva2VucylcbiAgICB0eEJ1aWxkZXIuaW5wdXQoe1xuICAgICAgdHJhbnNhY3Rpb25faWQ6ICczNjc3ZTc1YzdiYTY5OWJmZGM2Y2Q1N2Q0MmYyNDZmODZmNjNhZWZkNzYwMjUwMDZhYzc4MzEzZmFkMmJiYTIxJyxcbiAgICAgIHRyYW5zYWN0aW9uX2luZGV4OiAxLFxuICAgIH0pO1xuICAgIC8vIEZlZSBhZGRyZXNzIGlucHV0IChzcG9uc29ycyBmZWVzIGFuZCBtaW4gQURBKVxuICAgIHR4QnVpbGRlci5pbnB1dCh7XG4gICAgICB0cmFuc2FjdGlvbl9pZDogJzM2NzdlNzVjN2JhNjk5YmZkYzZjZDU3ZDQyZjI0NmY4NmY2M2FlZmQ3NjAyNTAwNmFjNzgzMTNmYWQyYmJhMjInLFxuICAgICAgdHJhbnNhY3Rpb25faW5kZXg6IDAsXG4gICAgfSk7XG5cbiAgICB0eEJ1aWxkZXIub3V0cHV0KHtcbiAgICAgIGFkZHJlc3M6IHJlY2VpdmVyQWRkcmVzcyxcbiAgICAgIGFtb3VudDogJzAnLCAvLyBTZXQgQURBIGFtb3VudCB0byAwIGZvciB0b2tlbiB0cmFuc2ZlciAobWluIEFEQSBpcyBoYW5kbGVkIGJ5IGZlZSBhZGRyZXNzKVxuICAgICAgbXVsdGlBc3NldHM6IHtcbiAgICAgICAgYXNzZXRfbmFtZTogYXNjaWlFbmNvZGVkTmFtZSxcbiAgICAgICAgcG9saWN5X2lkOiBwb2xpY3lJZCxcbiAgICAgICAgcXVhbnRpdHksXG4gICAgICAgIGZpbmdlcnByaW50LFxuICAgICAgfSxcbiAgICB9KTtcblxuICAgIHR4QnVpbGRlci5jaGFuZ2VBZGRyZXNzKHNlbmRlckFkZHJlc3MsIHNlbmRlcklucHV0QmFsYW5jZS50b1N0cmluZygpLCB0b3RhbEFzc2V0TGlzdCk7XG4gICAgdHhCdWlsZGVyLnNwb25zb3JzaGlwSW5mbyh7XG4gICAgICBmZWVBZGRyZXNzOiBmZWVBZGRyZXNzLFxuICAgICAgZmVlQWRkcmVzc0lucHV0QmFsYW5jZTogZmVlQWRkcmVzc0lucHV0QmFsYW5jZS50b1N0cmluZygpLFxuICAgIH0pO1xuICAgIHR4QnVpbGRlci50dGwoODAwMDAwMDAwKTtcbiAgICB0eEJ1aWxkZXIuaXNUb2tlblRyYW5zYWN0aW9uKCk7XG4gICAgY29uc3QgdHggPSAoYXdhaXQgdHhCdWlsZGVyLmJ1aWxkKCkpIGFzIFRyYW5zYWN0aW9uO1xuXG4gICAgc2hvdWxkLmVxdWFsKHR4LnR5cGUsIFRyYW5zYWN0aW9uVHlwZS5TZW5kKTtcbiAgICBjb25zdCB0eERhdGEgPSB0eC50b0pzb24oKTtcblxuICAgIHR4RGF0YS5pbnB1dHMubGVuZ3RoLnNob3VsZC5lcXVhbCgyKTtcbiAgICB0eERhdGEub3V0cHV0cy5sZW5ndGguc2hvdWxkLmVxdWFsKDQpO1xuXG4gICAgLy8gVmFsaWRhdGUgcmVjZWl2ZXIgb3V0cHV0IC0gbWluIEFEQSBzaG91bGQgYmUgc3BvbnNvcmVkIGJ5IGZlZSBhZGRyZXNzXG4gICAgY29uc3QgcmVjZWl2ZXJPdXRwdXQgPSB0eERhdGEub3V0cHV0cy5maWx0ZXIoKG91dHB1dCkgPT4gb3V0cHV0LmFkZHJlc3MgPT09IHJlY2VpdmVyQWRkcmVzcyk7XG4gICAgcmVjZWl2ZXJPdXRwdXQubGVuZ3RoLnNob3VsZC5lcXVhbCgxKTtcbiAgICByZWNlaXZlck91dHB1dFswXS5hbW91bnQuc2hvdWxkLmVxdWFsKCcxNTAwMDAwJyk7IC8vIE1pbmltdW0gQURBIGZvciBhc3NldCBvdXRwdXQgKHNwb25zb3JlZCBieSBmZWUgYWRkcmVzcylcbiAgICAocmVjZWl2ZXJPdXRwdXRbMF0ubXVsdGlBc3NldHMhIGFzIENhcmRhbm9XYXNtLk11bHRpQXNzZXQpXG4gICAgICAuZ2V0X2Fzc2V0KHBvbGljeVNjcmlwdEhhc2gsIENhcmRhbm9XYXNtLkFzc2V0TmFtZS5uZXcoQnVmZmVyLmZyb20oYXNjaWlFbmNvZGVkTmFtZSwgJ2hleCcpKSlcbiAgICAgIC50b19zdHIoKVxuICAgICAgLnNob3VsZC5lcXVhbChxdWFudGl0eSk7XG5cbiAgICAvLyBWYWxpZGF0ZSBzZW5kZXIgY2hhbmdlIG91dHB1dCAtIHNob3VsZCBoYXZlIGZ1bGwgc2VuZGVyIGJhbGFuY2UgKHRva2VucyBvbmx5LCBubyBBREEgZGVkdWN0aW9uIGZvciByZWNlaXZlcilcbiAgICBjb25zdCBzZW5kZXJDaGFuZ2VPdXRwdXQgPSB0eERhdGEub3V0cHV0cy5maWx0ZXIoKG91dHB1dCkgPT4gb3V0cHV0LmFkZHJlc3MgPT09IHNlbmRlckFkZHJlc3MpO1xuICAgIHNlbmRlckNoYW5nZU91dHB1dC5sZW5ndGguc2hvdWxkLmJlLmVxdWFsKDIpO1xuXG4gICAgLy8gVmFsaWRhdGUgZmVlIGFkZHJlc3MgY2hhbmdlIG91dHB1dCAtIHNob3VsZCBoYXZlIHJlbWFpbmluZyBBREEgYWZ0ZXIgZmVlcyBhbmQgbWluIEFEQSBmb3IgcmVjZWl2ZXJcbiAgICBjb25zdCBmZWVBZGRyZXNzQ2hhbmdlT3V0cHV0ID0gdHhEYXRhLm91dHB1dHMuZmlsdGVyKChvdXRwdXQpID0+IG91dHB1dC5hZGRyZXNzID09PSBmZWVBZGRyZXNzKTtcbiAgICBmZWVBZGRyZXNzQ2hhbmdlT3V0cHV0Lmxlbmd0aC5zaG91bGQuZXF1YWwoMSk7XG4gICAgLy8gRmVlIGFkZHJlc3MgY2hhbmdlIHNob3VsZCBub3QgaGF2ZSBhbnkgdG9rZW5zXG4gICAgc2hvdWxkLm5vdC5leGlzdChmZWVBZGRyZXNzQ2hhbmdlT3V0cHV0WzBdLm11bHRpQXNzZXRzKTtcblxuICAgIHR4LmdldEZlZS5zaG91bGQuZXF1YWwoJzE4MjQ4NScpOyAvLyBGZWUgd2l0aCB0d28gd2l0bmVzc2VzXG4gIH0pO1xuXG4gIGl0KGBzaG91bGQgcmVidWlsZCBhIHNwb25zb3JlZCB0cmFuc2FjdGlvbiBmcm9tIGhleCB3aXRoIGlzUmVidWlsZCBmbGFnYCwgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IGZlZUFkZHJlc3MgPVxuICAgICAgJ2FkZHJfdGVzdDFxejJmeHYydW15aHR0a3h5eHA4eDBkbHBkdDNrNmN3bmc1cHhqM2poc3lkemVyM2pjdTVkOHBzN3pleDJrMnh0M3VxeGdqcW5uajgzd3M4bGhybjY0OGpqeHR3cTJ5dGpxcCc7XG4gICAgY29uc3QgcXVhbnRpdHkgPSAnMjAnO1xuICAgIGNvbnN0IHNlbmRlcklucHV0QmFsYW5jZSA9IDUwMDAwMDA7XG4gICAgY29uc3QgZmVlQWRkcmVzc0lucHV0QmFsYW5jZSA9IDIwMDAwMDAwO1xuICAgIGNvbnN0IHRvdGFsQXNzZXRMaXN0ID0ge1xuICAgICAgW2ZpbmdlcnByaW50XToge1xuICAgICAgICBxdWFudGl0eTogJzEwMCcsXG4gICAgICAgIHBvbGljeV9pZDogcG9saWN5SWQsXG4gICAgICAgIGFzc2V0X25hbWU6IGFzY2lpRW5jb2RlZE5hbWUsXG4gICAgICB9LFxuICAgIH07XG5cbiAgICAvLyBTdGVwIDE6IEJ1aWxkIHRoZSBpbml0aWFsIHNwb25zb3JlZCB0cmFuc2FjdGlvblxuICAgIGNvbnN0IHR4QnVpbGRlciA9IGZhY3RvcnkuZ2V0VHJhbnNmZXJCdWlsZGVyKCk7XG4gICAgdHhCdWlsZGVyLmlucHV0KHtcbiAgICAgIHRyYW5zYWN0aW9uX2lkOiAnMzY3N2U3NWM3YmE2OTliZmRjNmNkNTdkNDJmMjQ2Zjg2ZjYzYWVmZDc2MDI1MDA2YWM3ODMxM2ZhZDJiYmEyMScsXG4gICAgICB0cmFuc2FjdGlvbl9pbmRleDogMSxcbiAgICB9KTtcbiAgICB0eEJ1aWxkZXIuaW5wdXQoe1xuICAgICAgdHJhbnNhY3Rpb25faWQ6ICczNjc3ZTc1YzdiYTY5OWJmZGM2Y2Q1N2Q0MmYyNDZmODZmNjNhZWZkNzYwMjUwMDZhYzc4MzEzZmFkMmJiYTIyJyxcbiAgICAgIHRyYW5zYWN0aW9uX2luZGV4OiAwLFxuICAgIH0pO1xuXG4gICAgdHhCdWlsZGVyLm91dHB1dCh7XG4gICAgICBhZGRyZXNzOiByZWNlaXZlckFkZHJlc3MsXG4gICAgICBhbW91bnQ6ICcwJyxcbiAgICAgIG11bHRpQXNzZXRzOiB7XG4gICAgICAgIGFzc2V0X25hbWU6IGFzY2lpRW5jb2RlZE5hbWUsXG4gICAgICAgIHBvbGljeV9pZDogcG9saWN5SWQsXG4gICAgICAgIHF1YW50aXR5LFxuICAgICAgICBmaW5nZXJwcmludCxcbiAgICAgIH0sXG4gICAgfSk7XG5cbiAgICB0eEJ1aWxkZXIuY2hhbmdlQWRkcmVzcyhzZW5kZXJBZGRyZXNzLCBzZW5kZXJJbnB1dEJhbGFuY2UudG9TdHJpbmcoKSwgdG90YWxBc3NldExpc3QpO1xuICAgIHR4QnVpbGRlci5zcG9uc29yc2hpcEluZm8oe1xuICAgICAgZmVlQWRkcmVzczogZmVlQWRkcmVzcyxcbiAgICAgIGZlZUFkZHJlc3NJbnB1dEJhbGFuY2U6IGZlZUFkZHJlc3NJbnB1dEJhbGFuY2UudG9TdHJpbmcoKSxcbiAgICB9KTtcbiAgICB0eEJ1aWxkZXIudHRsKDgwMDAwMDAwMCk7XG4gICAgdHhCdWlsZGVyLmlzVG9rZW5UcmFuc2FjdGlvbigpO1xuICAgIGNvbnN0IGluaXRpYWxUeCA9IChhd2FpdCB0eEJ1aWxkZXIuYnVpbGQoKSkgYXMgVHJhbnNhY3Rpb247XG4gICAgY29uc3QgaW5pdGlhbEZlZSA9IGluaXRpYWxUeC5nZXRGZWU7XG4gICAgY29uc3QgaW5pdGlhbFR4RGF0YSA9IGluaXRpYWxUeC50b0pzb24oKTtcblxuICAgIC8vIFN0ZXAgMjogUmVidWlsZCB3aXRoIGlzUmVidWlsZCA9IHRydWVcbiAgICAvLyBUaGlzIHNpbXVsYXRlcyByZWJ1aWxkaW5nIGZyb20gc2NyYXRjaCBidXQgd2l0aCBpc1JlYnVpbGQgZmxhZyB0byBhZGQgc3BvbnNvciB3aXRuZXNzXG4gICAgY29uc3QgcmVidWlsZFR4QnVpbGRlciA9IGZhY3RvcnkuZ2V0VHJhbnNmZXJCdWlsZGVyKCk7XG4gICAgcmVidWlsZFR4QnVpbGRlci5pbnB1dCh7XG4gICAgICB0cmFuc2FjdGlvbl9pZDogJzM2NzdlNzVjN2JhNjk5YmZkYzZjZDU3ZDQyZjI0NmY4NmY2M2FlZmQ3NjAyNTAwNmFjNzgzMTNmYWQyYmJhMjEnLFxuICAgICAgdHJhbnNhY3Rpb25faW5kZXg6IDEsXG4gICAgfSk7XG4gICAgcmVidWlsZFR4QnVpbGRlci5pbnB1dCh7XG4gICAgICB0cmFuc2FjdGlvbl9pZDogJzM2NzdlNzVjN2JhNjk5YmZkYzZjZDU3ZDQyZjI0NmY4NmY2M2FlZmQ3NjAyNTAwNmFjNzgzMTNmYWQyYmJhMjInLFxuICAgICAgdHJhbnNhY3Rpb25faW5kZXg6IDAsXG4gICAgfSk7XG5cbiAgICByZWJ1aWxkVHhCdWlsZGVyLm91dHB1dCh7XG4gICAgICBhZGRyZXNzOiByZWNlaXZlckFkZHJlc3MsXG4gICAgICBhbW91bnQ6ICcwJyxcbiAgICAgIG11bHRpQXNzZXRzOiB7XG4gICAgICAgIGFzc2V0X25hbWU6IGFzY2lpRW5jb2RlZE5hbWUsXG4gICAgICAgIHBvbGljeV9pZDogcG9saWN5SWQsXG4gICAgICAgIHF1YW50aXR5LFxuICAgICAgICBmaW5nZXJwcmludCxcbiAgICAgIH0sXG4gICAgfSk7XG5cbiAgICByZWJ1aWxkVHhCdWlsZGVyLmNoYW5nZUFkZHJlc3Moc2VuZGVyQWRkcmVzcywgc2VuZGVySW5wdXRCYWxhbmNlLnRvU3RyaW5nKCksIHRvdGFsQXNzZXRMaXN0KTtcbiAgICByZWJ1aWxkVHhCdWlsZGVyLnNwb25zb3JzaGlwSW5mbyh7XG4gICAgICBmZWVBZGRyZXNzOiBmZWVBZGRyZXNzLFxuICAgICAgZmVlQWRkcmVzc0lucHV0QmFsYW5jZTogZmVlQWRkcmVzc0lucHV0QmFsYW5jZS50b1N0cmluZygpLFxuICAgICAgaXNSZWJ1aWxkOiB0cnVlLFxuICAgIH0pO1xuICAgIHJlYnVpbGRUeEJ1aWxkZXIudHRsKDgwMDAwMDAwMCk7XG4gICAgcmVidWlsZFR4QnVpbGRlci5pc1Rva2VuVHJhbnNhY3Rpb24oKTtcblxuICAgIGNvbnN0IHJlYnVpbHRUeCA9IChhd2FpdCByZWJ1aWxkVHhCdWlsZGVyLmJ1aWxkKCkpIGFzIFRyYW5zYWN0aW9uO1xuICAgIGNvbnN0IHJlYnVpbHRUeERhdGEgPSByZWJ1aWx0VHgudG9Kc29uKCk7XG5cbiAgICAvLyBWZXJpZnkgdGhlIHJlYnVpbHQgdHJhbnNhY3Rpb24gcHJlc2VydmVzIHRoZSBzYW1lIHN0cnVjdHVyZVxuICAgIHJlYnVpbHRUeERhdGEuaW5wdXRzLmxlbmd0aC5zaG91bGQuZXF1YWwoaW5pdGlhbFR4RGF0YS5pbnB1dHMubGVuZ3RoKTtcbiAgICByZWJ1aWx0VHhEYXRhLm91dHB1dHMubGVuZ3RoLnNob3VsZC5lcXVhbChpbml0aWFsVHhEYXRhLm91dHB1dHMubGVuZ3RoKTtcblxuICAgIC8vIEZlZSBzaG91bGQgYmUgcHJlc2VydmVkIGZyb20gdGhlIG9yaWdpbmFsIHRyYW5zYWN0aW9uXG4gICAgcmVidWlsdFR4LmdldEZlZS5zaG91bGQuZXF1YWwoaW5pdGlhbEZlZSk7XG5cbiAgICAvLyBWZXJpZnkgcmVjZWl2ZXIgb3V0cHV0IGlzIHByZXNlcnZlZFxuICAgIGNvbnN0IHJlY2VpdmVyT3V0cHV0ID0gcmVidWlsdFR4RGF0YS5vdXRwdXRzLmZpbHRlcigob3V0cHV0KSA9PiBvdXRwdXQuYWRkcmVzcyA9PT0gcmVjZWl2ZXJBZGRyZXNzKTtcbiAgICByZWNlaXZlck91dHB1dC5sZW5ndGguc2hvdWxkLmVxdWFsKDEpO1xuICAgIHJlY2VpdmVyT3V0cHV0WzBdLmFtb3VudC5zaG91bGQuZXF1YWwoJzE1MDAwMDAnKTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ0FkYVRva2VuIHZlcmlmeVRyYW5zYWN0aW9uJywgKCkgPT4ge1xuICAgIGxldCBiaXRnbzogVGVzdEJpdEdvQVBJO1xuICAgIGxldCBhZGFUb2tlbjtcblxuICAgIGJlZm9yZShmdW5jdGlvbiAoKSB7XG4gICAgICBiaXRnbyA9IFRlc3RCaXRHby5kZWNvcmF0ZShCaXRHb0FQSSwgeyBlbnY6ICdtb2NrJyB9KTtcbiAgICAgIGJpdGdvLmluaXRpYWxpemVUZXN0VmFycygpO1xuICAgICAgY29uc3QgdG9rZW5Db25maWcgPSB7XG4gICAgICAgIHR5cGU6ICd0YWRhOndhdGVyJyxcbiAgICAgICAgY29pbjogJ3RhZGEnLFxuICAgICAgICBuZXR3b3JrOiAnVGVzdG5ldCcgYXMgY29uc3QsXG4gICAgICAgIG5hbWU6ICdXQVRFUicsXG4gICAgICAgIGRlY2ltYWxQbGFjZXM6IDAsXG4gICAgICAgIHBvbGljeUlkOiBwb2xpY3lJZCxcbiAgICAgICAgYXNzZXROYW1lOiBuYW1lLCAvLyBBU0NJSSAnV0FURVInLCBub3QgaGV4LWVuY29kZWRcbiAgICAgICAgY29udHJhY3RBZGRyZXNzOiBgJHtwb2xpY3lJZH06JHthc2NpaUVuY29kZWROYW1lfWAsXG4gICAgICB9O1xuICAgICAgYWRhVG9rZW4gPSBuZXcgQWRhVG9rZW4oYml0Z28sIHRva2VuQ29uZmlnKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgdmVyaWZ5IGEgdG9rZW4gdHJhbnNhY3Rpb24gd2l0aCBjb3JyZWN0IHRva2VuIGFtb3VudCcsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IHF1YW50aXR5ID0gJzIwJztcbiAgICAgIGNvbnN0IHRvdGFsSW5wdXQgPSAyMDAwMDAwMDtcbiAgICAgIGNvbnN0IHRvdGFsQXNzZXRMaXN0ID0ge1xuICAgICAgICBbZmluZ2VycHJpbnRdOiB7XG4gICAgICAgICAgcXVhbnRpdHk6ICcxMDAnLFxuICAgICAgICAgIHBvbGljeV9pZDogcG9saWN5SWQsXG4gICAgICAgICAgYXNzZXRfbmFtZTogYXNjaWlFbmNvZGVkTmFtZSxcbiAgICAgICAgfSxcbiAgICAgIH07XG5cbiAgICAgIGNvbnN0IHR4QnVpbGRlciA9IGZhY3RvcnkuZ2V0VHJhbnNmZXJCdWlsZGVyKCk7XG4gICAgICB0eEJ1aWxkZXIuaW5wdXQoe1xuICAgICAgICB0cmFuc2FjdGlvbl9pZDogJzM2NzdlNzVjN2JhNjk5YmZkYzZjZDU3ZDQyZjI0NmY4NmY2M2FlZmQ3NjAyNTAwNmFjNzgzMTNmYWQyYmJhMjEnLFxuICAgICAgICB0cmFuc2FjdGlvbl9pbmRleDogMSxcbiAgICAgIH0pO1xuXG4gICAgICB0eEJ1aWxkZXIub3V0cHV0KHtcbiAgICAgICAgYWRkcmVzczogcmVjZWl2ZXJBZGRyZXNzLFxuICAgICAgICBhbW91bnQ6ICcwJyxcbiAgICAgICAgbXVsdGlBc3NldHM6IHtcbiAgICAgICAgICBhc3NldF9uYW1lOiBhc2NpaUVuY29kZWROYW1lLFxuICAgICAgICAgIHBvbGljeV9pZDogcG9saWN5SWQsXG4gICAgICAgICAgcXVhbnRpdHksXG4gICAgICAgICAgZmluZ2VycHJpbnQsXG4gICAgICAgIH0sXG4gICAgICB9KTtcblxuICAgICAgdHhCdWlsZGVyLmNoYW5nZUFkZHJlc3Moc2VuZGVyQWRkcmVzcywgdG90YWxJbnB1dC50b1N0cmluZygpLCB0b3RhbEFzc2V0TGlzdCk7XG4gICAgICB0eEJ1aWxkZXIudHRsKDgwMDAwMDAwMCk7XG4gICAgICB0eEJ1aWxkZXIuaXNUb2tlblRyYW5zYWN0aW9uKCk7XG4gICAgICBjb25zdCB0eCA9IChhd2FpdCB0eEJ1aWxkZXIuYnVpbGQoKSkgYXMgVHJhbnNhY3Rpb247XG4gICAgICBjb25zdCB0eEhleCA9IHR4LnRvQnJvYWRjYXN0Rm9ybWF0KCk7XG5cbiAgICAgIC8vIFZlcmlmeSB0cmFuc2FjdGlvbiB3aXRoIGNvcnJlY3QgdG9rZW4gYW1vdW50XG4gICAgICBjb25zdCB0eFBhcmFtcyA9IHtcbiAgICAgICAgcmVjaXBpZW50czogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGFkZHJlc3M6IHJlY2VpdmVyQWRkcmVzcyxcbiAgICAgICAgICAgIGFtb3VudDogcXVhbnRpdHksIC8vIFRva2VuIGFtb3VudCwgbm90IEFEQSBhbW91bnRcbiAgICAgICAgICB9LFxuICAgICAgICBdLFxuICAgICAgfTtcblxuICAgICAgY29uc3QgdHhQcmVidWlsZCA9IHsgdHhIZXggfTtcbiAgICAgIGNvbnN0IG1vY2tXYWxsZXQgPSB7IGNvaW5TcGVjaWZpYzogKCkgPT4gKHsgYmFzZUFkZHJlc3M6IHNlbmRlckFkZHJlc3MgfSkgfTtcbiAgICAgIGNvbnN0IGlzVmVyaWZpZWQgPSBhd2FpdCBhZGFUb2tlbi52ZXJpZnlUcmFuc2FjdGlvbih7IHR4UGFyYW1zLCB0eFByZWJ1aWxkLCB3YWxsZXQ6IG1vY2tXYWxsZXQgYXMgYW55IH0pO1xuICAgICAgaXNWZXJpZmllZC5zaG91bGQuZXF1YWwodHJ1ZSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGZhaWwgdG8gdmVyaWZ5IGEgdG9rZW4gdHJhbnNhY3Rpb24gd2l0aCBpbmNvcnJlY3QgdG9rZW4gYW1vdW50JywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgcXVhbnRpdHkgPSAnMjAnO1xuICAgICAgY29uc3QgdG90YWxJbnB1dCA9IDIwMDAwMDAwO1xuICAgICAgY29uc3QgdG90YWxBc3NldExpc3QgPSB7XG4gICAgICAgIFtmaW5nZXJwcmludF06IHtcbiAgICAgICAgICBxdWFudGl0eTogJzEwMCcsXG4gICAgICAgICAgcG9saWN5X2lkOiBwb2xpY3lJZCxcbiAgICAgICAgICBhc3NldF9uYW1lOiBhc2NpaUVuY29kZWROYW1lLFxuICAgICAgICB9LFxuICAgICAgfTtcblxuICAgICAgY29uc3QgdHhCdWlsZGVyID0gZmFjdG9yeS5nZXRUcmFuc2ZlckJ1aWxkZXIoKTtcbiAgICAgIHR4QnVpbGRlci5pbnB1dCh7XG4gICAgICAgIHRyYW5zYWN0aW9uX2lkOiAnMzY3N2U3NWM3YmE2OTliZmRjNmNkNTdkNDJmMjQ2Zjg2ZjYzYWVmZDc2MDI1MDA2YWM3ODMxM2ZhZDJiYmEyMScsXG4gICAgICAgIHRyYW5zYWN0aW9uX2luZGV4OiAxLFxuICAgICAgfSk7XG5cbiAgICAgIHR4QnVpbGRlci5vdXRwdXQoe1xuICAgICAgICBhZGRyZXNzOiByZWNlaXZlckFkZHJlc3MsXG4gICAgICAgIGFtb3VudDogJzAnLFxuICAgICAgICBtdWx0aUFzc2V0czoge1xuICAgICAgICAgIGFzc2V0X25hbWU6IGFzY2lpRW5jb2RlZE5hbWUsXG4gICAgICAgICAgcG9saWN5X2lkOiBwb2xpY3lJZCxcbiAgICAgICAgICBxdWFudGl0eSxcbiAgICAgICAgICBmaW5nZXJwcmludCxcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuXG4gICAgICB0eEJ1aWxkZXIuY2hhbmdlQWRkcmVzcyhzZW5kZXJBZGRyZXNzLCB0b3RhbElucHV0LnRvU3RyaW5nKCksIHRvdGFsQXNzZXRMaXN0KTtcbiAgICAgIHR4QnVpbGRlci50dGwoODAwMDAwMDAwKTtcbiAgICAgIHR4QnVpbGRlci5pc1Rva2VuVHJhbnNhY3Rpb24oKTtcbiAgICAgIGNvbnN0IHR4ID0gKGF3YWl0IHR4QnVpbGRlci5idWlsZCgpKSBhcyBUcmFuc2FjdGlvbjtcbiAgICAgIGNvbnN0IHR4SGV4ID0gdHgudG9Ccm9hZGNhc3RGb3JtYXQoKTtcblxuICAgICAgLy8gVmVyaWZ5IHRyYW5zYWN0aW9uIHdpdGggV1JPTkcgdG9rZW4gYW1vdW50IChzaG91bGQgZmFpbClcbiAgICAgIGNvbnN0IHR4UGFyYW1zID0ge1xuICAgICAgICByZWNpcGllbnRzOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgYWRkcmVzczogcmVjZWl2ZXJBZGRyZXNzLFxuICAgICAgICAgICAgYW1vdW50OiAnOTk5JywgLy8gV3JvbmcgYW1vdW50XG4gICAgICAgICAgfSxcbiAgICAgICAgXSxcbiAgICAgIH07XG5cbiAgICAgIGNvbnN0IHR4UHJlYnVpbGQgPSB7IHR4SGV4IH07XG4gICAgICBjb25zdCBtb2NrV2FsbGV0ID0geyBjb2luU3BlY2lmaWM6ICgpID0+ICh7IGJhc2VBZGRyZXNzOiBzZW5kZXJBZGRyZXNzIH0pIH07XG4gICAgICBhd2FpdCBhZGFUb2tlblxuICAgICAgICAudmVyaWZ5VHJhbnNhY3Rpb24oeyB0eFBhcmFtcywgdHhQcmVidWlsZCwgd2FsbGV0OiBtb2NrV2FsbGV0IGFzIGFueSB9KVxuICAgICAgICAuc2hvdWxkLmJlLnJlamVjdGVkV2l0aCgnY2Fubm90IGZpbmQgcmVjaXBpZW50IGluIGV4cGVjdGVkIG91dHB1dCcpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBmYWlsIHRvIHZlcmlmeSB3aGVuIGFkZHJlc3MgZG9lcyBub3QgbWF0Y2gnLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCBxdWFudGl0eSA9ICcyMCc7XG4gICAgICBjb25zdCB0b3RhbElucHV0ID0gMjAwMDAwMDA7XG4gICAgICBjb25zdCB0b3RhbEFzc2V0TGlzdCA9IHtcbiAgICAgICAgW2ZpbmdlcnByaW50XToge1xuICAgICAgICAgIHF1YW50aXR5OiAnMTAwJyxcbiAgICAgICAgICBwb2xpY3lfaWQ6IHBvbGljeUlkLFxuICAgICAgICAgIGFzc2V0X25hbWU6IGFzY2lpRW5jb2RlZE5hbWUsXG4gICAgICAgIH0sXG4gICAgICB9O1xuXG4gICAgICBjb25zdCB0eEJ1aWxkZXIgPSBmYWN0b3J5LmdldFRyYW5zZmVyQnVpbGRlcigpO1xuICAgICAgdHhCdWlsZGVyLmlucHV0KHtcbiAgICAgICAgdHJhbnNhY3Rpb25faWQ6ICczNjc3ZTc1YzdiYTY5OWJmZGM2Y2Q1N2Q0MmYyNDZmODZmNjNhZWZkNzYwMjUwMDZhYzc4MzEzZmFkMmJiYTIxJyxcbiAgICAgICAgdHJhbnNhY3Rpb25faW5kZXg6IDEsXG4gICAgICB9KTtcblxuICAgICAgdHhCdWlsZGVyLm91dHB1dCh7XG4gICAgICAgIGFkZHJlc3M6IHJlY2VpdmVyQWRkcmVzcyxcbiAgICAgICAgYW1vdW50OiAnMCcsXG4gICAgICAgIG11bHRpQXNzZXRzOiB7XG4gICAgICAgICAgYXNzZXRfbmFtZTogYXNjaWlFbmNvZGVkTmFtZSxcbiAgICAgICAgICBwb2xpY3lfaWQ6IHBvbGljeUlkLFxuICAgICAgICAgIHF1YW50aXR5LFxuICAgICAgICAgIGZpbmdlcnByaW50LFxuICAgICAgICB9LFxuICAgICAgfSk7XG5cbiAgICAgIHR4QnVpbGRlci5jaGFuZ2VBZGRyZXNzKHNlbmRlckFkZHJlc3MsIHRvdGFsSW5wdXQudG9TdHJpbmcoKSwgdG90YWxBc3NldExpc3QpO1xuICAgICAgdHhCdWlsZGVyLnR0bCg4MDAwMDAwMDApO1xuICAgICAgdHhCdWlsZGVyLmlzVG9rZW5UcmFuc2FjdGlvbigpO1xuICAgICAgY29uc3QgdHggPSAoYXdhaXQgdHhCdWlsZGVyLmJ1aWxkKCkpIGFzIFRyYW5zYWN0aW9uO1xuICAgICAgY29uc3QgdHhIZXggPSB0eC50b0Jyb2FkY2FzdEZvcm1hdCgpO1xuXG4gICAgICAvLyBWZXJpZnkgd2l0aCB3cm9uZyBhZGRyZXNzIChzaG91bGQgZmFpbClcbiAgICAgIGNvbnN0IHR4UGFyYW1zID0ge1xuICAgICAgICByZWNpcGllbnRzOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgYWRkcmVzczpcbiAgICAgICAgICAgICAgJ2FkZHJfdGVzdDFxcWE4NmUzZDdsZnB3dTBrMnJoano3NmVjbWZ4ZHI3NHM5a2Y5eWZjcDVoajV2bW5oNnhjY2pjY2xyazhqdGF3OWpnZXV5OTlwMm44c210ZHB5bG15NDVxampmc2ZtcDNnNicsXG4gICAgICAgICAgICBhbW91bnQ6IHF1YW50aXR5LFxuICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICB9O1xuXG4gICAgICBjb25zdCB0eFByZWJ1aWxkID0geyB0eEhleCB9O1xuICAgICAgY29uc3QgbW9ja1dhbGxldCA9IHsgY29pblNwZWNpZmljOiAoKSA9PiAoeyBiYXNlQWRkcmVzczogc2VuZGVyQWRkcmVzcyB9KSB9O1xuICAgICAgYXdhaXQgYWRhVG9rZW5cbiAgICAgICAgLnZlcmlmeVRyYW5zYWN0aW9uKHsgdHhQYXJhbXMsIHR4UHJlYnVpbGQsIHdhbGxldDogbW9ja1dhbGxldCBhcyBhbnkgfSlcbiAgICAgICAgLnNob3VsZC5iZS5yZWplY3RlZFdpdGgoJ2Nhbm5vdCBmaW5kIHJlY2lwaWVudCBpbiBleHBlY3RlZCBvdXRwdXQnKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgdmVyaWZ5IHRyYW5zYWN0aW9uIHdoZW4gcG9saWN5SWQgaGFzIGNvbmNhdGVuYXRlZCBhc3NldE5hbWUgKGNyeXB0byBjb21wYXJlIGZvcm1hdCknLCBhc3luYyAoKSA9PiB7XG4gICAgICAvLyBUaGlzIHRlc3RzIHRoZSBjYXNlIHdoZXJlIHBvbGljeUlkIGluIHRva2VuQ29uZmlnIGNvbnRhaW5zIHBvbGljeUlkICsgYXNjaWlFbmNvZGVkQXNzZXROYW1lXG4gICAgICAvLyB3aGljaCBpcyBjb25zaXN0ZW50IHdpdGggY3J5cHRvIGNvbXBhcmUgZm9ybWF0XG4gICAgICBjb25zdCBjb25jYXRlbmF0ZWRQb2xpY3lJZCA9IHBvbGljeUlkICsgYXNjaWlFbmNvZGVkTmFtZTsgLy8gZS5nLiwgJ2UxNmMyZGM4YWU5MzdlOGQzNzkwYzdmZDcxNjhkN2I5OTQ2MjFiYTE0Y2ExMTQxNWYzOWZlZDcyNTc0MTU0NDU1MidcblxuICAgICAgY29uc3QgdG9rZW5Db25maWdXaXRoQ29uY2F0ZW5hdGVkUG9saWN5SWQgPSB7XG4gICAgICAgIHR5cGU6ICd0YWRhOndhdGVyJyxcbiAgICAgICAgY29pbjogJ3RhZGEnLFxuICAgICAgICBuZXR3b3JrOiAnVGVzdG5ldCcgYXMgY29uc3QsXG4gICAgICAgIG5hbWU6ICdXQVRFUicsXG4gICAgICAgIGRlY2ltYWxQbGFjZXM6IDAsXG4gICAgICAgIHBvbGljeUlkOiBjb25jYXRlbmF0ZWRQb2xpY3lJZCwgLy8gcG9saWN5SWQgKyBhc3NldE5hbWUgaGV4XG4gICAgICAgIGFzc2V0TmFtZTogbmFtZSwgLy8gQVNDSUkgbmFtZSAnV0FURVInIChub3QgaGV4IGVuY29kZWQpXG4gICAgICAgIGNvbnRyYWN0QWRkcmVzczogYCR7cG9saWN5SWR9OiR7YXNjaWlFbmNvZGVkTmFtZX1gLFxuICAgICAgfTtcbiAgICAgIGNvbnN0IGFkYVRva2VuV2l0aENvbmNhdGVuYXRlZFBvbGljeUlkID0gbmV3IEFkYVRva2VuKGJpdGdvLCB0b2tlbkNvbmZpZ1dpdGhDb25jYXRlbmF0ZWRQb2xpY3lJZCk7XG5cbiAgICAgIGNvbnN0IHF1YW50aXR5ID0gJzIwJztcbiAgICAgIGNvbnN0IHRvdGFsSW5wdXQgPSAyMDAwMDAwMDtcbiAgICAgIGNvbnN0IHRvdGFsQXNzZXRMaXN0ID0ge1xuICAgICAgICBbZmluZ2VycHJpbnRdOiB7XG4gICAgICAgICAgcXVhbnRpdHk6ICcxMDAnLFxuICAgICAgICAgIHBvbGljeV9pZDogcG9saWN5SWQsXG4gICAgICAgICAgYXNzZXRfbmFtZTogYXNjaWlFbmNvZGVkTmFtZSxcbiAgICAgICAgfSxcbiAgICAgIH07XG5cbiAgICAgIGNvbnN0IHR4QnVpbGRlciA9IGZhY3RvcnkuZ2V0VHJhbnNmZXJCdWlsZGVyKCk7XG4gICAgICB0eEJ1aWxkZXIuaW5wdXQoe1xuICAgICAgICB0cmFuc2FjdGlvbl9pZDogJzM2NzdlNzVjN2JhNjk5YmZkYzZjZDU3ZDQyZjI0NmY4NmY2M2FlZmQ3NjAyNTAwNmFjNzgzMTNmYWQyYmJhMjEnLFxuICAgICAgICB0cmFuc2FjdGlvbl9pbmRleDogMSxcbiAgICAgIH0pO1xuXG4gICAgICB0eEJ1aWxkZXIub3V0cHV0KHtcbiAgICAgICAgYWRkcmVzczogcmVjZWl2ZXJBZGRyZXNzLFxuICAgICAgICBhbW91bnQ6ICcwJyxcbiAgICAgICAgbXVsdGlBc3NldHM6IHtcbiAgICAgICAgICBhc3NldF9uYW1lOiBhc2NpaUVuY29kZWROYW1lLFxuICAgICAgICAgIHBvbGljeV9pZDogcG9saWN5SWQsXG4gICAgICAgICAgcXVhbnRpdHksXG4gICAgICAgICAgZmluZ2VycHJpbnQsXG4gICAgICAgIH0sXG4gICAgICB9KTtcblxuICAgICAgdHhCdWlsZGVyLmNoYW5nZUFkZHJlc3Moc2VuZGVyQWRkcmVzcywgdG90YWxJbnB1dC50b1N0cmluZygpLCB0b3RhbEFzc2V0TGlzdCk7XG4gICAgICB0eEJ1aWxkZXIudHRsKDgwMDAwMDAwMCk7XG4gICAgICB0eEJ1aWxkZXIuaXNUb2tlblRyYW5zYWN0aW9uKCk7XG4gICAgICBjb25zdCB0eCA9IChhd2FpdCB0eEJ1aWxkZXIuYnVpbGQoKSkgYXMgVHJhbnNhY3Rpb247XG4gICAgICBjb25zdCB0eEhleCA9IHR4LnRvQnJvYWRjYXN0Rm9ybWF0KCk7XG5cbiAgICAgIC8vIFZlcmlmeSB0cmFuc2FjdGlvbiAtIHRoZSB2ZXJpZnlUcmFuc2FjdGlvbiBzaG91bGQgc3RyaXAgdGhlIGFzc2V0TmFtZSBmcm9tIHBvbGljeUlkXG4gICAgICBjb25zdCB0eFBhcmFtcyA9IHtcbiAgICAgICAgcmVjaXBpZW50czogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGFkZHJlc3M6IHJlY2VpdmVyQWRkcmVzcyxcbiAgICAgICAgICAgIGFtb3VudDogcXVhbnRpdHksXG4gICAgICAgICAgfSxcbiAgICAgICAgXSxcbiAgICAgIH07XG5cbiAgICAgIGNvbnN0IHR4UHJlYnVpbGQgPSB7IHR4SGV4IH07XG4gICAgICBjb25zdCBtb2NrV2FsbGV0ID0geyBjb2luU3BlY2lmaWM6ICgpID0+ICh7IGJhc2VBZGRyZXNzOiBzZW5kZXJBZGRyZXNzIH0pIH07XG4gICAgICBjb25zdCBpc1ZlcmlmaWVkID0gYXdhaXQgYWRhVG9rZW5XaXRoQ29uY2F0ZW5hdGVkUG9saWN5SWQudmVyaWZ5VHJhbnNhY3Rpb24oe1xuICAgICAgICB0eFBhcmFtcyxcbiAgICAgICAgdHhQcmVidWlsZCxcbiAgICAgICAgd2FsbGV0OiBtb2NrV2FsbGV0IGFzIGFueSxcbiAgICAgIH0pO1xuICAgICAgaXNWZXJpZmllZC5zaG91bGQuZXF1YWwodHJ1ZSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHZlcmlmeSB0cmFuc2FjdGlvbiB3aXRoIHBvbGljeUlkIHRoYXQgZG9lcyBub3QgaGF2ZSBjb25jYXRlbmF0ZWQgYXNzZXROYW1lJywgYXN5bmMgKCkgPT4ge1xuICAgICAgLy8gVGhpcyB0ZXN0cyB0aGUgY2FzZSB3aGVyZSBwb2xpY3lJZCBpcyBqdXN0IHRoZSAyOC1ieXRlIHBvbGljeSBJRCAobm8gYXNzZXROYW1lIGFwcGVuZGVkKVxuICAgICAgY29uc3QgdG9rZW5Db25maWdXaXRoUGxhaW5Qb2xpY3lJZCA9IHtcbiAgICAgICAgdHlwZTogJ3RhZGE6d2F0ZXInLFxuICAgICAgICBjb2luOiAndGFkYScsXG4gICAgICAgIG5ldHdvcms6ICdUZXN0bmV0JyBhcyBjb25zdCxcbiAgICAgICAgbmFtZTogJ1dBVEVSJyxcbiAgICAgICAgZGVjaW1hbFBsYWNlczogMCxcbiAgICAgICAgcG9saWN5SWQ6IHBvbGljeUlkLCAvLyBKdXN0IHRoZSBwb2xpY3kgSUQgd2l0aG91dCBhc3NldE5hbWVcbiAgICAgICAgYXNzZXROYW1lOiBuYW1lLCAvLyBBU0NJSSBuYW1lICdXQVRFUidcbiAgICAgICAgY29udHJhY3RBZGRyZXNzOiBgJHtwb2xpY3lJZH06JHthc2NpaUVuY29kZWROYW1lfWAsXG4gICAgICB9O1xuICAgICAgY29uc3QgYWRhVG9rZW5XaXRoUGxhaW5Qb2xpY3lJZCA9IG5ldyBBZGFUb2tlbihiaXRnbywgdG9rZW5Db25maWdXaXRoUGxhaW5Qb2xpY3lJZCk7XG5cbiAgICAgIGNvbnN0IHF1YW50aXR5ID0gJzIwJztcbiAgICAgIGNvbnN0IHRvdGFsSW5wdXQgPSAyMDAwMDAwMDtcbiAgICAgIGNvbnN0IHRvdGFsQXNzZXRMaXN0ID0ge1xuICAgICAgICBbZmluZ2VycHJpbnRdOiB7XG4gICAgICAgICAgcXVhbnRpdHk6ICcxMDAnLFxuICAgICAgICAgIHBvbGljeV9pZDogcG9saWN5SWQsXG4gICAgICAgICAgYXNzZXRfbmFtZTogYXNjaWlFbmNvZGVkTmFtZSxcbiAgICAgICAgfSxcbiAgICAgIH07XG5cbiAgICAgIGNvbnN0IHR4QnVpbGRlciA9IGZhY3RvcnkuZ2V0VHJhbnNmZXJCdWlsZGVyKCk7XG4gICAgICB0eEJ1aWxkZXIuaW5wdXQoe1xuICAgICAgICB0cmFuc2FjdGlvbl9pZDogJzM2NzdlNzVjN2JhNjk5YmZkYzZjZDU3ZDQyZjI0NmY4NmY2M2FlZmQ3NjAyNTAwNmFjNzgzMTNmYWQyYmJhMjEnLFxuICAgICAgICB0cmFuc2FjdGlvbl9pbmRleDogMSxcbiAgICAgIH0pO1xuXG4gICAgICB0eEJ1aWxkZXIub3V0cHV0KHtcbiAgICAgICAgYWRkcmVzczogcmVjZWl2ZXJBZGRyZXNzLFxuICAgICAgICBhbW91bnQ6ICcwJyxcbiAgICAgICAgbXVsdGlBc3NldHM6IHtcbiAgICAgICAgICBhc3NldF9uYW1lOiBhc2NpaUVuY29kZWROYW1lLFxuICAgICAgICAgIHBvbGljeV9pZDogcG9saWN5SWQsXG4gICAgICAgICAgcXVhbnRpdHksXG4gICAgICAgICAgZmluZ2VycHJpbnQsXG4gICAgICAgIH0sXG4gICAgICB9KTtcblxuICAgICAgdHhCdWlsZGVyLmNoYW5nZUFkZHJlc3Moc2VuZGVyQWRkcmVzcywgdG90YWxJbnB1dC50b1N0cmluZygpLCB0b3RhbEFzc2V0TGlzdCk7XG4gICAgICB0eEJ1aWxkZXIudHRsKDgwMDAwMDAwMCk7XG4gICAgICB0eEJ1aWxkZXIuaXNUb2tlblRyYW5zYWN0aW9uKCk7XG4gICAgICBjb25zdCB0eCA9IChhd2FpdCB0eEJ1aWxkZXIuYnVpbGQoKSkgYXMgVHJhbnNhY3Rpb247XG4gICAgICBjb25zdCB0eEhleCA9IHR4LnRvQnJvYWRjYXN0Rm9ybWF0KCk7XG5cbiAgICAgIC8vIFZlcmlmeSB0cmFuc2FjdGlvbiAtIHNob3VsZCB3b3JrIHdpdGggcGxhaW4gcG9saWN5SWQgYXMgd2VsbFxuICAgICAgY29uc3QgdHhQYXJhbXMgPSB7XG4gICAgICAgIHJlY2lwaWVudHM6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBhZGRyZXNzOiByZWNlaXZlckFkZHJlc3MsXG4gICAgICAgICAgICBhbW91bnQ6IHF1YW50aXR5LFxuICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICB9O1xuXG4gICAgICBjb25zdCB0eFByZWJ1aWxkID0geyB0eEhleCB9O1xuICAgICAgY29uc3QgbW9ja1dhbGxldCA9IHsgY29pblNwZWNpZmljOiAoKSA9PiAoeyBiYXNlQWRkcmVzczogc2VuZGVyQWRkcmVzcyB9KSB9O1xuICAgICAgY29uc3QgaXNWZXJpZmllZCA9IGF3YWl0IGFkYVRva2VuV2l0aFBsYWluUG9saWN5SWQudmVyaWZ5VHJhbnNhY3Rpb24oe1xuICAgICAgICB0eFBhcmFtcyxcbiAgICAgICAgdHhQcmVidWlsZCxcbiAgICAgICAgd2FsbGV0OiBtb2NrV2FsbGV0IGFzIGFueSxcbiAgICAgIH0pO1xuICAgICAgaXNWZXJpZmllZC5zaG91bGQuZXF1YWwodHJ1ZSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHZlcmlmeSB0b2tlbiBjb25zb2xpZGF0aW9uIHRyYW5zYWN0aW9uIHdoZW4gYWxsIG91dHB1dHMgZ28gdG8gYmFzZSBhZGRyZXNzJywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgcXVhbnRpdHkgPSAnMTAwJztcbiAgICAgIGNvbnN0IHRvdGFsSW5wdXQgPSAyMDAwMDAwMDtcbiAgICAgIGNvbnN0IHRvdGFsQXNzZXRMaXN0ID0ge1xuICAgICAgICBbZmluZ2VycHJpbnRdOiB7XG4gICAgICAgICAgcXVhbnRpdHk6ICcxMDAnLFxuICAgICAgICAgIHBvbGljeV9pZDogcG9saWN5SWQsXG4gICAgICAgICAgYXNzZXRfbmFtZTogYXNjaWlFbmNvZGVkTmFtZSxcbiAgICAgICAgfSxcbiAgICAgIH07XG5cbiAgICAgIC8vIEJ1aWxkIGEgY29uc29saWRhdGlvbiB0cmFuc2FjdGlvbiAtIGFsbCBvdXRwdXRzIGdvIHRvIHNlbmRlciAoYmFzZSkgYWRkcmVzc1xuICAgICAgY29uc3QgdHhCdWlsZGVyID0gZmFjdG9yeS5nZXRUcmFuc2ZlckJ1aWxkZXIoKTtcbiAgICAgIHR4QnVpbGRlci5pbnB1dCh7XG4gICAgICAgIHRyYW5zYWN0aW9uX2lkOiAnMzY3N2U3NWM3YmE2OTliZmRjNmNkNTdkNDJmMjQ2Zjg2ZjYzYWVmZDc2MDI1MDA2YWM3ODMxM2ZhZDJiYmEyMScsXG4gICAgICAgIHRyYW5zYWN0aW9uX2luZGV4OiAxLFxuICAgICAgfSk7XG5cbiAgICAgIC8vIEZvciBjb25zb2xpZGF0aW9uLCB0b2tlbnMgZ28gYmFjayB0byB0aGUgc2VuZGVyJ3MgYmFzZSBhZGRyZXNzXG4gICAgICB0eEJ1aWxkZXIub3V0cHV0KHtcbiAgICAgICAgYWRkcmVzczogc2VuZGVyQWRkcmVzcyxcbiAgICAgICAgYW1vdW50OiAnMCcsXG4gICAgICAgIG11bHRpQXNzZXRzOiB7XG4gICAgICAgICAgYXNzZXRfbmFtZTogYXNjaWlFbmNvZGVkTmFtZSxcbiAgICAgICAgICBwb2xpY3lfaWQ6IHBvbGljeUlkLFxuICAgICAgICAgIHF1YW50aXR5LFxuICAgICAgICAgIGZpbmdlcnByaW50LFxuICAgICAgICB9LFxuICAgICAgfSk7XG5cbiAgICAgIHR4QnVpbGRlci5jaGFuZ2VBZGRyZXNzKHNlbmRlckFkZHJlc3MsIHRvdGFsSW5wdXQudG9TdHJpbmcoKSwgdG90YWxBc3NldExpc3QpO1xuICAgICAgdHhCdWlsZGVyLnR0bCg4MDAwMDAwMDApO1xuICAgICAgdHhCdWlsZGVyLmlzVG9rZW5UcmFuc2FjdGlvbigpO1xuICAgICAgY29uc3QgdHggPSAoYXdhaXQgdHhCdWlsZGVyLmJ1aWxkKCkpIGFzIFRyYW5zYWN0aW9uO1xuICAgICAgY29uc3QgdHhIZXggPSB0eC50b0Jyb2FkY2FzdEZvcm1hdCgpO1xuXG4gICAgICAvLyBNb2NrIHdhbGxldCB3aXRoIGNvaW5TcGVjaWZpYyByZXR1cm5pbmcgYmFzZSBhZGRyZXNzXG4gICAgICBjb25zdCBtb2NrV2FsbGV0ID0ge1xuICAgICAgICBjb2luU3BlY2lmaWM6ICgpID0+ICh7XG4gICAgICAgICAgYmFzZUFkZHJlc3M6IHNlbmRlckFkZHJlc3MsXG4gICAgICAgIH0pLFxuICAgICAgfTtcblxuICAgICAgLy8gVmVyaWZ5IGNvbnNvbGlkYXRpb24gdHJhbnNhY3Rpb24gLSBubyByZWNpcGllbnRzLCBidXQgY29uc29saWRhdGlvblRvQmFzZUFkZHJlc3MgaXMgdHJ1ZVxuICAgICAgY29uc3QgdHhQYXJhbXMgPSB7XG4gICAgICAgIHJlY2lwaWVudHM6IHVuZGVmaW5lZCxcbiAgICAgIH07XG5cbiAgICAgIGNvbnN0IHR4UHJlYnVpbGQgPSB7IHR4SGV4IH07XG4gICAgICBjb25zdCB2ZXJpZmljYXRpb24gPSB7IGNvbnNvbGlkYXRpb25Ub0Jhc2VBZGRyZXNzOiB0cnVlIH07XG5cbiAgICAgIGNvbnN0IGlzVmVyaWZpZWQgPSBhd2FpdCBhZGFUb2tlbi52ZXJpZnlUcmFuc2FjdGlvbih7XG4gICAgICAgIHR4UGFyYW1zLFxuICAgICAgICB0eFByZWJ1aWxkLFxuICAgICAgICB2ZXJpZmljYXRpb24sXG4gICAgICAgIHdhbGxldDogbW9ja1dhbGxldCBhcyBhbnksXG4gICAgICB9KTtcbiAgICAgIGlzVmVyaWZpZWQuc2hvdWxkLmVxdWFsKHRydWUpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBmYWlsIHRva2VuIGNvbnNvbGlkYXRpb24gd2hlbiBvdXRwdXQgYWRkcmVzcyBkb2VzIG5vdCBtYXRjaCBiYXNlIGFkZHJlc3MnLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCBxdWFudGl0eSA9ICcxMDAnO1xuICAgICAgY29uc3QgdG90YWxJbnB1dCA9IDIwMDAwMDAwO1xuICAgICAgY29uc3QgdG90YWxBc3NldExpc3QgPSB7XG4gICAgICAgIFtmaW5nZXJwcmludF06IHtcbiAgICAgICAgICBxdWFudGl0eTogJzEwMCcsXG4gICAgICAgICAgcG9saWN5X2lkOiBwb2xpY3lJZCxcbiAgICAgICAgICBhc3NldF9uYW1lOiBhc2NpaUVuY29kZWROYW1lLFxuICAgICAgICB9LFxuICAgICAgfTtcblxuICAgICAgLy8gQnVpbGQgYSB0cmFuc2FjdGlvbiB3aXRoIG91dHB1dCB0byByZWNlaXZlciAobm90IGJhc2UgYWRkcmVzcylcbiAgICAgIGNvbnN0IHR4QnVpbGRlciA9IGZhY3RvcnkuZ2V0VHJhbnNmZXJCdWlsZGVyKCk7XG4gICAgICB0eEJ1aWxkZXIuaW5wdXQoe1xuICAgICAgICB0cmFuc2FjdGlvbl9pZDogJzM2NzdlNzVjN2JhNjk5YmZkYzZjZDU3ZDQyZjI0NmY4NmY2M2FlZmQ3NjAyNTAwNmFjNzgzMTNmYWQyYmJhMjEnLFxuICAgICAgICB0cmFuc2FjdGlvbl9pbmRleDogMSxcbiAgICAgIH0pO1xuXG4gICAgICB0eEJ1aWxkZXIub3V0cHV0KHtcbiAgICAgICAgYWRkcmVzczogcmVjZWl2ZXJBZGRyZXNzLCAvLyBPdXRwdXQgZ29lcyB0byByZWNlaXZlciwgbm90IGJhc2UgYWRkcmVzc1xuICAgICAgICBhbW91bnQ6ICcwJyxcbiAgICAgICAgbXVsdGlBc3NldHM6IHtcbiAgICAgICAgICBhc3NldF9uYW1lOiBhc2NpaUVuY29kZWROYW1lLFxuICAgICAgICAgIHBvbGljeV9pZDogcG9saWN5SWQsXG4gICAgICAgICAgcXVhbnRpdHksXG4gICAgICAgICAgZmluZ2VycHJpbnQsXG4gICAgICAgIH0sXG4gICAgICB9KTtcblxuICAgICAgdHhCdWlsZGVyLmNoYW5nZUFkZHJlc3Moc2VuZGVyQWRkcmVzcywgdG90YWxJbnB1dC50b1N0cmluZygpLCB0b3RhbEFzc2V0TGlzdCk7XG4gICAgICB0eEJ1aWxkZXIudHRsKDgwMDAwMDAwMCk7XG4gICAgICB0eEJ1aWxkZXIuaXNUb2tlblRyYW5zYWN0aW9uKCk7XG4gICAgICBjb25zdCB0eCA9IChhd2FpdCB0eEJ1aWxkZXIuYnVpbGQoKSkgYXMgVHJhbnNhY3Rpb247XG4gICAgICBjb25zdCB0eEhleCA9IHR4LnRvQnJvYWRjYXN0Rm9ybWF0KCk7XG5cbiAgICAgIC8vIE1vY2sgd2FsbGV0IHdpdGggZGlmZmVyZW50IGJhc2UgYWRkcmVzc1xuICAgICAgY29uc3QgbW9ja1dhbGxldCA9IHtcbiAgICAgICAgY29pblNwZWNpZmljOiAoKSA9PiAoe1xuICAgICAgICAgIGJhc2VBZGRyZXNzOiBzZW5kZXJBZGRyZXNzLCAvLyBCYXNlIGFkZHJlc3MgaXMgc2VuZGVyLCBidXQgb3V0cHV0IGdvZXMgdG8gcmVjZWl2ZXJcbiAgICAgICAgfSksXG4gICAgICB9O1xuXG4gICAgICBjb25zdCB0eFBhcmFtcyA9IHtcbiAgICAgICAgcmVjaXBpZW50czogdW5kZWZpbmVkLFxuICAgICAgfTtcblxuICAgICAgY29uc3QgdHhQcmVidWlsZCA9IHsgdHhIZXggfTtcbiAgICAgIGNvbnN0IHZlcmlmaWNhdGlvbiA9IHsgY29uc29saWRhdGlvblRvQmFzZUFkZHJlc3M6IHRydWUgfTtcblxuICAgICAgYXdhaXQgYWRhVG9rZW5cbiAgICAgICAgLnZlcmlmeVRyYW5zYWN0aW9uKHtcbiAgICAgICAgICB0eFBhcmFtcyxcbiAgICAgICAgICB0eFByZWJ1aWxkLFxuICAgICAgICAgIHZlcmlmaWNhdGlvbixcbiAgICAgICAgICB3YWxsZXQ6IG1vY2tXYWxsZXQgYXMgYW55LFxuICAgICAgICB9KVxuICAgICAgICAuc2hvdWxkLmJlLnJlamVjdGVkV2l0aCgndHggb3V0cHV0cyBkb2VzIG5vdCBtYXRjaCB3aXRoIGV4cGVjdGVkIGFkZHJlc3MnKTtcbiAgICB9KTtcbiAgfSk7XG59KTtcbiJdfQ==
|
|
959
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9rZW5XaXRoZHJhd2FsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vdGVzdC91bml0L3Rva2VuV2l0aGRyYXdhbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLG9EQUE0QjtBQUM1Qiw4Q0FBa0Q7QUFDbEQsdURBQXlDO0FBQ3pDLG1DQUFnRTtBQUNoRSw0Q0FBdUM7QUFDdkMsc0ZBQXdFO0FBRXhFLDhDQUEwRDtBQUMxRCw0Q0FBMEM7QUFFMUMsUUFBUSxDQUFDLHNCQUFzQixFQUFFLEtBQUssSUFBSSxFQUFFO0lBQzFDLE1BQU0sT0FBTyxHQUFHLElBQUksK0JBQXlCLENBQUMsZUFBSyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO0lBRWpFLE1BQU0sZUFBZSxHQUFHLFFBQVEsQ0FBQyxLQUFLLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FBQztJQUM5RCxNQUFNLGFBQWEsR0FBRyxRQUFRLENBQUMsS0FBSyxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUM7SUFFNUQsTUFBTSxRQUFRLEdBQUcsMERBQTBELENBQUM7SUFDNUUsTUFBTSxnQkFBZ0IsR0FBRyxXQUFXLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUNuRSxNQUFNLFNBQVMsR0FBRyxZQUFZLENBQUM7SUFDL0IsTUFBTSxJQUFJLEdBQUcsT0FBTyxDQUFDO0lBQ3JCLE1BQU0sZ0JBQWdCLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsT0FBTyxDQUFDLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3BFLE1BQU0sV0FBVyxHQUFHLDhDQUE4QyxDQUFDO0lBRW5FLE1BQU0sbUJBQW1CLEdBQUcsMERBQTBELENBQUM7SUFDdkYsTUFBTSwyQkFBMkIsR0FBRyxXQUFXLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxtQkFBbUIs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VSxHQUFHLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxFQUFFLFVBQVUsRUFBRSxFQUFFLENBQUM7WUFDckQsTUFBTSxZQUFZLEdBQUcsRUFBRSwwQkFBMEIsRUFBRSxJQUFJLEVBQUUsQ0FBQztZQUUxRCxNQUFNLFFBQVE7aUJBQ1gsaUJBQWlCLENBQUM7Z0JBQ2pCLFFBQVE7Z0JBQ1IsVUFBVTtnQkFDVixZQUFZO2dCQUNaLE1BQU0sRUFBRSxVQUFpQjthQUMxQixDQUFDO2lCQUNELE1BQU0sQ0FBQyxFQUFFLENBQUMsWUFBWSxDQUFDLGlEQUFpRCxDQUFDLENBQUM7UUFDL0UsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHNob3VsZCBmcm9tICdzaG91bGQnO1xuaW1wb3J0IHsgVHJhbnNhY3Rpb25UeXBlIH0gZnJvbSAnQGJpdGdvL3Nkay1jb3JlJztcbmltcG9ydCAqIGFzIHRlc3REYXRhIGZyb20gJy4uL3Jlc291cmNlcyc7XG5pbXBvcnQgeyBUcmFuc2FjdGlvbkJ1aWxkZXJGYWN0b3J5LCBBZGFUb2tlbiB9IGZyb20gJy4uLy4uL3NyYyc7XG5pbXBvcnQgeyBjb2lucyB9IGZyb20gJ0BiaXRnby9zdGF0aWNzJztcbmltcG9ydCAqIGFzIENhcmRhbm9XYXNtIGZyb20gJ0BlbXVyZ28vY2FyZGFuby1zZXJpYWxpemF0aW9uLWxpYi1ub2RlanMnO1xuaW1wb3J0IHsgVHJhbnNhY3Rpb24gfSBmcm9tICcuLi8uLi9zcmMvbGliL3RyYW5zYWN0aW9uJztcbmltcG9ydCB7IFRlc3RCaXRHbywgVGVzdEJpdEdvQVBJIH0gZnJvbSAnQGJpdGdvL3Nkay10ZXN0JztcbmltcG9ydCB7IEJpdEdvQVBJIH0gZnJvbSAnQGJpdGdvL3Nkay1hcGknO1xuXG5kZXNjcmliZSgnQURBIFRva2VuIE9wZXJhdGlvbnMnLCBhc3luYyAoKSA9PiB7XG4gIGNvbnN0IGZhY3RvcnkgPSBuZXcgVHJhbnNhY3Rpb25CdWlsZGVyRmFjdG9yeShjb2lucy5nZXQoJ3RhZGEnKSk7XG5cbiAgY29uc3QgcmVjZWl2ZXJBZGRyZXNzID0gdGVzdERhdGEucmF3VHgub3V0cHV0QWRkcmVzczIuYWRkcmVzcztcbiAgY29uc3Qgc2VuZGVyQWRkcmVzcyA9IHRlc3REYXRhLnJhd1R4Lm91dHB1dEFkZHJlc3MxLmFkZHJlc3M7XG5cbiAgY29uc3QgcG9saWN5SWQgPSAnZTE2YzJkYzhhZTkzN2U4ZDM3OTBjN2ZkNzE2OGQ3Yjk5NDYyMWJhMTRjYTExNDE1ZjM5ZmVkNzInO1xuICBjb25zdCBwb2xpY3lTY3JpcHRIYXNoID0gQ2FyZGFub1dhc20uU2NyaXB0SGFzaC5mcm9tX2hleChwb2xpY3lJZCk7XG4gIGNvbnN0IGFzc2V0TmFtZSA9ICd0YWRhOndhdGVyJztcbiAgY29uc3QgbmFtZSA9ICdXQVRFUic7XG4gIGNvbnN0IGFzY2lpRW5jb2RlZE5hbWUgPSBCdWZmZXIuZnJvbShuYW1lLCAnYXNjaWknKS50b1N0cmluZygnaGV4Jyk7XG4gIGNvbnN0IGZpbmdlcnByaW50ID0gJ2Fzc2V0MW42OXhmNjBkMDc2MHh2bjh2MmZmZDVmcnZzbTBjbDJyOGhmamY2JztcblxuICBjb25zdCB1bnN1cHBvcnRlZFBvbGljeUlkID0gJzI3OWM5MDlmMzQ4ZTUzM2RhNTgwODg5OGY4N2Y5YTE0YmIyYzNkZmJiYWNjY2Q2MzFkOTI3YTNmJztcbiAgY29uc3QgdW5zdXBwb3J0ZWRQb2xpY3lTY3JpcHRIYXNoID0gQ2FyZGFub1dhc20uU2NyaXB0SGFzaC5mcm9tX2hleCh1bnN1cHBvcnRlZFBvbGljeUlkKTtcbiAgY29uc3QgdW5zdXBwb3J0ZWROYW1lID0gJ0JJVEdPJztcbiAgY29uc3QgdW5zdXBwb3J0ZWRBc2NpaUVuY29kZWROYW1lID0gQnVmZmVyLmZyb20odW5zdXBwb3J0ZWROYW1lLCAnYXNjaWknKS50b1N0cmluZygnaGV4Jyk7XG4gIGNvbnN0IHVuc3VwcG9ydGVkRmluZ2VycHJpbnQgPSAnYXNzZXQxbThoMGdrN2Y2eDVqNXFnMHg1bTRxNWY1ajVxZzB4NW00cTVmNWonO1xuXG4gIGl0KGBzaG91bGQgYnVpbGQgYSB0cmFuc2FjdGlvbiB3aXRoIHRva2VuICR7YXNzZXROYW1lfSAtIGFkYSArICR7YXNzZXROYW1lfWAsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBxdWFudGl0eSA9ICcyMCc7XG4gICAgY29uc3QgdG90YWxJbnB1dCA9IDIwMDAwMDAwO1xuICAgIGNvbnN0IHRvdGFsQXNzZXRMaXN0ID0ge1xuICAgICAgW2ZpbmdlcnByaW50XToge1xuICAgICAgICBxdWFudGl0eTogJzEwMCcsXG4gICAgICAgIHBvbGljeV9pZDogcG9saWN5SWQsXG4gICAgICAgIGFzc2V0X25hbWU6IGFzY2lpRW5jb2RlZE5hbWUsXG4gICAgICB9LFxuICAgIH07XG4gICAgY29uc3QgZXhwZWN0ZWRDaGFuZ2VBZGEgPSAoXG4gICAgICB0b3RhbElucHV0IC1cbiAgICAgIDE1MDAwMDAgLyogbWluIGFkYSBmb3IgY2hhbmdlIHRva2VuIHV0eG8gKi8gLVxuICAgICAgMTUwMDAwMCAvKiBtaW4gYWRhIGZvciByZWNpcGllbnQgdG9rZW4gdXR4byovIC1cbiAgICAgIDE3MzU5N1xuICAgICkgLyogZmVlICovXG4gICAgICAudG9TdHJpbmcoKTtcbiAgICBjb25zdCBleHBlY3RlZENoYW5nZVRva2VuID0gJzgwJztcblxuICAgIGNvbnN0IHR4QnVpbGRlciA9IGZhY3RvcnkuZ2V0VHJhbnNmZXJCdWlsZGVyKCk7XG4gICAgdHhCdWlsZGVyLmlucHV0KHtcbiAgICAgIHRyYW5zYWN0aW9uX2lkOiAnMzY3N2U3NWM3YmE2OTliZmRjNmNkNTdkNDJmMjQ2Zjg2ZjYzYWVmZDc2MDI1MDA2YWM3ODMxM2ZhZDJiYmEyMScsXG4gICAgICB0cmFuc2FjdGlvbl9pbmRleDogMSxcbiAgICB9KTtcblxuICAgIHR4QnVpbGRlci5vdXRwdXQoe1xuICAgICAgYWRkcmVzczogcmVjZWl2ZXJBZGRyZXNzLFxuICAgICAgYW1vdW50OiAnMCcsIC8vIFNldCBBREEgYW1vdW50IHRvIDAgZm9yIHRva2VuIHRyYW5zZmVyIChtaW4gQURBIGlzIGhhbmRsZWQgaW4gc2RrIGJ1aWxkKVxuICAgICAgbXVsdGlBc3NldHM6IHtcbiAgICAgICAgYXNzZXRfbmFtZTogYXNjaWlFbmNvZGVkTmFtZSxcbiAgICAgICAgcG9saWN5X2lkOiBwb2xpY3lJZCxcbiAgICAgICAgcXVhbnRpdHksXG4gICAgICAgIGZpbmdlcnByaW50LFxuICAgICAgfSxcbiAgICB9KTtcblxuICAgIHR4QnVpbGRlci5jaGFuZ2VBZGRyZXNzKHNlbmRlckFkZHJlc3MsIHRvdGFsSW5wdXQudG9TdHJpbmcoKSwgdG90YWxBc3NldExpc3QpO1xuICAgIHR4QnVpbGRlci50dGwoODAwMDAwMDAwKTtcbiAgICB0eEJ1aWxkZXIuaXNUb2tlblRyYW5zYWN0aW9uKCk7XG4gICAgY29uc3QgdHggPSAoYXdhaXQgdHhCdWlsZGVyLmJ1aWxkKCkpIGFzIFRyYW5zYWN0aW9uO1xuXG4gICAgc2hvdWxkLmVxdWFsKHR4LnR5cGUsIFRyYW5zYWN0aW9uVHlwZS5TZW5kKTtcbiAgICBjb25zdCB0eERhdGEgPSB0eC50b0pzb24oKTtcblxuICAgIC8vIENoZWNrIG91dHB1dHMgKHNob3VsZCBpbmNsdWRlIG11bHRpLWFzc2V0IGFuZCByZWd1bGFyIGNoYW5nZSlcbiAgICB0eERhdGEub3V0cHV0cy5sZW5ndGguc2hvdWxkLmVxdWFsKDMpO1xuICAgIHR4RGF0YS5pbnB1dHMubGVuZ3RoLnNob3VsZC5lcXVhbCgxKTtcblxuICAgIC8vIE9uZSBvdXRwdXQgc2hvdWxkIGhhdmUgdGhlIG11bHRpLWFzc2V0IGNoYW5nZSBhbmQgdGhlIG90aGVyIGZvciB0aGUgdHJhbnNmZXJcbiAgICBjb25zdCBhc3NldE91dHB1dCA9IHR4RGF0YS5vdXRwdXRzLmZpbHRlcigob3V0cHV0KSA9PiBvdXRwdXQubXVsdGlBc3NldHMgIT09IHVuZGVmaW5lZCk7XG4gICAgYXNzZXRPdXRwdXQhLmxlbmd0aC5zaG91bGQuZXF1YWwoMik7XG5cbiAgICAvLyBWZXJpZnkgaW5wdXRzIGFuZCBvdXRwdXRzXG4gICAgY29uc3QgaW5wdXQgPSB0eERhdGEuaW5wdXRzWzBdO1xuICAgIGlucHV0LnRyYW5zYWN0aW9uX2lkLnNob3VsZC5lcXVhbCgnMzY3N2U3NWM3YmE2OTliZmRjNmNkNTdkNDJmMjQ2Zjg2ZjYzYWVmZDc2MDI1MDA2YWM3ODMxM2ZhZDJiYmEyMScpO1xuICAgIGlucHV0LnRyYW5zYWN0aW9uX2luZGV4LnNob3VsZC5lcXVhbCgxKTtcblxuICAgIC8vIFZhbGlkYXRlIHJlY2VpdmVyIG91dHB1dFxuICAgIGNvbnN0IHJlY2VpdmVyT3V0cHV0ID0gdHhEYXRhLm91dHB1dHMuZmlsdGVyKChvdXRwdXQpID0+IG91dHB1dC5hZGRyZXNzID09PSByZWNlaXZlckFkZHJlc3MpO1xuICAgIHJlY2VpdmVyT3V0cHV0Lmxlbmd0aC5zaG91bGQuZXF1YWwoMSk7XG4gICAgcmVjZWl2ZXJPdXRwdXRbMF0uYW1vdW50LnNob3VsZC5lcXVhbCgnMTUwMDAwMCcpOyAvLyBNaW5pbXVtIEFEQSBmb3IgYXNzZXQgb3V0cHV0XG4gICAgKHJlY2VpdmVyT3V0cHV0WzBdLm11bHRpQXNzZXRzISBhcyBDYXJkYW5vV2FzbS5NdWx0aUFzc2V0KVxuICAgICAgLmdldF9hc3NldChwb2xpY3lTY3JpcHRIYXNoLCBDYXJkYW5vV2FzbS5Bc3NldE5hbWUubmV3KEJ1ZmZlci5mcm9tKGFzY2lpRW5jb2RlZE5hbWUsICdoZXgnKSkpXG4gICAgICAudG9fc3RyKClcbiAgICAgIC5zaG91bGQuZXF1YWwocXVhbnRpdHkpO1xuXG4gICAgLy8gVmFsaWRhdGUgY2hhbmdlIG91dHB1dHMgKG9uZSB3aXRoIGFzc2V0IGFuZCBvbmUgd2l0aG91dClcbiAgICBjb25zdCBjaGFuZ2VPdXRwdXQgPSB0eERhdGEub3V0cHV0cy5maWx0ZXIoKG91dHB1dCkgPT4gb3V0cHV0LmFkZHJlc3MgPT09IHNlbmRlckFkZHJlc3MpO1xuICAgIGNoYW5nZU91dHB1dC5sZW5ndGguc2hvdWxkLmVxdWFsKDIpO1xuICAgIGNvbnN0IGNoYW5nZVdpdGhBc3NldCA9IGNoYW5nZU91dHB1dC5maW5kKChvdXRwdXQpID0+IG91dHB1dC5tdWx0aUFzc2V0cyAhPT0gdW5kZWZpbmVkKTtcbiAgICBzaG91bGQuZXhpc3QoY2hhbmdlV2l0aEFzc2V0KTtcbiAgICBjaGFuZ2VXaXRoQXNzZXQhLmFtb3VudC5zaG91bGQuZXF1YWwoJzE1MDAwMDAnKTsgLy8gTWluaW11bSBBREEgZm9yIGFzc2V0IG91dHB1dFxuICAgIChjaGFuZ2VXaXRoQXNzZXQhLm11bHRpQXNzZXRzISBhcyBDYXJkYW5vV2FzbS5NdWx0aUFzc2V0KVxuICAgICAgLmdldF9hc3NldChwb2xpY3lTY3JpcHRIYXNoLCBDYXJkYW5vV2FzbS5Bc3NldE5hbWUubmV3KEJ1ZmZlci5mcm9tKGFzY2lpRW5jb2RlZE5hbWUsICdoZXgnKSkpXG4gICAgICAudG9fc3RyKClcbiAgICAgIC5zaG91bGQuZXF1YWwoZXhwZWN0ZWRDaGFuZ2VUb2tlbik7XG5cbiAgICBjb25zdCBjaGFuZ2VXaXRob3V0QXNzZXQgPSBjaGFuZ2VPdXRwdXQuZmluZCgob3V0cHV0KSA9PiBvdXRwdXQubXVsdGlBc3NldHMgPT09IHVuZGVmaW5lZCk7XG4gICAgc2hvdWxkLmV4aXN0KGNoYW5nZVdpdGhvdXRBc3NldCk7XG4gICAgY2hhbmdlV2l0aG91dEFzc2V0IS5hbW91bnQuc2hvdWxkLmVxdWFsKGV4cGVjdGVkQ2hhbmdlQWRhKTsgLy8gUmVtYWluaW5nIEFEQSBhZnRlciBmZWVzIGFuZCBtaW4gQURBc1xuICB9KTtcblxuICBpdChgc2hvdWxkIGJ1aWxkIGEgdHJhbnNhY3Rpb24gd2l0aCB0b2tlbiAke2Fzc2V0TmFtZX0gLSBhZGEgKyAke2Fzc2V0TmFtZX0gKyB1bnN1cHBvcnRlZCB0b2tlbmAsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBxdWFudGl0eSA9ICcyMCc7XG4gICAgY29uc3QgdG90YWxJbnB1dCA9IDIwMDAwMDAwO1xuICAgIGNvbnN0IHRvdGFsQXNzZXRMaXN0ID0ge1xuICAgICAgW2ZpbmdlcnByaW50XToge1xuICAgICAgICBxdWFudGl0eTogJzEwMCcsXG4gICAgICAgIHBvbGljeV9pZDogcG9saWN5SWQsXG4gICAgICAgIGFzc2V0X25hbWU6IGFzY2lpRW5jb2RlZE5hbWUsXG4gICAgICB9LFxuICAgICAgW3Vuc3VwcG9ydGVkRmluZ2VycHJpbnRdOiB7XG4gICAgICAgIHF1YW50aXR5OiAnMTAwMDAnLFxuICAgICAgICBwb2xpY3lfaWQ6IHVuc3VwcG9ydGVkUG9saWN5SWQsXG4gICAgICAgIGFzc2V0X25hbWU6IHVuc3VwcG9ydGVkQXNjaWlFbmNvZGVkTmFtZSxcbiAgICAgIH0sXG4gICAgfTtcbiAgICBjb25zdCBleHBlY3RlZENoYW5nZUFkYSA9IChcbiAgICAgIHRvdGFsSW5wdXQgLVxuICAgICAgMTUwMDAwMCAvKiBtaW4gYWRhIGZvciBjaGFuZ2UgdG9rZW4gdXR4byAqLyAtXG4gICAgICAxNTAwMDAwIC8qIG1pbiBhZGEgZm9yIHJlY2lwaWVudCB0b2tlbiB1dHhvKi8gLVxuICAgICAgMTUwMDAwMCAvKiBtaW4gYWRhIGZvciB1bnN1cHBvcnRlZCB0b2tlbiBjaGFuZ2UgdXR4byAqLyAtXG4gICAgICAxNzk4ODlcbiAgICApIC8qIGZlZSAqL1xuICAgICAgLnRvU3RyaW5nKCk7XG4gICAgY29uc3QgZXhwZWN0ZWRDaGFuZ2VUb2tlbiA9ICc4MCc7XG5cbiAgICBjb25zdCB0eEJ1aWxkZXIgPSBmYWN0b3J5LmdldFRyYW5zZmVyQnVpbGRlcigpO1xuICAgIHR4QnVpbGRlci5pbnB1dCh7XG4gICAgICB0cmFuc2FjdGlvbl9pZDogJzM2NzdlNzVjN2JhNjk5YmZkYzZjZDU3ZDQyZjI0NmY4NmY2M2FlZmQ3NjAyNTAwNmFjNzgzMTNmYWQyYmJhMjEnLFxuICAgICAgdHJhbnNhY3Rpb25faW5kZXg6IDEsXG4gICAgfSk7XG4gICAgdHhCdWlsZGVyLmlucHV0KHtcbiAgICAgIHRyYW5zYWN0aW9uX2lkOiAnMzY3N2U3NWM3YmE2OTliZmRjNmNkNTdkNDJmMjQ2Zjg2ZjYzYWVmZDc2MDI1MDA2YWM3ODMxM2ZhZDJiYmEyMicsXG4gICAgICB0cmFuc2FjdGlvbl9pbmRleDogMSxcbiAgICB9KTtcblxuICAgIHR4QnVpbGRlci5vdXRwdXQoe1xuICAgICAgYWRkcmVzczogcmVjZWl2ZXJBZGRyZXNzLFxuICAgICAgYW1vdW50OiAnMCcsIC8vIFNldCBBREEgYW1vdW50IHRvIDAgZm9yIHRva2VuIHRyYW5zZmVyIChtaW4gQURBIGlzIGhhbmRsZWQgaW4gc2RrIGJ1aWxkKVxuICAgICAgbXVsdGlBc3NldHM6IHtcbiAgICAgICAgYXNzZXRfbmFtZTogYXNjaWlFbmNvZGVkTmFtZSxcbiAgICAgICAgcG9saWN5X2lkOiBwb2xpY3lJZCxcbiAgICAgICAgcXVhbnRpdHksXG4gICAgICAgIGZpbmdlcnByaW50LFxuICAgICAgfSxcbiAgICB9KTtcblxuICAgIHR4QnVpbGRlci5jaGFuZ2VBZGRyZXNzKHNlbmRlckFkZHJlc3MsIHRvdGFsSW5wdXQudG9TdHJpbmcoKSwgdG90YWxBc3NldExpc3QpO1xuICAgIHR4QnVpbGRlci50dGwoODAwMDAwMDAwKTtcbiAgICB0eEJ1aWxkZXIuaXNUb2tlblRyYW5zYWN0aW9uKCk7XG4gICAgY29uc3QgdHggPSAoYXdhaXQgdHhCdWlsZGVyLmJ1aWxkKCkpIGFzIFRyYW5zYWN0aW9uO1xuXG4gICAgc2hvdWxkLmVxdWFsKHR4LnR5cGUsIFRyYW5zYWN0aW9uVHlwZS5TZW5kKTtcbiAgICBjb25zdCB0eERhdGEgPSB0eC50b0pzb24oKTtcblxuICAgIC8vIENoZWNrIG91dHB1dHMgKHNob3VsZCBpbmNsdWRlIG11bHRpLWFzc2V0IGFuZCByZWd1bGFyIGNoYW5nZSlcbiAgICB0eERhdGEub3V0cHV0cy5sZW5ndGguc2hvdWxkLmVxdWFsKDQpO1xuICAgIHR4RGF0YS5pbnB1dHMubGVuZ3RoLnNob3VsZC5lcXVhbCgyKTtcblxuICAgIC8vIE9uZSBvdXRwdXQgc2hvdWxkIGhhdmUgdGhlIG11bHRpLWFzc2V0IGNoYW5nZSBhbmQgdGhlIG90aGVyIGZvciB0aGUgdHJhbnNmZXJcbiAgICBjb25zdCBhc3NldE91dHB1dCA9IHR4RGF0YS5vdXRwdXRzLmZpbHRlcigob3V0cHV0KSA9PiBvdXRwdXQubXVsdGlBc3NldHMgIT09IHVuZGVmaW5lZCk7XG4gICAgYXNzZXRPdXRwdXQhLmxlbmd0aC5zaG91bGQuZXF1YWwoMyk7XG5cbiAgICAvLyBWZXJpZnkgaW5wdXRzIGFuZCBvdXRwdXRzXG4gICAgdHhEYXRhLmlucHV0c1swXS50cmFuc2FjdGlvbl9pZC5zaG91bGQuZXF1YWwoJzM2NzdlNzVjN2JhNjk5YmZkYzZjZDU3ZDQyZjI0NmY4NmY2M2FlZmQ3NjAyNTAwNmFjNzgzMTNmYWQyYmJhMjEnKTtcbiAgICB0eERhdGEuaW5wdXRzWzBdLnRyYW5zYWN0aW9uX2luZGV4LnNob3VsZC5lcXVhbCgxKTtcblxuICAgIHR4RGF0YS5pbnB1dHNbMV0udHJhbnNhY3Rpb25faWQuc2hvdWxkLmVxdWFsKCczNjc3ZTc1YzdiYTY5OWJmZGM2Y2Q1N2Q0MmYyNDZmODZmNjNhZWZkNzYwMjUwMDZhYzc4MzEzZmFkMmJiYTIyJyk7XG4gICAgdHhEYXRhLmlucHV0c1sxXS50cmFuc2FjdGlvbl9pbmRleC5zaG91bGQuZXF1YWwoMSk7XG5cbiAgICAvLyBWYWxpZGF0ZSByZWNlaXZlciBvdXRwdXRcbiAgICBjb25zdCByZWNlaXZlck91dHB1dCA9IHR4RGF0YS5vdXRwdXRzLmZpbHRlcigob3V0cHV0KSA9PiBvdXRwdXQuYWRkcmVzcyA9PT0gcmVjZWl2ZXJBZGRyZXNzKTtcbiAgICByZWNlaXZlck91dHB1dC5sZW5ndGguc2hvdWxkLmVxdWFsKDEpO1xuICAgIHJlY2VpdmVyT3V0cHV0WzBdLmFtb3VudC5zaG91bGQuZXF1YWwoJzE1MDAwMDAnKTsgLy8gTWluaW11bSBBREEgZm9yIGFzc2V0IG91dHB1dFxuICAgIChyZWNlaXZlck91dHB1dFswXS5tdWx0aUFzc2V0cyEgYXMgQ2FyZGFub1dhc20uTXVsdGlBc3NldClcbiAgICAgIC5nZXRfYXNzZXQocG9saWN5U2NyaXB0SGFzaCwgQ2FyZGFub1dhc20uQXNzZXROYW1lLm5ldyhCdWZmZXIuZnJvbShhc2NpaUVuY29kZWROYW1lLCAnaGV4JykpKVxuICAgICAgLnRvX3N0cigpXG4gICAgICAuc2hvdWxkLmVxdWFsKHF1YW50aXR5KTtcblxuICAgIC8vIFZhbGlkYXRlIGNoYW5nZSBvdXRwdXRzIChvbmUgd2l0aCBzdXBwb3J0ZWQgdG9rZW4sIG9uZSB3aXRoIHVuc3VwcG9ydGVkIHRva2VuIGFuZCBvbmUgZm9yIHB1cmUgYWRhKVxuICAgIGNvbnN0IGNoYW5nZU91dHB1dCA9IHR4RGF0YS5vdXRwdXRzLmZpbHRlcigob3V0cHV0KSA9PiBvdXRwdXQuYWRkcmVzcyA9PT0gc2VuZGVyQWRkcmVzcyk7XG4gICAgY2hhbmdlT3V0cHV0Lmxlbmd0aC5zaG91bGQuZXF1YWwoMyk7XG5cbiAgICBjb25zdCBjaGFuZ2VXaXRoQXNzZXQgPSBjaGFuZ2VPdXRwdXQuZmlsdGVyKChvdXRwdXQpID0+IG91dHB1dC5tdWx0aUFzc2V0cyAhPT0gdW5kZWZpbmVkKTtcbiAgICBjaGFuZ2VXaXRoQXNzZXQubGVuZ3RoLnNob3VsZC5lcXVhbCgyKTtcbiAgICBsZXQgdG9rZW5zID0gMDtcbiAgICBjaGFuZ2VXaXRoQXNzZXQuZm9yRWFjaCgob3V0cHV0KSA9PiB7XG4gICAgICBvdXRwdXQhLmFtb3VudC5zaG91bGQuZXF1YWwoJzE1MDAwMDAnKTsgLy8gTWluaW11bSBBREEgZm9yIGFzc2V0IG91dHB1dFxuICAgICAgY29uc3Qgc3VwcG9ydGVkVG9rZW5DaGFuZ2VRdHkgPSAob3V0cHV0IS5tdWx0aUFzc2V0cyEgYXMgQ2FyZGFub1dhc20uTXVsdGlBc3NldClcbiAgICAgICAgLmdldF9hc3NldChwb2xpY3lTY3JpcHRIYXNoLCBDYXJkYW5vV2FzbS5Bc3NldE5hbWUubmV3KEJ1ZmZlci5mcm9tKGFzY2lpRW5jb2RlZE5hbWUsICdoZXgnKSkpXG4gICAgICAgIC50b19zdHIoKTtcbiAgICAgIGNvbnN0IHVuc3VwcG9ydGVkVG9rZW5DaGFuZ2VRdHkgPSAob3V0cHV0IS5tdWx0aUFzc2V0cyEgYXMgQ2FyZGFub1dhc20uTXVsdGlBc3NldClcbiAgICAgICAgLmdldF9hc3NldChcbiAgICAgICAgICB1bnN1cHBvcnRlZFBvbGljeVNjcmlwdEhhc2gsXG4gICAgICAgICAgQ2FyZGFub1dhc20uQXNzZXROYW1lLm5ldyhCdWZmZXIuZnJvbSh1bnN1cHBvcnRlZEFzY2lpRW5jb2RlZE5hbWUsICdoZXgnKSlcbiAgICAgICAgKVxuICAgICAgICAudG9fc3RyKCk7XG4gICAgICBpZiAoc3VwcG9ydGVkVG9rZW5DaGFuZ2VRdHkgIT09ICcwJykge1xuICAgICAgICBzdXBwb3J0ZWRUb2tlbkNoYW5nZVF0eS5zaG91bGQuZXF1YWwoZXhwZWN0ZWRDaGFuZ2VUb2tlbik7XG4gICAgICAgIHRva2VucysrO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdW5zdXBwb3J0ZWRUb2tlbkNoYW5nZVF0eSEuc2hvdWxkLmVxdWFsKCcxMDAwMCcpO1xuICAgICAgICB0b2tlbnMrKztcbiAgICAgIH1cbiAgICB9KTtcbiAgICB0b2tlbnMuc2hvdWxkLmVxdWFsKDIpO1xuXG4gICAgY29uc3QgY2hhbmdlV2l0aG91dEFzc2V0ID0gY2hhbmdlT3V0cHV0LmZpbmQoKG91dHB1dCkgPT4gb3V0cHV0Lm11bHRpQXNzZXRzID09PSB1bmRlZmluZWQpO1xuICAgIHNob3VsZC5leGlzdChjaGFuZ2VXaXRob3V0QXNzZXQpO1xuICAgIGNoYW5nZVdpdGhvdXRBc3NldCEuYW1vdW50LnNob3VsZC5lcXVhbChleHBlY3RlZENoYW5nZUFkYSk7IC8vIFJlbWFpbmluZyBBREEgYWZ0ZXIgZmVlcyBhbmQgbWluIEFEQXNcbiAgfSk7XG5cbiAgaXQoYHNob3VsZCBmYWlsIHRvIGJ1aWxkIGEgdHJhbnNhY3Rpb24gd2l0aCAke2Fzc2V0TmFtZX0gdG9rZW4gYW5kIGluc3VmZmljaWVudCBtaW5pbXVtIEFEQWAsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBxdWFudGl0eSA9ICcyMCc7XG4gICAgY29uc3QgdG90YWxJbnB1dCA9IDIwMDAwMDA7XG4gICAgY29uc3QgdG90YWxBc3NldExpc3QgPSB7XG4gICAgICBbZmluZ2VycHJpbnRdOiB7XG4gICAgICAgIHF1YW50aXR5OiAnMTAwJyxcbiAgICAgICAgcG9saWN5X2lkOiBwb2xpY3lJZCxcbiAgICAgICAgYXNzZXRfbmFtZTogYXNjaWlFbmNvZGVkTmFtZSxcbiAgICAgIH0sXG4gICAgfTtcblxuICAgIGNvbnN0IHR4QnVpbGRlciA9IGZhY3RvcnkuZ2V0VHJhbnNmZXJCdWlsZGVyKCk7XG4gICAgdHhCdWlsZGVyLmlucHV0KHtcbiAgICAgIHRyYW5zYWN0aW9uX2lkOiAnMzY3N2U3NWM3YmE2OTliZmRjNmNkNTdkNDJmMjQ2Zjg2ZjYzYWVmZDc2MDI1MDA2YWM3ODMxM2ZhZDJiYmEyMScsXG4gICAgICB0cmFuc2FjdGlvbl9pbmRleDogMSxcbiAgICB9KTtcblxuICAgIHR4QnVpbGRlci5vdXRwdXQoe1xuICAgICAgYWRkcmVzczogcmVjZWl2ZXJBZGRyZXNzLFxuICAgICAgYW1vdW50OiAnMCcsIC8vIFNldCBBREEgYW1vdW50IHRvIDAgZm9yIHRva2VuIHRyYW5zZmVyIChtaW4gQURBIGlzIGhhbmRsZWQgaW4gc2RrIGJ1aWxkKVxuICAgICAgbXVsdGlBc3NldHM6IHtcbiAgICAgICAgYXNzZXRfbmFtZTogYXNjaWlFbmNvZGVkTmFtZSxcbiAgICAgICAgcG9saWN5X2lkOiBwb2xpY3lJZCxcbiAgICAgICAgcXVhbnRpdHksXG4gICAgICAgIGZpbmdlcnByaW50LFxuICAgICAgfSxcbiAgICB9KTtcblxuICAgIHR4QnVpbGRlci5jaGFuZ2VBZGRyZXNzKHNlbmRlckFkZHJlc3MsIHRvdGFsSW5wdXQudG9TdHJpbmcoKSwgdG90YWxBc3NldExpc3QpO1xuICAgIHR4QnVpbGRlci50dGwoODAwMDAwMDAwKTtcbiAgICB0eEJ1aWxkZXIuaXNUb2tlblRyYW5zYWN0aW9uKCk7XG5cbiAgICBhd2FpdCB0eEJ1aWxkZXJcbiAgICAgIC5idWlsZCgpXG4gICAgICAuc2hvdWxkLnJlamVjdGVkV2l0aChcbiAgICAgICAgJ0luc3VmZmljaWVudCBmdW5kczogbmVlZCBhIG1pbmltdW0gb2YgMTUwMDAwMCBsb3ZlbGFjZSBwZXIgb3V0cHV0IHRvIGNvbnN0cnVjdCB0b2tlbiB0cmFuc2FjdGlvbnMnXG4gICAgICApO1xuICB9KTtcblxuICBpdChgc2hvdWxkIGZhaWwgdG8gYnVpbGQgYSB0cmFuc2FjdGlvbiB3aXRoICR7YXNzZXROYW1lfSBhbmQgaW5zdWZmaWNpZW50IHRva2VuIHF0eWAsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBxdWFudGl0eSA9ICcyMCc7XG4gICAgY29uc3QgdG90YWxJbnB1dCA9IDIwMDAwMDAwO1xuICAgIGNvbnN0IHRvdGFsQXNzZXRMaXN0ID0ge1xuICAgICAgW2ZpbmdlcnByaW50XToge1xuICAgICAgICBxdWFudGl0eTogJzUnLFxuICAgICAgICBwb2xpY3lfaWQ6IHBvbGljeUlkLFxuICAgICAgICBhc3NldF9uYW1lOiBhc2NpaUVuY29kZWROYW1lLFxuICAgICAgfSxcbiAgICB9O1xuXG4gICAgY29uc3QgdHhCdWlsZGVyID0gZmFjdG9yeS5nZXRUcmFuc2ZlckJ1aWxkZXIoKTtcbiAgICB0eEJ1aWxkZXIuaW5wdXQoe1xuICAgICAgdHJhbnNhY3Rpb25faWQ6ICczNjc3ZTc1YzdiYTY5OWJmZGM2Y2Q1N2Q0MmYyNDZmODZmNjNhZWZkNzYwMjUwMDZhYzc4MzEzZmFkMmJiYTIxJyxcbiAgICAgIHRyYW5zYWN0aW9uX2luZGV4OiAxLFxuICAgIH0pO1xuXG4gICAgdHhCdWlsZGVyLm91dHB1dCh7XG4gICAgICBhZGRyZXNzOiByZWNlaXZlckFkZHJlc3MsXG4gICAgICBhbW91bnQ6ICcwJywgLy8gU2V0IEFEQSBhbW91bnQgdG8gMCBmb3IgdG9rZW4gdHJhbnNmZXIgKG1pbiBBREEgaXMgaGFuZGxlZCBpbiBzZGsgYnVpbGQpXG4gICAgICBtdWx0aUFzc2V0czoge1xuICAgICAgICBhc3NldF9uYW1lOiBhc2NpaUVuY29kZWROYW1lLFxuICAgICAgICBwb2xpY3lfaWQ6IHBvbGljeUlkLFxuICAgICAgICBxdWFudGl0eSxcbiAgICAgICAgZmluZ2VycHJpbnQsXG4gICAgICB9LFxuICAgIH0pO1xuXG4gICAgdHhCdWlsZGVyLmNoYW5nZUFkZHJlc3Moc2VuZGVyQWRkcmVzcywgdG90YWxJbnB1dC50b1N0cmluZygpLCB0b3RhbEFzc2V0TGlzdCk7XG4gICAgdHhCdWlsZGVyLnR0bCg4MDAwMDAwMDApO1xuICAgIHR4QnVpbGRlci5pc1Rva2VuVHJhbnNhY3Rpb24oKTtcblxuICAgIGF3YWl0IHR4QnVpbGRlci5idWlsZCgpLnNob3VsZC5yZWplY3RlZFdpdGgoJ0luc3VmZmljaWVudCBxdHk6IG5vdCBlbm91Z2ggdG9rZW4gcXR5IHRvIGNvdmVyIHJlY2VpdmVyIG91dHB1dCcpO1xuICB9KTtcblxuICBpdChgc2hvdWxkIGJ1aWxkIGEgdHJhbnNhY3Rpb24gd2l0aCAke2Fzc2V0TmFtZX0gd2hlbiB0aGUgdG9rZW4gcXR5IGlzIGV4YWN0bHkgdGhlIHF0eSBpbiB3aXRoZHJhd2FsYCwgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IHF1YW50aXR5ID0gJzEnO1xuICAgIGNvbnN0IHRvdGFsSW5wdXQgPSAyMDAwMDAwMDtcbiAgICBjb25zdCB0b3RhbEFzc2V0TGlzdCA9IHtcbiAgICAgIFtmaW5nZXJwcmludF06IHtcbiAgICAgICAgcXVhbnRpdHk6ICcxJyxcbiAgICAgICAgcG9saWN5X2lkOiBwb2xpY3lJZCxcbiAgICAgICAgYXNzZXRfbmFtZTogYXNjaWlFbmNvZGVkTmFtZSxcbiAgICAgIH0sXG4gICAgfTtcblxuICAgIGNvbnN0IHR4QnVpbGRlciA9IGZhY3RvcnkuZ2V0VHJhbnNmZXJCdWlsZGVyKCk7XG4gICAgdHhCdWlsZGVyLmlucHV0KHtcbiAgICAgIHRyYW5zYWN0aW9uX2lkOiAnMzY3N2U3NWM3YmE2OTliZmRjNmNkNTdkNDJmMjQ2Zjg2ZjYzYWVmZDc2MDI1MDA2YWM3ODMxM2ZhZDJiYmEyMScsXG4gICAgICB0cmFuc2FjdGlvbl9pbmRleDogMSxcbiAgICB9KTtcblxuICAgIHR4QnVpbGRlci5vdXRwdXQoe1xuICAgICAgYWRkcmVzczogcmVjZWl2ZXJBZGRyZXNzLFxuICAgICAgYW1vdW50OiAnMCcsIC8vIFNldCBBREEgYW1vdW50IHRvIDAgZm9yIHRva2VuIHRyYW5zZmVyIChtaW4gQURBIGlzIGhhbmRsZWQgaW4gc2RrIGJ1aWxkKVxuICAgICAgbXVsdGlBc3NldHM6IHtcbiAgICAgICAgYXNzZXRfbmFtZTogYXNjaWlFbmNvZGVkTmFtZSxcbiAgICAgICAgcG9saWN5X2lkOiBwb2xpY3lJZCxcbiAgICAgICAgcXVhbnRpdHksXG4gICAgICAgIGZpbmdlcnByaW50LFxuICAgICAgfSxcbiAgICB9KTtcblxuICAgIHR4QnVpbGRlci5jaGFuZ2VBZGRyZXNzKHNlbmRlckFkZHJlc3MsIHRvdGFsSW5wdXQudG9TdHJpbmcoKSwgdG90YWxBc3NldExpc3QpO1xuICAgIHR4QnVpbGRlci50dGwoODAwMDAwMDAwKTtcbiAgICB0eEJ1aWxkZXIuaXNUb2tlblRyYW5zYWN0aW9uKCk7XG5cbiAgICBhd2FpdCB0eEJ1aWxkZXIuYnVpbGQoKS5zaG91bGQubm90LmJlLnJlamVjdGVkKCk7XG4gIH0pO1xuXG4gIGl0KGBzaG91bGQgYnVpbGQgYSBzcG9uc29yZWQgdG9rZW4gdHJhbnNhY3Rpb24gd2hlcmUgZmVlIGFkZHJlc3Mgc3BvbnNvcnMgbWluIEFEQSBmb3IgcmVjZWl2ZXJgLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgZmVlQWRkcmVzcyA9XG4gICAgICAnYWRkcl90ZXN0MXF6MmZ4djJ1bXlodHRreHl4cDh4MGRscGR0M2s2Y3duZzVweGozamhzeWR6ZXIzamN1NWQ4cHM3emV4MmsyeHQzdXF4Z2pxbm5qODN3czhsaHJuNjQ4amp4dHdxMnl0anFwJztcbiAgICBjb25zdCBxdWFudGl0eSA9ICcyMCc7XG4gICAgY29uc3Qgc2VuZGVySW5wdXRCYWxhbmNlID0gNTAwMDAwMDtcbiAgICBjb25zdCBmZWVBZGRyZXNzSW5wdXRCYWxhbmNlID0gMjAwMDAwMDA7IC8vIEZlZSBhZGRyZXNzIGhhcyBlbm91Z2ggQURBIHRvIHNwb25zb3JcbiAgICBjb25zdCB0b3RhbEFzc2V0TGlzdCA9IHtcbiAgICAgIFtmaW5nZXJwcmludF06IHtcbiAgICAgICAgcXVhbnRpdHk6ICcxMDAnLFxuICAgICAgICBwb2xpY3lfaWQ6IHBvbGljeUlkLFxuICAgICAgICBhc3NldF9uYW1lOiBhc2NpaUVuY29kZWROYW1lLFxuICAgICAgfSxcbiAgICB9O1xuXG4gICAgY29uc3QgdHhCdWlsZGVyID0gZmFjdG9yeS5nZXRUcmFuc2ZlckJ1aWxkZXIoKTtcbiAgICAvLyBTZW5kZXIgaW5wdXQgKGhhcyB0b2tlbnMpXG4gICAgdHhCdWlsZGVyLmlucHV0KHtcbiAgICAgIHRyYW5zYWN0aW9uX2lkOiAnMzY3N2U3NWM3YmE2OTliZmRjNmNkNTdkNDJmMjQ2Zjg2ZjYzYWVmZDc2MDI1MDA2YWM3ODMxM2ZhZDJiYmEyMScsXG4gICAgICB0cmFuc2FjdGlvbl9pbmRleDogMSxcbiAgICB9KTtcbiAgICAvLyBGZWUgYWRkcmVzcyBpbnB1dCAoc3BvbnNvcnMgZmVlcyBhbmQgbWluIEFEQSlcbiAgICB0eEJ1aWxkZXIuaW5wdXQoe1xuICAgICAgdHJhbnNhY3Rpb25faWQ6ICczNjc3ZTc1YzdiYTY5OWJmZGM2Y2Q1N2Q0MmYyNDZmODZmNjNhZWZkNzYwMjUwMDZhYzc4MzEzZmFkMmJiYTIyJyxcbiAgICAgIHRyYW5zYWN0aW9uX2luZGV4OiAwLFxuICAgIH0pO1xuXG4gICAgdHhCdWlsZGVyLm91dHB1dCh7XG4gICAgICBhZGRyZXNzOiByZWNlaXZlckFkZHJlc3MsXG4gICAgICBhbW91bnQ6ICcwJywgLy8gU2V0IEFEQSBhbW91bnQgdG8gMCBmb3IgdG9rZW4gdHJhbnNmZXIgKG1pbiBBREEgaXMgaGFuZGxlZCBieSBmZWUgYWRkcmVzcylcbiAgICAgIG11bHRpQXNzZXRzOiB7XG4gICAgICAgIGFzc2V0X25hbWU6IGFzY2lpRW5jb2RlZE5hbWUsXG4gICAgICAgIHBvbGljeV9pZDogcG9saWN5SWQsXG4gICAgICAgIHF1YW50aXR5LFxuICAgICAgICBmaW5nZXJwcmludCxcbiAgICAgIH0sXG4gICAgfSk7XG5cbiAgICB0eEJ1aWxkZXIuY2hhbmdlQWRkcmVzcyhzZW5kZXJBZGRyZXNzLCBzZW5kZXJJbnB1dEJhbGFuY2UudG9TdHJpbmcoKSwgdG90YWxBc3NldExpc3QpO1xuICAgIHR4QnVpbGRlci5zcG9uc29yc2hpcEluZm8oe1xuICAgICAgZmVlQWRkcmVzczogZmVlQWRkcmVzcyxcbiAgICAgIGZlZUFkZHJlc3NJbnB1dEJhbGFuY2U6IGZlZUFkZHJlc3NJbnB1dEJhbGFuY2UudG9TdHJpbmcoKSxcbiAgICB9KTtcbiAgICB0eEJ1aWxkZXIudHRsKDgwMDAwMDAwMCk7XG4gICAgdHhCdWlsZGVyLmlzVG9rZW5UcmFuc2FjdGlvbigpO1xuICAgIGNvbnN0IHR4ID0gKGF3YWl0IHR4QnVpbGRlci5idWlsZCgpKSBhcyBUcmFuc2FjdGlvbjtcblxuICAgIHNob3VsZC5lcXVhbCh0eC50eXBlLCBUcmFuc2FjdGlvblR5cGUuU2VuZCk7XG4gICAgY29uc3QgdHhEYXRhID0gdHgudG9Kc29uKCk7XG5cbiAgICB0eERhdGEuaW5wdXRzLmxlbmd0aC5zaG91bGQuZXF1YWwoMik7XG4gICAgdHhEYXRhLm91dHB1dHMubGVuZ3RoLnNob3VsZC5lcXVhbCg0KTtcblxuICAgIC8vIFZhbGlkYXRlIHJlY2VpdmVyIG91dHB1dCAtIG1pbiBBREEgc2hvdWxkIGJlIHNwb25zb3JlZCBieSBmZWUgYWRkcmVzc1xuICAgIGNvbnN0IHJlY2VpdmVyT3V0cHV0ID0gdHhEYXRhLm91dHB1dHMuZmlsdGVyKChvdXRwdXQpID0+IG91dHB1dC5hZGRyZXNzID09PSByZWNlaXZlckFkZHJlc3MpO1xuICAgIHJlY2VpdmVyT3V0cHV0Lmxlbmd0aC5zaG91bGQuZXF1YWwoMSk7XG4gICAgcmVjZWl2ZXJPdXRwdXRbMF0uYW1vdW50LnNob3VsZC5lcXVhbCgnMTUwMDAwMCcpOyAvLyBNaW5pbXVtIEFEQSBmb3IgYXNzZXQgb3V0cHV0IChzcG9uc29yZWQgYnkgZmVlIGFkZHJlc3MpXG4gICAgKHJlY2VpdmVyT3V0cHV0WzBdLm11bHRpQXNzZXRzISBhcyBDYXJkYW5vV2FzbS5NdWx0aUFzc2V0KVxuICAgICAgLmdldF9hc3NldChwb2xpY3lTY3JpcHRIYXNoLCBDYXJkYW5vV2FzbS5Bc3NldE5hbWUubmV3KEJ1ZmZlci5mcm9tKGFzY2lpRW5jb2RlZE5hbWUsICdoZXgnKSkpXG4gICAgICAudG9fc3RyKClcbiAgICAgIC5zaG91bGQuZXF1YWwocXVhbnRpdHkpO1xuXG4gICAgLy8gVmFsaWRhdGUgc2VuZGVyIGNoYW5nZSBvdXRwdXQgLSBzaG91bGQgaGF2ZSBmdWxsIHNlbmRlciBiYWxhbmNlICh0b2tlbnMgb25seSwgbm8gQURBIGRlZHVjdGlvbiBmb3IgcmVjZWl2ZXIpXG4gICAgY29uc3Qgc2VuZGVyQ2hhbmdlT3V0cHV0ID0gdHhEYXRhLm91dHB1dHMuZmlsdGVyKChvdXRwdXQpID0+IG91dHB1dC5hZGRyZXNzID09PSBzZW5kZXJBZGRyZXNzKTtcbiAgICBzZW5kZXJDaGFuZ2VPdXRwdXQubGVuZ3RoLnNob3VsZC5iZS5lcXVhbCgyKTtcblxuICAgIC8vIFZhbGlkYXRlIGZlZSBhZGRyZXNzIGNoYW5nZSBvdXRwdXQgLSBzaG91bGQgaGF2ZSByZW1haW5pbmcgQURBIGFmdGVyIGZlZXMgYW5kIG1pbiBBREEgZm9yIHJlY2VpdmVyXG4gICAgY29uc3QgZmVlQWRkcmVzc0NoYW5nZU91dHB1dCA9IHR4RGF0YS5vdXRwdXRzLmZpbHRlcigob3V0cHV0KSA9PiBvdXRwdXQuYWRkcmVzcyA9PT0gZmVlQWRkcmVzcyk7XG4gICAgZmVlQWRkcmVzc0NoYW5nZU91dHB1dC5sZW5ndGguc2hvdWxkLmVxdWFsKDEpO1xuICAgIC8vIEZlZSBhZGRyZXNzIGNoYW5nZSBzaG91bGQgbm90IGhhdmUgYW55IHRva2Vuc1xuICAgIHNob3VsZC5ub3QuZXhpc3QoZmVlQWRkcmVzc0NoYW5nZU91dHB1dFswXS5tdWx0aUFzc2V0cyk7XG5cbiAgICB0eC5nZXRGZWUuc2hvdWxkLmVxdWFsKCcxODI0ODUnKTsgLy8gRmVlIHdpdGggdHdvIHdpdG5lc3Nlc1xuICB9KTtcblxuICBpdChgc2hvdWxkIHJlYnVpbGQgYSBzcG9uc29yZWQgdHJhbnNhY3Rpb24gZnJvbSBoZXggd2l0aCBpc1JlYnVpbGQgZmxhZ2AsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBmZWVBZGRyZXNzID1cbiAgICAgICdhZGRyX3Rlc3QxcXoyZnh2MnVteWh0dGt4eXhwOHgwZGxwZHQzazZjd25nNXB4ajNqaHN5ZHplcjNqY3U1ZDhwczd6ZXgyazJ4dDN1cXhnanFubmo4M3dzOGxocm42NDhqanh0d3EyeXRqcXAnO1xuICAgIGNvbnN0IHF1YW50aXR5ID0gJzIwJztcbiAgICBjb25zdCBzZW5kZXJJbnB1dEJhbGFuY2UgPSA1MDAwMDAwO1xuICAgIGNvbnN0IGZlZUFkZHJlc3NJbnB1dEJhbGFuY2UgPSAyMDAwMDAwMDtcbiAgICBjb25zdCB0b3RhbEFzc2V0TGlzdCA9IHtcbiAgICAgIFtmaW5nZXJwcmludF06IHtcbiAgICAgICAgcXVhbnRpdHk6ICcxMDAnLFxuICAgICAgICBwb2xpY3lfaWQ6IHBvbGljeUlkLFxuICAgICAgICBhc3NldF9uYW1lOiBhc2NpaUVuY29kZWROYW1lLFxuICAgICAgfSxcbiAgICB9O1xuXG4gICAgLy8gU3RlcCAxOiBCdWlsZCB0aGUgaW5pdGlhbCBzcG9uc29yZWQgdHJhbnNhY3Rpb25cbiAgICBjb25zdCB0eEJ1aWxkZXIgPSBmYWN0b3J5LmdldFRyYW5zZmVyQnVpbGRlcigpO1xuICAgIHR4QnVpbGRlci5pbnB1dCh7XG4gICAgICB0cmFuc2FjdGlvbl9pZDogJzM2NzdlNzVjN2JhNjk5YmZkYzZjZDU3ZDQyZjI0NmY4NmY2M2FlZmQ3NjAyNTAwNmFjNzgzMTNmYWQyYmJhMjEnLFxuICAgICAgdHJhbnNhY3Rpb25faW5kZXg6IDEsXG4gICAgfSk7XG4gICAgdHhCdWlsZGVyLmlucHV0KHtcbiAgICAgIHRyYW5zYWN0aW9uX2lkOiAnMzY3N2U3NWM3YmE2OTliZmRjNmNkNTdkNDJmMjQ2Zjg2ZjYzYWVmZDc2MDI1MDA2YWM3ODMxM2ZhZDJiYmEyMicsXG4gICAgICB0cmFuc2FjdGlvbl9pbmRleDogMCxcbiAgICB9KTtcblxuICAgIHR4QnVpbGRlci5vdXRwdXQoe1xuICAgICAgYWRkcmVzczogcmVjZWl2ZXJBZGRyZXNzLFxuICAgICAgYW1vdW50OiAnMCcsXG4gICAgICBtdWx0aUFzc2V0czoge1xuICAgICAgICBhc3NldF9uYW1lOiBhc2NpaUVuY29kZWROYW1lLFxuICAgICAgICBwb2xpY3lfaWQ6IHBvbGljeUlkLFxuICAgICAgICBxdWFudGl0eSxcbiAgICAgICAgZmluZ2VycHJpbnQsXG4gICAgICB9LFxuICAgIH0pO1xuXG4gICAgdHhCdWlsZGVyLmNoYW5nZUFkZHJlc3Moc2VuZGVyQWRkcmVzcywgc2VuZGVySW5wdXRCYWxhbmNlLnRvU3RyaW5nKCksIHRvdGFsQXNzZXRMaXN0KTtcbiAgICB0eEJ1aWxkZXIuc3BvbnNvcnNoaXBJbmZvKHtcbiAgICAgIGZlZUFkZHJlc3M6IGZlZUFkZHJlc3MsXG4gICAgICBmZWVBZGRyZXNzSW5wdXRCYWxhbmNlOiBmZWVBZGRyZXNzSW5wdXRCYWxhbmNlLnRvU3RyaW5nKCksXG4gICAgfSk7XG4gICAgdHhCdWlsZGVyLnR0bCg4MDAwMDAwMDApO1xuICAgIHR4QnVpbGRlci5pc1Rva2VuVHJhbnNhY3Rpb24oKTtcbiAgICBjb25zdCBpbml0aWFsVHggPSAoYXdhaXQgdHhCdWlsZGVyLmJ1aWxkKCkpIGFzIFRyYW5zYWN0aW9uO1xuICAgIGNvbnN0IGluaXRpYWxGZWUgPSBpbml0aWFsVHguZ2V0RmVlO1xuICAgIGNvbnN0IGluaXRpYWxUeERhdGEgPSBpbml0aWFsVHgudG9Kc29uKCk7XG5cbiAgICAvLyBTdGVwIDI6IFJlYnVpbGQgd2l0aCBpc1JlYnVpbGQgPSB0cnVlXG4gICAgLy8gVGhpcyBzaW11bGF0ZXMgcmVidWlsZGluZyBmcm9tIHNjcmF0Y2ggYnV0IHdpdGggaXNSZWJ1aWxkIGZsYWcgdG8gYWRkIHNwb25zb3Igd2l0bmVzc1xuICAgIGNvbnN0IHJlYnVpbGRUeEJ1aWxkZXIgPSBmYWN0b3J5LmdldFRyYW5zZmVyQnVpbGRlcigpO1xuICAgIHJlYnVpbGRUeEJ1aWxkZXIuaW5wdXQoe1xuICAgICAgdHJhbnNhY3Rpb25faWQ6ICczNjc3ZTc1YzdiYTY5OWJmZGM2Y2Q1N2Q0MmYyNDZmODZmNjNhZWZkNzYwMjUwMDZhYzc4MzEzZmFkMmJiYTIxJyxcbiAgICAgIHRyYW5zYWN0aW9uX2luZGV4OiAxLFxuICAgIH0pO1xuICAgIHJlYnVpbGRUeEJ1aWxkZXIuaW5wdXQoe1xuICAgICAgdHJhbnNhY3Rpb25faWQ6ICczNjc3ZTc1YzdiYTY5OWJmZGM2Y2Q1N2Q0MmYyNDZmODZmNjNhZWZkNzYwMjUwMDZhYzc4MzEzZmFkMmJiYTIyJyxcbiAgICAgIHRyYW5zYWN0aW9uX2luZGV4OiAwLFxuICAgIH0pO1xuXG4gICAgcmVidWlsZFR4QnVpbGRlci5vdXRwdXQoe1xuICAgICAgYWRkcmVzczogcmVjZWl2ZXJBZGRyZXNzLFxuICAgICAgYW1vdW50OiAnMCcsXG4gICAgICBtdWx0aUFzc2V0czoge1xuICAgICAgICBhc3NldF9uYW1lOiBhc2NpaUVuY29kZWROYW1lLFxuICAgICAgICBwb2xpY3lfaWQ6IHBvbGljeUlkLFxuICAgICAgICBxdWFudGl0eSxcbiAgICAgICAgZmluZ2VycHJpbnQsXG4gICAgICB9LFxuICAgIH0pO1xuXG4gICAgcmVidWlsZFR4QnVpbGRlci5jaGFuZ2VBZGRyZXNzKHNlbmRlckFkZHJlc3MsIHNlbmRlcklucHV0QmFsYW5jZS50b1N0cmluZygpLCB0b3RhbEFzc2V0TGlzdCk7XG4gICAgcmVidWlsZFR4QnVpbGRlci5zcG9uc29yc2hpcEluZm8oe1xuICAgICAgZmVlQWRkcmVzczogZmVlQWRkcmVzcyxcbiAgICAgIGZlZUFkZHJlc3NJbnB1dEJhbGFuY2U6IGZlZUFkZHJlc3NJbnB1dEJhbGFuY2UudG9TdHJpbmcoKSxcbiAgICAgIGlzUmVidWlsZDogdHJ1ZSxcbiAgICB9KTtcbiAgICByZWJ1aWxkVHhCdWlsZGVyLnR0bCg4MDAwMDAwMDApO1xuICAgIHJlYnVpbGRUeEJ1aWxkZXIuaXNUb2tlblRyYW5zYWN0aW9uKCk7XG5cbiAgICBjb25zdCByZWJ1aWx0VHggPSAoYXdhaXQgcmVidWlsZFR4QnVpbGRlci5idWlsZCgpKSBhcyBUcmFuc2FjdGlvbjtcbiAgICBjb25zdCByZWJ1aWx0VHhEYXRhID0gcmVidWlsdFR4LnRvSnNvbigpO1xuXG4gICAgLy8gVmVyaWZ5IHRoZSByZWJ1aWx0IHRyYW5zYWN0aW9uIHByZXNlcnZlcyB0aGUgc2FtZSBzdHJ1Y3R1cmVcbiAgICByZWJ1aWx0VHhEYXRhLmlucHV0cy5sZW5ndGguc2hvdWxkLmVxdWFsKGluaXRpYWxUeERhdGEuaW5wdXRzLmxlbmd0aCk7XG4gICAgcmVidWlsdFR4RGF0YS5vdXRwdXRzLmxlbmd0aC5zaG91bGQuZXF1YWwoaW5pdGlhbFR4RGF0YS5vdXRwdXRzLmxlbmd0aCk7XG5cbiAgICAvLyBGZWUgc2hvdWxkIGJlIHByZXNlcnZlZCBmcm9tIHRoZSBvcmlnaW5hbCB0cmFuc2FjdGlvblxuICAgIHJlYnVpbHRUeC5nZXRGZWUuc2hvdWxkLmVxdWFsKGluaXRpYWxGZWUpO1xuXG4gICAgLy8gVmVyaWZ5IHJlY2VpdmVyIG91dHB1dCBpcyBwcmVzZXJ2ZWRcbiAgICBjb25zdCByZWNlaXZlck91dHB1dCA9IHJlYnVpbHRUeERhdGEub3V0cHV0cy5maWx0ZXIoKG91dHB1dCkgPT4gb3V0cHV0LmFkZHJlc3MgPT09IHJlY2VpdmVyQWRkcmVzcyk7XG4gICAgcmVjZWl2ZXJPdXRwdXQubGVuZ3RoLnNob3VsZC5lcXVhbCgxKTtcbiAgICByZWNlaXZlck91dHB1dFswXS5hbW91bnQuc2hvdWxkLmVxdWFsKCcxNTAwMDAwJyk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdBZGFUb2tlbiB2ZXJpZnlUcmFuc2FjdGlvbicsICgpID0+IHtcbiAgICBsZXQgYml0Z286IFRlc3RCaXRHb0FQSTtcbiAgICBsZXQgYWRhVG9rZW47XG5cbiAgICBiZWZvcmUoZnVuY3Rpb24gKCkge1xuICAgICAgYml0Z28gPSBUZXN0Qml0R28uZGVjb3JhdGUoQml0R29BUEksIHsgZW52OiAnbW9jaycgfSk7XG4gICAgICBiaXRnby5pbml0aWFsaXplVGVzdFZhcnMoKTtcbiAgICAgIGNvbnN0IHRva2VuQ29uZmlnID0ge1xuICAgICAgICB0eXBlOiAndGFkYTp3YXRlcicsXG4gICAgICAgIGNvaW46ICd0YWRhJyxcbiAgICAgICAgbmV0d29yazogJ1Rlc3RuZXQnIGFzIGNvbnN0LFxuICAgICAgICBuYW1lOiAnV0FURVInLFxuICAgICAgICBkZWNpbWFsUGxhY2VzOiAwLFxuICAgICAgICBwb2xpY3lJZDogcG9saWN5SWQsXG4gICAgICAgIGFzc2V0TmFtZTogbmFtZSwgLy8gQVNDSUkgJ1dBVEVSJywgbm90IGhleC1lbmNvZGVkXG4gICAgICAgIGNvbnRyYWN0QWRkcmVzczogYCR7cG9saWN5SWR9OiR7YXNjaWlFbmNvZGVkTmFtZX1gLFxuICAgICAgfTtcbiAgICAgIGFkYVRva2VuID0gbmV3IEFkYVRva2VuKGJpdGdvLCB0b2tlbkNvbmZpZyk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHZlcmlmeSBhIHRva2VuIHRyYW5zYWN0aW9uIHdpdGggY29ycmVjdCB0b2tlbiBhbW91bnQnLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCBxdWFudGl0eSA9ICcyMCc7XG4gICAgICBjb25zdCB0b3RhbElucHV0ID0gMjAwMDAwMDA7XG4gICAgICBjb25zdCB0b3RhbEFzc2V0TGlzdCA9IHtcbiAgICAgICAgW2ZpbmdlcnByaW50XToge1xuICAgICAgICAgIHF1YW50aXR5OiAnMTAwJyxcbiAgICAgICAgICBwb2xpY3lfaWQ6IHBvbGljeUlkLFxuICAgICAgICAgIGFzc2V0X25hbWU6IGFzY2lpRW5jb2RlZE5hbWUsXG4gICAgICAgIH0sXG4gICAgICB9O1xuXG4gICAgICBjb25zdCB0eEJ1aWxkZXIgPSBmYWN0b3J5LmdldFRyYW5zZmVyQnVpbGRlcigpO1xuICAgICAgdHhCdWlsZGVyLmlucHV0KHtcbiAgICAgICAgdHJhbnNhY3Rpb25faWQ6ICczNjc3ZTc1YzdiYTY5OWJmZGM2Y2Q1N2Q0MmYyNDZmODZmNjNhZWZkNzYwMjUwMDZhYzc4MzEzZmFkMmJiYTIxJyxcbiAgICAgICAgdHJhbnNhY3Rpb25faW5kZXg6IDEsXG4gICAgICB9KTtcblxuICAgICAgdHhCdWlsZGVyLm91dHB1dCh7XG4gICAgICAgIGFkZHJlc3M6IHJlY2VpdmVyQWRkcmVzcyxcbiAgICAgICAgYW1vdW50OiAnMCcsXG4gICAgICAgIG11bHRpQXNzZXRzOiB7XG4gICAgICAgICAgYXNzZXRfbmFtZTogYXNjaWlFbmNvZGVkTmFtZSxcbiAgICAgICAgICBwb2xpY3lfaWQ6IHBvbGljeUlkLFxuICAgICAgICAgIHF1YW50aXR5LFxuICAgICAgICAgIGZpbmdlcnByaW50LFxuICAgICAgICB9LFxuICAgICAgfSk7XG5cbiAgICAgIHR4QnVpbGRlci5jaGFuZ2VBZGRyZXNzKHNlbmRlckFkZHJlc3MsIHRvdGFsSW5wdXQudG9TdHJpbmcoKSwgdG90YWxBc3NldExpc3QpO1xuICAgICAgdHhCdWlsZGVyLnR0bCg4MDAwMDAwMDApO1xuICAgICAgdHhCdWlsZGVyLmlzVG9rZW5UcmFuc2FjdGlvbigpO1xuICAgICAgY29uc3QgdHggPSAoYXdhaXQgdHhCdWlsZGVyLmJ1aWxkKCkpIGFzIFRyYW5zYWN0aW9uO1xuICAgICAgY29uc3QgdHhIZXggPSB0eC50b0Jyb2FkY2FzdEZvcm1hdCgpO1xuXG4gICAgICAvLyBWZXJpZnkgdHJhbnNhY3Rpb24gd2l0aCBjb3JyZWN0IHRva2VuIGFtb3VudFxuICAgICAgY29uc3QgdHhQYXJhbXMgPSB7XG4gICAgICAgIHJlY2lwaWVudHM6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBhZGRyZXNzOiByZWNlaXZlckFkZHJlc3MsXG4gICAgICAgICAgICBhbW91bnQ6IHF1YW50aXR5LCAvLyBUb2tlbiBhbW91bnQsIG5vdCBBREEgYW1vdW50XG4gICAgICAgICAgfSxcbiAgICAgICAgXSxcbiAgICAgIH07XG5cbiAgICAgIGNvbnN0IHR4UHJlYnVpbGQgPSB7IHR4SGV4IH07XG4gICAgICBjb25zdCBtb2NrV2FsbGV0ID0geyBjb2luU3BlY2lmaWM6ICgpID0+ICh7IGJhc2VBZGRyZXNzOiBzZW5kZXJBZGRyZXNzIH0pIH07XG4gICAgICBjb25zdCBpc1ZlcmlmaWVkID0gYXdhaXQgYWRhVG9rZW4udmVyaWZ5VHJhbnNhY3Rpb24oeyB0eFBhcmFtcywgdHhQcmVidWlsZCwgd2FsbGV0OiBtb2NrV2FsbGV0IGFzIGFueSB9KTtcbiAgICAgIGlzVmVyaWZpZWQuc2hvdWxkLmVxdWFsKHRydWUpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBmYWlsIHRvIHZlcmlmeSBhIHRva2VuIHRyYW5zYWN0aW9uIHdpdGggaW5jb3JyZWN0IHRva2VuIGFtb3VudCcsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IHF1YW50aXR5ID0gJzIwJztcbiAgICAgIGNvbnN0IHRvdGFsSW5wdXQgPSAyMDAwMDAwMDtcbiAgICAgIGNvbnN0IHRvdGFsQXNzZXRMaXN0ID0ge1xuICAgICAgICBbZmluZ2VycHJpbnRdOiB7XG4gICAgICAgICAgcXVhbnRpdHk6ICcxMDAnLFxuICAgICAgICAgIHBvbGljeV9pZDogcG9saWN5SWQsXG4gICAgICAgICAgYXNzZXRfbmFtZTogYXNjaWlFbmNvZGVkTmFtZSxcbiAgICAgICAgfSxcbiAgICAgIH07XG5cbiAgICAgIGNvbnN0IHR4QnVpbGRlciA9IGZhY3RvcnkuZ2V0VHJhbnNmZXJCdWlsZGVyKCk7XG4gICAgICB0eEJ1aWxkZXIuaW5wdXQoe1xuICAgICAgICB0cmFuc2FjdGlvbl9pZDogJzM2NzdlNzVjN2JhNjk5YmZkYzZjZDU3ZDQyZjI0NmY4NmY2M2FlZmQ3NjAyNTAwNmFjNzgzMTNmYWQyYmJhMjEnLFxuICAgICAgICB0cmFuc2FjdGlvbl9pbmRleDogMSxcbiAgICAgIH0pO1xuXG4gICAgICB0eEJ1aWxkZXIub3V0cHV0KHtcbiAgICAgICAgYWRkcmVzczogcmVjZWl2ZXJBZGRyZXNzLFxuICAgICAgICBhbW91bnQ6ICcwJyxcbiAgICAgICAgbXVsdGlBc3NldHM6IHtcbiAgICAgICAgICBhc3NldF9uYW1lOiBhc2NpaUVuY29kZWROYW1lLFxuICAgICAgICAgIHBvbGljeV9pZDogcG9saWN5SWQsXG4gICAgICAgICAgcXVhbnRpdHksXG4gICAgICAgICAgZmluZ2VycHJpbnQsXG4gICAgICAgIH0sXG4gICAgICB9KTtcblxuICAgICAgdHhCdWlsZGVyLmNoYW5nZUFkZHJlc3Moc2VuZGVyQWRkcmVzcywgdG90YWxJbnB1dC50b1N0cmluZygpLCB0b3RhbEFzc2V0TGlzdCk7XG4gICAgICB0eEJ1aWxkZXIudHRsKDgwMDAwMDAwMCk7XG4gICAgICB0eEJ1aWxkZXIuaXNUb2tlblRyYW5zYWN0aW9uKCk7XG4gICAgICBjb25zdCB0eCA9IChhd2FpdCB0eEJ1aWxkZXIuYnVpbGQoKSkgYXMgVHJhbnNhY3Rpb247XG4gICAgICBjb25zdCB0eEhleCA9IHR4LnRvQnJvYWRjYXN0Rm9ybWF0KCk7XG5cbiAgICAgIC8vIFZlcmlmeSB0cmFuc2FjdGlvbiB3aXRoIFdST05HIHRva2VuIGFtb3VudCAoc2hvdWxkIGZhaWwpXG4gICAgICBjb25zdCB0eFBhcmFtcyA9IHtcbiAgICAgICAgcmVjaXBpZW50czogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGFkZHJlc3M6IHJlY2VpdmVyQWRkcmVzcyxcbiAgICAgICAgICAgIGFtb3VudDogJzk5OScsIC8vIFdyb25nIGFtb3VudFxuICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICB9O1xuXG4gICAgICBjb25zdCB0eFByZWJ1aWxkID0geyB0eEhleCB9O1xuICAgICAgY29uc3QgbW9ja1dhbGxldCA9IHsgY29pblNwZWNpZmljOiAoKSA9PiAoeyBiYXNlQWRkcmVzczogc2VuZGVyQWRkcmVzcyB9KSB9O1xuICAgICAgYXdhaXQgYWRhVG9rZW5cbiAgICAgICAgLnZlcmlmeVRyYW5zYWN0aW9uKHsgdHhQYXJhbXMsIHR4UHJlYnVpbGQsIHdhbGxldDogbW9ja1dhbGxldCBhcyBhbnkgfSlcbiAgICAgICAgLnNob3VsZC5iZS5yZWplY3RlZFdpdGgoJ2Nhbm5vdCBmaW5kIHJlY2lwaWVudCBpbiBleHBlY3RlZCBvdXRwdXQnKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgZmFpbCB0byB2ZXJpZnkgd2hlbiBhZGRyZXNzIGRvZXMgbm90IG1hdGNoJywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgcXVhbnRpdHkgPSAnMjAnO1xuICAgICAgY29uc3QgdG90YWxJbnB1dCA9IDIwMDAwMDAwO1xuICAgICAgY29uc3QgdG90YWxBc3NldExpc3QgPSB7XG4gICAgICAgIFtmaW5nZXJwcmludF06IHtcbiAgICAgICAgICBxdWFudGl0eTogJzEwMCcsXG4gICAgICAgICAgcG9saWN5X2lkOiBwb2xpY3lJZCxcbiAgICAgICAgICBhc3NldF9uYW1lOiBhc2NpaUVuY29kZWROYW1lLFxuICAgICAgICB9LFxuICAgICAgfTtcblxuICAgICAgY29uc3QgdHhCdWlsZGVyID0gZmFjdG9yeS5nZXRUcmFuc2ZlckJ1aWxkZXIoKTtcbiAgICAgIHR4QnVpbGRlci5pbnB1dCh7XG4gICAgICAgIHRyYW5zYWN0aW9uX2lkOiAnMzY3N2U3NWM3YmE2OTliZmRjNmNkNTdkNDJmMjQ2Zjg2ZjYzYWVmZDc2MDI1MDA2YWM3ODMxM2ZhZDJiYmEyMScsXG4gICAgICAgIHRyYW5zYWN0aW9uX2luZGV4OiAxLFxuICAgICAgfSk7XG5cbiAgICAgIHR4QnVpbGRlci5vdXRwdXQoe1xuICAgICAgICBhZGRyZXNzOiByZWNlaXZlckFkZHJlc3MsXG4gICAgICAgIGFtb3VudDogJzAnLFxuICAgICAgICBtdWx0aUFzc2V0czoge1xuICAgICAgICAgIGFzc2V0X25hbWU6IGFzY2lpRW5jb2RlZE5hbWUsXG4gICAgICAgICAgcG9saWN5X2lkOiBwb2xpY3lJZCxcbiAgICAgICAgICBxdWFudGl0eSxcbiAgICAgICAgICBmaW5nZXJwcmludCxcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuXG4gICAgICB0eEJ1aWxkZXIuY2hhbmdlQWRkcmVzcyhzZW5kZXJBZGRyZXNzLCB0b3RhbElucHV0LnRvU3RyaW5nKCksIHRvdGFsQXNzZXRMaXN0KTtcbiAgICAgIHR4QnVpbGRlci50dGwoODAwMDAwMDAwKTtcbiAgICAgIHR4QnVpbGRlci5pc1Rva2VuVHJhbnNhY3Rpb24oKTtcbiAgICAgIGNvbnN0IHR4ID0gKGF3YWl0IHR4QnVpbGRlci5idWlsZCgpKSBhcyBUcmFuc2FjdGlvbjtcbiAgICAgIGNvbnN0IHR4SGV4ID0gdHgudG9Ccm9hZGNhc3RGb3JtYXQoKTtcblxuICAgICAgLy8gVmVyaWZ5IHdpdGggd3JvbmcgYWRkcmVzcyAoc2hvdWxkIGZhaWwpXG4gICAgICBjb25zdCB0eFBhcmFtcyA9IHtcbiAgICAgICAgcmVjaXBpZW50czogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGFkZHJlc3M6XG4gICAgICAgICAgICAgICdhZGRyX3Rlc3QxcXFhODZlM2Q3bGZwd3UwazJyaGp6NzZlY21meGRyNzRzOWtmOXlmY3A1aGo1dm1uaDZ4Y2NqY2Nscms4anRhdzlqZ2V1eTk5cDJuOHNtdGRweWxteTQ1cWpqZnNmbXAzZzYnLFxuICAgICAgICAgICAgYW1vdW50OiBxdWFudGl0eSxcbiAgICAgICAgICB9LFxuICAgICAgICBdLFxuICAgICAgfTtcblxuICAgICAgY29uc3QgdHhQcmVidWlsZCA9IHsgdHhIZXggfTtcbiAgICAgIGNvbnN0IG1vY2tXYWxsZXQgPSB7IGNvaW5TcGVjaWZpYzogKCkgPT4gKHsgYmFzZUFkZHJlc3M6IHNlbmRlckFkZHJlc3MgfSkgfTtcbiAgICAgIGF3YWl0IGFkYVRva2VuXG4gICAgICAgIC52ZXJpZnlUcmFuc2FjdGlvbih7IHR4UGFyYW1zLCB0eFByZWJ1aWxkLCB3YWxsZXQ6IG1vY2tXYWxsZXQgYXMgYW55IH0pXG4gICAgICAgIC5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKCdjYW5ub3QgZmluZCByZWNpcGllbnQgaW4gZXhwZWN0ZWQgb3V0cHV0Jyk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHZlcmlmeSB0cmFuc2FjdGlvbiB3aGVuIHBvbGljeUlkIGhhcyBjb25jYXRlbmF0ZWQgYXNzZXROYW1lIChjcnlwdG8gY29tcGFyZSBmb3JtYXQpJywgYXN5bmMgKCkgPT4ge1xuICAgICAgLy8gVGhpcyB0ZXN0cyB0aGUgY2FzZSB3aGVyZSBwb2xpY3lJZCBpbiB0b2tlbkNvbmZpZyBjb250YWlucyBwb2xpY3lJZCArIGFzY2lpRW5jb2RlZEFzc2V0TmFtZVxuICAgICAgLy8gd2hpY2ggaXMgY29uc2lzdGVudCB3aXRoIGNyeXB0byBjb21wYXJlIGZvcm1hdFxuICAgICAgY29uc3QgY29uY2F0ZW5hdGVkUG9saWN5SWQgPSBwb2xpY3lJZCArIGFzY2lpRW5jb2RlZE5hbWU7IC8vIGUuZy4sICdlMTZjMmRjOGFlOTM3ZThkMzc5MGM3ZmQ3MTY4ZDdiOTk0NjIxYmExNGNhMTE0MTVmMzlmZWQ3MjU3NDE1NDQ1NTInXG5cbiAgICAgIGNvbnN0IHRva2VuQ29uZmlnV2l0aENvbmNhdGVuYXRlZFBvbGljeUlkID0ge1xuICAgICAgICB0eXBlOiAndGFkYTp3YXRlcicsXG4gICAgICAgIGNvaW46ICd0YWRhJyxcbiAgICAgICAgbmV0d29yazogJ1Rlc3RuZXQnIGFzIGNvbnN0LFxuICAgICAgICBuYW1lOiAnV0FURVInLFxuICAgICAgICBkZWNpbWFsUGxhY2VzOiAwLFxuICAgICAgICBwb2xpY3lJZDogY29uY2F0ZW5hdGVkUG9saWN5SWQsIC8vIHBvbGljeUlkICsgYXNzZXROYW1lIGhleFxuICAgICAgICBhc3NldE5hbWU6IG5hbWUsIC8vIEFTQ0lJIG5hbWUgJ1dBVEVSJyAobm90IGhleCBlbmNvZGVkKVxuICAgICAgICBjb250cmFjdEFkZHJlc3M6IGAke3BvbGljeUlkfToke2FzY2lpRW5jb2RlZE5hbWV9YCxcbiAgICAgIH07XG4gICAgICBjb25zdCBhZGFUb2tlbldpdGhDb25jYXRlbmF0ZWRQb2xpY3lJZCA9IG5ldyBBZGFUb2tlbihiaXRnbywgdG9rZW5Db25maWdXaXRoQ29uY2F0ZW5hdGVkUG9saWN5SWQpO1xuXG4gICAgICBjb25zdCBxdWFudGl0eSA9ICcyMCc7XG4gICAgICBjb25zdCB0b3RhbElucHV0ID0gMjAwMDAwMDA7XG4gICAgICBjb25zdCB0b3RhbEFzc2V0TGlzdCA9IHtcbiAgICAgICAgW2ZpbmdlcnByaW50XToge1xuICAgICAgICAgIHF1YW50aXR5OiAnMTAwJyxcbiAgICAgICAgICBwb2xpY3lfaWQ6IHBvbGljeUlkLFxuICAgICAgICAgIGFzc2V0X25hbWU6IGFzY2lpRW5jb2RlZE5hbWUsXG4gICAgICAgIH0sXG4gICAgICB9O1xuXG4gICAgICBjb25zdCB0eEJ1aWxkZXIgPSBmYWN0b3J5LmdldFRyYW5zZmVyQnVpbGRlcigpO1xuICAgICAgdHhCdWlsZGVyLmlucHV0KHtcbiAgICAgICAgdHJhbnNhY3Rpb25faWQ6ICczNjc3ZTc1YzdiYTY5OWJmZGM2Y2Q1N2Q0MmYyNDZmODZmNjNhZWZkNzYwMjUwMDZhYzc4MzEzZmFkMmJiYTIxJyxcbiAgICAgICAgdHJhbnNhY3Rpb25faW5kZXg6IDEsXG4gICAgICB9KTtcblxuICAgICAgdHhCdWlsZGVyLm91dHB1dCh7XG4gICAgICAgIGFkZHJlc3M6IHJlY2VpdmVyQWRkcmVzcyxcbiAgICAgICAgYW1vdW50OiAnMCcsXG4gICAgICAgIG11bHRpQXNzZXRzOiB7XG4gICAgICAgICAgYXNzZXRfbmFtZTogYXNjaWlFbmNvZGVkTmFtZSxcbiAgICAgICAgICBwb2xpY3lfaWQ6IHBvbGljeUlkLFxuICAgICAgICAgIHF1YW50aXR5LFxuICAgICAgICAgIGZpbmdlcnByaW50LFxuICAgICAgICB9LFxuICAgICAgfSk7XG5cbiAgICAgIHR4QnVpbGRlci5jaGFuZ2VBZGRyZXNzKHNlbmRlckFkZHJlc3MsIHRvdGFsSW5wdXQudG9TdHJpbmcoKSwgdG90YWxBc3NldExpc3QpO1xuICAgICAgdHhCdWlsZGVyLnR0bCg4MDAwMDAwMDApO1xuICAgICAgdHhCdWlsZGVyLmlzVG9rZW5UcmFuc2FjdGlvbigpO1xuICAgICAgY29uc3QgdHggPSAoYXdhaXQgdHhCdWlsZGVyLmJ1aWxkKCkpIGFzIFRyYW5zYWN0aW9uO1xuICAgICAgY29uc3QgdHhIZXggPSB0eC50b0Jyb2FkY2FzdEZvcm1hdCgpO1xuXG4gICAgICAvLyBWZXJpZnkgdHJhbnNhY3Rpb24gLSB0aGUgdmVyaWZ5VHJhbnNhY3Rpb24gc2hvdWxkIHN0cmlwIHRoZSBhc3NldE5hbWUgZnJvbSBwb2xpY3lJZFxuICAgICAgY29uc3QgdHhQYXJhbXMgPSB7XG4gICAgICAgIHJlY2lwaWVudHM6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBhZGRyZXNzOiByZWNlaXZlckFkZHJlc3MsXG4gICAgICAgICAgICBhbW91bnQ6IHF1YW50aXR5LFxuICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICB9O1xuXG4gICAgICBjb25zdCB0eFByZWJ1aWxkID0geyB0eEhleCB9O1xuICAgICAgY29uc3QgbW9ja1dhbGxldCA9IHsgY29pblNwZWNpZmljOiAoKSA9PiAoeyBiYXNlQWRkcmVzczogc2VuZGVyQWRkcmVzcyB9KSB9O1xuICAgICAgY29uc3QgaXNWZXJpZmllZCA9IGF3YWl0IGFkYVRva2VuV2l0aENvbmNhdGVuYXRlZFBvbGljeUlkLnZlcmlmeVRyYW5zYWN0aW9uKHtcbiAgICAgICAgdHhQYXJhbXMsXG4gICAgICAgIHR4UHJlYnVpbGQsXG4gICAgICAgIHdhbGxldDogbW9ja1dhbGxldCBhcyBhbnksXG4gICAgICB9KTtcbiAgICAgIGlzVmVyaWZpZWQuc2hvdWxkLmVxdWFsKHRydWUpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCB2ZXJpZnkgdHJhbnNhY3Rpb24gd2l0aCBwb2xpY3lJZCB0aGF0IGRvZXMgbm90IGhhdmUgY29uY2F0ZW5hdGVkIGFzc2V0TmFtZScsIGFzeW5jICgpID0+IHtcbiAgICAgIC8vIFRoaXMgdGVzdHMgdGhlIGNhc2Ugd2hlcmUgcG9saWN5SWQgaXMganVzdCB0aGUgMjgtYnl0ZSBwb2xpY3kgSUQgKG5vIGFzc2V0TmFtZSBhcHBlbmRlZClcbiAgICAgIGNvbnN0IHRva2VuQ29uZmlnV2l0aFBsYWluUG9saWN5SWQgPSB7XG4gICAgICAgIHR5cGU6ICd0YWRhOndhdGVyJyxcbiAgICAgICAgY29pbjogJ3RhZGEnLFxuICAgICAgICBuZXR3b3JrOiAnVGVzdG5ldCcgYXMgY29uc3QsXG4gICAgICAgIG5hbWU6ICdXQVRFUicsXG4gICAgICAgIGRlY2ltYWxQbGFjZXM6IDAsXG4gICAgICAgIHBvbGljeUlkOiBwb2xpY3lJZCwgLy8gSnVzdCB0aGUgcG9saWN5IElEIHdpdGhvdXQgYXNzZXROYW1lXG4gICAgICAgIGFzc2V0TmFtZTogbmFtZSwgLy8gQVNDSUkgbmFtZSAnV0FURVInXG4gICAgICAgIGNvbnRyYWN0QWRkcmVzczogYCR7cG9saWN5SWR9OiR7YXNjaWlFbmNvZGVkTmFtZX1gLFxuICAgICAgfTtcbiAgICAgIGNvbnN0IGFkYVRva2VuV2l0aFBsYWluUG9saWN5SWQgPSBuZXcgQWRhVG9rZW4oYml0Z28sIHRva2VuQ29uZmlnV2l0aFBsYWluUG9saWN5SWQpO1xuXG4gICAgICBjb25zdCBxdWFudGl0eSA9ICcyMCc7XG4gICAgICBjb25zdCB0b3RhbElucHV0ID0gMjAwMDAwMDA7XG4gICAgICBjb25zdCB0b3RhbEFzc2V0TGlzdCA9IHtcbiAgICAgICAgW2ZpbmdlcnByaW50XToge1xuICAgICAgICAgIHF1YW50aXR5OiAnMTAwJyxcbiAgICAgICAgICBwb2xpY3lfaWQ6IHBvbGljeUlkLFxuICAgICAgICAgIGFzc2V0X25hbWU6IGFzY2lpRW5jb2RlZE5hbWUsXG4gICAgICAgIH0sXG4gICAgICB9O1xuXG4gICAgICBjb25zdCB0eEJ1aWxkZXIgPSBmYWN0b3J5LmdldFRyYW5zZmVyQnVpbGRlcigpO1xuICAgICAgdHhCdWlsZGVyLmlucHV0KHtcbiAgICAgICAgdHJhbnNhY3Rpb25faWQ6ICczNjc3ZTc1YzdiYTY5OWJmZGM2Y2Q1N2Q0MmYyNDZmODZmNjNhZWZkNzYwMjUwMDZhYzc4MzEzZmFkMmJiYTIxJyxcbiAgICAgICAgdHJhbnNhY3Rpb25faW5kZXg6IDEsXG4gICAgICB9KTtcblxuICAgICAgdHhCdWlsZGVyLm91dHB1dCh7XG4gICAgICAgIGFkZHJlc3M6IHJlY2VpdmVyQWRkcmVzcyxcbiAgICAgICAgYW1vdW50OiAnMCcsXG4gICAgICAgIG11bHRpQXNzZXRzOiB7XG4gICAgICAgICAgYXNzZXRfbmFtZTogYXNjaWlFbmNvZGVkTmFtZSxcbiAgICAgICAgICBwb2xpY3lfaWQ6IHBvbGljeUlkLFxuICAgICAgICAgIHF1YW50aXR5LFxuICAgICAgICAgIGZpbmdlcnByaW50LFxuICAgICAgICB9LFxuICAgICAgfSk7XG5cbiAgICAgIHR4QnVpbGRlci5jaGFuZ2VBZGRyZXNzKHNlbmRlckFkZHJlc3MsIHRvdGFsSW5wdXQudG9TdHJpbmcoKSwgdG90YWxBc3NldExpc3QpO1xuICAgICAgdHhCdWlsZGVyLnR0bCg4MDAwMDAwMDApO1xuICAgICAgdHhCdWlsZGVyLmlzVG9rZW5UcmFuc2FjdGlvbigpO1xuICAgICAgY29uc3QgdHggPSAoYXdhaXQgdHhCdWlsZGVyLmJ1aWxkKCkpIGFzIFRyYW5zYWN0aW9uO1xuICAgICAgY29uc3QgdHhIZXggPSB0eC50b0Jyb2FkY2FzdEZvcm1hdCgpO1xuXG4gICAgICAvLyBWZXJpZnkgdHJhbnNhY3Rpb24gLSBzaG91bGQgd29yayB3aXRoIHBsYWluIHBvbGljeUlkIGFzIHdlbGxcbiAgICAgIGNvbnN0IHR4UGFyYW1zID0ge1xuICAgICAgICByZWNpcGllbnRzOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgYWRkcmVzczogcmVjZWl2ZXJBZGRyZXNzLFxuICAgICAgICAgICAgYW1vdW50OiBxdWFudGl0eSxcbiAgICAgICAgICB9LFxuICAgICAgICBdLFxuICAgICAgfTtcblxuICAgICAgY29uc3QgdHhQcmVidWlsZCA9IHsgdHhIZXggfTtcbiAgICAgIGNvbnN0IG1vY2tXYWxsZXQgPSB7IGNvaW5TcGVjaWZpYzogKCkgPT4gKHsgYmFzZUFkZHJlc3M6IHNlbmRlckFkZHJlc3MgfSkgfTtcbiAgICAgIGNvbnN0IGlzVmVyaWZpZWQgPSBhd2FpdCBhZGFUb2tlbldpdGhQbGFpblBvbGljeUlkLnZlcmlmeVRyYW5zYWN0aW9uKHtcbiAgICAgICAgdHhQYXJhbXMsXG4gICAgICAgIHR4UHJlYnVpbGQsXG4gICAgICAgIHdhbGxldDogbW9ja1dhbGxldCBhcyBhbnksXG4gICAgICB9KTtcbiAgICAgIGlzVmVyaWZpZWQuc2hvdWxkLmVxdWFsKHRydWUpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCB2ZXJpZnkgdG9rZW4gY29uc29saWRhdGlvbiB0cmFuc2FjdGlvbiB3aGVuIGFsbCBvdXRwdXRzIGdvIHRvIGJhc2UgYWRkcmVzcycsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IHF1YW50aXR5ID0gJzEwMCc7XG4gICAgICBjb25zdCB0b3RhbElucHV0ID0gMjAwMDAwMDA7XG4gICAgICBjb25zdCB0b3RhbEFzc2V0TGlzdCA9IHtcbiAgICAgICAgW2ZpbmdlcnByaW50XToge1xuICAgICAgICAgIHF1YW50aXR5OiAnMTAwJyxcbiAgICAgICAgICBwb2xpY3lfaWQ6IHBvbGljeUlkLFxuICAgICAgICAgIGFzc2V0X25hbWU6IGFzY2lpRW5jb2RlZE5hbWUsXG4gICAgICAgIH0sXG4gICAgICB9O1xuXG4gICAgICAvLyBCdWlsZCBhIGNvbnNvbGlkYXRpb24gdHJhbnNhY3Rpb24gLSBhbGwgb3V0cHV0cyBnbyB0byBzZW5kZXIgKGJhc2UpIGFkZHJlc3NcbiAgICAgIGNvbnN0IHR4QnVpbGRlciA9IGZhY3RvcnkuZ2V0VHJhbnNmZXJCdWlsZGVyKCk7XG4gICAgICB0eEJ1aWxkZXIuaW5wdXQoe1xuICAgICAgICB0cmFuc2FjdGlvbl9pZDogJzM2NzdlNzVjN2JhNjk5YmZkYzZjZDU3ZDQyZjI0NmY4NmY2M2FlZmQ3NjAyNTAwNmFjNzgzMTNmYWQyYmJhMjEnLFxuICAgICAgICB0cmFuc2FjdGlvbl9pbmRleDogMSxcbiAgICAgIH0pO1xuXG4gICAgICAvLyBGb3IgY29uc29saWRhdGlvbiwgdG9rZW5zIGdvIGJhY2sgdG8gdGhlIHNlbmRlcidzIGJhc2UgYWRkcmVzc1xuICAgICAgdHhCdWlsZGVyLm91dHB1dCh7XG4gICAgICAgIGFkZHJlc3M6IHNlbmRlckFkZHJlc3MsXG4gICAgICAgIGFtb3VudDogJzAnLFxuICAgICAgICBtdWx0aUFzc2V0czoge1xuICAgICAgICAgIGFzc2V0X25hbWU6IGFzY2lpRW5jb2RlZE5hbWUsXG4gICAgICAgICAgcG9saWN5X2lkOiBwb2xpY3lJZCxcbiAgICAgICAgICBxdWFudGl0eSxcbiAgICAgICAgICBmaW5nZXJwcmludCxcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuXG4gICAgICB0eEJ1aWxkZXIuY2hhbmdlQWRkcmVzcyhzZW5kZXJBZGRyZXNzLCB0b3RhbElucHV0LnRvU3RyaW5nKCksIHRvdGFsQXNzZXRMaXN0KTtcbiAgICAgIHR4QnVpbGRlci50dGwoODAwMDAwMDAwKTtcbiAgICAgIHR4QnVpbGRlci5pc1Rva2VuVHJhbnNhY3Rpb24oKTtcbiAgICAgIGNvbnN0IHR4ID0gKGF3YWl0IHR4QnVpbGRlci5idWlsZCgpKSBhcyBUcmFuc2FjdGlvbjtcbiAgICAgIGNvbnN0IHR4SGV4ID0gdHgudG9Ccm9hZGNhc3RGb3JtYXQoKTtcblxuICAgICAgLy8gTW9jayB3YWxsZXQgd2l0aCBjb2luU3BlY2lmaWMgcmV0dXJuaW5nIGJhc2UgYWRkcmVzc1xuICAgICAgY29uc3QgbW9ja1dhbGxldCA9IHtcbiAgICAgICAgY29pblNwZWNpZmljOiAoKSA9PiAoe1xuICAgICAgICAgIGJhc2VBZGRyZXNzOiBzZW5kZXJBZGRyZXNzLFxuICAgICAgICB9KSxcbiAgICAgIH07XG5cbiAgICAgIC8vIFZlcmlmeSBjb25zb2xpZGF0aW9uIHRyYW5zYWN0aW9uIC0gbm8gcmVjaXBpZW50cywgYnV0IGNvbnNvbGlkYXRpb25Ub0Jhc2VBZGRyZXNzIGlzIHRydWVcbiAgICAgIGNvbnN0IHR4UGFyYW1zID0ge1xuICAgICAgICByZWNpcGllbnRzOiB1bmRlZmluZWQsXG4gICAgICB9O1xuXG4gICAgICBjb25zdCB0eFByZWJ1aWxkID0geyB0eEhleCB9O1xuICAgICAgY29uc3QgdmVyaWZpY2F0aW9uID0geyBjb25zb2xpZGF0aW9uVG9CYXNlQWRkcmVzczogdHJ1ZSB9O1xuXG4gICAgICBjb25zdCBpc1ZlcmlmaWVkID0gYXdhaXQgYWRhVG9rZW4udmVyaWZ5VHJhbnNhY3Rpb24oe1xuICAgICAgICB0eFBhcmFtcyxcbiAgICAgICAgdHhQcmVidWlsZCxcbiAgICAgICAgdmVyaWZpY2F0aW9uLFxuICAgICAgICB3YWxsZXQ6IG1vY2tXYWxsZXQgYXMgYW55LFxuICAgICAgfSk7XG4gICAgICBpc1ZlcmlmaWVkLnNob3VsZC5lcXVhbCh0cnVlKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgZmFpbCB0b2tlbiBjb25zb2xpZGF0aW9uIHdoZW4gb3V0cHV0IGFkZHJlc3MgZG9lcyBub3QgbWF0Y2ggYmFzZSBhZGRyZXNzJywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgcXVhbnRpdHkgPSAnMTAwJztcbiAgICAgIGNvbnN0IHRvdGFsSW5wdXQgPSAyMDAwMDAwMDtcbiAgICAgIGNvbnN0IHRvdGFsQXNzZXRMaXN0ID0ge1xuICAgICAgICBbZmluZ2VycHJpbnRdOiB7XG4gICAgICAgICAgcXVhbnRpdHk6ICcxMDAnLFxuICAgICAgICAgIHBvbGljeV9pZDogcG9saWN5SWQsXG4gICAgICAgICAgYXNzZXRfbmFtZTogYXNjaWlFbmNvZGVkTmFtZSxcbiAgICAgICAgfSxcbiAgICAgIH07XG5cbiAgICAgIC8vIEJ1aWxkIGEgdHJhbnNhY3Rpb24gd2l0aCBvdXRwdXQgdG8gcmVjZWl2ZXIgKG5vdCBiYXNlIGFkZHJlc3MpXG4gICAgICBjb25zdCB0eEJ1aWxkZXIgPSBmYWN0b3J5LmdldFRyYW5zZmVyQnVpbGRlcigpO1xuICAgICAgdHhCdWlsZGVyLmlucHV0KHtcbiAgICAgICAgdHJhbnNhY3Rpb25faWQ6ICczNjc3ZTc1YzdiYTY5OWJmZGM2Y2Q1N2Q0MmYyNDZmODZmNjNhZWZkNzYwMjUwMDZhYzc4MzEzZmFkMmJiYTIxJyxcbiAgICAgICAgdHJhbnNhY3Rpb25faW5kZXg6IDEsXG4gICAgICB9KTtcblxuICAgICAgdHhCdWlsZGVyLm91dHB1dCh7XG4gICAgICAgIGFkZHJlc3M6IHJlY2VpdmVyQWRkcmVzcywgLy8gT3V0cHV0IGdvZXMgdG8gcmVjZWl2ZXIsIG5vdCBiYXNlIGFkZHJlc3NcbiAgICAgICAgYW1vdW50OiAnMCcsXG4gICAgICAgIG11bHRpQXNzZXRzOiB7XG4gICAgICAgICAgYXNzZXRfbmFtZTogYXNjaWlFbmNvZGVkTmFtZSxcbiAgICAgICAgICBwb2xpY3lfaWQ6IHBvbGljeUlkLFxuICAgICAgICAgIHF1YW50aXR5LFxuICAgICAgICAgIGZpbmdlcnByaW50LFxuICAgICAgICB9LFxuICAgICAgfSk7XG5cbiAgICAgIHR4QnVpbGRlci5jaGFuZ2VBZGRyZXNzKHNlbmRlckFkZHJlc3MsIHRvdGFsSW5wdXQudG9TdHJpbmcoKSwgdG90YWxBc3NldExpc3QpO1xuICAgICAgdHhCdWlsZGVyLnR0bCg4MDAwMDAwMDApO1xuICAgICAgdHhCdWlsZGVyLmlzVG9rZW5UcmFuc2FjdGlvbigpO1xuICAgICAgY29uc3QgdHggPSAoYXdhaXQgdHhCdWlsZGVyLmJ1aWxkKCkpIGFzIFRyYW5zYWN0aW9uO1xuICAgICAgY29uc3QgdHhIZXggPSB0eC50b0Jyb2FkY2FzdEZvcm1hdCgpO1xuXG4gICAgICAvLyBNb2NrIHdhbGxldCB3aXRoIGRpZmZlcmVudCBiYXNlIGFkZHJlc3NcbiAgICAgIGNvbnN0IG1vY2tXYWxsZXQgPSB7XG4gICAgICAgIGNvaW5TcGVjaWZpYzogKCkgPT4gKHtcbiAgICAgICAgICBiYXNlQWRkcmVzczogc2VuZGVyQWRkcmVzcywgLy8gQmFzZSBhZGRyZXNzIGlzIHNlbmRlciwgYnV0IG91dHB1dCBnb2VzIHRvIHJlY2VpdmVyXG4gICAgICAgIH0pLFxuICAgICAgfTtcblxuICAgICAgY29uc3QgdHhQYXJhbXMgPSB7XG4gICAgICAgIHJlY2lwaWVudHM6IHVuZGVmaW5lZCxcbiAgICAgIH07XG5cbiAgICAgIGNvbnN0IHR4UHJlYnVpbGQgPSB7IHR4SGV4IH07XG4gICAgICBjb25zdCB2ZXJpZmljYXRpb24gPSB7IGNvbnNvbGlkYXRpb25Ub0Jhc2VBZGRyZXNzOiB0cnVlIH07XG5cbiAgICAgIGF3YWl0IGFkYVRva2VuXG4gICAgICAgIC52ZXJpZnlUcmFuc2FjdGlvbih7XG4gICAgICAgICAgdHhQYXJhbXMsXG4gICAgICAgICAgdHhQcmVidWlsZCxcbiAgICAgICAgICB2ZXJpZmljYXRpb24sXG4gICAgICAgICAgd2FsbGV0OiBtb2NrV2FsbGV0IGFzIGFueSxcbiAgICAgICAgfSlcbiAgICAgICAgLnNob3VsZC5iZS5yZWplY3RlZFdpdGgoJ3R4IG91dHB1dHMgZG9lcyBub3QgbWF0Y2ggd2l0aCBleHBlY3RlZCBhZGRyZXNzJyk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHZlcmlmeSBzcG9uc29yZWQgdG9rZW4gY29uc29saWRhdGlvbiB3aGVuIGZlZSBhZGRyZXNzIG91dHB1dCBpcyBwcmVzZW50JywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgZmVlQWRkcmVzcyA9XG4gICAgICAgICdhZGRyX3Rlc3QxcXoyZnh2MnVteWh0dGt4eXhwOHgwZGxwZHQzazZjd25nNXB4ajNqaHN5ZHplcjNqY3U1ZDhwczd6ZXgyazJ4dDN1cXhnanFubmo4M3dzOGxocm42NDhqanh0d3EyeXRqcXAnO1xuICAgICAgY29uc3QgcXVhbnRpdHkgPSAnMTAwJztcbiAgICAgIGNvbnN0IHNlbmRlcklucHV0QmFsYW5jZSA9IDUwMDAwMDA7XG4gICAgICBjb25zdCBmZWVBZGRyZXNzSW5wdXRCYWxhbmNlID0gMjAwMDAwMDA7XG4gICAgICBjb25zdCB0b3RhbEFzc2V0TGlzdCA9IHtcbiAgICAgICAgW2ZpbmdlcnByaW50XToge1xuICAgICAgICAgIHF1YW50aXR5OiAnMTAwJyxcbiAgICAgICAgICBwb2xpY3lfaWQ6IHBvbGljeUlkLFxuICAgICAgICAgIGFzc2V0X25hbWU6IGFzY2lpRW5jb2RlZE5hbWUsXG4gICAgICAgIH0sXG4gICAgICB9O1xuXG4gICAgICAvLyBCdWlsZCBhIHNwb25zb3JlZCB0b2tlbiBjb25zb2xpZGF0aW9uOiB0b2tlbnMgZ28gYmFjayB0byBzZW5kZXJBZGRyZXNzLCBmZWUgc3BvbnNvciBnZXRzIEFEQSBjaGFuZ2VcbiAgICAgIGNvbnN0IHR4QnVpbGRlciA9IGZhY3RvcnkuZ2V0VHJhbnNmZXJCdWlsZGVyKCk7XG4gICAgICB0eEJ1aWxkZXIuaW5wdXQoe1xuICAgICAgICB0cmFuc2FjdGlvbl9pZDogJzM2NzdlNzVjN2JhNjk5YmZkYzZjZDU3ZDQyZjI0NmY4NmY2M2FlZmQ3NjAyNTAwNmFjNzgzMTNmYWQyYmJhMjEnLFxuICAgICAgICB0cmFuc2FjdGlvbl9pbmRleDogMSxcbiAgICAgIH0pO1xuICAgICAgdHhCdWlsZGVyLmlucHV0KHtcbiAgICAgICAgdHJhbnNhY3Rpb25faWQ6ICczNjc3ZTc1YzdiYTY5OWJmZGM2Y2Q1N2Q0MmYyNDZmODZmNjNhZWZkNzYwMjUwMDZhYzc4MzEzZmFkMmJiYTIyJyxcbiAgICAgICAgdHJhbnNhY3Rpb25faW5kZXg6IDAsXG4gICAgICB9KTtcblxuICAgICAgLy8gQ29uc29saWRhdGlvbiBvdXRwdXQ6IHRva2VucyBnbyBiYWNrIHRvIHRoZSBzZW5kZXIncyBiYXNlIGFkZHJlc3NcbiAgICAgIHR4QnVpbGRlci5vdXRwdXQoe1xuICAgICAgICBhZGRyZXNzOiBzZW5kZXJBZGRyZXNzLFxuICAgICAgICBhbW91bnQ6ICcwJyxcbiAgICAgICAgbXVsdGlBc3NldHM6IHtcbiAgICAgICAgICBhc3NldF9uYW1lOiBhc2NpaUVuY29kZWROYW1lLFxuICAgICAgICAgIHBvbGljeV9pZDogcG9saWN5SWQsXG4gICAgICAgICAgcXVhbnRpdHksXG4gICAgICAgICAgZmluZ2VycHJpbnQsXG4gICAgICAgIH0sXG4gICAgICB9KTtcblxuICAgICAgdHhCdWlsZGVyLmNoYW5nZUFkZHJlc3Moc2VuZGVyQWRkcmVzcywgc2VuZGVySW5wdXRCYWxhbmNlLnRvU3RyaW5nKCksIHRvdGFsQXNzZXRMaXN0KTtcbiAgICAgIHR4QnVpbGRlci5zcG9uc29yc2hpcEluZm8oe1xuICAgICAgICBmZWVBZGRyZXNzOiBmZWVBZGRyZXNzLFxuICAgICAgICBmZWVBZGRyZXNzSW5wdXRCYWxhbmNlOiBmZWVBZGRyZXNzSW5wdXRCYWxhbmNlLnRvU3RyaW5nKCksXG4gICAgICB9KTtcbiAgICAgIHR4QnVpbGRlci50dGwoODAwMDAwMDAwKTtcbiAgICAgIHR4QnVpbGRlci5pc1Rva2VuVHJhbnNhY3Rpb24oKTtcbiAgICAgIGNvbnN0IHR4ID0gKGF3YWl0IHR4QnVpbGRlci5idWlsZCgpKSBhcyBUcmFuc2FjdGlvbjtcbiAgICAgIGNvbnN0IHR4SGV4ID0gdHgudG9Ccm9hZGNhc3RGb3JtYXQoKTtcblxuICAgICAgY29uc3QgbW9ja1dhbGxldCA9IHtcbiAgICAgICAgY29pblNwZWNpZmljOiAoKSA9PiAoe1xuICAgICAgICAgIGJhc2VBZGRyZXNzOiBzZW5kZXJBZGRyZXNzLFxuICAgICAgICB9KSxcbiAgICAgIH07XG5cbiAgICAgIGNvbnN0IHR4UGFyYW1zID0geyByZWNpcGllbnRzOiB1bmRlZmluZWQgfTtcbiAgICAgIGNvbnN0IHR4UHJlYnVpbGQgPSB7IHR4SGV4LCB0eEluZm86IHsgZmVlQWRkcmVzcyB9IH07XG4gICAgICBjb25zdCB2ZXJpZmljYXRpb24gPSB7IGNvbnNvbGlkYXRpb25Ub0Jhc2VBZGRyZXNzOiB0cnVlIH07XG5cbiAgICAgIGNvbnN0IGlzVmVyaWZpZWQgPSBhd2FpdCBhZGFUb2tlbi52ZXJpZnlUcmFuc2FjdGlvbih7XG4gICAgICAgIHR4UGFyYW1zLFxuICAgICAgICB0eFByZWJ1aWxkLFxuICAgICAgICB2ZXJpZmljYXRpb24sXG4gICAgICAgIHdhbGxldDogbW9ja1dhbGxldCBhcyBhbnksXG4gICAgICB9KTtcbiAgICAgIGlzVmVyaWZpZWQuc2hvdWxkLmVxdWFsKHRydWUpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBmYWlsIHNwb25zb3JlZCB0b2tlbiBjb25zb2xpZGF0aW9uIHdoZW4gb3V0cHV0IGdvZXMgdG8gdW5leHBlY3RlZCB0aGlyZC1wYXJ0eSBhZGRyZXNzJywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgZmVlQWRkcmVzcyA9XG4gICAgICAgICdhZGRyX3Rlc3QxcXoyZnh2MnVteWh0dGt4eXhwOHgwZGxwZHQzazZjd25nNXB4ajNqaHN5ZHplcjNqY3U1ZDhwczd6ZXgyazJ4dDN1cXhnanFubmo4M3dzOGxocm42NDhqanh0d3EyeXRqcXAnO1xuICAgICAgY29uc3QgcXVhbnRpdHkgPSAnMTAwJztcbiAgICAgIGNvbnN0IHNlbmRlcklucHV0QmFsYW5jZSA9IDUwMDAwMDA7XG4gICAgICBjb25zdCBmZWVBZGRyZXNzSW5wdXRCYWxhbmNlID0gMjAwMDAwMDA7XG4gICAgICBjb25zdCB0b3RhbEFzc2V0TGlzdCA9IHtcbiAgICAgICAgW2ZpbmdlcnByaW50XToge1xuICAgICAgICAgIHF1YW50aXR5OiAnMTAwJyxcbiAgICAgICAgICBwb2xpY3lfaWQ6IHBvbGljeUlkLFxuICAgICAgICAgIGFzc2V0X25hbWU6IGFzY2lpRW5jb2RlZE5hbWUsXG4gICAgICAgIH0sXG4gICAgICB9O1xuXG4gICAgICAvLyBCdWlsZCB0cmFuc2FjdGlvbiB3aGVyZSB0b2tlbiBvdXRwdXQgZ29lcyB0byBhbiB1bmV4cGVjdGVkIHRoaXJkLXBhcnR5IGFkZHJlc3NcbiAgICAgIGNvbnN0IHR4QnVpbGRlciA9IGZhY3RvcnkuZ2V0VHJhbnNmZXJCdWlsZGVyKCk7XG4gICAgICB0eEJ1aWxkZXIuaW5wdXQoe1xuICAgICAgICB0cmFuc2FjdGlvbl9pZDogJzM2NzdlNzVjN2JhNjk5YmZkYzZjZDU3ZDQyZjI0NmY4NmY2M2FlZmQ3NjAyNTAwNmFjNzgzMTNmYWQyYmJhMjEnLFxuICAgICAgICB0cmFuc2FjdGlvbl9pbmRleDogMSxcbiAgICAgIH0pO1xuICAgICAgdHhCdWlsZGVyLmlucHV0KHtcbiAgICAgICAgdHJhbnNhY3Rpb25faWQ6ICczNjc3ZTc1YzdiYTY5OWJmZGM2Y2Q1N2Q0MmYyNDZmODZmNjNhZWZkNzYwMjUwMDZhYzc4MzEzZmFkMmJiYTIyJyxcbiAgICAgICAgdHJhbnNhY3Rpb25faW5kZXg6IDAsXG4gICAgICB9KTtcblxuICAgICAgLy8gT3V0cHV0IGdvZXMgdG8gcmVjZWl2ZXJBZGRyZXNzICh0aGlyZCBwYXJ0eSksIG5vdCB0aGUgYmFzZSBhZGRyZXNzXG4gICAgICB0eEJ1aWxkZXIub3V0cHV0KHtcbiAgICAgICAgYWRkcmVzczogcmVjZWl2ZXJBZGRyZXNzLFxuICAgICAgICBhbW91bnQ6ICcwJyxcbiAgICAgICAgbXVsdGlBc3NldHM6IHtcbiAgICAgICAgICBhc3NldF9uYW1lOiBhc2NpaUVuY29kZWROYW1lLFxuICAgICAgICAgIHBvbGljeV9pZDogcG9saWN5SWQsXG4gICAgICAgICAgcXVhbnRpdHksXG4gICAgICAgICAgZmluZ2VycHJpbnQsXG4gICAgICAgIH0sXG4gICAgICB9KTtcblxuICAgICAgdHhCdWlsZGVyLmNoYW5nZUFkZHJlc3Moc2VuZGVyQWRkcmVzcywgc2VuZGVySW5wdXRCYWxhbmNlLnRvU3RyaW5nKCksIHRvdGFsQXNzZXRMaXN0KTtcbiAgICAgIHR4QnVpbGRlci5zcG9uc29yc2hpcEluZm8oe1xuICAgICAgICBmZWVBZGRyZXNzOiBmZWVBZGRyZXNzLFxuICAgICAgICBmZWVBZGRyZXNzSW5wdXRCYWxhbmNlOiBmZWVBZGRyZXNzSW5wdXRCYWxhbmNlLnRvU3RyaW5nKCksXG4gICAgICB9KTtcbiAgICAgIHR4QnVpbGRlci50dGwoODAwMDAwMDAwKTtcbiAgICAgIHR4QnVpbGRlci5pc1Rva2VuVHJhbnNhY3Rpb24oKTtcbiAgICAgIGNvbnN0IHR4ID0gKGF3YWl0IHR4QnVpbGRlci5idWlsZCgpKSBhcyBUcmFuc2FjdGlvbjtcbiAgICAgIGNvbnN0IHR4SGV4ID0gdHgudG9Ccm9hZGNhc3RGb3JtYXQoKTtcblxuICAgICAgY29uc3QgbW9ja1dhbGxldCA9IHtcbiAgICAgICAgY29pblNwZWNpZmljOiAoKSA9PiAoe1xuICAgICAgICAgIGJhc2VBZGRyZXNzOiBzZW5kZXJBZGRyZXNzLFxuICAgICAgICB9KSxcbiAgICAgIH07XG5cbiAgICAgIGNvbnN0IHR4UGFyYW1zID0geyByZWNpcGllbnRzOiB1bmRlZmluZWQgfTtcbiAgICAgIGNvbnN0IHR4UHJlYnVpbGQgPSB7IHR4SGV4LCB0eEluZm86IHsgZmVlQWRkcmVzcyB9IH07XG4gICAgICBjb25zdCB2ZXJpZmljYXRpb24gPSB7IGNvbnNvbGlkYXRpb25Ub0Jhc2VBZGRyZXNzOiB0cnVlIH07XG5cbiAgICAgIGF3YWl0IGFkYVRva2VuXG4gICAgICAgIC52ZXJpZnlUcmFuc2FjdGlvbih7XG4gICAgICAgICAgdHhQYXJhbXMsXG4gICAgICAgICAgdHhQcmVidWlsZCxcbiAgICAgICAgICB2ZXJpZmljYXRpb24sXG4gICAgICAgICAgd2FsbGV0OiBtb2NrV2FsbGV0IGFzIGFueSxcbiAgICAgICAgfSlcbiAgICAgICAgLnNob3VsZC5iZS5yZWplY3RlZFdpdGgoJ3R4IG91dHB1dHMgZG9lcyBub3QgbWF0Y2ggd2l0aCBleHBlY3RlZCBhZGRyZXNzJyk7XG4gICAgfSk7XG4gIH0pO1xufSk7XG4iXX0=
|