@sapui5/sap.fe.macros 1.108.10 → 1.108.12
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/package.json
CHANGED
|
@@ -479,36 +479,39 @@ sap.ui.define(["sap/base/Log", "sap/base/util/deepClone", "sap/base/util/deepEqu
|
|
|
479
479
|
for (var i in oMappings) {
|
|
480
480
|
var sLocalProperty = oMappings[i].key;
|
|
481
481
|
var sSemanticObjectProperty = oMappings[i].value;
|
|
482
|
-
if (
|
|
483
|
-
|
|
484
|
-
|
|
485
|
-
|
|
486
|
-
|
|
487
|
-
|
|
488
|
-
|
|
489
|
-
|
|
490
|
-
|
|
491
|
-
|
|
492
|
-
|
|
493
|
-
|
|
494
|
-
//
|
|
495
|
-
|
|
496
|
-
|
|
497
|
-
|
|
498
|
-
|
|
499
|
-
|
|
500
|
-
|
|
501
|
-
|
|
502
|
-
|
|
503
|
-
|
|
504
|
-
|
|
505
|
-
|
|
506
|
-
|
|
482
|
+
if (sLocalProperty !== sSemanticObjectProperty) {
|
|
483
|
+
if (oParams[sLocalProperty]) {
|
|
484
|
+
modifiedSelectionVariant.removeParameter(sSemanticObjectProperty);
|
|
485
|
+
modifiedSelectionVariant.removeSelectOption(sSemanticObjectProperty);
|
|
486
|
+
modifiedSelectionVariant.renameParameter(sLocalProperty, sSemanticObjectProperty);
|
|
487
|
+
modifiedSelectionVariant.renameSelectOption(sLocalProperty, sSemanticObjectProperty);
|
|
488
|
+
oParams[sSemanticObjectProperty] = oParams[sLocalProperty];
|
|
489
|
+
delete oParams[sLocalProperty];
|
|
490
|
+
hasChanged = true;
|
|
491
|
+
}
|
|
492
|
+
// We remove the parameter as there is no value
|
|
493
|
+
|
|
494
|
+
// The local property comes from a navigation property
|
|
495
|
+
else if (sLocalProperty.split("/").length > 1) {
|
|
496
|
+
// find the property to be removed
|
|
497
|
+
var propertyToBeRemoved = sLocalProperty.split("/").slice(-1)[0];
|
|
498
|
+
// The navigation property has no value
|
|
499
|
+
if (!oParams[propertyToBeRemoved]) {
|
|
500
|
+
delete oParams[propertyToBeRemoved];
|
|
501
|
+
modifiedSelectionVariant.removeParameter(propertyToBeRemoved);
|
|
502
|
+
modifiedSelectionVariant.removeSelectOption(propertyToBeRemoved);
|
|
503
|
+
} else if (propertyToBeRemoved !== sSemanticObjectProperty) {
|
|
504
|
+
// The navigation property has a value and properties names are different
|
|
505
|
+
modifiedSelectionVariant.renameParameter(propertyToBeRemoved, sSemanticObjectProperty);
|
|
506
|
+
modifiedSelectionVariant.renameSelectOption(propertyToBeRemoved, sSemanticObjectProperty);
|
|
507
|
+
oParams[sSemanticObjectProperty] = oParams[propertyToBeRemoved];
|
|
508
|
+
delete oParams[propertyToBeRemoved];
|
|
509
|
+
}
|
|
510
|
+
} else {
|
|
511
|
+
delete oParams[sLocalProperty];
|
|
512
|
+
modifiedSelectionVariant.removeParameter(sSemanticObjectProperty);
|
|
513
|
+
modifiedSelectionVariant.removeSelectOption(sSemanticObjectProperty);
|
|
507
514
|
}
|
|
508
|
-
} else {
|
|
509
|
-
delete oParams[sLocalProperty];
|
|
510
|
-
modifiedSelectionVariant.removeParameter(sSemanticObjectProperty);
|
|
511
|
-
modifiedSelectionVariant.removeSelectOption(sSemanticObjectProperty);
|
|
512
515
|
}
|
|
513
516
|
}
|
|
514
517
|
}
|
|
@@ -1284,4 +1287,4 @@ sap.ui.define(["sap/base/Log", "sap/base/util/deepClone", "sap/base/util/deepEqu
|
|
|
1284
1287
|
};
|
|
1285
1288
|
return SimpleLinkDelegate;
|
|
1286
1289
|
}, false);
|
|
1287
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJib2R5IiwicmVjb3ZlciIsInJlc3VsdCIsImUiLCJ0aGVuIiwicGFjdCIsInN0YXRlIiwidmFsdWUiLCJzIiwidiIsIm8iLCJiaW5kIiwib2JzZXJ2ZXIiLCJwcm90b3R5cGUiLCJvbkZ1bGZpbGxlZCIsIm9uUmVqZWN0ZWQiLCJjYWxsYmFjayIsIl90aGlzIiwidGhlbmFibGUiLCJhcnJheSIsImNoZWNrIiwiaSIsInJlamVjdCIsIl9jeWNsZSIsImxlbmd0aCIsInRhcmdldCIsImtleXMiLCJrZXkiLCJwdXNoIiwiU2ltcGxlTGlua0RlbGVnYXRlIiwiT2JqZWN0IiwiYXNzaWduIiwiTGlua0RlbGVnYXRlIiwiQ09OU1RBTlRTIiwiaUxpbmtzU2hvd25JblBvcHVwIiwic2FwbUxpbmsiLCJzYXB1aW1kY0xpbmsiLCJzYXB1aW1kY2xpbmtMaW5rSXRlbSIsInNhcG1PYmplY3RJZGVudGlmaWVyIiwic2FwbU9iamVjdFN0YXR1cyIsImdldENvbnN0YW50cyIsIl9nZXRFbnRpdHlUeXBlIiwib1BheWxvYWQiLCJvTWV0YU1vZGVsIiwiY3JlYXRlQmluZGluZ0NvbnRleHQiLCJlbnRpdHlUeXBlIiwidW5kZWZpbmVkIiwiX2dldFNlbWFudGljc01vZGVsIiwiSlNPTk1vZGVsIiwiX2dldERhdGFGaWVsZCIsImRhdGFGaWVsZCIsIl9nZXRDb250YWN0IiwiY29udGFjdCIsImZuVGVtcGxhdGVGcmFnbWVudCIsInNGcmFnbWVudE5hbWUiLCJ0aXRsZUxpbmtIcmVmIiwib0ZyYWdtZW50TW9kZWwiLCJvUGF5bG9hZFRvVXNlIiwicmVzb2x2ZWRwYXlsb2FkIiwicGF5bG9hZCIsIkxpbmtJZCIsIm9Db250cm9sIiwiaXNBIiwiZ2V0SWQiLCJnZXRNb2RlbCIsImdldFByb3BlcnR5IiwidGl0bGVsaW5rIiwib1NlbWFudGljc01vZGVsIiwic2VtYW50aWNNb2RlbCIsImJpbmRpbmdDb250ZXh0cyIsInNlbWFudGljIiwibW9kZWxzIiwiZW50aXR5U2V0IiwibWV0YU1vZGVsIiwidmlld0RhdGEiLCJvRnJhZ21lbnQiLCJYTUxUZW1wbGF0ZVByb2Nlc3NvciIsImxvYWRUZW1wbGF0ZSIsIlByb21pc2UiLCJyZXNvbHZlIiwiWE1MUHJlcHJvY2Vzc29yIiwicHJvY2VzcyIsIm5hbWUiLCJfaW50ZXJuYWxGcmFnbWVudCIsIkZyYWdtZW50IiwibG9hZCIsImRlZmluaXRpb24iLCJjb250cm9sbGVyIiwib1BvcG92ZXJDb250ZW50Iiwic2V0TW9kZWwiLCJzZXRCaW5kaW5nQ29udGV4dCIsImZldGNoQWRkaXRpb25hbENvbnRlbnQiLCJvUGF5TG9hZCIsIm9NZGNMaW5rQ29udHJvbCIsImFOYXZpZ2F0ZVJlZ2V4cE1hdGNoIiwibmF2aWdhdGlvblBhdGgiLCJtYXRjaCIsIm9CaW5kaW5nQ29udGV4dCIsImJpbmRDb250ZXh0IiwiZ2V0QmluZGluZ0NvbnRleHQiLCIkJG93blJlcXVlc3QiLCJnZXRNZXRhTW9kZWwiLCJnZXRCb3VuZENvbnRleHQiLCJfZmV0Y2hMaW5rQ3VzdG9tRGF0YSIsIl9vTGluayIsImdldFBhcmVudCIsImdldEN1c3RvbURhdGEiLCJmZXRjaExpbmtJdGVtcyIsIm9JbmZvTG9nIiwiX2dldFNlbWFudGljT2JqZWN0cyIsIm9Db250ZXh0T2JqZWN0IiwiZ2V0T2JqZWN0IiwiaW5pdGlhbGl6ZSIsIl9vTGlua0N1c3RvbURhdGEiLCJfbGluayIsImFMaW5rQ3VzdG9tRGF0YSIsIm1hcCIsImxpbmtJdGVtIiwibVByb3BlcnRpZXMiLCJvU2VtYW50aWNBdHRyaWJ1dGVzUmVzb2x2ZWQiLCJfY2FsY3VsYXRlU2VtYW50aWNBdHRyaWJ1dGVzIiwib1NlbWFudGljQXR0cmlidXRlcyIsInJlc3VsdHMiLCJvUGF5bG9hZFJlc29sdmVkIiwiX3JldHJpZXZlTmF2aWdhdGlvblRhcmdldHMiLCJhTGlua3MiLCJfZmluZExpbmtUeXBlIiwiYUxpbmtJdGVtcyIsIm5MaW5rVHlwZSIsIm9MaW5rSXRlbSIsIkxpbmtJdGVtIiwidGV4dCIsImdldFRleHQiLCJocmVmIiwiZ2V0SHJlZiIsImhhc1F1aWNrVmlld0ZhY2V0cyIsImxpbmtUeXBlIiwiZmV0Y2hMaW5rVHlwZSIsIm9MaW5rIiwiX29DdXJyZW50TGluayIsIl9vUGF5bG9hZCIsIm9EZWZhdWx0SW5pdGlhbFR5cGUiLCJpbml0aWFsVHlwZSIsInR5cGUiLCJkaXJlY3RMaW5rIiwicnVudGltZVR5cGUiLCJhcHBTdGF0ZUtleU1hcCIsIkVycm9yIiwic2VtYW50aWNPYmplY3RzIiwiX3JldHJpZXZlVW5tb2RpZmllZExpbmtJdGVtcyIsIl9MaW5rVHlwZSIsInJldHJpZXZlTGlua0l0ZW1zIiwib0Vycm9yIiwiTG9nIiwiZXJyb3IiLCJfUmVtb3ZlVGl0bGVMaW5rRnJvbVRhcmdldHMiLCJfYUxpbmtJdGVtcyIsIl9iVGl0bGVIYXNMaW5rIiwiX2FUaXRsZUxpbmsiLCJfc1RpdGxlTGlua0hyZWYiLCJfb01EQ0xpbmsiLCJiUmVzdWx0IiwibGlua0lzUHJpbWFyeUFjdGlvbiIsIl9zTGlua0ludGVudFdpdGhvdXRQYXJhbWV0ZXJzIiwiX3NUaXRsZUludGVudCIsImludGVudCIsInNwbGl0IiwidGl0bGVsaW5raHJlZiIsInNldFByb3BlcnR5IiwiYU1MaW5rSXRlbXMiLCJmaWx0ZXIiLCJfSXNTZW1hbnRpY09iamVjdER5bmFtaWMiLCJhTmV3TGlua0N1c3RvbURhdGEiLCJvVGhpcyIsImxpbmsiLCJvdGhlckxpbmsiLCJfZ2V0TGluZUNvbnRleHQiLCJvVmlldyIsIm1MaW5lQ29udGV4dCIsImdldEFnZ3JlZ2F0aW9uIiwiX3NldEZpbHRlckNvbnRleHRVcmxGb3JTZWxlY3Rpb25WYXJpYW50Iiwib1NlbGVjdGlvblZhcmlhbnQiLCJvTmF2aWdhdGlvblNlcnZpY2UiLCJnZXRWaWV3RGF0YSIsInNDb250ZXh0VXJsIiwiY29uc3RydWN0Q29udGV4dFVybCIsInNldEZpbHRlckNvbnRleHRVcmwiLCJfc2V0T2JqZWN0TWFwcGluZ3MiLCJzU2VtYW50aWNPYmplY3QiLCJvUGFyYW1zIiwiYVNlbWFudGljT2JqZWN0TWFwcGluZ3MiLCJoYXNDaGFuZ2VkIiwibW9kaWZpZWRTZWxlY3Rpb25WYXJpYW50IiwiU2VsZWN0aW9uVmFyaWFudCIsInRvSlNPTk9iamVjdCIsImZvckVhY2giLCJtYXBwaW5nIiwibWFwcGluZ1NlbWFudGljT2JqZWN0Iiwic2VtYW50aWNPYmplY3QiLCJtYXBwaW5nU2VtYW50aWNPYmplY3RQYXRoIiwiZ2V0RHluYW1pY1BhdGhGcm9tU2VtYW50aWNPYmplY3QiLCJvTWFwcGluZ3MiLCJpdGVtcyIsInNMb2NhbFByb3BlcnR5Iiwic1NlbWFudGljT2JqZWN0UHJvcGVydHkiLCJyZW1vdmVQYXJhbWV0ZXIiLCJyZW1vdmVTZWxlY3RPcHRpb24iLCJyZW5hbWVQYXJhbWV0ZXIiLCJyZW5hbWVTZWxlY3RPcHRpb24iLCJwcm9wZXJ0eVRvQmVSZW1vdmVkIiwic2xpY2UiLCJwYXJhbXMiLCJzZWxlY3Rpb25WYXJpYW50IiwiX2dldEFwcFN0YXRlS2V5QW5kVXJsUGFyYW1ldGVycyIsIm5hdmlnYXRpb25TZXJ2aWNlIiwiYVZhbHVlcyIsImRlZXBFcXVhbCIsImRlZmF1bHRDYWNoZSIsInNlbWFudGljQXR0cmlidXRlcyIsImFwcHN0YXRla2V5IiwidG9FUzZQcm9taXNlIiwiZ2V0QXBwU3RhdGVLZXlBbmRVcmxQYXJhbWV0ZXJzIiwidG9KU09OU3RyaW5nIiwiY2FjaGUiLCJfZ2V0TGlua0l0ZW1XaXRoTmV3UGFyYW1ldGVyIiwiX3RoYXQiLCJfb0xpbmtJdGVtIiwiX29TaGVsbFNlcnZpY2VzIiwiX29QYXJhbXMiLCJfc0FwcFN0YXRlS2V5IiwiX29TZWxlY3Rpb25WYXJpYW50IiwiX29OYXZpZ2F0aW9uU2VydmljZSIsImV4cGFuZENvbXBhY3RIYXNoIiwic0hhc2giLCJvTmV3U2hlbGxIYXNoIiwib1NoZWxsSGFzaCIsImFjdGlvbiIsIm9OZXdQYXJhbXMiLCJhcHBTdGF0ZUtleSIsInNldEhyZWYiLCJjb25zdHJ1Y3RTaGVsbEhhc2giLCJhU2VtYW50aWNMaW5rcyIsInBhcnNlU2hlbGxIYXNoIiwic2VtYW50aWNPYmplY3RNYXBwaW5ncyIsIm5ld1NlbGVjdGlvblZhcmlhbnQiLCJfcmVtb3ZlRW1wdHlMaW5rSXRlbSIsIm1vZGlmeUxpbmtJdGVtcyIsIkZpZWxkSGVscGVyIiwiY2hlY2tQcmltYXJ5QWN0aW9ucyIsInByaW1hcnlBY3Rpb25Jc0FjdGl2ZSIsImFUaXRsZUxpbmsiLCJ0aXRsZUxpbmsiLCJiVGl0bGVIYXNMaW5rIiwiaGFzVGl0bGVMaW5rIiwiQ29tbW9uVXRpbHMiLCJnZXRUYXJnZXRWaWV3Iiwib0FwcENvbXBvbmVudCIsImdldEFwcENvbXBvbmVudCIsIm9TaGVsbFNlcnZpY2VzIiwiZ2V0U2hlbGxTZXJ2aWNlcyIsImhhc1VTaGVsbCIsIm9UYXJnZXRJbmZvIiwibWFpblNlbWFudGljT2JqZWN0IiwiZ2V0TmF2aWdhdGlvblNlcnZpY2UiLCJvQ29udHJvbGxlciIsImdldENvbnRyb2xsZXIiLCJtTGluZUNvbnRleHREYXRhIiwic01ldGFQYXRoIiwiZ2V0TWV0YVBhdGgiLCJnZXRQYXRoIiwiX2ludGVudEJhc2VkTmF2aWdhdGlvbiIsInJlbW92ZVNlbnNpdGl2ZURhdGEiLCJwcmVwYXJlQ29udGV4dEZvckV4dGVybmFsTmF2aWdhdGlvbiIsIm1peEF0dHJpYnV0ZXNBbmRTZWxlY3Rpb25WYXJpYW50IiwicHJvcGVydGllc1dpdGhvdXRDb25mbGljdCIsImludGVudEJhc2VkTmF2aWdhdGlvbiIsImFkYXB0TmF2aWdhdGlvbkNvbnRleHQiLCJfcmVtb3ZlVGVjaG5pY2FsUGFyYW1ldGVycyIsInRpdGxlTGlua3RvQmVSZW1vdmUiLCJpbmRleCIsImJlZm9yZU5hdmlnYXRpb25DYWxsYmFjayIsIm9FdmVudCIsIm9Tb3VyY2UiLCJnZXRTb3VyY2UiLCJzSHJlZiIsImdldFBhcmFtZXRlciIsIm9VUkxQYXJzaW5nIiwiRmFjdG9yeSIsImdldFNlcnZpY2UiLCJvSGFzaCIsIktlZXBBbGl2ZUhlbHBlciIsInN0b3JlQ29udHJvbFJlZnJlc2hTdHJhdGVneUZvckhhc2giLCJfZ2V0U2VtYW50aWNPYmplY3RDdXN0b21EYXRhVmFsdWUiLCJvU2VtYW50aWNPYmplY3RzUmVzb2x2ZWQiLCJzUHJvcGVydHlOYW1lIiwic0N1c3RvbURhdGFWYWx1ZSIsImlDdXN0b21EYXRhQ291bnQiLCJnZXRLZXkiLCJnZXRWYWx1ZSIsIl9pc0R5bmFtaWNQYXRoIiwicGF0aE9yVmFsdWUiLCJpbmRleE9mIiwiX3VwZGF0ZVBheWxvYWRXaXRoUmVzb2x2ZWRTZW1hbnRpY09iamVjdFZhbHVlIiwibmV3UGF5bG9hZCIsInNlbWFudGljT2JqZWN0TmFtZSIsInNlbWFudGljT2JqZWN0c1Jlc29sdmVkIiwiaiIsIl9jcmVhdGVOZXdQYXlsb2FkV2l0aER5bmFtaWNTZW1hbnRpY09iamVjdHNSZXNvbHZlZCIsInRtcFByb3BlcnR5TmFtZSIsInN1YnN0ciIsIl91cGRhdGVTZW1hbnRpY09iamVjdHNGb3JNYXBwaW5ncyIsIm1kY1BheWxvYWQiLCJtZGNQYXlsb2FkV2l0aER5bmFtaWNTZW1hbnRpY09iamVjdHNSZXNvbHZlZCIsInNlbWFudGljT2JqZWN0TWFwcGluZyIsIl91cGRhdGVTZW1hbnRpY09iamVjdHNVbmF2YWlsYWJsZUFjdGlvbnMiLCJtZGNQYXlsb2FkU2VtYW50aWNPYmplY3RVbmF2YWlsYWJsZUFjdGlvbnMiLCJfSW5kZXgiLCJzZW1hbnRpY09iamVjdFVuYXZhaWxhYmxlQWN0aW9uIiwiZmluZEluZGV4IiwiX3VwZGF0ZVNlbWFudGljT2JqZWN0c1dpdGhSZXNvbHZlZFZhbHVlIiwibmV3U2VtYW50aWNPYmplY3RzQ291bnQiLCJzcGxpY2UiLCJfcmVtb3ZlRW1wdHlTZW1hbnRpY09iamVjdHNNYXBwaW5ncyIsIm1hcHBpbmdzQ291bnQiLCJfc2V0UGF5bG9hZFdpdGhEeW5hbWljU2VtYW50aWNPYmplY3RzUmVzb2x2ZWQiLCJvUGF5bG9hZFdpdGhEeW5hbWljU2VtYW50aWNPYmplY3RzUmVzb2x2ZWQiLCJwcm9wZXJ0eVBhdGhMYWJlbCIsImRlZXBDbG9uZSIsIl9TZW1hbnRpY09iamVjdFVuYXZhaWxhYmxlQWN0aW9ucyIsInNlbWFudGljT2JqZWN0VW5hdmFpbGFibGVBY3Rpb25zIiwiX2dldFBheWxvYWRXaXRoRHluYW1pY1NlbWFudGljT2JqZWN0c1Jlc29sdmVkIiwibGlua0N1c3RvbURhdGEiLCJfdXBkYXRlUGF5bG9hZFdpdGhTZW1hbnRpY0F0dHJpYnV0ZXMiLCJhU2VtYW50aWNPYmplY3RzIiwib1Jlc3VsdHMiLCJtU2VtYW50aWNPYmplY3RNYXBwaW5ncyIsImFkZENvbnRleHRPYmplY3QiLCJzQXR0cmlidXRlTmFtZSIsIm9BdHRyaWJ1dGUiLCJvVHJhbnNmb3JtYXRpb25BZGRpdGlvbmFsIiwiZ2V0U2VtYW50aWNPYmplY3RBdHRyaWJ1dGUiLCJjcmVhdGVBdHRyaWJ1dGVTdHJ1Y3R1cmUiLCJhZGRTZW1hbnRpY09iamVjdEF0dHJpYnV0ZSIsInRyYW5zZm9ybWF0aW9ucyIsImRlc2NyaXB0aW9uIiwiaXNQbGFpbk9iamVjdCIsImFLZXlzIiwic05ld0F0dHJpYnV0ZU5hbWVNYXBwZWQiLCJzTmV3QXR0cmlidXRlTmFtZSIsInNWYWx1ZSIsInNLZXkiLCJzQXR0cmlidXRlTmFtZU1hcHBlZCIsInJlYXNvbiIsImFBdHRyaWJ1dGVOZXciLCJfY29udmVydFNlbWFudGljT2JqZWN0TWFwcGluZyIsIl9nZXRTZW1hbnRpY09iamVjdE1hcHBpbmdzIiwic0FwcFN0YXRlS2V5Iiwib05hdmlnYXRpb25UYXJnZXRzIiwib3duTmF2aWdhdGlvbiIsImF2YWlsYWJsZUFjdGlvbnMiLCJpU3VwZXJpb3JBY3Rpb25MaW5rc0ZvdW5kIiwiQ29yZSIsImxvYWRMaWJyYXJ5IiwiYXN5bmMiLCJzYXAiLCJ1aSIsInJlcXVpcmUiLCJVdGlscyIsImdldEFwcENvbXBvbmVudEZvckNvbnRyb2wiLCJhUGFyYW1zIiwic29ydFJlc3VsdHNCeSIsImdldExpbmtzIiwiYkhhc0xpbmtzIiwiYVNlbWFudGljT2JqZWN0VW5hdmFpbGFibGVBY3Rpb25zIiwiX2dldFNlbWFudGljT2JqZWN0VW5hdmFpbGFibGVBY3Rpb25zIiwib1VuYXZhaWxhYmxlQWN0aW9ucyIsIl9jb252ZXJ0U2VtYW50aWNPYmplY3RVbmF2YWlsYWJsZUFjdGlvbiIsInNDdXJyZW50SGFzaCIsIkZpZWxkUnVudGltZSIsIl9mbkZpeEhhc2hRdWVyeVN0cmluZyIsImdldEhhc2giLCJmbklzVW5hdmFpbGFibGVBY3Rpb24iLCJzQWN0aW9uIiwiZm5BZGRMaW5rIiwic2hlbGxIYXNoIiwiaWNvbiIsImluaXRpYWxseVZpc2libGUiLCJ0YWdzIiwiYWRkU2VtYW50aWNPYmplY3RJbnRlbnQiLCJuIiwiaUxpbmtJdGVtSW5kZXgiLCJvU2VtYW50aWNPYmplY3RVbmF2YWlsYWJsZUFjdGlvbiIsIlNlbWFudGljT2JqZWN0VW5hdmFpbGFibGVBY3Rpb24iLCJhY3Rpb25zIiwiYVNlbWFudGljT2JqZWN0TWFwcGluZ0l0ZW1zIiwib1NlbWFudGljT2JqZWN0TWFwcGluZyIsIm9TZW1hbnRpY09iamVjdE1hcHBpbmdJdGVtIiwiU2VtYW50aWNPYmplY3RNYXBwaW5nSXRlbSIsIlNlbWFudGljT2JqZWN0TWFwcGluZyIsImdldFNlbWFudGljT2JqZWN0IiwiZ2V0SXRlbXMiLCJyZWR1Y2UiLCJvTWFwIiwib0l0ZW0iLCJfU2VtYW50aWNPYmplY3ROYW1lIiwiX1NlbWFudGljT2JqZWN0SGFzQWxyZWFkeVVuYXZhaWxhYmxlQWN0aW9ucyIsIl9VbmF2YWlsYWJsZUFjdGlvbnMiLCJtU2VtYW50aWNPYmplY3RVbmF2YWlsYWJsZUFjdGlvbnMiLCJvU2VtYW50aWNPYmplY3RVbmF2YWlsYWJsZUFjdGlvbnMiLCJnZXRBY3Rpb25zIiwiVW5hdmFpbGFibGVBY3Rpb24iXSwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzIjpbIlF1aWNrVmlld0xpbmtEZWxlZ2F0ZS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgTG9nIGZyb20gXCJzYXAvYmFzZS9Mb2dcIjtcbmltcG9ydCBkZWVwQ2xvbmUgZnJvbSBcInNhcC9iYXNlL3V0aWwvZGVlcENsb25lXCI7XG5pbXBvcnQgZGVlcEVxdWFsIGZyb20gXCJzYXAvYmFzZS91dGlsL2RlZXBFcXVhbFwiO1xuaW1wb3J0IGlzUGxhaW5PYmplY3QgZnJvbSBcInNhcC9iYXNlL3V0aWwvaXNQbGFpbk9iamVjdFwiO1xuaW1wb3J0IENvbW1vblV0aWxzIGZyb20gXCJzYXAvZmUvY29yZS9Db21tb25VdGlsc1wiO1xuaW1wb3J0IEtlZXBBbGl2ZUhlbHBlciBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9LZWVwQWxpdmVIZWxwZXJcIjtcbmltcG9ydCB0b0VTNlByb21pc2UgZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvVG9FUzZQcm9taXNlXCI7XG5pbXBvcnQgUGFnZUNvbnRyb2xsZXIgZnJvbSBcInNhcC9mZS9jb3JlL1BhZ2VDb250cm9sbGVyXCI7XG5pbXBvcnQgeyBOYXZpZ2F0aW9uU2VydmljZSB9IGZyb20gXCJzYXAvZmUvY29yZS9zZXJ2aWNlcy9OYXZpZ2F0aW9uU2VydmljZUZhY3RvcnlcIjtcbmltcG9ydCB7IGdldER5bmFtaWNQYXRoRnJvbVNlbWFudGljT2JqZWN0IH0gZnJvbSBcInNhcC9mZS9jb3JlL3RlbXBsYXRpbmcvU2VtYW50aWNPYmplY3RIZWxwZXJcIjtcbmltcG9ydCBGaWVsZEhlbHBlciBmcm9tIFwic2FwL2ZlL21hY3Jvcy9maWVsZC9GaWVsZEhlbHBlclwiO1xuaW1wb3J0IEZpZWxkUnVudGltZSBmcm9tIFwic2FwL2ZlL21hY3Jvcy9maWVsZC9GaWVsZFJ1bnRpbWVcIjtcbmltcG9ydCBTZWxlY3Rpb25WYXJpYW50IGZyb20gXCJzYXAvZmUvbmF2aWdhdGlvbi9TZWxlY3Rpb25WYXJpYW50XCI7XG5pbXBvcnQgQ29yZSBmcm9tIFwic2FwL3VpL2NvcmUvQ29yZVwiO1xuaW1wb3J0IEZyYWdtZW50IGZyb20gXCJzYXAvdWkvY29yZS9GcmFnbWVudFwiO1xuaW1wb3J0IFhNTFByZXByb2Nlc3NvciBmcm9tIFwic2FwL3VpL2NvcmUvdXRpbC9YTUxQcmVwcm9jZXNzb3JcIjtcbmltcG9ydCBYTUxUZW1wbGF0ZVByb2Nlc3NvciBmcm9tIFwic2FwL3VpL2NvcmUvWE1MVGVtcGxhdGVQcm9jZXNzb3JcIjtcbmltcG9ydCBGYWN0b3J5IGZyb20gXCJzYXAvdWkvbWRjL2xpbmsvRmFjdG9yeVwiO1xuaW1wb3J0IExpbmtJdGVtIGZyb20gXCJzYXAvdWkvbWRjL2xpbmsvTGlua0l0ZW1cIjtcbmltcG9ydCBTZW1hbnRpY09iamVjdE1hcHBpbmcgZnJvbSBcInNhcC91aS9tZGMvbGluay9TZW1hbnRpY09iamVjdE1hcHBpbmdcIjtcbmltcG9ydCBTZW1hbnRpY09iamVjdE1hcHBpbmdJdGVtIGZyb20gXCJzYXAvdWkvbWRjL2xpbmsvU2VtYW50aWNPYmplY3RNYXBwaW5nSXRlbVwiO1xuaW1wb3J0IFNlbWFudGljT2JqZWN0VW5hdmFpbGFibGVBY3Rpb24gZnJvbSBcInNhcC91aS9tZGMvbGluay9TZW1hbnRpY09iamVjdFVuYXZhaWxhYmxlQWN0aW9uXCI7XG5pbXBvcnQgTGlua0RlbGVnYXRlIGZyb20gXCJzYXAvdWkvbWRjL0xpbmtEZWxlZ2F0ZVwiO1xuaW1wb3J0IHR5cGUgQ29udGV4dCBmcm9tIFwic2FwL3VpL21vZGVsL0NvbnRleHRcIjtcbmltcG9ydCBKU09OTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9qc29uL0pTT05Nb2RlbFwiO1xuaW1wb3J0IHR5cGUgT0RhdGFNZXRhTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9PRGF0YU1ldGFNb2RlbFwiO1xuXG50eXBlIFJlZ2lzdGVyZWRTZW1hbnRpY09iamVjdE1hcHBpbmcgPSB7IHNlbWFudGljT2JqZWN0OiBzdHJpbmc7IGl0ZW1zOiB7IGtleTogc3RyaW5nOyB2YWx1ZTogc3RyaW5nIH1bXSB9O1xudHlwZSBSZWdpc3RlcmVkU2VtYW50aWNPYmplY3RNYXBwaW5ncyA9IFJlZ2lzdGVyZWRTZW1hbnRpY09iamVjdE1hcHBpbmdbXTtcbnR5cGUgUmVnaXN0ZXJlZFBheWxvYWQgPSB7XG5cdG1haW5TZW1hbnRpY09iamVjdD86IHN0cmluZztcblx0c2VtYW50aWNPYmplY3RzOiBzdHJpbmdbXTtcblx0c2VtYW50aWNPYmplY3RzUmVzb2x2ZWQ/OiBzdHJpbmdbXTtcblx0c2VtYW50aWNPYmplY3RNYXBwaW5nczogUmVnaXN0ZXJlZFNlbWFudGljT2JqZWN0TWFwcGluZ3M7XG5cdHNlbWFudGljT2JqZWN0VW5hdmFpbGFibGVBY3Rpb25zPzogUmVnaXN0ZXJlZFNlbWFudGljT2JqZWN0VW5hdmFpbGFibGVBY3Rpb25zO1xuXHRlbnRpdHlUeXBlPzogc3RyaW5nO1xuXHRkYXRhRmllbGQ/OiBzdHJpbmc7XG5cdGNvbnRhY3Q/OiBzdHJpbmc7XG5cdG5hdmlnYXRpb25QYXRoPzogc3RyaW5nO1xuXHRwcm9wZXJ0eVBhdGhMYWJlbD86IHN0cmluZztcbn07XG5cbnR5cGUgUmVnaXN0ZXJlZFNlbWFudGljT2JqZWN0VW5hdmFpbGFibGVBY3Rpb25zID0gW1xuXHR7XG5cdFx0c2VtYW50aWNPYmplY3Q6IHN0cmluZztcblx0XHRhY3Rpb25zOiBzdHJpbmdbXTtcblx0fVxuXTtcblxuY29uc3QgU2ltcGxlTGlua0RlbGVnYXRlID0gT2JqZWN0LmFzc2lnbih7fSwgTGlua0RlbGVnYXRlKSBhcyBhbnk7XG5jb25zdCBDT05TVEFOVFMgPSB7XG5cdGlMaW5rc1Nob3duSW5Qb3B1cDogMyxcblx0c2FwbUxpbms6IFwic2FwLm0uTGlua1wiLFxuXHRzYXB1aW1kY0xpbms6IFwic2FwLnVpLm1kYy5MaW5rXCIsXG5cdHNhcHVpbWRjbGlua0xpbmtJdGVtOiBcInNhcC51aS5tZGMubGluay5MaW5rSXRlbVwiLFxuXHRzYXBtT2JqZWN0SWRlbnRpZmllcjogXCJzYXAubS5PYmplY3RJZGVudGlmaWVyXCIsXG5cdHNhcG1PYmplY3RTdGF0dXM6IFwic2FwLm0uT2JqZWN0U3RhdHVzXCJcbn07XG5TaW1wbGVMaW5rRGVsZWdhdGUuZ2V0Q29uc3RhbnRzID0gZnVuY3Rpb24gKCkge1xuXHRyZXR1cm4gQ09OU1RBTlRTO1xufTtcbi8qKlxuICogVGhpcyB3aWxsIHJldHVybiBhbiBhcnJheSBvZiB0aGUgU2VtYW50aWNPYmplY3RzIGFzIHN0cmluZ3MgZ2l2ZW4gYnkgdGhlIHBheWxvYWQuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSBvUGF5bG9hZCBUaGUgcGF5bG9hZCBkZWZpbmVkIGJ5IHRoZSBhcHBsaWNhdGlvblxuICogQHBhcmFtIG9NZXRhTW9kZWwgVGhlIE9EYXRhTWV0YU1vZGVsIHJlY2VpdmVkIGZyb20gdGhlIExpbmtcbiAqIEByZXR1cm5zIFRoZSBjb250ZXh0IHBvaW50aW5nIHRvIHRoZSBjdXJyZW50IEVudGl0eVR5cGUuXG4gKi9cblNpbXBsZUxpbmtEZWxlZ2F0ZS5fZ2V0RW50aXR5VHlwZSA9IGZ1bmN0aW9uIChvUGF5bG9hZDogYW55LCBvTWV0YU1vZGVsOiBPRGF0YU1ldGFNb2RlbCkge1xuXHRpZiAob01ldGFNb2RlbCkge1xuXHRcdHJldHVybiBvTWV0YU1vZGVsLmNyZWF0ZUJpbmRpbmdDb250ZXh0KG9QYXlsb2FkLmVudGl0eVR5cGUpO1xuXHR9IGVsc2Uge1xuXHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdH1cbn07XG4vKipcbiAqIFRoaXMgd2lsbCByZXR1cm4gYW4gYXJyYXkgb2YgdGhlIFNlbWFudGljT2JqZWN0cyBhcyBzdHJpbmdzIGdpdmVuIGJ5IHRoZSBwYXlsb2FkLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0gb1BheWxvYWQgVGhlIHBheWxvYWQgZGVmaW5lZCBieSB0aGUgYXBwbGljYXRpb25cbiAqIEBwYXJhbSBvTWV0YU1vZGVsIFRoZSBPRGF0YU1ldGFNb2RlbCByZWNlaXZlZCBmcm9tIHRoZSBMaW5rXG4gKiBAcmV0dXJucyBBIG1vZGVsIGNvbnRhaW5pbmcgdGhlIHBheWxvYWQgaW5mb3JtYXRpb25cbiAqL1xuU2ltcGxlTGlua0RlbGVnYXRlLl9nZXRTZW1hbnRpY3NNb2RlbCA9IGZ1bmN0aW9uIChvUGF5bG9hZDogb2JqZWN0LCBvTWV0YU1vZGVsOiBvYmplY3QpIHtcblx0aWYgKG9NZXRhTW9kZWwpIHtcblx0XHRyZXR1cm4gbmV3IEpTT05Nb2RlbChvUGF5bG9hZCk7XG5cdH0gZWxzZSB7XG5cdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0fVxufTtcbi8qKlxuICogVGhpcyB3aWxsIHJldHVybiBhbiBhcnJheSBvZiB0aGUgU2VtYW50aWNPYmplY3RzIGFzIHN0cmluZ3MgZ2l2ZW4gYnkgdGhlIHBheWxvYWQuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSBvUGF5bG9hZCBUaGUgcGF5bG9hZCBkZWZpbmVkIGJ5IHRoZSBhcHBsaWNhdGlvblxuICogQHBhcmFtIG9NZXRhTW9kZWwgVGhlIE9EYXRhTWV0YU1vZGVsIHJlY2VpdmVkIGZyb20gdGhlIExpbmtcbiAqIEByZXR1cm5zIEFuIGFycmF5IGNvbnRhaW5pbmcgU2VtYW50aWNPYmplY3RzIGJhc2VkIG9mIHRoZSBwYXlsb2FkXG4gKi9cblNpbXBsZUxpbmtEZWxlZ2F0ZS5fZ2V0RGF0YUZpZWxkID0gZnVuY3Rpb24gKG9QYXlsb2FkOiBhbnksIG9NZXRhTW9kZWw6IE9EYXRhTWV0YU1vZGVsKSB7XG5cdHJldHVybiBvTWV0YU1vZGVsLmNyZWF0ZUJpbmRpbmdDb250ZXh0KG9QYXlsb2FkLmRhdGFGaWVsZCk7XG59O1xuLyoqXG4gKiBUaGlzIHdpbGwgcmV0dXJuIGFuIGFycmF5IG9mIHRoZSBTZW1hbnRpY09iamVjdHMgYXMgc3RyaW5ncyBnaXZlbiBieSB0aGUgcGF5bG9hZC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIG9QYXlsb2FkIFRoZSBwYXlsb2FkIGRlZmluZWQgYnkgdGhlIGFwcGxpY2F0aW9uXG4gKiBAcGFyYW0gb01ldGFNb2RlbCBUaGUgT0RhdGFNZXRhTW9kZWwgcmVjZWl2ZWQgZnJvbSB0aGUgTGlua1xuICogQHJldHVybnMgQW5jb250YWluaW5nIFNlbWFudGljT2JqZWN0cyBiYXNlZCBvZiB0aGUgcGF5bG9hZFxuICovXG5TaW1wbGVMaW5rRGVsZWdhdGUuX2dldENvbnRhY3QgPSBmdW5jdGlvbiAob1BheWxvYWQ6IGFueSwgb01ldGFNb2RlbDogT0RhdGFNZXRhTW9kZWwpIHtcblx0cmV0dXJuIG9NZXRhTW9kZWwuY3JlYXRlQmluZGluZ0NvbnRleHQob1BheWxvYWQuY29udGFjdCk7XG59O1xuU2ltcGxlTGlua0RlbGVnYXRlLmZuVGVtcGxhdGVGcmFnbWVudCA9IGZ1bmN0aW9uICgpIHtcblx0bGV0IHNGcmFnbWVudE5hbWU6IHN0cmluZywgdGl0bGVMaW5rSHJlZjtcblx0Y29uc3Qgb0ZyYWdtZW50TW9kZWw6IGFueSA9IHt9O1xuXHRsZXQgb1BheWxvYWRUb1VzZTtcblxuXHQvLyBwYXlsb2FkIGhhcyBiZWVuIG1vZGlmaWVkIGJ5IGZldGNoaW5nIFNlbWFudGljIE9iamVjdHMgbmFtZXMgd2l0aCBwYXRoXG5cdGlmICh0aGlzLnJlc29sdmVkcGF5bG9hZCkge1xuXHRcdG9QYXlsb2FkVG9Vc2UgPSB0aGlzLnJlc29sdmVkcGF5bG9hZDtcblx0fSBlbHNlIHtcblx0XHRvUGF5bG9hZFRvVXNlID0gdGhpcy5wYXlsb2FkO1xuXHR9XG5cblx0aWYgKG9QYXlsb2FkVG9Vc2UgJiYgIW9QYXlsb2FkVG9Vc2UuTGlua0lkKSB7XG5cdFx0b1BheWxvYWRUb1VzZS5MaW5rSWQgPSB0aGlzLm9Db250cm9sICYmIHRoaXMub0NvbnRyb2wuaXNBKENPTlNUQU5UUy5zYXB1aW1kY0xpbmspID8gdGhpcy5vQ29udHJvbC5nZXRJZCgpIDogdW5kZWZpbmVkO1xuXHR9XG5cblx0aWYgKG9QYXlsb2FkVG9Vc2UuTGlua0lkKSB7XG5cdFx0dGl0bGVMaW5rSHJlZiA9IHRoaXMub0NvbnRyb2wuZ2V0TW9kZWwoXCIkc2FwdWltZGNMaW5rXCIpLmdldFByb3BlcnR5KFwiL3RpdGxlTGlua0hyZWZcIik7XG5cdFx0b1BheWxvYWRUb1VzZS50aXRsZWxpbmsgPSB0aXRsZUxpbmtIcmVmO1xuXHR9XG5cblx0Y29uc3Qgb1NlbWFudGljc01vZGVsID0gdGhpcy5fZ2V0U2VtYW50aWNzTW9kZWwob1BheWxvYWRUb1VzZSwgdGhpcy5vTWV0YU1vZGVsKTtcblx0dGhpcy5zZW1hbnRpY01vZGVsID0gb1NlbWFudGljc01vZGVsO1xuXG5cdGlmIChvUGF5bG9hZFRvVXNlLmVudGl0eVR5cGUgJiYgdGhpcy5fZ2V0RW50aXR5VHlwZShvUGF5bG9hZFRvVXNlLCB0aGlzLm9NZXRhTW9kZWwpKSB7XG5cdFx0c0ZyYWdtZW50TmFtZSA9IFwic2FwLmZlLm1hY3Jvcy5maWVsZC5RdWlja1ZpZXdMaW5rRm9yRW50aXR5XCI7XG5cdFx0b0ZyYWdtZW50TW9kZWwuYmluZGluZ0NvbnRleHRzID0ge1xuXHRcdFx0ZW50aXR5VHlwZTogdGhpcy5fZ2V0RW50aXR5VHlwZShvUGF5bG9hZFRvVXNlLCB0aGlzLm9NZXRhTW9kZWwpLFxuXHRcdFx0c2VtYW50aWM6IG9TZW1hbnRpY3NNb2RlbC5jcmVhdGVCaW5kaW5nQ29udGV4dChcIi9cIilcblx0XHR9O1xuXHRcdG9GcmFnbWVudE1vZGVsLm1vZGVscyA9IHtcblx0XHRcdGVudGl0eVR5cGU6IHRoaXMub01ldGFNb2RlbCxcblx0XHRcdHNlbWFudGljOiBvU2VtYW50aWNzTW9kZWxcblx0XHR9O1xuXHR9IGVsc2UgaWYgKG9QYXlsb2FkVG9Vc2UuZGF0YUZpZWxkICYmIHRoaXMuX2dldERhdGFGaWVsZChvUGF5bG9hZFRvVXNlLCB0aGlzLm9NZXRhTW9kZWwpKSB7XG5cdFx0c0ZyYWdtZW50TmFtZSA9IFwic2FwLmZlLm1hY3Jvcy5maWVsZC5RdWlja1ZpZXdMaW5rRm9yRGF0YUZpZWxkXCI7XG5cdFx0b0ZyYWdtZW50TW9kZWwuYmluZGluZ0NvbnRleHRzID0ge1xuXHRcdFx0ZGF0YUZpZWxkOiB0aGlzLl9nZXREYXRhRmllbGQob1BheWxvYWRUb1VzZSwgdGhpcy5vTWV0YU1vZGVsKSxcblx0XHRcdHNlbWFudGljOiBvU2VtYW50aWNzTW9kZWwuY3JlYXRlQmluZGluZ0NvbnRleHQoXCIvXCIpXG5cdFx0fTtcblx0XHRvRnJhZ21lbnRNb2RlbC5tb2RlbHMgPSB7XG5cdFx0XHRkYXRhRmllbGQ6IHRoaXMub01ldGFNb2RlbCxcblx0XHRcdHNlbWFudGljOiBvU2VtYW50aWNzTW9kZWxcblx0XHR9O1xuXHR9IGVsc2UgaWYgKG9QYXlsb2FkVG9Vc2UuY29udGFjdCAmJiB0aGlzLl9nZXRDb250YWN0KG9QYXlsb2FkVG9Vc2UsIHRoaXMub01ldGFNb2RlbCkpIHtcblx0XHRzRnJhZ21lbnROYW1lID0gXCJzYXAuZmUubWFjcm9zLmZpZWxkLlF1aWNrVmlld0xpbmtGb3JDb250YWN0XCI7XG5cdFx0b0ZyYWdtZW50TW9kZWwuYmluZGluZ0NvbnRleHRzID0ge1xuXHRcdFx0Y29udGFjdDogdGhpcy5fZ2V0Q29udGFjdChvUGF5bG9hZFRvVXNlLCB0aGlzLm9NZXRhTW9kZWwpXG5cdFx0fTtcblx0XHRvRnJhZ21lbnRNb2RlbC5tb2RlbHMgPSB7XG5cdFx0XHRjb250YWN0OiB0aGlzLm9NZXRhTW9kZWxcblx0XHR9O1xuXHR9XG5cdG9GcmFnbWVudE1vZGVsLm1vZGVscy5lbnRpdHlTZXQgPSB0aGlzLm9NZXRhTW9kZWw7XG5cdG9GcmFnbWVudE1vZGVsLm1vZGVscy5tZXRhTW9kZWwgPSB0aGlzLm9NZXRhTW9kZWw7XG5cdGlmICh0aGlzLm9Db250cm9sICYmIHRoaXMub0NvbnRyb2wuZ2V0TW9kZWwoXCJ2aWV3RGF0YVwiKSkge1xuXHRcdG9GcmFnbWVudE1vZGVsLm1vZGVscy52aWV3RGF0YSA9IHRoaXMub0NvbnRyb2wuZ2V0TW9kZWwoXCJ2aWV3RGF0YVwiKTtcblx0XHRvRnJhZ21lbnRNb2RlbC5iaW5kaW5nQ29udGV4dHMudmlld0RhdGEgPSB0aGlzLm9Db250cm9sLmdldE1vZGVsKFwidmlld0RhdGFcIikuY3JlYXRlQmluZGluZ0NvbnRleHQoXCIvXCIpO1xuXHR9XG5cblx0Y29uc3Qgb0ZyYWdtZW50ID0gWE1MVGVtcGxhdGVQcm9jZXNzb3IubG9hZFRlbXBsYXRlKHNGcmFnbWVudE5hbWUhLCBcImZyYWdtZW50XCIpO1xuXG5cdHJldHVybiBQcm9taXNlLnJlc29sdmUoWE1MUHJlcHJvY2Vzc29yLnByb2Nlc3Mob0ZyYWdtZW50LCB7IG5hbWU6IHNGcmFnbWVudE5hbWUhIH0sIG9GcmFnbWVudE1vZGVsKSlcblx0XHQudGhlbigoX2ludGVybmFsRnJhZ21lbnQ6IGFueSkgPT4ge1xuXHRcdFx0cmV0dXJuIEZyYWdtZW50LmxvYWQoe1xuXHRcdFx0XHRkZWZpbml0aW9uOiBfaW50ZXJuYWxGcmFnbWVudCxcblx0XHRcdFx0Y29udHJvbGxlcjogdGhpc1xuXHRcdFx0fSk7XG5cdFx0fSlcblx0XHQudGhlbigob1BvcG92ZXJDb250ZW50OiBhbnkpID0+IHtcblx0XHRcdGlmIChvUG9wb3ZlckNvbnRlbnQpIHtcblx0XHRcdFx0aWYgKG9GcmFnbWVudE1vZGVsLm1vZGVscyAmJiBvRnJhZ21lbnRNb2RlbC5tb2RlbHMuc2VtYW50aWMpIHtcblx0XHRcdFx0XHRvUG9wb3ZlckNvbnRlbnQuc2V0TW9kZWwob0ZyYWdtZW50TW9kZWwubW9kZWxzLnNlbWFudGljLCBcInNlbWFudGljXCIpO1xuXHRcdFx0XHRcdG9Qb3BvdmVyQ29udGVudC5zZXRCaW5kaW5nQ29udGV4dChvRnJhZ21lbnRNb2RlbC5iaW5kaW5nQ29udGV4dHMuc2VtYW50aWMsIFwic2VtYW50aWNcIik7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZiAob0ZyYWdtZW50TW9kZWwuYmluZGluZ0NvbnRleHRzICYmIG9GcmFnbWVudE1vZGVsLmJpbmRpbmdDb250ZXh0cy5lbnRpdHlUeXBlKSB7XG5cdFx0XHRcdFx0b1BvcG92ZXJDb250ZW50LnNldE1vZGVsKG9GcmFnbWVudE1vZGVsLm1vZGVscy5lbnRpdHlUeXBlLCBcImVudGl0eVR5cGVcIik7XG5cdFx0XHRcdFx0b1BvcG92ZXJDb250ZW50LnNldEJpbmRpbmdDb250ZXh0KG9GcmFnbWVudE1vZGVsLmJpbmRpbmdDb250ZXh0cy5lbnRpdHlUeXBlLCBcImVudGl0eVR5cGVcIik7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdHRoaXMucmVzb2x2ZWRwYXlsb2FkID0gdW5kZWZpbmVkO1xuXHRcdFx0cmV0dXJuIG9Qb3BvdmVyQ29udGVudDtcblx0XHR9KTtcbn07XG5TaW1wbGVMaW5rRGVsZWdhdGUuZmV0Y2hBZGRpdGlvbmFsQ29udGVudCA9IGZ1bmN0aW9uIChvUGF5TG9hZDogYW55LCBvTWRjTGlua0NvbnRyb2w6IGFueSkge1xuXHR0aGlzLm9Db250cm9sID0gb01kY0xpbmtDb250cm9sO1xuXHRjb25zdCBhTmF2aWdhdGVSZWdleHBNYXRjaCA9IG9QYXlMb2FkPy5uYXZpZ2F0aW9uUGF0aD8ubWF0Y2goL3soLio/KX0vKTtcblx0Y29uc3Qgb0JpbmRpbmdDb250ZXh0ID1cblx0XHRhTmF2aWdhdGVSZWdleHBNYXRjaCAmJiBhTmF2aWdhdGVSZWdleHBNYXRjaC5sZW5ndGggPiAxICYmIGFOYXZpZ2F0ZVJlZ2V4cE1hdGNoWzFdXG5cdFx0XHQ/IG9NZGNMaW5rQ29udHJvbC5nZXRNb2RlbCgpLmJpbmRDb250ZXh0KGFOYXZpZ2F0ZVJlZ2V4cE1hdGNoWzFdLCBvTWRjTGlua0NvbnRyb2wuZ2V0QmluZGluZ0NvbnRleHQoKSwgeyAkJG93blJlcXVlc3Q6IHRydWUgfSlcblx0XHRcdDogbnVsbDtcblx0dGhpcy5wYXlsb2FkID0gb1BheUxvYWQ7XG5cdGlmIChvTWRjTGlua0NvbnRyb2wgJiYgb01kY0xpbmtDb250cm9sLmlzQShDT05TVEFOVFMuc2FwdWltZGNMaW5rKSkge1xuXHRcdHRoaXMub01ldGFNb2RlbCA9IG9NZGNMaW5rQ29udHJvbC5nZXRNb2RlbCgpLmdldE1ldGFNb2RlbCgpO1xuXHRcdHJldHVybiB0aGlzLmZuVGVtcGxhdGVGcmFnbWVudCgpLnRoZW4oZnVuY3Rpb24gKG9Qb3BvdmVyQ29udGVudDogYW55KSB7XG5cdFx0XHRpZiAob0JpbmRpbmdDb250ZXh0KSB7XG5cdFx0XHRcdG9Qb3BvdmVyQ29udGVudC5zZXRCaW5kaW5nQ29udGV4dChvQmluZGluZ0NvbnRleHQuZ2V0Qm91bmRDb250ZXh0KCkpO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIFtvUG9wb3ZlckNvbnRlbnRdO1xuXHRcdH0pO1xuXHR9XG5cdHJldHVybiBQcm9taXNlLnJlc29sdmUoW10pO1xufTtcblNpbXBsZUxpbmtEZWxlZ2F0ZS5fZmV0Y2hMaW5rQ3VzdG9tRGF0YSA9IGZ1bmN0aW9uIChfb0xpbms6IGFueSkge1xuXHRpZiAoXG5cdFx0X29MaW5rLmdldFBhcmVudCgpICYmXG5cdFx0X29MaW5rLmlzQShDT05TVEFOVFMuc2FwdWltZGNMaW5rKSAmJlxuXHRcdChfb0xpbmsuZ2V0UGFyZW50KCkuaXNBKENPTlNUQU5UUy5zYXBtTGluaykgfHxcblx0XHRcdF9vTGluay5nZXRQYXJlbnQoKS5pc0EoQ09OU1RBTlRTLnNhcG1PYmplY3RJZGVudGlmaWVyKSB8fFxuXHRcdFx0X29MaW5rLmdldFBhcmVudCgpLmlzQShDT05TVEFOVFMuc2FwbU9iamVjdFN0YXR1cykpXG5cdCkge1xuXHRcdHJldHVybiBfb0xpbmsuZ2V0Q3VzdG9tRGF0YSgpO1xuXHR9IGVsc2Uge1xuXHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdH1cbn07XG4vKipcbiAqIEZldGNoZXMgdGhlIHJlbGV2YW50IHtAbGluayBzYXAudWkubWRjLmxpbmsuTGlua0l0ZW19IGZvciB0aGUgTGluayBhbmQgcmV0dXJucyB0aGVtLlxuICpcbiAqIEBwdWJsaWNcbiAqIEBwYXJhbSBvUGF5bG9hZCBUaGUgUGF5bG9hZCBvZiB0aGUgTGluayBnaXZlbiBieSB0aGUgYXBwbGljYXRpb25cbiAqIEBwYXJhbSBvQmluZGluZ0NvbnRleHQgVGhlIENvbnRleHRPYmplY3Qgb2YgdGhlIExpbmtcbiAqIEBwYXJhbSBvSW5mb0xvZyBUaGUgSW5mb0xvZyBvZiB0aGUgTGlua1xuICogQHJldHVybnMgT25jZSByZXNvbHZlZCBhbiBhcnJheSBvZiB7QGxpbmsgc2FwLnVpLm1kYy5saW5rLkxpbmtJdGVtfSBpcyByZXR1cm5lZFxuICovXG5TaW1wbGVMaW5rRGVsZWdhdGUuZmV0Y2hMaW5rSXRlbXMgPSBmdW5jdGlvbiAob1BheWxvYWQ6IGFueSwgb0JpbmRpbmdDb250ZXh0OiBDb250ZXh0LCBvSW5mb0xvZzogYW55KSB7XG5cdGlmIChvQmluZGluZ0NvbnRleHQgJiYgU2ltcGxlTGlua0RlbGVnYXRlLl9nZXRTZW1hbnRpY09iamVjdHMob1BheWxvYWQpKSB7XG5cdFx0Y29uc3Qgb0NvbnRleHRPYmplY3QgPSBvQmluZGluZ0NvbnRleHQuZ2V0T2JqZWN0KCk7XG5cdFx0aWYgKG9JbmZvTG9nKSB7XG5cdFx0XHRvSW5mb0xvZy5pbml0aWFsaXplKFNpbXBsZUxpbmtEZWxlZ2F0ZS5fZ2V0U2VtYW50aWNPYmplY3RzKG9QYXlsb2FkKSk7XG5cdFx0fVxuXHRcdGNvbnN0IF9vTGlua0N1c3RvbURhdGEgPSB0aGlzLl9saW5rICYmIHRoaXMuX2ZldGNoTGlua0N1c3RvbURhdGEodGhpcy5fbGluayk7XG5cdFx0dGhpcy5hTGlua0N1c3RvbURhdGEgPVxuXHRcdFx0X29MaW5rQ3VzdG9tRGF0YSAmJlxuXHRcdFx0dGhpcy5fZmV0Y2hMaW5rQ3VzdG9tRGF0YSh0aGlzLl9saW5rKS5tYXAoZnVuY3Rpb24gKGxpbmtJdGVtOiBhbnkpIHtcblx0XHRcdFx0cmV0dXJuIGxpbmtJdGVtLm1Qcm9wZXJ0aWVzLnZhbHVlO1xuXHRcdFx0fSk7XG5cblx0XHRjb25zdCBvU2VtYW50aWNBdHRyaWJ1dGVzUmVzb2x2ZWQgPSBTaW1wbGVMaW5rRGVsZWdhdGUuX2NhbGN1bGF0ZVNlbWFudGljQXR0cmlidXRlcyhvQ29udGV4dE9iamVjdCwgb1BheWxvYWQsIG9JbmZvTG9nLCB0aGlzLl9saW5rKTtcblx0XHRjb25zdCBvU2VtYW50aWNBdHRyaWJ1dGVzID0gb1NlbWFudGljQXR0cmlidXRlc1Jlc29sdmVkLnJlc3VsdHM7XG5cdFx0Y29uc3Qgb1BheWxvYWRSZXNvbHZlZCA9IG9TZW1hbnRpY0F0dHJpYnV0ZXNSZXNvbHZlZC5wYXlsb2FkO1xuXG5cdFx0cmV0dXJuIFNpbXBsZUxpbmtEZWxlZ2F0ZS5fcmV0cmlldmVOYXZpZ2F0aW9uVGFyZ2V0cyhcIlwiLCBvU2VtYW50aWNBdHRyaWJ1dGVzLCBvUGF5bG9hZFJlc29sdmVkLCBvSW5mb0xvZywgdGhpcy5fbGluaykudGhlbihcblx0XHRcdGZ1bmN0aW9uIChhTGlua3M6IGFueSAvKm9Pd25OYXZpZ2F0aW9uTGluazogYW55Ki8pIHtcblx0XHRcdFx0cmV0dXJuIGFMaW5rcy5sZW5ndGggPT09IDAgPyBudWxsIDogYUxpbmtzO1xuXHRcdFx0fVxuXHRcdCk7XG5cdH0gZWxzZSB7XG5cdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZShudWxsKTtcblx0fVxufTtcblxuLyoqXG4gKiBGaW5kIHRoZSB0eXBlIG9mIHRoZSBsaW5rLlxuICpcbiAqIEBwYXJhbSBwYXlsb2FkIFRoZSBwYXlsb2FkIG9mIHRoZSBtZGMgbGluay5cbiAqIEBwYXJhbSBhTGlua0l0ZW1zIExpbmtzIHJldHVybmVkIGJ5IGNhbGwgdG8gbWRjIF9yZXRyaWV2ZVVubW9kaWZpZWRMaW5rSXRlbXMuXG4gKiBAcmV0dXJucyBUaGUgdHlwZSBvZiB0aGUgbGluayBhcyBkZWZpbmVkIGJ5IG1kYy5cbiAqL1xuU2ltcGxlTGlua0RlbGVnYXRlLl9maW5kTGlua1R5cGUgPSBmdW5jdGlvbiAocGF5bG9hZDogYW55LCBhTGlua0l0ZW1zOiBhbnlbXSk6IGFueSB7XG5cdGxldCBuTGlua1R5cGUsIG9MaW5rSXRlbTtcblx0aWYgKGFMaW5rSXRlbXM/Lmxlbmd0aCA9PT0gMSkge1xuXHRcdG9MaW5rSXRlbSA9IG5ldyBMaW5rSXRlbSh7XG5cdFx0XHR0ZXh0OiBhTGlua0l0ZW1zWzBdLmdldFRleHQoKSxcblx0XHRcdGhyZWY6IGFMaW5rSXRlbXNbMF0uZ2V0SHJlZigpXG5cdFx0fSk7XG5cdFx0bkxpbmtUeXBlID0gcGF5bG9hZC5oYXNRdWlja1ZpZXdGYWNldHMgPT09IFwiZmFsc2VcIiA/IDEgOiAyO1xuXHR9IGVsc2UgaWYgKHBheWxvYWQuaGFzUXVpY2tWaWV3RmFjZXRzID09PSBcImZhbHNlXCIgJiYgYUxpbmtJdGVtcz8ubGVuZ3RoID09PSAwKSB7XG5cdFx0bkxpbmtUeXBlID0gMDtcblx0fSBlbHNlIHtcblx0XHRuTGlua1R5cGUgPSAyO1xuXHR9XG5cdHJldHVybiB7XG5cdFx0bGlua1R5cGU6IG5MaW5rVHlwZSxcblx0XHRsaW5rSXRlbTogb0xpbmtJdGVtXG5cdH07XG59O1xuU2ltcGxlTGlua0RlbGVnYXRlLmZldGNoTGlua1R5cGUgPSBhc3luYyBmdW5jdGlvbiAob1BheWxvYWQ6IGFueSwgb0xpbms6IGFueSkge1xuXHRjb25zdCBfb0N1cnJlbnRMaW5rID0gb0xpbms7XG5cdGNvbnN0IF9vUGF5bG9hZCA9IE9iamVjdC5hc3NpZ24oe30sIG9QYXlsb2FkKTtcblx0Y29uc3Qgb0RlZmF1bHRJbml0aWFsVHlwZSA9IHtcblx0XHRpbml0aWFsVHlwZToge1xuXHRcdFx0dHlwZTogMixcblx0XHRcdGRpcmVjdExpbms6IHVuZGVmaW5lZFxuXHRcdH0sXG5cdFx0cnVudGltZVR5cGU6IHVuZGVmaW5lZFxuXHR9O1xuXHQvLyBjbGVhbiBhcHBTdGF0ZUtleU1hcCBzdG9yYWdlXG5cdGlmICghdGhpcy5hcHBTdGF0ZUtleU1hcCkge1xuXHRcdHRoaXMuYXBwU3RhdGVLZXlNYXAgPSB7fTtcblx0fVxuXG5cdHRyeSB7XG5cdFx0aWYgKF9vUGF5bG9hZD8uc2VtYW50aWNPYmplY3RzKSB7XG5cdFx0XHR0aGlzLl9saW5rID0gb0xpbms7XG5cdFx0XHRsZXQgYUxpbmtJdGVtcyA9IGF3YWl0IF9vQ3VycmVudExpbmsuX3JldHJpZXZlVW5tb2RpZmllZExpbmtJdGVtcygpO1xuXHRcdFx0aWYgKGFMaW5rSXRlbXMubGVuZ3RoID09PSAxKSB7XG5cdFx0XHRcdC8vIFRoaXMgaXMgdGhlIGRpcmVjdCBuYXZpZ2F0aW9uIHVzZSBjYXNlIHNvIHdlIG5lZWQgdG8gcGVyZm9ybSB0aGUgYXBwcm9wcmlhdGUgY2hlY2tzIC8gdHJhbnNmb3JtYXRpb25zXG5cdFx0XHRcdGFMaW5rSXRlbXMgPSBhd2FpdCBfb0N1cnJlbnRMaW5rLnJldHJpZXZlTGlua0l0ZW1zKCk7XG5cdFx0XHR9XG5cdFx0XHRjb25zdCBfTGlua1R5cGUgPSBTaW1wbGVMaW5rRGVsZWdhdGUuX2ZpbmRMaW5rVHlwZShfb1BheWxvYWQsIGFMaW5rSXRlbXMpO1xuXHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0aW5pdGlhbFR5cGU6IHtcblx0XHRcdFx0XHR0eXBlOiBfTGlua1R5cGUubGlua1R5cGUsXG5cdFx0XHRcdFx0ZGlyZWN0TGluazogX0xpbmtUeXBlLmxpbmtJdGVtID8gX0xpbmtUeXBlLmxpbmtJdGVtIDogdW5kZWZpbmVkXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHJ1bnRpbWVUeXBlOiB1bmRlZmluZWRcblx0XHRcdH07XG5cdFx0fSBlbHNlIGlmIChfb1BheWxvYWQ/LmNvbnRhY3Q/Lmxlbmd0aCA+IDApIHtcblx0XHRcdHJldHVybiBvRGVmYXVsdEluaXRpYWxUeXBlO1xuXHRcdH0gZWxzZSBpZiAoX29QYXlsb2FkPy5lbnRpdHlUeXBlICYmIF9vUGF5bG9hZD8ubmF2aWdhdGlvblBhdGgpIHtcblx0XHRcdHJldHVybiBvRGVmYXVsdEluaXRpYWxUeXBlO1xuXHRcdH1cblx0XHR0aHJvdyBuZXcgRXJyb3IoXCJubyBwYXlsb2FkIG9yIHNlbWFudGljT2JqZWN0cyBmb3VuZFwiKTtcblx0fSBjYXRjaCAob0Vycm9yOiBhbnkpIHtcblx0XHRMb2cuZXJyb3IoXCJFcnJvciBpbiBTaW1wbGVMaW5rRGVsZWdhdGUuZmV0Y2hMaW5rVHlwZTogXCIsIG9FcnJvcik7XG5cdH1cbn07XG5cblNpbXBsZUxpbmtEZWxlZ2F0ZS5fUmVtb3ZlVGl0bGVMaW5rRnJvbVRhcmdldHMgPSBmdW5jdGlvbiAoX2FMaW5rSXRlbXM6IGFueVtdLCBfYlRpdGxlSGFzTGluazogYm9vbGVhbiwgX2FUaXRsZUxpbms6IGFueSk6IGFueSB7XG5cdGxldCBfc1RpdGxlTGlua0hyZWYsIF9vTURDTGluaztcblx0bGV0IGJSZXN1bHQ6IGJvb2xlYW4gPSBmYWxzZTtcblx0aWYgKF9iVGl0bGVIYXNMaW5rICYmIF9hVGl0bGVMaW5rICYmIF9hVGl0bGVMaW5rWzBdKSB7XG5cdFx0bGV0IGxpbmtJc1ByaW1hcnlBY3Rpb246IGJvb2xlYW4sIF9zTGlua0ludGVudFdpdGhvdXRQYXJhbWV0ZXJzOiBzdHJpbmc7XG5cdFx0Y29uc3QgX3NUaXRsZUludGVudCA9IF9hVGl0bGVMaW5rWzBdLmludGVudC5zcGxpdChcIj9cIilbMF07XG5cdFx0aWYgKF9hTGlua0l0ZW1zICYmIF9hTGlua0l0ZW1zWzBdKSB7XG5cdFx0XHRfc0xpbmtJbnRlbnRXaXRob3V0UGFyYW1ldGVycyA9IGAjJHtfYUxpbmtJdGVtc1swXS5nZXRQcm9wZXJ0eShcImtleVwiKX1gO1xuXHRcdFx0bGlua0lzUHJpbWFyeUFjdGlvbiA9IF9zVGl0bGVJbnRlbnQgPT09IF9zTGlua0ludGVudFdpdGhvdXRQYXJhbWV0ZXJzO1xuXHRcdFx0aWYgKGxpbmtJc1ByaW1hcnlBY3Rpb24pIHtcblx0XHRcdFx0X3NUaXRsZUxpbmtIcmVmID0gX2FMaW5rSXRlbXNbMF0uZ2V0UHJvcGVydHkoXCJocmVmXCIpO1xuXHRcdFx0XHR0aGlzLnBheWxvYWQudGl0bGVsaW5raHJlZiA9IF9zVGl0bGVMaW5rSHJlZjtcblx0XHRcdFx0aWYgKF9hTGlua0l0ZW1zWzBdLmlzQShDT05TVEFOVFMuc2FwdWltZGNsaW5rTGlua0l0ZW0pKSB7XG5cdFx0XHRcdFx0X29NRENMaW5rID0gX2FMaW5rSXRlbXNbMF0uZ2V0UGFyZW50KCk7XG5cdFx0XHRcdFx0X29NRENMaW5rLmdldE1vZGVsKFwiJHNhcHVpbWRjTGlua1wiKS5zZXRQcm9wZXJ0eShcIi90aXRsZUxpbmtIcmVmXCIsIF9zVGl0bGVMaW5rSHJlZik7XG5cdFx0XHRcdFx0Y29uc3QgYU1MaW5rSXRlbXMgPSBfb01EQ0xpbmtcblx0XHRcdFx0XHRcdC5nZXRNb2RlbChcIiRzYXB1aW1kY0xpbmtcIilcblx0XHRcdFx0XHRcdC5nZXRQcm9wZXJ0eShcIi9saW5rSXRlbXNcIilcblx0XHRcdFx0XHRcdC5maWx0ZXIoZnVuY3Rpb24gKG9MaW5rSXRlbTogYW55KSB7XG5cdFx0XHRcdFx0XHRcdGlmIChgIyR7b0xpbmtJdGVtLmtleX1gICE9PSBfc0xpbmtJbnRlbnRXaXRob3V0UGFyYW1ldGVycykge1xuXHRcdFx0XHRcdFx0XHRcdHJldHVybiBvTGlua0l0ZW07XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdGlmIChhTUxpbmtJdGVtcyAmJiBhTUxpbmtJdGVtcy5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdFx0XHRfb01EQ0xpbmsuZ2V0TW9kZWwoXCIkc2FwdWltZGNMaW5rXCIpLnNldFByb3BlcnR5KFwiL2xpbmtJdGVtcy9cIiwgYU1MaW5rSXRlbXMpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRiUmVzdWx0ID0gdHJ1ZTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXHRyZXR1cm4gYlJlc3VsdDtcbn07XG5TaW1wbGVMaW5rRGVsZWdhdGUuX0lzU2VtYW50aWNPYmplY3REeW5hbWljID0gZnVuY3Rpb24gKGFOZXdMaW5rQ3VzdG9tRGF0YTogYW55LCBvVGhpczogYW55KSB7XG5cdGlmIChhTmV3TGlua0N1c3RvbURhdGEgJiYgb1RoaXMuYUxpbmtDdXN0b21EYXRhKSB7XG5cdFx0cmV0dXJuIChcblx0XHRcdG9UaGlzLmFMaW5rQ3VzdG9tRGF0YS5maWx0ZXIoZnVuY3Rpb24gKGxpbms6IGFueSkge1xuXHRcdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHRcdGFOZXdMaW5rQ3VzdG9tRGF0YS5maWx0ZXIoZnVuY3Rpb24gKG90aGVyTGluazogYW55KSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gb3RoZXJMaW5rICE9PSBsaW5rO1xuXHRcdFx0XHRcdH0pLmxlbmd0aCA+IDBcblx0XHRcdFx0KTtcblx0XHRcdH0pLmxlbmd0aCA+IDBcblx0XHQpO1xuXHR9IGVsc2Uge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxufTtcblNpbXBsZUxpbmtEZWxlZ2F0ZS5fZ2V0TGluZUNvbnRleHQgPSBmdW5jdGlvbiAob1ZpZXc6IGFueSwgbUxpbmVDb250ZXh0OiBhbnkpIHtcblx0aWYgKCFtTGluZUNvbnRleHQpIHtcblx0XHRpZiAob1ZpZXcuZ2V0QWdncmVnYXRpb24oXCJjb250ZW50XCIpWzBdICYmIG9WaWV3LmdldEFnZ3JlZ2F0aW9uKFwiY29udGVudFwiKVswXS5nZXRCaW5kaW5nQ29udGV4dCgpKSB7XG5cdFx0XHRyZXR1cm4gb1ZpZXcuZ2V0QWdncmVnYXRpb24oXCJjb250ZW50XCIpWzBdLmdldEJpbmRpbmdDb250ZXh0KCk7XG5cdFx0fVxuXHR9XG5cdHJldHVybiBtTGluZUNvbnRleHQ7XG59O1xuU2ltcGxlTGlua0RlbGVnYXRlLl9zZXRGaWx0ZXJDb250ZXh0VXJsRm9yU2VsZWN0aW9uVmFyaWFudCA9IGZ1bmN0aW9uIChcblx0b1ZpZXc6IGFueSxcblx0b1NlbGVjdGlvblZhcmlhbnQ6IFNlbGVjdGlvblZhcmlhbnQsXG5cdG9OYXZpZ2F0aW9uU2VydmljZTogYW55XG4pOiBTZWxlY3Rpb25WYXJpYW50IHtcblx0aWYgKG9WaWV3LmdldFZpZXdEYXRhKCkuZW50aXR5U2V0ICYmIG9TZWxlY3Rpb25WYXJpYW50KSB7XG5cdFx0Y29uc3Qgc0NvbnRleHRVcmwgPSBvTmF2aWdhdGlvblNlcnZpY2UuY29uc3RydWN0Q29udGV4dFVybChvVmlldy5nZXRWaWV3RGF0YSgpLmVudGl0eVNldCwgb1ZpZXcuZ2V0TW9kZWwoKSk7XG5cdFx0b1NlbGVjdGlvblZhcmlhbnQuc2V0RmlsdGVyQ29udGV4dFVybChzQ29udGV4dFVybCk7XG5cdH1cblx0cmV0dXJuIG9TZWxlY3Rpb25WYXJpYW50O1xufTtcblxuU2ltcGxlTGlua0RlbGVnYXRlLl9zZXRPYmplY3RNYXBwaW5ncyA9IGZ1bmN0aW9uIChcblx0c1NlbWFudGljT2JqZWN0OiBzdHJpbmcsXG5cdG9QYXJhbXM6IGFueSxcblx0YVNlbWFudGljT2JqZWN0TWFwcGluZ3M6IFJlZ2lzdGVyZWRTZW1hbnRpY09iamVjdE1hcHBpbmdzLFxuXHRvU2VsZWN0aW9uVmFyaWFudDogU2VsZWN0aW9uVmFyaWFudFxuKSB7XG5cdGxldCBoYXNDaGFuZ2VkID0gZmFsc2U7XG5cdGNvbnN0IG1vZGlmaWVkU2VsZWN0aW9uVmFyaWFudCA9IG5ldyBTZWxlY3Rpb25WYXJpYW50KG9TZWxlY3Rpb25WYXJpYW50LnRvSlNPTk9iamVjdCgpKTtcblx0Ly8gaWYgc2VtYW50aWNPYmplY3RNYXBwaW5ncyBoYXMgaXRlbXMgd2l0aCBkeW5hbWljIHNlbWFudGljT2JqZWN0cyB3ZSBuZWVkIHRvIHJlc29sdmUgdGhlbSB1c2luZyBvUGFyYW1zXG5cdGFTZW1hbnRpY09iamVjdE1hcHBpbmdzLmZvckVhY2goZnVuY3Rpb24gKG1hcHBpbmcpIHtcblx0XHRsZXQgbWFwcGluZ1NlbWFudGljT2JqZWN0ID0gbWFwcGluZy5zZW1hbnRpY09iamVjdDtcblx0XHRjb25zdCBtYXBwaW5nU2VtYW50aWNPYmplY3RQYXRoID0gZ2V0RHluYW1pY1BhdGhGcm9tU2VtYW50aWNPYmplY3QobWFwcGluZy5zZW1hbnRpY09iamVjdCk7XG5cdFx0aWYgKG1hcHBpbmdTZW1hbnRpY09iamVjdFBhdGggJiYgb1BhcmFtc1ttYXBwaW5nU2VtYW50aWNPYmplY3RQYXRoXSkge1xuXHRcdFx0bWFwcGluZ1NlbWFudGljT2JqZWN0ID0gb1BhcmFtc1ttYXBwaW5nU2VtYW50aWNPYmplY3RQYXRoXTtcblx0XHR9XG5cdFx0aWYgKHNTZW1hbnRpY09iamVjdCA9PT0gbWFwcGluZ1NlbWFudGljT2JqZWN0KSB7XG5cdFx0XHRjb25zdCBvTWFwcGluZ3MgPSBtYXBwaW5nLml0ZW1zO1xuXHRcdFx0Zm9yIChjb25zdCBpIGluIG9NYXBwaW5ncykge1xuXHRcdFx0XHRjb25zdCBzTG9jYWxQcm9wZXJ0eSA9IG9NYXBwaW5nc1tpXS5rZXk7XG5cdFx0XHRcdGNvbnN0IHNTZW1hbnRpY09iamVjdFByb3BlcnR5ID0gb01hcHBpbmdzW2ldLnZhbHVlO1xuXHRcdFx0XHRpZiAob1BhcmFtc1tzTG9jYWxQcm9wZXJ0eV0pIHtcblx0XHRcdFx0XHRtb2RpZmllZFNlbGVjdGlvblZhcmlhbnQucmVtb3ZlUGFyYW1ldGVyKHNTZW1hbnRpY09iamVjdFByb3BlcnR5KTtcblx0XHRcdFx0XHRtb2RpZmllZFNlbGVjdGlvblZhcmlhbnQucmVtb3ZlU2VsZWN0T3B0aW9uKHNTZW1hbnRpY09iamVjdFByb3BlcnR5KTtcblx0XHRcdFx0XHRtb2RpZmllZFNlbGVjdGlvblZhcmlhbnQucmVuYW1lUGFyYW1ldGVyKHNMb2NhbFByb3BlcnR5LCBzU2VtYW50aWNPYmplY3RQcm9wZXJ0eSk7XG5cdFx0XHRcdFx0bW9kaWZpZWRTZWxlY3Rpb25WYXJpYW50LnJlbmFtZVNlbGVjdE9wdGlvbihzTG9jYWxQcm9wZXJ0eSwgc1NlbWFudGljT2JqZWN0UHJvcGVydHkpO1xuXHRcdFx0XHRcdG9QYXJhbXNbc1NlbWFudGljT2JqZWN0UHJvcGVydHldID0gb1BhcmFtc1tzTG9jYWxQcm9wZXJ0eV07XG5cdFx0XHRcdFx0ZGVsZXRlIG9QYXJhbXNbc0xvY2FsUHJvcGVydHldO1xuXHRcdFx0XHRcdGhhc0NoYW5nZWQgPSB0cnVlO1xuXHRcdFx0XHR9XG5cdFx0XHRcdFx0Ly8gV2UgcmVtb3ZlIHRoZSBwYXJhbWV0ZXIgYXMgdGhlcmUgaXMgbm8gdmFsdWVcblx0XHRcdFx0Ly8gVGhlIGxvY2FsIHByb3BlcnR5IGNvbWVzIGZyb20gYSBuYXZpZ2F0aW9uIHByb3BlcnR5XG5cdFx0XHRcdGVsc2UgaWYgKHNMb2NhbFByb3BlcnR5LnNwbGl0KFwiL1wiKS5sZW5ndGggPiAxKSB7XG5cdFx0XHRcdFx0Ly8gZmluZCB0aGUgcHJvcGVydHkgdG8gYmUgcmVtb3ZlZFxuXHRcdFx0XHRcdGNvbnN0IHByb3BlcnR5VG9CZVJlbW92ZWQgPSBzTG9jYWxQcm9wZXJ0eS5zcGxpdChcIi9cIikuc2xpY2UoLTEpWzBdO1xuXHRcdFx0XHRcdC8vIFRoZSBuYXZpZ2F0aW9uIHByb3BlcnR5IGhhcyBubyB2YWx1ZVxuXHRcdFx0XHRcdGlmICghb1BhcmFtc1twcm9wZXJ0eVRvQmVSZW1vdmVkXSkge1xuXHRcdFx0XHRcdFx0ZGVsZXRlIG9QYXJhbXNbcHJvcGVydHlUb0JlUmVtb3ZlZF07XG5cdFx0XHRcdFx0XHRtb2RpZmllZFNlbGVjdGlvblZhcmlhbnQucmVtb3ZlUGFyYW1ldGVyKHByb3BlcnR5VG9CZVJlbW92ZWQpO1xuXHRcdFx0XHRcdFx0bW9kaWZpZWRTZWxlY3Rpb25WYXJpYW50LnJlbW92ZVNlbGVjdE9wdGlvbihwcm9wZXJ0eVRvQmVSZW1vdmVkKTtcblx0XHRcdFx0XHR9IGVsc2UgaWYgKHByb3BlcnR5VG9CZVJlbW92ZWQgIT09IHNTZW1hbnRpY09iamVjdFByb3BlcnR5KSB7XG5cdFx0XHRcdFx0XHQvLyBUaGUgbmF2aWdhdGlvbiBwcm9wZXJ0eSBoYXMgYSB2YWx1ZSBhbmQgcHJvcGVydGllcyBuYW1lcyBhcmUgZGlmZmVyZW50XG5cdFx0XHRcdFx0XHRtb2RpZmllZFNlbGVjdGlvblZhcmlhbnQucmVuYW1lUGFyYW1ldGVyKHByb3BlcnR5VG9CZVJlbW92ZWQsIHNTZW1hbnRpY09iamVjdFByb3BlcnR5KTtcblx0XHRcdFx0XHRcdG1vZGlmaWVkU2VsZWN0aW9uVmFyaWFudC5yZW5hbWVTZWxlY3RPcHRpb24ocHJvcGVydHlUb0JlUmVtb3ZlZCwgc1NlbWFudGljT2JqZWN0UHJvcGVydHkpO1xuXHRcdFx0XHRcdFx0b1BhcmFtc1tzU2VtYW50aWNPYmplY3RQcm9wZXJ0eV0gPSBvUGFyYW1zW3Byb3BlcnR5VG9CZVJlbW92ZWRdO1xuXHRcdFx0XHRcdFx0ZGVsZXRlIG9QYXJhbXNbcHJvcGVydHlUb0JlUmVtb3ZlZF07XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdGRlbGV0ZSBvUGFyYW1zW3NMb2NhbFByb3BlcnR5XTtcblx0XHRcdFx0XHRtb2RpZmllZFNlbGVjdGlvblZhcmlhbnQucmVtb3ZlUGFyYW1ldGVyKHNTZW1hbnRpY09iamVjdFByb3BlcnR5KTtcblx0XHRcdFx0XHRtb2RpZmllZFNlbGVjdGlvblZhcmlhbnQucmVtb3ZlU2VsZWN0T3B0aW9uKHNTZW1hbnRpY09iamVjdFByb3BlcnR5KTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fSk7XG5cdHJldHVybiB7IHBhcmFtczogb1BhcmFtcywgaGFzQ2hhbmdlZCwgc2VsZWN0aW9uVmFyaWFudDogbW9kaWZpZWRTZWxlY3Rpb25WYXJpYW50IH07XG59O1xuXG4vKipcbiAqIENhbGwgZ2V0QXBwU3RhdGVLZXlBbmRVcmxQYXJhbWV0ZXJzIGluIG5hdmlnYXRpb24gc2VydmljZSBhbmQgY2FjaGUgaXRzIHJlc3VsdHMuXG4gKlxuICogQHBhcmFtIF90aGlzIFRoZSBpbnN0YW5jZSBvZiBxdWlja3ZpZXdkZWxlZ2F0ZS5cbiAqIEBwYXJhbSBuYXZpZ2F0aW9uU2VydmljZSBUaGUgbmF2aWdhdGlvbiBzZXJ2aWNlLlxuICogQHBhcmFtIHNlbGVjdGlvblZhcmlhbnQgVGhlIGN1cnJlbnQgc2VsZWN0aW9uIHZhcmlhbnQuXG4gKiBAcGFyYW0gc2VtYW50aWNPYmplY3QgVGhlIGN1cnJlbnQgc2VtYW50aWNPYmplY3QuXG4gKi9cblNpbXBsZUxpbmtEZWxlZ2F0ZS5fZ2V0QXBwU3RhdGVLZXlBbmRVcmxQYXJhbWV0ZXJzID0gYXN5bmMgZnVuY3Rpb24gKFxuXHRfdGhpczogdHlwZW9mIFNpbXBsZUxpbmtEZWxlZ2F0ZSxcblx0bmF2aWdhdGlvblNlcnZpY2U6IGFueSxcblx0c2VsZWN0aW9uVmFyaWFudDogU2VsZWN0aW9uVmFyaWFudCxcblx0c2VtYW50aWNPYmplY3Q6IHN0cmluZ1xuKTogUHJvbWlzZTxzdHJpbmdbXT4ge1xuXHRsZXQgYVZhbHVlcyA9IFtdO1xuXG5cdC8vIGNoZWNrIGlmIGRlZmF1bHQgY2FjaGUgY29udGFpbnMgYWxyZWFkeSB0aGUgdW5tb2RpZmllZCBzZWxlY3Rpb25WYXJpYW50XG5cdGlmIChkZWVwRXF1YWwoc2VsZWN0aW9uVmFyaWFudCwgX3RoaXMuYXBwU3RhdGVLZXlNYXBbXCJcIl0/LnNlbGVjdGlvblZhcmlhbnQpKSB7XG5cdFx0Y29uc3QgZGVmYXVsdENhY2hlID0gX3RoaXMuYXBwU3RhdGVLZXlNYXBbXCJcIl07XG5cdFx0cmV0dXJuIFtkZWZhdWx0Q2FjaGUuc2VtYW50aWNBdHRyaWJ1dGVzLCBkZWZhdWx0Q2FjaGUuYXBwc3RhdGVrZXldO1xuXHR9XG5cdC8vIHVwZGF0ZSB1cmwgcGFyYW1ldGVycyBiZWNhdXNlIHRoZXJlIGlzIGEgY2hhbmdlIGluIHNlbGVjdGlvbiB2YXJpYW50XG5cdGlmIChcblx0XHRfdGhpcy5hcHBTdGF0ZUtleU1hcFtgJHtzZW1hbnRpY09iamVjdH1gXSA9PT0gdW5kZWZpbmVkIHx8XG5cdFx0IWRlZXBFcXVhbChfdGhpcy5hcHBTdGF0ZUtleU1hcFtgJHtzZW1hbnRpY09iamVjdH1gXS5zZWxlY3Rpb25WYXJpYW50LCBzZWxlY3Rpb25WYXJpYW50KVxuXHQpIHtcblx0XHRhVmFsdWVzID0gYXdhaXQgdG9FUzZQcm9taXNlKG5hdmlnYXRpb25TZXJ2aWNlLmdldEFwcFN0YXRlS2V5QW5kVXJsUGFyYW1ldGVycyhzZWxlY3Rpb25WYXJpYW50LnRvSlNPTlN0cmluZygpKSk7XG5cdFx0X3RoaXMuYXBwU3RhdGVLZXlNYXBbYCR7c2VtYW50aWNPYmplY3R9YF0gPSB7XG5cdFx0XHRzZW1hbnRpY0F0dHJpYnV0ZXM6IGFWYWx1ZXNbMF0sXG5cdFx0XHRhcHBzdGF0ZWtleTogYVZhbHVlc1sxXSxcblx0XHRcdHNlbGVjdGlvblZhcmlhbnQ6IHNlbGVjdGlvblZhcmlhbnRcblx0XHR9O1xuXHR9IGVsc2Uge1xuXHRcdGNvbnN0IGNhY2hlID0gX3RoaXMuYXBwU3RhdGVLZXlNYXBbYCR7c2VtYW50aWNPYmplY3R9YF07XG5cdFx0YVZhbHVlcyA9IFtjYWNoZS5zZW1hbnRpY0F0dHJpYnV0ZXMsIGNhY2hlLmFwcHN0YXRla2V5XTtcblx0fVxuXHRyZXR1cm4gYVZhbHVlcztcbn07XG5cblNpbXBsZUxpbmtEZWxlZ2F0ZS5fZ2V0TGlua0l0ZW1XaXRoTmV3UGFyYW1ldGVyID0gYXN5bmMgZnVuY3Rpb24gKFxuXHRfdGhhdDogYW55LFxuXHRfYlRpdGxlSGFzTGluazogYm9vbGVhbixcblx0X2FUaXRsZUxpbms6IHN0cmluZ1tdLFxuXHRfb0xpbmtJdGVtOiBhbnksXG5cdF9vU2hlbGxTZXJ2aWNlczogYW55LFxuXHRfb1BheWxvYWQ6IGFueSxcblx0X29QYXJhbXM6IGFueSxcblx0X3NBcHBTdGF0ZUtleTogc3RyaW5nLFxuXHRfb1NlbGVjdGlvblZhcmlhbnQ6IFNlbGVjdGlvblZhcmlhbnQsXG5cdF9vTmF2aWdhdGlvblNlcnZpY2U6IE5hdmlnYXRpb25TZXJ2aWNlXG4pOiBQcm9taXNlPGFueT4ge1xuXHRyZXR1cm4gX29TaGVsbFNlcnZpY2VzLmV4cGFuZENvbXBhY3RIYXNoKF9vTGlua0l0ZW0uZ2V0SHJlZigpKS50aGVuKGFzeW5jIGZ1bmN0aW9uIChzSGFzaDogYW55KSB7XG5cdFx0Y29uc3Qgb1NoZWxsSGFzaCA9IF9vU2hlbGxTZXJ2aWNlcy5wYXJzZVNoZWxsSGFzaChzSGFzaCk7XG5cdFx0Y29uc3QgcGFyYW1zID0gT2JqZWN0LmFzc2lnbih7fSwgX29QYXJhbXMpO1xuXHRcdGNvbnN0IHtcblx0XHRcdHBhcmFtczogb05ld1BhcmFtcyxcblx0XHRcdGhhc0NoYW5nZWQsXG5cdFx0XHRzZWxlY3Rpb25WYXJpYW50OiBuZXdTZWxlY3Rpb25WYXJpYW50XG5cdFx0fSA9IFNpbXBsZUxpbmtEZWxlZ2F0ZS5fc2V0T2JqZWN0TWFwcGluZ3Mob1NoZWxsSGFzaC5zZW1hbnRpY09iamVjdCwgcGFyYW1zLCBfb1BheWxvYWQuc2VtYW50aWNPYmplY3RNYXBwaW5ncywgX29TZWxlY3Rpb25WYXJpYW50KTtcblx0XHRpZiAoaGFzQ2hhbmdlZCkge1xuXHRcdFx0Y29uc3QgYVZhbHVlcyA9IGF3YWl0IFNpbXBsZUxpbmtEZWxlZ2F0ZS5fZ2V0QXBwU3RhdGVLZXlBbmRVcmxQYXJhbWV0ZXJzKFxuXHRcdFx0XHRfdGhhdCxcblx0XHRcdFx0X29OYXZpZ2F0aW9uU2VydmljZSxcblx0XHRcdFx0bmV3U2VsZWN0aW9uVmFyaWFudCxcblx0XHRcdFx0b1NoZWxsSGFzaC5zZW1hbnRpY09iamVjdFxuXHRcdFx0KTtcblxuXHRcdFx0X3NBcHBTdGF0ZUtleSA9IGFWYWx1ZXNbMV07XG5cdFx0fVxuXHRcdGNvbnN0IG9OZXdTaGVsbEhhc2ggPSB7XG5cdFx0XHR0YXJnZXQ6IHtcblx0XHRcdFx0c2VtYW50aWNPYmplY3Q6IG9TaGVsbEhhc2guc2VtYW50aWNPYmplY3QsXG5cdFx0XHRcdGFjdGlvbjogb1NoZWxsSGFzaC5hY3Rpb25cblx0XHRcdH0sXG5cdFx0XHRwYXJhbXM6IG9OZXdQYXJhbXMsXG5cdFx0XHRhcHBTdGF0ZUtleTogX3NBcHBTdGF0ZUtleVxuXHRcdH07XG5cdFx0ZGVsZXRlIG9OZXdTaGVsbEhhc2gucGFyYW1zW1wic2FwLXhhcHAtc3RhdGVcIl07XG5cdFx0X29MaW5rSXRlbS5zZXRIcmVmKGAjJHtfb1NoZWxsU2VydmljZXMuY29uc3RydWN0U2hlbGxIYXNoKG9OZXdTaGVsbEhhc2gpfWApO1xuXHRcdF9vUGF5bG9hZC5hU2VtYW50aWNMaW5rcy5wdXNoKF9vTGlua0l0ZW0uZ2V0SHJlZigpKTtcblx0XHQvLyBUaGUgbGluayBpcyByZW1vdmVkIGZyb20gdGhlIHRhcmdldCBsaXN0IGJlY2F1c2UgdGhlIHRpdGxlIGxpbmsgaGFzIHNhbWUgdGFyZ2V0LlxuXHRcdHJldHVybiBTaW1wbGVMaW5rRGVsZWdhdGUuX1JlbW92ZVRpdGxlTGlua0Zyb21UYXJnZXRzLmJpbmQoX3RoYXQpKFtfb0xpbmtJdGVtXSwgX2JUaXRsZUhhc0xpbmssIF9hVGl0bGVMaW5rKTtcblx0fSk7XG59O1xuU2ltcGxlTGlua0RlbGVnYXRlLl9yZW1vdmVFbXB0eUxpbmtJdGVtID0gZnVuY3Rpb24gKGFMaW5rSXRlbXM6IGFueSk6IGFueVtdIHtcblx0cmV0dXJuIGFMaW5rSXRlbXMuZmlsdGVyKChsaW5rSXRlbTogYW55KSA9PiB7XG5cdFx0cmV0dXJuIGxpbmtJdGVtICE9PSB1bmRlZmluZWQ7XG5cdH0pO1xufTtcbi8qKlxuICogRW5hYmxlcyB0aGUgbW9kaWZpY2F0aW9uIG9mIExpbmtJdGVtcyBiZWZvcmUgdGhlIHBvcG92ZXIgb3BlbnMuIFRoaXMgZW5hYmxlcyBhZGRpdGlvbmFsIHBhcmFtZXRlcnNcbiAqIHRvIGJlIGFkZGVkIHRvIHRoZSBsaW5rLlxuICpcbiAqIEBwYXJhbSBvUGF5bG9hZCBUaGUgcGF5bG9hZCBvZiB0aGUgTGluayBnaXZlbiBieSB0aGUgYXBwbGljYXRpb25cbiAqIEBwYXJhbSBvQmluZGluZ0NvbnRleHQgVGhlIGJpbmRpbmcgY29udGV4dCBvZiB0aGUgTGlua1xuICogQHBhcmFtIGFMaW5rSXRlbXMgVGhlIExpbmtJdGVtcyBvZiB0aGUgTGluayB0aGF0IGNhbiBiZSBtb2RpZmllZFxuICogQHJldHVybnMgT25jZSByZXNvbHZlZCBhbiBhcnJheSBvZiB7QGxpbmsgc2FwLnVpLm1kYy5saW5rLkxpbmtJdGVtfSBpcyByZXR1cm5lZFxuICovXG5TaW1wbGVMaW5rRGVsZWdhdGUubW9kaWZ5TGlua0l0ZW1zID0gYXN5bmMgZnVuY3Rpb24gKG9QYXlsb2FkOiBhbnksIG9CaW5kaW5nQ29udGV4dDogQ29udGV4dCwgYUxpbmtJdGVtczogYW55KSB7XG5cdGNvbnN0IHByaW1hcnlBY3Rpb25Jc0FjdGl2ZSA9IChhd2FpdCBGaWVsZEhlbHBlci5jaGVja1ByaW1hcnlBY3Rpb25zKG9QYXlsb2FkLCB0cnVlKSkgYXMgYW55O1xuXHRjb25zdCBhVGl0bGVMaW5rID0gcHJpbWFyeUFjdGlvbklzQWN0aXZlLnRpdGxlTGluaztcblx0Y29uc3QgYlRpdGxlSGFzTGluazogYm9vbGVhbiA9IHByaW1hcnlBY3Rpb25Jc0FjdGl2ZS5oYXNUaXRsZUxpbms7XG5cdGlmIChhTGlua0l0ZW1zLmxlbmd0aCAhPT0gMCkge1xuXHRcdHRoaXMucGF5bG9hZCA9IG9QYXlsb2FkO1xuXHRcdGNvbnN0IG9MaW5rID0gYUxpbmtJdGVtc1swXS5nZXRQYXJlbnQoKTtcblx0XHRjb25zdCBvVmlldyA9IENvbW1vblV0aWxzLmdldFRhcmdldFZpZXcob0xpbmspO1xuXHRcdGNvbnN0IG9BcHBDb21wb25lbnQgPSBDb21tb25VdGlscy5nZXRBcHBDb21wb25lbnQob1ZpZXcpO1xuXHRcdGNvbnN0IG9TaGVsbFNlcnZpY2VzID0gb0FwcENvbXBvbmVudC5nZXRTaGVsbFNlcnZpY2VzKCk7XG5cdFx0aWYgKCFvU2hlbGxTZXJ2aWNlcy5oYXNVU2hlbGwoKSkge1xuXHRcdFx0TG9nLmVycm9yKFwiUXVpY2tWaWV3RGVsZWdhdGU6IENhbm5vdCByZXRyaWV2ZSB0aGUgc2hlbGwgc2VydmljZXNcIik7XG5cdFx0XHRyZXR1cm4gUHJvbWlzZS5yZWplY3QoKTtcblx0XHR9XG5cdFx0Y29uc3Qgb01ldGFNb2RlbCA9IG9WaWV3LmdldE1vZGVsKCkuZ2V0TWV0YU1vZGVsKCkgYXMgT0RhdGFNZXRhTW9kZWw7XG5cdFx0bGV0IG1MaW5lQ29udGV4dCA9IG9MaW5rLmdldEJpbmRpbmdDb250ZXh0KCk7XG5cdFx0Y29uc3Qgb1RhcmdldEluZm86IGFueSA9IHtcblx0XHRcdHNlbWFudGljT2JqZWN0OiBvUGF5bG9hZC5tYWluU2VtYW50aWNPYmplY3QsXG5cdFx0XHRhY3Rpb246IFwiXCJcblx0XHR9O1xuXG5cdFx0dHJ5IHtcblx0XHRcdGNvbnN0IGFOZXdMaW5rQ3VzdG9tRGF0YSA9XG5cdFx0XHRcdG9MaW5rICYmXG5cdFx0XHRcdHRoaXMuX2ZldGNoTGlua0N1c3RvbURhdGEob0xpbmspLm1hcChmdW5jdGlvbiAobGlua0l0ZW06IGFueSkge1xuXHRcdFx0XHRcdHJldHVybiBsaW5rSXRlbS5tUHJvcGVydGllcy52YWx1ZTtcblx0XHRcdFx0fSk7XG5cdFx0XHQvLyBjaGVjayBpZiBhbGwgbGluayBpdGVtcyBpbiB0aGlzLmFMaW5rQ3VzdG9tRGF0YSBhcmUgYWxzbyBwcmVzZW50IGluIGFOZXdMaW5rQ3VzdG9tRGF0YVxuXHRcdFx0aWYgKFNpbXBsZUxpbmtEZWxlZ2F0ZS5fSXNTZW1hbnRpY09iamVjdER5bmFtaWMoYU5ld0xpbmtDdXN0b21EYXRhLCB0aGlzKSkge1xuXHRcdFx0XHQvLyBpZiB0aGUgY3VzdG9tRGF0YSBjaGFuZ2VkIHRoZXJlIGFyZSBkaWZmZXJlbnQgTGlua0l0ZW1zIHRvIGRpc3BsYXlcblx0XHRcdFx0Y29uc3Qgb1NlbWFudGljQXR0cmlidXRlc1Jlc29sdmVkID0gU2ltcGxlTGlua0RlbGVnYXRlLl9jYWxjdWxhdGVTZW1hbnRpY0F0dHJpYnV0ZXMoXG5cdFx0XHRcdFx0b0JpbmRpbmdDb250ZXh0LmdldE9iamVjdCgpLFxuXHRcdFx0XHRcdG9QYXlsb2FkLFxuXHRcdFx0XHRcdHVuZGVmaW5lZCxcblx0XHRcdFx0XHR0aGlzLl9saW5rXG5cdFx0XHRcdCk7XG5cdFx0XHRcdGNvbnN0IG9TZW1hbnRpY0F0dHJpYnV0ZXMgPSBvU2VtYW50aWNBdHRyaWJ1dGVzUmVzb2x2ZWQucmVzdWx0cztcblx0XHRcdFx0Y29uc3Qgb1BheWxvYWRSZXNvbHZlZCA9IG9TZW1hbnRpY0F0dHJpYnV0ZXNSZXNvbHZlZC5wYXlsb2FkO1xuXHRcdFx0XHRhTGlua0l0ZW1zID0gYXdhaXQgU2ltcGxlTGlua0RlbGVnYXRlLl9yZXRyaWV2ZU5hdmlnYXRpb25UYXJnZXRzKFxuXHRcdFx0XHRcdFwiXCIsXG5cdFx0XHRcdFx0b1NlbWFudGljQXR0cmlidXRlcyxcblx0XHRcdFx0XHRvUGF5bG9hZFJlc29sdmVkLFxuXHRcdFx0XHRcdHVuZGVmaW5lZCxcblx0XHRcdFx0XHR0aGlzLl9saW5rXG5cdFx0XHRcdCk7XG5cdFx0XHR9XG5cdFx0XHRjb25zdCBvTmF2aWdhdGlvblNlcnZpY2UgPSBvQXBwQ29tcG9uZW50LmdldE5hdmlnYXRpb25TZXJ2aWNlKCk7XG5cdFx0XHRjb25zdCBvQ29udHJvbGxlciA9IG9WaWV3LmdldENvbnRyb2xsZXIoKSBhcyBQYWdlQ29udHJvbGxlcjtcblx0XHRcdGxldCBvU2VsZWN0aW9uVmFyaWFudDtcblx0XHRcdGxldCBtTGluZUNvbnRleHREYXRhO1xuXHRcdFx0bUxpbmVDb250ZXh0ID0gU2ltcGxlTGlua0RlbGVnYXRlLl9nZXRMaW5lQ29udGV4dChvVmlldywgbUxpbmVDb250ZXh0KTtcblx0XHRcdGNvbnN0IHNNZXRhUGF0aCA9IG9NZXRhTW9kZWwuZ2V0TWV0YVBhdGgobUxpbmVDb250ZXh0LmdldFBhdGgoKSk7XG5cdFx0XHRtTGluZUNvbnRleHREYXRhID0gb0NvbnRyb2xsZXIuX2ludGVudEJhc2VkTmF2aWdhdGlvbi5yZW1vdmVTZW5zaXRpdmVEYXRhKG1MaW5lQ29udGV4dC5nZXRPYmplY3QoKSwgc01ldGFQYXRoKTtcblx0XHRcdG1MaW5lQ29udGV4dERhdGEgPSBvQ29udHJvbGxlci5faW50ZW50QmFzZWROYXZpZ2F0aW9uLnByZXBhcmVDb250ZXh0Rm9yRXh0ZXJuYWxOYXZpZ2F0aW9uKG1MaW5lQ29udGV4dERhdGEsIG1MaW5lQ29udGV4dCk7XG5cdFx0XHRvU2VsZWN0aW9uVmFyaWFudCA9IG9OYXZpZ2F0aW9uU2VydmljZS5taXhBdHRyaWJ1dGVzQW5kU2VsZWN0aW9uVmFyaWFudChcblx0XHRcdFx0bUxpbmVDb250ZXh0RGF0YS5zZW1hbnRpY0F0dHJpYnV0ZXMsXG5cdFx0XHRcdG5ldyBTZWxlY3Rpb25WYXJpYW50KClcblx0XHRcdCkgYXMgU2VsZWN0aW9uVmFyaWFudDtcblx0XHRcdG9UYXJnZXRJbmZvLnByb3BlcnRpZXNXaXRob3V0Q29uZmxpY3QgPSBtTGluZUNvbnRleHREYXRhLnByb3BlcnRpZXNXaXRob3V0Q29uZmxpY3Q7XG5cdFx0XHQvL1RPIG1vZGlmeSB0aGUgc2VsZWN0aW9uIHZhcmlhbnQgZnJvbSB0aGUgRXh0ZW5zaW9uIEFQSVxuXHRcdFx0b0NvbnRyb2xsZXIuaW50ZW50QmFzZWROYXZpZ2F0aW9uLmFkYXB0TmF2aWdhdGlvbkNvbnRleHQob1NlbGVjdGlvblZhcmlhbnQsIG9UYXJnZXRJbmZvKTtcblx0XHRcdFNpbXBsZUxpbmtEZWxlZ2F0ZS5fcmVtb3ZlVGVjaG5pY2FsUGFyYW1ldGVycyhvU2VsZWN0aW9uVmFyaWFudCk7XG5cdFx0XHRvU2VsZWN0aW9uVmFyaWFudCA9IFNpbXBsZUxpbmtEZWxlZ2F0ZS5fc2V0RmlsdGVyQ29udGV4dFVybEZvclNlbGVjdGlvblZhcmlhbnQob1ZpZXcsIG9TZWxlY3Rpb25WYXJpYW50LCBvTmF2aWdhdGlvblNlcnZpY2UpO1xuXHRcdFx0Y29uc3QgYVZhbHVlcyA9IGF3YWl0IFNpbXBsZUxpbmtEZWxlZ2F0ZS5fZ2V0QXBwU3RhdGVLZXlBbmRVcmxQYXJhbWV0ZXJzKHRoaXMsIG9OYXZpZ2F0aW9uU2VydmljZSwgb1NlbGVjdGlvblZhcmlhbnQsIFwiXCIpO1xuXHRcdFx0Y29uc3Qgb1BhcmFtcyA9IGFWYWx1ZXNbMF07XG5cdFx0XHRjb25zdCBhcHBTdGF0ZUtleSA9IGFWYWx1ZXNbMV07XG5cdFx0XHRsZXQgdGl0bGVMaW5rdG9CZVJlbW92ZTogYW55O1xuXHRcdFx0b1BheWxvYWQuYVNlbWFudGljTGlua3MgPSBbXTtcblx0XHRcdGFMaW5rSXRlbXMgPSBTaW1wbGVMaW5rRGVsZWdhdGUuX3JlbW92ZUVtcHR5TGlua0l0ZW0oYUxpbmtJdGVtcyk7XG5cdFx0XHRmb3IgKGNvbnN0IGluZGV4IGluIGFMaW5rSXRlbXMpIHtcblx0XHRcdFx0dGl0bGVMaW5rdG9CZVJlbW92ZSA9IGF3YWl0IFNpbXBsZUxpbmtEZWxlZ2F0ZS5fZ2V0TGlua0l0ZW1XaXRoTmV3UGFyYW1ldGVyKFxuXHRcdFx0XHRcdHRoaXMsXG5cdFx0XHRcdFx0YlRpdGxlSGFzTGluayxcblx0XHRcdFx0XHRhVGl0bGVMaW5rLFxuXHRcdFx0XHRcdGFMaW5rSXRlbXNbaW5kZXhdLFxuXHRcdFx0XHRcdG9TaGVsbFNlcnZpY2VzLFxuXHRcdFx0XHRcdG9QYXlsb2FkLFxuXHRcdFx0XHRcdG9QYXJhbXMsXG5cdFx0XHRcdFx0YXBwU3RhdGVLZXksXG5cdFx0XHRcdFx0b1NlbGVjdGlvblZhcmlhbnQsXG5cdFx0XHRcdFx0b05hdmlnYXRpb25TZXJ2aWNlXG5cdFx0XHRcdCk7XG5cdFx0XHRcdGlmICh0aXRsZUxpbmt0b0JlUmVtb3ZlID09PSB0cnVlKSB7XG5cdFx0XHRcdFx0YUxpbmtJdGVtc1tpbmRleF0gPSB1bmRlZmluZWQ7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdHJldHVybiBTaW1wbGVMaW5rRGVsZWdhdGUuX3JlbW92ZUVtcHR5TGlua0l0ZW0oYUxpbmtJdGVtcyk7XG5cdFx0fSBjYXRjaCAob0Vycm9yOiBhbnkpIHtcblx0XHRcdExvZy5lcnJvcihcIkVycm9yIHdoaWxlIGdldHRpbmcgdGhlIG5hdmlnYXRpb24gc2VydmljZVwiLCBvRXJyb3IpO1xuXHRcdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0XHR9XG5cdH0gZWxzZSB7XG5cdFx0cmV0dXJuIGFMaW5rSXRlbXM7XG5cdH1cbn07XG5TaW1wbGVMaW5rRGVsZWdhdGUuYmVmb3JlTmF2aWdhdGlvbkNhbGxiYWNrID0gZnVuY3Rpb24gKG9QYXlsb2FkOiBhbnksIG9FdmVudDogYW55KSB7XG5cdGNvbnN0IG9Tb3VyY2UgPSBvRXZlbnQuZ2V0U291cmNlKCksXG5cdFx0c0hyZWYgPSBvRXZlbnQuZ2V0UGFyYW1ldGVyKFwiaHJlZlwiKSxcblx0XHRvVVJMUGFyc2luZyA9IEZhY3RvcnkuZ2V0U2VydmljZShcIlVSTFBhcnNpbmdcIiksXG5cdFx0b0hhc2ggPSBzSHJlZiAmJiBvVVJMUGFyc2luZy5wYXJzZVNoZWxsSGFzaChzSHJlZik7XG5cblx0S2VlcEFsaXZlSGVscGVyLnN0b3JlQ29udHJvbFJlZnJlc2hTdHJhdGVneUZvckhhc2gob1NvdXJjZSwgb0hhc2gpO1xuXG5cdHJldHVybiBQcm9taXNlLnJlc29sdmUodHJ1ZSk7XG59O1xuU2ltcGxlTGlua0RlbGVnYXRlLl9yZW1vdmVUZWNobmljYWxQYXJhbWV0ZXJzID0gZnVuY3Rpb24gKG9TZWxlY3Rpb25WYXJpYW50OiBhbnkpIHtcblx0b1NlbGVjdGlvblZhcmlhbnQucmVtb3ZlU2VsZWN0T3B0aW9uKFwiQG9kYXRhLmNvbnRleHRcIik7XG5cdG9TZWxlY3Rpb25WYXJpYW50LnJlbW92ZVNlbGVjdE9wdGlvbihcIkBvZGF0YS5tZXRhZGF0YUV0YWdcIik7XG5cdG9TZWxlY3Rpb25WYXJpYW50LnJlbW92ZVNlbGVjdE9wdGlvbihcIlNBUF9fTWVzc2FnZXNcIik7XG59O1xuXG5TaW1wbGVMaW5rRGVsZWdhdGUuX2dldFNlbWFudGljT2JqZWN0Q3VzdG9tRGF0YVZhbHVlID0gZnVuY3Rpb24gKGFMaW5rQ3VzdG9tRGF0YTogYW55LCBvU2VtYW50aWNPYmplY3RzUmVzb2x2ZWQ6IGFueSk6IHZvaWQge1xuXHRsZXQgc1Byb3BlcnR5TmFtZTogc3RyaW5nLCBzQ3VzdG9tRGF0YVZhbHVlOiBzdHJpbmc7XG5cdGZvciAobGV0IGlDdXN0b21EYXRhQ291bnQgPSAwOyBpQ3VzdG9tRGF0YUNvdW50IDwgYUxpbmtDdXN0b21EYXRhLmxlbmd0aDsgaUN1c3RvbURhdGFDb3VudCsrKSB7XG5cdFx0c1Byb3BlcnR5TmFtZSA9IGFMaW5rQ3VzdG9tRGF0YVtpQ3VzdG9tRGF0YUNvdW50XS5nZXRLZXkoKTtcblx0XHRzQ3VzdG9tRGF0YVZhbHVlID0gYUxpbmtDdXN0b21EYXRhW2lDdXN0b21EYXRhQ291bnRdLmdldFZhbHVlKCk7XG5cdFx0b1NlbWFudGljT2JqZWN0c1Jlc29sdmVkW3NQcm9wZXJ0eU5hbWVdID0geyB2YWx1ZTogc0N1c3RvbURhdGFWYWx1ZSB9O1xuXHR9XG59O1xuXG4vKipcbiAqIENoZWNrIHRoZSBzZW1hbnRpYyBvYmplY3QgbmFtZSBpZiBpdCBpcyBkeW5hbWljIG9yIG5vdC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHBhdGhPclZhbHVlIFRoZSBzZW1hbnRpYyBvYmplY3QgcGF0aCBvciBuYW1lXG4gKiBAcmV0dXJucyBUcnVlIGlmIHNlbWFudGljIG9iamVjdCBpcyBkeW5hbWljXG4gKi9cblNpbXBsZUxpbmtEZWxlZ2F0ZS5faXNEeW5hbWljUGF0aCA9IGZ1bmN0aW9uIChwYXRoT3JWYWx1ZTogc3RyaW5nKTogYm9vbGVhbiB7XG5cdGlmIChwYXRoT3JWYWx1ZSAmJiBwYXRoT3JWYWx1ZS5pbmRleE9mKFwie1wiKSA9PT0gMCAmJiBwYXRoT3JWYWx1ZS5pbmRleE9mKFwifVwiKSA9PT0gcGF0aE9yVmFsdWUubGVuZ3RoIC0gMSkge1xuXHRcdHJldHVybiB0cnVlO1xuXHR9IGVsc2Uge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxufTtcblxuLyoqXG4gKiBVcGRhdGUgdGhlIHBheWxvYWQgd2l0aCBzZW1hbnRpYyBvYmplY3QgdmFsdWVzIGZyb20gY3VzdG9tIGRhdGEgb2YgTGluay5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHBheWxvYWQgVGhlIHBheWxvYWQgb2YgdGhlIG1kYyBsaW5rLlxuICogQHBhcmFtIG5ld1BheWxvYWQgVGhlIG5ldyB1cGRhdGVkIHBheWxvYWQuXG4gKiBAcGFyYW0gc2VtYW50aWNPYmplY3ROYW1lIFRoZSBzZW1hbnRpYyBvYmplY3QgbmFtZSByZXNvbHZlZC5cbiAqL1xuU2ltcGxlTGlua0RlbGVnYXRlLl91cGRhdGVQYXlsb2FkV2l0aFJlc29sdmVkU2VtYW50aWNPYmplY3RWYWx1ZSA9IGZ1bmN0aW9uIChcblx0cGF5bG9hZDogUmVnaXN0ZXJlZFBheWxvYWQsXG5cdG5ld1BheWxvYWQ6IFJlZ2lzdGVyZWRQYXlsb2FkLFxuXHRzZW1hbnRpY09iamVjdE5hbWU6IHN0cmluZ1xuKTogdm9pZCB7XG5cdGlmIChTaW1wbGVMaW5rRGVsZWdhdGUuX2lzRHluYW1pY1BhdGgocGF5bG9hZC5tYWluU2VtYW50aWNPYmplY3QpKSB7XG5cdFx0aWYgKHNlbWFudGljT2JqZWN0TmFtZSkge1xuXHRcdFx0bmV3UGF5bG9hZC5tYWluU2VtYW50aWNPYmplY3QgPSBzZW1hbnRpY09iamVjdE5hbWU7XG5cdFx0fSBlbHNlIHtcblx0XHRcdC8vIG5vIHZhbHVlIGZyb20gQ3VzdG9tIERhdGEsIHNvIHJlbW92aW5nIG1haW5TZW1hbnRpY09iamVjdFxuXHRcdFx0bmV3UGF5bG9hZC5tYWluU2VtYW50aWNPYmplY3QgPSB1bmRlZmluZWQ7XG5cdFx0fVxuXHR9XG5cdHN3aXRjaCAodHlwZW9mIHNlbWFudGljT2JqZWN0TmFtZSkge1xuXHRcdGNhc2UgXCJzdHJpbmdcIjpcblx0XHRcdG5ld1BheWxvYWQuc2VtYW50aWNPYmplY3RzUmVzb2x2ZWQ/LnB1c2goc2VtYW50aWNPYmplY3ROYW1lKTtcblx0XHRcdG5ld1BheWxvYWQuc2VtYW50aWNPYmplY3RzLnB1c2goc2VtYW50aWNPYmplY3ROYW1lKTtcblx0XHRcdGJyZWFrO1xuXHRcdGNhc2UgXCJvYmplY3RcIjpcblx0XHRcdGZvciAoY29uc3QgaiBpbiBzZW1hbnRpY09iamVjdE5hbWUgYXMgc3RyaW5nW10pIHtcblx0XHRcdFx0bmV3UGF5bG9hZC5zZW1hbnRpY09iamVjdHNSZXNvbHZlZD8ucHVzaChzZW1hbnRpY09iamVjdE5hbWVbal0pO1xuXHRcdFx0XHRuZXdQYXlsb2FkLnNlbWFudGljT2JqZWN0cy5wdXNoKHNlbWFudGljT2JqZWN0TmFtZVtqXSk7XG5cdFx0XHR9XG5cdFx0XHRicmVhaztcblx0XHRkZWZhdWx0OlxuXHR9XG59O1xuXG5TaW1wbGVMaW5rRGVsZWdhdGUuX2NyZWF0ZU5ld1BheWxvYWRXaXRoRHluYW1pY1NlbWFudGljT2JqZWN0c1Jlc29sdmVkID0gZnVuY3Rpb24gKFxuXHRwYXlsb2FkOiBSZWdpc3RlcmVkUGF5bG9hZCxcblx0c2VtYW50aWNPYmplY3RzUmVzb2x2ZWQ6IGFueSxcblx0bmV3UGF5bG9hZDogUmVnaXN0ZXJlZFBheWxvYWRcbik6IHZvaWQge1xuXHRsZXQgc2VtYW50aWNPYmplY3ROYW1lOiBzdHJpbmcsIHRtcFByb3BlcnR5TmFtZTogc3RyaW5nO1xuXHRmb3IgKGNvbnN0IGkgaW4gcGF5bG9hZC5zZW1hbnRpY09iamVjdHMpIHtcblx0XHRzZW1hbnRpY09iamVjdE5hbWUgPSBwYXlsb2FkLnNlbWFudGljT2JqZWN0c1tpXTtcblx0XHRpZiAoU2ltcGxlTGlua0RlbGVnYXRlLl9pc0R5bmFtaWNQYXRoKHNlbWFudGljT2JqZWN0TmFtZSkpIHtcblx0XHRcdHRtcFByb3BlcnR5TmFtZSA9IHNlbWFudGljT2JqZWN0TmFtZS5zdWJzdHIoMSwgc2VtYW50aWNPYmplY3ROYW1lLmluZGV4T2YoXCJ9XCIpIC0gMSk7XG5cdFx0XHRzZW1hbnRpY09iamVjdE5hbWUgPSBzZW1hbnRpY09iamVjdHNSZXNvbHZlZFt0bXBQcm9wZXJ0eU5hbWVdLnZhbHVlO1xuXHRcdFx0U2ltcGxlTGlua0RlbGVnYXRlLl91cGRhdGVQYXlsb2FkV2l0aFJlc29sdmVkU2VtYW50aWNPYmplY3RWYWx1ZShwYXlsb2FkLCBuZXdQYXlsb2FkLCBzZW1hbnRpY09iamVjdE5hbWUpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRuZXdQYXlsb2FkLnNlbWFudGljT2JqZWN0cy5wdXNoKHNlbWFudGljT2JqZWN0TmFtZSk7XG5cdFx0fVxuXHR9XG59O1xuXG4vKipcbiAqIFVwZGF0ZSB0aGUgc2VtYW50aWMgb2JqZWN0IG5hbWUgZnJvbSB0aGUgcmVzb2x2ZWQgdmFsdWUgZm9yIHRoZSBtYXBwaW5ncyBhdHRyaWJ1dGVzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0gbWRjUGF5bG9hZCBUaGUgcGF5bG9hZCBnaXZlbiBieSB0aGUgYXBwbGljYXRpb24uXG4gKiBAcGFyYW0gbWRjUGF5bG9hZFdpdGhEeW5hbWljU2VtYW50aWNPYmplY3RzUmVzb2x2ZWQgVGhlIHBheWxvYWQgd2l0aCB0aGUgcmVzb2x2ZWQgdmFsdWUgZm9yIHRoZSBzZW1hbnRpYyBvYmplY3QgbmFtZS5cbiAqIEBwYXJhbSBuZXdQYXlsb2FkIFRoZSBuZXcgdXBkYXRlZCBwYXlsb2FkLlxuICovXG5TaW1wbGVMaW5rRGVsZWdhdGUuX3VwZGF0ZVNlbWFudGljT2JqZWN0c0Zvck1hcHBpbmdzID0gZnVuY3Rpb24gKFxuXHRtZGNQYXlsb2FkOiBSZWdpc3RlcmVkUGF5bG9hZCxcblx0bWRjUGF5bG9hZFdpdGhEeW5hbWljU2VtYW50aWNPYmplY3RzUmVzb2x2ZWQ6IFJlZ2lzdGVyZWRQYXlsb2FkLFxuXHRuZXdQYXlsb2FkOiBSZWdpc3RlcmVkUGF5bG9hZFxuKTogdm9pZCB7XG5cdC8vIHVwZGF0ZSB0aGUgc2VtYW50aWMgb2JqZWN0IG5hbWUgZnJvbSB0aGUgcmVzb2x2ZWQgb25lcyBpbiB0aGUgc2VtYW50aWMgb2JqZWN0IG1hcHBpbmdzLlxuXHRtZGNQYXlsb2FkV2l0aER5bmFtaWNTZW1hbnRpY09iamVjdHNSZXNvbHZlZC5zZW1hbnRpY09iamVjdE1hcHBpbmdzLmZvckVhY2goZnVuY3Rpb24gKFxuXHRcdHNlbWFudGljT2JqZWN0TWFwcGluZzogUmVnaXN0ZXJlZFNlbWFudGljT2JqZWN0TWFwcGluZ1xuXHQpIHtcblx0XHRpZiAoc2VtYW50aWNPYmplY3RNYXBwaW5nLnNlbWFudGljT2JqZWN0ICYmIFNpbXBsZUxpbmtEZWxlZ2F0ZS5faXNEeW5hbWljUGF0aChzZW1hbnRpY09iamVjdE1hcHBpbmcuc2VtYW50aWNPYmplY3QpKSB7XG5cdFx0XHRzZW1hbnRpY09iamVjdE1hcHBpbmcuc2VtYW50aWNPYmplY3QgPVxuXHRcdFx0XHRuZXdQYXlsb2FkLnNlbWFudGljT2JqZWN0c1ttZGNQYXlsb2FkLnNlbWFudGljT2JqZWN0cy5pbmRleE9mKHNlbWFudGljT2JqZWN0TWFwcGluZy5zZW1hbnRpY09iamVjdCldO1xuXHRcdH1cblx0fSk7XG59O1xuXG4vKipcbiAqIFVwZGF0ZSB0aGUgc2VtYW50aWMgb2JqZWN0IG5hbWUgZnJvbSB0aGUgcmVzb2x2ZWQgdmFsdWUgZm9yIHRoZSB1bmF2YWlsYWJsZSBhY3Rpb25zLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0gbWRjUGF5bG9hZCBUaGUgcGF5bG9hZCBnaXZlbiBieSB0aGUgYXBwbGljYXRpb24uXG4gKiBAcGFyYW0gbWRjUGF5bG9hZFNlbWFudGljT2JqZWN0VW5hdmFpbGFibGVBY3Rpb25zIFRoZSB1bmF2YWlsYWJsZSBhY3Rpb25zIGdpdmVuIGJ5IHRoZSBhcHBsaWNhdGlvbi5cbiAqIEBwYXJhbSBtZGNQYXlsb2FkV2l0aER5bmFtaWNTZW1hbnRpY09iamVjdHNSZXNvbHZlZCBUaGUgdXBkYXRlZCBwYXlsb2FkIHdpdGggdGhlIHJlc29sdmVkIHZhbHVlIGZvciB0aGUgc2VtYW50aWMgb2JqZWN0IG5hbWUgZm9yIHRoZSB1bmF2YWlsYWJsZSBhY3Rpb25zLlxuICovXG5TaW1wbGVMaW5rRGVsZWdhdGUuX3VwZGF0ZVNlbWFudGljT2JqZWN0c1VuYXZhaWxhYmxlQWN0aW9ucyA9IGZ1bmN0aW9uIChcblx0bWRjUGF5bG9hZDogUmVnaXN0ZXJlZFBheWxvYWQsXG5cdG1kY1BheWxvYWRTZW1hbnRpY09iamVjdFVuYXZhaWxhYmxlQWN0aW9uczogUmVnaXN0ZXJlZFNlbWFudGljT2JqZWN0VW5hdmFpbGFibGVBY3Rpb25zLFxuXHRtZGNQYXlsb2FkV2l0aER5bmFtaWNTZW1hbnRpY09iamVjdHNSZXNvbHZlZDogUmVnaXN0ZXJlZFBheWxvYWRcbik6IHZvaWQge1xuXHRsZXQgX0luZGV4OiBhbnk7XG5cdG1kY1BheWxvYWRTZW1hbnRpY09iamVjdFVuYXZhaWxhYmxlQWN0aW9ucy5mb3JFYWNoKGZ1bmN0aW9uIChzZW1hbnRpY09iamVjdFVuYXZhaWxhYmxlQWN0aW9uOiBhbnkpIHtcblx0XHQvLyBEeW5hbWljIFNlbWFudGljT2JqZWN0IGhhcyBhbiB1bmF2YWlsYWJsZSBhY3Rpb25cblx0XHRpZiAoXG5cdFx0XHRzZW1hbnRpY09iamVjdFVuYXZhaWxhYmxlQWN0aW9uPy5zZW1hbnRpY09iamVjdCAmJlxuXHRcdFx0U2ltcGxlTGlua0RlbGVnYXRlLl9pc0R5bmFtaWNQYXRoKHNlbWFudGljT2JqZWN0VW5hdmFpbGFibGVBY3Rpb24uc2VtYW50aWNPYmplY3QpXG5cdFx0KSB7XG5cdFx0XHRfSW5kZXggPSBtZGNQYXlsb2FkLnNlbWFudGljT2JqZWN0cy5maW5kSW5kZXgoZnVuY3Rpb24gKHNlbWFudGljT2JqZWN0OiBzdHJpbmcpIHtcblx0XHRcdFx0cmV0dXJuIHNlbWFudGljT2JqZWN0ID09PSBzZW1hbnRpY09iamVjdFVuYXZhaWxhYmxlQWN0aW9uLnNlbWFudGljT2JqZWN0O1xuXHRcdFx0fSk7XG5cdFx0XHRpZiAoX0luZGV4ICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0Ly8gR2V0IHRoZSBTZW1hbnRpY09iamVjdCBuYW1lIHJlc29sdmVkIHRvIGEgdmFsdWVcblx0XHRcdFx0c2VtYW50aWNPYmplY3RVbmF2YWlsYWJsZUFjdGlvbi5zZW1hbnRpY09iamVjdCA9IG1kY1BheWxvYWRXaXRoRHluYW1pY1NlbWFudGljT2JqZWN0c1Jlc29sdmVkLnNlbWFudGljT2JqZWN0c1tfSW5kZXhdO1xuXHRcdFx0fVxuXHRcdH1cblx0fSk7XG59O1xuXG4vKipcbiAqIFVwZGF0ZSB0aGUgc2VtYW50aWMgb2JqZWN0IG5hbWUgZnJvbSB0aGUgcmVzb2x2ZWQgdmFsdWUgZm9yIHRoZSB1bmF2YWlsYWJsZSBhY3Rpb25zLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0gbWRjUGF5bG9hZCBUaGUgdXBkYXRlZCBwYXlsb2FkIHdpdGggdGhlIGluZm9ybWF0aW9uIGZyb20gY3VzdG9tIGRhdGEgcHJvdmlkZWQgaW4gdGhlIGxpbmsuXG4gKiBAcGFyYW0gbWRjUGF5bG9hZFdpdGhEeW5hbWljU2VtYW50aWNPYmplY3RzUmVzb2x2ZWQgVGhlIHBheWxvYWQgdXBkYXRlZCB3aXRoIHJlc29sdmVkIHNlbWFudGljIG9iamVjdHMgbmFtZXMuXG4gKi9cblNpbXBsZUxpbmtEZWxlZ2F0ZS5fdXBkYXRlU2VtYW50aWNPYmplY3RzV2l0aFJlc29sdmVkVmFsdWUgPSBmdW5jdGlvbiAoXG5cdG1kY1BheWxvYWQ6IFJlZ2lzdGVyZWRQYXlsb2FkLFxuXHRtZGNQYXlsb2FkV2l0aER5bmFtaWNTZW1hbnRpY09iamVjdHNSZXNvbHZlZDogUmVnaXN0ZXJlZFBheWxvYWRcbik6IHZvaWQge1xuXHRmb3IgKGxldCBuZXdTZW1hbnRpY09iamVjdHNDb3VudCA9IDA7IG5ld1NlbWFudGljT2JqZWN0c0NvdW50IDwgbWRjUGF5bG9hZC5zZW1hbnRpY09iamVjdHMubGVuZ3RoOyBuZXdTZW1hbnRpY09iamVjdHNDb3VudCsrKSB7XG5cdFx0aWYgKFxuXHRcdFx0bWRjUGF5bG9hZFdpdGhEeW5hbWljU2VtYW50aWNPYmplY3RzUmVzb2x2ZWQubWFpblNlbWFudGljT2JqZWN0ID09PVxuXHRcdFx0KG1kY1BheWxvYWQuc2VtYW50aWNPYmplY3RzUmVzb2x2ZWQgJiYgbWRjUGF5bG9hZC5zZW1hbnRpY09iamVjdHNSZXNvbHZlZFtuZXdTZW1hbnRpY09iamVjdHNDb3VudF0pXG5cdFx0KSB7XG5cdFx0XHRtZGNQYXlsb2FkV2l0aER5bmFtaWNTZW1hbnRpY09iamVjdHNSZXNvbHZlZC5tYWluU2VtYW50aWNPYmplY3QgPSBtZGNQYXlsb2FkLnNlbWFudGljT2JqZWN0c1tuZXdTZW1hbnRpY09iamVjdHNDb3VudF07XG5cdFx0fVxuXHRcdGlmIChtZGNQYXlsb2FkV2l0aER5bmFtaWNTZW1hbnRpY09iamVjdHNSZXNvbHZlZC5zZW1hbnRpY09iamVjdHNbbmV3U2VtYW50aWNPYmplY3RzQ291bnRdKSB7XG5cdFx0XHRtZGNQYXlsb2FkV2l0aER5bmFtaWNTZW1hbnRpY09iamVjdHNSZXNvbHZlZC5zZW1hbnRpY09iamVjdHNbbmV3U2VtYW50aWNPYmplY3RzQ291bnRdID1cblx0XHRcdFx0bWRjUGF5bG9hZC5zZW1hbnRpY09iamVjdHNbbmV3U2VtYW50aWNPYmplY3RzQ291bnRdO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHQvLyBubyBDdXN0b20gRGF0YSB2YWx1ZSBmb3IgYSBTZW1hbnRpYyBPYmplY3QgbmFtZSB3aXRoIHBhdGhcblx0XHRcdG1kY1BheWxvYWRXaXRoRHluYW1pY1NlbWFudGljT2JqZWN0c1Jlc29sdmVkLnNlbWFudGljT2JqZWN0cy5zcGxpY2UobmV3U2VtYW50aWNPYmplY3RzQ291bnQsIDEpO1xuXHRcdH1cblx0fVxufTtcblxuLyoqXG4gKiBSZW1vdmUgZW1wdHkgc2VtYW50aWMgb2JqZWN0IG1hcHBpbmdzIGFuZCBpZiB0aGVyZSBpcyBubyBzZW1hbnRpYyBvYmplY3QgbmFtZSwgbGluayB0byBpdC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIG1kY1BheWxvYWRXaXRoRHluYW1pY1NlbWFudGljT2JqZWN0c1Jlc29sdmVkIFRoZSBwYXlsb2FkIHVzZWQgdG8gY2hlY2sgdGhlIG1hcHBpbmdzIG9mIHRoZSBzZW1hbnRpYyBvYmplY3RzLlxuICovXG5TaW1wbGVMaW5rRGVsZWdhdGUuX3JlbW92ZUVtcHR5U2VtYW50aWNPYmplY3RzTWFwcGluZ3MgPSBmdW5jdGlvbiAobWRjUGF5bG9hZFdpdGhEeW5hbWljU2VtYW50aWNPYmplY3RzUmVzb2x2ZWQ6IFJlZ2lzdGVyZWRQYXlsb2FkKTogdm9pZCB7XG5cdC8vIHJlbW92ZSB1bmRlZmluZWQgU2VtYW50aWMgT2JqZWN0IE1hcHBpbmdcblx0Zm9yIChcblx0XHRsZXQgbWFwcGluZ3NDb3VudCA9IDA7XG5cdFx0bWFwcGluZ3NDb3VudCA8IG1kY1BheWxvYWRXaXRoRHluYW1pY1NlbWFudGljT2JqZWN0c1Jlc29sdmVkLnNlbWFudGljT2JqZWN0TWFwcGluZ3MubGVuZ3RoO1xuXHRcdG1hcHBpbmdzQ291bnQrK1xuXHQpIHtcblx0XHRpZiAoXG5cdFx0XHRtZGNQYXlsb2FkV2l0aER5bmFtaWNTZW1hbnRpY09iamVjdHNSZXNvbHZlZC5zZW1hbnRpY09iamVjdE1hcHBpbmdzW21hcHBpbmdzQ291bnRdICYmXG5cdFx0XHRtZGNQYXlsb2FkV2l0aER5bmFtaWNTZW1hbnRpY09iamVjdHNSZXNvbHZlZC5zZW1hbnRpY09iamVjdE1hcHBpbmdzW21hcHBpbmdzQ291bnRdLnNlbWFudGljT2JqZWN0ID09PSB1bmRlZmluZWRcblx0XHQpIHtcblx0XHRcdG1kY1BheWxvYWRXaXRoRHluYW1pY1NlbWFudGljT2JqZWN0c1Jlc29sdmVkLnNlbWFudGljT2JqZWN0TWFwcGluZ3Muc3BsaWNlKG1hcHBpbmdzQ291bnQsIDEpO1xuXHRcdH1cblx0fVxufTtcblxuU2ltcGxlTGlua0RlbGVnYXRlLl9zZXRQYXlsb2FkV2l0aER5bmFtaWNTZW1hbnRpY09iamVjdHNSZXNvbHZlZCA9IGZ1bmN0aW9uIChcblx0cGF5bG9hZDogYW55LFxuXHRuZXdQYXlsb2FkOiBSZWdpc3RlcmVkUGF5bG9hZFxuKTogUmVnaXN0ZXJlZFBheWxvYWQge1xuXHRsZXQgb1BheWxvYWRXaXRoRHluYW1pY1NlbWFudGljT2JqZWN0c1Jlc29sdmVkOiBSZWdpc3RlcmVkUGF5bG9hZDtcblx0aWYgKG5ld1BheWxvYWQuc2VtYW50aWNPYmplY3RzUmVzb2x2ZWQgJiYgbmV3UGF5bG9hZC5zZW1hbnRpY09iamVjdHNSZXNvbHZlZC5sZW5ndGggPiAwKSB7XG5cdFx0b1BheWxvYWRXaXRoRHluYW1pY1NlbWFudGljT2JqZWN0c1Jlc29sdmVkID0ge1xuXHRcdFx0ZW50aXR5VHlwZTogcGF5bG9hZC5lbnRpdHlUeXBlLFxuXHRcdFx0ZGF0YUZpZWxkOiBwYXlsb2FkLmRhdGFGaWVsZCxcblx0XHRcdGNvbnRhY3Q6IHBheWxvYWQuY29udGFjdCxcblx0XHRcdG1haW5TZW1hbnRpY09iamVjdDogcGF5bG9hZC5tYWluU2VtYW50aWNPYmplY3QsXG5cdFx0XHRuYXZpZ2F0aW9uUGF0aDogcGF5bG9hZC5uYXZpZ2F0aW9uUGF0aCxcblx0XHRcdHByb3BlcnR5UGF0aExhYmVsOiBwYXlsb2FkLnByb3BlcnR5UGF0aExhYmVsLFxuXHRcdFx0c2VtYW50aWNPYmplY3RNYXBwaW5nczogZGVlcENsb25lKHBheWxvYWQuc2VtYW50aWNPYmplY3RNYXBwaW5ncyksXG5cdFx0XHRzZW1hbnRpY09iamVjdHM6IG5ld1BheWxvYWQuc2VtYW50aWNPYmplY3RzXG5cdFx0fTtcblx0XHRTaW1wbGVMaW5rRGVsZWdhdGUuX3VwZGF0ZVNlbWFudGljT2JqZWN0c0Zvck1hcHBpbmdzKHBheWxvYWQsIG9QYXlsb2FkV2l0aER5bmFtaWNTZW1hbnRpY09iamVjdHNSZXNvbHZlZCwgbmV3UGF5bG9hZCk7XG5cdFx0Y29uc3QgX1NlbWFudGljT2JqZWN0VW5hdmFpbGFibGVBY3Rpb25zOiBSZWdpc3RlcmVkU2VtYW50aWNPYmplY3RVbmF2YWlsYWJsZUFjdGlvbnMgPSBkZWVwQ2xvbmUoXG5cdFx0XHRwYXlsb2FkLnNlbWFudGljT2JqZWN0VW5hdmFpbGFibGVBY3Rpb25zXG5cdFx0KTtcblx0XHRTaW1wbGVMaW5rRGVsZWdhdGUuX3VwZGF0ZVNlbWFudGljT2JqZWN0c1VuYXZhaWxhYmxlQWN0aW9ucyhcblx0XHRcdHBheWxvYWQsXG5cdFx0XHRfU2VtYW50aWNPYmplY3RVbmF2YWlsYWJsZUFjdGlvbnMsXG5cdFx0XHRvUGF5bG9hZFdpdGhEeW5hbWljU2VtYW50aWNPYmplY3RzUmVzb2x2ZWRcblx0XHQpO1xuXHRcdG9QYXlsb2FkV2l0aER5bmFtaWNTZW1hbnRpY09iamVjdHNSZXNvbHZlZC5zZW1hbnRpY09iamVjdFVuYXZhaWxhYmxlQWN0aW9ucyA9IF9TZW1hbnRpY09iamVjdFVuYXZhaWxhYmxlQWN0aW9ucztcblx0XHRpZiAobmV3UGF5bG9hZC5tYWluU2VtYW50aWNPYmplY3QpIHtcblx0XHRcdG9QYXlsb2FkV2l0aER5bmFtaWNTZW1hbnRpY09iamVjdHNSZXNvbHZlZC5tYWluU2VtYW50aWNPYmplY3QgPSBuZXdQYXlsb2FkLm1haW5TZW1hbnRpY09iamVjdDtcblx0XHR9IGVsc2Uge1xuXHRcdFx0b1BheWxvYWRXaXRoRHluYW1pY1NlbWFudGljT2JqZWN0c1Jlc29sdmVkLm1haW5TZW1hbnRpY09iamVjdCA9IHVuZGVmaW5lZDtcblx0XHR9XG5cdFx0U2ltcGxlTGlua0RlbGVnYXRlLl91cGRhdGVTZW1hbnRpY09iamVjdHNXaXRoUmVzb2x2ZWRWYWx1ZShuZXdQYXlsb2FkLCBvUGF5bG9hZFdpdGhEeW5hbWljU2VtYW50aWNPYmplY3RzUmVzb2x2ZWQpO1xuXHRcdFNpbXBsZUxpbmtEZWxlZ2F0ZS5fcmVtb3ZlRW1wdHlTZW1hbnRpY09iamVjdHNNYXBwaW5ncyhvUGF5bG9hZFdpdGhEeW5hbWljU2VtYW50aWNPYmplY3RzUmVzb2x2ZWQpO1xuXHRcdHJldHVybiBvUGF5bG9hZFdpdGhEeW5hbWljU2VtYW50aWNPYmplY3RzUmVzb2x2ZWQ7XG5cdH0gZWxzZSB7XG5cdFx0cmV0dXJuIHt9IGFzIGFueTtcblx0fVxufTtcblxuU2ltcGxlTGlua0RlbGVnYXRlLl9nZXRQYXlsb2FkV2l0aER5bmFtaWNTZW1hbnRpY09iamVjdHNSZXNvbHZlZCA9IGZ1bmN0aW9uIChwYXlsb2FkOiBhbnksIGxpbmtDdXN0b21EYXRhOiBhbnkpOiBhbnkge1xuXHRsZXQgb1BheWxvYWRXaXRoRHluYW1pY1NlbWFudGljT2JqZWN0c1Jlc29sdmVkOiBhbnk7XG5cdGNvbnN0IG9TZW1hbnRpY09iamVjdHNSZXNvbHZlZDogYW55ID0ge307XG5cdGNvbnN0IG5ld1BheWxvYWQ6IFJlZ2lzdGVyZWRQYXlsb2FkID0geyBzZW1hbnRpY09iamVjdHM6IFtdLCBzZW1hbnRpY09iamVjdHNSZXNvbHZlZDogW10sIHNlbWFudGljT2JqZWN0TWFwcGluZ3M6IFtdIH07XG5cdGlmIChwYXlsb2FkLnNlbWFudGljT2JqZWN0cykge1xuXHRcdC8vIHNhcC5tLkxpbmsgaGFzIGN1c3RvbSBkYXRhIHdpdGggU2VtYW50aWMgT2JqZWN0cyBuYW1lcyByZXNvbHZlZFxuXHRcdGlmIChsaW5rQ3VzdG9tRGF0YSAmJiBsaW5rQ3VzdG9tRGF0YS5sZW5ndGggPiAwKSB7XG5cdFx0XHRTaW1wbGVMaW5rRGVsZWdhdGUuX2dldFNlbWFudGljT2JqZWN0Q3VzdG9tRGF0YVZhbHVlKGxpbmtDdXN0b21EYXRhLCBvU2VtYW50aWNPYmplY3RzUmVzb2x2ZWQpO1xuXHRcdFx0U2ltcGxlTGlua0RlbGVnYXRlLl9jcmVhdGVOZXdQYXlsb2FkV2l0aER5bmFtaWNTZW1hbnRpY09iamVjdHNSZXNvbHZlZChwYXlsb2FkLCBvU2VtYW50aWNPYmplY3RzUmVzb2x2ZWQsIG5ld1BheWxvYWQpO1xuXHRcdFx0b1BheWxvYWRXaXRoRHluYW1pY1NlbWFudGljT2JqZWN0c1Jlc29sdmVkID0gU2ltcGxlTGlua0RlbGVnYXRlLl9zZXRQYXlsb2FkV2l0aER5bmFtaWNTZW1hbnRpY09iamVjdHNSZXNvbHZlZChcblx0XHRcdFx0cGF5bG9hZCxcblx0XHRcdFx0bmV3UGF5bG9hZFxuXHRcdFx0KTtcblx0XHRcdHJldHVybiBvUGF5bG9hZFdpdGhEeW5hbWljU2VtYW50aWNPYmplY3RzUmVzb2x2ZWQ7XG5cdFx0fVxuXHR9IGVsc2Uge1xuXHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdH1cbn07XG5cblNpbXBsZUxpbmtEZWxlZ2F0ZS5fdXBkYXRlUGF5bG9hZFdpdGhTZW1hbnRpY0F0dHJpYnV0ZXMgPSBmdW5jdGlvbiAoXG5cdGFTZW1hbnRpY09iamVjdHM6IGFueSxcblx0b0luZm9Mb2c6IGFueSxcblx0b0NvbnRleHRPYmplY3Q6IGFueSxcblx0b1Jlc3VsdHM6IGFueSxcblx0bVNlbWFudGljT2JqZWN0TWFwcGluZ3M6IGFueVxuKTogdm9pZCB7XG5cdGFTZW1hbnRpY09iamVjdHMuZm9yRWFjaChmdW5jdGlvbiAoc1NlbWFudGljT2JqZWN0OiBhbnkpIHtcblx0XHRpZiAob0luZm9Mb2cpIHtcblx0XHRcdG9JbmZvTG9nLmFkZENvbnRleHRPYmplY3Qoc1NlbWFudGljT2JqZWN0LCBvQ29udGV4dE9iamVjdCk7XG5cdFx0fVxuXHRcdG9SZXN1bHRzW3NTZW1hbnRpY09iamVjdF0gPSB7fTtcblx0XHRmb3IgKGNvbnN0IHNBdHRyaWJ1dGVOYW1lIGluIG9Db250ZXh0T2JqZWN0KSB7XG5cdFx0XHRsZXQgb0F0dHJpYnV0ZSA9IG51bGwsXG5cdFx0XHRcdG9UcmFuc2Zvcm1hdGlvbkFkZGl0aW9uYWwgPSBudWxsO1xuXHRcdFx0aWYgKG9JbmZvTG9nKSB7XG5cdFx0XHRcdG9BdHRyaWJ1dGUgPSBvSW5mb0xvZy5nZXRTZW1hbnRpY09iamVjdEF0dHJpYnV0ZShzU2VtYW50aWNPYmplY3QsIHNBdHRyaWJ1dGVOYW1lKTtcblx0XHRcdFx0aWYgKCFvQXR0cmlidXRlKSB7XG5cdFx0XHRcdFx0b0F0dHJpYnV0ZSA9IG9JbmZvTG9nLmNyZWF0ZUF0dHJpYnV0ZVN0cnVjdHVyZSgpO1xuXHRcdFx0XHRcdG9JbmZvTG9nLmFkZFNlbWFudGljT2JqZWN0QXR0cmlidXRlKHNTZW1hbnRpY09iamVjdCwgc0F0dHJpYnV0ZU5hbWUsIG9BdHRyaWJ1dGUpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHQvLyBJZ25vcmUgdW5kZWZpbmVkIGFuZCBudWxsIHZhbHVlc1xuXHRcdFx0aWYgKG9Db250ZXh0T2JqZWN0W3NBdHRyaWJ1dGVOYW1lXSA9PT0gdW5kZWZpbmVkIHx8IG9Db250ZXh0T2JqZWN0W3NBdHRyaWJ1dGVOYW1lXSA9PT0gbnVsbCkge1xuXHRcdFx0XHRpZiAob0F0dHJpYnV0ZSkge1xuXHRcdFx0XHRcdG9BdHRyaWJ1dGUudHJhbnNmb3JtYXRpb25zLnB1c2goe1xuXHRcdFx0XHRcdFx0dmFsdWU6IHVuZGVmaW5lZCxcblx0XHRcdFx0XHRcdGRlc2NyaXB0aW9uOiBcIlxcdTIxMzkgVW5kZWZpbmVkIGFuZCBudWxsIHZhbHVlcyBoYXZlIGJlZW4gcmVtb3ZlZCBpbiBTaW1wbGVMaW5rRGVsZWdhdGUuXCJcblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0fVxuXHRcdFx0XHRjb250aW51ZTtcblx0XHRcdH1cblx0XHRcdC8vIElnbm9yZSBwbGFpbiBvYmplY3RzIChCQ1AgMTc3MDQ5NjYzOSlcblx0XHRcdGlmIChpc1BsYWluT2JqZWN0KG9Db250ZXh0T2JqZWN0W3NBdHRyaWJ1dGVOYW1lXSkpIHtcblx0XHRcdFx0aWYgKG1TZW1hbnRpY09iamVjdE1hcHBpbmdzICYmIG1TZW1hbnRpY09iamVjdE1hcHBpbmdzW3NTZW1hbnRpY09iamVjdF0pIHtcblx0XHRcdFx0XHRjb25zdCBhS2V5cyA9IE9iamVjdC5rZXlzKG1TZW1hbnRpY09iamVjdE1hcHBpbmdzW3NTZW1hbnRpY09iamVjdF0pO1xuXHRcdFx0XHRcdGxldCBzTmV3QXR0cmlidXRlTmFtZU1hcHBlZCwgc05ld0F0dHJpYnV0ZU5hbWUsIHNWYWx1ZSwgc0tleTtcblx0XHRcdFx0XHRmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgYUtleXMubGVuZ3RoOyBpbmRleCsrKSB7XG5cdFx0XHRcdFx0XHRzS2V5ID0gYUtleXNbaW5kZXhdO1xuXHRcdFx0XHRcdFx0aWYgKHNLZXkuaW5kZXhPZihzQXR0cmlidXRlTmFtZSkgPT09IDApIHtcblx0XHRcdFx0XHRcdFx0c05ld0F0dHJpYnV0ZU5hbWVNYXBwZWQgPSBtU2VtYW50aWNPYmplY3RNYXBwaW5nc1tzU2VtYW50aWNPYmplY3RdW3NLZXldO1xuXHRcdFx0XHRcdFx0XHRzTmV3QXR0cmlidXRlTmFtZSA9IHNLZXkuc3BsaXQoXCIvXCIpW3NLZXkuc3BsaXQoXCIvXCIpLmxlbmd0aCAtIDFdO1xuXHRcdFx0XHRcdFx0XHRzVmFsdWUgPSBvQ29udGV4dE9iamVjdFtzQXR0cmlidXRlTmFtZV1bc05ld0F0dHJpYnV0ZU5hbWVdO1xuXHRcdFx0XHRcdFx0XHRpZiAoc05ld0F0dHJpYnV0ZU5hbWVNYXBwZWQgJiYgc05ld0F0dHJpYnV0ZU5hbWUgJiYgc1ZhbHVlKSB7XG5cdFx0XHRcdFx0XHRcdFx0b1Jlc3VsdHNbc1NlbWFudGljT2JqZWN0XVtzTmV3QXR0cmlidXRlTmFtZU1hcHBlZF0gPSBzVmFsdWU7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKG9BdHRyaWJ1dGUpIHtcblx0XHRcdFx0XHRvQXR0cmlidXRlLnRyYW5zZm9ybWF0aW9ucy5wdXNoKHtcblx0XHRcdFx0XHRcdHZhbHVlOiB1bmRlZmluZWQsXG5cdFx0XHRcdFx0XHRkZXNjcmlwdGlvbjogXCJcXHUyMTM5IFBsYWluIG9iamVjdHMgaGFzIGJlZW4gcmVtb3ZlZCBpbiBTaW1wbGVMaW5rRGVsZWdhdGUuXCJcblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0fVxuXHRcdFx0XHRjb250aW51ZTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gTWFwIHRoZSBhdHRyaWJ1dGUgbmFtZSBvbmx5IGlmICdzZW1hbnRpY09iamVjdE1hcHBpbmcnIGlzIGRlZmluZWQuXG5cdFx0XHQvLyBOb3RlOiB1bmRlciBkZWZpbmVkICdzZW1hbnRpY09iamVjdE1hcHBpbmcnIHdlIGFsc28gbWVhbiBhbiBlbXB0eSBhbm5vdGF0aW9uIG9yIGFuIGFubm90YXRpb24gd2l0aCBlbXB0eSByZWNvcmRcblx0XHRcdGNvbnN0IHNBdHRyaWJ1dGVOYW1lTWFwcGVkID1cblx0XHRcdFx0bVNlbWFudGljT2JqZWN0TWFwcGluZ3MgJiZcblx0XHRcdFx0bVNlbWFudGljT2JqZWN0TWFwcGluZ3Nbc1NlbWFudGljT2JqZWN0XSAmJlxuXHRcdFx0XHRtU2VtYW50aWNPYmplY3RNYXBwaW5nc1tzU2VtYW50aWNPYmplY3RdW3NBdHRyaWJ1dGVOYW1lXVxuXHRcdFx0XHRcdD8gbVNlbWFudGljT2JqZWN0TWFwcGluZ3Nbc1NlbWFudGljT2JqZWN0XVtzQXR0cmlidXRlTmFtZV1cblx0XHRcdFx0XHQ6IHNBdHRyaWJ1dGVOYW1lO1xuXG5cdFx0XHRpZiAob0F0dHJpYnV0ZSAmJiBzQXR0cmlidXRlTmFtZSAhPT0gc0F0dHJpYnV0ZU5hbWVNYXBwZWQpIHtcblx0XHRcdFx0b1RyYW5zZm9ybWF0aW9uQWRkaXRpb25hbCA9IHtcblx0XHRcdFx0XHR2YWx1ZTogdW5kZWZpbmVkLFxuXHRcdFx0XHRcdGRlc2NyaXB0aW9uOiBgXFx1MjEzOSBUaGUgYXR0cmlidXRlICR7c0F0dHJpYnV0ZU5hbWV9IGhhcyBiZWVuIHJlbmFtZWQgdG8gJHtzQXR0cmlidXRlTmFtZU1hcHBlZH0gaW4gU2ltcGxlTGlua0RlbGVnYXRlLmAsXG5cdFx0XHRcdFx0cmVhc29uOiBgXFx1ZDgzZFxcdWRkMzQgQSBjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuU2VtYW50aWNPYmplY3RNYXBwaW5nIGFubm90YXRpb24gaXMgZGVmaW5lZCBmb3Igc2VtYW50aWMgb2JqZWN0ICR7c1NlbWFudGljT2JqZWN0fSB3aXRoIHNvdXJjZSBhdHRyaWJ1dGUgJHtzQXR0cmlidXRlTmFtZX0gYW5kIHRhcmdldCBhdHRyaWJ1dGUgJHtzQXR0cmlidXRlTmFtZU1hcHBlZH0uIFlvdSBjYW4gbW9kaWZ5IHRoZSBhbm5vdGF0aW9uIGlmIHRoZSBtYXBwaW5nIHJlc3VsdCBpcyBub3Qgd2hhdCB5b3UgZXhwZWN0ZWQuYFxuXHRcdFx0XHR9O1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBJZiBtb3JlIHRoZW4gb25lIGxvY2FsIHByb3BlcnR5IG1hcHMgdG8gdGhlIHNhbWUgdGFyZ2V0IHByb3BlcnR5IChjbGFzaCBzaXR1YXRpb24pXG5cdFx0XHQvLyB3ZSB0YWtlIHRoZSB2YWx1ZSBvZiB0aGUgbGFzdCBwcm9wZXJ0eSBhbmQgd3JpdGUgYW4gZXJyb3IgbG9nXG5cdFx0XHRpZiAob1Jlc3VsdHNbc1NlbWFudGljT2JqZWN0XVtzQXR0cmlidXRlTmFtZU1hcHBlZF0pIHtcblx0XHRcdFx0TG9nLmVycm9yKFxuXHRcdFx0XHRcdGBTaW1wbGVMaW5rRGVsZWdhdGU6IFRoZSBhdHRyaWJ1dGUgJHtzQXR0cmlidXRlTmFtZX0gY2FuIG5vdCBiZSByZW5hbWVkIHRvIHRoZSBhdHRyaWJ1dGUgJHtzQXR0cmlidXRlTmFtZU1hcHBlZH0gZHVlIHRvIGEgY2xhc2ggc2l0dWF0aW9uLiBUaGlzIGNhbiBsZWFkIHRvIHdyb25nIG5hdmlnYXRpb24gbGF0ZXIgb24uYFxuXHRcdFx0XHQpO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBDb3B5IHRoZSB2YWx1ZSByZXBsYWNpbmcgdGhlIGF0dHJpYnV0ZSBuYW1lIGJ5IHNlbWFudGljIG9iamVjdCBuYW1lXG5cdFx0XHRvUmVzdWx0c1tzU2VtYW50aWNPYmplY3RdW3NBdHRyaWJ1dGVOYW1lTWFwcGVkXSA9IG9Db250ZXh0T2JqZWN0W3NBdHRyaWJ1dGVOYW1lXTtcblxuXHRcdFx0aWYgKG9BdHRyaWJ1dGUpIHtcblx0XHRcdFx0aWYgKG9UcmFuc2Zvcm1hdGlvbkFkZGl0aW9uYWwpIHtcblx0XHRcdFx0XHRvQXR0cmlidXRlLnRyYW5zZm9ybWF0aW9ucy5wdXNoKG9UcmFuc2Zvcm1hdGlvbkFkZGl0aW9uYWwpO1xuXHRcdFx0XHRcdGNvbnN0IGFBdHRyaWJ1dGVOZXcgPSBvSW5mb0xvZy5jcmVhdGVBdHRyaWJ1dGVTdHJ1Y3R1cmUoKTtcblx0XHRcdFx0XHRhQXR0cmlidXRlTmV3LnRyYW5zZm9ybWF0aW9ucy5wdXNoKHtcblx0XHRcdFx0XHRcdHZhbHVlOiBvQ29udGV4dE9iamVjdFtzQXR0cmlidXRlTmFtZV0sXG5cdFx0XHRcdFx0XHRkZXNjcmlwdGlvbjogYFxcdTIxMzkgVGhlIGF0dHJpYnV0ZSAke3NBdHRyaWJ1dGVOYW1lTWFwcGVkfSB3aXRoIHRoZSB2YWx1ZSAke29Db250ZXh0T2JqZWN0W3NBdHRyaWJ1dGVOYW1lXX0gaGFzIGJlZW4gYWRkZWQgZHVlIHRvIGEgbWFwcGluZyBydWxlIHJlZ2FyZGluZyB0aGUgYXR0cmlidXRlICR7c0F0dHJpYnV0ZU5hbWV9IGluIFNpbXBsZUxpbmtEZWxlZ2F0ZS5gXG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0b0luZm9Mb2cuYWRkU2VtYW50aWNPYmplY3RBdHRyaWJ1dGUoc1NlbWFudGljT2JqZWN0LCBzQXR0cmlidXRlTmFtZU1hcHBlZCwgYUF0dHJpYnV0ZU5ldyk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH0pO1xufTtcblxuLyoqXG4gKiBDaGVja3Mgd2hpY2ggYXR0cmlidXRlcyBvZiB0aGUgQ29udGV4dE9iamVjdCBiZWxvbmcgdG8gd2hpY2ggU2VtYW50aWNPYmplY3QgYW5kIG1hcHMgdGhlbSBpbnRvIGEgdHdvIGRpbWVuc2lvbmFsIGFycmF5LlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0gb0NvbnRleHRPYmplY3QgVGhlIEJpbmRpbmdDb250ZXh0IG9mIHRoZSBTb3VyY2VDb250cm9sIG9mIHRoZSBMaW5rIC8gb2YgdGhlIExpbmsgaXRzZWxmIGlmIG5vdCBzZXRcbiAqIEBwYXJhbSBvUGF5bG9hZCBUaGUgcGF5bG9hZCBnaXZlbiBieSB0aGUgYXBwbGljYXRpb25cbiAqIEBwYXJhbSBvSW5mb0xvZyBUaGUgY29ycmVzcG9uZGluZyBJbmZvTG9nIG9mIHRoZSBMaW5rXG4gKiBAcGFyYW0gb0xpbmsgVGhlIGNvcnJlc3BvbmRpbmcgTGlua1xuICogQHJldHVybnMgQSB0d28gZGltZW5zaW9uYWwgYXJyYXkgd2hpY2ggbWFwcyBhIGdpdmVuIFNlbWFudGljT2JqZWN0IG5hbWUgdG9nZXRoZXIgd2l0aCBhIGdpdmVuIGF0dHJpYnV0ZSBuYW1lIHRvIHRoZSB2YWx1ZSBvZiB0aGF0IGdpdmVuIGF0dHJpYnV0ZVxuICovXG5TaW1wbGVMaW5rRGVsZWdhdGUuX2NhbGN1bGF0ZVNlbWFudGljQXR0cmlidXRlcyA9IGZ1bmN0aW9uIChvQ29udGV4dE9iamVjdDogYW55LCBvUGF5bG9hZDogYW55LCBvSW5mb0xvZzogYW55LCBvTGluazogYW55KSB7XG5cdGNvbnN0IGFMaW5rQ3VzdG9tRGF0YSA9IG9MaW5rICYmIHRoaXMuX2ZldGNoTGlua0N1c3RvbURhdGEob0xpbmspO1xuXHRjb25zdCBvUGF5bG9hZFdpdGhEeW5hbWljU2VtYW50aWNPYmplY3RzUmVzb2x2ZWQ6IGFueSA9IFNpbXBsZUxpbmtEZWxlZ2F0ZS5fZ2V0UGF5bG9hZFdpdGhEeW5hbWljU2VtYW50aWNPYmplY3RzUmVzb2x2ZWQoXG5cdFx0b1BheWxvYWQsXG5cdFx0YUxpbmtDdXN0b21EYXRhXG5cdCk7XG5cdGNvbnN0IG9QYXlsb2FkUmVzb2x2ZWQgPSBvUGF5bG9hZFdpdGhEeW5hbWljU2VtYW50aWNPYmplY3RzUmVzb2x2ZWQgPyBvUGF5bG9hZFdpdGhEeW5hbWljU2VtYW50aWNPYmplY3RzUmVzb2x2ZWQgOiBvUGF5bG9hZDtcblx0dGhpcy5yZXNvbHZlZHBheWxvYWQgPSBvUGF5bG9hZFdpdGhEeW5hbWljU2VtYW50aWNPYmplY3RzUmVzb2x2ZWQ7XG5cdGNvbnN0IGFTZW1hbnRpY09iamVjdHMgPSBTaW1wbGVMaW5rRGVsZWdhdGUuX2dldFNlbWFudGljT2JqZWN0cyhvUGF5bG9hZFJlc29sdmVkKTtcblx0Y29uc3QgbVNlbWFudGljT2JqZWN0TWFwcGluZ3MgPSBTaW1wbGVMaW5rRGVsZWdhdGUuX2NvbnZlcnRTZW1hbnRpY09iamVjdE1hcHBpbmcoXG5cdFx0U2ltcGxlTGlua0RlbGVnYXRlLl9nZXRTZW1hbnRpY09iamVjdE1hcHBpbmdzKG9QYXlsb2FkUmVzb2x2ZWQpXG5cdCk7XG5cdGlmICghYVNlbWFudGljT2JqZWN0cy5sZW5ndGgpIHtcblx0XHRhU2VtYW50aWNPYmplY3RzLnB1c2goXCJcIik7XG5cdH1cblx0Y29uc3Qgb1Jlc3VsdHM6IGFueSA9IHt9O1xuXHRTaW1wbGVMaW5rRGVsZWdhdGUuX3VwZGF0ZVBheWxvYWRXaXRoU2VtYW50aWNBdHRyaWJ1dGVzKGFTZW1hbnRpY09iamVjdHMsIG9JbmZvTG9nLCBvQ29udGV4dE9iamVjdCwgb1Jlc3VsdHMsIG1TZW1hbnRpY09iamVjdE1hcHBpbmdzKTtcblx0cmV0dXJuIHsgcGF5bG9hZDogb1BheWxvYWRSZXNvbHZlZCwgcmVzdWx0czogb1Jlc3VsdHMgfTtcbn07XG4vKipcbiAqIFJldHJpZXZlcyB0aGUgYWN0dWFsIHRhcmdldHMgZm9yIHRoZSBuYXZpZ2F0aW9uIG9mIHRoZSBsaW5rLiBUaGlzIHVzZXMgdGhlIFVTaGVsbCBsb2FkZWQgYnkgdGhlIHtAbGluayBzYXAudWkubWRjLmxpbmsuRmFjdG9yeX0gdG8gcmV0cmlldmVcbiAqIHRoZSBuYXZpZ2F0aW9uIHRhcmdldHMgZnJvbSB0aGUgRkxQIHNlcnZpY2UuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSBzQXBwU3RhdGVLZXkgS2V5IG9mIHRoZSBhcHBzdGF0ZSAobm90IHVzZWQgeWV0KVxuICogQHBhcmFtIG9TZW1hbnRpY0F0dHJpYnV0ZXMgVGhlIGNhbGN1bGF0ZWQgYnkgX2NhbGN1bGF0ZVNlbWFudGljQXR0cmlidXRlc1xuICogQHBhcmFtIG9QYXlsb2FkIFRoZSBwYXlsb2FkIGdpdmVuIGJ5IHRoZSBhcHBsaWNhdGlvblxuICogQHBhcmFtIG9JbmZvTG9nIFRoZSBjb3JyZXNwb25kaW5nIEluZm9Mb2cgb2YgdGhlIExpbmtcbiAqIEBwYXJhbSBvTGluayBUaGUgY29ycmVzcG9uZGluZyBMaW5rXG4gKiBAcmV0dXJucyBSZXNvbHZpbmcgaW50byBhdmFpbGFibGVBdGlvbnMgYW5kIG93bk5hdmlnYXRpb24gY29udGFpbmluZyBhbiBhcnJheSBvZiB7QGxpbmsgc2FwLnVpLm1kYy5saW5rLkxpbmtJdGVtfVxuICovXG5TaW1wbGVMaW5rRGVsZWdhdGUuX3JldHJpZXZlTmF2aWdhdGlvblRhcmdldHMgPSBmdW5jdGlvbiAoXG5cdHNBcHBTdGF0ZUtleTogc3RyaW5nLFxuXHRvU2VtYW50aWNBdHRyaWJ1dGVzOiBhbnksXG5cdG9QYXlsb2FkOiBhbnksXG5cdG9JbmZvTG9nOiBhbnksXG5cdG9MaW5rOiBhbnlcbikge1xuXHRpZiAoIW9QYXlsb2FkLnNlbWFudGljT2JqZWN0cykge1xuXHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUoW10pO1xuXHR9XG5cdGNvbnN0IGFTZW1hbnRpY09iamVjdHMgPSBvUGF5bG9hZC5zZW1hbnRpY09iamVjdHM7XG5cdGNvbnN0IG9OYXZpZ2F0aW9uVGFyZ2V0czogYW55ID0ge1xuXHRcdG93bk5hdmlnYXRpb246IHVuZGVmaW5lZCxcblx0XHRhdmFpbGFibGVBY3Rpb25zOiBbXVxuXHR9O1xuXHRsZXQgaVN1cGVyaW9yQWN0aW9uTGlua3NGb3VuZCA9IDA7XG5cdHJldHVybiBDb3JlLmxvYWRMaWJyYXJ5KFwic2FwLnVpLmZsXCIsIHtcblx0XHRhc3luYzogdHJ1ZVxuXHR9KS50aGVuKCgpID0+IHtcblx0XHRyZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcblx0XHRcdHNhcC51aS5yZXF1aXJlKFtcInNhcC91aS9mbC9VdGlsc1wiXSwgYXN5bmMgKFV0aWxzOiBhbnkpID0+IHtcblx0XHRcdFx0Y29uc3Qgb0FwcENvbXBvbmVudCA9IFV0aWxzLmdldEFwcENvbXBvbmVudEZvckNvbnRyb2wob0xpbmsgPT09IHVuZGVmaW5lZCA/IHRoaXMub0NvbnRyb2wgOiBvTGluayk7XG5cdFx0XHRcdGNvbnN0IG9TaGVsbFNlcnZpY2VzID0gb0FwcENvbXBvbmVudCA/IG9BcHBDb21wb25lbnQuZ2V0U2hlbGxTZXJ2aWNlcygpIDogbnVsbDtcblx0XHRcdFx0aWYgKCFvU2hlbGxTZXJ2aWNlcykge1xuXHRcdFx0XHRcdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvYmFuLXRzLWNvbW1lbnRcblx0XHRcdFx0XHQvLyBAdHMtaWdub3JlXG5cdFx0XHRcdFx0cmVzb2x2ZShvTmF2aWdhdGlvblRhcmdldHMuYXZhaWxhYmxlQWN0aW9ucywgb05hdmlnYXRpb25UYXJnZXRzLm93bk5hdmlnYXRpb24pO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmICghb1NoZWxsU2VydmljZXMuaGFzVVNoZWxsKCkpIHtcblx0XHRcdFx0XHRMb2cuZXJyb3IoXCJTaW1wbGVMaW5rRGVsZWdhdGU6IFNlcnZpY2UgJ0Nyb3NzQXBwbGljYXRpb25OYXZpZ2F0aW9uJyBvciAnVVJMUGFyc2luZycgY291bGQgbm90IGJlIG9idGFpbmVkXCIpO1xuXHRcdFx0XHRcdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvYmFuLXRzLWNvbW1lbnRcblx0XHRcdFx0XHQvLyBAdHMtaWdub3JlXG5cdFx0XHRcdFx0cmVzb2x2ZShvTmF2aWdhdGlvblRhcmdldHMuYXZhaWxhYmxlQWN0aW9ucywgb05hdmlnYXRpb25UYXJnZXRzLm93bk5hdmlnYXRpb24pO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGNvbnN0IGFQYXJhbXMgPSBhU2VtYW50aWNPYmplY3RzLm1hcChmdW5jdGlvbiAoc1NlbWFudGljT2JqZWN0OiBhbnkpIHtcblx0XHRcdFx0XHRyZXR1cm4gW1xuXHRcdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0XHRzZW1hbnRpY09iamVjdDogc1NlbWFudGljT2JqZWN0LFxuXHRcdFx0XHRcdFx0XHRwYXJhbXM6IG9TZW1hbnRpY0F0dHJpYnV0ZXMgPyBvU2VtYW50aWNBdHRyaWJ1dGVzW3NTZW1hbnRpY09iamVjdF0gOiB1bmRlZmluZWQsXG5cdFx0XHRcdFx0XHRcdGFwcFN0YXRlS2V5OiBzQXBwU3RhdGVLZXksXG5cdFx0XHRcdFx0XHRcdHNvcnRSZXN1bHRzQnk6IFwidGV4dFwiXG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XTtcblx0XHRcdFx0fSk7XG5cdFx0XHRcdHRyeSB7XG5cdFx0XHRcdFx0Y29uc3QgYUxpbmtzID0gYXdhaXQgb1NoZWxsU2VydmljZXMuZ2V0TGlua3MoYVBhcmFtcyk7XG5cdFx0XHRcdFx0bGV0IGJIYXNMaW5rcyA9IGZhbHNlO1xuXHRcdFx0XHRcdGZvciAobGV0IGkgPSAwOyBpIDwgYUxpbmtzLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRcdFx0XHRmb3IgKGxldCBqID0gMDsgaiA8IGFMaW5rc1tpXS5sZW5ndGg7IGorKykge1xuXHRcdFx0XHRcdFx0XHRpZiAoYUxpbmtzW2ldW2pdLmxlbmd0aCA+IDApIHtcblx0XHRcdFx0XHRcdFx0XHRiSGFzTGlua3MgPSB0cnVlO1xuXHRcdFx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdGlmIChiSGFzTGlua3MpIHtcblx0XHRcdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGlmICghYUxpbmtzIHx8ICFhTGlua3MubGVuZ3RoIHx8ICFiSGFzTGlua3MpIHtcblx0XHRcdFx0XHRcdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvYmFuLXRzLWNvbW1lbnRcblx0XHRcdFx0XHRcdC8vIEB0cy1pZ25vcmVcblx0XHRcdFx0XHRcdHJlc29sdmUob05hdmlnYXRpb25UYXJnZXRzLmF2YWlsYWJsZUFjdGlvbnMsIG9OYXZpZ2F0aW9uVGFyZ2V0cy5vd25OYXZpZ2F0aW9uKTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRjb25zdCBhU2VtYW50aWNPYmplY3RVbmF2YWlsYWJsZUFjdGlvbnMgPSBTaW1wbGVMaW5rRGVsZWdhdGUuX2dldFNlbWFudGljT2JqZWN0VW5hdmFpbGFibGVBY3Rpb25zKG9QYXlsb2FkKTtcblx0XHRcdFx0XHRjb25zdCBvVW5hdmFpbGFibGVBY3Rpb25zID1cblx0XHRcdFx0XHRcdFNpbXBsZUxpbmtEZWxlZ2F0ZS5fY29udmVydFNlbWFudGljT2JqZWN0VW5hdmFpbGFibGVBY3Rpb24oYVNlbWFudGljT2JqZWN0VW5hdmFpbGFibGVBY3Rpb25zKTtcblx0XHRcdFx0XHRsZXQgc0N1cnJlbnRIYXNoID0gRmllbGRSdW50aW1lLl9mbkZpeEhhc2hRdWVyeVN0cmluZyhDb21tb25VdGlscy5nZXRIYXNoKCkpO1xuXG5cdFx0XHRcdFx0aWYgKHNDdXJyZW50SGFzaCkge1xuXHRcdFx0XHRcdFx0Ly8gQkNQIDE3NzAzMTUwMzU6IHdlIGhhdmUgdG8gc2V0IHRoZSBlbmQtcG9pbnQgJz8nIG9mIGFjdGlvbiBpbiBvcmRlciB0byBhdm9pZCBtYXRjaGluZyBvZiBcIiNTYWxlc09yZGVyLW1hbmFnZVwiIGluIFwiI1NhbGVzT3JkZXItbWFuYWdlRnVsZmlsbG1lbnRcIlxuXHRcdFx0XHRcdFx0c0N1cnJlbnRIYXNoICs9IFwiP1wiO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGNvbnN0IGZuSXNVbmF2YWlsYWJsZUFjdGlvbiA9IGZ1bmN0aW9uIChzU2VtYW50aWNPYmplY3Q6IGFueSwgc0FjdGlvbjogYW55KSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHRcdFx0XHQhIW9VbmF2YWlsYWJsZUFjdGlvbnMgJiZcblx0XHRcdFx0XHRcdFx0ISFvVW5hdmFpbGFibGVBY3Rpb25zW3NTZW1hbnRpY09iamVjdF0gJiZcblx0XHRcdFx0XHRcdFx0b1VuYXZhaWxhYmxlQWN0aW9uc1tzU2VtYW50aWNPYmplY3RdLmluZGV4T2Yoc0FjdGlvbikgPiAtMVxuXHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHR9O1xuXHRcdFx0XHRcdGNvbnN0IGZuQWRkTGluayA9IGZ1bmN0aW9uIChfb0xpbms6IGFueSkge1xuXHRcdFx0XHRcdFx0Y29uc3Qgb1NoZWxsSGFzaCA9IG9TaGVsbFNlcnZpY2VzLnBhcnNlU2hlbGxIYXNoKF9vTGluay5pbnRlbnQpO1xuXHRcdFx0XHRcdFx0aWYgKGZuSXNVbmF2YWlsYWJsZUFjdGlvbihvU2hlbGxIYXNoLnNlbWFudGljT2JqZWN0LCBvU2hlbGxIYXNoLmFjdGlvbikpIHtcblx0XHRcdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0Y29uc3Qgc0hyZWYgPSBgIyR7b1NoZWxsU2VydmljZXMuY29uc3RydWN0U2hlbGxIYXNoKHsgdGFyZ2V0OiB7IHNoZWxsSGFzaDogX29MaW5rLmludGVudCB9IH0pfWA7XG5cblx0XHRcdFx0XHRcdGlmIChfb0xpbmsuaW50ZW50ICYmIF9vTGluay5pbnRlbnQuaW5kZXhPZihzQ3VycmVudEhhc2gpID09PSAwKSB7XG5cdFx0XHRcdFx0XHRcdC8vIFByZXZlbnQgY3VycmVudCBhcHAgZnJvbSBiZWluZyBsaXN0ZWRcblx0XHRcdFx0XHRcdFx0Ly8gTk9URTogSWYgdGhlIG5hdmlnYXRpb24gdGFyZ2V0IGV4aXN0cyBpblxuXHRcdFx0XHRcdFx0XHQvLyBtdWx0aXBsZSBjb250ZXh0cyAoflhYWFggaW4gaGFzaCkgdGhleSB3aWxsIGFsbCBiZSBza2lwcGVkXG5cdFx0XHRcdFx0XHRcdG9OYXZpZ2F0aW9uVGFyZ2V0cy5vd25OYXZpZ2F0aW9uID0gbmV3IExpbmtJdGVtKHtcblx0XHRcdFx0XHRcdFx0XHRocmVmOiBzSHJlZixcblx0XHRcdFx0XHRcdFx0XHR0ZXh0OiBfb0xpbmsudGV4dFxuXHRcdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0Y29uc3Qgb0xpbmtJdGVtID0gbmV3IExpbmtJdGVtKHtcblx0XHRcdFx0XHRcdFx0Ly8gQXMgdGhlIHJldHJpZXZlTmF2aWdhdGlvblRhcmdldHMgbWV0aG9kIGNhbiBiZSBjYWxsZWQgc2V2ZXJhbCB0aW1lIHdlIGNhbiBub3QgY3JlYXRlIHRoZSBMaW5rSXRlbSBpbnN0YW5jZSB3aXRoIHRoZSBzYW1lIGlkXG5cdFx0XHRcdFx0XHRcdGtleTpcblx0XHRcdFx0XHRcdFx0XHRvU2hlbGxIYXNoLnNlbWFudGljT2JqZWN0ICYmIG9TaGVsbEhhc2guYWN0aW9uXG5cdFx0XHRcdFx0XHRcdFx0XHQ/IGAke29TaGVsbEhhc2guc2VtYW50aWNPYmplY3R9LSR7b1NoZWxsSGFzaC5hY3Rpb259YFxuXHRcdFx0XHRcdFx0XHRcdFx0OiB1bmRlZmluZWQsXG5cdFx0XHRcdFx0XHRcdHRleHQ6IF9vTGluay50ZXh0LFxuXHRcdFx0XHRcdFx0XHRkZXNjcmlwdGlvbjogdW5kZWZpbmVkLFxuXHRcdFx0XHRcdFx0XHRocmVmOiBzSHJlZixcblx0XHRcdFx0XHRcdFx0Ly8gdGFyZ2V0OiBub3Qgc3VwcG9ydGVkIHlldFxuXHRcdFx0XHRcdFx0XHRpY29uOiB1bmRlZmluZWQsIC8vX29MaW5rLmljb24sXG5cdFx0XHRcdFx0XHRcdGluaXRpYWxseVZpc2libGU6IF9vTGluay50YWdzICYmIF9vTGluay50YWdzLmluZGV4T2YoXCJzdXBlcmlvckFjdGlvblwiKSA+IC0xXG5cdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdGlmIChvTGlua0l0ZW0uZ2V0UHJvcGVydHkoXCJpbml0aWFsbHlWaXNpYmxlXCIpKSB7XG5cdFx0XHRcdFx0XHRcdGlTdXBlcmlvckFjdGlvbkxpbmtzRm91bmQrKztcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdG9OYXZpZ2F0aW9uVGFyZ2V0cy5hdmFpbGFibGVBY3Rpb25zLnB1c2gob0xpbmtJdGVtKTtcblxuXHRcdFx0XHRcdFx0aWYgKG9JbmZvTG9nKSB7XG5cdFx0XHRcdFx0XHRcdG9JbmZvTG9nLmFkZFNlbWFudGljT2JqZWN0SW50ZW50KG9TaGVsbEhhc2guc2VtYW50aWNPYmplY3QsIHtcblx0XHRcdFx0XHRcdFx0XHRpbnRlbnQ6IG9MaW5rSXRlbS5nZXRIcmVmKCksXG5cdFx0XHRcdFx0XHRcdFx0dGV4dDogb0xpbmtJdGVtLmdldFRleHQoKVxuXHRcdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9O1xuXHRcdFx0XHRcdGZvciAobGV0IG4gPSAwOyBuIDwgYVNlbWFudGljT2JqZWN0cy5sZW5ndGg7IG4rKykge1xuXHRcdFx0XHRcdFx0YUxpbmtzW25dWzBdLmZvckVhY2goZm5BZGRMaW5rKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0aWYgKGlTdXBlcmlvckFjdGlvbkxpbmtzRm91bmQgPT09IDApIHtcblx0XHRcdFx0XHRcdGZvciAobGV0IGlMaW5rSXRlbUluZGV4ID0gMDsgaUxpbmtJdGVtSW5kZXggPCBvTmF2aWdhdGlvblRhcmdldHMuYXZhaWxhYmxlQWN0aW9ucy5sZW5ndGg7IGlMaW5rSXRlbUluZGV4KyspIHtcblx0XHRcdFx0XHRcdFx0aWYgKGlMaW5rSXRlbUluZGV4IDwgdGhpcy5nZXRDb25zdGFudHMoKS5pTGlua3NTaG93bkluUG9wdXApIHtcblx0XHRcdFx0XHRcdFx0XHRvTmF2aWdhdGlvblRhcmdldHMuYXZhaWxhYmxlQWN0aW9uc1tpTGlua0l0ZW1JbmRleF0uc2V0UHJvcGVydHkoXCJpbml0aWFsbHlWaXNpYmxlXCIsIHRydWUpO1xuXHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvYmFuLXRzLWNvbW1lbnRcblx0XHRcdFx0XHQvLyBAdHMtaWdub3JlXG5cdFx0XHRcdFx0cmVzb2x2ZShvTmF2aWdhdGlvblRhcmdldHMuYXZhaWxhYmxlQWN0aW9ucywgb05hdmlnYXRpb25UYXJnZXRzLm93bk5hdmlnYXRpb24pO1xuXHRcdFx0XHR9IGNhdGNoIChvRXJyb3IpIHtcblx0XHRcdFx0XHRMb2cuZXJyb3IoXCJTaW1wbGVMaW5rRGVsZWdhdGU6ICdfcmV0cmlldmVOYXZpZ2F0aW9uVGFyZ2V0cycgZmFpbGVkIGV4ZWN1dGluZyBnZXRMaW5rcyBtZXRob2RcIik7XG5cdFx0XHRcdFx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9iYW4tdHMtY29tbWVudFxuXHRcdFx0XHRcdC8vIEB0cy1pZ25vcmVcblx0XHRcdFx0XHRyZXNvbHZlKG9OYXZpZ2F0aW9uVGFyZ2V0cy5hdmFpbGFibGVBY3Rpb25zLCBvTmF2aWdhdGlvblRhcmdldHMub3duTmF2aWdhdGlvbik7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdH0pO1xuXHR9KTtcbn07XG5TaW1wbGVMaW5rRGVsZWdhdGUuX2dldFNlbWFudGljT2JqZWN0cyA9IGZ1bmN0aW9uIChvUGF5bG9hZDogYW55KSB7XG5cdHJldHVybiBvUGF5bG9hZC5zZW1hbnRpY09iamVjdHMgPyBvUGF5bG9hZC5zZW1hbnRpY09iamVjdHMgOiBbXTtcbn07XG5TaW1wbGVMaW5rRGVsZWdhdGUuX2dldFNlbWFudGljT2JqZWN0VW5hdmFpbGFibGVBY3Rpb25zID0gZnVuY3Rpb24gKG9QYXlsb2FkOiBhbnkpIHtcblx0Y29uc3QgYVNlbWFudGljT2JqZWN0VW5hdmFpbGFibGVBY3Rpb25zOiBhbnlbXSA9IFtdO1xuXHRpZiAob1BheWxvYWQuc2VtYW50aWNPYmplY3RVbmF2YWlsYWJsZUFjdGlvbnMpIHtcblx0XHRvUGF5bG9hZC5zZW1hbnRpY09iamVjdFVuYXZhaWxhYmxlQWN0aW9ucy5mb3JFYWNoKGZ1bmN0aW9uIChvU2VtYW50aWNPYmplY3RVbmF2YWlsYWJsZUFjdGlvbjogYW55KSB7XG5cdFx0XHRhU2VtYW50aWNPYmplY3RVbmF2YWlsYWJsZUFjdGlvbnMucHVzaChcblx0XHRcdFx0bmV3IFNlbWFudGljT2JqZWN0VW5hdmFpbGFibGVBY3Rpb24oe1xuXHRcdFx0XHRcdHNlbWFudGljT2JqZWN0OiBvU2VtYW50aWNPYmplY3RVbmF2YWlsYWJsZUFjdGlvbi5zZW1hbnRpY09iamVjdCxcblx0XHRcdFx0XHRhY3Rpb25zOiBvU2VtYW50aWNPYmplY3RVbmF2YWlsYWJsZUFjdGlvbi5hY3Rpb25zXG5cdFx0XHRcdH0pXG5cdFx0XHQpO1xuXHRcdH0pO1xuXHR9XG5cdHJldHVybiBhU2VtYW50aWNPYmplY3RVbmF2YWlsYWJsZUFjdGlvbnM7XG59O1xuXG4vKipcbiAqIFRoaXMgd2lsbCByZXR1cm4gYW4gYXJyYXkgb2Yge0BsaW5rIHNhcC51aS5tZGMubGluay5TZW1hbnRpY09iamVjdE1hcHBpbmd9IGRlcGVuZGluZyBvbiB0aGUgZ2l2ZW4gcGF5bG9hZC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIG9QYXlsb2FkIFRoZSBwYXlsb2FkIGRlZmluZWQgYnkgdGhlIGFwcGxpY2F0aW9uXG4gKiBAcmV0dXJucyBBbiBhcnJheSBvZiBzZW1hbnRpYyBvYmplY3QgbWFwcGluZ3MuXG4gKi9cblNpbXBsZUxpbmtEZWxlZ2F0ZS5fZ2V0U2VtYW50aWNPYmplY3RNYXBwaW5ncyA9IGZ1bmN0aW9uIChvUGF5bG9hZDogYW55KSB7XG5cdGNvbnN0IGFTZW1hbnRpY09iamVjdE1hcHBpbmdzOiBhbnlbXSA9IFtdO1xuXHRsZXQgYVNlbWFudGljT2JqZWN0TWFwcGluZ0l0ZW1zOiBhbnlbXSA9IFtdO1xuXHRpZiAob1BheWxvYWQuc2VtYW50aWNPYmplY3RNYXBwaW5ncykge1xuXHRcdG9QYXlsb2FkLnNlbWFudGljT2JqZWN0TWFwcGluZ3MuZm9yRWFjaChmdW5jdGlvbiAob1NlbWFudGljT2JqZWN0TWFwcGluZzogYW55KSB7XG5cdFx0XHRhU2VtYW50aWNPYmplY3RNYXBwaW5nSXRlbXMgPSBbXTtcblx0XHRcdGlmIChvU2VtYW50aWNPYmplY3RNYXBwaW5nLml0ZW1zKSB7XG5cdFx0XHRcdG9TZW1hbnRpY09iamVjdE1hcHBpbmcuaXRlbXMuZm9yRWFjaChmdW5jdGlvbiAob1NlbWFudGljT2JqZWN0TWFwcGluZ0l0ZW06IGFueSkge1xuXHRcdFx0XHRcdGFTZW1hbnRpY09iamVjdE1hcHBpbmdJdGVtcy5wdXNoKFxuXHRcdFx0XHRcdFx0bmV3IFNlbWFudGljT2JqZWN0TWFwcGluZ0l0ZW0oe1xuXHRcdFx0XHRcdFx0XHRrZXk6IG9TZW1hbnRpY09iamVjdE1hcHBpbmdJdGVtLmtleSxcblx0XHRcdFx0XHRcdFx0dmFsdWU6IG9TZW1hbnRpY09iamVjdE1hcHBpbmdJdGVtLnZhbHVlXG5cdFx0XHRcdFx0XHR9KVxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdH0pO1xuXHRcdFx0fVxuXHRcdFx0YVNlbWFudGljT2JqZWN0TWFwcGluZ3MucHVzaChcblx0XHRcdFx0bmV3IFNlbWFudGljT2JqZWN0TWFwcGluZyh7XG5cdFx0XHRcdFx0c2VtYW50aWNPYmplY3Q6IG9TZW1hbnRpY09iamVjdE1hcHBpbmcuc2VtYW50aWNPYmplY3QsXG5cdFx0XHRcdFx0aXRlbXM6IGFTZW1hbnRpY09iamVjdE1hcHBpbmdJdGVtc1xuXHRcdFx0XHR9KVxuXHRcdFx0KTtcblx0XHR9KTtcblx0fVxuXHRyZXR1cm4gYVNlbWFudGljT2JqZWN0TWFwcGluZ3M7XG59O1xuLyoqXG4gKiBDb252ZXJ0cyBhIGdpdmVuIGFycmF5IG9mIFNlbWFudGljT2JqZWN0TWFwcGluZyBpbnRvIGEgTWFwIGNvbnRhaW5pbmcgU2VtYW50aWNPYmplY3RzIGFzIEtleXMgYW5kIGEgTWFwIG9mIGl0J3MgY29ycmVzcG9uZGluZyBTZW1hbnRpY09iamVjdE1hcHBpbmdzIGFzIHZhbHVlcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIGFTZW1hbnRpY09iamVjdE1hcHBpbmdzIEFuIGFycmF5IG9mIFNlbWFudGljT2JqZWN0TWFwcGluZ3MuXG4gKiBAcmV0dXJucyBUaGUgY29udmVydGVyZCBTZW1hbnRpY09iamVjdE1hcHBpbmdzXG4gKi9cblNpbXBsZUxpbmtEZWxlZ2F0ZS5fY29udmVydFNlbWFudGljT2JqZWN0TWFwcGluZyA9IGZ1bmN0aW9uIChhU2VtYW50aWNPYmplY3RNYXBwaW5nczogYW55W10pIHtcblx0aWYgKCFhU2VtYW50aWNPYmplY3RNYXBwaW5ncy5sZW5ndGgpIHtcblx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHR9XG5cdGNvbnN0IG1TZW1hbnRpY09iamVjdE1hcHBpbmdzOiBhbnkgPSB7fTtcblx0YVNlbWFudGljT2JqZWN0TWFwcGluZ3MuZm9yRWFjaChmdW5jdGlvbiAob1NlbWFudGljT2JqZWN0TWFwcGluZzogYW55KSB7XG5cdFx0aWYgKCFvU2VtYW50aWNPYmplY3RNYXBwaW5nLmdldFNlbWFudGljT2JqZWN0KCkpIHtcblx0XHRcdHRocm93IEVycm9yKFxuXHRcdFx0XHRgU2ltcGxlTGlua0RlbGVnYXRlOiAnc2VtYW50aWNPYmplY3QnIHByb3BlcnR5IHdpdGggdmFsdWUgJyR7b1NlbWFudGljT2JqZWN0TWFwcGluZy5nZXRTZW1hbnRpY09iamVjdCgpfScgaXMgbm90IHZhbGlkYFxuXHRcdFx0KTtcblx0XHR9XG5cdFx0bVNlbWFudGljT2JqZWN0TWFwcGluZ3Nbb1NlbWFudGljT2JqZWN0TWFwcGluZy5nZXRTZW1hbnRpY09iamVjdCgpXSA9IG9TZW1hbnRpY09iamVjdE1hcHBpbmdcblx0XHRcdC5nZXRJdGVtcygpXG5cdFx0XHQucmVkdWNlKGZ1bmN0aW9uIChvTWFwOiBhbnksIG9JdGVtOiBhbnkpIHtcblx0XHRcdFx0b01hcFtvSXRlbS5nZXRLZXkoKV0gPSBvSXRlbS5nZXRWYWx1ZSgpO1xuXHRcdFx0XHRyZXR1cm4gb01hcDtcblx0XHRcdH0sIHt9KTtcblx0fSk7XG5cdHJldHVybiBtU2VtYW50aWNPYmplY3RNYXBwaW5ncztcbn07XG4vKipcbiAqIENvbnZlcnRzIGEgZ2l2ZW4gYXJyYXkgb2YgU2VtYW50aWNPYmplY3RVbmF2YWlsYWJsZUFjdGlvbnMgaW50byBhIG1hcCBjb250YWluaW5nIFNlbWFudGljT2JqZWN0cyBhcyBrZXlzIGFuZCBhIG1hcCBvZiBpdHMgY29ycmVzcG9uZGluZyBTZW1hbnRpY09iamVjdFVuYXZhaWxhYmxlQWN0aW9ucyBhcyB2YWx1ZXMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSBhU2VtYW50aWNPYmplY3RVbmF2YWlsYWJsZUFjdGlvbnMgVGhlIFNlbWFudGljT2JqZWN0VW5hdmFpbGFibGVBY3Rpb25zIGNvbnZlcnRlZFxuICogQHJldHVybnMgVGhlIG1hcCBjb250YWluaW5nIHRoZSBjb252ZXJ0ZWQgU2VtYW50aWNPYmplY3RVbmF2YWlsYWJsZUFjdGlvbnNcbiAqL1xuU2ltcGxlTGlua0RlbGVnYXRlLl9jb252ZXJ0U2VtYW50aWNPYmplY3RVbmF2YWlsYWJsZUFjdGlvbiA9IGZ1bmN0aW9uIChhU2VtYW50aWNPYmplY3RVbmF2YWlsYWJsZUFjdGlvbnM6IGFueVtdKSB7XG5cdGxldCBfU2VtYW50aWNPYmplY3ROYW1lOiBhbnk7XG5cdGxldCBfU2VtYW50aWNPYmplY3RIYXNBbHJlYWR5VW5hdmFpbGFibGVBY3Rpb25zOiBhbnk7XG5cdGxldCBfVW5hdmFpbGFibGVBY3Rpb25zOiBhbnlbXSA9IFtdO1xuXHRpZiAoIWFTZW1hbnRpY09iamVjdFVuYXZhaWxhYmxlQWN0aW9ucy5sZW5ndGgpIHtcblx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHR9XG5cdGNvbnN0IG1TZW1hbnRpY09iamVjdFVuYXZhaWxhYmxlQWN0aW9uczogYW55ID0ge307XG5cdGFTZW1hbnRpY09iamVjdFVuYXZhaWxhYmxlQWN0aW9ucy5mb3JFYWNoKGZ1bmN0aW9uIChvU2VtYW50aWNPYmplY3RVbmF2YWlsYWJsZUFjdGlvbnM6IGFueSkge1xuXHRcdF9TZW1hbnRpY09iamVjdE5hbWUgPSBvU2VtYW50aWNPYmplY3RVbmF2YWlsYWJsZUFjdGlvbnMuZ2V0U2VtYW50aWNPYmplY3QoKTtcblx0XHRpZiAoIV9TZW1hbnRpY09iamVjdE5hbWUpIHtcblx0XHRcdHRocm93IEVycm9yKGBTaW1wbGVMaW5rRGVsZWdhdGU6ICdzZW1hbnRpY09iamVjdCcgcHJvcGVydHkgd2l0aCB2YWx1ZSAnJHtfU2VtYW50aWNPYmplY3ROYW1lfScgaXMgbm90IHZhbGlkYCk7XG5cdFx0fVxuXHRcdF9VbmF2YWlsYWJsZUFjdGlvbnMgPSBvU2VtYW50aWNPYmplY3RVbmF2YWlsYWJsZUFjdGlvbnMuZ2V0QWN0aW9ucygpO1xuXHRcdGlmIChtU2VtYW50aWNPYmplY3RVbmF2YWlsYWJsZUFjdGlvbnNbX1NlbWFudGljT2JqZWN0TmFtZV0gPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0bVNlbWFudGljT2JqZWN0VW5hdmFpbGFibGVBY3Rpb25zW19TZW1hbnRpY09iamVjdE5hbWVdID0gX1VuYXZhaWxhYmxlQWN0aW9ucztcblx0XHR9IGVsc2Uge1xuXHRcdFx0X1NlbWFudGljT2JqZWN0SGFzQWxyZWFkeVVuYXZhaWxhYmxlQWN0aW9ucyA9IG1TZW1hbnRpY09iamVjdFVuYXZhaWxhYmxlQWN0aW9uc1tfU2VtYW50aWNPYmplY3ROYW1lXTtcblx0XHRcdF9VbmF2YWlsYWJsZUFjdGlvbnMuZm9yRWFjaChmdW5jdGlvbiAoVW5hdmFpbGFibGVBY3Rpb246IHN0cmluZykge1xuXHRcdFx0XHRfU2VtYW50aWNPYmplY3RIYXNBbHJlYWR5VW5hdmFpbGFibGVBY3Rpb25zLnB1c2goVW5hdmFpbGFibGVBY3Rpb24pO1xuXHRcdFx0fSk7XG5cdFx0XHRtU2VtYW50aWNPYmplY3RVbmF2YWlsYWJsZUFjdGlvbnNbX1NlbWFudGljT2JqZWN0TmFtZV0gPSBfU2VtYW50aWNPYmplY3RIYXNBbHJlYWR5VW5hdmFpbGFibGVBY3Rpb25zO1xuXHRcdH1cblx0fSk7XG5cdHJldHVybiBtU2VtYW50aWNPYmplY3RVbmF2YWlsYWJsZUFjdGlvbnM7XG59O1xuXG5leHBvcnQgZGVmYXVsdCBTaW1wbGVMaW5rRGVsZWdhdGU7XG4iXSwibWFwcGluZ3MiOiI7QUFBQTtBQUFBO0FBQUE7Ozs7O0VBa2pCTyxnQkFBZ0JBLElBQUksRUFBRUMsT0FBTyxFQUFFO0lBQ3JDLElBQUk7TUFDSCxJQUFJQyxNQUFNLEdBQUdGLElBQUksRUFBRTtJQUNwQixDQUFDLENBQUMsT0FBTUcsQ0FBQyxFQUFFO01BQ1YsT0FBT0YsT0FBTyxDQUFDRSxDQUFDLENBQUM7SUFDbEI7SUFDQSxJQUFJRCxNQUFNLElBQUlBLE1BQU0sQ0FBQ0UsSUFBSSxFQUFFO01BQzFCLE9BQU9GLE1BQU0sQ0FBQ0UsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFSCxPQUFPLENBQUM7SUFDcEM7SUFDQSxPQUFPQyxNQUFNO0VBQ2Q7RUFyaEJPLGlCQUFpQkcsSUFBSSxFQUFFQyxLQUFLLEVBQUVDLEtBQUssRUFBRTtJQUMzQyxJQUFJLENBQUNGLElBQUksQ0FBQ0csQ0FBQyxFQUFFO01BQ1osSUFBSUQsS0FBSyxpQkFBaUIsRUFBRTtRQUMzQixJQUFJQSxLQUFLLENBQUNDLENBQUMsRUFBRTtVQUNaLElBQUlGLEtBQUssR0FBRyxDQUFDLEVBQUU7WUFDZEEsS0FBSyxHQUFHQyxLQUFLLENBQUNDLENBQUM7VUFDaEI7VUFDQUQsS0FBSyxHQUFHQSxLQUFLLENBQUNFLENBQUM7UUFDaEIsQ0FBQyxNQUFNO1VBQ05GLEtBQUssQ0FBQ0csQ0FBQyxHQUFHLFFBQVFDLElBQUksQ0FBQyxJQUFJLEVBQUVOLElBQUksRUFBRUMsS0FBSyxDQUFDO1VBQ3pDO1FBQ0Q7TUFDRDtNQUNBLElBQUlDLEtBQUssSUFBSUEsS0FBSyxDQUFDSCxJQUFJLEVBQUU7UUFDeEJHLEtBQUssQ0FBQ0gsSUFBSSxDQUFDLFFBQVFPLElBQUksQ0FBQyxJQUFJLEVBQUVOLElBQUksRUFBRUMsS0FBSyxDQUFDLEVBQUUsUUFBUUssSUFBSSxDQUFDLElBQUksRUFBRU4sSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQ3hFO01BQ0Q7TUFDQUEsSUFBSSxDQUFDRyxDQUFDLEdBQUdGLEtBQUs7TUFDZEQsSUFBSSxDQUFDSSxDQUFDLEdBQUdGLEtBQUs7TUFDZCxJQUFNSyxRQUFRLEdBQUdQLElBQUksQ0FBQ0ssQ0FBQztNQUN2QixJQUFJRSxRQUFRLEVBQUU7UUFDYkEsUUFBUSxDQUFDUCxJQUFJLENBQUM7TUFDZjtJQUNEO0VBQ0Q7RUE5RE8sSUFBTSxRQUFRLGFBQWMsWUFBVztJQUM3QyxpQkFBaUIsQ0FBQztJQUNsQixNQUFNUSxTQUFTLENBQUNULElBQUksR0FBRyxVQUFTVSxXQUFXLEVBQUVDLFVBQVUsRUFBRTtNQUN4RCxJQUFNYixNQUFNLEdBQUcsV0FBVztNQUMxQixJQUFNSSxLQUFLLEdBQUcsSUFBSSxDQUFDRSxDQUFDO01BQ3BCLElBQUlGLEtBQUssRUFBRTtRQUNWLElBQU1VLFFBQVEsR0FBR1YsS0FBSyxHQUFHLENBQUMsR0FBR1EsV0FBVyxHQUFHQyxVQUFVO1FBQ3JELElBQUlDLFFBQVEsRUFBRTtVQUNiLElBQUk7WUFDSCxRQUFRZCxNQUFNLEVBQUUsQ0FBQyxFQUFFYyxRQUFRLENBQUMsSUFBSSxDQUFDUCxDQUFDLENBQUMsQ0FBQztVQUNyQyxDQUFDLENBQUMsT0FBT04sQ0FBQyxFQUFFO1lBQ1gsUUFBUUQsTUFBTSxFQUFFLENBQUMsRUFBRUMsQ0FBQyxDQUFDO1VBQ3RCO1VBQ0EsT0FBT0QsTUFBTTtRQUNkLENBQUMsTUFBTTtVQUNOLE9BQU8sSUFBSTtRQUNaO01BQ0Q7TUFDQSxJQUFJLENBQUNRLENBQUMsR0FBRyxVQUFTTyxLQUFLLEVBQUU7UUFDeEIsSUFBSTtVQUNILElBQU1WLEtBQUssR0FBR1UsS0FBSyxDQUFDUixDQUFDO1VBQ3JCLElBQUlRLEtBQUssQ0FBQ1QsQ0FBQyxHQUFHLENBQUMsRUFBRTtZQUNoQixRQUFRTixNQUFNLEVBQUUsQ0FBQyxFQUFFWSxXQUFXLEdBQUdBLFdBQVcsQ0FBQ1AsS0FBSyxDQUFDLEdBQUdBLEtBQUssQ0FBQztVQUM3RCxDQUFDLE1BQU0sSUFBSVEsVUFBVSxFQUFFO1lBQ3RCLFFBQVFiLE1BQU0sRUFBRSxDQUFDLEVBQUVhLFVBQVUsQ0FBQ1IsS0FBSyxDQUFDLENBQUM7VUFDdEMsQ0FBQyxNQUFNO1lBQ04sUUFBUUwsTUFBTSxFQUFFLENBQUMsRUFBRUssS0FBSyxDQUFDO1VBQzFCO1FBQ0QsQ0FBQyxDQUFDLE9BQU9KLENBQUMsRUFBRTtVQUNYLFFBQVFELE1BQU0sRUFBRSxDQUFDLEVBQUVDLENBQUMsQ0FBQztRQUN0QjtNQUNELENBQUM7TUFDRCxPQUFPRCxNQUFNO0lBQ2QsQ0FBQztJQUNEO0VBQ0QsQ0FBQyxFQUFHO0VBNkJHLHdCQUF3QmdCLFFBQVEsRUFBRTtJQUN4QyxPQUFPQSxRQUFRLGlCQUFpQixJQUFJQSxRQUFRLENBQUNWLENBQUMsR0FBRyxDQUFDO0VBQ25EO0VBK0NPLGdCQUFnQlcsS0FBSyxFQUFFbkIsSUFBSSxFQUFFb0IsS0FBSyxFQUFFO0lBQzFDLElBQUlDLENBQUMsR0FBRyxDQUFDLENBQUM7TUFBRWhCLElBQUk7TUFBRWlCLE1BQU07SUFDeEIsU0FBU0MsTUFBTSxDQUFDckIsTUFBTSxFQUFFO01BQ3ZCLElBQUk7UUFDSCxPQUFPLEVBQUVtQixDQUFDLEdBQUdGLEtBQUssQ0FBQ0ssTUFBTSxLQUFLLENBQUNKLEtBQUssSUFBSSxDQUFDQSxLQUFLLEVBQUUsQ0FBQyxFQUFFO1VBQ2xEbEIsTUFBTSxHQUFHRixJQUFJLENBQUNxQixDQUFDLENBQUM7VUFDaEIsSUFBSW5CLE1BQU0sSUFBSUEsTUFBTSxDQUFDRSxJQUFJLEVBQUU7WUFDMUIsSUFBSSxlQUFlRixNQUFNLENBQUMsRUFBRTtjQUMzQkEsTUFBTSxHQUFHQSxNQUFNLENBQUNPLENBQUM7WUFDbEIsQ0FBQyxNQUFNO2NBQ05QLE1BQU0sQ0FBQ0UsSUFBSSxDQUFDbUIsTUFBTSxFQUFFRCxNQUFNLEtBQUtBLE1BQU0sR0FBRyxRQUFRWCxJQUFJLENBQUMsSUFBSSxFQUFFTixJQUFJLEdBQUcsV0FBVyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7Y0FDbkY7WUFDRDtVQUNEO1FBQ0Q7UUFDQSxJQUFJQSxJQUFJLEVBQUU7VUFDVCxRQUFRQSxJQUFJLEVBQUUsQ0FBQyxFQUFFSCxNQUFNLENBQUM7UUFDekIsQ0FBQyxNQUFNO1VBQ05HLElBQUksR0FBR0gsTUFBTTtRQUNkO01BQ0QsQ0FBQyxDQUFDLE9BQU9DLENBQUMsRUFBRTtRQUNYLFFBQVFFLElBQUksS0FBS0EsSUFBSSxHQUFHLFdBQVcsQ0FBQyxFQUFFLENBQUMsRUFBRUYsQ0FBQyxDQUFDO01BQzVDO0lBQ0Q7SUFDQW9CLE1BQU0sRUFBRTtJQUNSLE9BQU9sQixJQUFJO0VBQ1o7RUFJTyxnQkFBZ0JvQixNQUFNLEVBQUV6QixJQUFJLEVBQUVvQixLQUFLLEVBQUU7SUFDM0MsSUFBSU0sSUFBSSxHQUFHLEVBQUU7SUFDYixLQUFLLElBQUlDLEdBQUcsSUFBSUYsTUFBTSxFQUFFO01BQ3ZCQyxJQUFJLENBQUNFLElBQUksQ0FBQ0QsR0FBRyxDQUFDO0lBQ2Y7SUFDQSxPQUFPLE9BQU9ELElBQUksRUFBRSxVQUFTTCxDQUFDLEVBQUU7TUFBRSxPQUFPckIsSUFBSSxDQUFDMEIsSUFBSSxDQUFDTCxDQUFDLENBQUMsQ0FBQztJQUFFLENBQUMsRUFBRUQsS0FBSyxDQUFDO0VBQ2xFO0VBckdBLElBQU1TLGtCQUFrQixHQUFHQyxNQUFNLENBQUNDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRUMsWUFBWSxDQUFRO0VBQ2pFLElBQU1DLFNBQVMsR0FBRztJQUNqQkMsa0JBQWtCLEVBQUUsQ0FBQztJQUNyQkMsUUFBUSxFQUFFLFlBQVk7SUFDdEJDLFlBQVksRUFBRSxpQkFBaUI7SUFDL0JDLG9CQUFvQixFQUFFLDBCQUEwQjtJQUNoREMsb0JBQW9CLEVBQUUsd0JBQXdCO0lBQzlDQyxnQkFBZ0IsRUFBRTtFQUNuQixDQUFDO0VBQ0RWLGtCQUFrQixDQUFDVyxZQUFZLEdBQUcsWUFBWTtJQUM3QyxPQUFPUCxTQUFTO0VBQ2pCLENBQUM7RUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0VBQ0FKLGtCQUFrQixDQUFDWSxjQUFjLEdBQUcsVUFBVUMsUUFBYSxFQUFFQyxVQUEwQixFQUFFO0lBQ3hGLElBQUlBLFVBQVUsRUFBRTtNQUNmLE9BQU9BLFVBQVUsQ0FBQ0Msb0JBQW9CLENBQUNGLFFBQVEsQ0FBQ0csVUFBVSxDQUFDO0lBQzVELENBQUMsTUFBTTtNQUNOLE9BQU9DLFNBQVM7SUFDakI7RUFDRCxDQUFDO0VBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtFQUNBakIsa0JBQWtCLENBQUNrQixrQkFBa0IsR0FBRyxVQUFVTCxRQUFnQixFQUFFQyxVQUFrQixFQUFFO0lBQ3ZGLElBQUlBLFVBQVUsRUFBRTtNQUNmLE9BQU8sSUFBSUssU0FBUyxDQUFDTixRQUFRLENBQUM7SUFDL0IsQ0FBQyxNQUFNO01BQ04sT0FBT0ksU0FBUztJQUNqQjtFQUNELENBQUM7RUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0VBQ0FqQixrQkFBa0IsQ0FBQ29CLGFBQWEsR0FBRyxVQUFVUCxRQUFhLEVBQUVDLFVBQTBCLEVBQUU7SUFDdkYsT0FBT0EsVUFBVSxDQUFDQyxvQkFBb0IsQ0FBQ0YsUUFBUSxDQUFDUSxTQUFTLENBQUM7RUFDM0QsQ0FBQztFQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7RUFDQXJCLGtCQUFrQixDQUFDc0IsV0FBVyxHQUFHLFVBQVVULFFBQWEsRUFBRUMsVUFBMEIsRUFBRTtJQUNyRixPQUFPQSxVQUFVLENBQUNDLG9CQUFvQixDQUFDRixRQUFRLENBQUNVLE9BQU8sQ0FBQztFQUN6RCxDQUFDO0VBQ0R2QixrQkFBa0IsQ0FBQ3dCLGtCQUFrQixHQUFHLFlBQVk7SUFBQTtJQUNuRCxJQUFJQyxhQUFxQixFQUFFQyxhQUFhO0lBQ3hDLElBQU1DLGNBQW1CLEdBQUcsQ0FBQyxDQUFDO0lBQzlCLElBQUlDLGFBQWE7O0lBRWpCO0lBQ0EsSUFBSSxJQUFJLENBQUNDLGVBQWUsRUFBRTtNQUN6QkQsYUFBYSxHQUFHLElBQUksQ0FBQ0MsZUFBZTtJQUNyQyxDQUFDLE1BQU07TUFDTkQsYUFBYSxHQUFHLElBQUksQ0FBQ0UsT0FBTztJQUM3QjtJQUVBLElBQUlGLGFBQWEsSUFBSSxDQUFDQSxhQUFhLENBQUNHLE1BQU0sRUFBRTtNQUMzQ0gsYUFBYSxDQUFDRyxNQUFNLEdBQUcsSUFBSSxDQUFDQyxRQUFRLElBQUksSUFBSSxDQUFDQSxRQUFRLENBQUNDLEdBQUcsQ0FBQzdCLFNBQVMsQ0FBQ0csWUFBWSxDQUFDLEdBQUcsSUFBSSxDQUFDeUIsUUFBUSxDQUFDRSxLQUFLLEVBQUUsR0FBR2pCLFNBQVM7SUFDdEg7SUFFQSxJQUFJVyxhQUFhLENBQUNHLE1BQU0sRUFBRTtNQUN6QkwsYUFBYSxHQUFHLElBQUksQ0FBQ00sUUFBUSxDQUFDRyxRQUFRLENBQUMsZUFBZSxDQUFDLENBQUNDLFdBQVcsQ0FBQyxnQkFBZ0IsQ0FBQztNQUNyRlIsYUFBYSxDQUFDUyxTQUFTLEdBQUdYLGFBQWE7SUFDeEM7SUFFQSxJQUFNWSxlQUFlLEdBQUcsSUFBSSxDQUFDcEIsa0JBQWtCLENBQUNVLGFBQWEsRUFBRSxJQUFJLENBQUNkLFVBQVUsQ0FBQztJQUMvRSxJQUFJLENBQUN5QixhQUFhLEdBQUdELGVBQWU7SUFFcEMsSUFBSVYsYUFBYSxDQUFDWixVQUFVLElBQUksSUFBSSxDQUFDSixjQUFjLENBQUNnQixhQUFhLEVBQUUsSUFBSSxDQUFDZCxVQUFVLENBQUMsRUFBRTtNQUNwRlcsYUFBYSxHQUFHLDRDQUE0QztNQUM1REUsY0FBYyxDQUFDYSxlQUFlLEdBQUc7UUFDaEN4QixVQUFVLEVBQUUsSUFBSSxDQUFDSixjQUFjLENBQUNnQixhQUFhLEVBQUUsSUFBSSxDQUFDZCxVQUFVLENBQUM7UUFDL0QyQixRQUFRLEVBQUVILGVBQWUsQ0FBQ3ZCLG9CQUFvQixDQUFDLEdBQUc7TUFDbkQsQ0FBQztNQUNEWSxjQUFjLENBQUNlLE1BQU0sR0FBRztRQUN2QjFCLFVBQVUsRUFBRSxJQUFJLENBQUNGLFVBQVU7UUFDM0IyQixRQUFRLEVBQUVIO01BQ1gsQ0FBQztJQUNGLENBQUMsTUFBTSxJQUFJVixhQUFhLENBQUNQLFNBQVMsSUFBSSxJQUFJLENBQUNELGFBQWEsQ0FBQ1EsYUFBYSxFQUFFLElBQUksQ0FBQ2QsVUFBVSxDQUFDLEVBQUU7TUFDekZXLGFBQWEsR0FBRywrQ0FBK0M7TUFDL0RFLGNBQWMsQ0FBQ2EsZUFBZSxHQUFHO1FBQ2hDbkIsU0FBUyxFQUFFLElBQUksQ0FBQ0QsYUFBYSxDQUFDUSxhQUFhLEVBQUUsSUFBSSxDQUFDZCxVQUFVLENBQUM7UUFDN0QyQixRQUFRLEVBQUVILGVBQWUsQ0FBQ3ZCLG9CQUFvQixDQUFDLEdBQUc7TUFDbkQsQ0FBQztNQUNEWSxjQUFjLENBQUNlLE1BQU0sR0FBRztRQUN2QnJCLFNBQVMsRUFBRSxJQUFJLENBQUNQLFVBQVU7UUFDMUIyQixRQUFRLEVBQUVIO01BQ1gsQ0FBQztJQUNGLENBQUMsTUFBTSxJQUFJVixhQUFhLENBQUNMLE9BQU8sSUFBSSxJQUFJLENBQUNELFdBQVcsQ0FBQ00sYUFBYSxFQUFFLElBQUksQ0FBQ2QsVUFBVSxDQUFDLEVBQUU7TUFDckZXLGFBQWEsR0FBRyw2Q0FBNkM7TUFDN0RFLGNBQWMsQ0FBQ2EsZUFBZSxHQUFHO1FBQ2hDakIsT0FBTyxFQUFFLElBQUksQ0FBQ0QsV0FBVyxDQUFDTSxhQUFhLEVBQUUsSUFBSSxDQUFDZCxVQUFVO01BQ3pELENBQUM7TUFDRGEsY0FBYyxDQUFDZSxNQUFNLEdBQUc7UUFDdkJuQixPQUFPLEVBQUUsSUFBSSxDQUFDVDtNQUNmLENBQUM7SUFDRjtJQUNBYSxjQUFjLENBQUNlLE1BQU0sQ0FBQ0MsU0FBUyxHQUFHLElBQUksQ0FBQzdCLFVBQVU7SUFDakRhLGNBQWMsQ0FBQ2UsTUFBTSxDQUFDRSxTQUFTLEdBQUcsSUFBSSxDQUFDOUIsVUFBVTtJQUNqRCxJQUFJLElBQUksQ0FBQ2tCLFFBQVEsSUFBSSxJQUFJLENBQUNBLFFBQVEsQ0FBQ0csUUFBUSxDQUFDLFVBQVUsQ0FBQyxFQUFFO01BQ3hEUixjQUFjLENBQUNlLE1BQU0sQ0FBQ0csUUFBUSxHQUFHLElBQUksQ0FBQ2IsUUFBUSxDQUFDRyxRQUFRLENBQUMsVUFBVSxDQUFDO01BQ25FUixjQUFjLENBQUNhLGVBQWUsQ0FBQ0ssUUFBUSxHQUFHLElBQUksQ0FBQ2IsUUFBUSxDQUFDRyxRQUFRLENBQUMsVUFBVSxDQUFDLENBQUNwQixvQkFBb0IsQ0FBQyxHQUFHLENBQUM7SUFDdkc7SUFFQSxJQUFNK0IsU0FBUyxHQUFHQyxvQkFBb0IsQ0FBQ0MsWUFBWSxDQUFDdkIsYUFBYSxFQUFHLFVBQVUsQ0FBQztJQUUvRSxPQUFPd0IsT0FBTyxDQUFDQyxPQUFPLENBQUNDLGVBQWUsQ0FBQ0MsT0FBTyxDQUFDTixTQUFTLEVBQUU7TUFBRU8sSUFBSSxFQUFFNUI7SUFBZSxDQUFDLEVBQUVFLGNBQWMsQ0FBQyxDQUFDLENBQ2xHcEQsSUFBSSxDQUFDLFVBQUMrRSxpQkFBc0IsRUFBSztNQUNqQyxPQUFPQyxRQUFRLENBQUNDLElBQUksQ0FBQztRQUNwQkMsVUFBVSxFQUFFSCxpQkFBaUI7UUFDN0JJLFVBQVUsRUFBRTtNQUNiLENBQUMsQ0FBQztJQUNILENBQUMsQ0FBQyxDQUNEbkYsSUFBSSxDQUFDLFVBQUNvRixlQUFvQixFQUFLO01BQy9CLElBQUlBLGVBQWUsRUFBRTtRQUNwQixJQUFJaEMsY0FBYyxDQUFDZSxNQUFNLElBQUlmLGNBQWMsQ0FBQ2UsTUFBTSxDQUFDRCxRQUFRLEVBQUU7VUFDNURrQixlQUFlLENBQUNDLFFBQVEsQ0FBQ2pDLGNBQWMsQ0FBQ2UsTUFBTSxDQUFDRCxRQUFRLEVBQUUsVUFBVSxDQUFDO1VBQ3BFa0IsZUFBZSxDQUFDRSxpQkFBaUIsQ0FBQ2xDLGNBQWMsQ0FBQ2EsZUFBZSxDQUFDQyxRQUFRLEVBQUUsVUFBVSxDQUFDO1FBQ3ZGO1FBRUEsSUFBSWQsY0FBYyxDQUFDYSxlQUFlLElBQUliLGNBQWMsQ0FBQ2EsZUFBZSxDQUFDeEIsVUFBVSxFQUFFO1VBQ2hGMkMsZUFBZSxDQUFDQyxRQUFRLENBQUNqQyxjQUFjLENBQUNlLE1BQU0sQ0FBQzFCLFVBQVUsRUFBRSxZQUFZLENBQUM7VUFDeEUyQyxlQUFlLENBQUNFLGlCQUFpQixDQUFDbEMsY0FBYyxDQUFDYSxlQUFlLENBQUN4QixVQUFVLEVBQUUsWUFBWSxDQUFDO1FBQzNGO01BQ0Q7TUFDQSxNQUFJLENBQUNhLGVBQWUsR0FBR1osU0FBUztNQUNoQyxPQUFPMEMsZUFBZTtJQUN2QixDQUFDLENBQUM7RUFDSixDQUFDO0VBQ0QzRCxrQkFBa0IsQ0FBQzhELHNCQUFzQixHQUFHLFVBQVVDLFFBQWEsRUFBRUMsZUFBb0IsRUFBRTtJQUFBO0lBQzFGLElBQUksQ0FBQ2hDLFFBQVEsR0FBR2dDLGVBQWU7SUFDL0IsSUFBTUMsb0JBQW9CLEdBQUdGLFFBQVEsYUFBUkEsUUFBUSxnREFBUkEsUUFBUSxDQUFFRyxjQUFjLDBEQUF4QixzQkFBMEJDLEtBQUssQ0FBQyxTQUFTLENBQUM7SUFDdkUsSUFBTUMsZUFBZSxHQUNwQkgsb0JBQW9CLElBQUlBLG9CQUFvQixDQUFDdEUsTUFBTSxHQUFHLENBQUMsSUFBSXNFLG9CQUFvQixDQUFDLENBQUMsQ0FBQyxHQUMvRUQsZUFBZSxDQUFDN0IsUUFBUSxFQUFFLENBQUNrQyxXQUFXLENBQUNKLG9CQUFvQixDQUFDLENBQUMsQ0FBQyxFQUFFRCxlQUFlLENBQUNNLGlCQUFpQixFQUFFLEVBQUU7TUFBRUMsWUFBWSxFQUFFO0lBQUssQ0FBQyxDQUFDLEdBQzVILElBQUk7SUFDUixJQUFJLENBQUN6QyxPQUFPLEdBQUdpQyxRQUFRO0lBQ3ZCLElBQUlDLGVBQWUsSUFBSUEsZUFBZSxDQUFDL0IsR0FBRyxDQUFDN0IsU0FBUyxDQUFDRyxZQUFZLENBQUMsRUFBRTtNQUNuRSxJQUFJLENBQUNPLFVBQVUsR0FBR2tELGVBQWUsQ0FBQzdCLFFBQVEsRUFBRSxDQUFDcUMsWUFBWSxFQUFFO01BQzNELE9BQU8sSUFBSSxDQUFDaEQsa0JBQWtCLEVBQUUsQ0FBQ2pELElBQUksQ0FBQyxVQUFVb0YsZUFBb0IsRUFBRTtRQUNyRSxJQUFJUyxlQUFlLEVBQUU7VUFDcEJULGVBQWUsQ0FBQ0UsaUJBQWlCLENBQUNPLGVBQWUsQ0FBQ0ssZUFBZSxFQUFFLENBQUM7UUFDckU7UUFDQSxPQUFPLENBQUNkLGVBQWUsQ0FBQztNQUN6QixDQUFDLENBQUM7SUFDSDtJQUNBLE9BQU9WLE9BQU8sQ0FBQ0MsT0FBTyxDQUFDLEVBQUUsQ0FBQztFQUMzQixDQUFDO0VBQ0RsRCxrQkFBa0IsQ0FBQzBFLG9CQUFvQixHQUFHLFVBQVVDLE1BQVcsRUFBRTtJQUNoRSxJQUNDQSxNQUFNLENBQUNDLFNBQVMsRUFBRSxJQUNsQkQsTUFBTSxDQUFDMUMsR0FBRyxDQUFDN0IsU0FBUyxDQUFDRyxZQUFZLENBQUMsS0FDakNvRSxNQUFNLENBQUNDLFNBQVMsRUFBRSxDQUFDM0MsR0FBRyxDQUFDN0IsU0FBUyxDQUFDRSxRQUFRLENBQUMsSUFDMUNxRSxNQUFNLENBQUNDLFNBQVMsRUFBRSxDQUFDM0MsR0FBRyxDQUFDN0IsU0FBUyxDQUFDSyxvQkFBb0IsQ0FBQyxJQUN0RGtFLE1BQU0sQ0FBQ0MsU0FBUyxFQUFFLENBQUMzQyxHQUFHLENBQUM3QixTQUFTLENBQUNNLGdCQUFnQixDQUFDLENBQUMsRUFDbkQ7TUFDRCxPQUFPaUUsTUFBTSxDQUFDRSxhQUFhLEVBQUU7SUFDOUIsQ0FBQyxNQUFNO01BQ04sT0FBTzVELFNBQVM7SUFDakI7RUFDRCxDQUFDO0VBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0VBQ0FqQixrQkFBa0IsQ0FBQzhFLGNBQWMsR0FBRyxVQUFVakUsUUFBYSxFQUFFdUQsZUFBd0IsRUFBRVcsUUFBYSxFQUFFO0lBQ3JHLElBQUlYLGVBQWUsSUFBSXBFLGtCQUFrQixDQUFDZ0YsbUJBQW1CLENBQUNuRSxRQUFRLENBQUMsRUFBRTtNQUN4RSxJQUFNb0UsY0FBYyxHQUFHYixlQUFlLENBQUNjLFNBQVMsRUFBRTtNQUNsRCxJQUFJSCxRQUFRLEVBQUU7UUFDYkEsUUFBUSxDQUFDSSxVQUFVLENBQUNuRixrQkFBa0IsQ0FBQ2dGLG1CQUFtQixDQUFDbkUsUUFBUSxDQUFDLENBQUM7TUFDdEU7TUFDQSxJQUFNdUUsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDQyxLQUFLLElBQUksSUFBSSxDQUFDWCxvQkFBb0IsQ0FBQyxJQUFJLENBQUNXLEtBQUssQ0FBQztNQUM1RSxJQUFJLENBQUNDLGVBQWUsR0FDbkJGLGdCQUFnQixJQUNoQixJQUFJLENBQUNWLG9CQUFvQixDQUFDLElBQUksQ0FBQ1csS0FBSyxDQUFDLENBQUNFLEdBQUcsQ0FBQyxVQUFVQyxRQUFhLEVBQUU7UUFDbEUsT0FBT0EsUUFBUSxDQUFDQyxXQUFXLENBQUMvRyxLQUFLO01BQ2xDLENBQUMsQ0FBQztNQUVILElBQU1nSCwyQkFBMkIsR0FBRzFGLGtCQUFrQixDQUFDMkYsNEJBQTRCLENBQUNWLGNBQWMsRUFBRXBFLFFBQVEsRUFBRWtFLFFBQVEsRUFBRSxJQUFJLENBQUNNLEtBQUssQ0FBQztNQUNuSSxJQUFNTyxtQkFBbUIsR0FBR0YsMkJBQTJCLENBQUNHLE9BQU87TUFDL0QsSUFBTUMsZ0JBQWdCLEdBQUdKLDJCQUEyQixDQUFDNUQsT0FBTztNQUU1RCxPQUFPOUIsa0JBQWtCLENBQUMrRiwwQkFBMEIsQ0FBQyxFQUFFLEVBQUVILG1CQUFtQixFQUFFRSxnQkFBZ0IsRUFBRWYsUUFBUSxFQUFFLElBQUksQ0FBQ00sS0FBSyxDQUFDLENBQUM5RyxJQUFJLENBQ3pILFVBQVV5SCxNQUFXLEVBQThCO1FBQ2xELE9BQU9BLE1BQU0sQ0FBQ3JHLE1BQU0sS0FBSyxDQUFDLEdBQUcsSUFBSSxHQUFHcUcsTUFBTTtNQUMzQyxDQUFDLENBQ0Q7SUFDRixDQUFDLE1BQU07TUFDTixPQUFPL0MsT0FBTyxDQUFDQyxPQUFPLENBQUMsSUFBSSxDQUFDO0lBQzdCO0VBQ0QsQ0FBQzs7RUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtFQUNBbEQsa0JBQWtCLENBQUNpRyxhQUFhLEdBQUcsVUFBVW5FLE9BQVksRUFBRW9FLFVBQWlCLEVBQU87SUFDbEYsSUFBSUMsU0FBUyxFQUFFQyxTQUFTO0lBQ3hCLElBQUksQ0FBQUYsVUFBVSxhQUFWQSxVQUFVLHVCQUFWQSxVQUFVLENBQUV2RyxNQUFNLE1BQUssQ0FBQyxFQUFFO01BQzdCeUcsU0FBUyxHQUFHLElBQUlDLFFBQVEsQ0FBQztRQUN4QkMsSUFBSSxFQUFFSixVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUNLLE9BQU8sRUFBRTtRQUM3QkMsSUFBSSxFQUFFTixVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUNPLE9BQU87TUFDNUIsQ0FBQyxDQUFDO01BQ0ZOLFNBQVMsR0FBR3JFLE9BQU8sQ0FBQzRFLGtCQUFrQixLQUFLLE9BQU8sR0FBRyxDQUFDLEdBQUcsQ0FBQztJQUMzRCxDQUFDLE1BQU0sSUFBSTVFLE9BQU8sQ0FBQzRFLGtCQUFrQixLQUFLLE9BQU8sSUFBSSxDQUFBUixVQUFVLGFBQVZBLFVBQVUsdUJBQVZBLFVBQVUsQ0FBRXZHLE1BQU0sTUFBSyxDQUFDLEVBQUU7TUFDOUV3RyxTQUFTLEdBQUcsQ0FBQztJQUNkLENBQUMsTUFBTTtNQUNOQSxTQUFTLEdBQUcsQ0FBQztJQUNkO0lBQ0EsT0FBTztNQUNOUSxRQUFRLEVBQUVSLFNBQVM7TUFDbkJYLFFBQVEsRUFBRVk7SUFDWCxDQUFDO0VBQ0YsQ0FBQztFQUNEcEcsa0JBQWtCLENBQUM0RyxhQUFhLGFBQW1CL0YsUUFBYSxFQUFFZ0csS0FBVTtJQUFBLElBQUU7TUFBQTtNQUFBLGFBV3hFLElBQUk7TUFWVCxJQUFNQyxhQUFhLEdBQUdELEtBQUs7TUFDM0IsSUFBTUUsU0FBUyxHQUFHOUcsTUFBTSxDQUFDQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUVXLFFBQVEsQ0FBQztNQUM3QyxJQUFNbUcsbUJBQW1CLEdBQUc7UUFDM0JDLFdBQVcsRUFBRTtVQUNaQyxJQUFJLEVBQUUsQ0FBQztVQUNQQyxVQUFVLEVBQUVsRztRQUNiLENBQUM7UUFDRG1HLFdBQVcsRUFBRW5HO01BQ2QsQ0FBQztNQUNEO01BQ0EsSUFBSSxDQUFDLE9BQUtvRyxjQUFjLEVBQUU7UUFDekIsT0FBS0EsY0FBYyxHQUFHLENBQUMsQ0FBQztNQUN6QjtNQUFDLDBDQUVHO1FBQUE7VUFBQTtVQXFCSCxNQUFNLElBQUlDLEtBQUssQ0FBQyxxQ0FBcUMsQ0FBQztRQUFDO1FBQUE7VUFBQTtVQUFBLElBcEJuRFAsU0FBUyxhQUFUQSxTQUFTLGVBQVRBLFNBQVMsQ0FBRVEsZUFBZTtZQUM3QixPQUFLbEMsS0FBSyxHQUFHd0IsS0FBSztZQUFDLHVCQUNJQyxhQUFhLENBQUNVLDRCQUE0QixFQUFFLGlCQUEvRHRCLFVBQVU7Y0FBQTtnQkFLZCxJQUFNdUIsU0FBUyxHQUFHekgsa0JBQWtCLENBQUNpRyxhQUFhLENBQUNjLFNBQVMsRUFBRWIsVUFBVSxDQUFDO2dCQUFDLDRCQUNuRTtrQkFDTmUsV0FBVyxFQUFFO29CQUNaQyxJQUFJLEVBQUVPLFNBQVMsQ0FBQ2QsUUFBUTtvQkFDeEJRLFVBQVUsRUFBRU0sU0FBUyxDQUFDakMsUUFBUSxHQUFHaUMsU0FBUyxDQUFDakMsUUFBUSxHQUFHdkU7a0JBQ3ZELENBQUM7a0JBQ0RtRyxXQUFXLEVBQUVuRztnQkFDZCxDQUFDO2dCQUFBO2dCQUFBO2NBQUE7Y0FBQTtnQkFBQSxJQVhHaUYsVUFBVSxDQUFDdkcsTUFBTSxLQUFLLENBQUM7a0JBQzFCO2tCQUFBLHVCQUNtQm1ILGFBQWEsQ0FBQ1ksaUJBQWlCLEVBQUU7b0JBQXBEeEIsVUFBVSx3QkFBMEM7a0JBQUM7Z0JBQUE7Y0FBQTtjQUFBO1lBQUE7VUFBQSxPQVVoRCxJQUFJLENBQUFhLFNBQVMsYUFBVEEsU0FBUyw0Q0FBVEEsU0FBUyxDQUFFeEYsT0FBTyxzREFBbEIsa0JBQW9CNUIsTUFBTSxJQUFHLENBQUMsRUFBRTtZQUFBO1lBQUEsT0FDbkNxSCxtQkFBbUI7VUFDM0IsQ0FBQyxNQUFNLElBQUlELFNBQVMsYUFBVEEsU0FBUyxlQUFUQSxTQUFTLENBQUUvRixVQUFVLElBQUkrRixTQUFTLGFBQVRBLFNBQVMsZUFBVEEsU0FBUyxDQUFFN0MsY0FBYyxFQUFFO1lBQUE7WUFBQSxPQUN2RDhDLG1CQUFtQjtVQUMzQjtRQUFDO1FBQUE7TUFFRixDQUFDLFlBQVFXLE1BQVcsRUFBRTtRQUNyQkMsR0FBRyxDQUFDQyxLQUFLLENBQUMsNkNBQTZDLEVBQUVGLE1BQU0sQ0FBQztNQUNqRSxDQUFDO0lBQ0YsQ0FBQztNQUFBO0lBQUE7RUFBQTtFQUVEM0gsa0JBQWtCLENBQUM4SCwyQkFBMkIsR0FBRyxVQUFVQyxXQUFrQixFQUFFQyxjQUF1QixFQUFFQyxXQUFnQixFQUFPO0lBQzlILElBQUlDLGVBQWUsRUFBRUMsU0FBUztJQUM5QixJQUFJQyxPQUFnQixHQUFHLEtBQUs7SUFDNUIsSUFBSUosY0FBYyxJQUFJQyxXQUFXLElBQUlBLFdBQVcsQ0FBQyxDQUFDLENBQUMsRUFBRTtNQUNwRCxJQUFJSSxtQkFBNEIsRUFBRUMsNkJBQXFDO01BQ3ZFLElBQU1DLGFBQWEsR0FBR04sV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDTyxNQUFNLENBQUNDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDekQsSUFBSVYsV0FBVyxJQUFJQSxXQUFXLENBQUMsQ0FBQyxDQUFDLEVBQUU7UUFDbENPLDZCQUE2QixjQUFPUCxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMzRixXQUFXLENBQUMsS0FBSyxDQUFDLENBQUU7UUFDdkVpRyxtQkFBbUIsR0FBR0UsYUFBYSxLQUFLRCw2QkFBNkI7UUFDckUsSUFBSUQsbUJBQW1CLEVBQUU7VUFDeEJILGVBQWUsR0FBR0gsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDM0YsV0FBVyxDQUFDLE1BQU0sQ0FBQztVQUNwRCxJQUFJLENBQUNOLE9BQU8sQ0FBQzRHLGFBQWEsR0FBR1IsZUFBZTtVQUM1QyxJQUFJSCxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUM5RixHQUFHLENBQUM3QixTQUFTLENBQUNJLG9CQUFvQixDQUFDLEVBQUU7WUFDdkQySCxTQUFTLEdBQUdKLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQ25ELFNBQVMsRUFBRTtZQUN0Q3VELFNBQVMsQ0FBQ2hHLFFBQVEsQ0FBQyxlQUFlLENBQUMsQ0FBQ3dHLFdBQVcsQ0FBQyxnQkFBZ0IsRUFBRVQsZUFBZSxDQUFDO1lBQ2xGLElBQU1VLFdBQVcsR0FBR1QsU0FBUyxDQUMzQmhHLFFBQVEsQ0FBQyxlQUFlLENBQUMsQ0FDekJDLFdBQVcsQ0FBQyxZQUFZLENBQUMsQ0FDekJ5RyxNQUFNLENBQUMsVUFBVXpDLFNBQWMsRUFBRTtjQUNqQyxJQUFJLFdBQUlBLFNBQVMsQ0FBQ3RHLEdBQUcsTUFBT3dJLDZCQUE2QixFQUFFO2dCQUMxRCxPQUFPbEMsU0FBUztjQUNqQjtZQUNELENBQUMsQ0FBQztZQUNILElBQUl3QyxXQUFXLElBQUlBLFdBQVcsQ0FBQ2pKLE1BQU0sR0FBRyxDQUFDLEVBQUU7Y0FDMUN3SSxTQUFTLENBQUNoRyxRQUFRLENBQUMsZUFBZSxDQUFDLENBQUN3RyxXQUFXLENBQUMsYUFBYSxFQUFFQyxXQUFXLENBQUM7WUFDNUU7WUFDQVIsT0FBTyxHQUFHLElBQUk7VUFDZjtRQUNEO01BQ0Q7SUFDRDtJQUNBLE9BQU9BLE9BQU87RUFDZixDQUFDO0VBQ0RwSSxrQkFBa0IsQ0FBQzhJLHdCQUF3QixHQUFHLFVBQVVDLGtCQUF1QixFQUFFQyxLQUFVLEVBQUU7SUFDNUYsSUFBSUQsa0JBQWtCLElBQUlDLEtBQUssQ0FBQzFELGVBQWUsRUFBRTtNQUNoRCxPQUNDMEQsS0FBSyxDQUFDMUQsZUFBZSxDQUFDdUQsTUFBTSxDQUFDLFVBQVVJLElBQVMsRUFBRTtRQUNqRCxPQUNDRixrQkFBa0IsQ0FBQ0YsTUFBTSxDQUFDLFVBQVVLLFNBQWMsRUFBRTtVQUNuRCxPQUFPQSxTQUFTLEtBQUtELElBQUk7UUFDMUIsQ0FBQyxDQUFDLENBQUN0SixNQUFNLEdBQUcsQ0FBQztNQUVmLENBQUMsQ0FBQyxDQUFDQSxNQUFNLEdBQUcsQ0FBQztJQUVmLENBQUMsTUFBTTtNQUNOLE9BQU8sS0FBSztJQUNiO0VBQ0QsQ0FBQztFQUNESyxrQkFBa0IsQ0FBQ21KLGVBQWUsR0FBRyxVQUFVQyxLQUFVLEVBQUVDLFlBQWlCLEVBQUU7SUFDN0UsSUFBSSxDQUFDQSxZQUFZLEVBQUU7TUFDbEIsSUFBSUQsS0FBSyxDQUFDRSxjQUFjLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUlGLEtBQUssQ0FBQ0UsY0FBYyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDaEYsaUJBQWlCLEVBQUUsRUFBRTtRQUNqRyxPQUFPOEUsS0FBSyxDQUFDRSxjQUFjLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUNoRixpQkFBaUIsRUFBRTtNQUM5RDtJQUNEO0lBQ0EsT0FBTytFLFlBQVk7RUFDcEIsQ0FBQztFQUNEckosa0JBQWtCLENBQUN1Six1Q0FBdUMsR0FBRyxVQUM1REgsS0FBVSxFQUNWSSxpQkFBbUMsRUFDbkNDLGtCQUF1QixFQUNKO0lBQ25CLElBQUlMLEtBQUssQ0FBQ00sV0FBVyxFQUFFLENBQUMvRyxTQUFTLElBQUk2RyxpQkFBaUIsRUFBRTtNQUN2RCxJQUFNRyxXQUFXLEdBQUdGLGtCQUFrQixDQUFDRyxtQkFBbUIsQ0FBQ1IsS0FBSyxDQUFDTSxXQUFXLEVBQUUsQ0FBQy9HLFNBQVMsRUFBRXlHLEtBQUssQ0FBQ2pILFFBQVEsRUFBRSxDQUFDO01BQzNHcUgsaUJBQWlCLENBQUNLLG1CQUFtQixDQUFDRixXQUFXLENBQUM7SUFDbkQ7SUFDQSxPQUFPSCxpQkFBaUI7RUFDekIsQ0FBQztFQUVEeEosa0JBQWtCLENBQUM4SixrQkFBa0IsR0FBRyxVQUN2Q0MsZUFBdUIsRUFDdkJDLE9BQVksRUFDWkMsdUJBQXlELEVBQ3pEVCxpQkFBbUMsRUFDbEM7SUFDRCxJQUFJVSxVQUFVLEdBQUcsS0FBSztJQUN0QixJQUFNQyx3QkFBd0IsR0FBRyxJQUFJQyxnQkFBZ0IsQ0FBQ1osaUJBQWlCLENBQUNhLFlBQVksRUFBRSxDQUFDO0lBQ3ZGO0lBQ0FKLHVCQUF1QixDQUFDSyxPQUFPLENBQUMsVUFBVUMsT0FBTyxFQUFFO01BQ2xELElBQUlDLHFCQUFxQixHQUFHRCxPQUFPLENBQUNFLGNBQWM7TUFDbEQsSUFBTUMseUJBQXlCLEdBQUdDLGdDQUFnQyxDQUFDSixPQUFPLENBQUNFLGNBQWMsQ0FBQztNQUMxRixJQUFJQyx5QkFBeUIsSUFBSVYsT0FBTyxDQUFDVSx5QkFBeUIsQ0FBQyxFQUFFO1FBQ3BFRixxQkFBcUIsR0FBR1IsT0FBTyxDQUFDVSx5QkFBeUIsQ0FBQztNQUMzRDtNQUNBLElBQUlYLGVBQWUsS0FBS1MscUJBQXFCLEVBQUU7UUFDOUMsSUFBTUksU0FBUyxHQUFHTCxPQUFPLENBQUNNLEtBQUs7UUFDL0IsS0FBSyxJQUFNckwsQ0FBQyxJQUFJb0wsU0FBUyxFQUFFO1VBQzFCLElBQU1FLGNBQWMsR0FBR0YsU0FBUyxDQUFDcEwsQ0FBQyxDQUFDLENBQUNNLEdBQUc7VUFDdkMsSUFBTWlMLHVCQUF1QixHQUFHSCxTQUFTLENBQUNwTCxDQUFDLENBQUMsQ0FBQ2QsS0FBSztVQUNsRCxJQUFJc0wsT0FBTyxDQUFDYyxjQUFjLENBQUMsRUFBRTtZQUM1Qlgsd0JBQXdCLENBQUNhLGVBQWUsQ0FBQ0QsdUJBQXVCLENBQUM7WUFDakVaLHdCQUF3QixDQUFDYyxrQkFBa0IsQ0FBQ0YsdUJBQXVCLENBQUM7WUFDcEVaLHdCQUF3QixDQUFDZSxlQUFlLENBQUNKLGNBQWMsRUFBRUMsdUJBQXVCLENBQUM7WUFDakZaLHdCQUF3QixDQUFDZ0Isa0JBQWtCLENBQUNMLGNBQWMsRUFBRUMsdUJBQXVCLENBQUM7WUFDcEZmLE9BQU8sQ0FBQ2UsdUJBQXVCLENBQUMsR0FBR2YsT0FBTyxDQUFDYyxjQUFjLENBQUM7WUFDMUQsT0FBT2QsT0FBTyxDQUFDYyxjQUFjLENBQUM7WUFDOUJaLFVBQVUsR0FBRyxJQUFJO1VBQ2xCO1VBQ0M7VUFDRDtVQUFBLEtBQ0ssSUFBSVksY0FBYyxDQUFDckMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDOUksTUFBTSxHQUFHLENBQUMsRUFBRTtZQUM5QztZQUNBLElBQU15TCxtQkFBbUIsR0FBR04sY0FBYyxDQUFDckMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDNEMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ2xFO1lBQ0EsSUFBSSxDQUFDckIsT0FBTyxDQUFDb0IsbUJBQW1CLENBQUMsRUFBRTtjQUNsQyxPQUFPcEIsT0FBTyxDQUFDb0IsbUJBQW1CLENBQUM7Y0FDbkNqQix3QkFBd0IsQ0FBQ2EsZUFBZSxDQUFDSSxtQkFBbUIsQ0FBQztjQUM3RGpCLHdCQUF3QixDQUFDYyxrQkFBa0IsQ0FBQ0csbUJBQW1CLENBQUM7WUFDakUsQ0FBQyxNQUFNLElBQUlBLG1CQUFtQixLQUFLTCx1QkFBdUIsRUFBRTtjQUMzRDtjQUNBWix3QkFBd0IsQ0FBQ2UsZUFBZSxDQUFDRSxtQkFBbUIsRUFBRUwsdUJBQXVCLENBQUM7Y0FDdEZaLHdCQUF3QixDQUFDZ0Isa0JBQWtCLENBQUNDLG1CQUFtQixFQUFFTCx1QkFBdUIsQ0FBQztjQUN6RmYsT0FBTyxDQUFDZSx1QkFBdUIsQ0FBQyxHQUFHZixPQUFPLENBQUNvQixtQkFBbUIsQ0FBQztjQUMvRCxPQUFPcEIsT0FBTyxDQUFDb0IsbUJBQW1CLENBQUM7WUFDcEM7VUFDRCxDQUFDLE1BQU07WUFDTixPQUFPcEIsT0FBTyxDQUFDYyxjQUFjLENBQUM7WUFDOUJYLHdCQUF3QixDQUFDYSxlQUFlLENBQUNELHVCQUF1QixDQUFDO1lBQ2pFWix3QkFBd0IsQ0FBQ2Msa0JBQWtCLENBQUNGLHVCQUF1QixDQUFDO1VBQ3JFO1FBQ0Q7TUFDRDtJQUNELENBQUMsQ0FBQztJQUNGLE9BQU87TUFBRU8sTUFBTSxFQUFFdEIsT0FBTztNQUFFRSxVQUFVLEVBQVZBLFVBQVU7TUFBRXFCLGdCQUFnQixFQUFFcEI7SUFBeUIsQ0FBQztFQUNuRixDQUFDOztFQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7RUFDQW5LLGtCQUFrQixDQUFDd0wsK0JBQStCLGFBQ2pEcE0sS0FBZ0MsRUFDaENxTSxpQkFBc0IsRUFDdEJGLGdCQUFrQyxFQUNsQ2QsY0FBc0I7SUFBQSxJQUNGO01BQUE7TUFDcEIsSUFBSWlCLE9BQU8sR0FBRyxFQUFFOztNQUVoQjtNQUNBLElBQUlDLFNBQVMsQ0FBQ0osZ0JBQWdCLDJCQUFFbk0sS0FBSyxDQUFDaUksY0FBYyxDQUFDLEVBQUUsQ0FBQywwREFBeEIsc0JBQTBCa0UsZ0JBQWdCLENBQUMsRUFBRTtRQUM1RSxJQUFNSyxZQUFZLEdBQUd4TSxLQUFLLENBQUNpSSxjQUFjLENBQUMsRUFBRSxDQUFDO1FBQzdDLHVCQUFPLENBQUN1RSxZQUFZLENBQUNDLGtCQUFrQixFQUFFRCxZQUFZLENBQUNFLFdBQVcsQ0FBQztNQUNuRTtNQUNBO01BQUE7UUFBQSxJQUVDMU0sS0FBSyxDQUFDaUksY0FBYyxXQUFJb0QsY0FBYyxFQUFHLEtBQUt4SixTQUFTLElBQ3ZELENBQUMwSyxTQUFTLENBQUN2TSxLQUFLLENBQUNpSSxjQUFjLFdBQUlvRCxjQUFjLEVBQUcsQ0FBQ2MsZ0JBQWdCLEVBQUVBLGdCQUFnQixDQUFDO1VBQUEsdUJBRXhFUSxZQUFZLENBQUNOLGlCQUFpQixDQUFDTyw4QkFBOEIsQ0FBQ1QsZ0JBQWdCLENBQUNVLFlBQVksRUFBRSxDQUFDLENBQUM7WUFBL0dQLE9BQU8sZ0JBQXdHO1lBQy9HdE0sS0FBSyxDQUFDaUksY0FBYyxXQUFJb0QsY0FBYyxFQUFHLEdBQUc7Y0FDM0NvQixrQkFBa0IsRUFBRUgsT0FBTyxDQUFDLENBQUMsQ0FBQztjQUM5QkksV0FBVyxFQUFFSixPQUFPLENBQUMsQ0FBQyxDQUFDO2NBQ3ZCSCxnQkFBZ0IsRUFBRUE7WUFDbkIsQ0FBQztVQUFDO1FBQUE7VUFFRixJQUFNVyxLQUFLLEdBQUc5TSxLQUFLLENBQUNpSSxjQUFjLFdBQUlvRCxjQUFjLEVBQUc7VUFDdkRpQixPQUFPLEdBQUcsQ0FBQ1EsS0FBSyxDQUFDTCxrQkFBa0IsRUFBRUssS0FBSyxDQUFDSixXQUFXLENBQUM7UUFBQztNQUFBO01BQUE7UUFFekQsT0FBT0osT0FBTztNQUFDLEtBQVJBLE9BQU87SUFDZixDQUFDO01BQUE7SUFBQTtFQUFBO0VBRUQxTCxrQkFBa0IsQ0FBQ21NLDRCQUE0QixhQUM5Q0MsS0FBVSxFQUNWcEUsY0FBdUIsRUFDdkJDLFdBQXFCLEVBQ3JCb0UsVUFBZSxFQUNmQyxlQUFvQixFQUNwQnZGLFNBQWMsRUFDZHdGLFFBQWEsRUFDYkMsYUFBcUIsRUFDckJDLGtCQUFvQyxFQUNwQ0MsbUJBQXNDO0lBQUEsSUFDdkI7TUFDZix1QkFBT0osZUFBZSxDQUFDSyxpQkFBaUIsQ0FBQ04sVUFBVSxDQUFDNUYsT0FBTyxFQUFFLENBQUMsQ0FBQ2xJLElBQUksV0FBaUJxTyxLQUFVO1FBQUEsSUFBRTtVQUFBO1lBa0IvRixJQUFNQyxhQUFhLEdBQUc7Y0FDckJqTixNQUFNLEVBQUU7Z0JBQ1A2SyxjQUFjLEVBQUVxQyxVQUFVLENBQUNyQyxjQUFjO2dCQUN6Q3NDLE1BQU0sRUFBRUQsVUFBVSxDQUFDQztjQUNwQixDQUFDO2NBQ0R6QixNQUFNLEVBQUUwQixVQUFVO2NBQ2xCQyxXQUFXLEVBQUVUO1lBQ2QsQ0FBQztZQUNELE9BQU9LLGFBQWEsQ0FBQ3ZCLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQztZQUM3Q2UsVUFBVSxDQUFDYSxPQUFPLFlBQUtaLGVBQWUsQ0FBQ2Esa0JBQWtCLENBQUNOLGFBQWEsQ0FBQyxFQUFHO1lBQzNFOUYsU0FBUyxDQUFDcUcsY0FBYyxDQUFDck4sSUFBSSxDQUFDc00sVUFBVSxDQUFDNUYsT0FBTyxFQUFFLENBQUM7WUFDbkQ7WUFDQSxPQUFPekcsa0JBQWtCLENBQUM4SCwyQkFBMkIsQ0FBQ2hKLElBQUksQ0FBQ3NOLEtBQUssQ0FBQyxDQUFDLENBQUNDLFVBQVUsQ0FBQyxFQUFFckUsY0FBYyxFQUFFQyxXQUFXLENBQUM7VUFBQztVQTdCN0csSUFBTTZFLFVBQVUsR0FBR1IsZUFBZSxDQUFDZSxjQUFjLENBQUNULEtBQUssQ0FBQztVQUN4RCxJQUFNdEIsTUFBTSxHQUFHckwsTUFBTSxDQUFDQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUVxTSxRQUFRLENBQUM7VUFDMUMsNEJBSUl2TSxrQkFBa0IsQ0FBQzhKLGtCQUFrQixDQUFDZ0QsVUFBVSxDQUFDckMsY0FBYyxFQUFFYSxNQUFNLEVBQUV2RSxTQUFTLENBQUN1RyxzQkFBc0IsRUFBRWIsa0JBQWtCLENBQUM7WUFIekhPLFVBQVUseUJBQWxCMUIsTUFBTTtZQUNOcEIsVUFBVSx5QkFBVkEsVUFBVTtZQUNRcUQsbUJBQW1CLHlCQUFyQ2hDLGdCQUFnQjtVQUNrSDtZQUFBLElBQy9IckIsVUFBVTtjQUFBLHVCQUNTbEssa0JBQWtCLENBQUN3TCwrQkFBK0IsQ0FDdkVZLEtBQUssRUFDTE0sbUJBQW1CLEVBQ25CYSxtQkFBbUIsRUFDbkJULFVBQVUsQ0FBQ3JDLGNBQWMsQ0FDekIsaUJBTEtpQixPQUFPO2dCQU9iYyxhQUFhLEdBQUdkLE9BQU8sQ0FBQyxDQUFDLENBQUM7Y0FBQztZQUFBO1VBQUE7VUFBQTtRQWU3QixDQUFDO1VBQUE7UUFBQTtNQUFBLEVBQUM7SUFDSCxDQUFDO01BQUE7SUFBQTtFQUFBO0VBQ0QxTCxrQkFBa0IsQ0FBQ3dOLG9CQUFvQixHQUFHLFVBQVV0SCxVQUFlLEVBQVM7SUFDM0UsT0FBT0EsVUFBVSxDQUFDMkMsTUFBTSxDQUFDLFVBQUNyRCxRQUFhLEVBQUs7TUFDM0MsT0FBT0EsUUFBUSxLQUFLdkUsU0FBUztJQUM5QixDQUFDLENBQUM7RUFDSCxDQUFDO0VBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0VBQ0FqQixrQkFBa0IsQ0FBQ3lOLGVBQWUsYUFBbUI1TSxRQUFhLEVBQUV1RCxlQUF3QixFQUFFOEIsVUFBZTtJQUFBLElBQUU7TUFBQSxhQUs3RyxJQUFJO01BQUEsdUJBSmdDd0gsV0FBVyxDQUFDQyxtQkFBbUIsQ0FBQzlNLFFBQVEsRUFBRSxJQUFJLENBQUM7UUFBcEYsSUFBTStNLHFCQUFxQix3QkFBaUU7UUFDNUYsSUFBTUMsVUFBVSxHQUFHRCxxQkFBcUIsQ0FBQ0UsU0FBUztRQUNsRCxJQUFNQyxhQUFzQixHQUFHSCxxQkFBcUIsQ0FBQ0ksWUFBWTtRQUFDLElBQzlEOUgsVUFBVSxDQUFDdkcsTUFBTSxLQUFLLENBQUM7VUFDMUIsT0FBS21DLE9BQU8sR0FBR2pCLFFBQVE7VUFDdkIsSUFBTWdHLEtBQUssR0FBR1gsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDdEIsU0FBUyxFQUFFO1VBQ3ZDLElBQU13RSxLQUFLLEdBQUc2RSxXQUFXLENBQUNDLGFBQWEsQ0FBQ3JILEtBQUssQ0FBQztVQUM5QyxJQUFNc0gsYUFBYSxHQUFHRixXQUFXLENBQUNHLGVBQWUsQ0FBQ2hGLEtBQUssQ0FBQztVQUN4RCxJQUFNaUYsY0FBYyxHQUFHRixhQUFhLENBQUNHLGdCQUFnQixFQUFFO1VBQ3ZELElBQUksQ0FBQ0QsY0FBYyxDQUFDRSxTQUFTLEVBQUUsRUFBRTtZQUNoQzNHLEdBQUcsQ0FBQ0MsS0FBSyxDQUFDLHVEQUF1RCxDQUFDO1lBQ2xFLE9BQU81RSxPQUFPLENBQUN4RCxNQUFNLEVBQUU7VUFDeEI7VUFDQSxJQUFNcUIsVUFBVSxHQUFHc0ksS0FBSyxDQUFDakgsUUFBUSxFQUFFLENBQUNxQyxZQUFZLEVBQW9CO1VBQ3BFLElBQUk2RSxZQUFZLEdBQUd4QyxLQUFLLENBQUN2QyxpQkFBaUIsRUFBRTtVQUM1QyxJQUFNa0ssV0FBZ0IsR0FBRztZQUN4Qi9ELGNBQWMsRUFBRTVKLFFBQVEsQ0FBQzROLGtCQUFrQjtZQUMzQzFCLE1BQU0sRUFBRTtVQUNULENBQUM7VUFBQywwQkFFRTtZQUFBO2NBeUJILElBQU10RCxrQkFBa0IsR0FBRzBFLGFBQWEsQ0FBQ08sb0JBQW9CLEVBQUU7Y0FDL0QsSUFBTUMsV0FBVyxHQUFHdkYsS0FBSyxDQUFDd0YsYUFBYSxFQUFvQjtjQUMzRCxJQUFJcEYsaUJBQWlCO2NBQ3JCLElBQUlxRixnQkFBZ0I7Y0FDcEJ4RixZQUFZLEdBQUdySixrQkFBa0IsQ0FBQ21KLGVBQWUsQ0FBQ0MsS0FBSyxFQUFFQyxZQUFZLENBQUM7Y0FDdEUsSUFBTXlGLFNBQVMsR0FBR2hPLFVBQVUsQ0FBQ2lPLFdBQVcsQ0FBQzFGLFlBQVksQ0FBQzJGLE9BQU8sRUFBRSxDQUFDO2NBQ2hFSCxnQkFBZ0IsR0FBR0YsV0FBVyxDQUFDTSxzQkFBc0IsQ0FBQ0MsbUJBQW1CLENBQUM3RixZQUFZLENBQUNuRSxTQUFTLEVBQUUsRUFBRTRKLFNBQVMsQ0FBQztjQUM5R0QsZ0JBQWdCLEdBQUdGLFdBQVcsQ0FBQ00sc0JBQXNCLENBQUNFLG1DQUFtQyxDQUFDTixnQkFBZ0IsRUFBRXhGLFlBQVksQ0FBQztjQUN6SEcsaUJBQWlCLEdBQUdDLGtCQUFrQixDQUFDMkYsZ0NBQWdDLENBQ3RFUCxnQkFBZ0IsQ0FBQ2hELGtCQUFrQixFQUNuQyxJQUFJekIsZ0JBQWdCLEVBQUUsQ0FDRjtjQUNyQm9FLFdBQVcsQ0FBQ2EseUJBQXlCLEdBQUdSLGdCQUFnQixDQUFDUSx5QkFBeUI7Y0FDbEY7Y0FDQVYsV0FBVyxDQUFDVyxxQkFBcUIsQ0FBQ0Msc0JBQXNCLENBQUMvRixpQkFBaUIsRUFBRWdGLFdBQVcsQ0FBQztjQUN4RnhPLGtCQUFrQixDQUFDd1AsMEJBQTBCLENBQUNoRyxpQkFBaUIsQ0FBQztjQUNoRUEsaUJBQWlCLEdBQUd4SixrQkFBa0IsQ0FBQ3VKLHVDQUF1QyxDQUFDSCxLQUFLLEVBQUVJLGlCQUFpQixFQUFFQyxrQkFBa0IsQ0FBQztjQUFDLHVCQUN2R3pKLGtCQUFrQixDQUFDd0wsK0JBQStCLFNBQU8vQixrQkFBa0IsRUFBRUQsaUJBQWlCLEVBQUUsRUFBRSxDQUFDLGlCQUFuSGtDLE9BQU87Z0JBQUE7a0JBdUJiLE9BQU8xTCxrQkFBa0IsQ0FBQ3dOLG9CQUFvQixDQUFDdEgsVUFBVSxDQUFDO2dCQUFDO2dCQXRCM0QsSUFBTThELE9BQU8sR0FBRzBCLE9BQU8sQ0FBQyxDQUFDLENBQUM7Z0JBQzFCLElBQU11QixXQUFXLEdBQUd2QixPQUFPLENBQUMsQ0FBQyxDQUFDO2dCQUM5QixJQUFJK0QsbUJBQXdCO2dCQUM1QjVPLFFBQVEsQ0FBQ3VNLGNBQWMsR0FBRyxFQUFFO2dCQUM1QmxILFVBQVUsR0FBR2xHLGtCQUFrQixDQUFDd04sb0JBQW9CLENBQUN0SCxVQUFVLENBQUM7Z0JBQUMscUJBQzdDQSxVQUFVLFlBQW5Cd0osS0FBSyxFQUFnQjtrQkFBQSx1QkFDSDFQLGtCQUFrQixDQUFDbU0sNEJBQTRCLFNBRTFFNEIsYUFBYSxFQUNiRixVQUFVLEVBQ1YzSCxVQUFVLENBQUN3SixLQUFLLENBQUMsRUFDakJyQixjQUFjLEVBQ2R4TixRQUFRLEVBQ1JtSixPQUFPLEVBQ1BpRCxXQUFXLEVBQ1h6RCxpQkFBaUIsRUFDakJDLGtCQUFrQixDQUNsQjtvQkFYRGdHLG1CQUFtQix5QkFXbEI7b0JBQUMsSUFDRUEsbUJBQW1CLEtBQUssSUFBSTtzQkFDL0J2SixVQUFVLENBQUN3SixLQUFLLENBQUMsR0FBR3pPLFNBQVM7b0JBQUM7a0JBQUE7Z0JBRWhDLENBQUM7Z0JBQUE7Y0FBQTtZQUFBO1lBL0RELElBQU04SCxrQkFBa0IsR0FDdkJsQyxLQUFLLElBQ0wsT0FBS25DLG9CQUFvQixDQUFDbUMsS0FBSyxDQUFDLENBQUN0QixHQUFHLENBQUMsVUFBVUMsUUFBYSxFQUFFO2NBQzdELE9BQU9BLFFBQVEsQ0FBQ0MsV0FBVyxDQUFDL0csS0FBSztZQUNsQyxDQUFDLENBQUM7WUFDSDtZQUFBO2NBQUEsSUFDSXNCLGtCQUFrQixDQUFDOEksd0JBQXdCLENBQUNDLGtCQUFrQixTQUFPO2dCQUN4RTtnQkFDQSxJQUFNckQsMkJBQTJCLEdBQUcxRixrQkFBa0IsQ0FBQzJGLDRCQUE0QixDQUNsRnZCLGVBQWUsQ0FBQ2MsU0FBUyxFQUFFLEVBQzNCckUsUUFBUSxFQUNSSSxTQUFTLEVBQ1QsT0FBS29FLEtBQUssQ0FDVjtnQkFDRCxJQUFNTyxtQkFBbUIsR0FBR0YsMkJBQTJCLENBQUNHLE9BQU87Z0JBQy9ELElBQU1DLGdCQUFnQixHQUFHSiwyQkFBMkIsQ0FBQzVELE9BQU87Z0JBQUMsdUJBQzFDOUIsa0JBQWtCLENBQUMrRiwwQkFBMEIsQ0FDL0QsRUFBRSxFQUNGSCxtQkFBbUIsRUFDbkJFLGdCQUFnQixFQUNoQjdFLFNBQVMsRUFDVCxPQUFLb0UsS0FBSyxDQUNWO2tCQU5EYSxVQUFVLHlCQU1UO2dCQUFDO2NBQUE7WUFBQTtZQUFBO1VBMkNKLENBQUMsWUFBUXlCLE1BQVcsRUFBRTtZQUNyQkMsR0FBRyxDQUFDQyxLQUFLLENBQUMsNENBQTRDLEVBQUVGLE1BQU0sQ0FBQztZQUMvRCxPQUFPMUcsU0FBUztVQUNqQixDQUFDO1FBQUE7VUFFRCxPQUFPaUYsVUFBVTtRQUFDO01BQUE7SUFFcEIsQ0FBQztNQUFBO0lBQUE7RUFBQTtFQUNEbEcsa0JBQWtCLENBQUMyUCx3QkFBd0IsR0FBRyxVQUFVOU8sUUFBYSxFQUFFK08sTUFBVyxFQUFFO0lBQ25GLElBQU1DLE9BQU8sR0FBR0QsTUFBTSxDQUFDRSxTQUFTLEVBQUU7TUFDakNDLEtBQUssR0FBR0gsTUFBTSxDQUFDSSxZQUFZLENBQUMsTUFBTSxDQUFDO01BQ25DQyxXQUFXLEdBQUdDLE9BQU8sQ0FBQ0MsVUFBVSxDQUFDLFlBQVksQ0FBQztNQUM5Q0MsS0FBSyxHQUFHTCxLQUFLLElBQUlFLFdBQVcsQ0FBQzVDLGNBQWMsQ0FBQzBDLEtBQUssQ0FBQztJQUVuRE0sZUFBZSxDQUFDQyxrQ0FBa0MsQ0FBQ1QsT0FBTyxFQUFFTyxLQUFLLENBQUM7SUFFbEUsT0FBT25OLE9BQU8sQ0FBQ0MsT0FBTyxDQUFDLElBQUksQ0FBQztFQUM3QixDQUFDO0VBQ0RsRCxrQkFBa0IsQ0FBQ3dQLDBCQUEwQixHQUFHLFVBQVVoRyxpQkFBc0IsRUFBRTtJQUNqRkEsaUJBQWlCLENBQUN5QixrQkFBa0IsQ0FBQyxnQkFBZ0IsQ0FBQztJQUN0RHpCLGlCQUFpQixDQUFDeUIsa0JBQWtCLENBQUMscUJBQXFCLENBQUM7SUFDM0R6QixpQkFBaUIsQ0FBQ3lCLGtCQUFrQixDQUFDLGVBQWUsQ0FBQztFQUN0RCxDQUFDO0VBRURqTCxrQkFBa0IsQ0FBQ3VRLGlDQUFpQyxHQUFHLFVBQVVqTCxlQUFvQixFQUFFa0wsd0JBQTZCLEVBQVE7SUFDM0gsSUFBSUMsYUFBcUIsRUFBRUMsZ0JBQXdCO0lBQ25ELEtBQUssSUFBSUMsZ0JBQWdCLEdBQUcsQ0FBQyxFQUFFQSxnQkFBZ0IsR0FBR3JMLGVBQWUsQ0FBQzNGLE1BQU0sRUFBRWdSLGdCQUFnQixFQUFFLEVBQUU7TUFDN0ZGLGFBQWEsR0FBR25MLGVBQWUsQ0FBQ3FMLGdCQUFnQixDQUFDLENBQUNDLE1BQU0sRUFBRTtNQUMxREYsZ0JBQWdCLEdBQUdwTCxlQUFlLENBQUNxTCxnQkFBZ0IsQ0FBQyxDQUFDRSxRQUFRLEVBQUU7TUFDL0RMLHdCQUF3QixDQUFDQyxhQUFhLENBQUMsR0FBRztRQUFFL1IsS0FBSyxFQUFFZ1M7TUFBaUIsQ0FBQztJQUN0RTtFQUNELENBQUM7O0VBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7RUFDQTFRLGtCQUFrQixDQUFDOFEsY0FBYyxHQUFHLFVBQVVDLFdBQW1CLEVBQVc7SUFDM0UsSUFBSUEsV0FBVyxJQUFJQSxXQUFXLENBQUNDLE9BQU8sQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLElBQUlELFdBQVcsQ0FBQ0MsT0FBTyxDQUFDLEdBQUcsQ0FBQyxLQUFLRCxXQUFXLENBQUNwUixNQUFNLEdBQUcsQ0FBQyxFQUFFO01BQ3pHLE9BQU8sSUFBSTtJQUNaLENBQUMsTUFBTTtNQUNOLE9BQU8sS0FBSztJQUNiO0VBQ0QsQ0FBQzs7RUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0VBQ0FLLGtCQUFrQixDQUFDaVIsNkNBQTZDLEdBQUcsVUFDbEVuUCxPQUEwQixFQUMxQm9QLFVBQTZCLEVBQzdCQyxrQkFBMEIsRUFDbkI7SUFBQTtJQUNQLElBQUluUixrQkFBa0IsQ0FBQzhRLGNBQWMsQ0FBQ2hQLE9BQU8sQ0FBQzJNLGtCQUFrQixDQUFDLEVBQUU7TUFDbEUsSUFBSTBDLGtCQUFrQixFQUFFO1FBQ3ZCRCxVQUFVLENBQUN6QyxrQkFBa0IsR0FBRzBDLGtCQUFrQjtNQUNuRCxDQUFDLE1BQU07UUFDTjtRQUNBRCxVQUFVLENBQUN6QyxrQkFBa0IsR0FBR3hOLFNBQVM7TUFDMUM7SUFDRDtJQUNBLFFBQVEsT0FBT2tRLGtCQUFrQjtNQUNoQyxLQUFLLFFBQVE7UUFDWix5QkFBQUQsVUFBVSxDQUFDRSx1QkFBdUIsMERBQWxDLHNCQUFvQ3JSLElBQUksQ0FBQ29SLGtCQUFrQixDQUFDO1FBQzVERCxVQUFVLENBQUMzSixlQUFlLENBQUN4SCxJQUFJLENBQUNvUixrQkFBa0IsQ0FBQztRQUNuRDtNQUNELEtBQUssUUFBUTtRQUNaLEtBQUssSUFBTUUsQ0FBQyxJQUFJRixrQkFBa0IsRUFBYztVQUFBO1VBQy9DLDBCQUFBRCxVQUFVLENBQUNFLHVCQUF1QiwyREFBbEMsdUJBQW9DclIsSUFBSSxDQUFDb1Isa0JBQWtCLENBQUNFLENBQUMsQ0FBQyxDQUFDO1VBQy9ESCxVQUFVLENBQUMzSixlQUFlLENBQUN4SCxJQUFJLENBQUNvUixrQkFBa0IsQ0FBQ0UsQ0FBQyxDQUFDLENBQUM7UUFDdkQ7UUFDQTtNQUNEO0lBQVE7RUFFVixDQUFDO0VBRURyUixrQkFBa0IsQ0FBQ3NSLG1EQUFtRCxHQUFHLFVBQ3hFeFAsT0FBMEIsRUFDMUJzUCx1QkFBNEIsRUFDNUJGLFVBQTZCLEVBQ3RCO0lBQ1AsSUFBSUMsa0JBQTBCLEVBQUVJLGVBQXVCO0lBQ3ZELEtBQUssSUFBTS9SLENBQUMsSUFBSXNDLE9BQU8sQ0FBQ3lGLGVBQWUsRUFBRTtNQUN4QzRKLGtCQUFrQixHQUFHclAsT0FBTyxDQUFDeUYsZUFBZSxDQUFDL0gsQ0FBQyxDQUFDO01BQy9DLElBQUlRLGtCQUFrQixDQUFDOFEsY0FBYyxDQUFDSyxrQkFBa0IsQ0FBQyxFQUFFO1FBQzFESSxlQUFlLEdBQUdKLGtCQUFrQixDQUFDSyxNQUFNLENBQUMsQ0FBQyxFQUFFTCxrQkFBa0IsQ0FBQ0gsT0FBTyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNuRkcsa0JBQWtCLEdBQUdDLHVCQUF1QixDQUFDRyxlQUFlLENBQUMsQ0FBQzdTLEtBQUs7UUFDbkVzQixrQkFBa0IsQ0FBQ2lSLDZDQUE2QyxDQUFDblAsT0FBTyxFQUFFb1AsVUFBVSxFQUFFQyxrQkFBa0IsQ0FBQztNQUMxRyxDQUFDLE1BQU07UUFDTkQsVUFBVSxDQUFDM0osZUFBZSxDQUFDeEgsSUFBSSxDQUFDb1Isa0JBQWtCLENBQUM7TUFDcEQ7SUFDRDtFQUNELENBQUM7O0VBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtFQUNBblIsa0JBQWtCLENBQUN5UixpQ0FBaUMsR0FBRyxVQUN0REMsVUFBNkIsRUFDN0JDLDRDQUErRCxFQUMvRFQsVUFBNkIsRUFDdEI7SUFDUDtJQUNBUyw0Q0FBNEMsQ0FBQ3JFLHNCQUFzQixDQUFDaEQsT0FBTyxDQUFDLFVBQzNFc0gscUJBQXNELEVBQ3JEO01BQ0QsSUFBSUEscUJBQXFCLENBQUNuSCxjQUFjLElBQUl6SyxrQkFBa0IsQ0FBQzhRLGNBQWMsQ0FBQ2MscUJBQXFCLENBQUNuSCxjQUFjLENBQUMsRUFBRTtRQUNwSG1ILHFCQUFxQixDQUFDbkgsY0FBYyxHQUNuQ3lHLFVBQVUsQ0FBQzNKLGVBQWUsQ0FBQ21LLFVBQVUsQ0FBQ25LLGVBQWUsQ0FBQ3lKLE9BQU8sQ0FBQ1kscUJBQXFCLENBQUNuSCxjQUFjLENBQUMsQ0FBQztNQUN0RztJQUNELENBQUMsQ0FBQztFQUNILENBQUM7O0VBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtFQUNBekssa0JBQWtCLENBQUM2Uix3Q0FBd0MsR0FBRyxVQUM3REgsVUFBNkIsRUFDN0JJLDBDQUFzRixFQUN0RkgsNENBQStELEVBQ3hEO0lBQ1AsSUFBSUksTUFBVztJQUNmRCwwQ0FBMEMsQ0FBQ3hILE9BQU8sQ0FBQyxVQUFVMEgsK0JBQW9DLEVBQUU7TUFDbEc7TUFDQSxJQUNDQSwrQkFBK0IsYUFBL0JBLCtCQUErQixlQUEvQkEsK0JBQStCLENBQUV2SCxjQUFjLElBQy9Dekssa0JBQWtCLENBQUM4USxjQUFjLENBQUNrQiwrQkFBK0IsQ0FBQ3ZILGNBQWMsQ0FBQyxFQUNoRjtRQUNEc0gsTUFBTSxHQUFHTCxVQUFVLENBQUNuSyxlQUFlLENBQUMwSyxTQUFTLENBQUMsVUFBVXhILGNBQXNCLEVBQUU7VUFDL0UsT0FBT0EsY0FBYyxLQUFLdUgsK0JBQStCLENBQUN2SCxjQUFjO1FBQ3pFLENBQUMsQ0FBQztRQUNGLElBQUlzSCxNQUFNLEtBQUs5USxTQUFTLEVBQUU7VUFDekI7VUFDQStRLCtCQUErQixDQUFDdkgsY0FBYyxHQUFHa0gsNENBQTRDLENBQUNwSyxlQUFlLENBQUN3SyxNQUFNLENBQUM7UUFDdEg7TUFDRDtJQUNELENBQUMsQ0FBQztFQUNILENBQUM7O0VBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7RUFDQS9SLGtCQUFrQixDQUFDa1MsdUNBQXVDLEdBQUcsVUFDNURSLFVBQTZCLEVBQzdCQyw0Q0FBK0QsRUFDeEQ7SUFDUCxLQUFLLElBQUlRLHVCQUF1QixHQUFHLENBQUMsRUFBRUEsdUJBQXVCLEdBQUdULFVBQVUsQ0FBQ25LLGVBQWUsQ0FBQzVILE1BQU0sRUFBRXdTLHVCQUF1QixFQUFFLEVBQUU7TUFDN0gsSUFDQ1IsNENBQTRDLENBQUNsRCxrQkFBa0IsTUFDOURpRCxVQUFVLENBQUNOLHVCQUF1QixJQUFJTSxVQUFVLENBQUNOLHVCQUF1QixDQUFDZSx1QkFBdUIsQ0FBQyxDQUFDLEVBQ2xHO1FBQ0RSLDRDQUE0QyxDQUFDbEQsa0JBQWtCLEdBQUdpRCxVQUFVLENBQUNuSyxlQUFlLENBQUM0Syx1QkFBdUIsQ0FBQztNQUN0SDtNQUNBLElBQUlSLDRDQUE0QyxDQUFDcEssZUFBZSxDQUFDNEssdUJBQXVCLENBQUMsRUFBRTtRQUMxRlIsNENBQTRDLENBQUNwSyxlQUFlLENBQUM0Syx1QkFBdUIsQ0FBQyxHQUNwRlQsVUFBVSxDQUFDbkssZUFBZSxDQUFDNEssdUJBQXVCLENBQUM7TUFDckQsQ0FBQyxNQUFNO1FBQ047UUFDQVIsNENBQTRDLENBQUNwSyxlQUFlLENBQUM2SyxNQUFNLENBQUNELHVCQUF1QixFQUFFLENBQUMsQ0FBQztNQUNoRztJQUNEO0VBQ0QsQ0FBQzs7RUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7RUFDQW5TLGtCQUFrQixDQUFDcVMsbUNBQW1DLEdBQUcsVUFBVVYsNENBQStELEVBQVE7SUFDekk7SUFDQSxLQUNDLElBQUlXLGFBQWEsR0FBRyxDQUFDLEVBQ3JCQSxhQUFhLEdBQUdYLDRDQUE0QyxDQUFDckUsc0JBQXNCLENBQUMzTixNQUFNLEVBQzFGMlMsYUFBYSxFQUFFLEVBQ2Q7TUFDRCxJQUNDWCw0Q0FBNEMsQ0FBQ3JFLHNCQUFzQixDQUFDZ0YsYUFBYSxDQUFDLElBQ2xGWCw0Q0FBNEMsQ0FBQ3JFLHNCQUFzQixDQUFDZ0YsYUFBYSxDQUFDLENBQUM3SCxjQUFjLEtBQUt4SixTQUFTLEVBQzlHO1FBQ0QwUSw0Q0FBNEMsQ0FBQ3JFLHNCQUFzQixDQUFDOEUsTUFBTSxDQUFDRSxhQUFhLEVBQUUsQ0FBQyxDQUFDO01BQzdGO0lBQ0Q7RUFDRCxDQUFDO0VBRUR0UyxrQkFBa0IsQ0FBQ3VTLDZDQUE2QyxHQUFHLFVBQ2xFelEsT0FBWSxFQUNab1AsVUFBNkIsRUFDVDtJQUNwQixJQUFJc0IsMENBQTZEO0lBQ2pFLElBQUl0QixVQUFVLENBQUNFLHVCQUF1QixJQUFJRixVQUFVLENBQUNFLHVCQUF1QixDQUFDelIsTUFBTSxHQUFHLENBQUMsRUFBRTtNQUN4RjZTLDBDQUEwQyxHQUFHO1FBQzVDeFIsVUFBVSxFQUFFYyxPQUFPLENBQUNkLFVBQVU7UUFDOUJLLFNBQVMsRUFBRVMsT0FBTyxDQUFDVCxTQUFTO1FBQzVCRSxPQUFPLEVBQUVPLE9BQU8sQ0FBQ1AsT0FBTztRQUN4QmtOLGtCQUFrQixFQUFFM00sT0FBTyxDQUFDMk0sa0JBQWtCO1FBQzlDdkssY0FBYyxFQUFFcEMsT0FBTyxDQUFDb0MsY0FBYztRQUN0Q3VPLGlCQUFpQixFQUFFM1EsT0FBTyxDQUFDMlEsaUJBQWlCO1FBQzVDbkYsc0JBQXNCLEVBQUVvRixTQUFTLENBQUM1USxPQUFPLENBQUN3TCxzQkFBc0IsQ0FBQztRQUNqRS9GLGVBQWUsRUFBRTJKLFVBQVUsQ0FBQzNKO01BQzdCLENBQUM7TUFDRHZILGtCQUFrQixDQUFDeVIsaUNBQWlDLENBQUMzUCxPQUFPLEVBQUUwUSwwQ0FBMEMsRUFBRXRCLFVBQVUsQ0FBQztNQUNySCxJQUFNeUIsaUNBQTZFLEdBQUdELFNBQVMsQ0FDOUY1USxPQUFPLENBQUM4USxnQ0FBZ0MsQ0FDeEM7TUFDRDVTLGtCQUFrQixDQUFDNlIsd0NBQXdDLENBQzFEL1AsT0FBTyxFQUNQNlEsaUNBQWlDLEVBQ2pDSCwwQ0FBMEMsQ0FDMUM7TUFDREEsMENBQTBDLENBQUNJLGdDQUFnQyxHQUFHRCxpQ0FBaUM7TUFDL0csSUFBSXpCLFVBQVUsQ0FBQ3pDLGtCQUFrQixFQUFFO1FBQ2xDK0QsMENBQTBDLENBQUMvRCxrQkFBa0IsR0FBR3lDLFVBQVUsQ0FBQ3pDLGtCQUFrQjtNQUM5RixDQUFDLE1BQU07UUFDTitELDBDQUEwQyxDQUFDL0Qsa0JBQWtCLEdBQUd4TixTQUFTO01BQzFFO01BQ0FqQixrQkFBa0IsQ0FBQ2tTLHVDQUF1QyxDQUFDaEIsVUFBVSxFQUFFc0IsMENBQTBDLENBQUM7TUFDbEh4UyxrQkFBa0IsQ0FBQ3FTLG1DQUFtQyxDQUFDRywwQ0FBMEMsQ0FBQztNQUNsRyxPQUFPQSwwQ0FBMEM7SUFDbEQsQ0FBQyxNQUFNO01BQ04sT0FBTyxDQUFDLENBQUM7SUFDVjtFQUNELENBQUM7RUFFRHhTLGtCQUFrQixDQUFDNlMsNkNBQTZDLEdBQUcsVUFBVS9RLE9BQVksRUFBRWdSLGNBQW1CLEVBQU87SUFDcEgsSUFBSU4sMENBQStDO0lBQ25ELElBQU1oQyx3QkFBNkIsR0FBRyxDQUFDLENBQUM7SUFDeEMsSUFBTVUsVUFBNkIsR0FBRztNQUFFM0osZUFBZSxFQUFFLEVBQUU7TUFBRTZKLHVCQUF1QixFQUFFLEVBQUU7TUFBRTlELHNCQUFzQixFQUFFO0lBQUcsQ0FBQztJQUN0SCxJQUFJeEwsT0FBTyxDQUFDeUYsZUFBZSxFQUFFO01BQzVCO01BQ0EsSUFBSXVMLGNBQWMsSUFBSUEsY0FBYyxDQUFDblQsTUFBTSxHQUFHLENBQUMsRUFBRTtRQUNoREssa0JBQWtCLENBQUN1USxpQ0FBaUMsQ0FBQ3VDLGNBQWMsRUFBRXRDLHdCQUF3QixDQUFDO1FBQzlGeFEsa0JBQWtCLENBQUNzUixtREFBbUQsQ0FBQ3hQLE9BQU8sRUFBRTBPLHdCQUF3QixFQUFFVSxVQUFVLENBQUM7UUFDckhzQiwwQ0FBMEMsR0FBR3hTLGtCQUFrQixDQUFDdVMsNkNBQTZDLENBQzVHelEsT0FBTyxFQUNQb1AsVUFBVSxDQUNWO1FBQ0QsT0FBT3NCLDBDQUEwQztNQUNsRDtJQUNELENBQUMsTUFBTTtNQUNOLE9BQU92UixTQUFTO0lBQ2pCO0VBQ0QsQ0FBQztFQUVEakIsa0JBQWtCLENBQUMrUyxvQ0FBb0MsR0FBRyxVQUN6REMsZ0JBQXFCLEVBQ3JCak8sUUFBYSxFQUNiRSxjQUFtQixFQUNuQmdPLFFBQWEsRUFDYkMsdUJBQTRCLEVBQ3JCO0lBQ1BGLGdCQUFnQixDQUFDMUksT0FBTyxDQUFDLFVBQVVQLGVBQW9CLEVBQUU7TUFDeEQsSUFBSWhGLFFBQVEsRUFBRTtRQUNiQSxRQUFRLENBQUNvTyxnQkFBZ0IsQ0FBQ3BKLGVBQWUsRUFBRTlFLGNBQWMsQ0FBQztNQUMzRDtNQUNBZ08sUUFBUSxDQUFDbEosZUFBZSxDQUFDLEdBQUcsQ0FBQyxDQUFDO01BQzlCLEtBQUssSUFBTXFKLGNBQWMsSUFBSW5PLGNBQWMsRUFBRTtRQUM1QyxJQUFJb08sVUFBVSxHQUFHLElBQUk7VUFDcEJDLHlCQUF5QixHQUFHLElBQUk7UUFDakMsSUFBSXZPLFFBQVEsRUFBRTtVQUNic08sVUFBVSxHQUFHdE8sUUFBUSxDQUFDd08sMEJBQTBCLENBQUN4SixlQUFlLEVBQUVxSixjQUFjLENBQUM7VUFDakYsSUFBSSxDQUFDQyxVQUFVLEVBQUU7WUFDaEJBLFVBQVUsR0FBR3RPLFFBQVEsQ0FBQ3lPLHdCQUF3QixFQUFFO1lBQ2hEek8sUUFBUSxDQUFDME8sMEJBQTBCLENBQUMxSixlQUFlLEVBQUVxSixjQUFjLEVBQUVDLFVBQVUsQ0FBQztVQUNqRjtRQUNEO1FBQ0E7UUFDQSxJQUFJcE8sY0FBYyxDQUFDbU8sY0FBYyxDQUFDLEtBQUtuUyxTQUFTLElBQUlnRSxjQUFjLENBQUNtTyxjQUFjLENBQUMsS0FBSyxJQUFJLEVBQUU7VUFDNUYsSUFBSUMsVUFBVSxFQUFFO1lBQ2ZBLFVBQVUsQ0FBQ0ssZUFBZSxDQUFDM1QsSUFBSSxDQUFDO2NBQy9CckIsS0FBSyxFQUFFdUMsU0FBUztjQUNoQjBTLFdBQVcsRUFBRTtZQUNkLENBQUMsQ0FBQztVQUNIO1VBQ0E7UUFDRDtRQUNBO1FBQ0EsSUFBSUMsYUFBYSxDQUFDM08sY0FBYyxDQUFDbU8sY0FBYyxDQUFDLENBQUMsRUFBRTtVQUNsRCxJQUFJRix1QkFBdUIsSUFBSUEsdUJBQXVCLENBQUNuSixlQUFlLENBQUMsRUFBRTtZQUN4RSxJQUFNOEosS0FBSyxHQUFHNVQsTUFBTSxDQUFDSixJQUFJLENBQUNxVCx1QkFBdUIsQ0FBQ25KLGVBQWUsQ0FBQyxDQUFDO1lBQ25FLElBQUkrSix1QkFBdUI7Y0FBRUMsaUJBQWlCO2NBQUVDLE1BQU07Y0FBRUMsSUFBSTtZQUM1RCxLQUFLLElBQUl2RSxLQUFLLEdBQUcsQ0FBQyxFQUFFQSxLQUFLLEdBQUdtRSxLQUFLLENBQUNsVSxNQUFNLEVBQUUrUCxLQUFLLEVBQUUsRUFBRTtjQUNsRHVFLElBQUksR0FBR0osS0FBSyxDQUFDbkUsS0FBSyxDQUFDO2NBQ25CLElBQUl1RSxJQUFJLENBQUNqRCxPQUFPLENBQUNvQyxjQUFjLENBQUMsS0FBSyxDQUFDLEVBQUU7Z0JBQ3ZDVSx1QkFBdUIsR0FBR1osdUJBQXVCLENBQUNuSixlQUFlLENBQUMsQ0FBQ2tLLElBQUksQ0FBQztnQkFDeEVGLGlCQUFpQixHQUFHRSxJQUFJLENBQUN4TCxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUN3TCxJQUFJLENBQUN4TCxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM5SSxNQUFNLEdBQUcsQ0FBQyxDQUFDO2dCQUMvRHFVLE1BQU0sR0FBRy9PLGNBQWMsQ0FBQ21PLGNBQWMsQ0FBQyxDQUFDVyxpQkFBaUIsQ0FBQztnQkFDMUQsSUFBSUQsdUJBQXVCLElBQUlDLGlCQUFpQixJQUFJQyxNQUFNLEVBQUU7a0JBQzNEZixRQUFRLENBQUNsSixlQUFlLENBQUMsQ0FBQytKLHVCQUF1QixDQUFDLEdBQUdFLE1BQU07Z0JBQzVEO2NBQ0Q7WUFDRDtVQUNEO1VBQ0EsSUFBSVgsVUFBVSxFQUFFO1lBQ2ZBLFVBQVUsQ0FBQ0ssZUFBZSxDQUFDM1QsSUFBSSxDQUFDO2NBQy9CckIsS0FBSyxFQUFFdUMsU0FBUztjQUNoQjBTLFdBQVcsRUFBRTtZQUNkLENBQUMsQ0FBQztVQUNIO1VBQ0E7UUFDRDs7UUFFQTtRQUNBO1FBQ0EsSUFBTU8sb0JBQW9CLEdBQ3pCaEIsdUJBQXVCLElBQ3ZCQSx1QkFBdUIsQ0FBQ25KLGVBQWUsQ0FBQyxJQUN4Q21KLHVCQUF1QixDQUFDbkosZUFBZSxDQUFDLENBQUNxSixjQUFjLENBQUMsR0FDckRGLHVCQUF1QixDQUFDbkosZUFBZSxDQUFDLENBQUNxSixjQUFjLENBQUMsR0FDeERBLGNBQWM7UUFFbEIsSUFBSUMsVUFBVSxJQUFJRCxjQUFjLEtBQUtjLG9CQUFvQixFQUFFO1VBQzFEWix5QkFBeUIsR0FBRztZQUMzQjVVLEtBQUssRUFBRXVDLFNBQVM7WUFDaEIwUyxXQUFXLGlDQUEwQlAsY0FBYyxrQ0FBd0JjLG9CQUFvQiw0QkFBeUI7WUFDeEhDLE1BQU0sMEhBQW1IcEssZUFBZSxvQ0FBMEJxSixjQUFjLG1DQUF5QmMsb0JBQW9CO1VBQzlOLENBQUM7UUFDRjs7UUFFQTtRQUNBO1FBQ0EsSUFBSWpCLFFBQVEsQ0FBQ2xKLGVBQWUsQ0FBQyxDQUFDbUssb0JBQW9CLENBQUMsRUFBRTtVQUNwRHRNLEdBQUcsQ0FBQ0MsS0FBSyw2Q0FDNkJ1TCxjQUFjLGtEQUF3Q2Msb0JBQW9CLDRFQUMvRztRQUNGOztRQUVBO1FBQ0FqQixRQUFRLENBQUNsSixlQUFlLENBQUMsQ0FBQ21LLG9CQUFvQixDQUFDLEdBQUdqUCxjQUFjLENBQUNtTyxjQUFjLENBQUM7UUFFaEYsSUFBSUMsVUFBVSxFQUFFO1VBQ2YsSUFBSUMseUJBQXlCLEVBQUU7WUFDOUJELFVBQVUsQ0FBQ0ssZUFBZSxDQUFDM1QsSUFBSSxDQUFDdVQseUJBQXlCLENBQUM7WUFDMUQsSUFBTWMsYUFBYSxHQUFHclAsUUFBUSxDQUFDeU8sd0JBQXdCLEVBQUU7WUFDekRZLGFBQWEsQ0FBQ1YsZUFBZSxDQUFDM1QsSUFBSSxDQUFDO2NBQ2xDckIsS0FBSyxFQUFFdUcsY0FBYyxDQUFDbU8sY0FBYyxDQUFDO2NBQ3JDTyxXQUFXLGlDQUEwQk8sb0JBQW9CLDZCQUFtQmpQLGNBQWMsQ0FBQ21PLGNBQWMsQ0FBQywyRUFBaUVBLGNBQWM7WUFDMUwsQ0FBQyxDQUFDO1lBQ0ZyTyxRQUFRLENBQUMwTywwQkFBMEIsQ0FBQzFKLGVBQWUsRUFBRW1LLG9CQUFvQixFQUFFRSxhQUFhLENBQUM7VUFDMUY7UUFDRDtNQUNEO0lBQ0QsQ0FBQyxDQUFDO0VBQ0gsQ0FBQzs7RUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtFQUNBcFUsa0JBQWtCLENBQUMyRiw0QkFBNEIsR0FBRyxVQUFVVixjQUFtQixFQUFFcEUsUUFBYSxFQUFFa0UsUUFBYSxFQUFFOEIsS0FBVSxFQUFFO0lBQzFILElBQU12QixlQUFlLEdBQUd1QixLQUFLLElBQUksSUFBSSxDQUFDbkMsb0JBQW9CLENBQUNtQyxLQUFLLENBQUM7SUFDakUsSUFBTTJMLDBDQUErQyxHQUFHeFMsa0JBQWtCLENBQUM2Uyw2Q0FBNkMsQ0FDdkhoUyxRQUFRLEVBQ1J5RSxlQUFlLENBQ2Y7SUFDRCxJQUFNUSxnQkFBZ0IsR0FBRzBNLDBDQUEwQyxHQUFHQSwwQ0FBMEMsR0FBRzNSLFFBQVE7SUFDM0gsSUFBSSxDQUFDZ0IsZUFBZSxHQUFHMlEsMENBQTBDO0lBQ2pFLElBQU1RLGdCQUFnQixHQUFHaFQsa0JBQWtCLENBQUNnRixtQkFBbUIsQ0FBQ2MsZ0JBQWdCLENBQUM7SUFDakYsSUFBTW9OLHVCQUF1QixHQUFHbFQsa0JBQWtCLENBQUNxVSw2QkFBNkIsQ0FDL0VyVSxrQkFBa0IsQ0FBQ3NVLDBCQUEwQixDQUFDeE8sZ0JBQWdCLENBQUMsQ0FDL0Q7SUFDRCxJQUFJLENBQUNrTixnQkFBZ0IsQ0FBQ3JULE1BQU0sRUFBRTtNQUM3QnFULGdCQUFnQixDQUFDalQsSUFBSSxDQUFDLEVBQUUsQ0FBQztJQUMxQjtJQUNBLElBQU1rVCxRQUFhLEdBQUcsQ0FBQyxDQUFDO0lBQ3hCalQsa0JBQWtCLENBQUMrUyxvQ0FBb0MsQ0FBQ0MsZ0JBQWdCLEVBQUVqTyxRQUFRLEVBQUVFLGNBQWMsRUFBRWdPLFFBQVEsRUFBRUMsdUJBQXVCLENBQUM7SUFDdEksT0FBTztNQUFFcFIsT0FBTyxFQUFFZ0UsZ0JBQWdCO01BQUVELE9BQU8sRUFBRW9OO0lBQVMsQ0FBQztFQUN4RCxDQUFDO0VBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0VBQ0FqVCxrQkFBa0IsQ0FBQytGLDBCQUEwQixHQUFHLFVBQy9Dd08sWUFBb0IsRUFDcEIzTyxtQkFBd0IsRUFDeEIvRSxRQUFhLEVBQ2JrRSxRQUFhLEVBQ2I4QixLQUFVLEVBQ1Q7SUFBQTtJQUNELElBQUksQ0FBQ2hHLFFBQVEsQ0FBQzBHLGVBQWUsRUFBRTtNQUM5QixPQUFPdEUsT0FBTyxDQUFDQyxPQUFPLENBQUMsRUFBRSxDQUFDO0lBQzNCO0lBQ0EsSUFBTThQLGdCQUFnQixHQUFHblMsUUFBUSxDQUFDMEcsZUFBZTtJQUNqRCxJQUFNaU4sa0JBQXVCLEdBQUc7TUFDL0JDLGFBQWEsRUFBRXhULFNBQVM7TUFDeEJ5VCxnQkFBZ0IsRUFBRTtJQUNuQixDQUFDO0lBQ0QsSUFBSUMseUJBQXlCLEdBQUcsQ0FBQztJQUNqQyxPQUFPQyxJQUFJLENBQUNDLFdBQVcsQ0FBQyxXQUFXLEVBQUU7TUFDcENDLEtBQUssRUFBRTtJQUNSLENBQUMsQ0FBQyxDQUFDdlcsSUFBSSxDQUFDLFlBQU07TUFDYixPQUFPLElBQUkwRSxPQUFPLENBQUMsVUFBQ0MsT0FBTyxFQUFLO1FBQy9CNlIsR0FBRyxDQUFDQyxFQUFFLENBQUNDLE9BQU8sQ0FBQyxDQUFDLGlCQUFpQixDQUFDLFlBQVNDLEtBQVU7VUFBQSxJQUFLO1lBQ3pELElBQU0vRyxhQUFhLEdBQUcrRyxLQUFLLENBQUNDLHlCQUF5QixDQUFDdE8sS0FBSyxLQUFLNUYsU0FBUyxHQUFHLE1BQUksQ0FBQ2UsUUFBUSxHQUFHNkUsS0FBSyxDQUFDO1lBQ2xHLElBQU13SCxjQUFjLEdBQUdGLGFBQWEsR0FBR0EsYUFBYSxDQUFDRyxnQkFBZ0IsRUFBRSxHQUFHLElBQUk7WUFDOUUsSUFBSSxDQUFDRCxjQUFjLEVBQUU7Y0FDcEI7Y0FDQTtjQUNBbkwsT0FBTyxDQUFDc1Isa0JBQWtCLENBQUNFLGdCQUFnQixFQUFFRixrQkFBa0IsQ0FBQ0MsYUFBYSxDQUFDO1lBQy9FO1lBQ0EsSUFBSSxDQUFDcEcsY0FBYyxDQUFDRSxTQUFTLEVBQUUsRUFBRTtjQUNoQzNHLEdBQUcsQ0FBQ0MsS0FBSyxDQUFDLGdHQUFnRyxDQUFDO2NBQzNHO2NBQ0E7Y0FDQTNFLE9BQU8sQ0FBQ3NSLGtCQUFrQixDQUFDRSxnQkFBZ0IsRUFBRUYsa0JBQWtCLENBQUNDLGFBQWEsQ0FBQztZQUMvRTtZQUNBLElBQU1XLE9BQU8sR0FBR3BDLGdCQUFnQixDQUFDek4sR0FBRyxDQUFDLFVBQVV3RSxlQUFvQixFQUFFO2NBQ3BFLE9BQU8sQ0FDTjtnQkFDQ1UsY0FBYyxFQUFFVixlQUFlO2dCQUMvQnVCLE1BQU0sRUFBRTFGLG1CQUFtQixHQUFHQSxtQkFBbUIsQ0FBQ21FLGVBQWUsQ0FBQyxHQUFHOUksU0FBUztnQkFDOUVnTSxXQUFXLEVBQUVzSCxZQUFZO2dCQUN6QmMsYUFBYSxFQUFFO2NBQ2hCLENBQUMsQ0FDRDtZQUNGLENBQUMsQ0FBQztZQUFDLGlDQUNDO2NBQUEsdUJBQ2tCaEgsY0FBYyxDQUFDaUgsUUFBUSxDQUFDRixPQUFPLENBQUMsaUJBQS9DcFAsTUFBTTtnQkFDWixJQUFJdVAsU0FBUyxHQUFHLEtBQUs7Z0JBQ3JCLEtBQUssSUFBSS9WLENBQUMsR0FBRyxDQUFDLEVBQUVBLENBQUMsR0FBR3dHLE1BQU0sQ0FBQ3JHLE1BQU0sRUFBRUgsQ0FBQyxFQUFFLEVBQUU7a0JBQ3ZDLEtBQUssSUFBSTZSLENBQUMsR0FBRyxDQUFDLEVBQUVBLENBQUMsR0FBR3JMLE1BQU0sQ0FBQ3hHLENBQUMsQ0FBQyxDQUFDRyxNQUFNLEVBQUUwUixDQUFDLEVBQUUsRUFBRTtvQkFDMUMsSUFBSXJMLE1BQU0sQ0FBQ3hHLENBQUMsQ0FBQyxDQUFDNlIsQ0FBQyxDQUFDLENBQUMxUixNQUFNLEdBQUcsQ0FBQyxFQUFFO3NCQUM1QjRWLFNBQVMsR0FBRyxJQUFJO3NCQUNoQjtvQkFDRDtvQkFDQSxJQUFJQSxTQUFTLEVBQUU7c0JBQ2Q7b0JBQ0Q7a0JBQ0Q7Z0JBQ0Q7Z0JBRUEsSUFBSSxDQUFDdlAsTUFBTSxJQUFJLENBQUNBLE1BQU0sQ0FBQ3JHLE1BQU0sSUFBSSxDQUFDNFYsU0FBUyxFQUFFO2tCQUM1QztrQkFDQTtrQkFDQXJTLE9BQU8sQ0FBQ3NSLGtCQUFrQixDQUFDRSxnQkFBZ0IsRUFBRUYsa0JBQWtCLENBQUNDLGFBQWEsQ0FBQztnQkFDL0U7Z0JBRUEsSUFBTWUsaUNBQWlDLEdBQUd4VixrQkFBa0IsQ0FBQ3lWLG9DQUFvQyxDQUFDNVUsUUFBUSxDQUFDO2dCQUMzRyxJQUFNNlUsbUJBQW1CLEdBQ3hCMVYsa0JBQWtCLENBQUMyVix1Q0FBdUMsQ0FBQ0gsaUNBQWlDLENBQUM7Z0JBQzlGLElBQUlJLFlBQVksR0FBR0MsWUFBWSxDQUFDQyxxQkFBcUIsQ0FBQzdILFdBQVcsQ0FBQzhILE9BQU8sRUFBRSxDQUFDO2dCQUU1RSxJQUFJSCxZQUFZLEVBQUU7a0JBQ2pCO2tCQUNBQSxZQUFZLElBQUksR0FBRztnQkFDcEI7Z0JBRUEsSUFBTUkscUJBQXFCLEdBQUcsVUFBVWpNLGVBQW9CLEVBQUVrTSxPQUFZLEVBQUU7a0JBQzNFLE9BQ0MsQ0FBQyxDQUFDUCxtQkFBbUIsSUFDckIsQ0FBQyxDQUFDQSxtQkFBbUIsQ0FBQzNMLGVBQWUsQ0FBQyxJQUN0QzJMLG1CQUFtQixDQUFDM0wsZUFBZSxDQUFDLENBQUNpSCxPQUFPLENBQUNpRixPQUFPLENBQUMsR0FBRyxDQUFDLENBQUM7Z0JBRTVELENBQUM7Z0JBQ0QsSUFBTUMsU0FBUyxHQUFHLFVBQVV2UixNQUFXLEVBQUU7a0JBQ3hDLElBQU1tSSxVQUFVLEdBQUd1QixjQUFjLENBQUNoQixjQUFjLENBQUMxSSxNQUFNLENBQUM2RCxNQUFNLENBQUM7a0JBQy9ELElBQUl3TixxQkFBcUIsQ0FBQ2xKLFVBQVUsQ0FBQ3JDLGNBQWMsRUFBRXFDLFVBQVUsQ0FBQ0MsTUFBTSxDQUFDLEVBQUU7b0JBQ3hFO2tCQUNEO2tCQUNBLElBQU1nRCxLQUFLLGNBQU8xQixjQUFjLENBQUNsQixrQkFBa0IsQ0FBQztvQkFBRXZOLE1BQU0sRUFBRTtzQkFBRXVXLFNBQVMsRUFBRXhSLE1BQU0sQ0FBQzZEO29CQUFPO2tCQUFFLENBQUMsQ0FBQyxDQUFFO2tCQUUvRixJQUFJN0QsTUFBTSxDQUFDNkQsTUFBTSxJQUFJN0QsTUFBTSxDQUFDNkQsTUFBTSxDQUFDd0ksT0FBTyxDQUFDNEUsWUFBWSxDQUFDLEtBQUssQ0FBQyxFQUFFO29CQUMvRDtvQkFDQTtvQkFDQTtvQkFDQXBCLGtCQUFrQixDQUFDQyxhQUFhLEdBQUcsSUFBSXBPLFFBQVEsQ0FBQztzQkFDL0NHLElBQUksRUFBRXVKLEtBQUs7c0JBQ1h6SixJQUFJLEVBQUUzQixNQUFNLENBQUMyQjtvQkFDZCxDQUFDLENBQUM7b0JBQ0Y7a0JBQ0Q7a0JBQ0EsSUFBTUYsU0FBUyxHQUFHLElBQUlDLFFBQVEsQ0FBQztvQkFDOUI7b0JBQ0F2RyxHQUFHLEVBQ0ZnTixVQUFVLENBQUNyQyxjQUFjLElBQUlxQyxVQUFVLENBQUNDLE1BQU0sYUFDeENELFVBQVUsQ0FBQ3JDLGNBQWMsY0FBSXFDLFVBQVUsQ0FBQ0MsTUFBTSxJQUNqRDlMLFNBQVM7b0JBQ2JxRixJQUFJLEVBQUUzQixNQUFNLENBQUMyQixJQUFJO29CQUNqQnFOLFdBQVcsRUFBRTFTLFNBQVM7b0JBQ3RCdUYsSUFBSSxFQUFFdUosS0FBSztvQkFDWDtvQkFDQXFHLElBQUksRUFBRW5WLFNBQVM7b0JBQUU7b0JBQ2pCb1YsZ0JBQWdCLEVBQUUxUixNQUFNLENBQUMyUixJQUFJLElBQUkzUixNQUFNLENBQUMyUixJQUFJLENBQUN0RixPQUFPLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxDQUFDO2tCQUMzRSxDQUFDLENBQUM7a0JBQ0YsSUFBSTVLLFNBQVMsQ0FBQ2hFLFdBQVcsQ0FBQyxrQkFBa0IsQ0FBQyxFQUFFO29CQUM5Q3VTLHlCQUF5QixFQUFFO2tCQUM1QjtrQkFDQUgsa0JBQWtCLENBQUNFLGdCQUFnQixDQUFDM1UsSUFBSSxDQUFDcUcsU0FBUyxDQUFDO2tCQUVuRCxJQUFJckIsUUFBUSxFQUFFO29CQUNiQSxRQUFRLENBQUN3Uix1QkFBdUIsQ0FBQ3pKLFVBQVUsQ0FBQ3JDLGNBQWMsRUFBRTtzQkFDM0RqQyxNQUFNLEVBQUVwQyxTQUFTLENBQUNLLE9BQU8sRUFBRTtzQkFDM0JILElBQUksRUFBRUYsU0FBUyxDQUFDRyxPQUFPO29CQUN4QixDQUFDLENBQUM7a0JBQ0g7Z0JBQ0QsQ0FBQztnQkFDRCxLQUFLLElBQUlpUSxDQUFDLEdBQUcsQ0FBQyxFQUFFQSxDQUFDLEdBQUd4RCxnQkFBZ0IsQ0FBQ3JULE1BQU0sRUFBRTZXLENBQUMsRUFBRSxFQUFFO2tCQUNqRHhRLE1BQU0sQ0FBQ3dRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDbE0sT0FBTyxDQUFDNEwsU0FBUyxDQUFDO2dCQUNoQztnQkFDQSxJQUFJdkIseUJBQXlCLEtBQUssQ0FBQyxFQUFFO2tCQUNwQyxLQUFLLElBQUk4QixjQUFjLEdBQUcsQ0FBQyxFQUFFQSxjQUFjLEdBQUdqQyxrQkFBa0IsQ0FBQ0UsZ0JBQWdCLENBQUMvVSxNQUFNLEVBQUU4VyxjQUFjLEVBQUUsRUFBRTtvQkFDM0csSUFBSUEsY0FBYyxHQUFHLE1BQUksQ0FBQzlWLFlBQVksRUFBRSxDQUFDTixrQkFBa0IsRUFBRTtzQkFDNURtVSxrQkFBa0IsQ0FBQ0UsZ0JBQWdCLENBQUMrQixjQUFjLENBQUMsQ0FBQzlOLFdBQVcsQ0FBQyxrQkFBa0IsRUFBRSxJQUFJLENBQUM7b0JBQzFGLENBQUMsTUFBTTtzQkFDTjtvQkFDRDtrQkFDRDtnQkFDRDtnQkFDQTtnQkFDQTtnQkFDQXpGLE9BQU8sQ0FBQ3NSLGtCQUFrQixDQUFDRSxnQkFBZ0IsRUFBRUYsa0JBQWtCLENBQUNDLGFBQWEsQ0FBQztjQUFDO1lBQ2hGLENBQUMsY0FBZ0I7Y0FDaEI3TSxHQUFHLENBQUNDLEtBQUssQ0FBQyxtRkFBbUYsQ0FBQztjQUM5RjtjQUNBO2NBQ0EzRSxPQUFPLENBQUNzUixrQkFBa0IsQ0FBQ0UsZ0JBQWdCLEVBQUVGLGtCQUFrQixDQUFDQyxhQUFhLENBQUM7WUFDL0UsQ0FBQztZQUFBO1VBQ0YsQ0FBQztZQUFBO1VBQUE7UUFBQSxFQUFDO01BQ0gsQ0FBQyxDQUFDO0lBQ0gsQ0FBQyxDQUFDO0VBQ0gsQ0FBQztFQUNEelUsa0JBQWtCLENBQUNnRixtQkFBbUIsR0FBRyxVQUFVbkUsUUFBYSxFQUFFO0lBQ2pFLE9BQU9BLFFBQVEsQ0FBQzBHLGVBQWUsR0FBRzFHLFFBQVEsQ0FBQzBHLGVBQWUsR0FBRyxFQUFFO0VBQ2hFLENBQUM7RUFDRHZILGtCQUFrQixDQUFDeVYsb0NBQW9DLEdBQUcsVUFBVTVVLFFBQWEsRUFBRTtJQUNsRixJQUFNMlUsaUNBQXdDLEdBQUcsRUFBRTtJQUNuRCxJQUFJM1UsUUFBUSxDQUFDK1IsZ0NBQWdDLEVBQUU7TUFDOUMvUixRQUFRLENBQUMrUixnQ0FBZ0MsQ0FBQ3RJLE9BQU8sQ0FBQyxVQUFVb00sZ0NBQXFDLEVBQUU7UUFDbEdsQixpQ0FBaUMsQ0FBQ3pWLElBQUksQ0FDckMsSUFBSTRXLCtCQUErQixDQUFDO1VBQ25DbE0sY0FBYyxFQUFFaU0sZ0NBQWdDLENBQUNqTSxjQUFjO1VBQy9EbU0sT0FBTyxFQUFFRixnQ0FBZ0MsQ0FBQ0U7UUFDM0MsQ0FBQyxDQUFDLENBQ0Y7TUFDRixDQUFDLENBQUM7SUFDSDtJQUNBLE9BQU9wQixpQ0FBaUM7RUFDekMsQ0FBQzs7RUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtFQUNBeFYsa0JBQWtCLENBQUNzVSwwQkFBMEIsR0FBRyxVQUFVelQsUUFBYSxFQUFFO0lBQ3hFLElBQU1vSix1QkFBOEIsR0FBRyxFQUFFO0lBQ3pDLElBQUk0TSwyQkFBa0MsR0FBRyxFQUFFO0lBQzNDLElBQUloVyxRQUFRLENBQUN5TSxzQkFBc0IsRUFBRTtNQUNwQ3pNLFFBQVEsQ0FBQ3lNLHNCQUFzQixDQUFDaEQsT0FBTyxDQUFDLFVBQVV3TSxzQkFBMkIsRUFBRTtRQUM5RUQsMkJBQTJCLEdBQUcsRUFBRTtRQUNoQyxJQUFJQyxzQkFBc0IsQ0FBQ2pNLEtBQUssRUFBRTtVQUNqQ2lNLHNCQUFzQixDQUFDak0sS0FBSyxDQUFDUCxPQUFPLENBQUMsVUFBVXlNLDBCQUErQixFQUFFO1lBQy9FRiwyQkFBMkIsQ0FBQzlXLElBQUksQ0FDL0IsSUFBSWlYLHlCQUF5QixDQUFDO2NBQzdCbFgsR0FBRyxFQUFFaVgsMEJBQTBCLENBQUNqWCxHQUFHO2NBQ25DcEIsS0FBSyxFQUFFcVksMEJBQTBCLENBQUNyWTtZQUNuQyxDQUFDLENBQUMsQ0FDRjtVQUNGLENBQUMsQ0FBQztRQUNIO1FBQ0F1TCx1QkFBdUIsQ0FBQ2xLLElBQUksQ0FDM0IsSUFBSWtYLHFCQUFxQixDQUFDO1VBQ3pCeE0sY0FBYyxFQUFFcU0sc0JBQXNCLENBQUNyTSxjQUFjO1VBQ3JESSxLQUFLLEVBQUVnTTtRQUNSLENBQUMsQ0FBQyxDQUNGO01BQ0YsQ0FBQyxDQUFDO0lBQ0g7SUFDQSxPQUFPNU0sdUJBQXVCO0VBQy9CLENBQUM7RUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtFQUNBakssa0JBQWtCLENBQUNxVSw2QkFBNkIsR0FBRyxVQUFVcEssdUJBQThCLEVBQUU7SUFDNUYsSUFBSSxDQUFDQSx1QkFBdUIsQ0FBQ3RLLE1BQU0sRUFBRTtNQUNwQyxPQUFPc0IsU0FBUztJQUNqQjtJQUNBLElBQU1pUyx1QkFBNEIsR0FBRyxDQUFDLENBQUM7SUFDdkNqSix1QkFBdUIsQ0FBQ0ssT0FBTyxDQUFDLFVBQVV3TSxzQkFBMkIsRUFBRTtNQUN0RSxJQUFJLENBQUNBLHNCQUFzQixDQUFDSSxpQkFBaUIsRUFBRSxFQUFFO1FBQ2hELE1BQU01UCxLQUFLLHFFQUNtRHdQLHNCQUFzQixDQUFDSSxpQkFBaUIsRUFBRSxvQkFDdkc7TUFDRjtNQUNBaEUsdUJBQXVCLENBQUM0RCxzQkFBc0IsQ0FBQ0ksaUJBQWlCLEVBQUUsQ0FBQyxHQUFHSixzQkFBc0IsQ0FDMUZLLFFBQVEsRUFBRSxDQUNWQyxNQUFNLENBQUMsVUFBVUMsSUFBUyxFQUFFQyxLQUFVLEVBQUU7UUFDeENELElBQUksQ0FBQ0MsS0FBSyxDQUFDMUcsTUFBTSxFQUFFLENBQUMsR0FBRzBHLEtBQUssQ0FBQ3pHLFFBQVEsRUFBRTtRQUN2QyxPQUFPd0csSUFBSTtNQUNaLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUNSLENBQUMsQ0FBQztJQUNGLE9BQU9uRSx1QkFBdUI7RUFDL0IsQ0FBQztFQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0VBQ0FsVCxrQkFBa0IsQ0FBQzJWLHVDQUF1QyxHQUFHLFVBQVVILGlDQUF3QyxFQUFFO0lBQ2hILElBQUkrQixtQkFBd0I7SUFDNUIsSUFBSUMsMkNBQWdEO0lBQ3BELElBQUlDLG1CQUEwQixHQUFHLEVBQUU7SUFDbkMsSUFBSSxDQUFDakMsaUNBQWlDLENBQUM3VixNQUFNLEVBQUU7TUFDOUMsT0FBT3NCLFNBQVM7SUFDakI7SUFDQSxJQUFNeVcsaUNBQXNDLEdBQUcsQ0FBQyxDQUFDO0lBQ2pEbEMsaUNBQWlDLENBQUNsTCxPQUFPLENBQUMsVUFBVXFOLGlDQUFzQyxFQUFFO01BQzNGSixtQkFBbUIsR0FBR0ksaUNBQWlDLENBQUNULGlCQUFpQixFQUFFO01BQzNFLElBQUksQ0FBQ0ssbUJBQW1CLEVBQUU7UUFDekIsTUFBTWpRLEtBQUsscUVBQThEaVEsbUJBQW1CLG9CQUFpQjtNQUM5RztNQUNBRSxtQkFBbUIsR0FBR0UsaUNBQWlDLENBQUNDLFVBQVUsRUFBRTtNQUNwRSxJQUFJRixpQ0FBaUMsQ0FBQ0gsbUJBQW1CLENBQUMsS0FBS3RXLFNBQVMsRUFBRTtRQUN6RXlXLGlDQUFpQyxDQUFDSCxtQkFBbUIsQ0FBQyxHQUFHRSxtQkFBbUI7TUFDN0UsQ0FBQyxNQUFNO1FBQ05ELDJDQUEyQyxHQUFHRSxpQ0FBaUMsQ0FBQ0gsbUJBQW1CLENBQUM7UUFDcEdFLG1CQUFtQixDQUFDbk4sT0FBTyxDQUFDLFVBQVV1TixpQkFBeUIsRUFBRTtVQUNoRUwsMkNBQTJDLENBQUN6WCxJQUFJLENBQUM4WCxpQkFBaUIsQ0FBQztRQUNwRSxDQUFDLENBQUM7UUFDRkgsaUNBQWlDLENBQUNILG1CQUFtQixDQUFDLEdBQUdDLDJDQUEyQztNQUNyRztJQUNELENBQUMsQ0FBQztJQUNGLE9BQU9FLGlDQUFpQztFQUN6QyxDQUFDO0VBQUMsT0FFYTFYLGtCQUFrQjtBQUFBIn0=
|
|
1290
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJib2R5IiwicmVjb3ZlciIsInJlc3VsdCIsImUiLCJ0aGVuIiwicGFjdCIsInN0YXRlIiwidmFsdWUiLCJzIiwidiIsIm8iLCJiaW5kIiwib2JzZXJ2ZXIiLCJwcm90b3R5cGUiLCJvbkZ1bGZpbGxlZCIsIm9uUmVqZWN0ZWQiLCJjYWxsYmFjayIsIl90aGlzIiwidGhlbmFibGUiLCJhcnJheSIsImNoZWNrIiwiaSIsInJlamVjdCIsIl9jeWNsZSIsImxlbmd0aCIsInRhcmdldCIsImtleXMiLCJrZXkiLCJwdXNoIiwiU2ltcGxlTGlua0RlbGVnYXRlIiwiT2JqZWN0IiwiYXNzaWduIiwiTGlua0RlbGVnYXRlIiwiQ09OU1RBTlRTIiwiaUxpbmtzU2hvd25JblBvcHVwIiwic2FwbUxpbmsiLCJzYXB1aW1kY0xpbmsiLCJzYXB1aW1kY2xpbmtMaW5rSXRlbSIsInNhcG1PYmplY3RJZGVudGlmaWVyIiwic2FwbU9iamVjdFN0YXR1cyIsImdldENvbnN0YW50cyIsIl9nZXRFbnRpdHlUeXBlIiwib1BheWxvYWQiLCJvTWV0YU1vZGVsIiwiY3JlYXRlQmluZGluZ0NvbnRleHQiLCJlbnRpdHlUeXBlIiwidW5kZWZpbmVkIiwiX2dldFNlbWFudGljc01vZGVsIiwiSlNPTk1vZGVsIiwiX2dldERhdGFGaWVsZCIsImRhdGFGaWVsZCIsIl9nZXRDb250YWN0IiwiY29udGFjdCIsImZuVGVtcGxhdGVGcmFnbWVudCIsInNGcmFnbWVudE5hbWUiLCJ0aXRsZUxpbmtIcmVmIiwib0ZyYWdtZW50TW9kZWwiLCJvUGF5bG9hZFRvVXNlIiwicmVzb2x2ZWRwYXlsb2FkIiwicGF5bG9hZCIsIkxpbmtJZCIsIm9Db250cm9sIiwiaXNBIiwiZ2V0SWQiLCJnZXRNb2RlbCIsImdldFByb3BlcnR5IiwidGl0bGVsaW5rIiwib1NlbWFudGljc01vZGVsIiwic2VtYW50aWNNb2RlbCIsImJpbmRpbmdDb250ZXh0cyIsInNlbWFudGljIiwibW9kZWxzIiwiZW50aXR5U2V0IiwibWV0YU1vZGVsIiwidmlld0RhdGEiLCJvRnJhZ21lbnQiLCJYTUxUZW1wbGF0ZVByb2Nlc3NvciIsImxvYWRUZW1wbGF0ZSIsIlByb21pc2UiLCJyZXNvbHZlIiwiWE1MUHJlcHJvY2Vzc29yIiwicHJvY2VzcyIsIm5hbWUiLCJfaW50ZXJuYWxGcmFnbWVudCIsIkZyYWdtZW50IiwibG9hZCIsImRlZmluaXRpb24iLCJjb250cm9sbGVyIiwib1BvcG92ZXJDb250ZW50Iiwic2V0TW9kZWwiLCJzZXRCaW5kaW5nQ29udGV4dCIsImZldGNoQWRkaXRpb25hbENvbnRlbnQiLCJvUGF5TG9hZCIsIm9NZGNMaW5rQ29udHJvbCIsImFOYXZpZ2F0ZVJlZ2V4cE1hdGNoIiwibmF2aWdhdGlvblBhdGgiLCJtYXRjaCIsIm9CaW5kaW5nQ29udGV4dCIsImJpbmRDb250ZXh0IiwiZ2V0QmluZGluZ0NvbnRleHQiLCIkJG93blJlcXVlc3QiLCJnZXRNZXRhTW9kZWwiLCJnZXRCb3VuZENvbnRleHQiLCJfZmV0Y2hMaW5rQ3VzdG9tRGF0YSIsIl9vTGluayIsImdldFBhcmVudCIsImdldEN1c3RvbURhdGEiLCJmZXRjaExpbmtJdGVtcyIsIm9JbmZvTG9nIiwiX2dldFNlbWFudGljT2JqZWN0cyIsIm9Db250ZXh0T2JqZWN0IiwiZ2V0T2JqZWN0IiwiaW5pdGlhbGl6ZSIsIl9vTGlua0N1c3RvbURhdGEiLCJfbGluayIsImFMaW5rQ3VzdG9tRGF0YSIsIm1hcCIsImxpbmtJdGVtIiwibVByb3BlcnRpZXMiLCJvU2VtYW50aWNBdHRyaWJ1dGVzUmVzb2x2ZWQiLCJfY2FsY3VsYXRlU2VtYW50aWNBdHRyaWJ1dGVzIiwib1NlbWFudGljQXR0cmlidXRlcyIsInJlc3VsdHMiLCJvUGF5bG9hZFJlc29sdmVkIiwiX3JldHJpZXZlTmF2aWdhdGlvblRhcmdldHMiLCJhTGlua3MiLCJfZmluZExpbmtUeXBlIiwiYUxpbmtJdGVtcyIsIm5MaW5rVHlwZSIsIm9MaW5rSXRlbSIsIkxpbmtJdGVtIiwidGV4dCIsImdldFRleHQiLCJocmVmIiwiZ2V0SHJlZiIsImhhc1F1aWNrVmlld0ZhY2V0cyIsImxpbmtUeXBlIiwiZmV0Y2hMaW5rVHlwZSIsIm9MaW5rIiwiX29DdXJyZW50TGluayIsIl9vUGF5bG9hZCIsIm9EZWZhdWx0SW5pdGlhbFR5cGUiLCJpbml0aWFsVHlwZSIsInR5cGUiLCJkaXJlY3RMaW5rIiwicnVudGltZVR5cGUiLCJhcHBTdGF0ZUtleU1hcCIsIkVycm9yIiwic2VtYW50aWNPYmplY3RzIiwiX3JldHJpZXZlVW5tb2RpZmllZExpbmtJdGVtcyIsIl9MaW5rVHlwZSIsInJldHJpZXZlTGlua0l0ZW1zIiwib0Vycm9yIiwiTG9nIiwiZXJyb3IiLCJfUmVtb3ZlVGl0bGVMaW5rRnJvbVRhcmdldHMiLCJfYUxpbmtJdGVtcyIsIl9iVGl0bGVIYXNMaW5rIiwiX2FUaXRsZUxpbmsiLCJfc1RpdGxlTGlua0hyZWYiLCJfb01EQ0xpbmsiLCJiUmVzdWx0IiwibGlua0lzUHJpbWFyeUFjdGlvbiIsIl9zTGlua0ludGVudFdpdGhvdXRQYXJhbWV0ZXJzIiwiX3NUaXRsZUludGVudCIsImludGVudCIsInNwbGl0IiwidGl0bGVsaW5raHJlZiIsInNldFByb3BlcnR5IiwiYU1MaW5rSXRlbXMiLCJmaWx0ZXIiLCJfSXNTZW1hbnRpY09iamVjdER5bmFtaWMiLCJhTmV3TGlua0N1c3RvbURhdGEiLCJvVGhpcyIsImxpbmsiLCJvdGhlckxpbmsiLCJfZ2V0TGluZUNvbnRleHQiLCJvVmlldyIsIm1MaW5lQ29udGV4dCIsImdldEFnZ3JlZ2F0aW9uIiwiX3NldEZpbHRlckNvbnRleHRVcmxGb3JTZWxlY3Rpb25WYXJpYW50Iiwib1NlbGVjdGlvblZhcmlhbnQiLCJvTmF2aWdhdGlvblNlcnZpY2UiLCJnZXRWaWV3RGF0YSIsInNDb250ZXh0VXJsIiwiY29uc3RydWN0Q29udGV4dFVybCIsInNldEZpbHRlckNvbnRleHRVcmwiLCJfc2V0T2JqZWN0TWFwcGluZ3MiLCJzU2VtYW50aWNPYmplY3QiLCJvUGFyYW1zIiwiYVNlbWFudGljT2JqZWN0TWFwcGluZ3MiLCJoYXNDaGFuZ2VkIiwibW9kaWZpZWRTZWxlY3Rpb25WYXJpYW50IiwiU2VsZWN0aW9uVmFyaWFudCIsInRvSlNPTk9iamVjdCIsImZvckVhY2giLCJtYXBwaW5nIiwibWFwcGluZ1NlbWFudGljT2JqZWN0Iiwic2VtYW50aWNPYmplY3QiLCJtYXBwaW5nU2VtYW50aWNPYmplY3RQYXRoIiwiZ2V0RHluYW1pY1BhdGhGcm9tU2VtYW50aWNPYmplY3QiLCJvTWFwcGluZ3MiLCJpdGVtcyIsInNMb2NhbFByb3BlcnR5Iiwic1NlbWFudGljT2JqZWN0UHJvcGVydHkiLCJyZW1vdmVQYXJhbWV0ZXIiLCJyZW1vdmVTZWxlY3RPcHRpb24iLCJyZW5hbWVQYXJhbWV0ZXIiLCJyZW5hbWVTZWxlY3RPcHRpb24iLCJwcm9wZXJ0eVRvQmVSZW1vdmVkIiwic2xpY2UiLCJwYXJhbXMiLCJzZWxlY3Rpb25WYXJpYW50IiwiX2dldEFwcFN0YXRlS2V5QW5kVXJsUGFyYW1ldGVycyIsIm5hdmlnYXRpb25TZXJ2aWNlIiwiYVZhbHVlcyIsImRlZXBFcXVhbCIsImRlZmF1bHRDYWNoZSIsInNlbWFudGljQXR0cmlidXRlcyIsImFwcHN0YXRla2V5IiwidG9FUzZQcm9taXNlIiwiZ2V0QXBwU3RhdGVLZXlBbmRVcmxQYXJhbWV0ZXJzIiwidG9KU09OU3RyaW5nIiwiY2FjaGUiLCJfZ2V0TGlua0l0ZW1XaXRoTmV3UGFyYW1ldGVyIiwiX3RoYXQiLCJfb0xpbmtJdGVtIiwiX29TaGVsbFNlcnZpY2VzIiwiX29QYXJhbXMiLCJfc0FwcFN0YXRlS2V5IiwiX29TZWxlY3Rpb25WYXJpYW50IiwiX29OYXZpZ2F0aW9uU2VydmljZSIsImV4cGFuZENvbXBhY3RIYXNoIiwic0hhc2giLCJvTmV3U2hlbGxIYXNoIiwib1NoZWxsSGFzaCIsImFjdGlvbiIsIm9OZXdQYXJhbXMiLCJhcHBTdGF0ZUtleSIsInNldEhyZWYiLCJjb25zdHJ1Y3RTaGVsbEhhc2giLCJhU2VtYW50aWNMaW5rcyIsInBhcnNlU2hlbGxIYXNoIiwic2VtYW50aWNPYmplY3RNYXBwaW5ncyIsIm5ld1NlbGVjdGlvblZhcmlhbnQiLCJfcmVtb3ZlRW1wdHlMaW5rSXRlbSIsIm1vZGlmeUxpbmtJdGVtcyIsIkZpZWxkSGVscGVyIiwiY2hlY2tQcmltYXJ5QWN0aW9ucyIsInByaW1hcnlBY3Rpb25Jc0FjdGl2ZSIsImFUaXRsZUxpbmsiLCJ0aXRsZUxpbmsiLCJiVGl0bGVIYXNMaW5rIiwiaGFzVGl0bGVMaW5rIiwiQ29tbW9uVXRpbHMiLCJnZXRUYXJnZXRWaWV3Iiwib0FwcENvbXBvbmVudCIsImdldEFwcENvbXBvbmVudCIsIm9TaGVsbFNlcnZpY2VzIiwiZ2V0U2hlbGxTZXJ2aWNlcyIsImhhc1VTaGVsbCIsIm9UYXJnZXRJbmZvIiwibWFpblNlbWFudGljT2JqZWN0IiwiZ2V0TmF2aWdhdGlvblNlcnZpY2UiLCJvQ29udHJvbGxlciIsImdldENvbnRyb2xsZXIiLCJtTGluZUNvbnRleHREYXRhIiwic01ldGFQYXRoIiwiZ2V0TWV0YVBhdGgiLCJnZXRQYXRoIiwiX2ludGVudEJhc2VkTmF2aWdhdGlvbiIsInJlbW92ZVNlbnNpdGl2ZURhdGEiLCJwcmVwYXJlQ29udGV4dEZvckV4dGVybmFsTmF2aWdhdGlvbiIsIm1peEF0dHJpYnV0ZXNBbmRTZWxlY3Rpb25WYXJpYW50IiwicHJvcGVydGllc1dpdGhvdXRDb25mbGljdCIsImludGVudEJhc2VkTmF2aWdhdGlvbiIsImFkYXB0TmF2aWdhdGlvbkNvbnRleHQiLCJfcmVtb3ZlVGVjaG5pY2FsUGFyYW1ldGVycyIsInRpdGxlTGlua3RvQmVSZW1vdmUiLCJpbmRleCIsImJlZm9yZU5hdmlnYXRpb25DYWxsYmFjayIsIm9FdmVudCIsIm9Tb3VyY2UiLCJnZXRTb3VyY2UiLCJzSHJlZiIsImdldFBhcmFtZXRlciIsIm9VUkxQYXJzaW5nIiwiRmFjdG9yeSIsImdldFNlcnZpY2UiLCJvSGFzaCIsIktlZXBBbGl2ZUhlbHBlciIsInN0b3JlQ29udHJvbFJlZnJlc2hTdHJhdGVneUZvckhhc2giLCJfZ2V0U2VtYW50aWNPYmplY3RDdXN0b21EYXRhVmFsdWUiLCJvU2VtYW50aWNPYmplY3RzUmVzb2x2ZWQiLCJzUHJvcGVydHlOYW1lIiwic0N1c3RvbURhdGFWYWx1ZSIsImlDdXN0b21EYXRhQ291bnQiLCJnZXRLZXkiLCJnZXRWYWx1ZSIsIl9pc0R5bmFtaWNQYXRoIiwicGF0aE9yVmFsdWUiLCJpbmRleE9mIiwiX3VwZGF0ZVBheWxvYWRXaXRoUmVzb2x2ZWRTZW1hbnRpY09iamVjdFZhbHVlIiwibmV3UGF5bG9hZCIsInNlbWFudGljT2JqZWN0TmFtZSIsInNlbWFudGljT2JqZWN0c1Jlc29sdmVkIiwiaiIsIl9jcmVhdGVOZXdQYXlsb2FkV2l0aER5bmFtaWNTZW1hbnRpY09iamVjdHNSZXNvbHZlZCIsInRtcFByb3BlcnR5TmFtZSIsInN1YnN0ciIsIl91cGRhdGVTZW1hbnRpY09iamVjdHNGb3JNYXBwaW5ncyIsIm1kY1BheWxvYWQiLCJtZGNQYXlsb2FkV2l0aER5bmFtaWNTZW1hbnRpY09iamVjdHNSZXNvbHZlZCIsInNlbWFudGljT2JqZWN0TWFwcGluZyIsIl91cGRhdGVTZW1hbnRpY09iamVjdHNVbmF2YWlsYWJsZUFjdGlvbnMiLCJtZGNQYXlsb2FkU2VtYW50aWNPYmplY3RVbmF2YWlsYWJsZUFjdGlvbnMiLCJfSW5kZXgiLCJzZW1hbnRpY09iamVjdFVuYXZhaWxhYmxlQWN0aW9uIiwiZmluZEluZGV4IiwiX3VwZGF0ZVNlbWFudGljT2JqZWN0c1dpdGhSZXNvbHZlZFZhbHVlIiwibmV3U2VtYW50aWNPYmplY3RzQ291bnQiLCJzcGxpY2UiLCJfcmVtb3ZlRW1wdHlTZW1hbnRpY09iamVjdHNNYXBwaW5ncyIsIm1hcHBpbmdzQ291bnQiLCJfc2V0UGF5bG9hZFdpdGhEeW5hbWljU2VtYW50aWNPYmplY3RzUmVzb2x2ZWQiLCJvUGF5bG9hZFdpdGhEeW5hbWljU2VtYW50aWNPYmplY3RzUmVzb2x2ZWQiLCJwcm9wZXJ0eVBhdGhMYWJlbCIsImRlZXBDbG9uZSIsIl9TZW1hbnRpY09iamVjdFVuYXZhaWxhYmxlQWN0aW9ucyIsInNlbWFudGljT2JqZWN0VW5hdmFpbGFibGVBY3Rpb25zIiwiX2dldFBheWxvYWRXaXRoRHluYW1pY1NlbWFudGljT2JqZWN0c1Jlc29sdmVkIiwibGlua0N1c3RvbURhdGEiLCJfdXBkYXRlUGF5bG9hZFdpdGhTZW1hbnRpY0F0dHJpYnV0ZXMiLCJhU2VtYW50aWNPYmplY3RzIiwib1Jlc3VsdHMiLCJtU2VtYW50aWNPYmplY3RNYXBwaW5ncyIsImFkZENvbnRleHRPYmplY3QiLCJzQXR0cmlidXRlTmFtZSIsIm9BdHRyaWJ1dGUiLCJvVHJhbnNmb3JtYXRpb25BZGRpdGlvbmFsIiwiZ2V0U2VtYW50aWNPYmplY3RBdHRyaWJ1dGUiLCJjcmVhdGVBdHRyaWJ1dGVTdHJ1Y3R1cmUiLCJhZGRTZW1hbnRpY09iamVjdEF0dHJpYnV0ZSIsInRyYW5zZm9ybWF0aW9ucyIsImRlc2NyaXB0aW9uIiwiaXNQbGFpbk9iamVjdCIsImFLZXlzIiwic05ld0F0dHJpYnV0ZU5hbWVNYXBwZWQiLCJzTmV3QXR0cmlidXRlTmFtZSIsInNWYWx1ZSIsInNLZXkiLCJzQXR0cmlidXRlTmFtZU1hcHBlZCIsInJlYXNvbiIsImFBdHRyaWJ1dGVOZXciLCJfY29udmVydFNlbWFudGljT2JqZWN0TWFwcGluZyIsIl9nZXRTZW1hbnRpY09iamVjdE1hcHBpbmdzIiwic0FwcFN0YXRlS2V5Iiwib05hdmlnYXRpb25UYXJnZXRzIiwib3duTmF2aWdhdGlvbiIsImF2YWlsYWJsZUFjdGlvbnMiLCJpU3VwZXJpb3JBY3Rpb25MaW5rc0ZvdW5kIiwiQ29yZSIsImxvYWRMaWJyYXJ5IiwiYXN5bmMiLCJzYXAiLCJ1aSIsInJlcXVpcmUiLCJVdGlscyIsImdldEFwcENvbXBvbmVudEZvckNvbnRyb2wiLCJhUGFyYW1zIiwic29ydFJlc3VsdHNCeSIsImdldExpbmtzIiwiYkhhc0xpbmtzIiwiYVNlbWFudGljT2JqZWN0VW5hdmFpbGFibGVBY3Rpb25zIiwiX2dldFNlbWFudGljT2JqZWN0VW5hdmFpbGFibGVBY3Rpb25zIiwib1VuYXZhaWxhYmxlQWN0aW9ucyIsIl9jb252ZXJ0U2VtYW50aWNPYmplY3RVbmF2YWlsYWJsZUFjdGlvbiIsInNDdXJyZW50SGFzaCIsIkZpZWxkUnVudGltZSIsIl9mbkZpeEhhc2hRdWVyeVN0cmluZyIsImdldEhhc2giLCJmbklzVW5hdmFpbGFibGVBY3Rpb24iLCJzQWN0aW9uIiwiZm5BZGRMaW5rIiwic2hlbGxIYXNoIiwiaWNvbiIsImluaXRpYWxseVZpc2libGUiLCJ0YWdzIiwiYWRkU2VtYW50aWNPYmplY3RJbnRlbnQiLCJuIiwiaUxpbmtJdGVtSW5kZXgiLCJvU2VtYW50aWNPYmplY3RVbmF2YWlsYWJsZUFjdGlvbiIsIlNlbWFudGljT2JqZWN0VW5hdmFpbGFibGVBY3Rpb24iLCJhY3Rpb25zIiwiYVNlbWFudGljT2JqZWN0TWFwcGluZ0l0ZW1zIiwib1NlbWFudGljT2JqZWN0TWFwcGluZyIsIm9TZW1hbnRpY09iamVjdE1hcHBpbmdJdGVtIiwiU2VtYW50aWNPYmplY3RNYXBwaW5nSXRlbSIsIlNlbWFudGljT2JqZWN0TWFwcGluZyIsImdldFNlbWFudGljT2JqZWN0IiwiZ2V0SXRlbXMiLCJyZWR1Y2UiLCJvTWFwIiwib0l0ZW0iLCJfU2VtYW50aWNPYmplY3ROYW1lIiwiX1NlbWFudGljT2JqZWN0SGFzQWxyZWFkeVVuYXZhaWxhYmxlQWN0aW9ucyIsIl9VbmF2YWlsYWJsZUFjdGlvbnMiLCJtU2VtYW50aWNPYmplY3RVbmF2YWlsYWJsZUFjdGlvbnMiLCJvU2VtYW50aWNPYmplY3RVbmF2YWlsYWJsZUFjdGlvbnMiLCJnZXRBY3Rpb25zIiwiVW5hdmFpbGFibGVBY3Rpb24iXSwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzIjpbIlF1aWNrVmlld0xpbmtEZWxlZ2F0ZS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgTG9nIGZyb20gXCJzYXAvYmFzZS9Mb2dcIjtcbmltcG9ydCBkZWVwQ2xvbmUgZnJvbSBcInNhcC9iYXNlL3V0aWwvZGVlcENsb25lXCI7XG5pbXBvcnQgZGVlcEVxdWFsIGZyb20gXCJzYXAvYmFzZS91dGlsL2RlZXBFcXVhbFwiO1xuaW1wb3J0IGlzUGxhaW5PYmplY3QgZnJvbSBcInNhcC9iYXNlL3V0aWwvaXNQbGFpbk9iamVjdFwiO1xuaW1wb3J0IENvbW1vblV0aWxzIGZyb20gXCJzYXAvZmUvY29yZS9Db21tb25VdGlsc1wiO1xuaW1wb3J0IEtlZXBBbGl2ZUhlbHBlciBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9LZWVwQWxpdmVIZWxwZXJcIjtcbmltcG9ydCB0b0VTNlByb21pc2UgZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvVG9FUzZQcm9taXNlXCI7XG5pbXBvcnQgUGFnZUNvbnRyb2xsZXIgZnJvbSBcInNhcC9mZS9jb3JlL1BhZ2VDb250cm9sbGVyXCI7XG5pbXBvcnQgeyBOYXZpZ2F0aW9uU2VydmljZSB9IGZyb20gXCJzYXAvZmUvY29yZS9zZXJ2aWNlcy9OYXZpZ2F0aW9uU2VydmljZUZhY3RvcnlcIjtcbmltcG9ydCB7IGdldER5bmFtaWNQYXRoRnJvbVNlbWFudGljT2JqZWN0IH0gZnJvbSBcInNhcC9mZS9jb3JlL3RlbXBsYXRpbmcvU2VtYW50aWNPYmplY3RIZWxwZXJcIjtcbmltcG9ydCBGaWVsZEhlbHBlciBmcm9tIFwic2FwL2ZlL21hY3Jvcy9maWVsZC9GaWVsZEhlbHBlclwiO1xuaW1wb3J0IEZpZWxkUnVudGltZSBmcm9tIFwic2FwL2ZlL21hY3Jvcy9maWVsZC9GaWVsZFJ1bnRpbWVcIjtcbmltcG9ydCBTZWxlY3Rpb25WYXJpYW50IGZyb20gXCJzYXAvZmUvbmF2aWdhdGlvbi9TZWxlY3Rpb25WYXJpYW50XCI7XG5pbXBvcnQgQ29yZSBmcm9tIFwic2FwL3VpL2NvcmUvQ29yZVwiO1xuaW1wb3J0IEZyYWdtZW50IGZyb20gXCJzYXAvdWkvY29yZS9GcmFnbWVudFwiO1xuaW1wb3J0IFhNTFByZXByb2Nlc3NvciBmcm9tIFwic2FwL3VpL2NvcmUvdXRpbC9YTUxQcmVwcm9jZXNzb3JcIjtcbmltcG9ydCBYTUxUZW1wbGF0ZVByb2Nlc3NvciBmcm9tIFwic2FwL3VpL2NvcmUvWE1MVGVtcGxhdGVQcm9jZXNzb3JcIjtcbmltcG9ydCBGYWN0b3J5IGZyb20gXCJzYXAvdWkvbWRjL2xpbmsvRmFjdG9yeVwiO1xuaW1wb3J0IExpbmtJdGVtIGZyb20gXCJzYXAvdWkvbWRjL2xpbmsvTGlua0l0ZW1cIjtcbmltcG9ydCBTZW1hbnRpY09iamVjdE1hcHBpbmcgZnJvbSBcInNhcC91aS9tZGMvbGluay9TZW1hbnRpY09iamVjdE1hcHBpbmdcIjtcbmltcG9ydCBTZW1hbnRpY09iamVjdE1hcHBpbmdJdGVtIGZyb20gXCJzYXAvdWkvbWRjL2xpbmsvU2VtYW50aWNPYmplY3RNYXBwaW5nSXRlbVwiO1xuaW1wb3J0IFNlbWFudGljT2JqZWN0VW5hdmFpbGFibGVBY3Rpb24gZnJvbSBcInNhcC91aS9tZGMvbGluay9TZW1hbnRpY09iamVjdFVuYXZhaWxhYmxlQWN0aW9uXCI7XG5pbXBvcnQgTGlua0RlbGVnYXRlIGZyb20gXCJzYXAvdWkvbWRjL0xpbmtEZWxlZ2F0ZVwiO1xuaW1wb3J0IHR5cGUgQ29udGV4dCBmcm9tIFwic2FwL3VpL21vZGVsL0NvbnRleHRcIjtcbmltcG9ydCBKU09OTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9qc29uL0pTT05Nb2RlbFwiO1xuaW1wb3J0IHR5cGUgT0RhdGFNZXRhTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9PRGF0YU1ldGFNb2RlbFwiO1xuXG50eXBlIFJlZ2lzdGVyZWRTZW1hbnRpY09iamVjdE1hcHBpbmcgPSB7IHNlbWFudGljT2JqZWN0OiBzdHJpbmc7IGl0ZW1zOiB7IGtleTogc3RyaW5nOyB2YWx1ZTogc3RyaW5nIH1bXSB9O1xudHlwZSBSZWdpc3RlcmVkU2VtYW50aWNPYmplY3RNYXBwaW5ncyA9IFJlZ2lzdGVyZWRTZW1hbnRpY09iamVjdE1hcHBpbmdbXTtcbnR5cGUgUmVnaXN0ZXJlZFBheWxvYWQgPSB7XG5cdG1haW5TZW1hbnRpY09iamVjdD86IHN0cmluZztcblx0c2VtYW50aWNPYmplY3RzOiBzdHJpbmdbXTtcblx0c2VtYW50aWNPYmplY3RzUmVzb2x2ZWQ/OiBzdHJpbmdbXTtcblx0c2VtYW50aWNPYmplY3RNYXBwaW5nczogUmVnaXN0ZXJlZFNlbWFudGljT2JqZWN0TWFwcGluZ3M7XG5cdHNlbWFudGljT2JqZWN0VW5hdmFpbGFibGVBY3Rpb25zPzogUmVnaXN0ZXJlZFNlbWFudGljT2JqZWN0VW5hdmFpbGFibGVBY3Rpb25zO1xuXHRlbnRpdHlUeXBlPzogc3RyaW5nO1xuXHRkYXRhRmllbGQ/OiBzdHJpbmc7XG5cdGNvbnRhY3Q/OiBzdHJpbmc7XG5cdG5hdmlnYXRpb25QYXRoPzogc3RyaW5nO1xuXHRwcm9wZXJ0eVBhdGhMYWJlbD86IHN0cmluZztcbn07XG5cbnR5cGUgUmVnaXN0ZXJlZFNlbWFudGljT2JqZWN0VW5hdmFpbGFibGVBY3Rpb25zID0gW1xuXHR7XG5cdFx0c2VtYW50aWNPYmplY3Q6IHN0cmluZztcblx0XHRhY3Rpb25zOiBzdHJpbmdbXTtcblx0fVxuXTtcblxuY29uc3QgU2ltcGxlTGlua0RlbGVnYXRlID0gT2JqZWN0LmFzc2lnbih7fSwgTGlua0RlbGVnYXRlKSBhcyBhbnk7XG5jb25zdCBDT05TVEFOVFMgPSB7XG5cdGlMaW5rc1Nob3duSW5Qb3B1cDogMyxcblx0c2FwbUxpbms6IFwic2FwLm0uTGlua1wiLFxuXHRzYXB1aW1kY0xpbms6IFwic2FwLnVpLm1kYy5MaW5rXCIsXG5cdHNhcHVpbWRjbGlua0xpbmtJdGVtOiBcInNhcC51aS5tZGMubGluay5MaW5rSXRlbVwiLFxuXHRzYXBtT2JqZWN0SWRlbnRpZmllcjogXCJzYXAubS5PYmplY3RJZGVudGlmaWVyXCIsXG5cdHNhcG1PYmplY3RTdGF0dXM6IFwic2FwLm0uT2JqZWN0U3RhdHVzXCJcbn07XG5TaW1wbGVMaW5rRGVsZWdhdGUuZ2V0Q29uc3RhbnRzID0gZnVuY3Rpb24gKCkge1xuXHRyZXR1cm4gQ09OU1RBTlRTO1xufTtcbi8qKlxuICogVGhpcyB3aWxsIHJldHVybiBhbiBhcnJheSBvZiB0aGUgU2VtYW50aWNPYmplY3RzIGFzIHN0cmluZ3MgZ2l2ZW4gYnkgdGhlIHBheWxvYWQuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSBvUGF5bG9hZCBUaGUgcGF5bG9hZCBkZWZpbmVkIGJ5IHRoZSBhcHBsaWNhdGlvblxuICogQHBhcmFtIG9NZXRhTW9kZWwgVGhlIE9EYXRhTWV0YU1vZGVsIHJlY2VpdmVkIGZyb20gdGhlIExpbmtcbiAqIEByZXR1cm5zIFRoZSBjb250ZXh0IHBvaW50aW5nIHRvIHRoZSBjdXJyZW50IEVudGl0eVR5cGUuXG4gKi9cblNpbXBsZUxpbmtEZWxlZ2F0ZS5fZ2V0RW50aXR5VHlwZSA9IGZ1bmN0aW9uIChvUGF5bG9hZDogYW55LCBvTWV0YU1vZGVsOiBPRGF0YU1ldGFNb2RlbCkge1xuXHRpZiAob01ldGFNb2RlbCkge1xuXHRcdHJldHVybiBvTWV0YU1vZGVsLmNyZWF0ZUJpbmRpbmdDb250ZXh0KG9QYXlsb2FkLmVudGl0eVR5cGUpO1xuXHR9IGVsc2Uge1xuXHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdH1cbn07XG4vKipcbiAqIFRoaXMgd2lsbCByZXR1cm4gYW4gYXJyYXkgb2YgdGhlIFNlbWFudGljT2JqZWN0cyBhcyBzdHJpbmdzIGdpdmVuIGJ5IHRoZSBwYXlsb2FkLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0gb1BheWxvYWQgVGhlIHBheWxvYWQgZGVmaW5lZCBieSB0aGUgYXBwbGljYXRpb25cbiAqIEBwYXJhbSBvTWV0YU1vZGVsIFRoZSBPRGF0YU1ldGFNb2RlbCByZWNlaXZlZCBmcm9tIHRoZSBMaW5rXG4gKiBAcmV0dXJucyBBIG1vZGVsIGNvbnRhaW5pbmcgdGhlIHBheWxvYWQgaW5mb3JtYXRpb25cbiAqL1xuU2ltcGxlTGlua0RlbGVnYXRlLl9nZXRTZW1hbnRpY3NNb2RlbCA9IGZ1bmN0aW9uIChvUGF5bG9hZDogb2JqZWN0LCBvTWV0YU1vZGVsOiBvYmplY3QpIHtcblx0aWYgKG9NZXRhTW9kZWwpIHtcblx0XHRyZXR1cm4gbmV3IEpTT05Nb2RlbChvUGF5bG9hZCk7XG5cdH0gZWxzZSB7XG5cdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0fVxufTtcbi8qKlxuICogVGhpcyB3aWxsIHJldHVybiBhbiBhcnJheSBvZiB0aGUgU2VtYW50aWNPYmplY3RzIGFzIHN0cmluZ3MgZ2l2ZW4gYnkgdGhlIHBheWxvYWQuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSBvUGF5bG9hZCBUaGUgcGF5bG9hZCBkZWZpbmVkIGJ5IHRoZSBhcHBsaWNhdGlvblxuICogQHBhcmFtIG9NZXRhTW9kZWwgVGhlIE9EYXRhTWV0YU1vZGVsIHJlY2VpdmVkIGZyb20gdGhlIExpbmtcbiAqIEByZXR1cm5zIEFuIGFycmF5IGNvbnRhaW5pbmcgU2VtYW50aWNPYmplY3RzIGJhc2VkIG9mIHRoZSBwYXlsb2FkXG4gKi9cblNpbXBsZUxpbmtEZWxlZ2F0ZS5fZ2V0RGF0YUZpZWxkID0gZnVuY3Rpb24gKG9QYXlsb2FkOiBhbnksIG9NZXRhTW9kZWw6IE9EYXRhTWV0YU1vZGVsKSB7XG5cdHJldHVybiBvTWV0YU1vZGVsLmNyZWF0ZUJpbmRpbmdDb250ZXh0KG9QYXlsb2FkLmRhdGFGaWVsZCk7XG59O1xuLyoqXG4gKiBUaGlzIHdpbGwgcmV0dXJuIGFuIGFycmF5IG9mIHRoZSBTZW1hbnRpY09iamVjdHMgYXMgc3RyaW5ncyBnaXZlbiBieSB0aGUgcGF5bG9hZC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIG9QYXlsb2FkIFRoZSBwYXlsb2FkIGRlZmluZWQgYnkgdGhlIGFwcGxpY2F0aW9uXG4gKiBAcGFyYW0gb01ldGFNb2RlbCBUaGUgT0RhdGFNZXRhTW9kZWwgcmVjZWl2ZWQgZnJvbSB0aGUgTGlua1xuICogQHJldHVybnMgQW5jb250YWluaW5nIFNlbWFudGljT2JqZWN0cyBiYXNlZCBvZiB0aGUgcGF5bG9hZFxuICovXG5TaW1wbGVMaW5rRGVsZWdhdGUuX2dldENvbnRhY3QgPSBmdW5jdGlvbiAob1BheWxvYWQ6IGFueSwgb01ldGFNb2RlbDogT0RhdGFNZXRhTW9kZWwpIHtcblx0cmV0dXJuIG9NZXRhTW9kZWwuY3JlYXRlQmluZGluZ0NvbnRleHQob1BheWxvYWQuY29udGFjdCk7XG59O1xuU2ltcGxlTGlua0RlbGVnYXRlLmZuVGVtcGxhdGVGcmFnbWVudCA9IGZ1bmN0aW9uICgpIHtcblx0bGV0IHNGcmFnbWVudE5hbWU6IHN0cmluZywgdGl0bGVMaW5rSHJlZjtcblx0Y29uc3Qgb0ZyYWdtZW50TW9kZWw6IGFueSA9IHt9O1xuXHRsZXQgb1BheWxvYWRUb1VzZTtcblxuXHQvLyBwYXlsb2FkIGhhcyBiZWVuIG1vZGlmaWVkIGJ5IGZldGNoaW5nIFNlbWFudGljIE9iamVjdHMgbmFtZXMgd2l0aCBwYXRoXG5cdGlmICh0aGlzLnJlc29sdmVkcGF5bG9hZCkge1xuXHRcdG9QYXlsb2FkVG9Vc2UgPSB0aGlzLnJlc29sdmVkcGF5bG9hZDtcblx0fSBlbHNlIHtcblx0XHRvUGF5bG9hZFRvVXNlID0gdGhpcy5wYXlsb2FkO1xuXHR9XG5cblx0aWYgKG9QYXlsb2FkVG9Vc2UgJiYgIW9QYXlsb2FkVG9Vc2UuTGlua0lkKSB7XG5cdFx0b1BheWxvYWRUb1VzZS5MaW5rSWQgPSB0aGlzLm9Db250cm9sICYmIHRoaXMub0NvbnRyb2wuaXNBKENPTlNUQU5UUy5zYXB1aW1kY0xpbmspID8gdGhpcy5vQ29udHJvbC5nZXRJZCgpIDogdW5kZWZpbmVkO1xuXHR9XG5cblx0aWYgKG9QYXlsb2FkVG9Vc2UuTGlua0lkKSB7XG5cdFx0dGl0bGVMaW5rSHJlZiA9IHRoaXMub0NvbnRyb2wuZ2V0TW9kZWwoXCIkc2FwdWltZGNMaW5rXCIpLmdldFByb3BlcnR5KFwiL3RpdGxlTGlua0hyZWZcIik7XG5cdFx0b1BheWxvYWRUb1VzZS50aXRsZWxpbmsgPSB0aXRsZUxpbmtIcmVmO1xuXHR9XG5cblx0Y29uc3Qgb1NlbWFudGljc01vZGVsID0gdGhpcy5fZ2V0U2VtYW50aWNzTW9kZWwob1BheWxvYWRUb1VzZSwgdGhpcy5vTWV0YU1vZGVsKTtcblx0dGhpcy5zZW1hbnRpY01vZGVsID0gb1NlbWFudGljc01vZGVsO1xuXG5cdGlmIChvUGF5bG9hZFRvVXNlLmVudGl0eVR5cGUgJiYgdGhpcy5fZ2V0RW50aXR5VHlwZShvUGF5bG9hZFRvVXNlLCB0aGlzLm9NZXRhTW9kZWwpKSB7XG5cdFx0c0ZyYWdtZW50TmFtZSA9IFwic2FwLmZlLm1hY3Jvcy5maWVsZC5RdWlja1ZpZXdMaW5rRm9yRW50aXR5XCI7XG5cdFx0b0ZyYWdtZW50TW9kZWwuYmluZGluZ0NvbnRleHRzID0ge1xuXHRcdFx0ZW50aXR5VHlwZTogdGhpcy5fZ2V0RW50aXR5VHlwZShvUGF5bG9hZFRvVXNlLCB0aGlzLm9NZXRhTW9kZWwpLFxuXHRcdFx0c2VtYW50aWM6IG9TZW1hbnRpY3NNb2RlbC5jcmVhdGVCaW5kaW5nQ29udGV4dChcIi9cIilcblx0XHR9O1xuXHRcdG9GcmFnbWVudE1vZGVsLm1vZGVscyA9IHtcblx0XHRcdGVudGl0eVR5cGU6IHRoaXMub01ldGFNb2RlbCxcblx0XHRcdHNlbWFudGljOiBvU2VtYW50aWNzTW9kZWxcblx0XHR9O1xuXHR9IGVsc2UgaWYgKG9QYXlsb2FkVG9Vc2UuZGF0YUZpZWxkICYmIHRoaXMuX2dldERhdGFGaWVsZChvUGF5bG9hZFRvVXNlLCB0aGlzLm9NZXRhTW9kZWwpKSB7XG5cdFx0c0ZyYWdtZW50TmFtZSA9IFwic2FwLmZlLm1hY3Jvcy5maWVsZC5RdWlja1ZpZXdMaW5rRm9yRGF0YUZpZWxkXCI7XG5cdFx0b0ZyYWdtZW50TW9kZWwuYmluZGluZ0NvbnRleHRzID0ge1xuXHRcdFx0ZGF0YUZpZWxkOiB0aGlzLl9nZXREYXRhRmllbGQob1BheWxvYWRUb1VzZSwgdGhpcy5vTWV0YU1vZGVsKSxcblx0XHRcdHNlbWFudGljOiBvU2VtYW50aWNzTW9kZWwuY3JlYXRlQmluZGluZ0NvbnRleHQoXCIvXCIpXG5cdFx0fTtcblx0XHRvRnJhZ21lbnRNb2RlbC5tb2RlbHMgPSB7XG5cdFx0XHRkYXRhRmllbGQ6IHRoaXMub01ldGFNb2RlbCxcblx0XHRcdHNlbWFudGljOiBvU2VtYW50aWNzTW9kZWxcblx0XHR9O1xuXHR9IGVsc2UgaWYgKG9QYXlsb2FkVG9Vc2UuY29udGFjdCAmJiB0aGlzLl9nZXRDb250YWN0KG9QYXlsb2FkVG9Vc2UsIHRoaXMub01ldGFNb2RlbCkpIHtcblx0XHRzRnJhZ21lbnROYW1lID0gXCJzYXAuZmUubWFjcm9zLmZpZWxkLlF1aWNrVmlld0xpbmtGb3JDb250YWN0XCI7XG5cdFx0b0ZyYWdtZW50TW9kZWwuYmluZGluZ0NvbnRleHRzID0ge1xuXHRcdFx0Y29udGFjdDogdGhpcy5fZ2V0Q29udGFjdChvUGF5bG9hZFRvVXNlLCB0aGlzLm9NZXRhTW9kZWwpXG5cdFx0fTtcblx0XHRvRnJhZ21lbnRNb2RlbC5tb2RlbHMgPSB7XG5cdFx0XHRjb250YWN0OiB0aGlzLm9NZXRhTW9kZWxcblx0XHR9O1xuXHR9XG5cdG9GcmFnbWVudE1vZGVsLm1vZGVscy5lbnRpdHlTZXQgPSB0aGlzLm9NZXRhTW9kZWw7XG5cdG9GcmFnbWVudE1vZGVsLm1vZGVscy5tZXRhTW9kZWwgPSB0aGlzLm9NZXRhTW9kZWw7XG5cdGlmICh0aGlzLm9Db250cm9sICYmIHRoaXMub0NvbnRyb2wuZ2V0TW9kZWwoXCJ2aWV3RGF0YVwiKSkge1xuXHRcdG9GcmFnbWVudE1vZGVsLm1vZGVscy52aWV3RGF0YSA9IHRoaXMub0NvbnRyb2wuZ2V0TW9kZWwoXCJ2aWV3RGF0YVwiKTtcblx0XHRvRnJhZ21lbnRNb2RlbC5iaW5kaW5nQ29udGV4dHMudmlld0RhdGEgPSB0aGlzLm9Db250cm9sLmdldE1vZGVsKFwidmlld0RhdGFcIikuY3JlYXRlQmluZGluZ0NvbnRleHQoXCIvXCIpO1xuXHR9XG5cblx0Y29uc3Qgb0ZyYWdtZW50ID0gWE1MVGVtcGxhdGVQcm9jZXNzb3IubG9hZFRlbXBsYXRlKHNGcmFnbWVudE5hbWUhLCBcImZyYWdtZW50XCIpO1xuXG5cdHJldHVybiBQcm9taXNlLnJlc29sdmUoWE1MUHJlcHJvY2Vzc29yLnByb2Nlc3Mob0ZyYWdtZW50LCB7IG5hbWU6IHNGcmFnbWVudE5hbWUhIH0sIG9GcmFnbWVudE1vZGVsKSlcblx0XHQudGhlbigoX2ludGVybmFsRnJhZ21lbnQ6IGFueSkgPT4ge1xuXHRcdFx0cmV0dXJuIEZyYWdtZW50LmxvYWQoe1xuXHRcdFx0XHRkZWZpbml0aW9uOiBfaW50ZXJuYWxGcmFnbWVudCxcblx0XHRcdFx0Y29udHJvbGxlcjogdGhpc1xuXHRcdFx0fSk7XG5cdFx0fSlcblx0XHQudGhlbigob1BvcG92ZXJDb250ZW50OiBhbnkpID0+IHtcblx0XHRcdGlmIChvUG9wb3ZlckNvbnRlbnQpIHtcblx0XHRcdFx0aWYgKG9GcmFnbWVudE1vZGVsLm1vZGVscyAmJiBvRnJhZ21lbnRNb2RlbC5tb2RlbHMuc2VtYW50aWMpIHtcblx0XHRcdFx0XHRvUG9wb3ZlckNvbnRlbnQuc2V0TW9kZWwob0ZyYWdtZW50TW9kZWwubW9kZWxzLnNlbWFudGljLCBcInNlbWFudGljXCIpO1xuXHRcdFx0XHRcdG9Qb3BvdmVyQ29udGVudC5zZXRCaW5kaW5nQ29udGV4dChvRnJhZ21lbnRNb2RlbC5iaW5kaW5nQ29udGV4dHMuc2VtYW50aWMsIFwic2VtYW50aWNcIik7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZiAob0ZyYWdtZW50TW9kZWwuYmluZGluZ0NvbnRleHRzICYmIG9GcmFnbWVudE1vZGVsLmJpbmRpbmdDb250ZXh0cy5lbnRpdHlUeXBlKSB7XG5cdFx0XHRcdFx0b1BvcG92ZXJDb250ZW50LnNldE1vZGVsKG9GcmFnbWVudE1vZGVsLm1vZGVscy5lbnRpdHlUeXBlLCBcImVudGl0eVR5cGVcIik7XG5cdFx0XHRcdFx0b1BvcG92ZXJDb250ZW50LnNldEJpbmRpbmdDb250ZXh0KG9GcmFnbWVudE1vZGVsLmJpbmRpbmdDb250ZXh0cy5lbnRpdHlUeXBlLCBcImVudGl0eVR5cGVcIik7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdHRoaXMucmVzb2x2ZWRwYXlsb2FkID0gdW5kZWZpbmVkO1xuXHRcdFx0cmV0dXJuIG9Qb3BvdmVyQ29udGVudDtcblx0XHR9KTtcbn07XG5TaW1wbGVMaW5rRGVsZWdhdGUuZmV0Y2hBZGRpdGlvbmFsQ29udGVudCA9IGZ1bmN0aW9uIChvUGF5TG9hZDogYW55LCBvTWRjTGlua0NvbnRyb2w6IGFueSkge1xuXHR0aGlzLm9Db250cm9sID0gb01kY0xpbmtDb250cm9sO1xuXHRjb25zdCBhTmF2aWdhdGVSZWdleHBNYXRjaCA9IG9QYXlMb2FkPy5uYXZpZ2F0aW9uUGF0aD8ubWF0Y2goL3soLio/KX0vKTtcblx0Y29uc3Qgb0JpbmRpbmdDb250ZXh0ID1cblx0XHRhTmF2aWdhdGVSZWdleHBNYXRjaCAmJiBhTmF2aWdhdGVSZWdleHBNYXRjaC5sZW5ndGggPiAxICYmIGFOYXZpZ2F0ZVJlZ2V4cE1hdGNoWzFdXG5cdFx0XHQ/IG9NZGNMaW5rQ29udHJvbC5nZXRNb2RlbCgpLmJpbmRDb250ZXh0KGFOYXZpZ2F0ZVJlZ2V4cE1hdGNoWzFdLCBvTWRjTGlua0NvbnRyb2wuZ2V0QmluZGluZ0NvbnRleHQoKSwgeyAkJG93blJlcXVlc3Q6IHRydWUgfSlcblx0XHRcdDogbnVsbDtcblx0dGhpcy5wYXlsb2FkID0gb1BheUxvYWQ7XG5cdGlmIChvTWRjTGlua0NvbnRyb2wgJiYgb01kY0xpbmtDb250cm9sLmlzQShDT05TVEFOVFMuc2FwdWltZGNMaW5rKSkge1xuXHRcdHRoaXMub01ldGFNb2RlbCA9IG9NZGNMaW5rQ29udHJvbC5nZXRNb2RlbCgpLmdldE1ldGFNb2RlbCgpO1xuXHRcdHJldHVybiB0aGlzLmZuVGVtcGxhdGVGcmFnbWVudCgpLnRoZW4oZnVuY3Rpb24gKG9Qb3BvdmVyQ29udGVudDogYW55KSB7XG5cdFx0XHRpZiAob0JpbmRpbmdDb250ZXh0KSB7XG5cdFx0XHRcdG9Qb3BvdmVyQ29udGVudC5zZXRCaW5kaW5nQ29udGV4dChvQmluZGluZ0NvbnRleHQuZ2V0Qm91bmRDb250ZXh0KCkpO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIFtvUG9wb3ZlckNvbnRlbnRdO1xuXHRcdH0pO1xuXHR9XG5cdHJldHVybiBQcm9taXNlLnJlc29sdmUoW10pO1xufTtcblNpbXBsZUxpbmtEZWxlZ2F0ZS5fZmV0Y2hMaW5rQ3VzdG9tRGF0YSA9IGZ1bmN0aW9uIChfb0xpbms6IGFueSkge1xuXHRpZiAoXG5cdFx0X29MaW5rLmdldFBhcmVudCgpICYmXG5cdFx0X29MaW5rLmlzQShDT05TVEFOVFMuc2FwdWltZGNMaW5rKSAmJlxuXHRcdChfb0xpbmsuZ2V0UGFyZW50KCkuaXNBKENPTlNUQU5UUy5zYXBtTGluaykgfHxcblx0XHRcdF9vTGluay5nZXRQYXJlbnQoKS5pc0EoQ09OU1RBTlRTLnNhcG1PYmplY3RJZGVudGlmaWVyKSB8fFxuXHRcdFx0X29MaW5rLmdldFBhcmVudCgpLmlzQShDT05TVEFOVFMuc2FwbU9iamVjdFN0YXR1cykpXG5cdCkge1xuXHRcdHJldHVybiBfb0xpbmsuZ2V0Q3VzdG9tRGF0YSgpO1xuXHR9IGVsc2Uge1xuXHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdH1cbn07XG4vKipcbiAqIEZldGNoZXMgdGhlIHJlbGV2YW50IHtAbGluayBzYXAudWkubWRjLmxpbmsuTGlua0l0ZW19IGZvciB0aGUgTGluayBhbmQgcmV0dXJucyB0aGVtLlxuICpcbiAqIEBwdWJsaWNcbiAqIEBwYXJhbSBvUGF5bG9hZCBUaGUgUGF5bG9hZCBvZiB0aGUgTGluayBnaXZlbiBieSB0aGUgYXBwbGljYXRpb25cbiAqIEBwYXJhbSBvQmluZGluZ0NvbnRleHQgVGhlIENvbnRleHRPYmplY3Qgb2YgdGhlIExpbmtcbiAqIEBwYXJhbSBvSW5mb0xvZyBUaGUgSW5mb0xvZyBvZiB0aGUgTGlua1xuICogQHJldHVybnMgT25jZSByZXNvbHZlZCBhbiBhcnJheSBvZiB7QGxpbmsgc2FwLnVpLm1kYy5saW5rLkxpbmtJdGVtfSBpcyByZXR1cm5lZFxuICovXG5TaW1wbGVMaW5rRGVsZWdhdGUuZmV0Y2hMaW5rSXRlbXMgPSBmdW5jdGlvbiAob1BheWxvYWQ6IGFueSwgb0JpbmRpbmdDb250ZXh0OiBDb250ZXh0LCBvSW5mb0xvZzogYW55KSB7XG5cdGlmIChvQmluZGluZ0NvbnRleHQgJiYgU2ltcGxlTGlua0RlbGVnYXRlLl9nZXRTZW1hbnRpY09iamVjdHMob1BheWxvYWQpKSB7XG5cdFx0Y29uc3Qgb0NvbnRleHRPYmplY3QgPSBvQmluZGluZ0NvbnRleHQuZ2V0T2JqZWN0KCk7XG5cdFx0aWYgKG9JbmZvTG9nKSB7XG5cdFx0XHRvSW5mb0xvZy5pbml0aWFsaXplKFNpbXBsZUxpbmtEZWxlZ2F0ZS5fZ2V0U2VtYW50aWNPYmplY3RzKG9QYXlsb2FkKSk7XG5cdFx0fVxuXHRcdGNvbnN0IF9vTGlua0N1c3RvbURhdGEgPSB0aGlzLl9saW5rICYmIHRoaXMuX2ZldGNoTGlua0N1c3RvbURhdGEodGhpcy5fbGluayk7XG5cdFx0dGhpcy5hTGlua0N1c3RvbURhdGEgPVxuXHRcdFx0X29MaW5rQ3VzdG9tRGF0YSAmJlxuXHRcdFx0dGhpcy5fZmV0Y2hMaW5rQ3VzdG9tRGF0YSh0aGlzLl9saW5rKS5tYXAoZnVuY3Rpb24gKGxpbmtJdGVtOiBhbnkpIHtcblx0XHRcdFx0cmV0dXJuIGxpbmtJdGVtLm1Qcm9wZXJ0aWVzLnZhbHVlO1xuXHRcdFx0fSk7XG5cblx0XHRjb25zdCBvU2VtYW50aWNBdHRyaWJ1dGVzUmVzb2x2ZWQgPSBTaW1wbGVMaW5rRGVsZWdhdGUuX2NhbGN1bGF0ZVNlbWFudGljQXR0cmlidXRlcyhvQ29udGV4dE9iamVjdCwgb1BheWxvYWQsIG9JbmZvTG9nLCB0aGlzLl9saW5rKTtcblx0XHRjb25zdCBvU2VtYW50aWNBdHRyaWJ1dGVzID0gb1NlbWFudGljQXR0cmlidXRlc1Jlc29sdmVkLnJlc3VsdHM7XG5cdFx0Y29uc3Qgb1BheWxvYWRSZXNvbHZlZCA9IG9TZW1hbnRpY0F0dHJpYnV0ZXNSZXNvbHZlZC5wYXlsb2FkO1xuXG5cdFx0cmV0dXJuIFNpbXBsZUxpbmtEZWxlZ2F0ZS5fcmV0cmlldmVOYXZpZ2F0aW9uVGFyZ2V0cyhcIlwiLCBvU2VtYW50aWNBdHRyaWJ1dGVzLCBvUGF5bG9hZFJlc29sdmVkLCBvSW5mb0xvZywgdGhpcy5fbGluaykudGhlbihcblx0XHRcdGZ1bmN0aW9uIChhTGlua3M6IGFueSAvKm9Pd25OYXZpZ2F0aW9uTGluazogYW55Ki8pIHtcblx0XHRcdFx0cmV0dXJuIGFMaW5rcy5sZW5ndGggPT09IDAgPyBudWxsIDogYUxpbmtzO1xuXHRcdFx0fVxuXHRcdCk7XG5cdH0gZWxzZSB7XG5cdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZShudWxsKTtcblx0fVxufTtcblxuLyoqXG4gKiBGaW5kIHRoZSB0eXBlIG9mIHRoZSBsaW5rLlxuICpcbiAqIEBwYXJhbSBwYXlsb2FkIFRoZSBwYXlsb2FkIG9mIHRoZSBtZGMgbGluay5cbiAqIEBwYXJhbSBhTGlua0l0ZW1zIExpbmtzIHJldHVybmVkIGJ5IGNhbGwgdG8gbWRjIF9yZXRyaWV2ZVVubW9kaWZpZWRMaW5rSXRlbXMuXG4gKiBAcmV0dXJucyBUaGUgdHlwZSBvZiB0aGUgbGluayBhcyBkZWZpbmVkIGJ5IG1kYy5cbiAqL1xuU2ltcGxlTGlua0RlbGVnYXRlLl9maW5kTGlua1R5cGUgPSBmdW5jdGlvbiAocGF5bG9hZDogYW55LCBhTGlua0l0ZW1zOiBhbnlbXSk6IGFueSB7XG5cdGxldCBuTGlua1R5cGUsIG9MaW5rSXRlbTtcblx0aWYgKGFMaW5rSXRlbXM/Lmxlbmd0aCA9PT0gMSkge1xuXHRcdG9MaW5rSXRlbSA9IG5ldyBMaW5rSXRlbSh7XG5cdFx0XHR0ZXh0OiBhTGlua0l0ZW1zWzBdLmdldFRleHQoKSxcblx0XHRcdGhyZWY6IGFMaW5rSXRlbXNbMF0uZ2V0SHJlZigpXG5cdFx0fSk7XG5cdFx0bkxpbmtUeXBlID0gcGF5bG9hZC5oYXNRdWlja1ZpZXdGYWNldHMgPT09IFwiZmFsc2VcIiA/IDEgOiAyO1xuXHR9IGVsc2UgaWYgKHBheWxvYWQuaGFzUXVpY2tWaWV3RmFjZXRzID09PSBcImZhbHNlXCIgJiYgYUxpbmtJdGVtcz8ubGVuZ3RoID09PSAwKSB7XG5cdFx0bkxpbmtUeXBlID0gMDtcblx0fSBlbHNlIHtcblx0XHRuTGlua1R5cGUgPSAyO1xuXHR9XG5cdHJldHVybiB7XG5cdFx0bGlua1R5cGU6IG5MaW5rVHlwZSxcblx0XHRsaW5rSXRlbTogb0xpbmtJdGVtXG5cdH07XG59O1xuU2ltcGxlTGlua0RlbGVnYXRlLmZldGNoTGlua1R5cGUgPSBhc3luYyBmdW5jdGlvbiAob1BheWxvYWQ6IGFueSwgb0xpbms6IGFueSkge1xuXHRjb25zdCBfb0N1cnJlbnRMaW5rID0gb0xpbms7XG5cdGNvbnN0IF9vUGF5bG9hZCA9IE9iamVjdC5hc3NpZ24oe30sIG9QYXlsb2FkKTtcblx0Y29uc3Qgb0RlZmF1bHRJbml0aWFsVHlwZSA9IHtcblx0XHRpbml0aWFsVHlwZToge1xuXHRcdFx0dHlwZTogMixcblx0XHRcdGRpcmVjdExpbms6IHVuZGVmaW5lZFxuXHRcdH0sXG5cdFx0cnVudGltZVR5cGU6IHVuZGVmaW5lZFxuXHR9O1xuXHQvLyBjbGVhbiBhcHBTdGF0ZUtleU1hcCBzdG9yYWdlXG5cdGlmICghdGhpcy5hcHBTdGF0ZUtleU1hcCkge1xuXHRcdHRoaXMuYXBwU3RhdGVLZXlNYXAgPSB7fTtcblx0fVxuXG5cdHRyeSB7XG5cdFx0aWYgKF9vUGF5bG9hZD8uc2VtYW50aWNPYmplY3RzKSB7XG5cdFx0XHR0aGlzLl9saW5rID0gb0xpbms7XG5cdFx0XHRsZXQgYUxpbmtJdGVtcyA9IGF3YWl0IF9vQ3VycmVudExpbmsuX3JldHJpZXZlVW5tb2RpZmllZExpbmtJdGVtcygpO1xuXHRcdFx0aWYgKGFMaW5rSXRlbXMubGVuZ3RoID09PSAxKSB7XG5cdFx0XHRcdC8vIFRoaXMgaXMgdGhlIGRpcmVjdCBuYXZpZ2F0aW9uIHVzZSBjYXNlIHNvIHdlIG5lZWQgdG8gcGVyZm9ybSB0aGUgYXBwcm9wcmlhdGUgY2hlY2tzIC8gdHJhbnNmb3JtYXRpb25zXG5cdFx0XHRcdGFMaW5rSXRlbXMgPSBhd2FpdCBfb0N1cnJlbnRMaW5rLnJldHJpZXZlTGlua0l0ZW1zKCk7XG5cdFx0XHR9XG5cdFx0XHRjb25zdCBfTGlua1R5cGUgPSBTaW1wbGVMaW5rRGVsZWdhdGUuX2ZpbmRMaW5rVHlwZShfb1BheWxvYWQsIGFMaW5rSXRlbXMpO1xuXHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0aW5pdGlhbFR5cGU6IHtcblx0XHRcdFx0XHR0eXBlOiBfTGlua1R5cGUubGlua1R5cGUsXG5cdFx0XHRcdFx0ZGlyZWN0TGluazogX0xpbmtUeXBlLmxpbmtJdGVtID8gX0xpbmtUeXBlLmxpbmtJdGVtIDogdW5kZWZpbmVkXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHJ1bnRpbWVUeXBlOiB1bmRlZmluZWRcblx0XHRcdH07XG5cdFx0fSBlbHNlIGlmIChfb1BheWxvYWQ/LmNvbnRhY3Q/Lmxlbmd0aCA+IDApIHtcblx0XHRcdHJldHVybiBvRGVmYXVsdEluaXRpYWxUeXBlO1xuXHRcdH0gZWxzZSBpZiAoX29QYXlsb2FkPy5lbnRpdHlUeXBlICYmIF9vUGF5bG9hZD8ubmF2aWdhdGlvblBhdGgpIHtcblx0XHRcdHJldHVybiBvRGVmYXVsdEluaXRpYWxUeXBlO1xuXHRcdH1cblx0XHR0aHJvdyBuZXcgRXJyb3IoXCJubyBwYXlsb2FkIG9yIHNlbWFudGljT2JqZWN0cyBmb3VuZFwiKTtcblx0fSBjYXRjaCAob0Vycm9yOiBhbnkpIHtcblx0XHRMb2cuZXJyb3IoXCJFcnJvciBpbiBTaW1wbGVMaW5rRGVsZWdhdGUuZmV0Y2hMaW5rVHlwZTogXCIsIG9FcnJvcik7XG5cdH1cbn07XG5cblNpbXBsZUxpbmtEZWxlZ2F0ZS5fUmVtb3ZlVGl0bGVMaW5rRnJvbVRhcmdldHMgPSBmdW5jdGlvbiAoX2FMaW5rSXRlbXM6IGFueVtdLCBfYlRpdGxlSGFzTGluazogYm9vbGVhbiwgX2FUaXRsZUxpbms6IGFueSk6IGFueSB7XG5cdGxldCBfc1RpdGxlTGlua0hyZWYsIF9vTURDTGluaztcblx0bGV0IGJSZXN1bHQ6IGJvb2xlYW4gPSBmYWxzZTtcblx0aWYgKF9iVGl0bGVIYXNMaW5rICYmIF9hVGl0bGVMaW5rICYmIF9hVGl0bGVMaW5rWzBdKSB7XG5cdFx0bGV0IGxpbmtJc1ByaW1hcnlBY3Rpb246IGJvb2xlYW4sIF9zTGlua0ludGVudFdpdGhvdXRQYXJhbWV0ZXJzOiBzdHJpbmc7XG5cdFx0Y29uc3QgX3NUaXRsZUludGVudCA9IF9hVGl0bGVMaW5rWzBdLmludGVudC5zcGxpdChcIj9cIilbMF07XG5cdFx0aWYgKF9hTGlua0l0ZW1zICYmIF9hTGlua0l0ZW1zWzBdKSB7XG5cdFx0XHRfc0xpbmtJbnRlbnRXaXRob3V0UGFyYW1ldGVycyA9IGAjJHtfYUxpbmtJdGVtc1swXS5nZXRQcm9wZXJ0eShcImtleVwiKX1gO1xuXHRcdFx0bGlua0lzUHJpbWFyeUFjdGlvbiA9IF9zVGl0bGVJbnRlbnQgPT09IF9zTGlua0ludGVudFdpdGhvdXRQYXJhbWV0ZXJzO1xuXHRcdFx0aWYgKGxpbmtJc1ByaW1hcnlBY3Rpb24pIHtcblx0XHRcdFx0X3NUaXRsZUxpbmtIcmVmID0gX2FMaW5rSXRlbXNbMF0uZ2V0UHJvcGVydHkoXCJocmVmXCIpO1xuXHRcdFx0XHR0aGlzLnBheWxvYWQudGl0bGVsaW5raHJlZiA9IF9zVGl0bGVMaW5rSHJlZjtcblx0XHRcdFx0aWYgKF9hTGlua0l0ZW1zWzBdLmlzQShDT05TVEFOVFMuc2FwdWltZGNsaW5rTGlua0l0ZW0pKSB7XG5cdFx0XHRcdFx0X29NRENMaW5rID0gX2FMaW5rSXRlbXNbMF0uZ2V0UGFyZW50KCk7XG5cdFx0XHRcdFx0X29NRENMaW5rLmdldE1vZGVsKFwiJHNhcHVpbWRjTGlua1wiKS5zZXRQcm9wZXJ0eShcIi90aXRsZUxpbmtIcmVmXCIsIF9zVGl0bGVMaW5rSHJlZik7XG5cdFx0XHRcdFx0Y29uc3QgYU1MaW5rSXRlbXMgPSBfb01EQ0xpbmtcblx0XHRcdFx0XHRcdC5nZXRNb2RlbChcIiRzYXB1aW1kY0xpbmtcIilcblx0XHRcdFx0XHRcdC5nZXRQcm9wZXJ0eShcIi9saW5rSXRlbXNcIilcblx0XHRcdFx0XHRcdC5maWx0ZXIoZnVuY3Rpb24gKG9MaW5rSXRlbTogYW55KSB7XG5cdFx0XHRcdFx0XHRcdGlmIChgIyR7b0xpbmtJdGVtLmtleX1gICE9PSBfc0xpbmtJbnRlbnRXaXRob3V0UGFyYW1ldGVycykge1xuXHRcdFx0XHRcdFx0XHRcdHJldHVybiBvTGlua0l0ZW07XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdGlmIChhTUxpbmtJdGVtcyAmJiBhTUxpbmtJdGVtcy5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdFx0XHRfb01EQ0xpbmsuZ2V0TW9kZWwoXCIkc2FwdWltZGNMaW5rXCIpLnNldFByb3BlcnR5KFwiL2xpbmtJdGVtcy9cIiwgYU1MaW5rSXRlbXMpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRiUmVzdWx0ID0gdHJ1ZTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXHRyZXR1cm4gYlJlc3VsdDtcbn07XG5TaW1wbGVMaW5rRGVsZWdhdGUuX0lzU2VtYW50aWNPYmplY3REeW5hbWljID0gZnVuY3Rpb24gKGFOZXdMaW5rQ3VzdG9tRGF0YTogYW55LCBvVGhpczogYW55KSB7XG5cdGlmIChhTmV3TGlua0N1c3RvbURhdGEgJiYgb1RoaXMuYUxpbmtDdXN0b21EYXRhKSB7XG5cdFx0cmV0dXJuIChcblx0XHRcdG9UaGlzLmFMaW5rQ3VzdG9tRGF0YS5maWx0ZXIoZnVuY3Rpb24gKGxpbms6IGFueSkge1xuXHRcdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHRcdGFOZXdMaW5rQ3VzdG9tRGF0YS5maWx0ZXIoZnVuY3Rpb24gKG90aGVyTGluazogYW55KSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gb3RoZXJMaW5rICE9PSBsaW5rO1xuXHRcdFx0XHRcdH0pLmxlbmd0aCA+IDBcblx0XHRcdFx0KTtcblx0XHRcdH0pLmxlbmd0aCA+IDBcblx0XHQpO1xuXHR9IGVsc2Uge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxufTtcblNpbXBsZUxpbmtEZWxlZ2F0ZS5fZ2V0TGluZUNvbnRleHQgPSBmdW5jdGlvbiAob1ZpZXc6IGFueSwgbUxpbmVDb250ZXh0OiBhbnkpIHtcblx0aWYgKCFtTGluZUNvbnRleHQpIHtcblx0XHRpZiAob1ZpZXcuZ2V0QWdncmVnYXRpb24oXCJjb250ZW50XCIpWzBdICYmIG9WaWV3LmdldEFnZ3JlZ2F0aW9uKFwiY29udGVudFwiKVswXS5nZXRCaW5kaW5nQ29udGV4dCgpKSB7XG5cdFx0XHRyZXR1cm4gb1ZpZXcuZ2V0QWdncmVnYXRpb24oXCJjb250ZW50XCIpWzBdLmdldEJpbmRpbmdDb250ZXh0KCk7XG5cdFx0fVxuXHR9XG5cdHJldHVybiBtTGluZUNvbnRleHQ7XG59O1xuU2ltcGxlTGlua0RlbGVnYXRlLl9zZXRGaWx0ZXJDb250ZXh0VXJsRm9yU2VsZWN0aW9uVmFyaWFudCA9IGZ1bmN0aW9uIChcblx0b1ZpZXc6IGFueSxcblx0b1NlbGVjdGlvblZhcmlhbnQ6IFNlbGVjdGlvblZhcmlhbnQsXG5cdG9OYXZpZ2F0aW9uU2VydmljZTogYW55XG4pOiBTZWxlY3Rpb25WYXJpYW50IHtcblx0aWYgKG9WaWV3LmdldFZpZXdEYXRhKCkuZW50aXR5U2V0ICYmIG9TZWxlY3Rpb25WYXJpYW50KSB7XG5cdFx0Y29uc3Qgc0NvbnRleHRVcmwgPSBvTmF2aWdhdGlvblNlcnZpY2UuY29uc3RydWN0Q29udGV4dFVybChvVmlldy5nZXRWaWV3RGF0YSgpLmVudGl0eVNldCwgb1ZpZXcuZ2V0TW9kZWwoKSk7XG5cdFx0b1NlbGVjdGlvblZhcmlhbnQuc2V0RmlsdGVyQ29udGV4dFVybChzQ29udGV4dFVybCk7XG5cdH1cblx0cmV0dXJuIG9TZWxlY3Rpb25WYXJpYW50O1xufTtcblxuU2ltcGxlTGlua0RlbGVnYXRlLl9zZXRPYmplY3RNYXBwaW5ncyA9IGZ1bmN0aW9uIChcblx0c1NlbWFudGljT2JqZWN0OiBzdHJpbmcsXG5cdG9QYXJhbXM6IGFueSxcblx0YVNlbWFudGljT2JqZWN0TWFwcGluZ3M6IFJlZ2lzdGVyZWRTZW1hbnRpY09iamVjdE1hcHBpbmdzLFxuXHRvU2VsZWN0aW9uVmFyaWFudDogU2VsZWN0aW9uVmFyaWFudFxuKSB7XG5cdGxldCBoYXNDaGFuZ2VkID0gZmFsc2U7XG5cdGNvbnN0IG1vZGlmaWVkU2VsZWN0aW9uVmFyaWFudCA9IG5ldyBTZWxlY3Rpb25WYXJpYW50KG9TZWxlY3Rpb25WYXJpYW50LnRvSlNPTk9iamVjdCgpKTtcblx0Ly8gaWYgc2VtYW50aWNPYmplY3RNYXBwaW5ncyBoYXMgaXRlbXMgd2l0aCBkeW5hbWljIHNlbWFudGljT2JqZWN0cyB3ZSBuZWVkIHRvIHJlc29sdmUgdGhlbSB1c2luZyBvUGFyYW1zXG5cdGFTZW1hbnRpY09iamVjdE1hcHBpbmdzLmZvckVhY2goZnVuY3Rpb24gKG1hcHBpbmcpIHtcblx0XHRsZXQgbWFwcGluZ1NlbWFudGljT2JqZWN0ID0gbWFwcGluZy5zZW1hbnRpY09iamVjdDtcblx0XHRjb25zdCBtYXBwaW5nU2VtYW50aWNPYmplY3RQYXRoID0gZ2V0RHluYW1pY1BhdGhGcm9tU2VtYW50aWNPYmplY3QobWFwcGluZy5zZW1hbnRpY09iamVjdCk7XG5cdFx0aWYgKG1hcHBpbmdTZW1hbnRpY09iamVjdFBhdGggJiYgb1BhcmFtc1ttYXBwaW5nU2VtYW50aWNPYmplY3RQYXRoXSkge1xuXHRcdFx0bWFwcGluZ1NlbWFudGljT2JqZWN0ID0gb1BhcmFtc1ttYXBwaW5nU2VtYW50aWNPYmplY3RQYXRoXTtcblx0XHR9XG5cdFx0aWYgKHNTZW1hbnRpY09iamVjdCA9PT0gbWFwcGluZ1NlbWFudGljT2JqZWN0KSB7XG5cdFx0XHRjb25zdCBvTWFwcGluZ3MgPSBtYXBwaW5nLml0ZW1zO1xuXHRcdFx0Zm9yIChjb25zdCBpIGluIG9NYXBwaW5ncykge1xuXHRcdFx0XHRjb25zdCBzTG9jYWxQcm9wZXJ0eSA9IG9NYXBwaW5nc1tpXS5rZXk7XG5cdFx0XHRcdGNvbnN0IHNTZW1hbnRpY09iamVjdFByb3BlcnR5ID0gb01hcHBpbmdzW2ldLnZhbHVlO1xuXHRcdFx0XHRpZiAoc0xvY2FsUHJvcGVydHkgIT09IHNTZW1hbnRpY09iamVjdFByb3BlcnR5KSB7XG5cdFx0XHRcdFx0aWYgKG9QYXJhbXNbc0xvY2FsUHJvcGVydHldKSB7XG5cdFx0XHRcdFx0XHRtb2RpZmllZFNlbGVjdGlvblZhcmlhbnQucmVtb3ZlUGFyYW1ldGVyKHNTZW1hbnRpY09iamVjdFByb3BlcnR5KTtcblx0XHRcdFx0XHRcdG1vZGlmaWVkU2VsZWN0aW9uVmFyaWFudC5yZW1vdmVTZWxlY3RPcHRpb24oc1NlbWFudGljT2JqZWN0UHJvcGVydHkpO1xuXHRcdFx0XHRcdFx0bW9kaWZpZWRTZWxlY3Rpb25WYXJpYW50LnJlbmFtZVBhcmFtZXRlcihzTG9jYWxQcm9wZXJ0eSwgc1NlbWFudGljT2JqZWN0UHJvcGVydHkpO1xuXHRcdFx0XHRcdFx0bW9kaWZpZWRTZWxlY3Rpb25WYXJpYW50LnJlbmFtZVNlbGVjdE9wdGlvbihzTG9jYWxQcm9wZXJ0eSwgc1NlbWFudGljT2JqZWN0UHJvcGVydHkpO1xuXHRcdFx0XHRcdFx0b1BhcmFtc1tzU2VtYW50aWNPYmplY3RQcm9wZXJ0eV0gPSBvUGFyYW1zW3NMb2NhbFByb3BlcnR5XTtcblx0XHRcdFx0XHRcdGRlbGV0ZSBvUGFyYW1zW3NMb2NhbFByb3BlcnR5XTtcblx0XHRcdFx0XHRcdGhhc0NoYW5nZWQgPSB0cnVlO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHQvLyBXZSByZW1vdmUgdGhlIHBhcmFtZXRlciBhcyB0aGVyZSBpcyBubyB2YWx1ZVxuXG5cdFx0XHRcdFx0Ly8gVGhlIGxvY2FsIHByb3BlcnR5IGNvbWVzIGZyb20gYSBuYXZpZ2F0aW9uIHByb3BlcnR5XG5cdFx0XHRcdFx0ZWxzZSBpZiAoc0xvY2FsUHJvcGVydHkuc3BsaXQoXCIvXCIpLmxlbmd0aCA+IDEpIHtcblx0XHRcdFx0XHRcdC8vIGZpbmQgdGhlIHByb3BlcnR5IHRvIGJlIHJlbW92ZWRcblx0XHRcdFx0XHRcdGNvbnN0IHByb3BlcnR5VG9CZVJlbW92ZWQgPSBzTG9jYWxQcm9wZXJ0eS5zcGxpdChcIi9cIikuc2xpY2UoLTEpWzBdO1xuXHRcdFx0XHRcdFx0Ly8gVGhlIG5hdmlnYXRpb24gcHJvcGVydHkgaGFzIG5vIHZhbHVlXG5cdFx0XHRcdFx0XHRpZiAoIW9QYXJhbXNbcHJvcGVydHlUb0JlUmVtb3ZlZF0pIHtcblx0XHRcdFx0XHRcdFx0ZGVsZXRlIG9QYXJhbXNbcHJvcGVydHlUb0JlUmVtb3ZlZF07XG5cdFx0XHRcdFx0XHRcdG1vZGlmaWVkU2VsZWN0aW9uVmFyaWFudC5yZW1vdmVQYXJhbWV0ZXIocHJvcGVydHlUb0JlUmVtb3ZlZCk7XG5cdFx0XHRcdFx0XHRcdG1vZGlmaWVkU2VsZWN0aW9uVmFyaWFudC5yZW1vdmVTZWxlY3RPcHRpb24ocHJvcGVydHlUb0JlUmVtb3ZlZCk7XG5cdFx0XHRcdFx0XHR9IGVsc2UgaWYgKHByb3BlcnR5VG9CZVJlbW92ZWQgIT09IHNTZW1hbnRpY09iamVjdFByb3BlcnR5KSB7XG5cdFx0XHRcdFx0XHRcdC8vIFRoZSBuYXZpZ2F0aW9uIHByb3BlcnR5IGhhcyBhIHZhbHVlIGFuZCBwcm9wZXJ0aWVzIG5hbWVzIGFyZSBkaWZmZXJlbnRcblx0XHRcdFx0XHRcdFx0bW9kaWZpZWRTZWxlY3Rpb25WYXJpYW50LnJlbmFtZVBhcmFtZXRlcihwcm9wZXJ0eVRvQmVSZW1vdmVkLCBzU2VtYW50aWNPYmplY3RQcm9wZXJ0eSk7XG5cdFx0XHRcdFx0XHRcdG1vZGlmaWVkU2VsZWN0aW9uVmFyaWFudC5yZW5hbWVTZWxlY3RPcHRpb24ocHJvcGVydHlUb0JlUmVtb3ZlZCwgc1NlbWFudGljT2JqZWN0UHJvcGVydHkpO1xuXHRcdFx0XHRcdFx0XHRvUGFyYW1zW3NTZW1hbnRpY09iamVjdFByb3BlcnR5XSA9IG9QYXJhbXNbcHJvcGVydHlUb0JlUmVtb3ZlZF07XG5cdFx0XHRcdFx0XHRcdGRlbGV0ZSBvUGFyYW1zW3Byb3BlcnR5VG9CZVJlbW92ZWRdO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRkZWxldGUgb1BhcmFtc1tzTG9jYWxQcm9wZXJ0eV07XG5cdFx0XHRcdFx0XHRtb2RpZmllZFNlbGVjdGlvblZhcmlhbnQucmVtb3ZlUGFyYW1ldGVyKHNTZW1hbnRpY09iamVjdFByb3BlcnR5KTtcblx0XHRcdFx0XHRcdG1vZGlmaWVkU2VsZWN0aW9uVmFyaWFudC5yZW1vdmVTZWxlY3RPcHRpb24oc1NlbWFudGljT2JqZWN0UHJvcGVydHkpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fSk7XG5cdHJldHVybiB7IHBhcmFtczogb1BhcmFtcywgaGFzQ2hhbmdlZCwgc2VsZWN0aW9uVmFyaWFudDogbW9kaWZpZWRTZWxlY3Rpb25WYXJpYW50IH07XG59O1xuXG4vKipcbiAqIENhbGwgZ2V0QXBwU3RhdGVLZXlBbmRVcmxQYXJhbWV0ZXJzIGluIG5hdmlnYXRpb24gc2VydmljZSBhbmQgY2FjaGUgaXRzIHJlc3VsdHMuXG4gKlxuICogQHBhcmFtIF90aGlzIFRoZSBpbnN0YW5jZSBvZiBxdWlja3ZpZXdkZWxlZ2F0ZS5cbiAqIEBwYXJhbSBuYXZpZ2F0aW9uU2VydmljZSBUaGUgbmF2aWdhdGlvbiBzZXJ2aWNlLlxuICogQHBhcmFtIHNlbGVjdGlvblZhcmlhbnQgVGhlIGN1cnJlbnQgc2VsZWN0aW9uIHZhcmlhbnQuXG4gKiBAcGFyYW0gc2VtYW50aWNPYmplY3QgVGhlIGN1cnJlbnQgc2VtYW50aWNPYmplY3QuXG4gKi9cblNpbXBsZUxpbmtEZWxlZ2F0ZS5fZ2V0QXBwU3RhdGVLZXlBbmRVcmxQYXJhbWV0ZXJzID0gYXN5bmMgZnVuY3Rpb24gKFxuXHRfdGhpczogdHlwZW9mIFNpbXBsZUxpbmtEZWxlZ2F0ZSxcblx0bmF2aWdhdGlvblNlcnZpY2U6IGFueSxcblx0c2VsZWN0aW9uVmFyaWFudDogU2VsZWN0aW9uVmFyaWFudCxcblx0c2VtYW50aWNPYmplY3Q6IHN0cmluZ1xuKTogUHJvbWlzZTxzdHJpbmdbXT4ge1xuXHRsZXQgYVZhbHVlcyA9IFtdO1xuXG5cdC8vIGNoZWNrIGlmIGRlZmF1bHQgY2FjaGUgY29udGFpbnMgYWxyZWFkeSB0aGUgdW5tb2RpZmllZCBzZWxlY3Rpb25WYXJpYW50XG5cdGlmIChkZWVwRXF1YWwoc2VsZWN0aW9uVmFyaWFudCwgX3RoaXMuYXBwU3RhdGVLZXlNYXBbXCJcIl0/LnNlbGVjdGlvblZhcmlhbnQpKSB7XG5cdFx0Y29uc3QgZGVmYXVsdENhY2hlID0gX3RoaXMuYXBwU3RhdGVLZXlNYXBbXCJcIl07XG5cdFx0cmV0dXJuIFtkZWZhdWx0Q2FjaGUuc2VtYW50aWNBdHRyaWJ1dGVzLCBkZWZhdWx0Q2FjaGUuYXBwc3RhdGVrZXldO1xuXHR9XG5cdC8vIHVwZGF0ZSB1cmwgcGFyYW1ldGVycyBiZWNhdXNlIHRoZXJlIGlzIGEgY2hhbmdlIGluIHNlbGVjdGlvbiB2YXJpYW50XG5cdGlmIChcblx0XHRfdGhpcy5hcHBTdGF0ZUtleU1hcFtgJHtzZW1hbnRpY09iamVjdH1gXSA9PT0gdW5kZWZpbmVkIHx8XG5cdFx0IWRlZXBFcXVhbChfdGhpcy5hcHBTdGF0ZUtleU1hcFtgJHtzZW1hbnRpY09iamVjdH1gXS5zZWxlY3Rpb25WYXJpYW50LCBzZWxlY3Rpb25WYXJpYW50KVxuXHQpIHtcblx0XHRhVmFsdWVzID0gYXdhaXQgdG9FUzZQcm9taXNlKG5hdmlnYXRpb25TZXJ2aWNlLmdldEFwcFN0YXRlS2V5QW5kVXJsUGFyYW1ldGVycyhzZWxlY3Rpb25WYXJpYW50LnRvSlNPTlN0cmluZygpKSk7XG5cdFx0X3RoaXMuYXBwU3RhdGVLZXlNYXBbYCR7c2VtYW50aWNPYmplY3R9YF0gPSB7XG5cdFx0XHRzZW1hbnRpY0F0dHJpYnV0ZXM6IGFWYWx1ZXNbMF0sXG5cdFx0XHRhcHBzdGF0ZWtleTogYVZhbHVlc1sxXSxcblx0XHRcdHNlbGVjdGlvblZhcmlhbnQ6IHNlbGVjdGlvblZhcmlhbnRcblx0XHR9O1xuXHR9IGVsc2Uge1xuXHRcdGNvbnN0IGNhY2hlID0gX3RoaXMuYXBwU3RhdGVLZXlNYXBbYCR7c2VtYW50aWNPYmplY3R9YF07XG5cdFx0YVZhbHVlcyA9IFtjYWNoZS5zZW1hbnRpY0F0dHJpYnV0ZXMsIGNhY2hlLmFwcHN0YXRla2V5XTtcblx0fVxuXHRyZXR1cm4gYVZhbHVlcztcbn07XG5cblNpbXBsZUxpbmtEZWxlZ2F0ZS5fZ2V0TGlua0l0ZW1XaXRoTmV3UGFyYW1ldGVyID0gYXN5bmMgZnVuY3Rpb24gKFxuXHRfdGhhdDogYW55LFxuXHRfYlRpdGxlSGFzTGluazogYm9vbGVhbixcblx0X2FUaXRsZUxpbms6IHN0cmluZ1tdLFxuXHRfb0xpbmtJdGVtOiBhbnksXG5cdF9vU2hlbGxTZXJ2aWNlczogYW55LFxuXHRfb1BheWxvYWQ6IGFueSxcblx0X29QYXJhbXM6IGFueSxcblx0X3NBcHBTdGF0ZUtleTogc3RyaW5nLFxuXHRfb1NlbGVjdGlvblZhcmlhbnQ6IFNlbGVjdGlvblZhcmlhbnQsXG5cdF9vTmF2aWdhdGlvblNlcnZpY2U6IE5hdmlnYXRpb25TZXJ2aWNlXG4pOiBQcm9taXNlPGFueT4ge1xuXHRyZXR1cm4gX29TaGVsbFNlcnZpY2VzLmV4cGFuZENvbXBhY3RIYXNoKF9vTGlua0l0ZW0uZ2V0SHJlZigpKS50aGVuKGFzeW5jIGZ1bmN0aW9uIChzSGFzaDogYW55KSB7XG5cdFx0Y29uc3Qgb1NoZWxsSGFzaCA9IF9vU2hlbGxTZXJ2aWNlcy5wYXJzZVNoZWxsSGFzaChzSGFzaCk7XG5cdFx0Y29uc3QgcGFyYW1zID0gT2JqZWN0LmFzc2lnbih7fSwgX29QYXJhbXMpO1xuXHRcdGNvbnN0IHtcblx0XHRcdHBhcmFtczogb05ld1BhcmFtcyxcblx0XHRcdGhhc0NoYW5nZWQsXG5cdFx0XHRzZWxlY3Rpb25WYXJpYW50OiBuZXdTZWxlY3Rpb25WYXJpYW50XG5cdFx0fSA9IFNpbXBsZUxpbmtEZWxlZ2F0ZS5fc2V0T2JqZWN0TWFwcGluZ3Mob1NoZWxsSGFzaC5zZW1hbnRpY09iamVjdCwgcGFyYW1zLCBfb1BheWxvYWQuc2VtYW50aWNPYmplY3RNYXBwaW5ncywgX29TZWxlY3Rpb25WYXJpYW50KTtcblx0XHRpZiAoaGFzQ2hhbmdlZCkge1xuXHRcdFx0Y29uc3QgYVZhbHVlcyA9IGF3YWl0IFNpbXBsZUxpbmtEZWxlZ2F0ZS5fZ2V0QXBwU3RhdGVLZXlBbmRVcmxQYXJhbWV0ZXJzKFxuXHRcdFx0XHRfdGhhdCxcblx0XHRcdFx0X29OYXZpZ2F0aW9uU2VydmljZSxcblx0XHRcdFx0bmV3U2VsZWN0aW9uVmFyaWFudCxcblx0XHRcdFx0b1NoZWxsSGFzaC5zZW1hbnRpY09iamVjdFxuXHRcdFx0KTtcblxuXHRcdFx0X3NBcHBTdGF0ZUtleSA9IGFWYWx1ZXNbMV07XG5cdFx0fVxuXHRcdGNvbnN0IG9OZXdTaGVsbEhhc2ggPSB7XG5cdFx0XHR0YXJnZXQ6IHtcblx0XHRcdFx0c2VtYW50aWNPYmplY3Q6IG9TaGVsbEhhc2guc2VtYW50aWNPYmplY3QsXG5cdFx0XHRcdGFjdGlvbjogb1NoZWxsSGFzaC5hY3Rpb25cblx0XHRcdH0sXG5cdFx0XHRwYXJhbXM6IG9OZXdQYXJhbXMsXG5cdFx0XHRhcHBTdGF0ZUtleTogX3NBcHBTdGF0ZUtleVxuXHRcdH07XG5cdFx0ZGVsZXRlIG9OZXdTaGVsbEhhc2gucGFyYW1zW1wic2FwLXhhcHAtc3RhdGVcIl07XG5cdFx0X29MaW5rSXRlbS5zZXRIcmVmKGAjJHtfb1NoZWxsU2VydmljZXMuY29uc3RydWN0U2hlbGxIYXNoKG9OZXdTaGVsbEhhc2gpfWApO1xuXHRcdF9vUGF5bG9hZC5hU2VtYW50aWNMaW5rcy5wdXNoKF9vTGlua0l0ZW0uZ2V0SHJlZigpKTtcblx0XHQvLyBUaGUgbGluayBpcyByZW1vdmVkIGZyb20gdGhlIHRhcmdldCBsaXN0IGJlY2F1c2UgdGhlIHRpdGxlIGxpbmsgaGFzIHNhbWUgdGFyZ2V0LlxuXHRcdHJldHVybiBTaW1wbGVMaW5rRGVsZWdhdGUuX1JlbW92ZVRpdGxlTGlua0Zyb21UYXJnZXRzLmJpbmQoX3RoYXQpKFtfb0xpbmtJdGVtXSwgX2JUaXRsZUhhc0xpbmssIF9hVGl0bGVMaW5rKTtcblx0fSk7XG59O1xuU2ltcGxlTGlua0RlbGVnYXRlLl9yZW1vdmVFbXB0eUxpbmtJdGVtID0gZnVuY3Rpb24gKGFMaW5rSXRlbXM6IGFueSk6IGFueVtdIHtcblx0cmV0dXJuIGFMaW5rSXRlbXMuZmlsdGVyKChsaW5rSXRlbTogYW55KSA9PiB7XG5cdFx0cmV0dXJuIGxpbmtJdGVtICE9PSB1bmRlZmluZWQ7XG5cdH0pO1xufTtcbi8qKlxuICogRW5hYmxlcyB0aGUgbW9kaWZpY2F0aW9uIG9mIExpbmtJdGVtcyBiZWZvcmUgdGhlIHBvcG92ZXIgb3BlbnMuIFRoaXMgZW5hYmxlcyBhZGRpdGlvbmFsIHBhcmFtZXRlcnNcbiAqIHRvIGJlIGFkZGVkIHRvIHRoZSBsaW5rLlxuICpcbiAqIEBwYXJhbSBvUGF5bG9hZCBUaGUgcGF5bG9hZCBvZiB0aGUgTGluayBnaXZlbiBieSB0aGUgYXBwbGljYXRpb25cbiAqIEBwYXJhbSBvQmluZGluZ0NvbnRleHQgVGhlIGJpbmRpbmcgY29udGV4dCBvZiB0aGUgTGlua1xuICogQHBhcmFtIGFMaW5rSXRlbXMgVGhlIExpbmtJdGVtcyBvZiB0aGUgTGluayB0aGF0IGNhbiBiZSBtb2RpZmllZFxuICogQHJldHVybnMgT25jZSByZXNvbHZlZCBhbiBhcnJheSBvZiB7QGxpbmsgc2FwLnVpLm1kYy5saW5rLkxpbmtJdGVtfSBpcyByZXR1cm5lZFxuICovXG5TaW1wbGVMaW5rRGVsZWdhdGUubW9kaWZ5TGlua0l0ZW1zID0gYXN5bmMgZnVuY3Rpb24gKG9QYXlsb2FkOiBhbnksIG9CaW5kaW5nQ29udGV4dDogQ29udGV4dCwgYUxpbmtJdGVtczogYW55KSB7XG5cdGNvbnN0IHByaW1hcnlBY3Rpb25Jc0FjdGl2ZSA9IChhd2FpdCBGaWVsZEhlbHBlci5jaGVja1ByaW1hcnlBY3Rpb25zKG9QYXlsb2FkLCB0cnVlKSkgYXMgYW55O1xuXHRjb25zdCBhVGl0bGVMaW5rID0gcHJpbWFyeUFjdGlvbklzQWN0aXZlLnRpdGxlTGluaztcblx0Y29uc3QgYlRpdGxlSGFzTGluazogYm9vbGVhbiA9IHByaW1hcnlBY3Rpb25Jc0FjdGl2ZS5oYXNUaXRsZUxpbms7XG5cdGlmIChhTGlua0l0ZW1zLmxlbmd0aCAhPT0gMCkge1xuXHRcdHRoaXMucGF5bG9hZCA9IG9QYXlsb2FkO1xuXHRcdGNvbnN0IG9MaW5rID0gYUxpbmtJdGVtc1swXS5nZXRQYXJlbnQoKTtcblx0XHRjb25zdCBvVmlldyA9IENvbW1vblV0aWxzLmdldFRhcmdldFZpZXcob0xpbmspO1xuXHRcdGNvbnN0IG9BcHBDb21wb25lbnQgPSBDb21tb25VdGlscy5nZXRBcHBDb21wb25lbnQob1ZpZXcpO1xuXHRcdGNvbnN0IG9TaGVsbFNlcnZpY2VzID0gb0FwcENvbXBvbmVudC5nZXRTaGVsbFNlcnZpY2VzKCk7XG5cdFx0aWYgKCFvU2hlbGxTZXJ2aWNlcy5oYXNVU2hlbGwoKSkge1xuXHRcdFx0TG9nLmVycm9yKFwiUXVpY2tWaWV3RGVsZWdhdGU6IENhbm5vdCByZXRyaWV2ZSB0aGUgc2hlbGwgc2VydmljZXNcIik7XG5cdFx0XHRyZXR1cm4gUHJvbWlzZS5yZWplY3QoKTtcblx0XHR9XG5cdFx0Y29uc3Qgb01ldGFNb2RlbCA9IG9WaWV3LmdldE1vZGVsKCkuZ2V0TWV0YU1vZGVsKCkgYXMgT0RhdGFNZXRhTW9kZWw7XG5cdFx0bGV0IG1MaW5lQ29udGV4dCA9IG9MaW5rLmdldEJpbmRpbmdDb250ZXh0KCk7XG5cdFx0Y29uc3Qgb1RhcmdldEluZm86IGFueSA9IHtcblx0XHRcdHNlbWFudGljT2JqZWN0OiBvUGF5bG9hZC5tYWluU2VtYW50aWNPYmplY3QsXG5cdFx0XHRhY3Rpb246IFwiXCJcblx0XHR9O1xuXG5cdFx0dHJ5IHtcblx0XHRcdGNvbnN0IGFOZXdMaW5rQ3VzdG9tRGF0YSA9XG5cdFx0XHRcdG9MaW5rICYmXG5cdFx0XHRcdHRoaXMuX2ZldGNoTGlua0N1c3RvbURhdGEob0xpbmspLm1hcChmdW5jdGlvbiAobGlua0l0ZW06IGFueSkge1xuXHRcdFx0XHRcdHJldHVybiBsaW5rSXRlbS5tUHJvcGVydGllcy52YWx1ZTtcblx0XHRcdFx0fSk7XG5cdFx0XHQvLyBjaGVjayBpZiBhbGwgbGluayBpdGVtcyBpbiB0aGlzLmFMaW5rQ3VzdG9tRGF0YSBhcmUgYWxzbyBwcmVzZW50IGluIGFOZXdMaW5rQ3VzdG9tRGF0YVxuXHRcdFx0aWYgKFNpbXBsZUxpbmtEZWxlZ2F0ZS5fSXNTZW1hbnRpY09iamVjdER5bmFtaWMoYU5ld0xpbmtDdXN0b21EYXRhLCB0aGlzKSkge1xuXHRcdFx0XHQvLyBpZiB0aGUgY3VzdG9tRGF0YSBjaGFuZ2VkIHRoZXJlIGFyZSBkaWZmZXJlbnQgTGlua0l0ZW1zIHRvIGRpc3BsYXlcblx0XHRcdFx0Y29uc3Qgb1NlbWFudGljQXR0cmlidXRlc1Jlc29sdmVkID0gU2ltcGxlTGlua0RlbGVnYXRlLl9jYWxjdWxhdGVTZW1hbnRpY0F0dHJpYnV0ZXMoXG5cdFx0XHRcdFx0b0JpbmRpbmdDb250ZXh0LmdldE9iamVjdCgpLFxuXHRcdFx0XHRcdG9QYXlsb2FkLFxuXHRcdFx0XHRcdHVuZGVmaW5lZCxcblx0XHRcdFx0XHR0aGlzLl9saW5rXG5cdFx0XHRcdCk7XG5cdFx0XHRcdGNvbnN0IG9TZW1hbnRpY0F0dHJpYnV0ZXMgPSBvU2VtYW50aWNBdHRyaWJ1dGVzUmVzb2x2ZWQucmVzdWx0cztcblx0XHRcdFx0Y29uc3Qgb1BheWxvYWRSZXNvbHZlZCA9IG9TZW1hbnRpY0F0dHJpYnV0ZXNSZXNvbHZlZC5wYXlsb2FkO1xuXHRcdFx0XHRhTGlua0l0ZW1zID0gYXdhaXQgU2ltcGxlTGlua0RlbGVnYXRlLl9yZXRyaWV2ZU5hdmlnYXRpb25UYXJnZXRzKFxuXHRcdFx0XHRcdFwiXCIsXG5cdFx0XHRcdFx0b1NlbWFudGljQXR0cmlidXRlcyxcblx0XHRcdFx0XHRvUGF5bG9hZFJlc29sdmVkLFxuXHRcdFx0XHRcdHVuZGVmaW5lZCxcblx0XHRcdFx0XHR0aGlzLl9saW5rXG5cdFx0XHRcdCk7XG5cdFx0XHR9XG5cdFx0XHRjb25zdCBvTmF2aWdhdGlvblNlcnZpY2UgPSBvQXBwQ29tcG9uZW50LmdldE5hdmlnYXRpb25TZXJ2aWNlKCk7XG5cdFx0XHRjb25zdCBvQ29udHJvbGxlciA9IG9WaWV3LmdldENvbnRyb2xsZXIoKSBhcyBQYWdlQ29udHJvbGxlcjtcblx0XHRcdGxldCBvU2VsZWN0aW9uVmFyaWFudDtcblx0XHRcdGxldCBtTGluZUNvbnRleHREYXRhO1xuXHRcdFx0bUxpbmVDb250ZXh0ID0gU2ltcGxlTGlua0RlbGVnYXRlLl9nZXRMaW5lQ29udGV4dChvVmlldywgbUxpbmVDb250ZXh0KTtcblx0XHRcdGNvbnN0IHNNZXRhUGF0aCA9IG9NZXRhTW9kZWwuZ2V0TWV0YVBhdGgobUxpbmVDb250ZXh0LmdldFBhdGgoKSk7XG5cdFx0XHRtTGluZUNvbnRleHREYXRhID0gb0NvbnRyb2xsZXIuX2ludGVudEJhc2VkTmF2aWdhdGlvbi5yZW1vdmVTZW5zaXRpdmVEYXRhKG1MaW5lQ29udGV4dC5nZXRPYmplY3QoKSwgc01ldGFQYXRoKTtcblx0XHRcdG1MaW5lQ29udGV4dERhdGEgPSBvQ29udHJvbGxlci5faW50ZW50QmFzZWROYXZpZ2F0aW9uLnByZXBhcmVDb250ZXh0Rm9yRXh0ZXJuYWxOYXZpZ2F0aW9uKG1MaW5lQ29udGV4dERhdGEsIG1MaW5lQ29udGV4dCk7XG5cdFx0XHRvU2VsZWN0aW9uVmFyaWFudCA9IG9OYXZpZ2F0aW9uU2VydmljZS5taXhBdHRyaWJ1dGVzQW5kU2VsZWN0aW9uVmFyaWFudChcblx0XHRcdFx0bUxpbmVDb250ZXh0RGF0YS5zZW1hbnRpY0F0dHJpYnV0ZXMsXG5cdFx0XHRcdG5ldyBTZWxlY3Rpb25WYXJpYW50KClcblx0XHRcdCkgYXMgU2VsZWN0aW9uVmFyaWFudDtcblx0XHRcdG9UYXJnZXRJbmZvLnByb3BlcnRpZXNXaXRob3V0Q29uZmxpY3QgPSBtTGluZUNvbnRleHREYXRhLnByb3BlcnRpZXNXaXRob3V0Q29uZmxpY3Q7XG5cdFx0XHQvL1RPIG1vZGlmeSB0aGUgc2VsZWN0aW9uIHZhcmlhbnQgZnJvbSB0aGUgRXh0ZW5zaW9uIEFQSVxuXHRcdFx0b0NvbnRyb2xsZXIuaW50ZW50QmFzZWROYXZpZ2F0aW9uLmFkYXB0TmF2aWdhdGlvbkNvbnRleHQob1NlbGVjdGlvblZhcmlhbnQsIG9UYXJnZXRJbmZvKTtcblx0XHRcdFNpbXBsZUxpbmtEZWxlZ2F0ZS5fcmVtb3ZlVGVjaG5pY2FsUGFyYW1ldGVycyhvU2VsZWN0aW9uVmFyaWFudCk7XG5cdFx0XHRvU2VsZWN0aW9uVmFyaWFudCA9IFNpbXBsZUxpbmtEZWxlZ2F0ZS5fc2V0RmlsdGVyQ29udGV4dFVybEZvclNlbGVjdGlvblZhcmlhbnQob1ZpZXcsIG9TZWxlY3Rpb25WYXJpYW50LCBvTmF2aWdhdGlvblNlcnZpY2UpO1xuXHRcdFx0Y29uc3QgYVZhbHVlcyA9IGF3YWl0IFNpbXBsZUxpbmtEZWxlZ2F0ZS5fZ2V0QXBwU3RhdGVLZXlBbmRVcmxQYXJhbWV0ZXJzKHRoaXMsIG9OYXZpZ2F0aW9uU2VydmljZSwgb1NlbGVjdGlvblZhcmlhbnQsIFwiXCIpO1xuXHRcdFx0Y29uc3Qgb1BhcmFtcyA9IGFWYWx1ZXNbMF07XG5cdFx0XHRjb25zdCBhcHBTdGF0ZUtleSA9IGFWYWx1ZXNbMV07XG5cdFx0XHRsZXQgdGl0bGVMaW5rdG9CZVJlbW92ZTogYW55O1xuXHRcdFx0b1BheWxvYWQuYVNlbWFudGljTGlua3MgPSBbXTtcblx0XHRcdGFMaW5rSXRlbXMgPSBTaW1wbGVMaW5rRGVsZWdhdGUuX3JlbW92ZUVtcHR5TGlua0l0ZW0oYUxpbmtJdGVtcyk7XG5cdFx0XHRmb3IgKGNvbnN0IGluZGV4IGluIGFMaW5rSXRlbXMpIHtcblx0XHRcdFx0dGl0bGVMaW5rdG9CZVJlbW92ZSA9IGF3YWl0IFNpbXBsZUxpbmtEZWxlZ2F0ZS5fZ2V0TGlua0l0ZW1XaXRoTmV3UGFyYW1ldGVyKFxuXHRcdFx0XHRcdHRoaXMsXG5cdFx0XHRcdFx0YlRpdGxlSGFzTGluayxcblx0XHRcdFx0XHRhVGl0bGVMaW5rLFxuXHRcdFx0XHRcdGFMaW5rSXRlbXNbaW5kZXhdLFxuXHRcdFx0XHRcdG9TaGVsbFNlcnZpY2VzLFxuXHRcdFx0XHRcdG9QYXlsb2FkLFxuXHRcdFx0XHRcdG9QYXJhbXMsXG5cdFx0XHRcdFx0YXBwU3RhdGVLZXksXG5cdFx0XHRcdFx0b1NlbGVjdGlvblZhcmlhbnQsXG5cdFx0XHRcdFx0b05hdmlnYXRpb25TZXJ2aWNlXG5cdFx0XHRcdCk7XG5cdFx0XHRcdGlmICh0aXRsZUxpbmt0b0JlUmVtb3ZlID09PSB0cnVlKSB7XG5cdFx0XHRcdFx0YUxpbmtJdGVtc1tpbmRleF0gPSB1bmRlZmluZWQ7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdHJldHVybiBTaW1wbGVMaW5rRGVsZWdhdGUuX3JlbW92ZUVtcHR5TGlua0l0ZW0oYUxpbmtJdGVtcyk7XG5cdFx0fSBjYXRjaCAob0Vycm9yOiBhbnkpIHtcblx0XHRcdExvZy5lcnJvcihcIkVycm9yIHdoaWxlIGdldHRpbmcgdGhlIG5hdmlnYXRpb24gc2VydmljZVwiLCBvRXJyb3IpO1xuXHRcdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0XHR9XG5cdH0gZWxzZSB7XG5cdFx0cmV0dXJuIGFMaW5rSXRlbXM7XG5cdH1cbn07XG5TaW1wbGVMaW5rRGVsZWdhdGUuYmVmb3JlTmF2aWdhdGlvbkNhbGxiYWNrID0gZnVuY3Rpb24gKG9QYXlsb2FkOiBhbnksIG9FdmVudDogYW55KSB7XG5cdGNvbnN0IG9Tb3VyY2UgPSBvRXZlbnQuZ2V0U291cmNlKCksXG5cdFx0c0hyZWYgPSBvRXZlbnQuZ2V0UGFyYW1ldGVyKFwiaHJlZlwiKSxcblx0XHRvVVJMUGFyc2luZyA9IEZhY3RvcnkuZ2V0U2VydmljZShcIlVSTFBhcnNpbmdcIiksXG5cdFx0b0hhc2ggPSBzSHJlZiAmJiBvVVJMUGFyc2luZy5wYXJzZVNoZWxsSGFzaChzSHJlZik7XG5cblx0S2VlcEFsaXZlSGVscGVyLnN0b3JlQ29udHJvbFJlZnJlc2hTdHJhdGVneUZvckhhc2gob1NvdXJjZSwgb0hhc2gpO1xuXG5cdHJldHVybiBQcm9taXNlLnJlc29sdmUodHJ1ZSk7XG59O1xuU2ltcGxlTGlua0RlbGVnYXRlLl9yZW1vdmVUZWNobmljYWxQYXJhbWV0ZXJzID0gZnVuY3Rpb24gKG9TZWxlY3Rpb25WYXJpYW50OiBhbnkpIHtcblx0b1NlbGVjdGlvblZhcmlhbnQucmVtb3ZlU2VsZWN0T3B0aW9uKFwiQG9kYXRhLmNvbnRleHRcIik7XG5cdG9TZWxlY3Rpb25WYXJpYW50LnJlbW92ZVNlbGVjdE9wdGlvbihcIkBvZGF0YS5tZXRhZGF0YUV0YWdcIik7XG5cdG9TZWxlY3Rpb25WYXJpYW50LnJlbW92ZVNlbGVjdE9wdGlvbihcIlNBUF9fTWVzc2FnZXNcIik7XG59O1xuXG5TaW1wbGVMaW5rRGVsZWdhdGUuX2dldFNlbWFudGljT2JqZWN0Q3VzdG9tRGF0YVZhbHVlID0gZnVuY3Rpb24gKGFMaW5rQ3VzdG9tRGF0YTogYW55LCBvU2VtYW50aWNPYmplY3RzUmVzb2x2ZWQ6IGFueSk6IHZvaWQge1xuXHRsZXQgc1Byb3BlcnR5TmFtZTogc3RyaW5nLCBzQ3VzdG9tRGF0YVZhbHVlOiBzdHJpbmc7XG5cdGZvciAobGV0IGlDdXN0b21EYXRhQ291bnQgPSAwOyBpQ3VzdG9tRGF0YUNvdW50IDwgYUxpbmtDdXN0b21EYXRhLmxlbmd0aDsgaUN1c3RvbURhdGFDb3VudCsrKSB7XG5cdFx0c1Byb3BlcnR5TmFtZSA9IGFMaW5rQ3VzdG9tRGF0YVtpQ3VzdG9tRGF0YUNvdW50XS5nZXRLZXkoKTtcblx0XHRzQ3VzdG9tRGF0YVZhbHVlID0gYUxpbmtDdXN0b21EYXRhW2lDdXN0b21EYXRhQ291bnRdLmdldFZhbHVlKCk7XG5cdFx0b1NlbWFudGljT2JqZWN0c1Jlc29sdmVkW3NQcm9wZXJ0eU5hbWVdID0geyB2YWx1ZTogc0N1c3RvbURhdGFWYWx1ZSB9O1xuXHR9XG59O1xuXG4vKipcbiAqIENoZWNrIHRoZSBzZW1hbnRpYyBvYmplY3QgbmFtZSBpZiBpdCBpcyBkeW5hbWljIG9yIG5vdC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHBhdGhPclZhbHVlIFRoZSBzZW1hbnRpYyBvYmplY3QgcGF0aCBvciBuYW1lXG4gKiBAcmV0dXJucyBUcnVlIGlmIHNlbWFudGljIG9iamVjdCBpcyBkeW5hbWljXG4gKi9cblNpbXBsZUxpbmtEZWxlZ2F0ZS5faXNEeW5hbWljUGF0aCA9IGZ1bmN0aW9uIChwYXRoT3JWYWx1ZTogc3RyaW5nKTogYm9vbGVhbiB7XG5cdGlmIChwYXRoT3JWYWx1ZSAmJiBwYXRoT3JWYWx1ZS5pbmRleE9mKFwie1wiKSA9PT0gMCAmJiBwYXRoT3JWYWx1ZS5pbmRleE9mKFwifVwiKSA9PT0gcGF0aE9yVmFsdWUubGVuZ3RoIC0gMSkge1xuXHRcdHJldHVybiB0cnVlO1xuXHR9IGVsc2Uge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxufTtcblxuLyoqXG4gKiBVcGRhdGUgdGhlIHBheWxvYWQgd2l0aCBzZW1hbnRpYyBvYmplY3QgdmFsdWVzIGZyb20gY3VzdG9tIGRhdGEgb2YgTGluay5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHBheWxvYWQgVGhlIHBheWxvYWQgb2YgdGhlIG1kYyBsaW5rLlxuICogQHBhcmFtIG5ld1BheWxvYWQgVGhlIG5ldyB1cGRhdGVkIHBheWxvYWQuXG4gKiBAcGFyYW0gc2VtYW50aWNPYmplY3ROYW1lIFRoZSBzZW1hbnRpYyBvYmplY3QgbmFtZSByZXNvbHZlZC5cbiAqL1xuU2ltcGxlTGlua0RlbGVnYXRlLl91cGRhdGVQYXlsb2FkV2l0aFJlc29sdmVkU2VtYW50aWNPYmplY3RWYWx1ZSA9IGZ1bmN0aW9uIChcblx0cGF5bG9hZDogUmVnaXN0ZXJlZFBheWxvYWQsXG5cdG5ld1BheWxvYWQ6IFJlZ2lzdGVyZWRQYXlsb2FkLFxuXHRzZW1hbnRpY09iamVjdE5hbWU6IHN0cmluZ1xuKTogdm9pZCB7XG5cdGlmIChTaW1wbGVMaW5rRGVsZWdhdGUuX2lzRHluYW1pY1BhdGgocGF5bG9hZC5tYWluU2VtYW50aWNPYmplY3QpKSB7XG5cdFx0aWYgKHNlbWFudGljT2JqZWN0TmFtZSkge1xuXHRcdFx0bmV3UGF5bG9hZC5tYWluU2VtYW50aWNPYmplY3QgPSBzZW1hbnRpY09iamVjdE5hbWU7XG5cdFx0fSBlbHNlIHtcblx0XHRcdC8vIG5vIHZhbHVlIGZyb20gQ3VzdG9tIERhdGEsIHNvIHJlbW92aW5nIG1haW5TZW1hbnRpY09iamVjdFxuXHRcdFx0bmV3UGF5bG9hZC5tYWluU2VtYW50aWNPYmplY3QgPSB1bmRlZmluZWQ7XG5cdFx0fVxuXHR9XG5cdHN3aXRjaCAodHlwZW9mIHNlbWFudGljT2JqZWN0TmFtZSkge1xuXHRcdGNhc2UgXCJzdHJpbmdcIjpcblx0XHRcdG5ld1BheWxvYWQuc2VtYW50aWNPYmplY3RzUmVzb2x2ZWQ/LnB1c2goc2VtYW50aWNPYmplY3ROYW1lKTtcblx0XHRcdG5ld1BheWxvYWQuc2VtYW50aWNPYmplY3RzLnB1c2goc2VtYW50aWNPYmplY3ROYW1lKTtcblx0XHRcdGJyZWFrO1xuXHRcdGNhc2UgXCJvYmplY3RcIjpcblx0XHRcdGZvciAoY29uc3QgaiBpbiBzZW1hbnRpY09iamVjdE5hbWUgYXMgc3RyaW5nW10pIHtcblx0XHRcdFx0bmV3UGF5bG9hZC5zZW1hbnRpY09iamVjdHNSZXNvbHZlZD8ucHVzaChzZW1hbnRpY09iamVjdE5hbWVbal0pO1xuXHRcdFx0XHRuZXdQYXlsb2FkLnNlbWFudGljT2JqZWN0cy5wdXNoKHNlbWFudGljT2JqZWN0TmFtZVtqXSk7XG5cdFx0XHR9XG5cdFx0XHRicmVhaztcblx0XHRkZWZhdWx0OlxuXHR9XG59O1xuXG5TaW1wbGVMaW5rRGVsZWdhdGUuX2NyZWF0ZU5ld1BheWxvYWRXaXRoRHluYW1pY1NlbWFudGljT2JqZWN0c1Jlc29sdmVkID0gZnVuY3Rpb24gKFxuXHRwYXlsb2FkOiBSZWdpc3RlcmVkUGF5bG9hZCxcblx0c2VtYW50aWNPYmplY3RzUmVzb2x2ZWQ6IGFueSxcblx0bmV3UGF5bG9hZDogUmVnaXN0ZXJlZFBheWxvYWRcbik6IHZvaWQge1xuXHRsZXQgc2VtYW50aWNPYmplY3ROYW1lOiBzdHJpbmcsIHRtcFByb3BlcnR5TmFtZTogc3RyaW5nO1xuXHRmb3IgKGNvbnN0IGkgaW4gcGF5bG9hZC5zZW1hbnRpY09iamVjdHMpIHtcblx0XHRzZW1hbnRpY09iamVjdE5hbWUgPSBwYXlsb2FkLnNlbWFudGljT2JqZWN0c1tpXTtcblx0XHRpZiAoU2ltcGxlTGlua0RlbGVnYXRlLl9pc0R5bmFtaWNQYXRoKHNlbWFudGljT2JqZWN0TmFtZSkpIHtcblx0XHRcdHRtcFByb3BlcnR5TmFtZSA9IHNlbWFudGljT2JqZWN0TmFtZS5zdWJzdHIoMSwgc2VtYW50aWNPYmplY3ROYW1lLmluZGV4T2YoXCJ9XCIpIC0gMSk7XG5cdFx0XHRzZW1hbnRpY09iamVjdE5hbWUgPSBzZW1hbnRpY09iamVjdHNSZXNvbHZlZFt0bXBQcm9wZXJ0eU5hbWVdLnZhbHVlO1xuXHRcdFx0U2ltcGxlTGlua0RlbGVnYXRlLl91cGRhdGVQYXlsb2FkV2l0aFJlc29sdmVkU2VtYW50aWNPYmplY3RWYWx1ZShwYXlsb2FkLCBuZXdQYXlsb2FkLCBzZW1hbnRpY09iamVjdE5hbWUpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRuZXdQYXlsb2FkLnNlbWFudGljT2JqZWN0cy5wdXNoKHNlbWFudGljT2JqZWN0TmFtZSk7XG5cdFx0fVxuXHR9XG59O1xuXG4vKipcbiAqIFVwZGF0ZSB0aGUgc2VtYW50aWMgb2JqZWN0IG5hbWUgZnJvbSB0aGUgcmVzb2x2ZWQgdmFsdWUgZm9yIHRoZSBtYXBwaW5ncyBhdHRyaWJ1dGVzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0gbWRjUGF5bG9hZCBUaGUgcGF5bG9hZCBnaXZlbiBieSB0aGUgYXBwbGljYXRpb24uXG4gKiBAcGFyYW0gbWRjUGF5bG9hZFdpdGhEeW5hbWljU2VtYW50aWNPYmplY3RzUmVzb2x2ZWQgVGhlIHBheWxvYWQgd2l0aCB0aGUgcmVzb2x2ZWQgdmFsdWUgZm9yIHRoZSBzZW1hbnRpYyBvYmplY3QgbmFtZS5cbiAqIEBwYXJhbSBuZXdQYXlsb2FkIFRoZSBuZXcgdXBkYXRlZCBwYXlsb2FkLlxuICovXG5TaW1wbGVMaW5rRGVsZWdhdGUuX3VwZGF0ZVNlbWFudGljT2JqZWN0c0Zvck1hcHBpbmdzID0gZnVuY3Rpb24gKFxuXHRtZGNQYXlsb2FkOiBSZWdpc3RlcmVkUGF5bG9hZCxcblx0bWRjUGF5bG9hZFdpdGhEeW5hbWljU2VtYW50aWNPYmplY3RzUmVzb2x2ZWQ6IFJlZ2lzdGVyZWRQYXlsb2FkLFxuXHRuZXdQYXlsb2FkOiBSZWdpc3RlcmVkUGF5bG9hZFxuKTogdm9pZCB7XG5cdC8vIHVwZGF0ZSB0aGUgc2VtYW50aWMgb2JqZWN0IG5hbWUgZnJvbSB0aGUgcmVzb2x2ZWQgb25lcyBpbiB0aGUgc2VtYW50aWMgb2JqZWN0IG1hcHBpbmdzLlxuXHRtZGNQYXlsb2FkV2l0aER5bmFtaWNTZW1hbnRpY09iamVjdHNSZXNvbHZlZC5zZW1hbnRpY09iamVjdE1hcHBpbmdzLmZvckVhY2goZnVuY3Rpb24gKFxuXHRcdHNlbWFudGljT2JqZWN0TWFwcGluZzogUmVnaXN0ZXJlZFNlbWFudGljT2JqZWN0TWFwcGluZ1xuXHQpIHtcblx0XHRpZiAoc2VtYW50aWNPYmplY3RNYXBwaW5nLnNlbWFudGljT2JqZWN0ICYmIFNpbXBsZUxpbmtEZWxlZ2F0ZS5faXNEeW5hbWljUGF0aChzZW1hbnRpY09iamVjdE1hcHBpbmcuc2VtYW50aWNPYmplY3QpKSB7XG5cdFx0XHRzZW1hbnRpY09iamVjdE1hcHBpbmcuc2VtYW50aWNPYmplY3QgPVxuXHRcdFx0XHRuZXdQYXlsb2FkLnNlbWFudGljT2JqZWN0c1ttZGNQYXlsb2FkLnNlbWFudGljT2JqZWN0cy5pbmRleE9mKHNlbWFudGljT2JqZWN0TWFwcGluZy5zZW1hbnRpY09iamVjdCldO1xuXHRcdH1cblx0fSk7XG59O1xuXG4vKipcbiAqIFVwZGF0ZSB0aGUgc2VtYW50aWMgb2JqZWN0IG5hbWUgZnJvbSB0aGUgcmVzb2x2ZWQgdmFsdWUgZm9yIHRoZSB1bmF2YWlsYWJsZSBhY3Rpb25zLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0gbWRjUGF5bG9hZCBUaGUgcGF5bG9hZCBnaXZlbiBieSB0aGUgYXBwbGljYXRpb24uXG4gKiBAcGFyYW0gbWRjUGF5bG9hZFNlbWFudGljT2JqZWN0VW5hdmFpbGFibGVBY3Rpb25zIFRoZSB1bmF2YWlsYWJsZSBhY3Rpb25zIGdpdmVuIGJ5IHRoZSBhcHBsaWNhdGlvbi5cbiAqIEBwYXJhbSBtZGNQYXlsb2FkV2l0aER5bmFtaWNTZW1hbnRpY09iamVjdHNSZXNvbHZlZCBUaGUgdXBkYXRlZCBwYXlsb2FkIHdpdGggdGhlIHJlc29sdmVkIHZhbHVlIGZvciB0aGUgc2VtYW50aWMgb2JqZWN0IG5hbWUgZm9yIHRoZSB1bmF2YWlsYWJsZSBhY3Rpb25zLlxuICovXG5TaW1wbGVMaW5rRGVsZWdhdGUuX3VwZGF0ZVNlbWFudGljT2JqZWN0c1VuYXZhaWxhYmxlQWN0aW9ucyA9IGZ1bmN0aW9uIChcblx0bWRjUGF5bG9hZDogUmVnaXN0ZXJlZFBheWxvYWQsXG5cdG1kY1BheWxvYWRTZW1hbnRpY09iamVjdFVuYXZhaWxhYmxlQWN0aW9uczogUmVnaXN0ZXJlZFNlbWFudGljT2JqZWN0VW5hdmFpbGFibGVBY3Rpb25zLFxuXHRtZGNQYXlsb2FkV2l0aER5bmFtaWNTZW1hbnRpY09iamVjdHNSZXNvbHZlZDogUmVnaXN0ZXJlZFBheWxvYWRcbik6IHZvaWQge1xuXHRsZXQgX0luZGV4OiBhbnk7XG5cdG1kY1BheWxvYWRTZW1hbnRpY09iamVjdFVuYXZhaWxhYmxlQWN0aW9ucy5mb3JFYWNoKGZ1bmN0aW9uIChzZW1hbnRpY09iamVjdFVuYXZhaWxhYmxlQWN0aW9uOiBhbnkpIHtcblx0XHQvLyBEeW5hbWljIFNlbWFudGljT2JqZWN0IGhhcyBhbiB1bmF2YWlsYWJsZSBhY3Rpb25cblx0XHRpZiAoXG5cdFx0XHRzZW1hbnRpY09iamVjdFVuYXZhaWxhYmxlQWN0aW9uPy5zZW1hbnRpY09iamVjdCAmJlxuXHRcdFx0U2ltcGxlTGlua0RlbGVnYXRlLl9pc0R5bmFtaWNQYXRoKHNlbWFudGljT2JqZWN0VW5hdmFpbGFibGVBY3Rpb24uc2VtYW50aWNPYmplY3QpXG5cdFx0KSB7XG5cdFx0XHRfSW5kZXggPSBtZGNQYXlsb2FkLnNlbWFudGljT2JqZWN0cy5maW5kSW5kZXgoZnVuY3Rpb24gKHNlbWFudGljT2JqZWN0OiBzdHJpbmcpIHtcblx0XHRcdFx0cmV0dXJuIHNlbWFudGljT2JqZWN0ID09PSBzZW1hbnRpY09iamVjdFVuYXZhaWxhYmxlQWN0aW9uLnNlbWFudGljT2JqZWN0O1xuXHRcdFx0fSk7XG5cdFx0XHRpZiAoX0luZGV4ICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0Ly8gR2V0IHRoZSBTZW1hbnRpY09iamVjdCBuYW1lIHJlc29sdmVkIHRvIGEgdmFsdWVcblx0XHRcdFx0c2VtYW50aWNPYmplY3RVbmF2YWlsYWJsZUFjdGlvbi5zZW1hbnRpY09iamVjdCA9IG1kY1BheWxvYWRXaXRoRHluYW1pY1NlbWFudGljT2JqZWN0c1Jlc29sdmVkLnNlbWFudGljT2JqZWN0c1tfSW5kZXhdO1xuXHRcdFx0fVxuXHRcdH1cblx0fSk7XG59O1xuXG4vKipcbiAqIFVwZGF0ZSB0aGUgc2VtYW50aWMgb2JqZWN0IG5hbWUgZnJvbSB0aGUgcmVzb2x2ZWQgdmFsdWUgZm9yIHRoZSB1bmF2YWlsYWJsZSBhY3Rpb25zLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0gbWRjUGF5bG9hZCBUaGUgdXBkYXRlZCBwYXlsb2FkIHdpdGggdGhlIGluZm9ybWF0aW9uIGZyb20gY3VzdG9tIGRhdGEgcHJvdmlkZWQgaW4gdGhlIGxpbmsuXG4gKiBAcGFyYW0gbWRjUGF5bG9hZFdpdGhEeW5hbWljU2VtYW50aWNPYmplY3RzUmVzb2x2ZWQgVGhlIHBheWxvYWQgdXBkYXRlZCB3aXRoIHJlc29sdmVkIHNlbWFudGljIG9iamVjdHMgbmFtZXMuXG4gKi9cblNpbXBsZUxpbmtEZWxlZ2F0ZS5fdXBkYXRlU2VtYW50aWNPYmplY3RzV2l0aFJlc29sdmVkVmFsdWUgPSBmdW5jdGlvbiAoXG5cdG1kY1BheWxvYWQ6IFJlZ2lzdGVyZWRQYXlsb2FkLFxuXHRtZGNQYXlsb2FkV2l0aER5bmFtaWNTZW1hbnRpY09iamVjdHNSZXNvbHZlZDogUmVnaXN0ZXJlZFBheWxvYWRcbik6IHZvaWQge1xuXHRmb3IgKGxldCBuZXdTZW1hbnRpY09iamVjdHNDb3VudCA9IDA7IG5ld1NlbWFudGljT2JqZWN0c0NvdW50IDwgbWRjUGF5bG9hZC5zZW1hbnRpY09iamVjdHMubGVuZ3RoOyBuZXdTZW1hbnRpY09iamVjdHNDb3VudCsrKSB7XG5cdFx0aWYgKFxuXHRcdFx0bWRjUGF5bG9hZFdpdGhEeW5hbWljU2VtYW50aWNPYmplY3RzUmVzb2x2ZWQubWFpblNlbWFudGljT2JqZWN0ID09PVxuXHRcdFx0KG1kY1BheWxvYWQuc2VtYW50aWNPYmplY3RzUmVzb2x2ZWQgJiYgbWRjUGF5bG9hZC5zZW1hbnRpY09iamVjdHNSZXNvbHZlZFtuZXdTZW1hbnRpY09iamVjdHNDb3VudF0pXG5cdFx0KSB7XG5cdFx0XHRtZGNQYXlsb2FkV2l0aER5bmFtaWNTZW1hbnRpY09iamVjdHNSZXNvbHZlZC5tYWluU2VtYW50aWNPYmplY3QgPSBtZGNQYXlsb2FkLnNlbWFudGljT2JqZWN0c1tuZXdTZW1hbnRpY09iamVjdHNDb3VudF07XG5cdFx0fVxuXHRcdGlmIChtZGNQYXlsb2FkV2l0aER5bmFtaWNTZW1hbnRpY09iamVjdHNSZXNvbHZlZC5zZW1hbnRpY09iamVjdHNbbmV3U2VtYW50aWNPYmplY3RzQ291bnRdKSB7XG5cdFx0XHRtZGNQYXlsb2FkV2l0aER5bmFtaWNTZW1hbnRpY09iamVjdHNSZXNvbHZlZC5zZW1hbnRpY09iamVjdHNbbmV3U2VtYW50aWNPYmplY3RzQ291bnRdID1cblx0XHRcdFx0bWRjUGF5bG9hZC5zZW1hbnRpY09iamVjdHNbbmV3U2VtYW50aWNPYmplY3RzQ291bnRdO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHQvLyBubyBDdXN0b20gRGF0YSB2YWx1ZSBmb3IgYSBTZW1hbnRpYyBPYmplY3QgbmFtZSB3aXRoIHBhdGhcblx0XHRcdG1kY1BheWxvYWRXaXRoRHluYW1pY1NlbWFudGljT2JqZWN0c1Jlc29sdmVkLnNlbWFudGljT2JqZWN0cy5zcGxpY2UobmV3U2VtYW50aWNPYmplY3RzQ291bnQsIDEpO1xuXHRcdH1cblx0fVxufTtcblxuLyoqXG4gKiBSZW1vdmUgZW1wdHkgc2VtYW50aWMgb2JqZWN0IG1hcHBpbmdzIGFuZCBpZiB0aGVyZSBpcyBubyBzZW1hbnRpYyBvYmplY3QgbmFtZSwgbGluayB0byBpdC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIG1kY1BheWxvYWRXaXRoRHluYW1pY1NlbWFudGljT2JqZWN0c1Jlc29sdmVkIFRoZSBwYXlsb2FkIHVzZWQgdG8gY2hlY2sgdGhlIG1hcHBpbmdzIG9mIHRoZSBzZW1hbnRpYyBvYmplY3RzLlxuICovXG5TaW1wbGVMaW5rRGVsZWdhdGUuX3JlbW92ZUVtcHR5U2VtYW50aWNPYmplY3RzTWFwcGluZ3MgPSBmdW5jdGlvbiAobWRjUGF5bG9hZFdpdGhEeW5hbWljU2VtYW50aWNPYmplY3RzUmVzb2x2ZWQ6IFJlZ2lzdGVyZWRQYXlsb2FkKTogdm9pZCB7XG5cdC8vIHJlbW92ZSB1bmRlZmluZWQgU2VtYW50aWMgT2JqZWN0IE1hcHBpbmdcblx0Zm9yIChcblx0XHRsZXQgbWFwcGluZ3NDb3VudCA9IDA7XG5cdFx0bWFwcGluZ3NDb3VudCA8IG1kY1BheWxvYWRXaXRoRHluYW1pY1NlbWFudGljT2JqZWN0c1Jlc29sdmVkLnNlbWFudGljT2JqZWN0TWFwcGluZ3MubGVuZ3RoO1xuXHRcdG1hcHBpbmdzQ291bnQrK1xuXHQpIHtcblx0XHRpZiAoXG5cdFx0XHRtZGNQYXlsb2FkV2l0aER5bmFtaWNTZW1hbnRpY09iamVjdHNSZXNvbHZlZC5zZW1hbnRpY09iamVjdE1hcHBpbmdzW21hcHBpbmdzQ291bnRdICYmXG5cdFx0XHRtZGNQYXlsb2FkV2l0aER5bmFtaWNTZW1hbnRpY09iamVjdHNSZXNvbHZlZC5zZW1hbnRpY09iamVjdE1hcHBpbmdzW21hcHBpbmdzQ291bnRdLnNlbWFudGljT2JqZWN0ID09PSB1bmRlZmluZWRcblx0XHQpIHtcblx0XHRcdG1kY1BheWxvYWRXaXRoRHluYW1pY1NlbWFudGljT2JqZWN0c1Jlc29sdmVkLnNlbWFudGljT2JqZWN0TWFwcGluZ3Muc3BsaWNlKG1hcHBpbmdzQ291bnQsIDEpO1xuXHRcdH1cblx0fVxufTtcblxuU2ltcGxlTGlua0RlbGVnYXRlLl9zZXRQYXlsb2FkV2l0aER5bmFtaWNTZW1hbnRpY09iamVjdHNSZXNvbHZlZCA9IGZ1bmN0aW9uIChcblx0cGF5bG9hZDogYW55LFxuXHRuZXdQYXlsb2FkOiBSZWdpc3RlcmVkUGF5bG9hZFxuKTogUmVnaXN0ZXJlZFBheWxvYWQge1xuXHRsZXQgb1BheWxvYWRXaXRoRHluYW1pY1NlbWFudGljT2JqZWN0c1Jlc29sdmVkOiBSZWdpc3RlcmVkUGF5bG9hZDtcblx0aWYgKG5ld1BheWxvYWQuc2VtYW50aWNPYmplY3RzUmVzb2x2ZWQgJiYgbmV3UGF5bG9hZC5zZW1hbnRpY09iamVjdHNSZXNvbHZlZC5sZW5ndGggPiAwKSB7XG5cdFx0b1BheWxvYWRXaXRoRHluYW1pY1NlbWFudGljT2JqZWN0c1Jlc29sdmVkID0ge1xuXHRcdFx0ZW50aXR5VHlwZTogcGF5bG9hZC5lbnRpdHlUeXBlLFxuXHRcdFx0ZGF0YUZpZWxkOiBwYXlsb2FkLmRhdGFGaWVsZCxcblx0XHRcdGNvbnRhY3Q6IHBheWxvYWQuY29udGFjdCxcblx0XHRcdG1haW5TZW1hbnRpY09iamVjdDogcGF5bG9hZC5tYWluU2VtYW50aWNPYmplY3QsXG5cdFx0XHRuYXZpZ2F0aW9uUGF0aDogcGF5bG9hZC5uYXZpZ2F0aW9uUGF0aCxcblx0XHRcdHByb3BlcnR5UGF0aExhYmVsOiBwYXlsb2FkLnByb3BlcnR5UGF0aExhYmVsLFxuXHRcdFx0c2VtYW50aWNPYmplY3RNYXBwaW5nczogZGVlcENsb25lKHBheWxvYWQuc2VtYW50aWNPYmplY3RNYXBwaW5ncyksXG5cdFx0XHRzZW1hbnRpY09iamVjdHM6IG5ld1BheWxvYWQuc2VtYW50aWNPYmplY3RzXG5cdFx0fTtcblx0XHRTaW1wbGVMaW5rRGVsZWdhdGUuX3VwZGF0ZVNlbWFudGljT2JqZWN0c0Zvck1hcHBpbmdzKHBheWxvYWQsIG9QYXlsb2FkV2l0aER5bmFtaWNTZW1hbnRpY09iamVjdHNSZXNvbHZlZCwgbmV3UGF5bG9hZCk7XG5cdFx0Y29uc3QgX1NlbWFudGljT2JqZWN0VW5hdmFpbGFibGVBY3Rpb25zOiBSZWdpc3RlcmVkU2VtYW50aWNPYmplY3RVbmF2YWlsYWJsZUFjdGlvbnMgPSBkZWVwQ2xvbmUoXG5cdFx0XHRwYXlsb2FkLnNlbWFudGljT2JqZWN0VW5hdmFpbGFibGVBY3Rpb25zXG5cdFx0KTtcblx0XHRTaW1wbGVMaW5rRGVsZWdhdGUuX3VwZGF0ZVNlbWFudGljT2JqZWN0c1VuYXZhaWxhYmxlQWN0aW9ucyhcblx0XHRcdHBheWxvYWQsXG5cdFx0XHRfU2VtYW50aWNPYmplY3RVbmF2YWlsYWJsZUFjdGlvbnMsXG5cdFx0XHRvUGF5bG9hZFdpdGhEeW5hbWljU2VtYW50aWNPYmplY3RzUmVzb2x2ZWRcblx0XHQpO1xuXHRcdG9QYXlsb2FkV2l0aER5bmFtaWNTZW1hbnRpY09iamVjdHNSZXNvbHZlZC5zZW1hbnRpY09iamVjdFVuYXZhaWxhYmxlQWN0aW9ucyA9IF9TZW1hbnRpY09iamVjdFVuYXZhaWxhYmxlQWN0aW9ucztcblx0XHRpZiAobmV3UGF5bG9hZC5tYWluU2VtYW50aWNPYmplY3QpIHtcblx0XHRcdG9QYXlsb2FkV2l0aER5bmFtaWNTZW1hbnRpY09iamVjdHNSZXNvbHZlZC5tYWluU2VtYW50aWNPYmplY3QgPSBuZXdQYXlsb2FkLm1haW5TZW1hbnRpY09iamVjdDtcblx0XHR9IGVsc2Uge1xuXHRcdFx0b1BheWxvYWRXaXRoRHluYW1pY1NlbWFudGljT2JqZWN0c1Jlc29sdmVkLm1haW5TZW1hbnRpY09iamVjdCA9IHVuZGVmaW5lZDtcblx0XHR9XG5cdFx0U2ltcGxlTGlua0RlbGVnYXRlLl91cGRhdGVTZW1hbnRpY09iamVjdHNXaXRoUmVzb2x2ZWRWYWx1ZShuZXdQYXlsb2FkLCBvUGF5bG9hZFdpdGhEeW5hbWljU2VtYW50aWNPYmplY3RzUmVzb2x2ZWQpO1xuXHRcdFNpbXBsZUxpbmtEZWxlZ2F0ZS5fcmVtb3ZlRW1wdHlTZW1hbnRpY09iamVjdHNNYXBwaW5ncyhvUGF5bG9hZFdpdGhEeW5hbWljU2VtYW50aWNPYmplY3RzUmVzb2x2ZWQpO1xuXHRcdHJldHVybiBvUGF5bG9hZFdpdGhEeW5hbWljU2VtYW50aWNPYmplY3RzUmVzb2x2ZWQ7XG5cdH0gZWxzZSB7XG5cdFx0cmV0dXJuIHt9IGFzIGFueTtcblx0fVxufTtcblxuU2ltcGxlTGlua0RlbGVnYXRlLl9nZXRQYXlsb2FkV2l0aER5bmFtaWNTZW1hbnRpY09iamVjdHNSZXNvbHZlZCA9IGZ1bmN0aW9uIChwYXlsb2FkOiBhbnksIGxpbmtDdXN0b21EYXRhOiBhbnkpOiBhbnkge1xuXHRsZXQgb1BheWxvYWRXaXRoRHluYW1pY1NlbWFudGljT2JqZWN0c1Jlc29sdmVkOiBhbnk7XG5cdGNvbnN0IG9TZW1hbnRpY09iamVjdHNSZXNvbHZlZDogYW55ID0ge307XG5cdGNvbnN0IG5ld1BheWxvYWQ6IFJlZ2lzdGVyZWRQYXlsb2FkID0geyBzZW1hbnRpY09iamVjdHM6IFtdLCBzZW1hbnRpY09iamVjdHNSZXNvbHZlZDogW10sIHNlbWFudGljT2JqZWN0TWFwcGluZ3M6IFtdIH07XG5cdGlmIChwYXlsb2FkLnNlbWFudGljT2JqZWN0cykge1xuXHRcdC8vIHNhcC5tLkxpbmsgaGFzIGN1c3RvbSBkYXRhIHdpdGggU2VtYW50aWMgT2JqZWN0cyBuYW1lcyByZXNvbHZlZFxuXHRcdGlmIChsaW5rQ3VzdG9tRGF0YSAmJiBsaW5rQ3VzdG9tRGF0YS5sZW5ndGggPiAwKSB7XG5cdFx0XHRTaW1wbGVMaW5rRGVsZWdhdGUuX2dldFNlbWFudGljT2JqZWN0Q3VzdG9tRGF0YVZhbHVlKGxpbmtDdXN0b21EYXRhLCBvU2VtYW50aWNPYmplY3RzUmVzb2x2ZWQpO1xuXHRcdFx0U2ltcGxlTGlua0RlbGVnYXRlLl9jcmVhdGVOZXdQYXlsb2FkV2l0aER5bmFtaWNTZW1hbnRpY09iamVjdHNSZXNvbHZlZChwYXlsb2FkLCBvU2VtYW50aWNPYmplY3RzUmVzb2x2ZWQsIG5ld1BheWxvYWQpO1xuXHRcdFx0b1BheWxvYWRXaXRoRHluYW1pY1NlbWFudGljT2JqZWN0c1Jlc29sdmVkID0gU2ltcGxlTGlua0RlbGVnYXRlLl9zZXRQYXlsb2FkV2l0aER5bmFtaWNTZW1hbnRpY09iamVjdHNSZXNvbHZlZChcblx0XHRcdFx0cGF5bG9hZCxcblx0XHRcdFx0bmV3UGF5bG9hZFxuXHRcdFx0KTtcblx0XHRcdHJldHVybiBvUGF5bG9hZFdpdGhEeW5hbWljU2VtYW50aWNPYmplY3RzUmVzb2x2ZWQ7XG5cdFx0fVxuXHR9IGVsc2Uge1xuXHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdH1cbn07XG5cblNpbXBsZUxpbmtEZWxlZ2F0ZS5fdXBkYXRlUGF5bG9hZFdpdGhTZW1hbnRpY0F0dHJpYnV0ZXMgPSBmdW5jdGlvbiAoXG5cdGFTZW1hbnRpY09iamVjdHM6IGFueSxcblx0b0luZm9Mb2c6IGFueSxcblx0b0NvbnRleHRPYmplY3Q6IGFueSxcblx0b1Jlc3VsdHM6IGFueSxcblx0bVNlbWFudGljT2JqZWN0TWFwcGluZ3M6IGFueVxuKTogdm9pZCB7XG5cdGFTZW1hbnRpY09iamVjdHMuZm9yRWFjaChmdW5jdGlvbiAoc1NlbWFudGljT2JqZWN0OiBhbnkpIHtcblx0XHRpZiAob0luZm9Mb2cpIHtcblx0XHRcdG9JbmZvTG9nLmFkZENvbnRleHRPYmplY3Qoc1NlbWFudGljT2JqZWN0LCBvQ29udGV4dE9iamVjdCk7XG5cdFx0fVxuXHRcdG9SZXN1bHRzW3NTZW1hbnRpY09iamVjdF0gPSB7fTtcblx0XHRmb3IgKGNvbnN0IHNBdHRyaWJ1dGVOYW1lIGluIG9Db250ZXh0T2JqZWN0KSB7XG5cdFx0XHRsZXQgb0F0dHJpYnV0ZSA9IG51bGwsXG5cdFx0XHRcdG9UcmFuc2Zvcm1hdGlvbkFkZGl0aW9uYWwgPSBudWxsO1xuXHRcdFx0aWYgKG9JbmZvTG9nKSB7XG5cdFx0XHRcdG9BdHRyaWJ1dGUgPSBvSW5mb0xvZy5nZXRTZW1hbnRpY09iamVjdEF0dHJpYnV0ZShzU2VtYW50aWNPYmplY3QsIHNBdHRyaWJ1dGVOYW1lKTtcblx0XHRcdFx0aWYgKCFvQXR0cmlidXRlKSB7XG5cdFx0XHRcdFx0b0F0dHJpYnV0ZSA9IG9JbmZvTG9nLmNyZWF0ZUF0dHJpYnV0ZVN0cnVjdHVyZSgpO1xuXHRcdFx0XHRcdG9JbmZvTG9nLmFkZFNlbWFudGljT2JqZWN0QXR0cmlidXRlKHNTZW1hbnRpY09iamVjdCwgc0F0dHJpYnV0ZU5hbWUsIG9BdHRyaWJ1dGUpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHQvLyBJZ25vcmUgdW5kZWZpbmVkIGFuZCBudWxsIHZhbHVlc1xuXHRcdFx0aWYgKG9Db250ZXh0T2JqZWN0W3NBdHRyaWJ1dGVOYW1lXSA9PT0gdW5kZWZpbmVkIHx8IG9Db250ZXh0T2JqZWN0W3NBdHRyaWJ1dGVOYW1lXSA9PT0gbnVsbCkge1xuXHRcdFx0XHRpZiAob0F0dHJpYnV0ZSkge1xuXHRcdFx0XHRcdG9BdHRyaWJ1dGUudHJhbnNmb3JtYXRpb25zLnB1c2goe1xuXHRcdFx0XHRcdFx0dmFsdWU6IHVuZGVmaW5lZCxcblx0XHRcdFx0XHRcdGRlc2NyaXB0aW9uOiBcIlxcdTIxMzkgVW5kZWZpbmVkIGFuZCBudWxsIHZhbHVlcyBoYXZlIGJlZW4gcmVtb3ZlZCBpbiBTaW1wbGVMaW5rRGVsZWdhdGUuXCJcblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0fVxuXHRcdFx0XHRjb250aW51ZTtcblx0XHRcdH1cblx0XHRcdC8vIElnbm9yZSBwbGFpbiBvYmplY3RzIChCQ1AgMTc3MDQ5NjYzOSlcblx0XHRcdGlmIChpc1BsYWluT2JqZWN0KG9Db250ZXh0T2JqZWN0W3NBdHRyaWJ1dGVOYW1lXSkpIHtcblx0XHRcdFx0aWYgKG1TZW1hbnRpY09iamVjdE1hcHBpbmdzICYmIG1TZW1hbnRpY09iamVjdE1hcHBpbmdzW3NTZW1hbnRpY09iamVjdF0pIHtcblx0XHRcdFx0XHRjb25zdCBhS2V5cyA9IE9iamVjdC5rZXlzKG1TZW1hbnRpY09iamVjdE1hcHBpbmdzW3NTZW1hbnRpY09iamVjdF0pO1xuXHRcdFx0XHRcdGxldCBzTmV3QXR0cmlidXRlTmFtZU1hcHBlZCwgc05ld0F0dHJpYnV0ZU5hbWUsIHNWYWx1ZSwgc0tleTtcblx0XHRcdFx0XHRmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgYUtleXMubGVuZ3RoOyBpbmRleCsrKSB7XG5cdFx0XHRcdFx0XHRzS2V5ID0gYUtleXNbaW5kZXhdO1xuXHRcdFx0XHRcdFx0aWYgKHNLZXkuaW5kZXhPZihzQXR0cmlidXRlTmFtZSkgPT09IDApIHtcblx0XHRcdFx0XHRcdFx0c05ld0F0dHJpYnV0ZU5hbWVNYXBwZWQgPSBtU2VtYW50aWNPYmplY3RNYXBwaW5nc1tzU2VtYW50aWNPYmplY3RdW3NLZXldO1xuXHRcdFx0XHRcdFx0XHRzTmV3QXR0cmlidXRlTmFtZSA9IHNLZXkuc3BsaXQoXCIvXCIpW3NLZXkuc3BsaXQoXCIvXCIpLmxlbmd0aCAtIDFdO1xuXHRcdFx0XHRcdFx0XHRzVmFsdWUgPSBvQ29udGV4dE9iamVjdFtzQXR0cmlidXRlTmFtZV1bc05ld0F0dHJpYnV0ZU5hbWVdO1xuXHRcdFx0XHRcdFx0XHRpZiAoc05ld0F0dHJpYnV0ZU5hbWVNYXBwZWQgJiYgc05ld0F0dHJpYnV0ZU5hbWUgJiYgc1ZhbHVlKSB7XG5cdFx0XHRcdFx0XHRcdFx0b1Jlc3VsdHNbc1NlbWFudGljT2JqZWN0XVtzTmV3QXR0cmlidXRlTmFtZU1hcHBlZF0gPSBzVmFsdWU7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKG9BdHRyaWJ1dGUpIHtcblx0XHRcdFx0XHRvQXR0cmlidXRlLnRyYW5zZm9ybWF0aW9ucy5wdXNoKHtcblx0XHRcdFx0XHRcdHZhbHVlOiB1bmRlZmluZWQsXG5cdFx0XHRcdFx0XHRkZXNjcmlwdGlvbjogXCJcXHUyMTM5IFBsYWluIG9iamVjdHMgaGFzIGJlZW4gcmVtb3ZlZCBpbiBTaW1wbGVMaW5rRGVsZWdhdGUuXCJcblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0fVxuXHRcdFx0XHRjb250aW51ZTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gTWFwIHRoZSBhdHRyaWJ1dGUgbmFtZSBvbmx5IGlmICdzZW1hbnRpY09iamVjdE1hcHBpbmcnIGlzIGRlZmluZWQuXG5cdFx0XHQvLyBOb3RlOiB1bmRlciBkZWZpbmVkICdzZW1hbnRpY09iamVjdE1hcHBpbmcnIHdlIGFsc28gbWVhbiBhbiBlbXB0eSBhbm5vdGF0aW9uIG9yIGFuIGFubm90YXRpb24gd2l0aCBlbXB0eSByZWNvcmRcblx0XHRcdGNvbnN0IHNBdHRyaWJ1dGVOYW1lTWFwcGVkID1cblx0XHRcdFx0bVNlbWFudGljT2JqZWN0TWFwcGluZ3MgJiZcblx0XHRcdFx0bVNlbWFudGljT2JqZWN0TWFwcGluZ3Nbc1NlbWFudGljT2JqZWN0XSAmJlxuXHRcdFx0XHRtU2VtYW50aWNPYmplY3RNYXBwaW5nc1tzU2VtYW50aWNPYmplY3RdW3NBdHRyaWJ1dGVOYW1lXVxuXHRcdFx0XHRcdD8gbVNlbWFudGljT2JqZWN0TWFwcGluZ3Nbc1NlbWFudGljT2JqZWN0XVtzQXR0cmlidXRlTmFtZV1cblx0XHRcdFx0XHQ6IHNBdHRyaWJ1dGVOYW1lO1xuXG5cdFx0XHRpZiAob0F0dHJpYnV0ZSAmJiBzQXR0cmlidXRlTmFtZSAhPT0gc0F0dHJpYnV0ZU5hbWVNYXBwZWQpIHtcblx0XHRcdFx0b1RyYW5zZm9ybWF0aW9uQWRkaXRpb25hbCA9IHtcblx0XHRcdFx0XHR2YWx1ZTogdW5kZWZpbmVkLFxuXHRcdFx0XHRcdGRlc2NyaXB0aW9uOiBgXFx1MjEzOSBUaGUgYXR0cmlidXRlICR7c0F0dHJpYnV0ZU5hbWV9IGhhcyBiZWVuIHJlbmFtZWQgdG8gJHtzQXR0cmlidXRlTmFtZU1hcHBlZH0gaW4gU2ltcGxlTGlua0RlbGVnYXRlLmAsXG5cdFx0XHRcdFx0cmVhc29uOiBgXFx1ZDgzZFxcdWRkMzQgQSBjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuU2VtYW50aWNPYmplY3RNYXBwaW5nIGFubm90YXRpb24gaXMgZGVmaW5lZCBmb3Igc2VtYW50aWMgb2JqZWN0ICR7c1NlbWFudGljT2JqZWN0fSB3aXRoIHNvdXJjZSBhdHRyaWJ1dGUgJHtzQXR0cmlidXRlTmFtZX0gYW5kIHRhcmdldCBhdHRyaWJ1dGUgJHtzQXR0cmlidXRlTmFtZU1hcHBlZH0uIFlvdSBjYW4gbW9kaWZ5IHRoZSBhbm5vdGF0aW9uIGlmIHRoZSBtYXBwaW5nIHJlc3VsdCBpcyBub3Qgd2hhdCB5b3UgZXhwZWN0ZWQuYFxuXHRcdFx0XHR9O1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBJZiBtb3JlIHRoZW4gb25lIGxvY2FsIHByb3BlcnR5IG1hcHMgdG8gdGhlIHNhbWUgdGFyZ2V0IHByb3BlcnR5IChjbGFzaCBzaXR1YXRpb24pXG5cdFx0XHQvLyB3ZSB0YWtlIHRoZSB2YWx1ZSBvZiB0aGUgbGFzdCBwcm9wZXJ0eSBhbmQgd3JpdGUgYW4gZXJyb3IgbG9nXG5cdFx0XHRpZiAob1Jlc3VsdHNbc1NlbWFudGljT2JqZWN0XVtzQXR0cmlidXRlTmFtZU1hcHBlZF0pIHtcblx0XHRcdFx0TG9nLmVycm9yKFxuXHRcdFx0XHRcdGBTaW1wbGVMaW5rRGVsZWdhdGU6IFRoZSBhdHRyaWJ1dGUgJHtzQXR0cmlidXRlTmFtZX0gY2FuIG5vdCBiZSByZW5hbWVkIHRvIHRoZSBhdHRyaWJ1dGUgJHtzQXR0cmlidXRlTmFtZU1hcHBlZH0gZHVlIHRvIGEgY2xhc2ggc2l0dWF0aW9uLiBUaGlzIGNhbiBsZWFkIHRvIHdyb25nIG5hdmlnYXRpb24gbGF0ZXIgb24uYFxuXHRcdFx0XHQpO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBDb3B5IHRoZSB2YWx1ZSByZXBsYWNpbmcgdGhlIGF0dHJpYnV0ZSBuYW1lIGJ5IHNlbWFudGljIG9iamVjdCBuYW1lXG5cdFx0XHRvUmVzdWx0c1tzU2VtYW50aWNPYmplY3RdW3NBdHRyaWJ1dGVOYW1lTWFwcGVkXSA9IG9Db250ZXh0T2JqZWN0W3NBdHRyaWJ1dGVOYW1lXTtcblxuXHRcdFx0aWYgKG9BdHRyaWJ1dGUpIHtcblx0XHRcdFx0aWYgKG9UcmFuc2Zvcm1hdGlvbkFkZGl0aW9uYWwpIHtcblx0XHRcdFx0XHRvQXR0cmlidXRlLnRyYW5zZm9ybWF0aW9ucy5wdXNoKG9UcmFuc2Zvcm1hdGlvbkFkZGl0aW9uYWwpO1xuXHRcdFx0XHRcdGNvbnN0IGFBdHRyaWJ1dGVOZXcgPSBvSW5mb0xvZy5jcmVhdGVBdHRyaWJ1dGVTdHJ1Y3R1cmUoKTtcblx0XHRcdFx0XHRhQXR0cmlidXRlTmV3LnRyYW5zZm9ybWF0aW9ucy5wdXNoKHtcblx0XHRcdFx0XHRcdHZhbHVlOiBvQ29udGV4dE9iamVjdFtzQXR0cmlidXRlTmFtZV0sXG5cdFx0XHRcdFx0XHRkZXNjcmlwdGlvbjogYFxcdTIxMzkgVGhlIGF0dHJpYnV0ZSAke3NBdHRyaWJ1dGVOYW1lTWFwcGVkfSB3aXRoIHRoZSB2YWx1ZSAke29Db250ZXh0T2JqZWN0W3NBdHRyaWJ1dGVOYW1lXX0gaGFzIGJlZW4gYWRkZWQgZHVlIHRvIGEgbWFwcGluZyBydWxlIHJlZ2FyZGluZyB0aGUgYXR0cmlidXRlICR7c0F0dHJpYnV0ZU5hbWV9IGluIFNpbXBsZUxpbmtEZWxlZ2F0ZS5gXG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0b0luZm9Mb2cuYWRkU2VtYW50aWNPYmplY3RBdHRyaWJ1dGUoc1NlbWFudGljT2JqZWN0LCBzQXR0cmlidXRlTmFtZU1hcHBlZCwgYUF0dHJpYnV0ZU5ldyk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH0pO1xufTtcblxuLyoqXG4gKiBDaGVja3Mgd2hpY2ggYXR0cmlidXRlcyBvZiB0aGUgQ29udGV4dE9iamVjdCBiZWxvbmcgdG8gd2hpY2ggU2VtYW50aWNPYmplY3QgYW5kIG1hcHMgdGhlbSBpbnRvIGEgdHdvIGRpbWVuc2lvbmFsIGFycmF5LlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0gb0NvbnRleHRPYmplY3QgVGhlIEJpbmRpbmdDb250ZXh0IG9mIHRoZSBTb3VyY2VDb250cm9sIG9mIHRoZSBMaW5rIC8gb2YgdGhlIExpbmsgaXRzZWxmIGlmIG5vdCBzZXRcbiAqIEBwYXJhbSBvUGF5bG9hZCBUaGUgcGF5bG9hZCBnaXZlbiBieSB0aGUgYXBwbGljYXRpb25cbiAqIEBwYXJhbSBvSW5mb0xvZyBUaGUgY29ycmVzcG9uZGluZyBJbmZvTG9nIG9mIHRoZSBMaW5rXG4gKiBAcGFyYW0gb0xpbmsgVGhlIGNvcnJlc3BvbmRpbmcgTGlua1xuICogQHJldHVybnMgQSB0d28gZGltZW5zaW9uYWwgYXJyYXkgd2hpY2ggbWFwcyBhIGdpdmVuIFNlbWFudGljT2JqZWN0IG5hbWUgdG9nZXRoZXIgd2l0aCBhIGdpdmVuIGF0dHJpYnV0ZSBuYW1lIHRvIHRoZSB2YWx1ZSBvZiB0aGF0IGdpdmVuIGF0dHJpYnV0ZVxuICovXG5TaW1wbGVMaW5rRGVsZWdhdGUuX2NhbGN1bGF0ZVNlbWFudGljQXR0cmlidXRlcyA9IGZ1bmN0aW9uIChvQ29udGV4dE9iamVjdDogYW55LCBvUGF5bG9hZDogYW55LCBvSW5mb0xvZzogYW55LCBvTGluazogYW55KSB7XG5cdGNvbnN0IGFMaW5rQ3VzdG9tRGF0YSA9IG9MaW5rICYmIHRoaXMuX2ZldGNoTGlua0N1c3RvbURhdGEob0xpbmspO1xuXHRjb25zdCBvUGF5bG9hZFdpdGhEeW5hbWljU2VtYW50aWNPYmplY3RzUmVzb2x2ZWQ6IGFueSA9IFNpbXBsZUxpbmtEZWxlZ2F0ZS5fZ2V0UGF5bG9hZFdpdGhEeW5hbWljU2VtYW50aWNPYmplY3RzUmVzb2x2ZWQoXG5cdFx0b1BheWxvYWQsXG5cdFx0YUxpbmtDdXN0b21EYXRhXG5cdCk7XG5cdGNvbnN0IG9QYXlsb2FkUmVzb2x2ZWQgPSBvUGF5bG9hZFdpdGhEeW5hbWljU2VtYW50aWNPYmplY3RzUmVzb2x2ZWQgPyBvUGF5bG9hZFdpdGhEeW5hbWljU2VtYW50aWNPYmplY3RzUmVzb2x2ZWQgOiBvUGF5bG9hZDtcblx0dGhpcy5yZXNvbHZlZHBheWxvYWQgPSBvUGF5bG9hZFdpdGhEeW5hbWljU2VtYW50aWNPYmplY3RzUmVzb2x2ZWQ7XG5cdGNvbnN0IGFTZW1hbnRpY09iamVjdHMgPSBTaW1wbGVMaW5rRGVsZWdhdGUuX2dldFNlbWFudGljT2JqZWN0cyhvUGF5bG9hZFJlc29sdmVkKTtcblx0Y29uc3QgbVNlbWFudGljT2JqZWN0TWFwcGluZ3MgPSBTaW1wbGVMaW5rRGVsZWdhdGUuX2NvbnZlcnRTZW1hbnRpY09iamVjdE1hcHBpbmcoXG5cdFx0U2ltcGxlTGlua0RlbGVnYXRlLl9nZXRTZW1hbnRpY09iamVjdE1hcHBpbmdzKG9QYXlsb2FkUmVzb2x2ZWQpXG5cdCk7XG5cdGlmICghYVNlbWFudGljT2JqZWN0cy5sZW5ndGgpIHtcblx0XHRhU2VtYW50aWNPYmplY3RzLnB1c2goXCJcIik7XG5cdH1cblx0Y29uc3Qgb1Jlc3VsdHM6IGFueSA9IHt9O1xuXHRTaW1wbGVMaW5rRGVsZWdhdGUuX3VwZGF0ZVBheWxvYWRXaXRoU2VtYW50aWNBdHRyaWJ1dGVzKGFTZW1hbnRpY09iamVjdHMsIG9JbmZvTG9nLCBvQ29udGV4dE9iamVjdCwgb1Jlc3VsdHMsIG1TZW1hbnRpY09iamVjdE1hcHBpbmdzKTtcblx0cmV0dXJuIHsgcGF5bG9hZDogb1BheWxvYWRSZXNvbHZlZCwgcmVzdWx0czogb1Jlc3VsdHMgfTtcbn07XG4vKipcbiAqIFJldHJpZXZlcyB0aGUgYWN0dWFsIHRhcmdldHMgZm9yIHRoZSBuYXZpZ2F0aW9uIG9mIHRoZSBsaW5rLiBUaGlzIHVzZXMgdGhlIFVTaGVsbCBsb2FkZWQgYnkgdGhlIHtAbGluayBzYXAudWkubWRjLmxpbmsuRmFjdG9yeX0gdG8gcmV0cmlldmVcbiAqIHRoZSBuYXZpZ2F0aW9uIHRhcmdldHMgZnJvbSB0aGUgRkxQIHNlcnZpY2UuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSBzQXBwU3RhdGVLZXkgS2V5IG9mIHRoZSBhcHBzdGF0ZSAobm90IHVzZWQgeWV0KVxuICogQHBhcmFtIG9TZW1hbnRpY0F0dHJpYnV0ZXMgVGhlIGNhbGN1bGF0ZWQgYnkgX2NhbGN1bGF0ZVNlbWFudGljQXR0cmlidXRlc1xuICogQHBhcmFtIG9QYXlsb2FkIFRoZSBwYXlsb2FkIGdpdmVuIGJ5IHRoZSBhcHBsaWNhdGlvblxuICogQHBhcmFtIG9JbmZvTG9nIFRoZSBjb3JyZXNwb25kaW5nIEluZm9Mb2cgb2YgdGhlIExpbmtcbiAqIEBwYXJhbSBvTGluayBUaGUgY29ycmVzcG9uZGluZyBMaW5rXG4gKiBAcmV0dXJucyBSZXNvbHZpbmcgaW50byBhdmFpbGFibGVBdGlvbnMgYW5kIG93bk5hdmlnYXRpb24gY29udGFpbmluZyBhbiBhcnJheSBvZiB7QGxpbmsgc2FwLnVpLm1kYy5saW5rLkxpbmtJdGVtfVxuICovXG5TaW1wbGVMaW5rRGVsZWdhdGUuX3JldHJpZXZlTmF2aWdhdGlvblRhcmdldHMgPSBmdW5jdGlvbiAoXG5cdHNBcHBTdGF0ZUtleTogc3RyaW5nLFxuXHRvU2VtYW50aWNBdHRyaWJ1dGVzOiBhbnksXG5cdG9QYXlsb2FkOiBhbnksXG5cdG9JbmZvTG9nOiBhbnksXG5cdG9MaW5rOiBhbnlcbikge1xuXHRpZiAoIW9QYXlsb2FkLnNlbWFudGljT2JqZWN0cykge1xuXHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUoW10pO1xuXHR9XG5cdGNvbnN0IGFTZW1hbnRpY09iamVjdHMgPSBvUGF5bG9hZC5zZW1hbnRpY09iamVjdHM7XG5cdGNvbnN0IG9OYXZpZ2F0aW9uVGFyZ2V0czogYW55ID0ge1xuXHRcdG93bk5hdmlnYXRpb246IHVuZGVmaW5lZCxcblx0XHRhdmFpbGFibGVBY3Rpb25zOiBbXVxuXHR9O1xuXHRsZXQgaVN1cGVyaW9yQWN0aW9uTGlua3NGb3VuZCA9IDA7XG5cdHJldHVybiBDb3JlLmxvYWRMaWJyYXJ5KFwic2FwLnVpLmZsXCIsIHtcblx0XHRhc3luYzogdHJ1ZVxuXHR9KS50aGVuKCgpID0+IHtcblx0XHRyZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcblx0XHRcdHNhcC51aS5yZXF1aXJlKFtcInNhcC91aS9mbC9VdGlsc1wiXSwgYXN5bmMgKFV0aWxzOiBhbnkpID0+IHtcblx0XHRcdFx0Y29uc3Qgb0FwcENvbXBvbmVudCA9IFV0aWxzLmdldEFwcENvbXBvbmVudEZvckNvbnRyb2wob0xpbmsgPT09IHVuZGVmaW5lZCA/IHRoaXMub0NvbnRyb2wgOiBvTGluayk7XG5cdFx0XHRcdGNvbnN0IG9TaGVsbFNlcnZpY2VzID0gb0FwcENvbXBvbmVudCA/IG9BcHBDb21wb25lbnQuZ2V0U2hlbGxTZXJ2aWNlcygpIDogbnVsbDtcblx0XHRcdFx0aWYgKCFvU2hlbGxTZXJ2aWNlcykge1xuXHRcdFx0XHRcdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvYmFuLXRzLWNvbW1lbnRcblx0XHRcdFx0XHQvLyBAdHMtaWdub3JlXG5cdFx0XHRcdFx0cmVzb2x2ZShvTmF2aWdhdGlvblRhcmdldHMuYXZhaWxhYmxlQWN0aW9ucywgb05hdmlnYXRpb25UYXJnZXRzLm93bk5hdmlnYXRpb24pO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmICghb1NoZWxsU2VydmljZXMuaGFzVVNoZWxsKCkpIHtcblx0XHRcdFx0XHRMb2cuZXJyb3IoXCJTaW1wbGVMaW5rRGVsZWdhdGU6IFNlcnZpY2UgJ0Nyb3NzQXBwbGljYXRpb25OYXZpZ2F0aW9uJyBvciAnVVJMUGFyc2luZycgY291bGQgbm90IGJlIG9idGFpbmVkXCIpO1xuXHRcdFx0XHRcdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvYmFuLXRzLWNvbW1lbnRcblx0XHRcdFx0XHQvLyBAdHMtaWdub3JlXG5cdFx0XHRcdFx0cmVzb2x2ZShvTmF2aWdhdGlvblRhcmdldHMuYXZhaWxhYmxlQWN0aW9ucywgb05hdmlnYXRpb25UYXJnZXRzLm93bk5hdmlnYXRpb24pO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGNvbnN0IGFQYXJhbXMgPSBhU2VtYW50aWNPYmplY3RzLm1hcChmdW5jdGlvbiAoc1NlbWFudGljT2JqZWN0OiBhbnkpIHtcblx0XHRcdFx0XHRyZXR1cm4gW1xuXHRcdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0XHRzZW1hbnRpY09iamVjdDogc1NlbWFudGljT2JqZWN0LFxuXHRcdFx0XHRcdFx0XHRwYXJhbXM6IG9TZW1hbnRpY0F0dHJpYnV0ZXMgPyBvU2VtYW50aWNBdHRyaWJ1dGVzW3NTZW1hbnRpY09iamVjdF0gOiB1bmRlZmluZWQsXG5cdFx0XHRcdFx0XHRcdGFwcFN0YXRlS2V5OiBzQXBwU3RhdGVLZXksXG5cdFx0XHRcdFx0XHRcdHNvcnRSZXN1bHRzQnk6IFwidGV4dFwiXG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XTtcblx0XHRcdFx0fSk7XG5cdFx0XHRcdHRyeSB7XG5cdFx0XHRcdFx0Y29uc3QgYUxpbmtzID0gYXdhaXQgb1NoZWxsU2VydmljZXMuZ2V0TGlua3MoYVBhcmFtcyk7XG5cdFx0XHRcdFx0bGV0IGJIYXNMaW5rcyA9IGZhbHNlO1xuXHRcdFx0XHRcdGZvciAobGV0IGkgPSAwOyBpIDwgYUxpbmtzLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRcdFx0XHRmb3IgKGxldCBqID0gMDsgaiA8IGFMaW5rc1tpXS5sZW5ndGg7IGorKykge1xuXHRcdFx0XHRcdFx0XHRpZiAoYUxpbmtzW2ldW2pdLmxlbmd0aCA+IDApIHtcblx0XHRcdFx0XHRcdFx0XHRiSGFzTGlua3MgPSB0cnVlO1xuXHRcdFx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdGlmIChiSGFzTGlua3MpIHtcblx0XHRcdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGlmICghYUxpbmtzIHx8ICFhTGlua3MubGVuZ3RoIHx8ICFiSGFzTGlua3MpIHtcblx0XHRcdFx0XHRcdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvYmFuLXRzLWNvbW1lbnRcblx0XHRcdFx0XHRcdC8vIEB0cy1pZ25vcmVcblx0XHRcdFx0XHRcdHJlc29sdmUob05hdmlnYXRpb25UYXJnZXRzLmF2YWlsYWJsZUFjdGlvbnMsIG9OYXZpZ2F0aW9uVGFyZ2V0cy5vd25OYXZpZ2F0aW9uKTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRjb25zdCBhU2VtYW50aWNPYmplY3RVbmF2YWlsYWJsZUFjdGlvbnMgPSBTaW1wbGVMaW5rRGVsZWdhdGUuX2dldFNlbWFudGljT2JqZWN0VW5hdmFpbGFibGVBY3Rpb25zKG9QYXlsb2FkKTtcblx0XHRcdFx0XHRjb25zdCBvVW5hdmFpbGFibGVBY3Rpb25zID1cblx0XHRcdFx0XHRcdFNpbXBsZUxpbmtEZWxlZ2F0ZS5fY29udmVydFNlbWFudGljT2JqZWN0VW5hdmFpbGFibGVBY3Rpb24oYVNlbWFudGljT2JqZWN0VW5hdmFpbGFibGVBY3Rpb25zKTtcblx0XHRcdFx0XHRsZXQgc0N1cnJlbnRIYXNoID0gRmllbGRSdW50aW1lLl9mbkZpeEhhc2hRdWVyeVN0cmluZyhDb21tb25VdGlscy5nZXRIYXNoKCkpO1xuXG5cdFx0XHRcdFx0aWYgKHNDdXJyZW50SGFzaCkge1xuXHRcdFx0XHRcdFx0Ly8gQkNQIDE3NzAzMTUwMzU6IHdlIGhhdmUgdG8gc2V0IHRoZSBlbmQtcG9pbnQgJz8nIG9mIGFjdGlvbiBpbiBvcmRlciB0byBhdm9pZCBtYXRjaGluZyBvZiBcIiNTYWxlc09yZGVyLW1hbmFnZVwiIGluIFwiI1NhbGVzT3JkZXItbWFuYWdlRnVsZmlsbG1lbnRcIlxuXHRcdFx0XHRcdFx0c0N1cnJlbnRIYXNoICs9IFwiP1wiO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGNvbnN0IGZuSXNVbmF2YWlsYWJsZUFjdGlvbiA9IGZ1bmN0aW9uIChzU2VtYW50aWNPYmplY3Q6IGFueSwgc0FjdGlvbjogYW55KSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHRcdFx0XHQhIW9VbmF2YWlsYWJsZUFjdGlvbnMgJiZcblx0XHRcdFx0XHRcdFx0ISFvVW5hdmFpbGFibGVBY3Rpb25zW3NTZW1hbnRpY09iamVjdF0gJiZcblx0XHRcdFx0XHRcdFx0b1VuYXZhaWxhYmxlQWN0aW9uc1tzU2VtYW50aWNPYmplY3RdLmluZGV4T2Yoc0FjdGlvbikgPiAtMVxuXHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHR9O1xuXHRcdFx0XHRcdGNvbnN0IGZuQWRkTGluayA9IGZ1bmN0aW9uIChfb0xpbms6IGFueSkge1xuXHRcdFx0XHRcdFx0Y29uc3Qgb1NoZWxsSGFzaCA9IG9TaGVsbFNlcnZpY2VzLnBhcnNlU2hlbGxIYXNoKF9vTGluay5pbnRlbnQpO1xuXHRcdFx0XHRcdFx0aWYgKGZuSXNVbmF2YWlsYWJsZUFjdGlvbihvU2hlbGxIYXNoLnNlbWFudGljT2JqZWN0LCBvU2hlbGxIYXNoLmFjdGlvbikpIHtcblx0XHRcdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0Y29uc3Qgc0hyZWYgPSBgIyR7b1NoZWxsU2VydmljZXMuY29uc3RydWN0U2hlbGxIYXNoKHsgdGFyZ2V0OiB7IHNoZWxsSGFzaDogX29MaW5rLmludGVudCB9IH0pfWA7XG5cblx0XHRcdFx0XHRcdGlmIChfb0xpbmsuaW50ZW50ICYmIF9vTGluay5pbnRlbnQuaW5kZXhPZihzQ3VycmVudEhhc2gpID09PSAwKSB7XG5cdFx0XHRcdFx0XHRcdC8vIFByZXZlbnQgY3VycmVudCBhcHAgZnJvbSBiZWluZyBsaXN0ZWRcblx0XHRcdFx0XHRcdFx0Ly8gTk9URTogSWYgdGhlIG5hdmlnYXRpb24gdGFyZ2V0IGV4aXN0cyBpblxuXHRcdFx0XHRcdFx0XHQvLyBtdWx0aXBsZSBjb250ZXh0cyAoflhYWFggaW4gaGFzaCkgdGhleSB3aWxsIGFsbCBiZSBza2lwcGVkXG5cdFx0XHRcdFx0XHRcdG9OYXZpZ2F0aW9uVGFyZ2V0cy5vd25OYXZpZ2F0aW9uID0gbmV3IExpbmtJdGVtKHtcblx0XHRcdFx0XHRcdFx0XHRocmVmOiBzSHJlZixcblx0XHRcdFx0XHRcdFx0XHR0ZXh0OiBfb0xpbmsudGV4dFxuXHRcdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0Y29uc3Qgb0xpbmtJdGVtID0gbmV3IExpbmtJdGVtKHtcblx0XHRcdFx0XHRcdFx0Ly8gQXMgdGhlIHJldHJpZXZlTmF2aWdhdGlvblRhcmdldHMgbWV0aG9kIGNhbiBiZSBjYWxsZWQgc2V2ZXJhbCB0aW1lIHdlIGNhbiBub3QgY3JlYXRlIHRoZSBMaW5rSXRlbSBpbnN0YW5jZSB3aXRoIHRoZSBzYW1lIGlkXG5cdFx0XHRcdFx0XHRcdGtleTpcblx0XHRcdFx0XHRcdFx0XHRvU2hlbGxIYXNoLnNlbWFudGljT2JqZWN0ICYmIG9TaGVsbEhhc2guYWN0aW9uXG5cdFx0XHRcdFx0XHRcdFx0XHQ/IGAke29TaGVsbEhhc2guc2VtYW50aWNPYmplY3R9LSR7b1NoZWxsSGFzaC5hY3Rpb259YFxuXHRcdFx0XHRcdFx0XHRcdFx0OiB1bmRlZmluZWQsXG5cdFx0XHRcdFx0XHRcdHRleHQ6IF9vTGluay50ZXh0LFxuXHRcdFx0XHRcdFx0XHRkZXNjcmlwdGlvbjogdW5kZWZpbmVkLFxuXHRcdFx0XHRcdFx0XHRocmVmOiBzSHJlZixcblx0XHRcdFx0XHRcdFx0Ly8gdGFyZ2V0OiBub3Qgc3VwcG9ydGVkIHlldFxuXHRcdFx0XHRcdFx0XHRpY29uOiB1bmRlZmluZWQsIC8vX29MaW5rLmljb24sXG5cdFx0XHRcdFx0XHRcdGluaXRpYWxseVZpc2libGU6IF9vTGluay50YWdzICYmIF9vTGluay50YWdzLmluZGV4T2YoXCJzdXBlcmlvckFjdGlvblwiKSA+IC0xXG5cdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdGlmIChvTGlua0l0ZW0uZ2V0UHJvcGVydHkoXCJpbml0aWFsbHlWaXNpYmxlXCIpKSB7XG5cdFx0XHRcdFx0XHRcdGlTdXBlcmlvckFjdGlvbkxpbmtzRm91bmQrKztcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdG9OYXZpZ2F0aW9uVGFyZ2V0cy5hdmFpbGFibGVBY3Rpb25zLnB1c2gob0xpbmtJdGVtKTtcblxuXHRcdFx0XHRcdFx0aWYgKG9JbmZvTG9nKSB7XG5cdFx0XHRcdFx0XHRcdG9JbmZvTG9nLmFkZFNlbWFudGljT2JqZWN0SW50ZW50KG9TaGVsbEhhc2guc2VtYW50aWNPYmplY3QsIHtcblx0XHRcdFx0XHRcdFx0XHRpbnRlbnQ6IG9MaW5rSXRlbS5nZXRIcmVmKCksXG5cdFx0XHRcdFx0XHRcdFx0dGV4dDogb0xpbmtJdGVtLmdldFRleHQoKVxuXHRcdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9O1xuXHRcdFx0XHRcdGZvciAobGV0IG4gPSAwOyBuIDwgYVNlbWFudGljT2JqZWN0cy5sZW5ndGg7IG4rKykge1xuXHRcdFx0XHRcdFx0YUxpbmtzW25dWzBdLmZvckVhY2goZm5BZGRMaW5rKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0aWYgKGlTdXBlcmlvckFjdGlvbkxpbmtzRm91bmQgPT09IDApIHtcblx0XHRcdFx0XHRcdGZvciAobGV0IGlMaW5rSXRlbUluZGV4ID0gMDsgaUxpbmtJdGVtSW5kZXggPCBvTmF2aWdhdGlvblRhcmdldHMuYXZhaWxhYmxlQWN0aW9ucy5sZW5ndGg7IGlMaW5rSXRlbUluZGV4KyspIHtcblx0XHRcdFx0XHRcdFx0aWYgKGlMaW5rSXRlbUluZGV4IDwgdGhpcy5nZXRDb25zdGFudHMoKS5pTGlua3NTaG93bkluUG9wdXApIHtcblx0XHRcdFx0XHRcdFx0XHRvTmF2aWdhdGlvblRhcmdldHMuYXZhaWxhYmxlQWN0aW9uc1tpTGlua0l0ZW1JbmRleF0uc2V0UHJvcGVydHkoXCJpbml0aWFsbHlWaXNpYmxlXCIsIHRydWUpO1xuXHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvYmFuLXRzLWNvbW1lbnRcblx0XHRcdFx0XHQvLyBAdHMtaWdub3JlXG5cdFx0XHRcdFx0cmVzb2x2ZShvTmF2aWdhdGlvblRhcmdldHMuYXZhaWxhYmxlQWN0aW9ucywgb05hdmlnYXRpb25UYXJnZXRzLm93bk5hdmlnYXRpb24pO1xuXHRcdFx0XHR9IGNhdGNoIChvRXJyb3IpIHtcblx0XHRcdFx0XHRMb2cuZXJyb3IoXCJTaW1wbGVMaW5rRGVsZWdhdGU6ICdfcmV0cmlldmVOYXZpZ2F0aW9uVGFyZ2V0cycgZmFpbGVkIGV4ZWN1dGluZyBnZXRMaW5rcyBtZXRob2RcIik7XG5cdFx0XHRcdFx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9iYW4tdHMtY29tbWVudFxuXHRcdFx0XHRcdC8vIEB0cy1pZ25vcmVcblx0XHRcdFx0XHRyZXNvbHZlKG9OYXZpZ2F0aW9uVGFyZ2V0cy5hdmFpbGFibGVBY3Rpb25zLCBvTmF2aWdhdGlvblRhcmdldHMub3duTmF2aWdhdGlvbik7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdH0pO1xuXHR9KTtcbn07XG5TaW1wbGVMaW5rRGVsZWdhdGUuX2dldFNlbWFudGljT2JqZWN0cyA9IGZ1bmN0aW9uIChvUGF5bG9hZDogYW55KSB7XG5cdHJldHVybiBvUGF5bG9hZC5zZW1hbnRpY09iamVjdHMgPyBvUGF5bG9hZC5zZW1hbnRpY09iamVjdHMgOiBbXTtcbn07XG5TaW1wbGVMaW5rRGVsZWdhdGUuX2dldFNlbWFudGljT2JqZWN0VW5hdmFpbGFibGVBY3Rpb25zID0gZnVuY3Rpb24gKG9QYXlsb2FkOiBhbnkpIHtcblx0Y29uc3QgYVNlbWFudGljT2JqZWN0VW5hdmFpbGFibGVBY3Rpb25zOiBhbnlbXSA9IFtdO1xuXHRpZiAob1BheWxvYWQuc2VtYW50aWNPYmplY3RVbmF2YWlsYWJsZUFjdGlvbnMpIHtcblx0XHRvUGF5bG9hZC5zZW1hbnRpY09iamVjdFVuYXZhaWxhYmxlQWN0aW9ucy5mb3JFYWNoKGZ1bmN0aW9uIChvU2VtYW50aWNPYmplY3RVbmF2YWlsYWJsZUFjdGlvbjogYW55KSB7XG5cdFx0XHRhU2VtYW50aWNPYmplY3RVbmF2YWlsYWJsZUFjdGlvbnMucHVzaChcblx0XHRcdFx0bmV3IFNlbWFudGljT2JqZWN0VW5hdmFpbGFibGVBY3Rpb24oe1xuXHRcdFx0XHRcdHNlbWFudGljT2JqZWN0OiBvU2VtYW50aWNPYmplY3RVbmF2YWlsYWJsZUFjdGlvbi5zZW1hbnRpY09iamVjdCxcblx0XHRcdFx0XHRhY3Rpb25zOiBvU2VtYW50aWNPYmplY3RVbmF2YWlsYWJsZUFjdGlvbi5hY3Rpb25zXG5cdFx0XHRcdH0pXG5cdFx0XHQpO1xuXHRcdH0pO1xuXHR9XG5cdHJldHVybiBhU2VtYW50aWNPYmplY3RVbmF2YWlsYWJsZUFjdGlvbnM7XG59O1xuXG4vKipcbiAqIFRoaXMgd2lsbCByZXR1cm4gYW4gYXJyYXkgb2Yge0BsaW5rIHNhcC51aS5tZGMubGluay5TZW1hbnRpY09iamVjdE1hcHBpbmd9IGRlcGVuZGluZyBvbiB0aGUgZ2l2ZW4gcGF5bG9hZC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIG9QYXlsb2FkIFRoZSBwYXlsb2FkIGRlZmluZWQgYnkgdGhlIGFwcGxpY2F0aW9uXG4gKiBAcmV0dXJucyBBbiBhcnJheSBvZiBzZW1hbnRpYyBvYmplY3QgbWFwcGluZ3MuXG4gKi9cblNpbXBsZUxpbmtEZWxlZ2F0ZS5fZ2V0U2VtYW50aWNPYmplY3RNYXBwaW5ncyA9IGZ1bmN0aW9uIChvUGF5bG9hZDogYW55KSB7XG5cdGNvbnN0IGFTZW1hbnRpY09iamVjdE1hcHBpbmdzOiBhbnlbXSA9IFtdO1xuXHRsZXQgYVNlbWFudGljT2JqZWN0TWFwcGluZ0l0ZW1zOiBhbnlbXSA9IFtdO1xuXHRpZiAob1BheWxvYWQuc2VtYW50aWNPYmplY3RNYXBwaW5ncykge1xuXHRcdG9QYXlsb2FkLnNlbWFudGljT2JqZWN0TWFwcGluZ3MuZm9yRWFjaChmdW5jdGlvbiAob1NlbWFudGljT2JqZWN0TWFwcGluZzogYW55KSB7XG5cdFx0XHRhU2VtYW50aWNPYmplY3RNYXBwaW5nSXRlbXMgPSBbXTtcblx0XHRcdGlmIChvU2VtYW50aWNPYmplY3RNYXBwaW5nLml0ZW1zKSB7XG5cdFx0XHRcdG9TZW1hbnRpY09iamVjdE1hcHBpbmcuaXRlbXMuZm9yRWFjaChmdW5jdGlvbiAob1NlbWFudGljT2JqZWN0TWFwcGluZ0l0ZW06IGFueSkge1xuXHRcdFx0XHRcdGFTZW1hbnRpY09iamVjdE1hcHBpbmdJdGVtcy5wdXNoKFxuXHRcdFx0XHRcdFx0bmV3IFNlbWFudGljT2JqZWN0TWFwcGluZ0l0ZW0oe1xuXHRcdFx0XHRcdFx0XHRrZXk6IG9TZW1hbnRpY09iamVjdE1hcHBpbmdJdGVtLmtleSxcblx0XHRcdFx0XHRcdFx0dmFsdWU6IG9TZW1hbnRpY09iamVjdE1hcHBpbmdJdGVtLnZhbHVlXG5cdFx0XHRcdFx0XHR9KVxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdH0pO1xuXHRcdFx0fVxuXHRcdFx0YVNlbWFudGljT2JqZWN0TWFwcGluZ3MucHVzaChcblx0XHRcdFx0bmV3IFNlbWFudGljT2JqZWN0TWFwcGluZyh7XG5cdFx0XHRcdFx0c2VtYW50aWNPYmplY3Q6IG9TZW1hbnRpY09iamVjdE1hcHBpbmcuc2VtYW50aWNPYmplY3QsXG5cdFx0XHRcdFx0aXRlbXM6IGFTZW1hbnRpY09iamVjdE1hcHBpbmdJdGVtc1xuXHRcdFx0XHR9KVxuXHRcdFx0KTtcblx0XHR9KTtcblx0fVxuXHRyZXR1cm4gYVNlbWFudGljT2JqZWN0TWFwcGluZ3M7XG59O1xuLyoqXG4gKiBDb252ZXJ0cyBhIGdpdmVuIGFycmF5IG9mIFNlbWFudGljT2JqZWN0TWFwcGluZyBpbnRvIGEgTWFwIGNvbnRhaW5pbmcgU2VtYW50aWNPYmplY3RzIGFzIEtleXMgYW5kIGEgTWFwIG9mIGl0J3MgY29ycmVzcG9uZGluZyBTZW1hbnRpY09iamVjdE1hcHBpbmdzIGFzIHZhbHVlcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIGFTZW1hbnRpY09iamVjdE1hcHBpbmdzIEFuIGFycmF5IG9mIFNlbWFudGljT2JqZWN0TWFwcGluZ3MuXG4gKiBAcmV0dXJucyBUaGUgY29udmVydGVyZCBTZW1hbnRpY09iamVjdE1hcHBpbmdzXG4gKi9cblNpbXBsZUxpbmtEZWxlZ2F0ZS5fY29udmVydFNlbWFudGljT2JqZWN0TWFwcGluZyA9IGZ1bmN0aW9uIChhU2VtYW50aWNPYmplY3RNYXBwaW5nczogYW55W10pIHtcblx0aWYgKCFhU2VtYW50aWNPYmplY3RNYXBwaW5ncy5sZW5ndGgpIHtcblx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHR9XG5cdGNvbnN0IG1TZW1hbnRpY09iamVjdE1hcHBpbmdzOiBhbnkgPSB7fTtcblx0YVNlbWFudGljT2JqZWN0TWFwcGluZ3MuZm9yRWFjaChmdW5jdGlvbiAob1NlbWFudGljT2JqZWN0TWFwcGluZzogYW55KSB7XG5cdFx0aWYgKCFvU2VtYW50aWNPYmplY3RNYXBwaW5nLmdldFNlbWFudGljT2JqZWN0KCkpIHtcblx0XHRcdHRocm93IEVycm9yKFxuXHRcdFx0XHRgU2ltcGxlTGlua0RlbGVnYXRlOiAnc2VtYW50aWNPYmplY3QnIHByb3BlcnR5IHdpdGggdmFsdWUgJyR7b1NlbWFudGljT2JqZWN0TWFwcGluZy5nZXRTZW1hbnRpY09iamVjdCgpfScgaXMgbm90IHZhbGlkYFxuXHRcdFx0KTtcblx0XHR9XG5cdFx0bVNlbWFudGljT2JqZWN0TWFwcGluZ3Nbb1NlbWFudGljT2JqZWN0TWFwcGluZy5nZXRTZW1hbnRpY09iamVjdCgpXSA9IG9TZW1hbnRpY09iamVjdE1hcHBpbmdcblx0XHRcdC5nZXRJdGVtcygpXG5cdFx0XHQucmVkdWNlKGZ1bmN0aW9uIChvTWFwOiBhbnksIG9JdGVtOiBhbnkpIHtcblx0XHRcdFx0b01hcFtvSXRlbS5nZXRLZXkoKV0gPSBvSXRlbS5nZXRWYWx1ZSgpO1xuXHRcdFx0XHRyZXR1cm4gb01hcDtcblx0XHRcdH0sIHt9KTtcblx0fSk7XG5cdHJldHVybiBtU2VtYW50aWNPYmplY3RNYXBwaW5ncztcbn07XG4vKipcbiAqIENvbnZlcnRzIGEgZ2l2ZW4gYXJyYXkgb2YgU2VtYW50aWNPYmplY3RVbmF2YWlsYWJsZUFjdGlvbnMgaW50byBhIG1hcCBjb250YWluaW5nIFNlbWFudGljT2JqZWN0cyBhcyBrZXlzIGFuZCBhIG1hcCBvZiBpdHMgY29ycmVzcG9uZGluZyBTZW1hbnRpY09iamVjdFVuYXZhaWxhYmxlQWN0aW9ucyBhcyB2YWx1ZXMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSBhU2VtYW50aWNPYmplY3RVbmF2YWlsYWJsZUFjdGlvbnMgVGhlIFNlbWFudGljT2JqZWN0VW5hdmFpbGFibGVBY3Rpb25zIGNvbnZlcnRlZFxuICogQHJldHVybnMgVGhlIG1hcCBjb250YWluaW5nIHRoZSBjb252ZXJ0ZWQgU2VtYW50aWNPYmplY3RVbmF2YWlsYWJsZUFjdGlvbnNcbiAqL1xuU2ltcGxlTGlua0RlbGVnYXRlLl9jb252ZXJ0U2VtYW50aWNPYmplY3RVbmF2YWlsYWJsZUFjdGlvbiA9IGZ1bmN0aW9uIChhU2VtYW50aWNPYmplY3RVbmF2YWlsYWJsZUFjdGlvbnM6IGFueVtdKSB7XG5cdGxldCBfU2VtYW50aWNPYmplY3ROYW1lOiBhbnk7XG5cdGxldCBfU2VtYW50aWNPYmplY3RIYXNBbHJlYWR5VW5hdmFpbGFibGVBY3Rpb25zOiBhbnk7XG5cdGxldCBfVW5hdmFpbGFibGVBY3Rpb25zOiBhbnlbXSA9IFtdO1xuXHRpZiAoIWFTZW1hbnRpY09iamVjdFVuYXZhaWxhYmxlQWN0aW9ucy5sZW5ndGgpIHtcblx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHR9XG5cdGNvbnN0IG1TZW1hbnRpY09iamVjdFVuYXZhaWxhYmxlQWN0aW9uczogYW55ID0ge307XG5cdGFTZW1hbnRpY09iamVjdFVuYXZhaWxhYmxlQWN0aW9ucy5mb3JFYWNoKGZ1bmN0aW9uIChvU2VtYW50aWNPYmplY3RVbmF2YWlsYWJsZUFjdGlvbnM6IGFueSkge1xuXHRcdF9TZW1hbnRpY09iamVjdE5hbWUgPSBvU2VtYW50aWNPYmplY3RVbmF2YWlsYWJsZUFjdGlvbnMuZ2V0U2VtYW50aWNPYmplY3QoKTtcblx0XHRpZiAoIV9TZW1hbnRpY09iamVjdE5hbWUpIHtcblx0XHRcdHRocm93IEVycm9yKGBTaW1wbGVMaW5rRGVsZWdhdGU6ICdzZW1hbnRpY09iamVjdCcgcHJvcGVydHkgd2l0aCB2YWx1ZSAnJHtfU2VtYW50aWNPYmplY3ROYW1lfScgaXMgbm90IHZhbGlkYCk7XG5cdFx0fVxuXHRcdF9VbmF2YWlsYWJsZUFjdGlvbnMgPSBvU2VtYW50aWNPYmplY3RVbmF2YWlsYWJsZUFjdGlvbnMuZ2V0QWN0aW9ucygpO1xuXHRcdGlmIChtU2VtYW50aWNPYmplY3RVbmF2YWlsYWJsZUFjdGlvbnNbX1NlbWFudGljT2JqZWN0TmFtZV0gPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0bVNlbWFudGljT2JqZWN0VW5hdmFpbGFibGVBY3Rpb25zW19TZW1hbnRpY09iamVjdE5hbWVdID0gX1VuYXZhaWxhYmxlQWN0aW9ucztcblx0XHR9IGVsc2Uge1xuXHRcdFx0X1NlbWFudGljT2JqZWN0SGFzQWxyZWFkeVVuYXZhaWxhYmxlQWN0aW9ucyA9IG1TZW1hbnRpY09iamVjdFVuYXZhaWxhYmxlQWN0aW9uc1tfU2VtYW50aWNPYmplY3ROYW1lXTtcblx0XHRcdF9VbmF2YWlsYWJsZUFjdGlvbnMuZm9yRWFjaChmdW5jdGlvbiAoVW5hdmFpbGFibGVBY3Rpb246IHN0cmluZykge1xuXHRcdFx0XHRfU2VtYW50aWNPYmplY3RIYXNBbHJlYWR5VW5hdmFpbGFibGVBY3Rpb25zLnB1c2goVW5hdmFpbGFibGVBY3Rpb24pO1xuXHRcdFx0fSk7XG5cdFx0XHRtU2VtYW50aWNPYmplY3RVbmF2YWlsYWJsZUFjdGlvbnNbX1NlbWFudGljT2JqZWN0TmFtZV0gPSBfU2VtYW50aWNPYmplY3RIYXNBbHJlYWR5VW5hdmFpbGFibGVBY3Rpb25zO1xuXHRcdH1cblx0fSk7XG5cdHJldHVybiBtU2VtYW50aWNPYmplY3RVbmF2YWlsYWJsZUFjdGlvbnM7XG59O1xuXG5leHBvcnQgZGVmYXVsdCBTaW1wbGVMaW5rRGVsZWdhdGU7XG4iXSwibWFwcGluZ3MiOiI7QUFBQTtBQUFBO0FBQUE7Ozs7O0VBa2pCTyxnQkFBZ0JBLElBQUksRUFBRUMsT0FBTyxFQUFFO0lBQ3JDLElBQUk7TUFDSCxJQUFJQyxNQUFNLEdBQUdGLElBQUksRUFBRTtJQUNwQixDQUFDLENBQUMsT0FBTUcsQ0FBQyxFQUFFO01BQ1YsT0FBT0YsT0FBTyxDQUFDRSxDQUFDLENBQUM7SUFDbEI7SUFDQSxJQUFJRCxNQUFNLElBQUlBLE1BQU0sQ0FBQ0UsSUFBSSxFQUFFO01BQzFCLE9BQU9GLE1BQU0sQ0FBQ0UsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFSCxPQUFPLENBQUM7SUFDcEM7SUFDQSxPQUFPQyxNQUFNO0VBQ2Q7RUFyaEJPLGlCQUFpQkcsSUFBSSxFQUFFQyxLQUFLLEVBQUVDLEtBQUssRUFBRTtJQUMzQyxJQUFJLENBQUNGLElBQUksQ0FBQ0csQ0FBQyxFQUFFO01BQ1osSUFBSUQsS0FBSyxpQkFBaUIsRUFBRTtRQUMzQixJQUFJQSxLQUFLLENBQUNDLENBQUMsRUFBRTtVQUNaLElBQUlGLEtBQUssR0FBRyxDQUFDLEVBQUU7WUFDZEEsS0FBSyxHQUFHQyxLQUFLLENBQUNDLENBQUM7VUFDaEI7VUFDQUQsS0FBSyxHQUFHQSxLQUFLLENBQUNFLENBQUM7UUFDaEIsQ0FBQyxNQUFNO1VBQ05GLEtBQUssQ0FBQ0csQ0FBQyxHQUFHLFFBQVFDLElBQUksQ0FBQyxJQUFJLEVBQUVOLElBQUksRUFBRUMsS0FBSyxDQUFDO1VBQ3pDO1FBQ0Q7TUFDRDtNQUNBLElBQUlDLEtBQUssSUFBSUEsS0FBSyxDQUFDSCxJQUFJLEVBQUU7UUFDeEJHLEtBQUssQ0FBQ0gsSUFBSSxDQUFDLFFBQVFPLElBQUksQ0FBQyxJQUFJLEVBQUVOLElBQUksRUFBRUMsS0FBSyxDQUFDLEVBQUUsUUFBUUssSUFBSSxDQUFD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
|
|
@@ -419,36 +419,39 @@ SimpleLinkDelegate._setObjectMappings = function (
|
|
|
419
419
|
for (const i in oMappings) {
|
|
420
420
|
const sLocalProperty = oMappings[i].key;
|
|
421
421
|
const sSemanticObjectProperty = oMappings[i].value;
|
|
422
|
-
if (
|
|
423
|
-
|
|
424
|
-
|
|
425
|
-
|
|
426
|
-
|
|
427
|
-
|
|
428
|
-
|
|
429
|
-
|
|
430
|
-
|
|
422
|
+
if (sLocalProperty !== sSemanticObjectProperty) {
|
|
423
|
+
if (oParams[sLocalProperty]) {
|
|
424
|
+
modifiedSelectionVariant.removeParameter(sSemanticObjectProperty);
|
|
425
|
+
modifiedSelectionVariant.removeSelectOption(sSemanticObjectProperty);
|
|
426
|
+
modifiedSelectionVariant.renameParameter(sLocalProperty, sSemanticObjectProperty);
|
|
427
|
+
modifiedSelectionVariant.renameSelectOption(sLocalProperty, sSemanticObjectProperty);
|
|
428
|
+
oParams[sSemanticObjectProperty] = oParams[sLocalProperty];
|
|
429
|
+
delete oParams[sLocalProperty];
|
|
430
|
+
hasChanged = true;
|
|
431
|
+
}
|
|
431
432
|
// We remove the parameter as there is no value
|
|
432
|
-
|
|
433
|
-
|
|
434
|
-
|
|
435
|
-
|
|
436
|
-
|
|
437
|
-
|
|
438
|
-
|
|
439
|
-
|
|
440
|
-
|
|
441
|
-
|
|
442
|
-
|
|
443
|
-
|
|
444
|
-
|
|
445
|
-
|
|
446
|
-
|
|
433
|
+
|
|
434
|
+
// The local property comes from a navigation property
|
|
435
|
+
else if (sLocalProperty.split("/").length > 1) {
|
|
436
|
+
// find the property to be removed
|
|
437
|
+
const propertyToBeRemoved = sLocalProperty.split("/").slice(-1)[0];
|
|
438
|
+
// The navigation property has no value
|
|
439
|
+
if (!oParams[propertyToBeRemoved]) {
|
|
440
|
+
delete oParams[propertyToBeRemoved];
|
|
441
|
+
modifiedSelectionVariant.removeParameter(propertyToBeRemoved);
|
|
442
|
+
modifiedSelectionVariant.removeSelectOption(propertyToBeRemoved);
|
|
443
|
+
} else if (propertyToBeRemoved !== sSemanticObjectProperty) {
|
|
444
|
+
// The navigation property has a value and properties names are different
|
|
445
|
+
modifiedSelectionVariant.renameParameter(propertyToBeRemoved, sSemanticObjectProperty);
|
|
446
|
+
modifiedSelectionVariant.renameSelectOption(propertyToBeRemoved, sSemanticObjectProperty);
|
|
447
|
+
oParams[sSemanticObjectProperty] = oParams[propertyToBeRemoved];
|
|
448
|
+
delete oParams[propertyToBeRemoved];
|
|
449
|
+
}
|
|
450
|
+
} else {
|
|
451
|
+
delete oParams[sLocalProperty];
|
|
452
|
+
modifiedSelectionVariant.removeParameter(sSemanticObjectProperty);
|
|
453
|
+
modifiedSelectionVariant.removeSelectOption(sSemanticObjectProperty);
|
|
447
454
|
}
|
|
448
|
-
} else {
|
|
449
|
-
delete oParams[sLocalProperty];
|
|
450
|
-
modifiedSelectionVariant.removeParameter(sSemanticObjectProperty);
|
|
451
|
-
modifiedSelectionVariant.removeSelectOption(sSemanticObjectProperty);
|
|
452
455
|
}
|
|
453
456
|
}
|
|
454
457
|
}
|
|
@@ -29,7 +29,7 @@ sap.ui.define(["sap/fe/core/library", "sap/fe/macros/filter/type/MultiValue", "s
|
|
|
29
29
|
controls: [],
|
|
30
30
|
elements: [],
|
|
31
31
|
// eslint-disable-next-line no-template-curly-in-string
|
|
32
|
-
version: "1.108.
|
|
32
|
+
version: "1.108.12",
|
|
33
33
|
noLibraryCSS: true
|
|
34
34
|
});
|
|
35
35
|
thisLib.NavigationType = {
|