bitgo 53.2.0 → 53.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -94,9 +94,12 @@ describe('TSS Utils:', async function () {
94
94
  },
95
95
  },
96
96
  };
97
+ // Sol TSS unsigned tx bytes — same fixtures as eddsaMPCv2/signTxRequest.ts
98
+ const solTssSignableHex = '02010206c2d5b5f4fb9a9bcd8a2f303e4d06f78d8ded300713f456da2abff0b3ea0185aa051a34bc8acd438763976f96876115050f73828553566d111d7ac8bffebf587c4f5f5987bfe26aa66013efd96d36360f2b4336c91f993259fb56051305614d42f2ea13f8ff9d7958dbf269c6e36bfdf5cb5c43de4b4e1d3efb7dab3d5d028604000000000000000000000000000000000000000000000000000000000000000006a7d517192c568ee08a845f73d29788cf035c3145b21ab344d8062ea94000003a621f6d1cc4b8fb2a739aa08e4034da0fc588ece3bd857630de30f7edde45dd0204030205010404000000040200030c02000000f0a29a3b00000000';
99
+ const solTssSerializedTxHex = `02000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003bc9df0b397bec2ed3b6444a8c33f38267cc08b5fb2a7d37e26b6c487e26d15b7c07830eb78e26a88db5de4aa6986a327f09aed8c01533e5b972748ddf60b80f${solTssSignableHex}`;
97
100
  const txRequest = {
98
101
  txRequestId: 'randomId',
99
- unsignedTxs: [{ signableHex: 'MPC on a Friday night', serializedTxHex: 'MPC on a Friday night' }],
102
+ unsignedTxs: [{ signableHex: solTssSignableHex, serializedTxHex: solTssSerializedTxHex }],
100
103
  signatureShares: [
101
104
  {
102
105
  from: 'bitgo',
@@ -562,13 +565,21 @@ describe('TSS Utils:', async function () {
562
565
  txRequestId: 'v2-signing-test',
563
566
  unsignedTxs: [
564
567
  {
565
- serializedTxHex: 'test-payload',
566
- signableHex: 'deadbeef',
568
+ serializedTxHex: solTssSerializedTxHex,
569
+ signableHex: solTssSignableHex,
567
570
  derivationPath: 'm/0',
568
571
  },
569
572
  ],
570
573
  date: new Date().toISOString(),
571
- intent: { intentType: 'payment' },
574
+ intent: {
575
+ intentType: 'payment',
576
+ recipients: [
577
+ {
578
+ address: { address: 'HMEgbR4S2hLKfst2VZUVpHVUu4FioFPyW5iUuJvZdMvs' },
579
+ amount: { value: '999990000', symbol: 'tsol' },
580
+ },
581
+ ],
582
+ },
572
583
  latest: true,
573
584
  state: 'pendingUserSignature',
574
585
  walletType: 'hot',
@@ -577,6 +588,9 @@ describe('TSS Utils:', async function () {
577
588
  version: 1,
578
589
  userId: 'userId',
579
590
  };
591
+ beforeEach(function () {
592
+ sandbox.stub(baseCoin, 'verifyTransaction').resolves(true);
593
+ });
580
594
  it('v2 R-share round-trip: encrypt via commitment, verify envelope, decrypt via createRShare', async function () {
581
595
  const passphrase = 'test-passphrase';
582
596
  const prv = JSON.stringify(validUserSigningMaterial);
@@ -615,14 +629,20 @@ describe('TSS Utils:', async function () {
615
629
  transactions: [],
616
630
  unsignedTxs: [
617
631
  {
618
- serializedTxHex: 'MPC on a Friday night',
619
- signableHex: 'MPC on a Friday night',
632
+ serializedTxHex: solTssSerializedTxHex,
633
+ signableHex: solTssSignableHex,
620
634
  derivationPath: 'm/0',
621
635
  },
622
636
  ],
623
637
  date: new Date().toISOString(),
624
638
  intent: {
625
639
  intentType: 'payment',
640
+ recipients: [
641
+ {
642
+ address: { address: 'HMEgbR4S2hLKfst2VZUVpHVUu4FioFPyW5iUuJvZdMvs' },
643
+ amount: { value: '999990000', symbol: 'tsol' },
644
+ },
645
+ ],
626
646
  },
627
647
  latest: true,
628
648
  state: 'pendingUserSignature',
@@ -633,6 +653,7 @@ describe('TSS Utils:', async function () {
633
653
  userId: 'userId',
634
654
  };
635
655
  beforeEach(async function () {
656
+ sandbox.stub(baseCoin, 'verifyTransaction').resolves(true);
636
657
  const userSignShare = validUserSignShare;
637
658
  const rShare = userSignShare.rShares[3];
638
659
  const signatureShare = {
@@ -694,14 +715,20 @@ describe('TSS Utils:', async function () {
694
715
  transactions: [],
695
716
  unsignedTxs: [
696
717
  {
697
- serializedTxHex: 'MPC on a Friday night',
698
- signableHex: 'MPC on a Friday night',
718
+ serializedTxHex: solTssSerializedTxHex,
719
+ signableHex: solTssSignableHex,
699
720
  derivationPath: 'm/0',
700
721
  },
701
722
  ],
702
723
  date: new Date().toISOString(),
703
724
  intent: {
704
725
  intentType: 'payment',
726
+ recipients: [
727
+ {
728
+ address: { address: 'HMEgbR4S2hLKfst2VZUVpHVUu4FioFPyW5iUuJvZdMvs' },
729
+ amount: { value: '999990000', symbol: 'tsol' },
730
+ },
731
+ ],
705
732
  },
706
733
  latest: true,
707
734
  state: 'pendingUserSignature',
@@ -712,6 +739,7 @@ describe('TSS Utils:', async function () {
712
739
  userId: 'userId',
713
740
  };
714
741
  beforeEach(async function () {
742
+ sandbox.stub(baseCoin, 'verifyTransaction').resolves(true);
715
743
  const userSignShare = validUserSignShare;
716
744
  const rShare = userSignShare.rShares[3];
717
745
  const signatureShare = {
@@ -766,6 +794,297 @@ describe('TSS Utils:', async function () {
766
794
  sandbox.verifyAndRestore();
767
795
  });
768
796
  });
797
+ describe('signTxRequest resolveEffectiveTxParams guard:', function () {
798
+ const txRequestId = 'randomid-guard';
799
+ const baseTxRequest = {
800
+ txRequestId,
801
+ transactions: [],
802
+ unsignedTxs: [
803
+ {
804
+ serializedTxHex: solTssSerializedTxHex,
805
+ signableHex: solTssSignableHex,
806
+ derivationPath: 'm/0',
807
+ },
808
+ ],
809
+ date: new Date().toISOString(),
810
+ intent: {
811
+ intentType: 'payment',
812
+ recipients: [
813
+ {
814
+ address: { address: 'HMEgbR4S2hLKfst2VZUVpHVUu4FioFPyW5iUuJvZdMvs' },
815
+ amount: { value: '999990000', symbol: 'tsol' },
816
+ },
817
+ ],
818
+ },
819
+ latest: true,
820
+ state: 'pendingUserSignature',
821
+ walletType: 'hot',
822
+ walletId: 'walletId',
823
+ policiesChecked: true,
824
+ version: 1,
825
+ userId: 'userId',
826
+ };
827
+ it('throws InvalidTransactionError when txParams is absent and intent has no recipients', async function () {
828
+ const maliciousTxRequest = {
829
+ ...baseTxRequest,
830
+ intent: { intentType: 'stakingAuthorize' },
831
+ };
832
+ await tssUtils
833
+ .signTxRequest({
834
+ txRequest: maliciousTxRequest,
835
+ prv: JSON.stringify(validUserSigningMaterial),
836
+ reqId,
837
+ })
838
+ .should.be.rejectedWith(sdk_core_1.InvalidTransactionError);
839
+ });
840
+ it('uses intent recipients when txParams is absent', async function () {
841
+ const verifyStub = sandbox.stub(baseCoin, 'verifyTransaction').resolves(true);
842
+ const userSignShare = validUserSignShare;
843
+ const rShare = userSignShare.rShares[3];
844
+ const signatureShare = {
845
+ from: sdk_core_1.SignatureShareType.USER,
846
+ to: sdk_core_1.SignatureShareType.BITGO,
847
+ share: rShare.r + rShare.R,
848
+ };
849
+ await (0, common_1.nockSendSignatureShare)({
850
+ walletId: wallet.id(),
851
+ txRequestId: baseTxRequest.txRequestId,
852
+ signatureShare,
853
+ });
854
+ const signatureShare2 = {
855
+ from: sdk_core_1.SignatureShareType.BITGO,
856
+ to: sdk_core_1.SignatureShareType.USER,
857
+ share: validBitgoToUserSignShare.rShares[1].r + validBitgoToUserSignShare.rShares[1].R,
858
+ };
859
+ const response = { txRequests: [{ ...baseTxRequest, signatureShares: [signatureShare2] }] };
860
+ await (0, common_1.nockGetTxRequest)({ walletId: wallet.id(), txRequestId: baseTxRequest.txRequestId, response });
861
+ const bitgoToUserCommitmentShare = {
862
+ from: sdk_core_1.SignatureShareType.BITGO,
863
+ to: sdk_core_1.SignatureShareType.USER,
864
+ type: sdk_core_1.CommitmentType.COMMITMENT,
865
+ share: validBitgoToUserSignShare.rShares[1].commitment,
866
+ };
867
+ await (0, common_1.nockExchangeCommitments)({
868
+ walletId: wallet.id(),
869
+ txRequestId: baseTxRequest.txRequestId,
870
+ response: { commitmentShare: bitgoToUserCommitmentShare },
871
+ });
872
+ await tssUtils.signTxRequest({
873
+ txRequest: baseTxRequest,
874
+ prv: JSON.stringify(validUserSigningMaterial),
875
+ reqId,
876
+ });
877
+ verifyStub.calledOnce.should.be.true();
878
+ const verifyArgs = verifyStub.firstCall.args[0];
879
+ verifyArgs.txParams.recipients?.[0].address.should.equal('HMEgbR4S2hLKfst2VZUVpHVUu4FioFPyW5iUuJvZdMvs');
880
+ });
881
+ it('does not throw for allowlisted no-recipient intentType (deactivate)', async function () {
882
+ const verifyStub = sandbox.stub(baseCoin, 'verifyTransaction').resolves(true);
883
+ const deactivateTxRequest = {
884
+ ...baseTxRequest,
885
+ intent: { intentType: 'deactivate' },
886
+ };
887
+ const userSignShare = validUserSignShare;
888
+ const rShare = userSignShare.rShares[3];
889
+ const signatureShare = {
890
+ from: sdk_core_1.SignatureShareType.USER,
891
+ to: sdk_core_1.SignatureShareType.BITGO,
892
+ share: rShare.r + rShare.R,
893
+ };
894
+ await (0, common_1.nockSendSignatureShare)({
895
+ walletId: wallet.id(),
896
+ txRequestId: deactivateTxRequest.txRequestId,
897
+ signatureShare,
898
+ });
899
+ const signatureShare2 = {
900
+ from: sdk_core_1.SignatureShareType.BITGO,
901
+ to: sdk_core_1.SignatureShareType.USER,
902
+ share: validBitgoToUserSignShare.rShares[1].r + validBitgoToUserSignShare.rShares[1].R,
903
+ };
904
+ const response = { txRequests: [{ ...deactivateTxRequest, signatureShares: [signatureShare2] }] };
905
+ await (0, common_1.nockGetTxRequest)({
906
+ walletId: wallet.id(),
907
+ txRequestId: deactivateTxRequest.txRequestId,
908
+ response,
909
+ });
910
+ const bitgoToUserCommitmentShare = {
911
+ from: sdk_core_1.SignatureShareType.BITGO,
912
+ to: sdk_core_1.SignatureShareType.USER,
913
+ type: sdk_core_1.CommitmentType.COMMITMENT,
914
+ share: validBitgoToUserSignShare.rShares[1].commitment,
915
+ };
916
+ await (0, common_1.nockExchangeCommitments)({
917
+ walletId: wallet.id(),
918
+ txRequestId: deactivateTxRequest.txRequestId,
919
+ response: { commitmentShare: bitgoToUserCommitmentShare },
920
+ });
921
+ await tssUtils.signTxRequest({
922
+ txRequest: deactivateTxRequest,
923
+ prv: JSON.stringify(validUserSigningMaterial),
924
+ reqId,
925
+ });
926
+ verifyStub.calledOnce.should.be.true();
927
+ });
928
+ describe('consolidate intent', function () {
929
+ // Intent recipient amount is a build-time snapshot that drifts from the swept balance in the tx.
930
+ const consolidateTxRequest = {
931
+ ...baseTxRequest,
932
+ intent: {
933
+ intentType: 'consolidate',
934
+ consolidateId: '68a7d5d0c66e74e216b97173bd558c6d',
935
+ recipients: [
936
+ {
937
+ address: { address: 'HMEgbR4S2hLKfst2VZUVpHVUu4FioFPyW5iUuJvZdMvs' },
938
+ amount: { value: '999985000', symbol: 'tsol' },
939
+ },
940
+ ],
941
+ },
942
+ };
943
+ it('verifies sweep-to-root instead of snapshot intent recipients', async function () {
944
+ sandbox
945
+ .stub(wallet, 'coinSpecific')
946
+ .returns({ rootAddress: 'HMEgbR4S2hLKfst2VZUVpHVUu4FioFPyW5iUuJvZdMvs', customChangeWalletId: '' });
947
+ const verifySpy = sandbox.spy(baseCoin, 'verifyTransaction');
948
+ const rShare = validUserSignShare.rShares[3];
949
+ await (0, common_1.nockSendSignatureShare)({
950
+ walletId: wallet.id(),
951
+ txRequestId: consolidateTxRequest.txRequestId,
952
+ signatureShare: { from: sdk_core_1.SignatureShareType.USER, to: sdk_core_1.SignatureShareType.BITGO, share: rShare.r + rShare.R },
953
+ });
954
+ const signatureShare2 = {
955
+ from: sdk_core_1.SignatureShareType.BITGO,
956
+ to: sdk_core_1.SignatureShareType.USER,
957
+ share: validBitgoToUserSignShare.rShares[1].r + validBitgoToUserSignShare.rShares[1].R,
958
+ };
959
+ await (0, common_1.nockGetTxRequest)({
960
+ walletId: wallet.id(),
961
+ txRequestId: consolidateTxRequest.txRequestId,
962
+ response: { txRequests: [{ ...consolidateTxRequest, signatureShares: [signatureShare2] }] },
963
+ });
964
+ await (0, common_1.nockExchangeCommitments)({
965
+ walletId: wallet.id(),
966
+ txRequestId: consolidateTxRequest.txRequestId,
967
+ response: {
968
+ commitmentShare: {
969
+ from: sdk_core_1.SignatureShareType.BITGO,
970
+ to: sdk_core_1.SignatureShareType.USER,
971
+ type: sdk_core_1.CommitmentType.COMMITMENT,
972
+ share: validBitgoToUserSignShare.rShares[1].commitment,
973
+ },
974
+ },
975
+ });
976
+ await tssUtils.signTxRequest({
977
+ txRequest: consolidateTxRequest,
978
+ prv: JSON.stringify(validUserSigningMaterial),
979
+ reqId,
980
+ });
981
+ verifySpy.calledOnce.should.be.true();
982
+ const verifyArgs = verifySpy.firstCall.args[0];
983
+ should.not.exist(verifyArgs.txParams.recipients);
984
+ should(verifyArgs.txPrebuild.consolidateId).equal('68a7d5d0c66e74e216b97173bd558c6d');
985
+ should(verifyArgs.verification).deepEqual({ consolidationToBaseAddress: true });
986
+ });
987
+ it('rejects a consolidation that does not sweep to the wallet root address', async function () {
988
+ sandbox
989
+ .stub(wallet, 'coinSpecific')
990
+ .returns({ rootAddress: '5hr5fisPi6DXNuuRpm5XUbzpiEnmdyxXuBDTwzwZj5Pe', customChangeWalletId: '' });
991
+ await tssUtils
992
+ .signTxRequest({
993
+ txRequest: consolidateTxRequest,
994
+ prv: JSON.stringify(validUserSigningMaterial),
995
+ reqId,
996
+ })
997
+ .should.be.rejectedWith('tx outputs does not match with expected address');
998
+ });
999
+ describe('token consolidation', function () {
1000
+ // SPL token sweep: the output is the root's associated token account, not the root itself.
1001
+ const tokenConsolidationTxHex = '02b7c2c7829eded4e8f947c90ed3b9afce71f616eb47dfcfbf4b765778149060013acb33b9f67fdd9c2512f48fac4e4c049eab93829b69404f3bd166fe3242c90700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020104096da690bd558fd8634ac14f1645d8095afd0caea5953578c596e3c0dea38305ee7298bfac55101f177735659d42ed6be890ef3a1d204d9e33f32e24c5635327ca66d1fe00826e5a4f759f87b279c1aee19cce5301af4ed66ae17db48b201ed6c2a0e8a28bf565627f1ab8a34b1a95ee1b0a2a39084f1f0e2acb1c394b20185d8e0b22657c8d9c4ce5f6495efb6410c199011530f90e3ab9d8d1e4206f9ae0ffeb0000000000000000000000000000000000000000000000000000000000000000c5f9fb32f49111ab20c33f2598fc836c113e291881ac21ee29169394011244e406a7d517192c568ee08a845f73d29788cf035c3145b21ab344d8062ea940000006ddf6e1d765a193d9cbe146ceeb79ac1cb485ed5f5b37913a8cf5857eff00a9de13c74d2b4d948e1608ea6eebdafe75bc2f995aad11b21d1e2c94f2a2d12f6802050303070004040000000804020604010a0ce0076bb20400000006';
1002
+ const tokenConsolidateTxRequest = {
1003
+ ...consolidateTxRequest,
1004
+ unsignedTxs: [
1005
+ {
1006
+ serializedTxHex: tokenConsolidationTxHex,
1007
+ signableHex: tokenConsolidationTxHex.slice(2 + 2 * 128),
1008
+ derivationPath: 'm/0',
1009
+ },
1010
+ ],
1011
+ };
1012
+ it('verifies the output is the wallet root token account', async function () {
1013
+ sandbox
1014
+ .stub(wallet, 'coinSpecific')
1015
+ .returns({ rootAddress: 'HBxZShcE86UMmF93KUM8eWJKqeEXi5cqWCLYLMMhqMYm', customChangeWalletId: '' });
1016
+ const verifySpy = sandbox.spy(baseCoin, 'verifyTransaction');
1017
+ // Stop after verification; signing itself is covered above.
1018
+ sandbox.stub(tssUtils, 'pickBitgoPubGpgKeyForSigning').rejects(new Error('verified'));
1019
+ await tssUtils
1020
+ .signTxRequest({
1021
+ txRequest: tokenConsolidateTxRequest,
1022
+ prv: JSON.stringify(validUserSigningMaterial),
1023
+ reqId,
1024
+ })
1025
+ .should.be.rejectedWith('verified');
1026
+ (await verifySpy.firstCall.returnValue).should.be.true();
1027
+ });
1028
+ it('rejects a token output that is not the wallet root token account', async function () {
1029
+ sandbox
1030
+ .stub(wallet, 'coinSpecific')
1031
+ .returns({ rootAddress: '5hr5fisPi6DXNuuRpm5XUbzpiEnmdyxXuBDTwzwZj5Pe', customChangeWalletId: '' });
1032
+ await tssUtils
1033
+ .signTxRequest({
1034
+ txRequest: tokenConsolidateTxRequest,
1035
+ prv: JSON.stringify(validUserSigningMaterial),
1036
+ reqId,
1037
+ })
1038
+ .should.be.rejectedWith('tx outputs does not match with expected address');
1039
+ });
1040
+ });
1041
+ });
1042
+ });
1043
+ describe('signEddsaTssUsingExternalSigner resolveEffectiveTxParams guard:', function () {
1044
+ const externalGuardTxRequest = {
1045
+ txRequestId: 'randomid-external-guard',
1046
+ transactions: [],
1047
+ unsignedTxs: [
1048
+ {
1049
+ serializedTxHex: solTssSerializedTxHex,
1050
+ signableHex: solTssSignableHex,
1051
+ derivationPath: 'm/0',
1052
+ },
1053
+ ],
1054
+ date: new Date().toISOString(),
1055
+ intent: {
1056
+ intentType: 'payment',
1057
+ recipients: [
1058
+ {
1059
+ address: { address: 'HMEgbR4S2hLKfst2VZUVpHVUu4FioFPyW5iUuJvZdMvs' },
1060
+ amount: { value: '999990000', symbol: 'tsol' },
1061
+ },
1062
+ ],
1063
+ },
1064
+ latest: true,
1065
+ state: 'pendingUserSignature',
1066
+ walletType: 'hot',
1067
+ walletId: 'walletId',
1068
+ policiesChecked: true,
1069
+ version: 1,
1070
+ userId: 'userId',
1071
+ };
1072
+ it('throws InvalidTransactionError before external signer callbacks when intent has no recipients', async function () {
1073
+ const commitmentGen = sandbox.stub().rejects(new Error('should not run'));
1074
+ const maliciousTxRequest = {
1075
+ ...externalGuardTxRequest,
1076
+ intent: { intentType: 'stakingAuthorize' },
1077
+ };
1078
+ await tssUtils
1079
+ .signEddsaTssUsingExternalSigner(maliciousTxRequest, commitmentGen, async function () {
1080
+ throw new Error('should not run');
1081
+ }, async function () {
1082
+ throw new Error('should not run');
1083
+ })
1084
+ .should.be.rejectedWith(sdk_core_1.InvalidTransactionError);
1085
+ commitmentGen.notCalled.should.be.true();
1086
+ });
1087
+ });
769
1088
  describe('signTxRequestForMessage:', function () {
770
1089
  const txRequestId = 'randomid-abc';
771
1090
  const messageRaw = 'hello world';
@@ -1247,4 +1566,4 @@ describe('TSS Utils:', async function () {
1247
1566
  });
1248
1567
  // #endregion Nock helpers
1249
1568
  });
1250
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWRkc2EuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90ZXN0L3YyL3VuaXQvaW50ZXJuYWwvdHNzVXRpbHMvZWRkc2EudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSxpQ0FBaUM7QUFDakMsa0RBQWtEO0FBQ2xELDRCQUE0QjtBQUM1Qiw2QkFBOEI7QUFDOUIsbUNBQW1DO0FBQ25DLGlDQUFrQztBQUNsQywrQkFBK0I7QUFFL0IsOENBQXdEO0FBQ3hELDRDQUEyQztBQUMzQyw4Q0FzQnlCO0FBQ3pCLCtDQUEyRDtBQUMzRCxxQ0FPa0I7QUFFbEIsT0FBTyxDQUFDLE1BQU0sQ0FBQyxZQUFZLEdBQUcsSUFBSSxHQUFHLEVBQUUsQ0FBQztBQUV4QyxRQUFRLENBQUMsWUFBWSxFQUFFLEtBQUs7SUFDMUIsSUFBSSxPQUEyQixDQUFDO0lBQ2hDLElBQUksR0FBVSxDQUFDO0lBQ2YsSUFBSSxLQUFhLENBQUM7SUFDbEIsSUFBSSxRQUFrQixDQUFDO0lBQ3ZCLElBQUksVUFBVSxDQUFDO0lBQ2YsSUFBSSxZQUFZLENBQUM7SUFDakIsSUFBSSxXQUFXLENBQUM7SUFDaEIsSUFBSSxLQUF5QixDQUFDO0lBQzlCLElBQUksUUFBa0IsQ0FBQztJQUN2QixJQUFJLE1BQWMsQ0FBQztJQUNuQixJQUFJLGFBQWEsQ0FBQztJQUNsQixNQUFNLEtBQUssR0FBRyxJQUFJLHdCQUFhLEVBQUUsQ0FBQztJQUNsQyxNQUFNLFFBQVEsR0FBRyxNQUFNLENBQUM7SUFDeEIsTUFBTSx3QkFBd0IsR0FBRztRQUMvQixNQUFNLEVBQUU7WUFDTixDQUFDLEVBQUUsQ0FBQztZQUNKLENBQUMsRUFBRSxDQUFDO1lBQ0osQ0FBQyxFQUFFLENBQUM7WUFDSixDQUFDLEVBQUUsa0VBQWtFO1lBQ3JFLElBQUksRUFBRSxrRUFBa0U7WUFDeEUsU0FBUyxFQUFFLGtFQUFrRTtTQUM5RTtRQUNELGVBQWUsRUFBRSxrRUFBa0U7UUFDbkYsV0FBVyxF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QUFFLGdCQUFnQixFQUFFLENBQUM7YUFDdEQsQ0FBQyxDQUFDO1lBQ0gsTUFBTSxRQUFRLEdBQXNCO2dCQUNsQyxJQUFJLEVBQUUsWUFBWTtnQkFDbEIsU0FBUyxFQUFFLE9BQU8sQ0FBQyxTQUFTO2dCQUM1QixjQUFjLEVBQUUsT0FBTyxDQUFDLFNBQVM7Z0JBQ2pDLFlBQVksRUFBRSxlQUFlO2FBQzlCLENBQUM7WUFDRixJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxDQUFDLFdBQVcsUUFBUSxhQUFhLENBQUMsQ0FBQyxLQUFLLENBQUMsRUFBRSxZQUFZLEVBQUUsZUFBZSxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxFQUFFLFFBQVEsQ0FBQyxDQUFDO1lBQ2hILE1BQU0sRUFBRSxtQkFBbUIsRUFBRSxHQUFHLE1BQU0sUUFBUSxDQUFDLG9DQUFvQyxDQUFDLGVBQWUsQ0FBQyxDQUFDO1lBQ3JHLE1BQU0sQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLG1CQUFtQixDQUFDLENBQUM7UUFDeEMsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztJQUVILDBCQUEwQjtBQUM1QixDQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIGFzc2VydCBmcm9tICdhc3NlcnQnO1xuaW1wb3J0ICogYXMgc29kaXVtIGZyb20gJ2xpYnNvZGl1bS13cmFwcGVycy1zdW1vJztcbmltcG9ydCAqIGFzIF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCBub2NrID0gcmVxdWlyZSgnbm9jaycpO1xuaW1wb3J0ICogYXMgb3BlbnBncCBmcm9tICdvcGVucGdwJztcbmltcG9ydCBzaG91bGQgPSByZXF1aXJlKCdzaG91bGQnKTtcbmltcG9ydCAqIGFzIHNpbm9uIGZyb20gJ3Npbm9uJztcblxuaW1wb3J0IHsgVGVzdGFibGVCRywgVGVzdEJpdEdvIH0gZnJvbSAnQGJpdGdvL3Nkay10ZXN0JztcbmltcG9ydCB7IEJpdEdvIH0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vc3JjJztcbmltcG9ydCB7XG4gIEFkZEtleWNoYWluT3B0aW9ucyxcbiAgQmFzZUNvaW4sXG4gIEJpdGdvR1BHUHVibGljS2V5LFxuICBDb21taXRtZW50U2hhcmVSZWNvcmQsXG4gIENvbW1pdG1lbnRUeXBlLFxuICBjb21tb24sXG4gIGNyZWF0ZVNoYXJlZERhdGFQcm9vZixcbiAgRWQyNTUxOUJJUDMyLFxuICBFRERTQVV0aWxzLFxuICBFZGRzYSxcbiAgRW5jcnlwdGVkU2lnbmVyU2hhcmVUeXBlLFxuICBFeGNoYW5nZUNvbW1pdG1lbnRSZXNwb25zZSxcbiAgS2V5Y2hhaW4sXG4gIEtleVNoYXJlLFxuICBSZXF1ZXN0VHJhY2VyLFxuICBSZXF1ZXN0VHlwZSxcbiAgU2lnbmF0dXJlU2hhcmVSZWNvcmQsXG4gIFNpZ25hdHVyZVNoYXJlVHlwZSxcbiAgVHNzVXRpbHMsXG4gIFR4UmVxdWVzdCxcbiAgV2FsbGV0LFxufSBmcm9tICdAYml0Z28vc2RrLWNvcmUnO1xuaW1wb3J0IHsgY3JlYXRlV2FsbGV0U2lnbmF0dXJlcyB9IGZyb20gJy4uLy4uL3Rzcy9oZWxwZXJzJztcbmltcG9ydCB7XG4gIG5vY2tDcmVhdGVUeFJlcXVlc3QsXG4gIG5vY2tEZWxldGVTaWduYXR1cmVTaGFyZSxcbiAgbm9ja0V4Y2hhbmdlQ29tbWl0bWVudHMsXG4gIG5vY2tHZXRUeFJlcXVlc3QsXG4gIG5vY2tTZW5kU2lnbmF0dXJlU2hhcmUsXG4gIG5vY2tTZW5kVHhSZXF1ZXN0LFxufSBmcm9tICcuL2NvbW1vbic7XG5cbm9wZW5wZ3AuY29uZmlnLnJlamVjdEN1cnZlcyA9IG5ldyBTZXQoKTtcblxuZGVzY3JpYmUoJ1RTUyBVdGlsczonLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gIGxldCBzYW5kYm94OiBzaW5vbi5TaW5vblNhbmRib3g7XG4gIGxldCBNUEM6IEVkZHNhO1xuICBsZXQgYmdVcmw6IHN0cmluZztcbiAgbGV0IHRzc1V0aWxzOiBUc3NVdGlscztcbiAgbGV0IHVzZXJHcGdLZXk7XG4gIGxldCBiYWNrdXBHcGdLZXk7XG4gIGxldCBiaXRnb0dwZ0tleTtcbiAgbGV0IGJpdGdvOiBUZXN0YWJsZUJHICYgQml0R287XG4gIGxldCBiYXNlQ29pbjogQmFzZUNvaW47XG4gIGxldCB3YWxsZXQ6IFdhbGxldDtcbiAgbGV0IGJpdGdvS2V5U2hhcmU7XG4gIGNvbnN0IHJlcUlkID0gbmV3IFJlcXVlc3RUcmFjZXIoKTtcbiAgY29uc3QgY29pbk5hbWUgPSAndHNvbCc7XG4gIGNvbnN0IHZhbGlkVXNlclNpZ25pbmdNYXRlcmlhbCA9IHtcbiAgICB1U2hhcmU6IHtcbiAgICAgIGk6IDEsXG4gICAgICB0OiAyLFxuICAgICAgbjogMyxcbiAgICAgIHk6ICcwOTNjODYwM2FkODZjNDFkNWVlMjVhODE0Yjg4MTg1YjQzNWRkM2E5Y2VjY2Y5YzlmZDY5MWE0NjVhYzRhOGIwJyxcbiAgICAgIHNlZWQ6ICdjYTQwYzc4OTgxMzI1MGMzMzRkZGQyYmExOTA1MGY2ZWQyMGI1YTA4ODUzY2VjYTQ5MjM1OGYyNzExYWQ0YjE1JyxcbiAgICAgIGNoYWluY29kZTogJzU5NmQ1NDA0YTdlYjkxOGVlNzgyNDdiOTUyZDA2NTM5NjE5ODg0MDkxZmRkOWUwZmY1YTY2NWYzNDllMzJmY2EnLFxuICAgIH0sXG4gICAgY29tbW9uQ2hhaW5jb2RlOiAnNTk2ZDU0MDRhN2ViOTE4ZWU3ODI0N2I5NTJkMDY1Mzk2MTk4ODQwOTFmZGQ5ZTBmZjVhNjY1ZjM0OWUzMmZjYScsXG4gICAgYml0Z29ZU2hhcmU6IHtcbiAgICAgIGk6IDEsXG4gICAgICBqOiAzLFxuICAgICAgeTogJzU5ZDgwMDBiYTVlODVmYTQwMmYzOTM4Mjk2MGU3ZDVlZGU4MmIxYjZlMjJiMTQ2YTE4YjdkZjIzOGMzYTMyMjUnLFxuICAgICAgdjogJzAxZWEzZjQyNWIxYWRmOGFlYzZjZmU0ZmM4ZjliOTQ3NTVjMzQ2NTc5NjVmMzIzOTc2NTVkY2Q3ODRmMWI1MTcnLFxuICAgICAgdTogJzljZTMyMDRhOGM5NzU3NzM4OTY3ZjNmODFiNDYzZDg3MjY3YmY2ZjJjMGU1ZWFmMjg0MzE2NzUzN2I4NzJiMGInLFxuICAgICAgY2hhaW5jb2RlOiAnZDIxZGJkOGVhZTVkNDc4OTI5MmVjZWEyZWZhNTNlMDE2NWIyNDM5ZDU3ZjUxNThlYjRkZDU3ZGMyNmI1OTIzNicsXG4gICAgfSxcbiAgICBiYWNrdXBZU2hhcmU6IHtcbiAgICAgIGk6IDEsXG4gICAgICBqOiAyLFxuICAgICAgeTogJ2UwYWU3NTA3NzcxNTY4NmExMjFhY2I0MWIyOWE1NWJkZTQyNjk3MTE1NGY0MGE0MWZjMzE3ZjdmNzc0YTk0MjQnLFxuICAgICAgdjogJ2Y3NmVmNjI5ZGZjMTVhYjVlNDUzMWU1MzJiNWQ2N2YyMTc2NjM3Y2E3NTJiMTk1ODc2YjdlMzE3MjQ1OWM5NjknLFxuICAgICAgdTogJ2ZlNmI4OWZiNmFjZmNkNzM5MmMzNWMwODRmNThiZGUwODQ2Yjg4OGM0ZGY1N2U0NjZjYWYwYTMyNzFiMDZhMDUnLFxuICAgICAgY2hhaW5jb2RlOiAnMWMzNGU1ZGZiYmQ0YTg3MGY0NDc5Y2FhYTVlNmE0NmUzNDM4Zjk3NmFkNWFlZmQ0OTA1YjhmZThiY2ExMTAxZScsXG4gICAgfSxcbiAgfTtcblxuICBjb25zdCB2YWxpZFVzZXJTaWduU2hhcmUgPSB7XG4gICAgeFNoYXJlOiB7XG4gICAgICBpOiAxLFxuICAgICAgeTogJzRkOTM0Mzk4OGU2ODE5MWFhYzk0NWE2OTYzMDMxZGRkZGUzNDkwZjkwMjBkMDU3MWE2ZTZjNmUxNWNjYTAyOTYnLFxuICAgICAgdTogJzFlMTU5ZDZhMGFlM2E4ZGNjYzc0NjE1MTEzZTdjM2UyNWQzMDgwZTVlMGZmZWIwYWUwNGRkNmE5NjcyNjgxMDInLFxuICAgICAgcjogJ2M4ZjY0Y2M0ODkyNjIxNmMzZjYwZTFkOGZmMWUyNGViYTA2MGQ3YzFmZjAyMGQwZmMxZDczNWQ0NTY0ZWZkMDMnLFxuICAgICAgUjogJzliZTIyMDhlZTI4Y2Q0YjI1NzdhOWE2NmY2YWFiMWVkOGIwOGEzMDA5NjllZWI5YjIwM2E1MmFhNTRkMmMyM2MnLFxuICAgIH0sXG4gICAgclNoYXJlczoge1xuICAgICAgMzoge1xuICAgICAgICBpOiAzLFxuICAgICAgICBqOiAxLFxuICAgICAgICB1OiAnZDY3NWY5MDk5ZmJlZjAzYWE5ZmNkY2E0MDA5Mjg2ZjQzNWU1NjM2OWMzNzRkMDA0MmYwM2NjNjBiNDllNjkwYScsXG4gICAgICAgIHY6ICczYzA5MGU4OGVkNDJkYTBkZDBiYWRlMzVjOGQ2Yjg4YmMwNTAyODQ1MzZiOThlNWIyN2QzM2ZmNDVkYTk3NTViJyxcbiAgICAgICAgcjogJzdmMTYyMjRkYmY1YjAyYWRiNmMyMTM4MGZjYjJhOGVlMDAzMjNkYWFlNjJjYWMzNTc1YTRkMzI4ZmQyM2E5MDUnLFxuICAgICAgICBSOiAnOWJlMjIwOGVlMjhjZDRiMjU3N2E5YTY2ZjZhYWIxZWQ4YjA4YTMwMDk2OWVlYjliMjAzYTUyYWE1NGQyYzIzYycsXG4gICAgICAgIGNvbW1pdG1lbnQ6ICc0NDVjOGNiMWRlZTAxNjZiNmJkZDVhZDFkMGE1M2ZiZmU4NmM0ZDNhNDcwZjE4NDc0NTUzMGE4NjNlZWRmZjI4JyxcbiAgICAgIH0sXG4gICAgfSxcbiAgfTtcblxuICBjb25zdCB2YWxpZEJpdGdvVG9Vc2VyU2lnblNoYXJlID0ge1xuICAgIHhTaGFyZToge1xuICAgICAgaTogMyxcbiAgICAgIHk6ICc0ZDkzNDM5ODhlNjgxOTFhYWM5NDVhNjk2MzAzMWRkZGRlMzQ5MGY5MDIwZDA1NzFhNmU2YzZlMTVjY2EwMjk2JyxcbiAgICAgIHU6ICcxMzE1ZGJlMTgwNjk4MjViNGEyNzE4OGI4MTNlYWU3ZmYyOTE3YTYxNDQ5OWVkNTUzZTcwZDY1ZDRmYTQ4MjBiJyxcbiAgICAgIHI6ICdkMDUzOTM3NWU2NTY2ZjJmZTU0MGNiYTQ4YzVlNTZiZDFjZGY2OGNmZTFmMGQ1MjdkMmI3MzBmZTRlODc5ODA5JyxcbiAgICAgIFI6ICdjODgzZmUyYWU5YjhkYTE3NjRjYzM2YTUyNmNmYTFhMjFmODFkNjA0MzIwYjIwOTg2N2Y4ZGU5MjIzZjFkZTMyJyxcbiAgICB9LFxuICAgIHJTaGFyZXM6IHtcbiAgICAgIDE6IHtcbiAgICAgICAgaTogMSxcbiAgICAgICAgajogMyxcbiAgICAgICAgdTogJzljZTMyMDRhOGM5NzU3NzM4OTY3ZjNmODFiNDYzZDg3MjY3YmY2ZjJjMGU1ZWFmMjg0MzE2NzUzN2I4NzJiMGInLFxuICAgICAgICB2OiAnMDFlYTNmNDI1YjFhZGY4YWVjNmNmZTRmYzhmOWI5NDc1NWMzNDY1Nzk2NWYzMjM5NzY1NWRjZDc4NGYxYjUxNycsXG4gICAgICAgIHI6ICcwMzc1ZThjNWE1NjkxYTczYzIxZGYwMGQ0OWQ0MjNlM2Y4M2ZlMDhkN2I1ZDVhZjMzYzVjNmFhOWNhZTU5ZDBhJyxcbiAgICAgICAgUjogJ2M4ODNmZTJhZTliOGRhMTc2NGNjMzZhNTI2Y2ZhMWEyMWY4MWQ2MDQzMjBiMjA5ODY3ZjhkZTkyMjNmMWRlMzInLFxuICAgICAgICBjb21taXRtZW50OiAnNjJiMjFmOThiZjg4NTg0MWFkNDY5MTQ1MTkyZDRkZjA2OTdiM2Y0MmM1ODFlM2U5MjYzOTRlYWUwYjEwMWVjYicsXG4gICAgICB9LFxuICAgIH0sXG4gIH07XG5cbiAgY29uc3QgdHhSZXF1ZXN0ID0ge1xuICAgIHR4UmVxdWVzdElkOiAncmFuZG9tSWQnLFxuICAgIHVuc2lnbmVkVHhzOiBbeyBzaWduYWJsZUhleDogJ01QQyBvbiBhIEZyaWRheSBuaWdodCcsIHNlcmlhbGl6ZWRUeEhleDogJ01QQyBvbiBhIEZyaWRheSBuaWdodCcgfV0sXG4gICAgc2lnbmF0dXJlU2hhcmVzOiBbXG4gICAgICB7XG4gICAgICAgIGZyb206ICdiaXRnbycsXG4gICAgICAgIHRvOiAndXNlcicsXG4gICAgICAgIHNoYXJlOiB2YWxpZEJpdGdvVG9Vc2VyU2lnblNoYXJlLnJTaGFyZXNbMV0uciArIHZhbGlkQml0Z29Ub1VzZXJTaWduU2hhcmUuclNoYXJlc1sxXS5SLFxuICAgICAgfSxcbiAgICBdLFxuICB9O1xuXG4gIGJlZm9yZUVhY2goZnVuY3Rpb24gKCkge1xuICAgIHNhbmRib3ggPSBzaW5vbi5jcmVhdGVTYW5kYm94KCk7XG4gIH0pO1xuXG4gIGFmdGVyRWFjaChmdW5jdGlvbiAoKSB7XG4gICAgc2FuZGJveC5yZXN0b3JlKCk7XG4gIH0pO1xuXG4gIGJlZm9yZSgnaW5pdGlhbGl6ZXMgbXBjJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IGhkVHJlZSA9IGF3YWl0IEVkMjU1MTlCSVAzMi5pbml0aWFsaXplKCk7XG4gICAgTVBDID0gYXdhaXQgRWRkc2EuaW5pdGlhbGl6ZShoZFRyZWUpO1xuICB9KTtcblxuICBiZWZvcmUoYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgIGJpdGdvS2V5U2hhcmUgPSBhd2FpdCBNUEMua2V5U2hhcmUoMywgMiwgMyk7XG5cbiAgICB1c2VyR3BnS2V5ID0gYXdhaXQgb3BlbnBncC5nZW5lcmF0ZUtleSh7XG4gICAgICB1c2VySURzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiAndGVzdCcsXG4gICAgICAgICAgZW1haWw6ICd0ZXN0QHRlc3QuY29tJyxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgICBjdXJ2ZTogJ3NlY3AyNTZrMScsXG4gICAgfSk7XG5cbiAgICBiYWNrdXBHcGdLZXkgPSBhd2FpdCBvcGVucGdwLmdlbmVyYXRlS2V5KHtcbiAgICAgIHVzZXJJRHM6IFtcbiAgICAgICAge1xuICAgICAgICAgIG5hbWU6ICd0ZXN0QmFja3VwJyxcbiAgICAgICAgICBlbWFpbDogJ3Rlc3RCYWNrdXBAdGVzdC5jb20nLFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICAgIGN1cnZlOiAnc2VjcDI1NmsxJyxcbiAgICB9KTtcblxuICAgIGJpdGdvR3BnS2V5ID0gYXdhaXQgb3BlbnBncC5nZW5lcmF0ZUtleSh7XG4gICAgICB1c2VySURzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiAnYml0Z28nLFxuICAgICAgICAgIGVtYWlsOiAnYml0Z29AdGVzdC5jb20nLFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICAgIGN1cnZlOiAnc2VjcDI1NmsxJyxcbiAgICB9KTtcbiAgICBjb25zdCBjb25zdGFudHMgPSB7XG4gICAgICBtcGM6IHtcbiAgICAgICAgYml0Z29QdWJsaWNLZXk6IGJpdGdvR3BnS2V5LnB1YmxpY0tleSxcbiAgICAgIH0sXG4gICAgfTtcblxuICAgIGJpdGdvID0gVGVzdEJpdEdvLmRlY29yYXRlKEJpdEdvLCB7IGVudjogJ21vY2snIH0pO1xuICAgIGJpdGdvLmluaXRpYWxpemVUZXN0VmFycygpO1xuXG4gICAgYmFzZUNvaW4gPSBiaXRnby5jb2luKGNvaW5OYW1lKTtcblxuICAgIGJnVXJsID0gY29tbW9uLkVudmlyb25tZW50c1tiaXRnby5nZXRFbnYoKV0udXJpO1xuXG4gICAgLy8gVE9ETyhXUC0zNDYpOiBzZGstdGVzdCBtb2NrcyBjb25mbGljdCBzbyB3ZSBjYW4ndCB1c2UgcGVyc2lzdFxuICAgIG5vY2soYmdVcmwpLmdldCgnL2FwaS92MS9jbGllbnQvY29uc3RhbnRzJykudGltZXMoMjMpLnJlcGx5KDIwMCwgeyB0dGw6IDM2MDAsIGNvbnN0YW50cyB9KTtcblxuICAgIGNvbnN0IHdhbGxldERhdGEgPSB7XG4gICAgICBpZDogJzViMzQyNTJmMWJmMzQ5OTMwZTM0MDIwYTAwMDAwMDAwJyxcbiAgICAgIGNvaW46ICd0c29sJyxcbiAgICAgIGtleXM6IFtcbiAgICAgICAgJzViMzQyNGY5MWJmMzQ5OTMwZTM0MDE3NTAwMDAwMDAwJyxcbiAgICAgICAgJzViMzQyNGY5MWJmMzQ5OTMwZTM0MDE3NjAwMDAwMDAwJyxcbiAgICAgICAgJzViMzQyNGY5MWJmMzQ5OTMwZTM0MDE3NzAwMDAwMDAwJyxcbiAgICAgIF0sXG4gICAgICBjb2luU3BlY2lmaWM6IHt9LFxuICAgICAgbXVsdGlzaWdUeXBlOiAndHNzJyxcbiAgICB9O1xuICAgIHdhbGxldCA9IG5ldyBXYWxsZXQoYml0Z28sIGJhc2VDb2luLCB3YWxsZXREYXRhKTtcbiAgICB0c3NVdGlscyA9IG5ldyBUc3NVdGlscyhiaXRnbywgYmFzZUNvaW4sIHdhbGxldCk7XG4gIH0pO1xuXG4gIGFmdGVyKGZ1bmN0aW9uICgpIHtcbiAgICBub2NrLmNsZWFuQWxsKCk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdUU1Mga2V5IGNoYWluczonLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgaXQoJ3Nob3VsZCBnZW5lcmF0ZSBUU1Mga2V5IGNoYWlucycsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHVzZXJLZXlTaGFyZSA9IE1QQy5rZXlTaGFyZSgxLCAyLCAzKTtcbiAgICAgIGNvbnN0IGJhY2t1cEtleVNoYXJlID0gTVBDLmtleVNoYXJlKDIsIDIsIDMpO1xuXG4gICAgICBjb25zdCBub2NrZWRCaXRHb0tleWNoYWluID0gYXdhaXQgbm9ja0JpdGdvS2V5Y2hhaW4oe1xuICAgICAgICBjb2luOiBjb2luTmFtZSxcbiAgICAgICAgdXNlcktleVNoYXJlLFxuICAgICAgICBiYWNrdXBLZXlTaGFyZSxcbiAgICAgICAgYml0Z29LZXlTaGFyZSxcbiAgICAgICAgdXNlckdwZ0tleSxcbiAgICAgICAgYmFja3VwR3BnS2V5LFxuICAgICAgICBiaXRnb0dwZ0tleSxcbiAgICAgIH0pO1xuICAgICAgY29uc3Qgbm9ja2VkVXNlcktleWNoYWluID0gYXdhaXQgbm9ja1VzZXJLZXljaGFpbih7IGNvaW46IGNvaW5OYW1lIH0pO1xuICAgICAgYXdhaXQgbm9ja0JhY2t1cEtleWNoYWluKHsgY29pbjogY29pbk5hbWUgfSk7XG5cbiAgICAgIGNvbnN0IGJpdGdvS2V5Y2hhaW4gPSBhd2FpdCB0c3NVdGlscy5jcmVhdGVCaXRnb0tleWNoYWluKHtcbiAgICAgICAgdXNlckdwZ0tleSxcbiAgICAgICAgYmFja3VwR3BnS2V5LFxuICAgICAgICB1c2VyS2V5U2hhcmUsXG4gICAgICAgIGJhY2t1cEtleVNoYXJlLFxuICAgICAgfSk7XG4gICAgICBjb25zdCB1c2VyS2V5Y2hhaW4gPSBhd2FpdCB0c3NVdGlscy5jcmVhdGVVc2VyS2V5Y2hhaW4oe1xuICAgICAgICB1c2VyR3BnS2V5LFxuICAgICAgICBiYWNrdXBHcGdLZXksXG4gICAgICAgIHVzZXJLZXlTaGFyZSxcbiAgICAgICAgYmFja3VwS2V5U2hhcmUsXG4gICAgICAgIGJpdGdvS2V5Y2hhaW4sXG4gICAgICAgIHBhc3NwaHJhc2U6ICdwYXNzcGhyYXNlJyxcbiAgICAgIH0pO1xuICAgICAgY29uc3QgYmFja3VwS2V5Y2hhaW4gPSBhd2FpdCB0c3NVdGlscy5jcmVhdGVCYWNrdXBLZXljaGFpbih7XG4gICAgICAgIHVzZXJHcGdLZXksXG4gICAgICAgIGJhY2t1cEdwZ0tleSxcbiAgICAgICAgdXNlcktleVNoYXJlLFxuICAgICAgICBiYWNrdXBLZXlTaGFyZSxcbiAgICAgICAgYml0Z29LZXljaGFpbixcbiAgICAgICAgcGFzc3BocmFzZTogJ3Bhc3NwaHJhc2UnLFxuICAgICAgfSk7XG5cbiAgICAgIGJpdGdvS2V5Y2hhaW4uc2hvdWxkLmRlZXBFcXVhbChub2NrZWRCaXRHb0tleWNoYWluKTtcbiAgICAgIHVzZXJLZXljaGFpbi5zaG91bGQuZGVlcEVxdWFsKG5vY2tlZFVzZXJLZXljaGFpbik7XG5cbiAgICAgIC8vIHVuZW5jcnlwdGVkIGBwcnZgIHByb3BlcnR5IHNob3VsZCBleGlzdCBvbiBiYWNrdXAga2V5Y2hhaW5cbiAgICAgIEpTT04uc3RyaW5naWZ5KHtcbiAgICAgICAgdVNoYXJlOiBiYWNrdXBLZXlTaGFyZS51U2hhcmUsXG4gICAgICAgIGJpdGdvWVNoYXJlOiBiaXRnb0tleVNoYXJlLnlTaGFyZXNbMl0sXG4gICAgICAgIHVzZXJZU2hhcmU6IHVzZXJLZXlTaGFyZS55U2hhcmVzWzJdLFxuICAgICAgfSkuc2hvdWxkLmVxdWFsKGJhY2t1cEtleWNoYWluLnBydik7XG4gICAgICBzaG91bGQuZXhpc3QoYmFja3VwS2V5Y2hhaW4uZW5jcnlwdGVkUHJ2KTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgc2VuZCB3ZWJhdXRobkluZm8gKHdpdGggZW50ZXJwcmlzZUlkKSBvbiB0aGUgdXNlciBrZXljaGFpbiB3aGVuIHdlYmF1dGhuSW5mbyBpcyBwcm92aWRlZCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHVzZXJLZXlTaGFyZSA9IE1QQy5rZXlTaGFyZSgxLCAyLCAzKTtcbiAgICAgIGNvbnN0IGJhY2t1cEtleVNoYXJlID0gTVBDLmtleVNoYXJlKDIsIDIsIDMpO1xuXG4gICAgICAvLyBSZWFsIGNyeXB0byBkZXBzIChjb25zdGFudHMgdy8gYml0Z28gZ3BnIGtleSBmb3IgdmVyaWZ5V2FsbGV0U2lnbmF0dXJlcyArIGJpdGdvIGtleWNoYWluKSxcbiAgICAgIC8vIHRoZW4gY2FwdHVyZSB0aGUgdXNlciBrZXljaGFpbiBhZGQoKSBwYXJhbXMgYnkgc3R1YmJpbmcgYmFzZUNvaW4ua2V5Y2hhaW5zKCkuXG4gICAgICBub2NrLmNsZWFuQWxsKCk7XG4gICAgICBub2NrKGJnVXJsKVxuICAgICAgICAuZ2V0KCcvYXBpL3YxL2NsaWVudC9jb25zdGFudHMnKVxuICAgICAgICAudGltZXMoMjMpXG4gICAgICAgIC5yZXBseSgyMDAsIHsgdHRsOiAzNjAwLCBjb25zdGFudHM6IHsgbXBjOiB7IGJpdGdvUHVibGljS2V5OiBiaXRnb0dwZ0tleS5wdWJsaWNLZXkgfSB9IH0pO1xuICAgICAgYXdhaXQgbm9ja0JpdGdvS2V5Y2hhaW4oe1xuICAgICAgICBjb2luOiBjb2luTmFtZSxcbiAgICAgICAgdXNlcktleVNoYXJlLFxuICAgICAgICBiYWNrdXBLZXlTaGFyZSxcbiAgICAgICAgYml0Z29LZXlTaGFyZSxcbiAgICAgICAgdXNlckdwZ0tleSxcbiAgICAgICAgYmFja3VwR3BnS2V5LFxuICAgICAgICBiaXRnb0dwZ0tleSxcbiAgICAgIH0pO1xuICAgICAgY29uc3QgYml0Z29LZXljaGFpbiA9IGF3YWl0IHRzc1V0aWxzLmNyZWF0ZUJpdGdvS2V5Y2hhaW4oe1xuICAgICAgICB1c2VyR3BnS2V5LFxuICAgICAgICBiYWNrdXBHcGdLZXksXG4gICAgICAgIHVzZXJLZXlTaGFyZSxcbiAgICAgICAgYmFja3VwS2V5U2hhcmUsXG4gICAgICB9KTtcblxuICAgICAgY29uc3QgYWRkU3R1YiA9IHNhbmRib3guc3R1YigpLnJlc29sdmVzKHsgaWQ6ICcxJywgcHViOiAnJywgdHlwZTogJ3RzcycgfSk7XG4gICAgICBzYW5kYm94LnN0dWIoYmFzZUNvaW4sICdrZXljaGFpbnMnKS5yZXR1cm5zKHsgYWRkOiBhZGRTdHViIH0gYXMgdW5rbm93biBhcyBSZXR1cm5UeXBlPEJhc2VDb2luWydrZXljaGFpbnMnXT4pO1xuXG4gICAgICBjb25zdCBlbnRlcnByaXNlSWQgPSAnZW50ZXJwcmlzZV9pZCc7XG4gICAgICBjb25zdCB3ZWJhdXRobkluZm8gPSB7IG90cERldmljZUlkOiAnZGV2aWNlLTEyMycsIHByZlNhbHQ6ICdzYWx0LWFiYycsIHBhc3NwaHJhc2U6ICdwcmYtZGVyaXZlZC1wYXNzcGhyYXNlJyB9O1xuICAgICAgYXdhaXQgdHNzVXRpbHMuY3JlYXRlVXNlcktleWNoYWluKHtcbiAgICAgICAgdXNlckdwZ0tleSxcbiAgICAgICAgYmFja3VwR3BnS2V5LFxuICAgICAgICB1c2VyS2V5U2hhcmUsXG4gICAgICAgIGJhY2t1cEtleVNoYXJlLFxuICAgICAgICBiaXRnb0tleWNoYWluLFxuICAgICAgICBwYXNzcGhyYXNlOiAncGFzc3BocmFzZScsXG4gICAgICAgIHdlYmF1dGhuSW5mbyxcbiAgICAgICAgZW50ZXJwcmlzZTogZW50ZXJwcmlzZUlkLFxuICAgICAgfSk7XG5cbiAgICAgIC8vIFVzZXIga2V5Y2hhaW4gbXVzdCBjYXJyeSB3ZWJhdXRobkluZm8gKHRoZSBmaWVsZCB0aGUgYmFja2VuZCBQT1NUIC9rZXkgY29uc3VtZXMpLCBpbmNsdWRpbmdcbiAgICAgIC8vIGVudGVycHJpc2VJZCwgYW5kIG11c3QgTk9UIHVzZSB0aGUgZGVwcmVjYXRlZCB3ZWJhdXRobkRldmljZXMgYXJyYXkuXG4gICAgICBhc3NlcnQub2soYWRkU3R1Yi5jYWxsZWRPbmNlLCAna2V5Y2hhaW5zKCkuYWRkIHNob3VsZCBoYXZlIGJlZW4gY2FsbGVkIGZvciB0aGUgdXNlciBrZXljaGFpbicpO1xuICAgICAgY29uc3QgYm9keSA9IGFkZFN0dWIuZmlyc3RDYWxsLmFyZ3NbMF0gYXMgQWRkS2V5Y2hhaW5PcHRpb25zO1xuICAgICAgYXNzZXJ0Lm9rKGJvZHkud2ViYXV0aG5JbmZvLCAndXNlciBrZXljaGFpbiBib2R5IHNob3VsZCBpbmNsdWRlIHdlYmF1dGhuSW5mbycpO1xuICAgICAgYXNzZXJ0LmVxdWFsKGJvZHkud2ViYXV0aG5JbmZvLm90cERldmljZUlkLCB3ZWJhdXRobkluZm8ub3RwRGV2aWNlSWQpO1xuICAgICAgYXNzZXJ0LmVxdWFsKGJvZHkud2ViYXV0aG5JbmZvLnByZlNhbHQsIHdlYmF1dGhuSW5mby5wcmZTYWx0KTtcbiAgICAgIGFzc2VydC5lcXVhbChib2R5LndlYmF1dGhuSW5mby5lbnRlcnByaXNlSWQsIGVudGVycHJpc2VJZCk7XG4gICAgICBhc3NlcnQub2soYm9keS53ZWJhdXRobkluZm8uZW5jcnlwdGVkUHJ2LCAnZW5jcnlwdGVkUHJ2IHNob3VsZCBiZSBzZXQnKTtcbiAgICAgIGFzc2VydC5vayhhd2FpdCBiaXRnby5kZWNyeXB0KHsgaW5wdXQ6IGJvZHkud2ViYXV0aG5JbmZvLmVuY3J5cHRlZFBydiwgcGFzc3dvcmQ6IHdlYmF1dGhuSW5mby5wYXNzcGhyYXNlIH0pKTtcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChib2R5LndlYmF1dGhuRGV2aWNlcywgdW5kZWZpbmVkLCAnZGVwcmVjYXRlZCB3ZWJhdXRobkRldmljZXMgc2hvdWxkIG5vdCBiZSBzZW50Jyk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGdlbmVyYXRlIFRTUyBrZXkgY2hhaW5zIHdpdGhvdXQgcGFzc3BocmFzZScsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHVzZXJLZXlTaGFyZSA9IE1QQy5rZXlTaGFyZSgxLCAyLCAzKTtcbiAgICAgIGNvbnN0IGJhY2t1cEtleVNoYXJlID0gTVBDLmtleVNoYXJlKDIsIDIsIDMpO1xuXG4gICAgICBjb25zdCBub2NrZWRCaXRHb0tleWNoYWluID0gYXdhaXQgbm9ja0JpdGdvS2V5Y2hhaW4oe1xuICAgICAgICBjb2luOiBjb2luTmFtZSxcbiAgICAgICAgdXNlcktleVNoYXJlLFxuICAgICAgICBiYWNrdXBLZXlTaGFyZSxcbiAgICAgICAgYml0Z29LZXlTaGFyZSxcbiAgICAgICAgdXNlckdwZ0tleSxcbiAgICAgICAgLy8gcmV1c2luZyB0aGUgdXNlciBncGcga2V5IGFzIHRoZSBiYWNrdXAgZ3BnIGtleSwgaS5lLiB0aGUgdXNlciBpcyB0aGVpciBvd24gdGhlIGJhY2t1cCBwcm92aWRlclxuICAgICAgICBiYWNrdXBHcGdLZXksXG4gICAgICAgIGJpdGdvR3BnS2V5LFxuICAgICAgfSk7XG4gICAgICBjb25zdCBub2NrZWRVc2VyS2V5Y2hhaW4gPSBhd2FpdCBub2NrVXNlcktleWNoYWluKHsgY29pbjogY29pbk5hbWUgfSk7XG4gICAgICBhd2FpdCBub2NrQmFja3VwS2V5Y2hhaW4oeyBjb2luOiBjb2luTmFtZSB9KTtcblxuICAgICAgY29uc3QgYml0Z29LZXljaGFpbiA9IGF3YWl0IHRzc1V0aWxzLmNyZWF0ZUJpdGdvS2V5Y2hhaW4oe1xuICAgICAgICB1c2VyR3BnS2V5LFxuICAgICAgICBiYWNrdXBHcGdLZXksXG4gICAgICAgIHVzZXJLZXlTaGFyZSxcbiAgICAgICAgYmFja3VwS2V5U2hhcmUsXG4gICAgICB9KTtcbiAgICAgIGNvbnN0IHVzZXJLZXljaGFpbiA9IGF3YWl0IHRzc1V0aWxzLmNyZWF0ZVVzZXJLZXljaGFpbih7XG4gICAgICAgIHVzZXJHcGdLZXksXG4gICAgICAgIGJhY2t1cEdwZ0tleSxcbiAgICAgICAgdXNlcktleVNoYXJlLFxuICAgICAgICBiYWNrdXBLZXlTaGFyZSxcbiAgICAgICAgYml0Z29LZXljaGFpbixcbiAgICAgIH0pO1xuICAgICAgY29uc3QgYmFja3VwS2V5Y2hhaW4gPSBhd2FpdCB0c3NVdGlscy5jcmVhdGVCYWNrdXBLZXljaGFpbih7XG4gICAgICAgIHVzZXJHcGdLZXksXG4gICAgICAgIGJhY2t1cEdwZ0tleSxcbiAgICAgICAgdXNlcktleVNoYXJlLFxuICAgICAgICBiYWNrdXBLZXlTaGFyZSxcbiAgICAgICAgYml0Z29LZXljaGFpbixcbiAgICAgIH0pO1xuXG4gICAgICBiaXRnb0tleWNoYWluLnNob3VsZC5kZWVwRXF1YWwobm9ja2VkQml0R29LZXljaGFpbik7XG4gICAgICB1c2VyS2V5Y2hhaW4uc2hvdWxkLmRlZXBFcXVhbChub2NrZWRVc2VyS2V5Y2hhaW4pO1xuXG4gICAgICAvLyB1bmVuY3J5cHRlZCBgcHJ2YCBwcm9wZXJ0eSBzaG91bGQgZXhpc3Qgb24gYmFja3VwIGtleWNoYWluXG4gICAgICBKU09OLnN0cmluZ2lmeSh7XG4gICAgICAgIHVTaGFyZTogYmFja3VwS2V5U2hhcmUudVNoYXJlLFxuICAgICAgICBiaXRnb1lTaGFyZTogYml0Z29LZXlTaGFyZS55U2hhcmVzWzJdLFxuICAgICAgICB1c2VyWVNoYXJlOiB1c2VyS2V5U2hhcmUueVNoYXJlc1syXSxcbiAgICAgIH0pLnNob3VsZC5lcXVhbChiYWNrdXBLZXljaGFpbi5wcnYpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBnZW5lcmF0ZSBUU1Mga2V5IGNoYWlucyB3aXRoIG9wdGlvbmFsIHBhcmFtcycsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGVudGVycHJpc2UgPSAnZW50ZXJwcmlzZSc7XG5cbiAgICAgIGNvbnN0IHVzZXJLZXlTaGFyZSA9IE1QQy5rZXlTaGFyZSgxLCAyLCAzKTtcbiAgICAgIGNvbnN0IGJhY2t1cEtleVNoYXJlID0gTVBDLmtleVNoYXJlKDIsIDIsIDMpO1xuXG4gICAgICBjb25zdCBub2NrZWRCaXRHb0tleWNoYWluID0gYXdhaXQgbm9ja0JpdGdvS2V5Y2hhaW4oe1xuICAgICAgICBjb2luOiBjb2luTmFtZSxcbiAgICAgICAgdXNlcktleVNoYXJlLFxuICAgICAgICBiYWNrdXBLZXlTaGFyZSxcbiAgICAgICAgYml0Z29LZXlTaGFyZSxcbiAgICAgICAgdXNlckdwZ0tleSxcbiAgICAgICAgYmFja3VwR3BnS2V5LFxuICAgICAgICBiaXRnb0dwZ0tleSxcbiAgICAgIH0pO1xuICAgICAgY29uc3Qgbm9ja2VkVXNlcktleWNoYWluID0gYXdhaXQgbm9ja1VzZXJLZXljaGFpbih7IGNvaW46IGNvaW5OYW1lIH0pO1xuICAgICAgYXdhaXQgbm9ja0JhY2t1cEtleWNoYWluKHsgY29pbjogY29pbk5hbWUgfSk7XG5cbiAgICAgIGNvbnN0IGJpdGdvS2V5Y2hhaW4gPSBhd2FpdCB0c3NVdGlscy5jcmVhdGVCaXRnb0tleWNoYWluKHtcbiAgICAgICAgdXNlckdwZ0tleSxcbiAgICAgICAgYmFja3VwR3BnS2V5LFxuICAgICAgICB1c2VyS2V5U2hhcmUsXG4gICAgICAgIGJhY2t1cEtleVNoYXJlLFxuICAgICAgICBlbnRlcnByaXNlLFxuICAgICAgfSk7XG4gICAgICBjb25zdCB1c2VyS2V5Y2hhaW4gPSBhd2FpdCB0c3NVdGlscy5jcmVhdGVVc2VyS2V5Y2hhaW4oe1xuICAgICAgICB1c2VyR3BnS2V5LFxuICAgICAgICBiYWNrdXBHcGdLZXksXG4gICAgICAgIHVzZXJLZXlTaGFyZSxcbiAgICAgICAgYmFja3VwS2V5U2hhcmUsXG4gICAgICAgIGJpdGdvS2V5Y2hhaW4sXG4gICAgICAgIHBhc3NwaHJhc2U6ICdwYXNzcGhyYXNlJyxcbiAgICAgICAgb3JpZ2luYWxQYXNzY29kZUVuY3J5cHRpb25Db2RlOiAnb3JpZ2luYWxQYXNzY29kZUVuY3J5cHRpb25Db2RlJyxcbiAgICAgIH0pO1xuICAgICAgY29uc3QgYmFja3VwS2V5Y2hhaW4gPSBhd2FpdCB0c3NVdGlscy5jcmVhdGVCYWNrdXBLZXljaGFpbih7XG4gICAgICAgIHVzZXJHcGdLZXksXG4gICAgICAgIGJhY2t1cEdwZ0tleSxcbiAgICAgICAgdXNlcktleVNoYXJlLFxuICAgICAgICBiYWNrdXBLZXlTaGFyZSxcbiAgICAgICAgYml0Z29LZXljaGFpbixcbiAgICAgICAgcGFzc3BocmFzZTogJ3Bhc3NwaHJhc2UnLFxuICAgICAgfSk7XG5cbiAgICAgIGJpdGdvS2V5Y2hhaW4uc2hvdWxkLmRlZXBFcXVhbChub2NrZWRCaXRHb0tleWNoYWluKTtcbiAgICAgIHVzZXJLZXljaGFpbi5zaG91bGQuZGVlcEVxdWFsKG5vY2tlZFVzZXJLZXljaGFpbik7XG5cbiAgICAgIC8vIHVuZW5jcnlwdGVkIGBwcnZgIHByb3BlcnR5IHNob3VsZCBleGlzdCBvbiBiYWNrdXAga2V5Y2hhaW5cbiAgICAgIEpTT04uc3RyaW5naWZ5KHtcbiAgICAgICAgdVNoYXJlOiBiYWNrdXBLZXlTaGFyZS51U2hhcmUsXG4gICAgICAgIGJpdGdvWVNoYXJlOiBiaXRnb0tleVNoYXJlLnlTaGFyZXNbMl0sXG4gICAgICAgIHVzZXJZU2hhcmU6IHVzZXJLZXlTaGFyZS55U2hhcmVzWzJdLFxuICAgICAgfSkuc2hvdWxkLmVxdWFsKGJhY2t1cEtleWNoYWluLnBydik7XG4gICAgICBzaG91bGQuZXhpc3QoYmFja3VwS2V5Y2hhaW4uZW5jcnlwdGVkUHJ2KTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgZmFpbCB0byBnZW5lcmF0ZSBUU1Mga2V5Y2hhaW5zIHdoZW4gcmVjZWl2ZWQgaW52YWxpZCBudW1iZXIgb2Ygd2FsbGV0IHNpZ25hdHVyZXMnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCB1c2VyS2V5U2hhcmUgPSBNUEMua2V5U2hhcmUoMSwgMiwgMyk7XG4gICAgICBjb25zdCBiYWNrdXBLZXlTaGFyZSA9IE1QQy5rZXlTaGFyZSgyLCAyLCAzKTtcblxuICAgICAgY29uc3QgYml0Z29LZXljaGFpbiA9IGF3YWl0IGdlbmVyYXRlQml0Z29LZXljaGFpbih7XG4gICAgICAgIGNvaW46IGNvaW5OYW1lLFxuICAgICAgICB1c2VyS2V5U2hhcmUsXG4gICAgICAgIGJhY2t1cEtleVNoYXJlLFxuICAgICAgICBiaXRnb0tleVNoYXJlLFxuICAgICAgICB1c2VyR3BnS2V5LFxuICAgICAgICBiYWNrdXBHcGdLZXksXG4gICAgICAgIGJpdGdvR3BnS2V5LFxuICAgICAgfSk7XG5cbiAgICAgIGNvbnN0IGNlcnRzU3RyaW5nID0gYXdhaXQgY3JlYXRlU2hhcmVkRGF0YVByb29mKGJpdGdvR3BnS2V5LnByaXZhdGVLZXksIHVzZXJHcGdLZXkucHVibGljS2V5LCBbXSk7XG4gICAgICBjb25zdCBjZXJ0c0tleSA9IGF3YWl0IG9wZW5wZ3AucmVhZEtleSh7IGFybW9yZWRLZXk6IGNlcnRzU3RyaW5nIH0pO1xuICAgICAgY29uc3QgZmluYWxLZXkgPSBuZXcgb3BlbnBncC5QYWNrZXRMaXN0KCk7XG4gICAgICBjZXJ0c0tleS50b1BhY2tldExpc3QoKS5mb3JFYWNoKChwYWNrZXQpID0+IGZpbmFsS2V5LnB1c2gocGFja2V0KSk7XG4gICAgICAvLyB0aGUgdW5kZXJseWluZyBmdW5jdGlvbiBvbmx5IHJlcXVpcmVzIHR3byBhcmd1bWVudHMgYnV0IHRoZSBhY2NvcmRpbmcgLmQudHMgZmlsZSBmb3Igb3BlbnBncCBoYXMgdGhlIGZ1cnRoZXJcbiAgICAgIC8vIGFyZ3VtZW50cyBtYXJrZWQgYXMgbWFuZGF0b3J5IGFzIHdlbGwuXG4gICAgICAvLyBPbmNlIHRoZSBmb2xsb3dpbmcgUFIgaGFzIGJlZW4gbWVyZ2VkIGFuZCByZWxlYXNlZCB3ZSBubyBsb25nZXIgbmVlZCB0aGUgdHMtaWdub3JlOlxuICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL29wZW5wZ3Bqcy9vcGVucGdwanMvcHVsbC8xNTc2XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L2Jhbi10cy1jb21tZW50XG4gICAgICAvLyBAdHMtaWdub3JlXG4gICAgICBiaXRnb0tleWNoYWluLndhbGxldEhTTUdQR1B1YmxpY0tleVNpZ3MgPSBvcGVucGdwLmFybW9yKG9wZW5wZ3AuZW51bXMuYXJtb3IucHVibGljS2V5LCBmaW5hbEtleS53cml0ZSgpKTtcblxuICAgICAgYXdhaXQgdHNzVXRpbHNcbiAgICAgICAgLnZlcmlmeVdhbGxldFNpZ25hdHVyZXModXNlckdwZ0tleS5wdWJsaWNLZXksIGJhY2t1cEdwZ0tleS5wdWJsaWNLZXksIGJpdGdvS2V5Y2hhaW4sICcnLCAxKVxuICAgICAgICAuc2hvdWxkLmJlLnJlamVjdGVkV2l0aCgnSW52YWxpZCB3YWxsZXQgc2lnbmF0dXJlcycpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBmYWlsIHRvIGdlbmVyYXRlIFRTUyBrZXljaGFpbnMgd2hlbiB3YWxsZXQgc2lnbmF0dXJlIGZpbmdlcnByaW50cyBkbyBub3QgbWF0Y2ggcGFzc2VkIHVzZXIvYmFja3VwIGZpbmdlcnByaW50cycsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHVzZXJLZXlTaGFyZSA9IE1QQy5rZXlTaGFyZSgxLCAyLCAzKTtcbiAgICAgIGNvbnN0IGJhY2t1cEtleVNoYXJlID0gTVBDLmtleVNoYXJlKDIsIDIsIDMpO1xuXG4gICAgICBjb25zdCBiaXRnb0tleWNoYWluID0gYXdhaXQgZ2VuZXJhdGVCaXRnb0tleWNoYWluKHtcbiAgICAgICAgY29pbjogY29pbk5hbWUsXG4gICAgICAgIHVzZXJLZXlTaGFyZSxcbiAgICAgICAgYmFja3VwS2V5U2hhcmUsXG4gICAgICAgIGJpdGdvS2V5U2hhcmUsXG4gICAgICAgIHVzZXJHcGdLZXksXG4gICAgICAgIGJhY2t1cEdwZ0tleSxcbiAgICAgICAgYml0Z29HcGdLZXksXG4gICAgICB9KTtcblxuICAgICAgLy8gdXNpbmcgdGhlIGJhY2t1cCBncGcgaGVyZSBpbnN0ZWFkIG9mIHRoZSB1c2VyIGdwZyBrZXkgdG8gc2ltdWxhdGUgdGhhdCB0aGUgZmlyc3Qgc2lnbmF0dXJlIGhhcyBhIGRpZmZlcmVudFxuICAgICAgLy8gZmluZ2VycHJpbnQgZnJvbSB0aGUgcGFzc2VkIGluIGZpcnN0IGdwZyBrZXlcbiAgICAgIGF3YWl0IHRzc1V0aWxzXG4gICAgICAgIC52ZXJpZnlXYWxsZXRTaWduYXR1cmVzKGJhY2t1cEdwZ0tleS5wdWJsaWNLZXksIGJhY2t1cEdwZ0tleS5wdWJsaWNLZXksIGJpdGdvS2V5Y2hhaW4sICcnLCAxKVxuICAgICAgICAuc2hvdWxkLmJlLnJlamVjdGVkV2l0aChcbiAgICAgICAgICBgZmlyc3Qgd2FsbGV0IHNpZ25hdHVyZSdzIGZpbmdlcnByaW50IGRvZXMgbm90IG1hdGNoIHBhc3NlZCB1c2VyIGdwZyBrZXkncyBmaW5nZXJwcmludGBcbiAgICAgICAgKTtcblxuICAgICAgLy8gdXNpbmcgdGhlIHVzZXIgZ3BnIGhlcmUgaW5zdGVhZCBvZiB0aGUgYmFja3VwIGdwZyBrZXkgdG8gc2ltdWxhdGUgdGhhdCB0aGUgc2Vjb25kIHNpZ25hdHVyZSBoYXMgYSBkaWZmZXJlbnRcbiAgICAgIC8vIGZpbmdlcnByaW50IGZyb20gdGhlIHBhc3NlZCBpbiBzZWNvbmQgZ3BnIGtleVxuICAgICAgYXdhaXQgdHNzVXRpbHNcbiAgICAgICAgLnZlcmlmeVdhbGxldFNpZ25hdHVyZXModXNlckdwZ0tleS5wdWJsaWNLZXksIHVzZXJHcGdLZXkucHVibGljS2V5LCBiaXRnb0tleWNoYWluLCAnJywgMSlcbiAgICAgICAgLnNob3VsZC5iZS5yZWplY3RlZFdpdGgoXG4gICAgICAgICAgYHNlY29uZCB3YWxsZXQgc2lnbmF0dXJlJ3MgZmluZ2VycHJpbnQgZG9lcyBub3QgbWF0Y2ggcGFzc2VkIGJhY2t1cCBncGcga2V5J3MgZmluZ2VycHJpbnRgXG4gICAgICAgICk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGZhaWwgdG8gZ2VuZXJhdGUgVFNTIGtleWNoYWlucyB3aGVuIHdhbGxldCBzaWduYXR1cmUgaXMgZm9yIGRpZmZlcmVudCBrZXkgc2hhcmUnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCB1c2VyS2V5U2hhcmUgPSBNUEMua2V5U2hhcmUoMSwgMiwgMyk7XG4gICAgICBjb25zdCBiYWNrdXBLZXlTaGFyZSA9IE1QQy5rZXlTaGFyZSgyLCAyLCAzKTtcbiAgICAgIGNvbnN0IGN1c3RvbUJpdGdvS2V5U2hhcmUgPSBNUEMua2V5U2hhcmUoMywgMiwgMyk7XG5cbiAgICAgIGNvbnN0IGJpdGdvS2V5Y2hhaW4xID0gYXdhaXQgZ2VuZXJhdGVCaXRnb0tleWNoYWluKHtcbiAgICAgICAgY29pbjogY29pbk5hbWUsXG4gICAgICAgIHVzZXJLZXlTaGFyZSxcbiAgICAgICAgYmFja3VwS2V5U2hhcmUsXG4gICAgICAgIGJpdGdvS2V5U2hhcmUsXG4gICAgICAgIHVzZXJHcGdLZXksXG4gICAgICAgIGJhY2t1cEdwZ0tleSxcbiAgICAgICAgYml0Z29HcGdLZXksXG4gICAgICB9KTtcbiAgICAgIGNvbnN0IGJpdGdvS2V5Y2hhaW4yID0gYXdhaXQgZ2VuZXJhdGVCaXRnb0tleWNoYWluKHtcbiAgICAgICAgY29pbjogY29pbk5hbWUsXG4gICAgICAgIHVzZXJLZXlTaGFyZSxcbiAgICAgICAgYmFja3VwS2V5U2hhcmUsXG4gICAgICAgIGJpdGdvS2V5U2hhcmU6IGN1c3RvbUJpdGdvS2V5U2hhcmUsXG4gICAgICAgIHVzZXJHcGdLZXksXG4gICAgICAgIGJhY2t1cEdwZ0tleSxcbiAgICAgICAgYml0Z29HcGdLZXksXG4gICAgICB9KTtcblxuICAgICAgLy8gdXNpbmcgdGhlIG90aGVyIGJpdGdvIGtleWNoYWlucyBjb21tb24ga2V5Y2hhaW4gYW5kIHdhbGxldEhTTUdQR1B1YmxpY0tleVNpZ3Mgc28gdGhhdCB0aGUgdmVyaWZpY2F0aW9uIG9mIHRoZVxuICAgICAgLy8gY29tbW1vbiBrZXljaGFpbiBwYXNzZXMgYnV0IGZhaWxzIGZvciB0aGUgYml0Z28gdG8gdXNlci8gYmFja3VwIHNoYXJlc1xuICAgICAgYml0Z29LZXljaGFpbjEuY29tbW9uS2V5Y2hhaW4gPSBiaXRnb0tleWNoYWluMi5jb21tb25LZXljaGFpbjtcbiAgICAgIGJpdGdvS2V5Y2hhaW4xLndhbGxldEhTTUdQR1B1YmxpY0tleVNpZ3MgPSBiaXRnb0tleWNoYWluMi53YWxsZXRIU01HUEdQdWJsaWNLZXlTaWdzO1xuXG4gICAgICBhd2FpdCB0c3NVdGlsc1xuICAgICAgICAuY3JlYXRlVXNlcktleWNoYWluKHtcbiAgICAgICAgICB1c2VyR3BnS2V5LFxuICAgICAgICAgIGJhY2t1cEdwZ0tleSxcbiAgICAgICAgICB1c2VyS2V5U2hhcmUsXG4gICAgICAgICAgYmFja3VwS2V5U2hhcmUsXG4gICAgICAgICAgYml0Z29LZXljaGFpbjogYml0Z29LZXljaGFpbjEsXG4gICAgICAgIH0pXG4gICAgICAgIC5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKCdiaXRnbyBzaGFyZSBtaXNtYXRjaCcpO1xuXG4gICAgICBhd2FpdCB0c3NVdGlsc1xuICAgICAgICAuY3JlYXRlQmFja3VwS2V5Y2hhaW4oe1xuICAgICAgICAgIHVzZXJHcGdLZXksXG4gICAgICAgICAgYmFja3VwR3BnS2V5LFxuICAgICAgICAgIHVzZXJLZXlTaGFyZSxcbiAgICAgICAgICBiYWNrdXBLZXlTaGFyZSxcbiAgICAgICAgICBiaXRnb0tleWNoYWluOiBiaXRnb0tleWNoYWluMSxcbiAgICAgICAgfSlcbiAgICAgICAgLnNob3VsZC5iZS5yZWplY3RlZFdpdGgoJ2JpdGdvIHNoYXJlIG1pc21hdGNoJyk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGZhaWwgdG8gZ2VuZXJhdGUgVFNTIGtleSBjaGFpbnMgd2hlbiBjb21tb24ga2V5Y2hhaW5zIGRvIG5vdCBtYXRjaCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHVzZXJLZXlTaGFyZSA9IE1QQy5rZXlTaGFyZSgxLCAyLCAzKTtcbiAgICAgIGNvbnN0IGJhY2t1cEtleVNoYXJlID0gTVBDLmtleVNoYXJlKDIsIDIsIDMpO1xuXG4gICAgICBjb25zdCBub2NrZWRCaXRHb0tleWNoYWluID0gYXdhaXQgbm9ja0JpdGdvS2V5Y2hhaW4oe1xuICAgICAgICBjb2luOiBjb2luTmFtZSxcbiAgICAgICAgdXNlcktleVNoYXJlLFxuICAgICAgICBiYWNrdXBLZXlTaGFyZSxcbiAgICAgICAgYml0Z29LZXlTaGFyZSxcbiAgICAgICAgdXNlckdwZ0tleSxcbiAgICAgICAgYmFja3VwR3BnS2V5LFxuICAgICAgICBiaXRnb0dwZ0tleSxcbiAgICAgIH0pO1xuICAgICAgY29uc3QgYml0Z29LZXljaGFpbiA9IGF3YWl0IHRzc1V0aWxzLmNyZWF0ZUJpdGdvS2V5Y2hhaW4oe1xuICAgICAgICB1c2VyR3BnS2V5LFxuICAgICAgICBiYWNrdXBHcGdLZXksXG4gICAgICAgIHVzZXJLZXlTaGFyZSxcbiAgICAgICAgYmFja3VwS2V5U2hhcmUsXG4gICAgICB9KTtcbiAgICAgIGJpdGdvS2V5Y2hhaW4uc2hvdWxkLmRlZXBFcXVhbChub2NrZWRCaXRHb0tleWNoYWluKTtcblxuICAgICAgYXdhaXQgdHNzVXRpbHNcbiAgICAgICAgLmNyZWF0ZVVzZXJLZXljaGFpbih7XG4gICAgICAgICAgdXNlckdwZ0tleSxcbiAgICAgICAgICBiYWNrdXBHcGdLZXksXG4gICAgICAgICAgdXNlcktleVNoYXJlLFxuICAgICAgICAgIGJhY2t1cEtleVNoYXJlOiBNUEMua2V5U2hhcmUoMiwgMiwgMyksXG4gICAgICAgICAgYml0Z29LZXljaGFpbixcbiAgICAgICAgICBwYXNzcGhyYXNlOiAncGFzc3BocmFzZScsXG4gICAgICAgIH0pXG4gICAgICAgIC5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKCdGYWlsZWQgdG8gY3JlYXRlIHVzZXIga2V5Y2hhaW4gLSBjb21tb25LZXljaGFpbnMgZG8gbm90IG1hdGNoLicpO1xuICAgICAgYXdhaXQgdHNzVXRpbHNcbiAgICAgICAgLmNyZWF0ZVVzZXJLZXljaGFpbih7XG4gICAgICAgICAgdXNlckdwZ0tleSxcbiAgICAgICAgICBiYWNrdXBHcGdLZXksXG4gICAgICAgICAgdXNlcktleVNoYXJlOiBNUEMua2V5U2hhcmUoMSwgMiwgMyksXG4gICAgICAgICAgYmFja3VwS2V5U2hhcmUsXG4gICAgICAgICAgYml0Z29LZXljaGFpbixcbiAgICAgICAgICBwYXNzcGhyYXNlOiAncGFzc3BocmFzZScsXG4gICAgICAgIH0pXG4gICAgICAgIC5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKCdGYWlsZWQgdG8gY3JlYXRlIHVzZXIga2V5Y2hhaW4gLSBjb21tb25LZXljaGFpbnMgZG8gbm90IG1hdGNoLicpO1xuXG4gICAgICBhd2FpdCB0c3NVdGlsc1xuICAgICAgICAuY3JlYXRlQmFja3VwS2V5Y2hhaW4oe1xuICAgICAgICAgIHVzZXJHcGdLZXksXG4gICAgICAgICAgYmFja3VwR3BnS2V5LFxuICAgICAgICAgIHVzZXJLZXlTaGFyZTogTVBDLmtleVNoYXJlKDEsIDIsIDMpLFxuICAgICAgICAgIGJhY2t1cEtleVNoYXJlLFxuICAgICAgICAgIGJpdGdvS2V5Y2hhaW4sXG4gICAgICAgICAgcGFzc3BocmFzZTogJ3Bhc3NwaHJhc2UnLFxuICAgICAgICB9KVxuICAgICAgICAuc2hvdWxkLmJlLnJlamVjdGVkV2l0aCgnRmFpbGVkIHRvIGNyZWF0ZSBiYWNrdXAga2V5Y2hhaW4gLSBjb21tb25LZXljaGFpbnMgZG8gbm90IG1hdGNoLicpO1xuICAgICAgYXdhaXQgdHNzVXRpbHNcbiAgICAgICAgLmNyZWF0ZUJhY2t1cEtleWNoYWluKHtcbiAgICAgICAgICB1c2VyR3BnS2V5LFxuICAgICAgICAgIGJhY2t1cEdwZ0tleSxcbiAgICAgICAgICB1c2VyS2V5U2hhcmUsXG4gICAgICAgICAgYmFja3VwS2V5U2hhcmU6IE1QQy5rZXlTaGFyZSgyLCAyLCAzKSxcbiAgICAgICAgICBiaXRnb0tleWNoYWluLFxuICAgICAgICAgIHBhc3NwaHJhc2U6ICdwYXNzcGhyYXNlJyxcbiAgICAgICAgfSlcbiAgICAgICAgLnNob3VsZC5iZS5yZWplY3RlZFdpdGgoJ0ZhaWxlZCB0byBjcmVhdGUgYmFja3VwIGtleWNoYWluIC0gY29tbW9uS2V5Y2hhaW5zIGRvIG5vdCBtYXRjaC4nKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgZ2VuZXJhdGUgVFNTIGtleSBjaGFpbnMgd2l0aCB2MiBlbmNyeXB0aW9uIGVudmVsb3BlcycsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHBhc3NwaHJhc2UgPSAncGFzc3BocmFzZSc7XG4gICAgICBjb25zdCB1c2VyS2V5U2hhcmUgPSBNUEMua2V5U2hhcmUoMSwgMiwgMyk7XG4gICAgICBjb25zdCBiYWNrdXBLZXlTaGFyZSA9IE1QQy5rZXlTaGFyZSgyLCAyLCAzKTtcblxuICAgICAgYXdhaXQgbm9ja0JpdGdvS2V5Y2hhaW4oe1xuICAgICAgICBjb2luOiBjb2luTmFtZSxcbiAgICAgICAgdXNlcktleVNoYXJlLFxuICAgICAgICBiYWNrdXBLZXlTaGFyZSxcbiAgICAgICAgYml0Z29LZXlTaGFyZSxcbiAgICAgICAgdXNlckdwZ0tleSxcbiAgICAgICAgYmFja3VwR3BnS2V5LFxuICAgICAgICBiaXRnb0dwZ0tleSxcbiAgICAgIH0pO1xuICAgICAgYXdhaXQgbm9ja1VzZXJLZXljaGFpbih7IGNvaW46IGNvaW5OYW1lIH0pO1xuICAgICAgYXdhaXQgbm9ja0JhY2t1cEtleWNoYWluKHsgY29pbjogY29pbk5hbWUgfSk7XG5cbiAgICAgIGNvbnN0IGJpdGdvS2V5Y2hhaW4gPSBhd2FpdCB0c3NVdGlscy5jcmVhdGVCaXRnb0tleWNoYWluKHtcbiAgICAgICAgdXNlckdwZ0tleSxcbiAgICAgICAgYmFja3VwR3BnS2V5LFxuICAgICAgICB1c2VyS2V5U2hhcmUsXG4gICAgICAgIGJhY2t1cEtleVNoYXJlLFxuICAgICAgfSk7XG4gICAgICBjb25zdCB1c2VyS2V5Y2hhaW4gPSBhd2FpdCB0c3NVdGlscy5jcmVhdGVVc2VyS2V5Y2hhaW4oe1xuICAgICAgICB1c2VyR3BnS2V5LFxuICAgICAgICBiYWNrdXBHcGdLZXksXG4gICAgICAgIHVzZXJLZXlTaGFyZSxcbiAgICAgICAgYmFja3VwS2V5U2hhcmUsXG4gICAgICAgIGJpdGdvS2V5Y2hhaW4sXG4gICAgICAgIHBhc3NwaHJhc2UsXG4gICAgICAgIGVuY3J5cHRpb25WZXJzaW9uOiAyLFxuICAgICAgfSk7XG5cbiAgICAgIHNob3VsZC5leGlzdCh1c2VyS2V5Y2hhaW4uZW5jcnlwdGVkUHJ2KTtcbiAgICAgIGNvbnN0IGVudmVsb3BlID0gSlNPTi5wYXJzZSh1c2VyS2V5Y2hhaW4uZW5jcnlwdGVkUHJ2ISk7XG4gICAgICBlbnZlbG9wZS52LnNob3VsZC5lcXVhbCgyKTtcblxuICAgICAgY29uc3QgZGVjcnlwdGVkID0gYXdhaXQgYml0Z28uZGVjcnlwdCh7IGlucHV0OiB1c2VyS2V5Y2hhaW4uZW5jcnlwdGVkUHJ2ISwgcGFzc3dvcmQ6IHBhc3NwaHJhc2UgfSk7XG4gICAgICBzaG91bGQuZXhpc3QoZGVjcnlwdGVkKTtcbiAgICAgIGNvbnN0IHBhcnNlZDogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSBKU09OLnBhcnNlKGRlY3J5cHRlZCk7XG4gICAgICBzaG91bGQuZXhpc3QocGFyc2VkLnVTaGFyZSk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCd2MiBlbmNyeXB0aW9uIChFZERTQSBzaWduaW5nIGRpc3BhdGNoKScsIGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCBzaWduaW5nVHhSZXF1ZXN0OiBUeFJlcXVlc3QgPSB7XG4gICAgICB0eFJlcXVlc3RJZDogJ3YyLXNpZ25pbmctdGVzdCcsXG4gICAgICB1bnNpZ25lZFR4czogW1xuICAgICAgICB7XG4gICAgICAgICAgc2VyaWFsaXplZFR4SGV4OiAndGVzdC1wYXlsb2FkJyxcbiAgICAgICAgICBzaWduYWJsZUhleDogJ2RlYWRiZWVmJyxcbiAgICAgICAgICBkZXJpdmF0aW9uUGF0aDogJ20vMCcsXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgICAgZGF0ZTogbmV3IERhdGUoKS50b0lTT1N0cmluZygpLFxuICAgICAgaW50ZW50OiB7IGludGVudFR5cGU6ICdwYXltZW50JyB9LFxuICAgICAgbGF0ZXN0OiB0cnVlLFxuICAgICAgc3RhdGU6ICdwZW5kaW5nVXNlclNpZ25hdHVyZScsXG4gICAgICB3YWxsZXRUeXBlOiAnaG90JyxcbiAgICAgIHdhbGxldElkOiAnd2FsbGV0SWQnLFxuICAgICAgcG9saWNpZXNDaGVja2VkOiB0cnVlLFxuICAgICAgdmVyc2lvbjogMSxcbiAgICAgIHVzZXJJZDogJ3VzZXJJZCcsXG4gICAgfTtcblxuICAgIGl0KCd2MiBSLXNoYXJlIHJvdW5kLXRyaXA6IGVuY3J5cHQgdmlhIGNvbW1pdG1lbnQsIHZlcmlmeSBlbnZlbG9wZSwgZGVjcnlwdCB2aWEgY3JlYXRlUlNoYXJlJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgcGFzc3BocmFzZSA9ICd0ZXN0LXBhc3NwaHJhc2UnO1xuICAgICAgY29uc3QgcHJ2ID0gSlNPTi5zdHJpbmdpZnkodmFsaWRVc2VyU2lnbmluZ01hdGVyaWFsKTtcblxuICAgICAgLy8gMS4gRW5jcnlwdCBwcnYgd2l0aCB2MlxuICAgICAgY29uc3QgZW5jcnlwdGVkUHJ2ID0gYXdhaXQgYml0Z28uZW5jcnlwdCh7XG4gICAgICAgIGlucHV0OiBwcnYsXG4gICAgICAgIHBhc3N3b3JkOiBwYXNzcGhyYXNlLFxuICAgICAgICBlbmNyeXB0aW9uVmVyc2lvbjogMixcbiAgICAgIH0pO1xuICAgICAgSlNPTi5wYXJzZShlbmNyeXB0ZWRQcnYpLnYuc2hvdWxkLmVxdWFsKDIpO1xuXG4gICAgICAvLyAyLiBDcmVhdGUgY29tbWl0bWVudCAtLSBSLXNoYXJlIHNob3VsZCBiZSBhIHYyIGVudmVsb3BlXG4gICAgICBjb25zdCBjb21taXRSZXN1bHQgPSBhd2FpdCB0c3NVdGlscy5jcmVhdGVDb21taXRtZW50U2hhcmVGcm9tVHhSZXF1ZXN0KHtcbiAgICAgICAgdHhSZXF1ZXN0OiBzaWduaW5nVHhSZXF1ZXN0LFxuICAgICAgICBwcnYsXG4gICAgICAgIHdhbGxldFBhc3NwaHJhc2U6IHBhc3NwaHJhc2UsXG4gICAgICAgIGJpdGdvR3BnUHViS2V5OiBiaXRnb0dwZ0tleS5wdWJsaWNLZXksXG4gICAgICAgIGVuY3J5cHRlZFBydixcbiAgICAgIH0pO1xuXG4gICAgICBjb25zdCByU2hhcmVFbnZlbG9wZSA9IEpTT04ucGFyc2UoY29tbWl0UmVzdWx0LmVuY3J5cHRlZFVzZXJUb0JpdGdvUlNoYXJlLnNoYXJlKTtcbiAgICAgIHJTaGFyZUVudmVsb3BlLnYuc2hvdWxkLmVxdWFsKDIpO1xuICAgICAgclNoYXJlRW52ZWxvcGUuc2hvdWxkLmhhdmUucHJvcGVydHkoJ2hrZGZTYWx0Jyk7XG5cbiAgICAgIC8vIDMuIFJvdW5kLXRyaXA6IGRlY3J5cHQgdGhlIHYyIFItc2hhcmVcbiAgICAgIGNvbnN0IHsgclNoYXJlIH0gPSBhd2FpdCB0c3NVdGlscy5jcmVhdGVSU2hhcmVGcm9tVHhSZXF1ZXN0KHtcbiAgICAgICAgdHhSZXF1ZXN0OiBzaWduaW5nVHhSZXF1ZXN0LFxuICAgICAgICB3YWxsZXRQYXNzcGhyYXNlOiBwYXNzcGhyYXNlLFxuICAgICAgICBlbmNyeXB0ZWRVc2VyVG9CaXRnb1JTaGFyZTogY29tbWl0UmVzdWx0LmVuY3J5cHRlZFVzZXJUb0JpdGdvUlNoYXJlLFxuICAgICAgfSk7XG5cbiAgICAgIHNob3VsZC5leGlzdChyU2hhcmUueFNoYXJlKTtcbiAgICAgIHNob3VsZC5leGlzdChyU2hhcmUuclNoYXJlcyk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdzaWduVHhSZXF1ZXN0OicsIGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCB0eFJlcXVlc3RJZCA9ICdyYW5kb21pZCc7XG4gICAgY29uc3QgdHhSZXF1ZXN0OiBUeFJlcXVlc3QgPSB7XG4gICAgICB0eFJlcXVlc3RJZCxcbiAgICAgIHRyYW5zYWN0aW9uczogW10sXG4gICAgICB1bnNpZ25lZFR4czogW1xuICAgICAgICB7XG4gICAgICAgICAgc2VyaWFsaXplZFR4SGV4OiAnTVBDIG9uIGEgRnJpZGF5IG5pZ2h0JyxcbiAgICAgICAgICBzaWduYWJsZUhleDogJ01QQyBvbiBhIEZyaWRheSBuaWdodCcsXG4gICAgICAgICAgZGVyaXZhdGlvblBhdGg6ICdtLzAnLFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICAgIGRhdGU6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKSxcbiAgICAgIGludGVudDoge1xuICAgICAgICBpbnRlbnRUeXBlOiAncGF5bWVudCcsXG4gICAgICB9LFxuICAgICAgbGF0ZXN0OiB0cnVlLFxuICAgICAgc3RhdGU6ICdwZW5kaW5nVXNlclNpZ25hdHVyZScsXG4gICAgICB3YWxsZXRUeXBlOiAnaG90JyxcbiAgICAgIHdhbGxldElkOiAnd2FsbGV0SWQnLFxuICAgICAgcG9saWNpZXNDaGVja2VkOiB0cnVlLFxuICAgICAgdmVyc2lvbjogMSxcbiAgICAgIHVzZXJJZDogJ3VzZXJJZCcsXG4gICAgfTtcblxuICAgIGJlZm9yZUVhY2goYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgdXNlclNpZ25TaGFyZSA9IHZhbGlkVXNlclNpZ25TaGFyZTtcbiAgICAgIGNvbnN0IHJTaGFyZSA9IHVzZXJTaWduU2hhcmUuclNoYXJlc1szXTtcbiAgICAgIGNvbnN0IHNpZ25hdHVyZVNoYXJlOiBTaWduYXR1cmVTaGFyZVJlY29yZCA9IHtcbiAgICAgICAgZnJvbTogU2lnbmF0dXJlU2hhcmVUeXBlLlVTRVIsXG4gICAgICAgIHRvOiBTaWduYXR1cmVTaGFyZVR5cGUuQklUR08sXG4gICAgICAgIHNoYXJlOiByU2hhcmUuciArIHJTaGFyZS5SLFxuICAgICAgfTtcblxuICAgICAgYXdhaXQgbm9ja1NlbmRTaWduYXR1cmVTaGFyZSh7XG4gICAgICAgIHdhbGxldElkOiB3YWxsZXQuaWQoKSxcbiAgICAgICAgdHhSZXF1ZXN0SWQ6IHR4UmVxdWVzdC50eFJlcXVlc3RJZCxcbiAgICAgICAgc2lnbmF0dXJlU2hhcmUsXG4gICAgICB9KTtcblxuICAgICAgY29uc3Qgc2lnbmF0dXJlU2hhcmUyOiBTaWduYXR1cmVTaGFyZVJlY29yZCA9IHtcbiAgICAgICAgZnJvbTogU2lnbmF0dXJlU2hhcmVUeXBlLkJJVEdPLFxuICAgICAgICB0bzogU2lnbmF0dXJlU2hhcmVUeXBlLlVTRVIsXG4gICAgICAgIHNoYXJlOiB2YWxpZEJpdGdvVG9Vc2VyU2lnblNoYXJlLnJTaGFyZXNbMV0uciArIHZhbGlkQml0Z29Ub1VzZXJTaWduU2hhcmUuclNoYXJlc1sxXS5SLFxuICAgICAgfTtcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0geyB0eFJlcXVlc3RzOiBbeyAuLi50eFJlcXVlc3QsIHNpZ25hdHVyZVNoYXJlczogW3NpZ25hdHVyZVNoYXJlMl0gfV0gfTtcbiAgICAgIGF3YWl0IG5vY2tHZXRUeFJlcXVlc3QoeyB3YWxsZXRJZDogd2FsbGV0LmlkKCksIHR4UmVxdWVzdElkOiB0eFJlcXVlc3QudHhSZXF1ZXN0SWQsIHJlc3BvbnNlIH0pO1xuXG4gICAgICBjb25zdCBiaXRnb1RvVXNlckNvbW1pdG1lbnRTaGFyZTogQ29tbWl0bWVudFNoYXJlUmVjb3JkID0ge1xuICAgICAgICBmcm9tOiBTaWduYXR1cmVTaGFyZVR5cGUuQklUR08sXG4gICAgICAgIHRvOiBTaWduYXR1cmVTaGFyZVR5cGUuVVNFUixcbiAgICAgICAgdHlwZTogQ29tbWl0bWVudFR5cGUuQ09NTUlUTUVOVCxcbiAgICAgICAgc2hhcmU6IHZhbGlkQml0Z29Ub1VzZXJTaWduU2hhcmUuclNoYXJlc1sxXS5jb21taXRtZW50LFxuICAgICAgfTtcbiAgICAgIGNvbnN0IGV4Y2hhbmdlQ29tbWl0UmVzcG9uc2U6IEV4Y2hhbmdlQ29tbWl0bWVudFJlc3BvbnNlID0geyBjb21taXRtZW50U2hhcmU6IGJpdGdvVG9Vc2VyQ29tbWl0bWVudFNoYXJlIH07XG4gICAgICBhd2FpdCBub2NrRXhjaGFuZ2VDb21taXRtZW50cyh7XG4gICAgICAgIHdhbGxldElkOiB3YWxsZXQuaWQoKSxcbiAgICAgICAgdHhSZXF1ZXN0SWQ6IHR4UmVxdWVzdC50eFJlcXVlc3RJZCxcbiAgICAgICAgcmVzcG9uc2U6IGV4Y2hhbmdlQ29tbWl0UmVzcG9uc2UsXG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIGl0KCdzaWduVHhSZXF1ZXN0IHNob3VsZCBzdWNjZWVkIHdpdGggdHhSZXF1ZXN0IG9iamVjdCBhcyBpbnB1dCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHNpZ25lZFR4UmVxdWVzdCA9IGF3YWl0IHRzc1V0aWxzLnNpZ25UeFJlcXVlc3Qoe1xuICAgICAgICB0eFJlcXVlc3QsXG4gICAgICAgIHBydjogSlNPTi5zdHJpbmdpZnkodmFsaWRVc2VyU2lnbmluZ01hdGVyaWFsKSxcbiAgICAgICAgcmVxSWQsXG4gICAgICB9KTtcbiAgICAgIHNpZ25lZFR4UmVxdWVzdC51bnNpZ25lZFR4cy5zaG91bGQuZGVlcEVxdWFsKHR4UmVxdWVzdC51bnNpZ25lZFR4cyk7XG5cbiAgICAgIHNhbmRib3gudmVyaWZ5QW5kUmVzdG9yZSgpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3NpZ25UeFJlcXVlc3Qgc2hvdWxkIHN1Y2NlZWQgd2l0aCB0eFJlcXVlc3QgaWQgYXMgaW5wdXQnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBnZXRUeFJlcXVlc3QgPSBzYW5kYm94LnN0dWIodHNzVXRpbHMsICdnZXRUeFJlcXVlc3QnKTtcbiAgICAgIGdldFR4UmVxdWVzdC5yZXNvbHZlcyh0eFJlcXVlc3QpO1xuICAgICAgZ2V0VHhSZXF1ZXN0LmNhbGxlZFdpdGgodHhSZXF1ZXN0SWQpO1xuXG4gICAgICBjb25zdCBzaWduZWRUeFJlcXVlc3QgPSBhd2FpdCB0c3NVdGlscy5zaWduVHhSZXF1ZXN0KHtcbiAgICAgICAgdHhSZXF1ZXN0OiB0eFJlcXVlc3RJZCxcbiAgICAgICAgcHJ2OiBKU09OLnN0cmluZ2lmeSh2YWxpZFVzZXJTaWduaW5nTWF0ZXJpYWwpLFxuICAgICAgICByZXFJZCxcbiAgICAgIH0pO1xuICAgICAgc2lnbmVkVHhSZXF1ZXN0LnVuc2lnbmVkVHhzLnNob3VsZC5kZWVwRXF1YWwodHhSZXF1ZXN0LnVuc2lnbmVkVHhzKTtcblxuICAgICAgc2FuZGJveC52ZXJpZnlBbmRSZXN0b3JlKCk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdzaWduVHhSZXF1ZXN0IFdpdGggQ29tbWl0bWVudDonLCBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3QgdHhSZXF1ZXN0SWQgPSAncmFuZG9taWQnO1xuICAgIGNvbnN0IHR4UmVxdWVzdDogVHhSZXF1ZXN0ID0ge1xuICAgICAgdHhSZXF1ZXN0SWQsXG4gICAgICB0cmFuc2FjdGlvbnM6IFtdLFxuICAgICAgdW5zaWduZWRUeHM6IFtcbiAgICAgICAge1xuICAgICAgICAgIHNlcmlhbGl6ZWRUeEhleDogJ01QQyBvbiBhIEZyaWRheSBuaWdodCcsXG4gICAgICAgICAgc2lnbmFibGVIZXg6ICdNUEMgb24gYSBGcmlkYXkgbmlnaHQnLFxuICAgICAgICAgIGRlcml2YXRpb25QYXRoOiAnbS8wJyxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgICBkYXRlOiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCksXG4gICAgICBpbnRlbnQ6IHtcbiAgICAgICAgaW50ZW50VHlwZTogJ3BheW1lbnQnLFxuICAgICAgfSxcbiAgICAgIGxhdGVzdDogdHJ1ZSxcbiAgICAgIHN0YXRlOiAncGVuZGluZ1VzZXJTaWduYXR1cmUnLFxuICAgICAgd2FsbGV0VHlwZTogJ2hvdCcsXG4gICAgICB3YWxsZXRJZDogJ3dhbGxldElkJyxcbiAgICAgIHBvbGljaWVzQ2hlY2tlZDogdHJ1ZSxcbiAgICAgIHZlcnNpb246IDEsXG4gICAgICB1c2VySWQ6ICd1c2VySWQnLFxuICAgIH07XG5cbiAgICBiZWZvcmVFYWNoKGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHVzZXJTaWduU2hhcmUgPSB2YWxpZFVzZXJTaWduU2hhcmU7XG4gICAgICBjb25zdCByU2hhcmUgPSB1c2VyU2lnblNoYXJlLnJTaGFyZXNbM107XG4gICAgICBjb25zdCBzaWduYXR1cmVTaGFyZTogU2lnbmF0dXJlU2hhcmVSZWNvcmQgPSB7XG4gICAgICAgIGZyb206IFNpZ25hdHVyZVNoYXJlVHlwZS5VU0VSLFxuICAgICAgICB0bzogU2lnbmF0dXJlU2hhcmVUeXBlLkJJVEdPLFxuICAgICAgICBzaGFyZTogclNoYXJlLnIgKyByU2hhcmUuUixcbiAgICAgIH07XG5cbiAgICAgIGF3YWl0IG5vY2tTZW5kU2lnbmF0dXJlU2hhcmUoe1xuICAgICAgICB3YWxsZXRJZDogd2FsbGV0LmlkKCksXG4gICAgICAgIHR4UmVxdWVzdElkOiB0eFJlcXVlc3QudHhSZXF1ZXN0SWQsXG4gICAgICAgIHNpZ25hdHVyZVNoYXJlLFxuICAgICAgfSk7XG5cbiAgICAgIGNvbnN0IHNpZ25hdHVyZVNoYXJlMjogU2lnbmF0dXJlU2hhcmVSZWNvcmQgPSB7XG4gICAgICAgIGZyb206IFNpZ25hdHVyZVNoYXJlVHlwZS5CSVRHTyxcbiAgICAgICAgdG86IFNpZ25hdHVyZVNoYXJlVHlwZS5VU0VSLFxuICAgICAgICBzaGFyZTogdmFsaWRCaXRnb1RvVXNlclNpZ25TaGFyZS5yU2hhcmVzWzFdLnIgKyB2YWxpZEJpdGdvVG9Vc2VyU2lnblNoYXJlLnJTaGFyZXNbMV0uUixcbiAgICAgIH07XG4gICAgICBjb25zdCByZXNwb25zZSA9IHsgdHhSZXF1ZXN0czogW3sgLi4udHhSZXF1ZXN0LCBzaWduYXR1cmVTaGFyZXM6IFtzaWduYXR1cmVTaGFyZTJdIH1dIH07XG4gICAgICBhd2FpdCBub2NrR2V0VHhSZXF1ZXN0KHsgd2FsbGV0SWQ6IHdhbGxldC5pZCgpLCB0eFJlcXVlc3RJZDogdHhSZXF1ZXN0LnR4UmVxdWVzdElkLCByZXNwb25zZSB9KTtcbiAgICAgIGNvbnN0IGJpdGdvVG9Vc2VyQ29tbWl0bWVudFNoYXJlOiBDb21taXRtZW50U2hhcmVSZWNvcmQgPSB7XG4gICAgICAgIGZyb206IFNpZ25hdHVyZVNoYXJlVHlwZS5CSVRHTyxcbiAgICAgICAgdG86IFNpZ25hdHVyZVNoYXJlVHlwZS5VU0VSLFxuICAgICAgICB0eXBlOiBDb21taXRtZW50VHlwZS5DT01NSVRNRU5ULFxuICAgICAgICBzaGFyZTogdmFsaWRCaXRnb1RvVXNlclNpZ25TaGFyZS5yU2hhcmVzWzFdLmNvbW1pdG1lbnQsXG4gICAgICB9O1xuICAgICAgY29uc3QgZXhjaGFuZ2VDb21taXRSZXNwb25zZTogRXhjaGFuZ2VDb21taXRtZW50UmVzcG9uc2UgPSB7IGNvbW1pdG1lbnRTaGFyZTogYml0Z29Ub1VzZXJDb21taXRtZW50U2hhcmUgfTtcbiAgICAgIGF3YWl0IG5vY2tFeGNoYW5nZUNvbW1pdG1lbnRzKHtcbiAgICAgICAgd2FsbGV0SWQ6IHdhbGxldC5pZCgpLFxuICAgICAgICB0eFJlcXVlc3RJZDogdHhSZXF1ZXN0LnR4UmVxdWVzdElkLFxuICAgICAgICByZXNwb25zZTogZXhjaGFuZ2VDb21taXRSZXNwb25zZSxcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgaXQoJ3NpZ25UeFJlcXVlc3Qgc2hvdWxkIHN1Y2NlZWQgd2l0aCB0eFJlcXVlc3Qgb2JqZWN0IGFzIGlucHV0JywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3Qgc2lnbmVkVHhSZXF1ZXN0ID0gYXdhaXQgdHNzVXRpbHMuc2lnblR4UmVxdWVzdCh7XG4gICAgICAgIHR4UmVxdWVzdCxcbiAgICAgICAgcHJ2OiBKU09OLnN0cmluZ2lmeSh2YWxpZFVzZXJTaWduaW5nTWF0ZXJpYWwpLFxuICAgICAgICByZXFJZCxcbiAgICAgIH0pO1xuICAgICAgc2lnbmVkVHhSZXF1ZXN0LnVuc2lnbmVkVHhzLnNob3VsZC5kZWVwRXF1YWwodHhSZXF1ZXN0LnVuc2lnbmVkVHhzKTtcblxuICAgICAgc2FuZGJveC52ZXJpZnlBbmRSZXN0b3JlKCk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2lnblR4UmVxdWVzdCBzaG91bGQgc3VjY2VlZCB3aXRoIHR4UmVxdWVzdCBpZCBhcyBpbnB1dCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGdldFR4UmVxdWVzdCA9IHNhbmRib3guc3R1Yih0c3NVdGlscywgJ2dldFR4UmVxdWVzdCcpO1xuICAgICAgZ2V0VHhSZXF1ZXN0LnJlc29sdmVzKHR4UmVxdWVzdCk7XG4gICAgICBnZXRUeFJlcXVlc3QuY2FsbGVkV2l0aCh0eFJlcXVlc3RJZCk7XG5cbiAgICAgIGNvbnN0IHNpZ25lZFR4UmVxdWVzdCA9IGF3YWl0IHRzc1V0aWxzLnNpZ25UeFJlcXVlc3Qoe1xuICAgICAgICB0eFJlcXVlc3Q6IHR4UmVxdWVzdElkLFxuICAgICAgICBwcnY6IEpTT04uc3RyaW5naWZ5KHZhbGlkVXNlclNpZ25pbmdNYXRlcmlhbCksXG4gICAgICAgIHJlcUlkLFxuICAgICAgfSk7XG4gICAgICBzaWduZWRUeFJlcXVlc3QudW5zaWduZWRUeHMuc2hvdWxkLmRlZXBFcXVhbCh0eFJlcXVlc3QudW5zaWduZWRUeHMpO1xuXG4gICAgICBzYW5kYm94LnZlcmlmeUFuZFJlc3RvcmUoKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ3NpZ25UeFJlcXVlc3RGb3JNZXNzYWdlOicsIGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCB0eFJlcXVlc3RJZCA9ICdyYW5kb21pZC1hYmMnO1xuICAgIGNvbnN0IG1lc3NhZ2VSYXcgPSAnaGVsbG8gd29ybGQnO1xuICAgIGNvbnN0IG1lc3NhZ2VFbmNvZGVkID0gQnVmZmVyLmZyb20oYCR7bWVzc2FnZVJhd31gKS50b1N0cmluZygnaGV4Jyk7XG4gICAgY29uc3QgYnVmZmVyVG9TaWduID0gQnVmZmVyLmZyb20obWVzc2FnZUVuY29kZWQsICdoZXgnKTtcbiAgICBjb25zdCB0eFJlcXVlc3Q6IFR4UmVxdWVzdCA9IHtcbiAgICAgIHR4UmVxdWVzdElkLFxuICAgICAgdHJhbnNhY3Rpb25zOiBbXSxcbiAgICAgIG1lc3NhZ2VzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBzdGF0ZTogJ3BlbmRpbmdTaWduYXR1cmUnLFxuICAgICAgICAgIHNpZ25hdHVyZVNoYXJlczogW10sXG4gICAgICAgICAgbWVzc2FnZVJhdyxcbiAgICAgICAgICBtZXNzYWdlRW5jb2RlZCxcbiAgICAgICAgICBkZXJpdmF0aW9uUGF0aDogJ20vMCcsXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgICAgdW5zaWduZWRUeHM6IFtdLFxuICAgICAgZGF0ZTogbmV3IERhdGUoKS50b0lTT1N0cmluZygpLFxuICAgICAgaW50ZW50OiB7XG4gICAgICAgIGludGVudFR5cGU6ICdwYXltZW50JyxcbiAgICAgIH0sXG4gICAgICBsYXRlc3Q6IHRydWUsXG4gICAgICBzdGF0ZTogJ3BlbmRpbmdVc2VyU2lnbmF0dXJlJyxcbiAgICAgIHdhbGxldFR5cGU6ICdob3QnLFxuICAgICAgd2FsbGV0SWQ6ICd3YWxsZXRJZCcsXG4gICAgICBwb2xpY2llc0NoZWNrZWQ6IHRydWUsXG4gICAgICB2ZXJzaW9uOiAxLFxuICAgICAgdXNlcklkOiAndXNlcklkJyxcbiAgICAgIGFwaVZlcnNpb246ICdmdWxsJyxcbiAgICB9O1xuXG4gICAgYmVmb3JlRWFjaChhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCByU2hhcmUgPSB2YWxpZFVzZXJTaWduU2hhcmUuclNoYXJlc1szXTtcbiAgICAgIGNvbnN0IHNpZ25hdHVyZVNoYXJlOiBTaWduYXR1cmVTaGFyZVJlY29yZCA9IHtcbiAgICAgICAgZnJvbTogU2lnbmF0dXJlU2hhcmVUeXBlLlVTRVIsXG4gICAgICAgIHRvOiBTaWduYXR1cmVTaGFyZVR5cGUuQklUR08sXG4gICAgICAgIHNoYXJlOiByU2hhcmUuciArIHJTaGFyZS5SLFxuICAgICAgfTtcblxuICAgICAgYXdhaXQgbm9ja1NlbmRTaWduYXR1cmVTaGFyZSh7XG4gICAgICAgIHdhbGxldElkOiB3YWxsZXQuaWQoKSxcbiAgICAgICAgdHhSZXF1ZXN0SWQ6IHR4UmVxdWVzdC50eFJlcXVlc3RJZCxcbiAgICAgICAgc2lnbmF0dXJlU2hhcmUsXG4gICAgICAgIHJlcXVlc3RUeXBlOiBSZXF1ZXN0VHlwZS5tZXNzYWdlLFxuICAgICAgICBhcGlNb2RlOiAnZnVsbCcsXG4gICAgICB9KTtcblxuICAgICAgY29uc3Qgc2lnbmF0dXJlU2hhcmUyOiBTaWduYXR1cmVTaGFyZVJlY29yZCA9IHtcbiAgICAgICAgZnJvbTogU2lnbmF0dXJlU2hhcmVUeXBlLkJJVEdPLFxuICAgICAgICB0bzogU2lnbmF0dXJlU2hhcmVUeXBlLlVTRVIsXG4gICAgICAgIHNoYXJlOiB2YWxpZEJpdGdvVG9Vc2VyU2lnblNoYXJlLnJTaGFyZXNbMV0uciArIHZhbGlkQml0Z29Ub1VzZXJTaWduU2hhcmUuclNoYXJlc1sxXS5SLFxuICAgICAgfTtcbiAgICAgIHR4UmVxdWVzdC5tZXNzYWdlcyFbMF0uc2lnbmF0dXJlU2hhcmVzLnB1c2goc2lnbmF0dXJlU2hhcmUyKTtcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0geyB0eFJlcXVlc3RzOiBbeyAuLi50eFJlcXVlc3QsIGFwaVZlcnNpb246ICdmdWxsJyB9XSB9O1xuICAgICAgYXdhaXQgbm9ja0dldFR4UmVxdWVzdCh7IHdhbGxldElkOiB3YWxsZXQuaWQoKSwgdHhSZXF1ZXN0SWQ6IHR4UmVxdWVzdC50eFJlcXVlc3RJZCwgcmVzcG9uc2UgfSk7XG5cbiAgICAgIGNvbnN0IGJpdGdvVG9Vc2VyQ29tbWl0bWVudFNoYXJlOiBDb21taXRtZW50U2hhcmVSZWNvcmQgPSB7XG4gICAgICAgIGZyb206IFNpZ25hdHVyZVNoYXJlVHlwZS5CSVRHTyxcbiAgICAgICAgdG86IFNpZ25hdHVyZVNoYXJlVHlwZS5VU0VSLFxuICAgICAgICB0eXBlOiBDb21taXRtZW50VHlwZS5DT01NSVRNRU5ULFxuICAgICAgICBzaGFyZTogdmFsaWRCaXRnb1RvVXNlclNpZ25TaGFyZS5yU2hhcmVzWzFdLmNvbW1pdG1lbnQsXG4gICAgICB9O1xuICAgICAgY29uc3QgZXhjaGFuZ2VDb21taXRSZXNwb25zZTogRXhjaGFuZ2VDb21taXRtZW50UmVzcG9uc2UgPSB7IGNvbW1pdG1lbnRTaGFyZTogYml0Z29Ub1VzZXJDb21taXRtZW50U2hhcmUgfTtcbiAgICAgIGF3YWl0IG5vY2tFeGNoYW5nZUNvbW1pdG1lbnRzKHtcbiAgICAgICAgd2FsbGV0SWQ6IHdhbGxldC5pZCgpLFxuICAgICAgICB0eFJlcXVlc3RJZDogdHhSZXF1ZXN0LnR4UmVxdWVzdElkLFxuICAgICAgICByZXNwb25zZTogZXhjaGFuZ2VDb21taXRSZXNwb25zZSxcbiAgICAgICAgYXBpTW9kZTogJ2Z1bGwnLFxuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBhZnRlckVhY2goYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgdHhSZXF1ZXN0Lm1lc3NhZ2VzIVswXS5zaWduYXR1cmVTaGFyZXMgPSBbXTtcbiAgICB9KTtcblxuICAgIGl0KCdzaWduVHhSZXF1ZXN0IHNob3VsZCBzdWNjZWVkIHdpdGggdHhSZXF1ZXN0IG9iamVjdCBhcyBpbnB1dCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHNpZ25lZFR4UmVxdWVzdCA9IGF3YWl0IHRzc1V0aWxzLnNpZ25UeFJlcXVlc3RGb3JNZXNzYWdlKHtcbiAgICAgICAgbWVzc2FnZVJhdyxcbiAgICAgICAgYnVmZmVyVG9TaWduLFxuICAgICAgICB0eFJlcXVlc3QsXG4gICAgICAgIHBydjogSlNPTi5zdHJpbmdpZnkodmFsaWRVc2VyU2lnbmluZ01hdGVyaWFsKSxcbiAgICAgICAgcmVxSWQsXG4gICAgICB9KTtcbiAgICAgIHNpZ25lZFR4UmVxdWVzdC5tZXNzYWdlcyEuc2hvdWxkLmRlZXBFcXVhbCh0eFJlcXVlc3QubWVzc2FnZXMpO1xuXG4gICAgICBzYW5kYm94LnZlcmlmeUFuZFJlc3RvcmUoKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaWduVHhSZXF1ZXN0IHNob3VsZCBzdWNjZWVkIHdpdGggdHhSZXF1ZXN0IGlkIGFzIGlucHV0JywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgZ2V0VHhSZXF1ZXN0ID0gc2FuZGJveC5zdHViKHRzc1V0aWxzLCAnZ2V0VHhSZXF1ZXN0Jyk7XG4gICAgICBnZXRUeFJlcXVlc3QucmVzb2x2ZXModHhSZXF1ZXN0KTtcbiAgICAgIGdldFR4UmVxdWVzdC5jYWxsZWRXaXRoKHR4UmVxdWVzdElkKTtcblxuICAgICAgY29uc3Qgc2lnbmVkVHhSZXF1ZXN0ID0gYXdhaXQgdHNzVXRpbHMuc2lnblR4UmVxdWVzdEZvck1lc3NhZ2Uoe1xuICAgICAgICB0eFJlcXVlc3Q6IHR4UmVxdWVzdElkLFxuICAgICAgICBwcnY6IEpTT04uc3RyaW5naWZ5KHZhbGlkVXNlclNpZ25pbmdNYXRlcmlhbCksXG4gICAgICAgIHJlcUlkLFxuICAgICAgICBtZXNzYWdlUmF3LFxuICAgICAgICBidWZmZXJUb1NpZ24sXG4gICAgICB9KTtcbiAgICAgIHNpZ25lZFR4UmVxdWVzdC5tZXNzYWdlcyEuc2hvdWxkLmRlZXBFcXVhbCh0eFJlcXVlc3QubWVzc2FnZXMpO1xuXG4gICAgICBzYW5kYm94LnZlcmlmeUFuZFJlc3RvcmUoKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ3ByZWJ1aWxkVHhXaXRoSW50ZW50OicsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICBpdCgnc2hvdWxkIGJ1aWxkIHNpbmdsZSByZWNpcGllbnQgdHgnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBub2NrZWRDcmVhdGVUeCA9IGF3YWl0IG5vY2tDcmVhdGVUeFJlcXVlc3Qoe1xuICAgICAgICB3YWxsZXRJZDogd2FsbGV0LmlkKCksXG4gICAgICAgIHJlcXVlc3RCb2R5OiB7XG4gICAgICAgICAgYXBpVmVyc2lvbjogJ2xpdGUnLFxuICAgICAgICAgIGludGVudDoge1xuICAgICAgICAgICAgaW50ZW50VHlwZTogJ3BheW1lbnQnLFxuICAgICAgICAgICAgcmVjaXBpZW50czogW1xuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgYWRkcmVzczoge1xuICAgICAgICAgICAgICAgICAgYWRkcmVzczogJ3JlY2lwaWVudCcsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBhbW91bnQ6IHtcbiAgICAgICAgICAgICAgICAgIHZhbHVlOiAnMTAwMDAnLFxuICAgICAgICAgICAgICAgICAgc3ltYm9sOiAndHNvbCcsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgICAgLy8gZG9uJ3QgY2FyZSBhYm91dCB0aGUgYWN0dWFsIHJlc3BvbnNlIC0ganVzdCBuZWVkIHRvIG1ha2Ugc3VyZSByZXF1ZXN0IGJvZHkgbWF0Y2hlc1xuICAgICAgICByZXNwb25zZToge30sXG4gICAgICB9KTtcblxuICAgICAgYXdhaXQgdHNzVXRpbHMucHJlYnVpbGRUeFdpdGhJbnRlbnQoe1xuICAgICAgICByZXFJZCxcbiAgICAgICAgcmVjaXBpZW50czogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGFkZHJlc3M6ICdyZWNpcGllbnQnLFxuICAgICAgICAgICAgYW1vdW50OiAnMTAwMDAnLFxuICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICAgIGludGVudFR5cGU6ICdwYXltZW50JyxcbiAgICAgIH0pO1xuXG4gICAgICBub2NrZWRDcmVhdGVUeC5pc0RvbmUoKS5zaG91bGQuYmUudHJ1ZSgpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBidWlsZCBtdWx0aXBsZSByZWNpcGllbnRzIHdpdGggbWVtbyB0eCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IG5vY2tlZENyZWF0ZVR4ID0gYXdhaXQgbm9ja0NyZWF0ZVR4UmVxdWVzdCh7XG4gICAgICAgIHdhbGxldElkOiB3YWxsZXQuaWQoKSxcbiAgICAgICAgcmVxdWVzdEJvZHk6IHtcbiAgICAgICAgICBhcGlWZXJzaW9uOiAnbGl0ZScsXG4gICAgICAgICAgaW50ZW50OiB7XG4gICAgICAgICAgICBpbnRlbnRUeXBlOiAncGF5bWVudCcsXG4gICAgICAgICAgICByZWNpcGllbnRzOiBbXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBhZGRyZXNzOiB7XG4gICAgICAgICAgICAgICAgICBhZGRyZXNzOiAncmVjaXBpZW50MScsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBhbW91bnQ6IHtcbiAgICAgICAgICAgICAgICAgIHZhbHVlOiAnMTAwMDAnLFxuICAgICAgICAgICAgICAgICAgc3ltYm9sOiAndHNvbCcsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGFkZHJlc3M6IHtcbiAgICAgICAgICAgICAgICAgIGFkZHJlc3M6ICdyZWNpcGllbnQyJyxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGFtb3VudDoge1xuICAgICAgICAgICAgICAgICAgdmFsdWU6ICcyMDAwMCcsXG4gICAgICAgICAgICAgICAgICBzeW1ib2w6ICd0c29sJyxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIG1lbW86ICdtZW1vJyxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgICAvLyBkb24ndCBjYXJlIGFib3V0IHRoZSBhY3R1YWwgcmVzcG9uc2UgLSBqdXN0IG5lZWQgdG8gbWFrZSBzdXJlIHJlcXVlc3QgYm9keSBtYXRjaGVzXG4gICAgICAgIHJlc3BvbnNlOiB7fSxcbiAgICAgIH0pO1xuXG4gICAgICBhd2FpdCB0c3NVdGlscy5wcmVidWlsZFR4V2l0aEludGVudCh7XG4gICAgICAgIHJlcUlkLFxuICAgICAgICByZWNpcGllbnRzOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgYWRkcmVzczogJ3JlY2lwaWVudDEnLFxuICAgICAgICAgICAgYW1vdW50OiAnMTAwMDAnLFxuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgYWRkcmVzczogJ3JlY2lwaWVudDInLFxuICAgICAgICAgICAgYW1vdW50OiAnMjAwMDAnLFxuICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICAgIG1lbW86IHtcbiAgICAgICAgICB2YWx1ZTogJ21lbW8nLFxuICAgICAgICAgIHR5cGU6ICd0ZXh0JyxcbiAgICAgICAgfSxcbiAgICAgICAgaW50ZW50VHlwZTogJ3BheW1lbnQnLFxuICAgICAgfSk7XG5cbiAgICAgIG5vY2tlZENyZWF0ZVR4LmlzRG9uZSgpLnNob3VsZC5iZS50cnVlKCk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdkZWxldGUgU2lnbmF0dXJlU2hhcmU6JywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgIGl0KCdzaG91bGQgc3VjY2VlZCB0byBkZWxldGUgU2lnbmF0dXJlIFNoYXJlJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3Qgc2lnbmF0dXJlU2hhcmUgPSB7IGZyb206ICd1c2VyJywgdG86ICdiaXRnbycsIHNoYXJlOiAnMTI4Ynl0ZXN0cmluZycgfSBhcyBTaWduYXR1cmVTaGFyZVJlY29yZDtcbiAgICAgIGNvbnN0IG5vY2sgPSBhd2FpdCBub2NrRGVsZXRlU2lnbmF0dXJlU2hhcmUoe1xuICAgICAgICB3YWxsZXRJZDogd2FsbGV0LmlkKCksXG4gICAgICAgIHR4UmVxdWVzdElkOiB0eFJlcXVlc3QudHhSZXF1ZXN0SWQsXG4gICAgICAgIHNpZ25hdHVyZVNoYXJlLFxuICAgICAgfSk7XG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRzc1V0aWxzLmRlbGV0ZVNpZ25hdHVyZVNoYXJlcyh0eFJlcXVlc3QudHhSZXF1ZXN0SWQpO1xuICAgICAgcmVzcG9uc2Uuc2hvdWxkLmRlZXBFcXVhbChbc2lnbmF0dXJlU2hhcmVdKTtcbiAgICAgIHJlc3BvbnNlLnNob3VsZC5sZW5ndGgoMSk7XG4gICAgICBub2NrLmlzRG9uZSgpLnNob3VsZC5lcXVhbCh0cnVlKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgY2FsbCBzZXRSZXF1ZXN0VHJhY2VyJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3Qgc2lnbmF0dXJlU2hhcmUgPSB7IGZyb206ICd1c2VyJywgdG86ICdiaXRnbycsIHNoYXJlOiAnMTI4Ynl0ZXN0cmluZycgfSBhcyBTaWduYXR1cmVTaGFyZVJlY29yZDtcbiAgICAgIGNvbnN0IG5vY2sgPSBhd2FpdCBub2NrRGVsZXRlU2lnbmF0dXJlU2hhcmUoe1xuICAgICAgICB3YWxsZXRJZDogd2FsbGV0LmlkKCksXG4gICAgICAgIHR4UmVxdWVzdElkOiB0eFJlcXVlc3QudHhSZXF1ZXN0SWQsXG4gICAgICAgIHNpZ25hdHVyZVNoYXJlLFxuICAgICAgfSk7XG4gICAgICBjb25zdCByZXFJZCA9IG5ldyBSZXF1ZXN0VHJhY2VyKCk7XG4gICAgICBjb25zdCBzZXRSZXF1ZXN0VHJhY2VyU3B5ID0gc2lub24uc3B5KGJpdGdvLCAnc2V0UmVxdWVzdFRyYWNlcicpO1xuICAgICAgc2V0UmVxdWVzdFRyYWNlclNweS53aXRoQXJncyhyZXFJZCk7XG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRzc1V0aWxzLmRlbGV0ZVNpZ25hdHVyZVNoYXJlcyh0eFJlcXVlc3QudHhSZXF1ZXN0SWQsIHJlcUlkKTtcbiAgICAgIHJlc3BvbnNlLnNob3VsZC5kZWVwRXF1YWwoW3NpZ25hdHVyZVNoYXJlXSk7XG4gICAgICByZXNwb25zZS5zaG91bGQubGVuZ3RoKDEpO1xuICAgICAgbm9jay5pc0RvbmUoKS5zaG91bGQuZXF1YWwodHJ1ZSk7XG4gICAgICBzaW5vbi5hc3NlcnQuY2FsbGVkT25jZShzZXRSZXF1ZXN0VHJhY2VyU3B5KTtcbiAgICAgIHNldFJlcXVlc3RUcmFjZXJTcHkucmVzdG9yZSgpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnc2VuZFR4UmVxdWVzdDonLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgaXQoJ3Nob3VsZCBzdWNjZWVkIHRvIHNlbmQgdHggcmVxdWVzdCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IG5vY2sgPSBhd2FpdCBub2NrU2VuZFR4UmVxdWVzdCh7XG4gICAgICAgIGNvaW46IGNvaW5OYW1lLFxuICAgICAgICB3YWxsZXRJZDogd2FsbGV0LmlkKCksXG4gICAgICAgIHR4UmVxdWVzdElkOiB0eFJlcXVlc3QudHhSZXF1ZXN0SWQsXG4gICAgICB9KTtcbiAgICAgIGF3YWl0IHRzc1V0aWxzLnNlbmRUeFJlcXVlc3QodHhSZXF1ZXN0LnR4UmVxdWVzdElkKS5zaG91bGQuYmUuZnVsZmlsbGVkKCk7XG4gICAgICBub2NrLmlzRG9uZSgpLnNob3VsZC5lcXVhbCh0cnVlKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgY2FsbCBzZXRSZXF1ZXN0VHJhY2VyJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3Qgbm9jayA9IGF3YWl0IG5vY2tTZW5kVHhSZXF1ZXN0KHtcbiAgICAgICAgY29pbjogY29pbk5hbWUsXG4gICAgICAgIHdhbGxldElkOiB3YWxsZXQuaWQoKSxcbiAgICAgICAgdHhSZXF1ZXN0SWQ6IHR4UmVxdWVzdC50eFJlcXVlc3RJZCxcbiAgICAgIH0pO1xuICAgICAgY29uc3QgcmVxSWQgPSBuZXcgUmVxdWVzdFRyYWNlcigpO1xuICAgICAgY29uc3Qgc2V0UmVxdWVzdFRyYWNlclNweSA9IHNpbm9uLnNweShiaXRnbywgJ3NldFJlcXVlc3RUcmFjZXInKTtcbiAgICAgIHNldFJlcXVlc3RUcmFjZXJTcHkud2l0aEFyZ3MocmVxSWQpO1xuICAgICAgYXdhaXQgdHNzVXRpbHMuc2VuZFR4UmVxdWVzdCh0eFJlcXVlc3QudHhSZXF1ZXN0SWQsIHJlcUlkKS5zaG91bGQuYmUuZnVsZmlsbGVkKCk7XG4gICAgICBub2NrLmlzRG9uZSgpLnNob3VsZC5lcXVhbCh0cnVlKTtcbiAgICAgIHNpbm9uLmFzc2VydC5jYWxsZWRPbmNlKHNldFJlcXVlc3RUcmFjZXJTcHkpO1xuICAgICAgc2V0UmVxdWVzdFRyYWNlclNweS5yZXN0b3JlKCk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdjcmVhdGVVc2VyVG9CaXRnb0NvbW1pdG1lbnRTaGFyZScsIGZ1bmN0aW9uICgpIHtcbiAgICBpdCgnc2hvdWxkIGNyZWF0ZSBhIHZhbGlkIGNvbW1pdG1lbnRTaGFyZScsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHZhbHVlID0gJ3JhbmRvbXN0cmluZyc7XG4gICAgICBjb25zdCB2YWxpZFVzZXJUb0JpdGdvQ29tbWl0bWVudFNoYXJlID0ge1xuICAgICAgICBmcm9tOiBTaWduYXR1cmVTaGFyZVR5cGUuVVNFUixcbiAgICAgICAgdG86IFNpZ25hdHVyZVNoYXJlVHlwZS5CSVRHTyxcbiAgICAgICAgdHlwZTogQ29tbWl0bWVudFR5cGUuQ09NTUlUTUVOVCxcbiAgICAgICAgc2hhcmU6IHZhbHVlLFxuICAgICAgfTtcbiAgICAgIGNvbnN0IGNvbW1pdG1lbnRTaGFyZSA9IHRzc1V0aWxzLmNyZWF0ZVVzZXJUb0JpdGdvQ29tbWl0bWVudFNoYXJlKHZhbHVlKTtcbiAgICAgIGNvbW1pdG1lbnRTaGFyZS5zaG91bGQuZGVlcEVxdWFsKHZhbGlkVXNlclRvQml0Z29Db21taXRtZW50U2hhcmUpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnY3JlYXRlVXNlclRvQml0Z29FbmNyeXB0ZWRTaWduZXJTaGFyZScsIGZ1bmN0aW9uICgpIHtcbiAgICBpdCgnc2hvdWxkIGNyZWF0ZSBhIHZhbGlkIGVuY3J5cHRlZFNpZ25lclNoYXJlJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgdmFsdWUgPSAncmFuZG9tc3RyaW5nJztcbiAgICAgIGNvbnN0IHZhbGlkVXNlclRvQml0Z29FbmNyeXB0ZWRTaWduZXJTaGFyZSA9IHtcbiAgICAgICAgZnJvbTogU2lnbmF0dXJlU2hhcmVUeXBlLlVTRVIsXG4gICAgICAgIHRvOiBTaWduYXR1cmVTaGFyZVR5cGUuQklUR08sXG4gICAgICAgIHR5cGU6IEVuY3J5cHRlZFNpZ25lclNoYXJlVHlwZS5FTkNSWVBURURfU0lHTkVSX1NIQVJFLFxuICAgICAgICBzaGFyZTogdmFsdWUsXG4gICAgICB9O1xuICAgICAgY29uc3QgZW5jcnlwdGVkU2lnbmVyU2hhcmUgPSB0c3NVdGlscy5jcmVhdGVVc2VyVG9CaXRnb0VuY3J5cHRlZFNpZ25lclNoYXJlKHZhbHVlKTtcbiAgICAgIGVuY3J5cHRlZFNpZ25lclNoYXJlLnNob3VsZC5kZWVwRXF1YWwodmFsaWRVc2VyVG9CaXRnb0VuY3J5cHRlZFNpZ25lclNoYXJlKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ3N1cHBvcnRlZFR4UmVxdWVzdFZlcnNpb25zJywgZnVuY3Rpb24gKCkge1xuICAgIGl0KCdzaG91bGQgcmV0dXJuIGZ1bGwgZm9yIGN1c3RvZGlhbCB3YWxsZXRzJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgY3VzdG9kaWFsV2FsbGV0ID0gbmV3IFdhbGxldChiaXRnbywgYmFzZUNvaW4sIHsgbXVsdGlzaWdUeXBlOiAndHNzJywgdHlwZTogJ2N1c3RvZGlhbCcgfSk7XG4gICAgICBjb25zdCBjdXN0b2RpYWxUc3NVdGlscyA9IG5ldyBUc3NVdGlscyhiaXRnbywgYmFzZUNvaW4sIGN1c3RvZGlhbFdhbGxldCk7XG4gICAgICBjdXN0b2RpYWxUc3NVdGlscy5zdXBwb3J0ZWRUeFJlcXVlc3RWZXJzaW9ucygpLnNob3VsZC5kZWVwRXF1YWwoWydmdWxsJ10pO1xuICAgIH0pO1xuICAgIGl0KCdzaG91bGQgcmV0dXJuIGZ1bGwgZm9yIGNvbGQgd2FsbGV0cycsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGNvbGRXYWxsZXQgPSBuZXcgV2FsbGV0KGJpdGdvLCBiYXNlQ29pbiwgeyBtdWx0aXNpZ1R5cGU6ICd0c3MnLCB0eXBlOiAnY29sZCcgfSk7XG4gICAgICBjb25zdCBjb2xkV2FsbGV0VHNzVXRpbHMgPSBuZXcgVHNzVXRpbHMoYml0Z28sIGJhc2VDb2luLCBjb2xkV2FsbGV0KTtcbiAgICAgIGNvbGRXYWxsZXRUc3NVdGlscy5zdXBwb3J0ZWRUeFJlcXVlc3RWZXJzaW9ucygpLnNob3VsZC5kZWVwRXF1YWwoWydmdWxsJ10pO1xuICAgIH0pO1xuICAgIGl0KCdzaG91bGQgcmV0dXJuIGZ1bGwgYW5kIGxpdGUgZm9yIGhvdCB3YWxsZXRzJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgaG90V2FsbGV0ID0gbmV3IFdhbGxldChiaXRnbywgYmFzZUNvaW4sIHtcbiAgICAgICAgbXVsdGlzaWdUeXBlOiAndHNzJyxcbiAgICAgICAgbXVsdGlzaWdUeXBlVmVyc2lvbjogdW5kZWZpbmVkLFxuICAgICAgICB0eXBlOiAnaG90JyxcbiAgICAgIH0pO1xuICAgICAgY29uc3QgaG90VHNzVXRpbHMgPSBuZXcgVHNzVXRpbHMoYml0Z28sIGJhc2VDb2luLCBob3RXYWxsZXQpO1xuICAgICAgY29uc3Qgc3VwcG9ydGVkVHhSZXF1ZXN0VmVyc2lvbnMgPSBob3RUc3NVdGlscy5zdXBwb3J0ZWRUeFJlcXVlc3RWZXJzaW9ucygpO1xuICAgICAgc3VwcG9ydGVkVHhSZXF1ZXN0VmVyc2lvbnMuc2hvdWxkLmRlZXBFcXVhbChbJ2xpdGUnLCAnZnVsbCddKTtcbiAgICB9KTtcbiAgICBpdCgnc2hvdWxkIHJldHVybiBvbmx5IGZ1bGwgZm9yIGhvdCBNUEN2MiB3YWxsZXRzJywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgaG90TVBDdjJXYWxsZXQgPSBuZXcgV2FsbGV0KGJpdGdvLCBiYXNlQ29pbiwge1xuICAgICAgICBtdWx0aXNpZ1R5cGU6ICd0c3MnLFxuICAgICAgICBtdWx0aXNpZ1R5cGVWZXJzaW9uOiAnTVBDdjInLFxuICAgICAgICB0eXBlOiAnaG90JyxcbiAgICAgIH0pO1xuICAgICAgY29uc3QgbXBjdjJUc3NVdGlscyA9IG5ldyBFRERTQVV0aWxzLkVkZHNhTVBDdjJVdGlscyhiaXRnbywgYmFzZUNvaW4sIGhvdE1QQ3YyV2FsbGV0KTtcbiAgICAgIG1wY3YyVHNzVXRpbHMuc3VwcG9ydGVkVHhSZXF1ZXN0VmVyc2lvbnMoKS5zaG91bGQuZGVlcEVxdWFsKFsnZnVsbCddKTtcbiAgICB9KTtcbiAgICBpdCgnc2hvdWxkIHJldHVybiBlbXB0eSBmb3IgdHJhZGluZyB3YWxsZXRzJywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgdHJhZGluZ1dhbGxldHMgPSBuZXcgV2FsbGV0KGJpdGdvLCBiYXNlQ29pbiwgeyBtdWx0aXNpZ1R5cGU6ICd0c3MnLCB0eXBlOiAndHJhZGluZycgfSk7XG4gICAgICBjb25zdCB0cmFkaW5nV2FsbGV0VHNzVXRpbHMgPSBuZXcgVHNzVXRpbHMoYml0Z28sIGJhc2VDb2luLCB0cmFkaW5nV2FsbGV0cyk7XG4gICAgICBjb25zdCBzdXBwb3J0ZWRUeFJlcXVlc3RWZXJzaW9ucyA9IHRyYWRpbmdXYWxsZXRUc3NVdGlscy5zdXBwb3J0ZWRUeFJlcXVlc3RWZXJzaW9ucygpO1xuICAgICAgc3VwcG9ydGVkVHhSZXF1ZXN0VmVyc2lvbnMuc2hvdWxkLmRlZXBFcXVhbChbXSk7XG4gICAgfSk7XG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gZW1wdHkgZm9yIG5vbi10c3Mgd2FsbGV0cycsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IG5vblRzc1dhbGxldERhdGEgPSB7IGNvaW46ICdidGMnLCBtdWx0aXNpZ1R5cGU6ICdvbmNoYWluJyB9O1xuICAgICAgY29uc3QgYnRjQ29pbiA9IGJpdGdvLmNvaW4oJ3RidGMnKTtcbiAgICAgIGNvbnN0IG5vblRzc1dhbGxldCA9IG5ldyBXYWxsZXQoYml0Z28sIGJ0Y0NvaW4sIG5vblRzc1dhbGxldERhdGEpO1xuICAgICAgY29uc3Qgbm9uVHNzV2FsbGV0VHNzVXRpbHMgPSBuZXcgVHNzVXRpbHMoYml0Z28sIGJ0Y0NvaW4sIG5vblRzc1dhbGxldCk7XG4gICAgICBub25Uc3NXYWxsZXRUc3NVdGlscy5zdXBwb3J0ZWRUeFJlcXVlc3RWZXJzaW9ucygpLnNob3VsZC5kZWVwRXF1YWwoW10pO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnaXNQZW5kaW5nQXBwcm92YWxUeFJlcXVlc3RGdWxsJywgKCkgPT4ge1xuICAgIGl0KCdzaG91bGQgcmV0dXJuIHRydWUgZm9yIGZ1bGwgYXBpVmVyc2lvbiBhbmQgcGVuZGluZ0FwcHJvdmFsIHN0YXRlJywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgdHhSZXF1ZXN0ID0ge1xuICAgICAgICBhcGlWZXJzaW9uOiAnZnVsbCcsXG4gICAgICAgIHN0YXRlOiAncGVuZGluZ0FwcHJvdmFsJyxcbiAgICAgIH0gYXMgVHhSZXF1ZXN0O1xuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdHNzVXRpbHMuaXNQZW5kaW5nQXBwcm92YWxUeFJlcXVlc3RGdWxsKHR4UmVxdWVzdCk7XG4gICAgICByZXN1bHQuc2hvdWxkLmJlLnRydWUoKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgcmV0dXJuIGZhbHNlIGZvciBub24tZnVsbCBhcGlWZXJzaW9uJywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgdHhSZXF1ZXN0ID0ge1xuICAgICAgICBhcGlWZXJzaW9uOiAnbGl0ZScsXG4gICAgICAgIHN0YXRlOiAncGVuZGluZ0FwcHJvdmFsJyxcbiAgICAgIH0gYXMgVHhSZXF1ZXN0O1xuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdHNzVXRpbHMuaXNQZW5kaW5nQXBwcm92YWxUeFJlcXVlc3RGdWxsKHR4UmVxdWVzdCk7XG4gICAgICByZXN1bHQuc2hvdWxkLmJlLmZhbHNlKCk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHJldHVybiBmYWxzZSBmb3Igbm9uLXBlbmRpbmdBcHByb3ZhbCBzdGF0ZScsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IHR4UmVxdWVzdCA9IHtcbiAgICAgICAgYXBpVmVyc2lvbjogJ2Z1bGwnLFxuICAgICAgICBzdGF0ZTogJ3BlbmRpbmdEZWxpdmVyeScsXG4gICAgICB9IGFzIFR4UmVxdWVzdDtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRzc1V0aWxzLmlzUGVuZGluZ0FwcHJvdmFsVHhSZXF1ZXN0RnVsbCh0eFJlcXVlc3QpO1xuICAgICAgcmVzdWx0LnNob3VsZC5iZS5mYWxzZSgpO1xuICAgIH0pO1xuICB9KTtcblxuICAvLyAjcmVnaW9uIE5vY2sgaGVscGVyc1xuICBhc3luYyBmdW5jdGlvbiBnZW5lcmF0ZUJpdGdvS2V5Y2hhaW4ocGFyYW1zOiB7XG4gICAgY29pbjogc3RyaW5nO1xuICAgIHVzZXJLZXlTaGFyZTogS2V5U2hhcmU7XG4gICAgYmFja3VwS2V5U2hhcmU6IEtleVNoYXJlO1xuICAgIGJpdGdvS2V5U2hhcmU6IEtleVNoYXJlO1xuICAgIHVzZXJHcGdLZXk6IG9wZW5wZ3AuU2VyaWFsaXplZEtleVBhaXI8c3RyaW5nPjtcbiAgICBiYWNrdXBHcGdLZXk6IG9wZW5wZ3AuU2VyaWFsaXplZEtleVBhaXI8c3RyaW5nPjtcbiAgICBiaXRnb0dwZ0tleTogb3BlbnBncC5TZXJpYWxpemVkS2V5UGFpcjxzdHJpbmc+O1xuICB9KTogUHJvbWlzZTxLZXljaGFpbj4ge1xuICAgIGNvbnN0IGJpdGdvQ29tYmluZWQgPSBNUEMua2V5Q29tYmluZShwYXJhbXMuYml0Z29LZXlTaGFyZS51U2hhcmUsIFtcbiAgICAgIHBhcmFtcy51c2VyS2V5U2hhcmUueVNoYXJlc1szXSxcbiAgICAgIHBhcmFtcy5iYWNrdXBLZXlTaGFyZS55U2hhcmVzWzNdLFxuICAgIF0pO1xuICAgIGNvbnN0IHVzZXJHcGdLZXlBY3R1YWwgPSBhd2FpdCBvcGVucGdwLnJlYWRLZXkoeyBhcm1vcmVkS2V5OiBwYXJhbXMudXNlckdwZ0tleS5wdWJsaWNLZXkgfSk7XG4gICAgY29uc3QgYmFja3VwR3BnS2V5QWN0dWFsID0gYXdhaXQgb3BlbnBncC5yZWFkS2V5KHsgYXJtb3JlZEtleTogcGFyYW1zLmJhY2t1cEdwZ0tleS5wdWJsaWNLZXkgfSk7XG5cbiAgICBjb25zdCBiaXRnb1RvVXNlck1lc3NhZ2UgPSBhd2FpdCBvcGVucGdwLmNyZWF0ZU1lc3NhZ2Uoe1xuICAgICAgdGV4dDogQnVmZmVyLmNvbmNhdChbXG4gICAgICAgIEJ1ZmZlci5mcm9tKHBhcmFtcy5iaXRnb0tleVNoYXJlLnlTaGFyZXNbMV0udSwgJ2hleCcpLFxuICAgICAgICBCdWZmZXIuZnJvbShwYXJhbXMuYml0Z29LZXlTaGFyZS55U2hhcmVzWzFdLmNoYWluY29kZSwgJ2hleCcpLFxuICAgICAgXSkudG9TdHJpbmcoJ2hleCcpLFxuICAgIH0pO1xuICAgIGNvbnN0IGVuY3J5cHRlZEJpdGdvVG9Vc2VyTWVzc2FnZSA9IGF3YWl0IG9wZW5wZ3AuZW5jcnlwdCh7XG4gICAgICBtZXNzYWdlOiBiaXRnb1RvVXNlck1lc3NhZ2UsXG4gICAgICBlbmNyeXB0aW9uS2V5czogW3VzZXJHcGdLZXlBY3R1YWwudG9QdWJsaWMoKV0sXG4gICAgICBmb3JtYXQ6ICdhcm1vcmVkJyxcbiAgICB9KTtcblxuICAgIGNvbnN0IGJpdGdvVG9CYWNrdXBNZXNzYWdlID0gYXdhaXQgb3BlbnBncC5jcmVhdGVNZXNzYWdlKHtcbiAgICAgIHRleHQ6IEJ1ZmZlci5jb25jYXQoW1xuICAgICAgICBCdWZmZXIuZnJvbShwYXJhbXMuYml0Z29LZXlTaGFyZS55U2hhcmVzWzJdLnUsICdoZXgnKSxcbiAgICAgICAgQnVmZmVyLmZyb20ocGFyYW1zLmJpdGdvS2V5U2hhcmUueVNoYXJlc1syXS5jaGFpbmNvZGUsICdoZXgnKSxcbiAgICAgIF0pLnRvU3RyaW5nKCdoZXgnKSxcbiAgICB9KTtcbiAgICBjb25zdCBlbmNyeXB0ZWRCaXRnb1RvQmFja3VwTWVzc2FnZSA9IGF3YWl0IG9wZW5wZ3AuZW5jcnlwdCh7XG4gICAgICBtZXNzYWdlOiBiaXRnb1RvQmFja3VwTWVzc2FnZSxcbiAgICAgIGVuY3J5cHRpb25LZXlzOiBbYmFja3VwR3BnS2V5QWN0dWFsLnRvUHVibGljKCldLFxuICAgICAgZm9ybWF0OiAnYXJtb3JlZCcsXG4gICAgfSk7XG5cbiAgICBjb25zdCBiaXRnb0tleWNoYWluOiBLZXljaGFpbiA9IHtcbiAgICAgIGlkOiAnMycsXG4gICAgICBwdWI6ICcnLFxuICAgICAgY29tbW9uS2V5Y2hhaW46IGJpdGdvQ29tYmluZWQucFNoYXJlLnkgKyBiaXRnb0NvbWJpbmVkLnBTaGFyZS5jaGFpbmNvZGUsXG4gICAgICBrZXlTaGFyZXM6IFtcbiAgICAgICAge1xuICAgICAgICAgIGZyb206ICdiaXRnbycsXG4gICAgICAgICAgdG86ICd1c2VyJyxcbiAgICAgICAgICBwdWJsaWNTaGFyZTogcGFyYW1zLmJpdGdvS2V5U2hhcmUueVNoYXJlc1sxXS55ICsgcGFyYW1zLmJpdGdvS2V5U2hhcmUueVNoYXJlc1sxXS5jaGFpbmNvZGUsXG4gICAgICAgICAgcHJpdmF0ZVNoYXJlOiBlbmNyeXB0ZWRCaXRnb1RvVXNlck1lc3NhZ2UudG9TdHJpbmcoKSxcbiAgICAgICAgICB2c3NQcm9vZjogcGFyYW1zLmJpdGdvS2V5U2hhcmUueVNoYXJlc1sxXS52LFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgZnJvbTogJ2JpdGdvJyxcbiAgICAgICAgICB0bzogJ2JhY2t1cCcsXG4gICAgICAgICAgcHVibGljU2hhcmU6IHBhcmFtcy5iaXRnb0tleVNoYXJlLnlTaGFyZXNbMl0ueSArIHBhcmFtcy5iaXRnb0tleVNoYXJlLnlTaGFyZXNbMl0uY2hhaW5jb2RlLFxuICAgICAgICAgIHByaXZhdGVTaGFyZTogZW5jcnlwdGVkQml0Z29Ub0JhY2t1cE1lc3NhZ2UudG9TdHJpbmcoKSxcbiAgICAgICAgICB2c3NQcm9vZjogcGFyYW1zLmJpdGdvS2V5U2hhcmUueVNoYXJlc1syXS52LFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICAgIHR5cGU6ICd0c3MnLFxuICAgIH07XG5cbiAgICBjb25zdCB1c2VyS2V5SWQgPSB1c2VyR3BnS2V5QWN0dWFsLmtleVBhY2tldC5nZXRGaW5nZXJwcmludCgpO1xuICAgIGNvbnN0IGJhY2t1cEtleUlkID0gYmFja3VwR3BnS2V5QWN0dWFsLmtleVBhY2tldC5nZXRGaW5nZXJwcmludCgpO1xuICAgIGNvbnN0IGJpdGdvVG9Vc2VyUHVibGljU2hhcmUgPVxuICAgICAgQnVmZmVyLmZyb20oXG4gICAgICAgIGF3YWl0IHNvZGl1bS5jcnlwdG9fc2NhbGFybXVsdF9lZDI1NTE5X2Jhc2Vfbm9jbGFtcChCdWZmZXIuZnJvbShwYXJhbXMuYml0Z29LZXlTaGFyZS55U2hhcmVzWzFdLnUsICdoZXgnKSlcbiAgICAgICkudG9TdHJpbmcoJ2hleCcpICsgcGFyYW1zLmJpdGdvS2V5U2hhcmUueVNoYXJlc1sxXS5jaGFpbmNvZGU7XG4gICAgY29uc3QgYml0Z29Ub0JhY2t1cFB1YmxpY1NoYXJlID1cbiAgICAgIEJ1ZmZlci5mcm9tKFxuICAgICAgICBhd2FpdCBzb2RpdW0uY3J5cHRvX3NjYWxhcm11bHRfZWQyNTUxOV9iYXNlX25vY2xhbXAoQnVmZmVyLmZyb20ocGFyYW1zLmJpdGdvS2V5U2hhcmUueVNoYXJlc1syXS51LCAnaGV4JykpXG4gICAgICApLnRvU3RyaW5nKCdoZXgnKSArIHBhcmFtcy5iaXRnb0tleVNoYXJlLnlTaGFyZXNbMl0uY2hhaW5jb2RlO1xuXG4gICAgYml0Z29LZXljaGFpbi53YWxsZXRIU01HUEdQdWJsaWNLZXlTaWdzID0gYXdhaXQgY3JlYXRlV2FsbGV0U2lnbmF0dXJlcyhcbiAgICAgIHBhcmFtcy5iaXRnb0dwZ0tleS5wcml2YXRlS2V5LFxuICAgICAgcGFyYW1zLnVzZXJHcGdLZXkucHVibGljS2V5LFxuICAgICAgcGFyYW1zLmJhY2t1cEdwZ0tleS5wdWJsaWNLZXksXG4gICAgICBbXG4gICAgICAgIHsgbmFtZTogJ2NvbW1vbktleWNoYWluJywgdmFsdWU6IGJpdGdvQ29tYmluZWQucFNoYXJlLnkgKyBiaXRnb0NvbWJpbmVkLnBTaGFyZS5jaGFpbmNvZGUgfSxcbiAgICAgICAgeyBuYW1lOiAndXNlcktleUlkJywgdmFsdWU6IHVzZXJLZXlJZCB9LFxuICAgICAgICB7IG5hbWU6ICdiYWNrdXBLZXlJZCcsIHZhbHVlOiBiYWNrdXBLZXlJZCB9LFxuICAgICAgICB7IG5hbWU6ICdiaXRnb1RvVXNlclB1YmxpY1NoYXJlJywgdmFsdWU6IGJpdGdvVG9Vc2VyUHVibGljU2hhcmUgfSxcbiAgICAgICAgeyBuYW1lOiAnYml0Z29Ub0JhY2t1cFB1YmxpY1NoYXJlJywgdmFsdWU6IGJpdGdvVG9CYWNrdXBQdWJsaWNTaGFyZSB9LFxuICAgICAgXVxuICAgICk7XG5cbiAgICByZXR1cm4gYml0Z29LZXljaGFpbjtcbiAgfVxuXG4gIGFzeW5jIGZ1bmN0aW9uIG5vY2tCaXRnb0tleWNoYWluKHBhcmFtczoge1xuICAgIGNvaW46IHN0cmluZztcbiAgICB1c2VyS2V5U2hhcmU6IEtleVNoYXJlO1xuICAgIGJhY2t1cEtleVNoYXJlOiBLZXlTaGFyZTtcbiAgICBiaXRnb0tleVNoYXJlOiBLZXlTaGFyZTtcbiAgICB1c2VyR3BnS2V5OiBvcGVucGdwLlNlcmlhbGl6ZWRLZXlQYWlyPHN0cmluZz47XG4gICAgYmFja3VwR3BnS2V5OiBvcGVucGdwLlNlcmlhbGl6ZWRLZXlQYWlyPHN0cmluZz47XG4gICAgYml0Z29HcGdLZXk6IG9wZW5wZ3AuU2VyaWFsaXplZEtleVBhaXI8c3RyaW5nPjtcbiAgfSk6IFByb21pc2U8S2V5Y2hhaW4+IHtcbiAgICBjb25zdCBiaXRnb0tleWNoYWluID0gYXdhaXQgZ2VuZXJhdGVCaXRnb0tleWNoYWluKHBhcmFtcyk7XG5cbiAgICBub2NrKGJnVXJsKVxuICAgICAgLnBvc3QoYC9hcGkvdjIvJHtwYXJhbXMuY29pbn0va2V5YCwgXy5tYXRjaGVzKHsga2V5VHlwZTogJ3RzcycsIHNvdXJjZTogJ2JpdGdvJyB9KSlcbiAgICAgIC5yZXBseSgyMDAsIGJpdGdvS2V5Y2hhaW4pO1xuXG4gICAgcmV0dXJuIGJpdGdvS2V5Y2hhaW47XG4gIH1cblxuICBhc3luYyBmdW5jdGlvbiBub2NrVXNlcktleWNoYWluKHBhcmFtczogeyBjb2luOiBzdHJpbmcgfSk6IFByb21pc2U8S2V5Y2hhaW4+IHtcbiAgICBjb25zdCB1c2VyS2V5Y2hhaW46IEtleWNoYWluID0ge1xuICAgICAgaWQ6ICcxJyxcbiAgICAgIHB1YjogJycsXG4gICAgICB0eXBlOiAndHNzJyxcbiAgICB9O1xuXG4gICAgbm9jaygnaHR0cHM6Ly9iaXRnby5mYWtldXJsJylcbiAgICAgIC5wb3N0KGAvYXBpL3YyLyR7cGFyYW1zLmNvaW59L2tleWAsIF8ubWF0Y2hlcyh7IGtleVR5cGU6ICd0c3MnLCBzb3VyY2U6ICd1c2VyJyB9KSlcbiAgICAgIC5yZXBseSgyMDAsIHVzZXJLZXljaGFpbik7XG5cbiAgICByZXR1cm4gdXNlcktleWNoYWluO1xuICB9XG5cbiAgYXN5bmMgZnVuY3Rpb24gbm9ja0JhY2t1cEtleWNoYWluKHBhcmFtczogeyBjb2luOiBzdHJpbmcgfSk6IFByb21pc2U8S2V5Y2hhaW4+IHtcbiAgICBjb25zdCBiYWNrdXBLZXljaGFpbjogS2V5Y2hhaW4gPSB7XG4gICAgICBpZDogJzInLFxuICAgICAgcHViOiAnJyxcbiAgICAgIHR5cGU6ICd0c3MnLFxuICAgIH07XG5cbiAgICBub2NrKCdodHRwczovL2JpdGdvLmZha2V1cmwnKVxuICAgICAgLnBvc3QoYC9hcGkvdjIvJHtwYXJhbXMuY29pbn0va2V5YCwgXy5tYXRjaGVzKHsga2V5VHlwZTogJ3RzcycsIHNvdXJjZTogJ2JhY2t1cCcgfSkpXG4gICAgICAucmVwbHkoMjAwLCBiYWNrdXBLZXljaGFpbik7XG5cbiAgICByZXR1cm4gYmFja3VwS2V5Y2hhaW47XG4gIH1cblxuICBkZXNjcmliZSgnZ2V0UHVibGljS2V5RnJvbUNvbW1vbktleWNoYWluJywgZnVuY3Rpb24gKCkge1xuICAgIC8vIDMyLWJ5dGUgZWQyNTUxOSBwdWJsaWMga2V5IGFzIGhleCAoNjQgY2hhcnMpICsgMzItYnl0ZSBjaGFpbmNvZGUgKDY0IGNoYXJzKSA9IDEyOCBjaGFyc1xuICAgIGNvbnN0IHB1YkhleCA9ICdhMzA0NzMzYzE2Y2M4MjFmZTE3MWQ1YzdkYmQ3Mjc2ZmQ5MGRlYWU4MDhiNzU1M2QxN2ExZTU1ZTRhNzZiMjcwJztcbiAgICBjb25zdCBjaGFpbmNvZGUgPSAnOWQ5MWMyZTYzNTMyMDJjZjYxZjhmMjc1MTU4YjM0NjhlOWEwMGY3ODcyZmMyZmQzMTBiNzJjZDAyNmUyZTJmOSc7XG4gICAgY29uc3QgY29tbW9uS2V5Y2hhaW4gPSBwdWJIZXggKyBjaGFpbmNvZGU7XG5cbiAgICBpdCgnc2hvdWxkIGRlY29kZSB0aGUgMzItYnl0ZSBwdWJsaWMga2V5IGZyb20gYSAxMjgtY2hhciBjb21tb25LZXljaGFpbicsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbW1vbktleWNoYWluLmxlbmd0aC5zaG91bGQuZXF1YWwoMTI4KTtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IFRzc1V0aWxzLmdldFB1YmxpY0tleUZyb21Db21tb25LZXljaGFpbihjb21tb25LZXljaGFpbik7XG4gICAgICByZXN1bHQuc2hvdWxkLmVxdWFsKCdCeU1QZVZ4czdlOHpHZWN1OG4xTTQzTXE5cWt4QlN5cE5Od0hlRXUyTjZ2YicpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCB0aHJvdyBmb3IgYW4gaW52YWxpZCBjb21tb25LZXljaGFpbiBsZW5ndGgnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBzaG91bGQudGhyb3dzKFxuICAgICAgICAoKSA9PiBUc3NVdGlscy5nZXRQdWJsaWNLZXlGcm9tQ29tbW9uS2V5Y2hhaW4oJ2FiY2QnKSxcbiAgICAgICAgL0ludmFsaWQgY29tbW9uS2V5Y2hhaW4gbGVuZ3RoLCBleHBlY3RlZCAxMjgsIGdvdCA0L1xuICAgICAgKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ2dldEJpdGdvR3BnUHVia2V5QmFzZWRPbkZlYXR1cmVGbGFncycsIGZ1bmN0aW9uICgpIHtcbiAgICBpdCgnc2hvdWxkIHJldHVybiBlZGRzYU1wY3YyUHVibGljS2V5IHdoZW4gcHJlc2VudCBpbiBmZWF0dXJlIGZsYWdzIHJlc3BvbnNlJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgZWQyNTUxOUtleVBhaXIgPSBhd2FpdCBvcGVucGdwLmdlbmVyYXRlS2V5KHtcbiAgICAgICAgdXNlcklEczogW3sgbmFtZTogJ2JpdGdvIGVkZHNhJywgZW1haWw6ICdiaXRnb0B0ZXN0LmNvbScgfV0sXG4gICAgICAgIGN1cnZlOiAnZWQyNTUxOScsXG4gICAgICB9KTtcbiAgICAgIGNvbnN0IHJlc3BvbnNlOiBCaXRnb0dQR1B1YmxpY0tleSA9IHtcbiAgICAgICAgbmFtZTogJ2lycmVsZXZhbnQnLFxuICAgICAgICBwdWJsaWNLZXk6IGVkMjU1MTlLZXlQYWlyLnB1YmxpY0tleSxcbiAgICAgICAgbXBjdjJQdWJsaWNLZXk6IGVkMjU1MTlLZXlQYWlyLnB1YmxpY0tleSxcbiAgICAgICAgZWRkc2FNcGN2MlB1YmxpY0tleTogZWQyNTUxOUtleVBhaXIucHVibGljS2V5LFxuICAgICAgICBlbnRlcnByaXNlSWQ6ICdlbnRlcnByaXNlX2lkJyxcbiAgICAgIH07XG4gICAgICBub2NrKGJnVXJsKS5nZXQoYC9hcGkvdjIvJHtjb2luTmFtZX0vdHNzL3B1YmtleWApLnF1ZXJ5KHsgZW50ZXJwcmlzZUlkOiAnZW50ZXJwcmlzZV9pZCcgfSkucmVwbHkoMjAwLCByZXNwb25zZSk7XG4gICAgICBjb25zdCB7IGVkZHNhTXBjdjJQdWJsaWNLZXkgfSA9IGF3YWl0IHRzc1V0aWxzLmdldEJpdGdvR3BnUHVia2V5QmFzZWRPbkZlYXR1cmVGbGFncygnZW50ZXJwcmlzZV9pZCcpO1xuICAgICAgc2hvdWxkLmV4aXN0KGVkZHNhTXBjdjJQdWJsaWNLZXkpO1xuICAgICAgc2hvdWxkLmVxdWFsKGVkMjU1MTlLZXlQYWlyLnB1YmxpY0tleSwgZWRkc2FNcGN2MlB1YmxpY0tleSEuYXJtb3IoKSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHJldHVybiB1bmRlZmluZWQgZWRkc2FNcGN2MlB1YmxpY0tleSB3aGVuIGFic2VudCBmcm9tIGZlYXR1cmUgZmxhZ3MgcmVzcG9uc2UnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBrZXlQYWlyID0gYXdhaXQgb3BlbnBncC5nZW5lcmF0ZUtleSh7XG4gICAgICAgIHVzZXJJRHM6IFt7IG5hbWU6ICdiaXRnbycsIGVtYWlsOiAnYml0Z29AdGVzdC5jb20nIH1dLFxuICAgICAgfSk7XG4gICAgICBjb25zdCByZXNwb25zZTogQml0Z29HUEdQdWJsaWNLZXkgPSB7XG4gICAgICAgIG5hbWU6ICdpcnJlbGV2YW50JyxcbiAgICAgICAgcHVibGljS2V5OiBrZXlQYWlyLnB1YmxpY0tleSxcbiAgICAgICAgbXBjdjJQdWJsaWNLZXk6IGtleVBhaXIucHVibGljS2V5LFxuICAgICAgICBlbnRlcnByaXNlSWQ6ICdlbnRlcnByaXNlX2lkJyxcbiAgICAgIH07XG4gICAgICBub2NrKGJnVXJsKS5nZXQoYC9hcGkvdjIvJHtjb2luTmFtZX0vdHNzL3B1YmtleWApLnF1ZXJ5KHsgZW50ZXJwcmlzZUlkOiAnZW50ZXJwcmlzZV9pZCcgfSkucmVwbHkoMjAwLCByZXNwb25zZSk7XG4gICAgICBjb25zdCB7IGVkZHNhTXBjdjJQdWJsaWNLZXkgfSA9IGF3YWl0IHRzc1V0aWxzLmdldEJpdGdvR3BnUHVia2V5QmFzZWRPbkZlYXR1cmVGbGFncygnZW50ZXJwcmlzZV9pZCcpO1xuICAgICAgc2hvdWxkLm5vdC5leGlzdChlZGRzYU1wY3YyUHVibGljS2V5KTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgLy8gI2VuZHJlZ2lvbiBOb2NrIGhlbHBlcnNcbn0pO1xuIl19
1569
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWRkc2EuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90ZXN0L3YyL3VuaXQvaW50ZXJuYWwvdHNzVXRpbHMvZWRkc2EudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSxpQ0FBaUM7QUFDakMsa0RBQWtEO0FBQ2xELDRCQUE0QjtBQUM1Qiw2QkFBOEI7QUFDOUIsbUNBQW1DO0FBQ25DLGlDQUFrQztBQUNsQywrQkFBK0I7QUFFL0IsOENBQXdEO0FBQ3hELDRDQUEyQztBQUMzQyw4Q0F1QnlCO0FBQ3pCLCtDQUEyRDtBQUMzRCxxQ0FPa0I7QUFFbEIsT0FBTyxDQUFDLE1BQU0sQ0FBQyxZQUFZLEdBQUcsSUFBSSxHQUFHLEVBQUUsQ0FBQztBQUV4QyxRQUFRLENBQUMsWUFBWSxFQUFFLEtBQUs7SUFDMUIsSUFBSSxPQUEyQixDQUFDO0lBQ2hDLElBQUksR0FBVSxDQUFDO0lBQ2YsSUFBSSxLQUFhLENBQUM7SUFDbEIsSUFBSSxRQUFrQixDQUFDO0lBQ3ZCLElBQUksVUFBVSxDQUFDO0lBQ2YsSUFBSSxZQUFZLENBQUM7SUFDakIsSUFBSSxXQUFXLENBQUM7SUFDaEIsSUFBSSxLQUF5QixDQUFDO0lBQzlCLElBQUksUUFBa0IsQ0FBQztJQUN2QixJQUFJLE1BQWMsQ0FBQztJQUNuQixJQUFJLGFBQWEsQ0FBQztJQUNsQixNQUFNLEtBQUssR0FBRyxJQUFJLHdCQUFhLEVBQUUsQ0FBQztJQUNsQyxNQUFNLFFBQVEsR0FBRyxNQUFNLENBQUM7SUFDeEIsTUFBTSx3QkFBd0IsR0FBRztRQUMvQixNQUFNLEVBQUU7WUFDTixDQUFDLEVBQUUsQ0FBQztZQUNKLENBQUMsRUFBRSxDQUFDO1lBQ0osQ0FBQyxFQUFFLENBQUM7WUFDSixDQUFDLEVBQUUsa0VBQWtFO1lBQ3JFLElBQUksRUFBRSxrRUFBa0U7WUFDeEUsU0FBUyxFQUFFLGtFQUFrRTtTQUM5RTtRQUNELGVBQWUsRUFBRSxrRUFBa0U7UUFDbkYsV0FBVyxF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QUUsQ0FBQzthQUN0RCxDQUFDLENBQUM7WUFDSCxNQUFNLFFBQVEsR0FBc0I7Z0JBQ2xDLElBQUksRUFBRSxZQUFZO2dCQUNsQixTQUFTLEVBQUUsT0FBTyxDQUFDLFNBQVM7Z0JBQzVCLGNBQWMsRUFBRSxPQUFPLENBQUMsU0FBUztnQkFDakMsWUFBWSxFQUFFLGVBQWU7YUFDOUIsQ0FBQztZQUNGLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLENBQUMsV0FBVyxRQUFRLGFBQWEsQ0FBQyxDQUFDLEtBQUssQ0FBQyxFQUFFLFlBQVksRUFBRSxlQUFlLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUUsUUFBUSxDQUFDLENBQUM7WUFDaEgsTUFBTSxFQUFFLG1CQUFtQixFQUFFLEdBQUcsTUFBTSxRQUFRLENBQUMsb0NBQW9DLENBQUMsZUFBZSxDQUFDLENBQUM7WUFDckcsTUFBTSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsbUJBQW1CLENBQUMsQ0FBQztRQUN4QyxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0lBRUgsMEJBQTBCO0FBQzVCLENBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgYXNzZXJ0IGZyb20gJ2Fzc2VydCc7XG5pbXBvcnQgKiBhcyBzb2RpdW0gZnJvbSAnbGlic29kaXVtLXdyYXBwZXJzLXN1bW8nO1xuaW1wb3J0ICogYXMgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IG5vY2sgPSByZXF1aXJlKCdub2NrJyk7XG5pbXBvcnQgKiBhcyBvcGVucGdwIGZyb20gJ29wZW5wZ3AnO1xuaW1wb3J0IHNob3VsZCA9IHJlcXVpcmUoJ3Nob3VsZCcpO1xuaW1wb3J0ICogYXMgc2lub24gZnJvbSAnc2lub24nO1xuXG5pbXBvcnQgeyBUZXN0YWJsZUJHLCBUZXN0Qml0R28gfSBmcm9tICdAYml0Z28vc2RrLXRlc3QnO1xuaW1wb3J0IHsgQml0R28gfSBmcm9tICcuLi8uLi8uLi8uLi8uLi9zcmMnO1xuaW1wb3J0IHtcbiAgQWRkS2V5Y2hhaW5PcHRpb25zLFxuICBCYXNlQ29pbixcbiAgQml0Z29HUEdQdWJsaWNLZXksXG4gIENvbW1pdG1lbnRTaGFyZVJlY29yZCxcbiAgQ29tbWl0bWVudFR5cGUsXG4gIGNvbW1vbixcbiAgY3JlYXRlU2hhcmVkRGF0YVByb29mLFxuICBFZDI1NTE5QklQMzIsXG4gIEVERFNBVXRpbHMsXG4gIEVkZHNhLFxuICBFbmNyeXB0ZWRTaWduZXJTaGFyZVR5cGUsXG4gIEV4Y2hhbmdlQ29tbWl0bWVudFJlc3BvbnNlLFxuICBJbnZhbGlkVHJhbnNhY3Rpb25FcnJvcixcbiAgS2V5Y2hhaW4sXG4gIEtleVNoYXJlLFxuICBSZXF1ZXN0VHJhY2VyLFxuICBSZXF1ZXN0VHlwZSxcbiAgU2lnbmF0dXJlU2hhcmVSZWNvcmQsXG4gIFNpZ25hdHVyZVNoYXJlVHlwZSxcbiAgVHNzVXRpbHMsXG4gIFR4UmVxdWVzdCxcbiAgV2FsbGV0LFxufSBmcm9tICdAYml0Z28vc2RrLWNvcmUnO1xuaW1wb3J0IHsgY3JlYXRlV2FsbGV0U2lnbmF0dXJlcyB9IGZyb20gJy4uLy4uL3Rzcy9oZWxwZXJzJztcbmltcG9ydCB7XG4gIG5vY2tDcmVhdGVUeFJlcXVlc3QsXG4gIG5vY2tEZWxldGVTaWduYXR1cmVTaGFyZSxcbiAgbm9ja0V4Y2hhbmdlQ29tbWl0bWVudHMsXG4gIG5vY2tHZXRUeFJlcXVlc3QsXG4gIG5vY2tTZW5kU2lnbmF0dXJlU2hhcmUsXG4gIG5vY2tTZW5kVHhSZXF1ZXN0LFxufSBmcm9tICcuL2NvbW1vbic7XG5cbm9wZW5wZ3AuY29uZmlnLnJlamVjdEN1cnZlcyA9IG5ldyBTZXQoKTtcblxuZGVzY3JpYmUoJ1RTUyBVdGlsczonLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gIGxldCBzYW5kYm94OiBzaW5vbi5TaW5vblNhbmRib3g7XG4gIGxldCBNUEM6IEVkZHNhO1xuICBsZXQgYmdVcmw6IHN0cmluZztcbiAgbGV0IHRzc1V0aWxzOiBUc3NVdGlscztcbiAgbGV0IHVzZXJHcGdLZXk7XG4gIGxldCBiYWNrdXBHcGdLZXk7XG4gIGxldCBiaXRnb0dwZ0tleTtcbiAgbGV0IGJpdGdvOiBUZXN0YWJsZUJHICYgQml0R287XG4gIGxldCBiYXNlQ29pbjogQmFzZUNvaW47XG4gIGxldCB3YWxsZXQ6IFdhbGxldDtcbiAgbGV0IGJpdGdvS2V5U2hhcmU7XG4gIGNvbnN0IHJlcUlkID0gbmV3IFJlcXVlc3RUcmFjZXIoKTtcbiAgY29uc3QgY29pbk5hbWUgPSAndHNvbCc7XG4gIGNvbnN0IHZhbGlkVXNlclNpZ25pbmdNYXRlcmlhbCA9IHtcbiAgICB1U2hhcmU6IHtcbiAgICAgIGk6IDEsXG4gICAgICB0OiAyLFxuICAgICAgbjogMyxcbiAgICAgIHk6ICcwOTNjODYwM2FkODZjNDFkNWVlMjVhODE0Yjg4MTg1YjQzNWRkM2E5Y2VjY2Y5YzlmZDY5MWE0NjVhYzRhOGIwJyxcbiAgICAgIHNlZWQ6ICdjYTQwYzc4OTgxMzI1MGMzMzRkZGQyYmExOTA1MGY2ZWQyMGI1YTA4ODUzY2VjYTQ5MjM1OGYyNzExYWQ0YjE1JyxcbiAgICAgIGNoYWluY29kZTogJzU5NmQ1NDA0YTdlYjkxOGVlNzgyNDdiOTUyZDA2NTM5NjE5ODg0MDkxZmRkOWUwZmY1YTY2NWYzNDllMzJmY2EnLFxuICAgIH0sXG4gICAgY29tbW9uQ2hhaW5jb2RlOiAnNTk2ZDU0MDRhN2ViOTE4ZWU3ODI0N2I5NTJkMDY1Mzk2MTk4ODQwOTFmZGQ5ZTBmZjVhNjY1ZjM0OWUzMmZjYScsXG4gICAgYml0Z29ZU2hhcmU6IHtcbiAgICAgIGk6IDEsXG4gICAgICBqOiAzLFxuICAgICAgeTogJzU5ZDgwMDBiYTVlODVmYTQwMmYzOTM4Mjk2MGU3ZDVlZGU4MmIxYjZlMjJiMTQ2YTE4YjdkZjIzOGMzYTMyMjUnLFxuICAgICAgdjogJzAxZWEzZjQyNWIxYWRmOGFlYzZjZmU0ZmM4ZjliOTQ3NTVjMzQ2NTc5NjVmMzIzOTc2NTVkY2Q3ODRmMWI1MTcnLFxuICAgICAgdTogJzljZTMyMDRhOGM5NzU3NzM4OTY3ZjNmODFiNDYzZDg3MjY3YmY2ZjJjMGU1ZWFmMjg0MzE2NzUzN2I4NzJiMGInLFxuICAgICAgY2hhaW5jb2RlOiAnZDIxZGJkOGVhZTVkNDc4OTI5MmVjZWEyZWZhNTNlMDE2NWIyNDM5ZDU3ZjUxNThlYjRkZDU3ZGMyNmI1OTIzNicsXG4gICAgfSxcbiAgICBiYWNrdXBZU2hhcmU6IHtcbiAgICAgIGk6IDEsXG4gICAgICBqOiAyLFxuICAgICAgeTogJ2UwYWU3NTA3NzcxNTY4NmExMjFhY2I0MWIyOWE1NWJkZTQyNjk3MTE1NGY0MGE0MWZjMzE3ZjdmNzc0YTk0MjQnLFxuICAgICAgdjogJ2Y3NmVmNjI5ZGZjMTVhYjVlNDUzMWU1MzJiNWQ2N2YyMTc2NjM3Y2E3NTJiMTk1ODc2YjdlMzE3MjQ1OWM5NjknLFxuICAgICAgdTogJ2ZlNmI4OWZiNmFjZmNkNzM5MmMzNWMwODRmNThiZGUwODQ2Yjg4OGM0ZGY1N2U0NjZjYWYwYTMyNzFiMDZhMDUnLFxuICAgICAgY2hhaW5jb2RlOiAnMWMzNGU1ZGZiYmQ0YTg3MGY0NDc5Y2FhYTVlNmE0NmUzNDM4Zjk3NmFkNWFlZmQ0OTA1YjhmZThiY2ExMTAxZScsXG4gICAgfSxcbiAgfTtcblxuICBjb25zdCB2YWxpZFVzZXJTaWduU2hhcmUgPSB7XG4gICAgeFNoYXJlOiB7XG4gICAgICBpOiAxLFxuICAgICAgeTogJzRkOTM0Mzk4OGU2ODE5MWFhYzk0NWE2OTYzMDMxZGRkZGUzNDkwZjkwMjBkMDU3MWE2ZTZjNmUxNWNjYTAyOTYnLFxuICAgICAgdTogJzFlMTU5ZDZhMGFlM2E4ZGNjYzc0NjE1MTEzZTdjM2UyNWQzMDgwZTVlMGZmZWIwYWUwNGRkNmE5NjcyNjgxMDInLFxuICAgICAgcjogJ2M4ZjY0Y2M0ODkyNjIxNmMzZjYwZTFkOGZmMWUyNGViYTA2MGQ3YzFmZjAyMGQwZmMxZDczNWQ0NTY0ZWZkMDMnLFxuICAgICAgUjogJzliZTIyMDhlZTI4Y2Q0YjI1NzdhOWE2NmY2YWFiMWVkOGIwOGEzMDA5NjllZWI5YjIwM2E1MmFhNTRkMmMyM2MnLFxuICAgIH0sXG4gICAgclNoYXJlczoge1xuICAgICAgMzoge1xuICAgICAgICBpOiAzLFxuICAgICAgICBqOiAxLFxuICAgICAgICB1OiAnZDY3NWY5MDk5ZmJlZjAzYWE5ZmNkY2E0MDA5Mjg2ZjQzNWU1NjM2OWMzNzRkMDA0MmYwM2NjNjBiNDllNjkwYScsXG4gICAgICAgIHY6ICczYzA5MGU4OGVkNDJkYTBkZDBiYWRlMzVjOGQ2Yjg4YmMwNTAyODQ1MzZiOThlNWIyN2QzM2ZmNDVkYTk3NTViJyxcbiAgICAgICAgcjogJzdmMTYyMjRkYmY1YjAyYWRiNmMyMTM4MGZjYjJhOGVlMDAzMjNkYWFlNjJjYWMzNTc1YTRkMzI4ZmQyM2E5MDUnLFxuICAgICAgICBSOiAnOWJlMjIwOGVlMjhjZDRiMjU3N2E5YTY2ZjZhYWIxZWQ4YjA4YTMwMDk2OWVlYjliMjAzYTUyYWE1NGQyYzIzYycsXG4gICAgICAgIGNvbW1pdG1lbnQ6ICc0NDVjOGNiMWRlZTAxNjZiNmJkZDVhZDFkMGE1M2ZiZmU4NmM0ZDNhNDcwZjE4NDc0NTUzMGE4NjNlZWRmZjI4JyxcbiAgICAgIH0sXG4gICAgfSxcbiAgfTtcblxuICBjb25zdCB2YWxpZEJpdGdvVG9Vc2VyU2lnblNoYXJlID0ge1xuICAgIHhTaGFyZToge1xuICAgICAgaTogMyxcbiAgICAgIHk6ICc0ZDkzNDM5ODhlNjgxOTFhYWM5NDVhNjk2MzAzMWRkZGRlMzQ5MGY5MDIwZDA1NzFhNmU2YzZlMTVjY2EwMjk2JyxcbiAgICAgIHU6ICcxMzE1ZGJlMTgwNjk4MjViNGEyNzE4OGI4MTNlYWU3ZmYyOTE3YTYxNDQ5OWVkNTUzZTcwZDY1ZDRmYTQ4MjBiJyxcbiAgICAgIHI6ICdkMDUzOTM3NWU2NTY2ZjJmZTU0MGNiYTQ4YzVlNTZiZDFjZGY2OGNmZTFmMGQ1MjdkMmI3MzBmZTRlODc5ODA5JyxcbiAgICAgIFI6ICdjODgzZmUyYWU5YjhkYTE3NjRjYzM2YTUyNmNmYTFhMjFmODFkNjA0MzIwYjIwOTg2N2Y4ZGU5MjIzZjFkZTMyJyxcbiAgICB9LFxuICAgIHJTaGFyZXM6IHtcbiAgICAgIDE6IHtcbiAgICAgICAgaTogMSxcbiAgICAgICAgajogMyxcbiAgICAgICAgdTogJzljZTMyMDRhOGM5NzU3NzM4OTY3ZjNmODFiNDYzZDg3MjY3YmY2ZjJjMGU1ZWFmMjg0MzE2NzUzN2I4NzJiMGInLFxuICAgICAgICB2OiAnMDFlYTNmNDI1YjFhZGY4YWVjNmNmZTRmYzhmOWI5NDc1NWMzNDY1Nzk2NWYzMjM5NzY1NWRjZDc4NGYxYjUxNycsXG4gICAgICAgIHI6ICcwMzc1ZThjNWE1NjkxYTczYzIxZGYwMGQ0OWQ0MjNlM2Y4M2ZlMDhkN2I1ZDVhZjMzYzVjNmFhOWNhZTU5ZDBhJyxcbiAgICAgICAgUjogJ2M4ODNmZTJhZTliOGRhMTc2NGNjMzZhNTI2Y2ZhMWEyMWY4MWQ2MDQzMjBiMjA5ODY3ZjhkZTkyMjNmMWRlMzInLFxuICAgICAgICBjb21taXRtZW50OiAnNjJiMjFmOThiZjg4NTg0MWFkNDY5MTQ1MTkyZDRkZjA2OTdiM2Y0MmM1ODFlM2U5MjYzOTRlYWUwYjEwMWVjYicsXG4gICAgICB9LFxuICAgIH0sXG4gIH07XG5cbiAgLy8gU29sIFRTUyB1bnNpZ25lZCB0eCBieXRlcyDigJQgc2FtZSBmaXh0dXJlcyBhcyBlZGRzYU1QQ3YyL3NpZ25UeFJlcXVlc3QudHNcbiAgY29uc3Qgc29sVHNzU2lnbmFibGVIZXggPVxuICAgICcwMjAxMDIwNmMyZDViNWY0ZmI5YTliY2Q4YTJmMzAzZTRkMDZmNzhkOGRlZDMwMDcxM2Y0NTZkYTJhYmZmMGIzZWEwMTg1YWEwNTFhMzRiYzhhY2Q0Mzg3NjM5NzZmOTY4NzYxMTUwNTBmNzM4Mjg1NTM1NjZkMTExZDdhYzhiZmZlYmY1ODdjNGY1ZjU5ODdiZmUyNmFhNjYwMTNlZmQ5NmQzNjM2MGYyYjQzMzZjOTFmOTkzMjU5ZmI1NjA1MTMwNTYxNGQ0MmYyZWExM2Y4ZmY5ZDc5NThkYmYyNjljNmUzNmJmZGY1Y2I1YzQzZGU0YjRlMWQzZWZiN2RhYjNkNWQwMjg2MDQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDZhN2Q1MTcxOTJjNTY4ZWUwOGE4NDVmNzNkMjk3ODhjZjAzNWMzMTQ1YjIxYWIzNDRkODA2MmVhOTQwMDAwMDNhNjIxZjZkMWNjNGI4ZmIyYTczOWFhMDhlNDAzNGRhMGZjNTg4ZWNlM2JkODU3NjMwZGUzMGY3ZWRkZTQ1ZGQwMjA0MDMwMjA1MDEwNDA0MDAwMDAwMDQwMjAwMDMwYzAyMDAwMDAwZjBhMjlhM2IwMDAwMDAwMCc7XG4gIGNvbnN0IHNvbFRzc1NlcmlhbGl6ZWRUeEhleCA9IGAwMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwM2JjOWRmMGIzOTdiZWMyZWQzYjY0NDRhOGMzM2YzODI2N2NjMDhiNWZiMmE3ZDM3ZTI2YjZjNDg3ZTI2ZDE1YjdjMDc4MzBlYjc4ZTI2YTg4ZGI1ZGU0YWE2OTg2YTMyN2YwOWFlZDhjMDE1MzNlNWI5NzI3NDhkZGY2MGI4MGYke3NvbFRzc1NpZ25hYmxlSGV4fWA7XG5cbiAgY29uc3QgdHhSZXF1ZXN0ID0ge1xuICAgIHR4UmVxdWVzdElkOiAncmFuZG9tSWQnLFxuICAgIHVuc2lnbmVkVHhzOiBbeyBzaWduYWJsZUhleDogc29sVHNzU2lnbmFibGVIZXgsIHNlcmlhbGl6ZWRUeEhleDogc29sVHNzU2VyaWFsaXplZFR4SGV4IH1dLFxuICAgIHNpZ25hdHVyZVNoYXJlczogW1xuICAgICAge1xuICAgICAgICBmcm9tOiAnYml0Z28nLFxuICAgICAgICB0bzogJ3VzZXInLFxuICAgICAgICBzaGFyZTogdmFsaWRCaXRnb1RvVXNlclNpZ25TaGFyZS5yU2hhcmVzWzFdLnIgKyB2YWxpZEJpdGdvVG9Vc2VyU2lnblNoYXJlLnJTaGFyZXNbMV0uUixcbiAgICAgIH0sXG4gICAgXSxcbiAgfTtcblxuICBiZWZvcmVFYWNoKGZ1bmN0aW9uICgpIHtcbiAgICBzYW5kYm94ID0gc2lub24uY3JlYXRlU2FuZGJveCgpO1xuICB9KTtcblxuICBhZnRlckVhY2goZnVuY3Rpb24gKCkge1xuICAgIHNhbmRib3gucmVzdG9yZSgpO1xuICB9KTtcblxuICBiZWZvcmUoJ2luaXRpYWxpemVzIG1wYycsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCBoZFRyZWUgPSBhd2FpdCBFZDI1NTE5QklQMzIuaW5pdGlhbGl6ZSgpO1xuICAgIE1QQyA9IGF3YWl0IEVkZHNhLmluaXRpYWxpemUoaGRUcmVlKTtcbiAgfSk7XG5cbiAgYmVmb3JlKGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICBiaXRnb0tleVNoYXJlID0gYXdhaXQgTVBDLmtleVNoYXJlKDMsIDIsIDMpO1xuXG4gICAgdXNlckdwZ0tleSA9IGF3YWl0IG9wZW5wZ3AuZ2VuZXJhdGVLZXkoe1xuICAgICAgdXNlcklEczogW1xuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogJ3Rlc3QnLFxuICAgICAgICAgIGVtYWlsOiAndGVzdEB0ZXN0LmNvbScsXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgICAgY3VydmU6ICdzZWNwMjU2azEnLFxuICAgIH0pO1xuXG4gICAgYmFja3VwR3BnS2V5ID0gYXdhaXQgb3BlbnBncC5nZW5lcmF0ZUtleSh7XG4gICAgICB1c2VySURzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiAndGVzdEJhY2t1cCcsXG4gICAgICAgICAgZW1haWw6ICd0ZXN0QmFja3VwQHRlc3QuY29tJyxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgICBjdXJ2ZTogJ3NlY3AyNTZrMScsXG4gICAgfSk7XG5cbiAgICBiaXRnb0dwZ0tleSA9IGF3YWl0IG9wZW5wZ3AuZ2VuZXJhdGVLZXkoe1xuICAgICAgdXNlcklEczogW1xuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogJ2JpdGdvJyxcbiAgICAgICAgICBlbWFpbDogJ2JpdGdvQHRlc3QuY29tJyxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgICBjdXJ2ZTogJ3NlY3AyNTZrMScsXG4gICAgfSk7XG4gICAgY29uc3QgY29uc3RhbnRzID0ge1xuICAgICAgbXBjOiB7XG4gICAgICAgIGJpdGdvUHVibGljS2V5OiBiaXRnb0dwZ0tleS5wdWJsaWNLZXksXG4gICAgICB9LFxuICAgIH07XG5cbiAgICBiaXRnbyA9IFRlc3RCaXRHby5kZWNvcmF0ZShCaXRHbywgeyBlbnY6ICdtb2NrJyB9KTtcbiAgICBiaXRnby5pbml0aWFsaXplVGVzdFZhcnMoKTtcblxuICAgIGJhc2VDb2luID0gYml0Z28uY29pbihjb2luTmFtZSk7XG5cbiAgICBiZ1VybCA9IGNvbW1vbi5FbnZpcm9ubWVudHNbYml0Z28uZ2V0RW52KCldLnVyaTtcblxuICAgIC8vIFRPRE8oV1AtMzQ2KTogc2RrLXRlc3QgbW9ja3MgY29uZmxpY3Qgc28gd2UgY2FuJ3QgdXNlIHBlcnNpc3RcbiAgICBub2NrKGJnVXJsKS5nZXQoJy9hcGkvdjEvY2xpZW50L2NvbnN0YW50cycpLnRpbWVzKDIzKS5yZXBseSgyMDAsIHsgdHRsOiAzNjAwLCBjb25zdGFudHMgfSk7XG5cbiAgICBjb25zdCB3YWxsZXREYXRhID0ge1xuICAgICAgaWQ6ICc1YjM0MjUyZjFiZjM0OTkzMGUzNDAyMGEwMDAwMDAwMCcsXG4gICAgICBjb2luOiAndHNvbCcsXG4gICAgICBrZXlzOiBbXG4gICAgICAgICc1YjM0MjRmOTFiZjM0OTkzMGUzNDAxNzUwMDAwMDAwMCcsXG4gICAgICAgICc1YjM0MjRmOTFiZjM0OTkzMGUzNDAxNzYwMDAwMDAwMCcsXG4gICAgICAgICc1YjM0MjRmOTFiZjM0OTkzMGUzNDAxNzcwMDAwMDAwMCcsXG4gICAgICBdLFxuICAgICAgY29pblNwZWNpZmljOiB7fSxcbiAgICAgIG11bHRpc2lnVHlwZTogJ3RzcycsXG4gICAgfTtcbiAgICB3YWxsZXQgPSBuZXcgV2FsbGV0KGJpdGdvLCBiYXNlQ29pbiwgd2FsbGV0RGF0YSk7XG4gICAgdHNzVXRpbHMgPSBuZXcgVHNzVXRpbHMoYml0Z28sIGJhc2VDb2luLCB3YWxsZXQpO1xuICB9KTtcblxuICBhZnRlcihmdW5jdGlvbiAoKSB7XG4gICAgbm9jay5jbGVhbkFsbCgpO1xuICB9KTtcblxuICBkZXNjcmliZSgnVFNTIGtleSBjaGFpbnM6JywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgIGl0KCdzaG91bGQgZ2VuZXJhdGUgVFNTIGtleSBjaGFpbnMnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCB1c2VyS2V5U2hhcmUgPSBNUEMua2V5U2hhcmUoMSwgMiwgMyk7XG4gICAgICBjb25zdCBiYWNrdXBLZXlTaGFyZSA9IE1QQy5rZXlTaGFyZSgyLCAyLCAzKTtcblxuICAgICAgY29uc3Qgbm9ja2VkQml0R29LZXljaGFpbiA9IGF3YWl0IG5vY2tCaXRnb0tleWNoYWluKHtcbiAgICAgICAgY29pbjogY29pbk5hbWUsXG4gICAgICAgIHVzZXJLZXlTaGFyZSxcbiAgICAgICAgYmFja3VwS2V5U2hhcmUsXG4gICAgICAgIGJpdGdvS2V5U2hhcmUsXG4gICAgICAgIHVzZXJHcGdLZXksXG4gICAgICAgIGJhY2t1cEdwZ0tleSxcbiAgICAgICAgYml0Z29HcGdLZXksXG4gICAgICB9KTtcbiAgICAgIGNvbnN0IG5vY2tlZFVzZXJLZXljaGFpbiA9IGF3YWl0IG5vY2tVc2VyS2V5Y2hhaW4oeyBjb2luOiBjb2luTmFtZSB9KTtcbiAgICAgIGF3YWl0IG5vY2tCYWNrdXBLZXljaGFpbih7IGNvaW46IGNvaW5OYW1lIH0pO1xuXG4gICAgICBjb25zdCBiaXRnb0tleWNoYWluID0gYXdhaXQgdHNzVXRpbHMuY3JlYXRlQml0Z29LZXljaGFpbih7XG4gICAgICAgIHVzZXJHcGdLZXksXG4gICAgICAgIGJhY2t1cEdwZ0tleSxcbiAgICAgICAgdXNlcktleVNoYXJlLFxuICAgICAgICBiYWNrdXBLZXlTaGFyZSxcbiAgICAgIH0pO1xuICAgICAgY29uc3QgdXNlcktleWNoYWluID0gYXdhaXQgdHNzVXRpbHMuY3JlYXRlVXNlcktleWNoYWluKHtcbiAgICAgICAgdXNlckdwZ0tleSxcbiAgICAgICAgYmFja3VwR3BnS2V5LFxuICAgICAgICB1c2VyS2V5U2hhcmUsXG4gICAgICAgIGJhY2t1cEtleVNoYXJlLFxuICAgICAgICBiaXRnb0tleWNoYWluLFxuICAgICAgICBwYXNzcGhyYXNlOiAncGFzc3BocmFzZScsXG4gICAgICB9KTtcbiAgICAgIGNvbnN0IGJhY2t1cEtleWNoYWluID0gYXdhaXQgdHNzVXRpbHMuY3JlYXRlQmFja3VwS2V5Y2hhaW4oe1xuICAgICAgICB1c2VyR3BnS2V5LFxuICAgICAgICBiYWNrdXBHcGdLZXksXG4gICAgICAgIHVzZXJLZXlTaGFyZSxcbiAgICAgICAgYmFja3VwS2V5U2hhcmUsXG4gICAgICAgIGJpdGdvS2V5Y2hhaW4sXG4gICAgICAgIHBhc3NwaHJhc2U6ICdwYXNzcGhyYXNlJyxcbiAgICAgIH0pO1xuXG4gICAgICBiaXRnb0tleWNoYWluLnNob3VsZC5kZWVwRXF1YWwobm9ja2VkQml0R29LZXljaGFpbik7XG4gICAgICB1c2VyS2V5Y2hhaW4uc2hvdWxkLmRlZXBFcXVhbChub2NrZWRVc2VyS2V5Y2hhaW4pO1xuXG4gICAgICAvLyB1bmVuY3J5cHRlZCBgcHJ2YCBwcm9wZXJ0eSBzaG91bGQgZXhpc3Qgb24gYmFja3VwIGtleWNoYWluXG4gICAgICBKU09OLnN0cmluZ2lmeSh7XG4gICAgICAgIHVTaGFyZTogYmFja3VwS2V5U2hhcmUudVNoYXJlLFxuICAgICAgICBiaXRnb1lTaGFyZTogYml0Z29LZXlTaGFyZS55U2hhcmVzWzJdLFxuICAgICAgICB1c2VyWVNoYXJlOiB1c2VyS2V5U2hhcmUueVNoYXJlc1syXSxcbiAgICAgIH0pLnNob3VsZC5lcXVhbChiYWNrdXBLZXljaGFpbi5wcnYpO1xuICAgICAgc2hvdWxkLmV4aXN0KGJhY2t1cEtleWNoYWluLmVuY3J5cHRlZFBydik7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHNlbmQgd2ViYXV0aG5JbmZvICh3aXRoIGVudGVycHJpc2VJZCkgb24gdGhlIHVzZXIga2V5Y2hhaW4gd2hlbiB3ZWJhdXRobkluZm8gaXMgcHJvdmlkZWQnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCB1c2VyS2V5U2hhcmUgPSBNUEMua2V5U2hhcmUoMSwgMiwgMyk7XG4gICAgICBjb25zdCBiYWNrdXBLZXlTaGFyZSA9IE1QQy5rZXlTaGFyZSgyLCAyLCAzKTtcblxuICAgICAgLy8gUmVhbCBjcnlwdG8gZGVwcyAoY29uc3RhbnRzIHcvIGJpdGdvIGdwZyBrZXkgZm9yIHZlcmlmeVdhbGxldFNpZ25hdHVyZXMgKyBiaXRnbyBrZXljaGFpbiksXG4gICAgICAvLyB0aGVuIGNhcHR1cmUgdGhlIHVzZXIga2V5Y2hhaW4gYWRkKCkgcGFyYW1zIGJ5IHN0dWJiaW5nIGJhc2VDb2luLmtleWNoYWlucygpLlxuICAgICAgbm9jay5jbGVhbkFsbCgpO1xuICAgICAgbm9jayhiZ1VybClcbiAgICAgICAgLmdldCgnL2FwaS92MS9jbGllbnQvY29uc3RhbnRzJylcbiAgICAgICAgLnRpbWVzKDIzKVxuICAgICAgICAucmVwbHkoMjAwLCB7IHR0bDogMzYwMCwgY29uc3RhbnRzOiB7IG1wYzogeyBiaXRnb1B1YmxpY0tleTogYml0Z29HcGdLZXkucHVibGljS2V5IH0gfSB9KTtcbiAgICAgIGF3YWl0IG5vY2tCaXRnb0tleWNoYWluKHtcbiAgICAgICAgY29pbjogY29pbk5hbWUsXG4gICAgICAgIHVzZXJLZXlTaGFyZSxcbiAgICAgICAgYmFja3VwS2V5U2hhcmUsXG4gICAgICAgIGJpdGdvS2V5U2hhcmUsXG4gICAgICAgIHVzZXJHcGdLZXksXG4gICAgICAgIGJhY2t1cEdwZ0tleSxcbiAgICAgICAgYml0Z29HcGdLZXksXG4gICAgICB9KTtcbiAgICAgIGNvbnN0IGJpdGdvS2V5Y2hhaW4gPSBhd2FpdCB0c3NVdGlscy5jcmVhdGVCaXRnb0tleWNoYWluKHtcbiAgICAgICAgdXNlckdwZ0tleSxcbiAgICAgICAgYmFja3VwR3BnS2V5LFxuICAgICAgICB1c2VyS2V5U2hhcmUsXG4gICAgICAgIGJhY2t1cEtleVNoYXJlLFxuICAgICAgfSk7XG5cbiAgICAgIGNvbnN0IGFkZFN0dWIgPSBzYW5kYm94LnN0dWIoKS5yZXNvbHZlcyh7IGlkOiAnMScsIHB1YjogJycsIHR5cGU6ICd0c3MnIH0pO1xuICAgICAgc2FuZGJveC5zdHViKGJhc2VDb2luLCAna2V5Y2hhaW5zJykucmV0dXJucyh7IGFkZDogYWRkU3R1YiB9IGFzIHVua25vd24gYXMgUmV0dXJuVHlwZTxCYXNlQ29pblsna2V5Y2hhaW5zJ10+KTtcblxuICAgICAgY29uc3QgZW50ZXJwcmlzZUlkID0gJ2VudGVycHJpc2VfaWQnO1xuICAgICAgY29uc3Qgd2ViYXV0aG5JbmZvID0geyBvdHBEZXZpY2VJZDogJ2RldmljZS0xMjMnLCBwcmZTYWx0OiAnc2FsdC1hYmMnLCBwYXNzcGhyYXNlOiAncHJmLWRlcml2ZWQtcGFzc3BocmFzZScgfTtcbiAgICAgIGF3YWl0IHRzc1V0aWxzLmNyZWF0ZVVzZXJLZXljaGFpbih7XG4gICAgICAgIHVzZXJHcGdLZXksXG4gICAgICAgIGJhY2t1cEdwZ0tleSxcbiAgICAgICAgdXNlcktleVNoYXJlLFxuICAgICAgICBiYWNrdXBLZXlTaGFyZSxcbiAgICAgICAgYml0Z29LZXljaGFpbixcbiAgICAgICAgcGFzc3BocmFzZTogJ3Bhc3NwaHJhc2UnLFxuICAgICAgICB3ZWJhdXRobkluZm8sXG4gICAgICAgIGVudGVycHJpc2U6IGVudGVycHJpc2VJZCxcbiAgICAgIH0pO1xuXG4gICAgICAvLyBVc2VyIGtleWNoYWluIG11c3QgY2Fycnkgd2ViYXV0aG5JbmZvICh0aGUgZmllbGQgdGhlIGJhY2tlbmQgUE9TVCAva2V5IGNvbnN1bWVzKSwgaW5jbHVkaW5nXG4gICAgICAvLyBlbnRlcnByaXNlSWQsIGFuZCBtdXN0IE5PVCB1c2UgdGhlIGRlcHJlY2F0ZWQgd2ViYXV0aG5EZXZpY2VzIGFycmF5LlxuICAgICAgYXNzZXJ0Lm9rKGFkZFN0dWIuY2FsbGVkT25jZSwgJ2tleWNoYWlucygpLmFkZCBzaG91bGQgaGF2ZSBiZWVuIGNhbGxlZCBmb3IgdGhlIHVzZXIga2V5Y2hhaW4nKTtcbiAgICAgIGNvbnN0IGJvZHkgPSBhZGRTdHViLmZpcnN0Q2FsbC5hcmdzWzBdIGFzIEFkZEtleWNoYWluT3B0aW9ucztcbiAgICAgIGFzc2VydC5vayhib2R5LndlYmF1dGhuSW5mbywgJ3VzZXIga2V5Y2hhaW4gYm9keSBzaG91bGQgaW5jbHVkZSB3ZWJhdXRobkluZm8nKTtcbiAgICAgIGFzc2VydC5lcXVhbChib2R5LndlYmF1dGhuSW5mby5vdHBEZXZpY2VJZCwgd2ViYXV0aG5JbmZvLm90cERldmljZUlkKTtcbiAgICAgIGFzc2VydC5lcXVhbChib2R5LndlYmF1dGhuSW5mby5wcmZTYWx0LCB3ZWJhdXRobkluZm8ucHJmU2FsdCk7XG4gICAgICBhc3NlcnQuZXF1YWwoYm9keS53ZWJhdXRobkluZm8uZW50ZXJwcmlzZUlkLCBlbnRlcnByaXNlSWQpO1xuICAgICAgYXNzZXJ0Lm9rKGJvZHkud2ViYXV0aG5JbmZvLmVuY3J5cHRlZFBydiwgJ2VuY3J5cHRlZFBydiBzaG91bGQgYmUgc2V0Jyk7XG4gICAgICBhc3NlcnQub2soYXdhaXQgYml0Z28uZGVjcnlwdCh7IGlucHV0OiBib2R5LndlYmF1dGhuSW5mby5lbmNyeXB0ZWRQcnYsIHBhc3N3b3JkOiB3ZWJhdXRobkluZm8ucGFzc3BocmFzZSB9KSk7XG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwoYm9keS53ZWJhdXRobkRldmljZXMsIHVuZGVmaW5lZCwgJ2RlcHJlY2F0ZWQgd2ViYXV0aG5EZXZpY2VzIHNob3VsZCBub3QgYmUgc2VudCcpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBnZW5lcmF0ZSBUU1Mga2V5IGNoYWlucyB3aXRob3V0IHBhc3NwaHJhc2UnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCB1c2VyS2V5U2hhcmUgPSBNUEMua2V5U2hhcmUoMSwgMiwgMyk7XG4gICAgICBjb25zdCBiYWNrdXBLZXlTaGFyZSA9IE1QQy5rZXlTaGFyZSgyLCAyLCAzKTtcblxuICAgICAgY29uc3Qgbm9ja2VkQml0R29LZXljaGFpbiA9IGF3YWl0IG5vY2tCaXRnb0tleWNoYWluKHtcbiAgICAgICAgY29pbjogY29pbk5hbWUsXG4gICAgICAgIHVzZXJLZXlTaGFyZSxcbiAgICAgICAgYmFja3VwS2V5U2hhcmUsXG4gICAgICAgIGJpdGdvS2V5U2hhcmUsXG4gICAgICAgIHVzZXJHcGdLZXksXG4gICAgICAgIC8vIHJldXNpbmcgdGhlIHVzZXIgZ3BnIGtleSBhcyB0aGUgYmFja3VwIGdwZyBrZXksIGkuZS4gdGhlIHVzZXIgaXMgdGhlaXIgb3duIHRoZSBiYWNrdXAgcHJvdmlkZXJcbiAgICAgICAgYmFja3VwR3BnS2V5LFxuICAgICAgICBiaXRnb0dwZ0tleSxcbiAgICAgIH0pO1xuICAgICAgY29uc3Qgbm9ja2VkVXNlcktleWNoYWluID0gYXdhaXQgbm9ja1VzZXJLZXljaGFpbih7IGNvaW46IGNvaW5OYW1lIH0pO1xuICAgICAgYXdhaXQgbm9ja0JhY2t1cEtleWNoYWluKHsgY29pbjogY29pbk5hbWUgfSk7XG5cbiAgICAgIGNvbnN0IGJpdGdvS2V5Y2hhaW4gPSBhd2FpdCB0c3NVdGlscy5jcmVhdGVCaXRnb0tleWNoYWluKHtcbiAgICAgICAgdXNlckdwZ0tleSxcbiAgICAgICAgYmFja3VwR3BnS2V5LFxuICAgICAgICB1c2VyS2V5U2hhcmUsXG4gICAgICAgIGJhY2t1cEtleVNoYXJlLFxuICAgICAgfSk7XG4gICAgICBjb25zdCB1c2VyS2V5Y2hhaW4gPSBhd2FpdCB0c3NVdGlscy5jcmVhdGVVc2VyS2V5Y2hhaW4oe1xuICAgICAgICB1c2VyR3BnS2V5LFxuICAgICAgICBiYWNrdXBHcGdLZXksXG4gICAgICAgIHVzZXJLZXlTaGFyZSxcbiAgICAgICAgYmFja3VwS2V5U2hhcmUsXG4gICAgICAgIGJpdGdvS2V5Y2hhaW4sXG4gICAgICB9KTtcbiAgICAgIGNvbnN0IGJhY2t1cEtleWNoYWluID0gYXdhaXQgdHNzVXRpbHMuY3JlYXRlQmFja3VwS2V5Y2hhaW4oe1xuICAgICAgICB1c2VyR3BnS2V5LFxuICAgICAgICBiYWNrdXBHcGdLZXksXG4gICAgICAgIHVzZXJLZXlTaGFyZSxcbiAgICAgICAgYmFja3VwS2V5U2hhcmUsXG4gICAgICAgIGJpdGdvS2V5Y2hhaW4sXG4gICAgICB9KTtcblxuICAgICAgYml0Z29LZXljaGFpbi5zaG91bGQuZGVlcEVxdWFsKG5vY2tlZEJpdEdvS2V5Y2hhaW4pO1xuICAgICAgdXNlcktleWNoYWluLnNob3VsZC5kZWVwRXF1YWwobm9ja2VkVXNlcktleWNoYWluKTtcblxuICAgICAgLy8gdW5lbmNyeXB0ZWQgYHBydmAgcHJvcGVydHkgc2hvdWxkIGV4aXN0IG9uIGJhY2t1cCBrZXljaGFpblxuICAgICAgSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgICB1U2hhcmU6IGJhY2t1cEtleVNoYXJlLnVTaGFyZSxcbiAgICAgICAgYml0Z29ZU2hhcmU6IGJpdGdvS2V5U2hhcmUueVNoYXJlc1syXSxcbiAgICAgICAgdXNlcllTaGFyZTogdXNlcktleVNoYXJlLnlTaGFyZXNbMl0sXG4gICAgICB9KS5zaG91bGQuZXF1YWwoYmFja3VwS2V5Y2hhaW4ucHJ2KTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgZ2VuZXJhdGUgVFNTIGtleSBjaGFpbnMgd2l0aCBvcHRpb25hbCBwYXJhbXMnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBlbnRlcnByaXNlID0gJ2VudGVycHJpc2UnO1xuXG4gICAgICBjb25zdCB1c2VyS2V5U2hhcmUgPSBNUEMua2V5U2hhcmUoMSwgMiwgMyk7XG4gICAgICBjb25zdCBiYWNrdXBLZXlTaGFyZSA9IE1QQy5rZXlTaGFyZSgyLCAyLCAzKTtcblxuICAgICAgY29uc3Qgbm9ja2VkQml0R29LZXljaGFpbiA9IGF3YWl0IG5vY2tCaXRnb0tleWNoYWluKHtcbiAgICAgICAgY29pbjogY29pbk5hbWUsXG4gICAgICAgIHVzZXJLZXlTaGFyZSxcbiAgICAgICAgYmFja3VwS2V5U2hhcmUsXG4gICAgICAgIGJpdGdvS2V5U2hhcmUsXG4gICAgICAgIHVzZXJHcGdLZXksXG4gICAgICAgIGJhY2t1cEdwZ0tleSxcbiAgICAgICAgYml0Z29HcGdLZXksXG4gICAgICB9KTtcbiAgICAgIGNvbnN0IG5vY2tlZFVzZXJLZXljaGFpbiA9IGF3YWl0IG5vY2tVc2VyS2V5Y2hhaW4oeyBjb2luOiBjb2luTmFtZSB9KTtcbiAgICAgIGF3YWl0IG5vY2tCYWNrdXBLZXljaGFpbih7IGNvaW46IGNvaW5OYW1lIH0pO1xuXG4gICAgICBjb25zdCBiaXRnb0tleWNoYWluID0gYXdhaXQgdHNzVXRpbHMuY3JlYXRlQml0Z29LZXljaGFpbih7XG4gICAgICAgIHVzZXJHcGdLZXksXG4gICAgICAgIGJhY2t1cEdwZ0tleSxcbiAgICAgICAgdXNlcktleVNoYXJlLFxuICAgICAgICBiYWNrdXBLZXlTaGFyZSxcbiAgICAgICAgZW50ZXJwcmlzZSxcbiAgICAgIH0pO1xuICAgICAgY29uc3QgdXNlcktleWNoYWluID0gYXdhaXQgdHNzVXRpbHMuY3JlYXRlVXNlcktleWNoYWluKHtcbiAgICAgICAgdXNlckdwZ0tleSxcbiAgICAgICAgYmFja3VwR3BnS2V5LFxuICAgICAgICB1c2VyS2V5U2hhcmUsXG4gICAgICAgIGJhY2t1cEtleVNoYXJlLFxuICAgICAgICBiaXRnb0tleWNoYWluLFxuICAgICAgICBwYXNzcGhyYXNlOiAncGFzc3BocmFzZScsXG4gICAgICAgIG9yaWdpbmFsUGFzc2NvZGVFbmNyeXB0aW9uQ29kZTogJ29yaWdpbmFsUGFzc2NvZGVFbmNyeXB0aW9uQ29kZScsXG4gICAgICB9KTtcbiAgICAgIGNvbnN0IGJhY2t1cEtleWNoYWluID0gYXdhaXQgdHNzVXRpbHMuY3JlYXRlQmFja3VwS2V5Y2hhaW4oe1xuICAgICAgICB1c2VyR3BnS2V5LFxuICAgICAgICBiYWNrdXBHcGdLZXksXG4gICAgICAgIHVzZXJLZXlTaGFyZSxcbiAgICAgICAgYmFja3VwS2V5U2hhcmUsXG4gICAgICAgIGJpdGdvS2V5Y2hhaW4sXG4gICAgICAgIHBhc3NwaHJhc2U6ICdwYXNzcGhyYXNlJyxcbiAgICAgIH0pO1xuXG4gICAgICBiaXRnb0tleWNoYWluLnNob3VsZC5kZWVwRXF1YWwobm9ja2VkQml0R29LZXljaGFpbik7XG4gICAgICB1c2VyS2V5Y2hhaW4uc2hvdWxkLmRlZXBFcXVhbChub2NrZWRVc2VyS2V5Y2hhaW4pO1xuXG4gICAgICAvLyB1bmVuY3J5cHRlZCBgcHJ2YCBwcm9wZXJ0eSBzaG91bGQgZXhpc3Qgb24gYmFja3VwIGtleWNoYWluXG4gICAgICBKU09OLnN0cmluZ2lmeSh7XG4gICAgICAgIHVTaGFyZTogYmFja3VwS2V5U2hhcmUudVNoYXJlLFxuICAgICAgICBiaXRnb1lTaGFyZTogYml0Z29LZXlTaGFyZS55U2hhcmVzWzJdLFxuICAgICAgICB1c2VyWVNoYXJlOiB1c2VyS2V5U2hhcmUueVNoYXJlc1syXSxcbiAgICAgIH0pLnNob3VsZC5lcXVhbChiYWNrdXBLZXljaGFpbi5wcnYpO1xuICAgICAgc2hvdWxkLmV4aXN0KGJhY2t1cEtleWNoYWluLmVuY3J5cHRlZFBydik7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGZhaWwgdG8gZ2VuZXJhdGUgVFNTIGtleWNoYWlucyB3aGVuIHJlY2VpdmVkIGludmFsaWQgbnVtYmVyIG9mIHdhbGxldCBzaWduYXR1cmVzJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgdXNlcktleVNoYXJlID0gTVBDLmtleVNoYXJlKDEsIDIsIDMpO1xuICAgICAgY29uc3QgYmFja3VwS2V5U2hhcmUgPSBNUEMua2V5U2hhcmUoMiwgMiwgMyk7XG5cbiAgICAgIGNvbnN0IGJpdGdvS2V5Y2hhaW4gPSBhd2FpdCBnZW5lcmF0ZUJpdGdvS2V5Y2hhaW4oe1xuICAgICAgICBjb2luOiBjb2luTmFtZSxcbiAgICAgICAgdXNlcktleVNoYXJlLFxuICAgICAgICBiYWNrdXBLZXlTaGFyZSxcbiAgICAgICAgYml0Z29LZXlTaGFyZSxcbiAgICAgICAgdXNlckdwZ0tleSxcbiAgICAgICAgYmFja3VwR3BnS2V5LFxuICAgICAgICBiaXRnb0dwZ0tleSxcbiAgICAgIH0pO1xuXG4gICAgICBjb25zdCBjZXJ0c1N0cmluZyA9IGF3YWl0IGNyZWF0ZVNoYXJlZERhdGFQcm9vZihiaXRnb0dwZ0tleS5wcml2YXRlS2V5LCB1c2VyR3BnS2V5LnB1YmxpY0tleSwgW10pO1xuICAgICAgY29uc3QgY2VydHNLZXkgPSBhd2FpdCBvcGVucGdwLnJlYWRLZXkoeyBhcm1vcmVkS2V5OiBjZXJ0c1N0cmluZyB9KTtcbiAgICAgIGNvbnN0IGZpbmFsS2V5ID0gbmV3IG9wZW5wZ3AuUGFja2V0TGlzdCgpO1xuICAgICAgY2VydHNLZXkudG9QYWNrZXRMaXN0KCkuZm9yRWFjaCgocGFja2V0KSA9PiBmaW5hbEtleS5wdXNoKHBhY2tldCkpO1xuICAgICAgLy8gdGhlIHVuZGVybHlpbmcgZnVuY3Rpb24gb25seSByZXF1aXJlcyB0d28gYXJndW1lbnRzIGJ1dCB0aGUgYWNjb3JkaW5nIC5kLnRzIGZpbGUgZm9yIG9wZW5wZ3AgaGFzIHRoZSBmdXJ0aGVyXG4gICAgICAvLyBhcmd1bWVudHMgbWFya2VkIGFzIG1hbmRhdG9yeSBhcyB3ZWxsLlxuICAgICAgLy8gT25jZSB0aGUgZm9sbG93aW5nIFBSIGhhcyBiZWVuIG1lcmdlZCBhbmQgcmVsZWFzZWQgd2Ugbm8gbG9uZ2VyIG5lZWQgdGhlIHRzLWlnbm9yZTpcbiAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9vcGVucGdwanMvb3BlbnBncGpzL3B1bGwvMTU3NlxuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9iYW4tdHMtY29tbWVudFxuICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgYml0Z29LZXljaGFpbi53YWxsZXRIU01HUEdQdWJsaWNLZXlTaWdzID0gb3BlbnBncC5hcm1vcihvcGVucGdwLmVudW1zLmFybW9yLnB1YmxpY0tleSwgZmluYWxLZXkud3JpdGUoKSk7XG5cbiAgICAgIGF3YWl0IHRzc1V0aWxzXG4gICAgICAgIC52ZXJpZnlXYWxsZXRTaWduYXR1cmVzKHVzZXJHcGdLZXkucHVibGljS2V5LCBiYWNrdXBHcGdLZXkucHVibGljS2V5LCBiaXRnb0tleWNoYWluLCAnJywgMSlcbiAgICAgICAgLnNob3VsZC5iZS5yZWplY3RlZFdpdGgoJ0ludmFsaWQgd2FsbGV0IHNpZ25hdHVyZXMnKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgZmFpbCB0byBnZW5lcmF0ZSBUU1Mga2V5Y2hhaW5zIHdoZW4gd2FsbGV0IHNpZ25hdHVyZSBmaW5nZXJwcmludHMgZG8gbm90IG1hdGNoIHBhc3NlZCB1c2VyL2JhY2t1cCBmaW5nZXJwcmludHMnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCB1c2VyS2V5U2hhcmUgPSBNUEMua2V5U2hhcmUoMSwgMiwgMyk7XG4gICAgICBjb25zdCBiYWNrdXBLZXlTaGFyZSA9IE1QQy5rZXlTaGFyZSgyLCAyLCAzKTtcblxuICAgICAgY29uc3QgYml0Z29LZXljaGFpbiA9IGF3YWl0IGdlbmVyYXRlQml0Z29LZXljaGFpbih7XG4gICAgICAgIGNvaW46IGNvaW5OYW1lLFxuICAgICAgICB1c2VyS2V5U2hhcmUsXG4gICAgICAgIGJhY2t1cEtleVNoYXJlLFxuICAgICAgICBiaXRnb0tleVNoYXJlLFxuICAgICAgICB1c2VyR3BnS2V5LFxuICAgICAgICBiYWNrdXBHcGdLZXksXG4gICAgICAgIGJpdGdvR3BnS2V5LFxuICAgICAgfSk7XG5cbiAgICAgIC8vIHVzaW5nIHRoZSBiYWNrdXAgZ3BnIGhlcmUgaW5zdGVhZCBvZiB0aGUgdXNlciBncGcga2V5IHRvIHNpbXVsYXRlIHRoYXQgdGhlIGZpcnN0IHNpZ25hdHVyZSBoYXMgYSBkaWZmZXJlbnRcbiAgICAgIC8vIGZpbmdlcnByaW50IGZyb20gdGhlIHBhc3NlZCBpbiBmaXJzdCBncGcga2V5XG4gICAgICBhd2FpdCB0c3NVdGlsc1xuICAgICAgICAudmVyaWZ5V2FsbGV0U2lnbmF0dXJlcyhiYWNrdXBHcGdLZXkucHVibGljS2V5LCBiYWNrdXBHcGdLZXkucHVibGljS2V5LCBiaXRnb0tleWNoYWluLCAnJywgMSlcbiAgICAgICAgLnNob3VsZC5iZS5yZWplY3RlZFdpdGgoXG4gICAgICAgICAgYGZpcnN0IHdhbGxldCBzaWduYXR1cmUncyBmaW5nZXJwcmludCBkb2VzIG5vdCBtYXRjaCBwYXNzZWQgdXNlciBncGcga2V5J3MgZmluZ2VycHJpbnRgXG4gICAgICAgICk7XG5cbiAgICAgIC8vIHVzaW5nIHRoZSB1c2VyIGdwZyBoZXJlIGluc3RlYWQgb2YgdGhlIGJhY2t1cCBncGcga2V5IHRvIHNpbXVsYXRlIHRoYXQgdGhlIHNlY29uZCBzaWduYXR1cmUgaGFzIGEgZGlmZmVyZW50XG4gICAgICAvLyBmaW5nZXJwcmludCBmcm9tIHRoZSBwYXNzZWQgaW4gc2Vjb25kIGdwZyBrZXlcbiAgICAgIGF3YWl0IHRzc1V0aWxzXG4gICAgICAgIC52ZXJpZnlXYWxsZXRTaWduYXR1cmVzKHVzZXJHcGdLZXkucHVibGljS2V5LCB1c2VyR3BnS2V5LnB1YmxpY0tleSwgYml0Z29LZXljaGFpbiwgJycsIDEpXG4gICAgICAgIC5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKFxuICAgICAgICAgIGBzZWNvbmQgd2FsbGV0IHNpZ25hdHVyZSdzIGZpbmdlcnByaW50IGRvZXMgbm90IG1hdGNoIHBhc3NlZCBiYWNrdXAgZ3BnIGtleSdzIGZpbmdlcnByaW50YFxuICAgICAgICApO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBmYWlsIHRvIGdlbmVyYXRlIFRTUyBrZXljaGFpbnMgd2hlbiB3YWxsZXQgc2lnbmF0dXJlIGlzIGZvciBkaWZmZXJlbnQga2V5IHNoYXJlJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgdXNlcktleVNoYXJlID0gTVBDLmtleVNoYXJlKDEsIDIsIDMpO1xuICAgICAgY29uc3QgYmFja3VwS2V5U2hhcmUgPSBNUEMua2V5U2hhcmUoMiwgMiwgMyk7XG4gICAgICBjb25zdCBjdXN0b21CaXRnb0tleVNoYXJlID0gTVBDLmtleVNoYXJlKDMsIDIsIDMpO1xuXG4gICAgICBjb25zdCBiaXRnb0tleWNoYWluMSA9IGF3YWl0IGdlbmVyYXRlQml0Z29LZXljaGFpbih7XG4gICAgICAgIGNvaW46IGNvaW5OYW1lLFxuICAgICAgICB1c2VyS2V5U2hhcmUsXG4gICAgICAgIGJhY2t1cEtleVNoYXJlLFxuICAgICAgICBiaXRnb0tleVNoYXJlLFxuICAgICAgICB1c2VyR3BnS2V5LFxuICAgICAgICBiYWNrdXBHcGdLZXksXG4gICAgICAgIGJpdGdvR3BnS2V5LFxuICAgICAgfSk7XG4gICAgICBjb25zdCBiaXRnb0tleWNoYWluMiA9IGF3YWl0IGdlbmVyYXRlQml0Z29LZXljaGFpbih7XG4gICAgICAgIGNvaW46IGNvaW5OYW1lLFxuICAgICAgICB1c2VyS2V5U2hhcmUsXG4gICAgICAgIGJhY2t1cEtleVNoYXJlLFxuICAgICAgICBiaXRnb0tleVNoYXJlOiBjdXN0b21CaXRnb0tleVNoYXJlLFxuICAgICAgICB1c2VyR3BnS2V5LFxuICAgICAgICBiYWNrdXBHcGdLZXksXG4gICAgICAgIGJpdGdvR3BnS2V5LFxuICAgICAgfSk7XG5cbiAgICAgIC8vIHVzaW5nIHRoZSBvdGhlciBiaXRnbyBrZXljaGFpbnMgY29tbW9uIGtleWNoYWluIGFuZCB3YWxsZXRIU01HUEdQdWJsaWNLZXlTaWdzIHNvIHRoYXQgdGhlIHZlcmlmaWNhdGlvbiBvZiB0aGVcbiAgICAgIC8vIGNvbW1tb24ga2V5Y2hhaW4gcGFzc2VzIGJ1dCBmYWlscyBmb3IgdGhlIGJpdGdvIHRvIHVzZXIvIGJhY2t1cCBzaGFyZXNcbiAgICAgIGJpdGdvS2V5Y2hhaW4xLmNvbW1vbktleWNoYWluID0gYml0Z29LZXljaGFpbjIuY29tbW9uS2V5Y2hhaW47XG4gICAgICBiaXRnb0tleWNoYWluMS53YWxsZXRIU01HUEdQdWJsaWNLZXlTaWdzID0gYml0Z29LZXljaGFpbjIud2FsbGV0SFNNR1BHUHVibGljS2V5U2lncztcblxuICAgICAgYXdhaXQgdHNzVXRpbHNcbiAgICAgICAgLmNyZWF0ZVVzZXJLZXljaGFpbih7XG4gICAgICAgICAgdXNlckdwZ0tleSxcbiAgICAgICAgICBiYWNrdXBHcGdLZXksXG4gICAgICAgICAgdXNlcktleVNoYXJlLFxuICAgICAgICAgIGJhY2t1cEtleVNoYXJlLFxuICAgICAgICAgIGJpdGdvS2V5Y2hhaW46IGJpdGdvS2V5Y2hhaW4xLFxuICAgICAgICB9KVxuICAgICAgICAuc2hvdWxkLmJlLnJlamVjdGVkV2l0aCgnYml0Z28gc2hhcmUgbWlzbWF0Y2gnKTtcblxuICAgICAgYXdhaXQgdHNzVXRpbHNcbiAgICAgICAgLmNyZWF0ZUJhY2t1cEtleWNoYWluKHtcbiAgICAgICAgICB1c2VyR3BnS2V5LFxuICAgICAgICAgIGJhY2t1cEdwZ0tleSxcbiAgICAgICAgICB1c2VyS2V5U2hhcmUsXG4gICAgICAgICAgYmFja3VwS2V5U2hhcmUsXG4gICAgICAgICAgYml0Z29LZXljaGFpbjogYml0Z29LZXljaGFpbjEsXG4gICAgICAgIH0pXG4gICAgICAgIC5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKCdiaXRnbyBzaGFyZSBtaXNtYXRjaCcpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBmYWlsIHRvIGdlbmVyYXRlIFRTUyBrZXkgY2hhaW5zIHdoZW4gY29tbW9uIGtleWNoYWlucyBkbyBub3QgbWF0Y2gnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCB1c2VyS2V5U2hhcmUgPSBNUEMua2V5U2hhcmUoMSwgMiwgMyk7XG4gICAgICBjb25zdCBiYWNrdXBLZXlTaGFyZSA9IE1QQy5rZXlTaGFyZSgyLCAyLCAzKTtcblxuICAgICAgY29uc3Qgbm9ja2VkQml0R29LZXljaGFpbiA9IGF3YWl0IG5vY2tCaXRnb0tleWNoYWluKHtcbiAgICAgICAgY29pbjogY29pbk5hbWUsXG4gICAgICAgIHVzZXJLZXlTaGFyZSxcbiAgICAgICAgYmFja3VwS2V5U2hhcmUsXG4gICAgICAgIGJpdGdvS2V5U2hhcmUsXG4gICAgICAgIHVzZXJHcGdLZXksXG4gICAgICAgIGJhY2t1cEdwZ0tleSxcbiAgICAgICAgYml0Z29HcGdLZXksXG4gICAgICB9KTtcbiAgICAgIGNvbnN0IGJpdGdvS2V5Y2hhaW4gPSBhd2FpdCB0c3NVdGlscy5jcmVhdGVCaXRnb0tleWNoYWluKHtcbiAgICAgICAgdXNlckdwZ0tleSxcbiAgICAgICAgYmFja3VwR3BnS2V5LFxuICAgICAgICB1c2VyS2V5U2hhcmUsXG4gICAgICAgIGJhY2t1cEtleVNoYXJlLFxuICAgICAgfSk7XG4gICAgICBiaXRnb0tleWNoYWluLnNob3VsZC5kZWVwRXF1YWwobm9ja2VkQml0R29LZXljaGFpbik7XG5cbiAgICAgIGF3YWl0IHRzc1V0aWxzXG4gICAgICAgIC5jcmVhdGVVc2VyS2V5Y2hhaW4oe1xuICAgICAgICAgIHVzZXJHcGdLZXksXG4gICAgICAgICAgYmFja3VwR3BnS2V5LFxuICAgICAgICAgIHVzZXJLZXlTaGFyZSxcbiAgICAgICAgICBiYWNrdXBLZXlTaGFyZTogTVBDLmtleVNoYXJlKDIsIDIsIDMpLFxuICAgICAgICAgIGJpdGdvS2V5Y2hhaW4sXG4gICAgICAgICAgcGFzc3BocmFzZTogJ3Bhc3NwaHJhc2UnLFxuICAgICAgICB9KVxuICAgICAgICAuc2hvdWxkLmJlLnJlamVjdGVkV2l0aCgnRmFpbGVkIHRvIGNyZWF0ZSB1c2VyIGtleWNoYWluIC0gY29tbW9uS2V5Y2hhaW5zIGRvIG5vdCBtYXRjaC4nKTtcbiAgICAgIGF3YWl0IHRzc1V0aWxzXG4gICAgICAgIC5jcmVhdGVVc2VyS2V5Y2hhaW4oe1xuICAgICAgICAgIHVzZXJHcGdLZXksXG4gICAgICAgICAgYmFja3VwR3BnS2V5LFxuICAgICAgICAgIHVzZXJLZXlTaGFyZTogTVBDLmtleVNoYXJlKDEsIDIsIDMpLFxuICAgICAgICAgIGJhY2t1cEtleVNoYXJlLFxuICAgICAgICAgIGJpdGdvS2V5Y2hhaW4sXG4gICAgICAgICAgcGFzc3BocmFzZTogJ3Bhc3NwaHJhc2UnLFxuICAgICAgICB9KVxuICAgICAgICAuc2hvdWxkLmJlLnJlamVjdGVkV2l0aCgnRmFpbGVkIHRvIGNyZWF0ZSB1c2VyIGtleWNoYWluIC0gY29tbW9uS2V5Y2hhaW5zIGRvIG5vdCBtYXRjaC4nKTtcblxuICAgICAgYXdhaXQgdHNzVXRpbHNcbiAgICAgICAgLmNyZWF0ZUJhY2t1cEtleWNoYWluKHtcbiAgICAgICAgICB1c2VyR3BnS2V5LFxuICAgICAgICAgIGJhY2t1cEdwZ0tleSxcbiAgICAgICAgICB1c2VyS2V5U2hhcmU6IE1QQy5rZXlTaGFyZSgxLCAyLCAzKSxcbiAgICAgICAgICBiYWNrdXBLZXlTaGFyZSxcbiAgICAgICAgICBiaXRnb0tleWNoYWluLFxuICAgICAgICAgIHBhc3NwaHJhc2U6ICdwYXNzcGhyYXNlJyxcbiAgICAgICAgfSlcbiAgICAgICAgLnNob3VsZC5iZS5yZWplY3RlZFdpdGgoJ0ZhaWxlZCB0byBjcmVhdGUgYmFja3VwIGtleWNoYWluIC0gY29tbW9uS2V5Y2hhaW5zIGRvIG5vdCBtYXRjaC4nKTtcbiAgICAgIGF3YWl0IHRzc1V0aWxzXG4gICAgICAgIC5jcmVhdGVCYWNrdXBLZXljaGFpbih7XG4gICAgICAgICAgdXNlckdwZ0tleSxcbiAgICAgICAgICBiYWNrdXBHcGdLZXksXG4gICAgICAgICAgdXNlcktleVNoYXJlLFxuICAgICAgICAgIGJhY2t1cEtleVNoYXJlOiBNUEMua2V5U2hhcmUoMiwgMiwgMyksXG4gICAgICAgICAgYml0Z29LZXljaGFpbixcbiAgICAgICAgICBwYXNzcGhyYXNlOiAncGFzc3BocmFzZScsXG4gICAgICAgIH0pXG4gICAgICAgIC5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKCdGYWlsZWQgdG8gY3JlYXRlIGJhY2t1cCBrZXljaGFpbiAtIGNvbW1vbktleWNoYWlucyBkbyBub3QgbWF0Y2guJyk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGdlbmVyYXRlIFRTUyBrZXkgY2hhaW5zIHdpdGggdjIgZW5jcnlwdGlvbiBlbnZlbG9wZXMnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBwYXNzcGhyYXNlID0gJ3Bhc3NwaHJhc2UnO1xuICAgICAgY29uc3QgdXNlcktleVNoYXJlID0gTVBDLmtleVNoYXJlKDEsIDIsIDMpO1xuICAgICAgY29uc3QgYmFja3VwS2V5U2hhcmUgPSBNUEMua2V5U2hhcmUoMiwgMiwgMyk7XG5cbiAgICAgIGF3YWl0IG5vY2tCaXRnb0tleWNoYWluKHtcbiAgICAgICAgY29pbjogY29pbk5hbWUsXG4gICAgICAgIHVzZXJLZXlTaGFyZSxcbiAgICAgICAgYmFja3VwS2V5U2hhcmUsXG4gICAgICAgIGJpdGdvS2V5U2hhcmUsXG4gICAgICAgIHVzZXJHcGdLZXksXG4gICAgICAgIGJhY2t1cEdwZ0tleSxcbiAgICAgICAgYml0Z29HcGdLZXksXG4gICAgICB9KTtcbiAgICAgIGF3YWl0IG5vY2tVc2VyS2V5Y2hhaW4oeyBjb2luOiBjb2luTmFtZSB9KTtcbiAgICAgIGF3YWl0IG5vY2tCYWNrdXBLZXljaGFpbih7IGNvaW46IGNvaW5OYW1lIH0pO1xuXG4gICAgICBjb25zdCBiaXRnb0tleWNoYWluID0gYXdhaXQgdHNzVXRpbHMuY3JlYXRlQml0Z29LZXljaGFpbih7XG4gICAgICAgIHVzZXJHcGdLZXksXG4gICAgICAgIGJhY2t1cEdwZ0tleSxcbiAgICAgICAgdXNlcktleVNoYXJlLFxuICAgICAgICBiYWNrdXBLZXlTaGFyZSxcbiAgICAgIH0pO1xuICAgICAgY29uc3QgdXNlcktleWNoYWluID0gYXdhaXQgdHNzVXRpbHMuY3JlYXRlVXNlcktleWNoYWluKHtcbiAgICAgICAgdXNlckdwZ0tleSxcbiAgICAgICAgYmFja3VwR3BnS2V5LFxuICAgICAgICB1c2VyS2V5U2hhcmUsXG4gICAgICAgIGJhY2t1cEtleVNoYXJlLFxuICAgICAgICBiaXRnb0tleWNoYWluLFxuICAgICAgICBwYXNzcGhyYXNlLFxuICAgICAgICBlbmNyeXB0aW9uVmVyc2lvbjogMixcbiAgICAgIH0pO1xuXG4gICAgICBzaG91bGQuZXhpc3QodXNlcktleWNoYWluLmVuY3J5cHRlZFBydik7XG4gICAgICBjb25zdCBlbnZlbG9wZSA9IEpTT04ucGFyc2UodXNlcktleWNoYWluLmVuY3J5cHRlZFBydiEpO1xuICAgICAgZW52ZWxvcGUudi5zaG91bGQuZXF1YWwoMik7XG5cbiAgICAgIGNvbnN0IGRlY3J5cHRlZCA9IGF3YWl0IGJpdGdvLmRlY3J5cHQoeyBpbnB1dDogdXNlcktleWNoYWluLmVuY3J5cHRlZFBydiEsIHBhc3N3b3JkOiBwYXNzcGhyYXNlIH0pO1xuICAgICAgc2hvdWxkLmV4aXN0KGRlY3J5cHRlZCk7XG4gICAgICBjb25zdCBwYXJzZWQ6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0gSlNPTi5wYXJzZShkZWNyeXB0ZWQpO1xuICAgICAgc2hvdWxkLmV4aXN0KHBhcnNlZC51U2hhcmUpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgndjIgZW5jcnlwdGlvbiAoRWREU0Egc2lnbmluZyBkaXNwYXRjaCknLCBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3Qgc2lnbmluZ1R4UmVxdWVzdDogVHhSZXF1ZXN0ID0ge1xuICAgICAgdHhSZXF1ZXN0SWQ6ICd2Mi1zaWduaW5nLXRlc3QnLFxuICAgICAgdW5zaWduZWRUeHM6IFtcbiAgICAgICAge1xuICAgICAgICAgIHNlcmlhbGl6ZWRUeEhleDogc29sVHNzU2VyaWFsaXplZFR4SGV4LFxuICAgICAgICAgIHNpZ25hYmxlSGV4OiBzb2xUc3NTaWduYWJsZUhleCxcbiAgICAgICAgICBkZXJpdmF0aW9uUGF0aDogJ20vMCcsXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgICAgZGF0ZTogbmV3IERhdGUoKS50b0lTT1N0cmluZygpLFxuICAgICAgaW50ZW50OiB7XG4gICAgICAgIGludGVudFR5cGU6ICdwYXltZW50JyxcbiAgICAgICAgcmVjaXBpZW50czogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGFkZHJlc3M6IHsgYWRkcmVzczogJ0hNRWdiUjRTMmhMS2ZzdDJWWlVWcEhWVXU0RmlvRlB5VzVpVXVKdlpkTXZzJyB9LFxuICAgICAgICAgICAgYW1vdW50OiB7IHZhbHVlOiAnOTk5OTkwMDAwJywgc3ltYm9sOiAndHNvbCcgfSxcbiAgICAgICAgICB9LFxuICAgICAgICBdLFxuICAgICAgfSxcbiAgICAgIGxhdGVzdDogdHJ1ZSxcbiAgICAgIHN0YXRlOiAncGVuZGluZ1VzZXJTaWduYXR1cmUnLFxuICAgICAgd2FsbGV0VHlwZTogJ2hvdCcsXG4gICAgICB3YWxsZXRJZDogJ3dhbGxldElkJyxcbiAgICAgIHBvbGljaWVzQ2hlY2tlZDogdHJ1ZSxcbiAgICAgIHZlcnNpb246IDEsXG4gICAgICB1c2VySWQ6ICd1c2VySWQnLFxuICAgIH07XG5cbiAgICBiZWZvcmVFYWNoKGZ1bmN0aW9uICgpIHtcbiAgICAgIHNhbmRib3guc3R1YihiYXNlQ29pbiwgJ3ZlcmlmeVRyYW5zYWN0aW9uJykucmVzb2x2ZXModHJ1ZSk7XG4gICAgfSk7XG5cbiAgICBpdCgndjIgUi1zaGFyZSByb3VuZC10cmlwOiBlbmNyeXB0IHZpYSBjb21taXRtZW50LCB2ZXJpZnkgZW52ZWxvcGUsIGRlY3J5cHQgdmlhIGNyZWF0ZVJTaGFyZScsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHBhc3NwaHJhc2UgPSAndGVzdC1wYXNzcGhyYXNlJztcbiAgICAgIGNvbnN0IHBydiA9IEpTT04uc3RyaW5naWZ5KHZhbGlkVXNlclNpZ25pbmdNYXRlcmlhbCk7XG5cbiAgICAgIC8vIDEuIEVuY3J5cHQgcHJ2IHdpdGggdjJcbiAgICAgIGNvbnN0IGVuY3J5cHRlZFBydiA9IGF3YWl0IGJpdGdvLmVuY3J5cHQoe1xuICAgICAgICBpbnB1dDogcHJ2LFxuICAgICAgICBwYXNzd29yZDogcGFzc3BocmFzZSxcbiAgICAgICAgZW5jcnlwdGlvblZlcnNpb246IDIsXG4gICAgICB9KTtcbiAgICAgIEpTT04ucGFyc2UoZW5jcnlwdGVkUHJ2KS52LnNob3VsZC5lcXVhbCgyKTtcblxuICAgICAgLy8gMi4gQ3JlYXRlIGNvbW1pdG1lbnQgLS0gUi1zaGFyZSBzaG91bGQgYmUgYSB2MiBlbnZlbG9wZVxuICAgICAgY29uc3QgY29tbWl0UmVzdWx0ID0gYXdhaXQgdHNzVXRpbHMuY3JlYXRlQ29tbWl0bWVudFNoYXJlRnJvbVR4UmVxdWVzdCh7XG4gICAgICAgIHR4UmVxdWVzdDogc2lnbmluZ1R4UmVxdWVzdCxcbiAgICAgICAgcHJ2LFxuICAgICAgICB3YWxsZXRQYXNzcGhyYXNlOiBwYXNzcGhyYXNlLFxuICAgICAgICBiaXRnb0dwZ1B1YktleTogYml0Z29HcGdLZXkucHVibGljS2V5LFxuICAgICAgICBlbmNyeXB0ZWRQcnYsXG4gICAgICB9KTtcblxuICAgICAgY29uc3QgclNoYXJlRW52ZWxvcGUgPSBKU09OLnBhcnNlKGNvbW1pdFJlc3VsdC5lbmNyeXB0ZWRVc2VyVG9CaXRnb1JTaGFyZS5zaGFyZSk7XG4gICAgICByU2hhcmVFbnZlbG9wZS52LnNob3VsZC5lcXVhbCgyKTtcbiAgICAgIHJTaGFyZUVudmVsb3BlLnNob3VsZC5oYXZlLnByb3BlcnR5KCdoa2RmU2FsdCcpO1xuXG4gICAgICAvLyAzLiBSb3VuZC10cmlwOiBkZWNyeXB0IHRoZSB2MiBSLXNoYXJlXG4gICAgICBjb25zdCB7IHJTaGFyZSB9ID0gYXdhaXQgdHNzVXRpbHMuY3JlYXRlUlNoYXJlRnJvbVR4UmVxdWVzdCh7XG4gICAgICAgIHR4UmVxdWVzdDogc2lnbmluZ1R4UmVxdWVzdCxcbiAgICAgICAgd2FsbGV0UGFzc3BocmFzZTogcGFzc3BocmFzZSxcbiAgICAgICAgZW5jcnlwdGVkVXNlclRvQml0Z29SU2hhcmU6IGNvbW1pdFJlc3VsdC5lbmNyeXB0ZWRVc2VyVG9CaXRnb1JTaGFyZSxcbiAgICAgIH0pO1xuXG4gICAgICBzaG91bGQuZXhpc3QoclNoYXJlLnhTaGFyZSk7XG4gICAgICBzaG91bGQuZXhpc3QoclNoYXJlLnJTaGFyZXMpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnc2lnblR4UmVxdWVzdDonLCBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3QgdHhSZXF1ZXN0SWQgPSAncmFuZG9taWQnO1xuICAgIGNvbnN0IHR4UmVxdWVzdDogVHhSZXF1ZXN0ID0ge1xuICAgICAgdHhSZXF1ZXN0SWQsXG4gICAgICB0cmFuc2FjdGlvbnM6IFtdLFxuICAgICAgdW5zaWduZWRUeHM6IFtcbiAgICAgICAge1xuICAgICAgICAgIHNlcmlhbGl6ZWRUeEhleDogc29sVHNzU2VyaWFsaXplZFR4SGV4LFxuICAgICAgICAgIHNpZ25hYmxlSGV4OiBzb2xUc3NTaWduYWJsZUhleCxcbiAgICAgICAgICBkZXJpdmF0aW9uUGF0aDogJ20vMCcsXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgICAgZGF0ZTogbmV3IERhdGUoKS50b0lTT1N0cmluZygpLFxuICAgICAgaW50ZW50OiB7XG4gICAgICAgIGludGVudFR5cGU6ICdwYXltZW50JyxcbiAgICAgICAgcmVjaXBpZW50czogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGFkZHJlc3M6IHsgYWRkcmVzczogJ0hNRWdiUjRTMmhMS2ZzdDJWWlVWcEhWVXU0RmlvRlB5VzVpVXVKdlpkTXZzJyB9LFxuICAgICAgICAgICAgYW1vdW50OiB7IHZhbHVlOiAnOTk5OTkwMDAwJywgc3ltYm9sOiAndHNvbCcgfSxcbiAgICAgICAgICB9LFxuICAgICAgICBdLFxuICAgICAgfSxcbiAgICAgIGxhdGVzdDogdHJ1ZSxcbiAgICAgIHN0YXRlOiAncGVuZGluZ1VzZXJTaWduYXR1cmUnLFxuICAgICAgd2FsbGV0VHlwZTogJ2hvdCcsXG4gICAgICB3YWxsZXRJZDogJ3dhbGxldElkJyxcbiAgICAgIHBvbGljaWVzQ2hlY2tlZDogdHJ1ZSxcbiAgICAgIHZlcnNpb246IDEsXG4gICAgICB1c2VySWQ6ICd1c2VySWQnLFxuICAgIH07XG5cbiAgICBiZWZvcmVFYWNoKGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIHNhbmRib3guc3R1YihiYXNlQ29pbiwgJ3ZlcmlmeVRyYW5zYWN0aW9uJykucmVzb2x2ZXModHJ1ZSk7XG5cbiAgICAgIGNvbnN0IHVzZXJTaWduU2hhcmUgPSB2YWxpZFVzZXJTaWduU2hhcmU7XG4gICAgICBjb25zdCByU2hhcmUgPSB1c2VyU2lnblNoYXJlLnJTaGFyZXNbM107XG4gICAgICBjb25zdCBzaWduYXR1cmVTaGFyZTogU2lnbmF0dXJlU2hhcmVSZWNvcmQgPSB7XG4gICAgICAgIGZyb206IFNpZ25hdHVyZVNoYXJlVHlwZS5VU0VSLFxuICAgICAgICB0bzogU2lnbmF0dXJlU2hhcmVUeXBlLkJJVEdPLFxuICAgICAgICBzaGFyZTogclNoYXJlLnIgKyByU2hhcmUuUixcbiAgICAgIH07XG5cbiAgICAgIGF3YWl0IG5vY2tTZW5kU2lnbmF0dXJlU2hhcmUoe1xuICAgICAgICB3YWxsZXRJZDogd2FsbGV0LmlkKCksXG4gICAgICAgIHR4UmVxdWVzdElkOiB0eFJlcXVlc3QudHhSZXF1ZXN0SWQsXG4gICAgICAgIHNpZ25hdHVyZVNoYXJlLFxuICAgICAgfSk7XG5cbiAgICAgIGNvbnN0IHNpZ25hdHVyZVNoYXJlMjogU2lnbmF0dXJlU2hhcmVSZWNvcmQgPSB7XG4gICAgICAgIGZyb206IFNpZ25hdHVyZVNoYXJlVHlwZS5CSVRHTyxcbiAgICAgICAgdG86IFNpZ25hdHVyZVNoYXJlVHlwZS5VU0VSLFxuICAgICAgICBzaGFyZTogdmFsaWRCaXRnb1RvVXNlclNpZ25TaGFyZS5yU2hhcmVzWzFdLnIgKyB2YWxpZEJpdGdvVG9Vc2VyU2lnblNoYXJlLnJTaGFyZXNbMV0uUixcbiAgICAgIH07XG4gICAgICBjb25zdCByZXNwb25zZSA9IHsgdHhSZXF1ZXN0czogW3sgLi4udHhSZXF1ZXN0LCBzaWduYXR1cmVTaGFyZXM6IFtzaWduYXR1cmVTaGFyZTJdIH1dIH07XG4gICAgICBhd2FpdCBub2NrR2V0VHhSZXF1ZXN0KHsgd2FsbGV0SWQ6IHdhbGxldC5pZCgpLCB0eFJlcXVlc3RJZDogdHhSZXF1ZXN0LnR4UmVxdWVzdElkLCByZXNwb25zZSB9KTtcblxuICAgICAgY29uc3QgYml0Z29Ub1VzZXJDb21taXRtZW50U2hhcmU6IENvbW1pdG1lbnRTaGFyZVJlY29yZCA9IHtcbiAgICAgICAgZnJvbTogU2lnbmF0dXJlU2hhcmVUeXBlLkJJVEdPLFxuICAgICAgICB0bzogU2lnbmF0dXJlU2hhcmVUeXBlLlVTRVIsXG4gICAgICAgIHR5cGU6IENvbW1pdG1lbnRUeXBlLkNPTU1JVE1FTlQsXG4gICAgICAgIHNoYXJlOiB2YWxpZEJpdGdvVG9Vc2VyU2lnblNoYXJlLnJTaGFyZXNbMV0uY29tbWl0bWVudCxcbiAgICAgIH07XG4gICAgICBjb25zdCBleGNoYW5nZUNvbW1pdFJlc3BvbnNlOiBFeGNoYW5nZUNvbW1pdG1lbnRSZXNwb25zZSA9IHsgY29tbWl0bWVudFNoYXJlOiBiaXRnb1RvVXNlckNvbW1pdG1lbnRTaGFyZSB9O1xuICAgICAgYXdhaXQgbm9ja0V4Y2hhbmdlQ29tbWl0bWVudHMoe1xuICAgICAgICB3YWxsZXRJZDogd2FsbGV0LmlkKCksXG4gICAgICAgIHR4UmVxdWVzdElkOiB0eFJlcXVlc3QudHhSZXF1ZXN0SWQsXG4gICAgICAgIHJlc3BvbnNlOiBleGNoYW5nZUNvbW1pdFJlc3BvbnNlLFxuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2lnblR4UmVxdWVzdCBzaG91bGQgc3VjY2VlZCB3aXRoIHR4UmVxdWVzdCBvYmplY3QgYXMgaW5wdXQnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBzaWduZWRUeFJlcXVlc3QgPSBhd2FpdCB0c3NVdGlscy5zaWduVHhSZXF1ZXN0KHtcbiAgICAgICAgdHhSZXF1ZXN0LFxuICAgICAgICBwcnY6IEpTT04uc3RyaW5naWZ5KHZhbGlkVXNlclNpZ25pbmdNYXRlcmlhbCksXG4gICAgICAgIHJlcUlkLFxuICAgICAgfSk7XG4gICAgICBzaWduZWRUeFJlcXVlc3QudW5zaWduZWRUeHMuc2hvdWxkLmRlZXBFcXVhbCh0eFJlcXVlc3QudW5zaWduZWRUeHMpO1xuXG4gICAgICBzYW5kYm94LnZlcmlmeUFuZFJlc3RvcmUoKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaWduVHhSZXF1ZXN0IHNob3VsZCBzdWNjZWVkIHdpdGggdHhSZXF1ZXN0IGlkIGFzIGlucHV0JywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgZ2V0VHhSZXF1ZXN0ID0gc2FuZGJveC5zdHViKHRzc1V0aWxzLCAnZ2V0VHhSZXF1ZXN0Jyk7XG4gICAgICBnZXRUeFJlcXVlc3QucmVzb2x2ZXModHhSZXF1ZXN0KTtcbiAgICAgIGdldFR4UmVxdWVzdC5jYWxsZWRXaXRoKHR4UmVxdWVzdElkKTtcblxuICAgICAgY29uc3Qgc2lnbmVkVHhSZXF1ZXN0ID0gYXdhaXQgdHNzVXRpbHMuc2lnblR4UmVxdWVzdCh7XG4gICAgICAgIHR4UmVxdWVzdDogdHhSZXF1ZXN0SWQsXG4gICAgICAgIHBydjogSlNPTi5zdHJpbmdpZnkodmFsaWRVc2VyU2lnbmluZ01hdGVyaWFsKSxcbiAgICAgICAgcmVxSWQsXG4gICAgICB9KTtcbiAgICAgIHNpZ25lZFR4UmVxdWVzdC51bnNpZ25lZFR4cy5zaG91bGQuZGVlcEVxdWFsKHR4UmVxdWVzdC51bnNpZ25lZFR4cyk7XG5cbiAgICAgIHNhbmRib3gudmVyaWZ5QW5kUmVzdG9yZSgpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnc2lnblR4UmVxdWVzdCBXaXRoIENvbW1pdG1lbnQ6JywgZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IHR4UmVxdWVzdElkID0gJ3JhbmRvbWlkJztcbiAgICBjb25zdCB0eFJlcXVlc3Q6IFR4UmVxdWVzdCA9IHtcbiAgICAgIHR4UmVxdWVzdElkLFxuICAgICAgdHJhbnNhY3Rpb25zOiBbXSxcbiAgICAgIHVuc2lnbmVkVHhzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBzZXJpYWxpemVkVHhIZXg6IHNvbFRzc1NlcmlhbGl6ZWRUeEhleCxcbiAgICAgICAgICBzaWduYWJsZUhleDogc29sVHNzU2lnbmFibGVIZXgsXG4gICAgICAgICAgZGVyaXZhdGlvblBhdGg6ICdtLzAnLFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICAgIGRhdGU6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKSxcbiAgICAgIGludGVudDoge1xuICAgICAgICBpbnRlbnRUeXBlOiAncGF5bWVudCcsXG4gICAgICAgIHJlY2lwaWVudHM6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBhZGRyZXNzOiB7IGFkZHJlc3M6ICdITUVnYlI0UzJoTEtmc3QyVlpVVnBIVlV1NEZpb0ZQeVc1aVV1SnZaZE12cycgfSxcbiAgICAgICAgICAgIGFtb3VudDogeyB2YWx1ZTogJzk5OTk5MDAwMCcsIHN5bWJvbDogJ3Rzb2wnIH0sXG4gICAgICAgICAgfSxcbiAgICAgICAgXSxcbiAgICAgIH0sXG4gICAgICBsYXRlc3Q6IHRydWUsXG4gICAgICBzdGF0ZTogJ3BlbmRpbmdVc2VyU2lnbmF0dXJlJyxcbiAgICAgIHdhbGxldFR5cGU6ICdob3QnLFxuICAgICAgd2FsbGV0SWQ6ICd3YWxsZXRJZCcsXG4gICAgICBwb2xpY2llc0NoZWNrZWQ6IHRydWUsXG4gICAgICB2ZXJzaW9uOiAxLFxuICAgICAgdXNlcklkOiAndXNlcklkJyxcbiAgICB9O1xuXG4gICAgYmVmb3JlRWFjaChhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBzYW5kYm94LnN0dWIoYmFzZUNvaW4sICd2ZXJpZnlUcmFuc2FjdGlvbicpLnJlc29sdmVzKHRydWUpO1xuXG4gICAgICBjb25zdCB1c2VyU2lnblNoYXJlID0gdmFsaWRVc2VyU2lnblNoYXJlO1xuICAgICAgY29uc3QgclNoYXJlID0gdXNlclNpZ25TaGFyZS5yU2hhcmVzWzNdO1xuICAgICAgY29uc3Qgc2lnbmF0dXJlU2hhcmU6IFNpZ25hdHVyZVNoYXJlUmVjb3JkID0ge1xuICAgICAgICBmcm9tOiBTaWduYXR1cmVTaGFyZVR5cGUuVVNFUixcbiAgICAgICAgdG86IFNpZ25hdHVyZVNoYXJlVHlwZS5CSVRHTyxcbiAgICAgICAgc2hhcmU6IHJTaGFyZS5yICsgclNoYXJlLlIsXG4gICAgICB9O1xuXG4gICAgICBhd2FpdCBub2NrU2VuZFNpZ25hdHVyZVNoYXJlKHtcbiAgICAgICAgd2FsbGV0SWQ6IHdhbGxldC5pZCgpLFxuICAgICAgICB0eFJlcXVlc3RJZDogdHhSZXF1ZXN0LnR4UmVxdWVzdElkLFxuICAgICAgICBzaWduYXR1cmVTaGFyZSxcbiAgICAgIH0pO1xuXG4gICAgICBjb25zdCBzaWduYXR1cmVTaGFyZTI6IFNpZ25hdHVyZVNoYXJlUmVjb3JkID0ge1xuICAgICAgICBmcm9tOiBTaWduYXR1cmVTaGFyZVR5cGUuQklUR08sXG4gICAgICAgIHRvOiBTaWduYXR1cmVTaGFyZVR5cGUuVVNFUixcbiAgICAgICAgc2hhcmU6IHZhbGlkQml0Z29Ub1VzZXJTaWduU2hhcmUuclNoYXJlc1sxXS5yICsgdmFsaWRCaXRnb1RvVXNlclNpZ25TaGFyZS5yU2hhcmVzWzFdLlIsXG4gICAgICB9O1xuICAgICAgY29uc3QgcmVzcG9uc2UgPSB7IHR4UmVxdWVzdHM6IFt7IC4uLnR4UmVxdWVzdCwgc2lnbmF0dXJlU2hhcmVzOiBbc2lnbmF0dXJlU2hhcmUyXSB9XSB9O1xuICAgICAgYXdhaXQgbm9ja0dldFR4UmVxdWVzdCh7IHdhbGxldElkOiB3YWxsZXQuaWQoKSwgdHhSZXF1ZXN0SWQ6IHR4UmVxdWVzdC50eFJlcXVlc3RJZCwgcmVzcG9uc2UgfSk7XG4gICAgICBjb25zdCBiaXRnb1RvVXNlckNvbW1pdG1lbnRTaGFyZTogQ29tbWl0bWVudFNoYXJlUmVjb3JkID0ge1xuICAgICAgICBmcm9tOiBTaWduYXR1cmVTaGFyZVR5cGUuQklUR08sXG4gICAgICAgIHRvOiBTaWduYXR1cmVTaGFyZVR5cGUuVVNFUixcbiAgICAgICAgdHlwZTogQ29tbWl0bWVudFR5cGUuQ09NTUlUTUVOVCxcbiAgICAgICAgc2hhcmU6IHZhbGlkQml0Z29Ub1VzZXJTaWduU2hhcmUuclNoYXJlc1sxXS5jb21taXRtZW50LFxuICAgICAgfTtcbiAgICAgIGNvbnN0IGV4Y2hhbmdlQ29tbWl0UmVzcG9uc2U6IEV4Y2hhbmdlQ29tbWl0bWVudFJlc3BvbnNlID0geyBjb21taXRtZW50U2hhcmU6IGJpdGdvVG9Vc2VyQ29tbWl0bWVudFNoYXJlIH07XG4gICAgICBhd2FpdCBub2NrRXhjaGFuZ2VDb21taXRtZW50cyh7XG4gICAgICAgIHdhbGxldElkOiB3YWxsZXQuaWQoKSxcbiAgICAgICAgdHhSZXF1ZXN0SWQ6IHR4UmVxdWVzdC50eFJlcXVlc3RJZCxcbiAgICAgICAgcmVzcG9uc2U6IGV4Y2hhbmdlQ29tbWl0UmVzcG9uc2UsXG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIGl0KCdzaWduVHhSZXF1ZXN0IHNob3VsZCBzdWNjZWVkIHdpdGggdHhSZXF1ZXN0IG9iamVjdCBhcyBpbnB1dCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHNpZ25lZFR4UmVxdWVzdCA9IGF3YWl0IHRzc1V0aWxzLnNpZ25UeFJlcXVlc3Qoe1xuICAgICAgICB0eFJlcXVlc3QsXG4gICAgICAgIHBydjogSlNPTi5zdHJpbmdpZnkodmFsaWRVc2VyU2lnbmluZ01hdGVyaWFsKSxcbiAgICAgICAgcmVxSWQsXG4gICAgICB9KTtcbiAgICAgIHNpZ25lZFR4UmVxdWVzdC51bnNpZ25lZFR4cy5zaG91bGQuZGVlcEVxdWFsKHR4UmVxdWVzdC51bnNpZ25lZFR4cyk7XG5cbiAgICAgIHNhbmRib3gudmVyaWZ5QW5kUmVzdG9yZSgpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3NpZ25UeFJlcXVlc3Qgc2hvdWxkIHN1Y2NlZWQgd2l0aCB0eFJlcXVlc3QgaWQgYXMgaW5wdXQnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBnZXRUeFJlcXVlc3QgPSBzYW5kYm94LnN0dWIodHNzVXRpbHMsICdnZXRUeFJlcXVlc3QnKTtcbiAgICAgIGdldFR4UmVxdWVzdC5yZXNvbHZlcyh0eFJlcXVlc3QpO1xuICAgICAgZ2V0VHhSZXF1ZXN0LmNhbGxlZFdpdGgodHhSZXF1ZXN0SWQpO1xuXG4gICAgICBjb25zdCBzaWduZWRUeFJlcXVlc3QgPSBhd2FpdCB0c3NVdGlscy5zaWduVHhSZXF1ZXN0KHtcbiAgICAgICAgdHhSZXF1ZXN0OiB0eFJlcXVlc3RJZCxcbiAgICAgICAgcHJ2OiBKU09OLnN0cmluZ2lmeSh2YWxpZFVzZXJTaWduaW5nTWF0ZXJpYWwpLFxuICAgICAgICByZXFJZCxcbiAgICAgIH0pO1xuICAgICAgc2lnbmVkVHhSZXF1ZXN0LnVuc2lnbmVkVHhzLnNob3VsZC5kZWVwRXF1YWwodHhSZXF1ZXN0LnVuc2lnbmVkVHhzKTtcblxuICAgICAgc2FuZGJveC52ZXJpZnlBbmRSZXN0b3JlKCk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdzaWduVHhSZXF1ZXN0IHJlc29sdmVFZmZlY3RpdmVUeFBhcmFtcyBndWFyZDonLCBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3QgdHhSZXF1ZXN0SWQgPSAncmFuZG9taWQtZ3VhcmQnO1xuICAgIGNvbnN0IGJhc2VUeFJlcXVlc3Q6IFR4UmVxdWVzdCA9IHtcbiAgICAgIHR4UmVxdWVzdElkLFxuICAgICAgdHJhbnNhY3Rpb25zOiBbXSxcbiAgICAgIHVuc2lnbmVkVHhzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBzZXJpYWxpemVkVHhIZXg6IHNvbFRzc1NlcmlhbGl6ZWRUeEhleCxcbiAgICAgICAgICBzaWduYWJsZUhleDogc29sVHNzU2lnbmFibGVIZXgsXG4gICAgICAgICAgZGVyaXZhdGlvblBhdGg6ICdtLzAnLFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICAgIGRhdGU6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKSxcbiAgICAgIGludGVudDoge1xuICAgICAgICBpbnRlbnRUeXBlOiAncGF5bWVudCcsXG4gICAgICAgIHJlY2lwaWVudHM6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBhZGRyZXNzOiB7IGFkZHJlc3M6ICdITUVnYlI0UzJoTEtmc3QyVlpVVnBIVlV1NEZpb0ZQeVc1aVV1SnZaZE12cycgfSxcbiAgICAgICAgICAgIGFtb3VudDogeyB2YWx1ZTogJzk5OTk5MDAwMCcsIHN5bWJvbDogJ3Rzb2wnIH0sXG4gICAgICAgICAgfSxcbiAgICAgICAgXSxcbiAgICAgIH0sXG4gICAgICBsYXRlc3Q6IHRydWUsXG4gICAgICBzdGF0ZTogJ3BlbmRpbmdVc2VyU2lnbmF0dXJlJyxcbiAgICAgIHdhbGxldFR5cGU6ICdob3QnLFxuICAgICAgd2FsbGV0SWQ6ICd3YWxsZXRJZCcsXG4gICAgICBwb2xpY2llc0NoZWNrZWQ6IHRydWUsXG4gICAgICB2ZXJzaW9uOiAxLFxuICAgICAgdXNlcklkOiAndXNlcklkJyxcbiAgICB9O1xuXG4gICAgaXQoJ3Rocm93cyBJbnZhbGlkVHJhbnNhY3Rpb25FcnJvciB3aGVuIHR4UGFyYW1zIGlzIGFic2VudCBhbmQgaW50ZW50IGhhcyBubyByZWNpcGllbnRzJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgbWFsaWNpb3VzVHhSZXF1ZXN0OiBUeFJlcXVlc3QgPSB7XG4gICAgICAgIC4uLmJhc2VUeFJlcXVlc3QsXG4gICAgICAgIGludGVudDogeyBpbnRlbnRUeXBlOiAnc3Rha2luZ0F1dGhvcml6ZScgfSxcbiAgICAgIH07XG4gICAgICBhd2FpdCB0c3NVdGlsc1xuICAgICAgICAuc2lnblR4UmVxdWVzdCh7XG4gICAgICAgICAgdHhSZXF1ZXN0OiBtYWxpY2lvdXNUeFJlcXVlc3QsXG4gICAgICAgICAgcHJ2OiBKU09OLnN0cmluZ2lmeSh2YWxpZFVzZXJTaWduaW5nTWF0ZXJpYWwpLFxuICAgICAgICAgIHJlcUlkLFxuICAgICAgICB9KVxuICAgICAgICAuc2hvdWxkLmJlLnJlamVjdGVkV2l0aChJbnZhbGlkVHJhbnNhY3Rpb25FcnJvcik7XG4gICAgfSk7XG5cbiAgICBpdCgndXNlcyBpbnRlbnQgcmVjaXBpZW50cyB3aGVuIHR4UGFyYW1zIGlzIGFic2VudCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHZlcmlmeVN0dWIgPSBzYW5kYm94LnN0dWIoYmFzZUNvaW4sICd2ZXJpZnlUcmFuc2FjdGlvbicpLnJlc29sdmVzKHRydWUpO1xuXG4gICAgICBjb25zdCB1c2VyU2lnblNoYXJlID0gdmFsaWRVc2VyU2lnblNoYXJlO1xuICAgICAgY29uc3QgclNoYXJlID0gdXNlclNpZ25TaGFyZS5yU2hhcmVzWzNdO1xuICAgICAgY29uc3Qgc2lnbmF0dXJlU2hhcmU6IFNpZ25hdHVyZVNoYXJlUmVjb3JkID0ge1xuICAgICAgICBmcm9tOiBTaWduYXR1cmVTaGFyZVR5cGUuVVNFUixcbiAgICAgICAgdG86IFNpZ25hdHVyZVNoYXJlVHlwZS5CSVRHTyxcbiAgICAgICAgc2hhcmU6IHJTaGFyZS5yICsgclNoYXJlLlIsXG4gICAgICB9O1xuICAgICAgYXdhaXQgbm9ja1NlbmRTaWduYXR1cmVTaGFyZSh7XG4gICAgICAgIHdhbGxldElkOiB3YWxsZXQuaWQoKSxcbiAgICAgICAgdHhSZXF1ZXN0SWQ6IGJhc2VUeFJlcXVlc3QudHhSZXF1ZXN0SWQsXG4gICAgICAgIHNpZ25hdHVyZVNoYXJlLFxuICAgICAgfSk7XG4gICAgICBjb25zdCBzaWduYXR1cmVTaGFyZTI6IFNpZ25hdHVyZVNoYXJlUmVjb3JkID0ge1xuICAgICAgICBmcm9tOiBTaWduYXR1cmVTaGFyZVR5cGUuQklUR08sXG4gICAgICAgIHRvOiBTaWduYXR1cmVTaGFyZVR5cGUuVVNFUixcbiAgICAgICAgc2hhcmU6IHZhbGlkQml0Z29Ub1VzZXJTaWduU2hhcmUuclNoYXJlc1sxXS5yICsgdmFsaWRCaXRnb1RvVXNlclNpZ25TaGFyZS5yU2hhcmVzWzFdLlIsXG4gICAgICB9O1xuICAgICAgY29uc3QgcmVzcG9uc2UgPSB7IHR4UmVxdWVzdHM6IFt7IC4uLmJhc2VUeFJlcXVlc3QsIHNpZ25hdHVyZVNoYXJlczogW3NpZ25hdHVyZVNoYXJlMl0gfV0gfTtcbiAgICAgIGF3YWl0IG5vY2tHZXRUeFJlcXVlc3QoeyB3YWxsZXRJZDogd2FsbGV0LmlkKCksIHR4UmVxdWVzdElkOiBiYXNlVHhSZXF1ZXN0LnR4UmVxdWVzdElkLCByZXNwb25zZSB9KTtcbiAgICAgIGNvbnN0IGJpdGdvVG9Vc2VyQ29tbWl0bWVudFNoYXJlOiBDb21taXRtZW50U2hhcmVSZWNvcmQgPSB7XG4gICAgICAgIGZyb206IFNpZ25hdHVyZVNoYXJlVHlwZS5CSVRHTyxcbiAgICAgICAgdG86IFNpZ25hdHVyZVNoYXJlVHlwZS5VU0VSLFxuICAgICAgICB0eXBlOiBDb21taXRtZW50VHlwZS5DT01NSVRNRU5ULFxuICAgICAgICBzaGFyZTogdmFsaWRCaXRnb1RvVXNlclNpZ25TaGFyZS5yU2hhcmVzWzFdLmNvbW1pdG1lbnQsXG4gICAgICB9O1xuICAgICAgYXdhaXQgbm9ja0V4Y2hhbmdlQ29tbWl0bWVudHMoe1xuICAgICAgICB3YWxsZXRJZDogd2FsbGV0LmlkKCksXG4gICAgICAgIHR4UmVxdWVzdElkOiBiYXNlVHhSZXF1ZXN0LnR4UmVxdWVzdElkLFxuICAgICAgICByZXNwb25zZTogeyBjb21taXRtZW50U2hhcmU6IGJpdGdvVG9Vc2VyQ29tbWl0bWVudFNoYXJlIH0sXG4gICAgICB9KTtcblxuICAgICAgYXdhaXQgdHNzVXRpbHMuc2lnblR4UmVxdWVzdCh7XG4gICAgICAgIHR4UmVxdWVzdDogYmFzZVR4UmVxdWVzdCxcbiAgICAgICAgcHJ2OiBKU09OLnN0cmluZ2lmeSh2YWxpZFVzZXJTaWduaW5nTWF0ZXJpYWwpLFxuICAgICAgICByZXFJZCxcbiAgICAgIH0pO1xuXG4gICAgICB2ZXJpZnlTdHViLmNhbGxlZE9uY2Uuc2hvdWxkLmJlLnRydWUoKTtcbiAgICAgIGNvbnN0IHZlcmlmeUFyZ3MgPSB2ZXJpZnlTdHViLmZpcnN0Q2FsbC5hcmdzWzBdO1xuICAgICAgdmVyaWZ5QXJncy50eFBhcmFtcy5yZWNpcGllbnRzPy5bMF0uYWRkcmVzcy5zaG91bGQuZXF1YWwoJ0hNRWdiUjRTMmhMS2ZzdDJWWlVWcEhWVXU0RmlvRlB5VzVpVXVKdlpkTXZzJyk7XG4gICAgfSk7XG5cbiAgICBpdCgnZG9lcyBub3QgdGhyb3cgZm9yIGFsbG93bGlzdGVkIG5vLXJlY2lwaWVudCBpbnRlbnRUeXBlIChkZWFjdGl2YXRlKScsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHZlcmlmeVN0dWIgPSBzYW5kYm94LnN0dWIoYmFzZUNvaW4sICd2ZXJpZnlUcmFuc2FjdGlvbicpLnJlc29sdmVzKHRydWUpO1xuXG4gICAgICBjb25zdCBkZWFjdGl2YXRlVHhSZXF1ZXN0OiBUeFJlcXVlc3QgPSB7XG4gICAgICAgIC4uLmJhc2VUeFJlcXVlc3QsXG4gICAgICAgIGludGVudDogeyBpbnRlbnRUeXBlOiAnZGVhY3RpdmF0ZScgfSxcbiAgICAgIH07XG5cbiAgICAgIGNvbnN0IHVzZXJTaWduU2hhcmUgPSB2YWxpZFVzZXJTaWduU2hhcmU7XG4gICAgICBjb25zdCByU2hhcmUgPSB1c2VyU2lnblNoYXJlLnJTaGFyZXNbM107XG4gICAgICBjb25zdCBzaWduYXR1cmVTaGFyZTogU2lnbmF0dXJlU2hhcmVSZWNvcmQgPSB7XG4gICAgICAgIGZyb206IFNpZ25hdHVyZVNoYXJlVHlwZS5VU0VSLFxuICAgICAgICB0bzogU2lnbmF0dXJlU2hhcmVUeXBlLkJJVEdPLFxuICAgICAgICBzaGFyZTogclNoYXJlLnIgKyByU2hhcmUuUixcbiAgICAgIH07XG4gICAgICBhd2FpdCBub2NrU2VuZFNpZ25hdHVyZVNoYXJlKHtcbiAgICAgICAgd2FsbGV0SWQ6IHdhbGxldC5pZCgpLFxuICAgICAgICB0eFJlcXVlc3RJZDogZGVhY3RpdmF0ZVR4UmVxdWVzdC50eFJlcXVlc3RJZCxcbiAgICAgICAgc2lnbmF0dXJlU2hhcmUsXG4gICAgICB9KTtcbiAgICAgIGNvbnN0IHNpZ25hdHVyZVNoYXJlMjogU2lnbmF0dXJlU2hhcmVSZWNvcmQgPSB7XG4gICAgICAgIGZyb206IFNpZ25hdHVyZVNoYXJlVHlwZS5CSVRHTyxcbiAgICAgICAgdG86IFNpZ25hdHVyZVNoYXJlVHlwZS5VU0VSLFxuICAgICAgICBzaGFyZTogdmFsaWRCaXRnb1RvVXNlclNpZ25TaGFyZS5yU2hhcmVzWzFdLnIgKyB2YWxpZEJpdGdvVG9Vc2VyU2lnblNoYXJlLnJTaGFyZXNbMV0uUixcbiAgICAgIH07XG4gICAgICBjb25zdCByZXNwb25zZSA9IHsgdHhSZXF1ZXN0czogW3sgLi4uZGVhY3RpdmF0ZVR4UmVxdWVzdCwgc2lnbmF0dXJlU2hhcmVzOiBbc2lnbmF0dXJlU2hhcmUyXSB9XSB9O1xuICAgICAgYXdhaXQgbm9ja0dldFR4UmVxdWVzdCh7XG4gICAgICAgIHdhbGxldElkOiB3YWxsZXQuaWQoKSxcbiAgICAgICAgdHhSZXF1ZXN0SWQ6IGRlYWN0aXZhdGVUeFJlcXVlc3QudHhSZXF1ZXN0SWQsXG4gICAgICAgIHJlc3BvbnNlLFxuICAgICAgfSk7XG4gICAgICBjb25zdCBiaXRnb1RvVXNlckNvbW1pdG1lbnRTaGFyZTogQ29tbWl0bWVudFNoYXJlUmVjb3JkID0ge1xuICAgICAgICBmcm9tOiBTaWduYXR1cmVTaGFyZVR5cGUuQklUR08sXG4gICAgICAgIHRvOiBTaWduYXR1cmVTaGFyZVR5cGUuVVNFUixcbiAgICAgICAgdHlwZTogQ29tbWl0bWVudFR5cGUuQ09NTUlUTUVOVCxcbiAgICAgICAgc2hhcmU6IHZhbGlkQml0Z29Ub1VzZXJTaWduU2hhcmUuclNoYXJlc1sxXS5jb21taXRtZW50LFxuICAgICAgfTtcbiAgICAgIGF3YWl0IG5vY2tFeGNoYW5nZUNvbW1pdG1lbnRzKHtcbiAgICAgICAgd2FsbGV0SWQ6IHdhbGxldC5pZCgpLFxuICAgICAgICB0eFJlcXVlc3RJZDogZGVhY3RpdmF0ZVR4UmVxdWVzdC50eFJlcXVlc3RJZCxcbiAgICAgICAgcmVzcG9uc2U6IHsgY29tbWl0bWVudFNoYXJlOiBiaXRnb1RvVXNlckNvbW1pdG1lbnRTaGFyZSB9LFxuICAgICAgfSk7XG5cbiAgICAgIGF3YWl0IHRzc1V0aWxzLnNpZ25UeFJlcXVlc3Qoe1xuICAgICAgICB0eFJlcXVlc3Q6IGRlYWN0aXZhdGVUeFJlcXVlc3QsXG4gICAgICAgIHBydjogSlNPTi5zdHJpbmdpZnkodmFsaWRVc2VyU2lnbmluZ01hdGVyaWFsKSxcbiAgICAgICAgcmVxSWQsXG4gICAgICB9KTtcblxuICAgICAgdmVyaWZ5U3R1Yi5jYWxsZWRPbmNlLnNob3VsZC5iZS50cnVlKCk7XG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnY29uc29saWRhdGUgaW50ZW50JywgZnVuY3Rpb24gKCkge1xuICAgICAgLy8gSW50ZW50IHJlY2lwaWVudCBhbW91bnQgaXMgYSBidWlsZC10aW1lIHNuYXBzaG90IHRoYXQgZHJpZnRzIGZyb20gdGhlIHN3ZXB0IGJhbGFuY2UgaW4gdGhlIHR4LlxuICAgICAgY29uc3QgY29uc29saWRhdGVUeFJlcXVlc3Q6IFR4UmVxdWVzdCA9IHtcbiAgICAgICAgLi4uYmFzZVR4UmVxdWVzdCxcbiAgICAgICAgaW50ZW50OiB7XG4gICAgICAgICAgaW50ZW50VHlwZTogJ2NvbnNvbGlkYXRlJyxcbiAgICAgICAgICBjb25zb2xpZGF0ZUlkOiAnNjhhN2Q1ZDBjNjZlNzRlMjE2Yjk3MTczYmQ1NThjNmQnLFxuICAgICAgICAgIHJlY2lwaWVudHM6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgYWRkcmVzczogeyBhZGRyZXNzOiAnSE1FZ2JSNFMyaExLZnN0MlZaVVZwSFZVdTRGaW9GUHlXNWlVdUp2WmRNdnMnIH0sXG4gICAgICAgICAgICAgIGFtb3VudDogeyB2YWx1ZTogJzk5OTk4NTAwMCcsIHN5bWJvbDogJ3Rzb2wnIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIF0sXG4gICAgICAgIH0sXG4gICAgICB9O1xuXG4gICAgICBpdCgndmVyaWZpZXMgc3dlZXAtdG8tcm9vdCBpbnN0ZWFkIG9mIHNuYXBzaG90IGludGVudCByZWNpcGllbnRzJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICBzYW5kYm94XG4gICAgICAgICAgLnN0dWIod2FsbGV0LCAnY29pblNwZWNpZmljJylcbiAgICAgICAgICAucmV0dXJucyh7IHJvb3RBZGRyZXNzOiAnSE1FZ2JSNFMyaExLZnN0MlZaVVZwSFZVdTRGaW9GUHlXNWlVdUp2WmRNdnMnLCBjdXN0b21DaGFuZ2VXYWxsZXRJZDogJycgfSk7XG4gICAgICAgIGNvbnN0IHZlcmlmeVNweSA9IHNhbmRib3guc3B5KGJhc2VDb2luLCAndmVyaWZ5VHJhbnNhY3Rpb24nKTtcblxuICAgICAgICBjb25zdCByU2hhcmUgPSB2YWxpZFVzZXJTaWduU2hhcmUuclNoYXJlc1szXTtcbiAgICAgICAgYXdhaXQgbm9ja1NlbmRTaWduYXR1cmVTaGFyZSh7XG4gICAgICAgICAgd2FsbGV0SWQ6IHdhbGxldC5pZCgpLFxuICAgICAgICAgIHR4UmVxdWVzdElkOiBjb25zb2xpZGF0ZVR4UmVxdWVzdC50eFJlcXVlc3RJZCxcbiAgICAgICAgICBzaWduYXR1cmVTaGFyZTogeyBmcm9tOiBTaWduYXR1cmVTaGFyZVR5cGUuVVNFUiwgdG86IFNpZ25hdHVyZVNoYXJlVHlwZS5CSVRHTywgc2hhcmU6IHJTaGFyZS5yICsgclNoYXJlLlIgfSxcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IHNpZ25hdHVyZVNoYXJlMjogU2lnbmF0dXJlU2hhcmVSZWNvcmQgPSB7XG4gICAgICAgICAgZnJvbTogU2lnbmF0dXJlU2hhcmVUeXBlLkJJVEdPLFxuICAgICAgICAgIHRvOiBTaWduYXR1cmVTaGFyZVR5cGUuVVNFUixcbiAgICAgICAgICBzaGFyZTogdmFsaWRCaXRnb1RvVXNlclNpZ25TaGFyZS5yU2hhcmVzWzFdLnIgKyB2YWxpZEJpdGdvVG9Vc2VyU2lnblNoYXJlLnJTaGFyZXNbMV0uUixcbiAgICAgICAgfTtcbiAgICAgICAgYXdhaXQgbm9ja0dldFR4UmVxdWVzdCh7XG4gICAgICAgICAgd2FsbGV0SWQ6IHdhbGxldC5pZCgpLFxuICAgICAgICAgIHR4UmVxdWVzdElkOiBjb25zb2xpZGF0ZVR4UmVxdWVzdC50eFJlcXVlc3RJZCxcbiAgICAgICAgICByZXNwb25zZTogeyB0eFJlcXVlc3RzOiBbeyAuLi5jb25zb2xpZGF0ZVR4UmVxdWVzdCwgc2lnbmF0dXJlU2hhcmVzOiBbc2lnbmF0dXJlU2hhcmUyXSB9XSB9LFxuICAgICAgICB9KTtcbiAgICAgICAgYXdhaXQgbm9ja0V4Y2hhbmdlQ29tbWl0bWVudHMoe1xuICAgICAgICAgIHdhbGxldElkOiB3YWxsZXQuaWQoKSxcbiAgICAgICAgICB0eFJlcXVlc3RJZDogY29uc29saWRhdGVUeFJlcXVlc3QudHhSZXF1ZXN0SWQsXG4gICAgICAgICAgcmVzcG9uc2U6IHtcbiAgICAgICAgICAgIGNvbW1pdG1lbnRTaGFyZToge1xuICAgICAgICAgICAgICBmcm9tOiBTaWduYXR1cmVTaGFyZVR5cGUuQklUR08sXG4gICAgICAgICAgICAgIHRvOiBTaWduYXR1cmVTaGFyZVR5cGUuVVNFUixcbiAgICAgICAgICAgICAgdHlwZTogQ29tbWl0bWVudFR5cGUuQ09NTUlUTUVOVCxcbiAgICAgICAgICAgICAgc2hhcmU6IHZhbGlkQml0Z29Ub1VzZXJTaWduU2hhcmUuclNoYXJlc1sxXS5jb21taXRtZW50LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9LFxuICAgICAgICB9KTtcblxuICAgICAgICBhd2FpdCB0c3NVdGlscy5zaWduVHhSZXF1ZXN0KHtcbiAgICAgICAgICB0eFJlcXVlc3Q6IGNvbnNvbGlkYXRlVHhSZXF1ZXN0LFxuICAgICAgICAgIHBydjogSlNPTi5zdHJpbmdpZnkodmFsaWRVc2VyU2lnbmluZ01hdGVyaWFsKSxcbiAgICAgICAgICByZXFJZCxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdmVyaWZ5U3B5LmNhbGxlZE9uY2Uuc2hvdWxkLmJlLnRydWUoKTtcbiAgICAgICAgY29uc3QgdmVyaWZ5QXJncyA9IHZlcmlmeVNweS5maXJzdENhbGwuYXJnc1swXTtcbiAgICAgICAgc2hvdWxkLm5vdC5leGlzdCh2ZXJpZnlBcmdzLnR4UGFyYW1zLnJlY2lwaWVudHMpO1xuICAgICAgICBzaG91bGQodmVyaWZ5QXJncy50eFByZWJ1aWxkLmNvbnNvbGlkYXRlSWQpLmVxdWFsKCc2OGE3ZDVkMGM2NmU3NGUyMTZiOTcxNzNiZDU1OGM2ZCcpO1xuICAgICAgICBzaG91bGQodmVyaWZ5QXJncy52ZXJpZmljYXRpb24pLmRlZXBFcXVhbCh7IGNvbnNvbGlkYXRpb25Ub0Jhc2VBZGRyZXNzOiB0cnVlIH0pO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdyZWplY3RzIGEgY29uc29saWRhdGlvbiB0aGF0IGRvZXMgbm90IHN3ZWVwIHRvIHRoZSB3YWxsZXQgcm9vdCBhZGRyZXNzJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICBzYW5kYm94XG4gICAgICAgICAgLnN0dWIod2FsbGV0LCAnY29pblNwZWNpZmljJylcbiAgICAgICAgICAucmV0dXJucyh7IHJvb3RBZGRyZXNzOiAnNWhyNWZpc1BpNkRYTnV1UnBtNVhVYnpwaUVubWR5eFh1QkRUd3p3Wmo1UGUnLCBjdXN0b21DaGFuZ2VXYWxsZXRJZDogJycgfSk7XG5cbiAgICAgICAgYXdhaXQgdHNzVXRpbHNcbiAgICAgICAgICAuc2lnblR4UmVxdWVzdCh7XG4gICAgICAgICAgICB0eFJlcXVlc3Q6IGNvbnNvbGlkYXRlVHhSZXF1ZXN0LFxuICAgICAgICAgICAgcHJ2OiBKU09OLnN0cmluZ2lmeSh2YWxpZFVzZXJTaWduaW5nTWF0ZXJpYWwpLFxuICAgICAgICAgICAgcmVxSWQsXG4gICAgICAgICAgfSlcbiAgICAgICAgICAuc2hvdWxkLmJlLnJlamVjdGVkV2l0aCgndHggb3V0cHV0cyBkb2VzIG5vdCBtYXRjaCB3aXRoIGV4cGVjdGVkIGFkZHJlc3MnKTtcbiAgICAgIH0pO1xuXG4gICAgICBkZXNjcmliZSgndG9rZW4gY29uc29saWRhdGlvbicsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgLy8gU1BMIHRva2VuIHN3ZWVwOiB0aGUgb3V0cHV0IGlzIHRoZSByb290J3MgYXNzb2NpYXRlZCB0b2tlbiBhY2NvdW50LCBub3QgdGhlIHJvb3QgaXRzZWxmLlxuICAgICAgICBjb25zdCB0b2tlbkNvbnNvbGlkYXRpb25UeEhleCA9XG4gICAgICAgICAgJzAyYjdjMmM3ODI5ZWRlZDRlOGY5NDdjOTBlZDNiOWFmY2U3MWY2MTZlYjQ3ZGZjZmJmNGI3NjU3NzgxNDkwNjAwMTNhY2IzM2I5ZjY3ZmRkOWMyNTEyZjQ4ZmFjNGU0YzA0OWVhYjkzODI5YjY5NDA0ZjNiZDE2NmZlMzI0MmM5MDcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyMDEwNDA5NmRhNjkwYmQ1NThmZDg2MzRhYzE0ZjE2NDVkODA5NWFmZDBjYWVhNTk1MzU3OGM1OTZlM2MwZGVhMzgzMDVlZTcyOThiZmFjNTUxMDFmMTc3NzM1NjU5ZDQyZWQ2YmU4OTBlZjNhMWQyMDRkOWUzM2YzMmUyNGM1NjM1MzI3Y2E2NmQxZmUwMDgyNmU1YTRmNzU5Zjg3YjI3OWMxYWVlMTljY2U1MzAxYWY0ZWQ2NmFlMTdkYjQ4YjIwMWVkNmMyYTBlOGEyOGJmNTY1NjI3ZjFhYjhhMzRiMWE5NWVlMWIwYTJhMzkwODRmMWYwZTJhY2IxYzM5NGIyMDE4NWQ4ZTBiMjI2NTdjOGQ5YzRjZTVmNjQ5NWVmYjY0MTBjMTk5MDExNTMwZjkwZTNhYjlkOGQxZTQyMDZmOWFlMGZmZWIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwYzVmOWZiMzJmNDkxMTFhYjIwYzMzZjI1OThmYzgzNmMxMTNlMjkxODgxYWMyMWVlMjkxNjkzOTQwMTEyNDRlNDA2YTdkNTE3MTkyYzU2OGVlMDhhODQ1ZjczZDI5Nzg4Y2YwMzVjMzE0NWIyMWFiMzQ0ZDgwNjJlYTk0MDAwMDAwNmRkZjZlMWQ3NjVhMTkzZDljYmUxNDZjZWViNzlhYzFjYjQ4NWVkNWY1YjM3OTEzYThjZjU4NTdlZmYwMGE5ZGUxM2M3NGQyYjRkOTQ4ZTE2MDhlYTZlZWJkYWZlNzViYzJmOTk1YWFkMTFiMjFkMWUyYzk0ZjJhMmQxMmY2ODAyMDUwMzAzMDcwMDA0MDQwMDAwMDAwODA0MDIwNjA0MDEwYTBjZTAwNzZiYjIwNDAwMDAwMDA2JztcbiAgICAgICAgY29uc3QgdG9rZW5Db25zb2xpZGF0ZVR4UmVxdWVzdDogVHhSZXF1ZXN0ID0ge1xuICAgICAgICAgIC4uLmNvbnNvbGlkYXRlVHhSZXF1ZXN0LFxuICAgICAgICAgIHVuc2lnbmVkVHhzOiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIHNlcmlhbGl6ZWRUeEhleDogdG9rZW5Db25zb2xpZGF0aW9uVHhIZXgsXG4gICAgICAgICAgICAgIHNpZ25hYmxlSGV4OiB0b2tlbkNvbnNvbGlkYXRpb25UeEhleC5zbGljZSgyICsgMiAqIDEyOCksXG4gICAgICAgICAgICAgIGRlcml2YXRpb25QYXRoOiAnbS8wJyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgXSxcbiAgICAgICAgfTtcblxuICAgICAgICBpdCgndmVyaWZpZXMgdGhlIG91dHB1dCBpcyB0aGUgd2FsbGV0IHJvb3QgdG9rZW4gYWNjb3VudCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBzYW5kYm94XG4gICAgICAgICAgICAuc3R1Yih3YWxsZXQsICdjb2luU3BlY2lmaWMnKVxuICAgICAgICAgICAgLnJldHVybnMoeyByb290QWRkcmVzczogJ0hCeFpTaGNFODZVTW1GOTNLVU04ZVdKS3FlRVhpNWNxV0NMWUxNTWhxTVltJywgY3VzdG9tQ2hhbmdlV2FsbGV0SWQ6ICcnIH0pO1xuICAgICAgICAgIGNvbnN0IHZlcmlmeVNweSA9IHNhbmRib3guc3B5KGJhc2VDb2luLCAndmVyaWZ5VHJhbnNhY3Rpb24nKTtcbiAgICAgICAgICAvLyBTdG9wIGFmdGVyIHZlcmlmaWNhdGlvbjsgc2lnbmluZyBpdHNlbGYgaXMgY292ZXJlZCBhYm92ZS5cbiAgICAgICAgICBzYW5kYm94LnN0dWIodHNzVXRpbHMsICdwaWNrQml0Z29QdWJHcGdLZXlGb3JTaWduaW5nJykucmVqZWN0cyhuZXcgRXJyb3IoJ3ZlcmlmaWVkJykpO1xuXG4gICAgICAgICAgYXdhaXQgdHNzVXRpbHNcbiAgICAgICAgICAgIC5zaWduVHhSZXF1ZXN0KHtcbiAgICAgICAgICAgICAgdHhSZXF1ZXN0OiB0b2tlbkNvbnNvbGlkYXRlVHhSZXF1ZXN0LFxuICAgICAgICAgICAgICBwcnY6IEpTT04uc3RyaW5naWZ5KHZhbGlkVXNlclNpZ25pbmdNYXRlcmlhbCksXG4gICAgICAgICAgICAgIHJlcUlkLFxuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKCd2ZXJpZmllZCcpO1xuICAgICAgICAgIChhd2FpdCB2ZXJpZnlTcHkuZmlyc3RDYWxsLnJldHVyblZhbHVlKS5zaG91bGQuYmUudHJ1ZSgpO1xuICAgICAgICB9KTtcblxuICAgICAgICBpdCgncmVqZWN0cyBhIHRva2VuIG91dHB1dCB0aGF0IGlzIG5vdCB0aGUgd2FsbGV0IHJvb3QgdG9rZW4gYWNjb3VudCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBzYW5kYm94XG4gICAgICAgICAgICAuc3R1Yih3YWxsZXQsICdjb2luU3BlY2lmaWMnKVxuICAgICAgICAgICAgLnJldHVybnMoeyByb290QWRkcmVzczogJzVocjVmaXNQaTZEWE51dVJwbTVYVWJ6cGlFbm1keXhYdUJEVHd6d1pqNVBlJywgY3VzdG9tQ2hhbmdlV2FsbGV0SWQ6ICcnIH0pO1xuXG4gICAgICAgICAgYXdhaXQgdHNzVXRpbHNcbiAgICAgICAgICAgIC5zaWduVHhSZXF1ZXN0KHtcbiAgICAgICAgICAgICAgdHhSZXF1ZXN0OiB0b2tlbkNvbnNvbGlkYXRlVHhSZXF1ZXN0LFxuICAgICAgICAgICAgICBwcnY6IEpTT04uc3RyaW5naWZ5KHZhbGlkVXNlclNpZ25pbmdNYXRlcmlhbCksXG4gICAgICAgICAgICAgIHJlcUlkLFxuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKCd0eCBvdXRwdXRzIGRvZXMgbm90IG1hdGNoIHdpdGggZXhwZWN0ZWQgYWRkcmVzcycpO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnc2lnbkVkZHNhVHNzVXNpbmdFeHRlcm5hbFNpZ25lciByZXNvbHZlRWZmZWN0aXZlVHhQYXJhbXMgZ3VhcmQ6JywgZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IGV4dGVybmFsR3VhcmRUeFJlcXVlc3Q6IFR4UmVxdWVzdCA9IHtcbiAgICAgIHR4UmVxdWVzdElkOiAncmFuZG9taWQtZXh0ZXJuYWwtZ3VhcmQnLFxuICAgICAgdHJhbnNhY3Rpb25zOiBbXSxcbiAgICAgIHVuc2lnbmVkVHhzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBzZXJpYWxpemVkVHhIZXg6IHNvbFRzc1NlcmlhbGl6ZWRUeEhleCxcbiAgICAgICAgICBzaWduYWJsZUhleDogc29sVHNzU2lnbmFibGVIZXgsXG4gICAgICAgICAgZGVyaXZhdGlvblBhdGg6ICdtLzAnLFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICAgIGRhdGU6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKSxcbiAgICAgIGludGVudDoge1xuICAgICAgICBpbnRlbnRUeXBlOiAncGF5bWVudCcsXG4gICAgICAgIHJlY2lwaWVudHM6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBhZGRyZXNzOiB7IGFkZHJlc3M6ICdITUVnYlI0UzJoTEtmc3QyVlpVVnBIVlV1NEZpb0ZQeVc1aVV1SnZaZE12cycgfSxcbiAgICAgICAgICAgIGFtb3VudDogeyB2YWx1ZTogJzk5OTk5MDAwMCcsIHN5bWJvbDogJ3Rzb2wnIH0sXG4gICAgICAgICAgfSxcbiAgICAgICAgXSxcbiAgICAgIH0sXG4gICAgICBsYXRlc3Q6IHRydWUsXG4gICAgICBzdGF0ZTogJ3BlbmRpbmdVc2VyU2lnbmF0dXJlJyxcbiAgICAgIHdhbGxldFR5cGU6ICdob3QnLFxuICAgICAgd2FsbGV0SWQ6ICd3YWxsZXRJZCcsXG4gICAgICBwb2xpY2llc0NoZWNrZWQ6IHRydWUsXG4gICAgICB2ZXJzaW9uOiAxLFxuICAgICAgdXNlcklkOiAndXNlcklkJyxcbiAgICB9O1xuXG4gICAgaXQoJ3Rocm93cyBJbnZhbGlkVHJhbnNhY3Rpb25FcnJvciBiZWZvcmUgZXh0ZXJuYWwgc2lnbmVyIGNhbGxiYWNrcyB3aGVuIGludGVudCBoYXMgbm8gcmVjaXBpZW50cycsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGNvbW1pdG1lbnRHZW4gPSBzYW5kYm94LnN0dWIoKS5yZWplY3RzKG5ldyBFcnJvcignc2hvdWxkIG5vdCBydW4nKSk7XG4gICAgICBjb25zdCBtYWxpY2lvdXNUeFJlcXVlc3Q6IFR4UmVxdWVzdCA9IHtcbiAgICAgICAgLi4uZXh0ZXJuYWxHdWFyZFR4UmVxdWVzdCxcbiAgICAgICAgaW50ZW50OiB7IGludGVudFR5cGU6ICdzdGFraW5nQXV0aG9yaXplJyB9LFxuICAgICAgfTtcbiAgICAgIGF3YWl0IHRzc1V0aWxzXG4gICAgICAgIC5zaWduRWRkc2FUc3NVc2luZ0V4dGVybmFsU2lnbmVyKFxuICAgICAgICAgIG1hbGljaW91c1R4UmVxdWVzdCxcbiAgICAgICAgICBjb21taXRtZW50R2VuLFxuICAgICAgICAgIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignc2hvdWxkIG5vdCBydW4nKTtcbiAgICAgICAgICB9LFxuICAgICAgICAgIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignc2hvdWxkIG5vdCBydW4nKTtcbiAgICAgICAgICB9XG4gICAgICAgIClcbiAgICAgICAgLnNob3VsZC5iZS5yZWplY3RlZFdpdGgoSW52YWxpZFRyYW5zYWN0aW9uRXJyb3IpO1xuICAgICAgY29tbWl0bWVudEdlbi5ub3RDYWxsZWQuc2hvdWxkLmJlLnRydWUoKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ3NpZ25UeFJlcXVlc3RGb3JNZXNzYWdlOicsIGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCB0eFJlcXVlc3RJZCA9ICdyYW5kb21pZC1hYmMnO1xuICAgIGNvbnN0IG1lc3NhZ2VSYXcgPSAnaGVsbG8gd29ybGQnO1xuICAgIGNvbnN0IG1lc3NhZ2VFbmNvZGVkID0gQnVmZmVyLmZyb20oYCR7bWVzc2FnZVJhd31gKS50b1N0cmluZygnaGV4Jyk7XG4gICAgY29uc3QgYnVmZmVyVG9TaWduID0gQnVmZmVyLmZyb20obWVzc2FnZUVuY29kZWQsICdoZXgnKTtcbiAgICBjb25zdCB0eFJlcXVlc3Q6IFR4UmVxdWVzdCA9IHtcbiAgICAgIHR4UmVxdWVzdElkLFxuICAgICAgdHJhbnNhY3Rpb25zOiBbXSxcbiAgICAgIG1lc3NhZ2VzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBzdGF0ZTogJ3BlbmRpbmdTaWduYXR1cmUnLFxuICAgICAgICAgIHNpZ25hdHVyZVNoYXJlczogW10sXG4gICAgICAgICAgbWVzc2FnZVJhdyxcbiAgICAgICAgICBtZXNzYWdlRW5jb2RlZCxcbiAgICAgICAgICBkZXJpdmF0aW9uUGF0aDogJ20vMCcsXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgICAgdW5zaWduZWRUeHM6IFtdLFxuICAgICAgZGF0ZTogbmV3IERhdGUoKS50b0lTT1N0cmluZygpLFxuICAgICAgaW50ZW50OiB7XG4gICAgICAgIGludGVudFR5cGU6ICdwYXltZW50JyxcbiAgICAgIH0sXG4gICAgICBsYXRlc3Q6IHRydWUsXG4gICAgICBzdGF0ZTogJ3BlbmRpbmdVc2VyU2lnbmF0dXJlJyxcbiAgICAgIHdhbGxldFR5cGU6ICdob3QnLFxuICAgICAgd2FsbGV0SWQ6ICd3YWxsZXRJZCcsXG4gICAgICBwb2xpY2llc0NoZWNrZWQ6IHRydWUsXG4gICAgICB2ZXJzaW9uOiAxLFxuICAgICAgdXNlcklkOiAndXNlcklkJyxcbiAgICAgIGFwaVZlcnNpb246ICdmdWxsJyxcbiAgICB9O1xuXG4gICAgYmVmb3JlRWFjaChhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCByU2hhcmUgPSB2YWxpZFVzZXJTaWduU2hhcmUuclNoYXJlc1szXTtcbiAgICAgIGNvbnN0IHNpZ25hdHVyZVNoYXJlOiBTaWduYXR1cmVTaGFyZVJlY29yZCA9IHtcbiAgICAgICAgZnJvbTogU2lnbmF0dXJlU2hhcmVUeXBlLlVTRVIsXG4gICAgICAgIHRvOiBTaWduYXR1cmVTaGFyZVR5cGUuQklUR08sXG4gICAgICAgIHNoYXJlOiByU2hhcmUuciArIHJTaGFyZS5SLFxuICAgICAgfTtcblxuICAgICAgYXdhaXQgbm9ja1NlbmRTaWduYXR1cmVTaGFyZSh7XG4gICAgICAgIHdhbGxldElkOiB3YWxsZXQuaWQoKSxcbiAgICAgICAgdHhSZXF1ZXN0SWQ6IHR4UmVxdWVzdC50eFJlcXVlc3RJZCxcbiAgICAgICAgc2lnbmF0dXJlU2hhcmUsXG4gICAgICAgIHJlcXVlc3RUeXBlOiBSZXF1ZXN0VHlwZS5tZXNzYWdlLFxuICAgICAgICBhcGlNb2RlOiAnZnVsbCcsXG4gICAgICB9KTtcblxuICAgICAgY29uc3Qgc2lnbmF0dXJlU2hhcmUyOiBTaWduYXR1cmVTaGFyZVJlY29yZCA9IHtcbiAgICAgICAgZnJvbTogU2lnbmF0dXJlU2hhcmVUeXBlLkJJVEdPLFxuICAgICAgICB0bzogU2lnbmF0dXJlU2hhcmVUeXBlLlVTRVIsXG4gICAgICAgIHNoYXJlOiB2YWxpZEJpdGdvVG9Vc2VyU2lnblNoYXJlLnJTaGFyZXNbMV0uciArIHZhbGlkQml0Z29Ub1VzZXJTaWduU2hhcmUuclNoYXJlc1sxXS5SLFxuICAgICAgfTtcbiAgICAgIHR4UmVxdWVzdC5tZXNzYWdlcyFbMF0uc2lnbmF0dXJlU2hhcmVzLnB1c2goc2lnbmF0dXJlU2hhcmUyKTtcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0geyB0eFJlcXVlc3RzOiBbeyAuLi50eFJlcXVlc3QsIGFwaVZlcnNpb246ICdmdWxsJyB9XSB9O1xuICAgICAgYXdhaXQgbm9ja0dldFR4UmVxdWVzdCh7IHdhbGxldElkOiB3YWxsZXQuaWQoKSwgdHhSZXF1ZXN0SWQ6IHR4UmVxdWVzdC50eFJlcXVlc3RJZCwgcmVzcG9uc2UgfSk7XG5cbiAgICAgIGNvbnN0IGJpdGdvVG9Vc2VyQ29tbWl0bWVudFNoYXJlOiBDb21taXRtZW50U2hhcmVSZWNvcmQgPSB7XG4gICAgICAgIGZyb206IFNpZ25hdHVyZVNoYXJlVHlwZS5CSVRHTyxcbiAgICAgICAgdG86IFNpZ25hdHVyZVNoYXJlVHlwZS5VU0VSLFxuICAgICAgICB0eXBlOiBDb21taXRtZW50VHlwZS5DT01NSVRNRU5ULFxuICAgICAgICBzaGFyZTogdmFsaWRCaXRnb1RvVXNlclNpZ25TaGFyZS5yU2hhcmVzWzFdLmNvbW1pdG1lbnQsXG4gICAgICB9O1xuICAgICAgY29uc3QgZXhjaGFuZ2VDb21taXRSZXNwb25zZTogRXhjaGFuZ2VDb21taXRtZW50UmVzcG9uc2UgPSB7IGNvbW1pdG1lbnRTaGFyZTogYml0Z29Ub1VzZXJDb21taXRtZW50U2hhcmUgfTtcbiAgICAgIGF3YWl0IG5vY2tFeGNoYW5nZUNvbW1pdG1lbnRzKHtcbiAgICAgICAgd2FsbGV0SWQ6IHdhbGxldC5pZCgpLFxuICAgICAgICB0eFJlcXVlc3RJZDogdHhSZXF1ZXN0LnR4UmVxdWVzdElkLFxuICAgICAgICByZXNwb25zZTogZXhjaGFuZ2VDb21taXRSZXNwb25zZSxcbiAgICAgICAgYXBpTW9kZTogJ2Z1bGwnLFxuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBhZnRlckVhY2goYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgdHhSZXF1ZXN0Lm1lc3NhZ2VzIVswXS5zaWduYXR1cmVTaGFyZXMgPSBbXTtcbiAgICB9KTtcblxuICAgIGl0KCdzaWduVHhSZXF1ZXN0IHNob3VsZCBzdWNjZWVkIHdpdGggdHhSZXF1ZXN0IG9iamVjdCBhcyBpbnB1dCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHNpZ25lZFR4UmVxdWVzdCA9IGF3YWl0IHRzc1V0aWxzLnNpZ25UeFJlcXVlc3RGb3JNZXNzYWdlKHtcbiAgICAgICAgbWVzc2FnZVJhdyxcbiAgICAgICAgYnVmZmVyVG9TaWduLFxuICAgICAgICB0eFJlcXVlc3QsXG4gICAgICAgIHBydjogSlNPTi5zdHJpbmdpZnkodmFsaWRVc2VyU2lnbmluZ01hdGVyaWFsKSxcbiAgICAgICAgcmVxSWQsXG4gICAgICB9KTtcbiAgICAgIHNpZ25lZFR4UmVxdWVzdC5tZXNzYWdlcyEuc2hvdWxkLmRlZXBFcXVhbCh0eFJlcXVlc3QubWVzc2FnZXMpO1xuXG4gICAgICBzYW5kYm94LnZlcmlmeUFuZFJlc3RvcmUoKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaWduVHhSZXF1ZXN0IHNob3VsZCBzdWNjZWVkIHdpdGggdHhSZXF1ZXN0IGlkIGFzIGlucHV0JywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgZ2V0VHhSZXF1ZXN0ID0gc2FuZGJveC5zdHViKHRzc1V0aWxzLCAnZ2V0VHhSZXF1ZXN0Jyk7XG4gICAgICBnZXRUeFJlcXVlc3QucmVzb2x2ZXModHhSZXF1ZXN0KTtcbiAgICAgIGdldFR4UmVxdWVzdC5jYWxsZWRXaXRoKHR4UmVxdWVzdElkKTtcblxuICAgICAgY29uc3Qgc2lnbmVkVHhSZXF1ZXN0ID0gYXdhaXQgdHNzVXRpbHMuc2lnblR4UmVxdWVzdEZvck1lc3NhZ2Uoe1xuICAgICAgICB0eFJlcXVlc3Q6IHR4UmVxdWVzdElkLFxuICAgICAgICBwcnY6IEpTT04uc3RyaW5naWZ5KHZhbGlkVXNlclNpZ25pbmdNYXRlcmlhbCksXG4gICAgICAgIHJlcUlkLFxuICAgICAgICBtZXNzYWdlUmF3LFxuICAgICAgICBidWZmZXJUb1NpZ24sXG4gICAgICB9KTtcbiAgICAgIHNpZ25lZFR4UmVxdWVzdC5tZXNzYWdlcyEuc2hvdWxkLmRlZXBFcXVhbCh0eFJlcXVlc3QubWVzc2FnZXMpO1xuXG4gICAgICBzYW5kYm94LnZlcmlmeUFuZFJlc3RvcmUoKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ3ByZWJ1aWxkVHhXaXRoSW50ZW50OicsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICBpdCgnc2hvdWxkIGJ1aWxkIHNpbmdsZSByZWNpcGllbnQgdHgnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBub2NrZWRDcmVhdGVUeCA9IGF3YWl0IG5vY2tDcmVhdGVUeFJlcXVlc3Qoe1xuICAgICAgICB3YWxsZXRJZDogd2FsbGV0LmlkKCksXG4gICAgICAgIHJlcXVlc3RCb2R5OiB7XG4gICAgICAgICAgYXBpVmVyc2lvbjogJ2xpdGUnLFxuICAgICAgICAgIGludGVudDoge1xuICAgICAgICAgICAgaW50ZW50VHlwZTogJ3BheW1lbnQnLFxuICAgICAgICAgICAgcmVjaXBpZW50czogW1xuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgYWRkcmVzczoge1xuICAgICAgICAgICAgICAgICAgYWRkcmVzczogJ3JlY2lwaWVudCcsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBhbW91bnQ6IHtcbiAgICAgICAgICAgICAgICAgIHZhbHVlOiAnMTAwMDAnLFxuICAgICAgICAgICAgICAgICAgc3ltYm9sOiAndHNvbCcsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgICAgLy8gZG9uJ3QgY2FyZSBhYm91dCB0aGUgYWN0dWFsIHJlc3BvbnNlIC0ganVzdCBuZWVkIHRvIG1ha2Ugc3VyZSByZXF1ZXN0IGJvZHkgbWF0Y2hlc1xuICAgICAgICByZXNwb25zZToge30sXG4gICAgICB9KTtcblxuICAgICAgYXdhaXQgdHNzVXRpbHMucHJlYnVpbGRUeFdpdGhJbnRlbnQoe1xuICAgICAgICByZXFJZCxcbiAgICAgICAgcmVjaXBpZW50czogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGFkZHJlc3M6ICdyZWNpcGllbnQnLFxuICAgICAgICAgICAgYW1vdW50OiAnMTAwMDAnLFxuICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICAgIGludGVudFR5cGU6ICdwYXltZW50JyxcbiAgICAgIH0pO1xuXG4gICAgICBub2NrZWRDcmVhdGVUeC5pc0RvbmUoKS5zaG91bGQuYmUudHJ1ZSgpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBidWlsZCBtdWx0aXBsZSByZWNpcGllbnRzIHdpdGggbWVtbyB0eCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IG5vY2tlZENyZWF0ZVR4ID0gYXdhaXQgbm9ja0NyZWF0ZVR4UmVxdWVzdCh7XG4gICAgICAgIHdhbGxldElkOiB3YWxsZXQuaWQoKSxcbiAgICAgICAgcmVxdWVzdEJvZHk6IHtcbiAgICAgICAgICBhcGlWZXJzaW9uOiAnbGl0ZScsXG4gICAgICAgICAgaW50ZW50OiB7XG4gICAgICAgICAgICBpbnRlbnRUeXBlOiAncGF5bWVudCcsXG4gICAgICAgICAgICByZWNpcGllbnRzOiBbXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBhZGRyZXNzOiB7XG4gICAgICAgICAgICAgICAgICBhZGRyZXNzOiAncmVjaXBpZW50MScsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBhbW91bnQ6IHtcbiAgICAgICAgICAgICAgICAgIHZhbHVlOiAnMTAwMDAnLFxuICAgICAgICAgICAgICAgICAgc3ltYm9sOiAndHNvbCcsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGFkZHJlc3M6IHtcbiAgICAgICAgICAgICAgICAgIGFkZHJlc3M6ICdyZWNpcGllbnQyJyxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGFtb3VudDoge1xuICAgICAgICAgICAgICAgICAgdmFsdWU6ICcyMDAwMCcsXG4gICAgICAgICAgICAgICAgICBzeW1ib2w6ICd0c29sJyxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIG1lbW86ICdtZW1vJyxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgICAvLyBkb24ndCBjYXJlIGFib3V0IHRoZSBhY3R1YWwgcmVzcG9uc2UgLSBqdXN0IG5lZWQgdG8gbWFrZSBzdXJlIHJlcXVlc3QgYm9keSBtYXRjaGVzXG4gICAgICAgIHJlc3BvbnNlOiB7fSxcbiAgICAgIH0pO1xuXG4gICAgICBhd2FpdCB0c3NVdGlscy5wcmVidWlsZFR4V2l0aEludGVudCh7XG4gICAgICAgIHJlcUlkLFxuICAgICAgICByZWNpcGllbnRzOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgYWRkcmVzczogJ3JlY2lwaWVudDEnLFxuICAgICAgICAgICAgYW1vdW50OiAnMTAwMDAnLFxuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgYWRkcmVzczogJ3JlY2lwaWVudDInLFxuICAgICAgICAgICAgYW1vdW50OiAnMjAwMDAnLFxuICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICAgIG1lbW86IHtcbiAgICAgICAgICB2YWx1ZTogJ21lbW8nLFxuICAgICAgICAgIHR5cGU6ICd0ZXh0JyxcbiAgICAgICAgfSxcbiAgICAgICAgaW50ZW50VHlwZTogJ3BheW1lbnQnLFxuICAgICAgfSk7XG5cbiAgICAgIG5vY2tlZENyZWF0ZVR4LmlzRG9uZSgpLnNob3VsZC5iZS50cnVlKCk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdkZWxldGUgU2lnbmF0dXJlU2hhcmU6JywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgIGl0KCdzaG91bGQgc3VjY2VlZCB0byBkZWxldGUgU2lnbmF0dXJlIFNoYXJlJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3Qgc2lnbmF0dXJlU2hhcmUgPSB7IGZyb206ICd1c2VyJywgdG86ICdiaXRnbycsIHNoYXJlOiAnMTI4Ynl0ZXN0cmluZycgfSBhcyBTaWduYXR1cmVTaGFyZVJlY29yZDtcbiAgICAgIGNvbnN0IG5vY2sgPSBhd2FpdCBub2NrRGVsZXRlU2lnbmF0dXJlU2hhcmUoe1xuICAgICAgICB3YWxsZXRJZDogd2FsbGV0LmlkKCksXG4gICAgICAgIHR4UmVxdWVzdElkOiB0eFJlcXVlc3QudHhSZXF1ZXN0SWQsXG4gICAgICAgIHNpZ25hdHVyZVNoYXJlLFxuICAgICAgfSk7XG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRzc1V0aWxzLmRlbGV0ZVNpZ25hdHVyZVNoYXJlcyh0eFJlcXVlc3QudHhSZXF1ZXN0SWQpO1xuICAgICAgcmVzcG9uc2Uuc2hvdWxkLmRlZXBFcXVhbChbc2lnbmF0dXJlU2hhcmVdKTtcbiAgICAgIHJlc3BvbnNlLnNob3VsZC5sZW5ndGgoMSk7XG4gICAgICBub2NrLmlzRG9uZSgpLnNob3VsZC5lcXVhbCh0cnVlKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgY2FsbCBzZXRSZXF1ZXN0VHJhY2VyJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3Qgc2lnbmF0dXJlU2hhcmUgPSB7IGZyb206ICd1c2VyJywgdG86ICdiaXRnbycsIHNoYXJlOiAnMTI4Ynl0ZXN0cmluZycgfSBhcyBTaWduYXR1cmVTaGFyZVJlY29yZDtcbiAgICAgIGNvbnN0IG5vY2sgPSBhd2FpdCBub2NrRGVsZXRlU2lnbmF0dXJlU2hhcmUoe1xuICAgICAgICB3YWxsZXRJZDogd2FsbGV0LmlkKCksXG4gICAgICAgIHR4UmVxdWVzdElkOiB0eFJlcXVlc3QudHhSZXF1ZXN0SWQsXG4gICAgICAgIHNpZ25hdHVyZVNoYXJlLFxuICAgICAgfSk7XG4gICAgICBjb25zdCByZXFJZCA9IG5ldyBSZXF1ZXN0VHJhY2VyKCk7XG4gICAgICBjb25zdCBzZXRSZXF1ZXN0VHJhY2VyU3B5ID0gc2lub24uc3B5KGJpdGdvLCAnc2V0UmVxdWVzdFRyYWNlcicpO1xuICAgICAgc2V0UmVxdWVzdFRyYWNlclNweS53aXRoQXJncyhyZXFJZCk7XG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRzc1V0aWxzLmRlbGV0ZVNpZ25hdHVyZVNoYXJlcyh0eFJlcXVlc3QudHhSZXF1ZXN0SWQsIHJlcUlkKTtcbiAgICAgIHJlc3BvbnNlLnNob3VsZC5kZWVwRXF1YWwoW3NpZ25hdHVyZVNoYXJlXSk7XG4gICAgICByZXNwb25zZS5zaG91bGQubGVuZ3RoKDEpO1xuICAgICAgbm9jay5pc0RvbmUoKS5zaG91bGQuZXF1YWwodHJ1ZSk7XG4gICAgICBzaW5vbi5hc3NlcnQuY2FsbGVkT25jZShzZXRSZXF1ZXN0VHJhY2VyU3B5KTtcbiAgICAgIHNldFJlcXVlc3RUcmFjZXJTcHkucmVzdG9yZSgpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnc2VuZFR4UmVxdWVzdDonLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgaXQoJ3Nob3VsZCBzdWNjZWVkIHRvIHNlbmQgdHggcmVxdWVzdCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IG5vY2sgPSBhd2FpdCBub2NrU2VuZFR4UmVxdWVzdCh7XG4gICAgICAgIGNvaW46IGNvaW5OYW1lLFxuICAgICAgICB3YWxsZXRJZDogd2FsbGV0LmlkKCksXG4gICAgICAgIHR4UmVxdWVzdElkOiB0eFJlcXVlc3QudHhSZXF1ZXN0SWQsXG4gICAgICB9KTtcbiAgICAgIGF3YWl0IHRzc1V0aWxzLnNlbmRUeFJlcXVlc3QodHhSZXF1ZXN0LnR4UmVxdWVzdElkKS5zaG91bGQuYmUuZnVsZmlsbGVkKCk7XG4gICAgICBub2NrLmlzRG9uZSgpLnNob3VsZC5lcXVhbCh0cnVlKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgY2FsbCBzZXRSZXF1ZXN0VHJhY2VyJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3Qgbm9jayA9IGF3YWl0IG5vY2tTZW5kVHhSZXF1ZXN0KHtcbiAgICAgICAgY29pbjogY29pbk5hbWUsXG4gICAgICAgIHdhbGxldElkOiB3YWxsZXQuaWQoKSxcbiAgICAgICAgdHhSZXF1ZXN0SWQ6IHR4UmVxdWVzdC50eFJlcXVlc3RJZCxcbiAgICAgIH0pO1xuICAgICAgY29uc3QgcmVxSWQgPSBuZXcgUmVxdWVzdFRyYWNlcigpO1xuICAgICAgY29uc3Qgc2V0UmVxdWVzdFRyYWNlclNweSA9IHNpbm9uLnNweShiaXRnbywgJ3NldFJlcXVlc3RUcmFjZXInKTtcbiAgICAgIHNldFJlcXVlc3RUcmFjZXJTcHkud2l0aEFyZ3MocmVxSWQpO1xuICAgICAgYXdhaXQgdHNzVXRpbHMuc2VuZFR4UmVxdWVzdCh0eFJlcXVlc3QudHhSZXF1ZXN0SWQsIHJlcUlkKS5zaG91bGQuYmUuZnVsZmlsbGVkKCk7XG4gICAgICBub2NrLmlzRG9uZSgpLnNob3VsZC5lcXVhbCh0cnVlKTtcbiAgICAgIHNpbm9uLmFzc2VydC5jYWxsZWRPbmNlKHNldFJlcXVlc3RUcmFjZXJTcHkpO1xuICAgICAgc2V0UmVxdWVzdFRyYWNlclNweS5yZXN0b3JlKCk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdjcmVhdGVVc2VyVG9CaXRnb0NvbW1pdG1lbnRTaGFyZScsIGZ1bmN0aW9uICgpIHtcbiAgICBpdCgnc2hvdWxkIGNyZWF0ZSBhIHZhbGlkIGNvbW1pdG1lbnRTaGFyZScsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHZhbHVlID0gJ3JhbmRvbXN0cmluZyc7XG4gICAgICBjb25zdCB2YWxpZFVzZXJUb0JpdGdvQ29tbWl0bWVudFNoYXJlID0ge1xuICAgICAgICBmcm9tOiBTaWduYXR1cmVTaGFyZVR5cGUuVVNFUixcbiAgICAgICAgdG86IFNpZ25hdHVyZVNoYXJlVHlwZS5CSVRHTyxcbiAgICAgICAgdHlwZTogQ29tbWl0bWVudFR5cGUuQ09NTUlUTUVOVCxcbiAgICAgICAgc2hhcmU6IHZhbHVlLFxuICAgICAgfTtcbiAgICAgIGNvbnN0IGNvbW1pdG1lbnRTaGFyZSA9IHRzc1V0aWxzLmNyZWF0ZVVzZXJUb0JpdGdvQ29tbWl0bWVudFNoYXJlKHZhbHVlKTtcbiAgICAgIGNvbW1pdG1lbnRTaGFyZS5zaG91bGQuZGVlcEVxdWFsKHZhbGlkVXNlclRvQml0Z29Db21taXRtZW50U2hhcmUpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnY3JlYXRlVXNlclRvQml0Z29FbmNyeXB0ZWRTaWduZXJTaGFyZScsIGZ1bmN0aW9uICgpIHtcbiAgICBpdCgnc2hvdWxkIGNyZWF0ZSBhIHZhbGlkIGVuY3J5cHRlZFNpZ25lclNoYXJlJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgdmFsdWUgPSAncmFuZG9tc3RyaW5nJztcbiAgICAgIGNvbnN0IHZhbGlkVXNlclRvQml0Z29FbmNyeXB0ZWRTaWduZXJTaGFyZSA9IHtcbiAgICAgICAgZnJvbTogU2lnbmF0dXJlU2hhcmVUeXBlLlVTRVIsXG4gICAgICAgIHRvOiBTaWduYXR1cmVTaGFyZVR5cGUuQklUR08sXG4gICAgICAgIHR5cGU6IEVuY3J5cHRlZFNpZ25lclNoYXJlVHlwZS5FTkNSWVBURURfU0lHTkVSX1NIQVJFLFxuICAgICAgICBzaGFyZTogdmFsdWUsXG4gICAgICB9O1xuICAgICAgY29uc3QgZW5jcnlwdGVkU2lnbmVyU2hhcmUgPSB0c3NVdGlscy5jcmVhdGVVc2VyVG9CaXRnb0VuY3J5cHRlZFNpZ25lclNoYXJlKHZhbHVlKTtcbiAgICAgIGVuY3J5cHRlZFNpZ25lclNoYXJlLnNob3VsZC5kZWVwRXF1YWwodmFsaWRVc2VyVG9CaXRnb0VuY3J5cHRlZFNpZ25lclNoYXJlKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ3N1cHBvcnRlZFR4UmVxdWVzdFZlcnNpb25zJywgZnVuY3Rpb24gKCkge1xuICAgIGl0KCdzaG91bGQgcmV0dXJuIGZ1bGwgZm9yIGN1c3RvZGlhbCB3YWxsZXRzJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgY3VzdG9kaWFsV2FsbGV0ID0gbmV3IFdhbGxldChiaXRnbywgYmFzZUNvaW4sIHsgbXVsdGlzaWdUeXBlOiAndHNzJywgdHlwZTogJ2N1c3RvZGlhbCcgfSk7XG4gICAgICBjb25zdCBjdXN0b2RpYWxUc3NVdGlscyA9IG5ldyBUc3NVdGlscyhiaXRnbywgYmFzZUNvaW4sIGN1c3RvZGlhbFdhbGxldCk7XG4gICAgICBjdXN0b2RpYWxUc3NVdGlscy5zdXBwb3J0ZWRUeFJlcXVlc3RWZXJzaW9ucygpLnNob3VsZC5kZWVwRXF1YWwoWydmdWxsJ10pO1xuICAgIH0pO1xuICAgIGl0KCdzaG91bGQgcmV0dXJuIGZ1bGwgZm9yIGNvbGQgd2FsbGV0cycsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGNvbGRXYWxsZXQgPSBuZXcgV2FsbGV0KGJpdGdvLCBiYXNlQ29pbiwgeyBtdWx0aXNpZ1R5cGU6ICd0c3MnLCB0eXBlOiAnY29sZCcgfSk7XG4gICAgICBjb25zdCBjb2xkV2FsbGV0VHNzVXRpbHMgPSBuZXcgVHNzVXRpbHMoYml0Z28sIGJhc2VDb2luLCBjb2xkV2FsbGV0KTtcbiAgICAgIGNvbGRXYWxsZXRUc3NVdGlscy5zdXBwb3J0ZWRUeFJlcXVlc3RWZXJzaW9ucygpLnNob3VsZC5kZWVwRXF1YWwoWydmdWxsJ10pO1xuICAgIH0pO1xuICAgIGl0KCdzaG91bGQgcmV0dXJuIGZ1bGwgYW5kIGxpdGUgZm9yIGhvdCB3YWxsZXRzJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgaG90V2FsbGV0ID0gbmV3IFdhbGxldChiaXRnbywgYmFzZUNvaW4sIHtcbiAgICAgICAgbXVsdGlzaWdUeXBlOiAndHNzJyxcbiAgICAgICAgbXVsdGlzaWdUeXBlVmVyc2lvbjogdW5kZWZpbmVkLFxuICAgICAgICB0eXBlOiAnaG90JyxcbiAgICAgIH0pO1xuICAgICAgY29uc3QgaG90VHNzVXRpbHMgPSBuZXcgVHNzVXRpbHMoYml0Z28sIGJhc2VDb2luLCBob3RXYWxsZXQpO1xuICAgICAgY29uc3Qgc3VwcG9ydGVkVHhSZXF1ZXN0VmVyc2lvbnMgPSBob3RUc3NVdGlscy5zdXBwb3J0ZWRUeFJlcXVlc3RWZXJzaW9ucygpO1xuICAgICAgc3VwcG9ydGVkVHhSZXF1ZXN0VmVyc2lvbnMuc2hvdWxkLmRlZXBFcXVhbChbJ2xpdGUnLCAnZnVsbCddKTtcbiAgICB9KTtcbiAgICBpdCgnc2hvdWxkIHJldHVybiBvbmx5IGZ1bGwgZm9yIGhvdCBNUEN2MiB3YWxsZXRzJywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgaG90TVBDdjJXYWxsZXQgPSBuZXcgV2FsbGV0KGJpdGdvLCBiYXNlQ29pbiwge1xuICAgICAgICBtdWx0aXNpZ1R5cGU6ICd0c3MnLFxuICAgICAgICBtdWx0aXNpZ1R5cGVWZXJzaW9uOiAnTVBDdjInLFxuICAgICAgICB0eXBlOiAnaG90JyxcbiAgICAgIH0pO1xuICAgICAgY29uc3QgbXBjdjJUc3NVdGlscyA9IG5ldyBFRERTQVV0aWxzLkVkZHNhTVBDdjJVdGlscyhiaXRnbywgYmFzZUNvaW4sIGhvdE1QQ3YyV2FsbGV0KTtcbiAgICAgIG1wY3YyVHNzVXRpbHMuc3VwcG9ydGVkVHhSZXF1ZXN0VmVyc2lvbnMoKS5zaG91bGQuZGVlcEVxdWFsKFsnZnVsbCddKTtcbiAgICB9KTtcbiAgICBpdCgnc2hvdWxkIHJldHVybiBlbXB0eSBmb3IgdHJhZGluZyB3YWxsZXRzJywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgdHJhZGluZ1dhbGxldHMgPSBuZXcgV2FsbGV0KGJpdGdvLCBiYXNlQ29pbiwgeyBtdWx0aXNpZ1R5cGU6ICd0c3MnLCB0eXBlOiAndHJhZGluZycgfSk7XG4gICAgICBjb25zdCB0cmFkaW5nV2FsbGV0VHNzVXRpbHMgPSBuZXcgVHNzVXRpbHMoYml0Z28sIGJhc2VDb2luLCB0cmFkaW5nV2FsbGV0cyk7XG4gICAgICBjb25zdCBzdXBwb3J0ZWRUeFJlcXVlc3RWZXJzaW9ucyA9IHRyYWRpbmdXYWxsZXRUc3NVdGlscy5zdXBwb3J0ZWRUeFJlcXVlc3RWZXJzaW9ucygpO1xuICAgICAgc3VwcG9ydGVkVHhSZXF1ZXN0VmVyc2lvbnMuc2hvdWxkLmRlZXBFcXVhbChbXSk7XG4gICAgfSk7XG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gZW1wdHkgZm9yIG5vbi10c3Mgd2FsbGV0cycsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IG5vblRzc1dhbGxldERhdGEgPSB7IGNvaW46ICdidGMnLCBtdWx0aXNpZ1R5cGU6ICdvbmNoYWluJyB9O1xuICAgICAgY29uc3QgYnRjQ29pbiA9IGJpdGdvLmNvaW4oJ3RidGMnKTtcbiAgICAgIGNvbnN0IG5vblRzc1dhbGxldCA9IG5ldyBXYWxsZXQoYml0Z28sIGJ0Y0NvaW4sIG5vblRzc1dhbGxldERhdGEpO1xuICAgICAgY29uc3Qgbm9uVHNzV2FsbGV0VHNzVXRpbHMgPSBuZXcgVHNzVXRpbHMoYml0Z28sIGJ0Y0NvaW4sIG5vblRzc1dhbGxldCk7XG4gICAgICBub25Uc3NXYWxsZXRUc3NVdGlscy5zdXBwb3J0ZWRUeFJlcXVlc3RWZXJzaW9ucygpLnNob3VsZC5kZWVwRXF1YWwoW10pO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnaXNQZW5kaW5nQXBwcm92YWxUeFJlcXVlc3RGdWxsJywgKCkgPT4ge1xuICAgIGl0KCdzaG91bGQgcmV0dXJuIHRydWUgZm9yIGZ1bGwgYXBpVmVyc2lvbiBhbmQgcGVuZGluZ0FwcHJvdmFsIHN0YXRlJywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgdHhSZXF1ZXN0ID0ge1xuICAgICAgICBhcGlWZXJzaW9uOiAnZnVsbCcsXG4gICAgICAgIHN0YXRlOiAncGVuZGluZ0FwcHJvdmFsJyxcbiAgICAgIH0gYXMgVHhSZXF1ZXN0O1xuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdHNzVXRpbHMuaXNQZW5kaW5nQXBwcm92YWxUeFJlcXVlc3RGdWxsKHR4UmVxdWVzdCk7XG4gICAgICByZXN1bHQuc2hvdWxkLmJlLnRydWUoKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgcmV0dXJuIGZhbHNlIGZvciBub24tZnVsbCBhcGlWZXJzaW9uJywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgdHhSZXF1ZXN0ID0ge1xuICAgICAgICBhcGlWZXJzaW9uOiAnbGl0ZScsXG4gICAgICAgIHN0YXRlOiAncGVuZGluZ0FwcHJvdmFsJyxcbiAgICAgIH0gYXMgVHhSZXF1ZXN0O1xuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdHNzVXRpbHMuaXNQZW5kaW5nQXBwcm92YWxUeFJlcXVlc3RGdWxsKHR4UmVxdWVzdCk7XG4gICAgICByZXN1bHQuc2hvdWxkLmJlLmZhbHNlKCk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHJldHVybiBmYWxzZSBmb3Igbm9uLXBlbmRpbmdBcHByb3ZhbCBzdGF0ZScsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IHR4UmVxdWVzdCA9IHtcbiAgICAgICAgYXBpVmVyc2lvbjogJ2Z1bGwnLFxuICAgICAgICBzdGF0ZTogJ3BlbmRpbmdEZWxpdmVyeScsXG4gICAgICB9IGFzIFR4UmVxdWVzdDtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRzc1V0aWxzLmlzUGVuZGluZ0FwcHJvdmFsVHhSZXF1ZXN0RnVsbCh0eFJlcXVlc3QpO1xuICAgICAgcmVzdWx0LnNob3VsZC5iZS5mYWxzZSgpO1xuICAgIH0pO1xuICB9KTtcblxuICAvLyAjcmVnaW9uIE5vY2sgaGVscGVyc1xuICBhc3luYyBmdW5jdGlvbiBnZW5lcmF0ZUJpdGdvS2V5Y2hhaW4ocGFyYW1zOiB7XG4gICAgY29pbjogc3RyaW5nO1xuICAgIHVzZXJLZXlTaGFyZTogS2V5U2hhcmU7XG4gICAgYmFja3VwS2V5U2hhcmU6IEtleVNoYXJlO1xuICAgIGJpdGdvS2V5U2hhcmU6IEtleVNoYXJlO1xuICAgIHVzZXJHcGdLZXk6IG9wZW5wZ3AuU2VyaWFsaXplZEtleVBhaXI8c3RyaW5nPjtcbiAgICBiYWNrdXBHcGdLZXk6IG9wZW5wZ3AuU2VyaWFsaXplZEtleVBhaXI8c3RyaW5nPjtcbiAgICBiaXRnb0dwZ0tleTogb3BlbnBncC5TZXJpYWxpemVkS2V5UGFpcjxzdHJpbmc+O1xuICB9KTogUHJvbWlzZTxLZXljaGFpbj4ge1xuICAgIGNvbnN0IGJpdGdvQ29tYmluZWQgPSBNUEMua2V5Q29tYmluZShwYXJhbXMuYml0Z29LZXlTaGFyZS51U2hhcmUsIFtcbiAgICAgIHBhcmFtcy51c2VyS2V5U2hhcmUueVNoYXJlc1szXSxcbiAgICAgIHBhcmFtcy5iYWNrdXBLZXlTaGFyZS55U2hhcmVzWzNdLFxuICAgIF0pO1xuICAgIGNvbnN0IHVzZXJHcGdLZXlBY3R1YWwgPSBhd2FpdCBvcGVucGdwLnJlYWRLZXkoeyBhcm1vcmVkS2V5OiBwYXJhbXMudXNlckdwZ0tleS5wdWJsaWNLZXkgfSk7XG4gICAgY29uc3QgYmFja3VwR3BnS2V5QWN0dWFsID0gYXdhaXQgb3BlbnBncC5yZWFkS2V5KHsgYXJtb3JlZEtleTogcGFyYW1zLmJhY2t1cEdwZ0tleS5wdWJsaWNLZXkgfSk7XG5cbiAgICBjb25zdCBiaXRnb1RvVXNlck1lc3NhZ2UgPSBhd2FpdCBvcGVucGdwLmNyZWF0ZU1lc3NhZ2Uoe1xuICAgICAgdGV4dDogQnVmZmVyLmNvbmNhdChbXG4gICAgICAgIEJ1ZmZlci5mcm9tKHBhcmFtcy5iaXRnb0tleVNoYXJlLnlTaGFyZXNbMV0udSwgJ2hleCcpLFxuICAgICAgICBCdWZmZXIuZnJvbShwYXJhbXMuYml0Z29LZXlTaGFyZS55U2hhcmVzWzFdLmNoYWluY29kZSwgJ2hleCcpLFxuICAgICAgXSkudG9TdHJpbmcoJ2hleCcpLFxuICAgIH0pO1xuICAgIGNvbnN0IGVuY3J5cHRlZEJpdGdvVG9Vc2VyTWVzc2FnZSA9IGF3YWl0IG9wZW5wZ3AuZW5jcnlwdCh7XG4gICAgICBtZXNzYWdlOiBiaXRnb1RvVXNlck1lc3NhZ2UsXG4gICAgICBlbmNyeXB0aW9uS2V5czogW3VzZXJHcGdLZXlBY3R1YWwudG9QdWJsaWMoKV0sXG4gICAgICBmb3JtYXQ6ICdhcm1vcmVkJyxcbiAgICB9KTtcblxuICAgIGNvbnN0IGJpdGdvVG9CYWNrdXBNZXNzYWdlID0gYXdhaXQgb3BlbnBncC5jcmVhdGVNZXNzYWdlKHtcbiAgICAgIHRleHQ6IEJ1ZmZlci5jb25jYXQoW1xuICAgICAgICBCdWZmZXIuZnJvbShwYXJhbXMuYml0Z29LZXlTaGFyZS55U2hhcmVzWzJdLnUsICdoZXgnKSxcbiAgICAgICAgQnVmZmVyLmZyb20ocGFyYW1zLmJpdGdvS2V5U2hhcmUueVNoYXJlc1syXS5jaGFpbmNvZGUsICdoZXgnKSxcbiAgICAgIF0pLnRvU3RyaW5nKCdoZXgnKSxcbiAgICB9KTtcbiAgICBjb25zdCBlbmNyeXB0ZWRCaXRnb1RvQmFja3VwTWVzc2FnZSA9IGF3YWl0IG9wZW5wZ3AuZW5jcnlwdCh7XG4gICAgICBtZXNzYWdlOiBiaXRnb1RvQmFja3VwTWVzc2FnZSxcbiAgICAgIGVuY3J5cHRpb25LZXlzOiBbYmFja3VwR3BnS2V5QWN0dWFsLnRvUHVibGljKCldLFxuICAgICAgZm9ybWF0OiAnYXJtb3JlZCcsXG4gICAgfSk7XG5cbiAgICBjb25zdCBiaXRnb0tleWNoYWluOiBLZXljaGFpbiA9IHtcbiAgICAgIGlkOiAnMycsXG4gICAgICBwdWI6ICcnLFxuICAgICAgY29tbW9uS2V5Y2hhaW46IGJpdGdvQ29tYmluZWQucFNoYXJlLnkgKyBiaXRnb0NvbWJpbmVkLnBTaGFyZS5jaGFpbmNvZGUsXG4gICAgICBrZXlTaGFyZXM6IFtcbiAgICAgICAge1xuICAgICAgICAgIGZyb206ICdiaXRnbycsXG4gICAgICAgICAgdG86ICd1c2VyJyxcbiAgICAgICAgICBwdWJsaWNTaGFyZTogcGFyYW1zLmJpdGdvS2V5U2hhcmUueVNoYXJlc1sxXS55ICsgcGFyYW1zLmJpdGdvS2V5U2hhcmUueVNoYXJlc1sxXS5jaGFpbmNvZGUsXG4gICAgICAgICAgcHJpdmF0ZVNoYXJlOiBlbmNyeXB0ZWRCaXRnb1RvVXNlck1lc3NhZ2UudG9TdHJpbmcoKSxcbiAgICAgICAgICB2c3NQcm9vZjogcGFyYW1zLmJpdGdvS2V5U2hhcmUueVNoYXJlc1sxXS52LFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgZnJvbTogJ2JpdGdvJyxcbiAgICAgICAgICB0bzogJ2JhY2t1cCcsXG4gICAgICAgICAgcHVibGljU2hhcmU6IHBhcmFtcy5iaXRnb0tleVNoYXJlLnlTaGFyZXNbMl0ueSArIHBhcmFtcy5iaXRnb0tleVNoYXJlLnlTaGFyZXNbMl0uY2hhaW5jb2RlLFxuICAgICAgICAgIHByaXZhdGVTaGFyZTogZW5jcnlwdGVkQml0Z29Ub0JhY2t1cE1lc3NhZ2UudG9TdHJpbmcoKSxcbiAgICAgICAgICB2c3NQcm9vZjogcGFyYW1zLmJpdGdvS2V5U2hhcmUueVNoYXJlc1syXS52LFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICAgIHR5cGU6ICd0c3MnLFxuICAgIH07XG5cbiAgICBjb25zdCB1c2VyS2V5SWQgPSB1c2VyR3BnS2V5QWN0dWFsLmtleVBhY2tldC5nZXRGaW5nZXJwcmludCgpO1xuICAgIGNvbnN0IGJhY2t1cEtleUlkID0gYmFja3VwR3BnS2V5QWN0dWFsLmtleVBhY2tldC5nZXRGaW5nZXJwcmludCgpO1xuICAgIGNvbnN0IGJpdGdvVG9Vc2VyUHVibGljU2hhcmUgPVxuICAgICAgQnVmZmVyLmZyb20oXG4gICAgICAgIGF3YWl0IHNvZGl1bS5jcnlwdG9fc2NhbGFybXVsdF9lZDI1NTE5X2Jhc2Vfbm9jbGFtcChCdWZmZXIuZnJvbShwYXJhbXMuYml0Z29LZXlTaGFyZS55U2hhcmVzWzFdLnUsICdoZXgnKSlcbiAgICAgICkudG9TdHJpbmcoJ2hleCcpICsgcGFyYW1zLmJpdGdvS2V5U2hhcmUueVNoYXJlc1sxXS5jaGFpbmNvZGU7XG4gICAgY29uc3QgYml0Z29Ub0JhY2t1cFB1YmxpY1NoYXJlID1cbiAgICAgIEJ1ZmZlci5mcm9tKFxuICAgICAgICBhd2FpdCBzb2RpdW0uY3J5cHRvX3NjYWxhcm11bHRfZWQyNTUxOV9iYXNlX25vY2xhbXAoQnVmZmVyLmZyb20ocGFyYW1zLmJpdGdvS2V5U2hhcmUueVNoYXJlc1syXS51LCAnaGV4JykpXG4gICAgICApLnRvU3RyaW5nKCdoZXgnKSArIHBhcmFtcy5iaXRnb0tleVNoYXJlLnlTaGFyZXNbMl0uY2hhaW5jb2RlO1xuXG4gICAgYml0Z29LZXljaGFpbi53YWxsZXRIU01HUEdQdWJsaWNLZXlTaWdzID0gYXdhaXQgY3JlYXRlV2FsbGV0U2lnbmF0dXJlcyhcbiAgICAgIHBhcmFtcy5iaXRnb0dwZ0tleS5wcml2YXRlS2V5LFxuICAgICAgcGFyYW1zLnVzZXJHcGdLZXkucHVibGljS2V5LFxuICAgICAgcGFyYW1zLmJhY2t1cEdwZ0tleS5wdWJsaWNLZXksXG4gICAgICBbXG4gICAgICAgIHsgbmFtZTogJ2NvbW1vbktleWNoYWluJywgdmFsdWU6IGJpdGdvQ29tYmluZWQucFNoYXJlLnkgKyBiaXRnb0NvbWJpbmVkLnBTaGFyZS5jaGFpbmNvZGUgfSxcbiAgICAgICAgeyBuYW1lOiAndXNlcktleUlkJywgdmFsdWU6IHVzZXJLZXlJZCB9LFxuICAgICAgICB7IG5hbWU6ICdiYWNrdXBLZXlJZCcsIHZhbHVlOiBiYWNrdXBLZXlJZCB9LFxuICAgICAgICB7IG5hbWU6ICdiaXRnb1RvVXNlclB1YmxpY1NoYXJlJywgdmFsdWU6IGJpdGdvVG9Vc2VyUHVibGljU2hhcmUgfSxcbiAgICAgICAgeyBuYW1lOiAnYml0Z29Ub0JhY2t1cFB1YmxpY1NoYXJlJywgdmFsdWU6IGJpdGdvVG9CYWNrdXBQdWJsaWNTaGFyZSB9LFxuICAgICAgXVxuICAgICk7XG5cbiAgICByZXR1cm4gYml0Z29LZXljaGFpbjtcbiAgfVxuXG4gIGFzeW5jIGZ1bmN0aW9uIG5vY2tCaXRnb0tleWNoYWluKHBhcmFtczoge1xuICAgIGNvaW46IHN0cmluZztcbiAgICB1c2VyS2V5U2hhcmU6IEtleVNoYXJlO1xuICAgIGJhY2t1cEtleVNoYXJlOiBLZXlTaGFyZTtcbiAgICBiaXRnb0tleVNoYXJlOiBLZXlTaGFyZTtcbiAgICB1c2VyR3BnS2V5OiBvcGVucGdwLlNlcmlhbGl6ZWRLZXlQYWlyPHN0cmluZz47XG4gICAgYmFja3VwR3BnS2V5OiBvcGVucGdwLlNlcmlhbGl6ZWRLZXlQYWlyPHN0cmluZz47XG4gICAgYml0Z29HcGdLZXk6IG9wZW5wZ3AuU2VyaWFsaXplZEtleVBhaXI8c3RyaW5nPjtcbiAgfSk6IFByb21pc2U8S2V5Y2hhaW4+IHtcbiAgICBjb25zdCBiaXRnb0tleWNoYWluID0gYXdhaXQgZ2VuZXJhdGVCaXRnb0tleWNoYWluKHBhcmFtcyk7XG5cbiAgICBub2NrKGJnVXJsKVxuICAgICAgLnBvc3QoYC9hcGkvdjIvJHtwYXJhbXMuY29pbn0va2V5YCwgXy5tYXRjaGVzKHsga2V5VHlwZTogJ3RzcycsIHNvdXJjZTogJ2JpdGdvJyB9KSlcbiAgICAgIC5yZXBseSgyMDAsIGJpdGdvS2V5Y2hhaW4pO1xuXG4gICAgcmV0dXJuIGJpdGdvS2V5Y2hhaW47XG4gIH1cblxuICBhc3luYyBmdW5jdGlvbiBub2NrVXNlcktleWNoYWluKHBhcmFtczogeyBjb2luOiBzdHJpbmcgfSk6IFByb21pc2U8S2V5Y2hhaW4+IHtcbiAgICBjb25zdCB1c2VyS2V5Y2hhaW46IEtleWNoYWluID0ge1xuICAgICAgaWQ6ICcxJyxcbiAgICAgIHB1YjogJycsXG4gICAgICB0eXBlOiAndHNzJyxcbiAgICB9O1xuXG4gICAgbm9jaygnaHR0cHM6Ly9iaXRnby5mYWtldXJsJylcbiAgICAgIC5wb3N0KGAvYXBpL3YyLyR7cGFyYW1zLmNvaW59L2tleWAsIF8ubWF0Y2hlcyh7IGtleVR5cGU6ICd0c3MnLCBzb3VyY2U6ICd1c2VyJyB9KSlcbiAgICAgIC5yZXBseSgyMDAsIHVzZXJLZXljaGFpbik7XG5cbiAgICByZXR1cm4gdXNlcktleWNoYWluO1xuICB9XG5cbiAgYXN5bmMgZnVuY3Rpb24gbm9ja0JhY2t1cEtleWNoYWluKHBhcmFtczogeyBjb2luOiBzdHJpbmcgfSk6IFByb21pc2U8S2V5Y2hhaW4+IHtcbiAgICBjb25zdCBiYWNrdXBLZXljaGFpbjogS2V5Y2hhaW4gPSB7XG4gICAgICBpZDogJzInLFxuICAgICAgcHViOiAnJyxcbiAgICAgIHR5cGU6ICd0c3MnLFxuICAgIH07XG5cbiAgICBub2NrKCdodHRwczovL2JpdGdvLmZha2V1cmwnKVxuICAgICAgLnBvc3QoYC9hcGkvdjIvJHtwYXJhbXMuY29pbn0va2V5YCwgXy5tYXRjaGVzKHsga2V5VHlwZTogJ3RzcycsIHNvdXJjZTogJ2JhY2t1cCcgfSkpXG4gICAgICAucmVwbHkoMjAwLCBiYWNrdXBLZXljaGFpbik7XG5cbiAgICByZXR1cm4gYmFja3VwS2V5Y2hhaW47XG4gIH1cblxuICBkZXNjcmliZSgnZ2V0UHVibGljS2V5RnJvbUNvbW1vbktleWNoYWluJywgZnVuY3Rpb24gKCkge1xuICAgIC8vIDMyLWJ5dGUgZWQyNTUxOSBwdWJsaWMga2V5IGFzIGhleCAoNjQgY2hhcnMpICsgMzItYnl0ZSBjaGFpbmNvZGUgKDY0IGNoYXJzKSA9IDEyOCBjaGFyc1xuICAgIGNvbnN0IHB1YkhleCA9ICdhMzA0NzMzYzE2Y2M4MjFmZTE3MWQ1YzdkYmQ3Mjc2ZmQ5MGRlYWU4MDhiNzU1M2QxN2ExZTU1ZTRhNzZiMjcwJztcbiAgICBjb25zdCBjaGFpbmNvZGUgPSAnOWQ5MWMyZTYzNTMyMDJjZjYxZjhmMjc1MTU4YjM0NjhlOWEwMGY3ODcyZmMyZmQzMTBiNzJjZDAyNmUyZTJmOSc7XG4gICAgY29uc3QgY29tbW9uS2V5Y2hhaW4gPSBwdWJIZXggKyBjaGFpbmNvZGU7XG5cbiAgICBpdCgnc2hvdWxkIGRlY29kZSB0aGUgMzItYnl0ZSBwdWJsaWMga2V5IGZyb20gYSAxMjgtY2hhciBjb21tb25LZXljaGFpbicsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbW1vbktleWNoYWluLmxlbmd0aC5zaG91bGQuZXF1YWwoMTI4KTtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IFRzc1V0aWxzLmdldFB1YmxpY0tleUZyb21Db21tb25LZXljaGFpbihjb21tb25LZXljaGFpbik7XG4gICAgICByZXN1bHQuc2hvdWxkLmVxdWFsKCdCeU1QZVZ4czdlOHpHZWN1OG4xTTQzTXE5cWt4QlN5cE5Od0hlRXUyTjZ2YicpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCB0aHJvdyBmb3IgYW4gaW52YWxpZCBjb21tb25LZXljaGFpbiBsZW5ndGgnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBzaG91bGQudGhyb3dzKFxuICAgICAgICAoKSA9PiBUc3NVdGlscy5nZXRQdWJsaWNLZXlGcm9tQ29tbW9uS2V5Y2hhaW4oJ2FiY2QnKSxcbiAgICAgICAgL0ludmFsaWQgY29tbW9uS2V5Y2hhaW4gbGVuZ3RoLCBleHBlY3RlZCAxMjgsIGdvdCA0L1xuICAgICAgKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ2dldEJpdGdvR3BnUHVia2V5QmFzZWRPbkZlYXR1cmVGbGFncycsIGZ1bmN0aW9uICgpIHtcbiAgICBpdCgnc2hvdWxkIHJldHVybiBlZGRzYU1wY3YyUHVibGljS2V5IHdoZW4gcHJlc2VudCBpbiBmZWF0dXJlIGZsYWdzIHJlc3BvbnNlJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgZWQyNTUxOUtleVBhaXIgPSBhd2FpdCBvcGVucGdwLmdlbmVyYXRlS2V5KHtcbiAgICAgICAgdXNlcklEczogW3sgbmFtZTogJ2JpdGdvIGVkZHNhJywgZW1haWw6ICdiaXRnb0B0ZXN0LmNvbScgfV0sXG4gICAgICAgIGN1cnZlOiAnZWQyNTUxOScsXG4gICAgICB9KTtcbiAgICAgIGNvbnN0IHJlc3BvbnNlOiBCaXRnb0dQR1B1YmxpY0tleSA9IHtcbiAgICAgICAgbmFtZTogJ2lycmVsZXZhbnQnLFxuICAgICAgICBwdWJsaWNLZXk6IGVkMjU1MTlLZXlQYWlyLnB1YmxpY0tleSxcbiAgICAgICAgbXBjdjJQdWJsaWNLZXk6IGVkMjU1MTlLZXlQYWlyLnB1YmxpY0tleSxcbiAgICAgICAgZWRkc2FNcGN2MlB1YmxpY0tleTogZWQyNTUxOUtleVBhaXIucHVibGljS2V5LFxuICAgICAgICBlbnRlcnByaXNlSWQ6ICdlbnRlcnByaXNlX2lkJyxcbiAgICAgIH07XG4gICAgICBub2NrKGJnVXJsKS5nZXQoYC9hcGkvdjIvJHtjb2luTmFtZX0vdHNzL3B1YmtleWApLnF1ZXJ5KHsgZW50ZXJwcmlzZUlkOiAnZW50ZXJwcmlzZV9pZCcgfSkucmVwbHkoMjAwLCByZXNwb25zZSk7XG4gICAgICBjb25zdCB7IGVkZHNhTXBjdjJQdWJsaWNLZXkgfSA9IGF3YWl0IHRzc1V0aWxzLmdldEJpdGdvR3BnUHVia2V5QmFzZWRPbkZlYXR1cmVGbGFncygnZW50ZXJwcmlzZV9pZCcpO1xuICAgICAgc2hvdWxkLmV4aXN0KGVkZHNhTXBjdjJQdWJsaWNLZXkpO1xuICAgICAgc2hvdWxkLmVxdWFsKGVkMjU1MTlLZXlQYWlyLnB1YmxpY0tleSwgZWRkc2FNcGN2MlB1YmxpY0tleSEuYXJtb3IoKSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHJldHVybiB1bmRlZmluZWQgZWRkc2FNcGN2MlB1YmxpY0tleSB3aGVuIGFic2VudCBmcm9tIGZlYXR1cmUgZmxhZ3MgcmVzcG9uc2UnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBrZXlQYWlyID0gYXdhaXQgb3BlbnBncC5nZW5lcmF0ZUtleSh7XG4gICAgICAgIHVzZXJJRHM6IFt7IG5hbWU6ICdiaXRnbycsIGVtYWlsOiAnYml0Z29AdGVzdC5jb20nIH1dLFxuICAgICAgfSk7XG4gICAgICBjb25zdCByZXNwb25zZTogQml0Z29HUEdQdWJsaWNLZXkgPSB7XG4gICAgICAgIG5hbWU6ICdpcnJlbGV2YW50JyxcbiAgICAgICAgcHVibGljS2V5OiBrZXlQYWlyLnB1YmxpY0tleSxcbiAgICAgICAgbXBjdjJQdWJsaWNLZXk6IGtleVBhaXIucHVibGljS2V5LFxuICAgICAgICBlbnRlcnByaXNlSWQ6ICdlbnRlcnByaXNlX2lkJyxcbiAgICAgIH07XG4gICAgICBub2NrKGJnVXJsKS5nZXQoYC9hcGkvdjIvJHtjb2luTmFtZX0vdHNzL3B1YmtleWApLnF1ZXJ5KHsgZW50ZXJwcmlzZUlkOiAnZW50ZXJwcmlzZV9pZCcgfSkucmVwbHkoMjAwLCByZXNwb25zZSk7XG4gICAgICBjb25zdCB7IGVkZHNhTXBjdjJQdWJsaWNLZXkgfSA9IGF3YWl0IHRzc1V0aWxzLmdldEJpdGdvR3BnUHVia2V5QmFzZWRPbkZlYXR1cmVGbGFncygnZW50ZXJwcmlzZV9pZCcpO1xuICAgICAgc2hvdWxkLm5vdC5leGlzdChlZGRzYU1wY3YyUHVibGljS2V5KTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgLy8gI2VuZHJlZ2lvbiBOb2NrIGhlbHBlcnNcbn0pO1xuIl19