@workflow/builders 5.0.0-beta.44 → 5.0.0-beta.46

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.
@@ -169,6 +169,86 @@ describe('createSwcPlugin externalizeNonSteps', () => {
169
169
  })).rejects.toThrow(/Duplicate workflow step ID/);
170
170
  expect(onAfterTransform).toHaveBeenCalledOnce();
171
171
  });
172
+ it('deduplicates identical pnpm peer-variant copies emitting the same step id', async () => {
173
+ // pnpm materializes the same package version once per peer-dependency
174
+ // resolution. Both copies are byte-identical and generate the same
175
+ // canonical step ID, which must not fail the build.
176
+ const source = `export const sendMessage = true;`;
177
+ const firstCopy = join(testRoot, 'node_modules/.pnpm/shared-package@1.0.0_peer-a@1.0.0/node_modules/shared-package/index.ts');
178
+ const secondCopy = join(testRoot, 'node_modules/.pnpm/shared-package@1.0.0_peer-b@2.0.0/node_modules/shared-package/index.ts');
179
+ const onAfterTransform = vi.fn();
180
+ const workflowManifest = {};
181
+ writeFile(firstCopy, source);
182
+ writeFile(secondCopy, source);
183
+ applySwcTransformMock.mockImplementation(async (filename, fileSource) => ({
184
+ code: fileSource,
185
+ workflowManifest: {
186
+ steps: {
187
+ [filename]: {
188
+ sendMessage: {
189
+ stepId: 'step//shared-package@1.0.0//sendMessage',
190
+ },
191
+ },
192
+ },
193
+ },
194
+ }));
195
+ const result = await esbuild.build({
196
+ entryPoints: [firstCopy, secondCopy],
197
+ absWorkingDir: testRoot,
198
+ outdir: join(testRoot, 'out'),
199
+ bundle: true,
200
+ format: 'esm',
201
+ platform: 'node',
202
+ write: false,
203
+ plugins: [
204
+ createSwcPlugin({
205
+ mode: 'step',
206
+ workflowManifest,
207
+ onAfterTransform,
208
+ }),
209
+ ],
210
+ });
211
+ expect(result.errors).toHaveLength(0);
212
+ expect(onAfterTransform).toHaveBeenCalledTimes(2);
213
+ // Both copies stay in the manifest under the same step ID.
214
+ const steps = workflowManifest.steps;
215
+ expect(Object.keys(steps ?? {})).toHaveLength(2);
216
+ for (const entries of Object.values(steps ?? {})) {
217
+ expect(entries.sendMessage.stepId).toBe('step//shared-package@1.0.0//sendMessage');
218
+ }
219
+ });
220
+ it('fails the build when pnpm-style copies with different contents emit the same step id', async () => {
221
+ const firstCopy = join(testRoot, 'node_modules/.pnpm/shared-package@1.0.0_peer-a@1.0.0/node_modules/shared-package/index.ts');
222
+ const secondCopy = join(testRoot, 'node_modules/.pnpm/shared-package@1.0.0_peer-b@2.0.0/node_modules/shared-package/index.ts');
223
+ writeFile(firstCopy, `export const sendMessage = 1;`);
224
+ writeFile(secondCopy, `export const sendMessage = 2;`);
225
+ applySwcTransformMock.mockImplementation(async (filename, fileSource) => ({
226
+ code: fileSource,
227
+ workflowManifest: {
228
+ steps: {
229
+ [filename]: {
230
+ sendMessage: {
231
+ stepId: 'step//shared-package@1.0.0//sendMessage',
232
+ },
233
+ },
234
+ },
235
+ },
236
+ }));
237
+ await expect(esbuild.build({
238
+ entryPoints: [firstCopy, secondCopy],
239
+ absWorkingDir: testRoot,
240
+ outdir: join(testRoot, 'out'),
241
+ bundle: true,
242
+ format: 'esm',
243
+ platform: 'node',
244
+ write: false,
245
+ plugins: [
246
+ createSwcPlugin({
247
+ mode: 'step',
248
+ }),
249
+ ],
250
+ })).rejects.toThrow(/Duplicate workflow step ID/);
251
+ });
172
252
  it('fails the build when two files emit the same workflow id', async () => {
173
253
  const srcDir = join(testRoot, 'src');
174
254
  const firstWorkflowFile = join(srcDir, 'confirmation.ts');
@@ -959,4 +1039,4 @@ describe('createSwcPlugin projectRoot', () => {
959
1039
  expect(applySwcTransformMock).toHaveBeenCalledWith('src/internal/message/workflow/handle-message.ts', expect.stringContaining('"use workflow"'), 'workflow', fixture.workflowFile, fixture.packageRoot, fixture.packageRoot);
960
1040
  });
961
1041
  });
962
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3djLWVzYnVpbGQtcGx1Z2luLnRlc3QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvc3djLWVzYnVpbGQtcGx1Z2luLnRlc3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFNBQVMsRUFDVCxXQUFXLEVBQ1gsWUFBWSxFQUNaLE1BQU0sRUFDTixhQUFhLEdBQ2QsTUFBTSxTQUFTLENBQUM7QUFDakIsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLFNBQVMsQ0FBQztBQUNqQyxPQUFPLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUMxQyxPQUFPLEtBQUssT0FBTyxNQUFNLFNBQVMsQ0FBQztBQUNuQyxPQUFPLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsTUFBTSxRQUFRLENBQUM7QUFFekUsTUFBTSxFQUFFLHFCQUFxQixFQUFFLEdBQUcsRUFBRSxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDO0lBQ2xELHFCQUFxQixFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUU7Q0FDL0IsQ0FBQyxDQUFDLENBQUM7QUFFSixFQUFFLENBQUMsSUFBSSxDQUFDLDBCQUEwQixFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUM7SUFDekMsaUJBQWlCLEVBQUUscUJBQXFCO0NBQ3pDLENBQUMsQ0FBQyxDQUFDO0FBRUosT0FBTyxFQUNMLDJCQUEyQixFQUMzQixhQUFhLEdBQ2QsTUFBTSxzQ0FBc0MsQ0FBQztBQUM5QyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFFMUQsTUFBTSxVQUFVLEdBQUcsWUFBWSxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUM7QUFFMUMsU0FBUyxTQUFTLENBQUMsSUFBWSxFQUFFLFFBQVEsR0FBRyxFQUFFO0lBQzVDLFNBQVMsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFD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dCI6WyJpbXBvcnQge1xuICBta2RpclN5bmMsXG4gIG1rZHRlbXBTeW5jLFxuICByZWFscGF0aFN5bmMsXG4gIHJtU3luYyxcbiAgd3JpdGVGaWxlU3luYyxcbn0gZnJvbSAnbm9kZTpmcyc7XG5pbXBvcnQgeyB0bXBkaXIgfSBmcm9tICdub2RlOm9zJztcbmltcG9ydCB7IGRpcm5hbWUsIGpvaW4gfSBmcm9tICdub2RlOnBhdGgnO1xuaW1wb3J0ICogYXMgZXNidWlsZCBmcm9tICdlc2J1aWxkJztcbmltcG9ydCB7IGFmdGVyRWFjaCwgYmVmb3JlRWFjaCwgZGVzY3JpYmUsIGV4cGVjdCwgaXQsIHZpIH0gZnJvbSAndml0ZXN0JztcblxuY29uc3QgeyBhcHBseVN3Y1RyYW5zZm9ybU1vY2sgfSA9IHZpLmhvaXN0ZWQoKCkgPT4gKHtcbiAgYXBwbHlTd2NUcmFuc2Zvcm1Nb2NrOiB2aS5mbigpLFxufSkpO1xuXG52aS5tb2NrKCcuL2FwcGx5LXN3Yy10cmFuc2Zvcm0uanMnLCAoKSA9PiAoe1xuICBhcHBseVN3Y1RyYW5zZm9ybTogYXBwbHlTd2NUcmFuc2Zvcm1Nb2NrLFxufSkpO1xuXG5pbXBvcnQge1xuICBjcmVhdGVEaXNjb3ZlckVudHJpZXNQbHVnaW4sXG4gIGltcG9ydFBhcmVudHMsXG59IGZyb20gJy4vZGlzY292ZXItZW50cmllcy1lc2J1aWxkLXBsdWdpbi5qcyc7XG5pbXBvcnQgeyBjcmVhdGVTd2NQbHVnaW4gfSBmcm9tICcuL3N3Yy1lc2J1aWxkLXBsdWdpbi5qcyc7XG5cbmNvbnN0IHJlYWxUbXBkaXIgPSByZWFscGF0aFN5bmModG1wZGlyKCkpO1xuXG5mdW5jdGlvbiB3cml0ZUZpbGUocGF0aDogc3RyaW5nLCBjb250ZW50cyA9ICcnKTogdm9pZCB7XG4gIG1rZGlyU3luYyhkaXJuYW1lKHBhdGgpLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgd3JpdGVGaWxlU3luYyhwYXRoLCBjb250ZW50cywgJ3V0Zi04Jyk7XG59XG5cbmRlc2NyaWJlKCdjcmVhdGVTd2NQbHVnaW4gZXh0ZXJuYWxpemVOb25TdGVwcycsICgpID0+IHtcbiAgbGV0IHRlc3RSb290OiBzdHJpbmc7XG5cbiAgYmVmb3JlRWFjaCgoKSA9PiB7XG4gICAgdGVzdFJvb3QgPSBta2R0ZW1wU3luYyhqb2luKHJlYWxUbXBkaXIsICd3b3JrZmxvdy1zd2MtcGx1Z2luLScpKTtcbiAgICBpbXBvcnRQYXJlbnRzLmNsZWFyKCk7XG4gICAgYXBwbHlTd2NUcmFuc2Zvcm1Nb2NrLm1vY2tSZXNldCgpO1xuICAgIGFwcGx5U3djVHJhbnNmb3JtTW9jay5tb2NrSW1wbGVtZW50YXRpb24oXG4gICAgICBhc3luYyAoX2ZpbGVuYW1lOiBzdHJpbmcsIHNvdXJjZTogc3RyaW5nKSA9PiAoe1xuICAgICAgICBjb2RlOiBzb3VyY2UsXG4gICAgICAgIHdvcmtmbG93TWFuaWZlc3Q6IHt9LFxuICAgICAgfSlcbiAgICApO1xuICB9KTtcblxuICBhZnRlckVhY2goKCkgPT4ge1xuICAgIGltcG9ydFBhcmVudHMuY2xlYXIoKTtcbiAgICBybVN5bmModGVzdFJvb3QsIHsgcmVjdXJzaXZlOiB0cnVlLCBmb3JjZTogdHJ1ZSB9KTtcbiAgfSk7XG5cbiAgaXQoJ3JlcG9ydHMgYXV0aG9yaXRhdGl2ZSB0cmFuc2Zvcm0gcmVzdWx0cyB0byBhbiBvcHRpb25hbCBvYnNlcnZlcicsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBzcmNEaXIgPSBqb2luKHRlc3RSb290LCAnc3JjJyk7XG4gICAgY29uc3Qgc3RlcEZpbGUgPSBqb2luKHNyY0RpciwgJ3N0ZXAudHMnKTtcbiAgICBjb25zdCBzb3VyY2UgPSAnZXhwb3J0IGNvbnN0IHZhbHVlID0gNDI7JztcbiAgICBjb25zdCB3b3JrZmxvd01hbmlmZXN0ID0ge1xuICAgICAgc3RlcHM6IHtcbiAgICAgICAgJ3NyYy9zdGVwLnRzJzoge1xuICAgICAgICAgIHZhbHVlOiB7XG4gICAgICAgICAgICBzdGVwSWQ6ICdzdGVwLy9zcmMvc3RlcC8vdmFsdWUnLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIH07XG4gICAgY29uc3Qgb25BZnRlclRyYW5zZm9ybSA9IHZpLmZuKCk7XG5cbiAgICB3cml0ZUZpbGUoc3RlcEZpbGUsIHNvdXJjZSk7XG4gICAgYXBwbHlTd2NUcmFuc2Zvcm1Nb2NrLm1vY2tSZXNvbHZlZFZhbHVlKHtcbiAgICAgIGNvZGU6IGAke3NvdXJjZX1cXG4vKiB0cmFuc2Zvcm1lZCAqL2AsXG4gICAgICB3b3JrZmxvd01hbmlmZXN0LFxuICAgIH0pO1xuXG4gICAgYXdhaXQgZXNidWlsZC5idWlsZCh7XG4gICAgICBlbnRyeVBvaW50czogW3N0ZXBGaWxlXSxcbiAgICAgIGFic1dvcmtpbmdEaXI6IHRlc3RSb290LFxuICAgICAgb3V0ZGlyOiBqb2luKHRlc3RSb290LCAnb3V0JyksXG4gICAgICBidW5kbGU6IHRydWUsXG4gICAgICB3cml0ZTogZmFsc2UsXG4gICAgICBwbHVnaW5zOiBbXG4gICAgICAgIGNyZWF0ZVN3Y1BsdWdpbih7XG4gICAgICAgICAgbW9kZTogJ3N0ZXAnLFxuICAgICAgICAgIGVudHJpZXNUb0J1bmRsZTogW3N0ZXBGaWxlXSxcbiAgICAgICAgICBvbkFmdGVyVHJhbnNmb3JtLFxuICAgICAgICB9KSxcbiAgICAgIF0sXG4gICAgfSk7XG5cbiAgICBleHBlY3Qob25BZnRlclRyYW5zZm9ybSkudG9IYXZlQmVlbkNhbGxlZE9uY2UoKTtcbiAgICBleHBlY3Qob25BZnRlclRyYW5zZm9ybSkudG9IYXZlQmVlbkNhbGxlZFdpdGgoe1xuICAgICAgbW9kZTogJ3N0ZXAnLFxuICAgICAgZmlsZW5hbWU6ICdzcmMvc3RlcC50cycsXG4gICAgICBhYnNvbHV0ZVBhdGg6IHN0ZXBGaWxlLFxuICAgICAgc291cmNlLFxuICAgICAgY29kZTogYCR7c291cmNlfVxcbi8qIHRyYW5zZm9ybWVkICovYCxcbiAgICAgIHdvcmtmbG93TWFuaWZlc3QsXG4gICAgfSk7XG4gIH0pO1xuXG4gIGl0KCdhd2FpdHMgYXN5bmNocm9ub3VzIHRyYW5zZm9ybSBvYnNlcnZlcnMnLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3Qgc3RlcEZpbGUgPSBqb2luKHRlc3RSb290LCAnc3JjJywgJ3N0ZXAudHMnKTtcbiAgICBsZXQgbWFya09ic2VydmVyU3RhcnRlZDogKCkgPT4gdm9pZCA9ICgpID0+IHt9O1xuICAgIGxldCByZWxlYXNlT2JzZXJ2ZXI6ICgpID0+IHZvaWQgPSAoKSA9PiB7fTtcbiAgICBjb25zdCBvYnNlcnZlclN0YXJ0ZWQgPSBuZXcgUHJvbWlzZTx2b2lkPigocmVzb2x2ZSkgPT4ge1xuICAgICAgbWFya09ic2VydmVyU3RhcnRlZCA9IHJlc29sdmU7XG4gICAgfSk7XG4gICAgY29uc3Qgb2JzZXJ2ZXJCbG9ja2VkID0gbmV3IFByb21pc2U8dm9pZD4oKHJlc29sdmUpID0+IHtcbiAgICAgIHJlbGVhc2VPYnNlcnZlciA9IHJlc29sdmU7XG4gICAgfSk7XG4gICAgbGV0IGJ1aWxkQ29tcGxldGVkID0gZmFsc2U7XG5cbiAgICB3cml0ZUZpbGUoc3RlcEZpbGUsICdleHBvcnQgY29uc3QgdmFsdWUgPSA0MjsnKTtcblxuICAgIGNvbnN0IGJ1aWxkID0gZXNidWlsZC5idWlsZCh7XG4gICAgICBlbnRyeVBvaW50czogW3N0ZXBGaWxlXSxcbiAgICAgIGFic1dvcmtpbmdEaXI6IHRlc3RSb290LFxuICAgICAgb3V0ZGlyOiBqb2luKHRlc3RSb290LCAnb3V0JyksXG4gICAgICBidW5kbGU6IHRydWUsXG4gICAgICB3cml0ZTogZmFsc2UsXG4gICAgICBwbHVnaW5zOiBbXG4gICAgICAgIGNyZWF0ZVN3Y1BsdWdpbih7XG4gICAgICAgICAgbW9kZTogJ3N0ZXAnLFxuICAgICAgICAgIGVudHJpZXNUb0J1bmRsZTogW3N0ZXBGaWxlXSxcbiAgICAgICAgICBvbkFmdGVyVHJhbnNmb3JtOiBhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICBtYXJrT2JzZXJ2ZXJTdGFydGVkKCk7XG4gICAgICAgICAgICBhd2FpdCBvYnNlcnZlckJsb2NrZWQ7XG4gICAgICAgICAgfSxcbiAgICAgICAgfSksXG4gICAgICBdLFxuICAgIH0pO1xuICAgIHZvaWQgYnVpbGQudGhlbigoKSA9PiB7XG4gICAgICBidWlsZENvbXBsZXRlZCA9IHRydWU7XG4gICAgfSk7XG5cbiAgICBhd2FpdCBvYnNlcnZlclN0YXJ0ZWQ7XG4gICAgYXdhaXQgUHJvbWlzZS5yZXNvbHZlKCk7XG4gICAgZXhwZWN0KGJ1aWxkQ29tcGxldGVkKS50b0JlKGZhbHNlKTtcblxuICAgIHJlbGVhc2VPYnNlcnZlcigpO1xuICAgIGF3YWl0IGJ1aWxkO1xuICAgIGV4cGVjdChidWlsZENvbXBsZXRlZCkudG9CZSh0cnVlKTtcbiAgfSk7XG5cbiAgaXQoJ2ZhaWxzIHRoZSBidWlsZCB3aGVuIGEgdHJhbnNmb3JtIG9ic2VydmVyIHRocm93cycsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBzdGVwRmlsZSA9IGpvaW4odGVzdFJvb3QsICdzcmMnLCAnc3RlcC50cycpO1xuXG4gICAgd3JpdGVGaWxlKHN0ZXBGaWxlLCAnZXhwb3J0IGNvbnN0IHZhbHVlID0gNDI7Jyk7XG5cbiAgICBhd2FpdCBleHBlY3QoXG4gICAgICBlc2J1aWxkLmJ1aWxkKHtcbiAgICAgICAgZW50cnlQb2ludHM6IFtzdGVwRmlsZV0sXG4gICAgICAgIGFic1dvcmtpbmdEaXI6IHRlc3RSb290LFxuICAgICAgICBvdXRkaXI6IGpvaW4odGVzdFJvb3QsICdvdXQnKSxcbiAgICAgICAgYnVuZGxlOiB0cnVlLFxuICAgICAgICB3cml0ZTogZmFsc2UsXG4gICAgICAgIHBsdWdpbnM6IFtcbiAgICAgICAgICBjcmVhdGVTd2NQbHVnaW4oe1xuICAgICAgICAgICAgbW9kZTogJ3N0ZXAnLFxuICAgICAgICAgICAgZW50cmllc1RvQnVuZGxlOiBbc3RlcEZpbGVdLFxuICAgICAgICAgICAgb25BZnRlclRyYW5zZm9ybTogKCkgPT4ge1xuICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3RyYW5zZm9ybSBvYnNlcnZlciBmYWlsZWQnKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSksXG4gICAgICAgIF0sXG4gICAgICB9KVxuICAgICkucmVqZWN0cy50b1Rocm93KC90cmFuc2Zvcm0gb2JzZXJ2ZXIgZmFpbGVkLyk7XG4gIH0pO1xuXG4gIGl0KCdmYWlscyB0aGUgYnVpbGQgd2hlbiB0d28gZmlsZXMgZW1pdCB0aGUgc2FtZSBzdGVwIGlkJywgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IHNyY0RpciA9IGpvaW4odGVzdFJvb3QsICdzcmMnKTtcbiAgICBjb25zdCBmaXJzdFN0ZXBGaWxlID0gam9pbihzcmNEaXIsICdjb25maXJtYXRpb24udHMnKTtcbiAgICBjb25zdCBzZWNvbmRTdGVwRmlsZSA9IGpvaW4oc3JjRGlyLCAncmVzY2hlZHVsZS50cycpO1xuICAgIGNvbnN0IG9uQWZ0ZXJUcmFuc2Zvcm0gPSB2aS5mbigpO1xuXG4gICAgd3JpdGVGaWxlKGZpcnN0U3RlcEZpbGUsIGBleHBvcnQgY29uc3QgZmlyc3QgPSB0cnVlO2ApO1xuICAgIHdyaXRlRmlsZShzZWNvbmRTdGVwRmlsZSwgYGV4cG9ydCBjb25zdCBzZWNvbmQgPSB0cnVlO2ApO1xuXG4gICAgYXBwbHlTd2NUcmFuc2Zvcm1Nb2NrLm1vY2tJbXBsZW1lbnRhdGlvbihcbiAgICAgIGFzeW5jIChmaWxlbmFtZTogc3RyaW5nLCBzb3VyY2U6IHN0cmluZykgPT4gKHtcbiAgICAgICAgY29kZTogc291cmNlLFxuICAgICAgICB3b3JrZmxvd01hbmlmZXN0OiB7XG4gICAgICAgICAgc3RlcHM6IHtcbiAgICAgICAgICAgIFtmaWxlbmFtZV06IHtcbiAgICAgICAgICAgICAgc2VuZE1lc3NhZ2U6IHtcbiAgICAgICAgICAgICAgICBzdGVwSWQ6ICdzdGVwLy9zaGFyZWQtcGFja2FnZUAxLjAuMC8vc2VuZE1lc3NhZ2UnLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgfSlcbiAgICApO1xuXG4gICAgYXdhaXQgZXhwZWN0KFxuICAgICAgZXNidWlsZC5idWlsZCh7XG4gICAgICAgIGVudHJ5UG9pbnRzOiBbZmlyc3RTdGVwRmlsZSwgc2Vjb25kU3RlcEZpbGVdLFxuICAgICAgICBhYnNXb3JraW5nRGlyOiB0ZXN0Um9vdCxcbiAgICAgICAgb3V0ZGlyOiBqb2luKHRlc3RSb290LCAnb3V0JyksXG4gICAgICAgIGJ1bmRsZTogdHJ1ZSxcbiAgICAgICAgZm9ybWF0OiAnZXNtJyxcbiAgICAgICAgcGxhdGZvcm06ICdub2RlJyxcbiAgICAgICAgd3JpdGU6IGZhbHNlLFxuICAgICAgICBwbHVnaW5zOiBbXG4gICAgICAgICAgY3JlYXRlU3djUGx1Z2luKHtcbiAgICAgICAgICAgIG1vZGU6ICdzdGVwJyxcbiAgICAgICAgICAgIG9uQWZ0ZXJUcmFuc2Zvcm0sXG4gICAgICAgICAgfSksXG4gICAgICAgIF0sXG4gICAgICB9KVxuICAgICkucmVqZWN0cy50b1Rocm93KC9EdXBsaWNhdGUgd29ya2Zsb3cgc3RlcCBJRC8pO1xuICAgIGV4cGVjdChvbkFmdGVyVHJhbnNmb3JtKS50b0hhdmVCZWVuQ2FsbGVkT25jZSgpO1xuICB9KTtcblxuICBpdCgnZmFpbHMgdGhlIGJ1aWxkIHdoZW4gdHdvIGZpbGVzIGVtaXQgdGhlIHNhbWUgd29ya2Zsb3cgaWQnLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3Qgc3JjRGlyID0gam9pbih0ZXN0Um9vdCwgJ3NyYycpO1xuICAgIGNvbnN0IGZpcnN0V29ya2Zsb3dGaWxlID0gam9pbihzcmNEaXIsICdjb25maXJtYXRpb24udHMnKTtcbiAgICBjb25zdCBzZWNvbmRXb3JrZmxvd0ZpbGUgPSBqb2luKHNyY0RpciwgJ3Jlc2NoZWR1bGUudHMnKTtcblxuICAgIHdyaXRlRmlsZShmaXJzdFdvcmtmbG93RmlsZSwgYGV4cG9ydCBjb25zdCBmaXJzdCA9IHRydWU7YCk7XG4gICAgd3JpdGVGaWxlKHNlY29uZFdvcmtmbG93RmlsZSwgYGV4cG9ydCBjb25zdCBzZWNvbmQgPSB0cnVlO2ApO1xuXG4gICAgYXBwbHlTd2NUcmFuc2Zvcm1Nb2NrLm1vY2tJbXBsZW1lbnRhdGlvbihcbiAgICAgIGFzeW5jIChmaWxlbmFtZTogc3RyaW5nLCBzb3VyY2U6IHN0cmluZykgPT4gKHtcbiAgICAgICAgY29kZTogc291cmNlLFxuICAgICAgICB3b3JrZmxvd01hbmlmZXN0OiB7XG4gICAgICAgICAgd29ya2Zsb3dzOiB7XG4gICAgICAgICAgICBbZmlsZW5hbWVdOiB7XG4gICAgICAgICAgICAgIHNlbmRNZXNzYWdlOiB7XG4gICAgICAgICAgICAgICAgd29ya2Zsb3dJZDogJ3dvcmtmbG93Ly9zaGFyZWQtcGFja2FnZUAxLjAuMC8vc2VuZE1lc3NhZ2UnLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgfSlcbiAgICApO1xuXG4gICAgYXdhaXQgZXhwZWN0KFxuICAgICAgZXNidWlsZC5idWlsZCh7XG4gICAgICAgIGVudHJ5UG9pbnRzOiBbZmlyc3RXb3JrZmxvd0ZpbGUsIHNlY29uZFdvcmtmbG93RmlsZV0sXG4gICAgICAgIGFic1dvcmtpbmdEaXI6IHRlc3RSb290LFxuICAgICAgICBvdXRkaXI6IGpvaW4odGVzdFJvb3QsICdvdXQnKSxcbiAgICAgICAgYnVuZGxlOiB0cnVlLFxuICAgICAgICBmb3JtYXQ6ICdlc20nLFxuICAgICAgICBwbGF0Zm9ybTogJ25vZGUnLFxuICAgICAgICB3cml0ZTogZmFsc2UsXG4gICAgICAgIHBsdWdpbnM6IFtcbiAgICAgICAgICBjcmVhdGVTd2NQbHVnaW4oe1xuICAgICAgICAgICAgbW9kZTogJ3dvcmtmbG93JyxcbiAgICAgICAgICB9KSxcbiAgICAgICAgXSxcbiAgICAgIH0pXG4gICAgKS5yZWplY3RzLnRvVGhyb3coL0R1cGxpY2F0ZSB3b3JrZmxvdyBJRC8pO1xuICB9KTtcblxuICBpdC5lYWNoKFtcbiAgICB7IGlucHV0RXh0OiAnLnRzJywgb3V0cHV0RXh0OiAnLmpzJyB9LFxuICAgIHsgaW5wdXRFeHQ6ICcudHN4Jywgb3V0cHV0RXh0OiAnLmpzJyB9LFxuICAgIHsgaW5wdXRFeHQ6ICcubXRzJywgb3V0cHV0RXh0OiAnLm1qcycgfSxcbiAgICB7IGlucHV0RXh0OiAnLmN0cycsIG91dHB1dEV4dDogJy5janMnIH0sXG4gIF0pKCdyZXdyaXRlcyBleHRlcm5hbGl6ZWQgJGlucHV0RXh0IGltcG9ydHMgdG8gJG91dHB1dEV4dCB3aGVuIHJld3JpdGVUc0V4dGVuc2lvbnMgaXMgZW5hYmxlZCcsIGFzeW5jICh7XG4gICAgaW5wdXRFeHQsXG4gICAgb3V0cHV0RXh0LFxuICB9KSA9PiB7XG4gICAgY29uc3Qgb3V0ZGlyID0gam9pbih0ZXN0Um9vdCwgJ291dCcpO1xuICAgIGNvbnN0IHNyY0RpciA9IGpvaW4odGVzdFJvb3QsICdzcmMnKTtcbiAgICBjb25zdCBzdGVwRmlsZSA9IGpvaW4oc3JjRGlyLCAnc3RlcC50cycpO1xuXG4gICAgd3JpdGVGaWxlKGpvaW4oc3JjRGlyLCBgZGVwJHtpbnB1dEV4dH1gKSwgJ2V4cG9ydCBjb25zdCBkZXAgPSB7fTsnKTtcbiAgICB3cml0ZUZpbGUoc3RlcEZpbGUsIGBpbXBvcnQgeyBkZXAgfSBmcm9tICcuL2RlcCc7XFxuY29uc29sZS5sb2coZGVwKTtgKTtcblxuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGVzYnVpbGQuYnVpbGQoe1xuICAgICAgZW50cnlQb2ludHM6IFtzdGVwRmlsZV0sXG4gICAgICBhYnNXb3JraW5nRGlyOiB0ZXN0Um9vdCxcbiAgICAgIG91dGRpcixcbiAgICAgIGJ1bmRsZTogdHJ1ZSxcbiAgICAgIGZvcm1hdDogJ2VzbScsXG4gICAgICBwbGF0Zm9ybTogJ25vZGUnLFxuICAgICAgd3JpdGU6IGZhbHNlLFxuICAgICAgcGx1Z2luczogW1xuICAgICAgICBjcmVhdGVTd2NQbHVnaW4oe1xuICAgICAgICAgIG1vZGU6ICdzdGVwJyxcbiAgICAgICAgICBlbnRyaWVzVG9CdW5kbGU6IFtzdGVwRmlsZV0sXG4gICAgICAgICAgb3V0ZGlyLFxuICAgICAgICAgIHJld3JpdGVUc0V4dGVuc2lvbnM6IHRydWUsXG4gICAgICAgIH0pLFxuICAgICAgXSxcbiAgICB9KTtcblxuICAgIGV4cGVjdChyZXN1bHQuZXJyb3JzKS50b0hhdmVMZW5ndGgoMCk7XG4gICAgY29uc3Qgb3V0cHV0ID0gcmVzdWx0Lm91dHB1dEZpbGVzWzBdLnRleHQ7XG4gICAgZXhwZWN0KG91dHB1dCkudG9Db250YWluKGAvZGVwJHtvdXRwdXRFeHR9YCk7XG4gICAgZXhwZWN0KG91dHB1dCkubm90LnRvQ29udGFpbihgL2RlcCR7aW5wdXRFeHR9YCk7XG4gIH0pO1xuXG4gIGl0KCdidW5kbGVzIHBhdGgtYWxpYXNlZCBwcm9qZWN0LWxvY2FsIGltcG9ydHMgaW5saW5lJywgYXN5bmMgKCkgPT4ge1xuICAgIC8vIEFsaWFzZWQgcHJvamVjdC1sb2NhbCBmaWxlcyBtdXN0IGJlIGJ1bmRsZWQgaW5saW5lIChub3QgZXh0ZXJuYWxpemVkXG4gICAgLy8gYXMgcmVsYXRpdmUgcGF0aHMpIGJlY2F1c2UgdGhlaXIgc291cmNlIG9uIGRpc2sgbWF5IGNvbnRhaW4gZnVydGhlclxuICAgIC8vIGFsaWFzIGltcG9ydHMgdGhhdCBOb2RlJ3MgRVNNIGxvYWRlciBjYW5ub3QgcmVzb2x2ZSBhdCBydW50aW1lLlxuICAgIC8vIFNlZSBwYWNrYWdlcy9idWlsZGVycy9zcmMvc3djLWVzYnVpbGQtcGx1Z2luLnRzIGZvciBmdWxsIHJlYXNvbmluZy5cbiAgICBjb25zdCBvdXRkaXIgPSBqb2luKHRlc3RSb290LCAnb3V0Jyk7XG4gICAgY29uc3Qgc3JjRGlyID0gam9pbih0ZXN0Um9vdCwgJ3NyYycpO1xuICAgIGNvbnN0IGxpYkRpciA9IGpvaW4oc3JjRGlyLCAnbGliJyk7XG4gICAgY29uc3Qgc3RlcEZpbGUgPSBqb2luKHNyY0RpciwgJ3N0ZXAudHMnKTtcblxuICAgIHdyaXRlRmlsZShcbiAgICAgIGpvaW4obGliRGlyLCAnY29uZmlnLnRzJyksXG4gICAgICAnZXhwb3J0IGNvbnN0IGNvbmZpZyA9IHsgdmFsdWU6IFwiaGVsbG8tZnJvbS1jb25maWdcIiB9OydcbiAgICApO1xuICAgIHdyaXRlRmlsZShcbiAgICAgIHN0ZXBGaWxlLFxuICAgICAgYGltcG9ydCB7IGNvbmZpZyB9IGZyb20gJ0AvbGliL2NvbmZpZyc7XFxuY29uc29sZS5sb2coY29uZmlnKTtgXG4gICAgKTtcblxuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGVzYnVpbGQuYnVpbGQoe1xuICAgICAgZW50cnlQb2ludHM6IFtzdGVwRmlsZV0sXG4gICAgICBhYnNXb3JraW5nRGlyOiB0ZXN0Um9vdCxcbiAgICAgIG91dGRpcixcbiAgICAgIGJ1bmRsZTogdHJ1ZSxcbiAgICAgIGZvcm1hdDogJ2VzbScsXG4gICAgICBwbGF0Zm9ybTogJ25vZGUnLFxuICAgICAgd3JpdGU6IGZhbHNlLFxuICAgICAgYWxpYXM6IHsgJ0AnOiBzcmNEaXIgfSxcbiAgICAgIHBsdWdpbnM6IFtcbiAgICAgICAgY3JlYXRlU3djUGx1Z2luKHtcbiAgICAgICAgICBtb2RlOiAnc3RlcCcsXG4gICAgICAgICAgZW50cmllc1RvQnVuZGxlOiBbc3RlcEZpbGVdLFxuICAgICAgICAgIG91dGRpcixcbiAgICAgICAgICByZXdyaXRlVHNFeHRlbnNpb25zOiB0cnVlLFxuICAgICAgICB9KSxcbiAgICAgIF0sXG4gICAgfSk7XG5cbiAgICBleHBlY3QocmVzdWx0LmVycm9ycykudG9IYXZlTGVuZ3RoKDApO1xuICAgIGNvbnN0IG91dHB1dCA9IHJlc3VsdC5vdXRwdXRGaWxlc1swXS50ZXh0O1xuICAgIC8vIFRoZSBhbGlhc2VkIGhlbHBlciBzaG91bGQgYmUgYnVuZGxlZCBpbmxpbmUgKGl0cyBjb250ZW50IGlzIGluIHRoZVxuICAgIC8vIG91dHB1dCksIG5vdCBleHRlcm5hbGl6ZWQgYXMgYSByZWxhdGl2ZSBwYXRoIG9yIGxlZnQgYXMgYSBiYXJlIGFsaWFzLlxuICAgIGV4cGVjdChvdXRwdXQpLnRvQ29udGFpbignaGVsbG8tZnJvbS1jb25maWcnKTtcbiAgICBleHBlY3Qob3V0cHV0KS5ub3QudG9Db250YWluKCdAL2xpYi9jb25maWcnKTtcbiAgICBleHBlY3Qob3V0cHV0KS5ub3QudG9NYXRjaCgvZnJvbVxccytbXCInXVteXCInXSpcXC9saWJcXC9jb25maWdcXC4oanN8dHMpW1wiJ10vKTtcbiAgfSk7XG5cbiAgaXQoJ2J1bmRsZXMgdHJhbnNpdGl2ZSBhbGlhc2VkIGltcG9ydHMgaW5zaWRlIGFsaWFzZWQgaGVscGVycyAoTXV4IHNlbGYtcmVmZXJlbmNpbmcgcGFja2FnZSByZWdyZXNzaW9uKScsIGFzeW5jICgpID0+IHtcbiAgICAvLyBSZWdyZXNzaW9uIHRlc3QgZm9yIGh0dHBzOi8vZ2l0aHViLmNvbS9tdXhpbmMvYWkvcHVsbC8xOTMuXG4gICAgLy9cbiAgICAvLyBBIHBhY2thZ2Ugc2VsZi1yZWZlcmVuY2VzIGl0cyBvd24gc3VicGF0aCB2aWEgdHNjb25maWcgYHBhdGhzYCAoZS5nLlxuICAgIC8vIGBAbXktcGtnL2xpYi9mb29gIOKGkiBgc3JjL2xpYi9mb28udHNgKS4gQSBzdGVwIGZpbGUgaW1wb3J0cyBhIGhlbHBlclxuICAgIC8vIHZpYSB0aGUgYWxpYXMsIGFuZCB0aGF0IGhlbHBlciBpbXBvcnRzIGFub3RoZXIgaGVscGVyIHZpYSB0aGUgYWxpYXMuXG4gICAgLy9cbiAgICAvLyBQcmV2aW91c2x5IHRoZSBoZWxwZXJzIHdlcmUgZXh0ZXJuYWxpemVkIGFzIHJlbGF0aXZlIHBhdGhzLCBidXQgdGhlaXJcbiAgICAvLyBzb3VyY2Ugb24gZGlzayBzdGlsbCBjb250YWluZWQgYGltcG9ydCBcIkBteS1wa2cvbGliLy4uLlwiYC4gQXQgcnVudGltZSxcbiAgICAvLyBOb2RlJ3MgRVNNIGxvYWRlciBkaWRuJ3Qga25vdyBhYm91dCB0c2NvbmZpZyBwYXRocywgZmVsbCB0aHJvdWdoIHRvXG4gICAgLy8gdGhlIHBhY2thZ2UncyBgZXhwb3J0c2AgbWFwLCBhbmQgdGhyZXcgYFBhY2thZ2Ugc3VicGF0aCAuLi4gaXMgbm90XG4gICAgLy8gZGVmaW5lZCBieSBcImV4cG9ydHNcImAuXG4gICAgLy9cbiAgICAvLyBXaXRoIHRoZSBmaXgsIGFsaWFzZWQgcHJvamVjdC1sb2NhbCBmaWxlcyBhcmUgYnVuZGxlZCBpbmxpbmUsIHNvXG4gICAgLy8gdGhlaXIgYWxpYXMgaW1wb3J0cyBhcmUgcmVzb2x2ZWQgYXQgYnVpbGQgdGltZS5cbiAgICBjb25zdCBvdXRkaXIgPSBqb2luKHRlc3RSb290LCAnb3V0Jyk7XG4gICAgY29uc3Qgc3JjRGlyID0gam9pbih0ZXN0Um9vdCwgJ3NyYycpO1xuICAgIGNvbnN0IGxpYkRpciA9IGpvaW4oc3JjRGlyLCAnbGliJyk7XG4gICAgY29uc3Qgc3RlcEZpbGUgPSBqb2luKHNyY0RpciwgJ3N0ZXAudHMnKTtcblxuICAgIHdyaXRlRmlsZShcbiAgICAgIGpvaW4obGliRGlyLCAncHJvdmlkZXJzLnRzJyksXG4gICAgICAnZXhwb3J0IGNvbnN0IHByb3ZpZGVyTmFtZSA9IFwiYW50aHJvcGljXCI7J1xuICAgICk7XG4gICAgd3JpdGVGaWxlKFxuICAgICAgam9pbihsaWJEaXIsICdjbGllbnQtZmFjdG9yeS50cycpLFxuICAgICAgLy8gSGVscGVyIHVzZXMgdGhlIHNhbWUgYWxpYXMgdG8gcmVhY2ggYSBzaWJsaW5nIOKAlCB0aGlzIGlzIHRoZSBjYXNlXG4gICAgICAvLyB0aGF0IGJyb2tlIHRoZSBNdXggYnVpbGQgd2l0aCB3b3JrZmxvdyA+PSA0LjIuMC1iZXRhLjc4LlxuICAgICAgYGltcG9ydCB7IHByb3ZpZGVyTmFtZSB9IGZyb20gJ0BteS1wa2cvbGliL3Byb3ZpZGVycyc7XG5leHBvcnQgY29uc3QgY2xpZW50ID0geyBwcm92aWRlcjogcHJvdmlkZXJOYW1lIH07YFxuICAgICk7XG4gICAgd3JpdGVGaWxlKFxuICAgICAgc3RlcEZpbGUsXG4gICAgICBgaW1wb3J0IHsgY2xpZW50IH0gZnJvbSAnQG15LXBrZy9saWIvY2xpZW50LWZhY3RvcnknO1xcbmNvbnNvbGUubG9nKGNsaWVudCk7YFxuICAgICk7XG5cbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBlc2J1aWxkLmJ1aWxkKHtcbiAgICAgIGVudHJ5UG9pbnRzOiBbc3RlcEZpbGVdLFxuICAgICAgYWJzV29ya2luZ0RpcjogdGVzdFJvb3QsXG4gICAgICBvdXRkaXIsXG4gICAgICBidW5kbGU6IHRydWUsXG4gICAgICBmb3JtYXQ6ICdlc20nLFxuICAgICAgcGxhdGZvcm06ICdub2RlJyxcbiAgICAgIHdyaXRlOiBmYWxzZSxcbiAgICAgIGFsaWFzOiB7ICdAbXktcGtnJzogc3JjRGlyIH0sXG4gICAgICBwbHVnaW5zOiBbXG4gICAgICAgIGNyZWF0ZVN3Y1BsdWdpbih7XG4gICAgICAgICAgbW9kZTogJ3N0ZXAnLFxuICAgICAgICAgIGVudHJpZXNUb0J1bmRsZTogW3N0ZXBGaWxlXSxcbiAgICAgICAgICBvdXRkaXIsXG4gICAgICAgICAgcmV3cml0ZVRzRXh0ZW5zaW9uczogdHJ1ZSxcbiAgICAgICAgfSksXG4gICAgICBdLFxuICAgIH0pO1xuXG4gICAgZXhwZWN0KHJlc3VsdC5lcnJvcnMpLnRvSGF2ZUxlbmd0aCgwKTtcbiAgICBjb25zdCBvdXRwdXQgPSByZXN1bHQub3V0cHV0RmlsZXNbMF0udGV4dDtcbiAgICAvLyBCb3RoIGhlbHBlcnMgc2hvdWxkIGJlIGJ1bmRsZWQgaW5saW5lIOKAlCBubyBhbGlhc2VkIHNwZWNpZmllcnMgc2hvdWxkXG4gICAgLy8gbGVhayBpbnRvIHRoZSBvdXRwdXQsIHdoZXJlIE5vZGUncyBFU00gbG9hZGVyIHdvdWxkIGNob2tlIG9uIHRoZW0uXG4gICAgZXhwZWN0KG91dHB1dCkudG9Db250YWluKCdhbnRocm9waWMnKTtcbiAgICBleHBlY3Qob3V0cHV0KS5ub3QudG9Db250YWluKCdAbXktcGtnL2xpYi9wcm92aWRlcnMnKTtcbiAgICBleHBlY3Qob3V0cHV0KS5ub3QudG9Db250YWluKCdAbXktcGtnL2xpYi9jbGllbnQtZmFjdG9yeScpO1xuICB9KTtcblxuICBpdCgnZG9lcyBub3QgcmVsYXRpdml6ZSBOb2RlLmpzIGJ1aWx0aW4gaW1wb3J0cycsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBvdXRkaXIgPSBqb2luKHRlc3RSb290LCAnb3V0Jyk7XG4gICAgY29uc3Qgc3JjRGlyID0gam9pbih0ZXN0Um9vdCwgJ3NyYycpO1xuICAgIGNvbnN0IHN0ZXBGaWxlID0gam9pbihzcmNEaXIsICdzdGVwLnRzJyk7XG5cbiAgICB3cml0ZUZpbGUoXG4gICAgICBzdGVwRmlsZSxcbiAgICAgIGBpbXBvcnQgeyBjcmVhdGVIYXNoIH0gZnJvbSAnY3J5cHRvJztcXG5pbXBvcnQgeyBqb2luIH0gZnJvbSAnbm9kZTpwYXRoJztcXG5jb25zb2xlLmxvZyhjcmVhdGVIYXNoLCBqb2luKTtgXG4gICAgKTtcblxuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGVzYnVpbGQuYnVpbGQoe1xuICAgICAgZW50cnlQb2ludHM6IFtzdGVwRmlsZV0sXG4gICAgICBhYnNXb3JraW5nRGlyOiB0ZXN0Um9vdCxcbiAgICAgIG91dGRpcixcbiAgICAgIGJ1bmRsZTogdHJ1ZSxcbiAgICAgIGZvcm1hdDogJ2VzbScsXG4gICAgICBwbGF0Zm9ybTogJ25vZGUnLFxuICAgICAgd3JpdGU6IGZhbHNlLFxuICAgICAgcGx1Z2luczogW1xuICAgICAgICBjcmVhdGVTd2NQbHVnaW4oe1xuICAgICAgICAgIG1vZGU6ICdzdGVwJyxcbiAgICAgICAgICBlbnRyaWVzVG9CdW5kbGU6IFtzdGVwRmlsZV0sXG4gICAgICAgICAgb3V0ZGlyLFxuICAgICAgICB9KSxcbiAgICAgIF0sXG4gICAgfSk7XG5cbiAgICBleHBlY3QocmVzdWx0LmVycm9ycykudG9IYXZlTGVuZ3RoKDApO1xuICAgIGNvbnN0IG91dHB1dCA9IHJlc3VsdC5vdXRwdXRGaWxlc1swXS50ZXh0O1xuICAgIC8vIEJ1aWx0aW5zIHNob3VsZCByZW1haW4gYXMgYmFyZSBzcGVjaWZpZXJzLCBub3QgcmVsYXRpdml6ZWQgcGF0aHNcbiAgICBleHBlY3Qob3V0cHV0KS50b01hdGNoKC9mcm9tXFxzK1tcIiddY3J5cHRvW1wiJ10vKTtcbiAgICBleHBlY3Qob3V0cHV0KS50b01hdGNoKC9mcm9tXFxzK1tcIiddbm9kZTpwYXRoW1wiJ10vKTtcbiAgICBleHBlY3Qob3V0cHV0KS5ub3QudG9NYXRjaCgvZnJvbVxccytbXCInXVxcLi4qY3J5cHRvW1wiJ10vKTtcbiAgICBleHBlY3Qob3V0cHV0KS5ub3QudG9NYXRjaCgvZnJvbVxccytbXCInXVxcLi4qbm9kZTpwYXRoW1wiJ10vKTtcbiAgfSk7XG5cbiAgaXQoJ2RvZXMgbm90IGV4dGVybmFsaXplIGFsaWFzZWQgaW1wb3J0cyB0aGF0IHJlc29sdmUgaW50byBub2RlX21vZHVsZXMnLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3Qgb3V0ZGlyID0gam9pbih0ZXN0Um9vdCwgJ291dCcpO1xuICAgIGNvbnN0IHNyY0RpciA9IGpvaW4odGVzdFJvb3QsICdzcmMnKTtcbiAgICBjb25zdCBzdGVwRmlsZSA9IGpvaW4oc3JjRGlyLCAnc3RlcC50cycpO1xuICAgIGNvbnN0IG5vZGVNb2R1bGVzRGlyID0gam9pbih0ZXN0Um9vdCwgJ25vZGVfbW9kdWxlcycsICdzb21lLXBrZycpO1xuXG4gICAgd3JpdGVGaWxlKGpvaW4obm9kZU1vZHVsZXNEaXIsICdpbmRleC5qcycpLCAnZXhwb3J0IGNvbnN0IHBrZyA9IFwiaGVsbG9cIjsnKTtcbiAgICB3cml0ZUZpbGUoc3RlcEZpbGUsIGBpbXBvcnQgeyBwa2cgfSBmcm9tICdAcGtnJztcXG5jb25zb2xlLmxvZyhwa2cpO2ApO1xuXG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgZXNidWlsZC5idWlsZCh7XG4gICAgICBlbnRyeVBvaW50czogW3N0ZXBGaWxlXSxcbiAgICAgIGFic1dvcmtpbmdEaXI6IHRlc3RSb290LFxuICAgICAgb3V0ZGlyLFxuICAgICAgYnVuZGxlOiB0cnVlLFxuICAgICAgZm9ybWF0OiAnZXNtJyxcbiAgICAgIHBsYXRmb3JtOiAnbm9kZScsXG4gICAgICB3cml0ZTogZmFsc2UsXG4gICAgICBhbGlhczogeyAnQHBrZyc6IGpvaW4obm9kZU1vZHVsZXNEaXIsICdpbmRleC5qcycpIH0sXG4gICAgICBwbHVnaW5zOiBbXG4gICAgICAgIGNyZWF0ZVN3Y1BsdWdpbih7XG4gICAgICAgICAgbW9kZTogJ3N0ZXAnLFxuICAgICAgICAgIGVudHJpZXNUb0J1bmRsZTogW3N0ZXBGaWxlXSxcbiAgICAgICAgICBvdXRkaXIsXG4gICAgICAgIH0pLFxuICAgICAgXSxcbiAgICB9KTtcblxuICAgIGV4cGVjdChyZXN1bHQuZXJyb3JzKS50b0hhdmVMZW5ndGgoMCk7XG4gICAgY29uc3Qgb3V0cHV0ID0gcmVzdWx0Lm91dHB1dEZpbGVzWzBdLnRleHQ7XG4gICAgLy8gU2hvdWxkIGJlIGJ1bmRsZWQgKGlubGluZWQpLCBub3QgZXh0ZXJuYWxpemVkIGFzIGEgcmVsYXRpdmUgbm9kZV9tb2R1bGVzIHBhdGhcbiAgICBleHBlY3Qob3V0cHV0KS50b0NvbnRhaW4oJ2hlbGxvJyk7XG4gICAgZXhwZWN0KG91dHB1dCkubm90LnRvTWF0Y2goL2Zyb21cXHMrW1wiJ10uKm5vZGVfbW9kdWxlcy8pO1xuICB9KTtcblxuICBpdCgnZXh0ZXJuYWxpemVzIG5lc3RlZCBiYXJlIHBhY2thZ2UgaW1wb3J0cyB0aGF0IG9ubHkgcmVzb2x2ZSBmcm9tIGEgYnVuZGxlZCBwYWNrYWdlJywgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IG91dGRpciA9IGpvaW4odGVzdFJvb3QsICdvdXQnKTtcbiAgICBjb25zdCBzcmNEaXIgPSBqb2luKHRlc3RSb290LCAnc3JjJyk7XG4gICAgY29uc3Qgc3RlcEZpbGUgPSBqb2luKHNyY0RpciwgJ3N0ZXAudHMnKTtcbiAgICBjb25zdCBwYXJlbnRQa2dEaXIgPSBqb2luKHRlc3RSb290LCAnbm9kZV9tb2R1bGVzJywgJ3BhcmVudC1wa2cnKTtcbiAgICBjb25zdCBwYXJlbnRQa2dJbmRleCA9IGpvaW4ocGFyZW50UGtnRGlyLCAnaW5kZXguanMnKTtcbiAgICBjb25zdCBuYXRpdmVQa2dEaXIgPSBqb2luKHBhcmVudFBrZ0RpciwgJ25vZGVfbW9kdWxlcycsICdvcHRpb25hbC1uYXRpdmUnKTtcblxuICAgIHdyaXRlRmlsZShcbiAgICAgIGpvaW4ocGFyZW50UGtnRGlyLCAncGFja2FnZS5qc29uJyksXG4gICAgICBKU09OLnN0cmluZ2lmeSh7IG5hbWU6ICdwYXJlbnQtcGtnJywgbWFpbjogJ2luZGV4LmpzJyB9KVxuICAgICk7XG4gICAgd3JpdGVGaWxlKFxuICAgICAgcGFyZW50UGtnSW5kZXgsXG4gICAgICBgY29uc3QgbmF0aXZlID0gcmVxdWlyZSgnb3B0aW9uYWwtbmF0aXZlJyk7XFxuZXhwb3J0cy52YWx1ZSA9IG5hdGl2ZS52YWx1ZTtgXG4gICAgKTtcbiAgICB3cml0ZUZpbGUoXG4gICAgICBqb2luKG5hdGl2ZVBrZ0RpciwgJ3BhY2thZ2UuanNvbicpLFxuICAgICAgSlNPTi5zdHJpbmdpZnkoeyBuYW1lOiAnb3B0aW9uYWwtbmF0aXZlJywgbWFpbjogJ2JpbmRpbmcubm9kZScgfSlcbiAgICApO1xuICAgIHdyaXRlRmlsZShqb2luKG5hdGl2ZVBrZ0RpciwgJ2JpbmRpbmcubm9kZScpLCAnJyk7XG4gICAgd3JpdGVGaWxlKFxuICAgICAgc3RlcEZpbGUsXG4gICAgICBgaW1wb3J0IHsgdmFsdWUgfSBmcm9tICdwYXJlbnQtcGtnJztcXG5jb25zb2xlLmxvZyh2YWx1ZSk7YFxuICAgICk7XG5cbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBlc2J1aWxkLmJ1aWxkKHtcbiAgICAgIGVudHJ5UG9pbnRzOiBbc3RlcEZpbGVdLFxuICAgICAgYWJzV29ya2luZ0RpcjogdGVzdFJvb3QsXG4gICAgICBvdXRkaXIsXG4gICAgICBidW5kbGU6IHRydWUsXG4gICAgICBmb3JtYXQ6ICdlc20nLFxuICAgICAgcGxhdGZvcm06ICdub2RlJyxcbiAgICAgIHdyaXRlOiBmYWxzZSxcbiAgICAgIHBsdWdpbnM6IFtcbiAgICAgICAgY3JlYXRlU3djUGx1Z2luKHtcbiAgICAgICAgICBtb2RlOiAnc3RlcCcsXG4gICAgICAgICAgZW50cmllc1RvQnVuZGxlOiBbc3RlcEZpbGUsIHBhcmVudFBrZ0luZGV4XSxcbiAgICAgICAgICBvdXRkaXIsXG4gICAgICAgIH0pLFxuICAgICAgXSxcbiAgICB9KTtcblxuICAgIGV4cGVjdChyZXN1bHQuZXJyb3JzKS50b0hhdmVMZW5ndGgoMCk7XG4gICAgY29uc3Qgb3V0cHV0ID0gcmVzdWx0Lm91dHB1dEZpbGVzWzBdLnRleHQ7XG4gICAgZXhwZWN0KG91dHB1dCkudG9Db250YWluKCdvcHRpb25hbC1uYXRpdmUnKTtcbiAgICBleHBlY3Qob3V0cHV0KS5ub3QudG9Db250YWluKCdiaW5kaW5nLm5vZGUnKTtcbiAgfSk7XG5cbiAgaXQuZWFjaChbXG4gICAgJy50cycsXG4gICAgJy50c3gnLFxuICAgICcubXRzJyxcbiAgICAnLmN0cycsXG4gIF0pKCdwcmVzZXJ2ZXMgZXh0ZXJuYWxpemVkICVzIGV4dGVuc2lvbnMgYnkgZGVmYXVsdCcsIGFzeW5jIChpbnB1dEV4dCkgPT4ge1xuICAgIGNvbnN0IG91dGRpciA9IGpvaW4odGVzdFJvb3QsICdvdXQnKTtcbiAgICBjb25zdCBzcmNEaXIgPSBqb2luKHRlc3RSb290LCAnc3JjJyk7XG4gICAgY29uc3Qgc3RlcEZpbGUgPSBqb2luKHNyY0RpciwgJ3N0ZXAudHMnKTtcblxuICAgIHdyaXRlRmlsZShqb2luKHNyY0RpciwgYGRlcCR7aW5wdXRFeHR9YCksICdleHBvcnQgY29uc3QgZGVwID0ge307Jyk7XG4gICAgd3JpdGVGaWxlKHN0ZXBGaWxlLCBgaW1wb3J0IHsgZGVwIH0gZnJvbSAnLi9kZXAnO1xcbmNvbnNvbGUubG9nKGRlcCk7YCk7XG5cbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBlc2J1aWxkLmJ1aWxkKHtcbiAgICAgIGVudHJ5UG9pbnRzOiBbc3RlcEZpbGVdLFxuICAgICAgYWJzV29ya2luZ0RpcjogdGVzdFJvb3QsXG4gICAgICBvdXRkaXIsXG4gICAgICBidW5kbGU6IHRydWUsXG4gICAgICBmb3JtYXQ6ICdlc20nLFxuICAgICAgcGxhdGZvcm06ICdub2RlJyxcbiAgICAgIHdyaXRlOiBmYWxzZSxcbiAgICAgIHBsdWdpbnM6IFtcbiAgICAgICAgY3JlYXRlU3djUGx1Z2luKHtcbiAgICAgICAgICBtb2RlOiAnc3RlcCcsXG4gICAgICAgICAgZW50cmllc1RvQnVuZGxlOiBbc3RlcEZpbGVdLFxuICAgICAgICAgIG91dGRpcixcbiAgICAgICAgfSksXG4gICAgICBdLFxuICAgIH0pO1xuXG4gICAgZXhwZWN0KHJlc3VsdC5lcnJvcnMpLnRvSGF2ZUxlbmd0aCgwKTtcbiAgICBjb25zdCBvdXRwdXQgPSByZXN1bHQub3V0cHV0RmlsZXNbMF0udGV4dDtcbiAgICBleHBlY3Qob3V0cHV0KS50b0NvbnRhaW4oYC9kZXAke2lucHV0RXh0fWApO1xuICB9KTtcblxuICBpdCgnYnVuZGxlcyB0cmFuc2l0aXZlIGxvY2FsIFR5cGVTY3JpcHQgZGVwZW5kZW5jaWVzIHdpdGggZXh0ZW5zaW9ubGVzcyBpbXBvcnRzJywgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IG91dGRpciA9IGpvaW4odGVzdFJvb3QsICdvdXQnKTtcbiAgICBjb25zdCBzdGVwRmlsZSA9IGpvaW4odGVzdFJvb3QsICdzZXJ2ZXInLCAnd29ya2Zsb3dzJywgJ215LXdvcmtmbG93LnRzJyk7XG4gICAgY29uc3QgY29uc3RhbnRzRmlsZSA9IGpvaW4odGVzdFJvb3QsICdzaGFyZWQnLCAnY29uc3RhbnRzLnRzJyk7XG4gICAgY29uc3QgaGVscGVyc0ZpbGUgPSBqb2luKHRlc3RSb290LCAnc2hhcmVkJywgJ2hlbHBlcnMudHMnKTtcblxuICAgIHdyaXRlRmlsZShoZWxwZXJzRmlsZSwgYGV4cG9ydCBjb25zdCBIRUxQRVJfVkFMVUUgPSBcImZyb20taGVscGVyXCI7YCk7XG4gICAgd3JpdGVGaWxlKFxuICAgICAgY29uc3RhbnRzRmlsZSxcbiAgICAgIGBpbXBvcnQgeyBIRUxQRVJfVkFMVUUgfSBmcm9tICcuL2hlbHBlcnMnO1xcbmV4cG9ydCBjb25zdCBDQVRFR09SSUVTID0gW0hFTFBFUl9WQUxVRV07YFxuICAgICk7XG4gICAgd3JpdGVGaWxlKFxuICAgICAgc3RlcEZpbGUsXG4gICAgICBgaW1wb3J0IHsgQ0FURUdPUklFUyB9IGZyb20gJy4uLy4uL3NoYXJlZC9jb25zdGFudHMnO1xcbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBteVN0ZXAoKSB7XFxuICAndXNlIHN0ZXAnO1xcbiAgcmV0dXJuIENBVEVHT1JJRVNbMF07XFxufWBcbiAgICApO1xuXG4gICAgY29uc3Qgc3RhdGUgPSB7XG4gICAgICBkaXNjb3ZlcmVkU3RlcHM6IG5ldyBTZXQ8c3RyaW5nPigpLFxuICAgICAgZGlzY292ZXJlZFdvcmtmbG93czogbmV3IFNldDxzdHJpbmc+KCksXG4gICAgICBkaXNjb3ZlcmVkU2VyZGVGaWxlczogbmV3IFNldDxzdHJpbmc+KCksXG4gICAgfTtcbiAgICBhd2FpdCBlc2J1aWxkLmJ1aWxkKHtcbiAgICAgIGVudHJ5UG9pbnRzOiBbc3RlcEZpbGVdLFxuICAgICAgYWJzV29ya2luZ0RpcjogdGVzdFJvb3QsXG4gICAgICBidW5kbGU6IHRydWUsXG4gICAgICBmb3JtYXQ6ICdlc20nLFxuICAgICAgcGxhdGZvcm06ICdub2RlJyxcbiAgICAgIHdyaXRlOiBmYWxzZSxcbiAgICAgIHJlc29sdmVFeHRlbnNpb25zOiBbJy50cycsICcudHN4JywgJy5qcycsICcuanN4JywgJy5tanMnLCAnLmNqcyddLFxuICAgICAgcGx1Z2luczogW2NyZWF0ZURpc2NvdmVyRW50cmllc1BsdWdpbihzdGF0ZSwgdGVzdFJvb3QpXSxcbiAgICB9KTtcblxuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGVzYnVpbGQuYnVpbGQoe1xuICAgICAgZW50cnlQb2ludHM6IFtzdGVwRmlsZV0sXG4gICAgICBhYnNXb3JraW5nRGlyOiB0ZXN0Um9vdCxcbiAgICAgIG91dGRpcixcbiAgICAgIGJ1bmRsZTogdHJ1ZSxcbiAgICAgIGZvcm1hdDogJ2VzbScsXG4gICAgICBwbGF0Zm9ybTogJ25vZGUnLFxuICAgICAgd3JpdGU6IGZhbHNlLFxuICAgICAgcmVzb2x2ZUV4dGVuc2lvbnM6IFsnLnRzJywgJy50c3gnLCAnLmpzJywgJy5qc3gnLCAnLm1qcycsICcuY2pzJ10sXG4gICAgICBwbHVnaW5zOiBbXG4gICAgICAgIGNyZWF0ZVN3Y1BsdWdpbih7XG4gICAgICAgICAgbW9kZTogJ3N0ZXAnLFxuICAgICAgICAgIGVudHJpZXNUb0J1bmRsZTogW3N0ZXBGaWxlXSxcbiAgICAgICAgICBvdXRkaXIsXG4gICAgICAgICAgYnVuZGxlVHJhbnNpdGl2ZUxvY2FsU3RlcERlcGVuZGVuY2llczogdHJ1ZSxcbiAgICAgICAgfSksXG4gICAgICBdLFxuICAgIH0pO1xuXG4gICAgZXhwZWN0KHJlc3VsdC5lcnJvcnMpLnRvSGF2ZUxlbmd0aCgwKTtcbiAgICBjb25zdCBvdXRwdXQgPSByZXN1bHQub3V0cHV0RmlsZXNbMF0udGV4dDtcbiAgICBleHBlY3Qob3V0cHV0KS50b0NvbnRhaW4oJ2Zyb20taGVscGVyJyk7XG4gICAgZXhwZWN0KG91dHB1dCkubm90LnRvTWF0Y2goL2Zyb21cXHMrW1wiJ11bXlwiJ10qc2hhcmVkXFwvY29uc3RhbnRzLyk7XG4gICAgZXhwZWN0KG91dHB1dCkubm90LnRvTWF0Y2goL2Zyb21cXHMrW1wiJ11bXlwiJ10qc2hhcmVkXFwvaGVscGVycy8pO1xuICB9KTtcblxuICBpdCgnZXh0ZXJuYWxpemVzIHRyYW5zaXRpdmUgbG9jYWwgVHlwZVNjcmlwdCBkZXBlbmRlbmNpZXMgYnkgZGVmYXVsdCcsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBvdXRkaXIgPSBqb2luKHRlc3RSb290LCAnb3V0Jyk7XG4gICAgY29uc3Qgc3RlcEZpbGUgPSBqb2luKHRlc3RSb290LCAnc2VydmVyJywgJ3dvcmtmbG93cycsICdteS13b3JrZmxvdy50cycpO1xuICAgIGNvbnN0IGNvbnN0YW50c0ZpbGUgPSBqb2luKHRlc3RSb290LCAnc2hhcmVkJywgJ2NvbnN0YW50cy50cycpO1xuICAgIGNvbnN0IGhlbHBlcnNGaWxlID0gam9pbih0ZXN0Um9vdCwgJ3NoYXJlZCcsICdoZWxwZXJzLnRzJyk7XG5cbiAgICB3cml0ZUZpbGUoaGVscGVyc0ZpbGUsIGBleHBvcnQgY29uc3QgSEVMUEVSX1ZBTFVFID0gXCJmcm9tLWhlbHBlclwiO2ApO1xuICAgIHdyaXRlRmlsZShcbiAgICAgIGNvbnN0YW50c0ZpbGUsXG4gICAgICBgaW1wb3J0IHsgSEVMUEVSX1ZBTFVFIH0gZnJvbSAnLi9oZWxwZXJzJztcXG5leHBvcnQgY29uc3QgQ0FURUdPUklFUyA9IFtIRUxQRVJfVkFMVUVdO2BcbiAgICApO1xuICAgIHdyaXRlRmlsZShcbiAgICAgIHN0ZXBGaWxlLFxuICAgICAgYGltcG9ydCB7IENBVEVHT1JJRVMgfSBmcm9tICcuLi8uLi9zaGFyZWQvY29uc3RhbnRzJztcXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gbXlTdGVwKCkge1xcbiAgJ3VzZSBzdGVwJztcXG4gIHJldHVybiBDQVRFR09SSUVTWzBdO1xcbn1gXG4gICAgKTtcblxuICAgIGNvbnN0IHN0YXRlID0ge1xuICAgICAgZGlzY292ZXJlZFN0ZXBzOiBuZXcgU2V0PHN0cmluZz4oKSxcbiAgICAgIGRpc2NvdmVyZWRXb3JrZmxvd3M6IG5ldyBTZXQ8c3RyaW5nPigpLFxuICAgICAgZGlzY292ZXJlZFNlcmRlRmlsZXM6IG5ldyBTZXQ8c3RyaW5nPigpLFxuICAgIH07XG4gICAgYXdhaXQgZXNidWlsZC5idWlsZCh7XG4gICAgICBlbnRyeVBvaW50czogW3N0ZXBGaWxlXSxcbiAgICAgIGFic1dvcmtpbmdEaXI6IHRlc3RSb290LFxuICAgICAgYnVuZGxlOiB0cnVlLFxuICAgICAgZm9ybWF0OiAnZXNtJyxcbiAgICAgIHBsYXRmb3JtOiAnbm9kZScsXG4gICAgICB3cml0ZTogZmFsc2UsXG4gICAgICByZXNvbHZlRXh0ZW5zaW9uczogWycudHMnLCAnLnRzeCcsICcuanMnLCAnLmpzeCcsICcubWpzJywgJy5janMnXSxcbiAgICAgIHBsdWdpbnM6IFtjcmVhdGVEaXNjb3ZlckVudHJpZXNQbHVnaW4oc3RhdGUsIHRlc3RSb290KV0sXG4gICAgfSk7XG5cbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBlc2J1aWxkLmJ1aWxkKHtcbiAgICAgIGVudHJ5UG9pbnRzOiBbc3RlcEZpbGVdLFxuICAgICAgYWJzV29ya2luZ0RpcjogdGVzdFJvb3QsXG4gICAgICBvdXRkaXIsXG4gICAgICBidW5kbGU6IHRydWUsXG4gICAgICBmb3JtYXQ6ICdlc20nLFxuICAgICAgcGxhdGZvcm06ICdub2RlJyxcbiAgICAgIHdyaXRlOiBmYWxzZSxcbiAgICAgIHJlc29sdmVFeHRlbnNpb25zOiBbJy50cycsICcudHN4JywgJy5qcycsICcuanN4JywgJy5tanMnLCAnLmNqcyddLFxuICAgICAgcGx1Z2luczogW1xuICAgICAgICBjcmVhdGVTd2NQbHVnaW4oe1xuICAgICAgICAgIG1vZGU6ICdzdGVwJyxcbiAgICAgICAgICBlbnRyaWVzVG9CdW5kbGU6IFtzdGVwRmlsZV0sXG4gICAgICAgICAgb3V0ZGlyLFxuICAgICAgICB9KSxcbiAgICAgIF0sXG4gICAgfSk7XG5cbiAgICBleHBlY3QocmVzdWx0LmVycm9ycykudG9IYXZlTGVuZ3RoKDApO1xuICAgIGNvbnN0IG91dHB1dCA9IHJlc3VsdC5vdXRwdXRGaWxlc1swXS50ZXh0O1xuICAgIGV4cGVjdChvdXRwdXQpLm5vdC50b0NvbnRhaW4oJ2Zyb20taGVscGVyJyk7XG4gICAgZXhwZWN0KG91dHB1dCkudG9NYXRjaCgvZnJvbVxccytbXCInXVteXCInXSpzaGFyZWRcXC9jb25zdGFudHNcXC50c1tcIiddLyk7XG4gIH0pO1xuXG4gIGl0KCdrZWVwcyBvcmRpbmFyeSBwYWNrYWdlIGRlcGVuZGVuY2llcyBleHRlcm5hbCB3aGVuIHJlYWNoYWJsZSBmcm9tIGEgYnVuZGxlZCBzdGVwJywgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IG91dGRpciA9IGpvaW4odGVzdFJvb3QsICdvdXQnKTtcbiAgICBjb25zdCBzdGVwRmlsZSA9IGpvaW4odGVzdFJvb3QsICdzZXJ2ZXInLCAnd29ya2Zsb3dzJywgJ215LXdvcmtmbG93LnRzJyk7XG4gICAgY29uc3QgcGtnRGlyID0gam9pbih0ZXN0Um9vdCwgJ25vZGVfbW9kdWxlcycsICdwbGFpbi1wa2cnKTtcbiAgICBjb25zdCBwa2dJbmRleCA9IGpvaW4ocGtnRGlyLCAnaW5kZXguanMnKTtcblxuICAgIHdyaXRlRmlsZShcbiAgICAgIGpvaW4ocGtnRGlyLCAncGFja2FnZS5qc29uJyksXG4gICAgICBKU09OLnN0cmluZ2lmeSh7IG5hbWU6ICdwbGFpbi1wa2cnLCBtYWluOiAnaW5kZXguanMnIH0pXG4gICAgKTtcbiAgICB3cml0ZUZpbGUocGtnSW5kZXgsIGBleHBvcnQgY29uc3QgdmFsdWUgPSBcImZyb20tcGFja2FnZVwiO2ApO1xuICAgIHdyaXRlRmlsZShcbiAgICAgIHN0ZXBGaWxlLFxuICAgICAgYGltcG9ydCB7IHZhbHVlIH0gZnJvbSAncGxhaW4tcGtnJztcXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gbXlTdGVwKCkge1xcbiAgJ3VzZSBzdGVwJztcXG4gIHJldHVybiB2YWx1ZTtcXG59YFxuICAgICk7XG5cbiAgICBjb25zdCBzdGF0ZSA9IHtcbiAgICAgIGRpc2NvdmVyZWRTdGVwczogbmV3IFNldDxzdHJpbmc+KCksXG4gICAgICBkaXNjb3ZlcmVkV29ya2Zsb3dzOiBuZXcgU2V0PHN0cmluZz4oKSxcbiAgICAgIGRpc2NvdmVyZWRTZXJkZUZpbGVzOiBuZXcgU2V0PHN0cmluZz4oKSxcbiAgICB9O1xuICAgIGF3YWl0IGVzYnVpbGQuYnVpbGQoe1xuICAgICAgZW50cnlQb2ludHM6IFtzdGVwRmlsZV0sXG4gICAgICBhYnNXb3JraW5nRGlyOiB0ZXN0Um9vdCxcbiAgICAgIGJ1bmRsZTogdHJ1ZSxcbiAgICAgIGZvcm1hdDogJ2VzbScsXG4gICAgICBwbGF0Zm9ybTogJ25vZGUnLFxuICAgICAgd3JpdGU6IGZhbHNlLFxuICAgICAgcGx1Z2luczogW2NyZWF0ZURpc2NvdmVyRW50cmllc1BsdWdpbihzdGF0ZSwgdGVzdFJvb3QpXSxcbiAgICB9KTtcblxuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGVzYnVpbGQuYnVpbGQoe1xuICAgICAgZW50cnlQb2ludHM6IFtzdGVwRmlsZV0sXG4gICAgICBhYnNXb3JraW5nRGlyOiB0ZXN0Um9vdCxcbiAgICAgIG91dGRpcixcbiAgICAgIGJ1bmRsZTogdHJ1ZSxcbiAgICAgIGZvcm1hdDogJ2VzbScsXG4gICAgICBwbGF0Zm9ybTogJ25vZGUnLFxuICAgICAgd3JpdGU6IGZhbHNlLFxuICAgICAgcGx1Z2luczogW1xuICAgICAgICBjcmVhdGVTd2NQbHVnaW4oe1xuICAgICAgICAgIG1vZGU6ICdzdGVwJyxcbiAgICAgICAgICBlbnRyaWVzVG9CdW5kbGU6IFtzdGVwRmlsZV0sXG4gICAgICAgICAgb3V0ZGlyLFxuICAgICAgICAgIGJ1bmRsZVRyYW5zaXRpdmVMb2NhbFN0ZXBEZXBlbmRlbmNpZXM6IHRydWUsXG4gICAgICAgIH0pLFxuICAgICAgXSxcbiAgICB9KTtcblxuICAgIGV4cGVjdChyZXN1bHQuZXJyb3JzKS50b0hhdmVMZW5ndGgoMCk7XG4gICAgY29uc3Qgb3V0cHV0ID0gcmVzdWx0Lm91dHB1dEZpbGVzWzBdLnRleHQ7XG4gICAgZXhwZWN0KG91dHB1dCkudG9NYXRjaCgvZnJvbVxccytbXCInXXBsYWluLXBrZ1tcIiddLyk7XG4gICAgZXhwZWN0KG91dHB1dCkubm90LnRvQ29udGFpbignZnJvbS1wYWNrYWdlJyk7XG4gIH0pO1xuXG4gIGl0KCdidW5kbGVzIHBhY2thZ2UgcGFyZW50cyB3aGVuIHRoZXkgbGVhZCB0byBkaXNjb3ZlcmVkIHdvcmtmbG93LXJlbGF0ZWQgZW50cmllcycsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBvdXRkaXIgPSBqb2luKHRlc3RSb290LCAnb3V0Jyk7XG4gICAgY29uc3Qgc3RlcEZpbGUgPSBqb2luKHRlc3RSb290LCAnc2VydmVyJywgJ3dvcmtmbG93cycsICdteS13b3JrZmxvdy50cycpO1xuICAgIGNvbnN0IHBrZ0RpciA9IGpvaW4odGVzdFJvb3QsICdub2RlX21vZHVsZXMnLCAnd29ya2Zsb3ctcGtnJyk7XG4gICAgY29uc3QgcGtnSW5kZXggPSBqb2luKHBrZ0RpciwgJ2luZGV4LmpzJyk7XG4gICAgY29uc3QgcGtnU2VyZGUgPSBqb2luKHBrZ0RpciwgJ3NlcmRlLmpzJyk7XG5cbiAgICB3cml0ZUZpbGUoXG4gICAgICBqb2luKHBrZ0RpciwgJ3BhY2thZ2UuanNvbicpLFxuICAgICAgSlNPTi5zdHJpbmdpZnkoeyBuYW1lOiAnd29ya2Zsb3ctcGtnJywgbWFpbjogJ2luZGV4LmpzJyB9KVxuICAgICk7XG4gICAgd3JpdGVGaWxlKHBrZ1NlcmRlLCBgZXhwb3J0IGNvbnN0IHZhbHVlID0gXCJmcm9tLXNlcmRlXCI7YCk7XG4gICAgd3JpdGVGaWxlKHBrZ0luZGV4LCBgZXhwb3J0IHsgdmFsdWUgfSBmcm9tICcuL3NlcmRlLmpzJztgKTtcbiAgICB3cml0ZUZpbGUoXG4gICAgICBzdGVwRmlsZSxcbiAgICAgIGBpbXBvcnQgeyB2YWx1ZSB9IGZyb20gJ3dvcmtmbG93LXBrZyc7XFxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIG15U3RlcCgpIHtcXG4gICd1c2Ugc3RlcCc7XFxuICByZXR1cm4gdmFsdWU7XFxufWBcbiAgICApO1xuXG4gICAgY29uc3Qgc3RhdGUgPSB7XG4gICAgICBkaXNjb3ZlcmVkU3RlcHM6IG5ldyBTZXQ8c3RyaW5nPigpLFxuICAgICAgZGlzY292ZXJlZFdvcmtmbG93czogbmV3IFNldDxzdHJpbmc+KCksXG4gICAgICBkaXNjb3ZlcmVkU2VyZGVGaWxlczogbmV3IFNldDxzdHJpbmc+KCksXG4gICAgfTtcbiAgICBhd2FpdCBlc2J1aWxkLmJ1aWxkKHtcbiAgICAgIGVudHJ5UG9pbnRzOiBbc3RlcEZpbGVdLFxuICAgICAgYWJzV29ya2luZ0RpcjogdGVzdFJvb3QsXG4gICAgICBidW5kbGU6IHRydWUsXG4gICAgICBmb3JtYXQ6ICdlc20nLFxuICAgICAgcGxhdGZvcm06ICdub2RlJyxcbiAgICAgIHdyaXRlOiBmYWxzZSxcbiAgICAgIHBsdWdpbnM6IFtjcmVhdGVEaXNjb3ZlckVudHJpZXNQbHVnaW4oc3RhdGUsIHRlc3RSb290KV0sXG4gICAgfSk7XG5cbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBlc2J1aWxkLmJ1aWxkKHtcbiAgICAgIGVudHJ5UG9pbnRzOiBbc3RlcEZpbGVdLFxuICAgICAgYWJzV29ya2luZ0RpcjogdGVzdFJvb3QsXG4gICAgICBvdXRkaXIsXG4gICAgICBidW5kbGU6IHRydWUsXG4gICAgICBmb3JtYXQ6ICdlc20nLFxuICAgICAgcGxhdGZvcm06ICdub2RlJyxcbiAgICAgIHdyaXRlOiBmYWxzZSxcbiAgICAgIHBsdWdpbnM6IFtcbiAgICAgICAgY3JlYXRlU3djUGx1Z2luKHtcbiAgICAgICAgICBtb2RlOiAnc3RlcCcsXG4gICAgICAgICAgZW50cmllc1RvQnVuZGxlOiBbc3RlcEZpbGUsIHBrZ1NlcmRlXSxcbiAgICAgICAgICBvdXRkaXIsXG4gICAgICAgIH0pLFxuICAgICAgXSxcbiAgICB9KTtcblxuICAgIGV4cGVjdChyZXN1bHQuZXJyb3JzKS50b0hhdmVMZW5ndGgoMCk7XG4gICAgY29uc3Qgb3V0cHV0ID0gcmVzdWx0Lm91dHB1dEZpbGVzWzBdLnRleHQ7XG4gICAgZXhwZWN0KG91dHB1dCkudG9Db250YWluKCdmcm9tLXNlcmRlJyk7XG4gICAgZXhwZWN0KG91dHB1dCkubm90LnRvTWF0Y2goL2Zyb21cXHMrW1wiJ113b3JrZmxvdy1wa2dbXCInXS8pO1xuICB9KTtcbn0pO1xuXG5kZXNjcmliZSgnY3JlYXRlU3djUGx1Z2luIHNpZGVFZmZlY3RFbnRyaWVzJywgKCkgPT4ge1xuICBsZXQgdGVzdFJvb3Q6IHN0cmluZztcblxuICBiZWZvcmVFYWNoKCgpID0+IHtcbiAgICB0ZXN0Um9vdCA9IG1rZHRlbXBTeW5jKGpvaW4ocmVhbFRtcGRpciwgJ3dvcmtmbG93LXN3Yy1wbHVnaW4tJykpO1xuICAgIGFwcGx5U3djVHJhbnNmb3JtTW9jay5tb2NrUmVzZXQoKTtcbiAgfSk7XG5cbiAgYWZ0ZXJFYWNoKCgpID0+IHtcbiAgICBybVN5bmModGVzdFJvb3QsIHsgcmVjdXJzaXZlOiB0cnVlLCBmb3JjZTogdHJ1ZSB9KTtcbiAgfSk7XG5cbiAgLyoqXG4gICAqIEhlbHBlcjogY3JlYXRlcyBhIGZha2Ugbm9kZV9tb2R1bGVzIHBhY2thZ2Ugd2l0aCBgXCJzaWRlRWZmZWN0c1wiOiBmYWxzZWBcbiAgICogaW4gaXRzIHBhY2thZ2UuanNvbiBhbmQgYSBzaW5nbGUgZW50cnkgZmlsZSB0aGF0IGV4cG9ydHMgYSBzaWRlLWVmZmVjdGZ1bFxuICAgKiByZWdpc3RyYXRpb24gY2FsbCAoc2ltdWxhdGluZyB3aGF0IHRoZSBTV0MgdHJhbnNmb3JtIHByb2R1Y2VzKS5cbiAgICovXG4gIGZ1bmN0aW9uIGNyZWF0ZVNpZGVFZmZlY3RzRmFsc2VQYWNrYWdlKFxuICAgIHBhY2thZ2VOYW1lOiBzdHJpbmcsXG4gICAgZW50cnlDb2RlOiBzdHJpbmdcbiAgKTogc3RyaW5nIHtcbiAgICBjb25zdCBwa2dEaXIgPSBqb2luKHRlc3RSb290LCAnbm9kZV9tb2R1bGVzJywgcGFja2FnZU5hbWUpO1xuICAgIHdyaXRlRmlsZShcbiAgICAgIGpvaW4ocGtnRGlyLCAncGFja2FnZS5qc29uJyksXG4gICAgICBKU09OLnN0cmluZ2lmeSh7XG4gICAgICAgIG5hbWU6IHBhY2thZ2VOYW1lLFxuICAgICAgICB2ZXJzaW9uOiAnMS4wLjAnLFxuICAgICAgICBzaWRlRWZmZWN0czogZmFsc2UsXG4gICAgICAgIG1haW46ICdpbmRleC5qcycsXG4gICAgICB9KVxuICAgICk7XG4gICAgY29uc3QgZW50cnlQYXRoID0gam9pbihwa2dEaXIsICdpbmRleC5qcycpO1xuICAgIHdyaXRlRmlsZShlbnRyeVBhdGgsIGVudHJ5Q29kZSk7XG4gICAgcmV0dXJuIGVudHJ5UGF0aDtcbiAgfVxuXG4gIGl0KCdwcmVzZXJ2ZXMgYmFyZSBpbXBvcnRzIG9mIHNpZGVFZmZlY3RFbnRyaWVzIHBhY2thZ2VzIHdoZW4gYnVuZGxpbmcgd2l0aG91dCBlbnRyaWVzVG9CdW5kbGUnLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3Qgc2lkZUVmZmVjdENvZGUgPVxuICAgICAgJ2dsb2JhbFRoaXMuX19yZWdpc3RlcmVkID0gZ2xvYmFsVGhpcy5fX3JlZ2lzdGVyZWQgfHwgW107XFxuZ2xvYmFsVGhpcy5fX3JlZ2lzdGVyZWQucHVzaChcIm15LXBrZ1wiKTsnO1xuICAgIGNvbnN0IGVudHJ5UGF0aCA9IGNyZWF0ZVNpZGVFZmZlY3RzRmFsc2VQYWNrYWdlKFxuICAgICAgJ215LXNpZGUtZWZmZWN0LXBrZycsXG4gICAgICBzaWRlRWZmZWN0Q29kZVxuICAgICk7XG5cbiAgICAvLyBTV0MgbW9jazogcmV0dXJuIHRoZSBjb2RlIHVuY2hhbmdlZCAodGhlIHNpZGUgZWZmZWN0cyBhcmUgYWxyZWFkeSB0aGVyZSlcbiAgICBhcHBseVN3Y1RyYW5zZm9ybU1vY2subW9ja0ltcGxlbWVudGF0aW9uKFxuICAgICAgYXN5bmMgKF9maWxlbmFtZTogc3RyaW5nLCBzb3VyY2U6IHN0cmluZykgPT4gKHtcbiAgICAgICAgY29kZTogc291cmNlLFxuICAgICAgICB3b3JrZmxvd01hbmlmZXN0OiB7fSxcbiAgICAgIH0pXG4gICAgKTtcblxuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGVzYnVpbGQuYnVpbGQoe1xuICAgICAgc3RkaW46IHtcbiAgICAgICAgY29udGVudHM6IGBpbXBvcnQgJ215LXNpZGUtZWZmZWN0LXBrZyc7YCxcbiAgICAgICAgcmVzb2x2ZURpcjogdGVzdFJvb3QsXG4gICAgICAgIHNvdXJjZWZpbGU6ICd2aXJ0dWFsLWVudHJ5LmpzJyxcbiAgICAgICAgbG9hZGVyOiAnanMnLFxuICAgICAgfSxcbiAgICAgIGFic1dvcmtpbmdEaXI6IHRlc3RSb290LFxuICAgICAgYnVuZGxlOiB0cnVlLFxuICAgICAgZm9ybWF0OiAnY2pzJyxcbiAgICAgIHBsYXRmb3JtOiAnbm9kZScsXG4gICAgICB3cml0ZTogZmFsc2UsXG4gICAgICB0cmVlU2hha2luZzogdHJ1ZSxcbiAgICAgIGxvZ0xldmVsOiAnc2lsZW50JyxcbiAgICAgIHBsdWdpbnM6IFtcbiAgICAgICAgY3JlYXRlU3djUGx1Z2luKHtcbiAgICAgICAgICBtb2RlOiAnd29ya2Zsb3cnLFxuICAgICAgICAgIHNpZGVFZmZlY3RFbnRyaWVzOiBbZW50cnlQYXRoXSxcbiAgICAgICAgfSksXG4gICAgICBdLFxuICAgIH0pO1xuXG4gICAgZXhwZWN0KHJlc3VsdC5lcnJvcnMpLnRvSGF2ZUxlbmd0aCgwKTtcbiAgICBjb25zdCBvdXRwdXQgPSByZXN1bHQub3V0cHV0RmlsZXNbMF0udGV4dDtcbiAgICAvLyBUaGUgcmVnaXN0cmF0aW9uIGNvZGUgc2hvdWxkIGJlIHByZXNlbnQgaW4gdGhlIGJ1bmRsZVxuICAgIGV4cGVjdChvdXRwdXQpLnRvQ29udGFpbignX19yZWdpc3RlcmVkJyk7XG4gIH0pO1xuXG4gIGl0KCdkcm9wcyBiYXJlIGltcG9ydHMgd2hlbiBzaWRlRWZmZWN0RW50cmllcyBpcyBOT1QgcHJvdmlkZWQgZm9yIHNpZGVFZmZlY3RzOmZhbHNlIHBhY2thZ2VzJywgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IHNpZGVFZmZlY3RDb2RlID1cbiAgICAgICdnbG9iYWxUaGlzLl9fcmVnaXN0ZXJlZCA9IGdsb2JhbFRoaXMuX19yZWdpc3RlcmVkIHx8IFtdO1xcbmdsb2JhbFRoaXMuX19yZWdpc3RlcmVkLnB1c2goXCJteS1wa2dcIik7JztcbiAgICBjcmVhdGVTaWRlRWZmZWN0c0ZhbHNlUGFja2FnZSgnbXktZHJvcHBlZC1wa2cnLCBzaWRlRWZmZWN0Q29kZSk7XG5cbiAgICBhcHBseVN3Y1RyYW5zZm9ybU1vY2subW9ja0ltcGxlbWVudGF0aW9uKFxuICAgICAgYXN5bmMgKF9maWxlbmFtZTogc3RyaW5nLCBzb3VyY2U6IHN0cmluZykgPT4gKHtcbiAgICAgICAgY29kZTogc291cmNlLFxuICAgICAgICB3b3JrZmxvd01hbmlmZXN0OiB7fSxcbiAgICAgIH0pXG4gICAgKTtcblxuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGVzYnVpbGQuYnVpbGQoe1xuICAgICAgc3RkaW46IHtcbiAgICAgICAgY29udGVudHM6IGBpbXBvcnQgJ215LWRyb3BwZWQtcGtnJztgLFxuICAgICAgICByZXNvbHZlRGlyOiB0ZXN0Um9vdCxcbiAgICAgICAgc291cmNlZmlsZTogJ3ZpcnR1YWwtZW50cnkuanMnLFxuICAgICAgICBsb2FkZXI6ICdqcycsXG4gICAgICB9LFxuICAgICAgYWJzV29ya2luZ0RpcjogdGVzdFJvb3QsXG4gICAgICBidW5kbGU6IHRydWUsXG4gICAgICBmb3JtYXQ6ICdjanMnLFxuICAgICAgcGxhdGZvcm06ICdub2RlJyxcbiAgICAgIHdyaXRlOiBmYWxzZSxcbiAgICAgIHRyZWVTaGFraW5nOiB0cnVlLFxuICAgICAgbG9nTGV2ZWw6ICdzaWxlbnQnLFxuICAgICAgcGx1Z2luczogW1xuICAgICAgICBjcmVhdGVTd2NQbHVnaW4oe1xuICAgICAgICAgIG1vZGU6ICd3b3JrZmxvdycsXG4gICAgICAgIH0pLFxuICAgICAgXSxcbiAgICB9KTtcblxuICAgIGV4cGVjdChyZXN1bHQuZXJyb3JzKS50b0hhdmVMZW5ndGgoMCk7XG4gICAgY29uc3Qgb3V0cHV0ID0gcmVzdWx0Lm91dHB1dEZpbGVzWzBdLnRleHQ7XG4gICAgLy8gV2l0aG91dCBzaWRlRWZmZWN0RW50cmllcywgZXNidWlsZCBkcm9wcyB0aGUgYmFyZSBpbXBvcnRcbiAgICBleHBlY3Qob3V0cHV0KS5ub3QudG9Db250YWluKCdfX3JlZ2lzdGVyZWQnKTtcbiAgfSk7XG5cbiAgaXQoJ3Byb2R1Y2VzIG5vIHdhcm5pbmdzIGZvciBzaWRlRWZmZWN0RW50cmllcyBwYWNrYWdlcycsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBzaWRlRWZmZWN0Q29kZSA9XG4gICAgICAnZ2xvYmFsVGhpcy5fX3JlZ2lzdGVyZWQgPSBnbG9iYWxUaGlzLl9fcmVnaXN0ZXJlZCB8fCBbXTtcXG5nbG9iYWxUaGlzLl9fcmVnaXN0ZXJlZC5wdXNoKFwid2FybmVkLXBrZ1wiKTsnO1xuICAgIGNvbnN0IGVudHJ5UGF0aCA9IGNyZWF0ZVNpZGVFZmZlY3RzRmFsc2VQYWNrYWdlKFxuICAgICAgJ215LXdhcm5lZC1wa2cnLFxuICAgICAgc2lkZUVmZmVjdENvZGVcbiAgICApO1xuXG4gICAgYXBwbHlTd2NUcmFuc2Zvcm1Nb2NrLm1vY2tJbXBsZW1lbnRhdGlvbihcbiAgICAgIGFzeW5jIChfZmlsZW5hbWU6IHN0cmluZywgc291cmNlOiBzdHJpbmcpID0+ICh7XG4gICAgICAgIGNvZGU6IHNvdXJjZSxcbiAgICAgICAgd29ya2Zsb3dNYW5pZmVzdDoge30sXG4gICAgICB9KVxuICAgICk7XG5cbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBlc2J1aWxkLmJ1aWxkKHtcbiAgICAgIHN0ZGluOiB7XG4gICAgICAgIGNvbnRlbnRzOiBgaW1wb3J0ICdteS13YXJuZWQtcGtnJztgLFxuICAgICAgICByZXNvbHZlRGlyOiB0ZXN0Um9vdCxcbiAgICAgICAgc291cmNlZmlsZTogJ3ZpcnR1YWwtZW50cnkuanMnLFxuICAgICAgICBsb2FkZXI6ICdqcycsXG4gICAgICB9LFxuICAgICAgYWJzV29ya2luZ0RpcjogdGVzdFJvb3QsXG4gICAgICBidW5kbGU6IHRydWUsXG4gICAgICBmb3JtYXQ6ICdjanMnLFxuICAgICAgcGxhdGZvcm06ICdub2RlJyxcbiAgICAgIHdyaXRlOiBmYWxzZSxcbiAgICAgIHRyZWVTaGFraW5nOiB0cnVlLFxuICAgICAgcGx1Z2luczogW1xuICAgICAgICBjcmVhdGVTd2NQbHVnaW4oe1xuICAgICAgICAgIG1vZGU6ICd3b3JrZmxvdycsXG4gICAgICAgICAgc2lkZUVmZmVjdEVudHJpZXM6IFtlbnRyeVBhdGhdLFxuICAgICAgICB9KSxcbiAgICAgIF0sXG4gICAgfSk7XG5cbiAgICBleHBlY3QocmVzdWx0LmVycm9ycykudG9IYXZlTGVuZ3RoKDApO1xuICAgIC8vIE5vIFwiaWdub3JlZC1iYXJlLWltcG9ydFwiIHdhcm5pbmdzIHNob3VsZCBiZSBwcm9kdWNlZFxuICAgIGNvbnN0IHNpZGVFZmZlY3RXYXJuaW5ncyA9IHJlc3VsdC53YXJuaW5ncy5maWx0ZXIoXG4gICAgICAodykgPT4gdy5pZCA9PT0gJ2lnbm9yZWQtYmFyZS1pbXBvcnQnXG4gICAgKTtcbiAgICBleHBlY3Qoc2lkZUVmZmVjdFdhcm5pbmdzKS50b0hhdmVMZW5ndGgoMCk7XG4gIH0pO1xuXG4gIGl0KCdwcmVzZXJ2ZXMgYmFyZSBpbXBvcnRzIHdpdGggZW50cmllc1RvQnVuZGxlIGFuZCBzaWRlRWZmZWN0RW50cmllcyB0b2dldGhlcicsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBzaWRlRWZmZWN0Q29kZSA9XG4gICAgICAnZ2xvYmFsVGhpcy5fX3JlZ2lzdGVyZWQgPSBnbG9iYWxUaGlzLl9fcmVnaXN0ZXJlZCB8fCBbXTtcXG5nbG9iYWxUaGlzLl9fcmVnaXN0ZXJlZC5wdXNoKFwiYnVuZGxlZC1wa2dcIik7JztcbiAgICBjb25zdCBlbnRyeVBhdGggPSBjcmVhdGVTaWRlRWZmZWN0c0ZhbHNlUGFja2FnZShcbiAgICAgICdteS1idW5kbGVkLXBrZycsXG4gICAgICBzaWRlRWZmZWN0Q29kZVxuICAgICk7XG5cbiAgICBhcHBseVN3Y1RyYW5zZm9ybU1vY2subW9ja0ltcGxlbWVudGF0aW9uKFxuICAgICAgYXN5bmMgKF9maWxlbmFtZTogc3RyaW5nLCBzb3VyY2U6IHN0cmluZykgPT4gKHtcbiAgICAgICAgY29kZTogc291cmNlLFxuICAgICAgICB3b3JrZmxvd01hbmlmZXN0OiB7fSxcbiAgICAgIH0pXG4gICAgKTtcblxuICAgIGNvbnN0IG91dGRpciA9IGpvaW4odGVzdFJvb3QsICdvdXQnKTtcbiAgICBjb25zdCBzdGVwRmlsZSA9IGpvaW4odGVzdFJvb3QsICdzcmMnLCAnc3RlcC50cycpO1xuICAgIHdyaXRlRmlsZShcbiAgICAgIHN0ZXBGaWxlLFxuICAgICAgYGltcG9ydCAnbXktYnVuZGxlZC1wa2cnO1xcbmV4cG9ydCBjb25zdCBQT1NUID0gKCkgPT4ge307YFxuICAgICk7XG5cbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBlc2J1aWxkLmJ1aWxkKHtcbiAgICAgIGVudHJ5UG9pbnRzOiBbc3RlcEZpbGVdLFxuICAgICAgYWJzV29ya2luZ0RpcjogdGVzdFJvb3QsXG4gICAgICBvdXRkaXIsXG4gICAgICBidW5kbGU6IHRydWUsXG4gICAgICBmb3JtYXQ6ICdlc20nLFxuICAgICAgcGxhdGZvcm06ICdub2RlJyxcbiAgICAgIHdyaXRlOiBmYWxzZSxcbiAgICAgIHRyZWVTaGFraW5nOiB0cnVlLFxuICAgICAgbG9nTGV2ZWw6ICdzaWxlbnQnLFxuICAgICAgcGx1Z2luczogW1xuICAgICAgICBjcmVhdGVTd2NQbHVnaW4oe1xuICAgICAgICAgIG1vZGU6ICdzdGVwJyxcbiAgICAgICAgICBlbnRyaWVzVG9CdW5kbGU6IFtzdGVwRmlsZSwgZW50cnlQYXRoXSxcbiAgICAgICAgICBvdXRkaXIsXG4gICAgICAgICAgc2lkZUVmZmVjdEVudHJpZXM6IFtlbnRyeVBhdGhdLFxuICAgICAgICB9KSxcbiAgICAgIF0sXG4gICAgfSk7XG5cbiAgICBleHBlY3QocmVzdWx0LmVycm9ycykudG9IYXZlTGVuZ3RoKDApO1xuICAgIGNvbnN0IG91dHB1dCA9IHJlc3VsdC5vdXRwdXRGaWxlc1swXS50ZXh0O1xuICAgIC8vIFRoZSByZWdpc3RyYXRpb24gY29kZSBzaG91bGQgYmUgYnVuZGxlZCBpblxuICAgIGV4cGVjdChvdXRwdXQpLnRvQ29udGFpbignX19yZWdpc3RlcmVkJyk7XG4gIH0pO1xuXG4gIGl0KCdwcmVzZXJ2ZXMgYmFyZSBpbXBvcnRzIGZvciBsb2NhbCBmaWxlcyB3aXRoIHNpZGVFZmZlY3RzOmZhbHNlIGluIHRoZWlyIHBhcmVudCBwYWNrYWdlLmpzb24nLCBhc3luYyAoKSA9PiB7XG4gICAgLy8gU2ltdWxhdGUgYSB3b3Jrc3BhY2UgcGFja2FnZSB3aXRoIHNpZGVFZmZlY3RzOiBmYWxzZVxuICAgIGNvbnN0IHBrZ0RpciA9IGpvaW4odGVzdFJvb3QsICdwYWNrYWdlcycsICdzaGFyZWQnKTtcbiAgICB3cml0ZUZpbGUoXG4gICAgICBqb2luKHBrZ0RpciwgJ3BhY2thZ2UuanNvbicpLFxuICAgICAgSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgICBuYW1lOiAnQG15b3JnL3NoYXJlZCcsXG4gICAgICAgIHZlcnNpb246ICcxLjAuMCcsXG4gICAgICAgIHNpZGVFZmZlY3RzOiBmYWxzZSxcbiAgICAgICAgbWFpbjogJ2luZGV4LmpzJyxcbiAgICAgIH0pXG4gICAgKTtcbiAgICBjb25zdCBzaGFyZWRFbnRyeSA9IGpvaW4ocGtnRGlyLCAnaW5kZXguanMnKTtcbiAgICB3cml0ZUZpbGUoc2hhcmVkRW50cnksICdnbG9iYWxUaGlzLl9fc2hhcmVkUmVnaXN0ZXJlZCA9IHRydWU7Jyk7XG5cbiAgICBhcHBseVN3Y1RyYW5zZm9ybU1vY2subW9ja0ltcGxlbWVudGF0aW9uKFxuICAgICAgYXN5bmMgKF9maWxlbmFtZTogc3RyaW5nLCBzb3VyY2U6IHN0cmluZykgPT4gKHtcbiAgICAgICAgY29kZTogc291cmNlLFxuICAgICAgICB3b3JrZmxvd01hbmlmZXN0OiB7fSxcbiAgICAgIH0pXG4gICAgKTtcblxuICAgIC8vIFVzZSBhIHJlbGF0aXZlIGltcG9ydCB0byB0aGUgbG9jYWwgZmlsZSAobGlrZSB0aGUgdmlydHVhbCBlbnRyeSBkb2VzIGZvciBsb2NhbCBmaWxlcylcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBlc2J1aWxkLmJ1aWxkKHtcbiAgICAgIHN0ZGluOiB7XG4gICAgICAgIGNvbnRlbnRzOiBgaW1wb3J0ICcuL3BhY2thZ2VzL3NoYXJlZC9pbmRleC5qcyc7YCxcbiAgICAgICAgcmVzb2x2ZURpcjogdGVzdFJvb3QsXG4gICAgICAgIHNvdXJjZWZpbGU6ICd2aXJ0dWFsLWVudHJ5LmpzJyxcbiAgICAgICAgbG9hZGVyOiAnanMnLFxuICAgICAgfSxcbiAgICAgIGFic1dvcmtpbmdEaXI6IHRlc3RSb290LFxuICAgICAgYnVuZGxlOiB0cnVlLFxuICAgICAgZm9ybWF0OiAnY2pzJyxcbiAgICAgIHBsYXRmb3JtOiAnbm9kZScsXG4gICAgICB3cml0ZTogZmFsc2UsXG4gICAgICB0cmVlU2hha2luZzogdHJ1ZSxcbiAgICAgIGxvZ0xldmVsOiAnc2lsZW50JyxcbiAgICAgIHBsdWdpbnM6IFtcbiAgICAgICAgY3JlYXRlU3djUGx1Z2luKHtcbiAgICAgICAgICBtb2RlOiAnd29ya2Zsb3cnLFxuICAgICAgICAgIHNpZGVFZmZlY3RFbnRyaWVzOiBbc2hhcmVkRW50cnldLFxuICAgICAgICB9KSxcbiAgICAgIF0sXG4gICAgfSk7XG5cbiAgICBleHBlY3QocmVzdWx0LmVycm9ycykudG9IYXZlTGVuZ3RoKDApO1xuICAgIGNvbnN0IG91dHB1dCA9IHJlc3VsdC5vdXRwdXRGaWxlc1swXS50ZXh0O1xuICAgIGV4cGVjdChvdXRwdXQpLnRvQ29udGFpbignX19zaGFyZWRSZWdpc3RlcmVkJyk7XG4gIH0pO1xuXG4gIGl0KCdkb2VzIG5vdCBvdmVycmlkZSBzaWRlRWZmZWN0cyBmb3Igbm9uLWVudHJ5IG1vZHVsZXMnLCBhc3luYyAoKSA9PiB7XG4gICAgLy8gQ3JlYXRlIHR3byBwYWNrYWdlcyAtIG9uZSBpcyBhIHNpZGUtZWZmZWN0IGVudHJ5LCBvbmUgaXMgbm90XG4gICAgY29uc3Qgc2lkZUVmZmVjdENvZGUgPSAnZ2xvYmFsVGhpcy5fX2VudHJ5UmVnaXN0ZXJlZCA9IHRydWU7JztcbiAgICBjb25zdCBlbnRyeVBhdGggPSBjcmVhdGVTaWRlRWZmZWN0c0ZhbHNlUGFja2FnZShcbiAgICAgICdlbnRyeS1wa2cnLFxuICAgICAgc2lkZUVmZmVjdENvZGVcbiAgICApO1xuXG4gICAgY29uc3Qgbm9uRW50cnlDb2RlID0gJ2dsb2JhbFRoaXMuX19ub25FbnRyeVJlZ2lzdGVyZWQgPSB0cnVlOyc7XG4gICAgY3JlYXRlU2lkZUVmZmVjdHNGYWxzZVBhY2thZ2UoJ25vbi1lbnRyeS1wa2cnLCBub25FbnRyeUNvZGUpO1xuXG4gICAgYXBwbHlTd2NUcmFuc2Zvcm1Nb2NrLm1vY2tJbXBsZW1lbnRhdGlvbihcbiAgICAgIGFzeW5jIChfZmlsZW5hbWU6IHN0cmluZywgc291cmNlOiBzdHJpbmcpID0+ICh7XG4gICAgICAgIGNvZGU6IHNvdXJjZSxcbiAgICAgICAgd29ya2Zsb3dNYW5pZmVzdDoge30sXG4gICAgICB9KVxuICAgICk7XG5cbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBlc2J1aWxkLmJ1aWxkKHtcbiAgICAgIHN0ZGluOiB7XG4gICAgICAgIGNvbnRlbnRzOiBgaW1wb3J0ICdlbnRyeS1wa2cnO1xcbmltcG9ydCAnbm9uLWVudHJ5LXBrZyc7YCxcbiAgICAgICAgcmVzb2x2ZURpcjogdGVzdFJvb3QsXG4gICAgICAgIHNvdXJjZWZpbGU6ICd2aXJ0dWFsLWVudHJ5LmpzJyxcbiAgICAgICAgbG9hZGVyOiAnanMnLFxuICAgICAgfSxcbiAgICAgIGFic1dvcmtpbmdEaXI6IHRlc3RSb290LFxuICAgICAgYnVuZGxlOiB0cnVlLFxuICAgICAgZm9ybWF0OiAnY2pzJyxcbiAgICAgIHBsYXRmb3JtOiAnbm9kZScsXG4gICAgICB3cml0ZTogZmFsc2UsXG4gICAgICB0cmVlU2hha2luZzogdHJ1ZSxcbiAgICAgIGxvZ0xldmVsOiAnc2lsZW50JyxcbiAgICAgIHBsdWdpbnM6IFtcbiAgICAgICAgY3JlYXRlU3djUGx1Z2luKHtcbiAgICAgICAgICBtb2RlOiAnd29ya2Zsb3cnLFxuICAgICAgICAgIC8vIE9ubHkgZW50cnktcGtnIGlzIGxpc3RlZCwgbm9uLWVudHJ5LXBrZyBpcyBub3RcbiAgICAgICAgICBzaWRlRWZmZWN0RW50cmllczogW2VudHJ5UGF0aF0sXG4gICAgICAgIH0pLFxuICAgICAgXSxcbiAgICB9KTtcblxuICAgIGV4cGVjdChyZXN1bHQuZXJyb3JzKS50b0hhdmVMZW5ndGgoMCk7XG4gICAgY29uc3Qgb3V0cHV0ID0gcmVzdWx0Lm91dHB1dEZpbGVzWzBdLnRleHQ7XG4gICAgLy8gZW50cnktcGtnIHNob3VsZCBiZSBwcmVzZXJ2ZWRcbiAgICBleHBlY3Qob3V0cHV0KS50b0NvbnRhaW4oJ19fZW50cnlSZWdpc3RlcmVkJyk7XG4gICAgLy8gbm9uLWVudHJ5LXBrZyBzaG91bGQgYmUgZHJvcHBlZCAoc2lkZUVmZmVjdHM6IGZhbHNlIGlzIHJlc3BlY3RlZClcbiAgICBleHBlY3Qob3V0cHV0KS5ub3QudG9Db250YWluKCdfX25vbkVudHJ5UmVnaXN0ZXJlZCcpO1xuICB9KTtcbn0pO1xuXG5kZXNjcmliZSgnY3JlYXRlU3djUGx1Z2luIHByb2plY3RSb290JywgKCkgPT4ge1xuICBsZXQgdGVzdFJvb3Q6IHN0cmluZztcblxuICBiZWZvcmVFYWNoKCgpID0+IHtcbiAgICB0ZXN0Um9vdCA9IG1rZHRlbXBTeW5jKGpvaW4ocmVhbFRtcGRpciwgJ3dvcmtmbG93LXN3Yy1wbHVnaW4tJykpO1xuICAgIGFwcGx5U3djVHJhbnNmb3JtTW9jay5tb2NrUmVzZXQoKTtcbiAgICBhcHBseVN3Y1RyYW5zZm9ybU1vY2subW9ja0ltcGxlbWVudGF0aW9uKFxuICAgICAgYXN5bmMgKF9maWxlbmFtZTogc3RyaW5nLCBzb3VyY2U6IHN0cmluZykgPT4gKHtcbiAgICAgICAgY29kZTogc291cmNlLFxuICAgICAgICB3b3JrZmxvd01hbmlmZXN0OiB7fSxcbiAgICAgIH0pXG4gICAgKTtcbiAgfSk7XG5cbiAgYWZ0ZXJFYWNoKCgpID0+IHtcbiAgICBybVN5bmModGVzdFJvb3QsIHsgcmVjdXJzaXZlOiB0cnVlLCBmb3JjZTogdHJ1ZSB9KTtcbiAgfSk7XG5cbiAgZnVuY3Rpb24gc2V0dXBGaXh0dXJlKCkge1xuICAgIGNvbnN0IGFwcFJvb3QgPSBqb2luKHRlc3RSb290LCAnYXBwcycsICdjaGF0Jyk7XG4gICAgY29uc3QgcGFja2FnZVJvb3QgPSBqb2luKHRlc3RSb290LCAncGFja2FnZXMnLCAndmFkZScpO1xuICAgIGNvbnN0IHdvcmtmbG93RmlsZSA9IGpvaW4oXG4gICAgICBwYWNrYWdlUm9vdCxcbiAgICAgICdzcmMnLFxuICAgICAgJ2ludGVybmFsJyxcbiAgICAgICdtZXNzYWdlJyxcbiAgICAgICd3b3JrZmxvdycsXG4gICAgICAnaGFuZGxlLW1lc3NhZ2UudHMnXG4gICAgKTtcblxuICAgIHdyaXRlRmlsZShcbiAgICAgIHdvcmtmbG93RmlsZSxcbiAgICAgIGBleHBvcnQgYXN5bmMgZnVuY3Rpb24gaGFuZGxlTWVzc2FnZVdvcmtmbG93KG1lc3NhZ2UpIHtcbiAgXCJ1c2Ugd29ya2Zsb3dcIjtcblxuICByZXR1cm4gbWVzc2FnZTtcbn1cbmBcbiAgICApO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIGFwcFJvb3QsXG4gICAgICBwYWNrYWdlUm9vdCxcbiAgICAgIHdvcmtmbG93RmlsZSxcbiAgICB9O1xuICB9XG5cbiAgaXQoJ3Bhc3NlcyB0aGUgZXhwbGljaXQgcHJvamVjdFJvb3QgdGhyb3VnaCB0byBhcHBseVN3Y1RyYW5zZm9ybScsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBmaXh0dXJlID0gc2V0dXBGaXh0dXJlKCk7XG5cbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBlc2J1aWxkLmJ1aWxkKHtcbiAgICAgIGVudHJ5UG9pbnRzOiBbZml4dHVyZS53b3JrZmxvd0ZpbGVdLFxuICAgICAgYWJzV29ya2luZ0RpcjogZml4dHVyZS5wYWNrYWdlUm9vdCxcbiAgICAgIGJ1bmRsZTogdHJ1ZSxcbiAgICAgIGZvcm1hdDogJ2VzbScsXG4gICAgICBwbGF0Zm9ybTogJ25vZGUnLFxuICAgICAgd3JpdGU6IGZhbHNlLFxuICAgICAgcGx1Z2luczogW1xuICAgICAgICBjcmVhdGVTd2NQbHVnaW4oe1xuICAgICAgICAgIG1vZGU6ICd3b3JrZmxvdycsXG4gICAgICAgICAgcHJvamVjdFJvb3Q6IGZpeHR1cmUuYXBwUm9vdCxcbiAgICAgICAgICB3b3JrZmxvd01hbmlmZXN0OiB7fSxcbiAgICAgICAgfSksXG4gICAgICBdLFxuICAgIH0pO1xuXG4gICAgZXhwZWN0KHJlc3VsdC5lcnJvcnMpLnRvSGF2ZUxlbmd0aCgwKTtcbiAgICBleHBlY3QoYXBwbHlTd2NUcmFuc2Zvcm1Nb2NrKS50b0hhdmVCZWVuQ2FsbGVkV2l0aChcbiAgICAgICdzcmMvaW50ZXJuYWwvbWVzc2FnZS93b3JrZmxvdy9oYW5kbGUtbWVzc2FnZS50cycsXG4gICAgICBleHBlY3Quc3RyaW5nQ29udGFpbmluZygnXCJ1c2Ugd29ya2Zsb3dcIicpLFxuICAgICAgJ3dvcmtmbG93JyxcbiAgICAgIGZpeHR1cmUud29ya2Zsb3dGaWxlLFxuICAgICAgZml4dHVyZS5hcHBSb290LFxuICAgICAgZml4dHVyZS5hcHBSb290XG4gICAgKTtcbiAgfSk7XG5cbiAgaXQoJ3Bhc3NlcyBhbiBleHBsaWNpdCBtb2R1bGVTcGVjaWZpZXJSb290IHNlcGFyYXRlbHkgZnJvbSBwcm9qZWN0Um9vdCcsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBmaXh0dXJlID0gc2V0dXBGaXh0dXJlKCk7XG4gICAgY29uc3QgdHJhY2luZ1Jvb3QgPSB0ZXN0Um9vdDtcblxuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGVzYnVpbGQuYnVpbGQoe1xuICAgICAgZW50cnlQb2ludHM6IFtmaXh0dXJlLndvcmtmbG93RmlsZV0sXG4gICAgICBhYnNXb3JraW5nRGlyOiBmaXh0dXJlLnBhY2thZ2VSb290LFxuICAgICAgYnVuZGxlOiB0cnVlLFxuICAgICAgZm9ybWF0OiAnZXNtJyxcbiAgICAgIHBsYXRmb3JtOiAnbm9kZScsXG4gICAgICB3cml0ZTogZmFsc2UsXG4gICAgICBwbHVnaW5zOiBbXG4gICAgICAgIGNyZWF0ZVN3Y1BsdWdpbih7XG4gICAgICAgICAgbW9kZTogJ3dvcmtmbG93JyxcbiAgICAgICAgICBwcm9qZWN0Um9vdDogdHJhY2luZ1Jvb3QsXG4gICAgICAgICAgbW9kdWxlU3BlY2lmaWVyUm9vdDogZml4dHVyZS5hcHBSb290LFxuICAgICAgICAgIHdvcmtmbG93TWFuaWZlc3Q6IHt9LFxuICAgICAgICB9KSxcbiAgICAgIF0sXG4gICAgfSk7XG5cbiAgICBleHBlY3QocmVzdWx0LmVycm9ycykudG9IYXZlTGVuZ3RoKDApO1xuICAgIGV4cGVjdChhcHBseVN3Y1RyYW5zZm9ybU1vY2spLnRvSGF2ZUJlZW5DYWxsZWRXaXRoKFxuICAgICAgJ3NyYy9pbnRlcm5hbC9tZXNzYWdlL3dvcmtmbG93L2hhbmRsZS1tZXNzYWdlLnRzJyxcbiAgICAgIGV4cGVjdC5zdHJpbmdDb250YWluaW5nKCdcInVzZSB3b3JrZmxvd1wiJyksXG4gICAgICAnd29ya2Zsb3cnLFxuICAgICAgZml4dHVyZS53b3JrZmxvd0ZpbGUsXG4gICAgICB0cmFjaW5nUm9vdCxcbiAgICAgIGZpeHR1cmUuYXBwUm9vdFxuICAgICk7XG4gIH0pO1xuXG4gIGl0KCdkZWZhdWx0cyB0aGUgdHJhbnNmb3JtIHByb2plY3RSb290IHRvIGFic1dvcmtpbmdEaXInLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgZml4dHVyZSA9IHNldHVwRml4dHVyZSgpO1xuXG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgZXNidWlsZC5idWlsZCh7XG4gICAgICBlbnRyeVBvaW50czogW2ZpeHR1cmUud29ya2Zsb3dGaWxlXSxcbiAgICAgIGFic1dvcmtpbmdEaXI6IGZpeHR1cmUucGFja2FnZVJvb3QsXG4gICAgICBidW5kbGU6IHRydWUsXG4gICAgICBmb3JtYXQ6ICdlc20nLFxuICAgICAgcGxhdGZvcm06ICdub2RlJyxcbiAgICAgIHdyaXRlOiBmYWxzZSxcbiAgICAgIHBsdWdpbnM6IFtcbiAgICAgICAgY3JlYXRlU3djUGx1Z2luKHtcbiAgICAgICAgICBtb2RlOiAnd29ya2Zsb3cnLFxuICAgICAgICAgIHdvcmtmbG93TWFuaWZlc3Q6IHt9LFxuICAgICAgICB9KSxcbiAgICAgIF0sXG4gICAgfSk7XG5cbiAgICBleHBlY3QocmVzdWx0LmVycm9ycykudG9IYXZlTGVuZ3RoKDApO1xuICAgIGV4cGVjdChhcHBseVN3Y1RyYW5zZm9ybU1vY2spLnRvSGF2ZUJlZW5DYWxsZWRXaXRoKFxuICAgICAgJ3NyYy9pbnRlcm5hbC9tZXNzYWdlL3dvcmtmbG93L2hhbmRsZS1tZXNzYWdlLnRzJyxcbiAgICAgIGV4cGVjdC5zdHJpbmdDb250YWluaW5nKCdcInVzZSB3b3JrZmxvd1wiJyksXG4gICAgICAnd29ya2Zsb3cnLFxuICAgICAgZml4dHVyZS53b3JrZmxvd0ZpbGUsXG4gICAgICBmaXh0dXJlLnBhY2thZ2VSb290LFxuICAgICAgZml4dHVyZS5wYWNrYWdlUm9vdFxuICAgICk7XG4gIH0pO1xufSk7XG4iXX0=
1042
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3djLWVzYnVpbGQtcGx1Z2luLnRlc3QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvc3djLWVzYnVpbGQtcGx1Z2luLnRlc3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFNBQVMsRUFDVCxXQUFXLEVBQ1gsWUFBWSxFQUNaLE1BQU0sRUFDTixhQUFhLEdBQ2QsTUFBTSxTQUFTLENBQUM7QUFDakIsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLFNBQVMsQ0FBQztBQUNqQyxPQUFPLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUMxQyxPQUFPLEtBQUssT0FBTyxNQUFNLFNBQVMsQ0FBQztBQUNuQyxPQUFPLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsTUFBTSxRQUFRLENBQUM7QUFFekUsTUFBTSxFQUFFLHFCQUFxQixFQUFFLEdBQUcsRUFBRSxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDO0lBQ2xELHFCQUFxQixFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUU7Q0FDL0IsQ0FBQyxDQUFDLENBQUM7QUFFSixFQUFFLENBQUMsSUFBSSxDQUFDLDBCQUEwQixFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUM7SUFDekMsaUJBQWlCLEVBQUUscUJBQXFCO0NBQ3pDLENBQUMsQ0FBQyxDQUFDO0FBRUosT0FBTyxFQUNMLDJCQUEyQixFQUMzQixhQUFhLEdBQ2QsTUFBTSxzQ0FBc0MsQ0FBQztBQUM5QyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFFMUQsTUFBTSxVQUFVLEdBQUcsWUFBWSxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUM7QUFFMUMsU0FBUyxTQUFTLENBQUMsSUFBWSxFQUFFLFFBQVEsR0FBRyxFQUFFO0lBQzVDLFNBQVMsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFD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RSxPQUFPLENBQUMsV0FBVztZQUNsQyxNQUFNLEVBQUUsSUFBSTtZQUNaLE1BQU0sRUFBRSxLQUFLO1lBQ2IsUUFBUSxFQUFFLE1BQU07WUFDaEIsS0FBSyxFQUFFLEtBQUs7WUFDWixPQUFPLEVBQUU7Z0JBQ1AsZUFBZSxDQUFDO29CQUNkLElBQUksRUFBRSxVQUFVO29CQUNoQixnQkFBZ0IsRUFBRSxFQUFFO2lCQUNyQixDQUFDO2FBQ0g7U0FDRixDQUFDLENBQUM7UUFFSCxNQUFNLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN0QyxNQUFNLENBQUMscUJBQXFCLENBQUMsQ0FBQyxvQkFBb0IsQ0FDaEQsaURBQWlELEVBQ2pELE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxnQkFBZ0IsQ0FBQyxFQUN6QyxVQUFVLEVBQ1YsT0FBTyxDQUFDLFlBQVksRUFDcEIsT0FBTyxDQUFDLFdBQVcsRUFDbkIsT0FBTyxDQUFDLFdBQVcsQ0FDcEIsQ0FBQztJQUNKLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBta2RpclN5bmMsXG4gIG1rZHRlbXBTeW5jLFxuICByZWFscGF0aFN5bmMsXG4gIHJtU3luYyxcbiAgd3JpdGVGaWxlU3luYyxcbn0gZnJvbSAnbm9kZTpmcyc7XG5pbXBvcnQgeyB0bXBkaXIgfSBmcm9tICdub2RlOm9zJztcbmltcG9ydCB7IGRpcm5hbWUsIGpvaW4gfSBmcm9tICdub2RlOnBhdGgnO1xuaW1wb3J0ICogYXMgZXNidWlsZCBmcm9tICdlc2J1aWxkJztcbmltcG9ydCB7IGFmdGVyRWFjaCwgYmVmb3JlRWFjaCwgZGVzY3JpYmUsIGV4cGVjdCwgaXQsIHZpIH0gZnJvbSAndml0ZXN0JztcblxuY29uc3QgeyBhcHBseVN3Y1RyYW5zZm9ybU1vY2sgfSA9IHZpLmhvaXN0ZWQoKCkgPT4gKHtcbiAgYXBwbHlTd2NUcmFuc2Zvcm1Nb2NrOiB2aS5mbigpLFxufSkpO1xuXG52aS5tb2NrKCcuL2FwcGx5LXN3Yy10cmFuc2Zvcm0uanMnLCAoKSA9PiAoe1xuICBhcHBseVN3Y1RyYW5zZm9ybTogYXBwbHlTd2NUcmFuc2Zvcm1Nb2NrLFxufSkpO1xuXG5pbXBvcnQge1xuICBjcmVhdGVEaXNjb3ZlckVudHJpZXNQbHVnaW4sXG4gIGltcG9ydFBhcmVudHMsXG59IGZyb20gJy4vZGlzY292ZXItZW50cmllcy1lc2J1aWxkLXBsdWdpbi5qcyc7XG5pbXBvcnQgeyBjcmVhdGVTd2NQbHVnaW4gfSBmcm9tICcuL3N3Yy1lc2J1aWxkLXBsdWdpbi5qcyc7XG5cbmNvbnN0IHJlYWxUbXBkaXIgPSByZWFscGF0aFN5bmModG1wZGlyKCkpO1xuXG5mdW5jdGlvbiB3cml0ZUZpbGUocGF0aDogc3RyaW5nLCBjb250ZW50cyA9ICcnKTogdm9pZCB7XG4gIG1rZGlyU3luYyhkaXJuYW1lKHBhdGgpLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgd3JpdGVGaWxlU3luYyhwYXRoLCBjb250ZW50cywgJ3V0Zi04Jyk7XG59XG5cbmRlc2NyaWJlKCdjcmVhdGVTd2NQbHVnaW4gZXh0ZXJuYWxpemVOb25TdGVwcycsICgpID0+IHtcbiAgbGV0IHRlc3RSb290OiBzdHJpbmc7XG5cbiAgYmVmb3JlRWFjaCgoKSA9PiB7XG4gICAgdGVzdFJvb3QgPSBta2R0ZW1wU3luYyhqb2luKHJlYWxUbXBkaXIsICd3b3JrZmxvdy1zd2MtcGx1Z2luLScpKTtcbiAgICBpbXBvcnRQYXJlbnRzLmNsZWFyKCk7XG4gICAgYXBwbHlTd2NUcmFuc2Zvcm1Nb2NrLm1vY2tSZXNldCgpO1xuICAgIGFwcGx5U3djVHJhbnNmb3JtTW9jay5tb2NrSW1wbGVtZW50YXRpb24oXG4gICAgICBhc3luYyAoX2ZpbGVuYW1lOiBzdHJpbmcsIHNvdXJjZTogc3RyaW5nKSA9PiAoe1xuICAgICAgICBjb2RlOiBzb3VyY2UsXG4gICAgICAgIHdvcmtmbG93TWFuaWZlc3Q6IHt9LFxuICAgICAgfSlcbiAgICApO1xuICB9KTtcblxuICBhZnRlckVhY2goKCkgPT4ge1xuICAgIGltcG9ydFBhcmVudHMuY2xlYXIoKTtcbiAgICBybVN5bmModGVzdFJvb3QsIHsgcmVjdXJzaXZlOiB0cnVlLCBmb3JjZTogdHJ1ZSB9KTtcbiAgfSk7XG5cbiAgaXQoJ3JlcG9ydHMgYXV0aG9yaXRhdGl2ZSB0cmFuc2Zvcm0gcmVzdWx0cyB0byBhbiBvcHRpb25hbCBvYnNlcnZlcicsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBzcmNEaXIgPSBqb2luKHRlc3RSb290LCAnc3JjJyk7XG4gICAgY29uc3Qgc3RlcEZpbGUgPSBqb2luKHNyY0RpciwgJ3N0ZXAudHMnKTtcbiAgICBjb25zdCBzb3VyY2UgPSAnZXhwb3J0IGNvbnN0IHZhbHVlID0gNDI7JztcbiAgICBjb25zdCB3b3JrZmxvd01hbmlmZXN0ID0ge1xuICAgICAgc3RlcHM6IHtcbiAgICAgICAgJ3NyYy9zdGVwLnRzJzoge1xuICAgICAgICAgIHZhbHVlOiB7XG4gICAgICAgICAgICBzdGVwSWQ6ICdzdGVwLy9zcmMvc3RlcC8vdmFsdWUnLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIH07XG4gICAgY29uc3Qgb25BZnRlclRyYW5zZm9ybSA9IHZpLmZuKCk7XG5cbiAgICB3cml0ZUZpbGUoc3RlcEZpbGUsIHNvdXJjZSk7XG4gICAgYXBwbHlTd2NUcmFuc2Zvcm1Nb2NrLm1vY2tSZXNvbHZlZFZhbHVlKHtcbiAgICAgIGNvZGU6IGAke3NvdXJjZX1cXG4vKiB0cmFuc2Zvcm1lZCAqL2AsXG4gICAgICB3b3JrZmxvd01hbmlmZXN0LFxuICAgIH0pO1xuXG4gICAgYXdhaXQgZXNidWlsZC5idWlsZCh7XG4gICAgICBlbnRyeVBvaW50czogW3N0ZXBGaWxlXSxcbiAgICAgIGFic1dvcmtpbmdEaXI6IHRlc3RSb290LFxuICAgICAgb3V0ZGlyOiBqb2luKHRlc3RSb290LCAnb3V0JyksXG4gICAgICBidW5kbGU6IHRydWUsXG4gICAgICB3cml0ZTogZmFsc2UsXG4gICAgICBwbHVnaW5zOiBbXG4gICAgICAgIGNyZWF0ZVN3Y1BsdWdpbih7XG4gICAgICAgICAgbW9kZTogJ3N0ZXAnLFxuICAgICAgICAgIGVudHJpZXNUb0J1bmRsZTogW3N0ZXBGaWxlXSxcbiAgICAgICAgICBvbkFmdGVyVHJhbnNmb3JtLFxuICAgICAgICB9KSxcbiAgICAgIF0sXG4gICAgfSk7XG5cbiAgICBleHBlY3Qob25BZnRlclRyYW5zZm9ybSkudG9IYXZlQmVlbkNhbGxlZE9uY2UoKTtcbiAgICBleHBlY3Qob25BZnRlclRyYW5zZm9ybSkudG9IYXZlQmVlbkNhbGxlZFdpdGgoe1xuICAgICAgbW9kZTogJ3N0ZXAnLFxuICAgICAgZmlsZW5hbWU6ICdzcmMvc3RlcC50cycsXG4gICAgICBhYnNvbHV0ZVBhdGg6IHN0ZXBGaWxlLFxuICAgICAgc291cmNlLFxuICAgICAgY29kZTogYCR7c291cmNlfVxcbi8qIHRyYW5zZm9ybWVkICovYCxcbiAgICAgIHdvcmtmbG93TWFuaWZlc3QsXG4gICAgfSk7XG4gIH0pO1xuXG4gIGl0KCdhd2FpdHMgYXN5bmNocm9ub3VzIHRyYW5zZm9ybSBvYnNlcnZlcnMnLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3Qgc3RlcEZpbGUgPSBqb2luKHRlc3RSb290LCAnc3JjJywgJ3N0ZXAudHMnKTtcbiAgICBsZXQgbWFya09ic2VydmVyU3RhcnRlZDogKCkgPT4gdm9pZCA9ICgpID0+IHt9O1xuICAgIGxldCByZWxlYXNlT2JzZXJ2ZXI6ICgpID0+IHZvaWQgPSAoKSA9PiB7fTtcbiAgICBjb25zdCBvYnNlcnZlclN0YXJ0ZWQgPSBuZXcgUHJvbWlzZTx2b2lkPigocmVzb2x2ZSkgPT4ge1xuICAgICAgbWFya09ic2VydmVyU3RhcnRlZCA9IHJlc29sdmU7XG4gICAgfSk7XG4gICAgY29uc3Qgb2JzZXJ2ZXJCbG9ja2VkID0gbmV3IFByb21pc2U8dm9pZD4oKHJlc29sdmUpID0+IHtcbiAgICAgIHJlbGVhc2VPYnNlcnZlciA9IHJlc29sdmU7XG4gICAgfSk7XG4gICAgbGV0IGJ1aWxkQ29tcGxldGVkID0gZmFsc2U7XG5cbiAgICB3cml0ZUZpbGUoc3RlcEZpbGUsICdleHBvcnQgY29uc3QgdmFsdWUgPSA0MjsnKTtcblxuICAgIGNvbnN0IGJ1aWxkID0gZXNidWlsZC5idWlsZCh7XG4gICAgICBlbnRyeVBvaW50czogW3N0ZXBGaWxlXSxcbiAgICAgIGFic1dvcmtpbmdEaXI6IHRlc3RSb290LFxuICAgICAgb3V0ZGlyOiBqb2luKHRlc3RSb290LCAnb3V0JyksXG4gICAgICBidW5kbGU6IHRydWUsXG4gICAgICB3cml0ZTogZmFsc2UsXG4gICAgICBwbHVnaW5zOiBbXG4gICAgICAgIGNyZWF0ZVN3Y1BsdWdpbih7XG4gICAgICAgICAgbW9kZTogJ3N0ZXAnLFxuICAgICAgICAgIGVudHJpZXNUb0J1bmRsZTogW3N0ZXBGaWxlXSxcbiAgICAgICAgICBvbkFmdGVyVHJhbnNmb3JtOiBhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICBtYXJrT2JzZXJ2ZXJTdGFydGVkKCk7XG4gICAgICAgICAgICBhd2FpdCBvYnNlcnZlckJsb2NrZWQ7XG4gICAgICAgICAgfSxcbiAgICAgICAgfSksXG4gICAgICBdLFxuICAgIH0pO1xuICAgIHZvaWQgYnVpbGQudGhlbigoKSA9PiB7XG4gICAgICBidWlsZENvbXBsZXRlZCA9IHRydWU7XG4gICAgfSk7XG5cbiAgICBhd2FpdCBvYnNlcnZlclN0YXJ0ZWQ7XG4gICAgYXdhaXQgUHJvbWlzZS5yZXNvbHZlKCk7XG4gICAgZXhwZWN0KGJ1aWxkQ29tcGxldGVkKS50b0JlKGZhbHNlKTtcblxuICAgIHJlbGVhc2VPYnNlcnZlcigpO1xuICAgIGF3YWl0IGJ1aWxkO1xuICAgIGV4cGVjdChidWlsZENvbXBsZXRlZCkudG9CZSh0cnVlKTtcbiAgfSk7XG5cbiAgaXQoJ2ZhaWxzIHRoZSBidWlsZCB3aGVuIGEgdHJhbnNmb3JtIG9ic2VydmVyIHRocm93cycsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBzdGVwRmlsZSA9IGpvaW4odGVzdFJvb3QsICdzcmMnLCAnc3RlcC50cycpO1xuXG4gICAgd3JpdGVGaWxlKHN0ZXBGaWxlLCAnZXhwb3J0IGNvbnN0IHZhbHVlID0gNDI7Jyk7XG5cbiAgICBhd2FpdCBleHBlY3QoXG4gICAgICBlc2J1aWxkLmJ1aWxkKHtcbiAgICAgICAgZW50cnlQb2ludHM6IFtzdGVwRmlsZV0sXG4gICAgICAgIGFic1dvcmtpbmdEaXI6IHRlc3RSb290LFxuICAgICAgICBvdXRkaXI6IGpvaW4odGVzdFJvb3QsICdvdXQnKSxcbiAgICAgICAgYnVuZGxlOiB0cnVlLFxuICAgICAgICB3cml0ZTogZmFsc2UsXG4gICAgICAgIHBsdWdpbnM6IFtcbiAgICAgICAgICBjcmVhdGVTd2NQbHVnaW4oe1xuICAgICAgICAgICAgbW9kZTogJ3N0ZXAnLFxuICAgICAgICAgICAgZW50cmllc1RvQnVuZGxlOiBbc3RlcEZpbGVdLFxuICAgICAgICAgICAgb25BZnRlclRyYW5zZm9ybTogKCkgPT4ge1xuICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3RyYW5zZm9ybSBvYnNlcnZlciBmYWlsZWQnKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSksXG4gICAgICAgIF0sXG4gICAgICB9KVxuICAgICkucmVqZWN0cy50b1Rocm93KC90cmFuc2Zvcm0gb2JzZXJ2ZXIgZmFpbGVkLyk7XG4gIH0pO1xuXG4gIGl0KCdmYWlscyB0aGUgYnVpbGQgd2hlbiB0d28gZmlsZXMgZW1pdCB0aGUgc2FtZSBzdGVwIGlkJywgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IHNyY0RpciA9IGpvaW4odGVzdFJvb3QsICdzcmMnKTtcbiAgICBjb25zdCBmaXJzdFN0ZXBGaWxlID0gam9pbihzcmNEaXIsICdjb25maXJtYXRpb24udHMnKTtcbiAgICBjb25zdCBzZWNvbmRTdGVwRmlsZSA9IGpvaW4oc3JjRGlyLCAncmVzY2hlZHVsZS50cycpO1xuICAgIGNvbnN0IG9uQWZ0ZXJUcmFuc2Zvcm0gPSB2aS5mbigpO1xuXG4gICAgd3JpdGVGaWxlKGZpcnN0U3RlcEZpbGUsIGBleHBvcnQgY29uc3QgZmlyc3QgPSB0cnVlO2ApO1xuICAgIHdyaXRlRmlsZShzZWNvbmRTdGVwRmlsZSwgYGV4cG9ydCBjb25zdCBzZWNvbmQgPSB0cnVlO2ApO1xuXG4gICAgYXBwbHlTd2NUcmFuc2Zvcm1Nb2NrLm1vY2tJbXBsZW1lbnRhdGlvbihcbiAgICAgIGFzeW5jIChmaWxlbmFtZTogc3RyaW5nLCBzb3VyY2U6IHN0cmluZykgPT4gKHtcbiAgICAgICAgY29kZTogc291cmNlLFxuICAgICAgICB3b3JrZmxvd01hbmlmZXN0OiB7XG4gICAgICAgICAgc3RlcHM6IHtcbiAgICAgICAgICAgIFtmaWxlbmFtZV06IHtcbiAgICAgICAgICAgICAgc2VuZE1lc3NhZ2U6IHtcbiAgICAgICAgICAgICAgICBzdGVwSWQ6ICdzdGVwLy9zaGFyZWQtcGFja2FnZUAxLjAuMC8vc2VuZE1lc3NhZ2UnLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgfSlcbiAgICApO1xuXG4gICAgYXdhaXQgZXhwZWN0KFxuICAgICAgZXNidWlsZC5idWlsZCh7XG4gICAgICAgIGVudHJ5UG9pbnRzOiBbZmlyc3RTdGVwRmlsZSwgc2Vjb25kU3RlcEZpbGVdLFxuICAgICAgICBhYnNXb3JraW5nRGlyOiB0ZXN0Um9vdCxcbiAgICAgICAgb3V0ZGlyOiBqb2luKHRlc3RSb290LCAnb3V0JyksXG4gICAgICAgIGJ1bmRsZTogdHJ1ZSxcbiAgICAgICAgZm9ybWF0OiAnZXNtJyxcbiAgICAgICAgcGxhdGZvcm06ICdub2RlJyxcbiAgICAgICAgd3JpdGU6IGZhbHNlLFxuICAgICAgICBwbHVnaW5zOiBbXG4gICAgICAgICAgY3JlYXRlU3djUGx1Z2luKHtcbiAgICAgICAgICAgIG1vZGU6ICdzdGVwJyxcbiAgICAgICAgICAgIG9uQWZ0ZXJUcmFuc2Zvcm0sXG4gICAgICAgICAgfSksXG4gICAgICAgIF0sXG4gICAgICB9KVxuICAgICkucmVqZWN0cy50b1Rocm93KC9EdXBsaWNhdGUgd29ya2Zsb3cgc3RlcCBJRC8pO1xuICAgIGV4cGVjdChvbkFmdGVyVHJhbnNmb3JtKS50b0hhdmVCZWVuQ2FsbGVkT25jZSgpO1xuICB9KTtcblxuICBpdCgnZGVkdXBsaWNhdGVzIGlkZW50aWNhbCBwbnBtIHBlZXItdmFyaWFudCBjb3BpZXMgZW1pdHRpbmcgdGhlIHNhbWUgc3RlcCBpZCcsIGFzeW5jICgpID0+IHtcbiAgICAvLyBwbnBtIG1hdGVyaWFsaXplcyB0aGUgc2FtZSBwYWNrYWdlIHZlcnNpb24gb25jZSBwZXIgcGVlci1kZXBlbmRlbmN5XG4gICAgLy8gcmVzb2x1dGlvbi4gQm90aCBjb3BpZXMgYXJlIGJ5dGUtaWRlbnRpY2FsIGFuZCBnZW5lcmF0ZSB0aGUgc2FtZVxuICAgIC8vIGNhbm9uaWNhbCBzdGVwIElELCB3aGljaCBtdXN0IG5vdCBmYWlsIHRoZSBidWlsZC5cbiAgICBjb25zdCBzb3VyY2UgPSBgZXhwb3J0IGNvbnN0IHNlbmRNZXNzYWdlID0gdHJ1ZTtgO1xuICAgIGNvbnN0IGZpcnN0Q29weSA9IGpvaW4oXG4gICAgICB0ZXN0Um9vdCxcbiAgICAgICdub2RlX21vZHVsZXMvLnBucG0vc2hhcmVkLXBhY2thZ2VAMS4wLjBfcGVlci1hQDEuMC4wL25vZGVfbW9kdWxlcy9zaGFyZWQtcGFja2FnZS9pbmRleC50cydcbiAgICApO1xuICAgIGNvbnN0IHNlY29uZENvcHkgPSBqb2luKFxuICAgICAgdGVzdFJvb3QsXG4gICAgICAnbm9kZV9tb2R1bGVzLy5wbnBtL3NoYXJlZC1wYWNrYWdlQDEuMC4wX3BlZXItYkAyLjAuMC9ub2RlX21vZHVsZXMvc2hhcmVkLXBhY2thZ2UvaW5kZXgudHMnXG4gICAgKTtcbiAgICBjb25zdCBvbkFmdGVyVHJhbnNmb3JtID0gdmkuZm4oKTtcbiAgICBjb25zdCB3b3JrZmxvd01hbmlmZXN0ID0ge307XG5cbiAgICB3cml0ZUZpbGUoZmlyc3RDb3B5LCBzb3VyY2UpO1xuICAgIHdyaXRlRmlsZShzZWNvbmRDb3B5LCBzb3VyY2UpO1xuXG4gICAgYXBwbHlTd2NUcmFuc2Zvcm1Nb2NrLm1vY2tJbXBsZW1lbnRhdGlvbihcbiAgICAgIGFzeW5jIChmaWxlbmFtZTogc3RyaW5nLCBmaWxlU291cmNlOiBzdHJpbmcpID0+ICh7XG4gICAgICAgIGNvZGU6IGZpbGVTb3VyY2UsXG4gICAgICAgIHdvcmtmbG93TWFuaWZlc3Q6IHtcbiAgICAgICAgICBzdGVwczoge1xuICAgICAgICAgICAgW2ZpbGVuYW1lXToge1xuICAgICAgICAgICAgICBzZW5kTWVzc2FnZToge1xuICAgICAgICAgICAgICAgIHN0ZXBJZDogJ3N0ZXAvL3NoYXJlZC1wYWNrYWdlQDEuMC4wLy9zZW5kTWVzc2FnZScsXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICB9KVxuICAgICk7XG5cbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBlc2J1aWxkLmJ1aWxkKHtcbiAgICAgIGVudHJ5UG9pbnRzOiBbZmlyc3RDb3B5LCBzZWNvbmRDb3B5XSxcbiAgICAgIGFic1dvcmtpbmdEaXI6IHRlc3RSb290LFxuICAgICAgb3V0ZGlyOiBqb2luKHRlc3RSb290LCAnb3V0JyksXG4gICAgICBidW5kbGU6IHRydWUsXG4gICAgICBmb3JtYXQ6ICdlc20nLFxuICAgICAgcGxhdGZvcm06ICdub2RlJyxcbiAgICAgIHdyaXRlOiBmYWxzZSxcbiAgICAgIHBsdWdpbnM6IFtcbiAgICAgICAgY3JlYXRlU3djUGx1Z2luKHtcbiAgICAgICAgICBtb2RlOiAnc3RlcCcsXG4gICAgICAgICAgd29ya2Zsb3dNYW5pZmVzdCxcbiAgICAgICAgICBvbkFmdGVyVHJhbnNmb3JtLFxuICAgICAgICB9KSxcbiAgICAgIF0sXG4gICAgfSk7XG5cbiAgICBleHBlY3QocmVzdWx0LmVycm9ycykudG9IYXZlTGVuZ3RoKDApO1xuICAgIGV4cGVjdChvbkFmdGVyVHJhbnNmb3JtKS50b0hhdmVCZWVuQ2FsbGVkVGltZXMoMik7XG4gICAgLy8gQm90aCBjb3BpZXMgc3RheSBpbiB0aGUgbWFuaWZlc3QgdW5kZXIgdGhlIHNhbWUgc3RlcCBJRC5cbiAgICBjb25zdCBzdGVwcyA9IChcbiAgICAgIHdvcmtmbG93TWFuaWZlc3QgYXMge1xuICAgICAgICBzdGVwcz86IFJlY29yZDxzdHJpbmcsIFJlY29yZDxzdHJpbmcsIHsgc3RlcElkOiBzdHJpbmcgfT4+O1xuICAgICAgfVxuICAgICkuc3RlcHM7XG4gICAgZXhwZWN0KE9iamVjdC5rZXlzKHN0ZXBzID8/IHt9KSkudG9IYXZlTGVuZ3RoKDIpO1xuICAgIGZvciAoY29uc3QgZW50cmllcyBvZiBPYmplY3QudmFsdWVzKHN0ZXBzID8/IHt9KSkge1xuICAgICAgZXhwZWN0KGVudHJpZXMuc2VuZE1lc3NhZ2Uuc3RlcElkKS50b0JlKFxuICAgICAgICAnc3RlcC8vc2hhcmVkLXBhY2thZ2VAMS4wLjAvL3NlbmRNZXNzYWdlJ1xuICAgICAgKTtcbiAgICB9XG4gIH0pO1xuXG4gIGl0KCdmYWlscyB0aGUgYnVpbGQgd2hlbiBwbnBtLXN0eWxlIGNvcGllcyB3aXRoIGRpZmZlcmVudCBjb250ZW50cyBlbWl0IHRoZSBzYW1lIHN0ZXAgaWQnLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgZmlyc3RDb3B5ID0gam9pbihcbiAgICAgIHRlc3RSb290LFxuICAgICAgJ25vZGVfbW9kdWxlcy8ucG5wbS9zaGFyZWQtcGFja2FnZUAxLjAuMF9wZWVyLWFAMS4wLjAvbm9kZV9tb2R1bGVzL3NoYXJlZC1wYWNrYWdlL2luZGV4LnRzJ1xuICAgICk7XG4gICAgY29uc3Qgc2Vjb25kQ29weSA9IGpvaW4oXG4gICAgICB0ZXN0Um9vdCxcbiAgICAgICdub2RlX21vZHVsZXMvLnBucG0vc2hhcmVkLXBhY2thZ2VAMS4wLjBfcGVlci1iQDIuMC4wL25vZGVfbW9kdWxlcy9zaGFyZWQtcGFja2FnZS9pbmRleC50cydcbiAgICApO1xuXG4gICAgd3JpdGVGaWxlKGZpcnN0Q29weSwgYGV4cG9ydCBjb25zdCBzZW5kTWVzc2FnZSA9IDE7YCk7XG4gICAgd3JpdGVGaWxlKHNlY29uZENvcHksIGBleHBvcnQgY29uc3Qgc2VuZE1lc3NhZ2UgPSAyO2ApO1xuXG4gICAgYXBwbHlTd2NUcmFuc2Zvcm1Nb2NrLm1vY2tJbXBsZW1lbnRhdGlvbihcbiAgICAgIGFzeW5jIChmaWxlbmFtZTogc3RyaW5nLCBmaWxlU291cmNlOiBzdHJpbmcpID0+ICh7XG4gICAgICAgIGNvZGU6IGZpbGVTb3VyY2UsXG4gICAgICAgIHdvcmtmbG93TWFuaWZlc3Q6IHtcbiAgICAgICAgICBzdGVwczoge1xuICAgICAgICAgICAgW2ZpbGVuYW1lXToge1xuICAgICAgICAgICAgICBzZW5kTWVzc2FnZToge1xuICAgICAgICAgICAgICAgIHN0ZXBJZDogJ3N0ZXAvL3NoYXJlZC1wYWNrYWdlQDEuMC4wLy9zZW5kTWVzc2FnZScsXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICB9KVxuICAgICk7XG5cbiAgICBhd2FpdCBleHBlY3QoXG4gICAgICBlc2J1aWxkLmJ1aWxkKHtcbiAgICAgICAgZW50cnlQb2ludHM6IFtmaXJzdENvcHksIHNlY29uZENvcHldLFxuICAgICAgICBhYnNXb3JraW5nRGlyOiB0ZXN0Um9vdCxcbiAgICAgICAgb3V0ZGlyOiBqb2luKHRlc3RSb290LCAnb3V0JyksXG4gICAgICAgIGJ1bmRsZTogdHJ1ZSxcbiAgICAgICAgZm9ybWF0OiAnZXNtJyxcbiAgICAgICAgcGxhdGZvcm06ICdub2RlJyxcbiAgICAgICAgd3JpdGU6IGZhbHNlLFxuICAgICAgICBwbHVnaW5zOiBbXG4gICAgICAgICAgY3JlYXRlU3djUGx1Z2luKHtcbiAgICAgICAgICAgIG1vZGU6ICdzdGVwJyxcbiAgICAgICAgICB9KSxcbiAgICAgICAgXSxcbiAgICAgIH0pXG4gICAgKS5yZWplY3RzLnRvVGhyb3coL0R1cGxpY2F0ZSB3b3JrZmxvdyBzdGVwIElELyk7XG4gIH0pO1xuXG4gIGl0KCdmYWlscyB0aGUgYnVpbGQgd2hlbiB0d28gZmlsZXMgZW1pdCB0aGUgc2FtZSB3b3JrZmxvdyBpZCcsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBzcmNEaXIgPSBqb2luKHRlc3RSb290LCAnc3JjJyk7XG4gICAgY29uc3QgZmlyc3RXb3JrZmxvd0ZpbGUgPSBqb2luKHNyY0RpciwgJ2NvbmZpcm1hdGlvbi50cycpO1xuICAgIGNvbnN0IHNlY29uZFdvcmtmbG93RmlsZSA9IGpvaW4oc3JjRGlyLCAncmVzY2hlZHVsZS50cycpO1xuXG4gICAgd3JpdGVGaWxlKGZpcnN0V29ya2Zsb3dGaWxlLCBgZXhwb3J0IGNvbnN0IGZpcnN0ID0gdHJ1ZTtgKTtcbiAgICB3cml0ZUZpbGUoc2Vjb25kV29ya2Zsb3dGaWxlLCBgZXhwb3J0IGNvbnN0IHNlY29uZCA9IHRydWU7YCk7XG5cbiAgICBhcHBseVN3Y1RyYW5zZm9ybU1vY2subW9ja0ltcGxlbWVudGF0aW9uKFxuICAgICAgYXN5bmMgKGZpbGVuYW1lOiBzdHJpbmcsIHNvdXJjZTogc3RyaW5nKSA9PiAoe1xuICAgICAgICBjb2RlOiBzb3VyY2UsXG4gICAgICAgIHdvcmtmbG93TWFuaWZlc3Q6IHtcbiAgICAgICAgICB3b3JrZmxvd3M6IHtcbiAgICAgICAgICAgIFtmaWxlbmFtZV06IHtcbiAgICAgICAgICAgICAgc2VuZE1lc3NhZ2U6IHtcbiAgICAgICAgICAgICAgICB3b3JrZmxvd0lkOiAnd29ya2Zsb3cvL3NoYXJlZC1wYWNrYWdlQDEuMC4wLy9zZW5kTWVzc2FnZScsXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICB9KVxuICAgICk7XG5cbiAgICBhd2FpdCBleHBlY3QoXG4gICAgICBlc2J1aWxkLmJ1aWxkKHtcbiAgICAgICAgZW50cnlQb2ludHM6IFtmaXJzdFdvcmtmbG93RmlsZSwgc2Vjb25kV29ya2Zsb3dGaWxlXSxcbiAgICAgICAgYWJzV29ya2luZ0RpcjogdGVzdFJvb3QsXG4gICAgICAgIG91dGRpcjogam9pbih0ZXN0Um9vdCwgJ291dCcpLFxuICAgICAgICBidW5kbGU6IHRydWUsXG4gICAgICAgIGZvcm1hdDogJ2VzbScsXG4gICAgICAgIHBsYXRmb3JtOiAnbm9kZScsXG4gICAgICAgIHdyaXRlOiBmYWxzZSxcbiAgICAgICAgcGx1Z2luczogW1xuICAgICAgICAgIGNyZWF0ZVN3Y1BsdWdpbih7XG4gICAgICAgICAgICBtb2RlOiAnd29ya2Zsb3cnLFxuICAgICAgICAgIH0pLFxuICAgICAgICBdLFxuICAgICAgfSlcbiAgICApLnJlamVjdHMudG9UaHJvdygvRHVwbGljYXRlIHdvcmtmbG93IElELyk7XG4gIH0pO1xuXG4gIGl0LmVhY2goW1xuICAgIHsgaW5wdXRFeHQ6ICcudHMnLCBvdXRwdXRFeHQ6ICcuanMnIH0sXG4gICAgeyBpbnB1dEV4dDogJy50c3gnLCBvdXRwdXRFeHQ6ICcuanMnIH0sXG4gICAgeyBpbnB1dEV4dDogJy5tdHMnLCBvdXRwdXRFeHQ6ICcubWpzJyB9LFxuICAgIHsgaW5wdXRFeHQ6ICcuY3RzJywgb3V0cHV0RXh0OiAnLmNqcycgfSxcbiAgXSkoJ3Jld3JpdGVzIGV4dGVybmFsaXplZCAkaW5wdXRFeHQgaW1wb3J0cyB0byAkb3V0cHV0RXh0IHdoZW4gcmV3cml0ZVRzRXh0ZW5zaW9ucyBpcyBlbmFibGVkJywgYXN5bmMgKHtcbiAgICBpbnB1dEV4dCxcbiAgICBvdXRwdXRFeHQsXG4gIH0pID0+IHtcbiAgICBjb25zdCBvdXRkaXIgPSBqb2luKHRlc3RSb290LCAnb3V0Jyk7XG4gICAgY29uc3Qgc3JjRGlyID0gam9pbih0ZXN0Um9vdCwgJ3NyYycpO1xuICAgIGNvbnN0IHN0ZXBGaWxlID0gam9pbihzcmNEaXIsICdzdGVwLnRzJyk7XG5cbiAgICB3cml0ZUZpbGUoam9pbihzcmNEaXIsIGBkZXAke2lucHV0RXh0fWApLCAnZXhwb3J0IGNvbnN0IGRlcCA9IHt9OycpO1xuICAgIHdyaXRlRmlsZShzdGVwRmlsZSwgYGltcG9ydCB7IGRlcCB9IGZyb20gJy4vZGVwJztcXG5jb25zb2xlLmxvZyhkZXApO2ApO1xuXG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgZXNidWlsZC5idWlsZCh7XG4gICAgICBlbnRyeVBvaW50czogW3N0ZXBGaWxlXSxcbiAgICAgIGFic1dvcmtpbmdEaXI6IHRlc3RSb290LFxuICAgICAgb3V0ZGlyLFxuICAgICAgYnVuZGxlOiB0cnVlLFxuICAgICAgZm9ybWF0OiAnZXNtJyxcbiAgICAgIHBsYXRmb3JtOiAnbm9kZScsXG4gICAgICB3cml0ZTogZmFsc2UsXG4gICAgICBwbHVnaW5zOiBbXG4gICAgICAgIGNyZWF0ZVN3Y1BsdWdpbih7XG4gICAgICAgICAgbW9kZTogJ3N0ZXAnLFxuICAgICAgICAgIGVudHJpZXNUb0J1bmRsZTogW3N0ZXBGaWxlXSxcbiAgICAgICAgICBvdXRkaXIsXG4gICAgICAgICAgcmV3cml0ZVRzRXh0ZW5zaW9uczogdHJ1ZSxcbiAgICAgICAgfSksXG4gICAgICBdLFxuICAgIH0pO1xuXG4gICAgZXhwZWN0KHJlc3VsdC5lcnJvcnMpLnRvSGF2ZUxlbmd0aCgwKTtcbiAgICBjb25zdCBvdXRwdXQgPSByZXN1bHQub3V0cHV0RmlsZXNbMF0udGV4dDtcbiAgICBleHBlY3Qob3V0cHV0KS50b0NvbnRhaW4oYC9kZXAke291dHB1dEV4dH1gKTtcbiAgICBleHBlY3Qob3V0cHV0KS5ub3QudG9Db250YWluKGAvZGVwJHtpbnB1dEV4dH1gKTtcbiAgfSk7XG5cbiAgaXQoJ2J1bmRsZXMgcGF0aC1hbGlhc2VkIHByb2plY3QtbG9jYWwgaW1wb3J0cyBpbmxpbmUnLCBhc3luYyAoKSA9PiB7XG4gICAgLy8gQWxpYXNlZCBwcm9qZWN0LWxvY2FsIGZpbGVzIG11c3QgYmUgYnVuZGxlZCBpbmxpbmUgKG5vdCBleHRlcm5hbGl6ZWRcbiAgICAvLyBhcyByZWxhdGl2ZSBwYXRocykgYmVjYXVzZSB0aGVpciBzb3VyY2Ugb24gZGlzayBtYXkgY29udGFpbiBmdXJ0aGVyXG4gICAgLy8gYWxpYXMgaW1wb3J0cyB0aGF0IE5vZGUncyBFU00gbG9hZGVyIGNhbm5vdCByZXNvbHZlIGF0IHJ1bnRpbWUuXG4gICAgLy8gU2VlIHBhY2thZ2VzL2J1aWxkZXJzL3NyYy9zd2MtZXNidWlsZC1wbHVnaW4udHMgZm9yIGZ1bGwgcmVhc29uaW5nLlxuICAgIGNvbnN0IG91dGRpciA9IGpvaW4odGVzdFJvb3QsICdvdXQnKTtcbiAgICBjb25zdCBzcmNEaXIgPSBqb2luKHRlc3RSb290LCAnc3JjJyk7XG4gICAgY29uc3QgbGliRGlyID0gam9pbihzcmNEaXIsICdsaWInKTtcbiAgICBjb25zdCBzdGVwRmlsZSA9IGpvaW4oc3JjRGlyLCAnc3RlcC50cycpO1xuXG4gICAgd3JpdGVGaWxlKFxuICAgICAgam9pbihsaWJEaXIsICdjb25maWcudHMnKSxcbiAgICAgICdleHBvcnQgY29uc3QgY29uZmlnID0geyB2YWx1ZTogXCJoZWxsby1mcm9tLWNvbmZpZ1wiIH07J1xuICAgICk7XG4gICAgd3JpdGVGaWxlKFxuICAgICAgc3RlcEZpbGUsXG4gICAgICBgaW1wb3J0IHsgY29uZmlnIH0gZnJvbSAnQC9saWIvY29uZmlnJztcXG5jb25zb2xlLmxvZyhjb25maWcpO2BcbiAgICApO1xuXG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgZXNidWlsZC5idWlsZCh7XG4gICAgICBlbnRyeVBvaW50czogW3N0ZXBGaWxlXSxcbiAgICAgIGFic1dvcmtpbmdEaXI6IHRlc3RSb290LFxuICAgICAgb3V0ZGlyLFxuICAgICAgYnVuZGxlOiB0cnVlLFxuICAgICAgZm9ybWF0OiAnZXNtJyxcbiAgICAgIHBsYXRmb3JtOiAnbm9kZScsXG4gICAgICB3cml0ZTogZmFsc2UsXG4gICAgICBhbGlhczogeyAnQCc6IHNyY0RpciB9LFxuICAgICAgcGx1Z2luczogW1xuICAgICAgICBjcmVhdGVTd2NQbHVnaW4oe1xuICAgICAgICAgIG1vZGU6ICdzdGVwJyxcbiAgICAgICAgICBlbnRyaWVzVG9CdW5kbGU6IFtzdGVwRmlsZV0sXG4gICAgICAgICAgb3V0ZGlyLFxuICAgICAgICAgIHJld3JpdGVUc0V4dGVuc2lvbnM6IHRydWUsXG4gICAgICAgIH0pLFxuICAgICAgXSxcbiAgICB9KTtcblxuICAgIGV4cGVjdChyZXN1bHQuZXJyb3JzKS50b0hhdmVMZW5ndGgoMCk7XG4gICAgY29uc3Qgb3V0cHV0ID0gcmVzdWx0Lm91dHB1dEZpbGVzWzBdLnRleHQ7XG4gICAgLy8gVGhlIGFsaWFzZWQgaGVscGVyIHNob3VsZCBiZSBidW5kbGVkIGlubGluZSAoaXRzIGNvbnRlbnQgaXMgaW4gdGhlXG4gICAgLy8gb3V0cHV0KSwgbm90IGV4dGVybmFsaXplZCBhcyBhIHJlbGF0aXZlIHBhdGggb3IgbGVmdCBhcyBhIGJhcmUgYWxpYXMuXG4gICAgZXhwZWN0KG91dHB1dCkudG9Db250YWluKCdoZWxsby1mcm9tLWNvbmZpZycpO1xuICAgIGV4cGVjdChvdXRwdXQpLm5vdC50b0NvbnRhaW4oJ0AvbGliL2NvbmZpZycpO1xuICAgIGV4cGVjdChvdXRwdXQpLm5vdC50b01hdGNoKC9mcm9tXFxzK1tcIiddW15cIiddKlxcL2xpYlxcL2NvbmZpZ1xcLihqc3x0cylbXCInXS8pO1xuICB9KTtcblxuICBpdCgnYnVuZGxlcyB0cmFuc2l0aXZlIGFsaWFzZWQgaW1wb3J0cyBpbnNpZGUgYWxpYXNlZCBoZWxwZXJzIChNdXggc2VsZi1yZWZlcmVuY2luZyBwYWNrYWdlIHJlZ3Jlc3Npb24pJywgYXN5bmMgKCkgPT4ge1xuICAgIC8vIFJlZ3Jlc3Npb24gdGVzdCBmb3IgaHR0cHM6Ly9naXRodWIuY29tL211eGluYy9haS9wdWxsLzE5My5cbiAgICAvL1xuICAgIC8vIEEgcGFja2FnZSBzZWxmLXJlZmVyZW5jZXMgaXRzIG93biBzdWJwYXRoIHZpYSB0c2NvbmZpZyBgcGF0aHNgIChlLmcuXG4gICAgLy8gYEBteS1wa2cvbGliL2Zvb2Ag4oaSIGBzcmMvbGliL2Zvby50c2ApLiBBIHN0ZXAgZmlsZSBpbXBvcnRzIGEgaGVscGVyXG4gICAgLy8gdmlhIHRoZSBhbGlhcywgYW5kIHRoYXQgaGVscGVyIGltcG9ydHMgYW5vdGhlciBoZWxwZXIgdmlhIHRoZSBhbGlhcy5cbiAgICAvL1xuICAgIC8vIFByZXZpb3VzbHkgdGhlIGhlbHBlcnMgd2VyZSBleHRlcm5hbGl6ZWQgYXMgcmVsYXRpdmUgcGF0aHMsIGJ1dCB0aGVpclxuICAgIC8vIHNvdXJjZSBvbiBkaXNrIHN0aWxsIGNvbnRhaW5lZCBgaW1wb3J0IFwiQG15LXBrZy9saWIvLi4uXCJgLiBBdCBydW50aW1lLFxuICAgIC8vIE5vZGUncyBFU00gbG9hZGVyIGRpZG4ndCBrbm93IGFib3V0IHRzY29uZmlnIHBhdGhzLCBmZWxsIHRocm91Z2ggdG9cbiAgICAvLyB0aGUgcGFja2FnZSdzIGBleHBvcnRzYCBtYXAsIGFuZCB0aHJldyBgUGFja2FnZSBzdWJwYXRoIC4uLiBpcyBub3RcbiAgICAvLyBkZWZpbmVkIGJ5IFwiZXhwb3J0c1wiYC5cbiAgICAvL1xuICAgIC8vIFdpdGggdGhlIGZpeCwgYWxpYXNlZCBwcm9qZWN0LWxvY2FsIGZpbGVzIGFyZSBidW5kbGVkIGlubGluZSwgc29cbiAgICAvLyB0aGVpciBhbGlhcyBpbXBvcnRzIGFyZSByZXNvbHZlZCBhdCBidWlsZCB0aW1lLlxuICAgIGNvbnN0IG91dGRpciA9IGpvaW4odGVzdFJvb3QsICdvdXQnKTtcbiAgICBjb25zdCBzcmNEaXIgPSBqb2luKHRlc3RSb290LCAnc3JjJyk7XG4gICAgY29uc3QgbGliRGlyID0gam9pbihzcmNEaXIsICdsaWInKTtcbiAgICBjb25zdCBzdGVwRmlsZSA9IGpvaW4oc3JjRGlyLCAnc3RlcC50cycpO1xuXG4gICAgd3JpdGVGaWxlKFxuICAgICAgam9pbihsaWJEaXIsICdwcm92aWRlcnMudHMnKSxcbiAgICAgICdleHBvcnQgY29uc3QgcHJvdmlkZXJOYW1lID0gXCJhbnRocm9waWNcIjsnXG4gICAgKTtcbiAgICB3cml0ZUZpbGUoXG4gICAgICBqb2luKGxpYkRpciwgJ2NsaWVudC1mYWN0b3J5LnRzJyksXG4gICAgICAvLyBIZWxwZXIgdXNlcyB0aGUgc2FtZSBhbGlhcyB0byByZWFjaCBhIHNpYmxpbmcg4oCUIHRoaXMgaXMgdGhlIGNhc2VcbiAgICAgIC8vIHRoYXQgYnJva2UgdGhlIE11eCBidWlsZCB3aXRoIHdvcmtmbG93ID49IDQuMi4wLWJldGEuNzguXG4gICAgICBgaW1wb3J0IHsgcHJvdmlkZXJOYW1lIH0gZnJvbSAnQG15LXBrZy9saWIvcHJvdmlkZXJzJztcbmV4cG9ydCBjb25zdCBjbGllbnQgPSB7IHByb3ZpZGVyOiBwcm92aWRlck5hbWUgfTtgXG4gICAgKTtcbiAgICB3cml0ZUZpbGUoXG4gICAgICBzdGVwRmlsZSxcbiAgICAgIGBpbXBvcnQgeyBjbGllbnQgfSBmcm9tICdAbXktcGtnL2xpYi9jbGllbnQtZmFjdG9yeSc7XFxuY29uc29sZS5sb2coY2xpZW50KTtgXG4gICAgKTtcblxuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGVzYnVpbGQuYnVpbGQoe1xuICAgICAgZW50cnlQb2ludHM6IFtzdGVwRmlsZV0sXG4gICAgICBhYnNXb3JraW5nRGlyOiB0ZXN0Um9vdCxcbiAgICAgIG91dGRpcixcbiAgICAgIGJ1bmRsZTogdHJ1ZSxcbiAgICAgIGZvcm1hdDogJ2VzbScsXG4gICAgICBwbGF0Zm9ybTogJ25vZGUnLFxuICAgICAgd3JpdGU6IGZhbHNlLFxuICAgICAgYWxpYXM6IHsgJ0BteS1wa2cnOiBzcmNEaXIgfSxcbiAgICAgIHBsdWdpbnM6IFtcbiAgICAgICAgY3JlYXRlU3djUGx1Z2luKHtcbiAgICAgICAgICBtb2RlOiAnc3RlcCcsXG4gICAgICAgICAgZW50cmllc1RvQnVuZGxlOiBbc3RlcEZpbGVdLFxuICAgICAgICAgIG91dGRpcixcbiAgICAgICAgICByZXdyaXRlVHNFeHRlbnNpb25zOiB0cnVlLFxuICAgICAgICB9KSxcbiAgICAgIF0sXG4gICAgfSk7XG5cbiAgICBleHBlY3QocmVzdWx0LmVycm9ycykudG9IYXZlTGVuZ3RoKDApO1xuICAgIGNvbnN0IG91dHB1dCA9IHJlc3VsdC5vdXRwdXRGaWxlc1swXS50ZXh0O1xuICAgIC8vIEJvdGggaGVscGVycyBzaG91bGQgYmUgYnVuZGxlZCBpbmxpbmUg4oCUIG5vIGFsaWFzZWQgc3BlY2lmaWVycyBzaG91bGRcbiAgICAvLyBsZWFrIGludG8gdGhlIG91dHB1dCwgd2hlcmUgTm9kZSdzIEVTTSBsb2FkZXIgd291bGQgY2hva2Ugb24gdGhlbS5cbiAgICBleHBlY3Qob3V0cHV0KS50b0NvbnRhaW4oJ2FudGhyb3BpYycpO1xuICAgIGV4cGVjdChvdXRwdXQpLm5vdC50b0NvbnRhaW4oJ0BteS1wa2cvbGliL3Byb3ZpZGVycycpO1xuICAgIGV4cGVjdChvdXRwdXQpLm5vdC50b0NvbnRhaW4oJ0BteS1wa2cvbGliL2NsaWVudC1mYWN0b3J5Jyk7XG4gIH0pO1xuXG4gIGl0KCdkb2VzIG5vdCByZWxhdGl2aXplIE5vZGUuanMgYnVpbHRpbiBpbXBvcnRzJywgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IG91dGRpciA9IGpvaW4odGVzdFJvb3QsICdvdXQnKTtcbiAgICBjb25zdCBzcmNEaXIgPSBqb2luKHRlc3RSb290LCAnc3JjJyk7XG4gICAgY29uc3Qgc3RlcEZpbGUgPSBqb2luKHNyY0RpciwgJ3N0ZXAudHMnKTtcblxuICAgIHdyaXRlRmlsZShcbiAgICAgIHN0ZXBGaWxlLFxuICAgICAgYGltcG9ydCB7IGNyZWF0ZUhhc2ggfSBmcm9tICdjcnlwdG8nO1xcbmltcG9ydCB7IGpvaW4gfSBmcm9tICdub2RlOnBhdGgnO1xcbmNvbnNvbGUubG9nKGNyZWF0ZUhhc2gsIGpvaW4pO2BcbiAgICApO1xuXG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgZXNidWlsZC5idWlsZCh7XG4gICAgICBlbnRyeVBvaW50czogW3N0ZXBGaWxlXSxcbiAgICAgIGFic1dvcmtpbmdEaXI6IHRlc3RSb290LFxuICAgICAgb3V0ZGlyLFxuICAgICAgYnVuZGxlOiB0cnVlLFxuICAgICAgZm9ybWF0OiAnZXNtJyxcbiAgICAgIHBsYXRmb3JtOiAnbm9kZScsXG4gICAgICB3cml0ZTogZmFsc2UsXG4gICAgICBwbHVnaW5zOiBbXG4gICAgICAgIGNyZWF0ZVN3Y1BsdWdpbih7XG4gICAgICAgICAgbW9kZTogJ3N0ZXAnLFxuICAgICAgICAgIGVudHJpZXNUb0J1bmRsZTogW3N0ZXBGaWxlXSxcbiAgICAgICAgICBvdXRkaXIsXG4gICAgICAgIH0pLFxuICAgICAgXSxcbiAgICB9KTtcblxuICAgIGV4cGVjdChyZXN1bHQuZXJyb3JzKS50b0hhdmVMZW5ndGgoMCk7XG4gICAgY29uc3Qgb3V0cHV0ID0gcmVzdWx0Lm91dHB1dEZpbGVzWzBdLnRleHQ7XG4gICAgLy8gQnVpbHRpbnMgc2hvdWxkIHJlbWFpbiBhcyBiYXJlIHNwZWNpZmllcnMsIG5vdCByZWxhdGl2aXplZCBwYXRoc1xuICAgIGV4cGVjdChvdXRwdXQpLnRvTWF0Y2goL2Zyb21cXHMrW1wiJ11jcnlwdG9bXCInXS8pO1xuICAgIGV4cGVjdChvdXRwdXQpLnRvTWF0Y2goL2Zyb21cXHMrW1wiJ11ub2RlOnBhdGhbXCInXS8pO1xuICAgIGV4cGVjdChvdXRwdXQpLm5vdC50b01hdGNoKC9mcm9tXFxzK1tcIiddXFwuLipjcnlwdG9bXCInXS8pO1xuICAgIGV4cGVjdChvdXRwdXQpLm5vdC50b01hdGNoKC9mcm9tXFxzK1tcIiddXFwuLipub2RlOnBhdGhbXCInXS8pO1xuICB9KTtcblxuICBpdCgnZG9lcyBub3QgZXh0ZXJuYWxpemUgYWxpYXNlZCBpbXBvcnRzIHRoYXQgcmVzb2x2ZSBpbnRvIG5vZGVfbW9kdWxlcycsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBvdXRkaXIgPSBqb2luKHRlc3RSb290LCAnb3V0Jyk7XG4gICAgY29uc3Qgc3JjRGlyID0gam9pbih0ZXN0Um9vdCwgJ3NyYycpO1xuICAgIGNvbnN0IHN0ZXBGaWxlID0gam9pbihzcmNEaXIsICdzdGVwLnRzJyk7XG4gICAgY29uc3Qgbm9kZU1vZHVsZXNEaXIgPSBqb2luKHRlc3RSb290LCAnbm9kZV9tb2R1bGVzJywgJ3NvbWUtcGtnJyk7XG5cbiAgICB3cml0ZUZpbGUoam9pbihub2RlTW9kdWxlc0RpciwgJ2luZGV4LmpzJyksICdleHBvcnQgY29uc3QgcGtnID0gXCJoZWxsb1wiOycpO1xuICAgIHdyaXRlRmlsZShzdGVwRmlsZSwgYGltcG9ydCB7IHBrZyB9IGZyb20gJ0Bwa2cnO1xcbmNvbnNvbGUubG9nKHBrZyk7YCk7XG5cbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBlc2J1aWxkLmJ1aWxkKHtcbiAgICAgIGVudHJ5UG9pbnRzOiBbc3RlcEZpbGVdLFxuICAgICAgYWJzV29ya2luZ0RpcjogdGVzdFJvb3QsXG4gICAgICBvdXRkaXIsXG4gICAgICBidW5kbGU6IHRydWUsXG4gICAgICBmb3JtYXQ6ICdlc20nLFxuICAgICAgcGxhdGZvcm06ICdub2RlJyxcbiAgICAgIHdyaXRlOiBmYWxzZSxcbiAgICAgIGFsaWFzOiB7ICdAcGtnJzogam9pbihub2RlTW9kdWxlc0RpciwgJ2luZGV4LmpzJykgfSxcbiAgICAgIHBsdWdpbnM6IFtcbiAgICAgICAgY3JlYXRlU3djUGx1Z2luKHtcbiAgICAgICAgICBtb2RlOiAnc3RlcCcsXG4gICAgICAgICAgZW50cmllc1RvQnVuZGxlOiBbc3RlcEZpbGVdLFxuICAgICAgICAgIG91dGRpcixcbiAgICAgICAgfSksXG4gICAgICBdLFxuICAgIH0pO1xuXG4gICAgZXhwZWN0KHJlc3VsdC5lcnJvcnMpLnRvSGF2ZUxlbmd0aCgwKTtcbiAgICBjb25zdCBvdXRwdXQgPSByZXN1bHQub3V0cHV0RmlsZXNbMF0udGV4dDtcbiAgICAvLyBTaG91bGQgYmUgYnVuZGxlZCAoaW5saW5lZCksIG5vdCBleHRlcm5hbGl6ZWQgYXMgYSByZWxhdGl2ZSBub2RlX21vZHVsZXMgcGF0aFxuICAgIGV4cGVjdChvdXRwdXQpLnRvQ29udGFpbignaGVsbG8nKTtcbiAgICBleHBlY3Qob3V0cHV0KS5ub3QudG9NYXRjaCgvZnJvbVxccytbXCInXS4qbm9kZV9tb2R1bGVzLyk7XG4gIH0pO1xuXG4gIGl0KCdleHRlcm5hbGl6ZXMgbmVzdGVkIGJhcmUgcGFja2FnZSBpbXBvcnRzIHRoYXQgb25seSByZXNvbHZlIGZyb20gYSBidW5kbGVkIHBhY2thZ2UnLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3Qgb3V0ZGlyID0gam9pbih0ZXN0Um9vdCwgJ291dCcpO1xuICAgIGNvbnN0IHNyY0RpciA9IGpvaW4odGVzdFJvb3QsICdzcmMnKTtcbiAgICBjb25zdCBzdGVwRmlsZSA9IGpvaW4oc3JjRGlyLCAnc3RlcC50cycpO1xuICAgIGNvbnN0IHBhcmVudFBrZ0RpciA9IGpvaW4odGVzdFJvb3QsICdub2RlX21vZHVsZXMnLCAncGFyZW50LXBrZycpO1xuICAgIGNvbnN0IHBhcmVudFBrZ0luZGV4ID0gam9pbihwYXJlbnRQa2dEaXIsICdpbmRleC5qcycpO1xuICAgIGNvbnN0IG5hdGl2ZVBrZ0RpciA9IGpvaW4ocGFyZW50UGtnRGlyLCAnbm9kZV9tb2R1bGVzJywgJ29wdGlvbmFsLW5hdGl2ZScpO1xuXG4gICAgd3JpdGVGaWxlKFxuICAgICAgam9pbihwYXJlbnRQa2dEaXIsICdwYWNrYWdlLmpzb24nKSxcbiAgICAgIEpTT04uc3RyaW5naWZ5KHsgbmFtZTogJ3BhcmVudC1wa2cnLCBtYWluOiAnaW5kZXguanMnIH0pXG4gICAgKTtcbiAgICB3cml0ZUZpbGUoXG4gICAgICBwYXJlbnRQa2dJbmRleCxcbiAgICAgIGBjb25zdCBuYXRpdmUgPSByZXF1aXJlKCdvcHRpb25hbC1uYXRpdmUnKTtcXG5leHBvcnRzLnZhbHVlID0gbmF0aXZlLnZhbHVlO2BcbiAgICApO1xuICAgIHdyaXRlRmlsZShcbiAgICAgIGpvaW4obmF0aXZlUGtnRGlyLCAncGFja2FnZS5qc29uJyksXG4gICAgICBKU09OLnN0cmluZ2lmeSh7IG5hbWU6ICdvcHRpb25hbC1uYXRpdmUnLCBtYWluOiAnYmluZGluZy5ub2RlJyB9KVxuICAgICk7XG4gICAgd3JpdGVGaWxlKGpvaW4obmF0aXZlUGtnRGlyLCAnYmluZGluZy5ub2RlJyksICcnKTtcbiAgICB3cml0ZUZpbGUoXG4gICAgICBzdGVwRmlsZSxcbiAgICAgIGBpbXBvcnQgeyB2YWx1ZSB9IGZyb20gJ3BhcmVudC1wa2cnO1xcbmNvbnNvbGUubG9nKHZhbHVlKTtgXG4gICAgKTtcblxuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGVzYnVpbGQuYnVpbGQoe1xuICAgICAgZW50cnlQb2ludHM6IFtzdGVwRmlsZV0sXG4gICAgICBhYnNXb3JraW5nRGlyOiB0ZXN0Um9vdCxcbiAgICAgIG91dGRpcixcbiAgICAgIGJ1bmRsZTogdHJ1ZSxcbiAgICAgIGZvcm1hdDogJ2VzbScsXG4gICAgICBwbGF0Zm9ybTogJ25vZGUnLFxuICAgICAgd3JpdGU6IGZhbHNlLFxuICAgICAgcGx1Z2luczogW1xuICAgICAgICBjcmVhdGVTd2NQbHVnaW4oe1xuICAgICAgICAgIG1vZGU6ICdzdGVwJyxcbiAgICAgICAgICBlbnRyaWVzVG9CdW5kbGU6IFtzdGVwRmlsZSwgcGFyZW50UGtnSW5kZXhdLFxuICAgICAgICAgIG91dGRpcixcbiAgICAgICAgfSksXG4gICAgICBdLFxuICAgIH0pO1xuXG4gICAgZXhwZWN0KHJlc3VsdC5lcnJvcnMpLnRvSGF2ZUxlbmd0aCgwKTtcbiAgICBjb25zdCBvdXRwdXQgPSByZXN1bHQub3V0cHV0RmlsZXNbMF0udGV4dDtcbiAgICBleHBlY3Qob3V0cHV0KS50b0NvbnRhaW4oJ29wdGlvbmFsLW5hdGl2ZScpO1xuICAgIGV4cGVjdChvdXRwdXQpLm5vdC50b0NvbnRhaW4oJ2JpbmRpbmcubm9kZScpO1xuICB9KTtcblxuICBpdC5lYWNoKFtcbiAgICAnLnRzJyxcbiAgICAnLnRzeCcsXG4gICAgJy5tdHMnLFxuICAgICcuY3RzJyxcbiAgXSkoJ3ByZXNlcnZlcyBleHRlcm5hbGl6ZWQgJXMgZXh0ZW5zaW9ucyBieSBkZWZhdWx0JywgYXN5bmMgKGlucHV0RXh0KSA9PiB7XG4gICAgY29uc3Qgb3V0ZGlyID0gam9pbih0ZXN0Um9vdCwgJ291dCcpO1xuICAgIGNvbnN0IHNyY0RpciA9IGpvaW4odGVzdFJvb3QsICdzcmMnKTtcbiAgICBjb25zdCBzdGVwRmlsZSA9IGpvaW4oc3JjRGlyLCAnc3RlcC50cycpO1xuXG4gICAgd3JpdGVGaWxlKGpvaW4oc3JjRGlyLCBgZGVwJHtpbnB1dEV4dH1gKSwgJ2V4cG9ydCBjb25zdCBkZXAgPSB7fTsnKTtcbiAgICB3cml0ZUZpbGUoc3RlcEZpbGUsIGBpbXBvcnQgeyBkZXAgfSBmcm9tICcuL2RlcCc7XFxuY29uc29sZS5sb2coZGVwKTtgKTtcblxuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGVzYnVpbGQuYnVpbGQoe1xuICAgICAgZW50cnlQb2ludHM6IFtzdGVwRmlsZV0sXG4gICAgICBhYnNXb3JraW5nRGlyOiB0ZXN0Um9vdCxcbiAgICAgIG91dGRpcixcbiAgICAgIGJ1bmRsZTogdHJ1ZSxcbiAgICAgIGZvcm1hdDogJ2VzbScsXG4gICAgICBwbGF0Zm9ybTogJ25vZGUnLFxuICAgICAgd3JpdGU6IGZhbHNlLFxuICAgICAgcGx1Z2luczogW1xuICAgICAgICBjcmVhdGVTd2NQbHVnaW4oe1xuICAgICAgICAgIG1vZGU6ICdzdGVwJyxcbiAgICAgICAgICBlbnRyaWVzVG9CdW5kbGU6IFtzdGVwRmlsZV0sXG4gICAgICAgICAgb3V0ZGlyLFxuICAgICAgICB9KSxcbiAgICAgIF0sXG4gICAgfSk7XG5cbiAgICBleHBlY3QocmVzdWx0LmVycm9ycykudG9IYXZlTGVuZ3RoKDApO1xuICAgIGNvbnN0IG91dHB1dCA9IHJlc3VsdC5vdXRwdXRGaWxlc1swXS50ZXh0O1xuICAgIGV4cGVjdChvdXRwdXQpLnRvQ29udGFpbihgL2RlcCR7aW5wdXRFeHR9YCk7XG4gIH0pO1xuXG4gIGl0KCdidW5kbGVzIHRyYW5zaXRpdmUgbG9jYWwgVHlwZVNjcmlwdCBkZXBlbmRlbmNpZXMgd2l0aCBleHRlbnNpb25sZXNzIGltcG9ydHMnLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3Qgb3V0ZGlyID0gam9pbih0ZXN0Um9vdCwgJ291dCcpO1xuICAgIGNvbnN0IHN0ZXBGaWxlID0gam9pbih0ZXN0Um9vdCwgJ3NlcnZlcicsICd3b3JrZmxvd3MnLCAnbXktd29ya2Zsb3cudHMnKTtcbiAgICBjb25zdCBjb25zdGFudHNGaWxlID0gam9pbih0ZXN0Um9vdCwgJ3NoYXJlZCcsICdjb25zdGFudHMudHMnKTtcbiAgICBjb25zdCBoZWxwZXJzRmlsZSA9IGpvaW4odGVzdFJvb3QsICdzaGFyZWQnLCAnaGVscGVycy50cycpO1xuXG4gICAgd3JpdGVGaWxlKGhlbHBlcnNGaWxlLCBgZXhwb3J0IGNvbnN0IEhFTFBFUl9WQUxVRSA9IFwiZnJvbS1oZWxwZXJcIjtgKTtcbiAgICB3cml0ZUZpbGUoXG4gICAgICBjb25zdGFudHNGaWxlLFxuICAgICAgYGltcG9ydCB7IEhFTFBFUl9WQUxVRSB9IGZyb20gJy4vaGVscGVycyc7XFxuZXhwb3J0IGNvbnN0IENBVEVHT1JJRVMgPSBbSEVMUEVSX1ZBTFVFXTtgXG4gICAgKTtcbiAgICB3cml0ZUZpbGUoXG4gICAgICBzdGVwRmlsZSxcbiAgICAgIGBpbXBvcnQgeyBDQVRFR09SSUVTIH0gZnJvbSAnLi4vLi4vc2hhcmVkL2NvbnN0YW50cyc7XFxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIG15U3RlcCgpIHtcXG4gICd1c2Ugc3RlcCc7XFxuICByZXR1cm4gQ0FURUdPUklFU1swXTtcXG59YFxuICAgICk7XG5cbiAgICBjb25zdCBzdGF0ZSA9IHtcbiAgICAgIGRpc2NvdmVyZWRTdGVwczogbmV3IFNldDxzdHJpbmc+KCksXG4gICAgICBkaXNjb3ZlcmVkV29ya2Zsb3dzOiBuZXcgU2V0PHN0cmluZz4oKSxcbiAgICAgIGRpc2NvdmVyZWRTZXJkZUZpbGVzOiBuZXcgU2V0PHN0cmluZz4oKSxcbiAgICB9O1xuICAgIGF3YWl0IGVzYnVpbGQuYnVpbGQoe1xuICAgICAgZW50cnlQb2ludHM6IFtzdGVwRmlsZV0sXG4gICAgICBhYnNXb3JraW5nRGlyOiB0ZXN0Um9vdCxcbiAgICAgIGJ1bmRsZTogdHJ1ZSxcbiAgICAgIGZvcm1hdDogJ2VzbScsXG4gICAgICBwbGF0Zm9ybTogJ25vZGUnLFxuICAgICAgd3JpdGU6IGZhbHNlLFxuICAgICAgcmVzb2x2ZUV4dGVuc2lvbnM6IFsnLnRzJywgJy50c3gnLCAnLmpzJywgJy5qc3gnLCAnLm1qcycsICcuY2pzJ10sXG4gICAgICBwbHVnaW5zOiBbY3JlYXRlRGlzY292ZXJFbnRyaWVzUGx1Z2luKHN0YXRlLCB0ZXN0Um9vdCldLFxuICAgIH0pO1xuXG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgZXNidWlsZC5idWlsZCh7XG4gICAgICBlbnRyeVBvaW50czogW3N0ZXBGaWxlXSxcbiAgICAgIGFic1dvcmtpbmdEaXI6IHRlc3RSb290LFxuICAgICAgb3V0ZGlyLFxuICAgICAgYnVuZGxlOiB0cnVlLFxuICAgICAgZm9ybWF0OiAnZXNtJyxcbiAgICAgIHBsYXRmb3JtOiAnbm9kZScsXG4gICAgICB3cml0ZTogZmFsc2UsXG4gICAgICByZXNvbHZlRXh0ZW5zaW9uczogWycudHMnLCAnLnRzeCcsICcuanMnLCAnLmpzeCcsICcubWpzJywgJy5janMnXSxcbiAgICAgIHBsdWdpbnM6IFtcbiAgICAgICAgY3JlYXRlU3djUGx1Z2luKHtcbiAgICAgICAgICBtb2RlOiAnc3RlcCcsXG4gICAgICAgICAgZW50cmllc1RvQnVuZGxlOiBbc3RlcEZpbGVdLFxuICAgICAgICAgIG91dGRpcixcbiAgICAgICAgICBidW5kbGVUcmFuc2l0aXZlTG9jYWxTdGVwRGVwZW5kZW5jaWVzOiB0cnVlLFxuICAgICAgICB9KSxcbiAgICAgIF0sXG4gICAgfSk7XG5cbiAgICBleHBlY3QocmVzdWx0LmVycm9ycykudG9IYXZlTGVuZ3RoKDApO1xuICAgIGNvbnN0IG91dHB1dCA9IHJlc3VsdC5vdXRwdXRGaWxlc1swXS50ZXh0O1xuICAgIGV4cGVjdChvdXRwdXQpLnRvQ29udGFpbignZnJvbS1oZWxwZXInKTtcbiAgICBleHBlY3Qob3V0cHV0KS5ub3QudG9NYXRjaCgvZnJvbVxccytbXCInXVteXCInXSpzaGFyZWRcXC9jb25zdGFudHMvKTtcbiAgICBleHBlY3Qob3V0cHV0KS5ub3QudG9NYXRjaCgvZnJvbVxccytbXCInXVteXCInXSpzaGFyZWRcXC9oZWxwZXJzLyk7XG4gIH0pO1xuXG4gIGl0KCdleHRlcm5hbGl6ZXMgdHJhbnNpdGl2ZSBsb2NhbCBUeXBlU2NyaXB0IGRlcGVuZGVuY2llcyBieSBkZWZhdWx0JywgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IG91dGRpciA9IGpvaW4odGVzdFJvb3QsICdvdXQnKTtcbiAgICBjb25zdCBzdGVwRmlsZSA9IGpvaW4odGVzdFJvb3QsICdzZXJ2ZXInLCAnd29ya2Zsb3dzJywgJ215LXdvcmtmbG93LnRzJyk7XG4gICAgY29uc3QgY29uc3RhbnRzRmlsZSA9IGpvaW4odGVzdFJvb3QsICdzaGFyZWQnLCAnY29uc3RhbnRzLnRzJyk7XG4gICAgY29uc3QgaGVscGVyc0ZpbGUgPSBqb2luKHRlc3RSb290LCAnc2hhcmVkJywgJ2hlbHBlcnMudHMnKTtcblxuICAgIHdyaXRlRmlsZShoZWxwZXJzRmlsZSwgYGV4cG9ydCBjb25zdCBIRUxQRVJfVkFMVUUgPSBcImZyb20taGVscGVyXCI7YCk7XG4gICAgd3JpdGVGaWxlKFxuICAgICAgY29uc3RhbnRzRmlsZSxcbiAgICAgIGBpbXBvcnQgeyBIRUxQRVJfVkFMVUUgfSBmcm9tICcuL2hlbHBlcnMnO1xcbmV4cG9ydCBjb25zdCBDQVRFR09SSUVTID0gW0hFTFBFUl9WQUxVRV07YFxuICAgICk7XG4gICAgd3JpdGVGaWxlKFxuICAgICAgc3RlcEZpbGUsXG4gICAgICBgaW1wb3J0IHsgQ0FURUdPUklFUyB9IGZyb20gJy4uLy4uL3NoYXJlZC9jb25zdGFudHMnO1xcbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBteVN0ZXAoKSB7XFxuICAndXNlIHN0ZXAnO1xcbiAgcmV0dXJuIENBVEVHT1JJRVNbMF07XFxufWBcbiAgICApO1xuXG4gICAgY29uc3Qgc3RhdGUgPSB7XG4gICAgICBkaXNjb3ZlcmVkU3RlcHM6IG5ldyBTZXQ8c3RyaW5nPigpLFxuICAgICAgZGlzY292ZXJlZFdvcmtmbG93czogbmV3IFNldDxzdHJpbmc+KCksXG4gICAgICBkaXNjb3ZlcmVkU2VyZGVGaWxlczogbmV3IFNldDxzdHJpbmc+KCksXG4gICAgfTtcbiAgICBhd2FpdCBlc2J1aWxkLmJ1aWxkKHtcbiAgICAgIGVudHJ5UG9pbnRzOiBbc3RlcEZpbGVdLFxuICAgICAgYWJzV29ya2luZ0RpcjogdGVzdFJvb3QsXG4gICAgICBidW5kbGU6IHRydWUsXG4gICAgICBmb3JtYXQ6ICdlc20nLFxuICAgICAgcGxhdGZvcm06ICdub2RlJyxcbiAgICAgIHdyaXRlOiBmYWxzZSxcbiAgICAgIHJlc29sdmVFeHRlbnNpb25zOiBbJy50cycsICcudHN4JywgJy5qcycsICcuanN4JywgJy5tanMnLCAnLmNqcyddLFxuICAgICAgcGx1Z2luczogW2NyZWF0ZURpc2NvdmVyRW50cmllc1BsdWdpbihzdGF0ZSwgdGVzdFJvb3QpXSxcbiAgICB9KTtcblxuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGVzYnVpbGQuYnVpbGQoe1xuICAgICAgZW50cnlQb2ludHM6IFtzdGVwRmlsZV0sXG4gICAgICBhYnNXb3JraW5nRGlyOiB0ZXN0Um9vdCxcbiAgICAgIG91dGRpcixcbiAgICAgIGJ1bmRsZTogdHJ1ZSxcbiAgICAgIGZvcm1hdDogJ2VzbScsXG4gICAgICBwbGF0Zm9ybTogJ25vZGUnLFxuICAgICAgd3JpdGU6IGZhbHNlLFxuICAgICAgcmVzb2x2ZUV4dGVuc2lvbnM6IFsnLnRzJywgJy50c3gnLCAnLmpzJywgJy5qc3gnLCAnLm1qcycsICcuY2pzJ10sXG4gICAgICBwbHVnaW5zOiBbXG4gICAgICAgIGNyZWF0ZVN3Y1BsdWdpbih7XG4gICAgICAgICAgbW9kZTogJ3N0ZXAnLFxuICAgICAgICAgIGVudHJpZXNUb0J1bmRsZTogW3N0ZXBGaWxlXSxcbiAgICAgICAgICBvdXRkaXIsXG4gICAgICAgIH0pLFxuICAgICAgXSxcbiAgICB9KTtcblxuICAgIGV4cGVjdChyZXN1bHQuZXJyb3JzKS50b0hhdmVMZW5ndGgoMCk7XG4gICAgY29uc3Qgb3V0cHV0ID0gcmVzdWx0Lm91dHB1dEZpbGVzWzBdLnRleHQ7XG4gICAgZXhwZWN0KG91dHB1dCkubm90LnRvQ29udGFpbignZnJvbS1oZWxwZXInKTtcbiAgICBleHBlY3Qob3V0cHV0KS50b01hdGNoKC9mcm9tXFxzK1tcIiddW15cIiddKnNoYXJlZFxcL2NvbnN0YW50c1xcLnRzW1wiJ10vKTtcbiAgfSk7XG5cbiAgaXQoJ2tlZXBzIG9yZGluYXJ5IHBhY2thZ2UgZGVwZW5kZW5jaWVzIGV4dGVybmFsIHdoZW4gcmVhY2hhYmxlIGZyb20gYSBidW5kbGVkIHN0ZXAnLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3Qgb3V0ZGlyID0gam9pbih0ZXN0Um9vdCwgJ291dCcpO1xuICAgIGNvbnN0IHN0ZXBGaWxlID0gam9pbih0ZXN0Um9vdCwgJ3NlcnZlcicsICd3b3JrZmxvd3MnLCAnbXktd29ya2Zsb3cudHMnKTtcbiAgICBjb25zdCBwa2dEaXIgPSBqb2luKHRlc3RSb290LCAnbm9kZV9tb2R1bGVzJywgJ3BsYWluLXBrZycpO1xuICAgIGNvbnN0IHBrZ0luZGV4ID0gam9pbihwa2dEaXIsICdpbmRleC5qcycpO1xuXG4gICAgd3JpdGVGaWxlKFxuICAgICAgam9pbihwa2dEaXIsICdwYWNrYWdlLmpzb24nKSxcbiAgICAgIEpTT04uc3RyaW5naWZ5KHsgbmFtZTogJ3BsYWluLXBrZycsIG1haW46ICdpbmRleC5qcycgfSlcbiAgICApO1xuICAgIHdyaXRlRmlsZShwa2dJbmRleCwgYGV4cG9ydCBjb25zdCB2YWx1ZSA9IFwiZnJvbS1wYWNrYWdlXCI7YCk7XG4gICAgd3JpdGVGaWxlKFxuICAgICAgc3RlcEZpbGUsXG4gICAgICBgaW1wb3J0IHsgdmFsdWUgfSBmcm9tICdwbGFpbi1wa2cnO1xcbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBteVN0ZXAoKSB7XFxuICAndXNlIHN0ZXAnO1xcbiAgcmV0dXJuIHZhbHVlO1xcbn1gXG4gICAgKTtcblxuICAgIGNvbnN0IHN0YXRlID0ge1xuICAgICAgZGlzY292ZXJlZFN0ZXBzOiBuZXcgU2V0PHN0cmluZz4oKSxcbiAgICAgIGRpc2NvdmVyZWRXb3JrZmxvd3M6IG5ldyBTZXQ8c3RyaW5nPigpLFxuICAgICAgZGlzY292ZXJlZFNlcmRlRmlsZXM6IG5ldyBTZXQ8c3RyaW5nPigpLFxuICAgIH07XG4gICAgYXdhaXQgZXNidWlsZC5idWlsZCh7XG4gICAgICBlbnRyeVBvaW50czogW3N0ZXBGaWxlXSxcbiAgICAgIGFic1dvcmtpbmdEaXI6IHRlc3RSb290LFxuICAgICAgYnVuZGxlOiB0cnVlLFxuICAgICAgZm9ybWF0OiAnZXNtJyxcbiAgICAgIHBsYXRmb3JtOiAnbm9kZScsXG4gICAgICB3cml0ZTogZmFsc2UsXG4gICAgICBwbHVnaW5zOiBbY3JlYXRlRGlzY292ZXJFbnRyaWVzUGx1Z2luKHN0YXRlLCB0ZXN0Um9vdCldLFxuICAgIH0pO1xuXG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgZXNidWlsZC5idWlsZCh7XG4gICAgICBlbnRyeVBvaW50czogW3N0ZXBGaWxlXSxcbiAgICAgIGFic1dvcmtpbmdEaXI6IHRlc3RSb290LFxuICAgICAgb3V0ZGlyLFxuICAgICAgYnVuZGxlOiB0cnVlLFxuICAgICAgZm9ybWF0OiAnZXNtJyxcbiAgICAgIHBsYXRmb3JtOiAnbm9kZScsXG4gICAgICB3cml0ZTogZmFsc2UsXG4gICAgICBwbHVnaW5zOiBbXG4gICAgICAgIGNyZWF0ZVN3Y1BsdWdpbih7XG4gICAgICAgICAgbW9kZTogJ3N0ZXAnLFxuICAgICAgICAgIGVudHJpZXNUb0J1bmRsZTogW3N0ZXBGaWxlXSxcbiAgICAgICAgICBvdXRkaXIsXG4gICAgICAgICAgYnVuZGxlVHJhbnNpdGl2ZUxvY2FsU3RlcERlcGVuZGVuY2llczogdHJ1ZSxcbiAgICAgICAgfSksXG4gICAgICBdLFxuICAgIH0pO1xuXG4gICAgZXhwZWN0KHJlc3VsdC5lcnJvcnMpLnRvSGF2ZUxlbmd0aCgwKTtcbiAgICBjb25zdCBvdXRwdXQgPSByZXN1bHQub3V0cHV0RmlsZXNbMF0udGV4dDtcbiAgICBleHBlY3Qob3V0cHV0KS50b01hdGNoKC9mcm9tXFxzK1tcIiddcGxhaW4tcGtnW1wiJ10vKTtcbiAgICBleHBlY3Qob3V0cHV0KS5ub3QudG9Db250YWluKCdmcm9tLXBhY2thZ2UnKTtcbiAgfSk7XG5cbiAgaXQoJ2J1bmRsZXMgcGFja2FnZSBwYXJlbnRzIHdoZW4gdGhleSBsZWFkIHRvIGRpc2NvdmVyZWQgd29ya2Zsb3ctcmVsYXRlZCBlbnRyaWVzJywgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IG91dGRpciA9IGpvaW4odGVzdFJvb3QsICdvdXQnKTtcbiAgICBjb25zdCBzdGVwRmlsZSA9IGpvaW4odGVzdFJvb3QsICdzZXJ2ZXInLCAnd29ya2Zsb3dzJywgJ215LXdvcmtmbG93LnRzJyk7XG4gICAgY29uc3QgcGtnRGlyID0gam9pbih0ZXN0Um9vdCwgJ25vZGVfbW9kdWxlcycsICd3b3JrZmxvdy1wa2cnKTtcbiAgICBjb25zdCBwa2dJbmRleCA9IGpvaW4ocGtnRGlyLCAnaW5kZXguanMnKTtcbiAgICBjb25zdCBwa2dTZXJkZSA9IGpvaW4ocGtnRGlyLCAnc2VyZGUuanMnKTtcblxuICAgIHdyaXRlRmlsZShcbiAgICAgIGpvaW4ocGtnRGlyLCAncGFja2FnZS5qc29uJyksXG4gICAgICBKU09OLnN0cmluZ2lmeSh7IG5hbWU6ICd3b3JrZmxvdy1wa2cnLCBtYWluOiAnaW5kZXguanMnIH0pXG4gICAgKTtcbiAgICB3cml0ZUZpbGUocGtnU2VyZGUsIGBleHBvcnQgY29uc3QgdmFsdWUgPSBcImZyb20tc2VyZGVcIjtgKTtcbiAgICB3cml0ZUZpbGUocGtnSW5kZXgsIGBleHBvcnQgeyB2YWx1ZSB9IGZyb20gJy4vc2VyZGUuanMnO2ApO1xuICAgIHdyaXRlRmlsZShcbiAgICAgIHN0ZXBGaWxlLFxuICAgICAgYGltcG9ydCB7IHZhbHVlIH0gZnJvbSAnd29ya2Zsb3ctcGtnJztcXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gbXlTdGVwKCkge1xcbiAgJ3VzZSBzdGVwJztcXG4gIHJldHVybiB2YWx1ZTtcXG59YFxuICAgICk7XG5cbiAgICBjb25zdCBzdGF0ZSA9IHtcbiAgICAgIGRpc2NvdmVyZWRTdGVwczogbmV3IFNldDxzdHJpbmc+KCksXG4gICAgICBkaXNjb3ZlcmVkV29ya2Zsb3dzOiBuZXcgU2V0PHN0cmluZz4oKSxcbiAgICAgIGRpc2NvdmVyZWRTZXJkZUZpbGVzOiBuZXcgU2V0PHN0cmluZz4oKSxcbiAgICB9O1xuICAgIGF3YWl0IGVzYnVpbGQuYnVpbGQoe1xuICAgICAgZW50cnlQb2ludHM6IFtzdGVwRmlsZV0sXG4gICAgICBhYnNXb3JraW5nRGlyOiB0ZXN0Um9vdCxcbiAgICAgIGJ1bmRsZTogdHJ1ZSxcbiAgICAgIGZvcm1hdDogJ2VzbScsXG4gICAgICBwbGF0Zm9ybTogJ25vZGUnLFxuICAgICAgd3JpdGU6IGZhbHNlLFxuICAgICAgcGx1Z2luczogW2NyZWF0ZURpc2NvdmVyRW50cmllc1BsdWdpbihzdGF0ZSwgdGVzdFJvb3QpXSxcbiAgICB9KTtcblxuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGVzYnVpbGQuYnVpbGQoe1xuICAgICAgZW50cnlQb2ludHM6IFtzdGVwRmlsZV0sXG4gICAgICBhYnNXb3JraW5nRGlyOiB0ZXN0Um9vdCxcbiAgICAgIG91dGRpcixcbiAgICAgIGJ1bmRsZTogdHJ1ZSxcbiAgICAgIGZvcm1hdDogJ2VzbScsXG4gICAgICBwbGF0Zm9ybTogJ25vZGUnLFxuICAgICAgd3JpdGU6IGZhbHNlLFxuICAgICAgcGx1Z2luczogW1xuICAgICAgICBjcmVhdGVTd2NQbHVnaW4oe1xuICAgICAgICAgIG1vZGU6ICdzdGVwJyxcbiAgICAgICAgICBlbnRyaWVzVG9CdW5kbGU6IFtzdGVwRmlsZSwgcGtnU2VyZGVdLFxuICAgICAgICAgIG91dGRpcixcbiAgICAgICAgfSksXG4gICAgICBdLFxuICAgIH0pO1xuXG4gICAgZXhwZWN0KHJlc3VsdC5lcnJvcnMpLnRvSGF2ZUxlbmd0aCgwKTtcbiAgICBjb25zdCBvdXRwdXQgPSByZXN1bHQub3V0cHV0RmlsZXNbMF0udGV4dDtcbiAgICBleHBlY3Qob3V0cHV0KS50b0NvbnRhaW4oJ2Zyb20tc2VyZGUnKTtcbiAgICBleHBlY3Qob3V0cHV0KS5ub3QudG9NYXRjaCgvZnJvbVxccytbXCInXXdvcmtmbG93LXBrZ1tcIiddLyk7XG4gIH0pO1xufSk7XG5cbmRlc2NyaWJlKCdjcmVhdGVTd2NQbHVnaW4gc2lkZUVmZmVjdEVudHJpZXMnLCAoKSA9PiB7XG4gIGxldCB0ZXN0Um9vdDogc3RyaW5nO1xuXG4gIGJlZm9yZUVhY2goKCkgPT4ge1xuICAgIHRlc3RSb290ID0gbWtkdGVtcFN5bmMoam9pbihyZWFsVG1wZGlyLCAnd29ya2Zsb3ctc3djLXBsdWdpbi0nKSk7XG4gICAgYXBwbHlTd2NUcmFuc2Zvcm1Nb2NrLm1vY2tSZXNldCgpO1xuICB9KTtcblxuICBhZnRlckVhY2goKCkgPT4ge1xuICAgIHJtU3luYyh0ZXN0Um9vdCwgeyByZWN1cnNpdmU6IHRydWUsIGZvcmNlOiB0cnVlIH0pO1xuICB9KTtcblxuICAvKipcbiAgICogSGVscGVyOiBjcmVhdGVzIGEgZmFrZSBub2RlX21vZHVsZXMgcGFja2FnZSB3aXRoIGBcInNpZGVFZmZlY3RzXCI6IGZhbHNlYFxuICAgKiBpbiBpdHMgcGFja2FnZS5qc29uIGFuZCBhIHNpbmdsZSBlbnRyeSBmaWxlIHRoYXQgZXhwb3J0cyBhIHNpZGUtZWZmZWN0ZnVsXG4gICAqIHJlZ2lzdHJhdGlvbiBjYWxsIChzaW11bGF0aW5nIHdoYXQgdGhlIFNXQyB0cmFuc2Zvcm0gcHJvZHVjZXMpLlxuICAgKi9cbiAgZnVuY3Rpb24gY3JlYXRlU2lkZUVmZmVjdHNGYWxzZVBhY2thZ2UoXG4gICAgcGFja2FnZU5hbWU6IHN0cmluZyxcbiAgICBlbnRyeUNvZGU6IHN0cmluZ1xuICApOiBzdHJpbmcge1xuICAgIGNvbnN0IHBrZ0RpciA9IGpvaW4odGVzdFJvb3QsICdub2RlX21vZHVsZXMnLCBwYWNrYWdlTmFtZSk7XG4gICAgd3JpdGVGaWxlKFxuICAgICAgam9pbihwa2dEaXIsICdwYWNrYWdlLmpzb24nKSxcbiAgICAgIEpTT04uc3RyaW5naWZ5KHtcbiAgICAgICAgbmFtZTogcGFja2FnZU5hbWUsXG4gICAgICAgIHZlcnNpb246ICcxLjAuMCcsXG4gICAgICAgIHNpZGVFZmZlY3RzOiBmYWxzZSxcbiAgICAgICAgbWFpbjogJ2luZGV4LmpzJyxcbiAgICAgIH0pXG4gICAgKTtcbiAgICBjb25zdCBlbnRyeVBhdGggPSBqb2luKHBrZ0RpciwgJ2luZGV4LmpzJyk7XG4gICAgd3JpdGVGaWxlKGVudHJ5UGF0aCwgZW50cnlDb2RlKTtcbiAgICByZXR1cm4gZW50cnlQYXRoO1xuICB9XG5cbiAgaXQoJ3ByZXNlcnZlcyBiYXJlIGltcG9ydHMgb2Ygc2lkZUVmZmVjdEVudHJpZXMgcGFja2FnZXMgd2hlbiBidW5kbGluZyB3aXRob3V0IGVudHJpZXNUb0J1bmRsZScsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBzaWRlRWZmZWN0Q29kZSA9XG4gICAgICAnZ2xvYmFsVGhpcy5fX3JlZ2lzdGVyZWQgPSBnbG9iYWxUaGlzLl9fcmVnaXN0ZXJlZCB8fCBbXTtcXG5nbG9iYWxUaGlzLl9fcmVnaXN0ZXJlZC5wdXNoKFwibXktcGtnXCIpOyc7XG4gICAgY29uc3QgZW50cnlQYXRoID0gY3JlYXRlU2lkZUVmZmVjdHNGYWxzZVBhY2thZ2UoXG4gICAgICAnbXktc2lkZS1lZmZlY3QtcGtnJyxcbiAgICAgIHNpZGVFZmZlY3RDb2RlXG4gICAgKTtcblxuICAgIC8vIFNXQyBtb2NrOiByZXR1cm4gdGhlIGNvZGUgdW5jaGFuZ2VkICh0aGUgc2lkZSBlZmZlY3RzIGFyZSBhbHJlYWR5IHRoZXJlKVxuICAgIGFwcGx5U3djVHJhbnNmb3JtTW9jay5tb2NrSW1wbGVtZW50YXRpb24oXG4gICAgICBhc3luYyAoX2ZpbGVuYW1lOiBzdHJpbmcsIHNvdXJjZTogc3RyaW5nKSA9PiAoe1xuICAgICAgICBjb2RlOiBzb3VyY2UsXG4gICAgICAgIHdvcmtmbG93TWFuaWZlc3Q6IHt9LFxuICAgICAgfSlcbiAgICApO1xuXG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgZXNidWlsZC5idWlsZCh7XG4gICAgICBzdGRpbjoge1xuICAgICAgICBjb250ZW50czogYGltcG9ydCAnbXktc2lkZS1lZmZlY3QtcGtnJztgLFxuICAgICAgICByZXNvbHZlRGlyOiB0ZXN0Um9vdCxcbiAgICAgICAgc291cmNlZmlsZTogJ3ZpcnR1YWwtZW50cnkuanMnLFxuICAgICAgICBsb2FkZXI6ICdqcycsXG4gICAgICB9LFxuICAgICAgYWJzV29ya2luZ0RpcjogdGVzdFJvb3QsXG4gICAgICBidW5kbGU6IHRydWUsXG4gICAgICBmb3JtYXQ6ICdjanMnLFxuICAgICAgcGxhdGZvcm06ICdub2RlJyxcbiAgICAgIHdyaXRlOiBmYWxzZSxcbiAgICAgIHRyZWVTaGFraW5nOiB0cnVlLFxuICAgICAgbG9nTGV2ZWw6ICdzaWxlbnQnLFxuICAgICAgcGx1Z2luczogW1xuICAgICAgICBjcmVhdGVTd2NQbHVnaW4oe1xuICAgICAgICAgIG1vZGU6ICd3b3JrZmxvdycsXG4gICAgICAgICAgc2lkZUVmZmVjdEVudHJpZXM6IFtlbnRyeVBhdGhdLFxuICAgICAgICB9KSxcbiAgICAgIF0sXG4gICAgfSk7XG5cbiAgICBleHBlY3QocmVzdWx0LmVycm9ycykudG9IYXZlTGVuZ3RoKDApO1xuICAgIGNvbnN0IG91dHB1dCA9IHJlc3VsdC5vdXRwdXRGaWxlc1swXS50ZXh0O1xuICAgIC8vIFRoZSByZWdpc3RyYXRpb24gY29kZSBzaG91bGQgYmUgcHJlc2VudCBpbiB0aGUgYnVuZGxlXG4gICAgZXhwZWN0KG91dHB1dCkudG9Db250YWluKCdfX3JlZ2lzdGVyZWQnKTtcbiAgfSk7XG5cbiAgaXQoJ2Ryb3BzIGJhcmUgaW1wb3J0cyB3aGVuIHNpZGVFZmZlY3RFbnRyaWVzIGlzIE5PVCBwcm92aWRlZCBmb3Igc2lkZUVmZmVjdHM6ZmFsc2UgcGFja2FnZXMnLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3Qgc2lkZUVmZmVjdENvZGUgPVxuICAgICAgJ2dsb2JhbFRoaXMuX19yZWdpc3RlcmVkID0gZ2xvYmFsVGhpcy5fX3JlZ2lzdGVyZWQgfHwgW107XFxuZ2xvYmFsVGhpcy5fX3JlZ2lzdGVyZWQucHVzaChcIm15LXBrZ1wiKTsnO1xuICAgIGNyZWF0ZVNpZGVFZmZlY3RzRmFsc2VQYWNrYWdlKCdteS1kcm9wcGVkLXBrZycsIHNpZGVFZmZlY3RDb2RlKTtcblxuICAgIGFwcGx5U3djVHJhbnNmb3JtTW9jay5tb2NrSW1wbGVtZW50YXRpb24oXG4gICAgICBhc3luYyAoX2ZpbGVuYW1lOiBzdHJpbmcsIHNvdXJjZTogc3RyaW5nKSA9PiAoe1xuICAgICAgICBjb2RlOiBzb3VyY2UsXG4gICAgICAgIHdvcmtmbG93TWFuaWZlc3Q6IHt9LFxuICAgICAgfSlcbiAgICApO1xuXG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgZXNidWlsZC5idWlsZCh7XG4gICAgICBzdGRpbjoge1xuICAgICAgICBjb250ZW50czogYGltcG9ydCAnbXktZHJvcHBlZC1wa2cnO2AsXG4gICAgICAgIHJlc29sdmVEaXI6IHRlc3RSb290LFxuICAgICAgICBzb3VyY2VmaWxlOiAndmlydHVhbC1lbnRyeS5qcycsXG4gICAgICAgIGxvYWRlcjogJ2pzJyxcbiAgICAgIH0sXG4gICAgICBhYnNXb3JraW5nRGlyOiB0ZXN0Um9vdCxcbiAgICAgIGJ1bmRsZTogdHJ1ZSxcbiAgICAgIGZvcm1hdDogJ2NqcycsXG4gICAgICBwbGF0Zm9ybTogJ25vZGUnLFxuICAgICAgd3JpdGU6IGZhbHNlLFxuICAgICAgdHJlZVNoYWtpbmc6IHRydWUsXG4gICAgICBsb2dMZXZlbDogJ3NpbGVudCcsXG4gICAgICBwbHVnaW5zOiBbXG4gICAgICAgIGNyZWF0ZVN3Y1BsdWdpbih7XG4gICAgICAgICAgbW9kZTogJ3dvcmtmbG93JyxcbiAgICAgICAgfSksXG4gICAgICBdLFxuICAgIH0pO1xuXG4gICAgZXhwZWN0KHJlc3VsdC5lcnJvcnMpLnRvSGF2ZUxlbmd0aCgwKTtcbiAgICBjb25zdCBvdXRwdXQgPSByZXN1bHQub3V0cHV0RmlsZXNbMF0udGV4dDtcbiAgICAvLyBXaXRob3V0IHNpZGVFZmZlY3RFbnRyaWVzLCBlc2J1aWxkIGRyb3BzIHRoZSBiYXJlIGltcG9ydFxuICAgIGV4cGVjdChvdXRwdXQpLm5vdC50b0NvbnRhaW4oJ19fcmVnaXN0ZXJlZCcpO1xuICB9KTtcblxuICBpdCgncHJvZHVjZXMgbm8gd2FybmluZ3MgZm9yIHNpZGVFZmZlY3RFbnRyaWVzIHBhY2thZ2VzJywgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IHNpZGVFZmZlY3RDb2RlID1cbiAgICAgICdnbG9iYWxUaGlzLl9fcmVnaXN0ZXJlZCA9IGdsb2JhbFRoaXMuX19yZWdpc3RlcmVkIHx8IFtdO1xcbmdsb2JhbFRoaXMuX19yZWdpc3RlcmVkLnB1c2goXCJ3YXJuZWQtcGtnXCIpOyc7XG4gICAgY29uc3QgZW50cnlQYXRoID0gY3JlYXRlU2lkZUVmZmVjdHNGYWxzZVBhY2thZ2UoXG4gICAgICAnbXktd2FybmVkLXBrZycsXG4gICAgICBzaWRlRWZmZWN0Q29kZVxuICAgICk7XG5cbiAgICBhcHBseVN3Y1RyYW5zZm9ybU1vY2subW9ja0ltcGxlbWVudGF0aW9uKFxuICAgICAgYXN5bmMgKF9maWxlbmFtZTogc3RyaW5nLCBzb3VyY2U6IHN0cmluZykgPT4gKHtcbiAgICAgICAgY29kZTogc291cmNlLFxuICAgICAgICB3b3JrZmxvd01hbmlmZXN0OiB7fSxcbiAgICAgIH0pXG4gICAgKTtcblxuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGVzYnVpbGQuYnVpbGQoe1xuICAgICAgc3RkaW46IHtcbiAgICAgICAgY29udGVudHM6IGBpbXBvcnQgJ215LXdhcm5lZC1wa2cnO2AsXG4gICAgICAgIHJlc29sdmVEaXI6IHRlc3RSb290LFxuICAgICAgICBzb3VyY2VmaWxlOiAndmlydHVhbC1lbnRyeS5qcycsXG4gICAgICAgIGxvYWRlcjogJ2pzJyxcbiAgICAgIH0sXG4gICAgICBhYnNXb3JraW5nRGlyOiB0ZXN0Um9vdCxcbiAgICAgIGJ1bmRsZTogdHJ1ZSxcbiAgICAgIGZvcm1hdDogJ2NqcycsXG4gICAgICBwbGF0Zm9ybTogJ25vZGUnLFxuICAgICAgd3JpdGU6IGZhbHNlLFxuICAgICAgdHJlZVNoYWtpbmc6IHRydWUsXG4gICAgICBwbHVnaW5zOiBbXG4gICAgICAgIGNyZWF0ZVN3Y1BsdWdpbih7XG4gICAgICAgICAgbW9kZTogJ3dvcmtmbG93JyxcbiAgICAgICAgICBzaWRlRWZmZWN0RW50cmllczogW2VudHJ5UGF0aF0sXG4gICAgICAgIH0pLFxuICAgICAgXSxcbiAgICB9KTtcblxuICAgIGV4cGVjdChyZXN1bHQuZXJyb3JzKS50b0hhdmVMZW5ndGgoMCk7XG4gICAgLy8gTm8gXCJpZ25vcmVkLWJhcmUtaW1wb3J0XCIgd2FybmluZ3Mgc2hvdWxkIGJlIHByb2R1Y2VkXG4gICAgY29uc3Qgc2lkZUVmZmVjdFdhcm5pbmdzID0gcmVzdWx0Lndhcm5pbmdzLmZpbHRlcihcbiAgICAgICh3KSA9PiB3LmlkID09PSAnaWdub3JlZC1iYXJlLWltcG9ydCdcbiAgICApO1xuICAgIGV4cGVjdChzaWRlRWZmZWN0V2FybmluZ3MpLnRvSGF2ZUxlbmd0aCgwKTtcbiAgfSk7XG5cbiAgaXQoJ3ByZXNlcnZlcyBiYXJlIGltcG9ydHMgd2l0aCBlbnRyaWVzVG9CdW5kbGUgYW5kIHNpZGVFZmZlY3RFbnRyaWVzIHRvZ2V0aGVyJywgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IHNpZGVFZmZlY3RDb2RlID1cbiAgICAgICdnbG9iYWxUaGlzLl9fcmVnaXN0ZXJlZCA9IGdsb2JhbFRoaXMuX19yZWdpc3RlcmVkIHx8IFtdO1xcbmdsb2JhbFRoaXMuX19yZWdpc3RlcmVkLnB1c2goXCJidW5kbGVkLXBrZ1wiKTsnO1xuICAgIGNvbnN0IGVudHJ5UGF0aCA9IGNyZWF0ZVNpZGVFZmZlY3RzRmFsc2VQYWNrYWdlKFxuICAgICAgJ215LWJ1bmRsZWQtcGtnJyxcbiAgICAgIHNpZGVFZmZlY3RDb2RlXG4gICAgKTtcblxuICAgIGFwcGx5U3djVHJhbnNmb3JtTW9jay5tb2NrSW1wbGVtZW50YXRpb24oXG4gICAgICBhc3luYyAoX2ZpbGVuYW1lOiBzdHJpbmcsIHNvdXJjZTogc3RyaW5nKSA9PiAoe1xuICAgICAgICBjb2RlOiBzb3VyY2UsXG4gICAgICAgIHdvcmtmbG93TWFuaWZlc3Q6IHt9LFxuICAgICAgfSlcbiAgICApO1xuXG4gICAgY29uc3Qgb3V0ZGlyID0gam9pbih0ZXN0Um9vdCwgJ291dCcpO1xuICAgIGNvbnN0IHN0ZXBGaWxlID0gam9pbih0ZXN0Um9vdCwgJ3NyYycsICdzdGVwLnRzJyk7XG4gICAgd3JpdGVGaWxlKFxuICAgICAgc3RlcEZpbGUsXG4gICAgICBgaW1wb3J0ICdteS1idW5kbGVkLXBrZyc7XFxuZXhwb3J0IGNvbnN0IFBPU1QgPSAoKSA9PiB7fTtgXG4gICAgKTtcblxuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGVzYnVpbGQuYnVpbGQoe1xuICAgICAgZW50cnlQb2ludHM6IFtzdGVwRmlsZV0sXG4gICAgICBhYnNXb3JraW5nRGlyOiB0ZXN0Um9vdCxcbiAgICAgIG91dGRpcixcbiAgICAgIGJ1bmRsZTogdHJ1ZSxcbiAgICAgIGZvcm1hdDogJ2VzbScsXG4gICAgICBwbGF0Zm9ybTogJ25vZGUnLFxuICAgICAgd3JpdGU6IGZhbHNlLFxuICAgICAgdHJlZVNoYWtpbmc6IHRydWUsXG4gICAgICBsb2dMZXZlbDogJ3NpbGVudCcsXG4gICAgICBwbHVnaW5zOiBbXG4gICAgICAgIGNyZWF0ZVN3Y1BsdWdpbih7XG4gICAgICAgICAgbW9kZTogJ3N0ZXAnLFxuICAgICAgICAgIGVudHJpZXNUb0J1bmRsZTogW3N0ZXBGaWxlLCBlbnRyeVBhdGhdLFxuICAgICAgICAgIG91dGRpcixcbiAgICAgICAgICBzaWRlRWZmZWN0RW50cmllczogW2VudHJ5UGF0aF0sXG4gICAgICAgIH0pLFxuICAgICAgXSxcbiAgICB9KTtcblxuICAgIGV4cGVjdChyZXN1bHQuZXJyb3JzKS50b0hhdmVMZW5ndGgoMCk7XG4gICAgY29uc3Qgb3V0cHV0ID0gcmVzdWx0Lm91dHB1dEZpbGVzWzBdLnRleHQ7XG4gICAgLy8gVGhlIHJlZ2lzdHJhdGlvbiBjb2RlIHNob3VsZCBiZSBidW5kbGVkIGluXG4gICAgZXhwZWN0KG91dHB1dCkudG9Db250YWluKCdfX3JlZ2lzdGVyZWQnKTtcbiAgfSk7XG5cbiAgaXQoJ3ByZXNlcnZlcyBiYXJlIGltcG9ydHMgZm9yIGxvY2FsIGZpbGVzIHdpdGggc2lkZUVmZmVjdHM6ZmFsc2UgaW4gdGhlaXIgcGFyZW50IHBhY2thZ2UuanNvbicsIGFzeW5jICgpID0+IHtcbiAgICAvLyBTaW11bGF0ZSBhIHdvcmtzcGFjZSBwYWNrYWdlIHdpdGggc2lkZUVmZmVjdHM6IGZhbHNlXG4gICAgY29uc3QgcGtnRGlyID0gam9pbih0ZXN0Um9vdCwgJ3BhY2thZ2VzJywgJ3NoYXJlZCcpO1xuICAgIHdyaXRlRmlsZShcbiAgICAgIGpvaW4ocGtnRGlyLCAncGFja2FnZS5qc29uJyksXG4gICAgICBKU09OLnN0cmluZ2lmeSh7XG4gICAgICAgIG5hbWU6ICdAbXlvcmcvc2hhcmVkJyxcbiAgICAgICAgdmVyc2lvbjogJzEuMC4wJyxcbiAgICAgICAgc2lkZUVmZmVjdHM6IGZhbHNlLFxuICAgICAgICBtYWluOiAnaW5kZXguanMnLFxuICAgICAgfSlcbiAgICApO1xuICAgIGNvbnN0IHNoYXJlZEVudHJ5ID0gam9pbihwa2dEaXIsICdpbmRleC5qcycpO1xuICAgIHdyaXRlRmlsZShzaGFyZWRFbnRyeSwgJ2dsb2JhbFRoaXMuX19zaGFyZWRSZWdpc3RlcmVkID0gdHJ1ZTsnKTtcblxuICAgIGFwcGx5U3djVHJhbnNmb3JtTW9jay5tb2NrSW1wbGVtZW50YXRpb24oXG4gICAgICBhc3luYyAoX2ZpbGVuYW1lOiBzdHJpbmcsIHNvdXJjZTogc3RyaW5nKSA9PiAoe1xuICAgICAgICBjb2RlOiBzb3VyY2UsXG4gICAgICAgIHdvcmtmbG93TWFuaWZlc3Q6IHt9LFxuICAgICAgfSlcbiAgICApO1xuXG4gICAgLy8gVXNlIGEgcmVsYXRpdmUgaW1wb3J0IHRvIHRoZSBsb2NhbCBmaWxlIChsaWtlIHRoZSB2aXJ0dWFsIGVudHJ5IGRvZXMgZm9yIGxvY2FsIGZpbGVzKVxuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGVzYnVpbGQuYnVpbGQoe1xuICAgICAgc3RkaW46IHtcbiAgICAgICAgY29udGVudHM6IGBpbXBvcnQgJy4vcGFja2FnZXMvc2hhcmVkL2luZGV4LmpzJztgLFxuICAgICAgICByZXNvbHZlRGlyOiB0ZXN0Um9vdCxcbiAgICAgICAgc291cmNlZmlsZTogJ3ZpcnR1YWwtZW50cnkuanMnLFxuICAgICAgICBsb2FkZXI6ICdqcycsXG4gICAgICB9LFxuICAgICAgYWJzV29ya2luZ0RpcjogdGVzdFJvb3QsXG4gICAgICBidW5kbGU6IHRydWUsXG4gICAgICBmb3JtYXQ6ICdjanMnLFxuICAgICAgcGxhdGZvcm06ICdub2RlJyxcbiAgICAgIHdyaXRlOiBmYWxzZSxcbiAgICAgIHRyZWVTaGFraW5nOiB0cnVlLFxuICAgICAgbG9nTGV2ZWw6ICdzaWxlbnQnLFxuICAgICAgcGx1Z2luczogW1xuICAgICAgICBjcmVhdGVTd2NQbHVnaW4oe1xuICAgICAgICAgIG1vZGU6ICd3b3JrZmxvdycsXG4gICAgICAgICAgc2lkZUVmZmVjdEVudHJpZXM6IFtzaGFyZWRFbnRyeV0sXG4gICAgICAgIH0pLFxuICAgICAgXSxcbiAgICB9KTtcblxuICAgIGV4cGVjdChyZXN1bHQuZXJyb3JzKS50b0hhdmVMZW5ndGgoMCk7XG4gICAgY29uc3Qgb3V0cHV0ID0gcmVzdWx0Lm91dHB1dEZpbGVzWzBdLnRleHQ7XG4gICAgZXhwZWN0KG91dHB1dCkudG9Db250YWluKCdfX3NoYXJlZFJlZ2lzdGVyZWQnKTtcbiAgfSk7XG5cbiAgaXQoJ2RvZXMgbm90IG92ZXJyaWRlIHNpZGVFZmZlY3RzIGZvciBub24tZW50cnkgbW9kdWxlcycsIGFzeW5jICgpID0+IHtcbiAgICAvLyBDcmVhdGUgdHdvIHBhY2thZ2VzIC0gb25lIGlzIGEgc2lkZS1lZmZlY3QgZW50cnksIG9uZSBpcyBub3RcbiAgICBjb25zdCBzaWRlRWZmZWN0Q29kZSA9ICdnbG9iYWxUaGlzLl9fZW50cnlSZWdpc3RlcmVkID0gdHJ1ZTsnO1xuICAgIGNvbnN0IGVudHJ5UGF0aCA9IGNyZWF0ZVNpZGVFZmZlY3RzRmFsc2VQYWNrYWdlKFxuICAgICAgJ2VudHJ5LXBrZycsXG4gICAgICBzaWRlRWZmZWN0Q29kZVxuICAgICk7XG5cbiAgICBjb25zdCBub25FbnRyeUNvZGUgPSAnZ2xvYmFsVGhpcy5fX25vbkVudHJ5UmVnaXN0ZXJlZCA9IHRydWU7JztcbiAgICBjcmVhdGVTaWRlRWZmZWN0c0ZhbHNlUGFja2FnZSgnbm9uLWVudHJ5LXBrZycsIG5vbkVudHJ5Q29kZSk7XG5cbiAgICBhcHBseVN3Y1RyYW5zZm9ybU1vY2subW9ja0ltcGxlbWVudGF0aW9uKFxuICAgICAgYXN5bmMgKF9maWxlbmFtZTogc3RyaW5nLCBzb3VyY2U6IHN0cmluZykgPT4gKHtcbiAgICAgICAgY29kZTogc291cmNlLFxuICAgICAgICB3b3JrZmxvd01hbmlmZXN0OiB7fSxcbiAgICAgIH0pXG4gICAgKTtcblxuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGVzYnVpbGQuYnVpbGQoe1xuICAgICAgc3RkaW46IHtcbiAgICAgICAgY29udGVudHM6IGBpbXBvcnQgJ2VudHJ5LXBrZyc7XFxuaW1wb3J0ICdub24tZW50cnktcGtnJztgLFxuICAgICAgICByZXNvbHZlRGlyOiB0ZXN0Um9vdCxcbiAgICAgICAgc291cmNlZmlsZTogJ3ZpcnR1YWwtZW50cnkuanMnLFxuICAgICAgICBsb2FkZXI6ICdqcycsXG4gICAgICB9LFxuICAgICAgYWJzV29ya2luZ0RpcjogdGVzdFJvb3QsXG4gICAgICBidW5kbGU6IHRydWUsXG4gICAgICBmb3JtYXQ6ICdjanMnLFxuICAgICAgcGxhdGZvcm06ICdub2RlJyxcbiAgICAgIHdyaXRlOiBmYWxzZSxcbiAgICAgIHRyZWVTaGFraW5nOiB0cnVlLFxuICAgICAgbG9nTGV2ZWw6ICdzaWxlbnQnLFxuICAgICAgcGx1Z2luczogW1xuICAgICAgICBjcmVhdGVTd2NQbHVnaW4oe1xuICAgICAgICAgIG1vZGU6ICd3b3JrZmxvdycsXG4gICAgICAgICAgLy8gT25seSBlbnRyeS1wa2cgaXMgbGlzdGVkLCBub24tZW50cnktcGtnIGlzIG5vdFxuICAgICAgICAgIHNpZGVFZmZlY3RFbnRyaWVzOiBbZW50cnlQYXRoXSxcbiAgICAgICAgfSksXG4gICAgICBdLFxuICAgIH0pO1xuXG4gICAgZXhwZWN0KHJlc3VsdC5lcnJvcnMpLnRvSGF2ZUxlbmd0aCgwKTtcbiAgICBjb25zdCBvdXRwdXQgPSByZXN1bHQub3V0cHV0RmlsZXNbMF0udGV4dDtcbiAgICAvLyBlbnRyeS1wa2cgc2hvdWxkIGJlIHByZXNlcnZlZFxuICAgIGV4cGVjdChvdXRwdXQpLnRvQ29udGFpbignX19lbnRyeVJlZ2lzdGVyZWQnKTtcbiAgICAvLyBub24tZW50cnktcGtnIHNob3VsZCBiZSBkcm9wcGVkIChzaWRlRWZmZWN0czogZmFsc2UgaXMgcmVzcGVjdGVkKVxuICAgIGV4cGVjdChvdXRwdXQpLm5vdC50b0NvbnRhaW4oJ19fbm9uRW50cnlSZWdpc3RlcmVkJyk7XG4gIH0pO1xufSk7XG5cbmRlc2NyaWJlKCdjcmVhdGVTd2NQbHVnaW4gcHJvamVjdFJvb3QnLCAoKSA9PiB7XG4gIGxldCB0ZXN0Um9vdDogc3RyaW5nO1xuXG4gIGJlZm9yZUVhY2goKCkgPT4ge1xuICAgIHRlc3RSb290ID0gbWtkdGVtcFN5bmMoam9pbihyZWFsVG1wZGlyLCAnd29ya2Zsb3ctc3djLXBsdWdpbi0nKSk7XG4gICAgYXBwbHlTd2NUcmFuc2Zvcm1Nb2NrLm1vY2tSZXNldCgpO1xuICAgIGFwcGx5U3djVHJhbnNmb3JtTW9jay5tb2NrSW1wbGVtZW50YXRpb24oXG4gICAgICBhc3luYyAoX2ZpbGVuYW1lOiBzdHJpbmcsIHNvdXJjZTogc3RyaW5nKSA9PiAoe1xuICAgICAgICBjb2RlOiBzb3VyY2UsXG4gICAgICAgIHdvcmtmbG93TWFuaWZlc3Q6IHt9LFxuICAgICAgfSlcbiAgICApO1xuICB9KTtcblxuICBhZnRlckVhY2goKCkgPT4ge1xuICAgIHJtU3luYyh0ZXN0Um9vdCwgeyByZWN1cnNpdmU6IHRydWUsIGZvcmNlOiB0cnVlIH0pO1xuICB9KTtcblxuICBmdW5jdGlvbiBzZXR1cEZpeHR1cmUoKSB7XG4gICAgY29uc3QgYXBwUm9vdCA9IGpvaW4odGVzdFJvb3QsICdhcHBzJywgJ2NoYXQnKTtcbiAgICBjb25zdCBwYWNrYWdlUm9vdCA9IGpvaW4odGVzdFJvb3QsICdwYWNrYWdlcycsICd2YWRlJyk7XG4gICAgY29uc3Qgd29ya2Zsb3dGaWxlID0gam9pbihcbiAgICAgIHBhY2thZ2VSb290LFxuICAgICAgJ3NyYycsXG4gICAgICAnaW50ZXJuYWwnLFxuICAgICAgJ21lc3NhZ2UnLFxuICAgICAgJ3dvcmtmbG93JyxcbiAgICAgICdoYW5kbGUtbWVzc2FnZS50cydcbiAgICApO1xuXG4gICAgd3JpdGVGaWxlKFxuICAgICAgd29ya2Zsb3dGaWxlLFxuICAgICAgYGV4cG9ydCBhc3luYyBmdW5jdGlvbiBoYW5kbGVNZXNzYWdlV29ya2Zsb3cobWVzc2FnZSkge1xuICBcInVzZSB3b3JrZmxvd1wiO1xuXG4gIHJldHVybiBtZXNzYWdlO1xufVxuYFxuICAgICk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgYXBwUm9vdCxcbiAgICAgIHBhY2thZ2VSb290LFxuICAgICAgd29ya2Zsb3dGaWxlLFxuICAgIH07XG4gIH1cblxuICBpdCgncGFzc2VzIHRoZSBleHBsaWNpdCBwcm9qZWN0Um9vdCB0aHJvdWdoIHRvIGFwcGx5U3djVHJhbnNmb3JtJywgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IGZpeHR1cmUgPSBzZXR1cEZpeHR1cmUoKTtcblxuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGVzYnVpbGQuYnVpbGQoe1xuICAgICAgZW50cnlQb2ludHM6IFtmaXh0dXJlLndvcmtmbG93RmlsZV0sXG4gICAgICBhYnNXb3JraW5nRGlyOiBmaXh0dXJlLnBhY2thZ2VSb290LFxuICAgICAgYnVuZGxlOiB0cnVlLFxuICAgICAgZm9ybWF0OiAnZXNtJyxcbiAgICAgIHBsYXRmb3JtOiAnbm9kZScsXG4gICAgICB3cml0ZTogZmFsc2UsXG4gICAgICBwbHVnaW5zOiBbXG4gICAgICAgIGNyZWF0ZVN3Y1BsdWdpbih7XG4gICAgICAgICAgbW9kZTogJ3dvcmtmbG93JyxcbiAgICAgICAgICBwcm9qZWN0Um9vdDogZml4dHVyZS5hcHBSb290LFxuICAgICAgICAgIHdvcmtmbG93TWFuaWZlc3Q6IHt9LFxuICAgICAgICB9KSxcbiAgICAgIF0sXG4gICAgfSk7XG5cbiAgICBleHBlY3QocmVzdWx0LmVycm9ycykudG9IYXZlTGVuZ3RoKDApO1xuICAgIGV4cGVjdChhcHBseVN3Y1RyYW5zZm9ybU1vY2spLnRvSGF2ZUJlZW5DYWxsZWRXaXRoKFxuICAgICAgJ3NyYy9pbnRlcm5hbC9tZXNzYWdlL3dvcmtmbG93L2hhbmRsZS1tZXNzYWdlLnRzJyxcbiAgICAgIGV4cGVjdC5zdHJpbmdDb250YWluaW5nKCdcInVzZSB3b3JrZmxvd1wiJyksXG4gICAgICAnd29ya2Zsb3cnLFxuICAgICAgZml4dHVyZS53b3JrZmxvd0ZpbGUsXG4gICAgICBmaXh0dXJlLmFwcFJvb3QsXG4gICAgICBmaXh0dXJlLmFwcFJvb3RcbiAgICApO1xuICB9KTtcblxuICBpdCgncGFzc2VzIGFuIGV4cGxpY2l0IG1vZHVsZVNwZWNpZmllclJvb3Qgc2VwYXJhdGVseSBmcm9tIHByb2plY3RSb290JywgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IGZpeHR1cmUgPSBzZXR1cEZpeHR1cmUoKTtcbiAgICBjb25zdCB0cmFjaW5nUm9vdCA9IHRlc3RSb290O1xuXG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgZXNidWlsZC5idWlsZCh7XG4gICAgICBlbnRyeVBvaW50czogW2ZpeHR1cmUud29ya2Zsb3dGaWxlXSxcbiAgICAgIGFic1dvcmtpbmdEaXI6IGZpeHR1cmUucGFja2FnZVJvb3QsXG4gICAgICBidW5kbGU6IHRydWUsXG4gICAgICBmb3JtYXQ6ICdlc20nLFxuICAgICAgcGxhdGZvcm06ICdub2RlJyxcbiAgICAgIHdyaXRlOiBmYWxzZSxcbiAgICAgIHBsdWdpbnM6IFtcbiAgICAgICAgY3JlYXRlU3djUGx1Z2luKHtcbiAgICAgICAgICBtb2RlOiAnd29ya2Zsb3cnLFxuICAgICAgICAgIHByb2plY3RSb290OiB0cmFjaW5nUm9vdCxcbiAgICAgICAgICBtb2R1bGVTcGVjaWZpZXJSb290OiBmaXh0dXJlLmFwcFJvb3QsXG4gICAgICAgICAgd29ya2Zsb3dNYW5pZmVzdDoge30sXG4gICAgICAgIH0pLFxuICAgICAgXSxcbiAgICB9KTtcblxuICAgIGV4cGVjdChyZXN1bHQuZXJyb3JzKS50b0hhdmVMZW5ndGgoMCk7XG4gICAgZXhwZWN0KGFwcGx5U3djVHJhbnNmb3JtTW9jaykudG9IYXZlQmVlbkNhbGxlZFdpdGgoXG4gICAgICAnc3JjL2ludGVybmFsL21lc3NhZ2Uvd29ya2Zsb3cvaGFuZGxlLW1lc3NhZ2UudHMnLFxuICAgICAgZXhwZWN0LnN0cmluZ0NvbnRhaW5pbmcoJ1widXNlIHdvcmtmbG93XCInKSxcbiAgICAgICd3b3JrZmxvdycsXG4gICAgICBmaXh0dXJlLndvcmtmbG93RmlsZSxcbiAgICAgIHRyYWNpbmdSb290LFxuICAgICAgZml4dHVyZS5hcHBSb290XG4gICAgKTtcbiAgfSk7XG5cbiAgaXQoJ2RlZmF1bHRzIHRoZSB0cmFuc2Zvcm0gcHJvamVjdFJvb3QgdG8gYWJzV29ya2luZ0RpcicsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBmaXh0dXJlID0gc2V0dXBGaXh0dXJlKCk7XG5cbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBlc2J1aWxkLmJ1aWxkKHtcbiAgICAgIGVudHJ5UG9pbnRzOiBbZml4dHVyZS53b3JrZmxvd0ZpbGVdLFxuICAgICAgYWJzV29ya2luZ0RpcjogZml4dHVyZS5wYWNrYWdlUm9vdCxcbiAgICAgIGJ1bmRsZTogdHJ1ZSxcbiAgICAgIGZvcm1hdDogJ2VzbScsXG4gICAgICBwbGF0Zm9ybTogJ25vZGUnLFxuICAgICAgd3JpdGU6IGZhbHNlLFxuICAgICAgcGx1Z2luczogW1xuICAgICAgICBjcmVhdGVTd2NQbHVnaW4oe1xuICAgICAgICAgIG1vZGU6ICd3b3JrZmxvdycsXG4gICAgICAgICAgd29ya2Zsb3dNYW5pZmVzdDoge30sXG4gICAgICAgIH0pLFxuICAgICAgXSxcbiAgICB9KTtcblxuICAgIGV4cGVjdChyZXN1bHQuZXJyb3JzKS50b0hhdmVMZW5ndGgoMCk7XG4gICAgZXhwZWN0KGFwcGx5U3djVHJhbnNmb3JtTW9jaykudG9IYXZlQmVlbkNhbGxlZFdpdGgoXG4gICAgICAnc3JjL2ludGVybmFsL21lc3NhZ2Uvd29ya2Zsb3cvaGFuZGxlLW1lc3NhZ2UudHMnLFxuICAgICAgZXhwZWN0LnN0cmluZ0NvbnRhaW5pbmcoJ1widXNlIHdvcmtmbG93XCInKSxcbiAgICAgICd3b3JrZmxvdycsXG4gICAgICBmaXh0dXJlLndvcmtmbG93RmlsZSxcbiAgICAgIGZpeHR1cmUucGFja2FnZVJvb3QsXG4gICAgICBmaXh0dXJlLnBhY2thZ2VSb290XG4gICAgKTtcbiAgfSk7XG59KTtcbiJdfQ==
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=workflow-bundle-boundary.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workflow-bundle-boundary.test.d.ts","sourceRoot":"","sources":["../src/workflow-bundle-boundary.test.ts"],"names":[],"mappings":""}