nextlove 2.19.0 → 2.20.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
|
@@ -818,6 +818,12 @@ You can also define "securityObjects" this way, if you want to make the endpoint
|
|
|
818
818
|
)) {
|
|
819
819
|
globalSchemas[schemaName] = generateSchema(zodSchema);
|
|
820
820
|
}
|
|
821
|
+
for (const [key, value] of Object.entries(globalSchemas)) {
|
|
822
|
+
if (key === "batch") {
|
|
823
|
+
const schemaWithReferences = embedSchemaReferences(value, globalSchemas);
|
|
824
|
+
globalSchemas[key] = schemaWithReferences;
|
|
825
|
+
}
|
|
826
|
+
}
|
|
821
827
|
const builder = OpenApiBuilder.create({
|
|
822
828
|
openapi: "3.0.0",
|
|
823
829
|
info: {
|
|
@@ -1565,4 +1571,4 @@ export {
|
|
|
1565
1571
|
generateOpenAPI,
|
|
1566
1572
|
generateRouteTypes
|
|
1567
1573
|
};
|
|
1568
|
-
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vc3JjL2dlbmVyYXRvcnMvaW5kZXgudHMiLCAiLi4vLi4vc3JjL2dlbmVyYXRvcnMvZ2VuZXJhdGUtb3BlbmFwaS9pbmRleC50cyIsICIuLi8uLi9zcmMvZ2VuZXJhdG9ycy9saWIvcGFyc2Utcm91dGVzLWluLXBhY2thZ2UudHMiLCAiLi4vLi4vc3JjL2dlbmVyYXRvcnMvbGliL2RlZmF1bHQtbWFwLWZpbGUtcGF0aC10by1odHRwLXJvdXRlLnRzIiwgIi4uLy4uL3NyYy9nZW5lcmF0b3JzL2xpYi96b2Qtb3BlbmFwaS50cyIsICIuLi8uLi9zcmMvZ2VuZXJhdG9ycy9saWIvZnJvbnQtbWF0dGVyLnRzIiwgIi4uLy4uL3NyYy9nZW5lcmF0b3JzL3V0aWxzL3ByZWZpeC1vYmplY3Qta2V5cy13aXRoLXgudHMiLCAiLi4vLi4vc3JjL2dlbmVyYXRvcnMvdXRpbHMvZGFzaGlmeS1vYmplY3Qta2V5cy50cyIsICIuLi8uLi9zcmMvZ2VuZXJhdG9ycy9nZW5lcmF0ZS1vcGVuYXBpL2VtYmVkLXNjaGVtYS1yZWZlcmVuY2VzLnRzIiwgIi4uLy4uL3NyYy9nZW5lcmF0b3JzL2dlbmVyYXRlLW9wZW5hcGkvZmVybi1zZGstdXRpbHMudHMiLCAiLi4vLi4vc3JjL2dlbmVyYXRvcnMvZ2VuZXJhdGUtcm91dGUtdHlwZXMvaW5kZXgudHMiLCAiLi4vLi4vc3JjL2dlbmVyYXRvcnMvbGliL3pvZC10by10cy50cyIsICIuLi8uLi9zcmMvZ2VuZXJhdG9ycy9leHRyYWN0LXJvdXRlLXNwZWMtc2NoZW1hcy50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiZXhwb3J0ICogZnJvbSBcIi4vZ2VuZXJhdGUtb3BlbmFwaVwiXG5leHBvcnQgKiBmcm9tIFwiLi9nZW5lcmF0ZS1yb3V0ZS10eXBlc1wiXG5leHBvcnQgKiBmcm9tIFwiLi9leHRyYWN0LXJvdXRlLXNwZWMtc2NoZW1hc1wiXG4iLCAiaW1wb3J0IGZzIGZyb20gXCJub2RlOmZzL3Byb21pc2VzXCJcbmltcG9ydCB7XG4gIE9wZW5BcGlCdWlsZGVyLFxuICBPcGVyYXRpb25PYmplY3QsXG4gIFBhcmFtZXRlck9iamVjdCxcbn0gZnJvbSBcIm9wZW5hcGkzLXRzL29hczMxXCJcbmltcG9ydCB7IFNldHVwUGFyYW1zIH0gZnJvbSBcIi4uLy4uL3R5cGVzXCJcbmltcG9ydCB7IHogfSBmcm9tIFwiem9kXCJcbmltcG9ydCB7IHBhcnNlUm91dGVzSW5QYWNrYWdlIH0gZnJvbSBcIi4uL2xpYi9wYXJzZS1yb3V0ZXMtaW4tcGFja2FnZVwiXG5pbXBvcnQgeyBnZW5lcmF0ZVNjaGVtYSB9IGZyb20gXCIuLi9saWIvem9kLW9wZW5hcGlcIlxuaW1wb3J0IHsgZW1iZWRTY2hlbWFSZWZlcmVuY2VzIH0gZnJvbSBcIi4vZW1iZWQtc2NoZW1hLXJlZmVyZW5jZXNcIlxuaW1wb3J0IHsgbWFwTWV0aG9kc1RvRmVyblNka01ldGFkYXRhIH0gZnJvbSBcIi4vZmVybi1zZGstdXRpbHNcIlxuaW1wb3J0IHsgcGFyc2VGcm9udE1hdHRlciwgdGVzdEZyb250TWF0dGVyIH0gZnJvbSBcIi4uL2xpYi9mcm9udC1tYXR0ZXJcIlxuaW1wb3J0IGRlZGVudCBmcm9tIFwiZGVkZW50XCJcbmltcG9ydCB7IHByZWZpeE9iamVjdEtleXNXaXRoWCB9IGZyb20gXCIuLi91dGlscy9wcmVmaXgtb2JqZWN0LWtleXMtd2l0aC14XCJcbmltcG9ydCB7IGRhc2hpZnlPYmplY3RLZXlzIH0gZnJvbSBcIi4uL3V0aWxzL2Rhc2hpZnktb2JqZWN0LWtleXNcIlxuXG5mdW5jdGlvbiByZXBsYWNlRmlyc3RDaGFyVG9Mb3dlcmNhc2Uoc3RyOiBzdHJpbmcpIHtcbiAgaWYgKHN0ci5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gc3RyXG4gIH1cblxuICBjb25zdCBmaXJzdENoYXIgPSBzdHIuY2hhckF0KDApLnRvTG93ZXJDYXNlKClcbiAgcmV0dXJuIGZpcnN0Q2hhciArIHN0ci5zbGljZSgxKVxufVxuXG5mdW5jdGlvbiB0cmFuc2Zvcm1QYXRoVG9PcGVyYXRpb25JZChwYXRoOiBzdHJpbmcpOiBzdHJpbmcge1xuICBjb25zdCBwYXJ0cyA9IHBhdGhcbiAgICAucmVwbGFjZSgvLS9nLCBcIl9cIilcbiAgICAuc3BsaXQoXCIvXCIpXG4gICAgLmZpbHRlcigocGFydCkgPT4gcGFydCAhPT0gXCJcIilcbiAgY29uc3QgdHJhbnNmb3JtZWRQYXJ0cyA9IHBhcnRzLm1hcCgocGFydCkgPT4ge1xuICAgIGlmIChwYXJ0LnN0YXJ0c1dpdGgoXCJbXCIpICYmIHBhcnQuZW5kc1dpdGgoXCJdXCIpKSB7XG4gICAgICAvLyBDb252ZXJ0IFtwYXJhbV0gdG8gQnlQYXJhbVxuICAgICAgY29uc3Qgc2VydmljZU5hbWUgPSBwYXJ0LnNsaWNlKDEsIC0xKVxuICAgICAgY29uc3Qgd29yZHMgPSBzZXJ2aWNlTmFtZS5zcGxpdChcIl9cIilcbiAgICAgIGNvbnN0IGNhcGl0YWxpemVkV29yZHMgPSB3b3Jkcy5tYXAoXG4gICAgICAgICh3b3JkKSA9PiB3b3JkLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpICsgd29yZC5zbGljZSgxKVxuICAgICAgKVxuICAgICAgcmV0dXJuIGBCeSR7Y2FwaXRhbGl6ZWRXb3Jkcy5qb2luKFwiXCIpfWBcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gQ29udmVydCBhcGlfcGF0aCB0byBBcGlQYXRoXG4gICAgICBjb25zdCB3b3JkcyA9IHBhcnQuc3BsaXQoXCJfXCIpXG4gICAgICBjb25zdCBjYXBpdGFsaXplZFdvcmRzID0gd29yZHMubWFwKFxuICAgICAgICAod29yZCkgPT4gd29yZC5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSArIHdvcmQuc2xpY2UoMSlcbiAgICAgIClcbiAgICAgIHJldHVybiBjYXBpdGFsaXplZFdvcmRzLmpvaW4oXCJcIilcbiAgICB9XG4gIH0pXG5cbiAgcmV0dXJuIHJlcGxhY2VGaXJzdENoYXJUb0xvd2VyY2FzZSh0cmFuc2Zvcm1lZFBhcnRzLmpvaW4oXCJcIikpXG59XG5cbmZ1bmN0aW9uIHBhc2NhbENhc2UoaW5wdXQ6IHN0cmluZyk6IHN0cmluZyB7XG4gIGNvbnN0IHdvcmRzID0gaW5wdXQuc3BsaXQoXCIgXCIpXG4gIGNvbnN0IGNhcGl0YWxpemVkV29yZHMgPSB3b3Jkcy5tYXAoXG4gICAgKHdvcmQpID0+IHdvcmQuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkgKyB3b3JkLnNsaWNlKDEpLnRvTG93ZXJDYXNlKClcbiAgKVxuICBjb25zdCBwYXNjYWxDYXNlU3RyaW5nID0gY2FwaXRhbGl6ZWRXb3Jkcy5qb2luKFwiXCIpXG4gIHJldHVybiBwYXNjYWxDYXNlU3RyaW5nXG59XG5cbmludGVyZmFjZSBUYWdPcHRpb24ge1xuICBuYW1lOiBzdHJpbmdcbiAgZGVzY3JpcHRpb246IHN0cmluZ1xuICBkb2VzUm91dGVIYXZlVGFnPzogKHJvdXRlOiBzdHJpbmcpID0+IGJvb2xlYW5cbn1cblxuaW50ZXJmYWNlIEdlbmVyYXRlT3BlbkFQSU9wdHMge1xuICBwYWNrYWdlRGlyOiBzdHJpbmdcbiAgb3V0cHV0RmlsZT86IHN0cmluZ1xuICBwYXRoR2xvYj86IHN0cmluZ1xuICB0YWdzPzogQXJyYXk8VGFnT3B0aW9uPlxuICBhcGlQcmVmaXg/OiBzdHJpbmdcbiAgbWFwRmlsZVBhdGhUb0hUVFBSb3V0ZT86IChmaWxlX3BhdGg6IHN0cmluZykgPT4gc3RyaW5nXG59XG5cbi8qKlxuICogVGhpcyBmdW5jdGlvbiBnZW5lcmF0ZXMgYW4gT3BlbkFQSSBzcGVjIGZyb20gdGhlIE5leHQuanMgQVBJIHJvdXRlcy5cbiAqXG4gKiBZb3Ugbm9ybWFsbHkgaW52b2tlIHRoaXMgd2l0aCBgbmV4dGFwaSBnZW5lcmF0ZS1vcGVuYXBpYCBpbiBhXG4gKiBcImJ1aWxkOm9wZW5hcGlcIiBwYWNrYWdlLmpzb24gc2NyaXB0LlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2VuZXJhdGVPcGVuQVBJKG9wdHM6IEdlbmVyYXRlT3BlbkFQSU9wdHMpIHtcbiAgY29uc3QgY2hhbGsgPSAoYXdhaXQgaW1wb3J0KFwiY2hhbGtcIikpLmRlZmF1bHRcbiAgY29uc3QgeyBvdXRwdXRGaWxlLCB0YWdzID0gW10gfSA9IG9wdHNcblxuICBjb25zdCBmaWxlcGF0aFRvUm91dGVGbiA9IGF3YWl0IHBhcnNlUm91dGVzSW5QYWNrYWdlKG9wdHMpXG5cbiAgLy8gVE9ETyBkZXRlY3QgaWYgdGhlcmUgYXJlIG11bHRpcGxlIHNldHVwcyBhbmQgb3V0cHV0IGRpZmZlcmVudCBBUElzXG4gIGNvbnN0IHsgc2V0dXBQYXJhbXM6IGdsb2JhbFNldHVwUGFyYW1zIH0gPSBmaWxlcGF0aFRvUm91dGVGbi52YWx1ZXMoKS5uZXh0KClcbiAgICAudmFsdWUgYXMgeyBzZXR1cFBhcmFtczogU2V0dXBQYXJhbXMgfVxuXG4gIGNvbnN0IHNlY3VyaXR5U2NoZW1lcyA9IGdsb2JhbFNldHVwUGFyYW1zLnNlY3VyaXR5U2NoZW1hcyA/PyB7fVxuICBjb25zdCBzZWN1cml0eU9iamVjdHNGb3JBdXRoVHlwZSA9IHt9XG4gIGZvciAoY29uc3QgYXV0aE5hbWUgb2YgT2JqZWN0LmtleXMoZ2xvYmFsU2V0dXBQYXJhbXMuYXV0aE1pZGRsZXdhcmVNYXApKSB7XG4gICAgY29uc3QgbXcgPSBnbG9iYWxTZXR1cFBhcmFtcy5hdXRoTWlkZGxld2FyZU1hcFthdXRoTmFtZV1cbiAgICBpZiAobXcuc2VjdXJpdHlTY2hlbWEpIHtcbiAgICAgIHNlY3VyaXR5U2NoZW1lc1thdXRoTmFtZV0gPSAobXcgYXMgYW55KS5zZWN1cml0eVNjaGVtYVxuICAgIH0gZWxzZSB7XG4gICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgIGNoYWxrLnllbGxvdyhcbiAgICAgICAgICBgQXV0aGVudGljYXRpb24gbWlkZGxld2FyZSBcIiR7YXV0aE5hbWV9XCIgaGFzIG5vIHNlY3VyaXR5U2NoZW1hLiBZb3UgY2FuIGRlZmluZSB0aGlzIG9uIHRoZSBmdW5jdGlvbiAoZS5nLiBhZnRlciB0aGUgZXhwb3J0IGRvLi4uIFxcblxcbm15TWlkZGxld2FyZS5zZWN1cml0eVNjaGVtYSA9IHtcXG4gIHR5cGU6IFwiaHR0cFwiXFxuICBzY2hlbWU6IFwiYmVhcmVyXCJcXG4gIGJlYXJlckZvcm1hdDogXCJKV1RcIlxcbiAvLyBvciBBUEkgVG9rZW4gZXRjLlxcbn1cXG5cXG5Zb3UgY2FuIGFsc28gZGVmaW5lIFwic2VjdXJpdHlPYmplY3RzXCIgdGhpcyB3YXksIGlmIHlvdSB3YW50IHRvIG1ha2UgdGhlIGVuZHBvaW50IHN1cHBvcnQgbXVsdGlwbGUgbW9kZXMgb2YgYXV0aGVudGljYXRpb24uXFxuXFxuYFxuICAgICAgICApXG4gICAgICApXG4gICAgfVxuXG4gICAgc2VjdXJpdHlPYmplY3RzRm9yQXV0aFR5cGVbYXV0aE5hbWVdID0gKG13IGFzIGFueSkuc2VjdXJpdHlPYmplY3RzIHx8IFtcbiAgICAgIHtcbiAgICAgICAgW2F1dGhOYW1lXTogW10sXG4gICAgICB9LFxuICAgIF1cbiAgfVxuXG4gIGNvbnN0IGdsb2JhbFNjaGVtYXMgPSB7fVxuICBmb3IgKGNvbnN0IFtzY2hlbWFOYW1lLCB6b2RTY2hlbWFdIG9mIE9iamVjdC5lbnRyaWVzKFxuICAgIGdsb2JhbFNldHVwUGFyYW1zLmdsb2JhbFNjaGVtYXMgPz8ge31cbiAgKSkge1xuICAgIGdsb2JhbFNjaGVtYXNbc2NoZW1hTmFtZV0gPSBnZW5lcmF0ZVNjaGVtYSh6b2RTY2hlbWEpXG4gIH1cblxuICAvLyBCdWlsZCBPcGVuQVBJIHNwZWNcbiAgY29uc3QgYnVpbGRlciA9IE9wZW5BcGlCdWlsZGVyLmNyZWF0ZSh7XG4gICAgb3BlbmFwaTogXCIzLjAuMFwiLFxuICAgIGluZm86IHtcbiAgICAgIHRpdGxlOiBnbG9iYWxTZXR1cFBhcmFtcy5hcGlOYW1lLFxuICAgICAgdmVyc2lvbjogXCIxLjAuMFwiLFxuICAgIH0sXG4gICAgc2VydmVyczogW1xuICAgICAge1xuICAgICAgICB1cmw6IGdsb2JhbFNldHVwUGFyYW1zLnByb2R1Y3Rpb25TZXJ2ZXJVcmwgfHwgXCJodHRwczovL2V4YW1wbGUuY29tXCIsXG4gICAgICB9LFxuICAgIF0sXG4gICAgdGFnczogdGFncy5tYXAoKHRhZykgPT4gKHsgbmFtZTogdGFnLm5hbWUsIGRlc2NyaXB0aW9uOiB0YWcuZGVzY3JpcHRpb24gfSkpLFxuICAgIHBhdGhzOiB7fSxcbiAgICBjb21wb25lbnRzOiB7XG4gICAgICBzZWN1cml0eVNjaGVtZXMsXG4gICAgICBzY2hlbWFzOiBnbG9iYWxTY2hlbWFzLFxuICAgIH0sXG4gIH0pXG5cbiAgZm9yIChjb25zdCBbXG4gICAgZmlsZV9wYXRoLFxuICAgIHsgc2V0dXBQYXJhbXMsIHJvdXRlU3BlYywgcm91dGU6IHJvdXRlUGF0aCB9LFxuICBdIG9mIGZpbGVwYXRoVG9Sb3V0ZUZuKSB7XG4gICAgY29uc3QgbWV0aG9kcyA9IHJvdXRlU3BlYy5tZXRob2RzXG4gICAgaWYgKG1ldGhvZHMubGVuZ3RoID09PSAwKSB7XG4gICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgIGNoYWxrLnllbGxvdyhgU2tpcHBpbmcgcm91dGUgJHtyb3V0ZVBhdGh9IGJlY2F1c2UgaXQgaGFzIG5vIG1ldGhvZHMuYClcbiAgICAgIClcbiAgICAgIGNvbnRpbnVlXG4gICAgfVxuXG4gICAgbGV0IGRlc2NyaXB0aW9uID0gcm91dGVTcGVjLmRlc2NyaXB0aW9uXG4gICAgbGV0IGRlc2NyaXB0aW9uTWV0YWRhdGE6IHtcbiAgICAgIHJlc3BvbnNlX2tleT86IHN0cmluZ1xuICAgICAgW2tleTogc3RyaW5nXTogYW55XG4gICAgfSA9IHt9XG5cbiAgICBpZiAoZGVzY3JpcHRpb24pIHtcbiAgICAgIGNvbnN0IHRyaW1tZWREZXNjcmlwdGlvbiA9IGRlZGVudChkZXNjcmlwdGlvbikudHJpbSgpXG5cbiAgICAgIGlmICh0ZXN0RnJvbnRNYXR0ZXIodHJpbW1lZERlc2NyaXB0aW9uKSkge1xuICAgICAgICBjb25zdCB7IGF0dHJpYnV0ZXMsIGJvZHkgfSA9IHBhcnNlRnJvbnRNYXR0ZXIodHJpbW1lZERlc2NyaXB0aW9uKVxuICAgICAgICBkZXNjcmlwdGlvbk1ldGFkYXRhID0gYXR0cmlidXRlc1xuICAgICAgICBkZXNjcmlwdGlvbiA9IGJvZHkudHJpbSgpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBkZXNjcmlwdGlvbiA9IHRyaW1tZWREZXNjcmlwdGlvblxuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IGZvcm1hdHRlZERlc2NyaXB0aW9uTWV0YWRhdGEgPSBwcmVmaXhPYmplY3RLZXlzV2l0aFgoXG4gICAgICBkYXNoaWZ5T2JqZWN0S2V5cyhkZXNjcmlwdGlvbk1ldGFkYXRhKVxuICAgIClcblxuICAgIGNvbnN0IG1ldGhvZFJvdXRlczogUmVjb3JkPHN0cmluZywgT3BlcmF0aW9uT2JqZWN0PiA9IHt9XG5cbiAgICBmb3IgKGNvbnN0IG1ldGhvZCBvZiBtZXRob2RzKSB7XG4gICAgICBjb25zdCBpc1Bvc3RPclB1dE9yUGF0Y2ggPSBbXCJQT1NUXCIsIFwiUFVUXCIsIFwiUEFUQ0hcIl0uaW5jbHVkZXMobWV0aG9kKVxuXG4gICAgICAvLyBUT0RPOiBzdXBwb3J0IG11bHRpcGFydC9mb3JtLWRhdGFcbiAgICAgIGxldCBib2R5X3RvX2dlbmVyYXRlX3NjaGVtYVxuICAgICAgaWYgKGlzUG9zdE9yUHV0T3JQYXRjaCkge1xuICAgICAgICBib2R5X3RvX2dlbmVyYXRlX3NjaGVtYSA9IHJvdXRlU3BlYy5qc29uQm9keSA/PyByb3V0ZVNwZWMuY29tbW9uUGFyYW1zXG5cbiAgICAgICAgaWYgKHJvdXRlU3BlYy5qc29uQm9keSAmJiByb3V0ZVNwZWMuY29tbW9uUGFyYW1zKSB7XG4gICAgICAgICAgYm9keV90b19nZW5lcmF0ZV9zY2hlbWEgPSByb3V0ZVNwZWMuanNvbkJvZHkubWVyZ2UoXG4gICAgICAgICAgICByb3V0ZVNwZWMuY29tbW9uUGFyYW1zXG4gICAgICAgICAgKVxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBib2R5X3RvX2dlbmVyYXRlX3NjaGVtYSA9IHJvdXRlU3BlYy5qc29uQm9keVxuICAgICAgfVxuXG4gICAgICBsZXQgcXVlcnlfdG9fZ2VuZXJhdGVfc2NoZW1hXG4gICAgICBpZiAoaXNQb3N0T3JQdXRPclBhdGNoKSB7XG4gICAgICAgIHF1ZXJ5X3RvX2dlbmVyYXRlX3NjaGVtYSA9IHJvdXRlU3BlYy5xdWVyeVBhcmFtc1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcXVlcnlfdG9fZ2VuZXJhdGVfc2NoZW1hID1cbiAgICAgICAgICByb3V0ZVNwZWMucXVlcnlQYXJhbXMgPz8gcm91dGVTcGVjLmNvbW1vblBhcmFtc1xuXG4gICAgICAgIGlmIChyb3V0ZVNwZWMucXVlcnlQYXJhbXMgJiYgcm91dGVTcGVjLmNvbW1vblBhcmFtcykge1xuICAgICAgICAgIHF1ZXJ5X3RvX2dlbmVyYXRlX3NjaGVtYSA9IHJvdXRlU3BlYy5xdWVyeVBhcmFtcy5tZXJnZShcbiAgICAgICAgICAgIHJvdXRlU3BlYy5jb21tb25QYXJhbXNcbiAgICAgICAgICApXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgY29uc3Qgcm91dGU6IE9wZXJhdGlvbk9iamVjdCA9IHtcbiAgICAgICAgLi4ucm91dGVTcGVjLm9wZW5BcGlNZXRhZGF0YSxcbiAgICAgICAgLi4uZm9ybWF0dGVkRGVzY3JpcHRpb25NZXRhZGF0YSxcbiAgICAgICAgc3VtbWFyeTogcm91dGVQYXRoLFxuICAgICAgICAuLi4oZGVzY3JpcHRpb24gJiYgeyBkZXNjcmlwdGlvbiB9KSxcbiAgICAgICAgb3BlcmF0aW9uSWQ6IGAke3RyYW5zZm9ybVBhdGhUb09wZXJhdGlvbklkKHJvdXRlUGF0aCl9JHtwYXNjYWxDYXNlKFxuICAgICAgICAgIG1ldGhvZFxuICAgICAgICApfWAsXG4gICAgICAgIHJlc3BvbnNlczoge1xuICAgICAgICAgIDIwMDoge1xuICAgICAgICAgICAgZGVzY3JpcHRpb246IFwiT0tcIixcbiAgICAgICAgICB9LFxuICAgICAgICAgIDQwMDoge1xuICAgICAgICAgICAgZGVzY3JpcHRpb246IFwiQmFkIFJlcXVlc3RcIixcbiAgICAgICAgICB9LFxuICAgICAgICAgIDQwMToge1xuICAgICAgICAgICAgZGVzY3JpcHRpb246IFwiVW5hdXRob3JpemVkXCIsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgICAgc2VjdXJpdHk6IEFycmF5LmlzQXJyYXkocm91dGVTcGVjLmF1dGgpXG4gICAgICAgICAgPyByb3V0ZVNwZWMuYXV0aFxuICAgICAgICAgICAgICAubWFwKChhdXRoVHlwZSkgPT4gc2VjdXJpdHlPYmplY3RzRm9yQXV0aFR5cGVbYXV0aFR5cGVdKVxuICAgICAgICAgICAgICAuZmxhdCgpXG4gICAgICAgICAgOiBzZWN1cml0eU9iamVjdHNGb3JBdXRoVHlwZVtyb3V0ZVNwZWMuYXV0aF0sXG4gICAgICB9XG5cbiAgICAgIGlmIChib2R5X3RvX2dlbmVyYXRlX3NjaGVtYSkge1xuICAgICAgICByb3V0ZS5yZXF1ZXN0Qm9keSA9IHtcbiAgICAgICAgICBjb250ZW50OiB7XG4gICAgICAgICAgICBcImFwcGxpY2F0aW9uL2pzb25cIjoge1xuICAgICAgICAgICAgICBzY2hlbWE6IGdlbmVyYXRlU2NoZW1hKGJvZHlfdG9fZ2VuZXJhdGVfc2NoZW1hIGFzIGFueSksXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0sXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKHF1ZXJ5X3RvX2dlbmVyYXRlX3NjaGVtYSkge1xuICAgICAgICBjb25zdCBzY2hlbWEgPSBnZW5lcmF0ZVNjaGVtYShxdWVyeV90b19nZW5lcmF0ZV9zY2hlbWEgYXMgYW55KVxuICAgICAgICBpZiAoc2NoZW1hLnByb3BlcnRpZXMpIHtcbiAgICAgICAgICBjb25zdCBwYXJhbWV0ZXJzOiBQYXJhbWV0ZXJPYmplY3RbXSA9IE9iamVjdC5rZXlzKFxuICAgICAgICAgICAgc2NoZW1hLnByb3BlcnRpZXMgYXMgYW55XG4gICAgICAgICAgKS5tYXAoKG5hbWUpID0+IHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgIG5hbWUsXG4gICAgICAgICAgICAgIGluOiBcInF1ZXJ5XCIsXG4gICAgICAgICAgICAgIHNjaGVtYTogc2NoZW1hLnByb3BlcnRpZXMhW25hbWVdLFxuICAgICAgICAgICAgICByZXF1aXJlZDogc2NoZW1hLnJlcXVpcmVkPy5pbmNsdWRlcyhuYW1lKSxcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KVxuXG4gICAgICAgICAgcm91dGUucGFyYW1ldGVycyA9IHBhcmFtZXRlcnNcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBjb25zdCB7IGpzb25SZXNwb25zZSB9ID0gcm91dGVTcGVjXG4gICAgICBjb25zdCB7IGFkZE9rU3RhdHVzID0gdHJ1ZSB9ID0gc2V0dXBQYXJhbXNcblxuICAgICAgaWYgKGpzb25SZXNwb25zZSkge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgIWpzb25SZXNwb25zZS5fZGVmIHx8XG4gICAgICAgICAgIWpzb25SZXNwb25zZS5fZGVmLnR5cGVOYW1lIHx8XG4gICAgICAgICAganNvblJlc3BvbnNlLl9kZWYudHlwZU5hbWUgIT09IFwiWm9kT2JqZWN0XCJcbiAgICAgICAgKSB7XG4gICAgICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICAgICAgY2hhbGsueWVsbG93KFxuICAgICAgICAgICAgICBgU2tpcHBpbmcgcm91dGUgJHtyb3V0ZVBhdGh9IGJlY2F1c2UgdGhlIHJlc3BvbnNlIGlzIG5vdCBhIFpvZE9iamVjdC5gXG4gICAgICAgICAgICApXG4gICAgICAgICAgKVxuICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCByZXNwb25zZVNjaGVtYSA9IGdlbmVyYXRlU2NoZW1hKFxuICAgICAgICAgIGFkZE9rU3RhdHVzICYmIGpzb25SZXNwb25zZSBpbnN0YW5jZW9mIHouWm9kT2JqZWN0XG4gICAgICAgICAgICA/IGpzb25SZXNwb25zZS5leHRlbmQoeyBvazogei5ib29sZWFuKCkgfSlcbiAgICAgICAgICAgIDoganNvblJlc3BvbnNlXG4gICAgICAgIClcblxuICAgICAgICBjb25zdCBzY2hlbWFXaXRoUmVmZXJlbmNlcyA9IGVtYmVkU2NoZW1hUmVmZXJlbmNlcyhcbiAgICAgICAgICByZXNwb25zZVNjaGVtYSxcbiAgICAgICAgICBnbG9iYWxTY2hlbWFzXG4gICAgICAgIClcblxuICAgICAgICBpZiAocm91dGUucmVzcG9uc2VzICE9IG51bGwpIHtcbiAgICAgICAgICAvLyBUT0RPOiB3ZSBzaG91bGQgbm90IGhhcmRjb2RlIDIwMCBoZXJlXG4gICAgICAgICAgcm91dGUucmVzcG9uc2VzWzIwMF0uY29udGVudCA9IHtcbiAgICAgICAgICAgIFwiYXBwbGljYXRpb24vanNvblwiOiB7XG4gICAgICAgICAgICAgIHNjaGVtYTogc2NoZW1hV2l0aFJlZmVyZW5jZXMsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByb3V0ZS50YWdzID0gW11cbiAgICAgIGZvciAoY29uc3QgdGFnIG9mIHRhZ3MpIHtcbiAgICAgICAgaWYgKHRhZy5kb2VzUm91dGVIYXZlVGFnICYmIHRhZy5kb2VzUm91dGVIYXZlVGFnKHJvdXRlLnN1bW1hcnkgfHwgXCJcIikpIHtcbiAgICAgICAgICByb3V0ZS50YWdzLnB1c2godGFnLm5hbWUpXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgY29uc3QgbWV0aG9kc01hcHBlZFRvRmVyblNka01ldGFkYXRhID0gYXdhaXQgbWFwTWV0aG9kc1RvRmVyblNka01ldGFkYXRhKHtcbiAgICAgICAgbWV0aG9kczogW21ldGhvZF0sIC8vIE9ubHkgcGFzcyB0aGlzIHNwZWNpZmljIG1ldGhvZFxuICAgICAgICBwYXRoOiByb3V0ZVBhdGgsXG4gICAgICAgIHNka1JldHVyblZhbHVlOlxuICAgICAgICAgIGRlc2NyaXB0aW9uTWV0YWRhdGE/LnJlc3BvbnNlX2tleSA/PyByb3V0ZVNwZWMuc2RrUmV0dXJuVmFsdWUsXG4gICAgICB9KVxuXG4gICAgICBPYmplY3QuYXNzaWduKHJvdXRlLCBtZXRob2RzTWFwcGVkVG9GZXJuU2RrTWV0YWRhdGFbbWV0aG9kXSlcbiAgICAgIG1ldGhvZFJvdXRlc1ttZXRob2QudG9Mb3dlckNhc2UoKV0gPSByb3V0ZVxuICAgIH1cblxuICAgIGJ1aWxkZXIuYWRkUGF0aChyb3V0ZVBhdGgsIG1ldGhvZFJvdXRlcylcbiAgfVxuXG4gIGlmIChvdXRwdXRGaWxlKSB7XG4gICAgYXdhaXQgZnMud3JpdGVGaWxlKG91dHB1dEZpbGUsIGJ1aWxkZXIuZ2V0U3BlY0FzSnNvbih1bmRlZmluZWQsIDIpKVxuICB9XG5cbiAgcmV0dXJuIGJ1aWxkZXIuZ2V0U3BlY0FzSnNvbih1bmRlZmluZWQsIDIpXG59XG4iLCAiaW1wb3J0IHBhdGggZnJvbSBcIm5vZGU6cGF0aFwiXG5pbXBvcnQgeyBSb3V0ZVNwZWMsIFNldHVwUGFyYW1zIH0gZnJvbSBcIi4uLy4uL3R5cGVzXCJcbmltcG9ydCB7IGRlZmF1bHRNYXBGaWxlUGF0aFRvSFRUUFJvdXRlIH0gZnJvbSBcIi4vZGVmYXVsdC1tYXAtZmlsZS1wYXRoLXRvLWh0dHAtcm91dGVcIlxuXG5leHBvcnQgaW50ZXJmYWNlIFJvdXRlSW5mbyB7XG4gIHNldHVwUGFyYW1zOiBTZXR1cFBhcmFtc1xuICByb3V0ZVNwZWM6IFJvdXRlU3BlY1xuICByb3V0ZUZuOiBGdW5jdGlvblxuICByb3V0ZTogc3RyaW5nXG59XG5cbmV4cG9ydCBjb25zdCBwYXJzZVJvdXRlc0luUGFja2FnZSA9IGFzeW5jIChvcHRzOiB7XG4gIHBhY2thZ2VEaXI6IHN0cmluZ1xuICBwYXRoR2xvYj86IHN0cmluZ1xuICBhcGlQcmVmaXg/OiBzdHJpbmdcbiAgbWFwRmlsZVBhdGhUb0hUVFBSb3V0ZT86IChmaWxlX3BhdGg6IHN0cmluZykgPT4gc3RyaW5nXG4gIGluY2x1ZGVPcGVuQXBpRXhjbHVkZWRSb3V0ZXM/OiBib29sZWFuXG59KTogUHJvbWlzZTxNYXA8c3RyaW5nLCBSb3V0ZUluZm8+PiA9PiB7XG4gIGNvbnN0IGNoYWxrID0gKGF3YWl0IGltcG9ydChcImNoYWxrXCIpKS5kZWZhdWx0XG4gIGNvbnN0IGdsb2JieSA9IChhd2FpdCBpbXBvcnQoXCJnbG9iYnlcIikpLmdsb2JieVxuICBjb25zdCB7XG4gICAgcGFja2FnZURpcixcbiAgICBwYXRoR2xvYiA9IFwiL3BhZ2VzL2FwaS8qKi8qLnRzXCIsXG4gICAgbWFwRmlsZVBhdGhUb0hUVFBSb3V0ZSA9IGRlZmF1bHRNYXBGaWxlUGF0aFRvSFRUUFJvdXRlKG9wdHMuYXBpUHJlZml4KSxcbiAgfSA9IG9wdHNcbiAgLy8gTG9hZCBhbGwgcm91dGUgc3BlY3NcbiAgY29uc3QgZnVsbFBhdGhHbG9iID0gcGF0aC5wb3NpeC5qb2luKHBhY2thZ2VEaXIsIHBhdGhHbG9iKVxuICBjb25zb2xlLmxvZyhgc2VhcmNoaW5nIFwiJHtmdWxsUGF0aEdsb2J9XCIuLi5gKVxuICBjb25zdCBmaWxlcGF0aHMgPSBhd2FpdCBnbG9iYnkoYCR7ZnVsbFBhdGhHbG9ifWApXG4gIGNvbnNvbGUubG9nKGBmb3VuZCAke2ZpbGVwYXRocy5sZW5ndGh9IGZpbGVzYClcbiAgaWYgKGZpbGVwYXRocy5sZW5ndGggPT09IDApIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYE5vIGZpbGVzIGZvdW5kIGF0IFwiJHtmdWxsUGF0aEdsb2J9XCJgKVxuICB9XG4gIGNvbnN0IGZpbGVwYXRoVG9Sb3V0ZUZuID0gbmV3IE1hcDxzdHJpbmcsIFJvdXRlSW5mbz4oKVxuXG4gIGF3YWl0IFByb21pc2UuYWxsKFxuICAgIGZpbGVwYXRocy5tYXAoYXN5bmMgKHApID0+IHtcbiAgICAgIGNvbnN0IHsgZGVmYXVsdDogcm91dGVGbiB9ID0gYXdhaXQgcmVxdWlyZShwYXRoLnJlc29sdmUocCkpXG5cbiAgICAgIGlmIChyb3V0ZUZuKSB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICByb3V0ZUZuLl9yb3V0ZVNwZWM/LmV4Y2x1ZGVGcm9tT3BlbkFwaSAmJlxuICAgICAgICAgICFvcHRzLmluY2x1ZGVPcGVuQXBpRXhjbHVkZWRSb3V0ZXNcbiAgICAgICAgKSB7XG4gICAgICAgICAgY29uc29sZS5sb2coXG4gICAgICAgICAgICBjaGFsay5ncmF5KFxuICAgICAgICAgICAgICBgSWdub3JpbmcgXCIke3B9IGJlY2F1c2UgaXQgd2FzIGV4Y2x1ZGVkIGZyb20gT3BlbkFQSSBnZW5lcmF0aW9uXCJgXG4gICAgICAgICAgICApXG4gICAgICAgICAgKVxuICAgICAgICAgIHJldHVyblxuICAgICAgICB9XG4gICAgICAgIGlmICghcm91dGVGbi5fc2V0dXBQYXJhbXMpIHtcbiAgICAgICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgICAgICBjaGFsay55ZWxsb3coXG4gICAgICAgICAgICAgIGBJZ25vcmluZyBcIiR7cH1cIiBiZWNhdXNlIGl0IHdhc24ndCBjcmVhdGVkIHdpdGggd2l0aFJvdXRlU3BlY2BcbiAgICAgICAgICAgIClcbiAgICAgICAgICApXG4gICAgICAgICAgcmV0dXJuXG4gICAgICAgIH1cbiAgICAgICAgZmlsZXBhdGhUb1JvdXRlRm4uc2V0KHAsIHtcbiAgICAgICAgICBzZXR1cFBhcmFtczogcm91dGVGbi5fc2V0dXBQYXJhbXMsXG4gICAgICAgICAgcm91dGVTcGVjOiByb3V0ZUZuLl9yb3V0ZVNwZWMsXG4gICAgICAgICAgcm91dGU6IG1hcEZpbGVQYXRoVG9IVFRQUm91dGUocCksXG4gICAgICAgICAgcm91dGVGbixcbiAgICAgICAgfSlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnNvbGUud2FybihjaGFsay55ZWxsb3coYENvdWxkbid0IGZpbmQgcm91dGUgJHtwfWApKVxuICAgICAgfVxuICAgIH0pXG4gIClcblxuICByZXR1cm4gZmlsZXBhdGhUb1JvdXRlRm5cbn1cbiIsICJpbXBvcnQgcGF0aCBmcm9tIFwicGF0aFwiXG5cbmV4cG9ydCBjb25zdCBkZWZhdWx0TWFwRmlsZVBhdGhUb0hUVFBSb3V0ZSA9XG4gIChhcGlfcHJlZml4OiBzdHJpbmcgPSBcIi9hcGlcIikgPT5cbiAgKGZpbGVfcGF0aDogc3RyaW5nKSA9PiB7XG4gICAgY29uc3Qgcm91dGUgPSBmaWxlX3BhdGhcbiAgICAgIC8vIHJlcGxhY2UgLi8gaWYgaXQgc3RhcnRzIHdpdGggLi9cbiAgICAgIC5yZXBsYWNlKC9eXFwuXFwvLywgXCIvXCIpXG4gICAgICAvLyByZXBsYWNlIHN0YXJ0aW5nIC9cbiAgICAgIC5yZXBsYWNlKC9eXFwvLywgXCJcIilcbiAgICAgIC8vIHJlcGxhY2UgL3NyYyBpZiBpdCBzdGFydHMgd2l0aCAvc3JjXG4gICAgICAucmVwbGFjZSgvXnNyY1xcLy8sIFwiXCIpXG4gICAgICAvLyByZXBsYWNlIC9wYWdlcyBpZiBpdCBzdGFydHMgd2l0aCAvcGFnZXNcbiAgICAgIC5yZXBsYWNlKC9ecGFnZXNcXC8vLCBcIlwiKVxuICAgICAgLy8gcmVwbGFjZSAvYXBpIGlmIGl0IHN0YXJ0cyB3aXRoIC9hcGlcbiAgICAgIC5yZXBsYWNlKC9eYXBpXFwvLywgXCJcIilcbiAgICAgIC8vIHJlcGxhY2UgLnRzIGlmIGl0IGVuZHMgd2l0aCAudHNcbiAgICAgIC5yZXBsYWNlKC9cXC50cyQvLCBcIlwiKVxuICAgICAgLy8gcmVtb3ZlIHB1YmxpYyByZWZlcmVuY2VcbiAgICAgIC5yZXBsYWNlKFwicHVibGljXCIsIFwiXCIpXG4gICAgICAvLyByZXBsYWNlIGluZGV4IGlmIGl0IGVuZHMgd2l0aCBpbmRleFxuICAgICAgLnJlcGxhY2UoL1xcL1xcaW5kZXgoPyEuKS8sIFwiXCIpXG5cbiAgICByZXR1cm4gcGF0aC5qb2luKGFwaV9wcmVmaXgsIHJvdXRlKVxuICB9XG4iLCAiLyoqXG4gKiBab2QgT3BlbkFQSSBHZW5lcmF0b3IuXG4gKlxuICogVmVuZG9yZWQgZnJvbSBodHRwczovL2dpdGh1Yi5jb20vYW5hdGluZS96b2QtcGx1Z2luc1xuICpcbiAqIE1JVCBMaWNlbnNlXG4gKlxuICogQ29weXJpZ2h0IChjKSAyMDIyIEJyaWFuIE1jQnJpZGVcbiAqXG4gKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5XG4gKiBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLCB0byBkZWFsXG4gKiBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzXG4gKiB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsXG4gKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXNcbiAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4gKlxuICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsXG4gKiBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuICpcbiAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1JcbiAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLFxuICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFXG4gKiBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSXG4gKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLFxuICogT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEVcbiAqIFNPRlRXQVJFLlxuICovXG5cbmltcG9ydCB0eXBlIHsgU2NoZW1hT2JqZWN0LCBTY2hlbWFPYmplY3RUeXBlIH0gZnJvbSBcIm9wZW5hcGkzLXRzL29hczMxXCJcbmltcG9ydCBtZXJnZSBmcm9tIFwidHMtZGVlcG1lcmdlXCJcbmltcG9ydCB7IEFueVpvZE9iamVjdCwgeiwgWm9kVHlwZUFueSB9IGZyb20gXCJ6b2RcIlxuaW1wb3J0IHsgcGFyc2VGcm9udE1hdHRlciwgdGVzdEZyb250TWF0dGVyIH0gZnJvbSBcIi4vZnJvbnQtbWF0dGVyXCJcbmltcG9ydCBkZWRlbnQgZnJvbSBcImRlZGVudFwiXG5pbXBvcnQgeyBwcmVmaXhPYmplY3RLZXlzV2l0aFggfSBmcm9tIFwiLi4vdXRpbHMvcHJlZml4LW9iamVjdC1rZXlzLXdpdGgteFwiXG5pbXBvcnQgeyBkYXNoaWZ5T2JqZWN0S2V5cyB9IGZyb20gXCIuLi91dGlscy9kYXNoaWZ5LW9iamVjdC1rZXlzXCJcblxudHlwZSBBbmF0aW5lU2NoZW1hT2JqZWN0ID0gU2NoZW1hT2JqZWN0ICYgeyBoaWRlRGVmaW5pdGlvbnM/OiBzdHJpbmdbXSB9XG5cbmV4cG9ydCBpbnRlcmZhY2UgT3BlbkFwaVpvZEFueSBleHRlbmRzIFpvZFR5cGVBbnkge1xuICBtZXRhT3BlbkFwaT86IEFuYXRpbmVTY2hlbWFPYmplY3QgfCBBbmF0aW5lU2NoZW1hT2JqZWN0W11cbn1cblxuaW50ZXJmYWNlIE9wZW5BcGlab2RBbnlPYmplY3QgZXh0ZW5kcyBBbnlab2RPYmplY3Qge1xuICBtZXRhT3BlbkFwaT86IEFuYXRpbmVTY2hlbWFPYmplY3QgfCBBbmF0aW5lU2NoZW1hT2JqZWN0W11cbn1cblxuaW50ZXJmYWNlIFBhcnNpbmdBcmdzPFQ+IHtcbiAgem9kUmVmOiBUXG4gIHNjaGVtYXM6IEFuYXRpbmVTY2hlbWFPYmplY3RbXVxuICB1c2VPdXRwdXQ/OiBib29sZWFuXG4gIGhpZGVEZWZpbml0aW9ucz86IHN0cmluZ1tdXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBleHRlbmRBcGk8VCBleHRlbmRzIE9wZW5BcGlab2RBbnk+KFxuICBzY2hlbWE6IFQsXG4gIHNjaGVtYU9iamVjdDogQW5hdGluZVNjaGVtYU9iamVjdCA9IHt9XG4pOiBUIHtcbiAgc2NoZW1hLm1ldGFPcGVuQXBpID0gT2JqZWN0LmFzc2lnbihzY2hlbWEubWV0YU9wZW5BcGkgfHwge30sIHNjaGVtYU9iamVjdClcbiAgcmV0dXJuIHNjaGVtYVxufVxuXG5mdW5jdGlvbiBpdGVyYXRlWm9kT2JqZWN0KHtcbiAgem9kUmVmLFxuICB1c2VPdXRwdXQsXG4gIGhpZGVEZWZpbml0aW9ucyxcbn06IFBhcnNpbmdBcmdzPE9wZW5BcGlab2RBbnlPYmplY3Q+KSB7XG4gIGNvbnN0IHJlZHVjZWQgPSBPYmplY3Qua2V5cyh6b2RSZWYuc2hhcGUpXG4gICAgLmZpbHRlcigoa2V5KSA9PiBoaWRlRGVmaW5pdGlvbnM/LmluY2x1ZGVzKGtleSkgPT09IGZhbHNlKVxuICAgIC5yZWR1Y2UoXG4gICAgICAoY2FycnksIGtleSkgPT4gKHtcbiAgICAgICAgLi4uY2FycnksXG4gICAgICAgIFtrZXldOiBnZW5lcmF0ZVNjaGVtYSh6b2RSZWYuc2hhcGVba2V5XSwgdXNlT3V0cHV0KSxcbiAgICAgIH0pLFxuICAgICAge30gYXMgUmVjb3JkPHN0cmluZywgU2NoZW1hT2JqZWN0PlxuICAgIClcblxuICByZXR1cm4gcmVkdWNlZFxufVxuXG5mdW5jdGlvbiBwYXJzZURlc2NyaXB0aW9uKHpvZFJlZjogT3BlbkFwaVpvZEFueSk6IFNjaGVtYU9iamVjdCB7XG4gIGlmICghem9kUmVmLmRlc2NyaXB0aW9uKSByZXR1cm4ge31cbiAgY29uc3QgdHJpbW1lZERlc2NyaXB0aW9uID0gZGVkZW50KHpvZFJlZi5kZXNjcmlwdGlvbilcbiAgaWYgKCF0ZXN0RnJvbnRNYXR0ZXIodHJpbW1lZERlc2NyaXB0aW9uKSlcbiAgICByZXR1cm4geyBkZXNjcmlwdGlvbjogem9kUmVmLmRlc2NyaXB0aW9uIH1cbiAgY29uc3QgeyBhdHRyaWJ1dGVzLCBib2R5IH0gPSBwYXJzZUZyb250TWF0dGVyKHRyaW1tZWREZXNjcmlwdGlvbilcbiAgY29uc3Qgb3V0cHV0OiBTY2hlbWFPYmplY3QgPSB7fVxuICBpZiAoYm9keS50cmltKCkpIG91dHB1dC5kZXNjcmlwdGlvbiA9IGJvZHkudHJpbSgpXG4gIGlmICh0eXBlb2YgYXR0cmlidXRlcyA9PT0gXCJvYmplY3RcIiAmJiBhdHRyaWJ1dGVzICE9PSBudWxsKSB7XG4gICAgaWYgKFwiZGVwcmVjYXRlZFwiIGluIGF0dHJpYnV0ZXMgJiYgYXR0cmlidXRlcy5kZXByZWNhdGVkKSB7XG4gICAgICBvdXRwdXQuZGVwcmVjYXRlZCA9IHRydWVcbiAgICB9XG5cbiAgICBPYmplY3QuZW50cmllcyhcbiAgICAgIHByZWZpeE9iamVjdEtleXNXaXRoWChkYXNoaWZ5T2JqZWN0S2V5cyhhdHRyaWJ1dGVzKSlcbiAgICApLmZvckVhY2goKFtrZXksIHZhbHVlXSkgPT4ge1xuICAgICAgb3V0cHV0W2tleV0gPSB2YWx1ZVxuICAgIH0pXG4gIH1cblxuICByZXR1cm4gb3V0cHV0XG59XG5cbmZ1bmN0aW9uIHBhcnNlVHJhbnNmb3JtYXRpb24oe1xuICB6b2RSZWYsXG4gIHNjaGVtYXMsXG4gIHVzZU91dHB1dCxcbn06IFBhcnNpbmdBcmdzPHouWm9kVHJhbnNmb3JtZXI8bmV2ZXI+IHwgei5ab2RFZmZlY3RzPG5ldmVyPj4pOiBTY2hlbWFPYmplY3Qge1xuICBjb25zdCBpbnB1dCA9IGdlbmVyYXRlU2NoZW1hKHpvZFJlZi5fZGVmLnNjaGVtYSwgdXNlT3V0cHV0KVxuXG4gIGxldCBvdXRwdXQgPSBcInVuZGVmaW5lZFwiXG4gIGlmICh1c2VPdXRwdXQgJiYgem9kUmVmLl9kZWYuZWZmZWN0KSB7XG4gICAgY29uc3QgZWZmZWN0ID1cbiAgICAgIHpvZFJlZi5fZGVmLmVmZmVjdC50eXBlID09PSBcInRyYW5zZm9ybVwiID8gem9kUmVmLl9kZWYuZWZmZWN0IDogbnVsbFxuICAgIGlmIChlZmZlY3QgJiYgXCJ0cmFuc2Zvcm1cIiBpbiBlZmZlY3QpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIG91dHB1dCA9IHR5cGVvZiBlZmZlY3QudHJhbnNmb3JtKFxuICAgICAgICAgIFtcImludGVnZXJcIiwgXCJudW1iZXJcIl0uaW5jbHVkZXMoYCR7aW5wdXQudHlwZX1gKVxuICAgICAgICAgICAgPyAwXG4gICAgICAgICAgICA6IFwic3RyaW5nXCIgPT09IGlucHV0LnR5cGVcbiAgICAgICAgICAgID8gXCJcIlxuICAgICAgICAgICAgOiBcImJvb2xlYW5cIiA9PT0gaW5wdXQudHlwZVxuICAgICAgICAgICAgPyBmYWxzZVxuICAgICAgICAgICAgOiBcIm9iamVjdFwiID09PSBpbnB1dC50eXBlXG4gICAgICAgICAgICA/IHt9XG4gICAgICAgICAgICA6IFwibnVsbFwiID09PSBpbnB1dC50eXBlXG4gICAgICAgICAgICA/IG51bGxcbiAgICAgICAgICAgIDogXCJhcnJheVwiID09PSBpbnB1dC50eXBlXG4gICAgICAgICAgICA/IFtdXG4gICAgICAgICAgICA6IHVuZGVmaW5lZCxcbiAgICAgICAgICB7IGFkZElzc3VlOiAoKSA9PiB1bmRlZmluZWQsIHBhdGg6IFtdIH0gLy8gVE9ETzogRGlzY292ZXIgaWYgY29udGV4dCBpcyBuZWNlc3NhcnkgaGVyZVxuICAgICAgICApXG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIC8qKi9cbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIG1lcmdlKFxuICAgIHtcbiAgICAgIC4uLih6b2RSZWYuZGVzY3JpcHRpb24gPyB7IGRlc2NyaXB0aW9uOiB6b2RSZWYuZGVzY3JpcHRpb24gfSA6IHt9KSxcbiAgICAgIC4uLmlucHV0LFxuICAgICAgLi4uKFtcIm51bWJlclwiLCBcInN0cmluZ1wiLCBcImJvb2xlYW5cIiwgXCJudWxsXCJdLmluY2x1ZGVzKG91dHB1dClcbiAgICAgICAgPyB7XG4gICAgICAgICAgICB0eXBlOiBvdXRwdXQgYXMgXCJudW1iZXJcIiB8IFwic3RyaW5nXCIgfCBcImJvb2xlYW5cIiB8IFwibnVsbFwiLFxuICAgICAgICAgIH1cbiAgICAgICAgOiB7fSksXG4gICAgfSxcbiAgICAuLi5zY2hlbWFzXG4gIClcbn1cblxuZnVuY3Rpb24gcGFyc2VTdHJpbmcoe1xuICB6b2RSZWYsXG4gIHNjaGVtYXMsXG59OiBQYXJzaW5nQXJnczx6LlpvZFN0cmluZz4pOiBTY2hlbWFPYmplY3Qge1xuICBjb25zdCBiYXNlU2NoZW1hOiBTY2hlbWFPYmplY3QgPSB7XG4gICAgdHlwZTogXCJzdHJpbmdcIixcbiAgfVxuICBjb25zdCB7IGNoZWNrcyA9IFtdIH0gPSB6b2RSZWYuX2RlZlxuICBjaGVja3MuZm9yRWFjaCgoaXRlbSkgPT4ge1xuICAgIHN3aXRjaCAoaXRlbS5raW5kKSB7XG4gICAgICBjYXNlIFwiZW1haWxcIjpcbiAgICAgICAgYmFzZVNjaGVtYS5mb3JtYXQgPSBcImVtYWlsXCJcbiAgICAgICAgYnJlYWtcbiAgICAgIGNhc2UgXCJ1dWlkXCI6XG4gICAgICAgIGJhc2VTY2hlbWEuZm9ybWF0ID0gXCJ1dWlkXCJcbiAgICAgICAgYnJlYWtcbiAgICAgIGNhc2UgXCJjdWlkXCI6XG4gICAgICAgIGJhc2VTY2hlbWEuZm9ybWF0ID0gXCJjdWlkXCJcbiAgICAgICAgYnJlYWtcbiAgICAgIGNhc2UgXCJ1cmxcIjpcbiAgICAgICAgYmFzZVNjaGVtYS5mb3JtYXQgPSBcInVyaVwiXG4gICAgICAgIGJyZWFrXG4gICAgICBjYXNlIFwiZGF0ZXRpbWVcIjpcbiAgICAgICAgYmFzZVNjaGVtYS5mb3JtYXQgPSBcImRhdGUtdGltZVwiXG4gICAgICAgIGJyZWFrXG4gICAgICBjYXNlIFwibGVuZ3RoXCI6XG4gICAgICAgIGJhc2VTY2hlbWEubWluTGVuZ3RoID0gaXRlbS52YWx1ZVxuICAgICAgICBiYXNlU2NoZW1hLm1heExlbmd0aCA9IGl0ZW0udmFsdWVcbiAgICAgICAgYnJlYWtcbiAgICAgIGNhc2UgXCJtYXhcIjpcbiAgICAgICAgYmFzZVNjaGVtYS5tYXhMZW5ndGggPSBpdGVtLnZhbHVlXG4gICAgICAgIGJyZWFrXG4gICAgICBjYXNlIFwibWluXCI6XG4gICAgICAgIGJhc2VTY2hlbWEubWluTGVuZ3RoID0gaXRlbS52YWx1ZVxuICAgICAgICBicmVha1xuICAgICAgY2FzZSBcInJlZ2V4XCI6XG4gICAgICAgIGJhc2VTY2hlbWEucGF0dGVybiA9IGl0ZW0ucmVnZXguc291cmNlXG4gICAgICAgIGJyZWFrXG4gICAgfVxuICB9KVxuICByZXR1cm4gbWVyZ2UoYmFzZVNjaGVtYSwgcGFyc2VEZXNjcmlwdGlvbih6b2RSZWYpLCAuLi5zY2hlbWFzKVxufVxuXG5mdW5jdGlvbiBwYXJzZU51bWJlcih7XG4gIHpvZFJlZixcbiAgc2NoZW1hcyxcbn06IFBhcnNpbmdBcmdzPHouWm9kTnVtYmVyPik6IFNjaGVtYU9iamVjdCB7XG4gIGNvbnN0IGJhc2VTY2hlbWE6IFNjaGVtYU9iamVjdCA9IHtcbiAgICB0eXBlOiBcIm51bWJlclwiLFxuICAgIGZvcm1hdDogXCJmbG9hdFwiLFxuICB9XG4gIGNvbnN0IHsgY2hlY2tzID0gW10gfSA9IHpvZFJlZi5fZGVmXG4gIGNoZWNrcy5mb3JFYWNoKChpdGVtKSA9PiB7XG4gICAgc3dpdGNoIChpdGVtLmtpbmQpIHtcbiAgICAgIGNhc2UgXCJtYXhcIjpcbiAgICAgICAgYmFzZVNjaGVtYS5tYXhpbXVtID0gaXRlbS52YWx1ZVxuICAgICAgICAvLyBAdHMtZXhwZWN0LWVycm9yIFVQU1RSRUFNOiBUaGUgb3BlbmFwaTMtdHMgdHlwZXMgYXJlIHdyb25nOiBleGNsdXNpdmVNYXhpbXVtIGlzIGEgYm9vbGVhbiBpbiB0aGlzIHZlcnNpb24uXG4gICAgICAgIC8vIGh0dHBzOi8vc3dhZ2dlci5pby9kb2NzL3NwZWNpZmljYXRpb24vdjNfMC9kYXRhLW1vZGVscy9kYXRhLXR5cGVzL1xuICAgICAgICBpZiAoIWl0ZW0uaW5jbHVzaXZlKSBiYXNlU2NoZW1hLmV4Y2x1c2l2ZU1heGltdW0gPSB0cnVlXG4gICAgICAgIGJyZWFrXG4gICAgICBjYXNlIFwibWluXCI6XG4gICAgICAgIGJhc2VTY2hlbWEubWluaW11bSA9IGl0ZW0udmFsdWVcbiAgICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvciBVUFNUUkVBTTogVGhlIG9wZW5hcGkzLXRzIHR5cGVzIGFyZSB3cm9uZzogZXhjbHVzaXZlTWluaW11bSBpcyBhIGJvb2xlYW4gaW4gdGhpcyB2ZXJzaW9uLlxuICAgICAgICAvLyBodHRwczovL3N3YWdnZXIuaW8vZG9jcy9zcGVjaWZpY2F0aW9uL3YzXzAvZGF0YS1tb2RlbHMvZGF0YS10eXBlcy9cbiAgICAgICAgaWYgKCFpdGVtLmluY2x1c2l2ZSkgYmFzZVNjaGVtYS5leGNsdXNpdmVNaW5pbXVtID0gdHJ1ZVxuICAgICAgICBicmVha1xuICAgICAgY2FzZSBcImludFwiOlxuICAgICAgICBiYXNlU2NoZW1hLnR5cGUgPSBcImludGVnZXJcIlxuICAgICAgICBkZWxldGUgYmFzZVNjaGVtYS5mb3JtYXRcbiAgICAgICAgYnJlYWtcbiAgICAgIGNhc2UgXCJtdWx0aXBsZU9mXCI6XG4gICAgICAgIGJhc2VTY2hlbWEubXVsdGlwbGVPZiA9IGl0ZW0udmFsdWVcbiAgICB9XG4gIH0pXG4gIHJldHVybiBtZXJnZShiYXNlU2NoZW1hLCBwYXJzZURlc2NyaXB0aW9uKHpvZFJlZiksIC4uLnNjaGVtYXMpXG59XG5cbmZ1bmN0aW9uIGdldEV4Y2x1ZGVkRGVmaW5pdGlvbnNGcm9tU2NoZW1hKFxuICBzY2hlbWFzOiBBbmF0aW5lU2NoZW1hT2JqZWN0W11cbik6IHN0cmluZ1tdIHtcbiAgY29uc3QgZXhjbHVkZWREZWZpbml0aW9uczogc3RyaW5nW10gPSBbXVxuICBmb3IgKGNvbnN0IHNjaGVtYSBvZiBzY2hlbWFzKSB7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkoc2NoZW1hLmhpZGVEZWZpbml0aW9ucykpIHtcbiAgICAgIGV4Y2x1ZGVkRGVmaW5pdGlvbnMucHVzaCguLi5zY2hlbWEuaGlkZURlZmluaXRpb25zKVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBleGNsdWRlZERlZmluaXRpb25zXG59XG5cbmZ1bmN0aW9uIHBhcnNlT2JqZWN0KHtcbiAgem9kUmVmLFxuICBzY2hlbWFzLFxuICB1c2VPdXRwdXQsXG4gIGhpZGVEZWZpbml0aW9ucyxcbn06IFBhcnNpbmdBcmdzPFxuICB6LlpvZE9iamVjdDxuZXZlciwgXCJwYXNzdGhyb3VnaFwiIHwgXCJzdHJpY3RcIiB8IFwic3RyaXBcIj5cbj4pOiBTY2hlbWFPYmplY3Qge1xuICBsZXQgYWRkaXRpb25hbFByb3BlcnRpZXM6IFNjaGVtYU9iamVjdFtcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCJdXG5cbiAgLy8gYGNhdGNoYWxsYCBvYnZpYXRlcyBgc3RyaWN0YCwgYHN0cmlwYCwgYW5kIGBwYXNzdGhyb3VnaGBcbiAgaWYgKFxuICAgICEoXG4gICAgICB6b2RSZWYuX2RlZi5jYXRjaGFsbCBpbnN0YW5jZW9mIHouWm9kTmV2ZXIgfHxcbiAgICAgIHpvZFJlZi5fZGVmLmNhdGNoYWxsPy5fZGVmLnR5cGVOYW1lID09PSBcIlpvZE5ldmVyXCJcbiAgICApXG4gIClcbiAgICBhZGRpdGlvbmFsUHJvcGVydGllcyA9IGdlbmVyYXRlU2NoZW1hKHpvZFJlZi5fZGVmLmNhdGNoYWxsLCB1c2VPdXRwdXQpXG4gIGVsc2UgaWYgKHpvZFJlZi5fZGVmLnVua25vd25LZXlzID09PSBcInBhc3N0aHJvdWdoXCIpXG4gICAgYWRkaXRpb25hbFByb3BlcnRpZXMgPSB0cnVlXG4gIGVsc2UgaWYgKHpvZFJlZi5fZGVmLnVua25vd25LZXlzID09PSBcInN0cmljdFwiKSBhZGRpdGlvbmFsUHJvcGVydGllcyA9IGZhbHNlXG5cbiAgLy8gU28gdGhhdCBgdW5kZWZpbmVkYCB2YWx1ZXMgZG9uJ3QgZW5kIHVwIGluIHRoZSBzY2hlbWEgYW5kIGJlIHdlaXJkXG4gIGFkZGl0aW9uYWxQcm9wZXJ0aWVzID1cbiAgICBhZGRpdGlvbmFsUHJvcGVydGllcyAhPSBudWxsID8geyBhZGRpdGlvbmFsUHJvcGVydGllcyB9IDoge31cblxuICBjb25zdCByZXF1aXJlZFByb3BlcnRpZXMgPSBPYmplY3Qua2V5cyhcbiAgICAoem9kUmVmIGFzIHouQW55Wm9kT2JqZWN0KS5zaGFwZVxuICApLmZpbHRlcigoa2V5KSA9PiB7XG4gICAgY29uc3QgaXRlbSA9ICh6b2RSZWYgYXMgei5Bbnlab2RPYmplY3QpLnNoYXBlW2tleV1cbiAgICByZXR1cm4gKFxuICAgICAgIShcbiAgICAgICAgaXRlbS5pc09wdGlvbmFsKCkgfHxcbiAgICAgICAgaXRlbSBpbnN0YW5jZW9mIHouWm9kRGVmYXVsdCB8fFxuICAgICAgICBpdGVtLl9kZWYudHlwZU5hbWUgPT09IFwiWm9kRGVmYXVsdFwiXG4gICAgICApICYmICEoaXRlbSBpbnN0YW5jZW9mIHouWm9kTmV2ZXIgfHwgaXRlbS5fZGVmLnR5cGVOYW1lID09PSBcIlpvZERlZmF1bHRcIilcbiAgICApXG4gIH0pXG5cbiAgY29uc3QgcmVxdWlyZWQgPVxuICAgIHJlcXVpcmVkUHJvcGVydGllcy5sZW5ndGggPiAwID8geyByZXF1aXJlZDogcmVxdWlyZWRQcm9wZXJ0aWVzIH0gOiB7fVxuXG4gIHJldHVybiBtZXJnZShcbiAgICB7XG4gICAgICB0eXBlOiBcIm9iamVjdFwiIGFzIFNjaGVtYU9iamVjdFR5cGUsXG4gICAgICBwcm9wZXJ0aWVzOiBpdGVyYXRlWm9kT2JqZWN0KHtcbiAgICAgICAgem9kUmVmOiB6b2RSZWYgYXMgT3BlbkFwaVpvZEFueU9iamVjdCxcbiAgICAgICAgc2NoZW1hcyxcbiAgICAgICAgdXNlT3V0cHV0LFxuICAgICAgICBoaWRlRGVmaW5pdGlvbnM6IGdldEV4Y2x1ZGVkRGVmaW5pdGlvbnNGcm9tU2NoZW1hKHNjaGVtYXMpLFxuICAgICAgfSksXG4gICAgICAuLi5yZXF1aXJlZCxcbiAgICAgIC4uLmFkZGl0aW9uYWxQcm9wZXJ0aWVzLFxuICAgICAgLi4uaGlkZURlZmluaXRpb25zLFxuICAgIH0sXG4gICAgcGFyc2VEZXNjcmlwdGlvbih6b2RSZWYpLFxuICAgIC4uLnNjaGVtYXNcbiAgKVxufVxuXG5mdW5jdGlvbiBwYXJzZVJlY29yZCh7XG4gIHpvZFJlZixcbiAgc2NoZW1hcyxcbiAgdXNlT3V0cHV0LFxufTogUGFyc2luZ0FyZ3M8ei5ab2RSZWNvcmQ+KTogU2NoZW1hT2JqZWN0IHtcbiAgcmV0dXJuIG1lcmdlKFxuICAgIHtcbiAgICAgIHR5cGU6IFwib2JqZWN0XCIgYXMgU2NoZW1hT2JqZWN0VHlwZSxcbiAgICAgIGFkZGl0aW9uYWxQcm9wZXJ0aWVzOlxuICAgICAgICB6b2RSZWYuX2RlZi52YWx1ZVR5cGUgaW5zdGFuY2VvZiB6LlpvZFVua25vd25cbiAgICAgICAgICA/IHt9XG4gICAgICAgICAgOiBnZW5lcmF0ZVNjaGVtYSh6b2RSZWYuX2RlZi52YWx1ZVR5cGUsIHVzZU91dHB1dCksXG4gICAgfSxcbiAgICBwYXJzZURlc2NyaXB0aW9uKHpvZFJlZiksXG4gICAgLi4uc2NoZW1hc1xuICApXG59XG5cbmZ1bmN0aW9uIHBhcnNlQmlnSW50KHtcbiAgem9kUmVmLFxuICBzY2hlbWFzLFxufTogUGFyc2luZ0FyZ3M8ei5ab2RCaWdJbnQ+KTogU2NoZW1hT2JqZWN0IHtcbiAgcmV0dXJuIG1lcmdlKFxuICAgIHsgdHlwZTogXCJpbnRlZ2VyXCIgYXMgU2NoZW1hT2JqZWN0VHlwZSwgZm9ybWF0OiBcImludDY0XCIgfSxcbiAgICBwYXJzZURlc2NyaXB0aW9uKHpvZFJlZiksXG4gICAgLi4uc2NoZW1hc1xuICApXG59XG5cbmZ1bmN0aW9uIHBhcnNlQm9vbGVhbih7XG4gIHpvZFJlZixcbiAgc2NoZW1hcyxcbn06IFBhcnNpbmdBcmdzPHouWm9kQm9vbGVhbj4pOiBTY2hlbWFPYmplY3Qge1xuICByZXR1cm4gbWVyZ2UoXG4gICAgeyB0eXBlOiBcImJvb2xlYW5cIiBhcyBTY2hlbWFPYmplY3RUeXBlIH0sXG4gICAgcGFyc2VEZXNjcmlwdGlvbih6b2RSZWYpLFxuICAgIC4uLnNjaGVtYXNcbiAgKVxufVxuXG5mdW5jdGlvbiBwYXJzZURhdGUoeyB6b2RSZWYsIHNjaGVtYXMgfTogUGFyc2luZ0FyZ3M8ei5ab2REYXRlPik6IFNjaGVtYU9iamVjdCB7XG4gIHJldHVybiBtZXJnZShcbiAgICB7IHR5cGU6IFwic3RyaW5nXCIgYXMgU2NoZW1hT2JqZWN0VHlwZSwgZm9ybWF0OiBcImRhdGUtdGltZVwiIH0sXG4gICAgcGFyc2VEZXNjcmlwdGlvbih6b2RSZWYpLFxuICAgIC4uLnNjaGVtYXNcbiAgKVxufVxuXG5mdW5jdGlvbiBwYXJzZU51bGwoeyB6b2RSZWYsIHNjaGVtYXMgfTogUGFyc2luZ0FyZ3M8ei5ab2ROdWxsPik6IFNjaGVtYU9iamVjdCB7XG4gIHJldHVybiBtZXJnZShcbiAgICB7XG4gICAgICBudWxsYWJsZTogdHJ1ZSxcbiAgICB9LFxuICAgIHBhcnNlRGVzY3JpcHRpb24oem9kUmVmKSxcbiAgICAuLi5zY2hlbWFzXG4gIClcbn1cblxuZnVuY3Rpb24gcGFyc2VPcHRpb25hbCh7XG4gIHNjaGVtYXMsXG4gIHpvZFJlZixcbiAgdXNlT3V0cHV0LFxufTogUGFyc2luZ0FyZ3M8ei5ab2RPcHRpb25hbDxPcGVuQXBpWm9kQW55Pj4pOiBTY2hlbWFPYmplY3Qge1xuICByZXR1cm4gbWVyZ2UoXG4gICAgZ2VuZXJhdGVTY2hlbWEoem9kUmVmLnVud3JhcCgpLCB1c2VPdXRwdXQpLFxuICAgIHBhcnNlRGVzY3JpcHRpb24oem9kUmVmKSxcbiAgICAuLi5zY2hlbWFzXG4gIClcbn1cblxuZnVuY3Rpb24gcGFyc2VOdWxsYWJsZSh7XG4gIHNjaGVtYXMsXG4gIHpvZFJlZixcbiAgdXNlT3V0cHV0LFxufTogUGFyc2luZ0FyZ3M8ei5ab2ROdWxsYWJsZTxPcGVuQXBpWm9kQW55Pj4pOiBTY2hlbWFPYmplY3Qge1xuICBjb25zdCBzY2hlbWEgPSBnZW5lcmF0ZVNjaGVtYSh6b2RSZWYudW53cmFwKCksIHVzZU91dHB1dClcbiAgcmV0dXJuIG1lcmdlKFxuICAgIHsgLi4uc2NoZW1hLCB0eXBlOiBzY2hlbWEudHlwZSwgbnVsbGFibGU6IHRydWUgfSxcbiAgICBwYXJzZURlc2NyaXB0aW9uKHpvZFJlZiksXG4gICAgLi4uc2NoZW1hc1xuICApXG59XG5cbmZ1bmN0aW9uIHBhcnNlRGVmYXVsdCh7XG4gIHNjaGVtYXMsXG4gIHpvZFJlZixcbiAgdXNlT3V0cHV0LFxufTogUGFyc2luZ0FyZ3M8ei5ab2REZWZhdWx0PE9wZW5BcGlab2RBbnk+Pik6IFNjaGVtYU9iamVjdCB7XG4gIHJldHVybiBtZXJnZShcbiAgICB7XG4gICAgICBkZWZhdWx0OiB6b2RSZWYuX2RlZi5kZWZhdWx0VmFsdWUoKSxcbiAgICAgIC4uLmdlbmVyYXRlU2NoZW1hKHpvZFJlZi5fZGVmLmlubmVyVHlwZSwgdXNlT3V0cHV0KSxcbiAgICB9LFxuICAgIHBhcnNlRGVzY3JpcHRpb24oem9kUmVmKSxcbiAgICAuLi5zY2hlbWFzXG4gIClcbn1cblxuZnVuY3Rpb24gcGFyc2VBcnJheSh7XG4gIHNjaGVtYXMsXG4gIHpvZFJlZixcbiAgdXNlT3V0cHV0LFxufTogUGFyc2luZ0FyZ3M8ei5ab2RBcnJheTxPcGVuQXBpWm9kQW55Pj4pOiBTY2hlbWFPYmplY3Qge1xuICBjb25zdCBjb25zdHJhaW50czogU2NoZW1hT2JqZWN0ID0ge31cbiAgaWYgKHpvZFJlZi5fZGVmLmV4YWN0TGVuZ3RoICE9IG51bGwpIHtcbiAgICBjb25zdHJhaW50cy5taW5JdGVtcyA9IHpvZFJlZi5fZGVmLmV4YWN0TGVuZ3RoLnZhbHVlXG4gICAgY29uc3RyYWludHMubWF4SXRlbXMgPSB6b2RSZWYuX2RlZi5leGFjdExlbmd0aC52YWx1ZVxuICB9XG5cbiAgaWYgKHpvZFJlZi5fZGVmLm1pbkxlbmd0aCAhPSBudWxsKVxuICAgIGNvbnN0cmFpbnRzLm1pbkl0ZW1zID0gem9kUmVmLl9kZWYubWluTGVuZ3RoLnZhbHVlXG4gIGlmICh6b2RSZWYuX2RlZi5tYXhMZW5ndGggIT0gbnVsbClcbiAgICBjb25zdHJhaW50cy5tYXhJdGVtcyA9IHpvZFJlZi5fZGVmLm1heExlbmd0aC52YWx1ZVxuXG4gIHJldHVybiBtZXJnZShcbiAgICB7XG4gICAgICB0eXBlOiBcImFycmF5XCIgYXMgU2NoZW1hT2JqZWN0VHlwZSxcbiAgICAgIGl0ZW1zOiBnZW5lcmF0ZVNjaGVtYSh6b2RSZWYuZWxlbWVudCwgdXNlT3V0cHV0KSxcbiAgICAgIC4uLmNvbnN0cmFpbnRzLFxuICAgIH0sXG4gICAgcGFyc2VEZXNjcmlwdGlvbih6b2RSZWYpLFxuICAgIC4uLnNjaGVtYXNcbiAgKVxufVxuXG5mdW5jdGlvbiBwYXJzZUxpdGVyYWwoe1xuICBzY2hlbWFzLFxuICB6b2RSZWYsXG59OiBQYXJzaW5nQXJnczx6LlpvZExpdGVyYWw8T3BlbkFwaVpvZEFueT4+KTogU2NoZW1hT2JqZWN0IHtcbiAgcmV0dXJuIG1lcmdlKFxuICAgIHtcbiAgICAgIHR5cGU6IHR5cGVvZiB6b2RSZWYuX2RlZi52YWx1ZSBhcyBcInN0cmluZ1wiIHwgXCJudW1iZXJcIiB8IFwiYm9vbGVhblwiLFxuICAgICAgZW51bTogW3pvZFJlZi5fZGVmLnZhbHVlXSxcbiAgICB9LFxuICAgIHBhcnNlRGVzY3JpcHRpb24oem9kUmVmKSxcbiAgICAuLi5zY2hlbWFzXG4gIClcbn1cblxuZnVuY3Rpb24gcGFyc2VFbnVtKHtcbiAgc2NoZW1hcyxcbiAgem9kUmVmLFxufTogUGFyc2luZ0FyZ3M8ei5ab2RFbnVtPG5ldmVyPiB8IHouWm9kTmF0aXZlRW51bTxuZXZlcj4+KTogU2NoZW1hT2JqZWN0IHtcbiAgcmV0dXJuIG1lcmdlKFxuICAgIHtcbiAgICAgIHR5cGU6IHR5cGVvZiBPYmplY3QudmFsdWVzKHpvZFJlZi5fZGVmLnZhbHVlcylbMF0gYXMgXCJzdHJpbmdcIiB8IFwibnVtYmVyXCIsXG4gICAgICBlbnVtOiBPYmplY3QudmFsdWVzKHpvZFJlZi5fZGVmLnZhbHVlcyksXG4gICAgfSxcbiAgICBwYXJzZURlc2NyaXB0aW9uKHpvZFJlZiksXG4gICAgLi4uc2NoZW1hc1xuICApXG59XG5cbmZ1bmN0aW9uIHBhcnNlSW50ZXJzZWN0aW9uKHtcbiAgc2NoZW1hcyxcbiAgem9kUmVmLFxuICB1c2VPdXRwdXQsXG59OiBQYXJzaW5nQXJnczx6LlpvZEludGVyc2VjdGlvbjx6LlpvZFR5cGVBbnksIHouWm9kVHlwZUFueT4+KTogU2NoZW1hT2JqZWN0IHtcbiAgcmV0dXJuIG1lcmdlKFxuICAgIHtcbiAgICAgIGFsbE9mOiBbXG4gICAgICAgIGdlbmVyYXRlU2NoZW1hKHpvZFJlZi5fZGVmLmxlZnQsIHVzZU91dHB1dCksXG4gICAgICAgIGdlbmVyYXRlU2NoZW1hKHpvZFJlZi5fZGVmLnJpZ2h0LCB1c2VPdXRwdXQpLFxuICAgICAgXSxcbiAgICB9LFxuICAgIHBhcnNlRGVzY3JpcHRpb24oem9kUmVmKSxcbiAgICAuLi5zY2hlbWFzXG4gIClcbn1cblxuZnVuY3Rpb24gcGFyc2VVbmlvbih7XG4gIHNjaGVtYXMsXG4gIHpvZFJlZixcbiAgdXNlT3V0cHV0LFxufTogUGFyc2luZ0FyZ3M8ei5ab2RVbmlvbjxbei5ab2RUeXBlQW55LCAuLi56LlpvZFR5cGVBbnlbXV0+Pik6IFNjaGVtYU9iamVjdCB7XG4gIGNvbnN0IGNvbnRlbnRzID0gem9kUmVmLl9kZWYub3B0aW9uc1xuICBpZiAoXG4gICAgY29udGVudHMucmVkdWNlKFxuICAgICAgKHByZXYsIGNvbnRlbnQpID0+IHByZXYgJiYgY29udGVudC5fZGVmLnR5cGVOYW1lID09PSBcIlpvZExpdGVyYWxcIixcbiAgICAgIHRydWVcbiAgICApXG4gICkge1xuICAgIC8vIHNwZWNpYWwgY2FzZSB0byB0cmFuc2Zvcm0gdW5pb25zIG9mIGxpdGVyYWxzIGludG8gZW51bXNcbiAgICBjb25zdCBsaXRlcmFscyA9IGNvbnRlbnRzIGFzIHVua25vd24gYXMgei5ab2RMaXRlcmFsPE9wZW5BcGlab2RBbnk+W11cbiAgICBjb25zdCB0eXBlID0gbGl0ZXJhbHMucmVkdWNlKFxuICAgICAgKHByZXYsIGNvbnRlbnQpID0+XG4gICAgICAgICFwcmV2IHx8IHByZXYgPT09IHR5cGVvZiBjb250ZW50Ll9kZWYudmFsdWVcbiAgICAgICAgICA/IHR5cGVvZiBjb250ZW50Ll9kZWYudmFsdWVcbiAgICAgICAgICA6IG51bGwsXG4gICAgICBudWxsIGFzIG51bGwgfCBzdHJpbmdcbiAgICApXG5cbiAgICBpZiAodHlwZSkge1xuICAgICAgcmV0dXJuIG1lcmdlKFxuICAgICAgICB7XG4gICAgICAgICAgdHlwZTogdHlwZSBhcyBcInN0cmluZ1wiIHwgXCJudW1iZXJcIiB8IFwiYm9vbGVhblwiLFxuICAgICAgICAgIGVudW06IGxpdGVyYWxzLm1hcCgobGl0ZXJhbCkgPT4gbGl0ZXJhbC5fZGVmLnZhbHVlKSxcbiAgICAgICAgfSxcbiAgICAgICAgcGFyc2VEZXNjcmlwdGlvbih6b2RSZWYpLFxuICAgICAgICAuLi5zY2hlbWFzXG4gICAgICApXG4gICAgfVxuICB9XG5cbiAgY29uc3QgaXNOdWxsYWJsZSA9IGNvbnRlbnRzLnNvbWUoXG4gICAgKGNvbnRlbnQpID0+IGNvbnRlbnQuX2RlZi50eXBlTmFtZSA9PT0gXCJab2ROdWxsXCJcbiAgKVxuICBjb25zdCBub25OdWxsQ29udGVudHMgPSBjb250ZW50cy5maWx0ZXIoXG4gICAgKGNvbnRlbnQpID0+IGNvbnRlbnQuX2RlZi50eXBlTmFtZSAhPT0gXCJab2ROdWxsXCJcbiAgKVxuXG4gIHJldHVybiBtZXJnZShcbiAgICB7XG4gICAgICBvbmVPZjogbm9uTnVsbENvbnRlbnRzLm1hcCgoc2NoZW1hKSA9PiBnZW5lcmF0ZVNjaGVtYShzY2hlbWEsIHVzZU91dHB1dCkpLFxuICAgICAgLi4uKGlzTnVsbGFibGUgPyB7IG51bGxhYmxlOiB0cnVlIH0gOiB7fSksXG4gICAgfSxcbiAgICBwYXJzZURlc2NyaXB0aW9uKHpvZFJlZiksXG4gICAgLi4uc2NoZW1hc1xuICApXG59XG5cbmZ1bmN0aW9uIHBhcnNlRGlzY3JpbWluYXRlZFVuaW9uKHtcbiAgc2NoZW1hcyxcbiAgem9kUmVmLFxuICB1c2VPdXRwdXQsXG59OiBQYXJzaW5nQXJnczxcbiAgei5ab2REaXNjcmltaW5hdGVkVW5pb248c3RyaW5nLCB6LlpvZERpc2NyaW1pbmF0ZWRVbmlvbk9wdGlvbjxzdHJpbmc+W10+XG4+KTogU2NoZW1hT2JqZWN0IHtcbiAgcmV0dXJuIG1lcmdlKFxuICAgIHtcbiAgICAgIGRpc2NyaW1pbmF0b3I6IHtcbiAgICAgICAgcHJvcGVydHlOYW1lOiAoXG4gICAgICAgICAgem9kUmVmIGFzIHouWm9kRGlzY3JpbWluYXRlZFVuaW9uPFxuICAgICAgICAgICAgc3RyaW5nLFxuICAgICAgICAgICAgei5ab2REaXNjcmltaW5hdGVkVW5pb25PcHRpb248c3RyaW5nPltdXG4gICAgICAgICAgPlxuICAgICAgICApLl9kZWYuZGlzY3JpbWluYXRvcixcbiAgICAgIH0sXG4gICAgICBvbmVPZjogQXJyYXkuZnJvbShcbiAgICAgICAgKFxuICAgICAgICAgIHpvZFJlZiBhcyB6LlpvZERpc2NyaW1pbmF0ZWRVbmlvbjxcbiAgICAgICAgICAgIHN0cmluZyxcbiAgICAgICAgICAgIHouWm9kRGlzY3JpbWluYXRlZFVuaW9uT3B0aW9uPHN0cmluZz5bXVxuICAgICAgICAgID5cbiAgICAgICAgKS5fZGVmLm9wdGlvbnMudmFsdWVzKClcbiAgICAgICkubWFwKChzY2hlbWEpID0+IGdlbmVyYXRlU2NoZW1hKHNjaGVtYSwgdXNlT3V0cHV0KSksXG4gICAgfSxcbiAgICBwYXJzZURlc2NyaXB0aW9uKHpvZFJlZiksXG4gICAgLi4uc2NoZW1hc1xuICApXG59XG5cbmZ1bmN0aW9uIHBhcnNlTmV2ZXIoe1xuICB6b2RSZWYsXG4gIHNjaGVtYXMsXG59OiBQYXJzaW5nQXJnczx6LlpvZE5ldmVyPik6IFNjaGVtYU9iamVjdCB7XG4gIHJldHVybiBtZXJnZSh7IHJlYWRPbmx5OiB0cnVlIH0sIHBhcnNlRGVzY3JpcHRpb24oem9kUmVmKSwgLi4uc2NoZW1hcylcbn1cblxuZnVuY3Rpb24gcGFyc2VCcmFuZGVkKHtcbiAgc2NoZW1hcyxcbiAgem9kUmVmLFxufTogUGFyc2luZ0FyZ3M8ei5ab2RCcmFuZGVkPHouWm9kQW55LCBzdHJpbmc+Pik6IFNjaGVtYU9iamVjdCB7XG4gIHJldHVybiBtZXJnZShnZW5lcmF0ZVNjaGVtYSh6b2RSZWYuX2RlZi50eXBlKSwgLi4uc2NoZW1hcylcbn1cblxuZnVuY3Rpb24gY2F0Y2hBbGxQYXJzZXIoe1xuICB6b2RSZWYsXG4gIHNjaGVtYXMsXG59OiBQYXJzaW5nQXJnczxab2RUeXBlQW55Pik6IFNjaGVtYU9iamVjdCB7XG4gIHJldHVybiBtZXJnZShwYXJzZURlc2NyaXB0aW9uKHpvZFJlZiksIC4uLnNjaGVtYXMpXG59XG5cbmZ1bmN0aW9uIHBhcnNlUGlwZWxpbmUoe1xuICB6b2RSZWYsXG4gIHVzZU91dHB1dCxcbn06IFBhcnNpbmdBcmdzPHouWm9kUGlwZWxpbmU8bmV2ZXIsIG5ldmVyPj4pOiBTY2hlbWFPYmplY3Qge1xuICBpZiAodXNlT3V0cHV0KSB7XG4gICAgcmV0dXJuIGdlbmVyYXRlU2NoZW1hKHpvZFJlZi5fZGVmLm91dCwgdXNlT3V0cHV0KVxuICB9XG4gIHJldHVybiBnZW5lcmF0ZVNjaGVtYSh6b2RSZWYuX2RlZi5pbiwgdXNlT3V0cHV0KVxufVxuXG5mdW5jdGlvbiBwYXJzZVJlYWRvbmx5KHtcbiAgem9kUmVmLFxuICB1c2VPdXRwdXQsXG4gIHNjaGVtYXMsXG59OiBQYXJzaW5nQXJnczx6LlpvZFJlYWRvbmx5PHouWm9kQW55Pj4pOiBTY2hlbWFPYmplY3Qge1xuICByZXR1cm4gbWVyZ2UoXG4gICAgZ2VuZXJhdGVTY2hlbWEoem9kUmVmLl9kZWYuaW5uZXJUeXBlLCB1c2VPdXRwdXQpLFxuICAgIHBhcnNlRGVzY3JpcHRpb24oem9kUmVmKSxcbiAgICAuLi5zY2hlbWFzXG4gIClcbn1cblxuY29uc3Qgd29ya2VyTWFwID0ge1xuICBab2RPYmplY3Q6IHBhcnNlT2JqZWN0LFxuICBab2RSZWNvcmQ6IHBhcnNlUmVjb3JkLFxuICBab2RTdHJpbmc6IHBhcnNlU3RyaW5nLFxuICBab2ROdW1iZXI6IHBhcnNlTnVtYmVyLFxuICBab2RCaWdJbnQ6IHBhcnNlQmlnSW50LFxuICBab2RCb29sZWFuOiBwYXJzZUJvb2xlYW4sXG4gIFpvZERhdGU6IHBhcnNlRGF0ZSxcbiAgWm9kTnVsbDogcGFyc2VOdWxsLFxuICBab2RPcHRpb25hbDogcGFyc2VPcHRpb25hbCxcbiAgWm9kTnVsbGFibGU6IHBhcnNlTnVsbGFibGUsXG4gIFpvZERlZmF1bHQ6IHBhcnNlRGVmYXVsdCxcbiAgWm9kQXJyYXk6IHBhcnNlQXJyYXksXG4gIFpvZExpdGVyYWw6IHBhcnNlTGl0ZXJhbCxcbiAgWm9kRW51bTogcGFyc2VFbnVtLFxuICBab2ROYXRpdmVFbnVtOiBwYXJzZUVudW0sXG4gIFpvZFRyYW5zZm9ybWVyOiBwYXJzZVRyYW5zZm9ybWF0aW9uLFxuICBab2RFZmZlY3RzOiBwYXJzZVRyYW5zZm9ybWF0aW9uLFxuICBab2RJbnRlcnNlY3Rpb246IHBhcnNlSW50ZXJzZWN0aW9uLFxuICBab2RVbmlvbjogcGFyc2VVbmlvbixcbiAgWm9kRGlzY3JpbWluYXRlZFVuaW9uOiBwYXJzZURpc2NyaW1pbmF0ZWRVbmlvbixcbiAgWm9kTmV2ZXI6IHBhcnNlTmV2ZXIsXG4gIFpvZEJyYW5kZWQ6IHBhcnNlQnJhbmRlZCxcbiAgLy8gVE9ETyBUcmFuc2Zvcm0gdGhlIHJlc3QgdG8gc2NoZW1hc1xuICBab2RVbmRlZmluZWQ6IGNhdGNoQWxsUGFyc2VyLFxuICAvLyBUT0RPOiBgcHJlZml4SXRlbXNgIGlzIGFsbG93ZWQgaW4gT3BlbkFQSSAzLjEgd2hpY2ggY2FuIGJlIHVzZWQgdG8gY3JlYXRlIHR1cGxlc1xuICBab2RUdXBsZTogY2F0Y2hBbGxQYXJzZXIsXG4gIFpvZE1hcDogY2F0Y2hBbGxQYXJzZXIsXG4gIFpvZEZ1bmN0aW9uOiBjYXRjaEFsbFBhcnNlcixcbiAgWm9kTGF6eTogY2F0Y2hBbGxQYXJzZXIsXG4gIFpvZFByb21pc2U6IGNhdGNoQWxsUGFyc2VyLFxuICBab2RBbnk6IGNhdGNoQWxsUGFyc2VyLFxuICBab2RVbmtub3duOiBjYXRjaEFsbFBhcnNlcixcbiAgWm9kVm9pZDogY2F0Y2hBbGxQYXJzZXIsXG4gIFpvZFBpcGVsaW5lOiBwYXJzZVBpcGVsaW5lLFxuICBab2RSZWFkb25seTogcGFyc2VSZWFkb25seSxcbn1cbnR5cGUgV29ya2VyS2V5cyA9IGtleW9mIHR5cGVvZiB3b3JrZXJNYXBcblxuZXhwb3J0IGZ1bmN0aW9uIGdlbmVyYXRlU2NoZW1hKFxuICB6b2RSZWY6IE9wZW5BcGlab2RBbnksXG4gIHVzZU91dHB1dD86IGJvb2xlYW5cbik6IFNjaGVtYU9iamVjdCB7XG4gIGNvbnN0IHsgbWV0YU9wZW5BcGkgPSB7fSB9ID0gem9kUmVmXG4gIGNvbnN0IHNjaGVtYXM6IEFuYXRpbmVTY2hlbWFPYmplY3RbXSA9IFtcbiAgICAuLi4oQXJyYXkuaXNBcnJheShtZXRhT3BlbkFwaSkgPyBtZXRhT3BlbkFwaSA6IFttZXRhT3BlbkFwaV0pLFxuICBdXG4gIHRyeSB7XG4gICAgY29uc3QgdHlwZU5hbWUgPSB6b2RSZWYuX2RlZi50eXBlTmFtZSBhcyBXb3JrZXJLZXlzXG4gICAgaWYgKHR5cGVOYW1lIGluIHdvcmtlck1hcCkge1xuICAgICAgcmV0dXJuIHdvcmtlck1hcFt0eXBlTmFtZV0oe1xuICAgICAgICB6b2RSZWY6IHpvZFJlZiBhcyBuZXZlcixcbiAgICAgICAgc2NoZW1hcyxcbiAgICAgICAgdXNlT3V0cHV0LFxuICAgICAgfSlcbiAgICB9XG5cbiAgICByZXR1cm4gY2F0Y2hBbGxQYXJzZXIoeyB6b2RSZWYsIHNjaGVtYXMgfSlcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgY29uc29sZS5lcnJvcihlcnIpXG4gICAgcmV0dXJuIGNhdGNoQWxsUGFyc2VyKHsgem9kUmVmLCBzY2hlbWFzIH0pXG4gIH1cbn1cbiIsICIvKipcbiAqIEZyb250LU1hdHRlclxuICpcbiAqIFZlbmRvcmVkIGZyb20gaHR0cHM6Ly9naXRodWIuY29tL2p4c29uL2Zyb250LW1hdHRlclxuICpcbiAqIE1JVCBMaWNlbnNlXG4gKlxuICogQ29weXJpZ2h0IChjKSBKYXNvbiBDYW1wYmVsbCAoXCJBdXRob3JcIilcbiAqXG4gKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5XG4gKiBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLCB0byBkZWFsXG4gKiBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzXG4gKiB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsXG4gKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXNcbiAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4gKlxuICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsXG4gKiBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuICpcbiAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1JcbiAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLFxuICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFXG4gKiBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSXG4gKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLFxuICogT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEVcbiAqIFNPRlRXQVJFLlxuICovXG5cbmltcG9ydCB7IGxvYWQgfSBmcm9tIFwianMteWFtbFwiXG5jb25zdCBvcHRpb25hbEJ5dGVPcmRlck1hcmsgPSBcIlxcXFx1ZmVmZj9cIlxuY29uc3QgcGxhdGZvcm0gPSB0eXBlb2YgcHJvY2VzcyAhPT0gXCJ1bmRlZmluZWRcIiA/IHByb2Nlc3MucGxhdGZvcm0gOiBcIlwiXG5jb25zdCBwYXR0ZXJuID1cbiAgXCJeKFwiICtcbiAgb3B0aW9uYWxCeXRlT3JkZXJNYXJrICtcbiAgXCIoPSB5YW1sID18LS0tKVwiICtcbiAgXCIkKFtcXFxcc1xcXFxTXSo/KVwiICtcbiAgXCJeKD86XFxcXDJ8XFxcXC5cXFxcLlxcXFwuKVxcXFxzKlwiICtcbiAgXCIkXCIgK1xuICAocGxhdGZvcm0gPT09IFwid2luMzJcIiA/IFwiXFxcXHI/XCIgOiBcIlwiKSArXG4gIFwiKD86XFxcXG4pPylcIlxuLy8gTk9URTogSWYgdGhpcyBwYXR0ZXJuIHVzZXMgdGhlICdnJyBmbGFnIHRoZSBgcmVnZXhgIHZhcmlhYmxlIGRlZmluaXRpb24gd2lsbFxuLy8gbmVlZCB0byBiZSBtb3ZlZCBkb3duIGludG8gdGhlIGZ1bmN0aW9ucyB0aGF0IHVzZSBpdC5cbmNvbnN0IHJlZ2V4ID0gbmV3IFJlZ0V4cChwYXR0ZXJuLCBcIm1cIilcblxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlRnJvbnRNYXR0ZXIoXG4gIHN0cmluZzogc3RyaW5nLFxuICBvcHRpb25zID0ge31cbik6IHsgYXR0cmlidXRlczogUmVjb3JkPHN0cmluZywgdW5rbm93bj47IGJvZHk6IHN0cmluZzsgYm9keUJlZ2luOiBudW1iZXIgfSB7XG4gIHN0cmluZyA9IHN0cmluZyB8fCBcIlwiXG4gIHZhciBkZWZhdWx0T3B0aW9ucyA9IHsgYWxsb3dVbnNhZmU6IGZhbHNlIH1cbiAgb3B0aW9ucyA9XG4gICAgb3B0aW9ucyBpbnN0YW5jZW9mIE9iamVjdFxuICAgICAgPyB7IC4uLmRlZmF1bHRPcHRpb25zLCAuLi5vcHRpb25zIH1cbiAgICAgIDogZGVmYXVsdE9wdGlvbnNcbiAgdmFyIGxpbmVzID0gc3RyaW5nLnNwbGl0KC8oXFxyP1xcbikvKVxuICBpZiAobGluZXNbMF0gJiYgLz0geWFtbCA9fC0tLS8udGVzdChsaW5lc1swXSkpIHtcbiAgICByZXR1cm4gcGFyc2Uoc3RyaW5nKVxuICB9IGVsc2Uge1xuICAgIHJldHVybiB7XG4gICAgICBhdHRyaWJ1dGVzOiB7fSxcbiAgICAgIGJvZHk6IHN0cmluZyxcbiAgICAgIGJvZHlCZWdpbjogMSxcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gY29tcHV0ZUxvY2F0aW9uKG1hdGNoOiBSZWdFeHBFeGVjQXJyYXksIGJvZHk6IHN0cmluZykge1xuICB2YXIgbGluZSA9IDFcbiAgdmFyIHBvcyA9IGJvZHkuaW5kZXhPZihcIlxcblwiKVxuICB2YXIgb2Zmc2V0ID0gbWF0Y2guaW5kZXggKyBtYXRjaFswXS5sZW5ndGhcblxuICB3aGlsZSAocG9zICE9PSAtMSkge1xuICAgIGlmIChwb3MgPj0gb2Zmc2V0KSB7XG4gICAgICByZXR1cm4gbGluZVxuICAgIH1cbiAgICBsaW5lKytcbiAgICBwb3MgPSBib2R5LmluZGV4T2YoXCJcXG5cIiwgcG9zICsgMSlcbiAgfVxuXG4gIHJldHVybiBsaW5lXG59XG5cbmZ1bmN0aW9uIHBhcnNlKHN0cmluZzogc3RyaW5nKToge1xuICBhdHRyaWJ1dGVzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPlxuICBib2R5OiBzdHJpbmdcbiAgYm9keUJlZ2luOiBudW1iZXJcbn0ge1xuICB2YXIgbWF0Y2ggPSByZWdleC5leGVjKHN0cmluZylcbiAgaWYgKCFtYXRjaCkge1xuICAgIHJldHVybiB7XG4gICAgICBhdHRyaWJ1dGVzOiB7fSxcbiAgICAgIGJvZHk6IHN0cmluZyxcbiAgICAgIGJvZHlCZWdpbjogMSxcbiAgICB9XG4gIH1cblxuICB2YXIgeWFtbCA9IG1hdGNoW21hdGNoLmxlbmd0aCAtIDFdLnJlcGxhY2UoL15cXHMrfFxccyskL2csIFwiXCIpXG4gIHZhciBhdHRyaWJ1dGVzID0gKGxvYWQoeWFtbCkgfHwge30pIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+XG4gIHZhciBib2R5ID0gc3RyaW5nLnJlcGxhY2UobWF0Y2hbMF0sIFwiXCIpXG4gIHZhciBsaW5lID0gY29tcHV0ZUxvY2F0aW9uKG1hdGNoLCBzdHJpbmcpXG5cbiAgcmV0dXJuIHtcbiAgICBhdHRyaWJ1dGVzOiBhdHRyaWJ1dGVzLFxuICAgIGJvZHk6IGJvZHksXG4gICAgYm9keUJlZ2luOiBsaW5lLFxuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0ZXN0RnJvbnRNYXR0ZXIoc3RyaW5nOiBzdHJpbmcpIHtcbiAgc3RyaW5nID0gc3RyaW5nIHx8IFwiXCJcblxuICByZXR1cm4gcmVnZXgudGVzdChzdHJpbmcpXG59XG4iLCAidHlwZSBQcmVmaXhlZE9iamVjdDxUPiA9IHtcbiAgW0sgaW4ga2V5b2YgVCBhcyBgeC0ke3N0cmluZyAmIEt9YF06IFRbS11cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByZWZpeE9iamVjdEtleXNXaXRoWDxUIGV4dGVuZHMgb2JqZWN0PihcbiAgb2JqOiBUXG4pOiBQcmVmaXhlZE9iamVjdDxUPiB7XG4gIHJldHVybiBPYmplY3QuZnJvbUVudHJpZXMoXG4gICAgT2JqZWN0LmVudHJpZXMob2JqKS5tYXAoKFtrZXksIHZhbHVlXSkgPT4gW2B4LSR7a2V5fWAsIHZhbHVlXSlcbiAgKSBhcyBQcmVmaXhlZE9iamVjdDxUPlxufVxuIiwgInR5cGUgU25ha2VUb0Rhc2g8VD4gPSB7XG4gIFtLIGluIGtleW9mIFQgYXMgSyBleHRlbmRzIHN0cmluZyA/IFNuYWtlVG9EYXNoU3RyaW5nPEs+IDogS106IFRbS11cbn1cblxudHlwZSBTbmFrZVRvRGFzaFN0cmluZzxTIGV4dGVuZHMgc3RyaW5nPiA9IFMgZXh0ZW5kcyBgJHtpbmZlciBUfV8ke2luZmVyIFV9YFxuICA/IGAke1R9LSR7U25ha2VUb0Rhc2hTdHJpbmc8VT59YFxuICA6IFNcblxuZXhwb3J0IGZ1bmN0aW9uIGRhc2hpZnlPYmplY3RLZXlzPFQgZXh0ZW5kcyBvYmplY3Q+KG9iajogVCk6IFNuYWtlVG9EYXNoPFQ+IHtcbiAgcmV0dXJuIE9iamVjdC5mcm9tRW50cmllcyhcbiAgICBPYmplY3QuZW50cmllcyhvYmopLm1hcCgoW2tleSwgdmFsdWVdKSA9PiBba2V5LnJlcGxhY2UoL18vZywgXCItXCIpLCB2YWx1ZV0pXG4gICkgYXMgU25ha2VUb0Rhc2g8VD5cbn1cbiIsICJpbXBvcnQgXyBmcm9tIFwibG9kYXNoXCJcblxuZnVuY3Rpb24gZmluZEtleUluT2JqKG9iajogYW55LCB2YWx1ZTogYW55KTogc3RyaW5nIHwgbnVsbCB7XG4gIGxldCByZXN1bHRLZXk6IHN0cmluZyB8IG51bGwgPSBudWxsXG4gIF8uZm9yT3duKG9iaiwgKHYsIGspID0+IHtcbiAgICBpZiAoXy5pc09iamVjdCh2KSAmJiBfLmlzTWF0Y2godiwgdmFsdWUpKSB7XG4gICAgICByZXN1bHRLZXkgPSBrXG4gICAgICAvLyBTdG9wIHRoZSBpdGVyYXRpb25cbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH1cbiAgfSlcbiAgcmV0dXJuIHJlc3VsdEtleVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZW1iZWRTY2hlbWFSZWZlcmVuY2VzKG9iajE6IGFueSwgb2JqMjogYW55KTogYW55IHtcbiAgcmV0dXJuIF8udHJhbnNmb3JtKG9iajEsIChyZXN1bHQsIHZhbHVlLCBrZXkpID0+IHtcbiAgICBpZiAoXy5pc09iamVjdCh2YWx1ZSkpIHtcbiAgICAgIGNvbnN0IG1hdGNoaW5nS2V5ID0gZmluZEtleUluT2JqKG9iajIsIHZhbHVlKVxuICAgICAgaWYgKG1hdGNoaW5nS2V5KSB7XG4gICAgICAgIHJlc3VsdFtrZXldID0ge1xuICAgICAgICAgICRyZWY6IGAjL2NvbXBvbmVudHMvc2NoZW1hcy8ke21hdGNoaW5nS2V5fWAsXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlc3VsdFtrZXldID0gZW1iZWRTY2hlbWFSZWZlcmVuY2VzKHZhbHVlLCBvYmoyKVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICByZXN1bHRba2V5XSA9IHZhbHVlXG4gICAgfVxuICB9KVxufVxuIiwgImltcG9ydCB7IFJvdXRlU3BlYyB9IGZyb20gXCIuLi8uLi90eXBlc1wiXG5cbmZ1bmN0aW9uIHRyYW5zZm9ybVBhdGhUb0Zlcm5TZGtNZXRob2ROYW1lKHBhdGg6IHN0cmluZykge1xuICBjb25zdCBwYXJ0cyA9IHBhdGguc3BsaXQoXCIvXCIpLmZpbHRlcigocGFydCkgPT4gcGFydCAhPT0gXCJcIilcbiAgY29uc3QgbGFzdFBhcnQgPSBwYXJ0c1twYXJ0cy5sZW5ndGggLSAxXVxuICBpZiAobGFzdFBhcnQuc3RhcnRzV2l0aChcIltcIikgJiYgbGFzdFBhcnQuZW5kc1dpdGgoXCJdXCIpKSB7XG4gICAgLy8gQ29udmVydCBbcGFyYW1dIHRvIGJ5X3BhcmFtXG4gICAgY29uc3QgcGFyYW0gPSBsYXN0UGFydC5zbGljZSgxLCAtMSlcbiAgICByZXR1cm4gYGJ5XyR7cGFyYW19YFxuICB9XG5cbiAgcmV0dXJuIGxhc3RQYXJ0XG59XG5cbi8vIGZlcm4gZG9jczogaHR0cHM6Ly9idWlsZHdpdGhmZXJuLmNvbS9kb2NzL3NwZWMvZXh0ZW5zaW9uc1xuZnVuY3Rpb24gdHJhbnNmb3JtUGF0aFRvRmVyblNka0dyb3VwTmFtZShwYXRoOiBzdHJpbmcpIHtcbiAgY29uc3QgcGFydHMgPSBwYXRoLnNwbGl0KFwiL1wiKS5maWx0ZXIoKHBhcnQpID0+IHBhcnQgIT09IFwiXCIpXG4gIHJldHVybiBwYXJ0cy5zbGljZSgwLCBwYXJ0cy5sZW5ndGggLSAxKVxufVxuXG5mdW5jdGlvbiBnZXRGZXJuU2RrTWV0YWRhdGEoXG4gIHBhdGg6IHN0cmluZyxcbiAgc2RrUmV0dXJuVmFsdWU/OiBzdHJpbmcgfCBzdHJpbmdbXVxuKTpcbiAgfCB7XG4gICAgICBcIngtZmVybi1pZ25vcmVcIjogdHJ1ZVxuICAgIH1cbiAgfCB7XG4gICAgICBcIngtZmVybi1zZGstZ3JvdXAtbmFtZVwiOiBzdHJpbmdbXVxuICAgICAgXCJ4LWZlcm4tc2RrLW1ldGhvZC1uYW1lXCI6IHN0cmluZ1xuICAgIH0ge1xuICBpZiAocGF0aC5zcGxpdChcIi9cIikuZmlsdGVyKChwYXJ0KSA9PiBwYXJ0ICE9PSBcIlwiKS5sZW5ndGggPT09IDEpIHtcbiAgICByZXR1cm4ge1xuICAgICAgXCJ4LWZlcm4taWdub3JlXCI6IHRydWUsXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBcIngtZmVybi1zZGstZ3JvdXAtbmFtZVwiOiB0cmFuc2Zvcm1QYXRoVG9GZXJuU2RrR3JvdXBOYW1lKHBhdGgpLFxuICAgIFwieC1mZXJuLXNkay1tZXRob2QtbmFtZVwiOiB0cmFuc2Zvcm1QYXRoVG9GZXJuU2RrTWV0aG9kTmFtZShwYXRoKSxcbiAgICAuLi4oc2RrUmV0dXJuVmFsdWVcbiAgICAgID8ge1xuICAgICAgICAgIFwieC1mZXJuLXNkay1yZXR1cm4tdmFsdWVcIjogc2RrUmV0dXJuVmFsdWUsXG4gICAgICAgIH1cbiAgICAgIDoge30pLFxuICB9XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBtYXBNZXRob2RzVG9GZXJuU2RrTWV0YWRhdGEoe1xuICBtZXRob2RzLFxuICBwYXRoLFxuICBzZGtSZXR1cm5WYWx1ZSxcbn06IHtcbiAgbWV0aG9kczogUm91dGVTcGVjW1wibWV0aG9kc1wiXVxuICBwYXRoOiBzdHJpbmdcbiAgc2RrUmV0dXJuVmFsdWU/OiBzdHJpbmcgfCBzdHJpbmdbXVxufSkge1xuICBjb25zdCBmZXJuU2RrTWV0YWRhdGEgPSBnZXRGZXJuU2RrTWV0YWRhdGEocGF0aCwgc2RrUmV0dXJuVmFsdWUpXG4gIGlmIChtZXRob2RzLmxlbmd0aCA9PT0gMSkge1xuICAgIHJldHVybiB7XG4gICAgICBbbWV0aG9kc1swXV06IGZlcm5TZGtNZXRhZGF0YSxcbiAgICB9XG4gIH1cblxuICBjb25zdCBtYXBwZWRNZXRob2RzID0ge31cblxuICBtZXRob2RzLmZvckVhY2goKG1ldGhvZCkgPT4ge1xuICAgIGlmIChtZXRob2QgPT09IFwiUE9TVFwiKSB7XG4gICAgICBtYXBwZWRNZXRob2RzW21ldGhvZF0gPSBmZXJuU2RrTWV0YWRhdGFcbiAgICB9IGVsc2Uge1xuICAgICAgbWFwcGVkTWV0aG9kc1ttZXRob2RdID0ge1xuICAgICAgICBcIngtZmVybi1pZ25vcmVcIjogdHJ1ZSxcbiAgICAgIH1cbiAgICB9XG4gIH0pXG5cbiAgcmV0dXJuIG1hcHBlZE1ldGhvZHNcbn1cbiIsICJpbXBvcnQgKiBhcyBmcyBmcm9tIFwibm9kZTpmcy9wcm9taXNlc1wiXG5pbXBvcnQgeyBwYXJzZVJvdXRlc0luUGFja2FnZSB9IGZyb20gXCIuLi9saWIvcGFyc2Utcm91dGVzLWluLXBhY2thZ2VcIlxuaW1wb3J0IHsgem9kVG9UcywgcHJpbnROb2RlIH0gZnJvbSBcIi4uL2xpYi96b2QtdG8tdHNcIlxuaW1wb3J0IHByZXR0aWVyIGZyb20gXCJwcmV0dGllclwiXG5pbXBvcnQgeyB6LCBab2RFZmZlY3RzLCBab2RPcHRpb25hbCB9IGZyb20gXCJ6b2RcIlxuXG5pbnRlcmZhY2UgR2VuZXJhdGVSb3V0ZVR5cGVzT3B0cyB7XG4gIHBhY2thZ2VEaXI6IHN0cmluZ1xuICBvdXRwdXRGaWxlPzogc3RyaW5nXG4gIHBhdGhHbG9iPzogc3RyaW5nXG4gIGFwaVByZWZpeD86IHN0cmluZ1xuICBtYXBGaWxlUGF0aFRvSFRUUFJvdXRlPzogKGZpbGVfcGF0aDogc3RyaW5nKSA9PiBzdHJpbmdcbiAgLyoqXG4gICAqIElmIHByb3ZpZGVkLCBvbmx5IHJvdXRlcyB0aGF0IHJldHVybiB0cnVlIHdpbGwgYmUgaW5jbHVkZWQgaW4gdGhlIGdlbmVyYXRlZCB0eXBlcy5cbiAgICovXG4gIGZpbHRlclJvdXRlcz86IChyb3V0ZTogc3RyaW5nKSA9PiBib29sZWFuXG4gIC8qKlxuICAgKiBCeSBkZWZhdWx0LCByb3V0ZXMgdGhhdCBoYXZlIGBleGNsdWRlRnJvbU9wZW5BcGlgIHNldCB0byB0cnVlIHdpbGwgYmUgZXhjbHVkZWQgZnJvbSB0aGUgZ2VuZXJhdGVkIHR5cGVzLlxuICAgKiBTZXQgdGhpcyB0byB0cnVlIHRvIGluY2x1ZGUgdGhlbS5cbiAgICovXG4gIGluY2x1ZGVPcGVuQXBpRXhjbHVkZWRSb3V0ZXM/OiBib29sZWFuXG59XG5cbmV4cG9ydCBjb25zdCBnZW5lcmF0ZVJvdXRlVHlwZXMgPSBhc3luYyAob3B0czogR2VuZXJhdGVSb3V0ZVR5cGVzT3B0cykgPT4ge1xuICBjb25zdCBmaWxlcGF0aFRvUm91dGUgPSBhd2FpdCBwYXJzZVJvdXRlc0luUGFja2FnZShvcHRzKVxuXG4gIGNvbnN0IHNvcnRlZFJvdXRlcyA9IEFycmF5LmZyb20oZmlsZXBhdGhUb1JvdXRlLmVudHJpZXMoKSkuc29ydCgoYSwgYikgPT5cbiAgICBhWzFdLnJvdXRlLmxvY2FsZUNvbXBhcmUoYlsxXS5yb3V0ZSlcbiAgKVxuICBjb25zdCBmaWx0ZXJlZFJvdXRlcyA9IHNvcnRlZFJvdXRlcy5maWx0ZXIoXG4gICAgKFtfLCB7IHJvdXRlIH1dKSA9PiAhb3B0cy5maWx0ZXJSb3V0ZXMgfHwgb3B0cy5maWx0ZXJSb3V0ZXMocm91dGUpXG4gIClcblxuICAvLyBUT0RPIHdoZW4gbGVzcyBsYXp5LCB1c2UgdHMtbW9ycGggZm9yIGJldHRlciBnZW5lcmF0aW9uXG4gIGNvbnN0IHJvdXRlRGVmczogc3RyaW5nW10gPSBbXVxuICBmb3IgKGNvbnN0IFtfLCB7IHJvdXRlLCByb3V0ZVNwZWMsIHNldHVwUGFyYW1zIH1dIG9mIGZpbHRlcmVkUm91dGVzKSB7XG4gICAgY29uc3QgbWF4RHVyYXRpb24gPSByb3V0ZVNwZWMubWF4RHVyYXRpb24gPz8gc2V0dXBQYXJhbXMubWF4RHVyYXRpb25cbiAgICBjb25zdCBxdWVyeUtleXMgPSBPYmplY3Qua2V5cyhyb3V0ZVNwZWMucXVlcnlQYXJhbXM/LnNoYXBlID8/IHt9KVxuICAgIGNvbnN0IHBhdGhQYXJhbWV0ZXJzID0gcXVlcnlLZXlzLmZpbHRlcigoa2V5KSA9PiByb3V0ZS5pbmNsdWRlcyhgWyR7a2V5fV1gKSlcblxuICAgIC8vIHF1ZXJ5UGFyYW1zIG1pZ2h0IGJlIGEgWm9kRWZmZWN0cyBvciBab2RPcHRpb25hbCBpbiBzb21lIGNhc2VzXG4gICAgbGV0IHF1ZXJ5UGFyYW1zID0gcm91dGVTcGVjLnF1ZXJ5UGFyYW1zXG4gICAgd2hpbGUgKFxuICAgICAgcXVlcnlQYXJhbXMgJiZcbiAgICAgIChcInNvdXJjZVR5cGVcIiBpbiBxdWVyeVBhcmFtcyB8fCBcInVud3JhcFwiIGluIHF1ZXJ5UGFyYW1zKVxuICAgICkge1xuICAgICAgaWYgKFwic291cmNlVHlwZVwiIGluIHF1ZXJ5UGFyYW1zKSB7XG4gICAgICAgIHF1ZXJ5UGFyYW1zID0gKHF1ZXJ5UGFyYW1zIGFzIHVua25vd24gYXMgWm9kRWZmZWN0czxhbnk+KS5zb3VyY2VUeXBlKClcbiAgICAgIH0gZWxzZSBpZiAoXCJ1bndyYXBcIiBpbiBxdWVyeVBhcmFtcykge1xuICAgICAgICBxdWVyeVBhcmFtcyA9IChxdWVyeVBhcmFtcyBhcyB1bmtub3duIGFzIFpvZE9wdGlvbmFsPGFueT4pLnVud3JhcCgpXG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHF1ZXJ5UGFyYW1zICYmIFwib21pdFwiIGluIHF1ZXJ5UGFyYW1zKSB7XG4gICAgICBxdWVyeVBhcmFtcyA9IHF1ZXJ5UGFyYW1zLm9taXQoXG4gICAgICAgIE9iamVjdC5mcm9tRW50cmllcyhwYXRoUGFyYW1ldGVycy5tYXAoKHBhcmFtKSA9PiBbcGFyYW0sIHRydWVdKSlcbiAgICAgIClcbiAgICB9XG5cbiAgICByb3V0ZURlZnMucHVzaChcbiAgICAgIGBcblwiJHtyb3V0ZX1cIjoge1xuICByb3V0ZTogXCIke3JvdXRlfVwiLFxuICBtZXRob2Q6ICR7cm91dGVTcGVjLm1ldGhvZHMubWFwKChtKSA9PiBgXCIke219XCJgKS5qb2luKFwiIHwgXCIpfSxcbiAgcXVlcnlQYXJhbXM6ICR7cXVlcnlQYXJhbXMgPyBwcmludE5vZGUoem9kVG9UcyhxdWVyeVBhcmFtcykubm9kZSkgOiBcInt9XCJ9LFxuICBqc29uQm9keTogJHtcbiAgICByb3V0ZVNwZWMuanNvbkJvZHkgPyBwcmludE5vZGUoem9kVG9Ucyhyb3V0ZVNwZWMuanNvbkJvZHkpLm5vZGUpIDogXCJ7fVwiXG4gIH0sXG4gIGNvbW1vblBhcmFtczogJHtcbiAgICByb3V0ZVNwZWMuY29tbW9uUGFyYW1zXG4gICAgICA/IHByaW50Tm9kZSh6b2RUb1RzKHJvdXRlU3BlYy5jb21tb25QYXJhbXMpLm5vZGUpXG4gICAgICA6IFwie31cIlxuICB9LFxuICBmb3JtRGF0YTogJHtcbiAgICByb3V0ZVNwZWMuZm9ybURhdGEgPyBwcmludE5vZGUoem9kVG9Ucyhyb3V0ZVNwZWMuZm9ybURhdGEpLm5vZGUpIDogXCJ7fVwiXG4gIH0sXG4gIGpzb25SZXNwb25zZTogJHtcbiAgICByb3V0ZVNwZWMuanNvblJlc3BvbnNlXG4gICAgICA/IHByaW50Tm9kZShcbiAgICAgICAgICB6b2RUb1RzKFxuICAgICAgICAgICAgc2V0dXBQYXJhbXMuYWRkT2tTdGF0dXMgJiZcbiAgICAgICAgICAgICAgcm91dGVTcGVjLmpzb25SZXNwb25zZSBpbnN0YW5jZW9mIHouWm9kT2JqZWN0XG4gICAgICAgICAgICAgID8gcm91dGVTcGVjLmpzb25SZXNwb25zZS5leHRlbmQoeyBvazogei5ib29sZWFuKCkgfSlcbiAgICAgICAgICAgICAgOiByb3V0ZVNwZWMuanNvblJlc3BvbnNlXG4gICAgICAgICAgKS5ub2RlXG4gICAgICAgIClcbiAgICAgIDogXCJ7fVwiXG4gIH0sXG4gIG1heER1cmF0aW9uOiAke21heER1cmF0aW9uID8/IFwidW5kZWZpbmVkXCJ9XG59YC50cmltKClcbiAgICApXG4gIH1cbiAgY29uc3Qgcm91dGVEZWZTdHIgPSByb3V0ZURlZnMuam9pbihcIixcXG5cIilcbiAgY29uc3Qgb3V0cHV0ID0gYXdhaXQgcHJldHRpZXIuZm9ybWF0KFxuICAgIGBleHBvcnQgdHlwZSBSb3V0ZXMgPSB7XG4ke3JvdXRlRGVmU3RyfVxufVxuXG5leHBvcnQgdHlwZSBSb3V0ZVJlc3BvbnNlPFBhdGggZXh0ZW5kcyBrZXlvZiBSb3V0ZXM+ID1cbiAgUm91dGVzW1BhdGhdW1wianNvblJlc3BvbnNlXCJdXG5cbmV4cG9ydCB0eXBlIFJvdXRlUmVxdWVzdEJvZHk8UGF0aCBleHRlbmRzIGtleW9mIFJvdXRlcz4gPVxuICBSb3V0ZXNbUGF0aF1bXCJqc29uQm9keVwiXSAmIFJvdXRlc1tQYXRoXVtcImNvbW1vblBhcmFtc1wiXVxuXG5leHBvcnQgdHlwZSBSb3V0ZVJlcXVlc3RQYXJhbXM8UGF0aCBleHRlbmRzIGtleW9mIFJvdXRlcz4gPVxuICBSb3V0ZXNbUGF0aF1bXCJxdWVyeVBhcmFtc1wiXSAmIFJvdXRlc1tQYXRoXVtcImNvbW1vblBhcmFtc1wiXVxuYC50cmltKCksXG4gICAgeyBzZW1pOiBmYWxzZSwgcGFyc2VyOiBcInR5cGVzY3JpcHRcIiB9XG4gIClcblxuICBpZiAob3B0cy5vdXRwdXRGaWxlKSB7XG4gICAgYXdhaXQgZnMud3JpdGVGaWxlKG9wdHMub3V0cHV0RmlsZSwgb3V0cHV0KVxuICB9XG5cbiAgcmV0dXJuIG91dHB1dFxufVxuIiwgIi8qKlxuICogWm9kIFRvIFRTXG4gKlxuICogVmVuZG9yZWQgZnJvbSBodHRwczovL2dpdGh1Yi5jb20vc2FjaGlucmFqYS96b2QtdG8tdHNcbiAqXG4gKiBNSVQgTGljZW5zZVxuICpcbiAqIENvcHlyaWdodCAoYykgMjAyMSBTYWNoaW4gUmFqYVxuICpcbiAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHlcbiAqIG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksIHRvIGRlYWxcbiAqIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHNcbiAqIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGxcbiAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpc1xuICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcbiAqXG4gKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGxcbiAqIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4gKlxuICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUlxuICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksXG4gKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEVcbiAqIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVJcbiAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sXG4gKiBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRVxuICogU09GVFdBUkUuXG4gKi9cblxuaW1wb3J0IHRzIGZyb20gXCJ0eXBlc2NyaXB0XCJcbmltcG9ydCB7IFpvZFR5cGUsIFpvZFR5cGVBbnkgfSBmcm9tIFwiem9kXCJcbmltcG9ydCB7IHBhcnNlRnJvbnRNYXR0ZXIsIHRlc3RGcm9udE1hdHRlciB9IGZyb20gXCIuL2Zyb250LW1hdHRlclwiXG5pbXBvcnQgZGVkZW50IGZyb20gXCJkZWRlbnRcIlxuXG5jb25zdCB7IGZhY3Rvcnk6IGYsIFN5bnRheEtpbmQsIFNjcmlwdEtpbmQsIFNjcmlwdFRhcmdldCwgRW1pdEhpbnQgfSA9IHRzXG5cbmNvbnN0IG1heWJlSWRlbnRpZmllclRvVHlwZVJlZmVyZW5jZSA9IChcbiAgaWRlbnRpZmllcjogdHMuSWRlbnRpZmllciB8IHRzLlR5cGVOb2RlXG4pID0+IHtcbiAgaWYgKHRzLmlzSWRlbnRpZmllcihpZGVudGlmaWVyKSkge1xuICAgIHJldHVybiBmLmNyZWF0ZVR5cGVSZWZlcmVuY2VOb2RlKGlkZW50aWZpZXIpXG4gIH1cblxuICByZXR1cm4gaWRlbnRpZmllclxufVxuXG5jb25zdCBjcmVhdGVUeXBlUmVmZXJlbmNlRnJvbVN0cmluZyA9IChpZGVudGlmaWVyOiBzdHJpbmcpID0+XG4gIGYuY3JlYXRlVHlwZVJlZmVyZW5jZU5vZGUoZi5jcmVhdGVJZGVudGlmaWVyKGlkZW50aWZpZXIpKVxuXG5jb25zdCBjcmVhdGVVbmtub3duS2V5d29yZE5vZGUgPSAoKSA9PlxuICBmLmNyZWF0ZUtleXdvcmRUeXBlTm9kZShTeW50YXhLaW5kLlVua25vd25LZXl3b3JkKVxuXG5leHBvcnQgY29uc3QgcHJpbnROb2RlID0gKFxuICBub2RlOiB0cy5Ob2RlLFxuICBwcmludGVyT3B0aW9ucz86IHRzLlByaW50ZXJPcHRpb25zXG4pOiBzdHJpbmcgPT4ge1xuICBjb25zdCBzb3VyY2VGaWxlID0gdHMuY3JlYXRlU291cmNlRmlsZShcbiAgICBcInByaW50LnRzXCIsXG4gICAgXCJcIixcbiAgICBTY3JpcHRUYXJnZXQuTGF0ZXN0LFxuICAgIGZhbHNlLFxuICAgIFNjcmlwdEtpbmQuVFNcbiAgKVxuICBjb25zdCBwcmludGVyID0gdHMuY3JlYXRlUHJpbnRlcihwcmludGVyT3B0aW9ucylcbiAgcmV0dXJuIHByaW50ZXIucHJpbnROb2RlKEVtaXRIaW50LlVuc3BlY2lmaWVkLCBub2RlLCBzb3VyY2VGaWxlKVxufVxuXG5jb25zdCBpZGVudGlmaWVyUkUgPSAvXlskQS1aX2Etel1bXFx3JF0qJC9cblxuY29uc3QgZ2V0SWRlbnRpZmllck9yU3RyaW5nTGl0ZXJhbCA9IChzdHJpbmdfOiBzdHJpbmcpID0+IHtcbiAgaWYgKGlkZW50aWZpZXJSRS50ZXN0KHN0cmluZ18pKSB7XG4gICAgcmV0dXJuIGYuY3JlYXRlSWRlbnRpZmllcihzdHJpbmdfKVxuICB9XG5cbiAgcmV0dXJuIGYuY3JlYXRlU3RyaW5nTGl0ZXJhbChzdHJpbmdfKVxufVxuXG5jb25zdCBhZGRKc0RvY0NvbW1lbnQgPSAobm9kZTogdHMuTm9kZSwgdGV4dDogc3RyaW5nKSA9PiB7XG4gIGNvbnN0IHsgZGVzY3JpcHRpb24sIGRlcHJlY2F0ZWQgfSA9IHBhcnNlRGVzY3JpcHRpb24odGV4dClcblxuICBsZXQgY29tbWVudCA9IGAqICR7ZGVzY3JpcHRpb259YFxuICBpZiAoZGVwcmVjYXRlZCkge1xuICAgIGNvbW1lbnQgKz0gYFxcbiAqIEBkZXByZWNhdGVkICR7XG4gICAgICB0eXBlb2YgZGVwcmVjYXRlZCA9PT0gXCJzdHJpbmdcIiA/IGRlcHJlY2F0ZWQgOiBcIlwiXG4gICAgfWBcbiAgfSBlbHNlIHtcbiAgICBjb21tZW50ICs9IGAgYFxuICB9XG5cbiAgdHMuYWRkU3ludGhldGljTGVhZGluZ0NvbW1lbnQoXG4gICAgbm9kZSxcbiAgICBTeW50YXhLaW5kLk11bHRpTGluZUNvbW1lbnRUcml2aWEsXG4gICAgY29tbWVudCxcbiAgICB0cnVlXG4gIClcbn1cblxudHlwZSBQYXJzZWREZXNjcmlwdGlvbiA9IHtcbiAgZGVzY3JpcHRpb246IHN0cmluZ1xuICBkZXByZWNhdGVkPzogYm9vbGVhbiB8IHN0cmluZ1xuICBba2V5OiBzdHJpbmddOiB1bmtub3duXG59XG5cbmZ1bmN0aW9uIHBhcnNlRGVzY3JpcHRpb24oZGVzY3JpcHRpb246IHN0cmluZyk6IFBhcnNlZERlc2NyaXB0aW9uIHtcbiAgaWYgKCFkZXNjcmlwdGlvbilcbiAgICByZXR1cm4ge1xuICAgICAgZGVzY3JpcHRpb246IFwiXCIsXG4gICAgfVxuICBjb25zdCB0cmltbWVkRGVzY3JpcHRpb24gPSBkZWRlbnQoZGVzY3JpcHRpb24pXG4gIGlmICghdGVzdEZyb250TWF0dGVyKHRyaW1tZWREZXNjcmlwdGlvbikpIHJldHVybiB7IGRlc2NyaXB0aW9uIH1cbiAgY29uc3QgeyBhdHRyaWJ1dGVzLCBib2R5IH0gPSBwYXJzZUZyb250TWF0dGVyKHRyaW1tZWREZXNjcmlwdGlvbilcbiAgY29uc3Qgb3V0cHV0OiBQYXJzZWREZXNjcmlwdGlvbiA9IHtcbiAgICBkZXNjcmlwdGlvbjogYm9keS50cmltKCksXG4gIH1cbiAgaWYgKHR5cGVvZiBhdHRyaWJ1dGVzID09PSBcIm9iamVjdFwiICYmIGF0dHJpYnV0ZXMgIT09IG51bGwpIHtcbiAgICBpZiAoXCJkZXByZWNhdGVkXCIgaW4gYXR0cmlidXRlcyAmJiBhdHRyaWJ1dGVzLmRlcHJlY2F0ZWQpIHtcbiAgICAgIGlmICh0eXBlb2YgYXR0cmlidXRlcy5kZXByZWNhdGVkID09PSBcImJvb2xlYW5cIikge1xuICAgICAgICBvdXRwdXQuZGVwcmVjYXRlZCA9IHRydWVcbiAgICAgIH0gZWxzZSBpZiAodHlwZW9mIGF0dHJpYnV0ZXMuZGVwcmVjYXRlZCA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICBvdXRwdXQuZGVwcmVjYXRlZCA9XG4gICAgICAgICAgYXR0cmlidXRlcy5kZXByZWNhdGVkLmxlbmd0aCA+IDAgPyBhdHRyaWJ1dGVzLmRlcHJlY2F0ZWQgOiB0cnVlXG4gICAgICB9XG4gICAgfVxuICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKGF0dHJpYnV0ZXMpKSB7XG4gICAgICBpZiAoa2V5ID09PSBcImRlc2NyaXB0aW9uXCIgfHwga2V5ID09PSBcImRlcHJlY2F0ZWRcIikgY29udGludWVcbiAgICAgIG91dHB1dFtrZXldID0gdmFsdWVcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG91dHB1dFxufVxuXG50eXBlIExpdGVyYWxUeXBlID0gc3RyaW5nIHwgbnVtYmVyIHwgYm9vbGVhblxuXG50eXBlIFpvZFRvVHNPcHRpb25zID0ge1xuICAvKiogQGRlcHJlY2F0ZWQgdXNlIGBuYXRpdmVFbnVtc2AgaW5zdGVhZCAqL1xuICByZXNvbHZlTmF0aXZlRW51bXM/OiBib29sZWFuXG4gIG5hdGl2ZUVudW1zPzogXCJpZGVudGlmaWVyXCIgfCBcInJlc29sdmVcIiB8IFwidW5pb25cIlxufVxuXG5jb25zdCByZXNvbHZlT3B0aW9ucyA9IChyYXc/OiBab2RUb1RzT3B0aW9ucykgPT4ge1xuICBjb25zdCByZXNvbHZlZCA9IHtcbiAgICBuYXRpdmVFbnVtczogcmF3Py5yZXNvbHZlTmF0aXZlRW51bXMgPyBcInJlc29sdmVcIiA6IFwiaWRlbnRpZmllclwiLFxuICB9XG5cbiAgcmV0dXJuIHsgLi4ucmVzb2x2ZWQsIC4uLnJhdyB9XG59XG5cbnR5cGUgUmVzb2x2ZWRab2RUb1RzT3B0aW9ucyA9IFJldHVyblR5cGU8dHlwZW9mIHJlc29sdmVPcHRpb25zPlxuXG50eXBlIFpvZFRvVHNTdG9yZSA9IHtcbiAgbmF0aXZlRW51bXM6IHRzLkVudW1EZWNsYXJhdGlvbltdXG59XG5cbnR5cGUgWm9kVG9Uc1JldHVybiA9IHtcbiAgbm9kZTogdHMuVHlwZU5vZGVcbiAgc3RvcmU6IFpvZFRvVHNTdG9yZVxufVxuXG50eXBlIEdldFR5cGVGdW5jdGlvbiA9IChcbiAgdHlwZXNjcmlwdDogdHlwZW9mIHRzLFxuICBpZGVudGlmaWVyOiBzdHJpbmcsXG4gIG9wdGlvbnM6IFJlc29sdmVkWm9kVG9Uc09wdGlvbnNcbikgPT4gdHMuSWRlbnRpZmllciB8IHRzLlR5cGVOb2RlXG5cbnR5cGUgR2V0VHlwZSA9IHsgX2RlZjogeyBnZXRUeXBlPzogR2V0VHlwZUZ1bmN0aW9uIH0gfVxuXG5jb25zdCBjYWxsR2V0VHlwZSA9IChcbiAgem9kOiBab2RUeXBlQW55LFxuICBpZGVudGlmaWVyOiBzdHJpbmcsXG4gIG9wdGlvbnM6IFJlc29sdmVkWm9kVG9Uc09wdGlvbnNcbikgPT4ge1xuICBsZXQgdHlwZTogUmV0dXJuVHlwZTxHZXRUeXBlRnVuY3Rpb24+IHwgdW5kZWZpbmVkXG5cbiAgY29uc3QgZ2V0VHlwZVNjaGVtYSA9IHpvZCBhcyBHZXRUeXBlXG4gIC8vIHRoaXMgbXVzdCBiZSBjYWxsZWQgYmVmb3JlIGFjY2Vzc2luZyAndHlwZSdcbiAgaWYgKGdldFR5cGVTY2hlbWEuX2RlZi5nZXRUeXBlKVxuICAgIHR5cGUgPSBnZXRUeXBlU2NoZW1hLl9kZWYuZ2V0VHlwZSh0cywgaWRlbnRpZmllciwgb3B0aW9ucylcbiAgcmV0dXJuIHR5cGVcbn1cblxuZXhwb3J0IGNvbnN0IHpvZFRvVHMgPSAoXG4gIHpvZDogWm9kVHlwZUFueSxcbiAgaWRlbnRpZmllcj86IHN0cmluZyxcbiAgb3B0aW9ucz86IFpvZFRvVHNPcHRpb25zXG4pOiBab2RUb1RzUmV0dXJuID0+IHtcbiAgaWYgKCEoem9kIGluc3RhbmNlb2YgWm9kVHlwZSkpIHtcbiAgICByZXR1cm4ge1xuICAgICAgbm9kZTogY3JlYXRlVW5rbm93bktleXdvcmROb2RlKCksXG4gICAgICBzdG9yZTogeyBuYXRpdmVFbnVtczogW10gfSxcbiAgICB9XG4gIH1cbiAgY29uc3QgcmVzb2x2ZWRJZGVudGlmaWVyID0gaWRlbnRpZmllciA/PyBcIklkZW50aWZpZXJcIlxuXG4gIGNvbnN0IHJlc29sdmVkT3B0aW9ucyA9IHJlc29sdmVPcHRpb25zKG9wdGlvbnMpXG5cbiAgY29uc3Qgc3RvcmU6IFpvZFRvVHNTdG9yZSA9IHsgbmF0aXZlRW51bXM6IFtdIH1cblxuICBjb25zdCBub2RlID0gem9kVG9Uc05vZGUoem9kLCByZXNvbHZlZElkZW50aWZpZXIsIHN0b3JlLCByZXNvbHZlZE9wdGlvbnMpXG5cbiAgcmV0dXJuIHsgbm9kZSwgc3RvcmUgfVxufVxuXG5jb25zdCB6b2RUb1RzTm9kZSA9IChcbiAgem9kOiBab2RUeXBlQW55LFxuICBpZGVudGlmaWVyOiBzdHJpbmcsXG4gIHN0b3JlOiBab2RUb1RzU3RvcmUsXG4gIG9wdGlvbnM6IFJlc29sdmVkWm9kVG9Uc09wdGlvbnNcbikgPT4ge1xuICBjb25zdCB0eXBlTmFtZSA9IHpvZC5fZGVmLnR5cGVOYW1lXG5cbiAgY29uc3QgZ2V0VHlwZVR5cGUgPSBjYWxsR2V0VHlwZSh6b2QsIGlkZW50aWZpZXIsIG9wdGlvbnMpXG4gIC8vIHNwZWNpYWwgY2FzZSBuYXRpdmUgZW51bSwgd2hpY2ggbmVlZHMgYW4gaWRlbnRpZmllciBub2RlXG4gIGlmIChnZXRUeXBlVHlwZSAmJiB0eXBlTmFtZSAhPT0gXCJab2ROYXRpdmVFbnVtXCIpIHtcbiAgICByZXR1cm4gbWF5YmVJZGVudGlmaWVyVG9UeXBlUmVmZXJlbmNlKGdldFR5cGVUeXBlKVxuICB9XG5cbiAgY29uc3Qgb3RoZXJBcmd1bWVudHMgPSBbaWRlbnRpZmllciwgc3RvcmUsIG9wdGlvbnNdIGFzIGNvbnN0XG5cbiAgc3dpdGNoICh0eXBlTmFtZSkge1xuICAgIGNhc2UgXCJab2RTdHJpbmdcIjoge1xuICAgICAgcmV0dXJuIGYuY3JlYXRlS2V5d29yZFR5cGVOb2RlKFN5bnRheEtpbmQuU3RyaW5nS2V5d29yZClcbiAgICB9XG4gICAgY2FzZSBcIlpvZE51bWJlclwiOiB7XG4gICAgICByZXR1cm4gZi5jcmVhdGVLZXl3b3JkVHlwZU5vZGUoU3ludGF4S2luZC5OdW1iZXJLZXl3b3JkKVxuICAgIH1cbiAgICBjYXNlIFwiWm9kQmlnSW50XCI6IHtcbiAgICAgIHJldHVybiBmLmNyZWF0ZUtleXdvcmRUeXBlTm9kZShTeW50YXhLaW5kLkJpZ0ludEtleXdvcmQpXG4gICAgfVxuICAgIGNhc2UgXCJab2RCb29sZWFuXCI6IHtcbiAgICAgIHJldHVybiBmLmNyZWF0ZUtleXdvcmRUeXBlTm9kZShTeW50YXhLaW5kLkJvb2xlYW5LZXl3b3JkKVxuICAgIH1cbiAgICBjYXNlIFwiWm9kRGF0ZVwiOiB7XG4gICAgICByZXR1cm4gZi5jcmVhdGVUeXBlUmVmZXJlbmNlTm9kZShmLmNyZWF0ZUlkZW50aWZpZXIoXCJEYXRlXCIpKVxuICAgIH1cbiAgICBjYXNlIFwiWm9kVW5kZWZpbmVkXCI6IHtcbiAgICAgIHJldHVybiBmLmNyZWF0ZUtleXdvcmRUeXBlTm9kZShTeW50YXhLaW5kLlVuZGVmaW5lZEtleXdvcmQpXG4gICAgfVxuICAgIGNhc2UgXCJab2ROdWxsXCI6IHtcbiAgICAgIHJldHVybiBmLmNyZWF0ZUxpdGVyYWxUeXBlTm9kZShmLmNyZWF0ZU51bGwoKSlcbiAgICB9XG4gICAgY2FzZSBcIlpvZFZvaWRcIjoge1xuICAgICAgcmV0dXJuIGYuY3JlYXRlVW5pb25UeXBlTm9kZShbXG4gICAgICAgIGYuY3JlYXRlS2V5d29yZFR5cGVOb2RlKFN5bnRheEtpbmQuVm9pZEtleXdvcmQpLFxuICAgICAgICBmLmNyZWF0ZUtleXdvcmRUeXBlTm9kZShTeW50YXhLaW5kLlVuZGVmaW5lZEtleXdvcmQpLFxuICAgICAgXSlcbiAgICB9XG4gICAgY2FzZSBcIlpvZEFueVwiOiB7XG4gICAgICByZXR1cm4gZi5jcmVhdGVLZXl3b3JkVHlwZU5vZGUoU3ludGF4S2luZC5BbnlLZXl3b3JkKVxuICAgIH1cbiAgICBjYXNlIFwiWm9kVW5rbm93blwiOiB7XG4gICAgICByZXR1cm4gY3JlYXRlVW5rbm93bktleXdvcmROb2RlKClcbiAgICB9XG4gICAgY2FzZSBcIlpvZE5ldmVyXCI6IHtcbiAgICAgIHJldHVybiBmLmNyZWF0ZUtleXdvcmRUeXBlTm9kZShTeW50YXhLaW5kLk5ldmVyS2V5d29yZClcbiAgICB9XG4gICAgY2FzZSBcIlpvZExhenlcIjoge1xuICAgICAgLy8gaXQgaXMgaW1wb3NzaWJsZSB0byBkZXRlcm1pbmUgd2hhdCB0aGUgbGF6eSB2YWx1ZSBpcyByZWZlcnJpbmcgdG9cbiAgICAgIC8vIHNvIHdlIGZvcmNlIHRoZSB1c2VyIHRvIGRlY2xhcmUgaXRcbiAgICAgIGlmICghZ2V0VHlwZVR5cGUpIHJldHVybiBjcmVhdGVUeXBlUmVmZXJlbmNlRnJvbVN0cmluZyhpZGVudGlmaWVyKVxuICAgICAgYnJlYWtcbiAgICB9XG4gICAgY2FzZSBcIlpvZExpdGVyYWxcIjoge1xuICAgICAgLy8gei5saXRlcmFsKCdoaScpIC0+ICdoaSdcbiAgICAgIGxldCBsaXRlcmFsOiB0cy5MaXRlcmFsRXhwcmVzc2lvbiB8IHRzLkJvb2xlYW5MaXRlcmFsXG5cbiAgICAgIGNvbnN0IGxpdGVyYWxWYWx1ZSA9IHpvZC5fZGVmLnZhbHVlIGFzIExpdGVyYWxUeXBlXG4gICAgICBzd2l0Y2ggKHR5cGVvZiBsaXRlcmFsVmFsdWUpIHtcbiAgICAgICAgY2FzZSBcIm51bWJlclwiOiB7XG4gICAgICAgICAgbGl0ZXJhbCA9IGYuY3JlYXRlTnVtZXJpY0xpdGVyYWwobGl0ZXJhbFZhbHVlKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIH1cbiAgICAgICAgY2FzZSBcImJvb2xlYW5cIjoge1xuICAgICAgICAgIGxpdGVyYWwgPSBsaXRlcmFsVmFsdWUgPT09IHRydWUgPyBmLmNyZWF0ZVRydWUoKSA6IGYuY3JlYXRlRmFsc2UoKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIH1cbiAgICAgICAgZGVmYXVsdDoge1xuICAgICAgICAgIGxpdGVyYWwgPSBmLmNyZWF0ZVN0cmluZ0xpdGVyYWwobGl0ZXJhbFZhbHVlKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGYuY3JlYXRlTGl0ZXJhbFR5cGVOb2RlKGxpdGVyYWwpXG4gICAgfVxuICAgIGNhc2UgXCJab2RPYmplY3RcIjoge1xuICAgICAgY29uc3QgcHJvcGVydGllcyA9IE9iamVjdC5lbnRyaWVzKHpvZC5fZGVmLnNoYXBlKCkpXG5cbiAgICAgIGNvbnN0IG1lbWJlcnM6IHRzLlR5cGVFbGVtZW50W10gPSBwcm9wZXJ0aWVzLm1hcCgoW2tleSwgdmFsdWVdKSA9PiB7XG4gICAgICAgIGNvbnN0IG5leHRab2ROb2RlID0gdmFsdWUgYXMgWm9kVHlwZUFueVxuICAgICAgICBjb25zdCB0eXBlID0gem9kVG9Uc05vZGUobmV4dFpvZE5vZGUsIC4uLm90aGVyQXJndW1lbnRzKVxuXG4gICAgICAgIGNvbnN0IHsgdHlwZU5hbWU6IG5leHRab2ROb2RlVHlwZU5hbWUgfSA9IG5leHRab2ROb2RlLl9kZWZcbiAgICAgICAgY29uc3QgaXNPcHRpb25hbCA9XG4gICAgICAgICAgbmV4dFpvZE5vZGVUeXBlTmFtZSA9PT0gXCJab2RPcHRpb25hbFwiIHx8IG5leHRab2ROb2RlLmlzT3B0aW9uYWwoKVxuXG4gICAgICAgIGNvbnN0IHByb3BlcnR5U2lnbmF0dXJlID0gZi5jcmVhdGVQcm9wZXJ0eVNpZ25hdHVyZShcbiAgICAgICAgICB1bmRlZmluZWQsXG4gICAgICAgICAgZ2V0SWRlbnRpZmllck9yU3RyaW5nTGl0ZXJhbChrZXkpLFxuICAgICAgICAgIGlzT3B0aW9uYWwgPyBmLmNyZWF0ZVRva2VuKFN5bnRheEtpbmQuUXVlc3Rpb25Ub2tlbikgOiB1bmRlZmluZWQsXG4gICAgICAgICAgdHlwZVxuICAgICAgICApXG5cbiAgICAgICAgaWYgKG5leHRab2ROb2RlLmRlc2NyaXB0aW9uKSB7XG4gICAgICAgICAgYWRkSnNEb2NDb21tZW50KHByb3BlcnR5U2lnbmF0dXJlLCBuZXh0Wm9kTm9kZS5kZXNjcmlwdGlvbilcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBwcm9wZXJ0eVNpZ25hdHVyZVxuICAgICAgfSlcbiAgICAgIHJldHVybiBmLmNyZWF0ZVR5cGVMaXRlcmFsTm9kZShtZW1iZXJzKVxuICAgIH1cblxuICAgIGNhc2UgXCJab2RBcnJheVwiOiB7XG4gICAgICBjb25zdCB0eXBlID0gem9kVG9Uc05vZGUoem9kLl9kZWYudHlwZSwgLi4ub3RoZXJBcmd1bWVudHMpXG4gICAgICBjb25zdCBub2RlID0gZi5jcmVhdGVBcnJheVR5cGVOb2RlKHR5cGUpXG4gICAgICByZXR1cm4gbm9kZVxuICAgIH1cblxuICAgIGNhc2UgXCJab2RFbnVtXCI6IHtcbiAgICAgIC8vIHouZW51bVsnYScsICdiJywgJ2MnXSAtPiAnYScgfCAnYicgfCAnY1xuICAgICAgY29uc3QgdHlwZXMgPSB6b2QuX2RlZi52YWx1ZXMubWFwKCh2YWx1ZTogc3RyaW5nKSA9PlxuICAgICAgICBmLmNyZWF0ZUxpdGVyYWxUeXBlTm9kZShmLmNyZWF0ZVN0cmluZ0xpdGVyYWwodmFsdWUpKVxuICAgICAgKVxuICAgICAgcmV0dXJuIGYuY3JlYXRlVW5pb25UeXBlTm9kZSh0eXBlcylcbiAgICB9XG5cbiAgICBjYXNlIFwiWm9kVW5pb25cIjoge1xuICAgICAgLy8gei51bmlvbihbei5zdHJpbmcoKSwgei5udW1iZXIoKV0pIC0+IHN0cmluZyB8IG51bWJlclxuICAgICAgY29uc3Qgb3B0aW9uczogWm9kVHlwZUFueVtdID0gem9kLl9kZWYub3B0aW9uc1xuICAgICAgY29uc3QgdHlwZXM6IHRzLlR5cGVOb2RlW10gPSBvcHRpb25zLm1hcCgob3B0aW9uKSA9PlxuICAgICAgICB6b2RUb1RzTm9kZShvcHRpb24sIC4uLm90aGVyQXJndW1lbnRzKVxuICAgICAgKVxuICAgICAgcmV0dXJuIGYuY3JlYXRlVW5pb25UeXBlTm9kZSh0eXBlcylcbiAgICB9XG5cbiAgICBjYXNlIFwiWm9kRGlzY3JpbWluYXRlZFVuaW9uXCI6IHtcbiAgICAgIC8vIHouZGlzY3JpbWluYXRlZFVuaW9uKCdraW5kJywgW3oub2JqZWN0KHsga2luZDogei5saXRlcmFsKCdhJyksIGE6IHouc3RyaW5nKCkgfSksIHoub2JqZWN0KHsga2luZDogei5saXRlcmFsKCdiJyksIGI6IHoubnVtYmVyKCkgfSldKSAtPiB7IGtpbmQ6ICdhJywgYTogc3RyaW5nIH0gfCB7IGtpbmQ6ICdiJywgYjogbnVtYmVyIH1cbiAgICAgIGNvbnN0IG9wdGlvbnM6IFpvZFR5cGVBbnlbXSA9IFsuLi56b2QuX2RlZi5vcHRpb25zLnZhbHVlcygpXVxuICAgICAgY29uc3QgdHlwZXM6IHRzLlR5cGVOb2RlW10gPSBvcHRpb25zLm1hcCgob3B0aW9uKSA9PlxuICAgICAgICB6b2RUb1RzTm9kZShvcHRpb24sIC4uLm90aGVyQXJndW1lbnRzKVxuICAgICAgKVxuICAgICAgcmV0dXJuIGYuY3JlYXRlVW5pb25UeXBlTm9kZSh0eXBlcylcbiAgICB9XG5cbiAgICBjYXNlIFwiWm9kRWZmZWN0c1wiOiB7XG4gICAgICAvLyBpZ25vcmUgYW55IGVmZmVjdHMsIHRoZXkgd29uJ3QgZmFjdG9yIGludG8gdGhlIHR5cGVzXG4gICAgICBjb25zdCBub2RlID0gem9kVG9Uc05vZGUoXG4gICAgICAgIHpvZC5fZGVmLnNjaGVtYSxcbiAgICAgICAgLi4ub3RoZXJBcmd1bWVudHNcbiAgICAgICkgYXMgdHMuVHlwZU5vZGVcbiAgICAgIHJldHVybiBub2RlXG4gICAgfVxuXG4gICAgY2FzZSBcIlpvZE5hdGl2ZUVudW1cIjoge1xuICAgICAgY29uc3QgdHlwZSA9IGdldFR5cGVUeXBlXG5cbiAgICAgIGlmIChvcHRpb25zLm5hdGl2ZUVudW1zID09PSBcInVuaW9uXCIpIHtcbiAgICAgICAgLy8gYWxsb3cgb3ZlcnJpZGluZyB3aXRoIHRoaXMgb3B0aW9uXG4gICAgICAgIGlmICh0eXBlKSByZXR1cm4gbWF5YmVJZGVudGlmaWVyVG9UeXBlUmVmZXJlbmNlKHR5cGUpXG5cbiAgICAgICAgY29uc3QgdHlwZXMgPSBPYmplY3QudmFsdWVzKHpvZC5fZGVmLnZhbHVlcykubWFwKCh2YWx1ZSkgPT4ge1xuICAgICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09IFwibnVtYmVyXCIpIHtcbiAgICAgICAgICAgIHJldHVybiBmLmNyZWF0ZUxpdGVyYWxUeXBlTm9kZShmLmNyZWF0ZU51bWVyaWNMaXRlcmFsKHZhbHVlKSlcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIGYuY3JlYXRlTGl0ZXJhbFR5cGVOb2RlKGYuY3JlYXRlU3RyaW5nTGl0ZXJhbCh2YWx1ZSBhcyBzdHJpbmcpKVxuICAgICAgICB9KVxuICAgICAgICByZXR1cm4gZi5jcmVhdGVVbmlvblR5cGVOb2RlKHR5cGVzKVxuICAgICAgfVxuXG4gICAgICAvLyB6Lm5hdGl2ZUVudW0oRnJ1aXRzKSAtPiBGcnVpdHNcbiAgICAgIC8vIGNhbiByZXNvbHZlIEZydWl0cyBpbnRvIHN0b3JlIGFuZCB1c2VyIGNhbiBoYW5kbGUgZW51bXNcbiAgICAgIGlmICghdHlwZSkgcmV0dXJuIGNyZWF0ZVVua25vd25LZXl3b3JkTm9kZSgpXG5cbiAgICAgIGlmIChvcHRpb25zLm5hdGl2ZUVudW1zID09PSBcInJlc29sdmVcIikge1xuICAgICAgICBjb25zdCBlbnVtTWVtYmVycyA9IE9iamVjdC5lbnRyaWVzKFxuICAgICAgICAgIHpvZC5fZGVmLnZhbHVlcyBhcyBSZWNvcmQ8c3RyaW5nLCBzdHJpbmcgfCBudW1iZXI+XG4gICAgICAgICkubWFwKChba2V5LCB2YWx1ZV0pID0+IHtcbiAgICAgICAgICBjb25zdCBsaXRlcmFsID1cbiAgICAgICAgICAgIHR5cGVvZiB2YWx1ZSA9PT0gXCJudW1iZXJcIlxuICAgICAgICAgICAgICA/IGYuY3JlYXRlTnVtZXJpY0xpdGVyYWwodmFsdWUpXG4gICAgICAgICAgICAgIDogZi5jcmVhdGVTdHJpbmdMaXRlcmFsKHZhbHVlKVxuXG4gICAgICAgICAgcmV0dXJuIGYuY3JlYXRlRW51bU1lbWJlcihnZXRJZGVudGlmaWVyT3JTdHJpbmdMaXRlcmFsKGtleSksIGxpdGVyYWwpXG4gICAgICAgIH0pXG5cbiAgICAgICAgaWYgKHRzLmlzSWRlbnRpZmllcih0eXBlKSkge1xuICAgICAgICAgIHN0b3JlLm5hdGl2ZUVudW1zLnB1c2goXG4gICAgICAgICAgICBmLmNyZWF0ZUVudW1EZWNsYXJhdGlvbih1bmRlZmluZWQsIHR5cGUsIGVudW1NZW1iZXJzKVxuICAgICAgICAgIClcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICAnZ2V0VHlwZSBvbiBuYXRpdmVFbnVtIG11c3QgcmV0dXJuIGFuIGlkZW50aWZpZXIgd2hlbiBuYXRpdmVFbnVtcyBpcyBcInJlc29sdmVcIidcbiAgICAgICAgICApXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIG1heWJlSWRlbnRpZmllclRvVHlwZVJlZmVyZW5jZSh0eXBlKVxuICAgIH1cblxuICAgIGNhc2UgXCJab2RPcHRpb25hbFwiOiB7XG4gICAgICBjb25zdCBpbm5lclR5cGUgPSB6b2RUb1RzTm9kZShcbiAgICAgICAgem9kLl9kZWYuaW5uZXJUeXBlLFxuICAgICAgICAuLi5vdGhlckFyZ3VtZW50c1xuICAgICAgKSBhcyB0cy5UeXBlTm9kZVxuICAgICAgcmV0dXJuIGYuY3JlYXRlVW5pb25UeXBlTm9kZShbXG4gICAgICAgIGlubmVyVHlwZSxcbiAgICAgICAgZi5jcmVhdGVLZXl3b3JkVHlwZU5vZGUoU3ludGF4S2luZC5VbmRlZmluZWRLZXl3b3JkKSxcbiAgICAgIF0pXG4gICAgfVxuXG4gICAgY2FzZSBcIlpvZE51bGxhYmxlXCI6IHtcbiAgICAgIGNvbnN0IGlubmVyVHlwZSA9IHpvZFRvVHNOb2RlKFxuICAgICAgICB6b2QuX2RlZi5pbm5lclR5cGUsXG4gICAgICAgIC4uLm90aGVyQXJndW1lbnRzXG4gICAgICApIGFzIHRzLlR5cGVOb2RlXG4gICAgICByZXR1cm4gZi5jcmVhdGVVbmlvblR5cGVOb2RlKFtcbiAgICAgICAgaW5uZXJUeXBlLFxuICAgICAgICBmLmNyZWF0ZUxpdGVyYWxUeXBlTm9kZShmLmNyZWF0ZU51bGwoKSksXG4gICAgICBdKVxuICAgIH1cblxuICAgIGNhc2UgXCJab2RUdXBsZVwiOiB7XG4gICAgICAvLyB6LnR1cGxlKFt6LnN0cmluZygpLCB6Lm51bWJlcigpXSkgLT4gW3N0cmluZywgbnVtYmVyXVxuICAgICAgY29uc3QgdHlwZXMgPSB6b2QuX2RlZi5pdGVtcy5tYXAoKG9wdGlvbjogWm9kVHlwZUFueSkgPT5cbiAgICAgICAgem9kVG9Uc05vZGUob3B0aW9uLCAuLi5vdGhlckFyZ3VtZW50cylcbiAgICAgIClcbiAgICAgIHJldHVybiBmLmNyZWF0ZVR1cGxlVHlwZU5vZGUodHlwZXMpXG4gICAgfVxuXG4gICAgY2FzZSBcIlpvZFJlY29yZFwiOiB7XG4gICAgICAvLyB6LnJlY29yZCh6Lm51bWJlcigpKSAtPiB7IFt4OiBzdHJpbmddOiBudW1iZXIgfVxuICAgICAgY29uc3QgdmFsdWVUeXBlID0gem9kVG9Uc05vZGUoem9kLl9kZWYudmFsdWVUeXBlLCAuLi5vdGhlckFyZ3VtZW50cylcblxuICAgICAgY29uc3Qgbm9kZSA9IGYuY3JlYXRlVHlwZUxpdGVyYWxOb2RlKFtcbiAgICAgICAgZi5jcmVhdGVJbmRleFNpZ25hdHVyZShcbiAgICAgICAgICB1bmRlZmluZWQsXG4gICAgICAgICAgW1xuICAgICAgICAgICAgZi5jcmVhdGVQYXJhbWV0ZXJEZWNsYXJhdGlvbihcbiAgICAgICAgICAgICAgdW5kZWZpbmVkLFxuICAgICAgICAgICAgICB1bmRlZmluZWQsXG4gICAgICAgICAgICAgIGYuY3JlYXRlSWRlbnRpZmllcihcInhcIiksXG4gICAgICAgICAgICAgIHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgZi5jcmVhdGVLZXl3b3JkVHlwZU5vZGUoU3ludGF4S2luZC5TdHJpbmdLZXl3b3JkKVxuICAgICAgICAgICAgKSxcbiAgICAgICAgICBdLFxuICAgICAgICAgIHZhbHVlVHlwZVxuICAgICAgICApLFxuICAgICAgXSlcblxuICAgICAgcmV0dXJuIG5vZGVcbiAgICB9XG5cbiAgICBjYXNlIFwiWm9kTWFwXCI6IHtcbiAgICAgIC8vIHoubWFwKHouc3RyaW5nKCkpIC0+IE1hcDxzdHJpbmc+XG4gICAgICBjb25zdCB2YWx1ZVR5cGUgPSB6b2RUb1RzTm9kZSh6b2QuX2RlZi52YWx1ZVR5cGUsIC4uLm90aGVyQXJndW1lbnRzKVxuICAgICAgY29uc3Qga2V5VHlwZSA9IHpvZFRvVHNOb2RlKHpvZC5fZGVmLmtleVR5cGUsIC4uLm90aGVyQXJndW1lbnRzKVxuXG4gICAgICBjb25zdCBub2RlID0gZi5jcmVhdGVUeXBlUmVmZXJlbmNlTm9kZShmLmNyZWF0ZUlkZW50aWZpZXIoXCJNYXBcIiksIFtcbiAgICAgICAga2V5VHlwZSxcbiAgICAgICAgdmFsdWVUeXBlLFxuICAgICAgXSlcblxuICAgICAgcmV0dXJuIG5vZGVcbiAgICB9XG5cbiAgICBjYXNlIFwiWm9kU2V0XCI6IHtcbiAgICAgIC8vIHouc2V0KHouc3RyaW5nKCkpIC0+IFNldDxzdHJpbmc+XG4gICAgICBjb25zdCB0eXBlID0gem9kVG9Uc05vZGUoem9kLl9kZWYudmFsdWVUeXBlLCAuLi5vdGhlckFyZ3VtZW50cylcblxuICAgICAgY29uc3Qgbm9kZSA9IGYuY3JlYXRlVHlwZVJlZmVyZW5jZU5vZGUoZi5jcmVhdGVJZGVudGlmaWVyKFwiU2V0XCIpLCBbdHlwZV0pXG4gICAgICByZXR1cm4gbm9kZVxuICAgIH1cblxuICAgIGNhc2UgXCJab2RJbnRlcnNlY3Rpb25cIjoge1xuICAgICAgLy8gei5udW1iZXIoKS5hbmQoei5zdHJpbmcoKSkgLT4gbnVtYmVyICYgc3RyaW5nXG4gICAgICBjb25zdCBsZWZ0ID0gem9kVG9Uc05vZGUoem9kLl9kZWYubGVmdCwgLi4ub3RoZXJBcmd1bWVudHMpXG4gICAgICBjb25zdCByaWdodCA9IHpvZFRvVHNOb2RlKHpvZC5fZGVmLnJpZ2h0LCAuLi5vdGhlckFyZ3VtZW50cylcbiAgICAgIGNvbnN0IG5vZGUgPSBmLmNyZWF0ZUludGVyc2VjdGlvblR5cGVOb2RlKFtsZWZ0LCByaWdodF0pXG4gICAgICByZXR1cm4gbm9kZVxuICAgIH1cblxuICAgIGNhc2UgXCJab2RQcm9taXNlXCI6IHtcbiAgICAgIC8vIHoucHJvbWlzZSh6LnN0cmluZygpKSAtPiBQcm9taXNlPHN0cmluZz5cbiAgICAgIGNvbnN0IHR5cGUgPSB6b2RUb1RzTm9kZSh6b2QuX2RlZi50eXBlLCAuLi5vdGhlckFyZ3VtZW50cylcblxuICAgICAgY29uc3Qgbm9kZSA9IGYuY3JlYXRlVHlwZVJlZmVyZW5jZU5vZGUoZi5jcmVhdGVJZGVudGlmaWVyKFwiUHJvbWlzZVwiKSwgW1xuICAgICAgICB0eXBlLFxuICAgICAgXSlcblxuICAgICAgcmV0dXJuIG5vZGVcbiAgICB9XG5cbiAgICBjYXNlIFwiWm9kRnVuY3Rpb25cIjoge1xuICAgICAgLy8gei5mdW5jdGlvbigpLmFyZ3Moei5zdHJpbmcoKSkucmV0dXJucyh6Lm51bWJlcigpKSAtPiAoYXJnc18wOiBzdHJpbmcpID0+IG51bWJlclxuICAgICAgY29uc3QgYXJndW1lbnRUeXBlcyA9IHpvZC5fZGVmLmFyZ3MuX2RlZi5pdGVtcy5tYXAoXG4gICAgICAgIChhcmd1bWVudDogWm9kVHlwZUFueSwgaW5kZXg6IG51bWJlcikgPT4ge1xuICAgICAgICAgIGNvbnN0IGFyZ3VtZW50VHlwZSA9IHpvZFRvVHNOb2RlKGFyZ3VtZW50LCAuLi5vdGhlckFyZ3VtZW50cylcblxuICAgICAgICAgIHJldHVybiBmLmNyZWF0ZVBhcmFtZXRlckRlY2xhcmF0aW9uKFxuICAgICAgICAgICAgdW5kZWZpbmVkLFxuICAgICAgICAgICAgdW5kZWZpbmVkLFxuICAgICAgICAgICAgZi5jcmVhdGVJZGVudGlmaWVyKGBhcmdzXyR7aW5kZXh9YCksXG4gICAgICAgICAgICB1bmRlZmluZWQsXG4gICAgICAgICAgICBhcmd1bWVudFR5cGVcbiAgICAgICAgICApXG4gICAgICAgIH1cbiAgICAgICkgYXMgdHMuUGFyYW1ldGVyRGVjbGFyYXRpb25bXVxuXG4gICAgICBhcmd1bWVudFR5cGVzLnB1c2goXG4gICAgICAgIGYuY3JlYXRlUGFyYW1ldGVyRGVjbGFyYXRpb24oXG4gICAgICAgICAgdW5kZWZpbmVkLFxuICAgICAgICAgIGYuY3JlYXRlVG9rZW4oU3ludGF4S2luZC5Eb3REb3REb3RUb2tlbiksXG4gICAgICAgICAgZi5jcmVhdGVJZGVudGlmaWVyKGBhcmdzXyR7YXJndW1lbnRUeXBlcy5sZW5ndGh9YCksXG4gICAgICAgICAgdW5kZWZpbmVkLFxuICAgICAgICAgIGYuY3JlYXRlQXJyYXlUeXBlTm9kZShjcmVhdGVVbmtub3duS2V5d29yZE5vZGUoKSlcbiAgICAgICAgKVxuICAgICAgKVxuXG4gICAgICBjb25zdCByZXR1cm5UeXBlID0gem9kVG9Uc05vZGUoem9kLl9kZWYucmV0dXJucywgLi4ub3RoZXJBcmd1bWVudHMpXG5cbiAgICAgIGNvbnN0IG5vZGUgPSBmLmNyZWF0ZUZ1bmN0aW9uVHlwZU5vZGUoXG4gICAgICAgIHVuZGVmaW5lZCxcbiAgICAgICAgYXJndW1lbnRUeXBlcyxcbiAgICAgICAgcmV0dXJuVHlwZVxuICAgICAgKVxuXG4gICAgICByZXR1cm4gbm9kZVxuICAgIH1cblxuICAgIGNhc2UgXCJab2REZWZhdWx0XCI6IHtcbiAgICAgIC8vIHouc3RyaW5nKCkub3B0aW9uYWwoKS5kZWZhdWx0KCdoaScpIC0+IHN0cmluZ1xuICAgICAgY29uc3QgdHlwZSA9IHpvZFRvVHNOb2RlKFxuICAgICAgICB6b2QuX2RlZi5pbm5lclR5cGUsXG4gICAgICAgIC4uLm90aGVyQXJndW1lbnRzXG4gICAgICApIGFzIHRzLlR5cGVOb2RlXG5cbiAgICAgIGNvbnN0IGZpbHRlcmVkTm9kZXM6IHRzLk5vZGVbXSA9IFtdXG5cbiAgICAgIHR5cGUuZm9yRWFjaENoaWxkKChub2RlKSA9PiB7XG4gICAgICAgIGlmICghW1N5bnRheEtpbmQuVW5kZWZpbmVkS2V5d29yZF0uaW5jbHVkZXMobm9kZS5raW5kKSkge1xuICAgICAgICAgIGZpbHRlcmVkTm9kZXMucHVzaChub2RlKVxuICAgICAgICB9XG4gICAgICB9KVxuXG4gICAgICAvLyBAdHMtZXhwZWN0LWVycm9yIG5lZWRlZCB0byBzZXQgY2hpbGRyZW5cbiAgICAgIHR5cGUudHlwZXMgPSBmaWx0ZXJlZE5vZGVzXG5cbiAgICAgIHJldHVybiB0eXBlXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGYuY3JlYXRlS2V5d29yZFR5cGVOb2RlKFN5bnRheEtpbmQuQW55S2V5d29yZClcbn1cbiIsICJpbXBvcnQgKiBhcyBmcyBmcm9tIFwibm9kZTpmcy9wcm9taXNlc1wiXG5pbXBvcnQgY3J5cHRvIGZyb20gXCJub2RlOmNyeXB0b1wiXG5pbXBvcnQgcGF0aCBmcm9tIFwibm9kZTpwYXRoXCJcbmltcG9ydCB7IFByb2plY3QsIFN5bnRheEtpbmQgfSBmcm9tIFwidHMtbW9ycGhcIlxuaW1wb3J0ICogYXMgZXNidWlsZCBmcm9tIFwiZXNidWlsZFwiXG5pbXBvcnQgeyBkZWZhdWx0TWFwRmlsZVBhdGhUb0hUVFBSb3V0ZSB9IGZyb20gXCIuL2xpYi9kZWZhdWx0LW1hcC1maWxlLXBhdGgtdG8taHR0cC1yb3V0ZVwiXG5cbmludGVyZmFjZSBHZW5lcmF0ZVJvdXRlVHlwZXNPcHRzIHtcbiAgcGFja2FnZURpcjogc3RyaW5nXG4gIGFsbG93ZWRJbXBvcnRQYXR0ZXJucz86IHN0cmluZ1tdXG4gIG91dHB1dEZpbGU/OiBzdHJpbmdcbiAgcGF0aEdsb2I/OiBzdHJpbmdcbiAgYXBpUHJlZml4Pzogc3RyaW5nXG4gIG1hcEZpbGVQYXRoVG9IVFRQUm91dGU/OiAoZmlsZV9wYXRoOiBzdHJpbmcpID0+IHN0cmluZ1xuICAvKipcbiAgICogSWYgcHJvdmlkZWQsIG9ubHkgcm91dGVzIHRoYXQgcmV0dXJuIHRydWUgd2lsbCBiZSBpbmNsdWRlZCBpbiB0aGUgZ2VuZXJhdGVkIHR5cGVzLlxuICAgKi9cbiAgZmlsdGVyUm91dGVzPzogKHJvdXRlOiBzdHJpbmcpID0+IGJvb2xlYW5cbiAgLyoqXG4gICAqIEJ5IGRlZmF1bHQsIHJvdXRlcyB0aGF0IGhhdmUgYGV4Y2x1ZGVGcm9tT3BlbkFwaWAgc2V0IHRvIHRydWUgd2lsbCBiZSBleGNsdWRlZCBmcm9tIHRoZSBnZW5lcmF0ZWQgdHlwZXMuXG4gICAqIFNldCB0aGlzIHRvIHRydWUgdG8gaW5jbHVkZSB0aGVtLlxuICAgKi9cbiAgaW5jbHVkZU9wZW5BcGlFeGNsdWRlZFJvdXRlcz86IGJvb2xlYW5cbiAgZXNidWlsZE9wdGlvbnM/OiBlc2J1aWxkLkJ1aWxkT3B0aW9uc1xufVxuXG5leHBvcnQgY29uc3QgZXh0cmFjdFJvdXRlU3BlY3MgPSBhc3luYyAob3B0czogR2VuZXJhdGVSb3V0ZVR5cGVzT3B0cykgPT4ge1xuICBjb25zdCB7IHBhY2thZ2VEaXIsIHBhdGhHbG9iID0gXCIvcGFnZXMvYXBpLyoqLyoudHNcIiB9ID0gb3B0c1xuICBjb25zdCBmdWxsUGF0aEdsb2IgPSBwYXRoLnBvc2l4LmpvaW4ocGFja2FnZURpciwgcGF0aEdsb2IpXG5cbiAgY29uc3QgcHJvamVjdCA9IG5ldyBQcm9qZWN0KHsgY29tcGlsZXJPcHRpb25zOiB7IGRlY2xhcmF0aW9uOiB0cnVlIH0gfSlcblxuICBjb25zdCBwYXRoczogc3RyaW5nW10gPSBbXVxuICBmb3IgKGNvbnN0IHNvdXJjZUZpbGUgb2YgcHJvamVjdC5hZGRTb3VyY2VGaWxlc0F0UGF0aHMoZnVsbFBhdGhHbG9iKSkge1xuICAgIGNvbnN0IGRlZmF1bHRFeHBvcnQgPSBzb3VyY2VGaWxlLmdldEV4cG9ydEFzc2lnbm1lbnQoXG4gICAgICAoZCkgPT4gIWQuaXNFeHBvcnRFcXVhbHMoKVxuICAgIClcbiAgICBpZiAoIWRlZmF1bHRFeHBvcnQpIHtcbiAgICAgIGNvbnRpbnVlXG4gICAgfVxuXG4gICAgY29uc3QgY3VycmllZFdpdGhSb3V0ZVNwZWNDYWxsID0gZGVmYXVsdEV4cG9ydFxuICAgICAgLmdldEV4cHJlc3Npb24oKVxuICAgICAgLmFzS2luZChTeW50YXhLaW5kLkNhbGxFeHByZXNzaW9uKVxuICAgIGlmICghY3VycmllZFdpdGhSb3V0ZVNwZWNDYWxsKSB7XG4gICAgICBjb250aW51ZVxuICAgIH1cbiAgICBjb25zdCB3aXRoUm91dGVTcGVjQ2FsbCA9IGN1cnJpZWRXaXRoUm91dGVTcGVjQ2FsbFxuICAgICAgLmdldEV4cHJlc3Npb24oKVxuICAgICAgLmFzS2luZChTeW50YXhLaW5kLkNhbGxFeHByZXNzaW9uKVxuICAgIGlmICghd2l0aFJvdXRlU3BlY0NhbGwpIHtcbiAgICAgIGNvbnRpbnVlXG4gICAgfVxuXG4gICAgY29uc3QgW3JvdXRlU3BlY10gPSB3aXRoUm91dGVTcGVjQ2FsbC5nZXRBcmd1bWVudHMoKVxuICAgIGlmICghcm91dGVTcGVjKSB7XG4gICAgICBjb250aW51ZVxuICAgIH1cblxuICAgIHNvdXJjZUZpbGUuYWRkU3RhdGVtZW50cyhcbiAgICAgIGBleHBvcnQgY29uc3QgZXh0cmFjdGVkUm91dGVTcGVjID0gJHtyb3V0ZVNwZWMuZ2V0VGV4dCgpfWBcbiAgICApXG5cbiAgICBkZWZhdWx0RXhwb3J0LnJlbW92ZSgpXG5cbiAgICAvLyBSZW1vdmUgYWxsIHVudXNlZCBpbXBvcnRzIHNvIGZpbGUgY2FuIGJlIHRyZWUgc2hha2VuXG4gICAgLy8gKEFzc3VtZXMgYWxsIGltcG9ydHMgYXJlIGZyZWUgb2Ygc2lkZS1lZmZlY3RzKVxuICAgIGxldCBsYXN0V2lkdGg6IG51bWJlclxuICAgIGRvIHtcbiAgICAgIGxhc3RXaWR0aCA9IHNvdXJjZUZpbGUuZ2V0RnVsbFdpZHRoKClcbiAgICAgIC8vIE1heSBuZWVkIHRvIGNhbGwgdGhpcyBtdWx0aXBsZSB0aW1lc1xuICAgICAgc291cmNlRmlsZS5maXhVbnVzZWRJZGVudGlmaWVycygpXG4gICAgfSB3aGlsZSAobGFzdFdpZHRoICE9PSBzb3VyY2VGaWxlLmdldEZ1bGxXaWR0aCgpKVxuXG4gICAgY29uc3QgYWJzb2x1dGVQYWNrYWdlRGlyID0gcGF0aC5yZXNvbHZlKHBhY2thZ2VEaXIpXG4gICAgY29uc3QgcmVsYXRpdmVQYXRoID0gcGF0aC5yZWxhdGl2ZShcbiAgICAgIGFic29sdXRlUGFja2FnZURpcixcbiAgICAgIHNvdXJjZUZpbGUuZ2V0RmlsZVBhdGgoKVxuICAgIClcbiAgICBwYXRocy5wdXNoKHJlbGF0aXZlUGF0aClcbiAgfVxuXG4gIGNvbnN0IHBhdGhUb0lkOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge31cbiAgZm9yIChjb25zdCBwYXRoIG9mIHBhdGhzKSB7XG4gICAgLy8gYWRkIHByZWZpeCB0byBhdm9pZCBzdGFydGluZyB3aXRoIGEgbnVtYmVyXG4gICAgcGF0aFRvSWRbcGF0aF0gPVxuICAgICAgXCJoYXNoXCIgKyBjcnlwdG8uY3JlYXRlSGFzaChcInNoYTI1NlwiKS51cGRhdGUocGF0aCkuZGlnZXN0KFwiaGV4XCIpXG4gIH1cblxuICBjb25zdCBlbnRyeVBvaW50Q29udGVudCA9IGBcbiAgJHtwYXRoc1xuICAgIC5tYXAoKHApID0+IGBpbXBvcnQge2V4dHJhY3RlZFJvdXRlU3BlYyBhcyAke3BhdGhUb0lkW3BdfX0gZnJvbSBcIi4vJHtwfVwiYClcbiAgICAuam9pbihcIlxcblwiKX1cblxuICBleHBvcnQgY29uc3Qgcm91dGVzID0ge1xuICAgICR7cGF0aHNcbiAgICAgIC5tYXAoKHApID0+IHtcbiAgICAgICAgY29uc3QgaHR0cFJvdXRlID0gKFxuICAgICAgICAgIG9wdHMubWFwRmlsZVBhdGhUb0hUVFBSb3V0ZSA/P1xuICAgICAgICAgIGRlZmF1bHRNYXBGaWxlUGF0aFRvSFRUUFJvdXRlKG9wdHMuYXBpUHJlZml4KVxuICAgICAgICApKHApXG5cbiAgICAgICAgcmV0dXJuIGBcIiR7aHR0cFJvdXRlfVwiOiAke3BhdGhUb0lkW3BdfWBcbiAgICAgIH0pXG4gICAgICAuam9pbihcIixcXG5cIil9XG4gIH1cbiAgYFxuXG4gIC8vIENvcHkgYWxsb3dlZCBpbXBvcnQgZ2xvYnMgaW50byBwcm9qZWN0XG4gIGlmIChvcHRzLmFsbG93ZWRJbXBvcnRQYXR0ZXJucykge1xuICAgIHByb2plY3QuYWRkU291cmNlRmlsZXNBdFBhdGhzKG9wdHMuYWxsb3dlZEltcG9ydFBhdHRlcm5zKVxuICB9XG5cbiAgLy8gR2VuZXJhdGUgdHlwZXMgKC5kLnRzKVxuICBjb25zdCBlbnRyeVBvaW50ID0gcHJvamVjdC5jcmVhdGVTb3VyY2VGaWxlKFxuICAgIFwiZXh0cmFjdGVkLXJvdXRlLXNwZWNzLnRzXCIsXG4gICAgZW50cnlQb2ludENvbnRlbnRcbiAgKVxuICBjb25zdCBlbWl0UmVzdWx0ID0gZW50cnlQb2ludC5nZXRFbWl0T3V0cHV0KHsgZW1pdE9ubHlEdHNGaWxlczogdHJ1ZSB9KVxuICBpZiAob3B0cy5vdXRwdXRGaWxlKSB7XG4gICAgY29uc3QgZGVjbGFyYXRpb25GaWxlUGF0aCA9IHBhdGguam9pbihcbiAgICAgIHBhdGguZGlybmFtZShvcHRzLm91dHB1dEZpbGUpLFxuICAgICAgcGF0aC5iYXNlbmFtZShvcHRzLm91dHB1dEZpbGUpLnJlcGxhY2UoXCIubWpzXCIsIFwiXCIpLnJlcGxhY2UoXCIuanNcIiwgXCJcIikgK1xuICAgICAgICBcIi5kLnRzXCJcbiAgICApXG4gICAgYXdhaXQgZnMud3JpdGVGaWxlKFxuICAgICAgZGVjbGFyYXRpb25GaWxlUGF0aCxcbiAgICAgIGVtaXRSZXN1bHQuZ2V0T3V0cHV0RmlsZXMoKVswXS5nZXRUZXh0KClcbiAgICApXG4gIH1cblxuICAvLyBHZW5lcmF0ZSB2YWx1ZXMgKC5qcylcbiAgY29uc3QgcGtnUmF3ID0gYXdhaXQgZnMucmVhZEZpbGUoXG4gICAgcGF0aC5qb2luKHBhY2thZ2VEaXIsIFwicGFja2FnZS5qc29uXCIpLFxuICAgIFwidXRmLThcIlxuICApXG4gIGNvbnN0IHBrZyA9IEpTT04ucGFyc2UocGtnUmF3KVxuXG4gIGF3YWl0IGVzYnVpbGQuYnVpbGQoe1xuICAgIC4uLm9wdHMuZXNidWlsZE9wdGlvbnMsXG4gICAgc3RkaW46IHtcbiAgICAgIGNvbnRlbnRzOiBlbnRyeVBvaW50Q29udGVudCxcbiAgICAgIHJlc29sdmVEaXI6IHBhdGgucmVzb2x2ZShwYWNrYWdlRGlyKSxcbiAgICB9LFxuICAgIG91dGZpbGU6IG9wdHMub3V0cHV0RmlsZSxcbiAgICBidW5kbGU6IHRydWUsXG4gICAgcGxhdGZvcm06IFwibm9kZVwiLFxuICAgIGZvcm1hdDogXCJlc21cIixcbiAgICB0cmVlU2hha2luZzogdHJ1ZSxcbiAgICBleHRlcm5hbDogW1xuICAgICAgLi4uT2JqZWN0LmtleXMocGtnLmRlcGVuZGVuY2llcyksXG4gICAgICAuLi5PYmplY3Qua2V5cyhwa2cuZGV2RGVwZW5kZW5jaWVzKSxcbiAgICAgIC4uLihvcHRzLmVzYnVpbGRPcHRpb25zPy5leHRlcm5hbCA/PyBbXSksXG4gICAgXSxcbiAgICBwbHVnaW5zOiBbXG4gICAgICAvLyBXaXRoIHRoaXMgcGx1Z2luLCBlc2J1aWxkIHdpbGwgbmV2ZXIgdG91Y2ggdGhlIGFjdHVhbCBmaWxlc3lzdGVtIGFuZCB0aHVzIGNhbm5vdCBpbnRlcmFjdCB3aXRoIGltcG9ydHMgdGhhdCBkb24ndCBtYXRjaCBhbGxvd2VkSW1wb3J0UGF0dGVybnNbXS5cbiAgICAgIHtcbiAgICAgICAgbmFtZTogXCJyZXNvbHZlLXZpcnR1YWwtZnNcIixcbiAgICAgICAgc2V0dXAoYnVpbGQpIHtcbiAgICAgICAgICBidWlsZC5vbkxvYWQoeyBmaWx0ZXI6IC8uKi8gfSwgKGFyZ3MpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGNvbnRlbnRzID0gcHJvamVjdC5nZXRTb3VyY2VGaWxlKGFyZ3MucGF0aCk/LmdldEZ1bGxUZXh0KClcbiAgICAgICAgICAgIGlmICghY29udGVudHMpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBjb250ZW50czogXCJleHBvcnQgZGVmYXVsdCB7fVwiLFxuICAgICAgICAgICAgICAgIGxvYWRlcjogXCJ0c1wiLFxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgIGNvbnRlbnRzLFxuICAgICAgICAgICAgICBsb2FkZXI6IFwidHNcIixcbiAgICAgICAgICAgICAgcmVzb2x2ZURpcjogcGF0aC5kaXJuYW1lKGFyZ3MucGF0aCksXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSlcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgICAuLi4ob3B0cy5lc2J1aWxkT3B0aW9ucz8ucGx1Z2lucyA/PyBbXSksXG4gICAgXSxcbiAgfSlcbn1cbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7QUFBQTs7O0FDQUE7QUFBQSxPQUFPLFFBQVE7QUFDZjtBQUFBLEVBQ0U7QUFBQSxPQUdLO0FBRVAsU0FBUyxLQUFBQSxVQUFTOzs7QUNQbEI7QUFBQSxPQUFPQyxXQUFVOzs7QUNBakI7QUFBQSxPQUFPLFVBQVU7QUFFVixJQUFNLGdDQUNYLENBQUMsYUFBcUIsV0FDdEIsQ0FBQyxjQUFzQjtBQUNyQixRQUFNLFFBQVEsVUFFWCxRQUFRLFNBQVMsR0FBRyxFQUVwQixRQUFRLE9BQU8sRUFBRSxFQUVqQixRQUFRLFVBQVUsRUFBRSxFQUVwQixRQUFRLFlBQVksRUFBRSxFQUV0QixRQUFRLFVBQVUsRUFBRSxFQUVwQixRQUFRLFNBQVMsRUFBRSxFQUVuQixRQUFRLFVBQVUsRUFBRSxFQUVwQixRQUFRLGlCQUFpQixFQUFFO0FBRTlCLFNBQU8sS0FBSyxLQUFLLFlBQVksS0FBSztBQUNwQzs7O0FEYkssSUFBTSx1QkFBdUIsT0FBTyxTQU1KO0FBQ3JDLFFBQU0sU0FBUyxNQUFNLCtDQUFPLDZCQUFVO0FBQ3RDLFFBQU0sVUFBVSxNQUFNLCtDQUFPLDZCQUFXO0FBQ3hDLFFBQU07QUFB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QixnQkFBQUEsSUFBa0M7QUFDbkQsZ0JBQUksQ0FBQyxVQUFVO0FBQ2IscUJBQU87QUFBQSxnQkFDTCxVQUFVO0FBQUEsZ0JBQ1YsUUFBUTtBQUFBLGNBQ1Y7QUFBQSxZQUNGO0FBRUEsbUJBQU87QUFBQSxjQUNMO0FBQUEsY0FDQSxRQUFRO0FBQUEsY0FDUixZQUFZRixNQUFLLFFBQVEsS0FBSyxJQUFJO0FBQUEsWUFDcEM7QUFBQSxVQUNGLENBQUM7QUFBQSxRQUNIO0FBQUEsTUFDRjtBQUFBLE1BQ0EsSUFBSSxnQkFBSyxtQkFBTCxtQkFBcUIsWUFBckIsWUFBZ0MsQ0FBQztBQUFBLElBQ3ZDO0FBQUEsRUFDRixDQUFDO0FBQ0g7IiwKICAibmFtZXMiOiBbInoiLCAicGF0aCIsICJwYXRoIiwgInBhdGgiLCAiZGVkZW50IiwgInBhdGgiLCAiZGVkZW50IiwgIl9hIiwgInoiLCAiZnMiLCAiZGVkZW50IiwgInBhcnNlRGVzY3JpcHRpb24iLCAib3B0aW9ucyIsICJ6IiwgIl8iLCAiZnMiLCAicGF0aCIsICJTeW50YXhLaW5kIiwgInBhdGgiLCAiU3ludGF4S2luZCIsICJfYSIsICJidWlsZCJdCn0K
|
|
1574
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vc3JjL2dlbmVyYXRvcnMvaW5kZXgudHMiLCAiLi4vLi4vc3JjL2dlbmVyYXRvcnMvZ2VuZXJhdGUtb3BlbmFwaS9pbmRleC50cyIsICIuLi8uLi9zcmMvZ2VuZXJhdG9ycy9saWIvcGFyc2Utcm91dGVzLWluLXBhY2thZ2UudHMiLCAiLi4vLi4vc3JjL2dlbmVyYXRvcnMvbGliL2RlZmF1bHQtbWFwLWZpbGUtcGF0aC10by1odHRwLXJvdXRlLnRzIiwgIi4uLy4uL3NyYy9nZW5lcmF0b3JzL2xpYi96b2Qtb3BlbmFwaS50cyIsICIuLi8uLi9zcmMvZ2VuZXJhdG9ycy9saWIvZnJvbnQtbWF0dGVyLnRzIiwgIi4uLy4uL3NyYy9nZW5lcmF0b3JzL3V0aWxzL3ByZWZpeC1vYmplY3Qta2V5cy13aXRoLXgudHMiLCAiLi4vLi4vc3JjL2dlbmVyYXRvcnMvdXRpbHMvZGFzaGlmeS1vYmplY3Qta2V5cy50cyIsICIuLi8uLi9zcmMvZ2VuZXJhdG9ycy9nZW5lcmF0ZS1vcGVuYXBpL2VtYmVkLXNjaGVtYS1yZWZlcmVuY2VzLnRzIiwgIi4uLy4uL3NyYy9nZW5lcmF0b3JzL2dlbmVyYXRlLW9wZW5hcGkvZmVybi1zZGstdXRpbHMudHMiLCAiLi4vLi4vc3JjL2dlbmVyYXRvcnMvZ2VuZXJhdGUtcm91dGUtdHlwZXMvaW5kZXgudHMiLCAiLi4vLi4vc3JjL2dlbmVyYXRvcnMvbGliL3pvZC10by10cy50cyIsICIuLi8uLi9zcmMvZ2VuZXJhdG9ycy9leHRyYWN0LXJvdXRlLXNwZWMtc2NoZW1hcy50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiZXhwb3J0ICogZnJvbSBcIi4vZ2VuZXJhdGUtb3BlbmFwaVwiXG5leHBvcnQgKiBmcm9tIFwiLi9nZW5lcmF0ZS1yb3V0ZS10eXBlc1wiXG5leHBvcnQgKiBmcm9tIFwiLi9leHRyYWN0LXJvdXRlLXNwZWMtc2NoZW1hc1wiXG4iLCAiaW1wb3J0IGZzIGZyb20gXCJub2RlOmZzL3Byb21pc2VzXCJcbmltcG9ydCB7XG4gIE9wZW5BcGlCdWlsZGVyLFxuICBPcGVyYXRpb25PYmplY3QsXG4gIFBhcmFtZXRlck9iamVjdCxcbn0gZnJvbSBcIm9wZW5hcGkzLXRzL29hczMxXCJcbmltcG9ydCB7IFNldHVwUGFyYW1zIH0gZnJvbSBcIi4uLy4uL3R5cGVzXCJcbmltcG9ydCB7IHogfSBmcm9tIFwiem9kXCJcbmltcG9ydCB7IHBhcnNlUm91dGVzSW5QYWNrYWdlIH0gZnJvbSBcIi4uL2xpYi9wYXJzZS1yb3V0ZXMtaW4tcGFja2FnZVwiXG5pbXBvcnQgeyBnZW5lcmF0ZVNjaGVtYSB9IGZyb20gXCIuLi9saWIvem9kLW9wZW5hcGlcIlxuaW1wb3J0IHsgZW1iZWRTY2hlbWFSZWZlcmVuY2VzIH0gZnJvbSBcIi4vZW1iZWQtc2NoZW1hLXJlZmVyZW5jZXNcIlxuaW1wb3J0IHsgbWFwTWV0aG9kc1RvRmVyblNka01ldGFkYXRhIH0gZnJvbSBcIi4vZmVybi1zZGstdXRpbHNcIlxuaW1wb3J0IHsgcGFyc2VGcm9udE1hdHRlciwgdGVzdEZyb250TWF0dGVyIH0gZnJvbSBcIi4uL2xpYi9mcm9udC1tYXR0ZXJcIlxuaW1wb3J0IGRlZGVudCBmcm9tIFwiZGVkZW50XCJcbmltcG9ydCB7IHByZWZpeE9iamVjdEtleXNXaXRoWCB9IGZyb20gXCIuLi91dGlscy9wcmVmaXgtb2JqZWN0LWtleXMtd2l0aC14XCJcbmltcG9ydCB7IGRhc2hpZnlPYmplY3RLZXlzIH0gZnJvbSBcIi4uL3V0aWxzL2Rhc2hpZnktb2JqZWN0LWtleXNcIlxuXG5mdW5jdGlvbiByZXBsYWNlRmlyc3RDaGFyVG9Mb3dlcmNhc2Uoc3RyOiBzdHJpbmcpIHtcbiAgaWYgKHN0ci5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gc3RyXG4gIH1cblxuICBjb25zdCBmaXJzdENoYXIgPSBzdHIuY2hhckF0KDApLnRvTG93ZXJDYXNlKClcbiAgcmV0dXJuIGZpcnN0Q2hhciArIHN0ci5zbGljZSgxKVxufVxuXG5mdW5jdGlvbiB0cmFuc2Zvcm1QYXRoVG9PcGVyYXRpb25JZChwYXRoOiBzdHJpbmcpOiBzdHJpbmcge1xuICBjb25zdCBwYXJ0cyA9IHBhdGhcbiAgICAucmVwbGFjZSgvLS9nLCBcIl9cIilcbiAgICAuc3BsaXQoXCIvXCIpXG4gICAgLmZpbHRlcigocGFydCkgPT4gcGFydCAhPT0gXCJcIilcbiAgY29uc3QgdHJhbnNmb3JtZWRQYXJ0cyA9IHBhcnRzLm1hcCgocGFydCkgPT4ge1xuICAgIGlmIChwYXJ0LnN0YXJ0c1dpdGgoXCJbXCIpICYmIHBhcnQuZW5kc1dpdGgoXCJdXCIpKSB7XG4gICAgICAvLyBDb252ZXJ0IFtwYXJhbV0gdG8gQnlQYXJhbVxuICAgICAgY29uc3Qgc2VydmljZU5hbWUgPSBwYXJ0LnNsaWNlKDEsIC0xKVxuICAgICAgY29uc3Qgd29yZHMgPSBzZXJ2aWNlTmFtZS5zcGxpdChcIl9cIilcbiAgICAgIGNvbnN0IGNhcGl0YWxpemVkV29yZHMgPSB3b3Jkcy5tYXAoXG4gICAgICAgICh3b3JkKSA9PiB3b3JkLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpICsgd29yZC5zbGljZSgxKVxuICAgICAgKVxuICAgICAgcmV0dXJuIGBCeSR7Y2FwaXRhbGl6ZWRXb3Jkcy5qb2luKFwiXCIpfWBcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gQ29udmVydCBhcGlfcGF0aCB0byBBcGlQYXRoXG4gICAgICBjb25zdCB3b3JkcyA9IHBhcnQuc3BsaXQoXCJfXCIpXG4gICAgICBjb25zdCBjYXBpdGFsaXplZFdvcmRzID0gd29yZHMubWFwKFxuICAgICAgICAod29yZCkgPT4gd29yZC5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSArIHdvcmQuc2xpY2UoMSlcbiAgICAgIClcbiAgICAgIHJldHVybiBjYXBpdGFsaXplZFdvcmRzLmpvaW4oXCJcIilcbiAgICB9XG4gIH0pXG5cbiAgcmV0dXJuIHJlcGxhY2VGaXJzdENoYXJUb0xvd2VyY2FzZSh0cmFuc2Zvcm1lZFBhcnRzLmpvaW4oXCJcIikpXG59XG5cbmZ1bmN0aW9uIHBhc2NhbENhc2UoaW5wdXQ6IHN0cmluZyk6IHN0cmluZyB7XG4gIGNvbnN0IHdvcmRzID0gaW5wdXQuc3BsaXQoXCIgXCIpXG4gIGNvbnN0IGNhcGl0YWxpemVkV29yZHMgPSB3b3Jkcy5tYXAoXG4gICAgKHdvcmQpID0+IHdvcmQuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkgKyB3b3JkLnNsaWNlKDEpLnRvTG93ZXJDYXNlKClcbiAgKVxuICBjb25zdCBwYXNjYWxDYXNlU3RyaW5nID0gY2FwaXRhbGl6ZWRXb3Jkcy5qb2luKFwiXCIpXG4gIHJldHVybiBwYXNjYWxDYXNlU3RyaW5nXG59XG5cbmludGVyZmFjZSBUYWdPcHRpb24ge1xuICBuYW1lOiBzdHJpbmdcbiAgZGVzY3JpcHRpb246IHN0cmluZ1xuICBkb2VzUm91dGVIYXZlVGFnPzogKHJvdXRlOiBzdHJpbmcpID0+IGJvb2xlYW5cbn1cblxuaW50ZXJmYWNlIEdlbmVyYXRlT3BlbkFQSU9wdHMge1xuICBwYWNrYWdlRGlyOiBzdHJpbmdcbiAgb3V0cHV0RmlsZT86IHN0cmluZ1xuICBwYXRoR2xvYj86IHN0cmluZ1xuICB0YWdzPzogQXJyYXk8VGFnT3B0aW9uPlxuICBhcGlQcmVmaXg/OiBzdHJpbmdcbiAgbWFwRmlsZVBhdGhUb0hUVFBSb3V0ZT86IChmaWxlX3BhdGg6IHN0cmluZykgPT4gc3RyaW5nXG59XG5cbi8qKlxuICogVGhpcyBmdW5jdGlvbiBnZW5lcmF0ZXMgYW4gT3BlbkFQSSBzcGVjIGZyb20gdGhlIE5leHQuanMgQVBJIHJvdXRlcy5cbiAqXG4gKiBZb3Ugbm9ybWFsbHkgaW52b2tlIHRoaXMgd2l0aCBgbmV4dGFwaSBnZW5lcmF0ZS1vcGVuYXBpYCBpbiBhXG4gKiBcImJ1aWxkOm9wZW5hcGlcIiBwYWNrYWdlLmpzb24gc2NyaXB0LlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2VuZXJhdGVPcGVuQVBJKG9wdHM6IEdlbmVyYXRlT3BlbkFQSU9wdHMpIHtcbiAgY29uc3QgY2hhbGsgPSAoYXdhaXQgaW1wb3J0KFwiY2hhbGtcIikpLmRlZmF1bHRcbiAgY29uc3QgeyBvdXRwdXRGaWxlLCB0YWdzID0gW10gfSA9IG9wdHNcblxuICBjb25zdCBmaWxlcGF0aFRvUm91dGVGbiA9IGF3YWl0IHBhcnNlUm91dGVzSW5QYWNrYWdlKG9wdHMpXG5cbiAgLy8gVE9ETyBkZXRlY3QgaWYgdGhlcmUgYXJlIG11bHRpcGxlIHNldHVwcyBhbmQgb3V0cHV0IGRpZmZlcmVudCBBUElzXG4gIGNvbnN0IHsgc2V0dXBQYXJhbXM6IGdsb2JhbFNldHVwUGFyYW1zIH0gPSBmaWxlcGF0aFRvUm91dGVGbi52YWx1ZXMoKS5uZXh0KClcbiAgICAudmFsdWUgYXMgeyBzZXR1cFBhcmFtczogU2V0dXBQYXJhbXMgfVxuXG4gIGNvbnN0IHNlY3VyaXR5U2NoZW1lcyA9IGdsb2JhbFNldHVwUGFyYW1zLnNlY3VyaXR5U2NoZW1hcyA/PyB7fVxuICBjb25zdCBzZWN1cml0eU9iamVjdHNGb3JBdXRoVHlwZSA9IHt9XG4gIGZvciAoY29uc3QgYXV0aE5hbWUgb2YgT2JqZWN0LmtleXMoZ2xvYmFsU2V0dXBQYXJhbXMuYXV0aE1pZGRsZXdhcmVNYXApKSB7XG4gICAgY29uc3QgbXcgPSBnbG9iYWxTZXR1cFBhcmFtcy5hdXRoTWlkZGxld2FyZU1hcFthdXRoTmFtZV1cbiAgICBpZiAobXcuc2VjdXJpdHlTY2hlbWEpIHtcbiAgICAgIHNlY3VyaXR5U2NoZW1lc1thdXRoTmFtZV0gPSAobXcgYXMgYW55KS5zZWN1cml0eVNjaGVtYVxuICAgIH0gZWxzZSB7XG4gICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgIGNoYWxrLnllbGxvdyhcbiAgICAgICAgICBgQXV0aGVudGljYXRpb24gbWlkZGxld2FyZSBcIiR7YXV0aE5hbWV9XCIgaGFzIG5vIHNlY3VyaXR5U2NoZW1hLiBZb3UgY2FuIGRlZmluZSB0aGlzIG9uIHRoZSBmdW5jdGlvbiAoZS5nLiBhZnRlciB0aGUgZXhwb3J0IGRvLi4uIFxcblxcbm15TWlkZGxld2FyZS5zZWN1cml0eVNjaGVtYSA9IHtcXG4gIHR5cGU6IFwiaHR0cFwiXFxuICBzY2hlbWU6IFwiYmVhcmVyXCJcXG4gIGJlYXJlckZvcm1hdDogXCJKV1RcIlxcbiAvLyBvciBBUEkgVG9rZW4gZXRjLlxcbn1cXG5cXG5Zb3UgY2FuIGFsc28gZGVmaW5lIFwic2VjdXJpdHlPYmplY3RzXCIgdGhpcyB3YXksIGlmIHlvdSB3YW50IHRvIG1ha2UgdGhlIGVuZHBvaW50IHN1cHBvcnQgbXVsdGlwbGUgbW9kZXMgb2YgYXV0aGVudGljYXRpb24uXFxuXFxuYFxuICAgICAgICApXG4gICAgICApXG4gICAgfVxuXG4gICAgc2VjdXJpdHlPYmplY3RzRm9yQXV0aFR5cGVbYXV0aE5hbWVdID0gKG13IGFzIGFueSkuc2VjdXJpdHlPYmplY3RzIHx8IFtcbiAgICAgIHtcbiAgICAgICAgW2F1dGhOYW1lXTogW10sXG4gICAgICB9LFxuICAgIF1cbiAgfVxuXG4gIGNvbnN0IGdsb2JhbFNjaGVtYXMgPSB7fVxuICBmb3IgKGNvbnN0IFtzY2hlbWFOYW1lLCB6b2RTY2hlbWFdIG9mIE9iamVjdC5lbnRyaWVzKFxuICAgIGdsb2JhbFNldHVwUGFyYW1zLmdsb2JhbFNjaGVtYXMgPz8ge31cbiAgKSkge1xuICAgIGdsb2JhbFNjaGVtYXNbc2NoZW1hTmFtZV0gPSBnZW5lcmF0ZVNjaGVtYSh6b2RTY2hlbWEpXG4gIH1cblxuICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhnbG9iYWxTY2hlbWFzKSkge1xuICAgIGlmIChrZXkgPT09IFwiYmF0Y2hcIikge1xuICAgICAgY29uc3Qgc2NoZW1hV2l0aFJlZmVyZW5jZXMgPSBlbWJlZFNjaGVtYVJlZmVyZW5jZXModmFsdWUsIGdsb2JhbFNjaGVtYXMpXG4gICAgICBnbG9iYWxTY2hlbWFzW2tleV0gPSBzY2hlbWFXaXRoUmVmZXJlbmNlc1xuICAgIH1cbiAgfVxuXG4gIC8vIEJ1aWxkIE9wZW5BUEkgc3BlY1xuICBjb25zdCBidWlsZGVyID0gT3BlbkFwaUJ1aWxkZXIuY3JlYXRlKHtcbiAgICBvcGVuYXBpOiBcIjMuMC4wXCIsXG4gICAgaW5mbzoge1xuICAgICAgdGl0bGU6IGdsb2JhbFNldHVwUGFyYW1zLmFwaU5hbWUsXG4gICAgICB2ZXJzaW9uOiBcIjEuMC4wXCIsXG4gICAgfSxcbiAgICBzZXJ2ZXJzOiBbXG4gICAgICB7XG4gICAgICAgIHVybDogZ2xvYmFsU2V0dXBQYXJhbXMucHJvZHVjdGlvblNlcnZlclVybCB8fCBcImh0dHBzOi8vZXhhbXBsZS5jb21cIixcbiAgICAgIH0sXG4gICAgXSxcbiAgICB0YWdzOiB0YWdzLm1hcCgodGFnKSA9PiAoeyBuYW1lOiB0YWcubmFtZSwgZGVzY3JpcHRpb246IHRhZy5kZXNjcmlwdGlvbiB9KSksXG4gICAgcGF0aHM6IHt9LFxuICAgIGNvbXBvbmVudHM6IHtcbiAgICAgIHNlY3VyaXR5U2NoZW1lcyxcbiAgICAgIHNjaGVtYXM6IGdsb2JhbFNjaGVtYXMsXG4gICAgfSxcbiAgfSlcblxuICBmb3IgKGNvbnN0IFtcbiAgICBmaWxlX3BhdGgsXG4gICAgeyBzZXR1cFBhcmFtcywgcm91dGVTcGVjLCByb3V0ZTogcm91dGVQYXRoIH0sXG4gIF0gb2YgZmlsZXBhdGhUb1JvdXRlRm4pIHtcbiAgICBjb25zdCBtZXRob2RzID0gcm91dGVTcGVjLm1ldGhvZHNcbiAgICBpZiAobWV0aG9kcy5sZW5ndGggPT09IDApIHtcbiAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgY2hhbGsueWVsbG93KGBTa2lwcGluZyByb3V0ZSAke3JvdXRlUGF0aH0gYmVjYXVzZSBpdCBoYXMgbm8gbWV0aG9kcy5gKVxuICAgICAgKVxuICAgICAgY29udGludWVcbiAgICB9XG5cbiAgICBsZXQgZGVzY3JpcHRpb24gPSByb3V0ZVNwZWMuZGVzY3JpcHRpb25cbiAgICBsZXQgZGVzY3JpcHRpb25NZXRhZGF0YToge1xuICAgICAgcmVzcG9uc2Vfa2V5Pzogc3RyaW5nXG4gICAgICBba2V5OiBzdHJpbmddOiBhbnlcbiAgICB9ID0ge31cblxuICAgIGlmIChkZXNjcmlwdGlvbikge1xuICAgICAgY29uc3QgdHJpbW1lZERlc2NyaXB0aW9uID0gZGVkZW50KGRlc2NyaXB0aW9uKS50cmltKClcblxuICAgICAgaWYgKHRlc3RGcm9udE1hdHRlcih0cmltbWVkRGVzY3JpcHRpb24pKSB7XG4gICAgICAgIGNvbnN0IHsgYXR0cmlidXRlcywgYm9keSB9ID0gcGFyc2VGcm9udE1hdHRlcih0cmltbWVkRGVzY3JpcHRpb24pXG4gICAgICAgIGRlc2NyaXB0aW9uTWV0YWRhdGEgPSBhdHRyaWJ1dGVzXG4gICAgICAgIGRlc2NyaXB0aW9uID0gYm9keS50cmltKClcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGRlc2NyaXB0aW9uID0gdHJpbW1lZERlc2NyaXB0aW9uXG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgZm9ybWF0dGVkRGVzY3JpcHRpb25NZXRhZGF0YSA9IHByZWZpeE9iamVjdEtleXNXaXRoWChcbiAgICAgIGRhc2hpZnlPYmplY3RLZXlzKGRlc2NyaXB0aW9uTWV0YWRhdGEpXG4gICAgKVxuXG4gICAgY29uc3QgbWV0aG9kUm91dGVzOiBSZWNvcmQ8c3RyaW5nLCBPcGVyYXRpb25PYmplY3Q+ID0ge31cblxuICAgIGZvciAoY29uc3QgbWV0aG9kIG9mIG1ldGhvZHMpIHtcbiAgICAgIGNvbnN0IGlzUG9zdE9yUHV0T3JQYXRjaCA9IFtcIlBPU1RcIiwgXCJQVVRcIiwgXCJQQVRDSFwiXS5pbmNsdWRlcyhtZXRob2QpXG5cbiAgICAgIC8vIFRPRE86IHN1cHBvcnQgbXVsdGlwYXJ0L2Zvcm0tZGF0YVxuICAgICAgbGV0IGJvZHlfdG9fZ2VuZXJhdGVfc2NoZW1hXG4gICAgICBpZiAoaXNQb3N0T3JQdXRPclBhdGNoKSB7XG4gICAgICAgIGJvZHlfdG9fZ2VuZXJhdGVfc2NoZW1hID0gcm91dGVTcGVjLmpzb25Cb2R5ID8/IHJvdXRlU3BlYy5jb21tb25QYXJhbXNcblxuICAgICAgICBpZiAocm91dGVTcGVjLmpzb25Cb2R5ICYmIHJvdXRlU3BlYy5jb21tb25QYXJhbXMpIHtcbiAgICAgICAgICBib2R5X3RvX2dlbmVyYXRlX3NjaGVtYSA9IHJvdXRlU3BlYy5qc29uQm9keS5tZXJnZShcbiAgICAgICAgICAgIHJvdXRlU3BlYy5jb21tb25QYXJhbXNcbiAgICAgICAgICApXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGJvZHlfdG9fZ2VuZXJhdGVfc2NoZW1hID0gcm91dGVTcGVjLmpzb25Cb2R5XG4gICAgICB9XG5cbiAgICAgIGxldCBxdWVyeV90b19nZW5lcmF0ZV9zY2hlbWFcbiAgICAgIGlmIChpc1Bvc3RPclB1dE9yUGF0Y2gpIHtcbiAgICAgICAgcXVlcnlfdG9fZ2VuZXJhdGVfc2NoZW1hID0gcm91dGVTcGVjLnF1ZXJ5UGFyYW1zXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBxdWVyeV90b19nZW5lcmF0ZV9zY2hlbWEgPVxuICAgICAgICAgIHJvdXRlU3BlYy5xdWVyeVBhcmFtcyA/PyByb3V0ZVNwZWMuY29tbW9uUGFyYW1zXG5cbiAgICAgICAgaWYgKHJvdXRlU3BlYy5xdWVyeVBhcmFtcyAmJiByb3V0ZVNwZWMuY29tbW9uUGFyYW1zKSB7XG4gICAgICAgICAgcXVlcnlfdG9fZ2VuZXJhdGVfc2NoZW1hID0gcm91dGVTcGVjLnF1ZXJ5UGFyYW1zLm1lcmdlKFxuICAgICAgICAgICAgcm91dGVTcGVjLmNvbW1vblBhcmFtc1xuICAgICAgICAgIClcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBjb25zdCByb3V0ZTogT3BlcmF0aW9uT2JqZWN0ID0ge1xuICAgICAgICAuLi5yb3V0ZVNwZWMub3BlbkFwaU1ldGFkYXRhLFxuICAgICAgICAuLi5mb3JtYXR0ZWREZXNjcmlwdGlvbk1ldGFkYXRhLFxuICAgICAgICBzdW1tYXJ5OiByb3V0ZVBhdGgsXG4gICAgICAgIC4uLihkZXNjcmlwdGlvbiAmJiB7IGRlc2NyaXB0aW9uIH0pLFxuICAgICAgICBvcGVyYXRpb25JZDogYCR7dHJhbnNmb3JtUGF0aFRvT3BlcmF0aW9uSWQocm91dGVQYXRoKX0ke3Bhc2NhbENhc2UoXG4gICAgICAgICAgbWV0aG9kXG4gICAgICAgICl9YCxcbiAgICAgICAgcmVzcG9uc2VzOiB7XG4gICAgICAgICAgMjAwOiB7XG4gICAgICAgICAgICBkZXNjcmlwdGlvbjogXCJPS1wiLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgNDAwOiB7XG4gICAgICAgICAgICBkZXNjcmlwdGlvbjogXCJCYWQgUmVxdWVzdFwiLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgNDAxOiB7XG4gICAgICAgICAgICBkZXNjcmlwdGlvbjogXCJVbmF1dGhvcml6ZWRcIixcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgICBzZWN1cml0eTogQXJyYXkuaXNBcnJheShyb3V0ZVNwZWMuYXV0aClcbiAgICAgICAgICA/IHJvdXRlU3BlYy5hdXRoXG4gICAgICAgICAgICAgIC5tYXAoKGF1dGhUeXBlKSA9PiBzZWN1cml0eU9iamVjdHNGb3JBdXRoVHlwZVthdXRoVHlwZV0pXG4gICAgICAgICAgICAgIC5mbGF0KClcbiAgICAgICAgICA6IHNlY3VyaXR5T2JqZWN0c0ZvckF1dGhUeXBlW3JvdXRlU3BlYy5hdXRoXSxcbiAgICAgIH1cblxuICAgICAgaWYgKGJvZHlfdG9fZ2VuZXJhdGVfc2NoZW1hKSB7XG4gICAgICAgIHJvdXRlLnJlcXVlc3RCb2R5ID0ge1xuICAgICAgICAgIGNvbnRlbnQ6IHtcbiAgICAgICAgICAgIFwiYXBwbGljYXRpb24vanNvblwiOiB7XG4gICAgICAgICAgICAgIHNjaGVtYTogZ2VuZXJhdGVTY2hlbWEoYm9keV90b19nZW5lcmF0ZV9zY2hlbWEgYXMgYW55KSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSxcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAocXVlcnlfdG9fZ2VuZXJhdGVfc2NoZW1hKSB7XG4gICAgICAgIGNvbnN0IHNjaGVtYSA9IGdlbmVyYXRlU2NoZW1hKHF1ZXJ5X3RvX2dlbmVyYXRlX3NjaGVtYSBhcyBhbnkpXG4gICAgICAgIGlmIChzY2hlbWEucHJvcGVydGllcykge1xuICAgICAgICAgIGNvbnN0IHBhcmFtZXRlcnM6IFBhcmFtZXRlck9iamVjdFtdID0gT2JqZWN0LmtleXMoXG4gICAgICAgICAgICBzY2hlbWEucHJvcGVydGllcyBhcyBhbnlcbiAgICAgICAgICApLm1hcCgobmFtZSkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgbmFtZSxcbiAgICAgICAgICAgICAgaW46IFwicXVlcnlcIixcbiAgICAgICAgICAgICAgc2NoZW1hOiBzY2hlbWEucHJvcGVydGllcyFbbmFtZV0sXG4gICAgICAgICAgICAgIHJlcXVpcmVkOiBzY2hlbWEucmVxdWlyZWQ/LmluY2x1ZGVzKG5hbWUpLFxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pXG5cbiAgICAgICAgICByb3V0ZS5wYXJhbWV0ZXJzID0gcGFyYW1ldGVyc1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHsganNvblJlc3BvbnNlIH0gPSByb3V0ZVNwZWNcbiAgICAgIGNvbnN0IHsgYWRkT2tTdGF0dXMgPSB0cnVlIH0gPSBzZXR1cFBhcmFtc1xuXG4gICAgICBpZiAoanNvblJlc3BvbnNlKSB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICAhanNvblJlc3BvbnNlLl9kZWYgfHxcbiAgICAgICAgICAhanNvblJlc3BvbnNlLl9kZWYudHlwZU5hbWUgfHxcbiAgICAgICAgICBqc29uUmVzcG9uc2UuX2RlZi50eXBlTmFtZSAhPT0gXCJab2RPYmplY3RcIlxuICAgICAgICApIHtcbiAgICAgICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgICAgICBjaGFsay55ZWxsb3coXG4gICAgICAgICAgICAgIGBTa2lwcGluZyByb3V0ZSAke3JvdXRlUGF0aH0gYmVjYXVzZSB0aGUgcmVzcG9uc2UgaXMgbm90IGEgWm9kT2JqZWN0LmBcbiAgICAgICAgICAgIClcbiAgICAgICAgICApXG4gICAgICAgICAgY29udGludWVcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHJlc3BvbnNlU2NoZW1hID0gZ2VuZXJhdGVTY2hlbWEoXG4gICAgICAgICAgYWRkT2tTdGF0dXMgJiYganNvblJlc3BvbnNlIGluc3RhbmNlb2Ygei5ab2RPYmplY3RcbiAgICAgICAgICAgID8ganNvblJlc3BvbnNlLmV4dGVuZCh7IG9rOiB6LmJvb2xlYW4oKSB9KVxuICAgICAgICAgICAgOiBqc29uUmVzcG9uc2VcbiAgICAgICAgKVxuXG4gICAgICAgIGNvbnN0IHNjaGVtYVdpdGhSZWZlcmVuY2VzID0gZW1iZWRTY2hlbWFSZWZlcmVuY2VzKFxuICAgICAgICAgIHJlc3BvbnNlU2NoZW1hLFxuICAgICAgICAgIGdsb2JhbFNjaGVtYXNcbiAgICAgICAgKVxuXG4gICAgICAgIGlmIChyb3V0ZS5yZXNwb25zZXMgIT0gbnVsbCkge1xuICAgICAgICAgIC8vIFRPRE86IHdlIHNob3VsZCBub3QgaGFyZGNvZGUgMjAwIGhlcmVcbiAgICAgICAgICByb3V0ZS5yZXNwb25zZXNbMjAwXS5jb250ZW50ID0ge1xuICAgICAgICAgICAgXCJhcHBsaWNhdGlvbi9qc29uXCI6IHtcbiAgICAgICAgICAgICAgc2NoZW1hOiBzY2hlbWFXaXRoUmVmZXJlbmNlcyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJvdXRlLnRhZ3MgPSBbXVxuICAgICAgZm9yIChjb25zdCB0YWcgb2YgdGFncykge1xuICAgICAgICBpZiAodGFnLmRvZXNSb3V0ZUhhdmVUYWcgJiYgdGFnLmRvZXNSb3V0ZUhhdmVUYWcocm91dGUuc3VtbWFyeSB8fCBcIlwiKSkge1xuICAgICAgICAgIHJvdXRlLnRhZ3MucHVzaCh0YWcubmFtZSlcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBjb25zdCBtZXRob2RzTWFwcGVkVG9GZXJuU2RrTWV0YWRhdGEgPSBhd2FpdCBtYXBNZXRob2RzVG9GZXJuU2RrTWV0YWRhdGEoe1xuICAgICAgICBtZXRob2RzOiBbbWV0aG9kXSwgLy8gT25seSBwYXNzIHRoaXMgc3BlY2lmaWMgbWV0aG9kXG4gICAgICAgIHBhdGg6IHJvdXRlUGF0aCxcbiAgICAgICAgc2RrUmV0dXJuVmFsdWU6XG4gICAgICAgICAgZGVzY3JpcHRpb25NZXRhZGF0YT8ucmVzcG9uc2Vfa2V5ID8/IHJvdXRlU3BlYy5zZGtSZXR1cm5WYWx1ZSxcbiAgICAgIH0pXG5cbiAgICAgIE9iamVjdC5hc3NpZ24ocm91dGUsIG1ldGhvZHNNYXBwZWRUb0Zlcm5TZGtNZXRhZGF0YVttZXRob2RdKVxuICAgICAgbWV0aG9kUm91dGVzW21ldGhvZC50b0xvd2VyQ2FzZSgpXSA9IHJvdXRlXG4gICAgfVxuXG4gICAgYnVpbGRlci5hZGRQYXRoKHJvdXRlUGF0aCwgbWV0aG9kUm91dGVzKVxuICB9XG5cbiAgaWYgKG91dHB1dEZpbGUpIHtcbiAgICBhd2FpdCBmcy53cml0ZUZpbGUob3V0cHV0RmlsZSwgYnVpbGRlci5nZXRTcGVjQXNKc29uKHVuZGVmaW5lZCwgMikpXG4gIH1cblxuICByZXR1cm4gYnVpbGRlci5nZXRTcGVjQXNKc29uKHVuZGVmaW5lZCwgMilcbn1cbiIsICJpbXBvcnQgcGF0aCBmcm9tIFwibm9kZTpwYXRoXCJcbmltcG9ydCB7IFJvdXRlU3BlYywgU2V0dXBQYXJhbXMgfSBmcm9tIFwiLi4vLi4vdHlwZXNcIlxuaW1wb3J0IHsgZGVmYXVsdE1hcEZpbGVQYXRoVG9IVFRQUm91dGUgfSBmcm9tIFwiLi9kZWZhdWx0LW1hcC1maWxlLXBhdGgtdG8taHR0cC1yb3V0ZVwiXG5cbmV4cG9ydCBpbnRlcmZhY2UgUm91dGVJbmZvIHtcbiAgc2V0dXBQYXJhbXM6IFNldHVwUGFyYW1zXG4gIHJvdXRlU3BlYzogUm91dGVTcGVjXG4gIHJvdXRlRm46IEZ1bmN0aW9uXG4gIHJvdXRlOiBzdHJpbmdcbn1cblxuZXhwb3J0IGNvbnN0IHBhcnNlUm91dGVzSW5QYWNrYWdlID0gYXN5bmMgKG9wdHM6IHtcbiAgcGFja2FnZURpcjogc3RyaW5nXG4gIHBhdGhHbG9iPzogc3RyaW5nXG4gIGFwaVByZWZpeD86IHN0cmluZ1xuICBtYXBGaWxlUGF0aFRvSFRUUFJvdXRlPzogKGZpbGVfcGF0aDogc3RyaW5nKSA9PiBzdHJpbmdcbiAgaW5jbHVkZU9wZW5BcGlFeGNsdWRlZFJvdXRlcz86IGJvb2xlYW5cbn0pOiBQcm9taXNlPE1hcDxzdHJpbmcsIFJvdXRlSW5mbz4+ID0+IHtcbiAgY29uc3QgY2hhbGsgPSAoYXdhaXQgaW1wb3J0KFwiY2hhbGtcIikpLmRlZmF1bHRcbiAgY29uc3QgZ2xvYmJ5ID0gKGF3YWl0IGltcG9ydChcImdsb2JieVwiKSkuZ2xvYmJ5XG4gIGNvbnN0IHtcbiAgICBwYWNrYWdlRGlyLFxuICAgIHBhdGhHbG9iID0gXCIvcGFnZXMvYXBpLyoqLyoudHNcIixcbiAgICBtYXBGaWxlUGF0aFRvSFRUUFJvdXRlID0gZGVmYXVsdE1hcEZpbGVQYXRoVG9IVFRQUm91dGUob3B0cy5hcGlQcmVmaXgpLFxuICB9ID0gb3B0c1xuICAvLyBMb2FkIGFsbCByb3V0ZSBzcGVjc1xuICBjb25zdCBmdWxsUGF0aEdsb2IgPSBwYXRoLnBvc2l4LmpvaW4ocGFja2FnZURpciwgcGF0aEdsb2IpXG4gIGNvbnNvbGUubG9nKGBzZWFyY2hpbmcgXCIke2Z1bGxQYXRoR2xvYn1cIi4uLmApXG4gIGNvbnN0IGZpbGVwYXRocyA9IGF3YWl0IGdsb2JieShgJHtmdWxsUGF0aEdsb2J9YClcbiAgY29uc29sZS5sb2coYGZvdW5kICR7ZmlsZXBhdGhzLmxlbmd0aH0gZmlsZXNgKVxuICBpZiAoZmlsZXBhdGhzLmxlbmd0aCA9PT0gMCkge1xuICAgIHRocm93IG5ldyBFcnJvcihgTm8gZmlsZXMgZm91bmQgYXQgXCIke2Z1bGxQYXRoR2xvYn1cImApXG4gIH1cbiAgY29uc3QgZmlsZXBhdGhUb1JvdXRlRm4gPSBuZXcgTWFwPHN0cmluZywgUm91dGVJbmZvPigpXG5cbiAgYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgZmlsZXBhdGhzLm1hcChhc3luYyAocCkgPT4ge1xuICAgICAgY29uc3QgeyBkZWZhdWx0OiByb3V0ZUZuIH0gPSBhd2FpdCByZXF1aXJlKHBhdGgucmVzb2x2ZShwKSlcblxuICAgICAgaWYgKHJvdXRlRm4pIHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIHJvdXRlRm4uX3JvdXRlU3BlYz8uZXhjbHVkZUZyb21PcGVuQXBpICYmXG4gICAgICAgICAgIW9wdHMuaW5jbHVkZU9wZW5BcGlFeGNsdWRlZFJvdXRlc1xuICAgICAgICApIHtcbiAgICAgICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgICAgIGNoYWxrLmdyYXkoXG4gICAgICAgICAgICAgIGBJZ25vcmluZyBcIiR7cH0gYmVjYXVzZSBpdCB3YXMgZXhjbHVkZWQgZnJvbSBPcGVuQVBJIGdlbmVyYXRpb25cImBcbiAgICAgICAgICAgIClcbiAgICAgICAgICApXG4gICAgICAgICAgcmV0dXJuXG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFyb3V0ZUZuLl9zZXR1cFBhcmFtcykge1xuICAgICAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgICAgIGNoYWxrLnllbGxvdyhcbiAgICAgICAgICAgICAgYElnbm9yaW5nIFwiJHtwfVwiIGJlY2F1c2UgaXQgd2Fzbid0IGNyZWF0ZWQgd2l0aCB3aXRoUm91dGVTcGVjYFxuICAgICAgICAgICAgKVxuICAgICAgICAgIClcbiAgICAgICAgICByZXR1cm5cbiAgICAgICAgfVxuICAgICAgICBmaWxlcGF0aFRvUm91dGVGbi5zZXQocCwge1xuICAgICAgICAgIHNldHVwUGFyYW1zOiByb3V0ZUZuLl9zZXR1cFBhcmFtcyxcbiAgICAgICAgICByb3V0ZVNwZWM6IHJvdXRlRm4uX3JvdXRlU3BlYyxcbiAgICAgICAgICByb3V0ZTogbWFwRmlsZVBhdGhUb0hUVFBSb3V0ZShwKSxcbiAgICAgICAgICByb3V0ZUZuLFxuICAgICAgICB9KVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc29sZS53YXJuKGNoYWxrLnllbGxvdyhgQ291bGRuJ3QgZmluZCByb3V0ZSAke3B9YCkpXG4gICAgICB9XG4gICAgfSlcbiAgKVxuXG4gIHJldHVybiBmaWxlcGF0aFRvUm91dGVGblxufVxuIiwgImltcG9ydCBwYXRoIGZyb20gXCJwYXRoXCJcblxuZXhwb3J0IGNvbnN0IGRlZmF1bHRNYXBGaWxlUGF0aFRvSFRUUFJvdXRlID1cbiAgKGFwaV9wcmVmaXg6IHN0cmluZyA9IFwiL2FwaVwiKSA9PlxuICAoZmlsZV9wYXRoOiBzdHJpbmcpID0+IHtcbiAgICBjb25zdCByb3V0ZSA9IGZpbGVfcGF0aFxuICAgICAgLy8gcmVwbGFjZSAuLyBpZiBpdCBzdGFydHMgd2l0aCAuL1xuICAgICAgLnJlcGxhY2UoL15cXC5cXC8vLCBcIi9cIilcbiAgICAgIC8vIHJlcGxhY2Ugc3RhcnRpbmcgL1xuICAgICAgLnJlcGxhY2UoL15cXC8vLCBcIlwiKVxuICAgICAgLy8gcmVwbGFjZSAvc3JjIGlmIGl0IHN0YXJ0cyB3aXRoIC9zcmNcbiAgICAgIC5yZXBsYWNlKC9ec3JjXFwvLywgXCJcIilcbiAgICAgIC8vIHJlcGxhY2UgL3BhZ2VzIGlmIGl0IHN0YXJ0cyB3aXRoIC9wYWdlc1xuICAgICAgLnJlcGxhY2UoL15wYWdlc1xcLy8sIFwiXCIpXG4gICAgICAvLyByZXBsYWNlIC9hcGkgaWYgaXQgc3RhcnRzIHdpdGggL2FwaVxuICAgICAgLnJlcGxhY2UoL15hcGlcXC8vLCBcIlwiKVxuICAgICAgLy8gcmVwbGFjZSAudHMgaWYgaXQgZW5kcyB3aXRoIC50c1xuICAgICAgLnJlcGxhY2UoL1xcLnRzJC8sIFwiXCIpXG4gICAgICAvLyByZW1vdmUgcHVibGljIHJlZmVyZW5jZVxuICAgICAgLnJlcGxhY2UoXCJwdWJsaWNcIiwgXCJcIilcbiAgICAgIC8vIHJlcGxhY2UgaW5kZXggaWYgaXQgZW5kcyB3aXRoIGluZGV4XG4gICAgICAucmVwbGFjZSgvXFwvXFxpbmRleCg/IS4pLywgXCJcIilcblxuICAgIHJldHVybiBwYXRoLmpvaW4oYXBpX3ByZWZpeCwgcm91dGUpXG4gIH1cbiIsICIvKipcbiAqIFpvZCBPcGVuQVBJIEdlbmVyYXRvci5cbiAqXG4gKiBWZW5kb3JlZCBmcm9tIGh0dHBzOi8vZ2l0aHViLmNvbS9hbmF0aW5lL3pvZC1wbHVnaW5zXG4gKlxuICogTUlUIExpY2Vuc2VcbiAqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMjIgQnJpYW4gTWNCcmlkZVxuICpcbiAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHlcbiAqIG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksIHRvIGRlYWxcbiAqIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHNcbiAqIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGxcbiAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpc1xuICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcbiAqXG4gKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGxcbiAqIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4gKlxuICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUlxuICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksXG4gKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEVcbiAqIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVJcbiAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sXG4gKiBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRVxuICogU09GVFdBUkUuXG4gKi9cblxuaW1wb3J0IHR5cGUgeyBTY2hlbWFPYmplY3QsIFNjaGVtYU9iamVjdFR5cGUgfSBmcm9tIFwib3BlbmFwaTMtdHMvb2FzMzFcIlxuaW1wb3J0IG1lcmdlIGZyb20gXCJ0cy1kZWVwbWVyZ2VcIlxuaW1wb3J0IHsgQW55Wm9kT2JqZWN0LCB6LCBab2RUeXBlQW55IH0gZnJvbSBcInpvZFwiXG5pbXBvcnQgeyBwYXJzZUZyb250TWF0dGVyLCB0ZXN0RnJvbnRNYXR0ZXIgfSBmcm9tIFwiLi9mcm9udC1tYXR0ZXJcIlxuaW1wb3J0IGRlZGVudCBmcm9tIFwiZGVkZW50XCJcbmltcG9ydCB7IHByZWZpeE9iamVjdEtleXNXaXRoWCB9IGZyb20gXCIuLi91dGlscy9wcmVmaXgtb2JqZWN0LWtleXMtd2l0aC14XCJcbmltcG9ydCB7IGRhc2hpZnlPYmplY3RLZXlzIH0gZnJvbSBcIi4uL3V0aWxzL2Rhc2hpZnktb2JqZWN0LWtleXNcIlxuXG50eXBlIEFuYXRpbmVTY2hlbWFPYmplY3QgPSBTY2hlbWFPYmplY3QgJiB7IGhpZGVEZWZpbml0aW9ucz86IHN0cmluZ1tdIH1cblxuZXhwb3J0IGludGVyZmFjZSBPcGVuQXBpWm9kQW55IGV4dGVuZHMgWm9kVHlwZUFueSB7XG4gIG1ldGFPcGVuQXBpPzogQW5hdGluZVNjaGVtYU9iamVjdCB8IEFuYXRpbmVTY2hlbWFPYmplY3RbXVxufVxuXG5pbnRlcmZhY2UgT3BlbkFwaVpvZEFueU9iamVjdCBleHRlbmRzIEFueVpvZE9iamVjdCB7XG4gIG1ldGFPcGVuQXBpPzogQW5hdGluZVNjaGVtYU9iamVjdCB8IEFuYXRpbmVTY2hlbWFPYmplY3RbXVxufVxuXG5pbnRlcmZhY2UgUGFyc2luZ0FyZ3M8VD4ge1xuICB6b2RSZWY6IFRcbiAgc2NoZW1hczogQW5hdGluZVNjaGVtYU9iamVjdFtdXG4gIHVzZU91dHB1dD86IGJvb2xlYW5cbiAgaGlkZURlZmluaXRpb25zPzogc3RyaW5nW11cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGV4dGVuZEFwaTxUIGV4dGVuZHMgT3BlbkFwaVpvZEFueT4oXG4gIHNjaGVtYTogVCxcbiAgc2NoZW1hT2JqZWN0OiBBbmF0aW5lU2NoZW1hT2JqZWN0ID0ge31cbik6IFQge1xuICBzY2hlbWEubWV0YU9wZW5BcGkgPSBPYmplY3QuYXNzaWduKHNjaGVtYS5tZXRhT3BlbkFwaSB8fCB7fSwgc2NoZW1hT2JqZWN0KVxuICByZXR1cm4gc2NoZW1hXG59XG5cbmZ1bmN0aW9uIGl0ZXJhdGVab2RPYmplY3Qoe1xuICB6b2RSZWYsXG4gIHVzZU91dHB1dCxcbiAgaGlkZURlZmluaXRpb25zLFxufTogUGFyc2luZ0FyZ3M8T3BlbkFwaVpvZEFueU9iamVjdD4pIHtcbiAgY29uc3QgcmVkdWNlZCA9IE9iamVjdC5rZXlzKHpvZFJlZi5zaGFwZSlcbiAgICAuZmlsdGVyKChrZXkpID0+IGhpZGVEZWZpbml0aW9ucz8uaW5jbHVkZXMoa2V5KSA9PT0gZmFsc2UpXG4gICAgLnJlZHVjZShcbiAgICAgIChjYXJyeSwga2V5KSA9PiAoe1xuICAgICAgICAuLi5jYXJyeSxcbiAgICAgICAgW2tleV06IGdlbmVyYXRlU2NoZW1hKHpvZFJlZi5zaGFwZVtrZXldLCB1c2VPdXRwdXQpLFxuICAgICAgfSksXG4gICAgICB7fSBhcyBSZWNvcmQ8c3RyaW5nLCBTY2hlbWFPYmplY3Q+XG4gICAgKVxuXG4gIHJldHVybiByZWR1Y2VkXG59XG5cbmZ1bmN0aW9uIHBhcnNlRGVzY3JpcHRpb24oem9kUmVmOiBPcGVuQXBpWm9kQW55KTogU2NoZW1hT2JqZWN0IHtcbiAgaWYgKCF6b2RSZWYuZGVzY3JpcHRpb24pIHJldHVybiB7fVxuICBjb25zdCB0cmltbWVkRGVzY3JpcHRpb24gPSBkZWRlbnQoem9kUmVmLmRlc2NyaXB0aW9uKVxuICBpZiAoIXRlc3RGcm9udE1hdHRlcih0cmltbWVkRGVzY3JpcHRpb24pKVxuICAgIHJldHVybiB7IGRlc2NyaXB0aW9uOiB6b2RSZWYuZGVzY3JpcHRpb24gfVxuICBjb25zdCB7IGF0dHJpYnV0ZXMsIGJvZHkgfSA9IHBhcnNlRnJvbnRNYXR0ZXIodHJpbW1lZERlc2NyaXB0aW9uKVxuICBjb25zdCBvdXRwdXQ6IFNjaGVtYU9iamVjdCA9IHt9XG4gIGlmIChib2R5LnRyaW0oKSkgb3V0cHV0LmRlc2NyaXB0aW9uID0gYm9keS50cmltKClcbiAgaWYgKHR5cGVvZiBhdHRyaWJ1dGVzID09PSBcIm9iamVjdFwiICYmIGF0dHJpYnV0ZXMgIT09IG51bGwpIHtcbiAgICBpZiAoXCJkZXByZWNhdGVkXCIgaW4gYXR0cmlidXRlcyAmJiBhdHRyaWJ1dGVzLmRlcHJlY2F0ZWQpIHtcbiAgICAgIG91dHB1dC5kZXByZWNhdGVkID0gdHJ1ZVxuICAgIH1cblxuICAgIE9iamVjdC5lbnRyaWVzKFxuICAgICAgcHJlZml4T2JqZWN0S2V5c1dpdGhYKGRhc2hpZnlPYmplY3RLZXlzKGF0dHJpYnV0ZXMpKVxuICAgICkuZm9yRWFjaCgoW2tleSwgdmFsdWVdKSA9PiB7XG4gICAgICBvdXRwdXRba2V5XSA9IHZhbHVlXG4gICAgfSlcbiAgfVxuXG4gIHJldHVybiBvdXRwdXRcbn1cblxuZnVuY3Rpb24gcGFyc2VUcmFuc2Zvcm1hdGlvbih7XG4gIHpvZFJlZixcbiAgc2NoZW1hcyxcbiAgdXNlT3V0cHV0LFxufTogUGFyc2luZ0FyZ3M8ei5ab2RUcmFuc2Zvcm1lcjxuZXZlcj4gfCB6LlpvZEVmZmVjdHM8bmV2ZXI+Pik6IFNjaGVtYU9iamVjdCB7XG4gIGNvbnN0IGlucHV0ID0gZ2VuZXJhdGVTY2hlbWEoem9kUmVmLl9kZWYuc2NoZW1hLCB1c2VPdXRwdXQpXG5cbiAgbGV0IG91dHB1dCA9IFwidW5kZWZpbmVkXCJcbiAgaWYgKHVzZU91dHB1dCAmJiB6b2RSZWYuX2RlZi5lZmZlY3QpIHtcbiAgICBjb25zdCBlZmZlY3QgPVxuICAgICAgem9kUmVmLl9kZWYuZWZmZWN0LnR5cGUgPT09IFwidHJhbnNmb3JtXCIgPyB6b2RSZWYuX2RlZi5lZmZlY3QgOiBudWxsXG4gICAgaWYgKGVmZmVjdCAmJiBcInRyYW5zZm9ybVwiIGluIGVmZmVjdCkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgb3V0cHV0ID0gdHlwZW9mIGVmZmVjdC50cmFuc2Zvcm0oXG4gICAgICAgICAgW1wiaW50ZWdlclwiLCBcIm51bWJlclwiXS5pbmNsdWRlcyhgJHtpbnB1dC50eXBlfWApXG4gICAgICAgICAgICA/IDBcbiAgICAgICAgICAgIDogXCJzdHJpbmdcIiA9PT0gaW5wdXQudHlwZVxuICAgICAgICAgICAgPyBcIlwiXG4gICAgICAgICAgICA6IFwiYm9vbGVhblwiID09PSBpbnB1dC50eXBlXG4gICAgICAgICAgICA/IGZhbHNlXG4gICAgICAgICAgICA6IFwib2JqZWN0XCIgPT09IGlucHV0LnR5cGVcbiAgICAgICAgICAgID8ge31cbiAgICAgICAgICAgIDogXCJudWxsXCIgPT09IGlucHV0LnR5cGVcbiAgICAgICAgICAgID8gbnVsbFxuICAgICAgICAgICAgOiBcImFycmF5XCIgPT09IGlucHV0LnR5cGVcbiAgICAgICAgICAgID8gW11cbiAgICAgICAgICAgIDogdW5kZWZpbmVkLFxuICAgICAgICAgIHsgYWRkSXNzdWU6ICgpID0+IHVuZGVmaW5lZCwgcGF0aDogW10gfSAvLyBUT0RPOiBEaXNjb3ZlciBpZiBjb250ZXh0IGlzIG5lY2Vzc2FyeSBoZXJlXG4gICAgICAgIClcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgLyoqL1xuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gbWVyZ2UoXG4gICAge1xuICAgICAgLi4uKHpvZFJlZi5kZXNjcmlwdGlvbiA/IHsgZGVzY3JpcHRpb246IHpvZFJlZi5kZXNjcmlwdGlvbiB9IDoge30pLFxuICAgICAgLi4uaW5wdXQsXG4gICAgICAuLi4oW1wibnVtYmVyXCIsIFwic3RyaW5nXCIsIFwiYm9vbGVhblwiLCBcIm51bGxcIl0uaW5jbHVkZXMob3V0cHV0KVxuICAgICAgICA/IHtcbiAgICAgICAgICAgIHR5cGU6IG91dHB1dCBhcyBcIm51bWJlclwiIHwgXCJzdHJpbmdcIiB8IFwiYm9vbGVhblwiIHwgXCJudWxsXCIsXG4gICAgICAgICAgfVxuICAgICAgICA6IHt9KSxcbiAgICB9LFxuICAgIC4uLnNjaGVtYXNcbiAgKVxufVxuXG5mdW5jdGlvbiBwYXJzZVN0cmluZyh7XG4gIHpvZFJlZixcbiAgc2NoZW1hcyxcbn06IFBhcnNpbmdBcmdzPHouWm9kU3RyaW5nPik6IFNjaGVtYU9iamVjdCB7XG4gIGNvbnN0IGJhc2VTY2hlbWE6IFNjaGVtYU9iamVjdCA9IHtcbiAgICB0eXBlOiBcInN0cmluZ1wiLFxuICB9XG4gIGNvbnN0IHsgY2hlY2tzID0gW10gfSA9IHpvZFJlZi5fZGVmXG4gIGNoZWNrcy5mb3JFYWNoKChpdGVtKSA9PiB7XG4gICAgc3dpdGNoIChpdGVtLmtpbmQpIHtcbiAgICAgIGNhc2UgXCJlbWFpbFwiOlxuICAgICAgICBiYXNlU2NoZW1hLmZvcm1hdCA9IFwiZW1haWxcIlxuICAgICAgICBicmVha1xuICAgICAgY2FzZSBcInV1aWRcIjpcbiAgICAgICAgYmFzZVNjaGVtYS5mb3JtYXQgPSBcInV1aWRcIlxuICAgICAgICBicmVha1xuICAgICAgY2FzZSBcImN1aWRcIjpcbiAgICAgICAgYmFzZVNjaGVtYS5mb3JtYXQgPSBcImN1aWRcIlxuICAgICAgICBicmVha1xuICAgICAgY2FzZSBcInVybFwiOlxuICAgICAgICBiYXNlU2NoZW1hLmZvcm1hdCA9IFwidXJpXCJcbiAgICAgICAgYnJlYWtcbiAgICAgIGNhc2UgXCJkYXRldGltZVwiOlxuICAgICAgICBiYXNlU2NoZW1hLmZvcm1hdCA9IFwiZGF0ZS10aW1lXCJcbiAgICAgICAgYnJlYWtcbiAgICAgIGNhc2UgXCJsZW5ndGhcIjpcbiAgICAgICAgYmFzZVNjaGVtYS5taW5MZW5ndGggPSBpdGVtLnZhbHVlXG4gICAgICAgIGJhc2VTY2hlbWEubWF4TGVuZ3RoID0gaXRlbS52YWx1ZVxuICAgICAgICBicmVha1xuICAgICAgY2FzZSBcIm1heFwiOlxuICAgICAgICBiYXNlU2NoZW1hLm1heExlbmd0aCA9IGl0ZW0udmFsdWVcbiAgICAgICAgYnJlYWtcbiAgICAgIGNhc2UgXCJtaW5cIjpcbiAgICAgICAgYmFzZVNjaGVtYS5taW5MZW5ndGggPSBpdGVtLnZhbHVlXG4gICAgICAgIGJyZWFrXG4gICAgICBjYXNlIFwicmVnZXhcIjpcbiAgICAgICAgYmFzZVNjaGVtYS5wYXR0ZXJuID0gaXRlbS5yZWdleC5zb3VyY2VcbiAgICAgICAgYnJlYWtcbiAgICB9XG4gIH0pXG4gIHJldHVybiBtZXJnZShiYXNlU2NoZW1hLCBwYXJzZURlc2NyaXB0aW9uKHpvZFJlZiksIC4uLnNjaGVtYXMpXG59XG5cbmZ1bmN0aW9uIHBhcnNlTnVtYmVyKHtcbiAgem9kUmVmLFxuICBzY2hlbWFzLFxufTogUGFyc2luZ0FyZ3M8ei5ab2ROdW1iZXI+KTogU2NoZW1hT2JqZWN0IHtcbiAgY29uc3QgYmFzZVNjaGVtYTogU2NoZW1hT2JqZWN0ID0ge1xuICAgIHR5cGU6IFwibnVtYmVyXCIsXG4gICAgZm9ybWF0OiBcImZsb2F0XCIsXG4gIH1cbiAgY29uc3QgeyBjaGVja3MgPSBbXSB9ID0gem9kUmVmLl9kZWZcbiAgY2hlY2tzLmZvckVhY2goKGl0ZW0pID0+IHtcbiAgICBzd2l0Y2ggKGl0ZW0ua2luZCkge1xuICAgICAgY2FzZSBcIm1heFwiOlxuICAgICAgICBiYXNlU2NoZW1hLm1heGltdW0gPSBpdGVtLnZhbHVlXG4gICAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgVVBTVFJFQU06IFRoZSBvcGVuYXBpMy10cyB0eXBlcyBhcmUgd3Jvbmc6IGV4Y2x1c2l2ZU1heGltdW0gaXMgYSBib29sZWFuIGluIHRoaXMgdmVyc2lvbi5cbiAgICAgICAgLy8gaHR0cHM6Ly9zd2FnZ2VyLmlvL2RvY3Mvc3BlY2lmaWNhdGlvbi92M18wL2RhdGEtbW9kZWxzL2RhdGEtdHlwZXMvXG4gICAgICAgIGlmICghaXRlbS5pbmNsdXNpdmUpIGJhc2VTY2hlbWEuZXhjbHVzaXZlTWF4aW11bSA9IHRydWVcbiAgICAgICAgYnJlYWtcbiAgICAgIGNhc2UgXCJtaW5cIjpcbiAgICAgICAgYmFzZVNjaGVtYS5taW5pbXVtID0gaXRlbS52YWx1ZVxuICAgICAgICAvLyBAdHMtZXhwZWN0LWVycm9yIFVQU1RSRUFNOiBUaGUgb3BlbmFwaTMtdHMgdHlwZXMgYXJlIHdyb25nOiBleGNsdXNpdmVNaW5pbXVtIGlzIGEgYm9vbGVhbiBpbiB0aGlzIHZlcnNpb24uXG4gICAgICAgIC8vIGh0dHBzOi8vc3dhZ2dlci5pby9kb2NzL3NwZWNpZmljYXRpb24vdjNfMC9kYXRhLW1vZGVscy9kYXRhLXR5cGVzL1xuICAgICAgICBpZiAoIWl0ZW0uaW5jbHVzaXZlKSBiYXNlU2NoZW1hLmV4Y2x1c2l2ZU1pbmltdW0gPSB0cnVlXG4gICAgICAgIGJyZWFrXG4gICAgICBjYXNlIFwiaW50XCI6XG4gICAgICAgIGJhc2VTY2hlbWEudHlwZSA9IFwiaW50ZWdlclwiXG4gICAgICAgIGRlbGV0ZSBiYXNlU2NoZW1hLmZvcm1hdFxuICAgICAgICBicmVha1xuICAgICAgY2FzZSBcIm11bHRpcGxlT2ZcIjpcbiAgICAgICAgYmFzZVNjaGVtYS5tdWx0aXBsZU9mID0gaXRlbS52YWx1ZVxuICAgIH1cbiAgfSlcbiAgcmV0dXJuIG1lcmdlKGJhc2VTY2hlbWEsIHBhcnNlRGVzY3JpcHRpb24oem9kUmVmKSwgLi4uc2NoZW1hcylcbn1cblxuZnVuY3Rpb24gZ2V0RXhjbHVkZWREZWZpbml0aW9uc0Zyb21TY2hlbWEoXG4gIHNjaGVtYXM6IEFuYXRpbmVTY2hlbWFPYmplY3RbXVxuKTogc3RyaW5nW10ge1xuICBjb25zdCBleGNsdWRlZERlZmluaXRpb25zOiBzdHJpbmdbXSA9IFtdXG4gIGZvciAoY29uc3Qgc2NoZW1hIG9mIHNjaGVtYXMpIHtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShzY2hlbWEuaGlkZURlZmluaXRpb25zKSkge1xuICAgICAgZXhjbHVkZWREZWZpbml0aW9ucy5wdXNoKC4uLnNjaGVtYS5oaWRlRGVmaW5pdGlvbnMpXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGV4Y2x1ZGVkRGVmaW5pdGlvbnNcbn1cblxuZnVuY3Rpb24gcGFyc2VPYmplY3Qoe1xuICB6b2RSZWYsXG4gIHNjaGVtYXMsXG4gIHVzZU91dHB1dCxcbiAgaGlkZURlZmluaXRpb25zLFxufTogUGFyc2luZ0FyZ3M8XG4gIHouWm9kT2JqZWN0PG5ldmVyLCBcInBhc3N0aHJvdWdoXCIgfCBcInN0cmljdFwiIHwgXCJzdHJpcFwiPlxuPik6IFNjaGVtYU9iamVjdCB7XG4gIGxldCBhZGRpdGlvbmFsUHJvcGVydGllczogU2NoZW1hT2JqZWN0W1wiYWRkaXRpb25hbFByb3BlcnRpZXNcIl1cblxuICAvLyBgY2F0Y2hhbGxgIG9idmlhdGVzIGBzdHJpY3RgLCBgc3RyaXBgLCBhbmQgYHBhc3N0aHJvdWdoYFxuICBpZiAoXG4gICAgIShcbiAgICAgIHpvZFJlZi5fZGVmLmNhdGNoYWxsIGluc3RhbmNlb2Ygei5ab2ROZXZlciB8fFxuICAgICAgem9kUmVmLl9kZWYuY2F0Y2hhbGw/Ll9kZWYudHlwZU5hbWUgPT09IFwiWm9kTmV2ZXJcIlxuICAgIClcbiAgKVxuICAgIGFkZGl0aW9uYWxQcm9wZXJ0aWVzID0gZ2VuZXJhdGVTY2hlbWEoem9kUmVmLl9kZWYuY2F0Y2hhbGwsIHVzZU91dHB1dClcbiAgZWxzZSBpZiAoem9kUmVmLl9kZWYudW5rbm93bktleXMgPT09IFwicGFzc3Rocm91Z2hcIilcbiAgICBhZGRpdGlvbmFsUHJvcGVydGllcyA9IHRydWVcbiAgZWxzZSBpZiAoem9kUmVmLl9kZWYudW5rbm93bktleXMgPT09IFwic3RyaWN0XCIpIGFkZGl0aW9uYWxQcm9wZXJ0aWVzID0gZmFsc2VcblxuICAvLyBTbyB0aGF0IGB1bmRlZmluZWRgIHZhbHVlcyBkb24ndCBlbmQgdXAgaW4gdGhlIHNjaGVtYSBhbmQgYmUgd2VpcmRcbiAgYWRkaXRpb25hbFByb3BlcnRpZXMgPVxuICAgIGFkZGl0aW9uYWxQcm9wZXJ0aWVzICE9IG51bGwgPyB7IGFkZGl0aW9uYWxQcm9wZXJ0aWVzIH0gOiB7fVxuXG4gIGNvbnN0IHJlcXVpcmVkUHJvcGVydGllcyA9IE9iamVjdC5rZXlzKFxuICAgICh6b2RSZWYgYXMgei5Bbnlab2RPYmplY3QpLnNoYXBlXG4gICkuZmlsdGVyKChrZXkpID0+IHtcbiAgICBjb25zdCBpdGVtID0gKHpvZFJlZiBhcyB6LkFueVpvZE9iamVjdCkuc2hhcGVba2V5XVxuICAgIHJldHVybiAoXG4gICAgICAhKFxuICAgICAgICBpdGVtLmlzT3B0aW9uYWwoKSB8fFxuICAgICAgICBpdGVtIGluc3RhbmNlb2Ygei5ab2REZWZhdWx0IHx8XG4gICAgICAgIGl0ZW0uX2RlZi50eXBlTmFtZSA9PT0gXCJab2REZWZhdWx0XCJcbiAgICAgICkgJiYgIShpdGVtIGluc3RhbmNlb2Ygei5ab2ROZXZlciB8fCBpdGVtLl9kZWYudHlwZU5hbWUgPT09IFwiWm9kRGVmYXVsdFwiKVxuICAgIClcbiAgfSlcblxuICBjb25zdCByZXF1aXJlZCA9XG4gICAgcmVxdWlyZWRQcm9wZXJ0aWVzLmxlbmd0aCA+IDAgPyB7IHJlcXVpcmVkOiByZXF1aXJlZFByb3BlcnRpZXMgfSA6IHt9XG5cbiAgcmV0dXJuIG1lcmdlKFxuICAgIHtcbiAgICAgIHR5cGU6IFwib2JqZWN0XCIgYXMgU2NoZW1hT2JqZWN0VHlwZSxcbiAgICAgIHByb3BlcnRpZXM6IGl0ZXJhdGVab2RPYmplY3Qoe1xuICAgICAgICB6b2RSZWY6IHpvZFJlZiBhcyBPcGVuQXBpWm9kQW55T2JqZWN0LFxuICAgICAgICBzY2hlbWFzLFxuICAgICAgICB1c2VPdXRwdXQsXG4gICAgICAgIGhpZGVEZWZpbml0aW9uczogZ2V0RXhjbHVkZWREZWZpbml0aW9uc0Zyb21TY2hlbWEoc2NoZW1hcyksXG4gICAgICB9KSxcbiAgICAgIC4uLnJlcXVpcmVkLFxuICAgICAgLi4uYWRkaXRpb25hbFByb3BlcnRpZXMsXG4gICAgICAuLi5oaWRlRGVmaW5pdGlvbnMsXG4gICAgfSxcbiAgICBwYXJzZURlc2NyaXB0aW9uKHpvZFJlZiksXG4gICAgLi4uc2NoZW1hc1xuICApXG59XG5cbmZ1bmN0aW9uIHBhcnNlUmVjb3JkKHtcbiAgem9kUmVmLFxuICBzY2hlbWFzLFxuICB1c2VPdXRwdXQsXG59OiBQYXJzaW5nQXJnczx6LlpvZFJlY29yZD4pOiBTY2hlbWFPYmplY3Qge1xuICByZXR1cm4gbWVyZ2UoXG4gICAge1xuICAgICAgdHlwZTogXCJvYmplY3RcIiBhcyBTY2hlbWFPYmplY3RUeXBlLFxuICAgICAgYWRkaXRpb25hbFByb3BlcnRpZXM6XG4gICAgICAgIHpvZFJlZi5fZGVmLnZhbHVlVHlwZSBpbnN0YW5jZW9mIHouWm9kVW5rbm93blxuICAgICAgICAgID8ge31cbiAgICAgICAgICA6IGdlbmVyYXRlU2NoZW1hKHpvZFJlZi5fZGVmLnZhbHVlVHlwZSwgdXNlT3V0cHV0KSxcbiAgICB9LFxuICAgIHBhcnNlRGVzY3JpcHRpb24oem9kUmVmKSxcbiAgICAuLi5zY2hlbWFzXG4gIClcbn1cblxuZnVuY3Rpb24gcGFyc2VCaWdJbnQoe1xuICB6b2RSZWYsXG4gIHNjaGVtYXMsXG59OiBQYXJzaW5nQXJnczx6LlpvZEJpZ0ludD4pOiBTY2hlbWFPYmplY3Qge1xuICByZXR1cm4gbWVyZ2UoXG4gICAgeyB0eXBlOiBcImludGVnZXJcIiBhcyBTY2hlbWFPYmplY3RUeXBlLCBmb3JtYXQ6IFwiaW50NjRcIiB9LFxuICAgIHBhcnNlRGVzY3JpcHRpb24oem9kUmVmKSxcbiAgICAuLi5zY2hlbWFzXG4gIClcbn1cblxuZnVuY3Rpb24gcGFyc2VCb29sZWFuKHtcbiAgem9kUmVmLFxuICBzY2hlbWFzLFxufTogUGFyc2luZ0FyZ3M8ei5ab2RCb29sZWFuPik6IFNjaGVtYU9iamVjdCB7XG4gIHJldHVybiBtZXJnZShcbiAgICB7IHR5cGU6IFwiYm9vbGVhblwiIGFzIFNjaGVtYU9iamVjdFR5cGUgfSxcbiAgICBwYXJzZURlc2NyaXB0aW9uKHpvZFJlZiksXG4gICAgLi4uc2NoZW1hc1xuICApXG59XG5cbmZ1bmN0aW9uIHBhcnNlRGF0ZSh7IHpvZFJlZiwgc2NoZW1hcyB9OiBQYXJzaW5nQXJnczx6LlpvZERhdGU+KTogU2NoZW1hT2JqZWN0IHtcbiAgcmV0dXJuIG1lcmdlKFxuICAgIHsgdHlwZTogXCJzdHJpbmdcIiBhcyBTY2hlbWFPYmplY3RUeXBlLCBmb3JtYXQ6IFwiZGF0ZS10aW1lXCIgfSxcbiAgICBwYXJzZURlc2NyaXB0aW9uKHpvZFJlZiksXG4gICAgLi4uc2NoZW1hc1xuICApXG59XG5cbmZ1bmN0aW9uIHBhcnNlTnVsbCh7IHpvZFJlZiwgc2NoZW1hcyB9OiBQYXJzaW5nQXJnczx6LlpvZE51bGw+KTogU2NoZW1hT2JqZWN0IHtcbiAgcmV0dXJuIG1lcmdlKFxuICAgIHtcbiAgICAgIG51bGxhYmxlOiB0cnVlLFxuICAgIH0sXG4gICAgcGFyc2VEZXNjcmlwdGlvbih6b2RSZWYpLFxuICAgIC4uLnNjaGVtYXNcbiAgKVxufVxuXG5mdW5jdGlvbiBwYXJzZU9wdGlvbmFsKHtcbiAgc2NoZW1hcyxcbiAgem9kUmVmLFxuICB1c2VPdXRwdXQsXG59OiBQYXJzaW5nQXJnczx6LlpvZE9wdGlvbmFsPE9wZW5BcGlab2RBbnk+Pik6IFNjaGVtYU9iamVjdCB7XG4gIHJldHVybiBtZXJnZShcbiAgICBnZW5lcmF0ZVNjaGVtYSh6b2RSZWYudW53cmFwKCksIHVzZU91dHB1dCksXG4gICAgcGFyc2VEZXNjcmlwdGlvbih6b2RSZWYpLFxuICAgIC4uLnNjaGVtYXNcbiAgKVxufVxuXG5mdW5jdGlvbiBwYXJzZU51bGxhYmxlKHtcbiAgc2NoZW1hcyxcbiAgem9kUmVmLFxuICB1c2VPdXRwdXQsXG59OiBQYXJzaW5nQXJnczx6LlpvZE51bGxhYmxlPE9wZW5BcGlab2RBbnk+Pik6IFNjaGVtYU9iamVjdCB7XG4gIGNvbnN0IHNjaGVtYSA9IGdlbmVyYXRlU2NoZW1hKHpvZFJlZi51bndyYXAoKSwgdXNlT3V0cHV0KVxuICByZXR1cm4gbWVyZ2UoXG4gICAgeyAuLi5zY2hlbWEsIHR5cGU6IHNjaGVtYS50eXBlLCBudWxsYWJsZTogdHJ1ZSB9LFxuICAgIHBhcnNlRGVzY3JpcHRpb24oem9kUmVmKSxcbiAgICAuLi5zY2hlbWFzXG4gIClcbn1cblxuZnVuY3Rpb24gcGFyc2VEZWZhdWx0KHtcbiAgc2NoZW1hcyxcbiAgem9kUmVmLFxuICB1c2VPdXRwdXQsXG59OiBQYXJzaW5nQXJnczx6LlpvZERlZmF1bHQ8T3BlbkFwaVpvZEFueT4+KTogU2NoZW1hT2JqZWN0IHtcbiAgcmV0dXJuIG1lcmdlKFxuICAgIHtcbiAgICAgIGRlZmF1bHQ6IHpvZFJlZi5fZGVmLmRlZmF1bHRWYWx1ZSgpLFxuICAgICAgLi4uZ2VuZXJhdGVTY2hlbWEoem9kUmVmLl9kZWYuaW5uZXJUeXBlLCB1c2VPdXRwdXQpLFxuICAgIH0sXG4gICAgcGFyc2VEZXNjcmlwdGlvbih6b2RSZWYpLFxuICAgIC4uLnNjaGVtYXNcbiAgKVxufVxuXG5mdW5jdGlvbiBwYXJzZUFycmF5KHtcbiAgc2NoZW1hcyxcbiAgem9kUmVmLFxuICB1c2VPdXRwdXQsXG59OiBQYXJzaW5nQXJnczx6LlpvZEFycmF5PE9wZW5BcGlab2RBbnk+Pik6IFNjaGVtYU9iamVjdCB7XG4gIGNvbnN0IGNvbnN0cmFpbnRzOiBTY2hlbWFPYmplY3QgPSB7fVxuICBpZiAoem9kUmVmLl9kZWYuZXhhY3RMZW5ndGggIT0gbnVsbCkge1xuICAgIGNvbnN0cmFpbnRzLm1pbkl0ZW1zID0gem9kUmVmLl9kZWYuZXhhY3RMZW5ndGgudmFsdWVcbiAgICBjb25zdHJhaW50cy5tYXhJdGVtcyA9IHpvZFJlZi5fZGVmLmV4YWN0TGVuZ3RoLnZhbHVlXG4gIH1cblxuICBpZiAoem9kUmVmLl9kZWYubWluTGVuZ3RoICE9IG51bGwpXG4gICAgY29uc3RyYWludHMubWluSXRlbXMgPSB6b2RSZWYuX2RlZi5taW5MZW5ndGgudmFsdWVcbiAgaWYgKHpvZFJlZi5fZGVmLm1heExlbmd0aCAhPSBudWxsKVxuICAgIGNvbnN0cmFpbnRzLm1heEl0ZW1zID0gem9kUmVmLl9kZWYubWF4TGVuZ3RoLnZhbHVlXG5cbiAgcmV0dXJuIG1lcmdlKFxuICAgIHtcbiAgICAgIHR5cGU6IFwiYXJyYXlcIiBhcyBTY2hlbWFPYmplY3RUeXBlLFxuICAgICAgaXRlbXM6IGdlbmVyYXRlU2NoZW1hKHpvZFJlZi5lbGVtZW50LCB1c2VPdXRwdXQpLFxuICAgICAgLi4uY29uc3RyYWludHMsXG4gICAgfSxcbiAgICBwYXJzZURlc2NyaXB0aW9uKHpvZFJlZiksXG4gICAgLi4uc2NoZW1hc1xuICApXG59XG5cbmZ1bmN0aW9uIHBhcnNlTGl0ZXJhbCh7XG4gIHNjaGVtYXMsXG4gIHpvZFJlZixcbn06IFBhcnNpbmdBcmdzPHouWm9kTGl0ZXJhbDxPcGVuQXBpWm9kQW55Pj4pOiBTY2hlbWFPYmplY3Qge1xuICByZXR1cm4gbWVyZ2UoXG4gICAge1xuICAgICAgdHlwZTogdHlwZW9mIHpvZFJlZi5fZGVmLnZhbHVlIGFzIFwic3RyaW5nXCIgfCBcIm51bWJlclwiIHwgXCJib29sZWFuXCIsXG4gICAgICBlbnVtOiBbem9kUmVmLl9kZWYudmFsdWVdLFxuICAgIH0sXG4gICAgcGFyc2VEZXNjcmlwdGlvbih6b2RSZWYpLFxuICAgIC4uLnNjaGVtYXNcbiAgKVxufVxuXG5mdW5jdGlvbiBwYXJzZUVudW0oe1xuICBzY2hlbWFzLFxuICB6b2RSZWYsXG59OiBQYXJzaW5nQXJnczx6LlpvZEVudW08bmV2ZXI+IHwgei5ab2ROYXRpdmVFbnVtPG5ldmVyPj4pOiBTY2hlbWFPYmplY3Qge1xuICByZXR1cm4gbWVyZ2UoXG4gICAge1xuICAgICAgdHlwZTogdHlwZW9mIE9iamVjdC52YWx1ZXMoem9kUmVmLl9kZWYudmFsdWVzKVswXSBhcyBcInN0cmluZ1wiIHwgXCJudW1iZXJcIixcbiAgICAgIGVudW06IE9iamVjdC52YWx1ZXMoem9kUmVmLl9kZWYudmFsdWVzKSxcbiAgICB9LFxuICAgIHBhcnNlRGVzY3JpcHRpb24oem9kUmVmKSxcbiAgICAuLi5zY2hlbWFzXG4gIClcbn1cblxuZnVuY3Rpb24gcGFyc2VJbnRlcnNlY3Rpb24oe1xuICBzY2hlbWFzLFxuICB6b2RSZWYsXG4gIHVzZU91dHB1dCxcbn06IFBhcnNpbmdBcmdzPHouWm9kSW50ZXJzZWN0aW9uPHouWm9kVHlwZUFueSwgei5ab2RUeXBlQW55Pj4pOiBTY2hlbWFPYmplY3Qge1xuICByZXR1cm4gbWVyZ2UoXG4gICAge1xuICAgICAgYWxsT2Y6IFtcbiAgICAgICAgZ2VuZXJhdGVTY2hlbWEoem9kUmVmLl9kZWYubGVmdCwgdXNlT3V0cHV0KSxcbiAgICAgICAgZ2VuZXJhdGVTY2hlbWEoem9kUmVmLl9kZWYucmlnaHQsIHVzZU91dHB1dCksXG4gICAgICBdLFxuICAgIH0sXG4gICAgcGFyc2VEZXNjcmlwdGlvbih6b2RSZWYpLFxuICAgIC4uLnNjaGVtYXNcbiAgKVxufVxuXG5mdW5jdGlvbiBwYXJzZVVuaW9uKHtcbiAgc2NoZW1hcyxcbiAgem9kUmVmLFxuICB1c2VPdXRwdXQsXG59OiBQYXJzaW5nQXJnczx6LlpvZFVuaW9uPFt6LlpvZFR5cGVBbnksIC4uLnouWm9kVHlwZUFueVtdXT4+KTogU2NoZW1hT2JqZWN0IHtcbiAgY29uc3QgY29udGVudHMgPSB6b2RSZWYuX2RlZi5vcHRpb25zXG4gIGlmIChcbiAgICBjb250ZW50cy5yZWR1Y2UoXG4gICAgICAocHJldiwgY29udGVudCkgPT4gcHJldiAmJiBjb250ZW50Ll9kZWYudHlwZU5hbWUgPT09IFwiWm9kTGl0ZXJhbFwiLFxuICAgICAgdHJ1ZVxuICAgIClcbiAgKSB7XG4gICAgLy8gc3BlY2lhbCBjYXNlIHRvIHRyYW5zZm9ybSB1bmlvbnMgb2YgbGl0ZXJhbHMgaW50byBlbnVtc1xuICAgIGNvbnN0IGxpdGVyYWxzID0gY29udGVudHMgYXMgdW5rbm93biBhcyB6LlpvZExpdGVyYWw8T3BlbkFwaVpvZEFueT5bXVxuICAgIGNvbnN0IHR5cGUgPSBsaXRlcmFscy5yZWR1Y2UoXG4gICAgICAocHJldiwgY29udGVudCkgPT5cbiAgICAgICAgIXByZXYgfHwgcHJldiA9PT0gdHlwZW9mIGNvbnRlbnQuX2RlZi52YWx1ZVxuICAgICAgICAgID8gdHlwZW9mIGNvbnRlbnQuX2RlZi52YWx1ZVxuICAgICAgICAgIDogbnVsbCxcbiAgICAgIG51bGwgYXMgbnVsbCB8IHN0cmluZ1xuICAgIClcblxuICAgIGlmICh0eXBlKSB7XG4gICAgICByZXR1cm4gbWVyZ2UoXG4gICAgICAgIHtcbiAgICAgICAgICB0eXBlOiB0eXBlIGFzIFwic3RyaW5nXCIgfCBcIm51bWJlclwiIHwgXCJib29sZWFuXCIsXG4gICAgICAgICAgZW51bTogbGl0ZXJhbHMubWFwKChsaXRlcmFsKSA9PiBsaXRlcmFsLl9kZWYudmFsdWUpLFxuICAgICAgICB9LFxuICAgICAgICBwYXJzZURlc2NyaXB0aW9uKHpvZFJlZiksXG4gICAgICAgIC4uLnNjaGVtYXNcbiAgICAgIClcbiAgICB9XG4gIH1cblxuICBjb25zdCBpc051bGxhYmxlID0gY29udGVudHMuc29tZShcbiAgICAoY29udGVudCkgPT4gY29udGVudC5fZGVmLnR5cGVOYW1lID09PSBcIlpvZE51bGxcIlxuICApXG4gIGNvbnN0IG5vbk51bGxDb250ZW50cyA9IGNvbnRlbnRzLmZpbHRlcihcbiAgICAoY29udGVudCkgPT4gY29udGVudC5fZGVmLnR5cGVOYW1lICE9PSBcIlpvZE51bGxcIlxuICApXG5cbiAgcmV0dXJuIG1lcmdlKFxuICAgIHtcbiAgICAgIG9uZU9mOiBub25OdWxsQ29udGVudHMubWFwKChzY2hlbWEpID0+IGdlbmVyYXRlU2NoZW1hKHNjaGVtYSwgdXNlT3V0cHV0KSksXG4gICAgICAuLi4oaXNOdWxsYWJsZSA/IHsgbnVsbGFibGU6IHRydWUgfSA6IHt9KSxcbiAgICB9LFxuICAgIHBhcnNlRGVzY3JpcHRpb24oem9kUmVmKSxcbiAgICAuLi5zY2hlbWFzXG4gIClcbn1cblxuZnVuY3Rpb24gcGFyc2VEaXNjcmltaW5hdGVkVW5pb24oe1xuICBzY2hlbWFzLFxuICB6b2RSZWYsXG4gIHVzZU91dHB1dCxcbn06IFBhcnNpbmdBcmdzPFxuICB6LlpvZERpc2NyaW1pbmF0ZWRVbmlvbjxzdHJpbmcsIHouWm9kRGlzY3JpbWluYXRlZFVuaW9uT3B0aW9uPHN0cmluZz5bXT5cbj4pOiBTY2hlbWFPYmplY3Qge1xuICByZXR1cm4gbWVyZ2UoXG4gICAge1xuICAgICAgZGlzY3JpbWluYXRvcjoge1xuICAgICAgICBwcm9wZXJ0eU5hbWU6IChcbiAgICAgICAgICB6b2RSZWYgYXMgei5ab2REaXNjcmltaW5hdGVkVW5pb248XG4gICAgICAgICAgICBzdHJpbmcsXG4gICAgICAgICAgICB6LlpvZERpc2NyaW1pbmF0ZWRVbmlvbk9wdGlvbjxzdHJpbmc+W11cbiAgICAgICAgICA+XG4gICAgICAgICkuX2RlZi5kaXNjcmltaW5hdG9yLFxuICAgICAgfSxcbiAgICAgIG9uZU9mOiBBcnJheS5mcm9tKFxuICAgICAgICAoXG4gICAgICAgICAgem9kUmVmIGFzIHouWm9kRGlzY3JpbWluYXRlZFVuaW9uPFxuICAgICAgICAgICAgc3RyaW5nLFxuICAgICAgICAgICAgei5ab2REaXNjcmltaW5hdGVkVW5pb25PcHRpb248c3RyaW5nPltdXG4gICAgICAgICAgPlxuICAgICAgICApLl9kZWYub3B0aW9ucy52YWx1ZXMoKVxuICAgICAgKS5tYXAoKHNjaGVtYSkgPT4gZ2VuZXJhdGVTY2hlbWEoc2NoZW1hLCB1c2VPdXRwdXQpKSxcbiAgICB9LFxuICAgIHBhcnNlRGVzY3JpcHRpb24oem9kUmVmKSxcbiAgICAuLi5zY2hlbWFzXG4gIClcbn1cblxuZnVuY3Rpb24gcGFyc2VOZXZlcih7XG4gIHpvZFJlZixcbiAgc2NoZW1hcyxcbn06IFBhcnNpbmdBcmdzPHouWm9kTmV2ZXI+KTogU2NoZW1hT2JqZWN0IHtcbiAgcmV0dXJuIG1lcmdlKHsgcmVhZE9ubHk6IHRydWUgfSwgcGFyc2VEZXNjcmlwdGlvbih6b2RSZWYpLCAuLi5zY2hlbWFzKVxufVxuXG5mdW5jdGlvbiBwYXJzZUJyYW5kZWQoe1xuICBzY2hlbWFzLFxuICB6b2RSZWYsXG59OiBQYXJzaW5nQXJnczx6LlpvZEJyYW5kZWQ8ei5ab2RBbnksIHN0cmluZz4+KTogU2NoZW1hT2JqZWN0IHtcbiAgcmV0dXJuIG1lcmdlKGdlbmVyYXRlU2NoZW1hKHpvZFJlZi5fZGVmLnR5cGUpLCAuLi5zY2hlbWFzKVxufVxuXG5mdW5jdGlvbiBjYXRjaEFsbFBhcnNlcih7XG4gIHpvZFJlZixcbiAgc2NoZW1hcyxcbn06IFBhcnNpbmdBcmdzPFpvZFR5cGVBbnk+KTogU2NoZW1hT2JqZWN0IHtcbiAgcmV0dXJuIG1lcmdlKHBhcnNlRGVzY3JpcHRpb24oem9kUmVmKSwgLi4uc2NoZW1hcylcbn1cblxuZnVuY3Rpb24gcGFyc2VQaXBlbGluZSh7XG4gIHpvZFJlZixcbiAgdXNlT3V0cHV0LFxufTogUGFyc2luZ0FyZ3M8ei5ab2RQaXBlbGluZTxuZXZlciwgbmV2ZXI+Pik6IFNjaGVtYU9iamVjdCB7XG4gIGlmICh1c2VPdXRwdXQpIHtcbiAgICByZXR1cm4gZ2VuZXJhdGVTY2hlbWEoem9kUmVmLl9kZWYub3V0LCB1c2VPdXRwdXQpXG4gIH1cbiAgcmV0dXJuIGdlbmVyYXRlU2NoZW1hKHpvZFJlZi5fZGVmLmluLCB1c2VPdXRwdXQpXG59XG5cbmZ1bmN0aW9uIHBhcnNlUmVhZG9ubHkoe1xuICB6b2RSZWYsXG4gIHVzZU91dHB1dCxcbiAgc2NoZW1hcyxcbn06IFBhcnNpbmdBcmdzPHouWm9kUmVhZG9ubHk8ei5ab2RBbnk+Pik6IFNjaGVtYU9iamVjdCB7XG4gIHJldHVybiBtZXJnZShcbiAgICBnZW5lcmF0ZVNjaGVtYSh6b2RSZWYuX2RlZi5pbm5lclR5cGUsIHVzZU91dHB1dCksXG4gICAgcGFyc2VEZXNjcmlwdGlvbih6b2RSZWYpLFxuICAgIC4uLnNjaGVtYXNcbiAgKVxufVxuXG5jb25zdCB3b3JrZXJNYXAgPSB7XG4gIFpvZE9iamVjdDogcGFyc2VPYmplY3QsXG4gIFpvZFJlY29yZDogcGFyc2VSZWNvcmQsXG4gIFpvZFN0cmluZzogcGFyc2VTdHJpbmcsXG4gIFpvZE51bWJlcjogcGFyc2VOdW1iZXIsXG4gIFpvZEJpZ0ludDogcGFyc2VCaWdJbnQsXG4gIFpvZEJvb2xlYW46IHBhcnNlQm9vbGVhbixcbiAgWm9kRGF0ZTogcGFyc2VEYXRlLFxuICBab2ROdWxsOiBwYXJzZU51bGwsXG4gIFpvZE9wdGlvbmFsOiBwYXJzZU9wdGlvbmFsLFxuICBab2ROdWxsYWJsZTogcGFyc2VOdWxsYWJsZSxcbiAgWm9kRGVmYXVsdDogcGFyc2VEZWZhdWx0LFxuICBab2RBcnJheTogcGFyc2VBcnJheSxcbiAgWm9kTGl0ZXJhbDogcGFyc2VMaXRlcmFsLFxuICBab2RFbnVtOiBwYXJzZUVudW0sXG4gIFpvZE5hdGl2ZUVudW06IHBhcnNlRW51bSxcbiAgWm9kVHJhbnNmb3JtZXI6IHBhcnNlVHJhbnNmb3JtYXRpb24sXG4gIFpvZEVmZmVjdHM6IHBhcnNlVHJhbnNmb3JtYXRpb24sXG4gIFpvZEludGVyc2VjdGlvbjogcGFyc2VJbnRlcnNlY3Rpb24sXG4gIFpvZFVuaW9uOiBwYXJzZVVuaW9uLFxuICBab2REaXNjcmltaW5hdGVkVW5pb246IHBhcnNlRGlzY3JpbWluYXRlZFVuaW9uLFxuICBab2ROZXZlcjogcGFyc2VOZXZlcixcbiAgWm9kQnJhbmRlZDogcGFyc2VCcmFuZGVkLFxuICAvLyBUT0RPIFRyYW5zZm9ybSB0aGUgcmVzdCB0byBzY2hlbWFzXG4gIFpvZFVuZGVmaW5lZDogY2F0Y2hBbGxQYXJzZXIsXG4gIC8vIFRPRE86IGBwcmVmaXhJdGVtc2AgaXMgYWxsb3dlZCBpbiBPcGVuQVBJIDMuMSB3aGljaCBjYW4gYmUgdXNlZCB0byBjcmVhdGUgdHVwbGVzXG4gIFpvZFR1cGxlOiBjYXRjaEFsbFBhcnNlcixcbiAgWm9kTWFwOiBjYXRjaEFsbFBhcnNlcixcbiAgWm9kRnVuY3Rpb246IGNhdGNoQWxsUGFyc2VyLFxuICBab2RMYXp5OiBjYXRjaEFsbFBhcnNlcixcbiAgWm9kUHJvbWlzZTogY2F0Y2hBbGxQYXJzZXIsXG4gIFpvZEFueTogY2F0Y2hBbGxQYXJzZXIsXG4gIFpvZFVua25vd246IGNhdGNoQWxsUGFyc2VyLFxuICBab2RWb2lkOiBjYXRjaEFsbFBhcnNlcixcbiAgWm9kUGlwZWxpbmU6IHBhcnNlUGlwZWxpbmUsXG4gIFpvZFJlYWRvbmx5OiBwYXJzZVJlYWRvbmx5LFxufVxudHlwZSBXb3JrZXJLZXlzID0ga2V5b2YgdHlwZW9mIHdvcmtlck1hcFxuXG5leHBvcnQgZnVuY3Rpb24gZ2VuZXJhdGVTY2hlbWEoXG4gIHpvZFJlZjogT3BlbkFwaVpvZEFueSxcbiAgdXNlT3V0cHV0PzogYm9vbGVhblxuKTogU2NoZW1hT2JqZWN0IHtcbiAgY29uc3QgeyBtZXRhT3BlbkFwaSA9IHt9IH0gPSB6b2RSZWZcbiAgY29uc3Qgc2NoZW1hczogQW5hdGluZVNjaGVtYU9iamVjdFtdID0gW1xuICAgIC4uLihBcnJheS5pc0FycmF5KG1ldGFPcGVuQXBpKSA/IG1ldGFPcGVuQXBpIDogW21ldGFPcGVuQXBpXSksXG4gIF1cbiAgdHJ5IHtcbiAgICBjb25zdCB0eXBlTmFtZSA9IHpvZFJlZi5fZGVmLnR5cGVOYW1lIGFzIFdvcmtlcktleXNcbiAgICBpZiAodHlwZU5hbWUgaW4gd29ya2VyTWFwKSB7XG4gICAgICByZXR1cm4gd29ya2VyTWFwW3R5cGVOYW1lXSh7XG4gICAgICAgIHpvZFJlZjogem9kUmVmIGFzIG5ldmVyLFxuICAgICAgICBzY2hlbWFzLFxuICAgICAgICB1c2VPdXRwdXQsXG4gICAgICB9KVxuICAgIH1cblxuICAgIHJldHVybiBjYXRjaEFsbFBhcnNlcih7IHpvZFJlZiwgc2NoZW1hcyB9KVxuICB9IGNhdGNoIChlcnIpIHtcbiAgICBjb25zb2xlLmVycm9yKGVycilcbiAgICByZXR1cm4gY2F0Y2hBbGxQYXJzZXIoeyB6b2RSZWYsIHNjaGVtYXMgfSlcbiAgfVxufVxuIiwgIi8qKlxuICogRnJvbnQtTWF0dGVyXG4gKlxuICogVmVuZG9yZWQgZnJvbSBodHRwczovL2dpdGh1Yi5jb20vanhzb24vZnJvbnQtbWF0dGVyXG4gKlxuICogTUlUIExpY2Vuc2VcbiAqXG4gKiBDb3B5cmlnaHQgKGMpIEphc29uIENhbXBiZWxsIChcIkF1dGhvclwiKVxuICpcbiAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHlcbiAqIG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksIHRvIGRlYWxcbiAqIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHNcbiAqIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGxcbiAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpc1xuICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcbiAqXG4gKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGxcbiAqIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4gKlxuICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUlxuICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksXG4gKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEVcbiAqIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVJcbiAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sXG4gKiBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRVxuICogU09GVFdBUkUuXG4gKi9cblxuaW1wb3J0IHsgbG9hZCB9IGZyb20gXCJqcy15YW1sXCJcbmNvbnN0IG9wdGlvbmFsQnl0ZU9yZGVyTWFyayA9IFwiXFxcXHVmZWZmP1wiXG5jb25zdCBwbGF0Zm9ybSA9IHR5cGVvZiBwcm9jZXNzICE9PSBcInVuZGVmaW5lZFwiID8gcHJvY2Vzcy5wbGF0Zm9ybSA6IFwiXCJcbmNvbnN0IHBhdHRlcm4gPVxuICBcIl4oXCIgK1xuICBvcHRpb25hbEJ5dGVPcmRlck1hcmsgK1xuICBcIig9IHlhbWwgPXwtLS0pXCIgK1xuICBcIiQoW1xcXFxzXFxcXFNdKj8pXCIgK1xuICBcIl4oPzpcXFxcMnxcXFxcLlxcXFwuXFxcXC4pXFxcXHMqXCIgK1xuICBcIiRcIiArXG4gIChwbGF0Zm9ybSA9PT0gXCJ3aW4zMlwiID8gXCJcXFxccj9cIiA6IFwiXCIpICtcbiAgXCIoPzpcXFxcbik/KVwiXG4vLyBOT1RFOiBJZiB0aGlzIHBhdHRlcm4gdXNlcyB0aGUgJ2cnIGZsYWcgdGhlIGByZWdleGAgdmFyaWFibGUgZGVmaW5pdGlvbiB3aWxsXG4vLyBuZWVkIHRvIGJlIG1vdmVkIGRvd24gaW50byB0aGUgZnVuY3Rpb25zIHRoYXQgdXNlIGl0LlxuY29uc3QgcmVnZXggPSBuZXcgUmVnRXhwKHBhdHRlcm4sIFwibVwiKVxuXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VGcm9udE1hdHRlcihcbiAgc3RyaW5nOiBzdHJpbmcsXG4gIG9wdGlvbnMgPSB7fVxuKTogeyBhdHRyaWJ1dGVzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjsgYm9keTogc3RyaW5nOyBib2R5QmVnaW46IG51bWJlciB9IHtcbiAgc3RyaW5nID0gc3RyaW5nIHx8IFwiXCJcbiAgdmFyIGRlZmF1bHRPcHRpb25zID0geyBhbGxvd1Vuc2FmZTogZmFsc2UgfVxuICBvcHRpb25zID1cbiAgICBvcHRpb25zIGluc3RhbmNlb2YgT2JqZWN0XG4gICAgICA/IHsgLi4uZGVmYXVsdE9wdGlvbnMsIC4uLm9wdGlvbnMgfVxuICAgICAgOiBkZWZhdWx0T3B0aW9uc1xuICB2YXIgbGluZXMgPSBzdHJpbmcuc3BsaXQoLyhcXHI/XFxuKS8pXG4gIGlmIChsaW5lc1swXSAmJiAvPSB5YW1sID18LS0tLy50ZXN0KGxpbmVzWzBdKSkge1xuICAgIHJldHVybiBwYXJzZShzdHJpbmcpXG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGF0dHJpYnV0ZXM6IHt9LFxuICAgICAgYm9keTogc3RyaW5nLFxuICAgICAgYm9keUJlZ2luOiAxLFxuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBjb21wdXRlTG9jYXRpb24obWF0Y2g6IFJlZ0V4cEV4ZWNBcnJheSwgYm9keTogc3RyaW5nKSB7XG4gIHZhciBsaW5lID0gMVxuICB2YXIgcG9zID0gYm9keS5pbmRleE9mKFwiXFxuXCIpXG4gIHZhciBvZmZzZXQgPSBtYXRjaC5pbmRleCArIG1hdGNoWzBdLmxlbmd0aFxuXG4gIHdoaWxlIChwb3MgIT09IC0xKSB7XG4gICAgaWYgKHBvcyA+PSBvZmZzZXQpIHtcbiAgICAgIHJldHVybiBsaW5lXG4gICAgfVxuICAgIGxpbmUrK1xuICAgIHBvcyA9IGJvZHkuaW5kZXhPZihcIlxcblwiLCBwb3MgKyAxKVxuICB9XG5cbiAgcmV0dXJuIGxpbmVcbn1cblxuZnVuY3Rpb24gcGFyc2Uoc3RyaW5nOiBzdHJpbmcpOiB7XG4gIGF0dHJpYnV0ZXM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+XG4gIGJvZHk6IHN0cmluZ1xuICBib2R5QmVnaW46IG51bWJlclxufSB7XG4gIHZhciBtYXRjaCA9IHJlZ2V4LmV4ZWMoc3RyaW5nKVxuICBpZiAoIW1hdGNoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGF0dHJpYnV0ZXM6IHt9LFxuICAgICAgYm9keTogc3RyaW5nLFxuICAgICAgYm9keUJlZ2luOiAxLFxuICAgIH1cbiAgfVxuXG4gIHZhciB5YW1sID0gbWF0Y2hbbWF0Y2gubGVuZ3RoIC0gMV0ucmVwbGFjZSgvXlxccyt8XFxzKyQvZywgXCJcIilcbiAgdmFyIGF0dHJpYnV0ZXMgPSAobG9hZCh5YW1sKSB8fCB7fSkgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj5cbiAgdmFyIGJvZHkgPSBzdHJpbmcucmVwbGFjZShtYXRjaFswXSwgXCJcIilcbiAgdmFyIGxpbmUgPSBjb21wdXRlTG9jYXRpb24obWF0Y2gsIHN0cmluZylcblxuICByZXR1cm4ge1xuICAgIGF0dHJpYnV0ZXM6IGF0dHJpYnV0ZXMsXG4gICAgYm9keTogYm9keSxcbiAgICBib2R5QmVnaW46IGxpbmUsXG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRlc3RGcm9udE1hdHRlcihzdHJpbmc6IHN0cmluZykge1xuICBzdHJpbmcgPSBzdHJpbmcgfHwgXCJcIlxuXG4gIHJldHVybiByZWdleC50ZXN0KHN0cmluZylcbn1cbiIsICJ0eXBlIFByZWZpeGVkT2JqZWN0PFQ+ID0ge1xuICBbSyBpbiBrZXlvZiBUIGFzIGB4LSR7c3RyaW5nICYgS31gXTogVFtLXVxufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJlZml4T2JqZWN0S2V5c1dpdGhYPFQgZXh0ZW5kcyBvYmplY3Q+KFxuICBvYmo6IFRcbik6IFByZWZpeGVkT2JqZWN0PFQ+IHtcbiAgcmV0dXJuIE9iamVjdC5mcm9tRW50cmllcyhcbiAgICBPYmplY3QuZW50cmllcyhvYmopLm1hcCgoW2tleSwgdmFsdWVdKSA9PiBbYHgtJHtrZXl9YCwgdmFsdWVdKVxuICApIGFzIFByZWZpeGVkT2JqZWN0PFQ+XG59XG4iLCAidHlwZSBTbmFrZVRvRGFzaDxUPiA9IHtcbiAgW0sgaW4ga2V5b2YgVCBhcyBLIGV4dGVuZHMgc3RyaW5nID8gU25ha2VUb0Rhc2hTdHJpbmc8Sz4gOiBLXTogVFtLXVxufVxuXG50eXBlIFNuYWtlVG9EYXNoU3RyaW5nPFMgZXh0ZW5kcyBzdHJpbmc+ID0gUyBleHRlbmRzIGAke2luZmVyIFR9XyR7aW5mZXIgVX1gXG4gID8gYCR7VH0tJHtTbmFrZVRvRGFzaFN0cmluZzxVPn1gXG4gIDogU1xuXG5leHBvcnQgZnVuY3Rpb24gZGFzaGlmeU9iamVjdEtleXM8VCBleHRlbmRzIG9iamVjdD4ob2JqOiBUKTogU25ha2VUb0Rhc2g8VD4ge1xuICByZXR1cm4gT2JqZWN0LmZyb21FbnRyaWVzKFxuICAgIE9iamVjdC5lbnRyaWVzKG9iaikubWFwKChba2V5LCB2YWx1ZV0pID0+IFtrZXkucmVwbGFjZSgvXy9nLCBcIi1cIiksIHZhbHVlXSlcbiAgKSBhcyBTbmFrZVRvRGFzaDxUPlxufVxuIiwgImltcG9ydCBfIGZyb20gXCJsb2Rhc2hcIlxuXG5mdW5jdGlvbiBmaW5kS2V5SW5PYmoob2JqOiBhbnksIHZhbHVlOiBhbnkpOiBzdHJpbmcgfCBudWxsIHtcbiAgbGV0IHJlc3VsdEtleTogc3RyaW5nIHwgbnVsbCA9IG51bGxcbiAgXy5mb3JPd24ob2JqLCAodiwgaykgPT4ge1xuICAgIGlmIChfLmlzT2JqZWN0KHYpICYmIF8uaXNNYXRjaCh2LCB2YWx1ZSkpIHtcbiAgICAgIHJlc3VsdEtleSA9IGtcbiAgICAgIC8vIFN0b3AgdGhlIGl0ZXJhdGlvblxuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfVxuICB9KVxuICByZXR1cm4gcmVzdWx0S2V5XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBlbWJlZFNjaGVtYVJlZmVyZW5jZXMob2JqMTogYW55LCBvYmoyOiBhbnkpOiBhbnkge1xuICByZXR1cm4gXy50cmFuc2Zvcm0ob2JqMSwgKHJlc3VsdCwgdmFsdWUsIGtleSkgPT4ge1xuICAgIGlmIChfLmlzT2JqZWN0KHZhbHVlKSkge1xuICAgICAgY29uc3QgbWF0Y2hpbmdLZXkgPSBmaW5kS2V5SW5PYmoob2JqMiwgdmFsdWUpXG4gICAgICBpZiAobWF0Y2hpbmdLZXkpIHtcbiAgICAgICAgcmVzdWx0W2tleV0gPSB7XG4gICAgICAgICAgJHJlZjogYCMvY29tcG9uZW50cy9zY2hlbWFzLyR7bWF0Y2hpbmdLZXl9YCxcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmVzdWx0W2tleV0gPSBlbWJlZFNjaGVtYVJlZmVyZW5jZXModmFsdWUsIG9iajIpXG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlc3VsdFtrZXldID0gdmFsdWVcbiAgICB9XG4gIH0pXG59XG4iLCAiaW1wb3J0IHsgUm91dGVTcGVjIH0gZnJvbSBcIi4uLy4uL3R5cGVzXCJcblxuZnVuY3Rpb24gdHJhbnNmb3JtUGF0aFRvRmVyblNka01ldGhvZE5hbWUocGF0aDogc3RyaW5nKSB7XG4gIGNvbnN0IHBhcnRzID0gcGF0aC5zcGxpdChcIi9cIikuZmlsdGVyKChwYXJ0KSA9PiBwYXJ0ICE9PSBcIlwiKVxuICBjb25zdCBsYXN0UGFydCA9IHBhcnRzW3BhcnRzLmxlbmd0aCAtIDFdXG4gIGlmIChsYXN0UGFydC5zdGFydHNXaXRoKFwiW1wiKSAmJiBsYXN0UGFydC5lbmRzV2l0aChcIl1cIikpIHtcbiAgICAvLyBDb252ZXJ0IFtwYXJhbV0gdG8gYnlfcGFyYW1cbiAgICBjb25zdCBwYXJhbSA9IGxhc3RQYXJ0LnNsaWNlKDEsIC0xKVxuICAgIHJldHVybiBgYnlfJHtwYXJhbX1gXG4gIH1cblxuICByZXR1cm4gbGFzdFBhcnRcbn1cblxuLy8gZmVybiBkb2NzOiBodHRwczovL2J1aWxkd2l0aGZlcm4uY29tL2RvY3Mvc3BlYy9leHRlbnNpb25zXG5mdW5jdGlvbiB0cmFuc2Zvcm1QYXRoVG9GZXJuU2RrR3JvdXBOYW1lKHBhdGg6IHN0cmluZykge1xuICBjb25zdCBwYXJ0cyA9IHBhdGguc3BsaXQoXCIvXCIpLmZpbHRlcigocGFydCkgPT4gcGFydCAhPT0gXCJcIilcbiAgcmV0dXJuIHBhcnRzLnNsaWNlKDAsIHBhcnRzLmxlbmd0aCAtIDEpXG59XG5cbmZ1bmN0aW9uIGdldEZlcm5TZGtNZXRhZGF0YShcbiAgcGF0aDogc3RyaW5nLFxuICBzZGtSZXR1cm5WYWx1ZT86IHN0cmluZyB8IHN0cmluZ1tdXG4pOlxuICB8IHtcbiAgICAgIFwieC1mZXJuLWlnbm9yZVwiOiB0cnVlXG4gICAgfVxuICB8IHtcbiAgICAgIFwieC1mZXJuLXNkay1ncm91cC1uYW1lXCI6IHN0cmluZ1tdXG4gICAgICBcIngtZmVybi1zZGstbWV0aG9kLW5hbWVcIjogc3RyaW5nXG4gICAgfSB7XG4gIGlmIChwYXRoLnNwbGl0KFwiL1wiKS5maWx0ZXIoKHBhcnQpID0+IHBhcnQgIT09IFwiXCIpLmxlbmd0aCA9PT0gMSkge1xuICAgIHJldHVybiB7XG4gICAgICBcIngtZmVybi1pZ25vcmVcIjogdHJ1ZSxcbiAgICB9XG4gIH1cblxuICByZXR1cm4ge1xuICAgIFwieC1mZXJuLXNkay1ncm91cC1uYW1lXCI6IHRyYW5zZm9ybVBhdGhUb0Zlcm5TZGtHcm91cE5hbWUocGF0aCksXG4gICAgXCJ4LWZlcm4tc2RrLW1ldGhvZC1uYW1lXCI6IHRyYW5zZm9ybVBhdGhUb0Zlcm5TZGtNZXRob2ROYW1lKHBhdGgpLFxuICAgIC4uLihzZGtSZXR1cm5WYWx1ZVxuICAgICAgPyB7XG4gICAgICAgICAgXCJ4LWZlcm4tc2RrLXJldHVybi12YWx1ZVwiOiBzZGtSZXR1cm5WYWx1ZSxcbiAgICAgICAgfVxuICAgICAgOiB7fSksXG4gIH1cbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIG1hcE1ldGhvZHNUb0Zlcm5TZGtNZXRhZGF0YSh7XG4gIG1ldGhvZHMsXG4gIHBhdGgsXG4gIHNka1JldHVyblZhbHVlLFxufToge1xuICBtZXRob2RzOiBSb3V0ZVNwZWNbXCJtZXRob2RzXCJdXG4gIHBhdGg6IHN0cmluZ1xuICBzZGtSZXR1cm5WYWx1ZT86IHN0cmluZyB8IHN0cmluZ1tdXG59KSB7XG4gIGNvbnN0IGZlcm5TZGtNZXRhZGF0YSA9IGdldEZlcm5TZGtNZXRhZGF0YShwYXRoLCBzZGtSZXR1cm5WYWx1ZSlcbiAgaWYgKG1ldGhvZHMubGVuZ3RoID09PSAxKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIFttZXRob2RzWzBdXTogZmVyblNka01ldGFkYXRhLFxuICAgIH1cbiAgfVxuXG4gIGNvbnN0IG1hcHBlZE1ldGhvZHMgPSB7fVxuXG4gIG1ldGhvZHMuZm9yRWFjaCgobWV0aG9kKSA9PiB7XG4gICAgaWYgKG1ldGhvZCA9PT0gXCJQT1NUXCIpIHtcbiAgICAgIG1hcHBlZE1ldGhvZHNbbWV0aG9kXSA9IGZlcm5TZGtNZXRhZGF0YVxuICAgIH0gZWxzZSB7XG4gICAgICBtYXBwZWRNZXRob2RzW21ldGhvZF0gPSB7XG4gICAgICAgIFwieC1mZXJuLWlnbm9yZVwiOiB0cnVlLFxuICAgICAgfVxuICAgIH1cbiAgfSlcblxuICByZXR1cm4gbWFwcGVkTWV0aG9kc1xufVxuIiwgImltcG9ydCAqIGFzIGZzIGZyb20gXCJub2RlOmZzL3Byb21pc2VzXCJcbmltcG9ydCB7IHBhcnNlUm91dGVzSW5QYWNrYWdlIH0gZnJvbSBcIi4uL2xpYi9wYXJzZS1yb3V0ZXMtaW4tcGFja2FnZVwiXG5pbXBvcnQgeyB6b2RUb1RzLCBwcmludE5vZGUgfSBmcm9tIFwiLi4vbGliL3pvZC10by10c1wiXG5pbXBvcnQgcHJldHRpZXIgZnJvbSBcInByZXR0aWVyXCJcbmltcG9ydCB7IHosIFpvZEVmZmVjdHMsIFpvZE9wdGlvbmFsIH0gZnJvbSBcInpvZFwiXG5cbmludGVyZmFjZSBHZW5lcmF0ZVJvdXRlVHlwZXNPcHRzIHtcbiAgcGFja2FnZURpcjogc3RyaW5nXG4gIG91dHB1dEZpbGU/OiBzdHJpbmdcbiAgcGF0aEdsb2I/OiBzdHJpbmdcbiAgYXBpUHJlZml4Pzogc3RyaW5nXG4gIG1hcEZpbGVQYXRoVG9IVFRQUm91dGU/OiAoZmlsZV9wYXRoOiBzdHJpbmcpID0+IHN0cmluZ1xuICAvKipcbiAgICogSWYgcHJvdmlkZWQsIG9ubHkgcm91dGVzIHRoYXQgcmV0dXJuIHRydWUgd2lsbCBiZSBpbmNsdWRlZCBpbiB0aGUgZ2VuZXJhdGVkIHR5cGVzLlxuICAgKi9cbiAgZmlsdGVyUm91dGVzPzogKHJvdXRlOiBzdHJpbmcpID0+IGJvb2xlYW5cbiAgLyoqXG4gICAqIEJ5IGRlZmF1bHQsIHJvdXRlcyB0aGF0IGhhdmUgYGV4Y2x1ZGVGcm9tT3BlbkFwaWAgc2V0IHRvIHRydWUgd2lsbCBiZSBleGNsdWRlZCBmcm9tIHRoZSBnZW5lcmF0ZWQgdHlwZXMuXG4gICAqIFNldCB0aGlzIHRvIHRydWUgdG8gaW5jbHVkZSB0aGVtLlxuICAgKi9cbiAgaW5jbHVkZU9wZW5BcGlFeGNsdWRlZFJvdXRlcz86IGJvb2xlYW5cbn1cblxuZXhwb3J0IGNvbnN0IGdlbmVyYXRlUm91dGVUeXBlcyA9IGFzeW5jIChvcHRzOiBHZW5lcmF0ZVJvdXRlVHlwZXNPcHRzKSA9PiB7XG4gIGNvbnN0IGZpbGVwYXRoVG9Sb3V0ZSA9IGF3YWl0IHBhcnNlUm91dGVzSW5QYWNrYWdlKG9wdHMpXG5cbiAgY29uc3Qgc29ydGVkUm91dGVzID0gQXJyYXkuZnJvbShmaWxlcGF0aFRvUm91dGUuZW50cmllcygpKS5zb3J0KChhLCBiKSA9PlxuICAgIGFbMV0ucm91dGUubG9jYWxlQ29tcGFyZShiWzFdLnJvdXRlKVxuICApXG4gIGNvbnN0IGZpbHRlcmVkUm91dGVzID0gc29ydGVkUm91dGVzLmZpbHRlcihcbiAgICAoW18sIHsgcm91dGUgfV0pID0+ICFvcHRzLmZpbHRlclJvdXRlcyB8fCBvcHRzLmZpbHRlclJvdXRlcyhyb3V0ZSlcbiAgKVxuXG4gIC8vIFRPRE8gd2hlbiBsZXNzIGxhenksIHVzZSB0cy1tb3JwaCBmb3IgYmV0dGVyIGdlbmVyYXRpb25cbiAgY29uc3Qgcm91dGVEZWZzOiBzdHJpbmdbXSA9IFtdXG4gIGZvciAoY29uc3QgW18sIHsgcm91dGUsIHJvdXRlU3BlYywgc2V0dXBQYXJhbXMgfV0gb2YgZmlsdGVyZWRSb3V0ZXMpIHtcbiAgICBjb25zdCBtYXhEdXJhdGlvbiA9IHJvdXRlU3BlYy5tYXhEdXJhdGlvbiA/PyBzZXR1cFBhcmFtcy5tYXhEdXJhdGlvblxuICAgIGNvbnN0IHF1ZXJ5S2V5cyA9IE9iamVjdC5rZXlzKHJvdXRlU3BlYy5xdWVyeVBhcmFtcz8uc2hhcGUgPz8ge30pXG4gICAgY29uc3QgcGF0aFBhcmFtZXRlcnMgPSBxdWVyeUtleXMuZmlsdGVyKChrZXkpID0+IHJvdXRlLmluY2x1ZGVzKGBbJHtrZXl9XWApKVxuXG4gICAgLy8gcXVlcnlQYXJhbXMgbWlnaHQgYmUgYSBab2RFZmZlY3RzIG9yIFpvZE9wdGlvbmFsIGluIHNvbWUgY2FzZXNcbiAgICBsZXQgcXVlcnlQYXJhbXMgPSByb3V0ZVNwZWMucXVlcnlQYXJhbXNcbiAgICB3aGlsZSAoXG4gICAgICBxdWVyeVBhcmFtcyAmJlxuICAgICAgKFwic291cmNlVHlwZVwiIGluIHF1ZXJ5UGFyYW1zIHx8IFwidW53cmFwXCIgaW4gcXVlcnlQYXJhbXMpXG4gICAgKSB7XG4gICAgICBpZiAoXCJzb3VyY2VUeXBlXCIgaW4gcXVlcnlQYXJhbXMpIHtcbiAgICAgICAgcXVlcnlQYXJhbXMgPSAocXVlcnlQYXJhbXMgYXMgdW5rbm93biBhcyBab2RFZmZlY3RzPGFueT4pLnNvdXJjZVR5cGUoKVxuICAgICAgfSBlbHNlIGlmIChcInVud3JhcFwiIGluIHF1ZXJ5UGFyYW1zKSB7XG4gICAgICAgIHF1ZXJ5UGFyYW1zID0gKHF1ZXJ5UGFyYW1zIGFzIHVua25vd24gYXMgWm9kT3B0aW9uYWw8YW55PikudW53cmFwKClcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAocXVlcnlQYXJhbXMgJiYgXCJvbWl0XCIgaW4gcXVlcnlQYXJhbXMpIHtcbiAgICAgIHF1ZXJ5UGFyYW1zID0gcXVlcnlQYXJhbXMub21pdChcbiAgICAgICAgT2JqZWN0LmZyb21FbnRyaWVzKHBhdGhQYXJhbWV0ZXJzLm1hcCgocGFyYW0pID0+IFtwYXJhbSwgdHJ1ZV0pKVxuICAgICAgKVxuICAgIH1cblxuICAgIHJvdXRlRGVmcy5wdXNoKFxuICAgICAgYFxuXCIke3JvdXRlfVwiOiB7XG4gIHJvdXRlOiBcIiR7cm91dGV9XCIsXG4gIG1ldGhvZDogJHtyb3V0ZVNwZWMubWV0aG9kcy5tYXAoKG0pID0+IGBcIiR7bX1cImApLmpvaW4oXCIgfCBcIil9LFxuICBxdWVyeVBhcmFtczogJHtxdWVyeVBhcmFtcyA/IHByaW50Tm9kZSh6b2RUb1RzKHF1ZXJ5UGFyYW1zKS5ub2RlKSA6IFwie31cIn0sXG4gIGpzb25Cb2R5OiAke1xuICAgIHJvdXRlU3BlYy5qc29uQm9keSA/IHByaW50Tm9kZSh6b2RUb1RzKHJvdXRlU3BlYy5qc29uQm9keSkubm9kZSkgOiBcInt9XCJcbiAgfSxcbiAgY29tbW9uUGFyYW1zOiAke1xuICAgIHJvdXRlU3BlYy5jb21tb25QYXJhbXNcbiAgICAgID8gcHJpbnROb2RlKHpvZFRvVHMocm91dGVTcGVjLmNvbW1vblBhcmFtcykubm9kZSlcbiAgICAgIDogXCJ7fVwiXG4gIH0sXG4gIGZvcm1EYXRhOiAke1xuICAgIHJvdXRlU3BlYy5mb3JtRGF0YSA/IHByaW50Tm9kZSh6b2RUb1RzKHJvdXRlU3BlYy5mb3JtRGF0YSkubm9kZSkgOiBcInt9XCJcbiAgfSxcbiAganNvblJlc3BvbnNlOiAke1xuICAgIHJvdXRlU3BlYy5qc29uUmVzcG9uc2VcbiAgICAgID8gcHJpbnROb2RlKFxuICAgICAgICAgIHpvZFRvVHMoXG4gICAgICAgICAgICBzZXR1cFBhcmFtcy5hZGRPa1N0YXR1cyAmJlxuICAgICAgICAgICAgICByb3V0ZVNwZWMuanNvblJlc3BvbnNlIGluc3RhbmNlb2Ygei5ab2RPYmplY3RcbiAgICAgICAgICAgICAgPyByb3V0ZVNwZWMuanNvblJlc3BvbnNlLmV4dGVuZCh7IG9rOiB6LmJvb2xlYW4oKSB9KVxuICAgICAgICAgICAgICA6IHJvdXRlU3BlYy5qc29uUmVzcG9uc2VcbiAgICAgICAgICApLm5vZGVcbiAgICAgICAgKVxuICAgICAgOiBcInt9XCJcbiAgfSxcbiAgbWF4RHVyYXRpb246ICR7bWF4RHVyYXRpb24gPz8gXCJ1bmRlZmluZWRcIn1cbn1gLnRyaW0oKVxuICAgIClcbiAgfVxuICBjb25zdCByb3V0ZURlZlN0ciA9IHJvdXRlRGVmcy5qb2luKFwiLFxcblwiKVxuICBjb25zdCBvdXRwdXQgPSBhd2FpdCBwcmV0dGllci5mb3JtYXQoXG4gICAgYGV4cG9ydCB0eXBlIFJvdXRlcyA9IHtcbiR7cm91dGVEZWZTdHJ9XG59XG5cbmV4cG9ydCB0eXBlIFJvdXRlUmVzcG9uc2U8UGF0aCBleHRlbmRzIGtleW9mIFJvdXRlcz4gPVxuICBSb3V0ZXNbUGF0aF1bXCJqc29uUmVzcG9uc2VcIl1cblxuZXhwb3J0IHR5cGUgUm91dGVSZXF1ZXN0Qm9keTxQYXRoIGV4dGVuZHMga2V5b2YgUm91dGVzPiA9XG4gIFJvdXRlc1tQYXRoXVtcImpzb25Cb2R5XCJdICYgUm91dGVzW1BhdGhdW1wiY29tbW9uUGFyYW1zXCJdXG5cbmV4cG9ydCB0eXBlIFJvdXRlUmVxdWVzdFBhcmFtczxQYXRoIGV4dGVuZHMga2V5b2YgUm91dGVzPiA9XG4gIFJvdXRlc1tQYXRoXVtcInF1ZXJ5UGFyYW1zXCJdICYgUm91dGVzW1BhdGhdW1wiY29tbW9uUGFyYW1zXCJdXG5gLnRyaW0oKSxcbiAgICB7IHNlbWk6IGZhbHNlLCBwYXJzZXI6IFwidHlwZXNjcmlwdFwiIH1cbiAgKVxuXG4gIGlmIChvcHRzLm91dHB1dEZpbGUpIHtcbiAgICBhd2FpdCBmcy53cml0ZUZpbGUob3B0cy5vdXRwdXRGaWxlLCBvdXRwdXQpXG4gIH1cblxuICByZXR1cm4gb3V0cHV0XG59XG4iLCAiLyoqXG4gKiBab2QgVG8gVFNcbiAqXG4gKiBWZW5kb3JlZCBmcm9tIGh0dHBzOi8vZ2l0aHViLmNvbS9zYWNoaW5yYWphL3pvZC10by10c1xuICpcbiAqIE1JVCBMaWNlbnNlXG4gKlxuICogQ29weXJpZ2h0IChjKSAyMDIxIFNhY2hpbiBSYWphXG4gKlxuICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weVxuICogb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbFxuICogaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0c1xuICogdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbFxuICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzXG4gKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuICpcbiAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbFxuICogY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbiAqXG4gKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SXG4gKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSxcbiAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRVxuICogQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUlxuICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSxcbiAqIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFXG4gKiBTT0ZUV0FSRS5cbiAqL1xuXG5pbXBvcnQgdHMgZnJvbSBcInR5cGVzY3JpcHRcIlxuaW1wb3J0IHsgWm9kVHlwZSwgWm9kVHlwZUFueSB9IGZyb20gXCJ6b2RcIlxuaW1wb3J0IHsgcGFyc2VGcm9udE1hdHRlciwgdGVzdEZyb250TWF0dGVyIH0gZnJvbSBcIi4vZnJvbnQtbWF0dGVyXCJcbmltcG9ydCBkZWRlbnQgZnJvbSBcImRlZGVudFwiXG5cbmNvbnN0IHsgZmFjdG9yeTogZiwgU3ludGF4S2luZCwgU2NyaXB0S2luZCwgU2NyaXB0VGFyZ2V0LCBFbWl0SGludCB9ID0gdHNcblxuY29uc3QgbWF5YmVJZGVudGlmaWVyVG9UeXBlUmVmZXJlbmNlID0gKFxuICBpZGVudGlmaWVyOiB0cy5JZGVudGlmaWVyIHwgdHMuVHlwZU5vZGVcbikgPT4ge1xuICBpZiAodHMuaXNJZGVudGlmaWVyKGlkZW50aWZpZXIpKSB7XG4gICAgcmV0dXJuIGYuY3JlYXRlVHlwZVJlZmVyZW5jZU5vZGUoaWRlbnRpZmllcilcbiAgfVxuXG4gIHJldHVybiBpZGVudGlmaWVyXG59XG5cbmNvbnN0IGNyZWF0ZVR5cGVSZWZlcmVuY2VGcm9tU3RyaW5nID0gKGlkZW50aWZpZXI6IHN0cmluZykgPT5cbiAgZi5jcmVhdGVUeXBlUmVmZXJlbmNlTm9kZShmLmNyZWF0ZUlkZW50aWZpZXIoaWRlbnRpZmllcikpXG5cbmNvbnN0IGNyZWF0ZVVua25vd25LZXl3b3JkTm9kZSA9ICgpID0+XG4gIGYuY3JlYXRlS2V5d29yZFR5cGVOb2RlKFN5bnRheEtpbmQuVW5rbm93bktleXdvcmQpXG5cbmV4cG9ydCBjb25zdCBwcmludE5vZGUgPSAoXG4gIG5vZGU6IHRzLk5vZGUsXG4gIHByaW50ZXJPcHRpb25zPzogdHMuUHJpbnRlck9wdGlvbnNcbik6IHN0cmluZyA9PiB7XG4gIGNvbnN0IHNvdXJjZUZpbGUgPSB0cy5jcmVhdGVTb3VyY2VGaWxlKFxuICAgIFwicHJpbnQudHNcIixcbiAgICBcIlwiLFxuICAgIFNjcmlwdFRhcmdldC5MYXRlc3QsXG4gICAgZmFsc2UsXG4gICAgU2NyaXB0S2luZC5UU1xuICApXG4gIGNvbnN0IHByaW50ZXIgPSB0cy5jcmVhdGVQcmludGVyKHByaW50ZXJPcHRpb25zKVxuICByZXR1cm4gcHJpbnRlci5wcmludE5vZGUoRW1pdEhpbnQuVW5zcGVjaWZpZWQsIG5vZGUsIHNvdXJjZUZpbGUpXG59XG5cbmNvbnN0IGlkZW50aWZpZXJSRSA9IC9eWyRBLVpfYS16XVtcXHckXSokL1xuXG5jb25zdCBnZXRJZGVudGlmaWVyT3JTdHJpbmdMaXRlcmFsID0gKHN0cmluZ186IHN0cmluZykgPT4ge1xuICBpZiAoaWRlbnRpZmllclJFLnRlc3Qoc3RyaW5nXykpIHtcbiAgICByZXR1cm4gZi5jcmVhdGVJZGVudGlmaWVyKHN0cmluZ18pXG4gIH1cblxuICByZXR1cm4gZi5jcmVhdGVTdHJpbmdMaXRlcmFsKHN0cmluZ18pXG59XG5cbmNvbnN0IGFkZEpzRG9jQ29tbWVudCA9IChub2RlOiB0cy5Ob2RlLCB0ZXh0OiBzdHJpbmcpID0+IHtcbiAgY29uc3QgeyBkZXNjcmlwdGlvbiwgZGVwcmVjYXRlZCB9ID0gcGFyc2VEZXNjcmlwdGlvbih0ZXh0KVxuXG4gIGxldCBjb21tZW50ID0gYCogJHtkZXNjcmlwdGlvbn1gXG4gIGlmIChkZXByZWNhdGVkKSB7XG4gICAgY29tbWVudCArPSBgXFxuICogQGRlcHJlY2F0ZWQgJHtcbiAgICAgIHR5cGVvZiBkZXByZWNhdGVkID09PSBcInN0cmluZ1wiID8gZGVwcmVjYXRlZCA6IFwiXCJcbiAgICB9YFxuICB9IGVsc2Uge1xuICAgIGNvbW1lbnQgKz0gYCBgXG4gIH1cblxuICB0cy5hZGRTeW50aGV0aWNMZWFkaW5nQ29tbWVudChcbiAgICBub2RlLFxuICAgIFN5bnRheEtpbmQuTXVsdGlMaW5lQ29tbWVudFRyaXZpYSxcbiAgICBjb21tZW50LFxuICAgIHRydWVcbiAgKVxufVxuXG50eXBlIFBhcnNlZERlc2NyaXB0aW9uID0ge1xuICBkZXNjcmlwdGlvbjogc3RyaW5nXG4gIGRlcHJlY2F0ZWQ/OiBib29sZWFuIHwgc3RyaW5nXG4gIFtrZXk6IHN0cmluZ106IHVua25vd25cbn1cblxuZnVuY3Rpb24gcGFyc2VEZXNjcmlwdGlvbihkZXNjcmlwdGlvbjogc3RyaW5nKTogUGFyc2VkRGVzY3JpcHRpb24ge1xuICBpZiAoIWRlc2NyaXB0aW9uKVxuICAgIHJldHVybiB7XG4gICAgICBkZXNjcmlwdGlvbjogXCJcIixcbiAgICB9XG4gIGNvbnN0IHRyaW1tZWREZXNjcmlwdGlvbiA9IGRlZGVudChkZXNjcmlwdGlvbilcbiAgaWYgKCF0ZXN0RnJvbnRNYXR0ZXIodHJpbW1lZERlc2NyaXB0aW9uKSkgcmV0dXJuIHsgZGVzY3JpcHRpb24gfVxuICBjb25zdCB7IGF0dHJpYnV0ZXMsIGJvZHkgfSA9IHBhcnNlRnJvbnRNYXR0ZXIodHJpbW1lZERlc2NyaXB0aW9uKVxuICBjb25zdCBvdXRwdXQ6IFBhcnNlZERlc2NyaXB0aW9uID0ge1xuICAgIGRlc2NyaXB0aW9uOiBib2R5LnRyaW0oKSxcbiAgfVxuICBpZiAodHlwZW9mIGF0dHJpYnV0ZXMgPT09IFwib2JqZWN0XCIgJiYgYXR0cmlidXRlcyAhPT0gbnVsbCkge1xuICAgIGlmIChcImRlcHJlY2F0ZWRcIiBpbiBhdHRyaWJ1dGVzICYmIGF0dHJpYnV0ZXMuZGVwcmVjYXRlZCkge1xuICAgICAgaWYgKHR5cGVvZiBhdHRyaWJ1dGVzLmRlcHJlY2F0ZWQgPT09IFwiYm9vbGVhblwiKSB7XG4gICAgICAgIG91dHB1dC5kZXByZWNhdGVkID0gdHJ1ZVxuICAgICAgfSBlbHNlIGlmICh0eXBlb2YgYXR0cmlidXRlcy5kZXByZWNhdGVkID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgIG91dHB1dC5kZXByZWNhdGVkID1cbiAgICAgICAgICBhdHRyaWJ1dGVzLmRlcHJlY2F0ZWQubGVuZ3RoID4gMCA/IGF0dHJpYnV0ZXMuZGVwcmVjYXRlZCA6IHRydWVcbiAgICAgIH1cbiAgICB9XG4gICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMoYXR0cmlidXRlcykpIHtcbiAgICAgIGlmIChrZXkgPT09IFwiZGVzY3JpcHRpb25cIiB8fCBrZXkgPT09IFwiZGVwcmVjYXRlZFwiKSBjb250aW51ZVxuICAgICAgb3V0cHV0W2tleV0gPSB2YWx1ZVxuICAgIH1cbiAgfVxuICByZXR1cm4gb3V0cHV0XG59XG5cbnR5cGUgTGl0ZXJhbFR5cGUgPSBzdHJpbmcgfCBudW1iZXIgfCBib29sZWFuXG5cbnR5cGUgWm9kVG9Uc09wdGlvbnMgPSB7XG4gIC8qKiBAZGVwcmVjYXRlZCB1c2UgYG5hdGl2ZUVudW1zYCBpbnN0ZWFkICovXG4gIHJlc29sdmVOYXRpdmVFbnVtcz86IGJvb2xlYW5cbiAgbmF0aXZlRW51bXM/OiBcImlkZW50aWZpZXJcIiB8IFwicmVzb2x2ZVwiIHwgXCJ1bmlvblwiXG59XG5cbmNvbnN0IHJlc29sdmVPcHRpb25zID0gKHJhdz86IFpvZFRvVHNPcHRpb25zKSA9PiB7XG4gIGNvbnN0IHJlc29sdmVkID0ge1xuICAgIG5hdGl2ZUVudW1zOiByYXc/LnJlc29sdmVOYXRpdmVFbnVtcyA/IFwicmVzb2x2ZVwiIDogXCJpZGVudGlmaWVyXCIsXG4gIH1cblxuICByZXR1cm4geyAuLi5yZXNvbHZlZCwgLi4ucmF3IH1cbn1cblxudHlwZSBSZXNvbHZlZFpvZFRvVHNPcHRpb25zID0gUmV0dXJuVHlwZTx0eXBlb2YgcmVzb2x2ZU9wdGlvbnM+XG5cbnR5cGUgWm9kVG9Uc1N0b3JlID0ge1xuICBuYXRpdmVFbnVtczogdHMuRW51bURlY2xhcmF0aW9uW11cbn1cblxudHlwZSBab2RUb1RzUmV0dXJuID0ge1xuICBub2RlOiB0cy5UeXBlTm9kZVxuICBzdG9yZTogWm9kVG9Uc1N0b3JlXG59XG5cbnR5cGUgR2V0VHlwZUZ1bmN0aW9uID0gKFxuICB0eXBlc2NyaXB0OiB0eXBlb2YgdHMsXG4gIGlkZW50aWZpZXI6IHN0cmluZyxcbiAgb3B0aW9uczogUmVzb2x2ZWRab2RUb1RzT3B0aW9uc1xuKSA9PiB0cy5JZGVudGlmaWVyIHwgdHMuVHlwZU5vZGVcblxudHlwZSBHZXRUeXBlID0geyBfZGVmOiB7IGdldFR5cGU/OiBHZXRUeXBlRnVuY3Rpb24gfSB9XG5cbmNvbnN0IGNhbGxHZXRUeXBlID0gKFxuICB6b2Q6IFpvZFR5cGVBbnksXG4gIGlkZW50aWZpZXI6IHN0cmluZyxcbiAgb3B0aW9uczogUmVzb2x2ZWRab2RUb1RzT3B0aW9uc1xuKSA9PiB7XG4gIGxldCB0eXBlOiBSZXR1cm5UeXBlPEdldFR5cGVGdW5jdGlvbj4gfCB1bmRlZmluZWRcblxuICBjb25zdCBnZXRUeXBlU2NoZW1hID0gem9kIGFzIEdldFR5cGVcbiAgLy8gdGhpcyBtdXN0IGJlIGNhbGxlZCBiZWZvcmUgYWNjZXNzaW5nICd0eXBlJ1xuICBpZiAoZ2V0VHlwZVNjaGVtYS5fZGVmLmdldFR5cGUpXG4gICAgdHlwZSA9IGdldFR5cGVTY2hlbWEuX2RlZi5nZXRUeXBlKHRzLCBpZGVudGlmaWVyLCBvcHRpb25zKVxuICByZXR1cm4gdHlwZVxufVxuXG5leHBvcnQgY29uc3Qgem9kVG9UcyA9IChcbiAgem9kOiBab2RUeXBlQW55LFxuICBpZGVudGlmaWVyPzogc3RyaW5nLFxuICBvcHRpb25zPzogWm9kVG9Uc09wdGlvbnNcbik6IFpvZFRvVHNSZXR1cm4gPT4ge1xuICBpZiAoISh6b2QgaW5zdGFuY2VvZiBab2RUeXBlKSkge1xuICAgIHJldHVybiB7XG4gICAgICBub2RlOiBjcmVhdGVVbmtub3duS2V5d29yZE5vZGUoKSxcbiAgICAgIHN0b3JlOiB7IG5hdGl2ZUVudW1zOiBbXSB9LFxuICAgIH1cbiAgfVxuICBjb25zdCByZXNvbHZlZElkZW50aWZpZXIgPSBpZGVudGlmaWVyID8/IFwiSWRlbnRpZmllclwiXG5cbiAgY29uc3QgcmVzb2x2ZWRPcHRpb25zID0gcmVzb2x2ZU9wdGlvbnMob3B0aW9ucylcblxuICBjb25zdCBzdG9yZTogWm9kVG9Uc1N0b3JlID0geyBuYXRpdmVFbnVtczogW10gfVxuXG4gIGNvbnN0IG5vZGUgPSB6b2RUb1RzTm9kZSh6b2QsIHJlc29sdmVkSWRlbnRpZmllciwgc3RvcmUsIHJlc29sdmVkT3B0aW9ucylcblxuICByZXR1cm4geyBub2RlLCBzdG9yZSB9XG59XG5cbmNvbnN0IHpvZFRvVHNOb2RlID0gKFxuICB6b2Q6IFpvZFR5cGVBbnksXG4gIGlkZW50aWZpZXI6IHN0cmluZyxcbiAgc3RvcmU6IFpvZFRvVHNTdG9yZSxcbiAgb3B0aW9uczogUmVzb2x2ZWRab2RUb1RzT3B0aW9uc1xuKSA9PiB7XG4gIGNvbnN0IHR5cGVOYW1lID0gem9kLl9kZWYudHlwZU5hbWVcblxuICBjb25zdCBnZXRUeXBlVHlwZSA9IGNhbGxHZXRUeXBlKHpvZCwgaWRlbnRpZmllciwgb3B0aW9ucylcbiAgLy8gc3BlY2lhbCBjYXNlIG5hdGl2ZSBlbnVtLCB3aGljaCBuZWVkcyBhbiBpZGVudGlmaWVyIG5vZGVcbiAgaWYgKGdldFR5cGVUeXBlICYmIHR5cGVOYW1lICE9PSBcIlpvZE5hdGl2ZUVudW1cIikge1xuICAgIHJldHVybiBtYXliZUlkZW50aWZpZXJUb1R5cGVSZWZlcmVuY2UoZ2V0VHlwZVR5cGUpXG4gIH1cblxuICBjb25zdCBvdGhlckFyZ3VtZW50cyA9IFtpZGVudGlmaWVyLCBzdG9yZSwgb3B0aW9uc10gYXMgY29uc3RcblxuICBzd2l0Y2ggKHR5cGVOYW1lKSB7XG4gICAgY2FzZSBcIlpvZFN0cmluZ1wiOiB7XG4gICAgICByZXR1cm4gZi5jcmVhdGVLZXl3b3JkVHlwZU5vZGUoU3ludGF4S2luZC5TdHJpbmdLZXl3b3JkKVxuICAgIH1cbiAgICBjYXNlIFwiWm9kTnVtYmVyXCI6IHtcbiAgICAgIHJldHVybiBmLmNyZWF0ZUtleXdvcmRUeXBlTm9kZShTeW50YXhLaW5kLk51bWJlcktleXdvcmQpXG4gICAgfVxuICAgIGNhc2UgXCJab2RCaWdJbnRcIjoge1xuICAgICAgcmV0dXJuIGYuY3JlYXRlS2V5d29yZFR5cGVOb2RlKFN5bnRheEtpbmQuQmlnSW50S2V5d29yZClcbiAgICB9XG4gICAgY2FzZSBcIlpvZEJvb2xlYW5cIjoge1xuICAgICAgcmV0dXJuIGYuY3JlYXRlS2V5d29yZFR5cGVOb2RlKFN5bnRheEtpbmQuQm9vbGVhbktleXdvcmQpXG4gICAgfVxuICAgIGNhc2UgXCJab2REYXRlXCI6IHtcbiAgICAgIHJldHVybiBmLmNyZWF0ZVR5cGVSZWZlcmVuY2VOb2RlKGYuY3JlYXRlSWRlbnRpZmllcihcIkRhdGVcIikpXG4gICAgfVxuICAgIGNhc2UgXCJab2RVbmRlZmluZWRcIjoge1xuICAgICAgcmV0dXJuIGYuY3JlYXRlS2V5d29yZFR5cGVOb2RlKFN5bnRheEtpbmQuVW5kZWZpbmVkS2V5d29yZClcbiAgICB9XG4gICAgY2FzZSBcIlpvZE51bGxcIjoge1xuICAgICAgcmV0dXJuIGYuY3JlYXRlTGl0ZXJhbFR5cGVOb2RlKGYuY3JlYXRlTnVsbCgpKVxuICAgIH1cbiAgICBjYXNlIFwiWm9kVm9pZFwiOiB7XG4gICAgICByZXR1cm4gZi5jcmVhdGVVbmlvblR5cGVOb2RlKFtcbiAgICAgICAgZi5jcmVhdGVLZXl3b3JkVHlwZU5vZGUoU3ludGF4S2luZC5Wb2lkS2V5d29yZCksXG4gICAgICAgIGYuY3JlYXRlS2V5d29yZFR5cGVOb2RlKFN5bnRheEtpbmQuVW5kZWZpbmVkS2V5d29yZCksXG4gICAgICBdKVxuICAgIH1cbiAgICBjYXNlIFwiWm9kQW55XCI6IHtcbiAgICAgIHJldHVybiBmLmNyZWF0ZUtleXdvcmRUeXBlTm9kZShTeW50YXhLaW5kLkFueUtleXdvcmQpXG4gICAgfVxuICAgIGNhc2UgXCJab2RVbmtub3duXCI6IHtcbiAgICAgIHJldHVybiBjcmVhdGVVbmtub3duS2V5d29yZE5vZGUoKVxuICAgIH1cbiAgICBjYXNlIFwiWm9kTmV2ZXJcIjoge1xuICAgICAgcmV0dXJuIGYuY3JlYXRlS2V5d29yZFR5cGVOb2RlKFN5bnRheEtpbmQuTmV2ZXJLZXl3b3JkKVxuICAgIH1cbiAgICBjYXNlIFwiWm9kTGF6eVwiOiB7XG4gICAgICAvLyBpdCBpcyBpbXBvc3NpYmxlIHRvIGRldGVybWluZSB3aGF0IHRoZSBsYXp5IHZhbHVlIGlzIHJlZmVycmluZyB0b1xuICAgICAgLy8gc28gd2UgZm9yY2UgdGhlIHVzZXIgdG8gZGVjbGFyZSBpdFxuICAgICAgaWYgKCFnZXRUeXBlVHlwZSkgcmV0dXJuIGNyZWF0ZVR5cGVSZWZlcmVuY2VGcm9tU3RyaW5nKGlkZW50aWZpZXIpXG4gICAgICBicmVha1xuICAgIH1cbiAgICBjYXNlIFwiWm9kTGl0ZXJhbFwiOiB7XG4gICAgICAvLyB6LmxpdGVyYWwoJ2hpJykgLT4gJ2hpJ1xuICAgICAgbGV0IGxpdGVyYWw6IHRzLkxpdGVyYWxFeHByZXNzaW9uIHwgdHMuQm9vbGVhbkxpdGVyYWxcblxuICAgICAgY29uc3QgbGl0ZXJhbFZhbHVlID0gem9kLl9kZWYudmFsdWUgYXMgTGl0ZXJhbFR5cGVcbiAgICAgIHN3aXRjaCAodHlwZW9mIGxpdGVyYWxWYWx1ZSkge1xuICAgICAgICBjYXNlIFwibnVtYmVyXCI6IHtcbiAgICAgICAgICBsaXRlcmFsID0gZi5jcmVhdGVOdW1lcmljTGl0ZXJhbChsaXRlcmFsVmFsdWUpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgfVxuICAgICAgICBjYXNlIFwiYm9vbGVhblwiOiB7XG4gICAgICAgICAgbGl0ZXJhbCA9IGxpdGVyYWxWYWx1ZSA9PT0gdHJ1ZSA/IGYuY3JlYXRlVHJ1ZSgpIDogZi5jcmVhdGVGYWxzZSgpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgfVxuICAgICAgICBkZWZhdWx0OiB7XG4gICAgICAgICAgbGl0ZXJhbCA9IGYuY3JlYXRlU3RyaW5nTGl0ZXJhbChsaXRlcmFsVmFsdWUpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gZi5jcmVhdGVMaXRlcmFsVHlwZU5vZGUobGl0ZXJhbClcbiAgICB9XG4gICAgY2FzZSBcIlpvZE9iamVjdFwiOiB7XG4gICAgICBjb25zdCBwcm9wZXJ0aWVzID0gT2JqZWN0LmVudHJpZXMoem9kLl9kZWYuc2hhcGUoKSlcblxuICAgICAgY29uc3QgbWVtYmVyczogdHMuVHlwZUVsZW1lbnRbXSA9IHByb3BlcnRpZXMubWFwKChba2V5LCB2YWx1ZV0pID0+IHtcbiAgICAgICAgY29uc3QgbmV4dFpvZE5vZGUgPSB2YWx1ZSBhcyBab2RUeXBlQW55XG4gICAgICAgIGNvbnN0IHR5cGUgPSB6b2RUb1RzTm9kZShuZXh0Wm9kTm9kZSwgLi4ub3RoZXJBcmd1bWVudHMpXG5cbiAgICAgICAgY29uc3QgeyB0eXBlTmFtZTogbmV4dFpvZE5vZGVUeXBlTmFtZSB9ID0gbmV4dFpvZE5vZGUuX2RlZlxuICAgICAgICBjb25zdCBpc09wdGlvbmFsID1cbiAgICAgICAgICBuZXh0Wm9kTm9kZVR5cGVOYW1lID09PSBcIlpvZE9wdGlvbmFsXCIgfHwgbmV4dFpvZE5vZGUuaXNPcHRpb25hbCgpXG5cbiAgICAgICAgY29uc3QgcHJvcGVydHlTaWduYXR1cmUgPSBmLmNyZWF0ZVByb3BlcnR5U2lnbmF0dXJlKFxuICAgICAgICAgIHVuZGVmaW5lZCxcbiAgICAgICAgICBnZXRJZGVudGlmaWVyT3JTdHJpbmdMaXRlcmFsKGtleSksXG4gICAgICAgICAgaXNPcHRpb25hbCA/IGYuY3JlYXRlVG9rZW4oU3ludGF4S2luZC5RdWVzdGlvblRva2VuKSA6IHVuZGVmaW5lZCxcbiAgICAgICAgICB0eXBlXG4gICAgICAgIClcblxuICAgICAgICBpZiAobmV4dFpvZE5vZGUuZGVzY3JpcHRpb24pIHtcbiAgICAgICAgICBhZGRKc0RvY0NvbW1lbnQocHJvcGVydHlTaWduYXR1cmUsIG5leHRab2ROb2RlLmRlc2NyaXB0aW9uKVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHByb3BlcnR5U2lnbmF0dXJlXG4gICAgICB9KVxuICAgICAgcmV0dXJuIGYuY3JlYXRlVHlwZUxpdGVyYWxOb2RlKG1lbWJlcnMpXG4gICAgfVxuXG4gICAgY2FzZSBcIlpvZEFycmF5XCI6IHtcbiAgICAgIGNvbnN0IHR5cGUgPSB6b2RUb1RzTm9kZSh6b2QuX2RlZi50eXBlLCAuLi5vdGhlckFyZ3VtZW50cylcbiAgICAgIGNvbnN0IG5vZGUgPSBmLmNyZWF0ZUFycmF5VHlwZU5vZGUodHlwZSlcbiAgICAgIHJldHVybiBub2RlXG4gICAgfVxuXG4gICAgY2FzZSBcIlpvZEVudW1cIjoge1xuICAgICAgLy8gei5lbnVtWydhJywgJ2InLCAnYyddIC0+ICdhJyB8ICdiJyB8ICdjXG4gICAgICBjb25zdCB0eXBlcyA9IHpvZC5fZGVmLnZhbHVlcy5tYXAoKHZhbHVlOiBzdHJpbmcpID0+XG4gICAgICAgIGYuY3JlYXRlTGl0ZXJhbFR5cGVOb2RlKGYuY3JlYXRlU3RyaW5nTGl0ZXJhbCh2YWx1ZSkpXG4gICAgICApXG4gICAgICByZXR1cm4gZi5jcmVhdGVVbmlvblR5cGVOb2RlKHR5cGVzKVxuICAgIH1cblxuICAgIGNhc2UgXCJab2RVbmlvblwiOiB7XG4gICAgICAvLyB6LnVuaW9uKFt6LnN0cmluZygpLCB6Lm51bWJlcigpXSkgLT4gc3RyaW5nIHwgbnVtYmVyXG4gICAgICBjb25zdCBvcHRpb25zOiBab2RUeXBlQW55W10gPSB6b2QuX2RlZi5vcHRpb25zXG4gICAgICBjb25zdCB0eXBlczogdHMuVHlwZU5vZGVbXSA9IG9wdGlvbnMubWFwKChvcHRpb24pID0+XG4gICAgICAgIHpvZFRvVHNOb2RlKG9wdGlvbiwgLi4ub3RoZXJBcmd1bWVudHMpXG4gICAgICApXG4gICAgICByZXR1cm4gZi5jcmVhdGVVbmlvblR5cGVOb2RlKHR5cGVzKVxuICAgIH1cblxuICAgIGNhc2UgXCJab2REaXNjcmltaW5hdGVkVW5pb25cIjoge1xuICAgICAgLy8gei5kaXNjcmltaW5hdGVkVW5pb24oJ2tpbmQnLCBbei5vYmplY3QoeyBraW5kOiB6LmxpdGVyYWwoJ2EnKSwgYTogei5zdHJpbmcoKSB9KSwgei5vYmplY3QoeyBraW5kOiB6LmxpdGVyYWwoJ2InKSwgYjogei5udW1iZXIoKSB9KV0pIC0+IHsga2luZDogJ2EnLCBhOiBzdHJpbmcgfSB8IHsga2luZDogJ2InLCBiOiBudW1iZXIgfVxuICAgICAgY29uc3Qgb3B0aW9uczogWm9kVHlwZUFueVtdID0gWy4uLnpvZC5fZGVmLm9wdGlvbnMudmFsdWVzKCldXG4gICAgICBjb25zdCB0eXBlczogdHMuVHlwZU5vZGVbXSA9IG9wdGlvbnMubWFwKChvcHRpb24pID0+XG4gICAgICAgIHpvZFRvVHNOb2RlKG9wdGlvbiwgLi4ub3RoZXJBcmd1bWVudHMpXG4gICAgICApXG4gICAgICByZXR1cm4gZi5jcmVhdGVVbmlvblR5cGVOb2RlKHR5cGVzKVxuICAgIH1cblxuICAgIGNhc2UgXCJab2RFZmZlY3RzXCI6IHtcbiAgICAgIC8vIGlnbm9yZSBhbnkgZWZmZWN0cywgdGhleSB3b24ndCBmYWN0b3IgaW50byB0aGUgdHlwZXNcbiAgICAgIGNvbnN0IG5vZGUgPSB6b2RUb1RzTm9kZShcbiAgICAgICAgem9kLl9kZWYuc2NoZW1hLFxuICAgICAgICAuLi5vdGhlckFyZ3VtZW50c1xuICAgICAgKSBhcyB0cy5UeXBlTm9kZVxuICAgICAgcmV0dXJuIG5vZGVcbiAgICB9XG5cbiAgICBjYXNlIFwiWm9kTmF0aXZlRW51bVwiOiB7XG4gICAgICBjb25zdCB0eXBlID0gZ2V0VHlwZVR5cGVcblxuICAgICAgaWYgKG9wdGlvbnMubmF0aXZlRW51bXMgPT09IFwidW5pb25cIikge1xuICAgICAgICAvLyBhbGxvdyBvdmVycmlkaW5nIHdpdGggdGhpcyBvcHRpb25cbiAgICAgICAgaWYgKHR5cGUpIHJldHVybiBtYXliZUlkZW50aWZpZXJUb1R5cGVSZWZlcmVuY2UodHlwZSlcblxuICAgICAgICBjb25zdCB0eXBlcyA9IE9iamVjdC52YWx1ZXMoem9kLl9kZWYudmFsdWVzKS5tYXAoKHZhbHVlKSA9PiB7XG4gICAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gXCJudW1iZXJcIikge1xuICAgICAgICAgICAgcmV0dXJuIGYuY3JlYXRlTGl0ZXJhbFR5cGVOb2RlKGYuY3JlYXRlTnVtZXJpY0xpdGVyYWwodmFsdWUpKVxuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gZi5jcmVhdGVMaXRlcmFsVHlwZU5vZGUoZi5jcmVhdGVTdHJpbmdMaXRlcmFsKHZhbHVlIGFzIHN0cmluZykpXG4gICAgICAgIH0pXG4gICAgICAgIHJldHVybiBmLmNyZWF0ZVVuaW9uVHlwZU5vZGUodHlwZXMpXG4gICAgICB9XG5cbiAgICAgIC8vIHoubmF0aXZlRW51bShGcnVpdHMpIC0+IEZydWl0c1xuICAgICAgLy8gY2FuIHJlc29sdmUgRnJ1aXRzIGludG8gc3RvcmUgYW5kIHVzZXIgY2FuIGhhbmRsZSBlbnVtc1xuICAgICAgaWYgKCF0eXBlKSByZXR1cm4gY3JlYXRlVW5rbm93bktleXdvcmROb2RlKClcblxuICAgICAgaWYgKG9wdGlvbnMubmF0aXZlRW51bXMgPT09IFwicmVzb2x2ZVwiKSB7XG4gICAgICAgIGNvbnN0IGVudW1NZW1iZXJzID0gT2JqZWN0LmVudHJpZXMoXG4gICAgICAgICAgem9kLl9kZWYudmFsdWVzIGFzIFJlY29yZDxzdHJpbmcsIHN0cmluZyB8IG51bWJlcj5cbiAgICAgICAgKS5tYXAoKFtrZXksIHZhbHVlXSkgPT4ge1xuICAgICAgICAgIGNvbnN0IGxpdGVyYWwgPVxuICAgICAgICAgICAgdHlwZW9mIHZhbHVlID09PSBcIm51bWJlclwiXG4gICAgICAgICAgICAgID8gZi5jcmVhdGVOdW1lcmljTGl0ZXJhbCh2YWx1ZSlcbiAgICAgICAgICAgICAgOiBmLmNyZWF0ZVN0cmluZ0xpdGVyYWwodmFsdWUpXG5cbiAgICAgICAgICByZXR1cm4gZi5jcmVhdGVFbnVtTWVtYmVyKGdldElkZW50aWZpZXJPclN0cmluZ0xpdGVyYWwoa2V5KSwgbGl0ZXJhbClcbiAgICAgICAgfSlcblxuICAgICAgICBpZiAodHMuaXNJZGVudGlmaWVyKHR5cGUpKSB7XG4gICAgICAgICAgc3RvcmUubmF0aXZlRW51bXMucHVzaChcbiAgICAgICAgICAgIGYuY3JlYXRlRW51bURlY2xhcmF0aW9uKHVuZGVmaW5lZCwgdHlwZSwgZW51bU1lbWJlcnMpXG4gICAgICAgICAgKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgICdnZXRUeXBlIG9uIG5hdGl2ZUVudW0gbXVzdCByZXR1cm4gYW4gaWRlbnRpZmllciB3aGVuIG5hdGl2ZUVudW1zIGlzIFwicmVzb2x2ZVwiJ1xuICAgICAgICAgIClcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gbWF5YmVJZGVudGlmaWVyVG9UeXBlUmVmZXJlbmNlKHR5cGUpXG4gICAgfVxuXG4gICAgY2FzZSBcIlpvZE9wdGlvbmFsXCI6IHtcbiAgICAgIGNvbnN0IGlubmVyVHlwZSA9IHpvZFRvVHNOb2RlKFxuICAgICAgICB6b2QuX2RlZi5pbm5lclR5cGUsXG4gICAgICAgIC4uLm90aGVyQXJndW1lbnRzXG4gICAgICApIGFzIHRzLlR5cGVOb2RlXG4gICAgICByZXR1cm4gZi5jcmVhdGVVbmlvblR5cGVOb2RlKFtcbiAgICAgICAgaW5uZXJUeXBlLFxuICAgICAgICBmLmNyZWF0ZUtleXdvcmRUeXBlTm9kZShTeW50YXhLaW5kLlVuZGVmaW5lZEtleXdvcmQpLFxuICAgICAgXSlcbiAgICB9XG5cbiAgICBjYXNlIFwiWm9kTnVsbGFibGVcIjoge1xuICAgICAgY29uc3QgaW5uZXJUeXBlID0gem9kVG9Uc05vZGUoXG4gICAgICAgIHpvZC5fZGVmLmlubmVyVHlwZSxcbiAgICAgICAgLi4ub3RoZXJBcmd1bWVudHNcbiAgICAgICkgYXMgdHMuVHlwZU5vZGVcbiAgICAgIHJldHVybiBmLmNyZWF0ZVVuaW9uVHlwZU5vZGUoW1xuICAgICAgICBpbm5lclR5cGUsXG4gICAgICAgIGYuY3JlYXRlTGl0ZXJhbFR5cGVOb2RlKGYuY3JlYXRlTnVsbCgpKSxcbiAgICAgIF0pXG4gICAgfVxuXG4gICAgY2FzZSBcIlpvZFR1cGxlXCI6IHtcbiAgICAgIC8vIHoudHVwbGUoW3ouc3RyaW5nKCksIHoubnVtYmVyKCldKSAtPiBbc3RyaW5nLCBudW1iZXJdXG4gICAgICBjb25zdCB0eXBlcyA9IHpvZC5fZGVmLml0ZW1zLm1hcCgob3B0aW9uOiBab2RUeXBlQW55KSA9PlxuICAgICAgICB6b2RUb1RzTm9kZShvcHRpb24sIC4uLm90aGVyQXJndW1lbnRzKVxuICAgICAgKVxuICAgICAgcmV0dXJuIGYuY3JlYXRlVHVwbGVUeXBlTm9kZSh0eXBlcylcbiAgICB9XG5cbiAgICBjYXNlIFwiWm9kUmVjb3JkXCI6IHtcbiAgICAgIC8vIHoucmVjb3JkKHoubnVtYmVyKCkpIC0+IHsgW3g6IHN0cmluZ106IG51bWJlciB9XG4gICAgICBjb25zdCB2YWx1ZVR5cGUgPSB6b2RUb1RzTm9kZSh6b2QuX2RlZi52YWx1ZVR5cGUsIC4uLm90aGVyQXJndW1lbnRzKVxuXG4gICAgICBjb25zdCBub2RlID0gZi5jcmVhdGVUeXBlTGl0ZXJhbE5vZGUoW1xuICAgICAgICBmLmNyZWF0ZUluZGV4U2lnbmF0dXJlKFxuICAgICAgICAgIHVuZGVmaW5lZCxcbiAgICAgICAgICBbXG4gICAgICAgICAgICBmLmNyZWF0ZVBhcmFtZXRlckRlY2xhcmF0aW9uKFxuICAgICAgICAgICAgICB1bmRlZmluZWQsXG4gICAgICAgICAgICAgIHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgZi5jcmVhdGVJZGVudGlmaWVyKFwieFwiKSxcbiAgICAgICAgICAgICAgdW5kZWZpbmVkLFxuICAgICAgICAgICAgICBmLmNyZWF0ZUtleXdvcmRUeXBlTm9kZShTeW50YXhLaW5kLlN0cmluZ0tleXdvcmQpXG4gICAgICAgICAgICApLFxuICAgICAgICAgIF0sXG4gICAgICAgICAgdmFsdWVUeXBlXG4gICAgICAgICksXG4gICAgICBdKVxuXG4gICAgICByZXR1cm4gbm9kZVxuICAgIH1cblxuICAgIGNhc2UgXCJab2RNYXBcIjoge1xuICAgICAgLy8gei5tYXAoei5zdHJpbmcoKSkgLT4gTWFwPHN0cmluZz5cbiAgICAgIGNvbnN0IHZhbHVlVHlwZSA9IHpvZFRvVHNOb2RlKHpvZC5fZGVmLnZhbHVlVHlwZSwgLi4ub3RoZXJBcmd1bWVudHMpXG4gICAgICBjb25zdCBrZXlUeXBlID0gem9kVG9Uc05vZGUoem9kLl9kZWYua2V5VHlwZSwgLi4ub3RoZXJBcmd1bWVudHMpXG5cbiAgICAgIGNvbnN0IG5vZGUgPSBmLmNyZWF0ZVR5cGVSZWZlcmVuY2VOb2RlKGYuY3JlYXRlSWRlbnRpZmllcihcIk1hcFwiKSwgW1xuICAgICAgICBrZXlUeXBlLFxuICAgICAgICB2YWx1ZVR5cGUsXG4gICAgICBdKVxuXG4gICAgICByZXR1cm4gbm9kZVxuICAgIH1cblxuICAgIGNhc2UgXCJab2RTZXRcIjoge1xuICAgICAgLy8gei5zZXQoei5zdHJpbmcoKSkgLT4gU2V0PHN0cmluZz5cbiAgICAgIGNvbnN0IHR5cGUgPSB6b2RUb1RzTm9kZSh6b2QuX2RlZi52YWx1ZVR5cGUsIC4uLm90aGVyQXJndW1lbnRzKVxuXG4gICAgICBjb25zdCBub2RlID0gZi5jcmVhdGVUeXBlUmVmZXJlbmNlTm9kZShmLmNyZWF0ZUlkZW50aWZpZXIoXCJTZXRcIiksIFt0eXBlXSlcbiAgICAgIHJldHVybiBub2RlXG4gICAgfVxuXG4gICAgY2FzZSBcIlpvZEludGVyc2VjdGlvblwiOiB7XG4gICAgICAvLyB6Lm51bWJlcigpLmFuZCh6LnN0cmluZygpKSAtPiBudW1iZXIgJiBzdHJpbmdcbiAgICAgIGNvbnN0IGxlZnQgPSB6b2RUb1RzTm9kZSh6b2QuX2RlZi5sZWZ0LCAuLi5vdGhlckFyZ3VtZW50cylcbiAgICAgIGNvbnN0IHJpZ2h0ID0gem9kVG9Uc05vZGUoem9kLl9kZWYucmlnaHQsIC4uLm90aGVyQXJndW1lbnRzKVxuICAgICAgY29uc3Qgbm9kZSA9IGYuY3JlYXRlSW50ZXJzZWN0aW9uVHlwZU5vZGUoW2xlZnQsIHJpZ2h0XSlcbiAgICAgIHJldHVybiBub2RlXG4gICAgfVxuXG4gICAgY2FzZSBcIlpvZFByb21pc2VcIjoge1xuICAgICAgLy8gei5wcm9taXNlKHouc3RyaW5nKCkpIC0+IFByb21pc2U8c3RyaW5nPlxuICAgICAgY29uc3QgdHlwZSA9IHpvZFRvVHNOb2RlKHpvZC5fZGVmLnR5cGUsIC4uLm90aGVyQXJndW1lbnRzKVxuXG4gICAgICBjb25zdCBub2RlID0gZi5jcmVhdGVUeXBlUmVmZXJlbmNlTm9kZShmLmNyZWF0ZUlkZW50aWZpZXIoXCJQcm9taXNlXCIpLCBbXG4gICAgICAgIHR5cGUsXG4gICAgICBdKVxuXG4gICAgICByZXR1cm4gbm9kZVxuICAgIH1cblxuICAgIGNhc2UgXCJab2RGdW5jdGlvblwiOiB7XG4gICAgICAvLyB6LmZ1bmN0aW9uKCkuYXJncyh6LnN0cmluZygpKS5yZXR1cm5zKHoubnVtYmVyKCkpIC0+IChhcmdzXzA6IHN0cmluZykgPT4gbnVtYmVyXG4gICAgICBjb25zdCBhcmd1bWVudFR5cGVzID0gem9kLl9kZWYuYXJncy5fZGVmLml0ZW1zLm1hcChcbiAgICAgICAgKGFyZ3VtZW50OiBab2RUeXBlQW55LCBpbmRleDogbnVtYmVyKSA9PiB7XG4gICAgICAgICAgY29uc3QgYXJndW1lbnRUeXBlID0gem9kVG9Uc05vZGUoYXJndW1lbnQsIC4uLm90aGVyQXJndW1lbnRzKVxuXG4gICAgICAgICAgcmV0dXJuIGYuY3JlYXRlUGFyYW1ldGVyRGVjbGFyYXRpb24oXG4gICAgICAgICAgICB1bmRlZmluZWQsXG4gICAgICAgICAgICB1bmRlZmluZWQsXG4gICAgICAgICAgICBmLmNyZWF0ZUlkZW50aWZpZXIoYGFyZ3NfJHtpbmRleH1gKSxcbiAgICAgICAgICAgIHVuZGVmaW5lZCxcbiAgICAgICAgICAgIGFyZ3VtZW50VHlwZVxuICAgICAgICAgIClcbiAgICAgICAgfVxuICAgICAgKSBhcyB0cy5QYXJhbWV0ZXJEZWNsYXJhdGlvbltdXG5cbiAgICAgIGFyZ3VtZW50VHlwZXMucHVzaChcbiAgICAgICAgZi5jcmVhdGVQYXJhbWV0ZXJEZWNsYXJhdGlvbihcbiAgICAgICAgICB1bmRlZmluZWQsXG4gICAgICAgICAgZi5jcmVhdGVUb2tlbihTeW50YXhLaW5kLkRvdERvdERvdFRva2VuKSxcbiAgICAgICAgICBmLmNyZWF0ZUlkZW50aWZpZXIoYGFyZ3NfJHthcmd1bWVudFR5cGVzLmxlbmd0aH1gKSxcbiAgICAgICAgICB1bmRlZmluZWQsXG4gICAgICAgICAgZi5jcmVhdGVBcnJheVR5cGVOb2RlKGNyZWF0ZVVua25vd25LZXl3b3JkTm9kZSgpKVxuICAgICAgICApXG4gICAgICApXG5cbiAgICAgIGNvbnN0IHJldHVyblR5cGUgPSB6b2RUb1RzTm9kZSh6b2QuX2RlZi5yZXR1cm5zLCAuLi5vdGhlckFyZ3VtZW50cylcblxuICAgICAgY29uc3Qgbm9kZSA9IGYuY3JlYXRlRnVuY3Rpb25UeXBlTm9kZShcbiAgICAgICAgdW5kZWZpbmVkLFxuICAgICAgICBhcmd1bWVudFR5cGVzLFxuICAgICAgICByZXR1cm5UeXBlXG4gICAgICApXG5cbiAgICAgIHJldHVybiBub2RlXG4gICAgfVxuXG4gICAgY2FzZSBcIlpvZERlZmF1bHRcIjoge1xuICAgICAgLy8gei5zdHJpbmcoKS5vcHRpb25hbCgpLmRlZmF1bHQoJ2hpJykgLT4gc3RyaW5nXG4gICAgICBjb25zdCB0eXBlID0gem9kVG9Uc05vZGUoXG4gICAgICAgIHpvZC5fZGVmLmlubmVyVHlwZSxcbiAgICAgICAgLi4ub3RoZXJBcmd1bWVudHNcbiAgICAgICkgYXMgdHMuVHlwZU5vZGVcblxuICAgICAgY29uc3QgZmlsdGVyZWROb2RlczogdHMuTm9kZVtdID0gW11cblxuICAgICAgdHlwZS5mb3JFYWNoQ2hpbGQoKG5vZGUpID0+IHtcbiAgICAgICAgaWYgKCFbU3ludGF4S2luZC5VbmRlZmluZWRLZXl3b3JkXS5pbmNsdWRlcyhub2RlLmtpbmQpKSB7XG4gICAgICAgICAgZmlsdGVyZWROb2Rlcy5wdXNoKG5vZGUpXG4gICAgICAgIH1cbiAgICAgIH0pXG5cbiAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgbmVlZGVkIHRvIHNldCBjaGlsZHJlblxuICAgICAgdHlwZS50eXBlcyA9IGZpbHRlcmVkTm9kZXNcblxuICAgICAgcmV0dXJuIHR5cGVcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZi5jcmVhdGVLZXl3b3JkVHlwZU5vZGUoU3ludGF4S2luZC5BbnlLZXl3b3JkKVxufVxuIiwgImltcG9ydCAqIGFzIGZzIGZyb20gXCJub2RlOmZzL3Byb21pc2VzXCJcbmltcG9ydCBjcnlwdG8gZnJvbSBcIm5vZGU6Y3J5cHRvXCJcbmltcG9ydCBwYXRoIGZyb20gXCJub2RlOnBhdGhcIlxuaW1wb3J0IHsgUHJvamVjdCwgU3ludGF4S2luZCB9IGZyb20gXCJ0cy1tb3JwaFwiXG5pbXBvcnQgKiBhcyBlc2J1aWxkIGZyb20gXCJlc2J1aWxkXCJcbmltcG9ydCB7IGRlZmF1bHRNYXBGaWxlUGF0aFRvSFRUUFJvdXRlIH0gZnJvbSBcIi4vbGliL2RlZmF1bHQtbWFwLWZpbGUtcGF0aC10by1odHRwLXJvdXRlXCJcblxuaW50ZXJmYWNlIEdlbmVyYXRlUm91dGVUeXBlc09wdHMge1xuICBwYWNrYWdlRGlyOiBzdHJpbmdcbiAgYWxsb3dlZEltcG9ydFBhdHRlcm5zPzogc3RyaW5nW11cbiAgb3V0cHV0RmlsZT86IHN0cmluZ1xuICBwYXRoR2xvYj86IHN0cmluZ1xuICBhcGlQcmVmaXg/OiBzdHJpbmdcbiAgbWFwRmlsZVBhdGhUb0hUVFBSb3V0ZT86IChmaWxlX3BhdGg6IHN0cmluZykgPT4gc3RyaW5nXG4gIC8qKlxuICAgKiBJZiBwcm92aWRlZCwgb25seSByb3V0ZXMgdGhhdCByZXR1cm4gdHJ1ZSB3aWxsIGJlIGluY2x1ZGVkIGluIHRoZSBnZW5lcmF0ZWQgdHlwZXMuXG4gICAqL1xuICBmaWx0ZXJSb3V0ZXM/OiAocm91dGU6IHN0cmluZykgPT4gYm9vbGVhblxuICAvKipcbiAgICogQnkgZGVmYXVsdCwgcm91dGVzIHRoYXQgaGF2ZSBgZXhjbHVkZUZyb21PcGVuQXBpYCBzZXQgdG8gdHJ1ZSB3aWxsIGJlIGV4Y2x1ZGVkIGZyb20gdGhlIGdlbmVyYXRlZCB0eXBlcy5cbiAgICogU2V0IHRoaXMgdG8gdHJ1ZSB0byBpbmNsdWRlIHRoZW0uXG4gICAqL1xuICBpbmNsdWRlT3BlbkFwaUV4Y2x1ZGVkUm91dGVzPzogYm9vbGVhblxuICBlc2J1aWxkT3B0aW9ucz86IGVzYnVpbGQuQnVpbGRPcHRpb25zXG59XG5cbmV4cG9ydCBjb25zdCBleHRyYWN0Um91dGVTcGVjcyA9IGFzeW5jIChvcHRzOiBHZW5lcmF0ZVJvdXRlVHlwZXNPcHRzKSA9PiB7XG4gIGNvbnN0IHsgcGFja2FnZURpciwgcGF0aEdsb2IgPSBcIi9wYWdlcy9hcGkvKiovKi50c1wiIH0gPSBvcHRzXG4gIGNvbnN0IGZ1bGxQYXRoR2xvYiA9IHBhdGgucG9zaXguam9pbihwYWNrYWdlRGlyLCBwYXRoR2xvYilcblxuICBjb25zdCBwcm9qZWN0ID0gbmV3IFByb2plY3QoeyBjb21waWxlck9wdGlvbnM6IHsgZGVjbGFyYXRpb246IHRydWUgfSB9KVxuXG4gIGNvbnN0IHBhdGhzOiBzdHJpbmdbXSA9IFtdXG4gIGZvciAoY29uc3Qgc291cmNlRmlsZSBvZiBwcm9qZWN0LmFkZFNvdXJjZUZpbGVzQXRQYXRocyhmdWxsUGF0aEdsb2IpKSB7XG4gICAgY29uc3QgZGVmYXVsdEV4cG9ydCA9IHNvdXJjZUZpbGUuZ2V0RXhwb3J0QXNzaWdubWVudChcbiAgICAgIChkKSA9PiAhZC5pc0V4cG9ydEVxdWFscygpXG4gICAgKVxuICAgIGlmICghZGVmYXVsdEV4cG9ydCkge1xuICAgICAgY29udGludWVcbiAgICB9XG5cbiAgICBjb25zdCBjdXJyaWVkV2l0aFJvdXRlU3BlY0NhbGwgPSBkZWZhdWx0RXhwb3J0XG4gICAgICAuZ2V0RXhwcmVzc2lvbigpXG4gICAgICAuYXNLaW5kKFN5bnRheEtpbmQuQ2FsbEV4cHJlc3Npb24pXG4gICAgaWYgKCFjdXJyaWVkV2l0aFJvdXRlU3BlY0NhbGwpIHtcbiAgICAgIGNvbnRpbnVlXG4gICAgfVxuICAgIGNvbnN0IHdpdGhSb3V0ZVNwZWNDYWxsID0gY3VycmllZFdpdGhSb3V0ZVNwZWNDYWxsXG4gICAgICAuZ2V0RXhwcmVzc2lvbigpXG4gICAgICAuYXNLaW5kKFN5bnRheEtpbmQuQ2FsbEV4cHJlc3Npb24pXG4gICAgaWYgKCF3aXRoUm91dGVTcGVjQ2FsbCkge1xuICAgICAgY29udGludWVcbiAgICB9XG5cbiAgICBjb25zdCBbcm91dGVTcGVjXSA9IHdpdGhSb3V0ZVNwZWNDYWxsLmdldEFyZ3VtZW50cygpXG4gICAgaWYgKCFyb3V0ZVNwZWMpIHtcbiAgICAgIGNvbnRpbnVlXG4gICAgfVxuXG4gICAgc291cmNlRmlsZS5hZGRTdGF0ZW1lbnRzKFxuICAgICAgYGV4cG9ydCBjb25zdCBleHRyYWN0ZWRSb3V0ZVNwZWMgPSAke3JvdXRlU3BlYy5nZXRUZXh0KCl9YFxuICAgIClcblxuICAgIGRlZmF1bHRFeHBvcnQucmVtb3ZlKClcblxuICAgIC8vIFJlbW92ZSBhbGwgdW51c2VkIGltcG9ydHMgc28gZmlsZSBjYW4gYmUgdHJlZSBzaGFrZW5cbiAgICAvLyAoQXNzdW1lcyBhbGwgaW1wb3J0cyBhcmUgZnJlZSBvZiBzaWRlLWVmZmVjdHMpXG4gICAgbGV0IGxhc3RXaWR0aDogbnVtYmVyXG4gICAgZG8ge1xuICAgICAgbGFzdFdpZHRoID0gc291cmNlRmlsZS5nZXRGdWxsV2lkdGgoKVxuICAgICAgLy8gTWF5IG5lZWQgdG8gY2FsbCB0aGlzIG11bHRpcGxlIHRpbWVzXG4gICAgICBzb3VyY2VGaWxlLmZpeFVudXNlZElkZW50aWZpZXJzKClcbiAgICB9IHdoaWxlIChsYXN0V2lkdGggIT09IHNvdXJjZUZpbGUuZ2V0RnVsbFdpZHRoKCkpXG5cbiAgICBjb25zdCBhYnNvbHV0ZVBhY2thZ2VEaXIgPSBwYXRoLnJlc29sdmUocGFja2FnZURpcilcbiAgICBjb25zdCByZWxhdGl2ZVBhdGggPSBwYXRoLnJlbGF0aXZlKFxuICAgICAgYWJzb2x1dGVQYWNrYWdlRGlyLFxuICAgICAgc291cmNlRmlsZS5nZXRGaWxlUGF0aCgpXG4gICAgKVxuICAgIHBhdGhzLnB1c2gocmVsYXRpdmVQYXRoKVxuICB9XG5cbiAgY29uc3QgcGF0aFRvSWQ6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7fVxuICBmb3IgKGNvbnN0IHBhdGggb2YgcGF0aHMpIHtcbiAgICAvLyBhZGQgcHJlZml4IHRvIGF2b2lkIHN0YXJ0aW5nIHdpdGggYSBudW1iZXJcbiAgICBwYXRoVG9JZFtwYXRoXSA9XG4gICAgICBcImhhc2hcIiArIGNyeXB0by5jcmVhdGVIYXNoKFwic2hhMjU2XCIpLnVwZGF0ZShwYXRoKS5kaWdlc3QoXCJoZXhcIilcbiAgfVxuXG4gIGNvbnN0IGVudHJ5UG9pbnRDb250ZW50ID0gYFxuICAke3BhdGhzXG4gICAgLm1hcCgocCkgPT4gYGltcG9ydCB7ZXh0cmFjdGVkUm91dGVTcGVjIGFzICR7cGF0aFRvSWRbcF19fSBmcm9tIFwiLi8ke3B9XCJgKVxuICAgIC5qb2luKFwiXFxuXCIpfVxuXG4gIGV4cG9ydCBjb25zdCByb3V0ZXMgPSB7XG4gICAgJHtwYXRoc1xuICAgICAgLm1hcCgocCkgPT4ge1xuICAgICAgICBjb25zdCBodHRwUm91dGUgPSAoXG4gICAgICAgICAgb3B0cy5tYXBGaWxlUGF0aFRvSFRUUFJvdXRlID8/XG4gICAgICAgICAgZGVmYXVsdE1hcEZpbGVQYXRoVG9IVFRQUm91dGUob3B0cy5hcGlQcmVmaXgpXG4gICAgICAgICkocClcblxuICAgICAgICByZXR1cm4gYFwiJHtodHRwUm91dGV9XCI6ICR7cGF0aFRvSWRbcF19YFxuICAgICAgfSlcbiAgICAgIC5qb2luKFwiLFxcblwiKX1cbiAgfVxuICBgXG5cbiAgLy8gQ29weSBhbGxvd2VkIGltcG9ydCBnbG9icyBpbnRvIHByb2plY3RcbiAgaWYgKG9wdHMuYWxsb3dlZEltcG9ydFBhdHRlcm5zKSB7XG4gICAgcHJvamVjdC5hZGRTb3VyY2VGaWxlc0F0UGF0aHMob3B0cy5hbGxvd2VkSW1wb3J0UGF0dGVybnMpXG4gIH1cblxuICAvLyBHZW5lcmF0ZSB0eXBlcyAoLmQudHMpXG4gIGNvbnN0IGVudHJ5UG9pbnQgPSBwcm9qZWN0LmNyZWF0ZVNvdXJjZUZpbGUoXG4gICAgXCJleHRyYWN0ZWQtcm91dGUtc3BlY3MudHNcIixcbiAgICBlbnRyeVBvaW50Q29udGVudFxuICApXG4gIGNvbnN0IGVtaXRSZXN1bHQgPSBlbnRyeVBvaW50LmdldEVtaXRPdXRwdXQoeyBlbWl0T25seUR0c0ZpbGVzOiB0cnVlIH0pXG4gIGlmIChvcHRzLm91dHB1dEZpbGUpIHtcbiAgICBjb25zdCBkZWNsYXJhdGlvbkZpbGVQYXRoID0gcGF0aC5qb2luKFxuICAgICAgcGF0aC5kaXJuYW1lKG9wdHMub3V0cHV0RmlsZSksXG4gICAgICBwYXRoLmJhc2VuYW1lKG9wdHMub3V0cHV0RmlsZSkucmVwbGFjZShcIi5tanNcIiwgXCJcIikucmVwbGFjZShcIi5qc1wiLCBcIlwiKSArXG4gICAgICAgIFwiLmQudHNcIlxuICAgIClcbiAgICBhd2FpdCBmcy53cml0ZUZpbGUoXG4gICAgICBkZWNsYXJhdGlvbkZpbGVQYXRoLFxuICAgICAgZW1pdFJlc3VsdC5nZXRPdXRwdXRGaWxlcygpWzBdLmdldFRleHQoKVxuICAgIClcbiAgfVxuXG4gIC8vIEdlbmVyYXRlIHZhbHVlcyAoLmpzKVxuICBjb25zdCBwa2dSYXcgPSBhd2FpdCBmcy5yZWFkRmlsZShcbiAgICBwYXRoLmpvaW4ocGFja2FnZURpciwgXCJwYWNrYWdlLmpzb25cIiksXG4gICAgXCJ1dGYtOFwiXG4gIClcbiAgY29uc3QgcGtnID0gSlNPTi5wYXJzZShwa2dSYXcpXG5cbiAgYXdhaXQgZXNidWlsZC5idWlsZCh7XG4gICAgLi4ub3B0cy5lc2J1aWxkT3B0aW9ucyxcbiAgICBzdGRpbjoge1xuICAgICAgY29udGVudHM6IGVudHJ5UG9pbnRDb250ZW50LFxuICAgICAgcmVzb2x2ZURpcjogcGF0aC5yZXNvbHZlKHBhY2thZ2VEaXIpLFxuICAgIH0sXG4gICAgb3V0ZmlsZTogb3B0cy5vdXRwdXRGaWxlLFxuICAgIGJ1bmRsZTogdHJ1ZSxcbiAgICBwbGF0Zm9ybTogXCJub2RlXCIsXG4gICAgZm9ybWF0OiBcImVzbVwiLFxuICAgIHRyZWVTaGFraW5nOiB0cnVlLFxuICAgIGV4dGVybmFsOiBbXG4gICAgICAuLi5PYmplY3Qua2V5cyhwa2cuZGVwZW5kZW5jaWVzKSxcbiAgICAgIC4uLk9iamVjdC5rZXlzKHBrZy5kZXZEZXBlbmRlbmNpZXMpLFxuICAgICAgLi4uKG9wdHMuZXNidWlsZE9wdGlvbnM/LmV4dGVybmFsID8/IFtdKSxcbiAgICBdLFxuICAgIHBsdWdpbnM6IFtcbiAgICAgIC8vIFdpdGggdGhpcyBwbHVnaW4sIGVzYnVpbGQgd2lsbCBuZXZlciB0b3VjaCB0aGUgYWN0dWFsIGZpbGVzeXN0ZW0gYW5kIHRodXMgY2Fubm90IGludGVyYWN0IHdpdGggaW1wb3J0cyB0aGF0IGRvbid0IG1hdGNoIGFsbG93ZWRJbXBvcnRQYXR0ZXJuc1tdLlxuICAgICAge1xuICAgICAgICBuYW1lOiBcInJlc29sdmUtdmlydHVhbC1mc1wiLFxuICAgICAgICBzZXR1cChidWlsZCkge1xuICAgICAgICAgIGJ1aWxkLm9uTG9hZCh7IGZpbHRlcjogLy4qLyB9LCAoYXJncykgPT4ge1xuICAgICAgICAgICAgY29uc3QgY29udGVudHMgPSBwcm9qZWN0LmdldFNvdXJjZUZpbGUoYXJncy5wYXRoKT8uZ2V0RnVsbFRleHQoKVxuICAgICAgICAgICAgaWYgKCFjb250ZW50cykge1xuICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIGNvbnRlbnRzOiBcImV4cG9ydCBkZWZhdWx0IHt9XCIsXG4gICAgICAgICAgICAgICAgbG9hZGVyOiBcInRzXCIsXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgY29udGVudHMsXG4gICAgICAgICAgICAgIGxvYWRlcjogXCJ0c1wiLFxuICAgICAgICAgICAgICByZXNvbHZlRGlyOiBwYXRoLmRpcm5hbWUoYXJncy5wYXRoKSxcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KVxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICAgIC4uLihvcHRzLmVzYnVpbGRPcHRpb25zPy5wbHVnaW5zID8/IFtdKSxcbiAgICBdLFxuICB9KVxufVxuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7OztBQUFBOzs7QUNBQTtBQUFBLE9BQU8sUUFBUTtBQUNmO0FBQUEsRUFDRTtBQUFBLE9BR0s7QUFFUCxTQUFTLEtBQUFBLFVBQVM7OztBQ1BsQjtBQUFBLE9BQU9DLFdBQVU7OztBQ0FqQjtBQUFBLE9BQU8sVUFBVTtBQUVWLElBQU0sZ0NBQ1gsQ0FBQyxhQUFxQixXQUN0QixDQUFDLGNBQXNCO0FBQ3JCLFFBQU0sUUFBUSxVQUVYLFFBQVEsU0FBUyxHQUFHLEVBRXBCLFFBQVEsT0FBTyxFQUFFLEVBRWpCLFFBQVEsVUFBVSxFQUFFLEVBRXBCLFFBQVEsWUFBWSxF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QUEsSUFDZCxRQUFRO0FBQUEsSUFDUixVQUFVO0FBQUEsSUFDVixRQUFRO0FBQUEsSUFDUixhQUFhO0FBQUEsSUFDYixVQUFVO0FBQUEsTUFDUixHQUFHLE9BQU8sS0FBSyxJQUFJLFlBQVk7QUFBQSxNQUMvQixHQUFHLE9BQU8sS0FBSyxJQUFJLGVBQWU7QUFBQSxNQUNsQyxJQUFJLGdCQUFLLG1CQUFMLG1CQUFxQixhQUFyQixZQUFpQyxDQUFDO0FBQUEsSUFDeEM7QUFBQSxJQUNBLFNBQVM7QUFBQSxNQUVQO0FBQUEsUUFDRSxNQUFNO0FBQUEsUUFDTixNQUFNRyxRQUFPO0FBQ1gsVUFBQUEsT0FBTSxPQUFPLEVBQUUsUUFBUSxLQUFLLEdBQUcsQ0FBQyxTQUFTO0FBL0puRCxnQkFBQUQ7QUFnS1ksa0JBQU0sWUFBV0EsTUFBQSxRQUFRLGNBQWMsS0FBSyxJQUFJLE1BQS9CLGdCQUFBQSxJQUFrQztBQUNuRCxnQkFBSSxDQUFDLFVBQVU7QUFDYixxQkFBTztBQUFBLGdCQUNMLFVBQVU7QUFBQSxnQkFDVixRQUFRO0FBQUEsY0FDVjtBQUFBLFlBQ0Y7QUFFQSxtQkFBTztBQUFBLGNBQ0w7QUFBQSxjQUNBLFFBQVE7QUFBQSxjQUNSLFlBQVlGLE1BQUssUUFBUSxLQUFLLElBQUk7QUFBQSxZQUNwQztBQUFBLFVBQ0YsQ0FBQztBQUFBLFFBQ0g7QUFBQSxNQUNGO0FBQUEsTUFDQSxJQUFJLGdCQUFLLG1CQUFMLG1CQUFxQixZQUFyQixZQUFnQyxDQUFDO0FBQUEsSUFDdkM7QUFBQSxFQUNGLENBQUM7QUFDSDsiLAogICJuYW1lcyI6IFsieiIsICJwYXRoIiwgInBhdGgiLCAicGF0aCIsICJkZWRlbnQiLCAicGF0aCIsICJkZWRlbnQiLCAiX2EiLCAieiIsICJmcyIsICJkZWRlbnQiLCAicGFyc2VEZXNjcmlwdGlvbiIsICJvcHRpb25zIiwgInoiLCAiXyIsICJmcyIsICJwYXRoIiwgIlN5bnRheEtpbmQiLCAicGF0aCIsICJTeW50YXhLaW5kIiwgIl9hIiwgImJ1aWxkIl0KfQo=
|