@kinshipjs/mysql2
Advanced tools
Comparing version 0.0.5-development to 0.0.6-development
@@ -28,3 +28,3 @@ import { createPool } from 'mysql2/promise'; | ||
} catch (err) { | ||
await transactionConnection.rollback(); | ||
await transactionConnection?.rollback(); | ||
throw handleError(err); | ||
@@ -41,3 +41,3 @@ } | ||
} catch (err) { | ||
await transactionConnection.rollback(); | ||
await transactionConnection?.rollback(); | ||
throw handleError(err); | ||
@@ -54,3 +54,3 @@ } | ||
} catch (err) { | ||
await transactionConnection.rollback(); | ||
await transactionConnection?.rollback(); | ||
throw handleError(err); | ||
@@ -67,3 +67,3 @@ } | ||
} catch (err) { | ||
await transactionConnection.rollback(); | ||
await transactionConnection?.rollback(); | ||
throw handleError(err); | ||
@@ -80,3 +80,3 @@ } | ||
} catch (err) { | ||
await transactionConnection.rollback(); | ||
await transactionConnection?.rollback(); | ||
throw handleError(err); | ||
@@ -482,2 +482,2 @@ } | ||
//# sourceMappingURL=out.js.map | ||
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9pbmRleC5qcyJdLCJuYW1lcyI6WyJ4IiwiY29sdW1uIiwicmVkdWNlU3RhcnQiLCJyZWR1Y2VkIiwiY21kIiwidmFsdWUiXSwibWFwcGluZ3MiOiI7QUFDQSxTQUFTLGtCQUFrQjtBQUdwQixTQUFTLFFBQVEsWUFBWTtBQUNoQyxNQUFJO0FBQ0osU0FBTztBQUFBLElBQ0gsUUFBUTtBQUFBLE1BQ0osWUFBWSxDQUFDLFNBQVMsR0FBRyxLQUFLLGVBQWUsQ0FBQyxJQUFJLEtBQUssWUFBWSxDQUFDLElBQUksS0FBSyxXQUFXLENBQUMsSUFBSSxLQUFLLFdBQVcsSUFBSSxLQUFLLGNBQWMsQ0FBQztBQUFBLElBQ3pJO0FBQUEsSUFDQSxZQUFZO0FBQUEsTUFDUixPQUFPO0FBQUEsTUFDUCxPQUFPLENBQUMsT0FBTyxRQUFRLG9CQUFvQixLQUFLLFFBQVEsR0FBRztBQUFBLE1BQzNELEtBQUssQ0FBQyxPQUFPLFFBQVEsU0FBUyxLQUFLLFFBQVEsR0FBRztBQUFBLE1BQzlDLEtBQUssQ0FBQyxPQUFPLFFBQVEsU0FBUyxLQUFLLFFBQVEsR0FBRztBQUFBLE1BQzlDLEtBQUssQ0FBQyxPQUFPLFFBQVEsU0FBUyxLQUFLLFFBQVEsR0FBRztBQUFBLE1BQzlDLEtBQUssQ0FBQyxPQUFPLFFBQVEsU0FBUyxLQUFLLFFBQVEsR0FBRztBQUFBLElBQ2xEO0FBQUEsSUFDQSxRQUFRLE9BQU87QUFDWCxhQUFPO0FBQUEsUUFDSCxNQUFNLFNBQVMsS0FBSyxNQUFNO0FBQ3RCLGNBQUk7QUFDQSxrQkFBTSxDQUFDLE9BQU8sSUFBSSxNQUFNLFdBQVcsTUFBTSxLQUFLLElBQUk7QUFDbEQ7QUFBQTtBQUFBLGNBQTJCO0FBQUE7QUFBQSxVQUMvQixTQUFRLEtBQUs7QUFDVCxrQkFBTSxzQkFBc0IsU0FBUztBQUNyQyxrQkFBTSxZQUFZLEdBQUc7QUFBQSxVQUN6QjtBQUFBLFFBQ0o7QUFBQSxRQUNBLE1BQU0sVUFBVSxLQUFLLE1BQU07QUFDdkIsY0FBSTtBQUNB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QVUsY0FBYyxhQUFhO0FBRWpDLFlBQUcsUUFBUTtBQUFZO0FBQ3ZCLGNBQU0sR0FBRyxFQUFFLE9BQU8sU0FBVSxVQUFVO0FBQUE7QUFDdEMsY0FBTSxHQUFHLEVBQUUsT0FBTyxDQUFDLEdBQUcsTUFBTSxHQUFHLEVBQUUsTUFBTSxPQUFPLFVBQVUsR0FBRyxPQUFPLEdBQUcsQ0FBQztBQUFBLE1BQzFFO0FBQUEsSUFDSjtBQUFBLEVBQ0o7QUFFQSxTQUFPLEtBQUssS0FBSyxFQUFFLFFBQVEsT0FBSyxNQUFNLENBQUMsRUFBRSxPQUFPLFdBQVksQ0FBQztBQUFBLE1BQWE7QUFHMUUsYUFBVyxPQUFPLE9BQU87QUFDckIsUUFBSSxNQUFNLEdBQUcsRUFBRSxLQUFLLFVBQVUsR0FBRztBQUM3QixhQUFPLE1BQU0sR0FBRztBQUFBLElBQ3BCO0FBQUEsRUFDSjtBQUNBLFFBQU0sRUFBRSxLQUFLLFVBQVUsTUFBTSxRQUFRLElBQUksU0FBUyxLQUFLO0FBQ3ZELFNBQU87QUFBQSxJQUNILEtBQUssVUFBVSxLQUFLO0FBQUE7QUFBQSxJQUFnQixPQUFPLEtBQUssS0FBSyxFQUFFLElBQUksT0FBSyxLQUFLLENBQUMsU0FBUyxNQUFNLENBQUMsRUFBRSxHQUFHLEdBQUcsRUFBRSxLQUFLLE9BQVMsQ0FBQyxHQUFHLFFBQVE7QUFBQSxJQUMxSCxNQUFNLENBQUMsR0FBRyxPQUFPLEtBQUssS0FBSyxFQUFFLFFBQVEsT0FBSyxNQUFNLENBQUMsRUFBRSxJQUFJLEdBQUcsR0FBRyxPQUFPO0FBQUEsRUFDeEU7QUFDSjtBQUVPLElBQU0sbUJBQW1CIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQHRzLWNoZWNrXHJcbmltcG9ydCB7IGNyZWF0ZVBvb2wgfSBmcm9tIFwibXlzcWwyL3Byb21pc2VcIjtcclxuXHJcbi8qKiBAdHlwZSB7aW1wb3J0KCdAa2luc2hpcGpzL2NvcmUvYWRhcHRlcicpLkluaXRpYWxpemVBZGFwdGVyQ2FsbGJhY2s8aW1wb3J0KFwibXlzcWwyL3Byb21pc2VcIikuUG9vbHxpbXBvcnQoXCJteXNxbDIvcHJvbWlzZVwiKS5Db25uZWN0aW9uPn0gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIGFkYXB0ZXIoY29ubmVjdGlvbikge1xyXG4gICAgbGV0IHRyYW5zYWN0aW9uQ29ubmVjdGlvbjtcclxuICAgIHJldHVybiB7XHJcbiAgICAgICAgc3ludGF4OiB7XHJcbiAgICAgICAgICAgIGRhdGVTdHJpbmc6IChkYXRlKSA9PiBgJHtkYXRlLmdldFVUQ0Z1bGxZZWFyKCl9LSR7ZGF0ZS5nZXRVVENNb250aCgpfS0ke2RhdGUuZ2V0VVRDRGF0ZSgpfSAke2RhdGUuZ2V0VVRDSG91cnN9OiR7ZGF0ZS5nZXRVVENNaW51dGVzKCl9YFxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgYWdncmVnYXRlczoge1xyXG4gICAgICAgICAgICB0b3RhbDogXCJDT1VOVCgqKVwiLFxyXG4gICAgICAgICAgICBjb3VudDogKHRhYmxlLCBjb2wpID0+IGBDT1VOVChESVNUSU5DVCBcXGAke3RhYmxlfVxcYC5cXGAke2NvbH1cXGApYCxcclxuICAgICAgICAgICAgYXZnOiAodGFibGUsIGNvbCkgPT4gYEFWRyhcXGAke3RhYmxlfVxcYC5cXGAke2NvbH1cXGApYCxcclxuICAgICAgICAgICAgbWF4OiAodGFibGUsIGNvbCkgPT4gYE1BWChcXGAke3RhYmxlfVxcYC5cXGAke2NvbH1cXGApYCxcclxuICAgICAgICAgICAgbWluOiAodGFibGUsIGNvbCkgPT4gYE1JTihcXGAke3RhYmxlfVxcYC5cXGAke2NvbH1cXGApYCxcclxuICAgICAgICAgICAgc3VtOiAodGFibGUsIGNvbCkgPT4gYFNVTShcXGAke3RhYmxlfVxcYC5cXGAke2NvbH1cXGApYFxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgZXhlY3V0ZShzY29wZSkge1xyXG4gICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgYXN5bmMgZm9yUXVlcnkoY21kLCBhcmdzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgW3Jlc3VsdHNdID0gYXdhaXQgY29ubmVjdGlvbi5xdWVyeShjbWQsIGFyZ3MpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gLyoqIEB0eXBlIHthbnl9ICovIChyZXN1bHRzKTtcclxuICAgICAgICAgICAgICAgICAgICB9IGNhdGNoKGVycikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBhd2FpdCB0cmFuc2FjdGlvbkNvbm5lY3Rpb24ucm9sbGJhY2soKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgaGFuZGxlRXJyb3IoZXJyKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgYXN5bmMgZm9ySW5zZXJ0KGNtZCwgYXJncykge1xyXG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFtyZXN1bHRdID0gLyoqIEB0eXBlIHtpbXBvcnQoJ215c3FsMi9wcm9taXNlJykuUmVzdWx0U2V0SGVhZGVyW119ICovIChhd2FpdCBjb25uZWN0aW9uLmV4ZWN1dGUoY21kLCBhcmdzKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBBcnJheS5mcm9tKEFycmF5KHJlc3VsdC5hZmZlY3RlZFJvd3MpLmtleXMoKSkubWFwKChfLCBuKSA9PiBuICsgcmVzdWx0Lmluc2VydElkKTtcclxuICAgICAgICAgICAgICAgICAgICB9IGNhdGNoKGVycikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBhd2FpdCB0cmFuc2FjdGlvbkNvbm5lY3Rpb24ucm9sbGJhY2soKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgaGFuZGxlRXJyb3IoZXJyKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgYXN5bmMgZm9yVXBkYXRlKGNtZCwgYXJncykge1xyXG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFtyZXN1bHRdID0gLyoqIEB0eXBlIHtpbXBvcnQoJ215c3FsMi9wcm9taXNlJykuUmVzdWx0U2V0SGVhZGVyW119ICovIChhd2FpdCBjb25uZWN0aW9uLmV4ZWN1dGUoY21kLCBhcmdzKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQuYWZmZWN0ZWRSb3dzO1xyXG4gICAgICAgICAgICAgICAgICAgIH0gY2F0Y2goZXJyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGF3YWl0IHRyYW5zYWN0aW9uQ29ubmVjdGlvbi5yb2xsYmFjaygpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBoYW5kbGVFcnJvcihlcnIpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICBhc3luYyBmb3JEZWxldGUoY21kLCBhcmdzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgW3Jlc3VsdF0gPSAvKiogQHR5cGUge2ltcG9ydCgnbXlzcWwyL3Byb21pc2UnKS5SZXN1bHRTZXRIZWFkZXJbXX0gKi8gKGF3YWl0IGNvbm5lY3Rpb24uZXhlY3V0ZShjbWQsIGFyZ3MpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdC5hZmZlY3RlZFJvd3M7XHJcbiAgICAgICAgICAgICAgICAgICAgfSBjYXRjaChlcnIpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYXdhaXQgdHJhbnNhY3Rpb25Db25uZWN0aW9uLnJvbGxiYWNrKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IGhhbmRsZUVycm9yKGVycik7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIGFzeW5jIGZvclRydW5jYXRlKGNtZCwgYXJncykge1xyXG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFtyZXN1bHRdID0gLyoqIEB0eXBlIHtpbXBvcnQoJ215c3FsMi9wcm9taXNlJykuUmVzdWx0U2V0SGVhZGVyW119ICovIChhd2FpdCBjb25uZWN0aW9uLmV4ZWN1dGUoY21kLCBhcmdzKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQuYWZmZWN0ZWRSb3dzO1xyXG4gICAgICAgICAgICAgICAgICAgIH0gY2F0Y2goZXJyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGF3YWl0IHRyYW5zYWN0aW9uQ29ubmVjdGlvbi5yb2xsYmFjaygpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBoYW5kbGVFcnJvcihlcnIpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICBhc3luYyBmb3JEZXNjcmliZShjbWQsIGFyZ3MpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBbcmVzdWx0XSA9IC8qKiBAdHlwZSB7aW1wb3J0KCdteXNxbDIvcHJvbWlzZScpLlJlc3VsdFNldEhlYWRlcltdfSAqLyAoYXdhaXQgY29ubmVjdGlvbi5leGVjdXRlKGNtZCwgYXJncykpO1xyXG4gICAgICAgICAgICAgICAgICAgIC8qKiBAdHlwZSB7YW55fSAqL1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBzZXQgPSB7fVxyXG4gICAgICAgICAgICAgICAgICAgIGZvcihjb25zdCBmaWVsZCBpbiByZXN1bHQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGRlZmF1bHRWYWx1ZSA9IGdldERlZmF1bHRWYWx1ZUZuKHJlc3VsdFtmaWVsZF0uVHlwZSwgcmVzdWx0W2ZpZWxkXS5EZWZhdWx0LCByZXN1bHRbZmllbGRdLkV4dHJhKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHR5cGUgPSByZXN1bHRbZmllbGRdLlR5cGUudG9Mb3dlckNhc2UoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxvb3BUaHJvdWdoRGF0YVR5cGVzOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGRhdGFUeXBlIGluIG15c3FsRGF0YVR5cGVzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IoY29uc3QgZHQgb2YgbXlzcWxEYXRhVHlwZXNbZGF0YVR5cGVdKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYodHlwZS5zdGFydHNXaXRoKGR0KSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlID0gZGF0YVR5cGU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGxvb3BUaHJvdWdoRGF0YVR5cGVzO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBzZXRbZmllbGRdID0ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmllbGQ6IHJlc3VsdFtmaWVsZF0uRmllbGQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YWJsZTogXCJcIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsaWFzOiBcIlwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNQcmltYXJ5OiByZXN1bHRbZmllbGRdLktleSA9PT0gXCJQUklcIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzSWRlbnRpdHk6IHJlc3VsdFtmaWVsZF0uRXh0cmEuaW5jbHVkZXMoXCJhdXRvX2luY3JlbWVudFwiKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzVmlydHVhbDogcmVzdWx0W2ZpZWxkXS5FeHRyYS5pbmNsdWRlcyhcIlZJUlRVQUxcIiksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc051bGxhYmxlOiByZXN1bHRbZmllbGRdLk51bGwgPT09IFwiWUVTXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhdHlwZTogdHlwZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHRWYWx1ZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2V0O1xyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIGFzeW5jIGZvclRyYW5zYWN0aW9uQmVnaW4oKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgLy9AdHMtaWdub3JlXHJcbiAgICAgICAgICAgICAgICAgICAgdHJhbnNhY3Rpb25Db25uZWN0aW9uID0gYXdhaXQgY29ubmVjdGlvbi5nZXRDb25uZWN0aW9uKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgdHJhbnNhY3Rpb25Db25uZWN0aW9uLmJlZ2luVHJhbnNhY3Rpb24oKTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJhbnNhY3Rpb25Db25uZWN0aW9uO1xyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIGFzeW5jIGZvclRyYW5zYWN0aW9uRW5kKGNubikge1xyXG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IHRyYW5zYWN0aW9uQ29ubmVjdGlvbi5jb21taXQoKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgc2VyaWFsaXplKCkge1xyXG4gICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgZm9yUXVlcnkoZGF0YSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHNlbGVjdHMgPSBnZXRTZWxlY3RzKGRhdGEuc2VsZWN0KTtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBmcm9tID0gZ2V0RnJvbShkYXRhLmZyb20sIGRhdGEubGltaXQsIGRhdGEub2Zmc2V0KTtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCB3aGVyZSA9IGdldFdoZXJlKGRhdGEud2hlcmUpO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGdyb3VwQnkgPSBnZXRHcm91cEJ5KGRhdGEuZ3JvdXBfYnkpO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG9yZGVyQnkgPSBnZXRPcmRlckJ5KGRhdGEub3JkZXJfYnkpO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGxpbWl0ID0gZ2V0TGltaXQoZGF0YS5saW1pdCk7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgb2Zmc2V0ID0gZ2V0T2Zmc2V0KGRhdGEub2Zmc2V0KTtcclxuICAgICAgICAgICAgICAgICAgICAvKiogQHR5cGUge2FueVtdfSAqL1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBhcmdzID0gW107XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IGNtZCA9IFwiXCI7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYoZGF0YS5mcm9tLmxlbmd0aCA+IDEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY21kID0gYFNFTEVDVCAke3NlbGVjdHMuY21kfVxcblxcdEZST00gJHtmcm9tLmNtZH0ke3doZXJlLmNtZH0ke2dyb3VwQnkuY21kfSR7b3JkZXJCeS5jbWR9YDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgLyoqIEB0eXBlIHthbnlbXX0gKi9cclxuICAgICAgICAgICAgICAgICAgICAgICAgYXJncyA9IGFyZ3MuY29uY2F0KC4uLltcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdHMuYXJncyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyb20uYXJncywgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGVyZS5hcmdzLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JvdXBCeS5hcmdzLCBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZGVyQnkuYXJnc1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBdKTtcclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjbWQgPSBgU0VMRUNUICR7c2VsZWN0cy5jbWR9XFxuXFx0RlJPTSAke2Zyb20uY21kfSR7d2hlcmUuY21kfSR7bGltaXQuY21kfSR7b2Zmc2V0LmNtZH0ke2dyb3VwQnkuY21kfSR7b3JkZXJCeS5jbWR9YDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYXJncyA9IGFyZ3MuY29uY2F0KC4uLltcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdHMuYXJncywgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcm9tLmFyZ3MsIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hlcmUuYXJncyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbWl0LmFyZ3MsIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0LmFyZ3MsIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JvdXBCeS5hcmdzLCBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZGVyQnkuYXJnc1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBdKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB7IFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjbWQsIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBhcmdzXHJcbiAgICAgICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICBmb3JJbnNlcnQoZGF0YSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBjbWQgPSBcIlwiO1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBhcmdzID0gW107XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgeyB0YWJsZSwgY29sdW1ucywgdmFsdWVzIH0gPSBkYXRhO1xyXG4gICAgICAgICAgICAgICAgICAgIGFyZ3MgPSB2YWx1ZXMuZmxhdCgpO1xyXG4gICAgICAgICAgICAgICAgICAgIGNtZCArPSBgSU5TRVJUIElOVE8gJHt0YWJsZX0gKCR7Y29sdW1ucy5qb2luKCcsICcpfSlcXG5cXHRWQUxVRVNcXG5cXHRcXHQke3ZhbHVlcy5mbGF0TWFwKHYgPT4gYCgke0FycmF5LmZyb20oQXJyYXkodi5sZW5ndGgpLmtleXMoKSkubWFwKF8gPT4gJz8nKX0pYCkuam9pbignXFxuXFx0XFx0LCcpfWA7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsgY21kOiBjbWQsIGFyZ3M6IGFyZ3MgfTtcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICBmb3JVcGRhdGUoZGF0YSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHsgdGFibGUsIGNvbHVtbnMsIHdoZXJlLCBleHBsaWNpdCwgaW1wbGljaXQgfSA9IGRhdGE7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgeyBjbWQ6IGV4cGxpY2l0Q21kLCBhcmdzOiBleHBsaWNpdEFyZ3MgfSA9IGdldEV4cGxpY2l0VXBkYXRlKHsgdGFibGUsIGNvbHVtbnMsIHdoZXJlLCBleHBsaWNpdCB9KTtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCB7IGNtZDogaW1wbGljaXRDbWQsIGFyZ3M6IGltcGxpY2l0QXJncyB9ID0gZ2V0SW1wbGljaXRVcGRhdGUoeyB0YWJsZSwgY29sdW1ucywgd2hlcmUsIGltcGxpY2l0IH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB7IFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjbWQ6IGV4cGxpY2l0Q21kICE9PSAnJyA/IGV4cGxpY2l0Q21kIDogaW1wbGljaXRDbWQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3M6IGV4cGxpY2l0Q21kICE9PSAnJyA/IGV4cGxpY2l0QXJncyA6IGltcGxpY2l0QXJnc1xyXG4gICAgICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgZm9yRGVsZXRlKGRhdGEpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCB7IHRhYmxlLCB3aGVyZSB9ID0gZGF0YTtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCB7IGNtZCwgYXJncyB9ID0gaGFuZGxlV2hlcmUod2hlcmUpO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB7IGNtZDogYERFTEVURSBGUk9NICR7dGFibGV9ICR7Y21kfWAsIGFyZ3MgfTtcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICBmb3JUcnVuY2F0ZShkYXRhKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsgY21kOiBgVFJVTkNBVEUgJHtkYXRhLnRhYmxlfWAsIGFyZ3M6IFtdIH07XHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgZm9yRGVzY3JpYmUodGFibGUpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4geyBjbWQ6IGBERVNDUklCRSAke3RhYmxlfTtgLCBhcmdzOiBbXSB9O1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcblxyXG4vKipcclxuICogXHJcbiAqIEBwYXJhbSB7RXJyb3J9IG9yaWdpbmFsRXJyb3IgXHJcbiAqIEByZXR1cm5zIHtFcnJvcn1cclxuICovXHJcbmZ1bmN0aW9uIGhhbmRsZUVycm9yKG9yaWdpbmFsRXJyb3IpIHtcclxuICAgIHJldHVybiBvcmlnaW5hbEVycm9yO1xyXG59XHJcblxyXG4vLyBVc2Uge3N0cmluZ1RvQ2hlY2t9LnN0YXJ0c1dpdGgoe2RhdGFUeXBlfSkgd2hlcmUge2RhdGFUeXBlfSBpcyBvbmUgb2YgdGhlIGRhdGEgdHlwZXMgaW4gdGhlIGFycmF5IGZvciB0aGUgcmVzcGVjdGl2ZSBkYXRhIHR5cGUgdXNlZCBpbiBLaW5zaGlwLlxyXG4vLyBlLmcuLCBsZXQgZGV0ZXJtaW5lZERhdGFUeXBlID0gbXlzcWxEYXRhVHlwZXMuc3RyaW5nLmZpbHRlcihkdCA9PiBzLnN0YXJ0c1dpdGgoZHQpKS5sZW5ndGggPiAwID8gXCJzdHJpbmdcIiA6IC4uLlxyXG5jb25zdCBteXNxbERhdGFUeXBlcyA9IHtcclxuICAgIHN0cmluZzogW1xyXG4gICAgICAgIFwiY2hhclwiLCBcInZhcmNoYXJcIiwgXHJcbiAgICAgICAgXCJiaW5hcnlcIiwgXCJ2YXJiaW5hcnlcIixcclxuICAgICAgICBcInRpbnlibG9iXCIsIFwibWVkaXVtYmxvYlwiLCBcImxvbmdibG9iXCIsIFwiYmxvYlwiLFxyXG4gICAgICAgIFwidGlueXRleHRcIiwgXCJtZWRpdW10ZXh0XCIsIFwibG9uZ3RleHRcIiwgXCJ0ZXh0XCIsXHJcbiAgICAgICAgXCJlbnVtXCIsXHJcbiAgICAgICAgXCJzZXRcIlxyXG4gICAgXSxcclxuICAgIGludDogW1xyXG4gICAgICAgIFwidGlueWludFwiLCBcInNtYWxsaW50XCIsIFwibWVkaXVtaW50XCIsIFwiYmlnaW50XCIsIFwiaW50XCIsXHJcbiAgICBdLFxyXG4gICAgZmxvYXQ6IFtcclxuICAgICAgICBcImZsb2F0XCIsXHJcbiAgICAgICAgXCJkb3VibGVcIixcclxuICAgICAgICBcImRlY2ltYWxcIixcclxuICAgICAgICBcImRlY1wiXHJcbiAgICBdLFxyXG4gICAgYm9vbGVhbjogW1xyXG4gICAgICAgIFwiYml0KDEpXCIsXHJcbiAgICAgICAgXCJib29sXCIsXHJcbiAgICAgICAgXCJib29sZWFuXCJcclxuICAgIF0sXHJcbiAgICBkYXRlOiBbXHJcbiAgICAgICAgXCJkYXRlXCIsXHJcbiAgICAgICAgXCJ0aW1lXCIsXHJcbiAgICAgICAgXCJ5ZWFyXCJcclxuICAgIF1cclxufTtcclxuXHJcbmZ1bmN0aW9uIGhhbmRsZVdoZXJlKGNvbmRpdGlvbnMsIHRhYmxlPVwiXCIsIHNhbml0aXplPShuKSA9PiBgP2ApIHtcclxuICAgIGlmKCFjb25kaXRpb25zKSByZXR1cm4geyBjbWQ6ICcnLCBhcmdzOiBbXSB9O1xyXG4gICAgbGV0IGFyZ3MgPSBbXTtcclxuXHJcbiAgICAvLyBmdW5jdGlvbiB0byBmaWx0ZXIgb3V0IGNvbmRpdGlvbnMgdGhhdCBkbyBub3QgYmVsb25nIHRvIHRhYmxlLlxyXG4gICAgLy8gKHRoaXMgbXVzdCBiZSBhIG1hcCwgYXMgaWYgaXQgd2FzIGp1c3QgZmlsdGVyIGJlaW5nIHVzZWQsIHRoZW4gaXQgd291bGQgcmVtb3ZlIGFuIGVudGlyZSBzdWJhcnJheSwgd2hlbiBtYXliZSB0aGF0IGFycmF5IGhhcyBjb25kaXRpb25zKVxyXG4gICAgY29uc3QgbWFwRmlsdGVyID0gKHgpID0+IHtcclxuICAgICAgICBpZihBcnJheS5pc0FycmF5KHgpKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGZpbHRlcmVkID0geC5tYXAobWFwRmlsdGVyKS5maWx0ZXIoeCA9PiB4ICE9PSB1bmRlZmluZWQpO1xyXG4gICAgICAgICAgICByZXR1cm4gZmlsdGVyZWQubGVuZ3RoID4gMCA/IGZpbHRlcmVkIDogdW5kZWZpbmVkO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZih4LnRhYmxlLmluY2x1ZGVzKHRhYmxlKSkge1xyXG4gICAgICAgICAgICByZXR1cm4geDtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcclxuICAgIH1cclxuXHJcbiAgICAvLyBmdW5jdGlvbiB0byByZWR1Y2UgZWFjaCBjb25kaXRpb24gdG8gb25lIGFwcHJvcHJpYXRlIGNsYXVzZSBzdHJpbmcuXHJcbiAgICBjb25zdCByZWR1Y2UgPSAocHJldlN0ciwgY29uZCwgZGVwdGg9MCkgPT4ge1xyXG4gICAgICAgIGNvbnN0IHRhYnMgPSBBcnJheS5mcm9tKEFycmF5KGRlcHRoICsgMikua2V5cygpKS5tYXAoXyA9PiBgXFx0YCkuam9pbignJyk7XHJcbiAgICAgICAgXHJcbiAgICAgICAgLy8gbmVzdGVkIGNvbmRpdGlvbnNcclxuICAgICAgICBpZihBcnJheS5pc0FycmF5KGNvbmQpKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IFtuZXh0Q29uZCwgLi4ucmVtYWluZGVyXSA9IGNvbmQ7XHJcblxyXG4gICAgICAgICAgICAvLyBlZGdlIGNhc2U6IEJFVFdFRU4gb3BlcmF0b3IuXHJcbiAgICAgICAgICAgIGlmKG5leHRDb25kLm9wZXJhdG9yID09PSBcIkJFVFdFRU5cIikge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgY29sdW1uID0gYFxcYCR7bmV4dENvbmQudGFibGV9XFxgLlxcYCR7bmV4dENvbmQucHJvcGVydHl9XFxgYDtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGxvd2VyQm91bmQgPSBzYW5pdGl6ZShhcmdzLmxlbmd0aCk7XHJcbiAgICAgICAgICAgICAgICBjb25zdCB1cHBlckJvdW5kID0gc2FuaXRpemUoYXJncy5sZW5ndGgrMSk7XHJcbiAgICAgICAgICAgICAgICBjb25zdCByZWR1Y2VTdGFydCA9IGAke25leHRDb25kLmNoYWlufSAoJHtjb2x1bW59ICR7bmV4dENvbmQub3BlcmF0b3J9ICR7bG93ZXJCb3VuZH0gQU5EICR7dXBwZXJCb3VuZH1gO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgcmVkdWNlZCA9IHJlbWFpbmRlci5yZWR1Y2UoKGEsIGIpID0+IHJlZHVjZShhLCBiLCBkZXB0aCArIDEpLCByZWR1Y2VTdGFydCk7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBjbWQgPSBgJHtwcmV2U3RyfSAke3JlZHVjZWR9KVxcbiR7dGFic31gO1xyXG4gICAgICAgICAgICAgICAgYXJncyA9IGFyZ3MuY29uY2F0KG5leHRDb25kLnZhbHVlKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBjbWQ7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgbGV0IHZhbHVlO1xyXG4gICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShuZXh0Q29uZC52YWx1ZSkpIHtcclxuICAgICAgICAgICAgICAgIGFyZ3MgPSBhcmdzLmNvbmNhdChuZXh0Q29uZC52YWx1ZSk7XHJcbiAgICAgICAgICAgICAgICB2YWx1ZSA9IGAoJHtuZXh0Q29uZC52YWx1ZS5tYXAoKF8sbikgPT4gc2FuaXRpemUoYXJncy5sZW5ndGgrbikpLmpvaW4oJywnKX0pYDtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGFyZ3MucHVzaChuZXh0Q29uZC52YWx1ZSk7XHJcbiAgICAgICAgICAgICAgICB2YWx1ZSA9IHNhbml0aXplKGFyZ3MubGVuZ3RoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjb25zdCBjb2x1bW4gPSBgXFxgJHtuZXh0Q29uZC50YWJsZX1cXGAuXFxgJHtuZXh0Q29uZC5wcm9wZXJ0eX1cXGBgO1xyXG4gICAgICAgICAgICBjb25zdCByZWR1Y2VTdGFydCA9IGAke25leHRDb25kLmNoYWlufSAoJHtjb2x1bW59ICR7bmV4dENvbmQub3BlcmF0b3J9ICR7dmFsdWV9YDtcclxuICAgICAgICAgICAgY29uc3QgcmVkdWNlZCA9IHJlbWFpbmRlci5yZWR1Y2UoKGEsIGIpID0+IHtcclxuICAgICAgICAgICAgICAgIHJldHVybiByZWR1Y2UoYSwgYiwgZGVwdGggKyAxKTtcclxuICAgICAgICAgICAgfSwgcmVkdWNlU3RhcnQpO1xyXG4gICAgICAgICAgICBjb25zdCBjbWQgPSBgJHtwcmV2U3RyfSAke3JlZHVjZWR9KVxcbiR7dGFic31gO1xyXG4gICAgICAgICAgICByZXR1cm4gY21kO1xyXG4gICAgICAgIH1cclxuICAgICAgICBcclxuICAgICAgICAvLyBlZGdlIGNhc2U6IEJFVFdFRU4gb3BlcmF0b3IuXHJcbiAgICAgICAgaWYoY29uZC5vcGVyYXRvciA9PT0gXCJCRVRXRUVOXCIpIHtcclxuICAgICAgICAgICAgY29uc3QgY29sdW1uID0gYFxcYCR7Y29uZC50YWJsZX1cXGAuXFxgJHtjb25kLnByb3BlcnR5fVxcYGA7XHJcbiAgICAgICAgICAgIGNvbnN0IGxvd2VyQm91bmQgPSBzYW5pdGl6ZShhcmdzLmxlbmd0aCk7XHJcbiAgICAgICAgICAgIGNvbnN0IHVwcGVyQm91bmQgPSBzYW5pdGl6ZShhcmdzLmxlbmd0aCsxKTtcclxuICAgICAgICAgICAgY29uc3QgY21kID0gcHJldlN0ciArIGAke2NvbmQuY2hhaW59ICR7Y29sdW1ufSAke2NvbmQub3BlcmF0b3J9ICR7bG93ZXJCb3VuZH0gQU5EICR7dXBwZXJCb3VuZH1cXG4ke3RhYnN9YDtcclxuICAgICAgICAgICAgYXJncyA9IGFyZ3MuY29uY2F0KGNvbmQudmFsdWUpO1xyXG4gICAgICAgICAgICByZXR1cm4gY21kO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gc2luZ2xlIGNvbmRpdGlvbi5cclxuICAgICAgICBsZXQgdmFsdWU7XHJcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoY29uZC52YWx1ZSkpIHtcclxuICAgICAgICAgICAgYXJncyA9IGFyZ3MuY29uY2F0KGNvbmQudmFsdWUpO1xyXG4gICAgICAgICAgICB2YWx1ZSA9IGAoJHtjb25kLnZhbHVlLm1hcCgoXywgbikgPT4gc2FuaXRpemUoYXJncy5sZW5ndGggKyBuKSkuam9pbignLCcpfSlgO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGFyZ3MucHVzaChjb25kLnZhbHVlKTtcclxuICAgICAgICAgICAgdmFsdWUgPSBzYW5pdGl6ZShhcmdzLmxlbmd0aCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IGNvbHVtbiA9IGBcXGAke2NvbmQudGFibGV9XFxgLlxcYCR7Y29uZC5wcm9wZXJ0eX1cXGBgO1xyXG4gICAgICAgIGNvbnN0IGNtZCA9IHByZXZTdHIgKyBgJHtjb25kLmNoYWlufSAke2NvbHVtbn0gJHtjb25kLm9wZXJhdG9yfSAke3ZhbHVlfVxcbiR7dGFic31gO1xyXG4gICAgICAgIHJldHVybiBjbWQ7XHJcbiAgICB9O1xyXG4gICAgXHJcbiAgICAvLyBtYXAgdGhlIGFycmF5LCBmaWx0ZXIgb3V0IHVuZGVmaW5lZHMsIHRoZW4gcmVkdWNlIHRoZSBhcnJheSB0byBnZXQgdGhlIGNsYXVzZS5cclxuICAgIC8qKiBAdHlwZSB7c3RyaW5nfSAqL1xyXG4gICAgY29uc3QgcmVkdWNlZCA9IGNvbmRpdGlvbnMubWFwKG1hcEZpbHRlcikuZmlsdGVyKHggPT4geCAhPT0gdW5kZWZpbmVkKS5yZWR1Y2UocmVkdWNlLCAnJyk7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICAgIC8vIGlmIGEgZmlsdGVyIHRvb2sgcGxhY2UsIHRoZW4gdGhlIFdIRVJFIHN0YXRlbWVudCBvZiB0aGUgY2xhdXNlIG1heSBub3QgYmUgdGhlcmUsIHNvIHdlIHJlcGxhY2UuXHJcbiAgICAgICAgY21kOiByZWR1Y2VkLnN0YXJ0c1dpdGgoXCJXSEVSRVwiKSBcclxuICAgICAgICAgICAgPyByZWR1Y2VkLnRyaW1FbmQoKVxyXG4gICAgICAgICAgICA6IHJlZHVjZWQuc3RhcnRzV2l0aChcIkFORFwiKSBcclxuICAgICAgICAgICAgICAgID8gcmVkdWNlZC5yZXBsYWNlKFwiQU5EXCIsIFwiV0hFUkVcIikudHJpbUVuZCgpIFxyXG4gICAgICAgICAgICAgICAgOiByZWR1Y2VkLnJlcGxhY2UoXCJPUlwiLCBcIldIRVJFXCIpLnRyaW1FbmQoKSxcclxuICAgICAgICAvLyBhcmd1bWVudHMgd2FzIGJ1aWx0IGluc2lkZSB0aGUgcmVkdWNlIGZ1bmN0aW9uLlxyXG4gICAgICAgIGFyZ3NcclxuICAgIH07XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGdldERlZmF1bHRWYWx1ZUZuKHR5cGUsIGRlZmF1bHRWYWx1ZSwgZXh0cmEpIHtcclxuICAgIGlmKGV4dHJhLmluY2x1ZGVzKFwiREVGQVVMVF9HRU5FUkFURURcIikpIHtcclxuICAgICAgICBzd2l0Y2goZGVmYXVsdFZhbHVlKSB7XHJcbiAgICAgICAgICAgIGNhc2UgXCJDVVJSRU5UX1RJTUVTVEFNUFwiOiB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gKCkgPT4gbmV3IERhdGU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBpZihkZWZhdWx0VmFsdWUgIT09IG51bGwpIHtcclxuICAgICAgICBpZih0eXBlLmluY2x1ZGVzKFwidGlueWludFwiKSkge1xyXG4gICAgICAgICAgICBkZWZhdWx0VmFsdWUgPSBwYXJzZUludChkZWZhdWx0VmFsdWUpID09PSAxO1xyXG4gICAgICAgIH0gZWxzZSBpZih0eXBlLmluY2x1ZGVzKFwiYmlnaW50XCIpKSB7XHJcbiAgICAgICAgICAgIGRlZmF1bHRWYWx1ZSA9IEJpZ0ludChkZWZhdWx0VmFsdWUpO1xyXG4gICAgICAgIH0gZWxzZSBpZih0eXBlLmluY2x1ZGVzKFwiZG91YmxlXCIpKSB7XHJcbiAgICAgICAgICAgIGRlZmF1bHRWYWx1ZSA9IHBhcnNlRmxvYXQoZGVmYXVsdFZhbHVlKTtcclxuICAgICAgICB9IGVsc2UgaWYodHlwZS5pbmNsdWRlcyhcImRhdGVcIikpIHtcclxuICAgICAgICAgICAgZGVmYXVsdFZhbHVlID0gRGF0ZS5wYXJzZShkZWZhdWx0VmFsdWUpO1xyXG4gICAgICAgIH0gZWxzZSBpZih0eXBlLmluY2x1ZGVzKFwiaW50XCIpKSB7XHJcbiAgICAgICAgICAgIGRlZmF1bHRWYWx1ZSA9IHBhcnNlSW50KGRlZmF1bHRWYWx1ZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuICgpID0+IGRlZmF1bHRWYWx1ZTtcclxufVxyXG5cclxuZnVuY3Rpb24gZ2V0U2VsZWN0cyhzZWxlY3QpIHtcclxuICAgIGNvbnN0IGNvbHMgPSBzZWxlY3QubWFwKHByb3AgPT4ge1xyXG4gICAgICAgIGlmKHByb3AuYWxpYXMgPT09ICcnKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBgYDtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYoIShcImFnZ3JlZ2F0ZVwiIGluIHByb3ApKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBgXFxgJHtwcm9wLnRhYmxlfVxcYC5cXGAke3Byb3AuY29sdW1ufVxcYCBBUyBcXGAke3Byb3AuYWxpYXN9XFxgYDtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGAke3Byb3AuY29sdW1ufSBBUyBcXGAke3Byb3AuYWxpYXN9XFxgYDtcclxuICAgIH0pLmpvaW4oJ1xcblxcdFxcdCwnKTtcclxuICAgIHJldHVybiB7XHJcbiAgICAgICAgY21kOiBgJHtjb2xzfWAsXHJcbiAgICAgICAgYXJnczogW11cclxuICAgIH07XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGdldExpbWl0KGxpbWl0KSB7XHJcbiAgICBpZighbGltaXQpIHJldHVybiB7IGNtZDogXCJcIiwgYXJnczogW10gfTtcclxuICAgIHJldHVybiB7XHJcbiAgICAgICAgY21kOiBgXFxuXFx0TElNSVQgP2AsXHJcbiAgICAgICAgYXJnczogW2xpbWl0XVxyXG4gICAgfTtcclxufVxyXG5cclxuZnVuY3Rpb24gZ2V0T2Zmc2V0KG9mZnNldCkge1xyXG4gICAgaWYoIW9mZnNldCkgcmV0dXJuIHsgY21kOiBcIlwiLCBhcmdzOiBbXSB9O1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgICBjbWQ6IGBcXG5cXHRPRkZTRVQgP2AsXHJcbiAgICAgICAgYXJnczogW29mZnNldF1cclxuICAgIH07XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGdldEZyb20oZnJvbSwgbGltaXQsIG9mZnNldCkge1xyXG4gICAgbGV0IGNtZCA9IFwiXCI7XHJcbiAgICBsZXQgYXJncyA9IFtdO1xyXG4gICAgaWYoZnJvbS5sZW5ndGggPiAxKSB7XHJcbiAgICAgICAgY29uc3Qgam9pbmluZ1RhYmxlcyA9IFtdO1xyXG4gICAgICAgIGNvbnN0IFttYWluLCAuLi5qb2luc10gPSBmcm9tO1xyXG4gICAgICAgIGlmKGxpbWl0KSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGxpbWl0Q21kID0gZ2V0TGltaXQobGltaXQpO1xyXG4gICAgICAgICAgICBjb25zdCBvZmZzZXRDbWQgPSBnZXRPZmZzZXQob2Zmc2V0KTtcclxuICAgICAgICAgICAgY29uc3QgbWFpblN1YlF1ZXJ5ID0gYChTRUxFQ1QgKiBGUk9NIFxcYCR7bWFpbi5yZWFsTmFtZX1cXGAgJHtsaW1pdENtZC5jbWR9ICR7b2Zmc2V0Q21kLmNtZH0pIEFTIFxcYCR7bWFpbi5hbGlhc31cXGBgO1xyXG4gICAgICAgICAgICBhcmdzID0gYXJncy5jb25jYXQobGltaXRDbWQuYXJncywgb2Zmc2V0Q21kLmFyZ3MpO1xyXG4gICAgICAgICAgICBqb2luaW5nVGFibGVzLnB1c2gobWFpblN1YlF1ZXJ5KTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBqb2luaW5nVGFibGVzLnB1c2goYFxcYCR7bWFpbi5yZWFsTmFtZX1cXGAgQVMgXFxgJHttYWluLmFsaWFzfVxcYGApO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY21kID0gam9pbmluZ1RhYmxlcy5jb25jYXQoam9pbnMubWFwKHRhYmxlID0+IHtcclxuICAgICAgICAgICAgY29uc3QgbmFtZUFuZEFsaWFzID0gYFxcYCR7dGFibGUucmVhbE5hbWV9XFxgIEFTIFxcYCR7dGFibGUuYWxpYXN9XFxgYDtcclxuICAgICAgICAgICAgY29uc3Qgb25SZWZlcmVyS2V5ID0gYFxcYCR7dGFibGUucmVmZXJlclRhYmxlS2V5LnRhYmxlfVxcYC5cXGAke3RhYmxlLnJlZmVyZXJUYWJsZUtleS5jb2x1bW59XFxgYDtcclxuICAgICAgICAgICAgY29uc3Qgb25SZWZlcmVuY2VLZXkgPSBgXFxgJHt0YWJsZS5yZWZlcmVuY2VUYWJsZUtleS50YWJsZX1cXGAuXFxgJHt0YWJsZS5yZWZlcmVuY2VUYWJsZUtleS5jb2x1bW59XFxgYDtcclxuICAgICAgICAgICAgcmV0dXJuIGAke25hbWVBbmRBbGlhc31cXG5cXHRcXHRcXHRPTiAke29uUmVmZXJlcktleX0gPSAke29uUmVmZXJlbmNlS2V5fWA7XHJcbiAgICAgICAgfSkpLmpvaW4oJ1xcblxcdFxcdExFRlQgSk9JTicpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgICBjbWQgPSBgXFxgJHtmcm9tWzBdLnJlYWxOYW1lfVxcYCBBUyBcXGAke2Zyb21bMF0uYWxpYXN9XFxgYFxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHsgY21kLCBhcmdzIH07XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGdldEdyb3VwQnkoZ3JvdXBfYnkpIHtcclxuICAgIGlmKCFncm91cF9ieSkgcmV0dXJuIHsgY21kOiBcIlwiLCBhcmdzOiBbXSB9O1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgICBjbWQ6ICdcXG5cXHRHUk9VUCBCWSAnICsgZ3JvdXBfYnkubWFwKHByb3AgPT4gYFxcYCR7cHJvcC5hbGlhc31cXGBgKS5qb2luKCdcXG5cXHRcXHQsJyksXHJcbiAgICAgICAgYXJnczogW11cclxuICAgIH07XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGdldE9yZGVyQnkob3JkZXJfYnkpIHtcclxuICAgIGlmKCFvcmRlcl9ieSkgcmV0dXJuIHsgY21kOiBcIlwiLCBhcmdzOiBbXSB9O1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgICBjbWQ6ICdcXG5cXHRPUkRFUiBCWSAnICsgb3JkZXJfYnkubWFwKHByb3AgPT4gcHJvcC5hbGlhcykuam9pbignXFxuXFx0XFx0LCcpLFxyXG4gICAgICAgIGFyZ3M6IFtdXHJcbiAgICB9O1xyXG59XHJcblxyXG5mdW5jdGlvbiBnZXRXaGVyZSh3aGVyZSkge1xyXG4gICAgaWYoIXdoZXJlKSByZXR1cm4geyBjbWQ6IFwiXCIsIGFyZ3M6IFtdIH07XHJcbiAgICBjb25zdCB3aGVyZUluZm8gPSBoYW5kbGVXaGVyZSh3aGVyZSk7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICAgIGNtZDogYFxcblxcdCR7d2hlcmVJbmZvLmNtZH1gLFxyXG4gICAgICAgIGFyZ3M6IHdoZXJlSW5mby5hcmdzXHJcbiAgICB9O1xyXG59XHJcblxyXG4vKipcclxuICogQHBhcmFtIHthbnl9IHBhcmFtMCBcclxuICogQHJldHVybnMgXHJcbiAqL1xyXG5mdW5jdGlvbiBnZXRFeHBsaWNpdFVwZGF0ZSh7IHRhYmxlLCBjb2x1bW5zLCB3aGVyZSwgZXhwbGljaXQgfSkge1xyXG4gICAgaWYoIWV4cGxpY2l0KSByZXR1cm4geyBjbWQ6IFwiXCIsIGFyZ3M6IFwiXCIgfTtcclxuICAgIGNvbnN0IHsgdmFsdWVzIH0gPSBleHBsaWNpdDtcclxuICAgIGNvbnN0IHsgY21kOiBjbWRXaGVyZSwgYXJnczogY21kQXJncyB9ID0gZ2V0V2hlcmUod2hlcmUpO1xyXG5cclxuICAgIGNvbnN0IHNldFZhbHVlcyA9IGBcXG5cXHRcXHQke3ZhbHVlcy5tYXAoKHYsbikgPT4gYCR7Y29sdW1uc1tuXX0gPSA/YCkuam9pbignXFxuXFx0XFx0LCcpfWA7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICAgIGNtZDogYFVQREFURSAke3RhYmxlfVxcblxcdFNFVCR7c2V0VmFsdWVzfSR7Y21kV2hlcmV9YCxcclxuICAgICAgICBhcmdzOiB2YWx1ZXMuY29uY2F0KGNtZEFyZ3MpXHJcbiAgICB9XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBAcGFyYW0ge2FueX0gcGFyYW0wIFxyXG4gKiBAcmV0dXJucyBcclxuICovXHJcbmZ1bmN0aW9uIGdldEltcGxpY2l0VXBkYXRlKHsgdGFibGUsIGNvbHVtbnMsIHdoZXJlLCBpbXBsaWNpdCB9KSB7XHJcbiAgICBpZighaW1wbGljaXQpIHsgXHJcbiAgICAgICAgcmV0dXJuIHsgY21kOiBcIlwiLCBhcmdzOiBbXSB9O1xyXG4gICAgfVxyXG4gICAgY29uc3QgeyBwcmltYXJ5S2V5cywgb2JqZWN0cyB9ID0gaW1wbGljaXQ7XHJcblxyXG4gICAgLy8gaW5pdGlhbGl6ZSBhbGwgb2YgdGhlIGNhc2VzLlxyXG4gICAgbGV0IGNhc2VzID0gY29sdW1ucy5yZWR1Y2UoXHJcbiAgICAgICAgKHByZXYsIGluaXRpYWwpID0+ICh7IC4uLnByZXYsIFtpbml0aWFsXTogeyBjbWQ6ICdDQVNFXFxuXFx0XFx0JywgYXJnczogW10gfX0pLCBcclxuICAgICAgICB7fVxyXG4gICAgKTtcclxuICAgIC8vIHNldCBlYWNoIGNvbHVtbiBpbiBhIGNhc2Ugd2hlbiAoSWQgPSA/KSBzdGF0ZW1lbnQuXHJcbiAgICBmb3IgKGNvbnN0IHJlY29yZCBvZiBvYmplY3RzKSB7XHJcbiAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gcmVjb3JkKSB7XHJcbiAgICAgICAgICAgIGZvcihjb25zdCBwcmltYXJ5S2V5IG9mIHByaW1hcnlLZXlzKSB7XHJcbiAgICAgICAgICAgICAgICAvLyBpZ25vcmUgdGhlIHByaW1hcnkga2V5LCB3ZSBkb24ndCB3YW50IHRvIHNldCB0aGF0LlxyXG4gICAgICAgICAgICAgICAgaWYoa2V5ID09PSBwcmltYXJ5S2V5KSBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgIGNhc2VzW2tleV0uY21kICs9IGBcXHRXSEVOICR7cHJpbWFyeUtleX0gPSA/IFRIRU4gP1xcblxcdFxcdGA7XHJcbiAgICAgICAgICAgICAgICBjYXNlc1trZXldLmFyZ3MgPSBbLi4uY2FzZXNba2V5XS5hcmdzLCByZWNvcmRbcHJpbWFyeUtleV0sIHJlY29yZFtrZXldXTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIC8vIGZpbmlzaCBlYWNoIGNhc2UgY29tbWFuZC5cclxuICAgIE9iamVjdC5rZXlzKGNhc2VzKS5mb3JFYWNoKGsgPT4gY2FzZXNba10uY21kICs9IGBcXHRFTFNFIFxcYCR7a31cXGBcXG5cXHRcXHRFTkRgKTtcclxuXHJcbiAgICAvLyBkZWxldGUgdGhlIGNhc2VzIHRoYXQgaGF2ZSBubyBzZXRzLiAodGhpcyBjb3ZlcnMgdGhlIHByaW1hcnkga2V5IHRoYXQgd2Ugc2tpcHBlZCBhYm92ZS4pXHJcbiAgICBmb3IgKGNvbnN0IGtleSBpbiBjYXNlcykge1xyXG4gICAgICAgIGlmIChjYXNlc1trZXldLmFyZ3MubGVuZ3RoIDw9IDApIHtcclxuICAgICAgICAgICAgZGVsZXRlIGNhc2VzW2tleV07XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgY29uc3QgeyBjbWQ6IGNtZFdoZXJlLCBhcmdzOiBjbWRBcmdzIH0gPSBnZXRXaGVyZSh3aGVyZSk7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICAgIGNtZDogYFVQREFURSAke3RhYmxlfVxcblxcdFNFVFxcblxcdFxcdCR7T2JqZWN0LmtleXMoY2FzZXMpLm1hcChrID0+IGBcXGAke2t9XFxgID0gKCR7Y2FzZXNba10uY21kfSlgKS5qb2luKCcsXFxuXFx0XFx0Jyl9JHtjbWRXaGVyZX1gLFxyXG4gICAgICAgIGFyZ3M6IFsuLi5PYmplY3Qua2V5cyhjYXNlcykuZmxhdE1hcChrID0+IGNhc2VzW2tdLmFyZ3MpLCAuLi5jbWRBcmdzXVxyXG4gICAgfTtcclxufVxyXG5cclxuZXhwb3J0IGNvbnN0IGNyZWF0ZU15U3FsMlBvb2wgPSBjcmVhdGVQb29sO1xyXG4iXX0= | ||
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9pbmRleC5qcyJdLCJuYW1lcyI6WyJ4IiwiY29sdW1uIiwicmVkdWNlU3RhcnQiLCJyZWR1Y2VkIiwiY21kIiwidmFsdWUiXSwibWFwcGluZ3MiOiI7QUFDQSxTQUFTLGtCQUFrQjtBQUdwQixTQUFTLFFBQVEsWUFBWTtBQUNoQyxNQUFJO0FBQ0osU0FBTztBQUFBLElBQ0gsUUFBUTtBQUFBLE1BQ0osWUFBWSxDQUFDLFNBQVMsR0FBRyxLQUFLLGVBQWUsQ0FBQyxJQUFJLEtBQUssWUFBWSxDQUFDLElBQUksS0FBSyxXQUFXLENBQUMsSUFBSSxLQUFLLFdBQVcsSUFBSSxLQUFLLGNBQWMsQ0FBQztBQUFBLElBQ3pJO0FBQUEsSUFDQSxZQUFZO0FBQUEsTUFDUixPQUFPO0FBQUEsTUFDUCxPQUFPLENBQUMsT0FBTyxRQUFRLG9CQUFvQixLQUFLLFFBQVEsR0FBRztBQUFBLE1BQzNELEtBQUssQ0FBQyxPQUFPLFFBQVEsU0FBUyxLQUFLLFFBQVEsR0FBRztBQUFBLE1BQzlDLEtBQUssQ0FBQyxPQUFPLFFBQVEsU0FBUyxLQUFLLFFBQVEsR0FBRztBQUFBLE1BQzlDLEtBQUssQ0FBQyxPQUFPLFFBQVEsU0FBUyxLQUFLLFFBQVEsR0FBRztBQUFBLE1BQzlDLEtBQUssQ0FBQyxPQUFPLFFBQVEsU0FBUyxLQUFLLFFBQVEsR0FBRztBQUFBLElBQ2xEO0FBQUEsSUFDQSxRQUFRLE9BQU87QUFDWCxhQUFPO0FBQUEsUUFDSCxNQUFNLFNBQVMsS0FBSyxNQUFNO0FBQ3RCLGNBQUk7QUFDQSxrQkFBTSxDQUFDLE9BQU8sSUFBSSxNQUFNLFdBQVcsTUFBTSxLQUFLLElBQUk7QUFDbEQ7QUFBQTtBQUFBLGNBQTJCO0FBQUE7QUFBQSxVQUMvQixTQUFRLEtBQUs7QUFDVCxrQkFBTSx1QkFBdUIsU0FBUztBQUN0QyxrQkFBTSxZQUFZLEdBQUc7QUFBQSxVQUN6QjtBQUFBLFFBQ0o7QUFBQSxRQUNBLE1BQU0sVUFBVSxLQUFLLE1BQU07QUFDdkIsY0FBSTtBQUNB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QVUsY0FBYyxhQUFhO0FBRWpDLFlBQUcsUUFBUTtBQUFZO0FBQ3ZCLGNBQU0sR0FBRyxFQUFFLE9BQU8sU0FBVSxVQUFVO0FBQUE7QUFDdEMsY0FBTSxHQUFHLEVBQUUsT0FBTyxDQUFDLEdBQUcsTUFBTSxHQUFHLEVBQUUsTUFBTSxPQUFPLFVBQVUsR0FBRyxPQUFPLEdBQUcsQ0FBQztBQUFBLE1BQzFFO0FBQUEsSUFDSjtBQUFBLEVBQ0o7QUFFQSxTQUFPLEtBQUssS0FBSyxFQUFFLFFBQVEsT0FBSyxNQUFNLENBQUMsRUFBRSxPQUFPLFdBQVksQ0FBQztBQUFBLE1BQWE7QUFHMUUsYUFBVyxPQUFPLE9BQU87QUFDckIsUUFBSSxNQUFNLEdBQUcsRUFBRSxLQUFLLFVBQVUsR0FBRztBQUM3QixhQUFPLE1BQU0sR0FBRztBQUFBLElBQ3BCO0FBQUEsRUFDSjtBQUNBLFFBQU0sRUFBRSxLQUFLLFVBQVUsTUFBTSxRQUFRLElBQUksU0FBUyxLQUFLO0FBQ3ZELFNBQU87QUFBQSxJQUNILEtBQUssVUFBVSxLQUFLO0FBQUE7QUFBQSxJQUFnQixPQUFPLEtBQUssS0FBSyxFQUFFLElBQUksT0FBSyxLQUFLLENBQUMsU0FBUyxNQUFNLENBQUMsRUFBRSxHQUFHLEdBQUcsRUFBRSxLQUFLLE9BQVMsQ0FBQyxHQUFHLFFBQVE7QUFBQSxJQUMxSCxNQUFNLENBQUMsR0FBRyxPQUFPLEtBQUssS0FBSyxFQUFFLFFBQVEsT0FBSyxNQUFNLENBQUMsRUFBRSxJQUFJLEdBQUcsR0FBRyxPQUFPO0FBQUEsRUFDeEU7QUFDSjtBQUVPLElBQU0sbUJBQW1CIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQHRzLWNoZWNrXHJcbmltcG9ydCB7IGNyZWF0ZVBvb2wgfSBmcm9tIFwibXlzcWwyL3Byb21pc2VcIjtcclxuXHJcbi8qKiBAdHlwZSB7aW1wb3J0KCdAa2luc2hpcGpzL2NvcmUvYWRhcHRlcicpLkluaXRpYWxpemVBZGFwdGVyQ2FsbGJhY2s8aW1wb3J0KFwibXlzcWwyL3Byb21pc2VcIikuUG9vbHxpbXBvcnQoXCJteXNxbDIvcHJvbWlzZVwiKS5Db25uZWN0aW9uPn0gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIGFkYXB0ZXIoY29ubmVjdGlvbikge1xyXG4gICAgbGV0IHRyYW5zYWN0aW9uQ29ubmVjdGlvbjtcclxuICAgIHJldHVybiB7XHJcbiAgICAgICAgc3ludGF4OiB7XHJcbiAgICAgICAgICAgIGRhdGVTdHJpbmc6IChkYXRlKSA9PiBgJHtkYXRlLmdldFVUQ0Z1bGxZZWFyKCl9LSR7ZGF0ZS5nZXRVVENNb250aCgpfS0ke2RhdGUuZ2V0VVRDRGF0ZSgpfSAke2RhdGUuZ2V0VVRDSG91cnN9OiR7ZGF0ZS5nZXRVVENNaW51dGVzKCl9YFxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgYWdncmVnYXRlczoge1xyXG4gICAgICAgICAgICB0b3RhbDogXCJDT1VOVCgqKVwiLFxyXG4gICAgICAgICAgICBjb3VudDogKHRhYmxlLCBjb2wpID0+IGBDT1VOVChESVNUSU5DVCBcXGAke3RhYmxlfVxcYC5cXGAke2NvbH1cXGApYCxcclxuICAgICAgICAgICAgYXZnOiAodGFibGUsIGNvbCkgPT4gYEFWRyhcXGAke3RhYmxlfVxcYC5cXGAke2NvbH1cXGApYCxcclxuICAgICAgICAgICAgbWF4OiAodGFibGUsIGNvbCkgPT4gYE1BWChcXGAke3RhYmxlfVxcYC5cXGAke2NvbH1cXGApYCxcclxuICAgICAgICAgICAgbWluOiAodGFibGUsIGNvbCkgPT4gYE1JTihcXGAke3RhYmxlfVxcYC5cXGAke2NvbH1cXGApYCxcclxuICAgICAgICAgICAgc3VtOiAodGFibGUsIGNvbCkgPT4gYFNVTShcXGAke3RhYmxlfVxcYC5cXGAke2NvbH1cXGApYFxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgZXhlY3V0ZShzY29wZSkge1xyXG4gICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgYXN5bmMgZm9yUXVlcnkoY21kLCBhcmdzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgW3Jlc3VsdHNdID0gYXdhaXQgY29ubmVjdGlvbi5xdWVyeShjbWQsIGFyZ3MpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gLyoqIEB0eXBlIHthbnl9ICovIChyZXN1bHRzKTtcclxuICAgICAgICAgICAgICAgICAgICB9IGNhdGNoKGVycikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBhd2FpdCB0cmFuc2FjdGlvbkNvbm5lY3Rpb24/LnJvbGxiYWNrKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IGhhbmRsZUVycm9yKGVycik7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIGFzeW5jIGZvckluc2VydChjbWQsIGFyZ3MpIHtcclxuICAgICAgICAgICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBbcmVzdWx0XSA9IC8qKiBAdHlwZSB7aW1wb3J0KCdteXNxbDIvcHJvbWlzZScpLlJlc3VsdFNldEhlYWRlcltdfSAqLyAoYXdhaXQgY29ubmVjdGlvbi5leGVjdXRlKGNtZCwgYXJncykpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gQXJyYXkuZnJvbShBcnJheShyZXN1bHQuYWZmZWN0ZWRSb3dzKS5rZXlzKCkpLm1hcCgoXywgbikgPT4gbiArIHJlc3VsdC5pbnNlcnRJZCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSBjYXRjaChlcnIpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYXdhaXQgdHJhbnNhY3Rpb25Db25uZWN0aW9uPy5yb2xsYmFjaygpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBoYW5kbGVFcnJvcihlcnIpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICBhc3luYyBmb3JVcGRhdGUoY21kLCBhcmdzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgW3Jlc3VsdF0gPSAvKiogQHR5cGUge2ltcG9ydCgnbXlzcWwyL3Byb21pc2UnKS5SZXN1bHRTZXRIZWFkZXJbXX0gKi8gKGF3YWl0IGNvbm5lY3Rpb24uZXhlY3V0ZShjbWQsIGFyZ3MpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdC5hZmZlY3RlZFJvd3M7XHJcbiAgICAgICAgICAgICAgICAgICAgfSBjYXRjaChlcnIpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYXdhaXQgdHJhbnNhY3Rpb25Db25uZWN0aW9uPy5yb2xsYmFjaygpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBoYW5kbGVFcnJvcihlcnIpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICBhc3luYyBmb3JEZWxldGUoY21kLCBhcmdzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgW3Jlc3VsdF0gPSAvKiogQHR5cGUge2ltcG9ydCgnbXlzcWwyL3Byb21pc2UnKS5SZXN1bHRTZXRIZWFkZXJbXX0gKi8gKGF3YWl0IGNvbm5lY3Rpb24uZXhlY3V0ZShjbWQsIGFyZ3MpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdC5hZmZlY3RlZFJvd3M7XHJcbiAgICAgICAgICAgICAgICAgICAgfSBjYXRjaChlcnIpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYXdhaXQgdHJhbnNhY3Rpb25Db25uZWN0aW9uPy5yb2xsYmFjaygpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBoYW5kbGVFcnJvcihlcnIpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICBhc3luYyBmb3JUcnVuY2F0ZShjbWQsIGFyZ3MpIHtcclxuICAgICAgICAgICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBbcmVzdWx0XSA9IC8qKiBAdHlwZSB7aW1wb3J0KCdteXNxbDIvcHJvbWlzZScpLlJlc3VsdFNldEhlYWRlcltdfSAqLyAoYXdhaXQgY29ubmVjdGlvbi5leGVjdXRlKGNtZCwgYXJncykpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0LmFmZmVjdGVkUm93cztcclxuICAgICAgICAgICAgICAgICAgICB9IGNhdGNoKGVycikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBhd2FpdCB0cmFuc2FjdGlvbkNvbm5lY3Rpb24/LnJvbGxiYWNrKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IGhhbmRsZUVycm9yKGVycik7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIGFzeW5jIGZvckRlc2NyaWJlKGNtZCwgYXJncykge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IFtyZXN1bHRdID0gLyoqIEB0eXBlIHtpbXBvcnQoJ215c3FsMi9wcm9taXNlJykuUmVzdWx0U2V0SGVhZGVyW119ICovIChhd2FpdCBjb25uZWN0aW9uLmV4ZWN1dGUoY21kLCBhcmdzKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgLyoqIEB0eXBlIHthbnl9ICovXHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IHNldCA9IHt9XHJcbiAgICAgICAgICAgICAgICAgICAgZm9yKGNvbnN0IGZpZWxkIGluIHJlc3VsdCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgZGVmYXVsdFZhbHVlID0gZ2V0RGVmYXVsdFZhbHVlRm4ocmVzdWx0W2ZpZWxkXS5UeXBlLCByZXN1bHRbZmllbGRdLkRlZmF1bHQsIHJlc3VsdFtmaWVsZF0uRXh0cmEpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgdHlwZSA9IHJlc3VsdFtmaWVsZF0uVHlwZS50b0xvd2VyQ2FzZSgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgbG9vcFRocm91Z2hEYXRhVHlwZXM6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoY29uc3QgZGF0YVR5cGUgaW4gbXlzcWxEYXRhVHlwZXMpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcihjb25zdCBkdCBvZiBteXNxbERhdGFUeXBlc1tkYXRhVHlwZV0pIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZih0eXBlLnN0YXJ0c1dpdGgoZHQpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGUgPSBkYXRhVHlwZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgbG9vcFRocm91Z2hEYXRhVHlwZXM7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldFtmaWVsZF0gPSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWVsZDogcmVzdWx0W2ZpZWxkXS5GaWVsZCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhYmxlOiBcIlwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxpYXM6IFwiXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc1ByaW1hcnk6IHJlc3VsdFtmaWVsZF0uS2V5ID09PSBcIlBSSVwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNJZGVudGl0eTogcmVzdWx0W2ZpZWxkXS5FeHRyYS5pbmNsdWRlcyhcImF1dG9faW5jcmVtZW50XCIpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNWaXJ0dWFsOiByZXN1bHRbZmllbGRdLkV4dHJhLmluY2x1ZGVzKFwiVklSVFVBTFwiKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzTnVsbGFibGU6IHJlc3VsdFtmaWVsZF0uTnVsbCA9PT0gXCJZRVNcIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGF0eXBlOiB0eXBlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdFZhbHVlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBzZXQ7XHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgYXN5bmMgZm9yVHJhbnNhY3Rpb25CZWdpbigpIHtcclxuICAgICAgICAgICAgICAgICAgICAvL0B0cy1pZ25vcmVcclxuICAgICAgICAgICAgICAgICAgICB0cmFuc2FjdGlvbkNvbm5lY3Rpb24gPSBhd2FpdCBjb25uZWN0aW9uLmdldENvbm5lY3Rpb24oKTtcclxuICAgICAgICAgICAgICAgICAgICBhd2FpdCB0cmFuc2FjdGlvbkNvbm5lY3Rpb24uYmVnaW5UcmFuc2FjdGlvbigpO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0cmFuc2FjdGlvbkNvbm5lY3Rpb247XHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgYXN5bmMgZm9yVHJhbnNhY3Rpb25FbmQoY25uKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgdHJhbnNhY3Rpb25Db25uZWN0aW9uLmNvbW1pdCgpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgICAgICBzZXJpYWxpemUoKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICBmb3JRdWVyeShkYXRhKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2VsZWN0cyA9IGdldFNlbGVjdHMoZGF0YS5zZWxlY3QpO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGZyb20gPSBnZXRGcm9tKGRhdGEuZnJvbSwgZGF0YS5saW1pdCwgZGF0YS5vZmZzZXQpO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHdoZXJlID0gZ2V0V2hlcmUoZGF0YS53aGVyZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZ3JvdXBCeSA9IGdldEdyb3VwQnkoZGF0YS5ncm91cF9ieSk7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgb3JkZXJCeSA9IGdldE9yZGVyQnkoZGF0YS5vcmRlcl9ieSk7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbGltaXQgPSBnZXRMaW1pdChkYXRhLmxpbWl0KTtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBvZmZzZXQgPSBnZXRPZmZzZXQoZGF0YS5vZmZzZXQpO1xyXG4gICAgICAgICAgICAgICAgICAgIC8qKiBAdHlwZSB7YW55W119ICovXHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IGFyZ3MgPSBbXTtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgY21kID0gXCJcIjtcclxuICAgICAgICAgICAgICAgICAgICBpZihkYXRhLmZyb20ubGVuZ3RoID4gMSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjbWQgPSBgU0VMRUNUICR7c2VsZWN0cy5jbWR9XFxuXFx0RlJPTSAke2Zyb20uY21kfSR7d2hlcmUuY21kfSR7Z3JvdXBCeS5jbWR9JHtvcmRlckJ5LmNtZH1gO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAvKiogQHR5cGUge2FueVtdfSAqL1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBhcmdzID0gYXJncy5jb25jYXQoLi4uW1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0cy5hcmdzLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJvbS5hcmdzLCBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoZXJlLmFyZ3MsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBncm91cEJ5LmFyZ3MsIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JkZXJCeS5hcmdzXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIF0pO1xyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNtZCA9IGBTRUxFQ1QgJHtzZWxlY3RzLmNtZH1cXG5cXHRGUk9NICR7ZnJvbS5jbWR9JHt3aGVyZS5jbWR9JHtsaW1pdC5jbWR9JHtvZmZzZXQuY21kfSR7Z3JvdXBCeS5jbWR9JHtvcmRlckJ5LmNtZH1gO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBhcmdzID0gYXJncy5jb25jYXQoLi4uW1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0cy5hcmdzLCBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyb20uYXJncywgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGVyZS5hcmdzLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGltaXQuYXJncywgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvZmZzZXQuYXJncywgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBncm91cEJ5LmFyZ3MsIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JkZXJCeS5hcmdzXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIF0pO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNtZCwgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3NcclxuICAgICAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIGZvckluc2VydChkYXRhKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IGNtZCA9IFwiXCI7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IGFyZ3MgPSBbXTtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCB7IHRhYmxlLCBjb2x1bW5zLCB2YWx1ZXMgfSA9IGRhdGE7XHJcbiAgICAgICAgICAgICAgICAgICAgYXJncyA9IHZhbHVlcy5mbGF0KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgY21kICs9IGBJTlNFUlQgSU5UTyAke3RhYmxlfSAoJHtjb2x1bW5zLmpvaW4oJywgJyl9KVxcblxcdFZBTFVFU1xcblxcdFxcdCR7dmFsdWVzLmZsYXRNYXAodiA9PiBgKCR7QXJyYXkuZnJvbShBcnJheSh2Lmxlbmd0aCkua2V5cygpKS5tYXAoXyA9PiAnPycpfSlgKS5qb2luKCdcXG5cXHRcXHQsJyl9YDtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4geyBjbWQ6IGNtZCwgYXJnczogYXJncyB9O1xyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIGZvclVwZGF0ZShkYXRhKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgeyB0YWJsZSwgY29sdW1ucywgd2hlcmUsIGV4cGxpY2l0LCBpbXBsaWNpdCB9ID0gZGF0YTtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCB7IGNtZDogZXhwbGljaXRDbWQsIGFyZ3M6IGV4cGxpY2l0QXJncyB9ID0gZ2V0RXhwbGljaXRVcGRhdGUoeyB0YWJsZSwgY29sdW1ucywgd2hlcmUsIGV4cGxpY2l0IH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHsgY21kOiBpbXBsaWNpdENtZCwgYXJnczogaW1wbGljaXRBcmdzIH0gPSBnZXRJbXBsaWNpdFVwZGF0ZSh7IHRhYmxlLCBjb2x1bW5zLCB3aGVyZSwgaW1wbGljaXQgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNtZDogZXhwbGljaXRDbWQgIT09ICcnID8gZXhwbGljaXRDbWQgOiBpbXBsaWNpdENtZCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgYXJnczogZXhwbGljaXRDbWQgIT09ICcnID8gZXhwbGljaXRBcmdzIDogaW1wbGljaXRBcmdzXHJcbiAgICAgICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICBmb3JEZWxldGUoZGF0YSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHsgdGFibGUsIHdoZXJlIH0gPSBkYXRhO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHsgY21kLCBhcmdzIH0gPSBoYW5kbGVXaGVyZSh3aGVyZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsgY21kOiBgREVMRVRFIEZST00gJHt0YWJsZX0gJHtjbWR9YCwgYXJncyB9O1xyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIGZvclRydW5jYXRlKGRhdGEpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4geyBjbWQ6IGBUUlVOQ0FURSAke2RhdGEudGFibGV9YCwgYXJnczogW10gfTtcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICBmb3JEZXNjcmliZSh0YWJsZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB7IGNtZDogYERFU0NSSUJFICR7dGFibGV9O2AsIGFyZ3M6IFtdIH07XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBcclxuICogQHBhcmFtIHtFcnJvcn0gb3JpZ2luYWxFcnJvciBcclxuICogQHJldHVybnMge0Vycm9yfVxyXG4gKi9cclxuZnVuY3Rpb24gaGFuZGxlRXJyb3Iob3JpZ2luYWxFcnJvcikge1xyXG4gICAgcmV0dXJuIG9yaWdpbmFsRXJyb3I7XHJcbn1cclxuXHJcbi8vIFVzZSB7c3RyaW5nVG9DaGVja30uc3RhcnRzV2l0aCh7ZGF0YVR5cGV9KSB3aGVyZSB7ZGF0YVR5cGV9IGlzIG9uZSBvZiB0aGUgZGF0YSB0eXBlcyBpbiB0aGUgYXJyYXkgZm9yIHRoZSByZXNwZWN0aXZlIGRhdGEgdHlwZSB1c2VkIGluIEtpbnNoaXAuXHJcbi8vIGUuZy4sIGxldCBkZXRlcm1pbmVkRGF0YVR5cGUgPSBteXNxbERhdGFUeXBlcy5zdHJpbmcuZmlsdGVyKGR0ID0+IHMuc3RhcnRzV2l0aChkdCkpLmxlbmd0aCA+IDAgPyBcInN0cmluZ1wiIDogLi4uXHJcbmNvbnN0IG15c3FsRGF0YVR5cGVzID0ge1xyXG4gICAgc3RyaW5nOiBbXHJcbiAgICAgICAgXCJjaGFyXCIsIFwidmFyY2hhclwiLCBcclxuICAgICAgICBcImJpbmFyeVwiLCBcInZhcmJpbmFyeVwiLFxyXG4gICAgICAgIFwidGlueWJsb2JcIiwgXCJtZWRpdW1ibG9iXCIsIFwibG9uZ2Jsb2JcIiwgXCJibG9iXCIsXHJcbiAgICAgICAgXCJ0aW55dGV4dFwiLCBcIm1lZGl1bXRleHRcIiwgXCJsb25ndGV4dFwiLCBcInRleHRcIixcclxuICAgICAgICBcImVudW1cIixcclxuICAgICAgICBcInNldFwiXHJcbiAgICBdLFxyXG4gICAgaW50OiBbXHJcbiAgICAgICAgXCJ0aW55aW50XCIsIFwic21hbGxpbnRcIiwgXCJtZWRpdW1pbnRcIiwgXCJiaWdpbnRcIiwgXCJpbnRcIixcclxuICAgIF0sXHJcbiAgICBmbG9hdDogW1xyXG4gICAgICAgIFwiZmxvYXRcIixcclxuICAgICAgICBcImRvdWJsZVwiLFxyXG4gICAgICAgIFwiZGVjaW1hbFwiLFxyXG4gICAgICAgIFwiZGVjXCJcclxuICAgIF0sXHJcbiAgICBib29sZWFuOiBbXHJcbiAgICAgICAgXCJiaXQoMSlcIixcclxuICAgICAgICBcImJvb2xcIixcclxuICAgICAgICBcImJvb2xlYW5cIlxyXG4gICAgXSxcclxuICAgIGRhdGU6IFtcclxuICAgICAgICBcImRhdGVcIixcclxuICAgICAgICBcInRpbWVcIixcclxuICAgICAgICBcInllYXJcIlxyXG4gICAgXVxyXG59O1xyXG5cclxuZnVuY3Rpb24gaGFuZGxlV2hlcmUoY29uZGl0aW9ucywgdGFibGU9XCJcIiwgc2FuaXRpemU9KG4pID0+IGA/YCkge1xyXG4gICAgaWYoIWNvbmRpdGlvbnMpIHJldHVybiB7IGNtZDogJycsIGFyZ3M6IFtdIH07XHJcbiAgICBsZXQgYXJncyA9IFtdO1xyXG5cclxuICAgIC8vIGZ1bmN0aW9uIHRvIGZpbHRlciBvdXQgY29uZGl0aW9ucyB0aGF0IGRvIG5vdCBiZWxvbmcgdG8gdGFibGUuXHJcbiAgICAvLyAodGhpcyBtdXN0IGJlIGEgbWFwLCBhcyBpZiBpdCB3YXMganVzdCBmaWx0ZXIgYmVpbmcgdXNlZCwgdGhlbiBpdCB3b3VsZCByZW1vdmUgYW4gZW50aXJlIHN1YmFycmF5LCB3aGVuIG1heWJlIHRoYXQgYXJyYXkgaGFzIGNvbmRpdGlvbnMpXHJcbiAgICBjb25zdCBtYXBGaWx0ZXIgPSAoeCkgPT4ge1xyXG4gICAgICAgIGlmKEFycmF5LmlzQXJyYXkoeCkpIHtcclxuICAgICAgICAgICAgY29uc3QgZmlsdGVyZWQgPSB4Lm1hcChtYXBGaWx0ZXIpLmZpbHRlcih4ID0+IHggIT09IHVuZGVmaW5lZCk7XHJcbiAgICAgICAgICAgIHJldHVybiBmaWx0ZXJlZC5sZW5ndGggPiAwID8gZmlsdGVyZWQgOiB1bmRlZmluZWQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmKHgudGFibGUuaW5jbHVkZXModGFibGUpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB4O1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIGZ1bmN0aW9uIHRvIHJlZHVjZSBlYWNoIGNvbmRpdGlvbiB0byBvbmUgYXBwcm9wcmlhdGUgY2xhdXNlIHN0cmluZy5cclxuICAgIGNvbnN0IHJlZHVjZSA9IChwcmV2U3RyLCBjb25kLCBkZXB0aD0wKSA9PiB7XHJcbiAgICAgICAgY29uc3QgdGFicyA9IEFycmF5LmZyb20oQXJyYXkoZGVwdGggKyAyKS5rZXlzKCkpLm1hcChfID0+IGBcXHRgKS5qb2luKCcnKTtcclxuICAgICAgICBcclxuICAgICAgICAvLyBuZXN0ZWQgY29uZGl0aW9uc1xyXG4gICAgICAgIGlmKEFycmF5LmlzQXJyYXkoY29uZCkpIHtcclxuICAgICAgICAgICAgY29uc3QgW25leHRDb25kLCAuLi5yZW1haW5kZXJdID0gY29uZDtcclxuXHJcbiAgICAgICAgICAgIC8vIGVkZ2UgY2FzZTogQkVUV0VFTiBvcGVyYXRvci5cclxuICAgICAgICAgICAgaWYobmV4dENvbmQub3BlcmF0b3IgPT09IFwiQkVUV0VFTlwiKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBjb2x1bW4gPSBgXFxgJHtuZXh0Q29uZC50YWJsZX1cXGAuXFxgJHtuZXh0Q29uZC5wcm9wZXJ0eX1cXGBgO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgbG93ZXJCb3VuZCA9IHNhbml0aXplKGFyZ3MubGVuZ3RoKTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHVwcGVyQm91bmQgPSBzYW5pdGl6ZShhcmdzLmxlbmd0aCsxKTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHJlZHVjZVN0YXJ0ID0gYCR7bmV4dENvbmQuY2hhaW59ICgke2NvbHVtbn0gJHtuZXh0Q29uZC5vcGVyYXRvcn0gJHtsb3dlckJvdW5kfSBBTkQgJHt1cHBlckJvdW5kfWA7XHJcbiAgICAgICAgICAgICAgICBjb25zdCByZWR1Y2VkID0gcmVtYWluZGVyLnJlZHVjZSgoYSwgYikgPT4gcmVkdWNlKGEsIGIsIGRlcHRoICsgMSksIHJlZHVjZVN0YXJ0KTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGNtZCA9IGAke3ByZXZTdHJ9ICR7cmVkdWNlZH0pXFxuJHt0YWJzfWA7XHJcbiAgICAgICAgICAgICAgICBhcmdzID0gYXJncy5jb25jYXQobmV4dENvbmQudmFsdWUpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGNtZDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBsZXQgdmFsdWU7XHJcbiAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KG5leHRDb25kLnZhbHVlKSkge1xyXG4gICAgICAgICAgICAgICAgYXJncyA9IGFyZ3MuY29uY2F0KG5leHRDb25kLnZhbHVlKTtcclxuICAgICAgICAgICAgICAgIHZhbHVlID0gYCgke25leHRDb25kLnZhbHVlLm1hcCgoXyxuKSA9PiBzYW5pdGl6ZShhcmdzLmxlbmd0aCtuKSkuam9pbignLCcpfSlgO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgYXJncy5wdXNoKG5leHRDb25kLnZhbHVlKTtcclxuICAgICAgICAgICAgICAgIHZhbHVlID0gc2FuaXRpemUoYXJncy5sZW5ndGgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNvbnN0IGNvbHVtbiA9IGBcXGAke25leHRDb25kLnRhYmxlfVxcYC5cXGAke25leHRDb25kLnByb3BlcnR5fVxcYGA7XHJcbiAgICAgICAgICAgIGNvbnN0IHJlZHVjZVN0YXJ0ID0gYCR7bmV4dENvbmQuY2hhaW59ICgke2NvbHVtbn0gJHtuZXh0Q29uZC5vcGVyYXRvcn0gJHt2YWx1ZX1gO1xyXG4gICAgICAgICAgICBjb25zdCByZWR1Y2VkID0gcmVtYWluZGVyLnJlZHVjZSgoYSwgYikgPT4ge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlZHVjZShhLCBiLCBkZXB0aCArIDEpO1xyXG4gICAgICAgICAgICB9LCByZWR1Y2VTdGFydCk7XHJcbiAgICAgICAgICAgIGNvbnN0IGNtZCA9IGAke3ByZXZTdHJ9ICR7cmVkdWNlZH0pXFxuJHt0YWJzfWA7XHJcbiAgICAgICAgICAgIHJldHVybiBjbWQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIFxyXG4gICAgICAgIC8vIGVkZ2UgY2FzZTogQkVUV0VFTiBvcGVyYXRvci5cclxuICAgICAgICBpZihjb25kLm9wZXJhdG9yID09PSBcIkJFVFdFRU5cIikge1xyXG4gICAgICAgICAgICBjb25zdCBjb2x1bW4gPSBgXFxgJHtjb25kLnRhYmxlfVxcYC5cXGAke2NvbmQucHJvcGVydHl9XFxgYDtcclxuICAgICAgICAgICAgY29uc3QgbG93ZXJCb3VuZCA9IHNhbml0aXplKGFyZ3MubGVuZ3RoKTtcclxuICAgICAgICAgICAgY29uc3QgdXBwZXJCb3VuZCA9IHNhbml0aXplKGFyZ3MubGVuZ3RoKzEpO1xyXG4gICAgICAgICAgICBjb25zdCBjbWQgPSBwcmV2U3RyICsgYCR7Y29uZC5jaGFpbn0gJHtjb2x1bW59ICR7Y29uZC5vcGVyYXRvcn0gJHtsb3dlckJvdW5kfSBBTkQgJHt1cHBlckJvdW5kfVxcbiR7dGFic31gO1xyXG4gICAgICAgICAgICBhcmdzID0gYXJncy5jb25jYXQoY29uZC52YWx1ZSk7XHJcbiAgICAgICAgICAgIHJldHVybiBjbWQ7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBzaW5nbGUgY29uZGl0aW9uLlxyXG4gICAgICAgIGxldCB2YWx1ZTtcclxuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShjb25kLnZhbHVlKSkge1xyXG4gICAgICAgICAgICBhcmdzID0gYXJncy5jb25jYXQoY29uZC52YWx1ZSk7XHJcbiAgICAgICAgICAgIHZhbHVlID0gYCgke2NvbmQudmFsdWUubWFwKChfLCBuKSA9PiBzYW5pdGl6ZShhcmdzLmxlbmd0aCArIG4pKS5qb2luKCcsJyl9KWA7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgYXJncy5wdXNoKGNvbmQudmFsdWUpO1xyXG4gICAgICAgICAgICB2YWx1ZSA9IHNhbml0aXplKGFyZ3MubGVuZ3RoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgY29sdW1uID0gYFxcYCR7Y29uZC50YWJsZX1cXGAuXFxgJHtjb25kLnByb3BlcnR5fVxcYGA7XHJcbiAgICAgICAgY29uc3QgY21kID0gcHJldlN0ciArIGAke2NvbmQuY2hhaW59ICR7Y29sdW1ufSAke2NvbmQub3BlcmF0b3J9ICR7dmFsdWV9XFxuJHt0YWJzfWA7XHJcbiAgICAgICAgcmV0dXJuIGNtZDtcclxuICAgIH07XHJcbiAgICBcclxuICAgIC8vIG1hcCB0aGUgYXJyYXksIGZpbHRlciBvdXQgdW5kZWZpbmVkcywgdGhlbiByZWR1Y2UgdGhlIGFycmF5IHRvIGdldCB0aGUgY2xhdXNlLlxyXG4gICAgLyoqIEB0eXBlIHtzdHJpbmd9ICovXHJcbiAgICBjb25zdCByZWR1Y2VkID0gY29uZGl0aW9ucy5tYXAobWFwRmlsdGVyKS5maWx0ZXIoeCA9PiB4ICE9PSB1bmRlZmluZWQpLnJlZHVjZShyZWR1Y2UsICcnKTtcclxuICAgIHJldHVybiB7XHJcbiAgICAgICAgLy8gaWYgYSBmaWx0ZXIgdG9vayBwbGFjZSwgdGhlbiB0aGUgV0hFUkUgc3RhdGVtZW50IG9mIHRoZSBjbGF1c2UgbWF5IG5vdCBiZSB0aGVyZSwgc28gd2UgcmVwbGFjZS5cclxuICAgICAgICBjbWQ6IHJlZHVjZWQuc3RhcnRzV2l0aChcIldIRVJFXCIpIFxyXG4gICAgICAgICAgICA/IHJlZHVjZWQudHJpbUVuZCgpXHJcbiAgICAgICAgICAgIDogcmVkdWNlZC5zdGFydHNXaXRoKFwiQU5EXCIpIFxyXG4gICAgICAgICAgICAgICAgPyByZWR1Y2VkLnJlcGxhY2UoXCJBTkRcIiwgXCJXSEVSRVwiKS50cmltRW5kKCkgXHJcbiAgICAgICAgICAgICAgICA6IHJlZHVjZWQucmVwbGFjZShcIk9SXCIsIFwiV0hFUkVcIikudHJpbUVuZCgpLFxyXG4gICAgICAgIC8vIGFyZ3VtZW50cyB3YXMgYnVpbHQgaW5zaWRlIHRoZSByZWR1Y2UgZnVuY3Rpb24uXHJcbiAgICAgICAgYXJnc1xyXG4gICAgfTtcclxufVxyXG5cclxuZnVuY3Rpb24gZ2V0RGVmYXVsdFZhbHVlRm4odHlwZSwgZGVmYXVsdFZhbHVlLCBleHRyYSkge1xyXG4gICAgaWYoZXh0cmEuaW5jbHVkZXMoXCJERUZBVUxUX0dFTkVSQVRFRFwiKSkge1xyXG4gICAgICAgIHN3aXRjaChkZWZhdWx0VmFsdWUpIHtcclxuICAgICAgICAgICAgY2FzZSBcIkNVUlJFTlRfVElNRVNUQU1QXCI6IHtcclxuICAgICAgICAgICAgICAgIHJldHVybiAoKSA9PiBuZXcgRGF0ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGlmKGRlZmF1bHRWYWx1ZSAhPT0gbnVsbCkge1xyXG4gICAgICAgIGlmKHR5cGUuaW5jbHVkZXMoXCJ0aW55aW50XCIpKSB7XHJcbiAgICAgICAgICAgIGRlZmF1bHRWYWx1ZSA9IHBhcnNlSW50KGRlZmF1bHRWYWx1ZSkgPT09IDE7XHJcbiAgICAgICAgfSBlbHNlIGlmKHR5cGUuaW5jbHVkZXMoXCJiaWdpbnRcIikpIHtcclxuICAgICAgICAgICAgZGVmYXVsdFZhbHVlID0gQmlnSW50KGRlZmF1bHRWYWx1ZSk7XHJcbiAgICAgICAgfSBlbHNlIGlmKHR5cGUuaW5jbHVkZXMoXCJkb3VibGVcIikpIHtcclxuICAgICAgICAgICAgZGVmYXVsdFZhbHVlID0gcGFyc2VGbG9hdChkZWZhdWx0VmFsdWUpO1xyXG4gICAgICAgIH0gZWxzZSBpZih0eXBlLmluY2x1ZGVzKFwiZGF0ZVwiKSkge1xyXG4gICAgICAgICAgICBkZWZhdWx0VmFsdWUgPSBEYXRlLnBhcnNlKGRlZmF1bHRWYWx1ZSk7XHJcbiAgICAgICAgfSBlbHNlIGlmKHR5cGUuaW5jbHVkZXMoXCJpbnRcIikpIHtcclxuICAgICAgICAgICAgZGVmYXVsdFZhbHVlID0gcGFyc2VJbnQoZGVmYXVsdFZhbHVlKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gKCkgPT4gZGVmYXVsdFZhbHVlO1xyXG59XHJcblxyXG5mdW5jdGlvbiBnZXRTZWxlY3RzKHNlbGVjdCkge1xyXG4gICAgY29uc3QgY29scyA9IHNlbGVjdC5tYXAocHJvcCA9PiB7XHJcbiAgICAgICAgaWYocHJvcC5hbGlhcyA9PT0gJycpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGBgO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZighKFwiYWdncmVnYXRlXCIgaW4gcHJvcCkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGBcXGAke3Byb3AudGFibGV9XFxgLlxcYCR7cHJvcC5jb2x1bW59XFxgIEFTIFxcYCR7cHJvcC5hbGlhc31cXGBgO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gYCR7cHJvcC5jb2x1bW59IEFTIFxcYCR7cHJvcC5hbGlhc31cXGBgO1xyXG4gICAgfSkuam9pbignXFxuXFx0XFx0LCcpO1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgICBjbWQ6IGAke2NvbHN9YCxcclxuICAgICAgICBhcmdzOiBbXVxyXG4gICAgfTtcclxufVxyXG5cclxuZnVuY3Rpb24gZ2V0TGltaXQobGltaXQpIHtcclxuICAgIGlmKCFsaW1pdCkgcmV0dXJuIHsgY21kOiBcIlwiLCBhcmdzOiBbXSB9O1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgICBjbWQ6IGBcXG5cXHRMSU1JVCA/YCxcclxuICAgICAgICBhcmdzOiBbbGltaXRdXHJcbiAgICB9O1xyXG59XHJcblxyXG5mdW5jdGlvbiBnZXRPZmZzZXQob2Zmc2V0KSB7XHJcbiAgICBpZighb2Zmc2V0KSByZXR1cm4geyBjbWQ6IFwiXCIsIGFyZ3M6IFtdIH07XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICAgIGNtZDogYFxcblxcdE9GRlNFVCA/YCxcclxuICAgICAgICBhcmdzOiBbb2Zmc2V0XVxyXG4gICAgfTtcclxufVxyXG5cclxuZnVuY3Rpb24gZ2V0RnJvbShmcm9tLCBsaW1pdCwgb2Zmc2V0KSB7XHJcbiAgICBsZXQgY21kID0gXCJcIjtcclxuICAgIGxldCBhcmdzID0gW107XHJcbiAgICBpZihmcm9tLmxlbmd0aCA+IDEpIHtcclxuICAgICAgICBjb25zdCBqb2luaW5nVGFibGVzID0gW107XHJcbiAgICAgICAgY29uc3QgW21haW4sIC4uLmpvaW5zXSA9IGZyb207XHJcbiAgICAgICAgaWYobGltaXQpIHtcclxuICAgICAgICAgICAgY29uc3QgbGltaXRDbWQgPSBnZXRMaW1pdChsaW1pdCk7XHJcbiAgICAgICAgICAgIGNvbnN0IG9mZnNldENtZCA9IGdldE9mZnNldChvZmZzZXQpO1xyXG4gICAgICAgICAgICBjb25zdCBtYWluU3ViUXVlcnkgPSBgKFNFTEVDVCAqIEZST00gXFxgJHttYWluLnJlYWxOYW1lfVxcYCAke2xpbWl0Q21kLmNtZH0gJHtvZmZzZXRDbWQuY21kfSkgQVMgXFxgJHttYWluLmFsaWFzfVxcYGA7XHJcbiAgICAgICAgICAgIGFyZ3MgPSBhcmdzLmNvbmNhdChsaW1pdENtZC5hcmdzLCBvZmZzZXRDbWQuYXJncyk7XHJcbiAgICAgICAgICAgIGpvaW5pbmdUYWJsZXMucHVzaChtYWluU3ViUXVlcnkpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGpvaW5pbmdUYWJsZXMucHVzaChgXFxgJHttYWluLnJlYWxOYW1lfVxcYCBBUyBcXGAke21haW4uYWxpYXN9XFxgYCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjbWQgPSBqb2luaW5nVGFibGVzLmNvbmNhdChqb2lucy5tYXAodGFibGUgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBuYW1lQW5kQWxpYXMgPSBgXFxgJHt0YWJsZS5yZWFsTmFtZX1cXGAgQVMgXFxgJHt0YWJsZS5hbGlhc31cXGBgO1xyXG4gICAgICAgICAgICBjb25zdCBvblJlZmVyZXJLZXkgPSBgXFxgJHt0YWJsZS5yZWZlcmVyVGFibGVLZXkudGFibGV9XFxgLlxcYCR7dGFibGUucmVmZXJlclRhYmxlS2V5LmNvbHVtbn1cXGBgO1xyXG4gICAgICAgICAgICBjb25zdCBvblJlZmVyZW5jZUtleSA9IGBcXGAke3RhYmxlLnJlZmVyZW5jZVRhYmxlS2V5LnRhYmxlfVxcYC5cXGAke3RhYmxlLnJlZmVyZW5jZVRhYmxlS2V5LmNvbHVtbn1cXGBgO1xyXG4gICAgICAgICAgICByZXR1cm4gYCR7bmFtZUFuZEFsaWFzfVxcblxcdFxcdFxcdE9OICR7b25SZWZlcmVyS2V5fSA9ICR7b25SZWZlcmVuY2VLZXl9YDtcclxuICAgICAgICB9KSkuam9pbignXFxuXFx0XFx0TEVGVCBKT0lOJyk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAgIGNtZCA9IGBcXGAke2Zyb21bMF0ucmVhbE5hbWV9XFxgIEFTIFxcYCR7ZnJvbVswXS5hbGlhc31cXGBgXHJcbiAgICB9XHJcbiAgICByZXR1cm4geyBjbWQsIGFyZ3MgfTtcclxufVxyXG5cclxuZnVuY3Rpb24gZ2V0R3JvdXBCeShncm91cF9ieSkge1xyXG4gICAgaWYoIWdyb3VwX2J5KSByZXR1cm4geyBjbWQ6IFwiXCIsIGFyZ3M6IFtdIH07XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICAgIGNtZDogJ1xcblxcdEdST1VQIEJZICcgKyBncm91cF9ieS5tYXAocHJvcCA9PiBgXFxgJHtwcm9wLmFsaWFzfVxcYGApLmpvaW4oJ1xcblxcdFxcdCwnKSxcclxuICAgICAgICBhcmdzOiBbXVxyXG4gICAgfTtcclxufVxyXG5cclxuZnVuY3Rpb24gZ2V0T3JkZXJCeShvcmRlcl9ieSkge1xyXG4gICAgaWYoIW9yZGVyX2J5KSByZXR1cm4geyBjbWQ6IFwiXCIsIGFyZ3M6IFtdIH07XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICAgIGNtZDogJ1xcblxcdE9SREVSIEJZICcgKyBvcmRlcl9ieS5tYXAocHJvcCA9PiBwcm9wLmFsaWFzKS5qb2luKCdcXG5cXHRcXHQsJyksXHJcbiAgICAgICAgYXJnczogW11cclxuICAgIH07XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGdldFdoZXJlKHdoZXJlKSB7XHJcbiAgICBpZighd2hlcmUpIHJldHVybiB7IGNtZDogXCJcIiwgYXJnczogW10gfTtcclxuICAgIGNvbnN0IHdoZXJlSW5mbyA9IGhhbmRsZVdoZXJlKHdoZXJlKTtcclxuICAgIHJldHVybiB7XHJcbiAgICAgICAgY21kOiBgXFxuXFx0JHt3aGVyZUluZm8uY21kfWAsXHJcbiAgICAgICAgYXJnczogd2hlcmVJbmZvLmFyZ3NcclxuICAgIH07XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBAcGFyYW0ge2FueX0gcGFyYW0wIFxyXG4gKiBAcmV0dXJucyBcclxuICovXHJcbmZ1bmN0aW9uIGdldEV4cGxpY2l0VXBkYXRlKHsgdGFibGUsIGNvbHVtbnMsIHdoZXJlLCBleHBsaWNpdCB9KSB7XHJcbiAgICBpZighZXhwbGljaXQpIHJldHVybiB7IGNtZDogXCJcIiwgYXJnczogXCJcIiB9O1xyXG4gICAgY29uc3QgeyB2YWx1ZXMgfSA9IGV4cGxpY2l0O1xyXG4gICAgY29uc3QgeyBjbWQ6IGNtZFdoZXJlLCBhcmdzOiBjbWRBcmdzIH0gPSBnZXRXaGVyZSh3aGVyZSk7XHJcblxyXG4gICAgY29uc3Qgc2V0VmFsdWVzID0gYFxcblxcdFxcdCR7dmFsdWVzLm1hcCgodixuKSA9PiBgJHtjb2x1bW5zW25dfSA9ID9gKS5qb2luKCdcXG5cXHRcXHQsJyl9YDtcclxuICAgIHJldHVybiB7XHJcbiAgICAgICAgY21kOiBgVVBEQVRFICR7dGFibGV9XFxuXFx0U0VUJHtzZXRWYWx1ZXN9JHtjbWRXaGVyZX1gLFxyXG4gICAgICAgIGFyZ3M6IHZhbHVlcy5jb25jYXQoY21kQXJncylcclxuICAgIH1cclxufVxyXG5cclxuLyoqXHJcbiAqIEBwYXJhbSB7YW55fSBwYXJhbTAgXHJcbiAqIEByZXR1cm5zIFxyXG4gKi9cclxuZnVuY3Rpb24gZ2V0SW1wbGljaXRVcGRhdGUoeyB0YWJsZSwgY29sdW1ucywgd2hlcmUsIGltcGxpY2l0IH0pIHtcclxuICAgIGlmKCFpbXBsaWNpdCkgeyBcclxuICAgICAgICByZXR1cm4geyBjbWQ6IFwiXCIsIGFyZ3M6IFtdIH07XHJcbiAgICB9XHJcbiAgICBjb25zdCB7IHByaW1hcnlLZXlzLCBvYmplY3RzIH0gPSBpbXBsaWNpdDtcclxuXHJcbiAgICAvLyBpbml0aWFsaXplIGFsbCBvZiB0aGUgY2FzZXMuXHJcbiAgICBsZXQgY2FzZXMgPSBjb2x1bW5zLnJlZHVjZShcclxuICAgICAgICAocHJldiwgaW5pdGlhbCkgPT4gKHsgLi4ucHJldiwgW2luaXRpYWxdOiB7IGNtZDogJ0NBU0VcXG5cXHRcXHQnLCBhcmdzOiBbXSB9fSksIFxyXG4gICAgICAgIHt9XHJcbiAgICApO1xyXG4gICAgLy8gc2V0IGVhY2ggY29sdW1uIGluIGEgY2FzZSB3aGVuIChJZCA9ID8pIHN0YXRlbWVudC5cclxuICAgIGZvciAoY29uc3QgcmVjb3JkIG9mIG9iamVjdHMpIHtcclxuICAgICAgICBmb3IgKGNvbnN0IGtleSBpbiByZWNvcmQpIHtcclxuICAgICAgICAgICAgZm9yKGNvbnN0IHByaW1hcnlLZXkgb2YgcHJpbWFyeUtleXMpIHtcclxuICAgICAgICAgICAgICAgIC8vIGlnbm9yZSB0aGUgcHJpbWFyeSBrZXksIHdlIGRvbid0IHdhbnQgdG8gc2V0IHRoYXQuXHJcbiAgICAgICAgICAgICAgICBpZihrZXkgPT09IHByaW1hcnlLZXkpIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgICAgY2FzZXNba2V5XS5jbWQgKz0gYFxcdFdIRU4gJHtwcmltYXJ5S2V5fSA9ID8gVEhFTiA/XFxuXFx0XFx0YDtcclxuICAgICAgICAgICAgICAgIGNhc2VzW2tleV0uYXJncyA9IFsuLi5jYXNlc1trZXldLmFyZ3MsIHJlY29yZFtwcmltYXJ5S2V5XSwgcmVjb3JkW2tleV1dO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgLy8gZmluaXNoIGVhY2ggY2FzZSBjb21tYW5kLlxyXG4gICAgT2JqZWN0LmtleXMoY2FzZXMpLmZvckVhY2goayA9PiBjYXNlc1trXS5jbWQgKz0gYFxcdEVMU0UgXFxgJHtrfVxcYFxcblxcdFxcdEVORGApO1xyXG5cclxuICAgIC8vIGRlbGV0ZSB0aGUgY2FzZXMgdGhhdCBoYXZlIG5vIHNldHMuICh0aGlzIGNvdmVycyB0aGUgcHJpbWFyeSBrZXkgdGhhdCB3ZSBza2lwcGVkIGFib3ZlLilcclxuICAgIGZvciAoY29uc3Qga2V5IGluIGNhc2VzKSB7XHJcbiAgICAgICAgaWYgKGNhc2VzW2tleV0uYXJncy5sZW5ndGggPD0gMCkge1xyXG4gICAgICAgICAgICBkZWxldGUgY2FzZXNba2V5XTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBjb25zdCB7IGNtZDogY21kV2hlcmUsIGFyZ3M6IGNtZEFyZ3MgfSA9IGdldFdoZXJlKHdoZXJlKTtcclxuICAgIHJldHVybiB7XHJcbiAgICAgICAgY21kOiBgVVBEQVRFICR7dGFibGV9XFxuXFx0U0VUXFxuXFx0XFx0JHtPYmplY3Qua2V5cyhjYXNlcykubWFwKGsgPT4gYFxcYCR7a31cXGAgPSAoJHtjYXNlc1trXS5jbWR9KWApLmpvaW4oJyxcXG5cXHRcXHQnKX0ke2NtZFdoZXJlfWAsXHJcbiAgICAgICAgYXJnczogWy4uLk9iamVjdC5rZXlzKGNhc2VzKS5mbGF0TWFwKGsgPT4gY2FzZXNba10uYXJncyksIC4uLmNtZEFyZ3NdXHJcbiAgICB9O1xyXG59XHJcblxyXG5leHBvcnQgY29uc3QgY3JlYXRlTXlTcWwyUG9vbCA9IGNyZWF0ZVBvb2w7XHJcbiJdfQ== |
{ | ||
"name": "@kinshipjs/mysql2", | ||
"version": "0.0.5-development", | ||
"version": "0.0.6-development", | ||
"homepage": "https://github.com/kinshipjs/adapter-mysql", | ||
@@ -5,0 +5,0 @@ "repository": { |
61201