parse-server 9.6.0-alpha.5 → 9.6.0-alpha.51
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/AccountLockout.js +14 -42
- package/lib/Adapters/Auth/index.js +2 -2
- package/lib/Adapters/Auth/mfa.js +13 -3
- package/lib/Adapters/Auth/oauth2.js +2 -2
- package/lib/Adapters/Storage/Mongo/MongoStorageAdapter.js +3 -3
- package/lib/Adapters/Storage/Mongo/MongoTransform.js +27 -27
- package/lib/Adapters/Storage/Postgres/PostgresStorageAdapter.js +30 -14
- package/lib/Auth.js +28 -8
- package/lib/Config.js +16 -9
- package/lib/Controllers/DatabaseController.js +128 -22
- package/lib/Controllers/FilesController.js +2 -2
- package/lib/Controllers/LiveQueryController.js +2 -2
- package/lib/Controllers/ParseGraphQLController.js +3 -2
- package/lib/Controllers/SchemaController.js +3 -7
- package/lib/Controllers/UserController.js +12 -3
- package/lib/Deprecator/Deprecations.js +37 -1
- package/lib/GraphQL/ParseGraphQLServer.js +1 -12
- package/lib/GraphQL/loaders/defaultGraphQLTypes.js +6 -5
- package/lib/GraphQL/loaders/functionsMutations.js +3 -4
- package/lib/GraphQL/loaders/parseClassMutations.js +4 -5
- package/lib/GraphQL/loaders/parseClassQueries.js +3 -4
- package/lib/GraphQL/loaders/schemaMutations.js +4 -5
- package/lib/GraphQL/loaders/schemaQueries.js +2 -3
- package/lib/GraphQL/loaders/usersMutations.js +5 -5
- package/lib/GraphQL/parseGraphQLUtils.js +9 -1
- package/lib/GraphQL/transformers/query.js +2 -2
- package/lib/LiveQuery/ParseLiveQueryServer.js +191 -12
- package/lib/LiveQuery/QueryTools.js +28 -19
- package/lib/Options/Definitions.js +40 -16
- package/lib/Options/docs.js +14 -10
- package/lib/Options/index.js +1 -1
- package/lib/ParseServer.js +9 -4
- package/lib/Push/PushWorker.js +2 -4
- package/lib/Push/utils.js +3 -4
- package/lib/RestQuery.js +46 -7
- package/lib/RestWrite.js +50 -24
- package/lib/Routers/AggregateRouter.js +6 -2
- package/lib/Routers/ClassesRouter.js +6 -2
- package/lib/Routers/FilesRouter.js +4 -3
- package/lib/Routers/PagesRouter.js +44 -20
- package/lib/Routers/UsersRouter.js +23 -7
- package/lib/Security/Check.js +2 -2
- package/lib/Security/CheckGroups/CheckGroupServerConfig.js +20 -2
- package/lib/StatusHandler.js +3 -2
- package/lib/Utils.js +74 -8
- package/lib/batch.js +39 -36
- package/lib/cloud-code/Parse.Cloud.js +2 -2
- package/lib/middlewares.js +36 -11
- package/lib/triggers.js +10 -3
- package/package.json +1 -3
- package/types/Options/index.d.ts +1 -0
package/lib/RestQuery.js
CHANGED
|
@@ -246,6 +246,8 @@ function _UnsafeRestQuery(config, auth, className, restWhere = {}, restOptions =
|
|
|
246
246
|
// TODO: consolidate the replaceX functions
|
|
247
247
|
_UnsafeRestQuery.prototype.execute = function (executeOptions) {
|
|
248
248
|
return Promise.resolve().then(() => {
|
|
249
|
+
return this.validateQueryDepth();
|
|
250
|
+
}).then(() => {
|
|
249
251
|
return this.buildRestWhere();
|
|
250
252
|
}).then(() => {
|
|
251
253
|
return this.denyProtectedFields();
|
|
@@ -300,6 +302,32 @@ _UnsafeRestQuery.prototype.each = function (callback) {
|
|
|
300
302
|
}
|
|
301
303
|
});
|
|
302
304
|
};
|
|
305
|
+
_UnsafeRestQuery.prototype.validateQueryDepth = function () {
|
|
306
|
+
if (this.auth.isMaster || this.auth.isMaintenance) {
|
|
307
|
+
return;
|
|
308
|
+
}
|
|
309
|
+
const rc = this.config.requestComplexity;
|
|
310
|
+
if (!rc || rc.queryDepth === -1) {
|
|
311
|
+
return;
|
|
312
|
+
}
|
|
313
|
+
const maxDepth = rc.queryDepth;
|
|
314
|
+
const checkDepth = (where, depth) => {
|
|
315
|
+
if (depth > maxDepth) {
|
|
316
|
+
throw new Parse.Error(Parse.Error.INVALID_QUERY, `Query condition nesting depth exceeds maximum allowed depth of ${maxDepth}`);
|
|
317
|
+
}
|
|
318
|
+
if (typeof where !== 'object' || where === null) {
|
|
319
|
+
return;
|
|
320
|
+
}
|
|
321
|
+
for (const op of ['$or', '$and', '$nor']) {
|
|
322
|
+
if (Array.isArray(where[op])) {
|
|
323
|
+
for (const subQuery of where[op]) {
|
|
324
|
+
checkDepth(subQuery, depth + 1);
|
|
325
|
+
}
|
|
326
|
+
}
|
|
327
|
+
}
|
|
328
|
+
};
|
|
329
|
+
checkDepth(this.restWhere, 0);
|
|
330
|
+
};
|
|
303
331
|
_UnsafeRestQuery.prototype.buildRestWhere = function () {
|
|
304
332
|
return Promise.resolve().then(() => {
|
|
305
333
|
return this.getUserAndRoleACL();
|
|
@@ -766,9 +794,10 @@ _UnsafeRestQuery.prototype.denyProtectedFields = async function () {
|
|
|
766
794
|
if (typeof where !== 'object' || where === null) {
|
|
767
795
|
return;
|
|
768
796
|
}
|
|
769
|
-
for (const
|
|
770
|
-
|
|
771
|
-
|
|
797
|
+
for (const whereKey of Object.keys(where)) {
|
|
798
|
+
const rootField = whereKey.split('.')[0];
|
|
799
|
+
if (protectedFields.includes(whereKey) || protectedFields.includes(rootField)) {
|
|
800
|
+
throw createSanitizedError(Parse.Error.OPERATION_FORBIDDEN, `This user is not allowed to query ${whereKey} on class ${this.className}`, this.config);
|
|
772
801
|
}
|
|
773
802
|
}
|
|
774
803
|
for (const op of ['$or', '$and', '$nor']) {
|
|
@@ -778,6 +807,16 @@ _UnsafeRestQuery.prototype.denyProtectedFields = async function () {
|
|
|
778
807
|
}
|
|
779
808
|
};
|
|
780
809
|
checkWhere(this.restWhere);
|
|
810
|
+
|
|
811
|
+
// Check sort keys against protected fields
|
|
812
|
+
if (this.findOptions.sort) {
|
|
813
|
+
for (const sortKey of Object.keys(this.findOptions.sort)) {
|
|
814
|
+
const rootField = sortKey.split('.')[0];
|
|
815
|
+
if (protectedFields.includes(sortKey) || protectedFields.includes(rootField)) {
|
|
816
|
+
throw createSanitizedError(Parse.Error.OPERATION_FORBIDDEN, `This user is not allowed to sort by ${sortKey} on class ${this.className}`, this.config);
|
|
817
|
+
}
|
|
818
|
+
}
|
|
819
|
+
}
|
|
781
820
|
};
|
|
782
821
|
|
|
783
822
|
// Augments this.response with all pointers on an object
|
|
@@ -1056,7 +1095,7 @@ function includePath(config, auth, response, path, context, restOptions = {}) {
|
|
|
1056
1095
|
// Path is a list of fields to search into.
|
|
1057
1096
|
// Returns a list of pointers in REST format.
|
|
1058
1097
|
function findPointers(object, path) {
|
|
1059
|
-
if (object
|
|
1098
|
+
if (Array.isArray(object)) {
|
|
1060
1099
|
return object.map(x => findPointers(x, path)).flat();
|
|
1061
1100
|
}
|
|
1062
1101
|
if (typeof object !== 'object' || !object) {
|
|
@@ -1082,7 +1121,7 @@ function findPointers(object, path) {
|
|
|
1082
1121
|
// Returns something analogous to object, but with the appropriate
|
|
1083
1122
|
// pointers inflated.
|
|
1084
1123
|
function replacePointers(object, path, replace) {
|
|
1085
|
-
if (object
|
|
1124
|
+
if (Array.isArray(object)) {
|
|
1086
1125
|
return object.map(obj => replacePointers(obj, path, replace)).filter(obj => typeof obj !== 'undefined');
|
|
1087
1126
|
}
|
|
1088
1127
|
if (typeof object !== 'object' || !object) {
|
|
@@ -1116,7 +1155,7 @@ function findObjectWithKey(root, key) {
|
|
|
1116
1155
|
if (typeof root !== 'object') {
|
|
1117
1156
|
return;
|
|
1118
1157
|
}
|
|
1119
|
-
if (root
|
|
1158
|
+
if (Array.isArray(root)) {
|
|
1120
1159
|
for (var item of root) {
|
|
1121
1160
|
const answer = findObjectWithKey(item, key);
|
|
1122
1161
|
if (answer) {
|
|
@@ -1137,4 +1176,4 @@ function findObjectWithKey(root, key) {
|
|
|
1137
1176
|
module.exports = RestQuery;
|
|
1138
1177
|
// For tests
|
|
1139
1178
|
module.exports._UnsafeRestQuery = _UnsafeRestQuery;
|
|
1140
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJTY2hlbWFDb250cm9sbGVyIiwicmVxdWlyZSIsIlBhcnNlIiwibG9nZ2VyIiwiZGVmYXVsdCIsInRyaWdnZXJzIiwiY29udGludWVXaGlsZSIsIkFsd2F5c1NlbGVjdGVkS2V5cyIsImVuZm9yY2VSb2xlU2VjdXJpdHkiLCJjcmVhdGVTYW5pdGl6ZWRFcnJvciIsIlJlc3RRdWVyeSIsIm1ldGhvZCIsImNvbmZpZyIsImF1dGgiLCJjbGFzc05hbWUiLCJyZXN0V2hlcmUiLCJyZXN0T3B0aW9ucyIsImNsaWVudFNESyIsInJ1bkFmdGVyRmluZCIsInJ1bkJlZm9yZUZpbmQiLCJjb250ZXh0IiwiTWV0aG9kIiwiZmluZCIsImdldCIsImluY2x1ZGVzIiwiRXJyb3IiLCJJTlZBTElEX1FVRVJZIiwiaXNHZXQiLCJyZXN1bHQiLCJtYXliZVJ1blF1ZXJ5VHJpZ2dlciIsIlR5cGVzIiwiYmVmb3JlRmluZCIsIlByb21pc2UiLCJyZXNvbHZlIiwiX1Vuc2FmZVJlc3RRdWVyeSIsIk9iamVjdCIsImZyZWV6ZSIsInJlc3BvbnNlIiwiZmluZE9wdGlvbnMiLCJpc01hc3RlciIsInVzZXIiLCJJTlZBTElEX1NFU1NJT05fVE9LRU4iLCIkYW5kIiwiX190eXBlIiwib2JqZWN0SWQiLCJpZCIsImRvQ291bnQiLCJpbmNsdWRlQWxsIiwiaW5jbHVkZSIsImtleXNGb3JJbmNsdWRlIiwicHJvdG90eXBlIiwiaGFzT3duUHJvcGVydHkiLCJjYWxsIiwia2V5cyIsImV4Y2x1ZGVLZXlzIiwibGVuZ3RoIiwic3BsaXQiLCJmaWx0ZXIiLCJrZXkiLCJtYXAiLCJzbGljZSIsImxhc3RJbmRleE9mIiwiam9pbiIsIm9wdGlvbiIsImNvbmNhdCIsIkFycmF5IiwiZnJvbSIsIlNldCIsImV4Y2x1ZGUiLCJrIiwiaW5kZXhPZiIsImZpZWxkcyIsIm9yZGVyIiwic29ydCIsInJlZHVjZSIsInNvcnRNYXAiLCJmaWVsZCIsInRyaW0iLCJzY29yZSIsIiRtZXRhIiwicGF0aHMiLCJwYXRoU2V0IiwibWVtbyIsInBhdGgiLCJpbmRleCIsInBhcnRzIiwicyIsImEiLCJiIiwicmVkaXJlY3RLZXkiLCJyZWRpcmVjdENsYXNzTmFtZUZvcktleSIsInJlZGlyZWN0Q2xhc3NOYW1lIiwiSU5WQUxJRF9KU09OIiwiZXhlY3V0ZSIsImV4ZWN1dGVPcHRpb25zIiwidGhlbiIsImJ1aWxkUmVzdFdoZXJlIiwiZGVueVByb3RlY3RlZEZpZWxkcyIsImhhbmRsZUluY2x1ZGVBbGwiLCJ2YWxpZGF0ZUluY2x1ZGVDb21wbGV4aXR5IiwiaGFuZGxlRXhjbHVkZUtleXMiLCJydW5GaW5kIiwicnVuQ291bnQiLCJoYW5kbGVJbmNsdWRlIiwicnVuQWZ0ZXJGaW5kVHJpZ2dlciIsImhhbmRsZUF1dGhBZGFwdGVycyIsImVhY2giLCJjYWxsYmFjayIsImxpbWl0IiwiZmluaXNoZWQiLCJxdWVyeSIsInJlc3VsdHMiLCJmb3JFYWNoIiwiYXNzaWduIiwiJGd0IiwiZ2V0VXNlckFuZFJvbGVBQ0wiLCJ2YWxpZGF0ZUNsaWVudENsYXNzQ3JlYXRpb24iLCJjaGVja1N1YnF1ZXJ5RGVwdGgiLCJyZXBsYWNlU2VsZWN0IiwicmVwbGFjZURvbnRTZWxlY3QiLCJyZXBsYWNlSW5RdWVyeSIsInJlcGxhY2VOb3RJblF1ZXJ5IiwicmVwbGFjZUVxdWFsaXR5IiwiYWNsIiwiZ2V0VXNlclJvbGVzIiwicm9sZXMiLCJkYXRhYmFzZSIsIm5ld0NsYXNzTmFtZSIsImFsbG93Q2xpZW50Q2xhc3NDcmVhdGlvbiIsInN5c3RlbUNsYXNzZXMiLCJsb2FkU2NoZW1hIiwic2NoZW1hQ29udHJvbGxlciIsImhhc0NsYXNzIiwiT1BFUkFUSU9OX0ZPUkJJRERFTiIsInRyYW5zZm9ybUluUXVlcnkiLCJpblF1ZXJ5T2JqZWN0IiwidmFsdWVzIiwicHVzaCIsImlzQXJyYXkiLCJpc01haW50ZW5hbmNlIiwicmMiLCJyZXF1ZXN0Q29tcGxleGl0eSIsInN1YnF1ZXJ5RGVwdGgiLCJkZXB0aCIsIl9zdWJxdWVyeURlcHRoIiwibWVzc2FnZSIsIndhcm4iLCJmaW5kT2JqZWN0V2l0aEtleSIsImluUXVlcnlWYWx1ZSIsIndoZXJlIiwiYWRkaXRpb25hbE9wdGlvbnMiLCJzdWJxdWVyeVJlYWRQcmVmZXJlbmNlIiwicmVhZFByZWZlcmVuY2UiLCJjaGlsZENvbnRleHQiLCJzdWJxdWVyeSIsInRyYW5zZm9ybU5vdEluUXVlcnkiLCJub3RJblF1ZXJ5T2JqZWN0Iiwibm90SW5RdWVyeVZhbHVlIiwiZ2V0RGVlcGVzdE9iamVjdEZyb21LZXkiLCJqc29uIiwiaWR4Iiwic3JjIiwic3BsaWNlIiwidHJhbnNmb3JtU2VsZWN0Iiwic2VsZWN0T2JqZWN0Iiwib2JqZWN0cyIsInNlbGVjdFZhbHVlIiwidHJhbnNmb3JtRG9udFNlbGVjdCIsImRvbnRTZWxlY3RPYmplY3QiLCJkb250U2VsZWN0VmFsdWUiLCJjbGVhblJlc3VsdEF1dGhEYXRhIiwicGFzc3dvcmQiLCJhdXRoRGF0YSIsInByb3ZpZGVyIiwicmVwbGFjZUVxdWFsaXR5Q29uc3RyYWludCIsImNvbnN0cmFpbnQiLCJlcXVhbFRvT2JqZWN0IiwiaGFzRGlyZWN0Q29uc3RyYWludCIsImhhc09wZXJhdG9yQ29uc3RyYWludCIsIm9wdGlvbnMiLCJwcm92aWRlcnMiLCJhdXRoRGF0YU1hbmFnZXIiLCJnZXRQcm92aWRlcnMiLCJvcCIsImV4cGxhaW4iLCJmaWxlc0NvbnRyb2xsZXIiLCJleHBhbmRGaWxlc0luT2JqZWN0IiwiciIsImNvdW50Iiwic2tpcCIsImMiLCJwcm90ZWN0ZWRGaWVsZHMiLCJhZGRQcm90ZWN0ZWRGaWVsZHMiLCJjaGVja1doZXJlIiwic3ViUXVlcnkiLCJnZXRPbmVTY2hlbWEiLCJzY2hlbWEiLCJpbmNsdWRlRmllbGRzIiwia2V5RmllbGRzIiwidHlwZSIsImluY2x1ZGVEZXB0aCIsIm1heERlcHRoIiwiTWF0aCIsIm1heCIsImluY2x1ZGVDb3VudCIsImluZGV4ZWRSZXN1bHRzIiwiaW5kZXhlZCIsImkiLCJleGVjdXRpb25UcmVlIiwiY3VycmVudCIsIm5vZGUiLCJjaGlsZHJlbiIsInJlY3Vyc2l2ZUV4ZWN1dGlvblRyZWUiLCJ0cmVlTm9kZSIsInBhdGhSZXNwb25zZSIsImluY2x1ZGVQYXRoIiwibmV3UmVzcG9uc2UiLCJuZXdPYmplY3QiLCJhbGwiLCJoYXNBZnRlckZpbmRIb29rIiwidHJpZ2dlckV4aXN0cyIsImFmdGVyRmluZCIsImFwcGxpY2F0aW9uSWQiLCJwaXBlbGluZSIsImRpc3RpbmN0IiwicGFyc2VRdWVyeSIsIlF1ZXJ5Iiwid2l0aEpTT04iLCJtYXliZVJ1bkFmdGVyRmluZFRyaWdnZXIiLCJvYmplY3QiLCJ0b0pTT04iLCJwb2ludGVycyIsImZpbmRQb2ludGVycyIsInBvaW50ZXJzSGFzaCIsInBvaW50ZXIiLCJhZGQiLCJpbmNsdWRlUmVzdE9wdGlvbnMiLCJrZXlTZXQiLCJzZXQiLCJrZXlQYXRoIiwic2l6ZSIsImV4Y2x1ZGVLZXlTZXQiLCJpbmNsdWRlUmVhZFByZWZlcmVuY2UiLCJxdWVyeVByb21pc2VzIiwib2JqZWN0SWRzIiwiJGluIiwicmVzcG9uc2VzIiwicmVwbGFjZSIsImluY2x1ZGVSZXNwb25zZSIsIm9iaiIsInNlc3Npb25Ub2tlbiIsInJlc3AiLCJyZXBsYWNlUG9pbnRlcnMiLCJ4IiwiZmxhdCIsInN1Ym9iamVjdCIsIm5ld3N1YiIsImFuc3dlciIsInJvb3QiLCJpdGVtIiwic3Via2V5IiwibW9kdWxlIiwiZXhwb3J0cyJdLCJzb3VyY2VzIjpbIi4uL3NyYy9SZXN0UXVlcnkuanMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gQW4gb2JqZWN0IHRoYXQgZW5jYXBzdWxhdGVzIGV2ZXJ5dGhpbmcgd2UgbmVlZCB0byBydW4gYSAnZmluZCdcbi8vIG9wZXJhdGlvbiwgZW5jb2RlZCBpbiB0aGUgUkVTVCBBUEkgZm9ybWF0LlxuXG52YXIgU2NoZW1hQ29udHJvbGxlciA9IHJlcXVpcmUoJy4vQ29udHJvbGxlcnMvU2NoZW1hQ29udHJvbGxlcicpO1xudmFyIFBhcnNlID0gcmVxdWlyZSgncGFyc2Uvbm9kZScpLlBhcnNlO1xudmFyIGxvZ2dlciA9IHJlcXVpcmUoJy4vbG9nZ2VyJykuZGVmYXVsdDtcbmNvbnN0IHRyaWdnZXJzID0gcmVxdWlyZSgnLi90cmlnZ2VycycpO1xuY29uc3QgeyBjb250aW51ZVdoaWxlIH0gPSByZXF1aXJlKCdwYXJzZS9saWIvbm9kZS9wcm9taXNlVXRpbHMnKTtcbmNvbnN0IEFsd2F5c1NlbGVjdGVkS2V5cyA9IFsnb2JqZWN0SWQnLCAnY3JlYXRlZEF0JywgJ3VwZGF0ZWRBdCcsICdBQ0wnXTtcbmNvbnN0IHsgZW5mb3JjZVJvbGVTZWN1cml0eSB9ID0gcmVxdWlyZSgnLi9TaGFyZWRSZXN0Jyk7XG5jb25zdCB7IGNyZWF0ZVNhbml0aXplZEVycm9yIH0gPSByZXF1aXJlKCcuL0Vycm9yJyk7XG5cbi8vIHJlc3RPcHRpb25zIGNhbiBpbmNsdWRlOlxuLy8gICBza2lwXG4vLyAgIGxpbWl0XG4vLyAgIG9yZGVyXG4vLyAgIGNvdW50XG4vLyAgIGluY2x1ZGVcbi8vICAga2V5c1xuLy8gICBleGNsdWRlS2V5c1xuLy8gICByZWRpcmVjdENsYXNzTmFtZUZvcktleVxuLy8gICByZWFkUHJlZmVyZW5jZVxuLy8gICBpbmNsdWRlUmVhZFByZWZlcmVuY2Vcbi8vICAgc3VicXVlcnlSZWFkUHJlZmVyZW5jZVxuLyoqXG4gKiBVc2UgdG8gcGVyZm9ybSBhIHF1ZXJ5IG9uIGEgY2xhc3MuIEl0IHdpbGwgcnVuIHNlY3VyaXR5IGNoZWNrcyBhbmQgdHJpZ2dlcnMuXG4gKiBAcGFyYW0gb3B0aW9uc1xuICogQHBhcmFtIG9wdGlvbnMubWV0aG9kIHtSZXN0UXVlcnkuTWV0aG9kfSBUaGUgdHlwZSBvZiBxdWVyeSB0byBwZXJmb3JtXG4gKiBAcGFyYW0gb3B0aW9ucy5jb25maWcge1BhcnNlU2VydmVyQ29uZmlndXJhdGlvbn0gVGhlIHNlcnZlciBjb25maWd1cmF0aW9uXG4gKiBAcGFyYW0gb3B0aW9ucy5hdXRoIHtBdXRofSBUaGUgYXV0aCBvYmplY3QgZm9yIHRoZSByZXF1ZXN0XG4gKiBAcGFyYW0gb3B0aW9ucy5jbGFzc05hbWUge3N0cmluZ30gVGhlIG5hbWUgb2YgdGhlIGNsYXNzIHRvIHF1ZXJ5XG4gKiBAcGFyYW0gb3B0aW9ucy5yZXN0V2hlcmUge29iamVjdH0gVGhlIHdoZXJlIG9iamVjdCBmb3IgdGhlIHF1ZXJ5XG4gKiBAcGFyYW0gb3B0aW9ucy5yZXN0T3B0aW9ucyB7b2JqZWN0fSBUaGUgb3B0aW9ucyBvYmplY3QgZm9yIHRoZSBxdWVyeVxuICogQHBhcmFtIG9wdGlvbnMuY2xpZW50U0RLIHtzdHJpbmd9IFRoZSBjbGllbnQgU0RLIHRoYXQgaXMgcGVyZm9ybWluZyB0aGUgcXVlcnlcbiAqIEBwYXJhbSBvcHRpb25zLnJ1bkFmdGVyRmluZCB7Ym9vbGVhbn0gV2hldGhlciB0byBydW4gdGhlIGFmdGVyRmluZCB0cmlnZ2VyXG4gKiBAcGFyYW0gb3B0aW9ucy5ydW5CZWZvcmVGaW5kIHtib29sZWFufSBXaGV0aGVyIHRvIHJ1biB0aGUgYmVmb3JlRmluZCB0cmlnZ2VyXG4gKiBAcGFyYW0gb3B0aW9ucy5jb250ZXh0IHtvYmplY3R9IFRoZSBjb250ZXh0IG9iamVjdCBmb3IgdGhlIHF1ZXJ5XG4gKiBAcmV0dXJucyB7UHJvbWlzZTxfVW5zYWZlUmVzdFF1ZXJ5Pn0gQSBwcm9taXNlIHRoYXQgaXMgcmVzb2x2ZWQgd2l0aCB0aGUgX1Vuc2FmZVJlc3RRdWVyeSBvYmplY3RcbiAqL1xuYXN5bmMgZnVuY3Rpb24gUmVzdFF1ZXJ5KHtcbiAgbWV0aG9kLFxuICBjb25maWcsXG4gIGF1dGgsXG4gIGNsYXNzTmFtZSxcbiAgcmVzdFdoZXJlID0ge30sXG4gIHJlc3RPcHRpb25zID0ge30sXG4gIGNsaWVudFNESyxcbiAgcnVuQWZ0ZXJGaW5kID0gdHJ1ZSxcbiAgcnVuQmVmb3JlRmluZCA9IHRydWUsXG4gIGNvbnRleHQsXG59KSB7XG4gIGlmICghW1Jlc3RRdWVyeS5NZXRob2QuZmluZCwgUmVzdFF1ZXJ5Lk1ldGhvZC5nZXRdLmluY2x1ZGVzKG1ldGhvZCkpIHtcbiAgICB0aHJvdyBuZXcgUGFyc2UuRXJyb3IoUGFyc2UuRXJyb3IuSU5WQUxJRF9RVUVSWSwgJ2JhZCBxdWVyeSB0eXBlJyk7XG4gIH1cbiAgY29uc3QgaXNHZXQgPSBtZXRob2QgPT09IFJlc3RRdWVyeS5NZXRob2QuZ2V0O1xuICBlbmZvcmNlUm9sZVNlY3VyaXR5KG1ldGhvZCwgY2xhc3NOYW1lLCBhdXRoLCBjb25maWcpO1xuICBjb25zdCByZXN1bHQgPSBydW5CZWZvcmVGaW5kXG4gICAgPyBhd2FpdCB0cmlnZ2Vycy5tYXliZVJ1blF1ZXJ5VHJpZ2dlcihcbiAgICAgIHRyaWdnZXJzLlR5cGVzLmJlZm9yZUZpbmQsXG4gICAgICBjbGFzc05hbWUsXG4gICAgICByZXN0V2hlcmUsXG4gICAgICByZXN0T3B0aW9ucyxcbiAgICAgIGNvbmZpZyxcbiAgICAgIGF1dGgsXG4gICAgICBjb250ZXh0LFxuICAgICAgaXNHZXRcbiAgICApXG4gICAgOiBQcm9taXNlLnJlc29sdmUoeyByZXN0V2hlcmUsIHJlc3RPcHRpb25zIH0pO1xuXG4gIHJldHVybiBuZXcgX1Vuc2FmZVJlc3RRdWVyeShcbiAgICBjb25maWcsXG4gICAgYXV0aCxcbiAgICBjbGFzc05hbWUsXG4gICAgcmVzdWx0LnJlc3RXaGVyZSB8fCByZXN0V2hlcmUsXG4gICAgcmVzdWx0LnJlc3RPcHRpb25zIHx8IHJlc3RPcHRpb25zLFxuICAgIGNsaWVudFNESyxcbiAgICBydW5BZnRlckZpbmQsXG4gICAgY29udGV4dCxcbiAgICBpc0dldFxuICApO1xufVxuXG5SZXN0UXVlcnkuTWV0aG9kID0gT2JqZWN0LmZyZWV6ZSh7XG4gIGdldDogJ2dldCcsXG4gIGZpbmQ6ICdmaW5kJyxcbn0pO1xuXG4vKipcbiAqIF9VbnNhZmVSZXN0UXVlcnkgaXMgbWVhbnQgZm9yIHNwZWNpZmljIGludGVybmFsIHVzYWdlIG9ubHkuIFdoZW4geW91IG5lZWQgdG8gc2tpcCBzZWN1cml0eSBjaGVja3Mgb3Igc29tZSB0cmlnZ2Vycy5cbiAqIERvbid0IHVzZSBpdCBpZiB5b3UgZG9uJ3Qga25vdyB3aGF0IHlvdSBhcmUgZG9pbmcuXG4gKiBAcGFyYW0gY29uZmlnXG4gKiBAcGFyYW0gYXV0aFxuICogQHBhcmFtIGNsYXNzTmFtZVxuICogQHBhcmFtIHJlc3RXaGVyZVxuICogQHBhcmFtIHJlc3RPcHRpb25zXG4gKiBAcGFyYW0gY2xpZW50U0RLXG4gKiBAcGFyYW0gcnVuQWZ0ZXJGaW5kXG4gKiBAcGFyYW0gY29udGV4dFxuICovXG5mdW5jdGlvbiBfVW5zYWZlUmVzdFF1ZXJ5KFxuICBjb25maWcsXG4gIGF1dGgsXG4gIGNsYXNzTmFtZSxcbiAgcmVzdFdoZXJlID0ge30sXG4gIHJlc3RPcHRpb25zID0ge30sXG4gIGNsaWVudFNESyxcbiAgcnVuQWZ0ZXJGaW5kID0gdHJ1ZSxcbiAgY29udGV4dCxcbiAgaXNHZXRcbikge1xuICB0aGlzLmNvbmZpZyA9IGNvbmZpZztcbiAgdGhpcy5hdXRoID0gYXV0aDtcbiAgdGhpcy5jbGFzc05hbWUgPSBjbGFzc05hbWU7XG4gIHRoaXMucmVzdFdoZXJlID0gcmVzdFdoZXJlO1xuICB0aGlzLnJlc3RPcHRpb25zID0gcmVzdE9wdGlvbnM7XG4gIHRoaXMuY2xpZW50U0RLID0gY2xpZW50U0RLO1xuICB0aGlzLnJ1bkFmdGVyRmluZCA9IHJ1bkFmdGVyRmluZDtcbiAgdGhpcy5yZXNwb25zZSA9IG51bGw7XG4gIHRoaXMuZmluZE9wdGlvbnMgPSB7fTtcbiAgdGhpcy5jb250ZXh0ID0gY29udGV4dCB8fCB7fTtcbiAgdGhpcy5pc0dldCA9IGlzR2V0O1xuICBpZiAoIXRoaXMuYXV0aC5pc01hc3Rlcikge1xuICAgIGlmICh0aGlzLmNsYXNzTmFtZSA9PSAnX1Nlc3Npb24nKSB7XG4gICAgICBpZiAoIXRoaXMuYXV0aC51c2VyKSB7XG4gICAgICAgIHRocm93IGNyZWF0ZVNhbml0aXplZEVycm9yKFBhcnNlLkVycm9yLklOVkFMSURfU0VTU0lPTl9UT0tFTiwgJ0ludmFsaWQgc2Vzc2lvbiB0b2tlbicsIGNvbmZpZyk7XG4gICAgICB9XG4gICAgICB0aGlzLnJlc3RXaGVyZSA9IHtcbiAgICAgICAgJGFuZDogW1xuICAgICAgICAgIHRoaXMucmVzdFdoZXJlLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHVzZXI6IHtcbiAgICAgICAgICAgICAgX190eXBlOiAnUG9pbnRlcicsXG4gICAgICAgICAgICAgIGNsYXNzTmFtZTogJ19Vc2VyJyxcbiAgICAgICAgICAgICAgb2JqZWN0SWQ6IHRoaXMuYXV0aC51c2VyLmlkLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9LFxuICAgICAgICBdLFxuICAgICAgfTtcbiAgICB9XG4gIH1cblxuICB0aGlzLmRvQ291bnQgPSBmYWxzZTtcbiAgdGhpcy5pbmNsdWRlQWxsID0gZmFsc2U7XG5cbiAgLy8gVGhlIGZvcm1hdCBmb3IgdGhpcy5pbmNsdWRlIGlzIG5vdCB0aGUgc2FtZSBhcyB0aGUgZm9ybWF0IGZvciB0aGVcbiAgLy8gaW5jbHVkZSBvcHRpb24gLSBpdCdzIHRoZSBwYXRocyB3ZSBzaG91bGQgaW5jbHVkZSwgaW4gb3JkZXIsXG4gIC8vIHN0b3JlZCBhcyBhcnJheXMsIHRha2luZyBpbnRvIGFjY291bnQgdGhhdCB3ZSBuZWVkIHRvIGluY2x1ZGUgZm9vXG4gIC8vIGJlZm9yZSBpbmNsdWRpbmcgZm9vLmJhci4gQWxzbyBpdCBzaG91bGQgZGVkdXBlLlxuICAvLyBGb3IgZXhhbXBsZSwgcGFzc2luZyBhbiBhcmcgb2YgaW5jbHVkZT1mb28uYmFyLGZvby5iYXogY291bGQgbGVhZCB0b1xuICAvLyB0aGlzLmluY2x1ZGUgPSBbWydmb28nXSwgWydmb28nLCAnYmF6J10sIFsnZm9vJywgJ2JhciddXVxuICB0aGlzLmluY2x1ZGUgPSBbXTtcbiAgbGV0IGtleXNGb3JJbmNsdWRlID0gJyc7XG5cbiAgLy8gSWYgd2UgaGF2ZSBrZXlzLCB3ZSBwcm9iYWJseSB3YW50IHRvIGZvcmNlIHNvbWUgaW5jbHVkZXMgKG4tMSBsZXZlbClcbiAgLy8gU2VlIGlzc3VlOiBodHRwczovL2dpdGh1Yi5jb20vcGFyc2UtY29tbXVuaXR5L3BhcnNlLXNlcnZlci9pc3N1ZXMvMzE4NVxuICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHJlc3RPcHRpb25zLCAna2V5cycpKSB7XG4gICAga2V5c0ZvckluY2x1ZGUgPSByZXN0T3B0aW9ucy5rZXlzO1xuICB9XG5cbiAgLy8gSWYgd2UgaGF2ZSBrZXlzLCB3ZSBwcm9iYWJseSB3YW50IHRvIGZvcmNlIHNvbWUgaW5jbHVkZXMgKG4tMSBsZXZlbClcbiAgLy8gaW4gb3JkZXIgdG8gZXhjbHVkZSBzcGVjaWZpYyBrZXlzLlxuICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHJlc3RPcHRpb25zLCAnZXhjbHVkZUtleXMnKSkge1xuICAgIGtleXNGb3JJbmNsdWRlICs9ICcsJyArIHJlc3RPcHRpb25zLmV4Y2x1ZGVLZXlzO1xuICB9XG5cbiAgaWYgKGtleXNGb3JJbmNsdWRlLmxlbmd0aCA+IDApIHtcbiAgICBrZXlzRm9ySW5jbHVkZSA9IGtleXNGb3JJbmNsdWRlXG4gICAgICAuc3BsaXQoJywnKVxuICAgICAgLmZpbHRlcihrZXkgPT4ge1xuICAgICAgICAvLyBBdCBsZWFzdCAyIGNvbXBvbmVudHNcbiAgICAgICAgcmV0dXJuIGtleS5zcGxpdCgnLicpLmxlbmd0aCA+IDE7XG4gICAgICB9KVxuICAgICAgLm1hcChrZXkgPT4ge1xuICAgICAgICAvLyBTbGljZSB0aGUgbGFzdCBjb21wb25lbnQgKGEuYi5jIC0+IGEuYilcbiAgICAgICAgLy8gT3RoZXJ3aXNlIHdlJ2xsIGluY2x1ZGUgb25lIGxldmVsIHRvbyBtdWNoLlxuICAgICAgICByZXR1cm4ga2V5LnNsaWNlKDAsIGtleS5sYXN0SW5kZXhPZignLicpKTtcbiAgICAgIH0pXG4gICAgICAuam9pbignLCcpO1xuXG4gICAgLy8gQ29uY2F0IHRoZSBwb3NzaWJseSBwcmVzZW50IGluY2x1ZGUgc3RyaW5nIHdpdGggdGhlIG9uZSBmcm9tIHRoZSBrZXlzXG4gICAgLy8gRGVkdXAgLyBzb3J0aW5nIGlzIGhhbmRsZSBpbiAnaW5jbHVkZScgY2FzZS5cbiAgICBpZiAoa2V5c0ZvckluY2x1ZGUubGVuZ3RoID4gMCkge1xuICAgICAgaWYgKCFyZXN0T3B0aW9ucy5pbmNsdWRlIHx8IHJlc3RPcHRpb25zLmluY2x1ZGUubGVuZ3RoID09IDApIHtcbiAgICAgICAgcmVzdE9wdGlvbnMuaW5jbHVkZSA9IGtleXNGb3JJbmNsdWRlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmVzdE9wdGlvbnMuaW5jbHVkZSArPSAnLCcgKyBrZXlzRm9ySW5jbHVkZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBmb3IgKHZhciBvcHRpb24gaW4gcmVzdE9wdGlvbnMpIHtcbiAgICBzd2l0Y2ggKG9wdGlvbikge1xuICAgICAgY2FzZSAna2V5cyc6IHtcbiAgICAgICAgY29uc3Qga2V5cyA9IHJlc3RPcHRpb25zLmtleXNcbiAgICAgICAgICAuc3BsaXQoJywnKVxuICAgICAgICAgIC5maWx0ZXIoa2V5ID0+IGtleS5sZW5ndGggPiAwKVxuICAgICAgICAgIC5jb25jYXQoQWx3YXlzU2VsZWN0ZWRLZXlzKTtcbiAgICAgICAgdGhpcy5rZXlzID0gQXJyYXkuZnJvbShuZXcgU2V0KGtleXMpKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBjYXNlICdleGNsdWRlS2V5cyc6IHtcbiAgICAgICAgY29uc3QgZXhjbHVkZSA9IHJlc3RPcHRpb25zLmV4Y2x1ZGVLZXlzXG4gICAgICAgICAgLnNwbGl0KCcsJylcbiAgICAgICAgICAuZmlsdGVyKGsgPT4gQWx3YXlzU2VsZWN0ZWRLZXlzLmluZGV4T2YoaykgPCAwKTtcbiAgICAgICAgdGhpcy5leGNsdWRlS2V5cyA9IEFycmF5LmZyb20obmV3IFNldChleGNsdWRlKSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgY2FzZSAnY291bnQnOlxuICAgICAgICB0aGlzLmRvQ291bnQgPSB0cnVlO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ2luY2x1ZGVBbGwnOlxuICAgICAgICB0aGlzLmluY2x1ZGVBbGwgPSB0cnVlO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ2V4cGxhaW4nOlxuICAgICAgY2FzZSAnaGludCc6XG4gICAgICBjYXNlICdkaXN0aW5jdCc6XG4gICAgICBjYXNlICdwaXBlbGluZSc6XG4gICAgICBjYXNlICdza2lwJzpcbiAgICAgIGNhc2UgJ2xpbWl0JzpcbiAgICAgIGNhc2UgJ3JlYWRQcmVmZXJlbmNlJzpcbiAgICAgIGNhc2UgJ2NvbW1lbnQnOlxuICAgICAgICB0aGlzLmZpbmRPcHRpb25zW29wdGlvbl0gPSByZXN0T3B0aW9uc1tvcHRpb25dO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ29yZGVyJzpcbiAgICAgICAgdmFyIGZpZWxkcyA9IHJlc3RPcHRpb25zLm9yZGVyLnNwbGl0KCcsJyk7XG4gICAgICAgIHRoaXMuZmluZE9wdGlvbnMuc29ydCA9IGZpZWxkcy5yZWR1Y2UoKHNvcnRNYXAsIGZpZWxkKSA9PiB7XG4gICAgICAgICAgZmllbGQgPSBmaWVsZC50cmltKCk7XG4gICAgICAgICAgaWYgKGZpZWxkID09PSAnJHNjb3JlJyB8fCBmaWVsZCA9PT0gJy0kc2NvcmUnKSB7XG4gICAgICAgICAgICBzb3J0TWFwLnNjb3JlID0geyAkbWV0YTogJ3RleHRTY29yZScgfTtcbiAgICAgICAgICB9IGVsc2UgaWYgKGZpZWxkWzBdID09ICctJykge1xuICAgICAgICAgICAgc29ydE1hcFtmaWVsZC5zbGljZSgxKV0gPSAtMTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgc29ydE1hcFtmaWVsZF0gPSAxO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gc29ydE1hcDtcbiAgICAgICAgfSwge30pO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ2luY2x1ZGUnOiB7XG4gICAgICAgIGNvbnN0IHBhdGhzID0gcmVzdE9wdGlvbnMuaW5jbHVkZS5zcGxpdCgnLCcpO1xuICAgICAgICBpZiAocGF0aHMuaW5jbHVkZXMoJyonKSkge1xuICAgICAgICAgIHRoaXMuaW5jbHVkZUFsbCA9IHRydWU7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgLy8gTG9hZCB0aGUgZXhpc3RpbmcgaW5jbHVkZXMgKGZyb20ga2V5cylcbiAgICAgICAgY29uc3QgcGF0aFNldCA9IHBhdGhzLnJlZHVjZSgobWVtbywgcGF0aCkgPT4ge1xuICAgICAgICAgIC8vIFNwbGl0IGVhY2ggcGF0aHMgb24gLiAoYS5iLmMgLT4gW2EsYixjXSlcbiAgICAgICAgICAvLyByZWR1Y2UgdG8gY3JlYXRlIGFsbCBwYXRoc1xuICAgICAgICAgIC8vIChbYSxiLGNdIC0+IHthOiB0cnVlLCAnYS5iJzogdHJ1ZSwgJ2EuYi5jJzogdHJ1ZX0pXG4gICAgICAgICAgcmV0dXJuIHBhdGguc3BsaXQoJy4nKS5yZWR1Y2UoKG1lbW8sIHBhdGgsIGluZGV4LCBwYXJ0cykgPT4ge1xuICAgICAgICAgICAgbWVtb1twYXJ0cy5zbGljZSgwLCBpbmRleCArIDEpLmpvaW4oJy4nKV0gPSB0cnVlO1xuICAgICAgICAgICAgcmV0dXJuIG1lbW87XG4gICAgICAgICAgfSwgbWVtbyk7XG4gICAgICAgIH0sIHt9KTtcblxuICAgICAgICB0aGlzLmluY2x1ZGUgPSBPYmplY3Qua2V5cyhwYXRoU2V0KVxuICAgICAgICAgIC5tYXAocyA9PiB7XG4gICAgICAgICAgICByZXR1cm4gcy5zcGxpdCgnLicpO1xuICAgICAgICAgIH0pXG4gICAgICAgICAgLnNvcnQoKGEsIGIpID0+IHtcbiAgICAgICAgICAgIHJldHVybiBhLmxlbmd0aCAtIGIubGVuZ3RoOyAvLyBTb3J0IGJ5IG51bWJlciBvZiBjb21wb25lbnRzXG4gICAgICAgICAgfSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgY2FzZSAncmVkaXJlY3RDbGFzc05hbWVGb3JLZXknOlxuICAgICAgICB0aGlzLnJlZGlyZWN0S2V5ID0gcmVzdE9wdGlvbnMucmVkaXJlY3RDbGFzc05hbWVGb3JLZXk7XG4gICAgICAgIHRoaXMucmVkaXJlY3RDbGFzc05hbWUgPSBudWxsO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ2luY2x1ZGVSZWFkUHJlZmVyZW5jZSc6XG4gICAgICBjYXNlICdzdWJxdWVyeVJlYWRQcmVmZXJlbmNlJzpcbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICB0aHJvdyBuZXcgUGFyc2UuRXJyb3IoUGFyc2UuRXJyb3IuSU5WQUxJRF9KU09OLCAnYmFkIG9wdGlvbjogJyArIG9wdGlvbik7XG4gICAgfVxuICB9XG59XG5cbi8vIEEgY29udmVuaWVudCBtZXRob2QgdG8gcGVyZm9ybSBhbGwgdGhlIHN0ZXBzIG9mIHByb2Nlc3NpbmcgYSBxdWVyeVxuLy8gaW4gb3JkZXIuXG4vLyBSZXR1cm5zIGEgcHJvbWlzZSBmb3IgdGhlIHJlc3BvbnNlIC0gYW4gb2JqZWN0IHdpdGggb3B0aW9uYWwga2V5c1xuLy8gJ3Jlc3VsdHMnIGFuZCAnY291bnQnLlxuLy8gVE9ETzogY29uc29saWRhdGUgdGhlIHJlcGxhY2VYIGZ1bmN0aW9uc1xuX1Vuc2FmZVJlc3RRdWVyeS5wcm90b3R5cGUuZXhlY3V0ZSA9IGZ1bmN0aW9uIChleGVjdXRlT3B0aW9ucykge1xuICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKClcbiAgICAudGhlbigoKSA9PiB7XG4gICAgICByZXR1cm4gdGhpcy5idWlsZFJlc3RXaGVyZSgpO1xuICAgIH0pXG4gICAgLnRoZW4oKCkgPT4ge1xuICAgICAgcmV0dXJuIHRoaXMuZGVueVByb3RlY3RlZEZpZWxkcygpO1xuICAgIH0pXG4gICAgLnRoZW4oKCkgPT4ge1xuICAgICAgcmV0dXJuIHRoaXMuaGFuZGxlSW5jbHVkZUFsbCgpO1xuICAgIH0pXG4gICAgLnRoZW4oKCkgPT4ge1xuICAgICAgcmV0dXJuIHRoaXMudmFsaWRhdGVJbmNsdWRlQ29tcGxleGl0eSgpO1xuICAgIH0pXG4gICAgLnRoZW4oKCkgPT4ge1xuICAgICAgcmV0dXJuIHRoaXMuaGFuZGxlRXhjbHVkZUtleXMoKTtcbiAgICB9KVxuICAgIC50aGVuKCgpID0+IHtcbiAgICAgIHJldHVybiB0aGlzLnJ1bkZpbmQoZXhlY3V0ZU9wdGlvbnMpO1xuICAgIH0pXG4gICAgLnRoZW4oKCkgPT4ge1xuICAgICAgcmV0dXJuIHRoaXMucnVuQ291bnQoKTtcbiAgICB9KVxuICAgIC50aGVuKCgpID0+IHtcbiAgICAgIHJldHVybiB0aGlzLmhhbmRsZUluY2x1ZGUoKTtcbiAgICB9KVxuICAgIC50aGVuKCgpID0+IHtcbiAgICAgIHJldHVybiB0aGlzLnJ1bkFmdGVyRmluZFRyaWdnZXIoKTtcbiAgICB9KVxuICAgIC50aGVuKCgpID0+IHtcbiAgICAgIHJldHVybiB0aGlzLmhhbmRsZUF1dGhBZGFwdGVycygpO1xuICAgIH0pXG4gICAgLnRoZW4oKCkgPT4ge1xuICAgICAgcmV0dXJuIHRoaXMucmVzcG9uc2U7XG4gICAgfSk7XG59O1xuXG5fVW5zYWZlUmVzdFF1ZXJ5LnByb3RvdHlwZS5lYWNoID0gZnVuY3Rpb24gKGNhbGxiYWNrKSB7XG4gIGNvbnN0IHsgY29uZmlnLCBhdXRoLCBjbGFzc05hbWUsIHJlc3RXaGVyZSwgcmVzdE9wdGlvbnMsIGNsaWVudFNESyB9ID0gdGhpcztcbiAgLy8gaWYgdGhlIGxpbWl0IGlzIHNldCwgdXNlIGl0XG4gIHJlc3RPcHRpb25zLmxpbWl0ID0gcmVzdE9wdGlvbnMubGltaXQgfHwgMTAwO1xuICByZXN0T3B0aW9ucy5vcmRlciA9ICdvYmplY3RJZCc7XG4gIGxldCBmaW5pc2hlZCA9IGZhbHNlO1xuXG4gIHJldHVybiBjb250aW51ZVdoaWxlKFxuICAgICgpID0+IHtcbiAgICAgIHJldHVybiAhZmluaXNoZWQ7XG4gICAgfSxcbiAgICBhc3luYyAoKSA9PiB7XG4gICAgICAvLyBTYWZlIGhlcmUgdG8gdXNlIF9VbnNhZmVSZXN0UXVlcnkgYmVjYXVzZSB0aGUgc2VjdXJpdHkgd2FzIGFscmVhZHlcbiAgICAgIC8vIGNoZWNrZWQgZHVyaW5nIFwiYXdhaXQgUmVzdFF1ZXJ5KClcIlxuICAgICAgY29uc3QgcXVlcnkgPSBuZXcgX1Vuc2FmZVJlc3RRdWVyeShcbiAgICAgICAgY29uZmlnLFxuICAgICAgICBhdXRoLFxuICAgICAgICBjbGFzc05hbWUsXG4gICAgICAgIHJlc3RXaGVyZSxcbiAgICAgICAgcmVzdE9wdGlvbnMsXG4gICAgICAgIGNsaWVudFNESyxcbiAgICAgICAgdGhpcy5ydW5BZnRlckZpbmQsXG4gICAgICAgIHRoaXMuY29udGV4dFxuICAgICAgKTtcbiAgICAgIGNvbnN0IHsgcmVzdWx0cyB9ID0gYXdhaXQgcXVlcnkuZXhlY3V0ZSgpO1xuICAgICAgcmVzdWx0cy5mb3JFYWNoKGNhbGxiYWNrKTtcbiAgICAgIGZpbmlzaGVkID0gcmVzdWx0cy5sZW5ndGggPCByZXN0T3B0aW9ucy5saW1pdDtcbiAgICAgIGlmICghZmluaXNoZWQpIHtcbiAgICAgICAgcmVzdFdoZXJlLm9iamVjdElkID0gT2JqZWN0LmFzc2lnbih7fSwgcmVzdFdoZXJlLm9iamVjdElkLCB7XG4gICAgICAgICAgJGd0OiByZXN1bHRzW3Jlc3VsdHMubGVuZ3RoIC0gMV0ub2JqZWN0SWQsXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgKTtcbn07XG5cbl9VbnNhZmVSZXN0UXVlcnkucHJvdG90eXBlLmJ1aWxkUmVzdFdoZXJlID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKClcbiAgICAudGhlbigoKSA9PiB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRVc2VyQW5kUm9sZUFDTCgpO1xuICAgIH0pXG4gICAgLnRoZW4oKCkgPT4ge1xuICAgICAgcmV0dXJuIHRoaXMucmVkaXJlY3RDbGFzc05hbWVGb3JLZXkoKTtcbiAgICB9KVxuICAgIC50aGVuKCgpID0+IHtcbiAgICAgIHJldHVybiB0aGlzLnZhbGlkYXRlQ2xpZW50Q2xhc3NDcmVhdGlvbigpO1xuICAgIH0pXG4gICAgLnRoZW4oKCkgPT4ge1xuICAgICAgcmV0dXJuIHRoaXMuY2hlY2tTdWJxdWVyeURlcHRoKCk7XG4gICAgfSlcbiAgICAudGhlbigoKSA9PiB7XG4gICAgICByZXR1cm4gdGhpcy5yZXBsYWNlU2VsZWN0KCk7XG4gICAgfSlcbiAgICAudGhlbigoKSA9PiB7XG4gICAgICByZXR1cm4gdGhpcy5yZXBsYWNlRG9udFNlbGVjdCgpO1xuICAgIH0pXG4gICAgLnRoZW4oKCkgPT4ge1xuICAgICAgcmV0dXJuIHRoaXMucmVwbGFjZUluUXVlcnkoKTtcbiAgICB9KVxuICAgIC50aGVuKCgpID0+IHtcbiAgICAgIHJldHVybiB0aGlzLnJlcGxhY2VOb3RJblF1ZXJ5KCk7XG4gICAgfSlcbiAgICAudGhlbigoKSA9PiB7XG4gICAgICByZXR1cm4gdGhpcy5yZXBsYWNlRXF1YWxpdHkoKTtcbiAgICB9KTtcbn07XG5cbi8vIFVzZXMgdGhlIEF1dGggb2JqZWN0IHRvIGdldCB0aGUgbGlzdCBvZiByb2xlcywgYWRkcyB0aGUgdXNlciBpZFxuX1Vuc2FmZVJlc3RRdWVyeS5wcm90b3R5cGUuZ2V0VXNlckFuZFJvbGVBQ0wgPSBmdW5jdGlvbiAoKSB7XG4gIGlmICh0aGlzLmF1dGguaXNNYXN0ZXIpIHtcbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG4gIH1cblxuICB0aGlzLmZpbmRPcHRpb25zLmFjbCA9IFsnKiddO1xuXG4gIGlmICh0aGlzLmF1dGgudXNlcikge1xuICAgIHJldHVybiB0aGlzLmF1dGguZ2V0VXNlclJvbGVzKCkudGhlbihyb2xlcyA9PiB7XG4gICAgICB0aGlzLmZpbmRPcHRpb25zLmFjbCA9IHRoaXMuZmluZE9wdGlvbnMuYWNsLmNvbmNhdChyb2xlcywgW3RoaXMuYXV0aC51c2VyLmlkXSk7XG4gICAgICByZXR1cm47XG4gICAgfSk7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuICB9XG59O1xuXG4vLyBDaGFuZ2VzIHRoZSBjbGFzc05hbWUgaWYgcmVkaXJlY3RDbGFzc05hbWVGb3JLZXkgaXMgc2V0LlxuLy8gUmV0dXJucyBhIHByb21pc2UuXG5fVW5zYWZlUmVzdFF1ZXJ5LnByb3RvdHlwZS5yZWRpcmVjdENsYXNzTmFtZUZvcktleSA9IGZ1bmN0aW9uICgpIHtcbiAgaWYgKCF0aGlzLnJlZGlyZWN0S2V5KSB7XG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuICB9XG5cbiAgLy8gV2UgbmVlZCB0byBjaGFuZ2UgdGhlIGNsYXNzIG5hbWUgYmFzZWQgb24gdGhlIHNjaGVtYVxuICByZXR1cm4gdGhpcy5jb25maWcuZGF0YWJhc2VcbiAgICAucmVkaXJlY3RDbGFzc05hbWVGb3JLZXkodGhpcy5jbGFzc05hbWUsIHRoaXMucmVkaXJlY3RLZXkpXG4gICAgLnRoZW4obmV3Q2xhc3NOYW1lID0+IHtcbiAgICAgIHRoaXMuY2xhc3NOYW1lID0gbmV3Q2xhc3NOYW1lO1xuICAgICAgdGhpcy5yZWRpcmVjdENsYXNzTmFtZSA9IG5ld0NsYXNzTmFtZTtcblxuICAgICAgLy8gUmUtYXBwbHkgc2VjdXJpdHkgY2hlY2tzIGZvciB0aGUgcmVkaXJlY3RlZCBjbGFzcyBuYW1lLCBzaW5jZSB0aGVcbiAgICAgIC8vIGNoZWNrcyBpbiB0aGUgY29uc3RydWN0b3IgYW5kIGluIHJlc3QuZmluZCByYW4gYWdhaW5zdCB0aGUgb3JpZ2luYWxcbiAgICAgIC8vIGNsYXNzIG5hbWUgYmVmb3JlIHRoZSByZWRpcmVjdC5cbiAgICAgIGlmICghdGhpcy5hdXRoLmlzTWFzdGVyKSB7XG4gICAgICAgIGVuZm9yY2VSb2xlU2VjdXJpdHkoJ2ZpbmQnLCB0aGlzLmNsYXNzTmFtZSwgdGhpcy5hdXRoLCB0aGlzLmNvbmZpZyk7XG5cbiAgICAgICAgaWYgKHRoaXMuY2xhc3NOYW1lID09PSAnX1Nlc3Npb24nKSB7XG4gICAgICAgICAgaWYgKCF0aGlzLmF1dGgudXNlcikge1xuICAgICAgICAgICAgdGhyb3cgY3JlYXRlU2FuaXRpemVkRXJyb3IoXG4gICAgICAgICAgICAgIFBhcnNlLkVycm9yLklOVkFMSURfU0VTU0lPTl9UT0tFTixcbiAgICAgICAgICAgICAgJ0ludmFsaWQgc2Vzc2lvbiB0b2tlbicsXG4gICAgICAgICAgICAgIHRoaXMuY29uZmlnXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLnJlc3RXaGVyZSA9IHtcbiAgICAgICAgICAgICRhbmQ6IFtcbiAgICAgICAgICAgICAgdGhpcy5yZXN0V2hlcmUsXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB1c2VyOiB7XG4gICAgICAgICAgICAgICAgICBfX3R5cGU6ICdQb2ludGVyJyxcbiAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZTogJ19Vc2VyJyxcbiAgICAgICAgICAgICAgICAgIG9iamVjdElkOiB0aGlzLmF1dGgudXNlci5pZCxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG59O1xuXG4vLyBWYWxpZGF0ZXMgdGhpcyBvcGVyYXRpb24gYWdhaW5zdCB0aGUgYWxsb3dDbGllbnRDbGFzc0NyZWF0aW9uIGNvbmZpZy5cbl9VbnNhZmVSZXN0UXVlcnkucHJvdG90eXBlLnZhbGlkYXRlQ2xpZW50Q2xhc3NDcmVhdGlvbiA9IGZ1bmN0aW9uICgpIHtcbiAgaWYgKFxuICAgIHRoaXMuY29uZmlnLmFsbG93Q2xpZW50Q2xhc3NDcmVhdGlvbiA9PT0gZmFsc2UgJiZcbiAgICAhdGhpcy5hdXRoLmlzTWFzdGVyICYmXG4gICAgU2NoZW1hQ29udHJvbGxlci5zeXN0ZW1DbGFzc2VzLmluZGV4T2YodGhpcy5jbGFzc05hbWUpID09PSAtMVxuICApIHtcbiAgICByZXR1cm4gdGhpcy5jb25maWcuZGF0YWJhc2VcbiAgICAgIC5sb2FkU2NoZW1hKClcbiAgICAgIC50aGVuKHNjaGVtYUNvbnRyb2xsZXIgPT4gc2NoZW1hQ29udHJvbGxlci5oYXNDbGFzcyh0aGlzLmNsYXNzTmFtZSkpXG4gICAgICAudGhlbihoYXNDbGFzcyA9PiB7XG4gICAgICAgIGlmIChoYXNDbGFzcyAhPT0gdHJ1ZSkge1xuICAgICAgICAgIHRocm93IGNyZWF0ZVNhbml0aXplZEVycm9yKFxuICAgICAgICAgICAgUGFyc2UuRXJyb3IuT1BFUkFUSU9OX0ZPUkJJRERFTixcbiAgICAgICAgICAgICdUaGlzIHVzZXIgaXMgbm90IGFsbG93ZWQgdG8gYWNjZXNzICcgKyAnbm9uLWV4aXN0ZW50IGNsYXNzOiAnICsgdGhpcy5jbGFzc05hbWUsXG4gICAgICAgICAgICB0aGlzLmNvbmZpZ1xuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcbiAgfVxufTtcblxuZnVuY3Rpb24gdHJhbnNmb3JtSW5RdWVyeShpblF1ZXJ5T2JqZWN0LCBjbGFzc05hbWUsIHJlc3VsdHMpIHtcbiAgdmFyIHZhbHVlcyA9IFtdO1xuICBmb3IgKHZhciByZXN1bHQgb2YgcmVzdWx0cykge1xuICAgIHZhbHVlcy5wdXNoKHtcbiAgICAgIF9fdHlwZTogJ1BvaW50ZXInLFxuICAgICAgY2xhc3NOYW1lOiBjbGFzc05hbWUsXG4gICAgICBvYmplY3RJZDogcmVzdWx0Lm9iamVjdElkLFxuICAgIH0pO1xuICB9XG4gIGRlbGV0ZSBpblF1ZXJ5T2JqZWN0WyckaW5RdWVyeSddO1xuICBpZiAoQXJyYXkuaXNBcnJheShpblF1ZXJ5T2JqZWN0WyckaW4nXSkpIHtcbiAgICBpblF1ZXJ5T2JqZWN0WyckaW4nXSA9IGluUXVlcnlPYmplY3RbJyRpbiddLmNvbmNhdCh2YWx1ZXMpO1xuICB9IGVsc2Uge1xuICAgIGluUXVlcnlPYmplY3RbJyRpbiddID0gdmFsdWVzO1xuICB9XG59XG5cbl9VbnNhZmVSZXN0UXVlcnkucHJvdG90eXBlLmNoZWNrU3VicXVlcnlEZXB0aCA9IGZ1bmN0aW9uICgpIHtcbiAgaWYgKHRoaXMuYXV0aC5pc01hc3RlciB8fCB0aGlzLmF1dGguaXNNYWludGVuYW5jZSkge1xuICAgIHJldHVybjtcbiAgfVxuICBjb25zdCByYyA9IHRoaXMuY29uZmlnLnJlcXVlc3RDb21wbGV4aXR5O1xuICBpZiAoIXJjIHx8IHJjLnN1YnF1ZXJ5RGVwdGggPT09IC0xKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIGNvbnN0IGRlcHRoID0gdGhpcy5jb250ZXh0Ll9zdWJxdWVyeURlcHRoIHx8IDA7XG4gIGlmIChkZXB0aCA+IHJjLnN1YnF1ZXJ5RGVwdGgpIHtcbiAgICBjb25zdCBtZXNzYWdlID0gYFN1YnF1ZXJ5IG5lc3RpbmcgZGVwdGggZXhjZWVkcyBtYXhpbXVtIGFsbG93ZWQgZGVwdGggb2YgJHtyYy5zdWJxdWVyeURlcHRofWA7XG4gICAgbG9nZ2VyLndhcm4obWVzc2FnZSk7XG4gICAgdGhyb3cgbmV3IFBhcnNlLkVycm9yKFBhcnNlLkVycm9yLklOVkFMSURfUVVFUlksIG1lc3NhZ2UpO1xuICB9XG59O1xuXG4vLyBSZXBsYWNlcyBhICRpblF1ZXJ5IGNsYXVzZSBieSBydW5uaW5nIHRoZSBzdWJxdWVyeSwgaWYgdGhlcmUgaXMgYW5cbi8vICRpblF1ZXJ5IGNsYXVzZS5cbi8vIFRoZSAkaW5RdWVyeSBjbGF1c2UgdHVybnMgaW50byBhbiAkaW4gd2l0aCB2YWx1ZXMgdGhhdCBhcmUganVzdFxuLy8gcG9pbnRlcnMgdG8gdGhlIG9iamVjdHMgcmV0dXJuZWQgaW4gdGhlIHN1YnF1ZXJ5LlxuX1Vuc2FmZVJlc3RRdWVyeS5wcm90b3R5cGUucmVwbGFjZUluUXVlcnkgPSBhc3luYyBmdW5jdGlvbiAoKSB7XG4gIHZhciBpblF1ZXJ5T2JqZWN0ID0gZmluZE9iamVjdFdpdGhLZXkodGhpcy5yZXN0V2hlcmUsICckaW5RdWVyeScpO1xuICBpZiAoIWluUXVlcnlPYmplY3QpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICAvLyBUaGUgaW5RdWVyeSB2YWx1ZSBtdXN0IGhhdmUgcHJlY2lzZWx5IHR3byBrZXlzIC0gd2hlcmUgYW5kIGNsYXNzTmFtZVxuICB2YXIgaW5RdWVyeVZhbHVlID0gaW5RdWVyeU9iamVjdFsnJGluUXVlcnknXTtcbiAgaWYgKCFpblF1ZXJ5VmFsdWUud2hlcmUgfHwgIWluUXVlcnlWYWx1ZS5jbGFzc05hbWUpIHtcbiAgICB0aHJvdyBuZXcgUGFyc2UuRXJyb3IoUGFyc2UuRXJyb3IuSU5WQUxJRF9RVUVSWSwgJ2ltcHJvcGVyIHVzYWdlIG9mICRpblF1ZXJ5Jyk7XG4gIH1cblxuICBjb25zdCBhZGRpdGlvbmFsT3B0aW9ucyA9IHtcbiAgICByZWRpcmVjdENsYXNzTmFtZUZvcktleTogaW5RdWVyeVZhbHVlLnJlZGlyZWN0Q2xhc3NOYW1lRm9yS2V5LFxuICB9O1xuXG4gIGlmICh0aGlzLnJlc3RPcHRpb25zLnN1YnF1ZXJ5UmVhZFByZWZlcmVuY2UpIHtcbiAgICBhZGRpdGlvbmFsT3B0aW9ucy5yZWFkUHJlZmVyZW5jZSA9IHRoaXMucmVzdE9wdGlvbnMuc3VicXVlcnlSZWFkUHJlZmVyZW5jZTtcbiAgICBhZGRpdGlvbmFsT3B0aW9ucy5zdWJxdWVyeVJlYWRQcmVmZXJlbmNlID0gdGhpcy5yZXN0T3B0aW9ucy5zdWJxdWVyeVJlYWRQcmVmZXJlbmNlO1xuICB9IGVsc2UgaWYgKHRoaXMucmVzdE9wdGlvbnMucmVhZFByZWZlcmVuY2UpIHtcbiAgICBhZGRpdGlvbmFsT3B0aW9ucy5yZWFkUHJlZmVyZW5jZSA9IHRoaXMucmVzdE9wdGlvbnMucmVhZFByZWZlcmVuY2U7XG4gIH1cblxuICBjb25zdCBjaGlsZENvbnRleHQgPSB7IC4uLnRoaXMuY29udGV4dCwgX3N1YnF1ZXJ5RGVwdGg6ICh0aGlzLmNvbnRleHQuX3N1YnF1ZXJ5RGVwdGggfHwgMCkgKyAxIH07XG4gIGNvbnN0IHN1YnF1ZXJ5ID0gYXdhaXQgUmVzdFF1ZXJ5KHtcbiAgICBtZXRob2Q6IFJlc3RRdWVyeS5NZXRob2QuZmluZCxcbiAgICBjb25maWc6IHRoaXMuY29uZmlnLFxuICAgIGF1dGg6IHRoaXMuYXV0aCxcbiAgICBjbGFzc05hbWU6IGluUXVlcnlWYWx1ZS5jbGFzc05hbWUsXG4gICAgcmVzdFdoZXJlOiBpblF1ZXJ5VmFsdWUud2hlcmUsXG4gICAgcmVzdE9wdGlvbnM6IGFkZGl0aW9uYWxPcHRpb25zLFxuICAgIGNvbnRleHQ6IGNoaWxkQ29udGV4dCxcbiAgfSk7XG4gIHJldHVybiBzdWJxdWVyeS5leGVjdXRlKCkudGhlbihyZXNwb25zZSA9PiB7XG4gICAgdHJhbnNmb3JtSW5RdWVyeShpblF1ZXJ5T2JqZWN0LCBzdWJxdWVyeS5jbGFzc05hbWUsIHJlc3BvbnNlLnJlc3VsdHMpO1xuICAgIC8vIFJlY3Vyc2UgdG8gcmVwZWF0XG4gICAgcmV0dXJuIHRoaXMucmVwbGFjZUluUXVlcnkoKTtcbiAgfSk7XG59O1xuXG5mdW5jdGlvbiB0cmFuc2Zvcm1Ob3RJblF1ZXJ5KG5vdEluUXVlcnlPYmplY3QsIGNsYXNzTmFtZSwgcmVzdWx0cykge1xuICB2YXIgdmFsdWVzID0gW107XG4gIGZvciAodmFyIHJlc3VsdCBvZiByZXN1bHRzKSB7XG4gICAgdmFsdWVzLnB1c2goe1xuICAgICAgX190eXBlOiAnUG9pbnRlcicsXG4gICAgICBjbGFzc05hbWU6IGNsYXNzTmFtZSxcbiAgICAgIG9iamVjdElkOiByZXN1bHQub2JqZWN0SWQsXG4gICAgfSk7XG4gIH1cbiAgZGVsZXRlIG5vdEluUXVlcnlPYmplY3RbJyRub3RJblF1ZXJ5J107XG4gIGlmIChBcnJheS5pc0FycmF5KG5vdEluUXVlcnlPYmplY3RbJyRuaW4nXSkpIHtcbiAgICBub3RJblF1ZXJ5T2JqZWN0WyckbmluJ10gPSBub3RJblF1ZXJ5T2JqZWN0WyckbmluJ10uY29uY2F0KHZhbHVlcyk7XG4gIH0gZWxzZSB7XG4gICAgbm90SW5RdWVyeU9iamVjdFsnJG5pbiddID0gdmFsdWVzO1xuICB9XG59XG5cbi8vIFJlcGxhY2VzIGEgJG5vdEluUXVlcnkgY2xhdXNlIGJ5IHJ1bm5pbmcgdGhlIHN1YnF1ZXJ5LCBpZiB0aGVyZSBpcyBhblxuLy8gJG5vdEluUXVlcnkgY2xhdXNlLlxuLy8gVGhlICRub3RJblF1ZXJ5IGNsYXVzZSB0dXJucyBpbnRvIGEgJG5pbiB3aXRoIHZhbHVlcyB0aGF0IGFyZSBqdXN0XG4vLyBwb2ludGVycyB0byB0aGUgb2JqZWN0cyByZXR1cm5lZCBpbiB0aGUgc3VicXVlcnkuXG5fVW5zYWZlUmVzdFF1ZXJ5LnByb3RvdHlwZS5yZXBsYWNlTm90SW5RdWVyeSA9IGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgdmFyIG5vdEluUXVlcnlPYmplY3QgPSBmaW5kT2JqZWN0V2l0aEtleSh0aGlzLnJlc3RXaGVyZSwgJyRub3RJblF1ZXJ5Jyk7XG4gIGlmICghbm90SW5RdWVyeU9iamVjdCkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8vIFRoZSBub3RJblF1ZXJ5IHZhbHVlIG11c3QgaGF2ZSBwcmVjaXNlbHkgdHdvIGtleXMgLSB3aGVyZSBhbmQgY2xhc3NOYW1lXG4gIHZhciBub3RJblF1ZXJ5VmFsdWUgPSBub3RJblF1ZXJ5T2JqZWN0Wyckbm90SW5RdWVyeSddO1xuICBpZiAoIW5vdEluUXVlcnlWYWx1ZS53aGVyZSB8fCAhbm90SW5RdWVyeVZhbHVlLmNsYXNzTmFtZSkge1xuICAgIHRocm93IG5ldyBQYXJzZS5FcnJvcihQYXJzZS5FcnJvci5JTlZBTElEX1FVRVJZLCAnaW1wcm9wZXIgdXNhZ2Ugb2YgJG5vdEluUXVlcnknKTtcbiAgfVxuXG4gIGNvbnN0IGFkZGl0aW9uYWxPcHRpb25zID0ge1xuICAgIHJlZGlyZWN0Q2xhc3NOYW1lRm9yS2V5OiBub3RJblF1ZXJ5VmFsdWUucmVkaXJlY3RDbGFzc05hbWVGb3JLZXksXG4gIH07XG5cbiAgaWYgKHRoaXMucmVzdE9wdGlvbnMuc3VicXVlcnlSZWFkUHJlZmVyZW5jZSkge1xuICAgIGFkZGl0aW9uYWxPcHRpb25zLnJlYWRQcmVmZXJlbmNlID0gdGhpcy5yZXN0T3B0aW9ucy5zdWJxdWVyeVJlYWRQcmVmZXJlbmNlO1xuICAgIGFkZGl0aW9uYWxPcHRpb25zLnN1YnF1ZXJ5UmVhZFByZWZlcmVuY2UgPSB0aGlzLnJlc3RPcHRpb25zLnN1YnF1ZXJ5UmVhZFByZWZlcmVuY2U7XG4gIH0gZWxzZSBpZiAodGhpcy5yZXN0T3B0aW9ucy5yZWFkUHJlZmVyZW5jZSkge1xuICAgIGFkZGl0aW9uYWxPcHRpb25zLnJlYWRQcmVmZXJlbmNlID0gdGhpcy5yZXN0T3B0aW9ucy5yZWFkUHJlZmVyZW5jZTtcbiAgfVxuXG4gIGNvbnN0IGNoaWxkQ29udGV4dCA9IHsgLi4udGhpcy5jb250ZXh0LCBfc3VicXVlcnlEZXB0aDogKHRoaXMuY29udGV4dC5fc3VicXVlcnlEZXB0aCB8fCAwKSArIDEgfTtcbiAgY29uc3Qgc3VicXVlcnkgPSBhd2FpdCBSZXN0UXVlcnkoe1xuICAgIG1ldGhvZDogUmVzdFF1ZXJ5Lk1ldGhvZC5maW5kLFxuICAgIGNvbmZpZzogdGhpcy5jb25maWcsXG4gICAgYXV0aDogdGhpcy5hdXRoLFxuICAgIGNsYXNzTmFtZTogbm90SW5RdWVyeVZhbHVlLmNsYXNzTmFtZSxcbiAgICByZXN0V2hlcmU6IG5vdEluUXVlcnlWYWx1ZS53aGVyZSxcbiAgICByZXN0T3B0aW9uczogYWRkaXRpb25hbE9wdGlvbnMsXG4gICAgY29udGV4dDogY2hpbGRDb250ZXh0LFxuICB9KTtcblxuICByZXR1cm4gc3VicXVlcnkuZXhlY3V0ZSgpLnRoZW4ocmVzcG9uc2UgPT4ge1xuICAgIHRyYW5zZm9ybU5vdEluUXVlcnkobm90SW5RdWVyeU9iamVjdCwgc3VicXVlcnkuY2xhc3NOYW1lLCByZXNwb25zZS5yZXN1bHRzKTtcbiAgICAvLyBSZWN1cnNlIHRvIHJlcGVhdFxuICAgIHJldHVybiB0aGlzLnJlcGxhY2VOb3RJblF1ZXJ5KCk7XG4gIH0pO1xufTtcblxuLy8gVXNlZCB0byBnZXQgdGhlIGRlZXBlc3Qgb2JqZWN0IGZyb20ganNvbiB1c2luZyBkb3Qgbm90YXRpb24uXG5jb25zdCBnZXREZWVwZXN0T2JqZWN0RnJvbUtleSA9IChqc29uLCBrZXksIGlkeCwgc3JjKSA9PiB7XG4gIGlmIChrZXkgaW4ganNvbikge1xuICAgIHJldHVybiBqc29uW2tleV07XG4gIH1cbiAgc3JjLnNwbGljZSgxKTsgLy8gRXhpdCBFYXJseVxufTtcblxuY29uc3QgdHJhbnNmb3JtU2VsZWN0ID0gKHNlbGVjdE9iamVjdCwga2V5LCBvYmplY3RzKSA9PiB7XG4gIHZhciB2YWx1ZXMgPSBbXTtcbiAgZm9yICh2YXIgcmVzdWx0IG9mIG9iamVjdHMpIHtcbiAgICB2YWx1ZXMucHVzaChrZXkuc3BsaXQoJy4nKS5yZWR1Y2UoZ2V0RGVlcGVzdE9iamVjdEZyb21LZXksIHJlc3VsdCkpO1xuICB9XG4gIGRlbGV0ZSBzZWxlY3RPYmplY3RbJyRzZWxlY3QnXTtcbiAgaWYgKEFycmF5LmlzQXJyYXkoc2VsZWN0T2JqZWN0WyckaW4nXSkpIHtcbiAgICBzZWxlY3RPYmplY3RbJyRpbiddID0gc2VsZWN0T2JqZWN0WyckaW4nXS5jb25jYXQodmFsdWVzKTtcbiAgfSBlbHNlIHtcbiAgICBzZWxlY3RPYmplY3RbJyRpbiddID0gdmFsdWVzO1xuICB9XG59O1xuXG4vLyBSZXBsYWNlcyBhICRzZWxlY3QgY2xhdXNlIGJ5IHJ1bm5pbmcgdGhlIHN1YnF1ZXJ5LCBpZiB0aGVyZSBpcyBhXG4vLyAkc2VsZWN0IGNsYXVzZS5cbi8vIFRoZSAkc2VsZWN0IGNsYXVzZSB0dXJucyBpbnRvIGFuICRpbiB3aXRoIHZhbHVlcyBzZWxlY3RlZCBvdXQgb2Zcbi8vIHRoZSBzdWJxdWVyeS5cbi8vIFJldHVybnMgYSBwb3NzaWJsZS1wcm9taXNlLlxuX1Vuc2FmZVJlc3RRdWVyeS5wcm90b3R5cGUucmVwbGFjZVNlbGVjdCA9IGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgdmFyIHNlbGVjdE9iamVjdCA9IGZpbmRPYmplY3RXaXRoS2V5KHRoaXMucmVzdFdoZXJlLCAnJHNlbGVjdCcpO1xuICBpZiAoIXNlbGVjdE9iamVjdCkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8vIFRoZSBzZWxlY3QgdmFsdWUgbXVzdCBoYXZlIHByZWNpc2VseSB0d28ga2V5cyAtIHF1ZXJ5IGFuZCBrZXlcbiAgdmFyIHNlbGVjdFZhbHVlID0gc2VsZWN0T2JqZWN0Wyckc2VsZWN0J107XG4gIC8vIGlPUyBTREsgZG9uJ3Qgc2VuZCB3aGVyZSBpZiBub3Qgc2V0LCBsZXQgaXQgcGFzc1xuICBpZiAoXG4gICAgIXNlbGVjdFZhbHVlLnF1ZXJ5IHx8XG4gICAgIXNlbGVjdFZhbHVlLmtleSB8fFxuICAgIHR5cGVvZiBzZWxlY3RWYWx1ZS5xdWVyeSAhPT0gJ29iamVjdCcgfHxcbiAgICAhc2VsZWN0VmFsdWUucXVlcnkuY2xhc3NOYW1lIHx8XG4gICAgT2JqZWN0LmtleXMoc2VsZWN0VmFsdWUpLmxlbmd0aCAhPT0gMlxuICApIHtcbiAgICB0aHJvdyBuZXcgUGFyc2UuRXJyb3IoUGFyc2UuRXJyb3IuSU5WQUxJRF9RVUVSWSwgJ2ltcHJvcGVyIHVzYWdlIG9mICRzZWxlY3QnKTtcbiAgfVxuXG4gIGNvbnN0IGFkZGl0aW9uYWxPcHRpb25zID0ge1xuICAgIHJlZGlyZWN0Q2xhc3NOYW1lRm9yS2V5OiBzZWxlY3RWYWx1ZS5xdWVyeS5yZWRpcmVjdENsYXNzTmFtZUZvcktleSxcbiAgfTtcblxuICBpZiAodGhpcy5yZXN0T3B0aW9ucy5zdWJxdWVyeVJlYWRQcmVmZXJlbmNlKSB7XG4gICAgYWRkaXRpb25hbE9wdGlvbnMucmVhZFByZWZlcmVuY2UgPSB0aGlzLnJlc3RPcHRpb25zLnN1YnF1ZXJ5UmVhZFByZWZlcmVuY2U7XG4gICAgYWRkaXRpb25hbE9wdGlvbnMuc3VicXVlcnlSZWFkUHJlZmVyZW5jZSA9IHRoaXMucmVzdE9wdGlvbnMuc3VicXVlcnlSZWFkUHJlZmVyZW5jZTtcbiAgfSBlbHNlIGlmICh0aGlzLnJlc3RPcHRpb25zLnJlYWRQcmVmZXJlbmNlKSB7XG4gICAgYWRkaXRpb25hbE9wdGlvbnMucmVhZFByZWZlcmVuY2UgPSB0aGlzLnJlc3RPcHRpb25zLnJlYWRQcmVmZXJlbmNlO1xuICB9XG5cbiAgY29uc3QgY2hpbGRDb250ZXh0ID0geyAuLi50aGlzLmNvbnRleHQsIF9zdWJxdWVyeURlcHRoOiAodGhpcy5jb250ZXh0Ll9zdWJxdWVyeURlcHRoIHx8IDApICsgMSB9O1xuICBjb25zdCBzdWJxdWVyeSA9IGF3YWl0IFJlc3RRdWVyeSh7XG4gICAgbWV0aG9kOiBSZXN0UXVlcnkuTWV0aG9kLmZpbmQsXG4gICAgY29uZmlnOiB0aGlzLmNvbmZpZyxcbiAgICBhdXRoOiB0aGlzLmF1dGgsXG4gICAgY2xhc3NOYW1lOiBzZWxlY3RWYWx1ZS5xdWVyeS5jbGFzc05hbWUsXG4gICAgcmVzdFdoZXJlOiBzZWxlY3RWYWx1ZS5xdWVyeS53aGVyZSxcbiAgICByZXN0T3B0aW9uczogYWRkaXRpb25hbE9wdGlvbnMsXG4gICAgY29udGV4dDogY2hpbGRDb250ZXh0LFxuICB9KTtcblxuICByZXR1cm4gc3VicXVlcnkuZXhlY3V0ZSgpLnRoZW4ocmVzcG9uc2UgPT4ge1xuICAgIHRyYW5zZm9ybVNlbGVjdChzZWxlY3RPYmplY3QsIHNlbGVjdFZhbHVlLmtleSwgcmVzcG9uc2UucmVzdWx0cyk7XG4gICAgLy8gS2VlcCByZXBsYWNpbmcgJHNlbGVjdCBjbGF1c2VzXG4gICAgcmV0dXJuIHRoaXMucmVwbGFjZVNlbGVjdCgpO1xuICB9KTtcbn07XG5cbmNvbnN0IHRyYW5zZm9ybURvbnRTZWxlY3QgPSAoZG9udFNlbGVjdE9iamVjdCwga2V5LCBvYmplY3RzKSA9PiB7XG4gIHZhciB2YWx1ZXMgPSBbXTtcbiAgZm9yICh2YXIgcmVzdWx0IG9mIG9iamVjdHMpIHtcbiAgICB2YWx1ZXMucHVzaChrZXkuc3BsaXQoJy4nKS5yZWR1Y2UoZ2V0RGVlcGVzdE9iamVjdEZyb21LZXksIHJlc3VsdCkpO1xuICB9XG4gIGRlbGV0ZSBkb250U2VsZWN0T2JqZWN0WyckZG9udFNlbGVjdCddO1xuICBpZiAoQXJyYXkuaXNBcnJheShkb250U2VsZWN0T2JqZWN0WyckbmluJ10pKSB7XG4gICAgZG9udFNlbGVjdE9iamVjdFsnJG5pbiddID0gZG9udFNlbGVjdE9iamVjdFsnJG5pbiddLmNvbmNhdCh2YWx1ZXMpO1xuICB9IGVsc2Uge1xuICAgIGRvbnRTZWxlY3RPYmplY3RbJyRuaW4nXSA9IHZhbHVlcztcbiAgfVxufTtcblxuLy8gUmVwbGFjZXMgYSAkZG9udFNlbGVjdCBjbGF1c2UgYnkgcnVubmluZyB0aGUgc3VicXVlcnksIGlmIHRoZXJlIGlzIGFcbi8vICRkb250U2VsZWN0IGNsYXVzZS5cbi8vIFRoZSAkZG9udFNlbGVjdCBjbGF1c2UgdHVybnMgaW50byBhbiAkbmluIHdpdGggdmFsdWVzIHNlbGVjdGVkIG91dCBvZlxuLy8gdGhlIHN1YnF1ZXJ5LlxuLy8gUmV0dXJucyBhIHBvc3NpYmxlLXByb21pc2UuXG5fVW5zYWZlUmVzdFF1ZXJ5LnByb3RvdHlwZS5yZXBsYWNlRG9udFNlbGVjdCA9IGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgdmFyIGRvbnRTZWxlY3RPYmplY3QgPSBmaW5kT2JqZWN0V2l0aEtleSh0aGlzLnJlc3RXaGVyZSwgJyRkb250U2VsZWN0Jyk7XG4gIGlmICghZG9udFNlbGVjdE9iamVjdCkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8vIFRoZSBkb250U2VsZWN0IHZhbHVlIG11c3QgaGF2ZSBwcmVjaXNlbHkgdHdvIGtleXMgLSBxdWVyeSBhbmQga2V5XG4gIHZhciBkb250U2VsZWN0VmFsdWUgPSBkb250U2VsZWN0T2JqZWN0WyckZG9udFNlbGVjdCddO1xuICBpZiAoXG4gICAgIWRvbnRTZWxlY3RWYWx1ZS5xdWVyeSB8fFxuICAgICFkb250U2VsZWN0VmFsdWUua2V5IHx8XG4gICAgdHlwZW9mIGRvbnRTZWxlY3RWYWx1ZS5xdWVyeSAhPT0gJ29iamVjdCcgfHxcbiAgICAhZG9udFNlbGVjdFZhbHVlLnF1ZXJ5LmNsYXNzTmFtZSB8fFxuICAgIE9iamVjdC5rZXlzKGRvbnRTZWxlY3RWYWx1ZSkubGVuZ3RoICE9PSAyXG4gICkge1xuICAgIHRocm93IG5ldyBQYXJzZS5FcnJvcihQYXJzZS5FcnJvci5JTlZBTElEX1FVRVJZLCAnaW1wcm9wZXIgdXNhZ2Ugb2YgJGRvbnRTZWxlY3QnKTtcbiAgfVxuICBjb25zdCBhZGRpdGlvbmFsT3B0aW9ucyA9IHtcbiAgICByZWRpcmVjdENsYXNzTmFtZUZvcktleTogZG9udFNlbGVjdFZhbHVlLnF1ZXJ5LnJlZGlyZWN0Q2xhc3NOYW1lRm9yS2V5LFxuICB9O1xuXG4gIGlmICh0aGlzLnJlc3RPcHRpb25zLnN1YnF1ZXJ5UmVhZFByZWZlcmVuY2UpIHtcbiAgICBhZGRpdGlvbmFsT3B0aW9ucy5yZWFkUHJlZmVyZW5jZSA9IHRoaXMucmVzdE9wdGlvbnMuc3VicXVlcnlSZWFkUHJlZmVyZW5jZTtcbiAgICBhZGRpdGlvbmFsT3B0aW9ucy5zdWJxdWVyeVJlYWRQcmVmZXJlbmNlID0gdGhpcy5yZXN0T3B0aW9ucy5zdWJxdWVyeVJlYWRQcmVmZXJlbmNlO1xuICB9IGVsc2UgaWYgKHRoaXMucmVzdE9wdGlvbnMucmVhZFByZWZlcmVuY2UpIHtcbiAgICBhZGRpdGlvbmFsT3B0aW9ucy5yZWFkUHJlZmVyZW5jZSA9IHRoaXMucmVzdE9wdGlvbnMucmVhZFByZWZlcmVuY2U7XG4gIH1cblxuICBjb25zdCBjaGlsZENvbnRleHQgPSB7IC4uLnRoaXMuY29udGV4dCwgX3N1YnF1ZXJ5RGVwdGg6ICh0aGlzLmNvbnRleHQuX3N1YnF1ZXJ5RGVwdGggfHwgMCkgKyAxIH07XG4gIGNvbnN0IHN1YnF1ZXJ5ID0gYXdhaXQgUmVzdFF1ZXJ5KHtcbiAgICBtZXRob2Q6IFJlc3RRdWVyeS5NZXRob2QuZmluZCxcbiAgICBjb25maWc6IHRoaXMuY29uZmlnLFxuICAgIGF1dGg6IHRoaXMuYXV0aCxcbiAgICBjbGFzc05hbWU6IGRvbnRTZWxlY3RWYWx1ZS5xdWVyeS5jbGFzc05hbWUsXG4gICAgcmVzdFdoZXJlOiBkb250U2VsZWN0VmFsdWUucXVlcnkud2hlcmUsXG4gICAgcmVzdE9wdGlvbnM6IGFkZGl0aW9uYWxPcHRpb25zLFxuICAgIGNvbnRleHQ6IGNoaWxkQ29udGV4dCxcbiAgfSk7XG5cbiAgcmV0dXJuIHN1YnF1ZXJ5LmV4ZWN1dGUoKS50aGVuKHJlc3BvbnNlID0+IHtcbiAgICB0cmFuc2Zvcm1Eb250U2VsZWN0KGRvbnRTZWxlY3RPYmplY3QsIGRvbnRTZWxlY3RWYWx1ZS5rZXksIHJlc3BvbnNlLnJlc3VsdHMpO1xuICAgIC8vIEtlZXAgcmVwbGFjaW5nICRkb250U2VsZWN0IGNsYXVzZXNcbiAgICByZXR1cm4gdGhpcy5yZXBsYWNlRG9udFNlbGVjdCgpO1xuICB9KTtcbn07XG5cbl9VbnNhZmVSZXN0UXVlcnkucHJvdG90eXBlLmNsZWFuUmVzdWx0QXV0aERhdGEgPSBmdW5jdGlvbiAocmVzdWx0KSB7XG4gIGRlbGV0ZSByZXN1bHQucGFzc3dvcmQ7XG4gIGlmIChyZXN1bHQuYXV0aERhdGEpIHtcbiAgICBPYmplY3Qua2V5cyhyZXN1bHQuYXV0aERhdGEpLmZvckVhY2gocHJvdmlkZXIgPT4ge1xuICAgICAgaWYgKHJlc3VsdC5hdXRoRGF0YVtwcm92aWRlcl0gPT09IG51bGwpIHtcbiAgICAgICAgZGVsZXRlIHJlc3VsdC5hdXRoRGF0YVtwcm92aWRlcl07XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBpZiAoT2JqZWN0LmtleXMocmVzdWx0LmF1dGhEYXRhKS5sZW5ndGggPT0gMCkge1xuICAgICAgZGVsZXRlIHJlc3VsdC5hdXRoRGF0YTtcbiAgICB9XG4gIH1cbn07XG5cbmNvbnN0IHJlcGxhY2VFcXVhbGl0eUNvbnN0cmFpbnQgPSBjb25zdHJhaW50ID0+IHtcbiAgaWYgKHR5cGVvZiBjb25zdHJhaW50ICE9PSAnb2JqZWN0Jykge1xuICAgIHJldHVybiBjb25zdHJhaW50O1xuICB9XG4gIGNvbnN0IGVxdWFsVG9PYmplY3QgPSB7fTtcbiAgbGV0IGhhc0RpcmVjdENvbnN0cmFpbnQgPSBmYWxzZTtcbiAgbGV0IGhhc09wZXJhdG9yQ29uc3RyYWludCA9IGZhbHNlO1xuICBmb3IgKGNvbnN0IGtleSBpbiBjb25zdHJhaW50KSB7XG4gICAgaWYgKGtleS5pbmRleE9mKCckJykgIT09IDApIHtcbiAgICAgIGhhc0RpcmVjdENvbnN0cmFpbnQgPSB0cnVlO1xuICAgICAgZXF1YWxUb09iamVjdFtrZXldID0gY29uc3RyYWludFtrZXldO1xuICAgIH0gZWxzZSB7XG4gICAgICBoYXNPcGVyYXRvckNvbnN0cmFpbnQgPSB0cnVlO1xuICAgIH1cbiAgfVxuICBpZiAoaGFzRGlyZWN0Q29uc3RyYWludCAmJiBoYXNPcGVyYXRvckNvbnN0cmFpbnQpIHtcbiAgICBjb25zdHJhaW50WyckZXEnXSA9IGVxdWFsVG9PYmplY3Q7XG4gICAgT2JqZWN0LmtleXMoZXF1YWxUb09iamVjdCkuZm9yRWFjaChrZXkgPT4ge1xuICAgICAgZGVsZXRlIGNvbnN0cmFpbnRba2V5XTtcbiAgICB9KTtcbiAgfVxuICByZXR1cm4gY29uc3RyYWludDtcbn07XG5cbl9VbnNhZmVSZXN0UXVlcnkucHJvdG90eXBlLnJlcGxhY2VFcXVhbGl0eSA9IGZ1bmN0aW9uICgpIHtcbiAgaWYgKHR5cGVvZiB0aGlzLnJlc3RXaGVyZSAhPT0gJ29iamVjdCcpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgZm9yIChjb25zdCBrZXkgaW4gdGhpcy5yZXN0V2hlcmUpIHtcbiAgICB0aGlzLnJlc3RXaGVyZVtrZXldID0gcmVwbGFjZUVxdWFsaXR5Q29uc3RyYWludCh0aGlzLnJlc3RXaGVyZVtrZXldKTtcbiAgfVxufTtcblxuLy8gUmV0dXJucyBhIHByb21pc2UgZm9yIHdoZXRoZXIgaXQgd2FzIHN1Y2Nlc3NmdWwuXG4vLyBQb3B1bGF0ZXMgdGhpcy5yZXNwb25zZSB3aXRoIGFuIG9iamVjdCB0aGF0IG9ubHkgaGFzICdyZXN1bHRzJy5cbl9VbnNhZmVSZXN0UXVlcnkucHJvdG90eXBlLnJ1bkZpbmQgPSBhc3luYyBmdW5jdGlvbiAob3B0aW9ucyA9IHt9KSB7XG4gIGlmICh0aGlzLmZpbmRPcHRpb25zLmxpbWl0ID09PSAwKSB7XG4gICAgdGhpcy5yZXNwb25zZSA9IHsgcmVzdWx0czogW10gfTtcbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG4gIH1cbiAgY29uc3QgZmluZE9wdGlvbnMgPSBPYmplY3QuYXNzaWduKHt9LCB0aGlzLmZpbmRPcHRpb25zKTtcbiAgaWYgKHRoaXMua2V5cykge1xuICAgIGZpbmRPcHRpb25zLmtleXMgPSB0aGlzLmtleXMubWFwKGtleSA9PiB7XG4gICAgICByZXR1cm4ga2V5LnNwbGl0KCcuJylbMF07XG4gICAgfSk7XG4gICAgLy8gV2hlbiBzZWxlY3RpbmcgYGF1dGhEYXRhYCBvbiBgX1VzZXJgLCBhbHNvIGFkZCB0aGUgaW50ZXJuYWwgYXV0aCBkYXRhIGZpZWxkc1xuICAgIC8vIChlLmcuIGBfYXV0aF9kYXRhX2ZhY2Vib29rYCkgZm9yIGVhY2ggY29uZmlndXJlZCBhdXRoIHByb3ZpZGVyLiBJbiBNb25nb0RCLFxuICAgIC8vIGBhdXRoRGF0YWAgaXMgc3RvcmVkIGFzIGluZGl2aWR1YWwgYF9hdXRoX2RhdGFfPHByb3ZpZGVyPmAgZmllbGRzLCBzbyB0aGVcbiAgICAvLyBwcm9qZWN0aW9uIGZvciBgYXV0aERhdGFgIGFsb25lIHdvbid0IG1hdGNoIHRoZW0uIEFkZGluZyBib3RoIGVuc3VyZXMgaXRcbiAgICAvLyB3b3JrcyBhY3Jvc3MgYWxsIGRhdGFiYXNlIGFkYXB0ZXJzOiBNb25nbyB1c2VzIGBfYXV0aF9kYXRhXypgIGZpZWxkcyxcbiAgICAvLyBQb3N0Z3JlcyB1c2VzIHRoZSBgYXV0aERhdGFgIGNvbHVtbiBkaXJlY3RseS5cbiAgICAvL1xuICAgIC8vIE5vdGU6IFdoZW4gc2VsZWN0aW5nIGBhdXRoRGF0YWAsIG9ubHkgYXV0aCBkYXRhIG9mIGN1cnJlbnRseSBjb25maWd1cmVkXG4gICAgLy8gcHJvdmlkZXJzIGlzIHJldHVybmVkLiBBdXRoIGRhdGEgZW50cmllcyBvZiBwcm92aWRlcnMgdGhhdCBhcmUgbm8gbG9uZ2VyXG4gICAgLy8gY29uZmlndXJlZCB3b24ndCBiZSBpbmNsdWRlZC4gVG8gcmV0dXJuIGFsbCBhdXRoIGRhdGEgcmVnYXJkbGVzcyBvZiB0aGVcbiAgICAvLyBwcm92aWRlciBjb25maWd1cmF0aW9uLCBkbyBub3QgdXNlIGBhdXRoRGF0YWAgYXMgYSBzZWxlY3RlZCBrZXkuXG4gICAgaWYgKHRoaXMuY2xhc3NOYW1lID09PSAnX1VzZXInICYmIGZpbmRPcHRpb25zLmtleXMuaW5jbHVkZXMoJ2F1dGhEYXRhJykpIHtcbiAgICAgIGNvbnN0IHByb3ZpZGVycyA9IHRoaXMuY29uZmlnLmF1dGhEYXRhTWFuYWdlci5nZXRQcm92aWRlcnMoKTtcbiAgICAgIGZvciAoY29uc3QgcHJvdmlkZXIgb2YgcHJvdmlkZXJzKSB7XG4gICAgICAgIGNvbnN0IGtleSA9IGBfYXV0aF9kYXRhXyR7cHJvdmlkZXJ9YDtcbiAgICAgICAgaWYgKCFmaW5kT3B0aW9ucy5rZXlzLmluY2x1ZGVzKGtleSkpIHtcbiAgICAgICAgICBmaW5kT3B0aW9ucy5rZXlzLnB1c2goa2V5KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuICBpZiAob3B0aW9ucy5vcCkge1xuICAgIGZpbmRPcHRpb25zLm9wID0gb3B0aW9ucy5vcDtcbiAgfVxuICBjb25zdCByZXN1bHRzID0gYXdhaXQgdGhpcy5jb25maWcuZGF0YWJhc2UuZmluZCh0aGlzLmNsYXNzTmFtZSwgdGhpcy5yZXN0V2hlcmUsIGZpbmRPcHRpb25zLCB0aGlzLmF1dGgpO1xuICBpZiAodGhpcy5jbGFzc05hbWUgPT09ICdfVXNlcicgJiYgIWZpbmRPcHRpb25zLmV4cGxhaW4pIHtcbiAgICBmb3IgKHZhciByZXN1bHQgb2YgcmVzdWx0cykge1xuICAgICAgdGhpcy5jbGVhblJlc3VsdEF1dGhEYXRhKHJlc3VsdCk7XG4gICAgfVxuICB9XG5cbiAgYXdhaXQgdGhpcy5jb25maWcuZmlsZXNDb250cm9sbGVyLmV4cGFuZEZpbGVzSW5PYmplY3QodGhpcy5jb25maWcsIHJlc3VsdHMpO1xuXG4gIGlmICh0aGlzLnJlZGlyZWN0Q2xhc3NOYW1lKSB7XG4gICAgZm9yICh2YXIgciBvZiByZXN1bHRzKSB7XG4gICAgICByLmNsYXNzTmFtZSA9IHRoaXMucmVkaXJlY3RDbGFzc05hbWU7XG4gICAgfVxuICB9XG4gIHRoaXMucmVzcG9uc2UgPSB7IHJlc3VsdHM6IHJlc3VsdHMgfTtcbn07XG5cbi8vIFJldHVybnMgYSBwcm9taXNlIGZvciB3aGV0aGVyIGl0IHdhcyBzdWNjZXNzZnVsLlxuLy8gUG9wdWxhdGVzIHRoaXMucmVzcG9uc2UuY291bnQgd2l0aCB0aGUgY291bnRcbl9VbnNhZmVSZXN0UXVlcnkucHJvdG90eXBlLnJ1bkNvdW50ID0gZnVuY3Rpb24gKCkge1xuICBpZiAoIXRoaXMuZG9Db3VudCkge1xuICAgIHJldHVybjtcbiAgfVxuICB0aGlzLmZpbmRPcHRpb25zLmNvdW50ID0gdHJ1ZTtcbiAgZGVsZXRlIHRoaXMuZmluZE9wdGlvbnMuc2tpcDtcbiAgZGVsZXRlIHRoaXMuZmluZE9wdGlvbnMubGltaXQ7XG4gIHJldHVybiB0aGlzLmNvbmZpZy5kYXRhYmFzZS5maW5kKHRoaXMuY2xhc3NOYW1lLCB0aGlzLnJlc3RXaGVyZSwgdGhpcy5maW5kT3B0aW9ucykudGhlbihjID0+IHtcbiAgICB0aGlzLnJlc3BvbnNlLmNvdW50ID0gYztcbiAgfSk7XG59O1xuXG5fVW5zYWZlUmVzdFF1ZXJ5LnByb3RvdHlwZS5kZW55UHJvdGVjdGVkRmllbGRzID0gYXN5bmMgZnVuY3Rpb24gKCkge1xuICBpZiAodGhpcy5hdXRoLmlzTWFzdGVyKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIGNvbnN0IHNjaGVtYUNvbnRyb2xsZXIgPSBhd2FpdCB0aGlzLmNvbmZpZy5kYXRhYmFzZS5sb2FkU2NoZW1hKCk7XG4gIGNvbnN0IHByb3RlY3RlZEZpZWxkcyA9XG4gICAgdGhpcy5jb25maWcuZGF0YWJhc2UuYWRkUHJvdGVjdGVkRmllbGRzKFxuICAgICAgc2NoZW1hQ29udHJvbGxlcixcbiAgICAgIHRoaXMuY2xhc3NOYW1lLFxuICAgICAgdGhpcy5yZXN0V2hlcmUsXG4gICAgICB0aGlzLmZpbmRPcHRpb25zLmFjbCxcbiAgICAgIHRoaXMuYXV0aCxcbiAgICAgIHRoaXMuZmluZE9wdGlvbnNcbiAgICApIHx8IFtdO1xuICBjb25zdCBjaGVja1doZXJlID0gKHdoZXJlKSA9PiB7XG4gICAgaWYgKHR5cGVvZiB3aGVyZSAhPT0gJ29iamVjdCcgfHwgd2hlcmUgPT09IG51bGwpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgZm9yIChjb25zdCBrZXkgb2YgcHJvdGVjdGVkRmllbGRzKSB7XG4gICAgICBpZiAoa2V5IGluIHdoZXJlKSB7XG4gICAgICAgIHRocm93IGNyZWF0ZVNhbml0aXplZEVycm9yKFxuICAgICAgICAgIFBhcnNlLkVycm9yLk9QRVJBVElPTl9GT1JCSURERU4sXG4gICAgICAgICAgYFRoaXMgdXNlciBpcyBub3QgYWxsb3dlZCB0byBxdWVyeSAke2tleX0gb24gY2xhc3MgJHt0aGlzLmNsYXNzTmFtZX1gLFxuICAgICAgICAgIHRoaXMuY29uZmlnXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuICAgIGZvciAoY29uc3Qgb3Agb2YgWyckb3InLCAnJGFuZCcsICckbm9yJ10pIHtcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KHdoZXJlW29wXSkpIHtcbiAgICAgICAgd2hlcmVbb3BdLmZvckVhY2goc3ViUXVlcnkgPT4gY2hlY2tXaGVyZShzdWJRdWVyeSkpO1xuICAgICAgfVxuICAgIH1cbiAgfTtcbiAgY2hlY2tXaGVyZSh0aGlzLnJlc3RXaGVyZSk7XG59O1xuXG4vLyBBdWdtZW50cyB0aGlzLnJlc3BvbnNlIHdpdGggYWxsIHBvaW50ZXJzIG9uIGFuIG9iamVjdFxuX1Vuc2FmZVJlc3RRdWVyeS5wcm90b3R5cGUuaGFuZGxlSW5jbHVkZUFsbCA9IGZ1bmN0aW9uICgpIHtcbiAgaWYgKCF0aGlzLmluY2x1ZGVBbGwpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgcmV0dXJuIHRoaXMuY29uZmlnLmRhdGFiYXNlXG4gICAgLmxvYWRTY2hlbWEoKVxuICAgIC50aGVuKHNjaGVtYUNvbnRyb2xsZXIgPT4gc2NoZW1hQ29udHJvbGxlci5nZXRPbmVTY2hlbWEodGhpcy5jbGFzc05hbWUpKVxuICAgIC50aGVuKHNjaGVtYSA9PiB7XG4gICAgICBjb25zdCBpbmNsdWRlRmllbGRzID0gW107XG4gICAgICBjb25zdCBrZXlGaWVsZHMgPSBbXTtcbiAgICAgIGZvciAoY29uc3QgZmllbGQgaW4gc2NoZW1hLmZpZWxkcykge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgKHNjaGVtYS5maWVsZHNbZmllbGRdLnR5cGUgJiYgc2NoZW1hLmZpZWxkc1tmaWVsZF0udHlwZSA9PT0gJ1BvaW50ZXInKSB8fFxuICAgICAgICAgIChzY2hlbWEuZmllbGRzW2ZpZWxkXS50eXBlICYmIHNjaGVtYS5maWVsZHNbZmllbGRdLnR5cGUgPT09ICdBcnJheScpXG4gICAgICAgICkge1xuICAgICAgICAgIGluY2x1ZGVGaWVsZHMucHVzaChbZmllbGRdKTtcbiAgICAgICAgICBrZXlGaWVsZHMucHVzaChmaWVsZCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIC8vIEFkZCBmaWVsZHMgdG8gaW5jbHVkZSwga2V5cywgcmVtb3ZlIGR1cHNcbiAgICAgIHRoaXMuaW5jbHVkZSA9IFsuLi5uZXcgU2V0KFsuLi50aGlzLmluY2x1ZGUsIC4uLmluY2x1ZGVGaWVsZHNdKV07XG4gICAgICAvLyBpZiB0aGlzLmtleXMgbm90IHNldCwgdGhlbiBhbGwga2V5cyBhcmUgYWxyZWFkeSBpbmNsdWRlZFxuICAgICAgaWYgKHRoaXMua2V5cykge1xuICAgICAgICB0aGlzLmtleXMgPSBbLi4ubmV3IFNldChbLi4udGhpcy5rZXlzLCAuLi5rZXlGaWVsZHNdKV07XG4gICAgICB9XG4gICAgfSk7XG59O1xuXG5fVW5zYWZlUmVzdFF1ZXJ5LnByb3RvdHlwZS52YWxpZGF0ZUluY2x1ZGVDb21wbGV4aXR5ID0gZnVuY3Rpb24gKCkge1xuICBpZiAodGhpcy5hdXRoLmlzTWFzdGVyIHx8IHRoaXMuYXV0aC5pc01haW50ZW5hbmNlKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIGNvbnN0IHJjID0gdGhpcy5jb25maWcucmVxdWVzdENvbXBsZXhpdHk7XG4gIGlmICghcmMpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgaWYgKHJjLmluY2x1ZGVEZXB0aCAhPT0gLTEgJiYgdGhpcy5pbmNsdWRlICYmIHRoaXMuaW5jbHVkZS5sZW5ndGggPiAwKSB7XG4gICAgY29uc3QgbWF4RGVwdGggPSBNYXRoLm1heCguLi50aGlzLmluY2x1ZGUubWFwKHBhdGggPT4gcGF0aC5sZW5ndGgpKTtcbiAgICBpZiAobWF4RGVwdGggPiByYy5pbmNsdWRlRGVwdGgpIHtcbiAgICAgIGNvbnN0IG1lc3NhZ2UgPSBgSW5jbHVkZSBkZXB0aCBvZiAke21heERlcHRofSBleGNlZWRzIG1heGltdW0gYWxsb3dlZCBkZXB0aCBvZiAke3JjLmluY2x1ZGVEZXB0aH1gO1xuICAgICAgbG9nZ2VyLndhcm4obWVzc2FnZSk7XG4gICAgICB0aHJvdyBuZXcgUGFyc2UuRXJyb3IoUGFyc2UuRXJyb3IuSU5WQUxJRF9RVUVSWSwgbWVzc2FnZSk7XG4gICAgfVxuICB9XG4gIGlmIChyYy5pbmNsdWRlQ291bnQgIT09IC0xICYmIHRoaXMuaW5jbHVkZSAmJiB0aGlzLmluY2x1ZGUubGVuZ3RoID4gcmMuaW5jbHVkZUNvdW50KSB7XG4gICAgY29uc3QgbWVzc2FnZSA9IGBOdW1iZXIgb2YgaW5jbHVkZSBmaWVsZHMgKCR7dGhpcy5pbmNsdWRlLmxlbmd0aH0pIGV4Y2VlZHMgbWF4aW11bSBhbGxvd2VkICgke3JjLmluY2x1ZGVDb3VudH0pYDtcbiAgICBsb2dnZXIud2FybihtZXNzYWdlKTtcbiAgICB0aHJvdyBuZXcgUGFyc2UuRXJyb3IoUGFyc2UuRXJyb3IuSU5WQUxJRF9RVUVSWSwgbWVzc2FnZSk7XG4gIH1cbn07XG5cbi8vIFVwZGF0ZXMgcHJvcGVydHkgYHRoaXMua2V5c2AgdG8gY29udGFpbiBhbGwga2V5cyBidXQgdGhlIG9uZXMgdW5zZWxlY3RlZC5cbl9VbnNhZmVSZXN0UXVlcnkucHJvdG90eXBlLmhhbmRsZUV4Y2x1ZGVLZXlzID0gZnVuY3Rpb24gKCkge1xuICBpZiAoIXRoaXMuZXhjbHVkZUtleXMpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgaWYgKHRoaXMua2V5cykge1xuICAgIHRoaXMua2V5cyA9IHRoaXMua2V5cy5maWx0ZXIoayA9PiAhdGhpcy5leGNsdWRlS2V5cy5pbmNsdWRlcyhrKSk7XG4gICAgcmV0dXJuO1xuICB9XG4gIHJldHVybiB0aGlzLmNvbmZpZy5kYXRhYmFzZVxuICAgIC5sb2FkU2NoZW1hKClcbiAgICAudGhlbihzY2hlbWFDb250cm9sbGVyID0+IHNjaGVtYUNvbnRyb2xsZXIuZ2V0T25lU2NoZW1hKHRoaXMuY2xhc3NOYW1lKSlcbiAgICAudGhlbihzY2hlbWEgPT4ge1xuICAgICAgY29uc3QgZmllbGRzID0gT2JqZWN0LmtleXMoc2NoZW1hLmZpZWxkcyk7XG4gICAgICB0aGlzLmtleXMgPSBmaWVsZHMuZmlsdGVyKGsgPT4gIXRoaXMuZXhjbHVkZUtleXMuaW5jbHVkZXMoaykpO1xuICAgIH0pO1xufTtcblxuLy8gQXVnbWVudHMgdGhpcy5yZXNwb25zZSB3aXRoIGRhdGEgYXQgdGhlIHBhdGhzIHByb3ZpZGVkIGluIHRoaXMuaW5jbHVkZS5cbl9VbnNhZmVSZXN0UXVlcnkucHJvdG90eXBlLmhhbmRsZUluY2x1ZGUgPSBhc3luYyBmdW5jdGlvbiAoKSB7XG4gIGlmICh0aGlzLmluY2x1ZGUubGVuZ3RoID09IDApIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBjb25zdCBpbmRleGVkUmVzdWx0cyA9IHRoaXMucmVzcG9uc2UucmVzdWx0cy5yZWR1Y2UoKGluZGV4ZWQsIHJlc3VsdCwgaSkgPT4ge1xuICAgIGluZGV4ZWRbcmVzdWx0Lm9iamVjdElkXSA9IGk7XG4gICAgcmV0dXJuIGluZGV4ZWQ7XG4gIH0sIHt9KTtcblxuICAvLyBCdWlsZCB0aGUgZXhlY3V0aW9uIHRyZWVcbiAgY29uc3QgZXhlY3V0aW9uVHJlZSA9IHt9XG4gIHRoaXMuaW5jbHVkZS5mb3JFYWNoKHBhdGggPT4ge1xuICAgIGxldCBjdXJyZW50ID0gZXhlY3V0aW9uVHJlZTtcbiAgICBwYXRoLmZvckVhY2goKG5vZGUpID0+IHtcbiAgICAgIGlmICghY3VycmVudFtub2RlXSkge1xuICAgICAgICBjdXJyZW50W25vZGVdID0ge1xuICAgICAgICAgIHBhdGgsXG4gICAgICAgICAgY2hpbGRyZW46IHt9XG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICBjdXJyZW50ID0gY3VycmVudFtub2RlXS5jaGlsZHJlblxuICAgIH0pO1xuICB9KTtcblxuICBjb25zdCByZWN1cnNpdmVFeGVjdXRpb25UcmVlID0gYXN5bmMgKHRyZWVOb2RlKSA9PiB7XG4gICAgY29uc3QgeyBwYXRoLCBjaGlsZHJlbiB9ID0gdHJlZU5vZGU7XG4gICAgY29uc3QgcGF0aFJlc3BvbnNlID0gaW5jbHVkZVBhdGgoXG4gICAgICB0aGlzLmNvbmZpZyxcbiAgICAgIHRoaXMuYXV0aCxcbiAgICAgIHRoaXMucmVzcG9uc2UsXG4gICAgICBwYXRoLFxuICAgICAgdGhpcy5jb250ZXh0LFxuICAgICAgdGhpcy5yZXN0T3B0aW9ucyxcbiAgICAgIHRoaXMsXG4gICAgKTtcbiAgICBpZiAocGF0aFJlc3BvbnNlLnRoZW4pIHtcbiAgICAgIGNvbnN0IG5ld1Jlc3BvbnNlID0gYXdhaXQgcGF0aFJlc3BvbnNlXG4gICAgICBuZXdSZXNwb25zZS5yZXN1bHRzLmZvckVhY2gobmV3T2JqZWN0ID0+IHtcbiAgICAgICAgLy8gV2UgaHlkcmF0ZSB0aGUgcm9vdCBvZiBlYWNoIHJlc3VsdCB3aXRoIHN1YiByZXN1bHRzXG4gICAgICAgIHRoaXMucmVzcG9uc2UucmVzdWx0c1tpbmRleGVkUmVzdWx0c1tuZXdPYmplY3Qub2JqZWN0SWRdXVtwYXRoWzBdXSA9IG5ld09iamVjdFtwYXRoWzBdXTtcbiAgICAgIH0pXG4gICAgfVxuICAgIHJldHVybiBQcm9taXNlLmFsbChPYmplY3QudmFsdWVzKGNoaWxkcmVuKS5tYXAocmVjdXJzaXZlRXhlY3V0aW9uVHJlZSkpO1xuICB9XG5cbiAgYXdhaXQgUHJvbWlzZS5hbGwoT2JqZWN0LnZhbHVlcyhleGVjdXRpb25UcmVlKS5tYXAocmVjdXJzaXZlRXhlY3V0aW9uVHJlZSkpO1xuICB0aGlzLmluY2x1ZGUgPSBbXVxufTtcblxuLy9SZXR1cm5zIGEgcHJvbWlzZSBvZiBhIHByb2Nlc3NlZCBzZXQgb2YgcmVzdWx0c1xuX1Vuc2FmZVJlc3RRdWVyeS5wcm90b3R5cGUucnVuQWZ0ZXJGaW5kVHJpZ2dlciA9IGZ1bmN0aW9uICgpIHtcbiAgaWYgKCF0aGlzLnJlc3BvbnNlKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIGlmICghdGhpcy5ydW5BZnRlckZpbmQpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgLy8gQXZvaWQgZG9pbmcgYW55IHNldHVwIGZvciB0cmlnZ2VycyBpZiB0aGVyZSBpcyBubyAnYWZ0ZXJGaW5kJyB0cmlnZ2VyIGZvciB0aGlzIGNsYXNzLlxuICBjb25zdCBoYXNBZnRlckZpbmRIb29rID0gdHJpZ2dlcnMudHJpZ2dlckV4aXN0cyhcbiAgICB0aGlzLmNsYXNzTmFtZSxcbiAgICB0cmlnZ2Vycy5UeXBlcy5hZnRlckZpbmQsXG4gICAgdGhpcy5jb25maWcuYXBwbGljYXRpb25JZFxuICApO1xuICBpZiAoIWhhc0FmdGVyRmluZEhvb2spIHtcbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG4gIH1cbiAgLy8gU2tpcCBBZ2dyZWdhdGUgYW5kIERpc3RpbmN0IFF1ZXJpZXNcbiAgaWYgKHRoaXMuZmluZE9wdGlvbnMucGlwZWxpbmUgfHwgdGhpcy5maW5kT3B0aW9ucy5kaXN0aW5jdCkge1xuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcbiAgfVxuXG4gIGNvbnN0IGpzb24gPSBPYmplY3QuYXNzaWduKHt9LCB0aGlzLnJlc3RPcHRpb25zKTtcbiAganNvbi53aGVyZSA9IHRoaXMucmVzdFdoZXJlO1xuICBjb25zdCBwYXJzZVF1ZXJ5ID0gbmV3IFBhcnNlLlF1ZXJ5KHRoaXMuY2xhc3NOYW1lKTtcbiAgcGFyc2VRdWVyeS53aXRoSlNPTihqc29uKTtcbiAgLy8gUnVuIGFmdGVyRmluZCB0cmlnZ2VyIGFuZCBzZXQgdGhlIG5ldyByZXN1bHRzXG4gIHJldHVybiB0cmlnZ2Vyc1xuICAgIC5tYXliZVJ1bkFmdGVyRmluZFRyaWdnZXIoXG4gICAgICB0cmlnZ2Vycy5UeXBlcy5hZnRlckZpbmQsXG4gICAgICB0aGlzLmF1dGgsXG4gICAgICB0aGlzLmNsYXNzTmFtZSxcbiAgICAgIHRoaXMucmVzcG9uc2UucmVzdWx0cyxcbiAgICAgIHRoaXMuY29uZmlnLFxuICAgICAgcGFyc2VRdWVyeSxcbiAgICAgIHRoaXMuY29udGV4dCxcbiAgICAgIHRoaXMuaXNHZXRcbiAgICApXG4gICAgLnRoZW4ocmVzdWx0cyA9PiB7XG4gICAgICAvLyBFbnN1cmUgd2UgcHJvcGVybHkgc2V0IHRoZSBjbGFzc05hbWUgYmFja1xuICAgICAgaWYgKHRoaXMucmVkaXJlY3RDbGFzc05hbWUpIHtcbiAgICAgICAgdGhpcy5yZXNwb25zZS5yZXN1bHRzID0gcmVzdWx0cy5tYXAob2JqZWN0ID0+IHtcbiAgICAgICAgICBpZiAob2JqZWN0IGluc3RhbmNlb2YgUGFyc2UuT2JqZWN0KSB7XG4gICAgICAgICAgICBvYmplY3QgPSBvYmplY3QudG9KU09OKCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIG9iamVjdC5jbGFzc05hbWUgPSB0aGlzLnJlZGlyZWN0Q2xhc3NOYW1lO1xuICAgICAgICAgIHJldHVybiBvYmplY3Q7XG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5yZXNwb25zZS5yZXN1bHRzID0gcmVzdWx0cztcbiAgICAgIH1cbiAgICB9KTtcbn07XG5cbl9VbnNhZmVSZXN0UXVlcnkucHJvdG90eXBlLmhhbmRsZUF1dGhBZGFwdGVycyA9IGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgaWYgKHRoaXMuY2xhc3NOYW1lICE9PSAnX1VzZXInIHx8IHRoaXMuZmluZE9wdGlvbnMuZXhwbGFpbikge1xuICAgIHJldHVybjtcbiAgfVxuICBhd2FpdCBQcm9taXNlLmFsbChcbiAgICB0aGlzLnJlc3BvbnNlLnJlc3VsdHMubWFwKHJlc3VsdCA9PlxuICAgICAgdGhpcy5jb25maWcuYXV0aERhdGFNYW5hZ2VyLnJ1bkFmdGVyRmluZChcbiAgICAgICAgeyBjb25maWc6IHRoaXMuY29uZmlnLCBhdXRoOiB0aGlzLmF1dGggfSxcbiAgICAgICAgcmVzdWx0LmF1dGhEYXRhXG4gICAgICApXG4gICAgKVxuICApO1xufTtcblxuLy8gQWRkcyBpbmNsdWRlZCB2YWx1ZXMgdG8gdGhlIHJlc3BvbnNlLlxuLy8gUGF0aCBpcyBhIGxpc3Qgb2YgZmllbGQgbmFtZXMuXG4vLyBSZXR1cm5zIGEgcHJvbWlzZSBmb3IgYW4gYXVnbWVudGVkIHJlc3BvbnNlLlxuZnVuY3Rpb24gaW5jbHVkZVBhdGgoY29uZmlnLCBhdXRoLCByZXNwb25zZSwgcGF0aCwgY29udGV4dCwgcmVzdE9wdGlvbnMgPSB7fSkge1xuICB2YXIgcG9pbnRlcnMgPSBmaW5kUG9pbnRlcnMocmVzcG9uc2UucmVzdWx0cywgcGF0aCk7XG4gIGlmIChwb2ludGVycy5sZW5ndGggPT0gMCkge1xuICAgIHJldHVybiByZXNwb25zZTtcbiAgfVxuICBjb25zdCBwb2ludGVyc0hhc2ggPSB7fTtcbiAgZm9yICh2YXIgcG9pbnRlciBvZiBwb2ludGVycykge1xuICAgIGlmICghcG9pbnRlcikge1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGNvbnN0IGNsYXNzTmFtZSA9IHBvaW50ZXIuY2xhc3NOYW1lO1xuICAgIC8vIG9ubHkgaW5jbHVkZSB0aGUgZ29vZCBwb2ludGVyc1xuICAgIGlmIChjbGFzc05hbWUpIHtcbiAgICAgIHBvaW50ZXJzSGFzaFtjbGFzc05hbWVdID0gcG9pbnRlcnNIYXNoW2NsYXNzTmFtZV0gfHwgbmV3IFNldCgpO1xuICAgICAgcG9pbnRlcnNIYXNoW2NsYXNzTmFtZV0uYWRkKHBvaW50ZXIub2JqZWN0SWQpO1xuICAgIH1cbiAgfVxuICBjb25zdCBpbmNsdWRlUmVzdE9wdGlvbnMgPSB7fTtcbiAgaWYgKHJlc3RPcHRpb25zLmtleXMpIHtcbiAgICBjb25zdCBrZXlzID0gbmV3IFNldChyZXN0T3B0aW9ucy5rZXlzLnNwbGl0KCcsJykpO1xuICAgIGNvbnN0IGtleVNldCA9IEFycmF5LmZyb20oa2V5cykucmVkdWNlKChzZXQsIGtleSkgPT4ge1xuICAgICAgY29uc3Qga2V5UGF0aCA9IGtleS5zcGxpdCgnLicpO1xuICAgICAgbGV0IGkgPSAwO1xuICAgICAgZm9yIChpOyBpIDwgcGF0aC5sZW5ndGg7IGkrKykge1xuICAgICAgICBpZiAocGF0aFtpXSAhPSBrZXlQYXRoW2ldKSB7XG4gICAgICAgICAgcmV0dXJuIHNldDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKGkgPCBrZXlQYXRoLmxlbmd0aCkge1xuICAgICAgICBzZXQuYWRkKGtleVBhdGhbaV0pO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHNldDtcbiAgICB9LCBuZXcgU2V0KCkpO1xuICAgIGlmIChrZXlTZXQuc2l6ZSA+IDApIHtcbiAgICAgIGluY2x1ZGVSZXN0T3B0aW9ucy5rZXlzID0gQXJyYXkuZnJvbShrZXlTZXQpLmpvaW4oJywnKTtcbiAgICB9XG4gIH1cblxuICBpZiAocmVzdE9wdGlvbnMuZXhjbHVkZUtleXMpIHtcbiAgICBjb25zdCBleGNsdWRlS2V5cyA9IG5ldyBTZXQocmVzdE9wdGlvbnMuZXhjbHVkZUtleXMuc3BsaXQoJywnKSk7XG4gICAgY29uc3QgZXhjbHVkZUtleVNldCA9IEFycmF5LmZyb20oZXhjbHVkZUtleXMpLnJlZHVjZSgoc2V0LCBrZXkpID0+IHtcbiAgICAgIGNvbnN0IGtleVBhdGggPSBrZXkuc3BsaXQoJy4nKTtcbiAgICAgIGxldCBpID0gMDtcbiAgICAgIGZvciAoaTsgaSA8IHBhdGgubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaWYgKHBhdGhbaV0gIT0ga2V5UGF0aFtpXSkge1xuICAgICAgICAgIHJldHVybiBzZXQ7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChpID09IGtleVBhdGgubGVuZ3RoIC0gMSkge1xuICAgICAgICBzZXQuYWRkKGtleVBhdGhbaV0pO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHNldDtcbiAgICB9LCBuZXcgU2V0KCkpO1xuICAgIGlmIChleGNsdWRlS2V5U2V0LnNpemUgPiAwKSB7XG4gICAgICBpbmNsdWRlUmVzdE9wdGlvbnMuZXhjbHVkZUtleXMgPSBBcnJheS5mcm9tKGV4Y2x1ZGVLZXlTZXQpLmpvaW4oJywnKTtcbiAgICB9XG4gIH1cblxuICBpZiAocmVzdE9wdGlvbnMuaW5jbHVkZVJlYWRQcmVmZXJlbmNlKSB7XG4gICAgaW5jbHVkZVJlc3RPcHRpb25zLnJlYWRQcmVmZXJlbmNlID0gcmVzdE9wdGlvbnMuaW5jbHVkZVJlYWRQcmVmZXJlbmNlO1xuICAgIGluY2x1ZGVSZXN0T3B0aW9ucy5pbmNsdWRlUmVhZFByZWZlcmVuY2UgPSByZXN0T3B0aW9ucy5pbmNsdWRlUmVhZFByZWZlcmVuY2U7XG4gIH0gZWxzZSBpZiAocmVzdE9wdGlvbnMucmVhZFByZWZlcmVuY2UpIHtcbiAgICBpbmNsdWRlUmVzdE9wdGlvbnMucmVhZFByZWZlcmVuY2UgPSByZXN0T3B0aW9ucy5yZWFkUHJlZmVyZW5jZTtcbiAgfVxuICBjb25zdCBxdWVyeVByb21pc2VzID0gT2JqZWN0LmtleXMocG9pbnRlcnNIYXNoKS5tYXAoYXN5bmMgY2xhc3NOYW1lID0+IHtcbiAgICBjb25zdCBvYmplY3RJZHMgPSBBcnJheS5mcm9tKHBvaW50ZXJzSGFzaFtjbGFzc05hbWVdKTtcbiAgICBsZXQgd2hlcmU7XG4gICAgaWYgKG9iamVjdElkcy5sZW5ndGggPT09IDEpIHtcbiAgICAgIHdoZXJlID0geyBvYmplY3RJZDogb2JqZWN0SWRzWzBdIH07XG4gICAgfSBlbHNlIHtcbiAgICAgIHdoZXJlID0geyBvYmplY3RJZDogeyAkaW46IG9iamVjdElkcyB9IH07XG4gICAgfVxuICAgIGNvbnN0IHF1ZXJ5ID0gYXdhaXQgUmVzdFF1ZXJ5KHtcbiAgICAgIG1ldGhvZDogb2JqZWN0SWRzLmxlbmd0aCA9PT0gMSA/IFJlc3RRdWVyeS5NZXRob2QuZ2V0IDogUmVzdFF1ZXJ5Lk1ldGhvZC5maW5kLFxuICAgICAgY29uZmlnLFxuICAgICAgYXV0aCxcbiAgICAgIGNsYXNzTmFtZSxcbiAgICAgIHJlc3RXaGVyZTogd2hlcmUsXG4gICAgICByZXN0T3B0aW9uczogaW5jbHVkZVJlc3RPcHRpb25zLFxuICAgICAgY29udGV4dDogY29udGV4dCxcbiAgICB9KTtcbiAgICByZXR1cm4gcXVlcnkuZXhlY3V0ZSh7IG9wOiAnZ2V0JyB9KS50aGVuKHJlc3VsdHMgPT4ge1xuICAgICAgcmVzdWx0cy5jbGFzc05hbWUgPSBjbGFzc05hbWU7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHJlc3VsdHMpO1xuICAgIH0pO1xuICB9KTtcblxuICAvLyBHZXQgdGhlIG9iamVjdHMgZm9yIGFsbCB0aGVzZSBvYmplY3QgaWRzXG4gIHJldHVybiBQcm9taXNlLmFsbChxdWVyeVByb21pc2VzKS50aGVuKHJlc3BvbnNlcyA9PiB7XG4gICAgdmFyIHJlcGxhY2UgPSByZXNwb25zZXMucmVkdWNlKChyZXBsYWNlLCBpbmNsdWRlUmVzcG9uc2UpID0+IHtcbiAgICAgIGZvciAodmFyIG9iaiBvZiBpbmNsdWRlUmVzcG9uc2UucmVzdWx0cykge1xuICAgICAgICBvYmouX190eXBlID0gJ09iamVjdCc7XG4gICAgICAgIG9iai5jbGFzc05hbWUgPSBpbmNsdWRlUmVzcG9uc2UuY2xhc3NOYW1lO1xuXG4gICAgICAgIGlmIChvYmouY2xhc3NOYW1lID09ICdfVXNlcicgJiYgIWF1dGguaXNNYXN0ZXIpIHtcbiAgICAgICAgICBkZWxldGUgb2JqLnNlc3Npb25Ub2tlbjtcbiAgICAgICAgICBkZWxldGUgb2JqLmF1dGhEYXRhO1xuICAgICAgICB9XG4gICAgICAgIHJlcGxhY2Vbb2JqLm9iamVjdElkXSA9IG9iajtcbiAgICAgIH1cbiAgICAgIHJldHVybiByZXBsYWNlO1xuICAgIH0sIHt9KTtcbiAgICB2YXIgcmVzcCA9IHtcbiAgICAgIHJlc3VsdHM6IHJlcGxhY2VQb2ludGVycyhyZXNwb25zZS5yZXN1bHRzLCBwYXRoLCByZXBsYWNlKSxcbiAgICB9O1xuICAgIGlmIChyZXNwb25zZS5jb3VudCkge1xuICAgICAgcmVzcC5jb3VudCA9IHJlc3BvbnNlLmNvdW50O1xuICAgIH1cbiAgICByZXR1cm4gcmVzcDtcbiAgfSk7XG59XG5cbi8vIE9iamVjdCBtYXkgYmUgYSBsaXN0IG9mIFJFU1QtZm9ybWF0IG9iamVjdCB0byBmaW5kIHBvaW50ZXJzIGluLCBvclxuLy8gaXQgbWF5IGJlIGEgc2luZ2xlIG9iamVjdC5cbi8vIElmIHRoZSBwYXRoIHlpZWxkcyB0aGluZ3MgdGhhdCBhcmVuJ3QgcG9pbnRlcnMsIHRoaXMgdGhyb3dzIGFuIGVycm9yLlxuLy8gUGF0aCBpcyBhIGxpc3Qgb2YgZmllbGRzIHRvIHNlYXJjaCBpbnRvLlxuLy8gUmV0dXJucyBhIGxpc3Qgb2YgcG9pbnRlcnMgaW4gUkVTVCBmb3JtYXQuXG5mdW5jdGlvbiBmaW5kUG9pbnRlcnMob2JqZWN0LCBwYXRoKSB7XG4gIGlmIChvYmplY3QgaW5zdGFuY2VvZiBBcnJheSkge1xuICAgIHJldHVybiBvYmplY3QubWFwKHggPT4gZmluZFBvaW50ZXJzKHgsIHBhdGgpKS5mbGF0KCk7XG4gIH1cblxuICBpZiAodHlwZW9mIG9iamVjdCAhPT0gJ29iamVjdCcgfHwgIW9iamVjdCkge1xuICAgIHJldHVybiBbXTtcbiAgfVxuXG4gIGlmIChwYXRoLmxlbmd0aCA9PSAwKSB7XG4gICAgaWYgKG9iamVjdCA9PT0gbnVsbCB8fCBvYmplY3QuX190eXBlID09ICdQb2ludGVyJykge1xuICAgICAgcmV0dXJuIFtvYmplY3RdO1xuICAgIH1cbiAgICByZXR1cm4gW107XG4gIH1cblxuICB2YXIgc3Vib2JqZWN0ID0gb2JqZWN0W3BhdGhbMF1dO1xuICBpZiAoIXN1Ym9iamVjdCkge1xuICAgIHJldHVybiBbXTtcbiAgfVxuICByZXR1cm4gZmluZFBvaW50ZXJzKHN1Ym9iamVjdCwgcGF0aC5zbGljZSgxKSk7XG59XG5cbi8vIE9iamVjdCBtYXkgYmUgYSBsaXN0IG9mIFJFU1QtZm9ybWF0IG9iamVjdHMgdG8gcmVwbGFjZSBwb2ludGVyc1xuLy8gaW4sIG9yIGl0IG1heSBiZSBhIHNpbmdsZSBvYmplY3QuXG4vLyBQYXRoIGlzIGEgbGlzdCBvZiBmaWVsZHMgdG8gc2VhcmNoIGludG8uXG4vLyByZXBsYWNlIGlzIGEgbWFwIGZyb20gb2JqZWN0IGlkIC0+IG9iamVjdC5cbi8vIFJldHVybnMgc29tZXRoaW5nIGFuYWxvZ291cyB0byBvYmplY3QsIGJ1dCB3aXRoIHRoZSBhcHByb3ByaWF0ZVxuLy8gcG9pbnRlcnMgaW5mbGF0ZWQuXG5mdW5jdGlvbiByZXBsYWNlUG9pbnRlcnMob2JqZWN0LCBwYXRoLCByZXBsYWNlKSB7XG4gIGlmIChvYmplY3QgaW5zdGFuY2VvZiBBcnJheSkge1xuICAgIHJldHVybiBvYmplY3RcbiAgICAgIC5tYXAob2JqID0+IHJlcGxhY2VQb2ludGVycyhvYmosIHBhdGgsIHJlcGxhY2UpKVxuICAgICAgLmZpbHRlcihvYmogPT4gdHlwZW9mIG9iaiAhPT0gJ3VuZGVmaW5lZCcpO1xuICB9XG5cbiAgaWYgKHR5cGVvZiBvYmplY3QgIT09ICdvYmplY3QnIHx8ICFvYmplY3QpIHtcbiAgICByZXR1cm4gb2JqZWN0O1xuICB9XG5cbiAgaWYgKHBhdGgubGVuZ3RoID09PSAwKSB7XG4gICAgaWYgKG9iamVjdCAmJiBvYmplY3QuX190eXBlID09PSAnUG9pbnRlcicpIHtcbiAgICAgIHJldHVybiByZXBsYWNlW29iamVjdC5vYmplY3RJZF07XG4gICAgfVxuICAgIHJldHVybiBvYmplY3Q7XG4gIH1cblxuICB2YXIgc3Vib2JqZWN0ID0gb2JqZWN0W3BhdGhbMF1dO1xuICBpZiAoIXN1Ym9iamVjdCkge1xuICAgIHJldHVybiBvYmplY3Q7XG4gIH1cbiAgdmFyIG5ld3N1YiA9IHJlcGxhY2VQb2ludGVycyhzdWJvYmplY3QsIHBhdGguc2xpY2UoMSksIHJlcGxhY2UpO1xuICB2YXIgYW5zd2VyID0ge307XG4gIGZvciAodmFyIGtleSBpbiBvYmplY3QpIHtcbiAgICBpZiAoa2V5ID09IHBhdGhbMF0pIHtcbiAgICAgIGFuc3dlcltrZXldID0gbmV3c3ViO1xuICAgIH0gZWxzZSB7XG4gICAgICBhbnN3ZXJba2V5XSA9IG9iamVjdFtrZXldO1xuICAgIH1cbiAgfVxuICByZXR1cm4gYW5zd2VyO1xufVxuXG4vLyBGaW5kcyBhIHN1Ym9iamVjdCB0aGF0IGhhcyB0aGUgZ2l2ZW4ga2V5LCBpZiB0aGVyZSBpcyBvbmUuXG4vLyBSZXR1cm5zIHVuZGVmaW5lZCBvdGhlcndpc2UuXG5mdW5jdGlvbiBmaW5kT2JqZWN0V2l0aEtleShyb290LCBrZXkpIHtcbiAgaWYgKHR5cGVvZiByb290ICE9PSAnb2JqZWN0Jykge1xuICAgIHJldHVybjtcbiAgfVxuICBpZiAocm9vdCBpbnN0YW5jZW9mIEFycmF5KSB7XG4gICAgZm9yICh2YXIgaXRlbSBvZiByb290KSB7XG4gICAgICBjb25zdCBhbnN3ZXIgPSBmaW5kT2JqZWN0V2l0aEtleShpdGVtLCBrZXkpO1xuICAgICAgaWYgKGFuc3dlcikge1xuICAgICAgICByZXR1cm4gYW5zd2VyO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBpZiAocm9vdCAmJiByb290W2tleV0pIHtcbiAgICByZXR1cm4gcm9vdDtcbiAgfVxuICBmb3IgKHZhciBzdWJrZXkgaW4gcm9vdCkge1xuICAgIGNvbnN0IGFuc3dlciA9IGZpbmRPYmplY3RXaXRoS2V5KHJvb3Rbc3Via2V5XSwga2V5KTtcbiAgICBpZiAoYW5zd2VyKSB7XG4gICAgICByZXR1cm4gYW5zd2VyO1xuICAgIH1cbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IFJlc3RRdWVyeTtcbi8vIEZvciB0ZXN0c1xubW9kdWxlLmV4cG9ydHMuX1Vuc2FmZVJlc3RRdWVyeSA9IF9VbnNhZmVSZXN0UXVlcnk7XG4iXSwibWFwcGluZ3MiOiI7O0FBQUE7QUFDQTs7QUFFQSxJQUFJQSxnQkFBZ0IsR0FBR0MsT0FBTyxDQUFDLGdDQUFnQyxDQUFDO0FBQ2hFLElBQUlDLEtBQUssR0FBR0QsT0FBTyxDQUFDLFlBQVksQ0FBQyxDQUFDQyxLQUFLO0FBQ3ZDLElBQUlDLE1BQU0sR0FBR0YsT0FBTyxDQUFDLFVBQVUsQ0FBQyxDQUFDRyxPQUFPO0FBQ3hDLE1BQU1DLFFBQVEsR0FBR0osT0FBTyxDQUFDLFlBQVksQ0FBQztBQUN0QyxNQUFNO0VBQUVLO0FBQWMsQ0FBQyxHQUFHTCxPQUFPLENBQUMsNkJBQTZCLENBQUM7QUFDaEUsTUFBTU0sa0JBQWtCLEdBQUcsQ0FBQyxVQUFVLEVBQUUsV0FBVyxFQUFFLFdBQVcsRUFBRSxLQUFLLENBQUM7QUFDeEUsTUFBTTtFQUFFQztBQUFvQixDQUFDLEdBQUdQLE9BQU8sQ0FBQyxjQUFjLENBQUM7QUFDdkQsTUFBTTtFQUFFUTtBQUFxQixDQUFDLEdBQUdSLE9BQU8sQ0FBQyxTQUFTLENBQUM7O0FBRW5EO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWVTLFNBQVNBLENBQUM7RUFDdkJDLE1BQU07RUFDTkMsTUFBTTtFQUNOQyxJQUFJO0VBQ0pDLFNBQVM7RUFDVEMsU0FBUyxHQUFHLENBQUMsQ0FBQztFQUNkQyxXQUFXLEdBQUcsQ0FBQyxDQUFDO0VBQ2hCQyxTQUFTO0VBQ1RDLFlBQVksR0FBRyxJQUFJO0VBQ25CQyxhQUFhLEdBQUcsSUFBSTtFQUNwQkM7QUFDRixDQUFDLEVBQUU7RUFDRCxJQUFJLENBQUMsQ0FBQ1YsU0FBUyxDQUFDVyxNQUFNLENBQUND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
|
|
1179
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJTY2hlbWFDb250cm9sbGVyIiwicmVxdWlyZSIsIlBhcnNlIiwibG9nZ2VyIiwiZGVmYXVsdCIsInRyaWdnZXJzIiwiY29udGludWVXaGlsZSIsIkFsd2F5c1NlbGVjdGVkS2V5cyIsImVuZm9yY2VSb2xlU2VjdXJpdHkiLCJjcmVhdGVTYW5pdGl6ZWRFcnJvciIsIlJlc3RRdWVyeSIsIm1ldGhvZCIsImNvbmZpZyIsImF1dGgiLCJjbGFzc05hbWUiLCJyZXN0V2hlcmUiLCJyZXN0T3B0aW9ucyIsImNsaWVudFNESyIsInJ1bkFmdGVyRmluZCIsInJ1bkJlZm9yZUZpbmQiLCJjb250ZXh0IiwiTWV0aG9kIiwiZmluZCIsImdldCIsImluY2x1ZGVzIiwiRXJyb3IiLCJJTlZBTElEX1FVRVJZIiwiaXNHZXQiLCJyZXN1bHQiLCJtYXliZVJ1blF1ZXJ5VHJpZ2dlciIsIlR5cGVzIiwiYmVmb3JlRmluZCIsIlByb21pc2UiLCJyZXNvbHZlIiwiX1Vuc2FmZVJlc3RRdWVyeSIsIk9iamVjdCIsImZyZWV6ZSIsInJlc3BvbnNlIiwiZmluZE9wdGlvbnMiLCJpc01hc3RlciIsInVzZXIiLCJJTlZBTElEX1NFU1NJT05fVE9LRU4iLCIkYW5kIiwiX190eXBlIiwib2JqZWN0SWQiLCJpZCIsImRvQ291bnQiLCJpbmNsdWRlQWxsIiwiaW5jbHVkZSIsImtleXNGb3JJbmNsdWRlIiwicHJvdG90eXBlIiwiaGFzT3duUHJvcGVydHkiLCJjYWxsIiwia2V5cyIsImV4Y2x1ZGVLZXlzIiwibGVuZ3RoIiwic3BsaXQiLCJmaWx0ZXIiLCJrZXkiLCJtYXAiLCJzbGljZSIsImxhc3RJbmRleE9mIiwiam9pbiIsIm9wdGlvbiIsImNvbmNhdCIsIkFycmF5IiwiZnJvbSIsIlNldCIsImV4Y2x1ZGUiLCJrIiwiaW5kZXhPZiIsImZpZWxkcyIsIm9yZGVyIiwic29ydCIsInJlZHVjZSIsInNvcnRNYXAiLCJmaWVsZCIsInRyaW0iLCJzY29yZSIsIiRtZXRhIiwicGF0aHMiLCJwYXRoU2V0IiwibWVtbyIsInBhdGgiLCJpbmRleCIsInBhcnRzIiwicyIsImEiLCJiIiwicmVkaXJlY3RLZXkiLCJyZWRpcmVjdENsYXNzTmFtZUZvcktleSIsInJlZGlyZWN0Q2xhc3NOYW1lIiwiSU5WQUxJRF9KU09OIiwiZXhlY3V0ZSIsImV4ZWN1dGVPcHRpb25zIiwidGhlbiIsInZhbGlkYXRlUXVlcnlEZXB0aCIsImJ1aWxkUmVzdFdoZXJlIiwiZGVueVByb3RlY3RlZEZpZWxkcyIsImhhbmRsZUluY2x1ZGVBbGwiLCJ2YWxpZGF0ZUluY2x1ZGVDb21wbGV4aXR5IiwiaGFuZGxlRXhjbHVkZUtleXMiLCJydW5GaW5kIiwicnVuQ291bnQiLCJoYW5kbGVJbmNsdWRlIiwicnVuQWZ0ZXJGaW5kVHJpZ2dlciIsImhhbmRsZUF1dGhBZGFwdGVycyIsImVhY2giLCJjYWxsYmFjayIsImxpbWl0IiwiZmluaXNoZWQiLCJxdWVyeSIsInJlc3VsdHMiLCJmb3JFYWNoIiwiYXNzaWduIiwiJGd0IiwiaXNNYWludGVuYW5jZSIsInJjIiwicmVxdWVzdENvbXBsZXhpdHkiLCJxdWVyeURlcHRoIiwibWF4RGVwdGgiLCJjaGVja0RlcHRoIiwid2hlcmUiLCJkZXB0aCIsIm9wIiwiaXNBcnJheSIsInN1YlF1ZXJ5IiwiZ2V0VXNlckFuZFJvbGVBQ0wiLCJ2YWxpZGF0ZUNsaWVudENsYXNzQ3JlYXRpb24iLCJjaGVja1N1YnF1ZXJ5RGVwdGgiLCJyZXBsYWNlU2VsZWN0IiwicmVwbGFjZURvbnRTZWxlY3QiLCJyZXBsYWNlSW5RdWVyeSIsInJlcGxhY2VOb3RJblF1ZXJ5IiwicmVwbGFjZUVxdWFsaXR5IiwiYWNsIiwiZ2V0VXNlclJvbGVzIiwicm9sZXMiLCJkYXRhYmFzZSIsIm5ld0NsYXNzTmFtZSIsImFsbG93Q2xpZW50Q2xhc3NDcmVhdGlvbiIsInN5c3RlbUNsYXNzZXMiLCJsb2FkU2NoZW1hIiwic2NoZW1hQ29udHJvbGxlciIsImhhc0NsYXNzIiwiT1BFUkFUSU9OX0ZPUkJJRERFTiIsInRyYW5zZm9ybUluUXVlcnkiLCJpblF1ZXJ5T2JqZWN0IiwidmFsdWVzIiwicHVzaCIsInN1YnF1ZXJ5RGVwdGgiLCJfc3VicXVlcnlEZXB0aCIsIm1lc3NhZ2UiLCJ3YXJuIiwiZmluZE9iamVjdFdpdGhLZXkiLCJpblF1ZXJ5VmFsdWUiLCJhZGRpdGlvbmFsT3B0aW9ucyIsInN1YnF1ZXJ5UmVhZFByZWZlcmVuY2UiLCJyZWFkUHJlZmVyZW5jZSIsImNoaWxkQ29udGV4dCIsInN1YnF1ZXJ5IiwidHJhbnNmb3JtTm90SW5RdWVyeSIsIm5vdEluUXVlcnlPYmplY3QiLCJub3RJblF1ZXJ5VmFsdWUiLCJnZXREZWVwZXN0T2JqZWN0RnJvbUtleSIsImpzb24iLCJpZHgiLCJzcmMiLCJzcGxpY2UiLCJ0cmFuc2Zvcm1TZWxlY3QiLCJzZWxlY3RPYmplY3QiLCJvYmplY3RzIiwic2VsZWN0VmFsdWUiLCJ0cmFuc2Zvcm1Eb250U2VsZWN0IiwiZG9udFNlbGVjdE9iamVjdCIsImRvbnRTZWxlY3RWYWx1ZSIsImNsZWFuUmVzdWx0QXV0aERhdGEiLCJwYXNzd29yZCIsImF1dGhEYXRhIiwicHJvdmlkZXIiLCJyZXBsYWNlRXF1YWxpdHlDb25zdHJhaW50IiwiY29uc3RyYWludCIsImVxdWFsVG9PYmplY3QiLCJoYXNEaXJlY3RDb25zdHJhaW50IiwiaGFzT3BlcmF0b3JDb25zdHJhaW50Iiwib3B0aW9ucyIsInByb3ZpZGVycyIsImF1dGhEYXRhTWFuYWdlciIsImdldFByb3ZpZGVycyIsImV4cGxhaW4iLCJmaWxlc0NvbnRyb2xsZXIiLCJleHBhbmRGaWxlc0luT2JqZWN0IiwiciIsImNvdW50Iiwic2tpcCIsImMiLCJwcm90ZWN0ZWRGaWVsZHMiLCJhZGRQcm90ZWN0ZWRGaWVsZHMiLCJjaGVja1doZXJlIiwid2hlcmVLZXkiLCJyb290RmllbGQiLCJzb3J0S2V5IiwiZ2V0T25lU2NoZW1hIiwic2NoZW1hIiwiaW5jbHVkZUZpZWxkcyIsImtleUZpZWxkcyIsInR5cGUiLCJpbmNsdWRlRGVwdGgiLCJNYXRoIiwibWF4IiwiaW5jbHVkZUNvdW50IiwiaW5kZXhlZFJlc3VsdHMiLCJpbmRleGVkIiwiaSIsImV4ZWN1dGlvblRyZWUiLCJjdXJyZW50Iiwibm9kZSIsImNoaWxkcmVuIiwicmVjdXJzaXZlRXhlY3V0aW9uVHJlZSIsInRyZWVOb2RlIiwicGF0aFJlc3BvbnNlIiwiaW5jbHVkZVBhdGgiLCJuZXdSZXNwb25zZSIsIm5ld09iamVjdCIsImFsbCIsImhhc0FmdGVyRmluZEhvb2siLCJ0cmlnZ2VyRXhpc3RzIiwiYWZ0ZXJGaW5kIiwiYXBwbGljYXRpb25JZCIsInBpcGVsaW5lIiwiZGlzdGluY3QiLCJwYXJzZVF1ZXJ5IiwiUXVlcnkiLCJ3aXRoSlNPTiIsIm1heWJlUnVuQWZ0ZXJGaW5kVHJpZ2dlciIsIm9iamVjdCIsInRvSlNPTiIsInBvaW50ZXJzIiwiZmluZFBvaW50ZXJzIiwicG9pbnRlcnNIYXNoIiwicG9pbnRlciIsImFkZCIsImluY2x1ZGVSZXN0T3B0aW9ucyIsImtleVNldCIsInNldCIsImtleVBhdGgiLCJzaXplIiwiZXhjbHVkZUtleVNldCIsImluY2x1ZGVSZWFkUHJlZmVyZW5jZSIsInF1ZXJ5UHJvbWlzZXMiLCJvYmplY3RJZHMiLCIkaW4iLCJyZXNwb25zZXMiLCJyZXBsYWNlIiwiaW5jbHVkZVJlc3BvbnNlIiwib2JqIiwic2Vzc2lvblRva2VuIiwicmVzcCIsInJlcGxhY2VQb2ludGVycyIsIngiLCJmbGF0Iiwic3Vib2JqZWN0IiwibmV3c3ViIiwiYW5zd2VyIiwicm9vdCIsIml0ZW0iLCJzdWJrZXkiLCJtb2R1bGUiLCJleHBvcnRzIl0sInNvdXJjZXMiOlsiLi4vc3JjL1Jlc3RRdWVyeS5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBBbiBvYmplY3QgdGhhdCBlbmNhcHN1bGF0ZXMgZXZlcnl0aGluZyB3ZSBuZWVkIHRvIHJ1biBhICdmaW5kJ1xuLy8gb3BlcmF0aW9uLCBlbmNvZGVkIGluIHRoZSBSRVNUIEFQSSBmb3JtYXQuXG5cbnZhciBTY2hlbWFDb250cm9sbGVyID0gcmVxdWlyZSgnLi9Db250cm9sbGVycy9TY2hlbWFDb250cm9sbGVyJyk7XG52YXIgUGFyc2UgPSByZXF1aXJlKCdwYXJzZS9ub2RlJykuUGFyc2U7XG52YXIgbG9nZ2VyID0gcmVxdWlyZSgnLi9sb2dnZXInKS5kZWZhdWx0O1xuY29uc3QgdHJpZ2dlcnMgPSByZXF1aXJlKCcuL3RyaWdnZXJzJyk7XG5jb25zdCB7IGNvbnRpbnVlV2hpbGUgfSA9IHJlcXVpcmUoJ3BhcnNlL2xpYi9ub2RlL3Byb21pc2VVdGlscycpO1xuY29uc3QgQWx3YXlzU2VsZWN0ZWRLZXlzID0gWydvYmplY3RJZCcsICdjcmVhdGVkQXQnLCAndXBkYXRlZEF0JywgJ0FDTCddO1xuY29uc3QgeyBlbmZvcmNlUm9sZVNlY3VyaXR5IH0gPSByZXF1aXJlKCcuL1NoYXJlZFJlc3QnKTtcbmNvbnN0IHsgY3JlYXRlU2FuaXRpemVkRXJyb3IgfSA9IHJlcXVpcmUoJy4vRXJyb3InKTtcblxuLy8gcmVzdE9wdGlvbnMgY2FuIGluY2x1ZGU6XG4vLyAgIHNraXBcbi8vICAgbGltaXRcbi8vICAgb3JkZXJcbi8vICAgY291bnRcbi8vICAgaW5jbHVkZVxuLy8gICBrZXlzXG4vLyAgIGV4Y2x1ZGVLZXlzXG4vLyAgIHJlZGlyZWN0Q2xhc3NOYW1lRm9yS2V5XG4vLyAgIHJlYWRQcmVmZXJlbmNlXG4vLyAgIGluY2x1ZGVSZWFkUHJlZmVyZW5jZVxuLy8gICBzdWJxdWVyeVJlYWRQcmVmZXJlbmNlXG4vKipcbiAqIFVzZSB0byBwZXJmb3JtIGEgcXVlcnkgb24gYSBjbGFzcy4gSXQgd2lsbCBydW4gc2VjdXJpdHkgY2hlY2tzIGFuZCB0cmlnZ2Vycy5cbiAqIEBwYXJhbSBvcHRpb25zXG4gKiBAcGFyYW0gb3B0aW9ucy5tZXRob2Qge1Jlc3RRdWVyeS5NZXRob2R9IFRoZSB0eXBlIG9mIHF1ZXJ5IHRvIHBlcmZvcm1cbiAqIEBwYXJhbSBvcHRpb25zLmNvbmZpZyB7UGFyc2VTZXJ2ZXJDb25maWd1cmF0aW9ufSBUaGUgc2VydmVyIGNvbmZpZ3VyYXRpb25cbiAqIEBwYXJhbSBvcHRpb25zLmF1dGgge0F1dGh9IFRoZSBhdXRoIG9iamVjdCBmb3IgdGhlIHJlcXVlc3RcbiAqIEBwYXJhbSBvcHRpb25zLmNsYXNzTmFtZSB7c3RyaW5nfSBUaGUgbmFtZSBvZiB0aGUgY2xhc3MgdG8gcXVlcnlcbiAqIEBwYXJhbSBvcHRpb25zLnJlc3RXaGVyZSB7b2JqZWN0fSBUaGUgd2hlcmUgb2JqZWN0IGZvciB0aGUgcXVlcnlcbiAqIEBwYXJhbSBvcHRpb25zLnJlc3RPcHRpb25zIHtvYmplY3R9IFRoZSBvcHRpb25zIG9iamVjdCBmb3IgdGhlIHF1ZXJ5XG4gKiBAcGFyYW0gb3B0aW9ucy5jbGllbnRTREsge3N0cmluZ30gVGhlIGNsaWVudCBTREsgdGhhdCBpcyBwZXJmb3JtaW5nIHRoZSBxdWVyeVxuICogQHBhcmFtIG9wdGlvbnMucnVuQWZ0ZXJGaW5kIHtib29sZWFufSBXaGV0aGVyIHRvIHJ1biB0aGUgYWZ0ZXJGaW5kIHRyaWdnZXJcbiAqIEBwYXJhbSBvcHRpb25zLnJ1bkJlZm9yZUZpbmQge2Jvb2xlYW59IFdoZXRoZXIgdG8gcnVuIHRoZSBiZWZvcmVGaW5kIHRyaWdnZXJcbiAqIEBwYXJhbSBvcHRpb25zLmNvbnRleHQge29iamVjdH0gVGhlIGNvbnRleHQgb2JqZWN0IGZvciB0aGUgcXVlcnlcbiAqIEByZXR1cm5zIHtQcm9taXNlPF9VbnNhZmVSZXN0UXVlcnk+fSBBIHByb21pc2UgdGhhdCBpcyByZXNvbHZlZCB3aXRoIHRoZSBfVW5zYWZlUmVzdFF1ZXJ5IG9iamVjdFxuICovXG5hc3luYyBmdW5jdGlvbiBSZXN0UXVlcnkoe1xuICBtZXRob2QsXG4gIGNvbmZpZyxcbiAgYXV0aCxcbiAgY2xhc3NOYW1lLFxuICByZXN0V2hlcmUgPSB7fSxcbiAgcmVzdE9wdGlvbnMgPSB7fSxcbiAgY2xpZW50U0RLLFxuICBydW5BZnRlckZpbmQgPSB0cnVlLFxuICBydW5CZWZvcmVGaW5kID0gdHJ1ZSxcbiAgY29udGV4dCxcbn0pIHtcbiAgaWYgKCFbUmVzdFF1ZXJ5Lk1ldGhvZC5maW5kLCBSZXN0UXVlcnkuTWV0aG9kLmdldF0uaW5jbHVkZXMobWV0aG9kKSkge1xuICAgIHRocm93IG5ldyBQYXJzZS5FcnJvcihQYXJzZS5FcnJvci5JTlZBTElEX1FVRVJZLCAnYmFkIHF1ZXJ5IHR5cGUnKTtcbiAgfVxuICBjb25zdCBpc0dldCA9IG1ldGhvZCA9PT0gUmVzdFF1ZXJ5Lk1ldGhvZC5nZXQ7XG4gIGVuZm9yY2VSb2xlU2VjdXJpdHkobWV0aG9kLCBjbGFzc05hbWUsIGF1dGgsIGNvbmZpZyk7XG4gIGNvbnN0IHJlc3VsdCA9IHJ1bkJlZm9yZUZpbmRcbiAgICA/IGF3YWl0IHRyaWdnZXJzLm1heWJlUnVuUXVlcnlUcmlnZ2VyKFxuICAgICAgdHJpZ2dlcnMuVHlwZXMuYmVmb3JlRmluZCxcbiAgICAgIGNsYXNzTmFtZSxcbiAgICAgIHJlc3RXaGVyZSxcbiAgICAgIHJlc3RPcHRpb25zLFxuICAgICAgY29uZmlnLFxuICAgICAgYXV0aCxcbiAgICAgIGNvbnRleHQsXG4gICAgICBpc0dldFxuICAgIClcbiAgICA6IFByb21pc2UucmVzb2x2ZSh7IHJlc3RXaGVyZSwgcmVzdE9wdGlvbnMgfSk7XG5cbiAgcmV0dXJuIG5ldyBfVW5zYWZlUmVzdFF1ZXJ5KFxuICAgIGNvbmZpZyxcbiAgICBhdXRoLFxuICAgIGNsYXNzTmFtZSxcbiAgICByZXN1bHQucmVzdFdoZXJlIHx8IHJlc3RXaGVyZSxcbiAgICByZXN1bHQucmVzdE9wdGlvbnMgfHwgcmVzdE9wdGlvbnMsXG4gICAgY2xpZW50U0RLLFxuICAgIHJ1bkFmdGVyRmluZCxcbiAgICBjb250ZXh0LFxuICAgIGlzR2V0XG4gICk7XG59XG5cblJlc3RRdWVyeS5NZXRob2QgPSBPYmplY3QuZnJlZXplKHtcbiAgZ2V0OiAnZ2V0JyxcbiAgZmluZDogJ2ZpbmQnLFxufSk7XG5cbi8qKlxuICogX1Vuc2FmZVJlc3RRdWVyeSBpcyBtZWFudCBmb3Igc3BlY2lmaWMgaW50ZXJuYWwgdXNhZ2Ugb25seS4gV2hlbiB5b3UgbmVlZCB0byBza2lwIHNlY3VyaXR5IGNoZWNrcyBvciBzb21lIHRyaWdnZXJzLlxuICogRG9uJ3QgdXNlIGl0IGlmIHlvdSBkb24ndCBrbm93IHdoYXQgeW91IGFyZSBkb2luZy5cbiAqIEBwYXJhbSBjb25maWdcbiAqIEBwYXJhbSBhdXRoXG4gKiBAcGFyYW0gY2xhc3NOYW1lXG4gKiBAcGFyYW0gcmVzdFdoZXJlXG4gKiBAcGFyYW0gcmVzdE9wdGlvbnNcbiAqIEBwYXJhbSBjbGllbnRTREtcbiAqIEBwYXJhbSBydW5BZnRlckZpbmRcbiAqIEBwYXJhbSBjb250ZXh0XG4gKi9cbmZ1bmN0aW9uIF9VbnNhZmVSZXN0UXVlcnkoXG4gIGNvbmZpZyxcbiAgYXV0aCxcbiAgY2xhc3NOYW1lLFxuICByZXN0V2hlcmUgPSB7fSxcbiAgcmVzdE9wdGlvbnMgPSB7fSxcbiAgY2xpZW50U0RLLFxuICBydW5BZnRlckZpbmQgPSB0cnVlLFxuICBjb250ZXh0LFxuICBpc0dldFxuKSB7XG4gIHRoaXMuY29uZmlnID0gY29uZmlnO1xuICB0aGlzLmF1dGggPSBhdXRoO1xuICB0aGlzLmNsYXNzTmFtZSA9IGNsYXNzTmFtZTtcbiAgdGhpcy5yZXN0V2hlcmUgPSByZXN0V2hlcmU7XG4gIHRoaXMucmVzdE9wdGlvbnMgPSByZXN0T3B0aW9ucztcbiAgdGhpcy5jbGllbnRTREsgPSBjbGllbnRTREs7XG4gIHRoaXMucnVuQWZ0ZXJGaW5kID0gcnVuQWZ0ZXJGaW5kO1xuICB0aGlzLnJlc3BvbnNlID0gbnVsbDtcbiAgdGhpcy5maW5kT3B0aW9ucyA9IHt9O1xuICB0aGlzLmNvbnRleHQgPSBjb250ZXh0IHx8IHt9O1xuICB0aGlzLmlzR2V0ID0gaXNHZXQ7XG4gIGlmICghdGhpcy5hdXRoLmlzTWFzdGVyKSB7XG4gICAgaWYgKHRoaXMuY2xhc3NOYW1lID09ICdfU2Vzc2lvbicpIHtcbiAgICAgIGlmICghdGhpcy5hdXRoLnVzZXIpIHtcbiAgICAgICAgdGhyb3cgY3JlYXRlU2FuaXRpemVkRXJyb3IoUGFyc2UuRXJyb3IuSU5WQUxJRF9TRVNTSU9OX1RPS0VOLCAnSW52YWxpZCBzZXNzaW9uIHRva2VuJywgY29uZmlnKTtcbiAgICAgIH1cbiAgICAgIHRoaXMucmVzdFdoZXJlID0ge1xuICAgICAgICAkYW5kOiBbXG4gICAgICAgICAgdGhpcy5yZXN0V2hlcmUsXG4gICAgICAgICAge1xuICAgICAgICAgICAgdXNlcjoge1xuICAgICAgICAgICAgICBfX3R5cGU6ICdQb2ludGVyJyxcbiAgICAgICAgICAgICAgY2xhc3NOYW1lOiAnX1VzZXInLFxuICAgICAgICAgICAgICBvYmplY3RJZDogdGhpcy5hdXRoLnVzZXIuaWQsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICB9O1xuICAgIH1cbiAgfVxuXG4gIHRoaXMuZG9Db3VudCA9IGZhbHNlO1xuICB0aGlzLmluY2x1ZGVBbGwgPSBmYWxzZTtcblxuICAvLyBUaGUgZm9ybWF0IGZvciB0aGlzLmluY2x1ZGUgaXMgbm90IHRoZSBzYW1lIGFzIHRoZSBmb3JtYXQgZm9yIHRoZVxuICAvLyBpbmNsdWRlIG9wdGlvbiAtIGl0J3MgdGhlIHBhdGhzIHdlIHNob3VsZCBpbmNsdWRlLCBpbiBvcmRlcixcbiAgLy8gc3RvcmVkIGFzIGFycmF5cywgdGFraW5nIGludG8gYWNjb3VudCB0aGF0IHdlIG5lZWQgdG8gaW5jbHVkZSBmb29cbiAgLy8gYmVmb3JlIGluY2x1ZGluZyBmb28uYmFyLiBBbHNvIGl0IHNob3VsZCBkZWR1cGUuXG4gIC8vIEZvciBleGFtcGxlLCBwYXNzaW5nIGFuIGFyZyBvZiBpbmNsdWRlPWZvby5iYXIsZm9vLmJheiBjb3VsZCBsZWFkIHRvXG4gIC8vIHRoaXMuaW5jbHVkZSA9IFtbJ2ZvbyddLCBbJ2ZvbycsICdiYXonXSwgWydmb28nLCAnYmFyJ11dXG4gIHRoaXMuaW5jbHVkZSA9IFtdO1xuICBsZXQga2V5c0ZvckluY2x1ZGUgPSAnJztcblxuICAvLyBJZiB3ZSBoYXZlIGtleXMsIHdlIHByb2JhYmx5IHdhbnQgdG8gZm9yY2Ugc29tZSBpbmNsdWRlcyAobi0xIGxldmVsKVxuICAvLyBTZWUgaXNzdWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9wYXJzZS1jb21tdW5pdHkvcGFyc2Utc2VydmVyL2lzc3Vlcy8zMTg1XG4gIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocmVzdE9wdGlvbnMsICdrZXlzJykpIHtcbiAgICBrZXlzRm9ySW5jbHVkZSA9IHJlc3RPcHRpb25zLmtleXM7XG4gIH1cblxuICAvLyBJZiB3ZSBoYXZlIGtleXMsIHdlIHByb2JhYmx5IHdhbnQgdG8gZm9yY2Ugc29tZSBpbmNsdWRlcyAobi0xIGxldmVsKVxuICAvLyBpbiBvcmRlciB0byBleGNsdWRlIHNwZWNpZmljIGtleXMuXG4gIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocmVzdE9wdGlvbnMsICdleGNsdWRlS2V5cycpKSB7XG4gICAga2V5c0ZvckluY2x1ZGUgKz0gJywnICsgcmVzdE9wdGlvbnMuZXhjbHVkZUtleXM7XG4gIH1cblxuICBpZiAoa2V5c0ZvckluY2x1ZGUubGVuZ3RoID4gMCkge1xuICAgIGtleXNGb3JJbmNsdWRlID0ga2V5c0ZvckluY2x1ZGVcbiAgICAgIC5zcGxpdCgnLCcpXG4gICAgICAuZmlsdGVyKGtleSA9PiB7XG4gICAgICAgIC8vIEF0IGxlYXN0IDIgY29tcG9uZW50c1xuICAgICAgICByZXR1cm4ga2V5LnNwbGl0KCcuJykubGVuZ3RoID4gMTtcbiAgICAgIH0pXG4gICAgICAubWFwKGtleSA9PiB7XG4gICAgICAgIC8vIFNsaWNlIHRoZSBsYXN0IGNvbXBvbmVudCAoYS5iLmMgLT4gYS5iKVxuICAgICAgICAvLyBPdGhlcndpc2Ugd2UnbGwgaW5jbHVkZSBvbmUgbGV2ZWwgdG9vIG11Y2guXG4gICAgICAgIHJldHVybiBrZXkuc2xpY2UoMCwga2V5Lmxhc3RJbmRleE9mKCcuJykpO1xuICAgICAgfSlcbiAgICAgIC5qb2luKCcsJyk7XG5cbiAgICAvLyBDb25jYXQgdGhlIHBvc3NpYmx5IHByZXNlbnQgaW5jbHVkZSBzdHJpbmcgd2l0aCB0aGUgb25lIGZyb20gdGhlIGtleXNcbiAgICAvLyBEZWR1cCAvIHNvcnRpbmcgaXMgaGFuZGxlIGluICdpbmNsdWRlJyBjYXNlLlxuICAgIGlmIChrZXlzRm9ySW5jbHVkZS5sZW5ndGggPiAwKSB7XG4gICAgICBpZiAoIXJlc3RPcHRpb25zLmluY2x1ZGUgfHwgcmVzdE9wdGlvbnMuaW5jbHVkZS5sZW5ndGggPT0gMCkge1xuICAgICAgICByZXN0T3B0aW9ucy5pbmNsdWRlID0ga2V5c0ZvckluY2x1ZGU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXN0T3B0aW9ucy5pbmNsdWRlICs9ICcsJyArIGtleXNGb3JJbmNsdWRlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGZvciAodmFyIG9wdGlvbiBpbiByZXN0T3B0aW9ucykge1xuICAgIHN3aXRjaCAob3B0aW9uKSB7XG4gICAgICBjYXNlICdrZXlzJzoge1xuICAgICAgICBjb25zdCBrZXlzID0gcmVzdE9wdGlvbnMua2V5c1xuICAgICAgICAgIC5zcGxpdCgnLCcpXG4gICAgICAgICAgLmZpbHRlcihrZXkgPT4ga2V5Lmxlbmd0aCA+IDApXG4gICAgICAgICAgLmNvbmNhdChBbHdheXNTZWxlY3RlZEtleXMpO1xuICAgICAgICB0aGlzLmtleXMgPSBBcnJheS5mcm9tKG5ldyBTZXQoa2V5cykpO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIGNhc2UgJ2V4Y2x1ZGVLZXlzJzoge1xuICAgICAgICBjb25zdCBleGNsdWRlID0gcmVzdE9wdGlvbnMuZXhjbHVkZUtleXNcbiAgICAgICAgICAuc3BsaXQoJywnKVxuICAgICAgICAgIC5maWx0ZXIoayA9PiBBbHdheXNTZWxlY3RlZEtleXMuaW5kZXhPZihrKSA8IDApO1xuICAgICAgICB0aGlzLmV4Y2x1ZGVLZXlzID0gQXJyYXkuZnJvbShuZXcgU2V0KGV4Y2x1ZGUpKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBjYXNlICdjb3VudCc6XG4gICAgICAgIHRoaXMuZG9Db3VudCA9IHRydWU7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnaW5jbHVkZUFsbCc6XG4gICAgICAgIHRoaXMuaW5jbHVkZUFsbCA9IHRydWU7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnZXhwbGFpbic6XG4gICAgICBjYXNlICdoaW50JzpcbiAgICAgIGNhc2UgJ2Rpc3RpbmN0JzpcbiAgICAgIGNhc2UgJ3BpcGVsaW5lJzpcbiAgICAgIGNhc2UgJ3NraXAnOlxuICAgICAgY2FzZSAnbGltaXQnOlxuICAgICAgY2FzZSAncmVhZFByZWZlcmVuY2UnOlxuICAgICAgY2FzZSAnY29tbWVudCc6XG4gICAgICAgIHRoaXMuZmluZE9wdGlvbnNbb3B0aW9uXSA9IHJlc3RPcHRpb25zW29wdGlvbl07XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnb3JkZXInOlxuICAgICAgICB2YXIgZmllbGRzID0gcmVzdE9wdGlvbnMub3JkZXIuc3BsaXQoJywnKTtcbiAgICAgICAgdGhpcy5maW5kT3B0aW9ucy5zb3J0ID0gZmllbGRzLnJlZHVjZSgoc29ydE1hcCwgZmllbGQpID0+IHtcbiAgICAgICAgICBmaWVsZCA9IGZpZWxkLnRyaW0oKTtcbiAgICAgICAgICBpZiAoZmllbGQgPT09ICckc2NvcmUnIHx8IGZpZWxkID09PSAnLSRzY29yZScpIHtcbiAgICAgICAgICAgIHNvcnRNYXAuc2NvcmUgPSB7ICRtZXRhOiAndGV4dFNjb3JlJyB9O1xuICAgICAgICAgIH0gZWxzZSBpZiAoZmllbGRbMF0gPT0gJy0nKSB7XG4gICAgICAgICAgICBzb3J0TWFwW2ZpZWxkLnNsaWNlKDEpXSA9IC0xO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBzb3J0TWFwW2ZpZWxkXSA9IDE7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBzb3J0TWFwO1xuICAgICAgICB9LCB7fSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnaW5jbHVkZSc6IHtcbiAgICAgICAgY29uc3QgcGF0aHMgPSByZXN0T3B0aW9ucy5pbmNsdWRlLnNwbGl0KCcsJyk7XG4gICAgICAgIGlmIChwYXRocy5pbmNsdWRlcygnKicpKSB7XG4gICAgICAgICAgdGhpcy5pbmNsdWRlQWxsID0gdHJ1ZTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICAvLyBMb2FkIHRoZSBleGlzdGluZyBpbmNsdWRlcyAoZnJvbSBrZXlzKVxuICAgICAgICBjb25zdCBwYXRoU2V0ID0gcGF0aHMucmVkdWNlKChtZW1vLCBwYXRoKSA9PiB7XG4gICAgICAgICAgLy8gU3BsaXQgZWFjaCBwYXRocyBvbiAuIChhLmIuYyAtPiBbYSxiLGNdKVxuICAgICAgICAgIC8vIHJlZHVjZSB0byBjcmVhdGUgYWxsIHBhdGhzXG4gICAgICAgICAgLy8gKFthLGIsY10gLT4ge2E6IHRydWUsICdhLmInOiB0cnVlLCAnYS5iLmMnOiB0cnVlfSlcbiAgICAgICAgICByZXR1cm4gcGF0aC5zcGxpdCgnLicpLnJlZHVjZSgobWVtbywgcGF0aCwgaW5kZXgsIHBhcnRzKSA9PiB7XG4gICAgICAgICAgICBtZW1vW3BhcnRzLnNsaWNlKDAsIGluZGV4ICsgMSkuam9pbignLicpXSA9IHRydWU7XG4gICAgICAgICAgICByZXR1cm4gbWVtbztcbiAgICAgICAgICB9LCBtZW1vKTtcbiAgICAgICAgfSwge30pO1xuXG4gICAgICAgIHRoaXMuaW5jbHVkZSA9IE9iamVjdC5rZXlzKHBhdGhTZXQpXG4gICAgICAgICAgLm1hcChzID0+IHtcbiAgICAgICAgICAgIHJldHVybiBzLnNwbGl0KCcuJyk7XG4gICAgICAgICAgfSlcbiAgICAgICAgICAuc29ydCgoYSwgYikgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIGEubGVuZ3RoIC0gYi5sZW5ndGg7IC8vIFNvcnQgYnkgbnVtYmVyIG9mIGNvbXBvbmVudHNcbiAgICAgICAgICB9KTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBjYXNlICdyZWRpcmVjdENsYXNzTmFtZUZvcktleSc6XG4gICAgICAgIHRoaXMucmVkaXJlY3RLZXkgPSByZXN0T3B0aW9ucy5yZWRpcmVjdENsYXNzTmFtZUZvcktleTtcbiAgICAgICAgdGhpcy5yZWRpcmVjdENsYXNzTmFtZSA9IG51bGw7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnaW5jbHVkZVJlYWRQcmVmZXJlbmNlJzpcbiAgICAgIGNhc2UgJ3N1YnF1ZXJ5UmVhZFByZWZlcmVuY2UnOlxuICAgICAgICBicmVhaztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHRocm93IG5ldyBQYXJzZS5FcnJvcihQYXJzZS5FcnJvci5JTlZBTElEX0pTT04sICdiYWQgb3B0aW9uOiAnICsgb3B0aW9uKTtcbiAgICB9XG4gIH1cbn1cblxuLy8gQSBjb252ZW5pZW50IG1ldGhvZCB0byBwZXJmb3JtIGFsbCB0aGUgc3RlcHMgb2YgcHJvY2Vzc2luZyBhIHF1ZXJ5XG4vLyBpbiBvcmRlci5cbi8vIFJldHVybnMgYSBwcm9taXNlIGZvciB0aGUgcmVzcG9uc2UgLSBhbiBvYmplY3Qgd2l0aCBvcHRpb25hbCBrZXlzXG4vLyAncmVzdWx0cycgYW5kICdjb3VudCcuXG4vLyBUT0RPOiBjb25zb2xpZGF0ZSB0aGUgcmVwbGFjZVggZnVuY3Rpb25zXG5fVW5zYWZlUmVzdFF1ZXJ5LnByb3RvdHlwZS5leGVjdXRlID0gZnVuY3Rpb24gKGV4ZWN1dGVPcHRpb25zKSB7XG4gIHJldHVybiBQcm9taXNlLnJlc29sdmUoKVxuICAgIC50aGVuKCgpID0+IHtcbiAgICAgIHJldHVybiB0aGlzLnZhbGlkYXRlUXVlcnlEZXB0aCgpO1xuICAgIH0pXG4gICAgLnRoZW4oKCkgPT4ge1xuICAgICAgcmV0dXJuIHRoaXMuYnVpbGRSZXN0V2hlcmUoKTtcbiAgICB9KVxuICAgIC50aGVuKCgpID0+IHtcbiAgICAgIHJldHVybiB0aGlzLmRlbnlQcm90ZWN0ZWRGaWVsZHMoKTtcbiAgICB9KVxuICAgIC50aGVuKCgpID0+IHtcbiAgICAgIHJldHVybiB0aGlzLmhhbmRsZUluY2x1ZGVBbGwoKTtcbiAgICB9KVxuICAgIC50aGVuKCgpID0+IHtcbiAgICAgIHJldHVybiB0aGlzLnZhbGlkYXRlSW5jbHVkZUNvbXBsZXhpdHkoKTtcbiAgICB9KVxuICAgIC50aGVuKCgpID0+IHtcbiAgICAgIHJldHVybiB0aGlzLmhhbmRsZUV4Y2x1ZGVLZXlzKCk7XG4gICAgfSlcbiAgICAudGhlbigoKSA9PiB7XG4gICAgICByZXR1cm4gdGhpcy5ydW5GaW5kKGV4ZWN1dGVPcHRpb25zKTtcbiAgICB9KVxuICAgIC50aGVuKCgpID0+IHtcbiAgICAgIHJldHVybiB0aGlzLnJ1bkNvdW50KCk7XG4gICAgfSlcbiAgICAudGhlbigoKSA9PiB7XG4gICAgICByZXR1cm4gdGhpcy5oYW5kbGVJbmNsdWRlKCk7XG4gICAgfSlcbiAgICAudGhlbigoKSA9PiB7XG4gICAgICByZXR1cm4gdGhpcy5ydW5BZnRlckZpbmRUcmlnZ2VyKCk7XG4gICAgfSlcbiAgICAudGhlbigoKSA9PiB7XG4gICAgICByZXR1cm4gdGhpcy5oYW5kbGVBdXRoQWRhcHRlcnMoKTtcbiAgICB9KVxuICAgIC50aGVuKCgpID0+IHtcbiAgICAgIHJldHVybiB0aGlzLnJlc3BvbnNlO1xuICAgIH0pO1xufTtcblxuX1Vuc2FmZVJlc3RRdWVyeS5wcm90b3R5cGUuZWFjaCA9IGZ1bmN0aW9uIChjYWxsYmFjaykge1xuICBjb25zdCB7IGNvbmZpZywgYXV0aCwgY2xhc3NOYW1lLCByZXN0V2hlcmUsIHJlc3RPcHRpb25zLCBjbGllbnRTREsgfSA9IHRoaXM7XG4gIC8vIGlmIHRoZSBsaW1pdCBpcyBzZXQsIHVzZSBpdFxuICByZXN0T3B0aW9ucy5saW1pdCA9IHJlc3RPcHRpb25zLmxpbWl0IHx8IDEwMDtcbiAgcmVzdE9wdGlvbnMub3JkZXIgPSAnb2JqZWN0SWQnO1xuICBsZXQgZmluaXNoZWQgPSBmYWxzZTtcblxuICByZXR1cm4gY29udGludWVXaGlsZShcbiAgICAoKSA9PiB7XG4gICAgICByZXR1cm4gIWZpbmlzaGVkO1xuICAgIH0sXG4gICAgYXN5bmMgKCkgPT4ge1xuICAgICAgLy8gU2FmZSBoZXJlIHRvIHVzZSBfVW5zYWZlUmVzdFF1ZXJ5IGJlY2F1c2UgdGhlIHNlY3VyaXR5IHdhcyBhbHJlYWR5XG4gICAgICAvLyBjaGVja2VkIGR1cmluZyBcImF3YWl0IFJlc3RRdWVyeSgpXCJcbiAgICAgIGNvbnN0IHF1ZXJ5ID0gbmV3IF9VbnNhZmVSZXN0UXVlcnkoXG4gICAgICAgIGNvbmZpZyxcbiAgICAgICAgYXV0aCxcbiAgICAgICAgY2xhc3NOYW1lLFxuICAgICAgICByZXN0V2hlcmUsXG4gICAgICAgIHJlc3RPcHRpb25zLFxuICAgICAgICBjbGllbnRTREssXG4gICAgICAgIHRoaXMucnVuQWZ0ZXJGaW5kLFxuICAgICAgICB0aGlzLmNvbnRleHRcbiAgICAgICk7XG4gICAgICBjb25zdCB7IHJlc3VsdHMgfSA9IGF3YWl0IHF1ZXJ5LmV4ZWN1dGUoKTtcbiAgICAgIHJlc3VsdHMuZm9yRWFjaChjYWxsYmFjayk7XG4gICAgICBmaW5pc2hlZCA9IHJlc3VsdHMubGVuZ3RoIDwgcmVzdE9wdGlvbnMubGltaXQ7XG4gICAgICBpZiAoIWZpbmlzaGVkKSB7XG4gICAgICAgIHJlc3RXaGVyZS5vYmplY3RJZCA9IE9iamVjdC5hc3NpZ24oe30sIHJlc3RXaGVyZS5vYmplY3RJZCwge1xuICAgICAgICAgICRndDogcmVzdWx0c1tyZXN1bHRzLmxlbmd0aCAtIDFdLm9iamVjdElkLFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG4gICk7XG59O1xuXG5fVW5zYWZlUmVzdFF1ZXJ5LnByb3RvdHlwZS52YWxpZGF0ZVF1ZXJ5RGVwdGggPSBmdW5jdGlvbiAoKSB7XG4gIGlmICh0aGlzLmF1dGguaXNNYXN0ZXIgfHwgdGhpcy5hdXRoLmlzTWFpbnRlbmFuY2UpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgY29uc3QgcmMgPSB0aGlzLmNvbmZpZy5yZXF1ZXN0Q29tcGxleGl0eTtcbiAgaWYgKCFyYyB8fCByYy5xdWVyeURlcHRoID09PSAtMSkge1xuICAgIHJldHVybjtcbiAgfVxuICBjb25zdCBtYXhEZXB0aCA9IHJjLnF1ZXJ5RGVwdGg7XG4gIGNvbnN0IGNoZWNrRGVwdGggPSAod2hlcmUsIGRlcHRoKSA9PiB7XG4gICAgaWYgKGRlcHRoID4gbWF4RGVwdGgpIHtcbiAgICAgIHRocm93IG5ldyBQYXJzZS5FcnJvcihcbiAgICAgICAgUGFyc2UuRXJyb3IuSU5WQUxJRF9RVUVSWSxcbiAgICAgICAgYFF1ZXJ5IGNvbmRpdGlvbiBuZXN0aW5nIGRlcHRoIGV4Y2VlZHMgbWF4aW11bSBhbGxvd2VkIGRlcHRoIG9mICR7bWF4RGVwdGh9YFxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiB3aGVyZSAhPT0gJ29iamVjdCcgfHwgd2hlcmUgPT09IG51bGwpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgZm9yIChjb25zdCBvcCBvZiBbJyRvcicsICckYW5kJywgJyRub3InXSkge1xuICAgICAgaWYgKEFycmF5LmlzQXJyYXkod2hlcmVbb3BdKSkge1xuICAgICAgICBmb3IgKGNvbnN0IHN1YlF1ZXJ5IG9mIHdoZXJlW29wXSkge1xuICAgICAgICAgIGNoZWNrRGVwdGgoc3ViUXVlcnksIGRlcHRoICsgMSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH07XG4gIGNoZWNrRGVwdGgodGhpcy5yZXN0V2hlcmUsIDApO1xufTtcblxuX1Vuc2FmZVJlc3RRdWVyeS5wcm90b3R5cGUuYnVpbGRSZXN0V2hlcmUgPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiBQcm9taXNlLnJlc29sdmUoKVxuICAgIC50aGVuKCgpID0+IHtcbiAgICAgIHJldHVybiB0aGlzLmdldFVzZXJBbmRSb2xlQUNMKCk7XG4gICAgfSlcbiAgICAudGhlbigoKSA9PiB7XG4gICAgICByZXR1cm4gdGhpcy5yZWRpcmVjdENsYXNzTmFtZUZvcktleSgpO1xuICAgIH0pXG4gICAgLnRoZW4oKCkgPT4ge1xuICAgICAgcmV0dXJuIHRoaXMudmFsaWRhdGVDbGllbnRDbGFzc0NyZWF0aW9uKCk7XG4gICAgfSlcbiAgICAudGhlbigoKSA9PiB7XG4gICAgICByZXR1cm4gdGhpcy5jaGVja1N1YnF1ZXJ5RGVwdGgoKTtcbiAgICB9KVxuICAgIC50aGVuKCgpID0+IHtcbiAgICAgIHJldHVybiB0aGlzLnJlcGxhY2VTZWxlY3QoKTtcbiAgICB9KVxuICAgIC50aGVuKCgpID0+IHtcbiAgICAgIHJldHVybiB0aGlzLnJlcGxhY2VEb250U2VsZWN0KCk7XG4gICAgfSlcbiAgICAudGhlbigoKSA9PiB7XG4gICAgICByZXR1cm4gdGhpcy5yZXBsYWNlSW5RdWVyeSgpO1xuICAgIH0pXG4gICAgLnRoZW4oKCkgPT4ge1xuICAgICAgcmV0dXJuIHRoaXMucmVwbGFjZU5vdEluUXVlcnkoKTtcbiAgICB9KVxuICAgIC50aGVuKCgpID0+IHtcbiAgICAgIHJldHVybiB0aGlzLnJlcGxhY2VFcXVhbGl0eSgpO1xuICAgIH0pO1xufTtcblxuLy8gVXNlcyB0aGUgQXV0aCBvYmplY3QgdG8gZ2V0IHRoZSBsaXN0IG9mIHJvbGVzLCBhZGRzIHRoZSB1c2VyIGlkXG5fVW5zYWZlUmVzdFF1ZXJ5LnByb3RvdHlwZS5nZXRVc2VyQW5kUm9sZUFDTCA9IGZ1bmN0aW9uICgpIHtcbiAgaWYgKHRoaXMuYXV0aC5pc01hc3Rlcikge1xuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcbiAgfVxuXG4gIHRoaXMuZmluZE9wdGlvbnMuYWNsID0gWycqJ107XG5cbiAgaWYgKHRoaXMuYXV0aC51c2VyKSB7XG4gICAgcmV0dXJuIHRoaXMuYXV0aC5nZXRVc2VyUm9sZXMoKS50aGVuKHJvbGVzID0+IHtcbiAgICAgIHRoaXMuZmluZE9wdGlvbnMuYWNsID0gdGhpcy5maW5kT3B0aW9ucy5hY2wuY29uY2F0KHJvbGVzLCBbdGhpcy5hdXRoLnVzZXIuaWRdKTtcbiAgICAgIHJldHVybjtcbiAgICB9KTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG4gIH1cbn07XG5cbi8vIENoYW5nZXMgdGhlIGNsYXNzTmFtZSBpZiByZWRpcmVjdENsYXNzTmFtZUZvcktleSBpcyBzZXQuXG4vLyBSZXR1cm5zIGEgcHJvbWlzZS5cbl9VbnNhZmVSZXN0UXVlcnkucHJvdG90eXBlLnJlZGlyZWN0Q2xhc3NOYW1lRm9yS2V5ID0gZnVuY3Rpb24gKCkge1xuICBpZiAoIXRoaXMucmVkaXJlY3RLZXkpIHtcbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG4gIH1cblxuICAvLyBXZSBuZWVkIHRvIGNoYW5nZSB0aGUgY2xhc3MgbmFtZSBiYXNlZCBvbiB0aGUgc2NoZW1hXG4gIHJldHVybiB0aGlzLmNvbmZpZy5kYXRhYmFzZVxuICAgIC5yZWRpcmVjdENsYXNzTmFtZUZvcktleSh0aGlzLmNsYXNzTmFtZSwgdGhpcy5yZWRpcmVjdEtleSlcbiAgICAudGhlbihuZXdDbGFzc05hbWUgPT4ge1xuICAgICAgdGhpcy5jbGFzc05hbWUgPSBuZXdDbGFzc05hbWU7XG4gICAgICB0aGlzLnJlZGlyZWN0Q2xhc3NOYW1lID0gbmV3Q2xhc3NOYW1lO1xuXG4gICAgICAvLyBSZS1hcHBseSBzZWN1cml0eSBjaGVja3MgZm9yIHRoZSByZWRpcmVjdGVkIGNsYXNzIG5hbWUsIHNpbmNlIHRoZVxuICAgICAgLy8gY2hlY2tzIGluIHRoZSBjb25zdHJ1Y3RvciBhbmQgaW4gcmVzdC5maW5kIHJhbiBhZ2FpbnN0IHRoZSBvcmlnaW5hbFxuICAgICAgLy8gY2xhc3MgbmFtZSBiZWZvcmUgdGhlIHJlZGlyZWN0LlxuICAgICAgaWYgKCF0aGlzLmF1dGguaXNNYXN0ZXIpIHtcbiAgICAgICAgZW5mb3JjZVJvbGVTZWN1cml0eSgnZmluZCcsIHRoaXMuY2xhc3NOYW1lLCB0aGlzLmF1dGgsIHRoaXMuY29uZmlnKTtcblxuICAgICAgICBpZiAodGhpcy5jbGFzc05hbWUgPT09ICdfU2Vzc2lvbicpIHtcbiAgICAgICAgICBpZiAoIXRoaXMuYXV0aC51c2VyKSB7XG4gICAgICAgICAgICB0aHJvdyBjcmVhdGVTYW5pdGl6ZWRFcnJvcihcbiAgICAgICAgICAgICAgUGFyc2UuRXJyb3IuSU5WQUxJRF9TRVNTSU9OX1RPS0VOLFxuICAgICAgICAgICAgICAnSW52YWxpZCBzZXNzaW9uIHRva2VuJyxcbiAgICAgICAgICAgICAgdGhpcy5jb25maWdcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMucmVzdFdoZXJlID0ge1xuICAgICAgICAgICAgJGFuZDogW1xuICAgICAgICAgICAgICB0aGlzLnJlc3RXaGVyZSxcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHVzZXI6IHtcbiAgICAgICAgICAgICAgICAgIF9fdHlwZTogJ1BvaW50ZXInLFxuICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lOiAnX1VzZXInLFxuICAgICAgICAgICAgICAgICAgb2JqZWN0SWQ6IHRoaXMuYXV0aC51c2VyLmlkLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBdLFxuICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbn07XG5cbi8vIFZhbGlkYXRlcyB0aGlzIG9wZXJhdGlvbiBhZ2FpbnN0IHRoZSBhbGxvd0NsaWVudENsYXNzQ3JlYXRpb24gY29uZmlnLlxuX1Vuc2FmZVJlc3RRdWVyeS5wcm90b3R5cGUudmFsaWRhdGVDbGllbnRDbGFzc0NyZWF0aW9uID0gZnVuY3Rpb24gKCkge1xuICBpZiAoXG4gICAgdGhpcy5jb25maWcuYWxsb3dDbGllbnRDbGFzc0NyZWF0aW9uID09PSBmYWxzZSAmJlxuICAgICF0aGlzLmF1dGguaXNNYXN0ZXIgJiZcbiAgICBTY2hlbWFDb250cm9sbGVyLnN5c3RlbUNsYXNzZXMuaW5kZXhPZih0aGlzLmNsYXNzTmFtZSkgPT09IC0xXG4gICkge1xuICAgIHJldHVybiB0aGlzLmNvbmZpZy5kYXRhYmFzZVxuICAgICAgLmxvYWRTY2hlbWEoKVxuICAgICAgLnRoZW4oc2NoZW1hQ29udHJvbGxlciA9PiBzY2hlbWFDb250cm9sbGVyLmhhc0NsYXNzKHRoaXMuY2xhc3NOYW1lKSlcbiAgICAgIC50aGVuKGhhc0NsYXNzID0+IHtcbiAgICAgICAgaWYgKGhhc0NsYXNzICE9PSB0cnVlKSB7XG4gICAgICAgICAgdGhyb3cgY3JlYXRlU2FuaXRpemVkRXJyb3IoXG4gICAgICAgICAgICBQYXJzZS5FcnJvci5PUEVSQVRJT05fRk9SQklEREVOLFxuICAgICAgICAgICAgJ1RoaXMgdXNlciBpcyBub3QgYWxsb3dlZCB0byBhY2Nlc3MgJyArICdub24tZXhpc3RlbnQgY2xhc3M6ICcgKyB0aGlzLmNsYXNzTmFtZSxcbiAgICAgICAgICAgIHRoaXMuY29uZmlnXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuICB9XG59O1xuXG5mdW5jdGlvbiB0cmFuc2Zvcm1JblF1ZXJ5KGluUXVlcnlPYmplY3QsIGNsYXNzTmFtZSwgcmVzdWx0cykge1xuICB2YXIgdmFsdWVzID0gW107XG4gIGZvciAodmFyIHJlc3VsdCBvZiByZXN1bHRzKSB7XG4gICAgdmFsdWVzLnB1c2goe1xuICAgICAgX190eXBlOiAnUG9pbnRlcicsXG4gICAgICBjbGFzc05hbWU6IGNsYXNzTmFtZSxcbiAgICAgIG9iamVjdElkOiByZXN1bHQub2JqZWN0SWQsXG4gICAgfSk7XG4gIH1cbiAgZGVsZXRlIGluUXVlcnlPYmplY3RbJyRpblF1ZXJ5J107XG4gIGlmIChBcnJheS5pc0FycmF5KGluUXVlcnlPYmplY3RbJyRpbiddKSkge1xuICAgIGluUXVlcnlPYmplY3RbJyRpbiddID0gaW5RdWVyeU9iamVjdFsnJGluJ10uY29uY2F0KHZhbHVlcyk7XG4gIH0gZWxzZSB7XG4gICAgaW5RdWVyeU9iamVjdFsnJGluJ10gPSB2YWx1ZXM7XG4gIH1cbn1cblxuX1Vuc2FmZVJlc3RRdWVyeS5wcm90b3R5cGUuY2hlY2tTdWJxdWVyeURlcHRoID0gZnVuY3Rpb24gKCkge1xuICBpZiAodGhpcy5hdXRoLmlzTWFzdGVyIHx8IHRoaXMuYXV0aC5pc01haW50ZW5hbmNlKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIGNvbnN0IHJjID0gdGhpcy5jb25maWcucmVxdWVzdENvbXBsZXhpdHk7XG4gIGlmICghcmMgfHwgcmMuc3VicXVlcnlEZXB0aCA9PT0gLTEpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgY29uc3QgZGVwdGggPSB0aGlzLmNvbnRleHQuX3N1YnF1ZXJ5RGVwdGggfHwgMDtcbiAgaWYgKGRlcHRoID4gcmMuc3VicXVlcnlEZXB0aCkge1xuICAgIGNvbnN0IG1lc3NhZ2UgPSBgU3VicXVlcnkgbmVzdGluZyBkZXB0aCBleGNlZWRzIG1heGltdW0gYWxsb3dlZCBkZXB0aCBvZiAke3JjLnN1YnF1ZXJ5RGVwdGh9YDtcbiAgICBsb2dnZXIud2FybihtZXNzYWdlKTtcbiAgICB0aHJvdyBuZXcgUGFyc2UuRXJyb3IoUGFyc2UuRXJyb3IuSU5WQUxJRF9RVUVSWSwgbWVzc2FnZSk7XG4gIH1cbn07XG5cbi8vIFJlcGxhY2VzIGEgJGluUXVlcnkgY2xhdXNlIGJ5IHJ1bm5pbmcgdGhlIHN1YnF1ZXJ5LCBpZiB0aGVyZSBpcyBhblxuLy8gJGluUXVlcnkgY2xhdXNlLlxuLy8gVGhlICRpblF1ZXJ5IGNsYXVzZSB0dXJucyBpbnRvIGFuICRpbiB3aXRoIHZhbHVlcyB0aGF0IGFyZSBqdXN0XG4vLyBwb2ludGVycyB0byB0aGUgb2JqZWN0cyByZXR1cm5lZCBpbiB0aGUgc3VicXVlcnkuXG5fVW5zYWZlUmVzdFF1ZXJ5LnByb3RvdHlwZS5yZXBsYWNlSW5RdWVyeSA9IGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgdmFyIGluUXVlcnlPYmplY3QgPSBmaW5kT2JqZWN0V2l0aEtleSh0aGlzLnJlc3RXaGVyZSwgJyRpblF1ZXJ5Jyk7XG4gIGlmICghaW5RdWVyeU9iamVjdCkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8vIFRoZSBpblF1ZXJ5IHZhbHVlIG11c3QgaGF2ZSBwcmVjaXNlbHkgdHdvIGtleXMgLSB3aGVyZSBhbmQgY2xhc3NOYW1lXG4gIHZhciBpblF1ZXJ5VmFsdWUgPSBpblF1ZXJ5T2JqZWN0WyckaW5RdWVyeSddO1xuICBpZiAoIWluUXVlcnlWYWx1ZS53aGVyZSB8fCAhaW5RdWVyeVZhbHVlLmNsYXNzTmFtZSkge1xuICAgIHRocm93IG5ldyBQYXJzZS5FcnJvcihQYXJzZS5FcnJvci5JTlZBTElEX1FVRVJZLCAnaW1wcm9wZXIgdXNhZ2Ugb2YgJGluUXVlcnknKTtcbiAgfVxuXG4gIGNvbnN0IGFkZGl0aW9uYWxPcHRpb25zID0ge1xuICAgIHJlZGlyZWN0Q2xhc3NOYW1lRm9yS2V5OiBpblF1ZXJ5VmFsdWUucmVkaXJlY3RDbGFzc05hbWVGb3JLZXksXG4gIH07XG5cbiAgaWYgKHRoaXMucmVzdE9wdGlvbnMuc3VicXVlcnlSZWFkUHJlZmVyZW5jZSkge1xuICAgIGFkZGl0aW9uYWxPcHRpb25zLnJlYWRQcmVmZXJlbmNlID0gdGhpcy5yZXN0T3B0aW9ucy5zdWJxdWVyeVJlYWRQcmVmZXJlbmNlO1xuICAgIGFkZGl0aW9uYWxPcHRpb25zLnN1YnF1ZXJ5UmVhZFByZWZlcmVuY2UgPSB0aGlzLnJlc3RPcHRpb25zLnN1YnF1ZXJ5UmVhZFByZWZlcmVuY2U7XG4gIH0gZWxzZSBpZiAodGhpcy5yZXN0T3B0aW9ucy5yZWFkUHJlZmVyZW5jZSkge1xuICAgIGFkZGl0aW9uYWxPcHRpb25zLnJlYWRQcmVmZXJlbmNlID0gdGhpcy5yZXN0T3B0aW9ucy5yZWFkUHJlZmVyZW5jZTtcbiAgfVxuXG4gIGNvbnN0IGNoaWxkQ29udGV4dCA9IHsgLi4udGhpcy5jb250ZXh0LCBfc3VicXVlcnlEZXB0aDogKHRoaXMuY29udGV4dC5fc3VicXVlcnlEZXB0aCB8fCAwKSArIDEgfTtcbiAgY29uc3Qgc3VicXVlcnkgPSBhd2FpdCBSZXN0UXVlcnkoe1xuICAgIG1ldGhvZDogUmVzdFF1ZXJ5Lk1ldGhvZC5maW5kLFxuICAgIGNvbmZpZzogdGhpcy5jb25maWcsXG4gICAgYXV0aDogdGhpcy5hdXRoLFxuICAgIGNsYXNzTmFtZTogaW5RdWVyeVZhbHVlLmNsYXNzTmFtZSxcbiAgICByZXN0V2hlcmU6IGluUXVlcnlWYWx1ZS53aGVyZSxcbiAgICByZXN0T3B0aW9uczogYWRkaXRpb25hbE9wdGlvbnMsXG4gICAgY29udGV4dDogY2hpbGRDb250ZXh0LFxuICB9KTtcbiAgcmV0dXJuIHN1YnF1ZXJ5LmV4ZWN1dGUoKS50aGVuKHJlc3BvbnNlID0+IHtcbiAgICB0cmFuc2Zvcm1JblF1ZXJ5KGluUXVlcnlPYmplY3QsIHN1YnF1ZXJ5LmNsYXNzTmFtZSwgcmVzcG9uc2UucmVzdWx0cyk7XG4gICAgLy8gUmVjdXJzZSB0byByZXBlYXRcbiAgICByZXR1cm4gdGhpcy5yZXBsYWNlSW5RdWVyeSgpO1xuICB9KTtcbn07XG5cbmZ1bmN0aW9uIHRyYW5zZm9ybU5vdEluUXVlcnkobm90SW5RdWVyeU9iamVjdCwgY2xhc3NOYW1lLCByZXN1bHRzKSB7XG4gIHZhciB2YWx1ZXMgPSBbXTtcbiAgZm9yICh2YXIgcmVzdWx0IG9mIHJlc3VsdHMpIHtcbiAgICB2YWx1ZXMucHVzaCh7XG4gICAgICBfX3R5cGU6ICdQb2ludGVyJyxcbiAgICAgIGNsYXNzTmFtZTogY2xhc3NOYW1lLFxuICAgICAgb2JqZWN0SWQ6IHJlc3VsdC5vYmplY3RJZCxcbiAgICB9KTtcbiAgfVxuICBkZWxldGUgbm90SW5RdWVyeU9iamVjdFsnJG5vdEluUXVlcnknXTtcbiAgaWYgKEFycmF5LmlzQXJyYXkobm90SW5RdWVyeU9iamVjdFsnJG5pbiddKSkge1xuICAgIG5vdEluUXVlcnlPYmplY3RbJyRuaW4nXSA9IG5vdEluUXVlcnlPYmplY3RbJyRuaW4nXS5jb25jYXQodmFsdWVzKTtcbiAgfSBlbHNlIHtcbiAgICBub3RJblF1ZXJ5T2JqZWN0WyckbmluJ10gPSB2YWx1ZXM7XG4gIH1cbn1cblxuLy8gUmVwbGFjZXMgYSAkbm90SW5RdWVyeSBjbGF1c2UgYnkgcnVubmluZyB0aGUgc3VicXVlcnksIGlmIHRoZXJlIGlzIGFuXG4vLyAkbm90SW5RdWVyeSBjbGF1c2UuXG4vLyBUaGUgJG5vdEluUXVlcnkgY2xhdXNlIHR1cm5zIGludG8gYSAkbmluIHdpdGggdmFsdWVzIHRoYXQgYXJlIGp1c3Rcbi8vIHBvaW50ZXJzIHRvIHRoZSBvYmplY3RzIHJldHVybmVkIGluIHRoZSBzdWJxdWVyeS5cbl9VbnNhZmVSZXN0UXVlcnkucHJvdG90eXBlLnJlcGxhY2VOb3RJblF1ZXJ5ID0gYXN5bmMgZnVuY3Rpb24gKCkge1xuICB2YXIgbm90SW5RdWVyeU9iamVjdCA9IGZpbmRPYmplY3RXaXRoS2V5KHRoaXMucmVzdFdoZXJlLCAnJG5vdEluUXVlcnknKTtcbiAgaWYgKCFub3RJblF1ZXJ5T2JqZWN0KSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLy8gVGhlIG5vdEluUXVlcnkgdmFsdWUgbXVzdCBoYXZlIHByZWNpc2VseSB0d28ga2V5cyAtIHdoZXJlIGFuZCBjbGFzc05hbWVcbiAgdmFyIG5vdEluUXVlcnlWYWx1ZSA9IG5vdEluUXVlcnlPYmplY3RbJyRub3RJblF1ZXJ5J107XG4gIGlmICghbm90SW5RdWVyeVZhbHVlLndoZXJlIHx8ICFub3RJblF1ZXJ5VmFsdWUuY2xhc3NOYW1lKSB7XG4gICAgdGhyb3cgbmV3IFBhcnNlLkVycm9yKFBhcnNlLkVycm9yLklOVkFMSURfUVVFUlksICdpbXByb3BlciB1c2FnZSBvZiAkbm90SW5RdWVyeScpO1xuICB9XG5cbiAgY29uc3QgYWRkaXRpb25hbE9wdGlvbnMgPSB7XG4gICAgcmVkaXJlY3RDbGFzc05hbWVGb3JLZXk6IG5vdEluUXVlcnlWYWx1ZS5yZWRpcmVjdENsYXNzTmFtZUZvcktleSxcbiAgfTtcblxuICBpZiAodGhpcy5yZXN0T3B0aW9ucy5zdWJxdWVyeVJlYWRQcmVmZXJlbmNlKSB7XG4gICAgYWRkaXRpb25hbE9wdGlvbnMucmVhZFByZWZlcmVuY2UgPSB0aGlzLnJlc3RPcHRpb25zLnN1YnF1ZXJ5UmVhZFByZWZlcmVuY2U7XG4gICAgYWRkaXRpb25hbE9wdGlvbnMuc3VicXVlcnlSZWFkUHJlZmVyZW5jZSA9IHRoaXMucmVzdE9wdGlvbnMuc3VicXVlcnlSZWFkUHJlZmVyZW5jZTtcbiAgfSBlbHNlIGlmICh0aGlzLnJlc3RPcHRpb25zLnJlYWRQcmVmZXJlbmNlKSB7XG4gICAgYWRkaXRpb25hbE9wdGlvbnMucmVhZFByZWZlcmVuY2UgPSB0aGlzLnJlc3RPcHRpb25zLnJlYWRQcmVmZXJlbmNlO1xuICB9XG5cbiAgY29uc3QgY2hpbGRDb250ZXh0ID0geyAuLi50aGlzLmNvbnRleHQsIF9zdWJxdWVyeURlcHRoOiAodGhpcy5jb250ZXh0Ll9zdWJxdWVyeURlcHRoIHx8IDApICsgMSB9O1xuICBjb25zdCBzdWJxdWVyeSA9IGF3YWl0IFJlc3RRdWVyeSh7XG4gICAgbWV0aG9kOiBSZXN0UXVlcnkuTWV0aG9kLmZpbmQsXG4gICAgY29uZmlnOiB0aGlzLmNvbmZpZyxcbiAgICBhdXRoOiB0aGlzLmF1dGgsXG4gICAgY2xhc3NOYW1lOiBub3RJblF1ZXJ5VmFsdWUuY2xhc3NOYW1lLFxuICAgIHJlc3RXaGVyZTogbm90SW5RdWVyeVZhbHVlLndoZXJlLFxuICAgIHJlc3RPcHRpb25zOiBhZGRpdGlvbmFsT3B0aW9ucyxcbiAgICBjb250ZXh0OiBjaGlsZENvbnRleHQsXG4gIH0pO1xuXG4gIHJldHVybiBzdWJxdWVyeS5leGVjdXRlKCkudGhlbihyZXNwb25zZSA9PiB7XG4gICAgdHJhbnNmb3JtTm90SW5RdWVyeShub3RJblF1ZXJ5T2JqZWN0LCBzdWJxdWVyeS5jbGFzc05hbWUsIHJlc3BvbnNlLnJlc3VsdHMpO1xuICAgIC8vIFJlY3Vyc2UgdG8gcmVwZWF0XG4gICAgcmV0dXJuIHRoaXMucmVwbGFjZU5vdEluUXVlcnkoKTtcbiAgfSk7XG59O1xuXG4vLyBVc2VkIHRvIGdldCB0aGUgZGVlcGVzdCBvYmplY3QgZnJvbSBqc29uIHVzaW5nIGRvdCBub3RhdGlvbi5cbmNvbnN0IGdldERlZXBlc3RPYmplY3RGcm9tS2V5ID0gKGpzb24sIGtleSwgaWR4LCBzcmMpID0+IHtcbiAgaWYgKGtleSBpbiBqc29uKSB7XG4gICAgcmV0dXJuIGpzb25ba2V5XTtcbiAgfVxuICBzcmMuc3BsaWNlKDEpOyAvLyBFeGl0IEVhcmx5XG59O1xuXG5jb25zdCB0cmFuc2Zvcm1TZWxlY3QgPSAoc2VsZWN0T2JqZWN0LCBrZXksIG9iamVjdHMpID0+IHtcbiAgdmFyIHZhbHVlcyA9IFtdO1xuICBmb3IgKHZhciByZXN1bHQgb2Ygb2JqZWN0cykge1xuICAgIHZhbHVlcy5wdXNoKGtleS5zcGxpdCgnLicpLnJlZHVjZShnZXREZWVwZXN0T2JqZWN0RnJvbUtleSwgcmVzdWx0KSk7XG4gIH1cbiAgZGVsZXRlIHNlbGVjdE9iamVjdFsnJHNlbGVjdCddO1xuICBpZiAoQXJyYXkuaXNBcnJheShzZWxlY3RPYmplY3RbJyRpbiddKSkge1xuICAgIHNlbGVjdE9iamVjdFsnJGluJ10gPSBzZWxlY3RPYmplY3RbJyRpbiddLmNvbmNhdCh2YWx1ZXMpO1xuICB9IGVsc2Uge1xuICAgIHNlbGVjdE9iamVjdFsnJGluJ10gPSB2YWx1ZXM7XG4gIH1cbn07XG5cbi8vIFJlcGxhY2VzIGEgJHNlbGVjdCBjbGF1c2UgYnkgcnVubmluZyB0aGUgc3VicXVlcnksIGlmIHRoZXJlIGlzIGFcbi8vICRzZWxlY3QgY2xhdXNlLlxuLy8gVGhlICRzZWxlY3QgY2xhdXNlIHR1cm5zIGludG8gYW4gJGluIHdpdGggdmFsdWVzIHNlbGVjdGVkIG91dCBvZlxuLy8gdGhlIHN1YnF1ZXJ5LlxuLy8gUmV0dXJucyBhIHBvc3NpYmxlLXByb21pc2UuXG5fVW5zYWZlUmVzdFF1ZXJ5LnByb3RvdHlwZS5yZXBsYWNlU2VsZWN0ID0gYXN5bmMgZnVuY3Rpb24gKCkge1xuICB2YXIgc2VsZWN0T2JqZWN0ID0gZmluZE9iamVjdFdpdGhLZXkodGhpcy5yZXN0V2hlcmUsICckc2VsZWN0Jyk7XG4gIGlmICghc2VsZWN0T2JqZWN0KSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLy8gVGhlIHNlbGVjdCB2YWx1ZSBtdXN0IGhhdmUgcHJlY2lzZWx5IHR3byBrZXlzIC0gcXVlcnkgYW5kIGtleVxuICB2YXIgc2VsZWN0VmFsdWUgPSBzZWxlY3RPYmplY3RbJyRzZWxlY3QnXTtcbiAgLy8gaU9TIFNESyBkb24ndCBzZW5kIHdoZXJlIGlmIG5vdCBzZXQsIGxldCBpdCBwYXNzXG4gIGlmIChcbiAgICAhc2VsZWN0VmFsdWUucXVlcnkgfHxcbiAgICAhc2VsZWN0VmFsdWUua2V5IHx8XG4gICAgdHlwZW9mIHNlbGVjdFZhbHVlLnF1ZXJ5ICE9PSAnb2JqZWN0JyB8fFxuICAgICFzZWxlY3RWYWx1ZS5xdWVyeS5jbGFzc05hbWUgfHxcbiAgICBPYmplY3Qua2V5cyhzZWxlY3RWYWx1ZSkubGVuZ3RoICE9PSAyXG4gICkge1xuICAgIHRocm93IG5ldyBQYXJzZS5FcnJvcihQYXJzZS5FcnJvci5JTlZBTElEX1FVRVJZLCAnaW1wcm9wZXIgdXNhZ2Ugb2YgJHNlbGVjdCcpO1xuICB9XG5cbiAgY29uc3QgYWRkaXRpb25hbE9wdGlvbnMgPSB7XG4gICAgcmVkaXJlY3RDbGFzc05hbWVGb3JLZXk6IHNlbGVjdFZhbHVlLnF1ZXJ5LnJlZGlyZWN0Q2xhc3NOYW1lRm9yS2V5LFxuICB9O1xuXG4gIGlmICh0aGlzLnJlc3RPcHRpb25zLnN1YnF1ZXJ5UmVhZFByZWZlcmVuY2UpIHtcbiAgICBhZGRpdGlvbmFsT3B0aW9ucy5yZWFkUHJlZmVyZW5jZSA9IHRoaXMucmVzdE9wdGlvbnMuc3VicXVlcnlSZWFkUHJlZmVyZW5jZTtcbiAgICBhZGRpdGlvbmFsT3B0aW9ucy5zdWJxdWVyeVJlYWRQcmVmZXJlbmNlID0gdGhpcy5yZXN0T3B0aW9ucy5zdWJxdWVyeVJlYWRQcmVmZXJlbmNlO1xuICB9IGVsc2UgaWYgKHRoaXMucmVzdE9wdGlvbnMucmVhZFByZWZlcmVuY2UpIHtcbiAgICBhZGRpdGlvbmFsT3B0aW9ucy5yZWFkUHJlZmVyZW5jZSA9IHRoaXMucmVzdE9wdGlvbnMucmVhZFByZWZlcmVuY2U7XG4gIH1cblxuICBjb25zdCBjaGlsZENvbnRleHQgPSB7IC4uLnRoaXMuY29udGV4dCwgX3N1YnF1ZXJ5RGVwdGg6ICh0aGlzLmNvbnRleHQuX3N1YnF1ZXJ5RGVwdGggfHwgMCkgKyAxIH07XG4gIGNvbnN0IHN1YnF1ZXJ5ID0gYXdhaXQgUmVzdFF1ZXJ5KHtcbiAgICBtZXRob2Q6IFJlc3RRdWVyeS5NZXRob2QuZmluZCxcbiAgICBjb25maWc6IHRoaXMuY29uZmlnLFxuICAgIGF1dGg6IHRoaXMuYXV0aCxcbiAgICBjbGFzc05hbWU6IHNlbGVjdFZhbHVlLnF1ZXJ5LmNsYXNzTmFtZSxcbiAgICByZXN0V2hlcmU6IHNlbGVjdFZhbHVlLnF1ZXJ5LndoZXJlLFxuICAgIHJlc3RPcHRpb25zOiBhZGRpdGlvbmFsT3B0aW9ucyxcbiAgICBjb250ZXh0OiBjaGlsZENvbnRleHQsXG4gIH0pO1xuXG4gIHJldHVybiBzdWJxdWVyeS5leGVjdXRlKCkudGhlbihyZXNwb25zZSA9PiB7XG4gICAgdHJhbnNmb3JtU2VsZWN0KHNlbGVjdE9iamVjdCwgc2VsZWN0VmFsdWUua2V5LCByZXNwb25zZS5yZXN1bHRzKTtcbiAgICAvLyBLZWVwIHJlcGxhY2luZyAkc2VsZWN0IGNsYXVzZXNcbiAgICByZXR1cm4gdGhpcy5yZXBsYWNlU2VsZWN0KCk7XG4gIH0pO1xufTtcblxuY29uc3QgdHJhbnNmb3JtRG9udFNlbGVjdCA9IChkb250U2VsZWN0T2JqZWN0LCBrZXksIG9iamVjdHMpID0+IHtcbiAgdmFyIHZhbHVlcyA9IFtdO1xuICBmb3IgKHZhciByZXN1bHQgb2Ygb2JqZWN0cykge1xuICAgIHZhbHVlcy5wdXNoKGtleS5zcGxpdCgnLicpLnJlZHVjZShnZXREZWVwZXN0T2JqZWN0RnJvbUtleSwgcmVzdWx0KSk7XG4gIH1cbiAgZGVsZXRlIGRvbnRTZWxlY3RPYmplY3RbJyRkb250U2VsZWN0J107XG4gIGlmIChBcnJheS5pc0FycmF5KGRvbnRTZWxlY3RPYmplY3RbJyRuaW4nXSkpIHtcbiAgICBkb250U2VsZWN0T2JqZWN0WyckbmluJ10gPSBkb250U2VsZWN0T2JqZWN0WyckbmluJ10uY29uY2F0KHZhbHVlcyk7XG4gIH0gZWxzZSB7XG4gICAgZG9udFNlbGVjdE9iamVjdFsnJG5pbiddID0gdmFsdWVzO1xuICB9XG59O1xuXG4vLyBSZXBsYWNlcyBhICRkb250U2VsZWN0IGNsYXVzZSBieSBydW5uaW5nIHRoZSBzdWJxdWVyeSwgaWYgdGhlcmUgaXMgYVxuLy8gJGRvbnRTZWxlY3QgY2xhdXNlLlxuLy8gVGhlICRkb250U2VsZWN0IGNsYXVzZSB0dXJucyBpbnRvIGFuICRuaW4gd2l0aCB2YWx1ZXMgc2VsZWN0ZWQgb3V0IG9mXG4vLyB0aGUgc3VicXVlcnkuXG4vLyBSZXR1cm5zIGEgcG9zc2libGUtcHJvbWlzZS5cbl9VbnNhZmVSZXN0UXVlcnkucHJvdG90eXBlLnJlcGxhY2VEb250U2VsZWN0ID0gYXN5bmMgZnVuY3Rpb24gKCkge1xuICB2YXIgZG9udFNlbGVjdE9iamVjdCA9IGZpbmRPYmplY3RXaXRoS2V5KHRoaXMucmVzdFdoZXJlLCAnJGRvbnRTZWxlY3QnKTtcbiAgaWYgKCFkb250U2VsZWN0T2JqZWN0KSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLy8gVGhlIGRvbnRTZWxlY3QgdmFsdWUgbXVzdCBoYXZlIHByZWNpc2VseSB0d28ga2V5cyAtIHF1ZXJ5IGFuZCBrZXlcbiAgdmFyIGRvbnRTZWxlY3RWYWx1ZSA9IGRvbnRTZWxlY3RPYmplY3RbJyRkb250U2VsZWN0J107XG4gIGlmIChcbiAgICAhZG9udFNlbGVjdFZhbHVlLnF1ZXJ5IHx8XG4gICAgIWRvbnRTZWxlY3RWYWx1ZS5rZXkgfHxcbiAgICB0eXBlb2YgZG9udFNlbGVjdFZhbHVlLnF1ZXJ5ICE9PSAnb2JqZWN0JyB8fFxuICAgICFkb250U2VsZWN0VmFsdWUucXVlcnkuY2xhc3NOYW1lIHx8XG4gICAgT2JqZWN0LmtleXMoZG9udFNlbGVjdFZhbHVlKS5sZW5ndGggIT09IDJcbiAgKSB7XG4gICAgdGhyb3cgbmV3IFBhcnNlLkVycm9yKFBhcnNlLkVycm9yLklOVkFMSURfUVVFUlksICdpbXByb3BlciB1c2FnZSBvZiAkZG9udFNlbGVjdCcpO1xuICB9XG4gIGNvbnN0IGFkZGl0aW9uYWxPcHRpb25zID0ge1xuICAgIHJlZGlyZWN0Q2xhc3NOYW1lRm9yS2V5OiBkb250U2VsZWN0VmFsdWUucXVlcnkucmVkaXJlY3RDbGFzc05hbWVGb3JLZXksXG4gIH07XG5cbiAgaWYgKHRoaXMucmVzdE9wdGlvbnMuc3VicXVlcnlSZWFkUHJlZmVyZW5jZSkge1xuICAgIGFkZGl0aW9uYWxPcHRpb25zLnJlYWRQcmVmZXJlbmNlID0gdGhpcy5yZXN0T3B0aW9ucy5zdWJxdWVyeVJlYWRQcmVmZXJlbmNlO1xuICAgIGFkZGl0aW9uYWxPcHRpb25zLnN1YnF1ZXJ5UmVhZFByZWZlcmVuY2UgPSB0aGlzLnJlc3RPcHRpb25zLnN1YnF1ZXJ5UmVhZFByZWZlcmVuY2U7XG4gIH0gZWxzZSBpZiAodGhpcy5yZXN0T3B0aW9ucy5yZWFkUHJlZmVyZW5jZSkge1xuICAgIGFkZGl0aW9uYWxPcHRpb25zLnJlYWRQcmVmZXJlbmNlID0gdGhpcy5yZXN0T3B0aW9ucy5yZWFkUHJlZmVyZW5jZTtcbiAgfVxuXG4gIGNvbnN0IGNoaWxkQ29udGV4dCA9IHsgLi4udGhpcy5jb250ZXh0LCBfc3VicXVlcnlEZXB0aDogKHRoaXMuY29udGV4dC5fc3VicXVlcnlEZXB0aCB8fCAwKSArIDEgfTtcbiAgY29uc3Qgc3VicXVlcnkgPSBhd2FpdCBSZXN0UXVlcnkoe1xuICAgIG1ldGhvZDogUmVzdFF1ZXJ5Lk1ldGhvZC5maW5kLFxuICAgIGNvbmZpZzogdGhpcy5jb25maWcsXG4gICAgYXV0aDogdGhpcy5hdXRoLFxuICAgIGNsYXNzTmFtZTogZG9udFNlbGVjdFZhbHVlLnF1ZXJ5LmNsYXNzTmFtZSxcbiAgICByZXN0V2hlcmU6IGRvbnRTZWxlY3RWYWx1ZS5xdWVyeS53aGVyZSxcbiAgICByZXN0T3B0aW9uczogYWRkaXRpb25hbE9wdGlvbnMsXG4gICAgY29udGV4dDogY2hpbGRDb250ZXh0LFxuICB9KTtcblxuICByZXR1cm4gc3VicXVlcnkuZXhlY3V0ZSgpLnRoZW4ocmVzcG9uc2UgPT4ge1xuICAgIHRyYW5zZm9ybURvbnRTZWxlY3QoZG9udFNlbGVjdE9iamVjdCwgZG9udFNlbGVjdFZhbHVlLmtleSwgcmVzcG9uc2UucmVzdWx0cyk7XG4gICAgLy8gS2VlcCByZXBsYWNpbmcgJGRvbnRTZWxlY3QgY2xhdXNlc1xuICAgIHJldHVybiB0aGlzLnJlcGxhY2VEb250U2VsZWN0KCk7XG4gIH0pO1xufTtcblxuX1Vuc2FmZVJlc3RRdWVyeS5wcm90b3R5cGUuY2xlYW5SZXN1bHRBdXRoRGF0YSA9IGZ1bmN0aW9uIChyZXN1bHQpIHtcbiAgZGVsZXRlIHJlc3VsdC5wYXNzd29yZDtcbiAgaWYgKHJlc3VsdC5hdXRoRGF0YSkge1xuICAgIE9iamVjdC5rZXlzKHJlc3VsdC5hdXRoRGF0YSkuZm9yRWFjaChwcm92aWRlciA9PiB7XG4gICAgICBpZiAocmVzdWx0LmF1dGhEYXRhW3Byb3ZpZGVyXSA9PT0gbnVsbCkge1xuICAgICAgICBkZWxldGUgcmVzdWx0LmF1dGhEYXRhW3Byb3ZpZGVyXTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGlmIChPYmplY3Qua2V5cyhyZXN1bHQuYXV0aERhdGEpLmxlbmd0aCA9PSAwKSB7XG4gICAgICBkZWxldGUgcmVzdWx0LmF1dGhEYXRhO1xuICAgIH1cbiAgfVxufTtcblxuY29uc3QgcmVwbGFjZUVxdWFsaXR5Q29uc3RyYWludCA9IGNvbnN0cmFpbnQgPT4ge1xuICBpZiAodHlwZW9mIGNvbnN0cmFpbnQgIT09ICdvYmplY3QnKSB7XG4gICAgcmV0dXJuIGNvbnN0cmFpbnQ7XG4gIH1cbiAgY29uc3QgZXF1YWxUb09iamVjdCA9IHt9O1xuICBsZXQgaGFzRGlyZWN0Q29uc3RyYWludCA9IGZhbHNlO1xuICBsZXQgaGFzT3BlcmF0b3JDb25zdHJhaW50ID0gZmFsc2U7XG4gIGZvciAoY29uc3Qga2V5IGluIGNvbnN0cmFpbnQpIHtcbiAgICBpZiAoa2V5LmluZGV4T2YoJyQnKSAhPT0gMCkge1xuICAgICAgaGFzRGlyZWN0Q29uc3RyYWludCA9IHRydWU7XG4gICAgICBlcXVhbFRvT2JqZWN0W2tleV0gPSBjb25zdHJhaW50W2tleV07XG4gICAgfSBlbHNlIHtcbiAgICAgIGhhc09wZXJhdG9yQ29uc3RyYWludCA9IHRydWU7XG4gICAgfVxuICB9XG4gIGlmIChoYXNEaXJlY3RDb25zdHJhaW50ICYmIGhhc09wZXJhdG9yQ29uc3RyYWludCkge1xuICAgIGNvbnN0cmFpbnRbJyRlcSddID0gZXF1YWxUb09iamVjdDtcbiAgICBPYmplY3Qua2V5cyhlcXVhbFRvT2JqZWN0KS5mb3JFYWNoKGtleSA9PiB7XG4gICAgICBkZWxldGUgY29uc3RyYWludFtrZXldO1xuICAgIH0pO1xuICB9XG4gIHJldHVybiBjb25zdHJhaW50O1xufTtcblxuX1Vuc2FmZVJlc3RRdWVyeS5wcm90b3R5cGUucmVwbGFjZUVxdWFsaXR5ID0gZnVuY3Rpb24gKCkge1xuICBpZiAodHlwZW9mIHRoaXMucmVzdFdoZXJlICE9PSAnb2JqZWN0Jykge1xuICAgIHJldHVybjtcbiAgfVxuICBmb3IgKGNvbnN0IGtleSBpbiB0aGlzLnJlc3RXaGVyZSkge1xuICAgIHRoaXMucmVzdFdoZXJlW2tleV0gPSByZXBsYWNlRXF1YWxpdHlDb25zdHJhaW50KHRoaXMucmVzdFdoZXJlW2tleV0pO1xuICB9XG59O1xuXG4vLyBSZXR1cm5zIGEgcHJvbWlzZSBmb3Igd2hldGhlciBpdCB3YXMgc3VjY2Vzc2Z1bC5cbi8vIFBvcHVsYXRlcyB0aGlzLnJlc3BvbnNlIHdpdGggYW4gb2JqZWN0IHRoYXQgb25seSBoYXMgJ3Jlc3VsdHMnLlxuX1Vuc2FmZVJlc3RRdWVyeS5wcm90b3R5cGUucnVuRmluZCA9IGFzeW5jIGZ1bmN0aW9uIChvcHRpb25zID0ge30pIHtcbiAgaWYgKHRoaXMuZmluZE9wdGlvbnMubGltaXQgPT09IDApIHtcbiAgICB0aGlzLnJlc3BvbnNlID0geyByZXN1bHRzOiBbXSB9O1xuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcbiAgfVxuICBjb25zdCBmaW5kT3B0aW9ucyA9IE9iamVjdC5hc3NpZ24oe30sIHRoaXMuZmluZE9wdGlvbnMpO1xuICBpZiAodGhpcy5rZXlzKSB7XG4gICAgZmluZE9wdGlvbnMua2V5cyA9IHRoaXMua2V5cy5tYXAoa2V5ID0+IHtcbiAgICAgIHJldHVybiBrZXkuc3BsaXQoJy4nKVswXTtcbiAgICB9KTtcbiAgICAvLyBXaGVuIHNlbGVjdGluZyBgYXV0aERhdGFgIG9uIGBfVXNlcmAsIGFsc28gYWRkIHRoZSBpbnRlcm5hbCBhdXRoIGRhdGEgZmllbGRzXG4gICAgLy8gKGUuZy4gYF9hdXRoX2RhdGFfZmFjZWJvb2tgKSBmb3IgZWFjaCBjb25maWd1cmVkIGF1dGggcHJvdmlkZXIuIEluIE1vbmdvREIsXG4gICAgLy8gYGF1dGhEYXRhYCBpcyBzdG9yZWQgYXMgaW5kaXZpZHVhbCBgX2F1dGhfZGF0YV88cHJvdmlkZXI+YCBmaWVsZHMsIHNvIHRoZVxuICAgIC8vIHByb2plY3Rpb24gZm9yIGBhdXRoRGF0YWAgYWxvbmUgd29uJ3QgbWF0Y2ggdGhlbS4gQWRkaW5nIGJvdGggZW5zdXJlcyBpdFxuICAgIC8vIHdvcmtzIGFjcm9zcyBhbGwgZGF0YWJhc2UgYWRhcHRlcnM6IE1vbmdvIHVzZXMgYF9hdXRoX2RhdGFfKmAgZmllbGRzLFxuICAgIC8vIFBvc3RncmVzIHVzZXMgdGhlIGBhdXRoRGF0YWAgY29sdW1uIGRpcmVjdGx5LlxuICAgIC8vXG4gICAgLy8gTm90ZTogV2hlbiBzZWxlY3RpbmcgYGF1dGhEYXRhYCwgb25seSBhdXRoIGRhdGEgb2YgY3VycmVudGx5IGNvbmZpZ3VyZWRcbiAgICAvLyBwcm92aWRlcnMgaXMgcmV0dXJuZWQuIEF1dGggZGF0YSBlbnRyaWVzIG9mIHByb3ZpZGVycyB0aGF0IGFyZSBubyBsb25nZXJcbiAgICAvLyBjb25maWd1cmVkIHdvbid0IGJlIGluY2x1ZGVkLiBUbyByZXR1cm4gYWxsIGF1dGggZGF0YSByZWdhcmRsZXNzIG9mIHRoZVxuICAgIC8vIHByb3ZpZGVyIGNvbmZpZ3VyYXRpb24sIGRvIG5vdCB1c2UgYGF1dGhEYXRhYCBhcyBhIHNlbGVjdGVkIGtleS5cbiAgICBpZiAodGhpcy5jbGFzc05hbWUgPT09ICdfVXNlcicgJiYgZmluZE9wdGlvbnMua2V5cy5pbmNsdWRlcygnYXV0aERhdGEnKSkge1xuICAgICAgY29uc3QgcHJvdmlkZXJzID0gdGhpcy5jb25maWcuYXV0aERhdGFNYW5hZ2VyLmdldFByb3ZpZGVycygpO1xuICAgICAgZm9yIChjb25zdCBwcm92aWRlciBvZiBwcm92aWRlcnMpIHtcbiAgICAgICAgY29uc3Qga2V5ID0gYF9hdXRoX2RhdGFfJHtwcm92aWRlcn1gO1xuICAgICAgICBpZiAoIWZpbmRPcHRpb25zLmtleXMuaW5jbHVkZXMoa2V5KSkge1xuICAgICAgICAgIGZpbmRPcHRpb25zLmtleXMucHVzaChrZXkpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG4gIGlmIChvcHRpb25zLm9wKSB7XG4gICAgZmluZE9wdGlvbnMub3AgPSBvcHRpb25zLm9wO1xuICB9XG4gIGNvbnN0IHJlc3VsdHMgPSBhd2FpdCB0aGlzLmNvbmZpZy5kYXRhYmFzZS5maW5kKHRoaXMuY2xhc3NOYW1lLCB0aGlzLnJlc3RXaGVyZSwgZmluZE9wdGlvbnMsIHRoaXMuYXV0aCk7XG4gIGlmICh0aGlzLmNsYXNzTmFtZSA9PT0gJ19Vc2VyJyAmJiAhZmluZE9wdGlvbnMuZXhwbGFpbikge1xuICAgIGZvciAodmFyIHJlc3VsdCBvZiByZXN1bHRzKSB7XG4gICAgICB0aGlzLmNsZWFuUmVzdWx0QXV0aERhdGEocmVzdWx0KTtcbiAgICB9XG4gIH1cblxuICBhd2FpdCB0aGlzLmNvbmZpZy5maWxlc0NvbnRyb2xsZXIuZXhwYW5kRmlsZXNJbk9iamVjdCh0aGlzLmNvbmZpZywgcmVzdWx0cyk7XG5cbiAgaWYgKHRoaXMucmVkaXJlY3RDbGFzc05hbWUpIHtcbiAgICBmb3IgKHZhciByIG9mIHJlc3VsdHMpIHtcbiAgICAgIHIuY2xhc3NOYW1lID0gdGhpcy5yZWRpcmVjdENsYXNzTmFtZTtcbiAgICB9XG4gIH1cbiAgdGhpcy5yZXNwb25zZSA9IHsgcmVzdWx0czogcmVzdWx0cyB9O1xufTtcblxuLy8gUmV0dXJucyBhIHByb21pc2UgZm9yIHdoZXRoZXIgaXQgd2FzIHN1Y2Nlc3NmdWwuXG4vLyBQb3B1bGF0ZXMgdGhpcy5yZXNwb25zZS5jb3VudCB3aXRoIHRoZSBjb3VudFxuX1Vuc2FmZVJlc3RRdWVyeS5wcm90b3R5cGUucnVuQ291bnQgPSBmdW5jdGlvbiAoKSB7XG4gIGlmICghdGhpcy5kb0NvdW50KSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIHRoaXMuZmluZE9wdGlvbnMuY291bnQgPSB0cnVlO1xuICBkZWxldGUgdGhpcy5maW5kT3B0aW9ucy5za2lwO1xuICBkZWxldGUgdGhpcy5maW5kT3B0aW9ucy5saW1pdDtcbiAgcmV0dXJuIHRoaXMuY29uZmlnLmRhdGFiYXNlLmZpbmQodGhpcy5jbGFzc05hbWUsIHRoaXMucmVzdFdoZXJlLCB0aGlzLmZpbmRPcHRpb25zKS50aGVuKGMgPT4ge1xuICAgIHRoaXMucmVzcG9uc2UuY291bnQgPSBjO1xuICB9KTtcbn07XG5cbl9VbnNhZmVSZXN0UXVlcnkucHJvdG90eXBlLmRlbnlQcm90ZWN0ZWRGaWVsZHMgPSBhc3luYyBmdW5jdGlvbiAoKSB7XG4gIGlmICh0aGlzLmF1dGguaXNNYXN0ZXIpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgY29uc3Qgc2NoZW1hQ29udHJvbGxlciA9IGF3YWl0IHRoaXMuY29uZmlnLmRhdGFiYXNlLmxvYWRTY2hlbWEoKTtcbiAgY29uc3QgcHJvdGVjdGVkRmllbGRzID1cbiAgICB0aGlzLmNvbmZpZy5kYXRhYmFzZS5hZGRQcm90ZWN0ZWRGaWVsZHMoXG4gICAgICBzY2hlbWFDb250cm9sbGVyLFxuICAgICAgdGhpcy5jbGFzc05hbWUsXG4gICAgICB0aGlzLnJlc3RXaGVyZSxcbiAgICAgIHRoaXMuZmluZE9wdGlvbnMuYWNsLFxuICAgICAgdGhpcy5hdXRoLFxuICAgICAgdGhpcy5maW5kT3B0aW9uc1xuICAgICkgfHwgW107XG4gIGNvbnN0IGNoZWNrV2hlcmUgPSAod2hlcmUpID0+IHtcbiAgICBpZiAodHlwZW9mIHdoZXJlICE9PSAnb2JqZWN0JyB8fCB3aGVyZSA9PT0gbnVsbCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBmb3IgKGNvbnN0IHdoZXJlS2V5IG9mIE9iamVjdC5rZXlzKHdoZXJlKSkge1xuICAgICAgY29uc3Qgcm9vdEZpZWxkID0gd2hlcmVLZXkuc3BsaXQoJy4nKVswXTtcbiAgICAgIGlmIChwcm90ZWN0ZWRGaWVsZHMuaW5jbHVkZXMod2hlcmVLZXkpIHx8IHByb3RlY3RlZEZpZWxkcy5pbmNsdWRlcyhyb290RmllbGQpKSB7XG4gICAgICAgIHRocm93IGNyZWF0ZVNhbml0aXplZEVycm9yKFxuICAgICAgICAgIFBhcnNlLkVycm9yLk9QRVJBVElPTl9GT1JCSURERU4sXG4gICAgICAgICAgYFRoaXMgdXNlciBpcyBub3QgYWxsb3dlZCB0byBxdWVyeSAke3doZXJlS2V5fSBvbiBjbGFzcyAke3RoaXMuY2xhc3NOYW1lfWAsXG4gICAgICAgICAgdGhpcy5jb25maWdcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG4gICAgZm9yIChjb25zdCBvcCBvZiBbJyRvcicsICckYW5kJywgJyRub3InXSkge1xuICAgICAgaWYgKEFycmF5LmlzQXJyYXkod2hlcmVbb3BdKSkge1xuICAgICAgICB3aGVyZVtvcF0uZm9yRWFjaChzdWJRdWVyeSA9PiBjaGVja1doZXJlKHN1YlF1ZXJ5KSk7XG4gICAgICB9XG4gICAgfVxuICB9O1xuICBjaGVja1doZXJlKHRoaXMucmVzdFdoZXJlKTtcblxuICAvLyBDaGVjayBzb3J0IGtleXMgYWdhaW5zdCBwcm90ZWN0ZWQgZmllbGRzXG4gIGlmICh0aGlzLmZpbmRPcHRpb25zLnNvcnQpIHtcbiAgICBmb3IgKGNvbnN0IHNvcnRLZXkgb2YgT2JqZWN0LmtleXModGhpcy5maW5kT3B0aW9ucy5zb3J0KSkge1xuICAgICAgY29uc3Qgcm9vdEZpZWxkID0gc29ydEtleS5zcGxpdCgnLicpWzBdO1xuICAgICAgaWYgKHByb3RlY3RlZEZpZWxkcy5pbmNsdWRlcyhzb3J0S2V5KSB8fCBwcm90ZWN0ZWRGaWVsZHMuaW5jbHVkZXMocm9vdEZpZWxkKSkge1xuICAgICAgICB0aHJvdyBjcmVhdGVTYW5pdGl6ZWRFcnJvcihcbiAgICAgICAgICBQYXJzZS5FcnJvci5PUEVSQVRJT05fRk9SQklEREVOLFxuICAgICAgICAgIGBUaGlzIHVzZXIgaXMgbm90IGFsbG93ZWQgdG8gc29ydCBieSAke3NvcnRLZXl9IG9uIGNsYXNzICR7dGhpcy5jbGFzc05hbWV9YCxcbiAgICAgICAgICB0aGlzLmNvbmZpZ1xuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cbiAgfVxufTtcblxuLy8gQXVnbWVudHMgdGhpcy5yZXNwb25zZSB3aXRoIGFsbCBwb2ludGVycyBvbiBhbiBvYmplY3Rcbl9VbnNhZmVSZXN0UXVlcnkucHJvdG90eXBlLmhhbmRsZUluY2x1ZGVBbGwgPSBmdW5jdGlvbiAoKSB7XG4gIGlmICghdGhpcy5pbmNsdWRlQWxsKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIHJldHVybiB0aGlzLmNvbmZpZy5kYXRhYmFzZVxuICAgIC5sb2FkU2NoZW1hKClcbiAgICAudGhlbihzY2hlbWFDb250cm9sbGVyID0+IHNjaGVtYUNvbnRyb2xsZXIuZ2V0T25lU2NoZW1hKHRoaXMuY2xhc3NOYW1lKSlcbiAgICAudGhlbihzY2hlbWEgPT4ge1xuICAgICAgY29uc3QgaW5jbHVkZUZpZWxkcyA9IFtdO1xuICAgICAgY29uc3Qga2V5RmllbGRzID0gW107XG4gICAgICBmb3IgKGNvbnN0IGZpZWxkIGluIHNjaGVtYS5maWVsZHMpIHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIChzY2hlbWEuZmllbGRzW2ZpZWxkXS50eXBlICYmIHNjaGVtYS5maWVsZHNbZmllbGRdLnR5cGUgPT09ICdQb2ludGVyJykgfHxcbiAgICAgICAgICAoc2NoZW1hLmZpZWxkc1tmaWVsZF0udHlwZSAmJiBzY2hlbWEuZmllbGRzW2ZpZWxkXS50eXBlID09PSAnQXJyYXknKVxuICAgICAgICApIHtcbiAgICAgICAgICBpbmNsdWRlRmllbGRzLnB1c2goW2ZpZWxkXSk7XG4gICAgICAgICAga2V5RmllbGRzLnB1c2goZmllbGQpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICAvLyBBZGQgZmllbGRzIHRvIGluY2x1ZGUsIGtleXMsIHJlbW92ZSBkdXBzXG4gICAgICB0aGlzLmluY2x1ZGUgPSBbLi4ubmV3IFNldChbLi4udGhpcy5pbmNsdWRlLCAuLi5pbmNsdWRlRmllbGRzXSldO1xuICAgICAgLy8gaWYgdGhpcy5rZXlzIG5vdCBzZXQsIHRoZW4gYWxsIGtleXMgYXJlIGFscmVhZHkgaW5jbHVkZWRcbiAgICAgIGlmICh0aGlzLmtleXMpIHtcbiAgICAgICAgdGhpcy5rZXlzID0gWy4uLm5ldyBTZXQoWy4uLnRoaXMua2V5cywgLi4ua2V5RmllbGRzXSldO1xuICAgICAgfVxuICAgIH0pO1xufTtcblxuX1Vuc2FmZVJlc3RRdWVyeS5wcm90b3R5cGUudmFsaWRhdGVJbmNsdWRlQ29tcGxleGl0eSA9IGZ1bmN0aW9uICgpIHtcbiAgaWYgKHRoaXMuYXV0aC5pc01hc3RlciB8fCB0aGlzLmF1dGguaXNNYWludGVuYW5jZSkge1xuICAgIHJldHVybjtcbiAgfVxuICBjb25zdCByYyA9IHRoaXMuY29uZmlnLnJlcXVlc3RDb21wbGV4aXR5O1xuICBpZiAoIXJjKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIGlmIChyYy5pbmNsdWRlRGVwdGggIT09IC0xICYmIHRoaXMuaW5jbHVkZSAmJiB0aGlzLmluY2x1ZGUubGVuZ3RoID4gMCkge1xuICAgIGNvbnN0IG1heERlcHRoID0gTWF0aC5tYXgoLi4udGhpcy5pbmNsdWRlLm1hcChwYXRoID0+IHBhdGgubGVuZ3RoKSk7XG4gICAgaWYgKG1heERlcHRoID4gcmMuaW5jbHVkZURlcHRoKSB7XG4gICAgICBjb25zdCBtZXNzYWdlID0gYEluY2x1ZGUgZGVwdGggb2YgJHttYXhEZXB0aH0gZXhjZWVkcyBtYXhpbXVtIGFsbG93ZWQgZGVwdGggb2YgJHtyYy5pbmNsdWRlRGVwdGh9YDtcbiAgICAgIGxvZ2dlci53YXJuKG1lc3NhZ2UpO1xuICAgICAgdGhyb3cgbmV3IFBhcnNlLkVycm9yKFBhcnNlLkVycm9yLklOVkFMSURfUVVFUlksIG1lc3NhZ2UpO1xuICAgIH1cbiAgfVxuICBpZiAocmMuaW5jbHVkZUNvdW50ICE9PSAtMSAmJiB0aGlzLmluY2x1ZGUgJiYgdGhpcy5pbmNsdWRlLmxlbmd0aCA+IHJjLmluY2x1ZGVDb3VudCkge1xuICAgIGNvbnN0IG1lc3NhZ2UgPSBgTnVtYmVyIG9mIGluY2x1ZGUgZmllbGRzICgke3RoaXMuaW5jbHVkZS5sZW5ndGh9KSBleGNlZWRzIG1heGltdW0gYWxsb3dlZCAoJHtyYy5pbmNsdWRlQ291bnR9KWA7XG4gICAgbG9nZ2VyLndhcm4obWVzc2FnZSk7XG4gICAgdGhyb3cgbmV3IFBhcnNlLkVycm9yKFBhcnNlLkVycm9yLklOVkFMSURfUVVFUlksIG1lc3NhZ2UpO1xuICB9XG59O1xuXG4vLyBVcGRhdGVzIHByb3BlcnR5IGB0aGlzLmtleXNgIHRvIGNvbnRhaW4gYWxsIGtleXMgYnV0IHRoZSBvbmVzIHVuc2VsZWN0ZWQuXG5fVW5zYWZlUmVzdFF1ZXJ5LnByb3RvdHlwZS5oYW5kbGVFeGNsdWRlS2V5cyA9IGZ1bmN0aW9uICgpIHtcbiAgaWYgKCF0aGlzLmV4Y2x1ZGVLZXlzKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIGlmICh0aGlzLmtleXMpIHtcbiAgICB0aGlzLmtleXMgPSB0aGlzLmtleXMuZmlsdGVyKGsgPT4gIXRoaXMuZXhjbHVkZUtleXMuaW5jbHVkZXMoaykpO1xuICAgIHJldHVybjtcbiAgfVxuICByZXR1cm4gdGhpcy5jb25maWcuZGF0YWJhc2VcbiAgICAubG9hZFNjaGVtYSgpXG4gICAgLnRoZW4oc2NoZW1hQ29udHJvbGxlciA9PiBzY2hlbWFDb250cm9sbGVyLmdldE9uZVNjaGVtYSh0aGlzLmNsYXNzTmFtZSkpXG4gICAgLnRoZW4oc2NoZW1hID0+IHtcbiAgICAgIGNvbnN0IGZpZWxkcyA9IE9iamVjdC5rZXlzKHNjaGVtYS5maWVsZHMpO1xuICAgICAgdGhpcy5rZXlzID0gZmllbGRzLmZpbHRlcihrID0+ICF0aGlzLmV4Y2x1ZGVLZXlzLmluY2x1ZGVzKGspKTtcbiAgICB9KTtcbn07XG5cbi8vIEF1Z21lbnRzIHRoaXMucmVzcG9uc2Ugd2l0aCBkYXRhIGF0IHRoZSBwYXRocyBwcm92aWRlZCBpbiB0aGlzLmluY2x1ZGUuXG5fVW5zYWZlUmVzdFF1ZXJ5LnByb3RvdHlwZS5oYW5kbGVJbmNsdWRlID0gYXN5bmMgZnVuY3Rpb24gKCkge1xuICBpZiAodGhpcy5pbmNsdWRlLmxlbmd0aCA9PSAwKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgY29uc3QgaW5kZXhlZFJlc3VsdHMgPSB0aGlzLnJlc3BvbnNlLnJlc3VsdHMucmVkdWNlKChpbmRleGVkLCByZXN1bHQsIGkpID0+IHtcbiAgICBpbmRleGVkW3Jlc3VsdC5vYmplY3RJZF0gPSBpO1xuICAgIHJldHVybiBpbmRleGVkO1xuICB9LCB7fSk7XG5cbiAgLy8gQnVpbGQgdGhlIGV4ZWN1dGlvbiB0cmVlXG4gIGNvbnN0IGV4ZWN1dGlvblRyZWUgPSB7fVxuICB0aGlzLmluY2x1ZGUuZm9yRWFjaChwYXRoID0+IHtcbiAgICBsZXQgY3VycmVudCA9IGV4ZWN1dGlvblRyZWU7XG4gICAgcGF0aC5mb3JFYWNoKChub2RlKSA9PiB7XG4gICAgICBpZiAoIWN1cnJlbnRbbm9kZV0pIHtcbiAgICAgICAgY3VycmVudFtub2RlXSA9IHtcbiAgICAgICAgICBwYXRoLFxuICAgICAgICAgIGNoaWxkcmVuOiB7fVxuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgY3VycmVudCA9IGN1cnJlbnRbbm9kZV0uY2hpbGRyZW5cbiAgICB9KTtcbiAgfSk7XG5cbiAgY29uc3QgcmVjdXJzaXZlRXhlY3V0aW9uVHJlZSA9IGFzeW5jICh0cmVlTm9kZSkgPT4ge1xuICAgIGNvbnN0IHsgcGF0aCwgY2hpbGRyZW4gfSA9IHRyZWVOb2RlO1xuICAgIGNvbnN0IHBhdGhSZXNwb25zZSA9IGluY2x1ZGVQYXRoKFxuICAgICAgdGhpcy5jb25maWcsXG4gICAgICB0aGlzLmF1dGgsXG4gICAgICB0aGlzLnJlc3BvbnNlLFxuICAgICAgcGF0aCxcbiAgICAgIHRoaXMuY29udGV4dCxcbiAgICAgIHRoaXMucmVzdE9wdGlvbnMsXG4gICAgICB0aGlzLFxuICAgICk7XG4gICAgaWYgKHBhdGhSZXNwb25zZS50aGVuKSB7XG4gICAgICBjb25zdCBuZXdSZXNwb25zZSA9IGF3YWl0IHBhdGhSZXNwb25zZVxuICAgICAgbmV3UmVzcG9uc2UucmVzdWx0cy5mb3JFYWNoKG5ld09iamVjdCA9PiB7XG4gICAgICAgIC8vIFdlIGh5ZHJhdGUgdGhlIHJvb3Qgb2YgZWFjaCByZXN1bHQgd2l0aCBzdWIgcmVzdWx0c1xuICAgICAgICB0aGlzLnJlc3BvbnNlLnJlc3VsdHNbaW5kZXhlZFJlc3VsdHNbbmV3T2JqZWN0Lm9iamVjdElkXV1bcGF0aFswXV0gPSBuZXdPYmplY3RbcGF0aFswXV07XG4gICAgICB9KVxuICAgIH1cbiAgICByZXR1cm4gUHJvbWlzZS5hbGwoT2JqZWN0LnZhbHVlcyhjaGlsZHJlbikubWFwKHJlY3Vyc2l2ZUV4ZWN1dGlvblRyZWUpKTtcbiAgfVxuXG4gIGF3YWl0IFByb21pc2UuYWxsKE9iamVjdC52YWx1ZXMoZXhlY3V0aW9uVHJlZSkubWFwKHJlY3Vyc2l2ZUV4ZWN1dGlvblRyZWUpKTtcbiAgdGhpcy5pbmNsdWRlID0gW11cbn07XG5cbi8vUmV0dXJucyBhIHByb21pc2Ugb2YgYSBwcm9jZXNzZWQgc2V0IG9mIHJlc3VsdHNcbl9VbnNhZmVSZXN0UXVlcnkucHJvdG90eXBlLnJ1bkFmdGVyRmluZFRyaWdnZXIgPSBmdW5jdGlvbiAoKSB7XG4gIGlmICghdGhpcy5yZXNwb25zZSkge1xuICAgIHJldHVybjtcbiAgfVxuICBpZiAoIXRoaXMucnVuQWZ0ZXJGaW5kKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIC8vIEF2b2lkIGRvaW5nIGFueSBzZXR1cCBmb3IgdHJpZ2dlcnMgaWYgdGhlcmUgaXMgbm8gJ2FmdGVyRmluZCcgdHJpZ2dlciBmb3IgdGhpcyBjbGFzcy5cbiAgY29uc3QgaGFzQWZ0ZXJGaW5kSG9vayA9IHRyaWdnZXJzLnRyaWdnZXJFeGlzdHMoXG4gICAgdGhpcy5jbGFzc05hbWUsXG4gICAgdHJpZ2dlcnMuVHlwZXMuYWZ0ZXJGaW5kLFxuICAgIHRoaXMuY29uZmlnLmFwcGxpY2F0aW9uSWRcbiAgKTtcbiAgaWYgKCFoYXNBZnRlckZpbmRIb29rKSB7XG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuICB9XG4gIC8vIFNraXAgQWdncmVnYXRlIGFuZCBEaXN0aW5jdCBRdWVyaWVzXG4gIGlmICh0aGlzLmZpbmRPcHRpb25zLnBpcGVsaW5lIHx8IHRoaXMuZmluZE9wdGlvbnMuZGlzdGluY3QpIHtcbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG4gIH1cblxuICBjb25zdCBqc29uID0gT2JqZWN0LmFzc2lnbih7fSwgdGhpcy5yZXN0T3B0aW9ucyk7XG4gIGpzb24ud2hlcmUgPSB0aGlzLnJlc3RXaGVyZTtcbiAgY29uc3QgcGFyc2VRdWVyeSA9IG5ldyBQYXJzZS5RdWVyeSh0aGlzLmNsYXNzTmFtZSk7XG4gIHBhcnNlUXVlcnkud2l0aEpTT04oanNvbik7XG4gIC8vIFJ1biBhZnRlckZpbmQgdHJpZ2dlciBhbmQgc2V0IHRoZSBuZXcgcmVzdWx0c1xuICByZXR1cm4gdHJpZ2dlcnNcbiAgICAubWF5YmVSdW5BZnRlckZpbmRUcmlnZ2VyKFxuICAgICAgdHJpZ2dlcnMuVHlwZXMuYWZ0ZXJGaW5kLFxuICAgICAgdGhpcy5hdXRoLFxuICAgICAgdGhpcy5jbGFzc05hbWUsXG4gICAgICB0aGlzLnJlc3BvbnNlLnJlc3VsdHMsXG4gICAgICB0aGlzLmNvbmZpZyxcbiAgICAgIHBhcnNlUXVlcnksXG4gICAgICB0aGlzLmNvbnRleHQsXG4gICAgICB0aGlzLmlzR2V0XG4gICAgKVxuICAgIC50aGVuKHJlc3VsdHMgPT4ge1xuICAgICAgLy8gRW5zdXJlIHdlIHByb3Blcmx5IHNldCB0aGUgY2xhc3NOYW1lIGJhY2tcbiAgICAgIGlmICh0aGlzLnJlZGlyZWN0Q2xhc3NOYW1lKSB7XG4gICAgICAgIHRoaXMucmVzcG9uc2UucmVzdWx0cyA9IHJlc3VsdHMubWFwKG9iamVjdCA9PiB7XG4gICAgICAgICAgaWYgKG9iamVjdCBpbnN0YW5jZW9mIFBhcnNlLk9iamVjdCkge1xuICAgICAgICAgICAgb2JqZWN0ID0gb2JqZWN0LnRvSlNPTigpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBvYmplY3QuY2xhc3NOYW1lID0gdGhpcy5yZWRpcmVjdENsYXNzTmFtZTtcbiAgICAgICAgICByZXR1cm4gb2JqZWN0O1xuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMucmVzcG9uc2UucmVzdWx0cyA9IHJlc3VsdHM7XG4gICAgICB9XG4gICAgfSk7XG59O1xuXG5fVW5zYWZlUmVzdFF1ZXJ5LnByb3RvdHlwZS5oYW5kbGVBdXRoQWRhcHRlcnMgPSBhc3luYyBmdW5jdGlvbiAoKSB7XG4gIGlmICh0aGlzLmNsYXNzTmFtZSAhPT0gJ19Vc2VyJyB8fCB0aGlzLmZpbmRPcHRpb25zLmV4cGxhaW4pIHtcbiAgICByZXR1cm47XG4gIH1cbiAgYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgdGhpcy5yZXNwb25zZS5yZXN1bHRzLm1hcChyZXN1bHQgPT5cbiAgICAgIHRoaXMuY29uZmlnLmF1dGhEYXRhTWFuYWdlci5ydW5BZnRlckZpbmQoXG4gICAgICAgIHsgY29uZmlnOiB0aGlzLmNvbmZpZywgYXV0aDogdGhpcy5hdXRoIH0sXG4gICAgICAgIHJlc3VsdC5hdXRoRGF0YVxuICAgICAgKVxuICAgIClcbiAgKTtcbn07XG5cbi8vIEFkZHMgaW5jbHVkZWQgdmFsdWVzIHRvIHRoZSByZXNwb25zZS5cbi8vIFBhdGggaXMgYSBsaXN0IG9mIGZpZWxkIG5hbWVzLlxuLy8gUmV0dXJucyBhIHByb21pc2UgZm9yIGFuIGF1Z21lbnRlZCByZXNwb25zZS5cbmZ1bmN0aW9uIGluY2x1ZGVQYXRoKGNvbmZpZywgYXV0aCwgcmVzcG9uc2UsIHBhdGgsIGNvbnRleHQsIHJlc3RPcHRpb25zID0ge30pIHtcbiAgdmFyIHBvaW50ZXJzID0gZmluZFBvaW50ZXJzKHJlc3BvbnNlLnJlc3VsdHMsIHBhdGgpO1xuICBpZiAocG9pbnRlcnMubGVuZ3RoID09IDApIHtcbiAgICByZXR1cm4gcmVzcG9uc2U7XG4gIH1cbiAgY29uc3QgcG9pbnRlcnNIYXNoID0ge307XG4gIGZvciAodmFyIHBvaW50ZXIgb2YgcG9pbnRlcnMpIHtcbiAgICBpZiAoIXBvaW50ZXIpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBjb25zdCBjbGFzc05hbWUgPSBwb2ludGVyLmNsYXNzTmFtZTtcbiAgICAvLyBvbmx5IGluY2x1ZGUgdGhlIGdvb2QgcG9pbnRlcnNcbiAgICBpZiAoY2xhc3NOYW1lKSB7XG4gICAgICBwb2ludGVyc0hhc2hbY2xhc3NOYW1lXSA9IHBvaW50ZXJzSGFzaFtjbGFzc05hbWVdIHx8IG5ldyBTZXQoKTtcbiAgICAgIHBvaW50ZXJzSGFzaFtjbGFzc05hbWVdLmFkZChwb2ludGVyLm9iamVjdElkKTtcbiAgICB9XG4gIH1cbiAgY29uc3QgaW5jbHVkZVJlc3RPcHRpb25zID0ge307XG4gIGlmIChyZXN0T3B0aW9ucy5rZXlzKSB7XG4gICAgY29uc3Qga2V5cyA9IG5ldyBTZXQocmVzdE9wdGlvbnMua2V5cy5zcGxpdCgnLCcpKTtcbiAgICBjb25zdCBrZXlTZXQgPSBBcnJheS5mcm9tKGtleXMpLnJlZHVjZSgoc2V0LCBrZXkpID0+IHtcbiAgICAgIGNvbnN0IGtleVBhdGggPSBrZXkuc3BsaXQoJy4nKTtcbiAgICAgIGxldCBpID0gMDtcbiAgICAgIGZvciAoaTsgaSA8IHBhdGgubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaWYgKHBhdGhbaV0gIT0ga2V5UGF0aFtpXSkge1xuICAgICAgICAgIHJldHVybiBzZXQ7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChpIDwga2V5UGF0aC5sZW5ndGgpIHtcbiAgICAgICAgc2V0LmFkZChrZXlQYXRoW2ldKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBzZXQ7XG4gICAgfSwgbmV3IFNldCgpKTtcbiAgICBpZiAoa2V5U2V0LnNpemUgPiAwKSB7XG4gICAgICBpbmNsdWRlUmVzdE9wdGlvbnMua2V5cyA9IEFycmF5LmZyb20oa2V5U2V0KS5qb2luKCcsJyk7XG4gICAgfVxuICB9XG5cbiAgaWYgKHJlc3RPcHRpb25zLmV4Y2x1ZGVLZXlzKSB7XG4gICAgY29uc3QgZXhjbHVkZUtleXMgPSBuZXcgU2V0KHJlc3RPcHRpb25zLmV4Y2x1ZGVLZXlzLnNwbGl0KCcsJykpO1xuICAgIGNvbnN0IGV4Y2x1ZGVLZXlTZXQgPSBBcnJheS5mcm9tKGV4Y2x1ZGVLZXlzKS5yZWR1Y2UoKHNldCwga2V5KSA9PiB7XG4gICAgICBjb25zdCBrZXlQYXRoID0ga2V5LnNwbGl0KCcuJyk7XG4gICAgICBsZXQgaSA9IDA7XG4gICAgICBmb3IgKGk7IGkgPCBwYXRoLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGlmIChwYXRoW2ldICE9IGtleVBhdGhbaV0pIHtcbiAgICAgICAgICByZXR1cm4gc2V0O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoaSA9PSBrZXlQYXRoLmxlbmd0aCAtIDEpIHtcbiAgICAgICAgc2V0LmFkZChrZXlQYXRoW2ldKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBzZXQ7XG4gICAgfSwgbmV3IFNldCgpKTtcbiAgICBpZiAoZXhjbHVkZUtleVNldC5zaXplID4gMCkge1xuICAgICAgaW5jbHVkZVJlc3RPcHRpb25zLmV4Y2x1ZGVLZXlzID0gQXJyYXkuZnJvbShleGNsdWRlS2V5U2V0KS5qb2luKCcsJyk7XG4gICAgfVxuICB9XG5cbiAgaWYgKHJlc3RPcHRpb25zLmluY2x1ZGVSZWFkUHJlZmVyZW5jZSkge1xuICAgIGluY2x1ZGVSZXN0T3B0aW9ucy5yZWFkUHJlZmVyZW5jZSA9IHJlc3RPcHRpb25zLmluY2x1ZGVSZWFkUHJlZmVyZW5jZTtcbiAgICBpbmNsdWRlUmVzdE9wdGlvbnMuaW5jbHVkZVJlYWRQcmVmZXJlbmNlID0gcmVzdE9wdGlvbnMuaW5jbHVkZVJlYWRQcmVmZXJlbmNlO1xuICB9IGVsc2UgaWYgKHJlc3RPcHRpb25zLnJlYWRQcmVmZXJlbmNlKSB7XG4gICAgaW5jbHVkZVJlc3RPcHRpb25zLnJlYWRQcmVmZXJlbmNlID0gcmVzdE9wdGlvbnMucmVhZFByZWZlcmVuY2U7XG4gIH1cbiAgY29uc3QgcXVlcnlQcm9taXNlcyA9IE9iamVjdC5rZXlzKHBvaW50ZXJzSGFzaCkubWFwKGFzeW5jIGNsYXNzTmFtZSA9PiB7XG4gICAgY29uc3Qgb2JqZWN0SWRzID0gQXJyYXkuZnJvbShwb2ludGVyc0hhc2hbY2xhc3NOYW1lXSk7XG4gICAgbGV0IHdoZXJlO1xuICAgIGlmIChvYmplY3RJZHMubGVuZ3RoID09PSAxKSB7XG4gICAgICB3aGVyZSA9IHsgb2JqZWN0SWQ6IG9iamVjdElkc1swXSB9O1xuICAgIH0gZWxzZSB7XG4gICAgICB3aGVyZSA9IHsgb2JqZWN0SWQ6IHsgJGluOiBvYmplY3RJZHMgfSB9O1xuICAgIH1cbiAgICBjb25zdCBxdWVyeSA9IGF3YWl0IFJlc3RRdWVyeSh7XG4gICAgICBtZXRob2Q6IG9iamVjdElkcy5sZW5ndGggPT09IDEgPyBSZXN0UXVlcnkuTWV0aG9kLmdldCA6IFJlc3RRdWVyeS5NZXRob2QuZmluZCxcbiAgICAgIGNvbmZpZyxcbiAgICAgIGF1dGgsXG4gICAgICBjbGFzc05hbWUsXG4gICAgICByZXN0V2hlcmU6IHdoZXJlLFxuICAgICAgcmVzdE9wdGlvbnM6IGluY2x1ZGVSZXN0T3B0aW9ucyxcbiAgICAgIGNvbnRleHQ6IGNvbnRleHQsXG4gICAgfSk7XG4gICAgcmV0dXJuIHF1ZXJ5LmV4ZWN1dGUoeyBvcDogJ2dldCcgfSkudGhlbihyZXN1bHRzID0+IHtcbiAgICAgIHJlc3VsdHMuY2xhc3NOYW1lID0gY2xhc3NOYW1lO1xuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShyZXN1bHRzKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgLy8gR2V0IHRoZSBvYmplY3RzIGZvciBhbGwgdGhlc2Ugb2JqZWN0IGlkc1xuICByZXR1cm4gUHJvbWlzZS5hbGwocXVlcnlQcm9taXNlcykudGhlbihyZXNwb25zZXMgPT4ge1xuICAgIHZhciByZXBsYWNlID0gcmVzcG9uc2VzLnJlZHVjZSgocmVwbGFjZSwgaW5jbHVkZVJlc3BvbnNlKSA9PiB7XG4gICAgICBmb3IgKHZhciBvYmogb2YgaW5jbHVkZVJlc3BvbnNlLnJlc3VsdHMpIHtcbiAgICAgICAgb2JqLl9fdHlwZSA9ICdPYmplY3QnO1xuICAgICAgICBvYmouY2xhc3NOYW1lID0gaW5jbHVkZVJlc3BvbnNlLmNsYXNzTmFtZTtcblxuICAgICAgICBpZiAob2JqLmNsYXNzTmFtZSA9PSAnX1VzZXInICYmICFhdXRoLmlzTWFzdGVyKSB7XG4gICAgICAgICAgZGVsZXRlIG9iai5zZXNzaW9uVG9rZW47XG4gICAgICAgICAgZGVsZXRlIG9iai5hdXRoRGF0YTtcbiAgICAgICAgfVxuICAgICAgICByZXBsYWNlW29iai5vYmplY3RJZF0gPSBvYmo7XG4gICAgICB9XG4gICAgICByZXR1cm4gcmVwbGFjZTtcbiAgICB9LCB7fSk7XG4gICAgdmFyIHJlc3AgPSB7XG4gICAgICByZXN1bHRzOiByZXBsYWNlUG9pbnRlcnMocmVzcG9uc2UucmVzdWx0cywgcGF0aCwgcmVwbGFjZSksXG4gICAgfTtcbiAgICBpZiAocmVzcG9uc2UuY291bnQpIHtcbiAgICAgIHJlc3AuY291bnQgPSByZXNwb25zZS5jb3VudDtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3A7XG4gIH0pO1xufVxuXG4vLyBPYmplY3QgbWF5IGJlIGEgbGlzdCBvZiBSRVNULWZvcm1hdCBvYmplY3QgdG8gZmluZCBwb2ludGVycyBpbiwgb3Jcbi8vIGl0IG1heSBiZSBhIHNpbmdsZSBvYmplY3QuXG4vLyBJZiB0aGUgcGF0aCB5aWVsZHMgdGhpbmdzIHRoYXQgYXJlbid0IHBvaW50ZXJzLCB0aGlzIHRocm93cyBhbiBlcnJvci5cbi8vIFBhdGggaXMgYSBsaXN0IG9mIGZpZWxkcyB0byBzZWFyY2ggaW50by5cbi8vIFJldHVybnMgYSBsaXN0IG9mIHBvaW50ZXJzIGluIFJFU1QgZm9ybWF0LlxuZnVuY3Rpb24gZmluZFBvaW50ZXJzKG9iamVjdCwgcGF0aCkge1xuICBpZiAoQXJyYXkuaXNBcnJheShvYmplY3QpKSB7XG4gICAgcmV0dXJuIG9iamVjdC5tYXAoeCA9PiBmaW5kUG9pbnRlcnMoeCwgcGF0aCkpLmZsYXQoKTtcbiAgfVxuXG4gIGlmICh0eXBlb2Ygb2JqZWN0ICE9PSAnb2JqZWN0JyB8fCAhb2JqZWN0KSB7XG4gICAgcmV0dXJuIFtdO1xuICB9XG5cbiAgaWYgKHBhdGgubGVuZ3RoID09IDApIHtcbiAgICBpZiAob2JqZWN0ID09PSBudWxsIHx8IG9iamVjdC5fX3R5cGUgPT0gJ1BvaW50ZXInKSB7XG4gICAgICByZXR1cm4gW29iamVjdF07XG4gICAgfVxuICAgIHJldHVybiBbXTtcbiAgfVxuXG4gIHZhciBzdWJvYmplY3QgPSBvYmplY3RbcGF0aFswXV07XG4gIGlmICghc3Vib2JqZWN0KSB7XG4gICAgcmV0dXJuIFtdO1xuICB9XG4gIHJldHVybiBmaW5kUG9pbnRlcnMoc3Vib2JqZWN0LCBwYXRoLnNsaWNlKDEpKTtcbn1cblxuLy8gT2JqZWN0IG1heSBiZSBhIGxpc3Qgb2YgUkVTVC1mb3JtYXQgb2JqZWN0cyB0byByZXBsYWNlIHBvaW50ZXJzXG4vLyBpbiwgb3IgaXQgbWF5IGJlIGEgc2luZ2xlIG9iamVjdC5cbi8vIFBhdGggaXMgYSBsaXN0IG9mIGZpZWxkcyB0byBzZWFyY2ggaW50by5cbi8vIHJlcGxhY2UgaXMgYSBtYXAgZnJvbSBvYmplY3QgaWQgLT4gb2JqZWN0LlxuLy8gUmV0dXJucyBzb21ldGhpbmcgYW5hbG9nb3VzIHRvIG9iamVjdCwgYnV0IHdpdGggdGhlIGFwcHJvcHJpYXRlXG4vLyBwb2ludGVycyBpbmZsYXRlZC5cbmZ1bmN0aW9uIHJlcGxhY2VQb2ludGVycyhvYmplY3QsIHBhdGgsIHJlcGxhY2UpIHtcbiAgaWYgKEFycmF5LmlzQXJyYXkob2JqZWN0KSkge1xuICAgIHJldHVybiBvYmplY3RcbiAgICAgIC5tYXAob2JqID0+IHJlcGxhY2VQb2ludGVycyhvYmosIHBhdGgsIHJlcGxhY2UpKVxuICAgICAgLmZpbHRlcihvYmogPT4gdHlwZW9mIG9iaiAhPT0gJ3VuZGVmaW5lZCcpO1xuICB9XG5cbiAgaWYgKHR5cGVvZiBvYmplY3QgIT09ICdvYmplY3QnIHx8ICFvYmplY3QpIHtcbiAgICByZXR1cm4gb2JqZWN0O1xuICB9XG5cbiAgaWYgKHBhdGgubGVuZ3RoID09PSAwKSB7XG4gICAgaWYgKG9iamVjdCAmJiBvYmplY3QuX190eXBlID09PSAnUG9pbnRlcicpIHtcbiAgICAgIHJldHVybiByZXBsYWNlW29iamVjdC5vYmplY3RJZF07XG4gICAgfVxuICAgIHJldHVybiBvYmplY3Q7XG4gIH1cblxuICB2YXIgc3Vib2JqZWN0ID0gb2JqZWN0W3BhdGhbMF1dO1xuICBpZiAoIXN1Ym9iamVjdCkge1xuICAgIHJldHVybiBvYmplY3Q7XG4gIH1cbiAgdmFyIG5ld3N1YiA9IHJlcGxhY2VQb2ludGVycyhzdWJvYmplY3QsIHBhdGguc2xpY2UoMSksIHJlcGxhY2UpO1xuICB2YXIgYW5zd2VyID0ge307XG4gIGZvciAodmFyIGtleSBpbiBvYmplY3QpIHtcbiAgICBpZiAoa2V5ID09IHBhdGhbMF0pIHtcbiAgICAgIGFuc3dlcltrZXldID0gbmV3c3ViO1xuICAgIH0gZWxzZSB7XG4gICAgICBhbnN3ZXJba2V5XSA9IG9iamVjdFtrZXldO1xuICAgIH1cbiAgfVxuICByZXR1cm4gYW5zd2VyO1xufVxuXG4vLyBGaW5kcyBhIHN1Ym9iamVjdCB0aGF0IGhhcyB0aGUgZ2l2ZW4ga2V5LCBpZiB0aGVyZSBpcyBvbmUuXG4vLyBSZXR1cm5zIHVuZGVmaW5lZCBvdGhlcndpc2UuXG5mdW5jdGlvbiBmaW5kT2JqZWN0V2l0aEtleShyb290LCBrZXkpIHtcbiAgaWYgKHR5cGVvZiByb290ICE9PSAnb2JqZWN0Jykge1xuICAgIHJldHVybjtcbiAgfVxuICBpZiAoQXJyYXkuaXNBcnJheShyb290KSkge1xuICAgIGZvciAodmFyIGl0ZW0gb2Ygcm9vdCkge1xuICAgICAgY29uc3QgYW5zd2VyID0gZmluZE9iamVjdFdpdGhLZXkoaXRlbSwga2V5KTtcbiAgICAgIGlmIChhbnN3ZXIpIHtcbiAgICAgICAgcmV0dXJuIGFuc3dlcjtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgaWYgKHJvb3QgJiYgcm9vdFtrZXldKSB7XG4gICAgcmV0dXJuIHJvb3Q7XG4gIH1cbiAgZm9yICh2YXIgc3Via2V5IGluIHJvb3QpIHtcbiAgICBjb25zdCBhbnN3ZXIgPSBmaW5kT2JqZWN0V2l0aEtleShyb290W3N1YmtleV0sIGtleSk7XG4gICAgaWYgKGFuc3dlcikge1xuICAgICAgcmV0dXJuIGFuc3dlcjtcbiAgICB9XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBSZXN0UXVlcnk7XG4vLyBGb3IgdGVzdHNcbm1vZHVsZS5leHBvcnRzLl9VbnNhZmVSZXN0UXVlcnkgPSBfVW5zYWZlUmVzdFF1ZXJ5O1xuIl0sIm1hcHBpbmdzIjoiOztBQUFBO0FBQ0E7O0FBRUEsSUFBSUEsZ0JBQWdCLEdBQUdDLE9BQU8sQ0FBQyxnQ0FBZ0MsQ0FBQztBQUNoRSxJQUFJQyxLQUFLLEdBQUdELE9BQU8sQ0FBQyxZQUFZLENBQUMsQ0FB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
|