@mnaoumov/typescript-dev-toolkit 5.4.2 → 6.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/lib/cjs/docs-site/docs-snippets.cjs +3 -3
- package/dist/lib/cjs/docs-site/link-check.cjs +4 -4
- package/dist/lib/cjs/docs-site/satteri-github-alerts.cjs +2 -5
- package/dist/lib/cjs/link-check-skip.cjs +2 -5
- package/dist/lib/cjs/linters/eslint-config.cjs +13 -1
- package/dist/lib/cjs/linters/eslint-rules/no-unresolved-jsdoc-link.cjs +1 -1
- package/dist/lib/cjs/linters/eslint-rules/no-used-underscore-variables.cjs +4 -7
- package/dist/lib/cjs/linters/eslint-rules/params-options-name-match.cjs +3 -6
- package/dist/lib/cjs/linters/eslint-rules/prefer-dedent.cjs +2 -5
- package/dist/lib/cjs/linters/eslint-rules/prefer-logical-operator-over-ternary.cjs +20 -2
- package/dist/lib/cjs/linters/eslint-rules/prefer-logical-operator-over-ternary.d.cts +6 -3
- package/dist/lib/cjs/linters/over-exposure.cjs +2 -2
- package/dist/lib/cjs/root.cjs +1 -1
- package/dist/lib/cjs/test-runners/jest.cjs +3 -3
- package/dist/lib/cjs/upstream-sync.cjs +2 -2
- package/dist/lib/esm/docs-site/docs-snippets.mjs +3 -3
- package/dist/lib/esm/docs-site/link-check.mjs +4 -4
- package/dist/lib/esm/docs-site/satteri-github-alerts.mjs +2 -5
- package/dist/lib/esm/link-check-skip.mjs +2 -5
- package/dist/lib/esm/linters/eslint-config.mjs +13 -1
- package/dist/lib/esm/linters/eslint-rules/no-unresolved-jsdoc-link.mjs +1 -1
- package/dist/lib/esm/linters/eslint-rules/no-used-underscore-variables.mjs +4 -7
- package/dist/lib/esm/linters/eslint-rules/params-options-name-match.mjs +3 -6
- package/dist/lib/esm/linters/eslint-rules/prefer-dedent.mjs +2 -5
- package/dist/lib/esm/linters/eslint-rules/prefer-logical-operator-over-ternary.d.mts +6 -3
- package/dist/lib/esm/linters/eslint-rules/prefer-logical-operator-over-ternary.mjs +20 -2
- package/dist/lib/esm/linters/over-exposure.mjs +2 -2
- package/dist/lib/esm/root.mjs +1 -1
- package/dist/lib/esm/test-runners/jest.mjs +3 -3
- package/dist/lib/esm/upstream-sync.mjs +2 -2
- package/package.json +2 -2
|
@@ -862,6 +862,12 @@ function getUnicornConfigs(context) {
|
|
|
862
862
|
props: false,
|
|
863
863
|
ref: false,
|
|
864
864
|
refs: false,
|
|
865
|
+
/*
|
|
866
|
+
* `repo` is the word git and GitHub use themselves (`gh repo`, `RepoPaths`, `DocsSiteConfig.repo`),
|
|
867
|
+
* so it is vocabulary rather than an abbreviation. unicorn 79 added the replacement; following it
|
|
868
|
+
* would rename exported API in this package and report every consumer's `repo*` names.
|
|
869
|
+
*/
|
|
870
|
+
repo: false,
|
|
865
871
|
src: false,
|
|
866
872
|
util: false,
|
|
867
873
|
utils: false
|
|
@@ -879,6 +885,12 @@ function getUnicornConfigs(context) {
|
|
|
879
885
|
*/
|
|
880
886
|
"unicorn/no-array-reverse": "off",
|
|
881
887
|
"unicorn/no-array-sort": "off",
|
|
888
|
+
/*
|
|
889
|
+
* The house style writes every block comment with a ` * ` prefix on each line, the `@file` header of
|
|
890
|
+
* every module included. unicorn 79 put this rule in `recommended`, where it reported 1,553 lines here
|
|
891
|
+
* alone; adopting it would rewrite every comment in every consumer to settle a matter of taste.
|
|
892
|
+
*/
|
|
893
|
+
"unicorn/no-asterisk-prefix-in-documentation-comments": "off",
|
|
882
894
|
/*
|
|
883
895
|
* `continue` inside a nested loop is ordinary, readable control flow here. The rule's remedy is to
|
|
884
896
|
* extract every such loop into its own function, which spreads one coherent traversal across two
|
|
@@ -1076,4 +1088,4 @@ function getUnicornConfigs(context) {
|
|
|
1076
1088
|
getGlobalIgnoreConfigs,
|
|
1077
1089
|
getTypeScriptEslintConfigs
|
|
1078
1090
|
});
|
|
1079
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9saW50ZXJzL2VzbGludC1jb25maWcudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAZmlsZVxuICpcbiAqIFRoZSBnZW5lcmljIGhhbGYgb2YgdGhlIHNoYXJlZCBFU0xpbnQgY29uZmlndXJhdGlvbiwgZm9yIGFueSBUeXBlU2NyaXB0IHByb2plY3QuXG4gKlxuICogSXQgaW50ZWdyYXRlcyBFU0xpbnQncyBvd24gcmVjb21tZW5kZWQgcnVsZXMsIGB0eXBlc2NyaXB0LWVzbGludGAsIGBAc3R5bGlzdGljL2VzbGludC1wbHVnaW5gLFxuICogYGVzbGludC1wbHVnaW4taW1wb3J0LXhgIHdpdGggaXRzIFR5cGVTY3JpcHQgcmVzb2x2ZXIsIGBlc2xpbnQtcGx1Z2luLXBlcmZlY3Rpb25pc3RgLCBgZXNsaW50LXBsdWdpbi11bmljb3JuYCxcbiAqIGBlc2xpbnQtcGx1Z2luLW5gIGFuZCB0aGUgZ2VuZXJpYyBpbi1ob3VzZSBydWxlcy4gQSBwcm9qZWN0LXR5cGUgbGF5ZXIgKHRoZSBPYnNpZGlhbiBwbHVnaW4gb25lIGxpdmVzIGluXG4gKiBgQG1uYW91bW92L29ic2lkaWFuLWRldi10b29sa2l0YCkgYnVpbGRzIG9uIHtAbGluayBnZXRUeXBlU2NyaXB0RXNsaW50Q29uZmlnc30gYW5kIGFkZHMgb25seSB3aGF0IGlzIHNwZWNpZmljIHRvIGl0LlxuICovXG5cbi8qIHY4IGlnbm9yZSBzdGFydCAtLSBEZWNsYXJhdGl2ZSBFU0xpbnQgcnVsZS9wbHVnaW4gY29uZmlndXJhdGlvbjsgY29ycmVjdG5lc3MgaXMgdmVyaWZpZWQgYnkgcnVubmluZyBFU0xpbnQsIG5vdCB1bml0IHRlc3RzLiAqL1xuXG5pbXBvcnQgdHlwZSB7IExpbnRlciB9IGZyb20gJ2VzbGludCc7XG5cbi8qIGVzbGludC1kaXNhYmxlIG5vLW1hZ2ljLW51bWJlcnMgLS0gV2UgZGlzYWJsZWQgbWFnaWMgbnVtYmVycyBiZWNhdXNlIHRoZXkgYXJlIHVzZWQgYWxsIG92ZXIgdGhlIGNvbmZpZ3MuICovXG5pbXBvcnQgY29tbWVudHNDb25maWdzIGZyb20gJ0Blc2xpbnQtY29tbXVuaXR5L2VzbGludC1wbHVnaW4tZXNsaW50LWNvbW1lbnRzL2NvbmZpZ3MnO1xuaW1wb3J0IHsgaW5jbHVkZUlnbm9yZUZpbGUgfSBmcm9tICdAZXNsaW50L2NvbmZpZy1oZWxwZXJzJztcbmltcG9ydCBlc2xpbnQgZnJvbSAnQGVzbGludC9qcyc7XG5pbXBvcnQgeyBqb2luIH0gZnJvbSAnQG1uYW91bW92L3R5cGVzY3JpcHQtbGliL3BhdGgnO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC14L25vLXJlbmFtZS1kZWZhdWx0IC0tIFRoZSBkZWZhdWx0IGV4cG9ydCBuYW1lIGBwbHVnaW5gIGlzIHRvbyBjb25mdXNpbmcuXG5pbXBvcnQgc3R5bGlzdGljIGZyb20gJ0BzdHlsaXN0aWMvZXNsaW50LXBsdWdpbic7XG5pbXBvcnQgeyBjcmVhdGVUeXBlU2NyaXB0SW1wb3J0UmVzb2x2ZXIgfSBmcm9tICdlc2xpbnQtaW1wb3J0LXJlc29sdmVyLXR5cGVzY3JpcHQnO1xuaW1wb3J0IHsgZmxhdENvbmZpZ3MgYXMgZXNsaW50UGx1Z2luSW1wb3J0WEZsYXRDb25maWdzIH0gZnJvbSAnZXNsaW50LXBsdWdpbi1pbXBvcnQteCc7XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgaW1wb3J0LXgvbm8tcmVuYW1lLWRlZmF1bHQgLS0gVGhlIGRlZmF1bHQgZXhwb3J0IG5hbWUgYF9kZWZhdWx0YCBpcyB0b28gY29uZnVzaW5nLlxuaW1wb3J0IG5vZGVQbHVnaW4gZnJvbSAnZXNsaW50LXBsdWdpbi1uJztcbmltcG9ydCB7IGNvbmZpZ3MgYXMgcGVyZmVjdGlvbmlzdENvbmZpZ3MgfSBmcm9tICdlc2xpbnQtcGx1Z2luLXBlcmZlY3Rpb25pc3QnO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC14L25vLXJlbmFtZS1kZWZhdWx0IC0tIFRoZSBkZWZhdWx0IGV4cG9ydCBuYW1lIGBpbmRleGAgaXMgdG9vIGNvbmZ1c2luZy5cbmltcG9ydCB1bmljb3JuIGZyb20gJ2VzbGludC1wbHVnaW4tdW5pY29ybic7XG5pbXBvcnQge1xuICBkZWZpbmVDb25maWcsXG4gIGdsb2JhbElnbm9yZXNcbn0gZnJvbSAnZXNsaW50L2NvbmZpZyc7XG5pbXBvcnQgeyBleGlzdHNTeW5jIH0gZnJvbSAnbm9kZTpmcyc7XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgaW1wb3J0LXgvbm8tcmVuYW1lLWRlZmF1bHQgLS0gVGhlIGRlZmF1bHQgZXhwb3J0IG5hbWUgYF9kZWZhdWx0YCBpcyB0b28gY29uZnVzaW5nLlxuaW1wb3J0IHRzZXNsaW50IGZyb20gJ3R5cGVzY3JpcHQtZXNsaW50JztcblxuaW1wb3J0IHsgUmVwb1BhdGhzIH0gZnJvbSAnLi4vcmVwby1wYXRocy50cyc7XG5pbXBvcnQgeyBnZXRSb290Rm9sZGVyIH0gZnJvbSAnLi4vcm9vdC50cyc7XG5pbXBvcnQgeyBub1Jlc3RyaWN0ZWRTeW50YXhSdWxlRW50cmllcyB9IGZyb20gJy4vZXNsaW50LW5vLXJlc3RyaWN0ZWQtc3ludGF4LnRzJztcbmltcG9ydCB7XG4gIElOX0hPVVNFX0VTTElOVF9QTFVHSU5fTkFNRSxcbiAgaW5Ib3VzZUVzbGludFBsdWdpblxufSBmcm9tICcuL2VzbGludC1ydWxlcy9pbi1ob3VzZS1wbHVnaW4udHMnO1xuaW1wb3J0IHsgQ0xBVURFX1dPUktUUkVFU19JR05PUkVfR0xPQiB9IGZyb20gJy4vbGludC1pZ25vcmVzLnRzJztcblxuLyoqXG4gKiBUaGUgcGFyYW1ldGVycyBmb3IgZGVmaW5pbmcgRVNMaW50IGNvbmZpZ3VyYXRpb25zLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIERlZmluZUVzbGludENvbmZpZ3NPcHRpb25zIHtcbiAgLyoqXG4gICAqIEEgZnVuY3Rpb24gdGhhdCBidWlsZHMgY3VzdG9tIEVTTGludCBjb25maWd1cmF0aW9ucy5cbiAgICpcbiAgICogQHBhcmFtIGNvbnRleHQgLSBUaGUgRVNMaW50IGNvbmZpZ3VyYXRpb24gY29udGV4dC5cbiAgICogQHJldHVybnMgVGhlIGN1c3RvbSBFU0xpbnQgY29uZmlndXJhdGlvbnMuXG4gICAqL1xuICByZWFkb25seSBjdXN0b21Db25maWdzPzogKGNvbnRleHQ6IEVzbGludENvbmZpZ0NvbnRleHQpID0+IExpbnRlci5Db25maWdbXTtcblxuICAvKipcbiAgICogQSBmdW5jdGlvbiB0aGF0IGVkaXRzIHRoZSBFU0xpbnQgY29uZmlndXJhdGlvbiBjb250ZXh0LlxuICAgKlxuICAgKiBAcGFyYW0gY29udGV4dCAtIFRoZSBFU0xpbnQgY29uZmlndXJhdGlvbiBjb250ZXh0LlxuICAgKi9cbiAgcmVhZG9ubHkgZWRpdENvbnRleHQ/OiAoY29udGV4dDogRXNsaW50Q29uZmlnQ29udGV4dCkgPT4gdm9pZDtcblxuICAvKipcbiAgICogVGhlIG9sZGVzdCBOb2RlIHZlcnNpb24gc2hpcHBlZCBzb3VyY2UgaGFzIHRvIHJ1biBvbiwgYXMgYSBzZW12ZXIgcmFuZ2U6IGEgbGlicmFyeSB0aGF0IGFsc28gcnVucyBpbnNpZGUgYW5cbiAgICogb2xkZXIgcnVudGltZSB0aGFuIGl0cyBvd24gdG9vbGluZyAoYW4gT2JzaWRpYW4gcmVuZGVyZXIsIHNheSkgbmFtZXMgdGhhdCBydW50aW1lJ3MgTm9kZSBoZXJlLiBXaGVuIG9taXR0ZWQsXG4gICAqIGBlc2xpbnQtcGx1Z2luLW5gIHJlYWRzIHRoZSBgZW5naW5lc2AgZmllbGQgb2YgdGhlIHByb2plY3QncyBgcGFja2FnZS5qc29uYC5cbiAgICovXG4gIHJlYWRvbmx5IG1pbmltdW1Ob2RlVmVyc2lvbj86IHN0cmluZztcbn1cblxuLyoqXG4gKiBUaGUgcGFyYW1ldGVycyBmb3Ige0BsaW5rIGdldFR5cGVTY3JpcHRFc2xpbnRDb25maWdzfS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBHZXRUeXBlU2NyaXB0RXNsaW50Q29uZmlnc1BhcmFtcyB7XG4gIC8qKlxuICAgKiBUaGUgRVNMaW50IGNvbmZpZ3VyYXRpb24gY29udGV4dC5cbiAgICovXG4gIHJlYWRvbmx5IGNvbnRleHQ6IEVzbGludENvbmZpZ0NvbnRleHQ7XG5cbiAgLyoqXG4gICAqIFRoZSBvbGRlc3QgTm9kZSB2ZXJzaW9uIHNoaXBwZWQgc291cmNlIGhhcyB0byBydW4gb24sIGFzIGEgc2VtdmVyIHJhbmdlLiBXaGVuIG9taXR0ZWQsIGBlc2xpbnQtcGx1Z2luLW5gIHJlYWRzXG4gICAqIHRoZSBgZW5naW5lc2AgZmllbGQgb2YgdGhlIHByb2plY3QncyBgcGFja2FnZS5qc29uYC5cbiAgICovXG4gIHJlYWRvbmx5IG1pbmltdW1Ob2RlVmVyc2lvbj86IHN0cmluZztcbn1cblxuaW50ZXJmYWNlIEdldE5vZGVDb21wYXRDb25maWdzUGFyYW1zIHtcbiAgcmVhZG9ubHkgY29udGV4dDogRXNsaW50Q29uZmlnQ29udGV4dDtcbiAgcmVhZG9ubHkgbWluaW11bU5vZGVWZXJzaW9uOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG59XG5cbi8qKlxuICogVGhlIGNvbnRleHQgZm9yIGRlZmluaW5nIEVTTGludCBjb25maWd1cmF0aW9ucy5cbiAqL1xuZXhwb3J0IGNsYXNzIEVzbGludENvbmZpZ0NvbnRleHQge1xuICAvKipcbiAgICogVGhlIHJvb3QgY29uZmlndXJhdGlvbiBmaWxlcy5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSByb290Q29uZmlnRmlsZXM6IHN0cmluZ1tdID0gW107XG5cbiAgLyoqXG4gICAqIFRoZSBzY3JpcHQgZmlsZXMuXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgc2NyaXB0RmlsZXM6IHN0cmluZ1tdID0gW107XG5cbiAgLyoqXG4gICAqIFRoZSBzb3VyY2UgZmlsZXMuXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgc291cmNlRmlsZXM6IHN0cmluZ1tdID0gW107XG5cbiAgLyoqXG4gICAqIFRoZSBmb2xkZXJzIGhvbGRpbmcgdGhlIHByb2plY3QncyBzb3VyY2VzLCBieSBkZWZhdWx0IGBzcmNgIGFsb25lLiBBIHdvcmtzcGFjZSB3aG9zZSBwYWNrYWdlcyBlYWNoIGhhdmUgdGhlaXIgb3duXG4gICAqIGBzcmNgIGFkZHMgdGhlbSBoZXJlLCBzbyB0aGUgcnVsZXMga2V5ZWQgb24gYSBmaWxlJ3MgbmFtZSBpbnNpZGUgYSBzb3VyY2UgZm9sZGVyIHJlYWNoIHRob3NlIHBhY2thZ2VzIHRvby5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBzb3VyY2VGb2xkZXJzOiBzdHJpbmdbXSA9IFtdO1xuXG4gIC8qKlxuICAgKiBUaGUgdGVzdCBmaWxlcy5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSB0ZXN0RmlsZXM6IHN0cmluZ1tdID0gW107XG5cbiAgLyoqXG4gICAqIFRoZSBhbGwgZmlsZXMuXG4gICAqXG4gICAqIEByZXR1cm5zIFRoZSBhbGwgZmlsZXMuXG4gICAqL1xuICBwdWJsaWMgYWxsRmlsZXMoKTogc3RyaW5nW10ge1xuICAgIHJldHVybiBbLi4udGhpcy50ZXN0RmlsZXMsIC4uLnRoaXMuc2NyaXB0RmlsZXMsIC4uLnRoaXMucm9vdENvbmZpZ0ZpbGVzLCAuLi50aGlzLnNvdXJjZUZpbGVzXTtcbiAgfVxufVxuXG4vKipcbiAqIENyZWF0ZXMgdGhlIGNvbnRleHQgb2YgYSBwcm9qZWN0IGxhaWQgb3V0IHRoZSBjb252ZW50aW9uYWwgd2F5OiBzb3VyY2VzIHVuZGVyIGBzcmNgLCBzY3JpcHRzIHVuZGVyIGBzY3JpcHRzYCwgdGVzdHNcbiAqIGJlc2lkZSB0aGUgc291cmNlcyBvciB1bmRlciBgX190ZXN0c19fYCwgYW5kIHRoZSBjb21taXRsaW50LCBFU0xpbnQgYW5kIFZpdGVzdCBjb25maWd1cmF0aW9ucyBhdCB0aGUgcm9vdC5cbiAqXG4gKiBAcmV0dXJucyBUaGUgY29udGV4dC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZURlZmF1bHRFc2xpbnRDb25maWdDb250ZXh0KCk6IEVzbGludENvbmZpZ0NvbnRleHQge1xuICBjb25zdCBjb250ZXh0ID0gbmV3IEVzbGludENvbmZpZ0NvbnRleHQoKTtcbiAgY29udGV4dC5zb3VyY2VGb2xkZXJzLnB1c2goUmVwb1BhdGhzLlNyYyk7XG4gIGNvbnRleHQucm9vdENvbmZpZ0ZpbGVzLnB1c2goXG4gICAgUmVwb1BhdGhzLkNvbW1pdGxpbnRDb25maWdUcyxcbiAgICBSZXBvUGF0aHMuRXNsaW50Q29uZmlnTXRzLFxuICAgIFJlcG9QYXRocy5WaXRlc3RDb25maWdUc1xuICApO1xuICBjb250ZXh0LnNjcmlwdEZpbGVzLnB1c2goXG4gICAgam9pbihSZXBvUGF0aHMuU2NyaXB0cywgUmVwb1BhdGhzLkFueVBhdGgsIFJlcG9QYXRocy5BbnlUcylcbiAgKTtcbiAgY29udGV4dC5zb3VyY2VGaWxlcy5wdXNoKFxuICAgIGpvaW4oUmVwb1BhdGhzLlNyYywgUmVwb1BhdGhzLkFueVBhdGgsIFJlcG9QYXRocy5BbnlUcyksXG4gICAgam9pbihSZXBvUGF0aHMuU3JjLCBSZXBvUGF0aHMuQW55UGF0aCwgUmVwb1BhdGhzLkFueVRzeClcbiAgKTtcbiAgY29udGV4dC50ZXN0RmlsZXMucHVzaChcbiAgICBqb2luKFJlcG9QYXRocy5UZXN0cywgUmVwb1BhdGhzLkFueVBhdGgsIFJlcG9QYXRocy5BbnlUcyksXG4gICAgam9pbihSZXBvUGF0aHMuTW9ja3MsIFJlcG9QYXRocy5BbnlQYXRoLCBSZXBvUGF0aHMuQW55VHMpLFxuICAgIGpvaW4oUmVwb1BhdGhzLlNyYywgUmVwb1BhdGhzLkFueVBhdGgsIFJlcG9QYXRocy5BbnlUZXN0VHMpLFxuICAgIC8qXG4gICAgICogQSBidWlsZC1zY3JpcHQgdGVzdCBpcyBhIFRFU1QsIGFuZCB0aGlzIGNvbnZlbnRpb24gcHV0cyBpdCBpbiBhIGAqLnRlc3QudHNgIHVuZGVyIGBzY3JpcHRzL2AgLS0gYmVzaWRlIHRoZVxuICAgICAqIHNjcmlwdCBpdCBjb3ZlcnMgcmF0aGVyIHRoYW4gdW5kZXIgYHNyYy9gLiBXaXRob3V0IHRoaXMgZ2xvYiBpdCBtYXRjaGVkIGBzY3JpcHRGaWxlc2AgYWxvbmUsIHNvIGV2ZXJ5IHJlbGF4YXRpb25cbiAgICAgKiB0aGF0IGtleXMgb24gYGNvbnRleHQudGVzdEZpbGVzYCBtaXNzZWQgaXQ6IGBuby1tYWdpYy1udW1iZXJzYCBmaXJlZCBvbiBhIHN1aXRlIHdob3NlIHdob2xlIHN1YmplY3QgaXMgcmVjb3JkZWRcbiAgICAgKiBudW1iZXJzLCBhbmQgYHVuaWNvcm4vY29uc2lzdGVudC1mdW5jdGlvbi1zY29waW5nYCBvbiB0aGUgcGVyLXN1aXRlIGZpeHR1cmUgZmFjdG9yaWVzIHRoZSBibG9jayBhdCB0aGUgYm90dG9tXG4gICAgICogb2YgYGdldFVuaWNvcm5Db25maWdzYCBzYXlzIHRlc3RzIGV4aXN0IHRvIGFsbG93LlxuICAgICAqXG4gICAgICogVGhlIGZpbGUgbm93IG1hdGNoZXMgQk9USCBsaXN0cywgYW5kIHRoYXQgaXMgZGVsaWJlcmF0ZSByYXRoZXIgdGhhbiBhbiBvdmVybGFwIHRvIHJlc29sdmU6IGV2ZXJ5dGhpbmcgc2NvcGVkIHRvXG4gICAgICogYGNvbnRleHQuc2NyaXB0RmlsZXNgIG9ubHkgdHVybnMgcnVsZXMgT0ZGIChgaW1wb3J0LXgvbm8tbm9kZWpzLW1vZHVsZXNgLCBgdW5pY29ybi9uby1wcm9jZXNzLWV4aXRgKSwgYm90aCBvZlxuICAgICAqIHdoaWNoIGEgc2NyaXB0IHRlc3Qgd2FudHMgYXMgbXVjaCBhcyB0aGUgc2NyaXB0IGRvZXMsIHNvIHRoZSB0d28gc2V0cyBjb21wb3NlIGluc3RlYWQgb2YgY29tcGV0aW5nLiBLZWVwIGl0IHRoYXRcbiAgICAgKiB3YXkgLS0gYSBydWxlIHR1cm5lZCBPTiBmb3IgYHNjcmlwdEZpbGVzYCB3b3VsZCBsYW5kIG9uIHRoZXNlIGZpbGVzIHRvbywgYW5kIGZsYXQtY29uZmlnIG9yZGVyLCBub3QgaW50ZW50LFxuICAgICAqIHdvdWxkIGRlY2lkZSB3aGljaCBzaWRlIHdvbi5cbiAgICAgKi9cbiAgICBqb2luKFJlcG9QYXRocy5TY3JpcHRzLCBSZXBvUGF0aHMuQW55UGF0aCwgUmVwb1BhdGhzLkFueVRlc3RUcylcbiAgKTtcbiAgcmV0dXJuIGNvbnRleHQ7XG59XG5cbi8qKlxuICogQnVpbGRzIHRoZSBFU0xpbnQgY29uZmlndXJhdGlvbnMgb2YgYSBnZW5lcmljIFR5cGVTY3JpcHQgcHJvamVjdC5cbiAqXG4gKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSBwYXJhbWV0ZXJzIGZvciBkZWZpbmluZyBFU0xpbnQgY29uZmlndXJhdGlvbnMuXG4gKiBAcmV0dXJucyBUaGUgRVNMaW50IGNvbmZpZ3VyYXRpb25zLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZGVmaW5lRXNsaW50Q29uZmlncyhvcHRpb25zOiBEZWZpbmVFc2xpbnRDb25maWdzT3B0aW9ucyA9IHt9KTogTGludGVyLkNvbmZpZ1tdIHtcbiAgY29uc3QgY29udGV4dCA9IGNyZWF0ZURlZmF1bHRFc2xpbnRDb25maWdDb250ZXh0KCk7XG4gIG9wdGlvbnMuZWRpdENvbnRleHQ/Lihjb250ZXh0KTtcbiAgY29uc3QgY3VzdG9tQ29uZmlncyA9IG9wdGlvbnMuY3VzdG9tQ29uZmlncz8uKGNvbnRleHQpID8/IFtdO1xuXG4gIHJldHVybiBkZWZpbmVDb25maWcoXG4gICAgLi4uZ2V0R2xvYmFsSWdub3JlQ29uZmlncygpLFxuICAgIC4uLmdldFR5cGVTY3JpcHRFc2xpbnRDb25maWdzKHtcbiAgICAgIGNvbnRleHQsXG4gICAgICAuLi4ob3B0aW9ucy5taW5pbXVtTm9kZVZlcnNpb24gIT09IHVuZGVmaW5lZCAmJiB7IG1pbmltdW1Ob2RlVmVyc2lvbjogb3B0aW9ucy5taW5pbXVtTm9kZVZlcnNpb24gfSlcbiAgICB9KSxcbiAgICAuLi5jdXN0b21Db25maWdzXG4gICk7XG59XG5cbi8qKlxuICogVGhlIGNvbmZpZ3VyYXRpb25zIG9mIEVTTGludCdzIG93biBydWxlcy4gQSBwcm9qZWN0LXR5cGUgbGF5ZXIgcmVhZHMgaXQgdG8gbGVhcm4gd2hpY2ggY29yZSBydWxlcyB0aGlzXG4gKiBjb25maWd1cmF0aW9uIHNldHMgaXRzZWxmLlxuICpcbiAqIEBwYXJhbSBjb250ZXh0IC0gVGhlIEVTTGludCBjb25maWd1cmF0aW9uIGNvbnRleHQuXG4gKiBAcmV0dXJucyBUaGUgY29uZmlndXJhdGlvbnMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRFc2xpbnRDb3JlQ29uZmlncyhjb250ZXh0OiBFc2xpbnRDb25maWdDb250ZXh0KTogTGludGVyLkNvbmZpZ1tdIHtcbiAgcmV0dXJuIGRlZmluZUNvbmZpZyhbXG4gICAge1xuICAgICAgZXh0ZW5kczogW2VzbGludC5jb25maWdzLnJlY29tbWVuZGVkXSxcbiAgICAgIGZpbGVzOiBjb250ZXh0LmFsbEZpbGVzKCksXG4gICAgICBydWxlczoge1xuICAgICAgICAnYWNjZXNzb3ItcGFpcnMnOiAnZXJyb3InLFxuICAgICAgICAnYXJyYXktY2FsbGJhY2stcmV0dXJuJzogJ2Vycm9yJyxcbiAgICAgICAgJ2NhbWVsY2FzZSc6ICdlcnJvcicsXG4gICAgICAgIC8qXG4gICAgICAgICAqIFRoZSBydWxlIHJlcG9ydHMgcGVyIGNvbW1lbnQgVE9LRU4sIHNvIGV2ZXJ5IGNvbnRpbnVhdGlvbiBsaW5lIG9mIGEgd3JhcHBlZCBgLy9gIGNvbW1lbnQgaXMgaXRzIG93biB0b2tlblxuICAgICAgICAgKiB0aGF0IHdvdWxkIGhhdmUgdG8gc3RhcnQgd2l0aCBhIGNhcGl0YWwg4oCUIHdoaWNoIGlzIGhvdyBwcm9zZSBlbmRzIHVwIHdpdGggY2FwaXRhbHMgbWlkLXNlbnRlbmNlLlxuICAgICAgICAgKiBgaWdub3JlQ29uc2VjdXRpdmVDb21tZW50c2AgZXhlbXB0cyBhIGxpbmUgY29tbWVudCB0aGF0IGRpcmVjdGx5IGZvbGxvd3MgYW5vdGhlciBvbmUsIHdoaWNoIGlzIGV4YWN0bHkgdGhlXG4gICAgICAgICAqIHNoYXBlIG9mIGEgd3JhcHBlZCBibG9jaywgd2hpbGUgc3RpbGwgaG9sZGluZyBpdHMgRklSU1QgbGluZSB0byBhIGNhcGl0YWwuIEJsb2NrIGNvbW1lbnRzIG5lZWQgbm8gc3VjaFxuICAgICAgICAgKiBvcHRpb246IGEgYmxvY2sgY29tbWVudCBpcyBhIHNpbmdsZSB0b2tlbiBob3dldmVyIG1hbnkgbGluZXMgaXQgc3BhbnMuXG4gICAgICAgICAqIGBpZ25vcmVQYXR0ZXJuYCBjb3ZlcnMgdGhlIGhhbGYgdGhhdCBsZWF2ZXMgYmVoaW5kOiBhIGNvbW1lbnQgd2hvc2UgRklSU1Qgd29yZCBpcyBhIGNhbWVsQ2FzZSBpZGVudGlmaWVyIGlzXG4gICAgICAgICAqIGV4ZW1wdCwgc28gYSBjb21tZW50IHRoYXQgb3BlbnMgYnkgbmFtaW5nIGEgc3ltYm9sIGtlZXBzIHRoZSBuYW1lIGEgcmVhZGVyIGNhbiBncmVwIGluc3RlYWQgb2YgYSBQYXNjYWxDYXNlXG4gICAgICAgICAqIG9uZSB0aGF0IGV4aXN0cyBub3doZXJlLiBUaGUgcnVsZSBhbmNob3JzIHRoZSBwYXR0ZXJuIGF0IHRoZSBzdGFydCBvZiB0aGUgY29tbWVudCBhbmQgYFthLXpBLVowLTldYCBtYXRjaGVzXG4gICAgICAgICAqIG5vIHdoaXRlc3BhY2UsIHNvIGl0IGNhbiBvbmx5IGV2ZXIgbWF0Y2ggdGhhdCBmaXJzdCB3b3JkIOKAlCBvcmRpbmFyeSBsb3dlcmNhc2UgcHJvc2Ugc3RheXMgcmVwb3J0ZWQuIEJvdGhcbiAgICAgICAgICogb3B0aW9uIGJhZ3MgbmVlZCBpdCwgYW5kIGBibG9ja2Aga2VlcHMgaXRzIGB2OGAgZXhlbXB0aW9uIGJ5IGFsdGVybmF0aW9uIHJhdGhlciB0aGFuIGxvc2luZyBpdC5cbiAgICAgICAgICovXG4gICAgICAgICdjYXBpdGFsaXplZC1jb21tZW50cyc6IFtcbiAgICAgICAgICAnZXJyb3InLFxuICAgICAgICAgICdhbHdheXMnLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGJsb2NrOiB7IGlnbm9yZVBhdHRlcm46ICd2OHxbYS16XVthLXpBLVowLTldKltBLVpdJyB9LFxuICAgICAgICAgICAgbGluZTogeyBpZ25vcmVDb25zZWN1dGl2ZUNvbW1lbnRzOiB0cnVlLCBpZ25vcmVQYXR0ZXJuOiAnW2Etel1bYS16QS1aMC05XSpbQS1aXScgfVxuICAgICAgICAgIH1cbiAgICAgICAgXSxcbiAgICAgICAgJ2NvbXBsZXhpdHknOiAnZXJyb3InLFxuICAgICAgICAnY29uc2lzdGVudC10aGlzJzogJ2Vycm9yJyxcbiAgICAgICAgJ2N1cmx5JzogJ2Vycm9yJyxcbiAgICAgICAgJ2RlZmF1bHQtY2FzZSc6ICdlcnJvcicsXG4gICAgICAgICdkZWZhdWx0LWNhc2UtbGFzdCc6ICdlcnJvcicsXG4gICAgICAgICdkZWZhdWx0LXBhcmFtLWxhc3QnOiAnZXJyb3InLFxuICAgICAgICAnZXFlcWVxJzogJ2Vycm9yJyxcbiAgICAgICAgJ2Z1bmMtbmFtZS1tYXRjaGluZyc6ICdlcnJvcicsXG4gICAgICAgICdmdW5jLW5hbWVzJzogJ2Vycm9yJyxcbiAgICAgICAgJ2Z1bmMtc3R5bGUnOiBbXG4gICAgICAgICAgJ2Vycm9yJyxcbiAgICAgICAgICAnZGVjbGFyYXRpb24nLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGFsbG93QXJyb3dGdW5jdGlvbnM6IGZhbHNlXG4gICAgICAgICAgfVxuICAgICAgICBdLFxuICAgICAgICAnZ3JvdXBlZC1hY2Nlc3Nvci1wYWlycyc6IFtcbiAgICAgICAgICAnZXJyb3InLFxuICAgICAgICAgICdnZXRCZWZvcmVTZXQnXG4gICAgICAgIF0sXG4gICAgICAgICdndWFyZC1mb3ItaW4nOiAnZXJyb3InLFxuICAgICAgICAnbm8tYWxlcnQnOiAnZXJyb3InLFxuICAgICAgICAnbm8tYXJyYXktY29uc3RydWN0b3InOiAnZXJyb3InLFxuICAgICAgICAnbm8tYml0d2lzZSc6ICdlcnJvcicsXG4gICAgICAgICduby1jYWxsZXInOiAnZXJyb3InLFxuICAgICAgICAnbm8tY29uc29sZSc6IFtcbiAgICAgICAgICAnZXJyb3InLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGFsbG93OiBbXG4gICAgICAgICAgICAgICd3YXJuJyxcbiAgICAgICAgICAgICAgJ2Vycm9yJ1xuICAgICAgICAgICAgXVxuICAgICAgICAgIH1cbiAgICAgICAgXSxcbiAgICAgICAgJ25vLWNvbnN0cnVjdG9yLXJldHVybic6ICdlcnJvcicsXG4gICAgICAgICduby1kaXYtcmVnZXgnOiAnZXJyb3InLFxuICAgICAgICAnbm8tZWxzZS1yZXR1cm4nOiBbXG4gICAgICAgICAgJ2Vycm9yJyxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBhbGxvd0Vsc2VJZjogZmFsc2VcbiAgICAgICAgICB9XG4gICAgICAgIF0sXG4gICAgICAgICduby1lbXB0eS1mdW5jdGlvbic6ICdlcnJvcicsXG4gICAgICAgICduby1leHRlbmQtbmF0aXZlJzogJ2Vycm9yJyxcbiAgICAgICAgJ25vLWV4dHJhLWJpbmQnOiAnZXJyb3InLFxuICAgICAgICAnbm8tZXh0cmEtbGFiZWwnOiAnZXJyb3InLFxuICAgICAgICAnbm8taW1wbGljaXQtY29lcmNpb24nOiBbXG4gICAgICAgICAgJ2Vycm9yJyxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBhbGxvdzogW1xuICAgICAgICAgICAgICAnISEnXG4gICAgICAgICAgICBdXG4gICAgICAgICAgfVxuICAgICAgICBdLFxuICAgICAgICAnbm8taW1wbGllZC1ldmFsJzogJ2Vycm9yJyxcbiAgICAgICAgJ25vLWlubmVyLWRlY2xhcmF0aW9ucyc6ICdlcnJvcicsXG4gICAgICAgICduby1pdGVyYXRvcic6ICdlcnJvcicsXG4gICAgICAgICduby1sYWJlbC12YXInOiAnZXJyb3InLFxuICAgICAgICAnbm8tbGFiZWxzJzogJ2Vycm9yJyxcbiAgICAgICAgJ25vLWxvbmUtYmxvY2tzJzogJ2Vycm9yJyxcbiAgICAgICAgJ25vLWxvbmVseS1pZic6ICdlcnJvcicsXG4gICAgICAgICduby1sb29wLWZ1bmMnOiAnZXJyb3InLFxuICAgICAgICAnbm8tbWFnaWMtbnVtYmVycyc6IFtcbiAgICAgICAgICAnZXJyb3InLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGRldGVjdE9iamVjdHM6IHRydWUsXG4gICAgICAgICAgICBlbmZvcmNlQ29uc3Q6IHRydWUsXG4gICAgICAgICAgICBpZ25vcmU6IFtcbiAgICAgICAgICAgICAgLTEsXG4gICAgICAgICAgICAgIDAsXG4gICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF1cbiAgICAgICAgICB9XG4gICAgICAgIF0sXG4gICAgICAgICduby1tdWx0aS1hc3NpZ24nOiAnZXJyb3InLFxuICAgICAgICAnbm8tbXVsdGktc3RyJzogJ2Vycm9yJyxcbiAgICAgICAgJ25vLW5lZ2F0ZWQtY29uZGl0aW9uJzogJ2Vycm9yJyxcbiAgICAgICAgJ25vLW5lc3RlZC10ZXJuYXJ5JzogJ2Vycm9yJyxcbiAgICAgICAgJ25vLW5ldy1mdW5jJzogJ2Vycm9yJyxcbiAgICAgICAgJ25vLW5ldy13cmFwcGVycyc6ICdlcnJvcicsXG4gICAgICAgICduby1vYmplY3QtY29uc3RydWN0b3InOiAnZXJyb3InLFxuICAgICAgICAnbm8tb2N0YWwtZXNjYXBlJzogJ2Vycm9yJyxcbiAgICAgICAgJ25vLXByb21pc2UtZXhlY3V0b3ItcmV0dXJuJzogJ2Vycm9yJyxcbiAgICAgICAgJ25vLXByb3RvJzogJ2Vycm9yJyxcbiAgICAgICAgJ25vLXJlc3RyaWN0ZWQtc3ludGF4JzogW1xuICAgICAgICAgICdlcnJvcicsXG4gICAgICAgICAgLi4ubm9SZXN0cmljdGVkU3ludGF4UnVsZUVudHJpZXNcbiAgICAgICAgXSxcbiAgICAgICAgJ25vLXJldHVybi1hc3NpZ24nOiAnZXJyb3InLFxuICAgICAgICAnbm8tc2NyaXB0LXVybCc6ICdlcnJvcicsXG4gICAgICAgICduby1zZWxmLWNvbXBhcmUnOiAnZXJyb3InLFxuICAgICAgICAnbm8tc2VxdWVuY2VzJzogJ2Vycm9yJyxcbiAgICAgICAgJ25vLXNoYWRvdyc6ICdlcnJvcicsXG4gICAgICAgICduby10ZW1wbGF0ZS1jdXJseS1pbi1zdHJpbmcnOiAnZXJyb3InLFxuICAgICAgICAnbm8tdGhyb3ctbGl0ZXJhbCc6ICdlcnJvcicsXG4gICAgICAgICduby11bm1vZGlmaWVkLWxvb3AtY29uZGl0aW9uJzogJ2Vycm9yJyxcbiAgICAgICAgJ25vLXVubmVlZGVkLXRlcm5hcnknOiAnZXJyb3InLFxuICAgICAgICAnbm8tdW5yZWFjaGFibGUtbG9vcCc6ICdlcnJvcicsXG4gICAgICAgICduby11bnVzZWQtZXhwcmVzc2lvbnMnOiAnZXJyb3InLFxuICAgICAgICAnbm8tdXNlbGVzcy1hc3NpZ25tZW50JzogJ2Vycm9yJyxcbiAgICAgICAgJ25vLXVzZWxlc3MtY2FsbCc6ICdlcnJvcicsXG4gICAgICAgICduby11c2VsZXNzLWNvbXB1dGVkLWtleSc6ICdlcnJvcicsXG4gICAgICAgICduby11c2VsZXNzLWNvbmNhdCc6ICdlcnJvcicsXG4gICAgICAgICduby11c2VsZXNzLWNvbnN0cnVjdG9yJzogJ2Vycm9yJyxcbiAgICAgICAgJ25vLXVzZWxlc3MtcmVuYW1lJzogJ2Vycm9yJyxcbiAgICAgICAgJ25vLXVzZWxlc3MtcmV0dXJuJzogJ2Vycm9yJyxcbiAgICAgICAgJ25vLXZhcic6ICdlcnJvcicsXG4gICAgICAgICduby12b2lkJzogJ2Vycm9yJyxcbiAgICAgICAgJ29iamVjdC1zaG9ydGhhbmQnOiAnZXJyb3InLFxuICAgICAgICAnb3BlcmF0b3ItYXNzaWdubWVudCc6ICdlcnJvcicsXG4gICAgICAgICdwcmVmZXItYXJyb3ctY2FsbGJhY2snOiAnZXJyb3InLFxuICAgICAgICAncHJlZmVyLWNvbnN0JzogJ2Vycm9yJyxcbiAgICAgICAgJ3ByZWZlci1leHBvbmVudGlhdGlvbi1vcGVyYXRvcic6ICdlcnJvcicsXG4gICAgICAgICdwcmVmZXItbmFtZWQtY2FwdHVyZS1ncm91cCc6ICdlcnJvcicsXG4gICAgICAgICdwcmVmZXItbnVtZXJpYy1saXRlcmFscyc6ICdlcnJvcicsXG4gICAgICAgICdwcmVmZXItb2JqZWN0LWhhcy1vd24nOiAnZXJyb3InLFxuICAgICAgICAncHJlZmVyLW9iamVjdC1zcHJlYWQnOiAnZXJyb3InLFxuICAgICAgICAncHJlZmVyLXByb21pc2UtcmVqZWN0LWVycm9ycyc6ICdlcnJvcicsXG4gICAgICAgICdwcmVmZXItcmVnZXgtbGl0ZXJhbHMnOiAnZXJyb3InLFxuICAgICAgICAncHJlZmVyLXJlc3QtcGFyYW1zJzogJ2Vycm9yJyxcbiAgICAgICAgJ3ByZWZlci1zcHJlYWQnOiAnZXJyb3InLFxuICAgICAgICAncHJlZmVyLXRlbXBsYXRlJzogJ2Vycm9yJyxcbiAgICAgICAgJ3JhZGl4JzogJ2Vycm9yJyxcbiAgICAgICAgJ3JlcXVpcmUtYXRvbWljLXVwZGF0ZXMnOiAnZXJyb3InLFxuICAgICAgICAncmVxdWlyZS1hd2FpdCc6ICdlcnJvcicsXG4gICAgICAgICdzeW1ib2wtZGVzY3JpcHRpb24nOiAnZXJyb3InLFxuICAgICAgICAndW5pY29kZS1ib20nOiAnZXJyb3InLFxuICAgICAgICAndmFycy1vbi10b3AnOiAnZXJyb3InLFxuICAgICAgICAneW9kYSc6ICdlcnJvcidcbiAgICAgIH1cbiAgICB9LFxuICAgIHtcbiAgICAgIGZpbGVzOiBjb250ZXh0LnRlc3RGaWxlcyxcbiAgICAgIHJ1bGVzOiB7XG4gICAgICAgICduby1tYWdpYy1udW1iZXJzJzogJ29mZidcbiAgICAgIH1cbiAgICB9XG4gIF0pO1xufVxuXG4vKipcbiAqIFRoZSBnbG9iYWwgaWdub3JlczogZXZlcnl0aGluZyBgLmdpdGlnbm9yZWAgbmFtZXMsIHBsdXMgQ2xhdWRlIENvZGUncyB3b3JrdHJlZSBmb2xkZXIuXG4gKlxuICogQHJldHVybnMgVGhlIGNvbmZpZ3VyYXRpb25zLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0R2xvYmFsSWdub3JlQ29uZmlncygpOiBMaW50ZXIuQ29uZmlnW10ge1xuICByZXR1cm4gZGVmaW5lQ29uZmlnKFxuICAgIC4uLmdldEdpdElnbm9yZUNvbmZpZ3MoKSxcbiAgICAvKlxuICAgICAqIE9uIHRvcCBvZiBgLmdpdGlnbm9yZWAsIG5vdCBpbnN0ZWFkIG9mIGl0OiBnaXQgZXhjbHVkZXMgQ2xhdWRlIENvZGUncyB3b3JrdHJlZSBmb2xkZXIgdGhyb3VnaFxuICAgICAqIGAuZ2l0L2luZm8vZXhjbHVkZWAsIHdoaWNoIGBpbmNsdWRlSWdub3JlRmlsZWAgYWJvdmUgZG9lcyBub3QgcmVhZC4gU2VlIGBsaW50LWlnbm9yZXMudHNgLlxuICAgICAqL1xuICAgIGdsb2JhbElnbm9yZXMoW0NMQVVERV9XT1JLVFJFRVNfSUdOT1JFX0dMT0JdLCAndHlwZXNjcmlwdC1kZXYtdG9vbGtpdC9jbGF1ZGUtd29ya3RyZWVzJylcbiAgKTtcbn1cblxuLyoqXG4gKiBUaGUgZ2VuZXJpYyBsYXllcnMgb2YgdGhlIHNoYXJlZCBjb25maWd1cmF0aW9uLCB3aXRob3V0IHRoZSBnbG9iYWwgaWdub3Jlcy5cbiAqXG4gKiBAcGFyYW0gcGFyYW1zIC0gVGhlIHBhcmFtZXRlcnMuXG4gKiBAcmV0dXJucyBUaGUgY29uZmlndXJhdGlvbnMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRUeXBlU2NyaXB0RXNsaW50Q29uZmlncyhwYXJhbXM6IEdldFR5cGVTY3JpcHRFc2xpbnRDb25maWdzUGFyYW1zKTogTGludGVyLkNvbmZpZ1tdIHtcbiAgY29uc3QgeyBjb250ZXh0IH0gPSBwYXJhbXM7XG4gIHJldHVybiBkZWZpbmVDb25maWcoXG4gICAgLi4uZ2V0RXNsaW50Q29yZUNvbmZpZ3MoY29udGV4dCksXG4gICAgLi4uZ2V0VHNlc2xpbnRDb25maWdzKGNvbnRleHQpLFxuICAgIC4uLmdldFN0eWxpc3RpY0NvbmZpZ3MoY29udGV4dCksXG4gICAgLi4uZ2V0SW1wb3J0WENvbmZpZ3MoY29udGV4dCksXG4gICAgLi4uZ2V0UGVyZmVjdGlvbmlzdENvbmZpZ3MoY29udGV4dCksXG4gICAgLi4uZ2V0VW5pY29ybkNvbmZpZ3MoY29udGV4dCksXG4gICAgLi4uZ2V0RXNsaW50SW1wb3J0UmVzb2x2ZXJUeXBlc2NyaXB0Q29uZmlncygpLFxuICAgIC4uLmdldEVzbGludENvbW1lbnRzQ29uZmlncyhjb250ZXh0KSxcbiAgICAuLi5nZXRJbkhvdXNlUGx1Z2luQ29uZmlncyhjb250ZXh0KSxcbiAgICAuLi5nZXROb2RlQ29tcGF0Q29uZmlncyh7IGNvbnRleHQsIG1pbmltdW1Ob2RlVmVyc2lvbjogcGFyYW1zLm1pbmltdW1Ob2RlVmVyc2lvbiB9KVxuICApO1xufVxuXG5mdW5jdGlvbiBnZXRFc2xpbnRDb21tZW50c0NvbmZpZ3MoY29udGV4dDogRXNsaW50Q29uZmlnQ29udGV4dCk6IExpbnRlci5Db25maWdbXSB7XG4gIHJldHVybiBkZWZpbmVDb25maWcoW1xuICAgIHtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQteC9uby1uYW1lZC1hcy1kZWZhdWx0LW1lbWJlciAtLSBUaGUgZGVmYXVsdCBleHBvcnQgbmFtZSBgcmVjb21tZW5kZWRgIGlzIHRvbyBjb25mdXNpbmcuXG4gICAgICBleHRlbmRzOiBbY29tbWVudHNDb25maWdzLnJlY29tbWVuZGVkXSxcbiAgICAgIGZpbGVzOiBjb250ZXh0LmFsbEZpbGVzKCksXG4gICAgICBydWxlczoge1xuICAgICAgICAnQGVzbGludC1jb21tdW5pdHkvZXNsaW50LWNvbW1lbnRzL3JlcXVpcmUtZGVzY3JpcHRpb24nOiAnZXJyb3InXG4gICAgICB9XG4gICAgfVxuICBdKTtcbn1cblxuZnVuY3Rpb24gZ2V0RXNsaW50SW1wb3J0UmVzb2x2ZXJUeXBlc2NyaXB0Q29uZmlncygpOiBMaW50ZXIuQ29uZmlnW10ge1xuICByZXR1cm4gZGVmaW5lQ29uZmlnKFtcbiAgICB7XG4gICAgICBzZXR0aW5nczoge1xuICAgICAgICAnaW1wb3J0LXgvcmVzb2x2ZXItbmV4dCc6IFtcbiAgICAgICAgICBjcmVhdGVUeXBlU2NyaXB0SW1wb3J0UmVzb2x2ZXIoe1xuICAgICAgICAgICAgYWx3YXlzVHJ5VHlwZXM6IHRydWVcbiAgICAgICAgICB9KVxuICAgICAgICBdXG4gICAgICB9XG4gICAgfVxuICBdKTtcbn1cblxuZnVuY3Rpb24gZ2V0R2l0SWdub3JlQ29uZmlncygpOiBMaW50ZXIuQ29uZmlnW10ge1xuICBjb25zdCBnaXRpZ25vcmVQYXRoID0gam9pbihnZXRSb290Rm9sZGVyKCkgPz8gJycsICcuZ2l0aWdub3JlJyk7XG4gIHJldHVybiBleGlzdHNTeW5jKGdpdGlnbm9yZVBhdGgpID8gW2luY2x1ZGVJZ25vcmVGaWxlKGdpdGlnbm9yZVBhdGgpXSA6IFtdO1xufVxuXG5mdW5jdGlvbiBnZXRJbXBvcnRYQ29uZmlncyhjb250ZXh0OiBFc2xpbnRDb25maWdDb250ZXh0KTogTGludGVyLkNvbmZpZ1tdIHtcbiAgcmV0dXJuIGRlZmluZUNvbmZpZyhbXG4gICAge1xuICAgICAgZXh0ZW5kczogW1xuICAgICAgICBlc2xpbnRQbHVnaW5JbXBvcnRYRmxhdENvbmZpZ3MucmVjb21tZW5kZWQsXG4gICAgICAgIGVzbGludFBsdWdpbkltcG9ydFhGbGF0Q29uZmlncy50eXBlc2NyaXB0LFxuICAgICAgICBlc2xpbnRQbHVnaW5JbXBvcnRYRmxhdENvbmZpZ3MuZXJyb3JzLFxuICAgICAgICBlc2xpbnRQbHVnaW5JbXBvcnRYRmxhdENvbmZpZ3Mud2FybmluZ3NcbiAgICAgIF0sXG4gICAgICBmaWxlczogY29udGV4dC5hbGxGaWxlcygpLFxuICAgICAgcnVsZXM6IHtcbiAgICAgICAgJ2ltcG9ydC14L2NvbnNpc3RlbnQtdHlwZS1zcGVjaWZpZXItc3R5bGUnOiAnZXJyb3InLFxuICAgICAgICAnaW1wb3J0LXgvZXh0ZW5zaW9ucyc6IFsnZXJyb3InLCAnaWdub3JlUGFja2FnZXMnXSxcbiAgICAgICAgJ2ltcG9ydC14L2ZpcnN0JzogJ2Vycm9yJyxcbiAgICAgICAgJ2ltcG9ydC14L2ltcG9ydHMtZmlyc3QnOiAnZXJyb3InLFxuICAgICAgICAnaW1wb3J0LXgvbmV3bGluZS1hZnRlci1pbXBvcnQnOiAnZXJyb3InLFxuICAgICAgICAnaW1wb3J0LXgvbm8tYWJzb2x1dGUtcGF0aCc6ICdlcnJvcicsXG4gICAgICAgICdpbXBvcnQteC9uby1hbWQnOiAnZXJyb3InLFxuICAgICAgICAnaW1wb3J0LXgvbm8tYW5vbnltb3VzLWRlZmF1bHQtZXhwb3J0JzogJ2Vycm9yJyxcbiAgICAgICAgJ2ltcG9ydC14L25vLWNvbW1vbmpzJzogJ2Vycm9yJyxcbiAgICAgICAgJ2ltcG9ydC14L25vLWN5Y2xlJzogJ2Vycm9yJyxcbiAgICAgICAgJ2ltcG9ydC14L25vLWRlZmF1bHQtZXhwb3J0JzogJ2Vycm9yJyxcbiAgICAgICAgJ2ltcG9ydC14L25vLWRlcHJlY2F0ZWQnOiAnZXJyb3InLFxuICAgICAgICAnaW1wb3J0LXgvbm8tZHVwbGljYXRlcyc6ICdlcnJvcicsXG4gICAgICAgICdpbXBvcnQteC9uby1keW5hbWljLXJlcXVpcmUnOiAnZXJyb3InLFxuICAgICAgICAnaW1wb3J0LXgvbm8tZW1wdHktbmFtZWQtYmxvY2tzJzogJ2Vycm9yJyxcbiAgICAgICAgJ2ltcG9ydC14L25vLWV4dHJhbmVvdXMtZGVwZW5kZW5jaWVzJzogJ2Vycm9yJyxcbiAgICAgICAgJ2ltcG9ydC14L25vLWltcG9ydC1tb2R1bGUtZXhwb3J0cyc6ICdlcnJvcicsXG4gICAgICAgICdpbXBvcnQteC9uby1tdXRhYmxlLWV4cG9ydHMnOiAnZXJyb3InLFxuICAgICAgICAnaW1wb3J0LXgvbm8tbmFtZWQtZGVmYXVsdCc6ICdlcnJvcicsXG4gICAgICAgICdpbXBvcnQteC9uby1uYW1lc3BhY2UnOiAnZXJyb3InLFxuICAgICAgICAnaW1wb3J0LXgvbm8tbm9kZWpzLW1vZHVsZXMnOiAnZXJyb3InLFxuICAgICAgICAnaW1wb3J0LXgvbm8tcmVsYXRpdmUtcGFja2FnZXMnOiAnZXJyb3InLFxuICAgICAgICAnaW1wb3J0LXgvbm8tcmVzdHJpY3RlZC1wYXRocyc6ICdlcnJvcicsXG4gICAgICAgICdpbXBvcnQteC9uby1zZWxmLWltcG9ydCc6ICdlcnJvcicsXG4gICAgICAgICdpbXBvcnQteC9uby11bmFzc2lnbmVkLWltcG9ydCc6IFtcbiAgICAgICAgICAnZXJyb3InLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGFsbG93OiBbXG4gICAgICAgICAgICAgICcqKi8qLmNzcycsXG4gICAgICAgICAgICAgICcqKi8qLnNhc3MnLFxuICAgICAgICAgICAgICAnKiovKi5zY3NzJ1xuICAgICAgICAgICAgXVxuICAgICAgICAgIH1cbiAgICAgICAgXSxcbiAgICAgICAgJ2ltcG9ydC14L25vLXVudXNlZC1tb2R1bGVzJzogJ29mZicsXG4gICAgICAgICdpbXBvcnQteC9uby11c2VsZXNzLXBhdGgtc2VnbWVudHMnOiAnZXJyb3InLFxuICAgICAgICAnaW1wb3J0LXgvbm8td2VicGFjay1sb2FkZXItc3ludGF4JzogJ2Vycm9yJ1xuICAgICAgfVxuICAgIH0sXG4gICAge1xuICAgICAgZmlsZXM6IGNvbnRleHQuc2NyaXB0RmlsZXMsXG4gICAgICBydWxlczoge1xuICAgICAgICAnaW1wb3J0LXgvbm8tbm9kZWpzLW1vZHVsZXMnOiAnb2ZmJ1xuICAgICAgfVxuICAgIH0sXG4gICAge1xuICAgICAgLy8gQSB0ZXN0IHJ1bnMgdW5kZXIgdGhlIHRlc3QgcnVubmVyIGluIE5vZGUgYW5kIGlzIG5ldmVyIGJ1bmRsZWQgaW50byBhbnl0aGluZyB0aGF0IHNoaXBzLlxuICAgICAgZmlsZXM6IGNvbnRleHQudGVzdEZpbGVzLFxuICAgICAgcnVsZXM6IHtcbiAgICAgICAgJ2ltcG9ydC14L25vLW5vZGVqcy1tb2R1bGVzJzogJ29mZidcbiAgICAgIH1cbiAgICB9LFxuICAgIHtcbiAgICAgIGZpbGVzOiBjb250ZXh0LnJvb3RDb25maWdGaWxlcyxcbiAgICAgIHJ1bGVzOiB7XG4gICAgICAgICdpbXBvcnQteC9uby1kZWZhdWx0LWV4cG9ydCc6ICdvZmYnXG4gICAgICB9XG4gICAgfVxuICBdKTtcbn1cblxuZnVuY3Rpb24gZ2V0SW5Ib3VzZVBsdWdpbkNvbmZpZ3MoY29udGV4dDogRXNsaW50Q29uZmlnQ29udGV4dCk6IExpbnRlci5Db25maWdbXSB7XG4gIHJldHVybiBkZWZpbmVDb25maWcoW1xuICAgIHtcbiAgICAgIGZpbGVzOiBjb250ZXh0LmFsbEZpbGVzKCksXG4gICAgICBwbHVnaW5zOiB7XG4gICAgICAgIFtJTl9IT1VTRV9FU0xJTlRfUExVR0lOX05BTUVdOiBpbkhvdXNlRXNsaW50UGx1Z2luXG4gICAgICB9LFxuICAgICAgcnVsZXM6IHtcbiAgICAgICAgJ3R5cGVzY3JpcHQtZGV2LXRvb2xraXQvbm8tYXN5bmMtY2FsbGJhY2stdG8tdW5zYWZlLXJldHVybic6ICdlcnJvcicsXG4gICAgICAgICd0eXBlc2NyaXB0LWRldi10b29sa2l0L25vLWtleXdvcmQtaWRlbnRpZmllcnMnOiAnZXJyb3InLFxuICAgICAgICAvKlxuICAgICAgICAgKiBNZWFzdXJlZCBvdmVyIDMyIHBsdWdpbnMgYnVpbHQgb24gdGhpcyBjb25maWcgYmVmb3JlIGl0IHdhcyB0dXJuZWQgb24gKDIwMjYtMDktMjQpOiAyOSBoYWQgbm8gZmluZGluZyxcbiAgICAgICAgICogdGhlIG90aGVyIHRocmVlIGhhZCA4IGJldHdlZW4gdGhlbSwgZXZlcnkgb25lIGEgZ2VudWluZWx5IGRlYWQgbGluay5cbiAgICAgICAgICovXG4gICAgICAgICd0eXBlc2NyaXB0LWRldi10b29sa2l0L25vLXVucmVzb2x2ZWQtanNkb2MtbGluayc6ICdlcnJvcicsXG4gICAgICAgICd0eXBlc2NyaXB0LWRldi10b29sa2l0L25vLXVudXNlZC1wYXJhbXMtbWVtYmVycyc6ICdlcnJvcicsXG4gICAgICAgICd0eXBlc2NyaXB0LWRldi10b29sa2l0L25vLXVzZWQtdW5kZXJzY29yZS12YXJpYWJsZXMnOiAnZXJyb3InLFxuICAgICAgICAndHlwZXNjcmlwdC1kZXYtdG9vbGtpdC9wYXJhbXMtb3B0aW9ucy1uYW1lLW1hdGNoJzogJ2Vycm9yJyxcbiAgICAgICAgJ3R5cGVzY3JpcHQtZGV2LXRvb2xraXQvcHJlZmVyLWRlZGVudCc6ICdlcnJvcicsXG4gICAgICAgICd0eXBlc2NyaXB0LWRldi10b29sa2l0L3ByZWZlci1sb2dpY2FsLW9wZXJhdG9yLW92ZXItdGVybmFyeSc6ICdlcnJvcicsXG4gICAgICAgICd0eXBlc2NyaXB0LWRldi10b29sa2l0L3ByZWZlci1ub29wLWFzeW5jJzogJ2Vycm9yJyxcbiAgICAgICAgJ3R5cGVzY3JpcHQtZGV2LXRvb2xraXQvcmVhZG9ubHktaW50ZXJmYWNlLW1lbWJlcnMnOiAnZXJyb3InLFxuICAgICAgICAndHlwZXNjcmlwdC1kZXYtdG9vbGtpdC9yZXF1aXJlLW1ldGhvZC10ZW1wbGF0ZSc6ICdlcnJvcicsXG4gICAgICAgICd0eXBlc2NyaXB0LWRldi10b29sa2l0L3JlcXVpcmUtc3VwZXItY2FsbCc6ICdvZmYnXG4gICAgICB9XG4gICAgfVxuICBdKTtcbn1cblxuZnVuY3Rpb24gZ2V0Tm9kZUNvbXBhdENvbmZpZ3MocGFyYW1zOiBHZXROb2RlQ29tcGF0Q29uZmlnc1BhcmFtcyk6IExpbnRlci5Db25maWdbXSB7XG4gIGNvbnN0IHsgY29udGV4dCwgbWluaW11bU5vZGVWZXJzaW9uIH0gPSBwYXJhbXM7XG4gIGNvbnN0IHZlcnNpb25PcHRpb25zID0gbWluaW11bU5vZGVWZXJzaW9uID09PSB1bmRlZmluZWQgPyB7fSA6IHsgdmVyc2lvbjogbWluaW11bU5vZGVWZXJzaW9uIH07XG5cbiAgcmV0dXJuIGRlZmluZUNvbmZpZyhbXG4gICAge1xuICAgICAgZmlsZXM6IGNvbnRleHQuc291cmNlRmlsZXMsXG4gICAgICBpZ25vcmVzOiBbXG4gICAgICAgIC4uLmNvbnRleHQudGVzdEZpbGVzLFxuICAgICAgICAvLyBEZXYtb25seSB0b29saW5nIChidWlsZCwgbGludCwgdmVyc2lvbikgcnVucyB2aWEgYGppdGlgIGluIHRoZSBkZXZlbG9wZXIncyBOb2RlIGVudmlyb25tZW50IGFuZCBuZXZlciBzaGlwcywgc28gdGhlIHNoaXBwZWQgc291cmNlJ3MgTm9kZSBmbG9vciBkb2VzIG5vdCBhcHBseSB0byBpdC5cbiAgICAgICAgLi4uY29udGV4dC5zY3JpcHRGaWxlc1xuICAgICAgXSxcbiAgICAgIHBsdWdpbnM6IHtcbiAgICAgICAgbjogbm9kZVBsdWdpblxuICAgICAgfSxcbiAgICAgIHJ1bGVzOiB7XG4gICAgICAgICduL25vLXVuc3VwcG9ydGVkLWZlYXR1cmVzL2VzLWJ1aWx0aW5zJzogW1xuICAgICAgICAgICdlcnJvcicsXG4gICAgICAgICAgdmVyc2lvbk9wdGlvbnNcbiAgICAgICAgXSxcbiAgICAgICAgJ24vbm8tdW5zdXBwb3J0ZWQtZmVhdHVyZXMvbm9kZS1idWlsdGlucyc6IFtcbiAgICAgICAgICAnZXJyb3InLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIC8vIGBCbG9iYCBhbmQgYEZpbGVgIGFyZSBET00gd2ViIGdsb2JhbHMgcHJlc2VudCBpbiBldmVyeSBzdXBwb3J0ZWQgYnJvd3NlciBlbmdpbmUsIGJ1dCB0aGUgcnVsZSBhbHNvIGtub3dzIHRoZW0gYXMgTm9kZSdzIGV4cGVyaW1lbnRhbCBidWlsdGlucyBhbmQgY2Fubm90IHRlbGwgd2hpY2ggaXMgbWVhbnQuIElnbm9yZSB0aGVtIGdsb2JhbGx5OyBnZW51aW5lbHkgbmV3ZXIgQVBJcyAoZS5nLiBgQWJvcnRTaWduYWwuYW55YCkgc3RheSBmbGFnZ2VkLlxuICAgICAgICAgICAgaWdub3JlczogW1xuICAgICAgICAgICAgICAnQmxvYicsXG4gICAgICAgICAgICAgICdGaWxlJ1xuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIC4uLnZlcnNpb25PcHRpb25zXG4gICAgICAgICAgfVxuICAgICAgICBdXG4gICAgICB9XG4gICAgfVxuICBdKTtcbn1cblxuZnVuY3Rpb24gZ2V0UGVyZmVjdGlvbmlzdENvbmZpZ3MoY29udGV4dDogRXNsaW50Q29uZmlnQ29udGV4dCk6IExpbnRlci5Db25maWdbXSB7XG4gIHJldHVybiBkZWZpbmVDb25maWcoW3tcbiAgICBleHRlbmRzOiBbcGVyZmVjdGlvbmlzdENvbmZpZ3NbJ3JlY29tbWVuZGVkLWFscGhhYmV0aWNhbCddXSxcbiAgICBmaWxlczogY29udGV4dC5hbGxGaWxlcygpXG4gIH1dKTtcbn1cblxuLyoqXG4gKiBMYXlvdXQgYmVsb25ncyB0byBkcHJpbnQuIE9ubHkgdGhlIGBAc3R5bGlzdGljYCBydWxlcyBkcHJpbnQgY2Fubm90IGV4cHJlc3MgYXJlIGtlcHQsIGVhY2ggdmVyaWZpZWQgYnkgZm9ybWF0dGluZyBhXG4gKiB2aW9sYXRpbmcgcHJvYmUgd2l0aCB0aGUgc2hhcmVkIGBkcHJpbnQuanNvbmAgYW5kIGxpbnRpbmcgdGhlIHJlc3VsdDogdGhlIHJ1bGUgc3RpbGwgcmVwb3J0cyB0aGVyZS4gRXZlcnkgb3RoZXJcbiAqIHJ1bGUgb2YgYHN0eWxpc3RpYy5jb25maWdzLnJlY29tbWVuZGVkYCB3YXMgZHJvcHBlZCwgYmVjYXVzZSBkcHJpbnQgZml4ZXMgaXQgYWxyZWFkeSwgb3IgYmVjYXVzZSBpdCBmb3VnaHQgZHByaW50XG4gKiAoYHdyYXAtaWlmZWAsIHdob3NlIHBhcmVudGhlc2VzIGRwcmludCBzdHJpcHMsIGBqc3gtcXVvdGVzYCBhZ2FpbnN0IGBxdW90ZVN0eWxlYCwgYG9wZXJhdG9yLWxpbmVicmVha2AsIGBpbmRlbnRgKS5cbiAqIFRoZSBrZXB0IHJ1bGVzIGFncmVlIHdpdGggdGhlIHNoYXJlZCBQcmV0dGllciBhbmQgQmlvbWUgY29uZmlndXJhdGlvbnMgdG9vLCBzbyBlaXRoZXIgY2FuIG93biBsYXlvdXQgaW5zdGVhZC5cbiAqXG4gKiBAcGFyYW0gY29udGV4dCAtIFRoZSB7QGxpbmsgRXNsaW50Q29uZmlnQ29udGV4dH0uXG4gKiBAcmV0dXJucyBUaGUgY29uZmlncy5cbiAqL1xuZnVuY3Rpb24gZ2V0U3R5bGlzdGljQ29uZmlncyhjb250ZXh0OiBFc2xpbnRDb25maWdDb250ZXh0KTogTGludGVyLkNvbmZpZ1tdIHtcbiAgcmV0dXJuIGRlZmluZUNvbmZpZyhbXG4gICAge1xuICAgICAgZmlsZXM6IGNvbnRleHQuYWxsRmlsZXMoKSxcbiAgICAgIHBsdWdpbnM6IHtcbiAgICAgICAgJ0BzdHlsaXN0aWMnOiBzdHlsaXN0aWNcbiAgICAgIH0sXG4gICAgICBydWxlczoge1xuICAgICAgICAvLyBUaGUgZHByaW50IGBhcnJvd0Z1bmN0aW9uLnVzZVBhcmVudGhlc2VzYCBkZWZhdWx0LCBgbWFpbnRhaW5gLCBrZWVwcyBgeCA9PiB4YC5cbiAgICAgICAgJ0BzdHlsaXN0aWMvYXJyb3ctcGFyZW5zJzogWydlcnJvcicsICdhbHdheXMnXSxcbiAgICAgICAgLy8gTm90IGxheW91dDogaXQgcmVtb3ZlcyBvciBhZGRzIHRoZSBicmFjZXMgdGhlbXNlbHZlcywgd2hpY2ggZHByaW50IG5ldmVyIGRvZXMuXG4gICAgICAgICdAc3R5bGlzdGljL2pzeC1jdXJseS1icmFjZS1wcmVzZW5jZSc6IFtcbiAgICAgICAgICAnZXJyb3InLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGNoaWxkcmVuOiAnbmV2ZXInLFxuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHVuaWNvcm4vbmFtZS1yZXBsYWNlbWVudHMgLS0gYHByb3BFbGVtZW50VmFsdWVzYCBpcyB0aGUgcnVsZSdzIG93biBvcHRpb24gbmFtZS5cbiAgICAgICAgICAgIHByb3BFbGVtZW50VmFsdWVzOiAnYWx3YXlzJyxcbiAgICAgICAgICAgIHByb3BzOiAnbmV2ZXInXG4gICAgICAgICAgfVxuICAgICAgICBdLFxuICAgICAgICAvLyBUaGUgZHByaW50IGZvcm1hdHRlciBrZWVwcyBibGFuayBsaW5lcyBhcyB3cml0dGVuIGFuZCBuZXZlciBpbnNlcnRzIG9uZS5cbiAgICAgICAgJ0BzdHlsaXN0aWMvbGluZXMtYmV0d2Vlbi1jbGFzcy1tZW1iZXJzJzogW1xuICAgICAgICAgICdlcnJvcicsXG4gICAgICAgICAgJ2Fsd2F5cycsXG4gICAgICAgICAge1xuICAgICAgICAgICAgZXhjZXB0QWZ0ZXJPdmVybG9hZDogdHJ1ZSxcbiAgICAgICAgICAgIGV4Y2VwdEFmdGVyU2luZ2xlTGluZTogdHJ1ZVxuICAgICAgICAgIH1cbiAgICAgICAgXSxcbiAgICAgICAgLy8gVGhlIGRwcmludCBmb3JtYXR0ZXIga2VlcHMgYSBudW1lcmljIGxpdGVyYWwncyB0ZXh0LCBzbyBgLjVgIGFuZCBgMi5gIHN0YXkuXG4gICAgICAgICdAc3R5bGlzdGljL25vLWZsb2F0aW5nLWRlY2ltYWwnOiAnZXJyb3InLFxuICAgICAgICAvLyBOb3QgbGF5b3V0OiBpdCBhc2tzIGZvciBwYXJlbnRoZXNlcyB0aGF0IGNoYW5nZSBob3cgdGhlIGV4cHJlc3Npb24gcmVhZHMsIHdoaWNoIGRwcmludCBuZXZlciBhZGRzLlxuICAgICAgICAnQHN0eWxpc3RpYy9uby1taXhlZC1vcGVyYXRvcnMnOiBbXG4gICAgICAgICAgJ2Vycm9yJyxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBhbGxvd1NhbWVQcmVjZWRlbmNlOiB0cnVlLFxuICAgICAgICAgICAgZ3JvdXBzOiBbXG4gICAgICAgICAgICAgIFsnPT0nLCAnIT0nLCAnPT09JywgJyE9PScsICc+JywgJz49JywgJzwnLCAnPD0nXSxcbiAgICAgICAgICAgICAgWycmJicsICd8fCddLFxuICAgICAgICAgICAgICBbJ2luJywgJ2luc3RhbmNlb2YnXVxuICAgICAgICAgICAgXVxuICAgICAgICAgIH1cbiAgICAgICAgXSxcbiAgICAgICAgLy8gVGhlIGRwcmludCBmb3JtYXR0ZXIgcmVwbGFjZXMgdGFiIGluZGVudGF0aW9uIGJ1dCBsZWF2ZXMgYSB0YWIgaW5zaWRlIGEgY29tbWVudC5cbiAgICAgICAgJ0BzdHlsaXN0aWMvbm8tdGFicyc6ICdlcnJvcicsXG4gICAgICAgIC8vIFRoZSBkcHJpbnQgYHF1b3RlUHJvcHNgIGRlZmF1bHQgaXMgYHByZXNlcnZlYC5cbiAgICAgICAgJ0BzdHlsaXN0aWMvcXVvdGUtcHJvcHMnOiBbJ2Vycm9yJywgJ2NvbnNpc3RlbnQtYXMtbmVlZGVkJ10sXG4gICAgICAgIC8vIFRoZSBkcHJpbnQgYHF1b3RlU3R5bGVgIGNvdmVycyBzdHJpbmcgbGl0ZXJhbHMgb25seSwgYW5kIGxlYXZlcyBhIHRlbXBsYXRlIGxpdGVyYWwgd2l0aCBubyBzdWJzdGl0dXRpb24uXG4gICAgICAgICdAc3R5bGlzdGljL3F1b3Rlcyc6IFtcbiAgICAgICAgICAnZXJyb3InLFxuICAgICAgICAgICdzaW5nbGUnLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGFsbG93VGVtcGxhdGVMaXRlcmFsczogJ25ldmVyJ1xuICAgICAgICAgIH1cbiAgICAgICAgXSxcbiAgICAgICAgLy8gVGhlIGRwcmludCBmb3JtYXR0ZXIgYWRkcyB0aGUgc3BhY2UgYWZ0ZXIgYC8vYCBidXQgbm90IGFmdGVyIGAvKmAgb3IgYmVmb3JlIGAqL2AuXG4gICAgICAgICdAc3R5bGlzdGljL3NwYWNlZC1jb21tZW50JzogW1xuICAgICAgICAgICdlcnJvcicsXG4gICAgICAgICAgJ2Fsd2F5cycsXG4gICAgICAgICAge1xuICAgICAgICAgICAgYmxvY2s6IHtcbiAgICAgICAgICAgICAgYmFsYW5jZWQ6IHRydWUsXG4gICAgICAgICAgICAgIGV4Y2VwdGlvbnM6IFsnKiddLFxuICAgICAgICAgICAgICBtYXJrZXJzOiBbJyEnXVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGxpbmU6IHtcbiAgICAgICAgICAgICAgZXhjZXB0aW9uczogWycvJywgJyMnXSxcbiAgICAgICAgICAgICAgbWFya2VyczogWycvJ11cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIF1cbiAgICAgIH1cbiAgICB9XG4gIF0pO1xufVxuXG5mdW5jdGlvbiBnZXRUc2VzbGludENvbmZpZ3MoY29udGV4dDogRXNsaW50Q29uZmlnQ29udGV4dCk6IExpbnRlci5Db25maWdbXSB7XG4gIHJldHVybiBkZWZpbmVDb25maWcoW1xuICAgIHtcbiAgICAgIGV4dGVuZHM6IFtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC14L25vLW5hbWVkLWFzLWRlZmF1bHQtbWVtYmVyIC0tIFRoZSBkZWZhdWx0IGV4cG9ydCBuYW1lIGBfZGVmYXVsdGAgaXMgdG9vIGNvbmZ1c2luZy5cbiAgICAgICAgLi4udHNlc2xpbnQuY29uZmlncy5zdHJpY3RUeXBlQ2hlY2tlZCxcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC14L25vLW5hbWVkLWFzLWRlZmF1bHQtbWVtYmVyIC0tIFRoZSBkZWZhdWx0IGV4cG9ydCBuYW1lIGBfZGVmYXVsdGAgaXMgdG9vIGNvbmZ1c2luZy5cbiAgICAgICAgLi4udHNlc2xpbnQuY29uZmlncy5zdHlsaXN0aWNUeXBlQ2hlY2tlZFxuICAgICAgXSxcbiAgICAgIGZpbGVzOiBjb250ZXh0LmFsbEZpbGVzKCksXG4gICAgICBsYW5ndWFnZU9wdGlvbnM6IHtcbiAgICAgICAgcGFyc2VyT3B0aW9uczoge1xuICAgICAgICAgIGVjbWFGZWF0dXJlczoge1xuICAgICAgICAgICAganN4OiB0cnVlXG4gICAgICAgICAgfSxcbiAgICAgICAgICBwcm9qZWN0U2VydmljZTogdHJ1ZSxcbiAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgdW5pY29ybi9uYW1lLXJlcGxhY2VtZW50cyAtLSBgdHNjb25maWdSb290RGlyYCBpcyBhIGB0eXBlc2NyaXB0LWVzbGludGAgcGFyc2VyIG9wdGlvbi5cbiAgICAgICAgICB0c2NvbmZpZ1Jvb3REaXI6IGdldFJvb3RGb2xkZXIoKSA/PyAnJ1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgcnVsZXM6IHtcbiAgICAgICAgJ0B0eXBlc2NyaXB0LWVzbGludC9leHBsaWNpdC1mdW5jdGlvbi1yZXR1cm4tdHlwZSc6ICdlcnJvcicsXG4gICAgICAgICdAdHlwZXNjcmlwdC1lc2xpbnQvZXhwbGljaXQtbWVtYmVyLWFjY2Vzc2liaWxpdHknOiAnZXJyb3InLFxuICAgICAgICAvLyBUaGUgcnVsZSdzIG93biBgcHJvcGVydHlgIGRlZmF1bHQsIHNwZWxsZWQgYXMgYSBiYXJlIHNldmVyaXR5IHNvIGl0IHN0YXlzIHRoZSBydWxlJ3MgZGVmYXVsdCByYXRoZXIgdGhhbiBhIGNvcHkgb2YgaXQuXG4gICAgICAgIC8vIERvIE5PVCBwYXNzIGAnbWV0aG9kJ2AgZm9yIHRpZGluZXNzOiB0aGUgbWV0aG9kIGZvcm0ga2VlcHMgcGFyYW1ldGVycyBiaXZhcmlhbnQsIGRyb3BzIGByZWFkb25seWAgKHRoZSBydWxlJ3Mgb3duIGZpeGVyXG4gICAgICAgIC8vIG1lc3NhZ2Ugc2F5cyBzbyksIGFuZCBtYWtlcyBgQHR5cGVzY3JpcHQtZXNsaW50L3VuYm91bmQtbWV0aG9kYCBmaXJlIG9uIGV2ZXJ5IGZvcndhcmRlZCBiYWcgbWVtYmVyLCB3aGljaCBpcyB3aGF0IHRoZVxuICAgICAgICAvLyBgdGhpczogdm9pZGAgYm9pbGVycGxhdGUgdXNlZCB0byBwYXkgZm9yLiBEbyBOT1QgZGVsZXRlIHRoZSBsaW5lIGVpdGhlciAtIHRoZSBydWxlIGlzIGluIG5vIHByZXNldCwgc28gdGhhdCB0dXJucyBpdCBvZmYuXG4gICAgICAgICdAdHlwZXNjcmlwdC1lc2xpbnQvbWV0aG9kLXNpZ25hdHVyZS1zdHlsZSc6ICdlcnJvcicsXG4gICAgICAgICdAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZmxvYXRpbmctcHJvbWlzZXMnOiBbJ2Vycm9yJywge1xuICAgICAgICAgIGNoZWNrVGhlbmFibGVzOiB0cnVlXG4gICAgICAgIH1dLFxuICAgICAgICAnQHR5cGVzY3JpcHQtZXNsaW50L25vLWludmFsaWQtdm9pZC10eXBlJzogWydlcnJvcicsIHtcbiAgICAgICAgICBhbGxvd0FzVGhpc1BhcmFtZXRlcjogdHJ1ZVxuICAgICAgICB9XSxcbiAgICAgICAgJ0B0eXBlc2NyaXB0LWVzbGludC9uby10aGlzLWFsaWFzJzogWydlcnJvcicsIHtcbiAgICAgICAgICBhbGxvd2VkTmFtZXM6IFtcbiAgICAgICAgICAgICd0aGF0J1xuICAgICAgICAgIF1cbiAgICAgICAgfV0sXG4gICAgICAgICdAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnMnOiBbXG4gICAgICAgICAgJ2Vycm9yJyxcbiAgICAgICAgICB7XG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgdW5pY29ybi9uYW1lLXJlcGxhY2VtZW50cyAtLSBgYXJnc2AgaXMgYW4gRVNMaW50IHJ1bGUgb3B0aW9uIG5hbWUuXG4gICAgICAgICAgICBhcmdzOiAnYWxsJyxcbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSB1bmljb3JuL25hbWUtcmVwbGFjZW1lbnRzIC0tIGBhcmdzSWdub3JlUGF0dGVybmAgaXMgYSBgdHlwZXNjcmlwdC1lc2xpbnRgIHJ1bGUgb3B0aW9uIG5hbWUuXG4gICAgICAgICAgICBhcmdzSWdub3JlUGF0dGVybjogJ15fJyxcbiAgICAgICAgICAgIGNhdWdodEVycm9yczogJ2FsbCcsXG4gICAgICAgICAgICBjYXVnaHRFcnJvcnNJZ25vcmVQYXR0ZXJuOiAnXl8nLFxuICAgICAgICAgICAgZGVzdHJ1Y3R1cmVkQXJyYXlJZ25vcmVQYXR0ZXJuOiAnXl8nLFxuICAgICAgICAgICAgaWdub3JlUmVzdFNpYmxpbmdzOiB0cnVlLFxuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHVuaWNvcm4vbmFtZS1yZXBsYWNlbWVudHMgLS0gYHZhcnNJZ25vcmVQYXR0ZXJuYCBpcyBhIGB0eXBlc2NyaXB0LWVzbGludGAgcnVsZSBvcHRpb24gbmFtZS5cbiAgICAgICAgICAgIHZhcnNJZ25vcmVQYXR0ZXJuOiAnXl8nXG4gICAgICAgICAgfVxuICAgICAgICBdLFxuICAgICAgICAnQHR5cGVzY3JpcHQtZXNsaW50L3ByZWZlci1yZWFkb25seSc6ICdlcnJvcidcbiAgICAgIH1cbiAgICB9LFxuICAgIHtcbiAgICAgIGZpbGVzOiBjb250ZXh0LnRlc3RGaWxlcyxcbiAgICAgIHJ1bGVzOiB7XG4gICAgICAgICdAdHlwZXNjcmlwdC1lc2xpbnQvZG90LW5vdGF0aW9uJzogWydlcnJvcicsIHtcbiAgICAgICAgICBhbGxvd1ByaXZhdGVDbGFzc1Byb3BlcnR5QWNjZXNzOiB0cnVlLFxuICAgICAgICAgIGFsbG93UHJvdGVjdGVkQ2xhc3NQcm9wZXJ0eUFjY2VzczogdHJ1ZVxuICAgICAgICB9XSxcbiAgICAgICAgJ0B0eXBlc2NyaXB0LWVzbGludC91bmJvdW5kLW1ldGhvZCc6ICdvZmYnXG4gICAgICB9XG4gICAgfSxcbiAgICB7XG4gICAgICBzZXR0aW5nczoge1xuICAgICAgICByZWFjdDoge1xuICAgICAgICAgIHZlcnNpb246ICdkZXRlY3QnXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIF0pO1xufVxuXG5mdW5jdGlvbiBnZXRVbmljb3JuQ29uZmlncyhjb250ZXh0OiBFc2xpbnRDb25maWdDb250ZXh0KTogTGludGVyLkNvbmZpZ1tdIHtcbiAgcmV0dXJuIGRlZmluZUNvbmZpZyhbXG4gICAge1xuICAgICAgZXh0ZW5kczogW3VuaWNvcm4uY29uZmlncy5yZWNvbW1lbmRlZF0sXG4gICAgICBmaWxlczogY29udGV4dC5hbGxGaWxlcygpLFxuICAgICAgcnVsZXM6IHtcbiAgICAgICAgLypcbiAgICAgICAgICogVGhlc2UgZW50cmllcyBhcmUgbm90IGFiYnJldmlhdGlvbnMgdG8gYmUgZXhwYW5kZWQg4oCUIHRoZXkgYXJlIGVzdGFibGlzaGVkIHZvY2FidWxhcnkgaGVyZS5cbiAgICAgICAgICpcbiAgICAgICAgICogQnJhbmQ6IGBkZXZgLCBgbGliYCwgYHV0aWxgL2B1dGlsc2Agc3BlbGwgdGhlIHByb2R1Y3QncyBvd24gbmFtZS4gTGVmdCBvbiwgdGhlIHJ1bGUgcmV3cml0ZXNcbiAgICAgICAgICogYFJlcG9QYXRoc2AgdG8gYE9ic2lkaWFuRGV2ZWxvcG1lbnRVdGlsaXRpZXNSZXBvUGF0aHNgIGFuZCBgZ2V0TGliRGVidWdnZXJgIHRvXG4gICAgICAgICAqIGBnZXRMaWJyYXJ5RGVidWdnZXJgLCByZW5hbWluZyBleHBvcnRlZCBBUEkgYWZ0ZXIgdGhlIHBhY2thZ2UgaXQgYmVsb25ncyB0by5cbiAgICAgICAgICpcbiAgICAgICAgICogQ29udmVudGlvbjogYHBhcmFtc2AgaXMgdGhlIHBhcmFtZXRlci1iYWcgY29udmVudGlvbiwgZW5mb3JjZWQgYnlcbiAgICAgICAgICogYHR5cGVzY3JpcHQtZGV2LXRvb2xraXQvcGFyYW1zLW9wdGlvbnMtbmFtZS1tYXRjaGAsIHdoaWNoIHJlcXVpcmVzIGJhZyB0eXBlcyB0byBiZSBuYW1lZFxuICAgICAgICAgKiBgPE93bmVyPlBhcmFtc2AgLyBgPE93bmVyPk9wdGlvbnNgLiBFeHBhbmRpbmcgaXQgdG8gYFBhcmFtZXRlcnNgIHdvdWxkIHB1dCB0aGUgdHdvIHJ1bGVzIGluIGRpcmVjdFxuICAgICAgICAgKiBjb250cmFkaWN0aW9uIGFuZCBicmVhayAzMDArIGV4cG9ydGVkIHR5cGUgbmFtZXMuXG4gICAgICAgICAqXG4gICAgICAgICAqIEJhcmUga2V5d29yZCBhbmQgY29sbGlkaW5nIGdsb2JhbCBiaW5kaW5ncyB1c2UgYCRuYW1lYCwgZW5mb3JjZWQgYnlcbiAgICAgICAgICogYHR5cGVzY3JpcHQtZGV2LXRvb2xraXQvbm8ta2V5d29yZC1pZGVudGlmaWVyc2A6IGBvYmplY3RgIGJlY29tZXMgYCRvYmplY3RgLCBgc3RyaW5nYCBiZWNvbWVzIGAkc3RyaW5nYCxcbiAgICAgICAgICogYW5kIHNvIG9uLCBldmVuIHdoZW4gbm8gYWJicmV2aWF0aW9uIHdhcyBleHBhbmRlZC4gUHJvcGVydHkga2V5cyBhbmQgYnVpbHRpbiByZWFkcyBzdGF5IGxlZ2FsLlxuICAgICAgICAgKiBBIGJhcmUgYGFyZ3NgLCBgZm5gLCBgc3RyYCwgYG1vZGAgb3IgYGV2dGAgbGlrZXdpc2UgdGFrZXMgYCRhcmd1bWVudHNgLCBgJGZ1bmN0aW9uYCwgYW5kIHNvIG9uLlxuICAgICAgICAgKiBUaGlzIGlzIGRlbGliZXJhdGVseSBOT1QgY29uZmlndXJlZCBhcyBhIGN1c3RvbSByZXBsYWNlbWVudDogdW5pY29ybiBzdWJzdGl0dXRlcyBhdCB0aGUgd29yZCBsZXZlbCBpbnNpZGUgY29tcG91bmQgbmFtZXMsIHNvXG4gICAgICAgICAqIHJlZGlyZWN0aW5nIHRoZSB3aG9sZSBlbnRyeSB0dXJucyBgYXN5bmNGbmAgaW50byBgYXN5bmMkZnVuY3Rpb25gLiBDb21wb3VuZHMgd2FudCB0aGUgcGxhaW4gZXhwYW5zaW9uXG4gICAgICAgICAqIChgYXN5bmNGdW5jdGlvbmApOyBvbmx5IHRoZSBiYXJlLCBnZW51aW5lbHktY29sbGlkaW5nIGlkZW50aWZpZXJzIHRha2UgdGhlIGAkYCBmb3JtLlxuICAgICAgICAgKlxuICAgICAgICAgKiBEb21haW4gd29yZHM6IGBkb2NgL2Bkb2NzYCwgYGVudmAsIGBkaXN0YCBhbmQgYHNyY2AgYXJlIHRoZSBjbGVhcmVyIHNwZWxsaW5nIGluIHRoaXMgY29kZWJhc2UuXG4gICAgICAgICAqIEV4cGFuZGluZyBgZG9jYCBhbHNvIHBpY2tzIHRoZSB3cm9uZyB3b3JkIOKAlCB0aGUgYGFwaS1kb2MtKmAgbW9kdWxlcyBnZW5lcmF0ZSBBUEkgKmRvY3VtZW50YXRpb24qLCBub3RcbiAgICAgICAgICogZG9jdW1lbnRzLiBgc3JjYCBhZGRpdGlvbmFsbHkgY29ycnVwdHMgY29kZTogdGhlIGZpeGVyIHJlbmFtZXMgdGhlIGBTcmNgIG1lbWJlciBvZiB0aGUgZXhwb3J0ZWRcbiAgICAgICAgICogYE9ic2lkaWFuUGx1Z2luUmVwb1BhdGhzYCAvIGBSZXBvUGF0aHNgIGVudW1zIHdoaWxlIGxlYXZpbmcgZXZlcnkgYC5TcmNgIHJlZmVyZW5jZVxuICAgICAgICAgKiBkYW5nbGluZywgYmVjYXVzZSBgY2hlY2tQcm9wZXJ0aWVzYCBleGVtcHRzIHByb3BlcnR5IGFjY2Vzc2VzIGJ1dCBub3QgdGhlIGRlY2xhcmF0aW9ucyB0aGV5IHBvaW50IGF0LlxuICAgICAgICAgKlxuICAgICAgICAgKiBEaXNhYmxpbmcgdGhlIHJlcGxhY2VtZW50IGVudHJpZXMgcHJvdGVjdHMgdGhlc2UgcGVybWFuZW50bHk7IGFuIGBhbGxvd0xpc3RgIHdvdWxkIGluc3RlYWQgbmVlZCBldmVyeVxuICAgICAgICAgKiBhZmZlY3RlZCBpZGVudGlmaWVyIGVudW1lcmF0ZWQgYnkgaGFuZCBhbmQgcmUtZW51bWVyYXRlZCBmb3IgZXZlcnkgbmV3IG9uZS5cbiAgICAgICAgICpcbiAgICAgICAgICogTk9URTogdGhpcyBydWxlJ3MgYXV0b2ZpeCBpcyBOT1QgcmVmZXJlbmNlLWF3YXJlIGZvciBkZWNsYXJhdGlvbnMgdGhhdCBwYXJ0aWNpcGF0ZSBpbiBhIGNvbnRyYWN0IOKAlFxuICAgICAgICAgKiBlbnVtIG1lbWJlcnMsIGludGVyZmFjZSBtZW1iZXJzLCBhbmQgVHlwZVNjcmlwdCBwYXJhbWV0ZXIgcHJvcGVydGllcyAoYGNvbnN0cnVjdG9yKHByaXZhdGUgcmVhZG9ubHlcbiAgICAgICAgICogZWw6IEhUTUxFbGVtZW50KWApIGFyZSByZW5hbWVkIHdoaWxlIGB0aGlzLmVsYCBhbmQgYEVudW0uTWVtYmVyYCByZWZlcmVuY2VzIGFyZSBsZWZ0IGRhbmdsaW5nLiBBcHBseVxuICAgICAgICAgKiBpdHMgcmVwb3J0cyBieSBoYW5kOyBuZXZlciBydW4gYC0tZml4YCBvdmVyIGl0LlxuICAgICAgICAgKi9cbiAgICAgICAgLypcbiAgICAgICAgICogQSBnb29kIHJ1bGUsIGJ1dCBpdHMgZGVmYXVsdCBwcmVmaXhlcyBmb3JjZSB1bmdyYW1tYXRpY2FsIG5hbWVzOiBgbWVtYmVyUGFnZUV4aXN0c2Agd291bGQgYmVjb21lXG4gICAgICAgICAqIGBpc01lbWJlclBhZ2VFeGlzdHNgIHJhdGhlciB0aGFuIGBkb2VzTWVtYmVyUGFnZUV4aXN0YC4gVGhlc2UgZW50cmllcyBFWFRFTkQgdGhlIGRlZmF1bHRzIChgaXNgLFxuICAgICAgICAgKiBgaGFzYCwgYGNhbmAsIGBzaG91bGRgLCAuLi4pIHJhdGhlciB0aGFuIHJlcGxhY2luZyB0aGVtLCBzbyBhIGJvb2xlYW4gd2l0aCBubyBib29sZWFuLXJlYWRpbmcgcHJlZml4XG4gICAgICAgICAqIGF0IGFsbCBpcyBzdGlsbCByZWplY3RlZCAtLSB0aGUgcnVsZSBqdXN0IHN0b3BzIGluc2lzdGluZyB0aGUgcHJlZml4IGNvbWUgZnJvbSBhIHNob3J0ZXIgbGlzdC5cbiAgICAgICAgICpcbiAgICAgICAgICogVGhlIGxpc3QgaXMgYmlkaXJlY3Rpb25hbDogYWRkaW5nIGEgcHJlZml4IGFsc28gYXNzZXJ0cyB0aGF0IGV2ZXJ5dGhpbmcgbmFtZWQgd2l0aCBpdCBJUyBhIGJvb2xlYW4uXG4gICAgICAgICAqIGBjaGVja2AgZWFybnMgaXRzIHBsYWNlIG9uIGJvdGggY291bnRzLCBzaW5jZSB0aGUgaGFuZGZ1bCBvZiBub24tYm9vbGVhbiBgY2hlY2sqYCBuYW1lcyBpdCBzdXJmYWNlZFxuICAgICAgICAgKiB3ZXJlIGdlbnVpbmVseSBtaXMtbmFtZWQgKHZvaWQgZnVuY3Rpb25zIHRoYXQgdGhyb3csIGEgcHJvYmUgcmV0dXJuaW5nIGFuIEhUVFAgc3RhdHVzKS4gYHRlc3RgIHdhc1xuICAgICAgICAgKiBtZWFzdXJlZCBhbmQgcmVqZWN0ZWQ6IGl0IHdvdWxkIHZhbGlkYXRlIGZpdmUgYHRlc3QqYCBsaW5rIHByZWRpY2F0ZXMgdGhhdCByZWFkIGJldHRlciBhcyBgaXMqYFxuICAgICAgICAgKiBhbnl3YXksIGF0IHRoZSBjb3N0IG9mIHJlbmFtaW5nIFNDUkVBTUlOR19DQVNFIHRlc3QgZml4dHVyZXMgYW5kIHRoZSBgdGVzdENvdmVyYWdlYC9gdGVzdFdhdGNoYFxuICAgICAgICAgKiBydW5uZXJzIHRoYXQgZGVsaWJlcmF0ZWx5IG1pcnJvciB0aGUgYHRlc3Q6Y292ZXJhZ2VgL2B0ZXN0OndhdGNoYCBucG0gc2NyaXB0cy5cbiAgICAgICAgICovXG4gICAgICAgICd1bmljb3JuL2NvbnNpc3RlbnQtYm9vbGVhbi1uYW1lJzogW1xuICAgICAgICAgICdlcnJvcicsXG4gICAgICAgICAge1xuICAgICAgICAgICAgcHJlZml4ZXM6IHtcbiAgICAgICAgICAgICAgYWxsb3dzOiB0cnVlLFxuICAgICAgICAgICAgICBjaGVjazogdHJ1ZSxcbiAgICAgICAgICAgICAgY29udGFpbnM6IHRydWUsXG4gICAgICAgICAgICAgIGRvZXM6IHRydWUsXG4gICAgICAgICAgICAgIGluY2x1ZGVzOiB0cnVlLFxuICAgICAgICAgICAgICBtdXN0OiB0cnVlLFxuICAgICAgICAgICAgICBuZWVkczogdHJ1ZSxcbiAgICAgICAgICAgICAgc3VwcG9ydHM6IHRydWVcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIF0sXG4gICAgICAgIC8qXG4gICAgICAgICAqIFVuc2F0aXNmaWFibGUgYWxvbmdzaWRlIGBwZXJmZWN0aW9uaXN0L3NvcnQtY2xhc3Nlc2AsIHdoaWNoIGlzIGNvbmZpZ3VyZWQgaGVyZSBhcyBhIHBsYWluXG4gICAgICAgICAqIGFscGhhYmV0aWNhbCBzb3J0LiBUaGlzIHJ1bGUgd2FudHMgYSBjYXRlZ29yeSBvcmRlciAoYWxsIGZpZWxkcywgdGhlbiB0aGUgY29uc3RydWN0b3IsIHRoZW4gYWxsXG4gICAgICAgICAqIG1ldGhvZHMpLCBzbyB0aGUgZXh0cmVtZWx5IGNvbW1vbiBgcHJpdmF0ZSBfeGAgZmllbGQgcGFpcmVkIHdpdGggYSBgcHVibGljIGdldCB4KClgIGFjY2Vzc29yIGlzXG4gICAgICAgICAqIHJlamVjdGVkIGJ5IHdoaWNoZXZlciBydWxlIGxvc2VzOiBhbHBoYWJldGljYWxseSB0aGUgYWNjZXNzb3IgcHJlY2VkZXMgdGhlIGZpZWxkLCBieSBjYXRlZ29yeSB0aGVcbiAgICAgICAgICogZmllbGQgcHJlY2VkZXMgdGhlIGFjY2Vzc29yLiBVbmxpa2UgYHByZWZlci1nbG9iYWwtdGhpc2AgdGhlIGNsYXNoIHByb2R1Y2VzIG5vXG4gICAgICAgICAqIGBFU0xpbnRDaXJjdWxhckZpeGVzV2FybmluZ2AsIG9ubHkgYmVjYXVzZSB0aGlzIHJ1bGUgc2hpcHMgbm8gZml4ZXIgLS0gYm90aCBydWxlcyBhcmUgYGVycm9yYCwgc28gbm9cbiAgICAgICAgICogYXJyYW5nZW1lbnQgb2YgbWVtYmVycyBzYXRpc2ZpZXMgdGhlbSBib3RoLiBUaGUgYWxwaGFiZXRpY2FsIHNvcnQgaXMgdGhlIG9uZSBhbHJlYWR5IHJvbGxlZCBvdXRcbiAgICAgICAgICogYWNyb3NzIHRoZSBwbHVnaW5zIGNvbnN1bWluZyB0aGlzIGNvbmZpZywgc28gaXQga2VlcHMgcHJlY2VkZW5jZS4gUmUtZW5hYmxpbmcgdGhpcyBydWxlIHdvdWxkIG1lYW5cbiAgICAgICAgICogZ2l2aW5nIGBwZXJmZWN0aW9uaXN0L3NvcnQtY2xhc3Nlc2AgYSBtYXRjaGluZyBgZ3JvdXBzYCBvcHRpb24gYW5kIHJlb3JkZXJpbmcgZXZlcnkgY2xhc3MuXG4gICAgICAgICAqL1xuICAgICAgICAndW5pY29ybi9jb25zaXN0ZW50LWNsYXNzLW1lbWJlci1vcmRlcic6ICdvZmYnLFxuICAgICAgICAvKlxuICAgICAgICAgKiBFdmVyeSByZXBvcnQgaXMgYG5ldyBFcnJvcigpLnN0YWNrYCwgd2hpY2ggY2FwdHVyZXMgYSBzdGFjayB0cmFjZSBhbmQgbmV2ZXIgc3VyZmFjZXMgaXRzIG1lc3NhZ2UuXG4gICAgICAgICAqIFRoZSBydWxlIGNhbm5vdCB0ZWxsIHRoYXQgZnJvbSBhbiBlcnJvciB0aGF0IGlzIGFjdHVhbGx5IHRocm93biBhdCBhIHVzZXIuXG4gICAgICAgICAqXG4gICAgICAgICAqIE5vIGJhcmUgYG5ldyBBZ2dyZWdhdGVFcnJvcihlcnJvcnMpYCBpcyBsZWZ0IGZvciBpdCB0byBjYXRjaDogZXZlcnkgc2l0ZSBub3cgYnVpbGRzIGl0cyBhZ2dyZWdhdGVcbiAgICAgICAgICogdGhyb3VnaCBgY3JlYXRlQWdncmVnYXRlRXJyb3JgLCB3aGljaCBnaXZlcyBpdCBhIG1lc3NhZ2UgdGhhdCBuYW1lcyB0aGUgZmFpbHVyZS4gQW4gZW1wdHkgb25lIGlzXG4gICAgICAgICAqIGxvc3N5IGluIGEgd2F5IHRoYXQgb25seSBzaG93cyB1cCBvdXRzaWRlIHRoaXMgbGlicmFyeSDigJQgYGVycm9yVG9TdHJpbmdgIHdhbGtzIGBlcnJvcnNgIGFuZCBwcmludHNcbiAgICAgICAgICogdGhlIHdob2xlIHRyZWUsIHdoaWxlIGV2ZXJ5dGhpbmcgcmVhZGluZyBgbWVzc2FnZWAgc2VlcyBhbiBlbXB0eSBzZW50ZW5jZS4gVGhlIGhlbHBlciBsaXZlcyBpbiBpdHNcbiAgICAgICAgICogb3duIGxlYWYgYGFnZ3JlZ2F0ZS1lcnJvci50c2AgcmF0aGVyIHRoYW4gaW4gYGVycm9yLnRzYCBwcmVjaXNlbHkgc28gdGhhdCBgZGlzcG9zYWJsZS50c2AgY2FuIHJlYWNoXG4gICAgICAgICAqIGl0LCB3aGljaCBpdCBjb3VsZCBub3Qgd2hpbGUgdGhlIG9ubHkgY29weSBzYXQgaW4gYSBtb2R1bGUgaW1wb3J0aW5nIGl0IGJhY2suXG4gICAgICAgICAqL1xuICAgICAgICAndW5pY29ybi9lcnJvci1tZXNzYWdlJzogJ29mZicsXG4gICAgICAgIC8qXG4gICAgICAgICAqIFRoZSBkZWZhdWx0IHN0eWxlIGZvciBgbm9kZTpwYXRoYCBpcyBhIGRlZmF1bHQgaW1wb3J0LCBidXQgdGhpcyBjb2RlYmFzZSBpbXBvcnRzIGl0cyBtZW1iZXJzIGJ5IG5hbWVcbiAgICAgICAgICogdGhyb3VnaG91dCwgY29uc2lzdGVudGx5IHdpdGggZXZlcnkgb3RoZXIgYG5vZGU6YCBtb2R1bGUgaXQgdXNlcy4gQ29uZmlndXJlIHRoZSBydWxlIHRvIGVuZm9yY2UgdGhlXG4gICAgICAgICAqIHN0eWxlIGFjdHVhbGx5IGluIHVzZSByYXRoZXIgdGhhbiBhbm5vdGF0ZSAxNyBzaXRlcyB0aGF0IGFyZSBub3QgZ29pbmcgdG8gY2hhbmdlLlxuICAgICAgICAgKi9cbiAgICAgICAgJ3VuaWNvcm4vaW1wb3J0LXN0eWxlJzogW1xuICAgICAgICAgICdlcnJvcicsXG4gICAgICAgICAge1xuICAgICAgICAgICAgc3R5bGVzOiB7XG4gICAgICAgICAgICAgIC8vIEtleWVkIGJ5IHRoZSBVTlBSRUZJWEVEIG1vZHVsZSBuYW1lOiB0aGUgcnVsZSdzIG93biB0YWJsZSB1c2VzIGBwYXRoYCwgc28gYSBgbm9kZTpwYXRoYCBrZXkgbmV2ZXIgbWF0Y2hlcy5cbiAgICAgICAgICAgICAgcGF0aDoge1xuICAgICAgICAgICAgICAgIG5hbWVkOiB0cnVlXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIF0sXG4gICAgICAgIC8qXG4gICAgICAgICAqIFRoZSBydWxlIGNvdW50cyBjb25zdHJ1Y3RvciBjYWxscyBhbmQgY291bnRzIHRocm91Z2ggYXJyYXkgYW5kIG9iamVjdCBsaXRlcmFscywgc28gaXRzIGRlZmF1bHQgb2YgM1xuICAgICAgICAgKiByZXBvcnRzIG9yZGluYXJ5IGNvbXBvc2l0aW9uOiBgUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKCdib29tJykpYCBpbnNpZGUgYW4gYXNzZXJ0aW9uLCBhIHRlc3QgZml4dHVyZVxuICAgICAgICAgKiBidWlsdCBhcyBgY3JlYXRlVHlwZUluZm8oeyBtZXRob2RzOiBbY3JlYXRlTWVtYmVySW5mbyh7IC4uLiB9KV0gfSlgLCBgdGhpcy5hZGRDaGlsZChuZXcgQyh0aGlzLmFwcCkpYFxuICAgICAgICAgKiBpbnNpZGUgYSBwYXJhbXMgYmFnLiBSYWlzaW5nIHRoZSBsaW1pdCBieSBvbmUgY2xlYXJzIGV2ZXJ5IHJlcG9ydCBoZXJlIHdoaWxlIHN0aWxsIGNhdGNoaW5nIHRoZVxuICAgICAgICAgKiBnZW51aW5lbHkgdW5yZWFkYWJsZSBuZXN0aW5nIHRoZSBydWxlIGlzIGZvci5cbiAgICAgICAgICovXG4gICAgICAgICd1bmljb3JuL21heC1uZXN0ZWQtY2FsbHMnOiBbXG4gICAgICAgICAgJ2Vycm9yJyxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBtYXg6IDRcbiAgICAgICAgICB9XG4gICAgICAgIF0sXG4gICAgICAgICd1bmljb3JuL25hbWUtcmVwbGFjZW1lbnRzJzogW1xuICAgICAgICAgICdlcnJvcicsXG4gICAgICAgICAge1xuICAgICAgICAgICAgLypcbiAgICAgICAgICAgICAqIFByb3BlcnR5IGFuZCBtZW1iZXIgbmFtZXMgYXJlIGNoZWNrZWQgdG9vLCBzbyBhbiBhYmJyZXZpYXRpb24gY2Fubm90IHN1cnZpdmUgYnkgbGl2aW5nIG9uIGFuXG4gICAgICAgICAgICAgKiBvYmplY3QgcmF0aGVyIHRoYW4gaW4gYSB2YXJpYWJsZS5cbiAgICAgICAgICAgICAqXG4gICAgICAgICAgICAgKiBUaGUgcnVsZSBpcyBwdXJlbHkgc3ludGFjdGljOiBpdCBjYW5ub3QgdGVsbCBhIG1lbWJlciB3ZSBkZWNsYXJlIGZyb20gb25lIGJlbG9uZ2luZyB0byBhXG4gICAgICAgICAgICAgKiBkZXBlbmRlbmN5LCBhbmQgaXQgb2ZmZXJzIG5vIGF1dG9maXggZm9yIHByb3BlcnRpZXMgKG1lYXN1cmVkOiA2ODEgaGl0cywgMCB3aXRoIGEgZml4ZXIpLiBTaXRlc1xuICAgICAgICAgICAgICogbmFtaW5nIGEgZm9yZWlnbiBtZW1iZXIgLS0gYERvbUVsZW1lbnRJbmZvLmF0dHJgLCBgRXZhbEluT2JzaWRpYW5QYXJhbXMuZm5gLCBhbmQgdGhlIGxpa2UgLS0gYXJlXG4gICAgICAgICAgICAgKiB0aGVyZWZvcmUgaW1wb3NzaWJsZSB0byBzYXRpc2Z5IGFuZCBjYXJyeSBhbiBpbmxpbmUgZGlzYWJsZSwgc28gZXZlcnl0aGluZyBzdGlsbCByZXBvcnRlZCBpcyBvdXJzXG4gICAgICAgICAgICAgKiB0byByZW5hbWUuXG4gICAgICAgICAgICAgKlxuICAgICAgICAgICAgICogV2hlbiByZW5hbWluZyB0aGUgcmVzdCwgbm90ZSB0aGF0IGB0c2NgIGFsb25lIGlzIE5PVCBhIHN1ZmZpY2llbnQgZ2F0ZTogb2JqZWN0LWxpdGVyYWwga2V5cyBpblxuICAgICAgICAgICAgICogbG9vc2VseSB0eXBlZCBwb3NpdGlvbnMgKGBleHBlY3QuYXJyYXlDb250YWluaW5nKFt7IGJhdGNoZWRBcmd1bWVudHM6IC4uLiB9XSlgKSBhcmUgbm90IGNvbnRleHR1YWxseVxuICAgICAgICAgICAgICogdHlwZWQsIHNvIGEgcmVuYW1lIGxlYXZlcyB0aGVtIGJlaGluZCBhbmQgYnJlYWtzIHRoZSBzdWl0ZSB3aGVyZSB0aGUgdHlwZSBjaGVja2VyIHNlZXMgbm90aGluZy5cbiAgICAgICAgICAgICAqIFJlbmFtZSBpbiBzbWFsbCBiYXRjaGVzIHdpdGggdGhlIGZ1bGwgdGVzdCBydW4gaW4gdGhlIGxvb3AuXG4gICAgICAgICAgICAgKlxuICAgICAgICAgICAgICogVGhlIGRpc2FibGVkIHJlcGxhY2VtZW50cyBiZWxvdyBhcmUgZXN0YWJsaXNoZWQgdm9jYWJ1bGFyeSByYXRoZXIgdGhhbiBhYmJyZXZpYXRpb25zIHRvIGJlXG4gICAgICAgICAgICAgKiBleHBhbmRlZC4gYGVsYCBpcyBleGVtcHQgYmVjYXVzZSBPYnNpZGlhbiBuYW1lcyBldmVyeSBlbGVtZW50IG1lbWJlciB0aGF0IHdheSAtLSBgY29udGFpbmVyRWxgLFxuICAgICAgICAgICAgICogYGNvbnRlbnRFbGAsIGBpbnB1dEVsYCwgYHNlbGVjdEVsYCAtLSBzbyBleHBhbmRpbmcgb3VycyB0byBgKkVsZW1lbnRgIHdvdWxkIGxlYXZlIG91ciBjb21wb25lbnRzXG4gICAgICAgICAgICAgKiByZWFkaW5nIGluY29uc2lzdGVudGx5IGJlc2lkZSB0aGUgT2JzaWRpYW4gb25lcyB0aGV5IHNpdCBuZXh0IHRvLiBEaXNhYmxpbmcgdGhlIHJlcGxhY2VtZW50IGFsc29cbiAgICAgICAgICAgICAqIGNvdmVycyBjb21wb3VuZCBuYW1lcywgd2hpY2ggaXMgNzIgc2l0ZXMgdGhhdCB3b3VsZCBvdGhlcndpc2UgZWFjaCBuZWVkIGFuIGlubGluZSBkaXNhYmxlLlxuICAgICAgICAgICAgICpcbiAgICAgICAgICAgICAqIGByZWZgIGlzIGV4ZW1wdCBmb3IgdGhlIHNhbWUgcmVhc29uOiBgQXN5bmNFdmVudFJlZmAgaXMgdGhlIGFzeW5jIGNvdW50ZXJwYXJ0IG9mIE9ic2lkaWFuJ3NcbiAgICAgICAgICAgICAqIGBFdmVudFJlZmAsIGhhbmRlZCB0byB0aGUgc2FtZSBgb2ZmcmVmYCAvIGByZWdpc3RlckV2ZW50YCBzaGFwZXMsIHNvIHRoZSB0d28gbmFtZXMgaGF2ZSB0byBtYXRjaFxuICAgICAgICAgICAgICogdG8gcmVhZCBhcyBhIHBhaXIuXG4gICAgICAgICAgICAgKi9cbiAgICAgICAgICAgIGNoZWNrUHJvcGVydGllczogdHJ1ZSxcbiAgICAgICAgICAgIHJlcGxhY2VtZW50czoge1xuICAgICAgICAgICAgICAvKlxuICAgICAgICAgICAgICAgKiBgYXR0cmAgLyBgYXR0cnNgIGFyZSBPYnNpZGlhbidzIG93bjogYGNyZWF0ZUVsKCdhJywgeyBhdHRyOiB7IC4uLiB9IH0pYCB0YWtlcyB0aGVtIGJ5IHRob3NlXG4gICAgICAgICAgICAgICAqIG5hbWVzIG9uIGBEb21FbGVtZW50SW5mb2AsIHNvIG91cnMgaGF2ZSB0byBtYXRjaCB0byBiZSBwYXNzZWQgdGhyb3VnaC4gYHByb3BzYCBpcyB0aGVcbiAgICAgICAgICAgICAgICogdW5pdmVyc2FsIGNvbXBvbmVudCB2b2NhYnVsYXJ5LCBleGVtcHQgZm9yIHRoZSBzYW1lIHJlYXNvbiBgcGFyYW1zYCBpcy5cbiAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgIGF0dHI6IGZhbHNlLFxuICAgICAgICAgICAgICBhdHRyczogZmFsc2UsXG4gICAgICAgICAgICAgIGRldjogZmFsc2UsXG4gICAgICAgICAgICAgIC8qXG4gICAgICAgICAgICAgICAqIEV2ZXJ5IGBkaXJgIGhlcmUgaXMgYSBmaWxlc3lzdGVtIGRpcmVjdG9yeSwgbmV2ZXIgYSBkaXJlY3Rpb24sIHNvIHRoZSBydWxlIGlzIG5hcnJvd2VkIHRvIHRoZVxuICAgICAgICAgICAgICAgKiBvbmUgZXhwYW5zaW9uIHJhdGhlciB0aGFuIGxlZnQgb2ZmZXJpbmcgYSBjaG9pY2UgaXQgY2Fubm90IG1ha2UuXG4gICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgdW5pY29ybi9uYW1lLXJlcGxhY2VtZW50cyAtLSBUaGlzIGlzIHRoZSBydWxlJ3Mgb3duIHJlcGxhY2VtZW50IGtleSwgd2hpY2ggaGFzIHRvIGJlIHNwZWxsZWQgdGhlIHdheSB0aGUgcnVsZSByZWFkcyBpdC5cbiAgICAgICAgICAgICAgZGlyOiB7XG4gICAgICAgICAgICAgICAgZGlyZWN0aW9uOiBmYWxzZSxcbiAgICAgICAgICAgICAgICBkaXJlY3Rvcnk6IHRydWVcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgZGlzdDogZmFsc2UsXG4gICAgICAgICAgICAgIGRvYzogZmFsc2UsXG4gICAgICAgICAgICAgIGRvY3M6IGZhbHNlLFxuICAgICAgICAgICAgICBlbDogZmFsc2UsXG4gICAgICAgICAgICAgIGVudjogZmFsc2UsXG4gICAgICAgICAgICAgIGxpYjogZmFsc2UsXG4gICAgICAgICAgICAgIHBhcmFtczogZmFsc2UsXG4gICAgICAgICAgICAgIHByb3BzOiBmYWxzZSxcbiAgICAgICAgICAgICAgcmVmOiBmYWxzZSxcbiAgICAgICAgICAgICAgcmVmczogZmFsc2UsXG4gICAgICAgICAgICAgIHNyYzogZmFsc2UsXG4gICAgICAgICAgICAgIHV0aWw6IGZhbHNlLFxuICAgICAgICAgICAgICB1dGlsczogZmFsc2VcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIF0sXG4gICAgICAgIC8qXG4gICAgICAgICAqIFRoZSBuZXh0IHNpeCBydWxlcyBhbGwgc3VnZ2VzdCBhbiBBUEkgbmV3ZXIgdGhhbiB0aGlzIHByb2plY3QncyBgbGliYCAoYEVTMjAyMmApLCBzbyBmb2xsb3dpbmcgYW55IG9mXG4gICAgICAgICAqIHRoZW0gZmFpbHMgdG8gY29tcGlsZS4gVGhlIE9ic2lkaWFuIHBsdWdpbiBsYXllciB0YWtlcyB0aGUgZmxvb3IgZnJvbSB0aGUgb2xkZXN0IE9ic2lkaWFuIGluc3RhbGxlciB0aGF0XG4gICAgICAgICAqIGNhbiBzdGlsbCBydW4gY3VycmVudCBPYnNpZGlhbiwgd2hpY2ggcmVjb3JkcyBgZWNtYVNjcmlwdFZlcnNpb246IFwiRVMyMDIyXCJgLiBFYWNoIGlzIG9mZiBhdCB0aGUgY29uZmlnXG4gICAgICAgICAqIGxldmVsIHJhdGhlciB0aGFuIGFubm90YXRlZCBwZXIgc2l0ZSwgYmVjYXVzZSBub25lIGNhbiBldmVyIGJlIHNhdGlzZmllZCB3aGlsZSB0aGF0IGZsb29yIGhvbGRzLiBSZXZpc2l0XG4gICAgICAgICAqIHRoZW0gdG9nZXRoZXIgaWYgdGhlIGZsb29yIG1vdmVzLlxuICAgICAgICAgKlxuICAgICAgICAgKiBgQXJyYXkjdG9SZXZlcnNlZGAgYW5kIGBBcnJheSN0b1NvcnRlZGAgYXJlIEVTMjAyMy5cbiAgICAgICAgICovXG4gICAgICAgICd1bmljb3JuL25vLWFycmF5LXJldmVyc2UnOiAnb2ZmJyxcbiAgICAgICAgJ3VuaWNvcm4vbm8tYXJyYXktc29ydCc6ICdvZmYnLFxuICAgICAgICAvKlxuICAgICAgICAgKiBgY29udGludWVgIGluc2lkZSBhIG5lc3RlZCBsb29wIGlzIG9yZGluYXJ5LCByZWFkYWJsZSBjb250cm9sIGZsb3cgaGVyZS4gVGhlIHJ1bGUncyByZW1lZHkgaXMgdG9cbiAgICAgICAgICogZXh0cmFjdCBldmVyeSBzdWNoIGxvb3AgaW50byBpdHMgb3duIGZ1bmN0aW9uLCB3aGljaCBzcHJlYWRzIG9uZSBjb2hlcmVudCB0cmF2ZXJzYWwgYWNyb3NzIHR3b1xuICAgICAgICAgKiBkZWNsYXJhdGlvbnMgd2l0aG91dCBtYWtpbmcgYW55dGhpbmcgY2xlYXJlci5cbiAgICAgICAgICovXG4gICAgICAgICd1bmljb3JuL25vLWJyZWFrLWluLW5lc3RlZC1sb29wJzogJ29mZicsXG4gICAgICAgIC8qXG4gICAgICAgICAqIFRoZSBydWxlIGNhbm5vdCBzZWUgdGhyb3VnaCBhIGhvaXN0ZWQgZnVuY3Rpb24gZGVjbGFyYXRpb24sIHNvIGl0IHRyZWF0cyBhIGJpbmRpbmcgdGhhdCBhIG5lc3RlZFxuICAgICAgICAgKiBmdW5jdGlvbiBhbHJlYWR5IHJlYWQgYXMgdW51c2VkIGJlZm9yZSB0aGUgZXhpdC4gSW4gYHJ1bldpdGhUaW1lb3V0YCB0aGF0IGlzIGBsZXQgaXNDb21wbGV0ZWRgLCB3aGljaFxuICAgICAgICAgKiBgcnVuKClgIGFuZCBgaW5uZXJUaW1lb3V0KClgIGJvdGggdG91Y2ggd2hpbGUgdGhlIGBQcm9taXNlLnJhY2VgIGFib3ZlIHRoZSBleGl0IGlzIHN0aWxsIHJ1bm5pbmcgLS1cbiAgICAgICAgICogbW92aW5nIHRoZSBkZWNsYXJhdGlvbiBwYXN0IHRoZSBleGl0LCBhcyB0aGUgcnVsZSBhc2tzLCB3b3VsZCBsZWF2ZSB0aG9zZSByZWFkcyBpbiB0aGUgdGVtcG9yYWwgZGVhZFxuICAgICAgICAgKiB6b25lLiBJdHMgb3duIGZpeGVyIGRlY2xpbmVzIGFsbCAxNSBzaXRlcyBmb3IgdGhlIHNhbWUgcmVhc29uIGl0IGNhbm5vdCBwcm92ZSB0aGVtIHNhZmUsIHNvIGZvbGxvd2luZ1xuICAgICAgICAgKiB0aGUgcnVsZSBpcyBlbnRpcmVseSBtYW51YWwuIFdoYXQgaXMgbGVmdCBhZnRlciB0aGF0IGlzIHBsYWNlbWVudCBzdHlsZTogdGhlIHJlbWFpbmluZyByZXBvcnRzIGFyZVxuICAgICAgICAgKiBuYW1lZCBjb25zdGFudHMgYW5kIGRlcml2ZWQgcGF0aHMgZGVsaWJlcmF0ZWx5IGdyb3VwZWQgYXQgdGhlIHRvcCBvZiBhIGZ1bmN0aW9uLCBhbmQgcHVzaGluZyBlYWNoIG9uZVxuICAgICAgICAgKiBiZWxvdyB0aGUgZmlyc3QgZ3VhcmQgc3BsaXRzIGEgY29oZXNpdmUgYmxvY2sgdG8gbm8gYmVuZWZpdC4gVGhlIHRocmVlIHNpdGVzIHdoZXJlIGRlZmVycmluZyBza2lwcGVkXG4gICAgICAgICAqIHJlYWwgd29yayAoYSBzZWNvbmQgYGNvbXB1dGVOZWVkZWRFeHBvc3VyZWAgd2FsaywgYSBgdG9Kc29uYCBzZXJpYWxpemF0aW9uLCBhbiBgZW5zdXJlTGZFbmRpbmdzYCBwYXNzKVxuICAgICAgICAgKiB3ZXJlIGFwcGxpZWQgYnkgaGFuZCBpbnN0ZWFkLlxuICAgICAgICAgKi9cbiAgICAgICAgJ3VuaWNvcm4vbm8tZGVjbGFyYXRpb25zLWJlZm9yZS1lYXJseS1leGl0JzogJ29mZicsXG4gICAgICAgIC8qXG4gICAgICAgICAqIEFzc2lnbmluZyBvbnRvIHRoZSBnbG9iYWwgb2JqZWN0IGlzIGhvdyB0aGlzIGxpYnJhcnkgaW5zdGFsbHMgYW5kIHJlc3RvcmVzIHRlc3QgZG91YmxlcywgYW5kIGhvdyBhXG4gICAgICAgICAqIGZldyBPYnNpZGlhbi1ydW50aW1lIGdsb2JhbHMgYXJlIHJlYWNoZWQgYXQgYWxsLiBUaGUgcnVsZSBjYW5ub3Qgc2VwYXJhdGUgdGhhdCBmcm9tIGFuIGFjY2lkZW50YWxcbiAgICAgICAgICogZ2xvYmFsIHdyaXRlLCBhbmQgaXQgaGFzIG5vIGZpeGVyLlxuICAgICAgICAgKi9cbiAgICAgICAgJ3VuaWNvcm4vbm8tZ2xvYmFsLW9iamVjdC1wcm9wZXJ0eS1hc3NpZ25tZW50JzogJ29mZicsXG4gICAgICAgIC8vIGBudWxsYCBpcyBsb2FkLWJlYXJpbmcgaGVyZTogYW4gb3B0aW9uYWwgY29sbGFib3JhdG9yIGlzIG1vZGVsbGVkIGFzIGEgcmVxdWlyZWQgYG51bGwgfCBYYCBmaWVsZCByYXRoZXIgdGhhbiBhbiBvcHRpb25hbCBgWGAsIHNvIGBudWxsYCBhbmQgYHVuZGVmaW5lZGAgYXJlIG5vdCBpbnRlcmNoYW5nZWFibGUuXG4gICAgICAgIC8qXG4gICAgICAgICAqIFRoZSBydWxlJ3MgbGlzdCBvZiBzdGFuZGFyZCBgU3ltYm9sYCBwcm9wZXJ0aWVzIHByZWRhdGVzIGV4cGxpY2l0IHJlc291cmNlIG1hbmFnZW1lbnQsIHNvIGl0IHJlcG9ydHNcbiAgICAgICAgICogYFN5bWJvbC5kaXNwb3NlYCBhbmQgYFN5bWJvbC5hc3luY0Rpc3Bvc2VgIGFzIG5vbi1zdGFuZGFyZC4gQm90aCBhcmUgcGFydCBvZiB0aGUgbGFuZ3VhZ2UgdGhhdCB0aGlzXG4gICAgICAgICAqIGxpYnJhcnkgaXMgYnVpbHQgb24gLS0gMTE0IGZpbGVzIGhlcmUgdXNlIGB1c2luZ2AgZGVjbGFyYXRpb25zLCBhbmQgdGhlIGRpc3Bvc2FibGUgdHlwZXMgYXJlIGFcbiAgICAgICAgICogcHVibGljIHBhcnQgb2YgaXRzIHN1cmZhY2UgLS0gc28gYWxsIDU5IHJlcG9ydHMgYXJlIHRoZSBydWxlIGJlaW5nIG91dCBvZiBkYXRlIHJhdGhlciB0aGFuIGEgZmluZGluZy5cbiAgICAgICAgICovXG4gICAgICAgICd1bmljb3JuL25vLW5vbnN0YW5kYXJkLWJ1aWx0aW4tcHJvcGVydGllcyc6ICdvZmYnLFxuICAgICAgICAndW5pY29ybi9uby1udWxsJzogJ29mZicsXG4gICAgICAgIC8qXG4gICAgICAgICAqIFR5cGVTY3JpcHQncyBleHBsaWNpdCBgdGhpc2AgcGFyYW1ldGVyIChgZnVuY3Rpb24gZ2V0KHRoaXM6IEhvbGRlcikgeyByZXR1cm4gdGhpcy52YWx1ZTsgfWApIG1ha2VzXG4gICAgICAgICAqIGB0aGlzYCBvdXRzaWRlIGEgY2xhc3MgYm90aCBsZWdhbCBhbmQgdHlwZS1jaGVja2VkLCBidXQgdGhlIHJ1bGUgaXMgc3ludGFjdGljIGFuZCBmbGFncyBpdCBpZGVudGljYWxseVxuICAgICAgICAgKiB0byBhIGdlbnVpbmVseSB1bmJvdW5kIGB0aGlzYC4gSXQgaGFzIG5vIG9wdGlvbnMgKGBzY2hlbWE6IFtdYCkgYW5kIG5vIGZpeGVyLCBzbyB0aGVyZSBpcyBubyB3YXkgdG9cbiAgICAgICAgICogc2VwYXJhdGUgdGhlIGlkaW9tIGZyb20gdGhlIGJ1ZyBpdCB0YXJnZXRzLiBNb3N0IGhpdHMgaGVyZSB3ZXJlIHR5cGVkIGB0aGlzYCBwYXJhbWV0ZXJzIGFuZCB0ZXN0cyB0aGF0XG4gICAgICAgICAqIGRlbGliZXJhdGVseSBhc3NlcnQgYHRoaXNgIGJpbmRpbmcuXG4gICAgICAgICAqL1xuICAgICAgICAndW5pY29ybi9uby10aGlzLW91dHNpZGUtb2YtY2xhc3MnOiAnb2ZmJyxcbiAgICAgICAgLy8gU2FtZSBjYWxsIGFzIGl0cyBvYmplY3QgY291bnRlcnBhcnQgYWJvdmU6IHRoZSBkZXN0cnVjdHVyaW5nIGRlcHRoIGZsYWdnZWQgaGVyZSBpcyBkZWxpYmVyYXRlIGFuZCByZWFkcyB3ZWxsLlxuICAgICAgICAndW5pY29ybi9uby11bnJlYWRhYmxlLWFycmF5LWRlc3RydWN0dXJpbmcnOiAnb2ZmJyxcbiAgICAgICAgLypcbiAgICAgICAgICogVGhlIHJlcG9ydHMgYXJlIGFsbCBgZm9yIChjb25zdCBmaWxlIG9mIGF3YWl0IHJlYWRkaXJQb3NpeCguLi4pKWAsIHdoaWNoIHJlYWRzIGV4YWN0bHkgYXMgaW50ZW5kZWQuXG4gICAgICAgICAqIEhvaXN0aW5nIHRoZSBhd2FpdGVkIGNhbGwgaW50byBhIHZhcmlhYmxlIG5hbWVkIGFmdGVyIHRoZSBsb29wJ3Mgb3duIGl0ZXJhYmxlIGFkZHMgYSBsaW5lIGFuZCBhIG5hbWVcbiAgICAgICAgICogd2l0aG91dCBhZGRpbmcgaW5mb3JtYXRpb24uXG4gICAgICAgICAqL1xuICAgICAgICAndW5pY29ybi9uby11bnJlYWRhYmxlLWZvci1vZi1leHByZXNzaW9uJzogJ29mZicsXG4gICAgICAgIC8qXG4gICAgICAgICAqIFRoZSBuZXN0ZWQgZGVzdHJ1Y3R1cmluZyB0aGlzIGZsYWdzIGlzIGRlbGliZXJhdGUgaGVyZSBhbmQgcmVhZHMgd2VsbDogcHVsbGluZyBhIG1lbWJlciBvdXQgb2YgYVxuICAgICAgICAgKiBwYXJhbXMgYmFnIGluIG9uZSBzdGVwIHN0YXRlcyB3aGVyZSB0aGUgdmFsdWUgY29tZXMgZnJvbSwgd2hpY2ggYSBzZWNvbmQgaW50ZXJtZWRpYXRlIGJpbmRpbmcgb25seVxuICAgICAgICAgKiBvYnNjdXJlcy4gVGhlIHJ1bGUgdGFrZXMgbm8gb3B0aW9ucywgc28gdGhlcmUgaXMgbm8gd2F5IHRvIGtlZXAgdGhlIGRlcHRoIGxpbWl0IGl0IGlzIHJlYWxseSBhZnRlclxuICAgICAgICAgKiB3aGlsZSBhbGxvd2luZyB0aGUgc2hhcGUgaW4gdXNlLlxuICAgICAgICAgKi9cbiAgICAgICAgJ3VuaWNvcm4vbm8tdW5yZWFkYWJsZS1vYmplY3QtZGVzdHJ1Y3R1cmluZyc6ICdvZmYnLFxuICAgICAgICAvKlxuICAgICAgICAgKiBgY2hlY2tBcmd1bWVudHNgIHN0cmlwcyBgdW5kZWZpbmVkYCBhcmd1bWVudHMsIHdoaWNoIHNoaWZ0cyB0aGUgcmVtYWluaW5nIHBvc2l0aW9uYWwgYXJndW1lbnRzIGludG9cbiAgICAgICAgICogdGhlIHdyb25nIHNsb3RzOyBgY2hlY2tBcnJvd0Z1bmN0aW9uQm9keWAgcmVtb3ZlcyBgcmV0dXJuIHVuZGVmaW5lZDtgIGZyb20gYXJyb3cgYm9kaWVzIHdob3NlIG90aGVyXG4gICAgICAgICAqIGJyYW5jaGVzIGRvIHJldHVybiBhIHZhbHVlLCB3aGljaCB2aW9sYXRlcyB0aGUgYG5vSW1wbGljaXRSZXR1cm5zYCBzZXR0aW5nIHRoaXMgcHJvamVjdCBjb21waWxlcyB3aXRoLlxuICAgICAgICAgKiBUaGUgcnVsZSdzIHJlbWFpbmluZyBjYXNlcyAoYSBiYXJlIGB1bmRlZmluZWRgIGluaXRpYWxpemVyLCBgcmV0dXJuIHVuZGVmaW5lZDtgIGluIGEgdm9pZCBmdW5jdGlvbilcbiAgICAgICAgICogYXJlIHN0aWxsIHdvcnRoIGhhdmluZy5cbiAgICAgICAgICovXG4gICAgICAgICd1bmljb3JuL25vLXVzZWxlc3MtdW5kZWZpbmVkJzogW1xuICAgICAgICAgICdlcnJvcicsXG4gICAgICAgICAge1xuICAgICAgICAgICAgY2hlY2tBcmd1bWVudHM6IGZhbHNlLFxuICAgICAgICAgICAgY2hlY2tBcnJvd0Z1bmN0aW9uQm9keTogZmFsc2VcbiAgICAgICAgICB9XG4gICAgICAgIF0sXG4gICAgICAgIC8vIGBBcnJheS5mcm9tQXN5bmNgIGlzIEVTMjAyNC4gU2VlIHRoZSBFUzIwMjIgZmxvb3Igbm90ZSBhYm92ZS5cbiAgICAgICAgJ3VuaWNvcm4vcHJlZmVyLWFycmF5LWZyb20tYXN5bmMnOiAnb2ZmJyxcbiAgICAgICAgLypcbiAgICAgICAgICogRXZlcnkgaGl0IGhlcmUgaXMgYSBwcm9taXNlIGRlbGliZXJhdGVseSBOT1QgYXdhaXRlZCwgYW5kIGBhd2FpdGAgd291bGQgY2hhbmdlIHdoYXQgdGhlIGNvZGUgZG9lcy5cbiAgICAgICAgICogYHJlc3VsdC5jYXRjaCh0aHJvd0RlbGF5ZWQpYCBpbiBgYXN5bmMtZXZlbnRzLnRzYCBpcyB0aGUgZmlyZS1hbmQtZm9yZ2V0IGVycm9yIHBhdGggdGhlIG1vZHVsZSBpc1xuICAgICAgICAgKiBidWlsdCBvbjsgdGhlIHJlc3QgaG9sZCBhbiB1bnJlc29sdmVkIHByb21pc2UgYW5kIGFzc2VydCB0aGUgY2FsbGJhY2sgaGFzIG5vdCBmaXJlZCB5ZXQsIHNvIGF3YWl0aW5nXG4gICAgICAgICAqIHdvdWxkIGhhbmcgdGhlIHRlc3Qgb3IgaW52ZXJ0IHdoYXQgaXQgcHJvdmVzLiBUaGUgcnVsZSBjYW5ub3QgdGVsbCBhIGZvcmdvdHRlbiBgYXdhaXRgIGZyb20gYW5cbiAgICAgICAgICogaW50ZW50aW9uYWwgb25lLCBhbmQgdGhpcyBjb2RlYmFzZSBzY2hlZHVsZXMgZmlyZS1hbmQtZm9yZ2V0IHdvcmsgYXMgYSBjb3JlIHBhdHRlcm4uXG4gICAgICAgICAqL1xuICAgICAgICAndW5pY29ybi9wcmVmZXItYXdhaXQnOiAnb2ZmJyxcbiAgICAgICAgLypcbiAgICAgICAgICogQWxsIHRocmVlIHJlcG9ydHMgcmVhZCBIVE1MIG91dCAoYGNvbnN0IGh0bWwgPSBlbC5pbm5lckhUTUxgKSwgbmV2ZXIgd3JpdGUgaXQsIGFuZCBmb3IgYSByZWFkXG4gICAgICAgICAqIGBnZXRIVE1MKClgIHJldHVybnMgdGhlIHNhbWUgc3RyaW5nLiBXaGF0IGl0IGFkZHMgaXMgc2hhZG93LXJvb3Qgc2VyaWFsaXphdGlvbiBvcHRpb25zIHRoYXQgbm90aGluZ1xuICAgICAgICAgKiBoZXJlIGFza3MgZm9yLCBpbiBleGNoYW5nZSBmb3IgYSBtdWNoIG5ld2VyIHBsYXRmb3JtIGZsb29yIHRoYW4gYGlubmVySFRNTGAgLS0gYSBiYWQgdHJhZGUgZm9yIGFcbiAgICAgICAgICogbGlicmFyeSB0aGF0IGhhcyB0byBydW4gb24gd2hhdGV2ZXIgQ2hyb21pdW0gdGhlIGluc3RhbGxlZCBPYnNpZGlhbiBzaGlwcy4gVGhlIHJ1bGUncyBvdGhlciBoYWxmLFxuICAgICAgICAgKiByZXdyaXRpbmcgd3JpdGVzIHRvIHRoZSBzYW5pdGl6aW5nIGBzZXRIVE1MKClgLCB3b3VsZCBiZSB3b3J0aCBoYXZpbmc7IGl0IGp1c3QgbmV2ZXIgZmlyZXMgaGVyZS5cbiAgICAgICAgICovXG4gICAgICAgICd1bmljb3JuL3ByZWZlci1kb20tbm9kZS1odG1sLW1ldGhvZHMnOiAnb2ZmJyxcbiAgICAgICAgLypcbiAgICAgICAgICogSXRlcmF0b3IgaGVscGVycyAoYEl0ZXJhdG9yI3NvbWVgIGFuZCBmcmllbmRzKSBhcmUgRVMyMDI1LCBzbyB0aGlzIGJlbG9uZ3Mgd2l0aCBgbm8tYXJyYXktcmV2ZXJzZWAgYW5kXG4gICAgICAgICAqIGBuby1hcnJheS1zb3J0YCBhYm92ZTogdGhlIHNhbWUgRVMyMDIyIGZsb29yIHJ1bGVzIGl0IG91dCwgYW5kIHRoZSBzYW1lIG5vdGUgYXBwbGllcyAtLSByZXZpc2l0IHRoZW1cbiAgICAgICAgICogdG9nZXRoZXIgaWYgdGhhdCBmbG9vciBtb3Zlcy5cbiAgICAgICAgICovXG4gICAgICAgICd1bmljb3JuL3ByZWZlci1pdGVyYXRvci1oZWxwZXJzJzogJ29mZicsXG4gICAgICAgIC8vIGBJdGVyYXRvciN0b0FycmF5YCBpcyBFUzIwMjUuIFNlZSB0aGUgRVMyMDIyIGZsb29yIG5vdGUgYWJvdmUuXG4gICAgICAgICd1bmljb3JuL3ByZWZlci1pdGVyYXRvci10by1hcnJheSc6ICdvZmYnLFxuICAgICAgICAvKlxuICAgICAgICAgKiBSZXBsYWNlZCBieSBgdHlwZXNjcmlwdC1kZXYtdG9vbGtpdC9wcmVmZXItbG9naWNhbC1vcGVyYXRvci1vdmVyLXRlcm5hcnlgLCB3aGljaCByZXBvcnRzIHRoZSBzYW1lIGFuZFxuICAgICAgICAgKiBhbHNvIGZpeGVzIGEgYm9vbGVhbiBsaXRlcmFsIGJyYW5jaCBpbiBUeXBlU2NyaXB0LiBVbmljb3JuIHdpdGhob2xkcyB0aGF0IGZpeCB0aGVyZSwgd2hpbGVcbiAgICAgICAgICogYHVuaWNvcm4vcHJlZmVyLXRlcm5hcnlgIGtlZXBzIHByb2R1Y2luZyB0aGUgc2hhcGUsIHNvIGBsaW50OmZpeGAgbGVmdCBhbiBlcnJvciBpdCBoYWQganVzdCBjcmVhdGVkLlxuICAgICAgICAgKi9cbiAgICAgICAgJ3VuaWNvcm4vcHJlZmVyLWxvZ2ljYWwtb3BlcmF0b3Itb3Zlci10ZXJuYXJ5JzogJ29mZicsXG4gICAgICAgIC8qXG4gICAgICAgICAqIFRoZSBzdWdnZXN0ZWQgcmVwbGFjZW1lbnQgaXMgYE1hdGgudHJ1bmMoTnVtYmVyKHgpKWAsIHdoaWNoIGlzIGxvbmdlciB0aGFuIGBwYXJzZUludCh4LCAxMClgIGFuZCBub1xuICAgICAgICAgKiBjbGVhcmVyLCBhbmQgaXQgaXMgbm90IHRoZSBzYW1lIGZ1bmN0aW9uOiBgcGFyc2VJbnRgIHN0b3BzIGF0IHRoZSBmaXJzdCBjaGFyYWN0ZXIgdGhhdCBjYW5ub3QgYmUgcGFydFxuICAgICAgICAgKiBvZiB0aGUgbnVtYmVyLCBzbyBgJzEyYWJjJ2AgcGFyc2VzIHRvIDEyIHdoZXJlIGBOdW1iZXJgIHlpZWxkcyBgTmFOYC4gVHdvIG9mIHRoZSByZXBvcnRzIHJlYWQgdXNlclxuICAgICAgICAgKiBpbnB1dCB0aHJvdWdoIHRoYXQgZGlmZmVyZW5jZSAtLSB0aGUgcGFnZS1qdW1wIGJveCBpbiB0aGUgYERhdGF2aWV3YCBoZWxwZXIsIGFuZFxuICAgICAgICAgKiBgTnVtYmVyQ29tcG9uZW50LnZhbHVlRnJvbVN0cmluZ2AsIHdob3NlIGxlbmllbnQgcGFyc2UgaXMgcGFydCBvZiBhIHB1Ymxpc2hlZCBjb21wb25lbnQncyBiZWhhdmlvci5cbiAgICAgICAgICogVGhlIHJlc3QgcGFyc2UgbWFjaGluZS1nZW5lcmF0ZWQgc3RyaW5ncywgd2hlcmUgdGhlIHR3byBhZ3JlZSBidXQgdGhlIHNob3J0ZXIgc3BlbGxpbmcgc3RpbGwgd2lucy5cbiAgICAgICAgICovXG4gICAgICAgICd1bmljb3JuL3ByZWZlci1udW1iZXItY29lcmNpb24nOiAnb2ZmJyxcbiAgICAgICAgLy8gYFByb21pc2Uud2l0aFJlc29sdmVyc2AgaXMgRVMyMDI0LiBTZWUgdGhlIEVTMjAyMiBmbG9vciBub3RlIGFib3ZlLlxuICAgICAgICAndW5pY29ybi9wcmVmZXItcHJvbWlzZS13aXRoLXJlc29sdmVycyc6ICdvZmYnLFxuICAgICAgICAvLyBgU2V0I3VuaW9uYCBhbmQgZnJpZW5kcyBhcmUgRVMyMDI1LiBTZWUgdGhlIEVTMjAyMiBmbG9vciBub3RlIGFib3ZlLlxuICAgICAgICAndW5pY29ybi9wcmVmZXItc2V0LW1ldGhvZHMnOiAnb2ZmJyxcbiAgICAgICAgLypcbiAgICAgICAgICogVGhlIHJ1bGUgcmFua3Mgb3BlcmFuZHMgYnkgc3ludGFjdGljIHNoYXBlLCBub3QgY29zdCwgc28gZXZlcnkgcmVwb3J0IGhlcmUgc3dhcHMgb25lIHByb3BlcnR5IHJlYWRcbiAgICAgICAgICogYWhlYWQgb2YgYW5vdGhlciBhbmQgYnV5cyBub3RoaW5nLiBJdHMgb3duIG1lc3NhZ2UgY29uY2VkZXMgaXQgY2Fubm90IGNoZWNrIHRoZSBwYXJ0IHRoYXQgbWF0dGVycyAtLVxuICAgICAgICAgKiBcImFmdGVyIHZlcmlmeWluZyBzaG9ydC1jaXJjdWl0IGJlaGF2aW9yXCIgLS0gYW5kIG9uZSByZXBvcnQgc2l0cyBkaXJlY3RseSB1bmRlciBhIGNvbW1lbnQgcmVjb3JkaW5nXG4gICAgICAgICAqIHRoYXQgdGhlIG9wZXJhbmRzIGNoYW5nZSBpbnNpZGUgYSBgcmVuYW1lYCBldmVudCBoYW5kbGVyLCB3aGljaCBpcyB3aGVyZSBvcmRlciBzdG9wcyBiZWluZyBmcmVlLlxuICAgICAgICAgKiBUaGUgY3VycmVudCBvcmRlcnMgYWxzbyBjYXJyeSBpbnRlbnQ6IGEgbnVsbCBndWFyZCBiZWZvcmUgdGhlIHVzZSBpdCBndWFyZHMsIGFuZCB0aGUgY29uZGl0aW9uIGJlaW5nXG4gICAgICAgICAqIHJlcG9ydGVkIGJlZm9yZSB0aGUgc3RhdGUgaXQgY29udHJhZGljdHMuXG4gICAgICAgICAqL1xuICAgICAgICAndW5pY29ybi9wcmVmZXItc2ltcGxlLWNvbmRpdGlvbi1maXJzdCc6ICdvZmYnLFxuICAgICAgICAvKlxuICAgICAgICAgKiBgVVJMLmNhblBhcnNlYCByZXF1aXJlcyBOb2RlIDE4LjE3LCB3ZWxsIGFib3ZlIHRoZSBOb2RlIDE2LjE2LjAgZmxvb3IgdGhhdCBzaGlwcGVkIHNvdXJjZSB0YXJnZXRzXG4gICAgICAgICAqIChzZWUgdGhlIE9ic2lkaWFuIHBsdWdpbiBsYXllcidzIGBtaW5pbXVtTm9kZVZlcnNpb25gKS4gVGhlIHJ1bGUgY2FuIHRoZXJlZm9yZSBuZXZlciBiZSBzYXRpc2ZpZWQgdGhlcmUsIHNvIGl0IGlzIG9mZiBhdCB0aGVcbiAgICAgICAgICogY29uZmlnIGxldmVsIHJhdGhlciB0aGFuIGFubm90YXRlZCBhdCBlYWNoIGNhbGwgc2l0ZS5cbiAgICAgICAgICovXG4gICAgICAgICd1bmljb3JuL3ByZWZlci11cmwtY2FuLXBhcnNlJzogJ29mZicsXG4gICAgICAgIC8qXG4gICAgICAgICAqIEV2ZXJ5IGFycmF5IHJlcG9ydGVkIGhlcmUgaG9sZHMgc3RyaW5ncywgd2hlcmUgdGhlIGRlZmF1bHQgc29ydCBpcyBhbHJlYWR5IHdlbGwgZGVmaW5lZCBhbmQgY29ycmVjdC5cbiAgICAgICAgICogQWRkaW5nIHRoZSBjb21wYXJhdG9yIHRoZSBydWxlIGFza3MgZm9yIHdvdWxkIG1lYW4gY2hvb3NpbmcgYmV0d2VlbiBjb2RlLXVuaXQgYW5kIGxvY2FsZSBvcmRlcmluZyxcbiAgICAgICAgICogc28gZm9sbG93aW5nIGl0IHdvdWxkIENIQU5HRSB0aGUgc29ydCByYXRoZXIgdGhhbiBkb2N1bWVudCBpdC4gVGhlIHJ1bGUgZWFybnMgaXRzIHBsYWNlIG9uIG51bWVyaWNcbiAgICAgICAgICogYXJyYXlzOyBpdCBkb2VzIG5vdCBoYXZlIGFueSBoZXJlLlxuICAgICAgICAgKi9cbiAgICAgICAgJ3VuaWNvcm4vcmVxdWlyZS1hcnJheS1zb3J0LWNvbXBhcmUnOiAnb2ZmJyxcbiAgICAgICAgLy8gVGhlIGNvZGViYXNlIGFscmVhZHkgc3BlbGxzIGVuY29kaW5ncyB0aGUgd2F5IHRoZSBFbmNvZGluZyBTdGFuZGFyZCBkb2VzIChgdXRmLThgKSwgd2hpY2ggaXMgYWxzbyB3aGF0IGBUZXh0RGVjb2RlcmAgcmVwb3J0cy4gS2VlcCB0aGUgcnVsZSBlbmZvcmNpbmcgY29uc2lzdGVuY3ksIGp1c3QgaW4gdGhlIGRpcmVjdGlvbiBhbHJlYWR5IGluIHVzZS5cbiAgICAgICAgJ3VuaWNvcm4vdGV4dC1lbmNvZGluZy1pZGVudGlmaWVyLWNhc2UnOiBbXG4gICAgICAgICAgJ2Vycm9yJyxcbiAgICAgICAgICB7XG4gICAgICAgICAgICB3aXRoRGFzaDogdHJ1ZVxuICAgICAgICAgIH1cbiAgICAgICAgXVxuICAgICAgfVxuICAgIH0sXG4gICAge1xuICAgICAgLy8gQnVpbGQvbGludC92ZXJzaW9uIHNjcmlwdHMgYXJlIENMSSBlbnRyeSBwb2ludHMsIHdoZXJlIGV4aXRpbmcgd2l0aCBhIHN0YXR1cyBjb2RlIGlzIHRoZSBpbnRlcmZhY2UuXG4gICAgICBmaWxlczogY29udGV4dC5zY3JpcHRGaWxlcyxcbiAgICAgIHJ1bGVzOiB7XG4gICAgICAgICd1bmljb3JuL25vLXByb2Nlc3MtZXhpdCc6ICdvZmYnXG4gICAgICB9XG4gICAgfSxcbiAgICB7XG4gICAgICAvKlxuICAgICAgICogQSBtb2R1bGUtbGV2ZWwgZml4dHVyZSBhc3NpZ25lZCBmcm9tIGBiZWZvcmVFYWNoYCBpcyB0aGUgc3RhbmRhcmQgdGVzdCBzaGFwZTpcbiAgICAgICAqXG4gICAgICAgKiAgIGxldCBhcHA6IEFwcDtcbiAgICAgICAqICAgYmVmb3JlRWFjaCgoKSA9PiB7IGFwcCA9IEFwcC5jcmVhdGVDb25maWd1cmVkX18oKTsgfSk7XG4gICAgICAgKlxuICAgICAgICogVGhlIHJ1bGUgaXMgcmlnaHQgYWJvdXQgcHJvZHVjdGlvbiBjb2RlIC0tIG1vZHVsZSBzdGF0ZSByZWFzc2lnbmVkIGZyb20gaW5zaWRlIGEgZnVuY3Rpb24gaXMgd29ydGhcbiAgICAgICAqIGZsYWdnaW5nLCBhbmQgdGhlIGZpeCBpcyB0byBob2xkIGl0IGluIGEgYGNvbnN0YCBvYmplY3QgaW5zdGVhZC4gSW4gdGVzdHMgdGhhdCB3b3VsZCByZXBsYWNlIGV2ZXJ5XG4gICAgICAgKiBgYXBwYCB3aXRoIGBTVEFURS5hcHBgIGFuZCBtYWtlIGVhY2ggZmlsZSByZWFkIHdvcnNlIGZvciBubyBnYWluLCBzaW5jZSB0aGUgZml4dHVyZSBpcyByZXNldCBwZXIgdGVzdFxuICAgICAgICogYnkgZGVzaWduLiBTY29wZWQgb2ZmIGhlcmUgcmF0aGVyIHRoYW4gZGlzYWJsZWQgb3V0cmlnaHQsIHNvIHByb2R1Y3Rpb24gY29kZSBrZWVwcyB0aGUgY2hlY2suXG4gICAgICAgKi9cbiAgICAgIGZpbGVzOiBjb250ZXh0LnRlc3RGaWxlcyxcbiAgICAgIHJ1bGVzOiB7XG4gICAgICAgIC8qXG4gICAgICAgICAqIFR3byBzaGFwZXMgaGVyZSBjYW5ub3QgZm9sbG93IHRoZSBhZHZpY2UuIEEgaGVscGVyIGRlZmluZWQgaW5zaWRlIGFuIGBldmFsSW5PYnNpZGlhbmAgY2FsbGJhY2tcbiAgICAgICAgICogY2Fubm90IGJlIGhvaXN0ZWQgYXQgYWxsOiB0aGUgY2FsbGJhY2sgaXMgc2VyaWFsaXplZCB3aXRoIGB0b1N0cmluZygpYCBhbmQgcnVucyBpbnNpZGUgT2JzaWRpYW4sIHNvXG4gICAgICAgICAqIGFueXRoaW5nIGxlZnQgYmVoaW5kIGluIHRoZSBtb2R1bGUgc2NvcGUgaXMgc2ltcGx5IG5vdCB0aGVyZS4gQW5kIGEgcGVyLXN1aXRlIGZhY3RvcnlcbiAgICAgICAgICogKGBjcmVhdGVDb21wb25lbnRgLCBgY3JlYXRlTW9ja1BsdWdpbmApIGlzIGRlbGliZXJhdGVseSBsb2NhbCwga2VlcGluZyBlYWNoIHN1aXRlJ3MgZml4dHVyZSBuZXh0IHRvXG4gICAgICAgICAqIHRoZSBhc3NlcnRpb25zIHRoYXQgcmVhZCBpdC4gUHJvZHVjdGlvbiBjb2RlIGtlZXBzIHRoZSBjaGVjay5cbiAgICAgICAgICovXG4gICAgICAgICd1bmljb3JuL2NvbnNpc3RlbnQtZnVuY3Rpb24tc2NvcGluZyc6ICdvZmYnLFxuICAgICAgICAvKlxuICAgICAgICAgKiBBIHRlc3QgYmluZGluZyBpcyBuYW1lZCBhZnRlciB0aGUgdGhpbmcgaXQgY2FwdHVyZXMsIG5vdCBhZnRlciB3aGF0IGl0IGRvZXM6IGBjcmVhdGVFbGVtZW50U3B5YFxuICAgICAgICAgKiBob2xkcyB0aGUgc3B5IG9uIGBjcmVhdGVFbGVtZW50YCwgYW5kIGBjcmVhdGVQcm9ncmFtT3B0aW9uc2AgaG9sZHMgdGhlIG9wdGlvbnMgYGNyZWF0ZVByb2dyYW1gIHdhc1xuICAgICAgICAgKiBjYWxsZWQgd2l0aC4gVGhlIHZlcmIgYmVsb25ncyB0byB0aGUgbmFtZSBiZWluZyByZWZlcmVuY2VkLCBzbyB0aGUgcnVsZSByZWFkcyBpdCBhcyBhIGZ1bmN0aW9uIG5hbWVcbiAgICAgICAgICogdGhhdCBpcyBub3QgYSBmdW5jdGlvbi4gTGVmdCBvbiBmb3IgcHJvZHVjdGlvbiBjb2RlLCB3aGVyZSB0aGUgY29tcGxhaW50IGlzIHRoZSByaWdodCBvbmUuXG4gICAgICAgICAqL1xuICAgICAgICAndW5pY29ybi9uby1ub24tZnVuY3Rpb24tdmVyYi1wcmVmaXgnOiAnb2ZmJyxcbiAgICAgICAgJ3VuaWNvcm4vbm8tdG9wLWxldmVsLWFzc2lnbm1lbnQtaW4tZnVuY3Rpb24nOiAnb2ZmJ1xuICAgICAgfVxuICAgIH1cbiAgXSk7XG59XG5cbi8qIGVzbGludC1lbmFibGUgbm8tbWFnaWMtbnVtYmVycyAtLSBXZSBkaXNhYmxlZCBtYWdpYyBudW1iZXJzIGJlY2F1c2UgdGhleSBhcmUgdXNlZCBhbGwgb3ZlciB0aGUgY29uZmlncy4gKi9cblxuLyogdjggaWdub3JlIHN0b3AgKi9cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFnQkEscUJBQTRCO0FBQzVCLDRCQUFrQztBQUNsQyxnQkFBbUI7QUFDbkIsa0JBQXFCO0FBRXJCLDJCQUFzQjtBQUN0QiwrQ0FBK0M7QUFDL0Msb0NBQThEO0FBRTlELDZCQUF1QjtBQUN2Qix5Q0FBZ0Q7QUFFaEQsbUNBQW9CO0FBQ3BCLG9CQUdPO0FBQ1AscUJBQTJCO0FBRTNCLCtCQUFxQjtBQUVyQix3QkFBMEI7QUFDMUIsa0JBQThCO0FBQzlCLHlDQUE4QztBQUM5Qyw2QkFHTztBQUNQLDBCQUE2QztBQXFEdEMsTUFBTSxvQkFBb0I7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQUlmLGtCQUE0QixDQUFDO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFLN0IsY0FBd0IsQ0FBQztBQUFBO0FBQUE7QUFBQTtBQUFBLEVBS3pCLGNBQXdCLENBQUM7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBTXpCLGdCQUEwQixDQUFDO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFLM0IsWUFBc0IsQ0FBQztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQU9oQyxXQUFxQjtBQUMxQixXQUFPLENBQUMsR0FBRyxLQUFLLFdBQVcsR0FBRyxLQUFLLGFBQWEsR0FBRyxLQUFLLGlCQUFpQixHQUFHLEtBQUssV0FBVztBQUFBLEVBQzlGO0FBQ0Y7QUFRTyxTQUFTLG1DQUF3RDtBQUN0RSxRQUFNLFVBQVUsSUFBSSxvQkFBb0I7QUFDeEMsVUFBUSxjQUFjLEtBQUssNEJBQVUsR0FBRztBQUN4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QUFBO0FBQUEsUUFROUMsZ0NBQWdDO0FBQUEsVUFDOUI7QUFBQSxVQUNBO0FBQUEsWUFDRSxnQkFBZ0I7QUFBQSxZQUNoQix3QkFBd0I7QUFBQSxVQUMxQjtBQUFBLFFBQ0Y7QUFBQTtBQUFBLFFBRUEsbUNBQW1DO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxRQVFuQyx3QkFBd0I7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFFBUXhCLHdDQUF3QztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxRQU14QyxtQ0FBbUM7QUFBQTtBQUFBLFFBRW5DLG9DQUFvQztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxRQU1wQyxnREFBZ0Q7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFTaEQsa0NBQWtDO0FBQUE7QUFBQSxRQUVsQyx5Q0FBeUM7QUFBQTtBQUFBLFFBRXpDLDhCQUE4QjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxRQVM5Qix5Q0FBeUM7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFNekMsZ0NBQWdDO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFPaEMsc0NBQXNDO0FBQUE7QUFBQSxRQUV0Qyx5Q0FBeUM7QUFBQSxVQUN2QztBQUFBLFVBQ0E7QUFBQSxZQUNFLFVBQVU7QUFBQSxVQUNaO0FBQUEsUUFDRjtBQUFBLE1BQ0Y7QUFBQSxJQUNGO0FBQUEsSUFDQTtBQUFBO0FBQUEsTUFFRSxPQUFPLFFBQVE7QUFBQSxNQUNmLE9BQU87QUFBQSxRQUNMLDJCQUEyQjtBQUFBLE1BQzdCO0FBQUEsSUFDRjtBQUFBLElBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsTUFZRSxPQUFPLFFBQVE7QUFBQSxNQUNmLE9BQU87QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFFBUUwsdUNBQXVDO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFPdkMsdUNBQXVDO0FBQUEsUUFDdkMsK0NBQStDO0FBQUEsTUFDakQ7QUFBQSxJQUNGO0FBQUEsRUFDRixDQUFDO0FBQ0g7IiwibmFtZXMiOlsiZXNsaW50IiwiY29tbWVudHNDb25maWdzIiwiZXNsaW50UGx1Z2luSW1wb3J0WEZsYXRDb25maWdzIiwibm9kZVBsdWdpbiIsInBlcmZlY3Rpb25pc3RDb25maWdzIiwic3R5bGlzdGljIiwidHNlc2xpbnQiLCJ1bmljb3JuIl19
|
|
1091
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9saW50ZXJzL2VzbGludC1jb25maWcudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAZmlsZVxuICpcbiAqIFRoZSBnZW5lcmljIGhhbGYgb2YgdGhlIHNoYXJlZCBFU0xpbnQgY29uZmlndXJhdGlvbiwgZm9yIGFueSBUeXBlU2NyaXB0IHByb2plY3QuXG4gKlxuICogSXQgaW50ZWdyYXRlcyBFU0xpbnQncyBvd24gcmVjb21tZW5kZWQgcnVsZXMsIGB0eXBlc2NyaXB0LWVzbGludGAsIGBAc3R5bGlzdGljL2VzbGludC1wbHVnaW5gLFxuICogYGVzbGludC1wbHVnaW4taW1wb3J0LXhgIHdpdGggaXRzIFR5cGVTY3JpcHQgcmVzb2x2ZXIsIGBlc2xpbnQtcGx1Z2luLXBlcmZlY3Rpb25pc3RgLCBgZXNsaW50LXBsdWdpbi11bmljb3JuYCxcbiAqIGBlc2xpbnQtcGx1Z2luLW5gIGFuZCB0aGUgZ2VuZXJpYyBpbi1ob3VzZSBydWxlcy4gQSBwcm9qZWN0LXR5cGUgbGF5ZXIgKHRoZSBPYnNpZGlhbiBwbHVnaW4gb25lIGxpdmVzIGluXG4gKiBgQG1uYW91bW92L29ic2lkaWFuLWRldi10b29sa2l0YCkgYnVpbGRzIG9uIHtAbGluayBnZXRUeXBlU2NyaXB0RXNsaW50Q29uZmlnc30gYW5kIGFkZHMgb25seSB3aGF0IGlzIHNwZWNpZmljIHRvIGl0LlxuICovXG5cbi8qIHY4IGlnbm9yZSBzdGFydCAtLSBEZWNsYXJhdGl2ZSBFU0xpbnQgcnVsZS9wbHVnaW4gY29uZmlndXJhdGlvbjsgY29ycmVjdG5lc3MgaXMgdmVyaWZpZWQgYnkgcnVubmluZyBFU0xpbnQsIG5vdCB1bml0IHRlc3RzLiAqL1xuXG5pbXBvcnQgdHlwZSB7IExpbnRlciB9IGZyb20gJ2VzbGludCc7XG5cbi8qIGVzbGludC1kaXNhYmxlIG5vLW1hZ2ljLW51bWJlcnMgLS0gV2UgZGlzYWJsZWQgbWFnaWMgbnVtYmVycyBiZWNhdXNlIHRoZXkgYXJlIHVzZWQgYWxsIG92ZXIgdGhlIGNvbmZpZ3MuICovXG5pbXBvcnQgY29tbWVudHNDb25maWdzIGZyb20gJ0Blc2xpbnQtY29tbXVuaXR5L2VzbGludC1wbHVnaW4tZXNsaW50LWNvbW1lbnRzL2NvbmZpZ3MnO1xuaW1wb3J0IHsgaW5jbHVkZUlnbm9yZUZpbGUgfSBmcm9tICdAZXNsaW50L2NvbmZpZy1oZWxwZXJzJztcbmltcG9ydCBlc2xpbnQgZnJvbSAnQGVzbGludC9qcyc7XG5pbXBvcnQgeyBqb2luIH0gZnJvbSAnQG1uYW91bW92L3R5cGVzY3JpcHQtbGliL3BhdGgnO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC14L25vLXJlbmFtZS1kZWZhdWx0IC0tIFRoZSBkZWZhdWx0IGV4cG9ydCBuYW1lIGBwbHVnaW5gIGlzIHRvbyBjb25mdXNpbmcuXG5pbXBvcnQgc3R5bGlzdGljIGZyb20gJ0BzdHlsaXN0aWMvZXNsaW50LXBsdWdpbic7XG5pbXBvcnQgeyBjcmVhdGVUeXBlU2NyaXB0SW1wb3J0UmVzb2x2ZXIgfSBmcm9tICdlc2xpbnQtaW1wb3J0LXJlc29sdmVyLXR5cGVzY3JpcHQnO1xuaW1wb3J0IHsgZmxhdENvbmZpZ3MgYXMgZXNsaW50UGx1Z2luSW1wb3J0WEZsYXRDb25maWdzIH0gZnJvbSAnZXNsaW50LXBsdWdpbi1pbXBvcnQteCc7XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgaW1wb3J0LXgvbm8tcmVuYW1lLWRlZmF1bHQgLS0gVGhlIGRlZmF1bHQgZXhwb3J0IG5hbWUgYF9kZWZhdWx0YCBpcyB0b28gY29uZnVzaW5nLlxuaW1wb3J0IG5vZGVQbHVnaW4gZnJvbSAnZXNsaW50LXBsdWdpbi1uJztcbmltcG9ydCB7IGNvbmZpZ3MgYXMgcGVyZmVjdGlvbmlzdENvbmZpZ3MgfSBmcm9tICdlc2xpbnQtcGx1Z2luLXBlcmZlY3Rpb25pc3QnO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC14L25vLXJlbmFtZS1kZWZhdWx0IC0tIFRoZSBkZWZhdWx0IGV4cG9ydCBuYW1lIGBpbmRleGAgaXMgdG9vIGNvbmZ1c2luZy5cbmltcG9ydCB1bmljb3JuIGZyb20gJ2VzbGludC1wbHVnaW4tdW5pY29ybic7XG5pbXBvcnQge1xuICBkZWZpbmVDb25maWcsXG4gIGdsb2JhbElnbm9yZXNcbn0gZnJvbSAnZXNsaW50L2NvbmZpZyc7XG5pbXBvcnQgeyBleGlzdHNTeW5jIH0gZnJvbSAnbm9kZTpmcyc7XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgaW1wb3J0LXgvbm8tcmVuYW1lLWRlZmF1bHQgLS0gVGhlIGRlZmF1bHQgZXhwb3J0IG5hbWUgYF9kZWZhdWx0YCBpcyB0b28gY29uZnVzaW5nLlxuaW1wb3J0IHRzZXNsaW50IGZyb20gJ3R5cGVzY3JpcHQtZXNsaW50JztcblxuaW1wb3J0IHsgUmVwb1BhdGhzIH0gZnJvbSAnLi4vcmVwby1wYXRocy50cyc7XG5pbXBvcnQgeyBnZXRSb290Rm9sZGVyIH0gZnJvbSAnLi4vcm9vdC50cyc7XG5pbXBvcnQgeyBub1Jlc3RyaWN0ZWRTeW50YXhSdWxlRW50cmllcyB9IGZyb20gJy4vZXNsaW50LW5vLXJlc3RyaWN0ZWQtc3ludGF4LnRzJztcbmltcG9ydCB7XG4gIElOX0hPVVNFX0VTTElOVF9QTFVHSU5fTkFNRSxcbiAgaW5Ib3VzZUVzbGludFBsdWdpblxufSBmcm9tICcuL2VzbGludC1ydWxlcy9pbi1ob3VzZS1wbHVnaW4udHMnO1xuaW1wb3J0IHsgQ0xBVURFX1dPUktUUkVFU19JR05PUkVfR0xPQiB9IGZyb20gJy4vbGludC1pZ25vcmVzLnRzJztcblxuLyoqXG4gKiBUaGUgcGFyYW1ldGVycyBmb3IgZGVmaW5pbmcgRVNMaW50IGNvbmZpZ3VyYXRpb25zLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIERlZmluZUVzbGludENvbmZpZ3NPcHRpb25zIHtcbiAgLyoqXG4gICAqIEEgZnVuY3Rpb24gdGhhdCBidWlsZHMgY3VzdG9tIEVTTGludCBjb25maWd1cmF0aW9ucy5cbiAgICpcbiAgICogQHBhcmFtIGNvbnRleHQgLSBUaGUgRVNMaW50IGNvbmZpZ3VyYXRpb24gY29udGV4dC5cbiAgICogQHJldHVybnMgVGhlIGN1c3RvbSBFU0xpbnQgY29uZmlndXJhdGlvbnMuXG4gICAqL1xuICByZWFkb25seSBjdXN0b21Db25maWdzPzogKGNvbnRleHQ6IEVzbGludENvbmZpZ0NvbnRleHQpID0+IExpbnRlci5Db25maWdbXTtcblxuICAvKipcbiAgICogQSBmdW5jdGlvbiB0aGF0IGVkaXRzIHRoZSBFU0xpbnQgY29uZmlndXJhdGlvbiBjb250ZXh0LlxuICAgKlxuICAgKiBAcGFyYW0gY29udGV4dCAtIFRoZSBFU0xpbnQgY29uZmlndXJhdGlvbiBjb250ZXh0LlxuICAgKi9cbiAgcmVhZG9ubHkgZWRpdENvbnRleHQ/OiAoY29udGV4dDogRXNsaW50Q29uZmlnQ29udGV4dCkgPT4gdm9pZDtcblxuICAvKipcbiAgICogVGhlIG9sZGVzdCBOb2RlIHZlcnNpb24gc2hpcHBlZCBzb3VyY2UgaGFzIHRvIHJ1biBvbiwgYXMgYSBzZW12ZXIgcmFuZ2U6IGEgbGlicmFyeSB0aGF0IGFsc28gcnVucyBpbnNpZGUgYW5cbiAgICogb2xkZXIgcnVudGltZSB0aGFuIGl0cyBvd24gdG9vbGluZyAoYW4gT2JzaWRpYW4gcmVuZGVyZXIsIHNheSkgbmFtZXMgdGhhdCBydW50aW1lJ3MgTm9kZSBoZXJlLiBXaGVuIG9taXR0ZWQsXG4gICAqIGBlc2xpbnQtcGx1Z2luLW5gIHJlYWRzIHRoZSBgZW5naW5lc2AgZmllbGQgb2YgdGhlIHByb2plY3QncyBgcGFja2FnZS5qc29uYC5cbiAgICovXG4gIHJlYWRvbmx5IG1pbmltdW1Ob2RlVmVyc2lvbj86IHN0cmluZztcbn1cblxuLyoqXG4gKiBUaGUgcGFyYW1ldGVycyBmb3Ige0BsaW5rIGdldFR5cGVTY3JpcHRFc2xpbnRDb25maWdzfS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBHZXRUeXBlU2NyaXB0RXNsaW50Q29uZmlnc1BhcmFtcyB7XG4gIC8qKlxuICAgKiBUaGUgRVNMaW50IGNvbmZpZ3VyYXRpb24gY29udGV4dC5cbiAgICovXG4gIHJlYWRvbmx5IGNvbnRleHQ6IEVzbGludENvbmZpZ0NvbnRleHQ7XG5cbiAgLyoqXG4gICAqIFRoZSBvbGRlc3QgTm9kZSB2ZXJzaW9uIHNoaXBwZWQgc291cmNlIGhhcyB0byBydW4gb24sIGFzIGEgc2VtdmVyIHJhbmdlLiBXaGVuIG9taXR0ZWQsIGBlc2xpbnQtcGx1Z2luLW5gIHJlYWRzXG4gICAqIHRoZSBgZW5naW5lc2AgZmllbGQgb2YgdGhlIHByb2plY3QncyBgcGFja2FnZS5qc29uYC5cbiAgICovXG4gIHJlYWRvbmx5IG1pbmltdW1Ob2RlVmVyc2lvbj86IHN0cmluZztcbn1cblxuaW50ZXJmYWNlIEdldE5vZGVDb21wYXRDb25maWdzUGFyYW1zIHtcbiAgcmVhZG9ubHkgY29udGV4dDogRXNsaW50Q29uZmlnQ29udGV4dDtcbiAgcmVhZG9ubHkgbWluaW11bU5vZGVWZXJzaW9uOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG59XG5cbi8qKlxuICogVGhlIGNvbnRleHQgZm9yIGRlZmluaW5nIEVTTGludCBjb25maWd1cmF0aW9ucy5cbiAqL1xuZXhwb3J0IGNsYXNzIEVzbGludENvbmZpZ0NvbnRleHQge1xuICAvKipcbiAgICogVGhlIHJvb3QgY29uZmlndXJhdGlvbiBmaWxlcy5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSByb290Q29uZmlnRmlsZXM6IHN0cmluZ1tdID0gW107XG5cbiAgLyoqXG4gICAqIFRoZSBzY3JpcHQgZmlsZXMuXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgc2NyaXB0RmlsZXM6IHN0cmluZ1tdID0gW107XG5cbiAgLyoqXG4gICAqIFRoZSBzb3VyY2UgZmlsZXMuXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgc291cmNlRmlsZXM6IHN0cmluZ1tdID0gW107XG5cbiAgLyoqXG4gICAqIFRoZSBmb2xkZXJzIGhvbGRpbmcgdGhlIHByb2plY3QncyBzb3VyY2VzLCBieSBkZWZhdWx0IGBzcmNgIGFsb25lLiBBIHdvcmtzcGFjZSB3aG9zZSBwYWNrYWdlcyBlYWNoIGhhdmUgdGhlaXIgb3duXG4gICAqIGBzcmNgIGFkZHMgdGhlbSBoZXJlLCBzbyB0aGUgcnVsZXMga2V5ZWQgb24gYSBmaWxlJ3MgbmFtZSBpbnNpZGUgYSBzb3VyY2UgZm9sZGVyIHJlYWNoIHRob3NlIHBhY2thZ2VzIHRvby5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBzb3VyY2VGb2xkZXJzOiBzdHJpbmdbXSA9IFtdO1xuXG4gIC8qKlxuICAgKiBUaGUgdGVzdCBmaWxlcy5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSB0ZXN0RmlsZXM6IHN0cmluZ1tdID0gW107XG5cbiAgLyoqXG4gICAqIFRoZSBhbGwgZmlsZXMuXG4gICAqXG4gICAqIEByZXR1cm5zIFRoZSBhbGwgZmlsZXMuXG4gICAqL1xuICBwdWJsaWMgYWxsRmlsZXMoKTogc3RyaW5nW10ge1xuICAgIHJldHVybiBbLi4udGhpcy50ZXN0RmlsZXMsIC4uLnRoaXMuc2NyaXB0RmlsZXMsIC4uLnRoaXMucm9vdENvbmZpZ0ZpbGVzLCAuLi50aGlzLnNvdXJjZUZpbGVzXTtcbiAgfVxufVxuXG4vKipcbiAqIENyZWF0ZXMgdGhlIGNvbnRleHQgb2YgYSBwcm9qZWN0IGxhaWQgb3V0IHRoZSBjb252ZW50aW9uYWwgd2F5OiBzb3VyY2VzIHVuZGVyIGBzcmNgLCBzY3JpcHRzIHVuZGVyIGBzY3JpcHRzYCwgdGVzdHNcbiAqIGJlc2lkZSB0aGUgc291cmNlcyBvciB1bmRlciBgX190ZXN0c19fYCwgYW5kIHRoZSBjb21taXRsaW50LCBFU0xpbnQgYW5kIFZpdGVzdCBjb25maWd1cmF0aW9ucyBhdCB0aGUgcm9vdC5cbiAqXG4gKiBAcmV0dXJucyBUaGUgY29udGV4dC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZURlZmF1bHRFc2xpbnRDb25maWdDb250ZXh0KCk6IEVzbGludENvbmZpZ0NvbnRleHQge1xuICBjb25zdCBjb250ZXh0ID0gbmV3IEVzbGludENvbmZpZ0NvbnRleHQoKTtcbiAgY29udGV4dC5zb3VyY2VGb2xkZXJzLnB1c2goUmVwb1BhdGhzLlNyYyk7XG4gIGNvbnRleHQucm9vdENvbmZpZ0ZpbGVzLnB1c2goXG4gICAgUmVwb1BhdGhzLkNvbW1pdGxpbnRDb25maWdUcyxcbiAgICBSZXBvUGF0aHMuRXNsaW50Q29uZmlnTXRzLFxuICAgIFJlcG9QYXRocy5WaXRlc3RDb25maWdUc1xuICApO1xuICBjb250ZXh0LnNjcmlwdEZpbGVzLnB1c2goXG4gICAgam9pbihSZXBvUGF0aHMuU2NyaXB0cywgUmVwb1BhdGhzLkFueVBhdGgsIFJlcG9QYXRocy5BbnlUcylcbiAgKTtcbiAgY29udGV4dC5zb3VyY2VGaWxlcy5wdXNoKFxuICAgIGpvaW4oUmVwb1BhdGhzLlNyYywgUmVwb1BhdGhzLkFueVBhdGgsIFJlcG9QYXRocy5BbnlUcyksXG4gICAgam9pbihSZXBvUGF0aHMuU3JjLCBSZXBvUGF0aHMuQW55UGF0aCwgUmVwb1BhdGhzLkFueVRzeClcbiAgKTtcbiAgY29udGV4dC50ZXN0RmlsZXMucHVzaChcbiAgICBqb2luKFJlcG9QYXRocy5UZXN0cywgUmVwb1BhdGhzLkFueVBhdGgsIFJlcG9QYXRocy5BbnlUcyksXG4gICAgam9pbihSZXBvUGF0aHMuTW9ja3MsIFJlcG9QYXRocy5BbnlQYXRoLCBSZXBvUGF0aHMuQW55VHMpLFxuICAgIGpvaW4oUmVwb1BhdGhzLlNyYywgUmVwb1BhdGhzLkFueVBhdGgsIFJlcG9QYXRocy5BbnlUZXN0VHMpLFxuICAgIC8qXG4gICAgICogQSBidWlsZC1zY3JpcHQgdGVzdCBpcyBhIFRFU1QsIGFuZCB0aGlzIGNvbnZlbnRpb24gcHV0cyBpdCBpbiBhIGAqLnRlc3QudHNgIHVuZGVyIGBzY3JpcHRzL2AgLS0gYmVzaWRlIHRoZVxuICAgICAqIHNjcmlwdCBpdCBjb3ZlcnMgcmF0aGVyIHRoYW4gdW5kZXIgYHNyYy9gLiBXaXRob3V0IHRoaXMgZ2xvYiBpdCBtYXRjaGVkIGBzY3JpcHRGaWxlc2AgYWxvbmUsIHNvIGV2ZXJ5IHJlbGF4YXRpb25cbiAgICAgKiB0aGF0IGtleXMgb24gYGNvbnRleHQudGVzdEZpbGVzYCBtaXNzZWQgaXQ6IGBuby1tYWdpYy1udW1iZXJzYCBmaXJlZCBvbiBhIHN1aXRlIHdob3NlIHdob2xlIHN1YmplY3QgaXMgcmVjb3JkZWRcbiAgICAgKiBudW1iZXJzLCBhbmQgYHVuaWNvcm4vY29uc2lzdGVudC1mdW5jdGlvbi1zY29waW5nYCBvbiB0aGUgcGVyLXN1aXRlIGZpeHR1cmUgZmFjdG9yaWVzIHRoZSBibG9jayBhdCB0aGUgYm90dG9tXG4gICAgICogb2YgYGdldFVuaWNvcm5Db25maWdzYCBzYXlzIHRlc3RzIGV4aXN0IHRvIGFsbG93LlxuICAgICAqXG4gICAgICogVGhlIGZpbGUgbm93IG1hdGNoZXMgQk9USCBsaXN0cywgYW5kIHRoYXQgaXMgZGVsaWJlcmF0ZSByYXRoZXIgdGhhbiBhbiBvdmVybGFwIHRvIHJlc29sdmU6IGV2ZXJ5dGhpbmcgc2NvcGVkIHRvXG4gICAgICogYGNvbnRleHQuc2NyaXB0RmlsZXNgIG9ubHkgdHVybnMgcnVsZXMgT0ZGIChgaW1wb3J0LXgvbm8tbm9kZWpzLW1vZHVsZXNgLCBgdW5pY29ybi9uby1wcm9jZXNzLWV4aXRgKSwgYm90aCBvZlxuICAgICAqIHdoaWNoIGEgc2NyaXB0IHRlc3Qgd2FudHMgYXMgbXVjaCBhcyB0aGUgc2NyaXB0IGRvZXMsIHNvIHRoZSB0d28gc2V0cyBjb21wb3NlIGluc3RlYWQgb2YgY29tcGV0aW5nLiBLZWVwIGl0IHRoYXRcbiAgICAgKiB3YXkgLS0gYSBydWxlIHR1cm5lZCBPTiBmb3IgYHNjcmlwdEZpbGVzYCB3b3VsZCBsYW5kIG9uIHRoZXNlIGZpbGVzIHRvbywgYW5kIGZsYXQtY29uZmlnIG9yZGVyLCBub3QgaW50ZW50LFxuICAgICAqIHdvdWxkIGRlY2lkZSB3aGljaCBzaWRlIHdvbi5cbiAgICAgKi9cbiAgICBqb2luKFJlcG9QYXRocy5TY3JpcHRzLCBSZXBvUGF0aHMuQW55UGF0aCwgUmVwb1BhdGhzLkFueVRlc3RUcylcbiAgKTtcbiAgcmV0dXJuIGNvbnRleHQ7XG59XG5cbi8qKlxuICogQnVpbGRzIHRoZSBFU0xpbnQgY29uZmlndXJhdGlvbnMgb2YgYSBnZW5lcmljIFR5cGVTY3JpcHQgcHJvamVjdC5cbiAqXG4gKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSBwYXJhbWV0ZXJzIGZvciBkZWZpbmluZyBFU0xpbnQgY29uZmlndXJhdGlvbnMuXG4gKiBAcmV0dXJucyBUaGUgRVNMaW50IGNvbmZpZ3VyYXRpb25zLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZGVmaW5lRXNsaW50Q29uZmlncyhvcHRpb25zOiBEZWZpbmVFc2xpbnRDb25maWdzT3B0aW9ucyA9IHt9KTogTGludGVyLkNvbmZpZ1tdIHtcbiAgY29uc3QgY29udGV4dCA9IGNyZWF0ZURlZmF1bHRFc2xpbnRDb25maWdDb250ZXh0KCk7XG4gIG9wdGlvbnMuZWRpdENvbnRleHQ/Lihjb250ZXh0KTtcbiAgY29uc3QgY3VzdG9tQ29uZmlncyA9IG9wdGlvbnMuY3VzdG9tQ29uZmlncz8uKGNvbnRleHQpID8/IFtdO1xuXG4gIHJldHVybiBkZWZpbmVDb25maWcoXG4gICAgLi4uZ2V0R2xvYmFsSWdub3JlQ29uZmlncygpLFxuICAgIC4uLmdldFR5cGVTY3JpcHRFc2xpbnRDb25maWdzKHtcbiAgICAgIGNvbnRleHQsXG4gICAgICAuLi4ob3B0aW9ucy5taW5pbXVtTm9kZVZlcnNpb24gIT09IHVuZGVmaW5lZCAmJiB7IG1pbmltdW1Ob2RlVmVyc2lvbjogb3B0aW9ucy5taW5pbXVtTm9kZVZlcnNpb24gfSlcbiAgICB9KSxcbiAgICAuLi5jdXN0b21Db25maWdzXG4gICk7XG59XG5cbi8qKlxuICogVGhlIGNvbmZpZ3VyYXRpb25zIG9mIEVTTGludCdzIG93biBydWxlcy4gQSBwcm9qZWN0LXR5cGUgbGF5ZXIgcmVhZHMgaXQgdG8gbGVhcm4gd2hpY2ggY29yZSBydWxlcyB0aGlzXG4gKiBjb25maWd1cmF0aW9uIHNldHMgaXRzZWxmLlxuICpcbiAqIEBwYXJhbSBjb250ZXh0IC0gVGhlIEVTTGludCBjb25maWd1cmF0aW9uIGNvbnRleHQuXG4gKiBAcmV0dXJucyBUaGUgY29uZmlndXJhdGlvbnMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRFc2xpbnRDb3JlQ29uZmlncyhjb250ZXh0OiBFc2xpbnRDb25maWdDb250ZXh0KTogTGludGVyLkNvbmZpZ1tdIHtcbiAgcmV0dXJuIGRlZmluZUNvbmZpZyhbXG4gICAge1xuICAgICAgZXh0ZW5kczogW2VzbGludC5jb25maWdzLnJlY29tbWVuZGVkXSxcbiAgICAgIGZpbGVzOiBjb250ZXh0LmFsbEZpbGVzKCksXG4gICAgICBydWxlczoge1xuICAgICAgICAnYWNjZXNzb3ItcGFpcnMnOiAnZXJyb3InLFxuICAgICAgICAnYXJyYXktY2FsbGJhY2stcmV0dXJuJzogJ2Vycm9yJyxcbiAgICAgICAgJ2NhbWVsY2FzZSc6ICdlcnJvcicsXG4gICAgICAgIC8qXG4gICAgICAgICAqIFRoZSBydWxlIHJlcG9ydHMgcGVyIGNvbW1lbnQgVE9LRU4sIHNvIGV2ZXJ5IGNvbnRpbnVhdGlvbiBsaW5lIG9mIGEgd3JhcHBlZCBgLy9gIGNvbW1lbnQgaXMgaXRzIG93biB0b2tlblxuICAgICAgICAgKiB0aGF0IHdvdWxkIGhhdmUgdG8gc3RhcnQgd2l0aCBhIGNhcGl0YWwg4oCUIHdoaWNoIGlzIGhvdyBwcm9zZSBlbmRzIHVwIHdpdGggY2FwaXRhbHMgbWlkLXNlbnRlbmNlLlxuICAgICAgICAgKiBgaWdub3JlQ29uc2VjdXRpdmVDb21tZW50c2AgZXhlbXB0cyBhIGxpbmUgY29tbWVudCB0aGF0IGRpcmVjdGx5IGZvbGxvd3MgYW5vdGhlciBvbmUsIHdoaWNoIGlzIGV4YWN0bHkgdGhlXG4gICAgICAgICAqIHNoYXBlIG9mIGEgd3JhcHBlZCBibG9jaywgd2hpbGUgc3RpbGwgaG9sZGluZyBpdHMgRklSU1QgbGluZSB0byBhIGNhcGl0YWwuIEJsb2NrIGNvbW1lbnRzIG5lZWQgbm8gc3VjaFxuICAgICAgICAgKiBvcHRpb246IGEgYmxvY2sgY29tbWVudCBpcyBhIHNpbmdsZSB0b2tlbiBob3dldmVyIG1hbnkgbGluZXMgaXQgc3BhbnMuXG4gICAgICAgICAqIGBpZ25vcmVQYXR0ZXJuYCBjb3ZlcnMgdGhlIGhhbGYgdGhhdCBsZWF2ZXMgYmVoaW5kOiBhIGNvbW1lbnQgd2hvc2UgRklSU1Qgd29yZCBpcyBhIGNhbWVsQ2FzZSBpZGVudGlmaWVyIGlzXG4gICAgICAgICAqIGV4ZW1wdCwgc28gYSBjb21tZW50IHRoYXQgb3BlbnMgYnkgbmFtaW5nIGEgc3ltYm9sIGtlZXBzIHRoZSBuYW1lIGEgcmVhZGVyIGNhbiBncmVwIGluc3RlYWQgb2YgYSBQYXNjYWxDYXNlXG4gICAgICAgICAqIG9uZSB0aGF0IGV4aXN0cyBub3doZXJlLiBUaGUgcnVsZSBhbmNob3JzIHRoZSBwYXR0ZXJuIGF0IHRoZSBzdGFydCBvZiB0aGUgY29tbWVudCBhbmQgYFthLXpBLVowLTldYCBtYXRjaGVzXG4gICAgICAgICAqIG5vIHdoaXRlc3BhY2UsIHNvIGl0IGNhbiBvbmx5IGV2ZXIgbWF0Y2ggdGhhdCBmaXJzdCB3b3JkIOKAlCBvcmRpbmFyeSBsb3dlcmNhc2UgcHJvc2Ugc3RheXMgcmVwb3J0ZWQuIEJvdGhcbiAgICAgICAgICogb3B0aW9uIGJhZ3MgbmVlZCBpdCwgYW5kIGBibG9ja2Aga2VlcHMgaXRzIGB2OGAgZXhlbXB0aW9uIGJ5IGFsdGVybmF0aW9uIHJhdGhlciB0aGFuIGxvc2luZyBpdC5cbiAgICAgICAgICovXG4gICAgICAgICdjYXBpdGFsaXplZC1jb21tZW50cyc6IFtcbiAgICAgICAgICAnZXJyb3InLFxuICAgICAgICAgICdhbHdheXMnLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGJsb2NrOiB7IGlnbm9yZVBhdHRlcm46ICd2OHxbYS16XVthLXpBLVowLTldKltBLVpdJyB9LFxuICAgICAgICAgICAgbGluZTogeyBpZ25vcmVDb25zZWN1dGl2ZUNvbW1lbnRzOiB0cnVlLCBpZ25vcmVQYXR0ZXJuOiAnW2Etel1bYS16QS1aMC05XSpbQS1aXScgfVxuICAgICAgICAgIH1cbiAgICAgICAgXSxcbiAgICAgICAgJ2NvbXBsZXhpdHknOiAnZXJyb3InLFxuICAgICAgICAnY29uc2lzdGVudC10aGlzJzogJ2Vycm9yJyxcbiAgICAgICAgJ2N1cmx5JzogJ2Vycm9yJyxcbiAgICAgICAgJ2RlZmF1bHQtY2FzZSc6ICdlcnJvcicsXG4gICAgICAgICdkZWZhdWx0LWNhc2UtbGFzdCc6ICdlcnJvcicsXG4gICAgICAgICdkZWZhdWx0LXBhcmFtLWxhc3QnOiAnZXJyb3InLFxuICAgICAgICAnZXFlcWVxJzogJ2Vycm9yJyxcbiAgICAgICAgJ2Z1bmMtbmFtZS1tYXRjaGluZyc6ICdlcnJvcicsXG4gICAgICAgICdmdW5jLW5hbWVzJzogJ2Vycm9yJyxcbiAgICAgICAgJ2Z1bmMtc3R5bGUnOiBbXG4gICAgICAgICAgJ2Vycm9yJyxcbiAgICAgICAgICAnZGVjbGFyYXRpb24nLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGFsbG93QXJyb3dGdW5jdGlvbnM6IGZhbHNlXG4gICAgICAgICAgfVxuICAgICAgICBdLFxuICAgICAgICAnZ3JvdXBlZC1hY2Nlc3Nvci1wYWlycyc6IFtcbiAgICAgICAgICAnZXJyb3InLFxuICAgICAgICAgICdnZXRCZWZvcmVTZXQnXG4gICAgICAgIF0sXG4gICAgICAgICdndWFyZC1mb3ItaW4nOiAnZXJyb3InLFxuICAgICAgICAnbm8tYWxlcnQnOiAnZXJyb3InLFxuICAgICAgICAnbm8tYXJyYXktY29uc3RydWN0b3InOiAnZXJyb3InLFxuICAgICAgICAnbm8tYml0d2lzZSc6ICdlcnJvcicsXG4gICAgICAgICduby1jYWxsZXInOiAnZXJyb3InLFxuICAgICAgICAnbm8tY29uc29sZSc6IFtcbiAgICAgICAgICAnZXJyb3InLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGFsbG93OiBbXG4gICAgICAgICAgICAgICd3YXJuJyxcbiAgICAgICAgICAgICAgJ2Vycm9yJ1xuICAgICAgICAgICAgXVxuICAgICAgICAgIH1cbiAgICAgICAgXSxcbiAgICAgICAgJ25vLWNvbnN0cnVjdG9yLXJldHVybic6ICdlcnJvcicsXG4gICAgICAgICduby1kaXYtcmVnZXgnOiAnZXJyb3InLFxuICAgICAgICAnbm8tZWxzZS1yZXR1cm4nOiBbXG4gICAgICAgICAgJ2Vycm9yJyxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBhbGxvd0Vsc2VJZjogZmFsc2VcbiAgICAgICAgICB9XG4gICAgICAgIF0sXG4gICAgICAgICduby1lbXB0eS1mdW5jdGlvbic6ICdlcnJvcicsXG4gICAgICAgICduby1leHRlbmQtbmF0aXZlJzogJ2Vycm9yJyxcbiAgICAgICAgJ25vLWV4dHJhLWJpbmQnOiAnZXJyb3InLFxuICAgICAgICAnbm8tZXh0cmEtbGFiZWwnOiAnZXJyb3InLFxuICAgICAgICAnbm8taW1wbGljaXQtY29lcmNpb24nOiBbXG4gICAgICAgICAgJ2Vycm9yJyxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBhbGxvdzogW1xuICAgICAgICAgICAgICAnISEnXG4gICAgICAgICAgICBdXG4gICAgICAgICAgfVxuICAgICAgICBdLFxuICAgICAgICAnbm8taW1wbGllZC1ldmFsJzogJ2Vycm9yJyxcbiAgICAgICAgJ25vLWlubmVyLWRlY2xhcmF0aW9ucyc6ICdlcnJvcicsXG4gICAgICAgICduby1pdGVyYXRvcic6ICdlcnJvcicsXG4gICAgICAgICduby1sYWJlbC12YXInOiAnZXJyb3InLFxuICAgICAgICAnbm8tbGFiZWxzJzogJ2Vycm9yJyxcbiAgICAgICAgJ25vLWxvbmUtYmxvY2tzJzogJ2Vycm9yJyxcbiAgICAgICAgJ25vLWxvbmVseS1pZic6ICdlcnJvcicsXG4gICAgICAgICduby1sb29wLWZ1bmMnOiAnZXJyb3InLFxuICAgICAgICAnbm8tbWFnaWMtbnVtYmVycyc6IFtcbiAgICAgICAgICAnZXJyb3InLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGRldGVjdE9iamVjdHM6IHRydWUsXG4gICAgICAgICAgICBlbmZvcmNlQ29uc3Q6IHRydWUsXG4gICAgICAgICAgICBpZ25vcmU6IFtcbiAgICAgICAgICAgICAgLTEsXG4gICAgICAgICAgICAgIDAsXG4gICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF1cbiAgICAgICAgICB9XG4gICAgICAgIF0sXG4gICAgICAgICduby1tdWx0aS1hc3NpZ24nOiAnZXJyb3InLFxuICAgICAgICAnbm8tbXVsdGktc3RyJzogJ2Vycm9yJyxcbiAgICAgICAgJ25vLW5lZ2F0ZWQtY29uZGl0aW9uJzogJ2Vycm9yJyxcbiAgICAgICAgJ25vLW5lc3RlZC10ZXJuYXJ5JzogJ2Vycm9yJyxcbiAgICAgICAgJ25vLW5ldy1mdW5jJzogJ2Vycm9yJyxcbiAgICAgICAgJ25vLW5ldy13cmFwcGVycyc6ICdlcnJvcicsXG4gICAgICAgICduby1vYmplY3QtY29uc3RydWN0b3InOiAnZXJyb3InLFxuICAgICAgICAnbm8tb2N0YWwtZXNjYXBlJzogJ2Vycm9yJyxcbiAgICAgICAgJ25vLXByb21pc2UtZXhlY3V0b3ItcmV0dXJuJzogJ2Vycm9yJyxcbiAgICAgICAgJ25vLXByb3RvJzogJ2Vycm9yJyxcbiAgICAgICAgJ25vLXJlc3RyaWN0ZWQtc3ludGF4JzogW1xuICAgICAgICAgICdlcnJvcicsXG4gICAgICAgICAgLi4ubm9SZXN0cmljdGVkU3ludGF4UnVsZUVudHJpZXNcbiAgICAgICAgXSxcbiAgICAgICAgJ25vLXJldHVybi1hc3NpZ24nOiAnZXJyb3InLFxuICAgICAgICAnbm8tc2NyaXB0LXVybCc6ICdlcnJvcicsXG4gICAgICAgICduby1zZWxmLWNvbXBhcmUnOiAnZXJyb3InLFxuICAgICAgICAnbm8tc2VxdWVuY2VzJzogJ2Vycm9yJyxcbiAgICAgICAgJ25vLXNoYWRvdyc6ICdlcnJvcicsXG4gICAgICAgICduby10ZW1wbGF0ZS1jdXJseS1pbi1zdHJpbmcnOiAnZXJyb3InLFxuICAgICAgICAnbm8tdGhyb3ctbGl0ZXJhbCc6ICdlcnJvcicsXG4gICAgICAgICduby11bm1vZGlmaWVkLWxvb3AtY29uZGl0aW9uJzogJ2Vycm9yJyxcbiAgICAgICAgJ25vLXVubmVlZGVkLXRlcm5hcnknOiAnZXJyb3InLFxuICAgICAgICAnbm8tdW5yZWFjaGFibGUtbG9vcCc6ICdlcnJvcicsXG4gICAgICAgICduby11bnVzZWQtZXhwcmVzc2lvbnMnOiAnZXJyb3InLFxuICAgICAgICAnbm8tdXNlbGVzcy1hc3NpZ25tZW50JzogJ2Vycm9yJyxcbiAgICAgICAgJ25vLXVzZWxlc3MtY2FsbCc6ICdlcnJvcicsXG4gICAgICAgICduby11c2VsZXNzLWNvbXB1dGVkLWtleSc6ICdlcnJvcicsXG4gICAgICAgICduby11c2VsZXNzLWNvbmNhdCc6ICdlcnJvcicsXG4gICAgICAgICduby11c2VsZXNzLWNvbnN0cnVjdG9yJzogJ2Vycm9yJyxcbiAgICAgICAgJ25vLXVzZWxlc3MtcmVuYW1lJzogJ2Vycm9yJyxcbiAgICAgICAgJ25vLXVzZWxlc3MtcmV0dXJuJzogJ2Vycm9yJyxcbiAgICAgICAgJ25vLXZhcic6ICdlcnJvcicsXG4gICAgICAgICduby12b2lkJzogJ2Vycm9yJyxcbiAgICAgICAgJ29iamVjdC1zaG9ydGhhbmQnOiAnZXJyb3InLFxuICAgICAgICAnb3BlcmF0b3ItYXNzaWdubWVudCc6ICdlcnJvcicsXG4gICAgICAgICdwcmVmZXItYXJyb3ctY2FsbGJhY2snOiAnZXJyb3InLFxuICAgICAgICAncHJlZmVyLWNvbnN0JzogJ2Vycm9yJyxcbiAgICAgICAgJ3ByZWZlci1leHBvbmVudGlhdGlvbi1vcGVyYXRvcic6ICdlcnJvcicsXG4gICAgICAgICdwcmVmZXItbmFtZWQtY2FwdHVyZS1ncm91cCc6ICdlcnJvcicsXG4gICAgICAgICdwcmVmZXItbnVtZXJpYy1saXRlcmFscyc6ICdlcnJvcicsXG4gICAgICAgICdwcmVmZXItb2JqZWN0LWhhcy1vd24nOiAnZXJyb3InLFxuICAgICAgICAncHJlZmVyLW9iamVjdC1zcHJlYWQnOiAnZXJyb3InLFxuICAgICAgICAncHJlZmVyLXByb21pc2UtcmVqZWN0LWVycm9ycyc6ICdlcnJvcicsXG4gICAgICAgICdwcmVmZXItcmVnZXgtbGl0ZXJhbHMnOiAnZXJyb3InLFxuICAgICAgICAncHJlZmVyLXJlc3QtcGFyYW1zJzogJ2Vycm9yJyxcbiAgICAgICAgJ3ByZWZlci1zcHJlYWQnOiAnZXJyb3InLFxuICAgICAgICAncHJlZmVyLXRlbXBsYXRlJzogJ2Vycm9yJyxcbiAgICAgICAgJ3JhZGl4JzogJ2Vycm9yJyxcbiAgICAgICAgJ3JlcXVpcmUtYXRvbWljLXVwZGF0ZXMnOiAnZXJyb3InLFxuICAgICAgICAncmVxdWlyZS1hd2FpdCc6ICdlcnJvcicsXG4gICAgICAgICdzeW1ib2wtZGVzY3JpcHRpb24nOiAnZXJyb3InLFxuICAgICAgICAndW5pY29kZS1ib20nOiAnZXJyb3InLFxuICAgICAgICAndmFycy1vbi10b3AnOiAnZXJyb3InLFxuICAgICAgICAneW9kYSc6ICdlcnJvcidcbiAgICAgIH1cbiAgICB9LFxuICAgIHtcbiAgICAgIGZpbGVzOiBjb250ZXh0LnRlc3RGaWxlcyxcbiAgICAgIHJ1bGVzOiB7XG4gICAgICAgICduby1tYWdpYy1udW1iZXJzJzogJ29mZidcbiAgICAgIH1cbiAgICB9XG4gIF0pO1xufVxuXG4vKipcbiAqIFRoZSBnbG9iYWwgaWdub3JlczogZXZlcnl0aGluZyBgLmdpdGlnbm9yZWAgbmFtZXMsIHBsdXMgQ2xhdWRlIENvZGUncyB3b3JrdHJlZSBmb2xkZXIuXG4gKlxuICogQHJldHVybnMgVGhlIGNvbmZpZ3VyYXRpb25zLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0R2xvYmFsSWdub3JlQ29uZmlncygpOiBMaW50ZXIuQ29uZmlnW10ge1xuICByZXR1cm4gZGVmaW5lQ29uZmlnKFxuICAgIC4uLmdldEdpdElnbm9yZUNvbmZpZ3MoKSxcbiAgICAvKlxuICAgICAqIE9uIHRvcCBvZiBgLmdpdGlnbm9yZWAsIG5vdCBpbnN0ZWFkIG9mIGl0OiBnaXQgZXhjbHVkZXMgQ2xhdWRlIENvZGUncyB3b3JrdHJlZSBmb2xkZXIgdGhyb3VnaFxuICAgICAqIGAuZ2l0L2luZm8vZXhjbHVkZWAsIHdoaWNoIGBpbmNsdWRlSWdub3JlRmlsZWAgYWJvdmUgZG9lcyBub3QgcmVhZC4gU2VlIGBsaW50LWlnbm9yZXMudHNgLlxuICAgICAqL1xuICAgIGdsb2JhbElnbm9yZXMoW0NMQVVERV9XT1JLVFJFRVNfSUdOT1JFX0dMT0JdLCAndHlwZXNjcmlwdC1kZXYtdG9vbGtpdC9jbGF1ZGUtd29ya3RyZWVzJylcbiAgKTtcbn1cblxuLyoqXG4gKiBUaGUgZ2VuZXJpYyBsYXllcnMgb2YgdGhlIHNoYXJlZCBjb25maWd1cmF0aW9uLCB3aXRob3V0IHRoZSBnbG9iYWwgaWdub3Jlcy5cbiAqXG4gKiBAcGFyYW0gcGFyYW1zIC0gVGhlIHBhcmFtZXRlcnMuXG4gKiBAcmV0dXJucyBUaGUgY29uZmlndXJhdGlvbnMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRUeXBlU2NyaXB0RXNsaW50Q29uZmlncyhwYXJhbXM6IEdldFR5cGVTY3JpcHRFc2xpbnRDb25maWdzUGFyYW1zKTogTGludGVyLkNvbmZpZ1tdIHtcbiAgY29uc3QgeyBjb250ZXh0IH0gPSBwYXJhbXM7XG4gIHJldHVybiBkZWZpbmVDb25maWcoXG4gICAgLi4uZ2V0RXNsaW50Q29yZUNvbmZpZ3MoY29udGV4dCksXG4gICAgLi4uZ2V0VHNlc2xpbnRDb25maWdzKGNvbnRleHQpLFxuICAgIC4uLmdldFN0eWxpc3RpY0NvbmZpZ3MoY29udGV4dCksXG4gICAgLi4uZ2V0SW1wb3J0WENvbmZpZ3MoY29udGV4dCksXG4gICAgLi4uZ2V0UGVyZmVjdGlvbmlzdENvbmZpZ3MoY29udGV4dCksXG4gICAgLi4uZ2V0VW5pY29ybkNvbmZpZ3MoY29udGV4dCksXG4gICAgLi4uZ2V0RXNsaW50SW1wb3J0UmVzb2x2ZXJUeXBlc2NyaXB0Q29uZmlncygpLFxuICAgIC4uLmdldEVzbGludENvbW1lbnRzQ29uZmlncyhjb250ZXh0KSxcbiAgICAuLi5nZXRJbkhvdXNlUGx1Z2luQ29uZmlncyhjb250ZXh0KSxcbiAgICAuLi5nZXROb2RlQ29tcGF0Q29uZmlncyh7IGNvbnRleHQsIG1pbmltdW1Ob2RlVmVyc2lvbjogcGFyYW1zLm1pbmltdW1Ob2RlVmVyc2lvbiB9KVxuICApO1xufVxuXG5mdW5jdGlvbiBnZXRFc2xpbnRDb21tZW50c0NvbmZpZ3MoY29udGV4dDogRXNsaW50Q29uZmlnQ29udGV4dCk6IExpbnRlci5Db25maWdbXSB7XG4gIHJldHVybiBkZWZpbmVDb25maWcoW1xuICAgIHtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQteC9uby1uYW1lZC1hcy1kZWZhdWx0LW1lbWJlciAtLSBUaGUgZGVmYXVsdCBleHBvcnQgbmFtZSBgcmVjb21tZW5kZWRgIGlzIHRvbyBjb25mdXNpbmcuXG4gICAgICBleHRlbmRzOiBbY29tbWVudHNDb25maWdzLnJlY29tbWVuZGVkXSxcbiAgICAgIGZpbGVzOiBjb250ZXh0LmFsbEZpbGVzKCksXG4gICAgICBydWxlczoge1xuICAgICAgICAnQGVzbGludC1jb21tdW5pdHkvZXNsaW50LWNvbW1lbnRzL3JlcXVpcmUtZGVzY3JpcHRpb24nOiAnZXJyb3InXG4gICAgICB9XG4gICAgfVxuICBdKTtcbn1cblxuZnVuY3Rpb24gZ2V0RXNsaW50SW1wb3J0UmVzb2x2ZXJUeXBlc2NyaXB0Q29uZmlncygpOiBMaW50ZXIuQ29uZmlnW10ge1xuICByZXR1cm4gZGVmaW5lQ29uZmlnKFtcbiAgICB7XG4gICAgICBzZXR0aW5nczoge1xuICAgICAgICAnaW1wb3J0LXgvcmVzb2x2ZXItbmV4dCc6IFtcbiAgICAgICAgICBjcmVhdGVUeXBlU2NyaXB0SW1wb3J0UmVzb2x2ZXIoe1xuICAgICAgICAgICAgYWx3YXlzVHJ5VHlwZXM6IHRydWVcbiAgICAgICAgICB9KVxuICAgICAgICBdXG4gICAgICB9XG4gICAgfVxuICBdKTtcbn1cblxuZnVuY3Rpb24gZ2V0R2l0SWdub3JlQ29uZmlncygpOiBMaW50ZXIuQ29uZmlnW10ge1xuICBjb25zdCBnaXRpZ25vcmVQYXRoID0gam9pbihnZXRSb290Rm9sZGVyKCkgPz8gJycsICcuZ2l0aWdub3JlJyk7XG4gIHJldHVybiBleGlzdHNTeW5jKGdpdGlnbm9yZVBhdGgpID8gW2luY2x1ZGVJZ25vcmVGaWxlKGdpdGlnbm9yZVBhdGgpXSA6IFtdO1xufVxuXG5mdW5jdGlvbiBnZXRJbXBvcnRYQ29uZmlncyhjb250ZXh0OiBFc2xpbnRDb25maWdDb250ZXh0KTogTGludGVyLkNvbmZpZ1tdIHtcbiAgcmV0dXJuIGRlZmluZUNvbmZpZyhbXG4gICAge1xuICAgICAgZXh0ZW5kczogW1xuICAgICAgICBlc2xpbnRQbHVnaW5JbXBvcnRYRmxhdENvbmZpZ3MucmVjb21tZW5kZWQsXG4gICAgICAgIGVzbGludFBsdWdpbkltcG9ydFhGbGF0Q29uZmlncy50eXBlc2NyaXB0LFxuICAgICAgICBlc2xpbnRQbHVnaW5JbXBvcnRYRmxhdENvbmZpZ3MuZXJyb3JzLFxuICAgICAgICBlc2xpbnRQbHVnaW5JbXBvcnRYRmxhdENvbmZpZ3Mud2FybmluZ3NcbiAgICAgIF0sXG4gICAgICBmaWxlczogY29udGV4dC5hbGxGaWxlcygpLFxuICAgICAgcnVsZXM6IHtcbiAgICAgICAgJ2ltcG9ydC14L2NvbnNpc3RlbnQtdHlwZS1zcGVjaWZpZXItc3R5bGUnOiAnZXJyb3InLFxuICAgICAgICAnaW1wb3J0LXgvZXh0ZW5zaW9ucyc6IFsnZXJyb3InLCAnaWdub3JlUGFja2FnZXMnXSxcbiAgICAgICAgJ2ltcG9ydC14L2ZpcnN0JzogJ2Vycm9yJyxcbiAgICAgICAgJ2ltcG9ydC14L2ltcG9ydHMtZmlyc3QnOiAnZXJyb3InLFxuICAgICAgICAnaW1wb3J0LXgvbmV3bGluZS1hZnRlci1pbXBvcnQnOiAnZXJyb3InLFxuICAgICAgICAnaW1wb3J0LXgvbm8tYWJzb2x1dGUtcGF0aCc6ICdlcnJvcicsXG4gICAgICAgICdpbXBvcnQteC9uby1hbWQnOiAnZXJyb3InLFxuICAgICAgICAnaW1wb3J0LXgvbm8tYW5vbnltb3VzLWRlZmF1bHQtZXhwb3J0JzogJ2Vycm9yJyxcbiAgICAgICAgJ2ltcG9ydC14L25vLWNvbW1vbmpzJzogJ2Vycm9yJyxcbiAgICAgICAgJ2ltcG9ydC14L25vLWN5Y2xlJzogJ2Vycm9yJyxcbiAgICAgICAgJ2ltcG9ydC14L25vLWRlZmF1bHQtZXhwb3J0JzogJ2Vycm9yJyxcbiAgICAgICAgJ2ltcG9ydC14L25vLWRlcHJlY2F0ZWQnOiAnZXJyb3InLFxuICAgICAgICAnaW1wb3J0LXgvbm8tZHVwbGljYXRlcyc6ICdlcnJvcicsXG4gICAgICAgICdpbXBvcnQteC9uby1keW5hbWljLXJlcXVpcmUnOiAnZXJyb3InLFxuICAgICAgICAnaW1wb3J0LXgvbm8tZW1wdHktbmFtZWQtYmxvY2tzJzogJ2Vycm9yJyxcbiAgICAgICAgJ2ltcG9ydC14L25vLWV4dHJhbmVvdXMtZGVwZW5kZW5jaWVzJzogJ2Vycm9yJyxcbiAgICAgICAgJ2ltcG9ydC14L25vLWltcG9ydC1tb2R1bGUtZXhwb3J0cyc6ICdlcnJvcicsXG4gICAgICAgICdpbXBvcnQteC9uby1tdXRhYmxlLWV4cG9ydHMnOiAnZXJyb3InLFxuICAgICAgICAnaW1wb3J0LXgvbm8tbmFtZWQtZGVmYXVsdCc6ICdlcnJvcicsXG4gICAgICAgICdpbXBvcnQteC9uby1uYW1lc3BhY2UnOiAnZXJyb3InLFxuICAgICAgICAnaW1wb3J0LXgvbm8tbm9kZWpzLW1vZHVsZXMnOiAnZXJyb3InLFxuICAgICAgICAnaW1wb3J0LXgvbm8tcmVsYXRpdmUtcGFja2FnZXMnOiAnZXJyb3InLFxuICAgICAgICAnaW1wb3J0LXgvbm8tcmVzdHJpY3RlZC1wYXRocyc6ICdlcnJvcicsXG4gICAgICAgICdpbXBvcnQteC9uby1zZWxmLWltcG9ydCc6ICdlcnJvcicsXG4gICAgICAgICdpbXBvcnQteC9uby11bmFzc2lnbmVkLWltcG9ydCc6IFtcbiAgICAgICAgICAnZXJyb3InLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGFsbG93OiBbXG4gICAgICAgICAgICAgICcqKi8qLmNzcycsXG4gICAgICAgICAgICAgICcqKi8qLnNhc3MnLFxuICAgICAgICAgICAgICAnKiovKi5zY3NzJ1xuICAgICAgICAgICAgXVxuICAgICAgICAgIH1cbiAgICAgICAgXSxcbiAgICAgICAgJ2ltcG9ydC14L25vLXVudXNlZC1tb2R1bGVzJzogJ29mZicsXG4gICAgICAgICdpbXBvcnQteC9uby11c2VsZXNzLXBhdGgtc2VnbWVudHMnOiAnZXJyb3InLFxuICAgICAgICAnaW1wb3J0LXgvbm8td2VicGFjay1sb2FkZXItc3ludGF4JzogJ2Vycm9yJ1xuICAgICAgfVxuICAgIH0sXG4gICAge1xuICAgICAgZmlsZXM6IGNvbnRleHQuc2NyaXB0RmlsZXMsXG4gICAgICBydWxlczoge1xuICAgICAgICAnaW1wb3J0LXgvbm8tbm9kZWpzLW1vZHVsZXMnOiAnb2ZmJ1xuICAgICAgfVxuICAgIH0sXG4gICAge1xuICAgICAgLy8gQSB0ZXN0IHJ1bnMgdW5kZXIgdGhlIHRlc3QgcnVubmVyIGluIE5vZGUgYW5kIGlzIG5ldmVyIGJ1bmRsZWQgaW50byBhbnl0aGluZyB0aGF0IHNoaXBzLlxuICAgICAgZmlsZXM6IGNvbnRleHQudGVzdEZpbGVzLFxuICAgICAgcnVsZXM6IHtcbiAgICAgICAgJ2ltcG9ydC14L25vLW5vZGVqcy1tb2R1bGVzJzogJ29mZidcbiAgICAgIH1cbiAgICB9LFxuICAgIHtcbiAgICAgIGZpbGVzOiBjb250ZXh0LnJvb3RDb25maWdGaWxlcyxcbiAgICAgIHJ1bGVzOiB7XG4gICAgICAgICdpbXBvcnQteC9uby1kZWZhdWx0LWV4cG9ydCc6ICdvZmYnXG4gICAgICB9XG4gICAgfVxuICBdKTtcbn1cblxuZnVuY3Rpb24gZ2V0SW5Ib3VzZVBsdWdpbkNvbmZpZ3MoY29udGV4dDogRXNsaW50Q29uZmlnQ29udGV4dCk6IExpbnRlci5Db25maWdbXSB7XG4gIHJldHVybiBkZWZpbmVDb25maWcoW1xuICAgIHtcbiAgICAgIGZpbGVzOiBjb250ZXh0LmFsbEZpbGVzKCksXG4gICAgICBwbHVnaW5zOiB7XG4gICAgICAgIFtJTl9IT1VTRV9FU0xJTlRfUExVR0lOX05BTUVdOiBpbkhvdXNlRXNsaW50UGx1Z2luXG4gICAgICB9LFxuICAgICAgcnVsZXM6IHtcbiAgICAgICAgJ3R5cGVzY3JpcHQtZGV2LXRvb2xraXQvbm8tYXN5bmMtY2FsbGJhY2stdG8tdW5zYWZlLXJldHVybic6ICdlcnJvcicsXG4gICAgICAgICd0eXBlc2NyaXB0LWRldi10b29sa2l0L25vLWtleXdvcmQtaWRlbnRpZmllcnMnOiAnZXJyb3InLFxuICAgICAgICAvKlxuICAgICAgICAgKiBNZWFzdXJlZCBvdmVyIDMyIHBsdWdpbnMgYnVpbHQgb24gdGhpcyBjb25maWcgYmVmb3JlIGl0IHdhcyB0dXJuZWQgb24gKDIwMjYtMDktMjQpOiAyOSBoYWQgbm8gZmluZGluZyxcbiAgICAgICAgICogdGhlIG90aGVyIHRocmVlIGhhZCA4IGJldHdlZW4gdGhlbSwgZXZlcnkgb25lIGEgZ2VudWluZWx5IGRlYWQgbGluay5cbiAgICAgICAgICovXG4gICAgICAgICd0eXBlc2NyaXB0LWRldi10b29sa2l0L25vLXVucmVzb2x2ZWQtanNkb2MtbGluayc6ICdlcnJvcicsXG4gICAgICAgICd0eXBlc2NyaXB0LWRldi10b29sa2l0L25vLXVudXNlZC1wYXJhbXMtbWVtYmVycyc6ICdlcnJvcicsXG4gICAgICAgICd0eXBlc2NyaXB0LWRldi10b29sa2l0L25vLXVzZWQtdW5kZXJzY29yZS12YXJpYWJsZXMnOiAnZXJyb3InLFxuICAgICAgICAndHlwZXNjcmlwdC1kZXYtdG9vbGtpdC9wYXJhbXMtb3B0aW9ucy1uYW1lLW1hdGNoJzogJ2Vycm9yJyxcbiAgICAgICAgJ3R5cGVzY3JpcHQtZGV2LXRvb2xraXQvcHJlZmVyLWRlZGVudCc6ICdlcnJvcicsXG4gICAgICAgICd0eXBlc2NyaXB0LWRldi10b29sa2l0L3ByZWZlci1sb2dpY2FsLW9wZXJhdG9yLW92ZXItdGVybmFyeSc6ICdlcnJvcicsXG4gICAgICAgICd0eXBlc2NyaXB0LWRldi10b29sa2l0L3ByZWZlci1ub29wLWFzeW5jJzogJ2Vycm9yJyxcbiAgICAgICAgJ3R5cGVzY3JpcHQtZGV2LXRvb2xraXQvcmVhZG9ubHktaW50ZXJmYWNlLW1lbWJlcnMnOiAnZXJyb3InLFxuICAgICAgICAndHlwZXNjcmlwdC1kZXYtdG9vbGtpdC9yZXF1aXJlLW1ldGhvZC10ZW1wbGF0ZSc6ICdlcnJvcicsXG4gICAgICAgICd0eXBlc2NyaXB0LWRldi10b29sa2l0L3JlcXVpcmUtc3VwZXItY2FsbCc6ICdvZmYnXG4gICAgICB9XG4gICAgfVxuICBdKTtcbn1cblxuZnVuY3Rpb24gZ2V0Tm9kZUNvbXBhdENvbmZpZ3MocGFyYW1zOiBHZXROb2RlQ29tcGF0Q29uZmlnc1BhcmFtcyk6IExpbnRlci5Db25maWdbXSB7XG4gIGNvbnN0IHsgY29udGV4dCwgbWluaW11bU5vZGVWZXJzaW9uIH0gPSBwYXJhbXM7XG4gIGNvbnN0IHZlcnNpb25PcHRpb25zID0gbWluaW11bU5vZGVWZXJzaW9uID09PSB1bmRlZmluZWQgPyB7fSA6IHsgdmVyc2lvbjogbWluaW11bU5vZGVWZXJzaW9uIH07XG5cbiAgcmV0dXJuIGRlZmluZUNvbmZpZyhbXG4gICAge1xuICAgICAgZmlsZXM6IGNvbnRleHQuc291cmNlRmlsZXMsXG4gICAgICBpZ25vcmVzOiBbXG4gICAgICAgIC4uLmNvbnRleHQudGVzdEZpbGVzLFxuICAgICAgICAvLyBEZXYtb25seSB0b29saW5nIChidWlsZCwgbGludCwgdmVyc2lvbikgcnVucyB2aWEgYGppdGlgIGluIHRoZSBkZXZlbG9wZXIncyBOb2RlIGVudmlyb25tZW50IGFuZCBuZXZlciBzaGlwcywgc28gdGhlIHNoaXBwZWQgc291cmNlJ3MgTm9kZSBmbG9vciBkb2VzIG5vdCBhcHBseSB0byBpdC5cbiAgICAgICAgLi4uY29udGV4dC5zY3JpcHRGaWxlc1xuICAgICAgXSxcbiAgICAgIHBsdWdpbnM6IHtcbiAgICAgICAgbjogbm9kZVBsdWdpblxuICAgICAgfSxcbiAgICAgIHJ1bGVzOiB7XG4gICAgICAgICduL25vLXVuc3VwcG9ydGVkLWZlYXR1cmVzL2VzLWJ1aWx0aW5zJzogW1xuICAgICAgICAgICdlcnJvcicsXG4gICAgICAgICAgdmVyc2lvbk9wdGlvbnNcbiAgICAgICAgXSxcbiAgICAgICAgJ24vbm8tdW5zdXBwb3J0ZWQtZmVhdHVyZXMvbm9kZS1idWlsdGlucyc6IFtcbiAgICAgICAgICAnZXJyb3InLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIC8vIGBCbG9iYCBhbmQgYEZpbGVgIGFyZSBET00gd2ViIGdsb2JhbHMgcHJlc2VudCBpbiBldmVyeSBzdXBwb3J0ZWQgYnJvd3NlciBlbmdpbmUsIGJ1dCB0aGUgcnVsZSBhbHNvIGtub3dzIHRoZW0gYXMgTm9kZSdzIGV4cGVyaW1lbnRhbCBidWlsdGlucyBhbmQgY2Fubm90IHRlbGwgd2hpY2ggaXMgbWVhbnQuIElnbm9yZSB0aGVtIGdsb2JhbGx5OyBnZW51aW5lbHkgbmV3ZXIgQVBJcyAoZS5nLiBgQWJvcnRTaWduYWwuYW55YCkgc3RheSBmbGFnZ2VkLlxuICAgICAgICAgICAgaWdub3JlczogW1xuICAgICAgICAgICAgICAnQmxvYicsXG4gICAgICAgICAgICAgICdGaWxlJ1xuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIC4uLnZlcnNpb25PcHRpb25zXG4gICAgICAgICAgfVxuICAgICAgICBdXG4gICAgICB9XG4gICAgfVxuICBdKTtcbn1cblxuZnVuY3Rpb24gZ2V0UGVyZmVjdGlvbmlzdENvbmZpZ3MoY29udGV4dDogRXNsaW50Q29uZmlnQ29udGV4dCk6IExpbnRlci5Db25maWdbXSB7XG4gIHJldHVybiBkZWZpbmVDb25maWcoW3tcbiAgICBleHRlbmRzOiBbcGVyZmVjdGlvbmlzdENvbmZpZ3NbJ3JlY29tbWVuZGVkLWFscGhhYmV0aWNhbCddXSxcbiAgICBmaWxlczogY29udGV4dC5hbGxGaWxlcygpXG4gIH1dKTtcbn1cblxuLyoqXG4gKiBMYXlvdXQgYmVsb25ncyB0byBkcHJpbnQuIE9ubHkgdGhlIGBAc3R5bGlzdGljYCBydWxlcyBkcHJpbnQgY2Fubm90IGV4cHJlc3MgYXJlIGtlcHQsIGVhY2ggdmVyaWZpZWQgYnkgZm9ybWF0dGluZyBhXG4gKiB2aW9sYXRpbmcgcHJvYmUgd2l0aCB0aGUgc2hhcmVkIGBkcHJpbnQuanNvbmAgYW5kIGxpbnRpbmcgdGhlIHJlc3VsdDogdGhlIHJ1bGUgc3RpbGwgcmVwb3J0cyB0aGVyZS4gRXZlcnkgb3RoZXJcbiAqIHJ1bGUgb2YgYHN0eWxpc3RpYy5jb25maWdzLnJlY29tbWVuZGVkYCB3YXMgZHJvcHBlZCwgYmVjYXVzZSBkcHJpbnQgZml4ZXMgaXQgYWxyZWFkeSwgb3IgYmVjYXVzZSBpdCBmb3VnaHQgZHByaW50XG4gKiAoYHdyYXAtaWlmZWAsIHdob3NlIHBhcmVudGhlc2VzIGRwcmludCBzdHJpcHMsIGBqc3gtcXVvdGVzYCBhZ2FpbnN0IGBxdW90ZVN0eWxlYCwgYG9wZXJhdG9yLWxpbmVicmVha2AsIGBpbmRlbnRgKS5cbiAqIFRoZSBrZXB0IHJ1bGVzIGFncmVlIHdpdGggdGhlIHNoYXJlZCBQcmV0dGllciBhbmQgQmlvbWUgY29uZmlndXJhdGlvbnMgdG9vLCBzbyBlaXRoZXIgY2FuIG93biBsYXlvdXQgaW5zdGVhZC5cbiAqXG4gKiBAcGFyYW0gY29udGV4dCAtIFRoZSB7QGxpbmsgRXNsaW50Q29uZmlnQ29udGV4dH0uXG4gKiBAcmV0dXJucyBUaGUgY29uZmlncy5cbiAqL1xuZnVuY3Rpb24gZ2V0U3R5bGlzdGljQ29uZmlncyhjb250ZXh0OiBFc2xpbnRDb25maWdDb250ZXh0KTogTGludGVyLkNvbmZpZ1tdIHtcbiAgcmV0dXJuIGRlZmluZUNvbmZpZyhbXG4gICAge1xuICAgICAgZmlsZXM6IGNvbnRleHQuYWxsRmlsZXMoKSxcbiAgICAgIHBsdWdpbnM6IHtcbiAgICAgICAgJ0BzdHlsaXN0aWMnOiBzdHlsaXN0aWNcbiAgICAgIH0sXG4gICAgICBydWxlczoge1xuICAgICAgICAvLyBUaGUgZHByaW50IGBhcnJvd0Z1bmN0aW9uLnVzZVBhcmVudGhlc2VzYCBkZWZhdWx0LCBgbWFpbnRhaW5gLCBrZWVwcyBgeCA9PiB4YC5cbiAgICAgICAgJ0BzdHlsaXN0aWMvYXJyb3ctcGFyZW5zJzogWydlcnJvcicsICdhbHdheXMnXSxcbiAgICAgICAgLy8gTm90IGxheW91dDogaXQgcmVtb3ZlcyBvciBhZGRzIHRoZSBicmFjZXMgdGhlbXNlbHZlcywgd2hpY2ggZHByaW50IG5ldmVyIGRvZXMuXG4gICAgICAgICdAc3R5bGlzdGljL2pzeC1jdXJseS1icmFjZS1wcmVzZW5jZSc6IFtcbiAgICAgICAgICAnZXJyb3InLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGNoaWxkcmVuOiAnbmV2ZXInLFxuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHVuaWNvcm4vbmFtZS1yZXBsYWNlbWVudHMgLS0gYHByb3BFbGVtZW50VmFsdWVzYCBpcyB0aGUgcnVsZSdzIG93biBvcHRpb24gbmFtZS5cbiAgICAgICAgICAgIHByb3BFbGVtZW50VmFsdWVzOiAnYWx3YXlzJyxcbiAgICAgICAgICAgIHByb3BzOiAnbmV2ZXInXG4gICAgICAgICAgfVxuICAgICAgICBdLFxuICAgICAgICAvLyBUaGUgZHByaW50IGZvcm1hdHRlciBrZWVwcyBibGFuayBsaW5lcyBhcyB3cml0dGVuIGFuZCBuZXZlciBpbnNlcnRzIG9uZS5cbiAgICAgICAgJ0BzdHlsaXN0aWMvbGluZXMtYmV0d2Vlbi1jbGFzcy1tZW1iZXJzJzogW1xuICAgICAgICAgICdlcnJvcicsXG4gICAgICAgICAgJ2Fsd2F5cycsXG4gICAgICAgICAge1xuICAgICAgICAgICAgZXhjZXB0QWZ0ZXJPdmVybG9hZDogdHJ1ZSxcbiAgICAgICAgICAgIGV4Y2VwdEFmdGVyU2luZ2xlTGluZTogdHJ1ZVxuICAgICAgICAgIH1cbiAgICAgICAgXSxcbiAgICAgICAgLy8gVGhlIGRwcmludCBmb3JtYXR0ZXIga2VlcHMgYSBudW1lcmljIGxpdGVyYWwncyB0ZXh0LCBzbyBgLjVgIGFuZCBgMi5gIHN0YXkuXG4gICAgICAgICdAc3R5bGlzdGljL25vLWZsb2F0aW5nLWRlY2ltYWwnOiAnZXJyb3InLFxuICAgICAgICAvLyBOb3QgbGF5b3V0OiBpdCBhc2tzIGZvciBwYXJlbnRoZXNlcyB0aGF0IGNoYW5nZSBob3cgdGhlIGV4cHJlc3Npb24gcmVhZHMsIHdoaWNoIGRwcmludCBuZXZlciBhZGRzLlxuICAgICAgICAnQHN0eWxpc3RpYy9uby1taXhlZC1vcGVyYXRvcnMnOiBbXG4gICAgICAgICAgJ2Vycm9yJyxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBhbGxvd1NhbWVQcmVjZWRlbmNlOiB0cnVlLFxuICAgICAgICAgICAgZ3JvdXBzOiBbXG4gICAgICAgICAgICAgIFsnPT0nLCAnIT0nLCAnPT09JywgJyE9PScsICc+JywgJz49JywgJzwnLCAnPD0nXSxcbiAgICAgICAgICAgICAgWycmJicsICd8fCddLFxuICAgICAgICAgICAgICBbJ2luJywgJ2luc3RhbmNlb2YnXVxuICAgICAgICAgICAgXVxuICAgICAgICAgIH1cbiAgICAgICAgXSxcbiAgICAgICAgLy8gVGhlIGRwcmludCBmb3JtYXR0ZXIgcmVwbGFjZXMgdGFiIGluZGVudGF0aW9uIGJ1dCBsZWF2ZXMgYSB0YWIgaW5zaWRlIGEgY29tbWVudC5cbiAgICAgICAgJ0BzdHlsaXN0aWMvbm8tdGFicyc6ICdlcnJvcicsXG4gICAgICAgIC8vIFRoZSBkcHJpbnQgYHF1b3RlUHJvcHNgIGRlZmF1bHQgaXMgYHByZXNlcnZlYC5cbiAgICAgICAgJ0BzdHlsaXN0aWMvcXVvdGUtcHJvcHMnOiBbJ2Vycm9yJywgJ2NvbnNpc3RlbnQtYXMtbmVlZGVkJ10sXG4gICAgICAgIC8vIFRoZSBkcHJpbnQgYHF1b3RlU3R5bGVgIGNvdmVycyBzdHJpbmcgbGl0ZXJhbHMgb25seSwgYW5kIGxlYXZlcyBhIHRlbXBsYXRlIGxpdGVyYWwgd2l0aCBubyBzdWJzdGl0dXRpb24uXG4gICAgICAgICdAc3R5bGlzdGljL3F1b3Rlcyc6IFtcbiAgICAgICAgICAnZXJyb3InLFxuICAgICAgICAgICdzaW5nbGUnLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGFsbG93VGVtcGxhdGVMaXRlcmFsczogJ25ldmVyJ1xuICAgICAgICAgIH1cbiAgICAgICAgXSxcbiAgICAgICAgLy8gVGhlIGRwcmludCBmb3JtYXR0ZXIgYWRkcyB0aGUgc3BhY2UgYWZ0ZXIgYC8vYCBidXQgbm90IGFmdGVyIGAvKmAgb3IgYmVmb3JlIGAqL2AuXG4gICAgICAgICdAc3R5bGlzdGljL3NwYWNlZC1jb21tZW50JzogW1xuICAgICAgICAgICdlcnJvcicsXG4gICAgICAgICAgJ2Fsd2F5cycsXG4gICAgICAgICAge1xuICAgICAgICAgICAgYmxvY2s6IHtcbiAgICAgICAgICAgICAgYmFsYW5jZWQ6IHRydWUsXG4gICAgICAgICAgICAgIGV4Y2VwdGlvbnM6IFsnKiddLFxuICAgICAgICAgICAgICBtYXJrZXJzOiBbJyEnXVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGxpbmU6IHtcbiAgICAgICAgICAgICAgZXhjZXB0aW9uczogWycvJywgJyMnXSxcbiAgICAgICAgICAgICAgbWFya2VyczogWycvJ11cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIF1cbiAgICAgIH1cbiAgICB9XG4gIF0pO1xufVxuXG5mdW5jdGlvbiBnZXRUc2VzbGludENvbmZpZ3MoY29udGV4dDogRXNsaW50Q29uZmlnQ29udGV4dCk6IExpbnRlci5Db25maWdbXSB7XG4gIHJldHVybiBkZWZpbmVDb25maWcoW1xuICAgIHtcbiAgICAgIGV4dGVuZHM6IFtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC14L25vLW5hbWVkLWFzLWRlZmF1bHQtbWVtYmVyIC0tIFRoZSBkZWZhdWx0IGV4cG9ydCBuYW1lIGBfZGVmYXVsdGAgaXMgdG9vIGNvbmZ1c2luZy5cbiAgICAgICAgLi4udHNlc2xpbnQuY29uZmlncy5zdHJpY3RUeXBlQ2hlY2tlZCxcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC14L25vLW5hbWVkLWFzLWRlZmF1bHQtbWVtYmVyIC0tIFRoZSBkZWZhdWx0IGV4cG9ydCBuYW1lIGBfZGVmYXVsdGAgaXMgdG9vIGNvbmZ1c2luZy5cbiAgICAgICAgLi4udHNlc2xpbnQuY29uZmlncy5zdHlsaXN0aWNUeXBlQ2hlY2tlZFxuICAgICAgXSxcbiAgICAgIGZpbGVzOiBjb250ZXh0LmFsbEZpbGVzKCksXG4gICAgICBsYW5ndWFnZU9wdGlvbnM6IHtcbiAgICAgICAgcGFyc2VyT3B0aW9uczoge1xuICAgICAgICAgIGVjbWFGZWF0dXJlczoge1xuICAgICAgICAgICAganN4OiB0cnVlXG4gICAgICAgICAgfSxcbiAgICAgICAgICBwcm9qZWN0U2VydmljZTogdHJ1ZSxcbiAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgdW5pY29ybi9uYW1lLXJlcGxhY2VtZW50cyAtLSBgdHNjb25maWdSb290RGlyYCBpcyBhIGB0eXBlc2NyaXB0LWVzbGludGAgcGFyc2VyIG9wdGlvbi5cbiAgICAgICAgICB0c2NvbmZpZ1Jvb3REaXI6IGdldFJvb3RGb2xkZXIoKSA/PyAnJ1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgcnVsZXM6IHtcbiAgICAgICAgJ0B0eXBlc2NyaXB0LWVzbGludC9leHBsaWNpdC1mdW5jdGlvbi1yZXR1cm4tdHlwZSc6ICdlcnJvcicsXG4gICAgICAgICdAdHlwZXNjcmlwdC1lc2xpbnQvZXhwbGljaXQtbWVtYmVyLWFjY2Vzc2liaWxpdHknOiAnZXJyb3InLFxuICAgICAgICAvLyBUaGUgcnVsZSdzIG93biBgcHJvcGVydHlgIGRlZmF1bHQsIHNwZWxsZWQgYXMgYSBiYXJlIHNldmVyaXR5IHNvIGl0IHN0YXlzIHRoZSBydWxlJ3MgZGVmYXVsdCByYXRoZXIgdGhhbiBhIGNvcHkgb2YgaXQuXG4gICAgICAgIC8vIERvIE5PVCBwYXNzIGAnbWV0aG9kJ2AgZm9yIHRpZGluZXNzOiB0aGUgbWV0aG9kIGZvcm0ga2VlcHMgcGFyYW1ldGVycyBiaXZhcmlhbnQsIGRyb3BzIGByZWFkb25seWAgKHRoZSBydWxlJ3Mgb3duIGZpeGVyXG4gICAgICAgIC8vIG1lc3NhZ2Ugc2F5cyBzbyksIGFuZCBtYWtlcyBgQHR5cGVzY3JpcHQtZXNsaW50L3VuYm91bmQtbWV0aG9kYCBmaXJlIG9uIGV2ZXJ5IGZvcndhcmRlZCBiYWcgbWVtYmVyLCB3aGljaCBpcyB3aGF0IHRoZVxuICAgICAgICAvLyBgdGhpczogdm9pZGAgYm9pbGVycGxhdGUgdXNlZCB0byBwYXkgZm9yLiBEbyBOT1QgZGVsZXRlIHRoZSBsaW5lIGVpdGhlciAtIHRoZSBydWxlIGlzIGluIG5vIHByZXNldCwgc28gdGhhdCB0dXJucyBpdCBvZmYuXG4gICAgICAgICdAdHlwZXNjcmlwdC1lc2xpbnQvbWV0aG9kLXNpZ25hdHVyZS1zdHlsZSc6ICdlcnJvcicsXG4gICAgICAgICdAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZmxvYXRpbmctcHJvbWlzZXMnOiBbJ2Vycm9yJywge1xuICAgICAgICAgIGNoZWNrVGhlbmFibGVzOiB0cnVlXG4gICAgICAgIH1dLFxuICAgICAgICAnQHR5cGVzY3JpcHQtZXNsaW50L25vLWludmFsaWQtdm9pZC10eXBlJzogWydlcnJvcicsIHtcbiAgICAgICAgICBhbGxvd0FzVGhpc1BhcmFtZXRlcjogdHJ1ZVxuICAgICAgICB9XSxcbiAgICAgICAgJ0B0eXBlc2NyaXB0LWVzbGludC9uby10aGlzLWFsaWFzJzogWydlcnJvcicsIHtcbiAgICAgICAgICBhbGxvd2VkTmFtZXM6IFtcbiAgICAgICAgICAgICd0aGF0J1xuICAgICAgICAgIF1cbiAgICAgICAgfV0sXG4gICAgICAgICdAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnMnOiBbXG4gICAgICAgICAgJ2Vycm9yJyxcbiAgICAgICAgICB7XG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgdW5pY29ybi9uYW1lLXJlcGxhY2VtZW50cyAtLSBgYXJnc2AgaXMgYW4gRVNMaW50IHJ1bGUgb3B0aW9uIG5hbWUuXG4gICAgICAgICAgICBhcmdzOiAnYWxsJyxcbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSB1bmljb3JuL25hbWUtcmVwbGFjZW1lbnRzIC0tIGBhcmdzSWdub3JlUGF0dGVybmAgaXMgYSBgdHlwZXNjcmlwdC1lc2xpbnRgIHJ1bGUgb3B0aW9uIG5hbWUuXG4gICAgICAgICAgICBhcmdzSWdub3JlUGF0dGVybjogJ15fJyxcbiAgICAgICAgICAgIGNhdWdodEVycm9yczogJ2FsbCcsXG4gICAgICAgICAgICBjYXVnaHRFcnJvcnNJZ25vcmVQYXR0ZXJuOiAnXl8nLFxuICAgICAgICAgICAgZGVzdHJ1Y3R1cmVkQXJyYXlJZ25vcmVQYXR0ZXJuOiAnXl8nLFxuICAgICAgICAgICAgaWdub3JlUmVzdFNpYmxpbmdzOiB0cnVlLFxuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHVuaWNvcm4vbmFtZS1yZXBsYWNlbWVudHMgLS0gYHZhcnNJZ25vcmVQYXR0ZXJuYCBpcyBhIGB0eXBlc2NyaXB0LWVzbGludGAgcnVsZSBvcHRpb24gbmFtZS5cbiAgICAgICAgICAgIHZhcnNJZ25vcmVQYXR0ZXJuOiAnXl8nXG4gICAgICAgICAgfVxuICAgICAgICBdLFxuICAgICAgICAnQHR5cGVzY3JpcHQtZXNsaW50L3ByZWZlci1yZWFkb25seSc6ICdlcnJvcidcbiAgICAgIH1cbiAgICB9LFxuICAgIHtcbiAgICAgIGZpbGVzOiBjb250ZXh0LnRlc3RGaWxlcyxcbiAgICAgIHJ1bGVzOiB7XG4gICAgICAgICdAdHlwZXNjcmlwdC1lc2xpbnQvZG90LW5vdGF0aW9uJzogWydlcnJvcicsIHtcbiAgICAgICAgICBhbGxvd1ByaXZhdGVDbGFzc1Byb3BlcnR5QWNjZXNzOiB0cnVlLFxuICAgICAgICAgIGFsbG93UHJvdGVjdGVkQ2xhc3NQcm9wZXJ0eUFjY2VzczogdHJ1ZVxuICAgICAgICB9XSxcbiAgICAgICAgJ0B0eXBlc2NyaXB0LWVzbGludC91bmJvdW5kLW1ldGhvZCc6ICdvZmYnXG4gICAgICB9XG4gICAgfSxcbiAgICB7XG4gICAgICBzZXR0aW5nczoge1xuICAgICAgICByZWFjdDoge1xuICAgICAgICAgIHZlcnNpb246ICdkZXRlY3QnXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIF0pO1xufVxuXG5mdW5jdGlvbiBnZXRVbmljb3JuQ29uZmlncyhjb250ZXh0OiBFc2xpbnRDb25maWdDb250ZXh0KTogTGludGVyLkNvbmZpZ1tdIHtcbiAgcmV0dXJuIGRlZmluZUNvbmZpZyhbXG4gICAge1xuICAgICAgZXh0ZW5kczogW3VuaWNvcm4uY29uZmlncy5yZWNvbW1lbmRlZF0sXG4gICAgICBmaWxlczogY29udGV4dC5hbGxGaWxlcygpLFxuICAgICAgcnVsZXM6IHtcbiAgICAgICAgLypcbiAgICAgICAgICogVGhlc2UgZW50cmllcyBhcmUgbm90IGFiYnJldmlhdGlvbnMgdG8gYmUgZXhwYW5kZWQg4oCUIHRoZXkgYXJlIGVzdGFibGlzaGVkIHZvY2FidWxhcnkgaGVyZS5cbiAgICAgICAgICpcbiAgICAgICAgICogQnJhbmQ6IGBkZXZgLCBgbGliYCwgYHV0aWxgL2B1dGlsc2Agc3BlbGwgdGhlIHByb2R1Y3QncyBvd24gbmFtZS4gTGVmdCBvbiwgdGhlIHJ1bGUgcmV3cml0ZXNcbiAgICAgICAgICogYFJlcG9QYXRoc2AgdG8gYE9ic2lkaWFuRGV2ZWxvcG1lbnRVdGlsaXRpZXNSZXBvUGF0aHNgIGFuZCBgZ2V0TGliRGVidWdnZXJgIHRvXG4gICAgICAgICAqIGBnZXRMaWJyYXJ5RGVidWdnZXJgLCByZW5hbWluZyBleHBvcnRlZCBBUEkgYWZ0ZXIgdGhlIHBhY2thZ2UgaXQgYmVsb25ncyB0by5cbiAgICAgICAgICpcbiAgICAgICAgICogQ29udmVudGlvbjogYHBhcmFtc2AgaXMgdGhlIHBhcmFtZXRlci1iYWcgY29udmVudGlvbiwgZW5mb3JjZWQgYnlcbiAgICAgICAgICogYHR5cGVzY3JpcHQtZGV2LXRvb2xraXQvcGFyYW1zLW9wdGlvbnMtbmFtZS1tYXRjaGAsIHdoaWNoIHJlcXVpcmVzIGJhZyB0eXBlcyB0byBiZSBuYW1lZFxuICAgICAgICAgKiBgPE93bmVyPlBhcmFtc2AgLyBgPE93bmVyPk9wdGlvbnNgLiBFeHBhbmRpbmcgaXQgdG8gYFBhcmFtZXRlcnNgIHdvdWxkIHB1dCB0aGUgdHdvIHJ1bGVzIGluIGRpcmVjdFxuICAgICAgICAgKiBjb250cmFkaWN0aW9uIGFuZCBicmVhayAzMDArIGV4cG9ydGVkIHR5cGUgbmFtZXMuXG4gICAgICAgICAqXG4gICAgICAgICAqIEJhcmUga2V5d29yZCBhbmQgY29sbGlkaW5nIGdsb2JhbCBiaW5kaW5ncyB1c2UgYCRuYW1lYCwgZW5mb3JjZWQgYnlcbiAgICAgICAgICogYHR5cGVzY3JpcHQtZGV2LXRvb2xraXQvbm8ta2V5d29yZC1pZGVudGlmaWVyc2A6IGBvYmplY3RgIGJlY29tZXMgYCRvYmplY3RgLCBgc3RyaW5nYCBiZWNvbWVzIGAkc3RyaW5nYCxcbiAgICAgICAgICogYW5kIHNvIG9uLCBldmVuIHdoZW4gbm8gYWJicmV2aWF0aW9uIHdhcyBleHBhbmRlZC4gUHJvcGVydHkga2V5cyBhbmQgYnVpbHRpbiByZWFkcyBzdGF5IGxlZ2FsLlxuICAgICAgICAgKiBBIGJhcmUgYGFyZ3NgLCBgZm5gLCBgc3RyYCwgYG1vZGAgb3IgYGV2dGAgbGlrZXdpc2UgdGFrZXMgYCRhcmd1bWVudHNgLCBgJGZ1bmN0aW9uYCwgYW5kIHNvIG9uLlxuICAgICAgICAgKiBUaGlzIGlzIGRlbGliZXJhdGVseSBOT1QgY29uZmlndXJlZCBhcyBhIGN1c3RvbSByZXBsYWNlbWVudDogdW5pY29ybiBzdWJzdGl0dXRlcyBhdCB0aGUgd29yZCBsZXZlbCBpbnNpZGUgY29tcG91bmQgbmFtZXMsIHNvXG4gICAgICAgICAqIHJlZGlyZWN0aW5nIHRoZSB3aG9sZSBlbnRyeSB0dXJucyBgYXN5bmNGbmAgaW50byBgYXN5bmMkZnVuY3Rpb25gLiBDb21wb3VuZHMgd2FudCB0aGUgcGxhaW4gZXhwYW5zaW9uXG4gICAgICAgICAqIChgYXN5bmNGdW5jdGlvbmApOyBvbmx5IHRoZSBiYXJlLCBnZW51aW5lbHktY29sbGlkaW5nIGlkZW50aWZpZXJzIHRha2UgdGhlIGAkYCBmb3JtLlxuICAgICAgICAgKlxuICAgICAgICAgKiBEb21haW4gd29yZHM6IGBkb2NgL2Bkb2NzYCwgYGVudmAsIGBkaXN0YCBhbmQgYHNyY2AgYXJlIHRoZSBjbGVhcmVyIHNwZWxsaW5nIGluIHRoaXMgY29kZWJhc2UuXG4gICAgICAgICAqIEV4cGFuZGluZyBgZG9jYCBhbHNvIHBpY2tzIHRoZSB3cm9uZyB3b3JkIOKAlCB0aGUgYGFwaS1kb2MtKmAgbW9kdWxlcyBnZW5lcmF0ZSBBUEkgKmRvY3VtZW50YXRpb24qLCBub3RcbiAgICAgICAgICogZG9jdW1lbnRzLiBgc3JjYCBhZGRpdGlvbmFsbHkgY29ycnVwdHMgY29kZTogdGhlIGZpeGVyIHJlbmFtZXMgdGhlIGBTcmNgIG1lbWJlciBvZiB0aGUgZXhwb3J0ZWRcbiAgICAgICAgICogYE9ic2lkaWFuUGx1Z2luUmVwb1BhdGhzYCAvIGBSZXBvUGF0aHNgIGVudW1zIHdoaWxlIGxlYXZpbmcgZXZlcnkgYC5TcmNgIHJlZmVyZW5jZVxuICAgICAgICAgKiBkYW5nbGluZywgYmVjYXVzZSBgY2hlY2tQcm9wZXJ0aWVzYCBleGVtcHRzIHByb3BlcnR5IGFjY2Vzc2VzIGJ1dCBub3QgdGhlIGRlY2xhcmF0aW9ucyB0aGV5IHBvaW50IGF0LlxuICAgICAgICAgKlxuICAgICAgICAgKiBEaXNhYmxpbmcgdGhlIHJlcGxhY2VtZW50IGVudHJpZXMgcHJvdGVjdHMgdGhlc2UgcGVybWFuZW50bHk7IGFuIGBhbGxvd0xpc3RgIHdvdWxkIGluc3RlYWQgbmVlZCBldmVyeVxuICAgICAgICAgKiBhZmZlY3RlZCBpZGVudGlmaWVyIGVudW1lcmF0ZWQgYnkgaGFuZCBhbmQgcmUtZW51bWVyYXRlZCBmb3IgZXZlcnkgbmV3IG9uZS5cbiAgICAgICAgICpcbiAgICAgICAgICogTk9URTogdGhpcyBydWxlJ3MgYXV0b2ZpeCBpcyBOT1QgcmVmZXJlbmNlLWF3YXJlIGZvciBkZWNsYXJhdGlvbnMgdGhhdCBwYXJ0aWNpcGF0ZSBpbiBhIGNvbnRyYWN0IOKAlFxuICAgICAgICAgKiBlbnVtIG1lbWJlcnMsIGludGVyZmFjZSBtZW1iZXJzLCBhbmQgVHlwZVNjcmlwdCBwYXJhbWV0ZXIgcHJvcGVydGllcyAoYGNvbnN0cnVjdG9yKHByaXZhdGUgcmVhZG9ubHlcbiAgICAgICAgICogZWw6IEhUTUxFbGVtZW50KWApIGFyZSByZW5hbWVkIHdoaWxlIGB0aGlzLmVsYCBhbmQgYEVudW0uTWVtYmVyYCByZWZlcmVuY2VzIGFyZSBsZWZ0IGRhbmdsaW5nLiBBcHBseVxuICAgICAgICAgKiBpdHMgcmVwb3J0cyBieSBoYW5kOyBuZXZlciBydW4gYC0tZml4YCBvdmVyIGl0LlxuICAgICAgICAgKi9cbiAgICAgICAgLypcbiAgICAgICAgICogQSBnb29kIHJ1bGUsIGJ1dCBpdHMgZGVmYXVsdCBwcmVmaXhlcyBmb3JjZSB1bmdyYW1tYXRpY2FsIG5hbWVzOiBgbWVtYmVyUGFnZUV4aXN0c2Agd291bGQgYmVjb21lXG4gICAgICAgICAqIGBpc01lbWJlclBhZ2VFeGlzdHNgIHJhdGhlciB0aGFuIGBkb2VzTWVtYmVyUGFnZUV4aXN0YC4gVGhlc2UgZW50cmllcyBFWFRFTkQgdGhlIGRlZmF1bHRzIChgaXNgLFxuICAgICAgICAgKiBgaGFzYCwgYGNhbmAsIGBzaG91bGRgLCAuLi4pIHJhdGhlciB0aGFuIHJlcGxhY2luZyB0aGVtLCBzbyBhIGJvb2xlYW4gd2l0aCBubyBib29sZWFuLXJlYWRpbmcgcHJlZml4XG4gICAgICAgICAqIGF0IGFsbCBpcyBzdGlsbCByZWplY3RlZCAtLSB0aGUgcnVsZSBqdXN0IHN0b3BzIGluc2lzdGluZyB0aGUgcHJlZml4IGNvbWUgZnJvbSBhIHNob3J0ZXIgbGlzdC5cbiAgICAgICAgICpcbiAgICAgICAgICogVGhlIGxpc3QgaXMgYmlkaXJlY3Rpb25hbDogYWRkaW5nIGEgcHJlZml4IGFsc28gYXNzZXJ0cyB0aGF0IGV2ZXJ5dGhpbmcgbmFtZWQgd2l0aCBpdCBJUyBhIGJvb2xlYW4uXG4gICAgICAgICAqIGBjaGVja2AgZWFybnMgaXRzIHBsYWNlIG9uIGJvdGggY291bnRzLCBzaW5jZSB0aGUgaGFuZGZ1bCBvZiBub24tYm9vbGVhbiBgY2hlY2sqYCBuYW1lcyBpdCBzdXJmYWNlZFxuICAgICAgICAgKiB3ZXJlIGdlbnVpbmVseSBtaXMtbmFtZWQgKHZvaWQgZnVuY3Rpb25zIHRoYXQgdGhyb3csIGEgcHJvYmUgcmV0dXJuaW5nIGFuIEhUVFAgc3RhdHVzKS4gYHRlc3RgIHdhc1xuICAgICAgICAgKiBtZWFzdXJlZCBhbmQgcmVqZWN0ZWQ6IGl0IHdvdWxkIHZhbGlkYXRlIGZpdmUgYHRlc3QqYCBsaW5rIHByZWRpY2F0ZXMgdGhhdCByZWFkIGJldHRlciBhcyBgaXMqYFxuICAgICAgICAgKiBhbnl3YXksIGF0IHRoZSBjb3N0IG9mIHJlbmFtaW5nIFNDUkVBTUlOR19DQVNFIHRlc3QgZml4dHVyZXMgYW5kIHRoZSBgdGVzdENvdmVyYWdlYC9gdGVzdFdhdGNoYFxuICAgICAgICAgKiBydW5uZXJzIHRoYXQgZGVsaWJlcmF0ZWx5IG1pcnJvciB0aGUgYHRlc3Q6Y292ZXJhZ2VgL2B0ZXN0OndhdGNoYCBucG0gc2NyaXB0cy5cbiAgICAgICAgICovXG4gICAgICAgICd1bmljb3JuL2NvbnNpc3RlbnQtYm9vbGVhbi1uYW1lJzogW1xuICAgICAgICAgICdlcnJvcicsXG4gICAgICAgICAge1xuICAgICAgICAgICAgcHJlZml4ZXM6IHtcbiAgICAgICAgICAgICAgYWxsb3dzOiB0cnVlLFxuICAgICAgICAgICAgICBjaGVjazogdHJ1ZSxcbiAgICAgICAgICAgICAgY29udGFpbnM6IHRydWUsXG4gICAgICAgICAgICAgIGRvZXM6IHRydWUsXG4gICAgICAgICAgICAgIGluY2x1ZGVzOiB0cnVlLFxuICAgICAgICAgICAgICBtdXN0OiB0cnVlLFxuICAgICAgICAgICAgICBuZWVkczogdHJ1ZSxcbiAgICAgICAgICAgICAgc3VwcG9ydHM6IHRydWVcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIF0sXG4gICAgICAgIC8qXG4gICAgICAgICAqIFVuc2F0aXNmaWFibGUgYWxvbmdzaWRlIGBwZXJmZWN0aW9uaXN0L3NvcnQtY2xhc3Nlc2AsIHdoaWNoIGlzIGNvbmZpZ3VyZWQgaGVyZSBhcyBhIHBsYWluXG4gICAgICAgICAqIGFscGhhYmV0aWNhbCBzb3J0LiBUaGlzIHJ1bGUgd2FudHMgYSBjYXRlZ29yeSBvcmRlciAoYWxsIGZpZWxkcywgdGhlbiB0aGUgY29uc3RydWN0b3IsIHRoZW4gYWxsXG4gICAgICAgICAqIG1ldGhvZHMpLCBzbyB0aGUgZXh0cmVtZWx5IGNvbW1vbiBgcHJpdmF0ZSBfeGAgZmllbGQgcGFpcmVkIHdpdGggYSBgcHVibGljIGdldCB4KClgIGFjY2Vzc29yIGlzXG4gICAgICAgICAqIHJlamVjdGVkIGJ5IHdoaWNoZXZlciBydWxlIGxvc2VzOiBhbHBoYWJldGljYWxseSB0aGUgYWNjZXNzb3IgcHJlY2VkZXMgdGhlIGZpZWxkLCBieSBjYXRlZ29yeSB0aGVcbiAgICAgICAgICogZmllbGQgcHJlY2VkZXMgdGhlIGFjY2Vzc29yLiBVbmxpa2UgYHByZWZlci1nbG9iYWwtdGhpc2AgdGhlIGNsYXNoIHByb2R1Y2VzIG5vXG4gICAgICAgICAqIGBFU0xpbnRDaXJjdWxhckZpeGVzV2FybmluZ2AsIG9ubHkgYmVjYXVzZSB0aGlzIHJ1bGUgc2hpcHMgbm8gZml4ZXIgLS0gYm90aCBydWxlcyBhcmUgYGVycm9yYCwgc28gbm9cbiAgICAgICAgICogYXJyYW5nZW1lbnQgb2YgbWVtYmVycyBzYXRpc2ZpZXMgdGhlbSBib3RoLiBUaGUgYWxwaGFiZXRpY2FsIHNvcnQgaXMgdGhlIG9uZSBhbHJlYWR5IHJvbGxlZCBvdXRcbiAgICAgICAgICogYWNyb3NzIHRoZSBwbHVnaW5zIGNvbnN1bWluZyB0aGlzIGNvbmZpZywgc28gaXQga2VlcHMgcHJlY2VkZW5jZS4gUmUtZW5hYmxpbmcgdGhpcyBydWxlIHdvdWxkIG1lYW5cbiAgICAgICAgICogZ2l2aW5nIGBwZXJmZWN0aW9uaXN0L3NvcnQtY2xhc3Nlc2AgYSBtYXRjaGluZyBgZ3JvdXBzYCBvcHRpb24gYW5kIHJlb3JkZXJpbmcgZXZlcnkgY2xhc3MuXG4gICAgICAgICAqL1xuICAgICAgICAndW5pY29ybi9jb25zaXN0ZW50LWNsYXNzLW1lbWJlci1vcmRlcic6ICdvZmYnLFxuICAgICAgICAvKlxuICAgICAgICAgKiBFdmVyeSByZXBvcnQgaXMgYG5ldyBFcnJvcigpLnN0YWNrYCwgd2hpY2ggY2FwdHVyZXMgYSBzdGFjayB0cmFjZSBhbmQgbmV2ZXIgc3VyZmFjZXMgaXRzIG1lc3NhZ2UuXG4gICAgICAgICAqIFRoZSBydWxlIGNhbm5vdCB0ZWxsIHRoYXQgZnJvbSBhbiBlcnJvciB0aGF0IGlzIGFjdHVhbGx5IHRocm93biBhdCBhIHVzZXIuXG4gICAgICAgICAqXG4gICAgICAgICAqIE5vIGJhcmUgYG5ldyBBZ2dyZWdhdGVFcnJvcihlcnJvcnMpYCBpcyBsZWZ0IGZvciBpdCB0byBjYXRjaDogZXZlcnkgc2l0ZSBub3cgYnVpbGRzIGl0cyBhZ2dyZWdhdGVcbiAgICAgICAgICogdGhyb3VnaCBgY3JlYXRlQWdncmVnYXRlRXJyb3JgLCB3aGljaCBnaXZlcyBpdCBhIG1lc3NhZ2UgdGhhdCBuYW1lcyB0aGUgZmFpbHVyZS4gQW4gZW1wdHkgb25lIGlzXG4gICAgICAgICAqIGxvc3N5IGluIGEgd2F5IHRoYXQgb25seSBzaG93cyB1cCBvdXRzaWRlIHRoaXMgbGlicmFyeSDigJQgYGVycm9yVG9TdHJpbmdgIHdhbGtzIGBlcnJvcnNgIGFuZCBwcmludHNcbiAgICAgICAgICogdGhlIHdob2xlIHRyZWUsIHdoaWxlIGV2ZXJ5dGhpbmcgcmVhZGluZyBgbWVzc2FnZWAgc2VlcyBhbiBlbXB0eSBzZW50ZW5jZS4gVGhlIGhlbHBlciBsaXZlcyBpbiBpdHNcbiAgICAgICAgICogb3duIGxlYWYgYGFnZ3JlZ2F0ZS1lcnJvci50c2AgcmF0aGVyIHRoYW4gaW4gYGVycm9yLnRzYCBwcmVjaXNlbHkgc28gdGhhdCBgZGlzcG9zYWJsZS50c2AgY2FuIHJlYWNoXG4gICAgICAgICAqIGl0LCB3aGljaCBpdCBjb3VsZCBub3Qgd2hpbGUgdGhlIG9ubHkgY29weSBzYXQgaW4gYSBtb2R1bGUgaW1wb3J0aW5nIGl0IGJhY2suXG4gICAgICAgICAqL1xuICAgICAgICAndW5pY29ybi9lcnJvci1tZXNzYWdlJzogJ29mZicsXG4gICAgICAgIC8qXG4gICAgICAgICAqIFRoZSBkZWZhdWx0IHN0eWxlIGZvciBgbm9kZTpwYXRoYCBpcyBhIGRlZmF1bHQgaW1wb3J0LCBidXQgdGhpcyBjb2RlYmFzZSBpbXBvcnRzIGl0cyBtZW1iZXJzIGJ5IG5hbWVcbiAgICAgICAgICogdGhyb3VnaG91dCwgY29uc2lzdGVudGx5IHdpdGggZXZlcnkgb3RoZXIgYG5vZGU6YCBtb2R1bGUgaXQgdXNlcy4gQ29uZmlndXJlIHRoZSBydWxlIHRvIGVuZm9yY2UgdGhlXG4gICAgICAgICAqIHN0eWxlIGFjdHVhbGx5IGluIHVzZSByYXRoZXIgdGhhbiBhbm5vdGF0ZSAxNyBzaXRlcyB0aGF0IGFyZSBub3QgZ29pbmcgdG8gY2hhbmdlLlxuICAgICAgICAgKi9cbiAgICAgICAgJ3VuaWNvcm4vaW1wb3J0LXN0eWxlJzogW1xuICAgICAgICAgICdlcnJvcicsXG4gICAgICAgICAge1xuICAgICAgICAgICAgc3R5bGVzOiB7XG4gICAgICAgICAgICAgIC8vIEtleWVkIGJ5IHRoZSBVTlBSRUZJWEVEIG1vZHVsZSBuYW1lOiB0aGUgcnVsZSdzIG93biB0YWJsZSB1c2VzIGBwYXRoYCwgc28gYSBgbm9kZTpwYXRoYCBrZXkgbmV2ZXIgbWF0Y2hlcy5cbiAgICAgICAgICAgICAgcGF0aDoge1xuICAgICAgICAgICAgICAgIG5hbWVkOiB0cnVlXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIF0sXG4gICAgICAgIC8qXG4gICAgICAgICAqIFRoZSBydWxlIGNvdW50cyBjb25zdHJ1Y3RvciBjYWxscyBhbmQgY291bnRzIHRocm91Z2ggYXJyYXkgYW5kIG9iamVjdCBsaXRlcmFscywgc28gaXRzIGRlZmF1bHQgb2YgM1xuICAgICAgICAgKiByZXBvcnRzIG9yZGluYXJ5IGNvbXBvc2l0aW9uOiBgUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKCdib29tJykpYCBpbnNpZGUgYW4gYXNzZXJ0aW9uLCBhIHRlc3QgZml4dHVyZVxuICAgICAgICAgKiBidWlsdCBhcyBgY3JlYXRlVHlwZUluZm8oeyBtZXRob2RzOiBbY3JlYXRlTWVtYmVySW5mbyh7IC4uLiB9KV0gfSlgLCBgdGhpcy5hZGRDaGlsZChuZXcgQyh0aGlzLmFwcCkpYFxuICAgICAgICAgKiBpbnNpZGUgYSBwYXJhbXMgYmFnLiBSYWlzaW5nIHRoZSBsaW1pdCBieSBvbmUgY2xlYXJzIGV2ZXJ5IHJlcG9ydCBoZXJlIHdoaWxlIHN0aWxsIGNhdGNoaW5nIHRoZVxuICAgICAgICAgKiBnZW51aW5lbHkgdW5yZWFkYWJsZSBuZXN0aW5nIHRoZSBydWxlIGlzIGZvci5cbiAgICAgICAgICovXG4gICAgICAgICd1bmljb3JuL21heC1uZXN0ZWQtY2FsbHMnOiBbXG4gICAgICAgICAgJ2Vycm9yJyxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBtYXg6IDRcbiAgICAgICAgICB9XG4gICAgICAgIF0sXG4gICAgICAgICd1bmljb3JuL25hbWUtcmVwbGFjZW1lbnRzJzogW1xuICAgICAgICAgICdlcnJvcicsXG4gICAgICAgICAge1xuICAgICAgICAgICAgLypcbiAgICAgICAgICAgICAqIFByb3BlcnR5IGFuZCBtZW1iZXIgbmFtZXMgYXJlIGNoZWNrZWQgdG9vLCBzbyBhbiBhYmJyZXZpYXRpb24gY2Fubm90IHN1cnZpdmUgYnkgbGl2aW5nIG9uIGFuXG4gICAgICAgICAgICAgKiBvYmplY3QgcmF0aGVyIHRoYW4gaW4gYSB2YXJpYWJsZS5cbiAgICAgICAgICAgICAqXG4gICAgICAgICAgICAgKiBUaGUgcnVsZSBpcyBwdXJlbHkgc3ludGFjdGljOiBpdCBjYW5ub3QgdGVsbCBhIG1lbWJlciB3ZSBkZWNsYXJlIGZyb20gb25lIGJlbG9uZ2luZyB0byBhXG4gICAgICAgICAgICAgKiBkZXBlbmRlbmN5LCBhbmQgaXQgb2ZmZXJzIG5vIGF1dG9maXggZm9yIHByb3BlcnRpZXMgKG1lYXN1cmVkOiA2ODEgaGl0cywgMCB3aXRoIGEgZml4ZXIpLiBTaXRlc1xuICAgICAgICAgICAgICogbmFtaW5nIGEgZm9yZWlnbiBtZW1iZXIgLS0gYERvbUVsZW1lbnRJbmZvLmF0dHJgLCBgRXZhbEluT2JzaWRpYW5QYXJhbXMuZm5gLCBhbmQgdGhlIGxpa2UgLS0gYXJlXG4gICAgICAgICAgICAgKiB0aGVyZWZvcmUgaW1wb3NzaWJsZSB0byBzYXRpc2Z5IGFuZCBjYXJyeSBhbiBpbmxpbmUgZGlzYWJsZSwgc28gZXZlcnl0aGluZyBzdGlsbCByZXBvcnRlZCBpcyBvdXJzXG4gICAgICAgICAgICAgKiB0byByZW5hbWUuXG4gICAgICAgICAgICAgKlxuICAgICAgICAgICAgICogV2hlbiByZW5hbWluZyB0aGUgcmVzdCwgbm90ZSB0aGF0IGB0c2NgIGFsb25lIGlzIE5PVCBhIHN1ZmZpY2llbnQgZ2F0ZTogb2JqZWN0LWxpdGVyYWwga2V5cyBpblxuICAgICAgICAgICAgICogbG9vc2VseSB0eXBlZCBwb3NpdGlvbnMgKGBleHBlY3QuYXJyYXlDb250YWluaW5nKFt7IGJhdGNoZWRBcmd1bWVudHM6IC4uLiB9XSlgKSBhcmUgbm90IGNvbnRleHR1YWxseVxuICAgICAgICAgICAgICogdHlwZWQsIHNvIGEgcmVuYW1lIGxlYXZlcyB0aGVtIGJlaGluZCBhbmQgYnJlYWtzIHRoZSBzdWl0ZSB3aGVyZSB0aGUgdHlwZSBjaGVja2VyIHNlZXMgbm90aGluZy5cbiAgICAgICAgICAgICAqIFJlbmFtZSBpbiBzbWFsbCBiYXRjaGVzIHdpdGggdGhlIGZ1bGwgdGVzdCBydW4gaW4gdGhlIGxvb3AuXG4gICAgICAgICAgICAgKlxuICAgICAgICAgICAgICogVGhlIGRpc2FibGVkIHJlcGxhY2VtZW50cyBiZWxvdyBhcmUgZXN0YWJsaXNoZWQgdm9jYWJ1bGFyeSByYXRoZXIgdGhhbiBhYmJyZXZpYXRpb25zIHRvIGJlXG4gICAgICAgICAgICAgKiBleHBhbmRlZC4gYGVsYCBpcyBleGVtcHQgYmVjYXVzZSBPYnNpZGlhbiBuYW1lcyBldmVyeSBlbGVtZW50IG1lbWJlciB0aGF0IHdheSAtLSBgY29udGFpbmVyRWxgLFxuICAgICAgICAgICAgICogYGNvbnRlbnRFbGAsIGBpbnB1dEVsYCwgYHNlbGVjdEVsYCAtLSBzbyBleHBhbmRpbmcgb3VycyB0byBgKkVsZW1lbnRgIHdvdWxkIGxlYXZlIG91ciBjb21wb25lbnRzXG4gICAgICAgICAgICAgKiByZWFkaW5nIGluY29uc2lzdGVudGx5IGJlc2lkZSB0aGUgT2JzaWRpYW4gb25lcyB0aGV5IHNpdCBuZXh0IHRvLiBEaXNhYmxpbmcgdGhlIHJlcGxhY2VtZW50IGFsc29cbiAgICAgICAgICAgICAqIGNvdmVycyBjb21wb3VuZCBuYW1lcywgd2hpY2ggaXMgNzIgc2l0ZXMgdGhhdCB3b3VsZCBvdGhlcndpc2UgZWFjaCBuZWVkIGFuIGlubGluZSBkaXNhYmxlLlxuICAgICAgICAgICAgICpcbiAgICAgICAgICAgICAqIGByZWZgIGlzIGV4ZW1wdCBmb3IgdGhlIHNhbWUgcmVhc29uOiBgQXN5bmNFdmVudFJlZmAgaXMgdGhlIGFzeW5jIGNvdW50ZXJwYXJ0IG9mIE9ic2lkaWFuJ3NcbiAgICAgICAgICAgICAqIGBFdmVudFJlZmAsIGhhbmRlZCB0byB0aGUgc2FtZSBgb2ZmcmVmYCAvIGByZWdpc3RlckV2ZW50YCBzaGFwZXMsIHNvIHRoZSB0d28gbmFtZXMgaGF2ZSB0byBtYXRjaFxuICAgICAgICAgICAgICogdG8gcmVhZCBhcyBhIHBhaXIuXG4gICAgICAgICAgICAgKi9cbiAgICAgICAgICAgIGNoZWNrUHJvcGVydGllczogdHJ1ZSxcbiAgICAgICAgICAgIHJlcGxhY2VtZW50czoge1xuICAgICAgICAgICAgICAvKlxuICAgICAgICAgICAgICAgKiBgYXR0cmAgLyBgYXR0cnNgIGFyZSBPYnNpZGlhbidzIG93bjogYGNyZWF0ZUVsKCdhJywgeyBhdHRyOiB7IC4uLiB9IH0pYCB0YWtlcyB0aGVtIGJ5IHRob3NlXG4gICAgICAgICAgICAgICAqIG5hbWVzIG9uIGBEb21FbGVtZW50SW5mb2AsIHNvIG91cnMgaGF2ZSB0byBtYXRjaCB0byBiZSBwYXNzZWQgdGhyb3VnaC4gYHByb3BzYCBpcyB0aGVcbiAgICAgICAgICAgICAgICogdW5pdmVyc2FsIGNvbXBvbmVudCB2b2NhYnVsYXJ5LCBleGVtcHQgZm9yIHRoZSBzYW1lIHJlYXNvbiBgcGFyYW1zYCBpcy5cbiAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgIGF0dHI6IGZhbHNlLFxuICAgICAgICAgICAgICBhdHRyczogZmFsc2UsXG4gICAgICAgICAgICAgIGRldjogZmFsc2UsXG4gICAgICAgICAgICAgIC8qXG4gICAgICAgICAgICAgICAqIEV2ZXJ5IGBkaXJgIGhlcmUgaXMgYSBmaWxlc3lzdGVtIGRpcmVjdG9yeSwgbmV2ZXIgYSBkaXJlY3Rpb24sIHNvIHRoZSBydWxlIGlzIG5hcnJvd2VkIHRvIHRoZVxuICAgICAgICAgICAgICAgKiBvbmUgZXhwYW5zaW9uIHJhdGhlciB0aGFuIGxlZnQgb2ZmZXJpbmcgYSBjaG9pY2UgaXQgY2Fubm90IG1ha2UuXG4gICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgdW5pY29ybi9uYW1lLXJlcGxhY2VtZW50cyAtLSBUaGlzIGlzIHRoZSBydWxlJ3Mgb3duIHJlcGxhY2VtZW50IGtleSwgd2hpY2ggaGFzIHRvIGJlIHNwZWxsZWQgdGhlIHdheSB0aGUgcnVsZSByZWFkcyBpdC5cbiAgICAgICAgICAgICAgZGlyOiB7XG4gICAgICAgICAgICAgICAgZGlyZWN0aW9uOiBmYWxzZSxcbiAgICAgICAgICAgICAgICBkaXJlY3Rvcnk6IHRydWVcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgZGlzdDogZmFsc2UsXG4gICAgICAgICAgICAgIGRvYzogZmFsc2UsXG4gICAgICAgICAgICAgIGRvY3M6IGZhbHNlLFxuICAgICAgICAgICAgICBlbDogZmFsc2UsXG4gICAgICAgICAgICAgIGVudjogZmFsc2UsXG4gICAgICAgICAgICAgIGxpYjogZmFsc2UsXG4gICAgICAgICAgICAgIHBhcmFtczogZmFsc2UsXG4gICAgICAgICAgICAgIHByb3BzOiBmYWxzZSxcbiAgICAgICAgICAgICAgcmVmOiBmYWxzZSxcbiAgICAgICAgICAgICAgcmVmczogZmFsc2UsXG4gICAgICAgICAgICAgIC8qXG4gICAgICAgICAgICAgICAqIGByZXBvYCBpcyB0aGUgd29yZCBnaXQgYW5kIEdpdEh1YiB1c2UgdGhlbXNlbHZlcyAoYGdoIHJlcG9gLCBgUmVwb1BhdGhzYCwgYERvY3NTaXRlQ29uZmlnLnJlcG9gKSxcbiAgICAgICAgICAgICAgICogc28gaXQgaXMgdm9jYWJ1bGFyeSByYXRoZXIgdGhhbiBhbiBhYmJyZXZpYXRpb24uIHVuaWNvcm4gNzkgYWRkZWQgdGhlIHJlcGxhY2VtZW50OyBmb2xsb3dpbmcgaXRcbiAgICAgICAgICAgICAgICogd291bGQgcmVuYW1lIGV4cG9ydGVkIEFQSSBpbiB0aGlzIHBhY2thZ2UgYW5kIHJlcG9ydCBldmVyeSBjb25zdW1lcidzIGByZXBvKmAgbmFtZXMuXG4gICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICByZXBvOiBmYWxzZSxcbiAgICAgICAgICAgICAgc3JjOiBmYWxzZSxcbiAgICAgICAgICAgICAgdXRpbDogZmFsc2UsXG4gICAgICAgICAgICAgIHV0aWxzOiBmYWxzZVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgXSxcbiAgICAgICAgLypcbiAgICAgICAgICogVGhlIG5leHQgc2l4IHJ1bGVzIGFsbCBzdWdnZXN0IGFuIEFQSSBuZXdlciB0aGFuIHRoaXMgcHJvamVjdCdzIGBsaWJgIChgRVMyMDIyYCksIHNvIGZvbGxvd2luZyBhbnkgb2ZcbiAgICAgICAgICogdGhlbSBmYWlscyB0byBjb21waWxlLiBUaGUgT2JzaWRpYW4gcGx1Z2luIGxheWVyIHRha2VzIHRoZSBmbG9vciBmcm9tIHRoZSBvbGRlc3QgT2JzaWRpYW4gaW5zdGFsbGVyIHRoYXRcbiAgICAgICAgICogY2FuIHN0aWxsIHJ1biBjdXJyZW50IE9ic2lkaWFuLCB3aGljaCByZWNvcmRzIGBlY21hU2NyaXB0VmVyc2lvbjogXCJFUzIwMjJcImAuIEVhY2ggaXMgb2ZmIGF0IHRoZSBjb25maWdcbiAgICAgICAgICogbGV2ZWwgcmF0aGVyIHRoYW4gYW5ub3RhdGVkIHBlciBzaXRlLCBiZWNhdXNlIG5vbmUgY2FuIGV2ZXIgYmUgc2F0aXNmaWVkIHdoaWxlIHRoYXQgZmxvb3IgaG9sZHMuIFJldmlzaXRcbiAgICAgICAgICogdGhlbSB0b2dldGhlciBpZiB0aGUgZmxvb3IgbW92ZXMuXG4gICAgICAgICAqXG4gICAgICAgICAqIGBBcnJheSN0b1JldmVyc2VkYCBhbmQgYEFycmF5I3RvU29ydGVkYCBhcmUgRVMyMDIzLlxuICAgICAgICAgKi9cbiAgICAgICAgJ3VuaWNvcm4vbm8tYXJyYXktcmV2ZXJzZSc6ICdvZmYnLFxuICAgICAgICAndW5pY29ybi9uby1hcnJheS1zb3J0JzogJ29mZicsXG4gICAgICAgIC8qXG4gICAgICAgICAqIFRoZSBob3VzZSBzdHlsZSB3cml0ZXMgZXZlcnkgYmxvY2sgY29tbWVudCB3aXRoIGEgYCAqIGAgcHJlZml4IG9uIGVhY2ggbGluZSwgdGhlIGBAZmlsZWAgaGVhZGVyIG9mXG4gICAgICAgICAqIGV2ZXJ5IG1vZHVsZSBpbmNsdWRlZC4gdW5pY29ybiA3OSBwdXQgdGhpcyBydWxlIGluIGByZWNvbW1lbmRlZGAsIHdoZXJlIGl0IHJlcG9ydGVkIDEsNTUzIGxpbmVzIGhlcmVcbiAgICAgICAgICogYWxvbmU7IGFkb3B0aW5nIGl0IHdvdWxkIHJld3JpdGUgZXZlcnkgY29tbWVudCBpbiBldmVyeSBjb25zdW1lciB0byBzZXR0bGUgYSBtYXR0ZXIgb2YgdGFzdGUuXG4gICAgICAgICAqL1xuICAgICAgICAndW5pY29ybi9uby1hc3Rlcmlzay1wcmVmaXgtaW4tZG9jdW1lbnRhdGlvbi1jb21tZW50cyc6ICdvZmYnLFxuICAgICAgICAvKlxuICAgICAgICAgKiBgY29udGludWVgIGluc2lkZSBhIG5lc3RlZCBsb29wIGlzIG9yZGluYXJ5LCByZWFkYWJsZSBjb250cm9sIGZsb3cgaGVyZS4gVGhlIHJ1bGUncyByZW1lZHkgaXMgdG9cbiAgICAgICAgICogZXh0cmFjdCBldmVyeSBzdWNoIGxvb3AgaW50byBpdHMgb3duIGZ1bmN0aW9uLCB3aGljaCBzcHJlYWRzIG9uZSBjb2hlcmVudCB0cmF2ZXJzYWwgYWNyb3NzIHR3b1xuICAgICAgICAgKiBkZWNsYXJhdGlvbnMgd2l0aG91dCBtYWtpbmcgYW55dGhpbmcgY2xlYXJlci5cbiAgICAgICAgICovXG4gICAgICAgICd1bmljb3JuL25vLWJyZWFrLWluLW5lc3RlZC1sb29wJzogJ29mZicsXG4gICAgICAgIC8qXG4gICAgICAgICAqIFRoZSBydWxlIGNhbm5vdCBzZWUgdGhyb3VnaCBhIGhvaXN0ZWQgZnVuY3Rpb24gZGVjbGFyYXRpb24sIHNvIGl0IHRyZWF0cyBhIGJpbmRpbmcgdGhhdCBhIG5lc3RlZFxuICAgICAgICAgKiBmdW5jdGlvbiBhbHJlYWR5IHJlYWQgYXMgdW51c2VkIGJlZm9yZSB0aGUgZXhpdC4gSW4gYHJ1bldpdGhUaW1lb3V0YCB0aGF0IGlzIGBsZXQgaXNDb21wbGV0ZWRgLCB3aGljaFxuICAgICAgICAgKiBgcnVuKClgIGFuZCBgaW5uZXJUaW1lb3V0KClgIGJvdGggdG91Y2ggd2hpbGUgdGhlIGBQcm9taXNlLnJhY2VgIGFib3ZlIHRoZSBleGl0IGlzIHN0aWxsIHJ1bm5pbmcgLS1cbiAgICAgICAgICogbW92aW5nIHRoZSBkZWNsYXJhdGlvbiBwYXN0IHRoZSBleGl0LCBhcyB0aGUgcnVsZSBhc2tzLCB3b3VsZCBsZWF2ZSB0aG9zZSByZWFkcyBpbiB0aGUgdGVtcG9yYWwgZGVhZFxuICAgICAgICAgKiB6b25lLiBJdHMgb3duIGZpeGVyIGRlY2xpbmVzIGFsbCAxNSBzaXRlcyBmb3IgdGhlIHNhbWUgcmVhc29uIGl0IGNhbm5vdCBwcm92ZSB0aGVtIHNhZmUsIHNvIGZvbGxvd2luZ1xuICAgICAgICAgKiB0aGUgcnVsZSBpcyBlbnRpcmVseSBtYW51YWwuIFdoYXQgaXMgbGVmdCBhZnRlciB0aGF0IGlzIHBsYWNlbWVudCBzdHlsZTogdGhlIHJlbWFpbmluZyByZXBvcnRzIGFyZVxuICAgICAgICAgKiBuYW1lZCBjb25zdGFudHMgYW5kIGRlcml2ZWQgcGF0aHMgZGVsaWJlcmF0ZWx5IGdyb3VwZWQgYXQgdGhlIHRvcCBvZiBhIGZ1bmN0aW9uLCBhbmQgcHVzaGluZyBlYWNoIG9uZVxuICAgICAgICAgKiBiZWxvdyB0aGUgZmlyc3QgZ3VhcmQgc3BsaXRzIGEgY29oZXNpdmUgYmxvY2sgdG8gbm8gYmVuZWZpdC4gVGhlIHRocmVlIHNpdGVzIHdoZXJlIGRlZmVycmluZyBza2lwcGVkXG4gICAgICAgICAqIHJlYWwgd29yayAoYSBzZWNvbmQgYGNvbXB1dGVOZWVkZWRFeHBvc3VyZWAgd2FsaywgYSBgdG9Kc29uYCBzZXJpYWxpemF0aW9uLCBhbiBgZW5zdXJlTGZFbmRpbmdzYCBwYXNzKVxuICAgICAgICAgKiB3ZXJlIGFwcGxpZWQgYnkgaGFuZCBpbnN0ZWFkLlxuICAgICAgICAgKi9cbiAgICAgICAgJ3VuaWNvcm4vbm8tZGVjbGFyYXRpb25zLWJlZm9yZS1lYXJseS1leGl0JzogJ29mZicsXG4gICAgICAgIC8qXG4gICAgICAgICAqIEFzc2lnbmluZyBvbnRvIHRoZSBnbG9iYWwgb2JqZWN0IGlzIGhvdyB0aGlzIGxpYnJhcnkgaW5zdGFsbHMgYW5kIHJlc3RvcmVzIHRlc3QgZG91YmxlcywgYW5kIGhvdyBhXG4gICAgICAgICAqIGZldyBPYnNpZGlhbi1ydW50aW1lIGdsb2JhbHMgYXJlIHJlYWNoZWQgYXQgYWxsLiBUaGUgcnVsZSBjYW5ub3Qgc2VwYXJhdGUgdGhhdCBmcm9tIGFuIGFjY2lkZW50YWxcbiAgICAgICAgICogZ2xvYmFsIHdyaXRlLCBhbmQgaXQgaGFzIG5vIGZpeGVyLlxuICAgICAgICAgKi9cbiAgICAgICAgJ3VuaWNvcm4vbm8tZ2xvYmFsLW9iamVjdC1wcm9wZXJ0eS1hc3NpZ25tZW50JzogJ29mZicsXG4gICAgICAgIC8vIGBudWxsYCBpcyBsb2FkLWJlYXJpbmcgaGVyZTogYW4gb3B0aW9uYWwgY29sbGFib3JhdG9yIGlzIG1vZGVsbGVkIGFzIGEgcmVxdWlyZWQgYG51bGwgfCBYYCBmaWVsZCByYXRoZXIgdGhhbiBhbiBvcHRpb25hbCBgWGAsIHNvIGBudWxsYCBhbmQgYHVuZGVmaW5lZGAgYXJlIG5vdCBpbnRlcmNoYW5nZWFibGUuXG4gICAgICAgIC8qXG4gICAgICAgICAqIFRoZSBydWxlJ3MgbGlzdCBvZiBzdGFuZGFyZCBgU3ltYm9sYCBwcm9wZXJ0aWVzIHByZWRhdGVzIGV4cGxpY2l0IHJlc291cmNlIG1hbmFnZW1lbnQsIHNvIGl0IHJlcG9ydHNcbiAgICAgICAgICogYFN5bWJvbC5kaXNwb3NlYCBhbmQgYFN5bWJvbC5hc3luY0Rpc3Bvc2VgIGFzIG5vbi1zdGFuZGFyZC4gQm90aCBhcmUgcGFydCBvZiB0aGUgbGFuZ3VhZ2UgdGhhdCB0aGlzXG4gICAgICAgICAqIGxpYnJhcnkgaXMgYnVpbHQgb24gLS0gMTE0IGZpbGVzIGhlcmUgdXNlIGB1c2luZ2AgZGVjbGFyYXRpb25zLCBhbmQgdGhlIGRpc3Bvc2FibGUgdHlwZXMgYXJlIGFcbiAgICAgICAgICogcHVibGljIHBhcnQgb2YgaXRzIHN1cmZhY2UgLS0gc28gYWxsIDU5IHJlcG9ydHMgYXJlIHRoZSBydWxlIGJlaW5nIG91dCBvZiBkYXRlIHJhdGhlciB0aGFuIGEgZmluZGluZy5cbiAgICAgICAgICovXG4gICAgICAgICd1bmljb3JuL25vLW5vbnN0YW5kYXJkLWJ1aWx0aW4tcHJvcGVydGllcyc6ICdvZmYnLFxuICAgICAgICAndW5pY29ybi9uby1udWxsJzogJ29mZicsXG4gICAgICAgIC8qXG4gICAgICAgICAqIFR5cGVTY3JpcHQncyBleHBsaWNpdCBgdGhpc2AgcGFyYW1ldGVyIChgZnVuY3Rpb24gZ2V0KHRoaXM6IEhvbGRlcikgeyByZXR1cm4gdGhpcy52YWx1ZTsgfWApIG1ha2VzXG4gICAgICAgICAqIGB0aGlzYCBvdXRzaWRlIGEgY2xhc3MgYm90aCBsZWdhbCBhbmQgdHlwZS1jaGVja2VkLCBidXQgdGhlIHJ1bGUgaXMgc3ludGFjdGljIGFuZCBmbGFncyBpdCBpZGVudGljYWxseVxuICAgICAgICAgKiB0byBhIGdlbnVpbmVseSB1bmJvdW5kIGB0aGlzYC4gSXQgaGFzIG5vIG9wdGlvbnMgKGBzY2hlbWE6IFtdYCkgYW5kIG5vIGZpeGVyLCBzbyB0aGVyZSBpcyBubyB3YXkgdG9cbiAgICAgICAgICogc2VwYXJhdGUgdGhlIGlkaW9tIGZyb20gdGhlIGJ1ZyBpdCB0YXJnZXRzLiBNb3N0IGhpdHMgaGVyZSB3ZXJlIHR5cGVkIGB0aGlzYCBwYXJhbWV0ZXJzIGFuZCB0ZXN0cyB0aGF0XG4gICAgICAgICAqIGRlbGliZXJhdGVseSBhc3NlcnQgYHRoaXNgIGJpbmRpbmcuXG4gICAgICAgICAqL1xuICAgICAgICAndW5pY29ybi9uby10aGlzLW91dHNpZGUtb2YtY2xhc3MnOiAnb2ZmJyxcbiAgICAgICAgLy8gU2FtZSBjYWxsIGFzIGl0cyBvYmplY3QgY291bnRlcnBhcnQgYWJvdmU6IHRoZSBkZXN0cnVjdHVyaW5nIGRlcHRoIGZsYWdnZWQgaGVyZSBpcyBkZWxpYmVyYXRlIGFuZCByZWFkcyB3ZWxsLlxuICAgICAgICAndW5pY29ybi9uby11bnJlYWRhYmxlLWFycmF5LWRlc3RydWN0dXJpbmcnOiAnb2ZmJyxcbiAgICAgICAgLypcbiAgICAgICAgICogVGhlIHJlcG9ydHMgYXJlIGFsbCBgZm9yIChjb25zdCBmaWxlIG9mIGF3YWl0IHJlYWRkaXJQb3NpeCguLi4pKWAsIHdoaWNoIHJlYWRzIGV4YWN0bHkgYXMgaW50ZW5kZWQuXG4gICAgICAgICAqIEhvaXN0aW5nIHRoZSBhd2FpdGVkIGNhbGwgaW50byBhIHZhcmlhYmxlIG5hbWVkIGFmdGVyIHRoZSBsb29wJ3Mgb3duIGl0ZXJhYmxlIGFkZHMgYSBsaW5lIGFuZCBhIG5hbWVcbiAgICAgICAgICogd2l0aG91dCBhZGRpbmcgaW5mb3JtYXRpb24uXG4gICAgICAgICAqL1xuICAgICAgICAndW5pY29ybi9uby11bnJlYWRhYmxlLWZvci1vZi1leHByZXNzaW9uJzogJ29mZicsXG4gICAgICAgIC8qXG4gICAgICAgICAqIFRoZSBuZXN0ZWQgZGVzdHJ1Y3R1cmluZyB0aGlzIGZsYWdzIGlzIGRlbGliZXJhdGUgaGVyZSBhbmQgcmVhZHMgd2VsbDogcHVsbGluZyBhIG1lbWJlciBvdXQgb2YgYVxuICAgICAgICAgKiBwYXJhbXMgYmFnIGluIG9uZSBzdGVwIHN0YXRlcyB3aGVyZSB0aGUgdmFsdWUgY29tZXMgZnJvbSwgd2hpY2ggYSBzZWNvbmQgaW50ZXJtZWRpYXRlIGJpbmRpbmcgb25seVxuICAgICAgICAgKiBvYnNjdXJlcy4gVGhlIHJ1bGUgdGFrZXMgbm8gb3B0aW9ucywgc28gdGhlcmUgaXMgbm8gd2F5IHRvIGtlZXAgdGhlIGRlcHRoIGxpbWl0IGl0IGlzIHJlYWxseSBhZnRlclxuICAgICAgICAgKiB3aGlsZSBhbGxvd2luZyB0aGUgc2hhcGUgaW4gdXNlLlxuICAgICAgICAgKi9cbiAgICAgICAgJ3VuaWNvcm4vbm8tdW5yZWFkYWJsZS1vYmplY3QtZGVzdHJ1Y3R1cmluZyc6ICdvZmYnLFxuICAgICAgICAvKlxuICAgICAgICAgKiBgY2hlY2tBcmd1bWVudHNgIHN0cmlwcyBgdW5kZWZpbmVkYCBhcmd1bWVudHMsIHdoaWNoIHNoaWZ0cyB0aGUgcmVtYWluaW5nIHBvc2l0aW9uYWwgYXJndW1lbnRzIGludG9cbiAgICAgICAgICogdGhlIHdyb25nIHNsb3RzOyBgY2hlY2tBcnJvd0Z1bmN0aW9uQm9keWAgcmVtb3ZlcyBgcmV0dXJuIHVuZGVmaW5lZDtgIGZyb20gYXJyb3cgYm9kaWVzIHdob3NlIG90aGVyXG4gICAgICAgICAqIGJyYW5jaGVzIGRvIHJldHVybiBhIHZhbHVlLCB3aGljaCB2aW9sYXRlcyB0aGUgYG5vSW1wbGljaXRSZXR1cm5zYCBzZXR0aW5nIHRoaXMgcHJvamVjdCBjb21waWxlcyB3aXRoLlxuICAgICAgICAgKiBUaGUgcnVsZSdzIHJlbWFpbmluZyBjYXNlcyAoYSBiYXJlIGB1bmRlZmluZWRgIGluaXRpYWxpemVyLCBgcmV0dXJuIHVuZGVmaW5lZDtgIGluIGEgdm9pZCBmdW5jdGlvbilcbiAgICAgICAgICogYXJlIHN0aWxsIHdvcnRoIGhhdmluZy5cbiAgICAgICAgICovXG4gICAgICAgICd1bmljb3JuL25vLXVzZWxlc3MtdW5kZWZpbmVkJzogW1xuICAgICAgICAgICdlcnJvcicsXG4gICAgICAgICAge1xuICAgICAgICAgICAgY2hlY2tBcmd1bWVudHM6IGZhbHNlLFxuICAgICAgICAgICAgY2hlY2tBcnJvd0Z1bmN0aW9uQm9keTogZmFsc2VcbiAgICAgICAgICB9XG4gICAgICAgIF0sXG4gICAgICAgIC8vIGBBcnJheS5mcm9tQXN5bmNgIGlzIEVTMjAyNC4gU2VlIHRoZSBFUzIwMjIgZmxvb3Igbm90ZSBhYm92ZS5cbiAgICAgICAgJ3VuaWNvcm4vcHJlZmVyLWFycmF5LWZyb20tYXN5bmMnOiAnb2ZmJyxcbiAgICAgICAgLypcbiAgICAgICAgICogRXZlcnkgaGl0IGhlcmUgaXMgYSBwcm9taXNlIGRlbGliZXJhdGVseSBOT1QgYXdhaXRlZCwgYW5kIGBhd2FpdGAgd291bGQgY2hhbmdlIHdoYXQgdGhlIGNvZGUgZG9lcy5cbiAgICAgICAgICogYHJlc3VsdC5jYXRjaCh0aHJvd0RlbGF5ZWQpYCBpbiBgYXN5bmMtZXZlbnRzLnRzYCBpcyB0aGUgZmlyZS1hbmQtZm9yZ2V0IGVycm9yIHBhdGggdGhlIG1vZHVsZSBpc1xuICAgICAgICAgKiBidWlsdCBvbjsgdGhlIHJlc3QgaG9sZCBhbiB1bnJlc29sdmVkIHByb21pc2UgYW5kIGFzc2VydCB0aGUgY2FsbGJhY2sgaGFzIG5vdCBmaXJlZCB5ZXQsIHNvIGF3YWl0aW5nXG4gICAgICAgICAqIHdvdWxkIGhhbmcgdGhlIHRlc3Qgb3IgaW52ZXJ0IHdoYXQgaXQgcHJvdmVzLiBUaGUgcnVsZSBjYW5ub3QgdGVsbCBhIGZvcmdvdHRlbiBgYXdhaXRgIGZyb20gYW5cbiAgICAgICAgICogaW50ZW50aW9uYWwgb25lLCBhbmQgdGhpcyBjb2RlYmFzZSBzY2hlZHVsZXMgZmlyZS1hbmQtZm9yZ2V0IHdvcmsgYXMgYSBjb3JlIHBhdHRlcm4uXG4gICAgICAgICAqL1xuICAgICAgICAndW5pY29ybi9wcmVmZXItYXdhaXQnOiAnb2ZmJyxcbiAgICAgICAgLypcbiAgICAgICAgICogQWxsIHRocmVlIHJlcG9ydHMgcmVhZCBIVE1MIG91dCAoYGNvbnN0IGh0bWwgPSBlbC5pbm5lckhUTUxgKSwgbmV2ZXIgd3JpdGUgaXQsIGFuZCBmb3IgYSByZWFkXG4gICAgICAgICAqIGBnZXRIVE1MKClgIHJldHVybnMgdGhlIHNhbWUgc3RyaW5nLiBXaGF0IGl0IGFkZHMgaXMgc2hhZG93LXJvb3Qgc2VyaWFsaXphdGlvbiBvcHRpb25zIHRoYXQgbm90aGluZ1xuICAgICAgICAgKiBoZXJlIGFza3MgZm9yLCBpbiBleGNoYW5nZSBmb3IgYSBtdWNoIG5ld2VyIHBsYXRmb3JtIGZsb29yIHRoYW4gYGlubmVySFRNTGAgLS0gYSBiYWQgdHJhZGUgZm9yIGFcbiAgICAgICAgICogbGlicmFyeSB0aGF0IGhhcyB0byBydW4gb24gd2hhdGV2ZXIgQ2hyb21pdW0gdGhlIGluc3RhbGxlZCBPYnNpZGlhbiBzaGlwcy4gVGhlIHJ1bGUncyBvdGhlciBoYWxmLFxuICAgICAgICAgKiByZXdyaXRpbmcgd3JpdGVzIHRvIHRoZSBzYW5pdGl6aW5nIGBzZXRIVE1MKClgLCB3b3VsZCBiZSB3b3J0aCBoYXZpbmc7IGl0IGp1c3QgbmV2ZXIgZmlyZXMgaGVyZS5cbiAgICAgICAgICovXG4gICAgICAgICd1bmljb3JuL3ByZWZlci1kb20tbm9kZS1odG1sLW1ldGhvZHMnOiAnb2ZmJyxcbiAgICAgICAgLypcbiAgICAgICAgICogSXRlcmF0b3IgaGVscGVycyAoYEl0ZXJhdG9yI3NvbWVgIGFuZCBmcmllbmRzKSBhcmUgRVMyMDI1LCBzbyB0aGlzIGJlbG9uZ3Mgd2l0aCBgbm8tYXJyYXktcmV2ZXJzZWAgYW5kXG4gICAgICAgICAqIGBuby1hcnJheS1zb3J0YCBhYm92ZTogdGhlIHNhbWUgRVMyMDIyIGZsb29yIHJ1bGVzIGl0IG91dCwgYW5kIHRoZSBzYW1lIG5vdGUgYXBwbGllcyAtLSByZXZpc2l0IHRoZW1cbiAgICAgICAgICogdG9nZXRoZXIgaWYgdGhhdCBmbG9vciBtb3Zlcy5cbiAgICAgICAgICovXG4gICAgICAgICd1bmljb3JuL3ByZWZlci1pdGVyYXRvci1oZWxwZXJzJzogJ29mZicsXG4gICAgICAgIC8vIGBJdGVyYXRvciN0b0FycmF5YCBpcyBFUzIwMjUuIFNlZSB0aGUgRVMyMDIyIGZsb29yIG5vdGUgYWJvdmUuXG4gICAgICAgICd1bmljb3JuL3ByZWZlci1pdGVyYXRvci10by1hcnJheSc6ICdvZmYnLFxuICAgICAgICAvKlxuICAgICAgICAgKiBSZXBsYWNlZCBieSBgdHlwZXNjcmlwdC1kZXYtdG9vbGtpdC9wcmVmZXItbG9naWNhbC1vcGVyYXRvci1vdmVyLXRlcm5hcnlgLCB3aGljaCByZXBvcnRzIHRoZSBzYW1lIGFuZFxuICAgICAgICAgKiBhbHNvIGZpeGVzIGEgYm9vbGVhbiBsaXRlcmFsIGJyYW5jaCBpbiBUeXBlU2NyaXB0LiBVbmljb3JuIHdpdGhob2xkcyB0aGF0IGZpeCB0aGVyZSwgd2hpbGVcbiAgICAgICAgICogYHVuaWNvcm4vcHJlZmVyLXRlcm5hcnlgIGtlZXBzIHByb2R1Y2luZyB0aGUgc2hhcGUsIHNvIGBsaW50OmZpeGAgbGVmdCBhbiBlcnJvciBpdCBoYWQganVzdCBjcmVhdGVkLlxuICAgICAgICAgKi9cbiAgICAgICAgJ3VuaWNvcm4vcHJlZmVyLWxvZ2ljYWwtb3BlcmF0b3Itb3Zlci10ZXJuYXJ5JzogJ29mZicsXG4gICAgICAgIC8qXG4gICAgICAgICAqIFRoZSBzdWdnZXN0ZWQgcmVwbGFjZW1lbnQgaXMgYE1hdGgudHJ1bmMoTnVtYmVyKHgpKWAsIHdoaWNoIGlzIGxvbmdlciB0aGFuIGBwYXJzZUludCh4LCAxMClgIGFuZCBub1xuICAgICAgICAgKiBjbGVhcmVyLCBhbmQgaXQgaXMgbm90IHRoZSBzYW1lIGZ1bmN0aW9uOiBgcGFyc2VJbnRgIHN0b3BzIGF0IHRoZSBmaXJzdCBjaGFyYWN0ZXIgdGhhdCBjYW5ub3QgYmUgcGFydFxuICAgICAgICAgKiBvZiB0aGUgbnVtYmVyLCBzbyBgJzEyYWJjJ2AgcGFyc2VzIHRvIDEyIHdoZXJlIGBOdW1iZXJgIHlpZWxkcyBgTmFOYC4gVHdvIG9mIHRoZSByZXBvcnRzIHJlYWQgdXNlclxuICAgICAgICAgKiBpbnB1dCB0aHJvdWdoIHRoYXQgZGlmZmVyZW5jZSAtLSB0aGUgcGFnZS1qdW1wIGJveCBpbiB0aGUgYERhdGF2aWV3YCBoZWxwZXIsIGFuZFxuICAgICAgICAgKiBgTnVtYmVyQ29tcG9uZW50LnZhbHVlRnJvbVN0cmluZ2AsIHdob3NlIGxlbmllbnQgcGFyc2UgaXMgcGFydCBvZiBhIHB1Ymxpc2hlZCBjb21wb25lbnQncyBiZWhhdmlvci5cbiAgICAgICAgICogVGhlIHJlc3QgcGFyc2UgbWFjaGluZS1nZW5lcmF0ZWQgc3RyaW5ncywgd2hlcmUgdGhlIHR3byBhZ3JlZSBidXQgdGhlIHNob3J0ZXIgc3BlbGxpbmcgc3RpbGwgd2lucy5cbiAgICAgICAgICovXG4gICAgICAgICd1bmljb3JuL3ByZWZlci1udW1iZXItY29lcmNpb24nOiAnb2ZmJyxcbiAgICAgICAgLy8gYFByb21pc2Uud2l0aFJlc29sdmVyc2AgaXMgRVMyMDI0LiBTZWUgdGhlIEVTMjAyMiBmbG9vciBub3RlIGFib3ZlLlxuICAgICAgICAndW5pY29ybi9wcmVmZXItcHJvbWlzZS13aXRoLXJlc29sdmVycyc6ICdvZmYnLFxuICAgICAgICAvLyBgU2V0I3VuaW9uYCBhbmQgZnJpZW5kcyBhcmUgRVMyMDI1LiBTZWUgdGhlIEVTMjAyMiBmbG9vciBub3RlIGFib3ZlLlxuICAgICAgICAndW5pY29ybi9wcmVmZXItc2V0LW1ldGhvZHMnOiAnb2ZmJyxcbiAgICAgICAgLypcbiAgICAgICAgICogVGhlIHJ1bGUgcmFua3Mgb3BlcmFuZHMgYnkgc3ludGFjdGljIHNoYXBlLCBub3QgY29zdCwgc28gZXZlcnkgcmVwb3J0IGhlcmUgc3dhcHMgb25lIHByb3BlcnR5IHJlYWRcbiAgICAgICAgICogYWhlYWQgb2YgYW5vdGhlciBhbmQgYnV5cyBub3RoaW5nLiBJdHMgb3duIG1lc3NhZ2UgY29uY2VkZXMgaXQgY2Fubm90IGNoZWNrIHRoZSBwYXJ0IHRoYXQgbWF0dGVycyAtLVxuICAgICAgICAgKiBcImFmdGVyIHZlcmlmeWluZyBzaG9ydC1jaXJjdWl0IGJlaGF2aW9yXCIgLS0gYW5kIG9uZSByZXBvcnQgc2l0cyBkaXJlY3RseSB1bmRlciBhIGNvbW1lbnQgcmVjb3JkaW5nXG4gICAgICAgICAqIHRoYXQgdGhlIG9wZXJhbmRzIGNoYW5nZSBpbnNpZGUgYSBgcmVuYW1lYCBldmVudCBoYW5kbGVyLCB3aGljaCBpcyB3aGVyZSBvcmRlciBzdG9wcyBiZWluZyBmcmVlLlxuICAgICAgICAgKiBUaGUgY3VycmVudCBvcmRlcnMgYWxzbyBjYXJyeSBpbnRlbnQ6IGEgbnVsbCBndWFyZCBiZWZvcmUgdGhlIHVzZSBpdCBndWFyZHMsIGFuZCB0aGUgY29uZGl0aW9uIGJlaW5nXG4gICAgICAgICAqIHJlcG9ydGVkIGJlZm9yZSB0aGUgc3RhdGUgaXQgY29udHJhZGljdHMuXG4gICAgICAgICAqL1xuICAgICAgICAndW5pY29ybi9wcmVmZXItc2ltcGxlLWNvbmRpdGlvbi1maXJzdCc6ICdvZmYnLFxuICAgICAgICAvKlxuICAgICAgICAgKiBgVVJMLmNhblBhcnNlYCByZXF1aXJlcyBOb2RlIDE4LjE3LCB3ZWxsIGFib3ZlIHRoZSBOb2RlIDE2LjE2LjAgZmxvb3IgdGhhdCBzaGlwcGVkIHNvdXJjZSB0YXJnZXRzXG4gICAgICAgICAqIChzZWUgdGhlIE9ic2lkaWFuIHBsdWdpbiBsYXllcidzIGBtaW5pbXVtTm9kZVZlcnNpb25gKS4gVGhlIHJ1bGUgY2FuIHRoZXJlZm9yZSBuZXZlciBiZSBzYXRpc2ZpZWQgdGhlcmUsIHNvIGl0IGlzIG9mZiBhdCB0aGVcbiAgICAgICAgICogY29uZmlnIGxldmVsIHJhdGhlciB0aGFuIGFubm90YXRlZCBhdCBlYWNoIGNhbGwgc2l0ZS5cbiAgICAgICAgICovXG4gICAgICAgICd1bmljb3JuL3ByZWZlci11cmwtY2FuLXBhcnNlJzogJ29mZicsXG4gICAgICAgIC8qXG4gICAgICAgICAqIEV2ZXJ5IGFycmF5IHJlcG9ydGVkIGhlcmUgaG9sZHMgc3RyaW5ncywgd2hlcmUgdGhlIGRlZmF1bHQgc29ydCBpcyBhbHJlYWR5IHdlbGwgZGVmaW5lZCBhbmQgY29ycmVjdC5cbiAgICAgICAgICogQWRkaW5nIHRoZSBjb21wYXJhdG9yIHRoZSBydWxlIGFza3MgZm9yIHdvdWxkIG1lYW4gY2hvb3NpbmcgYmV0d2VlbiBjb2RlLXVuaXQgYW5kIGxvY2FsZSBvcmRlcmluZyxcbiAgICAgICAgICogc28gZm9sbG93aW5nIGl0IHdvdWxkIENIQU5HRSB0aGUgc29ydCByYXRoZXIgdGhhbiBkb2N1bWVudCBpdC4gVGhlIHJ1bGUgZWFybnMgaXRzIHBsYWNlIG9uIG51bWVyaWNcbiAgICAgICAgICogYXJyYXlzOyBpdCBkb2VzIG5vdCBoYXZlIGFueSBoZXJlLlxuICAgICAgICAgKi9cbiAgICAgICAgJ3VuaWNvcm4vcmVxdWlyZS1hcnJheS1zb3J0LWNvbXBhcmUnOiAnb2ZmJyxcbiAgICAgICAgLy8gVGhlIGNvZGViYXNlIGFscmVhZHkgc3BlbGxzIGVuY29kaW5ncyB0aGUgd2F5IHRoZSBFbmNvZGluZyBTdGFuZGFyZCBkb2VzIChgdXRmLThgKSwgd2hpY2ggaXMgYWxzbyB3aGF0IGBUZXh0RGVjb2RlcmAgcmVwb3J0cy4gS2VlcCB0aGUgcnVsZSBlbmZvcmNpbmcgY29uc2lzdGVuY3ksIGp1c3QgaW4gdGhlIGRpcmVjdGlvbiBhbHJlYWR5IGluIHVzZS5cbiAgICAgICAgJ3VuaWNvcm4vdGV4dC1lbmNvZGluZy1pZGVudGlmaWVyLWNhc2UnOiBbXG4gICAgICAgICAgJ2Vycm9yJyxcbiAgICAgICAgICB7XG4gICAgICAgICAgICB3aXRoRGFzaDogdHJ1ZVxuICAgICAgICAgIH1cbiAgICAgICAgXVxuICAgICAgfVxuICAgIH0sXG4gICAge1xuICAgICAgLy8gQnVpbGQvbGludC92ZXJzaW9uIHNjcmlwdHMgYXJlIENMSSBlbnRyeSBwb2ludHMsIHdoZXJlIGV4aXRpbmcgd2l0aCBhIHN0YXR1cyBjb2RlIGlzIHRoZSBpbnRlcmZhY2UuXG4gICAgICBmaWxlczogY29udGV4dC5zY3JpcHRGaWxlcyxcbiAgICAgIHJ1bGVzOiB7XG4gICAgICAgICd1bmljb3JuL25vLXByb2Nlc3MtZXhpdCc6ICdvZmYnXG4gICAgICB9XG4gICAgfSxcbiAgICB7XG4gICAgICAvKlxuICAgICAgICogQSBtb2R1bGUtbGV2ZWwgZml4dHVyZSBhc3NpZ25lZCBmcm9tIGBiZWZvcmVFYWNoYCBpcyB0aGUgc3RhbmRhcmQgdGVzdCBzaGFwZTpcbiAgICAgICAqXG4gICAgICAgKiAgIGxldCBhcHA6IEFwcDtcbiAgICAgICAqICAgYmVmb3JlRWFjaCgoKSA9PiB7IGFwcCA9IEFwcC5jcmVhdGVDb25maWd1cmVkX18oKTsgfSk7XG4gICAgICAgKlxuICAgICAgICogVGhlIHJ1bGUgaXMgcmlnaHQgYWJvdXQgcHJvZHVjdGlvbiBjb2RlIC0tIG1vZHVsZSBzdGF0ZSByZWFzc2lnbmVkIGZyb20gaW5zaWRlIGEgZnVuY3Rpb24gaXMgd29ydGhcbiAgICAgICAqIGZsYWdnaW5nLCBhbmQgdGhlIGZpeCBpcyB0byBob2xkIGl0IGluIGEgYGNvbnN0YCBvYmplY3QgaW5zdGVhZC4gSW4gdGVzdHMgdGhhdCB3b3VsZCByZXBsYWNlIGV2ZXJ5XG4gICAgICAgKiBgYXBwYCB3aXRoIGBTVEFURS5hcHBgIGFuZCBtYWtlIGVhY2ggZmlsZSByZWFkIHdvcnNlIGZvciBubyBnYWluLCBzaW5jZSB0aGUgZml4dHVyZSBpcyByZXNldCBwZXIgdGVzdFxuICAgICAgICogYnkgZGVzaWduLiBTY29wZWQgb2ZmIGhlcmUgcmF0aGVyIHRoYW4gZGlzYWJsZWQgb3V0cmlnaHQsIHNvIHByb2R1Y3Rpb24gY29kZSBrZWVwcyB0aGUgY2hlY2suXG4gICAgICAgKi9cbiAgICAgIGZpbGVzOiBjb250ZXh0LnRlc3RGaWxlcyxcbiAgICAgIHJ1bGVzOiB7XG4gICAgICAgIC8qXG4gICAgICAgICAqIFR3byBzaGFwZXMgaGVyZSBjYW5ub3QgZm9sbG93IHRoZSBhZHZpY2UuIEEgaGVscGVyIGRlZmluZWQgaW5zaWRlIGFuIGBldmFsSW5PYnNpZGlhbmAgY2FsbGJhY2tcbiAgICAgICAgICogY2Fubm90IGJlIGhvaXN0ZWQgYXQgYWxsOiB0aGUgY2FsbGJhY2sgaXMgc2VyaWFsaXplZCB3aXRoIGB0b1N0cmluZygpYCBhbmQgcnVucyBpbnNpZGUgT2JzaWRpYW4sIHNvXG4gICAgICAgICAqIGFueXRoaW5nIGxlZnQgYmVoaW5kIGluIHRoZSBtb2R1bGUgc2NvcGUgaXMgc2ltcGx5IG5vdCB0aGVyZS4gQW5kIGEgcGVyLXN1aXRlIGZhY3RvcnlcbiAgICAgICAgICogKGBjcmVhdGVDb21wb25lbnRgLCBgY3JlYXRlTW9ja1BsdWdpbmApIGlzIGRlbGliZXJhdGVseSBsb2NhbCwga2VlcGluZyBlYWNoIHN1aXRlJ3MgZml4dHVyZSBuZXh0IHRvXG4gICAgICAgICAqIHRoZSBhc3NlcnRpb25zIHRoYXQgcmVhZCBpdC4gUHJvZHVjdGlvbiBjb2RlIGtlZXBzIHRoZSBjaGVjay5cbiAgICAgICAgICovXG4gICAgICAgICd1bmljb3JuL2NvbnNpc3RlbnQtZnVuY3Rpb24tc2NvcGluZyc6ICdvZmYnLFxuICAgICAgICAvKlxuICAgICAgICAgKiBBIHRlc3QgYmluZGluZyBpcyBuYW1lZCBhZnRlciB0aGUgdGhpbmcgaXQgY2FwdHVyZXMsIG5vdCBhZnRlciB3aGF0IGl0IGRvZXM6IGBjcmVhdGVFbGVtZW50U3B5YFxuICAgICAgICAgKiBob2xkcyB0aGUgc3B5IG9uIGBjcmVhdGVFbGVtZW50YCwgYW5kIGBjcmVhdGVQcm9ncmFtT3B0aW9uc2AgaG9sZHMgdGhlIG9wdGlvbnMgYGNyZWF0ZVByb2dyYW1gIHdhc1xuICAgICAgICAgKiBjYWxsZWQgd2l0aC4gVGhlIHZlcmIgYmVsb25ncyB0byB0aGUgbmFtZSBiZWluZyByZWZlcmVuY2VkLCBzbyB0aGUgcnVsZSByZWFkcyBpdCBhcyBhIGZ1bmN0aW9uIG5hbWVcbiAgICAgICAgICogdGhhdCBpcyBub3QgYSBmdW5jdGlvbi4gTGVmdCBvbiBmb3IgcHJvZHVjdGlvbiBjb2RlLCB3aGVyZSB0aGUgY29tcGxhaW50IGlzIHRoZSByaWdodCBvbmUuXG4gICAgICAgICAqL1xuICAgICAgICAndW5pY29ybi9uby1ub24tZnVuY3Rpb24tdmVyYi1wcmVmaXgnOiAnb2ZmJyxcbiAgICAgICAgJ3VuaWNvcm4vbm8tdG9wLWxldmVsLWFzc2lnbm1lbnQtaW4tZnVuY3Rpb24nOiAnb2ZmJ1xuICAgICAgfVxuICAgIH1cbiAgXSk7XG59XG5cbi8qIGVzbGludC1lbmFibGUgbm8tbWFnaWMtbnVtYmVycyAtLSBXZSBkaXNhYmxlZCBtYWdpYyBudW1iZXJzIGJlY2F1c2UgdGhleSBhcmUgdXNlZCBhbGwgb3ZlciB0aGUg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QTtBQUFBO0FBQUE7QUFBQSxRQVE5QyxnQ0FBZ0M7QUFBQSxVQUM5QjtBQUFBLFVBQ0E7QUFBQSxZQUNFLGdCQUFnQjtBQUFBLFlBQ2hCLHdCQUF3QjtBQUFBLFVBQzFCO0FBQUEsUUFDRjtBQUFBO0FBQUEsUUFFQSxtQ0FBbUM7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFFBUW5DLHdCQUF3QjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFReEIsd0NBQXdDO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFFBTXhDLG1DQUFtQztBQUFBO0FBQUEsUUFFbkMsb0NBQW9DO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFFBTXBDLGdEQUFnRDtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxRQVNoRCxrQ0FBa0M7QUFBQTtBQUFBLFFBRWxDLHlDQUF5QztBQUFBO0FBQUEsUUFFekMsOEJBQThCO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFFBUzlCLHlDQUF5QztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxRQU16QyxnQ0FBZ0M7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxRQU9oQyxzQ0FBc0M7QUFBQTtBQUFBLFFBRXRDLHlDQUF5QztBQUFBLFVBQ3ZDO0FBQUEsVUFDQTtBQUFBLFlBQ0UsVUFBVTtBQUFBLFVBQ1o7QUFBQSxRQUNGO0FBQUEsTUFDRjtBQUFBLElBQ0Y7QUFBQSxJQUNBO0FBQUE7QUFBQSxNQUVFLE9BQU8sUUFBUTtBQUFBLE1BQ2YsT0FBTztBQUFBLFFBQ0wsMkJBQTJCO0FBQUEsTUFDN0I7QUFBQSxJQUNGO0FBQUEsSUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxNQVlFLE9BQU8sUUFBUTtBQUFBLE1BQ2YsT0FBTztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFRTCx1Q0FBdUM7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxRQU92Qyx1Q0FBdUM7QUFBQSxRQUN2QywrQ0FBK0M7QUFBQSxNQUNqRDtBQUFBLElBQ0Y7QUFBQSxFQUNGLENBQUM7QUFDSDsiLCJuYW1lcyI6WyJlc2xpbnQiLCJjb21tZW50c0NvbmZpZ3MiLCJlc2xpbnRQbHVnaW5JbXBvcnRYRmxhdENvbmZpZ3MiLCJub2RlUGx1Z2luIiwicGVyZmVjdGlvbmlzdENvbmZpZ3MiLCJzdHlsaXN0aWMiLCJ0c2VzbGludCIsInVuaWNvcm4iXX0=
|
|
@@ -265,4 +265,4 @@ function resolveMemberPath(checker, root, memberNames) {
|
|
|
265
265
|
MESSAGE_ID,
|
|
266
266
|
noUnresolvedJsdocLink
|
|
267
267
|
});
|
|
268
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9saW50ZXJzL2VzbGludC1ydWxlcy9uby11bnJlc29sdmVkLWpzZG9jLWxpbmsudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAZmlsZVxuICpcbiAqIEVTTGludCBydWxlOiBuby11bnJlc29sdmVkLWpzZG9jLWxpbmtcbiAqXG4gKiBSZXBvcnRzIGEgSlNEb2MgYGxpbmtgLCBgbGlua2NvZGVgIG9yIGBsaW5rcGxhaW5gIGlubGluZSB0YWcgd2hvc2UgdGFyZ2V0IG5vIGxvbmdlciByZXNvbHZlcyB0byBhIHN5bWJvbC5cbiAqXG4gKiBBIHJlbmFtZSBsZWF2ZXMgYHtAbGluayBPbGROYW1lfWAgYmVoaW5kIGFuZCBub3RoaW5nIGVsc2UgcmVwb3J0cyBpdDogYGpzZG9jL25vLXVuZGVmaW5lZC10eXBlc2AgZG9lcyBub3QgcmVzb2x2ZVxuICogbGluayB0YXJnZXRzLCBUU0RvYyBjaGVja3Mgb25seSB0aGUgdGFnIHN5bnRheCwgYW5kIGB0c2NgIHBhcnNlcyBKU0RvYyBsaW5rcyB3aXRob3V0IGV2ZXIgZGlhZ25vc2luZyB0aGVtLiBTbyBhIGRlYWRcbiAqIGxpbmsgc3Vydml2ZXMgdW50aWwgc29tZWJvZHkgaGFwcGVucyB0byBjbGljayBpdC5cbiAqXG4gKiBBIHRhcmdldCByZXNvbHZlcyB3aGVuIGFueSBvZiB0aGVzZSBmaW5kcyBpdCwgdHJpZWQgaW4gb3JkZXI6XG4gKlxuICogMS4gVGhlIHR5cGUgY2hlY2tlciwgYXQgdGhlIGNvbW1lbnQncyBvd24gbG9jYXRpb24sIGV4YWN0bHkgYXMgZWRpdG9yIGdvLXRvLWRlZmluaXRpb24gZG9lcyDigJQgc28gZXZlcnl0aGluZyBpblxuICogICAgc2NvcGUgdGhlcmUgcmVzb2x2ZXM6IHR5cGUgcGFyYW1ldGVycywgcGFyYW1ldGVycywgaW1wb3J0cywgYW5kIHRoZSBET00gLyBFUyBnbG9iYWxzLlxuICogMi4gQSBkZWNsYXJhdGlvbiBhbnl3aGVyZSBpbiB0aGUgc2FtZSBmaWxlIOKAlCBhIGZ1bmN0aW9uIG5lc3RlZCBpbiBhbm90aGVyLCBhIHByaXZhdGUgbWV0aG9kIOKAlCB3aGljaCBpcyBvdXQgb2ZcbiAqICAgIHNjb3BlIGF0IGEgYCpQYXJhbXNgIGludGVyZmFjZSBuYW1pbmcgaXQsIHlldCBpcyBleGFjdGx5IHdoYXQgYSByZW5hbWUgb2YgaXQgd291bGQgYnJlYWsuXG4gKiAzLiBUaGUgZXhwb3J0cyBvZiBhbnkgbW9kdWxlIGluIHRoZSBwcm9ncmFtLCBieSBuYW1lLiBBIGNvbW1lbnQgcm91dGluZWx5IG5hbWVzIGEgdHlwZSBpdHMgZmlsZSBuZXZlciBpbXBvcnRzIChhblxuICogICAgaW50ZWdyYXRpb24gdGVzdCBuYW1pbmcgdGhlIGNsYXNzIGl0IGRyaXZlcyB0aHJvdWdoIGBldmFsSW5PYnNpZGlhbmAsIGEgcmVtYXJrIG5hbWluZyBhbiBPYnNpZGlhbiBBUEkpLCBhbmQgdGhlXG4gKiAgICBBUEkgZG9jcyBnZW5lcmF0b3IgcmVzb2x2ZXMgc3VjaCBhIG5hbWUgbGlicmFyeS13aWRlIHRvby4gVGhpcyBrZWVwcyB0aGUgcnVsZSBhYm91dCBERUFEIGxpbmtzIHJhdGhlciB0aGFuXG4gKiAgICBhYm91dCBpbXBvcnRzOiBhIHJlbmFtZWQgb3IgcmVtb3ZlZCBkZWNsYXJhdGlvbiBpcyBleHBvcnRlZCBieSBubyBtb2R1bGUsIHNvIGl0IGlzIHN0aWxsIHJlcG9ydGVkLlxuICogNC4gQSBtb2R1bGUgbmFtZWQgYnkgaXRzIHNwZWNpZmllciBvciBpdHMgcGF0aCwgaW4gYm90aCBUU0RvYyBmb3JtczogYG9ic2lkaWFuI0V2ZW50cyNvbmAgKHRoZSBwYWNrYWdlIGFzIHRoZSBmaXJzdFxuICogICAgc2VnbWVudCkgYW5kIGBlcnJvciFlcnJvclRvU3RyaW5nYCAvIGBvYnNpZGlhbi9jb21wb25lbnRzL3BsdWdpbi1nYXRlLWNvbXBvbmVudCFQbHVnaW5Db25mbGljdFNldmVyaXR5Lldhcm5gXG4gKiAgICAoYSBtb2R1bGUgcGF0aCwgZW5kaW5nIHdpdGggYCFgKSDigJQgcGx1cyBUeXBlU2NyaXB0J3Mgb3duIGBpbXBvcnQoJy4vbW9kdWxlLnRzJykuTWVtYmVyYC4gQSBwYXRoIG1hdGNoZXMgYW55XG4gKiAgICBzb3VyY2UgZmlsZSBpbiB0aGUgcHJvZ3JhbSB3aG9zZSBwYXRoIGVuZHMgd2l0aCBpdC5cbiAqXG4gKiBBZnRlciB0aGUgZmlyc3Qgc2VnbWVudCwgZWFjaCBmdXJ0aGVyIGAuYCAvIGAjYCBzZWdtZW50IGlzIGxvb2tlZCB1cCBhcyBhIG1lbWJlcjogYSBuYW1lc3BhY2Ugb3IgbW9kdWxlIGV4cG9ydCwgYVxuICogc3RhdGljIG9yIGluc3RhbmNlIG1lbWJlciwgb3IgYSBwcm9wZXJ0eSBvZiB0aGUgcHJldmlvdXMgbWVtYmVyJ3MgdHlwZSDigJQgc28gYEFwcC52YXVsdC5hZGFwdGVyYCByZXNvbHZlcy5cbiAqXG4gKiBBIGxpbmsgdGhhdCBpcyBub3QgYSBjb2RlIHJlZmVyZW5jZSBpcyBza2lwcGVkOiBhIFVSTCAoYHtAbGluayBodHRwczovL2V4YW1wbGUuY29tfWApIGFuZCBhIEpTRG9jIG5hbWVwYXRoXG4gKiAoYHtAbGluayBtb2R1bGU6Zm9vfWApIGJvdGggcGFyc2UgYXMgYSBuYW1lIGZvbGxvd2VkIGJ5IHRleHQgc3RhcnRpbmcgd2l0aCBgOmAsIGFuZCBhIGxpbmsgd2l0aCBubyBuYW1lIGhhc1xuICogbm90aGluZyB0byByZXNvbHZlLlxuICovXG5pbXBvcnQgdHlwZSB7XG4gIFBhcnNlclNlcnZpY2VzV2l0aFR5cGVJbmZvcm1hdGlvbixcbiAgVFNFU1RyZWVcbn0gZnJvbSAnQHR5cGVzY3JpcHQtZXNsaW50L3V0aWxzJztcbmltcG9ydCB0eXBlIHsgUnVsZSB9IGZyb20gJ2VzbGludCc7XG5pbXBvcnQgdHlwZSB7XG4gIENsYXNzRGVjbGFyYXRpb24sXG4gIEVudGl0eU5hbWUsXG4gIEVudW1EZWNsYXJhdGlvbixcbiAgRnVuY3Rpb25EZWNsYXJhdGlvbixcbiAgR2V0QWNjZXNzb3JEZWNsYXJhdGlvbixcbiAgSWRlbnRpZmllcixcbiAgSW50ZXJmYWNlRGVjbGFyYXRpb24sXG4gIEpTRG9jTGluayxcbiAgSlNEb2NMaW5rQ29kZSxcbiAgSlNEb2NMaW5rUGxhaW4sXG4gIEpTRG9jTWVtYmVyTmFtZSxcbiAgTWV0aG9kRGVjbGFyYXRpb24sXG4gIE1ldGhvZFNpZ25hdHVyZSxcbiAgTW9kdWxlRGVjbGFyYXRpb24sXG4gIE5vZGUsXG4gIFByb2dyYW0sXG4gIFByb3BlcnR5RGVjbGFyYXRpb24sXG4gIFByb3BlcnR5U2lnbmF0dXJlLFxuICBTZXRBY2Nlc3NvckRlY2xhcmF0aW9uLFxuICBTeW1ib2wgYXMgVHNTeW1ib2wsXG4gIFR5cGVBbGlhc0RlY2xhcmF0aW9uLFxuICBUeXBlQ2hlY2tlcixcbiAgVmFyaWFibGVEZWNsYXJhdGlvblxufSBmcm9tICd0eXBlc2NyaXB0JztcblxuaW1wb3J0IHtcbiAgZXNjYXBlTGVhZGluZ1VuZGVyc2NvcmVzLFxuICBmb3JFYWNoQ2hpbGQsXG4gIGdldEpTRG9jQ29tbWVudHNBbmRUYWdzLFxuICBpc0NsYXNzRGVjbGFyYXRpb24sXG4gIGlzRW51bURlY2xhcmF0aW9uLFxuICBpc0Z1bmN0aW9uRGVjbGFyYXRpb24sXG4gIGlzR2V0QWNjZXNzb3JEZWNsYXJhdGlvbixcbiAgaXNJZGVudGlmaWVyLFxuICBpc0ludGVyZmFjZURlY2xhcmF0aW9uLFxuICBpc0pTRG9jTGluayxcbiAgaXNKU0RvY0xpbmtDb2RlLFxuICBpc0pTRG9jTGlua1BsYWluLFxuICBpc0pTRG9jTWVtYmVyTmFtZSxcbiAgaXNNZXRob2REZWNsYXJhdGlvbixcbiAgaXNNZXRob2RTaWduYXR1cmUsXG4gIGlzTW9kdWxlRGVjbGFyYXRpb24sXG4gIGlzUHJvcGVydHlEZWNsYXJhdGlvbixcbiAgaXNQcm9wZXJ0eVNpZ25hdHVyZSxcbiAgaXNTZXRBY2Nlc3NvckRlY2xhcmF0aW9uLFxuICBpc1R5cGVBbGlhc0RlY2xhcmF0aW9uLFxuICBpc1ZhcmlhYmxlRGVjbGFyYXRpb24sXG4gIHJlc29sdmVNb2R1bGVOYW1lLFxuICBTeW1ib2xGbGFncyxcbiAgc3lzXG59IGZyb20gJ3R5cGVzY3JpcHQnO1xuXG5pbXBvcnQgeyB0b1RTRVNUcmVlTm9kZSB9IGZyb20gJy4vdHMtZXN0cmVlLW5vZGUudHMnO1xuXG4vKipcbiAqIE1lc3NhZ2UgSUQgcmVwb3J0ZWQgd2hlbiBhIEpTRG9jIGxpbmsgdGFyZ2V0IGRvZXMgbm90IHJlc29sdmUgdG8gYSBzeW1ib2wuXG4gKi9cbmV4cG9ydCBjb25zdCBNRVNTQUdFX0lEID0gJ25vVW5yZXNvbHZlZEpzZG9jTGluayc7XG5cbmludGVyZmFjZSBJc1Jlc29sdmVkTmFtZVBhcmFtcyB7XG4gIHJlYWRvbmx5IGNoZWNrZXI6IFR5cGVDaGVja2VyO1xuICByZWFkb25seSBjb250YWluaW5nRmlsZU5hbWU6IHN0cmluZztcbiAgcmVhZG9ubHkgbG9jYWxEZWNsYXJhdGlvbk5hbWVzQnlOYW1lOiBSZWFkb25seU1hcDxzdHJpbmcsIHJlYWRvbmx5IElkZW50aWZpZXJbXT47XG4gIHJlYWRvbmx5IG5hbWU6IEVudGl0eU5hbWUgfCBKU0RvY01lbWJlck5hbWU7XG4gIHJlYWRvbmx5IHByb2dyYW06IFByb2dyYW07XG59XG5cbnR5cGUgSlNEb2NMaW5rTGlrZSA9IEpTRG9jTGluayB8IEpTRG9jTGlua0NvZGUgfCBKU0RvY0xpbmtQbGFpbjtcblxudHlwZSBMb2NhbERlY2xhcmF0aW9uID1cbiAgfCBDbGFzc0RlY2xhcmF0aW9uXG4gIHwgRW51bURlY2xhcmF0aW9uXG4gIHwgRnVuY3Rpb25EZWNsYXJhdGlvblxuICB8IEdldEFjY2Vzc29yRGVjbGFyYXRpb25cbiAgfCBJbnRlcmZhY2VEZWNsYXJhdGlvblxuICB8IE1ldGhvZERlY2xhcmF0aW9uXG4gIHwgTWV0aG9kU2lnbmF0dXJlXG4gIHwgTW9kdWxlRGVjbGFyYXRpb25cbiAgfCBQcm9wZXJ0eURlY2xhcmF0aW9uXG4gIHwgUHJvcGVydHlTaWduYXR1cmVcbiAgfCBTZXRBY2Nlc3NvckRlY2xhcmF0aW9uXG4gIHwgVHlwZUFsaWFzRGVjbGFyYXRpb25cbiAgfCBWYXJpYWJsZURlY2xhcmF0aW9uO1xuXG50eXBlIE1vZHVsZVBhdGhNYXRjaEdyb3VwcyA9IFJlYWRvbmx5PFJlY29yZDwnbWVtYmVyUGF0aCcgfCAnbW9kdWxlUGF0aCcsIHN0cmluZz4+O1xuXG5pbnRlcmZhY2UgUHJvZ3JhbUluZGV4IHtcbiAgcmVhZG9ubHkgZXhwb3J0c0J5TmFtZTogTWFwPHN0cmluZywgVHNTeW1ib2xbXT47XG4gIHJlYWRvbmx5IG1vZHVsZXNCeVBhdGg6IE1hcDxzdHJpbmcsIFRzU3ltYm9sPjtcbn1cblxuY29uc3QgTU9EVUxFX1BBVEhfUkVHX0VYUCA9IC9eKD88bW9kdWxlUGF0aD5bXlxccyF8fV0qKSEoPzxtZW1iZXJQYXRoPltcXHckLiNdKykvO1xuY29uc3QgSU1QT1JUX1RZUEVfUkVHX0VYUCA9IC9eaW1wb3J0XFwoXFxzKig/PHF1b3RlPlsnXCJdKSg/PG1vZHVsZVBhdGg+W14nXCJdKylcXGs8cXVvdGU+XFxzKlxcKVxcLig/PG1lbWJlclBhdGg+W1xcdyQuI10rKS87XG5jb25zdCBSRUxBVElWRV9QQVRIX1BSRUZJWF9SRUdfRVhQID0gL14oPzpcXC5cXC4/XFwvKSsvO1xuY29uc3QgTUVNQkVSX1NFUEFSQVRPUl9SRUdfRVhQID0gL1suI10vO1xuY29uc3QgU09VUkNFX0ZJTEVfRVhURU5TSU9OX1JFR19FWFAgPSAvKD86XFwuZCk/XFwuW2NtXT90c3g/JC87XG5jb25zdCBJTkRFWF9TVUZGSVggPSAnL2luZGV4JztcblxuY29uc3QgcHJvZ3JhbUluZGV4Q2FjaGUgPSBuZXcgV2Vha01hcDxQcm9ncmFtLCBQcm9ncmFtSW5kZXg+KCk7XG5cbi8qKlxuICogVGhlIEVTTGludCBydWxlIHRoYXQgcmVwb3J0cyBKU0RvYyBsaW5rcyB3aG9zZSB0YXJnZXQgZG9lcyBub3QgcmVzb2x2ZS5cbiAqL1xuZXhwb3J0IGNvbnN0IG5vVW5yZXNvbHZlZEpzZG9jTGluazogUnVsZS5SdWxlTW9kdWxlID0ge1xuICBjcmVhdGUoY29udGV4dCkge1xuICAgIGNvbnN0IHNlcnZpY2VzID0gY29udGV4dC5zb3VyY2VDb2RlLnBhcnNlclNlcnZpY2VzIGFzIFBhcnNlclNlcnZpY2VzV2l0aFR5cGVJbmZvcm1hdGlvbjtcblxuICAgIHJldHVybiB7XG4gICAgICBQcm9ncmFtKG5vZGUpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgcHJvZ3JhbSA9IHNlcnZpY2VzLnByb2dyYW07XG4gICAgICAgIGNvbnN0IGNoZWNrZXIgPSBwcm9ncmFtLmdldFR5cGVDaGVja2VyKCk7XG4gICAgICAgIGNvbnN0IHRzU291cmNlRmlsZSA9IHNlcnZpY2VzLmVzVHJlZU5vZGVUb1RTTm9kZU1hcC5nZXQodG9UU0VTVHJlZU5vZGUobm9kZSkgYXMgVFNFU1RyZWUuUHJvZ3JhbSk7XG5cbiAgICAgICAgLypcbiAgICAgICAgICogVGhlIHNhbWUgbGluayBpcyByZWFjaGFibGUgbW9yZSB0aGFuIG9uY2U6IGEgcGFyYW1ldGVyIHJldHVybnMgaXRzIG93biBgQHBhcmFtYCB0YWcsIHdoaWNoIGl0cyBmdW5jdGlvbidzXG4gICAgICAgICAqIEpTRG9jIGJsb2NrIGFsc28gY29udGFpbnMuIFNvIGRlZHVwbGljYXRlIG9uIHRoZSBsaW5rIGl0c2VsZiByYXRoZXIgdGhhbiBvbiB0aGUgSlNEb2Mgbm9kZS5cbiAgICAgICAgICovXG4gICAgICAgIGNvbnN0IGxpbmtzID0gbmV3IFNldDxKU0RvY0xpbmtMaWtlPigpO1xuXG4gICAgICAgIC8qXG4gICAgICAgICAqIEEgbGluayBtYXkgbmFtZSBhIGRlY2xhcmF0aW9uIGZ1cnRoZXIgZG93biB0aGUgZmlsZSwgc28gdGhlIHdob2xlIGZpbGUgaXMgd2Fsa2VkIGJlZm9yZSBhbnkgbGluayBpc1xuICAgICAgICAgKiByZXNvbHZlZC5cbiAgICAgICAgICovXG4gICAgICAgIGNvbnN0IGxvY2FsRGVjbGFyYXRpb25OYW1lc0J5TmFtZSA9IG5ldyBNYXA8c3RyaW5nLCBJZGVudGlmaWVyW10+KCk7XG5cbiAgICAgICAgZnVuY3Rpb24gdmlzaXRKc0RvY05vZGUoanNEb2NOb2RlOiBOb2RlKTogdm9pZCB7XG4gICAgICAgICAgaWYgKGlzSlNEb2NMaW5rTGlrZShqc0RvY05vZGUpKSB7XG4gICAgICAgICAgICBsaW5rcy5hZGQoanNEb2NOb2RlKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG4gICAgICAgICAgZm9yRWFjaENoaWxkKGpzRG9jTm9kZSwgdmlzaXRKc0RvY05vZGUpO1xuICAgICAgICB9XG5cbiAgICAgICAgZnVuY3Rpb24gdmlzaXROb2RlKHRzTm9kZTogTm9kZSk6IHZvaWQge1xuICAgICAgICAgIGNvbGxlY3RMb2NhbERlY2xhcmF0aW9uTmFtZSh0c05vZGUsIGxvY2FsRGVjbGFyYXRpb25OYW1lc0J5TmFtZSk7XG4gICAgICAgICAgZm9yIChjb25zdCBqc0RvY05vZGUgb2YgZ2V0SlNEb2NDb21tZW50c0FuZFRhZ3ModHNOb2RlKSkge1xuICAgICAgICAgICAgdmlzaXRKc0RvY05vZGUoanNEb2NOb2RlKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgZm9yRWFjaENoaWxkKHRzTm9kZSwgdmlzaXROb2RlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZ1bmN0aW9uIHJlcG9ydElmVW5yZXNvbHZlZChsaW5rOiBKU0RvY0xpbmtMaWtlKTogdm9pZCB7XG4gICAgICAgICAgaWYgKCFsaW5rLm5hbWUgfHwgbGluay50ZXh0LnN0YXJ0c1dpdGgoJzonKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGNvbnN0IG5hbWVUZXh0ID0gbGluay5uYW1lLmdldFRleHQoKTtcbiAgICAgICAgICBjb25zdCBmdWxsVGFyZ2V0ID0gbmFtZVRleHQgKyBsaW5rLnRleHQ7XG4gICAgICAgICAgY29uc3QgbW9kdWxlTWF0Y2ggPSBJTVBPUlRfVFlQRV9SRUdfRVhQLmV4ZWMoZnVsbFRhcmdldCkgPz8gTU9EVUxFX1BBVEhfUkVHX0VYUC5leGVjKGZ1bGxUYXJnZXQpO1xuICAgICAgICAgIGxldCByZXBvcnRlZE5hbWUgPSBuYW1lVGV4dDtcbiAgICAgICAgICBsZXQgaXNSZXNvbHZlZDogYm9vbGVhbjtcblxuICAgICAgICAgIGlmIChtb2R1bGVNYXRjaD8uZ3JvdXBzKSB7XG4gICAgICAgICAgICBjb25zdCB7IG1lbWJlclBhdGgsIG1vZHVsZVBhdGggfSA9IG1vZHVsZU1hdGNoLmdyb3VwcyBhcyBNb2R1bGVQYXRoTWF0Y2hHcm91cHM7XG4gICAgICAgICAgICByZXBvcnRlZE5hbWUgPSBtb2R1bGVNYXRjaFswXTtcbiAgICAgICAgICAgIGNvbnN0IG1vZHVsZVN5bWJvbCA9IGZpbmRNb2R1bGUocHJvZ3JhbSwgY2hlY2tlciwgbW9kdWxlUGF0aCwgdHNTb3VyY2VGaWxlLmZpbGVOYW1lKTtcbiAgICAgICAgICAgIGlzUmVzb2x2ZWQgPSAhIXJlc29sdmVNZW1iZXJQYXRoKGNoZWNrZXIsIG1vZHVsZVN5bWJvbCwgbWVtYmVyUGF0aC5zcGxpdChNRU1CRVJfU0VQQVJBVE9SX1JFR19FWFApKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaXNSZXNvbHZlZCA9IGlzUmVzb2x2ZWROYW1lKHtcbiAgICAgICAgICAgICAgY2hlY2tlcixcbiAgICAgICAgICAgICAgY29udGFpbmluZ0ZpbGVOYW1lOiB0c1NvdXJjZUZpbGUuZmlsZU5hbWUsXG4gICAgICAgICAgICAgIGxvY2FsRGVjbGFyYXRpb25OYW1lc0J5TmFtZSxcbiAgICAgICAgICAgICAgbmFtZTogbGluay5uYW1lLFxuICAgICAgICAgICAgICBwcm9ncmFtXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoaXNSZXNvbHZlZCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGNvbnRleHQucmVwb3J0KHtcbiAgICAgICAgICAgIGRhdGE6IHtcbiAgICAgICAgICAgICAgbmFtZTogcmVwb3J0ZWROYW1lXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbG9jOiB7XG4gICAgICAgICAgICAgIGVuZDogY29udGV4dC5zb3VyY2VDb2RlLmdldExvY0Zyb21JbmRleChsaW5rLm5hbWUuZ2V0RW5kKCkpLFxuICAgICAgICAgICAgICBzdGFydDogY29udGV4dC5zb3VyY2VDb2RlLmdldExvY0Zyb21JbmRleChsaW5rLm5hbWUuZ2V0U3RhcnQoKSlcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBtZXNzYWdlSWQ6IE1FU1NBR0VfSURcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZpc2l0Tm9kZSh0c1NvdXJjZUZpbGUpO1xuICAgICAgICBmb3IgKGNvbnN0IGxpbmsgb2YgbGlua3MpIHtcbiAgICAgICAgICByZXBvcnRJZlVucmVzb2x2ZWQobGluayk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuICB9LFxuICBtZXRhOiB7XG4gICAgZG9jczoge1xuICAgICAgZGVzY3JpcHRpb246ICdEaXNhbGxvdyBKU0RvYyBsaW5rIHRhZ3Mgd2hvc2UgdGFyZ2V0IGRvZXMgbm90IHJlc29sdmUgdG8gYSBzeW1ib2wnXG4gICAgfSxcbiAgICBtZXNzYWdlczoge1xuICAgICAgW01FU1NBR0VfSURdOiAnSlNEb2MgbGluayB0YXJnZXQgYHt7bmFtZX19YCBkb2VzIG5vdCByZXNvbHZlLiBXYXMgaXQgcmVuYW1lZCBvciByZW1vdmVkPydcbiAgICB9LFxuICAgIHNjaGVtYTogW10sXG4gICAgdHlwZTogJ3Byb2JsZW0nXG4gIH1cbn07XG5cbmZ1bmN0aW9uIGNvbGxlY3RMb2NhbERlY2xhcmF0aW9uTmFtZShub2RlOiBOb2RlLCBsb2NhbERlY2xhcmF0aW9uTmFtZXNCeU5hbWU6IE1hcDxzdHJpbmcsIElkZW50aWZpZXJbXT4pOiB2b2lkIHtcbiAgaWYgKCFpc0xvY2FsRGVjbGFyYXRpb24obm9kZSkgfHwgIW5vZGUubmFtZSB8fCAhaXNJZGVudGlmaWVyKG5vZGUubmFtZSkpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgY29uc3QgbmFtZXMgPSBsb2NhbERlY2xhcmF0aW9uTmFtZXNCeU5hbWUuZ2V0KG5vZGUubmFtZS50ZXh0KSA/PyBbXTtcbiAgbmFtZXMucHVzaChub2RlLm5hbWUpO1xuICBsb2NhbERlY2xhcmF0aW9uTmFtZXNCeU5hbWUuc2V0KG5vZGUubmFtZS50ZXh0LCBuYW1lcyk7XG59XG5cbmZ1bmN0aW9uIGZpbmRNb2R1bGUocHJvZ3JhbTogUHJvZ3JhbSwgY2hlY2tlcjogVHlwZUNoZWNrZXIsIHNwZWNpZmllcjogc3RyaW5nLCBjb250YWluaW5nRmlsZU5hbWU6IHN0cmluZyk6IFRzU3ltYm9sIHwgdW5kZWZpbmVkIHtcbiAgY29uc3QgYW1iaWVudE1vZHVsZSA9IGdldFByb2dyYW1JbmRleChwcm9ncmFtLCBjaGVja2VyKS5tb2R1bGVzQnlQYXRoLmdldChzcGVjaWZpZXIpO1xuICBpZiAoYW1iaWVudE1vZHVsZSkge1xuICAgIHJldHVybiBhbWJpZW50TW9kdWxlO1xuICB9XG5cbiAgY29uc3QgcmVzb2x2ZWRGaWxlTmFtZSA9IHJlc29sdmVNb2R1bGVOYW1lKHNwZWNpZmllciwgY29udGFpbmluZ0ZpbGVOYW1lLCBwcm9ncmFtLmdldENvbXBpbGVyT3B0aW9ucygpLCBzeXMpLnJlc29sdmVkTW9kdWxlPy5yZXNvbHZlZEZpbGVOYW1lO1xuICBjb25zdCByZXNvbHZlZFNvdXJjZUZpbGUgPSByZXNvbHZlZEZpbGVOYW1lID09PSB1bmRlZmluZWQgPyB1bmRlZmluZWQgOiBwcm9ncmFtLmdldFNvdXJjZUZpbGUocmVzb2x2ZWRGaWxlTmFtZSk7XG4gIGNvbnN0IHJlc29sdmVkTW9kdWxlID0gcmVzb2x2ZWRTb3VyY2VGaWxlICYmIGNoZWNrZXIuZ2V0U3ltYm9sQXRMb2NhdGlvbihyZXNvbHZlZFNvdXJjZUZpbGUpO1xuICByZXR1cm4gcmVzb2x2ZWRNb2R1bGUgPz8gZmluZE1vZHVsZUJ5UGF0aFN1ZmZpeChwcm9ncmFtLCBjaGVja2VyLCBzcGVjaWZpZXIpO1xufVxuXG5mdW5jdGlvbiBmaW5kTW9kdWxlQnlQYXRoU3VmZml4KHByb2dyYW06IFByb2dyYW0sIGNoZWNrZXI6IFR5cGVDaGVja2VyLCBtb2R1bGVQYXRoOiBzdHJpbmcpOiBUc1N5bWJvbCB8IHVuZGVmaW5lZCB7XG4gIGNvbnN0IG5vcm1hbGl6ZWRQYXRoID0gbW9kdWxlUGF0aC5yZXBsYWNlKFJFTEFUSVZFX1BBVEhfUFJFRklYX1JFR19FWFAsICcnKS5yZXBsYWNlKFNPVVJDRV9GSUxFX0VYVEVOU0lPTl9SRUdfRVhQLCAnJyk7XG4gIGNvbnN0IHN1ZmZpeGVzID0gW2AvJHtub3JtYWxpemVkUGF0aH1gLCBgLyR7bm9ybWFsaXplZFBhdGh9JHtJTkRFWF9TVUZGSVh9YF07XG4gIGZvciAoY29uc3Qgc291cmNlRmlsZSBvZiBwcm9ncmFtLmdldFNvdXJjZUZpbGVzKCkpIHtcbiAgICBjb25zdCBwYXRoV2l0aG91dEV4dGVuc2lvbiA9IHNvdXJjZUZpbGUuZmlsZU5hbWUucmVwbGFjZShTT1VSQ0VfRklMRV9FWFRFTlNJT05fUkVHX0VYUCwgJycpO1xuICAgIGlmIChzdWZmaXhlcy5ldmVyeSgoc3VmZml4KSA9PiAhcGF0aFdpdGhvdXRFeHRlbnNpb24uZW5kc1dpdGgoc3VmZml4KSkpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBjb25zdCBtb2R1bGVTeW1ib2wgPSBjaGVja2VyLmdldFN5bWJvbEF0TG9jYXRpb24oc291cmNlRmlsZSk7XG4gICAgaWYgKG1vZHVsZVN5bWJvbCkge1xuICAgICAgcmV0dXJuIG1vZHVsZVN5bWJvbDtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHVuZGVmaW5lZDtcbn1cblxuZnVuY3Rpb24gZmxhdHRlbk5hbWUobmFtZTogRW50aXR5TmFtZSB8IEpTRG9jTWVtYmVyTmFtZSk6IHN0cmluZ1tdIHtcbiAgcmV0dXJuIGlzSWRlbnRpZmllcihuYW1lKSA/IFtuYW1lLnRleHRdIDogWy4uLmZsYXR0ZW5OYW1lKG5hbWUubGVmdCksIG5hbWUucmlnaHQudGV4dF07XG59XG5cbmZ1bmN0aW9uIGdldE1lbWJlcihjaGVja2VyOiBUeXBlQ2hlY2tlciwgJHN5bWJvbDogVHNTeW1ib2wsIG1lbWJlck5hbWU6IHN0cmluZyk6IFRzU3ltYm9sIHwgdW5kZWZpbmVkIHtcbiAgY29uc3QgZXNjYXBlZE5hbWUgPSBlc2NhcGVMZWFkaW5nVW5kZXJzY29yZXMobWVtYmVyTmFtZSk7XG4gIGNvbnN0IHRhcmdldCA9IHJlc29sdmVBbGlhcyhjaGVja2VyLCAkc3ltYm9sKTtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWJpdHdpc2UgLS0gQml0d2lzZSBmbGFnIHRlc3QgaXMgaWRpb21hdGljIGZvciB0aGUgVHlwZVNjcmlwdCBjb21waWxlciBBUEkuXG4gIGNvbnN0IG1vZHVsZUV4cG9ydCA9ICh0YXJnZXQuZmxhZ3MgJiBTeW1ib2xGbGFncy5Nb2R1bGUpID09PSAwID8gdW5kZWZpbmVkIDogY2hlY2tlci50cnlHZXRNZW1iZXJJbk1vZHVsZUV4cG9ydHMobWVtYmVyTmFtZSwgdGFyZ2V0KTtcbiAgcmV0dXJuIG1vZHVsZUV4cG9ydFxuICAgID8/IHRhcmdldC5leHBvcnRzPy5nZXQoZXNjYXBlZE5hbWUpXG4gICAgPz8gdGFyZ2V0Lm1lbWJlcnM/LmdldChlc2NhcGVkTmFtZSlcbiAgICA/PyBjaGVja2VyLmdldFByb3BlcnR5T2ZUeXBlKGNoZWNrZXIuZ2V0RGVjbGFyZWRUeXBlT2ZTeW1ib2wodGFyZ2V0KSwgbWVtYmVyTmFtZSlcbiAgICA/PyBjaGVja2VyLmdldFByb3BlcnR5T2ZUeXBlKGNoZWNrZXIuZ2V0VHlwZU9mU3ltYm9sKHRhcmdldCksIG1lbWJlck5hbWUpO1xufVxuXG5mdW5jdGlvbiBnZXRQcm9ncmFtSW5kZXgocHJvZ3JhbTogUHJvZ3JhbSwgY2hlY2tlcjogVHlwZUNoZWNrZXIpOiBQcm9ncmFtSW5kZXgge1xuICBsZXQgaW5kZXggPSBwcm9ncmFtSW5kZXhDYWNoZS5nZXQocHJvZ3JhbSk7XG4gIGlmIChpbmRleCkge1xuICAgIHJldHVybiBpbmRleDtcbiAgfVxuXG4gIGluZGV4ID0ge1xuICAgIGV4cG9ydHNCeU5hbWU6IG5ldyBNYXA8c3RyaW5nLCBUc1N5bWJvbFtdPigpLFxuICAgIG1vZHVsZXNCeVBhdGg6IG5ldyBNYXA8c3RyaW5nLCBUc1N5bWJvbD4oKVxuICB9O1xuXG4gIGNvbnN0IG1vZHVsZVN5bWJvbHM6IFRzU3ltYm9sW10gPSBbXTtcbiAgZm9yIChjb25zdCBhbWJpZW50TW9kdWxlIG9mIGNoZWNrZXIuZ2V0QW1iaWVudE1vZHVsZXMoKSkge1xuICAgIGluZGV4Lm1vZHVsZXNCeVBhdGguc2V0KGFtYmllbnRNb2R1bGUubmFtZS5yZXBsYWNlQWxsKCdcIicsICcnKSwgYW1iaWVudE1vZHVsZSk7XG4gICAgbW9kdWxlU3ltYm9scy5wdXNoKGFtYmllbnRNb2R1bGUpO1xuICB9XG4gIGZvciAoY29uc3Qgc291cmNlRmlsZSBvZiBwcm9ncmFtLmdldFNvdXJjZUZpbGVzKCkpIHtcbiAgICBjb25zdCBtb2R1bGVTeW1ib2wgPSBjaGVja2VyLmdldFN5bWJvbEF0TG9jYXRpb24oc291cmNlRmlsZSk7XG4gICAgaWYgKG1vZHVsZVN5bWJvbCkge1xuICAgICAgbW9kdWxlU3ltYm9scy5wdXNoKG1vZHVsZVN5bWJvbCk7XG4gICAgfVxuICB9XG5cbiAgZm9yIChjb25zdCBtb2R1bGVTeW1ib2wgb2YgbW9kdWxlU3ltYm9scykge1xuICAgIGZvciAoY29uc3QgZXhwb3J0U3ltYm9sIG9mIGNoZWNrZXIuZ2V0RXhwb3J0c09mTW9kdWxlKG1vZHVsZVN5bWJvbCkpIHtcbiAgICAgIGNvbnN0IHN5bWJvbHMgPSBpbmRleC5leHBvcnRzQnlOYW1lLmdldChleHBvcnRTeW1ib2wubmFtZSkgPz8gW107XG4gICAgICBzeW1ib2xzLnB1c2goZXhwb3J0U3ltYm9sKTtcbiAgICAgIGluZGV4LmV4cG9ydHNCeU5hbWUuc2V0KGV4cG9ydFN5bWJvbC5uYW1lLCBzeW1ib2xzKTtcbiAgICB9XG4gIH1cblxuICBwcm9ncmFtSW5kZXhDYWNoZS5zZXQocHJvZ3JhbSwgaW5kZXgpO1xuICByZXR1cm4gaW5kZXg7XG59XG5cbmZ1bmN0aW9uIGlzSlNEb2NMaW5rTGlrZShub2RlOiBOb2RlKTogbm9kZSBpcyBKU0RvY0xpbmtMaWtlIHtcbiAgcmV0dXJuIGlzSlNEb2NMaW5rKG5vZGUpIHx8IGlzSlNEb2NMaW5rQ29kZShub2RlKSB8fCBpc0pTRG9jTGlua1BsYWluKG5vZGUpO1xufVxuXG5mdW5jdGlvbiBpc0xvY2FsRGVjbGFyYXRpb24obm9kZTogTm9kZSk6IG5vZGUgaXMgTG9jYWxEZWNsYXJhdGlvbiB7XG4gIHJldHVybiBpc0NsYXNzRGVjbGFyYXRpb24obm9kZSlcbiAgICB8fCBpc0VudW1EZWNsYXJhdGlvbihub2RlKVxuICAgIHx8IGlzRnVuY3Rpb25EZWNsYXJhdGlvbihub2RlKVxuICAgIHx8IGlzR2V0QWNjZXNzb3JEZWNsYXJhdGlvbihub2RlKVxuICAgIHx8IGlzSW50ZXJmYWNlRGVjbGFyYXRpb24obm9kZSlcbiAgICB8fCBpc01ldGhvZERlY2xhcmF0aW9uKG5vZGUpXG4gICAgfHwgaXNNZXRob2RTaWduYXR1cmUobm9kZSlcbiAgICB8fCBpc01vZHVsZURlY2xhcmF0aW9uKG5vZGUpXG4gICAgfHwgaXNQcm9wZXJ0eURlY2xhcmF0aW9uKG5vZGUpXG4gICAgfHwgaXNQcm9wZXJ0eVNpZ25hdHVyZShub2RlKVxuICAgIHx8IGlzU2V0QWNjZXNzb3JEZWNsYXJhdGlvbihub2RlKVxuICAgIHx8IGlzVHlwZUFsaWFzRGVjbGFyYXRpb24obm9kZSlcbiAgICB8fCBpc1ZhcmlhYmxlRGVjbGFyYXRpb24obm9kZSk7XG59XG5cbmZ1bmN0aW9uIGlzUmVzb2x2ZWROYW1lKHBhcmFtczogSXNSZXNvbHZlZE5hbWVQYXJhbXMpOiBib29sZWFuIHtcbiAgY29uc3Qge1xuICAgIGNoZWNrZXIsXG4gICAgY29udGFpbmluZ0ZpbGVOYW1lLFxuICAgIGxvY2FsRGVjbGFyYXRpb25OYW1lc0J5TmFtZSxcbiAgICBuYW1lLFxuICAgIHByb2dyYW1cbiAgfSA9IHBhcmFtcztcblxuICBpZiAoY2hlY2tlci5nZXRTeW1ib2xBdExvY2F0aW9uKG5hbWUpKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICAvLyBgRm9vI2JhcmAgaXMgYSBgSlNEb2NNZW1iZXJOYW1lYCwgd2hpY2ggdGhlIGNoZWNrZXIgcmVzb2x2ZXMgb25seSB0aHJvdWdoIGl0cyByaWdodC1oYW5kIG1lbWJlci5cbiAgaWYgKGlzSlNEb2NNZW1iZXJOYW1lKG5hbWUpICYmIGNoZWNrZXIuZ2V0U3ltYm9sQXRMb2NhdGlvbihuYW1lLnJpZ2h0KSkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgY29uc3QgW3Jvb3ROYW1lID0gJycsIC4uLm1lbWJlck5hbWVzXSA9IGZsYXR0ZW5OYW1lKG5hbWUpO1xuICBjb25zdCBpbmRleCA9IGdldFByb2dyYW1JbmRleChwcm9ncmFtLCBjaGVja2VyKTtcbiAgY29uc3QgbG9jYWxSb290cyA9IChsb2NhbERlY2xhcmF0aW9uTmFtZXNCeU5hbWUuZ2V0KHJvb3ROYW1lKSA/PyBbXSkubWFwKChkZWNsYXJhdGlvbk5hbWUpID0+IGNoZWNrZXIuZ2V0U3ltYm9sQXRMb2NhdGlvbihkZWNsYXJhdGlvbk5hbWUpKTtcbiAgY29uc3Qgcm9vdHMgPSBbLi4ubG9jYWxSb290cywgLi4uaW5kZXguZXhwb3J0c0J5TmFtZS5nZXQocm9vdE5hbWUpID8/IFtdLCBmaW5kTW9kdWxlKHByb2dyYW0sIGNoZWNrZXIsIHJvb3ROYW1lLCBjb250YWluaW5nRmlsZU5hbWUpXTtcblxuICByZXR1cm4gcm9vdHMuc29tZSgocm9vdCkgPT4gISFyZXNvbHZlTWVtYmVyUGF0aChjaGVja2VyLCByb290LCBtZW1iZXJOYW1lcykpO1xufVxuXG5mdW5jdGlvbiByZXNvbHZlQWxpYXMoY2hlY2tlcjogVHlwZUNoZWNrZXIsICRzeW1ib2w6IFRzU3ltYm9sKTogVHNTeW1ib2wge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tYml0d2lzZSAtLSBCaXR3aXNlIGZsYWcgdGVzdCBpcyBpZGlvbWF0aWMgZm9yIHRoZSBUeXBlU2NyaXB0IGNvbXBpbGVyIEFQSS5cbiAgcmV0dXJuICgkc3ltYm9sLmZsYWdzICYgU3ltYm9sRmxhZ3MuQWxpYXMpID09PSAwID8gJHN5bWJvbCA6IGNoZWNrZXIuZ2V0QWxpYXNlZFN5bWJvbCgkc3ltYm9sKTtcbn1cblxuZnVuY3Rpb24gcmVzb2x2ZU1lbWJlclBhdGgoY2hlY2tlcjogVHlwZUNoZWNrZXIsIHJvb3Q6IFRzU3ltYm9sIHwgdW5kZWZpbmVkLCBtZW1iZXJOYW1lczogcmVhZG9ubHkgc3RyaW5nW10pOiBUc1N5bWJvbCB8IHVuZGVmaW5lZCB7XG4gIGxldCBjdXJyZW50OiBUc1N5bWJvbCB8IHVuZGVmaW5lZCA9IHJvb3Q7XG4gIGZvciAoY29uc3QgbWVtYmVyTmFtZSBvZiBtZW1iZXJOYW1lcykge1xuICAgIGlmICghY3VycmVudCkge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgY3VycmVudCA9IGdldE1lbWJlcihjaGVja2VyLCBjdXJyZW50LCBtZW1iZXJOYW1lKTtcbiAgfVxuICByZXR1cm4gY3VycmVudDtcbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFnRUEsd0JBeUJPO0FBRVAsNEJBQStCO0FBS3hCLE1BQU0sYUFBYTtBQWtDMUIsTUFBTSxzQkFBc0I7QUFDNUIsTUFBTSxzQkFBc0I7QUFDNUIsTUFBTSwrQkFBK0I7QUFDckMsTUFBTSwyQkFBMkI7QUFDakMsTUFBTSxnQ0FBZ0M7QUFDdEMsTUFBTSxlQUFlO0FBRXJCLE1BQU0sb0JBQW9CLG9CQUFJLFFBQStCO0FBS3RELE1BQU0sd0JBQXlDO0FBQUEsRUFDcEQsT0FBTyxTQUFTO0FBQ2QsVUFBTSxXQUFXLFFBQVEsV0FBVztBQUVwQyxXQUFPO0FBQUEsTUFDTCxRQUFRLE1BQVk7QUFDbEIsY0FBTSxV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
|
|
268
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9saW50ZXJzL2VzbGludC1ydWxlcy9uby11bnJlc29sdmVkLWpzZG9jLWxpbmsudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAZmlsZVxuICpcbiAqIEVTTGludCBydWxlOiBuby11bnJlc29sdmVkLWpzZG9jLWxpbmtcbiAqXG4gKiBSZXBvcnRzIGEgSlNEb2MgYGxpbmtgLCBgbGlua2NvZGVgIG9yIGBsaW5rcGxhaW5gIGlubGluZSB0YWcgd2hvc2UgdGFyZ2V0IG5vIGxvbmdlciByZXNvbHZlcyB0byBhIHN5bWJvbC5cbiAqXG4gKiBBIHJlbmFtZSBsZWF2ZXMgYHtAbGluayBPbGROYW1lfWAgYmVoaW5kIGFuZCBub3RoaW5nIGVsc2UgcmVwb3J0cyBpdDogYGpzZG9jL25vLXVuZGVmaW5lZC10eXBlc2AgZG9lcyBub3QgcmVzb2x2ZVxuICogbGluayB0YXJnZXRzLCBUU0RvYyBjaGVja3Mgb25seSB0aGUgdGFnIHN5bnRheCwgYW5kIGB0c2NgIHBhcnNlcyBKU0RvYyBsaW5rcyB3aXRob3V0IGV2ZXIgZGlhZ25vc2luZyB0aGVtLiBTbyBhIGRlYWRcbiAqIGxpbmsgc3Vydml2ZXMgdW50aWwgc29tZWJvZHkgaGFwcGVucyB0byBjbGljayBpdC5cbiAqXG4gKiBBIHRhcmdldCByZXNvbHZlcyB3aGVuIGFueSBvZiB0aGVzZSBmaW5kcyBpdCwgdHJpZWQgaW4gb3JkZXI6XG4gKlxuICogMS4gVGhlIHR5cGUgY2hlY2tlciwgYXQgdGhlIGNvbW1lbnQncyBvd24gbG9jYXRpb24sIGV4YWN0bHkgYXMgZWRpdG9yIGdvLXRvLWRlZmluaXRpb24gZG9lcyDigJQgc28gZXZlcnl0aGluZyBpblxuICogICAgc2NvcGUgdGhlcmUgcmVzb2x2ZXM6IHR5cGUgcGFyYW1ldGVycywgcGFyYW1ldGVycywgaW1wb3J0cywgYW5kIHRoZSBET00gLyBFUyBnbG9iYWxzLlxuICogMi4gQSBkZWNsYXJhdGlvbiBhbnl3aGVyZSBpbiB0aGUgc2FtZSBmaWxlIOKAlCBhIGZ1bmN0aW9uIG5lc3RlZCBpbiBhbm90aGVyLCBhIHByaXZhdGUgbWV0aG9kIOKAlCB3aGljaCBpcyBvdXQgb2ZcbiAqICAgIHNjb3BlIGF0IGEgYCpQYXJhbXNgIGludGVyZmFjZSBuYW1pbmcgaXQsIHlldCBpcyBleGFjdGx5IHdoYXQgYSByZW5hbWUgb2YgaXQgd291bGQgYnJlYWsuXG4gKiAzLiBUaGUgZXhwb3J0cyBvZiBhbnkgbW9kdWxlIGluIHRoZSBwcm9ncmFtLCBieSBuYW1lLiBBIGNvbW1lbnQgcm91dGluZWx5IG5hbWVzIGEgdHlwZSBpdHMgZmlsZSBuZXZlciBpbXBvcnRzIChhblxuICogICAgaW50ZWdyYXRpb24gdGVzdCBuYW1pbmcgdGhlIGNsYXNzIGl0IGRyaXZlcyB0aHJvdWdoIGBldmFsSW5PYnNpZGlhbmAsIGEgcmVtYXJrIG5hbWluZyBhbiBPYnNpZGlhbiBBUEkpLCBhbmQgdGhlXG4gKiAgICBBUEkgZG9jcyBnZW5lcmF0b3IgcmVzb2x2ZXMgc3VjaCBhIG5hbWUgbGlicmFyeS13aWRlIHRvby4gVGhpcyBrZWVwcyB0aGUgcnVsZSBhYm91dCBERUFEIGxpbmtzIHJhdGhlciB0aGFuXG4gKiAgICBhYm91dCBpbXBvcnRzOiBhIHJlbmFtZWQgb3IgcmVtb3ZlZCBkZWNsYXJhdGlvbiBpcyBleHBvcnRlZCBieSBubyBtb2R1bGUsIHNvIGl0IGlzIHN0aWxsIHJlcG9ydGVkLlxuICogNC4gQSBtb2R1bGUgbmFtZWQgYnkgaXRzIHNwZWNpZmllciBvciBpdHMgcGF0aCwgaW4gYm90aCBUU0RvYyBmb3JtczogYG9ic2lkaWFuI0V2ZW50cyNvbmAgKHRoZSBwYWNrYWdlIGFzIHRoZSBmaXJzdFxuICogICAgc2VnbWVudCkgYW5kIGBlcnJvciFlcnJvclRvU3RyaW5nYCAvIGBvYnNpZGlhbi9jb21wb25lbnRzL3BsdWdpbi1nYXRlLWNvbXBvbmVudCFQbHVnaW5Db25mbGljdFNldmVyaXR5Lldhcm5gXG4gKiAgICAoYSBtb2R1bGUgcGF0aCwgZW5kaW5nIHdpdGggYCFgKSDigJQgcGx1cyBUeXBlU2NyaXB0J3Mgb3duIGBpbXBvcnQoJy4vbW9kdWxlLnRzJykuTWVtYmVyYC4gQSBwYXRoIG1hdGNoZXMgYW55XG4gKiAgICBzb3VyY2UgZmlsZSBpbiB0aGUgcHJvZ3JhbSB3aG9zZSBwYXRoIGVuZHMgd2l0aCBpdC5cbiAqXG4gKiBBZnRlciB0aGUgZmlyc3Qgc2VnbWVudCwgZWFjaCBmdXJ0aGVyIGAuYCAvIGAjYCBzZWdtZW50IGlzIGxvb2tlZCB1cCBhcyBhIG1lbWJlcjogYSBuYW1lc3BhY2Ugb3IgbW9kdWxlIGV4cG9ydCwgYVxuICogc3RhdGljIG9yIGluc3RhbmNlIG1lbWJlciwgb3IgYSBwcm9wZXJ0eSBvZiB0aGUgcHJldmlvdXMgbWVtYmVyJ3MgdHlwZSDigJQgc28gYEFwcC52YXVsdC5hZGFwdGVyYCByZXNvbHZlcy5cbiAqXG4gKiBBIGxpbmsgdGhhdCBpcyBub3QgYSBjb2RlIHJlZmVyZW5jZSBpcyBza2lwcGVkOiBhIFVSTCAoYHtAbGluayBodHRwczovL2V4YW1wbGUuY29tfWApIGFuZCBhIEpTRG9jIG5hbWVwYXRoXG4gKiAoYHtAbGluayBtb2R1bGU6Zm9vfWApIGJvdGggcGFyc2UgYXMgYSBuYW1lIGZvbGxvd2VkIGJ5IHRleHQgc3RhcnRpbmcgd2l0aCBgOmAsIGFuZCBhIGxpbmsgd2l0aCBubyBuYW1lIGhhc1xuICogbm90aGluZyB0byByZXNvbHZlLlxuICovXG5pbXBvcnQgdHlwZSB7XG4gIFBhcnNlclNlcnZpY2VzV2l0aFR5cGVJbmZvcm1hdGlvbixcbiAgVFNFU1RyZWVcbn0gZnJvbSAnQHR5cGVzY3JpcHQtZXNsaW50L3V0aWxzJztcbmltcG9ydCB0eXBlIHsgUnVsZSB9IGZyb20gJ2VzbGludCc7XG5pbXBvcnQgdHlwZSB7XG4gIENsYXNzRGVjbGFyYXRpb24sXG4gIEVudGl0eU5hbWUsXG4gIEVudW1EZWNsYXJhdGlvbixcbiAgRnVuY3Rpb25EZWNsYXJhdGlvbixcbiAgR2V0QWNjZXNzb3JEZWNsYXJhdGlvbixcbiAgSWRlbnRpZmllcixcbiAgSW50ZXJmYWNlRGVjbGFyYXRpb24sXG4gIEpTRG9jTGluayxcbiAgSlNEb2NMaW5rQ29kZSxcbiAgSlNEb2NMaW5rUGxhaW4sXG4gIEpTRG9jTWVtYmVyTmFtZSxcbiAgTWV0aG9kRGVjbGFyYXRpb24sXG4gIE1ldGhvZFNpZ25hdHVyZSxcbiAgTW9kdWxlRGVjbGFyYXRpb24sXG4gIE5vZGUsXG4gIFByb2dyYW0sXG4gIFByb3BlcnR5RGVjbGFyYXRpb24sXG4gIFByb3BlcnR5U2lnbmF0dXJlLFxuICBTZXRBY2Nlc3NvckRlY2xhcmF0aW9uLFxuICBTeW1ib2wgYXMgVHNTeW1ib2wsXG4gIFR5cGVBbGlhc0RlY2xhcmF0aW9uLFxuICBUeXBlQ2hlY2tlcixcbiAgVmFyaWFibGVEZWNsYXJhdGlvblxufSBmcm9tICd0eXBlc2NyaXB0JztcblxuaW1wb3J0IHtcbiAgZXNjYXBlTGVhZGluZ1VuZGVyc2NvcmVzLFxuICBmb3JFYWNoQ2hpbGQsXG4gIGdldEpTRG9jQ29tbWVudHNBbmRUYWdzLFxuICBpc0NsYXNzRGVjbGFyYXRpb24sXG4gIGlzRW51bURlY2xhcmF0aW9uLFxuICBpc0Z1bmN0aW9uRGVjbGFyYXRpb24sXG4gIGlzR2V0QWNjZXNzb3JEZWNsYXJhdGlvbixcbiAgaXNJZGVudGlmaWVyLFxuICBpc0ludGVyZmFjZURlY2xhcmF0aW9uLFxuICBpc0pTRG9jTGluayxcbiAgaXNKU0RvY0xpbmtDb2RlLFxuICBpc0pTRG9jTGlua1BsYWluLFxuICBpc0pTRG9jTWVtYmVyTmFtZSxcbiAgaXNNZXRob2REZWNsYXJhdGlvbixcbiAgaXNNZXRob2RTaWduYXR1cmUsXG4gIGlzTW9kdWxlRGVjbGFyYXRpb24sXG4gIGlzUHJvcGVydHlEZWNsYXJhdGlvbixcbiAgaXNQcm9wZXJ0eVNpZ25hdHVyZSxcbiAgaXNTZXRBY2Nlc3NvckRlY2xhcmF0aW9uLFxuICBpc1R5cGVBbGlhc0RlY2xhcmF0aW9uLFxuICBpc1ZhcmlhYmxlRGVjbGFyYXRpb24sXG4gIHJlc29sdmVNb2R1bGVOYW1lLFxuICBTeW1ib2xGbGFncyxcbiAgc3lzXG59IGZyb20gJ3R5cGVzY3JpcHQnO1xuXG5pbXBvcnQgeyB0b1RTRVNUcmVlTm9kZSB9IGZyb20gJy4vdHMtZXN0cmVlLW5vZGUudHMnO1xuXG4vKipcbiAqIE1lc3NhZ2UgSUQgcmVwb3J0ZWQgd2hlbiBhIEpTRG9jIGxpbmsgdGFyZ2V0IGRvZXMgbm90IHJlc29sdmUgdG8gYSBzeW1ib2wuXG4gKi9cbmV4cG9ydCBjb25zdCBNRVNTQUdFX0lEID0gJ25vVW5yZXNvbHZlZEpzZG9jTGluayc7XG5cbmludGVyZmFjZSBJc1Jlc29sdmVkTmFtZVBhcmFtcyB7XG4gIHJlYWRvbmx5IGNoZWNrZXI6IFR5cGVDaGVja2VyO1xuICByZWFkb25seSBjb250YWluaW5nRmlsZU5hbWU6IHN0cmluZztcbiAgcmVhZG9ubHkgbG9jYWxEZWNsYXJhdGlvbk5hbWVzQnlOYW1lOiBSZWFkb25seU1hcDxzdHJpbmcsIHJlYWRvbmx5IElkZW50aWZpZXJbXT47XG4gIHJlYWRvbmx5IG5hbWU6IEVudGl0eU5hbWUgfCBKU0RvY01lbWJlck5hbWU7XG4gIHJlYWRvbmx5IHByb2dyYW06IFByb2dyYW07XG59XG5cbnR5cGUgSlNEb2NMaW5rTGlrZSA9IEpTRG9jTGluayB8IEpTRG9jTGlua0NvZGUgfCBKU0RvY0xpbmtQbGFpbjtcblxudHlwZSBMb2NhbERlY2xhcmF0aW9uID1cbiAgfCBDbGFzc0RlY2xhcmF0aW9uXG4gIHwgRW51bURlY2xhcmF0aW9uXG4gIHwgRnVuY3Rpb25EZWNsYXJhdGlvblxuICB8IEdldEFjY2Vzc29yRGVjbGFyYXRpb25cbiAgfCBJbnRlcmZhY2VEZWNsYXJhdGlvblxuICB8IE1ldGhvZERlY2xhcmF0aW9uXG4gIHwgTWV0aG9kU2lnbmF0dXJlXG4gIHwgTW9kdWxlRGVjbGFyYXRpb25cbiAgfCBQcm9wZXJ0eURlY2xhcmF0aW9uXG4gIHwgUHJvcGVydHlTaWduYXR1cmVcbiAgfCBTZXRBY2Nlc3NvckRlY2xhcmF0aW9uXG4gIHwgVHlwZUFsaWFzRGVjbGFyYXRpb25cbiAgfCBWYXJpYWJsZURlY2xhcmF0aW9uO1xuXG5pbnRlcmZhY2UgUHJvZ3JhbUluZGV4IHtcbiAgcmVhZG9ubHkgZXhwb3J0c0J5TmFtZTogTWFwPHN0cmluZywgVHNTeW1ib2xbXT47XG4gIHJlYWRvbmx5IG1vZHVsZXNCeVBhdGg6IE1hcDxzdHJpbmcsIFRzU3ltYm9sPjtcbn1cblxuY29uc3QgTU9EVUxFX1BBVEhfUkVHX0VYUCA9IC9eKD88bW9kdWxlUGF0aD5bXlxccyF8fV0qKSEoPzxtZW1iZXJQYXRoPltcXHckLiNdKykvO1xuY29uc3QgSU1QT1JUX1RZUEVfUkVHX0VYUCA9IC9eaW1wb3J0XFwoXFxzKig/PHF1b3RlPlsnXCJdKSg/PG1vZHVsZVBhdGg+W14nXCJdKylcXGs8cXVvdGU+XFxzKlxcKVxcLig/PG1lbWJlclBhdGg+W1xcdyQuI10rKS87XG5jb25zdCBSRUxBVElWRV9QQVRIX1BSRUZJWF9SRUdfRVhQID0gL14oPzpcXC5cXC4/XFwvKSsvO1xuY29uc3QgTUVNQkVSX1NFUEFSQVRPUl9SRUdfRVhQID0gL1suI10vO1xuY29uc3QgU09VUkNFX0ZJTEVfRVhURU5TSU9OX1JFR19FWFAgPSAvKD86XFwuZCk/XFwuW2NtXT90c3g/JC87XG5jb25zdCBJTkRFWF9TVUZGSVggPSAnL2luZGV4JztcblxuY29uc3QgcHJvZ3JhbUluZGV4Q2FjaGUgPSBuZXcgV2Vha01hcDxQcm9ncmFtLCBQcm9ncmFtSW5kZXg+KCk7XG5cbi8qKlxuICogVGhlIEVTTGludCBydWxlIHRoYXQgcmVwb3J0cyBKU0RvYyBsaW5rcyB3aG9zZSB0YXJnZXQgZG9lcyBub3QgcmVzb2x2ZS5cbiAqL1xuZXhwb3J0IGNvbnN0IG5vVW5yZXNvbHZlZEpzZG9jTGluazogUnVsZS5SdWxlTW9kdWxlID0ge1xuICBjcmVhdGUoY29udGV4dCkge1xuICAgIGNvbnN0IHNlcnZpY2VzID0gY29udGV4dC5zb3VyY2VDb2RlLnBhcnNlclNlcnZpY2VzIGFzIFBhcnNlclNlcnZpY2VzV2l0aFR5cGVJbmZvcm1hdGlvbjtcblxuICAgIHJldHVybiB7XG4gICAgICBQcm9ncmFtKG5vZGUpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgcHJvZ3JhbSA9IHNlcnZpY2VzLnByb2dyYW07XG4gICAgICAgIGNvbnN0IGNoZWNrZXIgPSBwcm9ncmFtLmdldFR5cGVDaGVja2VyKCk7XG4gICAgICAgIGNvbnN0IHRzU291cmNlRmlsZSA9IHNlcnZpY2VzLmVzVHJlZU5vZGVUb1RTTm9kZU1hcC5nZXQodG9UU0VTVHJlZU5vZGUobm9kZSkgYXMgVFNFU1RyZWUuUHJvZ3JhbSk7XG5cbiAgICAgICAgLypcbiAgICAgICAgICogVGhlIHNhbWUgbGluayBpcyByZWFjaGFibGUgbW9yZSB0aGFuIG9uY2U6IGEgcGFyYW1ldGVyIHJldHVybnMgaXRzIG93biBgQHBhcmFtYCB0YWcsIHdoaWNoIGl0cyBmdW5jdGlvbidzXG4gICAgICAgICAqIEpTRG9jIGJsb2NrIGFsc28gY29udGFpbnMuIFNvIGRlZHVwbGljYXRlIG9uIHRoZSBsaW5rIGl0c2VsZiByYXRoZXIgdGhhbiBvbiB0aGUgSlNEb2Mgbm9kZS5cbiAgICAgICAgICovXG4gICAgICAgIGNvbnN0IGxpbmtzID0gbmV3IFNldDxKU0RvY0xpbmtMaWtlPigpO1xuXG4gICAgICAgIC8qXG4gICAgICAgICAqIEEgbGluayBtYXkgbmFtZSBhIGRlY2xhcmF0aW9uIGZ1cnRoZXIgZG93biB0aGUgZmlsZSwgc28gdGhlIHdob2xlIGZpbGUgaXMgd2Fsa2VkIGJlZm9yZSBhbnkgbGluayBpc1xuICAgICAgICAgKiByZXNvbHZlZC5cbiAgICAgICAgICovXG4gICAgICAgIGNvbnN0IGxvY2FsRGVjbGFyYXRpb25OYW1lc0J5TmFtZSA9IG5ldyBNYXA8c3RyaW5nLCBJZGVudGlmaWVyW10+KCk7XG5cbiAgICAgICAgZnVuY3Rpb24gdmlzaXRKc0RvY05vZGUoanNEb2NOb2RlOiBOb2RlKTogdm9pZCB7XG4gICAgICAgICAgaWYgKGlzSlNEb2NMaW5rTGlrZShqc0RvY05vZGUpKSB7XG4gICAgICAgICAgICBsaW5rcy5hZGQoanNEb2NOb2RlKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG4gICAgICAgICAgZm9yRWFjaENoaWxkKGpzRG9jTm9kZSwgdmlzaXRKc0RvY05vZGUpO1xuICAgICAgICB9XG5cbiAgICAgICAgZnVuY3Rpb24gdmlzaXROb2RlKHRzTm9kZTogTm9kZSk6IHZvaWQge1xuICAgICAgICAgIGNvbGxlY3RMb2NhbERlY2xhcmF0aW9uTmFtZSh0c05vZGUsIGxvY2FsRGVjbGFyYXRpb25OYW1lc0J5TmFtZSk7XG4gICAgICAgICAgZm9yIChjb25zdCBqc0RvY05vZGUgb2YgZ2V0SlNEb2NDb21tZW50c0FuZFRhZ3ModHNOb2RlKSkge1xuICAgICAgICAgICAgdmlzaXRKc0RvY05vZGUoanNEb2NOb2RlKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgZm9yRWFjaENoaWxkKHRzTm9kZSwgdmlzaXROb2RlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZ1bmN0aW9uIHJlcG9ydElmVW5yZXNvbHZlZChsaW5rOiBKU0RvY0xpbmtMaWtlKTogdm9pZCB7XG4gICAgICAgICAgaWYgKCFsaW5rLm5hbWUgfHwgbGluay50ZXh0LnN0YXJ0c1dpdGgoJzonKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGNvbnN0IG5hbWVUZXh0ID0gbGluay5uYW1lLmdldFRleHQoKTtcbiAgICAgICAgICBjb25zdCBmdWxsVGFyZ2V0ID0gbmFtZVRleHQgKyBsaW5rLnRleHQ7XG4gICAgICAgICAgY29uc3QgbW9kdWxlTWF0Y2ggPSBJTVBPUlRfVFlQRV9SRUdfRVhQLmV4ZWMoZnVsbFRhcmdldCkgPz8gTU9EVUxFX1BBVEhfUkVHX0VYUC5leGVjKGZ1bGxUYXJnZXQpO1xuICAgICAgICAgIGxldCByZXBvcnRlZE5hbWUgPSBuYW1lVGV4dDtcbiAgICAgICAgICBsZXQgaXNSZXNvbHZlZDogYm9vbGVhbjtcblxuICAgICAgICAgIGlmIChtb2R1bGVNYXRjaD8uZ3JvdXBzKSB7XG4gICAgICAgICAgICB0eXBlIE1vZHVsZVBhdGhNYXRjaEdyb3VwcyA9IFJlYWRvbmx5PFJlY29yZDwnbWVtYmVyUGF0aCcgfCAnbW9kdWxlUGF0aCcsIHN0cmluZz4+O1xuICAgICAgICAgICAgY29uc3QgeyBtZW1iZXJQYXRoLCBtb2R1bGVQYXRoIH0gPSBtb2R1bGVNYXRjaC5ncm91cHMgYXMgTW9kdWxlUGF0aE1hdGNoR3JvdXBzO1xuICAgICAgICAgICAgcmVwb3J0ZWROYW1lID0gbW9kdWxlTWF0Y2hbMF07XG4gICAgICAgICAgICBjb25zdCBtb2R1bGVTeW1ib2wgPSBmaW5kTW9kdWxlKHByb2dyYW0sIGNoZWNrZXIsIG1vZHVsZVBhdGgsIHRzU291cmNlRmlsZS5maWxlTmFtZSk7XG4gICAgICAgICAgICBpc1Jlc29sdmVkID0gISFyZXNvbHZlTWVtYmVyUGF0aChjaGVja2VyLCBtb2R1bGVTeW1ib2wsIG1lbWJlclBhdGguc3BsaXQoTUVNQkVSX1NFUEFSQVRPUl9SRUdfRVhQKSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlzUmVzb2x2ZWQgPSBpc1Jlc29sdmVkTmFtZSh7XG4gICAgICAgICAgICAgIGNoZWNrZXIsXG4gICAgICAgICAgICAgIGNvbnRhaW5pbmdGaWxlTmFtZTogdHNTb3VyY2VGaWxlLmZpbGVOYW1lLFxuICAgICAgICAgICAgICBsb2NhbERlY2xhcmF0aW9uTmFtZXNCeU5hbWUsXG4gICAgICAgICAgICAgIG5hbWU6IGxpbmsubmFtZSxcbiAgICAgICAgICAgICAgcHJvZ3JhbVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKGlzUmVzb2x2ZWQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb250ZXh0LnJlcG9ydCh7XG4gICAgICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgICAgIG5hbWU6IHJlcG9ydGVkTmFtZVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGxvYzoge1xuICAgICAgICAgICAgICBlbmQ6IGNvbnRleHQuc291cmNlQ29kZS5nZXRMb2NGcm9tSW5kZXgobGluay5uYW1lLmdldEVuZCgpKSxcbiAgICAgICAgICAgICAgc3RhcnQ6IGNvbnRleHQuc291cmNlQ29kZS5nZXRMb2NGcm9tSW5kZXgobGluay5uYW1lLmdldFN0YXJ0KCkpXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbWVzc2FnZUlkOiBNRVNTQUdFX0lEXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICB2aXNpdE5vZGUodHNTb3VyY2VGaWxlKTtcbiAgICAgICAgZm9yIChjb25zdCBsaW5rIG9mIGxpbmtzKSB7XG4gICAgICAgICAgcmVwb3J0SWZVbnJlc29sdmVkKGxpbmspO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfTtcbiAgfSxcbiAgbWV0YToge1xuICAgIGRvY3M6IHtcbiAgICAgIGRlc2NyaXB0aW9uOiAnRGlzYWxsb3cgSlNEb2MgbGluayB0YWdzIHdob3NlIHRhcmdldCBkb2VzIG5vdCByZXNvbHZlIHRvIGEgc3ltYm9sJ1xuICAgIH0sXG4gICAgbWVzc2FnZXM6IHtcbiAgICAgIFtNRVNTQUdFX0lEXTogJ0pTRG9jIGxpbmsgdGFyZ2V0IGB7e25hbWV9fWAgZG9lcyBub3QgcmVzb2x2ZS4gV2FzIGl0IHJlbmFtZWQgb3IgcmVtb3ZlZD8nXG4gICAgfSxcbiAgICBzY2hlbWE6IFtdLFxuICAgIHR5cGU6ICdwcm9ibGVtJ1xuICB9XG59O1xuXG5mdW5jdGlvbiBjb2xsZWN0TG9jYWxEZWNsYXJhdGlvbk5hbWUobm9kZTogTm9kZSwgbG9jYWxEZWNsYXJhdGlvbk5hbWVzQnlOYW1lOiBNYXA8c3RyaW5nLCBJZGVudGlmaWVyW10+KTogdm9pZCB7XG4gIGlmICghaXNMb2NhbERlY2xhcmF0aW9uKG5vZGUpIHx8ICFub2RlLm5hbWUgfHwgIWlzSWRlbnRpZmllcihub2RlLm5hbWUpKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIGNvbnN0IG5hbWVzID0gbG9jYWxEZWNsYXJhdGlvbk5hbWVzQnlOYW1lLmdldChub2RlLm5hbWUudGV4dCkgPz8gW107XG4gIG5hbWVzLnB1c2gobm9kZS5uYW1lKTtcbiAgbG9jYWxEZWNsYXJhdGlvbk5hbWVzQnlOYW1lLnNldChub2RlLm5hbWUudGV4dCwgbmFtZXMpO1xufVxuXG5mdW5jdGlvbiBmaW5kTW9kdWxlKHByb2dyYW06IFByb2dyYW0sIGNoZWNrZXI6IFR5cGVDaGVja2VyLCBzcGVjaWZpZXI6IHN0cmluZywgY29udGFpbmluZ0ZpbGVOYW1lOiBzdHJpbmcpOiBUc1N5bWJvbCB8IHVuZGVmaW5lZCB7XG4gIGNvbnN0IGFtYmllbnRNb2R1bGUgPSBnZXRQcm9ncmFtSW5kZXgocHJvZ3JhbSwgY2hlY2tlcikubW9kdWxlc0J5UGF0aC5nZXQoc3BlY2lmaWVyKTtcbiAgaWYgKGFtYmllbnRNb2R1bGUpIHtcbiAgICByZXR1cm4gYW1iaWVudE1vZHVsZTtcbiAgfVxuXG4gIGNvbnN0IHJlc29sdmVkRmlsZU5hbWUgPSByZXNvbHZlTW9kdWxlTmFtZShzcGVjaWZpZXIsIGNvbnRhaW5pbmdGaWxlTmFtZSwgcHJvZ3JhbS5nZXRDb21waWxlck9wdGlvbnMoKSwgc3lzKS5yZXNvbHZlZE1vZHVsZT8ucmVzb2x2ZWRGaWxlTmFtZTtcbiAgY29uc3QgcmVzb2x2ZWRTb3VyY2VGaWxlID0gcmVzb2x2ZWRGaWxlTmFtZSA9PT0gdW5kZWZpbmVkID8gdW5kZWZpbmVkIDogcHJvZ3JhbS5nZXRTb3VyY2VGaWxlKHJlc29sdmVkRmlsZU5hbWUpO1xuICBjb25zdCByZXNvbHZlZE1vZHVsZSA9IHJlc29sdmVkU291cmNlRmlsZSAmJiBjaGVja2VyLmdldFN5bWJvbEF0TG9jYXRpb24ocmVzb2x2ZWRTb3VyY2VGaWxlKTtcbiAgcmV0dXJuIHJlc29sdmVkTW9kdWxlID8/IGZpbmRNb2R1bGVCeVBhdGhTdWZmaXgocHJvZ3JhbSwgY2hlY2tlciwgc3BlY2lmaWVyKTtcbn1cblxuZnVuY3Rpb24gZmluZE1vZHVsZUJ5UGF0aFN1ZmZpeChwcm9ncmFtOiBQcm9ncmFtLCBjaGVja2VyOiBUeXBlQ2hlY2tlciwgbW9kdWxlUGF0aDogc3RyaW5nKTogVHNTeW1ib2wgfCB1bmRlZmluZWQge1xuICBjb25zdCBub3JtYWxpemVkUGF0aCA9IG1vZHVsZVBhdGgucmVwbGFjZShSRUxBVElWRV9QQVRIX1BSRUZJWF9SRUdfRVhQLCAnJykucmVwbGFjZShTT1VSQ0VfRklMRV9FWFRFTlNJT05fUkVHX0VYUCwgJycpO1xuICBjb25zdCBzdWZmaXhlcyA9IFtgLyR7bm9ybWFsaXplZFBhdGh9YCwgYC8ke25vcm1hbGl6ZWRQYXRofSR7SU5ERVhfU1VGRklYfWBdO1xuICBmb3IgKGNvbnN0IHNvdXJjZUZpbGUgb2YgcHJvZ3JhbS5nZXRTb3VyY2VGaWxlcygpKSB7XG4gICAgY29uc3QgcGF0aFdpdGhvdXRFeHRlbnNpb24gPSBzb3VyY2VGaWxlLmZpbGVOYW1lLnJlcGxhY2UoU09VUkNFX0ZJTEVfRVhURU5TSU9OX1JFR19FWFAsICcnKTtcbiAgICBpZiAoc3VmZml4ZXMuZXZlcnkoKHN1ZmZpeCkgPT4gIXBhdGhXaXRob3V0RXh0ZW5zaW9uLmVuZHNXaXRoKHN1ZmZpeCkpKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgY29uc3QgbW9kdWxlU3ltYm9sID0gY2hlY2tlci5nZXRTeW1ib2xBdExvY2F0aW9uKHNvdXJjZUZpbGUpO1xuICAgIGlmIChtb2R1bGVTeW1ib2wpIHtcbiAgICAgIHJldHVybiBtb2R1bGVTeW1ib2w7XG4gICAgfVxuICB9XG4gIHJldHVybiB1bmRlZmluZWQ7XG59XG5cbmZ1bmN0aW9uIGZsYXR0ZW5OYW1lKG5hbWU6IEVudGl0eU5hbWUgfCBKU0RvY01lbWJlck5hbWUpOiBzdHJpbmdbXSB7XG4gIHJldHVybiBpc0lkZW50aWZpZXIobmFtZSkgPyBbbmFtZS50ZXh0XSA6IFsuLi5mbGF0dGVuTmFtZShuYW1lLmxlZnQpLCBuYW1lLnJpZ2h0LnRleHRdO1xufVxuXG5mdW5jdGlvbiBnZXRNZW1iZXIoY2hlY2tlcjogVHlwZUNoZWNrZXIsICRzeW1ib2w6IFRzU3ltYm9sLCBtZW1iZXJOYW1lOiBzdHJpbmcpOiBUc1N5bWJvbCB8IHVuZGVmaW5lZCB7XG4gIGNvbnN0IGVzY2FwZWROYW1lID0gZXNjYXBlTGVhZGluZ1VuZGVyc2NvcmVzKG1lbWJlck5hbWUpO1xuICBjb25zdCB0YXJnZXQgPSByZXNvbHZlQWxpYXMoY2hlY2tlciwgJHN5bWJvbCk7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1iaXR3aXNlIC0tIEJpdHdpc2UgZmxhZyB0ZXN0IGlzIGlkaW9tYXRpYyBmb3IgdGhlIFR5cGVTY3JpcHQgY29tcGlsZXIgQVBJLlxuICBjb25zdCBtb2R1bGVFeHBvcnQgPSAodGFyZ2V0LmZsYWdzICYgU3ltYm9sRmxhZ3MuTW9kdWxlKSA9PT0gMCA/IHVuZGVmaW5lZCA6IGNoZWNrZXIudHJ5R2V0TWVtYmVySW5Nb2R1bGVFeHBvcnRzKG1lbWJlck5hbWUsIHRhcmdldCk7XG4gIHJldHVybiBtb2R1bGVFeHBvcnRcbiAgICA/PyB0YXJnZXQuZXhwb3J0cz8uZ2V0KGVzY2FwZWROYW1lKVxuICAgID8/IHRhcmdldC5tZW1iZXJzPy5nZXQoZXNjYXBlZE5hbWUpXG4gICAgPz8gY2hlY2tlci5nZXRQcm9wZXJ0eU9mVHlwZShjaGVja2VyLmdldERlY2xhcmVkVHlwZU9mU3ltYm9sKHRhcmdldCksIG1lbWJlck5hbWUpXG4gICAgPz8gY2hlY2tlci5nZXRQcm9wZXJ0eU9mVHlwZShjaGVja2VyLmdldFR5cGVPZlN5bWJvbCh0YXJnZXQpLCBtZW1iZXJOYW1lKTtcbn1cblxuZnVuY3Rpb24gZ2V0UHJvZ3JhbUluZGV4KHByb2dyYW06IFByb2dyYW0sIGNoZWNrZXI6IFR5cGVDaGVja2VyKTogUHJvZ3JhbUluZGV4IHtcbiAgbGV0IGluZGV4ID0gcHJvZ3JhbUluZGV4Q2FjaGUuZ2V0KHByb2dyYW0pO1xuICBpZiAoaW5kZXgpIHtcbiAgICByZXR1cm4gaW5kZXg7XG4gIH1cblxuICBpbmRleCA9IHtcbiAgICBleHBvcnRzQnlOYW1lOiBuZXcgTWFwPHN0cmluZywgVHNTeW1ib2xbXT4oKSxcbiAgICBtb2R1bGVzQnlQYXRoOiBuZXcgTWFwPHN0cmluZywgVHNTeW1ib2w+KClcbiAgfTtcblxuICBjb25zdCBtb2R1bGVTeW1ib2xzOiBUc1N5bWJvbFtdID0gW107XG4gIGZvciAoY29uc3QgYW1iaWVudE1vZHVsZSBvZiBjaGVja2VyLmdldEFtYmllbnRNb2R1bGVzKCkpIHtcbiAgICBpbmRleC5tb2R1bGVzQnlQYXRoLnNldChhbWJpZW50TW9kdWxlLm5hbWUucmVwbGFjZUFsbCgnXCInLCAnJyksIGFtYmllbnRNb2R1bGUpO1xuICAgIG1vZHVsZVN5bWJvbHMucHVzaChhbWJpZW50TW9kdWxlKTtcbiAgfVxuICBmb3IgKGNvbnN0IHNvdXJjZUZpbGUgb2YgcHJvZ3JhbS5nZXRTb3VyY2VGaWxlcygpKSB7XG4gICAgY29uc3QgbW9kdWxlU3ltYm9sID0gY2hlY2tlci5nZXRTeW1ib2xBdExvY2F0aW9uKHNvdXJjZUZpbGUpO1xuICAgIGlmIChtb2R1bGVTeW1ib2wpIHtcbiAgICAgIG1vZHVsZVN5bWJvbHMucHVzaChtb2R1bGVTeW1ib2wpO1xuICAgIH1cbiAgfVxuXG4gIGZvciAoY29uc3QgbW9kdWxlU3ltYm9sIG9mIG1vZHVsZVN5bWJvbHMpIHtcbiAgICBmb3IgKGNvbnN0IGV4cG9ydFN5bWJvbCBvZiBjaGVja2VyLmdldEV4cG9ydHNPZk1vZHVsZShtb2R1bGVTeW1ib2wpKSB7XG4gICAgICBjb25zdCBzeW1ib2xzID0gaW5kZXguZXhwb3J0c0J5TmFtZS5nZXQoZXhwb3J0U3ltYm9sLm5hbWUpID8/IFtdO1xuICAgICAgc3ltYm9scy5wdXNoKGV4cG9ydFN5bWJvbCk7XG4gICAgICBpbmRleC5leHBvcnRzQnlOYW1lLnNldChleHBvcnRTeW1ib2wubmFtZSwgc3ltYm9scyk7XG4gICAgfVxuICB9XG5cbiAgcHJvZ3JhbUluZGV4Q2FjaGUuc2V0KHByb2dyYW0sIGluZGV4KTtcbiAgcmV0dXJuIGluZGV4O1xufVxuXG5mdW5jdGlvbiBpc0pTRG9jTGlua0xpa2Uobm9kZTogTm9kZSk6IG5vZGUgaXMgSlNEb2NMaW5rTGlrZSB7XG4gIHJldHVybiBpc0pTRG9jTGluayhub2RlKSB8fCBpc0pTRG9jTGlua0NvZGUobm9kZSkgfHwgaXNKU0RvY0xpbmtQbGFpbihub2RlKTtcbn1cblxuZnVuY3Rpb24gaXNMb2NhbERlY2xhcmF0aW9uKG5vZGU6IE5vZGUpOiBub2RlIGlzIExvY2FsRGVjbGFyYXRpb24ge1xuICByZXR1cm4gaXNDbGFzc0RlY2xhcmF0aW9uKG5vZGUpXG4gICAgfHwgaXNFbnVtRGVjbGFyYXRpb24obm9kZSlcbiAgICB8fCBpc0Z1bmN0aW9uRGVjbGFyYXRpb24obm9kZSlcbiAgICB8fCBpc0dldEFjY2Vzc29yRGVjbGFyYXRpb24obm9kZSlcbiAgICB8fCBpc0ludGVyZmFjZURlY2xhcmF0aW9uKG5vZGUpXG4gICAgfHwgaXNNZXRob2REZWNsYXJhdGlvbihub2RlKVxuICAgIHx8IGlzTWV0aG9kU2lnbmF0dXJlKG5vZGUpXG4gICAgfHwgaXNNb2R1bGVEZWNsYXJhdGlvbihub2RlKVxuICAgIHx8IGlzUHJvcGVydHlEZWNsYXJhdGlvbihub2RlKVxuICAgIHx8IGlzUHJvcGVydHlTaWduYXR1cmUobm9kZSlcbiAgICB8fCBpc1NldEFjY2Vzc29yRGVjbGFyYXRpb24obm9kZSlcbiAgICB8fCBpc1R5cGVBbGlhc0RlY2xhcmF0aW9uKG5vZGUpXG4gICAgfHwgaXNWYXJpYWJsZURlY2xhcmF0aW9uKG5vZGUpO1xufVxuXG5mdW5jdGlvbiBpc1Jlc29sdmVkTmFtZShwYXJhbXM6IElzUmVzb2x2ZWROYW1lUGFyYW1zKTogYm9vbGVhbiB7XG4gIGNvbnN0IHtcbiAgICBjaGVja2VyLFxuICAgIGNvbnRhaW5pbmdGaWxlTmFtZSxcbiAgICBsb2NhbERlY2xhcmF0aW9uTmFtZXNCeU5hbWUsXG4gICAgbmFtZSxcbiAgICBwcm9ncmFtXG4gIH0gPSBwYXJhbXM7XG5cbiAgaWYgKGNoZWNrZXIuZ2V0U3ltYm9sQXRMb2NhdGlvbihuYW1lKSkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgLy8gYEZvbyNiYXJgIGlzIGEgYEpTRG9jTWVtYmVyTmFtZWAsIHdoaWNoIHRoZSBjaGVja2VyIHJlc29sdmVzIG9ubHkgdGhyb3VnaCBpdHMgcmlnaHQtaGFuZCBtZW1iZXIuXG4gIGlmIChpc0pTRG9jTWVtYmVyTmFtZShuYW1lKSAmJiBjaGVja2VyLmdldFN5bWJvbEF0TG9jYXRpb24obmFtZS5yaWdodCkpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGNvbnN0IFtyb290TmFtZSA9ICcnLCAuLi5tZW1iZXJOYW1lc10gPSBmbGF0dGVuTmFtZShuYW1lKTtcbiAgY29uc3QgaW5kZXggPSBnZXRQcm9ncmFtSW5kZXgocHJvZ3JhbSwgY2hlY2tlcik7XG4gIGNvbnN0IGxvY2FsUm9vdHMgPSAobG9jYWxEZWNsYXJhdGlvbk5hbWVzQnlOYW1lLmdldChyb290TmFtZSkgPz8gW10pLm1hcCgoZGVjbGFyYXRpb25OYW1lKSA9PiBjaGVja2VyLmdldFN5bWJvbEF0TG9jYXRpb24oZGVjbGFyYXRpb25OYW1lKSk7XG4gIGNvbnN0IHJvb3RzID0gWy4uLmxvY2FsUm9vdHMsIC4uLmluZGV4LmV4cG9ydHNCeU5hbWUuZ2V0KHJvb3ROYW1lKSA/PyBbXSwgZmluZE1vZHVsZShwcm9ncmFtLCBjaGVja2VyLCByb290TmFtZSwgY29udGFpbmluZ0ZpbGVOYW1lKV07XG5cbiAgcmV0dXJuIHJvb3RzLnNvbWUoKHJvb3QpID0+ICEhcmVzb2x2ZU1lbWJlclBhdGgoY2hlY2tlciwgcm9vdCwgbWVtYmVyTmFtZXMpKTtcbn1cblxuZnVuY3Rpb24gcmVzb2x2ZUFsaWFzKGNoZWNrZXI6IFR5cGVDaGVja2VyLCAkc3ltYm9sOiBUc1N5bWJvbCk6IFRzU3ltYm9sIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWJpdHdpc2UgLS0gQml0d2lzZSBmbGFnIHRlc3QgaXMgaWRpb21hdGljIGZvciB0aGUgVHlwZVNjcmlwdCBjb21waWxlciBBUEkuXG4gIHJldHVybiAoJHN5bWJvbC5mbGFncyAmIFN5bWJvbEZsYWdzLkFsaWFzKSA9PT0gMCA/ICRzeW1ib2wgOiBjaGVja2VyLmdldEFsaWFzZWRTeW1ib2woJHN5bWJvbCk7XG59XG5cbmZ1bmN0aW9uIHJlc29sdmVNZW1iZXJQYXRoKGNoZWNrZXI6IFR5cGVDaGVja2VyLCByb290OiBUc1N5bWJvbCB8IHVuZGVmaW5lZCwgbWVtYmVyTmFtZXM6IHJlYWRvbmx5IHN0cmluZ1tdKTogVHNTeW1ib2wgfCB1bmRlZmluZWQge1xuICBsZXQgY3VycmVudDogVHNTeW1ib2wgfCB1bmRlZmluZWQgPSByb290O1xuICBmb3IgKGNvbnN0IG1lbWJlck5hbWUgb2YgbWVtYmVyTmFtZXMpIHtcbiAgICBpZiAoIWN1cnJlbnQpIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIGN1cnJlbnQgPSBnZXRNZW1iZXIoY2hlY2tlciwgY3VycmVudCwgbWVtYmVyTmFtZSk7XG4gIH1cbiAgcmV0dXJuIGN1cnJlbnQ7XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBZ0VBLHdCQXlCTztBQUVQLDRCQUErQjtBQUt4QixNQUFNLGFBQWE7QUFnQzFCLE1BQU0sc0JBQXNCO0FBQzVCLE1BQU0sc0JBQXNCO0FBQzVCLE1BQU0sK0JBQStCO0FBQ3JDLE1BQU0sMkJBQTJCO0FBQ2pDLE1BQU0sZ0NBQWdDO0FBQ3RDLE1BQU0sZUFBZTtBQUVyQixNQUFNLG9CQUFvQixvQkFBSSxRQUErQjtBQUt0RCxNQUFNLHdCQUF5QztBQUFBLEVBQ3BELE9BQU8sU0FBUztBQUNkLFVBQU0sV0FBVyxRQUFRLFdBQVc7QUFFcEMsV0FBTztBQUFBLE1BQ0wsUUFBUSxNQUFZO0FB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
|