@bitgo/sdk-api 1.76.1 → 1.76.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/package.json +5 -5
- package/dist/src/bitgoAPI.d.ts +14 -2
- package/dist/src/bitgoAPI.d.ts.map +1 -1
- package/dist/src/bitgoAPI.js +58 -14
- package/dist/test/unit/bitgoAPI.js +199 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +5 -5
|
@@ -713,5 +713,203 @@ describe('Constructor', function () {
|
|
|
713
713
|
nock_1.default.cleanAll();
|
|
714
714
|
});
|
|
715
715
|
});
|
|
716
|
+
describe('packKeychainsFFD', function () {
|
|
717
|
+
let bitgo;
|
|
718
|
+
before(function () {
|
|
719
|
+
bitgo = new bitgoAPI_1.BitGoAPI({ env: 'custom', customRootURI: 'https://app.example.local' });
|
|
720
|
+
});
|
|
721
|
+
function ffd(keychains, v2Keychains, maxBatchSizeBytes) {
|
|
722
|
+
return bitgo.packKeychainsFFD(keychains, v2Keychains, maxBatchSizeBytes);
|
|
723
|
+
}
|
|
724
|
+
it('returns an empty array when both inputs are empty', function () {
|
|
725
|
+
const bins = ffd({}, {}, 1024);
|
|
726
|
+
bins.should.be.an.Array();
|
|
727
|
+
bins.should.have.length(0);
|
|
728
|
+
});
|
|
729
|
+
it('packs all items into a single bin when they fit within the limit', function () {
|
|
730
|
+
// Each entry: 2-byte id + 10-byte value = 12 bytes; 5 entries = 60 bytes < 200 limit
|
|
731
|
+
const keychains = { k1: 'aaaaaaaaaa', k2: 'bbbbbbbbbb', k3: 'cccccccccc' };
|
|
732
|
+
const v2Keychains = { v1: 'dddddddddd', v2: 'eeeeeeeeee' };
|
|
733
|
+
const bins = ffd(keychains, v2Keychains, 200);
|
|
734
|
+
bins.should.have.length(1);
|
|
735
|
+
Object.keys(bins[0].v1Batch).should.have.length(3);
|
|
736
|
+
Object.keys(bins[0].v2Batch).should.have.length(2);
|
|
737
|
+
});
|
|
738
|
+
it('splits into multiple bins when a single bin cannot fit all items', function () {
|
|
739
|
+
// id='k1' (2 bytes) + 600-char value = 602 bytes; 2 entries exceed 700-byte limit
|
|
740
|
+
const keychains = { k1: 'x'.repeat(600), k2: 'y'.repeat(600) };
|
|
741
|
+
const bins = ffd(keychains, {}, 700);
|
|
742
|
+
bins.should.have.length(2);
|
|
743
|
+
});
|
|
744
|
+
it('throws when a single item exceeds maxBatchSizeBytes', function () {
|
|
745
|
+
// id='k1' (2 bytes) + 200-char value = 202 bytes > 100-byte limit
|
|
746
|
+
const keychains = { k1: 'x'.repeat(200) };
|
|
747
|
+
try {
|
|
748
|
+
ffd(keychains, {}, 100);
|
|
749
|
+
throw new Error('Expected error not thrown');
|
|
750
|
+
}
|
|
751
|
+
catch (e) {
|
|
752
|
+
e.message.should.match(/exceeds the maximum batch size/);
|
|
753
|
+
}
|
|
754
|
+
});
|
|
755
|
+
it('places V1 keychains in v1Batch and V2 keychains in v2Batch', function () {
|
|
756
|
+
const keychains = { k1: 'v1value' };
|
|
757
|
+
const v2Keychains = { k2: 'v2value' };
|
|
758
|
+
const bins = ffd(keychains, v2Keychains, 10000);
|
|
759
|
+
bins.should.have.length(1);
|
|
760
|
+
bins[0].v1Batch.should.have.property('k1', 'v1value');
|
|
761
|
+
bins[0].v2Batch.should.have.property('k2', 'v2value');
|
|
762
|
+
bins[0].v1Batch.should.not.have.property('k2');
|
|
763
|
+
bins[0].v2Batch.should.not.have.property('k1');
|
|
764
|
+
});
|
|
765
|
+
it('uses FFD ordering so the largest item is packed first', function () {
|
|
766
|
+
// 'big': id(3) + 497 bytes = 500 bytes; 's1','s2': id(2) + 98 bytes = 100 bytes each
|
|
767
|
+
// maxBatchSizeBytes = 600
|
|
768
|
+
// FFD order (descending): big(500), s1(100), s2(100)
|
|
769
|
+
// bin0: big(500). s1: 500+100=600 <=600, fits. s2: 600+100=700 > 600, new bin1.
|
|
770
|
+
// Result: bin0={big,s1}, bin1={s2}
|
|
771
|
+
const keychains = { big: 'x'.repeat(497), s1: 'y'.repeat(98), s2: 'z'.repeat(98) };
|
|
772
|
+
const bins = ffd(keychains, {}, 600);
|
|
773
|
+
bins.should.have.length(2);
|
|
774
|
+
// 'big' should share its bin with one small item (FFD packs the largest first)
|
|
775
|
+
const binWithBig = bins.find((b) => 'big' in b.v1Batch);
|
|
776
|
+
Object.keys(binWithBig.v1Batch).should.have.length(2);
|
|
777
|
+
});
|
|
778
|
+
});
|
|
779
|
+
describe('processKeychainPasswordUpdatesInBatches', function () {
|
|
780
|
+
const ROOT = 'https://app.example.local';
|
|
781
|
+
let bitgo;
|
|
782
|
+
beforeEach(function () {
|
|
783
|
+
const strategy = {
|
|
784
|
+
calculateRequestHeaders: sinon.stub().resolves({ hmac: 'hmac', timestamp: Date.now(), tokenHash: 'hash' }),
|
|
785
|
+
verifyResponse: sinon.stub().resolves({
|
|
786
|
+
isValid: true,
|
|
787
|
+
expectedHmac: 'hmac',
|
|
788
|
+
signatureSubject: '',
|
|
789
|
+
isInResponseValidityWindow: true,
|
|
790
|
+
verificationTime: Date.now(),
|
|
791
|
+
}),
|
|
792
|
+
calculateHMAC: sinon.stub().resolves('hashed-pw'),
|
|
793
|
+
setToken: sinon.stub().resolves(),
|
|
794
|
+
clearToken: sinon.stub().resolves(),
|
|
795
|
+
};
|
|
796
|
+
bitgo = new bitgoAPI_1.BitGoAPI({ env: 'custom', customRootURI: ROOT, hmacAuthStrategy: strategy });
|
|
797
|
+
});
|
|
798
|
+
afterEach(function () {
|
|
799
|
+
nock_1.default.cleanAll();
|
|
800
|
+
sinon.restore();
|
|
801
|
+
});
|
|
802
|
+
async function runBatches(keychains, v2Keychains, maxBatchSizeKB, maxRetries = 3) {
|
|
803
|
+
return bitgo.processKeychainPasswordUpdatesInBatches(keychains, v2Keychains, maxBatchSizeKB, maxRetries);
|
|
804
|
+
}
|
|
805
|
+
it('makes a single PUT request for a small payload', async function () {
|
|
806
|
+
const scope = (0, nock_1.default)(ROOT).put('/api/v2/user/keychains').reply(200, {});
|
|
807
|
+
await runBatches({ k1: 'small' }, {}, 1024);
|
|
808
|
+
scope.isDone().should.be.true();
|
|
809
|
+
});
|
|
810
|
+
it('makes two PUT requests when the payload spans two bins', async function () {
|
|
811
|
+
// id='k1'(2) + 600 = 602 bytes each; 2 entries exceed 1 KB limit => 2 bins
|
|
812
|
+
const keychains = { k1: 'x'.repeat(600), k2: 'y'.repeat(600) };
|
|
813
|
+
const scope = (0, nock_1.default)(ROOT).put('/api/v2/user/keychains').twice().reply(200, {});
|
|
814
|
+
await runBatches(keychains, {}, 1);
|
|
815
|
+
scope.isDone().should.be.true();
|
|
816
|
+
});
|
|
817
|
+
it('retries a failed batch and succeeds on the second attempt', async function () {
|
|
818
|
+
(0, nock_1.default)(ROOT).put('/api/v2/user/keychains').reply(500, { error: 'internal error' });
|
|
819
|
+
(0, nock_1.default)(ROOT).put('/api/v2/user/keychains').reply(200, {});
|
|
820
|
+
// Should not throw
|
|
821
|
+
await runBatches({ k1: 'value' }, {}, 1024, 3);
|
|
822
|
+
});
|
|
823
|
+
it('throws after exhausting all retries on persistent HTTP errors', async function () {
|
|
824
|
+
(0, nock_1.default)(ROOT).put('/api/v2/user/keychains').times(3).reply(500, { error: 'internal error' });
|
|
825
|
+
let thrownError;
|
|
826
|
+
try {
|
|
827
|
+
await runBatches({ k1: 'value' }, {}, 1024, 3);
|
|
828
|
+
}
|
|
829
|
+
catch (e) {
|
|
830
|
+
thrownError = e;
|
|
831
|
+
}
|
|
832
|
+
thrownError.message.should.match(/failed after 3 retries/);
|
|
833
|
+
});
|
|
834
|
+
it('throws after exhausting all retries when the server reports failed keychains', async function () {
|
|
835
|
+
(0, nock_1.default)(ROOT)
|
|
836
|
+
.put('/api/v2/user/keychains')
|
|
837
|
+
.times(3)
|
|
838
|
+
.reply(200, { failed: { v1: { k1: 'encryption error' } } });
|
|
839
|
+
let thrownError;
|
|
840
|
+
try {
|
|
841
|
+
await runBatches({ k1: 'value' }, {}, 1024, 3);
|
|
842
|
+
}
|
|
843
|
+
catch (e) {
|
|
844
|
+
thrownError = e;
|
|
845
|
+
}
|
|
846
|
+
thrownError.message.should.match(/had failed keychains/);
|
|
847
|
+
});
|
|
848
|
+
});
|
|
849
|
+
describe('changePassword batching flow', function () {
|
|
850
|
+
const ROOT = 'https://app.example.local';
|
|
851
|
+
let bitgo;
|
|
852
|
+
let sandbox;
|
|
853
|
+
beforeEach(function () {
|
|
854
|
+
sandbox = sinon.createSandbox();
|
|
855
|
+
const strategy = {
|
|
856
|
+
calculateRequestHeaders: sandbox.stub().resolves({ hmac: 'hmac', timestamp: Date.now(), tokenHash: 'hash' }),
|
|
857
|
+
verifyResponse: sandbox.stub().resolves({
|
|
858
|
+
isValid: true,
|
|
859
|
+
expectedHmac: 'hmac',
|
|
860
|
+
signatureSubject: '',
|
|
861
|
+
isInResponseValidityWindow: true,
|
|
862
|
+
verificationTime: Date.now(),
|
|
863
|
+
}),
|
|
864
|
+
calculateHMAC: sandbox.stub().resolves('hashed-pw'),
|
|
865
|
+
setToken: sandbox.stub().resolves(),
|
|
866
|
+
clearToken: sandbox.stub().resolves(),
|
|
867
|
+
};
|
|
868
|
+
bitgo = new bitgoAPI_1.BitGoAPI({ env: 'custom', customRootURI: ROOT, hmacAuthStrategy: strategy });
|
|
869
|
+
bitgo._user = { username: 'test@bitgo.com' };
|
|
870
|
+
sandbox.stub(bitgo, 'verifyPassword').resolves(true);
|
|
871
|
+
sandbox.stub(bitgo, 'keychains').returns({
|
|
872
|
+
updatePassword: sandbox.stub().resolves({ keychains: { k1: 'v1enc' }, version: 25 }),
|
|
873
|
+
});
|
|
874
|
+
sandbox.stub(bitgo, 'coin').returns({
|
|
875
|
+
keychains: () => ({
|
|
876
|
+
updatePassword: sandbox.stub().resolves({ v2k1: 'v2enc' }),
|
|
877
|
+
}),
|
|
878
|
+
});
|
|
879
|
+
});
|
|
880
|
+
afterEach(function () {
|
|
881
|
+
nock_1.default.cleanAll();
|
|
882
|
+
sandbox.restore();
|
|
883
|
+
});
|
|
884
|
+
it('calls PUT /user/keychains and POST /user/changepassword without keychains when batching is enabled', async function () {
|
|
885
|
+
(0, nock_1.default)(ROOT)
|
|
886
|
+
.get('/api/v2/user/checkBatchingPasswordFlow')
|
|
887
|
+
.query(true)
|
|
888
|
+
.reply(200, { isBatchingFlowEnabled: true, maxBatchSizeKB: 900 });
|
|
889
|
+
const batchPutScope = (0, nock_1.default)(ROOT).put('/api/v2/user/keychains').reply(200, {});
|
|
890
|
+
const changePassScope = (0, nock_1.default)(ROOT)
|
|
891
|
+
.post('/api/v1/user/changepassword', (body) => !body.keychains && !body.v2_keychains)
|
|
892
|
+
.reply(200, {});
|
|
893
|
+
await bitgo.changePassword({ oldPassword: 'oldpw', newPassword: 'newpw' });
|
|
894
|
+
batchPutScope.isDone().should.be.true();
|
|
895
|
+
changePassScope.isDone().should.be.true();
|
|
896
|
+
});
|
|
897
|
+
it('sends keychains in the POST body (legacy flow) when the server disables batching', async function () {
|
|
898
|
+
(0, nock_1.default)(ROOT).get('/api/v2/user/checkBatchingPasswordFlow').query(true).reply(200, { isBatchingFlowEnabled: false });
|
|
899
|
+
const legacyScope = (0, nock_1.default)(ROOT)
|
|
900
|
+
.post('/api/v1/user/changepassword', (body) => !!body.keychains && !!body.v2_keychains)
|
|
901
|
+
.reply(200, {});
|
|
902
|
+
await bitgo.changePassword({ oldPassword: 'oldpw', newPassword: 'newpw' });
|
|
903
|
+
legacyScope.isDone().should.be.true();
|
|
904
|
+
});
|
|
905
|
+
it('falls back to legacy flow when the batching check request fails', async function () {
|
|
906
|
+
(0, nock_1.default)(ROOT).get('/api/v2/user/checkBatchingPasswordFlow').query(true).reply(503, { error: 'service unavailable' });
|
|
907
|
+
const legacyScope = (0, nock_1.default)(ROOT)
|
|
908
|
+
.post('/api/v1/user/changepassword', (body) => !!body.keychains && !!body.v2_keychains)
|
|
909
|
+
.reply(200, {});
|
|
910
|
+
await bitgo.changePassword({ oldPassword: 'oldpw', newPassword: 'newpw' });
|
|
911
|
+
legacyScope.isDone().should.be.true();
|
|
912
|
+
});
|
|
913
|
+
});
|
|
716
914
|
});
|
|
717
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYml0Z29BUEkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi90ZXN0L3VuaXQvYml0Z29BUEkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxrQkFBZ0I7QUFDaEIsaURBQThDO0FBQzlDLDZDQUF5QztBQUN6Qyw2Q0FBK0I7QUFDL0IsZ0RBQXdCO0FBR3hCLFFBQVEsQ0FBQyxhQUFhLEVBQUU7SUFDdEIsUUFBUSxDQUFDLG9DQUFvQyxFQUFFO1FBQzdDLEVBQUUsQ0FBQyxpREFBaUQsRUFBRTtZQUNwRCxNQUFNLEtBQUssR0FBRyxJQUFJLG1CQUFRLENBQUM7Z0JBQ3pCLEdBQUcsRUFBRSxRQUFRO2dCQUNiLGFBQWEsRUFBRSwyQkFBMkI7Z0JBQzFDLHlCQUF5QixFQUFFLElBQUk7YUFDaEMsQ0FBQyxDQUFDO1lBRUgsS0FBSyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLDJCQUEyQixDQUFDLENBQUM7WUFDeEQsS0FBSyxDQUFDLHlCQUF5QixDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDckQsQ0FBQyxDQUFDLENBQUM7UUFFSCxFQUFFLENBQUMsa0RBQWtELEVBQUU7WUFDckQsTUFBTSxLQUFLLEdBQUcsSUFBSSxtQkFBUSxDQUFDO2dCQUN6QixHQUFHLEVBQUUsUUFBUTtnQkFDYixhQUFhLEVBQUUsMkJBQTJCO2dCQUMxQyx5QkFBeUIsRUFBRSxLQUFLO2FBQ2pDLENBQUMsQ0FBQztZQUVILEtBQUssQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQywyQkFBMkIsQ0FBQyxDQUFDO1lBQ3hELEtBQUssQ0FBQyx5QkFBeUIsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3RELENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLGtEQUFrRCxFQUFFO1lBQ3JELE1B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N0UsbUJBQWdCLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxHQUFHLGVBQWUsQ0FBQztZQUN4RCxtQkFBZ0IsQ0FBQyxnQkFBZ0IsQ0FBQyxRQUFRLENBQUMsR0FBRyxTQUFTLENBQUM7WUFFekQsTUFBTSxLQUFLLEdBQUcsSUFBQSxjQUFJLEVBQUMsMkJBQTJCLENBQUM7aUJBQzVDLEdBQUcsQ0FBQywwQkFBMEIsQ0FBQztpQkFDL0IsS0FBSyxDQUFDLEdBQUcsRUFBRSxFQUFFLFNBQVMsRUFBRSxFQUFFLGVBQWUsRUFBRSxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFFeEQsTUFBTSxTQUFTLEdBQUcsTUFBTSxLQUFLLENBQUMsY0FBYyxFQUFFLENBQUM7WUFFL0MscUNBQXFDO1lBQ3JDLFNBQVMsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLGVBQWUsQ0FBQyxDQUFDO1lBRTVDLHFGQUFxRjtZQUNyRixLQUFLLENBQUMsTUFBTSxFQUFFLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUVqQyxjQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDbEIsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICdzaG91bGQnO1xuaW1wb3J0IHsgQml0R29BUEkgfSBmcm9tICcuLi8uLi9zcmMvYml0Z29BUEknO1xuaW1wb3J0IHsgUHJveHlBZ2VudCB9IGZyb20gJ3Byb3h5LWFnZW50JztcbmltcG9ydCAqIGFzIHNpbm9uIGZyb20gJ3Npbm9uJztcbmltcG9ydCBub2NrIGZyb20gJ25vY2snO1xuaW1wb3J0IHR5cGUgeyBJSG1hY0F1dGhTdHJhdGVneSB9IGZyb20gJ0BiaXRnby9zZGstaG1hYyc7XG5cbmRlc2NyaWJlKCdDb25zdHJ1Y3RvcicsIGZ1bmN0aW9uICgpIHtcbiAgZGVzY3JpYmUoJ2Nvb2tpZXNQcm9wYWdhdGlvbkVuYWJsZWQgYXJndW1lbnQnLCBmdW5jdGlvbiAoKSB7XG4gICAgaXQoJ2Nvb2tpZXNQcm9wYWdhdGlvbkVuYWJsZWQgaXMgZW5hYmxlZCBleHBsaWNpdGx5JywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgYml0Z28gPSBuZXcgQml0R29BUEkoe1xuICAgICAgICBlbnY6ICdjdXN0b20nLFxuICAgICAgICBjdXN0b21Sb290VVJJOiAnaHR0cHM6Ly9hcHAuZXhhbXBsZS5sb2NhbCcsXG4gICAgICAgIGNvb2tpZXNQcm9wYWdhdGlvbkVuYWJsZWQ6IHRydWUsXG4gICAgICB9KTtcblxuICAgICAgYml0Z28uc2hvdWxkLmhhdmUucHJvcGVydHkoJ2Nvb2tpZXNQcm9wYWdhdGlvbkVuYWJsZWQnKTtcbiAgICAgIGJpdGdvLmNvb2tpZXNQcm9wYWdhdGlvbkVuYWJsZWQuc2hvdWxkLmVxdWFsKHRydWUpO1xuICAgIH0pO1xuXG4gICAgaXQoJ2Nvb2tpZXNQcm9wYWdhdGlvbkVuYWJsZWQgaXMgZGlzYWJsZWQgZXhwbGljaXRseScsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGJpdGdvID0gbmV3IEJpdEdvQVBJKHtcbiAgICAgICAgZW52OiAnY3VzdG9tJyxcbiAgICAgICAgY3VzdG9tUm9vdFVSSTogJ2h0dHBzOi8vYXBwLmV4YW1wbGUubG9jYWwnLFxuICAgICAgICBjb29raWVzUHJvcGFnYXRpb25FbmFibGVkOiBmYWxzZSxcbiAgICAgIH0pO1xuXG4gICAgICBiaXRnby5zaG91bGQuaGF2ZS5wcm9wZXJ0eSgnY29va2llc1Byb3BhZ2F0aW9uRW5hYmxlZCcpO1xuICAgICAgYml0Z28uY29va2llc1Byb3BhZ2F0aW9uRW5hYmxlZC5zaG91bGQuZXF1YWwoZmFsc2UpO1xuICAgIH0pO1xuXG4gICAgaXQoJ2Nvb2tpZXNQcm9wYWdhdGlvbkVuYWJsZWQgaXMgZGlzYWJsZWQgYnkgZGVmYXVsdCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGJpdGdvID0gbmV3IEJpdEdvQVBJKHtcbiAgICAgICAgZW52OiAnY3VzdG9tJyxcbiAgICAgICAgY3VzdG9tUm9vdFVSSTogJ2h0dHBzOi8vYXBwLmV4YW1wbGUubG9jYWwnLFxuICAgICAgfSk7XG5cbiAgICAgIGJpdGdvLnNob3VsZC5oYXZlLnByb3BlcnR5KCdjb29raWVzUHJvcGFnYXRpb25FbmFibGVkJyk7XG4gICAgICBiaXRnby5jb29raWVzUHJvcGFnYXRpb25FbmFibGVkLnNob3VsZC5lcXVhbChmYWxzZSk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdyZXF1ZXN0SWRQcmVmaXggYXJndW1lbnQnLCBmdW5jdGlvbiAoKSB7XG4gICAgYWZ0ZXJFYWNoKGZ1bmN0aW9uICgpIHtcbiAgICAgIG5vY2suY2xlYW5BbGwoKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgcHJlcGVuZCByZXF1ZXN0SWRQcmVmaXggdG8gUmVxdWVzdC1JRCBoZWFkZXIgd2hlbiBzZXQnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBiaXRnbyA9IG5ldyBCaXRHb0FQSSh7XG4gICAgICAgIGVudjogJ2N1c3RvbScsXG4gICAgICAgIGN1c3RvbVJvb3RVUkk6ICdodHRwczovL2FwcC5leGFtcGxlLmxvY2FsJyxcbiAgICAgICAgcmVxdWVzdElkUHJlZml4OiAndGVzdC1wcmVmaXgtJyxcbiAgICAgIH0pO1xuXG4gICAgICBjb25zdCBzY29wZSA9IG5vY2soJ2h0dHBzOi8vYXBwLmV4YW1wbGUubG9jYWwnKVxuICAgICAgICAuZ2V0KCcvYXBpL3YxL3BpbmcnKVxuICAgICAgICAubWF0Y2hIZWFkZXIoJ1JlcXVlc3QtSUQnLCAvXnRlc3QtcHJlZml4LS8pXG4gICAgICAgIC5yZXBseSgyMDAsIHsgc3RhdHVzOiAnb2snIH0pO1xuXG4gICAgICBhd2FpdCBiaXRnby5waW5nKHtcbiAgICAgICAgcmVxSWQ6IHtcbiAgICAgICAgICB0b1N0cmluZzogKCkgPT4gJzEyMzQ1JyxcbiAgICAgICAgICBpbmM6ICgpID0+IHtcbiAgICAgICAgICAgIC8qIG1vY2sgKi9cbiAgICAgICAgICB9LFxuICAgICAgICB9IGFzIGFueSxcbiAgICAgIH0pO1xuXG4gICAgICBzY29wZS5pc0RvbmUoKS5zaG91bGQuYmUudHJ1ZSgpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBub3QgbW9kaWZ5IFJlcXVlc3QtSUQgaGVhZGVyIHdoZW4gcmVxdWVzdElkUHJlZml4IGlzIG5vdCBzZXQnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBiaXRnbyA9IG5ldyBCaXRHb0FQSSh7XG4gICAgICAgIGVudjogJ2N1c3RvbScsXG4gICAgICAgIGN1c3RvbVJvb3RVUkk6ICdodHRwczovL2FwcC5leGFtcGxlLmxvY2FsJyxcbiAgICAgIH0pO1xuXG4gICAgICBjb25zdCBzY29wZSA9IG5vY2soJ2h0dHBzOi8vYXBwLmV4YW1wbGUubG9jYWwnKVxuICAgICAgICAuZ2V0KCcvYXBpL3YxL3BpbmcnKVxuICAgICAgICAubWF0Y2hIZWFkZXIoJ1JlcXVlc3QtSUQnLCAvXjEyMzQ1JC8pXG4gICAgICAgIC5yZXBseSgyMDAsIHsgc3RhdHVzOiAnb2snIH0pO1xuXG4gICAgICBhd2FpdCBiaXRnby5waW5nKHtcbiAgICAgICAgcmVxSWQ6IHtcbiAgICAgICAgICB0b1N0cmluZzogKCkgPT4gJzEyMzQ1JyxcbiAgICAgICAgICBpbmM6ICgpID0+IHtcbiAgICAgICAgICAgIC8qIG1vY2sgKi9cbiAgICAgICAgICB9LFxuICAgICAgICB9IGFzIGFueSxcbiAgICAgIH0pO1xuXG4gICAgICBzY29wZS5pc0RvbmUoKS5zaG91bGQuYmUudHJ1ZSgpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBjb3JyZWN0bHkgZm9ybWF0IFJlcXVlc3QtSUQgd2l0aCBwcmVmaXggYW5kIG51bWVyaWMgc2VxdWVuY2UnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBiaXRnbyA9IG5ldyBCaXRHb0FQSSh7XG4gICAgICAgIGVudjogJ2N1c3RvbScsXG4gICAgICAgIGN1c3RvbVJvb3RVUkk6ICdodHRwczovL2FwcC5leGFtcGxlLmxvY2FsJyxcbiAgICAgICAgcmVxdWVzdElkUHJlZml4OiAnbXlhcHAtdjEtJyxcbiAgICAgIH0pO1xuXG4gICAgICBjb25zdCBzY29wZSA9IG5vY2soJ2h0dHBzOi8vYXBwLmV4YW1wbGUubG9jYWwnKVxuICAgICAgICAuZ2V0KCcvYXBpL3YxL3BpbmcnKVxuICAgICAgICAubWF0Y2hIZWFkZXIoJ1JlcXVlc3QtSUQnLCAnbXlhcHAtdjEtdHJhY2UtMTIzJylcbiAgICAgICAgLnJlcGx5KDIwMCwgeyBzdGF0dXM6ICdvaycgfSk7XG5cbiAgICAgIGF3YWl0IGJpdGdvLnBpbmcoe1xuICAgICAgICByZXFJZDoge1xuICAgICAgICAgIHRvU3RyaW5nOiAoKSA9PiAndHJhY2UtMTIzJyxcbiAgICAgICAgICBpbmM6ICgpID0+IHtcbiAgICAgICAgICAgIC8qIG1vY2sgKi9cbiAgICAgICAgICB9LFxuICAgICAgICB9IGFzIGFueSxcbiAgICAgIH0pO1xuXG4gICAgICBzY29wZS5pc0RvbmUoKS5zaG91bGQuYmUudHJ1ZSgpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCB3b3JrIHdpdGggZW1wdHkgc3RyaW5nIHByZWZpeCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGJpdGdvID0gbmV3IEJpdEdvQVBJKHtcbiAgICAgICAgZW52OiAnY3VzdG9tJyxcbiAgICAgICAgY3VzdG9tUm9vdFVSSTogJ2h0dHBzOi8vYXBwLmV4YW1wbGUubG9jYWwnLFxuICAgICAgICByZXF1ZXN0SWRQcmVmaXg6ICcnLFxuICAgICAgfSk7XG5cbiAgICAgIGNvbnN0IHNjb3BlID0gbm9jaygnaHR0cHM6Ly9hcHAuZXhhbXBsZS5sb2NhbCcpXG4gICAgICAgIC5nZXQoJy9hcGkvdjEvcGluZycpXG4gICAgICAgIC5tYXRjaEhlYWRlcignUmVxdWVzdC1JRCcsICdhYmMtMTIzJylcbiAgICAgICAgLnJlcGx5KDIwMCwgeyBzdGF0dXM6ICdvaycgfSk7XG5cbiAgICAgIGF3YWl0IGJpdGdvLnBpbmcoe1xuICAgICAgICByZXFJZDoge1xuICAgICAgICAgIHRvU3RyaW5nOiAoKSA9PiAnYWJjLTEyMycsXG4gICAgICAgICAgaW5jOiAoKSA9PiB7XG4gICAgICAgICAgICAvKiBtb2NrICovXG4gICAgICAgICAgfSxcbiAgICAgICAgfSBhcyBhbnksXG4gICAgICB9KTtcblxuICAgICAgc2NvcGUuaXNEb25lKCkuc2hvdWxkLmJlLnRydWUoKTtcbiAgICB9KTtcbiAgfSk7XG4gIGRlc2NyaWJlKCdodHRwIHByb3h5IGFnZW50JywgZnVuY3Rpb24gKCkge1xuICAgIGl0KCdodHRwIHByb3h5IGFnZW50IHNoYWxsIGJlIGNyZWF0ZWQgd2hlbiBwcm94eShjdXN0b21Qcm94eWFnZW50KSBpcyBzZXQnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBjdXN0b21Qcm94eUFnZW50ID0gbmV3IFByb3h5QWdlbnQoe1xuICAgICAgICBnZXRQcm94eUZvclVybDogKCkgPT4gJ2h0dHA6Ly9sb2NhbGhvc3Q6MzAwMCcsXG4gICAgICB9KTtcbiAgICAgIGNvbnN0IGJpdGdvID0gbmV3IEJpdEdvQVBJKHtcbiAgICAgICAgZW52OiAnY3VzdG9tJyxcbiAgICAgICAgY3VzdG9tUm9vdFVSSTogJ2h0dHBzOi8vYXBwLmV4YW1wbGUubG9jYWwnLFxuICAgICAgICBjdXN0b21Qcm94eUFnZW50LFxuICAgICAgfSk7XG5cbiAgICAgIGJpdGdvLnNob3VsZC5oYXZlLnByb3BlcnR5KCdfY3VzdG9tUHJveHlBZ2VudCcsIGN1c3RvbVByb3h5QWdlbnQpO1xuICAgIH0pO1xuXG4gICAgaXQoJ2JpdGdvIGFwaSBpcyBzdGlsbCBpbml0aWF0ZWQgd2hlbiBwcm94eShjdXN0b21Qcm94eUFnZW50KSBpcyBub3Qgc2V0JywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgYml0Z28gPSBuZXcgQml0R29BUEkoe1xuICAgICAgICBlbnY6ICdjdXN0b20nLFxuICAgICAgICBjdXN0b21Sb290VVJJOiAnaHR0cHM6Ly9hcHAuZXhhbXBsZS5sb2NhbCcsXG4gICAgICB9KTtcblxuICAgICAgYml0Z28uc2hvdWxkLmhhdmUucHJvcGVydHkoJ19jdXN0b21Qcm94eUFnZW50JywgdW5kZWZpbmVkKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ3ZlcmlmeUFkZHJlc3MnLCBmdW5jdGlvbiAoKSB7XG4gICAgaXQoJ3Nob3VsZCBzdWNjZXNzZnVsbHkgdmVyaWZ5IGEgYmFzZTU4IGFkZHJlc3MnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBiaXRnbyA9IG5ldyBCaXRHb0FQSSh7XG4gICAgICAgIGVudjogJ3Rlc3QnLFxuICAgICAgfSk7XG5cbiAgICAgIGJpdGdvLnZlcmlmeUFkZHJlc3MoeyBhZGRyZXNzOiAnMk42cGFUMlRVNE4xWHBhWmpKaUFwV0pYb2V5ckwzVVdwa1onIH0pLnNob3VsZC5iZS50cnVlKCk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHN1Y2Nlc3NmdWxseSB2ZXJpZnkgYSBiZWNoMzIgYWRkcmVzcycsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGJpdGdvID0gbmV3IEJpdEdvQVBJKHtcbiAgICAgICAgZW52OiAndGVzdCcsXG4gICAgICB9KTtcblxuICAgICAgYml0Z29cbiAgICAgICAgLnZlcmlmeUFkZHJlc3MoeyBhZGRyZXNzOiAndGIxcWd1enlrNHc2a2FxdHBzY3pzNWFqMHc4cjc1OThqcTM2ZWdtOGU5OHdxcGgzcndtZXg2OHNlc2xnc2cnIH0pXG4gICAgICAgIC5zaG91bGQuYmUudHJ1ZSgpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgndXJsJywgZnVuY3Rpb24gKCkge1xuICAgIGl0KCdzaG91bGQgcmV0dXJuIHRoZSBjb3JyZWN0IFVSTCBmb3IgdmVyc2lvbiAxJywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgYml0Z28gPSBuZXcgQml0R29BUEkoe1xuICAgICAgICBlbnY6ICd0ZXN0JyxcbiAgICAgICAgY3VzdG9tUm9vdFVSSTogJ2h0dHBzOi8vdGVzdC5iaXRnby5jb20nLFxuICAgICAgfSk7XG4gICAgICBjb25zdCBwYXRoID0gJy90ZXN0LXBhdGgnO1xuICAgICAgY29uc3QgZXhwZWN0ZWRVcmwgPSAnaHR0cHM6Ly90ZXN0LmJpdGdvLmNvbS9hcGkvdjEvdGVzdC1wYXRoJztcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGJpdGdvLnVybChwYXRoLCAxKTtcbiAgICAgIHJlc3VsdC5zaG91bGQuZXF1YWwoZXhwZWN0ZWRVcmwpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gdGhlIGNvcnJlY3QgVVJMIGZvciB2ZXJzaW9uIDInLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBiaXRnbyA9IG5ldyBCaXRHb0FQSSh7XG4gICAgICAgIGVudjogJ3Rlc3QnLFxuICAgICAgICBjdXN0b21Sb290VVJJOiAnaHR0cHM6Ly90ZXN0LmJpdGdvLmNvbScsXG4gICAgICB9KTtcbiAgICAgIGNvbnN0IHBhdGggPSAnL3Rlc3QtcGF0aCc7XG4gICAgICBjb25zdCBleHBlY3RlZFVybCA9ICdodHRwczovL3Rlc3QuYml0Z28uY29tL2FwaS92Mi90ZXN0LXBhdGgnO1xuICAgICAgY29uc3QgcmVzdWx0ID0gYml0Z28udXJsKHBhdGgsIDIpO1xuICAgICAgcmVzdWx0LnNob3VsZC5lcXVhbChleHBlY3RlZFVybCk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHJldHVybiB0aGUgY29ycmVjdCBVUkwgZm9yIHZlcnNpb24gMycsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGJpdGdvID0gbmV3IEJpdEdvQVBJKHtcbiAgICAgICAgZW52OiAndGVzdCcsXG4gICAgICAgIGN1c3RvbVJvb3RVUkk6ICdodHRwczovL3Rlc3QuYml0Z28uY29tJyxcbiAgICAgIH0pO1xuICAgICAgY29uc3QgcGF0aCA9ICcvdGVzdC1wYXRoJztcbiAgICAgIGNvbnN0IGV4cGVjdGVkVXJsID0gJ2h0dHBzOi8vdGVzdC5iaXRnby5jb20vYXBpL3YzL3Rlc3QtcGF0aCc7XG4gICAgICBjb25zdCByZXN1bHQgPSBiaXRnby51cmwocGF0aCwgMyk7XG4gICAgICByZXN1bHQuc2hvdWxkLmVxdWFsKGV4cGVjdGVkVXJsKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgZGVmYXVsdCB0byB2ZXJzaW9uIDEgaWYgbm8gdmVyc2lvbiBpcyBwcm92aWRlZCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGJpdGdvID0gbmV3IEJpdEdvQVBJKHtcbiAgICAgICAgZW52OiAndGVzdCcsXG4gICAgICAgIGN1c3RvbVJvb3RVUkk6ICdodHRwczovL3Rlc3QuYml0Z28uY29tJyxcbiAgICAgIH0pO1xuICAgICAgY29uc3QgcGF0aCA9ICcvdGVzdC1wYXRoJztcbiAgICAgIGNvbnN0IGV4cGVjdGVkVXJsID0gJ2h0dHBzOi8vdGVzdC5iaXRnby5jb20vYXBpL3YxL3Rlc3QtcGF0aCc7XG4gICAgICBjb25zdCByZXN1bHQgPSBiaXRnby51cmwocGF0aCk7XG4gICAgICByZXN1bHQuc2hvdWxkLmVxdWFsKGV4cGVjdGVkVXJsKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ2RlY3J5cHRLZXlzJywgZnVuY3Rpb24gKCkge1xuICAgIGxldCBiaXRnbzogQml0R29BUEk7XG5cbiAgICBiZWZvcmVFYWNoKGZ1bmN0aW9uICgpIHtcbiAgICAgIGJpdGdvID0gbmV3IEJpdEdvQVBJKHtcbiAgICAgICAgZW52OiAndGVzdCcsXG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIGFmdGVyRWFjaChmdW5jdGlvbiAoKSB7XG4gICAgICBzaW5vbi5yZXN0b3JlKCk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHRocm93IGlmIG5vIHBhcmFtcyBhcmUgcHJvdmlkZWQnLCBmdW5jdGlvbiAoKSB7XG4gICAgICB0cnkge1xuICAgICAgICAvLyBAdHMtZXhwZWN0LWVycm9yIC0gaW50ZW50aW9uYWxseSBjYWxsaW5nIHdpdGggbm8gcGFyYW1zIGZvciB0ZXN0XG4gICAgICAgIGJpdGdvLmRlY3J5cHRLZXlzKCk7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignRXhwZWN0ZWQgZXJyb3IgYnV0IGdvdCBub25lJyk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGUubWVzc2FnZS5zaG91bGQuY29udGFpbkVxbCgnTWlzc2luZyBwYXJhbWV0ZXInKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgdGhyb3cgaWYgd2FsbGV0SWRFbmNyeXB0ZWRLZXlQYWlycyBpcyBtaXNzaW5nJywgZnVuY3Rpb24gKCkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvciAtIGludGVudGlvbmFsbHkgbWlzc2luZyByZXF1aXJlZCBwYXJhbVxuICAgICAgICBiaXRnby5kZWNyeXB0S2V5cyh7IHBhc3N3b3JkOiAncGFzc3dvcmQxMjMnIH0pO1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0V4cGVjdGVkIGVycm9yIGJ1dCBnb3Qgbm9uZScpO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBlLm1lc3NhZ2Uuc2hvdWxkLmNvbnRhaW5FcWwoJ01pc3NpbmcgcGFyYW1ldGVyOiB3YWxsZXRJZEVuY3J5cHRlZEtleVBhaXJzJyk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHRocm93IGlmIHBhc3N3b3JkIGlzIG1pc3NpbmcnLCBmdW5jdGlvbiAoKSB7XG4gICAgICB0cnkge1xuICAgICAgICAvLyBAdHMtZXhwZWN0LWVycm9yIC0gaW50ZW50aW9uYWxseSBtaXNzaW5nIHJlcXVpcmVkIHBhcmFtXG4gICAgICAgIGJpdGdvLmRlY3J5cHRLZXlzKHsgd2FsbGV0SWRFbmNyeXB0ZWRLZXlQYWlyczogW10gfSk7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignRXhwZWN0ZWQgZXJyb3IgYnV0IGdvdCBub25lJyk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGUubWVzc2FnZS5zaG91bGQuY29udGFpbkVxbCgnTWlzc2luZyBwYXJhbWV0ZXI6IHBhc3N3b3JkJyk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHRocm93IGlmIHdhbGxldElkRW5jcnlwdGVkS2V5UGFpcnMgaXMgbm90IGFuIGFycmF5JywgZnVuY3Rpb24gKCkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvciAtIGludGVudGlvbmFsbHkgcHJvdmlkaW5nIHdyb25nIHR5cGVcbiAgICAgICAgYml0Z28uZGVjcnlwdEtleXMoeyB3YWxsZXRJZEVuY3J5cHRlZEtleVBhaXJzOiAnbm90IGFuIGFycmF5JywgcGFzc3dvcmQ6ICdwYXNzd29yZDEyMycgfSk7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignRXhwZWN0ZWQgZXJyb3IgYnV0IGdvdCBub25lJyk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGUubWVzc2FnZS5zaG91bGQuZXF1YWwoJ3dhbGxldElkRW5jcnlwdGVkS2V5UGFpcnMgbXVzdCBiZSBhbiBhcnJheScpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gZW1wdHkgYXJyYXkgZm9yIGVtcHR5IHdhbGxldElkRW5jcnlwdGVkS2V5UGFpcnMnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCByZXN1bHQgPSBiaXRnby5kZWNyeXB0S2V5cyh7IHdhbGxldElkRW5jcnlwdGVkS2V5UGFpcnM6IFtdLCBwYXNzd29yZDogJ3Bhc3N3b3JkMTIzJyB9KTtcbiAgICAgIHJlc3VsdC5zaG91bGQuYmUuYW4uQXJyYXkoKTtcbiAgICAgIHJlc3VsdC5zaG91bGQuYmUuZW1wdHkoKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgdGhyb3cgaWYgYW55IHdhbGxldElkIGlzIG1pc3Npbmcgb3Igbm90IGEgc3RyaW5nJywgZnVuY3Rpb24gKCkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgYml0Z28uZGVjcnlwdEtleXMoe1xuICAgICAgICAgIHdhbGxldElkRW5jcnlwdGVkS2V5UGFpcnM6IFtcbiAgICAgICAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgLSBpbnRlbnRpb25hbGx5IG1pc3Npbmcgd2FsbGV0SWRcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgZW5jcnlwdGVkUHJ2OiAnZW5jcnlwdGVkLWRhdGEnLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICBdLFxuICAgICAgICAgIHBhc3N3b3JkOiAncGFzc3dvcmQxMjMnLFxuICAgICAgICB9KTtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdFeHBlY3RlZCBlcnJvciBidXQgZ290IG5vbmUnKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgZS5tZXNzYWdlLnNob3VsZC5lcXVhbCgnZWFjaCBrZXkgcGFpciBtdXN0IGhhdmUgYSBzdHJpbmcgd2FsbGV0SWQnKTtcbiAgICAgIH1cblxuICAgICAgdHJ5IHtcbiAgICAgICAgYml0Z28uZGVjcnlwdEtleXMoe1xuICAgICAgICAgIHdhbGxldElkRW5jcnlwdGVkS2V5UGFpcnM6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvciAtIGludGVudGlvbmFsbHkgcHJvdmlkaW5nIHdyb25nIHR5cGVcbiAgICAgICAgICAgICAgd2FsbGV0SWQ6IDEyMyxcbiAgICAgICAgICAgICAgZW5jcnlwdGVkUHJ2OiAnZW5jcnlwdGVkLWRhdGEnLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICBdLFxuICAgICAgICAgIHBhc3N3b3JkOiAncGFzc3dvcmQxMjMnLFxuICAgICAgICB9KTtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdFeHBlY3RlZCBlcnJvciBidXQgZ290IG5vbmUnKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgZS5tZXNzYWdlLnNob3VsZC5lcXVhbCgnZWFjaCBrZXkgcGFpciBtdXN0IGhhdmUgYSBzdHJpbmcgd2FsbGV0SWQnKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgdGhyb3cgaWYgYW55IGVuY3J5cHRlZFBydiBpcyBtaXNzaW5nIG9yIG5vdCBhIHN0cmluZycsIGZ1bmN0aW9uICgpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGJpdGdvLmRlY3J5cHRLZXlzKHtcbiAgICAgICAgICB3YWxsZXRJZEVuY3J5cHRlZEtleVBhaXJzOiBbXG4gICAgICAgICAgICAvLyBAdHMtZXhwZWN0LWVycm9yIC0gaW50ZW50aW9uYWxseSBtaXNzaW5nIGVuY3J5cHRlZFBydlxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICB3YWxsZXRJZDogJ3dhbGxldC1pZC0xJyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgXSxcbiAgICAgICAgICBwYXNzd29yZDogJ3Bhc3N3b3JkMTIzJyxcbiAgICAgICAgfSk7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignRXhwZWN0ZWQgZXJyb3IgYnV0IGdvdCBub25lJyk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGUubWVzc2FnZS5zaG91bGQuZXF1YWwoJ2VhY2gga2V5IHBhaXIgbXVzdCBoYXZlIGEgc3RyaW5nIGVuY3J5cHRlZFBydicpO1xuICAgICAgfVxuXG4gICAgICB0cnkge1xuICAgICAgICBiaXRnby5kZWNyeXB0S2V5cyh7XG4gICAgICAgICAgd2FsbGV0SWRFbmNyeXB0ZWRLZXlQYWlyczogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICB3YWxsZXRJZDogJ3dhbGxldC1pZC0xJyxcbiAgICAgICAgICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvciAtIGludGVudGlvbmFsbHkgcHJvdmlkaW5nIHdyb25nIHR5cGVcbiAgICAgICAgICAgICAgZW5jcnlwdGVkUHJ2OiAxMjMsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIF0sXG4gICAgICAgICAgcGFzc3dvcmQ6ICdwYXNzd29yZDEyMycsXG4gICAgICAgIH0pO1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0V4cGVjdGVkIGVycm9yIGJ1dCBnb3Qgbm9uZScpO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBlLm1lc3NhZ2Uuc2hvdWxkLmVxdWFsKCdlYWNoIGtleSBwYWlyIG11c3QgaGF2ZSBhIHN0cmluZyBlbmNyeXB0ZWRQcnYnKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgcmV0dXJuIHdhbGxldElkcyBvZiBrZXlzIHRoYXQgZmFpbGVkIHRvIGRlY3J5cHQnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAvLyBDcmVhdGUgYSBzdHViIGZvciB0aGUgZGVjcnlwdCBtZXRob2RcbiAgICAgIGNvbnN0IGRlY3J5cHRTdHViID0gc2lub24uc3R1YihiaXRnbywgJ2RlY3J5cHQnKTtcblxuICAgICAgLy8gTWFrZSBpdCBzdWNjZWVkIGZvciBmaXJzdCB3YWxsZXQgYW5kIGZhaWwgZm9yIHNlY29uZCB3YWxsZXRcbiAgICAgIGRlY3J5cHRTdHViLm9uRmlyc3RDYWxsKCkucmV0dXJucygnZGVjcnlwdGVkLWtleS0xJyk7XG4gICAgICBkZWNyeXB0U3R1Yi5vblNlY29uZENhbGwoKS50aHJvd3MobmV3IEVycm9yKCdkZWNyeXB0aW9uIGZhaWxlZCcpKTtcblxuICAgICAgY29uc3QgcmVzdWx0ID0gYml0Z28uZGVjcnlwdEtleXMoe1xuICAgICAgICB3YWxsZXRJZEVuY3J5cHRlZEtleVBhaXJzOiBbXG4gICAgICAgICAgeyB3YWxsZXRJZDogJ3dhbGxldC1pZC0xJywgZW5jcnlwdGVkUHJ2OiAnZW5jcnlwdGVkLWRhdGEtMScgfSxcbiAgICAgICAgICB7IHdhbGxldElkOiAnd2FsbGV0LWlkLTInLCBlbmNyeXB0ZWRQcnY6ICdlbmNyeXB0ZWQtZGF0YS0yJyB9LFxuICAgICAgICBdLFxuICAgICAgICBwYXNzd29yZDogJ3Bhc3N3b3JkMTIzJyxcbiAgICAgIH0pO1xuXG4gICAgICByZXN1bHQuc2hvdWxkLmJlLmFuLkFycmF5KCk7XG4gICAgICByZXN1bHQuc2hvdWxkLmhhdmUubGVuZ3RoKDEpO1xuICAgICAgcmVzdWx0WzBdLnNob3VsZC5lcXVhbCgnd2FsbGV0LWlkLTInKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgY29ycmVjdGx5IHByb2Nlc3MgbXVsdGlwbGUgd2FsbGV0IGtleXMnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAvLyBDcmVhdGUgYSBzcHkgb24gdGhlIGRlY3J5cHQgbWV0aG9kXG4gICAgICBjb25zdCBkZWNyeXB0U3R1YiA9IHNpbm9uLnN0dWIoYml0Z28sICdkZWNyeXB0Jyk7XG5cbiAgICAgIC8vIENvbmZpZ3VyZSB0aGUgc3R1YiB0byB0aHJvdyBmb3Igc3BlY2lmaWMgd2FsbGV0c1xuICAgICAgZGVjcnlwdFN0dWJcbiAgICAgICAgLndpdGhBcmdzKHsgaW5wdXQ6ICdlbmNyeXB0ZWQtZGF0YS0yJywgcGFzc3dvcmQ6ICdwYXNzd29yZDEyMycgfSlcbiAgICAgICAgLnRocm93cyhuZXcgRXJyb3IoJ2RlY3J5cHRpb24gZmFpbGVkJykpO1xuICAgICAgZGVjcnlwdFN0dWJcbiAgICAgICAgLndpdGhBcmdzKHsgaW5wdXQ6ICdlbmNyeXB0ZWQtZGF0YS00JywgcGFzc3dvcmQ6ICdwYXNzd29yZDEyMycgfSlcbiAgICAgICAgLnRocm93cyhuZXcgRXJyb3IoJ2RlY3J5cHRpb24gZmFpbGVkJykpO1xuICAgICAgZGVjcnlwdFN0dWIucmV0dXJucygnc3VjY2VzcycpOyAvLyBEZWZhdWx0IHJldHVybiBmb3Igb3RoZXIgY2FsbHNcblxuICAgICAgY29uc3QgcmVzdWx0ID0gYml0Z28uZGVjcnlwdEtleXMoe1xuICAgICAgICB3YWxsZXRJZEVuY3J5cHRlZEtleVBhaXJzOiBbXG4gICAgICAgICAgeyB3YWxsZXRJZDogJ3dhbGxldC1pZC0xJywgZW5jcnlwdGVkUHJ2OiAnZW5jcnlwdGVkLWRhdGEtMScgfSxcbiAgICAgICAgICB7IHdhbGxldElkOiAnd2FsbGV0LWlkLTInLCBlbmNyeXB0ZWRQcnY6ICdlbmNyeXB0ZWQtZGF0YS0yJyB9LFxuICAgICAgICAgIHsgd2FsbGV0SWQ6ICd3YWxsZXQtaWQtMycsIGVuY3J5cHRlZFBydjogJ2VuY3J5cHRlZC1kYXRhLTMnIH0sXG4gICAgICAgICAgeyB3YWxsZXRJZDogJ3dhbGxldC1pZC00JywgZW5jcnlwdGVkUHJ2OiAnZW5jcnlwdGVkLWRhdGEtNCcgfSxcbiAgICAgICAgXSxcbiAgICAgICAgcGFzc3dvcmQ6ICdwYXNzd29yZDEyMycsXG4gICAgICB9KTtcblxuICAgICAgLy8gU2hvdWxkIGJlIGNhbGxlZCBvbmNlIGZvciBlYWNoIHdhbGxldFxuICAgICAgZGVjcnlwdFN0dWIuY2FsbENvdW50LnNob3VsZC5lcXVhbCg0KTtcblxuICAgICAgLy8gU2hvdWxkIGluY2x1ZGUgb25seSB0aGUgZmFpbGVkIHdhbGxldCBJRHNcbiAgICAgIHJlc3VsdC5zaG91bGQuYmUuYW4uQXJyYXkoKTtcbiAgICAgIHJlc3VsdC5zaG91bGQuaGF2ZS5sZW5ndGgoMik7XG4gICAgICByZXN1bHQuc2hvdWxkLmNvbnRhaW5EZWVwKFsnd2FsbGV0LWlkLTInLCAnd2FsbGV0LWlkLTQnXSk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdVc2VyLUFnZW50IGhlYWRlciBiYXNlZCBvbiBlbnZpcm9ubWVudCcsIGZ1bmN0aW9uICgpIHtcbiAgICBhZnRlckVhY2goZnVuY3Rpb24gKCkge1xuICAgICAgbm9jay5jbGVhbkFsbCgpO1xuICAgICAgc2lub24ucmVzdG9yZSgpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBzZXQgVXNlci1BZ2VudCBoZWFkZXIgd2hlbiBydW5uaW5nIGluIE5vZGUuanMgKHR5cGVvZiB3aW5kb3cgPT09IHVuZGVmaW5lZCknLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBiaXRnbyA9IG5ldyBCaXRHb0FQSSh7XG4gICAgICAgIGVudjogJ2N1c3RvbScsXG4gICAgICAgIGN1c3RvbVJvb3RVUkk6ICdodHRwczovL2FwcC5leGFtcGxlLmxvY2FsJyxcbiAgICAgICAgdXNlckFnZW50OiAnVGVzdEFnZW50LzEuMCcsXG4gICAgICB9KTtcblxuICAgICAgLy8gRW5zdXJlIHdlJ3JlIGluIGEgTm9kZS5qcyBlbnZpcm9ubWVudCBieSB2ZXJpZnlpbmcgd2luZG93IGlzIHVuZGVmaW5lZFxuICAgICAgKHR5cGVvZiB3aW5kb3cpLnNob3VsZC5lcXVhbCgndW5kZWZpbmVkJyk7XG5cbiAgICAgIGNvbnN0IHNjb3BlID0gbm9jaygnaHR0cHM6Ly9hcHAuZXhhbXBsZS5sb2NhbCcpXG4gICAgICAgIC5nZXQoJy9hcGkvdjEvcGluZycpXG4gICAgICAgIC5tYXRjaEhlYWRlcignVXNlci1BZ2VudCcsICdUZXN0QWdlbnQvMS4wJylcbiAgICAgICAgLnJlcGx5KDIwMCwgeyBzdGF0dXM6ICdvaycgfSk7XG5cbiAgICAgIGF3YWl0IGJpdGdvLnBpbmcoe1xuICAgICAgICByZXFJZDoge1xuICAgICAgICAgIHRvU3RyaW5nOiAoKSA9PiAndGVzdC0xMjMnLFxuICAgICAgICAgIGluYzogKCkgPT4ge1xuICAgICAgICAgICAgLyogbW9jayAqL1xuICAgICAgICAgIH0sXG4gICAgICAgIH0gYXMgYW55LFxuICAgICAgfSk7XG5cbiAgICAgIHNjb3BlLmlzRG9uZSgpLnNob3VsZC5iZS50cnVlKCk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIG5vdCBzZXQgVXNlci1BZ2VudCBoZWFkZXIgd2hlbiBydW5uaW5nIGluIGJyb3dzZXIgKHR5cGVvZiB3aW5kb3cgIT09IHVuZGVmaW5lZCknLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAvLyBNb2NrIHRoZSB3aW5kb3cgb2JqZWN0IHRvIHNpbXVsYXRlIGJyb3dzZXIgZW52aXJvbm1lbnRcbiAgICAgIGNvbnN0IHdpbmRvd1N0dWIgPSB7IGxvY2F0aW9uOiAnbW9jaycgfTtcbiAgICAgIChnbG9iYWwgYXMgYW55KS53aW5kb3cgPSB3aW5kb3dTdHViO1xuXG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBiaXRnbyA9IG5ldyBCaXRHb0FQSSh7XG4gICAgICAgICAgZW52OiAnY3VzdG9tJyxcbiAgICAgICAgICBjdXN0b21Sb290VVJJOiAnaHR0cHM6Ly9hcHAuZXhhbXBsZS5sb2NhbCcsXG4gICAgICAgICAgdXNlckFnZW50OiAnVGVzdEFnZW50LzEuMCcsXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGNvbnN0IHNjb3BlID0gbm9jaygnaHR0cHM6Ly9hcHAuZXhhbXBsZS5sb2NhbCcpXG4gICAgICAgICAgLmdldCgnL2FwaS92MS9waW5nJylcbiAgICAgICAgICAucmVwbHkoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgLy8gVmVyaWZ5IFVzZXItQWdlbnQgaGVhZGVyIGlzIE5PVCBzZXQgdG8gb3VyIGN1c3RvbSB2YWx1ZVxuICAgICAgICAgICAgY29uc3QgdXNlckFnZW50ID0gdGhpcy5yZXEuaGVhZGVyc1sndXNlci1hZ2VudCddO1xuICAgICAgICAgICAgaWYgKHVzZXJBZ2VudCAmJiB1c2VyQWdlbnQuaW5jbHVkZXMoJ1Rlc3RBZ2VudC8xLjAnKSkge1xuICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1VzZXItQWdlbnQgc2hvdWxkIG5vdCBiZSBzZXQgaW4gYnJvd3NlciBlbnZpcm9ubWVudCcpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIFsyMDAsIHsgc3RhdHVzOiAnb2snIH1dO1xuICAgICAgICAgIH0pO1xuXG4gICAgICAgIGF3YWl0IGJpdGdvLnBpbmcoe1xuICAgICAgICAgIHJlcUlkOiB7XG4gICAgICAgICAgICB0b1N0cmluZzogKCkgPT4gJ3Rlc3QtMTIzJyxcbiAgICAgICAgICAgIGluYzogKCkgPT4ge1xuICAgICAgICAgICAgICAvKiBtb2NrICovXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0gYXMgYW55LFxuICAgICAgICB9KTtcblxuICAgICAgICBzY29wZS5pc0RvbmUoKS5zaG91bGQuYmUudHJ1ZSgpO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgLy8gQ2xlYW4gdXAgdGhlIGdsb2JhbCB3aW5kb3cgbW9ja1xuICAgICAgICBkZWxldGUgKGdsb2JhbCBhcyBhbnkpLndpbmRvdztcbiAgICAgIH1cbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ2htYWNBdXRoU3RyYXRlZ3kgdG9rZW4gbGlmZWN5Y2xlJywgZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IFJPT1QgPSAnaHR0cHM6Ly9hcHAuZXhhbXBsZS5sb2NhbCc7XG5cbiAgICAvLyBCdWlsZHMgYSBtb2NrIHN0cmF0ZWd5IHdob3NlIHNldFRva2VuIC8gY2xlYXJUb2tlbiBhcmUgc2lub24gc3R1YnMuXG4gICAgZnVuY3Rpb24gbWFrZVN0cmF0ZWd5KG92ZXJyaWRlczogUGFydGlhbDxJSG1hY0F1dGhTdHJhdGVneT4gPSB7fSk6IHtcbiAgICAgIHN0cmF0ZWd5OiBJSG1hY0F1dGhTdHJhdGVneTtcbiAgICAgIHNldFRva2VuU3R1Yjogc2lub24uU2lub25TdHViO1xuICAgICAgY2xlYXJUb2tlblN0dWI6IHNpbm9uLlNpbm9uU3R1YjtcbiAgICB9IHtcbiAgICAgIGNvbnN0IHNldFRva2VuU3R1YiA9IHNpbm9uLnN0dWIoKS5yZXNvbHZlcygpO1xuICAgICAgY29uc3QgY2xlYXJUb2tlblN0dWIgPSBzaW5vbi5zdHViKCkucmVzb2x2ZXMoKTtcbiAgICAgIGNvbnN0IHN0cmF0ZWd5OiBJSG1hY0F1dGhTdHJhdGVneSA9IHtcbiAgICAgICAgY2FsY3VsYXRlUmVxdWVzdEhlYWRlcnM6IHNpbm9uLnN0dWIoKS5yZXNvbHZlcyh7IGhtYWM6ICdobWFjJywgdGltZXN0YW1wOiAxLCB0b2tlbkhhc2g6ICdoYXNoJyB9KSxcbiAgICAgICAgdmVyaWZ5UmVzcG9uc2U6IHNpbm9uLnN0dWIoKS5yZXNvbHZlcyh7XG4gICAgICAgICAgaXNWYWxpZDogdHJ1ZSxcbiAgICAgICAgICBleHBlY3RlZEhtYWM6ICdobWFjJyxcbiAgICAgICAgICBzaWduYXR1cmVTdWJqZWN0OiAnJyxcbiAgICAgICAgICBpc0luUmVzcG9uc2VWYWxpZGl0eVdpbmRvdzogdHJ1ZSxcbiAgICAgICAgICB2ZXJpZmljYXRpb25UaW1lOiBEYXRlLm5vdygpLFxuICAgICAgICB9KSxcbiAgICAgICAgY2FsY3VsYXRlSE1BQzogc2lub24uc3R1YigpLnJlc29sdmVzKCdoYXNoZWQtcHcnKSxcbiAgICAgICAgc2V0VG9rZW46IHNldFRva2VuU3R1YixcbiAgICAgICAgY2xlYXJUb2tlbjogY2xlYXJUb2tlblN0dWIsXG4gICAgICAgIC4uLm92ZXJyaWRlcyxcbiAgICAgIH07XG4gICAgICByZXR1cm4geyBzdHJhdGVneSwgc2V0VG9rZW5TdHViLCBjbGVhclRva2VuU3R1YiB9O1xuICAgIH1cblxuICAgIGFmdGVyRWFjaChmdW5jdGlvbiAoKSB7XG4gICAgICBub2NrLmNsZWFuQWxsKCk7XG4gICAgICBzaW5vbi5yZXN0b3JlKCk7XG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnYXV0aGVudGljYXRlKCknLCBmdW5jdGlvbiAoKSB7XG4gICAgICBpdCgnY2FsbHMgc2V0VG9rZW4gd2l0aCB0aGUgYWNjZXNzX3Rva2VuIHJlY2VpdmVkIGZyb20gdGhlIHNlcnZlcicsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY29uc3QgeyBzdHJhdGVneSwgc2V0VG9rZW5TdHViIH0gPSBtYWtlU3RyYXRlZ3koKTtcbiAgICAgICAgY29uc3QgYml0Z28gPSBuZXcgQml0R29BUEkoeyBlbnY6ICdjdXN0b20nLCBjdXN0b21Sb290VVJJOiBST09ULCBobWFjQXV0aFN0cmF0ZWd5OiBzdHJhdGVneSB9KTtcblxuICAgICAgICBub2NrKFJPT1QpXG4gICAgICAgICAgLnBvc3QoJy9hcGkvYXV0aC92MS9zZXNzaW9uJylcbiAgICAgICAgICAucmVwbHkoMjAwLCB7XG4gICAgICAgICAgICB1c2VyOiB7IHVzZXJuYW1lOiAndGVzdEBleGFtcGxlLmNvbScgfSxcbiAgICAgICAgICAgIGFjY2Vzc190b2tlbjogJ3YyeG15YWNjZXNzdG9rZW4nLFxuICAgICAgICAgIH0pO1xuXG4gICAgICAgIGF3YWl0IGJpdGdvLmF1dGhlbnRpY2F0ZSh7IHVzZXJuYW1lOiAndGVzdEBleGFtcGxlLmNvbScsIHBhc3N3b3JkOiAnaHVudGVyMicgfSk7XG5cbiAgICAgICAgc2V0VG9rZW5TdHViLmNhbGxlZE9uY2Uuc2hvdWxkLmJlLnRydWUoKTtcbiAgICAgICAgc2V0VG9rZW5TdHViLmZpcnN0Q2FsbC5hcmdzWzBdLnNob3VsZC5lcXVhbCgndjJ4bXlhY2Nlc3N0b2tlbicpO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdhd2FpdHMgc2V0VG9rZW4gYmVmb3JlIG1ha2luZyBlbnN1cmVFY2RoS2V5Y2hhaW4gcmVxdWVzdHMnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIC8vIFRoaXMgaXMgdGhlIGNvcmUgcmVncmVzc2lvbiB0ZXN0OiBpZiBzZXRUb2tlbiBpcyBub3QgYXdhaXRlZCwgdGhlXG4gICAgICAgIC8vIHN0cmF0ZWd5J3Mga2V5IG1hdGVyaWFsIHdvbid0IGJlIHJlYWR5IGJlZm9yZSBjYWxjdWxhdGVSZXF1ZXN0SGVhZGVyc1xuICAgICAgICAvLyBpcyBjYWxsZWQgZm9yIHRoZSBHRVQgL3VzZXIvc2V0dGluZ3MgcmVxdWVzdCwgYW5kIGl0IHdvdWxkIHRocm93LlxuICAgICAgICBsZXQga2V5UmVhZHkgPSBmYWxzZTtcbiAgICAgICAgY29uc3QgeyBzdHJhdGVneSB9ID0gbWFrZVN0cmF0ZWd5KHtcbiAgICAgICAgICBzZXRUb2tlbjogc2lub24uc3R1YigpLmNhbGxzRmFrZShhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICAvLyBTaW11bGF0ZSBub24tdHJpdmlhbCBhc3luYyBrZXkgZGVyaXZhdGlvbiAobGlrZSBjcnlwdG8uc3VidGxlLmltcG9ydEtleSkuXG4gICAgICAgICAgICBhd2FpdCBuZXcgUHJvbWlzZTx2b2lkPigocmVzb2x2ZSkgPT4gc2V0SW1tZWRpYXRlKHJlc29sdmUpKTtcbiAgICAgICAgICAgIGtleVJlYWR5ID0gdHJ1ZTtcbiAgICAgICAgICB9KSxcbiAgICAgICAgICBjYWxjdWxhdGVSZXF1ZXN0SGVhZGVyczogc2lub24uc3R1YigpLmNhbGxzRmFrZShhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICBpZiAoIWtleVJlYWR5KSB7XG4gICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignTm8gdG9rZW4gYXZhaWxhYmxlLiBDYWxsIHNldFRva2VuKCkgb3IgcmVzdG9yZVRva2VuKCkgZmlyc3QuJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4geyBobWFjOiAnaG1hYycsIHRpbWVzdGFtcDogRGF0ZS5ub3coKSwgdG9rZW5IYXNoOiAnaGFzaCcgfTtcbiAgICAgICAgICB9KSxcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IGJpdGdvID0gbmV3IEJpdEdvQVBJKHsgZW52OiAnY3VzdG9tJywgY3VzdG9tUm9vdFVSSTogUk9PVCwgaG1hY0F1dGhTdHJhdGVneTogc3RyYXRlZ3kgfSk7XG5cbiAgICAgICAgbm9jayhST09UKVxuICAgICAgICAgIC5wb3N0KCcvYXBpL2F1dGgvdjEvc2Vzc2lvbicpXG4gICAgICAgICAgLnJlcGx5KDIwMCwge1xuICAgICAgICAgICAgdXNlcjogeyB1c2VybmFtZTogJ3Rlc3RAZXhhbXBsZS5jb20nIH0sXG4gICAgICAgICAgICBhY2Nlc3NfdG9rZW46ICd2MnhteXRva2VuJyxcbiAgICAgICAgICB9KTtcbiAgICAgICAgLy8gVGhlIEdFVCAvdXNlci9zZXR0aW5ncyByZXF1ZXN0IG1hZGUgYnkgZW5zdXJlVXNlckVjZGhLZXljaGFpbklzQ3JlYXRlZFxuICAgICAgICAvLyBtdXN0IHN1Y2NlZWQg4oCUIGl0IHdvdWxkIHRocm93IGlmIHNldFRva2VuIHdhc24ndCBhd2FpdGVkIGZpcnN0LlxuICAgICAgICBub2NrKFJPT1QpXG4gICAgICAgICAgLmdldCgnL2FwaS92MS91c2VyL3NldHRpbmdzJylcbiAgICAgICAgICAucmVwbHkoMjAwLCB7XG4gICAgICAgICAgICBzZXR0aW5nczogeyBlY2RoS2V5Y2hhaW46ICd4cHViMTIzJyB9LFxuICAgICAgICAgIH0pO1xuXG4gICAgICAgIGF3YWl0IGJpdGdvLmF1dGhlbnRpY2F0ZSh7XG4gICAgICAgICAgdXNlcm5hbWU6ICd0ZXN0QGV4YW1wbGUuY29tJyxcbiAgICAgICAgICBwYXNzd29yZDogJ2h1bnRlcjInLFxuICAgICAgICAgIGVuc3VyZUVjZGhLZXljaGFpbjogdHJ1ZSxcbiAgICAgICAgfSk7XG5cbiAgICAgICAga2V5UmVhZHkuc2hvdWxkLmJlLnRydWUoKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJ2F1dGhlbnRpY2F0ZVdpdGhQYXNza2V5KCknLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCB2YWxpZFBhc3NrZXkgPSBKU09OLnN0cmluZ2lmeSh7XG4gICAgICAgIGlkOiAnY3JlZGVudGlhbC1pZCcsXG4gICAgICAgIHJhd0lkOiAncmF3LWlkJyxcbiAgICAgICAgdHlwZTogJ3B1YmxpYy1rZXknLFxuICAgICAgICByZXNwb25zZToge1xuICAgICAgICAgIGF1dGhlbnRpY2F0b3JEYXRhOiAnYXV0aC1kYXRhJyxcbiAgICAgICAgICBjbGllbnREYXRhSlNPTjogJ2NsaWVudC1kYXRhJyxcbiAgICAgICAgICBzaWduYXR1cmU6ICdzaWcnLFxuICAgICAgICAgIHVzZXJIYW5kbGU6ICd1c2VyLWhhbmRsZS0xMjMnLFxuICAgICAgICB9LFxuICAgICAgfSk7XG5cbiAgICAgIGl0KCdjYWxscyBzZXRUb2tlbiB3aXRoIHRoZSBhY2Nlc3NfdG9rZW4gcmVjZWl2ZWQgZnJvbSB0aGUgc2VydmVyJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICBjb25zdCB7IHN0cmF0ZWd5LCBzZXRUb2tlblN0dWIgfSA9IG1ha2VTdHJhdGVneSgpO1xuICAgICAgICBjb25zdCBiaXRnbyA9IG5ldyBCaXRHb0FQSSh7IGVudjogJ2N1c3RvbScsIGN1c3RvbVJvb3RVUkk6IFJPT1QsIGhtYWNBdXRoU3RyYXRlZ3k6IHN0cmF0ZWd5IH0pO1xuXG4gICAgICAgIG5vY2soUk9PVClcbiAgICAgICAgICAucG9zdCgnL2FwaS9hdXRoL3YxL3Nlc3Npb24nKVxuICAgICAgICAgIC5yZXBseSgyMDAsIHtcbiAgICAgICAgICAgIHVzZXI6IHsgdXNlcm5hbWU6ICd0ZXN0QGV4YW1wbGUuY29tJyB9LFxuICAgICAgICAgICAgYWNjZXNzX3Rva2VuOiAndjJ4cGFzc2tleXRva2VuJyxcbiAgICAgICAgICB9KTtcblxuICAgICAgICBhd2FpdCBiaXRnby5hdXRoZW50aWNhdGVXaXRoUGFzc2tleSh2YWxpZFBhc3NrZXkpO1xuXG4gICAgICAgIHNldFRva2VuU3R1Yi5jYWxsZWRPbmNlLnNob3VsZC5iZS50cnVlKCk7XG4gICAgICAgIHNldFRva2VuU3R1Yi5maXJzdENhbGwuYXJnc1swXS5zaG91bGQuZXF1YWwoJ3YyeHBhc3NrZXl0b2tlbicpO1xuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnY2xlYXJBc3luYygpJywgZnVuY3Rpb24gKCkge1xuICAgICAgaXQoJ2NsZWFycyBfdG9rZW4gYW5kIGNhbGxzIGNsZWFyVG9rZW4gb24gdGhlIHN0cmF0ZWd5JywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICBjb25zdCB7IHN0cmF0ZWd5LCBjbGVhclRva2VuU3R1YiB9ID0gbWFrZVN0cmF0ZWd5KCk7XG4gICAgICAgIGNvbnN0IGJpdGdvID0gbmV3IEJpdEdvQVBJKHsgZW52OiAnY3VzdG9tJywgY3VzdG9tUm9vdFVSSTogUk9PVCwgaG1hY0F1dGhTdHJhdGVneTogc3RyYXRlZ3kgfSk7XG5cbiAgICAgICAgYml0Z28uYXV0aGVudGljYXRlV2l0aEFjY2Vzc1Rva2VuKHsgYWNjZXNzVG9rZW46ICd2Mnhzb21ldG9rZW4nIH0pO1xuICAgICAgICAoYml0Z28gYXMgYW55KS5fdG9rZW4uc2hvdWxkLmVxdWFsKCd2Mnhzb21ldG9rZW4nKTtcblxuICAgICAgICBhd2FpdCBiaXRnby5jbGVhckFzeW5jKCk7XG5cbiAgICAgICAgKChiaXRnbyBhcyBhbnkpLl90b2tlbiA9PT0gdW5kZWZpbmVkKS5zaG91bGQuYmUudHJ1ZSgpO1xuICAgICAgICBjbGVhclRva2VuU3R1Yi5jYWxsZWRPbmNlLnNob3VsZC5iZS50cnVlKCk7XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCdyZWZyZXNoVG9rZW4oKScsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGl0KCdjYWxscyBzZXRUb2tlbiB3aXRoIHRoZSBuZXcgYWNjZXNzX3Rva2VuIGZyb20gdGhlIE9BdXRoIHJlc3BvbnNlJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICBjb25zdCB7IHN0cmF0ZWd5LCBzZXRUb2tlblN0dWIgfSA9IG1ha2VTdHJhdGVneSgpO1xuICAgICAgICBjb25zdCBiaXRnbyA9IG5ldyBCaXRHb0FQSSh7XG4gICAgICAgICAgZW52OiAnY3VzdG9tJyxcbiAgICAgICAgICBjdXN0b21Sb290VVJJOiBST09ULFxuICAgICAgICAgIGhtYWNBdXRoU3RyYXRlZ3k6IHN0cmF0ZWd5LFxuICAgICAgICAgIGNsaWVudElkOiAnY2xpZW50LWlkJyxcbiAgICAgICAgICBjbGllbnRTZWNyZXQ6ICdjbGllbnQtc2VjcmV0JyxcbiAgICAgICAgfSk7XG4gICAgICAgIChiaXRnbyBhcyBhbnkpLl9yZWZyZXNoVG9rZW4gPSAnb2xkLXJlZnJlc2gtdG9rZW4nO1xuXG4gICAgICAgIG5vY2soUk9PVCkucG9zdCgnL29hdXRoL3Rva2VuJykucmVwbHkoMjAwLCB7XG4gICAgICAgICAgYWNjZXNzX3Rva2VuOiAndjJ4bmV3dG9rZW4nLFxuICAgICAgICAgIHJlZnJlc2hfdG9rZW46ICduZXctcmVmcmVzaC10b2tlbicsXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGF3YWl0IGJpdGdvLnJlZnJlc2hUb2tlbigpO1xuXG4gICAgICAgIHNldFRva2VuU3R1Yi5jYWxsZWRPbmNlLnNob3VsZC5iZS50cnVlKCk7XG4gICAgICAgIHNldFRva2VuU3R1Yi5maXJzdENhbGwuYXJnc1swXS5zaG91bGQuZXF1YWwoJ3YyeG5ld3Rva2VuJyk7XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCdhdXRoZW50aWNhdGVXaXRoQXV0aENvZGUoKScsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGl0KCdjYWxscyBzZXRUb2tlbiB3aXRoIHRoZSBhY2Nlc3NfdG9rZW4gZnJvbSB0aGUgT0F1dGggcmVzcG9uc2UnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGNvbnN0IHsgc3RyYXRlZ3ksIHNldFRva2VuU3R1YiB9ID0gbWFrZVN0cmF0ZWd5KCk7XG4gICAgICAgIGNvbnN0IGJpdGdvID0gbmV3IEJpdEdvQVBJKHtcbiAgICAgICAgICBlbnY6ICdjdXN0b20nLFxuICAgICAgICAgIGN1c3RvbVJvb3RVUkk6IFJPT1QsXG4gICAgICAgICAgaG1hY0F1dGhTdHJhdGVneTogc3RyYXRlZ3ksXG4gICAgICAgICAgY2xpZW50SWQ6ICdjbGllbnQtaWQnLFxuICAgICAgICAgIGNsaWVudFNlY3JldDogJ2NsaWVudC1zZWNyZXQnLFxuICAgICAgICB9KTtcblxuICAgICAgICBub2NrKFJPT1QpLnBvc3QoJy9vYXV0aC90b2tlbicpLnJlcGx5KDIwMCwge1xuICAgICAgICAgIGFjY2Vzc190b2tlbjogJ3YyeGF1dGhjb2RldG9rZW4nLFxuICAgICAgICAgIHJlZnJlc2hfdG9rZW46ICdyZWZyZXNoLXRva2VuJyxcbiAgICAgICAgfSk7XG4gICAgICAgIC8vIGF1dGhlbnRpY2F0ZVdpdGhBdXRoQ29kZSBjYWxscyB0aGlzLm1lKCkgYWZ0ZXIgc2V0dGluZyB0aGUgdG9rZW5cbiAgICAgICAgbm9jayhST09UKVxuICAgICAgICAgIC5nZXQoJy9hcGkvdjEvdXNlci9tZScpXG4gICAgICAgICAgLnJlcGx5KDIwMCwge1xuICAgICAgICAgICAgdXNlcjogeyB1c2VybmFtZTogJ3Rlc3RAZXhhbXBsZS5jb20nIH0sXG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgYXdhaXQgYml0Z28uYXV0aGVudGljYXRlV2l0aEF1dGhDb2RlKHsgYXV0aENvZGU6ICdteS1hdXRoLWNvZGUnIH0pO1xuXG4gICAgICAgIHNldFRva2VuU3R1Yi5jYWxsZWRPbmNlLnNob3VsZC5iZS50cnVlKCk7XG4gICAgICAgIHNldFRva2VuU3R1Yi5maXJzdENhbGwuYXJnc1swXS5zaG91bGQuZXF1YWwoJ3YyeGF1dGhjb2RldG9rZW4nKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJ3N5bmMgdG9rZW4tc2V0dGluZyBtZXRob2RzJywgZnVuY3Rpb24gKCkge1xuICAgICAgaXQoJ2F1dGhlbnRpY2F0ZVdpdGhBY2Nlc3NUb2tlbiBkb2VzIG5vdCBjYWxsIHNldFRva2VuIChzeW5jaHJvbm91cyDigJQgY2FsbGVyIG11c3QgaW52b2tlIHNldFRva2VuIG9uIHRoZSBzdHJhdGVneSBtYW51YWxseSknLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGNvbnN0IHsgc3RyYXRlZ3ksIHNldFRva2VuU3R1YiB9ID0gbWFrZVN0cmF0ZWd5KCk7XG4gICAgICAgIGNvbnN0IGJpdGdvID0gbmV3IEJpdEdvQVBJKHsgZW52OiAnY3VzdG9tJywgY3VzdG9tUm9vdFVSSTogUk9PVCwgaG1hY0F1dGhTdHJhdGVneTogc3RyYXRlZ3kgfSk7XG5cbiAgICAgICAgYml0Z28uYXV0aGVudGljYXRlV2l0aEFjY2Vzc1Rva2VuKHsgYWNjZXNzVG9rZW46ICd2MnhzeW5jdG9rZW4nIH0pO1xuXG4gICAgICAgIHNldFRva2VuU3R1Yi5jYWxsZWQuc2hvdWxkLmJlLmZhbHNlKCk7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ2Zyb21KU09OIGRvZXMgbm90IGNhbGwgc2V0VG9rZW4gKHN5bmNocm9ub3VzIOKAlCBjYWxsZXIgbXVzdCBpbnZva2Ugc2V0VG9rZW4gb24gdGhlIHN0cmF0ZWd5IG1hbnVhbGx5KScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY29uc3QgeyBzdHJhdGVneSwgc2V0VG9rZW5TdHViIH0gPSBtYWtlU3RyYXRlZ3koKTtcbiAgICAgICAgY29uc3QgYml0Z28gPSBuZXcgQml0R29BUEkoeyBlbnY6ICdjdXN0b20nLCBjdXN0b21Sb290VVJJOiBST09ULCBobWFjQXV0aFN0cmF0ZWd5OiBzdHJhdGVneSB9KTtcblxuICAgICAgICAoYml0Z28gYXMgYW55KS5mcm9tSlNPTih7IHVzZXI6IHsgdXNlcm5hbWU6ICd0ZXN0QGV4YW1wbGUuY29tJyB9LCB0b2tlbjogJ3YyeGpzb250b2tlbicgfSk7XG5cbiAgICAgICAgc2V0VG9rZW5TdHViLmNhbGxlZC5zaG91bGQuYmUuZmFsc2UoKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnY29uc3RhbnRzIHBhcmFtZXRlcicsIGZ1bmN0aW9uICgpIHtcbiAgICBpdCgnc2hvdWxkIGFsbG93IHBhc3NpbmcgY29uc3RhbnRzIHZpYSBvcHRpb25zIGFuZCBleHBvc2UgdmlhIGZldGNoQ29uc3RhbnRzJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgYml0Z28gPSBuZXcgQml0R29BUEkoe1xuICAgICAgICBlbnY6ICdjdXN0b20nLFxuICAgICAgICBjdXN0b21Sb290VVJJOiAnaHR0cHM6Ly9hcHAuZXhhbXBsZS5sb2NhbCcsXG4gICAgICAgIGNsaWVudENvbnN0YW50czogeyBtYXhGZWVSYXRlOiAnMTIzMTIzMTIzMTIzMTIzJyB9LFxuICAgICAgfSk7XG5cbiAgICAgIGNvbnN0IGNvbnN0YW50cyA9IGF3YWl0IGJpdGdvLmZldGNoQ29uc3RhbnRzKCk7XG4gICAgICBjb25zdGFudHMuc2hvdWxkLmhhdmUucHJvcGVydHkoJ21heEZlZVJhdGUnLCAnMTIzMTIzMTIzMTIzMTIzJyk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHJlZnJlc2ggY29uc3RhbnRzIHdoZW4gY2FjaGUgaGFzIGV4cGlyZWQnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBiaXRnbyA9IG5ldyBCaXRHb0FQSSh7XG4gICAgICAgIGVudjogJ2N1c3RvbScsXG4gICAgICAgIGN1c3RvbVJvb3RVUkk6ICdodHRwczovL2FwcC5leGFtcGxlLmxvY2FsJyxcbiAgICAgIH0pO1xuXG4gICAgICAvLyBTZXQgdXAgY2FjaGVkIGNvbnN0YW50cyB3aXRoIGFuIGV4cGlyZWQgY2FjaGVcbiAgICAgIChCaXRHb0FQSSBhcyBhbnkpLl9jb25zdGFudHMgPSAoQml0R29BUEkgYXMgYW55KS5fY29uc3RhbnRzIHx8IHt9O1xuICAgICAgKEJpdEdvQVBJIGFzIGFueSkuX2NvbnN0YW50c0V4cGlyZSA9IChCaXRHb0FQSSBhcyBhbnkpLl9jb25zdGFudHNFeHBpcmUgfHwge307XG4gICAgICAoQml0R29BUEkgYXMgYW55KS5fY29uc3RhbnRzWydjdXN0b20nXSA9IHsgbWF4RmVlUmF0ZTogJ29sZC12YWx1ZScgfTtcbiAgICAgIChCaXRHb0FQSSBhcyBhbnkpLl9jb25zdGFudHNFeHBpcmVbJ2N1c3RvbSddID0gbmV3IERhdGUoRGF0ZS5ub3coKSAtIDEwMDApOyAvLyBFeHBpcmVkIDEgc2Vjb25kIGFnb1xuXG4gICAgICBjb25zdCBzY29wZSA9IG5vY2soJ2h0dHBzOi8vYXBwLmV4YW1wbGUubG9jYWwnKVxuICAgICAgICAuZ2V0KCcvYXBpL3YxL2NsaWVudC9jb25zdGFudHMnKVxuICAgICAgICAucmVwbHkoMjAwLCB7XG4gICAgICAgICAgY29uc3RhbnRzOiB7IG1heEZlZVJhdGU6ICduZXctdmFsdWUnLCBuZXdDb25zdGFudDogJ2FkZGVkJyB9LFxuICAgICAgICB9KTtcblxuICAgICAgY29uc3QgY29uc3RhbnRzID0gYXdhaXQgYml0Z28uZmV0Y2hDb25zdGFudHMoKTtcblxuICAgICAgLy8gU2hvdWxkIHJldHVybiB0aGUgbmV3IGNvbnN0YW50cyBmcm9tIHRoZSBzZXJ2ZXJcbiAgICAgIGNvbnN0YW50cy5zaG91bGQuaGF2ZS5wcm9wZXJ0eSgnbWF4RmVlUmF0ZScsICduZXctdmFsdWUnKTtcbiAgICAgIGNvbnN0YW50cy5zaG91bGQuaGF2ZS5wcm9wZXJ0eSgnbmV3Q29uc3RhbnQnLCAnYWRkZWQnKTtcblxuICAgICAgc2NvcGUuaXNEb25lKCkuc2hvdWxkLmJlLnRydWUoKTtcblxuICAgICAgbm9jay5jbGVhbkFsbCgpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCB1c2UgY2FjaGVkIGNvbnN0YW50cyB3aGVuIGNhY2hlIGlzIHN0aWxsIHZhbGlkJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgYml0Z28gPSBuZXcgQml0R29BUEkoe1xuICAgICAgICBlbnY6ICdjdXN0b20nLFxuICAgICAgICBjdXN0b21Sb290VVJJOiAnaHR0cHM6Ly9hcHAuZXhhbXBsZS5sb2NhbCcsXG4gICAgICB9KTtcblxuICAgICAgLy8gU2V0IHVwIGNhY2hlZCBjb25zdGFudHMgd2l0aCBhIGZ1dHVyZSBleHBpcnlcbiAgICAgIGNvbnN0IGNhY2hlZENvbnN0YW50cyA9IHsgbWF4RmVlUmF0ZTogJ2NhY2hlZC12YWx1ZScsIGFub3RoZXJTZXR0aW5nOiAnY2FjaGVkLXNldHRpbmcnIH07XG4gICAgICAoQml0R29BUEkgYXMgYW55KS5fY29uc3RhbnRzID0gKEJpdEdvQVBJIGFzIGFueSkuX2NvbnN0YW50cyB8fCB7fTtcbiAgICAgIChCaXRHb0FQSSBhcyBhbnkpLl9jb25zdGFudHNFeHBpcmUgPSAoQml0R29BUEkgYXMgYW55KS5fY29uc3RhbnRzRXhwaXJlIHx8IHt9O1xuICAgICAgKEJpdEdvQVBJIGFzIGFueSkuX2NvbnN0YW50c1snY3VzdG9tJ10gPSBjYWNoZWRDb25zdGFudHM7XG4gICAgICAoQml0R29BUEkgYXMgYW55KS5fY29uc3RhbnRzRXhwaXJlWydjdXN0b20nXSA9IG5ldyBEYXRlKERhdGUubm93KCkgKyA1ICogNjAgKiAxMDAwKTsgLy8gVmFsaWQgZm9yIDUgbW9yZSBtaW51dGVzXG5cbiAgICAgIGNvbnN0IHNjb3BlID0gbm9jaygnaHR0cHM6Ly9hcHAuZXhhbXBsZS5sb2NhbCcpXG4gICAgICAgIC5nZXQoJy9hcGkvdjEvY2xpZW50L2NvbnN0YW50cycpXG4gICAgICAgIC5yZXBseSgyMDAsIHsgY29uc3RhbnRzOiB7IHNob3VsZE5vdEJlVXNlZDogdHJ1ZSB9IH0pO1xuXG4gICAgICBjb25zdCBjb25zdGFudHMgPSBhd2FpdCBiaXRnby5mZXRjaENvbnN0YW50cygpO1xuXG4gICAgICAvLyBTaG91bGQgcmV0dXJuIHRoZSBjYWNoZWQgY29uc3RhbnRzXG4gICAgICBjb25zdGFudHMuc2hvdWxkLmRlZXBFcXVhbChjYWNoZWRDb25zdGFudHMpO1xuXG4gICAgICAvLyBWZXJpZnkgdGhhdCBubyBIVFRQIHJlcXVlc3Qgd2FzIG1hZGUgKHNpbmNlIGNhY2hlIHdhcyB2YWxpZClcbiAgICAgIHNjb3BlLmlzRG9uZSgpLnNob3VsZC5iZS5mYWxzZSgpO1xuXG4gICAgICBub2NrLmNsZWFuQWxsKCk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHVzZSBjYWNoZWQgY29uc3RhbnRzIHdoZW4gbm8gY2FjaGUgZXhwaXJ5IGlzIHNldCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGJpdGdvID0gbmV3IEJpdEdvQVBJKHtcbiAgICAgICAgZW52OiAnY3VzdG9tJyxcbiAgICAgICAgY3VzdG9tUm9vdFVSSTogJ2h0dHBzOi8vYXBwLmV4YW1wbGUubG9jYWwnLFxuICAgICAgfSk7XG5cbiAgICAgIC8vIFNldCB1cCBjYWNoZWQgY29uc3RhbnRzIHdpdGggbm8gZXhwaXJ5XG4gICAgICBjb25zdCBjYWNoZWRDb25zdGFudHMgPSB7IG1heEZlZVJhdGU6ICduby1leHBpcnktdmFsdWUnIH07XG4gICAgICAoQml0R29BUEkgYXMgYW55KS5fY29uc3RhbnRzID0gKEJpdEdvQVBJIGFzIGFueSkuX2NvbnN0YW50cyB8fCB7fTtcbiAgICAgIChCaXRHb0FQSSBhcyBhbnkpLl9jb25zdGFudHNFeHBpcmUgPSAoQml0R29BUEkgYXMgYW55KS5fY29uc3RhbnRzRXhwaXJlIHx8IHt9O1xuICAgICAgKEJpdEdvQVBJIGFzIGFueSkuX2NvbnN0YW50c1snY3VzdG9tJ10gPSBjYWNoZWRDb25zdGFudHM7XG4gICAgICAoQml0R29BUEkgYXMgYW55KS5fY29uc3RhbnRzRXhwaXJlWydjdXN0b20nXSA9IHVuZGVmaW5lZDtcblxuICAgICAgY29uc3Qgc2NvcGUgPSBub2NrKCdodHRwczovL2FwcC5leGFtcGxlLmxvY2FsJylcbiAgICAgICAgLmdldCgnL2FwaS92MS9jbGllbnQvY29uc3RhbnRzJylcbiAgICAgICAgLnJlcGx5KDIwMCwgeyBjb25zdGFudHM6IHsgc2hvdWxkTm90QmVVc2VkOiB0cnVlIH0gfSk7XG5cbiAgICAgIGNvbnN0IGNvbnN0YW50cyA9IGF3YWl0IGJpdGdvLmZldGNoQ29uc3RhbnRzKCk7XG5cbiAgICAgIC8vIFNob3VsZCByZXR1cm4gdGhlIGNhY2hlZCBjb25zdGFudHNcbiAgICAgIGNvbnN0YW50cy5zaG91bGQuZGVlcEVxdWFsKGNhY2hlZENvbnN0YW50cyk7XG5cbiAgICAgIC8vIFZlcmlmeSB0aGF0IG5vIEhUVFAgcmVxdWVzdCB3YXMgbWFkZSAoc2luY2Ugbm8gZXhwaXJ5IG1lYW5zIGNhY2hlIGlzIGFsd2F5cyB2YWxpZClcbiAgICAgIHNjb3BlLmlzRG9uZSgpLnNob3VsZC5iZS5mYWxzZSgpO1xuXG4gICAgICBub2NrLmNsZWFuQWxsKCk7XG4gICAgfSk7XG4gIH0pO1xufSk7XG4iXX0=
|
|
915
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYml0Z29BUEkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi90ZXN0L3VuaXQvYml0Z29BUEkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxrQkFBZ0I7QUFDaEIsaURBQThDO0FBQzlDLDZDQUF5QztBQUN6Qyw2Q0FBK0I7QUFDL0IsZ0RBQXdCO0FBR3hCLFFBQVEsQ0FBQyxhQUFhLEVBQUU7SUFDdEIsUUFBUSxDQUFDLG9DQUFvQyxFQUFFO1FBQzdDLEVBQUUsQ0FBQyxpREFBaUQsRUFBRTtZQUNwRCxNQUFNLEtBQUssR0FBRyxJQUFJLG1CQUFRLENBQUM7Z0JBQ3pCLEdBQUcsRUFBRSxRQUFRO2dCQUNiLGFBQWEsRUFBRSwyQkFBMkI7Z0JBQzFDLHlCQUF5QixFQUFFLElBQUk7YUFDaEMsQ0FBQyxDQUFDO1lBRUgsS0FBSyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLDJCQUEyQixDQUFDLENBQUM7WUFDeEQsS0FBSyxDQUFDLHlCQUF5QixDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDckQsQ0FBQyxDQUFDLENBQUM7UUFFSCxFQUFFLENBQUMsa0RBQWtELEVBQUU7WUFDckQsTUFBTSxLQUFLLEdBQUcsSUFBSSxtQkFBUSxDQUFDO2dCQUN6QixHQUFHLEVBQUUsUUFBUTtnQkFDYixhQUFhLEVBQUUsMkJBQTJCO2dCQUMxQyx5QkFBeUIsRUFBRSxLQUFLO2FBQ2pDLENBQUMsQ0FBQztZQUVILEtBQUssQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQywyQkFBMkIsQ0FBQyxDQUFDO1lBQ3hELEtBQUssQ0FBQyx5QkFBeUIsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3RELENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLGtEQUFrRCxFQUFFO1lBQ3JELE1B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RUFBRSxXQUFXLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQztZQUUzRSxXQUFXLENBQUMsTUFBTSxFQUFFLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUN4QyxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgJ3Nob3VsZCc7XG5pbXBvcnQgeyBCaXRHb0FQSSB9IGZyb20gJy4uLy4uL3NyYy9iaXRnb0FQSSc7XG5pbXBvcnQgeyBQcm94eUFnZW50IH0gZnJvbSAncHJveHktYWdlbnQnO1xuaW1wb3J0ICogYXMgc2lub24gZnJvbSAnc2lub24nO1xuaW1wb3J0IG5vY2sgZnJvbSAnbm9jayc7XG5pbXBvcnQgdHlwZSB7IElIbWFjQXV0aFN0cmF0ZWd5IH0gZnJvbSAnQGJpdGdvL3Nkay1obWFjJztcblxuZGVzY3JpYmUoJ0NvbnN0cnVjdG9yJywgZnVuY3Rpb24gKCkge1xuICBkZXNjcmliZSgnY29va2llc1Byb3BhZ2F0aW9uRW5hYmxlZCBhcmd1bWVudCcsIGZ1bmN0aW9uICgpIHtcbiAgICBpdCgnY29va2llc1Byb3BhZ2F0aW9uRW5hYmxlZCBpcyBlbmFibGVkIGV4cGxpY2l0bHknLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBiaXRnbyA9IG5ldyBCaXRHb0FQSSh7XG4gICAgICAgIGVudjogJ2N1c3RvbScsXG4gICAgICAgIGN1c3RvbVJvb3RVUkk6ICdodHRwczovL2FwcC5leGFtcGxlLmxvY2FsJyxcbiAgICAgICAgY29va2llc1Byb3BhZ2F0aW9uRW5hYmxlZDogdHJ1ZSxcbiAgICAgIH0pO1xuXG4gICAgICBiaXRnby5zaG91bGQuaGF2ZS5wcm9wZXJ0eSgnY29va2llc1Byb3BhZ2F0aW9uRW5hYmxlZCcpO1xuICAgICAgYml0Z28uY29va2llc1Byb3BhZ2F0aW9uRW5hYmxlZC5zaG91bGQuZXF1YWwodHJ1ZSk7XG4gICAgfSk7XG5cbiAgICBpdCgnY29va2llc1Byb3BhZ2F0aW9uRW5hYmxlZCBpcyBkaXNhYmxlZCBleHBsaWNpdGx5JywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgYml0Z28gPSBuZXcgQml0R29BUEkoe1xuICAgICAgICBlbnY6ICdjdXN0b20nLFxuICAgICAgICBjdXN0b21Sb290VVJJOiAnaHR0cHM6Ly9hcHAuZXhhbXBsZS5sb2NhbCcsXG4gICAgICAgIGNvb2tpZXNQcm9wYWdhdGlvbkVuYWJsZWQ6IGZhbHNlLFxuICAgICAgfSk7XG5cbiAgICAgIGJpdGdvLnNob3VsZC5oYXZlLnByb3BlcnR5KCdjb29raWVzUHJvcGFnYXRpb25FbmFibGVkJyk7XG4gICAgICBiaXRnby5jb29raWVzUHJvcGFnYXRpb25FbmFibGVkLnNob3VsZC5lcXVhbChmYWxzZSk7XG4gICAgfSk7XG5cbiAgICBpdCgnY29va2llc1Byb3BhZ2F0aW9uRW5hYmxlZCBpcyBkaXNhYmxlZCBieSBkZWZhdWx0JywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgYml0Z28gPSBuZXcgQml0R29BUEkoe1xuICAgICAgICBlbnY6ICdjdXN0b20nLFxuICAgICAgICBjdXN0b21Sb290VVJJOiAnaHR0cHM6Ly9hcHAuZXhhbXBsZS5sb2NhbCcsXG4gICAgICB9KTtcblxuICAgICAgYml0Z28uc2hvdWxkLmhhdmUucHJvcGVydHkoJ2Nvb2tpZXNQcm9wYWdhdGlvbkVuYWJsZWQnKTtcbiAgICAgIGJpdGdvLmNvb2tpZXNQcm9wYWdhdGlvbkVuYWJsZWQuc2hvdWxkLmVxdWFsKGZhbHNlKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ3JlcXVlc3RJZFByZWZpeCBhcmd1bWVudCcsIGZ1bmN0aW9uICgpIHtcbiAgICBhZnRlckVhY2goZnVuY3Rpb24gKCkge1xuICAgICAgbm9jay5jbGVhbkFsbCgpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBwcmVwZW5kIHJlcXVlc3RJZFByZWZpeCB0byBSZXF1ZXN0LUlEIGhlYWRlciB3aGVuIHNldCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGJpdGdvID0gbmV3IEJpdEdvQVBJKHtcbiAgICAgICAgZW52OiAnY3VzdG9tJyxcbiAgICAgICAgY3VzdG9tUm9vdFVSSTogJ2h0dHBzOi8vYXBwLmV4YW1wbGUubG9jYWwnLFxuICAgICAgICByZXF1ZXN0SWRQcmVmaXg6ICd0ZXN0LXByZWZpeC0nLFxuICAgICAgfSk7XG5cbiAgICAgIGNvbnN0IHNjb3BlID0gbm9jaygnaHR0cHM6Ly9hcHAuZXhhbXBsZS5sb2NhbCcpXG4gICAgICAgIC5nZXQoJy9hcGkvdjEvcGluZycpXG4gICAgICAgIC5tYXRjaEhlYWRlcignUmVxdWVzdC1JRCcsIC9edGVzdC1wcmVmaXgtLylcbiAgICAgICAgLnJlcGx5KDIwMCwgeyBzdGF0dXM6ICdvaycgfSk7XG5cbiAgICAgIGF3YWl0IGJpdGdvLnBpbmcoe1xuICAgICAgICByZXFJZDoge1xuICAgICAgICAgIHRvU3RyaW5nOiAoKSA9PiAnMTIzNDUnLFxuICAgICAgICAgIGluYzogKCkgPT4ge1xuICAgICAgICAgICAgLyogbW9jayAqL1xuICAgICAgICAgIH0sXG4gICAgICAgIH0gYXMgYW55LFxuICAgICAgfSk7XG5cbiAgICAgIHNjb3BlLmlzRG9uZSgpLnNob3VsZC5iZS50cnVlKCk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIG5vdCBtb2RpZnkgUmVxdWVzdC1JRCBoZWFkZXIgd2hlbiByZXF1ZXN0SWRQcmVmaXggaXMgbm90IHNldCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGJpdGdvID0gbmV3IEJpdEdvQVBJKHtcbiAgICAgICAgZW52OiAnY3VzdG9tJyxcbiAgICAgICAgY3VzdG9tUm9vdFVSSTogJ2h0dHBzOi8vYXBwLmV4YW1wbGUubG9jYWwnLFxuICAgICAgfSk7XG5cbiAgICAgIGNvbnN0IHNjb3BlID0gbm9jaygnaHR0cHM6Ly9hcHAuZXhhbXBsZS5sb2NhbCcpXG4gICAgICAgIC5nZXQoJy9hcGkvdjEvcGluZycpXG4gICAgICAgIC5tYXRjaEhlYWRlcignUmVxdWVzdC1JRCcsIC9eMTIzNDUkLylcbiAgICAgICAgLnJlcGx5KDIwMCwgeyBzdGF0dXM6ICdvaycgfSk7XG5cbiAgICAgIGF3YWl0IGJpdGdvLnBpbmcoe1xuICAgICAgICByZXFJZDoge1xuICAgICAgICAgIHRvU3RyaW5nOiAoKSA9PiAnMTIzNDUnLFxuICAgICAgICAgIGluYzogKCkgPT4ge1xuICAgICAgICAgICAgLyogbW9jayAqL1xuICAgICAgICAgIH0sXG4gICAgICAgIH0gYXMgYW55LFxuICAgICAgfSk7XG5cbiAgICAgIHNjb3BlLmlzRG9uZSgpLnNob3VsZC5iZS50cnVlKCk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGNvcnJlY3RseSBmb3JtYXQgUmVxdWVzdC1JRCB3aXRoIHByZWZpeCBhbmQgbnVtZXJpYyBzZXF1ZW5jZScsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGJpdGdvID0gbmV3IEJpdEdvQVBJKHtcbiAgICAgICAgZW52OiAnY3VzdG9tJyxcbiAgICAgICAgY3VzdG9tUm9vdFVSSTogJ2h0dHBzOi8vYXBwLmV4YW1wbGUubG9jYWwnLFxuICAgICAgICByZXF1ZXN0SWRQcmVmaXg6ICdteWFwcC12MS0nLFxuICAgICAgfSk7XG5cbiAgICAgIGNvbnN0IHNjb3BlID0gbm9jaygnaHR0cHM6Ly9hcHAuZXhhbXBsZS5sb2NhbCcpXG4gICAgICAgIC5nZXQoJy9hcGkvdjEvcGluZycpXG4gICAgICAgIC5tYXRjaEhlYWRlcignUmVxdWVzdC1JRCcsICdteWFwcC12MS10cmFjZS0xMjMnKVxuICAgICAgICAucmVwbHkoMjAwLCB7IHN0YXR1czogJ29rJyB9KTtcblxuICAgICAgYXdhaXQgYml0Z28ucGluZyh7XG4gICAgICAgIHJlcUlkOiB7XG4gICAgICAgICAgdG9TdHJpbmc6ICgpID0+ICd0cmFjZS0xMjMnLFxuICAgICAgICAgIGluYzogKCkgPT4ge1xuICAgICAgICAgICAgLyogbW9jayAqL1xuICAgICAgICAgIH0sXG4gICAgICAgIH0gYXMgYW55LFxuICAgICAgfSk7XG5cbiAgICAgIHNjb3BlLmlzRG9uZSgpLnNob3VsZC5iZS50cnVlKCk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHdvcmsgd2l0aCBlbXB0eSBzdHJpbmcgcHJlZml4JywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgYml0Z28gPSBuZXcgQml0R29BUEkoe1xuICAgICAgICBlbnY6ICdjdXN0b20nLFxuICAgICAgICBjdXN0b21Sb290VVJJOiAnaHR0cHM6Ly9hcHAuZXhhbXBsZS5sb2NhbCcsXG4gICAgICAgIHJlcXVlc3RJZFByZWZpeDogJycsXG4gICAgICB9KTtcblxuICAgICAgY29uc3Qgc2NvcGUgPSBub2NrKCdodHRwczovL2FwcC5leGFtcGxlLmxvY2FsJylcbiAgICAgICAgLmdldCgnL2FwaS92MS9waW5nJylcbiAgICAgICAgLm1hdGNoSGVhZGVyKCdSZXF1ZXN0LUlEJywgJ2FiYy0xMjMnKVxuICAgICAgICAucmVwbHkoMjAwLCB7IHN0YXR1czogJ29rJyB9KTtcblxuICAgICAgYXdhaXQgYml0Z28ucGluZyh7XG4gICAgICAgIHJlcUlkOiB7XG4gICAgICAgICAgdG9TdHJpbmc6ICgpID0+ICdhYmMtMTIzJyxcbiAgICAgICAgICBpbmM6ICgpID0+IHtcbiAgICAgICAgICAgIC8qIG1vY2sgKi9cbiAgICAgICAgICB9LFxuICAgICAgICB9IGFzIGFueSxcbiAgICAgIH0pO1xuXG4gICAgICBzY29wZS5pc0RvbmUoKS5zaG91bGQuYmUudHJ1ZSgpO1xuICAgIH0pO1xuICB9KTtcbiAgZGVzY3JpYmUoJ2h0dHAgcHJveHkgYWdlbnQnLCBmdW5jdGlvbiAoKSB7XG4gICAgaXQoJ2h0dHAgcHJveHkgYWdlbnQgc2hhbGwgYmUgY3JlYXRlZCB3aGVuIHByb3h5KGN1c3RvbVByb3h5YWdlbnQpIGlzIHNldCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGN1c3RvbVByb3h5QWdlbnQgPSBuZXcgUHJveHlBZ2VudCh7XG4gICAgICAgIGdldFByb3h5Rm9yVXJsOiAoKSA9PiAnaHR0cDovL2xvY2FsaG9zdDozMDAwJyxcbiAgICAgIH0pO1xuICAgICAgY29uc3QgYml0Z28gPSBuZXcgQml0R29BUEkoe1xuICAgICAgICBlbnY6ICdjdXN0b20nLFxuICAgICAgICBjdXN0b21Sb290VVJJOiAnaHR0cHM6Ly9hcHAuZXhhbXBsZS5sb2NhbCcsXG4gICAgICAgIGN1c3RvbVByb3h5QWdlbnQsXG4gICAgICB9KTtcblxuICAgICAgYml0Z28uc2hvdWxkLmhhdmUucHJvcGVydHkoJ19jdXN0b21Qcm94eUFnZW50JywgY3VzdG9tUHJveHlBZ2VudCk7XG4gICAgfSk7XG5cbiAgICBpdCgnYml0Z28gYXBpIGlzIHN0aWxsIGluaXRpYXRlZCB3aGVuIHByb3h5KGN1c3RvbVByb3h5QWdlbnQpIGlzIG5vdCBzZXQnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBiaXRnbyA9IG5ldyBCaXRHb0FQSSh7XG4gICAgICAgIGVudjogJ2N1c3RvbScsXG4gICAgICAgIGN1c3RvbVJvb3RVUkk6ICdodHRwczovL2FwcC5leGFtcGxlLmxvY2FsJyxcbiAgICAgIH0pO1xuXG4gICAgICBiaXRnby5zaG91bGQuaGF2ZS5wcm9wZXJ0eSgnX2N1c3RvbVByb3h5QWdlbnQnLCB1bmRlZmluZWQpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgndmVyaWZ5QWRkcmVzcycsIGZ1bmN0aW9uICgpIHtcbiAgICBpdCgnc2hvdWxkIHN1Y2Nlc3NmdWxseSB2ZXJpZnkgYSBiYXNlNTggYWRkcmVzcycsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGJpdGdvID0gbmV3IEJpdEdvQVBJKHtcbiAgICAgICAgZW52OiAndGVzdCcsXG4gICAgICB9KTtcblxuICAgICAgYml0Z28udmVyaWZ5QWRkcmVzcyh7IGFkZHJlc3M6ICcyTjZwYVQyVFU0TjFYcGFaakppQXBXSlhvZXlyTDNVV3BrWicgfSkuc2hvdWxkLmJlLnRydWUoKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgc3VjY2Vzc2Z1bGx5IHZlcmlmeSBhIGJlY2gzMiBhZGRyZXNzJywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgYml0Z28gPSBuZXcgQml0R29BUEkoe1xuICAgICAgICBlbnY6ICd0ZXN0JyxcbiAgICAgIH0pO1xuXG4gICAgICBiaXRnb1xuICAgICAgICAudmVyaWZ5QWRkcmVzcyh7IGFkZHJlc3M6ICd0YjFxZ3V6eWs0dzZrYXF0cHNjenM1YWowdzhyNzU5OGpxMzZlZ204ZTk4d3FwaDNyd21leDY4c2VzbGdzZycgfSlcbiAgICAgICAgLnNob3VsZC5iZS50cnVlKCk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCd1cmwnLCBmdW5jdGlvbiAoKSB7XG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gdGhlIGNvcnJlY3QgVVJMIGZvciB2ZXJzaW9uIDEnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBiaXRnbyA9IG5ldyBCaXRHb0FQSSh7XG4gICAgICAgIGVudjogJ3Rlc3QnLFxuICAgICAgICBjdXN0b21Sb290VVJJOiAnaHR0cHM6Ly90ZXN0LmJpdGdvLmNvbScsXG4gICAgICB9KTtcbiAgICAgIGNvbnN0IHBhdGggPSAnL3Rlc3QtcGF0aCc7XG4gICAgICBjb25zdCBleHBlY3RlZFVybCA9ICdodHRwczovL3Rlc3QuYml0Z28uY29tL2FwaS92MS90ZXN0LXBhdGgnO1xuICAgICAgY29uc3QgcmVzdWx0ID0gYml0Z28udXJsKHBhdGgsIDEpO1xuICAgICAgcmVzdWx0LnNob3VsZC5lcXVhbChleHBlY3RlZFVybCk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHJldHVybiB0aGUgY29ycmVjdCBVUkwgZm9yIHZlcnNpb24gMicsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGJpdGdvID0gbmV3IEJpdEdvQVBJKHtcbiAgICAgICAgZW52OiAndGVzdCcsXG4gICAgICAgIGN1c3RvbVJvb3RVUkk6ICdodHRwczovL3Rlc3QuYml0Z28uY29tJyxcbiAgICAgIH0pO1xuICAgICAgY29uc3QgcGF0aCA9ICcvdGVzdC1wYXRoJztcbiAgICAgIGNvbnN0IGV4cGVjdGVkVXJsID0gJ2h0dHBzOi8vdGVzdC5iaXRnby5jb20vYXBpL3YyL3Rlc3QtcGF0aCc7XG4gICAgICBjb25zdCByZXN1bHQgPSBiaXRnby51cmwocGF0aCwgMik7XG4gICAgICByZXN1bHQuc2hvdWxkLmVxdWFsKGV4cGVjdGVkVXJsKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgcmV0dXJuIHRoZSBjb3JyZWN0IFVSTCBmb3IgdmVyc2lvbiAzJywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgYml0Z28gPSBuZXcgQml0R29BUEkoe1xuICAgICAgICBlbnY6ICd0ZXN0JyxcbiAgICAgICAgY3VzdG9tUm9vdFVSSTogJ2h0dHBzOi8vdGVzdC5iaXRnby5jb20nLFxuICAgICAgfSk7XG4gICAgICBjb25zdCBwYXRoID0gJy90ZXN0LXBhdGgnO1xuICAgICAgY29uc3QgZXhwZWN0ZWRVcmwgPSAnaHR0cHM6Ly90ZXN0LmJpdGdvLmNvbS9hcGkvdjMvdGVzdC1wYXRoJztcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGJpdGdvLnVybChwYXRoLCAzKTtcbiAgICAgIHJlc3VsdC5zaG91bGQuZXF1YWwoZXhwZWN0ZWRVcmwpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBkZWZhdWx0IHRvIHZlcnNpb24gMSBpZiBubyB2ZXJzaW9uIGlzIHByb3ZpZGVkJywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgYml0Z28gPSBuZXcgQml0R29BUEkoe1xuICAgICAgICBlbnY6ICd0ZXN0JyxcbiAgICAgICAgY3VzdG9tUm9vdFVSSTogJ2h0dHBzOi8vdGVzdC5iaXRnby5jb20nLFxuICAgICAgfSk7XG4gICAgICBjb25zdCBwYXRoID0gJy90ZXN0LXBhdGgnO1xuICAgICAgY29uc3QgZXhwZWN0ZWRVcmwgPSAnaHR0cHM6Ly90ZXN0LmJpdGdvLmNvbS9hcGkvdjEvdGVzdC1wYXRoJztcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGJpdGdvLnVybChwYXRoKTtcbiAgICAgIHJlc3VsdC5zaG91bGQuZXF1YWwoZXhwZWN0ZWRVcmwpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnZGVjcnlwdEtleXMnLCBmdW5jdGlvbiAoKSB7XG4gICAgbGV0IGJpdGdvOiBCaXRHb0FQSTtcblxuICAgIGJlZm9yZUVhY2goZnVuY3Rpb24gKCkge1xuICAgICAgYml0Z28gPSBuZXcgQml0R29BUEkoe1xuICAgICAgICBlbnY6ICd0ZXN0JyxcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgYWZ0ZXJFYWNoKGZ1bmN0aW9uICgpIHtcbiAgICAgIHNpbm9uLnJlc3RvcmUoKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgdGhyb3cgaWYgbm8gcGFyYW1zIGFyZSBwcm92aWRlZCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgLSBpbnRlbnRpb25hbGx5IGNhbGxpbmcgd2l0aCBubyBwYXJhbXMgZm9yIHRlc3RcbiAgICAgICAgYml0Z28uZGVjcnlwdEtleXMoKTtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdFeHBlY3RlZCBlcnJvciBidXQgZ290IG5vbmUnKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgZS5tZXNzYWdlLnNob3VsZC5jb250YWluRXFsKCdNaXNzaW5nIHBhcmFtZXRlcicpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCB0aHJvdyBpZiB3YWxsZXRJZEVuY3J5cHRlZEtleVBhaXJzIGlzIG1pc3NpbmcnLCBmdW5jdGlvbiAoKSB7XG4gICAgICB0cnkge1xuICAgICAgICAvLyBAdHMtZXhwZWN0LWVycm9yIC0gaW50ZW50aW9uYWxseSBtaXNzaW5nIHJlcXVpcmVkIHBhcmFtXG4gICAgICAgIGJpdGdvLmRlY3J5cHRLZXlzKHsgcGFzc3dvcmQ6ICdwYXNzd29yZDEyMycgfSk7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignRXhwZWN0ZWQgZXJyb3IgYnV0IGdvdCBub25lJyk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGUubWVzc2FnZS5zaG91bGQuY29udGFpbkVxbCgnTWlzc2luZyBwYXJhbWV0ZXI6IHdhbGxldElkRW5jcnlwdGVkS2V5UGFpcnMnKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgdGhyb3cgaWYgcGFzc3dvcmQgaXMgbWlzc2luZycsIGZ1bmN0aW9uICgpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgLSBpbnRlbnRpb25hbGx5IG1pc3NpbmcgcmVxdWlyZWQgcGFyYW1cbiAgICAgICAgYml0Z28uZGVjcnlwdEtleXMoeyB3YWxsZXRJZEVuY3J5cHRlZEtleVBhaXJzOiBbXSB9KTtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdFeHBlY3RlZCBlcnJvciBidXQgZ290IG5vbmUnKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgZS5tZXNzYWdlLnNob3VsZC5jb250YWluRXFsKCdNaXNzaW5nIHBhcmFtZXRlcjogcGFzc3dvcmQnKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgdGhyb3cgaWYgd2FsbGV0SWRFbmNyeXB0ZWRLZXlQYWlycyBpcyBub3QgYW4gYXJyYXknLCBmdW5jdGlvbiAoKSB7XG4gICAgICB0cnkge1xuICAgICAgICAvLyBAdHMtZXhwZWN0LWVycm9yIC0gaW50ZW50aW9uYWxseSBwcm92aWRpbmcgd3JvbmcgdHlwZVxuICAgICAgICBiaXRnby5kZWNyeXB0S2V5cyh7IHdhbGxldElkRW5jcnlwdGVkS2V5UGFpcnM6ICdub3QgYW4gYXJyYXknLCBwYXNzd29yZDogJ3Bhc3N3b3JkMTIzJyB9KTtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdFeHBlY3RlZCBlcnJvciBidXQgZ290IG5vbmUnKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgZS5tZXNzYWdlLnNob3VsZC5lcXVhbCgnd2FsbGV0SWRFbmNyeXB0ZWRLZXlQYWlycyBtdXN0IGJlIGFuIGFycmF5Jyk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHJldHVybiBlbXB0eSBhcnJheSBmb3IgZW1wdHkgd2FsbGV0SWRFbmNyeXB0ZWRLZXlQYWlycycsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGJpdGdvLmRlY3J5cHRLZXlzKHsgd2FsbGV0SWRFbmNyeXB0ZWRLZXlQYWlyczogW10sIHBhc3N3b3JkOiAncGFzc3dvcmQxMjMnIH0pO1xuICAgICAgcmVzdWx0LnNob3VsZC5iZS5hbi5BcnJheSgpO1xuICAgICAgcmVzdWx0LnNob3VsZC5iZS5lbXB0eSgpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCB0aHJvdyBpZiBhbnkgd2FsbGV0SWQgaXMgbWlzc2luZyBvciBub3QgYSBzdHJpbmcnLCBmdW5jdGlvbiAoKSB7XG4gICAgICB0cnkge1xuICAgICAgICBiaXRnby5kZWNyeXB0S2V5cyh7XG4gICAgICAgICAgd2FsbGV0SWRFbmNyeXB0ZWRLZXlQYWlyczogW1xuICAgICAgICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvciAtIGludGVudGlvbmFsbHkgbWlzc2luZyB3YWxsZXRJZFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBlbmNyeXB0ZWRQcnY6ICdlbmNyeXB0ZWQtZGF0YScsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIF0sXG4gICAgICAgICAgcGFzc3dvcmQ6ICdwYXNzd29yZDEyMycsXG4gICAgICAgIH0pO1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0V4cGVjdGVkIGVycm9yIGJ1dCBnb3Qgbm9uZScpO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBlLm1lc3NhZ2Uuc2hvdWxkLmVxdWFsKCdlYWNoIGtleSBwYWlyIG11c3QgaGF2ZSBhIHN0cmluZyB3YWxsZXRJZCcpO1xuICAgICAgfVxuXG4gICAgICB0cnkge1xuICAgICAgICBiaXRnby5kZWNyeXB0S2V5cyh7XG4gICAgICAgICAgd2FsbGV0SWRFbmNyeXB0ZWRLZXlQYWlyczogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAvLyBAdHMtZXhwZWN0LWVycm9yIC0gaW50ZW50aW9uYWxseSBwcm92aWRpbmcgd3JvbmcgdHlwZVxuICAgICAgICAgICAgICB3YWxsZXRJZDogMTIzLFxuICAgICAgICAgICAgICBlbmNyeXB0ZWRQcnY6ICdlbmNyeXB0ZWQtZGF0YScsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIF0sXG4gICAgICAgICAgcGFzc3dvcmQ6ICdwYXNzd29yZDEyMycsXG4gICAgICAgIH0pO1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0V4cGVjdGVkIGVycm9yIGJ1dCBnb3Qgbm9uZScpO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBlLm1lc3NhZ2Uuc2hvdWxkLmVxdWFsKCdlYWNoIGtleSBwYWlyIG11c3QgaGF2ZSBhIHN0cmluZyB3YWxsZXRJZCcpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCB0aHJvdyBpZiBhbnkgZW5jcnlwdGVkUHJ2IGlzIG1pc3Npbmcgb3Igbm90IGEgc3RyaW5nJywgZnVuY3Rpb24gKCkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgYml0Z28uZGVjcnlwdEtleXMoe1xuICAgICAgICAgIHdhbGxldElkRW5jcnlwdGVkS2V5UGFpcnM6IFtcbiAgICAgICAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgLSBpbnRlbnRpb25hbGx5IG1pc3NpbmcgZW5jcnlwdGVkUHJ2XG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIHdhbGxldElkOiAnd2FsbGV0LWlkLTEnLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICBdLFxuICAgICAgICAgIHBhc3N3b3JkOiAncGFzc3dvcmQxMjMnLFxuICAgICAgICB9KTtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdFeHBlY3RlZCBlcnJvciBidXQgZ290IG5vbmUnKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgZS5tZXNzYWdlLnNob3VsZC5lcXVhbCgnZWFjaCBrZXkgcGFpciBtdXN0IGhhdmUgYSBzdHJpbmcgZW5jcnlwdGVkUHJ2Jyk7XG4gICAgICB9XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIGJpdGdvLmRlY3J5cHRLZXlzKHtcbiAgICAgICAgICB3YWxsZXRJZEVuY3J5cHRlZEtleVBhaXJzOiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIHdhbGxldElkOiAnd2FsbGV0LWlkLTEnLFxuICAgICAgICAgICAgICAvLyBAdHMtZXhwZWN0LWVycm9yIC0gaW50ZW50aW9uYWxseSBwcm92aWRpbmcgd3JvbmcgdHlwZVxuICAgICAgICAgICAgICBlbmNyeXB0ZWRQcnY6IDEyMyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgXSxcbiAgICAgICAgICBwYXNzd29yZDogJ3Bhc3N3b3JkMTIzJyxcbiAgICAgICAgfSk7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignRXhwZWN0ZWQgZXJyb3IgYnV0IGdvdCBub25lJyk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGUubWVzc2FnZS5zaG91bGQuZXF1YWwoJ2VhY2gga2V5IHBhaXIgbXVzdCBoYXZlIGEgc3RyaW5nIGVuY3J5cHRlZFBydicpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gd2FsbGV0SWRzIG9mIGtleXMgdGhhdCBmYWlsZWQgdG8gZGVjcnlwdCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgIC8vIENyZWF0ZSBhIHN0dWIgZm9yIHRoZSBkZWNyeXB0IG1ldGhvZFxuICAgICAgY29uc3QgZGVjcnlwdFN0dWIgPSBzaW5vbi5zdHViKGJpdGdvLCAnZGVjcnlwdCcpO1xuXG4gICAgICAvLyBNYWtlIGl0IHN1Y2NlZWQgZm9yIGZpcnN0IHdhbGxldCBhbmQgZmFpbCBmb3Igc2Vjb25kIHdhbGxldFxuICAgICAgZGVjcnlwdFN0dWIub25GaXJzdENhbGwoKS5yZXR1cm5zKCdkZWNyeXB0ZWQta2V5LTEnKTtcbiAgICAgIGRlY3J5cHRTdHViLm9uU2Vjb25kQ2FsbCgpLnRocm93cyhuZXcgRXJyb3IoJ2RlY3J5cHRpb24gZmFpbGVkJykpO1xuXG4gICAgICBjb25zdCByZXN1bHQgPSBiaXRnby5kZWNyeXB0S2V5cyh7XG4gICAgICAgIHdhbGxldElkRW5jcnlwdGVkS2V5UGFpcnM6IFtcbiAgICAgICAgICB7IHdhbGxldElkOiAnd2FsbGV0LWlkLTEnLCBlbmNyeXB0ZWRQcnY6ICdlbmNyeXB0ZWQtZGF0YS0xJyB9LFxuICAgICAgICAgIHsgd2FsbGV0SWQ6ICd3YWxsZXQtaWQtMicsIGVuY3J5cHRlZFBydjogJ2VuY3J5cHRlZC1kYXRhLTInIH0sXG4gICAgICAgIF0sXG4gICAgICAgIHBhc3N3b3JkOiAncGFzc3dvcmQxMjMnLFxuICAgICAgfSk7XG5cbiAgICAgIHJlc3VsdC5zaG91bGQuYmUuYW4uQXJyYXkoKTtcbiAgICAgIHJlc3VsdC5zaG91bGQuaGF2ZS5sZW5ndGgoMSk7XG4gICAgICByZXN1bHRbMF0uc2hvdWxkLmVxdWFsKCd3YWxsZXQtaWQtMicpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBjb3JyZWN0bHkgcHJvY2VzcyBtdWx0aXBsZSB3YWxsZXQga2V5cycsIGZ1bmN0aW9uICgpIHtcbiAgICAgIC8vIENyZWF0ZSBhIHNweSBvbiB0aGUgZGVjcnlwdCBtZXRob2RcbiAgICAgIGNvbnN0IGRlY3J5cHRTdHViID0gc2lub24uc3R1YihiaXRnbywgJ2RlY3J5cHQnKTtcblxuICAgICAgLy8gQ29uZmlndXJlIHRoZSBzdHViIHRvIHRocm93IGZvciBzcGVjaWZpYyB3YWxsZXRzXG4gICAgICBkZWNyeXB0U3R1YlxuICAgICAgICAud2l0aEFyZ3MoeyBpbnB1dDogJ2VuY3J5cHRlZC1kYXRhLTInLCBwYXNzd29yZDogJ3Bhc3N3b3JkMTIzJyB9KVxuICAgICAgICAudGhyb3dzKG5ldyBFcnJvcignZGVjcnlwdGlvbiBmYWlsZWQnKSk7XG4gICAgICBkZWNyeXB0U3R1YlxuICAgICAgICAud2l0aEFyZ3MoeyBpbnB1dDogJ2VuY3J5cHRlZC1kYXRhLTQnLCBwYXNzd29yZDogJ3Bhc3N3b3JkMTIzJyB9KVxuICAgICAgICAudGhyb3dzKG5ldyBFcnJvcignZGVjcnlwdGlvbiBmYWlsZWQnKSk7XG4gICAgICBkZWNyeXB0U3R1Yi5yZXR1cm5zKCdzdWNjZXNzJyk7IC8vIERlZmF1bHQgcmV0dXJuIGZvciBvdGhlciBjYWxsc1xuXG4gICAgICBjb25zdCByZXN1bHQgPSBiaXRnby5kZWNyeXB0S2V5cyh7XG4gICAgICAgIHdhbGxldElkRW5jcnlwdGVkS2V5UGFpcnM6IFtcbiAgICAgICAgICB7IHdhbGxldElkOiAnd2FsbGV0LWlkLTEnLCBlbmNyeXB0ZWRQcnY6ICdlbmNyeXB0ZWQtZGF0YS0xJyB9LFxuICAgICAgICAgIHsgd2FsbGV0SWQ6ICd3YWxsZXQtaWQtMicsIGVuY3J5cHRlZFBydjogJ2VuY3J5cHRlZC1kYXRhLTInIH0sXG4gICAgICAgICAgeyB3YWxsZXRJZDogJ3dhbGxldC1pZC0zJywgZW5jcnlwdGVkUHJ2OiAnZW5jcnlwdGVkLWRhdGEtMycgfSxcbiAgICAgICAgICB7IHdhbGxldElkOiAnd2FsbGV0LWlkLTQnLCBlbmNyeXB0ZWRQcnY6ICdlbmNyeXB0ZWQtZGF0YS00JyB9LFxuICAgICAgICBdLFxuICAgICAgICBwYXNzd29yZDogJ3Bhc3N3b3JkMTIzJyxcbiAgICAgIH0pO1xuXG4gICAgICAvLyBTaG91bGQgYmUgY2FsbGVkIG9uY2UgZm9yIGVhY2ggd2FsbGV0XG4gICAgICBkZWNyeXB0U3R1Yi5jYWxsQ291bnQuc2hvdWxkLmVxdWFsKDQpO1xuXG4gICAgICAvLyBTaG91bGQgaW5jbHVkZSBvbmx5IHRoZSBmYWlsZWQgd2FsbGV0IElEc1xuICAgICAgcmVzdWx0LnNob3VsZC5iZS5hbi5BcnJheSgpO1xuICAgICAgcmVzdWx0LnNob3VsZC5oYXZlLmxlbmd0aCgyKTtcbiAgICAgIHJlc3VsdC5zaG91bGQuY29udGFpbkRlZXAoWyd3YWxsZXQtaWQtMicsICd3YWxsZXQtaWQtNCddKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ1VzZXItQWdlbnQgaGVhZGVyIGJhc2VkIG9uIGVudmlyb25tZW50JywgZnVuY3Rpb24gKCkge1xuICAgIGFmdGVyRWFjaChmdW5jdGlvbiAoKSB7XG4gICAgICBub2NrLmNsZWFuQWxsKCk7XG4gICAgICBzaW5vbi5yZXN0b3JlKCk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHNldCBVc2VyLUFnZW50IGhlYWRlciB3aGVuIHJ1bm5pbmcgaW4gTm9kZS5qcyAodHlwZW9mIHdpbmRvdyA9PT0gdW5kZWZpbmVkKScsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGJpdGdvID0gbmV3IEJpdEdvQVBJKHtcbiAgICAgICAgZW52OiAnY3VzdG9tJyxcbiAgICAgICAgY3VzdG9tUm9vdFVSSTogJ2h0dHBzOi8vYXBwLmV4YW1wbGUubG9jYWwnLFxuICAgICAgICB1c2VyQWdlbnQ6ICdUZXN0QWdlbnQvMS4wJyxcbiAgICAgIH0pO1xuXG4gICAgICAvLyBFbnN1cmUgd2UncmUgaW4gYSBOb2RlLmpzIGVudmlyb25tZW50IGJ5IHZlcmlmeWluZyB3aW5kb3cgaXMgdW5kZWZpbmVkXG4gICAgICAodHlwZW9mIHdpbmRvdykuc2hvdWxkLmVxdWFsKCd1bmRlZmluZWQnKTtcblxuICAgICAgY29uc3Qgc2NvcGUgPSBub2NrKCdodHRwczovL2FwcC5leGFtcGxlLmxvY2FsJylcbiAgICAgICAgLmdldCgnL2FwaS92MS9waW5nJylcbiAgICAgICAgLm1hdGNoSGVhZGVyKCdVc2VyLUFnZW50JywgJ1Rlc3RBZ2VudC8xLjAnKVxuICAgICAgICAucmVwbHkoMjAwLCB7IHN0YXR1czogJ29rJyB9KTtcblxuICAgICAgYXdhaXQgYml0Z28ucGluZyh7XG4gICAgICAgIHJlcUlkOiB7XG4gICAgICAgICAgdG9TdHJpbmc6ICgpID0+ICd0ZXN0LTEyMycsXG4gICAgICAgICAgaW5jOiAoKSA9PiB7XG4gICAgICAgICAgICAvKiBtb2NrICovXG4gICAgICAgICAgfSxcbiAgICAgICAgfSBhcyBhbnksXG4gICAgICB9KTtcblxuICAgICAgc2NvcGUuaXNEb25lKCkuc2hvdWxkLmJlLnRydWUoKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgbm90IHNldCBVc2VyLUFnZW50IGhlYWRlciB3aGVuIHJ1bm5pbmcgaW4gYnJvd3NlciAodHlwZW9mIHdpbmRvdyAhPT0gdW5kZWZpbmVkKScsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIC8vIE1vY2sgdGhlIHdpbmRvdyBvYmplY3QgdG8gc2ltdWxhdGUgYnJvd3NlciBlbnZpcm9ubWVudFxuICAgICAgY29uc3Qgd2luZG93U3R1YiA9IHsgbG9jYXRpb246ICdtb2NrJyB9O1xuICAgICAgKGdsb2JhbCBhcyBhbnkpLndpbmRvdyA9IHdpbmRvd1N0dWI7XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IGJpdGdvID0gbmV3IEJpdEdvQVBJKHtcbiAgICAgICAgICBlbnY6ICdjdXN0b20nLFxuICAgICAgICAgIGN1c3RvbVJvb3RVUkk6ICdodHRwczovL2FwcC5leGFtcGxlLmxvY2FsJyxcbiAgICAgICAgICB1c2VyQWdlbnQ6ICdUZXN0QWdlbnQvMS4wJyxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgY29uc3Qgc2NvcGUgPSBub2NrKCdodHRwczovL2FwcC5leGFtcGxlLmxvY2FsJylcbiAgICAgICAgICAuZ2V0KCcvYXBpL3YxL3BpbmcnKVxuICAgICAgICAgIC5yZXBseShmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAvLyBWZXJpZnkgVXNlci1BZ2VudCBoZWFkZXIgaXMgTk9UIHNldCB0byBvdXIgY3VzdG9tIHZhbHVlXG4gICAgICAgICAgICBjb25zdCB1c2VyQWdlbnQgPSB0aGlzLnJlcS5oZWFkZXJzWyd1c2VyLWFnZW50J107XG4gICAgICAgICAgICBpZiAodXNlckFnZW50ICYmIHVzZXJBZ2VudC5pbmNsdWRlcygnVGVzdEFnZW50LzEuMCcpKSB7XG4gICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVXNlci1BZ2VudCBzaG91bGQgbm90IGJlIHNldCBpbiBicm93c2VyIGVudmlyb25tZW50Jyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gWzIwMCwgeyBzdGF0dXM6ICdvaycgfV07XG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgYXdhaXQgYml0Z28ucGluZyh7XG4gICAgICAgICAgcmVxSWQ6IHtcbiAgICAgICAgICAgIHRvU3RyaW5nOiAoKSA9PiAndGVzdC0xMjMnLFxuICAgICAgICAgICAgaW5jOiAoKSA9PiB7XG4gICAgICAgICAgICAgIC8qIG1vY2sgKi9cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSBhcyBhbnksXG4gICAgICAgIH0pO1xuXG4gICAgICAgIHNjb3BlLmlzRG9uZSgpLnNob3VsZC5iZS50cnVlKCk7XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICAvLyBDbGVhbiB1cCB0aGUgZ2xvYmFsIHdpbmRvdyBtb2NrXG4gICAgICAgIGRlbGV0ZSAoZ2xvYmFsIGFzIGFueSkud2luZG93O1xuICAgICAgfVxuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnaG1hY0F1dGhTdHJhdGVneSB0b2tlbiBsaWZlY3ljbGUnLCBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3QgUk9PVCA9ICdodHRwczovL2FwcC5leGFtcGxlLmxvY2FsJztcblxuICAgIC8vIEJ1aWxkcyBhIG1vY2sgc3RyYXRlZ3kgd2hvc2Ugc2V0VG9rZW4gLyBjbGVhclRva2VuIGFyZSBzaW5vbiBzdHVicy5cbiAgICBmdW5jdGlvbiBtYWtlU3RyYXRlZ3kob3ZlcnJpZGVzOiBQYXJ0aWFsPElIbWFjQXV0aFN0cmF0ZWd5PiA9IHt9KToge1xuICAgICAgc3RyYXRlZ3k6IElIbWFjQXV0aFN0cmF0ZWd5O1xuICAgICAgc2V0VG9rZW5TdHViOiBzaW5vbi5TaW5vblN0dWI7XG4gICAgICBjbGVhclRva2VuU3R1Yjogc2lub24uU2lub25TdHViO1xuICAgIH0ge1xuICAgICAgY29uc3Qgc2V0VG9rZW5TdHViID0gc2lub24uc3R1YigpLnJlc29sdmVzKCk7XG4gICAgICBjb25zdCBjbGVhclRva2VuU3R1YiA9IHNpbm9uLnN0dWIoKS5yZXNvbHZlcygpO1xuICAgICAgY29uc3Qgc3RyYXRlZ3k6IElIbWFjQXV0aFN0cmF0ZWd5ID0ge1xuICAgICAgICBjYWxjdWxhdGVSZXF1ZXN0SGVhZGVyczogc2lub24uc3R1YigpLnJlc29sdmVzKHsgaG1hYzogJ2htYWMnLCB0aW1lc3RhbXA6IDEsIHRva2VuSGFzaDogJ2hhc2gnIH0pLFxuICAgICAgICB2ZXJpZnlSZXNwb25zZTogc2lub24uc3R1YigpLnJlc29sdmVzKHtcbiAgICAgICAgICBpc1ZhbGlkOiB0cnVlLFxuICAgICAgICAgIGV4cGVjdGVkSG1hYzogJ2htYWMnLFxuICAgICAgICAgIHNpZ25hdHVyZVN1YmplY3Q6ICcnLFxuICAgICAgICAgIGlzSW5SZXNwb25zZVZhbGlkaXR5V2luZG93OiB0cnVlLFxuICAgICAgICAgIHZlcmlmaWNhdGlvblRpbWU6IERhdGUubm93KCksXG4gICAgICAgIH0pLFxuICAgICAgICBjYWxjdWxhdGVITUFDOiBzaW5vbi5zdHViKCkucmVzb2x2ZXMoJ2hhc2hlZC1wdycpLFxuICAgICAgICBzZXRUb2tlbjogc2V0VG9rZW5TdHViLFxuICAgICAgICBjbGVhclRva2VuOiBjbGVhclRva2VuU3R1YixcbiAgICAgICAgLi4ub3ZlcnJpZGVzLFxuICAgICAgfTtcbiAgICAgIHJldHVybiB7IHN0cmF0ZWd5LCBzZXRUb2tlblN0dWIsIGNsZWFyVG9rZW5TdHViIH07XG4gICAgfVxuXG4gICAgYWZ0ZXJFYWNoKGZ1bmN0aW9uICgpIHtcbiAgICAgIG5vY2suY2xlYW5BbGwoKTtcbiAgICAgIHNpbm9uLnJlc3RvcmUoKTtcbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCdhdXRoZW50aWNhdGUoKScsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGl0KCdjYWxscyBzZXRUb2tlbiB3aXRoIHRoZSBhY2Nlc3NfdG9rZW4gcmVjZWl2ZWQgZnJvbSB0aGUgc2VydmVyJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICBjb25zdCB7IHN0cmF0ZWd5LCBzZXRUb2tlblN0dWIgfSA9IG1ha2VTdHJhdGVneSgpO1xuICAgICAgICBjb25zdCBiaXRnbyA9IG5ldyBCaXRHb0FQSSh7IGVudjogJ2N1c3RvbScsIGN1c3RvbVJvb3RVUkk6IFJPT1QsIGhtYWNBdXRoU3RyYXRlZ3k6IHN0cmF0ZWd5IH0pO1xuXG4gICAgICAgIG5vY2soUk9PVClcbiAgICAgICAgICAucG9zdCgnL2FwaS9hdXRoL3YxL3Nlc3Npb24nKVxuICAgICAgICAgIC5yZXBseSgyMDAsIHtcbiAgICAgICAgICAgIHVzZXI6IHsgdXNlcm5hbWU6ICd0ZXN0QGV4YW1wbGUuY29tJyB9LFxuICAgICAgICAgICAgYWNjZXNzX3Rva2VuOiAndjJ4bXlhY2Nlc3N0b2tlbicsXG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgYXdhaXQgYml0Z28uYXV0aGVudGljYXRlKHsgdXNlcm5hbWU6ICd0ZXN0QGV4YW1wbGUuY29tJywgcGFzc3dvcmQ6ICdodW50ZXIyJyB9KTtcblxuICAgICAgICBzZXRUb2tlblN0dWIuY2FsbGVkT25jZS5zaG91bGQuYmUudHJ1ZSgpO1xuICAgICAgICBzZXRUb2tlblN0dWIuZmlyc3RDYWxsLmFyZ3NbMF0uc2hvdWxkLmVxdWFsKCd2MnhteWFjY2Vzc3Rva2VuJyk7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ2F3YWl0cyBzZXRUb2tlbiBiZWZvcmUgbWFraW5nIGVuc3VyZUVjZGhLZXljaGFpbiByZXF1ZXN0cycsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgLy8gVGhpcyBpcyB0aGUgY29yZSByZWdyZXNzaW9uIHRlc3Q6IGlmIHNldFRva2VuIGlzIG5vdCBhd2FpdGVkLCB0aGVcbiAgICAgICAgLy8gc3RyYXRlZ3kncyBrZXkgbWF0ZXJpYWwgd29uJ3QgYmUgcmVhZHkgYmVmb3JlIGNhbGN1bGF0ZVJlcXVlc3RIZWFkZXJzXG4gICAgICAgIC8vIGlzIGNhbGxlZCBmb3IgdGhlIEdFVCAvdXNlci9zZXR0aW5ncyByZXF1ZXN0LCBhbmQgaXQgd291bGQgdGhyb3cuXG4gICAgICAgIGxldCBrZXlSZWFkeSA9IGZhbHNlO1xuICAgICAgICBjb25zdCB7IHN0cmF0ZWd5IH0gPSBtYWtlU3RyYXRlZ3koe1xuICAgICAgICAgIHNldFRva2VuOiBzaW5vbi5zdHViKCkuY2FsbHNGYWtlKGFzeW5jICgpID0+IHtcbiAgICAgICAgICAgIC8vIFNpbXVsYXRlIG5vbi10cml2aWFsIGFzeW5jIGtleSBkZXJpdmF0aW9uIChsaWtlIGNyeXB0by5zdWJ0bGUuaW1wb3J0S2V5KS5cbiAgICAgICAgICAgIGF3YWl0IG5ldyBQcm9taXNlPHZvaWQ+KChyZXNvbHZlKSA9PiBzZXRJbW1lZGlhdGUocmVzb2x2ZSkpO1xuICAgICAgICAgICAga2V5UmVhZHkgPSB0cnVlO1xuICAgICAgICAgIH0pLFxuICAgICAgICAgIGNhbGN1bGF0ZVJlcXVlc3RIZWFkZXJzOiBzaW5vbi5zdHViKCkuY2FsbHNGYWtlKGFzeW5jICgpID0+IHtcbiAgICAgICAgICAgIGlmICgha2V5UmVhZHkpIHtcbiAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdObyB0b2tlbiBhdmFpbGFibGUuIENhbGwgc2V0VG9rZW4oKSBvciByZXN0b3JlVG9rZW4oKSBmaXJzdC4nKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB7IGhtYWM6ICdobWFjJywgdGltZXN0YW1wOiBEYXRlLm5vdygpLCB0b2tlbkhhc2g6ICdoYXNoJyB9O1xuICAgICAgICAgIH0pLFxuICAgICAgICB9KTtcbiAgICAgICAgY29uc3QgYml0Z28gPSBuZXcgQml0R29BUEkoeyBlbnY6ICdjdXN0b20nLCBjdXN0b21Sb290VVJJOiBST09ULCBobWFjQXV0aFN0cmF0ZWd5OiBzdHJhdGVneSB9KTtcblxuICAgICAgICBub2NrKFJPT1QpXG4gICAgICAgICAgLnBvc3QoJy9hcGkvYXV0aC92MS9zZXNzaW9uJylcbiAgICAgICAgICAucmVwbHkoMjAwLCB7XG4gICAgICAgICAgICB1c2VyOiB7IHVzZXJuYW1lOiAndGVzdEBleGFtcGxlLmNvbScgfSxcbiAgICAgICAgICAgIGFjY2Vzc190b2tlbjogJ3YyeG15dG9rZW4nLFxuICAgICAgICAgIH0pO1xuICAgICAgICAvLyBUaGUgR0VUIC91c2VyL3NldHRpbmdzIHJlcXVlc3QgbWFkZSBieSBlbnN1cmVVc2VyRWNkaEtleWNoYWluSXNDcmVhdGVkXG4gICAgICAgIC8vIG11c3Qgc3VjY2VlZCDigJQgaXQgd291bGQgdGhyb3cgaWYgc2V0VG9rZW4gd2Fzbid0IGF3YWl0ZWQgZmlyc3QuXG4gICAgICAgIG5vY2soUk9PVClcbiAgICAgICAgICAuZ2V0KCcvYXBpL3YxL3VzZXIvc2V0dGluZ3MnKVxuICAgICAgICAgIC5yZXBseSgyMDAsIHtcbiAgICAgICAgICAgIHNldHRpbmdzOiB7IGVjZGhLZXljaGFpbjogJ3hwdWIxMjMnIH0sXG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgYXdhaXQgYml0Z28uYXV0aGVudGljYXRlKHtcbiAgICAgICAgICB1c2VybmFtZTogJ3Rlc3RAZXhhbXBsZS5jb20nLFxuICAgICAgICAgIHBhc3N3b3JkOiAnaHVudGVyMicsXG4gICAgICAgICAgZW5zdXJlRWNkaEtleWNoYWluOiB0cnVlLFxuICAgICAgICB9KTtcblxuICAgICAgICBrZXlSZWFkeS5zaG91bGQuYmUudHJ1ZSgpO1xuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnYXV0aGVudGljYXRlV2l0aFBhc3NrZXkoKScsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHZhbGlkUGFzc2tleSA9IEpTT04uc3RyaW5naWZ5KHtcbiAgICAgICAgaWQ6ICdjcmVkZW50aWFsLWlkJyxcbiAgICAgICAgcmF3SWQ6ICdyYXctaWQnLFxuICAgICAgICB0eXBlOiAncHVibGljLWtleScsXG4gICAgICAgIHJlc3BvbnNlOiB7XG4gICAgICAgICAgYXV0aGVudGljYXRvckRhdGE6ICdhdXRoLWRhdGEnLFxuICAgICAgICAgIGNsaWVudERhdGFKU09OOiAnY2xpZW50LWRhdGEnLFxuICAgICAgICAgIHNpZ25hdHVyZTogJ3NpZycsXG4gICAgICAgICAgdXNlckhhbmRsZTogJ3VzZXItaGFuZGxlLTEyMycsXG4gICAgICAgIH0sXG4gICAgICB9KTtcblxuICAgICAgaXQoJ2NhbGxzIHNldFRva2VuIHdpdGggdGhlIGFjY2Vzc190b2tlbiByZWNlaXZlZCBmcm9tIHRoZSBzZXJ2ZXInLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGNvbnN0IHsgc3RyYXRlZ3ksIHNldFRva2VuU3R1YiB9ID0gbWFrZVN0cmF0ZWd5KCk7XG4gICAgICAgIGNvbnN0IGJpdGdvID0gbmV3IEJpdEdvQVBJKHsgZW52OiAnY3VzdG9tJywgY3VzdG9tUm9vdFVSSTogUk9PVCwgaG1hY0F1dGhTdHJhdGVneTogc3RyYXRlZ3kgfSk7XG5cbiAgICAgICAgbm9jayhST09UKVxuICAgICAgICAgIC5wb3N0KCcvYXBpL2F1dGgvdjEvc2Vzc2lvbicpXG4gICAgICAgICAgLnJlcGx5KDIwMCwge1xuICAgICAgICAgICAgdXNlcjogeyB1c2VybmFtZTogJ3Rlc3RAZXhhbXBsZS5jb20nIH0sXG4gICAgICAgICAgICBhY2Nlc3NfdG9rZW46ICd2MnhwYXNza2V5dG9rZW4nLFxuICAgICAgICAgIH0pO1xuXG4gICAgICAgIGF3YWl0IGJpdGdvLmF1dGhlbnRpY2F0ZVdpdGhQYXNza2V5KHZhbGlkUGFzc2tleSk7XG5cbiAgICAgICAgc2V0VG9rZW5TdHViLmNhbGxlZE9uY2Uuc2hvdWxkLmJlLnRydWUoKTtcbiAgICAgICAgc2V0VG9rZW5TdHViLmZpcnN0Q2FsbC5hcmdzWzBdLnNob3VsZC5lcXVhbCgndjJ4cGFzc2tleXRva2VuJyk7XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCdjbGVhckFzeW5jKCknLCBmdW5jdGlvbiAoKSB7XG4gICAgICBpdCgnY2xlYXJzIF90b2tlbiBhbmQgY2FsbHMgY2xlYXJUb2tlbiBvbiB0aGUgc3RyYXRlZ3knLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGNvbnN0IHsgc3RyYXRlZ3ksIGNsZWFyVG9rZW5TdHViIH0gPSBtYWtlU3RyYXRlZ3koKTtcbiAgICAgICAgY29uc3QgYml0Z28gPSBuZXcgQml0R29BUEkoeyBlbnY6ICdjdXN0b20nLCBjdXN0b21Sb290VVJJOiBST09ULCBobWFjQXV0aFN0cmF0ZWd5OiBzdHJhdGVneSB9KTtcblxuICAgICAgICBiaXRnby5hdXRoZW50aWNhdGVXaXRoQWNjZXNzVG9rZW4oeyBhY2Nlc3NUb2tlbjogJ3YyeHNvbWV0b2tlbicgfSk7XG4gICAgICAgIChiaXRnbyBhcyBhbnkpLl90b2tlbi5zaG91bGQuZXF1YWwoJ3YyeHNvbWV0b2tlbicpO1xuXG4gICAgICAgIGF3YWl0IGJpdGdvLmNsZWFyQXN5bmMoKTtcblxuICAgICAgICAoKGJpdGdvIGFzIGFueSkuX3Rva2VuID09PSB1bmRlZmluZWQpLnNob3VsZC5iZS50cnVlKCk7XG4gICAgICAgIGNsZWFyVG9rZW5TdHViLmNhbGxlZE9uY2Uuc2hvdWxkLmJlLnRydWUoKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJ3JlZnJlc2hUb2tlbigpJywgZnVuY3Rpb24gKCkge1xuICAgICAgaXQoJ2NhbGxzIHNldFRva2VuIHdpdGggdGhlIG5ldyBhY2Nlc3NfdG9rZW4gZnJvbSB0aGUgT0F1dGggcmVzcG9uc2UnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGNvbnN0IHsgc3RyYXRlZ3ksIHNldFRva2VuU3R1YiB9ID0gbWFrZVN0cmF0ZWd5KCk7XG4gICAgICAgIGNvbnN0IGJpdGdvID0gbmV3IEJpdEdvQVBJKHtcbiAgICAgICAgICBlbnY6ICdjdXN0b20nLFxuICAgICAgICAgIGN1c3RvbVJvb3RVUkk6IFJPT1QsXG4gICAgICAgICAgaG1hY0F1dGhTdHJhdGVneTogc3RyYXRlZ3ksXG4gICAgICAgICAgY2xpZW50SWQ6ICdjbGllbnQtaWQnLFxuICAgICAgICAgIGNsaWVudFNlY3JldDogJ2NsaWVudC1zZWNyZXQnLFxuICAgICAgICB9KTtcbiAgICAgICAgKGJpdGdvIGFzIGFueSkuX3JlZnJlc2hUb2tlbiA9ICdvbGQtcmVmcmVzaC10b2tlbic7XG5cbiAgICAgICAgbm9jayhST09UKS5wb3N0KCcvb2F1dGgvdG9rZW4nKS5yZXBseSgyMDAsIHtcbiAgICAgICAgICBhY2Nlc3NfdG9rZW46ICd2MnhuZXd0b2tlbicsXG4gICAgICAgICAgcmVmcmVzaF90b2tlbjogJ25ldy1yZWZyZXNoLXRva2VuJyxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgYXdhaXQgYml0Z28ucmVmcmVzaFRva2VuKCk7XG5cbiAgICAgICAgc2V0VG9rZW5TdHViLmNhbGxlZE9uY2Uuc2hvdWxkLmJlLnRydWUoKTtcbiAgICAgICAgc2V0VG9rZW5TdHViLmZpcnN0Q2FsbC5hcmdzWzBdLnNob3VsZC5lcXVhbCgndjJ4bmV3dG9rZW4nKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJ2F1dGhlbnRpY2F0ZVdpdGhBdXRoQ29kZSgpJywgZnVuY3Rpb24gKCkge1xuICAgICAgaXQoJ2NhbGxzIHNldFRva2VuIHdpdGggdGhlIGFjY2Vzc190b2tlbiBmcm9tIHRoZSBPQXV0aCByZXNwb25zZScsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY29uc3QgeyBzdHJhdGVneSwgc2V0VG9rZW5TdHViIH0gPSBtYWtlU3RyYXRlZ3koKTtcbiAgICAgICAgY29uc3QgYml0Z28gPSBuZXcgQml0R29BUEkoe1xuICAgICAgICAgIGVudjogJ2N1c3RvbScsXG4gICAgICAgICAgY3VzdG9tUm9vdFVSSTogUk9PVCxcbiAgICAgICAgICBobWFjQXV0aFN0cmF0ZWd5OiBzdHJhdGVneSxcbiAgICAgICAgICBjbGllbnRJZDogJ2NsaWVudC1pZCcsXG4gICAgICAgICAgY2xpZW50U2VjcmV0OiAnY2xpZW50LXNlY3JldCcsXG4gICAgICAgIH0pO1xuXG4gICAgICAgIG5vY2soUk9PVCkucG9zdCgnL29hdXRoL3Rva2VuJykucmVwbHkoMjAwLCB7XG4gICAgICAgICAgYWNjZXNzX3Rva2VuOiAndjJ4YXV0aGNvZGV0b2tlbicsXG4gICAgICAgICAgcmVmcmVzaF90b2tlbjogJ3JlZnJlc2gtdG9rZW4nLFxuICAgICAgICB9KTtcbiAgICAgICAgLy8gYXV0aGVudGljYXRlV2l0aEF1dGhDb2RlIGNhbGxzIHRoaXMubWUoKSBhZnRlciBzZXR0aW5nIHRoZSB0b2tlblxuICAgICAgICBub2NrKFJPT1QpXG4gICAgICAgICAgLmdldCgnL2FwaS92MS91c2VyL21lJylcbiAgICAgICAgICAucmVwbHkoMjAwLCB7XG4gICAgICAgICAgICB1c2VyOiB7IHVzZXJuYW1lOiAndGVzdEBleGFtcGxlLmNvbScgfSxcbiAgICAgICAgICB9KTtcblxuICAgICAgICBhd2FpdCBiaXRnby5hdXRoZW50aWNhdGVXaXRoQXV0aENvZGUoeyBhdXRoQ29kZTogJ215LWF1dGgtY29kZScgfSk7XG5cbiAgICAgICAgc2V0VG9rZW5TdHViLmNhbGxlZE9uY2Uuc2hvdWxkLmJlLnRydWUoKTtcbiAgICAgICAgc2V0VG9rZW5TdHViLmZpcnN0Q2FsbC5hcmdzWzBdLnNob3VsZC5lcXVhbCgndjJ4YXV0aGNvZGV0b2tlbicpO1xuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnc3luYyB0b2tlbi1zZXR0aW5nIG1ldGhvZHMnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBpdCgnYXV0aGVudGljYXRlV2l0aEFjY2Vzc1Rva2VuIGRvZXMgbm90IGNhbGwgc2V0VG9rZW4gKHN5bmNocm9ub3VzIOKAlCBjYWxsZXIgbXVzdCBpbnZva2Ugc2V0VG9rZW4gb24gdGhlIHN0cmF0ZWd5IG1hbnVhbGx5KScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY29uc3QgeyBzdHJhdGVneSwgc2V0VG9rZW5TdHViIH0gPSBtYWtlU3RyYXRlZ3koKTtcbiAgICAgICAgY29uc3QgYml0Z28gPSBuZXcgQml0R29BUEkoeyBlbnY6ICdjdXN0b20nLCBjdXN0b21Sb290VVJJOiBST09ULCBobWFjQXV0aFN0cmF0ZWd5OiBzdHJhdGVneSB9KTtcblxuICAgICAgICBiaXRnby5hdXRoZW50aWNhdGVXaXRoQWNjZXNzVG9rZW4oeyBhY2Nlc3NUb2tlbjogJ3YyeHN5bmN0b2tlbicgfSk7XG5cbiAgICAgICAgc2V0VG9rZW5TdHViLmNhbGxlZC5zaG91bGQuYmUuZmFsc2UoKTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgnZnJvbUpTT04gZG9lcyBub3QgY2FsbCBzZXRUb2tlbiAoc3luY2hyb25vdXMg4oCUIGNhbGxlciBtdXN0IGludm9rZSBzZXRUb2tlbiBvbiB0aGUgc3RyYXRlZ3kgbWFudWFsbHkpJywgZnVuY3Rpb24gKCkge1xuICAgICAgICBjb25zdCB7IHN0cmF0ZWd5LCBzZXRUb2tlblN0dWIgfSA9IG1ha2VTdHJhdGVneSgpO1xuICAgICAgICBjb25zdCBiaXRnbyA9IG5ldyBCaXRHb0FQSSh7IGVudjogJ2N1c3RvbScsIGN1c3RvbVJvb3RVUkk6IFJPT1QsIGhtYWNBdXRoU3RyYXRlZ3k6IHN0cmF0ZWd5IH0pO1xuXG4gICAgICAgIChiaXRnbyBhcyBhbnkpLmZyb21KU09OKHsgdXNlcjogeyB1c2VybmFtZTogJ3Rlc3RAZXhhbXBsZS5jb20nIH0sIHRva2VuOiAndjJ4anNvbnRva2VuJyB9KTtcblxuICAgICAgICBzZXRUb2tlblN0dWIuY2FsbGVkLnNob3VsZC5iZS5mYWxzZSgpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdjb25zdGFudHMgcGFyYW1ldGVyJywgZnVuY3Rpb24gKCkge1xuICAgIGl0KCdzaG91bGQgYWxsb3cgcGFzc2luZyBjb25zdGFudHMgdmlhIG9wdGlvbnMgYW5kIGV4cG9zZSB2aWEgZmV0Y2hDb25zdGFudHMnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBiaXRnbyA9IG5ldyBCaXRHb0FQSSh7XG4gICAgICAgIGVudjogJ2N1c3RvbScsXG4gICAgICAgIGN1c3RvbVJvb3RVUkk6ICdodHRwczovL2FwcC5leGFtcGxlLmxvY2FsJyxcbiAgICAgICAgY2xpZW50Q29uc3RhbnRzOiB7IG1heEZlZVJhdGU6ICcxMjMxMjMxMjMxMjMxMjMnIH0sXG4gICAgICB9KTtcblxuICAgICAgY29uc3QgY29uc3RhbnRzID0gYXdhaXQgYml0Z28uZmV0Y2hDb25zdGFudHMoKTtcbiAgICAgIGNvbnN0YW50cy5zaG91bGQuaGF2ZS5wcm9wZXJ0eSgnbWF4RmVlUmF0ZScsICcxMjMxMjMxMjMxMjMxMjMnKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgcmVmcmVzaCBjb25zdGFudHMgd2hlbiBjYWNoZSBoYXMgZXhwaXJlZCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGJpdGdvID0gbmV3IEJpdEdvQVBJKHtcbiAgICAgICAgZW52OiAnY3VzdG9tJyxcbiAgICAgICAgY3VzdG9tUm9vdFVSSTogJ2h0dHBzOi8vYXBwLmV4YW1wbGUubG9jYWwnLFxuICAgICAgfSk7XG5cbiAgICAgIC8vIFNldCB1cCBjYWNoZWQgY29uc3RhbnRzIHdpdGggYW4gZXhwaXJlZCBjYWNoZVxuICAgICAgKEJpdEdvQVBJIGFzIGFueSkuX2NvbnN0YW50cyA9IChCaXRHb0FQSSBhcyBhbnkpLl9jb25zdGFudHMgfHwge307XG4gICAgICAoQml0R29BUEkgYXMgYW55KS5fY29uc3RhbnRzRXhwaXJlID0gKEJpdEdvQVBJIGFzIGFueSkuX2NvbnN0YW50c0V4cGlyZSB8fCB7fTtcbiAgICAgIChCaXRHb0FQSSBhcyBhbnkpLl9jb25zdGFudHNbJ2N1c3RvbSddID0geyBtYXhGZWVSYXRlOiAnb2xkLXZhbHVlJyB9O1xuICAgICAgKEJpdEdvQVBJIGFzIGFueSkuX2NvbnN0YW50c0V4cGlyZVsnY3VzdG9tJ10gPSBuZXcgRGF0ZShEYXRlLm5vdygpIC0gMTAwMCk7IC8vIEV4cGlyZWQgMSBzZWNvbmQgYWdvXG5cbiAgICAgIGNvbnN0IHNjb3BlID0gbm9jaygnaHR0cHM6Ly9hcHAuZXhhbXBsZS5sb2NhbCcpXG4gICAgICAgIC5nZXQoJy9hcGkvdjEvY2xpZW50L2NvbnN0YW50cycpXG4gICAgICAgIC5yZXBseSgyMDAsIHtcbiAgICAgICAgICBjb25zdGFudHM6IHsgbWF4RmVlUmF0ZTogJ25ldy12YWx1ZScsIG5ld0NvbnN0YW50OiAnYWRkZWQnIH0sXG4gICAgICAgIH0pO1xuXG4gICAgICBjb25zdCBjb25zdGFudHMgPSBhd2FpdCBiaXRnby5mZXRjaENvbnN0YW50cygpO1xuXG4gICAgICAvLyBTaG91bGQgcmV0dXJuIHRoZSBuZXcgY29uc3RhbnRzIGZyb20gdGhlIHNlcnZlclxuICAgICAgY29uc3RhbnRzLnNob3VsZC5oYXZlLnByb3BlcnR5KCdtYXhGZWVSYXRlJywgJ25ldy12YWx1ZScpO1xuICAgICAgY29uc3RhbnRzLnNob3VsZC5oYXZlLnByb3BlcnR5KCduZXdDb25zdGFudCcsICdhZGRlZCcpO1xuXG4gICAgICBzY29wZS5pc0RvbmUoKS5zaG91bGQuYmUudHJ1ZSgpO1xuXG4gICAgICBub2NrLmNsZWFuQWxsKCk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHVzZSBjYWNoZWQgY29uc3RhbnRzIHdoZW4gY2FjaGUgaXMgc3RpbGwgdmFsaWQnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBiaXRnbyA9IG5ldyBCaXRHb0FQSSh7XG4gICAgICAgIGVudjogJ2N1c3RvbScsXG4gICAgICAgIGN1c3RvbVJvb3RVUkk6ICdodHRwczovL2FwcC5leGFtcGxlLmxvY2FsJyxcbiAgICAgIH0pO1xuXG4gICAgICAvLyBTZXQgdXAgY2FjaGVkIGNvbnN0YW50cyB3aXRoIGEgZnV0dXJlIGV4cGlyeVxuICAgICAgY29uc3QgY2FjaGVkQ29uc3RhbnRzID0geyBtYXhGZWVSYXRlOiAnY2FjaGVkLXZhbHVlJywgYW5vdGhlclNldHRpbmc6ICdjYWNoZWQtc2V0dGluZycgfTtcbiAgICAgIChCaXRHb0FQSSBhcyBhbnkpLl9jb25zdGFudHMgPSAoQml0R29BUEkgYXMgYW55KS5fY29uc3RhbnRzIHx8IHt9O1xuICAgICAgKEJpdEdvQVBJIGFzIGFueSkuX2NvbnN0YW50c0V4cGlyZSA9IChCaXRHb0FQSSBhcyBhbnkpLl9jb25zdGFudHNFeHBpcmUgfHwge307XG4gICAgICAoQml0R29BUEkgYXMgYW55KS5fY29uc3RhbnRzWydjdXN0b20nXSA9IGNhY2hlZENvbnN0YW50cztcbiAgICAgIChCaXRHb0FQSSBhcyBhbnkpLl9jb25zdGFudHNFeHBpcmVbJ2N1c3RvbSddID0gbmV3IERhdGUoRGF0ZS5ub3coKSArIDUgKiA2MCAqIDEwMDApOyAvLyBWYWxpZCBmb3IgNSBtb3JlIG1pbnV0ZXNcblxuICAgICAgY29uc3Qgc2NvcGUgPSBub2NrKCdodHRwczovL2FwcC5leGFtcGxlLmxvY2FsJylcbiAgICAgICAgLmdldCgnL2FwaS92MS9jbGllbnQvY29uc3RhbnRzJylcbiAgICAgICAgLnJlcGx5KDIwMCwgeyBjb25zdGFudHM6IHsgc2hvdWxkTm90QmVVc2VkOiB0cnVlIH0gfSk7XG5cbiAgICAgIGNvbnN0IGNvbnN0YW50cyA9IGF3YWl0IGJpdGdvLmZldGNoQ29uc3RhbnRzKCk7XG5cbiAgICAgIC8vIFNob3VsZCByZXR1cm4gdGhlIGNhY2hlZCBjb25zdGFudHNcbiAgICAgIGNvbnN0YW50cy5zaG91bGQuZGVlcEVxdWFsKGNhY2hlZENvbnN0YW50cyk7XG5cbiAgICAgIC8vIFZlcmlmeSB0aGF0IG5vIEhUVFAgcmVxdWVzdCB3YXMgbWFkZSAoc2luY2UgY2FjaGUgd2FzIHZhbGlkKVxuICAgICAgc2NvcGUuaXNEb25lKCkuc2hvdWxkLmJlLmZhbHNlKCk7XG5cbiAgICAgIG5vY2suY2xlYW5BbGwoKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgdXNlIGNhY2hlZCBjb25zdGFudHMgd2hlbiBubyBjYWNoZSBleHBpcnkgaXMgc2V0JywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgYml0Z28gPSBuZXcgQml0R29BUEkoe1xuICAgICAgICBlbnY6ICdjdXN0b20nLFxuICAgICAgICBjdXN0b21Sb290VVJJOiAnaHR0cHM6Ly9hcHAuZXhhbXBsZS5sb2NhbCcsXG4gICAgICB9KTtcblxuICAgICAgLy8gU2V0IHVwIGNhY2hlZCBjb25zdGFudHMgd2l0aCBubyBleHBpcnlcbiAgICAgIGNvbnN0IGNhY2hlZENvbnN0YW50cyA9IHsgbWF4RmVlUmF0ZTogJ25vLWV4cGlyeS12YWx1ZScgfTtcbiAgICAgIChCaXRHb0FQSSBhcyBhbnkpLl9jb25zdGFudHMgPSAoQml0R29BUEkgYXMgYW55KS5fY29uc3RhbnRzIHx8IHt9O1xuICAgICAgKEJpdEdvQVBJIGFzIGFueSkuX2NvbnN0YW50c0V4cGlyZSA9IChCaXRHb0FQSSBhcyBhbnkpLl9jb25zdGFudHNFeHBpcmUgfHwge307XG4gICAgICAoQml0R29BUEkgYXMgYW55KS5fY29uc3RhbnRzWydjdXN0b20nXSA9IGNhY2hlZENvbnN0YW50cztcbiAgICAgIChCaXRHb0FQSSBhcyBhbnkpLl9jb25zdGFudHNFeHBpcmVbJ2N1c3RvbSddID0gdW5kZWZpbmVkO1xuXG4gICAgICBjb25zdCBzY29wZSA9IG5vY2soJ2h0dHBzOi8vYXBwLmV4YW1wbGUubG9jYWwnKVxuICAgICAgICAuZ2V0KCcvYXBpL3YxL2NsaWVudC9jb25zdGFudHMnKVxuICAgICAgICAucmVwbHkoMjAwLCB7IGNvbnN0YW50czogeyBzaG91bGROb3RCZVVzZWQ6IHRydWUgfSB9KTtcblxuICAgICAgY29uc3QgY29uc3RhbnRzID0gYXdhaXQgYml0Z28uZmV0Y2hDb25zdGFudHMoKTtcblxuICAgICAgLy8gU2hvdWxkIHJldHVybiB0aGUgY2FjaGVkIGNvbnN0YW50c1xuICAgICAgY29uc3RhbnRzLnNob3VsZC5kZWVwRXF1YWwoY2FjaGVkQ29uc3RhbnRzKTtcblxuICAgICAgLy8gVmVyaWZ5IHRoYXQgbm8gSFRUUCByZXF1ZXN0IHdhcyBtYWRlIChzaW5jZSBubyBleHBpcnkgbWVhbnMgY2FjaGUgaXMgYWx3YXlzIHZhbGlkKVxuICAgICAgc2NvcGUuaXNEb25lKCkuc2hvdWxkLmJlLmZhbHNlKCk7XG5cbiAgICAgIG5vY2suY2xlYW5BbGwoKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ3BhY2tLZXljaGFpbnNGRkQnLCBmdW5jdGlvbiAoKSB7XG4gICAgbGV0IGJpdGdvOiBCaXRHb0FQSTtcblxuICAgIGJlZm9yZShmdW5jdGlvbiAoKSB7XG4gICAgICBiaXRnbyA9IG5ldyBCaXRHb0FQSSh7IGVudjogJ2N1c3RvbScsIGN1c3RvbVJvb3RVUkk6ICdodHRwczovL2FwcC5leGFtcGxlLmxvY2FsJyB9KTtcbiAgICB9KTtcblxuICAgIGZ1bmN0aW9uIGZmZChcbiAgICAgIGtleWNoYWluczogUmVjb3JkPHN0cmluZywgc3RyaW5nPixcbiAgICAgIHYyS2V5Y2hhaW5zOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+LFxuICAgICAgbWF4QmF0Y2hTaXplQnl0ZXM6IG51bWJlclxuICAgICk6IEFycmF5PHsgdjFCYXRjaDogUmVjb3JkPHN0cmluZywgc3RyaW5nPjsgdjJCYXRjaDogUmVjb3JkPHN0cmluZywgc3RyaW5nPjsgc2l6ZUJ5dGVzOiBudW1iZXIgfT4ge1xuICAgICAgcmV0dXJuIChiaXRnbyBhcyBhbnkpLnBhY2tLZXljaGFpbnNGRkQoa2V5Y2hhaW5zLCB2MktleWNoYWlucywgbWF4QmF0Y2hTaXplQnl0ZXMpO1xuICAgIH1cblxuICAgIGl0KCdyZXR1cm5zIGFuIGVtcHR5IGFycmF5IHdoZW4gYm90aCBpbnB1dHMgYXJlIGVtcHR5JywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgYmlucyA9IGZmZCh7fSwge30sIDEwMjQpO1xuICAgICAgYmlucy5zaG91bGQuYmUuYW4uQXJyYXkoKTtcbiAgICAgIGJpbnMuc2hvdWxkLmhhdmUubGVuZ3RoKDApO1xuICAgIH0pO1xuXG4gICAgaXQoJ3BhY2tzIGFsbCBpdGVtcyBpbnRvIGEgc2luZ2xlIGJpbiB3aGVuIHRoZXkgZml0IHdpdGhpbiB0aGUgbGltaXQnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAvLyBFYWNoIGVudHJ5OiAyLWJ5dGUgaWQgKyAxMC1ieXRlIHZhbHVlID0gMTIgYnl0ZXM7IDUgZW50cmllcyA9IDYwIGJ5dGVzIDwgMjAwIGxpbWl0XG4gICAgICBjb25zdCBrZXljaGFpbnMgPSB7IGsxOiAnYWFhYWFhYWFhYScsIGsyOiAnYmJiYmJiYmJiYicsIGszOiAnY2NjY2NjY2NjYycgfTtcbiAgICAgIGNvbnN0IHYyS2V5Y2hhaW5zID0geyB2MTogJ2RkZGRkZGRkZGQnLCB2MjogJ2VlZWVlZWVlZWUnIH07XG4gICAgICBjb25zdCBiaW5zID0gZmZkKGtleWNoYWlucywgdjJLZXljaGFpbnMsIDIwMCk7XG4gICAgICBiaW5zLnNob3VsZC5oYXZlLmxlbmd0aCgxKTtcbiAgICAgIE9iamVjdC5rZXlzKGJpbnNbMF0udjFCYXRjaCkuc2hvdWxkLmhhdmUubGVuZ3RoKDMpO1xuICAgICAgT2JqZWN0LmtleXMoYmluc1swXS52MkJhdGNoKS5zaG91bGQuaGF2ZS5sZW5ndGgoMik7XG4gICAgfSk7XG5cbiAgICBpdCgnc3BsaXRzIGludG8gbXVsdGlwbGUgYmlucyB3aGVuIGEgc2luZ2xlIGJpbiBjYW5ub3QgZml0IGFsbCBpdGVtcycsIGZ1bmN0aW9uICgpIHtcbiAgICAgIC8vIGlkPSdrMScgKDIgYnl0ZXMpICsgNjAwLWNoYXIgdmFsdWUgPSA2MDIgYnl0ZXM7IDIgZW50cmllcyBleGNlZWQgNzAwLWJ5dGUgbGltaXRcbiAgICAgIGNvbnN0IGtleWNoYWlucyA9IHsgazE6ICd4Jy5yZXBlYXQoNjAwKSwgazI6ICd5Jy5yZXBlYXQoNjAwKSB9O1xuICAgICAgY29uc3QgYmlucyA9IGZmZChrZXljaGFpbnMsIHt9LCA3MDApO1xuICAgICAgYmlucy5zaG91bGQuaGF2ZS5sZW5ndGgoMik7XG4gICAgfSk7XG5cbiAgICBpdCgndGhyb3dzIHdoZW4gYSBzaW5nbGUgaXRlbSBleGNlZWRzIG1heEJhdGNoU2l6ZUJ5dGVzJywgZnVuY3Rpb24gKCkge1xuICAgICAgLy8gaWQ9J2sxJyAoMiBieXRlcykgKyAyMDAtY2hhciB2YWx1ZSA9IDIwMiBieXRlcyA+IDEwMC1ieXRlIGxpbWl0XG4gICAgICBjb25zdCBrZXljaGFpbnMgPSB7IGsxOiAneCcucmVwZWF0KDIwMCkgfTtcbiAgICAgIHRyeSB7XG4gICAgICAgIGZmZChrZXljaGFpbnMsIHt9LCAxMDApO1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0V4cGVjdGVkIGVycm9yIG5vdCB0aHJvd24nKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgZS5tZXNzYWdlLnNob3VsZC5tYXRjaCgvZXhjZWVkcyB0aGUgbWF4aW11bSBiYXRjaCBzaXplLyk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBpdCgncGxhY2VzIFYxIGtleWNoYWlucyBpbiB2MUJhdGNoIGFuZCBWMiBrZXljaGFpbnMgaW4gdjJCYXRjaCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGtleWNoYWlucyA9IHsgazE6ICd2MXZhbHVlJyB9O1xuICAgICAgY29uc3QgdjJLZXljaGFpbnMgPSB7IGsyOiAndjJ2YWx1ZScgfTtcbiAgICAgIGNvbnN0IGJpbnMgPSBmZmQoa2V5Y2hhaW5zLCB2MktleWNoYWlucywgMTAwMDApO1xuICAgICAgYmlucy5zaG91bGQuaGF2ZS5sZW5ndGgoMSk7XG4gICAgICBiaW5zWzBdLnYxQmF0Y2guc2hvdWxkLmhhdmUucHJvcGVydHkoJ2sxJywgJ3YxdmFsdWUnKTtcbiAgICAgIGJpbnNbMF0udjJCYXRjaC5zaG91bGQuaGF2ZS5wcm9wZXJ0eSgnazInLCAndjJ2YWx1ZScpO1xuICAgICAgYmluc1swXS52MUJhdGNoLnNob3VsZC5ub3QuaGF2ZS5wcm9wZXJ0eSgnazInKTtcbiAgICAgIGJpbnNbMF0udjJCYXRjaC5zaG91bGQubm90LmhhdmUucHJvcGVydHkoJ2sxJyk7XG4gICAgfSk7XG5cbiAgICBpdCgndXNlcyBGRkQgb3JkZXJpbmcgc28gdGhlIGxhcmdlc3QgaXRlbSBpcyBwYWNrZWQgZmlyc3QnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAvLyAnYmlnJzogaWQoMykgKyA0OTcgYnl0ZXMgPSA1MDAgYnl0ZXM7ICdzMScsJ3MyJzogaWQoMikgKyA5OCBieXRlcyA9IDEwMCBieXRlcyBlYWNoXG4gICAgICAvLyBtYXhCYXRjaFNpemVCeXRlcyA9IDYwMFxuICAgICAgLy8gRkZEIG9yZGVyIChkZXNjZW5kaW5nKTogYmlnKDUwMCksIHMxKDEwMCksIHMyKDEwMClcbiAgICAgIC8vICAgYmluMDogYmlnKDUwMCkuIHMxOiA1MDArMTAwPTYwMCA8PTYwMCwgZml0cy4gczI6IDYwMCsxMDA9NzAwID4gNjAwLCBuZXcgYmluMS5cbiAgICAgIC8vICAgUmVzdWx0OiBiaW4wPXtiaWcsczF9LCBiaW4xPXtzMn1cbiAgICAgIGNvbnN0IGtleWNoYWlucyA9IHsgYmlnOiAneCcucmVwZWF0KDQ5NyksIHMxOiAneScucmVwZWF0KDk4KSwgczI6ICd6Jy5yZXBlYXQoOTgpIH07XG4gICAgICBjb25zdCBiaW5zID0gZmZkKGtleWNoYWlucywge30sIDYwMCk7XG4gICAgICBiaW5zLnNob3VsZC5oYXZlLmxlbmd0aCgyKTtcbiAgICAgIC8vICdiaWcnIHNob3VsZCBzaGFyZSBpdHMgYmluIHdpdGggb25lIHNtYWxsIGl0ZW0gKEZGRCBwYWNrcyB0aGUgbGFyZ2VzdCBmaXJzdClcbiAgICAgIGNvbnN0IGJpbldpdGhCaWcgPSBiaW5zLmZpbmQoKGIpID0+ICdiaWcnIGluIGIudjFCYXRjaCkhO1xuICAgICAgT2JqZWN0LmtleXMoYmluV2l0aEJpZy52MUJhdGNoKS5zaG91bGQuaGF2ZS5sZW5ndGgoMik7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdwcm9jZXNzS2V5Y2hhaW5QYXNzd29yZFVwZGF0ZXNJbkJhdGNoZXMnLCBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3QgUk9PVCA9ICdodHRwczovL2FwcC5leGFtcGxlLmxvY2FsJztcbiAgICBsZXQgYml0Z286IEJpdEdvQVBJO1xuXG4gICAgYmVmb3JlRWFjaChmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBzdHJhdGVneTogSUhtYWNBdXRoU3RyYXRlZ3kgPSB7XG4gICAgICAgIGNhbGN1bGF0ZVJlcXVlc3RIZWFkZXJzOiBzaW5vbi5zdHViKCkucmVzb2x2ZXMoeyBobWFjOiAnaG1hYycsIHRpbWVzdGFtcDogRGF0ZS5ub3coKSwgdG9rZW5IYXNoOiAnaGFzaCcgfSksXG4gICAgICAgIHZlcmlmeVJlc3BvbnNlOiBzaW5vbi5zdHViKCkucmVzb2x2ZXMoe1xuICAgICAgICAgIGlzVmFsaWQ6IHRydWUsXG4gICAgICAgICAgZXhwZWN0ZWRIbWFjOiAnaG1hYycsXG4gICAgICAgICAgc2lnbmF0dXJlU3ViamVjdDogJycsXG4gICAgICAgICAgaXNJblJlc3BvbnNlVmFsaWRpdHlXaW5kb3c6IHRydWUsXG4gICAgICAgICAgdmVyaWZpY2F0aW9uVGltZTogRGF0ZS5ub3coKSxcbiAgICAgICAgfSksXG4gICAgICAgIGNhbGN1bGF0ZUhNQUM6IHNpbm9uLnN0dWIoKS5yZXNvbHZlcygnaGFzaGVkLXB3JyksXG4gICAgICAgIHNldFRva2VuOiBzaW5vbi5zdHViKCkucmVzb2x2ZXMoKSxcbiAgICAgICAgY2xlYXJUb2tlbjogc2lub24uc3R1YigpLnJlc29sdmVzKCksXG4gICAgICB9O1xuICAgICAgYml0Z28gPSBuZXcgQml0R29BUEkoeyBlbnY6ICdjdXN0b20nLCBjdXN0b21Sb290VVJJOiBST09ULCBobWFjQXV0aFN0cmF0ZWd5OiBzdHJhdGVneSB9KTtcbiAgICB9KTtcblxuICAgIGFmdGVyRWFjaChmdW5jdGlvbiAoKSB7XG4gICAgICBub2NrLmNsZWFuQWxsKCk7XG4gICAgICBzaW5vbi5yZXN0b3JlKCk7XG4gICAgfSk7XG5cbiAgICBhc3luYyBmdW5jdGlvbiBydW5CYXRjaGVzKFxuICAgICAga2V5Y2hhaW5zOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+LFxuICAgICAgdjJLZXljaGFpbnM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4sXG4gICAgICBtYXhCYXRjaFNpemVLQjogbnVtYmVyLFxuICAgICAgbWF4UmV0cmllcyA9IDNcbiAgICApOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgIHJldHVybiAoYml0Z28gYXMgYW55KS5wcm9jZXNzS2V5Y2hhaW5QYXNzd29yZFVwZGF0ZXNJbkJhdGNoZXMoa2V5Y2hhaW5zLCB2MktleWNoYWlucywgbWF4QmF0Y2hTaXplS0IsIG1heFJldHJpZXMpO1xuICAgIH1cblxuICAgIGl0KCdtYWtlcyBhIHNpbmdsZSBQVVQgcmVxdWVzdCBmb3IgYSBzbWFsbCBwYXlsb2FkJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3Qgc2NvcGUgPSBub2NrKFJPT1QpLnB1dCgnL2FwaS92Mi91c2VyL2tleWNoYWlucycpLnJlcGx5KDIwMCwge30pO1xuICAgICAgYXdhaXQgcnVuQmF0Y2hlcyh7IGsxOiAnc21hbGwnIH0sIHt9LCAxMDI0KTtcbiAgICAgIHNjb3BlLmlzRG9uZSgpLnNob3VsZC5iZS50cnVlKCk7XG4gICAgfSk7XG5cbiAgICBpdCgnbWFrZXMgdHdvIFBVVCByZXF1ZXN0cyB3aGVuIHRoZSBwYXlsb2FkIHNwYW5zIHR3byBiaW5zJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgLy8gaWQ9J2sxJygyKSArIDYwMCA9IDYwMiBieXRlcyBlYWNoOyAyIGVudHJpZXMgZXhjZWVkIDEgS0IgbGltaXQgPT4gMiBiaW5zXG4gICAgICBjb25zdCBrZXljaGFpbnMgPSB7IGsxOiAneCcucmVwZWF0KDYwMCksIGsyOiAneScucmVwZWF0KDYwMCkgfTtcbiAgICAgIGNvbnN0IHNjb3BlID0gbm9jayhST09UKS5wdXQoJy9hcGkvdjIvdXNlci9rZXljaGFpbnMnKS50d2ljZSgpLnJlcGx5KDIwMCwge30pO1xuICAgICAgYXdhaXQgcnVuQmF0Y2hlcyhrZXljaGFpbnMsIHt9LCAxKTtcbiAgICAgIHNjb3BlLmlzRG9uZSgpLnNob3VsZC5iZS50cnVlKCk7XG4gICAgfSk7XG5cbiAgICBpdCgncmV0cmllcyBhIGZhaWxlZCBiYXRjaCBhbmQgc3VjY2VlZHMgb24gdGhlIHNlY29uZCBhdHRlbXB0JywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgbm9jayhST09UKS5wdXQoJy9hcGkvdjIvdXNlci9rZXljaGFpbnMnKS5yZXBseSg1MDAsIHsgZXJyb3I6ICdpbnRlcm5hbCBlcnJvcicgfSk7XG4gICAgICBub2NrKFJPT1QpLnB1dCgnL2FwaS92Mi91c2VyL2tleWNoYWlucycpLnJlcGx5KDIwMCwge30pO1xuICAgICAgLy8gU2hvdWxkIG5vdCB0aHJvd1xuICAgICAgYXdhaXQgcnVuQmF0Y2hlcyh7IGsxOiAndmFsdWUnIH0sIHt9LCAxMDI0LCAzKTtcbiAgICB9KTtcblxuICAgIGl0KCd0aHJvd3MgYWZ0ZXIgZXhoYXVzdGluZyBhbGwgcmV0cmllcyBvbiBwZXJzaXN0ZW50IEhUVFAgZXJyb3JzJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgbm9jayhST09UKS5wdXQoJy9hcGkvdjIvdXNlci9rZXljaGFpbnMnKS50aW1lcygzKS5yZXBseSg1MDAsIHsgZXJyb3I6ICdpbnRlcm5hbCBlcnJvcicgfSk7XG4gICAgICBsZXQgdGhyb3duRXJyb3I6IEVycm9yIHwgdW5kZWZpbmVkO1xuICAgICAgdHJ5IHtcbiAgICAgICAgYXdhaXQgcnVuQmF0Y2hlcyh7IGsxOiAndmFsdWUnIH0sIHt9LCAxMDI0LCAzKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgdGhyb3duRXJyb3IgPSBlO1xuICAgICAgfVxuICAgICAgdGhyb3duRXJyb3IhLm1lc3NhZ2Uuc2hvdWxkLm1hdGNoKC9mYWlsZWQgYWZ0ZXIgMyByZXRyaWVzLyk7XG4gICAgfSk7XG5cbiAgICBpdCgndGhyb3dzIGFmdGVyIGV4aGF1c3RpbmcgYWxsIHJldHJpZXMgd2hlbiB0aGUgc2VydmVyIHJlcG9ydHMgZmFpbGVkIGtleWNoYWlucycsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIG5vY2soUk9PVClcbiAgICAgICAgLnB1dCgnL2FwaS92Mi91c2VyL2tleWNoYWlucycpXG4gICAgICAgIC50aW1lcygzKVxuICAgICAgICAucmVwbHkoMjAwLCB7IGZhaWxlZDogeyB2MTogeyBrMTogJ2VuY3J5cHRpb24gZXJyb3InIH0gfSB9KTtcbiAgICAgIGxldCB0aHJvd25FcnJvcjogRXJyb3IgfCB1bmRlZmluZWQ7XG4gICAgICB0cnkge1xuICAgICAgICBhd2FpdCBydW5CYXRjaGVzKHsgazE6ICd2YWx1ZScgfSwge30sIDEwMjQsIDMpO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICB0aHJvd25FcnJvciA9IGU7XG4gICAgICB9XG4gICAgICB0aHJvd25FcnJvciEubWVzc2FnZS5zaG91bGQubWF0Y2goL2hhZCBmYWlsZWQga2V5Y2hhaW5zLyk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdjaGFuZ2VQYXNzd29yZCBiYXRjaGluZyBmbG93JywgZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IFJPT1QgPSAnaHR0cHM6Ly9hcHAuZXhhbXBsZS5sb2NhbCc7XG4gICAgbGV0IGJpdGdvOiBCaXRHb0FQSTtcbiAgICBsZXQgc2FuZGJveDogc2lub24uU2lub25TYW5kYm94O1xuXG4gICAgYmVmb3JlRWFjaChmdW5jdGlvbiAoKSB7XG4gICAgICBzYW5kYm94ID0gc2lub24uY3JlYXRlU2FuZGJveCgpO1xuXG4gICAgICBjb25zdCBzdHJhdGVneTogSUhtYWNBdXRoU3RyYXRlZ3kgPSB7XG4gICAgICAgIGNhbGN1bGF0ZVJlcXVlc3RIZWFkZXJzOiBzYW5kYm94LnN0dWIoKS5yZXNvbHZlcyh7IGhtYWM6ICdobWFjJywgdGltZXN0YW1wOiBEYXRlLm5vdygpLCB0b2tlbkhhc2g6ICdoYXNoJyB9KSxcbiAgICAgICAgdmVyaWZ5UmVzcG9uc2U6IHNhbmRib3guc3R1YigpLnJlc29sdmVzKHtcbiAgICAgICAgICBpc1ZhbGlkOiB0cnVlLFxuICAgICAgICAgIGV4cGVjdGVkSG1hYzogJ2htYWMnLFxuICAgICAgICAgIHNpZ25hdHVyZVN1YmplY3Q6ICcnLFxuICAgICAgICAgIGlzSW5SZXNwb25zZVZhbGlkaXR5V2luZG93OiB0cnVlLFxuICAgICAgICAgIHZlcmlmaWNhdGlvblRpbWU6IERhdGUubm93KCksXG4gICAgICAgIH0pLFxuICAgICAgICBjYWxjdWxhdGVITUFDOiBzYW5kYm94LnN0dWIoKS5yZXNvbHZlcygnaGFzaGVkLXB3JyksXG4gICAgICAgIHNldFRva2VuOiBzYW5kYm94LnN0dWIoKS5yZXNvbHZlcygpLFxuICAgICAgICBjbGVhclRva2VuOiBzYW5kYm94LnN0dWIoKS5yZXNvbHZlcygpLFxuICAgICAgfTtcblxuICAgICAgYml0Z28gPSBuZXcgQml0R29BUEkoeyBlbnY6ICdjdXN0b20nLCBjdXN0b21Sb290VVJJOiBST09ULCBobWFjQXV0aFN0cmF0ZWd5OiBzdHJhdGVneSB9KTtcbiAgICAgIChiaXRnbyBhcyBhbnkpLl91c2VyID0geyB1c2VybmFtZTogJ3Rlc3RAYml0Z28uY29tJyB9O1xuXG4gICAgICBzYW5kYm94LnN0dWIoYml0Z28sICd2ZXJpZnlQYXNzd29yZCcpLnJlc29sdmVzKHRydWUpO1xuXG4gICAgICBzYW5kYm94LnN0dWIoYml0Z28sICdrZXljaGFpbnMnKS5yZXR1cm5zKHtcbiAgICAgICAgdXBkYXRlUGFzc3dvcmQ6IHNhbmRib3guc3R1YigpLnJlc29sdmVzKHsga2V5Y2hhaW5zOiB7IGsxOiAndjFlbmMnIH0sIHZlcnNpb246IDI1IH0pLFxuICAgICAgfSBhcyBhbnkpO1xuXG4gICAgICBzYW5kYm94LnN0dWIoYml0Z28sICdjb2luJykucmV0dXJucyh7XG4gICAgICAgIGtleWNoYWluczogKCkgPT4gKHtcbiAgICAgICAgICB1cGRhdGVQYXNzd29yZDogc2FuZGJveC5zdHViKCkucmVzb2x2ZXMoeyB2MmsxOiAndjJlbmMnIH0pLFxuICAgICAgICB9KSxcbiAgICAgIH0gYXMgYW55KTtcbiAgICB9KTtcblxuICAgIGFmdGVyRWFjaChmdW5jdGlvbiAoKSB7XG4gICAgICBub2NrLmNsZWFuQWxsKCk7XG4gICAgICBzYW5kYm94LnJlc3RvcmUoKTtcbiAgICB9KTtcblxuICAgIGl0KCdjYWxscyBQVVQgL3VzZXIva2V5Y2hhaW5zIGFuZCBQT1NUIC91c2VyL2NoYW5nZXBhc3N3b3JkIHdpdGhvdXQga2V5Y2hhaW5zIHdoZW4gYmF0Y2hpbmcgaXMgZW5hYmxlZCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIG5vY2soUk9PVClcbiAgICAgICAgLmdldCgnL2FwaS92Mi91c2VyL2NoZWNrQmF0Y2hpbmdQYXNzd29yZEZsb3cnKVxuICAgICAgICAucXVlcnkodHJ1ZSlcbiAgICAgICAgLnJlcGx5KDIwMCwgeyBpc0JhdGNoaW5nRmxvd0VuYWJsZWQ6IHRydWUsIG1heEJhdGNoU2l6ZUtCOiA5MDAgfSk7XG5cbiAgICAgIGNvbnN0IGJhdGNoUHV0U2NvcGUgPSBub2NrKFJPT1QpLnB1dCgnL2FwaS92Mi91c2VyL2tleWNoYWlucycpLnJlcGx5KDIwMCwge30pO1xuXG4gICAgICBjb25zdCBjaGFuZ2VQYXNzU2NvcGUgPSBub2NrKFJPT1QpXG4gICAgICAgIC5wb3N0KCcvYXBpL3YxL3VzZXIvY2hhbmdlcGFzc3dvcmQnLCAoYm9keTogYW55KSA9PiAhYm9keS5rZXljaGFpbnMgJiYgIWJvZHkudjJfa2V5Y2hhaW5zKVxuICAgICAgICAucmVwbHkoMjAwLCB7fSk7XG5cbiAgICAgIGF3YWl0IGJpdGdvLmNoYW5nZVBhc3N3b3JkKHsgb2xkUGFzc3dvcmQ6ICdvbGRwdycsIG5ld1Bhc3N3b3JkOiAnbmV3cHcnIH0pO1xuXG4gICAgICBiYXRjaFB1dFNjb3BlLmlzRG9uZSgpLnNob3VsZC5iZS50cnVlKCk7XG4gICAgICBjaGFuZ2VQYXNzU2NvcGUuaXNEb25lKCkuc2hvdWxkLmJlLnRydWUoKTtcbiAgICB9KTtcblxuICAgIGl0KCdzZW5kcyBrZXljaGFpbnMgaW4gdGhlIFBPU1QgYm9keSAobGVnYWN5IGZsb3cpIHdoZW4gdGhlIHNlcnZlciBkaXNhYmxlcyBiYXRjaGluZycsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIG5vY2soUk9PVCkuZ2V0KCcvYXBpL3YyL3VzZXIvY2hlY2tCYXRjaGluZ1Bhc3N3b3JkRmxvdycpLnF1ZXJ5KHRydWUpLnJlcGx5KDIwMCwgeyBpc0JhdGNoaW5nRmxvd0VuYWJsZWQ6IGZhbHNlIH0pO1xuXG4gICAgICBjb25zdCBsZWdhY3lTY29wZSA9IG5vY2soUk9PVClcbiAgICAgICAgLnBvc3QoJy9hcGkvdjEvdXNlci9jaGFuZ2VwYXNzd29yZCcsIChib2R5OiBhbnkpID0+ICEhYm9keS5rZXljaGFpbnMgJiYgISFib2R5LnYyX2tleWNoYWlucylcbiAgICAgICAgLnJlcGx5KDIwMCwge30pO1xuXG4gICAgICBhd2FpdCBiaXRnby5jaGFuZ2VQYXNzd29yZCh7IG9sZFBhc3N3b3JkOiAnb2xkcHcnLCBuZXdQYXNzd29yZDogJ25ld3B3JyB9KTtcblxuICAgICAgbGVnYWN5U2NvcGUuaXNEb25lKCkuc2hvdWxkLmJlLnRydWUoKTtcbiAgICB9KTtcblxuICAgIGl0KCdmYWxscyBiYWNrIHRvIGxlZ2FjeSBmbG93IHdoZW4gdGhlIGJhdGNoaW5nIGNoZWNrIHJlcXVlc3QgZmFpbHMnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBub2NrKFJPT1QpLmdldCgnL2FwaS92Mi91c2VyL2NoZWNrQmF0Y2hpbmdQYXNzd29yZEZsb3cnKS5xdWVyeSh0cnVlKS5yZXBseSg1MDMsIHsgZXJyb3I6ICdzZXJ2aWNlIHVuYXZhaWxhYmxlJyB9KTtcblxuICAgICAgY29uc3QgbGVnYWN5U2NvcGUgPSBub2NrKFJPT1QpXG4gICAgICAgIC5wb3N0KCcvYXBpL3YxL3VzZXIvY2hhbmdlcGFzc3dvcmQnLCAoYm9keTogYW55KSA9PiAhIWJvZHkua2V5Y2hhaW5zICYmICEhYm9keS52Ml9rZXljaGFpbnMpXG4gICAgICAgIC5yZXBseSgyMDAsIHt9KTtcblxuICAgICAgYXdhaXQgYml0Z28uY2hhbmdlUGFzc3dvcmQoeyBvbGRQYXNzd29yZDogJ29sZHB3JywgbmV3UGFzc3dvcmQ6ICduZXdwdycgfSk7XG5cbiAgICAgIGxlZ2FjeVNjb3BlLmlzRG9uZSgpLnNob3VsZC5iZS50cnVlKCk7XG4gICAgfSk7XG4gIH0pO1xufSk7XG4iXX0=
|