@workflow/cli 5.0.0-beta.2 → 5.0.0-beta.21
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/base.js +1 -1
- package/dist/commands/build.js +1 -1
- package/dist/commands/cancel.js +1 -1
- package/dist/commands/dev.js +1 -1
- package/dist/commands/health.js +1 -1
- package/dist/commands/init.js +1 -1
- package/dist/commands/inspect.d.ts +1 -0
- package/dist/commands/inspect.d.ts.map +1 -1
- package/dist/commands/inspect.js +10 -3
- package/dist/commands/start.js +1 -1
- package/dist/commands/transform.js +4 -4
- package/dist/commands/validate.js +1 -1
- package/dist/commands/web.d.ts +1 -0
- package/dist/commands/web.d.ts.map +1 -1
- package/dist/commands/web.js +9 -3
- package/dist/lib/config/log.js +1 -1
- package/dist/lib/config/types.js +1 -1
- package/dist/lib/config/workflow-config.js +1 -1
- package/dist/lib/inspect/auth.js +1 -1
- package/dist/lib/inspect/env.js +1 -1
- package/dist/lib/inspect/flags.d.ts +8 -0
- package/dist/lib/inspect/flags.d.ts.map +1 -1
- package/dist/lib/inspect/flags.js +15 -1
- package/dist/lib/inspect/hydration.d.ts +22 -0
- package/dist/lib/inspect/hydration.d.ts.map +1 -1
- package/dist/lib/inspect/hydration.js +98 -39
- package/dist/lib/inspect/output.js +1 -1
- package/dist/lib/inspect/output.test.js +1 -1
- package/dist/lib/inspect/pagination.js +1 -1
- package/dist/lib/inspect/run.js +1 -1
- package/dist/lib/inspect/setup.js +1 -1
- package/dist/lib/inspect/stream.js +1 -1
- package/dist/lib/inspect/terminal-utils.js +1 -1
- package/dist/lib/inspect/vercel-api.d.ts +5 -2
- package/dist/lib/inspect/vercel-api.d.ts.map +1 -1
- package/dist/lib/inspect/vercel-api.js +12 -37
- package/dist/lib/inspect/vercel-api.test.d.ts +2 -0
- package/dist/lib/inspect/vercel-api.test.d.ts.map +1 -0
- package/dist/lib/inspect/vercel-api.test.js +21 -0
- package/dist/lib/inspect/vercel-link.js +1 -1
- package/dist/lib/inspect/web.d.ts +24 -0
- package/dist/lib/inspect/web.d.ts.map +1 -1
- package/dist/lib/inspect/web.js +47 -3
- package/dist/lib/update-check.js +1 -1
- package/package.json +13 -13
- package/dist/base.js.map +0 -1
- package/dist/commands/build.js.map +0 -1
- package/dist/commands/cancel.js.map +0 -1
- package/dist/commands/dev.js.map +0 -1
- package/dist/commands/health.js.map +0 -1
- package/dist/commands/init.js.map +0 -1
- package/dist/commands/inspect.js.map +0 -1
- package/dist/commands/start.js.map +0 -1
- package/dist/commands/transform.js.map +0 -1
- package/dist/commands/validate.js.map +0 -1
- package/dist/commands/web.js.map +0 -1
- package/dist/lib/config/log.js.map +0 -1
- package/dist/lib/config/types.js.map +0 -1
- package/dist/lib/config/workflow-config.js.map +0 -1
- package/dist/lib/inspect/auth.js.map +0 -1
- package/dist/lib/inspect/env.js.map +0 -1
- package/dist/lib/inspect/flags.js.map +0 -1
- package/dist/lib/inspect/hydration.js.map +0 -1
- package/dist/lib/inspect/output.js.map +0 -1
- package/dist/lib/inspect/output.test.js.map +0 -1
- package/dist/lib/inspect/pagination.js.map +0 -1
- package/dist/lib/inspect/run.js.map +0 -1
- package/dist/lib/inspect/setup.js.map +0 -1
- package/dist/lib/inspect/stream.js.map +0 -1
- package/dist/lib/inspect/terminal-utils.js.map +0 -1
- package/dist/lib/inspect/vercel-api.js.map +0 -1
- package/dist/lib/inspect/vercel-link.js.map +0 -1
- package/dist/lib/inspect/web.js.map +0 -1
- package/dist/lib/update-check.js.map +0 -1
package/dist/lib/inspect/env.js
CHANGED
|
@@ -223,4 +223,4 @@ export const inferVercelEnvVars = async () => {
|
|
|
223
223
|
teamId: envVars.WORKFLOW_VERCEL_TEAM || undefined,
|
|
224
224
|
};
|
|
225
225
|
};
|
|
226
|
-
//# sourceMappingURL=env.js.map
|
|
226
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW52LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xpYi9pbnNwZWN0L2Vudi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDMUMsT0FBTyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDMUMsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDckUsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQzFDLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQ2pFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDekMsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ2hELE9BQU8sRUFDTCxZQUFZLEVBQ1osY0FBYyxFQUNkLHNCQUFzQixHQUV2QixNQUFNLGtCQUFrQixDQUFDO0FBRTFCOzs7Ozs7O0dBT0c7QUFDSCxNQUFNLENBQUMsTUFBTSxZQUFZLEdBQUcsQ0FBQyxPQUErQixFQUFFLEVBQUU7SUFDOUQsTUFBTSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsRUFBRSxFQUFFO1FBQy9DLElBQ0UsS0FBSyxLQUFLLFNBQVM7WUFDbkIsS0FBSyxLQUFLLElBQUk7WUFDZCxLQUFLLEtBQUssRUFBRTtZQUNaLEtBQUssS0FBSyxXQUFXLEVBQ3JCLENBQUM7WUFDRCxPQUFPO1FBQ1QsQ0FBQztRQUNELE9BQU8sQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsS0FBSyxDQUFDO0lBQzNCLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0sVUFBVSxHQUFHLEdBQTJCLEVBQUU7SUFDckQs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WSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBRXRCLE9BQU87UUFDTCxLQUFLLEVBQUUsT0FBTyxDQUFDLDBCQUEwQixJQUFJLFNBQVM7UUFDdEQsV0FBVyxFQUFFLE9BQU8sQ0FBQyxtQkFBbUIsSUFBSSxTQUFTO1FBQ3JELFNBQVMsRUFBRSxPQUFPLENBQUMsdUJBQXVCLElBQUksU0FBUztRQUN2RCxXQUFXLEVBQUUsT0FBTyxDQUFDLDRCQUE0QixJQUFJLFNBQVM7UUFDOUQsTUFBTSxFQUFFLE9BQU8sQ0FBQyxvQkFBb0IsSUFBSSxTQUFTO0tBQ2xELENBQUM7QUFDSixDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBhY2Nlc3MgfSBmcm9tICdub2RlOmZzL3Byb21pc2VzJztcbmltcG9ydCB7IGpvaW4sIHJlc29sdmUgfSBmcm9tICdub2RlOnBhdGgnO1xuaW1wb3J0IHsgZmluZFdvcmtmbG93RGF0YURpciB9IGZyb20gJ0B3b3JrZmxvdy91dGlscy9jaGVjay1kYXRhLWRpcic7XG5pbXBvcnQgeyBsb2dnZXIgfSBmcm9tICcuLi9jb25maWcvbG9nLmpzJztcbmltcG9ydCB7IGdldFdvcmtmbG93Q29uZmlnIH0gZnJvbSAnLi4vY29uZmlnL3dvcmtmbG93LWNvbmZpZy5qcyc7XG5pbXBvcnQgeyBnZXRBdXRoVG9rZW4gfSBmcm9tICcuL2F1dGguanMnO1xuaW1wb3J0IHsgZmV0Y2hUZWFtSW5mbyB9IGZyb20gJy4vdmVyY2VsLWFwaS5qcyc7XG5pbXBvcnQge1xuICBmaW5kUmVwb1Jvb3QsXG4gIGdldFByb2plY3RMaW5rLFxuICBpc09uZU9mRXJyTm9FeGNlcHRpb25zLFxuICB0eXBlIFByb2plY3RMaW5rLFxufSBmcm9tICcuL3ZlcmNlbC1saW5rLmpzJztcblxuLyoqXG4gKiBPdmVyd3JpdGUgdmFsdWVzIG9uIHByb2Nlc3MuZW52IHdpdGggdGhlIGdpdmVuIHZhbHVlcyAoaWYgbm90IHVuZGVmaW5lZClcbiAqXG4gKiBVc2VkIGJ5IHRoZSBDTEkgdG8gY29uZmlndXJlIGVudmlyb25tZW50IHZhcmlhYmxlcyB0aGF0IGFyZSByZWFkIGJ5XG4gKiB2YXJpb3VzIHN1YnN5c3RlbXMgKGUuZy4sIFdPUktGTE9XX1RBUkdFVF9XT1JMRCwgV09SS0ZMT1dfTE9DQUxfREFUQV9ESVIpLlxuICogTm90ZTogV09SS0ZMT1dfVkVSQ0VMXyogZW52IHZhcnMgYXJlIHJlYWQgYmFjayB2aWEgZ2V0RW52VmFycygpIGFuZCBwYXNzZWRcbiAqIHRvIGNyZWF0ZVZlcmNlbFdvcmxkKCkgZXhwbGljaXRseSDigJQgdGhleSBhcmUgTk9UIHJlYWQgYnkgY3JlYXRlV29ybGQoKS5cbiAqL1xuZXhwb3J0IGNvbnN0IHdyaXRlRW52VmFycyA9IChlbnZWYXJzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+KSA9PiB7XG4gIE9iamVjdC5lbnRyaWVzKGVudlZhcnMpLmZvckVhY2goKFtrZXksIHZhbHVlXSkgPT4ge1xuICAgIGlmIChcbiAgICAgIHZhbHVlID09PSB1bmRlZmluZWQgfHxcbiAgICAgIHZhbHVlID09PSBudWxsIHx8XG4gICAgICB2YWx1ZSA9PT0gJycgfHxcbiAgICAgIHZhbHVlID09PSAndW5kZWZpbmVkJ1xuICAgICkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBwcm9jZXNzLmVudltrZXldID0gdmFsdWU7XG4gIH0pO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldEVudlZhcnMgPSAoKTogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9PiB7XG4gIGNvbnN0IGVudiA9IHByb2Nlc3MuZW52O1xuICByZXR1cm4ge1xuICAgIFdPUktGTE9XX1RBUkdFVF9XT1JMRDogZW52LldPUktGTE9XX1RBUkdFVF9XT1JMRCB8fCAnJyxcbiAgICBXT1JLRkxPV19WRVJDRUxfRU5WOiBlbnYuV09SS0ZMT1dfVkVSQ0VMX0VOViB8fCAnJyxcbiAgICBXT1JLRkxPV19WRVJDRUxfQVVUSF9UT0tFTjogZW52LldPUktGTE9XX1ZFUkNFTF9BVVRIX1RPS0VOIHx8ICcnLFxuICAgIFdPUktGTE9XX1ZFUkNFTF9QUk9KRUNUOiBlbnYuV09SS0ZMT1dfVkVSQ0VMX1BST0pFQ1QgfHwgJycsXG4gICAgV09SS0ZMT1dfVkVSQ0VMX1BST0pFQ1RfTkFNRTogZW52LldPUktGTE9XX1ZFUkNFTF9QUk9KRUNUX05BTUUgfHwgJycsXG4gICAgV09SS0ZMT1dfVkVSQ0VMX1RFQU06IGVudi5XT1JLRkxPV19WRVJDRUxfVEVBTSB8fCAnJyxcbiAgICBXT1JLRkxPV19MT0NBTF9CQVNFX1VSTDogZW52LldPUktGTE9XX0xPQ0FMX0JBU0VfVVJMIHx8ICcnLFxuICAgIFdPUktGTE9XX0xPQ0FMX1VJOiBlbnYuV09SS0ZMT1dfTE9DQUxfVUkgfHwgJycsXG4gICAgUE9SVDogZW52LlBPUlQgfHwgJycsXG4gICAgV09SS0ZMT1dfTE9DQUxfREFUQV9ESVI6IGVudi5XT1JLRkxPV19MT0NBTF9EQVRBX0RJUiB8fCAnJyxcbiAgICBXT1JLRkxPV19NQU5JRkVTVF9QQVRIOiBlbnYuV09SS0ZMT1dfTUFOSUZFU1RfUEFUSCB8fCAnJyxcbiAgfTtcbn07XG5cbmNvbnN0IHBvc3NpYmxlTWFuaWZlc3RQYXRocyA9IFtcbiAgJ2FwcC8ud2VsbC1rbm93bi93b3JrZmxvdy92MS9tYW5pZmVzdC5qc29uJyxcbiAgJ3NyYy9hcHAvLndlbGwta25vd24vd29ya2Zsb3cvdjEvbWFuaWZlc3QuanNvbicsXG4gICcud2VsbC1rbm93bi93b3JrZmxvdy92MS9tYW5pZmVzdC5qc29uJyxcbl07XG5cbmFzeW5jIGZ1bmN0aW9uIGZpbmRNYW5pZmVzdFBhdGgoY3dkOiBzdHJpbmcpIHtcbiAgZm9yIChjb25zdCBwYXRoIG9mIHBvc3NpYmxlTWFuaWZlc3RQYXRocykge1xuICAgIGNvbnN0IGZ1bGxQYXRoID0gam9pbihjd2QsIHBhdGgpO1xuICAgIGlmIChcbiAgICAgIGF3YWl0IGFjY2VzcyhmdWxsUGF0aClcbiAgICAgICAgLnRoZW4oKCkgPT4gdHJ1ZSlcbiAgICAgICAgLmNhdGNoKCgpID0+IGZhbHNlKVxuICAgICkge1xuICAgICAgY29uc3QgYWJzb2x1dGVQYXRoID0gcmVzb2x2ZShmdWxsUGF0aCk7XG4gICAgICBsb2dnZXIuZGVidWcoJ0ZvdW5kIHdvcmtmbG93IG1hbmlmZXN0OicsIGFic29sdXRlUGF0aCk7XG4gICAgICByZXR1cm4gYWJzb2x1dGVQYXRoO1xuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIE92ZXJ3cml0ZXMgcHJvY2Vzcy5lbnYgdmFyaWFibGVzIHJlbGF0ZWQgdG8gbG9jYWwgd29ybGQgY29uZmlndXJhdGlvbixcbiAqIGlmIHJlbGV2YW50IGVudmlyb25tZW50IHZhcmlhYmxlcyBhcmVuJ3Qgc2V0IGFscmVhZHkuXG4gKlxuICogVGhyb3dzIGlmIHRoZSB3b3JrZmxvdyBkYXRhIGRpcmVjdG9yeSBjYW4gbm90IGJlIGZvdW5kLlxuICovXG5leHBvcnQgY29uc3QgaW5mZXJMb2NhbFdvcmxkRW52VmFycyA9IGFzeW5jICgpID0+IHtcbiAgY29uc3QgZW52VmFycyA9IGdldEVudlZhcnMoKTtcbiAgY29uc3QgY3dkID0gZ2V0V29ya2Zsb3dDb25maWcoKS53b3JraW5nRGlyO1xuICBsZXQgcmVwb1Jvb3Q6IHN0cmluZyB8IHVuZGVmaW5lZDtcblxuICAvLyBBbHdheXMgZXhwb3NlIHRoZSBlZmZlY3RpdmUgd29ya2luZyBkaXJlY3RvcnkgdG8gdGhlIHdlYiBVSS9zZXJ2ZXItc2lkZSBoZWxwZXJzLlxuICAvLyBUaGlzIGlzIGVzcGVjaWFsbHkgdXNlZnVsIHdoZW4gZGV2ZWxvcGluZyB0aGUgd2ViIFVJIGZyb20gdGhlIHdvcmtmbG93IHJlcG9cbiAgLy8gd2hpbGUgdGFyZ2V0aW5nIGFub3RoZXIgcHJvamVjdCBkaXJlY3RvcnkuXG4gIGlmICghcHJvY2Vzcy5lbnYuV09SS0ZMT1dfT0JTRVJWQUJJTElUWV9DV0QpIHtcbiAgICB3cml0ZUVudlZhcnMoeyBXT1JLRkxPV19PQlNFUlZBQklMSVRZX0NXRDogY3dkIH0pO1xuICB9XG5cbiAgLy8gU2V0IGRlZmF1bHQgYmFzZSBVUkwgZm9yIGxvY2FsIHF1ZXVlIGlmIG5vdCBhbHJlYWR5IGNvbmZpZ3VyZWRcbiAgLy8gV2UgdXNlIFdPUktGTE9XX0xPQ0FMX0JBU0VfVVJMIGluc3RlYWQgb2YgUE9SVCB0byBhdm9pZCBjb25mbGljdHNcbiAgLy8gd2l0aCBvdGhlciB0b29scyAobGlrZSBOZXh0LmpzKSB0aGF0IGFsc28gdXNlIHRoZSBQT1JUIGVudiB2YXJcbiAgaWYgKCFlbnZWYXJzLldPUktGTE9XX0xPQ0FMX0JBU0VfVVJMICYmICFlbnZWYXJzLlBPUlQpIHtcbiAgICBsb2dnZXIuZGVidWcoXG4gICAgICAnVXNpbmcgZGVmYXVsdCBxdWV1ZSB0YXJnZXQgaHR0cDovL2xvY2FsaG9zdDozMDAwLCBzZXQgV09SS0ZMT1dfTE9DQUxfQkFTRV9VUkwgb3IgUE9SVCB0byBvdmVycmlkZS4nXG4gICAgKTtcbiAgICBlbnZWYXJzLldPUktGTE9XX0xPQ0FMX0JBU0VfVVJMID0gJ2h0dHA6Ly9sb2NhbGhvc3Q6MzAwMCc7XG4gICAgd3JpdGVFbnZWYXJzKGVudlZhcnMpO1xuICB9XG5cbiAgLy8gSW5mZXIgd29ya2Zsb3cgZGF0YSBkaXJlY3RvcnlcbiAgaWYgKCFlbnZWYXJzLldPUktGTE9XX0xPQ0FMX0RBVEFfRElSKSB7XG4gICAgY29uc3QgbG9jYWxSZXN1bHQgPSBhd2FpdCBmaW5kV29ya2Zsb3dEYXRhRGlyKGN3ZCk7XG4gICAgaWYgKGxvY2FsUmVzdWx0LmRhdGFEaXIpIHtcbiAgICAgIGxvZ2dlci5kZWJ1ZygnRm91bmQgd29ya2Zsb3cgZGF0YSBkaXJlY3Rvcnk6JywgbG9jYWxSZXN1bHQuZGF0YURpcik7XG4gICAgICBlbnZWYXJzLldPUktGTE9XX0xPQ0FMX0RBVEFfRElSID0gbG9jYWxSZXN1bHQuZGF0YURpcjtcbiAgICAgIHdyaXRlRW52VmFycyhlbnZWYXJzKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gQXMgYSBmYWxsYmFjaywgZmluZCB0aGUgcmVwbyByb290LCBhbmQgdHJ5IHRvIGluZmVyIHRoZSBkYXRhIGRpciBmcm9tIHRoZXJlXG4gICAgICByZXBvUm9vdCA9IGF3YWl0IGZpbmRSZXBvUm9vdChjd2QsIGN3ZCk7XG4gICAgICBpZiAocmVwb1Jvb3QpIHtcbiAgICAgICAgY29uc3QgcmVwb1Jlc3VsdCA9IGF3YWl0IGZpbmRXb3JrZmxvd0RhdGFEaXIocmVwb1Jvb3QpO1xuICAgICAgICBpZiAocmVwb1Jlc3VsdC5kYXRhRGlyKSB7XG4gICAgICAgICAgbG9nZ2VyLmRlYnVnKCdGb3VuZCB3b3JrZmxvdyBkYXRhIGRpcmVjdG9yeTonLCByZXBvUmVzdWx0LmRhdGFEaXIpO1xuICAgICAgICAgIGVudlZhcnMuV09SS0ZMT1dfTE9DQUxfREFUQV9ESVIgPSByZXBvUmVzdWx0LmRhdGFEaXI7XG4gICAgICAgICAgd3JpdGVFbnZWYXJzKGVudlZhcnMpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoIWVudlZhcnMuV09SS0ZMT1dfTE9DQUxfREFUQV9ESVIpIHtcbiAgICAgICAgY29uc3QgbWVzc2FnZSA9IGBObyB3b3JrZmxvdyBkYXRhIGRpcmVjdG9yeSBmb3VuZCBpbiBcIiR7Y3dkfVwiLiBIYXZlIHlvdSBydW4gYW55IHdvcmtmbG93cyB5ZXQ/YDtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKG1lc3NhZ2UpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIEluZmVyIHdvcmtmbG93IG1hbmlmZXN0IHBhdGggKGZvciBHcmFwaCB0YWIgaW4gd2ViIFVJKVxuICBpZiAoIWVudlZhcnMuV09SS0ZMT1dfTUFOSUZFU1RfUEFUSCkge1xuICAgIGNvbnN0IGxvY2FsTWFuaWZlc3QgPSBhd2FpdCBmaW5kTWFuaWZlc3RQYXRoKGN3ZCk7XG4gICAgaWYgKGxvY2FsTWFuaWZlc3QpIHtcbiAgICAgIGVudlZhcnMuV09SS0ZMT1dfTUFOSUZFU1RfUEFUSCA9IGxvY2FsTWFuaWZlc3Q7XG4gICAgICB3cml0ZUVudlZhcnMoZW52VmFycyk7XG4gICAgICBsb2dnZXIuZGVidWcoYEZvdW5kIHdvcmtmbG93IG1hbmlmZXN0IGF0OiAke2xvY2FsTWFuaWZlc3R9YCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIEFzIGEgZmFsbGJhY2ssIGZpbmQgdGhlIHJlcG8gcm9vdCwgYW5kIHRyeSB0byBpbmZlciB0aGUgbWFuaWZlc3QgZnJvbSB0aGVyZVxuICAgICAgaWYgKCFyZXBvUm9vdCkge1xuICAgICAgICByZXBvUm9vdCA9IGF3YWl0IGZpbmRSZXBvUm9vdChjd2QsIGN3ZCk7XG4gICAgICB9XG4gICAgICBpZiAocmVwb1Jvb3QpIHtcbiAgICAgICAgY29uc3QgcmVwb01hbmlmZXN0ID0gYXdhaXQgZmluZE1hbmlmZXN0UGF0aChyZXBvUm9vdCk7XG4gICAgICAgIGlmIChyZXBvTWFuaWZlc3QpIHtcbiAgICAgICAgICBlbnZWYXJzLldPUktGTE9XX01BTklGRVNUX1BBVEggPSByZXBvTWFuaWZlc3Q7XG4gICAgICAgICAgd3JpdGVFbnZWYXJzKGVudlZhcnMpO1xuICAgICAgICAgIGxvZ2dlci5kZWJ1ZyhgRm91bmQgd29ya2Zsb3cgbWFuaWZlc3QgYXQ6ICR7cmVwb01hbmlmZXN0fWApO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIEl0J3Mgb2theSBpZiBtYW5pZmVzdCBpcyBub3QgZm91bmQgLSB0aGUgd2ViIFVJIHdpbGwganVzdCBzaG93IGVtcHR5IHdvcmtmbG93c1xuICAgICAgaWYgKCFlbnZWYXJzLldPUktGTE9XX01BTklGRVNUX1BBVEgpIHtcbiAgICAgICAgbG9nZ2VyLmRlYnVnKFxuICAgICAgICAgICdObyB3b3JrZmxvdyBtYW5pZmVzdCBmb3VuZC4gV29ya2Zsb3dzIHRhYiB3aWxsIGJlIGVtcHR5LidcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn07XG5cbmV4cG9ydCBjb25zdCBpbmZlclZlcmNlbFByb2plY3RBbmRUZWFtID0gYXN5bmMgKCkgPT4ge1xuICBjb25zdCBjd2QgPSBnZXRXb3JrZmxvd0NvbmZpZygpLndvcmtpbmdEaXI7XG4gIGxldCBwcm9qZWN0OiBQcm9qZWN0TGluayB8IG51bGwgPSBudWxsO1xuICB0cnkge1xuICAgIGxvZ2dlci5kZWJ1ZyhgSW5mZXJyaW5nIHByb2plY3QgYW5kIHRlYW0gZnJvbSBDV0Q6ICR7Y3dkfWApO1xuICAgIHByb2plY3QgPSBhd2FpdCBnZXRQcm9qZWN0TGluayhjd2QpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGlmICghaXNPbmVPZkVyck5vRXhjZXB0aW9ucyhlcnJvciwgWydFTk9FTlQnXSkpIHtcbiAgICAgIHRocm93IGVycm9yO1xuICAgIH1cbiAgfVxuICBpZiAoIXByb2plY3QpIHtcbiAgICBsb2dnZXIuZGVidWcoJ0NvdWxkIG5vdCBmaW5kIHByb2plY3QgbGluayBmb2xkZXInKTtcbiAgICByZXR1cm47XG4gIH1cbiAgbG9nZ2VyLmRlYnVnKGBGb3VuZCBwcm9qZWN0ICR7cHJvamVjdC5wcm9qZWN0SWR9IGFuZCB0ZWFtICR7cHJvamVjdC5vcmdJZH1gKTtcbiAgcmV0dXJuIHtcbiAgICBwcm9qZWN0SWQ6IHByb2plY3QucHJvamVjdElkLFxuICAgIHByb2plY3ROYW1lOiBwcm9qZWN0LnByb2plY3ROYW1lLFxuICAgIHRlYW1JZDogcHJvamVjdC5vcmdJZCxcbiAgfTtcbn07XG5cbmV4cG9ydCBpbnRlcmZhY2UgVmVyY2VsRW52VmFycyB7XG4gIHRva2VuPzogc3RyaW5nO1xuICBlbnZpcm9ubWVudD86IHN0cmluZztcbiAgcHJvamVjdElkPzogc3RyaW5nO1xuICBwcm9qZWN0TmFtZT86IHN0cmluZztcbiAgdGVhbUlkPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIEluZmVycyBWZXJjZWwgV29ybGQgY29uZmlndXJhdGlvbiBmcm9tIHRoZSBsb2NhbCBlbnZpcm9ubWVudCAoYC52ZXJjZWxgXG4gKiBmb2xkZXIsIENMSSBhdXRoIGZpbGUsIFZlcmNlbCBBUEkpIGFuZCByZXR1cm5zIGEgcmVzb2x2ZWQgY29uZmlnIG9iamVjdC5cbiAqXG4gKiBBbHNvIHdyaXRlcyB0aGUgcmVzb2x2ZWQgdmFsdWVzIHRvIGBwcm9jZXNzLmVudmAgc28gdGhlIGVtYmVkZGVkIHdlYiBVSVxuICogKHdoaWNoIHJlYWRzIGBwcm9jZXNzLmVudmAgYXMgYSBmYWxsYmFjaykgY2FuIHBpY2sgdGhlbSB1cC5cbiAqL1xuZXhwb3J0IGNvbnN0IGluZmVyVmVyY2VsRW52VmFycyA9IGFzeW5jICgpOiBQcm9taXNlPFZlcmNlbEVudlZhcnM+ID0+IHtcbiAgY29uc3QgZW52VmFycyA9IGdldEVudlZhcnMoKTtcblxuICAvLyBJbmZlciBwcm9qZWN0L3RlYW0gZnJvbSAudmVyY2VsIGZvbGRlciB3aGVuOlxuICAvLyAtIFdPUktGTE9XX1ZFUkNFTF9QUk9KRUNUIG9yIFdPUktGTE9XX1ZFUkNFTF9URUFNIGlzIG1pc3NpbmcsIE9SXG4gIC8vIC0gV09SS0ZMT1dfVkVSQ0VMX1BST0pFQ1QgaXMgc2V0IGJ1dCBkb2Vzbid0IGxvb2sgbGlrZSBhIHJlYWwgcHJvamVjdCBJRFxuICAvLyAgIChlLmcuLCB1c2VyIHBhc3NlZCBhIHNsdWcgdmlhIC0tcHJvamVjdCBmbGFnKSwgT1JcbiAgLy8gLSBXT1JLRkxPV19WRVJDRUxfUFJPSkVDVF9OQU1FIGlzIG1pc3NpbmcgKG5lZWQgdG8gcG9wdWxhdGUgdGhlIHNsdWcpXG4gIGNvbnN0IG5lZWRzSW5mZXJlbmNlID1cbiAgICAhZW52VmFycy5XT1JLRkxPV19WRVJDRUxfUFJPSkVDVCB8fFxuICAgICFlbnZWYXJzLldPUktGTE9XX1ZFUkNFTF9URUFNIHx8XG4gICAgIWVudlZhcnMuV09SS0ZMT1dfVkVSQ0VMX1BST0pFQ1RfTkFNRSB8fFxuICAgICFlbnZWYXJzLldPUktGTE9XX1ZFUkNFTF9QUk9KRUNULnN0YXJ0c1dpdGgoJ3Byal8nKTtcblxuICBpZiAobmVlZHNJbmZlcmVuY2UpIHtcbiAgICBsb2dnZXIuZGVidWcoJ0luZmVycmluZyB2ZXJjZWwgcHJvamVjdCBhbmQgdGVhbSBmcm9tIC52ZXJjZWwgZm9sZGVyJyk7XG4gICAgY29uc3QgaW5mZXJyZWRQcm9qZWN0ID0gYXdhaXQgaW5mZXJWZXJjZWxQcm9qZWN0QW5kVGVhbSgpO1xuICAgIGlmIChpbmZlcnJlZFByb2plY3QpIHtcbiAgICAgIGNvbnN0IHsgcHJvamVjdElkLCBwcm9qZWN0TmFtZSwgdGVhbUlkIH0gPSBpbmZlcnJlZFByb2plY3Q7XG4gICAgICAvLyBXT1JLRkxPV19WRVJDRUxfUFJPSkVDVCBpcyB0aGUgcmVhbCBwcm9qZWN0IElEIChlLmcuLCBwcmpfeHh4KVxuICAgICAgZW52VmFycy5XT1JLRkxPV19WRVJDRUxfUFJPSkVDVCA9IHByb2plY3RJZDtcbiAgICAgIC8vIFdPUktGTE9XX1ZFUkNFTF9QUk9KRUNUX05BTUUgaXMgdGhlIHByb2plY3Qgc2x1ZyAoZS5nLiwgbXktYXBwKVxuICAgICAgZW52VmFycy5XT1JLRkxPV19WRVJDRUxfUFJPSkVDVF9OQU1FID0gcHJvamVjdE5hbWUgfHwgcHJvamVjdElkO1xuICAgICAgZW52VmFycy5XT1JLRkxPV19WRVJDRUxfVEVBTSA9IGVudlZhcnMuV09SS0ZMT1dfVkVSQ0VMX1RFQU0gfHwgdGVhbUlkO1xuICAgIH0gZWxzZSB7XG4gICAgICBsb2dnZXIud2FybihcbiAgICAgICAgJ0NvdWxkIG5vdCBpbmZlciB2ZXJjZWwgcHJvamVjdCBhbmQgdGVhbSBmcm9tIC52ZXJjZWwgZm9sZGVyLCBzZXJ2ZXIgYXV0aGVudGljYXRpb24gbWlnaHQgZmFpbC4nXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIGlmICghZW52VmFycy5XT1JLRkxPV19WRVJDRUxfQVVUSF9UT0tFTikge1xuICAgIGxvZ2dlci5kZWJ1ZygnSW5mZXJyaW5nIHZlcmNlbCBhdXRoIHRva2VuIGZyb20gQ0xJIGF1dGggZmlsZScpO1xuICAgIGNvbnN0IHRva2VuID0gYXdhaXQgZ2V0QXV0aFRva2VuKCk7XG4gICAgaWYgKCF0b2tlbikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdDb3VsZCBub3QgZmluZCBjcmVkZW50aWFscy4gUnVuIGB2YyBsb2dpbmAgdG8gbG9nIGluLicpO1xuICAgIH1cbiAgICBlbnZWYXJzLldPUktGTE9XX1ZFUkNFTF9BVVRIX1RPS0VOID0gdG9rZW47XG4gIH1cblxuICAvLyBGZXRjaCB0ZWFtIGluZm9ybWF0aW9uIGZyb20gVmVyY2VsIEFQSSB0byBnZXQgdGhlIHRlYW0gc2x1Z1xuICAvLyBUT0RPOiBTYWRseSwgaW4gb3JkZXIgdG8gcmVkaXJlY3QgdG8gVmVyY2VsIGRhc2hib2FyZCBjb3JyZWN0bHksIHdlIG5lZWQgdG9cbiAgLy8gcmVzb2x2ZSB0aGUgdGVhbSBuYW1lLCB3aGljaCBpcyBhIHdob2xlIEFQSSByZXF1ZXN0LiBUaGUgYWx0ZXJuYXRpdmUgd291bGQgYmUgdG9cbiAgLy8gY2hhbmdlIGZyb250IHRvIGFsbG93IHBhc3NpbmcgaW4gdGhlIHRlYW0gc2x1ZyBkaXJlY3RseSwgb3IgYWRkIHNvbWUgZ2VuZXJpYyByZWRpcmVjdC5cbiAgaWYgKGVudlZhcnMuV09SS0ZMT1dfVkVSQ0VMX1RFQU0gJiYgZW52VmFycy5XT1JLRkxPV19WRVJDRUxfQVVUSF9UT0tFTikge1xuICAgIGxvZ2dlci5pbmZvKCdWZXJjZWwgcHJvamVjdCBkZXRlY3RlZC4gTG9hZGluZyBwcm9qZWN0IGRhdGEuLi4nKTtcbiAgICBsb2dnZXIuZGVidWcoJ0ZldGNoaW5nIHRlYW0gaW5mb3JtYXRpb24gZnJvbSBWZXJjZWwgQVBJJyk7XG4gICAgY29uc3QgdGVhbUluZm8gPSBhd2FpdCBmZXRjaFRlYW1JbmZvKFxuICAgICAgZW52VmFycy5XT1JLRkxPV19WRVJDRUxfVEVBTSxcbiAgICAgIGVudlZhcnMuV09SS0ZMT1dfVkVSQ0VMX0FVVEhfVE9LRU5cbiAgICApO1xuICAgIGlmICh0ZWFtSW5mbykge1xuICAgICAgZW52VmFycy5XT1JLRkxPV19WRVJDRUxfVEVBTSA9IHRlYW1JbmZvLnRlYW1TbHVnO1xuICAgICAgbG9nZ2VyLmRlYnVnKGBGb3VuZCB0ZWFtIHNsdWc6ICR7dGVhbUluZm8udGVhbVNsdWd9YCk7XG4gICAgfVxuICB9XG5cbiAgLy8gV3JpdGUgcmVzb2x2ZWQgdmFsdWVzIHRvIHByb2Nlc3MuZW52IGZvciB0aGUgZW1iZWRkZWQgd2ViIFVJLCB3aGljaFxuICAvLyByZWFkcyB0aGVtIGFzIGZhbGxiYWNrcyBpbiBpdHMgc2VydmVyIGFjdGlvbnMuXG4gIHdyaXRlRW52VmFycyhlbnZWYXJzKTtcblxuICByZXR1cm4ge1xuICAgIHRva2VuOiBlbnZWYXJzLldPUktGTE9XX1ZFUkNFTF9BVVRIX1RPS0VOIHx8IHVuZGVmaW5lZCxcbiAgICBlbnZpcm9ubWVudDogZW52VmFycy5XT1JLRkxPV19WRVJDRUxfRU5WIHx8IHVuZGVmaW5lZCxcbiAgICBwcm9qZWN0SWQ6IGVudlZhcnMuV09SS0ZMT1dfVkVSQ0VMX1BST0pFQ1QgfHwgdW5kZWZpbmVkLFxuICAgIHByb2plY3ROYW1lOiBlbnZWYXJzLldPUktGTE9XX1ZFUkNFTF9QUk9KRUNUX05BTUUgfHwgdW5kZWZpbmVkLFxuICAgIHRlYW1JZDogZW52VmFycy5XT1JLRkxPV19WRVJDRUxfVEVBTSB8fCB1bmRlZmluZWQsXG4gIH07XG59O1xuIl19
|
|
@@ -15,4 +15,12 @@ export declare const cliFlags: {
|
|
|
15
15
|
limit: import("@oclif/core/interfaces").OptionFlag<number, import("@oclif/core/interfaces").CustomOptions>;
|
|
16
16
|
interactive: import("@oclif/core/interfaces").BooleanFlag<boolean>;
|
|
17
17
|
};
|
|
18
|
+
/**
|
|
19
|
+
* Flag for printing a shareable deep-link URL instead of opening the web UI.
|
|
20
|
+
* Only relevant to commands that can open a dashboard (`inspect`, `web`), so it
|
|
21
|
+
* is exported separately rather than bundled into `cliFlags`.
|
|
22
|
+
*/
|
|
23
|
+
export declare const urlFlag: {
|
|
24
|
+
url: import("@oclif/core/interfaces").BooleanFlag<boolean>;
|
|
25
|
+
};
|
|
18
26
|
//# sourceMappingURL=flags.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"flags.d.ts","sourceRoot":"","sources":["../../../src/lib/inspect/flags.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,QAAQ;;;;;;;;;;;;;;;;CAgJpB,CAAC"}
|
|
1
|
+
{"version":3,"file":"flags.d.ts","sourceRoot":"","sources":["../../../src/lib/inspect/flags.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,QAAQ;;;;;;;;;;;;;;;;CAgJpB,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,OAAO;;CASnB,CAAC"}
|
|
@@ -140,4 +140,18 @@ export const cliFlags = {
|
|
|
140
140
|
helpLabel: '-i, --interactive',
|
|
141
141
|
}),
|
|
142
142
|
};
|
|
143
|
-
|
|
143
|
+
/**
|
|
144
|
+
* Flag for printing a shareable deep-link URL instead of opening the web UI.
|
|
145
|
+
* Only relevant to commands that can open a dashboard (`inspect`, `web`), so it
|
|
146
|
+
* is exported separately rather than bundled into `cliFlags`.
|
|
147
|
+
*/
|
|
148
|
+
export const urlFlag = {
|
|
149
|
+
url: Flags.boolean({
|
|
150
|
+
description: 'Print the deep-link URL to the run/dashboard and exit (no browser, no server)',
|
|
151
|
+
required: false,
|
|
152
|
+
default: false,
|
|
153
|
+
helpGroup: 'Output',
|
|
154
|
+
helpLabel: '--url',
|
|
155
|
+
}),
|
|
156
|
+
};
|
|
157
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmxhZ3MuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL2luc3BlY3QvZmxhZ3MudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUVwQyxNQUFNLENBQUMsTUFBTSxRQUFRLEdBQUc7SUFDdEIsT0FBTyxFQUFFLEtBQUssQ0FBQyxPQUFPLENBQUM7UUFDckIsV0FBVyxFQUFFLGdCQUFnQjtRQUM3QixRQUFRLEVBQUUsS0FBSztRQUNmLElBQUksRUFBRSxHQUFHO1FBQ1QsU0FBUyxFQUFFLFFBQVE7UUFDbkIsU0FBUyxFQUFFLGVBQWU7UUFDMUIsR0FBRyxFQUFFLE9BQU87UUFDWixPQUFPLEVBQUUsS0FBSztLQUNmLENBQUM7SUFDRixJQUFJLEVBQUUsS0FBSyxDQUFDLE9BQU8sQ0FBQztRQUNsQixXQUFXLEVBQUUsc0RBQXNEO1FBQ25FLFFBQVEsRUFBRSxLQUFLO1FBQ2YsSUFBSSxFQUFFLEdBQUc7UUFDVCxPQUFPLEVBQUUsS0FBSztRQUNkLFNBQVMsRUFBRSxRQUFRO1FBQ25CLFNBQVMsRUFBRSxZQUFZO0tBQ3hCLENBQUM7SUFDRixNQUFNLEVBQUUsS0FBSyxDQUFDLE1BQU0sQ0FBQztRQUNuQixXQUFXLEVBQUUscUNBQXFDO1FBQ2xELFFBQVEsRUFBRSxLQUFLO1FBQ2YsT0FBTyxFQUFFLEVBQUU7UUFDWCxTQUFTLEVBQUUsV0FBVztRQUN0QixTQUFTLEVBQUUsVUFBVTtRQUNyQixTQUFTLEVBQUUsUUFBUTtLQUNwQixDQUFDO0lBQ0YsT0FBTyxFQUFFLEtBQUssQ0FBQyxNQUFNLENBQUM7UUFDcEIsV0FBVyxFQUFFLG9CQUFvQjtRQUNqQyxRQUFRLEVBQUUsS0FBSztRQUNmLElBQUksRUFBRSxHQUFHO1FBQ1QsT0FBTyxFQUFFLE9BQU87UUFDaEIsR0FBRyxFQUFFLHVCQUF1QjtRQUM1QixTQUFTLEVBQUUsUUFBUTtRQUNuQixTQUFTLEVB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Y29yZSc7XG5cbmV4cG9ydCBjb25zdCBjbGlGbGFncyA9IHtcbiAgdmVyYm9zZTogRmxhZ3MuYm9vbGVhbih7XG4gICAgZGVzY3JpcHRpb246ICdWZXJib3NlIG91dHB1dCcsXG4gICAgcmVxdWlyZWQ6IGZhbHNlLFxuICAgIGNoYXI6ICd2JyxcbiAgICBoZWxwR3JvdXA6ICdPdXRwdXQnLFxuICAgIGhlbHBMYWJlbDogJy12LCAtLXZlcmJvc2UnLFxuICAgIGVudjogJ0RFQlVHJyxcbiAgICBkZWZhdWx0OiBmYWxzZSxcbiAgfSksXG4gIGpzb246IEZsYWdzLmJvb2xlYW4oe1xuICAgIGRlc2NyaXB0aW9uOiAnb3V0cHV0IEpTT04gaW5zdGVhZCBvZiBodW1hbi1yZWFkYWJsZSB0YWJsZXMvc3RyZWFtcycsXG4gICAgcmVxdWlyZWQ6IGZhbHNlLFxuICAgIGNoYXI6ICdqJyxcbiAgICBkZWZhdWx0OiBmYWxzZSxcbiAgICBoZWxwR3JvdXA6ICdPdXRwdXQnLFxuICAgIGhlbHBMYWJlbDogJy1qLCAtLWpzb24nLFxuICB9KSxcbiAgY3Vyc29yOiBGbGFncy5zdHJpbmcoe1xuICAgIGRlc2NyaXB0aW9uOiAncGFnaW5hdGlvbiBjdXJzb3IgZm9yIGxpc3QgY29tbWFuZHMnLFxuICAgIHJlcXVpcmVkOiBmYWxzZSxcbiAgICBkZWZhdWx0OiAnJyxcbiAgICBoZWxwR3JvdXA6ICdGaWx0ZXJpbmcnLFxuICAgIGhlbHBMYWJlbDogJy0tY3Vyc29yJyxcbiAgICBoZWxwVmFsdWU6ICdDVVJTT1InLFxuICB9KSxcbiAgYmFja2VuZDogRmxhZ3Muc3RyaW5nKHtcbiAgICBkZXNjcmlwdGlvbjogJ2JhY2tlbmQgdG8gaW5zcGVjdCcsXG4gICAgcmVxdWlyZWQ6IGZhbHNlLFxuICAgIGNoYXI6ICdiJyxcbiAgICBkZWZhdWx0OiAnbG9jYWwnLFxuICAgIGVudjogJ1dPUktGTE9XX1RBUkdFVF9XT1JMRCcsXG4gICAgaGVscEdyb3VwOiAnVGFyZ2V0JyxcbiAgICBoZWxwTGFiZWw6ICctYiwgLS1iYWNrZW5kJyxcbiAgICBoZWxwVmFsdWU6IFsnbG9jYWwnLCAndmVyY2VsJywgJzx5b3VyLXBhY2thZ2UtbmFtZT4nXSxcbiAgICBkZWZhdWx0SGVscDogJ2xvY2FsJyxcbiAgfSksXG4gIGF1dGhUb2tlbjogRmxhZ3Muc3RyaW5nKHtcbiAgICBkZXNjcmlwdGlvbjpcbiAgICAgICdBdXRoZW50aWNhdGlvbiB0b2tlbiB0byBiZSBwYXNzZWQgdG8gdGhlIGJhY2tlbmQuIElmIG5vdCBwcm92aWRlZCBhbmQgdGhlIGJhY2tlbmQgaXMgdmVyY2VsLCB3aWxsIGZhbGwgYmFjayB0byB0aGUgdG9rZW4gZ2VuZXJhdGVkIGJ5IGB2YyBsb2dpbmAuJyxcbiAgICByZXF1aXJlZDogZmFsc2UsXG4gICAgY2hhcjogJ2EnLFxuICAgIGRlcGVuZHNPbjogWydiYWNrZW5kJ10sXG4gICAgZGVmYXVsdDogJycsXG4gICAgZW52OiAnV09SS0ZMT1dfVkVSQ0VMX0FVVEhfVE9LRU4nLFxuICAgIGhlbHBHcm91cDogJ1RhcmdldCcsXG4gICAgaGVscExhYmVsOiAnLWEsIC0tYXV0aFRva2VuJyxcbiAgICBoZWxwVmFsdWU6ICdUT0tFTicsXG4gIH0pLFxuICBwcm9qZWN0OiBGbGFncy5zdHJpbmcoe1xuICAgIGRlc2NyaXB0aW9uOlxuICAgICAgJ0lmIGJhY2tlbmQgaXMgdmVyY2VsLCB0aGUgdmVyY2VsIHByb2plY3QgdG8gYXV0aGVudGljYXRlIGFnYWluc3QnLFxuICAgIHJlcXVpcmVkOiBmYWxzZSxcbiAgICBkZWZhdWx0OiAnJyxcbiAgICBkZXBlbmRzT246IFsnYmFja2VuZCddLFxuICAgIGVudjogJ1dPUktGTE9XX1ZFUkNFTF9QUk9KRUNUJyxcbiAgICBoZWxwR3JvdXA6ICdUYXJnZXQnLFxuICAgIGhlbHBMYWJlbDogJy0tcHJvamVjdCcsXG4gICAgaGVscFZhbHVlOiAnUFJPSkVDVCcsXG4gIH0pLFxuICB0ZWFtOiBGbGFncy5zdHJpbmcoe1xuICAgIGRlc2NyaXB0aW9uOlxuICAgICAgJ0lmIGJhY2tlbmQgaXMgdmVyY2VsLCB0aGUgdmVyY2VsIHRlYW0gdG8gYXV0aGVudGljYXRlIGFnYWluc3QnLFxuICAgIHJlcXVpcmVkOiBmYWxzZSxcbiAgICBkZXBlbmRzT246IFsnYmFja2VuZCddLFxuICAgIGRlZmF1bHQ6ICcnLFxuICAgIGVudjogJ1dPUktGTE9XX1ZFUkNFTF9URUFNJyxcbiAgICBoZWxwR3JvdXA6ICdUYXJnZXQnLFxuICAgIGhlbHBMYWJlbDogJy0tdGVhbScsXG4gICAgaGVscFZhbHVlOiAnVEVBTScsXG4gIH0pLFxuICBlbnY6IEZsYWdzLnN0cmluZyh7XG4gICAgZGVzY3JpcHRpb246ICdJZiBiYWNrZW5kIGlzIHZlcmNlbCwgdGhlIHZlcmNlbCBlbnZpcm9ubWVudCB0byB1c2UnLFxuICAgIHJlcXVpcmVkOiBmYWxzZSxcbiAgICBvcHRpb25zOiBbJ3Byb2R1Y3Rpb24nLCAncHJldmlldyddLFxuICAgIGRlZmF1bHQ6ICdwcm9kdWN0aW9uJyxcbiAgICBjaGFyOiAnZScsXG4gICAgZGVwZW5kc09uOiBbJ2JhY2tlbmQnXSxcbiAgICBlbnY6ICdXT1JLRkxPV19WRVJDRUxfRU5WJyxcbiAgICBoZWxwR3JvdXA6ICdUYXJnZXQnLFxuICAgIGhlbHBMYWJlbDogJy1lLCAtLWVudicsXG4gICAgaGVscFZhbHVlOiBbJ3Byb2R1Y3Rpb24nLCAncHJldmlldyddLFxuICAgIGRlZmF1bHRIZWxwOiAncHJvZHVjdGlvbicsXG4gIH0pLFxuICB3ZWI6IEZsYWdzLmJvb2xlYW4oe1xuICAgIGRlc2NyaXB0aW9uOiAnT3BlbiB0aGUgd2ViIFVJIGluc3RlYWQgb2YgZGlzcGxheWluZyBpbiB0ZXJtaW5hbCcsXG4gICAgcmVxdWlyZWQ6IGZhbHNlLFxuICAgIGNoYXI6ICd3JyxcbiAgICBkZWZhdWx0OiBmYWxzZSxcbiAgICBoZWxwR3JvdXA6ICdPdXRwdXQnLFxuICAgIGhlbHBMYWJlbDogJy13LCAtLXdlYicsXG4gIH0pLFxuICB3ZWJQb3J0OiBGbGFncy5pbnRlZ2VyKHtcbiAgICBkZXNjcmlwdGlvbjogJ1BvcnQgdG8gdXNlIHdoZW4gbGF1bmNoaW5nIHRoZSB3ZWIgVUkgKGRlZmF1bHQ6IDM0NTYpJyxcbiAgICByZXF1aXJlZDogZmFsc2UsXG4gICAgZGVmYXVsdDogMzQ1NixcbiAgICBoZWxwR3JvdXA6ICdPdXRwdXQnLFxuICAgIGhlbHBMYWJlbDogJy0td2ViUG9ydCcsXG4gICAgaGVscFZhbHVlOiAnV0VCX1BPUlQnLFxuICAgIGVudjogJ1dPUktGTE9XX1dFQl9QT1JUJyxcbiAgfSksXG4gIG5vQnJvd3NlcjogRmxhZ3MuYm9vbGVhbih7XG4gICAgZGVzY3JpcHRpb246ICdEaXNhYmxlIGF1dG9tYXRpYyBicm93c2VyIG9wZW5pbmcgd2hlbiBsYXVuY2hpbmcgd2ViIFVJJyxcbiAgICByZXF1aXJlZDogZmFsc2UsXG4gICAgZGVmYXVsdDogZmFsc2UsXG4gICAgZW52OiAnV09SS0ZMT1dfRElTQUJMRV9CUk9XU0VSX09QRU4nLFxuICAgIGhlbHBHcm91cDogJ091dHB1dCcsXG4gICAgaGVscExhYmVsOiAnLS1ub0Jyb3dzZXInLFxuICB9KSxcbiAgbG9jYWxVaTogRmxhZ3MuYm9vbGVhbih7XG4gICAgZGVzY3JpcHRpb246XG4gICAgICAnVXNlIGxvY2FsIHdlYiBVSSBpbnN0ZWFkIG9mIFZlcmNlbCBkYXNoYm9hcmQgKHdoZW4gYmFja2VuZCBpcyB2ZXJjZWwpJyxcbiAgICByZXF1aXJlZDogZmFsc2UsXG4gICAgZGVmYXVsdDogZmFsc2UsXG4gICAgZW52OiAnV09SS0ZMT1dfTE9DQUxfVUknLFxuICAgIGhlbHBHcm91cDogJ091dHB1dCcsXG4gICAgaGVscExhYmVsOiAnLS1sb2NhbFVpJyxcbiAgfSksXG4gIHNvcnQ6IEZsYWdzLnN0cmluZyh7XG4gICAgZGVzY3JpcHRpb246ICdzb3J0IG9yZGVyIGZvciBsaXN0IGNvbW1hbmRzJyxcbiAgICByZXF1aXJlZDogZmFsc2UsXG4gICAgb3B0aW9uczogWydhc2MnLCAnZGVzYyddLFxuICAgIGRlZmF1bHQ6ICdkZXNjJyxcbiAgICBoZWxwR3JvdXA6ICdGaWx0ZXJpbmcnLFxuICAgIGhlbHBMYWJlbDogJy0tc29ydCcsXG4gICAgaGVscFZhbHVlOiBbJ2FzYycsICdkZXNjJ10sXG4gICAgZGVmYXVsdEhlbHA6ICdkZXNjJyxcbiAgfSksXG4gIGxpbWl0OiBGbGFncy5pbnRlZ2VyKHtcbiAgICBkZXNjcmlwdGlvbjogJ251bWJlciBvZiBpdGVtcyB0byByZXR1cm4gcGVyIHBhZ2UnLFxuICAgIHJlcXVpcmVkOiBmYWxzZSxcbiAgICBkZWZhdWx0OiAyMCxcbiAgICBoZWxwR3JvdXA6ICdGaWx0ZXJpbmcnLFxuICAgIGhlbHBMYWJlbDogJy0tbGltaXQnLFxuICAgIGhlbHBWYWx1ZTogJ05VTUJFUicsXG4gIH0pLFxuICBpbnRlcmFjdGl2ZTogRmxhZ3MuYm9vbGVhbih7XG4gICAgZGVzY3JpcHRpb246ICdFbmFibGUgaW50ZXJhY3RpdmUgcGFnaW5hdGlvbiB3aXRoIGtleWJvYXJkIGNvbnRyb2xzJyxcbiAgICByZXF1aXJlZDogZmFsc2UsXG4gICAgY2hhcjogJ2knLFxuICAgIGRlZmF1bHQ6IGZhbHNlLFxuICAgIGhlbHBHcm91cDogJ091dHB1dCcsXG4gICAgaGVscExhYmVsOiAnLWksIC0taW50ZXJhY3RpdmUnLFxuICB9KSxcbn07XG5cbi8qKlxuICogRmxhZyBmb3IgcHJpbnRpbmcgYSBzaGFyZWFibGUgZGVlcC1saW5rIFVSTCBpbnN0ZWFkIG9mIG9wZW5pbmcgdGhlIHdlYiBVSS5cbiAqIE9ubHkgcmVsZXZhbnQgdG8gY29tbWFuZHMgdGhhdCBjYW4gb3BlbiBhIGRhc2hib2FyZCAoYGluc3BlY3RgLCBgd2ViYCksIHNvIGl0XG4gKiBpcyBleHBvcnRlZCBzZXBhcmF0ZWx5IHJhdGhlciB0aGFuIGJ1bmRsZWQgaW50byBgY2xpRmxhZ3NgLlxuICovXG5leHBvcnQgY29uc3QgdXJsRmxhZyA9IHtcbiAgdXJsOiBGbGFncy5ib29sZWFuKHtcbiAgICBkZXNjcmlwdGlvbjpcbiAgICAgICdQcmludCB0aGUgZGVlcC1saW5rIFVSTCB0byB0aGUgcnVuL2Rhc2hib2FyZCBhbmQgZXhpdCAobm8gYnJvd3Nlciwgbm8gc2VydmVyKScsXG4gICAgcmVxdWlyZWQ6IGZhbHNlLFxuICAgIGRlZmF1bHQ6IGZhbHNlLFxuICAgIGhlbHBHcm91cDogJ091dHB1dCcsXG4gICAgaGVscExhYmVsOiAnLS11cmwnLFxuICB9KSxcbn07XG4iXX0=
|
|
@@ -41,6 +41,28 @@ declare class ExpiredDataRef {
|
|
|
41
41
|
}
|
|
42
42
|
/** Check if a value is an ExpiredDataRef (for custom table formatting in CLI) */
|
|
43
43
|
export declare function isExpiredRef(value: unknown): value is ExpiredDataRef;
|
|
44
|
+
/**
|
|
45
|
+
* The set of revivers used by CLI inspect output.
|
|
46
|
+
*
|
|
47
|
+
* Built on top of `getCommonRevivers()` from `@workflow/core` so that the
|
|
48
|
+
* CLI stays in sync with the runtime's reviver set automatically. Without
|
|
49
|
+
* this, every new reviver added to core (e.g. `FatalError`,
|
|
50
|
+
* `RetryableError`, the built-in `Error` subclasses) would silently
|
|
51
|
+
* disappear from CLI output: devalue throws "Unknown type X" for
|
|
52
|
+
* unrecognized reduced types, and `hydrateResourceIO` swallows that error
|
|
53
|
+
* and surfaces the raw `Uint8Array` payload to consumers — which then
|
|
54
|
+
* shows up as `step.error` / `run.error` byte dumps instead of usable
|
|
55
|
+
* `{ message, stack, … }` objects.
|
|
56
|
+
*
|
|
57
|
+
* On top of the common set we layer:
|
|
58
|
+
* - A `toJSON` shim on each Error reviver so non-enumerable
|
|
59
|
+
* `Error.prototype` fields survive `JSON.stringify` for `--json` output
|
|
60
|
+
* while leaving `util.inspect` rendering untouched
|
|
61
|
+
* - `observabilityRevivers` for streams / step+workflow function refs
|
|
62
|
+
* - CLI-specific overrides that produce display-friendly placeholders
|
|
63
|
+
* for `Class` / `Instance` (the runtime versions need full class
|
|
64
|
+
* identity which the CLI doesn't have access to)
|
|
65
|
+
*/
|
|
44
66
|
export declare function getCLIRevivers(): Revivers;
|
|
45
67
|
/**
|
|
46
68
|
* Hydrate the serialized data fields of a resource for CLI display.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hydration.d.ts","sourceRoot":"","sources":["../../../src/lib/inspect/hydration.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,OAAO,EAQL,KAAK,QAAQ,EAEd,MAAM,qCAAqC,CAAC;AAI7C;;;;GAIG;AACH,MAAM,MAAM,qBAAqB,GAC7B,CAAC,CAAC,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC,UAAU,GAAG,SAAS,CAAC,CAAC,GACpD,IAAI,CAAC;AAGT,OAAO,EACL,uBAAuB,EACvB,gBAAgB,EAChB,qBAAqB,EACrB,gBAAgB,EAChB,kBAAkB,EAClB,eAAe,EACf,UAAU,EACV,WAAW,EACX,KAAK,QAAQ,EACb,eAAe,EACf,KAAK,SAAS,EACd,UAAU,GACX,MAAM,qCAAqC,CAAC;AA8B7C;;;;;;GAMG;AACH,cAAM,gBAAgB;IACpB,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,MAAM;IAI1B,MAAM,IAAI,MAAM;IAIhB,QAAQ,IAAI,MAAM;CAGnB;AAKD,mFAAmF;AACnF,wBAAgB,cAAc,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,gBAAgB,CAExE;AAMD;;;;;;GAMG;AACH,cAAM,cAAc;IAClB,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,MAAM;IAI1B,MAAM,IAAI,MAAM;IAIhB,QAAQ,IAAI,MAAM;CAGnB;AAKD,iFAAiF;AACjF,wBAAgB,YAAY,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,cAAc,CAEpE;
|
|
1
|
+
{"version":3,"file":"hydration.d.ts","sourceRoot":"","sources":["../../../src/lib/inspect/hydration.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,OAAO,EAQL,KAAK,QAAQ,EAEd,MAAM,qCAAqC,CAAC;AAI7C;;;;GAIG;AACH,MAAM,MAAM,qBAAqB,GAC7B,CAAC,CAAC,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC,UAAU,GAAG,SAAS,CAAC,CAAC,GACpD,IAAI,CAAC;AAGT,OAAO,EACL,uBAAuB,EACvB,gBAAgB,EAChB,qBAAqB,EACrB,gBAAgB,EAChB,kBAAkB,EAClB,eAAe,EACf,UAAU,EACV,WAAW,EACX,KAAK,QAAQ,EACb,eAAe,EACf,KAAK,SAAS,EACd,UAAU,GACX,MAAM,qCAAqC,CAAC;AA8B7C;;;;;;GAMG;AACH,cAAM,gBAAgB;IACpB,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,MAAM;IAI1B,MAAM,IAAI,MAAM;IAIhB,QAAQ,IAAI,MAAM;CAGnB;AAKD,mFAAmF;AACnF,wBAAgB,cAAc,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,gBAAgB,CAExE;AAMD;;;;;;GAMG;AACH,cAAM,cAAc;IAClB,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,MAAM;IAI1B,MAAM,IAAI,MAAM;IAIhB,QAAQ,IAAI,MAAM;CAGnB;AAKD,iFAAiF;AACjF,wBAAgB,YAAY,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,cAAc,CAEpE;AAwED;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAgB,cAAc,IAAI,QAAQ,CA6DzC;AA8HD;;;;;;;;GAQG;AACH,wBAAsB,iBAAiB,CAAC,CAAC,EACvC,QAAQ,EAAE,CAAC,EACX,WAAW,CAAC,EAAE,qBAAqB,GAClC,OAAO,CAAC,CAAC,CAAC,CASZ"}
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
* `util.inspect.custom` to ClassInstanceRef for pretty CLI output.
|
|
6
6
|
*/
|
|
7
7
|
import { inspect } from 'node:util';
|
|
8
|
-
import { maybeDecrypt } from '@workflow/core/serialization';
|
|
8
|
+
import { getCommonRevivers, maybeDecrypt } from '@workflow/core/serialization';
|
|
9
9
|
import { ClassInstanceRef, extractClassName, hydrateResourceIO as hydrateResourceIOGeneric, isEncryptedData, isExpiredStub, isRunRef, observabilityRevivers, serializedInstanceToRef, } from '@workflow/core/serialization-format';
|
|
10
10
|
import { parseClassName } from '@workflow/utils/parse-name';
|
|
11
11
|
import chalk from 'chalk';
|
|
@@ -87,30 +87,104 @@ export function isExpiredRef(value) {
|
|
|
87
87
|
// ---------------------------------------------------------------------------
|
|
88
88
|
// CLI revivers (Node.js, uses Buffer)
|
|
89
89
|
// ---------------------------------------------------------------------------
|
|
90
|
+
/**
|
|
91
|
+
* The set of reducer keys whose `getCommonRevivers()` output produces a
|
|
92
|
+
* native `Error` instance. We wrap each of these with an additional
|
|
93
|
+
* `toJSON` attachment in CLI mode (see `wrapErrorReviverWithToJSON`).
|
|
94
|
+
*/
|
|
95
|
+
const ERROR_REVIVER_KEYS = [
|
|
96
|
+
'AggregateError',
|
|
97
|
+
'DOMException',
|
|
98
|
+
'Error',
|
|
99
|
+
'EvalError',
|
|
100
|
+
'FatalError',
|
|
101
|
+
'HookConflictError',
|
|
102
|
+
'RangeError',
|
|
103
|
+
'ReferenceError',
|
|
104
|
+
'RetryableError',
|
|
105
|
+
'RuntimeDecryptionError',
|
|
106
|
+
'SyntaxError',
|
|
107
|
+
'TypeError',
|
|
108
|
+
'URIError',
|
|
109
|
+
];
|
|
110
|
+
/**
|
|
111
|
+
* Wraps a runtime Error reviver so that the produced instance carries a
|
|
112
|
+
* non-enumerable `toJSON` method. The runtime revivers return real `Error`
|
|
113
|
+
* instances (good for `util.inspect`, `instanceof`, `toString`, etc.), but
|
|
114
|
+
* `Error.prototype`'s `name` / `message` / `stack` / `cause` are
|
|
115
|
+
* non-enumerable and would be dropped by `JSON.stringify` — which is how
|
|
116
|
+
* the CLI emits its `--json` output. Adding `toJSON` (which `JSON.stringify`
|
|
117
|
+
* calls but `util.inspect` ignores) gives us the best of both worlds:
|
|
118
|
+
* round-tripped errors render cleanly in both modes without the
|
|
119
|
+
* data-versus-display tradeoff that plain-object revivers would force.
|
|
120
|
+
*
|
|
121
|
+
* Subclass-specific enumerable fields (e.g. `RetryableError.retryAfter`,
|
|
122
|
+
* `AggregateError.errors`, `FatalError.fatal`) are picked up automatically
|
|
123
|
+
* via `Object.assign` after the base fields, so we don't have to enumerate
|
|
124
|
+
* them per-subclass.
|
|
125
|
+
*/
|
|
126
|
+
function wrapErrorReviverWithToJSON(reviver) {
|
|
127
|
+
return (value) => {
|
|
128
|
+
const result = reviver(value);
|
|
129
|
+
if (!(result instanceof Error))
|
|
130
|
+
return result;
|
|
131
|
+
Object.defineProperty(result, 'toJSON', {
|
|
132
|
+
value: function () {
|
|
133
|
+
const json = {
|
|
134
|
+
name: this.name,
|
|
135
|
+
message: this.message,
|
|
136
|
+
stack: this.stack,
|
|
137
|
+
};
|
|
138
|
+
if ('cause' in this) {
|
|
139
|
+
json.cause = this.cause;
|
|
140
|
+
}
|
|
141
|
+
// Pick up subclass-specific enumerable fields (e.g. FatalError.fatal,
|
|
142
|
+
// RetryableError.retryAfter, AggregateError.errors).
|
|
143
|
+
Object.assign(json, this);
|
|
144
|
+
return json;
|
|
145
|
+
},
|
|
146
|
+
enumerable: false,
|
|
147
|
+
writable: true,
|
|
148
|
+
configurable: true,
|
|
149
|
+
});
|
|
150
|
+
return result;
|
|
151
|
+
};
|
|
152
|
+
}
|
|
153
|
+
/**
|
|
154
|
+
* The set of revivers used by CLI inspect output.
|
|
155
|
+
*
|
|
156
|
+
* Built on top of `getCommonRevivers()` from `@workflow/core` so that the
|
|
157
|
+
* CLI stays in sync with the runtime's reviver set automatically. Without
|
|
158
|
+
* this, every new reviver added to core (e.g. `FatalError`,
|
|
159
|
+
* `RetryableError`, the built-in `Error` subclasses) would silently
|
|
160
|
+
* disappear from CLI output: devalue throws "Unknown type X" for
|
|
161
|
+
* unrecognized reduced types, and `hydrateResourceIO` swallows that error
|
|
162
|
+
* and surfaces the raw `Uint8Array` payload to consumers — which then
|
|
163
|
+
* shows up as `step.error` / `run.error` byte dumps instead of usable
|
|
164
|
+
* `{ message, stack, … }` objects.
|
|
165
|
+
*
|
|
166
|
+
* On top of the common set we layer:
|
|
167
|
+
* - A `toJSON` shim on each Error reviver so non-enumerable
|
|
168
|
+
* `Error.prototype` fields survive `JSON.stringify` for `--json` output
|
|
169
|
+
* while leaving `util.inspect` rendering untouched
|
|
170
|
+
* - `observabilityRevivers` for streams / step+workflow function refs
|
|
171
|
+
* - CLI-specific overrides that produce display-friendly placeholders
|
|
172
|
+
* for `Class` / `Instance` (the runtime versions need full class
|
|
173
|
+
* identity which the CLI doesn't have access to)
|
|
174
|
+
*/
|
|
90
175
|
export function getCLIRevivers() {
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
const
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
uint8Array.set(buffer);
|
|
97
|
-
return arrayBuffer;
|
|
98
|
-
}
|
|
176
|
+
const baseRevivers = getCommonRevivers(globalThis);
|
|
177
|
+
const errorRevivers = Object.fromEntries(ERROR_REVIVER_KEYS.flatMap((key) => {
|
|
178
|
+
const reviver = baseRevivers[key];
|
|
179
|
+
return reviver ? [[key, wrapErrorReviverWithToJSON(reviver)]] : [];
|
|
180
|
+
}));
|
|
99
181
|
return {
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
const error = new Error(value.message);
|
|
107
|
-
error.name = value.name;
|
|
108
|
-
error.stack = value.stack;
|
|
109
|
-
return error;
|
|
110
|
-
},
|
|
111
|
-
Float32Array: (value) => new Float32Array(reviveArrayBuffer(value)),
|
|
112
|
-
Float64Array: (value) => new Float64Array(reviveArrayBuffer(value)),
|
|
113
|
-
Headers: (value) => new Headers(value),
|
|
182
|
+
...baseRevivers,
|
|
183
|
+
...errorRevivers,
|
|
184
|
+
// O11y-specific revivers (streams, step functions → display objects).
|
|
185
|
+
...observabilityRevivers,
|
|
186
|
+
// Node `Request` / `Response` revivers that don't rely on running an
|
|
187
|
+
// actual fetch handler — used to render request/response IO inline.
|
|
114
188
|
Request: (value) => {
|
|
115
189
|
// biome-ignore lint/complexity/useArrowFunction: arrow functions have no .prototype
|
|
116
190
|
const ctor = { Request: function () { } }.Request;
|
|
@@ -142,14 +216,6 @@ export function getCLIRevivers() {
|
|
|
142
216
|
});
|
|
143
217
|
return obj;
|
|
144
218
|
},
|
|
145
|
-
Int8Array: (value) => new Int8Array(reviveArrayBuffer(value)),
|
|
146
|
-
Int16Array: (value) => new Int16Array(reviveArrayBuffer(value)),
|
|
147
|
-
Int32Array: (value) => new Int32Array(reviveArrayBuffer(value)),
|
|
148
|
-
Map: (value) => new Map(value),
|
|
149
|
-
RegExp: (value) => new RegExp(value.source, value.flags),
|
|
150
|
-
// O11y-specific revivers (streams, step functions → display objects).
|
|
151
|
-
// Spread FIRST so CLI-specific overrides below take precedence.
|
|
152
|
-
...observabilityRevivers,
|
|
153
219
|
// CLI-specific overrides for class instances with inspect.custom
|
|
154
220
|
Class: (value) => `<class:${extractClassName(value.classId)}>`,
|
|
155
221
|
Instance: (value) => {
|
|
@@ -160,13 +226,6 @@ export function getCLIRevivers() {
|
|
|
160
226
|
}
|
|
161
227
|
return new CLIClassInstanceRef(extractClassName(value.classId), value.classId, value.data);
|
|
162
228
|
},
|
|
163
|
-
Set: (value) => new Set(value),
|
|
164
|
-
URL: (value) => new URL(value),
|
|
165
|
-
URLSearchParams: (value) => new URLSearchParams(value === '.' ? '' : value),
|
|
166
|
-
Uint8Array: (value) => new Uint8Array(reviveArrayBuffer(value)),
|
|
167
|
-
Uint8ClampedArray: (value) => new Uint8ClampedArray(reviveArrayBuffer(value)),
|
|
168
|
-
Uint16Array: (value) => new Uint16Array(reviveArrayBuffer(value)),
|
|
169
|
-
Uint32Array: (value) => new Uint32Array(reviveArrayBuffer(value)),
|
|
170
229
|
};
|
|
171
230
|
}
|
|
172
231
|
// ---------------------------------------------------------------------------
|
|
@@ -287,4 +346,4 @@ export async function hydrateResourceIO(resource, keyResolver) {
|
|
|
287
346
|
// Post-process: swap encrypted Uint8Arrays and expired stubs for CLI-styled objects
|
|
288
347
|
return replaceEncryptedAndExpiredWithRef(hydrated);
|
|
289
348
|
}
|
|
290
|
-
//# sourceMappingURL=hydration.js.map
|
|
349
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaHlkcmF0aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xpYi9pbnNwZWN0L2h5ZHJhdGlvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7R0FLRztBQUVILE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDcEMsT0FBTyxFQUFFLGlCQUFpQixFQUFFLFlBQVksRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQy9FLE9BQU8sRUFDTCxnQkFBZ0IsRUFDaEIsZ0JBQWdCLEVBQ2hCLGlCQUFpQixJQUFJLHdCQUF3QixFQUM3QyxlQUFlLEVBQ2YsYUFBYSxFQUNiLFFBQVEsRUFDUixxQkFBcUIsRUFFckIsdUJBQXVCLEdBQ3hCLE1BQU0scUNBQXFDLENBQUM7QUFDN0MsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQzVELE9BQU8sS0FBSyxNQUFNLE9BQU8sQ0FBQztBQVcxQixvREFBb0Q7QUFDcEQsT0FBTyxFQUNMLHVCQUF1QixFQUN2QixnQkFBZ0IsRUFDaEIscUJBQXFCLEVBQ3JCLGdCQUFnQixFQUNoQixrQkFBa0IsRUFDbEIsZUFBZSxFQUNmLFVBQVUsRUFDVixXQUFXLEVBRVgsZUFBZSxFQUVmLFVBQVUsR0FDWCxNQUFNLHFDQUFxQyxDQUFDO0FBRTdDLDhFQUE4RTtBQUM5RSwyQ0FBMkM7QUFDM0MsOEVBQThFO0FBRTlFOzs7R0FHRztBQUNILE1BQU0sbUJBQW9CLFNBQVEsZ0JBQWdCO0lBQ2hELENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUNkLE1BQWMsRUFDZCxPQUFtRDtRQUVuRCxNQUFNLE9BQU8sR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxFQUFFLEdBQUcsT0FBTyxFQUFFLEtBQUssRUFBRSxPQUFPLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQztRQUN6RSxNQUFNLE1BQU0sR0FBRyxjQUFjLENBQUMsSUFBSSxDQUFDLE9BQU8s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QU8sRUFBRSxRQUFRLEVBQUUsVUFBVSxFQUFFLE9BQU8sQ0FBQyxFQUFFLENBQUM7UUFDM0QsTUFBTSxDQUFDLEdBQUcsQ0FBQyxHQUFHLFlBQVksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUMxQyxDQUFDO0lBRUQsSUFBSSxNQUFNLENBQUMsU0FBUyxJQUFJLE9BQU8sTUFBTSxDQUFDLFNBQVMsS0FBSyxRQUFRLEVBQUUsQ0FBQztRQUM3RCxNQUFNLEVBQUUsR0FBRyxFQUFFLEdBQUksTUFBTSxDQUFDLFNBQXFDLEVBQUUsQ0FBQztRQUNoRSxLQUFLLE1BQU0sR0FBRyxJQUFJLENBQUMsUUFBUSxFQUFFLE9BQU8sRUFBRSxRQUFRLEVBQUUsVUFBVSxFQUFFLFNBQVMsQ0FBQyxFQUFFLENBQUM7WUFDdkUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLFlBQVksQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUNsQyxDQUFDO1FBQ0QsTUFBTSxDQUFDLFNBQVMsR0FBRyxFQUFFLENBQUM7SUFDeEIsQ0FBQztJQUVELE9BQU8sTUFBVyxDQUFDO0FBQ3JCLENBQUM7QUFFRDs7Ozs7Ozs7R0FRRztBQUNILE1BQU0sQ0FBQyxLQUFLLFVBQVUsaUJBQWlCLENBQ3JDLFFBQVcsRUFDWCxXQUFtQztJQUVuQyx3RUFBd0U7SUFDeEUsTUFBTSxZQUFZLEdBQUcsTUFBTSxrQkFBa0IsQ0FDM0MsUUFBZSxFQUNmLFdBQVcsSUFBSSxJQUFJLENBQ3BCLENBQUM7SUFDRixNQUFNLFFBQVEsR0FBRyx3QkFBd0IsQ0FBQyxZQUFZLEVBQUUsV0FBVyxFQUFFLENBQU0sQ0FBQztJQUM1RSxvRkFBb0Y7SUFDcEYsT0FBTyxpQ0FBaUMsQ0FBQyxRQUFRLENBQUMsQ0FBQztBQUNyRCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBDTEktc3BlY2lmaWMgaHlkcmF0aW9uIGZvciBvMTF5IGRpc3BsYXkuXG4gKlxuICogTm9kZS5qcyByZXZpdmVycyB0aGF0IHVzZSBgQnVmZmVyLmZyb20oKWAgZm9yIGJhc2U2NCBkZWNvZGluZyBhbmQgYWRkXG4gKiBgdXRpbC5pbnNwZWN0LmN1c3RvbWAgdG8gQ2xhc3NJbnN0YW5jZVJlZiBmb3IgcHJldHR5IENMSSBvdXRwdXQuXG4gKi9cblxuaW1wb3J0IHsgaW5zcGVjdCB9IGZyb20gJ25vZGU6dXRpbCc7XG5pbXBvcnQgeyBnZXRDb21tb25SZXZpdmVycywgbWF5YmVEZWNyeXB0IH0gZnJvbSAnQHdvcmtmbG93L2NvcmUvc2VyaWFsaXphdGlvbic7XG5pbXBvcnQge1xuICBDbGFzc0luc3RhbmNlUmVmLFxuICBleHRyYWN0Q2xhc3NOYW1lLFxuICBoeWRyYXRlUmVzb3VyY2VJTyBhcyBoeWRyYXRlUmVzb3VyY2VJT0dlbmVyaWMsXG4gIGlzRW5jcnlwdGVkRGF0YSxcbiAgaXNFeHBpcmVkU3R1YixcbiAgaXNSdW5SZWYsXG4gIG9ic2VydmFiaWxpdHlSZXZpdmVycyxcbiAgdHlwZSBSZXZpdmVycyxcbiAgc2VyaWFsaXplZEluc3RhbmNlVG9SZWYsXG59IGZyb20gJ0B3b3JrZmxvdy9jb3JlL3NlcmlhbGl6YXRpb24tZm9ybWF0JztcbmltcG9ydCB7IHBhcnNlQ2xhc3NOYW1lIH0gZnJvbSAnQHdvcmtmbG93L3V0aWxzL3BhcnNlLW5hbWUnO1xuaW1wb3J0IGNoYWxrIGZyb20gJ2NoYWxrJztcblxuLyoqXG4gKiBBIGZ1bmN0aW9uIHRoYXQgcmVzb2x2ZXMgYW4gZW5jcnlwdGlvbiBrZXkgZm9yIGEgcnVuLCBvciBudWxsIHRvIHNraXBcbiAqIGRlY3J5cHRpb24uIEFjY2VwdHMgYSBydW5JZCDigJQgdGhlIHJlc29sdmVyIGlzIHJlc3BvbnNpYmxlIGZvciBsb29raW5nXG4gKiB1cCB0aGUgV29ya2Zsb3dSdW4gaW50ZXJuYWxseSAod2l0aCBjYWNoaW5nKSBpZiB0aGUgV29ybGQgbmVlZHMgaXQuXG4gKi9cbmV4cG9ydCB0eXBlIEVuY3J5cHRpb25LZXlSZXNvbHZlciA9XG4gIHwgKChydW5JZDogc3RyaW5nKSA9PiBQcm9taXNlPFVpbnQ4QXJyYXkgfCB1bmRlZmluZWQ+KVxuICB8IG51bGw7XG5cbi8vIFJlLWV4cG9ydCB0eXBlcyBhbmQgdXRpbGl0aWVzIHRoYXQgY29uc3VtZXJzIG5lZWRcbmV4cG9ydCB7XG4gIENMQVNTX0lOU1RBTkNFX1JFRl9UWVBFLFxuICBDbGFzc0luc3RhbmNlUmVmLFxuICBFTkNSWVBURURfUExBQ0VIT0xERVIsXG4gIGV4dHJhY3RTdHJlYW1JZHMsXG4gIGlzQ2xhc3NJbnN0YW5jZVJlZixcbiAgaXNFbmNyeXB0ZWREYXRhLFxuICBpc1N0cmVhbUlkLFxuICBpc1N0cmVhbVJlZixcbiAgdHlwZSBSZXZpdmVycyxcbiAgU1RSRUFNX1JFRl9UWVBFLFxuICB0eXBlIFN0cmVhbVJlZixcbiAgdHJ1bmNhdGVJZCxcbn0gZnJvbSAnQHdvcmtmbG93L2NvcmUvc2VyaWFsaXphdGlvbi1mb3JtYXQnO1xuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIENMSSBDbGFzc0luc3RhbmNlUmVmIHdpdGggaW5zcGVjdC5jdXN0b21cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4vKipcbiAqIEV4dGVuZGVkIENsYXNzSW5zdGFuY2VSZWYgd2l0aCBOb2RlLmpzIGB1dGlsLmluc3BlY3QuY3VzdG9tYCBmb3JcbiAqIHByZXR0eSBDTEkgb3V0cHV0OiBgQ2xhc3NOYW1lQGZpbGVuYW1lIHsgLi4uZGF0YSB9YFxuICovXG5jbGFzcyBDTElDbGFzc0luc3RhbmNlUmVmIGV4dGVuZHMgQ2xhc3NJbnN0YW5jZVJlZiB7XG4gIFtpbnNwZWN0LmN1c3RvbV0oXG4gICAgX2RlcHRoOiBudW1iZXIsXG4gICAgb3B0aW9uczogaW1wb3J0KCdub2RlOnV0aWwnKS5JbnNwZWN0T3B0aW9uc1N0eWxpemVkXG4gICk6IHN0cmluZyB7XG4gICAgY29uc3QgZGF0YVN0ciA9IGluc3BlY3QodGhpcy5kYXRhLCB7IC4uLm9wdGlvbnMsIGRlcHRoOiBvcHRpb25zLmRlcHRoIH0pO1xuICAgIGNvbnN0IHBhcnNlZCA9IHBhcnNlQ2xhc3NOYW1lKHRoaXMuY2xhc3NJZCk7XG4gICAgY29uc3QgbW9kdWxlU3BlY2lmaWVyID0gcGFyc2VkPy5tb2R1bGVTcGVjaWZpZXIgPz8gdGhpcy5jbGFzc0lkO1xuICAgIGNvbnN0IGZpbGVOYW1lID0gbW9kdWxlU3BlY2lmaWVyLnNwbGl0KCcvJykucG9wKCkgPz8gbW9kdWxlU3BlY2lmaWVyO1xuICAgIGNvbnN0IHN0eWxlZEZpbGVOYW1lID0gb3B0aW9ucy5zdHlsaXplXG4gICAgICA/IG9wdGlvbnMuc3R5bGl6ZShgQCR7ZmlsZU5hbWV9YCwgJ3VuZGVmaW5lZCcpXG4gICAgICA6IGBAJHtmaWxlTmFtZX1gO1xuICAgIHJldHVybiBgJHt0aGlzLmNsYXNzTmFtZX0ke3N0eWxlZEZpbGVOYW1lfSAke2RhdGFTdHJ9YDtcbiAgfVxufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIENMSSBlbmNyeXB0ZWQgZGF0YSBwbGFjZWhvbGRlciB3aXRoIGN1c3RvbSBpbnNwZWN0XG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuLyoqXG4gKiBQbGFjZWhvbGRlciBvYmplY3QgZm9yIGVuY3J5cHRlZCBkYXRhIGZpZWxkcyBpbiBDTEkgb3V0cHV0LlxuICpcbiAqIFVzZXMgYHV0aWwuaW5zcGVjdC5jdXN0b21gIHRvIHJlbmRlciBhcyBhIHN0eWxlZCwgdW5xdW90ZWQgc3RyaW5nXG4gKiAoZS5nLiwgZGltIHllbGxvdyBcIvCflJIgRW5jcnlwdGVkXCIpIGluc3RlYWQgb2YgYSBwbGFpbiBxdW90ZWQgc3RyaW5nLlxuICogQWxzbyBwcm92aWRlcyBgdG9KU09OKClgIGZvciBgLS1qc29uYCBvdXRwdXQuXG4gKi9cbmNsYXNzIEVuY3J5cHRlZERhdGFSZWYge1xuICBbaW5zcGVjdC5jdXN0b21dKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGNoYWxrLmRpbS55ZWxsb3coJ1xcdXsxRjUxMn0gRW5jcnlwdGVkJyk7XG4gIH1cblxuICB0b0pTT04oKTogc3RyaW5nIHtcbiAgICByZXR1cm4gJ1xcdXsxRjUxMn0gRW5jcnlwdGVkJztcbiAgfVxuXG4gIHRvU3RyaW5nKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuICdcXHV7MUY1MTJ9IEVuY3J5cHRlZCc7XG4gIH1cbn1cblxuLyoqIFNpbmdsZXRvbiBlbmNyeXB0ZWQgZGF0YSBwbGFjZWhvbGRlciBmb3IgQ0xJIGRpc3BsYXkgKi9cbmNvbnN0IEVOQ1JZUFRFRF9SRUYgPSBuZXcgRW5jcnlwdGVkRGF0YVJlZigpO1xuXG4vKiogQ2hlY2sgaWYgYSB2YWx1ZSBpcyBhbiBFbmNyeXB0ZWREYXRhUmVmIChmb3IgY3VzdG9tIHRhYmxlIGZvcm1hdHRpbmcgaW4gQ0xJKSAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzRW5jcnlwdGVkUmVmKHZhbHVlOiB1bmtub3duKTogdmFsdWUgaXMgRW5jcnlwdGVkRGF0YVJlZiB7XG4gIHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIEVuY3J5cHRlZERhdGFSZWY7XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gQ0xJIGV4cGlyZWQgZGF0YSBwbGFjZWhvbGRlciB3aXRoIGN1c3RvbSBpbnNwZWN0XG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuLyoqXG4gKiBQbGFjZWhvbGRlciBvYmplY3QgZm9yIGV4cGlyZWQgZGF0YSBmaWVsZHMgaW4gQ0xJIG91dHB1dC5cbiAqXG4gKiBVc2VzIGB1dGlsLmluc3BlY3QuY3VzdG9tYCB0byByZW5kZXIgYXMgYSBzdHlsZWQsIHVucXVvdGVkIHN0cmluZ1xuICogKGUuZy4sIGRpbSBncmF5IFwiPGRhdGEgZXhwaXJlZD5cIikgaW5zdGVhZCBvZiBhIHJhdyBzdHViIG9iamVjdC5cbiAqIEFsc28gcHJvdmlkZXMgYHRvSlNPTigpYCBmb3IgYC0tanNvbmAgb3V0cHV0LlxuICovXG5jbGFzcyBFeHBpcmVkRGF0YVJlZiB7XG4gIFtpbnNwZWN0LmN1c3RvbV0oKTogc3RyaW5nIHtcbiAgICByZXR1cm4gY2hhbGsuZ3JheSgnPGRhdGEgZXhwaXJlZD4nKTtcbiAgfVxuXG4gIHRvSlNPTigpOiBzdHJpbmcge1xuICAgIHJldHVybiAnPGRhdGEgZXhwaXJlZD4nO1xuICB9XG5cbiAgdG9TdHJpbmcoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gJzxkYXRhIGV4cGlyZWQ+JztcbiAgfVxufVxuXG4vKiogU2luZ2xldG9uIGV4cGlyZWQgZGF0YSBwbGFjZWhvbGRlciBmb3IgQ0xJIGRpc3BsYXkgKi9cbmNvbnN0IEVYUElSRURfUkVGID0gbmV3IEV4cGlyZWREYXRhUmVmKCk7XG5cbi8qKiBDaGVjayBpZiBhIHZhbHVlIGlzIGFuIEV4cGlyZWREYXRhUmVmIChmb3IgY3VzdG9tIHRhYmxlIGZvcm1hdHRpbmcgaW4gQ0xJKSAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzRXhwaXJlZFJlZih2YWx1ZTogdW5rbm93bik6IHZhbHVlIGlzIEV4cGlyZWREYXRhUmVmIHtcbiAgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgRXhwaXJlZERhdGFSZWY7XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gQ0xJIHJldml2ZXJzIChOb2RlLmpzLCB1c2VzIEJ1ZmZlcilcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4vKipcbiAqIFRoZSBzZXQgb2YgcmVkdWNlciBrZXlzIHdob3NlIGBnZXRDb21tb25SZXZpdmVycygpYCBvdXRwdXQgcHJvZHVjZXMgYVxuICogbmF0aXZlIGBFcnJvcmAgaW5zdGFuY2UuIFdlIHdyYXAgZWFjaCBvZiB0aGVzZSB3aXRoIGFuIGFkZGl0aW9uYWxcbiAqIGB0b0pTT05gIGF0dGFjaG1lbnQgaW4gQ0xJIG1vZGUgKHNlZSBgd3JhcEVycm9yUmV2aXZlcldpdGhUb0pTT05gKS5cbiAqL1xuY29uc3QgRVJST1JfUkVWSVZFUl9LRVlTID0gW1xuICAnQWdncmVnYXRlRXJyb3InLFxuICAnRE9NRXhjZXB0aW9uJyxcbiAgJ0Vycm9yJyxcbiAgJ0V2YWxFcnJvcicsXG4gICdGYXRhbEVycm9yJyxcbiAgJ0hvb2tDb25mbGljdEVycm9yJyxcbiAgJ1JhbmdlRXJyb3InLFxuICAnUmVmZXJlbmNlRXJyb3InLFxuICAnUmV0cnlhYmxlRXJyb3InLFxuICAnUnVudGltZURlY3J5cHRpb25FcnJvcicsXG4gICdTeW50YXhFcnJvcicsXG4gICdUeXBlRXJyb3InLFxuICAnVVJJRXJyb3InLFxuXSBhcyBjb25zdDtcblxuLyoqXG4gKiBXcmFwcyBhIHJ1bnRpbWUgRXJyb3IgcmV2aXZlciBzbyB0aGF0IHRoZSBwcm9kdWNlZCBpbnN0YW5jZSBjYXJyaWVzIGFcbiAqIG5vbi1lbnVtZXJhYmxlIGB0b0pTT05gIG1ldGhvZC4gVGhlIHJ1bnRpbWUgcmV2aXZlcnMgcmV0dXJuIHJlYWwgYEVycm9yYFxuICogaW5zdGFuY2VzIChnb29kIGZvciBgdXRpbC5pbnNwZWN0YCwgYGluc3RhbmNlb2ZgLCBgdG9TdHJpbmdgLCBldGMuKSwgYnV0XG4gKiBgRXJyb3IucHJvdG90eXBlYCdzIGBuYW1lYCAvIGBtZXNzYWdlYCAvIGBzdGFja2AgLyBgY2F1c2VgIGFyZVxuICogbm9uLWVudW1lcmFibGUgYW5kIHdvdWxkIGJlIGRyb3BwZWQgYnkgYEpTT04uc3RyaW5naWZ5YCDigJQgd2hpY2ggaXMgaG93XG4gKiB0aGUgQ0xJIGVtaXRzIGl0cyBgLS1qc29uYCBvdXRwdXQuIEFkZGluZyBgdG9KU09OYCAod2hpY2ggYEpTT04uc3RyaW5naWZ5YFxuICogY2FsbHMgYnV0IGB1dGlsLmluc3BlY3RgIGlnbm9yZXMpIGdpdmVzIHVzIHRoZSBiZXN0IG9mIGJvdGggd29ybGRzOlxuICogcm91bmQtdHJpcHBlZCBlcnJvcnMgcmVuZGVyIGNsZWFubHkgaW4gYm90aCBtb2RlcyB3aXRob3V0IHRoZVxuICogZGF0YS12ZXJzdXMtZGlzcGxheSB0cmFkZW9mZiB0aGF0IHBsYWluLW9iamVjdCByZXZpdmVycyB3b3VsZCBmb3JjZS5cbiAqXG4gKiBTdWJjbGFzcy1zcGVjaWZpYyBlbnVtZXJhYmxlIGZpZWxkcyAoZS5nLiBgUmV0cnlhYmxlRXJyb3IucmV0cnlBZnRlcmAsXG4gKiBgQWdncmVnYXRlRXJyb3IuZXJyb3JzYCwgYEZhdGFsRXJyb3IuZmF0YWxgKSBhcmUgcGlja2VkIHVwIGF1dG9tYXRpY2FsbHlcbiAqIHZpYSBgT2JqZWN0LmFzc2lnbmAgYWZ0ZXIgdGhlIGJhc2UgZmllbGRzLCBzbyB3ZSBkb24ndCBoYXZlIHRvIGVudW1lcmF0ZVxuICogdGhlbSBwZXItc3ViY2xhc3MuXG4gKi9cbmZ1bmN0aW9uIHdyYXBFcnJvclJldml2ZXJXaXRoVG9KU09OKFxuICByZXZpdmVyOiAodmFsdWU6IGFueSkgPT4gdW5rbm93blxuKTogKHZhbHVlOiBhbnkpID0+IHVua25vd24ge1xuICByZXR1cm4gKHZhbHVlKSA9PiB7XG4gICAgY29uc3QgcmVzdWx0ID0gcmV2aXZlcih2YWx1ZSk7XG4gICAgaWYgKCEocmVzdWx0IGluc3RhbmNlb2YgRXJyb3IpKSByZXR1cm4gcmVzdWx0O1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShyZXN1bHQsICd0b0pTT04nLCB7XG4gICAgICB2YWx1ZTogZnVuY3Rpb24gKHRoaXM6IEVycm9yKSB7XG4gICAgICAgIGNvbnN0IGpzb246IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0ge1xuICAgICAgICAgIG5hbWU6IHRoaXMubmFtZSxcbiAgICAgICAgICBtZXNzYWdlOiB0aGlzLm1lc3NhZ2UsXG4gICAgICAgICAgc3RhY2s6IHRoaXMuc3RhY2ssXG4gICAgICAgIH07XG4gICAgICAgIGlmICgnY2F1c2UnIGluIHRoaXMpIHtcbiAgICAgICAgICBqc29uLmNhdXNlID0gKHRoaXMgYXMgeyBjYXVzZTogdW5rbm93biB9KS5jYXVzZTtcbiAgICAgICAgfVxuICAgICAgICAvLyBQaWNrIHVwIHN1YmNsYXNzLXNwZWNpZmljIGVudW1lcmFibGUgZmllbGRzIChlLmcuIEZhdGFsRXJyb3IuZmF0YWwsXG4gICAgICAgIC8vIFJldHJ5YWJsZUVycm9yLnJldHJ5QWZ0ZXIsIEFnZ3JlZ2F0ZUVycm9yLmVycm9ycykuXG4gICAgICAgIE9iamVjdC5hc3NpZ24oanNvbiwgdGhpcyk7XG4gICAgICAgIHJldHVybiBqc29uO1xuICAgICAgfSxcbiAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgfSk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfTtcbn1cblxuLyoqXG4gKiBUaGUgc2V0IG9mIHJldml2ZXJzIHVzZWQgYnkgQ0xJIGluc3BlY3Qgb3V0cHV0LlxuICpcbiAqIEJ1aWx0IG9uIHRvcCBvZiBgZ2V0Q29tbW9uUmV2aXZlcnMoKWAgZnJvbSBgQHdvcmtmbG93L2NvcmVgIHNvIHRoYXQgdGhlXG4gKiBDTEkgc3RheXMgaW4gc3luYyB3aXRoIHRoZSBydW50aW1lJ3MgcmV2aXZlciBzZXQgYXV0b21hdGljYWxseS4gV2l0aG91dFxuICogdGhpcywgZXZlcnkgbmV3IHJldml2ZXIgYWRkZWQgdG8gY29yZSAoZS5nLiBgRmF0YWxFcnJvcmAsXG4gKiBgUmV0cnlhYmxlRXJyb3JgLCB0aGUgYnVpbHQtaW4gYEVycm9yYCBzdWJjbGFzc2VzKSB3b3VsZCBzaWxlbnRseVxuICogZGlzYXBwZWFyIGZyb20gQ0xJIG91dHB1dDogZGV2YWx1ZSB0aHJvd3MgXCJVbmtub3duIHR5cGUgWFwiIGZvclxuICogdW5yZWNvZ25pemVkIHJlZHVjZWQgdHlwZXMsIGFuZCBgaHlkcmF0ZVJlc291cmNlSU9gIHN3YWxsb3dzIHRoYXQgZXJyb3JcbiAqIGFuZCBzdXJmYWNlcyB0aGUgcmF3IGBVaW50OEFycmF5YCBwYXlsb2FkIHRvIGNvbnN1bWVycyDigJQgd2hpY2ggdGhlblxuICogc2hvd3MgdXAgYXMgYHN0ZXAuZXJyb3JgIC8gYHJ1bi5lcnJvcmAgYnl0ZSBkdW1wcyBpbnN0ZWFkIG9mIHVzYWJsZVxuICogYHsgbWVzc2FnZSwgc3RhY2ssIOKApiB9YCBvYmplY3RzLlxuICpcbiAqIE9uIHRvcCBvZiB0aGUgY29tbW9uIHNldCB3ZSBsYXllcjpcbiAqICAgLSBBIGB0b0pTT05gIHNoaW0gb24gZWFjaCBFcnJvciByZXZpdmVyIHNvIG5vbi1lbnVtZXJhYmxlXG4gKiAgICAgYEVycm9yLnByb3RvdHlwZWAgZmllbGRzIHN1cnZpdmUgYEpTT04uc3RyaW5naWZ5YCBmb3IgYC0tanNvbmAgb3V0cHV0XG4gKiAgICAgd2hpbGUgbGVhdmluZyBgdXRpbC5pbnNwZWN0YCByZW5kZXJpbmcgdW50b3VjaGVkXG4gKiAgIC0gYG9ic2VydmFiaWxpdHlSZXZpdmVyc2AgZm9yIHN0cmVhbXMgLyBzdGVwK3dvcmtmbG93IGZ1bmN0aW9uIHJlZnNcbiAqICAgLSBDTEktc3BlY2lmaWMgb3ZlcnJpZGVzIHRoYXQgcHJvZHVjZSBkaXNwbGF5LWZyaWVuZGx5IHBsYWNlaG9sZGVyc1xuICogICAgIGZvciBgQ2xhc3NgIC8gYEluc3RhbmNlYCAodGhlIHJ1bnRpbWUgdmVyc2lvbnMgbmVlZCBmdWxsIGNsYXNzXG4gKiAgICAgaWRlbnRpdHkgd2hpY2ggdGhlIENMSSBkb2Vzbid0IGhhdmUgYWNjZXNzIHRvKVxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q0xJUmV2aXZlcnMoKTogUmV2aXZlcnMge1xuICBjb25zdCBiYXNlUmV2aXZlcnMgPSBnZXRDb21tb25SZXZpdmVycyhnbG9iYWxUaGlzKTtcbiAgY29uc3QgZXJyb3JSZXZpdmVycyA9IE9iamVjdC5mcm9tRW50cmllcyhcbiAgICBFUlJPUl9SRVZJVkVSX0tFWVMuZmxhdE1hcCgoa2V5KSA9PiB7XG4gICAgICBjb25zdCByZXZpdmVyID0gKGJhc2VSZXZpdmVycyBhcyBSZXZpdmVycylba2V5XTtcbiAgICAgIHJldHVybiByZXZpdmVyID8gW1trZXksIHdyYXBFcnJvclJldml2ZXJXaXRoVG9KU09OKHJldml2ZXIpXV0gOiBbXTtcbiAgICB9KVxuICApO1xuICByZXR1cm4ge1xuICAgIC4uLmJhc2VSZXZpdmVycyxcbiAgICAuLi5lcnJvclJldml2ZXJzLFxuICAgIC8vIE8xMXktc3BlY2lmaWMgcmV2aXZlcnMgKHN0cmVhbXMsIHN0ZXAgZnVuY3Rpb25zIOKGkiBkaXNwbGF5IG9iamVjdHMpLlxuICAgIC4uLm9ic2VydmFiaWxpdHlSZXZpdmVycyxcbiAgICAvLyBOb2RlIGBSZXF1ZXN0YCAvIGBSZXNwb25zZWAgcmV2aXZlcnMgdGhhdCBkb24ndCByZWx5IG9uIHJ1bm5pbmcgYW5cbiAgICAvLyBhY3R1YWwgZmV0Y2ggaGFuZGxlciDigJQgdXNlZCB0byByZW5kZXIgcmVxdWVzdC9yZXNwb25zZSBJTyBpbmxpbmUuXG4gICAgUmVxdWVzdDogKHZhbHVlKSA9PiB7XG4gICAgICAvLyBiaW9tZS1pZ25vcmUgbGludC9jb21wbGV4aXR5L3VzZUFycm93RnVuY3Rpb246IGFycm93IGZ1bmN0aW9ucyBoYXZlIG5vIC5wcm90b3R5cGVcbiAgICAgIGNvbnN0IGN0b3IgPSB7IFJlcXVlc3Q6IGZ1bmN0aW9uICgpIHt9IH0uUmVxdWVzdCE7XG4gICAgICBjb25zdCBvYmogPSBPYmplY3QuY3JlYXRlKGN0b3IucHJvdG90eXBlKTtcbiAgICAgIE9iamVjdC5hc3NpZ24ob2JqLCB7XG4gICAgICAgIG1ldGhvZDogdmFsdWUubWV0aG9kLFxuICAgICAgICB1cmw6IHZhbHVlLnVybCxcbiAgICAgICAgaGVhZGVyczogbmV3IEhlYWRlcnModmFsdWUuaGVhZGVycyksXG4gICAgICAgIGJvZHk6IHZhbHVlLmJvZHksXG4gICAgICAgIGR1cGxleDogdmFsdWUuZHVwbGV4LFxuICAgICAgICAuLi4odmFsdWUucmVzcG9uc2VXcml0YWJsZVxuICAgICAgICAgID8geyByZXNwb25zZVdyaXRhYmxlOiB2YWx1ZS5yZXNwb25zZVdyaXRhYmxlIH1cbiAgICAgICAgICA6IHt9KSxcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIG9iajtcbiAgICB9LFxuICAgIFJlc3BvbnNlOiAodmFsdWUpID0+IHtcbiAgICAgIC8vIGJpb21lLWlnbm9yZSBsaW50L2NvbXBsZXhpdHkvdXNlQXJyb3dGdW5jdGlvbjogYXJyb3cgZnVuY3Rpb25zIGhhdmUgbm8gLnByb3RvdHlwZVxuICAgICAgY29uc3QgY3RvciA9IHsgUmVzcG9uc2U6IGZ1bmN0aW9uICgpIHt9IH0uUmVzcG9uc2UhO1xuICAgICAgY29uc3Qgb2JqID0gT2JqZWN0LmNyZWF0ZShjdG9yLnByb3RvdHlwZSk7XG4gICAgICBPYmplY3QuYXNzaWduKG9iaiwge1xuICAgICAgICBzdGF0dXM6IHZhbHVlLnN0YXR1cyxcbiAgICAgICAgc3RhdHVzVGV4dDogdmFsdWUuc3RhdHVzVGV4dCxcbiAgICAgICAgdXJsOiB2YWx1ZS51cmwsXG4gICAgICAgIGhlYWRlcnM6IG5ldyBIZWFkZXJzKHZhbHVlLmhlYWRlcnMpLFxuICAgICAgICBib2R5OiB2YWx1ZS5ib2R5LFxuICAgICAgICByZWRpcmVjdGVkOiB2YWx1ZS5yZWRpcmVjdGVkLFxuICAgICAgICB0eXBlOiB2YWx1ZS50eXBlLFxuICAgICAgfSk7XG4gICAgICByZXR1cm4gb2JqO1xuICAgIH0sXG4gICAgLy8gQ0xJLXNwZWNpZmljIG92ZXJyaWRlcyBmb3IgY2xhc3MgaW5zdGFuY2VzIHdpdGggaW5zcGVjdC5jdXN0b21cbiAgICBDbGFzczogKHZhbHVlKSA9PiBgPGNsYXNzOiR7ZXh0cmFjdENsYXNzTmFtZSh2YWx1ZS5jbGFzc0lkKX0+YCxcbiAgICBJbnN0YW5jZTogKHZhbHVlKSA9PiB7XG4gICAgICAvLyBSdW4gaW5zdGFuY2VzIGFyZSByZW5kZXJlZCBhcyBSdW5SZWYgZm9yIGNsaWNrYWJsZSByZW5kZXJpbmdcbiAgICAgIGNvbnN0IHJ1blJlZiA9IHNlcmlhbGl6ZWRJbnN0YW5jZVRvUmVmKHZhbHVlKTtcbiAgICAgIGlmIChpc1J1blJlZihydW5SZWYpKSB7XG4gICAgICAgIHJldHVybiBydW5SZWY7XG4gICAgICB9XG4gICAgICByZXR1cm4gbmV3IENMSUNsYXNzSW5zdGFuY2VSZWYoXG4gICAgICAgIGV4dHJhY3RDbGFzc05hbWUodmFsdWUuY2xhc3NJZCksXG4gICAgICAgIHZhbHVlLmNsYXNzSWQsXG4gICAgICAgIHZhbHVlLmRhdGFcbiAgICAgICk7XG4gICAgfSxcbiAgfTtcbn1cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBQcmUtYnVpbHQgQ0xJIHJldml2ZXJzIChjYWNoZWQpXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxubGV0IGNhY2hlZFJldml2ZXJzOiBSZXZpdmVycyB8IG51bGwgPSBudWxsO1xuXG5mdW5jdGlvbiBnZXRSZXZpdmVycygpOiBSZXZpdmVycyB7XG4gIGlmICghY2FjaGVkUmV2aXZlcnMpIHtcbiAgICBjYWNoZWRSZXZpdmVycyA9IGdldENMSVJldml2ZXJzKCk7XG4gIH1cbiAgcmV0dXJuIGNhY2hlZFJldml2ZXJzO1xufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIERlY3J5cHRpb24gaGVscGVyc1xuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbi8qKlxuICogUHJlLXByb2Nlc3MgYSByZXNvdXJjZSdzIGRhdGEgZmllbGRzOiBpZiB0aGUgcmVzb2x2ZXIgaXMgcHJvdmlkZWQgYW5kXG4gKiB0aGUgZmllbGQgaXMgZW5jcnlwdGVkLCBkZWNyeXB0IGl0IGJlZm9yZSBnZW5lcmljIGh5ZHJhdGlvbi5cbiAqXG4gKiBVc2VzIGNvcmUncyBgbWF5YmVEZWNyeXB0KClgIHdoaWNoIGhhbmRsZXMgdGhlICdlbmNyJyBwcmVmaXggc3RyaXBwaW5nXG4gKiBhbmQgQUVTLUdDTSBkZWNyeXB0aW9uIHRyYW5zcGFyZW50bHkuXG4gKlxuICogV2hlbiB0aGUgcmVzb2x2ZXIgaXMgbnVsbCAobm8gLS1kZWNyeXB0IGZsYWcpLCBlbmNyeXB0ZWQgZmllbGRzIHBhc3NcbiAqIHRocm91Z2ggYXMgVWludDhBcnJheSBhbmQgYXJlIHJlcGxhY2VkIHdpdGggRW5jcnlwdGVkRGF0YVJlZiBpbiBwb3N0LXByb2Nlc3NpbmcuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIG1heWJlRGVjcnlwdEZpZWxkczxcbiAgVCBleHRlbmRzIHtcbiAgICBydW5JZD86IHN0cmluZztcbiAgICBpbnB1dD86IGFueTtcbiAgICBvdXRwdXQ/OiBhbnk7XG4gICAgbWV0YWRhdGE/OiBhbnk7XG4gICAgZXZlbnREYXRhPzogYW55O1xuICB9LFxuPihyZXNvdXJjZTogVCwgcmVzb2x2ZXI6IEVuY3J5cHRpb25LZXlSZXNvbHZlcik6IFByb21pc2U8VD4ge1xuICBpZiAoIXJlc29sdmVyKSByZXR1cm4gcmVzb3VyY2U7XG5cbiAgY29uc3QgcnVuSWQgPSAocmVzb3VyY2UgYXMgYW55KS5ydW5JZCBhcyBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gIGlmICghcnVuSWQpIHJldHVybiByZXNvdXJjZTtcblxuICBjb25zdCByZXN1bHQgPSB7IC4uLnJlc291cmNlIH07XG5cbiAgdHJ5IHtcbiAgICBjb25zdCByYXdLZXkgPSBhd2FpdCByZXNvbHZlcihydW5JZCk7XG4gICAgY29uc3QgeyBpbXBvcnRLZXkgfSA9IGF3YWl0IGltcG9ydCgnQHdvcmtmbG93L2NvcmUvZW5jcnlwdGlvbicpO1xuICAgIGNvbnN0IGsgPSByYXdLZXkgPyBhd2FpdCBpbXBvcnRLZXkocmF3S2V5KSA6IHVuZGVmaW5lZDtcblxuICAgIC8vIERlY3J5cHQgaW5wdXQvb3V0cHV0L2Vycm9yIGZpZWxkcyAoV29ya2Zsb3dSdW4sIFN0ZXApXG4gICAgcmVzdWx0LmlucHV0ID0gYXdhaXQgbWF5YmVEZWNyeXB0KHJlc3VsdC5pbnB1dCwgayk7XG4gICAgcmVzdWx0Lm91dHB1dCA9IGF3YWl0IG1heWJlRGVjcnlwdChyZXN1bHQub3V0cHV0LCBrKTtcbiAgICAocmVzdWx0IGFzIGFueSkuZXJyb3IgPSBhd2FpdCBtYXliZURlY3J5cHQoKHJlc3VsdCBhcyBhbnkpLmVycm9yLCBrKTtcblxuICAgIC8vIERlY3J5cHQgbWV0YWRhdGEgZmllbGQgKEhvb2spXG4gICAgcmVzdWx0Lm1ldGFkYXRhID0gYXdhaXQgbWF5YmVEZWNyeXB0KHJlc3VsdC5tZXRhZGF0YSwgayk7XG5cbiAgICAvLyBEZWNyeXB0IGV2ZW50RGF0YSBmaWVsZHMgKEV2ZW50KVxuICAgIGlmIChyZXN1bHQuZXZlbnREYXRhICYmIHR5cGVvZiByZXN1bHQuZXZlbnREYXRhID09PSAnb2JqZWN0Jykge1xuICAgICAgY29uc3QgZXZlbnREYXRhID0geyAuLi5yZXN1bHQuZXZlbnREYXRhIH07XG4gICAgICBmb3IgKGNvbnN0IGZpZWxkIG9mIFtcbiAgICAgICAgJ3Jlc3VsdCcsXG4gICAgICAgICdpbnB1dCcsXG4gICAgICAgICdvdXRwdXQnLFxuICAgICAgICAnbWV0YWRhdGEnLFxuICAgICAgICAncGF5bG9hZCcsXG4gICAgICBdKSB7XG4gICAgICAgIGV2ZW50RGF0YVtmaWVsZF0gPSBhd2FpdCBtYXliZURlY3J5cHQoZXZlbnREYXRhW2ZpZWxkXSwgayk7XG4gICAgICB9XG4gICAgICByZXN1bHQuZXZlbnREYXRhID0gZXZlbnREYXRhO1xuICAgIH1cbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgY29uc3QgbWVzc2FnZSA9IGVyciBpbnN0YW5jZW9mIEVycm9yID8gZXJyLm1lc3NhZ2UgOiBTdHJpbmcoZXJyKTtcblxuICAgIC8vIElmIHRoZSBrZXkgZmV0Y2ggZmFpbGVkIGR1ZSB0byBhbiBIVFRQIGVycm9yIChlLmcuIDQyOSByYXRlIGxpbWl0LFxuICAgIC8vIDUwMCBzZXJ2ZXIgZXJyb3IpLCByZS10aHJvdyBzbyB0aGUgY2FsbGVyIHN1cmZhY2VzIGEgY2xlYXIgZmFpbHVyZVxuICAgIC8vIGluc3RlYWQgb2Ygc2lsZW50bHkgc2hvd2luZyBlbmNyeXB0ZWQgcGxhY2Vob2xkZXJzLlxuICAgIGlmIChtZXNzYWdlLmluY2x1ZGVzKCdIVFRQICcpKSB7XG4gICAgICB0aHJvdyBlcnI7XG4gICAgfVxuXG4gICAgLy8gRGVjcnlwdGlvbiBmYWlsZWQgKGJhZCBrZXksIGNvcnJ1cHRlZCBjaXBoZXJ0ZXh0LCBldGMuKSDigJQgZmFsbCBiYWNrXG4gICAgLy8gdG8gc2hvd2luZyBlbmNyeXB0ZWQgcGxhY2Vob2xkZXJzIGluc3RlYWQgb2YgY3Jhc2hpbmcgdGhlIENMSS5cbiAgICBjb25zdCB7IGxvZ2dlciB9ID0gYXdhaXQgaW1wb3J0KCcuLi9jb25maWcvbG9nLmpzJyk7XG4gICAgbG9nZ2VyLndhcm4oYERlY3J5cHRpb24gZmFpbGVkIGZvciByZXNvdXJjZSAke3J1bklkfTogJHttZXNzYWdlfWApO1xuICB9XG5cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBQdWJsaWMgQVBJXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuLyoqIFJlcGxhY2UgYSBzaW5nbGUgZmllbGQgdmFsdWUgd2l0aCBhIGRpc3BsYXkgcmVmIGlmIGl0J3MgZW5jcnlwdGVkIG9yIGV4cGlyZWQuICovXG5mdW5jdGlvbiB0b0Rpc3BsYXlSZWYodmFsdWU6IHVua25vd24pOiB1bmtub3duIHtcbiAgaWYgKGlzRW5jcnlwdGVkRGF0YSh2YWx1ZSkpIHJldHVybiBFTkNSWVBURURfUkVGO1xuICBpZiAoaXNFeHBpcmVkU3R1Yih2YWx1ZSkpIHJldHVybiBFWFBJUkVEX1JFRjtcbiAgcmV0dXJuIHZhbHVlO1xufVxuXG4vKipcbiAqIFJlcGxhY2UgZW5jcnlwdGVkIFVpbnQ4QXJyYXkgdmFsdWVzIGFuZCBleHBpcmVkIHN0dWJzIHdpdGggc3R5bGVkXG4gKiByZWYgb2JqZWN0cyBpbiBrbm93biBkYXRhIGZpZWxkcyBmb3IgY3VzdG9tIGluc3BlY3QgcmVuZGVyaW5nLlxuICovXG5mdW5jdGlvbiByZXBsYWNlRW5jcnlwdGVkQW5kRXhwaXJlZFdpdGhSZWY8VD4ocmVzb3VyY2U6IFQpOiBUIHtcbiAgaWYgKCFyZXNvdXJjZSB8fCB0eXBlb2YgcmVzb3VyY2UgIT09ICdvYmplY3QnKSByZXR1cm4gcmVzb3VyY2U7XG4gIGNvbnN0IHIgPSByZXNvdXJjZSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgY29uc3QgcmVzdWx0ID0geyAuLi5yIH07XG5cbiAgZm9yIChjb25zdCBrZXkgb2YgWydpbnB1dCcsICdvdXRwdXQnLCAnbWV0YWRhdGEnLCAnZXJyb3InXSkge1xuICAgIHJlc3VsdFtrZXldID0gdG9EaXNwbGF5UmVmKHJlc3VsdFtrZXldKTtcbiAgfVxuXG4gIGlmIChyZXN1bHQuZXZlbnREYXRhICYmIHR5cGVvZiByZXN1bHQuZXZlbnREYXRhID09PSAnb2JqZWN0Jykge1xuICAgIGNvbnN0IGVkID0geyAuLi4ocmVzdWx0LmV2ZW50RGF0YSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPikgfTtcbiAgICBmb3IgKGNvbnN0IGtleSBvZiBbJ3Jlc3VsdCcsICdpbnB1dCcsICdvdXRwdXQnLCAnbWV0YWRhdGEnLCAncGF5bG9hZCddKSB7XG4gICAgICBlZFtrZXldID0gdG9EaXNwbGF5UmVmKGVkW2tleV0pO1xuICAgIH1cbiAgICByZXN1bHQuZXZlbnREYXRhID0gZWQ7XG4gIH1cblxuICByZXR1cm4gcmVzdWx0IGFzIFQ7XG59XG5cbi8qKlxuICogSHlkcmF0ZSB0aGUgc2VyaWFsaXplZCBkYXRhIGZpZWxkcyBvZiBhIHJlc291cmNlIGZvciBDTEkgZGlzcGxheS5cbiAqXG4gKiBXaGVuIGBlbmNyeXB0b3JSZXNvbHZlcmAgaXMgbnVsbCAoZGVmYXVsdCAvIG5vIC0tZGVjcnlwdCBmbGFnKSwgZW5jcnlwdGVkXG4gKiBmaWVsZHMgYXJlIHNob3duIGFzIHN0eWxlZCBcIvCflJIgRW5jcnlwdGVkXCIgcGxhY2Vob2xkZXJzIHZpYSBFbmNyeXB0ZWREYXRhUmVmLlxuICpcbiAqIFdoZW4gYGVuY3J5cHRvclJlc29sdmVyYCBpcyBwcm92aWRlZCAoLS1kZWNyeXB0IGZsYWcpLCBlbmNyeXB0ZWQgZmllbGRzXG4gKiBhcmUgZGVjcnlwdGVkIGJlZm9yZSBoeWRyYXRpb24gc28gdGhlIGFjdHVhbCB1c2VyIGRhdGEgaXMgZGlzcGxheWVkLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gaHlkcmF0ZVJlc291cmNlSU88VD4oXG4gIHJlc291cmNlOiBULFxuICBrZXlSZXNvbHZlcj86IEVuY3J5cHRpb25LZXlSZXNvbHZlclxuKTogUHJvbWlzZTxUPiB7XG4gIC8vIFByZS1wcm9jZXNzOiBkZWNyeXB0IGFueSBlbmNyeXB0ZWQgZmllbGRzIHdoZW4gYSByZXNvbHZlciBpcyBwcm92aWRlZFxuICBjb25zdCBwcmVwcm9jZXNzZWQgPSBhd2FpdCBtYXliZURlY3J5cHRGaWVsZHMoXG4gICAgcmVzb3VyY2UgYXMgYW55LFxuICAgIGtleVJlc29sdmVyID8/IG51bGxcbiAgKTtcbiAgY29uc3QgaHlkcmF0ZWQgPSBoeWRyYXRlUmVzb3VyY2VJT0dlbmVyaWMocHJlcHJvY2Vzc2VkLCBnZXRSZXZpdmVycygpKSBhcyBUO1xuICAvLyBQb3N0LXByb2Nlc3M6IHN3YXAgZW5jcnlwdGVkIFVpbnQ4QXJyYXlzIGFuZCBleHBpcmVkIHN0dWJzIGZvciBDTEktc3R5bGVkIG9iamVjdHNcbiAgcmV0dXJuIHJlcGxhY2VFbmNyeXB0ZWRBbmRFeHBpcmVkV2l0aFJlZihoeWRyYXRlZCk7XG59XG4iXX0=
|
|
@@ -997,4 +997,4 @@ export const listSleeps = async (world, opts = {}) => {
|
|
|
997
997
|
throw error;
|
|
998
998
|
}
|
|
999
999
|
};
|
|
1000
|
-
//# sourceMappingURL=output.js.map
|
|
1000
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3V0cHV0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xpYi9pbnNwZWN0L291dHB1dC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDdEQsT0FBTyxFQUVMLG9CQUFvQixFQUNwQixtQkFBbUIsR0FDcEIsTUFBTSw4QkFBOEIsQ0FBQztBQUN0QyxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUM1RCxPQUFPLEVBQUUsYUFBYSxFQUFFLGlCQUFpQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFZOUUsT0FBTyxLQUFLLE1BQU0sT0FBTyxDQUFDO0FBRTFCLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFDMUMsT0FBTyxLQUFLLE1BQU0sWUFBWSxDQUFDO0FBQy9CLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUUxQyxPQUFPLEVBRUwsaUJBQWlCLEVBQ2pCLGNBQWMsRUFDZCxZQUFZLEdBQ2IsTUFBTSxnQkFBZ0IsQ0FBQztBQUV4Qjs7Ozs7O0dBTUc7QUFDSCxTQUFTLGNBQWMsQ0FBQyxLQUFZLEVBQUUsT0FBZ0I7SUFDcEQsSUFBSSxDQUFDLE9BQU87UUFBRSxPQUFPLElBQUksQ0FBQztJQUMxQixJQUFJLENBQUMsS0FBSyxDQUFDLHNCQUFzQjtRQUFFLE9BQU8sSUFBSSxDQUFDO0lBQy9DLE1BQU0sS0FBSyxHQUFHLElBQUksR0FBRyxFQUEyQyxDQUFDO0lBQ2pFLE9BQU8sQ0FBQyxLQUFhLEVBQUUsRUFBRTtRQUN2QixJQUFJLE1BQU0sR0FBRyxLQUFLLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzlCLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUNaLE1BQU0sR0FBRyxLQUFLLENBQUMsSUFBSTtpQkFDaEIsR0FBRyxDQUFDLEtBQUssQ0FBQztpQkFD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QUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBpbXBvcnRLZXkgfSBmcm9tICdAd29ya2Zsb3cvY29yZS9lbmNyeXB0aW9uJztcbmltcG9ydCB7XG4gIHR5cGUgRW5jcnlwdGlvbktleVBhcmFtLFxuICBnZXREZXNlcmlhbGl6ZVN0cmVhbSxcbiAgZ2V0RXh0ZXJuYWxSZXZpdmVycyxcbn0gZnJvbSAnQHdvcmtmbG93L2NvcmUvc2VyaWFsaXphdGlvbic7XG5pbXBvcnQgeyBWRVJDRUxfNDAzX0VSUk9SX01FU1NBR0UgfSBmcm9tICdAd29ya2Zsb3cvZXJyb3JzJztcbmltcG9ydCB7IHBhcnNlU3RlcE5hbWUsIHBhcnNlV29ya2Zsb3dOYW1lIH0gZnJvbSAnQHdvcmtmbG93L3V0aWxzL3BhcnNlLW5hbWUnO1xuaW1wb3J0IHR5cGUge1xuICBFdmVudCxcbiAgSG9vayxcbiAgTGlzdEV2ZW50c1BhcmFtcyxcbiAgUGFnaW5hdGlvbk9wdGlvbnMsXG4gIFN0ZXAsXG4gIFN0ZXBXaXRob3V0RGF0YSxcbiAgV29ya2Zsb3dSdW4sXG4gIFdvcmtmbG93UnVuV2l0aG91dERhdGEsXG4gIFdvcmxkLFxufSBmcm9tICdAd29ya2Zsb3cvd29ybGQnO1xuaW1wb3J0IGNoYWxrIGZyb20gJ2NoYWxrJztcblxuaW1wb3J0IHsgZm9ybWF0RGlzdGFuY2UgfSBmcm9tICdkYXRlLWZucyc7XG5pbXBvcnQgVGFibGUgZnJvbSAnZWFzeS10YWJsZSc7XG5pbXBvcnQgeyBsb2dnZXIgfSBmcm9tICcuLi9jb25maWcvbG9nLmpzJztcbmltcG9ydCB0eXBlIHsgSW5zcGVjdENMSU9wdGlvbnMgfSBmcm9tICcuLi9jb25maWcvdHlwZXMuanMnO1xuaW1wb3J0IHtcbiAgdHlwZSBFbmNyeXB0aW9uS2V5UmVzb2x2ZXIsXG4gIGh5ZHJhdGVSZXNvdXJjZUlPLFxuICBpc0VuY3J5cHRlZFJlZixcbiAgaXNFeHBpcmVkUmVmLFxufSBmcm9tICcuL2h5ZHJhdGlvbi5qcyc7XG5cbi8qKlxuICogQ3JlYXRlIGFuIEVuY3J5cHRpb25LZXlSZXNvbHZlciBmcm9tIGEgV29ybGQgaW5zdGFuY2UuXG4gKiBSZXR1cm5zIG51bGwgaWYgZGVjcnlwdCBpcyBmYWxzZSDigJQgZW5jcnlwdGVkIGRhdGEgd2lsbCBzaG93IGFzIGEgcGxhY2Vob2xkZXIuXG4gKlxuICogVGhlIHJlc29sdmVyIGZldGNoZXMgdGhlIGZ1bGwgV29ya2Zsb3dSdW4gKGNhY2hlZCBwZXIgcnVuSWQpIHNvIHRoYXQgdGhlXG4gKiBXb3JsZCBjYW4gaW5zcGVjdCBkZXBsb3ltZW50LXNwZWNpZmljIGZpZWxkcyBmb3Iga2V5IHJlc29sdXRpb24uXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZVJlc29sdmVyKHdvcmxkOiBXb3JsZCwgZGVjcnlwdDogYm9vbGVhbik6IEVuY3J5cHRpb25LZXlSZXNvbHZlciB7XG4gIGlmICghZGVjcnlwdCkgcmV0dXJuIG51bGw7XG4gIGlmICghd29ybGQuZ2V0RW5jcnlwdGlvbktleUZvclJ1bikgcmV0dXJuIG51bGw7XG4gIGNvbnN0IGNhY2hlID0gbmV3IE1hcDxzdHJpbmcsIFByb21pc2U8VWludDhBcnJheSB8IHVuZGVmaW5lZD4+KCk7XG4gIHJldHVybiAocnVuSWQ6IHN0cmluZykgPT4ge1xuICAgIGxldCBjYWNoZWQgPSBjYWNoZS5nZXQocnVuSWQpO1xuICAgIGlmICghY2FjaGVkKSB7XG4gICAgICBjYWNoZWQgPSB3b3JsZC5ydW5zXG4gICAgICAgIC5nZXQocnVuSWQpXG4gICAgICAgIC50aGVuKChydW4pID0+IHdvcmxkLmdldEVuY3J5cHRpb25LZXlGb3JSdW4hKHJ1bikpO1xuICAgICAgY2FjaGUuc2V0KHJ1bklkLCBjYWNoZWQpO1xuICAgIH1cbiAgICByZXR1cm4gY2FjaGVkO1xuICB9O1xufVxuXG5pbXBvcnQgeyBzZXR1cExpc3RQYWdpbmF0aW9uIH0gZnJvbSAnLi9wYWdpbmF0aW9uLmpzJztcbmltcG9ydCB7IHN0cmVhbVRvQ29uc29sZSB9IGZyb20gJy4vc3RyZWFtLmpzJztcbmltcG9ydCB7XG4gIGZvcm1hdElTT0RhdGUsXG4gIGZvcm1hdFN0YXR1cyBhcyBmb3JtYXRTdGF0dXNBYmJyZXYsXG4gIGdldERpc3BsYXlTZXR0aW5ncyxcbiAgZ2V0VGVybWluYWxXaWR0aCxcbiAgaXNDSSxcbn0gZnJvbSAnLi90ZXJtaW5hbC11dGlscy5qcyc7XG5cbmNvbnN0IERFRkFVTFRfUEFHRV9TSVpFID0gMjA7XG5sZXQgVEFCTEVfVFJVTkNBVEVfSU9fTEVOR1RIID0gMTU7IC8vIFdpbGwgYmUgYWRqdXN0ZWQgYmFzZWQgb24gdGVybWluYWwgd2lkdGhcblxuY29uc3QgV09SS0ZMT1dfUlVOX0lPX1BST1BTOiAoa2V5b2YgV29ya2Zsb3dSdW4pW10gPSBbJ2lucHV0JywgJ291dHB1dCddO1xuXG5jb25zdCBTVEVQX0lPX1BST1BTOiAoa2V5b2YgU3RlcClbXSA9IFsnaW5wdXQnLCAnb3V0cHV0J107XG5cbmNvbnN0IFdPUktGTE9XX1JVTl9MSVNURURfUFJPUFM6IChrZXlvZiBXb3JrZmxvd1J1bilbXSA9IFtcbiAgJ3J1bklkJyxcbiAgJ3dvcmtmbG93TmFtZScsXG4gICdzdGF0dXMnLFxuICAnc3RhcnRlZEF0JyxcbiAgJ2NvbXBsZXRlZEF0JyxcbiAgLi4uV09SS0ZMT1dfUlVOX0lPX1BST1BTLFxuXTtcblxuY29uc3QgU1RFUF9MSVNURURfUFJPUFM6IChrZXlvZiBTdGVwKVtdID0gW1xuICAncnVuSWQnLFxuICAnc3RlcElkJyxcbiAgJ3N0ZXBOYW1lJyxcbiAgJ3N0YXR1cycsXG4gICdzdGFydGVkQXQnLFxuICAnY29tcGxldGVkQXQnLFxuICAuLi5TVEVQX0lPX1BST1BTLFxuXTtcblxuY29uc3QgRVZFTlRfSU9fUFJPUFM6IChrZXlvZiBFdmVudCB8ICdldmVudERhdGEnKVtdID0gWydldmVudERhdGEnXTtcblxuY29uc3QgRVZFTlRfTElTVEVEX1BST1BTOiAoa2V5b2YgRXZlbnQgfCAnZXZlbnREYXRhJylbXSA9IFtcbiAgJ2V2ZW50SWQnLFxuICAnZXZlbnRUeXBlJyxcbiAgJ2NvcnJlbGF0aW9uSWQnLFxuICAnY3JlYXRlZEF0JyxcbiAgLi4uRVZFTlRfSU9fUFJPUFMsXG5dO1xuXG4vLyBjb25zdCBIT09LX0RBVEFfUFJPUFM6IChrZXlvZiBIb29rIHwgJ2hhc1Jlc3BvbnNlJylbXSA9IFsnaGFzUmVzcG9uc2UnXTtcblxuY29uc3QgSE9PS19MSVNURURfUFJPUFM6IChrZXlvZiBIb29rIHwgJ2hhc1Jlc3BvbnNlJylbXSA9IFtcbiAgJ3J1bklkJyxcbiAgJ2hvb2tJZCcsXG4gICdvd25lcklkJyxcbiAgJ2NyZWF0ZWRBdCcsXG4gIC8vIC4uLkhPT0tfREFUQV9QUk9QUyxcbl07XG5cbmludGVyZmFjZSBTbGVlcCB7XG4gIGNvcnJlbGF0aW9uSWQ6IHN0cmluZztcbiAgcnVuSWQ6IHN0cmluZztcbiAgZXZlbnRJZDogc3RyaW5nO1xuICBjcmVhdGVkQXQ6IERhdGU7XG4gIHJlc3VtZUF0OiBEYXRlIHwgdW5kZWZpbmVkO1xuICBjb21wbGV0ZWRBdDogRGF0ZSB8IHVuZGVmaW5lZDtcbn1cblxuY29uc3QgV0FJVF9MSVNURURfUFJPUFM6IChrZXlvZiBTbGVlcClbXSA9IFtcbiAgJ2NvcnJlbGF0aW9uSWQnLFxuICAnZXZlbnRJZCcsXG4gICdjcmVhdGVkQXQnLFxuICAncmVzdW1lQXQnLFxuICAnY29tcGxldGVkQXQnLFxuXTtcblxuY29uc3QgU1RBVFVTX0NPTE9SUzogUmVjb3JkPFxuICBXb3JrZmxvd1J1blsnc3RhdHVzJ10gfCBTdGVwWydzdGF0dXMnXSxcbiAgKHZhbHVlOiBzdHJpbmcpID0+IHN0cmluZ1xuPiA9IHtcbiAgcnVubmluZzogY2hhbGsuYmx1ZSxcbiAgY29tcGxldGVkOiBjaGFsay5ncmVlbixcbiAgZmFpbGVkOiBjaGFsay5yZWQsXG4gIGNhbmNlbGxlZDogY2hhbGsuc3RyaWtldGhyb3VnaC55ZWxsb3csXG4gIHBlbmRpbmc6IGNoYWxrLmJsdWUsXG59O1xuXG5jb25zdCBpc1N0cmVhbUlkID0gKHZhbHVlOiBzdHJpbmcpID0+IHtcbiAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycgJiYgdmFsdWUuc3RhcnRzV2l0aCgnc3RybV8nKTtcbn07XG5cbmNvbnN0IHNob3dTdGF0dXNMZWdlbmQgPSAoKSA9PiB7XG4gIGxvZ2dlci5sb2coJ1xcblN0YXR1cyBMZWdlbmQ6Jyk7XG4gIGNvbnN0IHN0YXR1c2VzOiBBcnJheTxXb3JrZmxvd1J1blsnc3RhdHVzJ10gfCBTdGVwWydzdGF0dXMnXT4gPSBbXG4gICAgJ3J1bm5pbmcnLFxuICAgICdjb21wbGV0ZWQnLFxuICAgICdmYWlsZWQnLFxuICAgICdjYW5jZWxsZWQnLFxuICAgICdwZW5kaW5nJyxcbiAgXTtcblxuICBjb25zdCBsZWdlbmRJdGVtcyA9IHN0YXR1c2VzLm1hcCgoc3RhdHVzKSA9PiB7XG4gICAgY29uc3QgY29sb3JGdW5jID0gU1RBVFVTX0NPTE9SU1tzdGF0dXNdO1xuICAgIGNvbnN0IGFiYnJldiA9IGZvcm1hdFN0YXR1c0FiYnJldihzdGF0dXMsIHRydWUpO1xuICAgIHJldHVybiBgJHtjb2xvckZ1bmMoYWJicmV2KX0gPSAke3N0YXR1c31gO1xuICB9KTtcblxuICBsb2dnZXIubG9nKGAgICR7bGVnZW5kSXRlbXMuam9pbignICAnKX1gKTtcbiAgbG9nZ2VyLmxvZygnJyk7XG59O1xuXG5jb25zdCBpc1NsZWVwU3RlcCA9IChzdGVwTmFtZTogc3RyaW5nKSA9PiB7XG4gIHJldHVybiBzdGVwTmFtZS5pbmNsdWRlcygnLXNsZWVwJyk7XG59O1xuXG5jb25zdCBjaGVja0FuZEhhbmRsZVZlcmNlbEFjY2Vzc0Vycm9yID0gKFxuICBlcnJvcjogdW5rbm93bixcbiAgYmFja2VuZD86IHN0cmluZ1xuKTogYm9vbGVhbiA9PiB7XG4gIGlmIChiYWNrZW5kID09PSAndmVyY2VsJyAmJiBlcnJvciAmJiB0eXBlb2YgZXJyb3IgPT09ICdvYmplY3QnKSB7XG4gICAgY29uc3QgZXJyID0gZXJyb3IgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gICAgaWYgKGVyci5zdGF0dXMgPT09IDQwMykge1xuICAgICAgbG9nZ2VyLmVycm9yKFZFUkNFTF80MDNfRVJST1JfTUVTU0FHRSk7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGZhbHNlO1xufTtcblxuY29uc3QgZXh0cmFjdEVycm9yTWVzc2FnZSA9IChcbiAgZXJyOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPlxuKTogc3RyaW5nIHwgdW5kZWZpbmVkID0+IHtcbiAgaWYgKGVyci5tZXNzYWdlICYmIHR5cGVvZiBlcnIubWVzc2FnZSA9PT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gZXJyLm1lc3NhZ2U7XG4gIH1cblxuICBpZiAoZXJyLmJvZHkgJiYgdHlwZW9mIGVyci5ib2R5ID09PSAnb2JqZWN0Jykge1xuICAgIGNvbnN0IGJvZHkgPSBlcnIuYm9keSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgICBpZiAoYm9keS5tZXNzYWdlICYmIHR5cGVvZiBib2R5Lm1lc3NhZ2UgPT09ICdzdHJpbmcnKSB7XG4gICAgICByZXR1cm4gYm9keS5tZXNzYWdlO1xuICAgIH1cbiAgICBpZiAoYm9keS5lcnJvciAmJiB0eXBlb2YgYm9keS5lcnJvciA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHJldHVybiBib2R5LmVycm9yO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB1bmRlZmluZWQ7XG59O1xuXG5jb25zdCBoYW5kbGVBcGlFcnJvciA9IChlcnJvcjogdW5rbm93biwgYmFja2VuZD86IHN0cmluZyk6IGJvb2xlYW4gPT4ge1xuICAvLyBGaXJzdCBjaGVjayBmb3IgVmVyY2VsIGFjY2VzcyBlcnJvcnNcbiAgaWYgKGNoZWNrQW5kSGFuZGxlVmVyY2VsQWNjZXNzRXJyb3IoZXJyb3IsIGJhY2tlbmQpKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICAvLyBIYW5kbGUgb3RoZXIgSFRUUCBlcnJvcnNcbiAgaWYgKGVycm9yICYmIHR5cGVvZiBlcnJvciA9PT0gJ29iamVjdCcpIHtcbiAgICBjb25zdCBlcnIgPSBlcnJvciBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcblxuICAgIC8vIEhhbmRsZSA0MDAgQmFkIFJlcXVlc3RcbiAgICBpZiAoZXJyLnN0YXR1cyA9PT0gNDAwKSB7XG4gICAgICBsb2dnZXIuZXJyb3IoJ0JhZCBSZXF1ZXN0OiBUaGUgcmVxdWVzdCB3YXMgaW52YWxpZC4nKTtcbiAgICAgIGNvbnN0IG1lc3NhZ2UgPSBleHRyYWN0RXJyb3JNZXNzYWdlKGVycik7XG4gICAgICBpZiAobWVzc2FnZSkge1xuICAgICAgICBsb2dnZXIuZXJyb3IoYERldGFpbHM6ICR7bWVzc2FnZX1gKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIC8vIEhhbmRsZSBvdGhlciBIVFRQIGVycm9ycyAoNDA0LCA1MDAsIGV0Yy4pXG4gICAgaWYgKHR5cGVvZiBlcnIuc3RhdHVzID09PSAnbnVtYmVyJyAmJiBlcnIuc3RhdHVzID49IDQwMCkge1xuICAgICAgbG9nZ2VyLmVycm9yKGBIVFRQIEVycm9yICR7ZXJyLnN0YXR1c306ICR7Z2V0U3RhdHVzVGV4dChlcnIuc3RhdHVzKX1gKTtcbiAgICAgIGNvbnN0IG1lc3NhZ2UgPSBleHRyYWN0RXJyb3JNZXNzYWdlKGVycik7XG4gICAgICBpZiAobWVzc2FnZSkge1xuICAgICAgICBsb2dnZXIuZXJyb3IoYERldGFpbHM6ICR7bWVzc2FnZX1gKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBmYWxzZTtcbn07XG5cbmNvbnN0IGdldFN0YXR1c1RleHQgPSAoc3RhdHVzOiBudW1iZXIpOiBzdHJpbmcgPT4ge1xuICBjb25zdCBzdGF0dXNUZXh0czogUmVjb3JkPG51bWJlciwgc3RyaW5nPiA9IHtcbiAgICA0MDA6ICdCYWQgUmVxdWVzdCcsXG4gICAgNDAxOiAnVW5hdXRob3JpemVkJyxcbiAgICA0MDM6ICdGb3JiaWRkZW4nLFxuICAgIDQwNDogJ05vdCBGb3VuZCcsXG4gICAgNDI5OiAnVG9vIE1hbnkgUmVxdWVzdHMnLFxuICAgIDUwMDogJ0ludGVybmFsIFNlcnZlciBFcnJvcicsXG4gICAgNTAyOiAnQmFkIEdhdGV3YXknLFxuICAgIDUwMzogJ1NlcnZpY2UgVW5hdmFpbGFibGUnLFxuICB9O1xuICByZXR1cm4gc3RhdHVzVGV4dHNbc3RhdHVzXSB8fCAnVW5rbm93biBFcnJvcic7XG59O1xuXG5jb25zdCB0cnVuY2F0ZU5hbWVJZk5lZWRlZCA9IChuYW1lOiBzdHJpbmcsIG1heExlbmd0aDogbnVtYmVyKTogc3RyaW5nID0+IHtcbiAgcmV0dXJuIG1heExlbmd0aCA8IG5hbWUubGVuZ3RoID8gYCR7bmFtZS5zdWJzdHJpbmcoMCwgbWF4TGVuZ3RoKX0uLi5gIDogbmFtZTtcbn07XG5cbmNvbnN0IGZvcm1hdE5hbWVGaWVsZCA9IChcbiAgbmFtZU5vblVuaXF1ZTogc3RyaW5nLFxuICB0cnVuY2F0ZUxlbmd0aDogbnVtYmVyLFxuICBpc1NsZWVwOiBib29sZWFuXG4pOiBzdHJpbmcgPT4ge1xuICBjb25zdCB0cnVuY2F0ZWROYW1lID0gdHJ1bmNhdGVOYW1lSWZOZWVkZWQobmFtZU5vblVuaXF1ZSwgdHJ1bmNhdGVMZW5ndGgpO1xuICBpZiAoaXNTbGVlcCkge1xuICAgIHJldHVybiBjaGFsay55ZWxsb3dCcmlnaHQodHJ1bmNhdGVkTmFtZSk7XG4gIH1cbiAgcmV0dXJuIGNoYWxrLmJsdWUuYmx1ZUJyaWdodCh0cnVuY2F0ZWROYW1lKTtcbn07XG5cbmNvbnN0IGZvcm1hdElkRmllbGQgPSAoXG4gIHByb3A6IHN0cmluZyxcbiAgdmFsdWU6IHVua25vd24sXG4gIHNob3VsZFRydW5jYXRlSWRzOiBib29sZWFuXG4pOiBzdHJpbmcgfCB1bmRlZmluZWQgPT4ge1xuICBjb25zdCB2YWx1ZVN0ciA9IFN0cmluZyh2YWx1ZSk7XG4gIGNvbnN0IGlkU3RyID0gc2hvdWxkVHJ1bmNhdGVJZHMgPyB0cnVuY2F0ZUlkVG9MYXN0Q2hhcnModmFsdWVTdHIpIDogdmFsdWVTdHI7XG4gIGlmIChwcm9wID09PSAnc3RyZWFtSWQnKSB7XG4gICAgcmV0dXJuIGNoYWxrLmdyZWVuKGlkU3RyKTtcbiAgfVxuICByZXR1cm4gaWRTdHI7XG59O1xuXG5leHBvcnQgY29uc3QgZm9ybWF0VGFibGVWYWx1ZSA9IChcbiAgcHJvcDogc3RyaW5nLFxuICB2YWx1ZTogdW5rbm93bixcbiAgb3B0czogSW5zcGVjdENMSU9wdGlvbnMgPSB7fSxcbiAgZGlzcGxheVNldHRpbmdzPzogUmV0dXJuVHlwZTx0eXBlb2YgZ2V0RGlzcGxheVNldHRpbmdzPixcbiAgaXRlbT86IFJlY29yZDxzdHJpbmcsIHVua25vd24+XG4pID0+IHtcbiAgY29uc3QgbmFtZXNUcnVuY2F0ZSA9IGRpc3BsYXlTZXR0aW5ncz8ubmFtZXNUcnVuY2F0ZUxlbmd0aCA/PyA0MDtcbiAgY29uc3Qgc2hvdWxkVHJ1bmNhdGVJZHMgPSBkaXNwbGF5U2V0dGluZ3M/LnRydW5jYXRlSWRzVG9MYXN0Q2hhcnMgPz8gZmFsc2U7XG5cbiAgLy8gSGFuZGxlIElEcyB3aXRoIHBvdGVudGlhbCB0cnVuY2F0aW9uXG4gIGlmIChcbiAgICBbXG4gICAgICAnc3RyZWFtSWQnLFxuICAgICAgJ3J1bklkJyxcbiAgICAgICdzdGVwSWQnLFxuICAgICAgJ2hvb2tJZCcsXG4gICAgICAnZXZlbnRJZCcsXG4gICAgICAnY29ycmVsYXRpb25JZCcsXG4gICAgICAnb3duZXJJZCcsXG4gICAgXS5pbmNsdWRlcyhwcm9wKVxuICApIHtcbiAgICByZXR1cm4gZm9ybWF0SWRGaWVsZChwcm9wLCB2YWx1ZSwgc2hvdWxkVHJ1bmNhdGVJZHMpO1xuICB9XG5cbiAgLy8gSGFuZGxlIG5hbWVzIHdpdGggdHJ1bmNhdGlvblxuICBpZiAocHJvcCA9PT0gJ3N0ZXBOYW1lJykge1xuICAgIGNvbnN0IG5hbWVOb25VbmlxdWUgPSBwYXJzZVN0ZXBOYW1lKFN0cmluZyh2YWx1ZSkpPy5zaG9ydE5hbWUgfHwgJz8nO1xuICAgIHJldHVybiBmb3JtYXROYW1lRmllbGQoXG4gICAgICBuYW1lTm9uVW5pcXVlLFxuICAgICAgbmFtZXNUcnVuY2F0ZSxcbiAgICAgIGlzU2xlZXBTdGVwKFN0cmluZyh2YWx1ZSkpXG4gICAgKTtcbiAgfVxuXG4gIGlmIChwcm9wID09PSAnd29ya2Zsb3dOYW1lJykge1xuICAgIGNvbnN0IG5hbWVOb25VbmlxdWUgPSBwYXJzZVdvcmtmbG93TmFtZShTdHJpbmcodmFsdWUpKT8uc2hvcnROYW1lIHx8ICc/JztcbiAgICBjb25zdCB0cnVuY2F0ZWROYW1lID0gdHJ1bmNhdGVOYW1lSWZOZWVkZWQobmFtZU5vblVuaXF1ZSwgbmFtZXNUcnVuY2F0ZSk7XG4gICAgcmV0dXJuIGNoYWxrLmJsdWUuYmx1ZUJyaWdodCh0cnVuY2F0ZWROYW1lKTtcbiAgfVxuXG4gIGlmIChwcm9wID09PSAnb3V0cHV0JyB8fCBwcm9wID09PSAnaW5wdXQnIHx8IHByb3AgPT09ICdlcnJvcicpIHtcbiAgICBpZiAoXG4gICAgICBpdGVtICYmXG4gICAgICAnZXhwaXJlZEF0JyBpbiBpdGVtICYmXG4gICAgICBpdGVtLmV4cGlyZWRBdCAhPSBudWxsICYmXG4gICAgICBuZXcgRGF0ZShpdGVtLmV4cGlyZWRBdCBhcyBzdHJpbmcgfCBudW1iZXIgfCBEYXRlKSA8IG5ldyBEYXRlKClcbiAgICApIHtcbiAgICAgIHJldHVybiBFWFBJUkVEX0RBVEFfTUVTU0FHRTtcbiAgICB9XG4gICAgcmV0dXJuIGlubGluZUZvcm1hdElPKHZhbHVlKTtcbiAgfVxuXG4gIGlmIChwcm9wID09PSAnc3RhdHVzJykge1xuICAgIGNvbnN0IHN0YXR1cyA9IHZhbHVlIGFzIFdvcmtmbG93UnVuWydzdGF0dXMnXSB8IFN0ZXBbJ3N0YXR1cyddO1xuICAgIGNvbnN0IGNvbG9yRnVuYyA9IFNUQVRVU19DT0xPUlNbc3RhdHVzXTtcbiAgICBjb25zdCBmb3JtYXR0ZWRTdGF0dXMgPSBkaXNwbGF5U2V0dGluZ3M/LmFiYnJldmlhdGVTdGF0dXNcbiAgICAgID8gZm9ybWF0U3RhdHVzQWJicmV2KHN0YXR1cywgdHJ1ZSlcbiAgICAgIDogc3RhdHVzO1xuICAgIHJldHVybiBjb2xvckZ1bmMoZm9ybWF0dGVkU3RhdHVzKTtcbiAgfVxuXG4gIGlmIChwcm9wID09PSAnZXZlbnREYXRhJykge1xuICAgIHJldHVybiB0cnVuY2F0ZVN0cmluZyhKU09OLnN0cmluZ2lmeSh2YWx1ZSkpO1xuICB9XG5cbiAgaWYgKHByb3AgPT09ICdoYXNSZXNwb25zZScpIHtcbiAgICByZXR1cm4gdmFsdWUgPyBjaGFsay5ncmVlbigndHJ1ZScpIDogY2hhbGsuZ3JheSgnZmFsc2UnKTtcbiAgfVxuXG4gIGlmICh2YWx1ZSBpbnN0YW5jZW9mIERhdGUpIHtcbiAgICByZXR1cm4gZm9ybWF0VGFibGVUaW1lc3RhbXAodmFsdWUsIG9wdHMsIGRpc3BsYXlTZXR0aW5ncyk7XG4gIH1cblxuICByZXR1cm4gdmFsdWU7XG59O1xuXG5jb25zdCBnZXRWaXNpYmxlUHJvcHMgPSAoXG4gIHByb3BzOiBzdHJpbmdbXSxcbiAgZGlzcGxheVNldHRpbmdzOiBSZXR1cm5UeXBlPHR5cGVvZiBnZXREaXNwbGF5U2V0dGluZ3M+XG4pOiBzdHJpbmdbXSA9PiB7XG4gIGlmIChkaXNwbGF5U2V0dGluZ3MuaGlkZUNvbXBsZXRlZEF0KSB7XG4gICAgcmV0dXJuIHByb3BzLmZpbHRlcigocHJvcCkgPT4gcHJvcCAhPT0gJ2NvbXBsZXRlZEF0Jyk7XG4gIH1cbiAgcmV0dXJuIHByb3BzO1xufTtcblxuY29uc3Qgc2hvd1RhYmxlID0gKFxuICBkYXRhOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPltdLFxuICBwcm9wczogc3RyaW5nW10sXG4gIG9wdHM6IEluc3BlY3RDTElPcHRpb25zID0ge31cbikgPT4ge1xuICAvLyBHZXQgZGlzcGxheSBzZXR0aW5ncyBiYXNlZCBvbiB0ZXJtaW5hbCB3aWR0aFxuICBjb25zdCB0ZXJtaW5hbFdpZHRoID0gZ2V0VGVybWluYWxXaWR0aCgpO1xuICBjb25zdCBkaXNwbGF5U2V0dGluZ3MgPSBnZXREaXNwbGF5U2V0dGluZ3MoXG4gICAgdGVybWluYWxXaWR0aCxcbiAgICBvcHRzLndpdGhEYXRhIHx8IGZhbHNlLFxuICAgIHByb3BzLmluY2x1ZGVzKCdydW5OYW1lJylcbiAgKTtcblxuICAvLyBGaWx0ZXIgb3V0IGNvbXBsZXRlZEF0IGNvbHVtbiBpZiBuZWVkZWRcbiAgY29uc3QgdmlzaWJsZVByb3BzID0gZ2V0VmlzaWJsZVByb3BzKHByb3BzLCBkaXNwbGF5U2V0dGluZ3MpO1xuXG4gIC8vIFVwZGF0ZSB0cnVuY2F0ZSBsZW5ndGggZm9yIElPIGZpZWxkc1xuICBjb25zdCBvcmlnaW5hbFRydW5jYXRlTGVuZ3RoID0gVEFCTEVfVFJVTkNBVEVfSU9fTEVOR1RIO1xuICBUQUJMRV9UUlVOQ0FURV9JT19MRU5HVEggPSBkaXNwbGF5U2V0dGluZ3MuZGF0YUZpZWxkV2lkdGg7XG5cbiAgLy8gU2hvdyBzdGF0dXMgbGVnZW5kIGlmIHVzaW5nIGFiYnJldmlhdGVkIHN0YXR1c1xuICBpZiAoXG4gICAgZGF0YS5sZW5ndGggPiAwICYmXG4gICAgZGlzcGxheVNldHRpbmdzLmFiYnJldmlhdGVTdGF0dXMgJiZcbiAgICB2aXNpYmxlUHJvcHMuaW5jbHVkZXMoJ3N0YXR1cycpXG4gICkge1xuICAgIHNob3dTdGF0dXNMZWdlbmQoKTtcbiAgfVxuXG4gIC8vIENyZWF0ZSBoZWFkZXIgbWFwcGluZyBmb3IgYWJicmV2aWF0ZWQgc3RhdHVzXG4gIGNvbnN0IGhlYWRlck1hcDogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHt9O1xuICBpZiAoZGlzcGxheVNldHRpbmdzLmFiYnJldmlhdGVTdGF0dXMgJiYgdmlzaWJsZVByb3BzLmluY2x1ZGVzKCdzdGF0dXMnKSkge1xuICAgIGhlYWRlck1hcFsnc3RhdHVzJ10gPSAnUyc7XG4gIH1cblxuICAvLyBBZGQgYSBibGFuayBsaW5lIGJlZm9yZSBhbnkgdGFibGVcbiAgY29uc3QgdGFibGUgPSBuZXcgVGFibGUoKTtcbiAgaWYgKGRhdGEgJiYgZGF0YS5sZW5ndGggPT09IDApIHtcbiAgICBsb2dnZXIud2FybignTm8gZGF0YSBmb3VuZCBmb3IgdGhpcyBxdWVyeSBhbmQgcmVzb3VyY2UuXFxuJyk7XG4gICAgZm9yIChjb25zdCBwcm9wIG9mIHZpc2libGVQcm9wcykge1xuICAgICAgY29uc3QgaGVhZGVyID0gaGVhZGVyTWFwW3Byb3BdIHx8IHByb3A7XG4gICAgICB0YWJsZS5jZWxsKGhlYWRlciwgJ04vQScpO1xuICAgIH1cbiAgICB0YWJsZS5uZXdSb3coKTtcbiAgICAvLyBSZXN0b3JlIG9yaWdpbmFsIHRydW5jYXRlIGxlbmd0aFxuICAgIFRBQkxFX1RSVU5DQVRFX0lPX0xFTkdUSCA9IG9yaWdpbmFsVHJ1bmNhdGVMZW5ndGg7XG4gICAgcmV0dXJuIHRhYmxlLnRvU3RyaW5nKCk7XG4gIH0gZWxzZSBpZiAoIWRhdGEpIHtcbiAgICBsb2dnZXIud2FybignRXhwZWN0aW5nIGFuIGFycmF5IG9mIGRhdGEsIGJ1dCBnb3QgbnVsbC5cXG4nKTtcbiAgfVxuICBsb2dnZXIubG9nKCcnKTtcbiAgZm9yIChjb25zdCBpdGVtIG9mIGRhdGEpIHtcbiAgICBmb3IgKGNvbnN0IHByb3Agb2YgdmlzaWJsZVByb3BzKSB7XG4gICAgICBjb25zdCBoZWFkZXIgPSBoZWFkZXJNYXBbcHJvcF0gfHwgcHJvcDtcbiAgICAgIGNvbnN0IHZhbHVlID0gaXRlbVtwcm9wXTtcbiAgICAgIHRhYmxlLmNlbGwoXG4gICAgICAgIGhlYWRlcixcbiAgICAgICAgZm9ybWF0VGFibGVWYWx1ZShwcm9wLCB2YWx1ZSwgb3B0cywgZGlzcGxheVNldHRpbmdzLCBpdGVtKVxuICAgICAgKTtcbiAgICB9XG4gICAgdGFibGUubmV3Um93KCk7XG4gIH1cblxuICAvLyBSZXN0b3JlIG9yaWdpbmFsIHRydW5jYXRlIGxlbmd0aFxuICBUQUJMRV9UUlVOQ0FURV9JT19MRU5HVEggPSBvcmlnaW5hbFRydW5jYXRlTGVuZ3RoO1xuICByZXR1cm4gdGFibGUudG9TdHJpbmcoKTtcbn07XG5cbmNvbnN0IHNob3dKc29uID0gKGRhdGE6IHVua25vd24pID0+IHtcbiAgY29uc3QganNvbiA9IEpTT04uc3RyaW5naWZ5KGRhdGEsIG51bGwsIDIpO1xuICBwcm9jZXNzLnN0ZG91dC53cml0ZShgJHtqc29ufVxcbmApO1xufTtcblxuLyoqXG4gKiBJbiB0YWJsZXMsIHdlIHdhbnQgdG8gc2hvdyBhIHNob3J0ZXIgdGltZXN0YW1wLCBZWVlZLU1NLUREIEhIOk1NOlNTXG4gKi9cbmNvbnN0IGZvcm1hdFRhYmxlVGltZXN0YW1wID0gKFxuICB2YWx1ZTogRGF0ZSxcbiAgb3B0czogSW5zcGVjdENMSU9wdGlvbnMgPSB7fSxcbiAgZGlzcGxheVNldHRpbmdzPzogUmV0dXJuVHlwZTx0eXBlb2YgZ2V0RGlzcGxheVNldHRpbmdzPlxuKSA9PiB7XG4gIC8vIEZvcm1hdCBJU08gdGltZSB3aXRob3V0IFQgYW5kIFpcbiAgY29uc3QgaXNvVGltZSA9IGZvcm1hdElTT0RhdGUodmFsdWUpO1xuXG4gIC8vIFNob3cgcmVsYXRpdmUgdGltZSBvbmx5IGlmOlxuICAvLyAtIE5vdCBpbiBDSSBtb2RlXG4gIC8vIC0gRGlzcGxheSBzZXR0aW5ncyBhbGxvdyBpdCAoYmFzZWQgb24gdGVybWluYWwgd2lkdGgpXG4gIC8vIC0gd2l0aERhdGEgaXMgZGlzYWJsZWQgKG1vcmUgc3BhY2UgYXZhaWxhYmxlKVxuICAvLyAtIE5vdCBpbiBKU09OIG1vZGVcbiAgLy8gLSBkaXNhYmxlUmVsYXRpdmVEYXRlcyBpcyBub3Qgc2V0XG4gIGNvbnN0IHNob3VsZFNob3dSZWxhdGl2ZSA9XG4gICAgIWlzQ0koKSAmJlxuICAgIGRpc3BsYXlTZXR0aW5ncz8uc2hvd1JlbGF0aXZlRGF0ZXMgIT09IGZhbHNlICYmXG4gICAgIW9wdHMud2l0aERhdGEgJiZcbiAgICAhb3B0cy5qc29uICYmXG4gICAgIW9wdHMuZGlzYWJsZVJlbGF0aXZlRGF0ZXM7XG5cbiAgaWYgKHNob3VsZFNob3dSZWxhdGl2ZSkge1xuICAgIGNvbnN0IHJlbGF0aXZlID0gZm9ybWF0RGlzdGFuY2UodmFsdWUsIG5ldyBEYXRlKCksIHsgYWRkU3VmZml4OiB0cnVlIH0pO1xuICAgIHJldHVybiBgJHtpc29UaW1lfSAoJHtyZWxhdGl2ZX0pYDtcbiAgfVxuXG4gIHJldHVybiBpc29UaW1lO1xufTtcblxuY29uc3QgdHJ1bmNhdGVTdHJpbmcgPSAoXG4gIHN0cjogc3RyaW5nLFxuICBtYXhMZW5ndGg6IG51bWJlciA9IFRBQkxFX1RSVU5DQVRFX0lPX0xFTkdUSFxuKSA9PiB7XG4gIHJldHVybiBzdHIgJiYgc3RyLmxlbmd0aCA+IG1heExlbmd0aFxuICAgID8gYCR7c3RyLnN1YnN0cmluZygwLCBtYXhMZW5ndGgpfS4uLmBcbiAgICA6IHN0cjtcbn07XG5cbmNvbnN0IHRydW5jYXRlSWRUb0xhc3RDaGFycyA9IChpZDogc3RyaW5nLCBjaGFyczogbnVtYmVyID0gNCk6IHN0cmluZyA9PiB7XG4gIGlmICghaWQgfHwgaWQubGVuZ3RoIDw9IGNoYXJzKSByZXR1cm4gaWQ7XG4gIHJldHVybiBgLi4uJHtpZC5zdWJzdHJpbmcoaWQubGVuZ3RoIC0gY2hhcnMpfWA7XG59O1xuXG5jb25zdCBzaG93SW5zcGVjdEluZm9Cb3ggPSAocmVzb3VyY2U6IHN0cmluZykgPT4ge1xuICBsb2dnZXIuaW5mbyhcbiAgICBgVG8gdmlldyBkZXRhaWxzIGZvciBhICR7cmVzb3VyY2V9LCB1c2UgXFxgd29ya2Zsb3cgaW5zcGVjdCAke3Jlc291cmNlfVxcYCA8aWQ+YFxuICApO1xuICBsb2dnZXIuaW5mbyhcbiAgICBgVG8gdmlldyB0aGUgY29udGVudCBvZiBhbnkgc3RyZWFtLCB1c2UgXFxgd29ya2Zsb3cgaW5zcGVjdCBzdHJlYW0gPHN0cmVhbS1pZD5cXGBgXG4gICk7XG59O1xuXG5jb25zdCBFWFBJUkVEX0RBVEFfTUVTU0FHRSA9IGNoYWxrLmdyYXkoJzxkYXRhIGV4cGlyZWQ+Jyk7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGEgcnVuIGhhcyBleHBpcmVkIGRhdGEgc3RvcmFnZSAocnVuLWxldmVsIGV4cGlyZWRBdCBmaWVsZCkuXG4gKiBPbmx5IHJldHVybnMgdHJ1ZSB3aGVuIGBleHBpcmVkQXRgIGlzIGluIHRoZSBwYXN0LlxuICovXG5leHBvcnQgY29uc3QgaGFzRXhwaXJlZERhdGEgPSAocnVuOiBXb3JrZmxvd1J1bik6IGJvb2xlYW4gPT4ge1xuICByZXR1cm4gKFxuICAgICdleHBpcmVkQXQnIGluIHJ1biAmJlxuICAgIHJ1bi5leHBpcmVkQXQgIT0gbnVsbCAmJlxuICAgIG5ldyBEYXRlKHJ1bi5leHBpcmVkQXQpIDwgbmV3IERhdGUoKVxuICApO1xufTtcblxuLyoqXG4gKiBDaGVja3MgaWYgYW55IGRhdGEgZmllbGQgaW4gYSBoeWRyYXRlZCByZXNvdXJjZSBoYXMgYmVlbiByZXBsYWNlZCB3aXRoIGFuXG4gKiBleHBpcmVkIHBsYWNlaG9sZGVyLiBXb3JrcyBmb3IgcnVucywgc3RlcHMsIGhvb2tzLCBhbmQgZXZlbnRzIOKAlCB1bmxpa2VcbiAqIGBoYXNFeHBpcmVkRGF0YWAgd2hpY2ggb25seSBjaGVja3MgdGhlIHJ1bi1sZXZlbCBgZXhwaXJlZEF0YCBmaWVsZC5cbiAqL1xuY29uc3QgaGFzRXhwaXJlZEZpZWxkcyA9IChyZXNvdXJjZTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4pOiBib29sZWFuID0+IHtcbiAgcmV0dXJuIFsnaW5wdXQnLCAnb3V0cHV0JywgJ2Vycm9yJywgJ21ldGFkYXRhJ10uc29tZSgoa2V5KSA9PlxuICAgIGlzRXhwaXJlZFJlZihyZXNvdXJjZVtrZXldKVxuICApO1xufTtcblxuLyoqXG4gKiBUYWtlcyBoeWRyYXRlZCBzdGVwL3dvcmtmbG93IGlucHV0L291dHB1dCBhbmQgc2VyaWFsaXplcyBpdCBmb3IgaW5saW5lIGRpc3BsYXkuXG4gKi9cbmNvbnN0IGlubGluZUZvcm1hdElPID0gPFQ+KGlvOiBULCB0b3BMZXZlbDogYm9vbGVhbiA9IHRydWUpOiBzdHJpbmcgPT4ge1xuICBjb25zdCB0eXBlID0gdHlwZW9mIGlvO1xuICBsZXQgdmFsdWUgPSAnJztcbiAgaWYgKGlvID09PSB1bmRlZmluZWQpIHtcbiAgICB2YWx1ZSA9ICc8ZW1wdHk+JztcbiAgfSBlbHNlIGlmIChpbyA9PT0gbnVsbCkge1xuICAgIHZhbHVlID0gJzxudWxsPic7XG4gIH0gZWxzZSBpZiAoaXNFbmNyeXB0ZWRSZWYoaW8pKSB7XG4gICAgdmFsdWUgPSBjaGFsay5kaW0ueWVsbG93KCdcXHV7MUY1MTJ9IEVuY3J5cHRlZCcpO1xuICB9IGVsc2UgaWYgKGlzRXhwaXJlZFJlZihpbykpIHtcbiAgICB2YWx1ZSA9IGNoYWxrLmdyYXkoJzxkYXRhIGV4cGlyZWQ+Jyk7XG4gIH0gZWxzZSBpZiAoaW8gJiYgQXJyYXkuaXNBcnJheShpbykpIHtcbiAgICBpZiAoaW8ubGVuZ3RoID09PSAwKSB7XG4gICAgICB2YWx1ZSA9ICc8ZW1wdHk+JztcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3Qgc3RyaW5naWZpZWQgPSBpb1xuICAgICAgICAubWFwKChpdGVtKSA9PiBpbmxpbmVGb3JtYXRJTyhpdGVtLCBmYWxzZSkpXG4gICAgICAgIC5qb2luKCcsJyk7XG4gICAgICBpZiAoc3RyaW5naWZpZWQubGVuZ3RoID4gVEFCTEVfVFJVTkNBVEVfSU9fTEVOR1RIICYmIHRvcExldmVsKSB7XG4gICAgICAgIHZhbHVlID0gY2hhbGsueWVsbG93KGAke2lvLmxlbmd0aH0gYXJnc2ApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFsdWUgPSBzdHJpbmdpZmllZDtcbiAgICAgIH1cbiAgICB9XG4gIH0gZWxzZSBpZiAodHlwZSA9PT0gJ29iamVjdCcpIHtcbiAgICBpZiAoaW8gaW5zdGFuY2VvZiBEYXRlKSB7XG4gICAgICB2YWx1ZSA9IGlvLnRvSVNPU3RyaW5nKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhbHVlID0gdHJ1bmNhdGVTdHJpbmcoSlNPTi5zdHJpbmdpZnkoaW8pKTtcbiAgICB9XG4gIH0gZWxzZSBpZiAoWydzdHJpbmcnLCAnbnVtYmVyJywgJ2Jvb2xlYW4nXS5pbmNsdWRlcyh0eXBlKSkge1xuICAgIGlmIChpc1N0cmVhbUlkKGlvIGFzIHN0cmluZykpIHtcbiAgICAgIHZhbHVlID0gaW8udG9TdHJpbmcoKTtcbiAgICB9IGVsc2UgaWYgKHR5cGUgPT09ICdzdHJpbmcnICYmIChpbyBhcyBzdHJpbmcpLmluY2x1ZGVzKCdzdHJtXycpKSB7XG4gICAgICB2YWx1ZSA9IGlvIGFzIHN0cmluZztcbiAgICB9IGVsc2Uge1xuICAgICAgdmFsdWUgPSB0cnVuY2F0ZVN0cmluZyhTdHJpbmcoaW8pKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgdmFsdWUgPSBgPCR7dHlwZX0+YDtcbiAgfVxuICByZXR1cm4gdmFsdWU7XG59O1xuXG5leHBvcnQgY29uc3QgbGlzdFJ1bnMgPSBhc3luYyAod29ybGQ6IFdvcmxkLCBvcHRzOiBJbnNwZWN0Q0xJT3B0aW9ucyA9IHt9KSA9PiB7XG4gIGNvbnN0IHJlc29sdmVLZXkgPSBjcmVhdGVSZXNvbHZlcih3b3JsZCwgb3B0cz8uZGVjcnlwdCA/PyBmYWxzZSk7XG5cbiAgaWYgKG9wdHMuc3RlcElkIHx8IG9wdHMucnVuSWQpIHtcbiAgICBsb2dnZXIud2FybihcbiAgICAgICdGaWx0ZXJpbmcgYnkgc3RlcC1pZCBvciBydW4taWQgaXMgbm90IHN1cHBvcnRlZCBpbiBsaXN0IGNhbGxzLCBpZ25vcmluZyBmaWx0ZXIuJ1xuICAgICk7XG4gIH1cblxuICBjb25zdCByZXNvbHZlRGF0YSA9IG9wdHMud2l0aERhdGEgPyAnYWxsJyA6ICdub25lJztcblxuICAvLyBEZXRlcm1pbmUgd2hpY2ggcHJvcHMgdG8gc2hvdyBiYXNlZCBvbiB3aXRoRGF0YSBmbGFnXG4gIGNvbnN0IHByb3BzID0gb3B0cy53aXRoRGF0YVxuICAgID8gV09SS0ZMT1dfUlVOX0xJU1RFRF9QUk9QU1xuICAgIDogV09SS0ZMT1dfUlVOX0xJU1RFRF9QUk9QUy5maWx0ZXIoXG4gICAgICAgIChwcm9wKSA9PiAhV09SS0ZMT1dfUlVOX0lPX1BST1BTLmluY2x1ZGVzKHByb3ApXG4gICAgICApO1xuXG4gIC8vIEZvciBKU09OIG91dHB1dCwganVzdCBmZXRjaCBvbmNlIGFuZCByZXR1cm5cbiAgaWYgKG9wdHMuanNvbikge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBydW5zID0gYXdhaXQgd29ybGQucnVucy5saXN0KHtcbiAgICAgICAgd29ya2Zsb3dOYW1lOiBvcHRzLndvcmtmbG93TmFtZSxcbiAgICAgICAgc3RhdHVzOiBvcHRzLnN0YXR1cyBhcyBhbnksXG4gICAgICAgIHBhZ2luYXRpb246IHtcbiAgICAgICAgICBzb3J0T3JkZXI6IG9wdHMuc29ydCB8fCAnZGVzYycsXG4gICAgICAgICAgY3Vyc29yOiBvcHRzLmN1cnNvcixcbiAgICAgICAgICBsaW1pdDogb3B0cy5saW1pdCB8fCBERUZBVUxUX1BBR0VfU0laRSxcbiAgICAgICAgfSxcbiAgICAgICAgcmVzb2x2ZURhdGEsXG4gICAgICB9KTtcbiAgICAgIGNvbnN0IHJ1bnNXaXRoSHlkcmF0ZWRJTyA9IGF3YWl0IFByb21pc2UuYWxsKFxuICAgICAgICBydW5zLmRhdGEubWFwKChyKSA9PiBoeWRyYXRlUmVzb3VyY2VJTyhyLCByZXNvbHZlS2V5KSlcbiAgICAgICk7XG4gICAgICBzaG93SnNvbih7IC4uLnJ1bnMsIGRhdGE6IHJ1bnNXaXRoSHlkcmF0ZWRJTyB9KTtcbiAgICAgIHJldHVybjtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgaWYgKGhhbmRsZUFwaUVycm9yKGVycm9yLCBvcHRzLmJhY2tlbmQpKSB7XG4gICAgICAgIHByb2Nlc3MuZXhpdCgxKTtcbiAgICAgIH1cbiAgICAgIHRocm93IGVycm9yO1xuICAgIH1cbiAgfVxuXG4gIGF3YWl0IHNldHVwTGlzdFBhZ2luYXRpb248V29ya2Zsb3dSdW4gfCBXb3JrZmxvd1J1bldpdGhvdXREYXRhPih7XG4gICAgaW5pdGlhbEN1cnNvcjogb3B0cy5jdXJzb3IsXG4gICAgaW50ZXJhY3RpdmU6IG9wdHMuaW50ZXJhY3RpdmUsXG4gICAgZmV0Y2hQYWdlOiBhc3luYyAoY3Vyc29yKSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBydW5zID0gYXdhaXQgd29ybGQucnVucy5saXN0KHtcbiAgICAgICAgICB3b3JrZmxvd05hbWU6IG9wdHMud29ya2Zsb3dOYW1lLFxuICAgICAgICAgIHN0YXR1czogb3B0cy5zdGF0dXMgYXMgYW55LFxuICAgICAgICAgIHBhZ2luYXRpb246IHtcbiAgICAgICAgICAgIHNvcnRPcmRlcjogb3B0cy5zb3J0IHx8ICdkZXNjJyxcbiAgICAgICAgICAgIGN1cnNvcixcbiAgICAgICAgICAgIGxpbWl0OiBvcHRzLmxpbWl0IHx8IERFRkFVTFRfUEFHRV9TSVpFLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgcmVzb2x2ZURhdGEsXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGRhdGE6IHJ1bnMuZGF0YSxcbiAgICAgICAgICBjdXJzb3I6IHJ1bnMuY3Vyc29yLFxuICAgICAgICAgIGhhc01vcmU6IHJ1bnMuaGFzTW9yZSxcbiAgICAgICAgfTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGlmIChoYW5kbGVBcGlFcnJvcihlcnJvciwgb3B0cy5iYWNrZW5kKSkge1xuICAgICAgICAgIHByb2Nlc3MuZXhpdCgxKTtcbiAgICAgICAgfVxuICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgIH1cbiAgICB9LFxuICAgIGRpc3BsYXlQYWdlOiBhc3luYyAocnVucykgPT4ge1xuICAgICAgY29uc3QgcnVuc1dpdGhIeWRyYXRlZElPID0gYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgICAgIHJ1bnMubWFwKChyKSA9PiBoeWRyYXRlUmVzb3VyY2VJTyhyLCByZXNvbHZlS2V5KSlcbiAgICAgICk7XG4gICAgICBsb2dnZXIubG9nKHNob3dUYWJsZShydW5zV2l0aEh5ZHJhdGVkSU8sIHByb3BzLCBvcHRzKSk7XG4gICAgfSxcbiAgfSk7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0UmVjZW50UnVuID0gYXN5bmMgKFxuICB3b3JsZDogV29ybGQsXG4gIG9wdHM6IEluc3BlY3RDTElPcHRpb25zID0ge31cbikgPT4ge1xuICBjb25zdCByZXNvbHZlS2V5ID0gY3JlYXRlUmVzb2x2ZXIod29ybGQsIG9wdHM/LmRlY3J5cHQgPz8gZmFsc2UpO1xuXG4gIGxvZ2dlci53YXJuKGBObyBydW5JZCBwcm92aWRlZCwgZmV0Y2hpbmcgZGF0YSBmb3IgbGF0ZXN0IHJ1biBpbnN0ZWFkLmApO1xuICB0cnkge1xuICAgIGNvbnN0IHJ1bnMgPSBhd2FpdCB3b3JsZC5ydW5zLmxpc3Qoe1xuICAgICAgcGFnaW5hdGlvbjogeyBsaW1pdDogMSwgc29ydE9yZGVyOiBvcHRzLnNvcnQgfHwgJ2Rlc2MnIH0sXG4gICAgICByZXNvbHZlRGF0YTogJ25vbmUnLCAvLyBEb24ndCBuZWVkIGRhdGEgZm9yIGp1c3QgZ2V0dGluZyB0aGUgSURcbiAgICB9KTtcbiAgICBydW5zLmRhdGEgPSBhd2FpdCBQcm9taXNlLmFsbChcbiAgICAgIHJ1bnMuZGF0YS5tYXAoKHIpID0+IGh5ZHJhdGVSZXNvdXJjZUlPKHIsIHJlc29sdmVLZXkpKVxuICAgICk7XG4gICAgcmV0dXJuIHJ1bnMuZGF0YVswXTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBpZiAoaGFuZGxlQXBpRXJyb3IoZXJyb3IsIG9wdHMuYmFja2VuZCkpIHtcbiAgICAgIHByb2Nlc3MuZXhpdCgxKTtcbiAgICB9XG4gICAgdGhyb3cgZXJyb3I7XG4gIH1cbn07XG5cbmV4cG9ydCBjb25zdCBzaG93UnVuID0gYXN5bmMgKFxuICB3b3JsZDogV29ybGQsXG4gIHJ1bklkOiBzdHJpbmcsXG4gIG9wdHM6IEluc3BlY3RDTElPcHRpb25zID0ge31cbikgPT4ge1xuICBjb25zdCByZXNvbHZlS2V5ID0gY3JlYXRlUmVzb2x2ZXIod29ybGQsIG9wdHM/LmRlY3J5cHQgPz8gZmFsc2UpO1xuXG4gIGlmIChvcHRzLndpdGhEYXRhKSB7XG4gICAgbG9nZ2VyLndhcm4oJ2B3aXRoRGF0YWAgZmxhZyBpcyBpZ25vcmVkIHdoZW4gc2hvd2luZyBpbmRpdmlkdWFsIHJlc291cmNlcycpO1xuICB9XG4gIHRyeSB7XG4gICAgY29uc3QgcnVuID0gYXdhaXQgd29ybGQucnVucy5nZXQocnVuSWQsIHsgcmVzb2x2ZURhdGE6ICdhbGwnIH0pO1xuICAgIGNvbnN0IHJ1bldpdGhIeWRyYXRlZElPID0gYXdhaXQgaHlkcmF0ZVJlc291cmNlSU8ocnVuLCByZXNvbHZlS2V5KTtcbiAgICBpZiAob3B0cy5qc29uKSB7XG4gICAgICBzaG93SnNvbihydW5XaXRoSHlkcmF0ZWRJTyk7XG4gICAgICByZXR1cm47XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChoYXNFeHBpcmVkRGF0YShydW4pKSB7XG4gICAgICAgIGxvZ2dlci53YXJuKFxuICAgICAgICAgIFwiVGhpcyBydW4ncyBkYXRhIChpbnB1dC9vdXRwdXQvZXJyb3IpIGhhcyBleHBpcmVkIGFuZCBpcyBubyBsb25nZXIgYXZhaWxhYmxlLlwiXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICBsb2dnZXIubG9nKHJ1bldpdGhIeWRyYXRlZElPKTtcbiAgICB9XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgaWYgKGhhbmRsZUFwaUVycm9yKGVycm9yLCBvcHRzLmJhY2tlbmQpKSB7XG4gICAgICBwcm9jZXNzLmV4aXQoMSk7XG4gICAgfVxuICAgIHRocm93IGVycm9yO1xuICB9XG59O1xuXG5leHBvcnQgY29uc3QgbGlzdFN0ZXBzID0gYXN5bmMgKFxuICB3b3JsZDogV29ybGQsXG4gIG9wdHM6IEluc3BlY3RDTElPcHRpb25zID0ge1xuICAgIHJ1bklkOiB1bmRlZmluZWQsXG4gIH1cbikgPT4ge1xuICBjb25zdCByZXNvbHZlS2V5ID0gY3JlYXRlUmVzb2x2ZXIod29ybGQsIG9wdHM/LmRlY3J5cHQgPz8gZmFsc2UpO1xuXG4gIGlmIChvcHRzLnN0ZXBJZCkge1xuICAgIGxvZ2dlci53YXJuKFxuICAgICAgJ0ZpbHRlcmluZyBieSBzdGVwLWlkIGlzIG5vdCBzdXBwb3J0ZWQgaW4gbGlzdCBjYWxscywgaWdub3JpbmcgZmlsdGVyLidcbiAgICApO1xuICB9XG4gIGlmIChvcHRzLndvcmtmbG93TmFtZSkge1xuICAgIGxvZ2dlci53YXJuKFxuICAgICAgJ0ZpbHRlcmluZyBieSB3b3JrZmxvdy1uYW1lIGlzIG5vdCBzdXBwb3J0ZWQgZm9yIHN0ZXBzLCBpZ25vcmluZyBmaWx0ZXIuJ1xuICAgICk7XG4gIH1cblxuICBjb25zdCBydW5JZCA9IG9wdHMucnVuSWRcbiAgICA/IG9wdHMucnVuSWRcbiAgICA6IChhd2FpdCBnZXRSZWNlbnRSdW4od29ybGQsIG9wdHMpKT8ucnVuSWQ7XG4gIGlmICghcnVuSWQpIHtcbiAgICBsb2dnZXIuZXJyb3IoJ05vIHJ1biBmb3VuZC4nKTtcbiAgICByZXR1cm47XG4gIH1cblxuICBjb25zdCByZXNvbHZlRGF0YSA9IG9wdHMud2l0aERhdGEgPyAnYWxsJyA6ICdub25lJztcblxuICAvLyBEZXRlcm1pbmUgd2hpY2ggcHJvcHMgdG8gc2hvdyBiYXNlZCBvbiB3aXRoRGF0YSBmbGFnXG4gIGNvbnN0IHByb3BzID0gb3B0cy53aXRoRGF0YVxuICAgID8gU1RFUF9MSVNURURfUFJPUFNcbiAgICA6IFNURVBfTElTVEVEX1BST1BTLmZpbHRlcigocHJvcCkgPT4gIVNURVBfSU9fUFJPUFMuaW5jbHVkZXMocHJvcCkpO1xuXG4gIC8vIEZvciBKU09OIG91dHB1dCwganVzdCBmZXRjaCBvbmNlIGFuZCByZXR1cm5cbiAgaWYgKG9wdHMuanNvbikge1xuICAgIGxvZ2dlci5kZWJ1ZyhgRmV0Y2hpbmcgc3RlcHMgZm9yIHJ1biAke3J1bklkfWApO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBzdGVwQ2h1bmtzID0gYXdhaXQgd29ybGQuc3RlcHMubGlzdCh7XG4gICAgICAgIHJ1bklkLFxuICAgICAgICBwYWdpbmF0aW9uOiB7XG4gICAgICAgICAgc29ydE9yZGVyOiBvcHRzLnNvcnQgfHwgJ2Rlc2MnLFxuICAgICAgICAgIGN1cnNvcjogb3B0cy5jdXJzb3IsXG4gICAgICAgICAgbGltaXQ6IG9wdHMubGltaXQgfHwgREVGQVVMVF9QQUdFX1NJWkUsXG4gICAgICAgIH0sXG4gICAgICAgIHJlc29sdmVEYXRhLFxuICAgICAgfSk7XG4gICAgICBjb25zdCBzdGVwc1dpdGhIeWRyYXRlZElPID0gYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgICAgIHN0ZXBDaHVua3MuZGF0YS5tYXAoKHMpID0+IGh5ZHJhdGVSZXNvdXJjZUlPKHMsIHJlc29sdmVLZXkpKVxuICAgICAgKTtcbiAgICAgIHNob3dKc29uKHN0ZXBzV2l0aEh5ZHJhdGVkSU8pO1xuICAgICAgcmV0dXJuO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBpZiAoaGFuZGxlQXBpRXJyb3IoZXJyb3IsIG9wdHMuYmFja2VuZCkpIHtcbiAgICAgICAgcHJvY2Vzcy5leGl0KDEpO1xuICAgICAgfVxuICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfVxuICB9XG5cbiAgYXdhaXQgc2V0dXBMaXN0UGFnaW5hdGlvbjxTdGVwIHwgU3RlcFdpdGhvdXREYXRhPih7XG4gICAgaW5pdGlhbEN1cnNvcjogb3B0cy5jdXJzb3IsXG4gICAgaW50ZXJhY3RpdmU6IG9wdHMuaW50ZXJhY3RpdmUsXG4gICAgZmV0Y2hQYWdlOiBhc3luYyAoY3Vyc29yKSA9PiB7XG4gICAgICBsb2dnZXIuZGVidWcoYEZldGNoaW5nIHN0ZXBzIGZvciBydW4gJHtydW5JZH1gKTtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHN0ZXBDaHVua3MgPSBhd2FpdCB3b3JsZC5zdGVwcy5saXN0KHtcbiAgICAgICAgICBydW5JZCxcbiAgICAgICAgICBwYWdpbmF0aW9uOiB7XG4gICAgICAgICAgICBzb3J0T3JkZXI6IG9wdHMuc29ydCB8fCAnZGVzYycsXG4gICAgICAgICAgICBjdXJzb3IsXG4gICAgICAgICAgICBsaW1pdDogb3B0cy5saW1pdCB8fCBERUZBVUxUX1BBR0VfU0laRSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHJlc29sdmVEYXRhLFxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBkYXRhOiBzdGVwQ2h1bmtzLmRhdGEsXG4gICAgICAgICAgY3Vyc29yOiBzdGVwQ2h1bmtzLmN1cnNvcixcbiAgICAgICAgICBoYXNNb3JlOiBzdGVwQ2h1bmtzLmhhc01vcmUsXG4gICAgICAgIH07XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBpZiAoaGFuZGxlQXBpRXJyb3IoZXJyb3IsIG9wdHMuYmFja2VuZCkpIHtcbiAgICAgICAgICBwcm9jZXNzLmV4aXQoMSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICB9XG4gICAgfSxcbiAgICBkaXNwbGF5UGFnZTogYXN5bmMgKHN0ZXBzKSA9PiB7XG4gICAgICBjb25zdCBzdGVwc1dpdGhIeWRyYXRlZElPID0gYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgICAgIHN0ZXBzLm1hcCgocykgPT4gaHlkcmF0ZVJlc291cmNlSU8ocywgcmVzb2x2ZUtleSkpXG4gICAgICApO1xuICAgICAgbG9nZ2VyLmxvZyhzaG93VGFibGUoc3RlcHNXaXRoSHlkcmF0ZWRJTywgcHJvcHMsIG9wdHMpKTtcbiAgICAgIHNob3dJbnNwZWN0SW5mb0JveCgnc3RlcCcpO1xuICAgIH0sXG4gIH0pO1xufTtcblxuZXhwb3J0IGNvbnN0IHNob3dTdGVwID0gYXN5bmMgKFxuICB3b3JsZDogV29ybGQsXG4gIHN0ZXBJZDogc3RyaW5nLFxuICBvcHRzOiBJbnNwZWN0Q0xJT3B0aW9ucyA9IHt9XG4pID0+IHtcbiAgY29uc3QgcmVzb2x2ZUtleSA9IGNyZWF0ZVJlc29sdmVyKHdvcmxkLCBvcHRzPy5kZWNyeXB0ID8/IGZhbHNlKTtcblxuICBpZiAob3B0cy53aXRoRGF0YSkge1xuICAgIGxvZ2dlci53YXJuKCdgd2l0aERhdGFgIGZsYWcgaXMgaWdub3JlZCB3aGVuIHNob3dpbmcgaW5kaXZpZHVhbCByZXNvdXJjZXMnKTtcbiAgfVxuICBpZiAob3B0cy5zdGVwSWQpIHtcbiAgICBsb2dnZXIud2FybihcbiAgICAgICdGaWx0ZXJpbmcgYnkgc3RlcC1pZCBpcyBub3Qgc3VwcG9ydGVkIGluIGdldCBjYWxscywgaWdub3JpbmcgZmlsdGVyLidcbiAgICApO1xuICB9XG5cbiAgY29uc3QgcnVuSWQgPSBvcHRzLnJ1bklkID8/IChhd2FpdCBnZXRSZWNlbnRSdW4od29ybGQsIG9wdHMpKT8ucnVuSWQ7XG4gIGlmICghcnVuSWQpIHtcbiAgICBsb2dnZXIuZXJyb3IoXG4gICAgICAncnVuLWlkIGlzIHJlcXVpcmVkIGZvciBzaG93aW5nIGEgc3RlcC4gVXNhZ2U6IGB3b3JrZmxvdyBpbnNwZWN0IHN0ZXAgPFNURVBfSUQ+IC0tcnVuSWQ9PFJVTl9JRD5gJ1xuICAgICk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgdHJ5IHtcbiAgICBjb25zdCBzdGVwID0gYXdhaXQgd29ybGQuc3RlcHMuZ2V0KHJ1bklkLCBzdGVwSWQsIHtcbiAgICAgIHJlc29sdmVEYXRhOiAnYWxsJyxcbiAgICB9KTtcbiAgICBjb25zdCBzdGVwV2l0aEh5ZHJhdGVkSU8gPSBhd2FpdCBoeWRyYXRlUmVzb3VyY2VJTyhzdGVwLCByZXNvbHZlS2V5KTtcbiAgICBpZiAob3B0cy5qc29uKSB7XG4gICAgICBzaG93SnNvbihzdGVwV2l0aEh5ZHJhdGVkSU8pO1xuICAgICAgcmV0dXJuO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoXG4gICAgICAgIGhhc0V4cGlyZWRGaWVsZHMoXG4gICAgICAgICAgc3RlcFdpdGhIeWRyYXRlZElPIGFzIHVua25vd24gYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj5cbiAgICAgICAgKVxuICAgICAgKSB7XG4gICAgICAgIGxvZ2dlci53YXJuKFxuICAgICAgICAgIFwiVGhpcyBzdGVwJ3MgZGF0YSAoaW5wdXQvb3V0cHV0L2Vycm9yKSBoYXMgZXhwaXJlZCBhbmQgaXMgbm8gbG9uZ2VyIGF2YWlsYWJsZS5cIlxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgbG9nZ2VyLmxvZyhzdGVwV2l0aEh5ZHJhdGVkSU8pO1xuICAgIH1cbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBpZiAoaGFuZGxlQXBpRXJyb3IoZXJyb3IsIG9wdHMuYmFja2VuZCkpIHtcbiAgICAgIHByb2Nlc3MuZXhpdCgxKTtcbiAgICB9XG4gICAgdGhyb3cgZXJyb3I7XG4gIH1cbn07XG5cbmV4cG9ydCBjb25zdCBzaG93U3RyZWFtID0gYXN5bmMgKFxuICB3b3JsZDogV29ybGQsXG4gIHN0cmVhbUlkOiBzdHJpbmcsXG4gIG9wdHM6IEluc3BlY3RDTElPcHRpb25zID0ge31cbikgPT4ge1xuICBpZiAob3B0cy5zdGVwSWQpIHtcbiAgICBsb2dnZXIud2FybihcbiAgICAgICdGaWx0ZXJpbmcgYnkgc3RlcC1pZCBpcyBub3Qgc3VwcG9ydGVkIHdoZW4gc2hvd2luZyBhIHN0cmVhbSwgaWdub3JpbmcgZmlsdGVyLidcbiAgICApO1xuICB9XG4gIGlmICghb3B0cy5ydW5JZCkge1xuICAgIHRocm93IG5ldyBFcnJvcignLS1ydW4gaXMgcmVxdWlyZWQgd2hlbiBzaG93aW5nIGEgc3RyZWFtJyk7XG4gIH1cbiAgY29uc3QgcmF3U3RyZWFtID0gYXdhaXQgd29ybGQuc3RyZWFtcy5nZXQob3B0cy5ydW5JZCwgc3RyZWFtSWQpO1xuXG4gIC8vIE9ubHkgcmVzb2x2ZSB0aGUgZW5jcnlwdGlvbiBrZXkgd2hlbiAtLWRlY3J5cHQgaXMgcGFzc2VkIGFuZCAtLXJ1biBpcyBwcm92aWRlZC5cbiAgLy8gV2UgZmV0Y2ggdGhlIGZ1bGwgV29ya2Zsb3dSdW4gb2JqZWN0IHNvIHRoYXQgZ2V0RW5jcnlwdGlvbktleUZvclJ1biBoYXNcbiAgLy8gYWNjZXNzIHRvIHRoZSBkZXBsb3ltZW50SWQgKG5lZWRlZCBmb3IgQVBJLWJhc2VkIGtleSByZXNvbHV0aW9uKS5cbiAgbGV0IGVuY3J5cHRpb25LZXk6IEVuY3J5cHRpb25LZXlQYXJhbTtcbiAgaWYgKG9wdHMuZGVjcnlwdCAmJiBvcHRzLnJ1bklkKSB7XG4gICAgZW5jcnlwdGlvbktleSA9IChhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCBydW4gPSBhd2FpdCB3b3JsZC5ydW5zLmdldChvcHRzLnJ1bklkISk7XG4gICAgICBjb25zdCByYXdLZXkgPSBhd2FpdCB3b3JsZC5nZXRFbmNyeXB0aW9uS2V5Rm9yUnVuPy4ocnVuKTtcbiAgICAgIHJldHVybiByYXdLZXkgPyBhd2FpdCBpbXBvcnRLZXkocmF3S2V5KSA6IHVuZGVmaW5lZDtcbiAgICB9KSgpO1xuICB9IGVsc2UgaWYgKG9wdHMuZGVjcnlwdCAmJiAhb3B0cy5ydW5JZCkge1xuICAgIGxvZ2dlci53YXJuKFxuICAgICAgJ0Nhbm5vdCBkZWNyeXB0IHN0cmVhbSBjb250ZW50IHdpdGhvdXQgYSBydW4gSUQuIFVzZSAtLXJ1bj08cnVuLWlkPiB3aXRoIC0tZGVjcnlwdC4nXG4gICAgKTtcbiAgfVxuXG4gIC8vIERlc2VyaWFsaXplIHRoZSBzdHJlYW0gdG8gZ2V0IEphdmFTY3JpcHQgb2JqZWN0c1xuICBjb25zdCByZXZpdmVycyA9IGdldEV4dGVybmFsUmV2aXZlcnMoXG4gICAgZ2xvYmFsVGhpcyxcbiAgICBbXSxcbiAgICBvcHRzLnJ1bklkID8/ICcnLFxuICAgIGVuY3J5cHRpb25LZXlcbiAgKTtcbiAgY29uc3QgdHJhbnNmb3JtID0gZ2V0RGVzZXJpYWxpemVTdHJlYW0ocmV2aXZlcnMsIGVuY3J5cHRpb25LZXkpO1xuICBjb25zdCBzdHJlYW0gPSByYXdTdHJlYW0ucGlwZVRocm91Z2godHJhbnNmb3JtKTtcblxuICBsb2dnZXIuaW5mbygnU3RyZWFtaW5nIHRvIHN0ZG91dCwgcHJlc3MgQ1RSTCtDIHRvIGFib3J0LicpO1xuICBsb2dnZXIuaW5mbyhcbiAgICAnVXNlIC0tanNvbiB0byBvdXRwdXQgdGhlIHN0cmVhbSBhcyBuZXdsaW5lLWRlbGltaXRlZCBKU09OIHdpdGhvdXQgaW5mbyBsb2dzLlxcbidcbiAgKTtcbiAgYXdhaXQgc3RyZWFtVG9Db25zb2xlKHN0cmVhbSwgc3RyZWFtSWQsIG9wdHMpO1xufTtcblxuLyoqXG4gKiBMaXN0aW5nIHN0cmVhbXMgb25seSBsaXN0cyBhdmFpbGFibGUgc3RyZWFtIElEcyBiYXNlZCBvbiBydW4vc3RlcCBwYXNzZWQsXG4gKiBhbmQgZG9lc24ndCByZWFkIGFueSBkYXRhIGZyb20gdGhlIHN0cmVhbXMuXG4gKi9cbmV4cG9ydCBjb25zdCBsaXN0U3RyZWFtc0J5UnVuSWQgPSBhc3luYyAoXG4gIHdvcmxkOiBXb3JsZCxcbiAgb3B0czogSW5zcGVjdENMSU9wdGlvbnMgPSB7fVxuKSA9PiB7XG4gIGlmIChvcHRzLndpdGhEYXRhKSB7XG4gICAgbG9nZ2VyLndhcm4oJ2B3aXRoRGF0YWAgZmxhZyBpcyBpZ25vcmVkIHdoZW4gbGlzdGluZyBzdHJlYW1zJyk7XG4gIH1cbiAgaWYgKG9wdHMud29ya2Zsb3dOYW1lKSB7XG4gICAgbG9nZ2VyLndhcm4oXG4gICAgICAnRmlsdGVyaW5nIGJ5IHdvcmtmbG93LW5hbWUgaXMgbm90IHN1cHBvcnRlZCBmb3Igc3RyZWFtcywgaWdub3JpbmcgZmlsdGVyLidcbiAgICApO1xuICB9XG4gIGlmIChvcHRzLnN0ZXBJZCkge1xuICAgIGxvZ2dlci53YXJuKFxuICAgICAgJ0ZpbHRlcmluZyBieSBzdGVwLWlkIGlzIG5vdCBzdXBwb3J0ZWQgZm9yIHN0cmVhbXMsIGlnbm9yaW5nIGZpbHRlci4nXG4gICAgKTtcbiAgfVxuXG4gIGxldCBydW5JZCA9IG9wdHMucnVuSWQ7XG4gIGlmICghcnVuSWQpIHtcbiAgICBsb2dnZXIud2FybihcbiAgICAgICdObyBydW4taWQgcHJvdmlkZWQuIExpc3Rpbmcgc3RyZWFtcyBmb3IgbGF0ZXN0IHJ1biBpbnN0ZWFkLicsXG4gICAgICAnVXNlIC0tcnVuPTxydW4taWQ+IHRvIGZpbHRlciBzdHJlYW1zIGJ5IHJ1bi4nXG4gICAgKTtcbiAgICBjb25zdCBydW4gPSBhd2FpdCBnZXRSZWNlbnRSdW4od29ybGQsIG9wdHMpO1xuICAgIGlmICghcnVuKSB7XG4gICAgICBsb2dnZXIud2FybignTm8gcnVucyBmb3VuZC4nKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgcnVuSWQgPSBydW4ucnVuSWQ7XG4gIH1cblxuICB0cnkge1xuICAgIGNvbnN0IHN0cmVhbUlkcyA9IGF3YWl0IHdvcmxkLnN0cmVhbXMubGlzdChydW5JZCk7XG4gICAgY29uc3QgbWF0Y2hpbmdTdHJlYW1zID0gc3RyZWFtSWRzLm1hcCgoc3RyZWFtSWQpID0+ICh7XG4gICAgICBydW5JZCxcbiAgICAgIHN0cmVhbUlkLFxuICAgIH0pKTtcblxuICAgIGlmIChvcHRzLmpzb24pIHtcbiAgICAgIHNob3dKc29uKG1hdGNoaW5nU3RyZWFtcyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGxvZ2dlci5sb2coc2hvd1RhYmxlKG1hdGNoaW5nU3RyZWFtcywgWydydW5JZCcsICdzdHJlYW1JZCddKSk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgaWYgKGhhbmRsZUFwaUVycm9yKGVycm9yLCBvcHRzLmJhY2tlbmQpKSB7XG4gICAgICBwcm9jZXNzLmV4aXQoMSk7XG4gICAgfVxuICAgIHRocm93IGVycm9yO1xuICB9XG59O1xuXG5leHBvcnQgY29uc3QgbGlzdEV2ZW50cyA9IGFzeW5jIChcbiAgd29ybGQ6IFdvcmxkLFxuICBvcHRzOiBJbnNwZWN0Q0xJT3B0aW9ucyA9IHt9XG4pID0+IHtcbiAgY29uc3QgcmVzb2x2ZUtleSA9IGNyZWF0ZVJlc29sdmVyKHdvcmxkLCBvcHRzPy5kZWNyeXB0ID8/IGZhbHNlKTtcbiAgaWYgKG9wdHMud29ya2Zsb3dOYW1lKSB7XG4gICAgbG9nZ2VyLndhcm4oXG4gICAgICAnRmlsdGVyaW5nIGJ5IHdvcmtmbG93LW5hbWUgaXMgbm90IHN1cHBvcnRlZCBmb3IgZXZlbnRzLCBpZ25vcmluZyBmaWx0ZXIuJ1xuICAgICk7XG4gIH1cblxuICBjb25zdCBydW5JZCA9IG9wdHMucnVuSWQgPz8gKGF3YWl0IGdldFJlY2VudFJ1bih3b3JsZCwgb3B0cykpPy5ydW5JZDtcbiAgaWYgKCFydW5JZCkge1xuICAgIGxvZ2dlci5lcnJvcignTm8gcnVuIGZvdW5kLicpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbnN0IGNvcnJlbGF0aW9uSWRGaWx0ZXIgPSBvcHRzLmhvb2tJZCB8fCBvcHRzLnN0ZXBJZDtcbiAgY29uc3QgcGFyYW1zOiBMaXN0RXZlbnRzUGFyYW1zID0ge1xuICAgIHJ1bklkLFxuICAgIHBhZ2luYXRpb246IHtcbiAgICAgIHNvcnRPcmRlcjogb3B0cy5zb3J0IHx8ICdkZXNjJyxcbiAgICAgIGN1cnNvcjogb3B0cy5jdXJzb3IsXG4gICAgICBsaW1pdDogb3B0cy5saW1pdCB8fCBERUZBVUxUX1BBR0VfU0laRSxcbiAgICB9LFxuICAgIHJlc29sdmVEYXRhOiBvcHRzLndpdGhEYXRhID8gJ2FsbCcgOiAnbm9uZScsXG4gIH07XG4gIGNvbnN0IGxpc3RDYWxsID0gYXN5bmMgKHBhZ2luYXRpb246IFBhZ2luYXRpb25PcHRpb25zKSA9PiB7XG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgd29ybGQuZXZlbnRzLmxpc3Qoe1xuICAgICAgLi4ucGFyYW1zLFxuICAgICAgcGFnaW5hdGlvbjogeyAuLi5wYXJhbXMucGFnaW5hdGlvbiwgLi4ucGFnaW5hdGlvbiB9LFxuICAgIH0pO1xuICAgIGlmIChjb3JyZWxhdGlvbklkRmlsdGVyKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5yZXN1bHQsXG4gICAgICAgIGRhdGE6IHJlc3VsdC5kYXRhLmZpbHRlcihcbiAgICAgICAgICAoZSkgPT4gZS5jb3JyZWxhdGlvbklkID09PSBjb3JyZWxhdGlvbklkRmlsdGVyXG4gICAgICAgICksXG4gICAgICB9O1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9O1xuXG4gIC8vIERldGVybWluZSB3aGljaCBwcm9wcyB0byBzaG93IGJhc2VkIG9uIHdpdGhEYXRhIGZsYWdcbiAgY29uc3QgcHJvcHMgPSBvcHRzLndpdGhEYXRhXG4gICAgPyBFVkVOVF9MSVNURURfUFJPUFNcbiAgICA6IEVWRU5UX0xJU1RFRF9QUk9QUy5maWx0ZXIoKHByb3ApID0+ICFFVkVOVF9JT19QUk9QUy5pbmNsdWRlcyhwcm9wKSk7XG5cbiAgLy8gRm9yIEpTT04gb3V0cHV0LCBqdXN0IGZldGNoIG9uY2UgYW5kIHJldHVyblxuICBpZiAob3B0cy5qc29uKSB7XG4gICAgbG9nZ2VyLmRlYnVnKGBGZXRjaGluZyBldmVudHMgZm9yIHJ1biAke3J1bklkfWApO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBldmVudHMgPSBhd2FpdCBsaXN0Q2FsbCh7fSk7XG4gICAgICBjb25zdCBoeWRyYXRlZEV2ZW50cyA9IGF3YWl0IFByb21pc2UuYWxsKFxuICAgICAgICBldmVudHMuZGF0YS5tYXAoKGUpID0+IGh5ZHJhdGVSZXNvdXJjZUlPKGUsIHJlc29sdmVLZXkpKVxuICAgICAgKTtcbiAgICAgIHNob3dKc29uKGh5ZHJhdGVkRXZlbnRzKTtcbiAgICAgIHJldHVybjtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgaWYgKGhhbmRsZUFwaUVycm9yKGVycm9yLCBvcHRzLmJhY2tlbmQpKSB7XG4gICAgICAgIHByb2Nlc3MuZXhpdCgxKTtcbiAgICAgIH1cbiAgICAgIHRocm93IGVycm9yO1xuICAgIH1cbiAgfVxuXG4gIGF3YWl0IHNldHVwTGlzdFBhZ2luYXRpb248RXZlbnQ+KHtcbiAgICBpbml0aWFsQ3Vyc29yOiBvcHRzLmN1cnNvcixcbiAgICBpbnRlcmFjdGl2ZTogb3B0cy5pbnRlcmFjdGl2ZSxcbiAgICBmZXRjaFBhZ2U6IGFzeW5jIChjdXJzb3IpID0+IHtcbiAgICAgIGxvZ2dlci5kZWJ1ZyhgRmV0Y2hpbmcgZXZlbnRzIGZvciBydW4gJHtydW5JZH1gKTtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IGV2ZW50cyA9IGF3YWl0IGxpc3RDYWxsKHsgY3Vyc29yIH0pO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGRhdGE6IGV2ZW50cy5kYXRhLFxuICAgICAgICAgIGN1cnNvcjogZXZlbnRzLmN1cnNvcixcbiAgICAgICAgICBoYXNNb3JlOiBldmVudHMuaGFzTW9yZSxcbiAgICAgICAgfTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGlmIChoYW5kbGVBcGlFcnJvcihlcnJvciwgb3B0cy5iYWNrZW5kKSkge1xuICAgICAgICAgIHByb2Nlc3MuZXhpdCgxKTtcbiAgICAgICAgfVxuICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgIH1cbiAgICB9LFxuICAgIGRpc3BsYXlQYWdlOiBhc3luYyAoZXZlbnRzKSA9PiB7XG4gICAgICBjb25zdCBoeWRyYXRlZEV2ZW50cyA9IGF3YWl0IFByb21pc2UuYWxsKFxuICAgICAgICBldmVudHMubWFwKChlKSA9PiBoeWRyYXRlUmVzb3VyY2VJTyhlLCByZXNvbHZlS2V5KSlcbiAgICAgICk7XG4gICAgICBsb2dnZXIubG9nKHNob3dUYWJsZShoeWRyYXRlZEV2ZW50cywgcHJvcHMsIG9wdHMpKTtcbiAgICAgIHNob3dJbnNwZWN0SW5mb0JveCgnZXZlbnQnKTtcbiAgICB9LFxuICB9KTtcbn07XG5cbmV4cG9ydCBjb25zdCBsaXN0SG9va3MgPSBhc3luYyAod29ybGQ6IFdvcmxkLCBvcHRzOiBJbnNwZWN0Q0xJT3B0aW9ucyA9IHt9KSA9PiB7XG4gIGNvbnN0IHJlc29sdmVLZXkgPSBjcmVhdGVSZXNvbHZlcih3b3JsZCwgb3B0cz8uZGVjcnlwdCA/PyBmYWxzZSk7XG5cbiAgaWYgKG9wdHMud29ya2Zsb3dOYW1lKSB7XG4gICAgbG9nZ2VyLndhcm4oXG4gICAgICAnRmlsdGVyaW5nIGJ5IHdvcmtmbG93LW5hbWUgaXMgbm90IHN1cHBvcnRlZCBmb3IgaG9va3MsIGlnbm9yaW5nIGZpbHRlci4nXG4gICAgKTtcbiAgfVxuICBpZiAob3B0cy5zdGVwSWQpIHtcbiAgICBsb2dnZXIud2FybihcbiAgICAgICdGaWx0ZXJpbmcgYnkgc3RlcC1pZCBpcyBub3Qgc3VwcG9ydGVkIGZvciBob29rcywgaWdub3JpbmcgZmlsdGVyLidcbiAgICApO1xuICB9XG5cbiAgY29uc3QgcnVuSWQgPSBvcHRzLnJ1bklkO1xuICBjb25zdCByZXNvbHZlRGF0YSA9IG9wdHMud2l0aERhdGEgPyAnYWxsJyA6ICdub25lJztcblxuICAvLyBGb3IgSlNPTiBvdXRwdXQsIGp1c3QgZmV0Y2ggb25jZSBhbmQgcmV0dXJuXG4gIGlmIChvcHRzLmpzb24pIHtcbiAgICBpZiAoIXJ1bklkKSB7XG4gICAgICBsb2dnZXIuZGVidWcoJ0ZldGNoaW5nIGFsbCBob29rcycpO1xuICAgIH0gZWxzZSB7XG4gICAgICBsb2dnZXIuZGVidWcoYEZldGNoaW5nIGhvb2tzIGZvciBydW4gJHtydW5JZH1gKTtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGhvb2tzID0gYXdhaXQgd29ybGQuaG9va3MubGlzdCh7XG4gICAgICAgIHJ1bklkLFxuICAgICAgICBwYWdpbmF0aW9uOiB7XG4gICAgICAgICAgc29ydE9yZGVyOiBvcHRzLnNvcnQgfHwgJ2Rlc2MnLFxuICAgICAgICAgIGN1cnNvcjogb3B0cy5jdXJzb3IsXG4gICAgICAgICAgbGltaXQ6IG9wdHMubGltaXQgfHwgREVGQVVMVF9QQUdFX1NJWkUsXG4gICAgICAgIH0sXG4gICAgICAgIHJlc29sdmVEYXRhLFxuICAgICAgfSk7XG4gICAgICBjb25zdCBoeWRyYXRlZEhvb2tzID0gYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgICAgIGhvb2tzLmRhdGEubWFwKChoKSA9PiBoeWRyYXRlUmVzb3VyY2VJTyhoLCByZXNvbHZlS2V5KSlcbiAgICAgICk7XG4gICAgICBzaG93SnNvbih7IC4uLmhvb2tzLCBkYXRhOiBoeWRyYXRlZEhvb2tzIH0pO1xuICAgICAgcmV0dXJuO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBpZiAoaGFuZGxlQXBpRXJyb3IoZXJyb3IsIG9wdHMuYmFja2VuZCkpIHtcbiAgICAgICAgcHJvY2Vzcy5leGl0KDEpO1xuICAgICAgfVxuICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfVxuICB9XG5cbiAgLy8gU2V0dXAgcGFnaW5hdGlvbiB3aXRoIG5ldyBtZWNoYW5pc21cbiAgYXdhaXQgc2V0dXBMaXN0UGFnaW5hdGlvbjxIb29rPih7XG4gICAgaW5pdGlhbEN1cnNvcjogb3B0cy5jdXJzb3IsXG4gICAgaW50ZXJhY3RpdmU6IG9wdHMuaW50ZXJhY3RpdmUsXG4gICAgZmV0Y2hQYWdlOiBhc3luYyAoY3Vyc29yKSA9PiB7XG4gICAgICBpZiAoIXJ1bklkKSB7XG4gICAgICAgIGxvZ2dlci5kZWJ1ZygnRmV0Y2hpbmcgYWxsIGhvb2tzJyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBsb2dnZXIuZGVidWcoYEZldGNoaW5nIGhvb2tzIGZvciBydW4gJHtydW5JZH1gKTtcbiAgICAgIH1cbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IGhvb2tzID0gYXdhaXQgd29ybGQuaG9va3MubGlzdCh7XG4gICAgICAgICAgcnVuSWQsXG4gICAgICAgICAgcGFnaW5hdGlvbjoge1xuICAgICAgICAgICAgc29ydE9yZGVyOiBvcHRzLnNvcnQgfHwgJ2Rlc2MnLFxuICAgICAgICAgICAgY3Vyc29yLFxuICAgICAgICAgICAgbGltaXQ6IG9wdHMubGltaXQgfHwgREVGQVVMVF9QQUdFX1NJWkUsXG4gICAgICAgICAgfSxcbiAgICAgICAgICByZXNvbHZlRGF0YSxcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgZGF0YTogaG9va3MuZGF0YSxcbiAgICAgICAgICBjdXJzb3I6IGhvb2tzLmN1cnNvcixcbiAgICAgICAgICBoYXNNb3JlOiBob29rcy5oYXNNb3JlLFxuICAgICAgICB9O1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgaWYgKGhhbmRsZUFwaUVycm9yKGVycm9yLCBvcHRzLmJhY2tlbmQpKSB7XG4gICAgICAgICAgcHJvY2Vzcy5leGl0KDEpO1xuICAgICAgICB9XG4gICAgICAgIHRocm93IGVycm9yO1xuICAgICAgfVxuICAgIH0sXG4gICAgZGlzcGxheVBhZ2U6IGFzeW5jIChob29rcykgPT4ge1xuICAgICAgY29uc3QgaHlkcmF0ZWRIb29rcyA9IGF3YWl0IFByb21pc2UuYWxsKFxuICAgICAgICBob29rcy5tYXAoKGgpID0+IGh5ZHJhdGVSZXNvdXJjZUlPKGgsIHJlc29sdmVLZXkpKVxuICAgICAgKTtcbiAgICAgIGxvZ2dlci5sb2coc2hvd1RhYmxlKGh5ZHJhdGVkSG9va3MsIEhPT0tfTElTVEVEX1BST1BTLCBvcHRzKSk7XG4gICAgICBzaG93SW5zcGVjdEluZm9Cb3goJ2hvb2snKTtcbiAgICB9LFxuICB9KTtcbn07XG5cbmV4cG9ydCBjb25zdCBzaG93SG9vayA9IGFzeW5jIChcbiAgd29ybGQ6IFdvcmxkLFxuICBob29rSWQ6IHN0cmluZyxcbiAgb3B0czogSW5zcGVjdENMSU9wdGlvbnMgPSB7fVxuKSA9PiB7XG4gIGNvbnN0IHJlc29sdmVLZXkgPSBjcmVhdGVSZXNvbHZlcih3b3JsZCwgb3B0cz8uZGVjcnlwdCA/PyBmYWxzZSk7XG5cbiAgaWYgKG9wdHMud2l0aERhdGEpIHtcbiAgICBsb2dnZXIud2FybignYHdpdGhEYXRhYCBmbGFnIGlzIGlnbm9yZWQgd2hlbiBzaG93aW5nIGluZGl2aWR1YWwgcmVzb3VyY2VzJyk7XG4gIH1cbiAgdHJ5IHtcbiAgICBjb25zdCBob29rID0gYXdhaXQgd29ybGQuaG9va3MuZ2V0KGhvb2tJZCwge1xuICAgICAgcmVzb2x2ZURhdGE6ICdhbGwnLFxuICAgIH0pO1xuICAgIGNvbnN0IGh5ZHJhdGVkSG9vayA9IGF3YWl0IGh5ZHJhdGVSZXNvdXJjZUlPKGhvb2ssIHJlc29sdmVLZXkpO1xuICAgIGlmIChvcHRzLmpzb24pIHtcbiAgICAgIHNob3dKc29uKGh5ZHJhdGVkSG9vayk7XG4gICAgICByZXR1cm47XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChcbiAgICAgICAgaGFzRXhwaXJlZEZpZWxkcyhoeWRyYXRlZEhvb2sgYXMgdW5rbm93biBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPilcbiAgICAgICkge1xuICAgICAgICBsb2dnZXIud2FybihcbiAgICAgICAgICBcIlRoaXMgaG9vaydzIGRhdGEgKG1ldGFkYXRhKSBoYXMgZXhwaXJlZCBhbmQgaXMgbm8gbG9uZ2VyIGF2YWlsYWJsZS5cIlxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgbG9nZ2VyLmxvZyhoeWRyYXRlZEhvb2spO1xuICAgIH1cbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBpZiAoaGFuZGxlQXBpRXJyb3IoZXJyb3IsIG9wdHMuYmFja2VuZCkpIHtcbiAgICAgIHByb2Nlc3MuZXhpdCgxKTtcbiAgICB9XG4gICAgdGhyb3cgZXJyb3I7XG4gIH1cbn07XG5cbmV4cG9ydCBjb25zdCBsaXN0U2xlZXBzID0gYXN5bmMgKFxuICB3b3JsZDogV29ybGQsXG4gIG9wdHM6IEluc3BlY3RDTElPcHRpb25zID0ge31cbikgPT4ge1xuICBpZiAoIW9wdHMucnVuSWQpIHtcbiAgICBsb2dnZXIuZXJyb3IoXG4gICAgICAncnVuLWlkIGlzIHJlcXVpcmVkIGZvciBsaXN0aW5nIHNsZWVwcy4gVXNhZ2U6IGB3b3JrZmxvdyBpbnNwZWN0IHNsZWVwcyAtLXJ1bklkPTxpZD5gJ1xuICAgICk7XG4gICAgcHJvY2Vzcy5leGl0KDEpO1xuICB9XG5cbiAgaWYgKG9wdHMuc3RlcElkKSB7XG4gICAgbG9nZ2VyLndhcm4oXG4gICAgICAnRmlsdGVyaW5nIGJ5IHN0ZXAtaWQgaXMgbm90IHN1cHBvcnRlZCBmb3Igc2xlZXBzLCBpZ25vcmluZyBmaWx0ZXIuJ1xuICAgICk7XG4gIH1cbiAgaWYgKG9wdHMud29ya2Zsb3dOYW1lKSB7XG4gICAgbG9nZ2VyLndhcm4oXG4gICAgICAnRmlsdGVyaW5nIGJ5IHdvcmtmbG93LW5hbWUgaXMgbm90IHN1cHBvcnRlZCBmb3Igc2xlZXBzLCBpZ25vcmluZyBmaWx0ZXIuJ1xuICAgICk7XG4gIH1cbiAgaWYgKG9wdHMud2l0aERhdGEpIHtcbiAgICBsb2dnZXIud2FybignYHdpdGhEYXRhYCBmbGFnIGlzIGlnbm9yZWQgd2hlbiBsaXN0aW5nIHNsZWVwcycpO1xuICB9XG5cbiAgdHJ5IHtcbiAgICAvLyBGZXRjaCBhbGwgZXZlbnRzIGZvciB0aGUgcnVuIHdpdGggcmVzb2x2ZURhdGE9J2FsbCcgdG8gZ2V0IHdhaXQgZXZlbnREYXRhXG4gICAgY29uc3QgZXZlbnRzID0gYXdhaXQgd29ybGQuZXZlbnRzLmxpc3Qoe1xuICAgICAgcnVuSWQ6IG9wdHMucnVuSWQsXG4gICAgICBwYWdpbmF0aW9uOiB7XG4gICAgICAgIHNvcnRPcmRlcjogb3B0cy5zb3J0IHx8ICdkZXNjJyxcbiAgICAgICAgbGltaXQ6IDEwMDAsXG4gICAgICB9LFxuICAgICAgcmVzb2x2ZURhdGE6ICdhbGwnLFxuICAgIH0pO1xuXG4gICAgLy8gU2hvdyBpbmZvIG1lc3NhZ2UgaWYgdGhlcmUgbWlnaHQgYmUgbW9yZSBzbGVlcHNcbiAgICBpZiAoZXZlbnRzLmhhc01vcmUpIHtcbiAgICAgIGxvZ2dlci5pbmZvKFxuICAgICAgICAnV2FybmluZzogVGhpcyBydW4gaGFzIG1vcmUgdGhhbiAxMDAwIGV2ZW50cy4gU29tZSBzbGVlcHMgbWlnaHQgbm90IGJlIHNob3duLiBQbGVhc2UgdXNlIHRoZSB3ZWIgVUkgdG8gZW5zdXJlIGdldHRpbmcgYSBjb21wbGV0ZSBsaXN0LidcbiAgICAgICk7XG4gICAgfVxuXG4gICAgLy8gR3JvdXAgd2FpdCBldmVudHMgYnkgY29ycmVsYXRpb25JZFxuICAgIGNvbnN0IHdhaXRFdmVudHNCeUNvcnJlbGF0aW9uID0gbmV3IE1hcDxzdHJpbmcsIEV2ZW50W10+KCk7XG4gICAgZm9yIChjb25zdCBldmVudCBvZiBldmVudHMuZGF0YSkge1xuICAgICAgaWYgKGV2ZW50LmNvcnJlbGF0aW9uSWQ/LnN0YXJ0c1dpdGgoJ3dhaXRfJykpIHtcbiAgICAgICAgY29uc3QgZXhpc3RpbmcgPSB3YWl0RXZlbnRzQnlDb3JyZWxhdGlvbi5nZXQoZXZlbnQuY29ycmVsYXRpb25JZCkgPz8gW107XG4gICAgICAgIGV4aXN0aW5nLnB1c2goZXZlbnQpO1xuICAgICAgICB3YWl0RXZlbnRzQnlDb3JyZWxhdGlvbi5zZXQoZXZlbnQuY29ycmVsYXRpb25JZCwgZXhpc3RpbmcpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh3YWl0RXZlbnRzQnlDb3JyZWxhdGlvbi5zaXplID09PSAwKSB7XG4gICAgICBsb2dnZXIud2FybignTm8gc2xlZXBzIGZvdW5kIGZvciB0aGlzIHJ1bi4nKTtcbiAgICAgIGlmIChvcHRzLmpzb24pIHtcbiAgICAgICAgc2hvd0pzb24oW10pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbG9nZ2VyLmxvZyhcbiAgICAgICAgICBzaG93VGFibGUoW10gYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj5bXSwgV0FJVF9MSVNURURfUFJPUFMsIHtcbiAgICAgICAgICAgIC4uLm9wdHMsXG4gICAgICAgICAgICBkaXNhYmxlUmVsYXRpdmVEYXRlczogdHJ1ZSxcbiAgICAgICAgICB9KVxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIEJ1aWxkIHNsZWVwcyBmcm9tIGdyb3VwZWQgd2FpdCBldmVudHNcbiAgICBjb25zdCBzbGVlcHM6IFNsZWVwW10gPSBbXTtcbiAgICBmb3IgKGNvbnN0IFtjb3JyZWxhdGlvbklkLCBjb3JyZWxhdGlvbkV2ZW50c10gb2Ygd2FpdEV2ZW50c0J5Q29ycmVsYXRpb24pIHtcbiAgICAgIC8vIFN0aXRjaCB1cCB3YWl0X2NyZWF0ZWQgYW5kIHdhaXRfY29tcGxldGVkIGV2ZW50c1xuICAgICAgY29uc3Qgd2FpdENyZWF0ZWQgPSBjb3JyZWxhdGlvbkV2ZW50cy5maW5kKFxuICAgICAgICAoZTogRXZlbnQpID0+IGUuZXZlbnRUeXBlID09PSAnd2FpdF9jcmVhdGVkJ1xuICAgICAgKTtcbiAgICAgIGNvbnN0IHdhaXRDb21wbGV0ZWQgPSBjb3JyZWxhdGlvbkV2ZW50cy5maW5kKFxuICAgICAgICAoZTogRXZlbnQpID0+IGUuZXZlbnRUeXBlID09PSAnd2FpdF9jb21wbGV0ZWQnXG4gICAgICApO1xuXG4gICAgICBpZiAod2FpdENyZWF0ZWQpIHtcbiAgICAgICAgY29uc3Qgc2xlZXA6IFNsZWVwID0ge1xuICAgICAgICAgIGNvcnJlbGF0aW9uSWQsXG4gICAgICAgICAgcnVuSWQ6IHdhaXRDcmVhdGVkLnJ1bklkLFxuICAgICAgICAgIGV2ZW50SWQ6IHdhaXRDcmVhdGVkLmV2ZW50SWQsXG4gICAgICAgICAgY3JlYXRlZEF0OiB3YWl0Q3JlYXRlZC5jcmVhdGVkQXQsXG4gICAgICAgICAgcmVzdW1lQXQ6XG4gICAgICAgICAgICB3YWl0Q3JlYXRlZC5ldmVudFR5cGUgPT09ICd3YWl0X2NyZWF0ZWQnXG4gICAgICAgICAgICAgID8gd2FpdENyZWF0ZWQuZXZlbnREYXRhLnJlc3VtZUF0XG4gICAgICAgICAgICAgIDogdW5kZWZpbmVkLFxuICAgICAgICAgIGNvbXBsZXRlZEF0OiB3YWl0Q29tcGxldGVkPy5jcmVhdGVkQXQsXG4gICAgICAgIH07XG4gICAgICAgIHNsZWVwcy5wdXNoKHNsZWVwKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBTb3J0IHNsZWVwcyBieSBjcmVhdGVkQXRcbiAgICBzbGVlcHMuc29ydCgoYSwgYikgPT4ge1xuICAgICAgY29uc3QgdGltZUEgPSBhLmNyZWF0ZWRBdC5nZXRUaW1lKCk7XG4gICAgICBjb25zdCB0aW1lQiA9IGIuY3JlYXRlZEF0LmdldFRpbWUoKTtcbiAgICAgIHJldHVybiBvcHRzLnNvcnQgPT09ICdhc2MnID8gdGltZUEgLSB0aW1lQiA6IHRpbWVCIC0gdGltZUE7XG4gICAgfSk7XG5cbiAgICBpZiAob3B0cy5qc29uKSB7XG4gICAgICBzaG93SnNvbihzbGVlcHMpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGxvZ2dlci5sb2coXG4gICAgICBzaG93VGFibGUoXG4gICAgICAgIHNsZWVwcyBhcyB1bmtub3duIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+W10sXG4gICAgICAgIFdBSVRfTElTVEVEX1BST1BTLFxuICAgICAgICB7IC4uLm9wdHMsIGRpc2FibGVSZWxhdGl2ZURhdGVzOiB0cnVlIH1cbiAgICAgIClcbiAgICApO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGlmIChoYW5kbGVBcGlFcnJvcihlcnJvciwgb3B0cy5iYWNrZW5kKSkge1xuICAgICAgcHJvY2Vzcy5leGl0KDEpO1xuICAgIH1cbiAgICB0aHJvdyBlcnJvcjtcbiAgfVxufTtcbiJdfQ==
|