@hestia-earth/ui-components 0.30.2 → 0.30.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/common/sort-by.pipe.d.ts +3 -1
- package/esm2022/common/sort-by.pipe.mjs +1 -1
- package/esm2022/files/files-error.model.mjs +5 -3
- package/esm2022/node/node-logs-models/node-logs-models-logs/node-logs-models-logs.component.mjs +79 -0
- package/esm2022/node/node-logs-models/node-logs-models-logs-status/node-logs-models-logs-status.component.mjs +24 -0
- package/esm2022/node/node-logs-models/node-logs-models.component.mjs +12 -54
- package/esm2022/node/node-logs-models/node-logs-models.model.mjs +31 -9
- package/esm2022/node/node.service.mjs +3 -1
- package/fesm2022/hestia-earth-ui-components.mjs +132 -62
- package/fesm2022/hestia-earth-ui-components.mjs.map +1 -1
- package/node/node-logs-models/node-logs-models-logs/node-logs-models-logs.component.d.ts +25 -0
- package/node/node-logs-models/node-logs-models-logs-status/node-logs-models-logs-status.component.d.ts +13 -0
- package/node/node-logs-models/node-logs-models.component.d.ts +0 -11
- package/node/node-logs-models/node-logs-models.model.d.ts +4 -3
- package/node/node.service.d.ts +2 -0
- package/package.json +1 -1
package/common/sort-by.pipe.d.ts
CHANGED
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
import { PipeTransform } from '@angular/core';
|
|
2
2
|
import * as i0 from "@angular/core";
|
|
3
|
+
type order = 'asc' | 'desc';
|
|
3
4
|
export declare class SortByPipe<T> implements PipeTransform {
|
|
4
|
-
transform(value: T[], keys: string[], orders?:
|
|
5
|
+
transform(value: T[], keys: string | string[], orders?: order | order[]): T[];
|
|
5
6
|
static ɵfac: i0.ɵɵFactoryDeclaration<SortByPipe<any>, never>;
|
|
6
7
|
static ɵpipe: i0.ɵɵPipeDeclaration<SortByPipe<any>, "sortBy", true>;
|
|
7
8
|
}
|
|
9
|
+
export {};
|
|
@@ -15,4 +15,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.11", ngImpo
|
|
|
15
15
|
standalone: true
|
|
16
16
|
}]
|
|
17
17
|
}] });
|
|
18
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
18
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic29ydC1ieS5waXBlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2NvbW1vbi9zb3J0LWJ5LnBpcGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLElBQUksRUFBaUIsTUFBTSxlQUFlLENBQUM7QUFDcEQsT0FBTyxPQUFPLE1BQU0sZ0JBQWdCLENBQUM7O0FBUXJDLE1BQU0sT0FBTyxVQUFVO0lBQ3JCLFNBQVMsQ0FBQyxLQUFVLEVBQUUsSUFBdUIsRUFBRSxTQUEwQixDQUFDLEtBQUssQ0FBQztRQUM5RSxPQUFPLE9BQU8sQ0FBQyxLQUFLLEVBQUUsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQ3RDLENBQUM7K0dBSFUsVUFBVTs2R0FBVixVQUFVOzs0RkFBVixVQUFVO2tCQUp0QixJQUFJO21CQUFDO29CQUNKLElBQUksRUFBRSxRQUFRO29CQUNkLFVBQVUsRUFBRSxJQUFJO2lCQUNqQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFBpcGUsIFBpcGVUcmFuc2Zvcm0gfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCBvcmRlckJ5IGZyb20gJ2xvZGFzaC5vcmRlcmJ5JztcblxudHlwZSBvcmRlciA9ICdhc2MnIHwgJ2Rlc2MnO1xuXG5AUGlwZSh7XG4gIG5hbWU6ICdzb3J0QnknLFxuICBzdGFuZGFsb25lOiB0cnVlXG59KVxuZXhwb3J0IGNsYXNzIFNvcnRCeVBpcGU8VD4gaW1wbGVtZW50cyBQaXBlVHJhbnNmb3JtIHtcbiAgdHJhbnNmb3JtKHZhbHVlOiBUW10sIGtleXM6IHN0cmluZyB8IHN0cmluZ1tdLCBvcmRlcnM6IG9yZGVyIHwgb3JkZXJbXSA9IFsnYXNjJ10pOiBUW10ge1xuICAgIHJldHVybiBvcmRlckJ5KHZhbHVlLCBrZXlzLCBvcmRlcnMpO1xuICB9XG59XG4iXX0=
|
|
@@ -477,7 +477,9 @@ const customErrorMessage = {
|
|
|
477
477
|
Here, you have stated that ${schemaLink('Cycle#cycleDuration', 'cycleDuration')} represents the period from
|
|
478
478
|
${code(params?.current)} to harvest of the current crop, and set ${schemaLink('Cycle#cycleDuration', 'cycleDuration')} as equal to ${schemaLink('Cycle#siteDuration', 'siteDuration')}.
|
|
479
479
|
Please check the affected fields for errors.`,
|
|
480
|
-
'must be linked via a defaultSource': () => `
|
|
480
|
+
'must be linked via a defaultSource': () => `You can only have a ${code('source.id')} if this is used as a ${code('defaultSource')} for either a Cycle or Site.
|
|
481
|
+
If there is sufficient data from this source, then create a new Cycle or Site with ${code('the source.id')} as the ${code('defaultSource')}.
|
|
482
|
+
Otherwise, remove this Source and, on the relevant data, change the method classification, e.g. to inconsistent external sources, with a description of the source used.`,
|
|
481
483
|
'is required when using other model': () => `If you are using the term ${code('Other model')}, please provide a short description of the model in ${code('methodModelDescription')}, including any references to model documentation.`,
|
|
482
484
|
'should add the term productivePhasePermanentCrops': () => `You need to specify whether the permanent crop is in its productive phase when the value of the primary product is ${code('0')}.
|
|
483
485
|
To do this, add the ${termLink({
|
|
@@ -493,7 +495,7 @@ const customErrorMessage = {
|
|
|
493
495
|
const requiredPropertyError = (message, error) => {
|
|
494
496
|
const field = message.split("'")[1].replace("'", '');
|
|
495
497
|
const nodeType = dataPathLabel(error?.dataPath);
|
|
496
|
-
return `You are missing the following required field: ${code(field)}. ${nodeType
|
|
498
|
+
return `You are missing the following required field: ${code(field)}. ${nodeType && nodeType.toLowerCase() !== 'completeness'
|
|
497
499
|
? `Either: add ${code(field)}, or if you if you did not intend to add this ${nodeType}, please remove all fields on this ${nodeType}.`
|
|
498
500
|
: ''}`.trim();
|
|
499
501
|
};
|
|
@@ -518,4 +520,4 @@ export const isMissingOneOfError = ({ keyword, schemaPath }) => keyword === 'req
|
|
|
518
520
|
const isFailingKeywordError = ({ params }) => !!params && 'failingKeyword' in params;
|
|
519
521
|
export const filterError = (error) => [isFailingKeywordError].every(func => !func(error));
|
|
520
522
|
export const missingNodeErrors = (errors) => errors.filter(({ keyword, params }) => keyword === 'required' && (params?.missingProperty === '@type' || params?.missingProperty === '@id'));
|
|
521
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsZXMtZXJyb3IubW9kZWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvZmlsZXMvZmlsZXMtZXJyb3IubW9kZWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsK0JBQStCO0FBQy9CLDRCQUE0QjtBQUM1QixzQ0FBc0M7QUFDdEMsT0FBTyxFQUFFLG1CQUFtQixFQUFFLFFBQVEsRUFBRSxVQUFVLEVBQVEsWUFBWSxFQUFFLFdBQVcsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ2xILE9BQU8sRUFBRSxXQUFXLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBRXRFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNyRCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUM3RCxPQUFPLEVBQ0wsVUFBVSxFQUNWLFFBQVEsRUFDUixPQUFPLEVBQ1AsSUFBSSxFQUNKLGFBQWEsRUFDYixZQUFZLEVBQ1osZUFBZSxFQUNmLFlBQVksRUFDWixRQUFRLEVBQ1IsZUFBZSxFQUNmLFVBQVUsRUFDWCxNQUFNLGlCQUFpQixDQUFDO0FBQ3pCLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQVdoRCxNQUFNLGVBQWUsR0FBRyx5Q0FBeUMsQ0FBQztBQVVsRSxNQUFNLENBQUMsTUFBTSxhQUFhLEdBQUcsQ0FBQyxRQUFRLEdBQUcsRUFBRSxFQUFlLEVBQUU7SUFDMUQsTUFBTSxDQUFDLENBQUMsRUFBRSxHQUFHLEtBQUssQ0FBQyxHQUFHLFFBQVE7U0FDM0IsT0FBTyxDQUFDLGlCQUFpQixFQUFFLEVBQUUsQ0FBQztTQUM5QixPQUFPLENBQUMsV0FBVyxFQUFFLE1BQU0sQ0FBQztTQUM1QixLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDZCxPQUFPLEtBQUssQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUU7UUFDdEIsTUFB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LElBQUksRUFBRSxDQUFDLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0FBRWpFLE1BQU0scUJBQXFCLEdBQUcsQ0FBQyxFQUFFLE1BQU0sRUFBb0IsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLE1BQU0sSUFBSSxnQkFBZ0IsSUFBSSxNQUFNLENBQUM7QUFFdkcsTUFBTSxDQUFDLE1BQU0sV0FBVyxHQUFHLENBQUMsS0FBdUIsRUFBRSxFQUFFLENBQUMsQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7QUFFNUcsTUFBTSxDQUFDLE1BQU0saUJBQWlCLEdBQUcsQ0FBQyxNQUEwQixFQUFFLEVBQUUsQ0FDOUQsTUFBTSxDQUFDLE1BQU0sQ0FDWCxDQUFDLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxFQUFFLEVBQUUsQ0FDdEIsT0FBTyxLQUFLLFVBQVUsSUFBSSxDQUFDLE1BQU0sRUFBRSxlQUFlLEtBQUssT0FBTyxJQUFJLE1BQU0sRUFBRSxlQUFlLEtBQUssS0FBSyxDQUFDLENBQ3ZHLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBjb21wbGV4aXR5ICovXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBuby11c2VsZXNzLWVzY2FwZSAqL1xuaW1wb3J0IHsgQ3ljbGVGdW5jdGlvbmFsVW5pdCwgTm9kZVR5cGUsIFNjaGVtYVR5cGUsIFRlcm0sIFRlcm1UZXJtVHlwZSwgaXNUeXBlVmFsaWQgfSBmcm9tICdAaGVzdGlhLWVhcnRoL3NjaGVtYSc7XG5pbXBvcnQgeyB0b1ByZWNpc2lvbiwga2V5VG9MYWJlbCwgdW5pcXVlIH0gZnJvbSAnQGhlc3RpYS1lYXJ0aC91dGlscyc7XG5cbmltcG9ydCB7IHRlcm1UeXBlTGFiZWwgfSBmcm9tICcuLi90ZXJtcy90ZXJtcy5tb2RlbCc7XG5pbXBvcnQgeyBwYXRoVG9BcGlEb2NzUGF0aCB9IGZyb20gJy4uL2VuZ2luZS9lbmdpbmUuc2VydmljZSc7XG5pbXBvcnQge1xuICBSZXBvc2l0b3J5LFxuICBUZW1wbGF0ZSxcbiAgYmFzZVVybCxcbiAgY29kZSxcbiAgY29udGFjdFVzTGluayxcbiAgZXh0ZXJuYWxMaW5rLFxuICBnbG9zc2FyeUJhc2VVcmwsXG4gIGdsb3NzYXJ5TGluayxcbiAgbm9kZUxpbmssXG4gIHJlcG9ydElzc3VlTGluayxcbiAgc2NoZW1hTGlua1xufSBmcm9tICcuLi9jb21tb24vdXRpbHMnO1xuaW1wb3J0IHsgcGx1cmFsaXplIH0gZnJvbSAnLi4vY29tbW9uL3BsdXJhbGl6ZSc7XG5pbXBvcnQgeyBJVmFsaWRhdGlvbkVycm9yIH0gZnJvbSAnLi4vc2NoZW1hL3NjaGVtYS12YWxpZGF0aW9uLm1vZGVsJztcblxuZXhwb3J0IGludGVyZmFjZSBJVmFsaWRhdGlvbkVycm9yV2l0aEluZGV4IHtcbiAgZXJyb3I6IElWYWxpZGF0aW9uRXJyb3JbXTtcbiAgaW5kZXg6IG51bWJlcjtcbiAgY2hhbmdlZD86IGJvb2xlYW47XG59XG5cbnR5cGUgaGFuZGxlRXJyb3JGdW5jID0gKGVycm9yOiBJVmFsaWRhdGlvbkVycm9yLCBlcnJvckNvdW50PzogbnVtYmVyLCBhbGxFcnJvcnM/OiBJVmFsaWRhdGlvbkVycm9yW10pID0+IHN0cmluZztcblxuY29uc3QgbWFwRXJyb3JNZXNzYWdlID0gJ2RvZXMgbm90IGNvbnRhaW4gbGF0aXR1ZGUgYW5kIGxvbmdpdHVkZSc7XG5cbmludGVyZmFjZSBJRGF0YVBhdGgge1xuICBwYXRoOiBzdHJpbmc7XG4gIC8qKlxuICAgKiBIdW1hbiByZWFkYWJsZSB2ZXJzaW9uIG9mIHRoZSBwYXRoLlxuICAgKi9cbiAgbGFiZWw6IHN0cmluZztcbn1cblxuZXhwb3J0IGNvbnN0IHBhcnNlRGF0YVBhdGggPSAoZGF0YVBhdGggPSAnJyk6IElEYXRhUGF0aFtdID0+IHtcbiAgY29uc3QgW18sIC4uLnBhdGhzXSA9IGRhdGFQYXRoXG4gICAgLnJlcGxhY2UoL1tcXFtcXF1cXCdcXCdcXFwiXFxcIl0vZywgJycpXG4gICAgLnJlcGxhY2UoLyhcXHcpKFxcQCkvZywgJyQxLkAnKVxuICAgIC5zcGxpdCgnLicpO1xuICByZXR1cm4gcGF0aHMubWFwKHBhdGggPT4ge1xuICAgIGNvbnN0IGxhYmVsID0gcGF0aC5yZXBsYWNlKC9bXFxkXFxAXSsvZywgJycpO1xuICAgIGNvbnN0IHR5cGUgPSBwbHVyYWxpemUoa2V5VG9MYWJlbChsYWJlbCksIDEpIGFzIFNjaGVtYVR5cGU7XG4gICAgY29uc3QgaXNTY2hlbWFUeXBlID0gaXNUeXBlVmFsaWQoeyB0eXBlIH0pO1xuICAgIHJldHVybiB7XG4gICAgICBwYXRoOiBwYXRoLnJlcGxhY2UoLyhcXGQrKS9nLCAnWyQxXScpLFxuICAgICAgbGFiZWw6IGlzU2NoZW1hVHlwZSA/IHR5cGUgOiBgPGNvZGU+JHtwbHVyYWxpemUobGFiZWwsIDEpfTwvY29kZT5gXG4gICAgfTtcbiAgfSk7XG59O1xuXG5jb25zdCBhbGxvd2VkRGF0YVBhdGhzTGFiZWxzID0gT2JqZWN0LnZhbHVlcyhTY2hlbWFUeXBlKTtcblxuZXhwb3J0IGNvbnN0IGRhdGFQYXRoTGFiZWwgPSAoZGF0YVBhdGggPSAnJykgPT5cbiAgcGFyc2VEYXRhUGF0aChkYXRhUGF0aClcbiAgICAuZmlsdGVyKCh7IGxhYmVsIH0pID0+IGFsbG93ZWREYXRhUGF0aHNMYWJlbHMuaW5jbHVkZXMobGFiZWwgYXMgU2NoZW1hVHlwZSkpXG4gICAgLnBvcCgpPy5sYWJlbDtcblxuY29uc3QgZ2xvc3NhcnlUeXBlTGluayA9ICh0eXBlOiBUZXJtVGVybVR5cGUsIHRleHQgPSB0ZXJtVHlwZUxhYmVsKHR5cGUpKSA9PlxuICBleHRlcm5hbExpbmsoYCR7Z2xvc3NhcnlCYXNlVXJsKCl9P3Rlcm1UeXBlPSR7dHlwZX1gLCB0ZXh0KTtcbmNvbnN0IHRlcm1MaW5rID0gKHsgaWQsIG5hbWUgfTogUGFydGlhbDxUZXJtPikgPT4gZXh0ZXJuYWxMaW5rKGAke2Jhc2VVcmwoKX0vdGVybS8ke2lkfWAsIG5hbWUgfHwgaWQpO1xuY29uc3QgZGF0ZUZvcm1hdE1lc3NhZ2UgPSBgc2hvdWxkIGZvbGxvdyB0aGUgSVNPIDg2MDEgZGF0ZSBmb3JtYXQsIGUuZy4gJHtjb2RlKDIwMDApfSwgb3IgJHtjb2RlKCcyMDAwLTEyJyl9LCBvciAke2NvZGUoXG4gICcyMDAwLTEyLTMwJ1xuKX1gO1xuY29uc3QgbW9kZWxMaW5rID0gKHRlcm06IFRlcm0sIG1vZGVsOiBUZXJtKSA9PiBgXG4gIDxhIGhyZWY9XCIke3BhdGhUb0FwaURvY3NQYXRoKG1vZGVsWydAaWQnXSwgdGVybVsnQGlkJ10pfVwiIHRhcmdldD1cIl9ibGFua1wiPlxuICAgIDxzcGFuIGNsYXNzPVwicHItMVwiPiR7bW9kZWwubmFtZX08L3NwYW4+XG4gICAgPHNwYW4+KFZpZXcgRG9jcyk8L3NwYW4+XG4gIDwvYT5cbmA7XG5jb25zdCB0aHJlc2hvbGQgPSAodmFsdWU6IG51bWJlcikgPT4gY29kZShgJHt2YWx1ZSAqIDEwMH0lYCk7XG5cbmNvbnN0IG5vVGlsbGFnZTogUGFydGlhbDxUZXJtPiA9IHsgaWQ6ICdub1RpbGxhZ2UnLCBuYW1lOiAnTm8gdGlsbGFnZScgfTtcbmNvbnN0IHBhc3R1cmVHcmFzczogUGFydGlhbDxUZXJtPiA9IHsgaWQ6ICdwYXN0dXJlR3Jhc3MnLCBuYW1lOiAnUGFzdHVyZSBncmFzcycgfTtcblxuY29uc3QgaWROb3RGb3VuZERlZmF1bHRNZXNzYWdlID0gYFxuICBJZiB5b3UgYXJlIHVzaW5nIHRoZSAke2NvZGUoJ25hbWUnKX0gb2YgdGhlIFRlcm0sIG1ha2Ugc3VyZSB0byB1c2UgJHtjb2RlKCd0ZXJtLm5hbWUnKX0gY29sdW1uO1xuICBpZiB5b3UgYXJlIHVzaW5nIHRoZSAke2NvZGUoJ0BpZCcpfSBvZiB0aGUgVGVybSwgdXNlIHRoZSAke2NvZGUoJ3Rlcm0uQGlkJyl9IGNvbHVtbiBpbnN0ZWFkLlxuYC50cmltKCk7XG5cbmV4cG9ydCBjb25zdCBpc01pZ3JhdGlvbkVycm9yID0gKHsgcGFyYW1zIH06IElWYWxpZGF0aW9uRXJyb3IpID0+IHBhcmFtcz8uY3VycmVudCAmJiAnZXhwZWN0ZWQnIGluIHBhcmFtcztcblxuZXhwb3J0IGNvbnN0IG1pZ3JhdGlvbkVycm9yTWVzc2FnZSA9ICh7IHBhcmFtcyB9OiBJVmFsaWRhdGlvbkVycm9yKSA9PlxuICBwYXJhbXM/LmV4cGVjdGVkXG4gICAgPyBgVGhlIFRlcm0gJHtjb2RlKHBhcmFtcy5jdXJyZW50KX0gd2FzIHVwZGF0ZWQsIHBsZWFzZSB1c2UgdGhpcyBUZXJtIGluc3RlYWQ6ICR7Y29kZShwYXJhbXMuZXhwZWN0ZWQpfS5gXG4gICAgOiBgVGhlIFRlcm0gJHtjb2RlKHBhcmFtcy5jdXJyZW50KX0gd2FzIGRlbGV0ZWQuIFBsZWFzZSBzZWFyY2ggdGhlICR7Z2xvc3NhcnlMaW5rKCdHbG9zc2FyeScpfSBmb3IgYSBuZXcgVGVybS5gO1xuXG5jb25zdCBpZE5vdEZvdW5kRXJyb3I6IGhhbmRsZUVycm9yRnVuYyA9IChfZXJyb3IsIF9lcnJvckNvdW50LCBhbGxFcnJvcnMpID0+IHtcbiAgY29uc3QgbWlncmF0aW9uRXJyb3JzID0gYWxsRXJyb3JzLmZpbHRlcihpc01pZ3JhdGlvbkVycm9yKTtcbiAgY29uc3Qgbm9NaWdyYXRpb25FcnJvcnMgPSBhbGxFcnJvcnMuZmlsdGVyKGVycm9yID0+ICFpc01pZ3JhdGlvbkVycm9yKGVycm9yKSk7XG4gIHJldHVybiBgXG4gICAgPHA+RG9lcyBub3QgZXhpc3QgaW4gSEVTVElBLjwvcD5cbiAgICAke25vTWlncmF0aW9uRXJyb3JzLmxlbmd0aCA/IGA8cD4ke2lkTm90Rm91bmREZWZhdWx0TWVzc2FnZX08L3A+YCA6ICcnfVxuICAgICR7dW5pcXVlKG1pZ3JhdGlvbkVycm9ycy5tYXAobWlncmF0aW9uRXJyb3JNZXNzYWdlKSkuam9pbignPC9icj4nKX1cbiAgYDtcbn07XG5cbmNvbnN0IG1ldGhvZE1vZGVsTWFwcGluZ0Vycm9yOiBoYW5kbGVFcnJvckZ1bmMgPSAoeyBwYXJhbXMgfSwgZXJyb3JDb3VudCkgPT5cbiAgYCR7XG4gICAgZXJyb3JDb3VudCA9PT0gMVxuICAgICAgPyBgJHtcbiAgICAgICAgICBwYXJhbXM/LmFsbG93ZWRWYWx1ZXMubGVuZ3RoXG4gICAgICAgICAgICA/IGBjYW4gb25seSBiZSB1c2VkIHdpdGggb25lIG9mIHRoZXNlIG1ldGhvZHM6ICR7cGFyYW1zPy5hbGxvd2VkVmFsdWVzLm1hcChjb2RlKS5qb2luKCcsICcpfWBcbiAgICAgICAgICAgIDogYGRvZXMgbm90IGN1cnJlbnRseSBoYXZlIGFueSBtZXRob2QgYWxsb3dlZC4gUGxlYXNlICR7Y29udGFjdFVzTGluaygpfSB0byBjaGFuZ2UgdGhpcy5gXG4gICAgICAgIH0uYFxuICAgICAgOiBgU29tZSBUZXJtcyBhcmUgbm90IGFsbG93ZWQgd2l0aCB0aGUgbWV0aG9kIHlvdSBzZWxlY3RlZC5gXG4gIH1cbiAgWW91IGNhbiBmaW5kIHRoZSBsaXN0IG9mIGFsbG93ZWQgbWV0aG9kcyBmb3IgZWFjaCBUZXJtIGJ5IGNsaWNraW5nIG9uIHRoZW0uYDtcblxuLy8gc2V0IG1lc3NhZ2UgYXMgZW1wdHkgdG8gbm90IGRpc3BsYXkgaXRcbmNvbnN0IGN1c3RvbUVycm9yTWVzc2FnZToge1xuICBba2V5OiBzdHJpbmddOiBoYW5kbGVFcnJvckZ1bmM7XG59ID0ge1xuICAnc2hvdWxkIG5vdCBiZSBlbXB0eSc6ICh7IHBhcmFtcyB9KSA9PlxuICAgIFtcbiAgICAgIGBFbXB0eSAke3BhcmFtcy50eXBlfSBhcmUgbm90IGFsbG93ZWQgaW4gSEVTVElBLmAsXG4gICAgICBwYXJhbXM/LnR5cGUgPT09IE5vZGVUeXBlLkltcGFjdEFzc2Vzc21lbnRcbiAgICAgICAgPyBgUGxlYXNlLCBlaXRoZXIgbGluayB5b3VyIEltcGFjdEFzc2Vzc21lbnQgdG8gYW4gZXhpc3RpbmcgQ3ljbGUgdXNpbmcgdGhlICR7Y29kZSgnY3ljbGUuaWQnKX0sXG4gICAgICAgIG9yIGFkZCBvbmUgb3IgbW9yZSAke3NjaGVtYUxpbmsoJ0ltcGFjdEFzc2Vzc21lbnQjZW1pc3Npb25zUmVzb3VyY2VVc2UnLCAnZW1pc3Npb25zUmVzb3VyY2VVc2UnKX0sXG4gICAgICAgICR7c2NoZW1hTGluaygnSW1wYWN0QXNzZXNzbWVudCNpbXBhY3RzJywgJ2ltcGFjdHMnKX0sXG4gICAgICAgIG9yICR7c2NoZW1hTGluaygnSW1wYWN0QXNzZXNzbWVudCNlbmRwb2ludHMnLCAnZW5kcG9pbnRzJyl9LmBcbiAgICAgICAgOiAnJ1xuICAgIF0uam9pbignXFxuJyksXG4gIFwic2hvdWxkIGhhdmUgcmVxdWlyZWQgcHJvcGVydHkgJ0BpZCdcIjogaWROb3RGb3VuZEVycm9yLFxuICBcInNob3VsZCBoYXZlIHJlcXVpcmVkIHByb3BlcnR5ICdAdHlwZSdcIjogKCkgPT4gJycsXG4gIFwic2hvdWxkIGhhdmUgcmVxdWlyZWQgcHJvcGVydHkgJ2lkJ1wiOiBpZE5vdEZvdW5kRXJyb3IsXG4gICdzaG91bGQgbWF0Y2ggZXhhY3RseSBvbmUgc2NoZW1hIGluIG9uZU9mJzogKCkgPT4gJycsXG4gICdzaG91bGQgbWF0Y2ggc29tZSBzY2hlbWEgaW4gYW55T2YnOiAoKSA9PiAnJyxcbiAgJ3Nob3VsZCBtYXRjaCBcInRoZW5cIiBzY2hlbWEnOiAoKSA9PiAnJyxcbiAgJ3Nob3VsZCBOT1QgaGF2ZSBhZGRpdGlvbmFsIHByb3BlcnRpZXMnOiAoeyBwYXJhbXMgfSwgZXJyb3JDb3VudCkgPT5cbiAgICBlcnJvckNvdW50ID09PSAxXG4gICAgICA/IGBUaGUgZm9sbG93aW5nIGZpZWxkIGRvZXMgbm90IGV4aXN0OiAke3BhcmFtcz8uYWRkaXRpb25hbFByb3BlcnR5fSBvciBpcyBub3QgYWxsb3dlZCBpbiB0aGlzIGNhc2UuYFxuICAgICAgOiBgU2hvdWxkIG5vdCBoYXZlIGFkZGl0aW9uYWwgcHJvcGVydGllcy5gLFxuICAnc2hvdWxkIE5PVCBiZSB2YWxpZCc6ICh7IHNjaGVtYSB9KSA9PlxuICAgIHNjaGVtYT8ucmVxdWlyZWQ/LmluY2x1ZGVzKCdhcmVhUGVyY2VudCcpXG4gICAgICA/IGBJZiB0aGUgdGVybSB1bml0cyBpcyBhbHJlYWR5IGluICR7Y29kZSgnJSBhcmVhJyl9LCBqdXN0IHVzZSAke2NvZGUoJ3ZhbHVlJyl9LiBEb250IHVzZSAke2NvZGUoJ2FyZWFQZXJjZW50Jyl9LmBcbiAgICAgIDogc2NoZW1hPy5yZXF1aXJlZD8uaW5jbHVkZXMoJ3RyYW5zZm9ybWF0aW9uJylcbiAgICAgICAgPyAnQSB0cmFuc2Zvcm1hdGlvbiBjYW4gbm90IGJlIGFkZGVkIGhlcmUuJ1xuICAgICAgICA6IHNjaGVtYT8ucmVxdWlyZWQ/LmluY2x1ZGVzKCdmcm9tQ3ljbGUnKVxuICAgICAgICAgID8gYFRoaXMgZmllbGQgY2FuIG9ubHkgYmUgYWRkZWQgdG8gdGhlICR7c2NoZW1hTGluaygnVHJhbnNmb3JtYXRpb24jaW5wdXRzJywgJ2lucHV0cyBvZiBhIFRyYW5zZm9ybWF0aW9uJyl9LmBcbiAgICAgICAgICA6IHNjaGVtYT8ucmVxdWlyZWQ/LmluY2x1ZGVzKCdvdGhlclNpdGVzJylcbiAgICAgICAgICAgID8gYFBsZWFzZSBvbmx5IHNwZWNpZnkgYSBzaW5nbGUgJHtzY2hlbWFMaW5rKCdDeWNsZSNzaXRlJywgJ3NpdGUnKX0gd2hlbiB0aGUgZnVuY3Rpb25hbCB1bml0IGlzICR7Y29kZShcbiAgICAgICAgICAgICAgICBDeWNsZUZ1bmN0aW9uYWxVbml0WycxIGhhJ11cbiAgICAgICAgICAgICAgKX0uYFxuICAgICAgICAgICAgOiAvLyB0ZXJtVHlwZSByZXN0cmljdGlvbiBvbiB0aGUgaXRlbVxuICAgICAgICAgICAgICBzY2hlbWE/LnByb3BlcnRpZXM/LnRlcm0/LnByb3BlcnRpZXM/LnRlcm1UeXBlPy5lbnVtPy5sZW5ndGhcbiAgICAgICAgICAgICAgPyBgVGhpcyAke2NvZGUoJ3Rlcm1UeXBlJyl9IGlzIG5vdCBhbGxvd2VkIGhlcmUuYFxuICAgICAgICAgICAgICA6ICdTaG91bGQgbm90IGJlIHVzZWQgaW4gdGhpcyBjYXNlLicsXG4gICdzaG91bGQgbWF0Y2ggcGF0dGVybiBcIl5cXFxcZHsxM30kXCInOiAoKSA9PiBgc2hvdWxkIGJlIGNvbXBvc2VkIG9mIDEzIG51bWJlcnNgLFxuICAnc2hvdWxkIG1hdGNoIHBhdHRlcm4gXCJeWzAtOV17NH0oLVswLTldezJ9KT8oLVswLTldezJ9KT8kXCInOiAoKSA9PiBkYXRlRm9ybWF0TWVzc2FnZSxcbiAgJ3Nob3VsZCBtYXRjaCBwYXR0ZXJuIFwiXihbMC05XXs0fXwtKSgtWzAtOV17Mn0pPygtWzAtOV17Mn0pPyRcIic6ICgpID0+IGRhdGVGb3JtYXRNZXNzYWdlLFxuICAnc2hvdWxkIG1hdGNoIHBhdHRlcm4gXCJeKFswLTldezR9fC0pKC1bMC05XXsyfSk/KC1bMC05XXsyfSk/KFtUXVswLTJdWzAtOV06WzAtNV1bMC05XTpbMC01XVswLTldKCgrfC0pWzAtMV1bMC05XTpbMC01XVswLTldKT8pPyRcIic6XG4gICAgKCkgPT4gZGF0ZUZvcm1hdE1lc3NhZ2UsXG4gICdzaG91bGQgbWF0Y2ggcGF0dGVybiBcIl4xMC4oZCkrLyhTKSskXCInOiAoKSA9PlxuICAgIGBUaGUgRE9JIHNob3VsZCBub3QgaW5jbHVkZSB0aGUgZG9tYWluIG5hbWUsIGUuZy4gJHtjb2RlKCcxMC4xMDAwLzE4MicpfSBpbnN0ZWFkIG9mICR7Y29kZShcbiAgICAgICdodHRwczovL2RvaS5vcmcvMTAuMTAwMC8xODInXG4gICAgKX1gLFxuICAnc2hvdWxkIGhhdmUgdGhlIHNhbWUgbGVuZ3RoIGFzIGVuZERhdGUnOiAoKSA9PlxuICAgIGBUaGUgc3RhcnREYXRlIG11c3QgYmUgaW4gdGhlIHNhbWUgZGF0ZSBmb3JtYXQgYXMgJHtjb2RlKCdlbmREYXRlJyl9OiBZWVlZLU1NLURELCBZWVlZLU1NLCBvciBZWVlZLmAsXG4gICdub2RlIG5vdCBmb3VuZCc6IChlcnJvciwgX2Vycm9yQ291bnQsIGFsbEVycm9ycykgPT5cbiAgICBgJHtcbiAgICAgIGFsbEVycm9ycz8ubGVuZ3RoXG4gICAgICAgID8gYFRoZSBmb2xsb3dpbmcgTm9kZXMgZG8gbm90IGV4aXN0IG9uIHRoZSBwbGF0Zm9ybTpcbiAgICAgICAgICA8dWwgY2xhc3M9XCJpcy1wbC0zIGlzLWxpc3Qtc3R5bGUtZGlzYyBpcy1ub3dyYXBcIj5cbiAgICAgICAgICAgICR7dW5pcXVlKFxuICAgICAgICAgICAgICBhbGxFcnJvcnMubWFwKFxuICAgICAgICAgICAgICAgICh7IHBhcmFtcyB9KSA9PlxuICAgICAgICAgICAgICAgICAgYDxsaSBjbGFzcz1cImlzLXByZS13cmFwXCI+JHtwYXJhbXM/Lm5vZGU/LlsnQHR5cGUnXX0gd2l0aCAke2NvZGUoYEBpZD0ke3BhcmFtcz8ubm9kZT8uWydAaWQnXX1gKX08L2xpPmBcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgKS5qb2luKCdcXG4nKX1cbiAgICAgICAgICA8L3VsPmBcbiAgICAgICAgOiBgVGhlICR7ZXJyb3IucGFyYW1zPy5ub2RlPy5bJ0B0eXBlJ119IHdpdGggJHtjb2RlKGBAaWQ9JHtlcnJvci5wYXJhbXM/Lm5vZGU/LlsnQGlkJ119YCl9IGRvZXMgbm90IGV4aXN0IG9uIHRoZSBwbGF0Zm9ybS5gXG4gICAgfSBJZiB5b3UgYXJlIHRyeWluZyB0byBsaW5rIHRvIG5vZGVzIGluY2x1ZGVkIGluIHRoaXMgdXBsb2FkLCB5b3UgbXVzdCB1c2UgJHtjb2RlKFxuICAgICAgJ2lkJ1xuICAgICl9IGZpZWxkIGluc3RlYWQuIE90aGVyd2lzZSwgcGxlYXNlIGNoZWNrIHRoZSBpZHMgYXJlIGNvcnJlY3QgYW5kIHRyeSBhZ2Fpbi5gLFxuICAnc2hvdWxkIGJlIGxpbmtlZCB0byBhbiBleGlzdGluZyBub2RlJzogKGVycm9yLCBfZXJyb3JDb3VudCwgYWxsRXJyb3JzKSA9PlxuICAgIGFsbEVycm9ycz8ubGVuZ3RoXG4gICAgICA/IGBZb3VyIHVwbG9hZCBkb2VzIG5vdCBjb250YWluIHRoZSBmb2xsb3dpbmcgTm9kZXM6XG4gICAgICA8dWwgY2xhc3M9XCJpcy1wbC0zIGlzLWxpc3Qtc3R5bGUtZGlzYyBpcy1ub3dyYXBcIj5cbiAgICAgICR7dW5pcXVlKFxuICAgICAgICBhbGxFcnJvcnMubWFwKFxuICAgICAgICAgICh7IHBhcmFtcyB9KSA9PiBgPGxpIGNsYXNzPVwiaXMtcHJlLXdyYXBcIj4ke3BhcmFtcz8ubm9kZT8udHlwZX0gd2l0aCAke2NvZGUoYGlkPSR7cGFyYW1zPy5ub2RlPy5pZH1gKX08L2xpPmBcbiAgICAgICAgKVxuICAgICAgKS5qb2luKCdcXG4nKX1cbiAgICAgIDwvdWw+XG4gICAgICBJZiB5b3UgYXJlIHRyeWluZyB0byBsaW5rIHRvIGFuIGV4aXN0aW5nIE5vZGUgb24gdGhlIEhFU1RJQSBwbGF0Zm9ybSwgeW91IG11c3QgdXNlICR7Y29kZSgnQGlkJyl9IGZpZWxkIGluc3RlYWQuXG4gICAgICBPdGhlcndpc2UgeW91IG11c3QgaW5jbHVkZSBhIGZ1bGwgJHt1bmlxdWUoXG4gICAgICAgIGFsbEVycm9ycy5tYXAoKHsgcGFyYW1zIH0pID0+IGAke3BhcmFtcz8ubm9kZT8udHlwZX0gd2l0aCBpZCAke2NvZGUocGFyYW1zPy5ub2RlPy5pZCl9LmApXG4gICAgICApLmpvaW4oJywgJyl9YFxuICAgICAgOiBgWW91ciB1cGxvYWQgZG9lcyBub3QgY29udGFpbiBhICR7ZXJyb3IucGFyYW1zPy5ub2RlPy50eXBlfSB3aXRoICR7Y29kZShgaWQ9JHtlcnJvci5wYXJhbXM/Lm5vZGU/LmlkfWApfS5cbiAgICAgIElmIHlvdSBhcmUgdHJ5aW5nIHRvIGxpbmsgdG8gYW4gZXhpc3RpbmcgTm9kZSBvbiB0aGUgSEVTVElBIHBsYXRmb3JtLCB5b3UgbXVzdCB1c2UgJHtjb2RlKCdAaWQnKX0gZmllbGQgaW5zdGVhZC5cbiAgICAgIE90aGVyd2lzZSB5b3UgbXVzdCBpbmNsdWRlIGEgZnVsbCAke2Vycm9yLnBhcmFtcz8ubm9kZT8udHlwZX0gd2l0aCBpZCAke2NvZGUoZXJyb3IucGFyYW1zPy5ub2RlPy5pZCl9LmAsXG4gICdtdXN0IGJlIHdpdGhpbiB0aGUgY291bnRyeSc6ICgpID0+IGBUaGUgY291bnRyeSBwcm92aWRlZCBkb2VzIG5vdCBjb250YWluIHRoZSByZWdpb24gcHJvdmlkZWQuIFBsZWFzZSBjaGVja1xuICB0aGUgY291bnRyeSBmb3IgZXJyb3JzIG9yIHRoZSByZWdpb24gZm9yIGVycm9ycywgYW5kIHJlZmVyZW5jZSB0aGUgJHtnbG9zc2FyeUxpbmsoJ0dsb3NzYXJ5IG9mIFRlcm1zJyl9LmAsXG4gIFttYXBFcnJvck1lc3NhZ2VdOiAoeyBkYXRhUGF0aCwgcGFyYW1zIH0sIGVycm9yQ291bnQpID0+XG4gICAgZXJyb3JDb3VudCA9PT0gMVxuICAgICAgPyBgVGhlIGxvbmdpdHVkZSBhbmQgbGF0aXR1ZGUgcHJvdmlkZWQgYXJlJHtcbiAgICAgICAgICBwYXJhbXM/LmRpc3RhbmNlID8gYCAke3BhcmFtcz8uZGlzdGFuY2V9a21zYCA6ICcnXG4gICAgICAgIH0gb3V0c2lkZSBvZiB0aGUgJHtkYXRhUGF0aC5zdWJzdHJpbmcoMSl9IHByb3ZpZGVkLlxuICAgICAgUGxlYXNlIGNoZWNrIHRoZSBsb25naXR1ZGUgYW5kIGxhdGl0dWRlIGZvciBlcnJvcnMgb3IgY2hlY2sgaWYgdGhlIHdyb25nICR7ZGF0YVBhdGguc3Vic3RyaW5nKFxuICAgICAgICAxXG4gICAgICApfSBmcm9tIHRoZSAke2dsb3NzYXJ5VHlwZUxpbmsoVGVybVRlcm1UeXBlLnJlZ2lvbiwgJ0dsb3NzYXJ5Jyl9IHdhcyB1c2VkLlxuICAgICAgJHtcbiAgICAgICAgcGFyYW1zPy5leHBlY3RlZFxuICAgICAgICAgID8gYEhpbnQ6IHRoZSBjb29yZGluYXRlcyBhcHBlYXIgdG8gYmUgbG9jYXRlZCBpbiB0aGUgZm9sbG93aW5nICR7ZGF0YVBhdGguc3Vic3RyaW5nKDEpfTogJHt0ZXJtTGluayh7XG4gICAgICAgICAgICAgIGlkOiAncGFyYW1zLmV4cGVjdGVkJ1xuICAgICAgICAgICAgfSl9YFxuICAgICAgICAgIDogJydcbiAgICAgIH1gXG4gICAgICA6IGBUaGUgcmVnaW9uIHByb3ZpZGVkIGRvZXMgbm90IGNvbnRhaW4gdGhlIGxvbmdpdHVkZSBhbmQgbGF0aXR1ZGUgcHJvdmlkZWQuXG4gICAgICBQbGVhc2UgY2hlY2sgdGhlIGxvbmdpdHVkZSBhbmQgbGF0aXR1ZGUgZm9yIGVycm9ycyBvciB0aGUgcmVnaW9uIGZvciBlcnJvciwgYW5kIHJlZmVyZW5jZSB0aGUgJHtnbG9zc2FyeVR5cGVMaW5rKFxuICAgICAgICBUZXJtVGVybVR5cGUucmVnaW9uLFxuICAgICAgICAnR2xvc3Nhcnkgb2YgVGVybXMnXG4gICAgICApfS5gLFxuICAnc3VtIG5vdCBlcXVhbCB0byAxMDAlIGZvciBzYW5kQ29udGVudCwgc2lsdENvbnRlbnQsIGNsYXlDb250ZW50JzogKCkgPT5cbiAgICBgVGhlIHN1bSBvZiBTYW5kLCBTaWx0LCBhbmQgQ2xheSBjb250ZW50IHNob3VsZCBlcXVhbCAxMDAlIGZvciBlYWNoIHNvaWwgZGVwdGggaW50ZXJ2YWwuYCxcbiAgJ2lzIG91dHNpZGUgdGhlIGFsbG93ZWQgcmFuZ2UnOiAoeyBwYXJhbXMgfSwgZXJyb3JDb3VudCkgPT5cbiAgICBgJHtcbiAgICAgIGVycm9yQ291bnQgPT09IDFcbiAgICAgICAgPyBwYXJhbXM/LnRlcm1cbiAgICAgICAgICA/IGBUaGUgdmFsdWUgZm9yICR7Y29kZShcbiAgICAgICAgICAgICAgcGFyYW1zPy50ZXJtWydAaWQnXSB8fCBwYXJhbXM/LnRlcm0ubmFtZVxuICAgICAgICAgICAgKX0gaXMgb3V0c2lkZSB0aGUgcmFuZ2UgZXN0YWJsaXNoZWQgZm9yIHRoZSBzb2lsIHRleHR1cmUgeW91IHByb3ZpZGVkLlxuICAgICAgICAgICAgRm9yIHRoaXMgc29pbCB0ZXh0dXJlLCB0aGUgbWF4aW11bSAke2NvZGUocGFyYW1zPy50ZXJtWydAaWQnXSB8fCBwYXJhbXM/LnRlcm0ubmFtZSl9IGlzICR7XG4gICAgICAgICAgICAgIHBhcmFtcz8ucmFuZ2U/Lm1heFxuICAgICAgICAgICAgfSBhbmQgdGhlIG1pbmltdW0gaXMgJHtwYXJhbXM/LnJhbmdlPy5taW59LmBcbiAgICAgICAgICA6IGBEb2VzIG5vdCBtYXRjaCB0aGUgcG9zc2libGUgcmFuZ2VzIG9mIHNhbmQsIHNpbHQgYW5kIGNsYXkgY29udGVudC5gXG4gICAgICAgIDogYEVhY2ggc29pbCB0ZXh0dXJlIGhhcyBhIG1heGltdW0gYW5kIG1pbmltdW0gdmFsdWUgZm9yIHNhbmQsIHNpbHQsIGFuZCBjbGF5IGNvbnRlbnQuXG4gICAgICAgIEF0IGxlYXN0IG9uZSBtZWFzdXJlbWVudCBvZiBzYW5kLCBzaWx0LCBvciBjbGF5IGNvbnRlbnQgZG9lcyBub3QgbWF0Y2ggdGhlIHBvc3NpYmxlIHJhbmdlIGZvciB0aGUgc3BlY2lmaWVkIHNvaWwgdGV4dHVyZS5gXG4gICAgfVxuICAgICR7XG4gICAgICBlcnJvckNvdW50ID09PSAxXG4gICAgICAgID8gYFBsZWFzZSBjaGVjayB0aGUgbWVhc3VyZW1lbnQsIGl0cyBkZXB0aCBpbnRlcnZhbHMsIGFuZCB0aGUgZGF0ZXMgb2YgdGhlIG1lYXN1cmVtZW50IG9yIHVwZGF0ZSB0aGUgc29pbCB0ZXh0dXJlIGlmIG5lZWRlZC5gXG4gICAgICAgIDogYFBsZWFzZSBjaGVjayB5b3VyIG1lYXN1cmVtZW50cywgdGhlaXIgZGVwdGggaW50ZXJ2YWxzLCBhbmQgdGhlIGRhdGVzIG9mIHRoZSBtZWFzdXJlbWVudHMgb3IgdXBkYXRlIHRoZSBzb2lsIHRleHR1cmVzIGlmIG5lZWRlZC5gXG4gICAgfWAsXG4gICdzaG91bGQgYmUgZXF1YWwgdG8gb25lIG9mIHRoZSBhbGxvd2VkIHZhbHVlcyc6ICh7IHBhcmFtcywgZGF0YVBhdGggfSkgPT4ge1xuICAgIGNvbnN0IHBhdGhzID0gcGFyc2VEYXRhUGF0aChkYXRhUGF0aCk7XG4gICAgY29uc3QgdmFsdWVzID1cbiAgICAgIHBhdGhzLmxlbmd0aCA+PSAyID8gcGx1cmFsaXplKHBhdGhzW3BhdGhzLmxlbmd0aCAtIDFdLnBhdGgsIHBhcmFtcz8uYWxsb3dlZFZhbHVlcz8ubGVuZ3RoIHx8IDApIDogJ3ZhbHVlcyc7XG4gICAgcmV0dXJuIGRhdGFQYXRoLmVuZHNXaXRoKCd0ZXJtLnRlcm1UeXBlJylcbiAgICAgID8gYEZvciAke3BsdXJhbGl6ZShcbiAgICAgICAgICBwYXRoc1twYXRocy5sZW5ndGggLSAzXS5sYWJlbCxcbiAgICAgICAgICAwXG4gICAgICAgICl9LCB3ZSBvbmx5IGFsbG93IHRlcm1zIGZyb20gdGhlIGZvbGxvd2luZyBnbG9zc2FyaWVzOiAke3BhcmFtcz8uYWxsb3dlZFZhbHVlc1xuICAgICAgICAgIC5tYXAoY29kZSlcbiAgICAgICAgICAuam9pbihcbiAgICAgICAgICAgICcsICdcbiAgICAgICAgICApfS4gUGxlYXNlIGVpdGhlciBjaGFuZ2UgdGhlIFRlcm0geW91IGFyZSB1c2luZyBhbmQgZW5zdXJlIGl0IGlzIGZyb20gb25lIG9mIHRoZSBnbG9zc2FyaWVzIGxpc3RlZCBhYm92ZSwgb3IgZm9sbG93IHRoZSBzY2hlbWEgdG8gaWRlbnRpZnkgd2hlcmUgdGhpcyBUZXJtIGNhbiBiZSBhZGRlZC5gXG4gICAgICA6IGBPbmx5IHRoZSBmb2xsb3dpbmcgJHt2YWx1ZXN9IGFyZSBwZXJtaXR0ZWQ6ICR7cGFyYW1zPy5hbGxvd2VkVmFsdWVzLm1hcChjb2RlKS5qb2luKCcsICcpfWA7XG4gIH0sXG4gICdzaG91bGQgYmUgZXF1YWwgdG8gY29uc3RhbnQnOiAoeyBwYXJhbXMgfSkgPT4gYE11c3QgYmU6ICR7Y29kZShwYXJhbXM/LmFsbG93ZWRWYWx1ZSl9YCxcbiAgJ2lzIG5vdCBhbGxvd2VkIGZvciB0aGlzIGVtaXNzaW9uJzogbWV0aG9kTW9kZWxNYXBwaW5nRXJyb3IsXG4gICdpcyBub3QgYWxsb3dlZCBmb3IgdGhpcyBjaGFyYWN0ZXJpc2VkSW5kaWNhdG9yJzogbWV0aG9kTW9kZWxNYXBwaW5nRXJyb3IsXG4gICdpcyBub3QgYWxsb3dlZCBmb3IgdGhpcyByZXNvdXJjZVVzZSc6IG1ldGhvZE1vZGVsTWFwcGluZ0Vycm9yLFxuICAnc2hvdWxkIGNvbnRhaW4gYSB2YWxpZCBpdGVtJzogKHsgZGF0YVBhdGggfSkgPT4ge1xuICAgIGNvbnN0IHBhdGhzID0gcGFyc2VEYXRhUGF0aChkYXRhUGF0aCEpO1xuICAgIHJldHVybiBwYXRocy5sZW5ndGggPj0gMlxuICAgICAgPyBgVGhlICR7cGF0aHNbcGF0aHMubGVuZ3RoIC0gMV0ucGF0aH0gcmVsYXRlZCB0byB0aGlzICR7cGx1cmFsaXplKHBhdGhzW3BhdGhzLmxlbmd0aCAtIDJdLmxhYmVsLCAxKX0gYXJlIGludmFsaWRgXG4gICAgICA6IGBUaGUgJHtwYXRoc1swXS5wYXRofSBhcmUgaW52YWxpZGA7XG4gIH0sXG4gICdtYXkgYmUgYmV0d2VlbiAwIGFuZCAxMDAnOiAoKSA9PiAnUGVyY2VudGFnZXMgc2hvdWxkIGJlIGJldHdlZW4gMCBhbmQgMTAwLCBub3QgMCBhbmQgMS4gVGhpcyBtYXkgYmUgYW4gZXJyb3IuJyxcbiAgJ21heSBub3QgYWxsIGJlIHNldCB0byBmYWxzZSc6ICgpID0+XG4gICAgYEV2ZXJ5IHZhbHVlIGluIHRoZSBkYXRhIGNvbXBsZXRlbmVzcyBhc3Nlc3NtZW50IGlzICR7Y29kZShmYWxzZSl9LiBZb3UgbWF5IGhhdmUgZm9yZ290dGVuIHRvIGZpbGwgaXQgaW4uXG4gIEZvciBpbmZvcm1hdGlvbiBvbiBob3cgdG8gZmlsbCBpdCBpbiwgcGxlYXNlIHNlZSB0aGUgJHtzY2hlbWFMaW5rKCdDeWNsZSNjb21wbGV0ZW5lc3MnLCAnc2NoZW1hJyl9LmAsXG4gICdtYXkgbm90IGJlIGVtcHR5JzogKCkgPT4gJ2lmIHRoaXMgdmFsdWUgc2lnbmlmaWVzIG5vIGRhdGEsIEhFU1RJQSBvbmx5IGFjY2VwdHMgXCItXCIgb3IgZW1wdHkgZm9yIG5vIGRhdGEnLFxuICAnbWF5IG5vdCBiZSAwJzogKHsgZGF0YVBhdGggfSwgZXJyb3JDb3VudCkgPT5cbiAgICBgQWRkaW5nIGEgdmFsdWUgJHtlcnJvckNvdW50ID09PSAxID8gYCB0byBldmVyeSAke2RhdGFQYXRoTGFiZWwoZGF0YVBhdGgpfSBgIDogJyAnfSBpcyBoaWdobHkgcmVjb21tZW5kZWQuXG4gICAgICBJZiB0aGUgYW1vdW50IHByb2R1Y2VkIGlzIHplcm8sIHdlIHJlY29tbWVuZCBzZXR0aW5nIHZhbHVlIHRvIDAuYCxcbiAgJ2xvbmdGYWxsb3dEdXJhdGlvbiBtdXN0IGJlIGxvd2VyIHRoYW4gNSB5ZWFycyc6ICgpID0+XG4gICAgYFlvdXIgbG9uZyBmYWxsb3cgZHVyYXRpb24gaXMgZ3JlYXRlciB0aGFuIGZpdmUgeWVhcnMuXG4gICAgRmFsbG93IGlzIGRlZmluZWQgYnkgRkFPU1RBVCBhcyBsYW5kIGxlZnQgdW5jdWx0aXZhdGVkIGZvciBiZXR3ZWVuIDEgYW5kIDUgeWVhcnMsXG4gICAgYW5kIHRoaXMgZGVmaW5pdGlvbiBpcyB1c2VkIGZvciBIRVNUSUEgYWxzby5gLFxuICAnc2hvdWxkIGJlIG1vcmUgdGhhbiB0aGUgY3JvcHBpbmcgZHVyYXRpb24nOiAoeyBwYXJhbXMgfSkgPT5cbiAgICBgVGhlICR7c2NoZW1hTGluayhcbiAgICAgICdDeWNsZSNjeWNsZUR1cmF0aW9uJyxcbiAgICAgICdjeWNsZUR1cmF0aW9uJ1xuICAgICl9IGlzIHNob3J0ZXIgdGhhbiB0aGUgY291bnRyeSdzIG1pbmltdW0gY3JvcHBpbmcgZHVyYXRpb24gZm9yIHJpY2UgKCR7Y29kZShwYXJhbXM/LmV4cGVjdGVkKX0pLlxuICAgIFRoaXMgbWlnaHQgYmUgYW4gZXJyb3IgYW5kIHJlc3VsdCBpbiB0aGUgdW5kZXJlc3RpbWF0aW9uIG9mIHRoZSAke2NvZGUoJ0NINCwgdG8gYWlyLCBmbG9vZGVkIHJpY2UnKX0gZW1pc3Npb25zLlxuICAgIFBsZWFzZSwgZG91YmxlLWNoZWNrIHRoYXQgdGhlICR7c2NoZW1hTGluaygnQ3ljbGUjY3ljbGVEdXJhdGlvbicsICdjeWNsZUR1cmF0aW9uJyl9IGlzIGNvcnJlY3RseSBzZXQuXG5gLFxuICAnY3JvcHBpbmdEdXJhdGlvbiBtdXN0IGJlIGJldHdlZW4gbWluIGFuZCBtYXgnOiAoeyBwYXJhbXMgfSkgPT5cbiAgICBgVGhlICR7Y29kZSgnY3JvcHBpbmdEdXJhdGlvbicpfSBzaG91bGQgYmUgd2l0aGluIHRoZSBjb3VudHJ5J3MgbWluaW11bSAoJHtwYXJhbXMubWlufSkgYW5kIG1heGltdW0gKCR7cGFyYW1zLm1heH0pIGNyb3BwaW5nIGR1cmF0aW9uIGZvciByaWNlLlxuICBUaGlzIG1pZ2h0IGJlIGFuIGVycm9yIGFuZCByZXN1bHQgaW4gdGhlIG92ZXJlc3RpbWF0aW9uIG9mICR7Y29kZSgnQ0g0LCB0byBhaXIsIGZsb29kZWQgcmljZScpfSBlbWlzc2lvbnMuXG4gIFBsZWFzZSwgZG91YmxlLWNoZWNrIHRoYXQgdGhlICR7Y29kZSgnY3JvcHBpbmdEdXJhdGlvbicpfSBpcyBjb3JyZWN0bHkgc2V0LmAsXG4gICdzaG91bGQgYmUgd2l0aGluIHBlcmNlbnRhZ2Ugb2YgZGVmYXVsdCB2YWx1ZSc6ICh7IHBhcmFtcyB9LCBlcnJvckNvdW50KSA9PlxuICAgIGVycm9yQ291bnQgPT09IDFcbiAgICAgID8gYFRoaXMgdmFsdWUgaXMgwrEke3RocmVzaG9sZChwYXJhbXM/LnRocmVzaG9sZCl9IGRpZmZlcmVudCB0byBvdXIgZGVmYXVsdCB2YWx1ZSB3aGljaCBpcyAke3BhcmFtcz8uZGVmYXVsdH0uXG4gICAgICBQbGVhc2UgY2hlY2sgeW91ciB1cGxvYWRlZCBkYXRhIGFzIHRoaXMgbWF5IGJlIGFuIGVycm9yLmBcbiAgICAgIDogYFRoaXMgdmFsdWUgaXMgc3Vic3RhbnRpYWxseSBkaWZmZXJlbnQgdGhhbiBvdXIgZGVmYXVsdCB2YWx1ZS5cbiAgICAgIFBsZWFzZSBjaGVjayB5b3VyIHVwbG9hZGVkIGRhdGEgYXMgdGhpcyBtYXkgYmUgYW4gZXJyb3IuYCxcbiAgJ3RoZSB2YWx1ZSBwcm92aWRlZCBpcyBub3QgY29uc2lzdGVudCB3aXRoIHRoZSBtb2RlbCByZXN1bHQnOiAoeyBwYXJhbXMgfSwgZXJyb3JDb3VudCkgPT5cbiAgICBgVGhlIGV4cGVjdGVkIHJlc3VsdCAke1xuICAgICAgZXJyb3JDb3VudCA9PT0gMVxuICAgICAgICA/IGBmb3IgJHtjb2RlKHBhcmFtcz8udGVybS5uYW1lKX0gJHtcbiAgICAgICAgICAgIHBhcmFtcz8ubW9kZWw/Lm5hbWUgPyBgdXNpbmcgJHttb2RlbExpbmsocGFyYW1zPy50ZXJtLCBwYXJhbXM/Lm1vZGVsKX0gYCA6ICcnXG4gICAgICAgICAgfWBcbiAgICAgICAgOiAnJ1xuICAgIH1cbiAgICBmcm9tIHRoZSBkYXRhIHByb3ZpZGVkIGluIHRoZSB1cGxvYWQgaXMgJHtcbiAgICAgIGVycm9yQ291bnQgPT09IDFcbiAgICAgICAgPyBgJHtjb2RlKHRvUHJlY2lzaW9uKHBhcmFtcz8uZXhwZWN0ZWQsIDMpKX0sIGJ1dCB0aGUgdmFsdWUgaW4gdGhlIHVwbG9hZCBpcyAke2NvZGUoXG4gICAgICAgICAgICB0b1ByZWNpc2lvbihwYXJhbXM/LmN1cnJlbnQsIDMpXG4gICAgICAgICAgKX0uXG4gICAgICAgICR7cGFyYW1zPy50aHJlc2hvbGQgPyBgT3VyIHRocmVzaG9sZCBpcyDCsSR7dGhyZXNob2xkKHBhcmFtcz8udGhyZXNob2xkKX0uYCA6ICcnfVxuICAgICAgICBQbGVhc2UgZWl0aGVyOlxuICAgICAgICA8dWwgY2xhc3M9XCJpcy1wbC0zIGlzLWxpc3Qtc3R5bGUtZGVjaW1hbCBpcy1ub3dyYXBcIj5cbiAgICAgICAgPGxpIGNsYXNzPVwiaXMtcHJlLXdyYXBcIj5DaGVjayB0aGUgJHtwYXJhbXM/LnRlcm0udGVybVR5cGV9IHZhbHVlIHlvdSBwcm92aWRlZDs8L2xpPlxuICAgICAgICA8bGkgY2xhc3M9XCJpcy1wcmUtd3JhcFwiPkNoZWNrIHRoZSBkYXRhIHlvdSBwcm92aWRlZCB3aGljaCBpcyB0aGUgaW5wdXQgaW50byB0aGlzIG1vZGVsOzwvbGk+XG4gICAgICAgIDxsaSBjbGFzcz1cImlzLXByZS13cmFwXCI+Q2FyZWZ1bGx5IHJlYWQgdGhlIGRvY3VtZW50YXRpb24gdG8gdW5kZXJzdGFuZCBpZiB3ZSB1c2VkIGEgZGVmYXVsdCBwcm9wZXJ0eSBhcyBwYXJ0IG9mIHRoZSBjYWxjdWxhdGlvbnMuPC9saT5cbiAgICAgICAgPC91bD5gXG4gICAgICAgIDogJ25vdCBjb25zaXN0ZW50IHdpdGggdGhlIG1vZGVsIHJlc3VsdC4nXG4gICAgfWAsXG4gICd0aGUgbWVhc3VyZW1lbnQgcHJvdmlkZWQgbWlnaHQgYmUgaW4gZXJyb3InOiAoeyBwYXJhbXMgfSwgZXJyb3JDb3VudCkgPT5cbiAgICBgVGhlIGV4cGVjdGVkIHZhbHVlIGZvciAke2NvZGUocGFyYW1zPy50ZXJtLm5hbWUpfVxuICAgICR7cGFyYW1zPy5tb2RlbD8ubmFtZSA/IGB1c2luZyAke21vZGVsTGluayhwYXJhbXM/LnRlcm0sIHBhcmFtcz8ubW9kZWwpfSBgIDogJyd9XG4gICAgZnJvbSB0aGUgZGF0YSBwcm92aWRlZCBpbiB0aGUgdXBsb2FkIGlzICR7XG4gICAgICBlcnJvckNvdW50ID09PSAxXG4gICAgICAgID8gYCR7Y29kZSh0b1ByZWNpc2lvbihwYXJhbXM/LmV4cGVjdGVkLCAzKSl9LCBidXQgdGhlIHZhbHVlIGluIHRoZSB1cGxvYWQgaXMgJHtjb2RlKFxuICAgICAgICAgICAgdG9QcmVjaXNpb24ocGFyYW1zPy5jdXJyZW50LCAzKVxuICAgICAgICAgICl9LlxuICAgICAgICAke3BhcmFtcz8udGhyZXNob2xkID8gYE91ciB0aHJlc2hvbGQgaXMgwrEke3RocmVzaG9sZChwYXJhbXM/LnRocmVzaG9sZCl9LmAgOiAnJ31gXG4gICAgICAgIDogYG5vdCBjb25zaXN0ZW50IHdpdGggdGhlIG1vZGVsIHJlc3VsdC5gXG4gICAgfWAsXG4gICdtdXN0IGJlIGVxdWFsIHRvIHByZXZpb3VzIHByb2R1Y3QgbXVsdGlwbGllZCBieSB0aGUgc2hhcmUnOiAoKSA9PlxuICAgIGBQcm9kdWN0cyBmcm9tIGEgdHJhbnNmb3JtYXRpb24gd2hpY2ggYXJlIGFuIElucHV0IGluIHRvIHRoZSBuZXh0IHRyYW5zZm9ybWF0aW9uIG11c3QgZm9sbG93IHRoZSBmb2xsb3dpbmcgcnVsZTpcbiAgICAke2NvZGUoJ3ByZXZpb3VzLnByb2R1Y3QudmFsdWUgKiBjdXJyZW50LnRyYW5zZm9ybWVkU2hhcmUgLyAxMDAgPT0gY3VycmVudC5pbnB1dC52YWx1ZScpfWAsXG4gICdhdCBsZWFzdCBvbmUgSW5wdXQgbXVzdCBiZSBhIFByb2R1Y3Qgb2YgdGhlIEN5Y2xlJzogKCkgPT5cbiAgICBgQSBUcmFuc2Zvcm1hdGlvbiBjb252ZXJ0cyBhIFByb2R1Y3QgZnJvbSBhIEN5Y2xlIGludG8gYW5vdGhlciBQcm9kdWN0LlxuICAgIFRoZXJlZm9yZSwgYXQgbGVhc3Qgb25lIElucHV0IGludG8gdGhlIFRyYW5zZm9ybWF0aW9uIG11c3QgYmUgYSBQcm9kdWN0IG9mIHRoZSBDeWNsZS5gLFxuICAnbXVzdCBoYXZlIG9ubHkgb25lIGVudHJ5IHdpdGggdGhlIHNhbWUgdGVybS50ZXJtVHlwZSA9IGV4Y3JldGFNYW5hZ2VtZW50JzogKCkgPT5cbiAgICBgVGhlcmUgY2FuIG9ubHkgYmUgb25lIFByYWN0aWNlIG9mIHR5cGUgZXhjcmV0YU1hbmFnZW1lbnQgaW4gYSBDeWNsZS5cbiAgICBUbyByZXByZXNlbnQgbXVsdGlwbGUgZXhjcmV0YSBtYW5hZ2VtZW50IHN5c3RlbXMgZWl0aGVyIHVzZSBtdWx0aXBsZSBDeWNsZXMgYW5kIGxpbmsgdGhlbSB0b2dldGhlcixcbiAgICBvciB1c2UgVHJhbnNmb3JtYXRpb25zIHdpdGhpbiBhIEN5Y2xlIGFuZCBsaW5rIHRob3NlIHRvZ2V0aGVyLmAsXG4gICdtdXN0IGJlIGluY2x1ZGVkIGFzIGFuIElucHV0JzogKHsgcGFyYW1zIH0sIGVycm9yQ291bnQpID0+XG4gICAgYFRoZSBleGNyZXRhIFByb2R1Y3RzIGFyZSBub3Qgb2YgdGhlIHNhbWUgdHlwZSBhcyB0aGUgZXhjcmV0YSBJbnB1dHMuXG4gICAgJHtcbiAgICAgIGVycm9yQ291bnQgPT09IDFcbiAgICAgICAgPyBgRS5nLiwgeW91IGNhbm5vdCBnZXQgJHtjb2RlKHBhcmFtcz8udGVybT8ubmFtZSl9IGZyb20gJHsocGFyYW1zPy5leHBlY3RlZCB8fCBbXSlcbiAgICAgICAgICAgIC5tYXAodiA9PiBjb2RlKGtleVRvTGFiZWwodikpKVxuICAgICAgICAgICAgLmpvaW4oJyBvciAnKX0uYFxuICAgICAgICA6ICcnXG4gICAgfVxuICAgIFBsZWFzZSBjaGVjayB0aGUgSW5wdXRzIGFuZCBQcm9kdWN0cyBvZiB0aGUgVHJhbnNmb3JtYXRpb24uYCxcbiAgJ211c3QgYWRkIHRoZSBsaW5rZWQgaW5wdXRzIHRvIHRoZSBjeWNsZSc6ICh7IHBhcmFtcyB9LCBlcnJvckNvdW50KSA9PlxuICAgIGAke1xuICAgICAgZXJyb3JDb3VudCA9PT0gMVxuICAgICAgICA/IGBZb3UgaGF2ZSBzdGF0ZWQgdGhhdCAke2NvZGUocGFyYW1zPy50ZXJtPy5uYW1lKX0gd2FzIGNyZWF0ZWQgYnkgdGhlIGZvbGxvd2luZyBJbnB1dHMgJHtwYXJhbXM/LmV4cGVjdGVkXG4gICAgICAgICAgICA/Lm1hcChlID0+IGNvZGUoZS5uYW1lKSlcbiAgICAgICAgICAgIC5qb2luKCcgLCAnKX1gXG4gICAgICAgIDogJ1lvdSBoYXZlIHN0YXRlZCBzb21lIEVtaXNzaW9ucyB3ZXJlIGNyZWF0ZWQgYnkgc29tZSBJbnB1dHMnXG4gICAgfS5cbiAgICBIb3dldmVyLCB0aGVzZSBJbnB1dHMgZG8gbm90IGV4aXN0IGluIHRoZSBDeWNsZS5cbiAgICBQbGVhc2UgYWRkIHRoZXNlIElucHV0cywgZXZlbiBpZiB5b3UgZG8gbm90IGhhdmUgYSB2YWx1ZSBmb3IgdGhlbS5gLFxuICAnbXVzdCBhZGQgdGhlIGxpbmtlZCB0cmFuc2Zvcm1hdGlvbnMgdG8gdGhlIGN5Y2xlJzogKHsgbGV2ZWwsIHBhcmFtcyB9LCBlcnJvckNvdW50KSA9PlxuICAgIGAke1xuICAgICAgZXJyb3JDb3VudCA9PT0gMVxuICAgICAgICA/IGBZb3UgaGF2ZSBzcGVjaWZpZWQgdGhhdCR7Y29kZShcbiAgICAgICAgICAgIHBhcmFtcz8udGVybT8ubmFtZVxuICAgICAgICAgICl9IHdhcyBjcmVhdGVkIGR1cmluZyBhIFRyYW5zZm9ybWF0aW9uIHdpdGggdGhlIFRlcm0gbmFtZSAke2NvZGUocGFyYW1zPy5leHBlY3RlZD8ubmFtZSl9YFxuICAgICAgICA6ICdZb3UgaGF2ZSBzdGF0ZWQgc29tZSBFbWlzc2lvbnMgd2VyZSBjcmVhdGVkIGJ5IHNvbWUgVHJhbnNmb3JtYXRpb25zJ1xuICAgIH0uXG4gICAgSG93ZXZlciwgd2UgY2Fubm90IGZpbmQgYSBUcmFuc2Zvcm1hdGlvbiB3aXRoaW4gdGhlIEN5Y2xlIHdpdGggdGhpcyBUZXJtIG5hbWUuXG4gICAgJHtcbiAgICAgIGxldmVsID09PSAnZXJyb3InXG4gICAgICAgID8gJ1BsZWFzZSBjaGVjayB0aGUgVGVybXMgdXNlZCBpbiB0aGUgRW1pc3Npb25zIGFuZC9vciB0aGUgVHJhbnNmb3JtYXRpb25zLidcbiAgICAgICAgOiAnWW91IG1heSB3YW50IHRvIGFkZCB0aGlzIFRyYW5zZm9ybWF0aW9uLidcbiAgICB9YCxcbiAgJ2V2ZXJ5IG5vZGUgc2hvdWxkIGJlIHVuaXF1ZSc6ICh7IHBhcmFtcyB9KSA9PlxuICAgIGBUaGlzIE5vZGUgaXMgZHVwbGljYXRlZC4gRXZlcnkgTm9kZSBzaG91bGQgYmUgdW5pcXVlLlxuICAgIFVuaXF1ZW5lc3MgaXMgZGV0ZXJtaW5lZCBieSB0aGUgZm9sbG93aW5nIGZpZWxkczogJHsocGFyYW1zPy5rZXlzIHx8IFtdKS5tYXAoY29kZSkuam9pbignLCAnKX1gLFxuICAnZXZlcnkgaXRlbSBpbiB0aGUgbGlzdCBzaG91bGQgYmUgdW5pcXVlJzogKHsgcGFyYW1zIH0pID0+XG4gICAgYFRoaXMgYmxhbmsgbm9kZSBpcyBkdXBsaWNhdGVkJHtcbiAgICAgIHBhcmFtcz8uZHVwbGljYXRlZEluZGV4ZXM/Lmxlbmd0aFxuICAgICAgICA/IGAgd2l0aCB0aGUgYmxhbmsgJHtwbHVyYWxpemUoXG4gICAgICAgICAgICAnbm9kZScsXG4gICAgICAgICAgICBwYXJhbXMuZHVwbGljYXRlZEluZGV4ZXMubGVuZ3RoXG4gICAgICAgICAgKX0gd2l0aCBudW1iZXJlZDogJHtwYXJhbXMuZHVwbGljYXRlZEluZGV4ZXMuam9pbignLCAnKX1gXG4gICAgICAgIDogJydcbiAgICB9LiBFdmVyeSBibGFuayBub2RlIHNob3VsZCBiZSB1bmlxdWUuXG4gICAgVW5pcXVlbmVzcyBpcyBkZXRlcm1pbmVkIGJ5IHRoZSBmb2xsb3dpbmcgZmllbGRzOiAkeyhwYXJhbXM/LmtleXMgfHwgW10pLm1hcChjb2RlKS5qb2luKCcsICcpfWAsXG4gICdtdXN0IGNvbnRhaW4gYXMgbWFueSBpdGVtcyBhcyB2YWx1ZXMnOiAoeyBwYXJhbXMsIGRhdGFQYXRoIH0pID0+XG4gICAgYFRoZSBudW1iZXIgb2YgJHtjb2RlKGRhdGFQYXRoLnNwbGl0KCcuJykucG9wKCkpfSBtdXN0IG1hdGNoIHRoZSBudW1iZXIgb2YgJHtjb2RlKCd2YWx1ZScpfS5cbiAgICBDdXJyZW50bHkgdGhlcmUgYXJlICR7cGFyYW1zPy5jdXJyZW50fSAke2NvZGUoZGF0YVBhdGguc3BsaXQoJy4nKS5wb3AoKSl9IGJ1dCAke3BhcmFtcz8uZXhwZWN0ZWR9ICR7Y29kZShcbiAgICAgICd2YWx1ZSdcbiAgICApfS5gLFxuICAnaXMgdG9vIGdlbmVyaWMnOiAoeyBwYXJhbXMgfSkgPT5cbiAgICBgWW91IGhhdmUgdGhlIGZvbGxvd2luZyBQcm9kdWN0ICR7Y29kZShwYXJhbXM/LnByb2R1Y3Q/Lm5hbWUpfSBob3dldmVyLFxuICAgIHlvdSBoYXZlIHVzZWQgYSBnZW5lcmljICR7Z2xvc3NhcnlUeXBlTGluayhwYXJhbXM/LnRlcm0/LnRlcm1UeXBlKX0gdGVybSAke2NvZGUocGFyYW1zPy50ZXJtPy5uYW1lKX0uXG4gICAgVXNlIGEgbW9yZSBzcGVjaWZpYyB0ZXJtIGZvciB0aGUgJHtnbG9zc2FyeVR5cGVMaW5rKFxuICAgICAgcGFyYW1zPy50ZXJtPy50ZXJtVHlwZVxuICAgICl9IHdoaWNoIHJlZmxlY3RzIHRoZSBzcGVjaWZpYyAke2dsb3NzYXJ5VHlwZUxpbmsocGFyYW1zPy5wcm9kdWN0Py50ZXJtVHlwZSl9LmAsXG4gICdzaG91bGQgbm90IHVzZSBpZGVudGljYWwgdGVybXMgd2l0aCBkaWZmZXJlbnQgdW5pdHMnOiAoeyBwYXJhbXMgfSkgPT5cbiAgICBgWW91IGhhdmUgYWRkZWQgdGhlIHNhbWUgJHtjb2RlKHBhcmFtcz8udGVybT8udGVybVR5cGUpfSBpbiAke3BhcmFtcz8udW5pdHNcbiAgICAgID8ubWFwKHVuaXQgPT4gY29kZSh1bml0KSlcbiAgICAgIC5qb2luKCcgYW5kICcpfSB1bml0cy5cbiAgICBJZiB0aGVzZSB0ZXJtcyByZWZlciB0byB0aGUgc2FtZSAke2NvZGUocGFyYW1zPy50ZXJtPy50ZXJtVHlwZSl9LCB0aGlzIHdpbGwgbGVhZCB0byBkb3VibGUgY291bnRpbmcuJHtcbiAgICAgIHBhcmFtcz8udW5pdHM/LmluY2x1ZGVzKCdrZyBOJylcbiAgICAgICAgPyBgIEluc3RlYWQgdXNlIHRoZSAke3Rlcm1MaW5rKHsgaWQ6ICduaXRyb2dlbkNvbnRlbnQnLCBuYW1lOiAnTml0cm9nZW4gQ29udGVudCcgfSl9IFByb3BlcnR5IG9uIHRoZSAke2NvZGUoXG4gICAgICAgICAgICAna2cnXG4gICAgICAgICAgKX0gdGVybSB0byBkZWZpbmUgdGhlIG5pdHJvZ2VuIGNvbnRlbnQgb2YgdGhlICR7Y29kZShwYXJhbXM/LnRlcm0/LnRlcm1UeXBlKX0uYFxuICAgICAgICA6ICcnXG4gICAgfWAsXG4gICdpcyBtaXNzaW5nIHJlcXVpcmVkIGJpYmxpb2dyYXBoaWMgaW5mb3JtYXRpb24nOiAoKSA9PlxuICAgIGBUaGUgYXV0b21hdGljIGJpYmxpb2dyYXBoeSBzZWFyY2ggZmFpbGVkIGZvciB0aGlzIEJpYmxpb2dyYXBoeS4gRWl0aGVyOlxuICAgIDx1bCBjbGFzcz1cImlzLXBsLTMgaXMtbGlzdC1zdHlsZS1kZWNpbWFsIGlzLW5vd3JhcFwiPlxuICAgIDxsaSBjbGFzcz1cImlzLXByZS13cmFwXCI+TWFudWFsbHkgZmlsbC1pbiB0aGUgPGI+cmVxdWlyZWQ8L2I+IGJpYmxpb2dyYXBoaWMgaW5mb3JtYXRpb24gYXMgcGVyICR7c2NoZW1hTGluayhcbiAgICAgIFNjaGVtYVR5cGUuQmlibGlvZ3JhcGh5LFxuICAgICAgJ291ciBzY2hlbWEnXG4gICAgKX0uPC9saT5cbiAgICA8bGkgY2xhc3M9XCJpcy1wcmUtd3JhcFwiPlByb3ZpZGUgdGhlICR7Y29kZSgnZG9jdW1lbnRET0knKX0gYXMgd2VsbCBhcyB0aGUgJHtjb2RlKCd0aXRsZScpfS48L2xpPlxuICAgIDxsaSBjbGFzcz1cImlzLXByZS13cmFwXCI+Q2hlY2sgdGhlICR7Y29kZSgnZG9jdW1lbnRET0knKX0gYW5kICR7Y29kZSgndGl0bGUnKX0gZm9yIHR5cG9zIGFnYWluc3QgdGhlICR7ZXh0ZXJuYWxMaW5rKFxuICAgICAgJ2h0dHBzOi8vd3d3Lm1lbmRlbGV5LmNvbScsXG4gICAgICAnTWVuZGVsZXkgY2F0YWxvZ3VlJ1xuICAgICl9LjwvbGk+XG4gICAgPC91bD5gLFxuICAnc2hvdWxkIGJlIGxvd2VyIHRoYW4gbWF4IHNpemUnOiAoeyBwYXJhbXMgfSkgPT5cbiAgICBgVGhlIGJvdW5kYXJ5IG9yIHJlZ2lvbiBpcyA+JHtwYXJhbXM/LmV4cGVjdGVkfWttMiBhbmQgaXMgdG9vIGxhcmdlIHRvIHJlbGlhYmx5IGdhcCBmaWxsIE1lYXN1cmVtZW50cy5cbiAgICBJZiB5b3UgYXJlIGFibGUgdG8gdXNlIGEgbW9yZSBzcGVjaWZpYyByZWdpb24gb3Igc21hbGxlciBib3VuZGFyeSwgcGxlYXNlIGRvLmAsXG4gICdhbiBleGNyZXRhIGlucHV0IGlzIHJlcXVpcmVkIHdoZW4gdXNpbmcgYW4gZXhjcmV0YU1hbmFnZW1lbnQgcHJhY3RpY2UnOiAoeyBkYXRhUGF0aCB9KSA9PiB7XG4gICAgY29uc3QgcGF0aHMgPSBwYXJzZURhdGFQYXRoKGRhdGFQYXRoISk7XG4gICAgcmV0dXJuIGBFeGNyZXRhIG1hbmFnZW1lbnQgaXMgdGhlIGNvbnZlcnNpb24gb2YgZXhjcmV0YSB0byBhbnkgdHlwZSBvZiBwcm9kdWN0IChlLmcuLCBhbm90aGVyIHR5cGUgb2YgZXhjcmV0YSBvciBvcmdhbmljIGZlcnRpbGlzZXIpLlxuICAgICAgWW91IGhhdmUgYWRkZWQgYW4gJHtjb2RlKCdleGNyZXRhTWFuYWdlbWVudCcpfSBQcmFjdGljZSB0byB0aGlzICR7cGF0aHNbMF0ubGFiZWx9IGJ1dCB0aGVyZSBpcyBubyBleGNyZXRhIElucHV0LlxuICAgICAgVG8gcmVwcmVzZW50IGV4Y3JldGEgbWFuYWdlbWVudCwgdXNlIGEgJHtwYXRoc1swXS5sYWJlbH0gd2l0aCBleGNyZXRhIGFzIGFuIElucHV0IGFuZCAke2NvZGUoXG4gICAgICAgICdleGNyZXRhTWFuYWdlbWVudCdcbiAgICAgICl9IGFzIGEgUHJhY3RpY2UuYDtcbiAgfSxcbiAgJ29ubHkgMSBwcmltYXJ5IHByb2R1Y3QgYWxsb3dlZCc6ICgpID0+ICdUaGVyZSBjYW4gb25seSBiZSBvbmUgcHJpbWFyeSBwcm9kdWN0IGluIGVhY2ggQ3ljbGUuJyxcbiAgJ2lzIG5vdCBhbGxvd2VkIGluIGNvbWJpbmF0aW9uIHdpdGggbm9UaWxsYWdlJzogKCkgPT5cbiAgICBgVGhpcyBvcGVyYXRpb24gaW52b2x2ZXMgdGlsbGFnZSwgeWV0IHlvdSBoYXZlIHNwZWNpZmllZCB0aGUgUHJhY3RpY2UgJHt0ZXJtTGluayhub1RpbGxhZ2UpfS5cbiAgICBFaXRoZXIgY2hhbmdlIHRoaXMgb3BlcmF0aW9uIG9yIHRoZSBQcmFjdGljZS5gLFxuICAnc2hvdWxkIGNvbnRhaW4gYSB0aWxsYWdlIHByYWN0aWNlJzogKCkgPT5cbiAgICBgV2UgcmVjb21tZW5kIHNwZWNpZnlpbmcgdGhlIHR5cGUgb2YgdGlsbGFnZSB1c2VkIGZvciB0aGlzIEN5Y2xlLlxuICAgIFBsZWFzZSBzZWUgdGhlICR7Z2xvc3NhcnlUeXBlTGluayhUZXJtVGVybVR5cGUudGlsbGFnZSl9IGdsb3NzYXJ5LmAsXG4gICdtdXN0IHNldCB2YWx1ZSBmb3IgZXZlcnkgdGlsbGFnZSBwcmFjdGljZSc6ICgpID0+XG4gICAgYEVpdGhlciBzcGVjaWZ5IGEgc2luZ2xlICR7Z2xvc3NhcnlUeXBlTGluayhUZXJtVGVybVR5cGUudGlsbGFnZSl9IHByYWN0aWNlIG9yIGFkZCBhIHZhbHVlIHRvIGFsbCBwcmFjdGljZXMuYCxcbiAgJ3N1bSBub3QgZXF1YWwgdG8gMTAwJSBmb3IgdGlsbGFnZSBwcmFjdGljZXMnOiAoKSA9PlxuICAgIGBUaGUgc3VtIG9mICR7Z2xvc3NhcnlUeXBlTGluayhUZXJtVGVybVR5cGUudGlsbGFnZSl9IHByYWN0aWNlcyBtdXN0IGVxdWFsIDEwMCUuYCxcbiAgJ2NhbiBvbmx5IGhhdmUgMSB0aWxsYWdlIHByYWN0aWNlIHdpdGhvdXQgYSB2YWx1ZSc6ICh7IHBhcmFtcyB9KSA9PlxuICAgIGBJdCBpcyBub3QgcG9zc2libGUgZm9yIGEgQ3ljbGUgdG8gaGF2ZSB0aGUgZm9sbG93aW5nIHRpbGxhZ2UgUHJhY3RpY2VzOlxuICAgICR7KHBhcmFtcz8uY3VycmVudCA/PyBbXSkubWFwKCh7IG5hbWUgfSkgPT4gbmFtZSkuam9pbignIGFuZCAnKX0gYXQgdGhlIHNhbWUgdGltZS5cbiAgICBJZiBtdWx0aXBsZSB0aWxsYWdlIHByYWN0aWNlcyBkaWQgb2NjdXIsIHBsZWFzZSBzcGVjaWZ5IHRoZSBwZXJjZW50YWdlIG9mIGFyZWEgdGhleSBvY2N1cnJlZCBvbi5gLFxuICAnY2Fubm90IHVzZSBubyB0aWxsYWdlIGlmIGRlcHRoIG9yIG51bWJlciBvZiB0aWxsYWdlcyBpcyBub3QgMCc6ICgpID0+XG4gICAgYFRoaXMgUHJhY3RpY2UgY2Fubm90IGhhdmUgYSB2YWx1ZSBvZiAke2NvZGUoMTAwKX0gaWYgdGhlIFRpbGxhZ2UgZGVwdGggaXMgaGlnaGVyIHRoYW4gJHtjb2RlKFxuICAgICAgMFxuICAgICl9IG9yIHRoZSBOdW1iZXIgb2YgdGlsbGFnZXMgaXMgaGlnaGVyIHRoYW4gJHtjb2RlKDApfS4gUGxlYXNlIHJlc29sdmUgdGhpcyBjb25mbGljdC5gLFxuICAnY2Fubm90IHVzZSBmdWxsIHRpbGxhZ2UgaWYgZGVwdGggb3IgbnVtYmVyIG9mIHRpbGxhZ2VzIGlzIDAnOiAoKSA9PlxuICAgIGBUaGlzIFByYWN0aWNlIGNhbm5vdCBoYXZlIGEgdmFsdWUgb2YgJHtjb2RlKDEwMCl9IGlmIHRoZSBUaWxsYWdlIGRlcHRoIGlzIGVxdWFsIHRvICR7Y29kZShcbiAgICAgIDBcbiAgICApfSBvciB0aGUgTnVtYmVyIG9mIHRpbGxhZ2VzIGlzIGVxdWFsIHRvICR7Y29kZSgwKX0uIFBsZWFzZSByZXNvbHZlIHRoaXMgY29uZmxpY3QuYCxcbiAgJ211c3QgdXNlIG5vIHRpbGxhZ2Ugd2hlbiBudW1iZXIgb2YgdGlsbGFnZXMgaXMgMCc6ICgpID0+XG4gICAgYFlvdSBjYW5ub3QgdXNlIGEgdGlsbGFnZSB0ZXJtIG90aGVyIHRoYW4gTm8gdGlsbGFnZSB3aXRoIGEgdmFsdWUgb2YgJHtjb2RlKFxuICAgICAgMTAwXG4gICAgKX0gaWYgdGhlIE51bWJlciBvZiB0aWxsYWdlcyBoYXMgYmVlbiBzZXQgdG8gJHtjb2RlKDApfS4gUGxlYXNlIHJlc29sdmUgdGhpcyBjb25mbGljdC5gLFxuICAnY2FuIG5vdCBiZSBsaW5rZWQgdG8gdGhlIHNhbWUgQ3ljbGUnOiAoKSA9PiAnWW91IGNhbiBub3QgbGluayBhbiBJbnB1dCB0byB0aGUgSW1wYWN0IEFzc2Vzc21lbnQgb2YgdGhlIHNhbWUgQ3ljbGUuJyxcbiAgLy8gZGVwcmVjYXRlZCwgcmVtb3ZlIHdoZW4gbWVzc2FnZSBpcyBub3QgYmVpbmcgdXNlZCBhbnltb3JlXG4gICdtdXN0IGJlIDAgZm9yIHByb2R1Y3QgdmFsdWUgMCc6ICh7IGRhdGFQYXRoLCBwYXJhbXMgfSwgZXJyb3JDb3VudCkgPT5cbiAgICBgSWYgdGhlIGFtb3VudCBwcm9kdWNlZCBpcyB6ZXJvLCB0aGUgJHtjb2RlKGRhdGFQYXRoPy5zcGxpdCgnLicpLnBvcCgpKX0gb2YgJHtcbiAgICAgIGVycm9yQ291bnQgPT09IDEgPyBjb2RlKHBhcmFtcz8udGVybS5uYW1lKSA6ICd0aGF0IHByb2R1Y3QnXG4gICAgfSBtdXN0IGFsc28gYmUgemVyby5gLFxuICAnZWNvbm9taWNWYWx1ZVNoYXJlIG11c3QgYmUgMCBmb3IgcHJvZHVjdCB2YWx1ZSAwJzogKHsgcGFyYW1zIH0sIGVycm9yQ291bnQpID0+XG4gICAgYElmIHRoZSBhbW91bnQgcHJvZHVjZWQgaXMgemVybywgdGhlIGVjb25vbWljVmFsdWVTaGFyZSBvZiAke1xuICAgICAgZXJyb3JDb3VudCA9PT0gMSA/IGNvZGUocGFyYW1zPy50ZXJtLm5hbWUpIDogJ3RoYXQgcHJvZHVjdCdcbiAgICB9IG11c3QgYWxzbyBiZSB6ZXJvLmAsXG4gICdyZXZlbnVlIG11c3QgYmUgMCBmb3IgcHJvZHVjdCB2YWx1ZSAwJzogKHsgcGFyYW1zIH0sIGVycm9yQ291bnQpID0+XG4gICAgYElmIHRoZSBhbW91bnQgcHJvZHVjZWQgaXMgemVybywgdGhlIHJldmVudWUgb2YgJHtcbiAgICAgIGVycm9yQ291bnQgPT09IDEgPyBjb2RlKHBhcmFtcz8udGVybS5uYW1lKSA6ICd0aGF0IHByb2R1Y3QnXG4gICAgfSBtdXN0IGFsc28gYmUgemVyby5gLFxuICAnc2hvdWxkIGFkZCBhIHNvdXJjZSc6ICh7IHBhcmFtcyB9KSA9PlxuICAgIGBXZSByZWNvbW1lbmQgYWRkaW5nIGEgU291cmNlIHRvIGFsbCBkYXRhIGl0ZW1zLlxuICAgIFRoaXMgY2FuIGJlIGRvbmUgYnkgYWRkaW5nIHRoZSAke2NvZGUocGFyYW1zPy5jdXJyZW50KX0gZmllbGQuXG4gICAgU291cmNlcyBjYW4gYWxzbyBiZSBzcGVjaWZpZWQgZm9yIGVhY2ggZGF0YSBpdGVtIChpLmUuLCBlYWNoIElucHV0LCBFbWlzc2lvbiwgUHJvZHVjdCwgUHJhY3RpY2UsIE1lYXN1cmVtZW50LCBvciBJbmZyYXN0cnVjdHVyZSkuYCxcbiAgJ2NvdmVyIGNyb3AgY3ljbGUgY29udGFpbnMgbm9uIGNvdmVyIGNyb3AgcHJvZHVjdCc6ICgpID0+XG4gICAgYFlvdSBoYXZlIHNwZWNpZmllZCB0aGF0IHRoaXMgY3JvcCBpcyBhIGNvdmVyIGNyb3AgdXNpbmcgYSBQcmFjdGljZS5cbiAgICBBIGNvdmVyIGNyb3AgaXMgZGVmaW5lZCBhcyBcImEgY3JvcCB3aGljaCBpcyBsZWZ0IGluIHRoZSBmaWVsZCB3aXRob3V0IGFueSBmcmFjdGlvbiBoYXJ2ZXN0ZWQgYnkgdGhlIGVuZCBvZiB0aGUgQ3ljbGVcIi5cbiAgICBUaGUgUHJvZHVjdHMgb2YgdGhpcyBDeWNsZSBhcmUgaW5jb21wYXRpYmxlIHdpdGggdGhpcyBjcm9wIGJlaW5nIGEgY292ZXIgY3JvcC5cbiAgICBQbGVhc2UgY2hlY2sgdGhlIFByb2R1Y3RzIG9yIHRoZSBQcmFjdGljZXMuYCxcbiAgJ3Nob3VsZCBiZSBpbmNsdWRlZCBpbiB0aGUgY3ljbGUgcHJvZHVjdHMnOiAoeyBwYXJhbXMgfSwgZXJyb3JDb3VudCkgPT5cbiAgICBgJHtcbiAgICAgIGVycm9yQ291bnQgPT09IDFcbiAgICAgICAgPyBgVGhlIFByb2R1Y3QgJHtjb2RlKHBhcmFtcy5wcm9kdWN0Lm5hbWUpfSBjYW5ub3QgYmUgZm91bmQgaW4gdGhlIEN5Y2xlIHdpdGggaWQgJHtjb2RlKHBhcmFtcy5ub2RlLmlkKX1gXG4gICAgICAgIDogJ1RoZSBQcm9kdWN0IGluIHRoZSBJbXBhY3QgQXNzZXNzbWVudCBjYW5ub3QgYmUgZm91bmQgaW4gdGhlIGxpbmtlZCBDeWNsZSdcbiAgICB9LlxuICAgIFRoaXMgY291bGQgYmUgc2ltcGx5IGJlY2F1c2UgdGhlIHByb2R1Y3QgZG9lcyBub3QgZXhpc3QgaW4gdGhlIEN5Y2xlOiBpbiB0aGlzIGNhc2UsIGFkZCBpdCB0byB0aGUgQ3ljbGUgb3IgcmVtb3ZlIHRoZSBJbXBhY3QgQXNzZXNzbWVudC5cbiAgICBJdCBjb3VsZCBhbHNvIGJlIGJlY2F1c2UgeW91IGhhdmUgbXVsdGlwbGUgUHJvZHVjdHMgaW4gdGhlIEN5Y2xlIHVzaW5nIHRoZSBzYW1lIFRlcm0sIGJ1dCBoYXZpbmcgZGlmZmVyZW50IFByb3BlcnRpZXMgb3IgZGlmZmVyZW50IGZpZWxkczpcbiAgICBpbiB0aGlzIGNhc2UsIGVuc3VyZSBhbGwgb2YgdGhlIFByb3BlcnRpZXMgYW5kIGZpZWxkcyB3aGljaCBtYWtlIHRoZSBQcm9kdWN0IHVuaXF1ZSBhcmUgY29waWVkIGludG8gdGhlIEltcGFjdCBBc3Nlc3NtZW50LmAsXG4gICdtdWx0aXBsZSBJbXBhY3RBc3Nlc3NtZW50IGFyZSBhc3NvY2lhdGVkIHdpdGggdGhlIHNhbWUgUHJvZHVjdCBvZiB0aGUgc2FtZSBDeWNsZSc6ICgpID0+XG4gICAgYE9ubHkgb25lIEltcGFjdCBBc3Nlc3NtZW50IGNhbiBiZSByZWxhdGVkIHRvIHRoaXMgUHJvZHVjdC5cbiAgICBQbGVhc2UgbWFrZSBzdXJlIHRoZSBwcm9kdWN0IGlzIGNvcnJlY3Qgb3IgdGhlIGN5Y2xlLmlkIHlvdSBhcmUgcmVmZXJyaW5nIHRvIGlzIGNvcnJlY3QuYCxcbiAgJ211bHRpcGxlIEltcGFjdEFzc2Vzc21lbnQgYXJlIGFzc29jaWF0ZWQgd2l0aCB0aGlzIFByb2R1Y3QnOiAoKSA9PlxuICAgIGBPbmx5IG9uZSBJbXBhY3QgQXNzZXNzbWVudCBjYW4gYmUgcmVsYXRlZCB0byB0aGlzIFByb2R1Y3QuXG4gICAgUGxlYXNlIG1ha2Ugc3VyZSB0aGUgcHJvZHVjdCBvZiB0aGUgcmVsYXRlZCBJbXBhY3RBc3Nlc3NtZW50cyBhcmUgY29ycmVjdCBvciB0aGUgJHtjb2RlKCdjeWNsZS5pZCcpfSBpcyBjb3JyZWN0LmAsXG4gICdubyBJbXBhY3RBc3Nlc3NtZW50IGFyZSBhc3NvY2lhdGVkIHdpdGggdGhpcyBQcm9kdWN0JzogKCkgPT5cbiAgICBgSW4gY2FzZXMgd2hlcmUgSW1wYWN0IEFzc2Vzc21lbnQgZGF0YSBhcmUgYmVpbmcgdXBsb2FkZWQsIHRoZSBudW1iZXIgb2YgSW1wYWN0IEFzc2Vzc21lbnRzIG11c3QgbWF0Y2ggdGhlIG51bWJlciBvZiBQcm9kdWN0cy5cbiAgICBUaGlzIGVuc3VyZXMgdGhlIEN5Y2xlIGRhdGEgbWF0Y2hlcyB0aGUgSW1wYWN0IEFzc2Vzc21lbnQgZGF0YS5cbiAgICBUbyBmaXggdGhpcywgYWRkIG9uZSBJbXBhY3QgQXNzZXNzbWVudCBmb3IgZXZlcnkgUHJvZHVjdCBpbiB0aGUgQ3ljbGUsIGZvbGxvd2luZyBhdCBsZWFzdCB0aGUgbWluaW11bSByZXF1aXJlZCBmaWVsZHMgZm9yIEltcGFjdCBBc3Nlc3NtZW50cy5gLFxuICAnbXVzdCBiZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gbGFuZCBvY2N1cGF0aW9uJzogKCkgPT5cbiAgICBgTGFuZCB0cmFuc2Zvcm1hdGlvbiBzaG91bGQgYmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIGxhbmQgb2NjdXBhdGlvblxuICAgIChsYW5kIHRyYW5zZm9ybWF0aW9uIGlzIHRoZSBhbW91bnQgb2YgbGFuZCBjb252ZXJ0ZWQgYmV0d2VlbiBzb21lIGRhdGUgaW4gdGhlIHBhc3QgYW5kIHRoZSBjdXJyZW50IHllYXIsXG4gICAgZGl2aWRlZCBieSBhbiBhbW9ydGl6YXRpb24gcGVyaW9kLCBzbyBpdCBzaG91bGQgYWx3YXlzIGJlIGxlc3MgdGhhbiBsYW5kIG9jY3VwYXRpb24gYnkgZGVmaW5pdGlvbikuYCxcbiAgJ3Nob3VsZCBiZSBsaW5rZWQgdG8gYW4gZW1pc3Npb24gaW4gdGhlIEN5Y2xlJzogKHsgcGFyYW1zIH0sIGVycm9yQ291bnQpID0+XG4gICAgYCR7XG4gICAgICBlcnJvckNvdW50ID09PSAxID8gYCR7Y29kZShwYXJhbXM/LnRlcm0ubmFtZSl9IGV4aXN0c2AgOiAnU29tZSBFbWlzc2lvbnMgZXhpc3QnXG4gICAgfSBpbiBib3RoIHRoZSBDeWNsZSBhbmQgdGhlIFRyYW5zZm9ybWF0aW9uIGJ1dCAke2Vycm9yQ291bnQgPT09IDEgPyAnaXQgaXMnIDogJ3RoZXkgYXJlJ30gbm90IGxpbmtlZCB1c2luZyAke2NvZGUoXG4gICAgICAnY3ljbGUuZW1pc3Npb25zLlgudHJhbnNmb3JtYXRpb24udGVybSdcbiAgICApfS4gVGhpcyBtYXkgYmUgYW4gZXJyb3IuYCxcbiAgJ3Nob3VsZCBhZGQgYW4gYW5pbWFsIHByb2R1Y3Rpb24gc3lzdGVtJzogKCkgPT5cbiAgICBgRm9yIGFuaW1hbCBwcm9kdWN0aW9uIGN5Y2xlcywgd2UgcmVjb21tZW5kIHNwZWNpZnlpbmcgdGhlIGFuaW1hbCBwcm9kdWN0aW9uICR7Z2xvc3NhcnlUeXBlTGluayhcbiAgICAgIFRlcm1UZXJtVHlwZS5zeXN0ZW1cbiAgICApfSBlLmcuLCAke2NvZGUoJ0NvbmZpbmVkIHBhc3R1cmUgc3lzdGVtJyl9IG9yICR7Y29kZSgnRmVlZGxvdCBzeXN0ZW0nKX0sIGFzIGEgUHJhY3RpY2UuXG4gICAgVGhpcyBpcyBwYXJ0aWN1bGFybHkgaW1wb3J0YW50IGZvciBydW1pbmFudHMsIGFzIHRoZSBzeXN0ZW0gaW5mbHVlbmNlcyBhbmltYWxzJyBhY3Rpdml0eSBsZXZlbCBhbmQgaXMgdXNlZCBpbiB0aGUgZXN0aW1hdGlvbiBvZiBncmFzcyBpbnRha2UuXG4gICAgSXQgYWxzbyBlbnN1cmVzIGEgbW9yZSBhY2N1cmF0ZSBnYXAtZmlsbGluZyBvZiBiZWVmIGNhdHRsZSBleGNyZXRhLlxuICAgIFlvdSBjYW4gZmluZCBhIGxpc3Qgb2Ygc3lzdGVtcyBpbiB0aGUgJHtnbG9zc2FyeVR5cGVMaW5rKFRlcm1UZXJtVHlwZS5zeXN0ZW0sICdHbG9zc2FyeScpfS5gLFxuICAnbXVzdCBiZSBzZXQgdG8gZmFsc2Ugd2hlbiBzcGVjaWZ5aW5nIGZ1ZWwgdXNlJzogKHsgcGFyYW1zIH0pID0+XG4gICAgYElmIGZ1ZWwgZm9yIG1hY2hpbmVyeSAoJHtwYXJhbXM/LmFsbG93ZWRWYWx1ZXMubWFwKGNvZGUpLmpvaW4oJywgJyl9KSBpcyB1c2VkIGR1cmluZyBhIEN5Y2xlLFxuICAgIGJ1dCB0aGVyZSBpcyBubyBkYXRhIG9uIHRoZSBhbW91bnQgb2YgJHtnbG9zc2FyeVR5cGVMaW5rKFRlcm1UZXJtVHlwZS5tYXRlcmlhbCl9IHVzZWQgZm9yIGFncmljdWx0dXJhbCBlcXVpcG1lbnQsXG4gICAgdGhlbiAke2NvZGUoJ2NvbXBsZXRlbmVzcy5tYXRlcmlhbCcpfSBtdXN0IGJlICR7Y29kZSgnZmFsc2UnKX0uXG4gICAgSGVyZSwgd2UgbWVhbiB0aGUgcXVhbnRpdHkgb2YgcGh5c2ljYWwgbWF0ZXJpYWwgdXNlZCB0byBjb25zdHJ1Y3QgYWdyaWN1bHR1cmFsIG1hY2hpbmVyeSxcbiAgICB3aGljaCBpcyB0aGVuIGRlcHJlY2lhdGVkIG92ZXIgZWFjaCBDeWNsZS5gLFxuICAnbXVzdCBiZSBiZWxvdyBvciBlcXVhbCB0byAxIGZvciB1bml0IGluIGhhJzogKCkgPT5cbiAgICBgVGhlIG1heGltdW0gdmFsdWUgZm9yIGEgcHJvZHVjdCB3aXRoIHVuaXRzICR7Y29kZSgnaGEnKX0gb24gYSBDeWNsZSB3aXRoIGEgJHtzY2hlbWFMaW5rKFxuICAgICAgJ0N5Y2xlI2Z1bmN0aW9uYWxVbml0JyxcbiAgICAgICdmdW5jdGlvbmFsIHVuaXQnXG4gICAgKX0gb2YgJHtjb2RlKCcxIGhhJyl9IGlzICR7Y29kZSgnMScpfS5cbiAgICBJZiB5b3UgYXJlIHRyeWluZyB0byBhZGQgYSBwcm9kdWN0IHdpdGggdGhlIHVuaXRzICR7Y29kZSgna2cnKX0sIHVzZSBhIGRpZmZlcmVudCB0ZXJtLmAsXG4gIFwicGFzdHVyZUdyYXNzIGtleSB0ZXJtVHlwZSBtdXN0IGJlICdsYW5kQ292ZXInXCI6ICh7IHBhcmFtcyB9KSA9PlxuICAgIGBUaGUgVGVybSAke2NvZGUocGFyYW1zPy50ZXJtLm5hbWUpfSBjYW4ndCBiZSB1c2VkIGFzIGEga2V5IGZvciAke3Rlcm1MaW5rKHBhc3R1cmVHcmFzcyl9LlxuICAgIFBsZWFzZSwgdXNlIGEgdGVybSB3aXRoIHRlcm1UeXBlICR7Z2xvc3NhcnlUeXBlTGluayhUZXJtVGVybVR5cGUubGFuZENvdmVyKX0gaW5zdGVhZC5cbiAgICBUaGlzIHdpbGwgaGVscCB1cyBnYXAtZmlsbCB0aGUgYW1vdW50IG9mIGdyYXNzIGNvbnN1bWVkIGJ5IHRoZSBoZXJkLmAsXG4gICd0aGUgc3VtIG9mIGFsbCBwYXN0dXJlR3Jhc3MgdmFsdWVzIG11c3QgYmUgMTAwJzogKHsgcGFyYW1zIH0pID0+XG4gICAgYFRoZSBzdW0gb2YgYWxsICR7dGVybUxpbmsocGFzdHVyZUdyYXNzKX0gdmFsdWVzIG11c3QgYmUgZXF1YWwgdG8gJHtwYXJhbXMuZXhwZWN0ZWR9JS5gLFxuICAnaXMgb3V0c2lkZSBjb25maWRlbmNlIGludGVydmFsJzogKGVycm9yLCBlcnJvckNvdW50LCBhbGxFcnJvcnMpID0+XG4gICAgYCR7dW5pcXVlKFxuICAgICAgKGFsbEVycm9ycy5sZW5ndGggPyBhbGxFcnJvcnMgOiBbZXJyb3JdKS5mbGF0TWFwKCh7IGRhdGFQYXRoLCBwYXJhbXMgfSkgPT5cbiAgICAgICAgcGFyYW1zPy5vdXRsaWVycz8ubWFwKFxuICAgICAgICAgIHZhbHVlID0+XG4gICAgICAgICAgICBgVGhlICR7ZGF0YVBhdGguaW5jbHVkZXMoJ3Byb2R1Y3QnKSA/ICdwcm9kdWN0JyA6ICdpbnB1dCd9IHZhbHVlICR7XG4gICAgICAgICAgICAgIGVycm9yQ291bnQgPT09IDEgPyBgJHtjb2RlKHZhbHVlKX0gYCA6ICcnXG4gICAgICAgICAgICB9aXMgJHt2YWx1ZSA+IHBhcmFtcz8ubWluID8gJ2Fib3ZlJyA6ICdiZWxvdyd9ICR7XG4gICAgICAgICAgICAgIHBhcmFtcz8udGhyZXNob2xkID8gYCR7Y29kZShgJHsocGFyYW1zLnRocmVzaG9sZCArICgxIC0gcGFyYW1zLnRocmVzaG9sZCkgLyAyKSAqIDEwMH0lYCl9IG9mYCA6ICcnXG4gICAgICAgICAgICB9IGFsbCAke3BhcmFtcz8uZ3JvdXAgPyBjb2RlKHBhcmFtcy5ncm91cCkgOiBjb2RlKHBhcmFtcz8udGVybT8ubmFtZSl9IGRhdGEgaW4gJHtjb2RlKFxuICAgICAgICAgICAgICBwYXJhbXM/LmNvdW50cnkubmFtZVxuICAgICAgICAgICAgKX0gb24gdGhlIEhFU1RJQSBwbGF0Zm9ybS5gXG4gICAgICAgIClcbiAgICAgIClcbiAgICApLmpvaW4oJzwvYnI+Jyl9XG4gICAgPC9icj5cbiAgICBQbGVhc2UgZG91YmxlLWNoZWNrIHRoZXNlIHZhbHVlcyBiZWZvcmUgc3VibWl0dGluZy5gLFxuICAnc2hvdWxkIGJlIGVxdWFsIHRvIGJvdW5kYXJ5JzogKHsgcGFyYW1zIH0pID0+XG4gICAgYFRoZSBjYWxjdWxhdGVkICR7c2NoZW1hTGluaygnU2l0ZSNhcmVhJywgJ2FyZWEnKX0gZnJvbSAke2NvZGUoJ2JvdW5kYXJ5Jyl9IGlzICR7Y29kZShwYXJhbXM/LmV4cGVjdGVkKX0gaGEuXG4gICAgVGhpcyBtYXkgYmUgYW4gZXJyb3IgaWYgdGhlIGJvdW5kYXJ5IHJlcHJlc2VudHMgdGhlIGFyZWEgdW5kZXIgY3VsdGl2YXRpb24uYCxcbiAgJ211c3Qgc3BlY2lmeSB0aGUgZmF0ZSBvZiBjcm9wUmVzaWR1ZSc6ICh7IHBhcmFtcyB9KSA9PlxuICAgIGBGb3Igc2l0ZXMgb2YgdHlwZSAke3BhcmFtcy5zaXRlVHlwZS5tYXAoY29kZSkuam9pbignIG9yICcpfSxcbiAgICBpZiBkYXRhIGNvbXBsZXRlbmVzcyBpcyBtYXJrZWQgJHtjb2RlKFxuICAgICAgdHJ1ZVxuICAgICl9IGZvciBjcm9wIHJlc2lkdWUsIHRoZSBmYXRlcyBhbmQgcXVhbnRpdGllcyBvZiB0aGUgcmVzaWR1ZSBtdXN0IGJlIHNwZWNpZmllZC5cbiAgICA8YnIvPlxuICAgIFRoZSBxdWFudGl0eSBtdXN0IGluY2x1ZGUgYm90aCBhYm92ZSBhbmQgYmVsb3cgZ3JvdW5kIGNyb3AgcmVzaWR1ZSwgd2hlcmUgdGhlIHN1bSBvZiBhYm92ZSBncm91bmQgY3JvcCByZXNpZHVlIGFuZCBiZWxvdyBncm91bmQgY3JvcCByZXNpZHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuIHplcm8uXG4gICAgVGhpcyBjYW4gYmUgYWRkZWQgdXNpbmcgdGhlIHRlcm1zOlxuICAgIDx1bCBjbGFzcz1cImlzLXBsLTMgaXMtbGlzdC1zdHlsZS1kaXNjIGlzLW5vd3JhcFwiPlxuICAgIDxsaSBjbGFzcz1cImlzLXByZS13cmFwXCI+JHt0ZXJtTGluayh7IGlkOiAnYmVsb3dHcm91bmRDcm9wUmVzaWR1ZScsIG5hbWU6ICdCZWxvdyBncm91bmQgY3JvcCByZXNpZHVlJyB9KX07IGFuZDwvbGk+XG4gICAgPGxpIGNsYXNzPVwiaXMtcHJlLXdyYXBcIj4ke3Rlcm1MaW5rKHtcbiAgICAgIGlkOiAnYWJvdmVHcm91bmRDcm9wUmVzaWR1ZVRvdGFsJyxcbiAgICAgIG5hbWU6ICdBYm92ZSBncm91bmQgY3JvcCByZXNpZHVlIHRvdGFsJ1xuICAgIH0pfS48L2xpPlxuICAgIDwvdWw+XG4gICAgPGJyLz5cbiAgICBUaGUgZmF0ZSBjYW4gYmUgYWRkZWQgdXNpbmc6XG4gICAgPHVsIGNsYXNzPVwiaXMtcGwtMyBpcy1saXN0LXN0eWxlLWRpc2MgaXMtbm93cmFwXCI+XG4gICAgPGxpIGNsYXNzPVwiaXMtcHJlLXdyYXBcIj50aGUgJHtnbG9zc2FyeVR5cGVMaW5rKFRlcm1UZXJtVHlwZS5jcm9wUmVzaWR1ZU1hbmFnZW1lbnQpfSBwcmFjdGljZXM7IGFuZDwvbGk+XG4gICAgPGxpIGNsYXNzPVwiaXMtcHJlLXdyYXBcIj50aGUgJHtnbG9zc2FyeVR5cGVMaW5rKFRlcm1UZXJtVHlwZS5jcm9wUmVzaWR1ZSl9IHByb2R1Y3RzPC9saT5cbiAgICA8L3VsPlxuICAgIGAsXG4gICdzaG91bGQgc3BlY2lmeSB0aGUgZmF0ZSBvZiBjcm9wUmVzaWR1ZSc6ICgpID0+XG4gICAgYFlvdSBoYXZlIG5vdCBzcGVjaWZpZWQgdGhlIGZhdGUgb2YgdGhlIGNyb3AgcmVzaWR1ZS5cbiAgICBBZGRpbmcgdGhpcyBpbmZvcm1hdGlvbiB3aWxsIGltcHJvdmUgZW1pc3Npb25zIGFuZCBzb2lsIGNhcmJvbiBzdG9jayBjYWxjdWxhdGlvbnMuXG4gICAgVGhlIGZhdGUgY2FuIGJlIGFkZGVkIHVzaW5nOlxuICAgIDx1bCBjbGFzcz1cImlzLXBsLTMgaXMtbGlzdC1zdHlsZS1kaXNjIGlzLW5vd3JhcFwiPlxuICAgIDxsaSBjbGFzcz1cImlzLXByZS13cmFwXCI+dGhlICR7Z2xvc3NhcnlUeXBlTGluayhUZXJtVGVybVR5cGUuY3JvcFJlc2lkdWVNYW5hZ2VtZW50KX0gcHJhY3RpY2VzOyBhbmQvb3I8L2xpPlxuICAgIDxsaSBjbGFzcz1cImlzLXByZS13cmFwXCI+dGhlICR7Z2xvc3NhcnlUeXBlTGluayhUZXJtVGVybVR5cGUuY3JvcFJlc2lkdWUpfSBwcm9kdWN0czs8L2xpPlxuICAgIDwvdWw+XG4gICAgUmVtZW1iZXIgdG8gc2V0ICR7Y29kZSgnY29tcGxldGVuZXNzLmNyb3BSZXNpZHVlJyl9IHRvICR7Y29kZShcbiAgICAgIHRydWVcbiAgICApfSBpZiBib3RoIHRoZSBhYm92ZSBhbmQgYmVsb3cgZ3JvdW5kIGNyb3AgcmVzaWR1ZSBxdWFudGl0aWVzIGFuZCBmYXRlcyBhcmUgc3BlY2lmaWVkLmAsXG4gICdzaG91bGQgaGF2ZSB0aGUgc2FtZSBwcml2YWN5IGFzIHRoZSByZWxhdGVkIHNvdXJjZSc6ICh7IHBhcmFtcyB9KSA9PlxuICAgIGBUbyBsaW5rIHRvIGEgJHsocGFyYW1zPy5kZWZhdWx0U291cmNlIHx8IHBhcmFtcz8uc291cmNlKT8uZGF0YVByaXZhdGUgPyAncHJpdmF0ZScgOiAncHVibGljJ30gU291cmNlLFxuICAgIHRoaXMgTm9kZSBuZWVkcyB0byBiZSAkeyhwYXJhbXM/LmRlZmF1bHRTb3VyY2UgfHwgcGFyYW1zPy5zb3VyY2UpPy5kYXRhUHJpdmF0ZSA/ICdwcml2YXRlJyA6ICdwdWJsaWMnfSBhcyB3ZWxsLlxuICAgIFBsZWFzZSBzZXQgJHtjb2RlKCdkYXRhUHJpdmF0ZScpfT0ke2NvZGUoYCR7KHBhcmFtcz8uZGVmYXVsdFNvdXJjZSB8fCBwYXJhbXM/LnNvdXJjZSk/LmRhdGFQcml2YXRlfWApfS5gLFxuICAnc2hvdWxkIG5vdCB1c2Ugbm90IHJlbGV2YW50IG1vZGVsJzogKCkgPT5cbiAgICBgQWxsIGVtaXNzaW9ucyBzaG91bGQgZ2VuZXJhbGx5IGhhdmUgYSBtZXRob2QgdGllciwgd2hpY2ggc3RhdGVzIGhvdyB0aGUgZGF0YSB3ZXJlIG1vZGVsbGVkIG9yIGhvdyB0aGUgZGF0YSB3ZXJlIGNvbGxlY3RlZC5cbiAgICBQbGVhc2Ugc2VlIHRoZSAke3NjaGVtYUxpbmsoXG4gICAgICAnRW1pc3Npb24jbWV0aG9kVGllcicsXG4gICAgICAnc2NoZW1hJ1xuICAgICl9IGZvciB0aGUgb3B0aW9ucyBhdmFpbGFibGUgYW5kIGRlZmluaXRpb25zIG9mIHRoZSBvcHRpb25zLmAsXG4gICdzaG91bGQgbm90IHVzZSBub3QgcmVsZXZhbnQgbWV0aG9kVGllcic6ICgpID0+XG4gICAgYEFsbCBlbWlzc2lvbnMgc2hvdWxkIGdlbmVyYWxseSBoYXZlIGEgbWV0aG9kIHRpZXIsIHdoaWNoIHN0YXRlcyBob3cgdGhlIGRhdGEgd2VyZSBtb2RlbGxlZCBvciBob3cgdGhlIGRhdGEgd2VyZSBjb2xsZWN0ZWQuXG4gICAgUGxlYXNlIHNlZSB0aGUgJHtzY2hlbWFMaW5rKFxuICAgICAgJ0VtaXNzaW9uI21ldGhvZFRpZXInLFxuICAgICAgJ3NjaGVtYSdcbiAgICApfSBmb3IgdGhlIG9wdGlvbnMgYXZhaWxhYmxlIGFuZCBkZWZpbml0aW9ucyBvZiB0aGUgb3B0aW9ucy5gLFxuICAnaW5ncmVkaWVudHMgc2hvdWxkIGJlIGNvbXBsZXRlJzogKHsgcGFyYW1zIH0pID0+XG4gICAgYERhdGEgY29tcGxldGVuZXNzIGZvciAke2NvZGUoJ2luZ3JlZGllbnQnKX0gbXVzdCBiZSB0cnVlIGZvciBzaXRlIG9mIHR5cGUgJHtwYXJhbXMuc2l0ZVR5cGV9YCxcbiAgJ211c3QgaGF2ZSBpbnB1dHMgdG8gcmVwcmVzZW50IGluZ3JlZGllbnRzJzogKCkgPT5cbiAgICBgRGF0YSBjb21wbGV0ZW5lc3MgZm9yICR7Y29kZSgnaW5ncmVkaWVudCcpfSBjYW5ub3QgYmUgdHJ1ZSBpZiB0aGVyZSBhcmUgbm8gSW5wdXRzLmAsXG4gICdtdXN0IGhhdmUgaW5wdXRzIHJlcHJlc2VudGluZyB0aGUgZm9yYWdlIHdoZW4gc2V0IHRvIHRydWUnOiAoeyBwYXJhbXMgfSkgPT5cbiAgICBgVGhpcyBDeWNsZSBpbmNsdWRlcyBhbmltYWxzICR7cGFyYW1zPy5zaXRlVHlwZSA/IGBvbiAke3BhcmFtcy5zaXRlVHlwZX1gIDogJyd9IGFuZCBjb21wbGV0ZW5lc3MgaXMgc2V0IHRvICR7Y29kZShcbiAgICAgIHRydWVcbiAgICApfSBmb3IgJHtjb2RlKCdmcmVzaEZvcmFnZScpfS5cbiAgICBIb3dldmVyLCB0aGVyZSBhcmUgbm8gSW5wdXRzIHJlcHJlc2VudGluZyB0aGUgZm9yYWdlIGludGFrZSBieSBhbmltYWxzIGluIHRoZSBDeWNsZSAoSW5wdXRzIHdpdGggJHtjb2RlKFxuICAgICAgJ3Rlcm1UeXBlJ1xuICAgICl9ICR7Y29kZSgnZnJlc2hGb3JhZ2UnKX1cIiBhbmQgYSAke2NvZGUoJ3ZhbHVlJyl9KS5cbiAgICBFaXRoZXIsIHNldCBjb21wbGV0ZW5lc3MgdG8gJHtjb2RlKGZhbHNlKX0gZm9yICR7Y29kZShcbiAgICAgICdmcmVzaEZvcmFnZSdcbiAgICApfSwgbWFrZSBzdXJlIGFsbCBmcmVzaCBmb3JhZ2UgSW5wdXRzIGhhdmUgYSAke2NvZGUoXG4gICAgICAndmFsdWUnXG4gICAgKX0sIG9yIGFkZCBvbmUgb3IgbW9yZSBJbnB1dHMgcmVwcmVzZW50aW5nIHRoZSBmb3JhZ2UgaW50YWtlLmAsXG4gICdtdXN0IHNwZWNpZnkgaXMgaXQgYW4gYW5pbWFsIGZlZWQnOiAoKSA9PlxuICAgIGBUaGlzIEN5Y2xlIGlzIGFuIGFuaW1hbCBwcm9kdWN0aW9uIEN5Y2xlIGFuZCB0aGlzIElucHV0IGNvdWxkIGJlIGFuIGFuaW1hbCBmZWVkIG9yIGNvdWxkIGJlIGZvciBhbm90aGVyIHVzZS5cbiAgICBQbGVhc2Ugc3BlY2lmeSB0aGUgJHtzY2hlbWFMaW5rKCdJbnB1dCNpc0FuaW1hbEZlZWQnLCAnaXNBbmltYWxGZWVkJyl9IGZpZWxkIG9uIHRoaXMgSW5wdXQuXG4gICAgS25vd2luZyB0aGUgZmF0ZSBpcyBlc3NlbnRpYWwgdG8gZGlzdGluZ3Vpc2ggSW5wdXRzIGJldHdlZW4gdGhvc2Ugd2hpY2ggYXJlIGZlZCB0byBhbmltYWxzIGFuZCB0aG9zZSB3aGljaCBhcmUgdXNlZCBmb3Igb3RoZXIgcHVycG9zZXMuYCxcbiAgJ3Nob3VsZCBzcGVjaWZ5IGEgdHJlYXRtZW50IHdoZW4gZXhwZXJpbWVudERlc2lnbiBpcyBzcGVjaWZpZWQnOiAoKSA9PlxuICAgIGBZb3UgaGF2ZSBzcGVjaWZpZWQgdGhhdCB0aGlzIFNvdXJjZSB1c2VzIGFuIGV4cGVyaW1lbnRhbCBkZXNpZ24sIGJ1dCBoYXZlIG5vdCBzcGVjaWZpZWQgdGhlIHRyZWF0bWVudCBmb3IgdGhpcyBDeWNsZS5cbiAgICBBZGRpbmcgdGhlIHRyZWF0bWVudCBwcm92aWRlcyBpbXBvcnRhbnQgbWV0YS1kYXRhIGFuZCB3aWxsIGVuYWJsZSBncmVhdGVyIHJlLXVzZSBvZiB0aGVzZSBkYXRhLlxuICAgIEFkZCB0aGUgJHtzY2hlbWFMaW5rKCdDeWNsZSN0cmVhdG1lbnQnLCAndHJlYXRtZW50Jyl9IGZpZWxkIHRvIHRoZSBDeWNsZS5cbiAgICBOb3RlIHRoYXQgdGhlIGZpZWxkICR7c2NoZW1hTGluayhcbiAgICAgICdDeWNsZSNjb21tZXJjaWFsUHJhY3RpY2VUcmVhdG1lbnQnLFxuICAgICAgJ2NvbW1lcmNpYWxQcmFjdGljZVRyZWF0bWVudCdcbiAgICApfSBiZWNvbWVzIHJlcXVpcmVkIGlmIHRyZWF0bWVudCBpcyBzcGVjaWZpZWQuYCxcbiAgJ3Nob3VsZCBub3Qgc3BlY2lmeSBib3RoIGxpdmVBbmltYWwgYW5kIGFuaW1hbFByb2R1Y3QnOiAoKSA9PlxuICAgIGBZb3UgaGF2ZSBhZGRlZCBib3RoIGEgJHtnbG9zc2FyeVR5cGVMaW5rKFRlcm1UZXJtVHlwZS5saXZlQW5pbWFsKX0gYW5kICR7Z2xvc3NhcnlUeXBlTGluayhcbiAgICAgIFRlcm1UZXJtVHlwZS5hbmltYWxQcm9kdWN0XG4gICAgKX0gdGVybSBhcyBQcm9kdWN0cy5cbiAgICBJZiB0aGVzZSB0ZXJtcyByZWZlciB0byB0aGUgc2FtZSBhbmltYWxzLCB0aGlzIHdpbGwgbGVhZCB0byBkb3VibGUgY291bnRpbmc6XG4gICAgaW5zdGVhZCB1c2UgYSBQcm9wZXJ0eSBvbiB0aGUgJHtnbG9zc2FyeVR5cGVMaW5rKFxuICAgICAgVGVybVRlcm1UeXBlLmxpdmVBbmltYWxcbiAgICApfSB0ZXJtIHRvIGRlZmluZSB0aGUgcXVhbnRpdHkgb2YgbGl2ZXdlaWdodCBwZXIgaGVhZCwgY2FyY2FzcyB3ZWlnaHQgcGVyIGhlYWQsIGV0Yy5gLFxuICAnc2hvdWxkIGFkZCBhbiBleGNyZXRhIHByb2R1Y3QnOiAoKSA9PlxuICAgIGBBbmltYWwgcHJvZHVjdGlvbiBDeWNsZXMgY3JlYXRlIGV4Y3JldGEuXG4gICAgVGhlcmUgc2hvdWxkIGJlIGF0IGxlYXN0IG9uZSAke2NvZGUoVGVybVRlcm1UeXBlLmV4Y3JldGEpfSBwcm9kdWN0IGluIHRoaXMgQ3ljbGUuXG4gICAgUGxlYXNlIGFkZCBhbiAke2NvZGUoVGVybVRlcm1UeXBlLmV4Y3JldGEpfSBQcm9kdWN0IHRvIHRoZSBDeWNsZS5cbiAgICBZb3UgZG8gbm90IG5lZWQgdG8gc2V0IGEgJHtjb2RlKCd2YWx1ZScpfSBmb3IgdGhlIFByb2R1Y3QsIGJ1dCBhZGRpbmcgYSAke2NvZGUoJ3ZhbHVlJyl9IGlzIGRlc2lyYWJsZS5gLFxuICAnaXMgbm90IGFuIGFsbG93ZWQgZXhjcmV0YSBwcm9kdWN0JzogKHsgcGFyYW1zIH0pID0+XG4gICAgYFRoaXMgZXhjcmV0YSBwcm9kdWN0IGlzIG5vdCBhbGxvd2VkIGZvciB0aGUgYW5pbWFsIHByb2R1Y3RzIGFkZGVkIHRvIHRoaXMgQ3ljbGUuXG4gICAgSW5zdGVhZCwgcGxlYXNlIGFkZCBvbmUgb2YgdGhlIGZvbGxvd2luZyBleGNyZXRhOiAke3BhcmFtcy5leHBlY3RlZD8ubWFwKGNvZGUpLmpvaW4oJywgJyl9YCxcbiAgJ3ZhbHVlIHNob3VsZCBzdW0gdG8gMTAwIGFjcm9zcyBhbGwgdmFsdWVzJzogKHsgcGFyYW1zIH0pID0+XG4gICAgYFRoZSB0b3RhbCB2YWx1ZSBvZiB0aGUgZm9sbG93aW5nIHRlcm1zIHNob3VsZCBzdW0gdXAgdG8gYSB2YWx1ZSBvZiAxMDAlOlxuICAgIDx1bCBjbGFzcz1cImlzLXBsLTMgaXMtbGlzdC1zdHlsZS1kaXNjIGlzLW5vd3JhcFwiPlxuICAgICAgJHsocGFyYW1zLnRlcm1JZHMgfHwgW10pLm1hcChpZCA9PiBgPGxpIGNsYXNzPVwiaXMtcHJlLXdyYXBcIj4ke2NvZGUoaWQpfTwvbGk+YCkuam9pbignJyl9XG4gICAgPC91bD5cbiAgICBNYWtlIHN1cmUgdG8gYWRkIGFueSBtaXNzaW5nIHRlcm0gaWYgbmVlZGVkIGFuZC9vciBhZGp1c3QgdGhlIHZhbHVlcyBvZiB0aGUgZXhpc3RpbmcgdGVybXMgeW91IGFscmVhZHkgcmVjb3JkZWQuYCxcbiAgJ3ZhbHVlIHNob3VsZCBzdW0gdG8gbWF4aW11bSAxMDAgYWNyb3NzIGFsbCB2YWx1ZXMnOiAoeyBwYXJhbXMgfSkgPT5cbiAgICBgVGhlIHRvdGFsIHZhbHVlIG9mIHRoZSBmb2xsb3dpbmcgdGVybXMgc2hvdWxkIHN1bSB1cCB0byBhIG1heGltdW0gdmFsdWUgb2YgMTAwJTpcbiAgICA8dWwgY2xhc3M9XCJpcy1wbC0zIGlzLWxpc3Qtc3R5bGUtZGlzYyBpcy1ub3dyYXBcIj5cbiAgICAgICR7KHBhcmFtcy50ZXJtSWRzIHx8IFtdKS5tYXAoaWQgPT4gYDxsaSBjbGFzcz1cImlzLXByZS13cmFwXCI+JHtjb2RlKGlkKX08L2xpPmApLmpvaW4oJycpfVxuICAgIDwvdWw+XG4gICAgTWFrZSBzdXJlIHRvIGFkZCBhbnkgbWlzc2luZyB0ZXJtIGlmIG5lZWRlZCBhbmQvb3IgYWRqdXN0IHRoZSB2YWx1ZXMgb2YgdGhlIGV4aXN0aW5nIHRlcm1zIHlvdSBhbHJlYWR5IHJlY29yZGVkLmAsXG4gICdyaWNlIHByb2R1Y3RzIG5vdCBhbGxvd2VkIGZvciB0aGlzIHdhdGVyIHJlZ2ltZSBwcmFjdGljZSc6ICh7IHBhcmFtcyB9KSA9PlxuICAgIGBUaGlzIHByYWN0aWNlIGlzIG5vdCBhbGxvd2VkIHdpdGggdGhlIHByb2R1Y3RzICR7cGFyYW1zLnByb2R1Y3RzPy5tYXAocCA9PiBjb2RlKHAubmFtZSB8fCBwWydAaWQnXSkpfS5cbiAgICBSZWNvcmRpbmcgdGhlIHJpZ2h0IHdhdGVyIHJlZ2ltZSBmb3IgcmljZSBlbnN1cmVzIG1ldGhhbmUgZW1pc3Npb25zIGZyb20gZmxvb2RlZCBmaWVsZHMgYXJlIGNvcnJlY3RseSByZWNhbGN1bGF0ZWQuXG4gICAgVG8gZml4IHRoaXMgZXJyb3IsIGVpdGhlciBjaGFuZ2UgdGhlIHByYWN0aWNlIG9yIHRoZSBwcm9kdWN0cy5gLFxuICAnbXVzdCBub3QgYmUgZXF1YWwgdG8gMSBoYSc6ICh7IHBhcmFtcyB9KSA9PlxuICAgIGAke2NvZGUoQ3ljbGVGdW5jdGlvbmFsVW5pdFsnMSBoYSddKX0gY2Fubm90IGJlIHVzZWQgYXMgJHtzY2hlbWFMaW5rKFxuICAgICAgJ0N5Y2xlI2Z1bmN0aW9uYWxVbml0JyxcbiAgICAgICdmdW5jdGlvbmFsVW5pdCdcbiAgICApfSBmb3IgQ3ljbGVzIGxpbmtlZCB0byBTaXRlcyB3aXRoICR7c2NoZW1hTGluaygnU2l0ZSNzaXRlVHlwZScsICdzaXRlVHlwZScpfSA9ICR7Y29kZShwYXJhbXM/LnNpdGVUeXBlKX0uXG4gICAgRWl0aGVyIGNoYW5nZSB0aGUgJHtzY2hlbWFMaW5rKCdDeWNsZSNmdW5jdGlvbmFsVW5pdCcsICdmdW5jdGlvbmFsVW5pdCcpfSB0byAke2NvZGUoXG4gICAgICBDeWNsZUZ1bmN0aW9uYWxVbml0LnJlbGF0aXZlXG4gICAgKX0gb3IgY2hhbmdlIHRoZSAke3NjaGVtYUxpbmsoJ1NpdGUjc2l0ZVR5cGUnLCAnc2l0ZVR5cGUnKX0uYCxcbiAgJ3Nob3VsZCBzcGVjaWZ5IGEgdmFsdWUgd2hlbiBIRVNUSUEgaGFzIGEgZGVmYXVsdCBvbmUnOiAoeyBwYXJhbXMgfSkgPT5cbiAgICBgQXMgeW91IGhhdmUgbm90IHNwZWNpZmllZCBhICR7Y29kZSgndmFsdWUnKX0sIHdlIHdpbGwgYXNzdW1lIHRoZSB2YWx1ZSBpcyAke2NvZGUocGFyYW1zPy5leHBlY3RlZCl9LlxuICAgIElmIHRoaXMgaXMgaW5jb3JyZWN0LCBwZWxhc2UgYWRkIGEgdmFsdWUuYCxcbiAgJ3Nob3VsZCBjb250YWluIGF0IGxlYXN0IG9uZSBtYW5hZ2VtZW50IG5vZGUnOiAoeyBwYXJhbXMgfSkgPT5cbiAgICBgJHtcbiAgICAgIHBhcmFtcz8udGVybVR5cGVcbiAgICAgICAgPyBgRG9lcyBub3QgY29udGFpbiBpbmZvcm1hdGlvbiBhYm91dCAke2NvZGUocGFyYW1zLnRlcm1UeXBlKX0uXG4gICAgICAgIFBsZWFzZSBjb25zaWRlciBhZGRpbmcgYSBoaXN0b3J5IG9mICR7Y29kZShcbiAgICAgICAgICBwYXJhbXMudGVybVR5cGVcbiAgICAgICAgKX0gZm9yIGFzIG1hbnkgeWVhcnMgYXMgcG9zc2libGUgaW4gdGhlIE1hbmFnZW1lbnQgYmxhbmsgbm9kZXMuYFxuICAgICAgICA6IGBUaGVyZSBpcyBubyBNYW5hZ2VtZW50IG5vZGUgcHJlc2VudCBpbiB0aGlzIHVwbG9hZC5cbiAgICAgICAgV2UgcmVjb21tZW5kIGFkZGluZyB0aGlzIHRvIHRoZSBTaXRlLCBpbmNsdWRpbmcgaW5mb3JtYXRpb24gYWJvdXQgY3VycmVudCBhbmQgaGlzdG9yaWNhbCB0aWxsYWdlLlxuICAgICAgICBgXG4gICAgfVxuICAgIFdlIHVzZSB0aGlzIGluZm9ybWF0aW9uIHRvIG1vZGVsIENPPHN1Yj4yPC9zdWI+IGVtaXNzaW9ucyBmcm9tIHNvaWwgb3JnYW5pYyBjYXJib24gY2hhbmdlLmAsXG4gICdjYW4gbm90IGJlIHVzZWQgb24gdGhpcyB0ZXJtVHlwZSc6ICh7IHBhcmFtcyB9KSA9PlxuICAgIGBUaGlzIFByb3BlcnR5IGNhbiBvbmx5IGJlIHVzZWQgb24gYmxhbmsgbm9kZXMgd2l0aCB0aGUgZm9sbG93aW5nICR7Y29kZSgndGVybS50ZXJtVHlwZScpfTogJHtwYXJhbXMuZXhwZWN0ZWRcbiAgICAgIC5tYXAoY29kZSlcbiAgICAgIC5qb2luKCcsICcpfS5gLFxuICAnbm90IGEgdmFsaWQgR2VvSlNPTic6ICh7IHBhcmFtcyB9KSA9PiBgXG4gICR7XG4gICAgcGFyYW1zPy5pbnZhbGlkQ29vcmRpbmF0ZXMgPT09ICd0cnVlJ1xuICAgICAgPyBgR2VvSlNPTiBkYXRhIHNob3VsZCBmb2xsb3cgdGhlIFdHUzg0IGRhdHVtLlxuICBXZSBoYXZlIGZvdW5kIGNvb3JkaW5hdGVzIG91dHNpZGUgb2YgdGhlIC0xODAgdG8gKzE4MCByYW5nZSB3aGljaCBpcyBub3QgcG9zc2libGUgdW5kZXIgV0dTODQuXG4gIFBsZWFzZSBjaGVjayB0aGUgZGF0dW0gb3IgY2hlY2sgZm9yIG90aGVyIHBvc3NpYmxlIGVycm9ycy5gXG4gICAgICA6ICdUaGlzIEdlb0pTT04gYXBwZWFycyB0byBiZSBpbnZhbGlkLidcbiAgfVxuICBZb3UgY2FuIHZhbGlkYXRlIHlvdXIgR2VvSlNPTiB1c2luZyBhbiBvbmxpbmUgdG9vbCBsaWtlIDxhIGhyZWY9XCJodHRwczovL2dlb2pzb24uaW8vXCI+Z2VvanNvbi5pbzwvYT4uXG4gIElmIHlvdSB0aGluayB0aGlzIGlzIGEgbWlzdGFrZSwgcGxlYXNlIHJlcG9ydCB0aGUgZXJyb3IgJHtyZXBvcnRJc3N1ZUxpbmsoUmVwb3NpdG9yeS5zY2hlbWEsIFRlbXBsYXRlLmJ1Zyl9LmAsXG4gICdzaG91bGQgYWRkIHRoZSB0ZXJtIHN0b2NraW5nRGVuc2l0eVBlcm1hbmVudFBhc3R1cmVBdmVyYWdlJzogKHsgcGFyYW1zIH0pID0+XG4gICAgYFlvdSBkaWQgbm90IHNwZWNpZnkgJHtub2RlTGluayh7ICdAdHlwZSc6IE5vZGVUeXBlLlRlcm0sICdAaWQnOiBwYXJhbXMuZXhwZWN0ZWQgfSl9LlxuICAgIEFkZGluZyB0aGlzIFByYWN0aWNlIGlzIGVzc2VudGlhbCBmb3IgQ3ljbGVzIHdpdGggcmVsYXRpdmUgZnVuY3Rpb25hbCB1bml0IHdoaWNoIGhhcHBlbiBlbnRpcmVseSBvciBwYXJ0aWFsbHkgb24gcGVybWFuZW50IHBhc3R1cmUuXG4gICAgV2l0aG91dCB0aGlzIGluZm9ybWF0aW9uIEhFU1RJQSBjYW5ub3QgY2FsY3VsYXRlIGFuaW1hbCByZWxhdGVkIGVtaXNzaW9ucy5gLFxuICAnc2hvdWxkIHNwZWNpZnkgdGhlIGhlcmQgY29tcG9zaXRpb24nOiAoKSA9PlxuICAgIGBXZSByZWNvbW1lbmQgYWRkaW5nIGluZm9ybWF0aW9uIG9uIHRoZSBoZXJkIGNvbXBvc2l0aW9uIHVzaW5nIHRoZSBBbmltYWwgbm9kZS5cbiAgICBXaXRob3V0IHRoaXMsIHdlIGNhbm5vdCByZS1tb2RlbCBtYW55IGFuaW1hbCByZWxhdGVkIElucHV0cywgUHJvZHVjdHMsIGFuZCBFbWlzc2lvbnMuYCxcbiAgJ3Nob3VsZCBzcGVjaWZ5IHRoZSBwcmVnbmFuY3kgcmF0ZSc6ICh7IHBhcmFtcyB9KSA9PlxuICAgIGBGb3IgZmVtYWxlIG1hbW1hbHMgaW4gdGhlaXIgcmVwcm9kdWN0aXZlIGFnZSwgd2UgcmVjb21tZW5kIGFkZGluZyAke25vZGVMaW5rKHtcbiAgICAgICdAdHlwZSc6IE5vZGVUeXBlLlRlcm0sXG4gICAgICAnQGlkJzogcGFyYW1zLmV4cGVjdGVkXG4gICAgfSl9IGFzIGEgJHtzY2hlbWFMaW5rKCdBbmltYWwjcHJvcGVydGllcycsICdQcm9wZXJ0eScpfS5cbiAgICBUaGlzIGlzIHBhcnRpY3VsYXJseSBpbXBvcnRhbnQgZm9yIHJ1bWluYW50cywgYXMgdGhlIHByZWduYW5jeSByYXRlIGluZmx1ZW5jZXMgYW5pbWFscycgZW5lcmd5IHJlcXVpcmVtZW50cyBhbmQgaXMgdXNlZCBpbiB0aGUgZXN0aW1hdGlvbiBvZiBncmFzcyBpbnRha2UuYCxcbiAgJ3Nob3VsZCBzZXQgYm90aCBkZXB0aFVwcGVyIGFuZCBkZXB0aExvd2VyJzogKCkgPT4gYFxuICAgIFdlIHJlY29tbWVuZCBzZXR0aW5nIGJvdGggJHtzY2hlbWFMaW5rKCdNZWFzdXJlbWVudCNkZXB0aFVwcGVyJywgJ2RlcHRoVXBwZXInKX0gYW5kICR7c2NoZW1hTGluayhcbiAgICAgICdNZWFzdXJlbWVudCNkZXB0aExvd2VyJyxcbiAgICAgICdkZXB0aExvd2VyJ1xuICAgICl9IG9uIHRoaXMgTWVhc3VyZW1lbnQuYCxcbiAgJ211c3Qgc2V0IGJvdGggZGVwdGhVcHBlciBhbmQgZGVwdGhMb3dlcic6ICgpID0+IGBcbiAgICBUaGlzIHNvaWwgbWVhc3VyZW1lbnQgY2FuIHZhcnkgc3Vic3RhbnRpYWxseSB3aXRoIGRlcHRoLlxuICAgIFdlIHJlcXVpcmUgdGhhdCB5b3Ugc3BlY2lmeSBib3RoICR7c2NoZW1hTGluaygnTWVhc3VyZW1lbnQjZGVwdGhVcHBlcicsICdkZXB0aFVwcGVyJyl9IGFuZCAke3NjaGVtYUxpbmsoXG4gICAgICAnTWVhc3VyZW1lbnQjZGVwdGhMb3dlcicsXG4gICAgICAnZGVwdGhMb3dlcidcbiAgICApfS5cbiAgICBJZiB5b3UgZG8gbm90IGhhdmUgdGhlc2UgZGF0YSwgcGxlYXNlIGRlbGV0ZSB0aGUgTWVhc3VyZW1lbnQuYCxcbiAgJ211bHRpcGxlIGN5Y2xlcyBvbiB0aGUgc2FtZSBzaXRlIGNhbm5vdCBvdmVybGFwJzogKGVycm9yLCBfLCBhbGxFcnJvcnMpID0+XG4gICAgYEN5Y2xlcyB0YWtpbmcgcGxhY2Ugb24gdGhlIHNhbWUgU2l0ZSBjYW5ub3Qgb3ZlcmxhcDpcbiAgICA8dWwgY2xhc3M9XCJpcy1wbC0zIGlzLWxpc3Qtc3R5bGUtZGlzYyBpcy1ub3dyYXBcIj4keyhhbGxFcnJvcnMubGVuZ3RoID8gYWxsRXJyb3JzIDogW2Vycm9yXSkubWFwKFxuICAgICAgKHsgcGFyYW1zIH0pID0+IGA8bGkgY2xhc3M9XCJpcy1wcmUtd3JhcFwiPiR7cGFyYW1zLmlkcz8ubWFwKGNvZGUpLmpvaW4oJywgJyl9PC9saT5gXG4gICAgKX0uXG4gICAgPC91bD5cbiAgICBQbGVhc2UgY29uc2lkZXIgYW55IG9mIHRoZSBmb2xsb3dpbmcgc3VnZ2VzdGlvbnMgdG8gcmVzb2x2ZSB0aGlzIGNvbmZsaWN0OlxuICAgIDx1bCBjbGFzcz1cImlzLXBsLTMgaXMtbGlzdC1zdHlsZS1kaXNjIGlzLW5vd3JhcFwiPlxuICAgIDxsaSBjbGFzcz1cImlzLXByZS13cmFwXCI+WW91IGNhbiBhbWVuZCB0aGUgQ3ljbGVzJyAke3NjaGVtYUxpbmsoJ0N5Y2xlI3N0YXJ0RGF0ZScsICdzdGFydERhdGUnKX0gYW5kICR7c2NoZW1hTGluayhcbiAgICAgICdDeWNsZSNlbmREYXRlJyxcbiAgICAgICdlbmREYXRlJ1xuICAgICl9IHRvIGVuc3VyZSB0aGF0IHRoZXkgZG8gbm90IG92ZXJsYXAgYW55bW9yZS5cbiAgICA8bGkgY2xhc3M9XCJpcy1wcmUtd3JhcFwiPllvdSBjYW4gYnJlYWsgZG93biB5b3VyIEN5Y2xlcyBpbnRvIHNob3J0ZXIgQ3ljbGVzIHRvIGVuc3VyZSB0aGF0IHRoZXkgZG8gbm90IG92ZXJsYXAgYW55bW9yZS5cbiAgICA8bGkgY2xhc3M9XCJpcy1wcmUtd3JhcFwiPllvdSBjYW4gbWVyZ2UgdGhlIG92ZXJsYXBwaW5nIEN5Y2xlcyBpbnRvIG9uZSBvdmVyYWxsIEN5Y2xlIGlmIHRoZSBQcm9kdWN0cyBvZiBlYWNoIEN5Y2xlIGFyZSBncm93biBhdCB0aGUgc2FtZSB0aW1lIG9uIHRoZSBzYW1lIFNpdGUuXG4gICAgVGhpcyBpcyByZWxldmFudCBpZiBpbnRlcmNyb3BwaW5nIGlzIHVzZWQsIGZvciBpbnN0YW5jZS48L2xpPlxuICAgIDxsaSBjbGFzcz1cImlzLXByZS13cmFwXCI+WW91IGNhbiBjcmVhdGUgYSBkaWZmZXJlbnQgU2l0ZSBmb3IgZWFjaCBvdmVybGFwcGluZyBDeWNsZS5cbiAgICBUaGlzIGlzIGFwcHJvcHJpYXRlIGlmIGEgZmllbGQgaXMgZGl2aWRlZCBpbnRvIGRpZmZlcmVudCBwbG90cywgZWFjaCBkZWRpY2F0ZWQgdG8gZ3Jvd2luZyBhIGRpZmZlcmVudCBQcm9kdWN0OyBlYWNoIHBsb3Qgd291bGQgYmUgY29uc2lkZXJlZCBhIHVuaXF1ZSBTaXRlIG9uIHRoZSBwbGF0Zm9ybS48L2xpPlxuICAgIDwvdWw+XG4gIGAsXG4gICdjeWNsZXMgbGlua2VkIHRvZ2V0aGVyIGNhbm5vdCBiZSBhZGRlZCB0byB0aGUgc2FtZSBzaXRlJzogKHsgcGFyYW1zIH0pID0+XG4gICAgYEN5Y2xlcyBsaW5rZWQgdG9nZXRoZXIgYnkgYW4gSW1wYWN0IEFzc2Vzc21lbnQgY2Fubm90IHRha2UgcGxhY2Ugb24gdGhlIHNhbWUgU2l0ZS5cbiAgICBQbGVhc2UgY3JlYXRlIGRpZmZlcmVudCBTaXRlcyBmb3IgdGhlIGZvbGxvd2luZyBDeWNsZXM6ICR7cGFyYW1zLmlkcz8ubWFwKGNvZGUpLmpvaW4oJywgJyl9LmAsXG4gICdpcyBub3QgYW4gYWxsb3dlZCBhbmltYWxQcm9kdWN0JzogKCkgPT5cbiAgICBgVGhlICR7Z2xvc3NhcnlUeXBlTGluayhUZXJtVGVybVR5cGUubGl2ZUFuaW1hbCl9IHByb2R1Y2luZyB0aGlzIFByb2R1Y3QgaXMgbm90IHJlY29yZGVkIGluIHRoZSAke3NjaGVtYUxpbmsoXG4gICAgICAnQ3ljbGUjYW5pbWFscycsXG4gICAgICAnQW5pbWFsJ1xuICAgICl9IGJsYW5rIG5vZGVzLiBFaXRoZXIgY2hhbmdlIHRoaXMgcHJvZHVjdCBvciBhZGQgdGhlIG1pc3NpbmcgJHtnbG9zc2FyeVR5cGVMaW5rKFxuICAgICAgVGVybVRlcm1UeXBlLmxpdmVBbmltYWxcbiAgICApfSB0byB0aGUgJHtzY2hlbWFMaW5rKCdDeWNsZSNhbmltYWxzJywgJ0FuaW1hbCcpfSBibGFuayBub2Rlcy5gLFxuICAnZHVyYXRpb24gbXVzdCBiZSBpbiBzcGVjaWZpZWQgaW50ZXJ2YWwnOiAoeyBwYXJhbXM6IHsgdGVybSB9ID0ge30gfSkgPT5cbiAgICBbJ3Nob3J0RmFsbG93JywgJ3Nob3J0QmFyZUZhbGxvdyddLmluY2x1ZGVzKHRlcm1bJ0BpZCddKVxuICAgICAgPyBgJHtjb2RlKCdTaG9ydCBmYWxsb3cnKX0gaXMgZGVmaW5lZCBhcyBsYW5kIGxlZnQgZmFsbG93IGZvciBsZXNzIHRoYW4gMzY1IGRheXMuXG4gICAgICBQbGVhc2UgY2hlY2sgdGhlICR7c2NoZW1hTGluaygnTWFuYWdlbWVudCNzdGFydERhdGUnLCAnc3RhcnREYXRlJyl9IGFuZCAke3NjaGVtYUxpbmsoXG4gICAgICAgICdNYW5hZ2VtZW50I2VuZERhdGUnLFxuICAgICAgICAnZW5kRGF0ZSdcbiAgICAgICl9IG9uIHRoaXMgdGVybSBhbmQgZW5zdXJlIHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gdGhlIHR3byBkYXRlcyBpcyBsZXNzIHRoYW4gMzY1IGRheXMuXG4gICAgICBJZiBpdCBpcyBtb3JlIHRoYW4gMzY1IGRheXMsIGNvbnNpZGVyIHVzaW5nIHRoZSB0ZXJtcyAke2NvZGUoJ0xvbmcgZmFsbG93Jyl9IG9yICR7Y29kZSgnU2V0IGFzaWRlJyl9IGluc3RlYWQuYFxuICAgICAgOiBbJ2xvbmdGYWxsb3cnLCAnbG9uZ0JhcmVGYWxsb3cnXS5pbmNsdWRlcyh0ZXJtWydAaWQnXSlcbiAgICAgICAgPyBgJHtjb2RlKCdMb25nIGZhbGxvdycpfSBpcyBkZWZpbmVkIGFzIGxhbmQgbGVmdCBmYWxsb3cgZm9yIG1vcmUgdGhhbiBhIHllYXIgYnV0IGxlc3MgdGhhbiBmaXZlIHllYXJzLlxuICAgICAgICBQbGVhc2UgY2hlY2sgdGhlICR7c2NoZW1hTGluaygnTWFuYWdlbWVudCNzdGFydERhdGUnLCAnc3RhcnREYXRlJyl9IGFuZCAke3NjaGVtYUxpbmsoXG4gICAgICAgICAgJ01hbmFnZW1lbnQjZW5kRGF0ZScsXG4gICAgICAgICAgJ2VuZERhdGUnXG4gICAgICAgICl9IG9uIHRoaXMgdGVybSBhbmQgZW5zdXJlIHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gdGhlIHR3byBkYXRlcyBmYWxscyBiZXR3ZWVuIDM2NSBhbmQgMTgyNiBkYXlzLlxuICAgICAgICBJZiBpdCBpcyBsZXNzIHRoYW4gMzY1IGRheXMsIGNvbnNpZGVyIHVzaW5nIHRoZSB0ZXJtICR7Y29kZSgnU2hvcnQgZmFsbG93Jyl9IGluc3RlYWQuXG4gICAgICAgIElmIGl0IGlzIG1vcmUgdGhhbiAxODI2IGRheXMsIGNvbnNpZGVyIHVzaW5nIHRoZSB0ZXJtICR7Y29kZSgnU2V0IGFzaWRlJyl9IGluc3RlYWQuYFxuICAgICAgICA6IGAke2NvZGUoXG4gICAgICAgICAgICAnU2V0IGFzaWRlJ1xuICAgICAgICAgICl9IGlzIGRlZmluZWQgYXMgdGhlIHRlbXBvcmFyeSBzZXQgYXNpZGUgb2YgbGFuZCBmb3IgbW9yZSB0aGFuIGZpdmUgeWVhcnMgYnV0IGxlc3MgdGhhbiB0d2VudHkgeWVhcnMuXG4gICAgICAgIFBsZWFzZSBjaGVjayB0aGUgJHtzY2hlbWFMaW5rKCdNYW5hZ2VtZW50I3N0YXJ0RGF0ZScsICdzdGFydERhdGUnKX0gYW5kICR7c2NoZW1hTGluayhcbiAgICAgICAgICAnTWFuYWdlbWVudCNlbmREYXRlJyxcbiAgICAgICAgICAnZW5kRGF0ZSdcbiAgICAgICAgKX0gb24gdGhpcyB0ZXJtIGFuZCBlbnN1cmUgdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiB0aGUgdHdvIGRhdGVzIGZhbGxzIGJldHdlZW4gMTgyNiBhbmQgNzMwNSBkYXlzLlxuICAgICAgICBJZiBpdCBpcyBsZXNzIHRoYW4gMTgyNiBkYXlzLCBjb25zaWRlciB1c2luZyB0aGUgdGVybXMgJHtjb2RlKCdTaG9ydCBmYWxsb3cnKX1vciAke2NvZGUoJ0xvbmcgZmFsbG93Jyl9IGluc3RlYWQuXG4gICAgICAgIElmIGl0IGlzIG1vcmUgdGhhbiA3MzA1IGRheXMsIGNvbnNpZGVyIHVzaW5nIHRoZSB0ZXJtICR7Y29kZSgnT3RoZXIgbmF0dXJhbCB2ZWdldGF0aW9uJyl9IGluc3RlYWQuYCxcbiAgJ211c3Qgbm90IGFkZCB0aGUgZmVlZCBpbnB1dCB0byB0aGUgQ3ljbGUgYXMgd2VsbCc6ICh7IHBhcmFtczogeyB0ZXJtIH0gPSB7fSB9KSA9PlxuICAgIGBZb3UgaGF2ZSBhZGRlZCB0aGUgYW5pbWFsIGZlZWQgSW5wdXQgJHtjb2RlKHRlcm1bJ0BpZCddKX0gdG8gdGhlIEN5Y2xlIGlucHV0cyBhcyB3ZWxsLCB3aGljaCBtaWdodCBsZWFkIHRvIGRvdWJsZSBjb3VudGluZy5cbiAgICBJZiB5b3UgZG8gbm90IGtub3cgdGhlIGFtb3VudCBvZiAke2NvZGUodGVybVsnQGlkJ10pfSBnaXZlbiB0byBlYWNoIEFuaW1hbCwgcGxlYXNlIGFkZCB0aGUgSW5wdXQgdG8gdGhlIEN5Y2xlIG9ubHkuYCxcbiAgJ211c3Qgc3BlY2lmeSB3YXRlciB0eXBlIGZvciBwb25kcyc6ICgpID0+XG4gICAgYEZvciBTaXRlcyB3aXRoICR7c2NoZW1hTGluaygnU2l0ZSNzaXRlVHlwZScsICdzaXRlVHlwZScpfSA9ICR7Y29kZSgncG9uZCcpfSwgeW91IG11c3Qgc3BlY2lmeSB0aGUgJHtub2RlTGluayh7XG4gICAgICAnQHR5cGUnOiBOb2RlVHlwZS5UZXJtLFxuICAgICAgJ0BpZCc6ICd3YXRlclNhbGluaXR5JyxcbiAgICAgIG5hbWU6ICdXYXRlciBzYWxpbml0eSdcbiAgICB9KX0gb3IgdGhlIHdhdGVyIHR5cGUgKCR7bm9kZUxpbmsoe1xuICAgICAgJ0B0eXBlJzogTm9kZVR5cGUuVGVybSxcbiAgICAgICdAaWQnOiAnc2FsaW5lV2F0ZXInLFxuICAgICAgbmFtZTogJ1NhbGluZSB3YXRlcidcbiAgICB9KX0gLyAke25vZGVMaW5rKHsgJ0B0eXBlJzogTm9kZVR5cGUuVGVybSwgJ0BpZCc6ICdmcmVzaFdhdGVyJywgbmFtZTogJ0ZyZXNoIHdhdGVyJyB9KX0gLyAke25vZGVMaW5rKHtcbiAgICAgICdAdHlwZSc6IE5vZGVUeXBlLlRlcm0sXG4gICAgICAnQGlkJzogJ2JyYWNraXNoV2F0ZXInLFxuICAgICAgbmFtZTogJ0JyYWNraXNoIHdhdGVyJ1xuICAgIH0pfSkuXG4gICAgVGhpcyB3aWxsIGFsbG93IHVzIHRvIGNhbGN1bGF0ZSBtZXRoYW5lIGVtaXNzaW9ucyBmcm9tIGNvbnN0cnVjdGVkIHdhdGVyYm9kaWVzLmAsXG4gICdpbnZhbGlkIHdhdGVyIHNhbGluaXR5JzogKHsgcGFyYW1zIH0pID0+XG4gICAgYFRoZSB3YXRlciB0eXBlICR7cGFyYW1zPy5jdXJyZW50fSBpcyBub3QgY29uc2lzdGVudCB3aXRoIHRoZSBXYXRlciBzYWxpbml0eSB5b3Ugc3BlY2lmaWVkLlxuICAgIE1ha2Ugc3VyZSB0aGUgV2F0ZXIgc2FsaW5pdHkgdmFsdWUgaXMgY29ycmVjdCBhbmQgZWl0aGVyIGZpeCBpdCBvciB1cGRhdGUgdGhlIHdhdGVyIHR5cGUgYWNjb3JkaW5nbHkuYCxcbiAgJ211c3QgYWRkIHN1YnN0cmF0ZSBpbnB1dHMnOiAoKSA9PlxuICAgICdUaGUgc3Vic3RyYXRlIG11c3QgYmUgc3BlY2lmaWVkIHdoZW4gYSBzdWJzdHJhdGUtYmFzZWQgcHJvdGVjdGVkIGNyb3BwaW5nIHN5c3RlbSBoYXMgYmVlbiBhZGRlZC4nLFxuICAnc2hvdWxkIG5vdCBiZSBlcXVhbCB0byBjeWNsZUR1cmF0aW9uIGZvciBjcm9wJzogKHsgcGFyYW1zIH0pID0+XG4gICAgYEZvciBjcm9wIHByb2R1Y3Rpb24gQ3ljbGVzLCBzaXRlRHVyYXRpb24gbXVzdCByZXByZXNlbnQgdGhlIHBlcmlvZCBmcm9tIGhhcnZlc3Qgb2YgdGhlIHByZXZpb3VzIGNyb3AgdG8gaGFydmVzdCBvZiB0aGUgY3VycmVudCBjcm9wLlxuICAgIEhlcmUsIHlvdSBoYXZlIHN0YXRlZCB0aGF0ICR7c2NoZW1hTGluaygnQ3ljbGUjY3ljbGVEdXJhdGlvbicsICdjeWNsZUR1cmF0aW9uJyl9IHJlcHJlc2VudHMgdGhlIHBlcmlvZCBmcm9tXG4gICAgJHtjb2RlKHBhcmFtcz8uY3VycmVudCl9IHRvIGhhcnZlc3Qgb2YgdGhlIGN1cnJlbnQgY3JvcCwgYW5kIHNldCAke3NjaGVtYUxpbmsoXG4gICAgICAnQ3ljbGUjY3ljbGVEdXJhdGlvbicsXG4gICAgICAnY3ljbGVEdXJhdGlvbidcbiAgICApfSBhcyBlcXVhbCB0byAke3NjaGVtYUxpbmsoJ0N5Y2xlI3NpdGVEdXJhdGlvbicsICdzaXRlRHVyYXRpb24nKX0uXG4gICAgUGxlYXNlIGNoZWNrIHRoZSBhZmZlY3RlZCBmaWVsZHMgZm9yIGVycm9ycy5gLFxuICAnbXVzdCBiZSBsaW5rZWQgdmlhIGEgZGVmYXVsdFNvdXJjZSc6ICgpID0+XG4gICAgYFRvIGNyZWF0ZSBhIG5ldyBTb3VyY2UsIHBsZWFzZSBsaW5rIGl0IHRvIGEgJHtzY2hlbWFMaW5rKCdDeWNsZSNkZWZhdWx0U291cmNlJywgJ0N5Y2xlIGRlZmF1bHRTb3VyY2UnKX0gb3IgJHtzY2hlbWFMaW5rKFxuICAgICAgJ1NpdGUjZGVmYXVsdFNvdXJjZScsXG4gICAgICAnU2l0ZSBkZWZhdWx0U291cmNlJ1xuICAgICl9LCBlLmcuLCB1c2luZyAke3NjaGVtYUxpbmsoJ0N5Y2xlI2RlZmF1bHRTb3VyY2UnLCAnY3ljbGUuZGVmYXVsdFNvdXJjZS5pZCcpfS5gLFxuICAnaXMgcmVxdWlyZWQgd2hlbiB1c2luZyBvdGhlciBtb2RlbCc6ICgpID0+XG4gICAgYElmIHlvdSBhcmUgdXNpbmcgdGhlIHRlcm0gJHtjb2RlKCdPdGhlciBtb2RlbCcpfSwgcGxlYXNlIHByb3ZpZGUgYSBzaG9ydCBkZXNjcmlwdGlvbiBvZiB0aGUgbW9kZWwgaW4gJHtjb2RlKFxuICAgICAgJ21ldGhvZE1vZGVsRGVzY3JpcHRpb24nXG4gICAgKX0sIGluY2x1ZGluZyBhbnkgcmVmZXJlbmNlcyB0byBtb2RlbCBkb2N1bWVudGF0aW9uLmAsXG4gICdzaG91bGQgYWRkIHRoZSB0ZXJtIHByb2R1Y3RpdmVQaGFzZVBlcm1hbmVudENyb3BzJzogKCkgPT5cbiAgICBgWW91IG5lZWQgdG8gc3BlY2lmeSB3aGV0aGVyIHRoZSBwZXJtYW5lbnQgY3JvcCBpcyBpbiBpdHMgcHJvZHVjdGl2ZSBwaGFzZSB3aGVuIHRoZSB2YWx1ZSBvZiB0aGUgcHJpbWFyeSBwcm9kdWN0IGlzICR7Y29kZSgnMCcpfS5cbiAgICBUbyBkbyB0aGlzLCBhZGQgdGhlICR7dGVybUxpbmsoe1xuICAgICAgaWQ6ICdwcm9kdWN0aXZlUGhhc2VQZXJtYW5lbnRDcm9wcycsXG4gICAgICBuYW1lOiAnUHJvZHVjdGl2ZSBwaGFzZSAocGVybWFuZW50IGNyb3BzKSdcbiAgICB9KX0gcHJhY3RpY2UgYW5kIHNldCBhIHZhbHVlIG9mICR7Y29kZSgndHJ1ZScpfSBvciAke2NvZGUoJ2ZhbHNlJyl9LmAsXG4gICdtdXN0IGhhdmUgYSBzaW5nbGUgaW5wdXRzIG9mIHRlcm1UeXBlIHdhc3RlJzogKCkgPT5cbiAgICBgQ2FuIG9ubHkgYmUgbGlua2VkIHRvIGEgc2luZ2xlICR7Z2xvc3NhcnlUeXBlTGluayhUZXJtVGVybVR5cGUud2FzdGUpfSBpbnB1dC5gLFxuICAnbXVzdCBiZSBiZWxvdyBtYXhpbXVtIGN5Y2xlRHVyYXRpb24nOiAoeyBwYXJhbXMgfSkgPT5cbiAgICBgVGhlIG1heGltdW0gZHVyYXRpb24gZm9yIHRoaXMgY3JvcCBwcm9kdWN0aW9uIGN5Y2xlIGlzICR7KHBhcmFtcyBhcyBhbnkpLmxpbWl0fSBkYXlzLFxuICAgIGJ1dCB0aGUgY2FsY3VsYXRlZCBkdXJhdGlvbiBmcm9tIHRoZSBlbmQgZGF0ZSBhbmQgc3RhcnQgZGF0ZSBwcm92aWRlZCBpcyAke3BhcmFtcy5jdXJyZW50fS5gLFxuICAnc2hvdWxkIGFkZCB0aGUgdGVybSBwYXN0dXJlR3Jhc3MnOiAoKSA9PlxuICAgIGBGb3IgQ3ljbGVzIHdpdGggJHtjb2RlKCdzaXRlVHlwZT1wZXJtYW5lbnQgcGFzdHVyZScpfSB3ZSByZWNvbW1lbmQgc3BlY2lmeWluZyB0aGUgdHlwZShzKSBvZiAke2NvZGUoJ1Bhc3R1cmUgZ3Jhc3MnKX0gZ3Jvd24uXG4gICAgVGhpcyBpcyBwYXJ0aWN1bGFybHkgaW1wb3J0YW50IGZvciBydW1pbmFudHMgYW5kIHdpbGwgYWxsb3cgZm9yIGEgbW9yZSBhY2N1cmF0ZSBlc3RpbWF0ZSBvZiB0aGUgYW1vdW50IG9mIGdyYXNzIGdyYXplZC5gXG59O1xuXG5jb25zdCByZXF1aXJlZFByb3BlcnR5RXJyb3IgPSAobWVzc2FnZTogc3RyaW5nLCBlcnJvcj86IElWYWxpZGF0aW9uRXJyb3IpID0+IHtcbiAgY29uc3QgZmllbGQgPSBtZXNzYWdlLnNwbGl0KFwiJ1wiKVsxXS5yZXBsYWNlKFwiJ1wiLCAnJyk7XG4gIGNvbnN0IG5vZGVUeXBlID0gZGF0YVBhdGhMYWJlbChlcnJvcj8uZGF0YVBhdGgpO1xuICByZXR1cm4gYFlvdSBhcmUgbWlzc2luZyB0aGUgZm9sbG93aW5nIHJlcXVpcmVkIGZpZWxkOiAke2NvZGUoZmllbGQpfS4gJHtcbiAgICBub2RlVHlwZVxuICAgICAgPyBgRWl0aGVyOiBhZGQgJHtjb2RlKGZpZWxkKX0sIG9yIGlmIHlvdSBpZiB5b3UgZGlkIG5vdCBpbnRlbmQgdG8gYWRkIHRoaXMgJHtub2RlVHlwZX0sIHBsZWFzZSByZW1vdmUgYWxsIGZpZWxkcyBvbiB0aGlzICR7bm9kZVR5cGV9LmBcbiAgICAgIDogJydcbiAgfWAudHJpbSgpO1xufTtcblxuY29uc3QgcGFyc2VEZWZhdWx0TWVzc2FnZSA9IChtZXNzYWdlPzogc3RyaW5nLCBlcnJvcj86IElWYWxpZGF0aW9uRXJyb3IpID0+XG4gIGA8c3BhbiBjbGFzcz1cImlzLWNhcGl0YWxpemVkLWZpcnN0LWxldHRlclwiPiR7XG4gICAgbWVzc2FnZT8uc3RhcnRzV2l0aCgnc2hvdWxkIGhhdmUgcmVxdWlyZWQgcHJvcGVydHknKSA/IHJlcXVpcmVkUHJvcGVydHlFcnJvcihtZXNzYWdlLCBlcnJvcikgOiBtZXNzYWdlXG4gIH08L3NwYW4+YDtcblxuZXhwb3J0IGNvbnN0IGZvcm1hdEN1c3RvbUVycm9yTWVzc2FnZSA9IChcbiAgbWVzc2FnZT86IHN0cmluZyxcbiAgZXJyb3I/OiBJVmFsaWRhdGlvbkVycm9yLFxuICBhbGxFcnJvcnM6IElWYWxpZGF0aW9uRXJyb3JbXSA9IFtdXG4pID0+IHtcbiAgY29uc3QgZm9ybWF0dGVkTWVzc2FnZSA9IGN1c3RvbUVycm9yTWVzc2FnZT8uW21lc3NhZ2VdXG4gICAgPyBjdXN0b21FcnJvck1lc3NhZ2VbbWVzc2FnZV0oZXJyb3IhLCBhbGxFcnJvcnMubGVuZ3RoIHx8IDEsIGFsbEVycm9ycylcbiAgICA6IHBhcnNlRGVmYXVsdE1lc3NhZ2UobWVzc2FnZSwgZXJyb3IpO1xuICByZXR1cm4gZm9ybWF0dGVkTWVzc2FnZSA/IGA8cCBjbGFzcz1cImlzLW5vcm1hbFwiPiR7Zm9ybWF0dGVkTWVzc2FnZX08L3A+YCA6ICcnO1xufTtcblxuZXhwb3J0IGNvbnN0IGZvcm1hdEVycm9yID0gKGVycm9yPzogSVZhbGlkYXRpb25FcnJvciwgYWxsRXJyb3JzOiBJVmFsaWRhdGlvbkVycm9yW10gPSBbXSk6IElWYWxpZGF0aW9uRXJyb3IgPT5cbiAgZXJyb3JcbiAgICA/IHtcbiAgICAgICAgbGV2ZWw6ICdlcnJvcicsXG4gICAgICAgIC4uLmVycm9yLFxuICAgICAgICBtZXNzYWdlOiBmb3JtYXRDdXN0b21FcnJvck1lc3NhZ2UoZXJyb3IubWVzc2FnZSwgZXJyb3IsIGFsbEVycm9ycylcbiAgICAgIH1cbiAgICA6IHVuZGVmaW5lZDtcblxuZXhwb3J0IGNvbnN0IGVycm9ySGFzRXJyb3IgPSAoZXJyb3I/OiBJVmFsaWRhdGlvbkVycm9yKSA9PiBlcnJvciAmJiAoZXJyb3IubGV2ZWwgPT09ICdlcnJvcicgfHwgIWVycm9yLmxldmVsKTtcblxuZXhwb3J0IGNvbnN0IGVycm9ySGFzV2FybmluZyA9IChlcnJvcj86IElWYWxpZGF0aW9uRXJyb3IpID0+IGVycm9yICYmIGVycm9yLmxldmVsID09PSAnd2FybmluZyc7XG5cbmV4cG9ydCBjb25zdCBpc01pc3NpbmdQcm9wZXJ0eUVycm9yID0gKHsgcGFyYW1zIH06IElWYWxpZGF0aW9uRXJyb3IpID0+ICEhcGFyYW1zICYmICdtaXNzaW5nUHJvcGVydHknIGluIHBhcmFtcztcblxuZXhwb3J0IGNvbnN0IGlzTWlzc2luZ09uZU9mRXJyb3IgPSAoeyBrZXl3b3JkLCBzY2hlbWFQYXRoIH06IElWYWxpZGF0aW9uRXJyb3IpID0+XG4gIGtleXdvcmQgPT09ICdyZXF1aXJlZCcgJiYgKHNjaGVtYVBhdGggfHwgJycpLmluY2x1ZGVzKCdvbmVPZicpO1xuXG5jb25zdCBpc0ZhaWxpbmdLZXl3b3JkRXJyb3IgPSAoeyBwYXJhbXMgfTogSVZhbGlkYXRpb25FcnJvcikgPT4gISFwYXJhbXMgJiYgJ2ZhaWxpbmdLZXl3b3JkJyBpbiBwYXJhbXM7XG5cbmV4cG9ydCBjb25zdCBmaWx0ZXJFcnJvciA9IChlcnJvcjogSVZhbGlkYXRpb25FcnJvcikgPT4gW2lzRmFpbGluZ0tleXdvcmRFcnJvcl0uZXZlcnkoZnVuYyA9PiAhZnVuYyhlcnJvcikpO1xuXG5leHBvcnQgY29uc3QgbWlzc2luZ05vZGVFcnJvcnMgPSAoZXJyb3JzOiBJVmFsaWRhdGlvbkVycm9yW10pID0+XG4gIGVycm9ycy5maWx0ZXIoXG4gICAgKHsga2V5d29yZCwgcGFyYW1zIH0pID0+XG4gICAgICBrZXl3b3JkID09PSAncmVxdWlyZWQnICYmIChwYXJhbXM/Lm1pc3NpbmdQcm9wZXJ0eSA9PT0gJ0B0eXBlJyB8fCBwYXJhbXM/Lm1pc3NpbmdQcm9wZXJ0eSA9PT0gJ0BpZCcpXG4gICk7XG4iXX0=
|
|
523
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsZXMtZXJyb3IubW9kZWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvZmlsZXMvZmlsZXMtZXJyb3IubW9kZWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsK0JBQStCO0FBQy9CLDRCQUE0QjtBQUM1QixzQ0FBc0M7QUFDdEMsT0FBTyxFQUFFLG1CQUFtQixFQUFFLFFBQVEsRUFBRSxVQUFVLEVBQVEsWUFBWSxFQUFFLFdBQVcsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ2xILE9BQU8sRUFBRSxXQUFXLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBRXRFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNyRCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUM3RCxPQUFPLEVBQ0wsVUFBVSxFQUNWLFFBQVEsRUFDUixPQUFPLEVBQ1AsSUFBSSxFQUNKLGFBQWEsRUFDYixZQUFZLEVBQ1osZUFBZSxFQUNmLFlBQVksRUFDWixRQUFRLEVBQ1IsZUFBZSxFQUNmLFVBQVUsRUFDWCxNQUFNLGlCQUFpQixDQUFDO0FBQ3pCLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQVdoRCxNQUFNLGVBQWUsR0FBRyx5Q0FBeUMsQ0FBQztBQVVsRSxNQUFNLENBQUMsTUFBTSxhQUFhLEdBQUcsQ0FBQyxRQUFRLEdBQUcsRUFBRSxFQUFlLEVBQUU7SUFDMUQsTUFBTSxDQUFDLENBQUMsRUFBRSxHQUFHLEtBQUssQ0FBQyxHQUFHLFFBQVE7U0FDM0IsT0FBTyxDQUFDLGlCQUFpQixFQUFFLEVBQUUsQ0FBQztTQUM5QixPQUFPLENBQUMsV0FBVyxFQUFFLE1BQU0sQ0FBQztTQUM1QixLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDZCxPQUFPLEtBQUssQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUU7UUFDdEIsTUFB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VUFBVSxJQUFJLENBQUMsVUFBVSxJQUFJLEVBQUUsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQztBQUVqRSxNQUFNLHFCQUFxQixHQUFHLENBQUMsRUFBRSxNQUFNLEVBQW9CLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxNQUFNLElBQUksZ0JBQWdCLElBQUksTUFBTSxDQUFDO0FBRXZHLE1BQU0sQ0FBQyxNQUFNLFdBQVcsR0FBRyxDQUFDLEtBQXVCLEVBQUUsRUFBRSxDQUFDLENBQUMscUJBQXFCLENBQUMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO0FBRTVHLE1BQU0sQ0FBQyxNQUFNLGlCQUFpQixHQUFHLENBQUMsTUFBMEIsRUFBRSxFQUFFLENBQzlELE1BQU0sQ0FBQyxNQUFNLENBQ1gsQ0FBQyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsRUFBRSxFQUFFLENBQ3RCLE9BQU8sS0FBSyxVQUFVLElBQUksQ0FBQyxNQUFNLEVBQUUsZUFBZSxLQUFLLE9BQU8sSUFBSSxNQUFNLEVBQUUsZUFBZSxLQUFLLEtBQUssQ0FBQyxDQUN2RyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgY29tcGxleGl0eSAqL1xuLyogZXNsaW50LWRpc2FibGUgbWF4LWxlbiAqL1xuLyogZXNsaW50LWRpc2FibGUgbm8tdXNlbGVzcy1lc2NhcGUgKi9cbmltcG9ydCB7IEN5Y2xlRnVuY3Rpb25hbFVuaXQsIE5vZGVUeXBlLCBTY2hlbWFUeXBlLCBUZXJtLCBUZXJtVGVybVR5cGUsIGlzVHlwZVZhbGlkIH0gZnJvbSAnQGhlc3RpYS1lYXJ0aC9zY2hlbWEnO1xuaW1wb3J0IHsgdG9QcmVjaXNpb24sIGtleVRvTGFiZWwsIHVuaXF1ZSB9IGZyb20gJ0BoZXN0aWEtZWFydGgvdXRpbHMnO1xuXG5pbXBvcnQgeyB0ZXJtVHlwZUxhYmVsIH0gZnJvbSAnLi4vdGVybXMvdGVybXMubW9kZWwnO1xuaW1wb3J0IHsgcGF0aFRvQXBpRG9jc1BhdGggfSBmcm9tICcuLi9lbmdpbmUvZW5naW5lLnNlcnZpY2UnO1xuaW1wb3J0IHtcbiAgUmVwb3NpdG9yeSxcbiAgVGVtcGxhdGUsXG4gIGJhc2VVcmwsXG4gIGNvZGUsXG4gIGNvbnRhY3RVc0xpbmssXG4gIGV4dGVybmFsTGluayxcbiAgZ2xvc3NhcnlCYXNlVXJsLFxuICBnbG9zc2FyeUxpbmssXG4gIG5vZGVMaW5rLFxuICByZXBvcnRJc3N1ZUxpbmssXG4gIHNjaGVtYUxpbmtcbn0gZnJvbSAnLi4vY29tbW9uL3V0aWxzJztcbmltcG9ydCB7IHBsdXJhbGl6ZSB9IGZyb20gJy4uL2NvbW1vbi9wbHVyYWxpemUnO1xuaW1wb3J0IHsgSVZhbGlkYXRpb25FcnJvciB9IGZyb20gJy4uL3NjaGVtYS9zY2hlbWEtdmFsaWRhdGlvbi5tb2RlbCc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgSVZhbGlkYXRpb25FcnJvcldpdGhJbmRleCB7XG4gIGVycm9yOiBJVmFsaWRhdGlvbkVycm9yW107XG4gIGluZGV4OiBudW1iZXI7XG4gIGNoYW5nZWQ/OiBib29sZWFuO1xufVxuXG50eXBlIGhhbmRsZUVycm9yRnVuYyA9IChlcnJvcjogSVZhbGlkYXRpb25FcnJvciwgZXJyb3JDb3VudD86IG51bWJlciwgYWxsRXJyb3JzPzogSVZhbGlkYXRpb25FcnJvcltdKSA9PiBzdHJpbmc7XG5cbmNvbnN0IG1hcEVycm9yTWVzc2FnZSA9ICdkb2VzIG5vdCBjb250YWluIGxhdGl0dWRlIGFuZCBsb25naXR1ZGUnO1xuXG5pbnRlcmZhY2UgSURhdGFQYXRoIHtcbiAgcGF0aDogc3RyaW5nO1xuICAvKipcbiAgICogSHVtYW4gcmVhZGFibGUgdmVyc2lvbiBvZiB0aGUgcGF0aC5cbiAgICovXG4gIGxhYmVsOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBjb25zdCBwYXJzZURhdGFQYXRoID0gKGRhdGFQYXRoID0gJycpOiBJRGF0YVBhdGhbXSA9PiB7XG4gIGNvbnN0IFtfLCAuLi5wYXRoc10gPSBkYXRhUGF0aFxuICAgIC5yZXBsYWNlKC9bXFxbXFxdXFwnXFwnXFxcIlxcXCJdL2csICcnKVxuICAgIC5yZXBsYWNlKC8oXFx3KShcXEApL2csICckMS5AJylcbiAgICAuc3BsaXQoJy4nKTtcbiAgcmV0dXJuIHBhdGhzLm1hcChwYXRoID0+IHtcbiAgICBjb25zdCBsYWJlbCA9IHBhdGgucmVwbGFjZSgvW1xcZFxcQF0rL2csICcnKTtcbiAgICBjb25zdCB0eXBlID0gcGx1cmFsaXplKGtleVRvTGFiZWwobGFiZWwpLCAxKSBhcyBTY2hlbWFUeXBlO1xuICAgIGNvbnN0IGlzU2NoZW1hVHlwZSA9IGlzVHlwZVZhbGlkKHsgdHlwZSB9KTtcbiAgICByZXR1cm4ge1xuICAgICAgcGF0aDogcGF0aC5yZXBsYWNlKC8oXFxkKykvZywgJ1skMV0nKSxcbiAgICAgIGxhYmVsOiBpc1NjaGVtYVR5cGUgPyB0eXBlIDogYDxjb2RlPiR7cGx1cmFsaXplKGxhYmVsLCAxKX08L2NvZGU+YFxuICAgIH07XG4gIH0pO1xufTtcblxuY29uc3QgYWxsb3dlZERhdGFQYXRoc0xhYmVscyA9IE9iamVjdC52YWx1ZXMoU2NoZW1hVHlwZSk7XG5cbmV4cG9ydCBjb25zdCBkYXRhUGF0aExhYmVsID0gKGRhdGFQYXRoID0gJycpID0+XG4gIHBhcnNlRGF0YVBhdGgoZGF0YVBhdGgpXG4gICAgLmZpbHRlcigoeyBsYWJlbCB9KSA9PiBhbGxvd2VkRGF0YVBhdGhzTGFiZWxzLmluY2x1ZGVzKGxhYmVsIGFzIFNjaGVtYVR5cGUpKVxuICAgIC5wb3AoKT8ubGFiZWw7XG5cbmNvbnN0IGdsb3NzYXJ5VHlwZUxpbmsgPSAodHlwZTogVGVybVRlcm1UeXBlLCB0ZXh0ID0gdGVybVR5cGVMYWJlbCh0eXBlKSkgPT5cbiAgZXh0ZXJuYWxMaW5rKGAke2dsb3NzYXJ5QmFzZVVybCgpfT90ZXJtVHlwZT0ke3R5cGV9YCwgdGV4dCk7XG5jb25zdCB0ZXJtTGluayA9ICh7IGlkLCBuYW1lIH06IFBhcnRpYWw8VGVybT4pID0+IGV4dGVybmFsTGluayhgJHtiYXNlVXJsKCl9L3Rlcm0vJHtpZH1gLCBuYW1lIHx8IGlkKTtcbmNvbnN0IGRhdGVGb3JtYXRNZXNzYWdlID0gYHNob3VsZCBmb2xsb3cgdGhlIElTTyA4NjAxIGRhdGUgZm9ybWF0LCBlLmcuICR7Y29kZSgyMDAwKX0sIG9yICR7Y29kZSgnMjAwMC0xMicpfSwgb3IgJHtjb2RlKFxuICAnMjAwMC0xMi0zMCdcbil9YDtcbmNvbnN0IG1vZGVsTGluayA9ICh0ZXJtOiBUZXJtLCBtb2RlbDogVGVybSkgPT4gYFxuICA8YSBocmVmPVwiJHtwYXRoVG9BcGlEb2NzUGF0aChtb2RlbFsnQGlkJ10sIHRlcm1bJ0BpZCddKX1cIiB0YXJnZXQ9XCJfYmxhbmtcIj5cbiAgICA8c3BhbiBjbGFzcz1cInByLTFcIj4ke21vZGVsLm5hbWV9PC9zcGFuPlxuICAgIDxzcGFuPihWaWV3IERvY3MpPC9zcGFuPlxuICA8L2E+XG5gO1xuY29uc3QgdGhyZXNob2xkID0gKHZhbHVlOiBudW1iZXIpID0+IGNvZGUoYCR7dmFsdWUgKiAxMDB9JWApO1xuXG5jb25zdCBub1RpbGxhZ2U6IFBhcnRpYWw8VGVybT4gPSB7IGlkOiAnbm9UaWxsYWdlJywgbmFtZTogJ05vIHRpbGxhZ2UnIH07XG5jb25zdCBwYXN0dXJlR3Jhc3M6IFBhcnRpYWw8VGVybT4gPSB7IGlkOiAncGFzdHVyZUdyYXNzJywgbmFtZTogJ1Bhc3R1cmUgZ3Jhc3MnIH07XG5cbmNvbnN0IGlkTm90Rm91bmREZWZhdWx0TWVzc2FnZSA9IGBcbiAgSWYgeW91IGFyZSB1c2luZyB0aGUgJHtjb2RlKCduYW1lJyl9IG9mIHRoZSBUZXJtLCBtYWtlIHN1cmUgdG8gdXNlICR7Y29kZSgndGVybS5uYW1lJyl9IGNvbHVtbjtcbiAgaWYgeW91IGFyZSB1c2luZyB0aGUgJHtjb2RlKCdAaWQnKX0gb2YgdGhlIFRlcm0sIHVzZSB0aGUgJHtjb2RlKCd0ZXJtLkBpZCcpfSBjb2x1bW4gaW5zdGVhZC5cbmAudHJpbSgpO1xuXG5leHBvcnQgY29uc3QgaXNNaWdyYXRpb25FcnJvciA9ICh7IHBhcmFtcyB9OiBJVmFsaWRhdGlvbkVycm9yKSA9PiBwYXJhbXM/LmN1cnJlbnQgJiYgJ2V4cGVjdGVkJyBpbiBwYXJhbXM7XG5cbmV4cG9ydCBjb25zdCBtaWdyYXRpb25FcnJvck1lc3NhZ2UgPSAoeyBwYXJhbXMgfTogSVZhbGlkYXRpb25FcnJvcikgPT5cbiAgcGFyYW1zPy5leHBlY3RlZFxuICAgID8gYFRoZSBUZXJtICR7Y29kZShwYXJhbXMuY3VycmVudCl9IHdhcyB1cGRhdGVkLCBwbGVhc2UgdXNlIHRoaXMgVGVybSBpbnN0ZWFkOiAke2NvZGUocGFyYW1zLmV4cGVjdGVkKX0uYFxuICAgIDogYFRoZSBUZXJtICR7Y29kZShwYXJhbXMuY3VycmVudCl9IHdhcyBkZWxldGVkLiBQbGVhc2Ugc2VhcmNoIHRoZSAke2dsb3NzYXJ5TGluaygnR2xvc3NhcnknKX0gZm9yIGEgbmV3IFRlcm0uYDtcblxuY29uc3QgaWROb3RGb3VuZEVycm9yOiBoYW5kbGVFcnJvckZ1bmMgPSAoX2Vycm9yLCBfZXJyb3JDb3VudCwgYWxsRXJyb3JzKSA9PiB7XG4gIGNvbnN0IG1pZ3JhdGlvbkVycm9ycyA9IGFsbEVycm9ycy5maWx0ZXIoaXNNaWdyYXRpb25FcnJvcik7XG4gIGNvbnN0IG5vTWlncmF0aW9uRXJyb3JzID0gYWxsRXJyb3JzLmZpbHRlcihlcnJvciA9PiAhaXNNaWdyYXRpb25FcnJvcihlcnJvcikpO1xuICByZXR1cm4gYFxuICAgIDxwPkRvZXMgbm90IGV4aXN0IGluIEhFU1RJQS48L3A+XG4gICAgJHtub01pZ3JhdGlvbkVycm9ycy5sZW5ndGggPyBgPHA+JHtpZE5vdEZvdW5kRGVmYXVsdE1lc3NhZ2V9PC9wPmAgOiAnJ31cbiAgICAke3VuaXF1ZShtaWdyYXRpb25FcnJvcnMubWFwKG1pZ3JhdGlvbkVycm9yTWVzc2FnZSkpLmpvaW4oJzwvYnI+Jyl9XG4gIGA7XG59O1xuXG5jb25zdCBtZXRob2RNb2RlbE1hcHBpbmdFcnJvcjogaGFuZGxlRXJyb3JGdW5jID0gKHsgcGFyYW1zIH0sIGVycm9yQ291bnQpID0+XG4gIGAke1xuICAgIGVycm9yQ291bnQgPT09IDFcbiAgICAgID8gYCR7XG4gICAgICAgICAgcGFyYW1zPy5hbGxvd2VkVmFsdWVzLmxlbmd0aFxuICAgICAgICAgICAgPyBgY2FuIG9ubHkgYmUgdXNlZCB3aXRoIG9uZSBvZiB0aGVzZSBtZXRob2RzOiAke3BhcmFtcz8uYWxsb3dlZFZhbHVlcy5tYXAoY29kZSkuam9pbignLCAnKX1gXG4gICAgICAgICAgICA6IGBkb2VzIG5vdCBjdXJyZW50bHkgaGF2ZSBhbnkgbWV0aG9kIGFsbG93ZWQuIFBsZWFzZSAke2NvbnRhY3RVc0xpbmsoKX0gdG8gY2hhbmdlIHRoaXMuYFxuICAgICAgICB9LmBcbiAgICAgIDogYFNvbWUgVGVybXMgYXJlIG5vdCBhbGxvd2VkIHdpdGggdGhlIG1ldGhvZCB5b3Ugc2VsZWN0ZWQuYFxuICB9XG4gIFlvdSBjYW4gZmluZCB0aGUgbGlzdCBvZiBhbGxvd2VkIG1ldGhvZHMgZm9yIGVhY2ggVGVybSBieSBjbGlja2luZyBvbiB0aGVtLmA7XG5cbi8vIHNldCBtZXNzYWdlIGFzIGVtcHR5IHRvIG5vdCBkaXNwbGF5IGl0XG5jb25zdCBjdXN0b21FcnJvck1lc3NhZ2U6IHtcbiAgW2tleTogc3RyaW5nXTogaGFuZGxlRXJyb3JGdW5jO1xufSA9IHtcbiAgJ3Nob3VsZCBub3QgYmUgZW1wdHknOiAoeyBwYXJhbXMgfSkgPT5cbiAgICBbXG4gICAgICBgRW1wdHkgJHtwYXJhbXMudHlwZX0gYXJlIG5vdCBhbGxvd2VkIGluIEhFU1RJQS5gLFxuICAgICAgcGFyYW1zPy50eXBlID09PSBOb2RlVHlwZS5JbXBhY3RBc3Nlc3NtZW50XG4gICAgICAgID8gYFBsZWFzZSwgZWl0aGVyIGxpbmsgeW91ciBJbXBhY3RBc3Nlc3NtZW50IHRvIGFuIGV4aXN0aW5nIEN5Y2xlIHVzaW5nIHRoZSAke2NvZGUoJ2N5Y2xlLmlkJyl9LFxuICAgICAgICBvciBhZGQgb25lIG9yIG1vcmUgJHtzY2hlbWFMaW5rKCdJbXBhY3RBc3Nlc3NtZW50I2VtaXNzaW9uc1Jlc291cmNlVXNlJywgJ2VtaXNzaW9uc1Jlc291cmNlVXNlJyl9LFxuICAgICAgICAke3NjaGVtYUxpbmsoJ0ltcGFjdEFzc2Vzc21lbnQjaW1wYWN0cycsICdpbXBhY3RzJyl9LFxuICAgICAgICBvciAke3NjaGVtYUxpbmsoJ0ltcGFjdEFzc2Vzc21lbnQjZW5kcG9pbnRzJywgJ2VuZHBvaW50cycpfS5gXG4gICAgICAgIDogJydcbiAgICBdLmpvaW4oJ1xcbicpLFxuICBcInNob3VsZCBoYXZlIHJlcXVpcmVkIHByb3BlcnR5ICdAaWQnXCI6IGlkTm90Rm91bmRFcnJvcixcbiAgXCJzaG91bGQgaGF2ZSByZXF1aXJlZCBwcm9wZXJ0eSAnQHR5cGUnXCI6ICgpID0+ICcnLFxuICBcInNob3VsZCBoYXZlIHJlcXVpcmVkIHByb3BlcnR5ICdpZCdcIjogaWROb3RGb3VuZEVycm9yLFxuICAnc2hvdWxkIG1hdGNoIGV4YWN0bHkgb25lIHNjaGVtYSBpbiBvbmVPZic6ICgpID0+ICcnLFxuICAnc2hvdWxkIG1hdGNoIHNvbWUgc2NoZW1hIGluIGFueU9mJzogKCkgPT4gJycsXG4gICdzaG91bGQgbWF0Y2ggXCJ0aGVuXCIgc2NoZW1hJzogKCkgPT4gJycsXG4gICdzaG91bGQgTk9UIGhhdmUgYWRkaXRpb25hbCBwcm9wZXJ0aWVzJzogKHsgcGFyYW1zIH0sIGVycm9yQ291bnQpID0+XG4gICAgZXJyb3JDb3VudCA9PT0gMVxuICAgICAgPyBgVGhlIGZvbGxvd2luZyBmaWVsZCBkb2VzIG5vdCBleGlzdDogJHtwYXJhbXM/LmFkZGl0aW9uYWxQcm9wZXJ0eX0gb3IgaXMgbm90IGFsbG93ZWQgaW4gdGhpcyBjYXNlLmBcbiAgICAgIDogYFNob3VsZCBub3QgaGF2ZSBhZGRpdGlvbmFsIHByb3BlcnRpZXMuYCxcbiAgJ3Nob3VsZCBOT1QgYmUgdmFsaWQnOiAoeyBzY2hlbWEgfSkgPT5cbiAgICBzY2hlbWE/LnJlcXVpcmVkPy5pbmNsdWRlcygnYXJlYVBlcmNlbnQnKVxuICAgICAgPyBgSWYgdGhlIHRlcm0gdW5pdHMgaXMgYWxyZWFkeSBpbiAke2NvZGUoJyUgYXJlYScpfSwganVzdCB1c2UgJHtjb2RlKCd2YWx1ZScpfS4gRG9udCB1c2UgJHtjb2RlKCdhcmVhUGVyY2VudCcpfS5gXG4gICAgICA6IHNjaGVtYT8ucmVxdWlyZWQ/LmluY2x1ZGVzKCd0cmFuc2Zvcm1hdGlvbicpXG4gICAgICAgID8gJ0EgdHJhbnNmb3JtYXRpb24gY2FuIG5vdCBiZSBhZGRlZCBoZXJlLidcbiAgICAgICAgOiBzY2hlbWE/LnJlcXVpcmVkPy5pbmNsdWRlcygnZnJvbUN5Y2xlJylcbiAgICAgICAgICA/IGBUaGlzIGZpZWxkIGNhbiBvbmx5IGJlIGFkZGVkIHRvIHRoZSAke3NjaGVtYUxpbmsoJ1RyYW5zZm9ybWF0aW9uI2lucHV0cycsICdpbnB1dHMgb2YgYSBUcmFuc2Zvcm1hdGlvbicpfS5gXG4gICAgICAgICAgOiBzY2hlbWE/LnJlcXVpcmVkPy5pbmNsdWRlcygnb3RoZXJTaXRlcycpXG4gICAgICAgICAgICA/IGBQbGVhc2Ugb25seSBzcGVjaWZ5IGEgc2luZ2xlICR7c2NoZW1hTGluaygnQ3ljbGUjc2l0ZScsICdzaXRlJyl9IHdoZW4gdGhlIGZ1bmN0aW9uYWwgdW5pdCBpcyAke2NvZGUoXG4gICAgICAgICAgICAgICAgQ3ljbGVGdW5jdGlvbmFsVW5pdFsnMSBoYSddXG4gICAgICAgICAgICAgICl9LmBcbiAgICAgICAgICAgIDogLy8gdGVybVR5cGUgcmVzdHJpY3Rpb24gb24gdGhlIGl0ZW1cbiAgICAgICAgICAgICAgc2NoZW1hPy5wcm9wZXJ0aWVzPy50ZXJtPy5wcm9wZXJ0aWVzPy50ZXJtVHlwZT8uZW51bT8ubGVuZ3RoXG4gICAgICAgICAgICAgID8gYFRoaXMgJHtjb2RlKCd0ZXJtVHlwZScpfSBpcyBub3QgYWxsb3dlZCBoZXJlLmBcbiAgICAgICAgICAgICAgOiAnU2hvdWxkIG5vdCBiZSB1c2VkIGluIHRoaXMgY2FzZS4nLFxuICAnc2hvdWxkIG1hdGNoIHBhdHRlcm4gXCJeXFxcXGR7MTN9JFwiJzogKCkgPT4gYHNob3VsZCBiZSBjb21wb3NlZCBvZiAxMyBudW1iZXJzYCxcbiAgJ3Nob3VsZCBtYXRjaCBwYXR0ZXJuIFwiXlswLTldezR9KC1bMC05XXsyfSk/KC1bMC05XXsyfSk/JFwiJzogKCkgPT4gZGF0ZUZvcm1hdE1lc3NhZ2UsXG4gICdzaG91bGQgbWF0Y2ggcGF0dGVybiBcIl4oWzAtOV17NH18LSkoLVswLTldezJ9KT8oLVswLTldezJ9KT8kXCInOiAoKSA9PiBkYXRlRm9ybWF0TWVzc2FnZSxcbiAgJ3Nob3VsZCBtYXRjaCBwYXR0ZXJuIFwiXihbMC05XXs0fXwtKSgtWzAtOV17Mn0pPygtWzAtOV17Mn0pPyhbVF1bMC0yXVswLTldOlswLTVdWzAtOV06WzAtNV1bMC05XSgoK3wtKVswLTFdWzAtOV06WzAtNV1bMC05XSk/KT8kXCInOlxuICAgICgpID0+IGRhdGVGb3JtYXRNZXNzYWdlLFxuICAnc2hvdWxkIG1hdGNoIHBhdHRlcm4gXCJeMTAuKGQpKy8oUykrJFwiJzogKCkgPT5cbiAgICBgVGhlIERPSSBzaG91bGQgbm90IGluY2x1ZGUgdGhlIGRvbWFpbiBuYW1lLCBlLmcuICR7Y29kZSgnMTAuMTAwMC8xODInKX0gaW5zdGVhZCBvZiAke2NvZGUoXG4gICAgICAnaHR0cHM6Ly9kb2kub3JnLzEwLjEwMDAvMTgyJ1xuICAgICl9YCxcbiAgJ3Nob3VsZCBoYXZlIHRoZSBzYW1lIGxlbmd0aCBhcyBlbmREYXRlJzogKCkgPT5cbiAgICBgVGhlIHN0YXJ0RGF0ZSBtdXN0IGJlIGluIHRoZSBzYW1lIGRhdGUgZm9ybWF0IGFzICR7Y29kZSgnZW5kRGF0ZScpfTogWVlZWS1NTS1ERCwgWVlZWS1NTSwgb3IgWVlZWS5gLFxuICAnbm9kZSBub3QgZm91bmQnOiAoZXJyb3IsIF9lcnJvckNvdW50LCBhbGxFcnJvcnMpID0+XG4gICAgYCR7XG4gICAgICBhbGxFcnJvcnM/Lmxlbmd0aFxuICAgICAgICA/IGBUaGUgZm9sbG93aW5nIE5vZGVzIGRvIG5vdCBleGlzdCBvbiB0aGUgcGxhdGZvcm06XG4gICAgICAgICAgPHVsIGNsYXNzPVwiaXMtcGwtMyBpcy1saXN0LXN0eWxlLWRpc2MgaXMtbm93cmFwXCI+XG4gICAgICAgICAgICAke3VuaXF1ZShcbiAgICAgICAgICAgICAgYWxsRXJyb3JzLm1hcChcbiAgICAgICAgICAgICAgICAoeyBwYXJhbXMgfSkgPT5cbiAgICAgICAgICAgICAgICAgIGA8bGkgY2xhc3M9XCJpcy1wcmUtd3JhcFwiPiR7cGFyYW1zPy5ub2RlPy5bJ0B0eXBlJ119IHdpdGggJHtjb2RlKGBAaWQ9JHtwYXJhbXM/Lm5vZGU/LlsnQGlkJ119YCl9PC9saT5gXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICkuam9pbignXFxuJyl9XG4gICAgICAgICAgPC91bD5gXG4gICAgICAgIDogYFRoZSAke2Vycm9yLnBhcmFtcz8ubm9kZT8uWydAdHlwZSddfSB3aXRoICR7Y29kZShgQGlkPSR7ZXJyb3IucGFyYW1zPy5ub2RlPy5bJ0BpZCddfWApfSBkb2VzIG5vdCBleGlzdCBvbiB0aGUgcGxhdGZvcm0uYFxuICAgIH0gSWYgeW91IGFyZSB0cnlpbmcgdG8gbGluayB0byBub2RlcyBpbmNsdWRlZCBpbiB0aGlzIHVwbG9hZCwgeW91IG11c3QgdXNlICR7Y29kZShcbiAgICAgICdpZCdcbiAgICApfSBmaWVsZCBpbnN0ZWFkLiBPdGhlcndpc2UsIHBsZWFzZSBjaGVjayB0aGUgaWRzIGFyZSBjb3JyZWN0IGFuZCB0cnkgYWdhaW4uYCxcbiAgJ3Nob3VsZCBiZSBsaW5rZWQgdG8gYW4gZXhpc3Rpbmcgbm9kZSc6IChlcnJvciwgX2Vycm9yQ291bnQsIGFsbEVycm9ycykgPT5cbiAgICBhbGxFcnJvcnM/Lmxlbmd0aFxuICAgICAgPyBgWW91ciB1cGxvYWQgZG9lcyBub3QgY29udGFpbiB0aGUgZm9sbG93aW5nIE5vZGVzOlxuICAgICAgPHVsIGNsYXNzPVwiaXMtcGwtMyBpcy1saXN0LXN0eWxlLWRpc2MgaXMtbm93cmFwXCI+XG4gICAgICAke3VuaXF1ZShcbiAgICAgICAgYWxsRXJyb3JzLm1hcChcbiAgICAgICAgICAoeyBwYXJhbXMgfSkgPT4gYDxsaSBjbGFzcz1cImlzLXByZS13cmFwXCI+JHtwYXJhbXM/Lm5vZGU/LnR5cGV9IHdpdGggJHtjb2RlKGBpZD0ke3BhcmFtcz8ubm9kZT8uaWR9YCl9PC9saT5gXG4gICAgICAgIClcbiAgICAgICkuam9pbignXFxuJyl9XG4gICAgICA8L3VsPlxuICAgICAgSWYgeW91IGFyZSB0cnlpbmcgdG8gbGluayB0byBhbiBleGlzdGluZyBOb2RlIG9uIHRoZSBIRVNUSUEgcGxhdGZvcm0sIHlvdSBtdXN0IHVzZSAke2NvZGUoJ0BpZCcpfSBmaWVsZCBpbnN0ZWFkLlxuICAgICAgT3RoZXJ3aXNlIHlvdSBtdXN0IGluY2x1ZGUgYSBmdWxsICR7dW5pcXVlKFxuICAgICAgICBhbGxFcnJvcnMubWFwKCh7IHBhcmFtcyB9KSA9PiBgJHtwYXJhbXM/Lm5vZGU/LnR5cGV9IHdpdGggaWQgJHtjb2RlKHBhcmFtcz8ubm9kZT8uaWQpfS5gKVxuICAgICAgKS5qb2luKCcsICcpfWBcbiAgICAgIDogYFlvdXIgdXBsb2FkIGRvZXMgbm90IGNvbnRhaW4gYSAke2Vycm9yLnBhcmFtcz8ubm9kZT8udHlwZX0gd2l0aCAke2NvZGUoYGlkPSR7ZXJyb3IucGFyYW1zPy5ub2RlPy5pZH1gKX0uXG4gICAgICBJZiB5b3UgYXJlIHRyeWluZyB0byBsaW5rIHRvIGFuIGV4aXN0aW5nIE5vZGUgb24gdGhlIEhFU1RJQSBwbGF0Zm9ybSwgeW91IG11c3QgdXNlICR7Y29kZSgnQGlkJyl9IGZpZWxkIGluc3RlYWQuXG4gICAgICBPdGhlcndpc2UgeW91IG11c3QgaW5jbHVkZSBhIGZ1bGwgJHtlcnJvci5wYXJhbXM/Lm5vZGU/LnR5cGV9IHdpdGggaWQgJHtjb2RlKGVycm9yLnBhcmFtcz8ubm9kZT8uaWQpfS5gLFxuICAnbXVzdCBiZSB3aXRoaW4gdGhlIGNvdW50cnknOiAoKSA9PiBgVGhlIGNvdW50cnkgcHJvdmlkZWQgZG9lcyBub3QgY29udGFpbiB0aGUgcmVnaW9uIHByb3ZpZGVkLiBQbGVhc2UgY2hlY2tcbiAgdGhlIGNvdW50cnkgZm9yIGVycm9ycyBvciB0aGUgcmVnaW9uIGZvciBlcnJvcnMsIGFuZCByZWZlcmVuY2UgdGhlICR7Z2xvc3NhcnlMaW5rKCdHbG9zc2FyeSBvZiBUZXJtcycpfS5gLFxuICBbbWFwRXJyb3JNZXNzYWdlXTogKHsgZGF0YVBhdGgsIHBhcmFtcyB9LCBlcnJvckNvdW50KSA9PlxuICAgIGVycm9yQ291bnQgPT09IDFcbiAgICAgID8gYFRoZSBsb25naXR1ZGUgYW5kIGxhdGl0dWRlIHByb3ZpZGVkIGFyZSR7XG4gICAgICAgICAgcGFyYW1zPy5kaXN0YW5jZSA/IGAgJHtwYXJhbXM/LmRpc3RhbmNlfWttc2AgOiAnJ1xuICAgICAgICB9IG91dHNpZGUgb2YgdGhlICR7ZGF0YVBhdGguc3Vic3RyaW5nKDEpfSBwcm92aWRlZC5cbiAgICAgIFBsZWFzZSBjaGVjayB0aGUgbG9uZ2l0dWRlIGFuZCBsYXRpdHVkZSBmb3IgZXJyb3JzIG9yIGNoZWNrIGlmIHRoZSB3cm9uZyAke2RhdGFQYXRoLnN1YnN0cmluZyhcbiAgICAgICAgMVxuICAgICAgKX0gZnJvbSB0aGUgJHtnbG9zc2FyeVR5cGVMaW5rKFRlcm1UZXJtVHlwZS5yZWdpb24sICdHbG9zc2FyeScpfSB3YXMgdXNlZC5cbiAgICAgICR7XG4gICAgICAgIHBhcmFtcz8uZXhwZWN0ZWRcbiAgICAgICAgICA/IGBIaW50OiB0aGUgY29vcmRpbmF0ZXMgYXBwZWFyIHRvIGJlIGxvY2F0ZWQgaW4gdGhlIGZvbGxvd2luZyAke2RhdGFQYXRoLnN1YnN0cmluZygxKX06ICR7dGVybUxpbmsoe1xuICAgICAgICAgICAgICBpZDogJ3BhcmFtcy5leHBlY3RlZCdcbiAgICAgICAgICAgIH0pfWBcbiAgICAgICAgICA6ICcnXG4gICAgICB9YFxuICAgICAgOiBgVGhlIHJlZ2lvbiBwcm92aWRlZCBkb2VzIG5vdCBjb250YWluIHRoZSBsb25naXR1ZGUgYW5kIGxhdGl0dWRlIHByb3ZpZGVkLlxuICAgICAgUGxlYXNlIGNoZWNrIHRoZSBsb25naXR1ZGUgYW5kIGxhdGl0dWRlIGZvciBlcnJvcnMgb3IgdGhlIHJlZ2lvbiBmb3IgZXJyb3IsIGFuZCByZWZlcmVuY2UgdGhlICR7Z2xvc3NhcnlUeXBlTGluayhcbiAgICAgICAgVGVybVRlcm1UeXBlLnJlZ2lvbixcbiAgICAgICAgJ0dsb3NzYXJ5IG9mIFRlcm1zJ1xuICAgICAgKX0uYCxcbiAgJ3N1bSBub3QgZXF1YWwgdG8gMTAwJSBmb3Igc2FuZENvbnRlbnQsIHNpbHRDb250ZW50LCBjbGF5Q29udGVudCc6ICgpID0+XG4gICAgYFRoZSBzdW0gb2YgU2FuZCwgU2lsdCwgYW5kIENsYXkgY29udGVudCBzaG91bGQgZXF1YWwgMTAwJSBmb3IgZWFjaCBzb2lsIGRlcHRoIGludGVydmFsLmAsXG4gICdpcyBvdXRzaWRlIHRoZSBhbGxvd2VkIHJhbmdlJzogKHsgcGFyYW1zIH0sIGVycm9yQ291bnQpID0+XG4gICAgYCR7XG4gICAgICBlcnJvckNvdW50ID09PSAxXG4gICAgICAgID8gcGFyYW1zPy50ZXJtXG4gICAgICAgICAgPyBgVGhlIHZhbHVlIGZvciAke2NvZGUoXG4gICAgICAgICAgICAgIHBhcmFtcz8udGVybVsnQGlkJ10gfHwgcGFyYW1zPy50ZXJtLm5hbWVcbiAgICAgICAgICAgICl9IGlzIG91dHNpZGUgdGhlIHJhbmdlIGVzdGFibGlzaGVkIGZvciB0aGUgc29pbCB0ZXh0dXJlIHlvdSBwcm92aWRlZC5cbiAgICAgICAgICAgIEZvciB0aGlzIHNvaWwgdGV4dHVyZSwgdGhlIG1heGltdW0gJHtjb2RlKHBhcmFtcz8udGVybVsnQGlkJ10gfHwgcGFyYW1zPy50ZXJtLm5hbWUpfSBpcyAke1xuICAgICAgICAgICAgICBwYXJhbXM/LnJhbmdlPy5tYXhcbiAgICAgICAgICAgIH0gYW5kIHRoZSBtaW5pbXVtIGlzICR7cGFyYW1zPy5yYW5nZT8ubWlufS5gXG4gICAgICAgICAgOiBgRG9lcyBub3QgbWF0Y2ggdGhlIHBvc3NpYmxlIHJhbmdlcyBvZiBzYW5kLCBzaWx0IGFuZCBjbGF5IGNvbnRlbnQuYFxuICAgICAgICA6IGBFYWNoIHNvaWwgdGV4dHVyZSBoYXMgYSBtYXhpbXVtIGFuZCBtaW5pbXVtIHZhbHVlIGZvciBzYW5kLCBzaWx0LCBhbmQgY2xheSBjb250ZW50LlxuICAgICAgICBBdCBsZWFzdCBvbmUgbWVhc3VyZW1lbnQgb2Ygc2FuZCwgc2lsdCwgb3IgY2xheSBjb250ZW50IGRvZXMgbm90IG1hdGNoIHRoZSBwb3NzaWJsZSByYW5nZSBmb3IgdGhlIHNwZWNpZmllZCBzb2lsIHRleHR1cmUuYFxuICAgIH1cbiAgICAke1xuICAgICAgZXJyb3JDb3VudCA9PT0gMVxuICAgICAgICA/IGBQbGVhc2UgY2hlY2sgdGhlIG1lYXN1cmVtZW50LCBpdHMgZGVwdGggaW50ZXJ2YWxzLCBhbmQgdGhlIGRhdGVzIG9mIHRoZSBtZWFzdXJlbWVudCBvciB1cGRhdGUgdGhlIHNvaWwgdGV4dHVyZSBpZiBuZWVkZWQuYFxuICAgICAgICA6IGBQbGVhc2UgY2hlY2sgeW91ciBtZWFzdXJlbWVudHMsIHRoZWlyIGRlcHRoIGludGVydmFscywgYW5kIHRoZSBkYXRlcyBvZiB0aGUgbWVhc3VyZW1lbnRzIG9yIHVwZGF0ZSB0aGUgc29pbCB0ZXh0dXJlcyBpZiBuZWVkZWQuYFxuICAgIH1gLFxuICAnc2hvdWxkIGJlIGVxdWFsIHRvIG9uZSBvZiB0aGUgYWxsb3dlZCB2YWx1ZXMnOiAoeyBwYXJhbXMsIGRhdGFQYXRoIH0pID0+IHtcbiAgICBjb25zdCBwYXRocyA9IHBhcnNlRGF0YVBhdGgoZGF0YVBhdGgpO1xuICAgIGNvbnN0IHZhbHVlcyA9XG4gICAgICBwYXRocy5sZW5ndGggPj0gMiA/IHBsdXJhbGl6ZShwYXRoc1twYXRocy5sZW5ndGggLSAxXS5wYXRoLCBwYXJhbXM/LmFsbG93ZWRWYWx1ZXM/Lmxlbmd0aCB8fCAwKSA6ICd2YWx1ZXMnO1xuICAgIHJldHVybiBkYXRhUGF0aC5lbmRzV2l0aCgndGVybS50ZXJtVHlwZScpXG4gICAgICA/IGBGb3IgJHtwbHVyYWxpemUoXG4gICAgICAgICAgcGF0aHNbcGF0aHMubGVuZ3RoIC0gM10ubGFiZWwsXG4gICAgICAgICAgMFxuICAgICAgICApfSwgd2Ugb25seSBhbGxvdyB0ZXJtcyBmcm9tIHRoZSBmb2xsb3dpbmcgZ2xvc3NhcmllczogJHtwYXJhbXM/LmFsbG93ZWRWYWx1ZXNcbiAgICAgICAgICAubWFwKGNvZGUpXG4gICAgICAgICAgLmpvaW4oXG4gICAgICAgICAgICAnLCAnXG4gICAgICAgICAgKX0uIFBsZWFzZSBlaXRoZXIgY2hhbmdlIHRoZSBUZXJtIHlvdSBhcmUgdXNpbmcgYW5kIGVuc3VyZSBpdCBpcyBmcm9tIG9uZSBvZiB0aGUgZ2xvc3NhcmllcyBsaXN0ZWQgYWJvdmUsIG9yIGZvbGxvdyB0aGUgc2NoZW1hIHRvIGlkZW50aWZ5IHdoZXJlIHRoaXMgVGVybSBjYW4gYmUgYWRkZWQuYFxuICAgICAgOiBgT25seSB0aGUgZm9sbG93aW5nICR7dmFsdWVzfSBhcmUgcGVybWl0dGVkOiAke3BhcmFtcz8uYWxsb3dlZFZhbHVlcy5tYXAoY29kZSkuam9pbignLCAnKX1gO1xuICB9LFxuICAnc2hvdWxkIGJlIGVxdWFsIHRvIGNvbnN0YW50JzogKHsgcGFyYW1zIH0pID0+IGBNdXN0IGJlOiAke2NvZGUocGFyYW1zPy5hbGxvd2VkVmFsdWUpfWAsXG4gICdpcyBub3QgYWxsb3dlZCBmb3IgdGhpcyBlbWlzc2lvbic6IG1ldGhvZE1vZGVsTWFwcGluZ0Vycm9yLFxuICAnaXMgbm90IGFsbG93ZWQgZm9yIHRoaXMgY2hhcmFjdGVyaXNlZEluZGljYXRvcic6IG1ldGhvZE1vZGVsTWFwcGluZ0Vycm9yLFxuICAnaXMgbm90IGFsbG93ZWQgZm9yIHRoaXMgcmVzb3VyY2VVc2UnOiBtZXRob2RNb2RlbE1hcHBpbmdFcnJvcixcbiAgJ3Nob3VsZCBjb250YWluIGEgdmFsaWQgaXRlbSc6ICh7IGRhdGFQYXRoIH0pID0+IHtcbiAgICBjb25zdCBwYXRocyA9IHBhcnNlRGF0YVBhdGgoZGF0YVBhdGghKTtcbiAgICByZXR1cm4gcGF0aHMubGVuZ3RoID49IDJcbiAgICAgID8gYFRoZSAke3BhdGhzW3BhdGhzLmxlbmd0aCAtIDFdLnBhdGh9IHJlbGF0ZWQgdG8gdGhpcyAke3BsdXJhbGl6ZShwYXRoc1twYXRocy5sZW5ndGggLSAyXS5sYWJlbCwgMSl9IGFyZSBpbnZhbGlkYFxuICAgICAgOiBgVGhlICR7cGF0aHNbMF0ucGF0aH0gYXJlIGludmFsaWRgO1xuICB9LFxuICAnbWF5IGJlIGJldHdlZW4gMCBhbmQgMTAwJzogKCkgPT4gJ1BlcmNlbnRhZ2VzIHNob3VsZCBiZSBiZXR3ZWVuIDAgYW5kIDEwMCwgbm90IDAgYW5kIDEuIFRoaXMgbWF5IGJlIGFuIGVycm9yLicsXG4gICdtYXkgbm90IGFsbCBiZSBzZXQgdG8gZmFsc2UnOiAoKSA9PlxuICAgIGBFdmVyeSB2YWx1ZSBpbiB0aGUgZGF0YSBjb21wbGV0ZW5lc3MgYXNzZXNzbWVudCBpcyAke2NvZGUoZmFsc2UpfS4gWW91IG1heSBoYXZlIGZvcmdvdHRlbiB0byBmaWxsIGl0IGluLlxuICBGb3IgaW5mb3JtYXRpb24gb24gaG93IHRvIGZpbGwgaXQgaW4sIHBsZWFzZSBzZWUgdGhlICR7c2NoZW1hTGluaygnQ3ljbGUjY29tcGxldGVuZXNzJywgJ3NjaGVtYScpfS5gLFxuICAnbWF5IG5vdCBiZSBlbXB0eSc6ICgpID0+ICdpZiB0aGlzIHZhbHVlIHNpZ25pZmllcyBubyBkYXRhLCBIRVNUSUEgb25seSBhY2NlcHRzIFwiLVwiIG9yIGVtcHR5IGZvciBubyBkYXRhJyxcbiAgJ21heSBub3QgYmUgMCc6ICh7IGRhdGFQYXRoIH0sIGVycm9yQ291bnQpID0+XG4gICAgYEFkZGluZyBhIHZhbHVlICR7ZXJyb3JDb3VudCA9PT0gMSA/IGAgdG8gZXZlcnkgJHtkYXRhUGF0aExhYmVsKGRhdGFQYXRoKX0gYCA6ICcgJ30gaXMgaGlnaGx5IHJlY29tbWVuZGVkLlxuICAgICAgSWYgdGhlIGFtb3VudCBwcm9kdWNlZCBpcyB6ZXJvLCB3ZSByZWNvbW1lbmQgc2V0dGluZyB2YWx1ZSB0byAwLmAsXG4gICdsb25nRmFsbG93RHVyYXRpb24gbXVzdCBiZSBsb3dlciB0aGFuIDUgeWVhcnMnOiAoKSA9PlxuICAgIGBZb3VyIGxvbmcgZmFsbG93IGR1cmF0aW9uIGlzIGdyZWF0ZXIgdGhhbiBmaXZlIHllYXJzLlxuICAgIEZhbGxvdyBpcyBkZWZpbmVkIGJ5IEZBT1NUQVQgYXMgbGFuZCBsZWZ0IHVuY3VsdGl2YXRlZCBmb3IgYmV0d2VlbiAxIGFuZCA1IHllYXJzLFxuICAgIGFuZCB0aGlzIGRlZmluaXRpb24gaXMgdXNlZCBmb3IgSEVTVElBIGFsc28uYCxcbiAgJ3Nob3VsZCBiZSBtb3JlIHRoYW4gdGhlIGNyb3BwaW5nIGR1cmF0aW9uJzogKHsgcGFyYW1zIH0pID0+XG4gICAgYFRoZSAke3NjaGVtYUxpbmsoXG4gICAgICAnQ3ljbGUjY3ljbGVEdXJhdGlvbicsXG4gICAgICAnY3ljbGVEdXJhdGlvbidcbiAgICApfSBpcyBzaG9ydGVyIHRoYW4gdGhlIGNvdW50cnkncyBtaW5pbXVtIGNyb3BwaW5nIGR1cmF0aW9uIGZvciByaWNlICgke2NvZGUocGFyYW1zPy5leHBlY3RlZCl9KS5cbiAgICBUaGlzIG1pZ2h0IGJlIGFuIGVycm9yIGFuZCByZXN1bHQgaW4gdGhlIHVuZGVyZXN0aW1hdGlvbiBvZiB0aGUgJHtjb2RlKCdDSDQsIHRvIGFpciwgZmxvb2RlZCByaWNlJyl9IGVtaXNzaW9ucy5cbiAgICBQbGVhc2UsIGRvdWJsZS1jaGVjayB0aGF0IHRoZSAke3NjaGVtYUxpbmsoJ0N5Y2xlI2N5Y2xlRHVyYXRpb24nLCAnY3ljbGVEdXJhdGlvbicpfSBpcyBjb3JyZWN0bHkgc2V0LlxuYCxcbiAgJ2Nyb3BwaW5nRHVyYXRpb24gbXVzdCBiZSBiZXR3ZWVuIG1pbiBhbmQgbWF4JzogKHsgcGFyYW1zIH0pID0+XG4gICAgYFRoZSAke2NvZGUoJ2Nyb3BwaW5nRHVyYXRpb24nKX0gc2hvdWxkIGJlIHdpdGhpbiB0aGUgY291bnRyeSdzIG1pbmltdW0gKCR7cGFyYW1zLm1pbn0pIGFuZCBtYXhpbXVtICgke3BhcmFtcy5tYXh9KSBjcm9wcGluZyBkdXJhdGlvbiBmb3IgcmljZS5cbiAgVGhpcyBtaWdodCBiZSBhbiBlcnJvciBhbmQgcmVzdWx0IGluIHRoZSBvdmVyZXN0aW1hdGlvbiBvZiAke2NvZGUoJ0NINCwgdG8gYWlyLCBmbG9vZGVkIHJpY2UnKX0gZW1pc3Npb25zLlxuICBQbGVhc2UsIGRvdWJsZS1jaGVjayB0aGF0IHRoZSAke2NvZGUoJ2Nyb3BwaW5nRHVyYXRpb24nKX0gaXMgY29ycmVjdGx5IHNldC5gLFxuICAnc2hvdWxkIGJlIHdpdGhpbiBwZXJjZW50YWdlIG9mIGRlZmF1bHQgdmFsdWUnOiAoeyBwYXJhbXMgfSwgZXJyb3JDb3VudCkgPT5cbiAgICBlcnJvckNvdW50ID09PSAxXG4gICAgICA/IGBUaGlzIHZhbHVlIGlzIMKxJHt0aHJlc2hvbGQocGFyYW1zPy50aHJlc2hvbGQpfSBkaWZmZXJlbnQgdG8gb3VyIGRlZmF1bHQgdmFsdWUgd2hpY2ggaXMgJHtwYXJhbXM/LmRlZmF1bHR9LlxuICAgICAgUGxlYXNlIGNoZWNrIHlvdXIgdXBsb2FkZWQgZGF0YSBhcyB0aGlzIG1heSBiZSBhbiBlcnJvci5gXG4gICAgICA6IGBUaGlzIHZhbHVlIGlzIHN1YnN0YW50aWFsbHkgZGlmZmVyZW50IHRoYW4gb3VyIGRlZmF1bHQgdmFsdWUuXG4gICAgICBQbGVhc2UgY2hlY2sgeW91ciB1cGxvYWRlZCBkYXRhIGFzIHRoaXMgbWF5IGJlIGFuIGVycm9yLmAsXG4gICd0aGUgdmFsdWUgcHJvdmlkZWQgaXMgbm90IGNvbnNpc3RlbnQgd2l0aCB0aGUgbW9kZWwgcmVzdWx0JzogKHsgcGFyYW1zIH0sIGVycm9yQ291bnQpID0+XG4gICAgYFRoZSBleHBlY3RlZCByZXN1bHQgJHtcbiAgICAgIGVycm9yQ291bnQgPT09IDFcbiAgICAgICAgPyBgZm9yICR7Y29kZShwYXJhbXM/LnRlcm0ubmFtZSl9ICR7XG4gICAgICAgICAgICBwYXJhbXM/Lm1vZGVsPy5uYW1lID8gYHVzaW5nICR7bW9kZWxMaW5rKHBhcmFtcz8udGVybSwgcGFyYW1zPy5tb2RlbCl9IGAgOiAnJ1xuICAgICAgICAgIH1gXG4gICAgICAgIDogJydcbiAgICB9XG4gICAgZnJvbSB0aGUgZGF0YSBwcm92aWRlZCBpbiB0aGUgdXBsb2FkIGlzICR7XG4gICAgICBlcnJvckNvdW50ID09PSAxXG4gICAgICAgID8gYCR7Y29kZSh0b1ByZWNpc2lvbihwYXJhbXM/LmV4cGVjdGVkLCAzKSl9LCBidXQgdGhlIHZhbHVlIGluIHRoZSB1cGxvYWQgaXMgJHtjb2RlKFxuICAgICAgICAgICAgdG9QcmVjaXNpb24ocGFyYW1zPy5jdXJyZW50LCAzKVxuICAgICAgICAgICl9LlxuICAgICAgICAke3BhcmFtcz8udGhyZXNob2xkID8gYE91ciB0aHJlc2hvbGQgaXMgwrEke3RocmVzaG9sZChwYXJhbXM/LnRocmVzaG9sZCl9LmAgOiAnJ31cbiAgICAgICAgUGxlYXNlIGVpdGhlcjpcbiAgICAgICAgPHVsIGNsYXNzPVwiaXMtcGwtMyBpcy1saXN0LXN0eWxlLWRlY2ltYWwgaXMtbm93cmFwXCI+XG4gICAgICAgIDxsaSBjbGFzcz1cImlzLXByZS13cmFwXCI+Q2hlY2sgdGhlICR7cGFyYW1zPy50ZXJtLnRlcm1UeXBlfSB2YWx1ZSB5b3UgcHJvdmlkZWQ7PC9saT5cbiAgICAgICAgPGxpIGNsYXNzPVwiaXMtcHJlLXdyYXBcIj5DaGVjayB0aGUgZGF0YSB5b3UgcHJvdmlkZWQgd2hpY2ggaXMgdGhlIGlucHV0IGludG8gdGhpcyBtb2RlbDs8L2xpPlxuICAgICAgICA8bGkgY2xhc3M9XCJpcy1wcmUtd3JhcFwiPkNhcmVmdWxseSByZWFkIHRoZSBkb2N1bWVudGF0aW9uIHRvIHVuZGVyc3RhbmQgaWYgd2UgdXNlZCBhIGRlZmF1bHQgcHJvcGVydHkgYXMgcGFydCBvZiB0aGUgY2FsY3VsYXRpb25zLjwvbGk+XG4gICAgICAgIDwvdWw+YFxuICAgICAgICA6ICdub3QgY29uc2lzdGVudCB3aXRoIHRoZSBtb2RlbCByZXN1bHQuJ1xuICAgIH1gLFxuICAndGhlIG1lYXN1cmVtZW50IHByb3ZpZGVkIG1pZ2h0IGJlIGluIGVycm9yJzogKHsgcGFyYW1zIH0sIGVycm9yQ291bnQpID0+XG4gICAgYFRoZSBleHBlY3RlZCB2YWx1ZSBmb3IgJHtjb2RlKHBhcmFtcz8udGVybS5uYW1lKX1cbiAgICAke3BhcmFtcz8ubW9kZWw/Lm5hbWUgPyBgdXNpbmcgJHttb2RlbExpbmsocGFyYW1zPy50ZXJtLCBwYXJhbXM/Lm1vZGVsKX0gYCA6ICcnfVxuICAgIGZyb20gdGhlIGRhdGEgcHJvdmlkZWQgaW4gdGhlIHVwbG9hZCBpcyAke1xuICAgICAgZXJyb3JDb3VudCA9PT0gMVxuICAgICAgICA/IGAke2NvZGUodG9QcmVjaXNpb24ocGFyYW1zPy5leHBlY3RlZCwgMykpfSwgYnV0IHRoZSB2YWx1ZSBpbiB0aGUgdXBsb2FkIGlzICR7Y29kZShcbiAgICAgICAgICAgIHRvUHJlY2lzaW9uKHBhcmFtcz8uY3VycmVudCwgMylcbiAgICAgICAgICApfS5cbiAgICAgICAgJHtwYXJhbXM/LnRocmVzaG9sZCA/IGBPdXIgdGhyZXNob2xkIGlzIMKxJHt0aHJlc2hvbGQocGFyYW1zPy50aHJlc2hvbGQpfS5gIDogJyd9YFxuICAgICAgICA6IGBub3QgY29uc2lzdGVudCB3aXRoIHRoZSBtb2RlbCByZXN1bHQuYFxuICAgIH1gLFxuICAnbXVzdCBiZSBlcXVhbCB0byBwcmV2aW91cyBwcm9kdWN0IG11bHRpcGxpZWQgYnkgdGhlIHNoYXJlJzogKCkgPT5cbiAgICBgUHJvZHVjdHMgZnJvbSBhIHRyYW5zZm9ybWF0aW9uIHdoaWNoIGFyZSBhbiBJbnB1dCBpbiB0byB0aGUgbmV4dCB0cmFuc2Zvcm1hdGlvbiBtdXN0IGZvbGxvdyB0aGUgZm9sbG93aW5nIHJ1bGU6XG4gICAgJHtjb2RlKCdwcmV2aW91cy5wcm9kdWN0LnZhbHVlICogY3VycmVudC50cmFuc2Zvcm1lZFNoYXJlIC8gMTAwID09IGN1cnJlbnQuaW5wdXQudmFsdWUnKX1gLFxuICAnYXQgbGVhc3Qgb25lIElucHV0IG11c3QgYmUgYSBQcm9kdWN0IG9mIHRoZSBDeWNsZSc6ICgpID0+XG4gICAgYEEgVHJhbnNmb3JtYXRpb24gY29udmVydHMgYSBQcm9kdWN0IGZyb20gYSBDeWNsZSBpbnRvIGFub3RoZXIgUHJvZHVjdC5cbiAgICBUaGVyZWZvcmUsIGF0IGxlYXN0IG9uZSBJbnB1dCBpbnRvIHRoZSBUcmFuc2Zvcm1hdGlvbiBtdXN0IGJlIGEgUHJvZHVjdCBvZiB0aGUgQ3ljbGUuYCxcbiAgJ211c3QgaGF2ZSBvbmx5IG9uZSBlbnRyeSB3aXRoIHRoZSBzYW1lIHRlcm0udGVybVR5cGUgPSBleGNyZXRhTWFuYWdlbWVudCc6ICgpID0+XG4gICAgYFRoZXJlIGNhbiBvbmx5IGJlIG9uZSBQcmFjdGljZSBvZiB0eXBlIGV4Y3JldGFNYW5hZ2VtZW50IGluIGEgQ3ljbGUuXG4gICAgVG8gcmVwcmVzZW50IG11bHRpcGxlIGV4Y3JldGEgbWFuYWdlbWVudCBzeXN0ZW1zIGVpdGhlciB1c2UgbXVsdGlwbGUgQ3ljbGVzIGFuZCBsaW5rIHRoZW0gdG9nZXRoZXIsXG4gICAgb3IgdXNlIFRyYW5zZm9ybWF0aW9ucyB3aXRoaW4gYSBDeWNsZSBhbmQgbGluayB0aG9zZSB0b2dldGhlci5gLFxuICAnbXVzdCBiZSBpbmNsdWRlZCBhcyBhbiBJbnB1dCc6ICh7IHBhcmFtcyB9LCBlcnJvckNvdW50KSA9PlxuICAgIGBUaGUgZXhjcmV0YSBQcm9kdWN0cyBhcmUgbm90IG9mIHRoZSBzYW1lIHR5cGUgYXMgdGhlIGV4Y3JldGEgSW5wdXRzLlxuICAgICR7XG4gICAgICBlcnJvckNvdW50ID09PSAxXG4gICAgICAgID8gYEUuZy4sIHlvdSBjYW5ub3QgZ2V0ICR7Y29kZShwYXJhbXM/LnRlcm0/Lm5hbWUpfSBmcm9tICR7KHBhcmFtcz8uZXhwZWN0ZWQgfHwgW10pXG4gICAgICAgICAgICAubWFwKHYgPT4gY29kZShrZXlUb0xhYmVsKHYpKSlcbiAgICAgICAgICAgIC5qb2luKCcgb3IgJyl9LmBcbiAgICAgICAgOiAnJ1xuICAgIH1cbiAgICBQbGVhc2UgY2hlY2sgdGhlIElucHV0cyBhbmQgUHJvZHVjdHMgb2YgdGhlIFRyYW5zZm9ybWF0aW9uLmAsXG4gICdtdXN0IGFkZCB0aGUgbGlua2VkIGlucHV0cyB0byB0aGUgY3ljbGUnOiAoeyBwYXJhbXMgfSwgZXJyb3JDb3VudCkgPT5cbiAgICBgJHtcbiAgICAgIGVycm9yQ291bnQgPT09IDFcbiAgICAgICAgPyBgWW91IGhhdmUgc3RhdGVkIHRoYXQgJHtjb2RlKHBhcmFtcz8udGVybT8ubmFtZSl9IHdhcyBjcmVhdGVkIGJ5IHRoZSBmb2xsb3dpbmcgSW5wdXRzICR7cGFyYW1zPy5leHBlY3RlZFxuICAgICAgICAgICAgPy5tYXAoZSA9PiBjb2RlKGUubmFtZSkpXG4gICAgICAgICAgICAuam9pbignICwgJyl9YFxuICAgICAgICA6ICdZb3UgaGF2ZSBzdGF0ZWQgc29tZSBFbWlzc2lvbnMgd2VyZSBjcmVhdGVkIGJ5IHNvbWUgSW5wdXRzJ1xuICAgIH0uXG4gICAgSG93ZXZlciwgdGhlc2UgSW5wdXRzIGRvIG5vdCBleGlzdCBpbiB0aGUgQ3ljbGUuXG4gICAgUGxlYXNlIGFkZCB0aGVzZSBJbnB1dHMsIGV2ZW4gaWYgeW91IGRvIG5vdCBoYXZlIGEgdmFsdWUgZm9yIHRoZW0uYCxcbiAgJ211c3QgYWRkIHRoZSBsaW5rZWQgdHJhbnNmb3JtYXRpb25zIHRvIHRoZSBjeWNsZSc6ICh7IGxldmVsLCBwYXJhbXMgfSwgZXJyb3JDb3VudCkgPT5cbiAgICBgJHtcbiAgICAgIGVycm9yQ291bnQgPT09IDFcbiAgICAgICAgPyBgWW91IGhhdmUgc3BlY2lmaWVkIHRoYXQke2NvZGUoXG4gICAgICAgICAgICBwYXJhbXM/LnRlcm0/Lm5hbWVcbiAgICAgICAgICApfSB3YXMgY3JlYXRlZCBkdXJpbmcgYSBUcmFuc2Zvcm1hdGlvbiB3aXRoIHRoZSBUZXJtIG5hbWUgJHtjb2RlKHBhcmFtcz8uZXhwZWN0ZWQ/Lm5hbWUpfWBcbiAgICAgICAgOiAnWW91IGhhdmUgc3RhdGVkIHNvbWUgRW1pc3Npb25zIHdlcmUgY3JlYXRlZCBieSBzb21lIFRyYW5zZm9ybWF0aW9ucydcbiAgICB9LlxuICAgIEhvd2V2ZXIsIHdlIGNhbm5vdCBmaW5kIGEgVHJhbnNmb3JtYXRpb24gd2l0aGluIHRoZSBDeWNsZSB3aXRoIHRoaXMgVGVybSBuYW1lLlxuICAgICR7XG4gICAgICBsZXZlbCA9PT0gJ2Vycm9yJ1xuICAgICAgICA/ICdQbGVhc2UgY2hlY2sgdGhlIFRlcm1zIHVzZWQgaW4gdGhlIEVtaXNzaW9ucyBhbmQvb3IgdGhlIFRyYW5zZm9ybWF0aW9ucy4nXG4gICAgICAgIDogJ1lvdSBtYXkgd2FudCB0byBhZGQgdGhpcyBUcmFuc2Zvcm1hdGlvbi4nXG4gICAgfWAsXG4gICdldmVyeSBub2RlIHNob3VsZCBiZSB1bmlxdWUnOiAoeyBwYXJhbXMgfSkgPT5cbiAgICBgVGhpcyBOb2RlIGlzIGR1cGxpY2F0ZWQuIEV2ZXJ5IE5vZGUgc2hvdWxkIGJlIHVuaXF1ZS5cbiAgICBVbmlxdWVuZXNzIGlzIGRldGVybWluZWQgYnkgdGhlIGZvbGxvd2luZyBmaWVsZHM6ICR7KHBhcmFtcz8ua2V5cyB8fCBbXSkubWFwKGNvZGUpLmpvaW4oJywgJyl9YCxcbiAgJ2V2ZXJ5IGl0ZW0gaW4gdGhlIGxpc3Qgc2hvdWxkIGJlIHVuaXF1ZSc6ICh7IHBhcmFtcyB9KSA9PlxuICAgIGBUaGlzIGJsYW5rIG5vZGUgaXMgZHVwbGljYXRlZCR7XG4gICAgICBwYXJhbXM/LmR1cGxpY2F0ZWRJbmRleGVzPy5sZW5ndGhcbiAgICAgICAgPyBgIHdpdGggdGhlIGJsYW5rICR7cGx1cmFsaXplKFxuICAgICAgICAgICAgJ25vZGUnLFxuICAgICAgICAgICAgcGFyYW1zLmR1cGxpY2F0ZWRJbmRleGVzLmxlbmd0aFxuICAgICAgICAgICl9IHdpdGggbnVtYmVyZWQ6ICR7cGFyYW1zLmR1cGxpY2F0ZWRJbmRleGVzLmpvaW4oJywgJyl9YFxuICAgICAgICA6ICcnXG4gICAgfS4gRXZlcnkgYmxhbmsgbm9kZSBzaG91bGQgYmUgdW5pcXVlLlxuICAgIFVuaXF1ZW5lc3MgaXMgZGV0ZXJtaW5lZCBieSB0aGUgZm9sbG93aW5nIGZpZWxkczogJHsocGFyYW1zPy5rZXlzIHx8IFtdKS5tYXAoY29kZSkuam9pbignLCAnKX1gLFxuICAnbXVzdCBjb250YWluIGFzIG1hbnkgaXRlbXMgYXMgdmFsdWVzJzogKHsgcGFyYW1zLCBkYXRhUGF0aCB9KSA9PlxuICAgIGBUaGUgbnVtYmVyIG9mICR7Y29kZShkYXRhUGF0aC5zcGxpdCgnLicpLnBvcCgpKX0gbXVzdCBtYXRjaCB0aGUgbnVtYmVyIG9mICR7Y29kZSgndmFsdWUnKX0uXG4gICAgQ3VycmVudGx5IHRoZXJlIGFyZSAke3BhcmFtcz8uY3VycmVudH0gJHtjb2RlKGRhdGFQYXRoLnNwbGl0KCcuJykucG9wKCkpfSBidXQgJHtwYXJhbXM/LmV4cGVjdGVkfSAke2NvZGUoXG4gICAgICAndmFsdWUnXG4gICAgKX0uYCxcbiAgJ2lzIHRvbyBnZW5lcmljJzogKHsgcGFyYW1zIH0pID0+XG4gICAgYFlvdSBoYXZlIHRoZSBmb2xsb3dpbmcgUHJvZHVjdCAke2NvZGUocGFyYW1zPy5wcm9kdWN0Py5uYW1lKX0gaG93ZXZlcixcbiAgICB5b3UgaGF2ZSB1c2VkIGEgZ2VuZXJpYyAke2dsb3NzYXJ5VHlwZUxpbmsocGFyYW1zPy50ZXJtPy50ZXJtVHlwZSl9IHRlcm0gJHtjb2RlKHBhcmFtcz8udGVybT8ubmFtZSl9LlxuICAgIFVzZSBhIG1vcmUgc3BlY2lmaWMgdGVybSBmb3IgdGhlICR7Z2xvc3NhcnlUeXBlTGluayhcbiAgICAgIHBhcmFtcz8udGVybT8udGVybVR5cGVcbiAgICApfSB3aGljaCByZWZsZWN0cyB0aGUgc3BlY2lmaWMgJHtnbG9zc2FyeVR5cGVMaW5rKHBhcmFtcz8ucHJvZHVjdD8udGVybVR5cGUpfS5gLFxuICAnc2hvdWxkIG5vdCB1c2UgaWRlbnRpY2FsIHRlcm1zIHdpdGggZGlmZmVyZW50IHVuaXRzJzogKHsgcGFyYW1zIH0pID0+XG4gICAgYFlvdSBoYXZlIGFkZGVkIHRoZSBzYW1lICR7Y29kZShwYXJhbXM/LnRlcm0/LnRlcm1UeXBlKX0gaW4gJHtwYXJhbXM/LnVuaXRzXG4gICAgICA/Lm1hcCh1bml0ID0+IGNvZGUodW5pdCkpXG4gICAgICAuam9pbignIGFuZCAnKX0gdW5pdHMuXG4gICAgSWYgdGhlc2UgdGVybXMgcmVmZXIgdG8gdGhlIHNhbWUgJHtjb2RlKHBhcmFtcz8udGVybT8udGVybVR5cGUpfSwgdGhpcyB3aWxsIGxlYWQgdG8gZG91YmxlIGNvdW50aW5nLiR7XG4gICAgICBwYXJhbXM/LnVuaXRzPy5pbmNsdWRlcygna2cgTicpXG4gICAgICAgID8gYCBJbnN0ZWFkIHVzZSB0aGUgJHt0ZXJtTGluayh7IGlkOiAnbml0cm9nZW5Db250ZW50JywgbmFtZTogJ05pdHJvZ2VuIENvbnRlbnQnIH0pfSBQcm9wZXJ0eSBvbiB0aGUgJHtjb2RlKFxuICAgICAgICAgICAgJ2tnJ1xuICAgICAgICAgICl9IHRlcm0gdG8gZGVmaW5lIHRoZSBuaXRyb2dlbiBjb250ZW50IG9mIHRoZSAke2NvZGUocGFyYW1zPy50ZXJtPy50ZXJtVHlwZSl9LmBcbiAgICAgICAgOiAnJ1xuICAgIH1gLFxuICAnaXMgbWlzc2luZyByZXF1aXJlZCBiaWJsaW9ncmFwaGljIGluZm9ybWF0aW9uJzogKCkgPT5cbiAgICBgVGhlIGF1dG9tYXRpYyBiaWJsaW9ncmFwaHkgc2VhcmNoIGZhaWxlZCBmb3IgdGhpcyBCaWJsaW9ncmFwaHkuIEVpdGhlcjpcbiAgICA8dWwgY2xhc3M9XCJpcy1wbC0zIGlzLWxpc3Qtc3R5bGUtZGVjaW1hbCBpcy1ub3dyYXBcIj5cbiAgICA8bGkgY2xhc3M9XCJpcy1wcmUtd3JhcFwiPk1hbnVhbGx5IGZpbGwtaW4gdGhlIDxiPnJlcXVpcmVkPC9iPiBiaWJsaW9ncmFwaGljIGluZm9ybWF0aW9uIGFzIHBlciAke3NjaGVtYUxpbmsoXG4gICAgICBTY2hlbWFUeXBlLkJpYmxpb2dyYXBoeSxcbiAgICAgICdvdXIgc2NoZW1hJ1xuICAgICl9LjwvbGk+XG4gICAgPGxpIGNsYXNzPVwiaXMtcHJlLXdyYXBcIj5Qcm92aWRlIHRoZSAke2NvZGUoJ2RvY3VtZW50RE9JJyl9IGFzIHdlbGwgYXMgdGhlICR7Y29kZSgndGl0bGUnKX0uPC9saT5cbiAgICA8bGkgY2xhc3M9XCJpcy1wcmUtd3JhcFwiPkNoZWNrIHRoZSAke2NvZGUoJ2RvY3VtZW50RE9JJyl9IGFuZCAke2NvZGUoJ3RpdGxlJyl9IGZvciB0eXBvcyBhZ2FpbnN0IHRoZSAke2V4dGVybmFsTGluayhcbiAgICAgICdodHRwczovL3d3dy5tZW5kZWxleS5jb20nLFxuICAgICAgJ01lbmRlbGV5IGNhdGFsb2d1ZSdcbiAgICApfS48L2xpPlxuICAgIDwvdWw+YCxcbiAgJ3Nob3VsZCBiZSBsb3dlciB0aGFuIG1heCBzaXplJzogKHsgcGFyYW1zIH0pID0+XG4gICAgYFRoZSBib3VuZGFyeSBvciByZWdpb24gaXMgPiR7cGFyYW1zPy5leHBlY3RlZH1rbTIgYW5kIGlzIHRvbyBsYXJnZSB0byByZWxpYWJseSBnYXAgZmlsbCBNZWFzdXJlbWVudHMuXG4gICAgSWYgeW91IGFyZSBhYmxlIHRvIHVzZSBhIG1vcmUgc3BlY2lmaWMgcmVnaW9uIG9yIHNtYWxsZXIgYm91bmRhcnksIHBsZWFzZSBkby5gLFxuICAnYW4gZXhjcmV0YSBpbnB1dCBpcyByZXF1aXJlZCB3aGVuIHVzaW5nIGFuIGV4Y3JldGFNYW5hZ2VtZW50IHByYWN0aWNlJzogKHsgZGF0YVBhdGggfSkgPT4ge1xuICAgIGNvbnN0IHBhdGhzID0gcGFyc2VEYXRhUGF0aChkYXRhUGF0aCEpO1xuICAgIHJldHVybiBgRXhjcmV0YSBtYW5hZ2VtZW50IGlzIHRoZSBjb252ZXJzaW9uIG9mIGV4Y3JldGEgdG8gYW55IHR5cGUgb2YgcHJvZHVjdCAoZS5nLiwgYW5vdGhlciB0eXBlIG9mIGV4Y3JldGEgb3Igb3JnYW5pYyBmZXJ0aWxpc2VyKS5cbiAgICAgIFlvdSBoYXZlIGFkZGVkIGFuICR7Y29kZSgnZXhjcmV0YU1hbmFnZW1lbnQnKX0gUHJhY3RpY2UgdG8gdGhpcyAke3BhdGhzWzBdLmxhYmVsfSBidXQgdGhlcmUgaXMgbm8gZXhjcmV0YSBJbnB1dC5cbiAgICAgIFRvIHJlcHJlc2VudCBleGNyZXRhIG1hbmFnZW1lbnQsIHVzZSBhICR7cGF0aHNbMF0ubGFiZWx9IHdpdGggZXhjcmV0YSBhcyBhbiBJbnB1dCBhbmQgJHtjb2RlKFxuICAgICAgICAnZXhjcmV0YU1hbmFnZW1lbnQnXG4gICAgICApfSBhcyBhIFByYWN0aWNlLmA7XG4gIH0sXG4gICdvbmx5IDEgcHJpbWFyeSBwcm9kdWN0IGFsbG93ZWQnOiAoKSA9PiAnVGhlcmUgY2FuIG9ubHkgYmUgb25lIHByaW1hcnkgcHJvZHVjdCBpbiBlYWNoIEN5Y2xlLicsXG4gICdpcyBub3QgYWxsb3dlZCBpbiBjb21iaW5hdGlvbiB3aXRoIG5vVGlsbGFnZSc6ICgpID0+XG4gICAgYFRoaXMgb3BlcmF0aW9uIGludm9sdmVzIHRpbGxhZ2UsIHlldCB5b3UgaGF2ZSBzcGVjaWZpZWQgdGhlIFByYWN0aWNlICR7dGVybUxpbmsobm9UaWxsYWdlKX0uXG4gICAgRWl0aGVyIGNoYW5nZSB0aGlzIG9wZXJhdGlvbiBvciB0aGUgUHJhY3RpY2UuYCxcbiAgJ3Nob3VsZCBjb250YWluIGEgdGlsbGFnZSBwcmFjdGljZSc6ICgpID0+XG4gICAgYFdlIHJlY29tbWVuZCBzcGVjaWZ5aW5nIHRoZSB0eXBlIG9mIHRpbGxhZ2UgdXNlZCBmb3IgdGhpcyBDeWNsZS5cbiAgICBQbGVhc2Ugc2VlIHRoZSAke2dsb3NzYXJ5VHlwZUxpbmsoVGVybVRlcm1UeXBlLnRpbGxhZ2UpfSBnbG9zc2FyeS5gLFxuICAnbXVzdCBzZXQgdmFsdWUgZm9yIGV2ZXJ5IHRpbGxhZ2UgcHJhY3RpY2UnOiAoKSA9PlxuICAgIGBFaXRoZXIgc3BlY2lmeSBhIHNpbmdsZSAke2dsb3NzYXJ5VHlwZUxpbmsoVGVybVRlcm1UeXBlLnRpbGxhZ2UpfSBwcmFjdGljZSBvciBhZGQgYSB2YWx1ZSB0byBhbGwgcHJhY3RpY2VzLmAsXG4gICdzdW0gbm90IGVxdWFsIHRvIDEwMCUgZm9yIHRpbGxhZ2UgcHJhY3RpY2VzJzogKCkgPT5cbiAgICBgVGhlIHN1bSBvZiAke2dsb3NzYXJ5VHlwZUxpbmsoVGVybVRlcm1UeXBlLnRpbGxhZ2UpfSBwcmFjdGljZXMgbXVzdCBlcXVhbCAxMDAlLmAsXG4gICdjYW4gb25seSBoYXZlIDEgdGlsbGFnZSBwcmFjdGljZSB3aXRob3V0IGEgdmFsdWUnOiAoeyBwYXJhbXMgfSkgPT5cbiAgICBgSXQgaXMgbm90IHBvc3NpYmxlIGZvciBhIEN5Y2xlIHRvIGhhdmUgdGhlIGZvbGxvd2luZyB0aWxsYWdlIFByYWN0aWNlczpcbiAgICAkeyhwYXJhbXM/LmN1cnJlbnQgPz8gW10pLm1hcCgoeyBuYW1lIH0pID0+IG5hbWUpLmpvaW4oJyBhbmQgJyl9IGF0IHRoZSBzYW1lIHRpbWUuXG4gICAgSWYgbXVsdGlwbGUgdGlsbGFnZSBwcmFjdGljZXMgZGlkIG9jY3VyLCBwbGVhc2Ugc3BlY2lmeSB0aGUgcGVyY2VudGFnZSBvZiBhcmVhIHRoZXkgb2NjdXJyZWQgb24uYCxcbiAgJ2Nhbm5vdCB1c2Ugbm8gdGlsbGFnZSBpZiBkZXB0aCBvciBudW1iZXIgb2YgdGlsbGFnZXMgaXMgbm90IDAnOiAoKSA9PlxuICAgIGBUaGlzIFByYWN0aWNlIGNhbm5vdCBoYXZlIGEgdmFsdWUgb2YgJHtjb2RlKDEwMCl9IGlmIHRoZSBUaWxsYWdlIGRlcHRoIGlzIGhpZ2hlciB0aGFuICR7Y29kZShcbiAgICAgIDBcbiAgICApfSBvciB0aGUgTnVtYmVyIG9mIHRpbGxhZ2VzIGlzIGhpZ2hlciB0aGFuICR7Y29kZSgwKX0uIFBsZWFzZSByZXNvbHZlIHRoaXMgY29uZmxpY3QuYCxcbiAgJ2Nhbm5vdCB1c2UgZnVsbCB0aWxsYWdlIGlmIGRlcHRoIG9yIG51bWJlciBvZiB0aWxsYWdlcyBpcyAwJzogKCkgPT5cbiAgICBgVGhpcyBQcmFjdGljZSBjYW5ub3QgaGF2ZSBhIHZhbHVlIG9mICR7Y29kZSgxMDApfSBpZiB0aGUgVGlsbGFnZSBkZXB0aCBpcyBlcXVhbCB0byAke2NvZGUoXG4gICAgICAwXG4gICAgKX0gb3IgdGhlIE51bWJlciBvZiB0aWxsYWdlcyBpcyBlcXVhbCB0byAke2NvZGUoMCl9LiBQbGVhc2UgcmVzb2x2ZSB0aGlzIGNvbmZsaWN0LmAsXG4gICdtdXN0IHVzZSBubyB0aWxsYWdlIHdoZW4gbnVtYmVyIG9mIHRpbGxhZ2VzIGlzIDAnOiAoKSA9PlxuICAgIGBZb3UgY2Fubm90IHVzZSBhIHRpbGxhZ2UgdGVybSBvdGhlciB0aGFuIE5vIHRpbGxhZ2Ugd2l0aCBhIHZhbHVlIG9mICR7Y29kZShcbiAgICAgIDEwMFxuICAgICl9IGlmIHRoZSBOdW1iZXIgb2YgdGlsbGFnZXMgaGFzIGJlZW4gc2V0IHRvICR7Y29kZSgwKX0uIFBsZWFzZSByZXNvbHZlIHRoaXMgY29uZmxpY3QuYCxcbiAgJ2NhbiBub3QgYmUgbGlua2VkIHRvIHRoZSBzYW1lIEN5Y2xlJzogKCkgPT4gJ1lvdSBjYW4gbm90IGxpbmsgYW4gSW5wdXQgdG8gdGhlIEltcGFjdCBBc3Nlc3NtZW50IG9mIHRoZSBzYW1lIEN5Y2xlLicsXG4gIC8vIGRlcHJlY2F0ZWQsIHJlbW92ZSB3aGVuIG1lc3NhZ2UgaXMgbm90IGJlaW5nIHVzZWQgYW55bW9yZVxuICAnbXVzdCBiZSAwIGZvciBwcm9kdWN0IHZhbHVlIDAnOiAoeyBkYXRhUGF0aCwgcGFyYW1zIH0sIGVycm9yQ291bnQpID0+XG4gICAgYElmIHRoZSBhbW91bnQgcHJvZHVjZWQgaXMgemVybywgdGhlICR7Y29kZShkYXRhUGF0aD8uc3BsaXQoJy4nKS5wb3AoKSl9IG9mICR7XG4gICAgICBlcnJvckNvdW50ID09PSAxID8gY29kZShwYXJhbXM/LnRlcm0ubmFtZSkgOiAndGhhdCBwcm9kdWN0J1xuICAgIH0gbXVzdCBhbHNvIGJlIHplcm8uYCxcbiAgJ2Vjb25vbWljVmFsdWVTaGFyZSBtdXN0IGJlIDAgZm9yIHByb2R1Y3QgdmFsdWUgMCc6ICh7IHBhcmFtcyB9LCBlcnJvckNvdW50KSA9PlxuICAgIGBJZiB0aGUgYW1vdW50IHByb2R1Y2VkIGlzIHplcm8sIHRoZSBlY29ub21pY1ZhbHVlU2hhcmUgb2YgJHtcbiAgICAgIGVycm9yQ291bnQgPT09IDEgPyBjb2RlKHBhcmFtcz8udGVybS5uYW1lKSA6ICd0aGF0IHByb2R1Y3QnXG4gICAgfSBtdXN0IGFsc28gYmUgemVyby5gLFxuICAncmV2ZW51ZSBtdXN0IGJlIDAgZm9yIHByb2R1Y3QgdmFsdWUgMCc6ICh7IHBhcmFtcyB9LCBlcnJvckNvdW50KSA9PlxuICAgIGBJZiB0aGUgYW1vdW50IHByb2R1Y2VkIGlzIHplcm8sIHRoZSByZXZlbnVlIG9mICR7XG4gICAgICBlcnJvckNvdW50ID09PSAxID8gY29kZShwYXJhbXM/LnRlcm0ubmFtZSkgOiAndGhhdCBwcm9kdWN0J1xuICAgIH0gbXVzdCBhbHNvIGJlIHplcm8uYCxcbiAgJ3Nob3VsZCBhZGQgYSBzb3VyY2UnOiAoeyBwYXJhbXMgfSkgPT5cbiAgICBgV2UgcmVjb21tZW5kIGFkZGluZyBhIFNvdXJjZSB0byBhbGwgZGF0YSBpdGVtcy5cbiAgICBUaGlzIGNhbiBiZSBkb25lIGJ5IGFkZGluZyB0aGUgJHtjb2RlKHBhcmFtcz8uY3VycmVudCl9IGZpZWxkLlxuICAgIFNvdXJjZXMgY2FuIGFsc28gYmUgc3BlY2lmaWVkIGZvciBlYWNoIGRhdGEgaXRlbSAoaS5lLiwgZWFjaCBJbnB1dCwgRW1pc3Npb24sIFByb2R1Y3QsIFByYWN0aWNlLCBNZWFzdXJlbWVudCwgb3IgSW5mcmFzdHJ1Y3R1cmUpLmAsXG4gICdjb3ZlciBjcm9wIGN5Y2xlIGNvbnRhaW5zIG5vbiBjb3ZlciBjcm9wIHByb2R1Y3QnOiAoKSA9PlxuICAgIGBZb3UgaGF2ZSBzcGVjaWZpZWQgdGhhdCB0aGlzIGNyb3AgaXMgYSBjb3ZlciBjcm9wIHVzaW5nIGEgUHJhY3RpY2UuXG4gICAgQSBjb3ZlciBjcm9wIGlzIGRlZmluZWQgYXMgXCJhIGNyb3Agd2hpY2ggaXMgbGVmdCBpbiB0aGUgZmllbGQgd2l0aG91dCBhbnkgZnJhY3Rpb24gaGFydmVzdGVkIGJ5IHRoZSBlbmQgb2YgdGhlIEN5Y2xlXCIuXG4gICAgVGhlIFByb2R1Y3RzIG9mIHRoaXMgQ3ljbGUgYXJlIGluY29tcGF0aWJsZSB3aXRoIHRoaXMgY3JvcCBiZWluZyBhIGNvdmVyIGNyb3AuXG4gICAgUGxlYXNlIGNoZWNrIHRoZSBQcm9kdWN0cyBvciB0aGUgUHJhY3RpY2VzLmAsXG4gICdzaG91bGQgYmUgaW5jbHVkZWQgaW4gdGhlIGN5Y2xlIHByb2R1Y3RzJzogKHsgcGFyYW1zIH0sIGVycm9yQ291bnQpID0+XG4gICAgYCR7XG4gICAgICBlcnJvckNvdW50ID09PSAxXG4gICAgICAgID8gYFRoZSBQcm9kdWN0ICR7Y29kZShwYXJhbXMucHJvZHVjdC5uYW1lKX0gY2Fubm90IGJlIGZvdW5kIGluIHRoZSBDeWNsZSB3aXRoIGlkICR7Y29kZShwYXJhbXMubm9kZS5pZCl9YFxuICAgICAgICA6ICdUaGUgUHJvZHVjdCBpbiB0aGUgSW1wYWN0IEFzc2Vzc21lbnQgY2Fubm90IGJlIGZvdW5kIGluIHRoZSBsaW5rZWQgQ3ljbGUnXG4gICAgfS5cbiAgICBUaGlzIGNvdWxkIGJlIHNpbXBseSBiZWNhdXNlIHRoZSBwcm9kdWN0IGRvZXMgbm90IGV4aXN0IGluIHRoZSBDeWNsZTogaW4gdGhpcyBjYXNlLCBhZGQgaXQgdG8gdGhlIEN5Y2xlIG9yIHJlbW92ZSB0aGUgSW1wYWN0IEFzc2Vzc21lbnQuXG4gICAgSXQgY291bGQgYWxzbyBiZSBiZWNhdXNlIHlvdSBoYXZlIG11bHRpcGxlIFByb2R1Y3RzIGluIHRoZSBDeWNsZSB1c2luZyB0aGUgc2FtZSBUZXJtLCBidXQgaGF2aW5nIGRpZmZlcmVudCBQcm9wZXJ0aWVzIG9yIGRpZmZlcmVudCBmaWVsZHM6XG4gICAgaW4gdGhpcyBjYXNlLCBlbnN1cmUgYWxsIG9mIHRoZSBQcm9wZXJ0aWVzIGFuZCBmaWVsZHMgd2hpY2ggbWFrZSB0aGUgUHJvZHVjdCB1bmlxdWUgYXJlIGNvcGllZCBpbnRvIHRoZSBJbXBhY3QgQXNzZXNzbWVudC5gLFxuICAnbXVsdGlwbGUgSW1wYWN0QXNzZXNzbWVudCBhcmUgYXNzb2NpYXRlZCB3aXRoIHRoZSBzYW1lIFByb2R1Y3Qgb2YgdGhlIHNhbWUgQ3ljbGUnOiAoKSA9PlxuICAgIGBPbmx5IG9uZSBJbXBhY3QgQXNzZXNzbWVudCBjYW4gYmUgcmVsYXRlZCB0byB0aGlzIFByb2R1Y3QuXG4gICAgUGxlYXNlIG1ha2Ugc3VyZSB0aGUgcHJvZHVjdCBpcyBjb3JyZWN0IG9yIHRoZSBjeWNsZS5pZCB5b3UgYXJlIHJlZmVycmluZyB0byBpcyBjb3JyZWN0LmAsXG4gICdtdWx0aXBsZSBJbXBhY3RBc3Nlc3NtZW50IGFyZSBhc3NvY2lhdGVkIHdpdGggdGhpcyBQcm9kdWN0JzogKCkgPT5cbiAgICBgT25seSBvbmUgSW1wYWN0IEFzc2Vzc21lbnQgY2FuIGJlIHJlbGF0ZWQgdG8gdGhpcyBQcm9kdWN0LlxuICAgIFBsZWFzZSBtYWtlIHN1cmUgdGhlIHByb2R1Y3Qgb2YgdGhlIHJlbGF0ZWQgSW1wYWN0QXNzZXNzbWVudHMgYXJlIGNvcnJlY3Qgb3IgdGhlICR7Y29kZSgnY3ljbGUuaWQnKX0gaXMgY29ycmVjdC5gLFxuICAnbm8gSW1wYWN0QXNzZXNzbWVudCBhcmUgYXNzb2NpYXRlZCB3aXRoIHRoaXMgUHJvZHVjdCc6ICgpID0+XG4gICAgYEluIGNhc2VzIHdoZXJlIEltcGFjdCBBc3Nlc3NtZW50IGRhdGEgYXJlIGJlaW5nIHVwbG9hZGVkLCB0aGUgbnVtYmVyIG9mIEltcGFjdCBBc3Nlc3NtZW50cyBtdXN0IG1hdGNoIHRoZSBudW1iZXIgb2YgUHJvZHVjdHMuXG4gICAgVGhpcyBlbnN1cmVzIHRoZSBDeWNsZSBkYXRhIG1hdGNoZXMgdGhlIEltcGFjdCBBc3Nlc3NtZW50IGRhdGEuXG4gICAgVG8gZml4IHRoaXMsIGFkZCBvbmUgSW1wYWN0IEFzc2Vzc21lbnQgZm9yIGV2ZXJ5IFByb2R1Y3QgaW4gdGhlIEN5Y2xlLCBmb2xsb3dpbmcgYXQgbGVhc3QgdGhlIG1pbmltdW0gcmVxdWlyZWQgZmllbGRzIGZvciBJbXBhY3QgQXNzZXNzbWVudHMuYCxcbiAgJ211c3QgYmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIGxhbmQgb2NjdXBhdGlvbic6ICgpID0+XG4gICAgYExhbmQgdHJhbnNmb3JtYXRpb24gc2hvdWxkIGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byBsYW5kIG9jY3VwYXRpb25cbiAgICAobGFuZCB0cmFuc2Zvcm1hdGlvbiBpcyB0aGUgYW1vdW50IG9mIGxhbmQgY29udmVydGVkIGJldHdlZW4gc29tZSBkYXRlIGluIHRoZSBwYXN0IGFuZCB0aGUgY3VycmVudCB5ZWFyLFxuICAgIGRpdmlkZWQgYnkgYW4gYW1vcnRpemF0aW9uIHBlcmlvZCwgc28gaXQgc2hvdWxkIGFsd2F5cyBiZSBsZXNzIHRoYW4gbGFuZCBvY2N1cGF0aW9uIGJ5IGRlZmluaXRpb24pLmAsXG4gICdzaG91bGQgYmUgbGlua2VkIHRvIGFuIGVtaXNzaW9uIGluIHRoZSBDeWNsZSc6ICh7IHBhcmFtcyB9LCBlcnJvckNvdW50KSA9PlxuICAgIGAke1xuICAgICAgZXJyb3JDb3VudCA9PT0gMSA/IGAke2NvZGUocGFyYW1zPy50ZXJtLm5hbWUpfSBleGlzdHNgIDogJ1NvbWUgRW1pc3Npb25zIGV4aXN0J1xuICAgIH0gaW4gYm90aCB0aGUgQ3ljbGUgYW5kIHRoZSBUcmFuc2Zvcm1hdGlvbiBidXQgJHtlcnJvckNvdW50ID09PSAxID8gJ2l0IGlzJyA6ICd0aGV5IGFyZSd9IG5vdCBsaW5rZWQgdXNpbmcgJHtjb2RlKFxuICAgICAgJ2N5Y2xlLmVtaXNzaW9ucy5YLnRyYW5zZm9ybWF0aW9uLnRlcm0nXG4gICAgKX0uIFRoaXMgbWF5IGJlIGFuIGVycm9yLmAsXG4gICdzaG91bGQgYWRkIGFuIGFuaW1hbCBwcm9kdWN0aW9uIHN5c3RlbSc6ICgpID0+XG4gICAgYEZvciBhbmltYWwgcHJvZHVjdGlvbiBjeWNsZXMsIHdlIHJlY29tbWVuZCBzcGVjaWZ5aW5nIHRoZSBhbmltYWwgcHJvZHVjdGlvbiAke2dsb3NzYXJ5VHlwZUxpbmsoXG4gICAgICBUZXJtVGVybVR5cGUuc3lzdGVtXG4gICAgKX0gZS5nLiwgJHtjb2RlKCdDb25maW5lZCBwYXN0dXJlIHN5c3RlbScpfSBvciAke2NvZGUoJ0ZlZWRsb3Qgc3lzdGVtJyl9LCBhcyBhIFByYWN0aWNlLlxuICAgIFRoaXMgaXMgcGFydGljdWxhcmx5IGltcG9ydGFudCBmb3IgcnVtaW5hbnRzLCBhcyB0aGUgc3lzdGVtIGluZmx1ZW5jZXMgYW5pbWFscycgYWN0aXZpdHkgbGV2ZWwgYW5kIGlzIHVzZWQgaW4gdGhlIGVzdGltYXRpb24gb2YgZ3Jhc3MgaW50YWtlLlxuICAgIEl0IGFsc28gZW5zdXJlcyBhIG1vcmUgYWNjdXJhdGUgZ2FwLWZpbGxpbmcgb2YgYmVlZiBjYXR0bGUgZXhjcmV0YS5cbiAgICBZb3UgY2FuIGZpbmQgYSBsaXN0IG9mIHN5c3RlbXMgaW4gdGhlICR7Z2xvc3NhcnlUeXBlTGluayhUZXJtVGVybVR5cGUuc3lzdGVtLCAnR2xvc3NhcnknKX0uYCxcbiAgJ211c3QgYmUgc2V0IHRvIGZhbHNlIHdoZW4gc3BlY2lmeWluZyBmdWVsIHVzZSc6ICh7IHBhcmFtcyB9KSA9PlxuICAgIGBJZiBmdWVsIGZvciBtYWNoaW5lcnkgKCR7cGFyYW1zPy5hbGxvd2VkVmFsdWVzLm1hcChjb2RlKS5qb2luKCcsICcpfSkgaXMgdXNlZCBkdXJpbmcgYSBDeWNsZSxcbiAgICBidXQgdGhlcmUgaXMgbm8gZGF0YSBvbiB0aGUgYW1vdW50IG9mICR7Z2xvc3NhcnlUeXBlTGluayhUZXJtVGVybVR5cGUubWF0ZXJpYWwpfSB1c2VkIGZvciBhZ3JpY3VsdHVyYWwgZXF1aXBtZW50LFxuICAgIHRoZW4gJHtjb2RlKCdjb21wbGV0ZW5lc3MubWF0ZXJpYWwnKX0gbXVzdCBiZSAke2NvZGUoJ2ZhbHNlJyl9LlxuICAgIEhlcmUsIHdlIG1lYW4gdGhlIHF1YW50aXR5IG9mIHBoeXNpY2FsIG1hdGVyaWFsIHVzZWQgdG8gY29uc3RydWN0IGFncmljdWx0dXJhbCBtYWNoaW5lcnksXG4gICAgd2hpY2ggaXMgdGhlbiBkZXByZWNpYXRlZCBvdmVyIGVhY2ggQ3ljbGUuYCxcbiAgJ211c3QgYmUgYmVsb3cgb3IgZXF1YWwgdG8gMSBmb3IgdW5pdCBpbiBoYSc6ICgpID0+XG4gICAgYFRoZSBtYXhpbXVtIHZhbHVlIGZvciBhIHByb2R1Y3Qgd2l0aCB1bml0cyAke2NvZGUoJ2hhJyl9IG9uIGEgQ3ljbGUgd2l0aCBhICR7c2NoZW1hTGluayhcbiAgICAgICdDeWNsZSNmdW5jdGlvbmFsVW5pdCcsXG4gICAgICAnZnVuY3Rpb25hbCB1bml0J1xuICAgICl9IG9mICR7Y29kZSgnMSBoYScpfSBpcyAke2NvZGUoJzEnKX0uXG4gICAgSWYgeW91IGFyZSB0cnlpbmcgdG8gYWRkIGEgcHJvZHVjdCB3aXRoIHRoZSB1bml0cyAke2NvZGUoJ2tnJyl9LCB1c2UgYSBkaWZmZXJlbnQgdGVybS5gLFxuICBcInBhc3R1cmVHcmFzcyBrZXkgdGVybVR5cGUgbXVzdCBiZSAnbGFuZENvdmVyJ1wiOiAoeyBwYXJhbXMgfSkgPT5cbiAgICBgVGhlIFRlcm0gJHtjb2RlKHBhcmFtcz8udGVybS5uYW1lKX0gY2FuJ3QgYmUgdXNlZCBhcyBhIGtleSBmb3IgJHt0ZXJtTGluayhwYXN0dXJlR3Jhc3MpfS5cbiAgICBQbGVhc2UsIHVzZSBhIHRlcm0gd2l0aCB0ZXJtVHlwZSAke2dsb3NzYXJ5VHlwZUxpbmsoVGVybVRlcm1UeXBlLmxhbmRDb3Zlcil9IGluc3RlYWQuXG4gICAgVGhpcyB3aWxsIGhlbHAgdXMgZ2FwLWZpbGwgdGhlIGFtb3VudCBvZiBncmFzcyBjb25zdW1lZCBieSB0aGUgaGVyZC5gLFxuICAndGhlIHN1bSBvZiBhbGwgcGFzdHVyZUdyYXNzIHZhbHVlcyBtdXN0IGJlIDEwMCc6ICh7IHBhcmFtcyB9KSA9PlxuICAgIGBUaGUgc3VtIG9mIGFsbCAke3Rlcm1MaW5rKHBhc3R1cmVHcmFzcyl9IHZhbHVlcyBtdXN0IGJlIGVxdWFsIHRvICR7cGFyYW1zLmV4cGVjdGVkfSUuYCxcbiAgJ2lzIG91dHNpZGUgY29uZmlkZW5jZSBpbnRlcnZhbCc6IChlcnJvciwgZXJyb3JDb3VudCwgYWxsRXJyb3JzKSA9PlxuICAgIGAke3VuaXF1ZShcbiAgICAgIChhbGxFcnJvcnMubGVuZ3RoID8gYWxsRXJyb3JzIDogW2Vycm9yXSkuZmxhdE1hcCgoeyBkYXRhUGF0aCwgcGFyYW1zIH0pID0+XG4gICAgICAgIHBhcmFtcz8ub3V0bGllcnM/Lm1hcChcbiAgICAgICAgICB2YWx1ZSA9PlxuICAgICAgICAgICAgYFRoZSAke2RhdGFQYXRoLmluY2x1ZGVzKCdwcm9kdWN0JykgPyAncHJvZHVjdCcgOiAnaW5wdXQnfSB2YWx1ZSAke1xuICAgICAgICAgICAgICBlcnJvckNvdW50ID09PSAxID8gYCR7Y29kZSh2YWx1ZSl9IGAgOiAnJ1xuICAgICAgICAgICAgfWlzICR7dmFsdWUgPiBwYXJhbXM/Lm1pbiA/ICdhYm92ZScgOiAnYmVsb3cnfSAke1xuICAgICAgICAgICAgICBwYXJhbXM/LnRocmVzaG9sZCA/IGAke2NvZGUoYCR7KHBhcmFtcy50aHJlc2hvbGQgKyAoMSAtIHBhcmFtcy50aHJlc2hvbGQpIC8gMikgKiAxMDB9JWApfSBvZmAgOiAnJ1xuICAgICAgICAgICAgfSBhbGwgJHtwYXJhbXM/Lmdyb3VwID8gY29kZShwYXJhbXMuZ3JvdXApIDogY29kZShwYXJhbXM/LnRlcm0/Lm5hbWUpfSBkYXRhIGluICR7Y29kZShcbiAgICAgICAgICAgICAgcGFyYW1zPy5jb3VudHJ5Lm5hbWVcbiAgICAgICAgICAgICl9IG9uIHRoZSBIRVNUSUEgcGxhdGZvcm0uYFxuICAgICAgICApXG4gICAgICApXG4gICAgKS5qb2luKCc8L2JyPicpfVxuICAgIDwvYnI+XG4gICAgUGxlYXNlIGRvdWJsZS1jaGVjayB0aGVzZSB2YWx1ZXMgYmVmb3JlIHN1Ym1pdHRpbmcuYCxcbiAgJ3Nob3VsZCBiZSBlcXVhbCB0byBib3VuZGFyeSc6ICh7IHBhcmFtcyB9KSA9PlxuICAgIGBUaGUgY2FsY3VsYXRlZCAke3NjaGVtYUxpbmsoJ1NpdGUjYXJlYScsICdhcmVhJyl9IGZyb20gJHtjb2RlKCdib3VuZGFyeScpfSBpcyAke2NvZGUocGFyYW1zPy5leHBlY3RlZCl9IGhhLlxuICAgIFRoaXMgbWF5IGJlIGFuIGVycm9yIGlmIHRoZSBib3VuZGFyeSByZXByZXNlbnRzIHRoZSBhcmVhIHVuZGVyIGN1bHRpdmF0aW9uLmAsXG4gICdtdXN0IHNwZWNpZnkgdGhlIGZhdGUgb2YgY3JvcFJlc2lkdWUnOiAoeyBwYXJhbXMgfSkgPT5cbiAgICBgRm9yIHNpdGVzIG9mIHR5cGUgJHtwYXJhbXMuc2l0ZVR5cGUubWFwKGNvZGUpLmpvaW4oJyBvciAnKX0sXG4gICAgaWYgZGF0YSBjb21wbGV0ZW5lc3MgaXMgbWFya2VkICR7Y29kZShcbiAgICAgIHRydWVcbiAgICApfSBmb3IgY3JvcCByZXNpZHVlLCB0aGUgZmF0ZXMgYW5kIHF1YW50aXRpZXMgb2YgdGhlIHJlc2lkdWUgbXVzdCBiZSBzcGVjaWZpZWQuXG4gICAgPGJyLz5cbiAgICBUaGUgcXVhbnRpdHkgbXVzdCBpbmNsdWRlIGJvdGggYWJvdmUgYW5kIGJlbG93IGdyb3VuZCBjcm9wIHJlc2lkdWUsIHdoZXJlIHRoZSBzdW0gb2YgYWJvdmUgZ3JvdW5kIGNyb3AgcmVzaWR1ZSBhbmQgYmVsb3cgZ3JvdW5kIGNyb3AgcmVzaWR1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiB6ZXJvLlxuICAgIFRoaXMgY2FuIGJlIGFkZGVkIHVzaW5nIHRoZSB0ZXJtczpcbiAgICA8dWwgY2xhc3M9XCJpcy1wbC0zIGlzLWxpc3Qtc3R5bGUtZGlzYyBpcy1ub3dyYXBcIj5cbiAgICA8bGkgY2xhc3M9XCJpcy1wcmUtd3JhcFwiPiR7dGVybUxpbmsoeyBpZDogJ2JlbG93R3JvdW5kQ3JvcFJlc2lkdWUnLCBuYW1lOiAnQmVsb3cgZ3JvdW5kIGNyb3AgcmVzaWR1ZScgfSl9OyBhbmQ8L2xpPlxuICAgIDxsaSBjbGFzcz1cImlzLXByZS13cmFwXCI+JHt0ZXJtTGluayh7XG4gICAgICBpZDogJ2Fib3ZlR3JvdW5kQ3JvcFJlc2lkdWVUb3RhbCcsXG4gICAgICBuYW1lOiAnQWJvdmUgZ3JvdW5kIGNyb3AgcmVzaWR1ZSB0b3RhbCdcbiAgICB9KX0uPC9saT5cbiAgICA8L3VsPlxuICAgIDxici8+XG4gICAgVGhlIGZhdGUgY2FuIGJlIGFkZGVkIHVzaW5nOlxuICAgIDx1bCBjbGFzcz1cImlzLXBsLTMgaXMtbGlzdC1zdHlsZS1kaXNjIGlzLW5vd3JhcFwiPlxuICAgIDxsaSBjbGFzcz1cImlzLXByZS13cmFwXCI+dGhlICR7Z2xvc3NhcnlUeXBlTGluayhUZXJtVGVybVR5cGUuY3JvcFJlc2lkdWVNYW5hZ2VtZW50KX0gcHJhY3RpY2VzOyBhbmQ8L2xpPlxuICAgIDxsaSBjbGFzcz1cImlzLXByZS13cmFwXCI+dGhlICR7Z2xvc3NhcnlUeXBlTGluayhUZXJtVGVybVR5cGUuY3JvcFJlc2lkdWUpfSBwcm9kdWN0czwvbGk+XG4gICAgPC91bD5cbiAgICBgLFxuICAnc2hvdWxkIHNwZWNpZnkgdGhlIGZhdGUgb2YgY3JvcFJlc2lkdWUnOiAoKSA9PlxuICAgIGBZb3UgaGF2ZSBub3Qgc3BlY2lmaWVkIHRoZSBmYXRlIG9mIHRoZSBjcm9wIHJlc2lkdWUuXG4gICAgQWRkaW5nIHRoaXMgaW5mb3JtYXRpb24gd2lsbCBpbXByb3ZlIGVtaXNzaW9ucyBhbmQgc29pbCBjYXJib24gc3RvY2sgY2FsY3VsYXRpb25zLlxuICAgIFRoZSBmYXRlIGNhbiBiZSBhZGRlZCB1c2luZzpcbiAgICA8dWwgY2xhc3M9XCJpcy1wbC0zIGlzLWxpc3Qtc3R5bGUtZGlzYyBpcy1ub3dyYXBcIj5cbiAgICA8bGkgY2xhc3M9XCJpcy1wcmUtd3JhcFwiPnRoZSAke2dsb3NzYXJ5VHlwZUxpbmsoVGVybVRlcm1UeXBlLmNyb3BSZXNpZHVlTWFuYWdlbWVudCl9IHByYWN0aWNlczsgYW5kL29yPC9saT5cbiAgICA8bGkgY2xhc3M9XCJpcy1wcmUtd3JhcFwiPnRoZSAke2dsb3NzYXJ5VHlwZUxpbmsoVGVybVRlcm1UeXBlLmNyb3BSZXNpZHVlKX0gcHJvZHVjdHM7PC9saT5cbiAgICA8L3VsPlxuICAgIFJlbWVtYmVyIHRvIHNldCAke2NvZGUoJ2NvbXBsZXRlbmVzcy5jcm9wUmVzaWR1ZScpfSB0byAke2NvZGUoXG4gICAgICB0cnVlXG4gICAgKX0gaWYgYm90aCB0aGUgYWJvdmUgYW5kIGJlbG93IGdyb3VuZCBjcm9wIHJlc2lkdWUgcXVhbnRpdGllcyBhbmQgZmF0ZXMgYXJlIHNwZWNpZmllZC5gLFxuICAnc2hvdWxkIGhhdmUgdGhlIHNhbWUgcHJpdmFjeSBhcyB0aGUgcmVsYXRlZCBzb3VyY2UnOiAoeyBwYXJhbXMgfSkgPT5cbiAgICBgVG8gbGluayB0byBhICR7KHBhcmFtcz8uZGVmYXVsdFNvdXJjZSB8fCBwYXJhbXM/LnNvdXJjZSk/LmRhdGFQcml2YXRlID8gJ3ByaXZhdGUnIDogJ3B1YmxpYyd9IFNvdXJjZSxcbiAgICB0aGlzIE5vZGUgbmVlZHMgdG8gYmUgJHsocGFyYW1zPy5kZWZhdWx0U291cmNlIHx8IHBhcmFtcz8uc291cmNlKT8uZGF0YVByaXZhdGUgPyAncHJpdmF0ZScgOiAncHVibGljJ30gYXMgd2VsbC5cbiAgICBQbGVhc2Ugc2V0ICR7Y29kZSgnZGF0YVByaXZhdGUnKX09JHtjb2RlKGAkeyhwYXJhbXM/LmRlZmF1bHRTb3VyY2UgfHwgcGFyYW1zPy5zb3VyY2UpPy5kYXRhUHJpdmF0ZX1gKX0uYCxcbiAgJ3Nob3VsZCBub3QgdXNlIG5vdCByZWxldmFudCBtb2RlbCc6ICgpID0+XG4gICAgYEFsbCBlbWlzc2lvbnMgc2hvdWxkIGdlbmVyYWxseSBoYXZlIGEgbWV0aG9kIHRpZXIsIHdoaWNoIHN0YXRlcyBob3cgdGhlIGRhdGEgd2VyZSBtb2RlbGxlZCBvciBob3cgdGhlIGRhdGEgd2VyZSBjb2xsZWN0ZWQuXG4gICAgUGxlYXNlIHNlZSB0aGUgJHtzY2hlbWFMaW5rKFxuICAgICAgJ0VtaXNzaW9uI21ldGhvZFRpZXInLFxuICAgICAgJ3NjaGVtYSdcbiAgICApfSBmb3IgdGhlIG9wdGlvbnMgYXZhaWxhYmxlIGFuZCBkZWZpbml0aW9ucyBvZiB0aGUgb3B0aW9ucy5gLFxuICAnc2hvdWxkIG5vdCB1c2Ugbm90IHJlbGV2YW50IG1ldGhvZFRpZXInOiAoKSA9PlxuICAgIGBBbGwgZW1pc3Npb25zIHNob3VsZCBnZW5lcmFsbHkgaGF2ZSBhIG1ldGhvZCB0aWVyLCB3aGljaCBzdGF0ZXMgaG93IHRoZSBkYXRhIHdlcmUgbW9kZWxsZWQgb3IgaG93IHRoZSBkYXRhIHdlcmUgY29sbGVjdGVkLlxuICAgIFBsZWFzZSBzZWUgdGhlICR7c2NoZW1hTGluayhcbiAgICAgICdFbWlzc2lvbiNtZXRob2RUaWVyJyxcbiAgICAgICdzY2hlbWEnXG4gICAgKX0gZm9yIHRoZSBvcHRpb25zIGF2YWlsYWJsZSBhbmQgZGVmaW5pdGlvbnMgb2YgdGhlIG9wdGlvbnMuYCxcbiAgJ2luZ3JlZGllbnRzIHNob3VsZCBiZSBjb21wbGV0ZSc6ICh7IHBhcmFtcyB9KSA9PlxuICAgIGBEYXRhIGNvbXBsZXRlbmVzcyBmb3IgJHtjb2RlKCdpbmdyZWRpZW50Jyl9IG11c3QgYmUgdHJ1ZSBmb3Igc2l0ZSBvZiB0eXBlICR7cGFyYW1zLnNpdGVUeXBlfWAsXG4gICdtdXN0IGhhdmUgaW5wdXRzIHRvIHJlcHJlc2VudCBpbmdyZWRpZW50cyc6ICgpID0+XG4gICAgYERhdGEgY29tcGxldGVuZXNzIGZvciAke2NvZGUoJ2luZ3JlZGllbnQnKX0gY2Fubm90IGJlIHRydWUgaWYgdGhlcmUgYXJlIG5vIElucHV0cy5gLFxuICAnbXVzdCBoYXZlIGlucHV0cyByZXByZXNlbnRpbmcgdGhlIGZvcmFnZSB3aGVuIHNldCB0byB0cnVlJzogKHsgcGFyYW1zIH0pID0+XG4gICAgYFRoaXMgQ3ljbGUgaW5jbHVkZXMgYW5pbWFscyAke3BhcmFtcz8uc2l0ZVR5cGUgPyBgb24gJHtwYXJhbXMuc2l0ZVR5cGV9YCA6ICcnfSBhbmQgY29tcGxldGVuZXNzIGlzIHNldCB0byAke2NvZGUoXG4gICAgICB0cnVlXG4gICAgKX0gZm9yICR7Y29kZSgnZnJlc2hGb3JhZ2UnKX0uXG4gICAgSG93ZXZlciwgdGhlcmUgYXJlIG5vIElucHV0cyByZXByZXNlbnRpbmcgdGhlIGZvcmFnZSBpbnRha2UgYnkgYW5pbWFscyBpbiB0aGUgQ3ljbGUgKElucHV0cyB3aXRoICR7Y29kZShcbiAgICAgICd0ZXJtVHlwZSdcbiAgICApfSAke2NvZGUoJ2ZyZXNoRm9yYWdlJyl9XCIgYW5kIGEgJHtjb2RlKCd2YWx1ZScpfSkuXG4gICAgRWl0aGVyLCBzZXQgY29tcGxldGVuZXNzIHRvICR7Y29kZShmYWxzZSl9IGZvciAke2NvZGUoXG4gICAgICAnZnJlc2hGb3JhZ2UnXG4gICAgKX0sIG1ha2Ugc3VyZSBhbGwgZnJlc2ggZm9yYWdlIElucHV0cyBoYXZlIGEgJHtjb2RlKFxuICAgICAgJ3ZhbHVlJ1xuICAgICl9LCBvciBhZGQgb25lIG9yIG1vcmUgSW5wdXRzIHJlcHJlc2VudGluZyB0aGUgZm9yYWdlIGludGFrZS5gLFxuICAnbXVzdCBzcGVjaWZ5IGlzIGl0IGFuIGFuaW1hbCBmZWVkJzogKCkgPT5cbiAgICBgVGhpcyBDeWNsZSBpcyBhbiBhbmltYWwgcHJvZHVjdGlvbiBDeWNsZSBhbmQgdGhpcyBJbnB1dCBjb3VsZCBiZSBhbiBhbmltYWwgZmVlZCBvciBjb3VsZCBiZSBmb3IgYW5vdGhlciB1c2UuXG4gICAgUGxlYXNlIHNwZWNpZnkgdGhlICR7c2NoZW1hTGluaygnSW5wdXQjaXNBbmltYWxGZWVkJywgJ2lzQW5pbWFsRmVlZCcpfSBmaWVsZCBvbiB0aGlzIElucHV0LlxuICAgIEtub3dpbmcgdGhlIGZhdGUgaXMgZXNzZW50aWFsIHRvIGRpc3Rpbmd1aXNoIElucHV0cyBiZXR3ZWVuIHRob3NlIHdoaWNoIGFyZSBmZWQgdG8gYW5pbWFscyBhbmQgdGhvc2Ugd2hpY2ggYXJlIHVzZWQgZm9yIG90aGVyIHB1cnBvc2VzLmAsXG4gICdzaG91bGQgc3BlY2lmeSBhIHRyZWF0bWVudCB3aGVuIGV4cGVyaW1lbnREZXNpZ24gaXMgc3BlY2lmaWVkJzogKCkgPT5cbiAgICBgWW91IGhhdmUgc3BlY2lmaWVkIHRoYXQgdGhpcyBTb3VyY2UgdXNlcyBhbiBleHBlcmltZW50YWwgZGVzaWduLCBidXQgaGF2ZSBub3Qgc3BlY2lmaWVkIHRoZSB0cmVhdG1lbnQgZm9yIHRoaXMgQ3ljbGUuXG4gICAgQWRkaW5nIHRoZSB0cmVhdG1lbnQgcHJvdmlkZXMgaW1wb3J0YW50IG1ldGEtZGF0YSBhbmQgd2lsbCBlbmFibGUgZ3JlYXRlciByZS11c2Ugb2YgdGhlc2UgZGF0YS5cbiAgICBBZGQgdGhlICR7c2NoZW1hTGluaygnQ3ljbGUjdHJlYXRtZW50JywgJ3RyZWF0bWVudCcpfSBmaWVsZCB0byB0aGUgQ3ljbGUuXG4gICAgTm90ZSB0aGF0IHRoZSBmaWVsZCAke3NjaGVtYUxpbmsoXG4gICAgICAnQ3ljbGUjY29tbWVyY2lhbFByYWN0aWNlVHJlYXRtZW50JyxcbiAgICAgICdjb21tZXJjaWFsUHJhY3RpY2VUcmVhdG1lbnQnXG4gICAgKX0gYmVjb21lcyByZXF1aXJlZCBpZiB0cmVhdG1lbnQgaXMgc3BlY2lmaWVkLmAsXG4gICdzaG91bGQgbm90IHNwZWNpZnkgYm90aCBsaXZlQW5pbWFsIGFuZCBhbmltYWxQcm9kdWN0JzogKCkgPT5cbiAgICBgWW91IGhhdmUgYWRkZWQgYm90aCBhICR7Z2xvc3NhcnlUeXBlTGluayhUZXJtVGVybVR5cGUubGl2ZUFuaW1hbCl9IGFuZCAke2dsb3NzYXJ5VHlwZUxpbmsoXG4gICAgICBUZXJtVGVybVR5cGUuYW5pbWFsUHJvZHVjdFxuICAgICl9IHRlcm0gYXMgUHJvZHVjdHMuXG4gICAgSWYgdGhlc2UgdGVybXMgcmVmZXIgdG8gdGhlIHNhbWUgYW5pbWFscywgdGhpcyB3aWxsIGxlYWQgdG8gZG91YmxlIGNvdW50aW5nOlxuICAgIGluc3RlYWQgdXNlIGEgUHJvcGVydHkgb24gdGhlICR7Z2xvc3NhcnlUeXBlTGluayhcbiAgICAgIFRlcm1UZXJtVHlwZS5saXZlQW5pbWFsXG4gICAgKX0gdGVybSB0byBkZWZpbmUgdGhlIHF1YW50aXR5IG9mIGxpdmV3ZWlnaHQgcGVyIGhlYWQsIGNhcmNhc3Mgd2VpZ2h0IHBlciBoZWFkLCBldGMuYCxcbiAgJ3Nob3VsZCBhZGQgYW4gZXhjcmV0YSBwcm9kdWN0JzogKCkgPT5cbiAgICBgQW5pbWFsIHByb2R1Y3Rpb24gQ3ljbGVzIGNyZWF0ZSBleGNyZXRhLlxuICAgIFRoZXJlIHNob3VsZCBiZSBhdCBsZWFzdCBvbmUgJHtjb2RlKFRlcm1UZXJtVHlwZS5leGNyZXRhKX0gcHJvZHVjdCBpbiB0aGlzIEN5Y2xlLlxuICAgIFBsZWFzZSBhZGQgYW4gJHtjb2RlKFRlcm1UZXJtVHlwZS5leGNyZXRhKX0gUHJvZHVjdCB0byB0aGUgQ3ljbGUuXG4gICAgWW91IGRvIG5vdCBuZWVkIHRvIHNldCBhICR7Y29kZSgndmFsdWUnKX0gZm9yIHRoZSBQcm9kdWN0LCBidXQgYWRkaW5nIGEgJHtjb2RlKCd2YWx1ZScpfSBpcyBkZXNpcmFibGUuYCxcbiAgJ2lzIG5vdCBhbiBhbGxvd2VkIGV4Y3JldGEgcHJvZHVjdCc6ICh7IHBhcmFtcyB9KSA9PlxuICAgIGBUaGlzIGV4Y3JldGEgcHJvZHVjdCBpcyBub3QgYWxsb3dlZCBmb3IgdGhlIGFuaW1hbCBwcm9kdWN0cyBhZGRlZCB0byB0aGlzIEN5Y2xlLlxuICAgIEluc3RlYWQsIHBsZWFzZSBhZGQgb25lIG9mIHRoZSBmb2xsb3dpbmcgZXhjcmV0YTogJHtwYXJhbXMuZXhwZWN0ZWQ/Lm1hcChjb2RlKS5qb2luKCcsICcpfWAsXG4gICd2YWx1ZSBzaG91bGQgc3VtIHRvIDEwMCBhY3Jvc3MgYWxsIHZhbHVlcyc6ICh7IHBhcmFtcyB9KSA9PlxuICAgIGBUaGUgdG90YWwgdmFsdWUgb2YgdGhlIGZvbGxvd2luZyB0ZXJtcyBzaG91bGQgc3VtIHVwIHRvIGEgdmFsdWUgb2YgMTAwJTpcbiAgICA8dWwgY2xhc3M9XCJpcy1wbC0zIGlzLWxpc3Qtc3R5bGUtZGlzYyBpcy1ub3dyYXBcIj5cbiAgICAgICR7KHBhcmFtcy50ZXJtSWRzIHx8IFtdKS5tYXAoaWQgPT4gYDxsaSBjbGFzcz1cImlzLXByZS13cmFwXCI+JHtjb2RlKGlkKX08L2xpPmApLmpvaW4oJycpfVxuICAgIDwvdWw+XG4gICAgTWFrZSBzdXJlIHRvIGFkZCBhbnkgbWlzc2luZyB0ZXJtIGlmIG5lZWRlZCBhbmQvb3IgYWRqdXN0IHRoZSB2YWx1ZXMgb2YgdGhlIGV4aXN0aW5nIHRlcm1zIHlvdSBhbHJlYWR5IHJlY29yZGVkLmAsXG4gICd2YWx1ZSBzaG91bGQgc3VtIHRvIG1heGltdW0gMTAwIGFjcm9zcyBhbGwgdmFsdWVzJzogKHsgcGFyYW1zIH0pID0+XG4gICAgYFRoZSB0b3RhbCB2YWx1ZSBvZiB0aGUgZm9sbG93aW5nIHRlcm1zIHNob3VsZCBzdW0gdXAgdG8gYSBtYXhpbXVtIHZhbHVlIG9mIDEwMCU6XG4gICAgPHVsIGNsYXNzPVwiaXMtcGwtMyBpcy1saXN0LXN0eWxlLWRpc2MgaXMtbm93cmFwXCI+XG4gICAgICAkeyhwYXJhbXMudGVybUlkcyB8fCBbXSkubWFwKGlkID0+IGA8bGkgY2xhc3M9XCJpcy1wcmUtd3JhcFwiPiR7Y29kZShpZCl9PC9saT5gKS5qb2luKCcnKX1cbiAgICA8L3VsPlxuICAgIE1ha2Ugc3VyZSB0byBhZGQgYW55IG1pc3NpbmcgdGVybSBpZiBuZWVkZWQgYW5kL29yIGFkanVzdCB0aGUgdmFsdWVzIG9mIHRoZSBleGlzdGluZyB0ZXJtcyB5b3UgYWxyZWFkeSByZWNvcmRlZC5gLFxuICAncmljZSBwcm9kdWN0cyBub3QgYWxsb3dlZCBmb3IgdGhpcyB3YXRlciByZWdpbWUgcHJhY3RpY2UnOiAoeyBwYXJhbXMgfSkgPT5cbiAgICBgVGhpcyBwcmFjdGljZSBpcyBub3QgYWxsb3dlZCB3aXRoIHRoZSBwcm9kdWN0cyAke3BhcmFtcy5wcm9kdWN0cz8ubWFwKHAgPT4gY29kZShwLm5hbWUgfHwgcFsnQGlkJ10pKX0uXG4gICAgUmVjb3JkaW5nIHRoZSByaWdodCB3YXRlciByZWdpbWUgZm9yIHJpY2UgZW5zdXJlcyBtZXRoYW5lIGVtaXNzaW9ucyBmcm9tIGZsb29kZWQgZmllbGRzIGFyZSBjb3JyZWN0bHkgcmVjYWxjdWxhdGVkLlxuICAgIFRvIGZpeCB0aGlzIGVycm9yLCBlaXRoZXIgY2hhbmdlIHRoZSBwcmFjdGljZSBvciB0aGUgcHJvZHVjdHMuYCxcbiAgJ211c3Qgbm90IGJlIGVxdWFsIHRvIDEgaGEnOiAoeyBwYXJhbXMgfSkgPT5cbiAgICBgJHtjb2RlKEN5Y2xlRnVuY3Rpb25hbFVuaXRbJzEgaGEnXSl9IGNhbm5vdCBiZSB1c2VkIGFzICR7c2NoZW1hTGluayhcbiAgICAgICdDeWNsZSNmdW5jdGlvbmFsVW5pdCcsXG4gICAgICAnZnVuY3Rpb25hbFVuaXQnXG4gICAgKX0gZm9yIEN5Y2xlcyBsaW5rZWQgdG8gU2l0ZXMgd2l0aCAke3NjaGVtYUxpbmsoJ1NpdGUjc2l0ZVR5cGUnLCAnc2l0ZVR5cGUnKX0gPSAke2NvZGUocGFyYW1zPy5zaXRlVHlwZSl9LlxuICAgIEVpdGhlciBjaGFuZ2UgdGhlICR7c2NoZW1hTGluaygnQ3ljbGUjZnVuY3Rpb25hbFVuaXQnLCAnZnVuY3Rpb25hbFVuaXQnKX0gdG8gJHtjb2RlKFxuICAgICAgQ3ljbGVGdW5jdGlvbmFsVW5pdC5yZWxhdGl2ZVxuICAgICl9IG9yIGNoYW5nZSB0aGUgJHtzY2hlbWFMaW5rKCdTaXRlI3NpdGVUeXBlJywgJ3NpdGVUeXBlJyl9LmAsXG4gICdzaG91bGQgc3BlY2lmeSBhIHZhbHVlIHdoZW4gSEVTVElBIGhhcyBhIGRlZmF1bHQgb25lJzogKHsgcGFyYW1zIH0pID0+XG4gICAgYEFzIHlvdSBoYXZlIG5vdCBzcGVjaWZpZWQgYSAke2NvZGUoJ3ZhbHVlJyl9LCB3ZSB3aWxsIGFzc3VtZSB0aGUgdmFsdWUgaXMgJHtjb2RlKHBhcmFtcz8uZXhwZWN0ZWQpfS5cbiAgICBJZiB0aGlzIGlzIGluY29ycmVjdCwgcGVsYXNlIGFkZCBhIHZhbHVlLmAsXG4gICdzaG91bGQgY29udGFpbiBhdCBsZWFzdCBvbmUgbWFuYWdlbWVudCBub2RlJzogKHsgcGFyYW1zIH0pID0+XG4gICAgYCR7XG4gICAgICBwYXJhbXM/LnRlcm1UeXBlXG4gICAgICAgID8gYERvZXMgbm90IGNvbnRhaW4gaW5mb3JtYXRpb24gYWJvdXQgJHtjb2RlKHBhcmFtcy50ZXJtVHlwZSl9LlxuICAgICAgICBQbGVhc2UgY29uc2lkZXIgYWRkaW5nIGEgaGlzdG9yeSBvZiAke2NvZGUoXG4gICAgICAgICAgcGFyYW1zLnRlcm1UeXBlXG4gICAgICAgICl9IGZvciBhcyBtYW55IHllYXJzIGFzIHBvc3NpYmxlIGluIHRoZSBNYW5hZ2VtZW50IGJsYW5rIG5vZGVzLmBcbiAgICAgICAgOiBgVGhlcmUgaXMgbm8gTWFuYWdlbWVudCBub2RlIHByZXNlbnQgaW4gdGhpcyB1cGxvYWQuXG4gICAgICAgIFdlIHJlY29tbWVuZCBhZGRpbmcgdGhpcyB0byB0aGUgU2l0ZSwgaW5jbHVkaW5nIGluZm9ybWF0aW9uIGFib3V0IGN1cnJlbnQgYW5kIGhpc3RvcmljYWwgdGlsbGFnZS5cbiAgICAgICAgYFxuICAgIH1cbiAgICBXZSB1c2UgdGhpcyBpbmZvcm1hdGlvbiB0byBtb2RlbCBDTzxzdWI+Mjwvc3ViPiBlbWlzc2lvbnMgZnJvbSBzb2lsIG9yZ2FuaWMgY2FyYm9uIGNoYW5nZS5gLFxuICAnY2FuIG5vdCBiZSB1c2VkIG9uIHRoaXMgdGVybVR5cGUnOiAoeyBwYXJhbXMgfSkgPT5cbiAgICBgVGhpcyBQcm9wZXJ0eSBjYW4gb25seSBiZSB1c2VkIG9uIGJsYW5rIG5vZGVzIHdpdGggdGhlIGZvbGxvd2luZyAke2NvZGUoJ3Rlcm0udGVybVR5cGUnKX06ICR7cGFyYW1zLmV4cGVjdGVkXG4gICAgICAubWFwKGNvZGUpXG4gICAgICAuam9pbignLCAnKX0uYCxcbiAgJ25vdCBhIHZhbGlkIEdlb0pTT04nOiAoeyBwYXJhbXMgfSkgPT4gYFxuICAke1xuICAgIHBhcmFtcz8uaW52YWxpZENvb3JkaW5hdGVzID09PSAndHJ1ZSdcbiAgICAgID8gYEdlb0pTT04gZGF0YSBzaG91bGQgZm9sbG93IHRoZSBXR1M4NCBkYXR1bS5cbiAgV2UgaGF2ZSBmb3VuZCBjb29yZGluYXRlcyBvdXRzaWRlIG9mIHRoZSAtMTgwIHRvICsxODAgcmFuZ2Ugd2hpY2ggaXMgbm90IHBvc3NpYmxlIHVuZGVyIFdHUzg0LlxuICBQbGVhc2UgY2hlY2sgdGhlIGRhdHVtIG9yIGNoZWNrIGZvciBvdGhlciBwb3NzaWJsZSBlcnJvcnMuYFxuICAgICAgOiAnVGhpcyBHZW9KU09OIGFwcGVhcnMgdG8gYmUgaW52YWxpZC4nXG4gIH1cbiAgWW91IGNhbiB2YWxpZGF0ZSB5b3VyIEdlb0pTT04gdXNpbmcgYW4gb25saW5lIHRvb2wgbGlrZSA8YSBocmVmPVwiaHR0cHM6Ly9nZW9qc29uLmlvL1wiPmdlb2pzb24uaW88L2E+LlxuICBJZiB5b3UgdGhpbmsgdGhpcyBpcyBhIG1pc3Rha2UsIHBsZWFzZSByZXBvcnQgdGhlIGVycm9yICR7cmVwb3J0SXNzdWVMaW5rKFJlcG9zaXRvcnkuc2NoZW1hLCBUZW1wbGF0ZS5idWcpfS5gLFxuICAnc2hvdWxkIGFkZCB0aGUgdGVybSBzdG9ja2luZ0RlbnNpdHlQZXJtYW5lbnRQYXN0dXJlQXZlcmFnZSc6ICh7IHBhcmFtcyB9KSA9PlxuICAgIGBZb3UgZGlkIG5vdCBzcGVjaWZ5ICR7bm9kZUxpbmsoeyAnQHR5cGUnOiBOb2RlVHlwZS5UZXJtLCAnQGlkJzogcGFyYW1zLmV4cGVjdGVkIH0pfS5cbiAgICBBZGRpbmcgdGhpcyBQcmFjdGljZSBpcyBlc3NlbnRpYWwgZm9yIEN5Y2xlcyB3aXRoIHJlbGF0aXZlIGZ1bmN0aW9uYWwgdW5pdCB3aGljaCBoYXBwZW4gZW50aXJlbHkgb3IgcGFydGlhbGx5IG9uIHBlcm1hbmVudCBwYXN0dXJlLlxuICAgIFdpdGhvdXQgdGhpcyBpbmZvcm1hdGlvbiBIRVNUSUEgY2Fubm90IGNhbGN1bGF0ZSBhbmltYWwgcmVsYXRlZCBlbWlzc2lvbnMuYCxcbiAgJ3Nob3VsZCBzcGVjaWZ5IHRoZSBoZXJkIGNvbXBvc2l0aW9uJzogKCkgPT5cbiAgICBgV2UgcmVjb21tZW5kIGFkZGluZyBpbmZvcm1hdGlvbiBvbiB0aGUgaGVyZCBjb21wb3NpdGlvbiB1c2luZyB0aGUgQW5pbWFsIG5vZGUuXG4gICAgV2l0aG91dCB0aGlzLCB3ZSBjYW5ub3QgcmUtbW9kZWwgbWFueSBhbmltYWwgcmVsYXRlZCBJbnB1dHMsIFByb2R1Y3RzLCBhbmQgRW1pc3Npb25zLmAsXG4gICdzaG91bGQgc3BlY2lmeSB0aGUgcHJlZ25hbmN5IHJhdGUnOiAoeyBwYXJhbXMgfSkgPT5cbiAgICBgRm9yIGZlbWFsZSBtYW1tYWxzIGluIHRoZWlyIHJlcHJvZHVjdGl2ZSBhZ2UsIHdlIHJlY29tbWVuZCBhZGRpbmcgJHtub2RlTGluayh7XG4gICAgICAnQHR5cGUnOiBOb2RlVHlwZS5UZXJtLFxuICAgICAgJ0BpZCc6IHBhcmFtcy5leHBlY3RlZFxuICAgIH0pfSBhcyBhICR7c2NoZW1hTGluaygnQW5pbWFsI3Byb3BlcnRpZXMnLCAnUHJvcGVydHknKX0uXG4gICAgVGhpcyBpcyBwYXJ0aWN1bGFybHkgaW1wb3J0YW50IGZvciBydW1pbmFudHMsIGFzIHRoZSBwcmVnbmFuY3kgcmF0ZSBpbmZsdWVuY2VzIGFuaW1hbHMnIGVuZXJneSByZXF1aXJlbWVudHMgYW5kIGlzIHVzZWQgaW4gdGhlIGVzdGltYXRpb24gb2YgZ3Jhc3MgaW50YWtlLmAsXG4gICdzaG91bGQgc2V0IGJvdGggZGVwdGhVcHBlciBhbmQgZGVwdGhMb3dlcic6ICgpID0+IGBcbiAgICBXZSByZWNvbW1lbmQgc2V0dGluZyBib3RoICR7c2NoZW1hTGluaygnTWVhc3VyZW1lbnQjZGVwdGhVcHBlcicsICdkZXB0aFVwcGVyJyl9IGFuZCAke3NjaGVtYUxpbmsoXG4gICAgICAnTWVhc3VyZW1lbnQjZGVwdGhMb3dlcicsXG4gICAgICAnZGVwdGhMb3dlcidcbiAgICApfSBvbiB0aGlzIE1lYXN1cmVtZW50LmAsXG4gICdtdXN0IHNldCBib3RoIGRlcHRoVXBwZXIgYW5kIGRlcHRoTG93ZXInOiAoKSA9PiBgXG4gICAgVGhpcyBzb2lsIG1lYXN1cmVtZW50IGNhbiB2YXJ5IHN1YnN0YW50aWFsbHkgd2l0aCBkZXB0aC5cbiAgICBXZSByZXF1aXJlIHRoYXQgeW91IHNwZWNpZnkgYm90aCAke3NjaGVtYUxpbmsoJ01lYXN1cmVtZW50I2RlcHRoVXBwZXInLCAnZGVwdGhVcHBlcicpfSBhbmQgJHtzY2hlbWFMaW5rKFxuICAgICAgJ01lYXN1cmVtZW50I2RlcHRoTG93ZXInLFxuICAgICAgJ2RlcHRoTG93ZXInXG4gICAgKX0uXG4gICAgSWYgeW91IGRvIG5vdCBoYXZlIHRoZXNlIGRhdGEsIHBsZWFzZSBkZWxldGUgdGhlIE1lYXN1cmVtZW50LmAsXG4gICdtdWx0aXBsZSBjeWNsZXMgb24gdGhlIHNhbWUgc2l0ZSBjYW5ub3Qgb3ZlcmxhcCc6IChlcnJvciwgXywgYWxsRXJyb3JzKSA9PlxuICAgIGBDeWNsZXMgdGFraW5nIHBsYWNlIG9uIHRoZSBzYW1lIFNpdGUgY2Fubm90IG92ZXJsYXA6XG4gICAgPHVsIGNsYXNzPVwiaXMtcGwtMyBpcy1saXN0LXN0eWxlLWRpc2MgaXMtbm93cmFwXCI+JHsoYWxsRXJyb3JzLmxlbmd0aCA/IGFsbEVycm9ycyA6IFtlcnJvcl0pLm1hcChcbiAgICAgICh7IHBhcmFtcyB9KSA9PiBgPGxpIGNsYXNzPVwiaXMtcHJlLXdyYXBcIj4ke3BhcmFtcy5pZHM/Lm1hcChjb2RlKS5qb2luKCcsICcpfTwvbGk+YFxuICAgICl9LlxuICAgIDwvdWw+XG4gICAgUGxlYXNlIGNvbnNpZGVyIGFueSBvZiB0aGUgZm9sbG93aW5nIHN1Z2dlc3Rpb25zIHRvIHJlc29sdmUgdGhpcyBjb25mbGljdDpcbiAgICA8dWwgY2xhc3M9XCJpcy1wbC0zIGlzLWxpc3Qtc3R5bGUtZGlzYyBpcy1ub3dyYXBcIj5cbiAgICA8bGkgY2xhc3M9XCJpcy1wcmUtd3JhcFwiPllvdSBjYW4gYW1lbmQgdGhlIEN5Y2xlcycgJHtzY2hlbWFMaW5rKCdDeWNsZSNzdGFydERhdGUnLCAnc3RhcnREYXRlJyl9IGFuZCAke3NjaGVtYUxpbmsoXG4gICAgICAnQ3ljbGUjZW5kRGF0ZScsXG4gICAgICAnZW5kRGF0ZSdcbiAgICApfSB0byBlbnN1cmUgdGhhdCB0aGV5IGRvIG5vdCBvdmVybGFwIGFueW1vcmUuXG4gICAgPGxpIGNsYXNzPVwiaXMtcHJlLXdyYXBcIj5Zb3UgY2FuIGJyZWFrIGRvd24geW91ciBDeWNsZXMgaW50byBzaG9ydGVyIEN5Y2xlcyB0byBlbnN1cmUgdGhhdCB0aGV5IGRvIG5vdCBvdmVybGFwIGFueW1vcmUuXG4gICAgPGxpIGNsYXNzPVwiaXMtcHJlLXdyYXBcIj5Zb3UgY2FuIG1lcmdlIHRoZSBvdmVybGFwcGluZyBDeWNsZXMgaW50byBvbmUgb3ZlcmFsbCBDeWNsZSBpZiB0aGUgUHJvZHVjdHMgb2YgZWFjaCBDeWNsZSBhcmUgZ3Jvd24gYXQgdGhlIHNhbWUgdGltZSBvbiB0aGUgc2FtZSBTaXRlLlxuICAgIFRoaXMgaXMgcmVsZXZhbnQgaWYgaW50ZXJjcm9wcGluZyBpcyB1c2VkLCBmb3IgaW5zdGFuY2UuPC9saT5cbiAgICA8bGkgY2xhc3M9XCJpcy1wcmUtd3JhcFwiPllvdSBjYW4gY3JlYXRlIGEgZGlmZmVyZW50IFNpdGUgZm9yIGVhY2ggb3ZlcmxhcHBpbmcgQ3ljbGUuXG4gICAgVGhpcyBpcyBhcHByb3ByaWF0ZSBpZiBhIGZpZWxkIGlzIGRpdmlkZWQgaW50byBkaWZmZXJlbnQgcGxvdHMsIGVhY2ggZGVkaWNhdGVkIHRvIGdyb3dpbmcgYSBkaWZmZXJlbnQgUHJvZHVjdDsgZWFjaCBwbG90IHdvdWxkIGJlIGNvbnNpZGVyZWQgYSB1bmlxdWUgU2l0ZSBvbiB0aGUgcGxhdGZvcm0uPC9saT5cbiAgICA8L3VsPlxuICBgLFxuICAnY3ljbGVzIGxpbmtlZCB0b2dldGhlciBjYW5ub3QgYmUgYWRkZWQgdG8gdGhlIHNhbWUgc2l0ZSc6ICh7IHBhcmFtcyB9KSA9PlxuICAgIGBDeWNsZXMgbGlua2VkIHRvZ2V0aGVyIGJ5IGFuIEltcGFjdCBBc3Nlc3NtZW50IGNhbm5vdCB0YWtlIHBsYWNlIG9uIHRoZSBzYW1lIFNpdGUuXG4gICAgUGxlYXNlIGNyZWF0ZSBkaWZmZXJlbnQgU2l0ZXMgZm9yIHRoZSBmb2xsb3dpbmcgQ3ljbGVzOiAke3BhcmFtcy5pZHM/Lm1hcChjb2RlKS5qb2luKCcsICcpfS5gLFxuICAnaXMgbm90IGFuIGFsbG93ZWQgYW5pbWFsUHJvZHVjdCc6ICgpID0+XG4gICAgYFRoZSAke2dsb3NzYXJ5VHlwZUxpbmsoVGVybVRlcm1UeXBlLmxpdmVBbmltYWwpfSBwcm9kdWNpbmcgdGhpcyBQcm9kdWN0IGlzIG5vdCByZWNvcmRlZCBpbiB0aGUgJHtzY2hlbWFMaW5rKFxuICAgICAgJ0N5Y2xlI2FuaW1hbHMnLFxuICAgICAgJ0FuaW1hbCdcbiAgICApfSBibGFuayBub2Rlcy4gRWl0aGVyIGNoYW5nZSB0aGlzIHByb2R1Y3Qgb3IgYWRkIHRoZSBtaXNzaW5nICR7Z2xvc3NhcnlUeXBlTGluayhcbiAgICAgIFRlcm1UZXJtVHlwZS5saXZlQW5pbWFsXG4gICAgKX0gdG8gdGhlICR7c2NoZW1hTGluaygnQ3ljbGUjYW5pbWFscycsICdBbmltYWwnKX0gYmxhbmsgbm9kZXMuYCxcbiAgJ2R1cmF0aW9uIG11c3QgYmUgaW4gc3BlY2lmaWVkIGludGVydmFsJzogKHsgcGFyYW1zOiB7IHRlcm0gfSA9IHt9IH0pID0+XG4gICAgWydzaG9ydEZhbGxvdycsICdzaG9ydEJhcmVGYWxsb3cnXS5pbmNsdWRlcyh0ZXJtWydAaWQnXSlcbiAgICAgID8gYCR7Y29kZSgnU2hvcnQgZmFsbG93Jyl9IGlzIGRlZmluZWQgYXMgbGFuZCBsZWZ0IGZhbGxvdyBmb3IgbGVzcyB0aGFuIDM2NSBkYXlzLlxuICAgICAgUGxlYXNlIGNoZWNrIHRoZSAke3NjaGVtYUxpbmsoJ01hbmFnZW1lbnQjc3RhcnREYXRlJywgJ3N0YXJ0RGF0ZScpfSBhbmQgJHtzY2hlbWFMaW5rKFxuICAgICAgICAnTWFuYWdlbWVudCNlbmREYXRlJyxcbiAgICAgICAgJ2VuZERhdGUnXG4gICAgICApfSBvbiB0aGlzIHRlcm0gYW5kIGVuc3VyZSB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIHRoZSB0d28gZGF0ZXMgaXMgbGVzcyB0aGFuIDM2NSBkYXlzLlxuICAgICAgSWYgaXQgaXMgbW9yZSB0aGFuIDM2NSBkYXlzLCBjb25zaWRlciB1c2luZyB0aGUgdGVybXMgJHtjb2RlKCdMb25nIGZhbGxvdycpfSBvciAke2NvZGUoJ1NldCBhc2lkZScpfSBpbnN0ZWFkLmBcbiAgICAgIDogWydsb25nRmFsbG93JywgJ2xvbmdCYXJlRmFsbG93J10uaW5jbHVkZXModGVybVsnQGlkJ10pXG4gICAgICAgID8gYCR7Y29kZSgnTG9uZyBmYWxsb3cnKX0gaXMgZGVmaW5lZCBhcyBsYW5kIGxlZnQgZmFsbG93IGZvciBtb3JlIHRoYW4gYSB5ZWFyIGJ1dCBsZXNzIHRoYW4gZml2ZSB5ZWFycy5cbiAgICAgICAgUGxlYXNlIGNoZWNrIHRoZSAke3NjaGVtYUxpbmsoJ01hbmFnZW1lbnQjc3RhcnREYXRlJywgJ3N0YXJ0RGF0ZScpfSBhbmQgJHtzY2hlbWFMaW5rKFxuICAgICAgICAgICdNYW5hZ2VtZW50I2VuZERhdGUnLFxuICAgICAgICAgICdlbmREYXRlJ1xuICAgICAgICApfSBvbiB0aGlzIHRlcm0gYW5kIGVuc3VyZSB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIHRoZSB0d28gZGF0ZXMgZmFsbHMgYmV0d2VlbiAzNjUgYW5kIDE4MjYgZGF5cy5cbiAgICAgICAgSWYgaXQgaXMgbGVzcyB0aGFuIDM2NSBkYXlzLCBjb25zaWRlciB1c2luZyB0aGUgdGVybSAke2NvZGUoJ1Nob3J0IGZhbGxvdycpfSBpbnN0ZWFkLlxuICAgICAgICBJZiBpdCBpcyBtb3JlIHRoYW4gMTgyNiBkYXlzLCBjb25zaWRlciB1c2luZyB0aGUgdGVybSAke2NvZGUoJ1NldCBhc2lkZScpfSBpbnN0ZWFkLmBcbiAgICAgICAgOiBgJHtjb2RlKFxuICAgICAgICAgICAgJ1NldCBhc2lkZSdcbiAgICAgICAgICApfSBpcyBkZWZpbmVkIGFzIHRoZSB0ZW1wb3Jhcnkgc2V0IGFzaWRlIG9mIGxhbmQgZm9yIG1vcmUgdGhhbiBmaXZlIHllYXJzIGJ1dCBsZXNzIHRoYW4gdHdlbnR5IHllYXJzLlxuICAgICAgICBQbGVhc2UgY2hlY2sgdGhlICR7c2NoZW1hTGluaygnTWFuYWdlbWVudCNzdGFydERhdGUnLCAnc3RhcnREYXRlJyl9IGFuZCAke3NjaGVtYUxpbmsoXG4gICAgICAgICAgJ01hbmFnZW1lbnQjZW5kRGF0ZScsXG4gICAgICAgICAgJ2VuZERhdGUnXG4gICAgICAgICl9IG9uIHRoaXMgdGVybSBhbmQgZW5zdXJlIHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gdGhlIHR3byBkYXRlcyBmYWxscyBiZXR3ZWVuIDE4MjYgYW5kIDczMDUgZGF5cy5cbiAgICAgICAgSWYgaXQgaXMgbGVzcyB0aGFuIDE4MjYgZGF5cywgY29uc2lkZXIgdXNpbmcgdGhlIHRlcm1zICR7Y29kZSgnU2hvcnQgZmFsbG93Jyl9b3IgJHtjb2RlKCdMb25nIGZhbGxvdycpfSBpbnN0ZWFkLlxuICAgICAgICBJZiBpdCBpcyBtb3JlIHRoYW4gNzMwNSBkYXlzLCBjb25zaWRlciB1c2luZyB0aGUgdGVybSAke2NvZGUoJ090aGVyIG5hdHVyYWwgdmVnZXRhdGlvbicpfSBpbnN0ZWFkLmAsXG4gICdtdXN0IG5vdCBhZGQgdGhlIGZlZWQgaW5wdXQgdG8gdGhlIEN5Y2xlIGFzIHdlbGwnOiAoeyBwYXJhbXM6IHsgdGVybSB9ID0ge30gfSkgPT5cbiAgICBgWW91IGhhdmUgYWRkZWQgdGhlIGFuaW1hbCBmZWVkIElucHV0ICR7Y29kZSh0ZXJtWydAaWQnXSl9IHRvIHRoZSBDeWNsZSBpbnB1dHMgYXMgd2VsbCwgd2hpY2ggbWlnaHQgbGVhZCB0byBkb3VibGUgY291bnRpbmcuXG4gICAgSWYgeW91IGRvIG5vdCBrbm93IHRoZSBhbW91bnQgb2YgJHtjb2RlKHRlcm1bJ0BpZCddKX0gZ2l2ZW4gdG8gZWFjaCBBbmltYWwsIHBsZWFzZSBhZGQgdGhlIElucHV0IHRvIHRoZSBDeWNsZSBvbmx5LmAsXG4gICdtdXN0IHNwZWNpZnkgd2F0ZXIgdHlwZSBmb3IgcG9uZHMnOiAoKSA9PlxuICAgIGBGb3IgU2l0ZXMgd2l0aCAke3NjaGVtYUxpbmsoJ1NpdGUjc2l0ZVR5cGUnLCAnc2l0ZVR5cGUnKX0gPSAke2NvZGUoJ3BvbmQnKX0sIHlvdSBtdXN0IHNwZWNpZnkgdGhlICR7bm9kZUxpbmsoe1xuICAgICAgJ0B0eXBlJzogTm9kZVR5cGUuVGVybSxcbiAgICAgICdAaWQnOiAnd2F0ZXJTYWxpbml0eScsXG4gICAgICBuYW1lOiAnV2F0ZXIgc2FsaW5pdHknXG4gICAgfSl9IG9yIHRoZSB3YXRlciB0eXBlICgke25vZGVMaW5rKHtcbiAgICAgICdAdHlwZSc6IE5vZGVUeXBlLlRlcm0sXG4gICAgICAnQGlkJzogJ3NhbGluZVdhdGVyJyxcbiAgICAgIG5hbWU6ICdTYWxpbmUgd2F0ZXInXG4gICAgfSl9IC8gJHtub2RlTGluayh7ICdAdHlwZSc6IE5vZGVUeXBlLlRlcm0sICdAaWQnOiAnZnJlc2hXYXRlcicsIG5hbWU6ICdGcmVzaCB3YXRlcicgfSl9IC8gJHtub2RlTGluayh7XG4gICAgICAnQHR5cGUnOiBOb2RlVHlwZS5UZXJtLFxuICAgICAgJ0BpZCc6ICdicmFja2lzaFdhdGVyJyxcbiAgICAgIG5hbWU6ICdCcmFja2lzaCB3YXRlcidcbiAgICB9KX0pLlxuICAgIFRoaXMgd2lsbCBhbGxvdyB1cyB0byBjYWxjdWxhdGUgbWV0aGFuZSBlbWlzc2lvbnMgZnJvbSBjb25zdHJ1Y3RlZCB3YXRlcmJvZGllcy5gLFxuICAnaW52YWxpZCB3YXRlciBzYWxpbml0eSc6ICh7IHBhcmFtcyB9KSA9PlxuICAgIGBUaGUgd2F0ZXIgdHlwZSAke3BhcmFtcz8uY3VycmVudH0gaXMgbm90IGNvbnNpc3RlbnQgd2l0aCB0aGUgV2F0ZXIgc2FsaW5pdHkgeW91IHNwZWNpZmllZC5cbiAgICBNYWtlIHN1cmUgdGhlIFdhdGVyIHNhbGluaXR5IHZhbHVlIGlzIGNvcnJlY3QgYW5kIGVpdGhlciBmaXggaXQgb3IgdXBkYXRlIHRoZSB3YXRlciB0eXBlIGFjY29yZGluZ2x5LmAsXG4gICdtdXN0IGFkZCBzdWJzdHJhdGUgaW5wdXRzJzogKCkgPT5cbiAgICAnVGhlIHN1YnN0cmF0ZSBtdXN0IGJlIHNwZWNpZmllZCB3aGVuIGEgc3Vic3RyYXRlLWJhc2VkIHByb3RlY3RlZCBjcm9wcGluZyBzeXN0ZW0gaGFzIGJlZW4gYWRkZWQuJyxcbiAgJ3Nob3VsZCBub3QgYmUgZXF1YWwgdG8gY3ljbGVEdXJhdGlvbiBmb3IgY3JvcCc6ICh7IHBhcmFtcyB9KSA9PlxuICAgIGBGb3IgY3JvcCBwcm9kdWN0aW9uIEN5Y2xlcywgc2l0ZUR1cmF0aW9uIG11c3QgcmVwcmVzZW50IHRoZSBwZXJpb2QgZnJvbSBoYXJ2ZXN0IG9mIHRoZSBwcmV2aW91cyBjcm9wIHRvIGhhcnZlc3Qgb2YgdGhlIGN1cnJlbnQgY3JvcC5cbiAgICBIZXJlLCB5b3UgaGF2ZSBzdGF0ZWQgdGhhdCAke3NjaGVtYUxpbmsoJ0N5Y2xlI2N5Y2xlRHVyYXRpb24nLCAnY3ljbGVEdXJhdGlvbicpfSByZXByZXNlbnRzIHRoZSBwZXJpb2QgZnJvbVxuICAgICR7Y29kZShwYXJhbXM/LmN1cnJlbnQpfSB0byBoYXJ2ZXN0IG9mIHRoZSBjdXJyZW50IGNyb3AsIGFuZCBzZXQgJHtzY2hlbWFMaW5rKFxuICAgICAgJ0N5Y2xlI2N5Y2xlRHVyYXRpb24nLFxuICAgICAgJ2N5Y2xlRHVyYXRpb24nXG4gICAgKX0gYXMgZXF1YWwgdG8gJHtzY2hlbWFMaW5rKCdDeWNsZSNzaXRlRHVyYXRpb24nLCAnc2l0ZUR1cmF0aW9uJyl9LlxuICAgIFBsZWFzZSBjaGVjayB0aGUgYWZmZWN0ZWQgZmllbGRzIGZvciBlcnJvcnMuYCxcbiAgJ211c3QgYmUgbGlua2VkIHZpYSBhIGRlZmF1bHRTb3VyY2UnOiAoKSA9PlxuICAgIGBZb3UgY2FuIG9ubHkgaGF2ZSBhICR7Y29kZSgnc291cmNlLmlkJyl9IGlmIHRoaXMgaXMgdXNlZCBhcyBhICR7Y29kZSgnZGVmYXVsdFNvdXJjZScpfSBmb3IgZWl0aGVyIGEgQ3ljbGUgb3IgU2l0ZS5cbiAgICBJZiB0aGVyZSBpcyBzdWZmaWNpZW50IGRhdGEgZnJvbSB0aGlzIHNvdXJjZSwgdGhlbiBjcmVhdGUgYSBuZXcgQ3ljbGUgb3IgU2l0ZSB3aXRoICR7Y29kZSgndGhlIHNvdXJjZS5pZCcpfSBhcyB0aGUgJHtjb2RlKCdkZWZhdWx0U291cmNlJyl9LlxuICAgIE90aGVyd2lzZSwgcmVtb3ZlIHRoaXMgU291cmNlIGFuZCwgb24gdGhlIHJlbGV2YW50IGRhdGEsIGNoYW5nZSB0aGUgbWV0aG9kIGNsYXNzaWZpY2F0aW9uLCBlLmcuIHRvIGluY29uc2lzdGVudCBleHRlcm5hbCBzb3VyY2VzLCB3aXRoIGEgZGVzY3JpcHRpb24gb2YgdGhlIHNvdXJjZSB1c2VkLmAsXG4gICdpcyByZXF1aXJlZCB3aGVuIHVzaW5nIG90aGVyIG1vZGVsJzogKCkgPT5cbiAgICBgSWYgeW91IGFyZSB1c2luZyB0aGUgdGVybSAke2NvZGUoJ090aGVyIG1vZGVsJyl9LCBwbGVhc2UgcHJvdmlkZSBhIHNob3J0IGRlc2NyaXB0aW9uIG9mIHRoZSBtb2RlbCBpbiAke2NvZGUoXG4gICAgICAnbWV0aG9kTW9kZWxEZXNjcmlwdGlvbidcbiAgICApfSwgaW5jbHVkaW5nIGFueSByZWZlcmVuY2VzIHRvIG1vZGVsIGRvY3VtZW50YXRpb24uYCxcbiAgJ3Nob3VsZCBhZGQgdGhlIHRlcm0gcHJvZHVjdGl2ZVBoYXNlUGVybWFuZW50Q3JvcHMnOiAoKSA9PlxuICAgIGBZb3UgbmVlZCB0byBzcGVjaWZ5IHdoZXRoZXIgdGhlIHBlcm1hbmVudCBjcm9wIGlzIGluIGl0cyBwcm9kdWN0aXZlIHBoYXNlIHdoZW4gdGhlIHZhbHVlIG9mIHRoZSBwcmltYXJ5IHByb2R1Y3QgaXMgJHtjb2RlKCcwJyl9LlxuICAgIFRvIGRvIHRoaXMsIGFkZCB0aGUgJHt0ZXJtTGluayh7XG4gICAgICBpZDogJ3Byb2R1Y3RpdmVQaGFzZVBlcm1hbmVudENyb3BzJyxcbiAgICAgIG5hbWU6ICdQcm9kdWN0aXZlIHBoYXNlIChwZXJtYW5lbnQgY3JvcHMpJ1xuICAgIH0pfSBwcmFjdGljZSBhbmQgc2V0IGEgdmFsdWUgb2YgJHtjb2RlKCd0cnVlJyl9IG9yICR7Y29kZSgnZmFsc2UnKX0uYCxcbiAgJ211c3QgaGF2ZSBhIHNpbmdsZSBpbnB1dHMgb2YgdGVybVR5cGUgd2FzdGUnOiAoKSA9PlxuICAgIGBDYW4gb25seSBiZSBsaW5rZWQgdG8gYSBzaW5nbGUgJHtnbG9zc2FyeVR5cGVMaW5rKFRlcm1UZXJtVHlwZS53YXN0ZSl9IGlucHV0LmAsXG4gICdtdXN0IGJlIGJlbG93IG1heGltdW0gY3ljbGVEdXJhdGlvbic6ICh7IHBhcmFtcyB9KSA9PlxuICAgIGBUaGUgbWF4aW11bSBkdXJhdGlvbiBmb3IgdGhpcyBjcm9wIHByb2R1Y3Rpb24gY3ljbGUgaXMgJHsocGFyYW1zIGFzIGFueSkubGltaXR9IGRheXMsXG4gICAgYnV0IHRoZSBjYWxjdWxhdGVkIGR1cmF0aW9uIGZyb20gdGhlIGVuZCBkYXRlIGFuZCBzdGFydCBkYXRlIHByb3ZpZGVkIGlzICR7cGFyYW1zLmN1cnJlbnR9LmAsXG4gICdzaG91bGQgYWRkIHRoZSB0ZXJtIHBhc3R1cmVHcmFzcyc6ICgpID0+XG4gICAgYEZvciBDeWNsZXMgd2l0aCAke2NvZGUoJ3NpdGVUeXBlPXBlcm1hbmVudCBwYXN0dXJlJyl9IHdlIHJlY29tbWVuZCBzcGVjaWZ5aW5nIHRoZSB0eXBlKHMpIG9mICR7Y29kZSgnUGFzdHVyZSBncmFzcycpfSBncm93bi5cbiAgICBUaGlzIGlzIHBhcnRpY3VsYXJseSBpbXBvcnRhbnQgZm9yIHJ1bWluYW50cyBhbmQgd2lsbCBhbGxvdyBmb3IgYSBtb3JlIGFjY3VyYXRlIGVzdGltYXRlIG9mIHRoZSBhbW91bnQgb2YgZ3Jhc3MgZ3JhemVkLmBcbn07XG5cbmNvbnN0IHJlcXVpcmVkUHJvcGVydHlFcnJvciA9IChtZXNzYWdlOiBzdHJpbmcsIGVycm9yPzogSVZhbGlkYXRpb25FcnJvcikgPT4ge1xuICBjb25zdCBmaWVsZCA9IG1lc3NhZ2Uuc3BsaXQoXCInXCIpWzFdLnJlcGxhY2UoXCInXCIsICcnKTtcbiAgY29uc3Qgbm9kZVR5cGUgPSBkYXRhUGF0aExhYmVsKGVycm9yPy5kYXRhUGF0aCk7XG4gIHJldHVybiBgWW91IGFyZSBtaXNzaW5nIHRoZSBmb2xsb3dpbmcgcmVxdWlyZWQgZmllbGQ6ICR7Y29kZShmaWVsZCl9LiAke1xuICAgIG5vZGVUeXBlICYmIG5vZGVUeXBlLnRvTG93ZXJDYXNlKCkgIT09ICdjb21wbGV0ZW5lc3MnXG4gICAgICA/IGBFaXRoZXI6IGFkZCAke2NvZGUoZmllbGQpfSwgb3IgaWYgeW91IGlmIHlvdSBkaWQgbm90IGludGVuZCB0byBhZGQgdGhpcyAke25vZGVUeXBlfSwgcGxlYXNlIHJlbW92ZSBhbGwgZmllbGRzIG9uIHRoaXMgJHtub2RlVHlwZX0uYFxuICAgICAgOiAnJ1xuICB9YC50cmltKCk7XG59O1xuXG5jb25zdCBwYXJzZURlZmF1bHRNZXNzYWdlID0gKG1lc3NhZ2U/OiBzdHJpbmcsIGVycm9yPzogSVZhbGlkYXRpb25FcnJvcikgPT5cbiAgYDxzcGFuIGNsYXNzPVwiaXMtY2FwaXRhbGl6ZWQtZmlyc3QtbGV0dGVyXCI+JHtcbiAgICBtZXNzYWdlPy5zdGFydHNXaXRoKCdzaG91bGQgaGF2ZSByZXF1aXJlZCBwcm9wZXJ0eScpID8gcmVxdWlyZWRQcm9wZXJ0eUVycm9yKG1lc3NhZ2UsIGVycm9yKSA6IG1lc3NhZ2VcbiAgfTwvc3Bhbj5gO1xuXG5leHBvcnQgY29uc3QgZm9ybWF0Q3VzdG9tRXJyb3JNZXNzYWdlID0gKFxuICBtZXNzYWdlPzogc3RyaW5nLFxuICBlcnJvcj86IElWYWxpZGF0aW9uRXJyb3IsXG4gIGFsbEVycm9yczogSVZhbGlkYXRpb25FcnJvcltdID0gW11cbikgPT4ge1xuICBjb25zdCBmb3JtYXR0ZWRNZXNzYWdlID0gY3VzdG9tRXJyb3JNZXNzYWdlPy5bbWVzc2FnZV1cbiAgICA/IGN1c3RvbUVycm9yTWVzc2FnZVttZXNzYWdlXShlcnJvciEsIGFsbEVycm9ycy5sZW5ndGggfHwgMSwgYWxsRXJyb3JzKVxuICAgIDogcGFyc2VEZWZhdWx0TWVzc2FnZShtZXNzYWdlLCBlcnJvcik7XG4gIHJldHVybiBmb3JtYXR0ZWRNZXNzYWdlID8gYDxwIGNsYXNzPVwiaXMtbm9ybWFsXCI+JHtmb3JtYXR0ZWRNZXNzYWdlfTwvcD5gIDogJyc7XG59O1xuXG5leHBvcnQgY29uc3QgZm9ybWF0RXJyb3IgPSAoZXJyb3I/OiBJVmFsaWRhdGlvbkVycm9yLCBhbGxFcnJvcnM6IElWYWxpZGF0aW9uRXJyb3JbXSA9IFtdKTogSVZhbGlkYXRpb25FcnJvciA9PlxuICBlcnJvclxuICAgID8ge1xuICAgICAgICBsZXZlbDogJ2Vycm9yJyxcbiAgICAgICAgLi4uZXJyb3IsXG4gICAgICAgIG1lc3NhZ2U6IGZvcm1hdEN1c3RvbUVycm9yTWVzc2FnZShlcnJvci5tZXNzYWdlLCBlcnJvciwgYWxsRXJyb3JzKVxuICAgICAgfVxuICAgIDogdW5kZWZpbmVkO1xuXG5leHBvcnQgY29uc3QgZXJyb3JIYXNFcnJvciA9IChlcnJvcj86IElWYWxpZGF0aW9uRXJyb3IpID0+IGVycm9yICYmIChlcnJvci5sZXZlbCA9PT0gJ2Vycm9yJyB8fCAhZXJyb3IubGV2ZWwpO1xuXG5leHBvcnQgY29uc3QgZXJyb3JIYXNXYXJuaW5nID0gKGVycm9yPzogSVZhbGlkYXRpb25FcnJvcikgPT4gZXJyb3IgJiYgZXJyb3IubGV2ZWwgPT09ICd3YXJuaW5nJztcblxuZXhwb3J0IGNvbnN0IGlzTWlzc2luZ1Byb3BlcnR5RXJyb3IgPSAoeyBwYXJhbXMgfTogSVZhbGlkYXRpb25FcnJvcikgPT4gISFwYXJhbXMgJiYgJ21pc3NpbmdQcm9wZXJ0eScgaW4gcGFyYW1zO1xuXG5leHBvcnQgY29uc3QgaXNNaXNzaW5nT25lT2ZFcnJvciA9ICh7IGtleXdvcmQsIHNjaGVtYVBhdGggfTogSVZhbGlkYXRpb25FcnJvcikgPT5cbiAga2V5d29yZCA9PT0gJ3JlcXVpcmVkJyAmJiAoc2NoZW1hUGF0aCB8fCAnJykuaW5jbHVkZXMoJ29uZU9mJyk7XG5cbmNvbnN0IGlzRmFpbGluZ0tleXdvcmRFcnJvciA9ICh7IHBhcmFtcyB9OiBJVmFsaWRhdGlvbkVycm9yKSA9PiAhIXBhcmFtcyAmJiAnZmFpbGluZ0tleXdvcmQnIGluIHBhcmFtcztcblxuZXhwb3J0IGNvbnN0IGZpbHRlckVycm9yID0gKGVycm9yOiBJVmFsaWRhdGlvbkVycm9yKSA9PiBbaXNGYWlsaW5nS2V5d29yZEVycm9yXS5ldmVyeShmdW5jID0+ICFmdW5jKGVycm9yKSk7XG5cbmV4cG9ydCBjb25zdCBtaXNzaW5nTm9kZUVycm9ycyA9IChlcnJvcnM6IElWYWxpZGF0aW9uRXJyb3JbXSkgPT5cbiAgZXJyb3JzLmZpbHRlcihcbiAgICAoeyBrZXl3b3JkLCBwYXJhbXMgfSkgPT5cbiAgICAgIGtleXdvcmQgPT09ICdyZXF1aXJlZCcgJiYgKHBhcmFtcz8ubWlzc2luZ1Byb3BlcnR5ID09PSAnQHR5cGUnIHx8IHBhcmFtcz8ubWlzc2luZ1Byb3BlcnR5ID09PSAnQGlkJylcbiAgKTtcbiJdfQ==
|