@hestia-earth/ui-components 0.16.0 → 0.16.2

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.
@@ -12,7 +12,7 @@ export const parseDataPath = (dataPath = '') => {
12
12
  return paths.map(path => ({ path, label: keyToLabel(path.replace(/\[\d+\]/g, '')) }));
13
13
  };
14
14
  const glossaryTypeLink = (type, text = termTypeLabel(type)) => externalLink(`${baseUrl()}/glossary?termType=${type}`, text);
15
- const termLink = ({ id, name }) => externalLink(`${baseUrl()}/term/${id}`, name);
15
+ const termLink = ({ id, name }) => externalLink(`${baseUrl()}/term/${id}`, name || id);
16
16
  const dateFormatMessage = `should follow the ISO 8601 date format, e.g. ${code(2000)}, or ${code('2000-12')}, or ${code('2000-12-30')}`;
17
17
  const modelLink = (term, model) => `
18
18
  <a href="${pathToApiDocsPath(model['@id'], term['@id'])}" target="_blank">
@@ -56,15 +56,17 @@ const customErrorMessage = {
56
56
  'should match pattern "^[0-9]{4}(-[0-9]{2})?(-[0-9]{2})?$"': () => dateFormatMessage,
57
57
  'should match pattern "^([0-9]{4}|-)(-[0-9]{2})?(-[0-9]{2})?$"': () => dateFormatMessage,
58
58
  'should match pattern "^([0-9]{4}|-)(-[0-9]{2})?(-[0-9]{2})?([T][0-2][0-9]\:[0-5][0-9]\:[0-5][0-9]((\+|\-)[0-1][0-9]:[0-5][0-9])?)?$"': () => dateFormatMessage,
59
- 'should be linked to an existing node': ({ params }) => `Your submission does not contain the ${params?.node?.type} with ${code(`id=${params?.node?.id}`)}.
59
+ 'should be linked to an existing node': ({ params }) => `Your upload does not contain the ${params?.node?.type} with ${code(`id=${params?.node?.id}`)}.
60
60
  If you are trying to link to an existing ${params?.node?.type} on the Hestia platform, you must use ${code(`@id=${params?.node?.id}`)} instead.
61
61
  Otherwise you must include a full ${params?.node?.type} with id ${code(params?.node?.id)}.`,
62
62
  'must be within the country': () => `The country provided does not contain the region provided. Please check
63
63
  the country for errors or the region for errors, and reference the ${glossaryLink('Glossary of Terms')}.`,
64
- [mapErrorMessage]: ({ dataPath }) => dataPath === '.region' ? `The region provided does not contain the longitude and latitude provided. Please check the
65
- longitude and latitude for errors or the region for error, and reference the ${glossaryLink('Glossary of Terms')}.` :
66
- `The country provided does not contain the longitude and latitude provided. Please check the longitude and latitude
67
- for errors or the country for errors, and reference the ${glossaryLink('Glossary of Terms')}.`,
64
+ [mapErrorMessage]: ({ dataPath, params }, errorCount) => errorCount === 1
65
+ ? `The longitude and latitude provided are${params?.distance ? ` ${params?.distance}kms` : ''} outside of the ${dataPath.substring(1)} provided.
66
+ Please check the longitude and latitude for errors or check if the wrong ${dataPath.substring(1)} from the ${glossaryTypeLink(TermTermType.region, 'Glossary')} was used.
67
+ ${params?.expected ? `Hint: the coordinates appear to be located in the following ${dataPath.substring(1)}: ${termLink({ id: 'params.expected' })}` : ''}`
68
+ : `The region provided does not contain the longitude and latitude provided.
69
+ Please check the longitude and latitude for errors or the region for error, and reference the ${glossaryTypeLink(TermTermType.region, 'Glossary of Terms')}.`,
68
70
  'sum not equal to 100% for sandContent, siltContent, clayContent': () => `The sum of Sand, Silt, and Clay content should equal 100% for each soil depth interval.`,
69
71
  'is outside the allowed range': ({ params }, errorCount) => `${errorCount === 1
70
72
  ? params?.term
@@ -257,8 +259,15 @@ const customErrorMessage = {
257
259
  However, there are no Inputs representing the forage intake by animals in the Cycle (Inputs with terms which contain the words "fresh forage" and a ${code('value')}).
258
260
  Either, set completeness to ${(code(false))} for ${code('animalFeed')}, make sure all "fresh forage" Inputs have a ${code('value')}, or add one or more Inputs representing the forage intake.`,
259
261
  'must specify is it an animal feed': () => `This Cycle is an animal production Cycle and this Input could be an animal feed or could be for another use.
260
- Please specify the ${schemaLink('Input#isAnimalFeed', 'isAnimalFeed')} field on this Input.
261
- Knowing the fate is essential to distinguish Inputs between those which are fed to animals and those which are used for other purposes.`
262
+ Please specify the ${schemaLink('Input#isAnimalFeed', 'isAnimalFeed')} field on this Input.
263
+ Knowing the fate is essential to distinguish Inputs between those which are fed to animals and those which are used for other purposes.`,
264
+ 'should specify a treatment when experimentDesign is specified': () => `You have specified that this Source uses an experimental design, but have not specified the treatment for this Cycle.
265
+ Adding the treatment provides important meta-data and will enable greater re-use of these data.
266
+ Add the ${schemaLink('Cycle#treatment', 'treatment')} field to the Cycle.
267
+ Note that the field ${schemaLink('Cycle#commercialPracticeTreatment', 'commercialPracticeTreatment')} becomes required if treatment is specified.`,
268
+ 'should not specify both liveAnimal and animalProduct': () => `You have added both a ${glossaryTypeLink(TermTermType.liveAnimal)} and ${glossaryTypeLink(TermTermType.animalProduct)} term as Products.
269
+ If these terms refer to the same animals, this will lead to double counting:
270
+ instead use a Property on the ${glossaryTypeLink(TermTermType.liveAnimal)} term to define the quantity of liveweight per head, carcass weight per head, etc.`
262
271
  };
263
272
  export const formatCustomErrorMessage = (message, error, allErrors = []) => {
264
273
  const formattedMessage = message && message in customErrorMessage ?
@@ -283,4 +292,4 @@ export const filterError = (error) => [
283
292
  isFailingKeywordError
284
293
  ].every(func => !func(error));
285
294
  export const missingNodeErrors = (errors) => errors.filter(({ keyword, params }) => keyword === 'required' && (params?.missingProperty === '@type' || params?.missingProperty === '@id'));
286
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsZXMtZXJyb3IubW9kZWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvZmlsZXMvZmlsZXMtZXJyb3IubW9kZWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsK0JBQStCO0FBQy9CLDRCQUE0QjtBQUM1QixPQUFPLEVBQUUsVUFBVSxFQUFFLFlBQVksRUFBUSxZQUFZLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNwRixPQUFPLEVBQUUsV0FBVyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUV0RSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDckQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDN0QsT0FBTyxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsYUFBYSxFQUFFLFlBQVksRUFBRSxZQUFZLEVBQUUsVUFBVSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDdkcsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBNkJoRCxNQUFNLGVBQWUsR0FBRyx5Q0FBeUMsQ0FBQztBQUVsRSxNQUFNLENBQUMsTUFBTSxhQUFhLEdBQUcsQ0FBQyxRQUFRLEdBQUcsRUFBRSxFQUFFLEVBQUU7SUFDN0MsTUFBTSxDQUFDLENBQUMsRUFBRSxHQUFHLEtBQUssQ0FBQyxHQUFHLFFBQVEsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDMUMsT0FBTyxLQUFLLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsVUFBVSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsVUFBVSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDeEYsQ0FBQyxDQUFDO0FBRUYsTUFBTSxnQkFBZ0IsR0FBRyxDQUFDLElBQWtCLEVBQUUsSUFB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QUFDLENBQUM7QUFFakUsTUFBTSxxQkFBcUIsR0FBRyxDQUFDLEVBQUUsTUFBTSxFQUFvQixFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsTUFBTSxJQUFJLGdCQUFnQixJQUFJLE1BQU0sQ0FBQztBQUV2RyxNQUFNLENBQUMsTUFBTSxXQUFXLEdBQUcsQ0FBQyxLQUF1QixFQUFFLEVBQUUsQ0FBQztJQUN0RCxxQkFBcUI7Q0FDdEIsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO0FBRTlCLE1BQU0sQ0FBQyxNQUFNLGlCQUFpQixHQUFHLENBQUMsTUFBMEIsRUFBRSxFQUFFLENBQzlELE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsRUFBRSxFQUFFLENBQ3BDLE9BQU8sS0FBSyxVQUFVLElBQUksQ0FBQyxNQUFNLEVBQUUsZUFBZSxLQUFLLE9BQU8sSUFBSSxNQUFNLEVBQUUsZUFBZSxLQUFLLEtBQUssQ0FBQyxDQUNyRyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgY29tcGxleGl0eSAqL1xuLyogZXNsaW50LWRpc2FibGUgbWF4LWxlbiAqL1xuaW1wb3J0IHsgU2NoZW1hVHlwZSwgU2l0ZVNpdGVUeXBlLCBUZXJtLCBUZXJtVGVybVR5cGUgfSBmcm9tICdAaGVzdGlhLWVhcnRoL3NjaGVtYSc7XG5pbXBvcnQgeyB0b1ByZWNpc2lvbiwga2V5VG9MYWJlbCwgdW5pcXVlIH0gZnJvbSAnQGhlc3RpYS1lYXJ0aC91dGlscyc7XG5cbmltcG9ydCB7IHRlcm1UeXBlTGFiZWwgfSBmcm9tICcuLi90ZXJtcy90ZXJtcy5tb2RlbCc7XG5pbXBvcnQgeyBwYXRoVG9BcGlEb2NzUGF0aCB9IGZyb20gJy4uL2VuZ2luZS9lbmdpbmUuc2VydmljZSc7XG5pbXBvcnQgeyBiYXNlVXJsLCBjb2RlLCBjb250YWN0VXNMaW5rLCBleHRlcm5hbExpbmssIGdsb3NzYXJ5TGluaywgc2NoZW1hTGluayB9IGZyb20gJy4uL2NvbW1vbi91dGlscyc7XG5pbXBvcnQgeyBwbHVyYWxpemUgfSBmcm9tICcuLi9jb21tb24vcGx1cmFsaXplJztcblxuLy8gVE9ETzogYWRkIG1vcmUgdmFsaWRhdGlvbiBrZXl3b3JkIGFuZCBwYXJhbXNcbmV4cG9ydCB0eXBlIHZhbGlkYXRpb25FcnJvckxldmVsID0gJ2Vycm9yJyB8ICd3YXJuaW5nJztcbmV4cG9ydCB0eXBlIHZhbGlkYXRpb25FcnJvclBhcmFtID0gJ21pc3NpbmdQcm9wZXJ0eScgfCAndHlwZScgfCAndGVybScgfCAnbW9kZWwnIHwgJ3Byb2R1Y3QnIHwgJ3JhbmdlJyB8ICdub2RlJyB8XG4gICdhbGxvd2VkVmFsdWVzJyB8ICdhbGxvd2VkVmFsdWUnIHwgJ2FkZGl0aW9uYWxQcm9wZXJ0eScgfCAnZXhwZWN0ZWQnIHwgJ2RlZmF1bHQnIHwgJ2N1cnJlbnQnIHwgJ3BlcmNlbnRhZ2UnIHwgJ2tleXMnIHxcbiAgJ3RocmVzaG9sZCcgfCAnb3V0bGllcnMnIHwgJ2NvdW50cnknIHwgJ21pbicgfCAnbWF4JyB8ICdkZWZhdWx0U291cmNlJyB8ICdncm91cCcgfCAnbWVzc2FnZSc7XG5leHBvcnQgdHlwZSB2YWxpZGF0aW9uRXJyb3JLZXl3b3JkID0gJ3JlcXVpcmVkJyB8ICd0eXBlJyB8ICdpZicgfCAndGhlbic7XG5cbmV4cG9ydCBpbnRlcmZhY2UgSVZhbGlkYXRpb25FcnJvciB7XG4gIGluZGV4PzogbnVtYmVyO1xuICBub2RlSW5kZXg/OiBudW1iZXI7XG4gIGxldmVsPzogdmFsaWRhdGlvbkVycm9yTGV2ZWw7XG4gIGRhdGFQYXRoPzogc3RyaW5nO1xuICBzY2hlbWFQYXRoPzogc3RyaW5nO1xuICBrZXl3b3JkPzogdmFsaWRhdGlvbkVycm9yS2V5d29yZDtcbiAgbWVzc2FnZTogc3RyaW5nO1xuICBwYXJhbXM/OiB7IFtrZXkgaW4gdmFsaWRhdGlvbkVycm9yUGFyYW1dPzogYW55IH07XG4gIG1hcEVycm9yPzogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJVmFsaWRhdGlvbkVycm9yV2l0aEluZGV4IHtcbiAgZXJyb3I6IElWYWxpZGF0aW9uRXJyb3JbXTtcbiAgaW5kZXg6IG51bWJlcjtcbiAgY2hhbmdlZD86IGJvb2xlYW47XG59XG5cbnR5cGUgaGFuZGxlRXJyb3JGdW5jID0gKGVycm9yOiBJVmFsaWRhdGlvbkVycm9yLCBlcnJvckNvdW50PzogbnVtYmVyLCBhbGxFcnJvcnM/OiBJVmFsaWRhdGlvbkVycm9yW10pID0+IHN0cmluZztcblxuY29uc3QgbWFwRXJyb3JNZXNzYWdlID0gJ2RvZXMgbm90IGNvbnRhaW4gbGF0aXR1ZGUgYW5kIGxvbmdpdHVkZSc7XG5cbmV4cG9ydCBjb25zdCBwYXJzZURhdGFQYXRoID0gKGRhdGFQYXRoID0gJycpID0+IHtcbiAgY29uc3QgW18sIC4uLnBhdGhzXSA9IGRhdGFQYXRoLnNwbGl0KCcuJyk7XG4gIHJldHVybiBwYXRocy5tYXAocGF0aCA9PiAoeyBwYXRoLCBsYWJlbDoga2V5VG9MYWJlbChwYXRoLnJlcGxhY2UoL1xcW1xcZCtcXF0vZywgJycpKSB9KSk7XG59O1xuXG5jb25zdCBnbG9zc2FyeVR5cGVMaW5rID0gKHR5cGU6IFRlcm1UZXJtVHlwZSwgdGV4dCA9IHRlcm1UeXBlTGFiZWwodHlwZSkpID0+IGV4dGVybmFsTGluayhgJHtiYXNlVXJsKCl9L2dsb3NzYXJ5P3Rlcm1UeXBlPSR7dHlwZX1gLCB0ZXh0KTtcbmNvbnN0IHRlcm1MaW5rID0gKHsgaWQsIG5hbWUgfTogUGFydGlhbDxUZXJtPikgPT4gZXh0ZXJuYWxMaW5rKGAke2Jhc2VVcmwoKX0vdGVybS8ke2lkfWAsIG5hbWUhKTtcbmNvbnN0IGRhdGVGb3JtYXRNZXNzYWdlID1cbiAgYHNob3VsZCBmb2xsb3cgdGhlIElTTyA4NjAxIGRhdGUgZm9ybWF0LCBlLmcuICR7Y29kZSgyMDAwKX0sIG9yICR7Y29kZSgnMjAwMC0xMicpfSwgb3IgJHtjb2RlKCcyMDAwLTEyLTMwJyl9YDtcbmNvbnN0IG1vZGVsTGluayA9ICh0ZXJtOiBUZXJtLCBtb2RlbDogVGVybSkgPT4gYFxuICA8YSBocmVmPVwiJHtwYXRoVG9BcGlEb2NzUGF0aChtb2RlbFsnQGlkJ10sIHRlcm1bJ0BpZCddKX1cIiB0YXJnZXQ9XCJfYmxhbmtcIj5cbiAgICA8c3BhbiBjbGFzcz1cInByLTFcIj4ke21vZGVsLm5hbWV9PC9zcGFuPlxuICAgIDxzcGFuPihWaWV3IERvY3MpPC9zcGFuPlxuICA8L2E+XG5gO1xuY29uc3QgdGhyZXNob2xkID0gKHZhbHVlOiBudW1iZXIpID0+IGNvZGUoYCR7dmFsdWUgKiAxMDB9JWApO1xuXG5jb25zdCBub1RpbGxhZ2U6IFBhcnRpYWw8VGVybT4gPSB7IGlkOiAnbm9UaWxsYWdlJywgbmFtZTogJ05vIHRpbGxhZ2UnIH07XG5jb25zdCBwYXN0dXJlR3Jhc3M6IFBhcnRpYWw8VGVybT4gPSB7IGlkOiAncGFzdHVyZUdyYXNzJywgbmFtZTogJ1Bhc3R1cmUgZ3Jhc3MnIH07XG5cbmNvbnN0IGlkTm90Rm91bmREZWZhdWx0TWVzc2FnZSA9IGBcbiAgSWYgeW91IGFyZSB1c2luZyB0aGUgJHtjb2RlKCduYW1lJyl9IG9mIHRoZSBUZXJtLCBtYWtlIHN1cmUgdG8gdXNlICR7Y29kZSgndGVybS5uYW1lJyl9IGNvbHVtbjtcbiAgaWYgeW91IGFyZSB1c2luZyB0aGUgJHtjb2RlKCdAaWQnKX0gb2YgdGhlIFRlcm0sIHVzZSB0aGUgJHtjb2RlKCd0ZXJtLkBpZCcpfSBjb2x1bW4gaW5zdGVhZC5cbmAudHJpbSgpO1xuXG5leHBvcnQgY29uc3QgaXNNaWdyYXRpb25FcnJvciA9ICh7IHBhcmFtcyB9OiBJVmFsaWRhdGlvbkVycm9yKSA9PiBwYXJhbXM/LmN1cnJlbnQgJiYgKCdleHBlY3RlZCcgaW4gcGFyYW1zKTtcblxuZXhwb3J0IGNvbnN0IG1pZ3JhdGlvbkVycm9yTWVzc2FnZSA9ICh7IHBhcmFtcyB9OiBJVmFsaWRhdGlvbkVycm9yKSA9PlxuICBwYXJhbXM/LmV4cGVjdGVkXG4gICAgPyBgVGhlIFRlcm0gJHtjb2RlKHBhcmFtcy5jdXJyZW50KX0gd2FzIHVwZGF0ZWQsIHBsZWFzZSB1c2UgdGhpcyBUZXJtIGluc3RlYWQ6ICR7Y29kZShwYXJhbXMuZXhwZWN0ZWQpfS5gXG4gICAgOiBgVGhlIFRlcm0gJHtjb2RlKHBhcmFtcy5jdXJyZW50KX0gd2FzIGRlbGV0ZWQuIFBsZWFzZSBzZWFyY2ggdGhlICR7Z2xvc3NhcnlMaW5rKCdHbG9zc2FyeScpfSBmb3IgYSBuZXcgVGVybS5gO1xuXG5jb25zdCBpZE5vdEZvdW5kRXJyb3I6IGhhbmRsZUVycm9yRnVuYyA9IChfZXJyb3IsIF9lcnJvckNvdW50LCBhbGxFcnJvcnMpID0+IHtcbiAgY29uc3QgbWlncmF0aW9uRXJyb3JzID0gYWxsRXJyb3JzLmZpbHRlcihpc01pZ3JhdGlvbkVycm9yKTtcbiAgY29uc3Qgbm9NaWdyYXRpb25FcnJvcnMgPSBhbGxFcnJvcnMuZmlsdGVyKGVycm9yID0+ICFpc01pZ3JhdGlvbkVycm9yKGVycm9yKSk7XG4gIHJldHVybiBgXG4gICAgPHA+RG9lcyBub3QgZXhpc3QgaW4gSGVzdGlhLjwvcD5cbiAgICAke25vTWlncmF0aW9uRXJyb3JzLmxlbmd0aCA/IGA8cD4ke2lkTm90Rm91bmREZWZhdWx0TWVzc2FnZX08L3A+YCA6ICcnfVxuICAgICR7dW5pcXVlKG1pZ3JhdGlvbkVycm9ycy5tYXAobWlncmF0aW9uRXJyb3JNZXNzYWdlKSkuam9pbignPC9icj4nKX1cbiAgYDtcbn07XG5cbi8vIHNldCBtZXNzYWdlIGFzIGVtcHR5IHRvIG5vdCBkaXNwbGF5IGl0XG5jb25zdCBjdXN0b21FcnJvck1lc3NhZ2U6IHtcbiAgW2tleTogc3RyaW5nXTogaGFuZGxlRXJyb3JGdW5jO1xufSA9IHtcbiAgJ3Nob3VsZCBoYXZlIHJlcXVpcmVkIHByb3BlcnR5IFxcJ0BpZFxcJyc6IGlkTm90Rm91bmRFcnJvcixcbiAgJ3Nob3VsZCBoYXZlIHJlcXVpcmVkIHByb3BlcnR5IFxcJ0B0eXBlXFwnJzogKCkgPT4gJycsXG4gICdzaG91bGQgaGF2ZSByZXF1aXJlZCBwcm9wZXJ0eSBcXCdpZFxcJyc6IGlkTm90Rm91bmRFcnJvcixcbiAgJ3Nob3VsZCBtYXRjaCBleGFjdGx5IG9uZSBzY2hlbWEgaW4gb25lT2YnOiAoKSA9PiAnJyxcbiAgJ3Nob3VsZCBtYXRjaCBzb21lIHNjaGVtYSBpbiBhbnlPZic6ICgpID0+ICcnLFxuICAnc2hvdWxkIG1hdGNoIFwidGhlblwiIHNjaGVtYSc6ICgpID0+ICcnLFxuICAnc2hvdWxkIE5PVCBoYXZlIGFkZGl0aW9uYWwgcHJvcGVydGllcyc6ICh7IHBhcmFtcyB9LCBlcnJvckNvdW50KSA9PlxuICAgIGVycm9yQ291bnQgPT09IDEgP1xuICAgICAgYFRoZSBmb2xsb3dpbmcgZmllbGQgZG9lcyBub3QgZXhpc3Q6ICR7cGFyYW1zPy5hZGRpdGlvbmFsUHJvcGVydHl9IG9yIGlzIG5vdCBhbGxvd2VkIGluIHRoaXMgY2FzZS5gIDpcbiAgICAgIGBTaG91bGQgbm90IGhhdmUgYWRkaXRpb25hbCBwcm9wZXJ0aWVzLmAsXG4gICdzaG91bGQgTk9UIGJlIHZhbGlkJzogKCkgPT4gJ1Nob3VsZCBub3QgYmUgdXNlZCBpbiB0aGlzIGNhc2UuJyxcbiAgJ3Nob3VsZCBtYXRjaCBwYXR0ZXJuIFwiXlxcXFxkezEzfSRcIic6ICgpID0+IGBzaG91bGQgYmUgY29tcG9zZWQgb2YgMTMgbnVtYmVyc2AsXG4gICdzaG91bGQgbWF0Y2ggcGF0dGVybiBcIl5bMC05XXs0fSgtWzAtOV17Mn0pPygtWzAtOV17Mn0pPyRcIic6ICgpID0+IGRhdGVGb3JtYXRNZXNzYWdlLFxuICAnc2hvdWxkIG1hdGNoIHBhdHRlcm4gXCJeKFswLTldezR9fC0pKC1bMC05XXsyfSk/KC1bMC05XXsyfSk/JFwiJzogKCkgPT4gZGF0ZUZvcm1hdE1lc3NhZ2UsXG4gICdzaG91bGQgbWF0Y2ggcGF0dGVybiBcIl4oWzAtOV17NH18LSkoLVswLTldezJ9KT8oLVswLTldezJ9KT8oW1RdWzAtMl1bMC05XVxcOlswLTVdWzAtOV1cXDpbMC01XVswLTldKChcXCt8XFwtKVswLTFdWzAtOV06WzAtNV1bMC05XSk/KT8kXCInOiAoKSA9PiBkYXRlRm9ybWF0TWVzc2FnZSxcbiAgJ3Nob3VsZCBiZSBsaW5rZWQgdG8gYW4gZXhpc3Rpbmcgbm9kZSc6ICh7IHBhcmFtcyB9KSA9PlxuICAgIGBZb3VyIHN1Ym1pc3Npb24gZG9lcyBub3QgY29udGFpbiB0aGUgJHtwYXJhbXM/Lm5vZGU/LnR5cGV9IHdpdGggJHtjb2RlKGBpZD0ke3BhcmFtcz8ubm9kZT8uaWR9YCl9LlxuICAgIElmIHlvdSBhcmUgdHJ5aW5nIHRvIGxpbmsgdG8gYW4gZXhpc3RpbmcgJHtwYXJhbXM/Lm5vZGU/LnR5cGV9IG9uIHRoZSBIZXN0aWEgcGxhdGZvcm0sIHlvdSBtdXN0IHVzZSAke2NvZGUoYEBpZD0ke3BhcmFtcz8ubm9kZT8uaWR9YCl9IGluc3RlYWQuXG4gICAgT3RoZXJ3aXNlIHlvdSBtdXN0IGluY2x1ZGUgYSBmdWxsICR7cGFyYW1zPy5ub2RlPy50eXBlfSB3aXRoIGlkICR7Y29kZShwYXJhbXM/Lm5vZGU/LmlkKX0uYCxcbiAgJ211c3QgYmUgd2l0aGluIHRoZSBjb3VudHJ5JzogKCkgPT4gYFRoZSBjb3VudHJ5IHByb3ZpZGVkIGRvZXMgbm90IGNvbnRhaW4gdGhlIHJlZ2lvbiBwcm92aWRlZC4gUGxlYXNlIGNoZWNrXG4gIHRoZSBjb3VudHJ5IGZvciBlcnJvcnMgb3IgdGhlIHJlZ2lvbiBmb3IgZXJyb3JzLCBhbmQgcmVmZXJlbmNlIHRoZSAke2dsb3NzYXJ5TGluaygnR2xvc3Nhcnkgb2YgVGVybXMnKX0uYCxcbiAgW21hcEVycm9yTWVzc2FnZV06ICh7IGRhdGFQYXRoIH0pID0+XG4gICAgZGF0YVBhdGggPT09ICcucmVnaW9uJyA/IGBUaGUgcmVnaW9uIHByb3ZpZGVkIGRvZXMgbm90IGNvbnRhaW4gdGhlIGxvbmdpdHVkZSBhbmQgbGF0aXR1ZGUgcHJvdmlkZWQuIFBsZWFzZSBjaGVjayB0aGVcbiAgbG9uZ2l0dWRlIGFuZCBsYXRpdHVkZSBmb3IgZXJyb3JzIG9yIHRoZSByZWdpb24gZm9yIGVycm9yLCBhbmQgcmVmZXJlbmNlIHRoZSAke2dsb3NzYXJ5TGluaygnR2xvc3Nhcnkgb2YgVGVybXMnKX0uYCA6XG4gICAgYFRoZSBjb3VudHJ5IHByb3ZpZGVkIGRvZXMgbm90IGNvbnRhaW4gdGhlIGxvbmdpdHVkZSBhbmQgbGF0aXR1ZGUgcHJvdmlkZWQuIFBsZWFzZSBjaGVjayB0aGUgbG9uZ2l0dWRlIGFuZCBsYXRpdHVkZVxuICBmb3IgZXJyb3JzIG9yIHRoZSBjb3VudHJ5IGZvciBlcnJvcnMsIGFuZCByZWZlcmVuY2UgdGhlICR7Z2xvc3NhcnlMaW5rKCdHbG9zc2FyeSBvZiBUZXJtcycpfS5gLFxuICAnc3VtIG5vdCBlcXVhbCB0byAxMDAlIGZvciBzYW5kQ29udGVudCwgc2lsdENvbnRlbnQsIGNsYXlDb250ZW50JzpcbiAgICAoKSA9PiBgVGhlIHN1bSBvZiBTYW5kLCBTaWx0LCBhbmQgQ2xheSBjb250ZW50IHNob3VsZCBlcXVhbCAxMDAlIGZvciBlYWNoIHNvaWwgZGVwdGggaW50ZXJ2YWwuYCxcbiAgJ2lzIG91dHNpZGUgdGhlIGFsbG93ZWQgcmFuZ2UnOiAoeyBwYXJhbXMgfSwgZXJyb3JDb3VudCkgPT5cbiAgICBgJHtcbiAgICAgIGVycm9yQ291bnQgPT09IDFcbiAgICAgICAgPyBwYXJhbXM/LnRlcm1cbiAgICAgICAgICAgID8gYFRoZSB2YWx1ZSBmb3IgJHtjb2RlKHBhcmFtcz8udGVybVsnQGlkJ10gfHwgcGFyYW1zPy50ZXJtLm5hbWUpfSBpcyBvdXRzaWRlIHRoZSByYW5nZSBlc3RhYmxpc2hlZCBmb3IgdGhlIHNvaWwgdGV4dHVyZSB5b3UgcHJvdmlkZWQuXG4gICAgICAgICAgICBGb3IgdGhpcyBzb2lsIHRleHR1cmUsIHRoZSBtYXhpbXVtICR7Y29kZShwYXJhbXM/LnRlcm1bJ0BpZCddIHx8IHBhcmFtcz8udGVybS5uYW1lKX0gaXMgJHtwYXJhbXM/LnJhbmdlPy5tYXh9IGFuZCB0aGUgbWluaW11bSBpcyAke3BhcmFtcz8ucmFuZ2U/Lm1pbn0uYFxuICAgICAgICAgICAgOiBgRG9lcyBub3QgbWF0Y2ggdGhlIHBvc3NpYmxlIHJhbmdlcyBvZiBzYW5kLCBzaWx0IGFuZCBjbGF5IGNvbnRlbnQuYFxuICAgICAgICA6IGBFYWNoIHNvaWwgdGV4dHVyZSBoYXMgYSBtYXhpbXVtIGFuZCBtaW5pbXVtIHZhbHVlIGZvciBzYW5kLCBzaWx0LCBhbmQgY2xheSBjb250ZW50LlxuICAgICAgICBBdCBsZWFzdCBvbmUgbWVhc3VyZW1lbnQgb2Ygc2FuZCwgc2lsdCwgb3IgY2xheSBjb250ZW50IGRvZXMgbm90IG1hdGNoIHRoZSBwb3NzaWJsZSByYW5nZSBmb3IgdGhlIHNwZWNpZmllZCBzb2lsIHRleHR1cmUuYFxuICAgIH1cbiAgICAke1xuICAgICAgZXJyb3JDb3VudCA9PT0gMVxuICAgICAgICA/IGBQbGVhc2UgY2hlY2sgdGhlIG1lYXN1cmVtZW50LCBpdHMgZGVwdGggaW50ZXJ2YWxzLCBhbmQgdGhlIGRhdGVzIG9mIHRoZSBtZWFzdXJlbWVudCBvciB1cGRhdGUgdGhlIHNvaWwgdGV4dHVyZSBpZiBuZWVkZWQuYFxuICAgICAgICA6IGBQbGVhc2UgY2hlY2sgeW91ciBtZWFzdXJlbWVudHMsIHRoZWlyIGRlcHRoIGludGVydmFscywgYW5kIHRoZSBkYXRlcyBvZiB0aGUgbWVhc3VyZW1lbnRzIG9yIHVwZGF0ZSB0aGUgc29pbCB0ZXh0dXJlcyBpZiBuZWVkZWQuYFxuICAgIH1gLFxuICAnc2hvdWxkIGJlIGVxdWFsIHRvIG9uZSBvZiB0aGUgYWxsb3dlZCB2YWx1ZXMnOlxuICAgICh7IHBhcmFtcyB9KSA9PiBgTXVzdCBoYXZlIG9uZSBvZiB0aGVzZSB2YWx1ZXM6ICR7cGFyYW1zPy5hbGxvd2VkVmFsdWVzLm1hcChjb2RlKS5qb2luKCcsICcpfWAsXG4gICdzaG91bGQgYmUgZXF1YWwgdG8gY29uc3RhbnQnOlxuICAgICh7IHBhcmFtcyB9KSA9PiBgTXVzdCBiZTogJHtjb2RlKHBhcmFtcz8uYWxsb3dlZFZhbHVlKX1gLFxuICAnaXMgbm90IGFsbG93ZWQgZm9yIHRoaXMgY2hhcmFjdGVyaXNlZEluZGljYXRvcic6ICh7IHBhcmFtcyB9LCBlcnJvckNvdW50KSA9PlxuICAgIGAke2Vycm9yQ291bnQgPT09IDEgP1xuICAgICAgYCR7XG4gICAgICAgIHBhcmFtcz8uYWxsb3dlZFZhbHVlcy5sZW5ndGggP1xuICAgICAgICAgIGBjYW4gb25seSBiZSB1c2VkIHdpdGggb25lIG9mIHRoZXNlIG1ldGhvZHM6ICR7cGFyYW1zPy5hbGxvd2VkVmFsdWVzLm1hcChjb2RlKS5qb2luKCcsICcpfWAgOlxuICAgICAgICAgIGBkb2VzIG5vdCBjdXJyZW50bHkgaGF2ZSBhbnkgbWV0aG9kIGFsbG93ZWQuIFBsZWFzZSAke2NvbnRhY3RVc0xpbmsoKX0gdG8gY2hhbmdlIHRoaXMuYFxuICAgICAgfS5gIDpcbiAgICAgIGBTb21lIFRlcm1zIGFyZSBub3QgYWxsb3dlZCB3aXRoIHRoZSBtZXRob2QgeW91IHNlbGVjdGVkLmB9XG4gICAgWW91IGNhbiBmaW5kIHRoZSBsaXN0IG9mIGFsbG93ZWQgbWV0aG9kcyBmb3IgZWFjaCBUZXJtIGJ5IGNsaWNraW5nIG9uIHRoZW0uYCxcbiAgJ3Nob3VsZCBjb250YWluIGEgdmFsaWQgaXRlbSc6ICh7IGRhdGFQYXRoIH0pID0+IHtcbiAgICBjb25zdCBwYXRocyA9IHBhcnNlRGF0YVBhdGgoZGF0YVBhdGghKTtcbiAgICByZXR1cm4gcGF0aHMubGVuZ3RoID49IDIgP1xuICAgICAgYFRoZSAke3BhdGhzW3BhdGhzLmxlbmd0aCAtIDFdLnBhdGh9IHJlbGF0ZWQgdG8gdGhpcyAke3BsdXJhbGl6ZShwYXRoc1twYXRocy5sZW5ndGggLSAyXS5sYWJlbCwgMSl9IGFyZSBpbnZhbGlkYCA6XG4gICAgICBgVGhlICR7cGF0aHNbMF0ucGF0aH0gYXJlIGludmFsaWRgO1xuICB9LFxuICAnbWF5IGJlIGJldHdlZW4gMCBhbmQgMTAwJzogKCkgPT4gJ1BlcmNlbnRhZ2VzIHNob3VsZCBiZSBiZXR3ZWVuIDAgYW5kIDEwMCwgbm90IDAgYW5kIDEuIFRoaXMgbWF5IGJlIGFuIGVycm9yLicsXG4gICdtYXkgbm90IGFsbCBiZSBzZXQgdG8gZmFsc2UnOiAoKSA9PlxuICAgIGBFdmVyeSB2YWx1ZSBpbiB0aGUgZGF0YSBjb21wbGV0ZW5lc3MgYXNzZXNzbWVudCBpcyAke2NvZGUoZmFsc2UpfS4gWW91IG1heSBoYXZlIGZvcmdvdHRlbiB0byBmaWxsIGl0IGluLlxuICBGb3IgaW5mb3JtYXRpb24gb24gaG93IHRvIGZpbGwgaXQgaW4sIHBsZWFzZSBzZWUgdGhlICR7c2NoZW1hTGluaygnQ3ljbGUjY29tcGxldGVuZXNzJywgJ3NjaGVtYScpfS5gLFxuICAnbWF5IG5vdCBiZSBlbXB0eSc6ICgpID0+ICdpZiB0aGlzIHZhbHVlIHNpZ25pZmllcyBubyBkYXRhLCBIZXN0aWEgb25seSBhY2NlcHRzIFwiLVwiIG9yIGVtcHR5IGZvciBubyBkYXRhJyxcbiAgJ21heSBub3QgYmUgMCc6ICh7IGRhdGFQYXRoIH0sIGVycm9yQ291bnQpID0+IHtcbiAgICBjb25zdCBwYXRocyA9IHBhcnNlRGF0YVBhdGgoZGF0YVBhdGghKTtcbiAgICByZXR1cm4gYEFkZGluZyBhIHZhbHVlICR7ZXJyb3JDb3VudCA9PT0gMSA/IGAgdG8gZXZlcnkgJHtwYXRoc1swXS5sYWJlbH0gYCA6ICcgJ30gaXMgaGlnaGx5IHJlY29tbWVuZGVkXG4gICAgICBhcyB3aXRob3V0IHRoaXMgaXQgaXMgbm90IHBvc3NpYmxlIHRvIGNhbGN1bGF0ZSB0aGUgSW1wYWN0IEFzc2Vzc21lbnQuXG4gICAgICBJZiB0aGUgYW1vdW50IHByb2R1Y2VkIGlzIHplcm8sIHdlIHJlY29tbWVuZCBzZXR0aW5nIHZhbHVlIHRvIDAuYDtcbiAgfSxcbiAgJ3RoZSBzdW0gb2YgYWJvdmUgZ3JvdW5kIGNyb3AgcmVzaWR1ZSBhbmQgYmVsb3cgZ3JvdW5kIGNyb3AgcmVzaWR1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiB6ZXJvJzogKCkgPT5cbiAgICBgRm9yIHNpdGVzIG9mIHR5cGUgJHtjb2RlKFNpdGVTaXRlVHlwZS5jcm9wbGFuZCl9IG9yICR7Y29kZShTaXRlU2l0ZVR5cGVbJ3Blcm1hbmVudCBwYXN0dXJlJ10pfSxcbiAgICBpZiBkYXRhIGNvbXBsZXRlbmVzcyBpcyBtYXJrZWQgJHtjb2RlKHRydWUpfSBmb3IgY3JvcCByZXNpZHVlLFxuICAgIHRoZSBzdW0gb2YgdGhlIEFib3ZlIGdyb3VuZCBjcm9wIHJlc2lkdWUgdGVybXMgc2hvdWxkIGJlIGdyZWF0ZXIgdGhhbiB6ZXJvLFxuICAgIGFuZCBCZWxvdyBncm91bmQgY3JvcCByZXNpZHVlIHNob3VsZCBiZSBncmVhdGVyIHRoYW4gemVyby5gLFxuICAnbG9uZ0ZhbGxvd1BlcmlvZCBtdXN0IGJlIGxvd2VyIHRoYW4gNSB5ZWFycyc6ICgpID0+XG4gICAgYFlvdXIgbG9uZ0ZhbGxvd1BlcmlvZCBpcyBncmVhdGVyIHRoYW4gZml2ZSB5ZWFycy5cbiAgICBGYWxsb3cgaXMgZGVmaW5lZCBieSBGQU9TVEFUIGFzIGxhbmQgbGVmdCB1bmN1bHRpdmF0ZWQgZm9yIGJldHdlZW4gMSBhbmQgNSB5ZWFycyxcbiAgICBhbmQgdGhpcyBkZWZpbml0aW9uIGlzIHVzZWQgZm9yIEhlc3RpYSBhbHNvLmAsXG4gICdzaG91bGQgYmUgd2l0aGluIHBlcmNlbnRhZ2Ugb2YgZGVmYXVsdCB2YWx1ZSc6ICh7IHBhcmFtcyB9LCBlcnJvckNvdW50KSA9PlxuICAgIGVycm9yQ291bnQgPT09IDEgP1xuICAgICAgYFRoaXMgdmFsdWUgaXMgwrEke3RocmVzaG9sZChwYXJhbXM/LnRocmVzaG9sZCl9IGRpZmZlcmVudCB0byBvdXIgZGVmYXVsdCB2YWx1ZSB3aGljaCBpcyAke3BhcmFtcz8uZGVmYXVsdH0uXG4gICAgICBQbGVhc2UgY2hlY2sgeW91ciB1cGxvYWRlZCBkYXRhIGFzIHRoaXMgbWF5IGJlIGFuIGVycm9yLmAgOlxuICAgICAgYFRoaXMgdmFsdWUgaXMgc3Vic3RhbnRpYWxseSBkaWZmZXJlbnQgdGhhbiBvdXIgZGVmYXVsdCB2YWx1ZS5cbiAgICAgIFBsZWFzZSBjaGVjayB5b3VyIHVwbG9hZGVkIGRhdGEgYXMgdGhpcyBtYXkgYmUgYW4gZXJyb3IuYCxcbiAgJ3RoZSB2YWx1ZSBwcm92aWRlZCBpcyBub3QgY29uc2lzdGVudCB3aXRoIHRoZSBtb2RlbCByZXN1bHQnOiAoeyBwYXJhbXMgfSwgZXJyb3JDb3VudCkgPT5cbiAgICBgVGhlIGV4cGVjdGVkIHJlc3VsdCBmb3IgJHtjb2RlKHBhcmFtcz8udGVybS5uYW1lKX1cbiAgICAke3BhcmFtcz8ubW9kZWw/Lm5hbWUgPyBgdXNpbmcgJHttb2RlbExpbmsocGFyYW1zPy50ZXJtLCBwYXJhbXM/Lm1vZGVsKX0gYCA6ICcnfVxuICAgIGZyb20gdGhlIGRhdGEgcHJvdmlkZWQgaW4gdGhlIHVwbG9hZCBpcyAke1xuICAgICAgZXJyb3JDb3VudCA9PT0gMVxuICAgICAgICA/IGAke2NvZGUodG9QcmVjaXNpb24ocGFyYW1zPy5leHBlY3RlZCwgMykpfSwgYnV0IHRoZSB2YWx1ZSBpbiB0aGUgdXBsb2FkIGlzICR7Y29kZSh0b1ByZWNpc2lvbihwYXJhbXM/LmN1cnJlbnQsIDMpKX0uXG4gICAgICAgICR7cGFyYW1zPy50aHJlc2hvbGQgPyBgT3VyIHRocmVzaG9sZCBpcyDCsSR7dGhyZXNob2xkKHBhcmFtcz8udGhyZXNob2xkKX0uYCA6ICcnfVxuICAgICAgICBQbGVhc2UgZWl0aGVyOlxuICAgICAgICA8dWwgY2xhc3M9XCJpcy1wbC0zIGlzLWxpc3Qtc3R5bGUtZGVjaW1hbFwiPlxuICAgICAgICA8bGk+Q2hlY2sgdGhlICR7cGFyYW1zPy50ZXJtLnRlcm1UeXBlfSB2YWx1ZSB5b3UgcHJvdmlkZWQ7PC9saT5cbiAgICAgICAgPGxpPkNoZWNrIHRoZSBkYXRhIHlvdSBwcm92aWRlZCB3aGljaCBpcyB0aGUgaW5wdXQgaW50byB0aGlzIG1vZGVsOzwvbGk+XG4gICAgICAgIDxsaT5DYXJlZnVsbHkgcmVhZCB0aGUgZG9jdW1lbnRhdGlvbiB0byB1bmRlcnN0YW5kIGlmIHdlIHVzZWQgYSBkZWZhdWx0IHByb3BlcnR5IGFzIHBhcnQgb2YgdGhlIGNhbGN1bGF0aW9ucy48L2xpPlxuICAgICAgICA8L3VsPmBcbiAgICAgICAgOiAnbm90IGNvbnNpc3RlbnQgd2l0aCB0aGUgbW9kZWwgcmVzdWx0LidcbiAgICB9YCxcbiAgJ3RoZSBtZWFzdXJlbWVudCBwcm92aWRlZCBtaWdodCBiZSBpbiBlcnJvcic6ICh7IHBhcmFtcyB9LCBlcnJvckNvdW50KSA9PlxuICAgIGBUaGUgZXhwZWN0ZWQgdmFsdWUgZm9yICR7Y29kZShwYXJhbXM/LnRlcm0ubmFtZSl9XG4gICAgJHtwYXJhbXM/Lm1vZGVsPy5uYW1lID8gYHVzaW5nICR7bW9kZWxMaW5rKHBhcmFtcz8udGVybSwgcGFyYW1zPy5tb2RlbCl9IGAgOiAnJ31cbiAgICBmcm9tIHRoZSBkYXRhIHByb3ZpZGVkIGluIHRoZSB1cGxvYWQgaXMgJHtcbiAgICAgIGVycm9yQ291bnQgPT09IDEgP1xuICAgICAgICBgJHtjb2RlKHRvUHJlY2lzaW9uKHBhcmFtcz8uZXhwZWN0ZWQsIDMpKX0sIGJ1dCB0aGUgdmFsdWUgaW4gdGhlIHVwbG9hZCBpcyAke2NvZGUodG9QcmVjaXNpb24ocGFyYW1zPy5jdXJyZW50LCAzKSl9LlxuICAgICAgICAke3BhcmFtcz8udGhyZXNob2xkID8gYE91ciB0aHJlc2hvbGQgaXMgwrEke3RocmVzaG9sZChwYXJhbXM/LnRocmVzaG9sZCl9LmAgOiAnJ31gIDpcbiAgICAgICAgYG5vdCBjb25zaXN0ZW50IHdpdGggdGhlIG1vZGVsIHJlc3VsdC5gXG4gICAgfWAsXG4gICdtdXN0IGJlIGVxdWFsIHRvIHByZXZpb3VzIHByb2R1Y3QgbXVsdGlwbGllZCBieSB0aGUgc2hhcmUnOiAoKSA9PlxuICAgIGBQcm9kdWN0cyBmcm9tIGEgdHJhbnNmb3JtYXRpb24gd2hpY2ggYXJlIGFuIElucHV0IGluIHRvIHRoZSBuZXh0IHRyYW5zZm9ybWF0aW9uIG11c3QgZm9sbG93IHRoZSBmb2xsb3dpbmcgcnVsZTpcbiAgICAke2NvZGUoJ3ByZXZpb3VzLnByb2R1Y3QudmFsdWUgKiBjdXJyZW50LnRyYW5zZm9ybWVkU2hhcmUgLyAxMDAgPT0gY3VycmVudC5pbnB1dC52YWx1ZScpfWAsXG4gICdhdCBsZWFzdCBvbmUgSW5wdXQgbXVzdCBiZSBhIFByb2R1Y3Qgb2YgdGhlIEN5Y2xlJzogKCkgPT5cbiAgICBgQSBUcmFuc2Zvcm1hdGlvbiBjb252ZXJ0cyBhIFByb2R1Y3QgZnJvbSBhIEN5Y2xlIGludG8gYW5vdGhlciBQcm9kdWN0LlxuICAgIFRoZXJlZm9yZSwgYXQgbGVhc3Qgb25lIElucHV0IGludG8gdGhlIFRyYW5zZm9ybWF0aW9uIG11c3QgYmUgYSBQcm9kdWN0IG9mIHRoZSBDeWNsZS5gLFxuICAnbXVzdCBoYXZlIG9ubHkgb25lIGVudHJ5IHdpdGggdGhlIHNhbWUgdGVybS50ZXJtVHlwZSA9IGV4Y3JldGFNYW5hZ2VtZW50JzogKCkgPT5cbiAgICBgVGhlcmUgY2FuIG9ubHkgYmUgb25lIFByYWN0aWNlIG9mIHR5cGUgZXhjcmV0YU1hbmFnZW1lbnQgaW4gYSBDeWNsZS5cbiAgICBUbyByZXByZXNlbnQgbXVsdGlwbGUgZXhjcmV0YSBtYW5hZ2VtZW50IHN5c3RlbXMgZWl0aGVyIHVzZSBtdWx0aXBsZSBDeWNsZXMgYW5kIGxpbmsgdGhlbSB0b2dldGhlcixcbiAgICBvciB1c2UgVHJhbnNmb3JtYXRpb25zIHdpdGhpbiBhIEN5Y2xlIGFuZCBsaW5rIHRob3NlIHRvZ2V0aGVyLmAsXG4gICdtdXN0IGJlIGluY2x1ZGVkIGFzIGFuIElucHV0JzogKHsgcGFyYW1zIH0sIGVycm9yQ291bnQpID0+XG4gICAgYFRoZSBleGNyZXRhIFByb2R1Y3RzIGFyZSBub3Qgb2YgdGhlIHNhbWUgdHlwZSBhcyB0aGUgZXhjcmV0YSBJbnB1dHMuXG4gICAgJHtcbiAgICAgIGVycm9yQ291bnQgPT09IDEgP1xuICAgICAgICBgRS5nLiwgeW91IGNhbm5vdCBnZXQgJHtcbiAgICAgICAgICBjb2RlKHBhcmFtcz8udGVybT8ubmFtZSlcbiAgICAgICAgfSBmcm9tICR7XG4gICAgICAgICAgKHBhcmFtcz8uZXhwZWN0ZWQgfHwgW10pLm1hcCh2ID0+IGNvZGUoa2V5VG9MYWJlbCh2KSkpLmpvaW4oJyBvciAnKVxuICAgICAgICB9LmAgOlxuICAgICAgICAnJ1xuICAgIH1cbiAgICBQbGVhc2UgY2hlY2sgdGhlIElucHV0cyBhbmQgUHJvZHVjdHMgb2YgdGhlIFRyYW5zZm9ybWF0aW9uLmAsXG4gICdtdXN0IGFkZCB0aGUgbGlua2VkIGlucHV0cyB0byB0aGUgY3ljbGUnOiAoeyBwYXJhbXMgfSwgZXJyb3JDb3VudCkgPT5cbiAgICBgJHtcbiAgICAgIGVycm9yQ291bnQgPT09IDEgP1xuICAgICAgICBgWW91IGhhdmUgc3RhdGVkIHRoYXQgJHtjb2RlKHBhcmFtcz8udGVybT8ubmFtZSl9IHdhcyBjcmVhdGVkIGJ5IHRoZSBmb2xsb3dpbmcgSW5wdXRzICR7XG4gICAgICAgICAgcGFyYW1zPy5leHBlY3RlZD8ubWFwKGUgPT4gY29kZShlLm5hbWUpKS5qb2luKCcgLCAnKVxuICAgICAgICB9YDpcbiAgICAgICAgJ1lvdSBoYXZlIHN0YXRlZCBzb21lIEVtaXNzaW9ucyB3ZXJlIGNyZWF0ZWQgYnkgc29tZSBJbnB1dHMnXG4gICAgfS5cbiAgICBIb3dldmVyLCB0aGVzZSBJbnB1dHMgZG8gbm90IGV4aXN0IGluIHRoZSBDeWNsZS5cbiAgICBQbGVhc2UgYWRkIHRoZXNlIElucHV0cywgZXZlbiBpZiB5b3UgZG8gbm90IGhhdmUgYSB2YWx1ZSBmb3IgdGhlbS5gLFxuICAnbXVzdCBhZGQgdGhlIGxpbmtlZCB0cmFuc2Zvcm1hdGlvbnMgdG8gdGhlIGN5Y2xlJzogKHsgbGV2ZWwsIHBhcmFtcyB9LCBlcnJvckNvdW50KSA9PlxuICAgIGAke1xuICAgICAgZXJyb3JDb3VudCA9PT0gMSA/XG4gICAgICAgIGBZb3UgaGF2ZSBzcGVjaWZpZWQgdGhhdCR7Y29kZShwYXJhbXM/LnRlcm0/Lm5hbWUpfSB3YXMgY3JlYXRlZCBkdXJpbmcgYSBUcmFuc2Zvcm1hdGlvbiB3aXRoIHRoZSBUZXJtIG5hbWUgJHtjb2RlKHBhcmFtcz8uZXhwZWN0ZWQ/Lm5hbWUpfWAgOlxuICAgICAgICAnWW91IGhhdmUgc3RhdGVkIHNvbWUgRW1pc3Npb25zIHdlcmUgY3JlYXRlZCBieSBzb21lIFRyYW5zZm9ybWF0aW9ucydcbiAgICB9LlxuICAgIEhvd2V2ZXIsIHdlIGNhbm5vdCBmaW5kIGEgVHJhbnNmb3JtYXRpb24gd2l0aGluIHRoZSBDeWNsZSB3aXRoIHRoaXMgVGVybSBuYW1lLlxuICAgICR7XG4gICAgICBsZXZlbCA9PT0gJ2Vycm9yJyA/XG4gICAgICAgICdQbGVhc2UgY2hlY2sgdGhlIFRlcm1zIHVzZWQgaW4gdGhlIEVtaXNzaW9ucyBhbmQvb3IgdGhlIFRyYW5zZm9ybWF0aW9ucy4nIDpcbiAgICAgICAgJ1lvdSBtYXkgd2FudCB0byBhZGQgdGhpcyBUcmFuc2Zvcm1hdGlvbi4nXG4gICAgfWAsXG4gICdldmVyeSBpdGVtIGluIHRoZSBsaXN0IHNob3VsZCBiZSB1bmlxdWUnOiAoeyBwYXJhbXMgfSkgPT5cbiAgICBgVGhpcyBCbGFuayBOb2RlIGlzIGR1cGxpY2F0ZWQuIEV2ZXJ5IEJsYW5rIE5vZGUgc2hvdWxkIGJlIHVuaXF1ZS5cbiAgICBVbmlxdWVuZXNzIGlzIGRldGVybWluZWQgYnkgdGhlIGZvbGxvd2luZyBmaWVsZHM6ICR7XG4gICAgICAocGFyYW1zPy5rZXlzIHx8IFtdKS5tYXAoY29kZSkuam9pbignLCAnKVxuICAgIH1gLFxuICAnbXVzdCBjb250YWluIGFzIG1hbnkgaXRlbXMgYXMgdmFsdWVzJzogKHsgcGFyYW1zLCBkYXRhUGF0aCB9KSA9PlxuICAgIGBUaGUgbnVtYmVyIG9mICR7Y29kZShkYXRhUGF0aC5zcGxpdCgnLicpLnBvcCgpKX0gbXVzdCBtYXRjaCB0aGUgbnVtYmVyIG9mICR7Y29kZSgndmFsdWUnKX0uXG4gICAgQ3VycmVudGx5IHRoZXJlIGFyZSAke3BhcmFtcz8uY3VycmVudH0gJHtjb2RlKGRhdGFQYXRoLnNwbGl0KCcuJykucG9wKCkpfSBidXQgJHtwYXJhbXM/LmV4cGVjdGVkfSAke2NvZGUoJ3ZhbHVlJyl9LmAsXG4gICdpcyB0b28gZ2VuZXJpYyc6ICh7IHBhcmFtcyB9KSA9PlxuICAgIGBZb3UgaGF2ZSB0aGUgZm9sbG93aW5nIFByb2R1Y3QgJHtjb2RlKHBhcmFtcz8ucHJvZHVjdD8ubmFtZSl9IGhvd2V2ZXIsXG4gICAgeW91IGhhdmUgdXNlZCBhIGdlbmVyaWMgJHtnbG9zc2FyeVR5cGVMaW5rKHBhcmFtcz8udGVybT8udGVybVR5cGUpfSB0ZXJtICR7Y29kZShwYXJhbXM/LnRlcm0/Lm5hbWUpfS5cbiAgICBVc2UgYSBtb3JlIHNwZWNpZmljIHRlcm0gZm9yIHRoZSAke1xuICAgICAgZ2xvc3NhcnlUeXBlTGluayhwYXJhbXM/LnRlcm0/LnRlcm1UeXBlKVxuICAgIH0gd2hpY2ggcmVmbGVjdHMgdGhlIHNwZWNpZmljICR7XG4gICAgICBnbG9zc2FyeVR5cGVMaW5rKHBhcmFtcz8ucHJvZHVjdD8udGVybVR5cGUpXG4gICAgfS5gLFxuICAnaXMgbWlzc2luZyByZXF1aXJlZCBiaWJsaW9ncmFwaGljIGluZm9ybWF0aW9uJzogKCkgPT5cbiAgICBgVGhlIGF1dG9tYXRpYyBiaWJsaW9ncmFwaHkgc2VhcmNoIGZhaWxlZCBmb3IgdGhpcyBCaWJsaW9ncmFwaHkuIEVpdGhlcjpcbiAgICA8dWwgY2xhc3M9XCJpcy1wbC0zIGlzLWxpc3Qtc3R5bGUtZGVjaW1hbFwiPlxuICAgIDxsaT5NYW51YWxseSBmaWxsLWluIHRoZSA8Yj5yZXF1aXJlZDwvYj4gYmlibGlvZ3JhcGhpYyBpbmZvcm1hdGlvbiBhcyBwZXIgJHtzY2hlbWFMaW5rKFNjaGVtYVR5cGUuQmlibGlvZ3JhcGh5LCAnb3VyIHNjaGVtYScpfS48L2xpPlxuICAgIDxsaT5Qcm92aWRlIHRoZSAke2NvZGUoJ2RvY3VtZW50RE9JJyl9IGFzIHdlbGwgYXMgdGhlICR7Y29kZSgndGl0bGUnKX0uPC9saT5cbiAgICA8bGk+Q2hlY2sgdGhlICR7Y29kZSgnZG9jdW1lbnRET0knKX0gYW5kICR7Y29kZSgndGl0bGUnKX0gZm9yIHR5cG9zIGFnYWluc3QgdGhlICR7ZXh0ZXJuYWxMaW5rKCdodHRwczovL3d3dy5tZW5kZWxleS5jb20nLCAnTWVuZGVsZXkgY2F0YWxvZ3VlJyl9LjwvbGk+XG4gICAgPC91bD5gLFxuICAnc2hvdWxkIGJlIGxvd2VyIHRoYW4gbWF4IHNpemUnOiAoeyBwYXJhbXMgfSkgPT5cbiAgICBgVGhlIGJvdW5kYXJ5IG9yIHJlZ2lvbiBpcyA+JHtwYXJhbXM/LmV4cGVjdGVkfWttMiBhbmQgaXMgdG9vIGxhcmdlIHRvIHJlbGlhYmx5IGdhcCBmaWxsIE1lYXN1cmVtZW50cy5cbiAgICBJZiB5b3UgYXJlIGFibGUgdG8gdXNlIGEgbW9yZSBzcGVjaWZpYyByZWdpb24sIHBsZWFzZSBkby5gLFxuICAnYW4gZXhjcmV0YSBpbnB1dCBpcyByZXF1aXJlZCB3aGVuIHVzaW5nIGFuIGV4Y3JldGFNYW5hZ2VtZW50IHByYWN0aWNlJzogKHsgZGF0YVBhdGggfSkgPT4ge1xuICAgIGNvbnN0IHBhdGhzID0gcGFyc2VEYXRhUGF0aChkYXRhUGF0aCEpO1xuICAgIHJldHVybiBgRXhjcmV0YSBtYW5hZ2VtZW50IGlzIHRoZSBjb252ZXJzaW9uIG9mIGV4Y3JldGEgdG8gYW5vdGhlciB0eXBlIG9mIGV4Y3JldGEuXG4gICAgICBZb3UgaGF2ZSBhZGRlZCBhbiBleGNyZXRhTWFuYWdlbWVudCBQcmFjdGljZSB0byB0aGlzICR7cGF0aHNbMF0ubGFiZWx9IGJ1dCB0aGVyZSBpcyBubyBleGNyZXRhIElucHV0LlxuICAgICAgVG8gcmVwcmVzZW50IGV4Y3JldGEgbWFuYWdlbWVudCwgdXNlIGEgJHtwYXRoc1swXS5sYWJlbH0gd2l0aCBleGNyZXRhIGFzIGFuIElucHV0IGFuZCBleGNyZXRhTWFuYWdlbWVudCBhcyBhIFByYWN0aWNlLmA7XG4gIH0sXG4gICdvbmx5IDEgcHJpbWFyeSBwcm9kdWN0IGFsbG93ZWQnOiAoKSA9PiAnVGhlcmUgY2FuIG9ubHkgYmUgb25lIHByaW1hcnkgcHJvZHVjdCBpbiBlYWNoIEN5Y2xlLicsXG4gICdpcyBub3QgYWxsb3dlZCBpbiBjb21iaW5hdGlvbiB3aXRoIG5vVGlsbGFnZSc6ICgpID0+XG4gICAgYFRoaXMgb3BlcmF0aW9uIGludm9sdmVzIHRpbGxhZ2UsIHlldCB5b3UgaGF2ZSBzcGVjaWZpZWQgdGhlIFByYWN0aWNlICR7dGVybUxpbmsobm9UaWxsYWdlKX0uXG4gICAgRWl0aGVyIGNoYW5nZSB0aGlzIG9wZXJhdGlvbiBvciB0aGUgUHJhY3RpY2UuYCxcbiAgJ3Nob3VsZCBjb250YWluIGEgdGlsbGFnZSBwcmFjdGljZSc6ICgpID0+XG4gICAgYFdlIHJlY29tbWVuZCBzcGVjaWZ5aW5nIHRoZSB0eXBlIG9mIHRpbGxhZ2UgdXNlZCBmb3IgdGhpcyBDeWNsZS5cbiAgICBQbGVhc2Ugc2VlIHRoZSAke2dsb3NzYXJ5VHlwZUxpbmsoVGVybVRlcm1UeXBlLnRpbGxhZ2UpfSBnbG9zc2FyeS5gLFxuICAnbXVzdCBzZXQgdmFsdWUgZm9yIGV2ZXJ5IHRpbGxhZ2UgcHJhY3RpY2UnOiAoKSA9PlxuICAgIGBFaXRoZXIgc3BlY2lmeSBhIHNpbmdsZSAke2dsb3NzYXJ5VHlwZUxpbmsoVGVybVRlcm1UeXBlLnRpbGxhZ2UpfSBwcmFjdGljZSBvciBhZGQgYSB2YWx1ZSB0byBhbGwgcHJhY3RpY2VzLmAsXG4gICdzdW0gbm90IGVxdWFsIHRvIDEwMCUgZm9yIHRpbGxhZ2UgcHJhY3RpY2VzJzogKCkgPT5cbiAgICBgVGhlIHN1bSBvZiAke2dsb3NzYXJ5VHlwZUxpbmsoVGVybVRlcm1UeXBlLnRpbGxhZ2UpfSBwcmFjdGljZXMgbXVzdCBlcXVhbCAxMDAlLmAsXG4gICdjYW4gb25seSBoYXZlIDEgdGlsbGFnZSBwcmFjdGljZSB3aXRob3V0IGEgdmFsdWUnOiAoeyBwYXJhbXMgfSkgPT5cbiAgICBgSXQgaXMgbm90IHBvc3NpYmxlIGZvciBhIEN5Y2xlIHRvIGhhdmUgdGhlIGZvbGxvd2luZyB0aWxsYWdlIFByYWN0aWNlczpcbiAgICAkeyhwYXJhbXM/LmN1cnJlbnQgPz8gW10pLm1hcCgoeyBuYW1lIH0pID0+IG5hbWUpLmpvaW4oJyBhbmQgJyl9IGF0IHRoZSBzYW1lIHRpbWUuXG4gICAgSWYgbXVsdGlwbGUgdGlsbGFnZSBwcmFjdGljZXMgZGlkIG9jY3VyLCBwbGVhc2Ugc3BlY2lmeSB0aGUgcGVyY2VudGFnZSBvZiBhcmVhIHRoZXkgb2NjdXJyZWQgb24uYCxcbiAgJ2NhbiBub3QgYmUgbGlua2VkIHRvIHRoZSBzYW1lIEN5Y2xlJzogKCkgPT4gJ1lvdSBjYW4gbm90IGxpbmsgYW4gSW5wdXQgdG8gdGhlIEltcGFjdCBBc3Nlc3NtZW50IG9mIHRoZSBzYW1lIEN5Y2xlLicsXG4gIC8vIGRlcHJlY2F0ZWQsIHJlbW92ZSB3aGVuIG1lc3NhZ2UgaXMgbm90IGJlaW5nIHVzZWQgYW55bW9yZVxuICAnbXVzdCBiZSAwIGZvciBwcm9kdWN0IHZhbHVlIDAnOiAoeyBkYXRhUGF0aCwgcGFyYW1zIH0sIGVycm9yQ291bnQpID0+XG4gICAgYElmIHRoZSBhbW91bnQgcHJvZHVjZWQgaXMgemVybywgdGhlICR7Y29kZShkYXRhUGF0aD8uc3BsaXQoJy4nKS5wb3AoKSEpfSBvZiAke1xuICAgICAgZXJyb3JDb3VudCA9PT0gMSA/IGNvZGUocGFyYW1zPy50ZXJtLm5hbWUpIDogJ3RoYXQgcHJvZHVjdCdcbiAgICB9IG11c3QgYWxzbyBiZSB6ZXJvLmAsXG4gICdlY29ub21pY1ZhbHVlU2hhcmUgbXVzdCBiZSAwIGZvciBwcm9kdWN0IHZhbHVlIDAnOiAoeyBwYXJhbXMgfSwgZXJyb3JDb3VudCkgPT5cbiAgICBgSWYgdGhlIGFtb3VudCBwcm9kdWNlZCBpcyB6ZXJvLCB0aGUgZWNvbm9taWNWYWx1ZVNoYXJlIG9mICR7XG4gICAgICBlcnJvckNvdW50ID09PSAxID8gY29kZShwYXJhbXM/LnRlcm0ubmFtZSkgOiAndGhhdCBwcm9kdWN0J1xuICAgIH0gbXVzdCBhbHNvIGJlIHplcm8uYCxcbiAgJ3JldmVudWUgbXVzdCBiZSAwIGZvciBwcm9kdWN0IHZhbHVlIDAnOiAoeyBwYXJhbXMgfSwgZXJyb3JDb3VudCkgPT5cbiAgICBgSWYgdGhlIGFtb3VudCBwcm9kdWNlZCBpcyB6ZXJvLCB0aGUgcmV2ZW51ZSBvZiAke1xuICAgICAgZXJyb3JDb3VudCA9PT0gMSA/IGNvZGUocGFyYW1zPy50ZXJtLm5hbWUpIDogJ3RoYXQgcHJvZHVjdCdcbiAgICB9IG11c3QgYWxzbyBiZSB6ZXJvLmAsXG4gICdzaG91bGQgYWRkIGEgc291cmNlJzogKHsgcGFyYW1zIH0pID0+XG4gICAgYFdlIHJlY29tbWVuZCBhZGRpbmcgYSBTb3VyY2UgdG8gYWxsIGRhdGEgaXRlbXMuXG4gICAgVGhpcyBjYW4gYmUgZG9uZSBieSBhZGRpbmcgdGhlICR7Y29kZShwYXJhbXM/LmN1cnJlbnQpfSBmaWVsZC5cbiAgICBTb3VyY2VzIGNhbiBhbHNvIGJlIHNwZWNpZmllZCBmb3IgZWFjaCBkYXRhIGl0ZW0gKGkuZS4sIGVhY2ggSW5wdXQsIEVtaXNzaW9uLCBQcm9kdWN0LCBQcmFjdGljZSwgTWVhc3VyZW1lbnQsIG9yIEluZnJhc3RydWN0dXJlKS5gLFxuICAnY292ZXIgY3JvcCBjeWNsZSBjb250YWlucyBub24gY292ZXIgY3JvcCBwcm9kdWN0JzogKCkgPT5cbiAgICBgWW91IGhhdmUgc3BlY2lmaWVkIHRoYXQgdGhpcyBjcm9wIGlzIGEgY292ZXIgY3JvcCB1c2luZyBhIFByYWN0aWNlLlxuICAgIEEgY292ZXIgY3JvcCBpcyBkZWZpbmVkIGFzIFwiYSBjcm9wIHdoaWNoIGlzIGxlZnQgaW4gdGhlIGZpZWxkIHdpdGhvdXQgYW55IGZyYWN0aW9uIGhhcnZlc3RlZCBieSB0aGUgZW5kIG9mIHRoZSBDeWNsZVwiLlxuICAgIFRoZSBQcm9kdWN0cyBvZiB0aGlzIEN5Y2xlIGFyZSBpbmNvbXBhdGlibGUgd2l0aCB0aGlzIGNyb3AgYmVpbmcgYSBjb3ZlciBjcm9wLlxuICAgIFBsZWFzZSBjaGVjayB0aGUgUHJvZHVjdHMgb3IgdGhlIFByYWN0aWNlcy5gLFxuICAnc2hvdWxkIGJlIGluY2x1ZGVkIGluIHRoZSBjeWNsZSBwcm9kdWN0cyc6ICh7IHBhcmFtcyB9LCBlcnJvckNvdW50KSA9PlxuICAgIGAke1xuICAgICAgZXJyb3JDb3VudCA9PT0gMSA/XG4gICAgICAgIGBUaGUgUHJvZHVjdCAke2NvZGUocGFyYW1zLnByb2R1Y3QubmFtZSl9IGRvZXMgbm90IGV4aXN0IGluIHRoZSBDeWNsZSB3aXRoIGlkICR7Y29kZShwYXJhbXMubm9kZS5pZCl9YCA6XG4gICAgICAgICdUaGUgSW1wYWN0QXNzZXNzbWVudCBQcm9kdWN0IGRvZXMgbm90IGV4aXN0IGluIHRoZSBsaW5rZWQgQ3ljbGUnXG4gICAgfS5cbiAgICBQbGVhc2UgYWRkIHRoZSBQcm9kdWN0IGluIHRoZSBDeWNsZSBvciByZW1vdmUgdGhlIGxpbmsgd2l0aCB0aGUgQ3ljbGUuYCxcbiAgJ211bHRpcGxlIEltcGFjdEFzc2Vzc21lbnQgYXJlIGFzc29jaWF0ZWQgd2l0aCB0aGUgc2FtZSBQcm9kdWN0IG9mIHRoZSBzYW1lIEN5Y2xlJzogKCkgPT5cbiAgICBgT25seSAxIEltcGFjdCBBc3Nlc3NtZW50IGNhbiBiZSByZWxhdGVkIHRvIHRoaXMgUHJvZHVjdC5cbiAgICBQbGVhc2UgbWFrZSBzdXJlIHRoZSBwcm9kdWN0IGlzIGNvcnJlY3Qgb3IgdGhlIGN5Y2xlLmlkIHlvdSBhcmUgcmVmZXJyaW5nIHRvIGlzIGNvcnJlY3QuYCxcbiAgJ211c3QgYmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIGxhbmQgb2NjdXBhdGlvbic6ICgpID0+XG4gICAgYExhbmQgdHJhbnNmb3JtYXRpb24gc2hvdWxkIGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byBsYW5kIG9jY3VwYXRpb25cbiAgICAobGFuZCB0cmFuc2Zvcm1hdGlvbiBpcyB0aGUgYW1vdW50IG9mIGxhbmQgY29udmVydGVkIGJldHdlZW4gc29tZSBkYXRlIGluIHRoZSBwYXN0IGFuZCB0aGUgY3VycmVudCB5ZWFyLFxuICAgIGRpdmlkZWQgYnkgYW4gYW1vcnRpemF0aW9uIHBlcmlvZCwgc28gaXQgc2hvdWxkIGFsd2F5cyBiZSBsZXNzIHRoYW4gbGFuZCBvY2N1cGF0aW9uIGJ5IGRlZmluaXRpb24pLmAsXG4gICdzaG91bGQgYmUgbGlua2VkIHRvIGFuIGVtaXNzaW9uIGluIHRoZSBDeWNsZSc6ICh7IHBhcmFtcyB9LCBlcnJvckNvdW50KSA9PlxuICAgIGAke1xuICAgICAgZXJyb3JDb3VudCA9PT0gMSA/IGAke2NvZGUocGFyYW1zPy50ZXJtLm5hbWUpfSBleGlzdHNgIDogJ1NvbWUgRW1pc3Npb25zIGV4aXN0J1xuICAgIH0gaW4gYm90aCB0aGUgQ3ljbGUgYW5kIHRoZSBUcmFuc2Zvcm1hdGlvbiBidXQgJHtlcnJvckNvdW50ID09PSAxID8gJ2l0IGlzJyA6ICd0aGV5IGFyZSd9IG5vdCBsaW5rZWQgdXNpbmcgJHtcbiAgICAgIGNvZGUoJ2N5Y2xlLmVtaXNzaW9ucy5YLnRyYW5zZm9ybWF0aW9uLnRlcm0nKVxuICAgIH0uIFRoaXMgbWF5IGJlIGFuIGVycm9yLmAsXG4gICdzaG91bGQgYWRkIGFuIGFuaW1hbCBwcm9kdWN0aW9uIHN5c3RlbSc6ICgpID0+XG4gICAgYEZvciBhbmltYWwgcHJvZHVjdGlvbiBjeWNsZXMsIHdlIHJlY29tbWVuZCBzcGVjaWZ5aW5nIHRoZSBhbmltYWwgcHJvZHVjdGlvbiAke2dsb3NzYXJ5VHlwZUxpbmsoVGVybVRlcm1UeXBlLnN5c3RlbSl9IGFzIGEgUHJhY3RpY2UuXG4gICAgWW91IGNhbiBmaW5kIGEgbGlzdCBvZiBzeXN0ZW1zIGluIHRoZSAke2dsb3NzYXJ5VHlwZUxpbmsoVGVybVRlcm1UeXBlLnN5c3RlbSwgJ0dsb3NzYXJ5Jyl9LmAsXG4gICdtdXN0IGJlIHNldCB0byBmYWxzZSB3aGVuIHNwZWNpZnlpbmcgZnVlbCB1c2UnOiAoeyBwYXJhbXMgfSkgPT5cbiAgICBgSWYgbWFjaGluZXJ5IGZ1ZWwgKCR7cGFyYW1zPy5hbGxvd2VkVmFsdWVzLm1hcChjb2RlKS5qb2luKCcsICcpfSkgaXMgdXNlZCBkdXJpbmcgYSBDeWNsZSxcbiAgICBidXQgdGhlcmUgaXMgbm8gZGF0YSBvbiB0aGUgYW1vdW50IG9mICR7Z2xvc3NhcnlUeXBlTGluayhUZXJtVGVybVR5cGUubWF0ZXJpYWwpfSB1c2VkIGZvciBhZ3JpY3VsdHVyYWwgZXF1aXBtZW50LFxuICAgIHRoZW4gJHtjb2RlKCdjb21wbGV0ZW5lc3MubWF0ZXJpYWwnKX0gbXVzdCBiZSAke2NvZGUoJ2ZhbHNlJyl9LmAsXG4gICdtdXN0IGJlIGJlbG93IG9yIGVxdWFsIHRvIDEgZm9yIHVuaXQgaW4gaGEnOiAoKSA9PlxuICAgIGBUaGUgbWF4aW11bSB2YWx1ZSBmb3IgYSBwcm9kdWN0IHdpdGggdW5pdHMgJHtjb2RlKCdoYScpfSBvbiBhIEN5Y2xlIHdpdGggYSAke1xuICAgICAgc2NoZW1hTGluaygnQ3ljbGUjZnVuY3Rpb25hbFVuaXQnLCAnZnVuY3Rpb25hbCB1bml0JylcbiAgICB9IG9mICR7Y29kZSgnMSBoYScpfSBpcyAke2NvZGUoJzEnKX0uXG4gICAgSWYgeW91IGFyZSB0cnlpbmcgdG8gYWRkIGEgcHJvZHVjdCB3aXRoIHRoZSB1bml0cyAke2NvZGUoJ2tnJyl9LCB1c2UgYSBkaWZmZXJlbnQgdGVybS5gLFxuICAncGFzdHVyZUdyYXNzIGtleSB1bml0cyBtdXN0IGJlIFxcJ2hhXFwnJzogKHsgcGFyYW1zIH0pID0+XG4gICAgYFRoZSBUZXJtICR7Y29kZShwYXJhbXM/LnRlcm0ubmFtZSl9IGNhbid0IGJlIHVzZWQgYXMgYSBrZXkgZm9yICR7dGVybUxpbmsocGFzdHVyZUdyYXNzKX0uXG4gICAgUGxlYXNlIHVzZSB0aGUgVGVybSBkZXNjcmliaW5nIHRoZSBwbGFudCB3aXRoIHRoZSB1bml0cyAke2NvZGUocGFyYW1zLmV4cGVjdGVkKX0gaW5zdGVhZC5cbiAgICBUaGlzIHdpbGwgaGVscCB1cyBnYXAtZmlsbCB0aGUgYW1vdW50IG9mIGdyYXNzIGNvbnN1bWVkIGJ5IHRoZSBoZXJkLmAsXG4gICd0aGUgc3VtIG9mIGFsbCBwYXN0dXJlR3Jhc3MgdmFsdWVzIG11c3QgYmUgMTAwJzogKHsgcGFyYW1zIH0pID0+XG4gICAgYFRoZSBzdW0gb2YgYWxsICR7dGVybUxpbmsocGFzdHVyZUdyYXNzKX0gdmFsdWVzIG11c3QgYmUgZXF1YWwgdG8gJHtwYXJhbXMuZXhwZWN0ZWR9JS5gLFxuICAnaXMgb3V0c2lkZSBjb25maWRlbmNlIGludGVydmFsJzogKF9lcnJvciwgZXJyb3JDb3VudCwgYWxsRXJyb3JzKSA9PlxuICAgIGAke3VuaXF1ZShhbGxFcnJvcnMuZmxhdE1hcCgoeyBkYXRhUGF0aCwgcGFyYW1zIH0pID0+IHBhcmFtcz8ub3V0bGllcnM/Lm1hcCh2YWx1ZSA9PlxuICAgICAgYFRoZSAke1xuICAgICAgICBkYXRhUGF0aC5pbmNsdWRlcygncHJvZHVjdCcpID8gJ3Byb2R1Y3QnIDogJ2lucHV0J1xuICAgICAgfSB2YWx1ZSAke1xuICAgICAgICBlcnJvckNvdW50ID09PSAxID8gYCR7Y29kZSh2YWx1ZSl9IGAgOiAnJ1xuICAgICAgfWlzICR7XG4gICAgICAgIHZhbHVlID4gcGFyYW1zPy5taW4gPyAnYWJvdmUnIDogJ2JlbG93J1xuICAgICAgfSAke1xuICAgICAgICBwYXJhbXM/LnRocmVzaG9sZCA/IGAke2NvZGUoYCR7KHBhcmFtcy50aHJlc2hvbGQgKyAoKDEgLSBwYXJhbXMudGhyZXNob2xkKSAvIDIpKSAqIDEwMH0lYCl9IG9mYCA6ICcnXG4gICAgICB9IGFsbCAke1xuICAgICAgICBwYXJhbXM/Lmdyb3VwID8gY29kZShwYXJhbXMuZ3JvdXApIDogY29kZShwYXJhbXM/LnRlcm0/Lm5hbWUpXG4gICAgICB9IGRhdGEgaW4gJHtcbiAgICAgICAgY29kZShwYXJhbXM/LmNvdW50cnkubmFtZSlcbiAgICAgIH0gb24gdGhlIEhlc3RpYSBwbGF0Zm9ybS5gXG4gICAgKSkpLmpvaW4oJzwvYnI+Jyl9XG4gICAgPC9icj5cbiAgICBQbGVhc2UgZG91YmxlLWNoZWNrIHRoZXNlIHZhbHVlcyBiZWZvcmUgc3VibWl0dGluZy5gLFxuICAnc2hvdWxkIGJlIGVxdWFsIHRvIGJvdW5kYXJ5JzogKHsgcGFyYW1zIH0pID0+XG4gICAgYFRoZSBjYWxjdWxhdGVkIGFyZWEgZnJvbSAke2NvZGUoJ2JvdW5kYXJ5Jyl9IGlzICR7Y29kZShwYXJhbXM/LmV4cGVjdGVkKX0uXG4gICAgVGhpcyBtYXkgYmUgYW4gZXJyb3IgaWYgdGhlIGJvdW5kYXJ5IHJlcHJlc2VudHMgdGhlIGFyZWEgdW5kZXIgY3VsdGl2YXRpb24uYCxcbiAgJ211c3Qgc3BlY2lmeSB0aGUgZmF0ZSBvZiBjcm9wUmVzaWR1ZSc6ICgpID0+XG4gICAgYEZvciBzaXRlcyBvZiB0eXBlIGNyb3BsYW5kIG9yIHBlcm1hbmVudCBwYXN0dXJlLCBpZiBkYXRhIGNvbXBsZXRlbmVzcyBpcyBtYXJrZWQgJHtjb2RlKHRydWUpfSBmb3IgY3JvcCByZXNpZHVlLCB0aGUgZmF0ZXMgYW5kIHF1YW50aXRpZXMgb2YgdGhlIHJlc2lkdWUgbXVzdCBiZSBzcGVjaWZpZWQuXG4gICAgPGJyLz5cbiAgICBUaGUgcXVhbnRpdHkgbXVzdCBpbmNsdWRlIGJvdGggYWJvdmUgYW5kIGJlbG93IGdyb3VuZCBjcm9wIHJlc2lkdWUsIHdoZXJlIHRoZSBzdW0gb2YgYWJvdmUgZ3JvdW5kIGNyb3AgcmVzaWR1ZSBhbmQgYmVsb3cgZ3JvdW5kIGNyb3AgcmVzaWR1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiB6ZXJvLlxuICAgIFRoaXMgY2FuIGJlIGFkZGVkIHVzaW5nIHRoZSB0ZXJtczpcbiAgICA8dWwgY2xhc3M9XCJpcy1wbC0zIGlzLWxpc3Qtc3R5bGUtZGlzYyBpcy1ub3dyYXBcIj5cbiAgICA8bGk+JHt0ZXJtTGluayh7IGlkOiAnYmVsb3dHcm91bmRDcm9wUmVzaWR1ZScsIG5hbWU6ICdCZWxvdyBncm91bmQgY3JvcCByZXNpZHVlJyB9KX07IGFuZDwvbGk+XG4gICAgPGxpPiR7dGVybUxpbmsoeyBpZDogJ2Fib3ZlR3JvdW5kQ3JvcFJlc2lkdWVUb3RhbCcsIG5hbWU6ICdBYm92ZSBncm91bmQgY3JvcCByZXNpZHVlIHRvdGFsJyB9KX0uPC9saT5cbiAgICA8L3VsPlxuICAgIDxici8+XG4gICAgVGhlIGZhdGUgY2FuIGJlIGFkZGVkIHVzaW5nOlxuICAgIDx1bCBjbGFzcz1cImlzLXBsLTMgaXMtbGlzdC1zdHlsZS1kaXNjIGlzLW5vd3JhcFwiPlxuICAgIDxsaT50aGUgJHtnbG9zc2FyeVR5cGVMaW5rKFRlcm1UZXJtVHlwZS5jcm9wUmVzaWR1ZU1hbmFnZW1lbnQpfSBwcmFjdGljZXM7IGFuZC9vcjwvbGk+XG4gICAgPGxpPnRoZSAke2dsb3NzYXJ5VHlwZUxpbmsoVGVybVRlcm1UeXBlLmNyb3BSZXNpZHVlKX0gcHJvZHVjdHM8L2xpPlxuICAgIDwvdWw+XG4gICAgYCxcbiAgJ3Nob3VsZCBzcGVjaWZ5IHRoZSBmYXRlIG9mIGNyb3BSZXNpZHVlJzogKCkgPT5cbiAgICBgWW91IGhhdmUgbm90IHNwZWNpZmllZCB0aGUgZmF0ZSBvZiB0aGUgY3JvcCByZXNpZHVlLlxuICAgIEFkZGluZyB0aGlzIGluZm9ybWF0aW9uIHdpbGwgaW1wcm92ZSBlbWlzc2lvbnMgYW5kIHNvaWwgY2FyYm9uIHN0b2NrIGNhbGN1bGF0aW9ucy5cbiAgICBUaGUgZmF0ZSBjYW4gYmUgYWRkZWQgdXNpbmc6XG4gICAgPHVsIGNsYXNzPVwiaXMtcGwtMyBpcy1saXN0LXN0eWxlLWRpc2MgaXMtbm93cmFwXCI+XG4gICAgPGxpPnRoZSAke2dsb3NzYXJ5VHlwZUxpbmsoVGVybVRlcm1UeXBlLmNyb3BSZXNpZHVlTWFuYWdlbWVudCl9IHByYWN0aWNlczsgYW5kL29yPC9saT5cbiAgICA8bGk+dGhlICR7Z2xvc3NhcnlUeXBlTGluayhUZXJtVGVybVR5cGUuY3JvcFJlc2lkdWUpfSBwcm9kdWN0czs8L2xpPlxuICAgIDwvdWw+XG4gICAgUmVtZW1iZXIgdG8gc2V0ICR7Y29kZSgnY29tcGxldGVuZXNzLmNyb3BSZXNpZHVlJyl9IHRvICR7Y29kZSh0cnVlKX0gaWYgYm90aCB0aGUgYWJvdmUgYW5kIGJlbG93IGdyb3VuZCBjcm9wIHJlc2lkdWUgcXVhbnRpdGllcyBhbmQgZmF0ZXMgYXJlIHNwZWNpZmllZC5gLFxuICAnc2hvdWxkIGhhdmUgdGhlIHNhbWUgcHJpdmFjeSBhcyB0aGUgcmVsYXRlZCBzb3VyY2UnOiAoeyBwYXJhbXMgfSkgPT5cbiAgICBgVG8gbGluayB0byBhICR7cGFyYW1zPy5kZWZhdWx0U291cmNlPy5kYXRhUHJpdmF0ZSA/ICdwcml2YXRlJyA6ICdwdWJsaWMnfSBTb3VyY2UsXG4gICAgdGhpcyBOb2RlIG5lZWRzIHRvIGJlICR7cGFyYW1zPy5kZWZhdWx0U291cmNlPy5kYXRhUHJpdmF0ZSA/ICdwcml2YXRlJyA6ICdwdWJsaWMnfSBhcyB3ZWxsLlxuICAgIFBsZWFzZSBzZXQgJHtjb2RlKCdkYXRhUHJpdmF0ZScpfT0ke2NvZGUoYCR7cGFyYW1zPy5kZWZhdWx0U291cmNlPy5kYXRhUHJpdmF0ZX1gKX0uYCxcbiAgJ3Nob3VsZCBub3QgdXNlIG5vdCByZWxldmFudCBtb2RlbCc6ICgpID0+XG4gICAgYEFsbCBlbWlzc2lvbnMgc2hvdWxkIGdlbmVyYWxseSBoYXZlIGEgbWV0aG9kIHRpZXIsIHdoaWNoIHN0YXRlcyBob3cgdGhlIGRhdGEgd2VyZSBtb2RlbGxlZCBvciBob3cgdGhlIGRhdGEgd2VyZSBjb2xsZWN0ZWQuXG4gICAgUGxlYXNlIHNlZSB0aGUgJHtzY2hlbWFMaW5rKCdFbWlzc2lvbiNtZXRob2RUaWVyJywgJ3NjaGVtYScpfSBmb3IgdGhlIG9wdGlvbnMgYXZhaWxhYmxlIGFuZCBkZWZpbml0aW9ucyBvZiB0aGUgb3B0aW9ucy5gLFxuICAnc2hvdWxkIG5vdCB1c2Ugbm90IHJlbGV2YW50IG1ldGhvZFRpZXInOiAoKSA9PlxuICAgIGBBbGwgZW1pc3Npb25zIHNob3VsZCBnZW5lcmFsbHkgaGF2ZSBhIG1ldGhvZCB0aWVyLCB3aGljaCBzdGF0ZXMgaG93IHRoZSBkYXRhIHdlcmUgbW9kZWxsZWQgb3IgaG93IHRoZSBkYXRhIHdlcmUgY29sbGVjdGVkLlxuICAgIFBsZWFzZSBzZWUgdGhlICR7c2NoZW1hTGluaygnRW1pc3Npb24jbWV0aG9kVGllcicsICdzY2hlbWEnKX0gZm9yIHRoZSBvcHRpb25zIGF2YWlsYWJsZSBhbmQgZGVmaW5pdGlvbnMgb2YgdGhlIG9wdGlvbnMuYCxcbiAgJ211c3QgaGF2ZSBpbnB1dHMgcmVwcmVzZW50aW5nIHRoZSBmb3JhZ2Ugd2hlbiBzZXQgdG8gdHJ1ZSc6ICgpID0+XG4gICAgYFRoaXMgQ3ljbGUgaW5jbHVkZXMgYW5pbWFscyBhbmQgY29tcGxldGVuZXNzIGlzIHNldCB0byAkeyhjb2RlKHRydWUpKX0gZm9yICR7Y29kZSgnYW5pbWFsRmVlZCcpfS5cbiAgICBIb3dldmVyLCB0aGVyZSBhcmUgbm8gSW5wdXRzIHJlcHJlc2VudGluZyB0aGUgZm9yYWdlIGludGFrZSBieSBhbmltYWxzIGluIHRoZSBDeWNsZSAoSW5wdXRzIHdpdGggdGVybXMgd2hpY2ggY29udGFpbiB0aGUgd29yZHMgXCJmcmVzaCBmb3JhZ2VcIiBhbmQgYSAke2NvZGUoJ3ZhbHVlJyl9KS5cbiAgICBFaXRoZXIsIHNldCBjb21wbGV0ZW5lc3MgdG8gJHsoY29kZShmYWxzZSkpfSBmb3IgJHtjb2RlKCdhbmltYWxGZWVkJyl9LCBtYWtlIHN1cmUgYWxsIFwiZnJlc2ggZm9yYWdlXCIgSW5wdXRzIGhhdmUgYSAke2NvZGUoJ3ZhbHVlJyl9LCBvciBhZGQgb25lIG9yIG1vcmUgSW5wdXRzIHJlcHJlc2VudGluZyB0aGUgZm9yYWdlIGludGFrZS5gLFxuICAnbXVzdCBzcGVjaWZ5IGlzIGl0IGFuIGFuaW1hbCBmZWVkJzogKCkgPT5cbiAgIGBUaGlzIEN5Y2xlIGlzIGFuIGFuaW1hbCBwcm9kdWN0aW9uIEN5Y2xlIGFuZCB0aGlzIElucHV0IGNvdWxkIGJlIGFuIGFuaW1hbCBmZWVkIG9yIGNvdWxkIGJlIGZvciBhbm90aGVyIHVzZS5cbiAgIFBsZWFzZSBzcGVjaWZ5IHRoZSAke3NjaGVtYUxpbmsoJ0lucHV0I2lzQW5pbWFsRmVlZCcsICdpc0FuaW1hbEZlZWQnKX0gZmllbGQgb24gdGhpcyBJbnB1dC5cbiAgIEtub3dpbmcgdGhlIGZhdGUgaXMgZXNzZW50aWFsIHRvIGRpc3Rpbmd1aXNoIElucHV0cyBiZXR3ZWVuIHRob3NlIHdoaWNoIGFyZSBmZWQgdG8gYW5pbWFscyBhbmQgdGhvc2Ugd2hpY2ggYXJlIHVzZWQgZm9yIG90aGVyIHB1cnBvc2VzLmBcbn07XG5cbmV4cG9ydCBjb25zdCBmb3JtYXRDdXN0b21FcnJvck1lc3NhZ2UgPSAobWVzc2FnZT86IHN0cmluZywgZXJyb3I/OiBJVmFsaWRhdGlvbkVycm9yLCBhbGxFcnJvcnM6IElWYWxpZGF0aW9uRXJyb3JbXSA9IFtdKSA9PiB7XG4gIGNvbnN0IGZvcm1hdHRlZE1lc3NhZ2UgPSBtZXNzYWdlICYmIG1lc3NhZ2UgaW4gY3VzdG9tRXJyb3JNZXNzYWdlID9cbiAgICBjdXN0b21FcnJvck1lc3NhZ2VbbWVzc2FnZV0oZXJyb3IhLCBhbGxFcnJvcnMubGVuZ3RoLCBhbGxFcnJvcnMpIDpcbiAgICBtZXNzYWdlO1xuICByZXR1cm4gZm9ybWF0dGVkTWVzc2FnZSA/IGA8cCBjbGFzcz1cImlzLW5vcm1hbFwiPiR7Zm9ybWF0dGVkTWVzc2FnZX08L3A+YCA6ICcnO1xufTtcblxuZXhwb3J0IGNvbnN0IGZvcm1hdEVycm9yID0gKGVycm9yPzogSVZhbGlkYXRpb25FcnJvciwgYWxsRXJyb3JzOiBJVmFsaWRhdGlvbkVycm9yW10gPSBbXSk6IElWYWxpZGF0aW9uRXJyb3IgfCB1bmRlZmluZWQgPT5cbiAgZXJyb3JcbiAgICA/ICh7XG4gICAgICBsZXZlbDogJ2Vycm9yJyxcbiAgICAgIC4uLmVycm9yLFxuICAgICAgbWFwRXJyb3I6IGVycm9yLm1lc3NhZ2UgPT09IG1hcEVycm9yTWVzc2FnZSxcbiAgICAgIG1lc3NhZ2U6IGZvcm1hdEN1c3RvbUVycm9yTWVzc2FnZShlcnJvci5tZXNzYWdlLCBlcnJvciwgYWxsRXJyb3JzKVxuICAgIH0pXG4gICAgOiB1bmRlZmluZWQ7XG5cbmV4cG9ydCBjb25zdCBlcnJvckhhc0Vycm9yID0gKGVycm9yPzogSVZhbGlkYXRpb25FcnJvcikgPT4gZXJyb3IgJiYgKGVycm9yLmxldmVsID09PSAnZXJyb3InIHx8ICFlcnJvci5sZXZlbCk7XG5cbmV4cG9ydCBjb25zdCBlcnJvckhhc1dhcm5pbmcgPSAoZXJyb3I/OiBJVmFsaWRhdGlvbkVycm9yKSA9PiBlcnJvciAmJiBlcnJvci5sZXZlbCA9PT0gJ3dhcm5pbmcnO1xuXG5leHBvcnQgY29uc3QgaXNNaXNzaW5nUHJvcGVydHlFcnJvciA9ICh7IHBhcmFtcyB9OiBJVmFsaWRhdGlvbkVycm9yKSA9PiAhIXBhcmFtcyAmJiAnbWlzc2luZ1Byb3BlcnR5JyBpbiBwYXJhbXM7XG5cbmV4cG9ydCBjb25zdCBpc01pc3NpbmdPbmVPZkVycm9yID0gKHsga2V5d29yZCwgc2NoZW1hUGF0aCB9OiBJVmFsaWRhdGlvbkVycm9yKSA9PlxuICBrZXl3b3JkID09PSAncmVxdWlyZWQnICYmIChzY2hlbWFQYXRoIHx8ICcnKS5pbmNsdWRlcygnb25lT2YnKTtcblxuY29uc3QgaXNGYWlsaW5nS2V5d29yZEVycm9yID0gKHsgcGFyYW1zIH06IElWYWxpZGF0aW9uRXJyb3IpID0+ICEhcGFyYW1zICYmICdmYWlsaW5nS2V5d29yZCcgaW4gcGFyYW1zO1xuXG5leHBvcnQgY29uc3QgZmlsdGVyRXJyb3IgPSAoZXJyb3I6IElWYWxpZGF0aW9uRXJyb3IpID0+IFtcbiAgaXNGYWlsaW5nS2V5d29yZEVycm9yXG5dLmV2ZXJ5KGZ1bmMgPT4gIWZ1bmMoZXJyb3IpKTtcblxuZXhwb3J0IGNvbnN0IG1pc3NpbmdOb2RlRXJyb3JzID0gKGVycm9yczogSVZhbGlkYXRpb25FcnJvcltdKSA9PlxuICBlcnJvcnMuZmlsdGVyKCh7IGtleXdvcmQsIHBhcmFtcyB9KSA9PlxuICAgIGtleXdvcmQgPT09ICdyZXF1aXJlZCcgJiYgKHBhcmFtcz8ubWlzc2luZ1Byb3BlcnR5ID09PSAnQHR5cGUnIHx8IHBhcmFtcz8ubWlzc2luZ1Byb3BlcnR5ID09PSAnQGlkJylcbiAgKTtcbiJdfQ==
295
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsZXMtZXJyb3IubW9kZWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvZmlsZXMvZmlsZXMtZXJyb3IubW9kZWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsK0JBQStCO0FBQy9CLDRCQUE0QjtBQUM1QixPQUFPLEVBQUUsVUFBVSxFQUFFLFlBQVksRUFBUSxZQUFZLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNwRixPQUFPLEVBQUUsV0FBVyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUV0RSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDckQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDN0QsT0FBTyxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsYUFBYSxFQUFFLFlBQVksRUFBRSxZQUFZLEVBQUUsVUFBVSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDdkcsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBNkJoRCxNQUFNLGVBQWUsR0FBRyx5Q0FBeUMsQ0FBQztBQUVsRSxNQUFNLENBQUMsTUFBTSxhQUFhLEdBQUcsQ0FBQyxRQUFRLEdBQUcsRUFBRSxFQUFFLEVBQUU7SUFDN0MsTUFBTSxDQUFDLENBQUMsRUFBRSxHQUFHLEtBQUssQ0FBQyxHQUFHLFFBQVEsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDMUMsT0FBTyxLQUFLLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsVUFBVSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsVUFBVSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDeEYsQ0FBQyxDQUFDO0FBRUYsTUFBTSxnQkFBZ0IsR0FBRyxDQUFDLElBQWtCLEVBQUUsSUFB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QUFDO0FBRTlCLE1BQU0sQ0FBQyxNQUFNLGlCQUFpQixHQUFHLENBQUMsTUFBMEIsRUFBRSxFQUFFLENBQzlELE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsRUFBRSxFQUFFLENBQ3BDLE9BQU8sS0FBSyxVQUFVLElBQUksQ0FBQyxNQUFNLEVBQUUsZUFBZSxLQUFLLE9BQU8sSUFBSSxNQUFNLEVBQUUsZUFBZSxLQUFLLEtBQUssQ0FBQyxDQUNyRyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgY29tcGxleGl0eSAqL1xuLyogZXNsaW50LWRpc2FibGUgbWF4LWxlbiAqL1xuaW1wb3J0IHsgU2NoZW1hVHlwZSwgU2l0ZVNpdGVUeXBlLCBUZXJtLCBUZXJtVGVybVR5cGUgfSBmcm9tICdAaGVzdGlhLWVhcnRoL3NjaGVtYSc7XG5pbXBvcnQgeyB0b1ByZWNpc2lvbiwga2V5VG9MYWJlbCwgdW5pcXVlIH0gZnJvbSAnQGhlc3RpYS1lYXJ0aC91dGlscyc7XG5cbmltcG9ydCB7IHRlcm1UeXBlTGFiZWwgfSBmcm9tICcuLi90ZXJtcy90ZXJtcy5tb2RlbCc7XG5pbXBvcnQgeyBwYXRoVG9BcGlEb2NzUGF0aCB9IGZyb20gJy4uL2VuZ2luZS9lbmdpbmUuc2VydmljZSc7XG5pbXBvcnQgeyBiYXNlVXJsLCBjb2RlLCBjb250YWN0VXNMaW5rLCBleHRlcm5hbExpbmssIGdsb3NzYXJ5TGluaywgc2NoZW1hTGluayB9IGZyb20gJy4uL2NvbW1vbi91dGlscyc7XG5pbXBvcnQgeyBwbHVyYWxpemUgfSBmcm9tICcuLi9jb21tb24vcGx1cmFsaXplJztcblxuLy8gVE9ETzogYWRkIG1vcmUgdmFsaWRhdGlvbiBrZXl3b3JkIGFuZCBwYXJhbXNcbmV4cG9ydCB0eXBlIHZhbGlkYXRpb25FcnJvckxldmVsID0gJ2Vycm9yJyB8ICd3YXJuaW5nJztcbmV4cG9ydCB0eXBlIHZhbGlkYXRpb25FcnJvclBhcmFtID0gJ21pc3NpbmdQcm9wZXJ0eScgfCAndHlwZScgfCAndGVybScgfCAnbW9kZWwnIHwgJ3Byb2R1Y3QnIHwgJ3JhbmdlJyB8ICdub2RlJyB8XG4gICdhbGxvd2VkVmFsdWVzJyB8ICdhbGxvd2VkVmFsdWUnIHwgJ2FkZGl0aW9uYWxQcm9wZXJ0eScgfCAnZXhwZWN0ZWQnIHwgJ2RlZmF1bHQnIHwgJ2N1cnJlbnQnIHwgJ3BlcmNlbnRhZ2UnIHwgJ2tleXMnIHxcbiAgJ3RocmVzaG9sZCcgfCAnb3V0bGllcnMnIHwgJ2NvdW50cnknIHwgJ21pbicgfCAnbWF4JyB8ICdkZWZhdWx0U291cmNlJyB8ICdncm91cCcgfCAnbWVzc2FnZScgfCAnZGlzdGFuY2UnO1xuZXhwb3J0IHR5cGUgdmFsaWRhdGlvbkVycm9yS2V5d29yZCA9ICdyZXF1aXJlZCcgfCAndHlwZScgfCAnaWYnIHwgJ3RoZW4nO1xuXG5leHBvcnQgaW50ZXJmYWNlIElWYWxpZGF0aW9uRXJyb3Ige1xuICBpbmRleD86IG51bWJlcjtcbiAgbm9kZUluZGV4PzogbnVtYmVyO1xuICBsZXZlbD86IHZhbGlkYXRpb25FcnJvckxldmVsO1xuICBkYXRhUGF0aD86IHN0cmluZztcbiAgc2NoZW1hUGF0aD86IHN0cmluZztcbiAga2V5d29yZD86IHZhbGlkYXRpb25FcnJvcktleXdvcmQ7XG4gIG1lc3NhZ2U6IHN0cmluZztcbiAgcGFyYW1zPzogeyBba2V5IGluIHZhbGlkYXRpb25FcnJvclBhcmFtXT86IGFueSB9O1xuICBtYXBFcnJvcj86IGJvb2xlYW47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSVZhbGlkYXRpb25FcnJvcldpdGhJbmRleCB7XG4gIGVycm9yOiBJVmFsaWRhdGlvbkVycm9yW107XG4gIGluZGV4OiBudW1iZXI7XG4gIGNoYW5nZWQ/OiBib29sZWFuO1xufVxuXG50eXBlIGhhbmRsZUVycm9yRnVuYyA9IChlcnJvcjogSVZhbGlkYXRpb25FcnJvciwgZXJyb3JDb3VudD86IG51bWJlciwgYWxsRXJyb3JzPzogSVZhbGlkYXRpb25FcnJvcltdKSA9PiBzdHJpbmc7XG5cbmNvbnN0IG1hcEVycm9yTWVzc2FnZSA9ICdkb2VzIG5vdCBjb250YWluIGxhdGl0dWRlIGFuZCBsb25naXR1ZGUnO1xuXG5leHBvcnQgY29uc3QgcGFyc2VEYXRhUGF0aCA9IChkYXRhUGF0aCA9ICcnKSA9PiB7XG4gIGNvbnN0IFtfLCAuLi5wYXRoc10gPSBkYXRhUGF0aC5zcGxpdCgnLicpO1xuICByZXR1cm4gcGF0aHMubWFwKHBhdGggPT4gKHsgcGF0aCwgbGFiZWw6IGtleVRvTGFiZWwocGF0aC5yZXBsYWNlKC9cXFtcXGQrXFxdL2csICcnKSkgfSkpO1xufTtcblxuY29uc3QgZ2xvc3NhcnlUeXBlTGluayA9ICh0eXBlOiBUZXJtVGVybVR5cGUsIHRleHQgPSB0ZXJtVHlwZUxhYmVsKHR5cGUpKSA9PiBleHRlcm5hbExpbmsoYCR7YmFzZVVybCgpfS9nbG9zc2FyeT90ZXJtVHlwZT0ke3R5cGV9YCwgdGV4dCk7XG5jb25zdCB0ZXJtTGluayA9ICh7IGlkLCBuYW1lIH06IFBhcnRpYWw8VGVybT4pID0+IGV4dGVybmFsTGluayhgJHtiYXNlVXJsKCl9L3Rlcm0vJHtpZH1gLCBuYW1lIHx8IGlkKTtcbmNvbnN0IGRhdGVGb3JtYXRNZXNzYWdlID1cbiAgYHNob3VsZCBmb2xsb3cgdGhlIElTTyA4NjAxIGRhdGUgZm9ybWF0LCBlLmcuICR7Y29kZSgyMDAwKX0sIG9yICR7Y29kZSgnMjAwMC0xMicpfSwgb3IgJHtjb2RlKCcyMDAwLTEyLTMwJyl9YDtcbmNvbnN0IG1vZGVsTGluayA9ICh0ZXJtOiBUZXJtLCBtb2RlbDogVGVybSkgPT4gYFxuICA8YSBocmVmPVwiJHtwYXRoVG9BcGlEb2NzUGF0aChtb2RlbFsnQGlkJ10sIHRlcm1bJ0BpZCddKX1cIiB0YXJnZXQ9XCJfYmxhbmtcIj5cbiAgICA8c3BhbiBjbGFzcz1cInByLTFcIj4ke21vZGVsLm5hbWV9PC9zcGFuPlxuICAgIDxzcGFuPihWaWV3IERvY3MpPC9zcGFuPlxuICA8L2E+XG5gO1xuY29uc3QgdGhyZXNob2xkID0gKHZhbHVlOiBudW1iZXIpID0+IGNvZGUoYCR7dmFsdWUgKiAxMDB9JWApO1xuXG5jb25zdCBub1RpbGxhZ2U6IFBhcnRpYWw8VGVybT4gPSB7IGlkOiAnbm9UaWxsYWdlJywgbmFtZTogJ05vIHRpbGxhZ2UnIH07XG5jb25zdCBwYXN0dXJlR3Jhc3M6IFBhcnRpYWw8VGVybT4gPSB7IGlkOiAncGFzdHVyZUdyYXNzJywgbmFtZTogJ1Bhc3R1cmUgZ3Jhc3MnIH07XG5cbmNvbnN0IGlkTm90Rm91bmREZWZhdWx0TWVzc2FnZSA9IGBcbiAgSWYgeW91IGFyZSB1c2luZyB0aGUgJHtjb2RlKCduYW1lJyl9IG9mIHRoZSBUZXJtLCBtYWtlIHN1cmUgdG8gdXNlICR7Y29kZSgndGVybS5uYW1lJyl9IGNvbHVtbjtcbiAgaWYgeW91IGFyZSB1c2luZyB0aGUgJHtjb2RlKCdAaWQnKX0gb2YgdGhlIFRlcm0sIHVzZSB0aGUgJHtjb2RlKCd0ZXJtLkBpZCcpfSBjb2x1bW4gaW5zdGVhZC5cbmAudHJpbSgpO1xuXG5leHBvcnQgY29uc3QgaXNNaWdyYXRpb25FcnJvciA9ICh7IHBhcmFtcyB9OiBJVmFsaWRhdGlvbkVycm9yKSA9PiBwYXJhbXM/LmN1cnJlbnQgJiYgKCdleHBlY3RlZCcgaW4gcGFyYW1zKTtcblxuZXhwb3J0IGNvbnN0IG1pZ3JhdGlvbkVycm9yTWVzc2FnZSA9ICh7IHBhcmFtcyB9OiBJVmFsaWRhdGlvbkVycm9yKSA9PlxuICBwYXJhbXM/LmV4cGVjdGVkXG4gICAgPyBgVGhlIFRlcm0gJHtjb2RlKHBhcmFtcy5jdXJyZW50KX0gd2FzIHVwZGF0ZWQsIHBsZWFzZSB1c2UgdGhpcyBUZXJtIGluc3RlYWQ6ICR7Y29kZShwYXJhbXMuZXhwZWN0ZWQpfS5gXG4gICAgOiBgVGhlIFRlcm0gJHtjb2RlKHBhcmFtcy5jdXJyZW50KX0gd2FzIGRlbGV0ZWQuIFBsZWFzZSBzZWFyY2ggdGhlICR7Z2xvc3NhcnlMaW5rKCdHbG9zc2FyeScpfSBmb3IgYSBuZXcgVGVybS5gO1xuXG5jb25zdCBpZE5vdEZvdW5kRXJyb3I6IGhhbmRsZUVycm9yRnVuYyA9IChfZXJyb3IsIF9lcnJvckNvdW50LCBhbGxFcnJvcnMpID0+IHtcbiAgY29uc3QgbWlncmF0aW9uRXJyb3JzID0gYWxsRXJyb3JzLmZpbHRlcihpc01pZ3JhdGlvbkVycm9yKTtcbiAgY29uc3Qgbm9NaWdyYXRpb25FcnJvcnMgPSBhbGxFcnJvcnMuZmlsdGVyKGVycm9yID0+ICFpc01pZ3JhdGlvbkVycm9yKGVycm9yKSk7XG4gIHJldHVybiBgXG4gICAgPHA+RG9lcyBub3QgZXhpc3QgaW4gSGVzdGlhLjwvcD5cbiAgICAke25vTWlncmF0aW9uRXJyb3JzLmxlbmd0aCA/IGA8cD4ke2lkTm90Rm91bmREZWZhdWx0TWVzc2FnZX08L3A+YCA6ICcnfVxuICAgICR7dW5pcXVlKG1pZ3JhdGlvbkVycm9ycy5tYXAobWlncmF0aW9uRXJyb3JNZXNzYWdlKSkuam9pbignPC9icj4nKX1cbiAgYDtcbn07XG5cbi8vIHNldCBtZXNzYWdlIGFzIGVtcHR5IHRvIG5vdCBkaXNwbGF5IGl0XG5jb25zdCBjdXN0b21FcnJvck1lc3NhZ2U6IHtcbiAgW2tleTogc3RyaW5nXTogaGFuZGxlRXJyb3JGdW5jO1xufSA9IHtcbiAgJ3Nob3VsZCBoYXZlIHJlcXVpcmVkIHByb3BlcnR5IFxcJ0BpZFxcJyc6IGlkTm90Rm91bmRFcnJvcixcbiAgJ3Nob3VsZCBoYXZlIHJlcXVpcmVkIHByb3BlcnR5IFxcJ0B0eXBlXFwnJzogKCkgPT4gJycsXG4gICdzaG91bGQgaGF2ZSByZXF1aXJlZCBwcm9wZXJ0eSBcXCdpZFxcJyc6IGlkTm90Rm91bmRFcnJvcixcbiAgJ3Nob3VsZCBtYXRjaCBleGFjdGx5IG9uZSBzY2hlbWEgaW4gb25lT2YnOiAoKSA9PiAnJyxcbiAgJ3Nob3VsZCBtYXRjaCBzb21lIHNjaGVtYSBpbiBhbnlPZic6ICgpID0+ICcnLFxuICAnc2hvdWxkIG1hdGNoIFwidGhlblwiIHNjaGVtYSc6ICgpID0+ICcnLFxuICAnc2hvdWxkIE5PVCBoYXZlIGFkZGl0aW9uYWwgcHJvcGVydGllcyc6ICh7IHBhcmFtcyB9LCBlcnJvckNvdW50KSA9PlxuICAgIGVycm9yQ291bnQgPT09IDEgP1xuICAgICAgYFRoZSBmb2xsb3dpbmcgZmllbGQgZG9lcyBub3QgZXhpc3Q6ICR7cGFyYW1zPy5hZGRpdGlvbmFsUHJvcGVydHl9IG9yIGlzIG5vdCBhbGxvd2VkIGluIHRoaXMgY2FzZS5gIDpcbiAgICAgIGBTaG91bGQgbm90IGhhdmUgYWRkaXRpb25hbCBwcm9wZXJ0aWVzLmAsXG4gICdzaG91bGQgTk9UIGJlIHZhbGlkJzogKCkgPT4gJ1Nob3VsZCBub3QgYmUgdXNlZCBpbiB0aGlzIGNhc2UuJyxcbiAgJ3Nob3VsZCBtYXRjaCBwYXR0ZXJuIFwiXlxcXFxkezEzfSRcIic6ICgpID0+IGBzaG91bGQgYmUgY29tcG9zZWQgb2YgMTMgbnVtYmVyc2AsXG4gICdzaG91bGQgbWF0Y2ggcGF0dGVybiBcIl5bMC05XXs0fSgtWzAtOV17Mn0pPygtWzAtOV17Mn0pPyRcIic6ICgpID0+IGRhdGVGb3JtYXRNZXNzYWdlLFxuICAnc2hvdWxkIG1hdGNoIHBhdHRlcm4gXCJeKFswLTldezR9fC0pKC1bMC05XXsyfSk/KC1bMC05XXsyfSk/JFwiJzogKCkgPT4gZGF0ZUZvcm1hdE1lc3NhZ2UsXG4gICdzaG91bGQgbWF0Y2ggcGF0dGVybiBcIl4oWzAtOV17NH18LSkoLVswLTldezJ9KT8oLVswLTldezJ9KT8oW1RdWzAtMl1bMC05XVxcOlswLTVdWzAtOV1cXDpbMC01XVswLTldKChcXCt8XFwtKVswLTFdWzAtOV06WzAtNV1bMC05XSk/KT8kXCInOiAoKSA9PiBkYXRlRm9ybWF0TWVzc2FnZSxcbiAgJ3Nob3VsZCBiZSBsaW5rZWQgdG8gYW4gZXhpc3Rpbmcgbm9kZSc6ICh7IHBhcmFtcyB9KSA9PlxuICAgIGBZb3VyIHVwbG9hZCBkb2VzIG5vdCBjb250YWluIHRoZSAke3BhcmFtcz8ubm9kZT8udHlwZX0gd2l0aCAke2NvZGUoYGlkPSR7cGFyYW1zPy5ub2RlPy5pZH1gKX0uXG4gICAgSWYgeW91IGFyZSB0cnlpbmcgdG8gbGluayB0byBhbiBleGlzdGluZyAke3BhcmFtcz8ubm9kZT8udHlwZX0gb24gdGhlIEhlc3RpYSBwbGF0Zm9ybSwgeW91IG11c3QgdXNlICR7Y29kZShgQGlkPSR7cGFyYW1zPy5ub2RlPy5pZH1gKX0gaW5zdGVhZC5cbiAgICBPdGhlcndpc2UgeW91IG11c3QgaW5jbHVkZSBhIGZ1bGwgJHtwYXJhbXM/Lm5vZGU/LnR5cGV9IHdpdGggaWQgJHtjb2RlKHBhcmFtcz8ubm9kZT8uaWQpfS5gLFxuICAnbXVzdCBiZSB3aXRoaW4gdGhlIGNvdW50cnknOiAoKSA9PiBgVGhlIGNvdW50cnkgcHJvdmlkZWQgZG9lcyBub3QgY29udGFpbiB0aGUgcmVnaW9uIHByb3ZpZGVkLiBQbGVhc2UgY2hlY2tcbiAgdGhlIGNvdW50cnkgZm9yIGVycm9ycyBvciB0aGUgcmVnaW9uIGZvciBlcnJvcnMsIGFuZCByZWZlcmVuY2UgdGhlICR7Z2xvc3NhcnlMaW5rKCdHbG9zc2FyeSBvZiBUZXJtcycpfS5gLFxuICBbbWFwRXJyb3JNZXNzYWdlXTogKHsgZGF0YVBhdGgsIHBhcmFtcyB9LCBlcnJvckNvdW50KSA9PlxuICAgIGVycm9yQ291bnQgPT09IDFcbiAgICAgID8gYFRoZSBsb25naXR1ZGUgYW5kIGxhdGl0dWRlIHByb3ZpZGVkIGFyZSR7XG4gICAgICAgIHBhcmFtcz8uZGlzdGFuY2UgPyBgICR7cGFyYW1zPy5kaXN0YW5jZX1rbXNgOiAnJ1xuICAgICAgfSBvdXRzaWRlIG9mIHRoZSAke2RhdGFQYXRoLnN1YnN0cmluZygxKX0gcHJvdmlkZWQuXG4gICAgICBQbGVhc2UgY2hlY2sgdGhlIGxvbmdpdHVkZSBhbmQgbGF0aXR1ZGUgZm9yIGVycm9ycyBvciBjaGVjayBpZiB0aGUgd3JvbmcgJHtkYXRhUGF0aC5zdWJzdHJpbmcoMSl9IGZyb20gdGhlICR7Z2xvc3NhcnlUeXBlTGluayhUZXJtVGVybVR5cGUucmVnaW9uLCAnR2xvc3NhcnknKX0gd2FzIHVzZWQuXG4gICAgICAke3BhcmFtcz8uZXhwZWN0ZWQgPyBgSGludDogdGhlIGNvb3JkaW5hdGVzIGFwcGVhciB0byBiZSBsb2NhdGVkIGluIHRoZSBmb2xsb3dpbmcgJHtkYXRhUGF0aC5zdWJzdHJpbmcoMSl9OiAke3Rlcm1MaW5rKHsgaWQ6ICdwYXJhbXMuZXhwZWN0ZWQnIH0pfWAgOiAnJ31gXG4gICAgICA6IGBUaGUgcmVnaW9uIHByb3ZpZGVkIGRvZXMgbm90IGNvbnRhaW4gdGhlIGxvbmdpdHVkZSBhbmQgbGF0aXR1ZGUgcHJvdmlkZWQuXG4gICAgICBQbGVhc2UgY2hlY2sgdGhlIGxvbmdpdHVkZSBhbmQgbGF0aXR1ZGUgZm9yIGVycm9ycyBvciB0aGUgcmVnaW9uIGZvciBlcnJvciwgYW5kIHJlZmVyZW5jZSB0aGUgJHtnbG9zc2FyeVR5cGVMaW5rKFRlcm1UZXJtVHlwZS5yZWdpb24sICdHbG9zc2FyeSBvZiBUZXJtcycpfS5gLFxuICAnc3VtIG5vdCBlcXVhbCB0byAxMDAlIGZvciBzYW5kQ29udGVudCwgc2lsdENvbnRlbnQsIGNsYXlDb250ZW50JzpcbiAgICAoKSA9PiBgVGhlIHN1bSBvZiBTYW5kLCBTaWx0LCBhbmQgQ2xheSBjb250ZW50IHNob3VsZCBlcXVhbCAxMDAlIGZvciBlYWNoIHNvaWwgZGVwdGggaW50ZXJ2YWwuYCxcbiAgJ2lzIG91dHNpZGUgdGhlIGFsbG93ZWQgcmFuZ2UnOiAoeyBwYXJhbXMgfSwgZXJyb3JDb3VudCkgPT5cbiAgICBgJHtcbiAgICAgIGVycm9yQ291bnQgPT09IDFcbiAgICAgICAgPyBwYXJhbXM/LnRlcm1cbiAgICAgICAgICAgID8gYFRoZSB2YWx1ZSBmb3IgJHtjb2RlKHBhcmFtcz8udGVybVsnQGlkJ10gfHwgcGFyYW1zPy50ZXJtLm5hbWUpfSBpcyBvdXRzaWRlIHRoZSByYW5nZSBlc3RhYmxpc2hlZCBmb3IgdGhlIHNvaWwgdGV4dHVyZSB5b3UgcHJvdmlkZWQuXG4gICAgICAgICAgICBGb3IgdGhpcyBzb2lsIHRleHR1cmUsIHRoZSBtYXhpbXVtICR7Y29kZShwYXJhbXM/LnRlcm1bJ0BpZCddIHx8IHBhcmFtcz8udGVybS5uYW1lKX0gaXMgJHtwYXJhbXM/LnJhbmdlPy5tYXh9IGFuZCB0aGUgbWluaW11bSBpcyAke3BhcmFtcz8ucmFuZ2U/Lm1pbn0uYFxuICAgICAgICAgICAgOiBgRG9lcyBub3QgbWF0Y2ggdGhlIHBvc3NpYmxlIHJhbmdlcyBvZiBzYW5kLCBzaWx0IGFuZCBjbGF5IGNvbnRlbnQuYFxuICAgICAgICA6IGBFYWNoIHNvaWwgdGV4dHVyZSBoYXMgYSBtYXhpbXVtIGFuZCBtaW5pbXVtIHZhbHVlIGZvciBzYW5kLCBzaWx0LCBhbmQgY2xheSBjb250ZW50LlxuICAgICAgICBBdCBsZWFzdCBvbmUgbWVhc3VyZW1lbnQgb2Ygc2FuZCwgc2lsdCwgb3IgY2xheSBjb250ZW50IGRvZXMgbm90IG1hdGNoIHRoZSBwb3NzaWJsZSByYW5nZSBmb3IgdGhlIHNwZWNpZmllZCBzb2lsIHRleHR1cmUuYFxuICAgIH1cbiAgICAke1xuICAgICAgZXJyb3JDb3VudCA9PT0gMVxuICAgICAgICA/IGBQbGVhc2UgY2hlY2sgdGhlIG1lYXN1cmVtZW50LCBpdHMgZGVwdGggaW50ZXJ2YWxzLCBhbmQgdGhlIGRhdGVzIG9mIHRoZSBtZWFzdXJlbWVudCBvciB1cGRhdGUgdGhlIHNvaWwgdGV4dHVyZSBpZiBuZWVkZWQuYFxuICAgICAgICA6IGBQbGVhc2UgY2hlY2sgeW91ciBtZWFzdXJlbWVudHMsIHRoZWlyIGRlcHRoIGludGVydmFscywgYW5kIHRoZSBkYXRlcyBvZiB0aGUgbWVhc3VyZW1lbnRzIG9yIHVwZGF0ZSB0aGUgc29pbCB0ZXh0dXJlcyBpZiBuZWVkZWQuYFxuICAgIH1gLFxuICAnc2hvdWxkIGJlIGVxdWFsIHRvIG9uZSBvZiB0aGUgYWxsb3dlZCB2YWx1ZXMnOlxuICAgICh7IHBhcmFtcyB9KSA9PiBgTXVzdCBoYXZlIG9uZSBvZiB0aGVzZSB2YWx1ZXM6ICR7cGFyYW1zPy5hbGxvd2VkVmFsdWVzLm1hcChjb2RlKS5qb2luKCcsICcpfWAsXG4gICdzaG91bGQgYmUgZXF1YWwgdG8gY29uc3RhbnQnOlxuICAgICh7IHBhcmFtcyB9KSA9PiBgTXVzdCBiZTogJHtjb2RlKHBhcmFtcz8uYWxsb3dlZFZhbHVlKX1gLFxuICAnaXMgbm90IGFsbG93ZWQgZm9yIHRoaXMgY2hhcmFjdGVyaXNlZEluZGljYXRvcic6ICh7IHBhcmFtcyB9LCBlcnJvckNvdW50KSA9PlxuICAgIGAke2Vycm9yQ291bnQgPT09IDEgP1xuICAgICAgYCR7XG4gICAgICAgIHBhcmFtcz8uYWxsb3dlZFZhbHVlcy5sZW5ndGggP1xuICAgICAgICAgIGBjYW4gb25seSBiZSB1c2VkIHdpdGggb25lIG9mIHRoZXNlIG1ldGhvZHM6ICR7cGFyYW1zPy5hbGxvd2VkVmFsdWVzLm1hcChjb2RlKS5qb2luKCcsICcpfWAgOlxuICAgICAgICAgIGBkb2VzIG5vdCBjdXJyZW50bHkgaGF2ZSBhbnkgbWV0aG9kIGFsbG93ZWQuIFBsZWFzZSAke2NvbnRhY3RVc0xpbmsoKX0gdG8gY2hhbmdlIHRoaXMuYFxuICAgICAgfS5gIDpcbiAgICAgIGBTb21lIFRlcm1zIGFyZSBub3QgYWxsb3dlZCB3aXRoIHRoZSBtZXRob2QgeW91IHNlbGVjdGVkLmB9XG4gICAgWW91IGNhbiBmaW5kIHRoZSBsaXN0IG9mIGFsbG93ZWQgbWV0aG9kcyBmb3IgZWFjaCBUZXJtIGJ5IGNsaWNraW5nIG9uIHRoZW0uYCxcbiAgJ3Nob3VsZCBjb250YWluIGEgdmFsaWQgaXRlbSc6ICh7IGRhdGFQYXRoIH0pID0+IHtcbiAgICBjb25zdCBwYXRocyA9IHBhcnNlRGF0YVBhdGgoZGF0YVBhdGghKTtcbiAgICByZXR1cm4gcGF0aHMubGVuZ3RoID49IDIgP1xuICAgICAgYFRoZSAke3BhdGhzW3BhdGhzLmxlbmd0aCAtIDFdLnBhdGh9IHJlbGF0ZWQgdG8gdGhpcyAke3BsdXJhbGl6ZShwYXRoc1twYXRocy5sZW5ndGggLSAyXS5sYWJlbCwgMSl9IGFyZSBpbnZhbGlkYCA6XG4gICAgICBgVGhlICR7cGF0aHNbMF0ucGF0aH0gYXJlIGludmFsaWRgO1xuICB9LFxuICAnbWF5IGJlIGJldHdlZW4gMCBhbmQgMTAwJzogKCkgPT4gJ1BlcmNlbnRhZ2VzIHNob3VsZCBiZSBiZXR3ZWVuIDAgYW5kIDEwMCwgbm90IDAgYW5kIDEuIFRoaXMgbWF5IGJlIGFuIGVycm9yLicsXG4gICdtYXkgbm90IGFsbCBiZSBzZXQgdG8gZmFsc2UnOiAoKSA9PlxuICAgIGBFdmVyeSB2YWx1ZSBpbiB0aGUgZGF0YSBjb21wbGV0ZW5lc3MgYXNzZXNzbWVudCBpcyAke2NvZGUoZmFsc2UpfS4gWW91IG1heSBoYXZlIGZvcmdvdHRlbiB0byBmaWxsIGl0IGluLlxuICBGb3IgaW5mb3JtYXRpb24gb24gaG93IHRvIGZpbGwgaXQgaW4sIHBsZWFzZSBzZWUgdGhlICR7c2NoZW1hTGluaygnQ3ljbGUjY29tcGxldGVuZXNzJywgJ3NjaGVtYScpfS5gLFxuICAnbWF5IG5vdCBiZSBlbXB0eSc6ICgpID0+ICdpZiB0aGlzIHZhbHVlIHNpZ25pZmllcyBubyBkYXRhLCBIZXN0aWEgb25seSBhY2NlcHRzIFwiLVwiIG9yIGVtcHR5IGZvciBubyBkYXRhJyxcbiAgJ21heSBub3QgYmUgMCc6ICh7IGRhdGFQYXRoIH0sIGVycm9yQ291bnQpID0+IHtcbiAgICBjb25zdCBwYXRocyA9IHBhcnNlRGF0YVBhdGgoZGF0YVBhdGghKTtcbiAgICByZXR1cm4gYEFkZGluZyBhIHZhbHVlICR7ZXJyb3JDb3VudCA9PT0gMSA/IGAgdG8gZXZlcnkgJHtwYXRoc1swXS5sYWJlbH0gYCA6ICcgJ30gaXMgaGlnaGx5IHJlY29tbWVuZGVkXG4gICAgICBhcyB3aXRob3V0IHRoaXMgaXQgaXMgbm90IHBvc3NpYmxlIHRvIGNhbGN1bGF0ZSB0aGUgSW1wYWN0IEFzc2Vzc21lbnQuXG4gICAgICBJZiB0aGUgYW1vdW50IHByb2R1Y2VkIGlzIHplcm8sIHdlIHJlY29tbWVuZCBzZXR0aW5nIHZhbHVlIHRvIDAuYDtcbiAgfSxcbiAgJ3RoZSBzdW0gb2YgYWJvdmUgZ3JvdW5kIGNyb3AgcmVzaWR1ZSBhbmQgYmVsb3cgZ3JvdW5kIGNyb3AgcmVzaWR1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiB6ZXJvJzogKCkgPT5cbiAgICBgRm9yIHNpdGVzIG9mIHR5cGUgJHtjb2RlKFNpdGVTaXRlVHlwZS5jcm9wbGFuZCl9IG9yICR7Y29kZShTaXRlU2l0ZVR5cGVbJ3Blcm1hbmVudCBwYXN0dXJlJ10pfSxcbiAgICBpZiBkYXRhIGNvbXBsZXRlbmVzcyBpcyBtYXJrZWQgJHtjb2RlKHRydWUpfSBmb3IgY3JvcCByZXNpZHVlLFxuICAgIHRoZSBzdW0gb2YgdGhlIEFib3ZlIGdyb3VuZCBjcm9wIHJlc2lkdWUgdGVybXMgc2hvdWxkIGJlIGdyZWF0ZXIgdGhhbiB6ZXJvLFxuICAgIGFuZCBCZWxvdyBncm91bmQgY3JvcCByZXNpZHVlIHNob3VsZCBiZSBncmVhdGVyIHRoYW4gemVyby5gLFxuICAnbG9uZ0ZhbGxvd1BlcmlvZCBtdXN0IGJlIGxvd2VyIHRoYW4gNSB5ZWFycyc6ICgpID0+XG4gICAgYFlvdXIgbG9uZ0ZhbGxvd1BlcmlvZCBpcyBncmVhdGVyIHRoYW4gZml2ZSB5ZWFycy5cbiAgICBGYWxsb3cgaXMgZGVmaW5lZCBieSBGQU9TVEFUIGFzIGxhbmQgbGVmdCB1bmN1bHRpdmF0ZWQgZm9yIGJldHdlZW4gMSBhbmQgNSB5ZWFycyxcbiAgICBhbmQgdGhpcyBkZWZpbml0aW9uIGlzIHVzZWQgZm9yIEhlc3RpYSBhbHNvLmAsXG4gICdzaG91bGQgYmUgd2l0aGluIHBlcmNlbnRhZ2Ugb2YgZGVmYXVsdCB2YWx1ZSc6ICh7IHBhcmFtcyB9LCBlcnJvckNvdW50KSA9PlxuICAgIGVycm9yQ291bnQgPT09IDEgP1xuICAgICAgYFRoaXMgdmFsdWUgaXMgwrEke3RocmVzaG9sZChwYXJhbXM/LnRocmVzaG9sZCl9IGRpZmZlcmVudCB0byBvdXIgZGVmYXVsdCB2YWx1ZSB3aGljaCBpcyAke3BhcmFtcz8uZGVmYXVsdH0uXG4gICAgICBQbGVhc2UgY2hlY2sgeW91ciB1cGxvYWRlZCBkYXRhIGFzIHRoaXMgbWF5IGJlIGFuIGVycm9yLmAgOlxuICAgICAgYFRoaXMgdmFsdWUgaXMgc3Vic3RhbnRpYWxseSBkaWZmZXJlbnQgdGhhbiBvdXIgZGVmYXVsdCB2YWx1ZS5cbiAgICAgIFBsZWFzZSBjaGVjayB5b3VyIHVwbG9hZGVkIGRhdGEgYXMgdGhpcyBtYXkgYmUgYW4gZXJyb3IuYCxcbiAgJ3RoZSB2YWx1ZSBwcm92aWRlZCBpcyBub3QgY29uc2lzdGVudCB3aXRoIHRoZSBtb2RlbCByZXN1bHQnOiAoeyBwYXJhbXMgfSwgZXJyb3JDb3VudCkgPT5cbiAgICBgVGhlIGV4cGVjdGVkIHJlc3VsdCBmb3IgJHtjb2RlKHBhcmFtcz8udGVybS5uYW1lKX1cbiAgICAke3BhcmFtcz8ubW9kZWw/Lm5hbWUgPyBgdXNpbmcgJHttb2RlbExpbmsocGFyYW1zPy50ZXJtLCBwYXJhbXM/Lm1vZGVsKX0gYCA6ICcnfVxuICAgIGZyb20gdGhlIGRhdGEgcHJvdmlkZWQgaW4gdGhlIHVwbG9hZCBpcyAke1xuICAgICAgZXJyb3JDb3VudCA9PT0gMVxuICAgICAgICA/IGAke2NvZGUodG9QcmVjaXNpb24ocGFyYW1zPy5leHBlY3RlZCwgMykpfSwgYnV0IHRoZSB2YWx1ZSBpbiB0aGUgdXBsb2FkIGlzICR7Y29kZSh0b1ByZWNpc2lvbihwYXJhbXM/LmN1cnJlbnQsIDMpKX0uXG4gICAgICAgICR7cGFyYW1zPy50aHJlc2hvbGQgPyBgT3VyIHRocmVzaG9sZCBpcyDCsSR7dGhyZXNob2xkKHBhcmFtcz8udGhyZXNob2xkKX0uYCA6ICcnfVxuICAgICAgICBQbGVhc2UgZWl0aGVyOlxuICAgICAgICA8dWwgY2xhc3M9XCJpcy1wbC0zIGlzLWxpc3Qtc3R5bGUtZGVjaW1hbFwiPlxuICAgICAgICA8bGk+Q2hlY2sgdGhlICR7cGFyYW1zPy50ZXJtLnRlcm1UeXBlfSB2YWx1ZSB5b3UgcHJvdmlkZWQ7PC9saT5cbiAgICAgICAgPGxpPkNoZWNrIHRoZSBkYXRhIHlvdSBwcm92aWRlZCB3aGljaCBpcyB0aGUgaW5wdXQgaW50byB0aGlzIG1vZGVsOzwvbGk+XG4gICAgICAgIDxsaT5DYXJlZnVsbHkgcmVhZCB0aGUgZG9jdW1lbnRhdGlvbiB0byB1bmRlcnN0YW5kIGlmIHdlIHVzZWQgYSBkZWZhdWx0IHByb3BlcnR5IGFzIHBhcnQgb2YgdGhlIGNhbGN1bGF0aW9ucy48L2xpPlxuICAgICAgICA8L3VsPmBcbiAgICAgICAgOiAnbm90IGNvbnNpc3RlbnQgd2l0aCB0aGUgbW9kZWwgcmVzdWx0LidcbiAgICB9YCxcbiAgJ3RoZSBtZWFzdXJlbWVudCBwcm92aWRlZCBtaWdodCBiZSBpbiBlcnJvcic6ICh7IHBhcmFtcyB9LCBlcnJvckNvdW50KSA9PlxuICAgIGBUaGUgZXhwZWN0ZWQgdmFsdWUgZm9yICR7Y29kZShwYXJhbXM/LnRlcm0ubmFtZSl9XG4gICAgJHtwYXJhbXM/Lm1vZGVsPy5uYW1lID8gYHVzaW5nICR7bW9kZWxMaW5rKHBhcmFtcz8udGVybSwgcGFyYW1zPy5tb2RlbCl9IGAgOiAnJ31cbiAgICBmcm9tIHRoZSBkYXRhIHByb3ZpZGVkIGluIHRoZSB1cGxvYWQgaXMgJHtcbiAgICAgIGVycm9yQ291bnQgPT09IDEgP1xuICAgICAgICBgJHtjb2RlKHRvUHJlY2lzaW9uKHBhcmFtcz8uZXhwZWN0ZWQsIDMpKX0sIGJ1dCB0aGUgdmFsdWUgaW4gdGhlIHVwbG9hZCBpcyAke2NvZGUodG9QcmVjaXNpb24ocGFyYW1zPy5jdXJyZW50LCAzKSl9LlxuICAgICAgICAke3BhcmFtcz8udGhyZXNob2xkID8gYE91ciB0aHJlc2hvbGQgaXMgwrEke3RocmVzaG9sZChwYXJhbXM/LnRocmVzaG9sZCl9LmAgOiAnJ31gIDpcbiAgICAgICAgYG5vdCBjb25zaXN0ZW50IHdpdGggdGhlIG1vZGVsIHJlc3VsdC5gXG4gICAgfWAsXG4gICdtdXN0IGJlIGVxdWFsIHRvIHByZXZpb3VzIHByb2R1Y3QgbXVsdGlwbGllZCBieSB0aGUgc2hhcmUnOiAoKSA9PlxuICAgIGBQcm9kdWN0cyBmcm9tIGEgdHJhbnNmb3JtYXRpb24gd2hpY2ggYXJlIGFuIElucHV0IGluIHRvIHRoZSBuZXh0IHRyYW5zZm9ybWF0aW9uIG11c3QgZm9sbG93IHRoZSBmb2xsb3dpbmcgcnVsZTpcbiAgICAke2NvZGUoJ3ByZXZpb3VzLnByb2R1Y3QudmFsdWUgKiBjdXJyZW50LnRyYW5zZm9ybWVkU2hhcmUgLyAxMDAgPT0gY3VycmVudC5pbnB1dC52YWx1ZScpfWAsXG4gICdhdCBsZWFzdCBvbmUgSW5wdXQgbXVzdCBiZSBhIFByb2R1Y3Qgb2YgdGhlIEN5Y2xlJzogKCkgPT5cbiAgICBgQSBUcmFuc2Zvcm1hdGlvbiBjb252ZXJ0cyBhIFByb2R1Y3QgZnJvbSBhIEN5Y2xlIGludG8gYW5vdGhlciBQcm9kdWN0LlxuICAgIFRoZXJlZm9yZSwgYXQgbGVhc3Qgb25lIElucHV0IGludG8gdGhlIFRyYW5zZm9ybWF0aW9uIG11c3QgYmUgYSBQcm9kdWN0IG9mIHRoZSBDeWNsZS5gLFxuICAnbXVzdCBoYXZlIG9ubHkgb25lIGVudHJ5IHdpdGggdGhlIHNhbWUgdGVybS50ZXJtVHlwZSA9IGV4Y3JldGFNYW5hZ2VtZW50JzogKCkgPT5cbiAgICBgVGhlcmUgY2FuIG9ubHkgYmUgb25lIFByYWN0aWNlIG9mIHR5cGUgZXhjcmV0YU1hbmFnZW1lbnQgaW4gYSBDeWNsZS5cbiAgICBUbyByZXByZXNlbnQgbXVsdGlwbGUgZXhjcmV0YSBtYW5hZ2VtZW50IHN5c3RlbXMgZWl0aGVyIHVzZSBtdWx0aXBsZSBDeWNsZXMgYW5kIGxpbmsgdGhlbSB0b2dldGhlcixcbiAgICBvciB1c2UgVHJhbnNmb3JtYXRpb25zIHdpdGhpbiBhIEN5Y2xlIGFuZCBsaW5rIHRob3NlIHRvZ2V0aGVyLmAsXG4gICdtdXN0IGJlIGluY2x1ZGVkIGFzIGFuIElucHV0JzogKHsgcGFyYW1zIH0sIGVycm9yQ291bnQpID0+XG4gICAgYFRoZSBleGNyZXRhIFByb2R1Y3RzIGFyZSBub3Qgb2YgdGhlIHNhbWUgdHlwZSBhcyB0aGUgZXhjcmV0YSBJbnB1dHMuXG4gICAgJHtcbiAgICAgIGVycm9yQ291bnQgPT09IDEgP1xuICAgICAgICBgRS5nLiwgeW91IGNhbm5vdCBnZXQgJHtcbiAgICAgICAgICBjb2RlKHBhcmFtcz8udGVybT8ubmFtZSlcbiAgICAgICAgfSBmcm9tICR7XG4gICAgICAgICAgKHBhcmFtcz8uZXhwZWN0ZWQgfHwgW10pLm1hcCh2ID0+IGNvZGUoa2V5VG9MYWJlbCh2KSkpLmpvaW4oJyBvciAnKVxuICAgICAgICB9LmAgOlxuICAgICAgICAnJ1xuICAgIH1cbiAgICBQbGVhc2UgY2hlY2sgdGhlIElucHV0cyBhbmQgUHJvZHVjdHMgb2YgdGhlIFRyYW5zZm9ybWF0aW9uLmAsXG4gICdtdXN0IGFkZCB0aGUgbGlua2VkIGlucHV0cyB0byB0aGUgY3ljbGUnOiAoeyBwYXJhbXMgfSwgZXJyb3JDb3VudCkgPT5cbiAgICBgJHtcbiAgICAgIGVycm9yQ291bnQgPT09IDEgP1xuICAgICAgICBgWW91IGhhdmUgc3RhdGVkIHRoYXQgJHtjb2RlKHBhcmFtcz8udGVybT8ubmFtZSl9IHdhcyBjcmVhdGVkIGJ5IHRoZSBmb2xsb3dpbmcgSW5wdXRzICR7XG4gICAgICAgICAgcGFyYW1zPy5leHBlY3RlZD8ubWFwKGUgPT4gY29kZShlLm5hbWUpKS5qb2luKCcgLCAnKVxuICAgICAgICB9YDpcbiAgICAgICAgJ1lvdSBoYXZlIHN0YXRlZCBzb21lIEVtaXNzaW9ucyB3ZXJlIGNyZWF0ZWQgYnkgc29tZSBJbnB1dHMnXG4gICAgfS5cbiAgICBIb3dldmVyLCB0aGVzZSBJbnB1dHMgZG8gbm90IGV4aXN0IGluIHRoZSBDeWNsZS5cbiAgICBQbGVhc2UgYWRkIHRoZXNlIElucHV0cywgZXZlbiBpZiB5b3UgZG8gbm90IGhhdmUgYSB2YWx1ZSBmb3IgdGhlbS5gLFxuICAnbXVzdCBhZGQgdGhlIGxpbmtlZCB0cmFuc2Zvcm1hdGlvbnMgdG8gdGhlIGN5Y2xlJzogKHsgbGV2ZWwsIHBhcmFtcyB9LCBlcnJvckNvdW50KSA9PlxuICAgIGAke1xuICAgICAgZXJyb3JDb3VudCA9PT0gMSA/XG4gICAgICAgIGBZb3UgaGF2ZSBzcGVjaWZpZWQgdGhhdCR7Y29kZShwYXJhbXM/LnRlcm0/Lm5hbWUpfSB3YXMgY3JlYXRlZCBkdXJpbmcgYSBUcmFuc2Zvcm1hdGlvbiB3aXRoIHRoZSBUZXJtIG5hbWUgJHtjb2RlKHBhcmFtcz8uZXhwZWN0ZWQ/Lm5hbWUpfWAgOlxuICAgICAgICAnWW91IGhhdmUgc3RhdGVkIHNvbWUgRW1pc3Npb25zIHdlcmUgY3JlYXRlZCBieSBzb21lIFRyYW5zZm9ybWF0aW9ucydcbiAgICB9LlxuICAgIEhvd2V2ZXIsIHdlIGNhbm5vdCBmaW5kIGEgVHJhbnNmb3JtYXRpb24gd2l0aGluIHRoZSBDeWNsZSB3aXRoIHRoaXMgVGVybSBuYW1lLlxuICAgICR7XG4gICAgICBsZXZlbCA9PT0gJ2Vycm9yJyA/XG4gICAgICAgICdQbGVhc2UgY2hlY2sgdGhlIFRlcm1zIHVzZWQgaW4gdGhlIEVtaXNzaW9ucyBhbmQvb3IgdGhlIFRyYW5zZm9ybWF0aW9ucy4nIDpcbiAgICAgICAgJ1lvdSBtYXkgd2FudCB0byBhZGQgdGhpcyBUcmFuc2Zvcm1hdGlvbi4nXG4gICAgfWAsXG4gICdldmVyeSBpdGVtIGluIHRoZSBsaXN0IHNob3VsZCBiZSB1bmlxdWUnOiAoeyBwYXJhbXMgfSkgPT5cbiAgICBgVGhpcyBCbGFuayBOb2RlIGlzIGR1cGxpY2F0ZWQuIEV2ZXJ5IEJsYW5rIE5vZGUgc2hvdWxkIGJlIHVuaXF1ZS5cbiAgICBVbmlxdWVuZXNzIGlzIGRldGVybWluZWQgYnkgdGhlIGZvbGxvd2luZyBmaWVsZHM6ICR7XG4gICAgICAocGFyYW1zPy5rZXlzIHx8IFtdKS5tYXAoY29kZSkuam9pbignLCAnKVxuICAgIH1gLFxuICAnbXVzdCBjb250YWluIGFzIG1hbnkgaXRlbXMgYXMgdmFsdWVzJzogKHsgcGFyYW1zLCBkYXRhUGF0aCB9KSA9PlxuICAgIGBUaGUgbnVtYmVyIG9mICR7Y29kZShkYXRhUGF0aC5zcGxpdCgnLicpLnBvcCgpKX0gbXVzdCBtYXRjaCB0aGUgbnVtYmVyIG9mICR7Y29kZSgndmFsdWUnKX0uXG4gICAgQ3VycmVudGx5IHRoZXJlIGFyZSAke3BhcmFtcz8uY3VycmVudH0gJHtjb2RlKGRhdGFQYXRoLnNwbGl0KCcuJykucG9wKCkpfSBidXQgJHtwYXJhbXM/LmV4cGVjdGVkfSAke2NvZGUoJ3ZhbHVlJyl9LmAsXG4gICdpcyB0b28gZ2VuZXJpYyc6ICh7IHBhcmFtcyB9KSA9PlxuICAgIGBZb3UgaGF2ZSB0aGUgZm9sbG93aW5nIFByb2R1Y3QgJHtjb2RlKHBhcmFtcz8ucHJvZHVjdD8ubmFtZSl9IGhvd2V2ZXIsXG4gICAgeW91IGhhdmUgdXNlZCBhIGdlbmVyaWMgJHtnbG9zc2FyeVR5cGVMaW5rKHBhcmFtcz8udGVybT8udGVybVR5cGUpfSB0ZXJtICR7Y29kZShwYXJhbXM/LnRlcm0/Lm5hbWUpfS5cbiAgICBVc2UgYSBtb3JlIHNwZWNpZmljIHRlcm0gZm9yIHRoZSAke1xuICAgICAgZ2xvc3NhcnlUeXBlTGluayhwYXJhbXM/LnRlcm0/LnRlcm1UeXBlKVxuICAgIH0gd2hpY2ggcmVmbGVjdHMgdGhlIHNwZWNpZmljICR7XG4gICAgICBnbG9zc2FyeVR5cGVMaW5rKHBhcmFtcz8ucHJvZHVjdD8udGVybVR5cGUpXG4gICAgfS5gLFxuICAnaXMgbWlzc2luZyByZXF1aXJlZCBiaWJsaW9ncmFwaGljIGluZm9ybWF0aW9uJzogKCkgPT5cbiAgICBgVGhlIGF1dG9tYXRpYyBiaWJsaW9ncmFwaHkgc2VhcmNoIGZhaWxlZCBmb3IgdGhpcyBCaWJsaW9ncmFwaHkuIEVpdGhlcjpcbiAgICA8dWwgY2xhc3M9XCJpcy1wbC0zIGlzLWxpc3Qtc3R5bGUtZGVjaW1hbFwiPlxuICAgIDxsaT5NYW51YWxseSBmaWxsLWluIHRoZSA8Yj5yZXF1aXJlZDwvYj4gYmlibGlvZ3JhcGhpYyBpbmZvcm1hdGlvbiBhcyBwZXIgJHtzY2hlbWFMaW5rKFNjaGVtYVR5cGUuQmlibGlvZ3JhcGh5LCAnb3VyIHNjaGVtYScpfS48L2xpPlxuICAgIDxsaT5Qcm92aWRlIHRoZSAke2NvZGUoJ2RvY3VtZW50RE9JJyl9IGFzIHdlbGwgYXMgdGhlICR7Y29kZSgndGl0bGUnKX0uPC9saT5cbiAgICA8bGk+Q2hlY2sgdGhlICR7Y29kZSgnZG9jdW1lbnRET0knKX0gYW5kICR7Y29kZSgndGl0bGUnKX0gZm9yIHR5cG9zIGFnYWluc3QgdGhlICR7ZXh0ZXJuYWxMaW5rKCdodHRwczovL3d3dy5tZW5kZWxleS5jb20nLCAnTWVuZGVsZXkgY2F0YWxvZ3VlJyl9LjwvbGk+XG4gICAgPC91bD5gLFxuICAnc2hvdWxkIGJlIGxvd2VyIHRoYW4gbWF4IHNpemUnOiAoeyBwYXJhbXMgfSkgPT5cbiAgICBgVGhlIGJvdW5kYXJ5IG9yIHJlZ2lvbiBpcyA+JHtwYXJhbXM/LmV4cGVjdGVkfWttMiBhbmQgaXMgdG9vIGxhcmdlIHRvIHJlbGlhYmx5IGdhcCBmaWxsIE1lYXN1cmVtZW50cy5cbiAgICBJZiB5b3UgYXJlIGFibGUgdG8gdXNlIGEgbW9yZSBzcGVjaWZpYyByZWdpb24sIHBsZWFzZSBkby5gLFxuICAnYW4gZXhjcmV0YSBpbnB1dCBpcyByZXF1aXJlZCB3aGVuIHVzaW5nIGFuIGV4Y3JldGFNYW5hZ2VtZW50IHByYWN0aWNlJzogKHsgZGF0YVBhdGggfSkgPT4ge1xuICAgIGNvbnN0IHBhdGhzID0gcGFyc2VEYXRhUGF0aChkYXRhUGF0aCEpO1xuICAgIHJldHVybiBgRXhjcmV0YSBtYW5hZ2VtZW50IGlzIHRoZSBjb252ZXJzaW9uIG9mIGV4Y3JldGEgdG8gYW5vdGhlciB0eXBlIG9mIGV4Y3JldGEuXG4gICAgICBZb3UgaGF2ZSBhZGRlZCBhbiBleGNyZXRhTWFuYWdlbWVudCBQcmFjdGljZSB0byB0aGlzICR7cGF0aHNbMF0ubGFiZWx9IGJ1dCB0aGVyZSBpcyBubyBleGNyZXRhIElucHV0LlxuICAgICAgVG8gcmVwcmVzZW50IGV4Y3JldGEgbWFuYWdlbWVudCwgdXNlIGEgJHtwYXRoc1swXS5sYWJlbH0gd2l0aCBleGNyZXRhIGFzIGFuIElucHV0IGFuZCBleGNyZXRhTWFuYWdlbWVudCBhcyBhIFByYWN0aWNlLmA7XG4gIH0sXG4gICdvbmx5IDEgcHJpbWFyeSBwcm9kdWN0IGFsbG93ZWQnOiAoKSA9PiAnVGhlcmUgY2FuIG9ubHkgYmUgb25lIHByaW1hcnkgcHJvZHVjdCBpbiBlYWNoIEN5Y2xlLicsXG4gICdpcyBub3QgYWxsb3dlZCBpbiBjb21iaW5hdGlvbiB3aXRoIG5vVGlsbGFnZSc6ICgpID0+XG4gICAgYFRoaXMgb3BlcmF0aW9uIGludm9sdmVzIHRpbGxhZ2UsIHlldCB5b3UgaGF2ZSBzcGVjaWZpZWQgdGhlIFByYWN0aWNlICR7dGVybUxpbmsobm9UaWxsYWdlKX0uXG4gICAgRWl0aGVyIGNoYW5nZSB0aGlzIG9wZXJhdGlvbiBvciB0aGUgUHJhY3RpY2UuYCxcbiAgJ3Nob3VsZCBjb250YWluIGEgdGlsbGFnZSBwcmFjdGljZSc6ICgpID0+XG4gICAgYFdlIHJlY29tbWVuZCBzcGVjaWZ5aW5nIHRoZSB0eXBlIG9mIHRpbGxhZ2UgdXNlZCBmb3IgdGhpcyBDeWNsZS5cbiAgICBQbGVhc2Ugc2VlIHRoZSAke2dsb3NzYXJ5VHlwZUxpbmsoVGVybVRlcm1UeXBlLnRpbGxhZ2UpfSBnbG9zc2FyeS5gLFxuICAnbXVzdCBzZXQgdmFsdWUgZm9yIGV2ZXJ5IHRpbGxhZ2UgcHJhY3RpY2UnOiAoKSA9PlxuICAgIGBFaXRoZXIgc3BlY2lmeSBhIHNpbmdsZSAke2dsb3NzYXJ5VHlwZUxpbmsoVGVybVRlcm1UeXBlLnRpbGxhZ2UpfSBwcmFjdGljZSBvciBhZGQgYSB2YWx1ZSB0byBhbGwgcHJhY3RpY2VzLmAsXG4gICdzdW0gbm90IGVxdWFsIHRvIDEwMCUgZm9yIHRpbGxhZ2UgcHJhY3RpY2VzJzogKCkgPT5cbiAgICBgVGhlIHN1bSBvZiAke2dsb3NzYXJ5VHlwZUxpbmsoVGVybVRlcm1UeXBlLnRpbGxhZ2UpfSBwcmFjdGljZXMgbXVzdCBlcXVhbCAxMDAlLmAsXG4gICdjYW4gb25seSBoYXZlIDEgdGlsbGFnZSBwcmFjdGljZSB3aXRob3V0IGEgdmFsdWUnOiAoeyBwYXJhbXMgfSkgPT5cbiAgICBgSXQgaXMgbm90IHBvc3NpYmxlIGZvciBhIEN5Y2xlIHRvIGhhdmUgdGhlIGZvbGxvd2luZyB0aWxsYWdlIFByYWN0aWNlczpcbiAgICAkeyhwYXJhbXM/LmN1cnJlbnQgPz8gW10pLm1hcCgoeyBuYW1lIH0pID0+IG5hbWUpLmpvaW4oJyBhbmQgJyl9IGF0IHRoZSBzYW1lIHRpbWUuXG4gICAgSWYgbXVsdGlwbGUgdGlsbGFnZSBwcmFjdGljZXMgZGlkIG9jY3VyLCBwbGVhc2Ugc3BlY2lmeSB0aGUgcGVyY2VudGFnZSBvZiBhcmVhIHRoZXkgb2NjdXJyZWQgb24uYCxcbiAgJ2NhbiBub3QgYmUgbGlua2VkIHRvIHRoZSBzYW1lIEN5Y2xlJzogKCkgPT4gJ1lvdSBjYW4gbm90IGxpbmsgYW4gSW5wdXQgdG8gdGhlIEltcGFjdCBBc3Nlc3NtZW50IG9mIHRoZSBzYW1lIEN5Y2xlLicsXG4gIC8vIGRlcHJlY2F0ZWQsIHJlbW92ZSB3aGVuIG1lc3NhZ2UgaXMgbm90IGJlaW5nIHVzZWQgYW55bW9yZVxuICAnbXVzdCBiZSAwIGZvciBwcm9kdWN0IHZhbHVlIDAnOiAoeyBkYXRhUGF0aCwgcGFyYW1zIH0sIGVycm9yQ291bnQpID0+XG4gICAgYElmIHRoZSBhbW91bnQgcHJvZHVjZWQgaXMgemVybywgdGhlICR7Y29kZShkYXRhUGF0aD8uc3BsaXQoJy4nKS5wb3AoKSEpfSBvZiAke1xuICAgICAgZXJyb3JDb3VudCA9PT0gMSA/IGNvZGUocGFyYW1zPy50ZXJtLm5hbWUpIDogJ3RoYXQgcHJvZHVjdCdcbiAgICB9IG11c3QgYWxzbyBiZSB6ZXJvLmAsXG4gICdlY29ub21pY1ZhbHVlU2hhcmUgbXVzdCBiZSAwIGZvciBwcm9kdWN0IHZhbHVlIDAnOiAoeyBwYXJhbXMgfSwgZXJyb3JDb3VudCkgPT5cbiAgICBgSWYgdGhlIGFtb3VudCBwcm9kdWNlZCBpcyB6ZXJvLCB0aGUgZWNvbm9taWNWYWx1ZVNoYXJlIG9mICR7XG4gICAgICBlcnJvckNvdW50ID09PSAxID8gY29kZShwYXJhbXM/LnRlcm0ubmFtZSkgOiAndGhhdCBwcm9kdWN0J1xuICAgIH0gbXVzdCBhbHNvIGJlIHplcm8uYCxcbiAgJ3JldmVudWUgbXVzdCBiZSAwIGZvciBwcm9kdWN0IHZhbHVlIDAnOiAoeyBwYXJhbXMgfSwgZXJyb3JDb3VudCkgPT5cbiAgICBgSWYgdGhlIGFtb3VudCBwcm9kdWNlZCBpcyB6ZXJvLCB0aGUgcmV2ZW51ZSBvZiAke1xuICAgICAgZXJyb3JDb3VudCA9PT0gMSA/IGNvZGUocGFyYW1zPy50ZXJtLm5hbWUpIDogJ3RoYXQgcHJvZHVjdCdcbiAgICB9IG11c3QgYWxzbyBiZSB6ZXJvLmAsXG4gICdzaG91bGQgYWRkIGEgc291cmNlJzogKHsgcGFyYW1zIH0pID0+XG4gICAgYFdlIHJlY29tbWVuZCBhZGRpbmcgYSBTb3VyY2UgdG8gYWxsIGRhdGEgaXRlbXMuXG4gICAgVGhpcyBjYW4gYmUgZG9uZSBieSBhZGRpbmcgdGhlICR7Y29kZShwYXJhbXM/LmN1cnJlbnQpfSBmaWVsZC5cbiAgICBTb3VyY2VzIGNhbiBhbHNvIGJlIHNwZWNpZmllZCBmb3IgZWFjaCBkYXRhIGl0ZW0gKGkuZS4sIGVhY2ggSW5wdXQsIEVtaXNzaW9uLCBQcm9kdWN0LCBQcmFjdGljZSwgTWVhc3VyZW1lbnQsIG9yIEluZnJhc3RydWN0dXJlKS5gLFxuICAnY292ZXIgY3JvcCBjeWNsZSBjb250YWlucyBub24gY292ZXIgY3JvcCBwcm9kdWN0JzogKCkgPT5cbiAgICBgWW91IGhhdmUgc3BlY2lmaWVkIHRoYXQgdGhpcyBjcm9wIGlzIGEgY292ZXIgY3JvcCB1c2luZyBhIFByYWN0aWNlLlxuICAgIEEgY292ZXIgY3JvcCBpcyBkZWZpbmVkIGFzIFwiYSBjcm9wIHdoaWNoIGlzIGxlZnQgaW4gdGhlIGZpZWxkIHdpdGhvdXQgYW55IGZyYWN0aW9uIGhhcnZlc3RlZCBieSB0aGUgZW5kIG9mIHRoZSBDeWNsZVwiLlxuICAgIFRoZSBQcm9kdWN0cyBvZiB0aGlzIEN5Y2xlIGFyZSBpbmNvbXBhdGlibGUgd2l0aCB0aGlzIGNyb3AgYmVpbmcgYSBjb3ZlciBjcm9wLlxuICAgIFBsZWFzZSBjaGVjayB0aGUgUHJvZHVjdHMgb3IgdGhlIFByYWN0aWNlcy5gLFxuICAnc2hvdWxkIGJlIGluY2x1ZGVkIGluIHRoZSBjeWNsZSBwcm9kdWN0cyc6ICh7IHBhcmFtcyB9LCBlcnJvckNvdW50KSA9PlxuICAgIGAke1xuICAgICAgZXJyb3JDb3VudCA9PT0gMSA/XG4gICAgICAgIGBUaGUgUHJvZHVjdCAke2NvZGUocGFyYW1zLnByb2R1Y3QubmFtZSl9IGRvZXMgbm90IGV4aXN0IGluIHRoZSBDeWNsZSB3aXRoIGlkICR7Y29kZShwYXJhbXMubm9kZS5pZCl9YCA6XG4gICAgICAgICdUaGUgSW1wYWN0QXNzZXNzbWVudCBQcm9kdWN0IGRvZXMgbm90IGV4aXN0IGluIHRoZSBsaW5rZWQgQ3ljbGUnXG4gICAgfS5cbiAgICBQbGVhc2UgYWRkIHRoZSBQcm9kdWN0IGluIHRoZSBDeWNsZSBvciByZW1vdmUgdGhlIGxpbmsgd2l0aCB0aGUgQ3ljbGUuYCxcbiAgJ211bHRpcGxlIEltcGFjdEFzc2Vzc21lbnQgYXJlIGFzc29jaWF0ZWQgd2l0aCB0aGUgc2FtZSBQcm9kdWN0IG9mIHRoZSBzYW1lIEN5Y2xlJzogKCkgPT5cbiAgICBgT25seSAxIEltcGFjdCBBc3Nlc3NtZW50IGNhbiBiZSByZWxhdGVkIHRvIHRoaXMgUHJvZHVjdC5cbiAgICBQbGVhc2UgbWFrZSBzdXJlIHRoZSBwcm9kdWN0IGlzIGNvcnJlY3Qgb3IgdGhlIGN5Y2xlLmlkIHlvdSBhcmUgcmVmZXJyaW5nIHRvIGlzIGNvcnJlY3QuYCxcbiAgJ211c3QgYmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIGxhbmQgb2NjdXBhdGlvbic6ICgpID0+XG4gICAgYExhbmQgdHJhbnNmb3JtYXRpb24gc2hvdWxkIGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byBsYW5kIG9jY3VwYXRpb25cbiAgICAobGFuZCB0cmFuc2Zvcm1hdGlvbiBpcyB0aGUgYW1vdW50IG9mIGxhbmQgY29udmVydGVkIGJldHdlZW4gc29tZSBkYXRlIGluIHRoZSBwYXN0IGFuZCB0aGUgY3VycmVudCB5ZWFyLFxuICAgIGRpdmlkZWQgYnkgYW4gYW1vcnRpemF0aW9uIHBlcmlvZCwgc28gaXQgc2hvdWxkIGFsd2F5cyBiZSBsZXNzIHRoYW4gbGFuZCBvY2N1cGF0aW9uIGJ5IGRlZmluaXRpb24pLmAsXG4gICdzaG91bGQgYmUgbGlua2VkIHRvIGFuIGVtaXNzaW9uIGluIHRoZSBDeWNsZSc6ICh7IHBhcmFtcyB9LCBlcnJvckNvdW50KSA9PlxuICAgIGAke1xuICAgICAgZXJyb3JDb3VudCA9PT0gMSA/IGAke2NvZGUocGFyYW1zPy50ZXJtLm5hbWUpfSBleGlzdHNgIDogJ1NvbWUgRW1pc3Npb25zIGV4aXN0J1xuICAgIH0gaW4gYm90aCB0aGUgQ3ljbGUgYW5kIHRoZSBUcmFuc2Zvcm1hdGlvbiBidXQgJHtlcnJvckNvdW50ID09PSAxID8gJ2l0IGlzJyA6ICd0aGV5IGFyZSd9IG5vdCBsaW5rZWQgdXNpbmcgJHtcbiAgICAgIGNvZGUoJ2N5Y2xlLmVtaXNzaW9ucy5YLnRyYW5zZm9ybWF0aW9uLnRlcm0nKVxuICAgIH0uIFRoaXMgbWF5IGJlIGFuIGVycm9yLmAsXG4gICdzaG91bGQgYWRkIGFuIGFuaW1hbCBwcm9kdWN0aW9uIHN5c3RlbSc6ICgpID0+XG4gICAgYEZvciBhbmltYWwgcHJvZHVjdGlvbiBjeWNsZXMsIHdlIHJlY29tbWVuZCBzcGVjaWZ5aW5nIHRoZSBhbmltYWwgcHJvZHVjdGlvbiAke2dsb3NzYXJ5VHlwZUxpbmsoVGVybVRlcm1UeXBlLnN5c3RlbSl9IGFzIGEgUHJhY3RpY2UuXG4gICAgWW91IGNhbiBmaW5kIGEgbGlzdCBvZiBzeXN0ZW1zIGluIHRoZSAke2dsb3NzYXJ5VHlwZUxpbmsoVGVybVRlcm1UeXBlLnN5c3RlbSwgJ0dsb3NzYXJ5Jyl9LmAsXG4gICdtdXN0IGJlIHNldCB0byBmYWxzZSB3aGVuIHNwZWNpZnlpbmcgZnVlbCB1c2UnOiAoeyBwYXJhbXMgfSkgPT5cbiAgICBgSWYgbWFjaGluZXJ5IGZ1ZWwgKCR7cGFyYW1zPy5hbGxvd2VkVmFsdWVzLm1hcChjb2RlKS5qb2luKCcsICcpfSkgaXMgdXNlZCBkdXJpbmcgYSBDeWNsZSxcbiAgICBidXQgdGhlcmUgaXMgbm8gZGF0YSBvbiB0aGUgYW1vdW50IG9mICR7Z2xvc3NhcnlUeXBlTGluayhUZXJtVGVybVR5cGUubWF0ZXJpYWwpfSB1c2VkIGZvciBhZ3JpY3VsdHVyYWwgZXF1aXBtZW50LFxuICAgIHRoZW4gJHtjb2RlKCdjb21wbGV0ZW5lc3MubWF0ZXJpYWwnKX0gbXVzdCBiZSAke2NvZGUoJ2ZhbHNlJyl9LmAsXG4gICdtdXN0IGJlIGJlbG93IG9yIGVxdWFsIHRvIDEgZm9yIHVuaXQgaW4gaGEnOiAoKSA9PlxuICAgIGBUaGUgbWF4aW11bSB2YWx1ZSBmb3IgYSBwcm9kdWN0IHdpdGggdW5pdHMgJHtjb2RlKCdoYScpfSBvbiBhIEN5Y2xlIHdpdGggYSAke1xuICAgICAgc2NoZW1hTGluaygnQ3ljbGUjZnVuY3Rpb25hbFVuaXQnLCAnZnVuY3Rpb25hbCB1bml0JylcbiAgICB9IG9mICR7Y29kZSgnMSBoYScpfSBpcyAke2NvZGUoJzEnKX0uXG4gICAgSWYgeW91IGFyZSB0cnlpbmcgdG8gYWRkIGEgcHJvZHVjdCB3aXRoIHRoZSB1bml0cyAke2NvZGUoJ2tnJyl9LCB1c2UgYSBkaWZmZXJlbnQgdGVybS5gLFxuICAncGFzdHVyZUdyYXNzIGtleSB1bml0cyBtdXN0IGJlIFxcJ2hhXFwnJzogKHsgcGFyYW1zIH0pID0+XG4gICAgYFRoZSBUZXJtICR7Y29kZShwYXJhbXM/LnRlcm0ubmFtZSl9IGNhbid0IGJlIHVzZWQgYXMgYSBrZXkgZm9yICR7dGVybUxpbmsocGFzdHVyZUdyYXNzKX0uXG4gICAgUGxlYXNlIHVzZSB0aGUgVGVybSBkZXNjcmliaW5nIHRoZSBwbGFudCB3aXRoIHRoZSB1bml0cyAke2NvZGUocGFyYW1zLmV4cGVjdGVkKX0gaW5zdGVhZC5cbiAgICBUaGlzIHdpbGwgaGVscCB1cyBnYXAtZmlsbCB0aGUgYW1vdW50IG9mIGdyYXNzIGNvbnN1bWVkIGJ5IHRoZSBoZXJkLmAsXG4gICd0aGUgc3VtIG9mIGFsbCBwYXN0dXJlR3Jhc3MgdmFsdWVzIG11c3QgYmUgMTAwJzogKHsgcGFyYW1zIH0pID0+XG4gICAgYFRoZSBzdW0gb2YgYWxsICR7dGVybUxpbmsocGFzdHVyZUdyYXNzKX0gdmFsdWVzIG11c3QgYmUgZXF1YWwgdG8gJHtwYXJhbXMuZXhwZWN0ZWR9JS5gLFxuICAnaXMgb3V0c2lkZSBjb25maWRlbmNlIGludGVydmFsJzogKF9lcnJvciwgZXJyb3JDb3VudCwgYWxsRXJyb3JzKSA9PlxuICAgIGAke3VuaXF1ZShhbGxFcnJvcnMuZmxhdE1hcCgoeyBkYXRhUGF0aCwgcGFyYW1zIH0pID0+IHBhcmFtcz8ub3V0bGllcnM/Lm1hcCh2YWx1ZSA9PlxuICAgICAgYFRoZSAke1xuICAgICAgICBkYXRhUGF0aC5pbmNsdWRlcygncHJvZHVjdCcpID8gJ3Byb2R1Y3QnIDogJ2lucHV0J1xuICAgICAgfSB2YWx1ZSAke1xuICAgICAgICBlcnJvckNvdW50ID09PSAxID8gYCR7Y29kZSh2YWx1ZSl9IGAgOiAnJ1xuICAgICAgfWlzICR7XG4gICAgICAgIHZhbHVlID4gcGFyYW1zPy5taW4gPyAnYWJvdmUnIDogJ2JlbG93J1xuICAgICAgfSAke1xuICAgICAgICBwYXJhbXM/LnRocmVzaG9sZCA/IGAke2NvZGUoYCR7KHBhcmFtcy50aHJlc2hvbGQgKyAoKDEgLSBwYXJhbXMudGhyZXNob2xkKSAvIDIpKSAqIDEwMH0lYCl9IG9mYCA6ICcnXG4gICAgICB9IGFsbCAke1xuICAgICAgICBwYXJhbXM/Lmdyb3VwID8gY29kZShwYXJhbXMuZ3JvdXApIDogY29kZShwYXJhbXM/LnRlcm0/Lm5hbWUpXG4gICAgICB9IGRhdGEgaW4gJHtcbiAgICAgICAgY29kZShwYXJhbXM/LmNvdW50cnkubmFtZSlcbiAgICAgIH0gb24gdGhlIEhlc3RpYSBwbGF0Zm9ybS5gXG4gICAgKSkpLmpvaW4oJzwvYnI+Jyl9XG4gICAgPC9icj5cbiAgICBQbGVhc2UgZG91YmxlLWNoZWNrIHRoZXNlIHZhbHVlcyBiZWZvcmUgc3VibWl0dGluZy5gLFxuICAnc2hvdWxkIGJlIGVxdWFsIHRvIGJvdW5kYXJ5JzogKHsgcGFyYW1zIH0pID0+XG4gICAgYFRoZSBjYWxjdWxhdGVkIGFyZWEgZnJvbSAke2NvZGUoJ2JvdW5kYXJ5Jyl9IGlzICR7Y29kZShwYXJhbXM/LmV4cGVjdGVkKX0uXG4gICAgVGhpcyBtYXkgYmUgYW4gZXJyb3IgaWYgdGhlIGJvdW5kYXJ5IHJlcHJlc2VudHMgdGhlIGFyZWEgdW5kZXIgY3VsdGl2YXRpb24uYCxcbiAgJ211c3Qgc3BlY2lmeSB0aGUgZmF0ZSBvZiBjcm9wUmVzaWR1ZSc6ICgpID0+XG4gICAgYEZvciBzaXRlcyBvZiB0eXBlIGNyb3BsYW5kIG9yIHBlcm1hbmVudCBwYXN0dXJlLCBpZiBkYXRhIGNvbXBsZXRlbmVzcyBpcyBtYXJrZWQgJHtjb2RlKHRydWUpfSBmb3IgY3JvcCByZXNpZHVlLCB0aGUgZmF0ZXMgYW5kIHF1YW50aXRpZXMgb2YgdGhlIHJlc2lkdWUgbXVzdCBiZSBzcGVjaWZpZWQuXG4gICAgPGJyLz5cbiAgICBUaGUgcXVhbnRpdHkgbXVzdCBpbmNsdWRlIGJvdGggYWJvdmUgYW5kIGJlbG93IGdyb3VuZCBjcm9wIHJlc2lkdWUsIHdoZXJlIHRoZSBzdW0gb2YgYWJvdmUgZ3JvdW5kIGNyb3AgcmVzaWR1ZSBhbmQgYmVsb3cgZ3JvdW5kIGNyb3AgcmVzaWR1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiB6ZXJvLlxuICAgIFRoaXMgY2FuIGJlIGFkZGVkIHVzaW5nIHRoZSB0ZXJtczpcbiAgICA8dWwgY2xhc3M9XCJpcy1wbC0zIGlzLWxpc3Qtc3R5bGUtZGlzYyBpcy1ub3dyYXBcIj5cbiAgICA8bGk+JHt0ZXJtTGluayh7IGlkOiAnYmVsb3dHcm91bmRDcm9wUmVzaWR1ZScsIG5hbWU6ICdCZWxvdyBncm91bmQgY3JvcCByZXNpZHVlJyB9KX07IGFuZDwvbGk+XG4gICAgPGxpPiR7dGVybUxpbmsoeyBpZDogJ2Fib3ZlR3JvdW5kQ3JvcFJlc2lkdWVUb3RhbCcsIG5hbWU6ICdBYm92ZSBncm91bmQgY3JvcCByZXNpZHVlIHRvdGFsJyB9KX0uPC9saT5cbiAgICA8L3VsPlxuICAgIDxici8+XG4gICAgVGhlIGZhdGUgY2FuIGJlIGFkZGVkIHVzaW5nOlxuICAgIDx1bCBjbGFzcz1cImlzLXBsLTMgaXMtbGlzdC1zdHlsZS1kaXNjIGlzLW5vd3JhcFwiPlxuICAgIDxsaT50aGUgJHtnbG9zc2FyeVR5cGVMaW5rKFRlcm1UZXJtVHlwZS5jcm9wUmVzaWR1ZU1hbmFnZW1lbnQpfSBwcmFjdGljZXM7IGFuZC9vcjwvbGk+XG4gICAgPGxpPnRoZSAke2dsb3NzYXJ5VHlwZUxpbmsoVGVybVRlcm1UeXBlLmNyb3BSZXNpZHVlKX0gcHJvZHVjdHM8L2xpPlxuICAgIDwvdWw+XG4gICAgYCxcbiAgJ3Nob3VsZCBzcGVjaWZ5IHRoZSBmYXRlIG9mIGNyb3BSZXNpZHVlJzogKCkgPT5cbiAgICBgWW91IGhhdmUgbm90IHNwZWNpZmllZCB0aGUgZmF0ZSBvZiB0aGUgY3JvcCByZXNpZHVlLlxuICAgIEFkZGluZyB0aGlzIGluZm9ybWF0aW9uIHdpbGwgaW1wcm92ZSBlbWlzc2lvbnMgYW5kIHNvaWwgY2FyYm9uIHN0b2NrIGNhbGN1bGF0aW9ucy5cbiAgICBUaGUgZmF0ZSBjYW4gYmUgYWRkZWQgdXNpbmc6XG4gICAgPHVsIGNsYXNzPVwiaXMtcGwtMyBpcy1saXN0LXN0eWxlLWRpc2MgaXMtbm93cmFwXCI+XG4gICAgPGxpPnRoZSAke2dsb3NzYXJ5VHlwZUxpbmsoVGVybVRlcm1UeXBlLmNyb3BSZXNpZHVlTWFuYWdlbWVudCl9IHByYWN0aWNlczsgYW5kL29yPC9saT5cbiAgICA8bGk+dGhlICR7Z2xvc3NhcnlUeXBlTGluayhUZXJtVGVybVR5cGUuY3JvcFJlc2lkdWUpfSBwcm9kdWN0czs8L2xpPlxuICAgIDwvdWw+XG4gICAgUmVtZW1iZXIgdG8gc2V0ICR7Y29kZSgnY29tcGxldGVuZXNzLmNyb3BSZXNpZHVlJyl9IHRvICR7Y29kZSh0cnVlKX0gaWYgYm90aCB0aGUgYWJvdmUgYW5kIGJlbG93IGdyb3VuZCBjcm9wIHJlc2lkdWUgcXVhbnRpdGllcyBhbmQgZmF0ZXMgYXJlIHNwZWNpZmllZC5gLFxuICAnc2hvdWxkIGhhdmUgdGhlIHNhbWUgcHJpdmFjeSBhcyB0aGUgcmVsYXRlZCBzb3VyY2UnOiAoeyBwYXJhbXMgfSkgPT5cbiAgICBgVG8gbGluayB0byBhICR7cGFyYW1zPy5kZWZhdWx0U291cmNlPy5kYXRhUHJpdmF0ZSA/ICdwcml2YXRlJyA6ICdwdWJsaWMnfSBTb3VyY2UsXG4gICAgdGhpcyBOb2RlIG5lZWRzIHRvIGJlICR7cGFyYW1zPy5kZWZhdWx0U291cmNlPy5kYXRhUHJpdmF0ZSA/ICdwcml2YXRlJyA6ICdwdWJsaWMnfSBhcyB3ZWxsLlxuICAgIFBsZWFzZSBzZXQgJHtjb2RlKCdkYXRhUHJpdmF0ZScpfT0ke2NvZGUoYCR7cGFyYW1zPy5kZWZhdWx0U291cmNlPy5kYXRhUHJpdmF0ZX1gKX0uYCxcbiAgJ3Nob3VsZCBub3QgdXNlIG5vdCByZWxldmFudCBtb2RlbCc6ICgpID0+XG4gICAgYEFsbCBlbWlzc2lvbnMgc2hvdWxkIGdlbmVyYWxseSBoYXZlIGEgbWV0aG9kIHRpZXIsIHdoaWNoIHN0YXRlcyBob3cgdGhlIGRhdGEgd2VyZSBtb2RlbGxlZCBvciBob3cgdGhlIGRhdGEgd2VyZSBjb2xsZWN0ZWQuXG4gICAgUGxlYXNlIHNlZSB0aGUgJHtzY2hlbWFMaW5rKCdFbWlzc2lvbiNtZXRob2RUaWVyJywgJ3NjaGVtYScpfSBmb3IgdGhlIG9wdGlvbnMgYXZhaWxhYmxlIGFuZCBkZWZpbml0aW9ucyBvZiB0aGUgb3B0aW9ucy5gLFxuICAnc2hvdWxkIG5vdCB1c2Ugbm90IHJlbGV2YW50IG1ldGhvZFRpZXInOiAoKSA9PlxuICAgIGBBbGwgZW1pc3Npb25zIHNob3VsZCBnZW5lcmFsbHkgaGF2ZSBhIG1ldGhvZCB0aWVyLCB3aGljaCBzdGF0ZXMgaG93IHRoZSBkYXRhIHdlcmUgbW9kZWxsZWQgb3IgaG93IHRoZSBkYXRhIHdlcmUgY29sbGVjdGVkLlxuICAgIFBsZWFzZSBzZWUgdGhlICR7c2NoZW1hTGluaygnRW1pc3Npb24jbWV0aG9kVGllcicsICdzY2hlbWEnKX0gZm9yIHRoZSBvcHRpb25zIGF2YWlsYWJsZSBhbmQgZGVmaW5pdGlvbnMgb2YgdGhlIG9wdGlvbnMuYCxcbiAgJ211c3QgaGF2ZSBpbnB1dHMgcmVwcmVzZW50aW5nIHRoZSBmb3JhZ2Ugd2hlbiBzZXQgdG8gdHJ1ZSc6ICgpID0+XG4gICAgYFRoaXMgQ3ljbGUgaW5jbHVkZXMgYW5pbWFscyBhbmQgY29tcGxldGVuZXNzIGlzIHNldCB0byAkeyhjb2RlKHRydWUpKX0gZm9yICR7Y29kZSgnYW5pbWFsRmVlZCcpfS5cbiAgICBIb3dldmVyLCB0aGVyZSBhcmUgbm8gSW5wdXRzIHJlcHJlc2VudGluZyB0aGUgZm9yYWdlIGludGFrZSBieSBhbmltYWxzIGluIHRoZSBDeWNsZSAoSW5wdXRzIHdpdGggdGVybXMgd2hpY2ggY29udGFpbiB0aGUgd29yZHMgXCJmcmVzaCBmb3JhZ2VcIiBhbmQgYSAke2NvZGUoJ3ZhbHVlJyl9KS5cbiAgICBFaXRoZXIsIHNldCBjb21wbGV0ZW5lc3MgdG8gJHsoY29kZShmYWxzZSkpfSBmb3IgJHtjb2RlKCdhbmltYWxGZWVkJyl9LCBtYWtlIHN1cmUgYWxsIFwiZnJlc2ggZm9yYWdlXCIgSW5wdXRzIGhhdmUgYSAke2NvZGUoJ3ZhbHVlJyl9LCBvciBhZGQgb25lIG9yIG1vcmUgSW5wdXRzIHJlcHJlc2VudGluZyB0aGUgZm9yYWdlIGludGFrZS5gLFxuICAnbXVzdCBzcGVjaWZ5IGlzIGl0IGFuIGFuaW1hbCBmZWVkJzogKCkgPT5cbiAgICBgVGhpcyBDeWNsZSBpcyBhbiBhbmltYWwgcHJvZHVjdGlvbiBDeWNsZSBhbmQgdGhpcyBJbnB1dCBjb3VsZCBiZSBhbiBhbmltYWwgZmVlZCBvciBjb3VsZCBiZSBmb3IgYW5vdGhlciB1c2UuXG4gICAgUGxlYXNlIHNwZWNpZnkgdGhlICR7c2NoZW1hTGluaygnSW5wdXQjaXNBbmltYWxGZWVkJywgJ2lzQW5pbWFsRmVlZCcpfSBmaWVsZCBvbiB0aGlzIElucHV0LlxuICAgIEtub3dpbmcgdGhlIGZhdGUgaXMgZXNzZW50aWFsIHRvIGRpc3Rpbmd1aXNoIElucHV0cyBiZXR3ZWVuIHRob3NlIHdoaWNoIGFyZSBmZWQgdG8gYW5pbWFscyBhbmQgdGhvc2Ugd2hpY2ggYXJlIHVzZWQgZm9yIG90aGVyIHB1cnBvc2VzLmAsXG4gICdzaG91bGQgc3BlY2lmeSBhIHRyZWF0bWVudCB3aGVuIGV4cGVyaW1lbnREZXNpZ24gaXMgc3BlY2lmaWVkJzogKCkgPT5cbiAgICBgWW91IGhhdmUgc3BlY2lmaWVkIHRoYXQgdGhpcyBTb3VyY2UgdXNlcyBhbiBleHBlcmltZW50YWwgZGVzaWduLCBidXQgaGF2ZSBub3Qgc3BlY2lmaWVkIHRoZSB0cmVhdG1lbnQgZm9yIHRoaXMgQ3ljbGUuXG4gICAgQWRkaW5nIHRoZSB0cmVhdG1lbnQgcHJvdmlkZXMgaW1wb3J0YW50IG1ldGEtZGF0YSBhbmQgd2lsbCBlbmFibGUgZ3JlYXRlciByZS11c2Ugb2YgdGhlc2UgZGF0YS5cbiAgICBBZGQgdGhlICR7c2NoZW1hTGluaygnQ3ljbGUjdHJlYXRtZW50JywgJ3RyZWF0bWVudCcpfSBmaWVsZCB0byB0aGUgQ3ljbGUuXG4gICAgTm90ZSB0aGF0IHRoZSBmaWVsZCAke3NjaGVtYUxpbmsoJ0N5Y2xlI2NvbW1lcmNpYWxQcmFjdGljZVRyZWF0bWVudCcsICdjb21tZXJjaWFsUHJhY3RpY2VUcmVhdG1lbnQnKX0gYmVjb21lcyByZXF1aXJlZCBpZiB0cmVhdG1lbnQgaXMgc3BlY2lmaWVkLmAsXG4gICdzaG91bGQgbm90IHNwZWNpZnkgYm90aCBsaXZlQW5pbWFsIGFuZCBhbmltYWxQcm9kdWN0JzogKCkgPT5cbiAgICBgWW91IGhhdmUgYWRkZWQgYm90aCBhICR7Z2xvc3NhcnlUeXBlTGluayhUZXJtVGVybVR5cGUubGl2ZUFuaW1hbCl9IGFuZCAke2dsb3NzYXJ5VHlwZUxpbmsoVGVybVRlcm1UeXBlLmFuaW1hbFByb2R1Y3QpfSB0ZXJtIGFzIFByb2R1Y3RzLlxuICAgIElmIHRoZXNlIHRlcm1zIHJlZmVyIHRvIHRoZSBzYW1lIGFuaW1hbHMsIHRoaXMgd2lsbCBsZWFkIHRvIGRvdWJsZSBjb3VudGluZzpcbiAgICBpbnN0ZWFkIHVzZSBhIFByb3BlcnR5IG9uIHRoZSAke2dsb3NzYXJ5VHlwZUxpbmsoVGVybVRlcm1UeXBlLmxpdmVBbmltYWwpfSB0ZXJtIHRvIGRlZmluZSB0aGUgcXVhbnRpdHkgb2YgbGl2ZXdlaWdodCBwZXIgaGVhZCwgY2FyY2FzcyB3ZWlnaHQgcGVyIGhlYWQsIGV0Yy5gXG59O1xuXG5leHBvcnQgY29uc3QgZm9ybWF0Q3VzdG9tRXJyb3JNZXNzYWdlID0gKG1lc3NhZ2U/OiBzdHJpbmcsIGVycm9yPzogSVZhbGlkYXRpb25FcnJvciwgYWxsRXJyb3JzOiBJVmFsaWRhdGlvbkVycm9yW10gPSBbXSkgPT4ge1xuICBjb25zdCBmb3JtYXR0ZWRNZXNzYWdlID0gbWVzc2FnZSAmJiBtZXNzYWdlIGluIGN1c3RvbUVycm9yTWVzc2FnZSA/XG4gICAgY3VzdG9tRXJyb3JNZXNzYWdlW21lc3NhZ2VdKGVycm9yISwgYWxsRXJyb3JzLmxlbmd0aCwgYWxsRXJyb3JzKSA6XG4gICAgbWVzc2FnZTtcbiAgcmV0dXJuIGZvcm1hdHRlZE1lc3NhZ2UgPyBgPHAgY2xhc3M9XCJpcy1ub3JtYWxcIj4ke2Zvcm1hdHRlZE1lc3NhZ2V9PC9wPmAgOiAnJztcbn07XG5cbmV4cG9ydCBjb25zdCBmb3JtYXRFcnJvciA9IChlcnJvcj86IElWYWxpZGF0aW9uRXJyb3IsIGFsbEVycm9yczogSVZhbGlkYXRpb25FcnJvcltdID0gW10pOiBJVmFsaWRhdGlvbkVycm9yIHwgdW5kZWZpbmVkID0+XG4gIGVycm9yXG4gICAgPyAoe1xuICAgICAgbGV2ZWw6ICdlcnJvcicsXG4gICAgICAuLi5lcnJvcixcbiAgICAgIG1hcEVycm9yOiBlcnJvci5tZXNzYWdlID09PSBtYXBFcnJvck1lc3NhZ2UsXG4gICAgICBtZXNzYWdlOiBmb3JtYXRDdXN0b21FcnJvck1lc3NhZ2UoZXJyb3IubWVzc2FnZSwgZXJyb3IsIGFsbEVycm9ycylcbiAgICB9KVxuICAgIDogdW5kZWZpbmVkO1xuXG5leHBvcnQgY29uc3QgZXJyb3JIYXNFcnJvciA9IChlcnJvcj86IElWYWxpZGF0aW9uRXJyb3IpID0+IGVycm9yICYmIChlcnJvci5sZXZlbCA9PT0gJ2Vycm9yJyB8fCAhZXJyb3IubGV2ZWwpO1xuXG5leHBvcnQgY29uc3QgZXJyb3JIYXNXYXJuaW5nID0gKGVycm9yPzogSVZhbGlkYXRpb25FcnJvcikgPT4gZXJyb3IgJiYgZXJyb3IubGV2ZWwgPT09ICd3YXJuaW5nJztcblxuZXhwb3J0IGNvbnN0IGlzTWlzc2luZ1Byb3BlcnR5RXJyb3IgPSAoeyBwYXJhbXMgfTogSVZhbGlkYXRpb25FcnJvcikgPT4gISFwYXJhbXMgJiYgJ21pc3NpbmdQcm9wZXJ0eScgaW4gcGFyYW1zO1xuXG5leHBvcnQgY29uc3QgaXNNaXNzaW5nT25lT2ZFcnJvciA9ICh7IGtleXdvcmQsIHNjaGVtYVBhdGggfTogSVZhbGlkYXRpb25FcnJvcikgPT5cbiAga2V5d29yZCA9PT0gJ3JlcXVpcmVkJyAmJiAoc2NoZW1hUGF0aCB8fCAnJykuaW5jbHVkZXMoJ29uZU9mJyk7XG5cbmNvbnN0IGlzRmFpbGluZ0tleXdvcmRFcnJvciA9ICh7IHBhcmFtcyB9OiBJVmFsaWRhdGlvbkVycm9yKSA9PiAhIXBhcmFtcyAmJiAnZmFpbGluZ0tleXdvcmQnIGluIHBhcmFtcztcblxuZXhwb3J0IGNvbnN0IGZpbHRlckVycm9yID0gKGVycm9yOiBJVmFsaWRhdGlvbkVycm9yKSA9PiBbXG4gIGlzRmFpbGluZ0tleXdvcmRFcnJvclxuXS5ldmVyeShmdW5jID0+ICFmdW5jKGVycm9yKSk7XG5cbmV4cG9ydCBjb25zdCBtaXNzaW5nTm9kZUVycm9ycyA9IChlcnJvcnM6IElWYWxpZGF0aW9uRXJyb3JbXSkgPT5cbiAgZXJyb3JzLmZpbHRlcigoeyBrZXl3b3JkLCBwYXJhbXMgfSkgPT5cbiAgICBrZXl3b3JkID09PSAncmVxdWlyZWQnICYmIChwYXJhbXM/Lm1pc3NpbmdQcm9wZXJ0eSA9PT0gJ0B0eXBlJyB8fCBwYXJhbXM/Lm1pc3NpbmdQcm9wZXJ0eSA9PT0gJ0BpZCcpXG4gICk7XG4iXX0=