@workflow/core 5.0.0-beta.44 → 5.0.0-beta.47
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/attribute-changes.d.ts +3 -5
- package/dist/attribute-changes.d.ts.map +1 -1
- package/dist/attribute-changes.js +2 -2
- package/dist/capabilities.d.ts +6 -5
- package/dist/capabilities.d.ts.map +1 -1
- package/dist/capabilities.js +14 -12
- package/dist/events-consumer.d.ts +30 -7
- package/dist/events-consumer.d.ts.map +1 -1
- package/dist/events-consumer.js +67 -11
- package/dist/flushable-stream.js +2 -2
- package/dist/global.d.ts +3 -1
- package/dist/global.d.ts.map +1 -1
- package/dist/global.js +8 -5
- package/dist/private.d.ts +20 -14
- package/dist/private.d.ts.map +1 -1
- package/dist/private.js +67 -29
- package/dist/replay-payload-cache.d.ts +13 -17
- package/dist/replay-payload-cache.d.ts.map +1 -1
- package/dist/replay-payload-cache.js +55 -57
- package/dist/runtime/constants.d.ts +3 -3
- package/dist/runtime/constants.d.ts.map +1 -1
- package/dist/runtime/constants.js +4 -4
- package/dist/runtime/helpers.d.ts +15 -34
- package/dist/runtime/helpers.d.ts.map +1 -1
- package/dist/runtime/helpers.js +18 -43
- package/dist/runtime/quickjs-entrypoint.d.ts.map +1 -1
- package/dist/runtime/quickjs-entrypoint.js +8 -1
- package/dist/runtime/quickjs-runtime.js +7 -1
- package/dist/runtime/resume-hook.d.ts +20 -12
- package/dist/runtime/resume-hook.d.ts.map +1 -1
- package/dist/runtime/resume-hook.js +195 -249
- package/dist/runtime/resume-latency.d.ts +13 -6
- package/dist/runtime/resume-latency.d.ts.map +1 -1
- package/dist/runtime/resume-latency.js +4 -2
- package/dist/runtime/run.d.ts +1 -1
- package/dist/runtime/run.d.ts.map +1 -1
- package/dist/runtime/run.js +3 -2
- package/dist/runtime/start.js +12 -10
- package/dist/runtime/step-latency.d.ts +31 -14
- package/dist/runtime/step-latency.d.ts.map +1 -1
- package/dist/runtime/step-latency.js +19 -13
- package/dist/runtime/suspension-handler.d.ts +9 -7
- package/dist/runtime/suspension-handler.d.ts.map +1 -1
- package/dist/runtime/suspension-handler.js +41 -41
- package/dist/runtime/vm-mode.d.ts +1 -1
- package/dist/runtime/vm-mode.d.ts.map +1 -1
- package/dist/runtime/vm-mode.js +1 -1
- package/dist/runtime.d.ts.map +1 -1
- package/dist/runtime.js +278 -125
- package/dist/serialization/hardened.d.ts +5 -4
- package/dist/serialization/hardened.d.ts.map +1 -1
- package/dist/serialization/hardened.js +7 -1
- package/dist/serialization-format.js +2 -2
- package/dist/serialization.d.ts +8 -9
- package/dist/serialization.d.ts.map +1 -1
- package/dist/serialization.js +32 -25
- package/dist/step.d.ts.map +1 -1
- package/dist/step.js +3 -11
- package/dist/telemetry/semantic-conventions.d.ts +51 -8
- package/dist/telemetry/semantic-conventions.d.ts.map +1 -1
- package/dist/telemetry/semantic-conventions.js +38 -5
- package/dist/telemetry.d.ts +12 -0
- package/dist/telemetry.d.ts.map +1 -1
- package/dist/telemetry.js +62 -2
- package/dist/version.d.ts +1 -1
- package/dist/version.js +2 -2
- package/dist/vm/script-cache.d.ts +9 -11
- package/dist/vm/script-cache.d.ts.map +1 -1
- package/dist/vm/script-cache.js +25 -40
- package/dist/workflow/attribute-dispatcher.d.ts.map +1 -1
- package/dist/workflow/attribute-dispatcher.js +3 -6
- package/dist/workflow/hook.d.ts.map +1 -1
- package/dist/workflow/hook.js +6 -15
- package/dist/workflow.d.ts +16 -0
- package/dist/workflow.d.ts.map +1 -1
- package/dist/workflow.js +73 -29
- package/docs/foundations/errors-and-retries.mdx +1 -1
- package/package.json +6 -6
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
* o11y, CLI o11y). It has NO Node.js dependencies.
|
|
7
7
|
*/
|
|
8
8
|
import { globalSingleton } from '@workflow/utils';
|
|
9
|
-
import { getEventDataRefFields } from '@workflow/world';
|
|
9
|
+
import { getEventDataRefFields } from '@workflow/world/event-metadata';
|
|
10
10
|
import { parse, unflatten } from 'devalue';
|
|
11
11
|
// ---------------------------------------------------------------------------
|
|
12
12
|
// Key material (browser-safe re-exports)
|
|
@@ -729,4 +729,4 @@ export function truncateId(id, maxLength = 12) {
|
|
|
729
729
|
return id;
|
|
730
730
|
return `${id.slice(0, maxLength)}...`;
|
|
731
731
|
}
|
|
732
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VyaWFsaXphdGlvbi1mb3JtYXQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvc2VyaWFsaXphdGlvbi1mb3JtYXQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7OztHQU1HO0FBRUgsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ2xELE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3hELE9BQU8sRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLE1BQU0sU0FBUyxDQUFDO0FBRTNDLDhFQUE4RTtBQUM5RSx5Q0FBeUM7QUFDekMsOEVBQThFO0FBRTlFOzs7Ozs7OztHQVFHO0FBQ0gsT0FBTyxFQUVMLE9BQU8sSUFBSSxlQUFlLEVBQzFCLG9CQUFvQixFQUNwQixPQUFPLElBQUksZUFBZSxFQUMxQixnQkFBZ0IsRUFDaEIsWUFBWSxFQUdaLGNBQWMsRUFFZCxNQUFNLEdBQ1AsTUFBTSwrQkFBK0IsQ0FBQztBQUV2Qyw4RUFBOEU7QUFDOUUsZ0RBQWdEO0FBQ2hELDhFQUE4RTtBQUU5RSxNQUFNLENBQUMsTUFBTSxtQkFBbUIsR0FBRztJQUNqQywyREFBMkQ7SUFDM0QsVUFBVSxFQUFFLE1BQU07SUFDbEIsbUZBQW1GO0lBQ25GLFNBQVMsRUFBRSxNQUFNO0lBQ2pCOzs7Ozs7Ozs7T0FTRztJQUNILE1BQU0sRUFBRSxNQUFNO0lBQ2QsNEZBQTRGO0lBQzVGLElBQUksRUFBRSxNQUFNO0lBQ1osaUdBQWlHO0lBQ2pHLElBQUksRUFBRSxNQUFNO0NBQ0osQ0FBQztBQUtYLDJDQUEyQztBQUMzQyxNQUFNLG9CQUFvQixHQUFHLENBQUMsQ0FBQztBQUUvQixNQUFNLGFBQWEsR0FBRyxJQUFJLFdBQVcsRUFBRSxDQUFDO0FBQ3hDLE1BQU0sYUFBYSxHQUFHLElBQUksV0FBVyxFQUFFLENBQUM7QUFFeEM7O0dBRUc7QUFDSCxNQUFNLFVBQVUsc0JBQXNCLENBQ3BDLE1BQStCLEVB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QVM7UUFBRSxPQUFPLEVBQUUsQ0FBQztJQUN0QyxPQUFPLEdBQUcsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsU0FBUyxDQUFDLEtBQUssQ0FBQztBQUN4QyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBCcm93c2VyLXNhZmUgc2VyaWFsaXphdGlvbiBmb3JtYXQgdXRpbGl0aWVzLlxuICpcbiAqIFRoaXMgbW9kdWxlIGNvbnRhaW5zIHRoZSBmb3JtYXQgcHJlZml4IGhhbmRsaW5nLCBnZW5lcmljIGh5ZHJhdGUvZGVoeWRyYXRlXG4gKiBkaXNwYXRjaCwgYW5kIHNoYXJlZCB0eXBlcy9jbGFzc2VzIHVzZWQgYnkgYWxsIGVudmlyb25tZW50cyAocnVudGltZSwgd2ViXG4gKiBvMTF5LCBDTEkgbzExeSkuIEl0IGhhcyBOTyBOb2RlLmpzIGRlcGVuZGVuY2llcy5cbiAqL1xuXG5pbXBvcnQgeyBnbG9iYWxTaW5nbGV0b24gfSBmcm9tICdAd29ya2Zsb3cvdXRpbHMnO1xuaW1wb3J0IHsgZ2V0RXZlbnREYXRhUmVmRmllbGRzIH0gZnJvbSAnQHdvcmtmbG93L3dvcmxkJztcbmltcG9ydCB7IHBhcnNlLCB1bmZsYXR0ZW4gfSBmcm9tICdkZXZhbHVlJztcblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBLZXkgbWF0ZXJpYWwgKGJyb3dzZXItc2FmZSByZS1leHBvcnRzKVxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbi8qKlxuICogUmUtZXhwb3J0ZWQgZnJvbSB0aGUgZW52ZWxvcGUgbGF5ZXIgc28gYnJvd3NlciBjb25zdW1lcnMgKHdlYiBkYXNoYm9hcmQsXG4gKiB3ZWItc2hhcmVkKSBjYW4gcmVzb2x2ZSBrZXkgbWF0ZXJpYWwgd2l0aG91dCBpbXBvcnRpbmdcbiAqIGBAd29ya2Zsb3cvY29yZS9zZXJpYWxpemF0aW9uYCwgd2hvc2UgbW9kdWxlIGdyYXBoIHJlYWNoZXMgTm9kZSBidWlsdC1pbnNcbiAqIChgbm9kZTp1dGlsYCwgYG5vZGU6YXN5bmNfaG9va3NgKSBhbmQgY2Fubm90IGJlIGJ1bmRsZWQgZm9yIHRoZSBicm93c2VyLlxuICpcbiAqIEV2ZXJ5dGhpbmcgYmVsb3cgaXMgV2ViIENyeXB0byBvbmx5OiBgc2VyaWFsaXphdGlvbi9lbmNyeXB0aW9uLnRzYCxcbiAqIGBlbmNyeXB0aW9uLnRzYCBhbmQgYHNlYWxlZC1ib3gudHNgIGFyZSBhbGwgZnJlZSBvZiBOb2RlIGRlcGVuZGVuY2llcy5cbiAqL1xuZXhwb3J0IHtcbiAgdHlwZSBEZWNyeXB0aW9uS2V5LFxuICBkZWNyeXB0IGFzIGRlY3J5cHRFbnZlbG9wZSxcbiAgZGVyaXZlUnVuUGF5bG9hZEtleXMsXG4gIGVuY3J5cHQgYXMgZW5jcnlwdEVudmVsb3BlLFxuICBpc1J1blBheWxvYWRLZXlzLFxuICBpc1NlYWxUYXJnZXQsXG4gIHR5cGUgUGF5bG9hZEtleSxcbiAgdHlwZSBSdW5QYXlsb2FkS2V5cyxcbiAgcnVuUGF5bG9hZEtleXMsXG4gIHR5cGUgU2VhbFRhcmdldCxcbiAgc2VhbFRvLFxufSBmcm9tICcuL3NlcmlhbGl6YXRpb24vZW5jcnlwdGlvbi5qcyc7XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gRm9ybWF0IHByZWZpeCBjb25zdGFudHMgYW5kIGVuY29kaW5nL2RlY29kaW5nXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuZXhwb3J0IGNvbnN0IFNlcmlhbGl6YXRpb25Gb3JtYXQgPSB7XG4gIC8qKiBkZXZhbHVlIHN0cmluZ2lmeS9wYXJzZSB3aXRoIFRleHRFbmNvZGVyL1RleHREZWNvZGVyICovXG4gIERFVkFMVUVfVjE6ICdkZXZsJyxcbiAgLyoqIEVuY3J5cHRlZCBwYXlsb2FkIChpbm5lciBwYXlsb2FkIGhhcyBpdHMgb3duIGZvcm1hdCBwcmVmaXggYWZ0ZXIgZGVjcnlwdGlvbikgKi9cbiAgRU5DUllQVEVEOiAnZW5jcicsXG4gIC8qKlxuICAgKiBTZWFsZWQgcGF5bG9hZDogYXN5bW1ldHJpY2FsbHkgZW5jcnlwdGVkIHRvIGEgcnVuJ3MgWDI1NTE5IHB1YmxpYyBrZXlcbiAgICogKGlubmVyIHBheWxvYWQgaGFzIGl0cyBvd24gZm9ybWF0IHByZWZpeCBhZnRlciBvcGVuaW5nKS5cbiAgICpcbiAgICogV3JpdHRlbiBieSBjcm9zcy1ydW4gd3JpdGVycyB0aGF0IGhvbGQgb25seSB0aGUgcmVjaXBpZW50IHJ1bidzIHB1YmxpY1xuICAgKiBrZXkuIE9wZW5pbmcgaXQgcmVxdWlyZXMgdGhlIHJ1bidzIHByaXZhdGUgc2NhbGFyIHJhdGhlciB0aGFuIHRoZVxuICAgKiBzeW1tZXRyaWMgcGVyLXJ1biBrZXksIHNvIG8xMXkgZGlzcGxheSB0cmVhdHMgaXQgYXMgY2lwaGVydGV4dCB2aWFcbiAgICoge0BsaW5rIGlzRW5jcnlwdGVkRGF0YX0gYnV0IHtAbGluayBoeWRyYXRlRGF0YVdpdGhLZXl9IGRvZXMgbm90IGF0dGVtcHRcbiAgICogYW4gQUVTLUdDTSBkZWNyeXB0IG9uIGl0LlxuICAgKi9cbiAgU0VBTEVEOiAnZW5jcCcsXG4gIC8qKiBHemlwLWNvbXByZXNzZWQgcGF5bG9hZCAoaW5uZXIgcGF5bG9hZCBoYXMgaXRzIG93biBmb3JtYXQgcHJlZml4IGFmdGVyIGRlY29tcHJlc3Npb24pICovXG4gIEdaSVA6ICdnemlwJyxcbiAgLyoqIFpzdGFuZGFyZC1jb21wcmVzc2VkIHBheWxvYWQgKGlubmVyIHBheWxvYWQgaGFzIGl0cyBvd24gZm9ybWF0IHByZWZpeCBhZnRlciBkZWNvbXByZXNzaW9uKSAqL1xuICBaU1REOiAnenN0ZCcsXG59IGFzIGNvbnN0O1xuXG5leHBvcnQgdHlwZSBTZXJpYWxpemF0aW9uRm9ybWF0VHlwZSA9XG4gICh0eXBlb2YgU2VyaWFsaXphdGlvbkZvcm1hdClba2V5b2YgdHlwZW9mIFNlcmlhbGl6YXRpb25Gb3JtYXRdO1xuXG4vKiogTGVuZ3RoIG9mIHRoZSBmb3JtYXQgcHJlZml4IGluIGJ5dGVzICovXG5jb25zdCBGT1JNQVRfUFJFRklYX0xFTkdUSCA9IDQ7XG5cbmNvbnN0IGZvcm1hdEVuY29kZXIgPSBuZXcgVGV4dEVuY29kZXIoKTtcbmNvbnN0IGZvcm1hdERlY29kZXIgPSBuZXcgVGV4dERlY29kZXIoKTtcblxuLyoqXG4gKiBFbmNvZGUgYSBwYXlsb2FkIHdpdGggYSBmb3JtYXQgcHJlZml4LlxuICovXG5leHBvcnQgZnVuY3Rpb24gZW5jb2RlV2l0aEZvcm1hdFByZWZpeChcbiAgZm9ybWF0OiBTZXJpYWxpemF0aW9uRm9ybWF0VHlwZSxcbiAgcGF5bG9hZDogVWludDhBcnJheSB8IHVua25vd25cbik6IFVpbnQ4QXJyYXkgfCB1bmtub3duIHtcbiAgaWYgKCEocGF5bG9hZCBpbnN0YW5jZW9mIFVpbnQ4QXJyYXkpKSB7XG4gICAgcmV0dXJuIHBheWxvYWQ7XG4gIH1cblxuICBjb25zdCBwcmVmaXhCeXRlcyA9IGZvcm1hdEVuY29kZXIuZW5jb2RlKGZvcm1hdCk7XG4gIGlmIChwcmVmaXhCeXRlcy5sZW5ndGggIT09IEZPUk1BVF9QUkVGSVhfTEVOR1RIKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgYEZvcm1hdCBpZGVudGlmaWVyIG11c3QgYmUgZXhhY3RseSAke0ZPUk1BVF9QUkVGSVhfTEVOR1RIfSBBU0NJSSBjaGFyYWN0ZXJzLCBnb3QgXCIke2Zvcm1hdH1cIiAoJHtwcmVmaXhCeXRlcy5sZW5ndGh9IGJ5dGVzKWBcbiAgICApO1xuICB9XG5cbiAgY29uc3QgcmVzdWx0ID0gbmV3IFVpbnQ4QXJyYXkoRk9STUFUX1BSRUZJWF9MRU5HVEggKyBwYXlsb2FkLmxlbmd0aCk7XG4gIHJlc3VsdC5zZXQocHJlZml4Qnl0ZXMsIDApO1xuICByZXN1bHQuc2V0KHBheWxvYWQsIEZPUk1BVF9QUkVGSVhfTEVOR1RIKTtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuLyoqXG4gKiBEZWNvZGUgYSBmb3JtYXQtcHJlZml4ZWQgcGF5bG9hZC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRlY29kZUZvcm1hdFByZWZpeChkYXRhOiBVaW50OEFycmF5IHwgdW5rbm93bik6IHtcbiAgZm9ybWF0OiBTZXJpYWxpemF0aW9uRm9ybWF0VHlwZTtcbiAgcGF5bG9hZDogVWludDhBcnJheTtcbn0ge1xuICBpZiAoIShkYXRhIGluc3RhbmNlb2YgVWludDhBcnJheSkpIHtcbiAgICByZXR1cm4ge1xuICAgICAgZm9ybWF0OiBTZXJpYWxpemF0aW9uRm9ybWF0LkRFVkFMVUVfVjEsXG4gICAgICBwYXlsb2FkOiBuZXcgVGV4dEVuY29kZXIoKS5lbmNvZGUoSlNPTi5zdHJpbmdpZnkoZGF0YSkpLFxuICAgIH07XG4gIH1cblxuICBpZiAoZGF0YS5sZW5ndGggPCBGT1JNQVRfUFJFRklYX0xFTkdUSCkge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgIGBEYXRhIHRvbyBzaG9ydCB0byBjb250YWluIGZvcm1hdCBwcmVmaXg6IGV4cGVjdGVkIGF0IGxlYXN0ICR7Rk9STUFUX1BSRUZJWF9MRU5HVEh9IGJ5dGVzLCBnb3QgJHtkYXRhLmxlbmd0aH1gXG4gICAgKTtcbiAgfVxuXG4gIGNvbnN0IHByZWZpeEJ5dGVzID0gZGF0YS5zdWJhcnJheSgwLCBGT1JNQVRfUFJFRklYX0xFTkdUSCk7XG4gIGNvbnN0IGZvcm1hdCA9IGZvcm1hdERlY29kZXIuZGVjb2RlKHByZWZpeEJ5dGVzKTtcblxuICBjb25zdCBrbm93bkZvcm1hdHMgPSBPYmplY3QudmFsdWVzKFNlcmlhbGl6YXRpb25Gb3JtYXQpIGFzIHN0cmluZ1tdO1xuICBpZiAoIWtub3duRm9ybWF0cy5pbmNsdWRlcyhmb3JtYXQpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgYFVua25vd24gc2VyaWFsaXphdGlvbiBmb3JtYXQ6IFwiJHtmb3JtYXR9XCIuIEtub3duIGZvcm1hdHM6ICR7a25vd25Gb3JtYXRzLmpvaW4oJywgJyl9YFxuICAgICk7XG4gIH1cblxuICBjb25zdCBwYXlsb2FkID0gZGF0YS5zdWJhcnJheShGT1JNQVRfUFJFRklYX0xFTkdUSCk7XG4gIHJldHVybiB7IGZvcm1hdDogZm9ybWF0IGFzIFNlcmlhbGl6YXRpb25Gb3JtYXRUeXBlLCBwYXlsb2FkIH07XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gRW5jcnlwdGVkIGRhdGEgZGV0ZWN0aW9uXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuLyoqXG4gKiBQbGFjZWhvbGRlciBzdHJpbmcgZGlzcGxheWVkIHdoZW4gZGF0YSBpcyBlbmNyeXB0ZWQgYW5kIGRlY3J5cHRpb25cbiAqIGhhcyBub3QgYmVlbiByZXF1ZXN0ZWQuIFVzZWQgYnkgYm90aCBDTEkgYW5kIHdlYiBvMTF5LlxuICovXG5leHBvcnQgY29uc3QgRU5DUllQVEVEX1BMQUNFSE9MREVSID0gJ1xcdXsxRjUxMn0gRW5jcnlwdGVkJztcblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBFeHBpcmVkIGRhdGEgZGV0ZWN0aW9uXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuLyoqXG4gKiBDaGVjayBpZiBhIHBsYWluIG9iamVjdCBpcyBgeyBleHBpcmVkQXQ6IFwiPElTTyBkYXRlPlwiIH1gOiBhIHNpbmdsZS1rZXlcbiAqIG9iamVjdCB3aXRoIGEgc3RyaW5nIGBleHBpcmVkQXRgIHZhbHVlLlxuICovXG5mdW5jdGlvbiBpc0V4cGlyZWRPYmplY3QoZGF0YTogdW5rbm93bik6IGRhdGEgaXMgeyBleHBpcmVkQXQ6IHN0cmluZyB9IHtcbiAgaWYgKGRhdGEgPT09IG51bGwgfHwgdHlwZW9mIGRhdGEgIT09ICdvYmplY3QnIHx8IEFycmF5LmlzQXJyYXkoZGF0YSkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKGRhdGEpO1xuICByZXR1cm4gKFxuICAgIGtleXMubGVuZ3RoID09PSAxICYmXG4gICAga2V5c1swXSA9PT0gJ2V4cGlyZWRBdCcgJiZcbiAgICB0eXBlb2YgKGRhdGEgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4pLmV4cGlyZWRBdCA9PT0gJ3N0cmluZydcbiAgKTtcbn1cblxuLyoqXG4gKiBDaGVjayBpZiBhIGh5ZHJhdGVkIHZhbHVlIGlzIGFuIGV4cGlyZWQgZGF0YSBzdHViIGZyb20gdGhlIHNlcnZlci5cbiAqXG4gKiBUaGUgc2VydmVyIHJlcGxhY2VzIGV4cGlyZWQgcmVmIGZpZWxkcyB3aXRoIGEgZGV2YWx1ZS1lbmNvZGVkIHN0dWJcbiAqIChgbWFrZUV4cGlyZWRTdHViYCkgdGhhdCBkZXNlcmlhbGl6ZXMgdG8gYFt7IGV4cGlyZWRBdDogXCI8SVNPIGRhdGU+XCIgfV1gXG4gKiBhZnRlciBgdW5mbGF0dGVuYCAoYXJyYXktd3JhcHBlZCBkdWUgdG8gYmFja3dhcmRzLWNvbXBhdGlibGUgZW5jb2RpbmcpLlxuICogQWxzbyBtYXRjaGVzIHRoZSB1bndyYXBwZWQgYHsgZXhwaXJlZEF0OiBcIi4uLlwiIH1gIGZvcm0gZm9yIHJvYnVzdG5lc3MuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0V4cGlyZWRTdHViKGRhdGE6IHVua25vd24pOiBib29sZWFuIHtcbiAgLy8gRGlyZWN0IG9iamVjdCBmb3JtOiB7IGV4cGlyZWRBdDogXCIuLi5cIiB9XG4gIGlmIChpc0V4cGlyZWRPYmplY3QoZGF0YSkpIHJldHVybiB0cnVlO1xuICAvLyBBcnJheS13cmFwcGVkIGZvcm0gZnJvbSBkZXZhbHVlIHVuZmxhdHRlbjogW3sgZXhwaXJlZEF0OiBcIi4uLlwiIH1dXG4gIGlmIChBcnJheS5pc0FycmF5KGRhdGEpICYmIGRhdGEubGVuZ3RoID09PSAxICYmIGlzRXhwaXJlZE9iamVjdChkYXRhWzBdKSkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIHJldHVybiBmYWxzZTtcbn1cblxuLyoqXG4gKiBDaGVjayBpZiBhIGJpbmFyeSB2YWx1ZSBpcyBjaXBoZXJ0ZXh0OiBlaXRoZXIgYSBzeW1tZXRyaWNhbGx5IGVuY3J5cHRlZFxuICogcGF5bG9hZCAoJ2VuY3InKSBvciBhIHNlYWxlZCBjcm9zcy1ydW4gcGF5bG9hZCAoJ2VuY3AnKS5cbiAqXG4gKiBUaGlzIGlzIHRoZSBwcmVkaWNhdGUgZGlzcGxheSBsYXllcnMgd2FudDogYm90aCBzY2hlbWVzIGFyZSBvcGFxdWUgYnl0ZXNcbiAqIHRoYXQgbXVzdCBub3QgYmUgZmVkIHRvIHRoZSBkZXZhbHVlIHBhcnNlciwgYW5kIGJvdGggcmVuZGVyIGFzIHRoZSBzYW1lXG4gKiBcIkVuY3J5cHRlZFwiIGFmZm9yZGFuY2UgaW4gdGhlIENMSSBhbmQgd2ViIFVJLiBVc2Uge0BsaW5rIGlzU2VhbGVkRGF0YX0gd2hlblxuICogdGhlICpzY2hlbWUqIG1hdHRlcnMsIG5vdGFibHkgd2hlbiBjaG9vc2luZyBhIGRlY3J5cHRpb24gcGF0aCwgc2luY2UgYVxuICogc2VhbGVkIHBheWxvYWQgbmVlZHMgdGhlIHJ1bidzIHByaXZhdGUgc2NhbGFyIHJhdGhlciB0aGFuIGl0cyBzeW1tZXRyaWMga2V5LlxuICpcbiAqIEJyb3dzZXItc2FmZTogZG9lcyBub3QgZGVwZW5kIG9uIHRoZSBmdWxsIHNlcmlhbGl6YXRpb24gbW9kdWxlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNFbmNyeXB0ZWREYXRhKGRhdGE6IHVua25vd24pOiBib29sZWFuIHtcbiAgaWYgKCEoZGF0YSBpbnN0YW5jZW9mIFVpbnQ4QXJyYXkpIHx8IGRhdGEubGVuZ3RoIDwgRk9STUFUX1BSRUZJWF9MRU5HVEgpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgY29uc3QgcHJlZml4ID0gZm9ybWF0RGVjb2Rlci5kZWNvZGUoZGF0YS5zdWJhcnJheSgwLCBGT1JNQVRfUFJFRklYX0xFTkdUSCkpO1xuICByZXR1cm4gKFxuICAgIHByZWZpeCA9PT0gU2VyaWFsaXphdGlvbkZvcm1hdC5FTkNSWVBURUQgfHxcbiAgICBwcmVmaXggPT09IFNlcmlhbGl6YXRpb25Gb3JtYXQuU0VBTEVEXG4gICk7XG59XG5cbi8qKlxuICogQ2hlY2sgaWYgYSBiaW5hcnkgdmFsdWUgaGFzIHRoZSAnZW5jcCcgZm9ybWF0IHByZWZpeCwgaW5kaWNhdGluZyBhIHNlYWxlZFxuICogKGFzeW1tZXRyaWNhbGx5IGVuY3J5cHRlZCkgY3Jvc3MtcnVuIHBheWxvYWQuXG4gKlxuICogQnJvd3Nlci1zYWZlOiBkb2VzIG5vdCBkZXBlbmQgb24gdGhlIGZ1bGwgc2VyaWFsaXphdGlvbiBtb2R1bGUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc1NlYWxlZERhdGEoZGF0YTogdW5rbm93bik6IGJvb2xlYW4ge1xuICBpZiAoIShkYXRhIGluc3RhbmNlb2YgVWludDhBcnJheSkgfHwgZGF0YS5sZW5ndGggPCBGT1JNQVRfUFJFRklYX0xFTkdUSCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBjb25zdCBwcmVmaXggPSBmb3JtYXREZWNvZGVyLmRlY29kZShkYXRhLnN1YmFycmF5KDAsIEZPUk1BVF9QUkVGSVhfTEVOR1RIKSk7XG4gIHJldHVybiBwcmVmaXggPT09IFNlcmlhbGl6YXRpb25Gb3JtYXQuU0VBTEVEO1xufVxuXG4vKipcbiAqIENoZWNrIGlmIGEgYmluYXJ5IHZhbHVlIGhhcyBhIGNvbXByZXNzaW9uIGZvcm1hdCBwcmVmaXggKCdnemlwJyBvciAnenN0ZCcpLlxuICogQnJvd3Nlci1zYWZlOiBkb2VzIG5vdCBkZXBlbmQgb24gdGhlIGZ1bGwgc2VyaWFsaXphdGlvbiBtb2R1bGUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0NvbXByZXNzZWREYXRhKGRhdGE6IHVua25vd24pOiBib29sZWFuIHtcbiAgaWYgKCEoZGF0YSBpbnN0YW5jZW9mIFVpbnQ4QXJyYXkpIHx8IGRhdGEubGVuZ3RoIDwgRk9STUFUX1BSRUZJWF9MRU5HVEgpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgY29uc3QgcHJlZml4ID0gZm9ybWF0RGVjb2Rlci5kZWNvZGUoZGF0YS5zdWJhcnJheSgwLCBGT1JNQVRfUFJFRklYX0xFTkdUSCkpO1xuICByZXR1cm4gKFxuICAgIHByZWZpeCA9PT0gU2VyaWFsaXphdGlvbkZvcm1hdC5HWklQIHx8IHByZWZpeCA9PT0gU2VyaWFsaXphdGlvbkZvcm1hdC5aU1REXG4gICk7XG59XG5cbmludGVyZmFjZSBOb2RlWmxpYkRlY29kZSB7XG4gIGd1bnppcFN5bmM/OiAoZGF0YTogVWludDhBcnJheSkgPT4gVWludDhBcnJheTtcbiAgenN0ZERlY29tcHJlc3NTeW5jPzogKGRhdGE6IFVpbnQ4QXJyYXkpID0+IFVpbnQ4QXJyYXk7XG59XG5cbi8qKlxuICogUmVzb2x2ZSBgbm9kZTp6bGliYCB2aWEgYHByb2Nlc3MuZ2V0QnVpbHRpbk1vZHVsZWA6IG5vIHN0YXRpYyBOb2RlXG4gKiBkZXBlbmRlbmN5LCBpbnZpc2libGUgdG8gYnJvd3NlciBidW5kbGVycy4gUmV0dXJucyB1bmRlZmluZWQgb2ZmIE5vZGUuXG4gKi9cbmZ1bmN0aW9uIGdldE5vZGVabGliKCk6IE5vZGVabGliRGVjb2RlIHwgdW5kZWZpbmVkIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gKFxuICAgICAgZ2xvYmFsVGhpcyBhcyB7XG4gICAgICAgIHByb2Nlc3M/OiB7IGdldEJ1aWx0aW5Nb2R1bGU/OiAoaWQ6IHN0cmluZykgPT4gTm9kZVpsaWJEZWNvZGUgfTtcbiAgICAgIH1cbiAgICApLnByb2Nlc3M/LmdldEJ1aWx0aW5Nb2R1bGU/Lignbm9kZTp6bGliJyk7XG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbn1cblxuLyoqXG4gKiBTeW5jaHJvbm91c2x5IGRlY29tcHJlc3MgYSBgZ3ppcGAvYHpzdGRgIHBheWxvYWQgd2hlbiBydW5uaW5nIG9uIE5vZGUuanMuXG4gKlxuICogUmV0dXJucyBgdW5kZWZpbmVkYCB3aGVuIHN5bmMgZGVjb21wcmVzc2lvbiBpc24ndCBhdmFpbGFibGUgKGUuZy4gaW4gdGhlXG4gKiBicm93c2VyLCBvciB6c3RkIG9uIE5vZGUgPCAyMi4xNSk7IGNhbGxlcnMgZmFsbCBiYWNrIHRvIGxlYXZpbmcgdGhlIGRhdGFcbiAqIHVuLWh5ZHJhdGVkICh0aGUgYXN5bmMgYGh5ZHJhdGVEYXRhV2l0aEtleWAgcGF0aCBoYW5kbGVzIGRlY29tcHJlc3Npb24gaW5cbiAqIGJyb3dzZXJzIHZpYSBgRGVjb21wcmVzc2lvblN0cmVhbWAgLyBhIHJlZ2lzdGVyZWQgenN0ZCBkZWNvZGVyKS5cbiAqL1xuZnVuY3Rpb24gZGVjb21wcmVzc1N5bmNJZkF2YWlsYWJsZShcbiAgZm9ybWF0OiBzdHJpbmcsXG4gIHBheWxvYWQ6IFVpbnQ4QXJyYXlcbik6IFVpbnQ4QXJyYXkgfCB1bmRlZmluZWQge1xuICB0cnkge1xuICAgIGNvbnN0IHpsaWIgPSBnZXROb2RlWmxpYigpO1xuICAgIGlmIChmb3JtYXQgPT09IFNlcmlhbGl6YXRpb25Gb3JtYXQuR1pJUCAmJiB6bGliPy5ndW56aXBTeW5jKSB7XG4gICAgICByZXR1cm4gbmV3IFVpbnQ4QXJyYXkoemxpYi5ndW56aXBTeW5jKHBheWxvYWQpKTtcbiAgICB9XG4gICAgaWYgKGZvcm1hdCA9PT0gU2VyaWFsaXphdGlvbkZvcm1hdC5aU1REICYmIHpsaWI/LnpzdGREZWNvbXByZXNzU3luYykge1xuICAgICAgcmV0dXJuIG5ldyBVaW50OEFycmF5KHpsaWIuenN0ZERlY29tcHJlc3NTeW5jKHBheWxvYWQpKTtcbiAgICB9XG4gIH0gY2F0Y2gge1xuICAgIC8vIEZhbGwgdGhyb3VnaDogdHJlYXQgYXMgdW5hdmFpbGFibGVcbiAgfVxuICByZXR1cm4gdW5kZWZpbmVkO1xufVxuXG4vKipcbiAqIEJyb3dzZXIgenN0ZCBkZWNvZGVyLCByZWdpc3RlcmVkIGJ5IHRoZSBvMTF5IGhvc3QgKHdlYi1zaGFyZWQpIHNpbmNlIHRoZVxuICogV2ViIGBEZWNvbXByZXNzaW9uU3RyZWFtYCBoYXMgbm8genN0ZCBzdXBwb3J0LiBOb2RlIGRlY29kZXMgdmlhIGBub2RlOnpsaWJgXG4gKiBhbmQgbmV2ZXIgbmVlZHMgdGhpcy4gU2VlIGByZWdpc3RlclpzdGREZWNvZGVyYC5cbiAqL1xuLy8gT24gYGdsb2JhbFRoaXNgIChzZWUgYGdsb2JhbFNpbmdsZXRvbmApOiB0aGUgbzExeSBob3N0IHJlZ2lzdGVycyB0aGUgZGVjb2RlclxuLy8gb25jZSwgYW5kIGEgcGVyLWNvcHkgc2xvdCB3b3VsZCBsZWF2ZSBldmVyeSBvdGhlciBjb3B5IG9mIHRoaXMgbW9kdWxlIHdpdGhvdXRcbi8vIG9uZS5cbmNvbnN0IHpzdGQgPSBnbG9iYWxTaW5nbGV0b24oJ0B3b3JrZmxvdy9jb3JlLy96c3RkLmRlY29kZXInLCAxLCAoKSA9PiAoe1xuICBkZWNvZGVyOiB1bmRlZmluZWQgYXNcbiAgICB8ICgocGF5bG9hZDogVWludDhBcnJheSkgPT4gUHJvbWlzZTxVaW50OEFycmF5PilcbiAgICB8IHVuZGVmaW5lZCxcbn0pKTtcblxuLyoqXG4gKiBSZWdpc3RlciBhIGJyb3dzZXIgenN0ZCBkZWNvZGVyIChlLmcuIGEgV0FTTS1iYWNrZWQgb25lKS4gVGhlIHdlYiBvMTF5IFVJXG4gKiBjYWxscyB0aGlzIGF0IGluaXQgc28gYGh5ZHJhdGVEYXRhV2l0aEtleWAgY2FuIGluZmxhdGUgenN0ZCBwYXlsb2FkcyBhZnRlclxuICogY2xpZW50LXNpZGUgZGVjcnlwdGlvbi4gTm9kZSByZWFkZXJzIHVzZSBgbm9kZTp6bGliYCBhbmQgaWdub3JlIHRoaXMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZWdpc3RlclpzdGREZWNvZGVyKFxuICBkZWNvZGVyOiAocGF5bG9hZDogVWludDhBcnJheSkgPT4gUHJvbWlzZTxVaW50OEFycmF5PlxuKTogdm9pZCB7XG4gIHpzdGQuZGVjb2RlciA9IGRlY29kZXI7XG59XG5cbi8qKlxuICogQXN5bmNocm9ub3VzbHkgZGVjb21wcmVzcyBhIGBnemlwYC9genN0ZGAgcGF5bG9hZC5cbiAqIC0gZ3ppcDogd2ViLXN0YW5kYXJkIGBEZWNvbXByZXNzaW9uU3RyZWFtYCAoTm9kZSAxOCssIGJyb3dzZXJzLCBlZGdlKS5cbiAqIC0genN0ZDogYG5vZGU6emxpYmAgd2hlbiBvbiBOb2RlLCBlbHNlIHRoZSByZWdpc3RlcmVkIGJyb3dzZXIgZGVjb2Rlci5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gZGVjb21wcmVzc0FzeW5jKFxuICBmb3JtYXQ6IHN0cmluZyxcbiAgcGF5bG9hZDogVWludDhBcnJheVxuKTogUHJvbWlzZTxVaW50OEFycmF5PiB7XG4gIGlmIChmb3JtYXQgPT09IFNlcmlhbGl6YXRpb25Gb3JtYXQuWlNURCkge1xuICAgIGNvbnN0IHN5bmMgPSBkZWNvbXByZXNzU3luY0lmQXZhaWxhYmxlKGZvcm1hdCwgcGF5bG9hZCk7XG4gICAgaWYgKHN5bmMpIHJldHVybiBzeW5jO1xuICAgIGlmICh6c3RkLmRlY29kZXIpIHJldHVybiB6c3RkLmRlY29kZXIocGF5bG9hZCk7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgJ3pzdGQtY29tcHJlc3NlZCB3b3JrZmxvdyBkYXRhIGVuY291bnRlcmVkIGJ1dCBubyB6c3RkIGRlY29kZXIgaXMgJyArXG4gICAgICAgICdhdmFpbGFibGUuIE5vZGUuanMgMjIuMTUrIGRlY29kZXMgbmF0aXZlbHk7IGluIHRoZSBicm93c2VyIHJlZ2lzdGVyICcgK1xuICAgICAgICAnb25lIHZpYSByZWdpc3RlclpzdGREZWNvZGVyICh0aGUgd2ViIG8xMXkgcGFja2FnZSBkb2VzIHRoaXMpLidcbiAgICApO1xuICB9XG5cbiAgY29uc3QgdHJhbnNmb3JtID0gbmV3IERlY29tcHJlc3Npb25TdHJlYW0oJ2d6aXAnKTtcbiAgY29uc3Qgd3JpdGVyID0gdHJhbnNmb3JtLndyaXRhYmxlLmdldFdyaXRlcigpO1xuICBjb25zdCB3cml0ZVByb21pc2UgPSB3cml0ZXIud3JpdGUocGF5bG9hZCkudGhlbigoKSA9PiB3cml0ZXIuY2xvc2UoKSk7XG4gIHdyaXRlUHJvbWlzZS5jYXRjaCgoKSA9PiB7fSk7XG4gIGNvbnN0IGNodW5rczogVWludDhBcnJheVtdID0gW107XG4gIGxldCB0b3RhbCA9IDA7XG4gIGNvbnN0IHJlYWRlciA9IHRyYW5zZm9ybS5yZWFkYWJsZS5nZXRSZWFkZXIoKTtcbiAgZm9yICg7Oykge1xuICAgIGNvbnN0IHsgZG9uZSwgdmFsdWUgfSA9IGF3YWl0IHJlYWRlci5yZWFkKCk7XG4gICAgaWYgKGRvbmUpIGJyZWFrO1xuICAgIGNodW5rcy5wdXNoKHZhbHVlKTtcbiAgICB0b3RhbCArPSB2YWx1ZS5sZW5ndGg7XG4gIH1cbiAgYXdhaXQgd3JpdGVQcm9taXNlO1xuICBjb25zdCBvdXQgPSBuZXcgVWludDhBcnJheSh0b3RhbCk7XG4gIGxldCBvZmZzZXQgPSAwO1xuICBmb3IgKGNvbnN0IGNodW5rIG9mIGNodW5rcykge1xuICAgIG91dC5zZXQoY2h1bmssIG9mZnNldCk7XG4gICAgb2Zmc2V0ICs9IGNodW5rLmxlbmd0aDtcbiAgfVxuICByZXR1cm4gb3V0O1xufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIFJldml2ZXJzIHR5cGUgKHNoYXJlZCBhY3Jvc3MgYWxsIGVudmlyb25tZW50cylcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4vKipcbiAqIEEgbWFwIG9mIHR5cGUgbmFtZSDihpIgcmV2aXZlciBmdW5jdGlvbiwgdXNlZCBieSBkZXZhbHVlJ3MgYHBhcnNlYC9gdW5mbGF0dGVuYC5cbiAqIEVhY2ggZW52aXJvbm1lbnQgKHJ1bnRpbWUsIHdlYiwgQ0xJKSBwcm92aWRlcyBpdHMgb3duIHNldC5cbiAqL1xuZXhwb3J0IHR5cGUgUmV2aXZlcnMgPSBSZWNvcmQ8c3RyaW5nLCAodmFsdWU6IGFueSkgPT4gYW55PjtcblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBHZW5lcmljIGh5ZHJhdGUvZGVoeWRyYXRlIGRpc3BhdGNoXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuLyoqXG4gKiBIeWRyYXRlIChkZXNlcmlhbGl6ZSkgYSB2YWx1ZSB0aGF0IHdhcyBzdG9yZWQgaW4gdGhlIGRhdGFiYXNlLlxuICpcbiAqIEhhbmRsZXMgZm91ciBkYXRhIHNoYXBlczpcbiAqIDEuIGBVaW50OEFycmF5YCB3aXRoICdlbmNyJyBwcmVmaXgg4oaSIHJldHVybmVkIGFzLWlzIChlbmNyeXB0ZWQsIG5vdCB5ZXQgZGVjcnlwdGVkKVxuICogMi4gYFVpbnQ4QXJyYXlgIHdpdGggYSBmb3JtYXQgcHJlZml4IChzcGVjVmVyc2lvbiAyKykg4oaSIGRlY29kZSBwcmVmaXgsIHBhcnNlXG4gKiAzLiBgQXJyYXlgIChsZWdhY3kgc3BlY1ZlcnNpb24gMSwgXCJyZXZpdmVkIGRldmFsdWVcIikg4oaSIHVuZmxhdHRlblxuICogNC4gT3RoZXIgKGFscmVhZHkgYSBwbGFpbiBKUyB2YWx1ZSkg4oaSIHJldHVybiBhcy1pc1xuICpcbiAqIEVuY3J5cHRlZCBkYXRhIGlzIGludGVudGlvbmFsbHkgbGVmdCBhcyBhIGBVaW50OEFycmF5YCBzbyB0aGF0IGNvbnN1bWVyc1xuICogKENMSSwgd2ViIFVJKSBjYW4gZGV0ZWN0IGl0IHdpdGggYGlzRW5jcnlwdGVkRGF0YSgpYCBhbmQgZGVjaWRlIGhvdyB0b1xuICogaGFuZGxlIGl0OiB0aGUgQ0xJIHJlcGxhY2VzIGl0IHdpdGggYSBzdHlsZWQgcGxhY2Vob2xkZXIsIHRoZSB3ZWIgVUlcbiAqIHJlbmRlcnMgYW4gXCJFbmNyeXB0ZWRcIiBjYXJkIHdpdGggYSBEZWNyeXB0IGJ1dHRvbiB0aGF0IHRyaWdnZXJzXG4gKiBjbGllbnQtc2lkZSBkZWNyeXB0aW9uIG9uIGRlbWFuZC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGh5ZHJhdGVEYXRhKHZhbHVlOiB1bmtub3duLCByZXZpdmVyczogUmV2aXZlcnMpOiB1bmtub3duIHtcbiAgaWYgKHZhbHVlIGluc3RhbmNlb2YgVWludDhBcnJheSkge1xuICAgIC8vIEVuY3J5cHRlZCBkYXRhIHBhc3NlcyB0aHJvdWdoIHVudG91Y2hlZDogbzExeSBsYXllcnMgZGV0ZWN0IGl0IHdpdGhcbiAgICAvLyBpc0VuY3J5cHRlZERhdGEoKSBhbmQgaGFuZGxlIGRpc3BsYXkgKHdlYjogbmFtZWQgY29uc3RydWN0b3Igb2JqZWN0LFxuICAgIC8vIENMSTogRW5jcnlwdGVkRGF0YVJlZiB3aXRoIHV0aWwuaW5zcGVjdC5jdXN0b20pLlxuICAgIGlmIChpc0VuY3J5cHRlZERhdGEodmFsdWUpKSB7XG4gICAgICByZXR1cm4gdmFsdWU7XG4gICAgfVxuXG4gICAgY29uc3QgeyBmb3JtYXQsIHBheWxvYWQgfSA9IGRlY29kZUZvcm1hdFByZWZpeCh2YWx1ZSk7XG4gICAgaWYgKGZvcm1hdCA9PT0gU2VyaWFsaXphdGlvbkZvcm1hdC5ERVZBTFVFX1YxKSB7XG4gICAgICBjb25zdCBzdHIgPSBuZXcgVGV4dERlY29kZXIoKS5kZWNvZGUocGF5bG9hZCk7XG4gICAgICByZXR1cm4gcGFyc2Uoc3RyLCByZXZpdmVycyk7XG4gICAgfVxuICAgIGlmIChcbiAgICAgIGZvcm1hdCA9PT0gU2VyaWFsaXphdGlvbkZvcm1hdC5HWklQIHx8XG4gICAgICBmb3JtYXQgPT09IFNlcmlhbGl6YXRpb25Gb3JtYXQuWlNURFxuICAgICkge1xuICAgICAgLy8gQ29tcHJlc3NlZCBwYXlsb2FkOiBkZWNvbXByZXNzIHN5bmNocm9ub3VzbHkgd2hlbiBydW5uaW5nIG9uXG4gICAgICAvLyBOb2RlLmpzIChDTEksIHNlcnZlciBvMTF5KS4gSW4gYnJvd3NlcnMgdGhlcmUgaXMgbm8gc3luYyBjb2RlYztcbiAgICAgIC8vIHBhc3MgdGhlIGRhdGEgdGhyb3VnaCB1bnRvdWNoZWQgKGxpa2UgZW5jcnlwdGVkIGRhdGEpIHNvIGFzeW5jXG4gICAgICAvLyBjb25zdW1lcnMgY2FuIHJvdXRlIGl0IHRocm91Z2ggYGh5ZHJhdGVEYXRhV2l0aEtleWAsIHdoaWNoXG4gICAgICAvLyBkZWNvbXByZXNzZXMgdmlhIERlY29tcHJlc3Npb25TdHJlYW0gLyBhIHJlZ2lzdGVyZWQgenN0ZCBkZWNvZGVyLlxuICAgICAgY29uc3QgaW5mbGF0ZWQgPSBkZWNvbXByZXNzU3luY0lmQXZhaWxhYmxlKGZvcm1hdCwgcGF5bG9hZCk7XG4gICAgICBpZiAoaW5mbGF0ZWQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICB9XG4gICAgICAvLyBUaGUgaW5mbGF0ZWQgYnl0ZXMgY2FycnkgdGhlaXIgb3duIGZvcm1hdCBwcmVmaXggKGUuZy4gJ2RldmwnKVxuICAgICAgcmV0dXJuIGh5ZHJhdGVEYXRhKGluZmxhdGVkLCByZXZpdmVycyk7XG4gICAgfVxuICAgIHRocm93IG5ldyBFcnJvcihgVW5zdXBwb3J0ZWQgc2VyaWFsaXphdGlvbiBmb3JtYXQ6ICR7Zm9ybWF0fWApO1xuICB9XG5cbiAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgcmV0dXJuIHVuZmxhdHRlbih2YWx1ZSwgcmV2aXZlcnMpO1xuICB9XG5cbiAgLy8gQWxyZWFkeSBhIHBsYWluIEpTIHZhbHVlIChlLmcuLCBudW1iZXIsIHN0cmluZywgbnVsbClcbiAgcmV0dXJuIHZhbHVlO1xufVxuXG4vKipcbiAqIEh5ZHJhdGUgYSB2YWx1ZSwgZGVjcnlwdGluZyBpdCBmaXJzdCBpZiBhbiBlbmNyeXB0aW9uIGtleSBpcyBwcm92aWRlZC5cbiAqXG4gKiBUaGlzIGlzIHRoZSBhc3luYyB2ZXJzaW9uIG9mIGBoeWRyYXRlRGF0YWAgdGhhdCBzdXBwb3J0cyB0cmFuc3BhcmVudFxuICogZGVjcnlwdGlvbi4gVXNlZCBieSBvMTF5IHRvb2xpbmcgKHdlYiBVSSwgQ0xJKSB3aGVuIHRoZSB1c2VyIHJlcXVlc3RzXG4gKiBkZWNyeXB0aW9uLlxuICpcbiAqIEBwYXJhbSB2YWx1ZSAtIFRoZSB2YWx1ZSB0byBoeWRyYXRlIChtYXkgYmUgZW5jcnlwdGVkIG9yIHNlYWxlZClcbiAqIEBwYXJhbSByZXZpdmVycyAtIERldmFsdWUgcmV2aXZlcnMgZm9yIGRlc2VyaWFsaXphdGlvblxuICogQHBhcmFtIGtleSAtIFRoZSBydW4ncyBrZXkgbWF0ZXJpYWwuIFBhc3MgYFJ1blBheWxvYWRLZXlzYCAoZnJvbVxuICogICBgZGVyaXZlUnVuUGF5bG9hZEtleXNgKSB0byBvcGVuIGJvdGggc3ltbWV0cmljIChgZW5jcmApIGFuZCBzZWFsZWRcbiAqICAgKGBlbmNwYCkgcGF5bG9hZHM7IGEgYmFyZSBgQ3J5cHRvS2V5YCBvcGVucyBvbmx5IHRoZSBzeW1tZXRyaWMgb25lcy5cbiAqICAgVHlwZWQgYXMgYSByZWFkIGNhcGFiaWxpdHkgc28gYSB3cml0ZS1vbmx5IHNlYWwgdGFyZ2V0ICh3aGljaCBjb3VsZCBvcGVuXG4gKiAgIG5laXRoZXIgc2NoZW1lKSBpcyByZWplY3RlZCBhdCBjb21waWxlIHRpbWUgcmF0aGVyIHRoYW4gZmFpbGluZyBoZXJlLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gaHlkcmF0ZURhdGFXaXRoS2V5KFxuICB2YWx1ZTogdW5rbm93bixcbiAgcmV2aXZlcnM6IFJldml2ZXJzLFxuICBrZXk6IGltcG9ydCgnLi9zZXJpYWxpemF0aW9uL2VuY3J5cHRpb24uanMnKS5EZWNyeXB0aW9uS2V5IHwgdW5kZWZpbmVkXG4pOiBQcm9taXNlPHVua25vd24+IHtcbiAgbGV0IGRhdGEgPSB2YWx1ZTtcbiAgaWYgKGRhdGEgaW5zdGFuY2VvZiBVaW50OEFycmF5ICYmIGlzRW5jcnlwdGVkRGF0YShkYXRhKSAmJiBrZXkpIHtcbiAgICAvLyBFbnZlbG9wZS1hd2FyZSBkZWNyeXB0OiBoYW5kbGVzIGJvdGggYGVuY3JgIChBRVMtR0NNIHVuZGVyIHRoZSBydW4nc1xuICAgIC8vIHN5bW1ldHJpYyBrZXkpIGFuZCBgZW5jcGAgKHNlYWxlZCB0byB0aGUgcnVuJ3MgWDI1NTE5IHB1YmxpYyBrZXkgYnlcbiAgICAvLyBzb21lIG90aGVyIHJ1biksIGRpc3BhdGNoaW5nIG9uIHRoZSBmb3JtYXQgcHJlZml4LlxuICAgIGNvbnN0IHsgZGVjcnlwdCwgaXNSdW5QYXlsb2FkS2V5cyB9ID0gYXdhaXQgaW1wb3J0KFxuICAgICAgJy4vc2VyaWFsaXphdGlvbi9lbmNyeXB0aW9uLmpzJ1xuICAgICk7XG4gICAgLy8gT3BlbmluZyBhIHNlYWxlZCBwYXlsb2FkIG5lZWRzIHRoZSBydW4ncyBwcml2YXRlIHNjYWxhci4gSWYgdGhlIGNhbGxlclxuICAgIC8vIHN1cHBsaWVkIG9ubHkgYSBzeW1tZXRyaWMga2V5LCBsZWF2ZSB0aGUgYnl0ZXMgYXMgY2lwaGVydGV4dCBzbyB0aGUgVUlcbiAgICAvLyBrZWVwcyBzaG93aW5nIGl0cyBcIkVuY3J5cHRlZFwiIGFmZm9yZGFuY2UsIHJhdGhlciB0aGFuIHN1cmZhY2luZyBhXG4gICAgLy8gZGVjcnlwdGlvbiBlcnJvciBmb3Igc29tZXRoaW5nIHRoYXQgd2FzIG5ldmVyIG9wZW5hYmxlIHdpdGggdGhpcyBrZXkuXG4gICAgaWYgKCFpc1NlYWxlZERhdGEoZGF0YSkgfHwgaXNSdW5QYXlsb2FkS2V5cyhrZXkpKSB7XG4gICAgICBkYXRhID0gYXdhaXQgZGVjcnlwdChkYXRhLCBrZXkpO1xuICAgIH1cbiAgfVxuICBpZiAoZGF0YSBpbnN0YW5jZW9mIFVpbnQ4QXJyYXkgJiYgaXNDb21wcmVzc2VkRGF0YShkYXRhKSkge1xuICAgIC8vIERlY29tcHJlc3M6IHN0cmlwIHRoZSBjb2RlYyBwcmVmaXggYW5kIGluZmxhdGUuIGd6aXAgdXNlcyB0aGVcbiAgICAvLyB3ZWItc3RhbmRhcmQgRGVjb21wcmVzc2lvblN0cmVhbSAod29ya3MgaW4gYnJvd3NlcnMpOyB6c3RkIHVzZXNcbiAgICAvLyBub2RlOnpsaWIgb24gTm9kZSBvciB0aGUgcmVnaXN0ZXJlZCBXQVNNIGRlY29kZXIgaW4gdGhlIGJyb3dzZXIuXG4gICAgLy8gVGhlIGluZmxhdGVkIGJ5dGVzIGNhcnJ5IHRoZWlyIG93biBmb3JtYXQgcHJlZml4IChlLmcuICdkZXZsJykuXG4gICAgY29uc3QgeyBmb3JtYXQsIHBheWxvYWQgfSA9IGRlY29kZUZvcm1hdFByZWZpeChkYXRhKTtcbiAgICBkYXRhID0gYXdhaXQgZGVjb21wcmVzc0FzeW5jKGZvcm1hdCwgcGF5bG9hZCk7XG4gIH1cbiAgLy8gRGVsZWdhdGUgdGhlIChkZWNyeXB0ZWQvZGVjb21wcmVzc2VkKSByZXN1bHQgdG8gc3luYyBoeWRyYXRlRGF0YVxuICByZXR1cm4gaHlkcmF0ZURhdGEoZGF0YSwgcmV2aXZlcnMpO1xufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIFNoYXJlZCBtYXJrZXIgdHlwZXMgZm9yIG8xMXkgZGlzcGxheVxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbmNvbnN0IFNUUkVBTV9JRF9QUkVGSVggPSAnc3RybV8nO1xuXG4vKiogTWFya2VyIGZvciBzdHJlYW0gcmVmZXJlbmNlIG9iamVjdHMgcmVuZGVyZWQgYXMgbGlua3MgaW4gdGhlIFVJICovXG5leHBvcnQgY29uc3QgU1RSRUFNX1JFRl9UWVBFID0gJ19fd29ya2Zsb3dfc3RyZWFtX3JlZl9fJztcblxuLyoqIEEgc3RyZWFtIHJlZmVyZW5jZSBmb3IgVUkgZGlzcGxheSAqL1xuZXhwb3J0IGludGVyZmFjZSBTdHJlYW1SZWYge1xuICBfX3R5cGU6IHR5cGVvZiBTVFJFQU1fUkVGX1RZUEU7XG4gIHN0cmVhbUlkOiBzdHJpbmc7XG59XG5cbi8qKiBNYXJrZXIgZm9yIFJ1biByZWZlcmVuY2Ugb2JqZWN0cyByZW5kZXJlZCBhcyBsaW5rcyBpbiB0aGUgVUkgKi9cbmV4cG9ydCBjb25zdCBSVU5fUkVGX1RZUEUgPSAnX193b3JrZmxvd19ydW5fcmVmX18nO1xuXG4vKiogQSBSdW4gcmVmZXJlbmNlIGZvciBVSSBkaXNwbGF5ICovXG5leHBvcnQgaW50ZXJmYWNlIFJ1blJlZiB7XG4gIF9fdHlwZTogdHlwZW9mIFJVTl9SRUZfVFlQRTtcbiAgcnVuSWQ6IHN0cmluZztcbn1cblxuLyoqIENoZWNrIGlmIGEgdmFsdWUgaXMgYSBSdW5SZWYgb2JqZWN0ICovXG5leHBvcnQgY29uc3QgaXNSdW5SZWYgPSAodmFsdWU6IHVua25vd24pOiB2YWx1ZSBpcyBSdW5SZWYgPT4ge1xuICByZXR1cm4gKFxuICAgIHZhbHVlICE9PSBudWxsICYmXG4gICAgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJlxuICAgICdfX3R5cGUnIGluIHZhbHVlICYmXG4gICAgdmFsdWUuX190eXBlID09PSBSVU5fUkVGX1RZUEUgJiZcbiAgICAncnVuSWQnIGluIHZhbHVlICYmXG4gICAgdHlwZW9mIHZhbHVlLnJ1bklkID09PSAnc3RyaW5nJ1xuICApO1xufTtcblxuLyoqIENvbnZlcnQgYSBzZXJpYWxpemVkIFJ1biB2YWx1ZSB0byBhIFJ1blJlZiBmb3IgZGlzcGxheSAqL1xuZXhwb3J0IGNvbnN0IHNlcmlhbGl6ZWRSdW5Ub1J1blJlZiA9ICh2YWx1ZTogeyBydW5JZDogc3RyaW5nIH0pOiBSdW5SZWYgPT4ge1xuICByZXR1cm4geyBfX3R5cGU6IFJVTl9SRUZfVFlQRSwgcnVuSWQ6IHZhbHVlLnJ1bklkIH07XG59O1xuXG4vKiogTWFya2VyIGZvciBjdXN0b20gY2xhc3MgaW5zdGFuY2UgcmVmZXJlbmNlcyAqL1xuZXhwb3J0IGNvbnN0IENMQVNTX0lOU1RBTkNFX1JFRl9UWVBFID0gJ19fd29ya2Zsb3dfY2xhc3NfaW5zdGFuY2VfcmVmX18nO1xuXG4vKipcbiAqIEEgY2xhc3MgaW5zdGFuY2UgcmVmZXJlbmNlIGZvciBvMTF5IGRpc3BsYXkuXG4gKlxuICogQnJvd3Nlci1zYWZlIGJhc2UgY2xhc3M6IG5vIGB1dGlsLmluc3BlY3QuY3VzdG9tYC4gRW52aXJvbm1lbnQtc3BlY2lmaWNcbiAqIHJlbmRlcmluZyAoQ0xJIGluc3BlY3QsIHdlYiBjb21wb25lbnQpIGlzIGhhbmRsZWQgYnkgZWFjaCBjb25zdW1lci5cbiAqL1xuZXhwb3J0IGNsYXNzIENsYXNzSW5zdGFuY2VSZWYge1xuICByZWFkb25seSBfX3R5cGUgPSBDTEFTU19JTlNUQU5DRV9SRUZfVFlQRTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwdWJsaWMgcmVhZG9ubHkgY2xhc3NOYW1lOiBzdHJpbmcsXG4gICAgcHVibGljIHJlYWRvbmx5IGNsYXNzSWQ6IHN0cmluZyxcbiAgICBwdWJsaWMgcmVhZG9ubHkgZGF0YTogdW5rbm93blxuICApIHt9XG5cbiAgdG9KU09OKCk6IHtcbiAgICBfX3R5cGU6IHN0cmluZztcbiAgICBjbGFzc05hbWU6IHN0cmluZztcbiAgICBjbGFzc0lkOiBzdHJpbmc7XG4gICAgZGF0YTogdW5rbm93bjtcbiAgfSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIF9fdHlwZTogdGhpcy5fX3R5cGUsXG4gICAgICBjbGFzc05hbWU6IHRoaXMuY2xhc3NOYW1lLFxuICAgICAgY2xhc3NJZDogdGhpcy5jbGFzc0lkLFxuICAgICAgZGF0YTogdGhpcy5kYXRhLFxuICAgIH07XG4gIH1cbn1cblxuLyoqIENoZWNrIGlmIGEgdmFsdWUgaXMgYSBDbGFzc0luc3RhbmNlUmVmIG9iamVjdCAqL1xuZXhwb3J0IGNvbnN0IGlzQ2xhc3NJbnN0YW5jZVJlZiA9IChcbiAgdmFsdWU6IHVua25vd25cbik6IHZhbHVlIGlzIENsYXNzSW5zdGFuY2VSZWYgPT4ge1xuICByZXR1cm4gKFxuICAgIHZhbHVlIGluc3RhbmNlb2YgQ2xhc3NJbnN0YW5jZVJlZiB8fFxuICAgICh2YWx1ZSAhPT0gbnVsbCAmJlxuICAgICAgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJlxuICAgICAgJ19fdHlwZScgaW4gdmFsdWUgJiZcbiAgICAgIHZhbHVlLl9fdHlwZSA9PT0gQ0xBU1NfSU5TVEFOQ0VfUkVGX1RZUEUgJiZcbiAgICAgICdjbGFzc05hbWUnIGluIHZhbHVlICYmXG4gICAgICB0eXBlb2YgdmFsdWUuY2xhc3NOYW1lID09PSAnc3RyaW5nJylcbiAgKTtcbn07XG5cbi8qKiBDaGVjayBpZiBhIHZhbHVlIGlzIGEgc3RyZWFtIElEIHN0cmluZyAqL1xuZXhwb3J0IGNvbnN0IGlzU3RyZWFtSWQgPSAodmFsdWU6IHVua25vd24pOiBib29sZWFuID0+IHtcbiAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycgJiYgdmFsdWUuc3RhcnRzV2l0aChTVFJFQU1fSURfUFJFRklYKTtcbn07XG5cbi8qKiBDaGVjayBpZiBhIHZhbHVlIGlzIGEgU3RyZWFtUmVmIG9iamVjdCAqL1xuZXhwb3J0IGNvbnN0IGlzU3RyZWFtUmVmID0gKHZhbHVlOiB1bmtub3duKTogdmFsdWUgaXMgU3RyZWFtUmVmID0+IHtcbiAgcmV0dXJuIChcbiAgICB2YWx1ZSAhPT0gbnVsbCAmJlxuICAgIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiZcbiAgICAnX190eXBlJyBpbiB2YWx1ZSAmJlxuICAgIHZhbHVlLl9fdHlwZSA9PT0gU1RSRUFNX1JFRl9UWVBFICYmXG4gICAgJ3N0cmVhbUlkJyBpbiB2YWx1ZSAmJlxuICAgIHR5cGVvZiB2YWx1ZS5zdHJlYW1JZCA9PT0gJ3N0cmluZydcbiAgKTtcbn07XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gU2hhcmVkIG8xMXkgcmV2aXZlciBoZWxwZXJzXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuLyoqXG4gKiBDb252ZXJ0IGEgc2VyaWFsaXplZCBzdHJlYW0gdmFsdWUgdG8gYSBTdHJlYW1SZWYgZm9yIGRpc3BsYXkuXG4gKi9cbmV4cG9ydCBjb25zdCBzdHJlYW1Ub1N0cmVhbVJlZiA9ICh2YWx1ZTogYW55KTogU3RyZWFtUmVmID0+IHtcbiAgbGV0IHN0cmVhbUlkOiBzdHJpbmc7XG4gIGlmICgnbmFtZScgaW4gdmFsdWUpIHtcbiAgICBjb25zdCBuYW1lID0gU3RyaW5nKHZhbHVlLm5hbWUpO1xuICAgIGlmICghbmFtZS5zdGFydHNXaXRoKFNUUkVBTV9JRF9QUkVGSVgpKSB7XG4gICAgICBzdHJlYW1JZCA9IGAke1NUUkVBTV9JRF9QUkVGSVh9JHtuYW1lfWA7XG4gICAgfSBlbHNlIHtcbiAgICAgIHN0cmVhbUlkID0gbmFtZTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgc3RyZWFtSWQgPSBgJHtTVFJFQU1fSURfUFJFRklYfW51bGxgO1xuICB9XG4gIHJldHVybiB7IF9fdHlwZTogU1RSRUFNX1JFRl9UWVBFLCBzdHJlYW1JZCB9O1xufTtcblxuLyoqIENvbnZlcnQgYSBzZXJpYWxpemVkIHN0ZXAgZnVuY3Rpb24gdG8gYSBkaXNwbGF5IHN0cmluZyAqL1xuZXhwb3J0IGNvbnN0IHNlcmlhbGl6ZWRTdGVwRnVuY3Rpb25Ub1N0cmluZyA9ICh2YWx1ZTogdW5rbm93bik6IHN0cmluZyA9PiB7XG4gIGlmICghdmFsdWUpIHJldHVybiAnbnVsbCc7XG4gIGlmICh0eXBlb2YgdmFsdWUgIT09ICdvYmplY3QnKSByZXR1cm4gJ251bGwnO1xuICBpZiAoJ3N0ZXBJZCcgaW4gdmFsdWUpIHtcbiAgICByZXR1cm4gYDxzdGVwOiR7KHZhbHVlIGFzIHsgc3RlcElkOiBzdHJpbmcgfSkuc3RlcElkfT5gO1xuICB9XG4gIHJldHVybiAnPGZ1bmN0aW9uPic7XG59O1xuXG4vKiogRXh0cmFjdCB0aGUgY2xhc3MgbmFtZSBmcm9tIGEgY2xhc3NJZCAqL1xuZXhwb3J0IGNvbnN0IGV4dHJhY3RDbGFzc05hbWUgPSAoY2xhc3NJZDogc3RyaW5nKTogc3RyaW5nID0+IHtcbiAgaWYgKCFjbGFzc0lkKSByZXR1cm4gJ1Vua25vd24nO1xuICBjb25zdCBwYXJ0cyA9IGNsYXNzSWQuc3BsaXQoJy8nKTtcbiAgcmV0dXJuIHBhcnRzW3BhcnRzLmxlbmd0aCAtIDFdIHx8IGNsYXNzSWQ7XG59O1xuXG4vKiogQ29udmVydCBhIHNlcmlhbGl6ZWQgY2xhc3MgaW5zdGFuY2UgdG8gYSBDbGFzc0luc3RhbmNlUmVmIGZvciBkaXNwbGF5LlxuICogIFJ1biBpbnN0YW5jZXMgYXJlIHNwZWNpYWwtY2FzZWQgdG8gYSBSdW5SZWYgZm9yIGNsaWNrYWJsZSByZW5kZXJpbmcuICovXG5leHBvcnQgY29uc3Qgc2VyaWFsaXplZEluc3RhbmNlVG9SZWYgPSAodmFsdWU6IHtcbiAgY2xhc3NJZDogc3RyaW5nO1xuICBkYXRhOiB1bmtub3duO1xufSk6IENsYXNzSW5zdGFuY2VSZWYgfCBSdW5SZWYgPT4ge1xuICBjb25zdCBjbGFzc05hbWUgPSBleHRyYWN0Q2xhc3NOYW1lKHZhbHVlLmNsYXNzSWQpO1xuICBpZiAoXG4gICAgY2xhc3NOYW1lID09PSAnUnVuJyAmJlxuICAgIHZhbHVlLmRhdGEgIT09IG51bGwgJiZcbiAgICB0eXBlb2YgdmFsdWUuZGF0YSA9PT0gJ29iamVjdCcgJiZcbiAgICAncnVuSWQnIGluIHZhbHVlLmRhdGEgJiZcbiAgICB0eXBlb2YgKHZhbHVlLmRhdGEgYXMgeyBydW5JZDogdW5rbm93biB9KS5ydW5JZCA9PT0gJ3N0cmluZydcbiAgKSB7XG4gICAgcmV0dXJuIHNlcmlhbGl6ZWRSdW5Ub1J1blJlZih2YWx1ZS5kYXRhIGFzIHsgcnVuSWQ6IHN0cmluZyB9KTtcbiAgfVxuICByZXR1cm4gbmV3IENsYXNzSW5zdGFuY2VSZWYoY2xhc3NOYW1lLCB2YWx1ZS5jbGFzc0lkLCB2YWx1ZS5kYXRhKTtcbn07XG5cbi8qKiBDb252ZXJ0IGEgc2VyaWFsaXplZCBjbGFzcyByZWZlcmVuY2UgdG8gYSBkaXNwbGF5IHN0cmluZyAqL1xuZXhwb3J0IGNvbnN0IHNlcmlhbGl6ZWRDbGFzc1RvU3RyaW5nID0gKHZhbHVlOiB7IGNsYXNzSWQ6IHN0cmluZyB9KTogc3RyaW5nID0+IHtcbiAgcmV0dXJuIGA8Y2xhc3M6JHtleHRyYWN0Q2xhc3NOYW1lKHZhbHVlLmNsYXNzSWQpfT5gO1xufTtcblxuLyoqXG4gKiBTdGFuZGFyZCBvMTF5IHJldml2ZXJzIHRoYXQgb3ZlcnJpZGUgcnVudGltZS1zcGVjaWZpYyB0eXBlcyB3aXRoXG4gKiBkaXNwbGF5LWZyaWVuZGx5IHZhbHVlcy4gVXNlZCBieSBib3RoIHdlYiBhbmQgQ0xJIGh5ZHJhdGlvbi5cbiAqL1xuZXhwb3J0IGNvbnN0IG9ic2VydmFiaWxpdHlSZXZpdmVyczogUmV2aXZlcnMgPSB7XG4gIFJlYWRhYmxlU3RyZWFtOiBzdHJlYW1Ub1N0cmVhbVJlZixcbiAgV3JpdGFibGVTdHJlYW06IHN0cmVhbVRvU3RyZWFtUmVmLFxuICBUcmFuc2Zvcm1TdHJlYW06IHN0cmVhbVRvU3RyZWFtUmVmLFxuICBBYm9ydENvbnRyb2xsZXI6ICh2YWx1ZTogYW55KSA9PlxuICAgIGA8QWJvcnRDb250cm9sbGVyKGFib3J0ZWQ6ICR7dmFsdWUuYWJvcnRlZH0pPmAsXG4gIEFib3J0U2lnbmFsOiAodmFsdWU6IGFueSkgPT4gYDxBYm9ydFNpZ25hbChhYm9ydGVkOiAke3ZhbHVlLmFib3J0ZWR9KT5gLFxuICAvLyBET01FeGNlcHRpb24gbmVlZHMgYW4gZXhwbGljaXQgcmV2aXZlcjogd2l0aG91dCBvbmUsIGRldmFsdWUucGFyc2VcbiAgLy8gdGhyb3dzIG9uIHRoZSBgW1wiRE9NRXhjZXB0aW9uXCIsIC4uLl1gIHRhZyBhbmQgYGh5ZHJhdGVTdGVwSU9gJ3NcbiAgLy8gdHJ5L2NhdGNoIGxlYXZlcyB0aGUgcmF3IGZsYXQtZW5jb2RlZCBzdHJpbmcgaW4gdGhlIFVJLiBBYm9ydENvbnRyb2xsZXJcbiAgLy8gc3ludGhlc2l6ZXMgYSBET01FeGNlcHRpb24gYXMgdGhlIGRlZmF1bHQgYHNpZ25hbC5yZWFzb25gIHdoZW4gYWJvcnQoKVxuICAvLyBpcyBjYWxsZWQgd2l0aCBubyBhcmcsIHNvIGFueSBhYm9ydCB0aGF0IHJvdW5kLXRyaXBzIHRocm91Z2ggYSBzdGVwXG4gIC8vIGJvdW5kYXJ5IHN1cmZhY2VzIGhlcmUuIFJlY29uc3RydWN0IGFzIGEgcmVhbCBET01FeGNlcHRpb24gd2hlbiB0aGVcbiAgLy8gZ2xvYmFsIGlzIGF2YWlsYWJsZSAobW9kZXJuIGJyb3dzZXJzICsgTm9kZSAxOCspLCBlbHNlIGZhbGwgYmFjayB0b1xuICAvLyBhbiBFcnJvciBwcmVzZXJ2aW5nIG5hbWUvbWVzc2FnZS9zdGFjay9jYXVzZSBmb3IgZGlzcGxheS5cbiAgRE9NRXhjZXB0aW9uOiAodmFsdWU6IHtcbiAgICBtZXNzYWdlOiBzdHJpbmc7XG4gICAgbmFtZTogc3RyaW5nO1xuICAgIHN0YWNrPzogc3RyaW5nO1xuICAgIGNhdXNlPzogdW5rbm93bjtcbiAgfSkgPT4ge1xuICAgIGNvbnN0IEcgPSBnbG9iYWxUaGlzIGFzIHsgRE9NRXhjZXB0aW9uPzogdHlwZW9mIERPTUV4Y2VwdGlvbiB9O1xuICAgIGlmICh0eXBlb2YgRy5ET01FeGNlcHRpb24gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGNvbnN0IGUgPSBuZXcgRy5ET01FeGNlcHRpb24odmFsdWUubWVzc2FnZSwgdmFsdWUubmFtZSk7XG4gICAgICBpZiAodmFsdWUuc3RhY2sgIT09IHVuZGVmaW5lZCkgZS5zdGFjayA9IHZhbHVlLnN0YWNrO1xuICAgICAgaWYgKCdjYXVzZScgaW4gdmFsdWUpIChlIGFzIHsgY2F1c2U/OiB1bmtub3duIH0pLmNhdXNlID0gdmFsdWUuY2F1c2U7XG4gICAgICByZXR1cm4gZTtcbiAgICB9XG4gICAgY29uc3QgZTogRXJyb3IgJiB7IGNhdXNlPzogdW5rbm93biB9ID0gbmV3IEVycm9yKHZhbHVlLm1lc3NhZ2UpO1xuICAgIGUubmFtZSA9IHZhbHVlLm5hbWU7XG4gICAgaWYgKHZhbHVlLnN0YWNrICE9PSB1bmRlZmluZWQpIGUuc3RhY2sgPSB2YWx1ZS5zdGFjaztcbiAgICBpZiAoJ2NhdXNlJyBpbiB2YWx1ZSkgZS5jYXVzZSA9IHZhbHVlLmNhdXNlO1xuICAgIHJldHVybiBlO1xuICB9LFxuICBTdGVwRnVuY3Rpb246IHNlcmlhbGl6ZWRTdGVwRnVuY3Rpb25Ub1N0cmluZyxcbiAgV29ya2Zsb3dGdW5jdGlvbjogKHZhbHVlOiB7IHdvcmtmbG93SWQ6IHN0cmluZyB9KSA9PlxuICAgIGA8d29ya2Zsb3c6JHt2YWx1ZS53b3JrZmxvd0lkfT5gLFxuICBJbnN0YW5jZTogc2VyaWFsaXplZEluc3RhbmNlVG9SZWYsXG4gIENsYXNzOiBzZXJpYWxpemVkQ2xhc3NUb1N0cmluZyxcbn07XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gUmVzb3VyY2UtbGV2ZWwgaHlkcmF0aW9uIGRpc3BhdGNoIChmb3IgbzExeSlcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4vKipcbiAqIEh5ZHJhdGUgdGhlIGRhdGEgZmllbGRzIG9mIGEgc3RlcCByZXNvdXJjZS5cbiAqL1xuZnVuY3Rpb24gaHlkcmF0ZVN0ZXBJTzxcbiAgVCBleHRlbmRzIHsgc3RlcElkPzogc3RyaW5nOyBpbnB1dD86IGFueTsgb3V0cHV0PzogYW55OyBlcnJvcj86IGFueSB9LFxuPihyZXNvdXJjZTogVCwgcmV2aXZlcnM6IFJldml2ZXJzKTogVCB7XG4gIGxldCBoeWRyYXRlZElucHV0ID0gcmVzb3VyY2UuaW5wdXQ7XG4gIGxldCBoeWRyYXRlZE91dHB1dCA9IHJlc291cmNlLm91dHB1dDtcbiAgbGV0IGh5ZHJhdGVkRXJyb3IgPSByZXNvdXJjZS5lcnJvcjtcblxuICBpZiAocmVzb3VyY2UuaW5wdXQgIT0gbnVsbCkge1xuICAgIHRyeSB7XG4gICAgICBoeWRyYXRlZElucHV0ID0gaHlkcmF0ZURhdGEocmVzb3VyY2UuaW5wdXQsIHJldml2ZXJzKTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIC8vIExlYXZlIHVuLWh5ZHJhdGVkXG4gICAgfVxuICB9XG5cbiAgaWYgKHJlc291cmNlLm91dHB1dCAhPSBudWxsKSB7XG4gICAgdHJ5IHtcbiAgICAgIGh5ZHJhdGVkT3V0cHV0ID0gaHlkcmF0ZURhdGEocmVzb3VyY2Uub3V0cHV0LCByZXZpdmVycyk7XG4gICAgfSBjYXRjaCB7XG4gICAgICAvLyBMZWF2ZSB1bi1oeWRyYXRlZFxuICAgIH1cbiAgfVxuXG4gIC8vIFRoZSBgZXJyb3JgIGZpZWxkIGlzIGBTZXJpYWxpemVkRGF0YWAgKFVpbnQ4QXJyYXkpIHByb2R1Y2VkIGJ5XG4gIC8vIGBkZWh5ZHJhdGVTdGVwRXJyb3JgLiBIeWRyYXRlIGl0IHNvIG9ic2VydmFiaWxpdHkgdG9vbHMgKENMSSwgd2ViIFVJKVxuICAvLyBjYW4gcmVhZCBgc3RlcC5lcnJvci5tZXNzYWdlYCwgYHN0ZXAuZXJyb3Iuc3RhY2tgLCBldGMuXG4gIGlmIChyZXNvdXJjZS5lcnJvciAhPSBudWxsKSB7XG4gICAgdHJ5IHtcbiAgICAgIGh5ZHJhdGVkRXJyb3IgPSBoeWRyYXRlRGF0YShyZXNvdXJjZS5lcnJvciwgcmV2aXZlcnMpO1xuICAgIH0gY2F0Y2gge1xuICAgICAgLy8gTGVhdmUgdW4taHlkcmF0ZWRcbiAgICB9XG4gIH1cblxuICByZXR1cm4ge1xuICAgIC4uLnJlc291cmNlLFxuICAgIGlucHV0OiBoeWRyYXRlZElucHV0LFxuICAgIG91dHB1dDogaHlkcmF0ZWRPdXRwdXQsXG4gICAgZXJyb3I6IGh5ZHJhdGVkRXJyb3IsXG4gIH07XG59XG5cbi8qKlxuICogSHlkcmF0ZSB0aGUgZGF0YSBmaWVsZHMgb2YgYSB3b3JrZmxvdyBydW4gcmVzb3VyY2UuXG4gKi9cbmZ1bmN0aW9uIGh5ZHJhdGVXb3JrZmxvd0lPPFxuICBUIGV4dGVuZHMgeyBpbnB1dD86IGFueTsgb3V0cHV0PzogYW55OyBlcnJvcj86IGFueSB9LFxuPihyZXNvdXJjZTogVCwgcmV2aXZlcnM6IFJldml2ZXJzKTogVCB7XG4gIGxldCBoeWRyYXRlZElucHV0ID0gcmVzb3VyY2UuaW5wdXQ7XG4gIGxldCBoeWRyYXRlZE91dHB1dCA9IHJlc291cmNlLm91dHB1dDtcbiAgbGV0IGh5ZHJhdGVkRXJyb3IgPSByZXNvdXJjZS5lcnJvcjtcblxuICBpZiAocmVzb3VyY2UuaW5wdXQgIT0gbnVsbCkge1xuICAgIHRyeSB7XG4gICAgICBoeWRyYXRlZElucHV0ID0gaHlkcmF0ZURhdGEocmVzb3VyY2UuaW5wdXQsIHJldml2ZXJzKTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIC8vIExlYXZlIHVuLWh5ZHJhdGVkXG4gICAgfVxuICB9XG5cbiAgaWYgKHJlc291cmNlLm91dHB1dCAhPSBudWxsKSB7XG4gICAgdHJ5IHtcbiAgICAgIGh5ZHJhdGVkT3V0cHV0ID0gaHlkcmF0ZURhdGEocmVzb3VyY2Uub3V0cHV0LCByZXZpdmVycyk7XG4gICAgfSBjYXRjaCB7XG4gICAgICAvLyBMZWF2ZSB1bi1oeWRyYXRlZFxuICAgIH1cbiAgfVxuXG4gIC8vIFRoZSBgZXJyb3JgIGZpZWxkIGlzIGBTZXJpYWxpemVkRGF0YWAgKFVpbnQ4QXJyYXkpIHByb2R1Y2VkIGJ5XG4gIC8vIGBkZWh5ZHJhdGVSdW5FcnJvcmAuIEh5ZHJhdGUgaXQgc28gb2JzZXJ2YWJpbGl0eSB0b29scyAoQ0xJLCB3ZWIgVUkpXG4gIC8vIGNhbiByZWFkIGBydW4uZXJyb3IubWVzc2FnZWAsIGBydW4uZXJyb3Iuc3RhY2tgLCBldGMuXG4gIGlmIChyZXNvdXJjZS5lcnJvciAhPSBudWxsKSB7XG4gICAgdHJ5IHtcbiAgICAgIGh5ZHJhdGVkRXJyb3IgPSBoeWRyYXRlRGF0YShyZXNvdXJjZS5lcnJvciwgcmV2aXZlcnMpO1xuICAgIH0gY2F0Y2gge1xuICAgICAgLy8gTGVhdmUgdW4taHlkcmF0ZWRcbiAgICB9XG4gIH1cblxuICByZXR1cm4ge1xuICAgIC4uLnJlc291cmNlLFxuICAgIGlucHV0OiBoeWRyYXRlZElucHV0LFxuICAgIG91dHB1dDogaHlkcmF0ZWRPdXRwdXQsXG4gICAgZXJyb3I6IGh5ZHJhdGVkRXJyb3IsXG4gIH07XG59XG5cbi8qKlxuICogSHlkcmF0ZSB0aGUgZXZlbnREYXRhIGZpZWxkcyBvZiBhbiBldmVudCByZXNvdXJjZS5cbiAqL1xuZnVuY3Rpb24gaHlkcmF0ZUV2ZW50RGF0YTxcbiAgVCBleHRlbmRzIHsgZXZlbnRJZD86IHN0cmluZzsgZXZlbnRUeXBlPzogc3RyaW5nOyBldmVudERhdGE/OiBhbnkgfSxcbj4ocmVzb3VyY2U6IFQsIHJldml2ZXJzOiBSZXZpdmVycyk6IFQge1xuICBpZiAoIXJlc291cmNlLmV2ZW50RGF0YSkgcmV0dXJuIHJlc291cmNlO1xuXG4gIGNvbnN0IGV2ZW50RGF0YSA9IHsgLi4ucmVzb3VyY2UuZXZlbnREYXRhIH07XG5cbiAgZm9yIChjb25zdCBmaWVsZCBvZiBnZXRFdmVudERhdGFSZWZGaWVsZHMocmVzb3VyY2UuZXZlbnRUeXBlID8/ICcnKSkge1xuICAgIGlmIChldmVudERhdGFbZmllbGRdID09IG51bGwpIGNvbnRpbnVlO1xuICAgIHRyeSB7XG4gICAgICBldmVudERhdGFbZmllbGRdID0gaHlkcmF0ZURhdGEoZXZlbnREYXRhW2ZpZWxkXSwgcmV2aXZlcnMpO1xuICAgIH0gY2F0Y2gge1xuICAgICAgLy8gTGVhdmUgdW4taHlkcmF0ZWRcbiAgICB9XG4gIH1cblxuICByZXR1cm4geyAuLi5yZXNvdXJjZSwgZXZlbnREYXRhIH07XG59XG5cbi8qKlxuICogSHlkcmF0ZSB0aGUgbWV0YWRhdGEgZmllbGQgb2YgYSBob29rIHJlc291cmNlLlxuICovXG5mdW5jdGlvbiBoeWRyYXRlSG9va01ldGFkYXRhPFQgZXh0ZW5kcyB7IGhvb2tJZD86IHN0cmluZzsgbWV0YWRhdGE/OiBhbnkgfT4oXG4gIHJlc291cmNlOiBULFxuICByZXZpdmVyczogUmV2aXZlcnNcbik6IFQge1xuICBpZiAocmVzb3VyY2UubWV0YWRhdGEgPT0gbnVsbCkgcmV0dXJuIHJlc291cmNlO1xuXG4gIGxldCBoeWRyYXRlZE1ldGFkYXRhID0gcmVzb3VyY2UubWV0YWRhdGE7XG4gIHRyeSB7XG4gICAgaHlkcmF0ZWRNZXRhZGF0YSA9IGh5ZHJhdGVEYXRhKHJlc291cmNlLm1ldGFkYXRhLCByZXZpdmVycyk7XG4gIH0gY2F0Y2gge1xuICAgIC8vIExlYXZlIHVuLWh5ZHJhdGVkXG4gIH1cblxuICByZXR1cm4geyAuLi5yZXNvdXJjZSwgbWV0YWRhdGE6IGh5ZHJhdGVkTWV0YWRhdGEgfTtcbn1cblxuLyoqXG4gKiBIeWRyYXRlIHRoZSBzZXJpYWxpemVkIGRhdGEgZmllbGRzIG9mIGFueSByZXNvdXJjZSBmb3IgbzExeSBkaXNwbGF5LlxuICpcbiAqIERpc3BhdGNoZXMgYnkgcmVzb3VyY2UgdHlwZSAoc3RlcCwgaG9vaywgZXZlbnQsIHdvcmtmbG93KSBhbmQgY2FsbHNcbiAqIGBoeWRyYXRlRGF0YWAgd2l0aCB0aGUgcHJvdmlkZWQgcmV2aXZlcnMgZm9yIGVhY2ggZGF0YSBmaWVsZC5cbiAqXG4gKiBFYWNoIGVudmlyb25tZW50ICh3ZWIsIENMSSkgcHJvdmlkZXMgaXRzIG93biByZXZpdmVyczsgdGhpcyBmdW5jdGlvblxuICogb25seSBoYW5kbGVzIHRoZSBkaXNwYXRjaCBsb2dpYyBhbmQgZmllbGQgbWFwcGluZy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGh5ZHJhdGVSZXNvdXJjZUlPPFxuICBUIGV4dGVuZHMge1xuICAgIHN0ZXBJZD86IHN0cmluZztcbiAgICBob29rSWQ/OiBzdHJpbmc7XG4gICAgZXZlbnRJZD86IHN0cmluZztcbiAgICBldmVudFR5cGU/OiBzdHJpbmc7XG4gICAgaW5wdXQ/OiBhbnk7XG4gICAgb3V0cHV0PzogYW55O1xuICAgIG1ldGFkYXRhPzogYW55O1xuICAgIGV2ZW50RGF0YT86IGFueTtcbiAgICBleGVjdXRpb25Db250ZXh0PzogYW55O1xuICB9LFxuPihyZXNvdXJjZTogVCwgcmV2aXZlcnM6IFJldml2ZXJzKTogVCB7XG4gIGlmICghcmVzb3VyY2UpIHJldHVybiByZXNvdXJjZTtcblxuICBsZXQgaHlkcmF0ZWQ6IFQ7XG4gIGlmICgnc3RlcElkJyBpbiByZXNvdXJjZSkge1xuICAgIGh5ZHJhdGVkID0gaHlkcmF0ZVN0ZXBJTyhyZXNvdXJjZSwgcmV2aXZlcnMpO1xuICB9IGVsc2UgaWYgKCdob29rSWQnIGluIHJlc291cmNlKSB7XG4gICAgaHlkcmF0ZWQgPSBoeWRyYXRlSG9va01ldGFkYXRhKHJlc291cmNlLCByZXZpdmVycyk7XG4gIH0gZWxzZSBpZiAoJ2V2ZW50SWQnIGluIHJlc291cmNlKSB7XG4gICAgaHlkcmF0ZWQgPSBoeWRyYXRlRXZlbnREYXRhKHJlc291cmNlLCByZXZpdmVycyk7XG4gIH0gZWxzZSB7XG4gICAgaHlkcmF0ZWQgPSBoeWRyYXRlV29ya2Zsb3dJTyhyZXNvdXJjZSwgcmV2aXZlcnMpO1xuICB9XG5cbiAgLy8gU3RyaXAgZXhlY3V0aW9uQ29udGV4dCwgcHJlc2VydmluZyBvbmx5IHdvcmtmbG93Q29yZVZlcnNpb24gZm9yIGRpc3BsYXlcbiAgaWYgKCdleGVjdXRpb25Db250ZXh0JyBpbiBoeWRyYXRlZCkge1xuICAgIGNvbnN0IHsgZXhlY3V0aW9uQ29udGV4dCwgLi4ucmVzdCB9ID0gaHlkcmF0ZWQ7XG4gICAgY29uc3Qgd29ya2Zsb3dDb3JlVmVyc2lvbiA9XG4gICAgICBleGVjdXRpb25Db250ZXh0ICYmXG4gICAgICB0eXBlb2YgZXhlY3V0aW9uQ29udGV4dCA9PT0gJ29iamVjdCcgJiZcbiAgICAgICd3b3JrZmxvd0NvcmVWZXJzaW9uJyBpbiBleGVjdXRpb25Db250ZXh0XG4gICAgICAgID8gZXhlY3V0aW9uQ29udGV4dC53b3JrZmxvd0NvcmVWZXJzaW9uXG4gICAgICAgIDogdW5kZWZpbmVkO1xuICAgIGlmICh3b3JrZmxvd0NvcmVWZXJzaW9uKSB7XG4gICAgICByZXR1cm4geyAuLi5yZXN0LCB3b3JrZmxvd0NvcmVWZXJzaW9uIH0gYXMgdW5rbm93biBhcyBUO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdCBhcyBUO1xuICB9XG5cbiAgcmV0dXJuIGh5ZHJhdGVkO1xufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIFV0aWxpdHkgZnVuY3Rpb25zXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuLyoqIEV4dHJhY3QgYWxsIHN0cmVhbSBJRHMgZnJvbSBhIHZhbHVlIChyZWN1cnNpdmVseSB0cmF2ZXJzZXMgb2JqZWN0cy9hcnJheXMpICovXG5leHBvcnQgZnVuY3Rpb24gZXh0cmFjdFN0cmVhbUlkcyhvYmo6IHVua25vd24pOiBzdHJpbmdbXSB7XG4gIGNvbnN0IHN0cmVhbUlkczogc3RyaW5nW10gPSBbXTtcbiAgLy8gVGhlIGh5ZHJhdGVkIG8xMXkgZGF0YSB0aGlzIHdhbGtzIGNvbWVzIGZyb20gZGV2YWx1ZSwgd2hpY2ggc3VwcG9ydHNcbiAgLy8gY2lyY3VsYXIgYW5kIHJlcGVhdGVkIHJlZmVyZW5jZXMuIFRyYWNrIHZpc2l0ZWQgY29udGFpbmVycyBzbyBhIGN5Y2xlXG4gIC8vIChlLmcuIGEgc3RlcCByZXN1bHQgd2hvc2Ugb2JqZWN0IHJlZmVycyBiYWNrIHRvIGl0c2VsZikgZG9lc24ndCByZWN1cnNlXG4gIC8vIGZvcmV2ZXIgYW5kIG92ZXJmbG93IHRoZSBzdGFjay5cbiAgY29uc3Qgc2VlbiA9IG5ldyBXZWFrU2V0PG9iamVjdD4oKTtcblxuICBmdW5jdGlvbiB0cmF2ZXJzZSh2YWx1ZTogdW5rbm93bik6IHZvaWQge1xuICAgIGlmIChpc1N0cmVhbUlkKHZhbHVlKSkge1xuICAgICAgc3RyZWFtSWRzLnB1c2godmFsdWUgYXMgc3RyaW5nKTtcbiAgICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICBpZiAoc2Vlbi5oYXModmFsdWUpKSByZXR1cm47XG4gICAgICBzZWVuLmFkZCh2YWx1ZSk7XG4gICAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgdmFsdWUpIHtcbiAgICAgICAgdHJhdmVyc2UoaXRlbSk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICh2YWx1ZSAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnKSB7XG4gICAgICBpZiAoc2Vlbi5oYXModmFsdWUpKSByZXR1cm47XG4gICAgICBzZWVuLmFkZCh2YWx1ZSk7XG4gICAgICBmb3IgKGNvbnN0IHZhbCBvZiBPYmplY3QudmFsdWVzKHZhbHVlKSkge1xuICAgICAgICB0cmF2ZXJzZSh2YWwpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHRyYXZlcnNlKG9iaik7XG4gIHJldHVybiBBcnJheS5mcm9tKG5ldyBTZXQoc3RyZWFtSWRzKSk7XG59XG5cbi8qKiBUcnVuY2F0ZSBhIHN0cmluZyB0byBhIG1heGltdW0gbGVuZ3RoLCBhZGRpbmcgZWxsaXBzaXMgaWYgbmVlZGVkICovXG5leHBvcnQgZnVuY3Rpb24gdHJ1bmNhdGVJZChpZDogc3RyaW5nLCBtYXhMZW5ndGggPSAxMik6IHN0cmluZyB7XG4gIGlmIChpZC5sZW5ndGggPD0gbWF4TGVuZ3RoKSByZXR1cm4gaWQ7XG4gIHJldHVybiBgJHtpZC5zbGljZSgwLCBtYXhMZW5ndGgpfS4uLmA7XG59XG4iXX0=
|
|
732
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VyaWFsaXphdGlvbi1mb3JtYXQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvc2VyaWFsaXphdGlvbi1mb3JtYXQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7OztHQU1HO0FBRUgsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ2xELE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ3ZFLE9BQU8sRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLE1BQU0sU0FBUyxDQUFDO0FBRTNDLDhFQUE4RTtBQUM5RSx5Q0FBeUM7QUFDekMsOEVBQThFO0FBRTlFOzs7Ozs7OztHQVFHO0FBQ0gsT0FBTyxFQUVMLE9BQU8sSUFBSSxlQUFlLEVBQzFCLG9CQUFvQixFQUNwQixPQUFPLElBQUksZUFBZSxFQUMxQixnQkFBZ0IsRUFDaEIsWUFBWSxFQUdaLGNBQWMsRUFFZCxNQUFNLEdBQ1AsTUFBTSwrQkFBK0IsQ0FBQztBQUV2Qyw4RUFBOEU7QUFDOUUsZ0RBQWdEO0FBQ2hELDhFQUE4RTtBQUU5RSxNQUFNLENBQUMsTUFBTSxtQkFBbUIsR0FBRztJQUNqQywyREFBMkQ7SUFDM0QsVUFBVSxFQUFFLE1BQU07SUFDbEIsbUZBQW1GO0lBQ25GLFNBQVMsRUFBRSxNQUFNO0lBQ2pCOzs7Ozs7Ozs7T0FTRztJQUNILE1BQU0sRUFBRSxNQUFNO0lBQ2QsNEZBQTRGO0lBQzVGLElBQUksRUFBRSxNQUFNO0lBQ1osaUdBQWlHO0lBQ2pHLElBQUksRUFBRSxNQUFNO0NBQ0osQ0FBQztBQUtYLDJDQUEyQztBQUMzQyxNQUFNLG9CQUFvQixHQUFHLENBQUMsQ0FBQztBQUUvQixNQUFNLGFBQWEsR0FBRyxJQUFJLFdBQVcsRUFBRSxDQUFDO0FBQ3hDLE1BQU0sYUFBYSxHQUFHLElBQUksV0FBVyxFQUFFLENBQUM7QUFFeEM7O0dBRUc7QUFDSCxNQUFNLFVBQVUsc0JBQXNCLENBQ3BDLE1BQStCLEVB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QVM7UUFBRSxPQUFPLEVBQUUsQ0FBQztJQUN0QyxPQUFPLEdBQUcsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsU0FBUyxDQUFDLEtBQUssQ0FBQztBQUN4QyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBCcm93c2VyLXNhZmUgc2VyaWFsaXphdGlvbiBmb3JtYXQgdXRpbGl0aWVzLlxuICpcbiAqIFRoaXMgbW9kdWxlIGNvbnRhaW5zIHRoZSBmb3JtYXQgcHJlZml4IGhhbmRsaW5nLCBnZW5lcmljIGh5ZHJhdGUvZGVoeWRyYXRlXG4gKiBkaXNwYXRjaCwgYW5kIHNoYXJlZCB0eXBlcy9jbGFzc2VzIHVzZWQgYnkgYWxsIGVudmlyb25tZW50cyAocnVudGltZSwgd2ViXG4gKiBvMTF5LCBDTEkgbzExeSkuIEl0IGhhcyBOTyBOb2RlLmpzIGRlcGVuZGVuY2llcy5cbiAqL1xuXG5pbXBvcnQgeyBnbG9iYWxTaW5nbGV0b24gfSBmcm9tICdAd29ya2Zsb3cvdXRpbHMnO1xuaW1wb3J0IHsgZ2V0RXZlbnREYXRhUmVmRmllbGRzIH0gZnJvbSAnQHdvcmtmbG93L3dvcmxkL2V2ZW50LW1ldGFkYXRhJztcbmltcG9ydCB7IHBhcnNlLCB1bmZsYXR0ZW4gfSBmcm9tICdkZXZhbHVlJztcblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBLZXkgbWF0ZXJpYWwgKGJyb3dzZXItc2FmZSByZS1leHBvcnRzKVxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbi8qKlxuICogUmUtZXhwb3J0ZWQgZnJvbSB0aGUgZW52ZWxvcGUgbGF5ZXIgc28gYnJvd3NlciBjb25zdW1lcnMgKHdlYiBkYXNoYm9hcmQsXG4gKiB3ZWItc2hhcmVkKSBjYW4gcmVzb2x2ZSBrZXkgbWF0ZXJpYWwgd2l0aG91dCBpbXBvcnRpbmdcbiAqIGBAd29ya2Zsb3cvY29yZS9zZXJpYWxpemF0aW9uYCwgd2hvc2UgbW9kdWxlIGdyYXBoIHJlYWNoZXMgTm9kZSBidWlsdC1pbnNcbiAqIChgbm9kZTp1dGlsYCwgYG5vZGU6YXN5bmNfaG9va3NgKSBhbmQgY2Fubm90IGJlIGJ1bmRsZWQgZm9yIHRoZSBicm93c2VyLlxuICpcbiAqIEV2ZXJ5dGhpbmcgYmVsb3cgaXMgV2ViIENyeXB0byBvbmx5OiBgc2VyaWFsaXphdGlvbi9lbmNyeXB0aW9uLnRzYCxcbiAqIGBlbmNyeXB0aW9uLnRzYCBhbmQgYHNlYWxlZC1ib3gudHNgIGFyZSBhbGwgZnJlZSBvZiBOb2RlIGRlcGVuZGVuY2llcy5cbiAqL1xuZXhwb3J0IHtcbiAgdHlwZSBEZWNyeXB0aW9uS2V5LFxuICBkZWNyeXB0IGFzIGRlY3J5cHRFbnZlbG9wZSxcbiAgZGVyaXZlUnVuUGF5bG9hZEtleXMsXG4gIGVuY3J5cHQgYXMgZW5jcnlwdEVudmVsb3BlLFxuICBpc1J1blBheWxvYWRLZXlzLFxuICBpc1NlYWxUYXJnZXQsXG4gIHR5cGUgUGF5bG9hZEtleSxcbiAgdHlwZSBSdW5QYXlsb2FkS2V5cyxcbiAgcnVuUGF5bG9hZEtleXMsXG4gIHR5cGUgU2VhbFRhcmdldCxcbiAgc2VhbFRvLFxufSBmcm9tICcuL3NlcmlhbGl6YXRpb24vZW5jcnlwdGlvbi5qcyc7XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gRm9ybWF0IHByZWZpeCBjb25zdGFudHMgYW5kIGVuY29kaW5nL2RlY29kaW5nXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuZXhwb3J0IGNvbnN0IFNlcmlhbGl6YXRpb25Gb3JtYXQgPSB7XG4gIC8qKiBkZXZhbHVlIHN0cmluZ2lmeS9wYXJzZSB3aXRoIFRleHRFbmNvZGVyL1RleHREZWNvZGVyICovXG4gIERFVkFMVUVfVjE6ICdkZXZsJyxcbiAgLyoqIEVuY3J5cHRlZCBwYXlsb2FkIChpbm5lciBwYXlsb2FkIGhhcyBpdHMgb3duIGZvcm1hdCBwcmVmaXggYWZ0ZXIgZGVjcnlwdGlvbikgKi9cbiAgRU5DUllQVEVEOiAnZW5jcicsXG4gIC8qKlxuICAgKiBTZWFsZWQgcGF5bG9hZDogYXN5bW1ldHJpY2FsbHkgZW5jcnlwdGVkIHRvIGEgcnVuJ3MgWDI1NTE5IHB1YmxpYyBrZXlcbiAgICogKGlubmVyIHBheWxvYWQgaGFzIGl0cyBvd24gZm9ybWF0IHByZWZpeCBhZnRlciBvcGVuaW5nKS5cbiAgICpcbiAgICogV3JpdHRlbiBieSBjcm9zcy1ydW4gd3JpdGVycyB0aGF0IGhvbGQgb25seSB0aGUgcmVjaXBpZW50IHJ1bidzIHB1YmxpY1xuICAgKiBrZXkuIE9wZW5pbmcgaXQgcmVxdWlyZXMgdGhlIHJ1bidzIHByaXZhdGUgc2NhbGFyIHJhdGhlciB0aGFuIHRoZVxuICAgKiBzeW1tZXRyaWMgcGVyLXJ1biBrZXksIHNvIG8xMXkgZGlzcGxheSB0cmVhdHMgaXQgYXMgY2lwaGVydGV4dCB2aWFcbiAgICoge0BsaW5rIGlzRW5jcnlwdGVkRGF0YX0gYnV0IHtAbGluayBoeWRyYXRlRGF0YVdpdGhLZXl9IGRvZXMgbm90IGF0dGVtcHRcbiAgICogYW4gQUVTLUdDTSBkZWNyeXB0IG9uIGl0LlxuICAgKi9cbiAgU0VBTEVEOiAnZW5jcCcsXG4gIC8qKiBHemlwLWNvbXByZXNzZWQgcGF5bG9hZCAoaW5uZXIgcGF5bG9hZCBoYXMgaXRzIG93biBmb3JtYXQgcHJlZml4IGFmdGVyIGRlY29tcHJlc3Npb24pICovXG4gIEdaSVA6ICdnemlwJyxcbiAgLyoqIFpzdGFuZGFyZC1jb21wcmVzc2VkIHBheWxvYWQgKGlubmVyIHBheWxvYWQgaGFzIGl0cyBvd24gZm9ybWF0IHByZWZpeCBhZnRlciBkZWNvbXByZXNzaW9uKSAqL1xuICBaU1REOiAnenN0ZCcsXG59IGFzIGNvbnN0O1xuXG5leHBvcnQgdHlwZSBTZXJpYWxpemF0aW9uRm9ybWF0VHlwZSA9XG4gICh0eXBlb2YgU2VyaWFsaXphdGlvbkZvcm1hdClba2V5b2YgdHlwZW9mIFNlcmlhbGl6YXRpb25Gb3JtYXRdO1xuXG4vKiogTGVuZ3RoIG9mIHRoZSBmb3JtYXQgcHJlZml4IGluIGJ5dGVzICovXG5jb25zdCBGT1JNQVRfUFJFRklYX0xFTkdUSCA9IDQ7XG5cbmNvbnN0IGZvcm1hdEVuY29kZXIgPSBuZXcgVGV4dEVuY29kZXIoKTtcbmNvbnN0IGZvcm1hdERlY29kZXIgPSBuZXcgVGV4dERlY29kZXIoKTtcblxuLyoqXG4gKiBFbmNvZGUgYSBwYXlsb2FkIHdpdGggYSBmb3JtYXQgcHJlZml4LlxuICovXG5leHBvcnQgZnVuY3Rpb24gZW5jb2RlV2l0aEZvcm1hdFByZWZpeChcbiAgZm9ybWF0OiBTZXJpYWxpemF0aW9uRm9ybWF0VHlwZSxcbiAgcGF5bG9hZDogVWludDhBcnJheSB8IHVua25vd25cbik6IFVpbnQ4QXJyYXkgfCB1bmtub3duIHtcbiAgaWYgKCEocGF5bG9hZCBpbnN0YW5jZW9mIFVpbnQ4QXJyYXkpKSB7XG4gICAgcmV0dXJuIHBheWxvYWQ7XG4gIH1cblxuICBjb25zdCBwcmVmaXhCeXRlcyA9IGZvcm1hdEVuY29kZXIuZW5jb2RlKGZvcm1hdCk7XG4gIGlmIChwcmVmaXhCeXRlcy5sZW5ndGggIT09IEZPUk1BVF9QUkVGSVhfTEVOR1RIKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgYEZvcm1hdCBpZGVudGlmaWVyIG11c3QgYmUgZXhhY3RseSAke0ZPUk1BVF9QUkVGSVhfTEVOR1RIfSBBU0NJSSBjaGFyYWN0ZXJzLCBnb3QgXCIke2Zvcm1hdH1cIiAoJHtwcmVmaXhCeXRlcy5sZW5ndGh9IGJ5dGVzKWBcbiAgICApO1xuICB9XG5cbiAgY29uc3QgcmVzdWx0ID0gbmV3IFVpbnQ4QXJyYXkoRk9STUFUX1BSRUZJWF9MRU5HVEggKyBwYXlsb2FkLmxlbmd0aCk7XG4gIHJlc3VsdC5zZXQocHJlZml4Qnl0ZXMsIDApO1xuICByZXN1bHQuc2V0KHBheWxvYWQsIEZPUk1BVF9QUkVGSVhfTEVOR1RIKTtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuLyoqXG4gKiBEZWNvZGUgYSBmb3JtYXQtcHJlZml4ZWQgcGF5bG9hZC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRlY29kZUZvcm1hdFByZWZpeChkYXRhOiBVaW50OEFycmF5IHwgdW5rbm93bik6IHtcbiAgZm9ybWF0OiBTZXJpYWxpemF0aW9uRm9ybWF0VHlwZTtcbiAgcGF5bG9hZDogVWludDhBcnJheTtcbn0ge1xuICBpZiAoIShkYXRhIGluc3RhbmNlb2YgVWludDhBcnJheSkpIHtcbiAgICByZXR1cm4ge1xuICAgICAgZm9ybWF0OiBTZXJpYWxpemF0aW9uRm9ybWF0LkRFVkFMVUVfVjEsXG4gICAgICBwYXlsb2FkOiBuZXcgVGV4dEVuY29kZXIoKS5lbmNvZGUoSlNPTi5zdHJpbmdpZnkoZGF0YSkpLFxuICAgIH07XG4gIH1cblxuICBpZiAoZGF0YS5sZW5ndGggPCBGT1JNQVRfUFJFRklYX0xFTkdUSCkge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgIGBEYXRhIHRvbyBzaG9ydCB0byBjb250YWluIGZvcm1hdCBwcmVmaXg6IGV4cGVjdGVkIGF0IGxlYXN0ICR7Rk9STUFUX1BSRUZJWF9MRU5HVEh9IGJ5dGVzLCBnb3QgJHtkYXRhLmxlbmd0aH1gXG4gICAgKTtcbiAgfVxuXG4gIGNvbnN0IHByZWZpeEJ5dGVzID0gZGF0YS5zdWJhcnJheSgwLCBGT1JNQVRfUFJFRklYX0xFTkdUSCk7XG4gIGNvbnN0IGZvcm1hdCA9IGZvcm1hdERlY29kZXIuZGVjb2RlKHByZWZpeEJ5dGVzKTtcblxuICBjb25zdCBrbm93bkZvcm1hdHMgPSBPYmplY3QudmFsdWVzKFNlcmlhbGl6YXRpb25Gb3JtYXQpIGFzIHN0cmluZ1tdO1xuICBpZiAoIWtub3duRm9ybWF0cy5pbmNsdWRlcyhmb3JtYXQpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgYFVua25vd24gc2VyaWFsaXphdGlvbiBmb3JtYXQ6IFwiJHtmb3JtYXR9XCIuIEtub3duIGZvcm1hdHM6ICR7a25vd25Gb3JtYXRzLmpvaW4oJywgJyl9YFxuICAgICk7XG4gIH1cblxuICBjb25zdCBwYXlsb2FkID0gZGF0YS5zdWJhcnJheShGT1JNQVRfUFJFRklYX0xFTkdUSCk7XG4gIHJldHVybiB7IGZvcm1hdDogZm9ybWF0IGFzIFNlcmlhbGl6YXRpb25Gb3JtYXRUeXBlLCBwYXlsb2FkIH07XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gRW5jcnlwdGVkIGRhdGEgZGV0ZWN0aW9uXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuLyoqXG4gKiBQbGFjZWhvbGRlciBzdHJpbmcgZGlzcGxheWVkIHdoZW4gZGF0YSBpcyBlbmNyeXB0ZWQgYW5kIGRlY3J5cHRpb25cbiAqIGhhcyBub3QgYmVlbiByZXF1ZXN0ZWQuIFVzZWQgYnkgYm90aCBDTEkgYW5kIHdlYiBvMTF5LlxuICovXG5leHBvcnQgY29uc3QgRU5DUllQVEVEX1BMQUNFSE9MREVSID0gJ1xcdXsxRjUxMn0gRW5jcnlwdGVkJztcblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBFeHBpcmVkIGRhdGEgZGV0ZWN0aW9uXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuLyoqXG4gKiBDaGVjayBpZiBhIHBsYWluIG9iamVjdCBpcyBgeyBleHBpcmVkQXQ6IFwiPElTTyBkYXRlPlwiIH1gOiBhIHNpbmdsZS1rZXlcbiAqIG9iamVjdCB3aXRoIGEgc3RyaW5nIGBleHBpcmVkQXRgIHZhbHVlLlxuICovXG5mdW5jdGlvbiBpc0V4cGlyZWRPYmplY3QoZGF0YTogdW5rbm93bik6IGRhdGEgaXMgeyBleHBpcmVkQXQ6IHN0cmluZyB9IHtcbiAgaWYgKGRhdGEgPT09IG51bGwgfHwgdHlwZW9mIGRhdGEgIT09ICdvYmplY3QnIHx8IEFycmF5LmlzQXJyYXkoZGF0YSkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKGRhdGEpO1xuICByZXR1cm4gKFxuICAgIGtleXMubGVuZ3RoID09PSAxICYmXG4gICAga2V5c1swXSA9PT0gJ2V4cGlyZWRBdCcgJiZcbiAgICB0eXBlb2YgKGRhdGEgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4pLmV4cGlyZWRBdCA9PT0gJ3N0cmluZydcbiAgKTtcbn1cblxuLyoqXG4gKiBDaGVjayBpZiBhIGh5ZHJhdGVkIHZhbHVlIGlzIGFuIGV4cGlyZWQgZGF0YSBzdHViIGZyb20gdGhlIHNlcnZlci5cbiAqXG4gKiBUaGUgc2VydmVyIHJlcGxhY2VzIGV4cGlyZWQgcmVmIGZpZWxkcyB3aXRoIGEgZGV2YWx1ZS1lbmNvZGVkIHN0dWJcbiAqIChgbWFrZUV4cGlyZWRTdHViYCkgdGhhdCBkZXNlcmlhbGl6ZXMgdG8gYFt7IGV4cGlyZWRBdDogXCI8SVNPIGRhdGU+XCIgfV1gXG4gKiBhZnRlciBgdW5mbGF0dGVuYCAoYXJyYXktd3JhcHBlZCBkdWUgdG8gYmFja3dhcmRzLWNvbXBhdGlibGUgZW5jb2RpbmcpLlxuICogQWxzbyBtYXRjaGVzIHRoZSB1bndyYXBwZWQgYHsgZXhwaXJlZEF0OiBcIi4uLlwiIH1gIGZvcm0gZm9yIHJvYnVzdG5lc3MuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0V4cGlyZWRTdHViKGRhdGE6IHVua25vd24pOiBib29sZWFuIHtcbiAgLy8gRGlyZWN0IG9iamVjdCBmb3JtOiB7IGV4cGlyZWRBdDogXCIuLi5cIiB9XG4gIGlmIChpc0V4cGlyZWRPYmplY3QoZGF0YSkpIHJldHVybiB0cnVlO1xuICAvLyBBcnJheS13cmFwcGVkIGZvcm0gZnJvbSBkZXZhbHVlIHVuZmxhdHRlbjogW3sgZXhwaXJlZEF0OiBcIi4uLlwiIH1dXG4gIGlmIChBcnJheS5pc0FycmF5KGRhdGEpICYmIGRhdGEubGVuZ3RoID09PSAxICYmIGlzRXhwaXJlZE9iamVjdChkYXRhWzBdKSkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIHJldHVybiBmYWxzZTtcbn1cblxuLyoqXG4gKiBDaGVjayBpZiBhIGJpbmFyeSB2YWx1ZSBpcyBjaXBoZXJ0ZXh0OiBlaXRoZXIgYSBzeW1tZXRyaWNhbGx5IGVuY3J5cHRlZFxuICogcGF5bG9hZCAoJ2VuY3InKSBvciBhIHNlYWxlZCBjcm9zcy1ydW4gcGF5bG9hZCAoJ2VuY3AnKS5cbiAqXG4gKiBUaGlzIGlzIHRoZSBwcmVkaWNhdGUgZGlzcGxheSBsYXllcnMgd2FudDogYm90aCBzY2hlbWVzIGFyZSBvcGFxdWUgYnl0ZXNcbiAqIHRoYXQgbXVzdCBub3QgYmUgZmVkIHRvIHRoZSBkZXZhbHVlIHBhcnNlciwgYW5kIGJvdGggcmVuZGVyIGFzIHRoZSBzYW1lXG4gKiBcIkVuY3J5cHRlZFwiIGFmZm9yZGFuY2UgaW4gdGhlIENMSSBhbmQgd2ViIFVJLiBVc2Uge0BsaW5rIGlzU2VhbGVkRGF0YX0gd2hlblxuICogdGhlICpzY2hlbWUqIG1hdHRlcnMsIG5vdGFibHkgd2hlbiBjaG9vc2luZyBhIGRlY3J5cHRpb24gcGF0aCwgc2luY2UgYVxuICogc2VhbGVkIHBheWxvYWQgbmVlZHMgdGhlIHJ1bidzIHByaXZhdGUgc2NhbGFyIHJhdGhlciB0aGFuIGl0cyBzeW1tZXRyaWMga2V5LlxuICpcbiAqIEJyb3dzZXItc2FmZTogZG9lcyBub3QgZGVwZW5kIG9uIHRoZSBmdWxsIHNlcmlhbGl6YXRpb24gbW9kdWxlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNFbmNyeXB0ZWREYXRhKGRhdGE6IHVua25vd24pOiBib29sZWFuIHtcbiAgaWYgKCEoZGF0YSBpbnN0YW5jZW9mIFVpbnQ4QXJyYXkpIHx8IGRhdGEubGVuZ3RoIDwgRk9STUFUX1BSRUZJWF9MRU5HVEgpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgY29uc3QgcHJlZml4ID0gZm9ybWF0RGVjb2Rlci5kZWNvZGUoZGF0YS5zdWJhcnJheSgwLCBGT1JNQVRfUFJFRklYX0xFTkdUSCkpO1xuICByZXR1cm4gKFxuICAgIHByZWZpeCA9PT0gU2VyaWFsaXphdGlvbkZvcm1hdC5FTkNSWVBURUQgfHxcbiAgICBwcmVmaXggPT09IFNlcmlhbGl6YXRpb25Gb3JtYXQuU0VBTEVEXG4gICk7XG59XG5cbi8qKlxuICogQ2hlY2sgaWYgYSBiaW5hcnkgdmFsdWUgaGFzIHRoZSAnZW5jcCcgZm9ybWF0IHByZWZpeCwgaW5kaWNhdGluZyBhIHNlYWxlZFxuICogKGFzeW1tZXRyaWNhbGx5IGVuY3J5cHRlZCkgY3Jvc3MtcnVuIHBheWxvYWQuXG4gKlxuICogQnJvd3Nlci1zYWZlOiBkb2VzIG5vdCBkZXBlbmQgb24gdGhlIGZ1bGwgc2VyaWFsaXphdGlvbiBtb2R1bGUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc1NlYWxlZERhdGEoZGF0YTogdW5rbm93bik6IGJvb2xlYW4ge1xuICBpZiAoIShkYXRhIGluc3RhbmNlb2YgVWludDhBcnJheSkgfHwgZGF0YS5sZW5ndGggPCBGT1JNQVRfUFJFRklYX0xFTkdUSCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBjb25zdCBwcmVmaXggPSBmb3JtYXREZWNvZGVyLmRlY29kZShkYXRhLnN1YmFycmF5KDAsIEZPUk1BVF9QUkVGSVhfTEVOR1RIKSk7XG4gIHJldHVybiBwcmVmaXggPT09IFNlcmlhbGl6YXRpb25Gb3JtYXQuU0VBTEVEO1xufVxuXG4vKipcbiAqIENoZWNrIGlmIGEgYmluYXJ5IHZhbHVlIGhhcyBhIGNvbXByZXNzaW9uIGZvcm1hdCBwcmVmaXggKCdnemlwJyBvciAnenN0ZCcpLlxuICogQnJvd3Nlci1zYWZlOiBkb2VzIG5vdCBkZXBlbmQgb24gdGhlIGZ1bGwgc2VyaWFsaXphdGlvbiBtb2R1bGUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0NvbXByZXNzZWREYXRhKGRhdGE6IHVua25vd24pOiBib29sZWFuIHtcbiAgaWYgKCEoZGF0YSBpbnN0YW5jZW9mIFVpbnQ4QXJyYXkpIHx8IGRhdGEubGVuZ3RoIDwgRk9STUFUX1BSRUZJWF9MRU5HVEgpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgY29uc3QgcHJlZml4ID0gZm9ybWF0RGVjb2Rlci5kZWNvZGUoZGF0YS5zdWJhcnJheSgwLCBGT1JNQVRfUFJFRklYX0xFTkdUSCkpO1xuICByZXR1cm4gKFxuICAgIHByZWZpeCA9PT0gU2VyaWFsaXphdGlvbkZvcm1hdC5HWklQIHx8IHByZWZpeCA9PT0gU2VyaWFsaXphdGlvbkZvcm1hdC5aU1REXG4gICk7XG59XG5cbmludGVyZmFjZSBOb2RlWmxpYkRlY29kZSB7XG4gIGd1bnppcFN5bmM/OiAoZGF0YTogVWludDhBcnJheSkgPT4gVWludDhBcnJheTtcbiAgenN0ZERlY29tcHJlc3NTeW5jPzogKGRhdGE6IFVpbnQ4QXJyYXkpID0+IFVpbnQ4QXJyYXk7XG59XG5cbi8qKlxuICogUmVzb2x2ZSBgbm9kZTp6bGliYCB2aWEgYHByb2Nlc3MuZ2V0QnVpbHRpbk1vZHVsZWA6IG5vIHN0YXRpYyBOb2RlXG4gKiBkZXBlbmRlbmN5LCBpbnZpc2libGUgdG8gYnJvd3NlciBidW5kbGVycy4gUmV0dXJucyB1bmRlZmluZWQgb2ZmIE5vZGUuXG4gKi9cbmZ1bmN0aW9uIGdldE5vZGVabGliKCk6IE5vZGVabGliRGVjb2RlIHwgdW5kZWZpbmVkIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gKFxuICAgICAgZ2xvYmFsVGhpcyBhcyB7XG4gICAgICAgIHByb2Nlc3M/OiB7IGdldEJ1aWx0aW5Nb2R1bGU/OiAoaWQ6IHN0cmluZykgPT4gTm9kZVpsaWJEZWNvZGUgfTtcbiAgICAgIH1cbiAgICApLnByb2Nlc3M/LmdldEJ1aWx0aW5Nb2R1bGU/Lignbm9kZTp6bGliJyk7XG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbn1cblxuLyoqXG4gKiBTeW5jaHJvbm91c2x5IGRlY29tcHJlc3MgYSBgZ3ppcGAvYHpzdGRgIHBheWxvYWQgd2hlbiBydW5uaW5nIG9uIE5vZGUuanMuXG4gKlxuICogUmV0dXJucyBgdW5kZWZpbmVkYCB3aGVuIHN5bmMgZGVjb21wcmVzc2lvbiBpc24ndCBhdmFpbGFibGUgKGUuZy4gaW4gdGhlXG4gKiBicm93c2VyLCBvciB6c3RkIG9uIE5vZGUgPCAyMi4xNSk7IGNhbGxlcnMgZmFsbCBiYWNrIHRvIGxlYXZpbmcgdGhlIGRhdGFcbiAqIHVuLWh5ZHJhdGVkICh0aGUgYXN5bmMgYGh5ZHJhdGVEYXRhV2l0aEtleWAgcGF0aCBoYW5kbGVzIGRlY29tcHJlc3Npb24gaW5cbiAqIGJyb3dzZXJzIHZpYSBgRGVjb21wcmVzc2lvblN0cmVhbWAgLyBhIHJlZ2lzdGVyZWQgenN0ZCBkZWNvZGVyKS5cbiAqL1xuZnVuY3Rpb24gZGVjb21wcmVzc1N5bmNJZkF2YWlsYWJsZShcbiAgZm9ybWF0OiBzdHJpbmcsXG4gIHBheWxvYWQ6IFVpbnQ4QXJyYXlcbik6IFVpbnQ4QXJyYXkgfCB1bmRlZmluZWQge1xuICB0cnkge1xuICAgIGNvbnN0IHpsaWIgPSBnZXROb2RlWmxpYigpO1xuICAgIGlmIChmb3JtYXQgPT09IFNlcmlhbGl6YXRpb25Gb3JtYXQuR1pJUCAmJiB6bGliPy5ndW56aXBTeW5jKSB7XG4gICAgICByZXR1cm4gbmV3IFVpbnQ4QXJyYXkoemxpYi5ndW56aXBTeW5jKHBheWxvYWQpKTtcbiAgICB9XG4gICAgaWYgKGZvcm1hdCA9PT0gU2VyaWFsaXphdGlvbkZvcm1hdC5aU1REICYmIHpsaWI/LnpzdGREZWNvbXByZXNzU3luYykge1xuICAgICAgcmV0dXJuIG5ldyBVaW50OEFycmF5KHpsaWIuenN0ZERlY29tcHJlc3NTeW5jKHBheWxvYWQpKTtcbiAgICB9XG4gIH0gY2F0Y2gge1xuICAgIC8vIEZhbGwgdGhyb3VnaDogdHJlYXQgYXMgdW5hdmFpbGFibGVcbiAgfVxuICByZXR1cm4gdW5kZWZpbmVkO1xufVxuXG4vKipcbiAqIEJyb3dzZXIgenN0ZCBkZWNvZGVyLCByZWdpc3RlcmVkIGJ5IHRoZSBvMTF5IGhvc3QgKHdlYi1zaGFyZWQpIHNpbmNlIHRoZVxuICogV2ViIGBEZWNvbXByZXNzaW9uU3RyZWFtYCBoYXMgbm8genN0ZCBzdXBwb3J0LiBOb2RlIGRlY29kZXMgdmlhIGBub2RlOnpsaWJgXG4gKiBhbmQgbmV2ZXIgbmVlZHMgdGhpcy4gU2VlIGByZWdpc3RlclpzdGREZWNvZGVyYC5cbiAqL1xuLy8gT24gYGdsb2JhbFRoaXNgIChzZWUgYGdsb2JhbFNpbmdsZXRvbmApOiB0aGUgbzExeSBob3N0IHJlZ2lzdGVycyB0aGUgZGVjb2RlclxuLy8gb25jZSwgYW5kIGEgcGVyLWNvcHkgc2xvdCB3b3VsZCBsZWF2ZSBldmVyeSBvdGhlciBjb3B5IG9mIHRoaXMgbW9kdWxlIHdpdGhvdXRcbi8vIG9uZS5cbmNvbnN0IHpzdGQgPSBnbG9iYWxTaW5nbGV0b24oJ0B3b3JrZmxvdy9jb3JlLy96c3RkLmRlY29kZXInLCAxLCAoKSA9PiAoe1xuICBkZWNvZGVyOiB1bmRlZmluZWQgYXNcbiAgICB8ICgocGF5bG9hZDogVWludDhBcnJheSkgPT4gUHJvbWlzZTxVaW50OEFycmF5PilcbiAgICB8IHVuZGVmaW5lZCxcbn0pKTtcblxuLyoqXG4gKiBSZWdpc3RlciBhIGJyb3dzZXIgenN0ZCBkZWNvZGVyIChlLmcuIGEgV0FTTS1iYWNrZWQgb25lKS4gVGhlIHdlYiBvMTF5IFVJXG4gKiBjYWxscyB0aGlzIGF0IGluaXQgc28gYGh5ZHJhdGVEYXRhV2l0aEtleWAgY2FuIGluZmxhdGUgenN0ZCBwYXlsb2FkcyBhZnRlclxuICogY2xpZW50LXNpZGUgZGVjcnlwdGlvbi4gTm9kZSByZWFkZXJzIHVzZSBgbm9kZTp6bGliYCBhbmQgaWdub3JlIHRoaXMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZWdpc3RlclpzdGREZWNvZGVyKFxuICBkZWNvZGVyOiAocGF5bG9hZDogVWludDhBcnJheSkgPT4gUHJvbWlzZTxVaW50OEFycmF5PlxuKTogdm9pZCB7XG4gIHpzdGQuZGVjb2RlciA9IGRlY29kZXI7XG59XG5cbi8qKlxuICogQXN5bmNocm9ub3VzbHkgZGVjb21wcmVzcyBhIGBnemlwYC9genN0ZGAgcGF5bG9hZC5cbiAqIC0gZ3ppcDogd2ViLXN0YW5kYXJkIGBEZWNvbXByZXNzaW9uU3RyZWFtYCAoTm9kZSAxOCssIGJyb3dzZXJzLCBlZGdlKS5cbiAqIC0genN0ZDogYG5vZGU6emxpYmAgd2hlbiBvbiBOb2RlLCBlbHNlIHRoZSByZWdpc3RlcmVkIGJyb3dzZXIgZGVjb2Rlci5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gZGVjb21wcmVzc0FzeW5jKFxuICBmb3JtYXQ6IHN0cmluZyxcbiAgcGF5bG9hZDogVWludDhBcnJheVxuKTogUHJvbWlzZTxVaW50OEFycmF5PiB7XG4gIGlmIChmb3JtYXQgPT09IFNlcmlhbGl6YXRpb25Gb3JtYXQuWlNURCkge1xuICAgIGNvbnN0IHN5bmMgPSBkZWNvbXByZXNzU3luY0lmQXZhaWxhYmxlKGZvcm1hdCwgcGF5bG9hZCk7XG4gICAgaWYgKHN5bmMpIHJldHVybiBzeW5jO1xuICAgIGlmICh6c3RkLmRlY29kZXIpIHJldHVybiB6c3RkLmRlY29kZXIocGF5bG9hZCk7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgJ3pzdGQtY29tcHJlc3NlZCB3b3JrZmxvdyBkYXRhIGVuY291bnRlcmVkIGJ1dCBubyB6c3RkIGRlY29kZXIgaXMgJyArXG4gICAgICAgICdhdmFpbGFibGUuIE5vZGUuanMgMjIuMTUrIGRlY29kZXMgbmF0aXZlbHk7IGluIHRoZSBicm93c2VyIHJlZ2lzdGVyICcgK1xuICAgICAgICAnb25lIHZpYSByZWdpc3RlclpzdGREZWNvZGVyICh0aGUgd2ViIG8xMXkgcGFja2FnZSBkb2VzIHRoaXMpLidcbiAgICApO1xuICB9XG5cbiAgY29uc3QgdHJhbnNmb3JtID0gbmV3IERlY29tcHJlc3Npb25TdHJlYW0oJ2d6aXAnKTtcbiAgY29uc3Qgd3JpdGVyID0gdHJhbnNmb3JtLndyaXRhYmxlLmdldFdyaXRlcigpO1xuICBjb25zdCB3cml0ZVByb21pc2UgPSB3cml0ZXIud3JpdGUocGF5bG9hZCkudGhlbigoKSA9PiB3cml0ZXIuY2xvc2UoKSk7XG4gIHdyaXRlUHJvbWlzZS5jYXRjaCgoKSA9PiB7fSk7XG4gIGNvbnN0IGNodW5rczogVWludDhBcnJheVtdID0gW107XG4gIGxldCB0b3RhbCA9IDA7XG4gIGNvbnN0IHJlYWRlciA9IHRyYW5zZm9ybS5yZWFkYWJsZS5nZXRSZWFkZXIoKTtcbiAgZm9yICg7Oykge1xuICAgIGNvbnN0IHsgZG9uZSwgdmFsdWUgfSA9IGF3YWl0IHJlYWRlci5yZWFkKCk7XG4gICAgaWYgKGRvbmUpIGJyZWFrO1xuICAgIGNodW5rcy5wdXNoKHZhbHVlKTtcbiAgICB0b3RhbCArPSB2YWx1ZS5sZW5ndGg7XG4gIH1cbiAgYXdhaXQgd3JpdGVQcm9taXNlO1xuICBjb25zdCBvdXQgPSBuZXcgVWludDhBcnJheSh0b3RhbCk7XG4gIGxldCBvZmZzZXQgPSAwO1xuICBmb3IgKGNvbnN0IGNodW5rIG9mIGNodW5rcykge1xuICAgIG91dC5zZXQoY2h1bmssIG9mZnNldCk7XG4gICAgb2Zmc2V0ICs9IGNodW5rLmxlbmd0aDtcbiAgfVxuICByZXR1cm4gb3V0O1xufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIFJldml2ZXJzIHR5cGUgKHNoYXJlZCBhY3Jvc3MgYWxsIGVudmlyb25tZW50cylcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4vKipcbiAqIEEgbWFwIG9mIHR5cGUgbmFtZSDihpIgcmV2aXZlciBmdW5jdGlvbiwgdXNlZCBieSBkZXZhbHVlJ3MgYHBhcnNlYC9gdW5mbGF0dGVuYC5cbiAqIEVhY2ggZW52aXJvbm1lbnQgKHJ1bnRpbWUsIHdlYiwgQ0xJKSBwcm92aWRlcyBpdHMgb3duIHNldC5cbiAqL1xuZXhwb3J0IHR5cGUgUmV2aXZlcnMgPSBSZWNvcmQ8c3RyaW5nLCAodmFsdWU6IGFueSkgPT4gYW55PjtcblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBHZW5lcmljIGh5ZHJhdGUvZGVoeWRyYXRlIGRpc3BhdGNoXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuLyoqXG4gKiBIeWRyYXRlIChkZXNlcmlhbGl6ZSkgYSB2YWx1ZSB0aGF0IHdhcyBzdG9yZWQgaW4gdGhlIGRhdGFiYXNlLlxuICpcbiAqIEhhbmRsZXMgZm91ciBkYXRhIHNoYXBlczpcbiAqIDEuIGBVaW50OEFycmF5YCB3aXRoICdlbmNyJyBwcmVmaXgg4oaSIHJldHVybmVkIGFzLWlzIChlbmNyeXB0ZWQsIG5vdCB5ZXQgZGVjcnlwdGVkKVxuICogMi4gYFVpbnQ4QXJyYXlgIHdpdGggYSBmb3JtYXQgcHJlZml4IChzcGVjVmVyc2lvbiAyKykg4oaSIGRlY29kZSBwcmVmaXgsIHBhcnNlXG4gKiAzLiBgQXJyYXlgIChsZWdhY3kgc3BlY1ZlcnNpb24gMSwgXCJyZXZpdmVkIGRldmFsdWVcIikg4oaSIHVuZmxhdHRlblxuICogNC4gT3RoZXIgKGFscmVhZHkgYSBwbGFpbiBKUyB2YWx1ZSkg4oaSIHJldHVybiBhcy1pc1xuICpcbiAqIEVuY3J5cHRlZCBkYXRhIGlzIGludGVudGlvbmFsbHkgbGVmdCBhcyBhIGBVaW50OEFycmF5YCBzbyB0aGF0IGNvbnN1bWVyc1xuICogKENMSSwgd2ViIFVJKSBjYW4gZGV0ZWN0IGl0IHdpdGggYGlzRW5jcnlwdGVkRGF0YSgpYCBhbmQgZGVjaWRlIGhvdyB0b1xuICogaGFuZGxlIGl0OiB0aGUgQ0xJIHJlcGxhY2VzIGl0IHdpdGggYSBzdHlsZWQgcGxhY2Vob2xkZXIsIHRoZSB3ZWIgVUlcbiAqIHJlbmRlcnMgYW4gXCJFbmNyeXB0ZWRcIiBjYXJkIHdpdGggYSBEZWNyeXB0IGJ1dHRvbiB0aGF0IHRyaWdnZXJzXG4gKiBjbGllbnQtc2lkZSBkZWNyeXB0aW9uIG9uIGRlbWFuZC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGh5ZHJhdGVEYXRhKHZhbHVlOiB1bmtub3duLCByZXZpdmVyczogUmV2aXZlcnMpOiB1bmtub3duIHtcbiAgaWYgKHZhbHVlIGluc3RhbmNlb2YgVWludDhBcnJheSkge1xuICAgIC8vIEVuY3J5cHRlZCBkYXRhIHBhc3NlcyB0aHJvdWdoIHVudG91Y2hlZDogbzExeSBsYXllcnMgZGV0ZWN0IGl0IHdpdGhcbiAgICAvLyBpc0VuY3J5cHRlZERhdGEoKSBhbmQgaGFuZGxlIGRpc3BsYXkgKHdlYjogbmFtZWQgY29uc3RydWN0b3Igb2JqZWN0LFxuICAgIC8vIENMSTogRW5jcnlwdGVkRGF0YVJlZiB3aXRoIHV0aWwuaW5zcGVjdC5jdXN0b20pLlxuICAgIGlmIChpc0VuY3J5cHRlZERhdGEodmFsdWUpKSB7XG4gICAgICByZXR1cm4gdmFsdWU7XG4gICAgfVxuXG4gICAgY29uc3QgeyBmb3JtYXQsIHBheWxvYWQgfSA9IGRlY29kZUZvcm1hdFByZWZpeCh2YWx1ZSk7XG4gICAgaWYgKGZvcm1hdCA9PT0gU2VyaWFsaXphdGlvbkZvcm1hdC5ERVZBTFVFX1YxKSB7XG4gICAgICBjb25zdCBzdHIgPSBuZXcgVGV4dERlY29kZXIoKS5kZWNvZGUocGF5bG9hZCk7XG4gICAgICByZXR1cm4gcGFyc2Uoc3RyLCByZXZpdmVycyk7XG4gICAgfVxuICAgIGlmIChcbiAgICAgIGZvcm1hdCA9PT0gU2VyaWFsaXphdGlvbkZvcm1hdC5HWklQIHx8XG4gICAgICBmb3JtYXQgPT09IFNlcmlhbGl6YXRpb25Gb3JtYXQuWlNURFxuICAgICkge1xuICAgICAgLy8gQ29tcHJlc3NlZCBwYXlsb2FkOiBkZWNvbXByZXNzIHN5bmNocm9ub3VzbHkgd2hlbiBydW5uaW5nIG9uXG4gICAgICAvLyBOb2RlLmpzIChDTEksIHNlcnZlciBvMTF5KS4gSW4gYnJvd3NlcnMgdGhlcmUgaXMgbm8gc3luYyBjb2RlYztcbiAgICAgIC8vIHBhc3MgdGhlIGRhdGEgdGhyb3VnaCB1bnRvdWNoZWQgKGxpa2UgZW5jcnlwdGVkIGRhdGEpIHNvIGFzeW5jXG4gICAgICAvLyBjb25zdW1lcnMgY2FuIHJvdXRlIGl0IHRocm91Z2ggYGh5ZHJhdGVEYXRhV2l0aEtleWAsIHdoaWNoXG4gICAgICAvLyBkZWNvbXByZXNzZXMgdmlhIERlY29tcHJlc3Npb25TdHJlYW0gLyBhIHJlZ2lzdGVyZWQgenN0ZCBkZWNvZGVyLlxuICAgICAgY29uc3QgaW5mbGF0ZWQgPSBkZWNvbXByZXNzU3luY0lmQXZhaWxhYmxlKGZvcm1hdCwgcGF5bG9hZCk7XG4gICAgICBpZiAoaW5mbGF0ZWQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICB9XG4gICAgICAvLyBUaGUgaW5mbGF0ZWQgYnl0ZXMgY2FycnkgdGhlaXIgb3duIGZvcm1hdCBwcmVmaXggKGUuZy4gJ2RldmwnKVxuICAgICAgcmV0dXJuIGh5ZHJhdGVEYXRhKGluZmxhdGVkLCByZXZpdmVycyk7XG4gICAgfVxuICAgIHRocm93IG5ldyBFcnJvcihgVW5zdXBwb3J0ZWQgc2VyaWFsaXphdGlvbiBmb3JtYXQ6ICR7Zm9ybWF0fWApO1xuICB9XG5cbiAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgcmV0dXJuIHVuZmxhdHRlbih2YWx1ZSwgcmV2aXZlcnMpO1xuICB9XG5cbiAgLy8gQWxyZWFkeSBhIHBsYWluIEpTIHZhbHVlIChlLmcuLCBudW1iZXIsIHN0cmluZywgbnVsbClcbiAgcmV0dXJuIHZhbHVlO1xufVxuXG4vKipcbiAqIEh5ZHJhdGUgYSB2YWx1ZSwgZGVjcnlwdGluZyBpdCBmaXJzdCBpZiBhbiBlbmNyeXB0aW9uIGtleSBpcyBwcm92aWRlZC5cbiAqXG4gKiBUaGlzIGlzIHRoZSBhc3luYyB2ZXJzaW9uIG9mIGBoeWRyYXRlRGF0YWAgdGhhdCBzdXBwb3J0cyB0cmFuc3BhcmVudFxuICogZGVjcnlwdGlvbi4gVXNlZCBieSBvMTF5IHRvb2xpbmcgKHdlYiBVSSwgQ0xJKSB3aGVuIHRoZSB1c2VyIHJlcXVlc3RzXG4gKiBkZWNyeXB0aW9uLlxuICpcbiAqIEBwYXJhbSB2YWx1ZSAtIFRoZSB2YWx1ZSB0byBoeWRyYXRlIChtYXkgYmUgZW5jcnlwdGVkIG9yIHNlYWxlZClcbiAqIEBwYXJhbSByZXZpdmVycyAtIERldmFsdWUgcmV2aXZlcnMgZm9yIGRlc2VyaWFsaXphdGlvblxuICogQHBhcmFtIGtleSAtIFRoZSBydW4ncyBrZXkgbWF0ZXJpYWwuIFBhc3MgYFJ1blBheWxvYWRLZXlzYCAoZnJvbVxuICogICBgZGVyaXZlUnVuUGF5bG9hZEtleXNgKSB0byBvcGVuIGJvdGggc3ltbWV0cmljIChgZW5jcmApIGFuZCBzZWFsZWRcbiAqICAgKGBlbmNwYCkgcGF5bG9hZHM7IGEgYmFyZSBgQ3J5cHRvS2V5YCBvcGVucyBvbmx5IHRoZSBzeW1tZXRyaWMgb25lcy5cbiAqICAgVHlwZWQgYXMgYSByZWFkIGNhcGFiaWxpdHkgc28gYSB3cml0ZS1vbmx5IHNlYWwgdGFyZ2V0ICh3aGljaCBjb3VsZCBvcGVuXG4gKiAgIG5laXRoZXIgc2NoZW1lKSBpcyByZWplY3RlZCBhdCBjb21waWxlIHRpbWUgcmF0aGVyIHRoYW4gZmFpbGluZyBoZXJlLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gaHlkcmF0ZURhdGFXaXRoS2V5KFxuICB2YWx1ZTogdW5rbm93bixcbiAgcmV2aXZlcnM6IFJldml2ZXJzLFxuICBrZXk6IGltcG9ydCgnLi9zZXJpYWxpemF0aW9uL2VuY3J5cHRpb24uanMnKS5EZWNyeXB0aW9uS2V5IHwgdW5kZWZpbmVkXG4pOiBQcm9taXNlPHVua25vd24+IHtcbiAgbGV0IGRhdGEgPSB2YWx1ZTtcbiAgaWYgKGRhdGEgaW5zdGFuY2VvZiBVaW50OEFycmF5ICYmIGlzRW5jcnlwdGVkRGF0YShkYXRhKSAmJiBrZXkpIHtcbiAgICAvLyBFbnZlbG9wZS1hd2FyZSBkZWNyeXB0OiBoYW5kbGVzIGJvdGggYGVuY3JgIChBRVMtR0NNIHVuZGVyIHRoZSBydW4nc1xuICAgIC8vIHN5bW1ldHJpYyBrZXkpIGFuZCBgZW5jcGAgKHNlYWxlZCB0byB0aGUgcnVuJ3MgWDI1NTE5IHB1YmxpYyBrZXkgYnlcbiAgICAvLyBzb21lIG90aGVyIHJ1biksIGRpc3BhdGNoaW5nIG9uIHRoZSBmb3JtYXQgcHJlZml4LlxuICAgIGNvbnN0IHsgZGVjcnlwdCwgaXNSdW5QYXlsb2FkS2V5cyB9ID0gYXdhaXQgaW1wb3J0KFxuICAgICAgJy4vc2VyaWFsaXphdGlvbi9lbmNyeXB0aW9uLmpzJ1xuICAgICk7XG4gICAgLy8gT3BlbmluZyBhIHNlYWxlZCBwYXlsb2FkIG5lZWRzIHRoZSBydW4ncyBwcml2YXRlIHNjYWxhci4gSWYgdGhlIGNhbGxlclxuICAgIC8vIHN1cHBsaWVkIG9ubHkgYSBzeW1tZXRyaWMga2V5LCBsZWF2ZSB0aGUgYnl0ZXMgYXMgY2lwaGVydGV4dCBzbyB0aGUgVUlcbiAgICAvLyBrZWVwcyBzaG93aW5nIGl0cyBcIkVuY3J5cHRlZFwiIGFmZm9yZGFuY2UsIHJhdGhlciB0aGFuIHN1cmZhY2luZyBhXG4gICAgLy8gZGVjcnlwdGlvbiBlcnJvciBmb3Igc29tZXRoaW5nIHRoYXQgd2FzIG5ldmVyIG9wZW5hYmxlIHdpdGggdGhpcyBrZXkuXG4gICAgaWYgKCFpc1NlYWxlZERhdGEoZGF0YSkgfHwgaXNSdW5QYXlsb2FkS2V5cyhrZXkpKSB7XG4gICAgICBkYXRhID0gYXdhaXQgZGVjcnlwdChkYXRhLCBrZXkpO1xuICAgIH1cbiAgfVxuICBpZiAoZGF0YSBpbnN0YW5jZW9mIFVpbnQ4QXJyYXkgJiYgaXNDb21wcmVzc2VkRGF0YShkYXRhKSkge1xuICAgIC8vIERlY29tcHJlc3M6IHN0cmlwIHRoZSBjb2RlYyBwcmVmaXggYW5kIGluZmxhdGUuIGd6aXAgdXNlcyB0aGVcbiAgICAvLyB3ZWItc3RhbmRhcmQgRGVjb21wcmVzc2lvblN0cmVhbSAod29ya3MgaW4gYnJvd3NlcnMpOyB6c3RkIHVzZXNcbiAgICAvLyBub2RlOnpsaWIgb24gTm9kZSBvciB0aGUgcmVnaXN0ZXJlZCBXQVNNIGRlY29kZXIgaW4gdGhlIGJyb3dzZXIuXG4gICAgLy8gVGhlIGluZmxhdGVkIGJ5dGVzIGNhcnJ5IHRoZWlyIG93biBmb3JtYXQgcHJlZml4IChlLmcuICdkZXZsJykuXG4gICAgY29uc3QgeyBmb3JtYXQsIHBheWxvYWQgfSA9IGRlY29kZUZvcm1hdFByZWZpeChkYXRhKTtcbiAgICBkYXRhID0gYXdhaXQgZGVjb21wcmVzc0FzeW5jKGZvcm1hdCwgcGF5bG9hZCk7XG4gIH1cbiAgLy8gRGVsZWdhdGUgdGhlIChkZWNyeXB0ZWQvZGVjb21wcmVzc2VkKSByZXN1bHQgdG8gc3luYyBoeWRyYXRlRGF0YVxuICByZXR1cm4gaHlkcmF0ZURhdGEoZGF0YSwgcmV2aXZlcnMpO1xufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIFNoYXJlZCBtYXJrZXIgdHlwZXMgZm9yIG8xMXkgZGlzcGxheVxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbmNvbnN0IFNUUkVBTV9JRF9QUkVGSVggPSAnc3RybV8nO1xuXG4vKiogTWFya2VyIGZvciBzdHJlYW0gcmVmZXJlbmNlIG9iamVjdHMgcmVuZGVyZWQgYXMgbGlua3MgaW4gdGhlIFVJICovXG5leHBvcnQgY29uc3QgU1RSRUFNX1JFRl9UWVBFID0gJ19fd29ya2Zsb3dfc3RyZWFtX3JlZl9fJztcblxuLyoqIEEgc3RyZWFtIHJlZmVyZW5jZSBmb3IgVUkgZGlzcGxheSAqL1xuZXhwb3J0IGludGVyZmFjZSBTdHJlYW1SZWYge1xuICBfX3R5cGU6IHR5cGVvZiBTVFJFQU1fUkVGX1RZUEU7XG4gIHN0cmVhbUlkOiBzdHJpbmc7XG59XG5cbi8qKiBNYXJrZXIgZm9yIFJ1biByZWZlcmVuY2Ugb2JqZWN0cyByZW5kZXJlZCBhcyBsaW5rcyBpbiB0aGUgVUkgKi9cbmV4cG9ydCBjb25zdCBSVU5fUkVGX1RZUEUgPSAnX193b3JrZmxvd19ydW5fcmVmX18nO1xuXG4vKiogQSBSdW4gcmVmZXJlbmNlIGZvciBVSSBkaXNwbGF5ICovXG5leHBvcnQgaW50ZXJmYWNlIFJ1blJlZiB7XG4gIF9fdHlwZTogdHlwZW9mIFJVTl9SRUZfVFlQRTtcbiAgcnVuSWQ6IHN0cmluZztcbn1cblxuLyoqIENoZWNrIGlmIGEgdmFsdWUgaXMgYSBSdW5SZWYgb2JqZWN0ICovXG5leHBvcnQgY29uc3QgaXNSdW5SZWYgPSAodmFsdWU6IHVua25vd24pOiB2YWx1ZSBpcyBSdW5SZWYgPT4ge1xuICByZXR1cm4gKFxuICAgIHZhbHVlICE9PSBudWxsICYmXG4gICAgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJlxuICAgICdfX3R5cGUnIGluIHZhbHVlICYmXG4gICAgdmFsdWUuX190eXBlID09PSBSVU5fUkVGX1RZUEUgJiZcbiAgICAncnVuSWQnIGluIHZhbHVlICYmXG4gICAgdHlwZW9mIHZhbHVlLnJ1bklkID09PSAnc3RyaW5nJ1xuICApO1xufTtcblxuLyoqIENvbnZlcnQgYSBzZXJpYWxpemVkIFJ1biB2YWx1ZSB0byBhIFJ1blJlZiBmb3IgZGlzcGxheSAqL1xuZXhwb3J0IGNvbnN0IHNlcmlhbGl6ZWRSdW5Ub1J1blJlZiA9ICh2YWx1ZTogeyBydW5JZDogc3RyaW5nIH0pOiBSdW5SZWYgPT4ge1xuICByZXR1cm4geyBfX3R5cGU6IFJVTl9SRUZfVFlQRSwgcnVuSWQ6IHZhbHVlLnJ1bklkIH07XG59O1xuXG4vKiogTWFya2VyIGZvciBjdXN0b20gY2xhc3MgaW5zdGFuY2UgcmVmZXJlbmNlcyAqL1xuZXhwb3J0IGNvbnN0IENMQVNTX0lOU1RBTkNFX1JFRl9UWVBFID0gJ19fd29ya2Zsb3dfY2xhc3NfaW5zdGFuY2VfcmVmX18nO1xuXG4vKipcbiAqIEEgY2xhc3MgaW5zdGFuY2UgcmVmZXJlbmNlIGZvciBvMTF5IGRpc3BsYXkuXG4gKlxuICogQnJvd3Nlci1zYWZlIGJhc2UgY2xhc3M6IG5vIGB1dGlsLmluc3BlY3QuY3VzdG9tYC4gRW52aXJvbm1lbnQtc3BlY2lmaWNcbiAqIHJlbmRlcmluZyAoQ0xJIGluc3BlY3QsIHdlYiBjb21wb25lbnQpIGlzIGhhbmRsZWQgYnkgZWFjaCBjb25zdW1lci5cbiAqL1xuZXhwb3J0IGNsYXNzIENsYXNzSW5zdGFuY2VSZWYge1xuICByZWFkb25seSBfX3R5cGUgPSBDTEFTU19JTlNUQU5DRV9SRUZfVFlQRTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwdWJsaWMgcmVhZG9ubHkgY2xhc3NOYW1lOiBzdHJpbmcsXG4gICAgcHVibGljIHJlYWRvbmx5IGNsYXNzSWQ6IHN0cmluZyxcbiAgICBwdWJsaWMgcmVhZG9ubHkgZGF0YTogdW5rbm93blxuICApIHt9XG5cbiAgdG9KU09OKCk6IHtcbiAgICBfX3R5cGU6IHN0cmluZztcbiAgICBjbGFzc05hbWU6IHN0cmluZztcbiAgICBjbGFzc0lkOiBzdHJpbmc7XG4gICAgZGF0YTogdW5rbm93bjtcbiAgfSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIF9fdHlwZTogdGhpcy5fX3R5cGUsXG4gICAgICBjbGFzc05hbWU6IHRoaXMuY2xhc3NOYW1lLFxuICAgICAgY2xhc3NJZDogdGhpcy5jbGFzc0lkLFxuICAgICAgZGF0YTogdGhpcy5kYXRhLFxuICAgIH07XG4gIH1cbn1cblxuLyoqIENoZWNrIGlmIGEgdmFsdWUgaXMgYSBDbGFzc0luc3RhbmNlUmVmIG9iamVjdCAqL1xuZXhwb3J0IGNvbnN0IGlzQ2xhc3NJbnN0YW5jZVJlZiA9IChcbiAgdmFsdWU6IHVua25vd25cbik6IHZhbHVlIGlzIENsYXNzSW5zdGFuY2VSZWYgPT4ge1xuICByZXR1cm4gKFxuICAgIHZhbHVlIGluc3RhbmNlb2YgQ2xhc3NJbnN0YW5jZVJlZiB8fFxuICAgICh2YWx1ZSAhPT0gbnVsbCAmJlxuICAgICAgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJlxuICAgICAgJ19fdHlwZScgaW4gdmFsdWUgJiZcbiAgICAgIHZhbHVlLl9fdHlwZSA9PT0gQ0xBU1NfSU5TVEFOQ0VfUkVGX1RZUEUgJiZcbiAgICAgICdjbGFzc05hbWUnIGluIHZhbHVlICYmXG4gICAgICB0eXBlb2YgdmFsdWUuY2xhc3NOYW1lID09PSAnc3RyaW5nJylcbiAgKTtcbn07XG5cbi8qKiBDaGVjayBpZiBhIHZhbHVlIGlzIGEgc3RyZWFtIElEIHN0cmluZyAqL1xuZXhwb3J0IGNvbnN0IGlzU3RyZWFtSWQgPSAodmFsdWU6IHVua25vd24pOiBib29sZWFuID0+IHtcbiAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycgJiYgdmFsdWUuc3RhcnRzV2l0aChTVFJFQU1fSURfUFJFRklYKTtcbn07XG5cbi8qKiBDaGVjayBpZiBhIHZhbHVlIGlzIGEgU3RyZWFtUmVmIG9iamVjdCAqL1xuZXhwb3J0IGNvbnN0IGlzU3RyZWFtUmVmID0gKHZhbHVlOiB1bmtub3duKTogdmFsdWUgaXMgU3RyZWFtUmVmID0+IHtcbiAgcmV0dXJuIChcbiAgICB2YWx1ZSAhPT0gbnVsbCAmJlxuICAgIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiZcbiAgICAnX190eXBlJyBpbiB2YWx1ZSAmJlxuICAgIHZhbHVlLl9fdHlwZSA9PT0gU1RSRUFNX1JFRl9UWVBFICYmXG4gICAgJ3N0cmVhbUlkJyBpbiB2YWx1ZSAmJlxuICAgIHR5cGVvZiB2YWx1ZS5zdHJlYW1JZCA9PT0gJ3N0cmluZydcbiAgKTtcbn07XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gU2hhcmVkIG8xMXkgcmV2aXZlciBoZWxwZXJzXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuLyoqXG4gKiBDb252ZXJ0IGEgc2VyaWFsaXplZCBzdHJlYW0gdmFsdWUgdG8gYSBTdHJlYW1SZWYgZm9yIGRpc3BsYXkuXG4gKi9cbmV4cG9ydCBjb25zdCBzdHJlYW1Ub1N0cmVhbVJlZiA9ICh2YWx1ZTogYW55KTogU3RyZWFtUmVmID0+IHtcbiAgbGV0IHN0cmVhbUlkOiBzdHJpbmc7XG4gIGlmICgnbmFtZScgaW4gdmFsdWUpIHtcbiAgICBjb25zdCBuYW1lID0gU3RyaW5nKHZhbHVlLm5hbWUpO1xuICAgIGlmICghbmFtZS5zdGFydHNXaXRoKFNUUkVBTV9JRF9QUkVGSVgpKSB7XG4gICAgICBzdHJlYW1JZCA9IGAke1NUUkVBTV9JRF9QUkVGSVh9JHtuYW1lfWA7XG4gICAgfSBlbHNlIHtcbiAgICAgIHN0cmVhbUlkID0gbmFtZTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgc3RyZWFtSWQgPSBgJHtTVFJFQU1fSURfUFJFRklYfW51bGxgO1xuICB9XG4gIHJldHVybiB7IF9fdHlwZTogU1RSRUFNX1JFRl9UWVBFLCBzdHJlYW1JZCB9O1xufTtcblxuLyoqIENvbnZlcnQgYSBzZXJpYWxpemVkIHN0ZXAgZnVuY3Rpb24gdG8gYSBkaXNwbGF5IHN0cmluZyAqL1xuZXhwb3J0IGNvbnN0IHNlcmlhbGl6ZWRTdGVwRnVuY3Rpb25Ub1N0cmluZyA9ICh2YWx1ZTogdW5rbm93bik6IHN0cmluZyA9PiB7XG4gIGlmICghdmFsdWUpIHJldHVybiAnbnVsbCc7XG4gIGlmICh0eXBlb2YgdmFsdWUgIT09ICdvYmplY3QnKSByZXR1cm4gJ251bGwnO1xuICBpZiAoJ3N0ZXBJZCcgaW4gdmFsdWUpIHtcbiAgICByZXR1cm4gYDxzdGVwOiR7KHZhbHVlIGFzIHsgc3RlcElkOiBzdHJpbmcgfSkuc3RlcElkfT5gO1xuICB9XG4gIHJldHVybiAnPGZ1bmN0aW9uPic7XG59O1xuXG4vKiogRXh0cmFjdCB0aGUgY2xhc3MgbmFtZSBmcm9tIGEgY2xhc3NJZCAqL1xuZXhwb3J0IGNvbnN0IGV4dHJhY3RDbGFzc05hbWUgPSAoY2xhc3NJZDogc3RyaW5nKTogc3RyaW5nID0+IHtcbiAgaWYgKCFjbGFzc0lkKSByZXR1cm4gJ1Vua25vd24nO1xuICBjb25zdCBwYXJ0cyA9IGNsYXNzSWQuc3BsaXQoJy8nKTtcbiAgcmV0dXJuIHBhcnRzW3BhcnRzLmxlbmd0aCAtIDFdIHx8IGNsYXNzSWQ7XG59O1xuXG4vKiogQ29udmVydCBhIHNlcmlhbGl6ZWQgY2xhc3MgaW5zdGFuY2UgdG8gYSBDbGFzc0luc3RhbmNlUmVmIGZvciBkaXNwbGF5LlxuICogIFJ1biBpbnN0YW5jZXMgYXJlIHNwZWNpYWwtY2FzZWQgdG8gYSBSdW5SZWYgZm9yIGNsaWNrYWJsZSByZW5kZXJpbmcuICovXG5leHBvcnQgY29uc3Qgc2VyaWFsaXplZEluc3RhbmNlVG9SZWYgPSAodmFsdWU6IHtcbiAgY2xhc3NJZDogc3RyaW5nO1xuICBkYXRhOiB1bmtub3duO1xufSk6IENsYXNzSW5zdGFuY2VSZWYgfCBSdW5SZWYgPT4ge1xuICBjb25zdCBjbGFzc05hbWUgPSBleHRyYWN0Q2xhc3NOYW1lKHZhbHVlLmNsYXNzSWQpO1xuICBpZiAoXG4gICAgY2xhc3NOYW1lID09PSAnUnVuJyAmJlxuICAgIHZhbHVlLmRhdGEgIT09IG51bGwgJiZcbiAgICB0eXBlb2YgdmFsdWUuZGF0YSA9PT0gJ29iamVjdCcgJiZcbiAgICAncnVuSWQnIGluIHZhbHVlLmRhdGEgJiZcbiAgICB0eXBlb2YgKHZhbHVlLmRhdGEgYXMgeyBydW5JZDogdW5rbm93biB9KS5ydW5JZCA9PT0gJ3N0cmluZydcbiAgKSB7XG4gICAgcmV0dXJuIHNlcmlhbGl6ZWRSdW5Ub1J1blJlZih2YWx1ZS5kYXRhIGFzIHsgcnVuSWQ6IHN0cmluZyB9KTtcbiAgfVxuICByZXR1cm4gbmV3IENsYXNzSW5zdGFuY2VSZWYoY2xhc3NOYW1lLCB2YWx1ZS5jbGFzc0lkLCB2YWx1ZS5kYXRhKTtcbn07XG5cbi8qKiBDb252ZXJ0IGEgc2VyaWFsaXplZCBjbGFzcyByZWZlcmVuY2UgdG8gYSBkaXNwbGF5IHN0cmluZyAqL1xuZXhwb3J0IGNvbnN0IHNlcmlhbGl6ZWRDbGFzc1RvU3RyaW5nID0gKHZhbHVlOiB7IGNsYXNzSWQ6IHN0cmluZyB9KTogc3RyaW5nID0+IHtcbiAgcmV0dXJuIGA8Y2xhc3M6JHtleHRyYWN0Q2xhc3NOYW1lKHZhbHVlLmNsYXNzSWQpfT5gO1xufTtcblxuLyoqXG4gKiBTdGFuZGFyZCBvMTF5IHJldml2ZXJzIHRoYXQgb3ZlcnJpZGUgcnVudGltZS1zcGVjaWZpYyB0eXBlcyB3aXRoXG4gKiBkaXNwbGF5LWZyaWVuZGx5IHZhbHVlcy4gVXNlZCBieSBib3RoIHdlYiBhbmQgQ0xJIGh5ZHJhdGlvbi5cbiAqL1xuZXhwb3J0IGNvbnN0IG9ic2VydmFiaWxpdHlSZXZpdmVyczogUmV2aXZlcnMgPSB7XG4gIFJlYWRhYmxlU3RyZWFtOiBzdHJlYW1Ub1N0cmVhbVJlZixcbiAgV3JpdGFibGVTdHJlYW06IHN0cmVhbVRvU3RyZWFtUmVmLFxuICBUcmFuc2Zvcm1TdHJlYW06IHN0cmVhbVRvU3RyZWFtUmVmLFxuICBBYm9ydENvbnRyb2xsZXI6ICh2YWx1ZTogYW55KSA9PlxuICAgIGA8QWJvcnRDb250cm9sbGVyKGFib3J0ZWQ6ICR7dmFsdWUuYWJvcnRlZH0pPmAsXG4gIEFib3J0U2lnbmFsOiAodmFsdWU6IGFueSkgPT4gYDxBYm9ydFNpZ25hbChhYm9ydGVkOiAke3ZhbHVlLmFib3J0ZWR9KT5gLFxuICAvLyBET01FeGNlcHRpb24gbmVlZHMgYW4gZXhwbGljaXQgcmV2aXZlcjogd2l0aG91dCBvbmUsIGRldmFsdWUucGFyc2VcbiAgLy8gdGhyb3dzIG9uIHRoZSBgW1wiRE9NRXhjZXB0aW9uXCIsIC4uLl1gIHRhZyBhbmQgYGh5ZHJhdGVTdGVwSU9gJ3NcbiAgLy8gdHJ5L2NhdGNoIGxlYXZlcyB0aGUgcmF3IGZsYXQtZW5jb2RlZCBzdHJpbmcgaW4gdGhlIFVJLiBBYm9ydENvbnRyb2xsZXJcbiAgLy8gc3ludGhlc2l6ZXMgYSBET01FeGNlcHRpb24gYXMgdGhlIGRlZmF1bHQgYHNpZ25hbC5yZWFzb25gIHdoZW4gYWJvcnQoKVxuICAvLyBpcyBjYWxsZWQgd2l0aCBubyBhcmcsIHNvIGFueSBhYm9ydCB0aGF0IHJvdW5kLXRyaXBzIHRocm91Z2ggYSBzdGVwXG4gIC8vIGJvdW5kYXJ5IHN1cmZhY2VzIGhlcmUuIFJlY29uc3RydWN0IGFzIGEgcmVhbCBET01FeGNlcHRpb24gd2hlbiB0aGVcbiAgLy8gZ2xvYmFsIGlzIGF2YWlsYWJsZSAobW9kZXJuIGJyb3dzZXJzICsgTm9kZSAxOCspLCBlbHNlIGZhbGwgYmFjayB0b1xuICAvLyBhbiBFcnJvciBwcmVzZXJ2aW5nIG5hbWUvbWVzc2FnZS9zdGFjay9jYXVzZSBmb3IgZGlzcGxheS5cbiAgRE9NRXhjZXB0aW9uOiAodmFsdWU6IHtcbiAgICBtZXNzYWdlOiBzdHJpbmc7XG4gICAgbmFtZTogc3RyaW5nO1xuICAgIHN0YWNrPzogc3RyaW5nO1xuICAgIGNhdXNlPzogdW5rbm93bjtcbiAgfSkgPT4ge1xuICAgIGNvbnN0IEcgPSBnbG9iYWxUaGlzIGFzIHsgRE9NRXhjZXB0aW9uPzogdHlwZW9mIERPTUV4Y2VwdGlvbiB9O1xuICAgIGlmICh0eXBlb2YgRy5ET01FeGNlcHRpb24gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGNvbnN0IGUgPSBuZXcgRy5ET01FeGNlcHRpb24odmFsdWUubWVzc2FnZSwgdmFsdWUubmFtZSk7XG4gICAgICBpZiAodmFsdWUuc3RhY2sgIT09IHVuZGVmaW5lZCkgZS5zdGFjayA9IHZhbHVlLnN0YWNrO1xuICAgICAgaWYgKCdjYXVzZScgaW4gdmFsdWUpIChlIGFzIHsgY2F1c2U/OiB1bmtub3duIH0pLmNhdXNlID0gdmFsdWUuY2F1c2U7XG4gICAgICByZXR1cm4gZTtcbiAgICB9XG4gICAgY29uc3QgZTogRXJyb3IgJiB7IGNhdXNlPzogdW5rbm93biB9ID0gbmV3IEVycm9yKHZhbHVlLm1lc3NhZ2UpO1xuICAgIGUubmFtZSA9IHZhbHVlLm5hbWU7XG4gICAgaWYgKHZhbHVlLnN0YWNrICE9PSB1bmRlZmluZWQpIGUuc3RhY2sgPSB2YWx1ZS5zdGFjaztcbiAgICBpZiAoJ2NhdXNlJyBpbiB2YWx1ZSkgZS5jYXVzZSA9IHZhbHVlLmNhdXNlO1xuICAgIHJldHVybiBlO1xuICB9LFxuICBTdGVwRnVuY3Rpb246IHNlcmlhbGl6ZWRTdGVwRnVuY3Rpb25Ub1N0cmluZyxcbiAgV29ya2Zsb3dGdW5jdGlvbjogKHZhbHVlOiB7IHdvcmtmbG93SWQ6IHN0cmluZyB9KSA9PlxuICAgIGA8d29ya2Zsb3c6JHt2YWx1ZS53b3JrZmxvd0lkfT5gLFxuICBJbnN0YW5jZTogc2VyaWFsaXplZEluc3RhbmNlVG9SZWYsXG4gIENsYXNzOiBzZXJpYWxpemVkQ2xhc3NUb1N0cmluZyxcbn07XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gUmVzb3VyY2UtbGV2ZWwgaHlkcmF0aW9uIGRpc3BhdGNoIChmb3IgbzExeSlcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4vKipcbiAqIEh5ZHJhdGUgdGhlIGRhdGEgZmllbGRzIG9mIGEgc3RlcCByZXNvdXJjZS5cbiAqL1xuZnVuY3Rpb24gaHlkcmF0ZVN0ZXBJTzxcbiAgVCBleHRlbmRzIHsgc3RlcElkPzogc3RyaW5nOyBpbnB1dD86IGFueTsgb3V0cHV0PzogYW55OyBlcnJvcj86IGFueSB9LFxuPihyZXNvdXJjZTogVCwgcmV2aXZlcnM6IFJldml2ZXJzKTogVCB7XG4gIGxldCBoeWRyYXRlZElucHV0ID0gcmVzb3VyY2UuaW5wdXQ7XG4gIGxldCBoeWRyYXRlZE91dHB1dCA9IHJlc291cmNlLm91dHB1dDtcbiAgbGV0IGh5ZHJhdGVkRXJyb3IgPSByZXNvdXJjZS5lcnJvcjtcblxuICBpZiAocmVzb3VyY2UuaW5wdXQgIT0gbnVsbCkge1xuICAgIHRyeSB7XG4gICAgICBoeWRyYXRlZElucHV0ID0gaHlkcmF0ZURhdGEocmVzb3VyY2UuaW5wdXQsIHJldml2ZXJzKTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIC8vIExlYXZlIHVuLWh5ZHJhdGVkXG4gICAgfVxuICB9XG5cbiAgaWYgKHJlc291cmNlLm91dHB1dCAhPSBudWxsKSB7XG4gICAgdHJ5IHtcbiAgICAgIGh5ZHJhdGVkT3V0cHV0ID0gaHlkcmF0ZURhdGEocmVzb3VyY2Uub3V0cHV0LCByZXZpdmVycyk7XG4gICAgfSBjYXRjaCB7XG4gICAgICAvLyBMZWF2ZSB1bi1oeWRyYXRlZFxuICAgIH1cbiAgfVxuXG4gIC8vIFRoZSBgZXJyb3JgIGZpZWxkIGlzIGBTZXJpYWxpemVkRGF0YWAgKFVpbnQ4QXJyYXkpIHByb2R1Y2VkIGJ5XG4gIC8vIGBkZWh5ZHJhdGVTdGVwRXJyb3JgLiBIeWRyYXRlIGl0IHNvIG9ic2VydmFiaWxpdHkgdG9vbHMgKENMSSwgd2ViIFVJKVxuICAvLyBjYW4gcmVhZCBgc3RlcC5lcnJvci5tZXNzYWdlYCwgYHN0ZXAuZXJyb3Iuc3RhY2tgLCBldGMuXG4gIGlmIChyZXNvdXJjZS5lcnJvciAhPSBudWxsKSB7XG4gICAgdHJ5IHtcbiAgICAgIGh5ZHJhdGVkRXJyb3IgPSBoeWRyYXRlRGF0YShyZXNvdXJjZS5lcnJvciwgcmV2aXZlcnMpO1xuICAgIH0gY2F0Y2gge1xuICAgICAgLy8gTGVhdmUgdW4taHlkcmF0ZWRcbiAgICB9XG4gIH1cblxuICByZXR1cm4ge1xuICAgIC4uLnJlc291cmNlLFxuICAgIGlucHV0OiBoeWRyYXRlZElucHV0LFxuICAgIG91dHB1dDogaHlkcmF0ZWRPdXRwdXQsXG4gICAgZXJyb3I6IGh5ZHJhdGVkRXJyb3IsXG4gIH07XG59XG5cbi8qKlxuICogSHlkcmF0ZSB0aGUgZGF0YSBmaWVsZHMgb2YgYSB3b3JrZmxvdyBydW4gcmVzb3VyY2UuXG4gKi9cbmZ1bmN0aW9uIGh5ZHJhdGVXb3JrZmxvd0lPPFxuICBUIGV4dGVuZHMgeyBpbnB1dD86IGFueTsgb3V0cHV0PzogYW55OyBlcnJvcj86IGFueSB9LFxuPihyZXNvdXJjZTogVCwgcmV2aXZlcnM6IFJldml2ZXJzKTogVCB7XG4gIGxldCBoeWRyYXRlZElucHV0ID0gcmVzb3VyY2UuaW5wdXQ7XG4gIGxldCBoeWRyYXRlZE91dHB1dCA9IHJlc291cmNlLm91dHB1dDtcbiAgbGV0IGh5ZHJhdGVkRXJyb3IgPSByZXNvdXJjZS5lcnJvcjtcblxuICBpZiAocmVzb3VyY2UuaW5wdXQgIT0gbnVsbCkge1xuICAgIHRyeSB7XG4gICAgICBoeWRyYXRlZElucHV0ID0gaHlkcmF0ZURhdGEocmVzb3VyY2UuaW5wdXQsIHJldml2ZXJzKTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIC8vIExlYXZlIHVuLWh5ZHJhdGVkXG4gICAgfVxuICB9XG5cbiAgaWYgKHJlc291cmNlLm91dHB1dCAhPSBudWxsKSB7XG4gICAgdHJ5IHtcbiAgICAgIGh5ZHJhdGVkT3V0cHV0ID0gaHlkcmF0ZURhdGEocmVzb3VyY2Uub3V0cHV0LCByZXZpdmVycyk7XG4gICAgfSBjYXRjaCB7XG4gICAgICAvLyBMZWF2ZSB1bi1oeWRyYXRlZFxuICAgIH1cbiAgfVxuXG4gIC8vIFRoZSBgZXJyb3JgIGZpZWxkIGlzIGBTZXJpYWxpemVkRGF0YWAgKFVpbnQ4QXJyYXkpIHByb2R1Y2VkIGJ5XG4gIC8vIGBkZWh5ZHJhdGVSdW5FcnJvcmAuIEh5ZHJhdGUgaXQgc28gb2JzZXJ2YWJpbGl0eSB0b29scyAoQ0xJLCB3ZWIgVUkpXG4gIC8vIGNhbiByZWFkIGBydW4uZXJyb3IubWVzc2FnZWAsIGBydW4uZXJyb3Iuc3RhY2tgLCBldGMuXG4gIGlmIChyZXNvdXJjZS5lcnJvciAhPSBudWxsKSB7XG4gICAgdHJ5IHtcbiAgICAgIGh5ZHJhdGVkRXJyb3IgPSBoeWRyYXRlRGF0YShyZXNvdXJjZS5lcnJvciwgcmV2aXZlcnMpO1xuICAgIH0gY2F0Y2gge1xuICAgICAgLy8gTGVhdmUgdW4taHlkcmF0ZWRcbiAgICB9XG4gIH1cblxuICByZXR1cm4ge1xuICAgIC4uLnJlc291cmNlLFxuICAgIGlucHV0OiBoeWRyYXRlZElucHV0LFxuICAgIG91dHB1dDogaHlkcmF0ZWRPdXRwdXQsXG4gICAgZXJyb3I6IGh5ZHJhdGVkRXJyb3IsXG4gIH07XG59XG5cbi8qKlxuICogSHlkcmF0ZSB0aGUgZXZlbnREYXRhIGZpZWxkcyBvZiBhbiBldmVudCByZXNvdXJjZS5cbiAqL1xuZnVuY3Rpb24gaHlkcmF0ZUV2ZW50RGF0YTxcbiAgVCBleHRlbmRzIHsgZXZlbnRJZD86IHN0cmluZzsgZXZlbnRUeXBlPzogc3RyaW5nOyBldmVudERhdGE/OiBhbnkgfSxcbj4ocmVzb3VyY2U6IFQsIHJldml2ZXJzOiBSZXZpdmVycyk6IFQge1xuICBpZiAoIXJlc291cmNlLmV2ZW50RGF0YSkgcmV0dXJuIHJlc291cmNlO1xuXG4gIGNvbnN0IGV2ZW50RGF0YSA9IHsgLi4ucmVzb3VyY2UuZXZlbnREYXRhIH07XG5cbiAgZm9yIChjb25zdCBmaWVsZCBvZiBnZXRFdmVudERhdGFSZWZGaWVsZHMocmVzb3VyY2UuZXZlbnRUeXBlID8/ICcnKSkge1xuICAgIGlmIChldmVudERhdGFbZmllbGRdID09IG51bGwpIGNvbnRpbnVlO1xuICAgIHRyeSB7XG4gICAgICBldmVudERhdGFbZmllbGRdID0gaHlkcmF0ZURhdGEoZXZlbnREYXRhW2ZpZWxkXSwgcmV2aXZlcnMpO1xuICAgIH0gY2F0Y2gge1xuICAgICAgLy8gTGVhdmUgdW4taHlkcmF0ZWRcbiAgICB9XG4gIH1cblxuICByZXR1cm4geyAuLi5yZXNvdXJjZSwgZXZlbnREYXRhIH07XG59XG5cbi8qKlxuICogSHlkcmF0ZSB0aGUgbWV0YWRhdGEgZmllbGQgb2YgYSBob29rIHJlc291cmNlLlxuICovXG5mdW5jdGlvbiBoeWRyYXRlSG9va01ldGFkYXRhPFQgZXh0ZW5kcyB7IGhvb2tJZD86IHN0cmluZzsgbWV0YWRhdGE/OiBhbnkgfT4oXG4gIHJlc291cmNlOiBULFxuICByZXZpdmVyczogUmV2aXZlcnNcbik6IFQge1xuICBpZiAocmVzb3VyY2UubWV0YWRhdGEgPT0gbnVsbCkgcmV0dXJuIHJlc291cmNlO1xuXG4gIGxldCBoeWRyYXRlZE1ldGFkYXRhID0gcmVzb3VyY2UubWV0YWRhdGE7XG4gIHRyeSB7XG4gICAgaHlkcmF0ZWRNZXRhZGF0YSA9IGh5ZHJhdGVEYXRhKHJlc291cmNlLm1ldGFkYXRhLCByZXZpdmVycyk7XG4gIH0gY2F0Y2gge1xuICAgIC8vIExlYXZlIHVuLWh5ZHJhdGVkXG4gIH1cblxuICByZXR1cm4geyAuLi5yZXNvdXJjZSwgbWV0YWRhdGE6IGh5ZHJhdGVkTWV0YWRhdGEgfTtcbn1cblxuLyoqXG4gKiBIeWRyYXRlIHRoZSBzZXJpYWxpemVkIGRhdGEgZmllbGRzIG9mIGFueSByZXNvdXJjZSBmb3IgbzExeSBkaXNwbGF5LlxuICpcbiAqIERpc3BhdGNoZXMgYnkgcmVzb3VyY2UgdHlwZSAoc3RlcCwgaG9vaywgZXZlbnQsIHdvcmtmbG93KSBhbmQgY2FsbHNcbiAqIGBoeWRyYXRlRGF0YWAgd2l0aCB0aGUgcHJvdmlkZWQgcmV2aXZlcnMgZm9yIGVhY2ggZGF0YSBmaWVsZC5cbiAqXG4gKiBFYWNoIGVudmlyb25tZW50ICh3ZWIsIENMSSkgcHJvdmlkZXMgaXRzIG93biByZXZpdmVyczsgdGhpcyBmdW5jdGlvblxuICogb25seSBoYW5kbGVzIHRoZSBkaXNwYXRjaCBsb2dpYyBhbmQgZmllbGQgbWFwcGluZy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGh5ZHJhdGVSZXNvdXJjZUlPPFxuICBUIGV4dGVuZHMge1xuICAgIHN0ZXBJZD86IHN0cmluZztcbiAgICBob29rSWQ/OiBzdHJpbmc7XG4gICAgZXZlbnRJZD86IHN0cmluZztcbiAgICBldmVudFR5cGU/OiBzdHJpbmc7XG4gICAgaW5wdXQ/OiBhbnk7XG4gICAgb3V0cHV0PzogYW55O1xuICAgIG1ldGFkYXRhPzogYW55O1xuICAgIGV2ZW50RGF0YT86IGFueTtcbiAgICBleGVjdXRpb25Db250ZXh0PzogYW55O1xuICB9LFxuPihyZXNvdXJjZTogVCwgcmV2aXZlcnM6IFJldml2ZXJzKTogVCB7XG4gIGlmICghcmVzb3VyY2UpIHJldHVybiByZXNvdXJjZTtcblxuICBsZXQgaHlkcmF0ZWQ6IFQ7XG4gIGlmICgnc3RlcElkJyBpbiByZXNvdXJjZSkge1xuICAgIGh5ZHJhdGVkID0gaHlkcmF0ZVN0ZXBJTyhyZXNvdXJjZSwgcmV2aXZlcnMpO1xuICB9IGVsc2UgaWYgKCdob29rSWQnIGluIHJlc291cmNlKSB7XG4gICAgaHlkcmF0ZWQgPSBoeWRyYXRlSG9va01ldGFkYXRhKHJlc291cmNlLCByZXZpdmVycyk7XG4gIH0gZWxzZSBpZiAoJ2V2ZW50SWQnIGluIHJlc291cmNlKSB7XG4gICAgaHlkcmF0ZWQgPSBoeWRyYXRlRXZlbnREYXRhKHJlc291cmNlLCByZXZpdmVycyk7XG4gIH0gZWxzZSB7XG4gICAgaHlkcmF0ZWQgPSBoeWRyYXRlV29ya2Zsb3dJTyhyZXNvdXJjZSwgcmV2aXZlcnMpO1xuICB9XG5cbiAgLy8gU3RyaXAgZXhlY3V0aW9uQ29udGV4dCwgcHJlc2VydmluZyBvbmx5IHdvcmtmbG93Q29yZVZlcnNpb24gZm9yIGRpc3BsYXlcbiAgaWYgKCdleGVjdXRpb25Db250ZXh0JyBpbiBoeWRyYXRlZCkge1xuICAgIGNvbnN0IHsgZXhlY3V0aW9uQ29udGV4dCwgLi4ucmVzdCB9ID0gaHlkcmF0ZWQ7XG4gICAgY29uc3Qgd29ya2Zsb3dDb3JlVmVyc2lvbiA9XG4gICAgICBleGVjdXRpb25Db250ZXh0ICYmXG4gICAgICB0eXBlb2YgZXhlY3V0aW9uQ29udGV4dCA9PT0gJ29iamVjdCcgJiZcbiAgICAgICd3b3JrZmxvd0NvcmVWZXJzaW9uJyBpbiBleGVjdXRpb25Db250ZXh0XG4gICAgICAgID8gZXhlY3V0aW9uQ29udGV4dC53b3JrZmxvd0NvcmVWZXJzaW9uXG4gICAgICAgIDogdW5kZWZpbmVkO1xuICAgIGlmICh3b3JrZmxvd0NvcmVWZXJzaW9uKSB7XG4gICAgICByZXR1cm4geyAuLi5yZXN0LCB3b3JrZmxvd0NvcmVWZXJzaW9uIH0gYXMgdW5rbm93biBhcyBUO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdCBhcyBUO1xuICB9XG5cbiAgcmV0dXJuIGh5ZHJhdGVkO1xufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIFV0aWxpdHkgZnVuY3Rpb25zXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuLyoqIEV4dHJhY3QgYWxsIHN0cmVhbSBJRHMgZnJvbSBhIHZhbHVlIChyZWN1cnNpdmVseSB0cmF2ZXJzZXMgb2JqZWN0cy9hcnJheXMpICovXG5leHBvcnQgZnVuY3Rpb24gZXh0cmFjdFN0cmVhbUlkcyhvYmo6IHVua25vd24pOiBzdHJpbmdbXSB7XG4gIGNvbnN0IHN0cmVhbUlkczogc3RyaW5nW10gPSBbXTtcbiAgLy8gVGhlIGh5ZHJhdGVkIG8xMXkgZGF0YSB0aGlzIHdhbGtzIGNvbWVzIGZyb20gZGV2YWx1ZSwgd2hpY2ggc3VwcG9ydHNcbiAgLy8gY2lyY3VsYXIgYW5kIHJlcGVhdGVkIHJlZmVyZW5jZXMuIFRyYWNrIHZpc2l0ZWQgY29udGFpbmVycyBzbyBhIGN5Y2xlXG4gIC8vIChlLmcuIGEgc3RlcCByZXN1bHQgd2hvc2Ugb2JqZWN0IHJlZmVycyBiYWNrIHRvIGl0c2VsZikgZG9lc24ndCByZWN1cnNlXG4gIC8vIGZvcmV2ZXIgYW5kIG92ZXJmbG93IHRoZSBzdGFjay5cbiAgY29uc3Qgc2VlbiA9IG5ldyBXZWFrU2V0PG9iamVjdD4oKTtcblxuICBmdW5jdGlvbiB0cmF2ZXJzZSh2YWx1ZTogdW5rbm93bik6IHZvaWQge1xuICAgIGlmIChpc1N0cmVhbUlkKHZhbHVlKSkge1xuICAgICAgc3RyZWFtSWRzLnB1c2godmFsdWUgYXMgc3RyaW5nKTtcbiAgICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICBpZiAoc2Vlbi5oYXModmFsdWUpKSByZXR1cm47XG4gICAgICBzZWVuLmFkZCh2YWx1ZSk7XG4gICAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgdmFsdWUpIHtcbiAgICAgICAgdHJhdmVyc2UoaXRlbSk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICh2YWx1ZSAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnKSB7XG4gICAgICBpZiAoc2Vlbi5oYXModmFsdWUpKSByZXR1cm47XG4gICAgICBzZWVuLmFkZCh2YWx1ZSk7XG4gICAgICBmb3IgKGNvbnN0IHZhbCBvZiBPYmplY3QudmFsdWVzKHZhbHVlKSkge1xuICAgICAgICB0cmF2ZXJzZSh2YWwpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHRyYXZlcnNlKG9iaik7XG4gIHJldHVybiBBcnJheS5mcm9tKG5ldyBTZXQoc3RyZWFtSWRzKSk7XG59XG5cbi8qKiBUcnVuY2F0ZSBhIHN0cmluZyB0byBhIG1heGltdW0gbGVuZ3RoLCBhZGRpbmcgZWxsaXBzaXMgaWYgbmVlZGVkICovXG5leHBvcnQgZnVuY3Rpb24gdHJ1bmNhdGVJZChpZDogc3RyaW5nLCBtYXhMZW5ndGggPSAxMik6IHN0cmluZyB7XG4gIGlmIChpZC5sZW5ndGggPD0gbWF4TGVuZ3RoKSByZXR1cm4gaWQ7XG4gIHJldHVybiBgJHtpZC5zbGljZSgwLCBtYXhMZW5ndGgpfS4uLmA7XG59XG4iXX0=
|
package/dist/serialization.d.ts
CHANGED
|
@@ -129,7 +129,7 @@ import type { ByteStreamFraming, Reducers, Revivers } from './serialization/type
|
|
|
129
129
|
* to `false` for backwards compatibility with older runs.
|
|
130
130
|
* @returns
|
|
131
131
|
*/
|
|
132
|
-
export declare function getExternalReducers(global: Record<string, any> | undefined, ops: Promise<void>[], runId: string, cryptoKey: EncryptionKeyParam, framedByteStreams?: boolean, runReadyBarrier?: Promise<unknown>): Partial<Reducers>;
|
|
132
|
+
export declare function getExternalReducers(global: Record<string, any> | undefined, ops: Promise<void>[], runId: string, cryptoKey: EncryptionKeyParam, framedByteStreams?: boolean, runReadyBarrier?: Promise<unknown>, readbackOps?: Promise<void>[]): Partial<Reducers>;
|
|
133
133
|
export declare function getWorkflowReducers(global?: Record<string, any>): Partial<Reducers>;
|
|
134
134
|
/**
|
|
135
135
|
* Cancel dangling abort-stream readers on any AbortController instances found
|
|
@@ -386,7 +386,7 @@ export declare function deserializePreparedStepError(prepared: PreparedReplayPay
|
|
|
386
386
|
* backwards compatibility with older runs.
|
|
387
387
|
* @returns The dehydrated value as binary data (Uint8Array) with format prefix
|
|
388
388
|
*/
|
|
389
|
-
export declare function dehydrateWorkflowArguments(value: unknown, runId: string, key: PayloadKey | undefined, ops?: Promise<void>[], global?: Record<string, any>, v1Compat?: boolean, framedByteStreams?: boolean, compression?: boolean): Promise<Uint8Array | unknown>;
|
|
389
|
+
export declare function dehydrateWorkflowArguments(value: unknown, runId: string, key: PayloadKey | undefined, ops?: Promise<void>[], global?: Record<string, any>, v1Compat?: boolean, framedByteStreams?: boolean, compression?: boolean, readbackOps?: Promise<void>[]): Promise<Uint8Array | unknown>;
|
|
390
390
|
/**
|
|
391
391
|
* Called from workflow execution environment to hydrate the workflow
|
|
392
392
|
* arguments from the database at the start of workflow execution. A prepared
|
|
@@ -398,12 +398,11 @@ export declare function hydrateWorkflowArguments(value: Uint8Array | unknown, _r
|
|
|
398
398
|
*/
|
|
399
399
|
export declare function dehydrateWorkflowReturnValue(value: unknown, _runId: string, key: PayloadKey | undefined, global?: Record<string, any>, v1Compat?: boolean, compression?: boolean,
|
|
400
400
|
/**
|
|
401
|
-
* Optional sink receiving
|
|
402
|
-
*
|
|
403
|
-
*
|
|
404
|
-
*
|
|
405
|
-
*
|
|
406
|
-
* runtime/suspension-handler.ts passes one for step-input dehydration.
|
|
401
|
+
* Optional sink receiving the first five samples and exact total count of
|
|
402
|
+
* workflow-code executions serialization could not avoid. The diagnostics
|
|
403
|
+
* are emitted as span attributes either way, so omitting this loses nothing
|
|
404
|
+
* observability-wise. The retained-VM gate in runtime/suspension-handler.ts
|
|
405
|
+
* passes one for step-input dehydration.
|
|
407
406
|
*/
|
|
408
407
|
guestCodeStatsOut?: GuestCodeStats): Promise<Uint8Array | unknown>;
|
|
409
408
|
/**
|
|
@@ -440,7 +439,7 @@ export declare function hydrateStepArguments(value: Uint8Array | unknown, runId:
|
|
|
440
439
|
* backwards compatibility with older runs.
|
|
441
440
|
* @returns The dehydrated value as binary data (Uint8Array) with format prefix
|
|
442
441
|
*/
|
|
443
|
-
export declare function dehydrateStepReturnValue(value: unknown, runId: string, key: PayloadKey | undefined, ops?: Promise<any>[], global?: Record<string, any>, v1Compat?: boolean, framedByteStreams?: boolean, compression?: boolean, runReadyBarrier?: Promise<unknown>): Promise<Uint8Array | unknown>;
|
|
442
|
+
export declare function dehydrateStepReturnValue(value: unknown, runId: string, key: PayloadKey | undefined, ops?: Promise<any>[], global?: Record<string, any>, v1Compat?: boolean, framedByteStreams?: boolean, compression?: boolean, runReadyBarrier?: Promise<unknown>, readbackOps?: Promise<void>[]): Promise<Uint8Array | unknown>;
|
|
444
443
|
/**
|
|
445
444
|
* Called from the step executor when a step throws. Dehydrates the thrown
|
|
446
445
|
* value from within the step execution environment into a format that can
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"serialization.d.ts","sourceRoot":"","sources":["../src/serialization.ts"],"names":[],"mappings":"AAoCA,OAAO,EAEL,QAAQ,EACR,UAAU,EACX,MAAM,gCAAgC,CAAC;AACxC,OAAO,EACL,QAAQ,EACR,OAAO,EACP,oBAAoB,EACpB,KAAK,kBAAkB,EACvB,OAAO,EACP,gBAAgB,EAChB,YAAY,EACZ,KAAK,UAAU,EACf,KAAK,cAAc,EAEnB,cAAc,EACd,KAAK,UAAU,EACf,MAAM,EACP,MAAM,+BAA+B,CAAC;AAKvC,OAAO,EACL,kBAAkB,EAClB,sBAAsB,EACtB,WAAW,EACX,gBAAgB,EACjB,MAAM,2BAA2B,CAAC;AACnC,OAAO,EACL,KAAK,cAAc,EAGpB,MAAM,6BAA6B,CAAC;AAerC,OAAO,EACL,KAAK,YAAY,EACjB,cAAc,EACd,mBAAmB,EACpB,MAAM,0BAA0B,CAAC;AA0BlC,OAAO,EACL,mBAAmB,EACnB,KAAK,YAAY,EACjB,cAAc,EACd,sBAAsB,EACtB,kBAAkB,EAClB,gBAAgB,EAChB,WAAW,EACX,OAAO,EACP,OAAO,EACP,QAAQ,EACR,UAAU,EACV,KAAK,kBAAkB,EAEvB,KAAK,UAAU,EACf,KAAK,cAAc,EACnB,KAAK,UAAU,EACf,MAAM,EACN,cAAc,EACd,oBAAoB,EACpB,YAAY,EACZ,gBAAgB,EAChB,QAAQ,GACT,CAAC;AAIF,MAAM,MAAM,uBAAuB,GACjC,CAAC,OAAO,mBAAmB,CAAC,CAAC,MAAM,OAAO,mBAAmB,CAAC,CAAC;AASjE;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,MAAM,EAAE,cAAc,GAAG,OAAO,GAAG,SAAS,CAMzE;
|
|
1
|
+
{"version":3,"file":"serialization.d.ts","sourceRoot":"","sources":["../src/serialization.ts"],"names":[],"mappings":"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"}
|