@mnaoumov/typescript-dev-toolkit 3.13.0 → 4.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/bundlers/esbuild-impl/preprocess-plugin.cjs +1 -1
- package/dist/lib/cjs/bundlers/esbuild-impl/preprocess-plugin.d.cts +1 -1
- package/dist/lib/cjs/docs-site/api-doc-link-rendering.cjs +1 -1
- package/dist/lib/cjs/docs-site/api-doc-settings.cjs +1 -1
- package/dist/lib/cjs/docs-site/api-doc-types.cjs +1 -1
- package/dist/lib/cjs/docs-site/api-doc-types.d.cts +57 -57
- package/dist/lib/cjs/docs-site/link-check.cjs +1 -1
- package/dist/lib/cjs/docs-site/link-check.d.cts +8 -8
- package/dist/lib/cjs/docs-site/og-images.cjs +1 -1
- package/dist/lib/cjs/docs-site/satteri-github-alerts.cjs +1 -1
- package/dist/lib/cjs/docs-site/unrendered-alerts.cjs +1 -1
- package/dist/lib/cjs/docs-site/unrendered-alerts.d.cts +2 -2
- package/dist/lib/cjs/linters/eslint-agnostic-core-boundary.cjs +1 -1
- package/dist/lib/cjs/linters/eslint-agnostic-core-boundary.d.cts +2 -2
- package/dist/lib/cjs/linters/eslint-config.cjs +2 -2
- package/dist/lib/cjs/linters/eslint-no-restricted-syntax.cjs +1 -1
- package/dist/lib/cjs/linters/eslint-no-restricted-syntax.d.cts +2 -2
- package/dist/lib/cjs/linters/eslint-rules/in-house-plugin.cjs +3 -3
- package/dist/lib/cjs/linters/eslint-rules/index.cjs +4 -4
- package/dist/lib/cjs/linters/eslint-rules/index.d.cts +1 -1
- package/dist/lib/cjs/linters/eslint-rules/no-unused-params-members.cjs +1 -1
- package/dist/lib/cjs/linters/eslint-rules/no-used-underscore-variables.cjs +1 -1
- package/dist/lib/cjs/linters/eslint-rules/readonly-interface-members.cjs +68 -0
- package/dist/lib/cjs/linters/eslint-rules/readonly-interface-members.d.cts +18 -0
- package/dist/lib/cjs/linters/eslint-rules/require-method-template.cjs +1 -1
- package/dist/lib/cjs/linters/eslint-rules/require-super-call.cjs +1 -1
- package/dist/lib/cjs/linters/eslint-types/@types/@eslint-community__eslint-plugin-eslint-comments__configs.d.cts +1 -1
- package/dist/lib/cjs/linters/markdownlint-types/@types/markdownlint-cli2-config-schema.d.cts +279 -279
- package/dist/lib/cjs/linters/over-exposure.cjs +1 -1
- package/dist/lib/cjs/linters/over-exposure.d.cts +6 -6
- package/dist/lib/cjs/npm.cjs +1 -1
- package/dist/lib/cjs/npm.d.cts +1 -1
- package/dist/lib/cjs/upstream-sync.cjs +1 -1
- package/dist/lib/cjs/upstream-sync.d.cts +31 -31
- package/dist/lib/esm/bundlers/esbuild-impl/preprocess-plugin.d.mts +1 -1
- package/dist/lib/esm/bundlers/esbuild-impl/preprocess-plugin.mjs +1 -1
- package/dist/lib/esm/docs-site/api-doc-link-rendering.mjs +1 -1
- package/dist/lib/esm/docs-site/api-doc-settings.mjs +1 -1
- package/dist/lib/esm/docs-site/api-doc-types.d.mts +57 -57
- package/dist/lib/esm/docs-site/link-check.d.mts +8 -8
- package/dist/lib/esm/docs-site/link-check.mjs +1 -1
- package/dist/lib/esm/docs-site/og-images.mjs +1 -1
- package/dist/lib/esm/docs-site/satteri-github-alerts.mjs +1 -1
- package/dist/lib/esm/docs-site/unrendered-alerts.d.mts +2 -2
- package/dist/lib/esm/docs-site/unrendered-alerts.mjs +1 -1
- package/dist/lib/esm/linters/eslint-agnostic-core-boundary.d.mts +2 -2
- package/dist/lib/esm/linters/eslint-agnostic-core-boundary.mjs +1 -1
- package/dist/lib/esm/linters/eslint-config.mjs +2 -2
- package/dist/lib/esm/linters/eslint-no-restricted-syntax.d.mts +2 -2
- package/dist/lib/esm/linters/eslint-no-restricted-syntax.mjs +1 -1
- package/dist/lib/esm/linters/eslint-rules/in-house-plugin.mjs +3 -3
- package/dist/lib/esm/linters/eslint-rules/index.d.mts +1 -1
- package/dist/lib/esm/linters/eslint-rules/index.mjs +3 -3
- package/dist/lib/esm/linters/eslint-rules/no-unused-params-members.mjs +1 -1
- package/dist/lib/esm/linters/eslint-rules/no-used-underscore-variables.mjs +1 -1
- package/dist/lib/esm/linters/eslint-rules/readonly-interface-members.d.mts +18 -0
- package/dist/lib/esm/linters/eslint-rules/readonly-interface-members.mjs +43 -0
- package/dist/lib/esm/linters/eslint-rules/require-method-template.mjs +1 -1
- package/dist/lib/esm/linters/eslint-rules/require-super-call.mjs +1 -1
- package/dist/lib/esm/linters/eslint-types/@types/@eslint-community__eslint-plugin-eslint-comments__configs.d.mts +1 -1
- package/dist/lib/esm/linters/markdownlint-types/@types/markdownlint-cli2-config-schema.d.mts +279 -279
- package/dist/lib/esm/linters/over-exposure.d.mts +6 -6
- package/dist/lib/esm/linters/over-exposure.mjs +1 -1
- package/dist/lib/esm/npm.d.mts +1 -1
- package/dist/lib/esm/npm.mjs +1 -1
- package/dist/lib/esm/upstream-sync.d.mts +31 -31
- package/dist/lib/esm/upstream-sync.mjs +1 -1
- package/linters/eslint-rules/readonly-interface-members/package.json +6 -0
- package/package.json +3 -3
- package/dist/lib/cjs/linters/eslint-rules/readonly-params-options-result-members.cjs +0 -103
- package/dist/lib/cjs/linters/eslint-rules/readonly-params-options-result-members.d.cts +0 -20
- package/dist/lib/esm/linters/eslint-rules/readonly-params-options-result-members.d.mts +0 -20
- package/dist/lib/esm/linters/eslint-rules/readonly-params-options-result-members.mjs +0 -78
- package/linters/eslint-rules/readonly-params-options-result-members/package.json +0 -6
|
@@ -310,4 +310,4 @@ ${calls.join("\n")}
|
|
|
310
310
|
makePreprocessBanner,
|
|
311
311
|
preprocessPlugin
|
|
312
312
|
});
|
|
313
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9idW5kbGVycy9lc2J1aWxkLWltcGwvcHJlcHJvY2Vzcy1wbHVnaW4udHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAZmlsZVxuICpcbiAqIFRoaXMgbW9kdWxlIGRlZmluZXMgYSBjdXN0b20gZXNidWlsZCBwbHVnaW4gdGhhdCBwcmVwcm9jZXNzZXMgSmF2YVNjcmlwdCBhbmQgVHlwZVNjcmlwdCBmaWxlcyBmb3IgYW55IGJ1aWxkIHRhcmdldC5cbiAqXG4gKiBAcmVtYXJrc1xuICogV2UgY2Fubm90IHVzZSBgLmAgaW5zdGVhZCBvZiBgKGRvdClgIGluIHRoZSBhYm92ZSBkZXNjcmlwdGlvbiBiZWNhdXNlIHRoZSBmaWxlIGl0c2VsZiBpcyBwcmVwcm9jZXNzZWQgd2l0aCB0aGUgc2FtZSBydWxlLlxuICpcbiAqIGBpbml0Q2pzYCwgYGluaXRFc21gIGFuZCB0aGUgc2hpbXMgdGhleSBjYWxsIGFyZSBzdHJpbmdpZmllZCB3aXRoIGBTdHJpbmcoZm4pYCBhbmQgaW5qZWN0ZWQgaW50byBldmVyeVxuICogYnVpbHQgYnVuZGxlIGFzIGFuIGVzYnVpbGQgYmFubmVyLCBzbyB0aGV5IG11c3QgYmUgcmVhY2hhYmxlIGZyb20gb25lIGFub3RoZXIgYnkgQkFSRSBpZGVudGlmaWVyLiBBbiB1bmJ1bmRsZWRcbiAqIGJ1aWxkIChgYnVuZGxlOiBmYWxzZWAsIG9uZSBvdXRwdXQgcGVyIHNvdXJjZSkgZ2V0cyBubyBiYW5uZXI6IGVhY2ggZW1pdHRlZCBtb2R1bGUgZ2V0cyBhIHByZWFtYmxlIGhvbGRpbmcgb25seSB0aGVcbiAqIHNoaW1zIGl0cyBvd24gY29kZSBuZWVkcywgYW5kIGEgbW9kdWxlIHRoYXQgbmVlZHMgbm9uZSBnZXRzIG5vdGhpbmcuIFRoYXQgaXNcbiAqIHdoeSB0aGV5IGFsbCBsaXZlIGluIHRoaXMgbW9kdWxlOiBlc2J1aWxkIGNvbXBpbGVzIGEgY3Jvc3MtbW9kdWxlIGNhbGwgdG8gYCgwLCBpbXBvcnRfbW9kdWxlLmZuKSjigKYpYCxcbiAqIHdoaWNoIHdvdWxkIG5hbWUgYSBiaW5kaW5nIHRoZSBlbWl0dGVkIGJ1bmRsZSBkb2VzIG5vdCBoYXZlLiBTYW1lLW1vZHVsZSByZWZlcmVuY2VzIHN0YXkgYmFyZSwgYW5kXG4gKiB7QGxpbmsgbWFrZVByZXByb2Nlc3NCYW5uZXJ9IHNlcmlhbGl6ZXMgdGhlIHNoaW1zIGFsb25nc2lkZSB0aGUgYGluaXRgIGZ1bmN0aW9uIHNvIHRoZXkgYXJlIGluIHNjb3BlIHRoZXJlLiBBIHNoaW1cbiAqIHRoYXQgaXMgbm90IHNlcmlhbGl6ZWQgc2lsZW50bHkgZGVncmFkZXMgdG8gd2hhdGV2ZXIgdGhlIGNvbnN1bWVyJ3MgZ2xvYmFsIHNjb3BlIGhvbGRzIHVuZGVyIHRoYXQgbmFtZSDigJQgd2hpY2hcbiAqIGlzIGhvdyBgX19uYW1lYCB1c2VkIHRvIGVuZCB1cCBob2xkaW5nIGB3aW5kb3cubmFtZWAuXG4gKlxuICogQSBjYWxsZXIgdGhhdCBuZWVkcyBtb3JlIGluIHRoZSBiYW5uZXIgKHRoZSBPYnNpZGlhbiBwbHVnaW4gYnVpbGRlciBwYXRjaGVzIGByZXF1aXJlYCkgaGFuZHMgaW5cbiAqIHtAbGluayBQcmVwcm9jZXNzUGx1Z2luT3B0aW9ucy5hZGRpdGlvbmFsQmFubmVySW5pdEZ1bmN0aW9uc30uIEVhY2ggb25lIGlzIHNlcmlhbGl6ZWQgYXMgaXRzIE9XTiBpbW1lZGlhdGVseVxuICogaW52b2tlZCBmdW5jdGlvbiBhZnRlciB0aGUgc2hhcmVkIHNjb3BlLCBzbyBpdCBtdXN0IGJlIHNlbGYtY29udGFpbmVkOiBpdCBjYW5ub3Qgc2VlIHRoZSBzaGltcywgYW5kIGNhbGxpbmcgb25lXG4gKiBmcm9tIGFub3RoZXIgbW9kdWxlIHdvdWxkIGhpdCBleGFjdGx5IHRoZSBjcm9zcy1tb2R1bGUgdHJhcCBhYm92ZS5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7IEdlbmVyaWNPYmplY3QgfSBmcm9tICdAbW5hb3Vtb3YvdHlwZXNjcmlwdC1saWIvdHlwZS1ndWFyZHMnO1xuaW1wb3J0IHR5cGUge1xuICBPdXRwdXRGaWxlLFxuICBQbHVnaW5cbn0gZnJvbSAnZXNidWlsZCc7XG5pbXBvcnQgdHlwZSB7IHBhdGhUb0ZpbGVVUkwgfSBmcm9tICdub2RlOnVybCc7XG5pbXBvcnQgdHlwZSB7XG4gIElkZW50aWZpZXIsXG4gIE5vZGVcbn0gZnJvbSAndHlwZXNjcmlwdCc7XG5cbmltcG9ydCB7XG4gIEZ1bmN0aW9uSGFuZGxpbmdNb2RlLFxuICB0b0pzb25cbn0gZnJvbSAnQG1uYW91bW92L3R5cGVzY3JpcHQtbGliL29iamVjdC11dGlscyc7XG5pbXBvcnQge1xuICBtYWtlVmFsaWRWYXJpYWJsZU5hbWUsXG4gIHJlcGxhY2VBbGxcbn0gZnJvbSAnQG1uYW91bW92L3R5cGVzY3JpcHQtbGliL3N0cmluZyc7XG5pbXBvcnQgeyBCdWZmZXIgfSBmcm9tICdub2RlOmJ1ZmZlcic7XG5pbXBvcnQgeyByZWFkRmlsZSB9IGZyb20gJ25vZGU6ZnMvcHJvbWlzZXMnO1xuaW1wb3J0IHtcbiAgY3JlYXRlU291cmNlRmlsZSxcbiAgZm9yRWFjaENoaWxkLFxuICBpc0JpbmRpbmdFbGVtZW50LFxuICBpc0NhbGxFeHByZXNzaW9uLFxuICBpc0NsYXNzRGVjbGFyYXRpb24sXG4gIGlzRXhwb3J0RGVjbGFyYXRpb24sXG4gIGlzRnVuY3Rpb25EZWNsYXJhdGlvbixcbiAgaXNHZXRBY2Nlc3NvckRlY2xhcmF0aW9uLFxuICBpc0lkZW50aWZpZXIsXG4gIGlzSW1wb3J0Q2xhdXNlLFxuICBpc0ltcG9ydERlY2xhcmF0aW9uLFxuICBpc0ltcG9ydFNwZWNpZmllcixcbiAgaXNNZXRob2REZWNsYXJhdGlvbixcbiAgaXNOYW1lc3BhY2VJbXBvcnQsXG4gIGlzUGFyYW1ldGVyLFxuICBpc1Byb3BlcnR5QWNjZXNzRXhwcmVzc2lvbixcbiAgaXNQcm9wZXJ0eUFzc2lnbm1lbnQsXG4gIGlzUHJvcGVydHlEZWNsYXJhdGlvbixcbiAgaXNTZXRBY2Nlc3NvckRlY2xhcmF0aW9uLFxuICBpc1N0cmluZ0xpdGVyYWwsXG4gIGlzVmFyaWFibGVEZWNsYXJhdGlvbixcbiAgU2NyaXB0S2luZCxcbiAgU2NyaXB0VGFyZ2V0LFxuICBTeW50YXhLaW5kXG59IGZyb20gJ3R5cGVzY3JpcHQnO1xuXG5jb25zdCBESVNQT1NFX1NZTUJPTF9OQU1FUyA9IG5ldyBTZXQoWydhc3luY0Rpc3Bvc2UnLCAnZGlzcG9zZSddKTtcbmNvbnN0IElOTElORV9TT1VSQ0VfTUFQX1BSRUZJWCA9ICcvLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247YmFzZTY0LCc7XG5jb25zdCBKU19PVVRQVVRfUkVHX0VYUCA9IC9cXC5bY21dP2pzJC87XG4vLyBFc2J1aWxkJ3MgaGVscGVyIGJlaGluZCBhIGxvd2VyZWQgYHVzaW5nYCwgd2hpY2ggbG9va3MgdXAgYFN5bWJvbC5kaXNwb3NlYCBieSBuYW1lLlxuY29uc3QgS05PV05fU1lNQk9MX0hFTFBFUl9OQU1FID0gJ19fa25vd25TeW1ib2wnO1xuLy8gQSByZWxhdGl2ZSBvciBhYnNvbHV0ZSBwYXRoLCBvciBhIGBub2RlOmAgYnVpbHQtaW46IGFueXRoaW5nIGVsc2UgbmFtZXMgYSBwYWNrYWdlLlxuY29uc3QgTk9OX0JBUkVfU1BFQ0lGSUVSX1JFR19FWFAgPSAvXig/OlxcLnxcXC98bm9kZTopLztcblxuZW51bSBJZGVudGlmaWVyVXNhZ2Uge1xuICBCaW5kaW5nID0gJ2JpbmRpbmcnLFxuICBNZW1iZXIgPSAnbWVtYmVyJyxcbiAgUmVhZCA9ICdyZWFkJ1xufVxuXG4vKipcbiAqIE9wdGlvbnMgZm9yIHtAbGluayBtYWtlUHJlcHJvY2Vzc0Jhbm5lcn0uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTWFrZVByZXByb2Nlc3NCYW5uZXJPcHRpb25zIHtcbiAgLyoqXG4gICAqIFNlbGYtY29udGFpbmVkIGZ1bmN0aW9ucyBzZXJpYWxpemVkIGFmdGVyIHRoZSBzaGFyZWQgc2hpbXMsIGVhY2ggaW52b2tlZCBvbmNlLlxuICAgKi9cbiAgcmVhZG9ubHkgYWRkaXRpb25hbEJhbm5lckluaXRGdW5jdGlvbnM/OiByZWFkb25seSAoKCkgPT4gdm9pZClbXTtcblxuICAvKipcbiAgICogV2hldGhlciB0aGUgYnVpbGQgaXMgZm9yIGFuIEVTTSBmb3JtYXQuXG4gICAqL1xuICByZWFkb25seSBpc0VzbT86IGJvb2xlYW47XG59XG5cbi8qKlxuICogT3B0aW9ucyBmb3Ige0BsaW5rIHByZXByb2Nlc3NQbHVnaW59LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFByZXByb2Nlc3NQbHVnaW5PcHRpb25zIHtcbiAgLyoqXG4gICAqIFNlbGYtY29udGFpbmVkIGZ1bmN0aW9ucyBzZXJpYWxpemVkIGludG8gdGhlIGJhbm5lciBhZnRlciB0aGUgc2hhcmVkIHNoaW1zLCBlYWNoIGludm9rZWQgb25jZS5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogRWFjaCBmdW5jdGlvbiBpcyBlbWl0dGVkIGFzIGAoJHtTdHJpbmcoZm4pfSkoKTtgLCBzbyBpdCBtYXkgcmVmZXJlbmNlIG9ubHkgZ2xvYmFscyBhbmQgd2hhdCBpdCBkZWNsYXJlcyBpdHNlbGYuXG4gICAqL1xuICByZWFkb25seSBhZGRpdGlvbmFsQmFubmVySW5pdEZ1bmN0aW9ucz86IHJlYWRvbmx5ICgoKSA9PiB2b2lkKVtdO1xuXG4gIC8qKlxuICAgKiBUaGUgc2VsZi1jb250YWluZWQgZnVuY3Rpb24gd2hvc2UgcmVzdWx0IHJlcGxhY2VzIGBpbXBvcnQoZG90KW1ldGEoZG90KXVybGAgaW4gYSBDb21tb25KUyBidWlsZC4gU2VyaWFsaXplZCBpbnRvXG4gICAqIGV2ZXJ5IGZpbGUgdGhhdCByZWFkcyBpdC5cbiAgICpcbiAgICogQGRlZmF1bHQgQSBmdW5jdGlvbiByZXR1cm5pbmcgdGhlIGZpbGUgVVJMIG9mIGBfX2ZpbGVuYW1lYCwgb3IgYGxvY2F0aW9uLmhyZWZgIHdoZXJlIHRoZXJlIGlzIG5vIGBfX2ZpbGVuYW1lYC5cbiAgICovXG4gIHJlYWRvbmx5IGNqc0ltcG9ydE1ldGFVcmxQcm92aWRlcj86ICgpID0+IHN0cmluZztcblxuICAvKipcbiAgICogV2hldGhlciB0aGUgYnVpbGQgaXMgZm9yIGFuIEVTTSBmb3JtYXQuXG4gICAqL1xuICByZWFkb25seSBpc0VzbT86IGJvb2xlYW47XG59XG5cbmludGVyZmFjZSBBZGRNb2R1bGVQcmVhbWJsZXNQYXJhbXMge1xuICByZWFkb25seSBhZGRpdGlvbmFsQmFubmVySW5pdEZ1bmN0aW9uczogcmVhZG9ubHkgKCgpID0+IHZvaWQpW107XG4gIHJlYWRvbmx5IGxlYWRpbmdCYW5uZXI6IHN0cmluZztcbiAgcmVhZG9ubHkgb3V0cHV0RmlsZXM6IHJlYWRvbmx5IE91dHB1dEZpbGVbXTtcbn1cblxuLyoqXG4gKiBBIGJyb3dzZXItZmxhdm9yZWQgc3RhbmQtaW4gZm9yIE5vZGUncyBgcHJvY2Vzc2AgZ2xvYmFsLlxuICovXG5pbnRlcmZhY2UgQnJvd3NlclByb2Nlc3MgZXh0ZW5kcyBQYXJ0aWFsPE5vZGVKUy5Qcm9jZXNzPiB7XG4gIC8qKlxuICAgKiBNYXJrcyB0aGUgcHJvY2VzcyBhcyBhIGJyb3dzZXIgb25lLiBUaGUgYnVuZGxlZCBgZGVidWdgIHBhY2thZ2Ugc2VsZWN0cyBpdHMgYnJvd3NlciBlbnRyeSBwb2ludCBvbiBpdC5cbiAgICovXG4gIGJyb3dzZXI6IGJvb2xlYW47XG59XG5cbi8qKlxuICogVGhlIHNsaWNlIG9mIHRoZSBgU3ltYm9sYCBjb25zdHJ1Y3RvciB7QGxpbmsgZW5zdXJlRGlzcG9zZVN5bWJvbHN9IHJlYWRzIGFuZCB3cml0ZXMsIHdpdGggdGhlIHR3byBkaXNwb3NlXG4gKiBzeW1ib2xzIG9wdGlvbmFsIGJlY2F1c2UgYW4gZW5naW5lIHdpdGhvdXQgRXhwbGljaXQgUmVzb3VyY2UgTWFuYWdlbWVudCBkb2VzIG5vdCBoYXZlIHRoZW0uXG4gKi9cbmludGVyZmFjZSBEaXNwb3NlU3ltYm9sSG9zdCB7XG4gIGFzeW5jRGlzcG9zZT86IHN5bWJvbDtcbiAgZGlzcG9zZT86IHN5bWJvbDtcbiAgZm9yOiAoa2V5OiBzdHJpbmcpID0+IHN5bWJvbDtcbn1cblxuaW50ZXJmYWNlIEVzbU1vZHVsZSB7XG4gIF9fZXNNb2R1bGU6IGJvb2xlYW47XG4gIGRlZmF1bHQ6IHVua25vd247XG59XG5cbi8qKlxuICogVGhlIHNsaWNlIG9mIGEgYnJvd3NlciBnbG9iYWwge0BsaW5rIGdldENqc0ltcG9ydE1ldGFVcmx9IHJlYWRzLCBvcHRpb25hbCBiZWNhdXNlIGEgbm9uLWJyb3dzZXIgaG9zdCBoYXMgbm9uZS5cbiAqL1xuaW50ZXJmYWNlIEluc2VydFByZWFtYmxlUGFyYW1zIHtcbiAgcmVhZG9ubHkgY29kZTogc3RyaW5nO1xuICByZWFkb25seSBsZWFkaW5nQmFubmVyOiBzdHJpbmc7XG4gIHJlYWRvbmx5IHByZWFtYmxlOiBzdHJpbmc7XG59XG5cbmludGVyZmFjZSBMb2NhdGlvbkhvc3Qge1xuICBsb2NhdGlvbj86IFBhZ2VMb2NhdGlvbjtcbn1cblxuaW50ZXJmYWNlIE1vZHVsZVNoaW1OZWVkcyB7XG4gIHJlYWRvbmx5IGlzQnJvd3NlclByb2Nlc3NOZWVkZWQ6IGJvb2xlYW47XG4gIHJlYWRvbmx5IGlzRGlzcG9zZVN5bWJvbHNOZWVkZWQ6IGJvb2xlYW47XG4gIHJlYWRvbmx5IGlzTmFtZU5lZWRlZDogYm9vbGVhbjtcbn1cblxuaW50ZXJmYWNlIFBhZ2VMb2NhdGlvbiB7XG4gIGhyZWY6IHN0cmluZztcbn1cblxuaW50ZXJmYWNlIFNvdXJjZU1hcFdpdGhNYXBwaW5ncyB7XG4gIG1hcHBpbmdzOiBzdHJpbmc7XG59XG5cbmludGVyZmFjZSBVcmxNb2R1bGUge1xuICBwYXRoVG9GaWxlVVJMOiB0eXBlb2YgcGF0aFRvRmlsZVVSTDtcbn1cblxuLyoqXG4gKiBFbnN1cmVzIHRoZSBidW5kbGUgcnVucyBhZ2FpbnN0IGEgYHByb2Nlc3NgIGdsb2JhbCB0aGF0IGJyb3dzZXItdGFyZ2V0aW5nIHBhY2thZ2VzIHJlY29nbml6ZS5cbiAqXG4gKiBAcmVtYXJrc1xuICogU2VyaWFsaXplZCBpbnRvIHRoZSBlbWl0dGVkIGJhbm5lciwgc28gaXQgbmV2ZXIgcnVucyBpbiB0aGUgYnVpbGRlciBwcm9jZXNzIOKAlCBidXQgaXQgaXMgYW4gb3JkaW5hcnlcbiAqIGZ1bmN0aW9uIGhlcmUsIHNvIGl0IGlzIHVuaXQtdGVzdGVkIGRpcmVjdGx5IHJhdGhlciB0aGFuIGJ5IGV2YWx1YXRpbmcgdGhlIGJhbm5lciB0ZXh0LlxuICpcbiAqIEZpbGxzIGluIHRoZSBrZXlzIE1JU1NJTkcgZnJvbSBhIGhvc3QtcHJvdmlkZWQgYHByb2Nlc3NgIHJhdGhlciB0aGFuIHJlcGxhY2luZyBvciBza2lwcGluZyBpdC4gT2JzaWRpYW5cbiAqIE1vYmlsZSBleHBvc2VzIGEgcGFydGlhbCBgcHJvY2Vzc2AsIGFuZCB0aGUgd2hvbGUtb2JqZWN0IGd1YXJkcyB0aGlzIHJlcGxhY2VkIChgaWYgKGdsb2JhbFRoaXMucHJvY2Vzcykge1xuICogcmV0dXJuOyB9YCAvIGBnbG9iYWxUaGlzUmVjb3JkWydwcm9jZXNzJ10gPz89IOKApmApIHRvb2sgdGhhdCBhcyBcImFscmVhZHkgc2hpbW1lZFwiLCBzbyBgYnJvd3NlcmAgbmV2ZXJcbiAqIGxhbmRlZC4gVGhlIGJ1bmRsZWQgYGRlYnVnYCBwYWNrYWdlIHRoZW4gc2VsZWN0ZWQgaXRzIE5vZGUgZW50cnkgcG9pbnQsIHdoaWNoIGNhbGxzXG4gKiBgcmVxdWlyZSgndXRpbCcpLmRlcHJlY2F0ZSgpYCBhdCBtb2R1bGUgdG9wIGxldmVsLCBhbmQgb24gbW9iaWxlIHRoZSBwYXRjaGVkIGByZXF1aXJlYCByZXR1cm5zIGB7fWAg4oCUIHNvXG4gKiB0aGUgcGx1Z2luIHRocmV3IGJlZm9yZSBpdHMgYG9ubG9hZGAgcmFuLlxuICpcbiAqIEEgcmVhbCBOb2RlIG9yIEVsZWN0cm9uIGBwcm9jZXNzYCBpcyBsZWZ0IGNvbXBsZXRlbHkgdW50b3VjaGVkLiBgcHJvY2Vzcy52ZXJzaW9ucy5ub2RlYCBpcyB0aGUgc2lnbmFsIGZvclxuICogaXQsIGFuZCBpdCBpcyBzZWxmLWNvbnRhaW5lZCwgc28gaXQgYWxzbyBob2xkcyBpbiB0aGUgTm9kZSBDTEkgYnVuZGxlcyB0aGlzIGJhbm5lciBpcyBlbWl0dGVkIGludG8uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBlbnN1cmVCcm93c2VyUHJvY2VzcygpOiB2b2lkIHtcbiAgY29uc3QgYnJvd3NlclByb2Nlc3M6IEdlbmVyaWNPYmplY3Q8QnJvd3NlclByb2Nlc3M+ID0ge1xuICAgIGJyb3dzZXI6IHRydWUsXG4gICAgY3dkKCkge1xuICAgICAgcmV0dXJuICcvJztcbiAgICB9LFxuICAgIGVudjoge30sXG4gICAgcGxhdGZvcm06ICdhbmRyb2lkJ1xuICB9O1xuXG4gIGNvbnN0IGV4aXN0aW5nUHJvY2VzcyA9IGdsb2JhbFRoaXMucHJvY2VzcyBhcyBQYXJ0aWFsPE5vZGVKUy5Qcm9jZXNzPiB8IHVuZGVmaW5lZDtcblxuICBpZiAoIWV4aXN0aW5nUHJvY2Vzcykge1xuICAgIGdsb2JhbFRoaXMucHJvY2VzcyA9IGJyb3dzZXJQcm9jZXNzIGFzIE5vZGVKUy5Qcm9jZXNzO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGlmIChleGlzdGluZ1Byb2Nlc3MudmVyc2lvbnM/Lm5vZGUpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBjb25zdCBleGlzdGluZ1Byb2Nlc3NSZWNvcmQgPSBleGlzdGluZ1Byb2Nlc3MgYXMgR2VuZXJpY09iamVjdDtcblxuICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhicm93c2VyUHJvY2VzcykpIHtcbiAgICBleGlzdGluZ1Byb2Nlc3NSZWNvcmRba2V5XSA/Pz0gdmFsdWU7XG4gIH1cblxuICBleGlzdGluZ1Byb2Nlc3NSZWNvcmRbJ2Jyb3dzZXInXSA9IHRydWU7XG59XG5cbi8qKlxuICogTWFrZXMgYFN5bWJvbC5kaXNwb3NlYCBhbmQgYFN5bWJvbC5hc3luY0Rpc3Bvc2VgIGV4aXN0LCBmYWxsaW5nIGJhY2sgdG8gdGhlIHJlZ2lzdHJ5IHN5bWJvbHMgZXNidWlsZCdzXG4gKiBgdXNpbmdgIGhlbHBlcnMgbG9vayB1cC5cbiAqXG4gKiBAcGFyYW0gc3ltYm9sQ29uc3RydWN0b3IgLSBUaGUgYFN5bWJvbGAgY29uc3RydWN0b3IgdG8gcGF0Y2guIERlZmF1bHRzIHRvIHRoZSBhbWJpZW50IG9uZTsgdGhlIHBhcmFtZXRlclxuICogZXhpc3RzIHNvIGEgdGVzdCBjYW4gaGFuZCBpbiBhbiBlbmdpbmUgdGhhdCBsYWNrcyB0aGUgd2VsbC1rbm93biBzeW1ib2xzLlxuICpcbiAqIEByZW1hcmtzXG4gKiBTZXJpYWxpemVkIGludG8gdGhlIGVtaXR0ZWQgYmFubmVyLiBBIGRpc3Bvc2FibGUgZGVjbGFyZXMgaXRzIG1ldGhvZCB1bmRlciB0aGUgTElURVJBTCBrZXlcbiAqIGBbU3ltYm9sLmRpc3Bvc2VdYCwgd2hpbGUgZXNidWlsZCBsb3dlcnMgZXZlcnkgYHVzaW5nYCB0byBhIGxvb2t1cCB0aHJvdWdoIGBfX2tub3duU3ltYm9sKCdkaXNwb3NlJylgLFxuICogd2hpY2ggZmFsbHMgYmFjayB0byBgU3ltYm9sLmZvcignU3ltYm9sLmRpc3Bvc2UnKWAgd2hlbiB0aGUgZW5naW5lIGhhcyBubyB3ZWxsLWtub3duIHN5bWJvbC4gT24gc3VjaCBhblxuICogZW5naW5lIHRoZSBsaXRlcmFsIGtleSBldmFsdWF0ZXMgdG8gYHVuZGVmaW5lZGAsIHRoZSBtZXRob2QgbGFuZHMgdW5kZXIgdGhlIHN0cmluZyBgXCJ1bmRlZmluZWRcImAsIGFuZFxuICogZXZlcnkgYHVzaW5nYCBvZiBpdCB0aHJvd3MgYE9iamVjdCBub3QgZGlzcG9zYWJsZWAuIEZpbGxpbmcgdGhlIHdlbGwta25vd24gc2xvdCB3aXRoIHRoYXQgc2FtZSByZWdpc3RyeVxuICogc3ltYm9sIG1ha2VzIGJvdGggc2lkZXMgbmFtZSBvbmUga2V5IG9uIGV2ZXJ5IGVuZ2luZS4gQSBob3N0IHRoYXQgYWxyZWFkeSBoYXMgdGhlIHN5bWJvbCBpcyBsZWZ0XG4gKiB1bnRvdWNoZWQ6IGA/Pz1gIG5ldmVyIHJlYWNoZXMgdGhlIGFzc2lnbm1lbnQsIHdoaWNoIHRoZSBob3N0J3Mgbm9uLXdyaXRhYmxlIHByb3BlcnR5IHdvdWxkIHJlZnVzZS5cbiAqXG4gKiBUaGUgZGVmYXVsdCBuYW1lcyBgU3ltYm9sYCBiYXJlIG9uIHB1cnBvc2U6IGl0IGV4aXN0cyBvbiBldmVyeSBlbmdpbmUgdGhpcyBydW5zIG9uLCBhbmQgYSBiYXJlIHJlZmVyZW5jZVxuICogcmVzb2x2ZXMgYWdhaW5zdCB3aGF0ZXZlciBzY29wZSB0aGUgYmFubmVyIGlzIGV2YWx1YXRlZCBpbiwgZXhhY3RseSBhcyB0aGUgYnVuZGxlJ3Mgb3duXG4gKiBgW1N5bWJvbC5kaXNwb3NlXWAga2V5cyBkby5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGVuc3VyZURpc3Bvc2VTeW1ib2xzKHN5bWJvbENvbnN0cnVjdG9yOiBEaXNwb3NlU3ltYm9sSG9zdCA9IFN5bWJvbCk6IHZvaWQge1xuICBzeW1ib2xDb25zdHJ1Y3Rvci5hc3luY0Rpc3Bvc2UgPz89IHN5bWJvbENvbnN0cnVjdG9yLmZvcignU3ltYm9sLmFzeW5jRGlzcG9zZScpO1xuICBzeW1ib2xDb25zdHJ1Y3Rvci5kaXNwb3NlID8/PSBzeW1ib2xDb25zdHJ1Y3Rvci5mb3IoJ1N5bWJvbC5kaXNwb3NlJyk7XG59XG5cbi8qKlxuICogUmV0dXJucyBpdHMgYXJndW1lbnQgdW5jaGFuZ2VkLlxuICpcbiAqIEBwYXJhbSAkdW5rbm93biAtIFRoZSB2YWx1ZSB0byByZXR1cm4uXG4gKiBAcmV0dXJucyBUaGUgdmFsdWUgcGFzc2VkIGluLlxuICpcbiAqIEByZW1hcmtzXG4gKiBTZXJpYWxpemVkIGludG8gdGhlIGVtaXR0ZWQgYmFubmVyLCB3aGVyZSBpdCBzdGFuZHMgaW4gZm9yIGVzYnVpbGQncyBgX19uYW1lYCBoZWxwZXIg4oCUIHdoaWNoIG5hbWVzIGFcbiAqIGZ1bmN0aW9uIGFuZCByZXR1cm5zIGl0IOKAlCBmb3IgYnVuZGxlcyB0aGF0IHJlZmVyZW5jZSB0aGUgaGVscGVyIHdpdGhvdXQgZW1pdHRpbmcgdGhlaXIgb3duLlxuICovXG5leHBvcnQgZnVuY3Rpb24ga2VlcE5hbWUoJHVua25vd246IHVua25vd24pOiB1bmtub3duIHtcbiAgcmV0dXJuICR1bmtub3duO1xufVxuXG4vKipcbiAqIEJ1aWxkcyB0aGUgYmFubmVyIGluamVjdGVkIGF0IHRoZSB0b3Agb2YgZXZlcnkgZW1pdHRlZCBidW5kbGUuXG4gKlxuICogYFN0cmluZyhmbilgIGNhcHR1cmVzIG9ubHkgdGhlIGZ1bmN0aW9uJ3Mgb3duIGJvZHksIHNvIGV2ZXJ5IHNoaW0gdGhlIGBpbml0YCBmdW5jdGlvbiBjYWxscyBoYXMgdG8gYmVcbiAqIHNlcmlhbGl6ZWQgbmV4dCB0byBpdCBhbmQgd3JhcHBlZCBpbiBvbmUgc2hhcmVkIHNjb3BlOyBvdGhlcndpc2UgdGhlIGNhbGwgaXQgbWFrZXMgcmVzb2x2ZXMgYWdhaW5zdCB0aGVcbiAqIGNvbnN1bWVyJ3MgZ2xvYmFsIHNjb3BlIGF0IHJ1bnRpbWUuIFNlZSB0aGlzIGZpbGUncyBgQGZpbGVgIHJlbWFya3MuXG4gKlxuICogQHBhcmFtIG9wdGlvbnMgLSBUaGUgYmFubmVyIG9wdGlvbnMuXG4gKiBAcmV0dXJucyBUaGUgYmFubmVyIHNvdXJjZSB0byBwcmVwZW5kIHRvIHRoZSBlbWl0dGVkIGJ1bmRsZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1ha2VQcmVwcm9jZXNzQmFubmVyKG9wdGlvbnM6IE1ha2VQcmVwcm9jZXNzQmFubmVyT3B0aW9ucyA9IHt9KTogc3RyaW5nIHtcbiAgY29uc3QgeyBhZGRpdGlvbmFsQmFubmVySW5pdEZ1bmN0aW9ucyA9IFtdLCBpc0VzbSA9IGZhbHNlIH0gPSBvcHRpb25zO1xuICBjb25zdCBzaGltcyA9IGlzRXNtID8gW2Vuc3VyZURpc3Bvc2VTeW1ib2xzLCBlbnN1cmVCcm93c2VyUHJvY2Vzc10gOiBbZW5zdXJlRGlzcG9zZVN5bWJvbHMsIGVuc3VyZUJyb3dzZXJQcm9jZXNzLCBrZWVwTmFtZV07XG4gIGNvbnN0IGluaXQgPSBpc0VzbSA/IGluaXRFc20gOiBpbml0Q2pzO1xuICBjb25zdCBhZGRpdGlvbmFsSW5pdHMgPSBhZGRpdGlvbmFsQmFubmVySW5pdEZ1bmN0aW9ucy5tYXAoKGZ1bmN0aW9uXykgPT4gYCgke1N0cmluZyhmdW5jdGlvbl8pfSkoKTtcXG5gKS5qb2luKCcnKTtcbiAgcmV0dXJuIGBcXG4oZnVuY3Rpb24gKCkge1xcbiR7c2hpbXMubWFwKFN0cmluZykuam9pbignXFxuXFxuJyl9XFxuXFxuKCR7U3RyaW5nKGluaXQpfSkoKTtcXG59KSgpO1xcbiR7YWRkaXRpb25hbEluaXRzfWA7XG59XG5cbi8qIHY4IGlnbm9yZSBzdGFydCAtLSBUaGUgcGx1Z2luJ3Mgc2V0dXAgbmVlZHMgYSBsaXZlIGVzYnVpbGQgY29udGV4dCwgYW5kIHRoZSBmdW5jdGlvbnMgaW4gdGhlIGxhdGVyIGlnbm9yZWQgcmFuZ2VzIGFyZSBzZXJpYWxpemVkIGludG8gdGhlIGVtaXR0ZWQgYmFubmVyIGFuZCBzbyBydW4gaW5zaWRlIHRoZSBidWlsdCBidW5kbGUsIG5ldmVyIGluIHRoaXMgcHJvY2Vzcy4gVGhlIHNoaW1zIGFib3ZlIGFyZSBkZWxpYmVyYXRlbHkgTk9UIGlnbm9yZWQ6IHRoZXkgYXJlIG9yZGluYXJ5IGZ1bmN0aW9ucyBoZXJlIGFuZCBhcmUgdW5pdC10ZXN0ZWQgZGlyZWN0bHksIGFuZCBuZWl0aGVyIGFyZSB0aGUgdW5idW5kbGVkLWJ1aWxkIGhlbHBlcnMsIHdoaWNoIHRoZSB0ZXN0cyBkcml2ZSB0aHJvdWdoIGEgc3R1YiBidWlsZC4gKi9cblxuLyoqXG4gKiBDcmVhdGVzIGFuIGVzYnVpbGQgcGx1Z2luIHRoYXQgcHJlcHJvY2Vzc2VzIEphdmFTY3JpcHQgYW5kIFR5cGVTY3JpcHQgZmlsZXMuXG4gKlxuICogVGhpcyBwbHVnaW4gcGVyZm9ybXMgdGhlIGZvbGxvd2luZyB0YXNrczpcbiAqIC0gUmVwbGFjZXMgaW5zdGFuY2VzIG9mIGBpbXBvcnQoZG90KW1ldGEoZG90KXVybGAgd2l0aCBhIENvbW1vbkpTLWNvbXBhdGlibGUgYF9fZmlsZW5hbWVgIGFsdGVybmF0aXZlLlxuICogLSBNb2RpZmllcyB0aGUgYHNvdXJjZU1hcHBpbmdVUkxgIGNvbW1lbnQgc28gYSB0ZW1wbGF0ZSBsaXRlcmFsIGVuZGluZyBhIGZpbGUgZG9lcyBub3Qgc3dhbGxvdyBpdC5cbiAqIC0gQWRkcyBhIGJhc2ljIGBwcm9jZXNzYCBvYmplY3QgdG8gdGhlIGdsb2JhbCBzY29wZSBpZiBgcHJvY2Vzc2AgaXMgcmVmZXJlbmNlZCBidXQgbm90IGRlZmluZWQuXG4gKiAtIEZpbGxzIGluIGBTeW1ib2wuZGlzcG9zZWAgLyBgU3ltYm9sLmFzeW5jRGlzcG9zZWAgb24gZW5naW5lcyB0aGF0IGxhY2sgdGhlbSwgc28gYHVzaW5nYCB3b3JrcyB0aGVyZS5cbiAqXG4gKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSBwbHVnaW4gb3B0aW9ucy5cbiAqIEByZXR1cm5zIEFuIGVzYnVpbGQgYFBsdWdpbmAgb2JqZWN0IHRoYXQgaGFuZGxlcyB0aGUgcHJlcHJvY2Vzc2luZy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHByZXByb2Nlc3NQbHVnaW4ob3B0aW9uczogUHJlcHJvY2Vzc1BsdWdpbk9wdGlvbnMgPSB7fSk6IFBsdWdpbiB7XG4gIGNvbnN0IHsgYWRkaXRpb25hbEJhbm5lckluaXRGdW5jdGlvbnMgPSBbXSwgY2pzSW1wb3J0TWV0YVVybFByb3ZpZGVyID0gZ2V0Q2pzSW1wb3J0TWV0YVVybCwgaXNFc20gPSBmYWxzZSB9ID0gb3B0aW9ucztcbiAgY29uc3QgcmVwbGFjZW1lbnRzID0gaXNFc21cbiAgICA/IHt9XG4gICAgOiB7XG4gICAgICBbXG4gICAgICAgIHJlcGxhY2VBbGwoe1xuICAgICAgICAgICRzdHJpbmc6ICdpbXBvcnQoZG90KW1ldGEoZG90KXVybCcsXG4gICAgICAgICAgcmVwbGFjZXI6ICcuJyxcbiAgICAgICAgICBzZWFyY2hWYWx1ZTogJyhkb3QpJ1xuICAgICAgICB9KVxuICAgICAgXTogY2pzSW1wb3J0TWV0YVVybFByb3ZpZGVyXG4gICAgfTtcblxuICByZXR1cm4ge1xuICAgIG5hbWU6ICdwcmVwcm9jZXNzJyxcbiAgICBzZXR1cChidWlsZCk6IHZvaWQge1xuICAgICAgYnVpbGQuaW5pdGlhbE9wdGlvbnMuZGVmaW5lID8/PSB7fTtcblxuICAgICAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXMocmVwbGFjZW1lbnRzKSkge1xuICAgICAgICBidWlsZC5pbml0aWFsT3B0aW9ucy5kZWZpbmVba2V5XSA9IGBfXyR7bWFrZVZhbGlkVmFyaWFibGVOYW1lKGtleSl9YDtcbiAgICAgIH1cblxuICAgICAgaWYgKGJ1aWxkLmluaXRpYWxPcHRpb25zLmJ1bmRsZSA9PT0gZmFsc2UpIHtcbiAgICAgICAgLy8gT25lIG91dHB1dCBwZXIgc291cmNlOiBlYWNoIG1vZHVsZSBnZXRzIG9ubHkgdGhlIHNoaW1zIGl0cyBvd24gY29kZSBuZWVkcywgc28gYSBwYWdlIGltcG9ydGluZyBhIHB1cmVcbiAgICAgICAgLy8gbW9kdWxlIG9mIGEgbGlicmFyeSBpcyBsZWZ0IHdpdGggaXRzIGdsb2JhbHMgdW50b3VjaGVkLlxuICAgICAgICBjb25zdCBsZWFkaW5nQmFubmVyID0gYnVpbGQuaW5pdGlhbE9wdGlvbnMuYmFubmVyPy5bJ2pzJ10gPz8gJyc7XG4gICAgICAgIGJ1aWxkLm9uRW5kKChyZXN1bHQpID0+IHtcbiAgICAgICAgICBhZGRNb2R1bGVQcmVhbWJsZXMoeyBhZGRpdGlvbmFsQmFubmVySW5pdEZ1bmN0aW9ucywgbGVhZGluZ0Jhbm5lciwgb3V0cHV0RmlsZXM6IHJlc3VsdC5vdXRwdXRGaWxlcyA/PyBbXSB9KTtcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBidWlsZC5pbml0aWFsT3B0aW9ucy5iYW5uZXIgPz89IHt9O1xuICAgICAgICBidWlsZC5pbml0aWFsT3B0aW9ucy5iYW5uZXJbJ2pzJ10gPz89ICcnO1xuICAgICAgICBidWlsZC5pbml0aWFsT3B0aW9ucy5iYW5uZXJbJ2pzJ10gKz0gbWFrZVByZXByb2Nlc3NCYW5uZXIoeyBhZGRpdGlvbmFsQmFubmVySW5pdEZ1bmN0aW9ucywgaXNFc20gfSk7XG4gICAgICB9XG5cbiAgICAgIGJ1aWxkLm9uTG9hZCh7IGZpbHRlcjogL1xcLig/OmpzfHRzfGNqc3xtanN8Y3RzfG10cykkLyB9LCBhc3luYyAoJGFyZ3VtZW50cykgPT4ge1xuICAgICAgICBsZXQgY29udGVudHMgPSBhd2FpdCByZWFkRmlsZSgkYXJndW1lbnRzLnBhdGgsICd1dGYtOCcpO1xuXG4gICAgICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKHJlcGxhY2VtZW50cykpIHtcbiAgICAgICAgICBjb25zdCB2YXJpYWJsZSA9IGBfXyR7bWFrZVZhbGlkVmFyaWFibGVOYW1lKGtleSl9YDtcbiAgICAgICAgICBpZiAoIWNvbnRlbnRzLmluY2x1ZGVzKGtleSkgfHwgY29udGVudHMuaW5jbHVkZXMoYHZhciAke3ZhcmlhYmxlfWApKSB7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgY29uc3QgdmFsdWVTdHJpbmcgPSB0eXBlb2YgdmFsdWUgPT09ICdmdW5jdGlvbicgPyBgKCR7U3RyaW5nKHZhbHVlKX0pKClgIDogdG9Kc29uKHZhbHVlLCB7IGZ1bmN0aW9uSGFuZGxpbmdNb2RlOiBGdW5jdGlvbkhhbmRsaW5nTW9kZS5GdWxsIH0pO1xuICAgICAgICAgIGNvbnRlbnRzID0gYHZhciAke3ZhcmlhYmxlfSA9IGdsb2JhbFRoaXNbJyR7a2V5fSddID8/ICR7dmFsdWVTdHJpbmd9O1xcbiR7Y29udGVudHN9YDtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEhBQ0s6IFRoZSAkeycnfSBwYXJ0IGlzIHVzZWQgdG8gZW5zdXJlIE9ic2lkaWFuIGxvYWRzIHRoZSBwbHVnaW4gcHJvcGVybHksXG4gICAgICAgIC8vIE90aGVyd2lzZSwgaXQgc3RvcHMgbG9hZGluZyBhZnRlciB0aGUgZmlyc3QgbGluZSBvZiB0aGUgc291cmNlTWFwcGluZ1VSTCBjb21tZW50LlxuXG4gICAgICAgIGNvbnRlbnRzID0gcmVwbGFjZUFsbCh7XG4gICAgICAgICAgJHN0cmluZzogY29udGVudHMsXG4gICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXRlbXBsYXRlLWN1cmx5LWluLXN0cmluZyAtLSBJdCBpcyBpbnRlbnRpb25hbCwgdGhlIHN0cmluZyBsb29rcyBsaWtlIGEgdGVtcGxhdGUgbGl0ZXJhbCwgYnV0IGl0IGlzIG5vdC5cbiAgICAgICAgICByZXBsYWNlcjogJ2BcXG4vLyMke1xcJ1xcJ30gc291cmNlTWFwcGluZ1VSTCcsXG4gICAgICAgICAgc2VhcmNoVmFsdWU6IC9gXFxyP1xcblxcL1xcLyMgc291cmNlTWFwcGluZ1VSTC9nXG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgY29udGVudHMsXG4gICAgICAgICAgbG9hZGVyOiAndHMnXG4gICAgICAgIH07XG4gICAgICB9KTtcbiAgICB9XG4gIH07XG59XG5cbi8qIHY4IGlnbm9yZSBzdG9wICovXG5cbi8qKlxuICogUHJlcGVuZHMgdG8gZWFjaCBlbWl0dGVkIG1vZHVsZSB0aGUgcHJlYW1ibGUgaXRzIG93biBjb2RlIG5lZWRzLCBhbmQgbm90aGluZyB3aGVuIGl0IG5lZWRzIG5vbmUuXG4gKlxuICogQHBhcmFtIHBhcmFtcyAtIFRoZSBlbWl0dGVkIG1vZHVsZXMsIHRoZSBiYW5uZXIgdGhlIGNhbGxlciBhbHJlYWR5IHB1dCBmaXJzdCwgYW5kIHRoZSBjYWxsZXIncyBleHRyYSBpbml0cy5cbiAqL1xuZnVuY3Rpb24gYWRkTW9kdWxlUHJlYW1ibGVzKHBhcmFtczogQWRkTW9kdWxlUHJlYW1ibGVzUGFyYW1zKTogdm9pZCB7XG4gIGNvbnN0IHsgYWRkaXRpb25hbEJhbm5lckluaXRGdW5jdGlvbnMsIGxlYWRpbmdCYW5uZXIsIG91dHB1dEZpbGVzIH0gPSBwYXJhbXM7XG4gIGZvciAoY29uc3Qgb3V0cHV0RmlsZSBvZiBvdXRwdXRGaWxlcykge1xuICAgIGlmICghSlNfT1VUUFVUX1JFR19FWFAudGVzdChvdXRwdXRGaWxlLnBhdGgpKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBjb25zdCBjb2RlID0gb3V0cHV0RmlsZS50ZXh0O1xuICAgIGNvbnN0IHByZWFtYmxlID0gbWFrZU1vZHVsZVByZWFtYmxlKGdldE1vZHVsZVNoaW1OZWVkcyhjb2RlKSwgYWRkaXRpb25hbEJhbm5lckluaXRGdW5jdGlvbnMpO1xuICAgIGlmIChwcmVhbWJsZSA9PT0gJycpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIG91dHB1dEZpbGUuY29udGVudHMgPSBuZXcgVGV4dEVuY29kZXIoKS5lbmNvZGUoaW5zZXJ0UHJlYW1ibGUoeyBjb2RlLCBsZWFkaW5nQmFubmVyLCBwcmVhbWJsZSB9KSk7XG4gIH1cbn1cblxuLyogdjggaWdub3JlIHN0YXJ0IC0tIFNlcmlhbGl6ZWQgaW50byB0aGUgZW1pdHRlZCBtb2R1bGUsIHNlZSBhYm92ZS4gKi9cbmZ1bmN0aW9uIGdldENqc0ltcG9ydE1ldGFVcmwoKTogc3RyaW5nIHtcbiAgaWYgKHR5cGVvZiBfX2ZpbGVuYW1lID09PSAnc3RyaW5nJykge1xuICAgIGNvbnN0IGxvY2FsUmVxdWlyZSA9IHJlcXVpcmU7XG4gICAgY29uc3QgdXJsID0gbG9jYWxSZXF1aXJlKCdub2RlOnVybCcpIGFzIFVybE1vZHVsZTtcbiAgICBpZiAodHlwZW9mIHVybC5wYXRoVG9GaWxlVVJMID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICByZXR1cm4gdXJsLnBhdGhUb0ZpbGVVUkwoX19maWxlbmFtZSkuaHJlZjtcbiAgICB9XG4gIH1cblxuICAvLyBGYWxsYmFjayB0byB0aGUgcGFnZSBVUkwsIG9yIGFuIGVtcHR5IHN0cmluZyBpZiB0aGUgZW52aXJvbm1lbnQgaXMgdW5rbm93bi5cbiAgcmV0dXJuIChnbG9iYWxUaGlzIGFzIExvY2F0aW9uSG9zdCkubG9jYXRpb24/LmhyZWYgPz8gJyc7XG59XG4vKiB2OCBpZ25vcmUgc3RvcCAqL1xuXG5mdW5jdGlvbiBnZXRJZGVudGlmaWVyVXNhZ2Uobm9kZTogSWRlbnRpZmllcik6IElkZW50aWZpZXJVc2FnZSB7XG4gIGNvbnN0IHsgcGFyZW50IH0gPSBub2RlO1xuICBpZiAoXG4gICAgKGlzUHJvcGVydHlBY2Nlc3NFeHByZXNzaW9uKHBhcmVudCkgfHwgaXNQcm9wZXJ0eUFzc2lnbm1lbnQocGFyZW50KSB8fCBpc01ldGhvZERlY2xhcmF0aW9uKHBhcmVudCkgfHwgaXNQcm9wZXJ0eURlY2xhcmF0aW9uKHBhcmVudClcbiAgICAgIHx8IGlzR2V0QWNjZXNzb3JEZWNsYXJhdGlvbihwYXJlbnQpIHx8IGlzU2V0QWNjZXNzb3JEZWNsYXJhdGlvbihwYXJlbnQpKVxuICAgICYmIHBhcmVudC5uYW1lID09PSBub2RlXG4gICkge1xuICAgIHJldHVybiBJZGVudGlmaWVyVXNhZ2UuTWVtYmVyO1xuICB9XG5cbiAgcmV0dXJuIChpc1ZhcmlhYmxlRGVjbGFyYXRpb24ocGFyZW50KSB8fCBpc0Z1bmN0aW9uRGVjbGFyYXRpb24ocGFyZW50KSB8fCBpc0NsYXNzRGVjbGFyYXRpb24ocGFyZW50KSB8fCBpc1BhcmFtZXRlcihwYXJlbnQpIHx8IGlzQmluZGluZ0VsZW1lbnQocGFyZW50KVxuICAgICAgfHwgaXNJbXBvcnRDbGF1c2UocGFyZW50KSB8fCBpc0ltcG9ydFNwZWNpZmllcihwYXJlbnQpIHx8IGlzTmFtZXNwYWNlSW1wb3J0KHBhcmVudCkpXG4gICAgICAmJiBwYXJlbnQubmFtZSA9PT0gbm9kZVxuICAgID8gSWRlbnRpZmllclVzYWdlLkJpbmRpbmdcbiAgICA6IElkZW50aWZpZXJVc2FnZS5SZWFkO1xufVxuXG4vKipcbiAqIFJlYWRzIHdoaWNoIHNoaW1zIGFuIGVtaXR0ZWQgbW9kdWxlIG5lZWRzIGZyb20gaXRzIGNvZGUuXG4gKlxuICogLSBgZW5zdXJlQnJvd3NlclByb2Nlc3NgOiBpdCByZWFkcyBhIGBwcm9jZXNzYCBpdCBkb2VzIG5vdCBiaW5kIGl0c2VsZiwgb3IgaXQgbG9hZHMgYSBiYXJlIHBhY2thZ2UgdGhhdCBpcyBub3QgYVxuICogICBgbm9kZTpgIGJ1aWx0LWluLiBUaGUgc2Vjb25kIGNhc2UgaXMgdGhlcmUgYmVjYXVzZSBzdWNoIGEgcGFja2FnZSAoYHBhdGgtYnJvd3NlcmlmeWAgcmVhZHMgYHByb2Nlc3MuY3dkKClgKSBjYW5ub3RcbiAqICAgY2FycnkgYSBzaGltIG9mIGl0cyBvd24sIGFuZCBpbiBhbiB1bmJ1bmRsZWQgYnVpbGQgaXRzIGltcG9ydGVyIGlzIHRoZSBvbmx5IG1vZHVsZSB0aGF0IGNhbi5cbiAqIC0gYGVuc3VyZURpc3Bvc2VTeW1ib2xzYDogaXQgbmFtZXMgYFN5bWJvbC5kaXNwb3NlYCBvciBgU3ltYm9sLmFzeW5jRGlzcG9zZWAsIG9yIGhvbGRzIGVzYnVpbGQncyBgX19rbm93blN5bWJvbGBcbiAqICAgaGVscGVyLCB3aGljaCBhIGxvd2VyZWQgYHVzaW5nYCBlbWl0cy5cbiAqIC0gYF9fbmFtZWA6IGl0IHJlYWRzIGEgYF9fbmFtZWAgaXQgZG9lcyBub3QgZGVjbGFyZS5cbiAqXG4gKiBAcGFyYW0gY29kZSAtIFRoZSBlbWl0dGVkIG1vZHVsZS5cbiAqIEByZXR1cm5zIFdoYXQgdGhlIG1vZHVsZSBuZWVkcy5cbiAqL1xuZnVuY3Rpb24gZ2V0TW9kdWxlU2hpbU5lZWRzKGNvZGU6IHN0cmluZyk6IE1vZHVsZVNoaW1OZWVkcyB7XG4gIGNvbnN0IHNvdXJjZUZpbGUgPSBjcmVhdGVTb3VyY2VGaWxlKCdtb2R1bGUuanMnLCBjb2RlLCBTY3JpcHRUYXJnZXQuTGF0ZXN0LCB0cnVlLCBTY3JpcHRLaW5kLkpTKTtcbiAgY29uc3QgYm91bmROYW1lcyA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuICBjb25zdCByZWFkTmFtZXMgPSBuZXcgU2V0PHN0cmluZz4oKTtcbiAgbGV0IGlzQmFyZUltcG9ydEZvdW5kID0gZmFsc2U7XG4gIGxldCBpc0Rpc3Bvc2VTeW1ib2xGb3VuZCA9IGZhbHNlO1xuXG4gIGZ1bmN0aW9uIHZpc2l0KG5vZGU6IE5vZGUpOiB2b2lkIHtcbiAgICBjb25zdCBzcGVjaWZpZXIgPSBnZXRNb2R1bGVTcGVjaWZpZXIobm9kZSk7XG4gICAgaWYgKHNwZWNpZmllciAhPT0gdW5kZWZpbmVkICYmICFOT05fQkFSRV9TUEVDSUZJRVJfUkVHX0VYUC50ZXN0KHNwZWNpZmllcikpIHtcbiAgICAgIGlzQmFyZUltcG9ydEZvdW5kID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZiAoXG4gICAgICBpc1Byb3BlcnR5QWNjZXNzRXhwcmVzc2lvbihub2RlKSAmJiBpc0lkZW50aWZpZXIobm9kZS5leHByZXNzaW9uKSAmJiBub2RlLmV4cHJlc3Npb24udGV4dCA9PT0gJ1N5bWJvbCdcbiAgICAgICYmIERJU1BPU0VfU1lNQk9MX05BTUVTLmhhcyhub2RlLm5hbWUudGV4dClcbiAgICApIHtcbiAgICAgIGlzRGlzcG9zZVN5bWJvbEZvdW5kID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZiAoaXNJZGVudGlmaWVyKG5vZGUpKSB7XG4gICAgICBpZiAobm9kZS50ZXh0ID09PSBLTk9XTl9TWU1CT0xfSEVMUEVSX05BTUUpIHtcbiAgICAgICAgaXNEaXNwb3NlU3ltYm9sRm91bmQgPSB0cnVlO1xuICAgICAgfVxuXG4gICAgICBjb25zdCB1c2FnZSA9IGdldElkZW50aWZpZXJVc2FnZShub2RlKTtcbiAgICAgIGlmICh1c2FnZSA9PT0gSWRlbnRpZmllclVzYWdlLkJpbmRpbmcpIHtcbiAgICAgICAgYm91bmROYW1lcy5hZGQobm9kZS50ZXh0KTtcbiAgICAgIH0gZWxzZSBpZiAodXNhZ2UgPT09IElkZW50aWZpZXJVc2FnZS5SZWFkKSB7XG4gICAgICAgIHJlYWROYW1lcy5hZGQobm9kZS50ZXh0KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmb3JFYWNoQ2hpbGQobm9kZSwgdmlzaXQpO1xuICB9XG4gIHZpc2l0KHNvdXJjZUZpbGUpO1xuXG4gIGZ1bmN0aW9uIGlzRnJlZVJlYWQobmFtZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHJlYWROYW1lcy5oYXMobmFtZSkgJiYgIWJvdW5kTmFtZXMuaGFzKG5hbWUpO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBpc0Jyb3dzZXJQcm9jZXNzTmVlZGVkOiBpc0ZyZWVSZWFkKCdwcm9jZXNzJykgfHwgaXNCYXJlSW1wb3J0Rm91bmQsXG4gICAgaXNEaXNwb3NlU3ltYm9sc05lZWRlZDogaXNEaXNwb3NlU3ltYm9sRm91bmQsXG4gICAgaXNOYW1lTmVlZGVkOiBpc0ZyZWVSZWFkKCdfX25hbWUnKVxuICB9O1xufVxuXG5mdW5jdGlvbiBnZXRNb2R1bGVTcGVjaWZpZXIobm9kZTogTm9kZSk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gIGlmICgoaXNJbXBvcnREZWNsYXJhdGlvbihub2RlKSB8fCBpc0V4cG9ydERlY2xhcmF0aW9uKG5vZGUpKSAmJiBub2RlLm1vZHVsZVNwZWNpZmllciAhPT0gdW5kZWZpbmVkICYmIGlzU3RyaW5nTGl0ZXJhbChub2RlLm1vZHVsZVNwZWNpZmllcikpIHtcbiAgICByZXR1cm4gbm9kZS5tb2R1bGVTcGVjaWZpZXIudGV4dDtcbiAgfVxuXG4gIGlmIChpc0NhbGxFeHByZXNzaW9uKG5vZGUpKSB7XG4gICAgY29uc3QgW2ZpcnN0QXJndW1lbnRdID0gbm9kZS5hcmd1bWVudHM7XG4gICAgY29uc3QgaXNMb2FkZXIgPSBub2RlLmV4cHJlc3Npb24ua2luZCA9PT0gU3ludGF4S2luZC5JbXBvcnRLZXl3b3JkIHx8IChpc0lkZW50aWZpZXIobm9kZS5leHByZXNzaW9uKSAmJiBub2RlLmV4cHJlc3Npb24udGV4dCA9PT0gJ3JlcXVpcmUnKTtcbiAgICBpZiAoaXNMb2FkZXIgJiYgZmlyc3RBcmd1bWVudCAhPT0gdW5kZWZpbmVkICYmIGlzU3RyaW5nTGl0ZXJhbChmaXJzdEFyZ3VtZW50KSkge1xuICAgICAgcmV0dXJuIGZpcnN0QXJndW1lbnQudGV4dDtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gdW5kZWZpbmVkO1xufVxuXG4vKiB2OCBpZ25vcmUgc3RhcnQgLS0gU2VyaWFsaXplZCBpbnRvIHRoZSBlbWl0dGVkIGJhbm5lciwgc2VlIGFib3ZlLiAqL1xuZnVuY3Rpb24gaW5pdENqcygpOiB2b2lkIHtcbiAgY29uc3QgZ2xvYmFsVGhpc1JlY29yZCA9IGdsb2JhbFRoaXMgYXMgR2VuZXJpY09iamVjdDtcbiAgZW5zdXJlRGlzcG9zZVN5bWJvbHMoKTtcbiAgZ2xvYmFsVGhpc1JlY29yZFsnX19uYW1lJ10gPz89IGtlZXBOYW1lO1xuICBnbG9iYWxUaGlzUmVjb3JkWydfX2V4dHJhY3REZWZhdWx0J10gPz89IGV4dHJhY3REZWZhdWx0O1xuXG4gIGVuc3VyZUJyb3dzZXJQcm9jZXNzKCk7XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHVuaWNvcm4vY29uc2lzdGVudC1mdW5jdGlvbi1zY29waW5nIC0tIFNlcmlhbGl6ZWQgd2l0aCBpbml0Q2pzIGludG8gdGhlIGJhbm5lcjsgYXQgbW9kdWxlIHNjb3BlIGl0IHdvdWxkIGJlIGxlZnQgb3V0IG9mIGl0LlxuICBmdW5jdGlvbiBleHRyYWN0RGVmYXVsdChtb2R1bGU6IFBhcnRpYWw8RXNtTW9kdWxlPiB8IHVuZGVmaW5lZCk6IHVua25vd24ge1xuICAgIHJldHVybiBtb2R1bGUgJiYgbW9kdWxlLl9fZXNNb2R1bGUgJiYgJ2RlZmF1bHQnIGluIG1vZHVsZSA/IG1vZHVsZS5kZWZhdWx0IDogbW9kdWxlO1xuICB9XG59XG5cbmZ1bmN0aW9uIGluaXRFc20oKTogdm9pZCB7XG4gIGVuc3VyZURpc3Bvc2VTeW1ib2xzKCk7XG4gIGVuc3VyZUJyb3dzZXJQcm9jZXNzKCk7XG59XG4vKiB2OCBpZ25vcmUgc3RvcCAqL1xuXG4vKipcbiAqIEluc2VydHMgdGhlIHByZWFtYmxlIGFmdGVyIHRoZSBjYWxsZXIncyBsZWFkaW5nIGJhbm5lciwgYW5kIHNoaWZ0cyBhbiBpbmxpbmUgc291cmNlIG1hcCBkb3duIGJ5IHRoZSBsaW5lcyBpdCBhZGRzLFxuICogc28gdGhlIG1vZHVsZSdzIG93biBsaW5lcyBrZWVwIG1hcHBpbmcgb250byB0aGVpciBzb3VyY2VzLlxuICpcbiAqIEBwYXJhbSBwYXJhbXMgLSBUaGUgbW9kdWxlLCBpdHMgbGVhZGluZyBiYW5uZXIgYW5kIHRoZSBwcmVhbWJsZS5cbiAqIEByZXR1cm5zIFRoZSBtb2R1bGUgd2l0aCB0aGUgcHJlYW1ibGUgaW4gaXQuXG4gKi9cbmZ1bmN0aW9uIGluc2VydFByZWFtYmxlKHBhcmFtczogSW5zZXJ0UHJlYW1ibGVQYXJhbXMpOiBzdHJpbmcge1xuICBjb25zdCB7IGNvZGUsIGxlYWRpbmdCYW5uZXIsIHByZWFtYmxlIH0gPSBwYXJhbXM7XG4gIGNvbnN0IGluc2VydEF0ID0gbGVhZGluZ0Jhbm5lci5lbmRzV2l0aCgnXFxuJykgJiYgY29kZS5zdGFydHNXaXRoKGxlYWRpbmdCYW5uZXIpID8gbGVhZGluZ0Jhbm5lci5sZW5ndGggOiAwO1xuICBjb25zdCBhZGRlZExpbmVDb3VudCA9IHByZWFtYmxlLnNwbGl0KCdcXG4nKS5sZW5ndGggLSAxO1xuICBsZXQgc2hpZnRlZENvZGUgPSBjb2RlO1xuICBjb25zdCBzb3VyY2VNYXBTdGFydCA9IGNvZGUubGFzdEluZGV4T2YoSU5MSU5FX1NPVVJDRV9NQVBfUFJFRklYKTtcbiAgaWYgKHNvdXJjZU1hcFN0YXJ0ICE9PSAtMSkge1xuICAgIGNvbnN0IGRhdGFTdGFydCA9IHNvdXJjZU1hcFN0YXJ0ICsgSU5MSU5FX1NPVVJDRV9NQVBfUFJFRklYLmxlbmd0aDtcbiAgICBjb25zdCBkYXRhID0gY29kZS5zbGljZShkYXRhU3RhcnQpLnRyaW1FbmQoKTtcbiAgICBjb25zdCBzb3VyY2VNYXAgPSBKU09OLnBhcnNlKEJ1ZmZlci5mcm9tKGRhdGEsICdiYXNlNjQnKS50b1N0cmluZygndXRmLTgnKSkgYXMgU291cmNlTWFwV2l0aE1hcHBpbmdzO1xuICAgIHNvdXJjZU1hcC5tYXBwaW5ncyA9ICc7Jy5yZXBlYXQoYWRkZWRMaW5lQ291bnQpICsgc291cmNlTWFwLm1hcHBpbmdzO1xuICAgIHNoaWZ0ZWRDb2RlID0gY29kZS5zbGljZSgwLCBkYXRhU3RhcnQpICsgQnVmZmVyLmZyb20oSlNPTi5zdHJpbmdpZnkoc291cmNlTWFwKSwgJ3V0Zi04JykudG9TdHJpbmcoJ2Jhc2U2NCcpICsgY29kZS5zbGljZShkYXRhU3RhcnQgKyBkYXRhLmxlbmd0aCk7XG4gIH1cbiAgcmV0dXJuIHNoaWZ0ZWRDb2RlLnNsaWNlKDAsIGluc2VydEF0KSArIHByZWFtYmxlICsgc2hpZnRlZENvZGUuc2xpY2UoaW5zZXJ0QXQpO1xufVxuXG4vKipcbiAqIEJ1aWxkcyB0aGUgcHJlYW1ibGUgb2Ygb25lIHVuYnVuZGxlZCBtb2R1bGU6IHRoZSBzaGltcyBpdCBuZWVkcyBpbiBvbmUgc2hhcmVkIHNjb3BlLCB0aGVuIHRoZSBjYWxsZXIncyBleHRyYSBpbml0cy5cbiAqXG4gKiBAcGFyYW0gbmVlZHMgLSBXaGF0IHRoZSBtb2R1bGUgbmVlZHMuXG4gKiBAcGFyYW0gYWRkaXRpb25hbEJhbm5lckluaXRGdW5jdGlvbnMgLSBUaGUgY2FsbGVyJ3MgZXh0cmEgaW5pdHMsIHdoaWNoIGV2ZXJ5IG1vZHVsZSBnZXRzLlxuICogQHJldHVybnMgVGhlIHByZWFtYmxlLCBlbXB0eSB3aGVuIHRoZSBtb2R1bGUgbmVlZHMgbm90aGluZy5cbiAqL1xuZnVuY3Rpb24gbWFrZU1vZHVsZVByZWFtYmxlKG5lZWRzOiBNb2R1bGVTaGltTmVlZHMsIGFkZGl0aW9uYWxCYW5uZXJJbml0RnVuY3Rpb25zOiByZWFkb25seSAoKCkgPT4gdm9pZClbXSk6IHN0cmluZyB7XG4gIGNvbnN0IHNoaW1zOiAoKC4uLmFyZ3VtZW50c186IG5ldmVyW10pID0+IHVua25vd24pW10gPSBbXTtcbiAgY29uc3QgY2FsbHM6IHN0cmluZ1tdID0gW107XG5cbiAgaWYgKG5lZWRzLmlzRGlzcG9zZVN5bWJvbHNOZWVkZWQpIHtcbiAgICBzaGltcy5wdXNoKGVuc3VyZURpc3Bvc2VTeW1ib2xzKTtcbiAgICBjYWxscy5wdXNoKCdlbnN1cmVEaXNwb3NlU3ltYm9scygpOycpO1xuICB9XG5cbiAgaWYgKG5lZWRzLmlzQnJvd3NlclByb2Nlc3NOZWVkZWQpIHtcbiAgICBzaGltcy5wdXNoKGVuc3VyZUJyb3dzZXJQcm9jZXNzKTtcbiAgICBjYWxscy5wdXNoKCdlbnN1cmVCcm93c2VyUHJvY2VzcygpOycpO1xuICB9XG5cbiAgaWYgKG5lZWRzLmlzTmFtZU5lZWRlZCkge1xuICAgIHNoaW1zLnB1c2goa2VlcE5hbWUpO1xuICAgIGNhbGxzLnB1c2goJ2dsb2JhbFRoaXNbXFwnX19uYW1lXFwnXSA/Pz0ga2VlcE5hbWU7Jyk7XG4gIH1cblxuICBjb25zdCBzaGFyZWRTY29wZSA9IHNoaW1zLmxlbmd0aCA9PT0gMCA/ICcnIDogYChmdW5jdGlvbiAoKSB7XFxuJHtzaGltcy5tYXAoU3RyaW5nKS5qb2luKCdcXG5cXG4nKX1cXG5cXG4ke2NhbGxzLmpvaW4oJ1xcbicpfVxcbn0pKCk7XFxuYDtcbiAgcmV0dXJuIHNoYXJlZFNjb3BlICsgYWRkaXRpb25hbEJhbm5lckluaXRGdW5jdGlvbnMubWFwKChmdW5jdGlvbl8pID0+IGAoJHtTdHJpbmcoZnVuY3Rpb25fKX0pKCk7XFxuYCkuam9pbignJyk7XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBbUNBLDBCQUdPO0FBQ1Asb0JBR087QUFDUCx5QkFBdUI7QUFDdkIsc0JBQXlCO0FBQ3pCLHdCQXlCTztBQUVQLE1BQU0sdUJBQXVCLG9CQUFJLElBQUksQ0FBQyxnQkFBZ0IsU0FBUyxDQUFDO0FBQ2hFLE1BQU0sMkJBQTJCO0FBQ2pDLE1BQU0sb0JBQW9CO0FBRTFCLE1BQU0sMkJBQTJCO0FBRWpDLE1BQU0sNkJBQTZCO0FBZ0k1QixTQUFTLHVCQUE2QjtBQUMzQyxRQUFNLGlCQUFnRDtBQUFBLElBQ3BELFNBQVM7QUFBQSxJQUNULE1BQU07QUFDSixhQUFPO0FBQUEsSUFDVDtBQUFBLElBQ0EsS0FB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
|
|
313
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9idW5kbGVycy9lc2J1aWxkLWltcGwvcHJlcHJvY2Vzcy1wbHVnaW4udHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAZmlsZVxuICpcbiAqIFRoaXMgbW9kdWxlIGRlZmluZXMgYSBjdXN0b20gZXNidWlsZCBwbHVnaW4gdGhhdCBwcmVwcm9jZXNzZXMgSmF2YVNjcmlwdCBhbmQgVHlwZVNjcmlwdCBmaWxlcyBmb3IgYW55IGJ1aWxkIHRhcmdldC5cbiAqXG4gKiBAcmVtYXJrc1xuICogV2UgY2Fubm90IHVzZSBgLmAgaW5zdGVhZCBvZiBgKGRvdClgIGluIHRoZSBhYm92ZSBkZXNjcmlwdGlvbiBiZWNhdXNlIHRoZSBmaWxlIGl0c2VsZiBpcyBwcmVwcm9jZXNzZWQgd2l0aCB0aGUgc2FtZSBydWxlLlxuICpcbiAqIGBpbml0Q2pzYCwgYGluaXRFc21gIGFuZCB0aGUgc2hpbXMgdGhleSBjYWxsIGFyZSBzdHJpbmdpZmllZCB3aXRoIGBTdHJpbmcoZm4pYCBhbmQgaW5qZWN0ZWQgaW50byBldmVyeVxuICogYnVpbHQgYnVuZGxlIGFzIGFuIGVzYnVpbGQgYmFubmVyLCBzbyB0aGV5IG11c3QgYmUgcmVhY2hhYmxlIGZyb20gb25lIGFub3RoZXIgYnkgQkFSRSBpZGVudGlmaWVyLiBBbiB1bmJ1bmRsZWRcbiAqIGJ1aWxkIChgYnVuZGxlOiBmYWxzZWAsIG9uZSBvdXRwdXQgcGVyIHNvdXJjZSkgZ2V0cyBubyBiYW5uZXI6IGVhY2ggZW1pdHRlZCBtb2R1bGUgZ2V0cyBhIHByZWFtYmxlIGhvbGRpbmcgb25seSB0aGVcbiAqIHNoaW1zIGl0cyBvd24gY29kZSBuZWVkcywgYW5kIGEgbW9kdWxlIHRoYXQgbmVlZHMgbm9uZSBnZXRzIG5vdGhpbmcuIFRoYXQgaXNcbiAqIHdoeSB0aGV5IGFsbCBsaXZlIGluIHRoaXMgbW9kdWxlOiBlc2J1aWxkIGNvbXBpbGVzIGEgY3Jvc3MtbW9kdWxlIGNhbGwgdG8gYCgwLCBpbXBvcnRfbW9kdWxlLmZuKSjigKYpYCxcbiAqIHdoaWNoIHdvdWxkIG5hbWUgYSBiaW5kaW5nIHRoZSBlbWl0dGVkIGJ1bmRsZSBkb2VzIG5vdCBoYXZlLiBTYW1lLW1vZHVsZSByZWZlcmVuY2VzIHN0YXkgYmFyZSwgYW5kXG4gKiB7QGxpbmsgbWFrZVByZXByb2Nlc3NCYW5uZXJ9IHNlcmlhbGl6ZXMgdGhlIHNoaW1zIGFsb25nc2lkZSB0aGUgYGluaXRgIGZ1bmN0aW9uIHNvIHRoZXkgYXJlIGluIHNjb3BlIHRoZXJlLiBBIHNoaW1cbiAqIHRoYXQgaXMgbm90IHNlcmlhbGl6ZWQgc2lsZW50bHkgZGVncmFkZXMgdG8gd2hhdGV2ZXIgdGhlIGNvbnN1bWVyJ3MgZ2xvYmFsIHNjb3BlIGhvbGRzIHVuZGVyIHRoYXQgbmFtZSDigJQgd2hpY2hcbiAqIGlzIGhvdyBgX19uYW1lYCB1c2VkIHRvIGVuZCB1cCBob2xkaW5nIGB3aW5kb3cubmFtZWAuXG4gKlxuICogQSBjYWxsZXIgdGhhdCBuZWVkcyBtb3JlIGluIHRoZSBiYW5uZXIgKHRoZSBPYnNpZGlhbiBwbHVnaW4gYnVpbGRlciBwYXRjaGVzIGByZXF1aXJlYCkgaGFuZHMgaW5cbiAqIHtAbGluayBQcmVwcm9jZXNzUGx1Z2luT3B0aW9ucy5hZGRpdGlvbmFsQmFubmVySW5pdEZ1bmN0aW9uc30uIEVhY2ggb25lIGlzIHNlcmlhbGl6ZWQgYXMgaXRzIE9XTiBpbW1lZGlhdGVseVxuICogaW52b2tlZCBmdW5jdGlvbiBhZnRlciB0aGUgc2hhcmVkIHNjb3BlLCBzbyBpdCBtdXN0IGJlIHNlbGYtY29udGFpbmVkOiBpdCBjYW5ub3Qgc2VlIHRoZSBzaGltcywgYW5kIGNhbGxpbmcgb25lXG4gKiBmcm9tIGFub3RoZXIgbW9kdWxlIHdvdWxkIGhpdCBleGFjdGx5IHRoZSBjcm9zcy1tb2R1bGUgdHJhcCBhYm92ZS5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7IEdlbmVyaWNPYmplY3QgfSBmcm9tICdAbW5hb3Vtb3YvdHlwZXNjcmlwdC1saWIvdHlwZS1ndWFyZHMnO1xuaW1wb3J0IHR5cGUge1xuICBPdXRwdXRGaWxlLFxuICBQbHVnaW5cbn0gZnJvbSAnZXNidWlsZCc7XG5pbXBvcnQgdHlwZSB7IHBhdGhUb0ZpbGVVUkwgfSBmcm9tICdub2RlOnVybCc7XG5pbXBvcnQgdHlwZSB7XG4gIElkZW50aWZpZXIsXG4gIE5vZGVcbn0gZnJvbSAndHlwZXNjcmlwdCc7XG5cbmltcG9ydCB7XG4gIEZ1bmN0aW9uSGFuZGxpbmdNb2RlLFxuICB0b0pzb25cbn0gZnJvbSAnQG1uYW91bW92L3R5cGVzY3JpcHQtbGliL29iamVjdC11dGlscyc7XG5pbXBvcnQge1xuICBtYWtlVmFsaWRWYXJpYWJsZU5hbWUsXG4gIHJlcGxhY2VBbGxcbn0gZnJvbSAnQG1uYW91bW92L3R5cGVzY3JpcHQtbGliL3N0cmluZyc7XG5pbXBvcnQgeyBCdWZmZXIgfSBmcm9tICdub2RlOmJ1ZmZlcic7XG5pbXBvcnQgeyByZWFkRmlsZSB9IGZyb20gJ25vZGU6ZnMvcHJvbWlzZXMnO1xuaW1wb3J0IHtcbiAgY3JlYXRlU291cmNlRmlsZSxcbiAgZm9yRWFjaENoaWxkLFxuICBpc0JpbmRpbmdFbGVtZW50LFxuICBpc0NhbGxFeHByZXNzaW9uLFxuICBpc0NsYXNzRGVjbGFyYXRpb24sXG4gIGlzRXhwb3J0RGVjbGFyYXRpb24sXG4gIGlzRnVuY3Rpb25EZWNsYXJhdGlvbixcbiAgaXNHZXRBY2Nlc3NvckRlY2xhcmF0aW9uLFxuICBpc0lkZW50aWZpZXIsXG4gIGlzSW1wb3J0Q2xhdXNlLFxuICBpc0ltcG9ydERlY2xhcmF0aW9uLFxuICBpc0ltcG9ydFNwZWNpZmllcixcbiAgaXNNZXRob2REZWNsYXJhdGlvbixcbiAgaXNOYW1lc3BhY2VJbXBvcnQsXG4gIGlzUGFyYW1ldGVyLFxuICBpc1Byb3BlcnR5QWNjZXNzRXhwcmVzc2lvbixcbiAgaXNQcm9wZXJ0eUFzc2lnbm1lbnQsXG4gIGlzUHJvcGVydHlEZWNsYXJhdGlvbixcbiAgaXNTZXRBY2Nlc3NvckRlY2xhcmF0aW9uLFxuICBpc1N0cmluZ0xpdGVyYWwsXG4gIGlzVmFyaWFibGVEZWNsYXJhdGlvbixcbiAgU2NyaXB0S2luZCxcbiAgU2NyaXB0VGFyZ2V0LFxuICBTeW50YXhLaW5kXG59IGZyb20gJ3R5cGVzY3JpcHQnO1xuXG5jb25zdCBESVNQT1NFX1NZTUJPTF9OQU1FUyA9IG5ldyBTZXQoWydhc3luY0Rpc3Bvc2UnLCAnZGlzcG9zZSddKTtcbmNvbnN0IElOTElORV9TT1VSQ0VfTUFQX1BSRUZJWCA9ICcvLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247YmFzZTY0LCc7XG5jb25zdCBKU19PVVRQVVRfUkVHX0VYUCA9IC9cXC5bY21dP2pzJC87XG4vLyBFc2J1aWxkJ3MgaGVscGVyIGJlaGluZCBhIGxvd2VyZWQgYHVzaW5nYCwgd2hpY2ggbG9va3MgdXAgYFN5bWJvbC5kaXNwb3NlYCBieSBuYW1lLlxuY29uc3QgS05PV05fU1lNQk9MX0hFTFBFUl9OQU1FID0gJ19fa25vd25TeW1ib2wnO1xuLy8gQSByZWxhdGl2ZSBvciBhYnNvbHV0ZSBwYXRoLCBvciBhIGBub2RlOmAgYnVpbHQtaW46IGFueXRoaW5nIGVsc2UgbmFtZXMgYSBwYWNrYWdlLlxuY29uc3QgTk9OX0JBUkVfU1BFQ0lGSUVSX1JFR19FWFAgPSAvXig/OlxcLnxcXC98bm9kZTopLztcblxuZW51bSBJZGVudGlmaWVyVXNhZ2Uge1xuICBCaW5kaW5nID0gJ2JpbmRpbmcnLFxuICBNZW1iZXIgPSAnbWVtYmVyJyxcbiAgUmVhZCA9ICdyZWFkJ1xufVxuXG4vKipcbiAqIE9wdGlvbnMgZm9yIHtAbGluayBtYWtlUHJlcHJvY2Vzc0Jhbm5lcn0uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTWFrZVByZXByb2Nlc3NCYW5uZXJPcHRpb25zIHtcbiAgLyoqXG4gICAqIFNlbGYtY29udGFpbmVkIGZ1bmN0aW9ucyBzZXJpYWxpemVkIGFmdGVyIHRoZSBzaGFyZWQgc2hpbXMsIGVhY2ggaW52b2tlZCBvbmNlLlxuICAgKi9cbiAgcmVhZG9ubHkgYWRkaXRpb25hbEJhbm5lckluaXRGdW5jdGlvbnM/OiByZWFkb25seSAoKCkgPT4gdm9pZClbXTtcblxuICAvKipcbiAgICogV2hldGhlciB0aGUgYnVpbGQgaXMgZm9yIGFuIEVTTSBmb3JtYXQuXG4gICAqL1xuICByZWFkb25seSBpc0VzbT86IGJvb2xlYW47XG59XG5cbi8qKlxuICogT3B0aW9ucyBmb3Ige0BsaW5rIHByZXByb2Nlc3NQbHVnaW59LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFByZXByb2Nlc3NQbHVnaW5PcHRpb25zIHtcbiAgLyoqXG4gICAqIFNlbGYtY29udGFpbmVkIGZ1bmN0aW9ucyBzZXJpYWxpemVkIGludG8gdGhlIGJhbm5lciBhZnRlciB0aGUgc2hhcmVkIHNoaW1zLCBlYWNoIGludm9rZWQgb25jZS5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogRWFjaCBmdW5jdGlvbiBpcyBlbWl0dGVkIGFzIGAoJHtTdHJpbmcoZm4pfSkoKTtgLCBzbyBpdCBtYXkgcmVmZXJlbmNlIG9ubHkgZ2xvYmFscyBhbmQgd2hhdCBpdCBkZWNsYXJlcyBpdHNlbGYuXG4gICAqL1xuICByZWFkb25seSBhZGRpdGlvbmFsQmFubmVySW5pdEZ1bmN0aW9ucz86IHJlYWRvbmx5ICgoKSA9PiB2b2lkKVtdO1xuXG4gIC8qKlxuICAgKiBUaGUgc2VsZi1jb250YWluZWQgZnVuY3Rpb24gd2hvc2UgcmVzdWx0IHJlcGxhY2VzIGBpbXBvcnQoZG90KW1ldGEoZG90KXVybGAgaW4gYSBDb21tb25KUyBidWlsZC4gU2VyaWFsaXplZCBpbnRvXG4gICAqIGV2ZXJ5IGZpbGUgdGhhdCByZWFkcyBpdC5cbiAgICpcbiAgICogQGRlZmF1bHQgQSBmdW5jdGlvbiByZXR1cm5pbmcgdGhlIGZpbGUgVVJMIG9mIGBfX2ZpbGVuYW1lYCwgb3IgYGxvY2F0aW9uLmhyZWZgIHdoZXJlIHRoZXJlIGlzIG5vIGBfX2ZpbGVuYW1lYC5cbiAgICovXG4gIHJlYWRvbmx5IGNqc0ltcG9ydE1ldGFVcmxQcm92aWRlcj86ICgpID0+IHN0cmluZztcblxuICAvKipcbiAgICogV2hldGhlciB0aGUgYnVpbGQgaXMgZm9yIGFuIEVTTSBmb3JtYXQuXG4gICAqL1xuICByZWFkb25seSBpc0VzbT86IGJvb2xlYW47XG59XG5cbmludGVyZmFjZSBBZGRNb2R1bGVQcmVhbWJsZXNQYXJhbXMge1xuICByZWFkb25seSBhZGRpdGlvbmFsQmFubmVySW5pdEZ1bmN0aW9uczogcmVhZG9ubHkgKCgpID0+IHZvaWQpW107XG4gIHJlYWRvbmx5IGxlYWRpbmdCYW5uZXI6IHN0cmluZztcbiAgcmVhZG9ubHkgb3V0cHV0RmlsZXM6IHJlYWRvbmx5IE91dHB1dEZpbGVbXTtcbn1cblxuLyoqXG4gKiBBIGJyb3dzZXItZmxhdm9yZWQgc3RhbmQtaW4gZm9yIE5vZGUncyBgcHJvY2Vzc2AgZ2xvYmFsLlxuICovXG5pbnRlcmZhY2UgQnJvd3NlclByb2Nlc3MgZXh0ZW5kcyBQYXJ0aWFsPE5vZGVKUy5Qcm9jZXNzPiB7XG4gIC8qKlxuICAgKiBNYXJrcyB0aGUgcHJvY2VzcyBhcyBhIGJyb3dzZXIgb25lLiBUaGUgYnVuZGxlZCBgZGVidWdgIHBhY2thZ2Ugc2VsZWN0cyBpdHMgYnJvd3NlciBlbnRyeSBwb2ludCBvbiBpdC5cbiAgICovXG4gIHJlYWRvbmx5IGJyb3dzZXI6IGJvb2xlYW47XG59XG5cbi8qKlxuICogVGhlIHNsaWNlIG9mIHRoZSBgU3ltYm9sYCBjb25zdHJ1Y3RvciB7QGxpbmsgZW5zdXJlRGlzcG9zZVN5bWJvbHN9IHJlYWRzIGFuZCB3cml0ZXMsIHdpdGggdGhlIHR3byBkaXNwb3NlXG4gKiBzeW1ib2xzIG9wdGlvbmFsIGJlY2F1c2UgYW4gZW5naW5lIHdpdGhvdXQgRXhwbGljaXQgUmVzb3VyY2UgTWFuYWdlbWVudCBkb2VzIG5vdCBoYXZlIHRoZW0uXG4gKi9cbmludGVyZmFjZSBEaXNwb3NlU3ltYm9sSG9zdCB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSB0eXBlc2NyaXB0LWRldi10b29sa2l0L3JlYWRvbmx5LWludGVyZmFjZS1tZW1iZXJzIC0tIE1pc3NpbmcgZGlzcG9zYWwgc3ltYm9scyBhcmUgaW5zdGFsbGVkIG9uIHRoZSBob3N0LlxuICBhc3luY0Rpc3Bvc2U/OiBzeW1ib2w7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSB0eXBlc2NyaXB0LWRldi10b29sa2l0L3JlYWRvbmx5LWludGVyZmFjZS1tZW1iZXJzIC0tIE1pc3NpbmcgZGlzcG9zYWwgc3ltYm9scyBhcmUgaW5zdGFsbGVkIG9uIHRoZSBob3N0LlxuICBkaXNwb3NlPzogc3ltYm9sO1xuICByZWFkb25seSBmb3I6IChrZXk6IHN0cmluZykgPT4gc3ltYm9sO1xufVxuXG5pbnRlcmZhY2UgRXNtTW9kdWxlIHtcbiAgcmVhZG9ubHkgX19lc01vZHVsZTogYm9vbGVhbjtcbiAgcmVhZG9ubHkgZGVmYXVsdDogdW5rbm93bjtcbn1cblxuLyoqXG4gKiBUaGUgc2xpY2Ugb2YgYSBicm93c2VyIGdsb2JhbCB7QGxpbmsgZ2V0Q2pzSW1wb3J0TWV0YVVybH0gcmVhZHMsIG9wdGlvbmFsIGJlY2F1c2UgYSBub24tYnJvd3NlciBob3N0IGhhcyBub25lLlxuICovXG5pbnRlcmZhY2UgSW5zZXJ0UHJlYW1ibGVQYXJhbXMge1xuICByZWFkb25seSBjb2RlOiBzdHJpbmc7XG4gIHJlYWRvbmx5IGxlYWRpbmdCYW5uZXI6IHN0cmluZztcbiAgcmVhZG9ubHkgcHJlYW1ibGU6IHN0cmluZztcbn1cblxuaW50ZXJmYWNlIExvY2F0aW9uSG9zdCB7XG4gIHJlYWRvbmx5IGxvY2F0aW9uPzogUGFnZUxvY2F0aW9uO1xufVxuXG5pbnRlcmZhY2UgTW9kdWxlU2hpbU5lZWRzIHtcbiAgcmVhZG9ubHkgaXNCcm93c2VyUHJvY2Vzc05lZWRlZDogYm9vbGVhbjtcbiAgcmVhZG9ubHkgaXNEaXNwb3NlU3ltYm9sc05lZWRlZDogYm9vbGVhbjtcbiAgcmVhZG9ubHkgaXNOYW1lTmVlZGVkOiBib29sZWFuO1xufVxuXG5pbnRlcmZhY2UgUGFnZUxvY2F0aW9uIHtcbiAgcmVhZG9ubHkgaHJlZjogc3RyaW5nO1xufVxuXG5pbnRlcmZhY2UgU291cmNlTWFwV2l0aE1hcHBpbmdzIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHR5cGVzY3JpcHQtZGV2LXRvb2xraXQvcmVhZG9ubHktaW50ZXJmYWNlLW1lbWJlcnMgLS0gQWRkaW5nIGEgcHJlYW1ibGUgc2hpZnRzIHRoZSBzb3VyY2UgbWFwIG1hcHBpbmdzLlxuICBtYXBwaW5nczogc3RyaW5nO1xufVxuXG5pbnRlcmZhY2UgVXJsTW9kdWxlIHtcbiAgcmVhZG9ubHkgcGF0aFRvRmlsZVVSTDogdHlwZW9mIHBhdGhUb0ZpbGVVUkw7XG59XG5cbi8qKlxuICogRW5zdXJlcyB0aGUgYnVuZGxlIHJ1bnMgYWdhaW5zdCBhIGBwcm9jZXNzYCBnbG9iYWwgdGhhdCBicm93c2VyLXRhcmdldGluZyBwYWNrYWdlcyByZWNvZ25pemUuXG4gKlxuICogQHJlbWFya3NcbiAqIFNlcmlhbGl6ZWQgaW50byB0aGUgZW1pdHRlZCBiYW5uZXIsIHNvIGl0IG5ldmVyIHJ1bnMgaW4gdGhlIGJ1aWxkZXIgcHJvY2VzcyDigJQgYnV0IGl0IGlzIGFuIG9yZGluYXJ5XG4gKiBmdW5jdGlvbiBoZXJlLCBzbyBpdCBpcyB1bml0LXRlc3RlZCBkaXJlY3RseSByYXRoZXIgdGhhbiBieSBldmFsdWF0aW5nIHRoZSBiYW5uZXIgdGV4dC5cbiAqXG4gKiBGaWxscyBpbiB0aGUga2V5cyBNSVNTSU5HIGZyb20gYSBob3N0LXByb3ZpZGVkIGBwcm9jZXNzYCByYXRoZXIgdGhhbiByZXBsYWNpbmcgb3Igc2tpcHBpbmcgaXQuIE9ic2lkaWFuXG4gKiBNb2JpbGUgZXhwb3NlcyBhIHBhcnRpYWwgYHByb2Nlc3NgLCBhbmQgdGhlIHdob2xlLW9iamVjdCBndWFyZHMgdGhpcyByZXBsYWNlZCAoYGlmIChnbG9iYWxUaGlzLnByb2Nlc3MpIHtcbiAqIHJldHVybjsgfWAgLyBgZ2xvYmFsVGhpc1JlY29yZFsncHJvY2VzcyddID8/PSDigKZgKSB0b29rIHRoYXQgYXMgXCJhbHJlYWR5IHNoaW1tZWRcIiwgc28gYGJyb3dzZXJgIG5ldmVyXG4gKiBsYW5kZWQuIFRoZSBidW5kbGVkIGBkZWJ1Z2AgcGFja2FnZSB0aGVuIHNlbGVjdGVkIGl0cyBOb2RlIGVudHJ5IHBvaW50LCB3aGljaCBjYWxsc1xuICogYHJlcXVpcmUoJ3V0aWwnKS5kZXByZWNhdGUoKWAgYXQgbW9kdWxlIHRvcCBsZXZlbCwgYW5kIG9uIG1vYmlsZSB0aGUgcGF0Y2hlZCBgcmVxdWlyZWAgcmV0dXJucyBge31gIOKAlCBzb1xuICogdGhlIHBsdWdpbiB0aHJldyBiZWZvcmUgaXRzIGBvbmxvYWRgIHJhbi5cbiAqXG4gKiBBIHJlYWwgTm9kZSBvciBFbGVjdHJvbiBgcHJvY2Vzc2AgaXMgbGVmdCBjb21wbGV0ZWx5IHVudG91Y2hlZC4gYHByb2Nlc3MudmVyc2lvbnMubm9kZWAgaXMgdGhlIHNpZ25hbCBmb3JcbiAqIGl0LCBhbmQgaXQgaXMgc2VsZi1jb250YWluZWQsIHNvIGl0IGFsc28gaG9sZHMgaW4gdGhlIE5vZGUgQ0xJIGJ1bmRsZXMgdGhpcyBiYW5uZXIgaXMgZW1pdHRlZCBpbnRvLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZW5zdXJlQnJvd3NlclByb2Nlc3MoKTogdm9pZCB7XG4gIGNvbnN0IGJyb3dzZXJQcm9jZXNzOiBHZW5lcmljT2JqZWN0PEJyb3dzZXJQcm9jZXNzPiA9IHtcbiAgICBicm93c2VyOiB0cnVlLFxuICAgIGN3ZCgpIHtcbiAgICAgIHJldHVybiAnLyc7XG4gICAgfSxcbiAgICBlbnY6IHt9LFxuICAgIHBsYXRmb3JtOiAnYW5kcm9pZCdcbiAgfTtcblxuICBjb25zdCBleGlzdGluZ1Byb2Nlc3MgPSBnbG9iYWxUaGlzLnByb2Nlc3MgYXMgUGFydGlhbDxOb2RlSlMuUHJvY2Vzcz4gfCB1bmRlZmluZWQ7XG5cbiAgaWYgKCFleGlzdGluZ1Byb2Nlc3MpIHtcbiAgICBnbG9iYWxUaGlzLnByb2Nlc3MgPSBicm93c2VyUHJvY2VzcyBhcyBOb2RlSlMuUHJvY2VzcztcbiAgICByZXR1cm47XG4gIH1cblxuICBpZiAoZXhpc3RpbmdQcm9jZXNzLnZlcnNpb25zPy5ub2RlKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgY29uc3QgZXhpc3RpbmdQcm9jZXNzUmVjb3JkID0gZXhpc3RpbmdQcm9jZXNzIGFzIEdlbmVyaWNPYmplY3Q7XG5cbiAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMoYnJvd3NlclByb2Nlc3MpKSB7XG4gICAgZXhpc3RpbmdQcm9jZXNzUmVjb3JkW2tleV0gPz89IHZhbHVlO1xuICB9XG5cbiAgZXhpc3RpbmdQcm9jZXNzUmVjb3JkWydicm93c2VyJ10gPSB0cnVlO1xufVxuXG4vKipcbiAqIE1ha2VzIGBTeW1ib2wuZGlzcG9zZWAgYW5kIGBTeW1ib2wuYXN5bmNEaXNwb3NlYCBleGlzdCwgZmFsbGluZyBiYWNrIHRvIHRoZSByZWdpc3RyeSBzeW1ib2xzIGVzYnVpbGQnc1xuICogYHVzaW5nYCBoZWxwZXJzIGxvb2sgdXAuXG4gKlxuICogQHBhcmFtIHN5bWJvbENvbnN0cnVjdG9yIC0gVGhlIGBTeW1ib2xgIGNvbnN0cnVjdG9yIHRvIHBhdGNoLiBEZWZhdWx0cyB0byB0aGUgYW1iaWVudCBvbmU7IHRoZSBwYXJhbWV0ZXJcbiAqIGV4aXN0cyBzbyBhIHRlc3QgY2FuIGhhbmQgaW4gYW4gZW5naW5lIHRoYXQgbGFja3MgdGhlIHdlbGwta25vd24gc3ltYm9scy5cbiAqXG4gKiBAcmVtYXJrc1xuICogU2VyaWFsaXplZCBpbnRvIHRoZSBlbWl0dGVkIGJhbm5lci4gQSBkaXNwb3NhYmxlIGRlY2xhcmVzIGl0cyBtZXRob2QgdW5kZXIgdGhlIExJVEVSQUwga2V5XG4gKiBgW1N5bWJvbC5kaXNwb3NlXWAsIHdoaWxlIGVzYnVpbGQgbG93ZXJzIGV2ZXJ5IGB1c2luZ2AgdG8gYSBsb29rdXAgdGhyb3VnaCBgX19rbm93blN5bWJvbCgnZGlzcG9zZScpYCxcbiAqIHdoaWNoIGZhbGxzIGJhY2sgdG8gYFN5bWJvbC5mb3IoJ1N5bWJvbC5kaXNwb3NlJylgIHdoZW4gdGhlIGVuZ2luZSBoYXMgbm8gd2VsbC1rbm93biBzeW1ib2wuIE9uIHN1Y2ggYW5cbiAqIGVuZ2luZSB0aGUgbGl0ZXJhbCBrZXkgZXZhbHVhdGVzIHRvIGB1bmRlZmluZWRgLCB0aGUgbWV0aG9kIGxhbmRzIHVuZGVyIHRoZSBzdHJpbmcgYFwidW5kZWZpbmVkXCJgLCBhbmRcbiAqIGV2ZXJ5IGB1c2luZ2Agb2YgaXQgdGhyb3dzIGBPYmplY3Qgbm90IGRpc3Bvc2FibGVgLiBGaWxsaW5nIHRoZSB3ZWxsLWtub3duIHNsb3Qgd2l0aCB0aGF0IHNhbWUgcmVnaXN0cnlcbiAqIHN5bWJvbCBtYWtlcyBib3RoIHNpZGVzIG5hbWUgb25lIGtleSBvbiBldmVyeSBlbmdpbmUuIEEgaG9zdCB0aGF0IGFscmVhZHkgaGFzIHRoZSBzeW1ib2wgaXMgbGVmdFxuICogdW50b3VjaGVkOiBgPz89YCBuZXZlciByZWFjaGVzIHRoZSBhc3NpZ25tZW50LCB3aGljaCB0aGUgaG9zdCdzIG5vbi13cml0YWJsZSBwcm9wZXJ0eSB3b3VsZCByZWZ1c2UuXG4gKlxuICogVGhlIGRlZmF1bHQgbmFtZXMgYFN5bWJvbGAgYmFyZSBvbiBwdXJwb3NlOiBpdCBleGlzdHMgb24gZXZlcnkgZW5naW5lIHRoaXMgcnVucyBvbiwgYW5kIGEgYmFyZSByZWZlcmVuY2VcbiAqIHJlc29sdmVzIGFnYWluc3Qgd2hhdGV2ZXIgc2NvcGUgdGhlIGJhbm5lciBpcyBldmFsdWF0ZWQgaW4sIGV4YWN0bHkgYXMgdGhlIGJ1bmRsZSdzIG93blxuICogYFtTeW1ib2wuZGlzcG9zZV1gIGtleXMgZG8uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBlbnN1cmVEaXNwb3NlU3ltYm9scyhzeW1ib2xDb25zdHJ1Y3RvcjogRGlzcG9zZVN5bWJvbEhvc3QgPSBTeW1ib2wpOiB2b2lkIHtcbiAgc3ltYm9sQ29uc3RydWN0b3IuYXN5bmNEaXNwb3NlID8/PSBzeW1ib2xDb25zdHJ1Y3Rvci5mb3IoJ1N5bWJvbC5hc3luY0Rpc3Bvc2UnKTtcbiAgc3ltYm9sQ29uc3RydWN0b3IuZGlzcG9zZSA/Pz0gc3ltYm9sQ29uc3RydWN0b3IuZm9yKCdTeW1ib2wuZGlzcG9zZScpO1xufVxuXG4vKipcbiAqIFJldHVybnMgaXRzIGFyZ3VtZW50IHVuY2hhbmdlZC5cbiAqXG4gKiBAcGFyYW0gJHVua25vd24gLSBUaGUgdmFsdWUgdG8gcmV0dXJuLlxuICogQHJldHVybnMgVGhlIHZhbHVlIHBhc3NlZCBpbi5cbiAqXG4gKiBAcmVtYXJrc1xuICogU2VyaWFsaXplZCBpbnRvIHRoZSBlbWl0dGVkIGJhbm5lciwgd2hlcmUgaXQgc3RhbmRzIGluIGZvciBlc2J1aWxkJ3MgYF9fbmFtZWAgaGVscGVyIOKAlCB3aGljaCBuYW1lcyBhXG4gKiBmdW5jdGlvbiBhbmQgcmV0dXJucyBpdCDigJQgZm9yIGJ1bmRsZXMgdGhhdCByZWZlcmVuY2UgdGhlIGhlbHBlciB3aXRob3V0IGVtaXR0aW5nIHRoZWlyIG93bi5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGtlZXBOYW1lKCR1bmtub3duOiB1bmtub3duKTogdW5rbm93biB7XG4gIHJldHVybiAkdW5rbm93bjtcbn1cblxuLyoqXG4gKiBCdWlsZHMgdGhlIGJhbm5lciBpbmplY3RlZCBhdCB0aGUgdG9wIG9mIGV2ZXJ5IGVtaXR0ZWQgYnVuZGxlLlxuICpcbiAqIGBTdHJpbmcoZm4pYCBjYXB0dXJlcyBvbmx5IHRoZSBmdW5jdGlvbidzIG93biBib2R5LCBzbyBldmVyeSBzaGltIHRoZSBgaW5pdGAgZnVuY3Rpb24gY2FsbHMgaGFzIHRvIGJlXG4gKiBzZXJpYWxpemVkIG5leHQgdG8gaXQgYW5kIHdyYXBwZWQgaW4gb25lIHNoYXJlZCBzY29wZTsgb3RoZXJ3aXNlIHRoZSBjYWxsIGl0IG1ha2VzIHJlc29sdmVzIGFnYWluc3QgdGhlXG4gKiBjb25zdW1lcidzIGdsb2JhbCBzY29wZSBhdCBydW50aW1lLiBTZWUgdGhpcyBmaWxlJ3MgYEBmaWxlYCByZW1hcmtzLlxuICpcbiAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIGJhbm5lciBvcHRpb25zLlxuICogQHJldHVybnMgVGhlIGJhbm5lciBzb3VyY2UgdG8gcHJlcGVuZCB0byB0aGUgZW1pdHRlZCBidW5kbGUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtYWtlUHJlcHJvY2Vzc0Jhbm5lcihvcHRpb25zOiBNYWtlUHJlcHJvY2Vzc0Jhbm5lck9wdGlvbnMgPSB7fSk6IHN0cmluZyB7XG4gIGNvbnN0IHsgYWRkaXRpb25hbEJhbm5lckluaXRGdW5jdGlvbnMgPSBbXSwgaXNFc20gPSBmYWxzZSB9ID0gb3B0aW9ucztcbiAgY29uc3Qgc2hpbXMgPSBpc0VzbSA/IFtlbnN1cmVEaXNwb3NlU3ltYm9scywgZW5zdXJlQnJvd3NlclByb2Nlc3NdIDogW2Vuc3VyZURpc3Bvc2VTeW1ib2xzLCBlbnN1cmVCcm93c2VyUHJvY2Vzcywga2VlcE5hbWVdO1xuICBjb25zdCBpbml0ID0gaXNFc20gPyBpbml0RXNtIDogaW5pdENqcztcbiAgY29uc3QgYWRkaXRpb25hbEluaXRzID0gYWRkaXRpb25hbEJhbm5lckluaXRGdW5jdGlvbnMubWFwKChmdW5jdGlvbl8pID0+IGAoJHtTdHJpbmcoZnVuY3Rpb25fKX0pKCk7XFxuYCkuam9pbignJyk7XG4gIHJldHVybiBgXFxuKGZ1bmN0aW9uICgpIHtcXG4ke3NoaW1zLm1hcChTdHJpbmcpLmpvaW4oJ1xcblxcbicpfVxcblxcbigke1N0cmluZyhpbml0KX0pKCk7XFxufSkoKTtcXG4ke2FkZGl0aW9uYWxJbml0c31gO1xufVxuXG4vKiB2OCBpZ25vcmUgc3RhcnQgLS0gVGhlIHBsdWdpbidzIHNldHVwIG5lZWRzIGEgbGl2ZSBlc2J1aWxkIGNvbnRleHQsIGFuZCB0aGUgZnVuY3Rpb25zIGluIHRoZSBsYXRlciBpZ25vcmVkIHJhbmdlcyBhcmUgc2VyaWFsaXplZCBpbnRvIHRoZSBlbWl0dGVkIGJhbm5lciBhbmQgc28gcnVuIGluc2lkZSB0aGUgYnVpbHQgYnVuZGxlLCBuZXZlciBpbiB0aGlzIHByb2Nlc3MuIFRoZSBzaGltcyBhYm92ZSBhcmUgZGVsaWJlcmF0ZWx5IE5PVCBpZ25vcmVkOiB0aGV5IGFyZSBvcmRpbmFyeSBmdW5jdGlvbnMgaGVyZSBhbmQgYXJlIHVuaXQtdGVzdGVkIGRpcmVjdGx5LCBhbmQgbmVpdGhlciBhcmUgdGhlIHVuYnVuZGxlZC1idWlsZCBoZWxwZXJzLCB3aGljaCB0aGUgdGVzdHMgZHJpdmUgdGhyb3VnaCBhIHN0dWIgYnVpbGQuICovXG5cbi8qKlxuICogQ3JlYXRlcyBhbiBlc2J1aWxkIHBsdWdpbiB0aGF0IHByZXByb2Nlc3NlcyBKYXZhU2NyaXB0IGFuZCBUeXBlU2NyaXB0IGZpbGVzLlxuICpcbiAqIFRoaXMgcGx1Z2luIHBlcmZvcm1zIHRoZSBmb2xsb3dpbmcgdGFza3M6XG4gKiAtIFJlcGxhY2VzIGluc3RhbmNlcyBvZiBgaW1wb3J0KGRvdCltZXRhKGRvdCl1cmxgIHdpdGggYSBDb21tb25KUy1jb21wYXRpYmxlIGBfX2ZpbGVuYW1lYCBhbHRlcm5hdGl2ZS5cbiAqIC0gTW9kaWZpZXMgdGhlIGBzb3VyY2VNYXBwaW5nVVJMYCBjb21tZW50IHNvIGEgdGVtcGxhdGUgbGl0ZXJhbCBlbmRpbmcgYSBmaWxlIGRvZXMgbm90IHN3YWxsb3cgaXQuXG4gKiAtIEFkZHMgYSBiYXNpYyBgcHJvY2Vzc2Agb2JqZWN0IHRvIHRoZSBnbG9iYWwgc2NvcGUgaWYgYHByb2Nlc3NgIGlzIHJlZmVyZW5jZWQgYnV0IG5vdCBkZWZpbmVkLlxuICogLSBGaWxscyBpbiBgU3ltYm9sLmRpc3Bvc2VgIC8gYFN5bWJvbC5hc3luY0Rpc3Bvc2VgIG9uIGVuZ2luZXMgdGhhdCBsYWNrIHRoZW0sIHNvIGB1c2luZ2Agd29ya3MgdGhlcmUuXG4gKlxuICogQHBhcmFtIG9wdGlvbnMgLSBUaGUgcGx1Z2luIG9wdGlvbnMuXG4gKiBAcmV0dXJucyBBbiBlc2J1aWxkIGBQbHVnaW5gIG9iamVjdCB0aGF0IGhhbmRsZXMgdGhlIHByZXByb2Nlc3NpbmcuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwcmVwcm9jZXNzUGx1Z2luKG9wdGlvbnM6IFByZXByb2Nlc3NQbHVnaW5PcHRpb25zID0ge30pOiBQbHVnaW4ge1xuICBjb25zdCB7IGFkZGl0aW9uYWxCYW5uZXJJbml0RnVuY3Rpb25zID0gW10sIGNqc0ltcG9ydE1ldGFVcmxQcm92aWRlciA9IGdldENqc0ltcG9ydE1ldGFVcmwsIGlzRXNtID0gZmFsc2UgfSA9IG9wdGlvbnM7XG4gIGNvbnN0IHJlcGxhY2VtZW50cyA9IGlzRXNtXG4gICAgPyB7fVxuICAgIDoge1xuICAgICAgW1xuICAgICAgICByZXBsYWNlQWxsKHtcbiAgICAgICAgICAkc3RyaW5nOiAnaW1wb3J0KGRvdCltZXRhKGRvdCl1cmwnLFxuICAgICAgICAgIHJlcGxhY2VyOiAnLicsXG4gICAgICAgICAgc2VhcmNoVmFsdWU6ICcoZG90KSdcbiAgICAgICAgfSlcbiAgICAgIF06IGNqc0ltcG9ydE1ldGFVcmxQcm92aWRlclxuICAgIH07XG5cbiAgcmV0dXJuIHtcbiAgICBuYW1lOiAncHJlcHJvY2VzcycsXG4gICAgc2V0dXAoYnVpbGQpOiB2b2lkIHtcbiAgICAgIGJ1aWxkLmluaXRpYWxPcHRpb25zLmRlZmluZSA/Pz0ge307XG5cbiAgICAgIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKHJlcGxhY2VtZW50cykpIHtcbiAgICAgICAgYnVpbGQuaW5pdGlhbE9wdGlvbnMuZGVmaW5lW2tleV0gPSBgX18ke21ha2VWYWxpZFZhcmlhYmxlTmFtZShrZXkpfWA7XG4gICAgICB9XG5cbiAgICAgIGlmIChidWlsZC5pbml0aWFsT3B0aW9ucy5idW5kbGUgPT09IGZhbHNlKSB7XG4gICAgICAgIC8vIE9uZSBvdXRwdXQgcGVyIHNvdXJjZTogZWFjaCBtb2R1bGUgZ2V0cyBvbmx5IHRoZSBzaGltcyBpdHMgb3duIGNvZGUgbmVlZHMsIHNvIGEgcGFnZSBpbXBvcnRpbmcgYSBwdXJlXG4gICAgICAgIC8vIG1vZHVsZSBvZiBhIGxpYnJhcnkgaXMgbGVmdCB3aXRoIGl0cyBnbG9iYWxzIHVudG91Y2hlZC5cbiAgICAgICAgY29uc3QgbGVhZGluZ0Jhbm5lciA9IGJ1aWxkLmluaXRpYWxPcHRpb25zLmJhbm5lcj8uWydqcyddID8/ICcnO1xuICAgICAgICBidWlsZC5vbkVuZCgocmVzdWx0KSA9PiB7XG4gICAgICAgICAgYWRkTW9kdWxlUHJlYW1ibGVzKHsgYWRkaXRpb25hbEJhbm5lckluaXRGdW5jdGlvbnMsIGxlYWRpbmdCYW5uZXIsIG91dHB1dEZpbGVzOiByZXN1bHQub3V0cHV0RmlsZXMgPz8gW10gfSk7XG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYnVpbGQuaW5pdGlhbE9wdGlvbnMuYmFubmVyID8/PSB7fTtcbiAgICAgICAgYnVpbGQuaW5pdGlhbE9wdGlvbnMuYmFubmVyWydqcyddID8/PSAnJztcbiAgICAgICAgYnVpbGQuaW5pdGlhbE9wdGlvbnMuYmFubmVyWydqcyddICs9IG1ha2VQcmVwcm9jZXNzQmFubmVyKHsgYWRkaXRpb25hbEJhbm5lckluaXRGdW5jdGlvbnMsIGlzRXNtIH0pO1xuICAgICAgfVxuXG4gICAgICBidWlsZC5vbkxvYWQoeyBmaWx0ZXI6IC9cXC4oPzpqc3x0c3xjanN8bWpzfGN0c3xtdHMpJC8gfSwgYXN5bmMgKCRhcmd1bWVudHMpID0+IHtcbiAgICAgICAgbGV0IGNvbnRlbnRzID0gYXdhaXQgcmVhZEZpbGUoJGFyZ3VtZW50cy5wYXRoLCAndXRmLTgnKTtcblxuICAgICAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhyZXBsYWNlbWVudHMpKSB7XG4gICAgICAgICAgY29uc3QgdmFyaWFibGUgPSBgX18ke21ha2VWYWxpZFZhcmlhYmxlTmFtZShrZXkpfWA7XG4gICAgICAgICAgaWYgKCFjb250ZW50cy5pbmNsdWRlcyhrZXkpIHx8IGNvbnRlbnRzLmluY2x1ZGVzKGB2YXIgJHt2YXJpYWJsZX1gKSkge1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnN0IHZhbHVlU3RyaW5nID0gdHlwZW9mIHZhbHVlID09PSAnZnVuY3Rpb24nID8gYCgke1N0cmluZyh2YWx1ZSl9KSgpYCA6IHRvSnNvbih2YWx1ZSwgeyBmdW5jdGlvbkhhbmRsaW5nTW9kZTogRnVuY3Rpb25IYW5kbGluZ01vZGUuRnVsbCB9KTtcbiAgICAgICAgICBjb250ZW50cyA9IGB2YXIgJHt2YXJpYWJsZX0gPSBnbG9iYWxUaGlzWycke2tleX0nXSA/PyAke3ZhbHVlU3RyaW5nfTtcXG4ke2NvbnRlbnRzfWA7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBIQUNLOiBUaGUgJHsnJ30gcGFydCBpcyB1c2VkIHRvIGVuc3VyZSBPYnNpZGlhbiBsb2FkcyB0aGUgcGx1Z2luIHByb3Blcmx5LFxuICAgICAgICAvLyBPdGhlcndpc2UsIGl0IHN0b3BzIGxvYWRpbmcgYWZ0ZXIgdGhlIGZpcnN0IGxpbmUgb2YgdGhlIHNvdXJjZU1hcHBpbmdVUkwgY29tbWVudC5cblxuICAgICAgICBjb250ZW50cyA9IHJlcGxhY2VBbGwoe1xuICAgICAgICAgICRzdHJpbmc6IGNvbnRlbnRzLFxuICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby10ZW1wbGF0ZS1jdXJseS1pbi1zdHJpbmcgLS0gSXQgaXMgaW50ZW50aW9uYWwsIHRoZSBzdHJpbmcgbG9va3MgbGlrZSBhIHRlbXBsYXRlIGxpdGVyYWwsIGJ1dCBpdCBpcyBub3QuXG4gICAgICAgICAgcmVwbGFjZXI6ICdgXFxuLy8jJHtcXCdcXCd9IHNvdXJjZU1hcHBpbmdVUkwnLFxuICAgICAgICAgIHNlYXJjaFZhbHVlOiAvYFxccj9cXG5cXC9cXC8jIHNvdXJjZU1hcHBpbmdVUkwvZ1xuICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGNvbnRlbnRzLFxuICAgICAgICAgIGxvYWRlcjogJ3RzJ1xuICAgICAgICB9O1xuICAgICAgfSk7XG4gICAgfVxuICB9O1xufVxuXG4vKiB2OCBpZ25vcmUgc3RvcCAqL1xuXG4vKipcbiAqIFByZXBlbmRzIHRvIGVhY2ggZW1pdHRlZCBtb2R1bGUgdGhlIHByZWFtYmxlIGl0cyBvd24gY29kZSBuZWVkcywgYW5kIG5vdGhpbmcgd2hlbiBpdCBuZWVkcyBub25lLlxuICpcbiAqIEBwYXJhbSBwYXJhbXMgLSBUaGUgZW1pdHRlZCBtb2R1bGVzLCB0aGUgYmFubmVyIHRoZSBjYWxsZXIgYWxyZWFkeSBwdXQgZmlyc3QsIGFuZCB0aGUgY2FsbGVyJ3MgZXh0cmEgaW5pdHMuXG4gKi9cbmZ1bmN0aW9uIGFkZE1vZHVsZVByZWFtYmxlcyhwYXJhbXM6IEFkZE1vZHVsZVByZWFtYmxlc1BhcmFtcyk6IHZvaWQge1xuICBjb25zdCB7IGFkZGl0aW9uYWxCYW5uZXJJbml0RnVuY3Rpb25zLCBsZWFkaW5nQmFubmVyLCBvdXRwdXRGaWxlcyB9ID0gcGFyYW1zO1xuICBmb3IgKGNvbnN0IG91dHB1dEZpbGUgb2Ygb3V0cHV0RmlsZXMpIHtcbiAgICBpZiAoIUpTX09VVFBVVF9SRUdfRVhQLnRlc3Qob3V0cHV0RmlsZS5wYXRoKSkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgY29uc3QgY29kZSA9IG91dHB1dEZpbGUudGV4dDtcbiAgICBjb25zdCBwcmVhbWJsZSA9IG1ha2VNb2R1bGVQcmVhbWJsZShnZXRNb2R1bGVTaGltTmVlZHMoY29kZSksIGFkZGl0aW9uYWxCYW5uZXJJbml0RnVuY3Rpb25zKTtcbiAgICBpZiAocHJlYW1ibGUgPT09ICcnKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBvdXRwdXRGaWxlLmNvbnRlbnRzID0gbmV3IFRleHRFbmNvZGVyKCkuZW5jb2RlKGluc2VydFByZWFtYmxlKHsgY29kZSwgbGVhZGluZ0Jhbm5lciwgcHJlYW1ibGUgfSkpO1xuICB9XG59XG5cbi8qIHY4IGlnbm9yZSBzdGFydCAtLSBTZXJpYWxpemVkIGludG8gdGhlIGVtaXR0ZWQgbW9kdWxlLCBzZWUgYWJvdmUuICovXG5mdW5jdGlvbiBnZXRDanNJbXBvcnRNZXRhVXJsKCk6IHN0cmluZyB7XG4gIGlmICh0eXBlb2YgX19maWxlbmFtZSA9PT0gJ3N0cmluZycpIHtcbiAgICBjb25zdCBsb2NhbFJlcXVpcmUgPSByZXF1aXJlO1xuICAgIGNvbnN0IHVybCA9IGxvY2FsUmVxdWlyZSgnbm9kZTp1cmwnKSBhcyBVcmxNb2R1bGU7XG4gICAgaWYgKHR5cGVvZiB1cmwucGF0aFRvRmlsZVVSTCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgcmV0dXJuIHVybC5wYXRoVG9GaWxlVVJMKF9fZmlsZW5hbWUpLmhyZWY7XG4gICAgfVxuICB9XG5cbiAgLy8gRmFsbGJhY2sgdG8gdGhlIHBhZ2UgVVJMLCBvciBhbiBlbXB0eSBzdHJpbmcgaWYgdGhlIGVudmlyb25tZW50IGlzIHVua25vd24uXG4gIHJldHVybiAoZ2xvYmFsVGhpcyBhcyBMb2NhdGlvbkhvc3QpLmxvY2F0aW9uPy5ocmVmID8/ICcnO1xufVxuLyogdjggaWdub3JlIHN0b3AgKi9cblxuZnVuY3Rpb24gZ2V0SWRlbnRpZmllclVzYWdlKG5vZGU6IElkZW50aWZpZXIpOiBJZGVudGlmaWVyVXNhZ2Uge1xuICBjb25zdCB7IHBhcmVudCB9ID0gbm9kZTtcbiAgaWYgKFxuICAgIChpc1Byb3BlcnR5QWNjZXNzRXhwcmVzc2lvbihwYXJlbnQpIHx8IGlzUHJvcGVydHlBc3NpZ25tZW50KHBhcmVudCkgfHwgaXNNZXRob2REZWNsYXJhdGlvbihwYXJlbnQpIHx8IGlzUHJvcGVydHlEZWNsYXJhdGlvbihwYXJlbnQpXG4gICAgICB8fCBpc0dldEFjY2Vzc29yRGVjbGFyYXRpb24ocGFyZW50KSB8fCBpc1NldEFjY2Vzc29yRGVjbGFyYXRpb24ocGFyZW50KSlcbiAgICAmJiBwYXJlbnQubmFtZSA9PT0gbm9kZVxuICApIHtcbiAgICByZXR1cm4gSWRlbnRpZmllclVzYWdlLk1lbWJlcjtcbiAgfVxuXG4gIHJldHVybiAoaXNWYXJpYWJsZURlY2xhcmF0aW9uKHBhcmVudCkgfHwgaXNGdW5jdGlvbkRlY2xhcmF0aW9uKHBhcmVudCkgfHwgaXNDbGFzc0RlY2xhcmF0aW9uKHBhcmVudCkgfHwgaXNQYXJhbWV0ZXIocGFyZW50KSB8fCBpc0JpbmRpbmdFbGVtZW50KHBhcmVudClcbiAgICAgIHx8IGlzSW1wb3J0Q2xhdXNlKHBhcmVudCkgfHwgaXNJbXBvcnRTcGVjaWZpZXIocGFyZW50KSB8fCBpc05hbWVzcGFjZUltcG9ydChwYXJlbnQpKVxuICAgICAgJiYgcGFyZW50Lm5hbWUgPT09IG5vZGVcbiAgICA/IElkZW50aWZpZXJVc2FnZS5CaW5kaW5nXG4gICAgOiBJZGVudGlmaWVyVXNhZ2UuUmVhZDtcbn1cblxuLyoqXG4gKiBSZWFkcyB3aGljaCBzaGltcyBhbiBlbWl0dGVkIG1vZHVsZSBuZWVkcyBmcm9tIGl0cyBjb2RlLlxuICpcbiAqIC0gYGVuc3VyZUJyb3dzZXJQcm9jZXNzYDogaXQgcmVhZHMgYSBgcHJvY2Vzc2AgaXQgZG9lcyBub3QgYmluZCBpdHNlbGYsIG9yIGl0IGxvYWRzIGEgYmFyZSBwYWNrYWdlIHRoYXQgaXMgbm90IGFcbiAqICAgYG5vZGU6YCBidWlsdC1pbi4gVGhlIHNlY29uZCBjYXNlIGlzIHRoZXJlIGJlY2F1c2Ugc3VjaCBhIHBhY2thZ2UgKGBwYXRoLWJyb3dzZXJpZnlgIHJlYWRzIGBwcm9jZXNzLmN3ZCgpYCkgY2Fubm90XG4gKiAgIGNhcnJ5IGEgc2hpbSBvZiBpdHMgb3duLCBhbmQgaW4gYW4gdW5idW5kbGVkIGJ1aWxkIGl0cyBpbXBvcnRlciBpcyB0aGUgb25seSBtb2R1bGUgdGhhdCBjYW4uXG4gKiAtIGBlbnN1cmVEaXNwb3NlU3ltYm9sc2A6IGl0IG5hbWVzIGBTeW1ib2wuZGlzcG9zZWAgb3IgYFN5bWJvbC5hc3luY0Rpc3Bvc2VgLCBvciBob2xkcyBlc2J1aWxkJ3MgYF9fa25vd25TeW1ib2xgXG4gKiAgIGhlbHBlciwgd2hpY2ggYSBsb3dlcmVkIGB1c2luZ2AgZW1pdHMuXG4gKiAtIGBfX25hbWVgOiBpdCByZWFkcyBhIGBfX25hbWVgIGl0IGRvZXMgbm90IGRlY2xhcmUuXG4gKlxuICogQHBhcmFtIGNvZGUgLSBUaGUgZW1pdHRlZCBtb2R1bGUuXG4gKiBAcmV0dXJucyBXaGF0IHRoZSBtb2R1bGUgbmVlZHMuXG4gKi9cbmZ1bmN0aW9uIGdldE1vZHVsZVNoaW1OZWVkcyhjb2RlOiBzdHJpbmcpOiBNb2R1bGVTaGltTmVlZHMge1xuICBjb25zdCBzb3VyY2VGaWxlID0gY3JlYXRlU291cmNlRmlsZSgnbW9kdWxlLmpzJywgY29kZSwgU2NyaXB0VGFyZ2V0LkxhdGVzdCwgdHJ1ZSwgU2NyaXB0S2luZC5KUyk7XG4gIGNvbnN0IGJvdW5kTmFtZXMgPSBuZXcgU2V0PHN0cmluZz4oKTtcbiAgY29uc3QgcmVhZE5hbWVzID0gbmV3IFNldDxzdHJpbmc+KCk7XG4gIGxldCBpc0JhcmVJbXBvcnRGb3VuZCA9IGZhbHNlO1xuICBsZXQgaXNEaXNwb3NlU3ltYm9sRm91bmQgPSBmYWxzZTtcblxuICBmdW5jdGlvbiB2aXNpdChub2RlOiBOb2RlKTogdm9pZCB7XG4gICAgY29uc3Qgc3BlY2lmaWVyID0gZ2V0TW9kdWxlU3BlY2lmaWVyKG5vZGUpO1xuICAgIGlmIChzcGVjaWZpZXIgIT09IHVuZGVmaW5lZCAmJiAhTk9OX0JBUkVfU1BFQ0lGSUVSX1JFR19FWFAudGVzdChzcGVjaWZpZXIpKSB7XG4gICAgICBpc0JhcmVJbXBvcnRGb3VuZCA9IHRydWU7XG4gICAgfVxuXG4gICAgaWYgKFxuICAgICAgaXNQcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24obm9kZSkgJiYgaXNJZGVudGlmaWVyKG5vZGUuZXhwcmVzc2lvbikgJiYgbm9kZS5leHByZXNzaW9uLnRleHQgPT09ICdTeW1ib2wnXG4gICAgICAmJiBESVNQT1NFX1NZTUJPTF9OQU1FUy5oYXMobm9kZS5uYW1lLnRleHQpXG4gICAgKSB7XG4gICAgICBpc0Rpc3Bvc2VTeW1ib2xGb3VuZCA9IHRydWU7XG4gICAgfVxuXG4gICAgaWYgKGlzSWRlbnRpZmllcihub2RlKSkge1xuICAgICAgaWYgKG5vZGUudGV4dCA9PT0gS05PV05fU1lNQk9MX0hFTFBFUl9OQU1FKSB7XG4gICAgICAgIGlzRGlzcG9zZVN5bWJvbEZvdW5kID0gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgdXNhZ2UgPSBnZXRJZGVudGlmaWVyVXNhZ2Uobm9kZSk7XG4gICAgICBpZiAodXNhZ2UgPT09IElkZW50aWZpZXJVc2FnZS5CaW5kaW5nKSB7XG4gICAgICAgIGJvdW5kTmFtZXMuYWRkKG5vZGUudGV4dCk7XG4gICAgICB9IGVsc2UgaWYgKHVzYWdlID09PSBJZGVudGlmaWVyVXNhZ2UuUmVhZCkge1xuICAgICAgICByZWFkTmFtZXMuYWRkKG5vZGUudGV4dCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZm9yRWFjaENoaWxkKG5vZGUsIHZpc2l0KTtcbiAgfVxuICB2aXNpdChzb3VyY2VGaWxlKTtcblxuICBmdW5jdGlvbiBpc0ZyZWVSZWFkKG5hbWU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiByZWFkTmFtZXMuaGFzKG5hbWUpICYmICFib3VuZE5hbWVzLmhhcyhuYW1lKTtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgaXNCcm93c2VyUHJvY2Vzc05lZWRlZDogaXNGcmVlUmVhZCgncHJvY2VzcycpIHx8IGlzQmFyZUltcG9ydEZvdW5kLFxuICAgIGlzRGlzcG9zZVN5bWJvbHNOZWVkZWQ6IGlzRGlzcG9zZVN5bWJvbEZvdW5kLFxuICAgIGlzTmFtZU5lZWRlZDogaXNGcmVlUmVhZCgnX19uYW1lJylcbiAgfTtcbn1cblxuZnVuY3Rpb24gZ2V0TW9kdWxlU3BlY2lmaWVyKG5vZGU6IE5vZGUpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICBpZiAoKGlzSW1wb3J0RGVjbGFyYXRpb24obm9kZSkgfHwgaXNFeHBvcnREZWNsYXJhdGlvbihub2RlKSkgJiYgbm9kZS5tb2R1bGVTcGVjaWZpZXIgIT09IHVuZGVmaW5lZCAmJiBpc1N0cmluZ0xpdGVyYWwobm9kZS5tb2R1bGVTcGVjaWZpZXIpKSB7XG4gICAgcmV0dXJuIG5vZGUubW9kdWxlU3BlY2lmaWVyLnRleHQ7XG4gIH1cblxuICBpZiAoaXNDYWxsRXhwcmVzc2lvbihub2RlKSkge1xuICAgIGNvbnN0IFtmaXJzdEFyZ3VtZW50XSA9IG5vZGUuYXJndW1lbnRzO1xuICAgIGNvbnN0IGlzTG9hZGVyID0gbm9kZS5leHByZXNzaW9uLmtpbmQgPT09IFN5bnRheEtpbmQuSW1wb3J0S2V5d29yZCB8fCAoaXNJZGVudGlmaWVyKG5vZGUuZXhwcmVzc2lvbikgJiYgbm9kZS5leHByZXNzaW9uLnRleHQgPT09ICdyZXF1aXJlJyk7XG4gICAgaWYgKGlzTG9hZGVyICYmIGZpcnN0QXJndW1lbnQgIT09IHVuZGVmaW5lZCAmJiBpc1N0cmluZ0xpdGVyYWwoZmlyc3RBcmd1bWVudCkpIHtcbiAgICAgIHJldHVybiBmaXJzdEFyZ3VtZW50LnRleHQ7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHVuZGVmaW5lZDtcbn1cblxuLyogdjggaWdub3JlIHN0YXJ0IC0tIFNlcmlhbGl6ZWQgaW50byB0aGUgZW1pdHRlZCBiYW5uZXIsIHNlZSBhYm92ZS4gKi9cbmZ1bmN0aW9uIGluaXRDanMoKTogdm9pZCB7XG4gIGNvbnN0IGdsb2JhbFRoaXNSZWNvcmQgPSBnbG9iYWxUaGlzIGFzIEdlbmVyaWNPYmplY3Q7XG4gIGVuc3VyZURpc3Bvc2VTeW1ib2xzKCk7XG4gIGdsb2JhbFRoaXNSZWNvcmRbJ19fbmFtZSddID8/PSBrZWVwTmFtZTtcbiAgZ2xvYmFsVGhpc1JlY29yZFsnX19leHRyYWN0RGVmYXVsdCddID8/PSBleHRyYWN0RGVmYXVsdDtcblxuICBlbnN1cmVCcm93c2VyUHJvY2VzcygpO1xuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSB1bmljb3JuL2NvbnNpc3RlbnQtZnVuY3Rpb24tc2NvcGluZyAtLSBTZXJpYWxpemVkIHdpdGggaW5pdENqcyBpbnRvIHRoZSBiYW5uZXI7IGF0IG1vZHVsZSBzY29wZSBpdCB3b3VsZCBiZSBsZWZ0IG91dCBvZiBpdC5cbiAgZnVuY3Rpb24gZXh0cmFjdERlZmF1bHQobW9kdWxlOiBQYXJ0aWFsPEVzbU1vZHVsZT4gfCB1bmRlZmluZWQpOiB1bmtub3duIHtcbiAgICByZXR1cm4gbW9kdWxlICYmIG1vZHVsZS5fX2VzTW9kdWxlICYmICdkZWZhdWx0JyBpbiBtb2R1bGUgPyBtb2R1bGUuZGVmYXVsdCA6IG1vZHVsZTtcbiAgfVxufVxuXG5mdW5jdGlvbiBpbml0RXNtKCk6IHZvaWQge1xuICBlbnN1cmVEaXNwb3NlU3ltYm9scygpO1xuICBlbnN1cmVCcm93c2VyUHJvY2VzcygpO1xufVxuLyogdjggaWdub3JlIHN0b3AgKi9cblxuLyoqXG4gKiBJbnNlcnRzIHRoZSBwcmVhbWJsZSBhZnRlciB0aGUgY2FsbGVyJ3MgbGVhZGluZyBiYW5uZXIsIGFuZCBzaGlmdHMgYW4gaW5saW5lIHNvdXJjZSBtYXAgZG93biBieSB0aGUgbGluZXMgaXQgYWRkcyxcbiAqIHNvIHRoZSBtb2R1bGUncyBvd24gbGluZXMga2VlcCBtYXBwaW5nIG9udG8gdGhlaXIgc291cmNlcy5cbiAqXG4gKiBAcGFyYW0gcGFyYW1zIC0gVGhlIG1vZHVsZSwgaXRzIGxlYWRpbmcgYmFubmVyIGFuZCB0aGUgcHJlYW1ibGUuXG4gKiBAcmV0dXJucyBUaGUgbW9kdWxlIHdpdGggdGhlIHByZWFtYmxlIGluIGl0LlxuICovXG5mdW5jdGlvbiBpbnNlcnRQcmVhbWJsZShwYXJhbXM6IEluc2VydFByZWFtYmxlUGFyYW1zKTogc3RyaW5nIHtcbiAgY29uc3QgeyBjb2RlLCBsZWFkaW5nQmFubmVyLCBwcmVhbWJsZSB9ID0gcGFyYW1zO1xuICBjb25zdCBpbnNlcnRBdCA9IGxlYWRpbmdCYW5uZXIuZW5kc1dpdGgoJ1xcbicpICYmIGNvZGUuc3RhcnRzV2l0aChsZWFkaW5nQmFubmVyKSA/IGxlYWRpbmdCYW5uZXIubGVuZ3RoIDogMDtcbiAgY29uc3QgYWRkZWRMaW5lQ291bnQgPSBwcmVhbWJsZS5zcGxpdCgnXFxuJykubGVuZ3RoIC0gMTtcbiAgbGV0IHNoaWZ0ZWRDb2RlID0gY29kZTtcbiAgY29uc3Qgc291cmNlTWFwU3RhcnQgPSBjb2RlLmxhc3RJbmRleE9mKElOTElORV9TT1VSQ0VfTUFQX1BSRUZJWCk7XG4gIGlmIChzb3VyY2VNYXBTdGFydCAhPT0gLTEpIHtcbiAgICBjb25zdCBkYXRhU3RhcnQgPSBzb3VyY2VNYXBTdGFydCArIElOTElORV9TT1VSQ0VfTUFQX1BSRUZJWC5sZW5ndGg7XG4gICAgY29uc3QgZGF0YSA9IGNvZGUuc2xpY2UoZGF0YVN0YXJ0KS50cmltRW5kKCk7XG4gICAgY29uc3Qgc291cmNlTWFwID0gSlNPTi5wYXJzZShCdWZmZXIuZnJvbShkYXRhLCAnYmFzZTY0JykudG9TdHJpbmcoJ3V0Zi04JykpIGFzIFNvdXJjZU1hcFdpdGhNYXBwaW5ncztcbiAgICBzb3VyY2VNYXAubWFwcGluZ3MgPSAnOycucmVwZWF0KGFkZGVkTGluZUNvdW50KSArIHNvdXJjZU1hcC5tYXBwaW5ncztcbiAgICBzaGlmdGVkQ29kZSA9IGNvZGUuc2xpY2UoMCwgZGF0YVN0YXJ0KSArIEJ1ZmZlci5mcm9tKEpTT04uc3RyaW5naWZ5KHNvdXJjZU1hcCksICd1dGYtOCcpLnRvU3RyaW5nKCdiYXNlNjQnKSArIGNvZGUuc2xpY2UoZGF0YVN0YXJ0ICsgZGF0YS5sZW5ndGgpO1xuICB9XG4gIHJldHVybiBzaGlmdGVkQ29kZS5zbGljZSgwLCBpbnNlcnRBdCkgKyBwcmVhbWJsZSArIHNoaWZ0ZWRDb2RlLnNsaWNlKGluc2VydEF0KTtcbn1cblxuLyoqXG4gKiBCdWlsZHMgdGhlIHByZWFtYmxlIG9mIG9uZSB1bmJ1bmRsZWQgbW9kdWxlOiB0aGUgc2hpbXMgaXQgbmVlZHMgaW4gb25lIHNoYXJlZCBzY29wZSwgdGhlbiB0aGUgY2FsbGVyJ3MgZXh0cmEgaW5pdHMuXG4gKlxuICogQHBhcmFtIG5lZWRzIC0gV2hhdCB0aGUgbW9kdWxlIG5lZWRzLlxuICogQHBhcmFtIGFkZGl0aW9uYWxCYW5uZXJJbml0RnVuY3Rpb25zIC0gVGhlIGNhbGxlcidzIGV4dHJhIGluaXRzLCB3aGljaCBldmVyeSBtb2R1bGUgZ2V0cy5cbiAqIEByZXR1cm5zIFRoZSBwcmVhbWJsZSwgZW1wdHkgd2hlbiB0aGUgbW9kdWxlIG5lZWRzIG5vdGhpbmcuXG4gKi9cbmZ1bmN0aW9uIG1ha2VNb2R1bGVQcmVhbWJsZShuZWVkczogTW9kdWxlU2hpbU5lZWRzLCBhZGRpdGlvbmFsQmFubmVySW5pdEZ1bmN0aW9uczogcmVhZG9ubHkgKCgpID0+IHZvaWQpW10pOiBzdHJpbmcge1xuICBjb25zdCBzaGltczogKCguLi5hcmd1bWVudHNfOiBuZXZlcltdKSA9PiB1bmtub3duKVtdID0gW107XG4gIGNvbnN0IGNhbGxzOiBzdHJpbmdbXSA9IFtdO1xuXG4gIGlmIChuZWVkcy5pc0Rpc3Bvc2VTeW1ib2xzTmVlZGVkKSB7XG4gICAgc2hpbXMucHVzaChlbnN1cmVEaXNwb3NlU3ltYm9scyk7XG4gICAgY2FsbHMucHVzaCgnZW5zdXJlRGlzcG9zZVN5bWJvbHMoKTsnKTtcbiAgfVxuXG4gIGlmIChuZWVkcy5pc0Jyb3dzZXJQcm9jZXNzTmVlZGVkKSB7XG4gICAgc2hpbXMucHVzaChlbnN1cmVCcm93c2VyUHJvY2Vzcyk7XG4gICAgY2FsbHMucHVzaCgnZW5zdXJlQnJvd3NlclByb2Nlc3MoKTsnKTtcbiAgfVxuXG4gIGlmIChuZWVkcy5pc05hbWVOZWVkZWQpIHtcbiAgICBzaGltcy5wdXNoKGtlZXBOYW1lKTtcbiAgICBjYWxscy5wdXNoKCdnbG9iYWxUaGlzW1xcJ19fbmFtZVxcJ10gPz89IGtlZXBOYW1lOycpO1xuICB9XG5cbiAgY29uc3Qgc2hhcmVkU2NvcGUgPSBzaGltcy5sZW5ndGggPT09IDAgPyAnJyA6IGAoZnVuY3Rpb24gKCkge1xcbiR7c2hpbXMubWFwKFN0cmluZykuam9pbignXFxuXFxuJyl9XFxuXFxuJHtjYWxscy5qb2luKCdcXG4nKX1cXG59KSgpO1xcbmA7XG4gIHJldHVybiBzaGFyZWRTY29wZSArIGFkZGl0aW9uYWxCYW5uZXJJbml0RnVuY3Rpb25zLm1hcCgoZnVuY3Rpb25fKSA9PiBgKCR7U3RyaW5nKGZ1bmN0aW9uXyl9KSgpO1xcbmApLmpvaW4oJycpO1xufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQW1DQSwwQkFHTztBQUNQLG9CQUdPO0FBQ1AseUJBQXVCO0FBQ3ZCLHNCQUF5QjtBQUN6Qix3QkF5Qk87QUFFUCxNQUFNLHVCQUF1QixvQkFBSSxJQUFJLENBQUMsZ0JBQWdCLFNBQVMsQ0FBQztBQUNoRSxNQUFNLDJCQUEyQjtBQUNqQyxNQUFNLG9CQUFvQjtBQUUxQixNQUFNLDJCQUEyQjtBQUVqQyxNQUFNLDZCQUE2QjtBQW1JNUIsU0FBUyx1QkFBNkI7QUFDM0MsUUFBTSxpQkFBZ0Q7QUFBQSxJQUNwRCxTQUFTO0FBQUEsSUFDVCxNQUFNO0FBQ0osYUFBTztBQUFBLElBQ1Q7QUFBQSxJQUNBLEtBQUssQ0FBQztBQUFBLElBQ04sVUFBVTtBQUFBLEVBQ1o7QUFFQSxRQUFNLGtCQUFrQixXQUFXO0FBRW5DLE1BQUksQ0FBQyxpQkFBaUI7QUFDcEIsZUFBVyxVQUFVO0FBQ3JCO0FBQUEsRUFDRjtBQUVBLE1BQUksZ0JBQWdCLFVBQVUsTUFBTTtBQUNsQztBQUFBLEVBQ0Y7QUFFQSxRQUFNLHdCQUF3QjtBQUU5QixhQUFXLENBQUMsS0FBSyxLQUFLLEtBQUssT0FBTyxRQUFRLGNBQWMsR0FBRztBQUN6RCwwQkFBc0IsR0FBRyxNQUFNO0FBQUEsRUFDakM7QUFFQSx3QkFBc0IsU0FBUyxJQUFJO0FBQ3JDO0FBc0JPLFNBQVMscUJBQXFCLG9CQUF1QyxRQUFjO0FBQ3hGLG9CQUFrQixpQkFBaUIsa0JBQWtCLElBQUkscUJBQXFCO0FBQzlFLG9CQUFrQixZQUFZLGtCQUFrQixJQUFJLGdCQUFnQjtBQUN0RTtBQVlPLFNBQVMsU0FBUyxVQUE0QjtBQUNuRCxTQUFPO0FBQ1Q7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
|
|
@@ -66,7 +66,7 @@ export interface PreprocessPluginOptions {
|
|
|
66
66
|
interface DisposeSymbolHost {
|
|
67
67
|
asyncDispose?: symbol;
|
|
68
68
|
dispose?: symbol;
|
|
69
|
-
for: (key: string) => symbol;
|
|
69
|
+
readonly for: (key: string) => symbol;
|
|
70
70
|
}
|
|
71
71
|
/**
|
|
72
72
|
* Ensures the bundle runs against a `process` global that browser-targeting packages recognize.
|
|
@@ -374,4 +374,4 @@ function warnMemberSlugCollisions(info, namespace) {
|
|
|
374
374
|
typeHref,
|
|
375
375
|
typeLink
|
|
376
376
|
});
|
|
377
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9kb2NzLXNpdGUvYXBpLWRvYy1saW5rLXJlbmRlcmluZy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBmaWxlXG4gKlxuICogVHlwZS1saW5rIHJlbmRlcmluZzogdHVybnMgdHlwZSB0ZXh0IGFuZCBpbmxpbmUgbGluayB0YWdzIGludG8gbWFya2Rvd24gbGlua3MgdG8gZ2VuZXJhdGVkIHBhZ2VzXG4gKiBvciBleHRlcm5hbCByZWZlcmVuY2VzIChUeXBlU2NyaXB0IGhhbmRib29rLCBNRE4gV2ViIEFQSSwgSlMgZ2xvYmFscykuXG4gKi9cblxuaW1wb3J0IHtcbiAgZ2V0TWFuZGF0b3J5TmFtZWRHcm91cCxcbiAgZ2V0T3B0aW9uYWxOYW1lZEdyb3VwXG59IGZyb20gJ0BtbmFvdW1vdi90eXBlc2NyaXB0LWxpYi9yZWctZXhwJztcbmltcG9ydCB7IHJlYWRGaWxlU3luYyB9IGZyb20gJ25vZGU6ZnMnO1xuaW1wb3J0IHsgam9pbiB9IGZyb20gJ25vZGU6cGF0aCc7XG5cbmltcG9ydCB0eXBlIHtcbiAgVHlwZUluZm8sXG4gIFdlYkFwaUVudHJ5XG59IGZyb20gJy4vYXBpLWRvYy10eXBlcy50cyc7XG5cbmltcG9ydCB7XG4gIEdFTkVSSUNfVFlQRV9QQVJBTVMsXG4gIFRTX0dMT0JBTF9UWVBFUyxcbiAgVFNfUFJJTUlUSVZFX1RZUEVTLFxuICBUU19VVElMSVRZX1RZUEVTXG59IGZyb20gJy4vYXBpLWRvYy1jb25zdGFudHMudHMnO1xuaW1wb3J0IHsgZ2V0UGFja2FnZVR5cGVVcmwgfSBmcm9tICcuL2FwaS1kb2MtcGFja2FnZS1zaXRlcy50cyc7XG5pbXBvcnQge1xuICB0b1JvdXRlU2VnbWVudCxcbiAgdG9Sb3V0ZVNlZ21lbnRQcmVzZXJ2ZUNhc2Vcbn0gZnJvbSAnLi9hcGktZG9jLXJvdXRlLXNlZ21lbnRzLnRzJztcbmltcG9ydCB7IGdldEFwaURvY1NldHRpbmdzIH0gZnJvbSAnLi9hcGktZG9jLXNldHRpbmdzLnRzJztcbmltcG9ydCB7XG4gIGVzY2FwZU1keEFuZ2xlQnJhY2tldHMsXG4gIGVzY2FwZU1keFByb3NlLFxuICBnZXROYW1lc3BhY2VEaXJlY3RvcnksXG4gIG1lbWJlclJvdXRlU2VnbWVudCxcbiAgbWVtYmVyU2x1ZyxcbiAgb3ZlcmxvYWRSb3V0ZVNlZ21lbnQsXG4gIG92ZXJsb2FkU2x1ZyxcbiAgcmVwbGFjZVJlZ0V4cE1hdGNoZXMsXG4gIHNlZ21lbnRNYXJrZG93blxufSBmcm9tICcuL2FwaS1kb2MtdGV4dC11dGlscy50cyc7XG5cbi8qKlxuTG9hZGVkIGZyb20gdHlwZWRvYy1wbHVnaW4tbWRuLWxpbmtzIGRhdGEgYXQgcnVudGltZVxuICovXG4vKipcbk1vZHVsZS1sZXZlbCBtdXRhYmxlIHN0YXRlLCBoZWxkIGluIG9uZSBvYmplY3Qgc28gZWFjaCBtdXRhdGlvbiBuYW1lcyBpdCBleHBsaWNpdGx5LlxuICovXG5pbnRlcmZhY2UgTW9kdWxlU3RhdGUge1xuICB3ZWJBcGlUeXBlczogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG59XG5cbmNvbnN0IG1vZHVsZVN0YXRlOiBNb2R1bGVTdGF0ZSA9IHtcbiAgd2ViQXBpVHlwZXM6IHt9XG59O1xuLyoqXG5Mb3dlcmNhc2VkLCBjb2xsaXNpb24tZGlzYW1iaWd1YXRlZCBPTi1ESVNLIHNlZ21lbnQgcGVyIHF1YWxpZmllZCB0eXBlIGtleSAoYCR7bmFtZXNwYWNlfSMke25hbWV9YCkuXG4gKi9cbmNvbnN0IHR5cGVGaWxlU2VnbWVudHMgPSBuZXcgTWFwPHN0cmluZywgc3RyaW5nPigpO1xuLyoqXG5DYXNlLXByZXNlcnZlZCBVUkwvcm91dGUgc2VnbWVudCBwZXIgcXVhbGlmaWVkIHR5cGUga2V5IChgJHtuYW1lc3BhY2V9IyR7bmFtZX1gKS5cbiAqL1xuY29uc3QgdHlwZVJvdXRlU2VnbWVudHMgPSBuZXcgTWFwPHN0cmluZywgc3RyaW5nPigpO1xuXG4vKipcbiAqIFJvdXRlLXNlZ21lbnQga2V5cyBvZiB0aGUgbWVtYmVyIHBhZ2VzIHRoYXQgYGdlbmVyYXRlTWVtYmVyUGFnZXNgIHdpbGwgYWN0dWFsbHkgZW1pdCwgYXNcbiAqIGAke25hbWVzcGFjZX0jJHtUeXBlTmFtZX0jJHtyb3V0ZVNlZ21lbnR9YC4gT25seSBOT04taW5oZXJpdGVkIHByb3BlcnRpZXMgYW5kIG5vbi1pbmhlcml0ZWQgbWV0aG9kXG4gKiBvdmVybG9hZCBrZXlzIGdldCBhIHBhZ2UsIHNvIHRoaXMgbGV0cyBsaW5rIGVtaXR0ZXJzIGF2b2lkIHBvaW50aW5nIGF0IGEgbWVtYmVyIHBhZ2UgdGhhdCBpcyBuZXZlclxuICogZ2VuZXJhdGVkIChhbiBpbmhlcml0ZWQgbWVtYmVyLCBhbiBlbnVtIG1lbWJlciwgYW4gb3B0aW9ucy1pbnRlcmZhY2UgbWVtYmVyKSDigJQgd2hpY2ggd291bGQgNDA0LlxuICovXG5jb25zdCBnZW5lcmF0ZWRNZW1iZXJQYWdlcyA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuXG4vKipcbiAqIFdoZXRoZXIgYSBtZW1iZXIgcGFnZSB3aWxsIGJlIGdlbmVyYXRlZCBmb3IgYHJvdXRlU2VnbWVudGAgb24gdGhlIGdpdmVuIHR5cGUuXG4gKlxuICogQHBhcmFtIG5hbWVzcGFjZSAtIFRoZSB0eXBlJ3MgbmFtZXNwYWNlLlxuICogQHBhcmFtIHR5cGVOYW1lIC0gVGhlIHR5cGUncyBuYW1lLlxuICogQHBhcmFtIHJvdXRlU2VnbWVudCAtIFRoZSBtZW1iZXIncyByb3V0ZSBzZWdtZW50LlxuICogQHJldHVybnMgV2hldGhlciB0aGUgcGFnZSBpcyBnZW5lcmF0ZWQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkb2VzTWVtYmVyUGFnZUV4aXN0KG5hbWVzcGFjZTogc3RyaW5nLCB0eXBlTmFtZTogc3RyaW5nLCByb3V0ZVNlZ21lbnQ6IHN0cmluZyk6IGJvb2xlYW4ge1xuICByZXR1cm4gZ2VuZXJhdGVkTWVtYmVyUGFnZXMuaGFzKGAke25hbWVzcGFjZX0jJHt0eXBlTmFtZX0jJHtyb3V0ZVNlZ21lbnR9YCk7XG59XG5cbi8qKlxuICogUmVzb2x2ZSBhIGJhcmUgdHlwZSBuYW1lIHRvIGEgZG9jdW1lbnRlZCBgVHlwZUluZm9gLlxuICpcbiAqIFRoZSBtb2RlbCBtYXAgaXMga2V5ZWQgYnkgYSBxdWFsaWZpZWQgYCR7bmFtZXNwYWNlfSMke25hbWV9YCBpZGVudGl0eSwgYmVjYXVzZSBhIHBhY2thZ2VcbiAqIGNhbiBleHBvcnQgdGhlIHNhbWUgc2ltcGxlIG5hbWUgZnJvbSBkaWZmZXJlbnQgbW9kdWxlcy4gUmVzb2x1dGlvbiBpcyBiZXN0LWVmZm9ydDpcbiAqICAgMS4gUHJlZmVyIGEgdHlwZSBpbiBgY3VycmVudE5hbWVzcGFjZWAgKHRoZSByZWZlcmVuY2luZyBwYWdlJ3MgbW9kdWxlKS5cbiAqICAgMi4gT3RoZXJ3aXNlLCBpZiBleGFjdGx5IG9uZSB0eXBlIGFjcm9zcyBhbGwgbW9kdWxlcyBoYXMgdGhhdCBiYXJlIG5hbWUsIHVzZSBpdC5cbiAqICAgMy4gSWYgdGhlIGJhcmUgbmFtZSBpcyBhbWJpZ3VvdXMgKG11bHRpcGxlIG1vZHVsZXMpLCBnaXZlIHVwIChjYWxsZXIgcmVuZGVycyBwbGFpbiBjb2RlKS5cbiAqXG4gKiBAcGFyYW0gYWxsVHlwZXMgLSBFdmVyeSBkb2N1bWVudGVkIHR5cGUsIGtleWVkIGJ5IGAke25hbWVzcGFjZX0jJHtuYW1lfWAuXG4gKiBAcGFyYW0gbmFtZSAtIFRoZSB0eXBlJ3MgbmFtZS5cbiAqIEBwYXJhbSBjdXJyZW50TmFtZXNwYWNlIC0gVGhlIG5hbWVzcGFjZSBvZiB0aGUgcmVmZXJlbmNpbmcgcGFnZSwgcHJlZmVycmVkIHdoZW4gdGhlIG5hbWUgaXMgYW1iaWd1b3VzLlxuICogQHJldHVybnMgVGhlIHR5cGUsIG9yIGB1bmRlZmluZWRgIHdoZW4gbm8gdHlwZSBvciBtb3JlIHRoYW4gb25lIGhhcyB0aGF0IG5hbWUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmaW5kVHlwZShhbGxUeXBlczogTWFwPHN0cmluZywgVHlwZUluZm8+LCBuYW1lOiBzdHJpbmcsIGN1cnJlbnROYW1lc3BhY2U/OiBzdHJpbmcpOiBUeXBlSW5mbyB8IHVuZGVmaW5lZCB7XG4gIGlmIChjdXJyZW50TmFtZXNwYWNlICE9PSB1bmRlZmluZWQpIHtcbiAgICBjb25zdCBxdWFsaWZpZWQgPSBhbGxUeXBlcy5nZXQoYCR7Y3VycmVudE5hbWVzcGFjZX0jJHtuYW1lfWApO1xuICAgIGlmIChxdWFsaWZpZWQpIHtcbiAgICAgIHJldHVybiBxdWFsaWZpZWQ7XG4gICAgfVxuICB9XG4gIGxldCBmb3VuZDogVHlwZUluZm8gfCB1bmRlZmluZWQ7XG4gIGxldCBtYXRjaENvdW50ID0gMDtcbiAgZm9yIChjb25zdCBpbmZvIG9mIGFsbFR5cGVzLnZhbHVlcygpKSB7XG4gICAgaWYgKGluZm8ubmFtZSAhPT0gbmFtZSkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgZm91bmQgPSBpbmZvO1xuICAgIG1hdGNoQ291bnQrKztcbiAgICBpZiAobWF0Y2hDb3VudCA+IDEpIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICB9XG4gIHJldHVybiBtYXRjaENvdW50ID09PSAxID8gZm91bmQgOiB1bmRlZmluZWQ7XG59XG5cbi8qKlxuICogTGluayBhIGJhc2UgdHlwZSBleHByZXNzaW9uIGZvciB0aGUgXCJFeHRlbmRzOlwiIGxpbmUuXG4gKiBTaW1wbGUgdHlwZSByZWZlcmVuY2VzIChpZGVudGlmaWVyICsgb3B0aW9uYWwgZ2VuZXJpY3MpIHVzZSByZW5kZXJUeXBlV2l0aExpbmtzXG4gKiBzbyBlYWNoIHR5cGUgYXJndW1lbnQgZ2V0cyBpdHMgb3duIGxpbmsuXG4gKiBDb21wbGV4IGV4cHJlc3Npb25zIChvYmplY3QgdHlwZXMsIGludGVyc2VjdGlvbnMsIGV0Yy4pIGZhbGwgYmFjayB0byB0eXBlTGlua1xuICogdG8gYXZvaWQgTURYIHBhcnNpbmcgaXNzdWVzIHdpdGggYHtgLCBgfWAsIGB8YCBldGMuXG4gKlxuICogQHBhcmFtIHR5cGVOYW1lIC0gVGhlIHR5cGUncyBuYW1lLlxuICogQHBhcmFtIGFsbFR5cGVzIC0gRXZlcnkgZG9jdW1lbnRlZCB0eXBlLCBrZXllZCBieSBgJHtuYW1lc3BhY2V9IyR7bmFtZX1gLlxuICogQHBhcmFtIGN1cnJlbnROYW1lc3BhY2UgLSBUaGUgbmFtZXNwYWNlIG9mIHRoZSByZWZlcmVuY2luZyBwYWdlLCBwcmVmZXJyZWQgd2hlbiB0aGUgbmFtZSBpcyBhbWJpZ3VvdXMuXG4gKiBAcmV0dXJucyBUaGUgbGlua2VkIHR5cGUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBsaW5rQmFzZVR5cGUodHlwZU5hbWU6IHN0cmluZywgYWxsVHlwZXM6IE1hcDxzdHJpbmcsIFR5cGVJbmZvPiwgY3VycmVudE5hbWVzcGFjZT86IHN0cmluZyk6IHN0cmluZyB7XG4gIGNvbnN0IGlzU2ltcGxlVHlwZVJlZiA9IC9eW2EtekEtWl1bYS16QS1aMC05XSooPzo8Lio+KT8kLy50ZXN0KHR5cGVOYW1lLnRyaW0oKSk7XG4gIHJldHVybiBpc1NpbXBsZVR5cGVSZWYgPyBlc2NhcGVNZHhBbmdsZUJyYWNrZXRzKHJlbmRlclR5cGVXaXRoTGlua3ModHlwZU5hbWUsIGFsbFR5cGVzLCB1bmRlZmluZWQsIGN1cnJlbnROYW1lc3BhY2UpKSA6IHR5cGVMaW5rKHR5cGVOYW1lLCBhbGxUeXBlcywgY3VycmVudE5hbWVzcGFjZSk7XG59XG5cbi8qKlxuICogTG9hZHMgdGhlIFdlYiBBUEkgbGlua3MgYHR5cGVkb2MtcGx1Z2luLW1kbi1saW5rc2Agc2hpcHMsIGlmIGl0IGlzIGluc3RhbGxlZC4gV2l0aG91dCBpdCwgV2ViIEFQSSB0eXBlcyByZW5kZXJcbiAqIHVubGlua2VkLlxuICpcbiAqIEBwYXJhbSByb290RGlyZWN0b3J5IC0gVGhlIGZvbGRlciB3aG9zZSBgbm9kZV9tb2R1bGVzYCBob2xkcyB0aGUgcGFja2FnZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGxvYWRFeHRlcm5hbFR5cGVNYXBzKHJvb3REaXJlY3Rvcnk6IHN0cmluZyk6IHZvaWQge1xuICB0cnkge1xuICAgIGNvbnN0IGRhdGFQYXRoID0gam9pbihyb290RGlyZWN0b3J5LCAnbm9kZV9tb2R1bGVzL3R5cGVkb2MtcGx1Z2luLW1kbi1saW5rcy9kYXRhL3dlYi1hcGkuanNvbicpO1xuICAgIG1vZHVsZVN0YXRlLndlYkFwaVR5cGVzID0gSlNPTi5wYXJzZShyZWFkRmlsZVN5bmMoZGF0YVBhdGgsICd1dGYtOCcpKSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgICBjb25zb2xlLndhcm4oYExvYWRlZCAke1N0cmluZyhPYmplY3Qua2V5cyhtb2R1bGVTdGF0ZS53ZWJBcGlUeXBlcykubGVuZ3RoKX0gV2ViIEFQSSB0eXBlIGxpbmtzYCk7XG4gIH0gY2F0Y2gge1xuICAgIG1vZHVsZVN0YXRlLndlYkFwaVR5cGVzID0ge307XG4gICAgY29uc29sZS53YXJuKCd0eXBlZG9jLXBsdWdpbi1tZG4tbGlua3MgZGF0YSBub3QgZm91bmQg4oCUIFdlYiBBUEkgbGlua3Mgd2lsbCBiZSB1bmF2YWlsYWJsZS4nKTtcbiAgfVxufVxuXG4vKipcbiAqIENvbnZlcnQgaW5saW5lIG1hcmtkb3duIHRvIEhUTUwgZm9yIHVzZSBpbiBjb21wb25lbnQgcHJvcHMgd2l0aCBzZXQ6aHRtbFxuICpcbiAqIEBwYXJhbSB0ZXh0IC0gVGhlIHRleHQuXG4gKiBAcmV0dXJucyBUaGUgSFRNTC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1hcmtkb3duVG9IdG1sKHRleHQ6IHN0cmluZyk6IHN0cmluZyB7XG4gIGNvbnN0IGVzY2FwZWQgPSB0ZXh0XG4gICAgLnJlcGxhY2VBbGwoJyYnLCAnJmFtcDsnKVxuICAgIC5yZXBsYWNlQWxsKCc8JywgJyZsdDsnKVxuICAgIC5yZXBsYWNlQWxsKCc+JywgJyZndDsnKTtcbiAgcmV0dXJuIHJlcGxhY2VSZWdFeHBNYXRjaGVzKGVzY2FwZWQsIC9cXFsoPzx0ZXh0PlteXFxdXSspXFxdXFwoKD88dXJsPlteKV0rKVxcKS9nLCAobWF0Y2gpID0+IHtcbiAgICBjb25zdCBsaW5rVGV4dCA9IGdldE1hbmRhdG9yeU5hbWVkR3JvdXAobWF0Y2gsICd0ZXh0Jyk7XG4gICAgY29uc3QgdXJsID0gZ2V0TWFuZGF0b3J5TmFtZWRHcm91cChtYXRjaCwgJ3VybCcpO1xuICAgIC8vIEEgcmVsYXRpdmUgVVJMIGhlcmUgaXMgYW4gaWxsdXN0cmF0aXZlIGV4YW1wbGUgcGF0aCBpbiBUU0RvYyAoZS5nLiBgW2Zvb10oZm9vLnBuZylgKSwgbm90IGFcbiAgICAvLyByZWFsIG5hdmlnYWJsZSBsaW5rIOKAlCByZW5kZXIgaXQgYXMgbGl0ZXJhbCBpbmxpbmUgY29kZSBzbyBpdCBuZWl0aGVyIDQwNHMgbm9yIGxvc2VzIG1lYW5pbmcuXG4gICAgcmV0dXJuIC9eKD86aHR0cHM/OlxcL1xcL3xcXC98I3xtYWlsdG86KS8udGVzdCh1cmwpID8gYDxhIGhyZWY9XCIke3VybH1cIj4ke2xpbmtUZXh0fTwvYT5gIDogYDxjb2RlPlske2xpbmtUZXh0fV0oJHt1cmx9KTwvY29kZT5gO1xuICB9KVxuICAgIC5yZXBsYWNlQWxsKC9gKD88Y29kZT5bXmBdKylgL2csICc8Y29kZT4kPGNvZGU+PC9jb2RlPicpXG4gICAgLnJlcGxhY2VBbGwoJ1xcbicsICc8YnIvPicpO1xufVxuXG4vKipcbiAqIEJ1aWxkIHRoZSBocmVmIGZvciBhIG1lbWJlciwgcG9pbnRpbmcgdG8gdGhlIHBhcmVudCB0eXBlJ3MgcGFnZSBpZiBpbmhlcml0ZWRcbiAqXG4gKiBAcGFyYW0gbWVtYmVyU2x1Z1N0cmluZyAtIFRoZSBtZW1iZXIncyByb3V0ZSBzZWdtZW50LlxuICogQHBhcmFtIGluaGVyaXRlZEZyb20gLSBUaGUgbmFtZSBvZiB0aGUgdHlwZSB0aGUgbWVtYmVyIGlzIGluaGVyaXRlZCBmcm9tLCBvciBhbiBlbXB0eSBzdHJpbmcgZm9yIGFuIG93biBtZW1iZXIuXG4gKiBAcGFyYW0gYWxsVHlwZXMgLSBFdmVyeSBkb2N1bWVudGVkIHR5cGUsIGtleWVkIGJ5IGAke25hbWVzcGFjZX0jJHtuYW1lfWAuXG4gKiBAcGFyYW0gY3VycmVudE5hbWVzcGFjZSAtIFRoZSBuYW1lc3BhY2Ugb2YgdGhlIHJlZmVyZW5jaW5nIHBhZ2UsIHByZWZlcnJlZCB3aGVuIHRoZSBuYW1lIGlzIGFtYmlndW91cy5cbiAqIEByZXR1cm5zIFRoZSBsaW5rLCBvciBhbiBlbXB0eSBzdHJpbmcgd2hlbiBubyBwYWdlIGRvY3VtZW50cyB0aGUgbWVtYmVyLlxuICovXG5leHBvcnQgZnVuY3Rpb24gbWVtYmVySHJlZihtZW1iZXJTbHVnU3RyaW5nOiBzdHJpbmcsIGluaGVyaXRlZEZyb206IHN0cmluZywgYWxsVHlwZXM6IE1hcDxzdHJpbmcsIFR5cGVJbmZvPiwgY3VycmVudE5hbWVzcGFjZT86IHN0cmluZyk6IHN0cmluZyB7XG4gIGlmICghaW5oZXJpdGVkRnJvbSkge1xuICAgIC8vIE93biAobm9uLWluaGVyaXRlZCkgbWVtYmVyIOKAlCBgZ2VuZXJhdGVNZW1iZXJQYWdlc2AgYWx3YXlzIGVtaXRzIGl0cyBwYWdlIG9uIHRoaXMgc2FtZSBwYWdlLlxuICAgIHJldHVybiBgLi8ke21lbWJlclNsdWdTdHJpbmd9L2A7XG4gIH1cbiAgY29uc3QgcGFyZW50SW5mbyA9IGZpbmRUeXBlKGFsbFR5cGVzLCBpbmhlcml0ZWRGcm9tLCBjdXJyZW50TmFtZXNwYWNlKTtcbiAgaWYgKCFwYXJlbnRJbmZvIHx8ICFkb2VzTWVtYmVyUGFnZUV4aXN0KHBhcmVudEluZm8ubmFtZXNwYWNlLCBwYXJlbnRJbmZvLm5hbWUsIG1lbWJlclNsdWdTdHJpbmcpKSB7XG4gICAgLy8gVGhlIGRlY2xhcmluZyBwYXJlbnQgaGFzIG5vIGdlbmVyYXRlZCBwYWdlIGZvciB0aGlzIG1lbWJlciAoaXQgaW5oZXJpdGVkIHRoZSBtZW1iZXIgdG9vLCBvciBpc1xuICAgIC8vIHVuZG9jdW1lbnRlZCkuIFJldHVybiBubyBocmVmIHNvIHRoZSBjYWxsZXIgcmVuZGVycyBwbGFpbiB0ZXh0IGluc3RlYWQgb2YgYSBicm9rZW4gbGluay5cbiAgICByZXR1cm4gJyc7XG4gIH1cbiAgY29uc3QgcGFyZW50TnNEaXJlY3RvcnkgPSBnZXROYW1lc3BhY2VEaXJlY3RvcnkocGFyZW50SW5mby5uYW1lc3BhY2UpO1xuICByZXR1cm4gYCR7Z2V0QmFzZVBhdGgoKX0vYXBpLyR7cGFyZW50TnNEaXJlY3Rvcnl9LyR7dG9UeXBlUm91dGVTZWdtZW50KHBhcmVudEluZm8ubmFtZXNwYWNlLCBwYXJlbnRJbmZvLm5hbWUpfS8ke21lbWJlclNsdWdTdHJpbmd9L2A7XG59XG5cbi8qKlxuICogUG9wdWxhdGUge0BsaW5rIGRvZXNNZW1iZXJQYWdlRXhpc3R9LiBNaXJyb3JzIGBnZW5lcmF0ZU1lbWJlclBhZ2VzYCdzIG93biBmaWx0ZXJpbmcgZXhhY3RseSAob25lIHBhZ2VcbiAqIHBlciBub24taW5oZXJpdGVkIHByb3BlcnR5LCBvbmUgcGVyIG5vbi1pbmhlcml0ZWQgbWV0aG9kIG92ZXJsb2FkIGtleSkuIE11c3QgcnVuIG9uY2UgYmVmb3JlIGFueVxuICogbGluayBpcyByZW5kZXJlZC5cbiAqXG4gKiBAcGFyYW0gdHlwZXMgLSBUaGUgZG9jdW1lbnRlZCB0eXBlcywga2V5ZWQgYnkgcXVhbGlmaWVkIGlkLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVnaXN0ZXJNZW1iZXJQYWdlcyh0eXBlczogTWFwPHN0cmluZywgVHlwZUluZm8+KTogdm9pZCB7XG4gIGdlbmVyYXRlZE1lbWJlclBhZ2VzLmNsZWFyKCk7XG4gIGZvciAoY29uc3QgaW5mbyBvZiB0eXBlcy52YWx1ZXMoKSkge1xuICAgIGZvciAoY29uc3QgcHJvcGVydHkgb2YgaW5mby5wcm9wZXJ0aWVzKSB7XG4gICAgICBpZiAoIXByb3BlcnR5LmluaGVyaXRlZEZyb20pIHtcbiAgICAgICAgZ2VuZXJhdGVkTWVtYmVyUGFnZXMuYWRkKGAke2luZm8ubmFtZXNwYWNlfSMke2luZm8ubmFtZX0jJHttZW1iZXJSb3V0ZVNlZ21lbnQocHJvcGVydHkubmFtZSl9YCk7XG4gICAgICB9XG4gICAgfVxuICAgIGNvbnN0IG92ZXJsb2FkS2V5cyA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuICAgIGZvciAoY29uc3QgbWV0aG9kIG9mIGluZm8ubWV0aG9kcykge1xuICAgICAgaWYgKCFtZXRob2QuaW5oZXJpdGVkRnJvbSkge1xuICAgICAgICBvdmVybG9hZEtleXMuYWRkKG1ldGhvZC5vdmVybG9hZEtleSk7XG4gICAgICB9XG4gICAgfVxuICAgIGZvciAoY29uc3Qgb3ZlcmxvYWRLZXkgb2Ygb3ZlcmxvYWRLZXlzKSB7XG4gICAgICBnZW5lcmF0ZWRNZW1iZXJQYWdlcy5hZGQoYCR7aW5mby5uYW1lc3BhY2V9IyR7aW5mby5uYW1lfSMke292ZXJsb2FkUm91dGVTZWdtZW50KG92ZXJsb2FkS2V5KX1gKTtcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBGb3IgZXZlcnkgZG9jdW1lbnRlZCB0eXBlIGFzc2lnbiBCT1RIOlxuICogIC0gYSBsb3dlcmNhc2VkLCBudW1lcmljYWxseS1kaXNhbWJpZ3VhdGVkIEZJTEUgc2VnbWVudCAoc28gYFR5cGVBc3NlcnRlcmAgdnMgYHR5cGVBc3NlcnRlcmAsIHdoaWNoXG4gKiAgICBib3RoIGxvd2VyY2FzZSB0byBgdHlwZWFzc2VydGVyYCwgYmVjb21lIGB0eXBlYXNzZXJ0ZXJgIC8gYHR5cGVhc3NlcnRlci0yYCBvbiBkaXNrIGFuZCBuZXZlclxuICogICAgY29sbGlkZSBvbiBXaW5kb3dzJyBjYXNlLWluc2Vuc2l0aXZlIGZpbGVzeXN0ZW0pLCBhbmRcbiAqICAtIGEgY2FzZS1QUkVTRVJWRUQgUk9VVEUgc2VnbWVudCAoYFR5cGVBc3NlcnRlcmAgLyBgdHlwZUFzc2VydGVyYCkgdXNlZCBmb3IgdGhlIGV4cGxpY2l0IGBzbHVnOmBcbiAqICAgIGZyb250bWF0dGVyIGFuZCBldmVyeSBpbnRlcm5hbCBsaW5rLCBzbyB0aGUgVVJMcyBzdGF5IHByZXR0eSBhbmQgbmF0dXJhbGx5IGRpc3RpbmN0LlxuICogVGhlIHJvdXRlIGRlY291cGxlcyBmcm9tIHRoZSBmaWxlIHBhdGggdmlhIHRoZSBgc2x1ZzpgIGZyb250bWF0dGVyLCBzbyBubyBgLTJgIHN1ZmZpeCBsZWFrcyBpbnRvXG4gKiBVUkxzLiBBbHNvIHdhcm5zIGFib3V0IG1lbWJlci1zbHVnIGNvbGxpc2lvbnMgd2l0aGluIGEgdHlwZS4gTXVzdCBydW4gb25jZSBiZWZvcmUgYW55IHBhZ2UvbGluay5cbiAqXG4gKiBAcGFyYW0gdHlwZXMgLSBUaGUgZG9jdW1lbnRlZCB0eXBlcywga2V5ZWQgYnkgcXVhbGlmaWVkIGlkLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVnaXN0ZXJSb3V0ZVNlZ21lbnRzKHR5cGVzOiBNYXA8c3RyaW5nLCBUeXBlSW5mbz4pOiB2b2lkIHtcbiAgdHlwZUZpbGVTZWdtZW50cy5jbGVhcigpO1xuICB0eXBlUm91dGVTZWdtZW50cy5jbGVhcigpO1xuICBjb25zdCBieU5hbWVzcGFjZSA9IG5ldyBNYXA8c3RyaW5nLCBUeXBlSW5mb1tdPigpO1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgdW5pY29ybi9wcmVmZXItZ3JvdXAtYnkgLS0gYE1hcC5ncm91cEJ5YCBpcyBFUzIwMjQsIGFuZCB0aGUgc2hhcmVkIGB0c2NvbmZpZy5qc29uYCB0eXBlcyBvbmx5IEVTMjAyMi5cbiAgZm9yIChjb25zdCBpbmZvIG9mIHR5cGVzLnZhbHVlcygpKSB7XG4gICAgY29uc3QgbGlzdCA9IGJ5TmFtZXNwYWNlLmdldChpbmZvLm5hbWVzcGFjZSkgPz8gW107XG4gICAgbGlzdC5wdXNoKGluZm8pO1xuICAgIGJ5TmFtZXNwYWNlLnNldChpbmZvLm5hbWVzcGFjZSwgbGlzdCk7XG4gIH1cbiAgZm9yIChjb25zdCBbbmFtZXNwYWNlLCBpbmZvc10gb2YgYnlOYW1lc3BhY2UpIHtcbiAgICBjb25zdCB1c2VkRmlsZVNlZ21lbnRzID0gbmV3IFNldDxzdHJpbmc+KCk7XG4gICAgY29uc3QgdXNlZFJvdXRlU2VnbWVudHMgPSBuZXcgU2V0PHN0cmluZz4oKTtcbiAgICBjb25zdCBzb3J0ZWQgPSBbLi4uaW5mb3NdLnNvcnQoKGFscGhhLCBicmF2bykgPT4gYWxwaGEubmFtZS5sb2NhbGVDb21wYXJlKGJyYXZvLm5hbWUpKTtcbiAgICBmb3IgKGNvbnN0IGluZm8gb2Ygc29ydGVkKSB7XG4gICAgICB0eXBlRmlsZVNlZ21lbnRzLnNldChgJHtuYW1lc3BhY2V9IyR7aW5mby5uYW1lfWAsIGRpc2FtYmlndWF0ZSh0b1JvdXRlU2VnbWVudChpbmZvLm5hbWUpLCB1c2VkRmlsZVNlZ21lbnRzLCAoc2VnbWVudCkgPT4gc2VnbWVudCkpO1xuXG4gICAgICBjb25zdCByb3V0ZUJhc2UgPSB0b1JvdXRlU2VnbWVudFByZXNlcnZlQ2FzZShpbmZvLm5hbWUpO1xuICAgICAgLy8gRGlzYW1iaWd1YXRlIFJPVVRFUyBjYXNlLUlOU0VOU0lUSVZFTFk6IHRoZSBzbHVnIGJlY29tZXMgQXN0cm8ncyBvbi1kaXNrIG91dHB1dCBwYXRoLCBzb1xuICAgICAgLy8gYFR5cGVBc3NlcnRlcmAgYW5kIGB0eXBlQXNzZXJ0ZXJgIChzYW1lIG5hbWUgbW9kdWxvIGNhc2UpIHdvdWxkIGNvbGxpZGUgd2hlbiB0aGUgc2l0ZSBpcyBidWlsdFxuICAgICAgLy8gb24gYSBjYXNlLWluc2Vuc2l0aXZlIGZpbGVzeXN0ZW0gKFdpbmRvd3MvbWFjT1MpLCBzaWxlbnRseSBvdmVyd3JpdGluZyBvbmUgcGFnZSBzbyBldmVyeSBsaW5rXG4gICAgICAvLyB0byBpdCA0MDRzLiBDb21wYXJpbmcgbG93ZXJjYXNlZCBrZXlzIGZvcmNlcyB0aGUgc2Vjb25kIG9jY3VycmVuY2UgdG8gdGFrZSBhIGAtMmAgc3VmZml4LlxuICAgICAgY29uc3Qgcm91dGVTZWdtZW50ID0gZGlzYW1iaWd1YXRlKHJvdXRlQmFzZSwgdXNlZFJvdXRlU2VnbWVudHMsIChzZWdtZW50KSA9PiBzZWdtZW50LnRvTG93ZXJDYXNlKCkpO1xuICAgICAgdHlwZVJvdXRlU2VnbWVudHMuc2V0KGAke25hbWVzcGFjZX0jJHtpbmZvLm5hbWV9YCwgcm91dGVTZWdtZW50KTtcbiAgICAgIGlmIChyb3V0ZVNlZ21lbnQgIT09IHJvdXRlQmFzZSkge1xuICAgICAgICBjb25zb2xlLndhcm4oYERpc2FtYmlndWF0ZWQgUk9VVEUgZm9yIFwiJHtuYW1lc3BhY2V9IyR7aW5mby5uYW1lfVwiOiBcIiR7cm91dGVCYXNlfVwiIC0+IFwiJHtyb3V0ZVNlZ21lbnR9XCIgKHNsdWcgY29sbGlzaW9uKS5gKTtcbiAgICAgIH1cbiAgICAgIHdhcm5NZW1iZXJTbHVnQ29sbGlzaW9ucyhpbmZvLCBuYW1lc3BhY2UpO1xuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIFJlbmRlciBhbiBgQGV4YW1wbGVgIGJsb2NrIGFzIE1EWC4gSWYgdGhlIGV4YW1wbGUgYWxyZWFkeSBjb250YWlucyBhIGZlbmNlZCBjb2RlIGJsb2NrLCBpdCBpc1xuICogbm9ybWFsaXplZCB0aHJvdWdoIHtAbGluayByZW5kZXJNZHhQcm9zZX0gKGNvZGUgcHJlc2VydmVkIHJhdywgc3Vycm91bmRpbmcgcHJvc2UgZXNjYXBlZCk7XG4gKiBvdGhlcndpc2UgdGhlIHJhdyBleGFtcGxlIHRleHQgaXMgd3JhcHBlZCBpbiBhIGB0c2AgY29kZSBmZW5jZSBzbyBpdCBpcyBlbWl0dGVkIGxpdGVyYWxseS5cbiAqXG4gKiBAcGFyYW0gZXhhbXBsZSAtIFRoZSBgQGV4YW1wbGVgIHRleHQuXG4gKiBAcGFyYW0gYWxsVHlwZXMgLSBFdmVyeSBkb2N1bWVudGVkIHR5cGUsIGtleWVkIGJ5IGAke25hbWVzcGFjZX0jJHtuYW1lfWAuXG4gKiBAcGFyYW0gc2VsZk5hbWVzcGFjZSAtIFRoZSBuYW1lc3BhY2Ugb2YgdGhlIHBhZ2UgYmVpbmcgcmVuZGVyZWQsIHByZWZlcnJlZCB3aGVuIGEgbmFtZSBpcyBhbWJpZ3VvdXMuXG4gKiBAcmV0dXJucyBUaGUgTURYLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVuZGVyRXhhbXBsZU1keChleGFtcGxlOiBzdHJpbmcsIGFsbFR5cGVzOiBNYXA8c3RyaW5nLCBUeXBlSW5mbz4sIHNlbGZOYW1lc3BhY2U/OiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gLyg/Ol58XFxuKVxccyooPzpgYGB8fn5+KS8udGVzdChleGFtcGxlKSA/IHJlbmRlck1keFByb3NlKGV4YW1wbGUsIGFsbFR5cGVzLCBzZWxmTmFtZXNwYWNlKSA6IGBcXGBcXGBcXGB0c1xcbiR7ZXhhbXBsZX1cXG5cXGBcXGBcXGBgO1xufVxuXG4vKipcbiAqIFJlbmRlciBtYXJrZG93biBibG9jayB0ZXh0IChhIGRlc2NyaXB0aW9uLCByZW1hcmtzLCBvciBtb2R1bGUgb3ZlcnZpZXcpIGFzIE1EWC1zYWZlIG1hcmtkb3duLlxuICogRmVuY2VkIGNvZGUgYmxvY2tzIGFyZSByZS1lbWl0dGVkIHZlcmJhdGltIChzdXJyb3VuZGVkIGJ5IGJsYW5rIGxpbmVzLCB3aXRoIGEgbGFuZ3VhZ2UpOyBwcm9zZVxuICogc2VnbWVudHMgaGF2ZSB0aGVpciBpbmxpbmUgbGluayB0YWdzIHJlc29sdmVkIGFuZCB0aGVpciBNRFgtdW5zYWZlIGNoYXJhY3RlcnMgZXNjYXBlZC5cbiAqXG4gKiBAcGFyYW0gdGV4dCAtIFRoZSB0ZXh0LlxuICogQHBhcmFtIGFsbFR5cGVzIC0gRXZlcnkgZG9jdW1lbnRlZCB0eXBlLCBrZXllZCBieSBgJHtuYW1lc3BhY2V9IyR7bmFtZX1gLlxuICogQHBhcmFtIHNlbGZOYW1lc3BhY2UgLSBUaGUgbmFtZXNwYWNlIG9mIHRoZSBwYWdlIGJlaW5nIHJlbmRlcmVkLCBwcmVmZXJyZWQgd2hlbiBhIG5hbWUgaXMgYW1iaWd1b3VzLlxuICogQHJldHVybnMgVGhlIE1EWC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlbmRlck1keFByb3NlKHRleHQ6IHN0cmluZywgYWxsVHlwZXM6IE1hcDxzdHJpbmcsIFR5cGVJbmZvPiwgc2VsZk5hbWVzcGFjZT86IHN0cmluZyk6IHN0cmluZyB7XG4gIGNvbnN0IG91dDogc3RyaW5nW10gPSBbXTtcbiAgZm9yIChjb25zdCBzZWcgb2Ygc2VnbWVudE1hcmtkb3duKHRleHQpKSB7XG4gICAgaWYgKHNlZy50eXBlID09PSAnY29kZScpIHtcbiAgICAgIG91dC5wdXNoKCcnLCBgXFxgXFxgXFxgJHtzZWcubGFuZyB8fCAndHMnfWAsIHNlZy50ZXh0LCAnYGBgJywgJycpO1xuICAgIH0gZWxzZSB7XG4gICAgICBvdXQucHVzaChlc2NhcGVNZHhQcm9zZShyZXNvbHZlTGlua3Moc2VnLnRleHQsIGFsbFR5cGVzLCBzZWxmTmFtZXNwYWNlKSkpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gb3V0LmpvaW4oJ1xcbicpLnJlcGxhY2VBbGwoL1xcbnszLH0vZywgJ1xcblxcbicpLnRyaW0oKTtcbn1cblxuLyoqXG4gKiBSZW5kZXIgYSB0eXBlIHN0cmluZyB3aXRoIGNsaWNrYWJsZSBsaW5rcyBmb3Iga25vd24gdHlwZXNcbiAqXG4gKiBAcGFyYW0gdHlwZVRleHQgLSBUaGUgdHlwZSB0ZXh0LlxuICogQHBhcmFtIGFsbFR5cGVzIC0gRXZlcnkgZG9jdW1lbnRlZCB0eXBlLCBrZXllZCBieSBgJHtuYW1lc3BhY2V9IyR7bmFtZX1gLlxuICogQHBhcmFtIHNlbGZUeXBlTmFtZSAtIFRoZSBuYW1lIG9mIHRoZSB0eXBlIHRoZSBwYWdlIGRvY3VtZW50cywgd2hpY2ggYHRoaXNgIGxpbmtzIHRvLlxuICogQHBhcmFtIHNlbGZOYW1lc3BhY2UgLSBUaGUgbmFtZXNwYWNlIG9mIHRoZSBwYWdlIGJlaW5nIHJlbmRlcmVkLCBwcmVmZXJyZWQgd2hlbiBhIG5hbWUgaXMgYW1iaWd1b3VzLlxuICogQHJldHVybnMgVGhlIHR5cGUgdGV4dCB3aXRoIG1hcmtkb3duIGxpbmtzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVuZGVyVHlwZVdpdGhMaW5rcyh0eXBlVGV4dDogc3RyaW5nLCBhbGxUeXBlczogTWFwPHN0cmluZywgVHlwZUluZm8+LCBzZWxmVHlwZU5hbWU/OiBzdHJpbmcsIHNlbGZOYW1lc3BhY2U/OiBzdHJpbmcpOiBzdHJpbmcge1xuICAvLyBQcmUtcGFzczogbGluayBPYmplY3QubWV0aG9kIHBhdHRlcm5zIHRvIE1ETiBiZWZvcmUgd29yZC1ieS13b3JkIGxpbmtpbmdcbiAgY29uc3QgTUROX09CSkVDVF9CQVNFID0gJ2h0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2RvY3MvV2ViL0phdmFTY3JpcHQvUmVmZXJlbmNlL0dsb2JhbF9PYmplY3RzL09iamVjdCc7XG4gIGNvbnN0IHdpdGhPYmplY3RNZXRob2RzID0gcmVwbGFjZVJlZ0V4cE1hdGNoZXModHlwZVRleHQsIC9cXGJPYmplY3RcXC4oPzxtZXRob2Q+W2EtekEtWl1bYS16QS1aMC05XSopXFxiL2csIChtYXRjaCkgPT4ge1xuICAgIGNvbnN0IG1ldGhvZCA9IGdldE1hbmRhdG9yeU5hbWVkR3JvdXAobWF0Y2gsICdtZXRob2QnKTtcbiAgICByZXR1cm4gYFtPYmplY3RdKCR7TUROX09CSkVDVF9CQVNFfSkuWyR7bWV0aG9kfV0oJHtNRE5fT0JKRUNUX0JBU0V9LyR7bWV0aG9kfSlgO1xuICB9KTtcbiAgLy8gTWFpbiBwYXNzOiBsaW5rIGluZGl2aWR1YWwgdHlwZSBuYW1lcywgc2tpcHBpbmcgdGV4dCBhbHJlYWR5IGluc2lkZSBtYXJrZG93biBsaW5rc1xuICByZXR1cm4gcmVwbGFjZVJlZ0V4cE1hdGNoZXMoXG4gICAgd2l0aE9iamVjdE1ldGhvZHMsXG4gICAgL1xcW1teXFxdXStcXF1cXChbXildK1xcKXxcXGIoPzx0eXBlTmFtZT5bYS16QS1aXVthLXpBLVowLTldKilcXGIvZyxcbiAgICAobWF0Y2gpID0+IHtcbiAgICAgIGNvbnN0IHR5cGVOYW1lID0gZ2V0T3B0aW9uYWxOYW1lZEdyb3VwKG1hdGNoLCAndHlwZU5hbWUnKTtcbiAgICAgIGlmICh0eXBlTmFtZSA9PT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gbWF0Y2hbMF07XG4gICAgICB9XG4gICAgICAvLyBMaW5rIGB0aGlzYCByZXR1cm4gdHlwZSB0byB0aGUgY3VycmVudCB0eXBlJ3MgcGFnZVxuICAgICAgaWYgKHR5cGVOYW1lID09PSAndGhpcycgJiYgc2VsZlR5cGVOYW1lKSB7XG4gICAgICAgIGNvbnN0IHNlbGZJbmZvID0gZmluZFR5cGUoYWxsVHlwZXMsIHNlbGZUeXBlTmFtZSwgc2VsZk5hbWVzcGFjZSk7XG4gICAgICAgIGlmIChzZWxmSW5mbykge1xuICAgICAgICAgIHJldHVybiBgWyR7dHlwZU5hbWV9XSgke3R5cGVIcmVmKHNlbGZJbmZvKX0pYDtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBTa2lwIGdlbmVyaWMgdHlwZSBwYXJhbWV0ZXJzXG4gICAgICBpZiAoR0VORVJJQ19UWVBFX1BBUkFNUy5oYXModHlwZU5hbWUpKSB7XG4gICAgICAgIHJldHVybiB0eXBlTmFtZTtcbiAgICAgIH1cblxuICAgICAgLy8gQ2hlY2sgb3VyIG93biB0eXBlcyBmaXJzdFxuICAgICAgY29uc3QgaW5mbyA9IGZpbmRUeXBlKGFsbFR5cGVzLCB0eXBlTmFtZSwgc2VsZk5hbWVzcGFjZSk7XG4gICAgICBpZiAoaW5mbykge1xuICAgICAgICByZXR1cm4gYFske3R5cGVOYW1lfV0oJHt0eXBlSHJlZihpbmZvKX0pYDtcbiAgICAgIH1cblxuICAgICAgLy8gQSB0eXBlIGFub3RoZXIgZG9jdW1lbnRlZCBwYWNrYWdlIGRlY2xhcmVzLCBvciBvbmUgdGhlIHNpdGUgbWFwcyBpdHNlbGZcbiAgICAgIGNvbnN0IGV4dGVybmFsVXJsID0gcmVzb2x2ZUV4dGVybmFsVHlwZVVybCh0eXBlTmFtZSk7XG4gICAgICBpZiAoZXh0ZXJuYWxVcmwpIHtcbiAgICAgICAgcmV0dXJuIGBbJHt0eXBlTmFtZX1dKCR7ZXh0ZXJuYWxVcmx9KWA7XG4gICAgICB9XG5cbiAgICAgIC8vIFR5cGVTY3JpcHQgdXRpbGl0eSB0eXBlc1xuICAgICAgY29uc3QgdHNVcmwgPSByZXNvbHZlVHNVdGlsaXR5VXJsKHR5cGVOYW1lKTtcbiAgICAgIGlmICh0c1VybCkge1xuICAgICAgICByZXR1cm4gYFske3R5cGVOYW1lfV0oJHt0c1VybH0pYDtcbiAgICAgIH1cblxuICAgICAgLy8gSlMgZ2xvYmFsIHR5cGVzIChBcnJheSwgUHJvbWlzZSwgTWFwLCBldGMuKVxuICAgICAgY29uc3QgZ2xvYmFsVXJsID0gT2JqZWN0Lmhhc093bihUU19HTE9CQUxfVFlQRVMsIHR5cGVOYW1lKSA/IFRTX0dMT0JBTF9UWVBFU1t0eXBlTmFtZV0gOiB1bmRlZmluZWQ7XG4gICAgICBpZiAoZ2xvYmFsVXJsKSB7XG4gICAgICAgIHJldHVybiBgWyR7dHlwZU5hbWV9XSgke2dsb2JhbFVybH0pYDtcbiAgICAgIH1cblxuICAgICAgLy8gV2ViIEFQSSAvIE1ETiB0eXBlc1xuICAgICAgY29uc3QgbWRuVXJsID0gcmVzb2x2ZVdlYkFwaVVybCh0eXBlTmFtZSk7XG4gICAgICBpZiAobWRuVXJsKSB7XG4gICAgICAgIHJldHVybiBgWyR7dHlwZU5hbWV9XSgke21kblVybH0pYDtcbiAgICAgIH1cblxuICAgICAgLy8gVHlwZVNjcmlwdCBwcmltaXRpdmUgdHlwZXNcbiAgICAgIGNvbnN0IHByaW1pdGl2ZVVybCA9IE9iamVjdC5oYXNPd24oVFNfUFJJTUlUSVZFX1RZUEVTLCB0eXBlTmFtZSkgPyBUU19QUklNSVRJVkVfVFlQRVNbdHlwZU5hbWVdIDogdW5kZWZpbmVkO1xuICAgICAgcmV0dXJuIHByaW1pdGl2ZVVybCA/IGBbJHt0eXBlTmFtZX1dKCR7cHJpbWl0aXZlVXJsfSlgIDogdHlwZU5hbWU7XG4gICAgfVxuICApO1xufVxuXG4vKipcbiAqIFJlc29sdmUgYSB0eXBlIG5vIHBhZ2Ugb2YgdGhpcyBzaXRlIGRvY3VtZW50cyB0byB0aGUgcGFnZSB0aGF0IGRvZXM6IGFub3RoZXIgZG9jdW1lbnRlZCBwYWNrYWdlJ3Mgc2l0ZSwgb3IgYW5cbiAqIGVudHJ5IG9mIHRoZSBzaXRlJ3Mgb3duIGBleHRlcm5hbFR5cGVMaW5rc2Agc2V0dGluZy5cbiAqXG4gKiBAcGFyYW0gbmFtZSAtIFRoZSB0eXBlJ3MgbmFtZS5cbiAqIEByZXR1cm5zIFRoZSBVUkwsIG9yIGB1bmRlZmluZWRgIHdoZW4gbmVpdGhlciBrbm93cyB0aGUgdHlwZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlc29sdmVFeHRlcm5hbFR5cGVVcmwobmFtZTogc3RyaW5nKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgcmV0dXJuIGdldFBhY2thZ2VUeXBlVXJsKG5hbWUpID8/IGdldEFwaURvY1NldHRpbmdzKCkuZXh0ZXJuYWxUeXBlTGlua3MuZ2V0KG5hbWUpO1xufVxuXG4vKipcbiAqIFJlc29sdmUgYEBsaW5rYCB0YWdzLCB3aXRoIG9yIHdpdGhvdXQgYSBgfCBkaXNwbGF5IHRleHRgIHBhcnQsIGluIGRlc2NyaXB0aW9uIHRleHRcbiAqXG4gKiBAcGFyYW0gdGV4dCAtIFRoZSB0ZXh0LlxuICogQHBhcmFtIGFsbFR5cGVzIC0gRXZlcnkgZG9jdW1lbnRlZCB0eXBlLCBrZXllZCBieSBgJHtuYW1lc3BhY2V9IyR7bmFtZX1gLlxuICogQHBhcmFtIHNlbGZOYW1lc3BhY2UgLSBUaGUgbmFtZXNwYWNlIG9mIHRoZSBwYWdlIGJlaW5nIHJlbmRlcmVkLCBwcmVmZXJyZWQgd2hlbiBhIG5hbWUgaXMgYW1iaWd1b3VzLlxuICogQHJldHVybnMgVGhlIHRleHQgd2l0aCBtYXJrZG93biBsaW5rcy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlc29sdmVMaW5rcyh0ZXh0OiBzdHJpbmcsIGFsbFR5cGVzOiBNYXA8c3RyaW5nLCBUeXBlSW5mbz4sIHNlbGZOYW1lc3BhY2U/OiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gcmVwbGFjZVJlZ0V4cE1hdGNoZXModGV4dCwgL1xce0BsaW5rXFxzKyg/PHRhcmdldD5bXnx9XSs/KSg/OlxccypcXHxcXHMqKD88ZGlzcGxheT5bXn1dKz8pKT9cXH0vZywgKG1hdGNoKSA9PiB7XG4gICAgY29uc3QgdGFyZ2V0ID0gZ2V0TWFuZGF0b3J5TmFtZWRHcm91cChtYXRjaCwgJ3RhcmdldCcpLnRyaW0oKTtcbiAgICBjb25zdCBkaXNwbGF5ID0gKGdldE9wdGlvbmFsTmFtZWRHcm91cChtYXRjaCwgJ2Rpc3BsYXknKT8udHJpbSgpID8/IHRhcmdldCkucmVwbGFjZUFsbCgvXFxcXCg/PVs8Pnt9XSkvZywgJycpO1xuXG4gICAgLy8gSGFuZGxlIFR5cGUubWVtYmVyIHJlZmVyZW5jZXMgKGUuZy4sIFBsdWdpbk5vdGljZUNvbXBvbmVudC5zaG93Tm90aWNlKVxuICAgIGNvbnN0IGRvdE1hdGNoID0gL14oPzx0eXBlTmFtZT5bQS1aYS16XVxcdyopXFwuKD88bWVtYmVyTmFtZT5cXHcrKSQvLmV4ZWModGFyZ2V0KTtcbiAgICBpZiAoZG90TWF0Y2gpIHtcbiAgICAgIGNvbnN0IHR5cGVOYW1lID0gZ2V0TWFuZGF0b3J5TmFtZWRHcm91cChkb3RNYXRjaCwgJ3R5cGVOYW1lJyk7XG4gICAgICBjb25zdCBtZW1iZXJOYW1lID0gZ2V0TWFuZGF0b3J5TmFtZWRHcm91cChkb3RNYXRjaCwgJ21lbWJlck5hbWUnKTtcbiAgICAgIGNvbnN0IHR5cGVJbmZvID0gZmluZFR5cGUoYWxsVHlwZXMsIHR5cGVOYW1lLCBzZWxmTmFtZXNwYWNlKTtcbiAgICAgIGlmICh0eXBlSW5mbyAmJiBkb2VzTWVtYmVyUGFnZUV4aXN0KHR5cGVJbmZvLm5hbWVzcGFjZSwgdHlwZUluZm8ubmFtZSwgbWVtYmVyUm91dGVTZWdtZW50KG1lbWJlck5hbWUpKSkge1xuICAgICAgICBjb25zdCB0YXJnZXROc0RpcmVjdG9yeSA9IGdldE5hbWVzcGFjZURpcmVjdG9yeSh0eXBlSW5mby5uYW1lc3BhY2UpO1xuICAgICAgICByZXR1cm4gYFske2Rpc3BsYXl9XSgke2dldEJhc2VQYXRoKCl9L2FwaS8ke3RhcmdldE5zRGlyZWN0b3J5fS8ke3RvVHlwZVJvdXRlU2VnbWVudCh0eXBlSW5mby5uYW1lc3BhY2UsIHR5cGVJbmZvLm5hbWUpfS8ke21lbWJlclJvdXRlU2VnbWVudChtZW1iZXJOYW1lKX0vKWA7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gSGFuZGxlIHNpbXBsZSB0eXBlIHJlZmVyZW5jZXMg4oCUIGlmIGRpc3BsYXkgY29udGFpbnMgZ2VuZXJpYyBhcmdzLCBsaW5rIGVhY2ggdHlwZSBpbmRpdmlkdWFsbHlcbiAgICBjb25zdCBpbmZvID0gZmluZFR5cGUoYWxsVHlwZXMsIHRhcmdldCwgc2VsZk5hbWVzcGFjZSk7XG4gICAgaWYgKGluZm8pIHtcbiAgICAgIHJldHVybiBkaXNwbGF5ICE9PSB0YXJnZXQgJiYgZGlzcGxheS5pbmNsdWRlcygnPCcpID8gcmVuZGVyVHlwZVdpdGhMaW5rcyhkaXNwbGF5LCBhbGxUeXBlcywgdW5kZWZpbmVkLCBzZWxmTmFtZXNwYWNlKSA6IGBbJHtkaXNwbGF5fV0oJHt0eXBlSHJlZihpbmZvKX0pYDtcbiAgICB9XG5cbiAgICBjb25zdCBleHRlcm5hbFVybCA9IHJlc29sdmVFeHRlcm5hbFR5cGVVcmwodGFyZ2V0KTtcbiAgICByZXR1cm4gZXh0ZXJuYWxVcmwgPyBgWyR7ZGlzcGxheX1dKCR7ZXh0ZXJuYWxVcmx9KWAgOiBgXFxgJHtkaXNwbGF5fVxcYGA7XG4gIH0pO1xufVxuXG4vKipcbiAqIFJlc29sdmVzIGEgVHlwZVNjcmlwdCB1dGlsaXR5IHR5cGUgdG8gaXRzIGhhbmRib29rIGVudHJ5LlxuICpcbiAqIEBwYXJhbSBuYW1lIC0gVGhlIHR5cGUncyBuYW1lLlxuICogQHJldHVybnMgVGhlIGhhbmRib29rIFVSTCwgb3IgYHVuZGVmaW5lZGAgd2hlbiBpdCBpcyBub3QgYSB1dGlsaXR5IHR5cGUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZXNvbHZlVHNVdGlsaXR5VXJsKG5hbWU6IHN0cmluZyk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gIGNvbnN0IGhhc2ggPSBUU19VVElMSVRZX1RZUEVTLmdldChuYW1lKTtcbiAgaWYgKGhhc2gpIHtcbiAgICBpZiAoWydJdGVyYWJsZSddLmluY2x1ZGVzKG5hbWUpKSB7XG4gICAgICByZXR1cm4gYGh0dHBzOi8vd3d3LnR5cGVzY3JpcHRsYW5nLm9yZy9kb2NzL2hhbmRib29rL2l0ZXJhdG9ycy1hbmQtZ2VuZXJhdG9ycy5odG1sIyR7aGFzaH1gO1xuICAgIH1cbiAgICBjb25zdCBoYW5kYm9va1BhZ2UgPSBbJ0NhcGl0YWxpemUnLCAnTG93ZXJjYXNlJywgJ1VuY2FwaXRhbGl6ZScsICdVcHBlcmNhc2UnXS5pbmNsdWRlcyhuYW1lKSA/ICcyL3RlbXBsYXRlLWxpdGVyYWwtdHlwZXMnIDogJ3V0aWxpdHktdHlwZXMnOyAvLyBDc3BlbGw6ZGlzYWJsZS1saW5lXG4gICAgcmV0dXJuIGBodHRwczovL3d3dy50eXBlc2NyaXB0bGFuZy5vcmcvZG9jcy9oYW5kYm9vay8ke2hhbmRib29rUGFnZX0uaHRtbCMke2hhc2h9YDtcbiAgfVxuICByZXR1cm4gdW5kZWZpbmVkO1xufVxuXG4vKipcbiAqIFJlc29sdmVzIGEgV2ViIEFQSSB0eXBlIHRvIGl0cyBNRE4gcGFnZS5cbiAqXG4gKiBAcGFyYW0gbmFtZSAtIFRoZSB0eXBlJ3MgbmFtZS5cbiAqIEByZXR1cm5zIFRoZSBNRE4gVVJMLCBvciBgdW5kZWZpbmVkYCB3aGVuIGl0IGlzIG5vdCBhIGtub3duIFdlYiBBUEkgdHlwZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlc29sdmVXZWJBcGlVcmwobmFtZTogc3RyaW5nKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgaWYgKCFPYmplY3QuaGFzT3duKG1vZHVsZVN0YXRlLndlYkFwaVR5cGVzLCBuYW1lKSkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgY29uc3QgZW50cnkgPSBtb2R1bGVTdGF0ZS53ZWJBcGlUeXBlc1tuYW1lXTtcbiAgaWYgKHR5cGVvZiBlbnRyeSA9PT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gZW50cnk7XG4gIH1cbiAgaWYgKHR5cGVvZiBlbnRyeSA9PT0gJ29iamVjdCcgJiYgZW50cnkgIT09IG51bGwgJiYgJ3VybCcgaW4gZW50cnkpIHtcbiAgICBjb25zdCB0eXBlZEVudHJ5ID0gZW50cnkgYXMgV2ViQXBpRW50cnk7XG4gICAgcmV0dXJuIHR5cGVkRW50cnkudXJsO1xuICB9XG4gIHJldHVybiB1bmRlZmluZWQ7XG59XG5cbi8qKlxuICogUmVzb2x2ZSB0aGUgbG93ZXJjYXNlZCBPTi1ESVNLIHNlZ21lbnQgZm9yIGEgdHlwZSAoZmlsZSBwYXRoICsgY29tcG9uZW50LWltcG9ydCByZWxhdGl2ZSBwYXRoKS5cbiAqXG4gKiBAcGFyYW0gbmFtZXNwYWNlIC0gVGhlIHR5cGUncyBuYW1lc3BhY2UuXG4gKiBAcGFyYW0gbmFtZSAtIFRoZSB0eXBlJ3MgbmFtZS5cbiAqIEByZXR1cm5zIFRoZSBzZWdtZW50LlxuICovXG5leHBvcnQgZnVuY3Rpb24gdG9UeXBlRmlsZVNlZ21lbnQobmFtZXNwYWNlOiBzdHJpbmcsIG5hbWU6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiB0eXBlRmlsZVNlZ21lbnRzLmdldChgJHtuYW1lc3BhY2V9IyR7bmFtZX1gKSA/PyB0b1JvdXRlU2VnbWVudChuYW1lKTtcbn1cblxuLyoqXG4gKiBSZXNvbHZlIHRoZSBjYXNlLXByZXNlcnZlZCBVUkwvUk9VVEUgc2VnbWVudCBmb3IgYSB0eXBlIChzbHVnIGZyb250bWF0dGVyICsgaW50ZXJuYWwgbGlua3MpLlxuICpcbiAqIEBwYXJhbSBuYW1lc3BhY2UgLSBUaGUgdHlwZSdzIG5hbWVzcGFjZS5cbiAqIEBwYXJhbSBuYW1lIC0gVGhlIHR5cGUncyBuYW1lLlxuICogQHJldHVybnMgVGhlIHNlZ21lbnQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0b1R5cGVSb3V0ZVNlZ21lbnQobmFtZXNwYWNlOiBzdHJpbmcsIG5hbWU6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiB0eXBlUm91dGVTZWdtZW50cy5nZXQoYCR7bmFtZXNwYWNlfSMke25hbWV9YCkgPz8gdG9Sb3V0ZVNlZ21lbnRQcmVzZXJ2ZUNhc2UobmFtZSk7XG59XG5cbi8qKlxuICogQWJzb2x1dGUgbGluayB0byBhIHR5cGUncyBvdmVydmlldyBwYWdlLlxuICpcbiAqIEBwYXJhbSBpbmZvIC0gVGhlIGRvY3VtZW50ZWQgdHlwZS5cbiAqIEByZXR1cm5zIFRoZSBsaW5rLlxuICovXG5leHBvcnQgZnVuY3Rpb24gdHlwZUhyZWYoaW5mbzogVHlwZUluZm8pOiBzdHJpbmcge1xuICByZXR1cm4gYCR7Z2V0QmFzZVBhdGgoKX0vYXBpLyR7Z2V0TmFtZXNwYWNlRGlyZWN0b3J5KGluZm8ubmFtZXNwYWNlKX0vJHt0b1R5cGVSb3V0ZVNlZ21lbnQoaW5mby5uYW1lc3BhY2UsIGluZm8ubmFtZSl9L2A7XG59XG5cbi8qKlxuICogQ3JlYXRlIGFuIGFic29sdXRlIGxpbmsgdG8gYSB0eXBlIHBhZ2VcbiAqXG4gKiBAcGFyYW0gdHlwZU5hbWUgLSBUaGUgdHlwZSdzIG5hbWUuXG4gKiBAcGFyYW0gYWxsVHlwZXMgLSBFdmVyeSBkb2N1bWVudGVkIHR5cGUsIGtleWVkIGJ5IGAke25hbWVzcGFjZX0jJHtuYW1lfWAuXG4gKiBAcGFyYW0gY3VycmVudE5hbWVzcGFjZSAtIFRoZSBuYW1lc3BhY2Ugb2YgdGhlIHJlZmVyZW5jaW5nIHBhZ2UsIHByZWZlcnJlZCB3aGVuIHRoZSBuYW1lIGlzIGFtYmlndW91cy5cbiAqIEByZXR1cm5zIEEgbWFya2Rvd24gbGluaywgb3IgaW5saW5lIGNvZGUgd2hlbiB0aGUgdHlwZSBpcyBub3QgZG9jdW1lbnRlZC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHR5cGVMaW5rKHR5cGVOYW1lOiBzdHJpbmcsIGFsbFR5cGVzOiBNYXA8c3RyaW5nLCBUeXBlSW5mbz4sIGN1cnJlbnROYW1lc3BhY2U/OiBzdHJpbmcpOiBzdHJpbmcge1xuICBjb25zdCBjbGVhbk5hbWUgPSB0eXBlTmFtZS5yZXBsYWNlKC88Lio+JC8sICcnKS50cmltKCk7XG4gIGNvbnN0IGluZm8gPSBmaW5kVHlwZShhbGxUeXBlcywgY2xlYW5OYW1lLCBjdXJyZW50TmFtZXNwYWNlKTtcbiAgcmV0dXJuIGluZm8gPyBgWyR7ZXNjYXBlTWR4QW5nbGVCcmFja2V0cyh0eXBlTmFtZSl9XSgke3R5cGVIcmVmKGluZm8pfSlgIDogYFxcYCR7dHlwZU5hbWV9XFxgYDtcbn1cblxuZnVuY3Rpb24gZGlzYW1iaWd1YXRlKGJhc2U6IHN0cmluZywgdXNlZDogU2V0PHN0cmluZz4sIGtleU9mOiAoc2VnbWVudDogc3RyaW5nKSA9PiBzdHJpbmcpOiBzdHJpbmcge1xuICBsZXQgc2VnbWVudCA9IGJhc2U7XG4gIGNvbnN0IEZJUlNUX0RJU0FNQklHVUFUSU9OX1NVRkZJWCA9IDI7XG4gIGxldCBzdWZmaXggPSBGSVJTVF9ESVNBTUJJR1VBVElPTl9TVUZGSVg7XG4gIHdoaWxlICh1c2VkLmhhcyhrZXlPZihzZWdtZW50KSkpIHtcbiAgICBzZWdtZW50ID0gYCR7YmFzZX0tJHtTdHJpbmcoc3VmZml4KX1gO1xuICAgIHN1ZmZpeCsrO1xuICB9XG4gIHVzZWQuYWRkKGtleU9mKHNlZ21lbnQpKTtcbiAgcmV0dXJuIHNlZ21lbnQ7XG59XG5cbmZ1bmN0aW9uIGdldEJhc2VQYXRoKCk6IHN0cmluZyB7XG4gIHJldHVybiBnZXRBcGlEb2NTZXR0aW5ncygpLmJhc2VQYXRoO1xufVxuXG4vKipcbiAqIFdhcm4gd2hlbiB0d28gZGlzdGluY3QgbWVtYmVycyBvZiBhIHR5cGUgcHJvZHVjZSB0aGUgc2FtZSBtZW1iZXIgc2x1ZyAoVVJML2ZpbGUgc2VnbWVudCkuIFRoZVxuICogb3B0aW9uYWwtYD9gIHN1ZmZpeCBpcyBzdHJpcHBlZCBmaXJzdCwgc28gYSBwcm9wZXJ0eSBhcHBlYXJpbmcgYXMgYm90aCByZXF1aXJlZCBhbmQgb3B0aW9uYWwgaXMgbm90XG4gKiBhIGZhbHNlIHBvc2l0aXZlLlxuICpcbiAqIEBwYXJhbSBpbmZvIC0gVGhlIHR5cGUuXG4gKiBAcGFyYW0gbmFtZXNwYWNlIC0gVGhlIHR5cGUncyBuYW1lc3BhY2UuXG4gKi9cbmZ1bmN0aW9uIHdhcm5NZW1iZXJTbHVnQ29sbGlzaW9ucyhpbmZvOiBUeXBlSW5mbywgbmFtZXNwYWNlOiBzdHJpbmcpOiB2b2lkIHtcbiAgY29uc3Qgc2VlbiA9IG5ldyBNYXA8c3RyaW5nLCBzdHJpbmc+KCk7XG4gIGZ1bmN0aW9uIGNoZWNrKHNsdWc6IHN0cmluZywgb3JpZ2luYWw6IHN0cmluZyk6IHZvaWQge1xuICAgIGNvbnN0IG5vcm1hbGl6ZWQgPSBvcmlnaW5hbC5yZXBsYWNlKC9cXD8kLywgJycpO1xuICAgIGNvbnN0IGV4aXN0aW5nID0gc2Vlbi5nZXQoc2x1Zyk7XG4gICAgaWYgKGV4aXN0aW5nICE9PSB1bmRlZmluZWQgJiYgZXhpc3RpbmcgIT09IG5vcm1hbGl6ZWQpIHtcbiAgICAgIGNvbnNvbGUud2FybihgTWVtYmVyIHJvdXRlIGNvbGxpc2lvbiBpbiBcIiR7bmFtZXNwYWNlfSMke2luZm8ubmFtZX1cIjogXCIke2V4aXN0aW5nfVwiIGFuZCBcIiR7bm9ybWFsaXplZH1cIiBib3RoIG1hcCB0byBcIi8ke3NsdWd9L1wiLmApO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBzZWVuLnNldChzbHVnLCBub3JtYWxpemVkKTtcbiAgfVxuICBmb3IgKGNvbnN0IHByb3BlcnR5IG9mIGluZm8ucHJvcGVydGllcykge1xuICAgIGNoZWNrKG1lbWJlclNsdWcocHJvcGVydHkubmFtZSksIHByb3BlcnR5Lm5hbWUpO1xuICB9XG4gIGZvciAoY29uc3QgbWV0aG9kIG9mIGluZm8ubWV0aG9kcykge1xuICAgIGNoZWNrKG92ZXJsb2FkU2x1ZyhtZXRob2Qub3ZlcmxvYWRLZXkpLCBtZXRob2Qub3ZlcmxvYWRLZXkpO1xuICB9XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQU9BLHFCQUdPO0FBQ1AscUJBQTZCO0FBQzdCLHVCQUFxQjtBQU9yQiwrQkFLTztBQUNQLG1DQUFrQztBQUNsQyxvQ0FHTztBQUNQLDhCQUFrQztBQUNsQyxnQ0FVTztBQVlQLE1BQU0sY0FBMkI7QUFBQSxFQUMvQixhQUFhLENBQUM7QUFDaEI7QUFJQSxNQUFNLG1CQUFtQixvQkFBSSxJ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
|
|
377
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9kb2NzLXNpdGUvYXBpLWRvYy1saW5rLXJlbmRlcmluZy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBmaWxlXG4gKlxuICogVHlwZS1saW5rIHJlbmRlcmluZzogdHVybnMgdHlwZSB0ZXh0IGFuZCBpbmxpbmUgbGluayB0YWdzIGludG8gbWFya2Rvd24gbGlua3MgdG8gZ2VuZXJhdGVkIHBhZ2VzXG4gKiBvciBleHRlcm5hbCByZWZlcmVuY2VzIChUeXBlU2NyaXB0IGhhbmRib29rLCBNRE4gV2ViIEFQSSwgSlMgZ2xvYmFscykuXG4gKi9cblxuaW1wb3J0IHtcbiAgZ2V0TWFuZGF0b3J5TmFtZWRHcm91cCxcbiAgZ2V0T3B0aW9uYWxOYW1lZEdyb3VwXG59IGZyb20gJ0BtbmFvdW1vdi90eXBlc2NyaXB0LWxpYi9yZWctZXhwJztcbmltcG9ydCB7IHJlYWRGaWxlU3luYyB9IGZyb20gJ25vZGU6ZnMnO1xuaW1wb3J0IHsgam9pbiB9IGZyb20gJ25vZGU6cGF0aCc7XG5cbmltcG9ydCB0eXBlIHtcbiAgVHlwZUluZm8sXG4gIFdlYkFwaUVudHJ5XG59IGZyb20gJy4vYXBpLWRvYy10eXBlcy50cyc7XG5cbmltcG9ydCB7XG4gIEdFTkVSSUNfVFlQRV9QQVJBTVMsXG4gIFRTX0dMT0JBTF9UWVBFUyxcbiAgVFNfUFJJTUlUSVZFX1RZUEVTLFxuICBUU19VVElMSVRZX1RZUEVTXG59IGZyb20gJy4vYXBpLWRvYy1jb25zdGFudHMudHMnO1xuaW1wb3J0IHsgZ2V0UGFja2FnZVR5cGVVcmwgfSBmcm9tICcuL2FwaS1kb2MtcGFja2FnZS1zaXRlcy50cyc7XG5pbXBvcnQge1xuICB0b1JvdXRlU2VnbWVudCxcbiAgdG9Sb3V0ZVNlZ21lbnRQcmVzZXJ2ZUNhc2Vcbn0gZnJvbSAnLi9hcGktZG9jLXJvdXRlLXNlZ21lbnRzLnRzJztcbmltcG9ydCB7IGdldEFwaURvY1NldHRpbmdzIH0gZnJvbSAnLi9hcGktZG9jLXNldHRpbmdzLnRzJztcbmltcG9ydCB7XG4gIGVzY2FwZU1keEFuZ2xlQnJhY2tldHMsXG4gIGVzY2FwZU1keFByb3NlLFxuICBnZXROYW1lc3BhY2VEaXJlY3RvcnksXG4gIG1lbWJlclJvdXRlU2VnbWVudCxcbiAgbWVtYmVyU2x1ZyxcbiAgb3ZlcmxvYWRSb3V0ZVNlZ21lbnQsXG4gIG92ZXJsb2FkU2x1ZyxcbiAgcmVwbGFjZVJlZ0V4cE1hdGNoZXMsXG4gIHNlZ21lbnRNYXJrZG93blxufSBmcm9tICcuL2FwaS1kb2MtdGV4dC11dGlscy50cyc7XG5cbi8qKlxuTG9hZGVkIGZyb20gdHlwZWRvYy1wbHVnaW4tbWRuLWxpbmtzIGRhdGEgYXQgcnVudGltZVxuICovXG4vKipcbk1vZHVsZS1sZXZlbCBtdXRhYmxlIHN0YXRlLCBoZWxkIGluIG9uZSBvYmplY3Qgc28gZWFjaCBtdXRhdGlvbiBuYW1lcyBpdCBleHBsaWNpdGx5LlxuICovXG5pbnRlcmZhY2UgTW9kdWxlU3RhdGUge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgdHlwZXNjcmlwdC1kZXYtdG9vbGtpdC9yZWFkb25seS1pbnRlcmZhY2UtbWVtYmVycyAtLSBUaGUgV2ViIEFQSSBtZXRhZGF0YSBjYWNoZSBpcyByZXBsYWNlZCBhZnRlciBsb2FkaW5nLlxuICB3ZWJBcGlUeXBlczogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG59XG5cbmNvbnN0IG1vZHVsZVN0YXRlOiBNb2R1bGVTdGF0ZSA9IHtcbiAgd2ViQXBpVHlwZXM6IHt9XG59O1xuLyoqXG5Mb3dlcmNhc2VkLCBjb2xsaXNpb24tZGlzYW1iaWd1YXRlZCBPTi1ESVNLIHNlZ21lbnQgcGVyIHF1YWxpZmllZCB0eXBlIGtleSAoYCR7bmFtZXNwYWNlfSMke25hbWV9YCkuXG4gKi9cbmNvbnN0IHR5cGVGaWxlU2VnbWVudHMgPSBuZXcgTWFwPHN0cmluZywgc3RyaW5nPigpO1xuLyoqXG5DYXNlLXByZXNlcnZlZCBVUkwvcm91dGUgc2VnbWVudCBwZXIgcXVhbGlmaWVkIHR5cGUga2V5IChgJHtuYW1lc3BhY2V9IyR7bmFtZX1gKS5cbiAqL1xuY29uc3QgdHlwZVJvdXRlU2VnbWVudHMgPSBuZXcgTWFwPHN0cmluZywgc3RyaW5nPigpO1xuXG4vKipcbiAqIFJvdXRlLXNlZ21lbnQga2V5cyBvZiB0aGUgbWVtYmVyIHBhZ2VzIHRoYXQgYGdlbmVyYXRlTWVtYmVyUGFnZXNgIHdpbGwgYWN0dWFsbHkgZW1pdCwgYXNcbiAqIGAke25hbWVzcGFjZX0jJHtUeXBlTmFtZX0jJHtyb3V0ZVNlZ21lbnR9YC4gT25seSBOT04taW5oZXJpdGVkIHByb3BlcnRpZXMgYW5kIG5vbi1pbmhlcml0ZWQgbWV0aG9kXG4gKiBvdmVybG9hZCBrZXlzIGdldCBhIHBhZ2UsIHNvIHRoaXMgbGV0cyBsaW5rIGVtaXR0ZXJzIGF2b2lkIHBvaW50aW5nIGF0IGEgbWVtYmVyIHBhZ2UgdGhhdCBpcyBuZXZlclxuICogZ2VuZXJhdGVkIChhbiBpbmhlcml0ZWQgbWVtYmVyLCBhbiBlbnVtIG1lbWJlciwgYW4gb3B0aW9ucy1pbnRlcmZhY2UgbWVtYmVyKSDigJQgd2hpY2ggd291bGQgNDA0LlxuICovXG5jb25zdCBnZW5lcmF0ZWRNZW1iZXJQYWdlcyA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuXG4vKipcbiAqIFdoZXRoZXIgYSBtZW1iZXIgcGFnZSB3aWxsIGJlIGdlbmVyYXRlZCBmb3IgYHJvdXRlU2VnbWVudGAgb24gdGhlIGdpdmVuIHR5cGUuXG4gKlxuICogQHBhcmFtIG5hbWVzcGFjZSAtIFRoZSB0eXBlJ3MgbmFtZXNwYWNlLlxuICogQHBhcmFtIHR5cGVOYW1lIC0gVGhlIHR5cGUncyBuYW1lLlxuICogQHBhcmFtIHJvdXRlU2VnbWVudCAtIFRoZSBtZW1iZXIncyByb3V0ZSBzZWdtZW50LlxuICogQHJldHVybnMgV2hldGhlciB0aGUgcGFnZSBpcyBnZW5lcmF0ZWQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkb2VzTWVtYmVyUGFnZUV4aXN0KG5hbWVzcGFjZTogc3RyaW5nLCB0eXBlTmFtZTogc3RyaW5nLCByb3V0ZVNlZ21lbnQ6IHN0cmluZyk6IGJvb2xlYW4ge1xuICByZXR1cm4gZ2VuZXJhdGVkTWVtYmVyUGFnZXMuaGFzKGAke25hbWVzcGFjZX0jJHt0eXBlTmFtZX0jJHtyb3V0ZVNlZ21lbnR9YCk7XG59XG5cbi8qKlxuICogUmVzb2x2ZSBhIGJhcmUgdHlwZSBuYW1lIHRvIGEgZG9jdW1lbnRlZCBgVHlwZUluZm9gLlxuICpcbiAqIFRoZSBtb2RlbCBtYXAgaXMga2V5ZWQgYnkgYSBxdWFsaWZpZWQgYCR7bmFtZXNwYWNlfSMke25hbWV9YCBpZGVudGl0eSwgYmVjYXVzZSBhIHBhY2thZ2VcbiAqIGNhbiBleHBvcnQgdGhlIHNhbWUgc2ltcGxlIG5hbWUgZnJvbSBkaWZmZXJlbnQgbW9kdWxlcy4gUmVzb2x1dGlvbiBpcyBiZXN0LWVmZm9ydDpcbiAqICAgMS4gUHJlZmVyIGEgdHlwZSBpbiBgY3VycmVudE5hbWVzcGFjZWAgKHRoZSByZWZlcmVuY2luZyBwYWdlJ3MgbW9kdWxlKS5cbiAqICAgMi4gT3RoZXJ3aXNlLCBpZiBleGFjdGx5IG9uZSB0eXBlIGFjcm9zcyBhbGwgbW9kdWxlcyBoYXMgdGhhdCBiYXJlIG5hbWUsIHVzZSBpdC5cbiAqICAgMy4gSWYgdGhlIGJhcmUgbmFtZSBpcyBhbWJpZ3VvdXMgKG11bHRpcGxlIG1vZHVsZXMpLCBnaXZlIHVwIChjYWxsZXIgcmVuZGVycyBwbGFpbiBjb2RlKS5cbiAqXG4gKiBAcGFyYW0gYWxsVHlwZXMgLSBFdmVyeSBkb2N1bWVudGVkIHR5cGUsIGtleWVkIGJ5IGAke25hbWVzcGFjZX0jJHtuYW1lfWAuXG4gKiBAcGFyYW0gbmFtZSAtIFRoZSB0eXBlJ3MgbmFtZS5cbiAqIEBwYXJhbSBjdXJyZW50TmFtZXNwYWNlIC0gVGhlIG5hbWVzcGFjZSBvZiB0aGUgcmVmZXJlbmNpbmcgcGFnZSwgcHJlZmVycmVkIHdoZW4gdGhlIG5hbWUgaXMgYW1iaWd1b3VzLlxuICogQHJldHVybnMgVGhlIHR5cGUsIG9yIGB1bmRlZmluZWRgIHdoZW4gbm8gdHlwZSBvciBtb3JlIHRoYW4gb25lIGhhcyB0aGF0IG5hbWUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmaW5kVHlwZShhbGxUeXBlczogTWFwPHN0cmluZywgVHlwZUluZm8+LCBuYW1lOiBzdHJpbmcsIGN1cnJlbnROYW1lc3BhY2U/OiBzdHJpbmcpOiBUeXBlSW5mbyB8IHVuZGVmaW5lZCB7XG4gIGlmIChjdXJyZW50TmFtZXNwYWNlICE9PSB1bmRlZmluZWQpIHtcbiAgICBjb25zdCBxdWFsaWZpZWQgPSBhbGxUeXBlcy5nZXQoYCR7Y3VycmVudE5hbWVzcGFjZX0jJHtuYW1lfWApO1xuICAgIGlmIChxdWFsaWZpZWQpIHtcbiAgICAgIHJldHVybiBxdWFsaWZpZWQ7XG4gICAgfVxuICB9XG4gIGxldCBmb3VuZDogVHlwZUluZm8gfCB1bmRlZmluZWQ7XG4gIGxldCBtYXRjaENvdW50ID0gMDtcbiAgZm9yIChjb25zdCBpbmZvIG9mIGFsbFR5cGVzLnZhbHVlcygpKSB7XG4gICAgaWYgKGluZm8ubmFtZSAhPT0gbmFtZSkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgZm91bmQgPSBpbmZvO1xuICAgIG1hdGNoQ291bnQrKztcbiAgICBpZiAobWF0Y2hDb3VudCA+IDEpIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICB9XG4gIHJldHVybiBtYXRjaENvdW50ID09PSAxID8gZm91bmQgOiB1bmRlZmluZWQ7XG59XG5cbi8qKlxuICogTGluayBhIGJhc2UgdHlwZSBleHByZXNzaW9uIGZvciB0aGUgXCJFeHRlbmRzOlwiIGxpbmUuXG4gKiBTaW1wbGUgdHlwZSByZWZlcmVuY2VzIChpZGVudGlmaWVyICsgb3B0aW9uYWwgZ2VuZXJpY3MpIHVzZSByZW5kZXJUeXBlV2l0aExpbmtzXG4gKiBzbyBlYWNoIHR5cGUgYXJndW1lbnQgZ2V0cyBpdHMgb3duIGxpbmsuXG4gKiBDb21wbGV4IGV4cHJlc3Npb25zIChvYmplY3QgdHlwZXMsIGludGVyc2VjdGlvbnMsIGV0Yy4pIGZhbGwgYmFjayB0byB0eXBlTGlua1xuICogdG8gYXZvaWQgTURYIHBhcnNpbmcgaXNzdWVzIHdpdGggYHtgLCBgfWAsIGB8YCBldGMuXG4gKlxuICogQHBhcmFtIHR5cGVOYW1lIC0gVGhlIHR5cGUncyBuYW1lLlxuICogQHBhcmFtIGFsbFR5cGVzIC0gRXZlcnkgZG9jdW1lbnRlZCB0eXBlLCBrZXllZCBieSBgJHtuYW1lc3BhY2V9IyR7bmFtZX1gLlxuICogQHBhcmFtIGN1cnJlbnROYW1lc3BhY2UgLSBUaGUgbmFtZXNwYWNlIG9mIHRoZSByZWZlcmVuY2luZyBwYWdlLCBwcmVmZXJyZWQgd2hlbiB0aGUgbmFtZSBpcyBhbWJpZ3VvdXMuXG4gKiBAcmV0dXJucyBUaGUgbGlua2VkIHR5cGUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBsaW5rQmFzZVR5cGUodHlwZU5hbWU6IHN0cmluZywgYWxsVHlwZXM6IE1hcDxzdHJpbmcsIFR5cGVJbmZvPiwgY3VycmVudE5hbWVzcGFjZT86IHN0cmluZyk6IHN0cmluZyB7XG4gIGNvbnN0IGlzU2ltcGxlVHlwZVJlZiA9IC9eW2EtekEtWl1bYS16QS1aMC05XSooPzo8Lio+KT8kLy50ZXN0KHR5cGVOYW1lLnRyaW0oKSk7XG4gIHJldHVybiBpc1NpbXBsZVR5cGVSZWYgPyBlc2NhcGVNZHhBbmdsZUJyYWNrZXRzKHJlbmRlclR5cGVXaXRoTGlua3ModHlwZU5hbWUsIGFsbFR5cGVzLCB1bmRlZmluZWQsIGN1cnJlbnROYW1lc3BhY2UpKSA6IHR5cGVMaW5rKHR5cGVOYW1lLCBhbGxUeXBlcywgY3VycmVudE5hbWVzcGFjZSk7XG59XG5cbi8qKlxuICogTG9hZHMgdGhlIFdlYiBBUEkgbGlua3MgYHR5cGVkb2MtcGx1Z2luLW1kbi1saW5rc2Agc2hpcHMsIGlmIGl0IGlzIGluc3RhbGxlZC4gV2l0aG91dCBpdCwgV2ViIEFQSSB0eXBlcyByZW5kZXJcbiAqIHVubGlua2VkLlxuICpcbiAqIEBwYXJhbSByb290RGlyZWN0b3J5IC0gVGhlIGZvbGRlciB3aG9zZSBgbm9kZV9tb2R1bGVzYCBob2xkcyB0aGUgcGFja2FnZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGxvYWRFeHRlcm5hbFR5cGVNYXBzKHJvb3REaXJlY3Rvcnk6IHN0cmluZyk6IHZvaWQge1xuICB0cnkge1xuICAgIGNvbnN0IGRhdGFQYXRoID0gam9pbihyb290RGlyZWN0b3J5LCAnbm9kZV9tb2R1bGVzL3R5cGVkb2MtcGx1Z2luLW1kbi1saW5rcy9kYXRhL3dlYi1hcGkuanNvbicpO1xuICAgIG1vZHVsZVN0YXRlLndlYkFwaVR5cGVzID0gSlNPTi5wYXJzZShyZWFkRmlsZVN5bmMoZGF0YVBhdGgsICd1dGYtOCcpKSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgICBjb25zb2xlLndhcm4oYExvYWRlZCAke1N0cmluZyhPYmplY3Qua2V5cyhtb2R1bGVTdGF0ZS53ZWJBcGlUeXBlcykubGVuZ3RoKX0gV2ViIEFQSSB0eXBlIGxpbmtzYCk7XG4gIH0gY2F0Y2gge1xuICAgIG1vZHVsZVN0YXRlLndlYkFwaVR5cGVzID0ge307XG4gICAgY29uc29sZS53YXJuKCd0eXBlZG9jLXBsdWdpbi1tZG4tbGlua3MgZGF0YSBub3QgZm91bmQg4oCUIFdlYiBBUEkgbGlua3Mgd2lsbCBiZSB1bmF2YWlsYWJsZS4nKTtcbiAgfVxufVxuXG4vKipcbiAqIENvbnZlcnQgaW5saW5lIG1hcmtkb3duIHRvIEhUTUwgZm9yIHVzZSBpbiBjb21wb25lbnQgcHJvcHMgd2l0aCBzZXQ6aHRtbFxuICpcbiAqIEBwYXJhbSB0ZXh0IC0gVGhlIHRleHQuXG4gKiBAcmV0dXJucyBUaGUgSFRNTC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1hcmtkb3duVG9IdG1sKHRleHQ6IHN0cmluZyk6IHN0cmluZyB7XG4gIGNvbnN0IGVzY2FwZWQgPSB0ZXh0XG4gICAgLnJlcGxhY2VBbGwoJyYnLCAnJmFtcDsnKVxuICAgIC5yZXBsYWNlQWxsKCc8JywgJyZsdDsnKVxuICAgIC5yZXBsYWNlQWxsKCc+JywgJyZndDsnKTtcbiAgcmV0dXJuIHJlcGxhY2VSZWdFeHBNYXRjaGVzKGVzY2FwZWQsIC9cXFsoPzx0ZXh0PlteXFxdXSspXFxdXFwoKD88dXJsPlteKV0rKVxcKS9nLCAobWF0Y2gpID0+IHtcbiAgICBjb25zdCBsaW5rVGV4dCA9IGdldE1hbmRhdG9yeU5hbWVkR3JvdXAobWF0Y2gsICd0ZXh0Jyk7XG4gICAgY29uc3QgdXJsID0gZ2V0TWFuZGF0b3J5TmFtZWRHcm91cChtYXRjaCwgJ3VybCcpO1xuICAgIC8vIEEgcmVsYXRpdmUgVVJMIGhlcmUgaXMgYW4gaWxsdXN0cmF0aXZlIGV4YW1wbGUgcGF0aCBpbiBUU0RvYyAoZS5nLiBgW2Zvb10oZm9vLnBuZylgKSwgbm90IGFcbiAgICAvLyByZWFsIG5hdmlnYWJsZSBsaW5rIOKAlCByZW5kZXIgaXQgYXMgbGl0ZXJhbCBpbmxpbmUgY29kZSBzbyBpdCBuZWl0aGVyIDQwNHMgbm9yIGxvc2VzIG1lYW5pbmcuXG4gICAgcmV0dXJuIC9eKD86aHR0cHM/OlxcL1xcL3xcXC98I3xtYWlsdG86KS8udGVzdCh1cmwpID8gYDxhIGhyZWY9XCIke3VybH1cIj4ke2xpbmtUZXh0fTwvYT5gIDogYDxjb2RlPlske2xpbmtUZXh0fV0oJHt1cmx9KTwvY29kZT5gO1xuICB9KVxuICAgIC5yZXBsYWNlQWxsKC9gKD88Y29kZT5bXmBdKylgL2csICc8Y29kZT4kPGNvZGU+PC9jb2RlPicpXG4gICAgLnJlcGxhY2VBbGwoJ1xcbicsICc8YnIvPicpO1xufVxuXG4vKipcbiAqIEJ1aWxkIHRoZSBocmVmIGZvciBhIG1lbWJlciwgcG9pbnRpbmcgdG8gdGhlIHBhcmVudCB0eXBlJ3MgcGFnZSBpZiBpbmhlcml0ZWRcbiAqXG4gKiBAcGFyYW0gbWVtYmVyU2x1Z1N0cmluZyAtIFRoZSBtZW1iZXIncyByb3V0ZSBzZWdtZW50LlxuICogQHBhcmFtIGluaGVyaXRlZEZyb20gLSBUaGUgbmFtZSBvZiB0aGUgdHlwZSB0aGUgbWVtYmVyIGlzIGluaGVyaXRlZCBmcm9tLCBvciBhbiBlbXB0eSBzdHJpbmcgZm9yIGFuIG93biBtZW1iZXIuXG4gKiBAcGFyYW0gYWxsVHlwZXMgLSBFdmVyeSBkb2N1bWVudGVkIHR5cGUsIGtleWVkIGJ5IGAke25hbWVzcGFjZX0jJHtuYW1lfWAuXG4gKiBAcGFyYW0gY3VycmVudE5hbWVzcGFjZSAtIFRoZSBuYW1lc3BhY2Ugb2YgdGhlIHJlZmVyZW5jaW5nIHBhZ2UsIHByZWZlcnJlZCB3aGVuIHRoZSBuYW1lIGlzIGFtYmlndW91cy5cbiAqIEByZXR1cm5zIFRoZSBsaW5rLCBvciBhbiBlbXB0eSBzdHJpbmcgd2hlbiBubyBwYWdlIGRvY3VtZW50cyB0aGUgbWVtYmVyLlxuICovXG5leHBvcnQgZnVuY3Rpb24gbWVtYmVySHJlZihtZW1iZXJTbHVnU3RyaW5nOiBzdHJpbmcsIGluaGVyaXRlZEZyb206IHN0cmluZywgYWxsVHlwZXM6IE1hcDxzdHJpbmcsIFR5cGVJbmZvPiwgY3VycmVudE5hbWVzcGFjZT86IHN0cmluZyk6IHN0cmluZyB7XG4gIGlmICghaW5oZXJpdGVkRnJvbSkge1xuICAgIC8vIE93biAobm9uLWluaGVyaXRlZCkgbWVtYmVyIOKAlCBgZ2VuZXJhdGVNZW1iZXJQYWdlc2AgYWx3YXlzIGVtaXRzIGl0cyBwYWdlIG9uIHRoaXMgc2FtZSBwYWdlLlxuICAgIHJldHVybiBgLi8ke21lbWJlclNsdWdTdHJpbmd9L2A7XG4gIH1cbiAgY29uc3QgcGFyZW50SW5mbyA9IGZpbmRUeXBlKGFsbFR5cGVzLCBpbmhlcml0ZWRGcm9tLCBjdXJyZW50TmFtZXNwYWNlKTtcbiAgaWYgKCFwYXJlbnRJbmZvIHx8ICFkb2VzTWVtYmVyUGFnZUV4aXN0KHBhcmVudEluZm8ubmFtZXNwYWNlLCBwYXJlbnRJbmZvLm5hbWUsIG1lbWJlclNsdWdTdHJpbmcpKSB7XG4gICAgLy8gVGhlIGRlY2xhcmluZyBwYXJlbnQgaGFzIG5vIGdlbmVyYXRlZCBwYWdlIGZvciB0aGlzIG1lbWJlciAoaXQgaW5oZXJpdGVkIHRoZSBtZW1iZXIgdG9vLCBvciBpc1xuICAgIC8vIHVuZG9jdW1lbnRlZCkuIFJldHVybiBubyBocmVmIHNvIHRoZSBjYWxsZXIgcmVuZGVycyBwbGFpbiB0ZXh0IGluc3RlYWQgb2YgYSBicm9rZW4gbGluay5cbiAgICByZXR1cm4gJyc7XG4gIH1cbiAgY29uc3QgcGFyZW50TnNEaXJlY3RvcnkgPSBnZXROYW1lc3BhY2VEaXJlY3RvcnkocGFyZW50SW5mby5uYW1lc3BhY2UpO1xuICByZXR1cm4gYCR7Z2V0QmFzZVBhdGgoKX0vYXBpLyR7cGFyZW50TnNEaXJlY3Rvcnl9LyR7dG9UeXBlUm91dGVTZWdtZW50KHBhcmVudEluZm8ubmFtZXNwYWNlLCBwYXJlbnRJbmZvLm5hbWUpfS8ke21lbWJlclNsdWdTdHJpbmd9L2A7XG59XG5cbi8qKlxuICogUG9wdWxhdGUge0BsaW5rIGRvZXNNZW1iZXJQYWdlRXhpc3R9LiBNaXJyb3JzIGBnZW5lcmF0ZU1lbWJlclBhZ2VzYCdzIG93biBmaWx0ZXJpbmcgZXhhY3RseSAob25lIHBhZ2VcbiAqIHBlciBub24taW5oZXJpdGVkIHByb3BlcnR5LCBvbmUgcGVyIG5vbi1pbmhlcml0ZWQgbWV0aG9kIG92ZXJsb2FkIGtleSkuIE11c3QgcnVuIG9uY2UgYmVmb3JlIGFueVxuICogbGluayBpcyByZW5kZXJlZC5cbiAqXG4gKiBAcGFyYW0gdHlwZXMgLSBUaGUgZG9jdW1lbnRlZCB0eXBlcywga2V5ZWQgYnkgcXVhbGlmaWVkIGlkLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVnaXN0ZXJNZW1iZXJQYWdlcyh0eXBlczogTWFwPHN0cmluZywgVHlwZUluZm8+KTogdm9pZCB7XG4gIGdlbmVyYXRlZE1lbWJlclBhZ2VzLmNsZWFyKCk7XG4gIGZvciAoY29uc3QgaW5mbyBvZiB0eXBlcy52YWx1ZXMoKSkge1xuICAgIGZvciAoY29uc3QgcHJvcGVydHkgb2YgaW5mby5wcm9wZXJ0aWVzKSB7XG4gICAgICBpZiAoIXByb3BlcnR5LmluaGVyaXRlZEZyb20pIHtcbiAgICAgICAgZ2VuZXJhdGVkTWVtYmVyUGFnZXMuYWRkKGAke2luZm8ubmFtZXNwYWNlfSMke2luZm8ubmFtZX0jJHttZW1iZXJSb3V0ZVNlZ21lbnQocHJvcGVydHkubmFtZSl9YCk7XG4gICAgICB9XG4gICAgfVxuICAgIGNvbnN0IG92ZXJsb2FkS2V5cyA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuICAgIGZvciAoY29uc3QgbWV0aG9kIG9mIGluZm8ubWV0aG9kcykge1xuICAgICAgaWYgKCFtZXRob2QuaW5oZXJpdGVkRnJvbSkge1xuICAgICAgICBvdmVybG9hZEtleXMuYWRkKG1ldGhvZC5vdmVybG9hZEtleSk7XG4gICAgICB9XG4gICAgfVxuICAgIGZvciAoY29uc3Qgb3ZlcmxvYWRLZXkgb2Ygb3ZlcmxvYWRLZXlzKSB7XG4gICAgICBnZW5lcmF0ZWRNZW1iZXJQYWdlcy5hZGQoYCR7aW5mby5uYW1lc3BhY2V9IyR7aW5mby5uYW1lfSMke292ZXJsb2FkUm91dGVTZWdtZW50KG92ZXJsb2FkS2V5KX1gKTtcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBGb3IgZXZlcnkgZG9jdW1lbnRlZCB0eXBlIGFzc2lnbiBCT1RIOlxuICogIC0gYSBsb3dlcmNhc2VkLCBudW1lcmljYWxseS1kaXNhbWJpZ3VhdGVkIEZJTEUgc2VnbWVudCAoc28gYFR5cGVBc3NlcnRlcmAgdnMgYHR5cGVBc3NlcnRlcmAsIHdoaWNoXG4gKiAgICBib3RoIGxvd2VyY2FzZSB0byBgdHlwZWFzc2VydGVyYCwgYmVjb21lIGB0eXBlYXNzZXJ0ZXJgIC8gYHR5cGVhc3NlcnRlci0yYCBvbiBkaXNrIGFuZCBuZXZlclxuICogICAgY29sbGlkZSBvbiBXaW5kb3dzJyBjYXNlLWluc2Vuc2l0aXZlIGZpbGVzeXN0ZW0pLCBhbmRcbiAqICAtIGEgY2FzZS1QUkVTRVJWRUQgUk9VVEUgc2VnbWVudCAoYFR5cGVBc3NlcnRlcmAgLyBgdHlwZUFzc2VydGVyYCkgdXNlZCBmb3IgdGhlIGV4cGxpY2l0IGBzbHVnOmBcbiAqICAgIGZyb250bWF0dGVyIGFuZCBldmVyeSBpbnRlcm5hbCBsaW5rLCBzbyB0aGUgVVJMcyBzdGF5IHByZXR0eSBhbmQgbmF0dXJhbGx5IGRpc3RpbmN0LlxuICogVGhlIHJvdXRlIGRlY291cGxlcyBmcm9tIHRoZSBmaWxlIHBhdGggdmlhIHRoZSBgc2x1ZzpgIGZyb250bWF0dGVyLCBzbyBubyBgLTJgIHN1ZmZpeCBsZWFrcyBpbnRvXG4gKiBVUkxzLiBBbHNvIHdhcm5zIGFib3V0IG1lbWJlci1zbHVnIGNvbGxpc2lvbnMgd2l0aGluIGEgdHlwZS4gTXVzdCBydW4gb25jZSBiZWZvcmUgYW55IHBhZ2UvbGluay5cbiAqXG4gKiBAcGFyYW0gdHlwZXMgLSBUaGUgZG9jdW1lbnRlZCB0eXBlcywga2V5ZWQgYnkgcXVhbGlmaWVkIGlkLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVnaXN0ZXJSb3V0ZVNlZ21lbnRzKHR5cGVzOiBNYXA8c3RyaW5nLCBUeXBlSW5mbz4pOiB2b2lkIHtcbiAgdHlwZUZpbGVTZWdtZW50cy5jbGVhcigpO1xuICB0eXBlUm91dGVTZWdtZW50cy5jbGVhcigpO1xuICBjb25zdCBieU5hbWVzcGFjZSA9IG5ldyBNYXA8c3RyaW5nLCBUeXBlSW5mb1tdPigpO1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgdW5pY29ybi9wcmVmZXItZ3JvdXAtYnkgLS0gYE1hcC5ncm91cEJ5YCBpcyBFUzIwMjQsIGFuZCB0aGUgc2hhcmVkIGB0c2NvbmZpZy5qc29uYCB0eXBlcyBvbmx5IEVTMjAyMi5cbiAgZm9yIChjb25zdCBpbmZvIG9mIHR5cGVzLnZhbHVlcygpKSB7XG4gICAgY29uc3QgbGlzdCA9IGJ5TmFtZXNwYWNlLmdldChpbmZvLm5hbWVzcGFjZSkgPz8gW107XG4gICAgbGlzdC5wdXNoKGluZm8pO1xuICAgIGJ5TmFtZXNwYWNlLnNldChpbmZvLm5hbWVzcGFjZSwgbGlzdCk7XG4gIH1cbiAgZm9yIChjb25zdCBbbmFtZXNwYWNlLCBpbmZvc10gb2YgYnlOYW1lc3BhY2UpIHtcbiAgICBjb25zdCB1c2VkRmlsZVNlZ21lbnRzID0gbmV3IFNldDxzdHJpbmc+KCk7XG4gICAgY29uc3QgdXNlZFJvdXRlU2VnbWVudHMgPSBuZXcgU2V0PHN0cmluZz4oKTtcbiAgICBjb25zdCBzb3J0ZWQgPSBbLi4uaW5mb3NdLnNvcnQoKGFscGhhLCBicmF2bykgPT4gYWxwaGEubmFtZS5sb2NhbGVDb21wYXJlKGJyYXZvLm5hbWUpKTtcbiAgICBmb3IgKGNvbnN0IGluZm8gb2Ygc29ydGVkKSB7XG4gICAgICB0eXBlRmlsZVNlZ21lbnRzLnNldChgJHtuYW1lc3BhY2V9IyR7aW5mby5uYW1lfWAsIGRpc2FtYmlndWF0ZSh0b1JvdXRlU2VnbWVudChpbmZvLm5hbWUpLCB1c2VkRmlsZVNlZ21lbnRzLCAoc2VnbWVudCkgPT4gc2VnbWVudCkpO1xuXG4gICAgICBjb25zdCByb3V0ZUJhc2UgPSB0b1JvdXRlU2VnbWVudFByZXNlcnZlQ2FzZShpbmZvLm5hbWUpO1xuICAgICAgLy8gRGlzYW1iaWd1YXRlIFJPVVRFUyBjYXNlLUlOU0VOU0lUSVZFTFk6IHRoZSBzbHVnIGJlY29tZXMgQXN0cm8ncyBvbi1kaXNrIG91dHB1dCBwYXRoLCBzb1xuICAgICAgLy8gYFR5cGVBc3NlcnRlcmAgYW5kIGB0eXBlQXNzZXJ0ZXJgIChzYW1lIG5hbWUgbW9kdWxvIGNhc2UpIHdvdWxkIGNvbGxpZGUgd2hlbiB0aGUgc2l0ZSBpcyBidWlsdFxuICAgICAgLy8gb24gYSBjYXNlLWluc2Vuc2l0aXZlIGZpbGVzeXN0ZW0gKFdpbmRvd3MvbWFjT1MpLCBzaWxlbnRseSBvdmVyd3JpdGluZyBvbmUgcGFnZSBzbyBldmVyeSBsaW5rXG4gICAgICAvLyB0byBpdCA0MDRzLiBDb21wYXJpbmcgbG93ZXJjYXNlZCBrZXlzIGZvcmNlcyB0aGUgc2Vjb25kIG9jY3VycmVuY2UgdG8gdGFrZSBhIGAtMmAgc3VmZml4LlxuICAgICAgY29uc3Qgcm91dGVTZWdtZW50ID0gZGlzYW1iaWd1YXRlKHJvdXRlQmFzZSwgdXNlZFJvdXRlU2VnbWVudHMsIChzZWdtZW50KSA9PiBzZWdtZW50LnRvTG93ZXJDYXNlKCkpO1xuICAgICAgdHlwZVJvdXRlU2VnbWVudHMuc2V0KGAke25hbWVzcGFjZX0jJHtpbmZvLm5hbWV9YCwgcm91dGVTZWdtZW50KTtcbiAgICAgIGlmIChyb3V0ZVNlZ21lbnQgIT09IHJvdXRlQmFzZSkge1xuICAgICAgICBjb25zb2xlLndhcm4oYERpc2FtYmlndWF0ZWQgUk9VVEUgZm9yIFwiJHtuYW1lc3BhY2V9IyR7aW5mby5uYW1lfVwiOiBcIiR7cm91dGVCYXNlfVwiIC0+IFwiJHtyb3V0ZVNlZ21lbnR9XCIgKHNsdWcgY29sbGlzaW9uKS5gKTtcbiAgICAgIH1cbiAgICAgIHdhcm5NZW1iZXJTbHVnQ29sbGlzaW9ucyhpbmZvLCBuYW1lc3BhY2UpO1xuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIFJlbmRlciBhbiBgQGV4YW1wbGVgIGJsb2NrIGFzIE1EWC4gSWYgdGhlIGV4YW1wbGUgYWxyZWFkeSBjb250YWlucyBhIGZlbmNlZCBjb2RlIGJsb2NrLCBpdCBpc1xuICogbm9ybWFsaXplZCB0aHJvdWdoIHtAbGluayByZW5kZXJNZHhQcm9zZX0gKGNvZGUgcHJlc2VydmVkIHJhdywgc3Vycm91bmRpbmcgcHJvc2UgZXNjYXBlZCk7XG4gKiBvdGhlcndpc2UgdGhlIHJhdyBleGFtcGxlIHRleHQgaXMgd3JhcHBlZCBpbiBhIGB0c2AgY29kZSBmZW5jZSBzbyBpdCBpcyBlbWl0dGVkIGxpdGVyYWxseS5cbiAqXG4gKiBAcGFyYW0gZXhhbXBsZSAtIFRoZSBgQGV4YW1wbGVgIHRleHQuXG4gKiBAcGFyYW0gYWxsVHlwZXMgLSBFdmVyeSBkb2N1bWVudGVkIHR5cGUsIGtleWVkIGJ5IGAke25hbWVzcGFjZX0jJHtuYW1lfWAuXG4gKiBAcGFyYW0gc2VsZk5hbWVzcGFjZSAtIFRoZSBuYW1lc3BhY2Ugb2YgdGhlIHBhZ2UgYmVpbmcgcmVuZGVyZWQsIHByZWZlcnJlZCB3aGVuIGEgbmFtZSBpcyBhbWJpZ3VvdXMuXG4gKiBAcmV0dXJucyBUaGUgTURYLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVuZGVyRXhhbXBsZU1keChleGFtcGxlOiBzdHJpbmcsIGFsbFR5cGVzOiBNYXA8c3RyaW5nLCBUeXBlSW5mbz4sIHNlbGZOYW1lc3BhY2U/OiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gLyg/Ol58XFxuKVxccyooPzpgYGB8fn5+KS8udGVzdChleGFtcGxlKSA/IHJlbmRlck1keFByb3NlKGV4YW1wbGUsIGFsbFR5cGVzLCBzZWxmTmFtZXNwYWNlKSA6IGBcXGBcXGBcXGB0c1xcbiR7ZXhhbXBsZX1cXG5cXGBcXGBcXGBgO1xufVxuXG4vKipcbiAqIFJlbmRlciBtYXJrZG93biBibG9jayB0ZXh0IChhIGRlc2NyaXB0aW9uLCByZW1hcmtzLCBvciBtb2R1bGUgb3ZlcnZpZXcpIGFzIE1EWC1zYWZlIG1hcmtkb3duLlxuICogRmVuY2VkIGNvZGUgYmxvY2tzIGFyZSByZS1lbWl0dGVkIHZlcmJhdGltIChzdXJyb3VuZGVkIGJ5IGJsYW5rIGxpbmVzLCB3aXRoIGEgbGFuZ3VhZ2UpOyBwcm9zZVxuICogc2VnbWVudHMgaGF2ZSB0aGVpciBpbmxpbmUgbGluayB0YWdzIHJlc29sdmVkIGFuZCB0aGVpciBNRFgtdW5zYWZlIGNoYXJhY3RlcnMgZXNjYXBlZC5cbiAqXG4gKiBAcGFyYW0gdGV4dCAtIFRoZSB0ZXh0LlxuICogQHBhcmFtIGFsbFR5cGVzIC0gRXZlcnkgZG9jdW1lbnRlZCB0eXBlLCBrZXllZCBieSBgJHtuYW1lc3BhY2V9IyR7bmFtZX1gLlxuICogQHBhcmFtIHNlbGZOYW1lc3BhY2UgLSBUaGUgbmFtZXNwYWNlIG9mIHRoZSBwYWdlIGJlaW5nIHJlbmRlcmVkLCBwcmVmZXJyZWQgd2hlbiBhIG5hbWUgaXMgYW1iaWd1b3VzLlxuICogQHJldHVybnMgVGhlIE1EWC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlbmRlck1keFByb3NlKHRleHQ6IHN0cmluZywgYWxsVHlwZXM6IE1hcDxzdHJpbmcsIFR5cGVJbmZvPiwgc2VsZk5hbWVzcGFjZT86IHN0cmluZyk6IHN0cmluZyB7XG4gIGNvbnN0IG91dDogc3RyaW5nW10gPSBbXTtcbiAgZm9yIChjb25zdCBzZWcgb2Ygc2VnbWVudE1hcmtkb3duKHRleHQpKSB7XG4gICAgaWYgKHNlZy50eXBlID09PSAnY29kZScpIHtcbiAgICAgIG91dC5wdXNoKCcnLCBgXFxgXFxgXFxgJHtzZWcubGFuZyB8fCAndHMnfWAsIHNlZy50ZXh0LCAnYGBgJywgJycpO1xuICAgIH0gZWxzZSB7XG4gICAgICBvdXQucHVzaChlc2NhcGVNZHhQcm9zZShyZXNvbHZlTGlua3Moc2VnLnRleHQsIGFsbFR5cGVzLCBzZWxmTmFtZXNwYWNlKSkpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gb3V0LmpvaW4oJ1xcbicpLnJlcGxhY2VBbGwoL1xcbnszLH0vZywgJ1xcblxcbicpLnRyaW0oKTtcbn1cblxuLyoqXG4gKiBSZW5kZXIgYSB0eXBlIHN0cmluZyB3aXRoIGNsaWNrYWJsZSBsaW5rcyBmb3Iga25vd24gdHlwZXNcbiAqXG4gKiBAcGFyYW0gdHlwZVRleHQgLSBUaGUgdHlwZSB0ZXh0LlxuICogQHBhcmFtIGFsbFR5cGVzIC0gRXZlcnkgZG9jdW1lbnRlZCB0eXBlLCBrZXllZCBieSBgJHtuYW1lc3BhY2V9IyR7bmFtZX1gLlxuICogQHBhcmFtIHNlbGZUeXBlTmFtZSAtIFRoZSBuYW1lIG9mIHRoZSB0eXBlIHRoZSBwYWdlIGRvY3VtZW50cywgd2hpY2ggYHRoaXNgIGxpbmtzIHRvLlxuICogQHBhcmFtIHNlbGZOYW1lc3BhY2UgLSBUaGUgbmFtZXNwYWNlIG9mIHRoZSBwYWdlIGJlaW5nIHJlbmRlcmVkLCBwcmVmZXJyZWQgd2hlbiBhIG5hbWUgaXMgYW1iaWd1b3VzLlxuICogQHJldHVybnMgVGhlIHR5cGUgdGV4dCB3aXRoIG1hcmtkb3duIGxpbmtzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVuZGVyVHlwZVdpdGhMaW5rcyh0eXBlVGV4dDogc3RyaW5nLCBhbGxUeXBlczogTWFwPHN0cmluZywgVHlwZUluZm8+LCBzZWxmVHlwZU5hbWU/OiBzdHJpbmcsIHNlbGZOYW1lc3BhY2U/OiBzdHJpbmcpOiBzdHJpbmcge1xuICAvLyBQcmUtcGFzczogbGluayBPYmplY3QubWV0aG9kIHBhdHRlcm5zIHRvIE1ETiBiZWZvcmUgd29yZC1ieS13b3JkIGxpbmtpbmdcbiAgY29uc3QgTUROX09CSkVDVF9CQVNFID0gJ2h0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2RvY3MvV2ViL0phdmFTY3JpcHQvUmVmZXJlbmNlL0dsb2JhbF9PYmplY3RzL09iamVjdCc7XG4gIGNvbnN0IHdpdGhPYmplY3RNZXRob2RzID0gcmVwbGFjZVJlZ0V4cE1hdGNoZXModHlwZVRleHQsIC9cXGJPYmplY3RcXC4oPzxtZXRob2Q+W2EtekEtWl1bYS16QS1aMC05XSopXFxiL2csIChtYXRjaCkgPT4ge1xuICAgIGNvbnN0IG1ldGhvZCA9IGdldE1hbmRhdG9yeU5hbWVkR3JvdXAobWF0Y2gsICdtZXRob2QnKTtcbiAgICByZXR1cm4gYFtPYmplY3RdKCR7TUROX09CSkVDVF9CQVNFfSkuWyR7bWV0aG9kfV0oJHtNRE5fT0JKRUNUX0JBU0V9LyR7bWV0aG9kfSlgO1xuICB9KTtcbiAgLy8gTWFpbiBwYXNzOiBsaW5rIGluZGl2aWR1YWwgdHlwZSBuYW1lcywgc2tpcHBpbmcgdGV4dCBhbHJlYWR5IGluc2lkZSBtYXJrZG93biBsaW5rc1xuICByZXR1cm4gcmVwbGFjZVJlZ0V4cE1hdGNoZXMoXG4gICAgd2l0aE9iamVjdE1ldGhvZHMsXG4gICAgL1xcW1teXFxdXStcXF1cXChbXildK1xcKXxcXGIoPzx0eXBlTmFtZT5bYS16QS1aXVthLXpBLVowLTldKilcXGIvZyxcbiAgICAobWF0Y2gpID0+IHtcbiAgICAgIGNvbnN0IHR5cGVOYW1lID0gZ2V0T3B0aW9uYWxOYW1lZEdyb3VwKG1hdGNoLCAndHlwZU5hbWUnKTtcbiAgICAgIGlmICh0eXBlTmFtZSA9PT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gbWF0Y2hbMF07XG4gICAgICB9XG4gICAgICAvLyBMaW5rIGB0aGlzYCByZXR1cm4gdHlwZSB0byB0aGUgY3VycmVudCB0eXBlJ3MgcGFnZVxuICAgICAgaWYgKHR5cGVOYW1lID09PSAndGhpcycgJiYgc2VsZlR5cGVOYW1lKSB7XG4gICAgICAgIGNvbnN0IHNlbGZJbmZvID0gZmluZFR5cGUoYWxsVHlwZXMsIHNlbGZUeXBlTmFtZSwgc2VsZk5hbWVzcGFjZSk7XG4gICAgICAgIGlmIChzZWxmSW5mbykge1xuICAgICAgICAgIHJldHVybiBgWyR7dHlwZU5hbWV9XSgke3R5cGVIcmVmKHNlbGZJbmZvKX0pYDtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBTa2lwIGdlbmVyaWMgdHlwZSBwYXJhbWV0ZXJzXG4gICAgICBpZiAoR0VORVJJQ19UWVBFX1BBUkFNUy5oYXModHlwZU5hbWUpKSB7XG4gICAgICAgIHJldHVybiB0eXBlTmFtZTtcbiAgICAgIH1cblxuICAgICAgLy8gQ2hlY2sgb3VyIG93biB0eXBlcyBmaXJzdFxuICAgICAgY29uc3QgaW5mbyA9IGZpbmRUeXBlKGFsbFR5cGVzLCB0eXBlTmFtZSwgc2VsZk5hbWVzcGFjZSk7XG4gICAgICBpZiAoaW5mbykge1xuICAgICAgICByZXR1cm4gYFske3R5cGVOYW1lfV0oJHt0eXBlSHJlZihpbmZvKX0pYDtcbiAgICAgIH1cblxuICAgICAgLy8gQSB0eXBlIGFub3RoZXIgZG9jdW1lbnRlZCBwYWNrYWdlIGRlY2xhcmVzLCBvciBvbmUgdGhlIHNpdGUgbWFwcyBpdHNlbGZcbiAgICAgIGNvbnN0IGV4dGVybmFsVXJsID0gcmVzb2x2ZUV4dGVybmFsVHlwZVVybCh0eXBlTmFtZSk7XG4gICAgICBpZiAoZXh0ZXJuYWxVcmwpIHtcbiAgICAgICAgcmV0dXJuIGBbJHt0eXBlTmFtZX1dKCR7ZXh0ZXJuYWxVcmx9KWA7XG4gICAgICB9XG5cbiAgICAgIC8vIFR5cGVTY3JpcHQgdXRpbGl0eSB0eXBlc1xuICAgICAgY29uc3QgdHNVcmwgPSByZXNvbHZlVHNVdGlsaXR5VXJsKHR5cGVOYW1lKTtcbiAgICAgIGlmICh0c1VybCkge1xuICAgICAgICByZXR1cm4gYFske3R5cGVOYW1lfV0oJHt0c1VybH0pYDtcbiAgICAgIH1cblxuICAgICAgLy8gSlMgZ2xvYmFsIHR5cGVzIChBcnJheSwgUHJvbWlzZSwgTWFwLCBldGMuKVxuICAgICAgY29uc3QgZ2xvYmFsVXJsID0gT2JqZWN0Lmhhc093bihUU19HTE9CQUxfVFlQRVMsIHR5cGVOYW1lKSA/IFRTX0dMT0JBTF9UWVBFU1t0eXBlTmFtZV0gOiB1bmRlZmluZWQ7XG4gICAgICBpZiAoZ2xvYmFsVXJsKSB7XG4gICAgICAgIHJldHVybiBgWyR7dHlwZU5hbWV9XSgke2dsb2JhbFVybH0pYDtcbiAgICAgIH1cblxuICAgICAgLy8gV2ViIEFQSSAvIE1ETiB0eXBlc1xuICAgICAgY29uc3QgbWRuVXJsID0gcmVzb2x2ZVdlYkFwaVVybCh0eXBlTmFtZSk7XG4gICAgICBpZiAobWRuVXJsKSB7XG4gICAgICAgIHJldHVybiBgWyR7dHlwZU5hbWV9XSgke21kblVybH0pYDtcbiAgICAgIH1cblxuICAgICAgLy8gVHlwZVNjcmlwdCBwcmltaXRpdmUgdHlwZXNcbiAgICAgIGNvbnN0IHByaW1pdGl2ZVVybCA9IE9iamVjdC5oYXNPd24oVFNfUFJJTUlUSVZFX1RZUEVTLCB0eXBlTmFtZSkgPyBUU19QUklNSVRJVkVfVFlQRVNbdHlwZU5hbWVdIDogdW5kZWZpbmVkO1xuICAgICAgcmV0dXJuIHByaW1pdGl2ZVVybCA/IGBbJHt0eXBlTmFtZX1dKCR7cHJpbWl0aXZlVXJsfSlgIDogdHlwZU5hbWU7XG4gICAgfVxuICApO1xufVxuXG4vKipcbiAqIFJlc29sdmUgYSB0eXBlIG5vIHBhZ2Ugb2YgdGhpcyBzaXRlIGRvY3VtZW50cyB0byB0aGUgcGFnZSB0aGF0IGRvZXM6IGFub3RoZXIgZG9jdW1lbnRlZCBwYWNrYWdlJ3Mgc2l0ZSwgb3IgYW5cbiAqIGVudHJ5IG9mIHRoZSBzaXRlJ3Mgb3duIGBleHRlcm5hbFR5cGVMaW5rc2Agc2V0dGluZy5cbiAqXG4gKiBAcGFyYW0gbmFtZSAtIFRoZSB0eXBlJ3MgbmFtZS5cbiAqIEByZXR1cm5zIFRoZSBVUkwsIG9yIGB1bmRlZmluZWRgIHdoZW4gbmVpdGhlciBrbm93cyB0aGUgdHlwZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlc29sdmVFeHRlcm5hbFR5cGVVcmwobmFtZTogc3RyaW5nKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgcmV0dXJuIGdldFBhY2thZ2VUeXBlVXJsKG5hbWUpID8/IGdldEFwaURvY1NldHRpbmdzKCkuZXh0ZXJuYWxUeXBlTGlua3MuZ2V0KG5hbWUpO1xufVxuXG4vKipcbiAqIFJlc29sdmUgYEBsaW5rYCB0YWdzLCB3aXRoIG9yIHdpdGhvdXQgYSBgfCBkaXNwbGF5IHRleHRgIHBhcnQsIGluIGRlc2NyaXB0aW9uIHRleHRcbiAqXG4gKiBAcGFyYW0gdGV4dCAtIFRoZSB0ZXh0LlxuICogQHBhcmFtIGFsbFR5cGVzIC0gRXZlcnkgZG9jdW1lbnRlZCB0eXBlLCBrZXllZCBieSBgJHtuYW1lc3BhY2V9IyR7bmFtZX1gLlxuICogQHBhcmFtIHNlbGZOYW1lc3BhY2UgLSBUaGUgbmFtZXNwYWNlIG9mIHRoZSBwYWdlIGJlaW5nIHJlbmRlcmVkLCBwcmVmZXJyZWQgd2hlbiBhIG5hbWUgaXMgYW1iaWd1b3VzLlxuICogQHJldHVybnMgVGhlIHRleHQgd2l0aCBtYXJrZG93biBsaW5rcy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlc29sdmVMaW5rcyh0ZXh0OiBzdHJpbmcsIGFsbFR5cGVzOiBNYXA8c3RyaW5nLCBUeXBlSW5mbz4sIHNlbGZOYW1lc3BhY2U/OiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gcmVwbGFjZVJlZ0V4cE1hdGNoZXModGV4dCwgL1xce0BsaW5rXFxzKyg/PHRhcmdldD5bXnx9XSs/KSg/OlxccypcXHxcXHMqKD88ZGlzcGxheT5bXn1dKz8pKT9cXH0vZywgKG1hdGNoKSA9PiB7XG4gICAgY29uc3QgdGFyZ2V0ID0gZ2V0TWFuZGF0b3J5TmFtZWRHcm91cChtYXRjaCwgJ3RhcmdldCcpLnRyaW0oKTtcbiAgICBjb25zdCBkaXNwbGF5ID0gKGdldE9wdGlvbmFsTmFtZWRHcm91cChtYXRjaCwgJ2Rpc3BsYXknKT8udHJpbSgpID8/IHRhcmdldCkucmVwbGFjZUFsbCgvXFxcXCg/PVs8Pnt9XSkvZywgJycpO1xuXG4gICAgLy8gSGFuZGxlIFR5cGUubWVtYmVyIHJlZmVyZW5jZXMgKGUuZy4sIFBsdWdpbk5vdGljZUNvbXBvbmVudC5zaG93Tm90aWNlKVxuICAgIGNvbnN0IGRvdE1hdGNoID0gL14oPzx0eXBlTmFtZT5bQS1aYS16XVxcdyopXFwuKD88bWVtYmVyTmFtZT5cXHcrKSQvLmV4ZWModGFyZ2V0KTtcbiAgICBpZiAoZG90TWF0Y2gpIHtcbiAgICAgIGNvbnN0IHR5cGVOYW1lID0gZ2V0TWFuZGF0b3J5TmFtZWRHcm91cChkb3RNYXRjaCwgJ3R5cGVOYW1lJyk7XG4gICAgICBjb25zdCBtZW1iZXJOYW1lID0gZ2V0TWFuZGF0b3J5TmFtZWRHcm91cChkb3RNYXRjaCwgJ21lbWJlck5hbWUnKTtcbiAgICAgIGNvbnN0IHR5cGVJbmZvID0gZmluZFR5cGUoYWxsVHlwZXMsIHR5cGVOYW1lLCBzZWxmTmFtZXNwYWNlKTtcbiAgICAgIGlmICh0eXBlSW5mbyAmJiBkb2VzTWVtYmVyUGFnZUV4aXN0KHR5cGVJbmZvLm5hbWVzcGFjZSwgdHlwZUluZm8ubmFtZSwgbWVtYmVyUm91dGVTZWdtZW50KG1lbWJlck5hbWUpKSkge1xuICAgICAgICBjb25zdCB0YXJnZXROc0RpcmVjdG9yeSA9IGdldE5hbWVzcGFjZURpcmVjdG9yeSh0eXBlSW5mby5uYW1lc3BhY2UpO1xuICAgICAgICByZXR1cm4gYFske2Rpc3BsYXl9XSgke2dldEJhc2VQYXRoKCl9L2FwaS8ke3RhcmdldE5zRGlyZWN0b3J5fS8ke3RvVHlwZVJvdXRlU2VnbWVudCh0eXBlSW5mby5uYW1lc3BhY2UsIHR5cGVJbmZvLm5hbWUpfS8ke21lbWJlclJvdXRlU2VnbWVudChtZW1iZXJOYW1lKX0vKWA7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gSGFuZGxlIHNpbXBsZSB0eXBlIHJlZmVyZW5jZXMg4oCUIGlmIGRpc3BsYXkgY29udGFpbnMgZ2VuZXJpYyBhcmdzLCBsaW5rIGVhY2ggdHlwZSBpbmRpdmlkdWFsbHlcbiAgICBjb25zdCBpbmZvID0gZmluZFR5cGUoYWxsVHlwZXMsIHRhcmdldCwgc2VsZk5hbWVzcGFjZSk7XG4gICAgaWYgKGluZm8pIHtcbiAgICAgIHJldHVybiBkaXNwbGF5ICE9PSB0YXJnZXQgJiYgZGlzcGxheS5pbmNsdWRlcygnPCcpID8gcmVuZGVyVHlwZVdpdGhMaW5rcyhkaXNwbGF5LCBhbGxUeXBlcywgdW5kZWZpbmVkLCBzZWxmTmFtZXNwYWNlKSA6IGBbJHtkaXNwbGF5fV0oJHt0eXBlSHJlZihpbmZvKX0pYDtcbiAgICB9XG5cbiAgICBjb25zdCBleHRlcm5hbFVybCA9IHJlc29sdmVFeHRlcm5hbFR5cGVVcmwodGFyZ2V0KTtcbiAgICByZXR1cm4gZXh0ZXJuYWxVcmwgPyBgWyR7ZGlzcGxheX1dKCR7ZXh0ZXJuYWxVcmx9KWAgOiBgXFxgJHtkaXNwbGF5fVxcYGA7XG4gIH0pO1xufVxuXG4vKipcbiAqIFJlc29sdmVzIGEgVHlwZVNjcmlwdCB1dGlsaXR5IHR5cGUgdG8gaXRzIGhhbmRib29rIGVudHJ5LlxuICpcbiAqIEBwYXJhbSBuYW1lIC0gVGhlIHR5cGUncyBuYW1lLlxuICogQHJldHVybnMgVGhlIGhhbmRib29rIFVSTCwgb3IgYHVuZGVmaW5lZGAgd2hlbiBpdCBpcyBub3QgYSB1dGlsaXR5IHR5cGUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZXNvbHZlVHNVdGlsaXR5VXJsKG5hbWU6IHN0cmluZyk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gIGNvbnN0IGhhc2ggPSBUU19VVElMSVRZX1RZUEVTLmdldChuYW1lKTtcbiAgaWYgKGhhc2gpIHtcbiAgICBpZiAoWydJdGVyYWJsZSddLmluY2x1ZGVzKG5hbWUpKSB7XG4gICAgICByZXR1cm4gYGh0dHBzOi8vd3d3LnR5cGVzY3JpcHRsYW5nLm9yZy9kb2NzL2hhbmRib29rL2l0ZXJhdG9ycy1hbmQtZ2VuZXJhdG9ycy5odG1sIyR7aGFzaH1gO1xuICAgIH1cbiAgICBjb25zdCBoYW5kYm9va1BhZ2UgPSBbJ0NhcGl0YWxpemUnLCAnTG93ZXJjYXNlJywgJ1VuY2FwaXRhbGl6ZScsICdVcHBlcmNhc2UnXS5pbmNsdWRlcyhuYW1lKSA/ICcyL3RlbXBsYXRlLWxpdGVyYWwtdHlwZXMnIDogJ3V0aWxpdHktdHlwZXMnOyAvLyBDc3BlbGw6ZGlzYWJsZS1saW5lXG4gICAgcmV0dXJuIGBodHRwczovL3d3dy50eXBlc2NyaXB0bGFuZy5vcmcvZG9jcy9oYW5kYm9vay8ke2hhbmRib29rUGFnZX0uaHRtbCMke2hhc2h9YDtcbiAgfVxuICByZXR1cm4gdW5kZWZpbmVkO1xufVxuXG4vKipcbiAqIFJlc29sdmVzIGEgV2ViIEFQSSB0eXBlIHRvIGl0cyBNRE4gcGFnZS5cbiAqXG4gKiBAcGFyYW0gbmFtZSAtIFRoZSB0eXBlJ3MgbmFtZS5cbiAqIEByZXR1cm5zIFRoZSBNRE4gVVJMLCBvciBgdW5kZWZpbmVkYCB3aGVuIGl0IGlzIG5vdCBhIGtub3duIFdlYiBBUEkgdHlwZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlc29sdmVXZWJBcGlVcmwobmFtZTogc3RyaW5nKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgaWYgKCFPYmplY3QuaGFzT3duKG1vZHVsZVN0YXRlLndlYkFwaVR5cGVzLCBuYW1lKSkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgY29uc3QgZW50cnkgPSBtb2R1bGVTdGF0ZS53ZWJBcGlUeXBlc1tuYW1lXTtcbiAgaWYgKHR5cGVvZiBlbnRyeSA9PT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gZW50cnk7XG4gIH1cbiAgaWYgKHR5cGVvZiBlbnRyeSA9PT0gJ29iamVjdCcgJiYgZW50cnkgIT09IG51bGwgJiYgJ3VybCcgaW4gZW50cnkpIHtcbiAgICBjb25zdCB0eXBlZEVudHJ5ID0gZW50cnkgYXMgV2ViQXBpRW50cnk7XG4gICAgcmV0dXJuIHR5cGVkRW50cnkudXJsO1xuICB9XG4gIHJldHVybiB1bmRlZmluZWQ7XG59XG5cbi8qKlxuICogUmVzb2x2ZSB0aGUgbG93ZXJjYXNlZCBPTi1ESVNLIHNlZ21lbnQgZm9yIGEgdHlwZSAoZmlsZSBwYXRoICsgY29tcG9uZW50LWltcG9ydCByZWxhdGl2ZSBwYXRoKS5cbiAqXG4gKiBAcGFyYW0gbmFtZXNwYWNlIC0gVGhlIHR5cGUncyBuYW1lc3BhY2UuXG4gKiBAcGFyYW0gbmFtZSAtIFRoZSB0eXBlJ3MgbmFtZS5cbiAqIEByZXR1cm5zIFRoZSBzZWdtZW50LlxuICovXG5leHBvcnQgZnVuY3Rpb24gdG9UeXBlRmlsZVNlZ21lbnQobmFtZXNwYWNlOiBzdHJpbmcsIG5hbWU6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiB0eXBlRmlsZVNlZ21lbnRzLmdldChgJHtuYW1lc3BhY2V9IyR7bmFtZX1gKSA/PyB0b1JvdXRlU2VnbWVudChuYW1lKTtcbn1cblxuLyoqXG4gKiBSZXNvbHZlIHRoZSBjYXNlLXByZXNlcnZlZCBVUkwvUk9VVEUgc2VnbWVudCBmb3IgYSB0eXBlIChzbHVnIGZyb250bWF0dGVyICsgaW50ZXJuYWwgbGlua3MpLlxuICpcbiAqIEBwYXJhbSBuYW1lc3BhY2UgLSBUaGUgdHlwZSdzIG5hbWVzcGFjZS5cbiAqIEBwYXJhbSBuYW1lIC0gVGhlIHR5cGUncyBuYW1lLlxuICogQHJldHVybnMgVGhlIHNlZ21lbnQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0b1R5cGVSb3V0ZVNlZ21lbnQobmFtZXNwYWNlOiBzdHJpbmcsIG5hbWU6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiB0eXBlUm91dGVTZWdtZW50cy5nZXQoYCR7bmFtZXNwYWNlfSMke25hbWV9YCkgPz8gdG9Sb3V0ZVNlZ21lbnRQcmVzZXJ2ZUNhc2UobmFtZSk7XG59XG5cbi8qKlxuICogQWJzb2x1dGUgbGluayB0byBhIHR5cGUncyBvdmVydmlldyBwYWdlLlxuICpcbiAqIEBwYXJhbSBpbmZvIC0gVGhlIGRvY3VtZW50ZWQgdHlwZS5cbiAqIEByZXR1cm5zIFRoZSBsaW5rLlxuICovXG5leHBvcnQgZnVuY3Rpb24gdHlwZUhyZWYoaW5mbzogVHlwZUluZm8pOiBzdHJpbmcge1xuICByZXR1cm4gYCR7Z2V0QmFzZVBhdGgoKX0vYXBpLyR7Z2V0TmFtZXNwYWNlRGlyZWN0b3J5KGluZm8ubmFtZXNwYWNlKX0vJHt0b1R5cGVSb3V0ZVNlZ21lbnQoaW5mby5uYW1lc3BhY2UsIGluZm8ubmFtZSl9L2A7XG59XG5cbi8qKlxuICogQ3JlYXRlIGFuIGFic29sdXRlIGxpbmsgdG8gYSB0eXBlIHBhZ2VcbiAqXG4gKiBAcGFyYW0gdHlwZU5hbWUgLSBUaGUgdHlwZSdzIG5hbWUuXG4gKiBAcGFyYW0gYWxsVHlwZXMgLSBFdmVyeSBkb2N1bWVudGVkIHR5cGUsIGtleWVkIGJ5IGAke25hbWVzcGFjZX0jJHtuYW1lfWAuXG4gKiBAcGFyYW0gY3VycmVudE5hbWVzcGFjZSAtIFRoZSBuYW1lc3BhY2Ugb2YgdGhlIHJlZmVyZW5jaW5nIHBhZ2UsIHByZWZlcnJlZCB3aGVuIHRoZSBuYW1lIGlzIGFtYmlndW91cy5cbiAqIEByZXR1cm5zIEEgbWFya2Rvd24gbGluaywgb3IgaW5saW5lIGNvZGUgd2hlbiB0aGUgdHlwZSBpcyBub3QgZG9jdW1lbnRlZC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHR5cGVMaW5rKHR5cGVOYW1lOiBzdHJpbmcsIGFsbFR5cGVzOiBNYXA8c3RyaW5nLCBUeXBlSW5mbz4sIGN1cnJlbnROYW1lc3BhY2U/OiBzdHJpbmcpOiBzdHJpbmcge1xuICBjb25zdCBjbGVhbk5hbWUgPSB0eXBlTmFtZS5yZXBsYWNlKC88Lio+JC8sICcnKS50cmltKCk7XG4gIGNvbnN0IGluZm8gPSBmaW5kVHlwZShhbGxUeXBlcywgY2xlYW5OYW1lLCBjdXJyZW50TmFtZXNwYWNlKTtcbiAgcmV0dXJuIGluZm8gPyBgWyR7ZXNjYXBlTWR4QW5nbGVCcmFja2V0cyh0eXBlTmFtZSl9XSgke3R5cGVIcmVmKGluZm8pfSlgIDogYFxcYCR7dHlwZU5hbWV9XFxgYDtcbn1cblxuZnVuY3Rpb24gZGlzYW1iaWd1YXRlKGJhc2U6IHN0cmluZywgdXNlZDogU2V0PHN0cmluZz4sIGtleU9mOiAoc2VnbWVudDogc3RyaW5nKSA9PiBzdHJpbmcpOiBzdHJpbmcge1xuICBsZXQgc2VnbWVudCA9IGJhc2U7XG4gIGNvbnN0IEZJUlNUX0RJU0FNQklHVUFUSU9OX1NVRkZJWCA9IDI7XG4gIGxldCBzdWZmaXggPSBGSVJTVF9ESVNBTUJJR1VBVElPTl9TVUZGSVg7XG4gIHdoaWxlICh1c2VkLmhhcyhrZXlPZihzZWdtZW50KSkpIHtcbiAgICBzZWdtZW50ID0gYCR7YmFzZX0tJHtTdHJpbmcoc3VmZml4KX1gO1xuICAgIHN1ZmZpeCsrO1xuICB9XG4gIHVzZWQuYWRkKGtleU9mKHNlZ21lbnQpKTtcbiAgcmV0dXJuIHNlZ21lbnQ7XG59XG5cbmZ1bmN0aW9uIGdldEJhc2VQYXRoKCk6IHN0cmluZyB7XG4gIHJldHVybiBnZXRBcGlEb2NTZXR0aW5ncygpLmJhc2VQYXRoO1xufVxuXG4vKipcbiAqIFdhcm4gd2hlbiB0d28gZGlzdGluY3QgbWVtYmVycyBvZiBhIHR5cGUgcHJvZHVjZSB0aGUgc2FtZSBtZW1iZXIgc2x1ZyAoVVJML2ZpbGUgc2VnbWVudCkuIFRoZVxuICogb3B0aW9uYWwtYD9gIHN1ZmZpeCBpcyBzdHJpcHBlZCBmaXJzdCwgc28gYSBwcm9wZXJ0eSBhcHBlYXJpbmcgYXMgYm90aCByZXF1aXJlZCBhbmQgb3B0aW9uYWwgaXMgbm90XG4gKiBhIGZhbHNlIHBvc2l0aXZlLlxuICpcbiAqIEBwYXJhbSBpbmZvIC0gVGhlIHR5cGUuXG4gKiBAcGFyYW0gbmFtZXNwYWNlIC0gVGhlIHR5cGUncyBuYW1lc3BhY2UuXG4gKi9cbmZ1bmN0aW9uIHdhcm5NZW1iZXJTbHVnQ29sbGlzaW9ucyhpbmZvOiBUeXBlSW5mbywgbmFtZXNwYWNlOiBzdHJpbmcpOiB2b2lkIHtcbiAgY29uc3Qgc2VlbiA9IG5ldyBNYXA8c3RyaW5nLCBzdHJpbmc+KCk7XG4gIGZ1bmN0aW9uIGNoZWNrKHNsdWc6IHN0cmluZywgb3JpZ2luYWw6IHN0cmluZyk6IHZvaWQge1xuICAgIGNvbnN0IG5vcm1hbGl6ZWQgPSBvcmlnaW5hbC5yZXBsYWNlKC9cXD8kLywgJycpO1xuICAgIGNvbnN0IGV4aXN0aW5nID0gc2Vlbi5nZXQoc2x1Zyk7XG4gICAgaWYgKGV4aXN0aW5nICE9PSB1bmRlZmluZWQgJiYgZXhpc3RpbmcgIT09IG5vcm1hbGl6ZWQpIHtcbiAgICAgIGNvbnNvbGUud2FybihgTWVtYmVyIHJvdXRlIGNvbGxpc2lvbiBpbiBcIiR7bmFtZXNwYWNlfSMke2luZm8ubmFtZX1cIjogXCIke2V4aXN0aW5nfVwiIGFuZCBcIiR7bm9ybWFsaXplZH1cIiBib3RoIG1hcCB0byBcIi8ke3NsdWd9L1wiLmApO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBzZWVuLnNldChzbHVnLCBub3JtYWxpemVkKTtcbiAgfVxuICBmb3IgKGNvbnN0IHByb3BlcnR5IG9mIGluZm8ucHJvcGVydGllcykge1xuICAgIGNoZWNrKG1lbWJlclNsdWcocHJvcGVydHkubmFtZSksIHByb3BlcnR5Lm5hbWUpO1xuICB9XG4gIGZvciAoY29uc3QgbWV0aG9kIG9mIGluZm8ubWV0aG9kcykge1xuICAgIGNoZWNrKG92ZXJsb2FkU2x1ZyhtZXRob2Qub3ZlcmxvYWRLZXkpLCBtZXRob2Qub3ZlcmxvYWRLZXkpO1xuICB9XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQU9BLHFCQUdPO0FBQ1AscUJBQTZCO0FB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
|
|
@@ -44,4 +44,4 @@ function getApiDocSettings() {
|
|
|
44
44
|
configureApiDocs,
|
|
45
45
|
getApiDocSettings
|
|
46
46
|
});
|
|
47
|
-
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vc3JjL2RvY3Mtc2l0ZS9hcGktZG9jLXNldHRpbmdzLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIEBmaWxlXG4gKlxuICogVGhlIHBlci1zaXRlIHNldHRpbmdzIG9mIHRoZSBBUEkgZG9jdW1lbnRhdGlvbiBnZW5lcmF0b3I6IHdoZXJlIGl0IHdyaXRlcywgd2hpY2ggcGFja2FnZSBpdCBkb2N1bWVudHMsIHRoZSBiYXNlXG4gKiBwYXRoIGl0cyBsaW5rcyBjYXJyeSwgYW5kIHRoZSBleHRlcm5hbCBsaW5rcyBhIHNpdGUgYWRkcyB0byB0aGUgZ2VuZXJpYyBvbmVzLlxuICovXG5cbi8qKlxuICogVGhlIHNldHRpbmdzIHRoZSBBUEkgZG9jdW1lbnRhdGlvbiBnZW5lcmF0b3IgcmVhZHMgd2hpbGUgaXQgcmVuZGVycyBwYWdlcyBhbmQgbGlua3MuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQXBpRG9jU2V0dGluZ3Mge1xuICAvKipcbiAgICogVGhlIHJvb3QgQVBJIHBhZ2UncyBpbnRybywgYXMgTWFya2Rvd24sIGluIHBsYWNlIG9mIHRoZSBnZW5lcmF0ZWQgb25lOyBzdHJpcHBlZCBvZiBpdHMgTWFya2Rvd24sIGl0IGlzIGFsc28gdGhlXG4gICAqIHBhZ2UncyBgZGVzY3JpcHRpb25gLiBGb3IgYSBwYWNrYWdlIHdob3NlIGFycmFuZ2VtZW50IHRoZSBnZW5lcmF0ZWQgaW50cm8gY2Fubm90IGV4cGxhaW4uXG4gICAqL1xuICByZWFkb25seSBhcGlJbmRleEludHJvPzogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG4gIC8qKlxuICAgKiBUaGUgc2l0ZSdzIGJhc2UgcGF0aCwgd2l0aCBhIGxlYWRpbmcgc2xhc2ggYW5kIG5vIHRyYWlsaW5nIG9uZSwgZS5nLiBgL3R5cGVzY3JpcHQtbGliYC4gRXZlcnkgaW4tY29udGVudCBsaW5rXG4gICAqIHRoZSBnZW5lcmF0b3IgZW1pdHMgc3RhcnRzIHdpdGggaXQuXG4gICAqL1xuICByZWFkb25seSBiYXNlUGF0aDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBGb2xkZXIgbmFtZXMgd2hvc2Ugc3VidHJlZSBpcyBub3QgZG9jdW1lbnRlZCwgaW4gYWRkaXRpb24gdG8gYEB0eXBlc2AsIGBzdHlsZXNgIGFuZCBgdGVzdC1oZWxwZXJzYC4gQXBwbGllc1xuICAgKiB0byB0aGlzIHNpdGUncyBzb3VyY2Ugd2FsayBvbmx5OiBhIGxpbmsgaW50byBhbm90aGVyIHBhY2thZ2UncyBzaXRlIGFzc3VtZXMgdGhhdCBzaXRlJ3MgZ2VuZXJhdG9yIHNraXBwZWQgdGhlXG4gICAqIGRlZmF1bHQgZm9sZGVycyBhbG9uZS5cbiAgICovXG4gIHJlYWRvbmx5IGV4Y2x1ZGVkRGlyZWN0b3JpZXM/OiByZWFkb25seSBzdHJpbmdbXSB8IHVuZGVmaW5lZDtcblxuICAvKipcbiAgICogVHlwZSBuYW1lcyBtYXBwZWQgdG8gdGhlIFVSTCB0aGVpciByZWZlcmVuY2VzIGxpbmsgdG8sIGZvciB0eXBlcyBuZWl0aGVyIHRoaXMgcGFja2FnZSBub3IgYSB7QGxpbmsgcGFja2FnZVNpdGVzfVxuICAgKiBwYWNrYWdlIGRlY2xhcmVzLCBlLmcuIGFuIGVjb3N5c3RlbSdzIG93biBBUEkgcmVmZXJlbmNlLiBDb25zdWx0ZWQgYmVmb3JlIHRoZSBnZW5lcmljIFR5cGVTY3JpcHQsIEphdmFTY3JpcHQgYW5kXG4gICAqIFdlYiBBUEkgbGlua3MsIHNvIGFuIGVudHJ5IGhlcmUgd2lucyBvdmVyIHRoZW0uXG4gICAqL1xuICByZWFkb25seSBleHRlcm5hbFR5cGVMaW5rczogUmVhZG9ubHlNYXA8c3RyaW5nLCBzdHJpbmc+
|
|
47
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vc3JjL2RvY3Mtc2l0ZS9hcGktZG9jLXNldHRpbmdzLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIEBmaWxlXG4gKlxuICogVGhlIHBlci1zaXRlIHNldHRpbmdzIG9mIHRoZSBBUEkgZG9jdW1lbnRhdGlvbiBnZW5lcmF0b3I6IHdoZXJlIGl0IHdyaXRlcywgd2hpY2ggcGFja2FnZSBpdCBkb2N1bWVudHMsIHRoZSBiYXNlXG4gKiBwYXRoIGl0cyBsaW5rcyBjYXJyeSwgYW5kIHRoZSBleHRlcm5hbCBsaW5rcyBhIHNpdGUgYWRkcyB0byB0aGUgZ2VuZXJpYyBvbmVzLlxuICovXG5cbi8qKlxuICogVGhlIHNldHRpbmdzIHRoZSBBUEkgZG9jdW1lbnRhdGlvbiBnZW5lcmF0b3IgcmVhZHMgd2hpbGUgaXQgcmVuZGVycyBwYWdlcyBhbmQgbGlua3MuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQXBpRG9jU2V0dGluZ3Mge1xuICAvKipcbiAgICogVGhlIHJvb3QgQVBJIHBhZ2UncyBpbnRybywgYXMgTWFya2Rvd24sIGluIHBsYWNlIG9mIHRoZSBnZW5lcmF0ZWQgb25lOyBzdHJpcHBlZCBvZiBpdHMgTWFya2Rvd24sIGl0IGlzIGFsc28gdGhlXG4gICAqIHBhZ2UncyBgZGVzY3JpcHRpb25gLiBGb3IgYSBwYWNrYWdlIHdob3NlIGFycmFuZ2VtZW50IHRoZSBnZW5lcmF0ZWQgaW50cm8gY2Fubm90IGV4cGxhaW4uXG4gICAqL1xuICByZWFkb25seSBhcGlJbmRleEludHJvPzogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG4gIC8qKlxuICAgKiBUaGUgc2l0ZSdzIGJhc2UgcGF0aCwgd2l0aCBhIGxlYWRpbmcgc2xhc2ggYW5kIG5vIHRyYWlsaW5nIG9uZSwgZS5nLiBgL3R5cGVzY3JpcHQtbGliYC4gRXZlcnkgaW4tY29udGVudCBsaW5rXG4gICAqIHRoZSBnZW5lcmF0b3IgZW1pdHMgc3RhcnRzIHdpdGggaXQuXG4gICAqL1xuICByZWFkb25seSBiYXNlUGF0aDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBGb2xkZXIgbmFtZXMgd2hvc2Ugc3VidHJlZSBpcyBub3QgZG9jdW1lbnRlZCwgaW4gYWRkaXRpb24gdG8gYEB0eXBlc2AsIGBzdHlsZXNgIGFuZCBgdGVzdC1oZWxwZXJzYC4gQXBwbGllc1xuICAgKiB0byB0aGlzIHNpdGUncyBzb3VyY2Ugd2FsayBvbmx5OiBhIGxpbmsgaW50byBhbm90aGVyIHBhY2thZ2UncyBzaXRlIGFzc3VtZXMgdGhhdCBzaXRlJ3MgZ2VuZXJhdG9yIHNraXBwZWQgdGhlXG4gICAqIGRlZmF1bHQgZm9sZGVycyBhbG9uZS5cbiAgICovXG4gIHJlYWRvbmx5IGV4Y2x1ZGVkRGlyZWN0b3JpZXM/OiByZWFkb25seSBzdHJpbmdbXSB8IHVuZGVmaW5lZDtcblxuICAvKipcbiAgICogVHlwZSBuYW1lcyBtYXBwZWQgdG8gdGhlIFVSTCB0aGVpciByZWZlcmVuY2VzIGxpbmsgdG8sIGZvciB0eXBlcyBuZWl0aGVyIHRoaXMgcGFja2FnZSBub3IgYSB7QGxpbmsgcGFja2FnZVNpdGVzfVxuICAgKiBwYWNrYWdlIGRlY2xhcmVzLCBlLmcuIGFuIGVjb3N5c3RlbSdzIG93biBBUEkgcmVmZXJlbmNlLiBDb25zdWx0ZWQgYmVmb3JlIHRoZSBnZW5lcmljIFR5cGVTY3JpcHQsIEphdmFTY3JpcHQgYW5kXG4gICAqIFdlYiBBUEkgbGlua3MsIHNvIGFuIGVudHJ5IGhlcmUgd2lucyBvdmVyIHRoZW0uXG4gICAqL1xuICByZWFkb25seSBleHRlcm5hbFR5cGVMaW5rczogUmVhZG9ubHlNYXA8c3RyaW5nLCBzdHJpbmc+O1xuXG4gIC8qKlxuICAgKiBOYW1lcyB0aGF0IGFyZSBuZXZlciBsaW5rZWQgYXMgdHlwZXMsIGluIGFkZGl0aW9uIHRvIHRoZSBidWlsdC1pbiBnZW5lcmljIHBhcmFtZXRlciBuYW1lcyBhbmQgZXZlcnkgdHlwZVxuICAgKiBwYXJhbWV0ZXIgYSBkb2N1bWVudGVkIHR5cGUgZGVjbGFyZXM6IHR5cGUgcGFyYW1ldGVycyB0aGUgc2NhbiBkb2VzIG5vdCBmaW5kLlxuICAgKi9cbiAgcmVhZG9ubHkgZ2VuZXJpY1R5cGVQYXJhbWV0ZXJzPzogcmVhZG9ubHkgc3RyaW5nW10gfCB1bmRlZmluZWQ7XG5cbiAgLyoqXG4gICAqIEJ1aWxkcyBlYWNoIGV4cG9ydCdzIGltcG9ydCBzdGF0ZW1lbnQsIGZvciBhIHBhY2thZ2Ugd2hvc2UgZXhwb3J0cyBhcmUgbm90IGltcG9ydGVkIGZyb21cbiAgICogYDxwYWNrYWdlTmFtZT4vPG5hbWVzcGFjZT5gLCBlLmcuIG9uZSBwdWJsaXNoaW5nIGJhcnJlbCBlbnRyeSBwb2ludHMuIFJldHVybmluZyBgdW5kZWZpbmVkYCBzaG93cyBubyBzdGF0ZW1lbnQuXG4gICAqIFVuc2V0LCBldmVyeSBzdGF0ZW1lbnQgaXMgdGhlIHtAbGluayBJbXBvcnRTdGF0ZW1lbnRDb250ZXh0LmRlZmF1bHRJbXBvcnRTdGF0ZW1lbnR9LlxuICAgKi9cbiAgcmVhZG9ubHkgaW1wb3J0U3RhdGVtZW50PzogSW1wb3J0U3RhdGVtZW50UHJvdmlkZXIgfCB1bmRlZmluZWQ7XG5cbiAgLyoqXG4gICAqIEJ1aWxkcyB0aGUgY2FzZS1wcmVzZXJ2ZWQgcm91dGUgc2VnbWVudCBvZiBhIG1lbWJlcidzIHBhZ2UsIG92ZXJyaWRpbmcgdGhlIGdlbmVyYXRvcidzIHNsdWcgd2hlcmUgaXQgcmV0dXJucyBhXG4gICAqIHN0cmluZy4gVGhlIGZpbGUgaXMgd3JpdHRlbiB1bmRlciB0aGUgc2VnbWVudCBsb3dlcmNhc2VkLiBUaGUgZ2VuZXJhdG9yJ3Mgb3duIHNsdWcgYWxyZWFkeSBrZWVwcyBhIG5hbWUnc1xuICAgKiB0cmFpbGluZyB1bmRlcnNjb3Jlcywgc28gYGNyZWF0ZV9fYCBhbmQgYGNyZWF0ZWAgbmV2ZXIgc2hhcmUgYSBwYWdlLlxuICAgKi9cbiAgcmVhZG9ubHkgbWVtYmVyUm91dGVTZWdtZW50PzogTWVtYmVyUm91dGVTZWdtZW50UHJvdmlkZXIgfCB1bmRlZmluZWQ7XG5cbiAgLyoqXG4gICAqIFRoZSBmb2xkZXIgdGhlIGdlbmVyYXRlZCBBUEkgcGFnZXMgYXJlIHdyaXR0ZW4gdG8sIG5vcm1hbGx5IGA8ZG9jcz4vc3JjL2NvbnRlbnQvZG9jcy9hcGlgLlxuICAgKi9cbiAgcmVhZG9ubHkgb3V0cHV0RGlyZWN0b3J5OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBkb2N1bWVudGVkIHBhY2thZ2UncyBuYW1lLCBlLmcuIGBAbW5hb3Vtb3YvdHlwZXNjcmlwdC1saWJgLiBJbXBvcnQgc3RhdGVtZW50cyBhcmUgYnVpbHQgZnJvbSBpdCwgdW5sZXNzXG4gICAqIHtAbGluayBpbXBvcnRTdGF0ZW1lbnR9IGJ1aWxkcyB0aGVtLlxuICAgKi9cbiAgcmVhZG9ubHkgcGFja2FnZU5hbWU6IHN0cmluZztcblxuICAvKipcbiAgICogUGFja2FnZSBuYW1lcyBtYXBwZWQgdG8gdGhlIHJvb3QgVVJMIG9mIHRoZWlyIGRvY3VtZW50YXRpb24gc2l0ZSwgd2l0aCBhIHRyYWlsaW5nIHNsYXNoLiBBIHR5cGUgd2hvc2VcbiAgICogZGVjbGFyYXRpb24gcmVzb2x2ZXMgaW50byBvbmUgb2YgdGhlc2UgcGFja2FnZXMgbGlua3MgdG8gaXRzIHBhZ2Ugb24gdGhhdCBzaXRlLlxuICAgKi9cbiAgcmVhZG9ubHkgcGFja2FnZVNpdGVzOiBSZWFkb25seU1hcDxzdHJpbmcsIHN0cmluZz47XG5cbiAgLyoqXG4gICAqIFRoZSBhYnNvbHV0ZSBwYXRoIG9mIHRoZSBwYWNrYWdlJ3Mgb25lIHB1YmxpYyBlbnRyeSBwb2ludCwgZm9yIGEgcGFja2FnZSB0aGF0IHB1Ymxpc2hlcyBpdHMgQVBJIGZyb20gYSBiYXJyZWxcbiAgICogcmF0aGVyIHRoYW4gb25lIGltcG9ydCBzdWJwYXRoIHBlciBtb2R1bGUuIFNldCwgdGhlIHJlZmVyZW5jZSBkb2N1bWVudHMgb25seSB0aGUgZXhwb3J0cyB0aGF0IGJhcnJlbCByZS1leHBvcnRzLFxuICAgKiBmb3VuZCBieSBmb2xsb3dpbmcgaXRzIGBleHBvcnQgLi4uIGZyb21gIHN0YXRlbWVudHMgcmF0aGVyIHRoYW4gYnkgd2Fsa2luZyB0aGUgc291cmNlIGZvbGRlciwgYW5kIGV2ZXJ5IGltcG9ydFxuICAgKiBzdGF0ZW1lbnQgaW1wb3J0cyBmcm9tIHRoZSBwYWNrYWdlIHJvb3QuIEEgbmFtZXNwYWNlIHN0aWxsIGdyb3VwcyB0aGUgcmVmZXJlbmNlIGJ5IHNvdXJjZSBtb2R1bGUuXG4gICAqL1xuICByZWFkb25seSBwdWJsaWNBcGlFbnRyeT86IHN0cmluZyB8IHVuZGVmaW5lZDtcblxuICAvKipcbiAgICogVGhlIEpTT04gZmlsZSB0aGUgZ2VuZXJhdGVkIFN0YXJsaWdodCBzaWRlYmFyIGlzIHdyaXR0ZW4gdG8uXG4gICAqL1xuICByZWFkb25seSBzaWRlYmFyRmlsZTogc3RyaW5nO1xufVxuXG4vKipcbiAqIFdoYXQge0BsaW5rIEFwaURvY1NldHRpbmdzLmltcG9ydFN0YXRlbWVudH0gaXMgdG9sZCBhYm91dCB0aGUgZXhwb3J0IHdob3NlIGltcG9ydCBzdGF0ZW1lbnQgaXQgYnVpbGRzLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEltcG9ydFN0YXRlbWVudENvbnRleHQge1xuICAvKipcbiAgICogVGhlIHN0YXRlbWVudCB0aGUgZ2VuZXJhdG9yIHdyaXRlcyB3aGVuIG5vIGhvb2sgaXMgc2V0LCBlLmcuXG4gICAqIGBpbXBvcnQgdHlwZSB7IEFscGhhIH0gZnJvbSAnQG1uYW91bW92L3R5cGVzY3JpcHQtbGliL2FscGhhJztgLlxuICAgKi9cbiAgcmVhZG9ubHkgZGVmYXVsdEltcG9ydFN0YXRlbWVudDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRoZSBleHBvcnQgaXMgYSB0eXBlIG9ubHkgKGFuIGludGVyZmFjZSwgYSB0eXBlIGFsaWFzIG9yIGFuIGVudW0pLCBpbXBvcnRlZCB3aXRoIGBpbXBvcnQgdHlwZWAuXG4gICAqL1xuICByZWFkb25seSBpc1R5cGVPbmx5OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBUaGUgZXhwb3J0J3Mga2luZCwgZS5nLiBgY2xhc3NgLCBgZnVuY3Rpb25gLCBgaW50ZXJmYWNlYC5cbiAgICovXG4gIHJlYWRvbmx5IGtpbmQ6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIGV4cG9ydCdzIG5hbWUuXG4gICAqL1xuICByZWFkb25seSBuYW1lOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBleHBvcnQncyBuYW1lc3BhY2U6IGl0cyBzb3VyY2UgcGF0aCByZWxhdGl2ZSB0byB0aGUgc291cmNlIGZvbGRlciwgd2l0aG91dCBpdHMgZXh0ZW5zaW9uLlxuICAgKi9cbiAgcmVhZG9ubHkgbmFtZXNwYWNlOiBzdHJpbmc7XG59XG5cbi8qKlxuICogQnVpbGRzIHRoZSBpbXBvcnQgc3RhdGVtZW50IG9mIGEgZG9jdW1lbnRlZCBleHBvcnQuXG4gKlxuICogQHBhcmFtIGNvbnRleHQgLSBUaGUgZXhwb3J0LlxuICogQHJldHVybnMgVGhlIHN0YXRlbWVudCwgb3IgYHVuZGVmaW5lZGAgdG8gc2hvdyBub25lLlxuICovXG5leHBvcnQgdHlwZSBJbXBvcnRTdGF0ZW1lbnRQcm92aWRlciA9IChjb250ZXh0OiBJbXBvcnRTdGF0ZW1lbnRDb250ZXh0KSA9PiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cbi8qKlxuICogQnVpbGRzIHRoZSBjYXNlLXByZXNlcnZlZCByb3V0ZSBzZWdtZW50IG9mIGEgbWVtYmVyJ3MgcGFnZS5cbiAqXG4gKiBAcGFyYW0gbmFtZSAtIEEgcHJvcGVydHkncyBuYW1lLCBvciBhIG1ldGhvZCdzIG92ZXJsb2FkIGtleTogaXRzIG5hbWUsIG9yIGBvbignY2hhbmdlZCcpYCBmb3IgYW4gZXZlbnQgbWV0aG9kXG4gKiBrZXllZCBieSBpdHMgZmlyc3QgYXJndW1lbnQuXG4gKiBAcmV0dXJucyBUaGUgc2VnbWVudCwgb3IgYHVuZGVmaW5lZGAgZm9yIHRoZSBnZW5lcmF0b3IncyBvd24uXG4gKi9cbmV4cG9ydCB0eXBlIE1lbWJlclJvdXRlU2VnbWVudFByb3ZpZGVyID0gKG5hbWU6IHN0cmluZykgPT4gc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG5pbnRlcmZhY2UgTW9kdWxlU3RhdGUge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgdHlwZXNjcmlwdC1kZXYtdG9vbGtpdC9yZWFkb25seS1pbnRlcmZhY2UtbWVtYmVycyAtLSBDb25maWd1cmF0aW9uIHJlcGxhY2VzIHRoZSBhY3RpdmUgc2V0dGluZ3MgYmV0d2VlbiBidWlsZHMuXG4gIHNldHRpbmdzOiBBcGlEb2NTZXR0aW5ncyB8IHVuZGVmaW5lZDtcbn1cblxuY29uc3QgbW9kdWxlU3RhdGU6IE1vZHVsZVN0YXRlID0ge1xuICBzZXR0aW5nczogdW5kZWZpbmVkXG59O1xuXG4vKipcbiAqIFNldHMgdGhlIHNldHRpbmdzIGV2ZXJ5IGxhdGVyIHBhZ2UgYW5kIGxpbmsgcmVhZHMuXG4gKlxuICogQHBhcmFtIHNldHRpbmdzIC0gVGhlIHNldHRpbmdzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gY29uZmlndXJlQXBpRG9jcyhzZXR0aW5nczogQXBpRG9jU2V0dGluZ3MpOiB2b2lkIHtcbiAgbW9kdWxlU3RhdGUuc2V0dGluZ3MgPSBzZXR0aW5ncztcbn1cblxuLyoqXG4gKiBHZXRzIHRoZSBzZXR0aW5ncyBzZXQgYnkge0BsaW5rIGNvbmZpZ3VyZUFwaURvY3N9LlxuICpcbiAqIEByZXR1cm5zIFRoZSBzZXR0aW5ncy5cbiAqIEB0aHJvd3MgSWYge0BsaW5rIGNvbmZpZ3VyZUFwaURvY3N9IGhhcyBub3QgYmVlbiBjYWxsZWQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRBcGlEb2NTZXR0aW5ncygpOiBBcGlEb2NTZXR0aW5ncyB7XG4gIGlmIChtb2R1bGVTdGF0ZS5zZXR0aW5ncyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdUaGUgQVBJIGRvY3VtZW50YXRpb24gZ2VuZXJhdG9yIGlzIG5vdCBjb25maWd1cmVkOiBjYWxsIGNvbmZpZ3VyZUFwaURvY3MoKSBmaXJzdC4nKTtcbiAgfVxuXG4gIHJldHVybiBtb2R1bGVTdGF0ZS5zZXR0aW5ncztcbn1cbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBNklBLE1BQU0sY0FBMkI7QUFBQSxFQUMvQixVQUFVO0FBQ1o7QUFPTyxTQUFTLGlCQUFpQixVQUFnQztBQUMvRCxjQUFZLFdBQVc7QUFDekI7QUFRTyxTQUFTLG9CQUFvQztBQUNsRCxNQUFJLFlBQVksYUFBYSxRQUFXO0FBQ3RDLFVBQU0sSUFBSSxNQUFNLG1GQUFtRjtBQUFBLEVBQ3JHO0FBRUEsU0FBTyxZQUFZO0FBQ3JCOyIsCiAgIm5hbWVzIjogW10KfQo=
|
|
@@ -19,4 +19,4 @@ var __copyProps = (to, from, except, desc) => {
|
|
|
19
19
|
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
20
20
|
var api_doc_types_exports = {};
|
|
21
21
|
module.exports = __toCommonJS(api_doc_types_exports);
|
|
22
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
22
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vc3JjL2RvY3Mtc2l0ZS9hcGktZG9jLXR5cGVzLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIEBmaWxlXG4gKlxuICogU2hhcmVkIGRhdGEtbW9kZWwgdHlwZXMgZm9yIHRoZSBBUEkgZG9jdW1lbnRhdGlvbiBnZW5lcmF0b3IuXG4gKi9cblxuLyoqXG4gKiBBIGZlbmNlZCBjb2RlIGJsb2NrIG9mIGEgbWFya2Rvd24gdGV4dCwgd2l0aCB0aGUgbGFuZ3VhZ2UgaXRzIGZlbmNlIG5hbWVzIChlbXB0eSB3aGVuIG5vbmUpLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIENvZGVTZWdtZW50IHtcbiAgcmVhZG9ubHkgbGFuZzogc3RyaW5nO1xuICByZWFkb25seSB0ZXh0OiBzdHJpbmc7XG4gIHJlYWRvbmx5IHR5cGU6ICdjb2RlJztcbn1cblxuLyoqXG4gKiBBIGRvY3VtZW50ZWQgZW51bSBtZW1iZXIuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRW51bU1lbWJlckluZm8ge1xuICByZWFkb25seSBkZXNjcmlwdGlvbjogc3RyaW5nO1xuICByZWFkb25seSBuYW1lOiBzdHJpbmc7XG4gIHJlYWRvbmx5IHZhbHVlOiBzdHJpbmc7XG59XG5cbi8qKlxuICogQSBydW4gb2YgYSBtYXJrZG93biB0ZXh0OiBwcm9zZSwgb3IgYSBmZW5jZWQgY29kZSBibG9jay5cbiAqL1xuZXhwb3J0IHR5cGUgTWFya2Rvd25TZWdtZW50ID0gQ29kZVNlZ21lbnQgfCBQcm9zZVNlZ21lbnQ7XG5cbi8qKlxuICogQSBkb2N1bWVudGVkIHByb3BlcnR5LCBtZXRob2QsIGNvbnN0cnVjdG9yIG9yIGZ1bmN0aW9uIHNpZ25hdHVyZS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBNZW1iZXJJbmZvIHtcbiAgcmVhZG9ubHkgZGVzY3JpcHRpb246IHN0cmluZztcbiAgcmVhZG9ubHkgZXhhbXBsZXM6IHN0cmluZ1tdO1xuICByZWFkb25seSBpbmhlcml0ZWRGcm9tOiBzdHJpbmc7XG4gIHJlYWRvbmx5IGlzU3RhdGljOiBib29sZWFuO1xuICByZWFkb25seSBuYW1lOiBzdHJpbmc7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSB0eXBlc2NyaXB0LWRldi10b29sa2l0L3JlYWRvbmx5LWludGVyZmFjZS1tZW1iZXJzIC0tIE92ZXJsb2FkIGdyb3VwaW5nIGFzc2lnbnMgdGhpcyBrZXkgYWZ0ZXIgY29sbGVjdGluZyBzaWduYXR1cmVzLlxuICBvdmVybG9hZEtleTogc3RyaW5nO1xuICByZWFkb25seSBwYXJhbWV0ZXJzOiBQYXJhbWV0ZXJJbmZvW107XG4gIHJlYWRvbmx5IHJlbWFya3M6IHN0cmluZztcbiAgcmVhZG9ubHkgcmV0dXJuRGVzY3JpcHRpb246IHN0cmluZztcbiAgcmVhZG9ubHkgcmV0dXJuVHlwZTogc3RyaW5nO1xuICByZWFkb25seSBzaWduYXR1cmU6IHN0cmluZztcbiAgcmVhZG9ubHkgc2luY2U6IHN0cmluZztcbiAgcmVhZG9ubHkgdHlwZTogc3RyaW5nO1xufVxuXG4vKipcbiAqIEEgZ2VuZXJhdGVkIHBhZ2UncyBjb250ZW50IGFuZCB0aGUgcGF0aCBpdCBpcyB3cml0dGVuIHRvLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFBhZ2VDb250ZW50IHtcbiAgcmVhZG9ubHkgY29udGVudDogc3RyaW5nO1xuICByZWFkb25seSBmaWxlUGF0aDogc3RyaW5nO1xufVxuXG4vKipcbkZyb250bWF0dGVyIHNoYXJlZCBieSBldmVyeSBnZW5lcmF0ZWQgcGFnZS4gYGRlc2NyaXB0aW9uYCBhbmQgYHNpZ25hdHVyZWAgYXJlIG9wdGlvbmFsIGJlY2F1c2Ugbm90XG5ldmVyeSBwYWdlIGhhcyB0aGVtLCBidXQgYSBwYWdlIHRoYXQgSEFTIG9uZSBtdXN0IGVtaXQgaXQ6IGJvdGggZmVlZCB0aGUgcGFnZSdzIE9HIGNhcmQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUGFnZUZyb250TWF0dGVyIHtcbiAgcmVhZG9ubHkgZGVzY3JpcHRpb24/OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gIHJlYWRvbmx5IHNpZGViYXJMYWJlbDogc3RyaW5nO1xuICByZWFkb25seSBzaWduYXR1cmU/OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gIHJlYWRvbmx5IHNsdWc6IHN0cmluZztcbiAgcmVhZG9ubHkgdGl0bGU6IHN0cmluZztcbn1cblxuLyoqXG4gKiBBIGRvY3VtZW50ZWQgcGFyYW1ldGVyLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFBhcmFtZXRlckluZm8ge1xuICByZWFkb25seSBkZXNjcmlwdGlvbjogc3RyaW5nO1xuICByZWFkb25seSBuYW1lOiBzdHJpbmc7XG4gIHJlYWRvbmx5IHR5cGU6IHN0cmluZztcbn1cblxuLyoqXG4gKiBBIHJ1biBvZiBtYXJrZG93biBwcm9zZSBiZXR3ZWVuIGNvZGUgYmxvY2tzLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFByb3NlU2VnbWVudCB7XG4gIHJlYWRvbmx5IHRleHQ6IHN0cmluZztcbiAgcmVhZG9ubHkgdHlwZTogJ3Byb3NlJztcbn1cblxuLyoqXG4gKiBUaGUgcGFydCBvZiBhIHRzLW1vcnBoIG1ldGhvZCBvciBmdW5jdGlvbiB0aGUgZGVjbGFyZWQgcmV0dXJuIHR5cGUgaXMgcmVhZCBmcm9tLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFJldHVyblR5cGVQcm92aWRlciB7XG4gIHJlYWRvbmx5IGdldFJldHVyblR5cGU6ICgpID0+IFRleHRQcm92aWRlcjtcbiAgcmVhZG9ubHkgZ2V0UmV0dXJuVHlwZU5vZGU/OiAoKSA9PiBUZXh0UHJvdmlkZXIgfCB1bmRlZmluZWQ7XG59XG5cbi8qKlxuICogQSBjb2xsYXBzaWJsZSBTdGFybGlnaHQgc2lkZWJhciBncm91cC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTaWRlYmFyRW50cnkge1xuICByZWFkb25seSBjb2xsYXBzZWQ6IGJvb2xlYW47XG4gIHJlYWRvbmx5IGl0ZW1zOiAoU2lkZWJhckVudHJ5IHwgU2lkZWJhckxpbmspW107XG4gIHJlYWRvbmx5IGxhYmVsOiBzdHJpbmc7XG59XG5cbi8qKlxuICogQSBTdGFybGlnaHQgc2lkZWJhciBsaW5rLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFNpZGViYXJMaW5rIHtcbiAgcmVhZG9ubHkgbGFiZWw6IHN0cmluZztcbiAgcmVhZG9ubHkgbGluazogc3RyaW5nO1xufVxuXG4vKipcblJlY3Vyc2l2ZSB0cmVlIG5vZGUgZm9yIGJ1aWxkaW5nIHRoZSBzaWRlYmFyXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU2lkZWJhclRyZWVOb2RlIHtcbiAgcmVhZG9ubHkgY2hpbGRyZW46IE1hcDxzdHJpbmcsIFNpZGViYXJUcmVlTm9kZT47XG4gIHJlYWRvbmx5IHR5cGVzOiBUeXBlSW5mb1tdO1xufVxuXG4vKipcbiAqIEEgdHMtbW9ycGggbm9kZSBvciB0eXBlIHdob3NlIHRleHQgY2FuIGJlIHByaW50ZWQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVGV4dFByb3ZpZGVyIHtcbiAgcmVhZG9ubHkgZ2V0VGV4dDogKCkgPT4gc3RyaW5nO1xufVxuXG4vKipcbiAqIEEgZG9jdW1lbnRlZCBleHBvcnQ6IGEgY2xhc3MsIGludGVyZmFjZSwgZW51bSwgdHlwZSBhbGlhcywgZnVuY3Rpb24gb3IgdmFyaWFibGUuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVHlwZUluZm8ge1xuICByZWFkb25seSBiYXNlVHlwZXM6IHN0cmluZ1tdO1xuICAvKipcbiAgRm9yIGNsYXNzZXM6IHRoZSBjb25zdHJ1Y3RvciAocHVibGljL3Byb3RlY3RlZCksIGlmIGFueVxuICAgKi9cbiAgcmVhZG9ubHkgY29uc3RydWN0b3JJbmZvPzogTWVtYmVySW5mbyB8IHVuZGVmaW5lZDtcbiAgcmVhZG9ubHkgZGVzY3JpcHRpb246IHN0cmluZztcbiAgLyoqXG4gIEZvciBlbnVtczogdGhlIGVudW0gbWVtYmVyc1xuICAgKi9cbiAgcmVhZG9ubHkgZW51bU1lbWJlcnM6IEVudW1NZW1iZXJJbmZvW107XG4gIHJlYWRvbmx5IGV4YW1wbGVzOiBzdHJpbmdbXTtcbiAgLyoqXG4gIEZvciBjbGFzc2VzOiB0eXBlcyBpbiB0aGUgYGltcGxlbWVudHNgIGNsYXVzZVxuICAgKi9cbiAgcmVhZG9ubHkgaW1wbGVtZW50c1R5cGVzOiBzdHJpbmdbXTtcbiAgcmVhZG9ubHkga2luZDogJ2NsYXNzJyB8ICdlbnVtJyB8ICdmdW5jdGlvbicgfCAnaW50ZXJmYWNlJyB8ICd0eXBlJyB8ICd2YXJpYWJsZSc7XG4gIHJlYWRvbmx5IG1ldGhvZHM6IE1lbWJlckluZm9bXTtcbiAgcmVhZG9ubHkgbmFtZTogc3RyaW5nO1xuICByZWFkb25seSBuYW1lc3BhY2U6IHN0cmluZztcbiAgcmVhZG9ubHkgcHJvcGVydGllczogTWVtYmVySW5mb1tdO1xuICByZWFkb25seSByZW1hcmtzOiBzdHJpbmc7XG4gIC8qKlxuICBGb3IgdHlwZSBhbGlhc2VzOiB0aGUgcmlnaHQtaGFuZC1zaWRlIHR5cGUgdGV4dFxuICAgKi9cbiAgcmVhZG9ubHkgdHlwZUFsaWFzVGV4dD86IHN0cmluZztcbiAgcmVhZG9ubHkgdHlwZVBhcmFtZXRlcnM6IHN0cmluZ1tdO1xuICAvKipcbiAgRm9yIHZhcmlhYmxlczogdGhlIGRlY2xhcmF0aW9uIGtleXdvcmQgKGxldC9jb25zdC92YXIpXG4gICAqL1xuICByZWFkb25seSB2YXJpYWJsZUtleXdvcmQ/OiBzdHJpbmc7XG4gIC8qKlxuICBGb3IgdmFyaWFibGVzOiB0aGUgdHlwZSBhbm5vdGF0aW9uXG4gICAqL1xuICByZWFkb25seSB2YXJpYWJsZVR5cGU/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogQW4gb2JqZWN0IGVudHJ5IG9mIHRoZSBgdHlwZWRvYy1wbHVnaW4tbWRuLWxpbmtzYCBXZWIgQVBJIGRhdGEuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgV2ViQXBpRW50cnkge1xuICByZWFkb25seSB1cmw6IHN0cmluZztcbn1cbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUFBOyIsCiAgIm5hbWVzIjogW10KfQo=
|