@sapui5/sap.fe.macros 1.142.1 → 1.142.2
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 +1 -1
- package/src/sap/fe/macros/.library +1 -1
- package/src/sap/fe/macros/controls/FileWrapper.js +4 -3
- package/src/sap/fe/macros/controls/FileWrapper.ts +3 -2
- package/src/sap/fe/macros/controls/Section.js +3 -2
- package/src/sap/fe/macros/controls/Section.ts +1 -1
- package/src/sap/fe/macros/field/FieldTemplating.js +1 -1
- package/src/sap/fe/macros/field/FieldTemplating.ts +1 -1
- package/src/sap/fe/macros/internal/field/DisplayStyle.js +3 -2
- package/src/sap/fe/macros/internal/field/DisplayStyle.tsx +1 -0
- package/src/sap/fe/macros/internal/valuehelp/ValueListHelper.js +23 -3
- package/src/sap/fe/macros/internal/valuehelp/ValueListHelper.ts +24 -2
- package/src/sap/fe/macros/library.js +1 -1
- package/src/sap/fe/macros/multivaluefield/MultiValueFieldDelegate.js +5 -1
- package/src/sap/fe/macros/multivaluefield/MultiValueFieldDelegate.ts +4 -0
- package/src/sap/fe/macros/table/MdcTableTemplate.js +5 -4
- package/src/sap/fe/macros/table/MdcTableTemplate.tsx +4 -3
- package/src/sap/fe/macros/table/TableAPI.js +17 -4
- package/src/sap/fe/macros/table/TableAPI.ts +15 -0
- package/src/sap/fe/macros/table/TableEventHandlerProvider.js +10 -1
- package/src/sap/fe/macros/table/TableEventHandlerProvider.ts +10 -0
- package/src/sap/fe/macros/table/TableRuntime.js +6 -4
- package/src/sap/fe/macros/table/TableRuntime.ts +16 -3
- package/src/sap/fe/macros/table/mixin/ContextMenuHandler.js +2 -4
- package/src/sap/fe/macros/table/mixin/ContextMenuHandler.ts +1 -2
- package/src/sap/fe/macros/table/mixin/EmptyRowsHandler.js +10 -4
- package/src/sap/fe/macros/table/mixin/EmptyRowsHandler.ts +9 -3
- package/src/sap/fe/macros/valuehelp/ValueHelpDelegate.js +25 -9
- package/src/sap/fe/macros/valuehelp/ValueHelpDelegate.ts +33 -17
|
@@ -629,6 +629,15 @@ sap.ui.define(["sap/base/Log", "sap/base/util/ObjectPath", "sap/fe/core/CommonUt
|
|
|
629
629
|
//In and InOut and Out
|
|
630
630
|
if (ValueListHelper._parameterIsA(parameter, ["com.sap.vocabularies.Common.v1.ValueListParameterIn", "com.sap.vocabularies.Common.v1.ValueListParameterOut", "com.sap.vocabularies.Common.v1.ValueListParameterInOut"]) && localDataPropertyPath !== propertyName || ValueListHelper._parameterIsA(parameter, ["com.sap.vocabularies.Common.v1.ValueListParameterOut"])) {
|
|
631
631
|
const vhParameter = ValueListHelper._getVhParameter(conditionModel, valueHelp, contextPrefix, parameter, metaModel, localDataPropertyPath);
|
|
632
|
+
// Derive conditionPath from helpPath for 1:n navigation detection
|
|
633
|
+
try {
|
|
634
|
+
const conditionPath = ValueListHelper._getConditionPath(metaModelVH, entitySetPath, parameter.ValueListProperty);
|
|
635
|
+
if (conditionPath && conditionPath !== parameter.ValueListProperty) {
|
|
636
|
+
vhParameter.conditionPath = conditionPath;
|
|
637
|
+
}
|
|
638
|
+
} catch (error) {
|
|
639
|
+
ValueListHelper._logError("ValueListHelper", error);
|
|
640
|
+
}
|
|
632
641
|
if (!isForMultiValueField || isForMultiValueField && ValueListHelper._parameterIsA(parameter, ["com.sap.vocabularies.Common.v1.ValueListParameterIn"])) {
|
|
633
642
|
// in case of Multivalue Field we disregard ValueListParameterInOut
|
|
634
643
|
vhParameters.push(vhParameter);
|
|
@@ -637,13 +646,24 @@ sap.ui.define(["sap/base/Log", "sap/base/util/ObjectPath", "sap/fe/core/CommonUt
|
|
|
637
646
|
|
|
638
647
|
//Constant as InParamter for filtering
|
|
639
648
|
if (parameter.$Type === AnnotationValueListParameterConstant) {
|
|
640
|
-
|
|
649
|
+
const constantParameter = {
|
|
641
650
|
parmeterType: parameter.$Type,
|
|
642
651
|
source: parameter.ValueListProperty,
|
|
643
652
|
helpPath: parameter.ValueListProperty,
|
|
644
653
|
constantValue: parameter.Constant,
|
|
645
654
|
initialValueIsSignificant: Boolean(parameter.InitialValueIsSignificant)
|
|
646
|
-
}
|
|
655
|
+
};
|
|
656
|
+
|
|
657
|
+
// Derive conditionPath for constant parameters as well
|
|
658
|
+
try {
|
|
659
|
+
const conditionPath = ValueListHelper._getConditionPath(metaModelVH, entitySetPath, parameter.ValueListProperty);
|
|
660
|
+
if (conditionPath && conditionPath !== parameter.ValueListProperty) {
|
|
661
|
+
constantParameter.conditionPath = conditionPath;
|
|
662
|
+
}
|
|
663
|
+
} catch (error) {
|
|
664
|
+
ValueListHelper._logError("ValueListHelper", error);
|
|
665
|
+
}
|
|
666
|
+
vhParameters.push(constantParameter);
|
|
647
667
|
}
|
|
648
668
|
|
|
649
669
|
// Enrich keys with out-parameters
|
|
@@ -1224,4 +1244,4 @@ sap.ui.define(["sap/base/Log", "sap/base/util/ObjectPath", "sap/fe/core/CommonUt
|
|
|
1224
1244
|
};
|
|
1225
1245
|
return ValueListHelper;
|
|
1226
1246
|
}, false);
|
|
1227
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJjb2x1bW5Ob3RBbHJlYWR5RGVmaW5lZCIsImNvbHVtbkRlZnMiLCJ2aEtleSIsInNvbWUiLCJjb2x1bW4iLCJwYXRoIiwiQW5ub3RhdGlvbkxhYmVsIiwiQW5ub3RhdGlvblRleHQiLCJBbm5vdGF0aW9uVGV4dFVJVGV4dEFycmFuZ2VtZW50IiwiQW5ub3RhdGlvblZhbHVlTGlzdFBhcmFtZXRlckluIiwiQW5ub3RhdGlvblZhbHVlTGlzdFBhcmFtZXRlckNvbnN0YW50IiwiQW5ub3RhdGlvblZhbHVlTGlzdFBhcmFtZXRlck91dCIsIkFubm90YXRpb25WYWx1ZUxpc3RQYXJhbWV0ZXJJbk91dCIsIkFubm90YXRpb25WYWx1ZUxpc3RXaXRoRml4ZWRWYWx1ZXMiLCJBbm5vdGF0aW9uc1BlcnNvbmFsRGF0YVBvdGVudGlhbGx5U2Vuc2l0aXZlIiwiQW5ub3RhdGlvbnNWYWx1ZUxpc3RSZWxldmFudFF1YWxpZmllcnMiLCJfZXhwb3J0cyIsIl9nZXREZWZhdWx0U29ydFByb3BlcnR5TmFtZSIsInZhbHVlTGlzdEluZm8iLCJzb3J0RmllbGROYW1lIiwibWV0YU1vZGVsIiwiJG1vZGVsIiwiZ2V0TWV0YU1vZGVsIiwiZW50aXR5U2V0QW5ub3RhdGlvbnMiLCJnZXRPYmplY3QiLCJDb2xsZWN0aW9uUGF0aCIsInNvcnRSZXN0cmljdGlvbnNJbmZvIiwiZ2V0U29ydFJlc3RyaWN0aW9uc0luZm8iLCJmb3VuZEVsZW1lbnQiLCJQYXJhbWV0ZXJzIiwiZmluZCIsImVsZW1lbnQiLCIkVHlwZSIsIlZhbHVlTGlzdFByb3BlcnR5IiwicHJvcGVydHlJbmZvIiwic29ydGFibGUiLCJ1bmRlZmluZWQiLCJfcmVkdW5kYW50RGVzY3JpcHRpb24iLCJvVkxQYXJhbWV0ZXIiLCJhQ29sdW1uSW5mbyIsIm9Db2x1bW5JbmZvIiwiY29sdW1uSW5mbyIsInRleHRDb2x1bW5OYW1lIiwia2V5Q29sdW1uSGlkZGVuIiwia2V5Q29sdW1uRGlzcGxheUZvcm1hdCIsIl9oYXNJbXBvcnRhbmNlSGlnaCIsIm9WYWx1ZUxpc3RDb250ZXh0Iiwib1BhcmFtZXRlciIsIiRFbnVtTWVtYmVyIiwiX2J1aWxkJFNlbGVjdFN0cmluZyIsImNvbnRyb2wiLCJvVmlld0RhdGEiLCJnZXRNb2RlbCIsIm9EYXRhIiwiZ2V0RGF0YSIsImFDb2x1bW5zIiwiY29sdW1ucyIsInJlZHVjZSIsInNRdWVyeSIsIm9Qcm9wZXJ0eSIsImluY2x1ZGVzIiwiX2dldFZhbHVlSGVscENvbHVtbkRpc3BsYXlGb3JtYXQiLCJvUHJvcGVydHlBbm5vdGF0aW9ucyIsImlzVmFsdWVIZWxwV2l0aEZpeGVkVmFsdWVzIiwic0Rpc3BsYXlNb2RlIiwiQ29tbW9uVXRpbHMiLCJjb21wdXRlRGlzcGxheU1vZGUiLCJvVGV4dEFubm90YXRpb24iLCJvVGV4dEFycmFuZ2VtZW50QW5ub3RhdGlvbiIsIiRQYXRoIiwiZ2V0UHJlc2VudGF0aW9uVmFyaWFudCIsInZhbHVlTGlzdCIsInByZXNlbnRhdGlvblZhcmlhbnRRdWFsaWZpZXIiLCJQcmVzZW50YXRpb25WYXJpYW50UXVhbGlmaWVyIiwicHJlc2VudGF0aW9uVmFyaWFudFBhdGgiLCJWYWx1ZUxpc3RIZWxwZXIiLCJnZXRWYWx1ZUxpc3RDb2xsZWN0aW9uRW50aXR5U2V0IiwibVZhbHVlTGlzdCIsImNyZWF0ZUJpbmRpbmdDb250ZXh0IiwiaXNUcmVlVGFibGVUeXBlIiwiUmVjdXJzaXZlSGllcmFyY2h5UXVhbGlmaWVyIiwiZ2V0VGFibGVEZWxlZ2F0ZSIsInNEZWZhdWx0U29ydFByb3BlcnR5TmFtZSIsInByZXNlbnRhdGlvblZhcmlhbnQiLCJyZWN1cnNpdmVIaWVyYXJjaHlRdWFsaWZpZXIiLCJpbml0aWFsRXhwYW5zaW9uTGV2ZWwiLCJJbml0aWFsRXhwYW5zaW9uTGV2ZWwiLCJnZXRTb3J0Q29uZGl0aW9uc0Zyb21QcmVzZW50YXRpb25WYXJpYW50IiwiaXNTdWdnZXN0aW9uIiwiYXNDdXN0b21kYXRhIiwiYXJndW1lbnRzIiwibGVuZ3RoIiwiU29ydE9yZGVyIiwic29ydENvbmRpdGlvbnMiLCJzb3J0ZXJzIiwiZm9yRWFjaCIsImNvbmRpdGlvbiIsInNvcnRlciIsInByb3BlcnR5UGF0aCIsIlByb3BlcnR5IiwiJFByb3BlcnR5UGF0aCIsIm5hbWUiLCJEZXNjZW5kaW5nIiwiZGVzY2VuZGluZyIsImFzY2VuZGluZyIsInB1c2giLCJzdHJpbmdDb252ZXJ0ZXIiLCJDb21tb25IZWxwZXIiLCJzdHJpbmdpZnlDdXN0b21EYXRhIiwiSlNPTiIsInN0cmluZ2lmeSIsImdldFNvcnRDb25kaXRpb25zRm9yVmFsdWVMaXN0Iiwic29ydENvbmRpdGlvbnNGcm9tUHJlc2VudGF0aW9uVmFyaWFudCIsImdldFByb3BlcnR5UGF0aCIsIm9QYXJhbWV0ZXJzIiwiVW5ib3VuZEFjdGlvbiIsIkVudGl0eVR5cGVQYXRoIiwiQWN0aW9uIiwic3Vic3RyaW5nIiwibGFzdEluZGV4T2YiLCJnZXRWYWx1ZUxpc3RQcm9wZXJ0eSIsIm9Qcm9wZXJ0eUNvbnRleHQiLCJvVmFsdWVMaXN0TW9kZWwiLCJnZXRDb2x1bW5WaXNpYmlsaXR5Iiwib1ZhbHVlTGlzdCIsIm9Tb3VyY2UiLCJpc0Ryb3BEb3duTGlzdCIsInZhbHVlSGVscFdpdGhGaXhlZFZhbHVlcyIsImlzVmlzaWJsZSIsImNvbHVtbkluZm9zIiwiaXNEaWFsb2dUYWJsZSIsImNvbHVtbldpdGhIaWRkZW5Bbm5vdGF0aW9uIiwiY29sdW1uTmFtZSIsImhhc0hpZGRlbkFubm90YXRpb24iLCJnZXRDb2x1bW5WaXNpYmlsaXR5SW5mbyIsInNQcm9wZXJ0eUZ1bGxQYXRoIiwiYklzRHJvcERvd25MaXN0ZSIsIm9NZXRhTW9kZWwiLCJhQ29sdW1uSW5mb3MiLCJvQ29sdW1uSW5mb3MiLCJnZXRUYWJsZUl0ZW1zUGFyYW1ldGVycyIsInJlcXVlc3RHcm91cElkIiwiaXRlbVBhcmFtZXRlcnMiLCJzZWxlY3RTdHJpbmciLCJzZWxlY3RTdHJpbmdQYXJ0IiwiaXNTdXNwZW5kZWQiLCJkZWZhdWx0U29ydFByb3BlcnR5TmFtZSIsImpvaW4iLCJoYXNJbXBvcnRhbmNlIiwiZ2V0TWluU2NyZWVuV2lkdGgiLCJnZXRDb2x1bW5XaWR0aCIsImlzVmFsdWVMaXN0V2l0aEZpeGVkVmFsdWVzIiwiaXNTbWFsbERldmljZSIsInRhcmdldE9iamVjdCIsInByb3BlcnR5IiwicmVsYXRlZFByb3BlcnR5IiwiYWRkaXRpb25hbFByb3BlcnR5IiwiZ2V0QXNzb2NpYXRlZFRleHRQcm9wZXJ0eSIsImdldEFzc29jaWF0ZWRDdXJyZW5jeVByb3BlcnR5IiwiZ2V0QXNzb2NpYXRlZFVuaXRQcm9wZXJ0eSIsImdldEFzc29jaWF0ZWRUaW1lem9uZVByb3BlcnR5IiwidGV4dEFubm90YXRpb24iLCJhbm5vdGF0aW9ucyIsIkNvbW1vbiIsIlRleHQiLCJ0ZXh0QXJyYW5nZW1lbnQiLCJVSSIsIlRleHRBcnJhbmdlbWVudCIsInRvU3RyaW5nIiwibGFiZWwiLCJMYWJlbCIsImRpc3BsYXlNb2RlIiwiZ2V0RGlzcGxheU1vZGUiLCJzaXplIiwiaW5zdGFuY2VzIiwicHJvcCIsInByb3BlcnR5VHlwZUNvbmZpZyIsImdldFR5cGVDb25maWciLCJQcm9wZXJ0eU9EYXRhQ29uc3RydWN0b3IiLCJPYmplY3RQYXRoIiwiZ2V0IiwidHlwZSIsImZvcm1hdE9wdGlvbnMiLCJjb25zdHJhaW50cyIsInNXaWR0aCIsIlV0aWwiLCJjYWxjQ29sdW1uV2lkdGgiLCJwYXJzZUZsb2F0IiwicmVwbGFjZSIsIkxvZyIsImVycm9yIiwiZ2V0T3V0UGFyYW1ldGVyUGF0aHMiLCJhUGFyYW1ldGVycyIsInNQYXRoIiwiZW5kc1dpdGgiLCJlbnRpdHlJc1NlYXJjaGFibGUiLCJwcm9wZXJ0eUFubm90YXRpb25zIiwiY29sbGVjdGlvbkFubm90YXRpb25zIiwic2VhcmNoU3VwcG9ydGVkIiwiU2VhcmNoU3VwcG9ydGVkIiwic2VhcmNoYWJsZSIsIlNlYXJjaGFibGUiLCJfZ2V0Q29uZGl0aW9uUGF0aCIsImVudGl0eVNldCIsInBhcnRzIiwic3BsaXQiLCJjb25kaXRpb25QYXRoIiwicGFydGlhbFBhdGgiLCJwYXJ0Iiwic2hpZnQiLCIka2luZCIsIiRpc0NvbGxlY3Rpb24iLCJfZ2V0Q29sdW1uRGVmaW5pdGlvbkZyb21TZWxlY3Rpb25GaWVsZHMiLCJlbnRpdHlUeXBlQW5ub3RhdGlvbnMiLCJzZWxlY3Rpb25GaWVsZHMiLCJzZWxlY3Rpb25GaWVsZCIsInNlbGVjdGlvbkZpZWxkUGF0aCIsImNvbHVtbkRlZiIsImZpbHRlcmFibGUiLCJpc1Byb3BlcnR5RmlsdGVyYWJsZSIsIl9tZXJnZUNvbHVtbkRlZmluaXRpb25zRnJvbVByb3BlcnRpZXMiLCJ2YWx1ZUxpc3RQcm9wZXJ0eSIsImNvbHVtblBhdGgiLCJjb2x1bW5Qcm9wZXJ0eVR5cGUiLCJ0ZXh0UHJvcGVydHlQYXRoIiwidGV4dFBhdGgiLCJmaWx0ZXJJbk91dFBhcmFtZXRlcnMiLCJ2aFBhcmFtZXRlcnMiLCJ0eXBlRmlsdGVyIiwiZmlsdGVyIiwicGFyYW1ldGVyIiwicGFybWV0ZXJUeXBlIiwiZ2V0SW5QYXJhbWV0ZXJzIiwiZ2V0T3V0UGFyYW1ldGVycyIsImNyZWF0ZVZIVUlNb2RlbCIsInZhbHVlSGVscCIsInZoVUlNb2RlbCIsIkpTT05Nb2RlbCIsInNldE1vZGVsIiwic2V0UHJvcGVydHkiLCJfZ2V0RGlhbG9nVGl0bGUiLCJ2YWx1ZWhlbHBMYWJlbCIsInByb3BlcnR5TGFiZWwiLCJnZXRQcm9wZXJ0eSIsImRhdGFGaWVsZExhYmVsIiwiZ2V0Q29udHJvbCIsImRlc3Ryb3lWSENvbnRlbnQiLCJnZXREaWFsb2ciLCJkZXN0cm95Q29udGVudCIsImdldFR5cGVhaGVhZCIsInB1dERlZmF1bHRRdWFsaWZpZXJGaXJzdCIsInF1YWxpZmllcnMiLCJpbmRleERlZmF1bHRWSCIsImluZGV4T2YiLCJ1bnNoaWZ0Iiwic3BsaWNlIiwiX2dldENvbnRleHRQcmVmaXgiLCJiaW5kaW5nQ29udGV4dCIsInByb3BlcnR5QmluZGluZ1BhcnRzIiwiZ2V0UGF0aCIsImJpbmRpZ0NvbnRleHRQYXJ0cyIsImNvbnRleHRQcmVmaXhQYXJ0cyIsImkiLCJfZ2V0VmhQYXJhbWV0ZXIiLCJjb25kaXRpb25Nb2RlbCIsImNvbnRleHRQcmVmaXgiLCJ2aE1ldGFNb2RlbCIsImxvY2FsRGF0YVByb3BlcnR5UGF0aCIsInZhbHVlUGF0aCIsImdldEJpbmRpbmdDb250ZXh0IiwiZ2V0UGFyZW50IiwiaXNBIiwiX3BhcmFtZXRlcklzQSIsImZpcnN0TmF2aWdhdGlvblByb3BlcnR5Iiwib0JvdW5kRW50aXR5IiwiZ2V0TWV0YUNvbnRleHQiLCJzUGF0aE9mVGFibGUiLCJnZXRSb3dCaW5kaW5nIiwiZmlsdGVyQmFyQVBJIiwiZmlsdGVyQmFyTWV0YVBhdGgiLCJtZXRhUGF0aCIsInZhbHVlSGVscENvbnRleHRQYXRoIiwiZ2V0TWV0YVBhdGgiLCJjb250ZXh0TWV0YVBhdGgiLCJNZXRhUGF0aCIsImNvbnZlcnRUeXBlcyIsIm5ld1BhdGgiLCJnZXRNZXRhUGF0aEZvclBhdGgiLCJnZXRUYXJnZXQiLCJ0YXJnZXRFbnRpdHlTZXQiLCJnZXRDbG9zZXN0RW50aXR5U2V0IiwiZ2V0TWV0YVBhdGhGb3JPYmplY3QiLCJnZXRSZWxhdGl2ZVBhdGgiLCJzb3VyY2UiLCJoZWxwUGF0aCIsImNvbnN0YW50VmFsdWUiLCJDb25zdGFudCIsImluaXRpYWxWYWx1ZUlzU2lnbmlmaWNhbnQiLCJCb29sZWFuIiwiSW5pdGlhbFZhbHVlSXNTaWduaWZpY2FudCIsInBhcmFtZXRlclR5cGVzIiwiX2VucmljaFBhdGgiLCJwcm9wZXJ0eU5hbWUiLCJleHRlcm5hbElkUGF0aCIsImtleSIsImV4dGVybmFsSWRQcm9wZXJ0eSIsInBvcCIsImZpZWxkUHJvcGVydHlQYXRoIiwiZGVzY3JpcHRpb25QYXRoIiwiX2VucmljaEtleXMiLCJ2aEtleXMiLCJnZXRJbkFuZE91dFBhcmFtZXRlcnNMaXN0IiwiX2dldEVudGl0eVR5cGUiLCJtZXRhTW9kZWxWSCIsImVudGl0eVNldFBhdGgiLCJyZXF1ZXN0T2JqZWN0IiwiX3Byb2Nlc3NQYXJhbWV0ZXJzIiwiYW5ub3RhdGlvblZhbHVlTGlzdFR5cGUiLCJ2YWx1ZUhlbHBRdWFsaWZpZXIiLCJwYXlsb2FkIiwiZW50aXR5VHlwZSIsImlzRm9yTXVsdGlWYWx1ZUZpZWxkIiwidXNlTXVsdGlWYWx1ZUZpZWxkIiwiJEtleSIsImZpcnN0S2V5IiwiTG9jYWxEYXRhUHJvcGVydHkiLCJpc1BvdGVudGlhbGx5U2Vuc2l0aXZlIiwidmhQYXJhbWV0ZXIiLCJ2YWx1ZWxpc3RJbmZvIiwia2V5UGF0aCIsIl9sb2dFcnJvciIsInN0YXR1cyIsIm1lc3NhZ2UiLCJFcnJvciIsIlN0cmluZyIsIm1zZyIsImdldFZhbHVlTGlzdEluZm8iLCJ2YWx1ZUxpc3RJbmZvcyIsInByb3BlcnR5UGF0aFBhcnRzIiwidmFsdWVMaXN0QnlRdWFsaWZpZXIiLCJyZXF1ZXN0VmFsdWVMaXN0SW5mbyIsInZhbHVlSGVscFF1YWxpZmllcnMiLCJPYmplY3QiLCJrZXlzIiwiJHF1YWxpZmllciIsImVyciIsIkFMTEZSQUdNRU5UUyIsImxvZ0ZyYWdtZW50IiwiX2xvZ1RlbXBsYXRlZEZyYWdtZW50cyIsImZyYWdtZW50TmFtZSIsImZyYWdtZW50RGVmaW5pdGlvbiIsImxvZ0luZm8iLCJmcmFnbWVudCIsImdldExldmVsIiwiTGV2ZWwiLCJERUJVRyIsInNldFRpbWVvdXQiLCJfdGVtcGxhdGVGcmFnbWVudCIsInNvdXJjZU1vZGVsIiwiY29udGFpbmluZ1ZpZXciLCJnZXRUYXJnZXRWaWV3IiwiYXBwQ29tcG9uZW50IiwiZ2V0QXBwQ29tcG9uZW50IiwibG9jYWxWYWx1ZUxpc3RJbmZvIiwidmFsdWVMaXN0TW9kZWwiLCJ2YWx1ZUxpc3RTZXJ2aWNlTWV0YU1vZGVsIiwidmlld0RhdGEiLCJjb252ZXJ0ZXJUeXBlIiwiWE1MUHJlcHJvY2Vzc29yIiwicHJvY2VzcyIsIlhNTFRlbXBsYXRlUHJvY2Vzc29yIiwibG9hZFRlbXBsYXRlIiwiYmluZGluZ0NvbnRleHRzIiwiY29udGV4dFBhdGgiLCJtb2RlbHMiLCJ0ZW1wbGF0ZUNvbXBvbmVudCIsImdldENvbnRyb2xsZXIiLCJnZXRPd25lckNvbXBvbmVudCIsInJ1bkFzT3duZXIiLCJGcmFnbWVudCIsImxvYWQiLCJkZWZpbml0aW9uIiwiY29udHJvbGxlciIsIl9nZXRDb250ZW50SWQiLCJ2YWx1ZUhlbHBJZCIsImlzVHlwZWFoZWFkIiwiY29udGVudFR5cGUiLCJfYWRkSW5PdXRQYXJhbWV0ZXJzVG9QYXlsb2FkIiwidmhQcm9wZXJ0aWVzIiwiU2V0IiwiYWRkIiwiQXJyYXkiLCJmcm9tIiwidGV4dEFycmFuZ2VtZW50QW5ub3RhdGlvbiIsIl9nZXRXaWR0aEluUmVtIiwiaXNVbml0VmFsdWVIZWxwIiwid2lkdGgiLCIkIiwiZmxvYXRXaWR0aCIsIlJlbSIsImZyb21QeCIsImlzTmFOIiwiX2dldFRhYmxlV2lkdGgiLCJ0YWJsZSIsIm1pbldpZHRoIiwiaXNNdWx0aVNlbGVjdCIsImdldENvbHVtbnMiLCJ2aXNpYmxlQ29sdW1ucyIsImdldFZpc2libGUiLCJpbml0aWFsU3VtIiwic3VtV2lkdGgiLCJzdW0iLCJnZXRXaWR0aCIsIk1hdGgiLCJtYXgiLCJfZ2V0SlNPTk1vZGVsRm9yRGlhbG9nIiwiY29udGVudCIsImlzRHJvcERvd25MaXN0ZSIsImlkIiwiZ2V0SWQiLCJncm91cElkIiwiYlN1Z2dlc3Rpb24iLCJfZ2V0SlNPTk1vZGVsRm9yQ29uZGl0aW9uIiwiY2FzZVNlbnNpdGl2ZSIsIl9nZXRKU09OTW9kZWxGb3JUeXBlYWhlYWQiLCJjb250ZW50SWQiLCJfY3JlYXRlVmFsdWVIZWxwVHlwZWFoZWFkIiwic2V0S2V5UGF0aCIsInNldERlc2NyaXB0aW9uUGF0aCIsImhpc3RvcnkiLCJlbmFibGVkIiwiY2hlY2tIaXN0b3J5RW5hYmxlZCIsImRhdGEiLCJpbmZvIiwiZ2V0TWV0YWRhdGEiLCJnZXROYW1lIiwic2V0VGFibGUiLCJmaWVsZCIsInRhYmxlTW9kZSIsImdldE1heENvbmRpdGlvbnMiLCJzZXRNb2RlIiwiYWRkRXZlbnREZWxlZ2F0ZSIsIm9uQWZ0ZXJSZW5kZXJpbmciLCJSZXNpemVIYW5kbGVyIiwicmVnaXN0ZXIiLCJfc2V0VGFibGVXaWR0aCIsInJlZHVjZVdpZHRoRm9yVW5pdFZhbHVlSGVscCIsInRhYmxlV2lkdGgiLCJzZXRXaWR0aCIsImhpc3RvcnlTZXR0aW5ncyIsImdldE1hbmlmZXN0RW50cnkiLCJmaWVsZHMiLCJoaXN0b3J5RW5hYmxlZCIsImlzVmFsdWVMaXN0U2VhcmNoYWJsZSIsInZhbHVlTGlzdE1ldGFtb2RlbCIsIl9jcmVhdGVWYWx1ZUhlbHBEaWFsb2ciLCJjb25kaXRpb25Db250ZW50Iiwic291cmNlTW9kZWxEaWFsb2ciLCJmaXJzdFR5cGVBaGVhZENvbnRlbnQiLCJnZXRDb250ZW50IiwiZ2V0Q2FzZVNlbnNpdGl2ZSIsInNvdXJjZU1vZGVsQ29uZGl0aW9uIiwiYWRkRGVwZW5kZW50Iiwic2V0VmFsdWVIZWxwIiwiY29uZGl0aW9uVGFibGUiLCJnZXRUYWJsZSIsInRhYmxlUHJvbWlzZSIsImZpbHRlckJhclByb21pc2UiLCJmaWx0ZXJCYXIiLCJQcm9taXNlIiwiYWxsIiwic2V0RmlsdGVyQmFyIiwic2V0RmlsdGVyIiwiaW5pdGlhbGl6ZWQiLCJzZXRDb3B5UHJvdmlkZXJWaXNpYmlsaXR5IiwibWRjVGFibGUiLCJfc2V0U2hvd1AxM25CdXR0b24iLCJnZXRDb3B5UHJvdmlkZXIiLCJzZXRWaXNpYmxlIiwiX2dldENvbnRlbnRCeUlkIiwiY29udGVudExpc3QiLCJpdGVtIiwiX2NyZWF0ZVBvcG92ZXJDb250ZW50IiwidXNlQXNWYWx1ZUhlbHAiLCJNVGFibGUiLCJncm91cCIsIl9jcmVhdGVEaWFsb2dDb250ZW50IiwiZm9yY2VCaW5kIiwiTURDVGFibGUiLCJfc2hvd0NvbmRpdGlvbnNDb250ZW50IiwiY29udGFpbmVyIiwiY29uZGl0aW9uc0NvbnRlbnQiLCJDb25kaXRpb25zIiwiYWRkQ29udGVudCIsIl9hbGlnbk9yQ3JlYXRlQ29udGVudCIsInNob3dDb25kaXRpb25QYW5lbCIsIkZldGNoVmFsdWVzIiwiaW5zZXJ0Q29udGVudCIsIl9wcmVwYXJlVmFsdWVIZWxwVHlwZUFoZWFkIiwicXVhbGlmaWVyRm9yVHlwZWFoZWFkIiwic3ViVmFsdWVMaXN0SW5mbyIsImdldFVzZUFzVmFsdWVIZWxwIiwicmVtb3ZlQ29udGVudCIsIl9wcmVwYXJlVmFsdWVIZWxwRGlhbG9nIiwic2VsZWN0ZWRDb250ZW50SWQiLCJjb250ZW50TGlzdEl0ZW0iLCJoYXNPcGVyYXRvckVRIiwiZ2V0T3BlcmF0b3JzIiwic2VsZWN0ZWRJbmZvIiwic2VsZWN0ZWRDb250ZW50IiwidGl0bGUiLCJnZXRUcmFuc2xhdGVkVGV4dEZyb21FeHBCaW5kaW5nU3RyaW5nIiwic2V0VGl0bGUiLCJfYWRkRGVzY3JpcHRpb25JbmZvc1RvUGF5bG9hZCIsInZhbHVlSGVscERlc2NyaXB0aW9uUGF0aCIsImNvbnZlcnRlZE1ldGFkYXRhIiwicHJvcGVydHlEZXNjcmlwdGlvblBhdGgiLCJyZXNvbHZlUGF0aCIsInRhcmdldCIsInZhbHVlSGVscEtleVBhdGgiLCJtYXhMZW5ndGgiLCJleHRlcm5hbElkRnVsbFBhdGgiLCJzaG93VmFsdWVMaXN0IiwibWFwIiwiY29sIl0sInNvdXJjZVJvb3QiOiIuIiwic291cmNlcyI6WyJWYWx1ZUxpc3RIZWxwZXIudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBFbnRpdHlUeXBlLCBQYXRoQW5ub3RhdGlvbkV4cHJlc3Npb24sIFByb3BlcnR5IH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzXCI7XG5pbXBvcnQgeyBDb21tb25Bbm5vdGF0aW9uVHlwZXMgfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvdm9jYWJ1bGFyaWVzL0NvbW1vblwiO1xuaW1wb3J0IHR5cGUgeyBQcmVzZW50YXRpb25WYXJpYW50IH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL3ZvY2FidWxhcmllcy9VSVwiO1xuaW1wb3J0IExvZyBmcm9tIFwic2FwL2Jhc2UvTG9nXCI7XG5pbXBvcnQgT2JqZWN0UGF0aCBmcm9tIFwic2FwL2Jhc2UvdXRpbC9PYmplY3RQYXRoXCI7XG5pbXBvcnQgdHlwZSB7IENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uIH0gZnJvbSBcInNhcC9mZS9iYXNlL0JpbmRpbmdUb29sa2l0XCI7XG5pbXBvcnQgQ29tbW9uVXRpbHMgZnJvbSBcInNhcC9mZS9jb3JlL0NvbW1vblV0aWxzXCI7XG5pbXBvcnQgdHlwZSB7IE1ldGFNb2RlbFByb3BlcnR5QW5ub3RhdGlvbnMgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9NZXRhTW9kZWxDb252ZXJ0ZXJcIjtcbmltcG9ydCB7IGNvbnZlcnRUeXBlcyB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL01ldGFNb2RlbENvbnZlcnRlclwiO1xuaW1wb3J0IHsgZ2V0U29ydFJlc3RyaWN0aW9uc0luZm8sIGlzUHJvcGVydHlGaWx0ZXJhYmxlIH0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvTWV0YU1vZGVsRnVuY3Rpb25cIjtcbmltcG9ydCBNZXRhUGF0aCBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9NZXRhUGF0aFwiO1xuaW1wb3J0IHR5cGUgeyBGaWVsZERhdGFUeXBlIH0gZnJvbSBcInNhcC9mZS9jb3JlL3NlcnZpY2VzL1ZhbHVlSGVscEhpc3RvcnlTZXJ2aWNlRmFjdG9yeVwiO1xuaW1wb3J0IHR5cGUgeyBEYXRhTW9kZWxPYmplY3RQYXRoIH0gZnJvbSBcInNhcC9mZS9jb3JlL3RlbXBsYXRpbmcvRGF0YU1vZGVsUGF0aEhlbHBlclwiO1xuaW1wb3J0IHtcblx0Z2V0QXNzb2NpYXRlZEN1cnJlbmN5UHJvcGVydHksXG5cdGdldEFzc29jaWF0ZWRUZXh0UHJvcGVydHksXG5cdGdldEFzc29jaWF0ZWRUaW1lem9uZVByb3BlcnR5LFxuXHRnZXRBc3NvY2lhdGVkVW5pdFByb3BlcnR5XG59IGZyb20gXCJzYXAvZmUvY29yZS90ZW1wbGF0aW5nL1Byb3BlcnR5SGVscGVyXCI7XG5pbXBvcnQgeyBnZXREaXNwbGF5TW9kZSwgZ2V0VHlwZUNvbmZpZyB9IGZyb20gXCJzYXAvZmUvY29yZS90ZW1wbGF0aW5nL1VJRm9ybWF0dGVyc1wiO1xuaW1wb3J0IENvbW1vbkhlbHBlciBmcm9tIFwic2FwL2ZlL21hY3Jvcy9Db21tb25IZWxwZXJcIjtcbmltcG9ydCB0eXBlIEZpbHRlckJhckFQSSBmcm9tIFwic2FwL2ZlL21hY3Jvcy9maWx0ZXJCYXIvRmlsdGVyQmFyQVBJXCI7XG5pbXBvcnQgdHlwZSBUYWJsZSBmcm9tIFwic2FwL20vVGFibGVcIjtcbmltcG9ydCBVdGlsIGZyb20gXCJzYXAvbS90YWJsZS9VdGlsXCI7XG5pbXBvcnQgdHlwZSBDb250cm9sIGZyb20gXCJzYXAvdWkvY29yZS9Db250cm9sXCI7XG5pbXBvcnQgRnJhZ21lbnQgZnJvbSBcInNhcC91aS9jb3JlL0ZyYWdtZW50XCI7XG5pbXBvcnQgUmVzaXplSGFuZGxlciBmcm9tIFwic2FwL3VpL2NvcmUvUmVzaXplSGFuZGxlclwiO1xuaW1wb3J0IFhNTFRlbXBsYXRlUHJvY2Vzc29yIGZyb20gXCJzYXAvdWkvY29yZS9YTUxUZW1wbGF0ZVByb2Nlc3NvclwiO1xuaW1wb3J0IFhNTFByZXByb2Nlc3NvciBmcm9tIFwic2FwL3VpL2NvcmUvdXRpbC9YTUxQcmVwcm9jZXNzb3JcIjtcbmltcG9ydCBSZW0gZnJvbSBcInNhcC91aS9kb20vdW5pdHMvUmVtXCI7XG5pbXBvcnQgdHlwZSBGaWVsZCBmcm9tIFwic2FwL3VpL21kYy9GaWVsZFwiO1xuaW1wb3J0IHR5cGUgRmlsdGVyRmllbGQgZnJvbSBcInNhcC91aS9tZGMvRmlsdGVyRmllbGRcIjtcbmltcG9ydCB0eXBlIE11bHRpVmFsdWVGaWVsZCBmcm9tIFwic2FwL3VpL21kYy9NdWx0aVZhbHVlRmllbGRcIjtcbmltcG9ydCB0eXBlIE1kY0lubmVyVGFibGUgZnJvbSBcInNhcC91aS9tZGMvVGFibGVcIjtcbmltcG9ydCB0eXBlIFZhbHVlSGVscCBmcm9tIFwic2FwL3VpL21kYy9WYWx1ZUhlbHBcIjtcbmltcG9ydCB0eXBlIEZpZWxkQmFzZSBmcm9tIFwic2FwL3VpL21kYy9maWVsZC9GaWVsZEJhc2VcIjtcbmltcG9ydCB0eXBlIE1kY0ZpbHRlckJhciBmcm9tIFwic2FwL3VpL21kYy9maWx0ZXJiYXIvRmlsdGVyQmFyQmFzZVwiO1xuaW1wb3J0IHR5cGUgRmlsdGVyQmFyIGZyb20gXCJzYXAvdWkvbWRjL3ZhbHVlaGVscC9GaWx0ZXJCYXJcIjtcbmltcG9ydCB0eXBlIENvbnRhaW5lciBmcm9tIFwic2FwL3VpL21kYy92YWx1ZWhlbHAvYmFzZS9Db250YWluZXJcIjtcbmltcG9ydCB0eXBlIENvbnRlbnQgZnJvbSBcInNhcC91aS9tZGMvdmFsdWVoZWxwL2Jhc2UvQ29udGVudFwiO1xuaW1wb3J0IENvbmRpdGlvbnMgZnJvbSBcInNhcC91aS9tZGMvdmFsdWVoZWxwL2NvbnRlbnQvQ29uZGl0aW9uc1wiO1xuaW1wb3J0IE1EQ1RhYmxlLCB7IHR5cGUgJE1EQ1RhYmxlU2V0dGluZ3MgfSBmcm9tIFwic2FwL3VpL21kYy92YWx1ZWhlbHAvY29udGVudC9NRENUYWJsZVwiO1xuaW1wb3J0IE1UYWJsZSwgeyB0eXBlICRNVGFibGVTZXR0aW5ncyB9IGZyb20gXCJzYXAvdWkvbWRjL3ZhbHVlaGVscC9jb250ZW50L01UYWJsZVwiO1xuaW1wb3J0IHR5cGUgQmFzZUNvbnRleHQgZnJvbSBcInNhcC91aS9tb2RlbC9Db250ZXh0XCI7XG5pbXBvcnQgSlNPTk1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvanNvbi9KU09OTW9kZWxcIjtcbmltcG9ydCB0eXBlIE9EYXRhVHlwZSBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3R5cGUvT0RhdGFUeXBlXCI7XG5pbXBvcnQgdHlwZSBDb250ZXh0IGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvQ29udGV4dFwiO1xuaW1wb3J0IHR5cGUgT0RhdGFNZXRhTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9PRGF0YU1ldGFNb2RlbFwiO1xuaW1wb3J0IHR5cGUgT0RhdGFNb2RlbCBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L09EYXRhTW9kZWxcIjtcbmltcG9ydCB0eXBlIHsgTWV0YU1vZGVsRW50aXR5U2V0QW5ub3RhdGlvbiwgTWV0YU1vZGVsVHlwZSB9IGZyb20gXCJ0eXBlcy9tZXRhbW9kZWxfdHlwZXNcIjtcblxuZXhwb3J0IHR5cGUgQW5ub3RhdGlvblZhbHVlTGlzdFBhcmFtZXRlciA9IHtcblx0JFR5cGU6IHN0cmluZztcblx0VmFsdWVMaXN0UHJvcGVydHk6IHN0cmluZztcblx0TG9jYWxEYXRhUHJvcGVydHk/OiB7XG5cdFx0JFByb3BlcnR5UGF0aDogc3RyaW5nO1xuXHR9O1xuXHRDb25zdGFudD86IHN0cmluZztcblx0SW5pdGlhbFZhbHVlSXNTaWduaWZpY2FudD86IGJvb2xlYW47XG5cdFtcIkBjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5JbXBvcnRhbmNlXCJdPzoge1xuXHRcdCRFbnVtTWVtYmVyOiBzdHJpbmc7XG5cdH07XG59O1xuXG50eXBlIExvZ0ZyYWdtZW50TWV0aG9kID0gKGluZm86IHsgcGF0aDogc3RyaW5nOyBmcmFnbWVudE5hbWU6IHN0cmluZzsgZnJhZ21lbnQ6IHVua25vd24gfSkgPT4gdm9pZDtcblxuLy8gY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLlZhbHVlTGlzdFR5cGVcbmV4cG9ydCB0eXBlIEFubm90YXRpb25WYWx1ZUxpc3RUeXBlID0ge1xuXHQkVHlwZTogc3RyaW5nOyAvLyBDb21tb25Bbm5vdGF0aW9uVHlwZXMuVmFsdWVMaXN0VHlwZTtcblx0TGFiZWw/OiBzdHJpbmc7XG5cdENvbGxlY3Rpb25QYXRoOiBzdHJpbmc7XG5cdENvbGxlY3Rpb25Sb290Pzogc3RyaW5nO1xuXHREaXN0aW5jdFZhbHVlc1N1cHBvcnRlZD86IGJvb2xlYW47XG5cdFNlYXJjaFN1cHBvcnRlZD86IGJvb2xlYW47XG5cdEZldGNoVmFsdWVzPzogbnVtYmVyO1xuXHRQcmVzZW50YXRpb25WYXJpYW50UXVhbGlmaWVyPzogc3RyaW5nO1xuXHRTZWxlY3Rpb25WYXJpYW50UXVhbGlmaWVyPzogc3RyaW5nO1xuXHRQYXJhbWV0ZXJzOiBBbm5vdGF0aW9uVmFsdWVMaXN0UGFyYW1ldGVyW107XG5cdCRtb2RlbDogT0RhdGFNb2RlbDtcblx0JHF1YWxpZmllcj86IHN0cmluZzsgLy8gZGVmaW5lZCBpbiBjYXNlIG9mIFZhbHVlTGlzdFdpdGhGaXhlZFZhbHVlc1xufTtcblxuZXhwb3J0IHR5cGUgQW5ub3RhdGlvblZhbHVlTGlzdFR5cGVCeVF1YWxpZmllciA9IFJlY29yZDxzdHJpbmcsIEFubm90YXRpb25WYWx1ZUxpc3RUeXBlPjtcblxuY29uc3QgY29sdW1uTm90QWxyZWFkeURlZmluZWQgPSAoY29sdW1uRGVmczogQ29sdW1uRGVmW10sIHZoS2V5OiBzdHJpbmcpOiBib29sZWFuID0+ICFjb2x1bW5EZWZzLnNvbWUoKGNvbHVtbikgPT4gY29sdW1uLnBhdGggPT09IHZoS2V5KTtcblxuZXhwb3J0IGNvbnN0IEFubm90YXRpb25MYWJlbCA9IFwiQGNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5MYWJlbFwiLFxuXHRBbm5vdGF0aW9uVGV4dCA9IFwiQGNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5UZXh0XCIsXG5cdEFubm90YXRpb25UZXh0VUlUZXh0QXJyYW5nZW1lbnQgPSBcIkBjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuVGV4dEBjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5UZXh0QXJyYW5nZW1lbnRcIixcblx0QW5ub3RhdGlvblZhbHVlTGlzdFBhcmFtZXRlckluID0gXCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuVmFsdWVMaXN0UGFyYW1ldGVySW5cIixcblx0QW5ub3RhdGlvblZhbHVlTGlzdFBhcmFtZXRlckNvbnN0YW50ID0gXCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuVmFsdWVMaXN0UGFyYW1ldGVyQ29uc3RhbnRcIixcblx0QW5ub3RhdGlvblZhbHVlTGlzdFBhcmFtZXRlck91dCA9IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLlZhbHVlTGlzdFBhcmFtZXRlck91dFwiLFxuXHRBbm5vdGF0aW9uVmFsdWVMaXN0UGFyYW1ldGVySW5PdXQgPSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5WYWx1ZUxpc3RQYXJhbWV0ZXJJbk91dFwiLFxuXHRBbm5vdGF0aW9uVmFsdWVMaXN0V2l0aEZpeGVkVmFsdWVzID0gXCJAY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLlZhbHVlTGlzdFdpdGhGaXhlZFZhbHVlc1wiLFxuXHRBbm5vdGF0aW9uc1BlcnNvbmFsRGF0YVBvdGVudGlhbGx5U2Vuc2l0aXZlID0gXCJAY29tLnNhcC52b2NhYnVsYXJpZXMuUGVyc29uYWxEYXRhLnYxLklzUG90ZW50aWFsbHlTZW5zaXRpdmVcIixcblx0QW5ub3RhdGlvbnNWYWx1ZUxpc3RSZWxldmFudFF1YWxpZmllcnMgPSBcIkBjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuVmFsdWVMaXN0UmVsZXZhbnRRdWFsaWZpZXJzXCI7XG5cbnR5cGUgQW5ub3RhdGlvbnNGb3JQcm9wZXJ0eSA9IHtcblx0XCJAY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLlZhbHVlTGlzdFwiPzoge1xuXHRcdFNlYXJjaFN1cHBvcnRlZD86IGJvb2xlYW47XG5cdH07XG5cdFwiQGNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5MYWJlbFwiPzogc3RyaW5nOyAvLyBBbm5vdGF0aW9uTGFiZWxcblx0XCJAY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLlRleHRcIj86IHtcblx0XHQvLyBBbm5vdGF0aW9uVGV4dFxuXHRcdCRQYXRoOiBzdHJpbmc7XG5cdH07XG5cdFwiQGNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5UZXh0QGNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLlRleHRBcnJhbmdlbWVudFwiPzoge1xuXHRcdC8vIEFubm90YXRpb25UZXh0VUlUZXh0QXJyYW5nZW1lbnRcblx0XHQkRW51bU1lbWJlcj86IHN0cmluZztcblx0fTtcblx0XCJAY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuSGlkZGVuRmlsdGVyXCI/OiBib29sZWFuO1xuXHRcIkBjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuVmFsdWVMaXN0V2l0aEZpeGVkVmFsdWVzXCI/OiBib29sZWFuOyAvLyBBbm5vdGF0aW9uVmFsdWVMaXN0V2l0aEZpeGVkVmFsdWVzXG5cdFwiQGNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5WYWx1ZUxpc3RSZWxldmFudFF1YWxpZmllcnNcIj86IHN0cmluZ1tdO1xuXHRcIkBjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5IaWRkZW5cIj86IHN0cmluZztcblx0XCJAY29tLnNhcC52b2NhYnVsYXJpZXMuUGVyc29uYWxEYXRhLnYxLklzUG90ZW50aWFsbHlTZW5zaXRpdmVcIj86IGJvb2xlYW47XG59O1xuXG50eXBlIEFubm90YXRpb25TZWxlY3Rpb25GaWVsZCA9IHtcblx0JFByb3BlcnR5UGF0aDogc3RyaW5nO1xufTtcblxudHlwZSBBbm5vdGF0aW9uc0ZvckVudGl0eVR5cGUgPSB7XG5cdFwiQGNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLlNlbGVjdGlvbkZpZWxkc1wiPzogQW5ub3RhdGlvblNlbGVjdGlvbkZpZWxkW107XG59O1xuXG50eXBlIENvbHVtblByb3BlcnR5ID0ge1xuXHQkVHlwZTogc3RyaW5nO1xuXHQka2luZDogc3RyaW5nO1xuXHQkaXNDb2xsZWN0aW9uOiBib29sZWFuO1xufTtcblxuZXhwb3J0IHR5cGUgSW5PdXRQYXJhbWV0ZXIgPSB7XG5cdHBhcm1ldGVyVHlwZTogc3RyaW5nO1xuXHRzb3VyY2U6IHN0cmluZztcblx0aGVscFBhdGg6IHN0cmluZztcblx0aW5pdGlhbFZhbHVlSXNTaWduaWZpY2FudDogYm9vbGVhbjtcblx0Y29uc3RhbnRWYWx1ZT86IHN0cmluZyB8IGJvb2xlYW47XG59O1xuXG50eXBlIFZhbHVlSGVscFBheWxvYWRJbmZvID0ge1xuXHR2aEtleXM/OiBzdHJpbmdbXTtcblx0dmhQYXJhbWV0ZXJzPzogSW5PdXRQYXJhbWV0ZXJbXTtcblx0dmhQcm9wZXJ0aWVzPzogc3RyaW5nW107XG59O1xuXG50eXBlIFZhbHVlSGVscFF1YWxpZmllck1hcCA9IFJlY29yZDxzdHJpbmcsIFZhbHVlSGVscFBheWxvYWRJbmZvPjtcblxudHlwZSBIaXN0b3J5UGF5bG9hZCA9IHtcblx0ZW5hYmxlZD86IGJvb2xlYW47XG5cdGRhdGE/OiBGaWVsZERhdGFUeXBlW107XG5cdGhhc1JlbGV2YW50RGF0YT86IGJvb2xlYW47XG59O1xuXG5leHBvcnQgdHlwZSBWYWx1ZUhlbHBQYXlsb2FkID0ge1xuXHRwcm9wZXJ0eVBhdGg6IHN0cmluZztcblx0cXVhbGlmaWVyczogVmFsdWVIZWxwUXVhbGlmaWVyTWFwO1xuXHR2YWx1ZUhlbHBRdWFsaWZpZXI6IHN0cmluZztcblx0Y29uZGl0aW9uTW9kZWw/OiBzdHJpbmc7XG5cdGlzQWN0aW9uUGFyYW1ldGVyRGlhbG9nPzogYm9vbGVhbjtcblx0aXNVbml0VmFsdWVIZWxwPzogYm9vbGVhbjtcblx0cmVxdWVzdEdyb3VwSWQ/OiBzdHJpbmc7XG5cdHVzZU11bHRpVmFsdWVGaWVsZD86IGJvb2xlYW47XG5cdGlzVmFsdWVMaXN0V2l0aEZpeGVkVmFsdWVzPzogYm9vbGVhbjtcblx0dmFsdWVIZWxwRGVzY3JpcHRpb25QYXRoPzogc3RyaW5nO1xuXHRwcm9wZXJ0eURlc2NyaXB0aW9uUGF0aD86IHN0cmluZztcblx0bWF4TGVuZ3RoPzogbnVtYmVyO1xuXHR2YWx1ZUhlbHBLZXlQYXRoPzogc3RyaW5nO1xuXHRpc0RlZmluZUNvbmRpdGlvblZhbHVlSGVscD86IGJvb2xlYW47XG5cdGlzUG90ZW50aWFsbHlTZW5zaXRpdmU/OiBib29sZWFuO1xuXHRoaXN0b3J5PzogSGlzdG9yeVBheWxvYWQ7XG5cdGV4dGVybmFsSWRQYXRoPzogc3RyaW5nO1xufTtcblxudHlwZSBDb2x1bW5EZWYgPSB7XG5cdHBhdGg6IHN0cmluZztcblx0dGV4dFBhdGg/OiBzdHJpbmc7XG5cdGxhYmVsOiBzdHJpbmc7XG5cdHNvcnRhYmxlOiBib29sZWFuO1xuXHRmaWx0ZXJhYmxlOiBib29sZWFuIHwgQ29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb247XG5cdCRUeXBlOiBzdHJpbmc7XG59O1xuXG5leHBvcnQgdHlwZSBWYWx1ZUxpc3RJbmZvID0ge1xuXHRrZXlQYXRoOiBzdHJpbmc7XG5cdGRlc2NyaXB0aW9uUGF0aDogc3RyaW5nO1xuXHRmaWVsZFByb3BlcnR5UGF0aDogc3RyaW5nO1xuXHR2aEtleXM6IHN0cmluZ1tdO1xuXHR2aFBhcmFtZXRlcnM6IEluT3V0UGFyYW1ldGVyW107XG5cdHZhbHVlTGlzdEluZm86IEFubm90YXRpb25WYWx1ZUxpc3RUeXBlO1xuXHRjb2x1bW5EZWZzOiBDb2x1bW5EZWZbXTtcblx0dmFsdWVIZWxwUXVhbGlmaWVyOiBzdHJpbmc7XG59O1xuXG50eXBlIERpc3BsYXlGb3JtYXQgPSBcIkRlc2NyaXB0aW9uXCIgfCBcIlZhbHVlRGVzY3JpcHRpb25cIiB8IFwiVmFsdWVcIiB8IFwiRGVzY3JpcHRpb25WYWx1ZVwiO1xuXG50eXBlIFBhdGggPSB7XG5cdGZpZWxkUHJvcGVydHlQYXRoOiBzdHJpbmc7XG5cdGRlc2NyaXB0aW9uUGF0aDogc3RyaW5nO1xuXHRrZXk6IHN0cmluZztcbn07XG5cbmV4cG9ydCB0eXBlIFNvcnRlclR5cGUgPSB7XG5cdGFzY2VuZGluZz86IGJvb2xlYW47XG5cdGRlc2NlbmRpbmc/OiBib29sZWFuO1xuXHRwYXRoPzogc3RyaW5nO1xuXHRuYW1lPzogc3RyaW5nO1xufTtcblxuZnVuY3Rpb24gX2dldERlZmF1bHRTb3J0UHJvcGVydHlOYW1lKHZhbHVlTGlzdEluZm86IEFubm90YXRpb25WYWx1ZUxpc3RUeXBlKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcblx0bGV0IHNvcnRGaWVsZE5hbWU6IHN0cmluZyB8IHVuZGVmaW5lZDtcblx0Y29uc3QgbWV0YU1vZGVsID0gdmFsdWVMaXN0SW5mby4kbW9kZWwuZ2V0TWV0YU1vZGVsKCk7XG5cdGNvbnN0IGVudGl0eVNldEFubm90YXRpb25zID0gbWV0YU1vZGVsLmdldE9iamVjdChgLyR7dmFsdWVMaXN0SW5mby5Db2xsZWN0aW9uUGF0aH1AYCkgfHwge307XG5cdGNvbnN0IHNvcnRSZXN0cmljdGlvbnNJbmZvID0gZ2V0U29ydFJlc3RyaWN0aW9uc0luZm8oZW50aXR5U2V0QW5ub3RhdGlvbnMpO1xuXHRjb25zdCBmb3VuZEVsZW1lbnQgPSB2YWx1ZUxpc3RJbmZvLlBhcmFtZXRlcnMuZmluZChmdW5jdGlvbiAoZWxlbWVudCkge1xuXHRcdHJldHVybiAoXG5cdFx0XHQoZWxlbWVudC4kVHlwZSA9PT0gQ29tbW9uQW5ub3RhdGlvblR5cGVzLlZhbHVlTGlzdFBhcmFtZXRlckluT3V0IHx8XG5cdFx0XHRcdGVsZW1lbnQuJFR5cGUgPT09IENvbW1vbkFubm90YXRpb25UeXBlcy5WYWx1ZUxpc3RQYXJhbWV0ZXJPdXQgfHxcblx0XHRcdFx0ZWxlbWVudC4kVHlwZSA9PT0gQ29tbW9uQW5ub3RhdGlvblR5cGVzLlZhbHVlTGlzdFBhcmFtZXRlckRpc3BsYXlPbmx5KSAmJlxuXHRcdFx0IShcblx0XHRcdFx0bWV0YU1vZGVsLmdldE9iamVjdChgLyR7dmFsdWVMaXN0SW5mby5Db2xsZWN0aW9uUGF0aH0vJHtlbGVtZW50LlZhbHVlTGlzdFByb3BlcnR5fUBjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5IaWRkZW5gKSA9PT1cblx0XHRcdFx0dHJ1ZVxuXHRcdFx0KVxuXHRcdCk7XG5cdH0pO1xuXHRpZiAoZm91bmRFbGVtZW50KSB7XG5cdFx0aWYgKFxuXHRcdFx0bWV0YU1vZGVsLmdldE9iamVjdChcblx0XHRcdFx0YC8ke3ZhbHVlTGlzdEluZm8uQ29sbGVjdGlvblBhdGh9LyR7Zm91bmRFbGVtZW50LlZhbHVlTGlzdFByb3BlcnR5fUBjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuVGV4dEBjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5UZXh0QXJyYW5nZW1lbnQvJEVudW1NZW1iZXJgXG5cdFx0XHQpID09PSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLlRleHRBcnJhbmdlbWVudFR5cGUvVGV4dE9ubHlcIlxuXHRcdCkge1xuXHRcdFx0c29ydEZpZWxkTmFtZSA9IG1ldGFNb2RlbC5nZXRPYmplY3QoXG5cdFx0XHRcdGAvJHt2YWx1ZUxpc3RJbmZvLkNvbGxlY3Rpb25QYXRofS8ke2ZvdW5kRWxlbWVudC5WYWx1ZUxpc3RQcm9wZXJ0eX1AY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLlRleHQvJFBhdGhgXG5cdFx0XHQpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRzb3J0RmllbGROYW1lID0gZm91bmRFbGVtZW50LlZhbHVlTGlzdFByb3BlcnR5O1xuXHRcdH1cblx0fVxuXHRpZiAoc29ydEZpZWxkTmFtZSAmJiAoIXNvcnRSZXN0cmljdGlvbnNJbmZvLnByb3BlcnR5SW5mb1tzb3J0RmllbGROYW1lXSB8fCBzb3J0UmVzdHJpY3Rpb25zSW5mby5wcm9wZXJ0eUluZm9bc29ydEZpZWxkTmFtZV0uc29ydGFibGUpKSB7XG5cdFx0cmV0dXJuIHNvcnRGaWVsZE5hbWU7XG5cdH0gZWxzZSB7XG5cdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0fVxufVxuXG5mdW5jdGlvbiBfcmVkdW5kYW50RGVzY3JpcHRpb24oXG5cdG9WTFBhcmFtZXRlcjoge1xuXHRcdFZhbHVlTGlzdFByb3BlcnR5OiBzdHJpbmc7XG5cdH0sXG5cdGFDb2x1bW5JbmZvOiBDb2x1bW5JbmZvW11cbik6IGJvb2xlYW4gfCB1bmRlZmluZWQge1xuXHRjb25zdCBvQ29sdW1uSW5mbyA9IGFDb2x1bW5JbmZvLmZpbmQoZnVuY3Rpb24gKGNvbHVtbkluZm86IENvbHVtbkluZm8pIHtcblx0XHRyZXR1cm4gb1ZMUGFyYW1ldGVyLlZhbHVlTGlzdFByb3BlcnR5ID09PSBjb2x1bW5JbmZvLnRleHRDb2x1bW5OYW1lO1xuXHR9KTtcblx0aWYgKFxuXHRcdG9WTFBhcmFtZXRlci5WYWx1ZUxpc3RQcm9wZXJ0eSA9PT0gb0NvbHVtbkluZm8/LnRleHRDb2x1bW5OYW1lICYmXG5cdFx0IW9Db2x1bW5JbmZvLmtleUNvbHVtbkhpZGRlbiAmJlxuXHRcdG9Db2x1bW5JbmZvLmtleUNvbHVtbkRpc3BsYXlGb3JtYXQgIT09IFwiVmFsdWVcIlxuXHQpIHtcblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxuXHRyZXR1cm4gdW5kZWZpbmVkO1xufVxuXG5mdW5jdGlvbiBfaGFzSW1wb3J0YW5jZUhpZ2gob1ZhbHVlTGlzdENvbnRleHQ6IHsgUGFyYW1ldGVyczogQW5ub3RhdGlvblZhbHVlTGlzdFBhcmFtZXRlcltdIH0pOiBib29sZWFuIHtcblx0cmV0dXJuIG9WYWx1ZUxpc3RDb250ZXh0LlBhcmFtZXRlcnMuc29tZShmdW5jdGlvbiAob1BhcmFtZXRlcjogQW5ub3RhdGlvblZhbHVlTGlzdFBhcmFtZXRlcikge1xuXHRcdHJldHVybiAoXG5cdFx0XHRvUGFyYW1ldGVyW1wiQGNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkltcG9ydGFuY2VcIl0gJiZcblx0XHRcdG9QYXJhbWV0ZXJbXCJAY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuSW1wb3J0YW5jZVwiXS4kRW51bU1lbWJlciA9PT0gXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5JbXBvcnRhbmNlVHlwZS9IaWdoXCJcblx0XHQpO1xuXHR9KTtcbn1cblxuZnVuY3Rpb24gX2J1aWxkJFNlbGVjdFN0cmluZyhjb250cm9sOiBDb250cm9sKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcblx0Y29uc3Qgb1ZpZXdEYXRhID0gY29udHJvbC5nZXRNb2RlbChcInZpZXdEYXRhXCIpIGFzIEpTT05Nb2RlbDtcblx0aWYgKG9WaWV3RGF0YSkge1xuXHRcdGNvbnN0IG9EYXRhID0gb1ZpZXdEYXRhLmdldERhdGEoKTtcblx0XHRpZiAob0RhdGEpIHtcblx0XHRcdGNvbnN0IGFDb2x1bW5zID0gb0RhdGEuY29sdW1ucztcblx0XHRcdGlmIChhQ29sdW1ucykge1xuXHRcdFx0XHRyZXR1cm4gYUNvbHVtbnMucmVkdWNlKGZ1bmN0aW9uIChcblx0XHRcdFx0XHRzUXVlcnk6IHN0cmluZyxcblx0XHRcdFx0XHRvUHJvcGVydHk6IHtcblx0XHRcdFx0XHRcdHBhdGg/OiBzdHJpbmc7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHQpIHtcblx0XHRcdFx0XHQvLyBOYXZpZ2F0aW9uIHByb3BlcnRpZXMgKHJlcHJlc2VudGVkIGJ5IFgvWSkgc2hvdWxkIG5vdCBiZSBhZGRlZCB0byAkc2VsZWN0LlxuXHRcdFx0XHRcdC8vIFRPRE8gOiBUaGV5IHNob3VsZCBiZSBhZGRlZCBhcyAkZXhwYW5kPVgoJHNlbGVjdD1ZKSBpbnN0ZWFkXG5cdFx0XHRcdFx0aWYgKG9Qcm9wZXJ0eS5wYXRoICYmICFvUHJvcGVydHkucGF0aC5pbmNsdWRlcyhcIi9cIikpIHtcblx0XHRcdFx0XHRcdHNRdWVyeSA9IHNRdWVyeSA/IGAke3NRdWVyeX0sJHtvUHJvcGVydHkucGF0aH1gIDogb1Byb3BlcnR5LnBhdGg7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdHJldHVybiBzUXVlcnk7XG5cdFx0XHRcdH0sIHVuZGVmaW5lZCk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cdHJldHVybiB1bmRlZmluZWQ7XG59XG5cbmZ1bmN0aW9uIF9nZXRWYWx1ZUhlbHBDb2x1bW5EaXNwbGF5Rm9ybWF0KG9Qcm9wZXJ0eUFubm90YXRpb25zOiBNZXRhTW9kZWxQcm9wZXJ0eUFubm90YXRpb25zLCBpc1ZhbHVlSGVscFdpdGhGaXhlZFZhbHVlczogYm9vbGVhbik6IHN0cmluZyB7XG5cdGNvbnN0IHNEaXNwbGF5TW9kZSA9IENvbW1vblV0aWxzLmNvbXB1dGVEaXNwbGF5TW9kZShvUHJvcGVydHlBbm5vdGF0aW9ucyk7XG5cdGNvbnN0IG9UZXh0QW5ub3RhdGlvbiA9IG9Qcm9wZXJ0eUFubm90YXRpb25zICYmIG9Qcm9wZXJ0eUFubm90YXRpb25zW1wiQGNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5UZXh0XCJdO1xuXHRjb25zdCBvVGV4dEFycmFuZ2VtZW50QW5ub3RhdGlvbiA9XG5cdFx0b1RleHRBbm5vdGF0aW9uICYmIG9Qcm9wZXJ0eUFubm90YXRpb25zW1wiQGNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5UZXh0QGNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLlRleHRBcnJhbmdlbWVudFwiXTtcblx0aWYgKGlzVmFsdWVIZWxwV2l0aEZpeGVkVmFsdWVzKSB7XG5cdFx0cmV0dXJuIG9UZXh0QW5ub3RhdGlvbiAmJiB0eXBlb2Ygb1RleHRBbm5vdGF0aW9uICE9PSBcInN0cmluZ1wiICYmIFwiJFBhdGhcIiBpbiBvVGV4dEFubm90YXRpb24gJiYgb1RleHRBbm5vdGF0aW9uLiRQYXRoXG5cdFx0XHQ/IHNEaXNwbGF5TW9kZVxuXHRcdFx0OiBcIlZhbHVlXCI7XG5cdH0gZWxzZSB7XG5cdFx0Ly8gT25seSBleHBsaWNpdCBkZWZpbmVkIFRleHRBcnJhbmdlbWVudHMgaW4gYSBWYWx1ZSBIZWxwIHdpdGggRGlhbG9nIGFyZSBjb25zaWRlcmVkXG5cdFx0cmV0dXJuIG9UZXh0QXJyYW5nZW1lbnRBbm5vdGF0aW9uID8gc0Rpc3BsYXlNb2RlIDogXCJWYWx1ZVwiO1xuXHR9XG59XG5cbi8qKlxuICogUmV0cmlldmVzIHRoZSB2YWx1ZUxpc3QncyBQcmVzZW50YXRpb25WYXJpYW50LlxuICogQHBhcmFtIHZhbHVlTGlzdCBUaGUgdmFsdWVMaXN0IGFubm90YXRpb25cbiAqIEByZXR1cm5zIFRoZSBQcmVzZW50YXRpb25WYXJpYW50IChpZiBhbnkpIG9mIHRoZSB2YWx1ZUxpc3RcbiAqL1xuZnVuY3Rpb24gZ2V0UHJlc2VudGF0aW9uVmFyaWFudCh2YWx1ZUxpc3Q6IEFubm90YXRpb25WYWx1ZUxpc3RUeXBlKTogTWV0YU1vZGVsVHlwZTxQcmVzZW50YXRpb25WYXJpYW50PiB8IHVuZGVmaW5lZCB7XG5cdGNvbnN0IHByZXNlbnRhdGlvblZhcmlhbnRRdWFsaWZpZXIgPSB2YWx1ZUxpc3QuUHJlc2VudGF0aW9uVmFyaWFudFF1YWxpZmllciA/IGAjJHt2YWx1ZUxpc3QuUHJlc2VudGF0aW9uVmFyaWFudFF1YWxpZmllcn1gIDogXCJcIjtcblx0Y29uc3QgcHJlc2VudGF0aW9uVmFyaWFudFBhdGggPSBgLyR7dmFsdWVMaXN0LkNvbGxlY3Rpb25QYXRofS9AY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuUHJlc2VudGF0aW9uVmFyaWFudCR7cHJlc2VudGF0aW9uVmFyaWFudFF1YWxpZmllcn1gO1xuXHRyZXR1cm4gdmFsdWVMaXN0LiRtb2RlbC5nZXRNZXRhTW9kZWwoKS5nZXRPYmplY3QocHJlc2VudGF0aW9uVmFyaWFudFBhdGgpIGFzIE1ldGFNb2RlbFR5cGU8UHJlc2VudGF0aW9uVmFyaWFudD4gfCB1bmRlZmluZWQ7XG59XG5cbnR5cGUgQ29sdW1uSW5mbyA9IHtcblx0a2V5Q29sdW1uSGlkZGVuPzogYm9vbGVhbjtcblx0a2V5Q29sdW1uRGlzcGxheUZvcm1hdD86IHN0cmluZztcblx0dGV4dENvbHVtbk5hbWU/OiBzdHJpbmc7XG5cdGNvbHVtbk5hbWU6IHN0cmluZztcblx0aGFzSGlkZGVuQW5ub3RhdGlvbj86IGJvb2xlYW47XG59O1xuY29uc3QgVmFsdWVMaXN0SGVscGVyID0ge1xuXHRnZXRWYWx1ZUxpc3RDb2xsZWN0aW9uRW50aXR5U2V0OiBmdW5jdGlvbiAob1ZhbHVlTGlzdENvbnRleHQ6IENvbnRleHQpOiBCYXNlQ29udGV4dCB8IHVuZGVmaW5lZCB7XG5cdFx0Y29uc3QgbVZhbHVlTGlzdCA9IG9WYWx1ZUxpc3RDb250ZXh0LmdldE9iamVjdCgpO1xuXHRcdHJldHVybiBtVmFsdWVMaXN0LiRtb2RlbC5nZXRNZXRhTW9kZWwoKS5jcmVhdGVCaW5kaW5nQ29udGV4dChgLyR7bVZhbHVlTGlzdC5Db2xsZWN0aW9uUGF0aH1gKTtcblx0fSxcblxuXHQvKipcblx0ICogQ2hlY2tzIGlmIHRoZSBWYWx1ZUxpc3QgaXMgYW5ub3RhdGVkIHdpdGggYSBQcmVzZW50YXRpb25WYXJpYW50LlxuXHQgKiBJZiB0aGUgUHJlc2VudGF0aW9uVmFyaWFudCBpcyBhbm5vdGF0ZWQgd2l0aCBhIFJlY3Vyc2l2ZUhpZXJhcmNoeVF1YWxpZmllciwgdGhlIFZhbHVlTGlzdCdzIHRhYmxlIGhhcyB0byBiZSBhIFRyZWVUYWJsZS5cblx0ICogQHBhcmFtIHZhbHVlTGlzdCBUaGUgdmFsdWVMaXN0IGFubm90YXRpb25cblx0ICogQHJldHVybnMgVHJ1ZSBpZiB0aGUgdGFibGUgaGFzIHRvIGJlIGEgVHJlZVRhYmxlLCBmYWxzZSBvdGhlcndpc2Vcblx0ICovXG5cdGlzVHJlZVRhYmxlVHlwZSh2YWx1ZUxpc3Q6IEFubm90YXRpb25WYWx1ZUxpc3RUeXBlKTogYm9vbGVhbiB7XG5cdFx0cmV0dXJuIGdldFByZXNlbnRhdGlvblZhcmlhbnQodmFsdWVMaXN0KT8uUmVjdXJzaXZlSGllcmFyY2h5UXVhbGlmaWVyID8gdHJ1ZSA6IGZhbHNlO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBHZXRzIHRoZSBkZWxlZ2F0ZSBmb3IgdGhlIFZhbHVlTGlzdCdzIHRhYmxlLlxuXHQgKiBAcGFyYW0gdmFsdWVMaXN0IFRoZSB2YWx1ZUxpc3QgYW5ub3RhdGlvblxuXHQgKiBAcmV0dXJucyBUaGUgY2FsY3VsYXRlZCBkZWxlZ2F0ZSBmb3IgdGhlIFZhbHVlTGlzdCdzIHRhYmxlXG5cdCAqL1xuXHRnZXRUYWJsZURlbGVnYXRlOiBmdW5jdGlvbiAodmFsdWVMaXN0OiBBbm5vdGF0aW9uVmFsdWVMaXN0VHlwZSk6IHN0cmluZyB7XG5cdFx0bGV0IHNEZWZhdWx0U29ydFByb3BlcnR5TmFtZSA9IF9nZXREZWZhdWx0U29ydFByb3BlcnR5TmFtZSh2YWx1ZUxpc3QpO1xuXHRcdGlmIChzRGVmYXVsdFNvcnRQcm9wZXJ0eU5hbWUpIHtcblx0XHRcdHNEZWZhdWx0U29ydFByb3BlcnR5TmFtZSA9IGAnJHtzRGVmYXVsdFNvcnRQcm9wZXJ0eU5hbWV9J2A7XG5cdFx0fVxuXHRcdGNvbnN0IHByZXNlbnRhdGlvblZhcmlhbnQgPSBnZXRQcmVzZW50YXRpb25WYXJpYW50KHZhbHVlTGlzdCk7XG5cdFx0Y29uc3QgcmVjdXJzaXZlSGllcmFyY2h5UXVhbGlmaWVyID0gcHJlc2VudGF0aW9uVmFyaWFudD8uUmVjdXJzaXZlSGllcmFyY2h5UXVhbGlmaWVyO1xuXHRcdGlmIChyZWN1cnNpdmVIaWVyYXJjaHlRdWFsaWZpZXIpIHtcblx0XHRcdGNvbnN0IGluaXRpYWxFeHBhbnNpb25MZXZlbCA9IHByZXNlbnRhdGlvblZhcmlhbnQuSW5pdGlhbEV4cGFuc2lvbkxldmVsO1xuXHRcdFx0cmV0dXJuIChcblx0XHRcdFx0XCJ7bmFtZTogJ3NhcC9mZS9tYWNyb3MvaW50ZXJuYWwvdmFsdWVoZWxwL1RhYmxlRGVsZWdhdGUnLCBwYXlsb2FkOiB7Y29sbGVjdGlvbk5hbWU6ICdcIiArXG5cdFx0XHRcdHZhbHVlTGlzdC5Db2xsZWN0aW9uUGF0aCArXG5cdFx0XHRcdFwiJ1wiICtcblx0XHRcdFx0KHNEZWZhdWx0U29ydFByb3BlcnR5TmFtZSA/IFwiLCBkZWZhdWx0U29ydFByb3BlcnR5TmFtZTogXCIgKyBzRGVmYXVsdFNvcnRQcm9wZXJ0eU5hbWUgOiBcIlwiKSArXG5cdFx0XHRcdFwiLCBoaWVyYXJjaHlRdWFsaWZpZXI6ICdcIiArXG5cdFx0XHRcdHJlY3Vyc2l2ZUhpZXJhcmNoeVF1YWxpZmllciArXG5cdFx0XHRcdFwiJ1wiICtcblx0XHRcdFx0KGluaXRpYWxFeHBhbnNpb25MZXZlbCA/IFwiLCBpbml0aWFsRXhwYW5zaW9uTGV2ZWw6IFwiICsgKGluaXRpYWxFeHBhbnNpb25MZXZlbCArIDEpIDogXCJcIikgK1xuXHRcdFx0XHRcIn19XCJcblx0XHRcdCk7XG5cdFx0fVxuXHRcdHJldHVybiAoXG5cdFx0XHRcIntuYW1lOiAnc2FwL2ZlL21hY3Jvcy9pbnRlcm5hbC92YWx1ZWhlbHAvVGFibGVEZWxlZ2F0ZScsIHBheWxvYWQ6IHtjb2xsZWN0aW9uTmFtZTogJ1wiICtcblx0XHRcdHZhbHVlTGlzdC5Db2xsZWN0aW9uUGF0aCArXG5cdFx0XHRcIidcIiArXG5cdFx0XHQoc0RlZmF1bHRTb3J0UHJvcGVydHlOYW1lID8gXCIsIGRlZmF1bHRTb3J0UHJvcGVydHlOYW1lOiBcIiArIHNEZWZhdWx0U29ydFByb3BlcnR5TmFtZSA6IFwiXCIpICtcblx0XHRcdFwifX1cIlxuXHRcdCk7XG5cdH0sXG5cblx0LyoqXG5cdCAqIEdldHMgdGhlIHNvcnQgY29uZGl0aW9ucyBzZXQgb24gdGhlIFZhbHVlTGlzdCdzIFByZXNlbnRhdGlvblZhcmlhbnQuXG5cdCAqIEBwYXJhbSB2YWx1ZUxpc3RJbmZvIFRoZSB2YWx1ZUxpc3QgYW5ub3RhdGlvblxuXHQgKiBAcGFyYW0gaXNTdWdnZXN0aW9uIEluZGljYXRlcyBpZiB0aGUgVmFsdWVMaXN0IGlzIHVzZWQgaW4gYSBzdWdnZXN0aW9uIHNjZW5hcmlvXG5cdCAqIEBwYXJhbSBhc0N1c3RvbWRhdGEgSW5kaWNhdGVzIGlmIHRoZSBzb3J0IGNvbmRpdGlvbnMgc2hvdWxkIGJlIHJldHVybmVkIGFzIGN1c3RvbSBkYXRhXG5cdCAqIEByZXR1cm5zIFRoZSBzb3J0IGNvbmRpdGlvbnMgaWYgYW55LCB1bmRlZmluZWQgb3RoZXJ3aXNlXG5cdCAqL1xuXHRnZXRTb3J0Q29uZGl0aW9uc0Zyb21QcmVzZW50YXRpb25WYXJpYW50OiBmdW5jdGlvbiAoXG5cdFx0dmFsdWVMaXN0SW5mbzogQW5ub3RhdGlvblZhbHVlTGlzdFR5cGUsXG5cdFx0aXNTdWdnZXN0aW9uOiBib29sZWFuLFxuXHRcdGFzQ3VzdG9tZGF0YSA9IGZhbHNlXG5cdCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG5cdFx0Y29uc3QgcHJlc2VudGF0aW9uVmFyaWFudCA9IGdldFByZXNlbnRhdGlvblZhcmlhbnQodmFsdWVMaXN0SW5mbyk7XG5cdFx0aWYgKHByZXNlbnRhdGlvblZhcmlhbnQ/LlNvcnRPcmRlcikge1xuXHRcdFx0Y29uc3Qgc29ydENvbmRpdGlvbnMgPSB7XG5cdFx0XHRcdHNvcnRlcnM6IFtdIGFzIFNvcnRlclR5cGVbXVxuXHRcdFx0fTtcblxuXHRcdFx0cHJlc2VudGF0aW9uVmFyaWFudC5Tb3J0T3JkZXIuZm9yRWFjaChmdW5jdGlvbiAoY29uZGl0aW9uKSB7XG5cdFx0XHRcdGNvbnN0IHNvcnRlcjogU29ydGVyVHlwZSA9IHt9LFxuXHRcdFx0XHRcdHByb3BlcnR5UGF0aCA9IGNvbmRpdGlvbj8uUHJvcGVydHk/LiRQcm9wZXJ0eVBhdGg7XG5cdFx0XHRcdGlmIChpc1N1Z2dlc3Rpb24pIHtcblx0XHRcdFx0XHRzb3J0ZXIucGF0aCA9IHByb3BlcnR5UGF0aDtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRzb3J0ZXIubmFtZSA9IHByb3BlcnR5UGF0aDtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmIChjb25kaXRpb24uRGVzY2VuZGluZykge1xuXHRcdFx0XHRcdHNvcnRlci5kZXNjZW5kaW5nID0gdHJ1ZTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRzb3J0ZXIuYXNjZW5kaW5nID0gdHJ1ZTtcblx0XHRcdFx0fVxuXHRcdFx0XHRzb3J0Q29uZGl0aW9ucy5zb3J0ZXJzLnB1c2goc29ydGVyKTtcblx0XHRcdH0pO1xuXHRcdFx0Y29uc3Qgc3RyaW5nQ29udmVydGVyID0gYXNDdXN0b21kYXRhID8gQ29tbW9uSGVscGVyLnN0cmluZ2lmeUN1c3RvbURhdGEgOiBKU09OLnN0cmluZ2lmeTtcblx0XHRcdHJldHVybiBpc1N1Z2dlc3Rpb24gPyBgc29ydGVyOiAke3N0cmluZ0NvbnZlcnRlcihzb3J0Q29uZGl0aW9ucy5zb3J0ZXJzKX1gIDogc3RyaW5nQ29udmVydGVyKHNvcnRDb25kaXRpb25zKTtcblx0XHR9XG5cdFx0cmV0dXJuO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBHZXRzIHRoZSBzb3J0IGNvbmRpdGlvbnMgZm9yIHRoZSBWYWx1ZUxpc3QuXG5cdCAqIEBwYXJhbSB2YWx1ZUxpc3RJbmZvIFRoZSBWYWx1ZUxpc3QgYW5ub3RhdGlvblxuXHQgKiBAcGFyYW0gaXNWYWx1ZUhlbHBXaXRoRml4ZWRWYWx1ZXMgSW5kaWNhdGVzIGlmIFZhbHVlTGlzdCBoYXMgZml4ZWQgdmFsdWVzXG5cdCAqIEByZXR1cm5zIFRoZSBzb3J0IGNvbmRpdGlvbnMgZWl0aGVyIGZyb20gdGhlIHByZXNlbnRhdGlvbiB2YXJpYW50IG9yIHRoZSBkZWZhdWx0IG9uZSwgdW5kZWZpbmVkIG90aGVyd2lzZVxuXHQgKi9cblx0Z2V0U29ydENvbmRpdGlvbnNGb3JWYWx1ZUxpc3Q6IGZ1bmN0aW9uIChcblx0XHR2YWx1ZUxpc3RJbmZvOiBBbm5vdGF0aW9uVmFsdWVMaXN0VHlwZSxcblx0XHRpc1ZhbHVlSGVscFdpdGhGaXhlZFZhbHVlczogYm9vbGVhblxuXHQpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuXHRcdGNvbnN0IHNvcnRDb25kaXRpb25zRnJvbVByZXNlbnRhdGlvblZhcmlhbnQgPSBWYWx1ZUxpc3RIZWxwZXIuZ2V0U29ydENvbmRpdGlvbnNGcm9tUHJlc2VudGF0aW9uVmFyaWFudCh2YWx1ZUxpc3RJbmZvLCBmYWxzZSk7XG5cblx0XHRpZiAoc29ydENvbmRpdGlvbnNGcm9tUHJlc2VudGF0aW9uVmFyaWFudCkge1xuXHRcdFx0cmV0dXJuIHNvcnRDb25kaXRpb25zRnJvbVByZXNlbnRhdGlvblZhcmlhbnQ7XG5cdFx0fVxuXHRcdGlmIChpc1ZhbHVlSGVscFdpdGhGaXhlZFZhbHVlcykge1xuXHRcdFx0Y29uc3Qgc29ydENvbmRpdGlvbnMgPSB7XG5cdFx0XHRcdHNvcnRlcnM6IFtcblx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRuYW1lOiBfZ2V0RGVmYXVsdFNvcnRQcm9wZXJ0eU5hbWUodmFsdWVMaXN0SW5mbyksXG5cdFx0XHRcdFx0XHRhc2NlbmRpbmc6IHRydWVcblx0XHRcdFx0XHR9XG5cdFx0XHRcdF0gYXMgU29ydGVyVHlwZVtdXG5cdFx0XHR9O1xuXHRcdFx0cmV0dXJuIEpTT04uc3RyaW5naWZ5KHNvcnRDb25kaXRpb25zKTtcblx0XHR9XG5cdH0sXG5cblx0Z2V0UHJvcGVydHlQYXRoOiBmdW5jdGlvbiAob1BhcmFtZXRlcnM6IHsgVW5ib3VuZEFjdGlvbj86IGJvb2xlYW47IFByb3BlcnR5OiBzdHJpbmc7IEVudGl0eVR5cGVQYXRoOiBzdHJpbmc7IEFjdGlvbjogc3RyaW5nIH0pOiBzdHJpbmcge1xuXHRcdHJldHVybiAhb1BhcmFtZXRlcnMuVW5ib3VuZEFjdGlvblxuXHRcdFx0PyBgJHtvUGFyYW1ldGVycy5FbnRpdHlUeXBlUGF0aH0vJHtvUGFyYW1ldGVycy5BY3Rpb259LyR7b1BhcmFtZXRlcnMuUHJvcGVydHl9YFxuXHRcdFx0OiBgLyR7b1BhcmFtZXRlcnMuQWN0aW9uLnN1YnN0cmluZyhvUGFyYW1ldGVycy5BY3Rpb24ubGFzdEluZGV4T2YoXCIuXCIpICsgMSl9LyR7b1BhcmFtZXRlcnMuUHJvcGVydHl9YDtcblx0fSxcblxuXHRnZXRWYWx1ZUxpc3RQcm9wZXJ0eTogZnVuY3Rpb24gKG9Qcm9wZXJ0eUNvbnRleHQ6IEJhc2VDb250ZXh0KTogQmFzZUNvbnRleHQgfCB1bmRlZmluZWQge1xuXHRcdGNvbnN0IG9WYWx1ZUxpc3RNb2RlbCA9IG9Qcm9wZXJ0eUNvbnRleHQuZ2V0TW9kZWwoKTtcblx0XHRjb25zdCBtVmFsdWVMaXN0ID0gb1ZhbHVlTGlzdE1vZGVsLmdldE9iamVjdChcIi9cIikgYXMgdW5rbm93biBhcyB7IENvbGxlY3Rpb25QYXRoOiBzdHJpbmc7ICRtb2RlbDogT0RhdGFNb2RlbCB9O1xuXHRcdHJldHVybiBtVmFsdWVMaXN0LiRtb2RlbC5nZXRNZXRhTW9kZWwoKS5jcmVhdGVCaW5kaW5nQ29udGV4dChgLyR7bVZhbHVlTGlzdC5Db2xsZWN0aW9uUGF0aH0vJHtvUHJvcGVydHlDb250ZXh0LmdldE9iamVjdCgpfWApO1xuXHR9LFxuXG5cdC8vIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCBmb3IgdmFsdWUgaGVscCBtLXRhYmxlIGFuZCBtZGMtdGFibGVcblx0Z2V0Q29sdW1uVmlzaWJpbGl0eTogZnVuY3Rpb24gKFxuXHRcdG9WYWx1ZUxpc3Q6IHsgUGFyYW1ldGVyczogQW5ub3RhdGlvblZhbHVlTGlzdFBhcmFtZXRlcltdIH0sXG5cdFx0b1ZMUGFyYW1ldGVyOiBBbm5vdGF0aW9uVmFsdWVMaXN0UGFyYW1ldGVyLFxuXHRcdG9Tb3VyY2U6IHtcblx0XHRcdHZhbHVlSGVscFdpdGhGaXhlZFZhbHVlczogYm9vbGVhbjtcblx0XHRcdGNvbHVtbkluZm86IHtcblx0XHRcdFx0aXNEaWFsb2dUYWJsZTogYm9vbGVhbjtcblx0XHRcdFx0Y29sdW1uSW5mb3M6IENvbHVtbkluZm9bXTtcblx0XHRcdH07XG5cdFx0fVxuXHQpOiBib29sZWFuIHtcblx0XHRjb25zdCBpc0Ryb3BEb3duTGlzdCA9IG9Tb3VyY2UgJiYgISFvU291cmNlLnZhbHVlSGVscFdpdGhGaXhlZFZhbHVlcyxcblx0XHRcdG9Db2x1bW5JbmZvID0gb1NvdXJjZS5jb2x1bW5JbmZvLFxuXHRcdFx0aXNWaXNpYmxlID0gIV9yZWR1bmRhbnREZXNjcmlwdGlvbihvVkxQYXJhbWV0ZXIsIG9Db2x1bW5JbmZvLmNvbHVtbkluZm9zKSxcblx0XHRcdGlzRGlhbG9nVGFibGUgPSBvQ29sdW1uSW5mby5pc0RpYWxvZ1RhYmxlO1xuXG5cdFx0aWYgKGlzRHJvcERvd25MaXN0IHx8ICghaXNEcm9wRG93bkxpc3QgJiYgaXNEaWFsb2dUYWJsZSkgfHwgKCFpc0Ryb3BEb3duTGlzdCAmJiAhX2hhc0ltcG9ydGFuY2VIaWdoKG9WYWx1ZUxpc3QpKSkge1xuXHRcdFx0Y29uc3QgY29sdW1uV2l0aEhpZGRlbkFubm90YXRpb24gPSBvQ29sdW1uSW5mby5jb2x1bW5JbmZvcy5maW5kKGZ1bmN0aW9uIChjb2x1bW5JbmZvOiBDb2x1bW5JbmZvKSB7XG5cdFx0XHRcdHJldHVybiBvVkxQYXJhbWV0ZXIuVmFsdWVMaXN0UHJvcGVydHkgPT09IGNvbHVtbkluZm8uY29sdW1uTmFtZSAmJiBjb2x1bW5JbmZvLmhhc0hpZGRlbkFubm90YXRpb24gPT09IHRydWU7XG5cdFx0XHR9KTtcblx0XHRcdHJldHVybiAhY29sdW1uV2l0aEhpZGRlbkFubm90YXRpb24gPyBpc1Zpc2libGUgOiBmYWxzZTtcblx0XHR9IGVsc2UgaWYgKCFpc0Ryb3BEb3duTGlzdCAmJiBfaGFzSW1wb3J0YW5jZUhpZ2gob1ZhbHVlTGlzdCkpIHtcblx0XHRcdHJldHVybiBvVkxQYXJhbWV0ZXIgJiZcblx0XHRcdFx0b1ZMUGFyYW1ldGVyW1wiQGNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkltcG9ydGFuY2VcIl0gJiZcblx0XHRcdFx0b1ZMUGFyYW1ldGVyW1wiQGNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkltcG9ydGFuY2VcIl0uJEVudW1NZW1iZXIgPT09IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuSW1wb3J0YW5jZVR5cGUvSGlnaFwiXG5cdFx0XHRcdD8gdHJ1ZVxuXHRcdFx0XHQ6IGZhbHNlO1xuXHRcdH1cblx0XHRyZXR1cm4gdHJ1ZTtcblx0fSxcblxuXHRnZXRDb2x1bW5WaXNpYmlsaXR5SW5mbzogZnVuY3Rpb24gKFxuXHRcdG9WYWx1ZUxpc3Q6IHtcblx0XHRcdCRtb2RlbDogT0RhdGFNb2RlbDtcblx0XHRcdENvbGxlY3Rpb25QYXRoOiBzdHJpbmc7XG5cdFx0XHRQYXJhbWV0ZXJzOiBBbm5vdGF0aW9uVmFsdWVMaXN0UGFyYW1ldGVyW107XG5cdFx0fSxcblx0XHRzUHJvcGVydHlGdWxsUGF0aDogc3RyaW5nLFxuXHRcdGJJc0Ryb3BEb3duTGlzdGU6IGJvb2xlYW4sXG5cdFx0aXNEaWFsb2dUYWJsZTogYm9vbGVhblxuXHQpOiB7XG5cdFx0aXNEaWFsb2dUYWJsZTogYm9vbGVhbjtcblx0XHRjb2x1bW5JbmZvczogQ29sdW1uSW5mb1tdO1xuXHR9IHtcblx0XHRjb25zdCBvTWV0YU1vZGVsID0gb1ZhbHVlTGlzdC4kbW9kZWwuZ2V0TWV0YU1vZGVsKCk7XG5cdFx0Y29uc3QgYUNvbHVtbkluZm9zOiBDb2x1bW5JbmZvW10gPSBbXTtcblx0XHRjb25zdCBvQ29sdW1uSW5mb3MgPSB7XG5cdFx0XHRpc0RpYWxvZ1RhYmxlOiBpc0RpYWxvZ1RhYmxlLFxuXHRcdFx0Y29sdW1uSW5mb3M6IGFDb2x1bW5JbmZvc1xuXHRcdH07XG5cblx0XHRvVmFsdWVMaXN0LlBhcmFtZXRlcnMuZm9yRWFjaChmdW5jdGlvbiAob1BhcmFtZXRlcjogQW5ub3RhdGlvblZhbHVlTGlzdFBhcmFtZXRlcikge1xuXHRcdFx0Y29uc3Qgb1Byb3BlcnR5QW5ub3RhdGlvbnMgPSBvTWV0YU1vZGVsLmdldE9iamVjdChgLyR7b1ZhbHVlTGlzdC5Db2xsZWN0aW9uUGF0aH0vJHtvUGFyYW1ldGVyLlZhbHVlTGlzdFByb3BlcnR5fUBgKTtcblx0XHRcdGNvbnN0IG9UZXh0QW5ub3RhdGlvbiA9IG9Qcm9wZXJ0eUFubm90YXRpb25zICYmIG9Qcm9wZXJ0eUFubm90YXRpb25zW1wiQGNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5UZXh0XCJdO1xuXHRcdFx0bGV0IGNvbHVtbkluZm86IENvbHVtbkluZm8gPSB7fSBhcyB1bmtub3duIGFzIENvbHVtbkluZm87XG5cdFx0XHRpZiAob1RleHRBbm5vdGF0aW9uKSB7XG5cdFx0XHRcdGNvbHVtbkluZm8gPSB7XG5cdFx0XHRcdFx0a2V5Q29sdW1uSGlkZGVuOiBvUHJvcGVydHlBbm5vdGF0aW9uc1tcIkBjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5IaWRkZW5cIl0gPyB0cnVlIDogZmFsc2UsXG5cdFx0XHRcdFx0a2V5Q29sdW1uRGlzcGxheUZvcm1hdDogb1RleHRBbm5vdGF0aW9uICYmIF9nZXRWYWx1ZUhlbHBDb2x1bW5EaXNwbGF5Rm9ybWF0KG9Qcm9wZXJ0eUFubm90YXRpb25zLCBiSXNEcm9wRG93bkxpc3RlKSxcblx0XHRcdFx0XHR0ZXh0Q29sdW1uTmFtZTogb1RleHRBbm5vdGF0aW9uICYmIG9UZXh0QW5ub3RhdGlvbi4kUGF0aCxcblx0XHRcdFx0XHRjb2x1bW5OYW1lOiBvUGFyYW1ldGVyLlZhbHVlTGlzdFByb3BlcnR5LFxuXHRcdFx0XHRcdGhhc0hpZGRlbkFubm90YXRpb246IG9Qcm9wZXJ0eUFubm90YXRpb25zICYmIG9Qcm9wZXJ0eUFubm90YXRpb25zW1wiQGNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkhpZGRlblwiXSA/IHRydWUgOiBmYWxzZVxuXHRcdFx0XHR9O1xuXHRcdFx0fSBlbHNlIGlmIChvUHJvcGVydHlBbm5vdGF0aW9ucyAmJiBvUHJvcGVydHlBbm5vdGF0aW9uc1tcIkBjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5IaWRkZW5cIl0pIHtcblx0XHRcdFx0Y29sdW1uSW5mbyA9IHtcblx0XHRcdFx0XHRjb2x1bW5OYW1lOiBvUGFyYW1ldGVyLlZhbHVlTGlzdFByb3BlcnR5LFxuXHRcdFx0XHRcdGhhc0hpZGRlbkFubm90YXRpb246IG9Qcm9wZXJ0eUFubm90YXRpb25zICYmIG9Qcm9wZXJ0eUFubm90YXRpb25zW1wiQGNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkhpZGRlblwiXSA/IHRydWUgOiBmYWxzZVxuXHRcdFx0XHR9O1xuXHRcdFx0fVxuXHRcdFx0b0NvbHVtbkluZm9zLmNvbHVtbkluZm9zLnB1c2goY29sdW1uSW5mbyk7XG5cdFx0fSk7XG5cblx0XHRyZXR1cm4gb0NvbHVtbkluZm9zO1xuXHR9LFxuXG5cdGdldFRhYmxlSXRlbXNQYXJhbWV0ZXJzOiBmdW5jdGlvbiAoXG5cdFx0dGhpczogQ29udHJvbCxcblx0XHR2YWx1ZUxpc3RJbmZvOiBBbm5vdGF0aW9uVmFsdWVMaXN0VHlwZSxcblx0XHRyZXF1ZXN0R3JvdXBJZDogc3RyaW5nLFxuXHRcdGlzU3VnZ2VzdGlvbjogYm9vbGVhbixcblx0XHRpc1ZhbHVlSGVscFdpdGhGaXhlZFZhbHVlczogYm9vbGVhblxuXHQpOiBzdHJpbmcge1xuXHRcdGNvbnN0IGl0ZW1QYXJhbWV0ZXJzID0gW2BwYXRoOiAnLyR7dmFsdWVMaXN0SW5mby5Db2xsZWN0aW9uUGF0aH0nYF07XG5cblx0XHQvLyBhZGQgc2VsZWN0IHRvIG9CaW5kaW5nSW5mbyAoQkNQIDIxODAyNTU5NTYgLyAyMTcwMTYzMDEyKVxuXHRcdGNvbnN0IHNlbGVjdFN0cmluZyA9IF9idWlsZCRTZWxlY3RTdHJpbmcodGhpcyk7XG5cblx0XHQvLyBzaW5jZSB0aGVyZSBjb3VsZCBiZSByZWNvbW1lbmRhdGlvbnMvcmVjZW50bHkgdXNlZCB2YWx1ZXMgdG8gc2hvdyBpbiB0aGUgc3VnZ2VzdGlvbiBwb3BvdmVyXG5cdFx0Ly8gaGVuY2Ugd2UgbmVlZCB0byBjcmVhdGUgc29tZSB0cmFuc2llbnQgY29udGV4dHMgb24gdGhlIHZhbHVlSGVscCBsaXN0IGJpbmRpbmdcblx0XHQvLyBzbyB3ZSB3aWxsIHNldCB0aGUgdXBkYXRlR3JvdXBJZCBvZiB0aGUgbGlzdCBiaW5kaW5nIHRvIGF2b2lkIHNlbmRpbmcgY2FsbHMgdG8gdGhlIGJhY2tlbmRcblx0XHQvLyB3ZSBuZWVkIHRvIGV4cGxpY2l0bHkgc2V0ICQkc2hhcmVkUmVxdWVzdCB0byBmYWxzZSB0byBtYWtlIHN1cmUgd2UgY2FuIGNyZWF0ZSB0cmFuc2llbnQgY29udGV4dHMgaW4gUkFQXG5cdFx0aWYgKHJlcXVlc3RHcm91cElkKSB7XG5cdFx0XHRjb25zdCBzZWxlY3RTdHJpbmdQYXJ0ID0gc2VsZWN0U3RyaW5nID8gYCwgJyR7c2VsZWN0U3RyaW5nfSdgIDogXCJcIjtcblxuXHRcdFx0aXRlbVBhcmFtZXRlcnMucHVzaChcblx0XHRcdFx0YHBhcmFtZXRlcnM6IHskJHNoYXJlZFJlcXVlc3Q6IGZhbHNlLCAkJHVwZGF0ZUdyb3VwSWQ6IFwiZG9ub3RzdWJtaXRcIiwgJCRncm91cElkOiAnJHtyZXF1ZXN0R3JvdXBJZH0nJHtzZWxlY3RTdHJpbmdQYXJ0fX1gXG5cdFx0XHQpO1xuXHRcdH0gZWxzZSBpZiAoc2VsZWN0U3RyaW5nKSB7XG5cdFx0XHRpdGVtUGFyYW1ldGVycy5wdXNoKGBwYXJhbWV0ZXJzOiB7JCRzaGFyZWRSZXF1ZXN0OiBmYWxzZSwgJCR1cGRhdGVHcm91cElkOiBcImRvbm90c3VibWl0XCIsICRzZWxlY3Q6ICcke3NlbGVjdFN0cmluZ30nfWApO1xuXHRcdH1cblxuXHRcdGNvbnN0IGlzU3VzcGVuZGVkID0gdmFsdWVMaXN0SW5mby5QYXJhbWV0ZXJzLnNvbWUoZnVuY3Rpb24gKG9QYXJhbWV0ZXIpIHtcblx0XHRcdHJldHVybiBpc1N1Z2dlc3Rpb24gfHwgb1BhcmFtZXRlci4kVHlwZSA9PT0gQ29tbW9uQW5ub3RhdGlvblR5cGVzLlZhbHVlTGlzdFBhcmFtZXRlckluO1xuXHRcdH0pO1xuXHRcdGl0ZW1QYXJhbWV0ZXJzLnB1c2goYHN1c3BlbmRlZDogJHtpc1N1c3BlbmRlZH1gKTtcblxuXHRcdGlmICghaXNWYWx1ZUhlbHBXaXRoRml4ZWRWYWx1ZXMpIHtcblx0XHRcdGl0ZW1QYXJhbWV0ZXJzLnB1c2goXCJsZW5ndGg6IDEwXCIpO1xuXHRcdH1cblxuXHRcdGNvbnN0IHNvcnRDb25kaXRpb25zRnJvbVByZXNlbnRhdGlvblZhcmlhbnQgPSBWYWx1ZUxpc3RIZWxwZXIuZ2V0U29ydENvbmRpdGlvbnNGcm9tUHJlc2VudGF0aW9uVmFyaWFudCh2YWx1ZUxpc3RJbmZvLCBpc1N1Z2dlc3Rpb24pO1xuXG5cdFx0aWYgKHNvcnRDb25kaXRpb25zRnJvbVByZXNlbnRhdGlvblZhcmlhbnQpIHtcblx0XHRcdGl0ZW1QYXJhbWV0ZXJzLnB1c2goc29ydENvbmRpdGlvbnNGcm9tUHJlc2VudGF0aW9uVmFyaWFudCk7XG5cdFx0fSBlbHNlIGlmIChpc1ZhbHVlSGVscFdpdGhGaXhlZFZhbHVlcykge1xuXHRcdFx0Y29uc3QgZGVmYXVsdFNvcnRQcm9wZXJ0eU5hbWUgPSBfZ2V0RGVmYXVsdFNvcnRQcm9wZXJ0eU5hbWUodmFsdWVMaXN0SW5mbyk7XG5cblx0XHRcdGlmIChkZWZhdWx0U29ydFByb3BlcnR5TmFtZSkge1xuXHRcdFx0XHRpdGVtUGFyYW1ldGVycy5wdXNoKGBzb3J0ZXI6IFt7cGF0aDogJyR7ZGVmYXVsdFNvcnRQcm9wZXJ0eU5hbWV9JywgYXNjZW5kaW5nOiB0cnVlfV1gKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gXCJ7XCIgKyBpdGVtUGFyYW1ldGVycy5qb2luKFwiLCBcIikgKyBcIn1cIjtcblx0fSxcblxuXHQvLyBJcyBuZWVkZWQgZm9yIFwiZXh0ZXJuYWxcIiByZXByZXNlbnRhdGlvbiBpbiBxdW5pdFxuXHRoYXNJbXBvcnRhbmNlOiBmdW5jdGlvbiAob1ZhbHVlTGlzdENvbnRleHQ6IENvbnRleHQpOiBzdHJpbmcge1xuXHRcdHJldHVybiBfaGFzSW1wb3J0YW5jZUhpZ2gob1ZhbHVlTGlzdENvbnRleHQuZ2V0T2JqZWN0KCkpID8gXCJJbXBvcnRhbmNlL0hpZ2hcIiA6IFwiTm9uZVwiO1xuXHR9LFxuXG5cdC8vIElzIG5lZWRlZCBmb3IgXCJleHRlcm5hbFwiIHJlcHJlc2VudGF0aW9uIGluIHF1bml0XG5cdGdldE1pblNjcmVlbldpZHRoOiBmdW5jdGlvbiAob1ZhbHVlTGlzdDogeyBQYXJhbWV0ZXJzOiBBbm5vdGF0aW9uVmFsdWVMaXN0UGFyYW1ldGVyW10gfSk6IHN0cmluZyB7XG5cdFx0cmV0dXJuIF9oYXNJbXBvcnRhbmNlSGlnaChvVmFsdWVMaXN0KSA/IFwiez0gJHtfVkhVST4vbWluU2NyZWVuV2lkdGh9fVwiIDogXCI0MTZweFwiO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBSZXRyaWV2ZXMgdGhlIGNvbHVtbiB3aWR0aCBmb3IgYSBnaXZlbiBwcm9wZXJ0eS5cblx0ICogQHBhcmFtIHByb3BlcnR5UGF0aCBUaGUgcHJvcGVydHlQYXRoXG5cdCAqIEBwYXJhbSBpc1ZhbHVlTGlzdFdpdGhGaXhlZFZhbHVlcyBBbiBpbmRpY2F0b3Igc3RhdGluZyBpZiB0aGUgdmFsdWVIZWxwIGhhcyBmaXhlZCB2YWx1ZXNcblx0ICogQHJldHVybnMgVGhlIHdpZHRoIGFzIGEgc3RyaW5nIG9yIHVuZGVmaW5lZC5cblx0ICovXG5cdGdldENvbHVtbldpZHRoOiBmdW5jdGlvbiAocHJvcGVydHlQYXRoOiBEYXRhTW9kZWxPYmplY3RQYXRoPFByb3BlcnR5PiwgaXNWYWx1ZUxpc3RXaXRoRml4ZWRWYWx1ZXMgPSBmYWxzZSk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG5cdFx0aWYgKENvbW1vblV0aWxzLmlzU21hbGxEZXZpY2UoKSB8fCAhcHJvcGVydHlQYXRoLnRhcmdldE9iamVjdCkgcmV0dXJuO1xuXHRcdGNvbnN0IHByb3BlcnR5ID0gcHJvcGVydHlQYXRoLnRhcmdldE9iamVjdDtcblx0XHRsZXQgcmVsYXRlZFByb3BlcnR5OiBQcm9wZXJ0eVtdID0gW3Byb3BlcnR5XTtcblx0XHQvLyBUaGUgYWRkaXRpb25hbCBwcm9wZXJ0eSBjb3VsZCByZWZlciB0byB0aGUgdGV4dCwgY3VycmVuY3ksIHVuaXQgb3IgdGltZXpvbmVcblx0XHRjb25zdCBhZGRpdGlvbmFsUHJvcGVydHkgPVxuXHRcdFx0XHRnZXRBc3NvY2lhdGVkVGV4dFByb3BlcnR5KHByb3BlcnR5KSB8fFxuXHRcdFx0XHRnZXRBc3NvY2lhdGVkQ3VycmVuY3lQcm9wZXJ0eShwcm9wZXJ0eSkgfHxcblx0XHRcdFx0Z2V0QXNzb2NpYXRlZFVuaXRQcm9wZXJ0eShwcm9wZXJ0eSkgfHxcblx0XHRcdFx0Z2V0QXNzb2NpYXRlZFRpbWV6b25lUHJvcGVydHkocHJvcGVydHkpLFxuXHRcdFx0dGV4dEFubm90YXRpb24gPSBwcm9wZXJ0eS5hbm5vdGF0aW9ucz8uQ29tbW9uPy5UZXh0LFxuXHRcdFx0dGV4dEFycmFuZ2VtZW50ID0gdGV4dEFubm90YXRpb24/LmFubm90YXRpb25zPy5VST8uVGV4dEFycmFuZ2VtZW50Py50b1N0cmluZygpLFxuXHRcdFx0bGFiZWwgPSBwcm9wZXJ0eS5hbm5vdGF0aW9ucz8uQ29tbW9uPy5MYWJlbD8udG9TdHJpbmcoKTtcblx0XHRsZXQgZGlzcGxheU1vZGU6IHN0cmluZyB8IHVuZGVmaW5lZDtcblxuXHRcdC8vIGRlZmF1bHQgdGV4dGFycmFuZ2VtZW50IGlzIG9ubHkgdXNlZCBmb3IgVkggd2l0aCBmaXhlZCB2YWx1ZXNcblx0XHRpZiAoaXNWYWx1ZUxpc3RXaXRoRml4ZWRWYWx1ZXMgJiYgIXRleHRBcnJhbmdlbWVudCkge1xuXHRcdFx0Ly9kaXNwbGF5TW9kZSA9IGFzIGFubm90YXRlZCBvciBkZWZhdWx0XG5cdFx0XHRkaXNwbGF5TW9kZSA9IGdldERpc3BsYXlNb2RlKHByb3BlcnR5UGF0aCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdC8vZGlzcGxheU1vZGUgPSBhcyBhbm5vdGF0ZWQgb3IgdW5kZWZpbmVkXG5cdFx0XHRkaXNwbGF5TW9kZSA9IHRleHRBcnJhbmdlbWVudCAmJiBnZXREaXNwbGF5TW9kZShwcm9wZXJ0eVBhdGgpO1xuXHRcdH1cblxuXHRcdGlmIChhZGRpdGlvbmFsUHJvcGVydHkpIHtcblx0XHRcdGlmIChkaXNwbGF5TW9kZSA9PT0gXCJEZXNjcmlwdGlvblwiKSB7XG5cdFx0XHRcdHJlbGF0ZWRQcm9wZXJ0eSA9IFthZGRpdGlvbmFsUHJvcGVydHldO1xuXHRcdFx0fSBlbHNlIGlmICghdGV4dEFubm90YXRpb24gfHwgKGRpc3BsYXlNb2RlICYmIGRpc3BsYXlNb2RlICE9PSBcIlZhbHVlXCIpKSB7XG5cdFx0XHRcdHJlbGF0ZWRQcm9wZXJ0eS5wdXNoKGFkZGl0aW9uYWxQcm9wZXJ0eSk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0bGV0IHNpemUgPSAwO1xuXHRcdGNvbnN0IGluc3RhbmNlczogT0RhdGFUeXBlW10gPSBbXTtcblxuXHRcdHJlbGF0ZWRQcm9wZXJ0eS5mb3JFYWNoKChwcm9wOiBQcm9wZXJ0eSkgPT4ge1xuXHRcdFx0Y29uc3QgcHJvcGVydHlUeXBlQ29uZmlnID0gZ2V0VHlwZUNvbmZpZyhwcm9wLCB1bmRlZmluZWQpO1xuXHRcdFx0Y29uc3QgUHJvcGVydHlPRGF0YUNvbnN0cnVjdG9yID0gT2JqZWN0UGF0aC5nZXQocHJvcGVydHlUeXBlQ29uZmlnLnR5cGUpO1xuXHRcdFx0aWYgKFByb3BlcnR5T0RhdGFDb25zdHJ1Y3Rvcikge1xuXHRcdFx0XHRpbnN0YW5jZXMucHVzaChuZXcgUHJvcGVydHlPRGF0YUNvbnN0cnVjdG9yKHByb3BlcnR5VHlwZUNvbmZpZy5mb3JtYXRPcHRpb25zLCBwcm9wZXJ0eVR5cGVDb25maWcuY29uc3RyYWludHMpKTtcblx0XHRcdH1cblx0XHR9KTtcblx0XHRjb25zdCBzV2lkdGggPSBVdGlsLmNhbGNDb2x1bW5XaWR0aChpbnN0YW5jZXMsIGxhYmVsKTtcblx0XHRzaXplID0gc1dpZHRoID8gcGFyc2VGbG9hdChzV2lkdGgucmVwbGFjZShcInJlbVwiLCBcIlwiKSkgOiAwO1xuXG5cdFx0aWYgKHNpemUgPT09IDApIHtcblx0XHRcdExvZy5lcnJvcihgQ2Fubm90IGNvbXB1dGUgdGhlIGNvbHVtbiB3aWR0aCBmb3IgcHJvcGVydHk6ICR7cHJvcGVydHkubmFtZX1gKTtcblx0XHR9XG5cdFx0cmV0dXJuIHNpemUgPD0gMjAgPyBzaXplLnRvU3RyaW5nKCkgKyBcInJlbVwiIDogXCIyMHJlbVwiO1xuXHR9LFxuXG5cdGdldE91dFBhcmFtZXRlclBhdGhzOiBmdW5jdGlvbiAoYVBhcmFtZXRlcnM6IEFubm90YXRpb25WYWx1ZUxpc3RQYXJhbWV0ZXJbXSk6IHN0cmluZyB7XG5cdFx0bGV0IHNQYXRoID0gXCJcIjtcblx0XHRhUGFyYW1ldGVycy5mb3JFYWNoKGZ1bmN0aW9uIChvUGFyYW1ldGVyOiBBbm5vdGF0aW9uVmFsdWVMaXN0UGFyYW1ldGVyKSB7XG5cdFx0XHRpZiAob1BhcmFtZXRlci4kVHlwZS5lbmRzV2l0aChcIk91dFwiKSkge1xuXHRcdFx0XHRzUGF0aCArPSBgeyR7b1BhcmFtZXRlci5WYWx1ZUxpc3RQcm9wZXJ0eX19YDtcblx0XHRcdH1cblx0XHR9KTtcblx0XHRyZXR1cm4gc1BhdGg7XG5cdH0sXG5cblx0ZW50aXR5SXNTZWFyY2hhYmxlOiBmdW5jdGlvbiAoXG5cdFx0cHJvcGVydHlBbm5vdGF0aW9uczogQW5ub3RhdGlvbnNGb3JQcm9wZXJ0eSxcblx0XHRjb2xsZWN0aW9uQW5ub3RhdGlvbnM6IE1ldGFNb2RlbEVudGl0eVNldEFubm90YXRpb25cblx0KTogYm9vbGVhbiB7XG5cdFx0Y29uc3Qgc2VhcmNoU3VwcG9ydGVkID0gcHJvcGVydHlBbm5vdGF0aW9uc1tcIkBjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuVmFsdWVMaXN0XCJdPy5TZWFyY2hTdXBwb3J0ZWQsXG5cdFx0XHRzZWFyY2hhYmxlID0gY29sbGVjdGlvbkFubm90YXRpb25zW1wiQE9yZy5PRGF0YS5DYXBhYmlsaXRpZXMuVjEuU2VhcmNoUmVzdHJpY3Rpb25zXCJdPy5TZWFyY2hhYmxlO1xuXG5cdFx0aWYgKFxuXHRcdFx0KHNlYXJjaGFibGUgPT09IHVuZGVmaW5lZCAmJiBzZWFyY2hTdXBwb3J0ZWQgPT09IGZhbHNlKSB8fFxuXHRcdFx0KHNlYXJjaGFibGUgPT09IHRydWUgJiYgc2VhcmNoU3VwcG9ydGVkID09PSBmYWxzZSkgfHxcblx0XHRcdHNlYXJjaGFibGUgPT09IGZhbHNlXG5cdFx0KSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXHRcdHJldHVybiB0cnVlO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBSZXR1cm5zIHRoZSBjb25kaXRpb24gcGF0aCByZXF1aXJlZCBmb3IgdGhlIGNvbmRpdGlvbiBtb2RlbC5cblx0ICogRm9yIGUuZy4gPDE6Ti1Qcm9wZXJ0eU5hbWU+KlxcLzwxOjEtUHJvcGVydHlOYW1lPi88UHJvcGVydHlOYW1lPi5cblx0ICogQHBhcmFtIG1ldGFNb2RlbCBUaGUgbWV0YW1vZGVsIGluc3RhbmNlXG5cdCAqIEBwYXJhbSBlbnRpdHlTZXQgVGhlIGVudGl0eSBzZXQgcGF0aFxuXHQgKiBAcGFyYW0gcHJvcGVydHlQYXRoIFRoZSBwcm9wZXJ0eSBwYXRoXG5cdCAqIEByZXR1cm5zIFRoZSBmb3JtYXR0ZWQgY29uZGl0aW9uIHBhdGhcblx0ICogQHByaXZhdGVcblx0ICovXG5cdF9nZXRDb25kaXRpb25QYXRoOiBmdW5jdGlvbiAobWV0YU1vZGVsOiBPRGF0YU1ldGFNb2RlbCwgZW50aXR5U2V0OiBzdHJpbmcsIHByb3BlcnR5UGF0aDogc3RyaW5nKTogc3RyaW5nIHtcblx0XHQvLyAoc2VlIGFsc286IHNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvY29udHJvbHMvTGlzdFJlcG9ydC9GaWx0ZXJCYXIudHMpXG5cdFx0Y29uc3QgcGFydHMgPSBwcm9wZXJ0eVBhdGguc3BsaXQoXCIvXCIpO1xuXHRcdGxldCBjb25kaXRpb25QYXRoID0gXCJcIixcblx0XHRcdHBhcnRpYWxQYXRoOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cblx0XHR3aGlsZSAocGFydHMubGVuZ3RoKSB7XG5cdFx0XHRsZXQgcGFydCA9IHBhcnRzLnNoaWZ0KCkgYXMgc3RyaW5nO1xuXHRcdFx0cGFydGlhbFBhdGggPSBwYXJ0aWFsUGF0aCA/IGAke3BhcnRpYWxQYXRofS8ke3BhcnR9YCA6IHBhcnQ7XG5cdFx0XHRjb25zdCBwcm9wZXJ0eSA9IG1ldGFNb2RlbC5nZXRPYmplY3QoYCR7ZW50aXR5U2V0fS8ke3BhcnRpYWxQYXRofWApO1xuXHRcdFx0aWYgKHByb3BlcnR5ICYmIHByb3BlcnR5LiRraW5kID09PSBcIk5hdmlnYXRpb25Qcm9wZXJ0eVwiICYmIHByb3BlcnR5LiRpc0NvbGxlY3Rpb24pIHtcblx0XHRcdFx0cGFydCArPSBcIipcIjtcblx0XHRcdH1cblx0XHRcdGNvbmRpdGlvblBhdGggPSBjb25kaXRpb25QYXRoID8gYCR7Y29uZGl0aW9uUGF0aH0vJHtwYXJ0fWAgOiBwYXJ0O1xuXHRcdH1cblx0XHRyZXR1cm4gY29uZGl0aW9uUGF0aDtcblx0fSxcblxuXHQvKipcblx0ICogUmV0dXJucyBhcnJheSBvZiBjb2x1bW4gZGVmaW5pdGlvbnMgY29ycmVzcG9uZGluZyB0byBwcm9wZXJ0aWVzIGRlZmluZWQgYXMgU2VsZWN0aW9uIEZpZWxkcyBvbiB0aGUgQ29sbGVjdGlvblBhdGggZW50aXR5IHNldCBpbiBhIFZhbHVlSGVscC5cblx0ICogQHBhcmFtIG1ldGFNb2RlbCBUaGUgbWV0YW1vZGVsIGluc3RhbmNlXG5cdCAqIEBwYXJhbSBlbnRpdHlTZXQgVGhlIGVudGl0eSBzZXQgcGF0aFxuXHQgKiBAcmV0dXJucyBBcnJheSBvZiBjb2x1bW4gZGVmaW5pdGlvbnNcblx0ICogQHByaXZhdGVcblx0ICovXG5cdF9nZXRDb2x1bW5EZWZpbml0aW9uRnJvbVNlbGVjdGlvbkZpZWxkczogZnVuY3Rpb24gKG1ldGFNb2RlbDogT0RhdGFNZXRhTW9kZWwsIGVudGl0eVNldDogc3RyaW5nKTogQ29sdW1uRGVmW10ge1xuXHRcdGNvbnN0IGNvbHVtbkRlZnM6IENvbHVtbkRlZltdID0gW10sXG5cdFx0XHRlbnRpdHlUeXBlQW5ub3RhdGlvbnMgPSBtZXRhTW9kZWwuZ2V0T2JqZWN0KGAke2VudGl0eVNldH0vQGApIGFzIEFubm90YXRpb25zRm9yRW50aXR5VHlwZSxcblx0XHRcdHNlbGVjdGlvbkZpZWxkcyA9IGVudGl0eVR5cGVBbm5vdGF0aW9uc1tcIkBjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5TZWxlY3Rpb25GaWVsZHNcIl07XG5cblx0XHRpZiAoc2VsZWN0aW9uRmllbGRzKSB7XG5cdFx0XHRzZWxlY3Rpb25GaWVsZHMuZm9yRWFjaChmdW5jdGlvbiAoc2VsZWN0aW9uRmllbGQ6IEFubm90YXRpb25TZWxlY3Rpb25GaWVsZCkge1xuXHRcdFx0XHRjb25zdCBzZWxlY3Rpb25GaWVsZFBhdGggPSBgJHtlbnRpdHlTZXR9LyR7c2VsZWN0aW9uRmllbGQuJFByb3BlcnR5UGF0aH1gLFxuXHRcdFx0XHRcdGNvbmRpdGlvblBhdGggPSBWYWx1ZUxpc3RIZWxwZXIuX2dldENvbmRpdGlvblBhdGgobWV0YU1vZGVsLCBlbnRpdHlTZXQsIHNlbGVjdGlvbkZpZWxkLiRQcm9wZXJ0eVBhdGgpLFxuXHRcdFx0XHRcdHByb3BlcnR5QW5ub3RhdGlvbnMgPSBtZXRhTW9kZWwuZ2V0T2JqZWN0KGAke3NlbGVjdGlvbkZpZWxkUGF0aH1AYCkgYXMgQW5ub3RhdGlvbnNGb3JQcm9wZXJ0eSxcblx0XHRcdFx0XHRjb2x1bW5EZWYgPSB7XG5cdFx0XHRcdFx0XHRwYXRoOiBjb25kaXRpb25QYXRoLFxuXHRcdFx0XHRcdFx0bGFiZWw6IHByb3BlcnR5QW5ub3RhdGlvbnM/LltBbm5vdGF0aW9uTGFiZWxdIHx8IHNlbGVjdGlvbkZpZWxkUGF0aCxcblx0XHRcdFx0XHRcdHNvcnRhYmxlOiB0cnVlLFxuXHRcdFx0XHRcdFx0ZmlsdGVyYWJsZTogaXNQcm9wZXJ0eUZpbHRlcmFibGUobWV0YU1vZGVsLCBlbnRpdHlTZXQsIHNlbGVjdGlvbkZpZWxkLiRQcm9wZXJ0eVBhdGgsIGZhbHNlKSxcblx0XHRcdFx0XHRcdCRUeXBlOiBtZXRhTW9kZWwuZ2V0T2JqZWN0KHNlbGVjdGlvbkZpZWxkUGF0aCk/LiRUeXBlXG5cdFx0XHRcdFx0fTtcblx0XHRcdFx0Y29sdW1uRGVmcy5wdXNoKGNvbHVtbkRlZik7XG5cdFx0XHR9KTtcblx0XHR9XG5cblx0XHRyZXR1cm4gY29sdW1uRGVmcztcblx0fSxcblxuXHRfbWVyZ2VDb2x1bW5EZWZpbml0aW9uc0Zyb21Qcm9wZXJ0aWVzOiBmdW5jdGlvbiAoXG5cdFx0Y29sdW1uRGVmczogQ29sdW1uRGVmW10sXG5cdFx0dmFsdWVMaXN0SW5mbzogQW5ub3RhdGlvblZhbHVlTGlzdFR5cGUsXG5cdFx0dmFsdWVMaXN0UHJvcGVydHk6IHN0cmluZyxcblx0XHRwcm9wZXJ0eTogQ29sdW1uUHJvcGVydHksXG5cdFx0cHJvcGVydHlBbm5vdGF0aW9uczogQW5ub3RhdGlvbnNGb3JQcm9wZXJ0eVxuXHQpOiB2b2lkIHtcblx0XHRsZXQgY29sdW1uUGF0aCA9IHZhbHVlTGlzdFByb3BlcnR5LFxuXHRcdFx0Y29sdW1uUHJvcGVydHlUeXBlID0gcHJvcGVydHkuJFR5cGU7XG5cdFx0Y29uc3QgbGFiZWwgPSBwcm9wZXJ0eUFubm90YXRpb25zW0Fubm90YXRpb25MYWJlbF0gfHwgY29sdW1uUGF0aCxcblx0XHRcdHRleHRBbm5vdGF0aW9uID0gcHJvcGVydHlBbm5vdGF0aW9uc1tBbm5vdGF0aW9uVGV4dF07XG5cblx0XHRpZiAoXG5cdFx0XHR0ZXh0QW5ub3RhdGlvbiAmJlxuXHRcdFx0cHJvcGVydHlBbm5vdGF0aW9uc1tBbm5vdGF0aW9uVGV4dFVJVGV4dEFycmFuZ2VtZW50XT8uJEVudW1NZW1iZXIgPT09IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuVGV4dEFycmFuZ2VtZW50VHlwZS9UZXh0T25seVwiXG5cdFx0KSB7XG5cdFx0XHQvLyB0aGUgY29sdW1uIHByb3BlcnR5IGlzIHRoZSBvbmUgY29taW5nIGZyb20gdGhlIHRleHQgYW5ub3RhdGlvblxuXHRcdFx0Y29sdW1uUGF0aCA9IHRleHRBbm5vdGF0aW9uLiRQYXRoO1xuXHRcdFx0Y29uc3QgdGV4dFByb3BlcnR5UGF0aCA9IGAvJHt2YWx1ZUxpc3RJbmZvLkNvbGxlY3Rpb25QYXRofS8ke2NvbHVtblBhdGh9YDtcblx0XHRcdGNvbHVtblByb3BlcnR5VHlwZSA9IHZhbHVlTGlzdEluZm8uJG1vZGVsLmdldE1ldGFNb2RlbCgpPy5nZXRPYmplY3QodGV4dFByb3BlcnR5UGF0aCk/LiRUeXBlIGFzIHN0cmluZztcblx0XHR9XG5cblx0XHRpZiAoY29sdW1uTm90QWxyZWFkeURlZmluZWQoY29sdW1uRGVmcywgY29sdW1uUGF0aCkpIHtcblx0XHRcdGNvbnN0IGNvbHVtbkRlZjogQ29sdW1uRGVmID0ge1xuXHRcdFx0XHRwYXRoOiBjb2x1bW5QYXRoLFxuXHRcdFx0XHQvLyBlbnN1cmUgdGhlIHRleHQgYXNzb2NpYXRlZCB3aXRoIGEgY29sdW1uIHRoYXQgcmVmZXJlbmNlcyBhIG5hdmlnYXRpb24gcHJvcGVydHkgcmVmbGVjdHMgdGhlIHNhbWUgbmF2aWdhdGlvbiBzdHJ1Y3R1cmUgYXMgdGhlIGNvbHVtblxuXHRcdFx0XHR0ZXh0UGF0aDpcblx0XHRcdFx0XHR0ZXh0QW5ub3RhdGlvbj8uJFBhdGggJiYgdmFsdWVMaXN0UHJvcGVydHkuaW5jbHVkZXMoXCIvXCIpXG5cdFx0XHRcdFx0XHQ/IHZhbHVlTGlzdFByb3BlcnR5LnN1YnN0cmluZygwLCB2YWx1ZUxpc3RQcm9wZXJ0eS5sYXN0SW5kZXhPZihcIi9cIikpICsgXCIvXCIgKyB0ZXh0QW5ub3RhdGlvbi4kUGF0aFxuXHRcdFx0XHRcdFx0OiB0ZXh0QW5ub3RhdGlvbj8uJFBhdGgsXG5cdFx0XHRcdGxhYmVsOiBsYWJlbCxcblx0XHRcdFx0c29ydGFibGU6IHRydWUsXG5cdFx0XHRcdGZpbHRlcmFibGU6ICFwcm9wZXJ0eUFubm90YXRpb25zW1wiQGNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkhpZGRlbkZpbHRlclwiXSxcblx0XHRcdFx0JFR5cGU6IGNvbHVtblByb3BlcnR5VHlwZVxuXHRcdFx0fTtcblx0XHRcdGNvbHVtbkRlZnMucHVzaChjb2x1bW5EZWYpO1xuXHRcdH1cblx0fSxcblxuXHRmaWx0ZXJJbk91dFBhcmFtZXRlcnM6IGZ1bmN0aW9uICh2aFBhcmFtZXRlcnM6IEluT3V0UGFyYW1ldGVyW10sIHR5cGVGaWx0ZXI6IHN0cmluZ1tdKTogSW5PdXRQYXJhbWV0ZXJbXSB7XG5cdFx0cmV0dXJuIHZoUGFyYW1ldGVycy5maWx0ZXIoZnVuY3Rpb24gKHBhcmFtZXRlcikge1xuXHRcdFx0cmV0dXJuIHR5cGVGaWx0ZXIuaW5jbHVkZXMocGFyYW1ldGVyLnBhcm1ldGVyVHlwZSk7XG5cdFx0fSk7XG5cdH0sXG5cblx0Z2V0SW5QYXJhbWV0ZXJzOiBmdW5jdGlvbiAodmhQYXJhbWV0ZXJzOiBJbk91dFBhcmFtZXRlcltdKTogSW5PdXRQYXJhbWV0ZXJbXSB7XG5cdFx0cmV0dXJuIFZhbHVlTGlzdEhlbHBlci5maWx0ZXJJbk91dFBhcmFtZXRlcnModmhQYXJhbWV0ZXJzLCBbXG5cdFx0XHRBbm5vdGF0aW9uVmFsdWVMaXN0UGFyYW1ldGVySW4sXG5cdFx0XHRBbm5vdGF0aW9uVmFsdWVMaXN0UGFyYW1ldGVyQ29uc3RhbnQsXG5cdFx0XHRBbm5vdGF0aW9uVmFsdWVMaXN0UGFyYW1ldGVySW5PdXRcblx0XHRdKTtcblx0fSxcblxuXHRnZXRPdXRQYXJhbWV0ZXJzOiBmdW5jdGlvbiAodmhQYXJhbWV0ZXJzOiBJbk91dFBhcmFtZXRlcltdKTogSW5PdXRQYXJhbWV0ZXJbXSB7XG5cdFx0cmV0dXJuIFZhbHVlTGlzdEhlbHBlci5maWx0ZXJJbk91dFBhcmFtZXRlcnModmhQYXJhbWV0ZXJzLCBbQW5ub3RhdGlvblZhbHVlTGlzdFBhcmFtZXRlck91dCwgQW5ub3RhdGlvblZhbHVlTGlzdFBhcmFtZXRlckluT3V0XSk7XG5cdH0sXG5cblx0Y3JlYXRlVkhVSU1vZGVsOiBmdW5jdGlvbiAodmFsdWVIZWxwOiBWYWx1ZUhlbHAsIHByb3BlcnR5UGF0aDogc3RyaW5nLCBtZXRhTW9kZWw6IE9EYXRhTWV0YU1vZGVsKTogSlNPTk1vZGVsIHtcblx0XHQvLyBzZXR0aW5nIHRoZSBfVkhVSSBtb2RlbCBldmFsdWF0ZWQgaW4gdGhlIFZhbHVlTGlzdFRhYmxlIGZyYWdtZW50XG5cdFx0Y29uc3QgdmhVSU1vZGVsID0gbmV3IEpTT05Nb2RlbCh7fSksXG5cdFx0XHRwcm9wZXJ0eUFubm90YXRpb25zID0gbWV0YU1vZGVsLmdldE9iamVjdChgJHtwcm9wZXJ0eVBhdGh9QGApIGFzIEFubm90YXRpb25zRm9yUHJvcGVydHk7XG5cblx0XHR2YWx1ZUhlbHAuc2V0TW9kZWwodmhVSU1vZGVsLCBcIl9WSFVJXCIpO1xuXHRcdC8vIElkZW50aWZpZXMgdGhlIFwiQ29udGV4dERlcGVuZGVudC1TY2VuYXJpb1wiXG5cdFx0dmhVSU1vZGVsLnNldFByb3BlcnR5KFwiL2hhc1ZhbHVlTGlzdFJlbGV2YW50UXVhbGlmaWVyc1wiLCAhIXByb3BlcnR5QW5ub3RhdGlvbnNbQW5ub3RhdGlvbnNWYWx1ZUxpc3RSZWxldmFudFF1YWxpZmllcnNdKTtcblx0XHQvKiBQcm9wZXJ0eSBsYWJlbCBmb3IgZGlhbG9nIHRpdGxlICovXG5cdFx0dmhVSU1vZGVsLnNldFByb3BlcnR5KFwiL3Byb3BlcnR5TGFiZWxcIiwgcHJvcGVydHlBbm5vdGF0aW9uc1tBbm5vdGF0aW9uTGFiZWxdKTtcblxuXHRcdHJldHVybiB2aFVJTW9kZWw7XG5cdH0sXG5cblx0LyoqXG5cdCAqIFJldHVybnMgdGhlIHRpdGxlIG9mIHRoZSB2YWx1ZSBoZWxwIGRpYWxvZy5cblx0ICogQnkgZGVmYXVsdCwgdGhlIGRhdGEgZmllbGQgbGFiZWwgaXMgdXNlZCwgb3RoZXJ3aXNlIGVpdGhlciB0aGUgcHJvcGVydHkgbGFiZWwgb3IgdGhlIHZhbHVlIGxpc3QgbGFiZWwgaXMgdXNlZCBhcyBhIGZhbGxiYWNrLlxuXHQgKiBGb3IgY29udGV4dC1kZXBlbmRlbnQgdmFsdWUgaGVscHMsIGJ5IGRlZmF1bHQgdGhlIHZhbHVlIGxpc3QgbGFiZWwgaXMgdXNlZCwgb3RoZXJ3aXNlIGVpdGhlciB0aGUgcHJvcGVydHkgbGFiZWwgb3IgdGhlIGRhdGEgZmllbGQgbGFiZWwgaXMgdXNlZCBhcyBhIGZhbGxiYWNrLlxuXHQgKiBAcGFyYW0gdmFsdWVIZWxwIFRoZSB2YWx1ZUhlbHAgaW5zdGFuY2Vcblx0ICogQHBhcmFtIHZhbHVlaGVscExhYmVsIFRoZSBsYWJlbCBpbiB0aGUgdmFsdWUgaGVscCBtZXRhZGF0YVxuXHQgKiBAcmV0dXJucyBUaGUgdGl0bGUgZm9yIHRoZSB2YWx1ZUhlbHAgZGlhbG9nXG5cdCAqIEBwcml2YXRlXG5cdCAqL1xuXHRfZ2V0RGlhbG9nVGl0bGU6IGZ1bmN0aW9uICh2YWx1ZUhlbHA6IFZhbHVlSGVscCwgdmFsdWVoZWxwTGFiZWw6IHN0cmluZyB8IHVuZGVmaW5lZCk6IHN0cmluZyB7XG5cdFx0Y29uc3QgcHJvcGVydHlMYWJlbCA9ICh2YWx1ZUhlbHAuZ2V0TW9kZWwoXCJfVkhVSVwiKSBhcyBKU09OTW9kZWwpLmdldFByb3BlcnR5KFwiL3Byb3BlcnR5TGFiZWxcIik7XG5cdFx0Y29uc3QgZGF0YUZpZWxkTGFiZWwgPSB2YWx1ZUhlbHAuZ2V0Q29udHJvbCgpPy5nZXRQcm9wZXJ0eShcImxhYmVsXCIpO1xuXHRcdHJldHVybiAodmFsdWVIZWxwLmdldE1vZGVsKFwiX1ZIVUlcIikgYXMgSlNPTk1vZGVsKS5nZXRQcm9wZXJ0eShcIi9oYXNWYWx1ZUxpc3RSZWxldmFudFF1YWxpZmllcnNcIilcblx0XHRcdD8gdmFsdWVoZWxwTGFiZWwgfHwgcHJvcGVydHlMYWJlbCB8fCBkYXRhRmllbGRMYWJlbFxuXHRcdFx0OiBkYXRhRmllbGRMYWJlbCB8fCBwcm9wZXJ0eUxhYmVsIHx8IHZhbHVlaGVscExhYmVsO1xuXHR9LFxuXG5cdGRlc3Ryb3lWSENvbnRlbnQ6IGZ1bmN0aW9uICh2YWx1ZUhlbHA6IFZhbHVlSGVscCB8IHVuZGVmaW5lZCk6IHZvaWQge1xuXHRcdGlmICh2YWx1ZUhlbHApIHtcblx0XHRcdHZhbHVlSGVscC5nZXREaWFsb2coKT8uZGVzdHJveUNvbnRlbnQoKTtcblx0XHRcdHZhbHVlSGVscC5nZXRUeXBlYWhlYWQoKT8uZGVzdHJveUNvbnRlbnQoKTtcblx0XHR9XG5cdH0sXG5cblx0cHV0RGVmYXVsdFF1YWxpZmllckZpcnN0OiBmdW5jdGlvbiAocXVhbGlmaWVyczogc3RyaW5nW10pOiBzdHJpbmdbXSB7XG5cdFx0Y29uc3QgaW5kZXhEZWZhdWx0VkggPSBxdWFsaWZpZXJzLmluZGV4T2YoXCJcIik7XG5cblx0XHQvLyBkZWZhdWx0IFZhbHVlSGVscCB3aXRob3V0IHF1YWxpZmllciBzaG91bGQgYmUgdGhlIGZpcnN0XG5cdFx0aWYgKGluZGV4RGVmYXVsdFZIID4gMCkge1xuXHRcdFx0cXVhbGlmaWVycy51bnNoaWZ0KHF1YWxpZmllcnNbaW5kZXhEZWZhdWx0VkhdKTtcblx0XHRcdHF1YWxpZmllcnMuc3BsaWNlKGluZGV4RGVmYXVsdFZIICsgMSwgMSk7XG5cdFx0fVxuXHRcdHJldHVybiBxdWFsaWZpZXJzO1xuXHR9LFxuXG5cdF9nZXRDb250ZXh0UHJlZml4OiBmdW5jdGlvbiAoYmluZGluZ0NvbnRleHQ6IENvbnRleHQgfCB1bmRlZmluZWQsIHByb3BlcnR5QmluZGluZ1BhcnRzOiBzdHJpbmdbXSk6IHN0cmluZyB7XG5cdFx0aWYgKGJpbmRpbmdDb250ZXh0ICYmIGJpbmRpbmdDb250ZXh0LmdldFBhdGgoKSkge1xuXHRcdFx0Y29uc3QgYmluZGlnQ29udGV4dFBhcnRzID0gYmluZGluZ0NvbnRleHQuZ2V0UGF0aCgpLnNwbGl0KFwiL1wiKTtcblx0XHRcdGlmIChwcm9wZXJ0eUJpbmRpbmdQYXJ0cy5sZW5ndGggLSBiaW5kaWdDb250ZXh0UGFydHMubGVuZ3RoID4gMSkge1xuXHRcdFx0XHRjb25zdCBjb250ZXh0UHJlZml4UGFydHMgPSBbXTtcblx0XHRcdFx0Zm9yIChsZXQgaSA9IGJpbmRpZ0NvbnRleHRQYXJ0cy5sZW5ndGg7IGkgPCBwcm9wZXJ0eUJpbmRpbmdQYXJ0cy5sZW5ndGggLSAxOyBpKyspIHtcblx0XHRcdFx0XHRjb250ZXh0UHJlZml4UGFydHMucHVzaChwcm9wZXJ0eUJpbmRpbmdQYXJ0c1tpXSk7XG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuIGAke2NvbnRleHRQcmVmaXhQYXJ0cy5qb2luKFwiL1wiKX0vYDtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gXCJcIjtcblx0fSxcblxuXHRfZ2V0VmhQYXJhbWV0ZXI6IGZ1bmN0aW9uIChcblx0XHRjb25kaXRpb25Nb2RlbDogc3RyaW5nIHwgdW5kZWZpbmVkLFxuXHRcdHZhbHVlSGVscDogVmFsdWVIZWxwIHwgdW5kZWZpbmVkLFxuXHRcdGNvbnRleHRQcmVmaXg6IHN0cmluZyxcblx0XHRwYXJhbWV0ZXI6IEFubm90YXRpb25WYWx1ZUxpc3RQYXJhbWV0ZXIsXG5cdFx0dmhNZXRhTW9kZWw6IE9EYXRhTWV0YU1vZGVsLFxuXHRcdGxvY2FsRGF0YVByb3BlcnR5UGF0aDogc3RyaW5nXG5cdCk6IEluT3V0UGFyYW1ldGVyIHtcblx0XHRsZXQgdmFsdWVQYXRoOiBzdHJpbmcgfCB1bmRlZmluZWQgPSBcIlwiO1xuXHRcdGNvbnN0IGJpbmRpbmdDb250ZXh0ID0gdmFsdWVIZWxwPy5nZXRCaW5kaW5nQ29udGV4dCgpO1xuXHRcdGlmIChjb25kaXRpb25Nb2RlbCAmJiBjb25kaXRpb25Nb2RlbC5sZW5ndGggPiAwKSB7XG5cdFx0XHRpZiAoXG5cdFx0XHRcdHZhbHVlSGVscD8uZ2V0UGFyZW50KCk/LmlzQShcInNhcC51aS5tZGMuVGFibGVcIikgPT09IHRydWUgJiZcblx0XHRcdFx0YmluZGluZ0NvbnRleHQgJiZcblx0XHRcdFx0VmFsdWVMaXN0SGVscGVyLl9wYXJhbWV0ZXJJc0EocGFyYW1ldGVyLCBbXG5cdFx0XHRcdFx0Q29tbW9uQW5ub3RhdGlvblR5cGVzLlZhbHVlTGlzdFBhcmFtZXRlckluLFxuXHRcdFx0XHRcdENvbW1vbkFubm90YXRpb25UeXBlcy5WYWx1ZUxpc3RQYXJhbWV0ZXJJbk91dFxuXHRcdFx0XHRdKVxuXHRcdFx0KSB7XG5cdFx0XHRcdC8vIFNwZWNpYWwgaGFuZGxpbmcgZm9yIHZhbHVlIGhlbHAgdXNlZCBpbiBmaWx0ZXIgZGlhbG9nXG5cdFx0XHRcdGNvbnN0IHBhcnRzID0gbG9jYWxEYXRhUHJvcGVydHlQYXRoLnNwbGl0KFwiL1wiKTtcblx0XHRcdFx0aWYgKHBhcnRzLmxlbmd0aCA+IDEpIHtcblx0XHRcdFx0XHRjb25zdCBmaXJzdE5hdmlnYXRpb25Qcm9wZXJ0eSA9IHBhcnRzWzBdO1xuXHRcdFx0XHRcdGNvbnN0IG9Cb3VuZEVudGl0eSA9IHZoTWV0YU1vZGVsLmdldE1ldGFDb250ZXh0KGJpbmRpbmdDb250ZXh0LmdldFBhdGgoKSk7XG5cdFx0XHRcdFx0Y29uc3Qgc1BhdGhPZlRhYmxlID0gKHZhbHVlSGVscC5nZXRQYXJlbnQoKSBhcyB1bmtub3duIGFzIHsgZ2V0Um93QmluZGluZzogRnVuY3Rpb24gfSkuZ2V0Um93QmluZGluZygpLmdldFBhdGgoKTsgLy9UT0RPXG5cdFx0XHRcdFx0aWYgKG9Cb3VuZEVudGl0eS5nZXRPYmplY3QoYCR7c1BhdGhPZlRhYmxlfS8kUGFydG5lcmApID09PSBmaXJzdE5hdmlnYXRpb25Qcm9wZXJ0eSkge1xuXHRcdFx0XHRcdFx0Ly8gVXNpbmcgdGhlIGNvbmRpdGlvbiBtb2RlbCBkb2Vzbid0IG1ha2UgYW55IHNlbnNlIGluIGNhc2UgYW4gaW4tcGFyYW1ldGVyIHVzZXMgYSBuYXZpZ2F0aW9uIHByb3BlcnR5XG5cdFx0XHRcdFx0XHQvLyByZWZlcnJpbmcgdG8gdGhlIHBhcnRuZXIuIFRoZXJlZm9yZSB1c2luZyB0aGUgRlZIIGNvbnRleHQgaW5zdGVhZCBvZiB0aGUgY29uZGl0aW9uIG1vZGVsLlxuXHRcdFx0XHRcdFx0dmFsdWVQYXRoID0gbG9jYWxEYXRhUHJvcGVydHlQYXRoO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIGlmIChcblx0XHRcdFx0dmFsdWVIZWxwPy5nZXRQYXJlbnQoKT8uZ2V0UGFyZW50KCk/LmdldFBhcmVudCgpPy5pc0E8RmlsdGVyQmFyQVBJPihcInNhcC5mZS5tYWNyb3MuZmlsdGVyQmFyLkZpbHRlckJhckFQSVwiKSA9PT0gdHJ1ZSAmJlxuXHRcdFx0XHRiaW5kaW5nQ29udGV4dCAmJlxuXHRcdFx0XHRWYWx1ZUxpc3RIZWxwZXIuX3BhcmFtZXRlcklzQShwYXJhbWV0ZXIsIFtcblx0XHRcdFx0XHRDb21tb25Bbm5vdGF0aW9uVHlwZXMuVmFsdWVMaXN0UGFyYW1ldGVySW4sXG5cdFx0XHRcdFx0Q29tbW9uQW5ub3RhdGlvblR5cGVzLlZhbHVlTGlzdFBhcmFtZXRlckluT3V0XG5cdFx0XHRcdF0pXG5cdFx0XHQpIHtcblx0XHRcdFx0Ly8gSW4gY2FzZSB3ZSBhcmUgYSB2YWx1ZSBoZWxwIG9mIGEgRmlsdGVyQmFyLCB3ZSBjYW4gZ28gdXAgdG8gdGhlIEFQSSB0byBjaGVjayBpZiB3ZSBhcmUgb24gYSBmaWx0ZXJiYXIgcmVwcmVzZW50aW5nIGEgbmF2aWdhdGlvbiBwcm9wZXJ0eVxuXHRcdFx0XHRjb25zdCBmaWx0ZXJCYXJBUEkgPSB2YWx1ZUhlbHAuZ2V0UGFyZW50KCk/LmdldFBhcmVudCgpPy5nZXRQYXJlbnQoKSBhcyBGaWx0ZXJCYXJBUEk7XG5cdFx0XHRcdGNvbnN0IGZpbHRlckJhck1ldGFQYXRoID0gZmlsdGVyQmFyQVBJLm1ldGFQYXRoO1xuXHRcdFx0XHRjb25zdCB2YWx1ZUhlbHBDb250ZXh0UGF0aCA9IHZoTWV0YU1vZGVsLmdldE1ldGFQYXRoKGJpbmRpbmdDb250ZXh0LmdldFBhdGgoKSk7XG5cdFx0XHRcdGNvbnN0IGNvbnRleHRNZXRhUGF0aCA9IG5ldyBNZXRhUGF0aChjb252ZXJ0VHlwZXModmhNZXRhTW9kZWwpLCB2YWx1ZUhlbHBDb250ZXh0UGF0aCwgdmFsdWVIZWxwQ29udGV4dFBhdGgpO1xuXHRcdFx0XHRjb25zdCBtZXRhUGF0aCA9IG5ldyBNZXRhUGF0aChjb252ZXJ0VHlwZXModmhNZXRhTW9kZWwpLCBmaWx0ZXJCYXJNZXRhUGF0aCwgdmFsdWVIZWxwQ29udGV4dFBhdGgpO1xuXHRcdFx0XHRjb25zdCBuZXdQYXRoID0gbWV0YVBhdGguZ2V0TWV0YVBhdGhGb3JQYXRoPFByb3BlcnR5Pihsb2NhbERhdGFQcm9wZXJ0eVBhdGgpO1xuXHRcdFx0XHRpZiAobmV3UGF0aCAmJiBuZXdQYXRoLmdldFRhcmdldCgpKSB7XG5cdFx0XHRcdFx0Y29uc3QgdGFyZ2V0RW50aXR5U2V0ID0gbmV3UGF0aC5nZXRDbG9zZXN0RW50aXR5U2V0KCk7XG5cdFx0XHRcdFx0aWYgKHRhcmdldEVudGl0eVNldCA9PT0gY29udGV4dE1ldGFQYXRoLmdldENsb3Nlc3RFbnRpdHlTZXQoKSkge1xuXHRcdFx0XHRcdFx0dmFsdWVQYXRoID0gY29udGV4dE1ldGFQYXRoLmdldE1ldGFQYXRoRm9yT2JqZWN0KG5ld1BhdGguZ2V0VGFyZ2V0KCkpPy5nZXRSZWxhdGl2ZVBhdGgoKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdGlmICghdmFsdWVQYXRoKSB7XG5cdFx0XHRcdHZhbHVlUGF0aCA9IGNvbmRpdGlvbk1vZGVsICsgXCI+L2NvbmRpdGlvbnMvXCIgKyBsb2NhbERhdGFQcm9wZXJ0eVBhdGg7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdHZhbHVlUGF0aCA9IGNvbnRleHRQcmVmaXggKyBsb2NhbERhdGFQcm9wZXJ0eVBhdGg7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHtcblx0XHRcdHBhcm1ldGVyVHlwZTogcGFyYW1ldGVyLiRUeXBlLFxuXHRcdFx0c291cmNlOiB2YWx1ZVBhdGgsXG5cdFx0XHRoZWxwUGF0aDogcGFyYW1ldGVyLlZhbHVlTGlzdFByb3BlcnR5LFxuXHRcdFx0Y29uc3RhbnRWYWx1ZTogcGFyYW1ldGVyLkNvbnN0YW50LFxuXHRcdFx0aW5pdGlhbFZhbHVlSXNTaWduaWZpY2FudDogQm9vbGVhbihwYXJhbWV0ZXIuSW5pdGlhbFZhbHVlSXNTaWduaWZpY2FudClcblx0XHR9O1xuXHR9LFxuXG5cdF9wYXJhbWV0ZXJJc0EocGFyYW1ldGVyOiBBbm5vdGF0aW9uVmFsdWVMaXN0UGFyYW1ldGVyLCBwYXJhbWV0ZXJUeXBlczogQ29tbW9uQW5ub3RhdGlvblR5cGVzW10pOiBib29sZWFuIHtcblx0XHRyZXR1cm4gcGFyYW1ldGVyVHlwZXMuaW5jbHVkZXMocGFyYW1ldGVyLiRUeXBlIGFzIENvbW1vbkFubm90YXRpb25UeXBlcyk7XG5cdH0sXG5cblx0X2VucmljaFBhdGg6IGZ1bmN0aW9uIChcblx0XHRwYXRoOiBQYXRoLFxuXHRcdHByb3BlcnR5UGF0aDogc3RyaW5nLFxuXHRcdGxvY2FsRGF0YVByb3BlcnR5UGF0aDogc3RyaW5nLFxuXHRcdHBhcmFtZXRlcjogQW5ub3RhdGlvblZhbHVlTGlzdFBhcmFtZXRlcixcblx0XHRwcm9wZXJ0eU5hbWU6IHN0cmluZyB8IHVuZGVmaW5lZCxcblx0XHRwcm9wZXJ0eUFubm90YXRpb25zOiBBbm5vdGF0aW9uc0ZvclByb3BlcnR5LFxuXHRcdGV4dGVybmFsSWRQYXRoOiBzdHJpbmcgfCB1bmRlZmluZWRcblx0KTogdm9pZCB7XG5cdFx0aWYgKFxuXHRcdFx0IXBhdGgua2V5ICYmXG5cdFx0XHRWYWx1ZUxpc3RIZWxwZXIuX3BhcmFtZXRlcklzQShwYXJhbWV0ZXIsIFtDb21tb25Bbm5vdGF0aW9uVHlwZXMuVmFsdWVMaXN0UGFyYW1ldGVySW5PdXRdKSAmJlxuXHRcdFx0bG9jYWxEYXRhUHJvcGVydHlQYXRoID09PSBwcm9wZXJ0eU5hbWVcblx0XHQpIHtcblx0XHRcdC8qIEVYVEVSTkFMSUQgKi9cblx0XHRcdGNvbnN0IGV4dGVybmFsSWRQcm9wZXJ0eSA9IGV4dGVybmFsSWRQYXRoPy5zcGxpdChcIi9cIikucG9wKCk7XG5cdFx0XHRwYXJhbWV0ZXIuVmFsdWVMaXN0UHJvcGVydHkgPSBleHRlcm5hbElkUHJvcGVydHkgPyBleHRlcm5hbElkUHJvcGVydHkgOiBwYXJhbWV0ZXIuVmFsdWVMaXN0UHJvcGVydHk7XG5cdFx0XHRwYXRoLmZpZWxkUHJvcGVydHlQYXRoID0gcHJvcGVydHlQYXRoO1xuXHRcdFx0cGF0aC5rZXkgPSBwYXJhbWV0ZXIuVmFsdWVMaXN0UHJvcGVydHk7XG5cblx0XHRcdC8vT25seSB0aGUgdGV4dCBhbm5vdGF0aW9uIG9mIHRoZSBrZXkgY2FuIHNwZWNpZnkgdGhlIGRlc2NyaXB0aW9uXG5cdFx0XHRwYXRoLmRlc2NyaXB0aW9uUGF0aCA9IHByb3BlcnR5QW5ub3RhdGlvbnNbQW5ub3RhdGlvblRleHRdPy4kUGF0aCB8fCBcIlwiO1xuXHRcdH1cblx0fSxcblxuXHRfZW5yaWNoS2V5czogZnVuY3Rpb24gKHZoS2V5czogc3RyaW5nW10sIHBhcmFtZXRlcjogQW5ub3RhdGlvblZhbHVlTGlzdFBhcmFtZXRlcik6IHZvaWQge1xuXHRcdGlmIChcblx0XHRcdFZhbHVlTGlzdEhlbHBlci5fcGFyYW1ldGVySXNBKHBhcmFtZXRlciwgVmFsdWVMaXN0SGVscGVyLmdldEluQW5kT3V0UGFyYW1ldGVyc0xpc3QoKSkgJiZcblx0XHRcdCF2aEtleXMuaW5jbHVkZXMocGFyYW1ldGVyLlZhbHVlTGlzdFByb3BlcnR5KVxuXHRcdCkge1xuXHRcdFx0dmhLZXlzLnB1c2gocGFyYW1ldGVyLlZhbHVlTGlzdFByb3BlcnR5KTtcblx0XHR9XG5cdH0sXG5cblx0X2dldEVudGl0eVR5cGU6IGFzeW5jIGZ1bmN0aW9uIChtZXRhTW9kZWxWSDogT0RhdGFNZXRhTW9kZWwsIGVudGl0eVNldFBhdGg6IHN0cmluZyk6IFByb21pc2U8RW50aXR5VHlwZT4ge1xuXHRcdHJldHVybiBtZXRhTW9kZWxWSC5nZXRPYmplY3QoYCR7ZW50aXR5U2V0UGF0aH0vYCkgfHwgKGF3YWl0IG1ldGFNb2RlbFZILnJlcXVlc3RPYmplY3QoYCR7ZW50aXR5U2V0UGF0aH0vYCkpO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBNZXRob2QgdG8gcHJlLXByb2Nlc3MgYSB2YWx1ZSBsaXN0IGFubm90YXRpb24gYmVmb3JlIHVzaW5nIHRoZW0gaW4gdGhlIHRlbXBsYXRpbmcuXG5cdCAqIEBwYXJhbSBhbm5vdGF0aW9uVmFsdWVMaXN0VHlwZVxuXHQgKiBAcGFyYW0gcHJvcGVydHlOYW1lXG5cdCAqIEBwYXJhbSBjb25kaXRpb25Nb2RlbFxuXHQgKiBAcGFyYW0gdmFsdWVIZWxwXG5cdCAqIEBwYXJhbSBjb250ZXh0UHJlZml4XG5cdCAqIEBwYXJhbSBtZXRhTW9kZWxcblx0ICogQHBhcmFtIHZhbHVlSGVscFF1YWxpZmllclxuXHQgKiBAcGFyYW0gcGF5bG9hZFxuXHQgKiBAcGFyYW0gZW50aXR5VHlwZVxuXHQgKiBAcmV0dXJucyBUaGUgVmFsdWVMaXN0SW5mbyB0byBiZSB1c2VkIGluIHRlbXBsYXRpbmdcblx0ICovXG5cdF9wcm9jZXNzUGFyYW1ldGVyczogZnVuY3Rpb24gKFxuXHRcdGFubm90YXRpb25WYWx1ZUxpc3RUeXBlOiBBbm5vdGF0aW9uVmFsdWVMaXN0VHlwZSxcblx0XHRwcm9wZXJ0eU5hbWU6IHN0cmluZyB8IHVuZGVmaW5lZCxcblx0XHRjb25kaXRpb25Nb2RlbDogc3RyaW5nIHwgdW5kZWZpbmVkLFxuXHRcdHZhbHVlSGVscDogVmFsdWVIZWxwIHwgdW5kZWZpbmVkLFxuXHRcdGNvbnRleHRQcmVmaXg6IHN0cmluZyxcblx0XHRtZXRhTW9kZWw6IE9EYXRhTWV0YU1vZGVsLFxuXHRcdHZhbHVlSGVscFF1YWxpZmllcjogc3RyaW5nLFxuXHRcdHBheWxvYWQ6IFZhbHVlSGVscFBheWxvYWQgfCB1bmRlZmluZWQsXG5cdFx0ZW50aXR5VHlwZTogRW50aXR5VHlwZSB8IHVuZGVmaW5lZFxuXHQpOiBWYWx1ZUxpc3RJbmZvIHwgdW5kZWZpbmVkIHtcblx0XHRjb25zdCBpc0Zvck11bHRpVmFsdWVGaWVsZCA9IHBheWxvYWQ/LnVzZU11bHRpVmFsdWVGaWVsZDtcblx0XHRjb25zdCBtZXRhTW9kZWxWSCA9IGFubm90YXRpb25WYWx1ZUxpc3RUeXBlLiRtb2RlbC5nZXRNZXRhTW9kZWwoKSxcblx0XHRcdGVudGl0eVNldFBhdGggPSBgLyR7YW5ub3RhdGlvblZhbHVlTGlzdFR5cGUuQ29sbGVjdGlvblBhdGh9YDtcblx0XHRpZiAoZW50aXR5VHlwZSA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRMb2cuZXJyb3IoYEluY29uc2lzdGVudCB2YWx1ZSBoZWxwIG1ldGFkYXRhOiBFbnRpdHkgJHtlbnRpdHlTZXRQYXRofSBpcyBub3QgZGVmaW5lZGApO1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHRjb25zdCBjb2x1bW5EZWZzID0gVmFsdWVMaXN0SGVscGVyLl9nZXRDb2x1bW5EZWZpbml0aW9uRnJvbVNlbGVjdGlvbkZpZWxkcyhtZXRhTW9kZWxWSCwgZW50aXR5U2V0UGF0aCksXG5cdFx0XHR2aFBhcmFtZXRlcnM6IEluT3V0UGFyYW1ldGVyW10gPSBbXSxcblx0XHRcdHBhdGg6IFBhdGggPSB7XG5cdFx0XHRcdGZpZWxkUHJvcGVydHlQYXRoOiBcIlwiLFxuXHRcdFx0XHRkZXNjcmlwdGlvblBhdGg6IFwiXCIsXG5cdFx0XHRcdGtleTogXCJcIlxuXHRcdFx0fTtcblx0XHRsZXQgdmhLZXlzOiBzdHJpbmdbXSA9IFtdO1xuXG5cdFx0aWYgKFwiJEtleVwiIGluIGVudGl0eVR5cGUgJiYgZW50aXR5VHlwZS4kS2V5KSB7XG5cdFx0XHR2aEtleXMgPSBbLi4uKGVudGl0eVR5cGUuJEtleSBhcyBzdHJpbmdbXSldO1xuXHRcdH1cblx0XHRjb25zdCBmaXJzdEtleSA9IHZoS2V5c1swXTtcblxuXHRcdGZvciAoY29uc3QgcGFyYW1ldGVyIG9mIGFubm90YXRpb25WYWx1ZUxpc3RUeXBlLlBhcmFtZXRlcnMpIHtcblx0XHRcdC8vQWxsIFN0cmluZyBmaWVsZHMgYXJlIGFsbG93ZWQgZm9yIGZpbHRlclxuXHRcdFx0Y29uc3QgcHJvcGVydHlQYXRoID0gYC8ke2Fubm90YXRpb25WYWx1ZUxpc3RUeXBlLkNvbGxlY3Rpb25QYXRofS8ke3BhcmFtZXRlci5WYWx1ZUxpc3RQcm9wZXJ0eX1gLFxuXHRcdFx0XHRwcm9wZXJ0eSA9IG1ldGFNb2RlbFZILmdldE9iamVjdChwcm9wZXJ0eVBhdGgpLFxuXHRcdFx0XHRwcm9wZXJ0eUFubm90YXRpb25zID0gcGF5bG9hZD8uZXh0ZXJuYWxJZFBhdGhcblx0XHRcdFx0XHQ/ICgobWV0YU1vZGVsVkguZ2V0T2JqZWN0KGAvJHtwYXlsb2FkPy5leHRlcm5hbElkUGF0aH1AYCkgfHwge30pIGFzIEFubm90YXRpb25zRm9yUHJvcGVydHkpXG5cdFx0XHRcdFx0OiAoKG1ldGFNb2RlbFZILmdldE9iamVjdChgJHtwcm9wZXJ0eVBhdGh9QGApIHx8IHt9KSBhcyBBbm5vdGF0aW9uc0ZvclByb3BlcnR5KSxcblx0XHRcdFx0bG9jYWxEYXRhUHJvcGVydHlQYXRoID0gcGFyYW1ldGVyLkxvY2FsRGF0YVByb3BlcnR5Py4kUHJvcGVydHlQYXRoIHx8IFwiXCI7XG5cblx0XHRcdGlmIChwYXlsb2FkICYmIHByb3BlcnR5QW5ub3RhdGlvbnNbQW5ub3RhdGlvbnNQZXJzb25hbERhdGFQb3RlbnRpYWxseVNlbnNpdGl2ZV0pIHtcblx0XHRcdFx0cGF5bG9hZC5pc1BvdGVudGlhbGx5U2Vuc2l0aXZlID0gdHJ1ZTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gSWYgcHJvcGVydHkgaXMgdW5kZWZpbmVkLCB0aGVuIHRoZSBwcm9wZXJ0eSBjb21pbmcgZm9yIHRoZSBlbnRyeSBpc24ndCBkZWZpbmVkIGluXG5cdFx0XHQvLyB0aGUgbWV0YW1vZGVsLCB0aGVyZWZvcmUgd2UgZG9uJ3QgbmVlZCB0byBhZGQgaXQgaW4gdGhlIGluL291dCBwYXJhbWV0ZXJzXG5cdFx0XHRpZiAocHJvcGVydHkpIHtcblx0XHRcdFx0Ly8gU2VhcmNoIGZvciB0aGUgKm91dCBQYXJhbWV0ZXIgbWFwcGVkIHRvIHRoZSBsb2NhbCBwcm9wZXJ0eVxuXHRcdFx0XHRWYWx1ZUxpc3RIZWxwZXIuX2VucmljaFBhdGgoXG5cdFx0XHRcdFx0cGF0aCxcblx0XHRcdFx0XHRwcm9wZXJ0eVBhdGgsXG5cdFx0XHRcdFx0bG9jYWxEYXRhUHJvcGVydHlQYXRoLFxuXHRcdFx0XHRcdHBhcmFtZXRlcixcblx0XHRcdFx0XHRwcm9wZXJ0eU5hbWUsXG5cdFx0XHRcdFx0cHJvcGVydHlBbm5vdGF0aW9ucyxcblx0XHRcdFx0XHRwYXlsb2FkPy5leHRlcm5hbElkUGF0aFxuXHRcdFx0XHQpO1xuXG5cdFx0XHRcdGNvbnN0IHZhbHVlTGlzdFByb3BlcnR5ID0gcGFyYW1ldGVyLlZhbHVlTGlzdFByb3BlcnR5O1xuXHRcdFx0XHRWYWx1ZUxpc3RIZWxwZXIuX21lcmdlQ29sdW1uRGVmaW5pdGlvbnNGcm9tUHJvcGVydGllcyhcblx0XHRcdFx0XHRjb2x1bW5EZWZzLFxuXHRcdFx0XHRcdGFubm90YXRpb25WYWx1ZUxpc3RUeXBlLFxuXHRcdFx0XHRcdHZhbHVlTGlzdFByb3BlcnR5LFxuXHRcdFx0XHRcdHByb3BlcnR5LFxuXHRcdFx0XHRcdHByb3BlcnR5QW5ub3RhdGlvbnNcblx0XHRcdFx0KTtcblx0XHRcdH1cblxuXHRcdFx0Ly9JbiBhbmQgSW5PdXQgYW5kIE91dFxuXHRcdFx0aWYgKFxuXHRcdFx0XHQoVmFsdWVMaXN0SGVscGVyLl9wYXJhbWV0ZXJJc0EocGFyYW1ldGVyLCBbXG5cdFx0XHRcdFx0Q29tbW9uQW5ub3RhdGlvblR5cGVzLlZhbHVlTGlzdFBhcmFtZXRlckluLFxuXHRcdFx0XHRcdENvbW1vbkFubm90YXRpb25UeXBlcy5WYWx1ZUxpc3RQYXJhbWV0ZXJPdXQsXG5cdFx0XHRcdFx0Q29tbW9uQW5ub3RhdGlvblR5cGVzLlZhbHVlTGlzdFBhcmFtZXRlckluT3V0XG5cdFx0XHRcdF0pICYmXG5cdFx0XHRcdFx0bG9jYWxEYXRhUHJvcGVydHlQYXRoICE9PSBwcm9wZXJ0eU5hbWUpIHx8XG5cdFx0XHRcdFZhbHVlTGlzdEhlbHBlci5fcGFyYW1ldGVySXNBKHBhcmFtZXRlciwgW0NvbW1vbkFubm90YXRpb25UeXBlcy5WYWx1ZUxpc3RQYXJhbWV0ZXJPdXRdKVxuXHRcdFx0KSB7XG5cdFx0XHRcdGNvbnN0IHZoUGFyYW1ldGVyID0gVmFsdWVMaXN0SGVscGVyLl9nZXRWaFBhcmFtZXRlcihcblx0XHRcdFx0XHRjb25kaXRpb25Nb2RlbCxcblx0XHRcdFx0XHR2YWx1ZUhlbHAsXG5cdFx0XHRcdFx0Y29udGV4dFByZWZpeCxcblx0XHRcdFx0XHRwYXJhbWV0ZXIsXG5cdFx0XHRcdFx0bWV0YU1vZGVsLFxuXHRcdFx0XHRcdGxvY2FsRGF0YVByb3BlcnR5UGF0aFxuXHRcdFx0XHQpO1xuXHRcdFx0XHRpZiAoXG5cdFx0XHRcdFx0IWlzRm9yTXVsdGlWYWx1ZUZpZWxkIHx8XG5cdFx0XHRcdFx0KGlzRm9yTXVsdGlWYWx1ZUZpZWxkICYmIFZhbHVlTGlzdEhlbHBlci5fcGFyYW1ldGVySXNBKHBhcmFtZXRlciwgW0NvbW1vbkFubm90YXRpb25UeXBlcy5WYWx1ZUxpc3RQYXJhbWV0ZXJJbl0pKVxuXHRcdFx0XHQpIHtcblx0XHRcdFx0XHQvLyBpbiBjYXNlIG9mIE11bHRpdmFsdWUgRmllbGQgd2UgZGlzcmVnYXJkIFZhbHVlTGlzdFBhcmFtZXRlckluT3V0XG5cdFx0XHRcdFx0dmhQYXJhbWV0ZXJzLnB1c2godmhQYXJhbWV0ZXIpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdC8vQ29uc3RhbnQgYXMgSW5QYXJhbXRlciBmb3IgZmlsdGVyaW5nXG5cdFx0XHRpZiAocGFyYW1ldGVyLiRUeXBlID09PSBBbm5vdGF0aW9uVmFsdWVMaXN0UGFyYW1ldGVyQ29uc3RhbnQpIHtcblx0XHRcdFx0dmhQYXJhbWV0ZXJzLnB1c2goe1xuXHRcdFx0XHRcdHBhcm1ldGVyVHlwZTogcGFyYW1ldGVyLiRUeXBlLFxuXHRcdFx0XHRcdHNvdXJjZTogcGFyYW1ldGVyLlZhbHVlTGlzdFByb3BlcnR5LFxuXHRcdFx0XHRcdGhlbHBQYXRoOiBwYXJhbWV0ZXIuVmFsdWVMaXN0UHJvcGVydHksXG5cdFx0XHRcdFx0Y29uc3RhbnRWYWx1ZTogcGFyYW1ldGVyLkNvbnN0YW50LFxuXHRcdFx0XHRcdGluaXRpYWxWYWx1ZUlzU2lnbmlmaWNhbnQ6IEJvb2xlYW4ocGFyYW1ldGVyLkluaXRpYWxWYWx1ZUlzU2lnbmlmaWNhbnQpXG5cdFx0XHRcdH0pO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBFbnJpY2gga2V5cyB3aXRoIG91dC1wYXJhbWV0ZXJzXG5cdFx0XHRWYWx1ZUxpc3RIZWxwZXIuX2VucmljaEtleXModmhLZXlzLCBwYXJhbWV0ZXIpO1xuXHRcdH1cblx0XHRpZiAoIXBhdGgua2V5KSB7XG5cdFx0XHRwYXRoLmtleSA9IGZpcnN0S2V5O1xuXHRcdFx0Y29uc3QgcHJvcGVydHlQYXRoID0gYC8ke2Fubm90YXRpb25WYWx1ZUxpc3RUeXBlLkNvbGxlY3Rpb25QYXRofS8ke2ZpcnN0S2V5fWA7XG5cdFx0XHRjb25zdCBwcm9wZXJ0eUFubm90YXRpb25zID0gKG1ldGFNb2RlbFZILmdldE9iamVjdChgJHtwcm9wZXJ0eVBhdGh9QGApIHx8IHt9KSBhcyBBbm5vdGF0aW9uc0ZvclByb3BlcnR5O1xuXHRcdFx0Ly8gV2UgdXBkYXRlIHBhdGguZGVzY3JpcHRpb25QYXRoIGZvciB0aGUga2V5IHByb3BlcnR5XG5cdFx0XHRwYXRoLmRlc2NyaXB0aW9uUGF0aCA9IHByb3BlcnR5QW5ub3RhdGlvbnNbQW5ub3RhdGlvblRleHRdPy4kUGF0aCB8fCBcIlwiO1xuXHRcdH1cblxuXHRcdC8qIEVuc3VyZSB0aGF0IHZoS2V5cyBhcmUgcGFydCBvZiB0aGUgY29sdW1uRGVmcywgb3RoZXJ3aXNlIGl0IGlzIG5vdCBjb25zaWRlcmVkIGluICRzZWxlY3QgKEJDUCAyMjcwMTQxMTU0KSAqL1xuXHRcdGZvciAoY29uc3QgdmhLZXkgb2YgdmhLZXlzKSB7XG5cdFx0XHRpZiAoY29sdW1uTm90QWxyZWFkeURlZmluZWQoY29sdW1uRGVmcywgdmhLZXkpKSB7XG5cdFx0XHRcdGNvbnN0IGNvbHVtbkRlZjogQ29sdW1uRGVmID0ge1xuXHRcdFx0XHRcdHBhdGg6IHZoS2V5LFxuXHRcdFx0XHRcdCRUeXBlOiBtZXRhTW9kZWxWSC5nZXRPYmplY3QoYC8ke2Fubm90YXRpb25WYWx1ZUxpc3RUeXBlLkNvbGxlY3Rpb25QYXRofS8ke3BhdGgua2V5fWApPy4kVHlwZSxcblx0XHRcdFx0XHRsYWJlbDogXCJcIixcblx0XHRcdFx0XHRzb3J0YWJsZTogZmFsc2UsXG5cdFx0XHRcdFx0ZmlsdGVyYWJsZTogdW5kZWZpbmVkXG5cdFx0XHRcdH07XG5cdFx0XHRcdGNvbHVtbkRlZnMucHVzaChjb2x1bW5EZWYpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGNvbnN0IHZhbHVlbGlzdEluZm86IFZhbHVlTGlzdEluZm8gPSB7XG5cdFx0XHRrZXlQYXRoOiBwYXRoLmtleSxcblx0XHRcdGRlc2NyaXB0aW9uUGF0aDogcGF0aC5kZXNjcmlwdGlvblBhdGgsXG5cdFx0XHRmaWVsZFByb3BlcnR5UGF0aDogcGF0aC5maWVsZFByb3BlcnR5UGF0aCxcblx0XHRcdHZoS2V5czogdmhLZXlzLFxuXHRcdFx0dmhQYXJhbWV0ZXJzOiB2aFBhcmFtZXRlcnMsXG5cdFx0XHR2YWx1ZUxpc3RJbmZvOiBhbm5vdGF0aW9uVmFsdWVMaXN0VHlwZSxcblx0XHRcdGNvbHVtbkRlZnM6IGNvbHVtbkRlZnMsXG5cdFx0XHR2YWx1ZUhlbHBRdWFsaWZpZXJcblx0XHR9O1xuXHRcdHJldHVybiB2YWx1ZWxpc3RJbmZvO1xuXHR9LFxuXG5cdF9sb2dFcnJvcjogZnVuY3Rpb24gKHByb3BlcnR5UGF0aDogc3RyaW5nLCBlcnJvcj86IHVua25vd24pOiB2b2lkIHtcblx0XHRjb25zdCBzdGF0dXMgPSBlcnJvciA/IChlcnJvciBhcyBYTUxIdHRwUmVxdWVzdCkuc3RhdHVzIDogdW5kZWZpbmVkO1xuXHRcdGNvbnN0IG1lc3NhZ2UgPSBlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6IFN0cmluZyhlcnJvcik7XG5cdFx0Y29uc3QgbXNnID0gc3RhdHVzID09PSA0MDQgPyBgTWV0YWRhdGEgbm90IGZvdW5kICgke3N0YXR1c30pIGZvciB2YWx1ZSBoZWxwIG9mIHByb3BlcnR5ICR7cHJvcGVydHlQYXRofWAgOiBtZXNzYWdlO1xuXG5cdFx0TG9nLmVycm9yKG1zZyk7XG5cdH0sXG5cdC8qKlxuXHQgKiBNZXRob2QgdG8gY29tcHV0ZSB0aGUgdmFsdWUgbGlzdCBpbmZvcyBiYXNlZCBvbiB0aGUgdmFsdWUgbGlzdCBhbm5vdGF0aW9ucyBiZWZvcmUgdXNpbmcgdGhlbSBhdCB0ZW1wbGF0aW5nLlxuXHQgKiBAcGFyYW0gdmFsdWVIZWxwXG5cdCAqIEBwYXJhbSBwcm9wZXJ0eVBhdGhcblx0ICogQHBhcmFtIHBheWxvYWRcblx0ICogQHBhcmFtIG1ldGFNb2RlbFxuXHQgKiBAcmV0dXJucyBUaGUgdmFsdWUgbGlzdCBpbmZvc1xuXHQgKi9cblx0Z2V0VmFsdWVMaXN0SW5mbzogYXN5bmMgZnVuY3Rpb24gKFxuXHRcdHZhbHVlSGVscDogVmFsdWVIZWxwIHwgdW5kZWZpbmVkLFxuXHRcdHByb3BlcnR5UGF0aDogc3RyaW5nLFxuXHRcdHBheWxvYWQ6IFZhbHVlSGVscFBheWxvYWQgfCB1bmRlZmluZWQsXG5cdFx0bWV0YU1vZGVsOiBPRGF0YU1ldGFNb2RlbFxuXHQpOiBQcm9taXNlPFZhbHVlTGlzdEluZm9bXT4ge1xuXHRcdGNvbnN0IGJpbmRpbmdDb250ZXh0ID0gdmFsdWVIZWxwPy5nZXRCaW5kaW5nQ29udGV4dCgpIGFzIENvbnRleHQgfCB1bmRlZmluZWQsXG5cdFx0XHRjb25kaXRpb25Nb2RlbCA9IHBheWxvYWQ/LmNvbmRpdGlvbk1vZGVsLFxuXHRcdFx0dmFsdWVMaXN0SW5mb3M6IFZhbHVlTGlzdEluZm9bXSA9IFtdLFxuXHRcdFx0cHJvcGVydHlQYXRoUGFydHMgPSBwcm9wZXJ0eVBhdGguc3BsaXQoXCIvXCIpO1xuXHRcdHRyeSB7XG5cdFx0XHRjb25zdCB2YWx1ZUxpc3RCeVF1YWxpZmllciA9IGF3YWl0IG1ldGFNb2RlbC5yZXF1ZXN0VmFsdWVMaXN0SW5mbyhwcm9wZXJ0eVBhdGgsIHRydWUsIGJpbmRpbmdDb250ZXh0KTtcblx0XHRcdGNvbnN0IHZhbHVlSGVscFF1YWxpZmllcnMgPSBWYWx1ZUxpc3RIZWxwZXIucHV0RGVmYXVsdFF1YWxpZmllckZpcnN0KE9iamVjdC5rZXlzKHZhbHVlTGlzdEJ5UXVhbGlmaWVyKSksXG5cdFx0XHRcdHByb3BlcnR5TmFtZSA9IHByb3BlcnR5UGF0aFBhcnRzLnBvcCgpO1xuXG5cdFx0XHRjb25zdCBjb250ZXh0UHJlZml4ID1cblx0XHRcdFx0cGF5bG9hZD8udXNlTXVsdGlWYWx1ZUZpZWxkID09PSB0cnVlID8gVmFsdWVMaXN0SGVscGVyLl9nZXRDb250ZXh0UHJlZml4KGJpbmRpbmdDb250ZXh0LCBwcm9wZXJ0eVBhdGhQYXJ0cykgOiBcIlwiO1xuXG5cdFx0XHRmb3IgKGNvbnN0IHZhbHVlSGVscFF1YWxpZmllciBvZiB2YWx1ZUhlbHBRdWFsaWZpZXJzKSB7XG5cdFx0XHRcdC8vIEFkZCBjb2x1bW4gZGVmaW5pdGlvbnMgZm9yIHByb3BlcnRpZXMgZGVmaW5lZCBhcyBTZWxlY3Rpb24gZmllbGRzIG9uIHRoZSBDb2xsZWN0aW9uUGF0aCBlbnRpdHkgc2V0LlxuXHRcdFx0XHRjb25zdCBhbm5vdGF0aW9uVmFsdWVMaXN0VHlwZSA9IHZhbHVlTGlzdEJ5UXVhbGlmaWVyW3ZhbHVlSGVscFF1YWxpZmllcl07XG5cdFx0XHRcdGNvbnN0IG1ldGFNb2RlbFZIID0gYW5ub3RhdGlvblZhbHVlTGlzdFR5cGUuJG1vZGVsLmdldE1ldGFNb2RlbCgpLFxuXHRcdFx0XHRcdGVudGl0eVNldFBhdGggPSBgLyR7YW5ub3RhdGlvblZhbHVlTGlzdFR5cGUuQ29sbGVjdGlvblBhdGh9YDtcblx0XHRcdFx0Y29uc3QgZW50aXR5VHlwZSA9IGF3YWl0IFZhbHVlTGlzdEhlbHBlci5fZ2V0RW50aXR5VHlwZShtZXRhTW9kZWxWSCwgZW50aXR5U2V0UGF0aCk7XG5cdFx0XHRcdGNvbnN0IHZhbHVlTGlzdEluZm8gPSBWYWx1ZUxpc3RIZWxwZXIuX3Byb2Nlc3NQYXJhbWV0ZXJzKFxuXHRcdFx0XHRcdGFubm90YXRpb25WYWx1ZUxpc3RUeXBlLFxuXHRcdFx0XHRcdHByb3BlcnR5TmFtZSxcblx0XHRcdFx0XHRjb25kaXRpb25Nb2RlbCxcblx0XHRcdFx0XHR2YWx1ZUhlbHAsXG5cdFx0XHRcdFx0Y29udGV4dFByZWZpeCxcblx0XHRcdFx0XHRtZXRhTW9kZWwsXG5cdFx0XHRcdFx0YW5ub3RhdGlvblZhbHVlTGlzdFR5cGUuJHF1YWxpZmllciA/PyB2YWx1ZUhlbHBRdWFsaWZpZXIsIC8vIGZvciBWYWx1ZUxpc3RXaXRoRml4ZWRWYWx1ZXMsIGdldCB0aGUgcXVhbGlmaWVyIGZyb20gJHF1YWxpZmllclxuXHRcdFx0XHRcdHBheWxvYWQsXG5cdFx0XHRcdFx0ZW50aXR5VHlwZVxuXHRcdFx0XHQpO1xuXHRcdFx0XHQvKiBPbmx5IGNvbnNpc3RlbnQgdmFsdWUgaGVscCBkZWZpbml0aW9ucyBzaGFsbCBiZSBwYXJ0IG9mIHRoZSB2YWx1ZSBoZWxwICovXG5cdFx0XHRcdGlmICh2YWx1ZUxpc3RJbmZvKSB7XG5cdFx0XHRcdFx0dmFsdWVMaXN0SW5mb3MucHVzaCh2YWx1ZUxpc3RJbmZvKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0gY2F0Y2ggKGVycikge1xuXHRcdFx0dGhpcy5fbG9nRXJyb3IocHJvcGVydHlQYXRoLCBlcnIpO1xuXG5cdFx0XHRWYWx1ZUxpc3RIZWxwZXIuZGVzdHJveVZIQ29udGVudCh2YWx1ZUhlbHApO1xuXHRcdH1cblx0XHRyZXR1cm4gdmFsdWVMaXN0SW5mb3M7XG5cdH0sXG5cblx0QUxMRlJBR01FTlRTOiBbXSBhcyB7XG5cdFx0cGF0aDogc3RyaW5nO1xuXHRcdGZyYWdtZW50TmFtZTogc3RyaW5nO1xuXHRcdGZyYWdtZW50OiB1bmtub3duO1xuXHR9W10sXG5cdGxvZ0ZyYWdtZW50OiB1bmRlZmluZWQgYXMgTG9nRnJhZ21lbnRNZXRob2QgfCB1bmRlZmluZWQsXG5cblx0X2xvZ1RlbXBsYXRlZEZyYWdtZW50czogZnVuY3Rpb24gKHByb3BlcnR5UGF0aDogc3RyaW5nLCBmcmFnbWVudE5hbWU6IHN0cmluZywgZnJhZ21lbnREZWZpbml0aW9uOiB1bmtub3duKTogdm9pZCB7XG5cdFx0Y29uc3QgbG9nSW5mbyA9IHtcblx0XHRcdHBhdGg6IHByb3BlcnR5UGF0aCxcblx0XHRcdGZyYWdtZW50TmFtZTogZnJhZ21lbnROYW1lLFxuXHRcdFx0ZnJhZ21lbnQ6IGZyYWdtZW50RGVmaW5pdGlvblxuXHRcdH07XG5cdFx0aWYgKExvZy5nZXRMZXZlbCgpID09PSBMb2cuTGV2ZWwuREVCVUcpIHtcblx0XHRcdC8vSW4gZGVidWcgbW9kZSB3ZSBsb2cgYWxsIGdlbmVyYXRlZCBmcmFnbWVudHNcblx0XHRcdFZhbHVlTGlzdEhlbHBlci5BTExGUkFHTUVOVFMgPSBWYWx1ZUxpc3RIZWxwZXIuQUxMRlJBR01FTlRTIHx8IFtdO1xuXHRcdFx0VmFsdWVMaXN0SGVscGVyLkFMTEZSQUdNRU5UUy5wdXNoKGxvZ0luZm8pO1xuXHRcdH1cblx0XHRpZiAoVmFsdWVMaXN0SGVscGVyLmxvZ0ZyYWdtZW50KSB7XG5cdFx0XHQvL09uZSBUb29sIFN1YnNjcmliZXIgYWxsb3dlZFxuXHRcdFx0c2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdFZhbHVlTGlzdEhlbHBlci5sb2dGcmFnbWVudD8uKGxvZ0luZm8pO1xuXHRcdFx0fSwgMCk7XG5cdFx0fVxuXHR9LFxuXG5cdF90ZW1wbGF0ZUZyYWdtZW50OiBhc3luYyBmdW5jdGlvbiA8VCBleHRlbmRzIFRhYmxlIHwgTWRjSW5uZXJUYWJsZSB8IE1kY0ZpbHRlckJhciB8IFZhbHVlSGVscD4oXG5cdFx0ZnJhZ21lbnROYW1lOiBzdHJpbmcsXG5cdFx0dmFsdWVMaXN0SW5mbzogVmFsdWVMaXN0SW5mbyxcblx0XHRzb3VyY2VNb2RlbDogSlNPTk1vZGVsLFxuXHRcdHByb3BlcnR5UGF0aDogc3RyaW5nLFxuXHRcdHZhbHVlSGVscDogVmFsdWVIZWxwXG5cdCk6IFByb21pc2U8VD4ge1xuXHRcdGNvbnN0IGNvbnRhaW5pbmdWaWV3ID0gQ29tbW9uVXRpbHMuZ2V0VGFyZ2V0Vmlldyh2YWx1ZUhlbHApO1xuXHRcdGNvbnN0IGFwcENvbXBvbmVudCA9IENvbW1vblV0aWxzLmdldEFwcENvbXBvbmVudChDb21tb25VdGlscy5nZXRUYXJnZXRWaWV3KHZhbHVlSGVscCkpO1xuXG5cdFx0Y29uc3QgbG9jYWxWYWx1ZUxpc3RJbmZvID0gdmFsdWVMaXN0SW5mby52YWx1ZUxpc3RJbmZvLFxuXHRcdFx0dmFsdWVMaXN0TW9kZWwgPSBuZXcgSlNPTk1vZGVsKGxvY2FsVmFsdWVMaXN0SW5mbyksXG5cdFx0XHR2YWx1ZUxpc3RTZXJ2aWNlTWV0YU1vZGVsID0gbG9jYWxWYWx1ZUxpc3RJbmZvLiRtb2RlbC5nZXRNZXRhTW9kZWwoKSxcblx0XHRcdHZpZXdEYXRhID0gbmV3IEpTT05Nb2RlbCh7XG5cdFx0XHRcdGNvbnZlcnRlclR5cGU6IFwiTGlzdFJlcG9ydFwiLFxuXHRcdFx0XHRjb2x1bW5zOiB2YWx1ZUxpc3RJbmZvLmNvbHVtbkRlZnMgfHwgbnVsbFxuXHRcdFx0fSk7XG5cblx0XHRjb25zdCBmcmFnbWVudERlZmluaXRpb24gPSBhd2FpdCBYTUxQcmVwcm9jZXNzb3IucHJvY2Vzcyhcblx0XHRcdFhNTFRlbXBsYXRlUHJvY2Vzc29yLmxvYWRUZW1wbGF0ZShmcmFnbWVudE5hbWUsIFwiZnJhZ21lbnRcIiksXG5cdFx0XHR7IG5hbWU6IGZyYWdtZW50TmFtZSB9LFxuXHRcdFx0e1xuXHRcdFx0XHRiaW5kaW5nQ29udGV4dHM6IHtcblx0XHRcdFx0XHR2YWx1ZUxpc3Q6IHZhbHVlTGlzdE1vZGVsLmNyZWF0ZUJpbmRpbmdDb250ZXh0KFwiL1wiKSxcblx0XHRcdFx0XHRjb250ZXh0UGF0aDogdmFsdWVMaXN0U2VydmljZU1ldGFNb2RlbC5jcmVhdGVCaW5kaW5nQ29udGV4dChgLyR7bG9jYWxWYWx1ZUxpc3RJbmZvLkNvbGxlY3Rpb25QYXRofS9gKSxcblx0XHRcdFx0XHRzb3VyY2U6IHNvdXJjZU1vZGVsLmNyZWF0ZUJpbmRpbmdDb250ZXh0KFwiL1wiKVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRtb2RlbHM6IHtcblx0XHRcdFx0XHR2YWx1ZUxpc3Q6IHZhbHVlTGlzdE1vZGVsLFxuXHRcdFx0XHRcdGNvbnRleHRQYXRoOiB2YWx1ZUxpc3RTZXJ2aWNlTWV0YU1vZGVsLFxuXHRcdFx0XHRcdHNvdXJjZTogc291cmNlTW9kZWwsXG5cdFx0XHRcdFx0bWV0YU1vZGVsOiB2YWx1ZUxpc3RTZXJ2aWNlTWV0YU1vZGVsLFxuXHRcdFx0XHRcdHZpZXdEYXRhOiB2aWV3RGF0YVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRhcHBDb21wb25lbnRcblx0XHRcdH1cblx0XHQpO1xuXHRcdFZhbHVlTGlzdEhlbHBlci5fbG9nVGVtcGxhdGVkRnJhZ21lbnRzKHByb3BlcnR5UGF0aCwgZnJhZ21lbnROYW1lLCBmcmFnbWVudERlZmluaXRpb24pO1xuXHRcdGNvbnN0IHRlbXBsYXRlQ29tcG9uZW50ID0gY29udGFpbmluZ1ZpZXcuZ2V0Q29udHJvbGxlcigpPy5nZXRPd25lckNvbXBvbmVudCgpO1xuXHRcdGlmICh0ZW1wbGF0ZUNvbXBvbmVudCkge1xuXHRcdFx0cmV0dXJuIHRlbXBsYXRlQ29tcG9uZW50LnJ1bkFzT3duZXIoYXN5bmMgKCkgPT4ge1xuXHRcdFx0XHRyZXR1cm4gKGF3YWl0IEZyYWdtZW50LmxvYWQoe1xuXHRcdFx0XHRcdGRlZmluaXRpb246IGZyYWdtZW50RGVmaW5pdGlvbixcblx0XHRcdFx0XHRjb250cm9sbGVyOiBjb250YWluaW5nVmlldy5nZXRDb250cm9sbGVyKClcblx0XHRcdFx0fSkpIGFzIFQ7XG5cdFx0XHR9KTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cmV0dXJuIChhd2FpdCBGcmFnbWVudC5sb2FkKHtcblx0XHRcdFx0ZGVmaW5pdGlvbjogZnJhZ21lbnREZWZpbml0aW9uLFxuXHRcdFx0XHRjb250cm9sbGVyOiBjb250YWluaW5nVmlldy5nZXRDb250cm9sbGVyKClcblx0XHRcdH0pKSBhcyBUO1xuXHRcdH1cblx0fSxcblxuXHRfZ2V0Q29udGVudElkOiBmdW5jdGlvbiAodmFsdWVIZWxwSWQ6IHN0cmluZywgdmFsdWVIZWxwUXVhbGlmaWVyOiBzdHJpbmcsIGlzVHlwZWFoZWFkOiBib29sZWFuKTogc3RyaW5nIHtcblx0XHRjb25zdCBjb250ZW50VHlwZSA9IGlzVHlwZWFoZWFkID8gXCJQb3BvdmVyXCIgOiBcIkRpYWxvZ1wiO1xuXG5cdFx0cmV0dXJuIGAke3ZhbHVlSGVscElkfTo6JHtjb250ZW50VHlwZX06OnF1YWxpZmllcjo6JHt2YWx1ZUhlbHBRdWFsaWZpZXJ9YDtcblx0fSxcblxuXHRfYWRkSW5PdXRQYXJhbWV0ZXJzVG9QYXlsb2FkOiBmdW5jdGlvbiAocGF5bG9hZDogVmFsdWVIZWxwUGF5bG9hZCwgdmFsdWVMaXN0SW5mbzogVmFsdWVMaXN0SW5mbyk6IHZvaWQge1xuXHRcdGNvbnN0IHZhbHVlSGVscFF1YWxpZmllciA9IHZhbHVlTGlzdEluZm8udmFsdWVIZWxwUXVhbGlmaWVyO1xuXG5cdFx0aWYgKCFwYXlsb2FkLnF1YWxpZmllcnMpIHtcblx0XHRcdHBheWxvYWQucXVhbGlmaWVycyA9IHt9O1xuXHRcdH1cblxuXHRcdGlmICghcGF5bG9hZC5xdWFsaWZpZXJzW3ZhbHVlSGVscFF1YWxpZmllcl0pIHtcblx0XHRcdGNvbnN0IHZoUHJvcGVydGllcyA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuXHRcdFx0dmFsdWVMaXN0SW5mby5jb2x1bW5EZWZzLmZvckVhY2goKGNvbHVtbikgPT4ge1xuXHRcdFx0XHRpZiAoIWNvbHVtbi5wYXRoLmluY2x1ZGVzKFwiKlwiKSkge1xuXHRcdFx0XHRcdC8vIEluIGNhc2Ugb2YgMS4ubiB0aGUgY29uZGl0aW9uIHBhdGggaW5jbHVkZXMgYSAqIHNvIHdlIGhhdmUgdG8gcmVtb3ZlIHRoaXNcblx0XHRcdFx0XHR2aFByb3BlcnRpZXMuYWRkKGNvbHVtbi5wYXRoKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAoY29sdW1uLnRleHRQYXRoKSB7XG5cdFx0XHRcdFx0dmhQcm9wZXJ0aWVzLmFkZChjb2x1bW4udGV4dFBhdGgpO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHRcdHBheWxvYWQucXVhbGlmaWVyc1t2YWx1ZUhlbHBRdWFsaWZpZXJdID0ge1xuXHRcdFx0XHR2aEtleXM6IHZhbHVlTGlzdEluZm8udmhLZXlzLFxuXHRcdFx0XHR2aFBhcmFtZXRlcnM6IHZhbHVlTGlzdEluZm8udmhQYXJhbWV0ZXJzLFxuXHRcdFx0XHR2aFByb3BlcnRpZXM6IEFycmF5LmZyb20odmhQcm9wZXJ0aWVzKVxuXHRcdFx0fTtcblx0XHR9XG5cdH0sXG5cblx0X2dldFZhbHVlSGVscENvbHVtbkRpc3BsYXlGb3JtYXQ6IGZ1bmN0aW9uIChcblx0XHRwcm9wZXJ0eUFubm90YXRpb25zOiBBbm5vdGF0aW9uc0ZvclByb3BlcnR5LFxuXHRcdGlzVmFsdWVIZWxwV2l0aEZpeGVkVmFsdWVzOiBib29sZWFuXG5cdCk6IERpc3BsYXlGb3JtYXQge1xuXHRcdGNvbnN0IGRpc3BsYXlNb2RlID0gQ29tbW9uVXRpbHMuY29tcHV0ZURpc3BsYXlNb2RlKHByb3BlcnR5QW5ub3RhdGlvbnMsIHVuZGVmaW5lZCksXG5cdFx0XHR0ZXh0QW5ub3RhdGlvbiA9IHByb3BlcnR5QW5ub3RhdGlvbnMgJiYgcHJvcGVydHlBbm5vdGF0aW9uc1tBbm5vdGF0aW9uVGV4dF0sXG5cdFx0XHR0ZXh0QXJyYW5nZW1lbnRBbm5vdGF0aW9uID0gdGV4dEFubm90YXRpb24gJiYgcHJvcGVydHlBbm5vdGF0aW9uc1tBbm5vdGF0aW9uVGV4dFVJVGV4dEFycmFuZ2VtZW50XTtcblxuXHRcdGlmIChpc1ZhbHVlSGVscFdpdGhGaXhlZFZhbHVlcykge1xuXHRcdFx0cmV0dXJuIHRleHRBbm5vdGF0aW9uICYmIHR5cGVvZiB0ZXh0QW5ub3RhdGlvbiAhPT0gXCJzdHJpbmdcIiAmJiB0ZXh0QW5ub3RhdGlvbi4kUGF0aCA/IGRpc3BsYXlNb2RlIDogXCJWYWx1ZVwiO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHQvLyBPbmx5IGV4cGxpY2l0IGRlZmluZWQgVGV4dEFycmFuZ2VtZW50cyBpbiBhIFZhbHVlIEhlbHAgd2l0aCBEaWFsb2cgYXJlIGNvbnNpZGVyZWRcblx0XHRcdHJldHVybiB0ZXh0QXJyYW5nZW1lbnRBbm5vdGF0aW9uID8gZGlzcGxheU1vZGUgOiBcIlZhbHVlXCI7XG5cdFx0fVxuXHR9LFxuXG5cdF9nZXRXaWR0aEluUmVtOiBmdW5jdGlvbiAoY29udHJvbDogQ29udHJvbCwgaXNVbml0VmFsdWVIZWxwOiBib29sZWFuKTogbnVtYmVyIHtcblx0XHRsZXQgd2lkdGggPSBjb250cm9sLiQoKS53aWR0aCgpOyAvLyBKUXVlcnlcblx0XHRpZiAoaXNVbml0VmFsdWVIZWxwICYmIHdpZHRoKSB7XG5cdFx0XHR3aWR0aCA9IDAuMyAqIHdpZHRoO1xuXHRcdH1cblx0XHRjb25zdCBmbG9hdFdpZHRoID0gd2lkdGggPyBwYXJzZUZsb2F0KFN0cmluZyhSZW0uZnJvbVB4KHdpZHRoKSkpIDogMDtcblxuXHRcdHJldHVybiBpc05hTihmbG9hdFdpZHRoKSA/IDAgOiBmbG9hdFdpZHRoO1xuXHR9LFxuXG5cdF9nZXRUYWJsZVdpZHRoOiBmdW5jdGlvbiAodGFibGU6IFRhYmxlLCBtaW5XaWR0aDogbnVtYmVyLCBpc011bHRpU2VsZWN0OiBib29sZWFuKTogc3RyaW5nIHtcblx0XHRsZXQgd2lkdGg6IHN0cmluZztcblx0XHRjb25zdCBjb2x1bW5zID0gdGFibGUuZ2V0Q29sdW1ucygpLFxuXHRcdFx0dmlzaWJsZUNvbHVtbnMgPVxuXHRcdFx0XHQoY29sdW1ucyAmJlxuXHRcdFx0XHRcdGNvbHVtbnMuZmlsdGVyKGZ1bmN0aW9uIChjb2x1bW4pIHtcblx0XHRcdFx0XHRcdHJldHVybiBjb2x1bW4gJiYgY29sdW1uLmdldFZpc2libGUgJiYgY29sdW1uLmdldFZpc2libGUoKTtcblx0XHRcdFx0XHR9KSkgfHxcblx0XHRcdFx0W10sXG5cdFx0XHQvLyB3ZSBhZGQgMWVtIGZvciBldmVyeSBjb2x1bW4gYW5kIDIuNWVtIGZvciBhIG11bHRpc2VsZWN0IGNoZWNrYm94XG5cdFx0XHRpbml0aWFsU3VtID0gdmlzaWJsZUNvbHVtbnMubGVuZ3RoICsgKGlzTXVsdGlTZWxlY3QgPyAyLjUgOiAwKSxcblx0XHRcdHN1bVdpZHRoID0gdmlzaWJsZUNvbHVtbnMucmVkdWNlKGZ1bmN0aW9uIChzdW0sIGNvbHVtbikge1xuXHRcdFx0XHR3aWR0aCA9IGNvbHVtbi5nZXRXaWR0aCgpO1xuXHRcdFx0XHRpZiAod2lkdGggJiYgd2lkdGguZW5kc1dpdGgoXCJweFwiKSkge1xuXHRcdFx0XHRcdHdpZHRoID0gU3RyaW5nKFJlbS5mcm9tUHgod2lkdGgpKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRjb25zdCBmbG9hdFdpZHRoID0gcGFyc2VGbG9hdCh3aWR0aCk7XG5cblx0XHRcdFx0cmV0dXJuIHN1bSArIChpc05hTihmbG9hdFdpZHRoKSA/IDkgOiBmbG9hdFdpZHRoKTtcblx0XHRcdH0sIGluaXRpYWxTdW0pO1xuXHRcdHJldHVybiBgJHtNYXRoLm1heChzdW1XaWR0aCwgbWluV2lkdGgpfWVtYDtcblx0fSxcblxuXHQvKipcblx0ICogQ29uc3RydWN0cyBKU09OIE1vZGVsIHdpdGggdGhlIHByb3BlcnRpZXMgZm9yIHRoZSB2YWx1ZSBoZWxwIGRpYWxvZyBmcmFnbWVudCB3aGVyZSBpdCBpcyB1c2VkIGFzIGEgc291cmNlIG9iamVjdC5cblx0ICogQHBhcmFtIHZhbHVlTGlzdEluZm8gVmFsdWUgbGlzdCBpbmZvXG5cdCAqIEBwYXJhbSBwcm9wZXJ0eVBhdGggVGhlIHByb3BlcnR5IHBhdGhcblx0ICogQHBhcmFtIGNvbnRlbnQgQ29udGVudCBmb3Igd2hpY2ggdGhpcyBmcmFnbWVudCB3aWxsIGJlIHNldFxuXHQgKiBAcGFyYW0gcGF5bG9hZCBWYWx1ZSBoZWxwIHBheWxvYWRcblx0ICogQHJldHVybnMgSlNPTk1vZGVsXG5cdCAqIEBwcml2YXRlXG5cdCAqL1xuXHRfZ2V0SlNPTk1vZGVsRm9yRGlhbG9nOiBmdW5jdGlvbiAoXG5cdFx0dmFsdWVMaXN0SW5mbzogVmFsdWVMaXN0SW5mbyxcblx0XHRwcm9wZXJ0eVBhdGg6IHN0cmluZyxcblx0XHRjb250ZW50OiBNRENUYWJsZSxcblx0XHRwYXlsb2FkOiBWYWx1ZUhlbHBQYXlsb2FkXG5cdCk6IEpTT05Nb2RlbCB7XG5cdFx0Y29uc3QgaXNEcm9wRG93bkxpc3RlID0gZmFsc2UsXG5cdFx0XHRpc0RpYWxvZ1RhYmxlID0gdHJ1ZSxcblx0XHRcdGNvbHVtbkluZm8gPSBWYWx1ZUxpc3RIZWxwZXIuZ2V0Q29sdW1uVmlzaWJpbGl0eUluZm8odmFsdWVMaXN0SW5mby52YWx1ZUxpc3RJbmZvLCBwcm9wZXJ0eVBhdGgsIGlzRHJvcERvd25MaXN0ZSwgaXNEaWFsb2dUYWJsZSk7XG5cblx0XHRyZXR1cm4gbmV3IEpTT05Nb2RlbCh7XG5cdFx0XHRpZDogY29udGVudC5nZXRJZCgpLFxuXHRcdFx0Z3JvdXBJZDogcGF5bG9hZC5yZXF1ZXN0R3JvdXBJZCxcblx0XHRcdGJTdWdnZXN0aW9uOiBmYWxzZSxcblx0XHRcdGNvbHVtbkluZm86IGNvbHVtbkluZm8sXG5cdFx0XHR2YWx1ZUhlbHBXaXRoRml4ZWRWYWx1ZXM6IGlzRHJvcERvd25MaXN0ZVxuXHRcdH0pO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBDb25zdHJ1Y3RzIEpTT04gTW9kZWwgd2l0aCB0aGUgcHJvcGVydGllcyBmb3IgdGhlIGRlZmluZSBjb25kaXRpb24gdmFsdWUgaGVscCBmcmFnbWVudCBpbiB0aGUgdmFsdWUgaGVscCBkaWFsb2cgd2hlcmUgaXQgaXMgdXNlZCBhcyBhIHNvdXJjZSBvYmplY3QuXG5cdCAqIEBwYXJhbSB2YWx1ZUxpc3RJbmZvIFZhbHVlIGxpc3QgaW5mb1xuXHQgKiBAcGFyYW0gcHJvcGVydHlQYXRoIFRoZSBwcm9wZXJ0eSBwYXRoXG5cdCAqIEBwYXJhbSBjb250ZW50IENvbnRlbnQgZm9yIHdoaWNoIHRoaXMgZnJhZ21lbnQgd2lsbCBiZSBzZXRcblx0ICogQHBhcmFtIHBheWxvYWQgVmFsdWUgaGVscCBwYXlsb2FkXG5cdCAqIEBwYXJhbSBjYXNlU2Vuc2l0aXZlXG5cdCAqIEByZXR1cm5zIEpTT05Nb2RlbFxuXHQgKiBAcHJpdmF0ZVxuXHQgKi9cblx0X2dldEpTT05Nb2RlbEZvckNvbmRpdGlvbjogZnVuY3Rpb24gKFxuXHRcdHZhbHVlTGlzdEluZm86IFZhbHVlTGlzdEluZm8sXG5cdFx0cHJvcGVydHlQYXRoOiBzdHJpbmcsXG5cdFx0Y29udGVudDogTURDVGFibGUsXG5cdFx0cGF5bG9hZDogVmFsdWVIZWxwUGF5bG9hZCxcblx0XHRjYXNlU2Vuc2l0aXZlOiBib29sZWFuXG5cdCk6IEpTT05Nb2RlbCB7XG5cdFx0Y29uc3QgaXNEcm9wRG93bkxpc3RlID0gZmFsc2UsXG5cdFx0XHRpc0RpYWxvZ1RhYmxlID0gZmFsc2UsXG5cdFx0XHRjb2x1bW5JbmZvID0gVmFsdWVMaXN0SGVscGVyLmdldENvbHVtblZpc2liaWxpdHlJbmZvKHZhbHVlTGlzdEluZm8udmFsdWVMaXN0SW5mbywgcHJvcGVydHlQYXRoLCBpc0Ryb3BEb3duTGlzdGUsIGlzRGlhbG9nVGFibGUpO1xuXG5cdFx0cmV0dXJuIG5ldyBKU09OTW9kZWwoe1xuXHRcdFx0aWQ6IGNvbnRlbnQuZ2V0SWQoKSxcblx0XHRcdGdyb3VwSWQ6IHBheWxvYWQucmVxdWVzdEdyb3VwSWQgfHwgdW5kZWZpbmVkLFxuXHRcdFx0YlN1Z2dlc3Rpb246IHRydWUsXG5cdFx0XHRjb2x1bW5JbmZvOiBjb2x1bW5JbmZvLFxuXHRcdFx0dmFsdWVIZWxwV2l0aEZpeGVkVmFsdWVzOiBpc0Ryb3BEb3duTGlzdGUsXG5cdFx0XHRkZXNjcmlwdGlvblBhdGg6IHZhbHVlTGlzdEluZm8uZGVzY3JpcHRpb25QYXRoLFxuXHRcdFx0a2V5UGF0aDogdmFsdWVMaXN0SW5mby5rZXlQYXRoLFxuXHRcdFx0cHJvcGVydHlQYXRoLFxuXHRcdFx0Y2FzZVNlbnNpdGl2ZVxuXHRcdH0pO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBDb25zdHJ1Y3RzIEpTT04gTW9kZWwgd2l0aCB0aGUgcHJvcGVydGllcyBmb3IgdGhlIHZhbHVlIGhlbHAgdHlwZWFoZWFkIGZyYWdtZW50IHdoZXJlIGl0IGlzIHVzZWQgYXMgYSBzb3VyY2Ugb2JqZWN0LlxuXHQgKiBAcGFyYW0gdmFsdWVMaXN0SW5mbyBWYWx1ZSBsaXN0IGluZm9cblx0ICogQHBhcmFtIHByb3BlcnR5UGF0aCBUaGUgcHJvcGVydHkgcGF0aFxuXHQgKiBAcGFyYW0gY29udGVudCBDb250ZW50IGZvciB3aGljaCB0aGlzIGZyYWdtZW50IHdpbGwgYmUgc2V0XG5cdCAqIEBwYXJhbSBwYXlsb2FkIFZhbHVlIGhlbHAgcGF5bG9hZFxuXHQgKiBAcGFyYW0gdmFsdWVIZWxwV2l0aEZpeGVkVmFsdWVzIFNwZWNpZnkgaXMgaXQgZHJvcGRvd25saXN0IG9yIG5vdFxuXHQgKiBAcmV0dXJucyBKU09OTW9kZWxcblx0ICogQHByaXZhdGVcblx0ICovXG5cdF9nZXRKU09OTW9kZWxGb3JUeXBlYWhlYWQ6IGZ1bmN0aW9uIChcblx0XHR2YWx1ZUxpc3RJbmZvOiBWYWx1ZUxpc3RJbmZvLFxuXHRcdHByb3BlcnR5UGF0aDogc3RyaW5nLFxuXHRcdGNvbnRlbnQ6IE1UYWJsZSxcblx0XHRwYXlsb2FkOiBWYWx1ZUhlbHBQYXlsb2FkLFxuXHRcdHZhbHVlSGVscFdpdGhGaXhlZFZhbHVlczogYm9vbGVhblxuXHQpOiBKU09OTW9kZWwge1xuXHRcdGNvbnN0IGlzRGlhbG9nVGFibGUgPSBmYWxzZSxcblx0XHRcdGNvbnRlbnRJZCA9IGNvbnRlbnQuZ2V0SWQoKSxcblx0XHRcdGNvbHVtbkluZm8gPSBWYWx1ZUxpc3RIZWxwZXIuZ2V0Q29sdW1uVmlzaWJpbGl0eUluZm8oXG5cdFx0XHRcdHZhbHVlTGlzdEluZm8udmFsdWVMaXN0SW5mbyxcblx0XHRcdFx0cHJvcGVydHlQYXRoLFxuXHRcdFx0XHR2YWx1ZUhlbHBXaXRoRml4ZWRWYWx1ZXMsXG5cdFx0XHRcdGlzRGlhbG9nVGFibGVcblx0XHRcdCk7XG5cblx0XHRyZXR1cm4gbmV3IEpTT05Nb2RlbCh7XG5cdFx0XHRpZDogY29udGVudElkLFxuXHRcdFx0Z3JvdXBJZDogcGF5bG9hZC5yZXF1ZXN0R3JvdXBJZCB8fCB1bmRlZmluZWQsXG5cdFx0XHRiU3VnZ2VzdGlvbjogdHJ1ZSxcblx0XHRcdHByb3BlcnR5UGF0aDogcHJvcGVydHlQYXRoLFxuXHRcdFx0Y29sdW1uSW5mbzogY29sdW1uSW5mbyxcblx0XHRcdHZhbHVlSGVscFdpdGhGaXhlZFZhbHVlczogdmFsdWVIZWxwV2l0aEZpeGVkVmFsdWVzXG5cdFx0fSk7XG5cdH0sXG5cblx0X2NyZWF0ZVZhbHVlSGVscFR5cGVhaGVhZDogYXN5bmMgZnVuY3Rpb24gKFxuXHRcdHByb3BlcnR5UGF0aDogc3RyaW5nLFxuXHRcdHZhbHVlSGVscDogVmFsdWVIZWxwLFxuXHRcdGNvbnRlbnQ6IE1UYWJsZSxcblx0XHR2YWx1ZUxpc3RJbmZvOiBWYWx1ZUxpc3RJbmZvLFxuXHRcdHBheWxvYWQ6IFZhbHVlSGVscFBheWxvYWQsXG5cdFx0bWV0YU1vZGVsOiBPRGF0YU1ldGFNb2RlbFxuXHQpOiBQcm9taXNlPHZvaWQ+IHtcblx0XHRjb25zdCBwcm9wZXJ0eUFubm90YXRpb25zID0gbWV0YU1vZGVsLmdldE9iamVjdChgJHtwcm9wZXJ0eVBhdGh9QGApIGFzIEFubm90YXRpb25zRm9yUHJvcGVydHksXG5cdFx0XHR2YWx1ZUhlbHBXaXRoRml4ZWRWYWx1ZXMgPSBwcm9wZXJ0eUFubm90YXRpb25zW0Fubm90YXRpb25WYWx1ZUxpc3RXaXRoRml4ZWRWYWx1ZXNdID8/IGZhbHNlLFxuXHRcdFx0c291cmNlTW9kZWwgPSB0aGlzLl9nZXRKU09OTW9kZWxGb3JUeXBlYWhlYWQodmFsdWVMaXN0SW5mbywgcHJvcGVydHlQYXRoLCBjb250ZW50LCBwYXlsb2FkLCB2YWx1ZUhlbHBXaXRoRml4ZWRWYWx1ZXMpO1xuXG5cdFx0Y29udGVudC5zZXRLZXlQYXRoKHZhbHVlTGlzdEluZm8ua2V5UGF0aCk7XG5cdFx0Y29udGVudC5zZXREZXNjcmlwdGlvblBhdGgodmFsdWVMaXN0SW5mby5kZXNjcmlwdGlvblBhdGgpO1xuXHRcdHBheWxvYWQuaXNWYWx1ZUxpc3RXaXRoRml4ZWRWYWx1ZXMgPSB2YWx1ZUhlbHBXaXRoRml4ZWRWYWx1ZXM7XG5cdFx0cGF5bG9hZC5pc1BvdGVudGlhbGx5U2Vuc2l0aXZlID0gcGF5bG9hZC5pc1BvdGVudGlhbGx5U2Vuc2l0aXZlID8/IHByb3BlcnR5QW5ub3RhdGlvbnNbQW5ub3RhdGlvbnNQZXJzb25hbERhdGFQb3RlbnRpYWxseVNlbnNpdGl2ZV07XG5cdFx0cGF5bG9hZC5oaXN0b3J5ID0ge1xuXHRcdFx0ZW5hYmxlZDogdGhpcy5jaGVja0hpc3RvcnlFbmFibGVkKHZhbHVlSGVscCwgcGF5bG9hZClcblx0XHR9O1xuXG5cdFx0Y29uc3QgY29sbGVjdGlvbkFubm90YXRpb25zID1cblx0XHRcdHZhbHVlTGlzdEluZm8udmFsdWVMaXN0SW5mby4kbW9kZWwuZ2V0TWV0YU1vZGVsKCkuZ2V0T2JqZWN0KGAvJHt2YWx1ZUxpc3RJbmZvLnZhbHVlTGlzdEluZm8uQ29sbGVjdGlvblBhdGh9QGApIHx8IHt9O1xuXG5cdFx0Y29udGVudC5kYXRhKFwic2VhcmNoU3VwcG9ydGVkXCIsIFZhbHVlTGlzdEhlbHBlci5lbnRpdHlJc1NlYXJjaGFibGUocHJvcGVydHlBbm5vdGF0aW9ucywgY29sbGVjdGlvbkFubm90YXRpb25zKSA/IHRydWUgOiBmYWxzZSk7XG5cblx0XHRjb25zdCB0YWJsZSA9IGF3YWl0IFZhbHVlTGlzdEhlbHBlci5fdGVtcGxhdGVGcmFnbWVudDxUYWJsZT4oXG5cdFx0XHRcInNhcC5mZS5tYWNyb3MuaW50ZXJuYWwudmFsdWVoZWxwLlZhbHVlTGlzdFRhYmxlXCIsXG5cdFx0XHR2YWx1ZUxpc3RJbmZvLFxuXHRcdFx0c291cmNlTW9kZWwsXG5cdFx0XHRwcm9wZXJ0eVBhdGgsXG5cdFx0XHR2YWx1ZUhlbHBcblx0XHQpO1xuXG5cdFx0dGFibGUuc2V0TW9kZWwodmFsdWVMaXN0SW5mby52YWx1ZUxpc3RJbmZvLiRtb2RlbCk7XG5cblx0XHRMb2cuaW5mbyhgVmFsdWUgTGlzdC0gc3VnZ2VzdCBUYWJsZSBYTUwgY29udGVudCBjcmVhdGVkIFske3Byb3BlcnR5UGF0aH1dYCwgdGFibGUuZ2V0TWV0YWRhdGEoKS5nZXROYW1lKCksIFwiTURDIFRlbXBsYXRpbmdcIik7XG5cblx0XHRjb250ZW50LnNldFRhYmxlKHRhYmxlKTtcblxuXHRcdGNvbnN0IGZpZWxkID0gdmFsdWVIZWxwLmdldENvbnRyb2woKTtcblxuXHRcdGlmIChcblx0XHRcdGZpZWxkICE9PSB1bmRlZmluZWQgJiZcblx0XHRcdChmaWVsZC5pc0E8RmlsdGVyRmllbGQ+KFwic2FwLnVpLm1kYy5GaWx0ZXJGaWVsZFwiKSB8fFxuXHRcdFx0XHRmaWVsZC5pc0E8RmllbGQ+KFwic2FwLnVpLm1kYy5GaWVsZFwiKSB8fFxuXHRcdFx0XHQoZmllbGQuaXNBPEZpZWxkPihcInNhcC51aS5tZGMuRmllbGRcIikgJiYgdmFsdWVIZWxwV2l0aEZpeGVkVmFsdWVzKSB8fFxuXHRcdFx0XHRmaWVsZC5pc0E8TXVsdGlWYWx1ZUZpZWxkPihcInNhcC51aS5tZGMuTXVsdGlWYWx1ZUZpZWxkXCIpKVxuXHRcdCkge1xuXHRcdFx0Ly9DYW4gdGhlIGZpbHRlcmZpZWxkIGJlIHNvbWV0aGluZyBlbHNlIHRoYXQgd2UgbmVlZCB0aGUgLmlzQSgpIGNoZWNrP1xuXHRcdFx0Y29uc3QgdGFibGVNb2RlID1cblx0XHRcdFx0dmFsdWVIZWxwV2l0aEZpeGVkVmFsdWVzICYmIChmaWVsZCBhcyBGaWVsZEJhc2UpLmdldE1heENvbmRpdGlvbnMoKSAhPT0gMSA/IFwiTXVsdGlTZWxlY3RcIiA6IFwiU2luZ2xlU2VsZWN0TWFzdGVyXCI7XG5cdFx0XHR0YWJsZS5zZXRNb2RlKHRhYmxlTW9kZSk7XG5cblx0XHRcdHRhYmxlLmFkZEV2ZW50RGVsZWdhdGUoe1xuXHRcdFx0XHRvbkFmdGVyUmVuZGVyaW5nOiBmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdFx0UmVzaXplSGFuZGxlci5yZWdpc3Rlcih0YWJsZSwgZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRcdFx0VmFsdWVMaXN0SGVscGVyLl9zZXRUYWJsZVdpZHRoKHRhYmxlLCBmaWVsZCwgdGFibGVNb2RlLCBwYXlsb2FkLmlzVW5pdFZhbHVlSGVscCk7XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdFx0dGhpcy5fc2V0VGFibGVXaWR0aCh0YWJsZSwgZmllbGQsIHRhYmxlTW9kZSwgcGF5bG9hZC5pc1VuaXRWYWx1ZUhlbHApO1xuXHRcdH1cblx0fSxcblxuXHRfc2V0VGFibGVXaWR0aCh0YWJsZTogVGFibGUsIGZpZWxkOiBDb250cm9sLCB0YWJsZU1vZGU6IHN0cmluZywgaXNVbml0VmFsdWVIZWxwPzogYm9vbGVhbik6IHZvaWQge1xuXHRcdGNvbnN0IHJlZHVjZVdpZHRoRm9yVW5pdFZhbHVlSGVscCA9IEJvb2xlYW4oaXNVbml0VmFsdWVIZWxwKTtcblx0XHRjb25zdCB0YWJsZVdpZHRoID0gVmFsdWVMaXN0SGVscGVyLl9nZXRUYWJsZVdpZHRoKFxuXHRcdFx0dGFibGUsXG5cdFx0XHRWYWx1ZUxpc3RIZWxwZXIuX2dldFdpZHRoSW5SZW0oZmllbGQsIHJlZHVjZVdpZHRoRm9yVW5pdFZhbHVlSGVscCksXG5cdFx0XHR0YWJsZU1vZGUgPT09IFwiTXVsdGlTZWxlY3RcIlxuXHRcdCk7XG5cblx0XHR0YWJsZS5zZXRXaWR0aCh0YWJsZVdpZHRoKTtcblx0fSxcblxuXHQvKipcblx0ICogQ2hlY2sgaWYgdGhlIGhpc3RvcnkgaXMgZW5hYmxlZCBmb3IgYSBjZXJ0YWluIGZpZWxkLlxuXHQgKiBAcGFyYW0gdmFsdWVIZWxwIFRoZSB2YWx1ZSBoZWxwIGluc3RhbmNlXG5cdCAqIEBwYXJhbSBwYXlsb2FkIFZhbHVlIGhlbHAgcGF5bG9hZFxuXHQgKiBAcmV0dXJucyBUcnVlIGlmIHRoZSBoaXN0b3J5IGlzIGVuYWJsZWQsIGZhbHNlIG90aGVyd2lzZVxuXHQgKi9cblx0Y2hlY2tIaXN0b3J5RW5hYmxlZDogZnVuY3Rpb24gKHZhbHVlSGVscDogVmFsdWVIZWxwLCBwYXlsb2FkOiBWYWx1ZUhlbHBQYXlsb2FkKTogYm9vbGVhbiB7XG5cdFx0Y29uc3QgYXBwQ29tcG9uZW50ID0gQ29tbW9uVXRpbHMuZ2V0QXBwQ29tcG9uZW50KENvbW1vblV0aWxzLmdldFRhcmdldFZpZXcodmFsdWVIZWxwKSk7XG5cdFx0Y29uc3QgaGlzdG9yeVNldHRpbmdzID0gYXBwQ29tcG9uZW50LmdldE1hbmlmZXN0RW50cnkoXCJzYXAuZmVcIik/Lmhpc3RvcnlTZXR0aW5ncztcblx0XHRyZXR1cm4gaGlzdG9yeVNldHRpbmdzPy5maWVsZHM/LltwYXlsb2FkLnByb3BlcnR5UGF0aF0/Lmhpc3RvcnlFbmFibGVkID8/IHRydWU7XG5cdH0sXG5cblx0aXNWYWx1ZUxpc3RTZWFyY2hhYmxlKHByb3BlcnR5UGF0aDogc3RyaW5nLCB2YWx1ZUxpc3Q6IFZhbHVlTGlzdEluZm8pOiBib29sZWFuIHtcblx0XHRjb25zdCB2YWx1ZUxpc3RNZXRhbW9kZWwgPSB2YWx1ZUxpc3QudmFsdWVMaXN0SW5mby4kbW9kZWwuZ2V0TWV0YU1vZGVsKCk7XG5cblx0XHRjb25zdCBwcm9wZXJ0eUFubm90YXRpb25zID0gdmFsdWVMaXN0TWV0YW1vZGVsLmdldE9iamVjdChgJHtwcm9wZXJ0eVBhdGh9QGApID8/IHt9O1xuXHRcdGNvbnN0IGNvbGxlY3Rpb25Bbm5vdGF0aW9ucyA9IHZhbHVlTGlzdE1ldGFtb2RlbC5nZXRPYmplY3QoYC8ke3ZhbHVlTGlzdC52YWx1ZUxpc3RJbmZvLkNvbGxlY3Rpb25QYXRofUBgKSA/PyB7fTtcblx0XHRyZXR1cm4gVmFsdWVMaXN0SGVscGVyLmVudGl0eUlzU2VhcmNoYWJsZShwcm9wZXJ0eUFubm90YXRpb25zLCBjb2xsZWN0aW9uQW5ub3RhdGlvbnMpO1xuXHR9LFxuXG5cdF9jcmVhdGVWYWx1ZUhlbHBEaWFsb2c6IGFzeW5jIGZ1bmN0aW9uIChcblx0XHRtZXRhTW9kZWw6IE9EYXRhTWV0YU1vZGVsLFxuXHRcdHByb3BlcnR5UGF0aDogc3RyaW5nLFxuXHRcdHZhbHVlSGVscDogVmFsdWVIZWxwLFxuXHRcdGNvbnRlbnQ6IE1EQ1RhYmxlLFxuXHRcdHZhbHVlTGlzdEluZm86IFZhbHVlTGlzdEluZm8sXG5cdFx0cGF5bG9hZDogVmFsdWVIZWxwUGF5bG9hZCxcblx0XHRjb25kaXRpb25Db250ZW50PzogQ29uZGl0aW9uc1xuXHQpOiBQcm9taXNlPHZvaWQ+IHtcblx0XHRjb25zdCBwcm9wZXJ0eUFubm90YXRpb25zID0gKHZhbHVlSGVscC5nZXRNb2RlbCgpIGFzIE9EYXRhTW9kZWwpXG5cdFx0XHRcdC5nZXRNZXRhTW9kZWwoKSFcblx0XHRcdFx0LmdldE9iamVjdChgJHtwcm9wZXJ0eVBhdGh9QGApIGFzIEFubm90YXRpb25zRm9yUHJvcGVydHksXG5cdFx0XHRzb3VyY2VNb2RlbERpYWxvZyA9IHRoaXMuX2dldEpTT05Nb2RlbEZvckRpYWxvZyh2YWx1ZUxpc3RJbmZvLCBwcm9wZXJ0eVBhdGgsIGNvbnRlbnQsIHBheWxvYWQpO1xuXG5cdFx0Y29udGVudC5zZXRLZXlQYXRoKHZhbHVlTGlzdEluZm8ua2V5UGF0aCk7XG5cdFx0Y29udGVudC5zZXREZXNjcmlwdGlvblBhdGgodmFsdWVMaXN0SW5mby5kZXNjcmlwdGlvblBhdGgpO1xuXHRcdGNvbnN0IGNvbGxlY3Rpb25Bbm5vdGF0aW9ucyA9XG5cdFx0XHR2YWx1ZUxpc3RJbmZvLnZhbHVlTGlzdEluZm8uJG1vZGVsLmdldE1ldGFNb2RlbCgpLmdldE9iamVjdChgLyR7dmFsdWVMaXN0SW5mby52YWx1ZUxpc3RJbmZvLkNvbGxlY3Rpb25QYXRofUBgKSB8fCB7fTtcblx0XHRjb250ZW50LmRhdGEoXCJzZWFyY2hTdXBwb3J0ZWRcIiwgVmFsdWVMaXN0SGVscGVyLmVudGl0eUlzU2VhcmNoYWJsZShwcm9wZXJ0eUFubm90YXRpb25zLCBjb2xsZWN0aW9uQW5ub3RhdGlvbnMpID8gdHJ1ZSA6IGZhbHNlKTtcblx0XHRwYXlsb2FkLmlzUG90ZW50aWFsbHlTZW5zaXRpdmUgPSBwYXlsb2FkLmlzUG90ZW50aWFsbHlTZW5zaXRpdmUgPz8gcHJvcGVydHlBbm5vdGF0aW9uc1tBbm5vdGF0aW9uc1BlcnNvbmFsRGF0YVBvdGVudGlhbGx5U2Vuc2l0aXZlXTtcblxuXHRcdGlmIChjb25kaXRpb25Db250ZW50KSB7XG5cdFx0XHRjb25zdCBmaXJzdFR5cGVBaGVhZENvbnRlbnQgPSB2YWx1ZUhlbHAuZ2V0VHlwZWFoZWFkKCkuZ2V0Q29udGVudCgpWzBdIGFzIE1UYWJsZSxcblx0XHRcdFx0Y2FzZVNlbnNpdGl2ZSA9IGZpcnN0VHlwZUFoZWFkQ29udGVudC5nZXRDYXNlU2Vuc2l0aXZlKCk7XG5cblx0XHRcdGNvbnN0IHNvdXJjZU1vZGVsQ29uZGl0aW9uID0gdGhpcy5fZ2V0SlNPTk1vZGVsRm9yQ29uZGl0aW9uKHZhbHVlTGlzdEluZm8sIHByb3BlcnR5UGF0aCwgY29udGVudCwgcGF5bG9hZCwgY2FzZVNlbnNpdGl2ZSk7XG5cblx0XHRcdGNvbnN0IGNvbmRpdGlvbiA9IGF3YWl0IFZhbHVlTGlzdEhlbHBlci5fdGVtcGxhdGVGcmFnbWVudDxWYWx1ZUhlbHA+KFxuXHRcdFx0XHRcInNhcC5mZS5tYWNyb3MuaW50ZXJuYWwudmFsdWVoZWxwLlZhbHVlTGlzdEZvckNvbmRpdGlvblwiLFxuXHRcdFx0XHR2YWx1ZUxpc3RJbmZvLFxuXHRcdFx0XHRzb3VyY2VNb2RlbENvbmRpdGlvbixcblx0XHRcdFx0cHJvcGVydHlQYXRoLFxuXHRcdFx0XHR2YWx1ZUhlbHBcblx0XHRcdCk7XG5cdFx0XHQvKiBBcyB0aGUgY29uZGl0aW9uIGlzIG5vdCBhZGRlZCB0byBhbiBhZ2dyZWdhdGlvbiwgYnV0IGp1c3QgYXNzb2NpYXRlZCwgd2UgbmVlZCB0byBleHBsaWNpdGx5IHNldCB0aGUgbW9kZWwgKi9cblx0XHRcdGNvbmRpdGlvbi5zZXRNb2RlbChtZXRhTW9kZWwpO1xuXG5cdFx0XHQvKiBBZGQgYXMgZGVwZW5kZW50LCBvdGhlcndpc2UgaXQgd2lsbCBub3QgYmUgcHJvcGVybHkgZGVzdHJveWVkIGR1cmluZyBsaWZlY3ljbGUgaGFuZGxpbmcgKi9cblx0XHRcdGNvbmRpdGlvbkNvbnRlbnQuYWRkRGVwZW5kZW50KGNvbmRpdGlvbik7XG5cdFx0XHRjb25kaXRpb25Db250ZW50LnNldFZhbHVlSGVscChjb25kaXRpb24uZ2V0SWQoKSk7XG5cblx0XHRcdGNvbnN0IGNvbmRpdGlvblRhYmxlID0gY29uZGl0aW9uXG5cdFx0XHRcdC5nZXRUeXBlYWhlYWQoKVxuXHRcdFx0XHQuZ2V0Q29udGVudCgpWzBdIC8vIHRoZXJlIGlzIG9ubHkgb25lIHRhYmxlXG5cdFx0XHRcdC5nZXRUYWJsZSgpO1xuXG5cdFx0XHRjb25zdCB0YWJsZVdpZHRoID0gVmFsdWVMaXN0SGVscGVyLl9nZXRUYWJsZVdpZHRoKGNvbmRpdGlvblRhYmxlLCAwLCBmYWxzZSk7XG5cdFx0XHRjb25kaXRpb25UYWJsZS5zZXRXaWR0aCh0YWJsZVdpZHRoKTtcblx0XHR9XG5cblx0XHRjb25zdCB0YWJsZVByb21pc2UgPSBWYWx1ZUxpc3RIZWxwZXIuX3RlbXBsYXRlRnJhZ21lbnQ8TWRjSW5uZXJUYWJsZT4oXG5cdFx0XHRcInNhcC5mZS5tYWNyb3MuaW50ZXJuYWwudmFsdWVoZWxwLlZhbHVlTGlzdERpYWxvZ1RhYmxlXCIsXG5cdFx0XHR2YWx1ZUxpc3RJbmZvLFxuXHRcdFx0c291cmNlTW9kZWxEaWFsb2csXG5cdFx0XHRwcm9wZXJ0eVBhdGgsXG5cdFx0XHR2YWx1ZUhlbHBcblx0XHQpO1xuXG5cdFx0Y29uc3QgZmlsdGVyQmFyUHJvbWlzZSA9IFZhbHVlTGlzdEhlbHBlci5fdGVtcGxhdGVGcmFnbWVudDxGaWx0ZXJCYXI+KFxuXHRcdFx0XCJzYXAuZmUubWFjcm9zLmludGVybmFsLnZhbHVlaGVscC5WYWx1ZUxpc3RGaWx0ZXJCYXJcIixcblx0XHRcdHZhbHVlTGlzdEluZm8sXG5cdFx0XHRzb3VyY2VNb2RlbERpYWxvZyxcblx0XHRcdHByb3BlcnR5UGF0aCxcblx0XHRcdHZhbHVlSGVscFxuXHRcdCk7XG5cblx0XHRjb25zdCBbdGFibGUsIGZpbHRlckJhcl0gPSBhd2FpdCBQcm9taXNlLmFsbChbdGFibGVQcm9taXNlLCBmaWx0ZXJCYXJQcm9taXNlXSk7XG5cblx0XHR0YWJsZS5zZXRNb2RlbCh2YWx1ZUxpc3RJbmZvLnZhbHVlTGlzdEluZm8uJG1vZGVsKTtcblx0XHRmaWx0ZXJCYXIuc2V0TW9kZWwodmFsdWVMaXN0SW5mby52YWx1ZUxpc3RJbmZvLiRtb2RlbCk7XG5cblx0XHRjb250ZW50LnNldEZpbHRlckJhcihmaWx0ZXJCYXIpO1xuXHRcdGNvbnRlbnQuc2V0VGFibGUodGFibGUpO1xuXG5cdFx0dGFibGUuc2V0RmlsdGVyKGZpbHRlckJhci5nZXRJZCgpKTtcblx0XHR0YWJsZS5pbml0aWFsaXplZCgpO1xuXG5cdFx0dGFibGUuc2V0V2lkdGgoXCIxMDAlXCIpO1xuXG5cdFx0VmFsdWVMaXN0SGVscGVyLnNldENvcHlQcm92aWRlclZpc2liaWxpdHkodGFibGUsIHZhbHVlSGVscCk7XG5cblx0XHQvL1RoaXMgaXMgYSB0ZW1wb3Jhcnkgd29ya2Fycm91bmQgLSBwcm92aWRlZCBieSBNREMgKHNlZSBGSU9SSVRFQ0hQMS0yNDAwMilcblx0XHRjb25zdCBtZGNUYWJsZSA9IHRhYmxlIGFzIHVua25vd24gYXMgeyBfc2V0U2hvd1AxM25CdXR0b246IEZ1bmN0aW9uIH07XG5cdFx0bWRjVGFibGUuX3NldFNob3dQMTNuQnV0dG9uKGZhbHNlKTtcblx0fSxcblxuXHQvKipcblx0ICogU2V0IHRoZSB2aXNpYmxlIGF0dHJpYnV0ZSBvZiB0aGUgQ29weVByb3ZpZGVyIGJhc2VkIG9uIHRoZSBNYXhDb25kaXRpb24gb2YgdGhlIGZpZWxkLlxuXHQgKiBJbiBjYXNlIG9mIGEgc2luZ2xlIHNlbGVjdGlvbiwgdGhlIGNvcHkgYnV0dG9uIGlzIGhpZGRlbi4gSW4gYW5vdGhlciBjYXNlLCBpdCBpcyB2aXNpYmxlLlxuXHQgKiBAcGFyYW0gdGFibGUgVGhlIE1EQyB0YWJsZSBvZiB0aGUgVmFsdWUgSGVscCBkaWFsb2dcblx0ICogQHBhcmFtIHZhbHVlSGVscCBUaGUgVmFsdWUgSGVscCBvYmplY3Rcblx0ICovXG5cdHNldENvcHlQcm92aWRlclZpc2liaWxpdHk6IGZ1bmN0aW9uICh0YWJsZTogTWRjSW5uZXJUYWJsZSwgdmFsdWVIZWxwOiBWYWx1ZUhlbHApOiB2b2lkIHtcblx0XHRpZiAodmFsdWVIZWxwLmdldENvbnRyb2woKT8uaXNBPEZpZWxkQmFzZT4oXCJzYXAudWkubWRjLmZpZWxkLkZpZWxkQmFzZVwiKSkge1xuXHRcdFx0dGFibGUuZ2V0Q29weVByb3ZpZGVyKCk/LnNldFZpc2libGUodHJ1ZSk7XG5cdFx0fVxuXHR9LFxuXG5cdF9nZXRDb250ZW50QnlJZDogZnVuY3Rpb24gPFQgZXh0ZW5kcyBNVGFibGUgfCBNRENUYWJsZT4oY29udGVudExpc3Q6IENvbnRlbnRbXSwgY29udGVudElkOiBzdHJpbmcpOiBUIHwgdW5kZWZpbmVkIHtcblx0XHRyZXR1cm4gY29udGVudExpc3QuZmluZChmdW5jdGlvbiAoaXRlbSkge1xuXHRcdFx0cmV0dXJuIGl0ZW0uZ2V0SWQoKSA9PT0gY29udGVudElkO1xuXHRcdH0pIGFzIFQgfCB1bmRlZmluZWQ7XG5cdH0sXG5cblx0X2NyZWF0ZVBvcG92ZXJDb250ZW50OiBmdW5jdGlvbiAoY29udGVudElkOiBzdHJpbmcsIGNhc2VTZW5zaXRpdmU6IGJvb2xlYW4sIHVzZUFzVmFsdWVIZWxwOiBib29sZWFuKTogTVRhYmxlIHtcblx0XHRyZXR1cm4gbmV3IE1UYWJsZSh7XG5cdFx0XHRpZDogY29udGVudElkLFxuXHRcdFx0Z3JvdXA6IFwiZ3JvdXAxXCIsXG5cdFx0XHRjYXNlU2Vuc2l0aXZlOiBjYXNlU2Vuc2l0aXZlLFxuXHRcdFx0dXNlQXNWYWx1ZUhlbHA6IHVzZUFzVmFsdWVIZWxwXG5cdFx0fSBhcyAkTVRhYmxlU2V0dGluZ3MpO1xuXHR9LFxuXG5cdF9jcmVhdGVEaWFsb2dDb250ZW50OiBmdW5jdGlvbiAoY29udGVudElkOiBzdHJpbmcsIGNhc2VTZW5zaXRpdmU6IGJvb2xlYW4sIGZvcmNlQmluZDogYm9vbGVhbik6IE1EQ1RhYmxlIHtcblx0XHRyZXR1cm4gbmV3IE1EQ1RhYmxlKHtcblx0XHRcdGlkOiBjb250ZW50SWQsXG5cdFx0XHRncm91cDogXCJncm91cDFcIixcblx0XHRcdGNhc2VTZW5zaXRpdmU6IGNhc2VTZW5zaXRpdmUsXG5cdFx0XHRmb3JjZUJpbmQ6IGZvcmNlQmluZFxuXHRcdH0gYXMgJE1EQ1RhYmxlU2V0dGluZ3MpO1xuXHR9LFxuXG5cdF9zaG93Q29uZGl0aW9uc0NvbnRlbnQ6IGZ1bmN0aW9uIChjb250ZW50TGlzdDogQ29udGVudFtdLCBjb250YWluZXI6IENvbnRhaW5lcik6IENvbmRpdGlvbnMgfCB1bmRlZmluZWQge1xuXHRcdGxldCBjb25kaXRpb25zQ29udGVudCA9XG5cdFx0XHRjb250ZW50TGlzdC5sZW5ndGggJiYgY29udGVudExpc3RbY29udGVudExpc3QubGVuZ3RoIC0gMV0uZ2V0TWV0YWRhdGEoKS5nZXROYW1lKCkgPT09IFwic2FwLnVpLm1kYy52YWx1ZWhlbHAuY29udGVudC5Db25kaXRpb25zXCJcblx0XHRcdFx0PyAoY29udGVudExpc3RbY29udGVudExpc3QubGVuZ3RoIC0gMV0gYXMgQ29uZGl0aW9ucylcblx0XHRcdFx0OiB1bmRlZmluZWQ7XG5cblx0XHRpZiAoY29uZGl0aW9uc0NvbnRlbnQpIHtcblx0XHRcdGNvbmRpdGlvbnNDb250ZW50LnNldFZpc2libGUodHJ1ZSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGNvbmRpdGlvbnNDb250ZW50ID0gbmV3IENvbmRpdGlvbnMoKTtcblx0XHRcdGNvbnRhaW5lci5hZGRDb250ZW50KGNvbmRpdGlvbnNDb250ZW50KTtcblx0XHR9XG5cblx0XHRyZXR1cm4gY29uZGl0aW9uc0NvbnRlbnQ7XG5cdH0sXG5cblx0X2FsaWduT3JDcmVhdGVDb250ZW50OiBmdW5jdGlvbiAoXG5cdFx0dmFsdWVMaXN0SW5mbzogVmFsdWVMaXN0SW5mbyxcblx0XHRjb250ZW50SWQ6IHN0cmluZyxcblx0XHRjYXNlU2Vuc2l0aXZlOiBib29sZWFuLFxuXHRcdHNob3dDb25kaXRpb25QYW5lbDogYm9vbGVhbixcblx0XHRjb250YWluZXI6IENvbnRhaW5lclxuXHQpOiBNRENUYWJsZSB7XG5cdFx0Y29uc3QgY29udGVudExpc3QgPSBjb250YWluZXIuZ2V0Q29udGVudCgpO1xuXHRcdGxldCBjb250ZW50ID0gVmFsdWVMaXN0SGVscGVyLl9nZXRDb250ZW50QnlJZDxNRENUYWJsZT4oY29udGVudExpc3QsIGNvbnRlbnRJZCk7XG5cblx0XHRpZiAoIWNvbnRlbnQpIHtcblx0XHRcdGNvbnN0IGZvcmNlQmluZCA9IHZhbHVlTGlzdEluZm8udmFsdWVMaXN0SW5mby5GZXRjaFZhbHVlcyA9PT0gMiA/IGZhbHNlIDogdHJ1ZTtcblxuXHRcdFx0Y29udGVudCA9IFZhbHVlTGlzdEhlbHBlci5fY3JlYXRlRGlhbG9nQ29udGVudChjb250ZW50SWQsIGNhc2VTZW5zaXRpdmUsIGZvcmNlQmluZCk7XG5cblx0XHRcdGlmICghc2hvd0NvbmRpdGlvblBhbmVsKSB7XG5cdFx0XHRcdGNvbnRhaW5lci5hZGRDb250ZW50KGNvbnRlbnQpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Y29udGFpbmVyLmluc2VydENvbnRlbnQoY29udGVudCwgY29udGVudExpc3QubGVuZ3RoIC0gMSk7IC8vIGluc2VydCBjb250ZW50IGJlZm9yZSBjb25kaXRpb25zIGNvbnRlbnRcblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gY29udGVudDtcblx0fSxcblxuXHRfcHJlcGFyZVZhbHVlSGVscFR5cGVBaGVhZDogZnVuY3Rpb24gKFxuXHRcdHZhbHVlSGVscDogVmFsdWVIZWxwLFxuXHRcdGNvbnRhaW5lcjogQ29udGFpbmVyLFxuXHRcdHZhbHVlTGlzdEluZm9zOiBWYWx1ZUxpc3RJbmZvW10sXG5cdFx0cGF5bG9hZDogVmFsdWVIZWxwUGF5bG9hZCxcblx0XHRjYXNlU2Vuc2l0aXZlOiBib29sZWFuLFxuXHRcdGZpcnN0VHlwZUFoZWFkQ29udGVudDogTVRhYmxlXG5cdCk6IHsgdmFsdWVMaXN0SW5mbzogVmFsdWVMaXN0SW5mbzsgY29udGVudDogTVRhYmxlIH0ge1xuXHRcdGNvbnN0IGNvbnRlbnRMaXN0ID0gY29udGFpbmVyLmdldENvbnRlbnQoKTtcblx0XHRsZXQgcXVhbGlmaWVyRm9yVHlwZWFoZWFkID0gdmFsdWVIZWxwLmRhdGEoXCJ2YWx1ZWxpc3RGb3JWYWxpZGF0aW9uXCIpIHx8IFwiXCI7IC8vIGNhbiBhbHNvIGJlIG51bGxcblx0XHRpZiAocXVhbGlmaWVyRm9yVHlwZWFoZWFkID09PSBcIiBcIikge1xuXHRcdFx0cXVhbGlmaWVyRm9yVHlwZWFoZWFkID0gXCJcIjtcblx0XHR9XG5cdFx0Y29uc3QgdmFsdWVMaXN0SW5mbyA9IHF1YWxpZmllckZvclR5cGVhaGVhZCAvLyBmYWxsYmFjayBpZiBxdWFsaWZpZXIgZm9yIFR5cGVhaGVhZCBub3QgZXhpc3RzXG5cdFx0XHQ/IHZhbHVlTGlzdEluZm9zLmZpbHRlcihmdW5jdGlvbiAoc3ViVmFsdWVMaXN0SW5mbykge1xuXHRcdFx0XHRcdHJldHVybiBzdWJWYWx1ZUxpc3RJbmZvLnZhbHVlSGVscFF1YWxpZmllciA9PT0gcXVhbGlmaWVyRm9yVHlwZWFoZWFkO1xuXHRcdFx0ICB9KVswXSB8fCB2YWx1ZUxpc3RJbmZvc1swXVxuXHRcdFx0OiB2YWx1ZUxpc3RJbmZvc1swXTtcblxuXHRcdFZhbHVlTGlzdEhlbHBlci5fYWRkSW5PdXRQYXJhbWV0ZXJzVG9QYXlsb2FkKHBheWxvYWQsIHZhbHVlTGlzdEluZm8pO1xuXG5cdFx0Y29uc3QgY29udGVudElkID0gVmFsdWVMaXN0SGVscGVyLl9nZXRDb250ZW50SWQodmFsdWVIZWxwLmdldElkKCksIHZhbHVlTGlzdEluZm8udmFsdWVIZWxwUXVhbGlmaWVyLCB0cnVlKTtcblx0XHRsZXQgY29udGVudCA9IFZhbHVlTGlzdEhlbHBlci5fZ2V0Q29udGVudEJ5SWQ8TVRhYmxlPihjb250ZW50TGlzdCwgY29udGVudElkKTtcblxuXHRcdGlmICghY29udGVudCkge1xuXHRcdFx0Y29uc3QgdXNlQXNWYWx1ZUhlbHAgPSBmaXJzdFR5cGVBaGVhZENvbnRlbnQuZ2V0VXNlQXNWYWx1ZUhlbHAoKTtcblx0XHRcdGNvbnRlbnQgPSBWYWx1ZUxpc3RIZWxwZXIuX2NyZWF0ZVBvcG92ZXJDb250ZW50KGNvbnRlbnRJZCwgY2FzZVNlbnNpdGl2ZSwgdXNlQXNWYWx1ZUhlbHApO1xuXG5cdFx0XHRjb250YWluZXIuaW5zZXJ0Q29udGVudChjb250ZW50LCAwKTsgLy8gaW5zZXJ0IGNvbnRlbnQgYXMgZmlyc3QgY29udGVudFxuXHRcdH0gZWxzZSBpZiAoY29udGVudElkICE9PSBjb250ZW50TGlzdFswXS5nZXRJZCgpKSB7XG5cdFx0XHQvLyBjb250ZW50IGFscmVhZHkgYXZhaWxhYmxlIGJ1dCBub3QgYXMgZmlyc3QgY29udGVudD9cblx0XHRcdGNvbnRhaW5lci5yZW1vdmVDb250ZW50KGNvbnRlbnQpO1xuXHRcdFx0Y29udGFpbmVyLmluc2VydENvbnRlbnQoY29udGVudCwgMCk7IC8vIG1vdmUgY29udGVudCB0byBmaXJzdCBwb3NpdGlvblxuXHRcdH1cblxuXHRcdHJldHVybiB7IHZhbHVlTGlzdEluZm8sIGNvbnRlbnQgfTtcblx0fSxcblxuXHRfcHJlcGFyZVZhbHVlSGVscERpYWxvZzogZnVuY3Rpb24gKFxuXHRcdHZhbHVlSGVscDogVmFsdWVIZWxwLFxuXHRcdGNvbnRhaW5lcjogQ29udGFpbmVyLFxuXHRcdHZhbHVlTGlzdEluZm9zOiBWYWx1ZUxpc3RJbmZvW10sXG5cdFx0cGF5bG9hZDogVmFsdWVIZWxwUGF5bG9hZCxcblx0XHRzZWxlY3RlZENvbnRlbnRJZDogc3RyaW5nLFxuXHRcdGNhc2VTZW5zaXRpdmU6IGJvb2xlYW5cblx0KToge1xuXHRcdHNlbGVjdGVkSW5mbzogVmFsdWVMaXN0SW5mbztcblx0XHRzZWxlY3RlZENvbnRlbnQ6IE1EQ1RhYmxlO1xuXHRcdGNvbmRpdGlvbkNvbnRlbnQ/OiBDb25kaXRpb25zO1xuXHR9IHtcblx0XHRjb25zdCBzaG93Q29uZGl0aW9uUGFuZWwgPSB2YWx1ZUhlbHAuZGF0YShcInNob3dDb25kaXRpb25QYW5lbFwiKSAmJiB2YWx1ZUhlbHAuZGF0YShcInNob3dDb25kaXRpb25QYW5lbFwiKSAhPT0gXCJmYWxzZVwiO1xuXHRcdGNvbnN0IGNvbnRlbnRMaXN0ID0gY29udGFpbmVyLmdldENvbnRlbnQoKTtcblxuXHRcdC8vIHNldCBhbGwgY29udGVudHMgdG8gaW52aXNpYmxlXG5cdFx0Zm9yIChjb25zdCBjb250ZW50TGlzdEl0ZW0gb2YgY29udGVudExpc3QpIHtcblx0XHRcdGNvbnRlbnRMaXN0SXRlbS5zZXRWaXNpYmxlKGZhbHNlKTtcblx0XHR9XG5cblx0XHRjb25zdCBjb25kaXRpb25Db250ZW50ID0gc2hvd0NvbmRpdGlvblBhbmVsID8gdGhpcy5fc2hvd0NvbmRpdGlvbnNDb250ZW50KGNvbnRlbnRMaXN0LCBjb250YWluZXIpIDogdW5kZWZpbmVkO1xuXHRcdGNvbnN0IGZpZWxkID0gdmFsdWVIZWxwLmdldENvbnRyb2woKTtcblxuXHRcdC8vIEZvciBhIEZpbHRlckZpZWxkIHdlIGNoZWNrIHRoZSBvcGVyYXRvcnMgaWYgdGhleSBhcmUgZGVmYXVsdCAoZW1wdHkgbGlzdD1hbGwpIG9yIGluY2x1ZGUgRVFcblx0XHRjb25zdCBoYXNPcGVyYXRvckVRID1cblx0XHRcdGZpZWxkICYmIGZpZWxkLmlzQTxGaWx0ZXJGaWVsZD4oXCJzYXAudWkubWRjLkZpbHRlckZpZWxkXCIpXG5cdFx0XHRcdD8gZmllbGQuZ2V0T3BlcmF0b3JzKCkubGVuZ3RoID09PSAwIHx8IGZpZWxkLmdldE9wZXJhdG9ycygpLmluY2x1ZGVzKFwiRVFcIilcblx0XHRcdFx0OiB0cnVlO1xuXG5cdFx0bGV0IHNlbGVjdGVkSW5mbzogVmFsdWVMaXN0SW5mbyB8IHVuZGVmaW5lZCwgc2VsZWN0ZWRDb250ZW50OiBNRENUYWJsZSB8IHVuZGVmaW5lZDtcblxuXHRcdC8vIENyZWF0ZSBvciByZXVzZSBjb250ZW50cyBmb3IgdGhlIGN1cnJlbnQgY29udGV4dFxuXHRcdGZvciAoY29uc3QgdmFsdWVMaXN0SW5mbyBvZiB2YWx1ZUxpc3RJbmZvcykge1xuXHRcdFx0Y29uc3QgdmFsdWVIZWxwUXVhbGlmaWVyID0gdmFsdWVMaXN0SW5mby52YWx1ZUhlbHBRdWFsaWZpZXI7XG5cblx0XHRcdFZhbHVlTGlzdEhlbHBlci5fYWRkSW5PdXRQYXJhbWV0ZXJzVG9QYXlsb2FkKHBheWxvYWQsIHZhbHVlTGlzdEluZm8pO1xuXG5cdFx0XHRjb25zdCBjb250ZW50SWQgPSBWYWx1ZUxpc3RIZWxwZXIuX2dldENvbnRlbnRJZCh2YWx1ZUhlbHAuZ2V0SWQoKSwgdmFsdWVIZWxwUXVhbGlmaWVyLCBmYWxzZSk7XG5cblx0XHRcdGNvbnN0IGNvbnRlbnQgPSB0aGlzLl9hbGlnbk9yQ3JlYXRlQ29udGVudCh2YWx1ZUxpc3RJbmZvLCBjb250ZW50SWQsIGNhc2VTZW5zaXRpdmUsIHNob3dDb25kaXRpb25QYW5lbCwgY29udGFpbmVyKTtcblx0XHRcdGNvbnRlbnQuc2V0VmlzaWJsZShoYXNPcGVyYXRvckVRKTsgLy8gRG8gbm90IHNob3cgYSB2YWx1ZSBoZWxwIHRhYmxlIGZvciBhIGZpbHRlciBmaWVsZCB3aXRob3V0IG9wZXJhdG9yICdFUSdcblxuXHRcdFx0aWYgKHZhbHVlTGlzdEluZm8udmFsdWVMaXN0SW5mby5MYWJlbCAmJiBmaWVsZCkge1xuXHRcdFx0XHRjb25zdCB0aXRsZSA9IENvbW1vblV0aWxzLmdldFRyYW5zbGF0ZWRUZXh0RnJvbUV4cEJpbmRpbmdTdHJpbmcodmFsdWVMaXN0SW5mby52YWx1ZUxpc3RJbmZvLkxhYmVsLCBmaWVsZCk7XG5cdFx0XHRcdGNvbnRlbnQuc2V0VGl0bGUodGl0bGUpO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoIXNlbGVjdGVkQ29udGVudCB8fCAoc2VsZWN0ZWRDb250ZW50SWQgJiYgc2VsZWN0ZWRDb250ZW50SWQgPT09IGNvbnRlbnRJZCkpIHtcblx0XHRcdFx0c2VsZWN0ZWRDb250ZW50ID0gY29udGVudDtcblx0XHRcdFx0c2VsZWN0ZWRJbmZvID0gdmFsdWVMaXN0SW5mbztcblx0XHRcdH1cblx0XHR9XG5cblx0XHRpZiAoIXNlbGVjdGVkSW5mbyB8fCAhc2VsZWN0ZWRDb250ZW50KSB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJzZWxlY3RlZEluZm8gb3Igc2VsZWN0ZWRDb250ZW50IHVuZGVmaW5lZFwiKTtcblx0XHR9XG5cblx0XHRyZXR1cm4geyBzZWxlY3RlZEluZm8sIHNlbGVjdGVkQ29udGVudCwgY29uZGl0aW9uQ29udGVudCB9O1xuXHR9LFxuXG5cdF9hZGREZXNjcmlwdGlvbkluZm9zVG9QYXlsb2FkOiBmdW5jdGlvbiAocGF5bG9hZDogVmFsdWVIZWxwUGF5bG9hZCwgdmFsdWVMaXN0SW5mbzogVmFsdWVMaXN0SW5mbywgbWV0YU1vZGVsOiBPRGF0YU1ldGFNb2RlbCk6IHZvaWQge1xuXHRcdGlmIChwYXlsb2FkLnZhbHVlSGVscERlc2NyaXB0aW9uUGF0aCAhPT0gdmFsdWVMaXN0SW5mby5kZXNjcmlwdGlvblBhdGggfHwgcGF5bG9hZC5leHRlcm5hbElkUGF0aCkge1xuXHRcdFx0Y29uc3QgY29udmVydGVkTWV0YWRhdGEgPSBjb252ZXJ0VHlwZXMobWV0YU1vZGVsKTtcblx0XHRcdGNvbnN0IHByb3BlcnR5RGVzY3JpcHRpb25QYXRoID0gKFxuXHRcdFx0XHRjb252ZXJ0ZWRNZXRhZGF0YS5yZXNvbHZlUGF0aDxQcm9wZXJ0eT4ocGF5bG9hZC5wcm9wZXJ0eVBhdGgpLnRhcmdldD8uYW5ub3RhdGlvbnM/LkNvbW1vblxuXHRcdFx0XHRcdD8uVGV4dCBhcyB1bmtub3duIGFzIFBhdGhBbm5vdGF0aW9uRXhwcmVzc2lvbjxzdHJpbmc+XG5cdFx0XHQpPy5wYXRoO1xuXG5cdFx0XHQvKiBFbnJpY2ggcGF5bG9hZCB3aXRoIFRleHQgUHJvcGVydHkgSW5mb3MgKi9cblx0XHRcdHBheWxvYWQudmFsdWVIZWxwRGVzY3JpcHRpb25QYXRoID0gdmFsdWVMaXN0SW5mby5kZXNjcmlwdGlvblBhdGg7XG5cdFx0XHRwYXlsb2FkLnZhbHVlSGVscEtleVBhdGggPSB2YWx1ZUxpc3RJbmZvLmtleVBhdGg7XG5cdFx0XHRpZiAocHJvcGVydHlEZXNjcmlwdGlvblBhdGgpIHtcblx0XHRcdFx0cGF5bG9hZC5tYXhMZW5ndGggPSBwYXlsb2FkLnZhbHVlSGVscERlc2NyaXB0aW9uUGF0aFxuXHRcdFx0XHRcdD8gY29udmVydGVkTWV0YWRhdGEucmVzb2x2ZVBhdGg8UHJvcGVydHk+KFxuXHRcdFx0XHRcdFx0XHRgLyR7dmFsdWVMaXN0SW5mby52YWx1ZUxpc3RJbmZvLkNvbGxlY3Rpb25QYXRofS8ke3BheWxvYWQudmFsdWVIZWxwRGVzY3JpcHRpb25QYXRofWBcblx0XHRcdFx0XHQgICk/LnRhcmdldD8ubWF4TGVuZ3RoXG5cdFx0XHRcdFx0OiB1bmRlZmluZWQ7XG5cdFx0XHRcdHBheWxvYWQucHJvcGVydHlEZXNjcmlwdGlvblBhdGggPSBwcm9wZXJ0eURlc2NyaXB0aW9uUGF0aDtcblx0XHRcdH1cblxuXHRcdFx0LyogRVhURVJOQUxJRCAqL1xuXHRcdFx0Ly8gQWRkIGRlc2NyaXB0aW9uUGF0aCB0byB0aGUgcGF5bG9hZCBhbmQgdmFsdWVMaXN0SW5mb1xuXHRcdFx0Y29uc3QgZXh0ZXJuYWxJZFBhdGggPSBwYXlsb2FkLmV4dGVybmFsSWRQYXRoO1xuXHRcdFx0aWYgKGV4dGVybmFsSWRQYXRoICYmICFwYXlsb2FkLnZhbHVlSGVscERlc2NyaXB0aW9uUGF0aCkge1xuXHRcdFx0XHRjb25zdCBwcm9wZXJ0eU5hbWUgPSBtZXRhTW9kZWwuZ2V0T2JqZWN0KGAke3BheWxvYWQucHJvcGVydHlQYXRofUBzYXB1aS5uYW1lYCk7XG5cdFx0XHRcdGNvbnN0IGV4dGVybmFsSWRGdWxsUGF0aCA9IHBheWxvYWQucHJvcGVydHlQYXRoLnJlcGxhY2UocHJvcGVydHlOYW1lLCBleHRlcm5hbElkUGF0aCk7XG5cdFx0XHRcdGNvbnN0IGRlc2NyaXB0aW9uUGF0aCA9IChcblx0XHRcdFx0XHRjb252ZXJ0ZWRNZXRhZGF0YS5yZXNvbHZlUGF0aDxQcm9wZXJ0eT4oZXh0ZXJuYWxJZEZ1bGxQYXRoKS50YXJnZXQ/LmFubm90YXRpb25zPy5Db21tb25cblx0XHRcdFx0XHRcdD8uVGV4dCBhcyB1bmtub3duIGFzIFBhdGhBbm5vdGF0aW9uRXhwcmVzc2lvbjxzdHJpbmc+XG5cdFx0XHRcdCk/LnBhdGg7XG5cdFx0XHRcdHZhbHVlTGlzdEluZm8uZGVzY3JpcHRpb25QYXRoID0gZGVzY3JpcHRpb25QYXRoO1xuXHRcdFx0XHRwYXlsb2FkLnZhbHVlSGVscERlc2NyaXB0aW9uUGF0aCA9IGRlc2NyaXB0aW9uUGF0aDtcblx0XHRcdH1cblx0XHR9XG5cdH0sXG5cblx0c2hvd1ZhbHVlTGlzdDogYXN5bmMgZnVuY3Rpb24gKHBheWxvYWQ6IFZhbHVlSGVscFBheWxvYWQsIGNvbnRhaW5lcjogQ29udGFpbmVyLCBzZWxlY3RlZENvbnRlbnRJZDogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0Y29uc3QgdmFsdWVIZWxwID0gY29udGFpbmVyLmdldFBhcmVudCgpIGFzIFZhbHVlSGVscCxcblx0XHRcdGlzVHlwZWFoZWFkID0gY29udGFpbmVyLmlzVHlwZWFoZWFkKCksXG5cdFx0XHRwcm9wZXJ0eVBhdGggPSBwYXlsb2FkLnByb3BlcnR5UGF0aCxcblx0XHRcdC8qIEluIGNhc2Ugb2YgUkFQIHRoZSB2YWx1ZUhlbHAgbW9kZWwgaXMgZGlmZmVyZW50IHRvIHRoZSBjb250cm9sIG1vZGVsICovXG5cdFx0XHRjb250cm9sID0gdmFsdWVIZWxwLmdldENvbnRyb2woKSxcblx0XHRcdG1ldGFNb2RlbCA9IGNvbnRyb2xcblx0XHRcdFx0PyAodmFsdWVIZWxwLmdldENvbnRyb2woKT8uZ2V0TW9kZWwoKSBhcyBPRGF0YU1vZGVsKS5nZXRNZXRhTW9kZWwoKVxuXHRcdFx0XHQ6ICh2YWx1ZUhlbHAuZ2V0TW9kZWwoKSBhcyBPRGF0YU1vZGVsKS5nZXRNZXRhTW9kZWwoKSxcblx0XHRcdHZoVUlNb2RlbCA9XG5cdFx0XHRcdHZhbHVlSGVscC5nZXRNb2RlbChcIl9WSFVJXCIpICE9PSB1bmRlZmluZWRcblx0XHRcdFx0XHQ/ICh2YWx1ZUhlbHAuZ2V0TW9kZWwoXCJfVkhVSVwiKSBhcyBKU09OTW9kZWwpXG5cdFx0XHRcdFx0OiBWYWx1ZUxpc3RIZWxwZXIuY3JlYXRlVkhVSU1vZGVsKHZhbHVlSGVscCwgcHJvcGVydHlQYXRoLCBtZXRhTW9kZWwpO1xuXHRcdC8qIEVYVEVSTkFMSUQgKi9cblx0XHRwYXlsb2FkLmV4dGVybmFsSWRQYXRoID0gbWV0YU1vZGVsPy5nZXRPYmplY3QoYCR7cGF5bG9hZC5wcm9wZXJ0eVBhdGh9QGNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5FeHRlcm5hbElEYCk/LiRQYXRoO1xuXG5cdFx0dmhVSU1vZGVsLnNldFByb3BlcnR5KFwiL2lzU3VnZ2VzdGlvblwiLCBpc1R5cGVhaGVhZCk7XG5cdFx0dmhVSU1vZGVsLnNldFByb3BlcnR5KFwiL21pblNjcmVlbldpZHRoXCIsICFpc1R5cGVhaGVhZCA/IFwiNDE4cHhcIiA6IHVuZGVmaW5lZCk7XG5cblx0XHR0cnkge1xuXHRcdFx0Y29uc3QgdmFsdWVMaXN0SW5mb3MgPSBhd2FpdCBWYWx1ZUxpc3RIZWxwZXIuZ2V0VmFsdWVMaXN0SW5mbyh2YWx1ZUhlbHAsIHByb3BlcnR5UGF0aCwgcGF5bG9hZCwgbWV0YU1vZGVsKTtcblx0XHRcdGNvbnN0IGZpcnN0VHlwZUFoZWFkQ29udGVudCA9IHZhbHVlSGVscC5nZXRUeXBlYWhlYWQoKS5nZXRDb250ZW50KClbMF0gYXMgTVRhYmxlLFxuXHRcdFx0XHRjYXNlU2Vuc2l0aXZlID0gZmlyc3RUeXBlQWhlYWRDb250ZW50LmdldENhc2VTZW5zaXRpdmUoKTsgLy8gdGFrZSBjYXNlU2Vuc2l0aXZlIGZyb20gZmlyc3QgVHlwZWFoZWFkIGNvbnRlbnRcblxuXHRcdFx0aWYgKGlzVHlwZWFoZWFkKSB7XG5cdFx0XHRcdGNvbnN0IHsgdmFsdWVMaXN0SW5mbywgY29udGVudCB9ID0gVmFsdWVMaXN0SGVscGVyLl9wcmVwYXJlVmFsdWVIZWxwVHlwZUFoZWFkKFxuXHRcdFx0XHRcdHZhbHVlSGVscCxcblx0XHRcdFx0XHRjb250YWluZXIsXG5cdFx0XHRcdFx0dmFsdWVMaXN0SW5mb3MsXG5cdFx0XHRcdFx0cGF5bG9hZCxcblx0XHRcdFx0XHRjYXNlU2Vuc2l0aXZlLFxuXHRcdFx0XHRcdGZpcnN0VHlwZUFoZWFkQ29udGVudFxuXHRcdFx0XHQpO1xuXG5cdFx0XHRcdHBheWxvYWQudmFsdWVIZWxwUXVhbGlmaWVyID0gdmFsdWVMaXN0SW5mby52YWx1ZUhlbHBRdWFsaWZpZXI7XG5cdFx0XHRcdHZoVUlNb2RlbC5zZXRQcm9wZXJ0eShcblx0XHRcdFx0XHRcIi9zZWxlY3RlZFByb3BlcnRpZXNcIixcblx0XHRcdFx0XHR2YWx1ZUxpc3RJbmZvLmNvbHVtbkRlZnMubWFwKChjb2wpID0+IGNvbC5wYXRoKVxuXHRcdFx0XHQpO1xuXHRcdFx0XHRWYWx1ZUxpc3RIZWxwZXIuX2FkZERlc2NyaXB0aW9uSW5mb3NUb1BheWxvYWQocGF5bG9hZCwgdmFsdWVMaXN0SW5mbywgbWV0YU1vZGVsKTtcblxuXHRcdFx0XHRpZiAoY29udGVudC5nZXRUYWJsZSgpID09PSB1bmRlZmluZWQgfHwgY29udGVudC5nZXRUYWJsZSgpID09PSBudWxsKSB7XG5cdFx0XHRcdFx0YXdhaXQgVmFsdWVMaXN0SGVscGVyLl9jcmVhdGVWYWx1ZUhlbHBUeXBlYWhlYWQocHJvcGVydHlQYXRoLCB2YWx1ZUhlbHAsIGNvbnRlbnQsIHZhbHVlTGlzdEluZm8sIHBheWxvYWQsIG1ldGFNb2RlbCk7XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGNvbnN0IHsgc2VsZWN0ZWRJbmZvLCBzZWxlY3RlZENvbnRlbnQsIGNvbmRpdGlvbkNvbnRlbnQgfSA9IFZhbHVlTGlzdEhlbHBlci5fcHJlcGFyZVZhbHVlSGVscERpYWxvZyhcblx0XHRcdFx0XHR2YWx1ZUhlbHAsXG5cdFx0XHRcdFx0Y29udGFpbmVyLFxuXHRcdFx0XHRcdHZhbHVlTGlzdEluZm9zLFxuXHRcdFx0XHRcdHBheWxvYWQsXG5cdFx0XHRcdFx0c2VsZWN0ZWRDb250ZW50SWQsXG5cdFx0XHRcdFx0Y2FzZVNlbnNpdGl2ZVxuXHRcdFx0XHQpO1xuXG5cdFx0XHRcdHBheWxvYWQudmFsdWVIZWxwUXVhbGlmaWVyID0gc2VsZWN0ZWRJbmZvLnZhbHVlSGVscFF1YWxpZmllcjtcblx0XHRcdFx0VmFsdWVMaXN0SGVscGVyLl9hZGREZXNjcmlwdGlvbkluZm9zVG9QYXlsb2FkKHBheWxvYWQsIHNlbGVjdGVkSW5mbywgbWV0YU1vZGVsKTtcblxuXHRcdFx0XHQvKiBGb3IgY29udGV4dCBkZXBlbnRlbnQgdmFsdWUgaGVscHMgdGhlIHZhbHVlIGxpc3QgbGFiZWwgaXMgdXNlZCBmb3IgdGhlIGRpYWxvZyB0aXRsZSAqL1xuXHRcdFx0XHRjb25zdCBmaWVsZCA9IHZhbHVlSGVscC5nZXRDb250cm9sKCk7XG5cdFx0XHRcdGlmIChmaWVsZCkge1xuXHRcdFx0XHRcdGNvbnN0IHRpdGxlID0gQ29tbW9uVXRpbHMuZ2V0VHJhbnNsYXRlZFRleHRGcm9tRXhwQmluZGluZ1N0cmluZyhcblx0XHRcdFx0XHRcdFZhbHVlTGlzdEhlbHBlci5fZ2V0RGlhbG9nVGl0bGUodmFsdWVIZWxwLCBzZWxlY3RlZEluZm8udmFsdWVMaXN0SW5mbz8uTGFiZWwpLFxuXHRcdFx0XHRcdFx0ZmllbGRcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdGNvbnRhaW5lci5zZXRUaXRsZSh0aXRsZSk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZiAoc2VsZWN0ZWRDb250ZW50LmdldFRhYmxlKCkgPT09IHVuZGVmaW5lZCB8fCBzZWxlY3RlZENvbnRlbnQuZ2V0VGFibGUoKSA9PT0gbnVsbCkge1xuXHRcdFx0XHRcdGF3YWl0IFZhbHVlTGlzdEhlbHBlci5fY3JlYXRlVmFsdWVIZWxwRGlhbG9nKFxuXHRcdFx0XHRcdFx0bWV0YU1vZGVsLFxuXHRcdFx0XHRcdFx0cHJvcGVydHlQYXRoLFxuXHRcdFx0XHRcdFx0dmFsdWVIZWxwLFxuXHRcdFx0XHRcdFx0c2VsZWN0ZWRDb250ZW50LFxuXHRcdFx0XHRcdFx0c2VsZWN0ZWRJbmZvLFxuXHRcdFx0XHRcdFx0cGF5bG9hZCxcblx0XHRcdFx0XHRcdGNvbmRpdGlvbkNvbnRlbnRcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSBjYXRjaCAoZXJyKSB7XG5cdFx0XHR0aGlzLl9sb2dFcnJvcihwcm9wZXJ0eVBhdGgsIGVycik7XG5cdFx0XHRWYWx1ZUxpc3RIZWxwZXIuZGVzdHJveVZIQ29udGVudCh2YWx1ZUhlbHApO1xuXHRcdH1cblx0fSxcblxuXHRnZXRJbkFuZE91dFBhcmFtZXRlcnNMaXN0KCk6IENvbW1vbkFubm90YXRpb25UeXBlc1tdIHtcblx0XHRyZXR1cm4gW1xuXHRcdFx0Q29tbW9uQW5ub3RhdGlvblR5cGVzLlZhbHVlTGlzdFBhcmFtZXRlck91dCxcblx0XHRcdENvbW1vbkFubm90YXRpb25UeXBlcy5WYWx1ZUxpc3RQYXJhbWV0ZXJJbixcblx0XHRcdENvbW1vbkFubm90YXRpb25UeXBlcy5WYWx1ZUxpc3RQYXJhbWV0ZXJJbk91dFxuXHRcdF07XG5cdH1cbn07XG5cbmV4cG9ydCBkZWZhdWx0IFZhbHVlTGlzdEhlbHBlcjtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7RUFrRUE7O0VBa0JBLE1BQU1BLHVCQUF1QixHQUFHQSxDQUFDQyxVQUF1QixFQUFFQyxLQUFhLEtBQWMsQ0FBQ0QsVUFBVSxDQUFDRSxJQUFJLENBQUVD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
|
|
1247
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJjb2x1bW5Ob3RBbHJlYWR5RGVmaW5lZCIsImNvbHVtbkRlZnMiLCJ2aEtleSIsInNvbWUiLCJjb2x1bW4iLCJwYXRoIiwiQW5ub3RhdGlvbkxhYmVsIiwiQW5ub3RhdGlvblRleHQiLCJBbm5vdGF0aW9uVGV4dFVJVGV4dEFycmFuZ2VtZW50IiwiQW5ub3RhdGlvblZhbHVlTGlzdFBhcmFtZXRlckluIiwiQW5ub3RhdGlvblZhbHVlTGlzdFBhcmFtZXRlckNvbnN0YW50IiwiQW5ub3RhdGlvblZhbHVlTGlzdFBhcmFtZXRlck91dCIsIkFubm90YXRpb25WYWx1ZUxpc3RQYXJhbWV0ZXJJbk91dCIsIkFubm90YXRpb25WYWx1ZUxpc3RXaXRoRml4ZWRWYWx1ZXMiLCJBbm5vdGF0aW9uc1BlcnNvbmFsRGF0YVBvdGVudGlhbGx5U2Vuc2l0aXZlIiwiQW5ub3RhdGlvbnNWYWx1ZUxpc3RSZWxldmFudFF1YWxpZmllcnMiLCJfZXhwb3J0cyIsIl9nZXREZWZhdWx0U29ydFByb3BlcnR5TmFtZSIsInZhbHVlTGlzdEluZm8iLCJzb3J0RmllbGROYW1lIiwibWV0YU1vZGVsIiwiJG1vZGVsIiwiZ2V0TWV0YU1vZGVsIiwiZW50aXR5U2V0QW5ub3RhdGlvbnMiLCJnZXRPYmplY3QiLCJDb2xsZWN0aW9uUGF0aCIsInNvcnRSZXN0cmljdGlvbnNJbmZvIiwiZ2V0U29ydFJlc3RyaWN0aW9uc0luZm8iLCJmb3VuZEVsZW1lbnQiLCJQYXJhbWV0ZXJzIiwiZmluZCIsImVsZW1lbnQiLCIkVHlwZSIsIlZhbHVlTGlzdFByb3BlcnR5IiwicHJvcGVydHlJbmZvIiwic29ydGFibGUiLCJ1bmRlZmluZWQiLCJfcmVkdW5kYW50RGVzY3JpcHRpb24iLCJvVkxQYXJhbWV0ZXIiLCJhQ29sdW1uSW5mbyIsIm9Db2x1bW5JbmZvIiwiY29sdW1uSW5mbyIsInRleHRDb2x1bW5OYW1lIiwia2V5Q29sdW1uSGlkZGVuIiwia2V5Q29sdW1uRGlzcGxheUZvcm1hdCIsIl9oYXNJbXBvcnRhbmNlSGlnaCIsIm9WYWx1ZUxpc3RDb250ZXh0Iiwib1BhcmFtZXRlciIsIiRFbnVtTWVtYmVyIiwiX2J1aWxkJFNlbGVjdFN0cmluZyIsImNvbnRyb2wiLCJvVmlld0RhdGEiLCJnZXRNb2RlbCIsIm9EYXRhIiwiZ2V0RGF0YSIsImFDb2x1bW5zIiwiY29sdW1ucyIsInJlZHVjZSIsInNRdWVyeSIsIm9Qcm9wZXJ0eSIsImluY2x1ZGVzIiwiX2dldFZhbHVlSGVscENvbHVtbkRpc3BsYXlGb3JtYXQiLCJvUHJvcGVydHlBbm5vdGF0aW9ucyIsImlzVmFsdWVIZWxwV2l0aEZpeGVkVmFsdWVzIiwic0Rpc3BsYXlNb2RlIiwiQ29tbW9uVXRpbHMiLCJjb21wdXRlRGlzcGxheU1vZGUiLCJvVGV4dEFubm90YXRpb24iLCJvVGV4dEFycmFuZ2VtZW50QW5ub3RhdGlvbiIsIiRQYXRoIiwiZ2V0UHJlc2VudGF0aW9uVmFyaWFudCIsInZhbHVlTGlzdCIsInByZXNlbnRhdGlvblZhcmlhbnRRdWFsaWZpZXIiLCJQcmVzZW50YXRpb25WYXJpYW50UXVhbGlmaWVyIiwicHJlc2VudGF0aW9uVmFyaWFudFBhdGgiLCJWYWx1ZUxpc3RIZWxwZXIiLCJnZXRWYWx1ZUxpc3RDb2xsZWN0aW9uRW50aXR5U2V0IiwibVZhbHVlTGlzdCIsImNyZWF0ZUJpbmRpbmdDb250ZXh0IiwiaXNUcmVlVGFibGVUeXBlIiwiUmVjdXJzaXZlSGllcmFyY2h5UXVhbGlmaWVyIiwiZ2V0VGFibGVEZWxlZ2F0ZSIsInNEZWZhdWx0U29ydFByb3BlcnR5TmFtZSIsInByZXNlbnRhdGlvblZhcmlhbnQiLCJyZWN1cnNpdmVIaWVyYXJjaHlRdWFsaWZpZXIiLCJpbml0aWFsRXhwYW5zaW9uTGV2ZWwiLCJJbml0aWFsRXhwYW5zaW9uTGV2ZWwiLCJnZXRTb3J0Q29uZGl0aW9uc0Zyb21QcmVzZW50YXRpb25WYXJpYW50IiwiaXNTdWdnZXN0aW9uIiwiYXNDdXN0b21kYXRhIiwiYXJndW1lbnRzIiwibGVuZ3RoIiwiU29ydE9yZGVyIiwic29ydENvbmRpdGlvbnMiLCJzb3J0ZXJzIiwiZm9yRWFjaCIsImNvbmRpdGlvbiIsInNvcnRlciIsInByb3BlcnR5UGF0aCIsIlByb3BlcnR5IiwiJFByb3BlcnR5UGF0aCIsIm5hbWUiLCJEZXNjZW5kaW5nIiwiZGVzY2VuZGluZyIsImFzY2VuZGluZyIsInB1c2giLCJzdHJpbmdDb252ZXJ0ZXIiLCJDb21tb25IZWxwZXIiLCJzdHJpbmdpZnlDdXN0b21EYXRhIiwiSlNPTiIsInN0cmluZ2lmeSIsImdldFNvcnRDb25kaXRpb25zRm9yVmFsdWVMaXN0Iiwic29ydENvbmRpdGlvbnNGcm9tUHJlc2VudGF0aW9uVmFyaWFudCIsImdldFByb3BlcnR5UGF0aCIsIm9QYXJhbWV0ZXJzIiwiVW5ib3VuZEFjdGlvbiIsIkVudGl0eVR5cGVQYXRoIiwiQWN0aW9uIiwic3Vic3RyaW5nIiwibGFzdEluZGV4T2YiLCJnZXRWYWx1ZUxpc3RQcm9wZXJ0eSIsIm9Qcm9wZXJ0eUNvbnRleHQiLCJvVmFsdWVMaXN0TW9kZWwiLCJnZXRDb2x1bW5WaXNpYmlsaXR5Iiwib1ZhbHVlTGlzdCIsIm9Tb3VyY2UiLCJpc0Ryb3BEb3duTGlzdCIsInZhbHVlSGVscFdpdGhGaXhlZFZhbHVlcyIsImlzVmlzaWJsZSIsImNvbHVtbkluZm9zIiwiaXNEaWFsb2dUYWJsZSIsImNvbHVtbldpdGhIaWRkZW5Bbm5vdGF0aW9uIiwiY29sdW1uTmFtZSIsImhhc0hpZGRlbkFubm90YXRpb24iLCJnZXRDb2x1bW5WaXNpYmlsaXR5SW5mbyIsInNQcm9wZXJ0eUZ1bGxQYXRoIiwiYklzRHJvcERvd25MaXN0ZSIsIm9NZXRhTW9kZWwiLCJhQ29sdW1uSW5mb3MiLCJvQ29sdW1uSW5mb3MiLCJnZXRUYWJsZUl0ZW1zUGFyYW1ldGVycyIsInJlcXVlc3RHcm91cElkIiwiaXRlbVBhcmFtZXRlcnMiLCJzZWxlY3RTdHJpbmciLCJzZWxlY3RTdHJpbmdQYXJ0IiwiaXNTdXNwZW5kZWQiLCJkZWZhdWx0U29ydFByb3BlcnR5TmFtZSIsImpvaW4iLCJoYXNJbXBvcnRhbmNlIiwiZ2V0TWluU2NyZWVuV2lkdGgiLCJnZXRDb2x1bW5XaWR0aCIsImlzVmFsdWVMaXN0V2l0aEZpeGVkVmFsdWVzIiwiaXNTbWFsbERldmljZSIsInRhcmdldE9iamVjdCIsInByb3BlcnR5IiwicmVsYXRlZFByb3BlcnR5IiwiYWRkaXRpb25hbFByb3BlcnR5IiwiZ2V0QXNzb2NpYXRlZFRleHRQcm9wZXJ0eSIsImdldEFzc29jaWF0ZWRDdXJyZW5jeVByb3BlcnR5IiwiZ2V0QXNzb2NpYXRlZFVuaXRQcm9wZXJ0eSIsImdldEFzc29jaWF0ZWRUaW1lem9uZVByb3BlcnR5IiwidGV4dEFubm90YXRpb24iLCJhbm5vdGF0aW9ucyIsIkNvbW1vbiIsIlRleHQiLCJ0ZXh0QXJyYW5nZW1lbnQiLCJVSSIsIlRleHRBcnJhbmdlbWVudCIsInRvU3RyaW5nIiwibGFiZWwiLCJMYWJlbCIsImRpc3BsYXlNb2RlIiwiZ2V0RGlzcGxheU1vZGUiLCJzaXplIiwiaW5zdGFuY2VzIiwicHJvcCIsInByb3BlcnR5VHlwZUNvbmZpZyIsImdldFR5cGVDb25maWciLCJQcm9wZXJ0eU9EYXRhQ29uc3RydWN0b3IiLCJPYmplY3RQYXRoIiwiZ2V0IiwidHlwZSIsImZvcm1hdE9wdGlvbnMiLCJjb25zdHJhaW50cyIsInNXaWR0aCIsIlV0aWwiLCJjYWxjQ29sdW1uV2lkdGgiLCJwYXJzZUZsb2F0IiwicmVwbGFjZSIsIkxvZyIsImVycm9yIiwiZ2V0T3V0UGFyYW1ldGVyUGF0aHMiLCJhUGFyYW1ldGVycyIsInNQYXRoIiwiZW5kc1dpdGgiLCJlbnRpdHlJc1NlYXJjaGFibGUiLCJwcm9wZXJ0eUFubm90YXRpb25zIiwiY29sbGVjdGlvbkFubm90YXRpb25zIiwic2VhcmNoU3VwcG9ydGVkIiwiU2VhcmNoU3VwcG9ydGVkIiwic2VhcmNoYWJsZSIsIlNlYXJjaGFibGUiLCJfZ2V0Q29uZGl0aW9uUGF0aCIsImVudGl0eVNldCIsInBhcnRzIiwic3BsaXQiLCJjb25kaXRpb25QYXRoIiwicGFydGlhbFBhdGgiLCJwYXJ0Iiwic2hpZnQiLCIka2luZCIsIiRpc0NvbGxlY3Rpb24iLCJfZ2V0Q29sdW1uRGVmaW5pdGlvbkZyb21TZWxlY3Rpb25GaWVsZHMiLCJlbnRpdHlUeXBlQW5ub3RhdGlvbnMiLCJzZWxlY3Rpb25GaWVsZHMiLCJzZWxlY3Rpb25GaWVsZCIsInNlbGVjdGlvbkZpZWxkUGF0aCIsImNvbHVtbkRlZiIsImZpbHRlcmFibGUiLCJpc1Byb3BlcnR5RmlsdGVyYWJsZSIsIl9tZXJnZUNvbHVtbkRlZmluaXRpb25zRnJvbVByb3BlcnRpZXMiLCJ2YWx1ZUxpc3RQcm9wZXJ0eSIsImNvbHVtblBhdGgiLCJjb2x1bW5Qcm9wZXJ0eVR5cGUiLCJ0ZXh0UHJvcGVydHlQYXRoIiwidGV4dFBhdGgiLCJmaWx0ZXJJbk91dFBhcmFtZXRlcnMiLCJ2aFBhcmFtZXRlcnMiLCJ0eXBlRmlsdGVyIiwiZmlsdGVyIiwicGFyYW1ldGVyIiwicGFybWV0ZXJUeXBlIiwiZ2V0SW5QYXJhbWV0ZXJzIiwiZ2V0T3V0UGFyYW1ldGVycyIsImNyZWF0ZVZIVUlNb2RlbCIsInZhbHVlSGVscCIsInZoVUlNb2RlbCIsIkpTT05Nb2RlbCIsInNldE1vZGVsIiwic2V0UHJvcGVydHkiLCJfZ2V0RGlhbG9nVGl0bGUiLCJ2YWx1ZWhlbHBMYWJlbCIsInByb3BlcnR5TGFiZWwiLCJnZXRQcm9wZXJ0eSIsImRhdGFGaWVsZExhYmVsIiwiZ2V0Q29udHJvbCIsImRlc3Ryb3lWSENvbnRlbnQiLCJnZXREaWFsb2ciLCJkZXN0cm95Q29udGVudCIsImdldFR5cGVhaGVhZCIsInB1dERlZmF1bHRRdWFsaWZpZXJGaXJzdCIsInF1YWxpZmllcnMiLCJpbmRleERlZmF1bHRWSCIsImluZGV4T2YiLCJ1bnNoaWZ0Iiwic3BsaWNlIiwiX2dldENvbnRleHRQcmVmaXgiLCJiaW5kaW5nQ29udGV4dCIsInByb3BlcnR5QmluZGluZ1BhcnRzIiwiZ2V0UGF0aCIsImJpbmRpZ0NvbnRleHRQYXJ0cyIsImNvbnRleHRQcmVmaXhQYXJ0cyIsImkiLCJfZ2V0VmhQYXJhbWV0ZXIiLCJjb25kaXRpb25Nb2RlbCIsImNvbnRleHRQcmVmaXgiLCJ2aE1ldGFNb2RlbCIsImxvY2FsRGF0YVByb3BlcnR5UGF0aCIsInZhbHVlUGF0aCIsImdldEJpbmRpbmdDb250ZXh0IiwiZ2V0UGFyZW50IiwiaXNBIiwiX3BhcmFtZXRlcklzQSIsImZpcnN0TmF2aWdhdGlvblByb3BlcnR5Iiwib0JvdW5kRW50aXR5IiwiZ2V0TWV0YUNvbnRleHQiLCJzUGF0aE9mVGFibGUiLCJnZXRSb3dCaW5kaW5nIiwiZmlsdGVyQmFyQVBJIiwiZmlsdGVyQmFyTWV0YVBhdGgiLCJtZXRhUGF0aCIsInZhbHVlSGVscENvbnRleHRQYXRoIiwiZ2V0TWV0YVBhdGgiLCJjb250ZXh0TWV0YVBhdGgiLCJNZXRhUGF0aCIsImNvbnZlcnRUeXBlcyIsIm5ld1BhdGgiLCJnZXRNZXRhUGF0aEZvclBhdGgiLCJnZXRUYXJnZXQiLCJ0YXJnZXRFbnRpdHlTZXQiLCJnZXRDbG9zZXN0RW50aXR5U2V0IiwiZ2V0TWV0YVBhdGhGb3JPYmplY3QiLCJnZXRSZWxhdGl2ZVBhdGgiLCJzb3VyY2UiLCJoZWxwUGF0aCIsImNvbnN0YW50VmFsdWUiLCJDb25zdGFudCIsImluaXRpYWxWYWx1ZUlzU2lnbmlmaWNhbnQiLCJCb29sZWFuIiwiSW5pdGlhbFZhbHVlSXNTaWduaWZpY2FudCIsInBhcmFtZXRlclR5cGVzIiwiX2VucmljaFBhdGgiLCJwcm9wZXJ0eU5hbWUiLCJleHRlcm5hbElkUGF0aCIsImtleSIsImV4dGVybmFsSWRQcm9wZXJ0eSIsInBvcCIsImZpZWxkUHJvcGVydHlQYXRoIiwiZGVzY3JpcHRpb25QYXRoIiwiX2VucmljaEtleXMiLCJ2aEtleXMiLCJnZXRJbkFuZE91dFBhcmFtZXRlcnNMaXN0IiwiX2dldEVudGl0eVR5cGUiLCJtZXRhTW9kZWxWSCIsImVudGl0eVNldFBhdGgiLCJyZXF1ZXN0T2JqZWN0IiwiX3Byb2Nlc3NQYXJhbWV0ZXJzIiwiYW5ub3RhdGlvblZhbHVlTGlzdFR5cGUiLCJ2YWx1ZUhlbHBRdWFsaWZpZXIiLCJwYXlsb2FkIiwiZW50aXR5VHlwZSIsImlzRm9yTXVsdGlWYWx1ZUZpZWxkIiwidXNlTXVsdGlWYWx1ZUZpZWxkIiwiJEtleSIsImZpcnN0S2V5IiwiTG9jYWxEYXRhUHJvcGVydHkiLCJpc1BvdGVudGlhbGx5U2Vuc2l0aXZlIiwidmhQYXJhbWV0ZXIiLCJfbG9nRXJyb3IiLCJjb25zdGFudFBhcmFtZXRlciIsInZhbHVlbGlzdEluZm8iLCJrZXlQYXRoIiwic3RhdHVzIiwibWVzc2FnZSIsIkVycm9yIiwiU3RyaW5nIiwibXNnIiwiZ2V0VmFsdWVMaXN0SW5mbyIsInZhbHVlTGlzdEluZm9zIiwicHJvcGVydHlQYXRoUGFydHMiLCJ2YWx1ZUxpc3RCeVF1YWxpZmllciIsInJlcXVlc3RWYWx1ZUxpc3RJbmZvIiwidmFsdWVIZWxwUXVhbGlmaWVycyIsIk9iamVjdCIsImtleXMiLCIkcXVhbGlmaWVyIiwiZXJyIiwiQUxMRlJBR01FTlRTIiwibG9nRnJhZ21lbnQiLCJfbG9nVGVtcGxhdGVkRnJhZ21lbnRzIiwiZnJhZ21lbnROYW1lIiwiZnJhZ21lbnREZWZpbml0aW9uIiwibG9nSW5mbyIsImZyYWdtZW50IiwiZ2V0TGV2ZWwiLCJMZXZlbCIsIkRFQlVHIiwic2V0VGltZW91dCIsIl90ZW1wbGF0ZUZyYWdtZW50Iiwic291cmNlTW9kZWwiLCJjb250YWluaW5nVmlldyIsImdldFRhcmdldFZpZXciLCJhcHBDb21wb25lbnQiLCJnZXRBcHBDb21wb25lbnQiLCJsb2NhbFZhbHVlTGlzdEluZm8iLCJ2YWx1ZUxpc3RNb2RlbCIsInZhbHVlTGlzdFNlcnZpY2VNZXRhTW9kZWwiLCJ2aWV3RGF0YSIsImNvbnZlcnRlclR5cGUiLCJYTUxQcmVwcm9jZXNzb3IiLCJwcm9jZXNzIiwiWE1MVGVtcGxhdGVQcm9jZXNzb3IiLCJsb2FkVGVtcGxhdGUiLCJiaW5kaW5nQ29udGV4dHMiLCJjb250ZXh0UGF0aCIsIm1vZGVscyIsInRlbXBsYXRlQ29tcG9uZW50IiwiZ2V0Q29udHJvbGxlciIsImdldE93bmVyQ29tcG9uZW50IiwicnVuQXNPd25lciIsIkZyYWdtZW50IiwibG9hZCIsImRlZmluaXRpb24iLCJjb250cm9sbGVyIiwiX2dldENvbnRlbnRJZCIsInZhbHVlSGVscElkIiwiaXNUeXBlYWhlYWQiLCJjb250ZW50VHlwZSIsIl9hZGRJbk91dFBhcmFtZXRlcnNUb1BheWxvYWQiLCJ2aFByb3BlcnRpZXMiLCJTZXQiLCJhZGQiLCJBcnJheSIsImZyb20iLCJ0ZXh0QXJyYW5nZW1lbnRBbm5vdGF0aW9uIiwiX2dldFdpZHRoSW5SZW0iLCJpc1VuaXRWYWx1ZUhlbHAiLCJ3aWR0aCIsIiQiLCJmbG9hdFdpZHRoIiwiUmVtIiwiZnJvbVB4IiwiaXNOYU4iLCJfZ2V0VGFibGVXaWR0aCIsInRhYmxlIiwibWluV2lkdGgiLCJpc011bHRpU2VsZWN0IiwiZ2V0Q29sdW1ucyIsInZpc2libGVDb2x1bW5zIiwiZ2V0VmlzaWJsZSIsImluaXRpYWxTdW0iLCJzdW1XaWR0aCIsInN1bSIsImdldFdpZHRoIiwiTWF0aCIsIm1heCIsIl9nZXRKU09OTW9kZWxGb3JEaWFsb2ciLCJjb250ZW50IiwiaXNEcm9wRG93bkxpc3RlIiwiaWQiLCJnZXRJZCIsImdyb3VwSWQiLCJiU3VnZ2VzdGlvbiIsIl9nZXRKU09OTW9kZWxGb3JDb25kaXRpb24iLCJjYXNlU2Vuc2l0aXZlIiwiX2dldEpTT05Nb2RlbEZvclR5cGVhaGVhZCIsImNvbnRlbnRJZCIsIl9jcmVhdGVWYWx1ZUhlbHBUeXBlYWhlYWQiLCJzZXRLZXlQYXRoIiwic2V0RGVzY3JpcHRpb25QYXRoIiwiaGlzdG9yeSIsImVuYWJsZWQiLCJjaGVja0hpc3RvcnlFbmFibGVkIiwiZGF0YSIsImluZm8iLCJnZXRNZXRhZGF0YSIsImdldE5hbWUiLCJzZXRUYWJsZSIsImZpZWxkIiwidGFibGVNb2RlIiwiZ2V0TWF4Q29uZGl0aW9ucyIsInNldE1vZGUiLCJhZGRFdmVudERlbGVnYXRlIiwib25BZnRlclJlbmRlcmluZyIsIlJlc2l6ZUhhbmRsZXIiLCJyZWdpc3RlciIsIl9zZXRUYWJsZVdpZHRoIiwicmVkdWNlV2lkdGhGb3JVbml0VmFsdWVIZWxwIiwidGFibGVXaWR0aCIsInNldFdpZHRoIiwiaGlzdG9yeVNldHRpbmdzIiwiZ2V0TWFuaWZlc3RFbnRyeSIsImZpZWxkcyIsImhpc3RvcnlFbmFibGVkIiwiaXNWYWx1ZUxpc3RTZWFyY2hhYmxlIiwidmFsdWVMaXN0TWV0YW1vZGVsIiwiX2NyZWF0ZVZhbHVlSGVscERpYWxvZyIsImNvbmRpdGlvbkNvbnRlbnQiLCJzb3VyY2VNb2RlbERpYWxvZyIsImZpcnN0VHlwZUFoZWFkQ29udGVudCIsImdldENvbnRlbnQiLCJnZXRDYXNlU2Vuc2l0aXZlIiwic291cmNlTW9kZWxDb25kaXRpb24iLCJhZGREZXBlbmRlbnQiLCJzZXRWYWx1ZUhlbHAiLCJjb25kaXRpb25UYWJsZSIsImdldFRhYmxlIiwidGFibGVQcm9taXNlIiwiZmlsdGVyQmFyUHJvbWlzZSIsImZpbHRlckJhciIsIlByb21pc2UiLCJhbGwiLCJzZXRGaWx0ZXJCYXIiLCJzZXRGaWx0ZXIiLCJpbml0aWFsaXplZCIsInNldENvcHlQcm92aWRlclZpc2liaWxpdHkiLCJtZGNUYWJsZSIsIl9zZXRTaG93UDEzbkJ1dHRvbiIsImdldENvcHlQcm92aWRlciIsInNldFZpc2libGUiLCJfZ2V0Q29udGVudEJ5SWQiLCJjb250ZW50TGlzdCIsIml0ZW0iLCJfY3JlYXRlUG9wb3ZlckNvbnRlbnQiLCJ1c2VBc1ZhbHVlSGVscCIsIk1UYWJsZSIsImdyb3VwIiwiX2NyZWF0ZURpYWxvZ0NvbnRlbnQiLCJmb3JjZUJpbmQiLCJNRENUYWJsZSIsIl9zaG93Q29uZGl0aW9uc0NvbnRlbnQiLCJjb250YWluZXIiLCJjb25kaXRpb25zQ29udGVudCIsIkNvbmRpdGlvbnMiLCJhZGRDb250ZW50IiwiX2FsaWduT3JDcmVhdGVDb250ZW50Iiwic2hvd0NvbmRpdGlvblBhbmVsIiwiRmV0Y2hWYWx1ZXMiLCJpbnNlcnRDb250ZW50IiwiX3ByZXBhcmVWYWx1ZUhlbHBUeXBlQWhlYWQiLCJxdWFsaWZpZXJGb3JUeXBlYWhlYWQiLCJzdWJWYWx1ZUxpc3RJbmZvIiwiZ2V0VXNlQXNWYWx1ZUhlbHAiLCJyZW1vdmVDb250ZW50IiwiX3ByZXBhcmVWYWx1ZUhlbHBEaWFsb2ciLCJzZWxlY3RlZENvbnRlbnRJZCIsImNvbnRlbnRMaXN0SXRlbSIsImhhc09wZXJhdG9yRVEiLCJnZXRPcGVyYXRvcnMiLCJzZWxlY3RlZEluZm8iLCJzZWxlY3RlZENvbnRlbnQiLCJ0aXRsZSIsImdldFRyYW5zbGF0ZWRUZXh0RnJvbUV4cEJpbmRpbmdTdHJpbmciLCJzZXRUaXRsZSIsIl9hZGREZXNjcmlwdGlvbkluZm9zVG9QYXlsb2FkIiwidmFsdWVIZWxwRGVzY3JpcHRpb25QYXRoIiwiY29udmVydGVkTWV0YWRhdGEiLCJwcm9wZXJ0eURlc2NyaXB0aW9uUGF0aCIsInJlc29sdmVQYXRoIiwidGFyZ2V0IiwidmFsdWVIZWxwS2V5UGF0aCIsIm1heExlbmd0aCIsImV4dGVybmFsSWRGdWxsUGF0aCIsInNob3dWYWx1ZUxpc3QiLCJtYXAiLCJjb2wiXSwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzIjpbIlZhbHVlTGlzdEhlbHBlci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IEVudGl0eVR5cGUsIFBhdGhBbm5vdGF0aW9uRXhwcmVzc2lvbiwgUHJvcGVydHkgfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXNcIjtcbmltcG9ydCB7IENvbW1vbkFubm90YXRpb25UeXBlcyB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy92b2NhYnVsYXJpZXMvQ29tbW9uXCI7XG5pbXBvcnQgdHlwZSB7IFByZXNlbnRhdGlvblZhcmlhbnQgfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvdm9jYWJ1bGFyaWVzL1VJXCI7XG5pbXBvcnQgTG9nIGZyb20gXCJzYXAvYmFzZS9Mb2dcIjtcbmltcG9ydCBPYmplY3RQYXRoIGZyb20gXCJzYXAvYmFzZS91dGlsL09iamVjdFBhdGhcIjtcbmltcG9ydCB0eXBlIHsgQ29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb24gfSBmcm9tIFwic2FwL2ZlL2Jhc2UvQmluZGluZ1Rvb2xraXRcIjtcbmltcG9ydCBDb21tb25VdGlscyBmcm9tIFwic2FwL2ZlL2NvcmUvQ29tbW9uVXRpbHNcIjtcbmltcG9ydCB0eXBlIHsgTWV0YU1vZGVsUHJvcGVydHlBbm5vdGF0aW9ucyB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL01ldGFNb2RlbENvbnZlcnRlclwiO1xuaW1wb3J0IHsgY29udmVydFR5cGVzIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvTWV0YU1vZGVsQ29udmVydGVyXCI7XG5pbXBvcnQgeyBnZXRTb3J0UmVzdHJpY3Rpb25zSW5mbywgaXNQcm9wZXJ0eUZpbHRlcmFibGUgfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9NZXRhTW9kZWxGdW5jdGlvblwiO1xuaW1wb3J0IE1ldGFQYXRoIGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL01ldGFQYXRoXCI7XG5pbXBvcnQgdHlwZSB7IEZpZWxkRGF0YVR5cGUgfSBmcm9tIFwic2FwL2ZlL2NvcmUvc2VydmljZXMvVmFsdWVIZWxwSGlzdG9yeVNlcnZpY2VGYWN0b3J5XCI7XG5pbXBvcnQgdHlwZSB7IERhdGFNb2RlbE9iamVjdFBhdGggfSBmcm9tIFwic2FwL2ZlL2NvcmUvdGVtcGxhdGluZy9EYXRhTW9kZWxQYXRoSGVscGVyXCI7XG5pbXBvcnQge1xuXHRnZXRBc3NvY2lhdGVkQ3VycmVuY3lQcm9wZXJ0eSxcblx0Z2V0QXNzb2NpYXRlZFRleHRQcm9wZXJ0eSxcblx0Z2V0QXNzb2NpYXRlZFRpbWV6b25lUHJvcGVydHksXG5cdGdldEFzc29jaWF0ZWRVbml0UHJvcGVydHlcbn0gZnJvbSBcInNhcC9mZS9jb3JlL3RlbXBsYXRpbmcvUHJvcGVydHlIZWxwZXJcIjtcbmltcG9ydCB7IGdldERpc3BsYXlNb2RlLCBnZXRUeXBlQ29uZmlnIH0gZnJvbSBcInNhcC9mZS9jb3JlL3RlbXBsYXRpbmcvVUlGb3JtYXR0ZXJzXCI7XG5pbXBvcnQgQ29tbW9uSGVscGVyIGZyb20gXCJzYXAvZmUvbWFjcm9zL0NvbW1vbkhlbHBlclwiO1xuaW1wb3J0IHR5cGUgRmlsdGVyQmFyQVBJIGZyb20gXCJzYXAvZmUvbWFjcm9zL2ZpbHRlckJhci9GaWx0ZXJCYXJBUElcIjtcbmltcG9ydCB0eXBlIFRhYmxlIGZyb20gXCJzYXAvbS9UYWJsZVwiO1xuaW1wb3J0IFV0aWwgZnJvbSBcInNhcC9tL3RhYmxlL1V0aWxcIjtcbmltcG9ydCB0eXBlIENvbnRyb2wgZnJvbSBcInNhcC91aS9jb3JlL0NvbnRyb2xcIjtcbmltcG9ydCBGcmFnbWVudCBmcm9tIFwic2FwL3VpL2NvcmUvRnJhZ21lbnRcIjtcbmltcG9ydCBSZXNpemVIYW5kbGVyIGZyb20gXCJzYXAvdWkvY29yZS9SZXNpemVIYW5kbGVyXCI7XG5pbXBvcnQgWE1MVGVtcGxhdGVQcm9jZXNzb3IgZnJvbSBcInNhcC91aS9jb3JlL1hNTFRlbXBsYXRlUHJvY2Vzc29yXCI7XG5pbXBvcnQgWE1MUHJlcHJvY2Vzc29yIGZyb20gXCJzYXAvdWkvY29yZS91dGlsL1hNTFByZXByb2Nlc3NvclwiO1xuaW1wb3J0IFJlbSBmcm9tIFwic2FwL3VpL2RvbS91bml0cy9SZW1cIjtcbmltcG9ydCB0eXBlIEZpZWxkIGZyb20gXCJzYXAvdWkvbWRjL0ZpZWxkXCI7XG5pbXBvcnQgdHlwZSBGaWx0ZXJGaWVsZCBmcm9tIFwic2FwL3VpL21kYy9GaWx0ZXJGaWVsZFwiO1xuaW1wb3J0IHR5cGUgTXVsdGlWYWx1ZUZpZWxkIGZyb20gXCJzYXAvdWkvbWRjL011bHRpVmFsdWVGaWVsZFwiO1xuaW1wb3J0IHR5cGUgTWRjSW5uZXJUYWJsZSBmcm9tIFwic2FwL3VpL21kYy9UYWJsZVwiO1xuaW1wb3J0IHR5cGUgVmFsdWVIZWxwIGZyb20gXCJzYXAvdWkvbWRjL1ZhbHVlSGVscFwiO1xuaW1wb3J0IHR5cGUgRmllbGRCYXNlIGZyb20gXCJzYXAvdWkvbWRjL2ZpZWxkL0ZpZWxkQmFzZVwiO1xuaW1wb3J0IHR5cGUgTWRjRmlsdGVyQmFyIGZyb20gXCJzYXAvdWkvbWRjL2ZpbHRlcmJhci9GaWx0ZXJCYXJCYXNlXCI7XG5pbXBvcnQgdHlwZSBGaWx0ZXJCYXIgZnJvbSBcInNhcC91aS9tZGMvdmFsdWVoZWxwL0ZpbHRlckJhclwiO1xuaW1wb3J0IHR5cGUgQ29udGFpbmVyIGZyb20gXCJzYXAvdWkvbWRjL3ZhbHVlaGVscC9iYXNlL0NvbnRhaW5lclwiO1xuaW1wb3J0IHR5cGUgQ29udGVudCBmcm9tIFwic2FwL3VpL21kYy92YWx1ZWhlbHAvYmFzZS9Db250ZW50XCI7XG5pbXBvcnQgQ29uZGl0aW9ucyBmcm9tIFwic2FwL3VpL21kYy92YWx1ZWhlbHAvY29udGVudC9Db25kaXRpb25zXCI7XG5pbXBvcnQgTURDVGFibGUsIHsgdHlwZSAkTURDVGFibGVTZXR0aW5ncyB9IGZyb20gXCJzYXAvdWkvbWRjL3ZhbHVlaGVscC9jb250ZW50L01EQ1RhYmxlXCI7XG5pbXBvcnQgTVRhYmxlLCB7IHR5cGUgJE1UYWJsZVNldHRpbmdzIH0gZnJvbSBcInNhcC91aS9tZGMvdmFsdWVoZWxwL2NvbnRlbnQvTVRhYmxlXCI7XG5pbXBvcnQgdHlwZSBCYXNlQ29udGV4dCBmcm9tIFwic2FwL3VpL21vZGVsL0NvbnRleHRcIjtcbmltcG9ydCBKU09OTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9qc29uL0pTT05Nb2RlbFwiO1xuaW1wb3J0IHR5cGUgT0RhdGFUeXBlIGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdHlwZS9PRGF0YVR5cGVcIjtcbmltcG9ydCB0eXBlIENvbnRleHQgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9Db250ZXh0XCI7XG5pbXBvcnQgdHlwZSBPRGF0YU1ldGFNb2RlbCBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L09EYXRhTWV0YU1vZGVsXCI7XG5pbXBvcnQgdHlwZSBPRGF0YU1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvT0RhdGFNb2RlbFwiO1xuaW1wb3J0IHR5cGUgeyBNZXRhTW9kZWxFbnRpdHlTZXRBbm5vdGF0aW9uLCBNZXRhTW9kZWxUeXBlIH0gZnJvbSBcInR5cGVzL21ldGFtb2RlbF90eXBlc1wiO1xuXG5leHBvcnQgdHlwZSBBbm5vdGF0aW9uVmFsdWVMaXN0UGFyYW1ldGVyID0ge1xuXHQkVHlwZTogc3RyaW5nO1xuXHRWYWx1ZUxpc3RQcm9wZXJ0eTogc3RyaW5nO1xuXHRMb2NhbERhdGFQcm9wZXJ0eT86IHtcblx0XHQkUHJvcGVydHlQYXRoOiBzdHJpbmc7XG5cdH07XG5cdENvbnN0YW50Pzogc3RyaW5nO1xuXHRJbml0aWFsVmFsdWVJc1NpZ25pZmljYW50PzogYm9vbGVhbjtcblx0W1wiQGNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkltcG9ydGFuY2VcIl0/OiB7XG5cdFx0JEVudW1NZW1iZXI6IHN0cmluZztcblx0fTtcbn07XG5cbnR5cGUgTG9nRnJhZ21lbnRNZXRob2QgPSAoaW5mbzogeyBwYXRoOiBzdHJpbmc7IGZyYWdtZW50TmFtZTogc3RyaW5nOyBmcmFnbWVudDogdW5rbm93biB9KSA9PiB2b2lkO1xuXG4vLyBjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuVmFsdWVMaXN0VHlwZVxuZXhwb3J0IHR5cGUgQW5ub3RhdGlvblZhbHVlTGlzdFR5cGUgPSB7XG5cdCRUeXBlOiBzdHJpbmc7IC8vIENvbW1vbkFubm90YXRpb25UeXBlcy5WYWx1ZUxpc3RUeXBlO1xuXHRMYWJlbD86IHN0cmluZztcblx0Q29sbGVjdGlvblBhdGg6IHN0cmluZztcblx0Q29sbGVjdGlvblJvb3Q/OiBzdHJpbmc7XG5cdERpc3RpbmN0VmFsdWVzU3VwcG9ydGVkPzogYm9vbGVhbjtcblx0U2VhcmNoU3VwcG9ydGVkPzogYm9vbGVhbjtcblx0RmV0Y2hWYWx1ZXM/OiBudW1iZXI7XG5cdFByZXNlbnRhdGlvblZhcmlhbnRRdWFsaWZpZXI/OiBzdHJpbmc7XG5cdFNlbGVjdGlvblZhcmlhbnRRdWFsaWZpZXI/OiBzdHJpbmc7XG5cdFBhcmFtZXRlcnM6IEFubm90YXRpb25WYWx1ZUxpc3RQYXJhbWV0ZXJbXTtcblx0JG1vZGVsOiBPRGF0YU1vZGVsO1xuXHQkcXVhbGlmaWVyPzogc3RyaW5nOyAvLyBkZWZpbmVkIGluIGNhc2Ugb2YgVmFsdWVMaXN0V2l0aEZpeGVkVmFsdWVzXG59O1xuXG5leHBvcnQgdHlwZSBBbm5vdGF0aW9uVmFsdWVMaXN0VHlwZUJ5UXVhbGlmaWVyID0gUmVjb3JkPHN0cmluZywgQW5ub3RhdGlvblZhbHVlTGlzdFR5cGU+O1xuXG5jb25zdCBjb2x1bW5Ob3RBbHJlYWR5RGVmaW5lZCA9IChjb2x1bW5EZWZzOiBDb2x1bW5EZWZbXSwgdmhLZXk6IHN0cmluZyk6IGJvb2xlYW4gPT4gIWNvbHVtbkRlZnMuc29tZSgoY29sdW1uKSA9PiBjb2x1bW4ucGF0aCA9PT0gdmhLZXkpO1xuXG5leHBvcnQgY29uc3QgQW5ub3RhdGlvbkxhYmVsID0gXCJAY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLkxhYmVsXCIsXG5cdEFubm90YXRpb25UZXh0ID0gXCJAY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLlRleHRcIixcblx0QW5ub3RhdGlvblRleHRVSVRleHRBcnJhbmdlbWVudCA9IFwiQGNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5UZXh0QGNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLlRleHRBcnJhbmdlbWVudFwiLFxuXHRBbm5vdGF0aW9uVmFsdWVMaXN0UGFyYW1ldGVySW4gPSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5WYWx1ZUxpc3RQYXJhbWV0ZXJJblwiLFxuXHRBbm5vdGF0aW9uVmFsdWVMaXN0UGFyYW1ldGVyQ29uc3RhbnQgPSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5WYWx1ZUxpc3RQYXJhbWV0ZXJDb25zdGFudFwiLFxuXHRBbm5vdGF0aW9uVmFsdWVMaXN0UGFyYW1ldGVyT3V0ID0gXCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuVmFsdWVMaXN0UGFyYW1ldGVyT3V0XCIsXG5cdEFubm90YXRpb25WYWx1ZUxpc3RQYXJhbWV0ZXJJbk91dCA9IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLlZhbHVlTGlzdFBhcmFtZXRlckluT3V0XCIsXG5cdEFubm90YXRpb25WYWx1ZUxpc3RXaXRoRml4ZWRWYWx1ZXMgPSBcIkBjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuVmFsdWVMaXN0V2l0aEZpeGVkVmFsdWVzXCIsXG5cdEFubm90YXRpb25zUGVyc29uYWxEYXRhUG90ZW50aWFsbHlTZW5zaXRpdmUgPSBcIkBjb20uc2FwLnZvY2FidWxhcmllcy5QZXJzb25hbERhdGEudjEuSXNQb3RlbnRpYWxseVNlbnNpdGl2ZVwiLFxuXHRBbm5vdGF0aW9uc1ZhbHVlTGlzdFJlbGV2YW50UXVhbGlmaWVycyA9IFwiQGNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5WYWx1ZUxpc3RSZWxldmFudFF1YWxpZmllcnNcIjtcblxudHlwZSBBbm5vdGF0aW9uc0ZvclByb3BlcnR5ID0ge1xuXHRcIkBjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuVmFsdWVMaXN0XCI/OiB7XG5cdFx0U2VhcmNoU3VwcG9ydGVkPzogYm9vbGVhbjtcblx0fTtcblx0XCJAY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLkxhYmVsXCI/OiBzdHJpbmc7IC8vIEFubm90YXRpb25MYWJlbFxuXHRcIkBjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuVGV4dFwiPzoge1xuXHRcdC8vIEFubm90YXRpb25UZXh0XG5cdFx0JFBhdGg6IHN0cmluZztcblx0fTtcblx0XCJAY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLlRleHRAY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuVGV4dEFycmFuZ2VtZW50XCI/OiB7XG5cdFx0Ly8gQW5ub3RhdGlvblRleHRVSVRleHRBcnJhbmdlbWVudFxuXHRcdCRFbnVtTWVtYmVyPzogc3RyaW5nO1xuXHR9O1xuXHRcIkBjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5IaWRkZW5GaWx0ZXJcIj86IGJvb2xlYW47XG5cdFwiQGNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5WYWx1ZUxpc3RXaXRoRml4ZWRWYWx1ZXNcIj86IGJvb2xlYW47IC8vIEFubm90YXRpb25WYWx1ZUxpc3RXaXRoRml4ZWRWYWx1ZXNcblx0XCJAY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLlZhbHVlTGlzdFJlbGV2YW50UXVhbGlmaWVyc1wiPzogc3RyaW5nW107XG5cdFwiQGNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkhpZGRlblwiPzogc3RyaW5nO1xuXHRcIkBjb20uc2FwLnZvY2FidWxhcmllcy5QZXJzb25hbERhdGEudjEuSXNQb3RlbnRpYWxseVNlbnNpdGl2ZVwiPzogYm9vbGVhbjtcbn07XG5cbnR5cGUgQW5ub3RhdGlvblNlbGVjdGlvbkZpZWxkID0ge1xuXHQkUHJvcGVydHlQYXRoOiBzdHJpbmc7XG59O1xuXG50eXBlIEFubm90YXRpb25zRm9yRW50aXR5VHlwZSA9IHtcblx0XCJAY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuU2VsZWN0aW9uRmllbGRzXCI/OiBBbm5vdGF0aW9uU2VsZWN0aW9uRmllbGRbXTtcbn07XG5cbnR5cGUgQ29sdW1uUHJvcGVydHkgPSB7XG5cdCRUeXBlOiBzdHJpbmc7XG5cdCRraW5kOiBzdHJpbmc7XG5cdCRpc0NvbGxlY3Rpb246IGJvb2xlYW47XG59O1xuXG5leHBvcnQgdHlwZSBJbk91dFBhcmFtZXRlciA9IHtcblx0cGFybWV0ZXJUeXBlOiBzdHJpbmc7XG5cdHNvdXJjZTogc3RyaW5nO1xuXHRoZWxwUGF0aDogc3RyaW5nO1xuXHRjb25kaXRpb25QYXRoPzogc3RyaW5nO1xuXHRpbml0aWFsVmFsdWVJc1NpZ25pZmljYW50OiBib29sZWFuO1xuXHRjb25zdGFudFZhbHVlPzogc3RyaW5nIHwgYm9vbGVhbjtcbn07XG5cbnR5cGUgVmFsdWVIZWxwUGF5bG9hZEluZm8gPSB7XG5cdHZoS2V5cz86IHN0cmluZ1tdO1xuXHR2aFBhcmFtZXRlcnM/OiBJbk91dFBhcmFtZXRlcltdO1xuXHR2aFByb3BlcnRpZXM/OiBzdHJpbmdbXTtcbn07XG5cbnR5cGUgVmFsdWVIZWxwUXVhbGlmaWVyTWFwID0gUmVjb3JkPHN0cmluZywgVmFsdWVIZWxwUGF5bG9hZEluZm8+O1xuXG50eXBlIEhpc3RvcnlQYXlsb2FkID0ge1xuXHRlbmFibGVkPzogYm9vbGVhbjtcblx0ZGF0YT86IEZpZWxkRGF0YVR5cGVbXTtcblx0aGFzUmVsZXZhbnREYXRhPzogYm9vbGVhbjtcbn07XG5cbmV4cG9ydCB0eXBlIFZhbHVlSGVscFBheWxvYWQgPSB7XG5cdHByb3BlcnR5UGF0aDogc3RyaW5nO1xuXHRxdWFsaWZpZXJzOiBWYWx1ZUhlbHBRdWFsaWZpZXJNYXA7XG5cdHZhbHVlSGVscFF1YWxpZmllcjogc3RyaW5nO1xuXHRjb25kaXRpb25Nb2RlbD86IHN0cmluZztcblx0aXNBY3Rpb25QYXJhbWV0ZXJEaWFsb2c/OiBib29sZWFuO1xuXHRpc1VuaXRWYWx1ZUhlbHA/OiBib29sZWFuO1xuXHRyZXF1ZXN0R3JvdXBJZD86IHN0cmluZztcblx0dXNlTXVsdGlWYWx1ZUZpZWxkPzogYm9vbGVhbjtcblx0aXNWYWx1ZUxpc3RXaXRoRml4ZWRWYWx1ZXM/OiBib29sZWFuO1xuXHR2YWx1ZUhlbHBEZXNjcmlwdGlvblBhdGg/OiBzdHJpbmc7XG5cdHByb3BlcnR5RGVzY3JpcHRpb25QYXRoPzogc3RyaW5nO1xuXHRtYXhMZW5ndGg/OiBudW1iZXI7XG5cdHZhbHVlSGVscEtleVBhdGg/OiBzdHJpbmc7XG5cdGlzRGVmaW5lQ29uZGl0aW9uVmFsdWVIZWxwPzogYm9vbGVhbjtcblx0aXNQb3RlbnRpYWxseVNlbnNpdGl2ZT86IGJvb2xlYW47XG5cdGhpc3Rvcnk/OiBIaXN0b3J5UGF5bG9hZDtcblx0ZXh0ZXJuYWxJZFBhdGg/OiBzdHJpbmc7XG59O1xuXG50eXBlIENvbHVtbkRlZiA9IHtcblx0cGF0aDogc3RyaW5nO1xuXHR0ZXh0UGF0aD86IHN0cmluZztcblx0bGFiZWw6IHN0cmluZztcblx0c29ydGFibGU6IGJvb2xlYW47XG5cdGZpbHRlcmFibGU6IGJvb2xlYW4gfCBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjtcblx0JFR5cGU6IHN0cmluZztcbn07XG5cbmV4cG9ydCB0eXBlIFZhbHVlTGlzdEluZm8gPSB7XG5cdGtleVBhdGg6IHN0cmluZztcblx0ZGVzY3JpcHRpb25QYXRoOiBzdHJpbmc7XG5cdGZpZWxkUHJvcGVydHlQYXRoOiBzdHJpbmc7XG5cdHZoS2V5czogc3RyaW5nW107XG5cdHZoUGFyYW1ldGVyczogSW5PdXRQYXJhbWV0ZXJbXTtcblx0dmFsdWVMaXN0SW5mbzogQW5ub3RhdGlvblZhbHVlTGlzdFR5cGU7XG5cdGNvbHVtbkRlZnM6IENvbHVtbkRlZltdO1xuXHR2YWx1ZUhlbHBRdWFsaWZpZXI6IHN0cmluZztcbn07XG5cbnR5cGUgRGlzcGxheUZvcm1hdCA9IFwiRGVzY3JpcHRpb25cIiB8IFwiVmFsdWVEZXNjcmlwdGlvblwiIHwgXCJWYWx1ZVwiIHwgXCJEZXNjcmlwdGlvblZhbHVlXCI7XG5cbnR5cGUgUGF0aCA9IHtcblx0ZmllbGRQcm9wZXJ0eVBhdGg6IHN0cmluZztcblx0ZGVzY3JpcHRpb25QYXRoOiBzdHJpbmc7XG5cdGtleTogc3RyaW5nO1xufTtcblxuZXhwb3J0IHR5cGUgU29ydGVyVHlwZSA9IHtcblx0YXNjZW5kaW5nPzogYm9vbGVhbjtcblx0ZGVzY2VuZGluZz86IGJvb2xlYW47XG5cdHBhdGg/OiBzdHJpbmc7XG5cdG5hbWU/OiBzdHJpbmc7XG59O1xuXG5mdW5jdGlvbiBfZ2V0RGVmYXVsdFNvcnRQcm9wZXJ0eU5hbWUodmFsdWVMaXN0SW5mbzogQW5ub3RhdGlvblZhbHVlTGlzdFR5cGUpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuXHRsZXQgc29ydEZpZWxkTmFtZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXHRjb25zdCBtZXRhTW9kZWwgPSB2YWx1ZUxpc3RJbmZvLiRtb2RlbC5nZXRNZXRhTW9kZWwoKTtcblx0Y29uc3QgZW50aXR5U2V0QW5ub3RhdGlvbnMgPSBtZXRhTW9kZWwuZ2V0T2JqZWN0KGAvJHt2YWx1ZUxpc3RJbmZvLkNvbGxlY3Rpb25QYXRofUBgKSB8fCB7fTtcblx0Y29uc3Qgc29ydFJlc3RyaWN0aW9uc0luZm8gPSBnZXRTb3J0UmVzdHJpY3Rpb25zSW5mbyhlbnRpdHlTZXRBbm5vdGF0aW9ucyk7XG5cdGNvbnN0IGZvdW5kRWxlbWVudCA9IHZhbHVlTGlzdEluZm8uUGFyYW1ldGVycy5maW5kKGZ1bmN0aW9uIChlbGVtZW50KSB7XG5cdFx0cmV0dXJuIChcblx0XHRcdChlbGVtZW50LiRUeXBlID09PSBDb21tb25Bbm5vdGF0aW9uVHlwZXMuVmFsdWVMaXN0UGFyYW1ldGVySW5PdXQgfHxcblx0XHRcdFx0ZWxlbWVudC4kVHlwZSA9PT0gQ29tbW9uQW5ub3RhdGlvblR5cGVzLlZhbHVlTGlzdFBhcmFtZXRlck91dCB8fFxuXHRcdFx0XHRlbGVtZW50LiRUeXBlID09PSBDb21tb25Bbm5vdGF0aW9uVHlwZXMuVmFsdWVMaXN0UGFyYW1ldGVyRGlzcGxheU9ubHkpICYmXG5cdFx0XHQhKFxuXHRcdFx0XHRtZXRhTW9kZWwuZ2V0T2JqZWN0KGAvJHt2YWx1ZUxpc3RJbmZvLkNvbGxlY3Rpb25QYXRofS8ke2VsZW1lbnQuVmFsdWVMaXN0UHJvcGVydHl9QGNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkhpZGRlbmApID09PVxuXHRcdFx0XHR0cnVlXG5cdFx0XHQpXG5cdFx0KTtcblx0fSk7XG5cdGlmIChmb3VuZEVsZW1lbnQpIHtcblx0XHRpZiAoXG5cdFx0XHRtZXRhTW9kZWwuZ2V0T2JqZWN0KFxuXHRcdFx0XHRgLyR7dmFsdWVMaXN0SW5mby5Db2xsZWN0aW9uUGF0aH0vJHtmb3VuZEVsZW1lbnQuVmFsdWVMaXN0UHJvcGVydHl9QGNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5UZXh0QGNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLlRleHRBcnJhbmdlbWVudC8kRW51bU1lbWJlcmBcblx0XHRcdCkgPT09IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuVGV4dEFycmFuZ2VtZW50VHlwZS9UZXh0T25seVwiXG5cdFx0KSB7XG5cdFx0XHRzb3J0RmllbGROYW1lID0gbWV0YU1vZGVsLmdldE9iamVjdChcblx0XHRcdFx0YC8ke3ZhbHVlTGlzdEluZm8uQ29sbGVjdGlvblBhdGh9LyR7Zm91bmRFbGVtZW50LlZhbHVlTGlzdFByb3BlcnR5fUBjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuVGV4dC8kUGF0aGBcblx0XHRcdCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHNvcnRGaWVsZE5hbWUgPSBmb3VuZEVsZW1lbnQuVmFsdWVMaXN0UHJvcGVydHk7XG5cdFx0fVxuXHR9XG5cdGlmIChzb3J0RmllbGROYW1lICYmICghc29ydFJlc3RyaWN0aW9uc0luZm8ucHJvcGVydHlJbmZvW3NvcnRGaWVsZE5hbWVdIHx8IHNvcnRSZXN0cmljdGlvbnNJbmZvLnByb3BlcnR5SW5mb1tzb3J0RmllbGROYW1lXS5zb3J0YWJsZSkpIHtcblx0XHRyZXR1cm4gc29ydEZpZWxkTmFtZTtcblx0fSBlbHNlIHtcblx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHR9XG59XG5cbmZ1bmN0aW9uIF9yZWR1bmRhbnREZXNjcmlwdGlvbihcblx0b1ZMUGFyYW1ldGVyOiB7XG5cdFx0VmFsdWVMaXN0UHJvcGVydHk6IHN0cmluZztcblx0fSxcblx0YUNvbHVtbkluZm86IENvbHVtbkluZm9bXVxuKTogYm9vbGVhbiB8IHVuZGVmaW5lZCB7XG5cdGNvbnN0IG9Db2x1bW5JbmZvID0gYUNvbHVtbkluZm8uZmluZChmdW5jdGlvbiAoY29sdW1uSW5mbzogQ29sdW1uSW5mbykge1xuXHRcdHJldHVybiBvVkxQYXJhbWV0ZXIuVmFsdWVMaXN0UHJvcGVydHkgPT09IGNvbHVtbkluZm8udGV4dENvbHVtbk5hbWU7XG5cdH0pO1xuXHRpZiAoXG5cdFx0b1ZMUGFyYW1ldGVyLlZhbHVlTGlzdFByb3BlcnR5ID09PSBvQ29sdW1uSW5mbz8udGV4dENvbHVtbk5hbWUgJiZcblx0XHQhb0NvbHVtbkluZm8ua2V5Q29sdW1uSGlkZGVuICYmXG5cdFx0b0NvbHVtbkluZm8ua2V5Q29sdW1uRGlzcGxheUZvcm1hdCAhPT0gXCJWYWx1ZVwiXG5cdCkge1xuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cdHJldHVybiB1bmRlZmluZWQ7XG59XG5cbmZ1bmN0aW9uIF9oYXNJbXBvcnRhbmNlSGlnaChvVmFsdWVMaXN0Q29udGV4dDogeyBQYXJhbWV0ZXJzOiBBbm5vdGF0aW9uVmFsdWVMaXN0UGFyYW1ldGVyW10gfSk6IGJvb2xlYW4ge1xuXHRyZXR1cm4gb1ZhbHVlTGlzdENvbnRleHQuUGFyYW1ldGVycy5zb21lKGZ1bmN0aW9uIChvUGFyYW1ldGVyOiBBbm5vdGF0aW9uVmFsdWVMaXN0UGFyYW1ldGVyKSB7XG5cdFx0cmV0dXJuIChcblx0XHRcdG9QYXJhbWV0ZXJbXCJAY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuSW1wb3J0YW5jZVwiXSAmJlxuXHRcdFx0b1BhcmFtZXRlcltcIkBjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5JbXBvcnRhbmNlXCJdLiRFbnVtTWVtYmVyID09PSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkltcG9ydGFuY2VUeXBlL0hpZ2hcIlxuXHRcdCk7XG5cdH0pO1xufVxuXG5mdW5jdGlvbiBfYnVpbGQkU2VsZWN0U3RyaW5nKGNvbnRyb2w6IENvbnRyb2wpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuXHRjb25zdCBvVmlld0RhdGEgPSBjb250cm9sLmdldE1vZGVsKFwidmlld0RhdGFcIikgYXMgSlNPTk1vZGVsO1xuXHRpZiAob1ZpZXdEYXRhKSB7XG5cdFx0Y29uc3Qgb0RhdGEgPSBvVmlld0RhdGEuZ2V0RGF0YSgpO1xuXHRcdGlmIChvRGF0YSkge1xuXHRcdFx0Y29uc3QgYUNvbHVtbnMgPSBvRGF0YS5jb2x1bW5zO1xuXHRcdFx0aWYgKGFDb2x1bW5zKSB7XG5cdFx0XHRcdHJldHVybiBhQ29sdW1ucy5yZWR1Y2UoZnVuY3Rpb24gKFxuXHRcdFx0XHRcdHNRdWVyeTogc3RyaW5nLFxuXHRcdFx0XHRcdG9Qcm9wZXJ0eToge1xuXHRcdFx0XHRcdFx0cGF0aD86IHN0cmluZztcblx0XHRcdFx0XHR9XG5cdFx0XHRcdCkge1xuXHRcdFx0XHRcdC8vIE5hdmlnYXRpb24gcHJvcGVydGllcyAocmVwcmVzZW50ZWQgYnkgWC9ZKSBzaG91bGQgbm90IGJlIGFkZGVkIHRvICRzZWxlY3QuXG5cdFx0XHRcdFx0Ly8gVE9ETyA6IFRoZXkgc2hvdWxkIGJlIGFkZGVkIGFzICRleHBhbmQ9WCgkc2VsZWN0PVkpIGluc3RlYWRcblx0XHRcdFx0XHRpZiAob1Byb3BlcnR5LnBhdGggJiYgIW9Qcm9wZXJ0eS5wYXRoLmluY2x1ZGVzKFwiL1wiKSkge1xuXHRcdFx0XHRcdFx0c1F1ZXJ5ID0gc1F1ZXJ5ID8gYCR7c1F1ZXJ5fSwke29Qcm9wZXJ0eS5wYXRofWAgOiBvUHJvcGVydHkucGF0aDtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0cmV0dXJuIHNRdWVyeTtcblx0XHRcdFx0fSwgdW5kZWZpbmVkKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblx0cmV0dXJuIHVuZGVmaW5lZDtcbn1cblxuZnVuY3Rpb24gX2dldFZhbHVlSGVscENvbHVtbkRpc3BsYXlGb3JtYXQob1Byb3BlcnR5QW5ub3RhdGlvbnM6IE1ldGFNb2RlbFByb3BlcnR5QW5ub3RhdGlvbnMsIGlzVmFsdWVIZWxwV2l0aEZpeGVkVmFsdWVzOiBib29sZWFuKTogc3RyaW5nIHtcblx0Y29uc3Qgc0Rpc3BsYXlNb2RlID0gQ29tbW9uVXRpbHMuY29tcHV0ZURpc3BsYXlNb2RlKG9Qcm9wZXJ0eUFubm90YXRpb25zKTtcblx0Y29uc3Qgb1RleHRBbm5vdGF0aW9uID0gb1Byb3BlcnR5QW5ub3RhdGlvbnMgJiYgb1Byb3BlcnR5QW5ub3RhdGlvbnNbXCJAY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLlRleHRcIl07XG5cdGNvbnN0IG9UZXh0QXJyYW5nZW1lbnRBbm5vdGF0aW9uID1cblx0XHRvVGV4dEFubm90YXRpb24gJiYgb1Byb3BlcnR5QW5ub3RhdGlvbnNbXCJAY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLlRleHRAY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuVGV4dEFycmFuZ2VtZW50XCJdO1xuXHRpZiAoaXNWYWx1ZUhlbHBXaXRoRml4ZWRWYWx1ZXMpIHtcblx0XHRyZXR1cm4gb1RleHRBbm5vdGF0aW9uICYmIHR5cGVvZiBvVGV4dEFubm90YXRpb24gIT09IFwic3RyaW5nXCIgJiYgXCIkUGF0aFwiIGluIG9UZXh0QW5ub3RhdGlvbiAmJiBvVGV4dEFubm90YXRpb24uJFBhdGhcblx0XHRcdD8gc0Rpc3BsYXlNb2RlXG5cdFx0XHQ6IFwiVmFsdWVcIjtcblx0fSBlbHNlIHtcblx0XHQvLyBPbmx5IGV4cGxpY2l0IGRlZmluZWQgVGV4dEFycmFuZ2VtZW50cyBpbiBhIFZhbHVlIEhlbHAgd2l0aCBEaWFsb2cgYXJlIGNvbnNpZGVyZWRcblx0XHRyZXR1cm4gb1RleHRBcnJhbmdlbWVudEFubm90YXRpb24gPyBzRGlzcGxheU1vZGUgOiBcIlZhbHVlXCI7XG5cdH1cbn1cblxuLyoqXG4gKiBSZXRyaWV2ZXMgdGhlIHZhbHVlTGlzdCdzIFByZXNlbnRhdGlvblZhcmlhbnQuXG4gKiBAcGFyYW0gdmFsdWVMaXN0IFRoZSB2YWx1ZUxpc3QgYW5ub3RhdGlvblxuICogQHJldHVybnMgVGhlIFByZXNlbnRhdGlvblZhcmlhbnQgKGlmIGFueSkgb2YgdGhlIHZhbHVlTGlzdFxuICovXG5mdW5jdGlvbiBnZXRQcmVzZW50YXRpb25WYXJpYW50KHZhbHVlTGlzdDogQW5ub3RhdGlvblZhbHVlTGlzdFR5cGUpOiBNZXRhTW9kZWxUeXBlPFByZXNlbnRhdGlvblZhcmlhbnQ+IHwgdW5kZWZpbmVkIHtcblx0Y29uc3QgcHJlc2VudGF0aW9uVmFyaWFudFF1YWxpZmllciA9IHZhbHVlTGlzdC5QcmVzZW50YXRpb25WYXJpYW50UXVhbGlmaWVyID8gYCMke3ZhbHVlTGlzdC5QcmVzZW50YXRpb25WYXJpYW50UXVhbGlmaWVyfWAgOiBcIlwiO1xuXHRjb25zdCBwcmVzZW50YXRpb25WYXJpYW50UGF0aCA9IGAvJHt2YWx1ZUxpc3QuQ29sbGVjdGlvblBhdGh9L0Bjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5QcmVzZW50YXRpb25WYXJpYW50JHtwcmVzZW50YXRpb25WYXJpYW50UXVhbGlmaWVyfWA7XG5cdHJldHVybiB2YWx1ZUxpc3QuJG1vZGVsLmdldE1ldGFNb2RlbCgpLmdldE9iamVjdChwcmVzZW50YXRpb25WYXJpYW50UGF0aCkgYXMgTWV0YU1vZGVsVHlwZTxQcmVzZW50YXRpb25WYXJpYW50PiB8IHVuZGVmaW5lZDtcbn1cblxudHlwZSBDb2x1bW5JbmZvID0ge1xuXHRrZXlDb2x1bW5IaWRkZW4/OiBib29sZWFuO1xuXHRrZXlDb2x1bW5EaXNwbGF5Rm9ybWF0Pzogc3RyaW5nO1xuXHR0ZXh0Q29sdW1uTmFtZT86IHN0cmluZztcblx0Y29sdW1uTmFtZTogc3RyaW5nO1xuXHRoYXNIaWRkZW5Bbm5vdGF0aW9uPzogYm9vbGVhbjtcbn07XG5jb25zdCBWYWx1ZUxpc3RIZWxwZXIgPSB7XG5cdGdldFZhbHVlTGlzdENvbGxlY3Rpb25FbnRpdHlTZXQ6IGZ1bmN0aW9uIChvVmFsdWVMaXN0Q29udGV4dDogQ29udGV4dCk6IEJhc2VDb250ZXh0IHwgdW5kZWZpbmVkIHtcblx0XHRjb25zdCBtVmFsdWVMaXN0ID0gb1ZhbHVlTGlzdENvbnRleHQuZ2V0T2JqZWN0KCk7XG5cdFx0cmV0dXJuIG1WYWx1ZUxpc3QuJG1vZGVsLmdldE1ldGFNb2RlbCgpLmNyZWF0ZUJpbmRpbmdDb250ZXh0KGAvJHttVmFsdWVMaXN0LkNvbGxlY3Rpb25QYXRofWApO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBDaGVja3MgaWYgdGhlIFZhbHVlTGlzdCBpcyBhbm5vdGF0ZWQgd2l0aCBhIFByZXNlbnRhdGlvblZhcmlhbnQuXG5cdCAqIElmIHRoZSBQcmVzZW50YXRpb25WYXJpYW50IGlzIGFubm90YXRlZCB3aXRoIGEgUmVjdXJzaXZlSGllcmFyY2h5UXVhbGlmaWVyLCB0aGUgVmFsdWVMaXN0J3MgdGFibGUgaGFzIHRvIGJlIGEgVHJlZVRhYmxlLlxuXHQgKiBAcGFyYW0gdmFsdWVMaXN0IFRoZSB2YWx1ZUxpc3QgYW5ub3RhdGlvblxuXHQgKiBAcmV0dXJucyBUcnVlIGlmIHRoZSB0YWJsZSBoYXMgdG8gYmUgYSBUcmVlVGFibGUsIGZhbHNlIG90aGVyd2lzZVxuXHQgKi9cblx0aXNUcmVlVGFibGVUeXBlKHZhbHVlTGlzdDogQW5ub3RhdGlvblZhbHVlTGlzdFR5cGUpOiBib29sZWFuIHtcblx0XHRyZXR1cm4gZ2V0UHJlc2VudGF0aW9uVmFyaWFudCh2YWx1ZUxpc3QpPy5SZWN1cnNpdmVIaWVyYXJjaHlRdWFsaWZpZXIgPyB0cnVlIDogZmFsc2U7XG5cdH0sXG5cblx0LyoqXG5cdCAqIEdldHMgdGhlIGRlbGVnYXRlIGZvciB0aGUgVmFsdWVMaXN0J3MgdGFibGUuXG5cdCAqIEBwYXJhbSB2YWx1ZUxpc3QgVGhlIHZhbHVlTGlzdCBhbm5vdGF0aW9uXG5cdCAqIEByZXR1cm5zIFRoZSBjYWxjdWxhdGVkIGRlbGVnYXRlIGZvciB0aGUgVmFsdWVMaXN0J3MgdGFibGVcblx0ICovXG5cdGdldFRhYmxlRGVsZWdhdGU6IGZ1bmN0aW9uICh2YWx1ZUxpc3Q6IEFubm90YXRpb25WYWx1ZUxpc3RUeXBlKTogc3RyaW5nIHtcblx0XHRsZXQgc0RlZmF1bHRTb3J0UHJvcGVydHlOYW1lID0gX2dldERlZmF1bHRTb3J0UHJvcGVydHlOYW1lKHZhbHVlTGlzdCk7XG5cdFx0aWYgKHNEZWZhdWx0U29ydFByb3BlcnR5TmFtZSkge1xuXHRcdFx0c0RlZmF1bHRTb3J0UHJvcGVydHlOYW1lID0gYCcke3NEZWZhdWx0U29ydFByb3BlcnR5TmFtZX0nYDtcblx0XHR9XG5cdFx0Y29uc3QgcHJlc2VudGF0aW9uVmFyaWFudCA9IGdldFByZXNlbnRhdGlvblZhcmlhbnQodmFsdWVMaXN0KTtcblx0XHRjb25zdCByZWN1cnNpdmVIaWVyYXJjaHlRdWFsaWZpZXIgPSBwcmVzZW50YXRpb25WYXJpYW50Py5SZWN1cnNpdmVIaWVyYXJjaHlRdWFsaWZpZXI7XG5cdFx0aWYgKHJlY3Vyc2l2ZUhpZXJhcmNoeVF1YWxpZmllcikge1xuXHRcdFx0Y29uc3QgaW5pdGlhbEV4cGFuc2lvbkxldmVsID0gcHJlc2VudGF0aW9uVmFyaWFudC5Jbml0aWFsRXhwYW5zaW9uTGV2ZWw7XG5cdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHRcIntuYW1lOiAnc2FwL2ZlL21hY3Jvcy9pbnRlcm5hbC92YWx1ZWhlbHAvVGFibGVEZWxlZ2F0ZScsIHBheWxvYWQ6IHtjb2xsZWN0aW9uTmFtZTogJ1wiICtcblx0XHRcdFx0dmFsdWVMaXN0LkNvbGxlY3Rpb25QYXRoICtcblx0XHRcdFx0XCInXCIgK1xuXHRcdFx0XHQoc0RlZmF1bHRTb3J0UHJvcGVydHlOYW1lID8gXCIsIGRlZmF1bHRTb3J0UHJvcGVydHlOYW1lOiBcIiArIHNEZWZhdWx0U29ydFByb3BlcnR5TmFtZSA6IFwiXCIpICtcblx0XHRcdFx0XCIsIGhpZXJhcmNoeVF1YWxpZmllcjogJ1wiICtcblx0XHRcdFx0cmVjdXJzaXZlSGllcmFyY2h5UXVhbGlmaWVyICtcblx0XHRcdFx0XCInXCIgK1xuXHRcdFx0XHQoaW5pdGlhbEV4cGFuc2lvbkxldmVsID8gXCIsIGluaXRpYWxFeHBhbnNpb25MZXZlbDogXCIgKyAoaW5pdGlhbEV4cGFuc2lvbkxldmVsICsgMSkgOiBcIlwiKSArXG5cdFx0XHRcdFwifX1cIlxuXHRcdFx0KTtcblx0XHR9XG5cdFx0cmV0dXJuIChcblx0XHRcdFwie25hbWU6ICdzYXAvZmUvbWFjcm9zL2ludGVybmFsL3ZhbHVlaGVscC9UYWJsZURlbGVnYXRlJywgcGF5bG9hZDoge2NvbGxlY3Rpb25OYW1lOiAnXCIgK1xuXHRcdFx0dmFsdWVMaXN0LkNvbGxlY3Rpb25QYXRoICtcblx0XHRcdFwiJ1wiICtcblx0XHRcdChzRGVmYXVsdFNvcnRQcm9wZXJ0eU5hbWUgPyBcIiwgZGVmYXVsdFNvcnRQcm9wZXJ0eU5hbWU6IFwiICsgc0RlZmF1bHRTb3J0UHJvcGVydHlOYW1lIDogXCJcIikgK1xuXHRcdFx0XCJ9fVwiXG5cdFx0KTtcblx0fSxcblxuXHQvKipcblx0ICogR2V0cyB0aGUgc29ydCBjb25kaXRpb25zIHNldCBvbiB0aGUgVmFsdWVMaXN0J3MgUHJlc2VudGF0aW9uVmFyaWFudC5cblx0ICogQHBhcmFtIHZhbHVlTGlzdEluZm8gVGhlIHZhbHVlTGlzdCBhbm5vdGF0aW9uXG5cdCAqIEBwYXJhbSBpc1N1Z2dlc3Rpb24gSW5kaWNhdGVzIGlmIHRoZSBWYWx1ZUxpc3QgaXMgdXNlZCBpbiBhIHN1Z2dlc3Rpb24gc2NlbmFyaW9cblx0ICogQHBhcmFtIGFzQ3VzdG9tZGF0YSBJbmRpY2F0ZXMgaWYgdGhlIHNvcnQgY29uZGl0aW9ucyBzaG91bGQgYmUgcmV0dXJuZWQgYXMgY3VzdG9tIGRhdGFcblx0ICogQHJldHVybnMgVGhlIHNvcnQgY29uZGl0aW9ucyBpZiBhbnksIHVuZGVmaW5lZCBvdGhlcndpc2Vcblx0ICovXG5cdGdldFNvcnRDb25kaXRpb25zRnJvbVByZXNlbnRhdGlvblZhcmlhbnQ6IGZ1bmN0aW9uIChcblx0XHR2YWx1ZUxpc3RJbmZvOiBBbm5vdGF0aW9uVmFsdWVMaXN0VHlwZSxcblx0XHRpc1N1Z2dlc3Rpb246IGJvb2xlYW4sXG5cdFx0YXNDdXN0b21kYXRhID0gZmFsc2Vcblx0KTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcblx0XHRjb25zdCBwcmVzZW50YXRpb25WYXJpYW50ID0gZ2V0UHJlc2VudGF0aW9uVmFyaWFudCh2YWx1ZUxpc3RJbmZvKTtcblx0XHRpZiAocHJlc2VudGF0aW9uVmFyaWFudD8uU29ydE9yZGVyKSB7XG5cdFx0XHRjb25zdCBzb3J0Q29uZGl0aW9ucyA9IHtcblx0XHRcdFx0c29ydGVyczogW10gYXMgU29ydGVyVHlwZVtdXG5cdFx0XHR9O1xuXG5cdFx0XHRwcmVzZW50YXRpb25WYXJpYW50LlNvcnRPcmRlci5mb3JFYWNoKGZ1bmN0aW9uIChjb25kaXRpb24pIHtcblx0XHRcdFx0Y29uc3Qgc29ydGVyOiBTb3J0ZXJUeXBlID0ge30sXG5cdFx0XHRcdFx0cHJvcGVydHlQYXRoID0gY29uZGl0aW9uPy5Qcm9wZXJ0eT8uJFByb3BlcnR5UGF0aDtcblx0XHRcdFx0aWYgKGlzU3VnZ2VzdGlvbikge1xuXHRcdFx0XHRcdHNvcnRlci5wYXRoID0gcHJvcGVydHlQYXRoO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHNvcnRlci5uYW1lID0gcHJvcGVydHlQYXRoO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0aWYgKGNvbmRpdGlvbi5EZXNjZW5kaW5nKSB7XG5cdFx0XHRcdFx0c29ydGVyLmRlc2NlbmRpbmcgPSB0cnVlO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHNvcnRlci5hc2NlbmRpbmcgPSB0cnVlO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHNvcnRDb25kaXRpb25zLnNvcnRlcnMucHVzaChzb3J0ZXIpO1xuXHRcdFx0fSk7XG5cdFx0XHRjb25zdCBzdHJpbmdDb252ZXJ0ZXIgPSBhc0N1c3RvbWRhdGEgPyBDb21tb25IZWxwZXIuc3RyaW5naWZ5Q3VzdG9tRGF0YSA6IEpTT04uc3RyaW5naWZ5O1xuXHRcdFx0cmV0dXJuIGlzU3VnZ2VzdGlvbiA/IGBzb3J0ZXI6ICR7c3RyaW5nQ29udmVydGVyKHNvcnRDb25kaXRpb25zLnNvcnRlcnMpfWAgOiBzdHJpbmdDb252ZXJ0ZXIoc29ydENvbmRpdGlvbnMpO1xuXHRcdH1cblx0XHRyZXR1cm47XG5cdH0sXG5cblx0LyoqXG5cdCAqIEdldHMgdGhlIHNvcnQgY29uZGl0aW9ucyBmb3IgdGhlIFZhbHVlTGlzdC5cblx0ICogQHBhcmFtIHZhbHVlTGlzdEluZm8gVGhlIFZhbHVlTGlzdCBhbm5vdGF0aW9uXG5cdCAqIEBwYXJhbSBpc1ZhbHVlSGVscFdpdGhGaXhlZFZhbHVlcyBJbmRpY2F0ZXMgaWYgVmFsdWVMaXN0IGhhcyBmaXhlZCB2YWx1ZXNcblx0ICogQHJldHVybnMgVGhlIHNvcnQgY29uZGl0aW9ucyBlaXRoZXIgZnJvbSB0aGUgcHJlc2VudGF0aW9uIHZhcmlhbnQgb3IgdGhlIGRlZmF1bHQgb25lLCB1bmRlZmluZWQgb3RoZXJ3aXNlXG5cdCAqL1xuXHRnZXRTb3J0Q29uZGl0aW9uc0ZvclZhbHVlTGlzdDogZnVuY3Rpb24gKFxuXHRcdHZhbHVlTGlzdEluZm86IEFubm90YXRpb25WYWx1ZUxpc3RUeXBlLFxuXHRcdGlzVmFsdWVIZWxwV2l0aEZpeGVkVmFsdWVzOiBib29sZWFuXG5cdCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG5cdFx0Y29uc3Qgc29ydENvbmRpdGlvbnNGcm9tUHJlc2VudGF0aW9uVmFyaWFudCA9IFZhbHVlTGlzdEhlbHBlci5nZXRTb3J0Q29uZGl0aW9uc0Zyb21QcmVzZW50YXRpb25WYXJpYW50KHZhbHVlTGlzdEluZm8sIGZhbHNlKTtcblxuXHRcdGlmIChzb3J0Q29uZGl0aW9uc0Zyb21QcmVzZW50YXRpb25WYXJpYW50KSB7XG5cdFx0XHRyZXR1cm4gc29ydENvbmRpdGlvbnNGcm9tUHJlc2VudGF0aW9uVmFyaWFudDtcblx0XHR9XG5cdFx0aWYgKGlzVmFsdWVIZWxwV2l0aEZpeGVkVmFsdWVzKSB7XG5cdFx0XHRjb25zdCBzb3J0Q29uZGl0aW9ucyA9IHtcblx0XHRcdFx0c29ydGVyczogW1xuXHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdG5hbWU6IF9nZXREZWZhdWx0U29ydFByb3BlcnR5TmFtZSh2YWx1ZUxpc3RJbmZvKSxcblx0XHRcdFx0XHRcdGFzY2VuZGluZzogdHJ1ZVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0XSBhcyBTb3J0ZXJUeXBlW11cblx0XHRcdH07XG5cdFx0XHRyZXR1cm4gSlNPTi5zdHJpbmdpZnkoc29ydENvbmRpdGlvbnMpO1xuXHRcdH1cblx0fSxcblxuXHRnZXRQcm9wZXJ0eVBhdGg6IGZ1bmN0aW9uIChvUGFyYW1ldGVyczogeyBVbmJvdW5kQWN0aW9uPzogYm9vbGVhbjsgUHJvcGVydHk6IHN0cmluZzsgRW50aXR5VHlwZVBhdGg6IHN0cmluZzsgQWN0aW9uOiBzdHJpbmcgfSk6IHN0cmluZyB7XG5cdFx0cmV0dXJuICFvUGFyYW1ldGVycy5VbmJvdW5kQWN0aW9uXG5cdFx0XHQ/IGAke29QYXJhbWV0ZXJzLkVudGl0eVR5cGVQYXRofS8ke29QYXJhbWV0ZXJzLkFjdGlvbn0vJHtvUGFyYW1ldGVycy5Qcm9wZXJ0eX1gXG5cdFx0XHQ6IGAvJHtvUGFyYW1ldGVycy5BY3Rpb24uc3Vic3RyaW5nKG9QYXJhbWV0ZXJzLkFjdGlvbi5sYXN0SW5kZXhPZihcIi5cIikgKyAxKX0vJHtvUGFyYW1ldGVycy5Qcm9wZXJ0eX1gO1xuXHR9LFxuXG5cdGdldFZhbHVlTGlzdFByb3BlcnR5OiBmdW5jdGlvbiAob1Byb3BlcnR5Q29udGV4dDogQmFzZUNvbnRleHQpOiBCYXNlQ29udGV4dCB8IHVuZGVmaW5lZCB7XG5cdFx0Y29uc3Qgb1ZhbHVlTGlzdE1vZGVsID0gb1Byb3BlcnR5Q29udGV4dC5nZXRNb2RlbCgpO1xuXHRcdGNvbnN0IG1WYWx1ZUxpc3QgPSBvVmFsdWVMaXN0TW9kZWwuZ2V0T2JqZWN0KFwiL1wiKSBhcyB1bmtub3duIGFzIHsgQ29sbGVjdGlvblBhdGg6IHN0cmluZzsgJG1vZGVsOiBPRGF0YU1vZGVsIH07XG5cdFx0cmV0dXJuIG1WYWx1ZUxpc3QuJG1vZGVsLmdldE1ldGFNb2RlbCgpLmNyZWF0ZUJpbmRpbmdDb250ZXh0KGAvJHttVmFsdWVMaXN0LkNvbGxlY3Rpb25QYXRofS8ke29Qcm9wZXJ0eUNvbnRleHQuZ2V0T2JqZWN0KCl9YCk7XG5cdH0sXG5cblx0Ly8gVGhpcyBmdW5jdGlvbiBpcyB1c2VkIGZvciB2YWx1ZSBoZWxwIG0tdGFibGUgYW5kIG1kYy10YWJsZVxuXHRnZXRDb2x1bW5WaXNpYmlsaXR5OiBmdW5jdGlvbiAoXG5cdFx0b1ZhbHVlTGlzdDogeyBQYXJhbWV0ZXJzOiBBbm5vdGF0aW9uVmFsdWVMaXN0UGFyYW1ldGVyW10gfSxcblx0XHRvVkxQYXJhbWV0ZXI6IEFubm90YXRpb25WYWx1ZUxpc3RQYXJhbWV0ZXIsXG5cdFx0b1NvdXJjZToge1xuXHRcdFx0dmFsdWVIZWxwV2l0aEZpeGVkVmFsdWVzOiBib29sZWFuO1xuXHRcdFx0Y29sdW1uSW5mbzoge1xuXHRcdFx0XHRpc0RpYWxvZ1RhYmxlOiBib29sZWFuO1xuXHRcdFx0XHRjb2x1bW5JbmZvczogQ29sdW1uSW5mb1tdO1xuXHRcdFx0fTtcblx0XHR9XG5cdCk6IGJvb2xlYW4ge1xuXHRcdGNvbnN0IGlzRHJvcERvd25MaXN0ID0gb1NvdXJjZSAmJiAhIW9Tb3VyY2UudmFsdWVIZWxwV2l0aEZpeGVkVmFsdWVzLFxuXHRcdFx0b0NvbHVtbkluZm8gPSBvU291cmNlLmNvbHVtbkluZm8sXG5cdFx0XHRpc1Zpc2libGUgPSAhX3JlZHVuZGFudERlc2NyaXB0aW9uKG9WTFBhcmFtZXRlciwgb0NvbHVtbkluZm8uY29sdW1uSW5mb3MpLFxuXHRcdFx0aXNEaWFsb2dUYWJsZSA9IG9Db2x1bW5JbmZvLmlzRGlhbG9nVGFibGU7XG5cblx0XHRpZiAoaXNEcm9wRG93bkxpc3QgfHwgKCFpc0Ryb3BEb3duTGlzdCAmJiBpc0RpYWxvZ1RhYmxlKSB8fCAoIWlzRHJvcERvd25MaXN0ICYmICFfaGFzSW1wb3J0YW5jZUhpZ2gob1ZhbHVlTGlzdCkpKSB7XG5cdFx0XHRjb25zdCBjb2x1bW5XaXRoSGlkZGVuQW5ub3RhdGlvbiA9IG9Db2x1bW5JbmZvLmNvbHVtbkluZm9zLmZpbmQoZnVuY3Rpb24gKGNvbHVtbkluZm86IENvbHVtbkluZm8pIHtcblx0XHRcdFx0cmV0dXJuIG9WTFBhcmFtZXRlci5WYWx1ZUxpc3RQcm9wZXJ0eSA9PT0gY29sdW1uSW5mby5jb2x1bW5OYW1lICYmIGNvbHVtbkluZm8uaGFzSGlkZGVuQW5ub3RhdGlvbiA9PT0gdHJ1ZTtcblx0XHRcdH0pO1xuXHRcdFx0cmV0dXJuICFjb2x1bW5XaXRoSGlkZGVuQW5ub3RhdGlvbiA/IGlzVmlzaWJsZSA6IGZhbHNlO1xuXHRcdH0gZWxzZSBpZiAoIWlzRHJvcERvd25MaXN0ICYmIF9oYXNJbXBvcnRhbmNlSGlnaChvVmFsdWVMaXN0KSkge1xuXHRcdFx0cmV0dXJuIG9WTFBhcmFtZXRlciAmJlxuXHRcdFx0XHRvVkxQYXJhbWV0ZXJbXCJAY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuSW1wb3J0YW5jZVwiXSAmJlxuXHRcdFx0XHRvVkxQYXJhbWV0ZXJbXCJAY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuSW1wb3J0YW5jZVwiXS4kRW51bU1lbWJlciA9PT0gXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5JbXBvcnRhbmNlVHlwZS9IaWdoXCJcblx0XHRcdFx0PyB0cnVlXG5cdFx0XHRcdDogZmFsc2U7XG5cdFx0fVxuXHRcdHJldHVybiB0cnVlO1xuXHR9LFxuXG5cdGdldENvbHVtblZpc2liaWxpdHlJbmZvOiBmdW5jdGlvbiAoXG5cdFx0b1ZhbHVlTGlzdDoge1xuXHRcdFx0JG1vZGVsOiBPRGF0YU1vZGVsO1xuXHRcdFx0Q29sbGVjdGlvblBhdGg6IHN0cmluZztcblx0XHRcdFBhcmFtZXRlcnM6IEFubm90YXRpb25WYWx1ZUxpc3RQYXJhbWV0ZXJbXTtcblx0XHR9LFxuXHRcdHNQcm9wZXJ0eUZ1bGxQYXRoOiBzdHJpbmcsXG5cdFx0YklzRHJvcERvd25MaXN0ZTogYm9vbGVhbixcblx0XHRpc0RpYWxvZ1RhYmxlOiBib29sZWFuXG5cdCk6IHtcblx0XHRpc0RpYWxvZ1RhYmxlOiBib29sZWFuO1xuXHRcdGNvbHVtbkluZm9zOiBDb2x1bW5JbmZvW107XG5cdH0ge1xuXHRcdGNvbnN0IG9NZXRhTW9kZWwgPSBvVmFsdWVMaXN0LiRtb2RlbC5nZXRNZXRhTW9kZWwoKTtcblx0XHRjb25zdCBhQ29sdW1uSW5mb3M6IENvbHVtbkluZm9bXSA9IFtdO1xuXHRcdGNvbnN0IG9Db2x1bW5JbmZvcyA9IHtcblx0XHRcdGlzRGlhbG9nVGFibGU6IGlzRGlhbG9nVGFibGUsXG5cdFx0XHRjb2x1bW5JbmZvczogYUNvbHVtbkluZm9zXG5cdFx0fTtcblxuXHRcdG9WYWx1ZUxpc3QuUGFyYW1ldGVycy5mb3JFYWNoKGZ1bmN0aW9uIChvUGFyYW1ldGVyOiBBbm5vdGF0aW9uVmFsdWVMaXN0UGFyYW1ldGVyKSB7XG5cdFx0XHRjb25zdCBvUHJvcGVydHlBbm5vdGF0aW9ucyA9IG9NZXRhTW9kZWwuZ2V0T2JqZWN0KGAvJHtvVmFsdWVMaXN0LkNvbGxlY3Rpb25QYXRofS8ke29QYXJhbWV0ZXIuVmFsdWVMaXN0UHJvcGVydHl9QGApO1xuXHRcdFx0Y29uc3Qgb1RleHRBbm5vdGF0aW9uID0gb1Byb3BlcnR5QW5ub3RhdGlvbnMgJiYgb1Byb3BlcnR5QW5ub3RhdGlvbnNbXCJAY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLlRleHRcIl07XG5cdFx0XHRsZXQgY29sdW1uSW5mbzogQ29sdW1uSW5mbyA9IHt9IGFzIHVua25vd24gYXMgQ29sdW1uSW5mbztcblx0XHRcdGlmIChvVGV4dEFubm90YXRpb24pIHtcblx0XHRcdFx0Y29sdW1uSW5mbyA9IHtcblx0XHRcdFx0XHRrZXlDb2x1bW5IaWRkZW46IG9Qcm9wZXJ0eUFubm90YXRpb25zW1wiQGNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkhpZGRlblwiXSA/IHRydWUgOiBmYWxzZSxcblx0XHRcdFx0XHRrZXlDb2x1bW5EaXNwbGF5Rm9ybWF0OiBvVGV4dEFubm90YXRpb24gJiYgX2dldFZhbHVlSGVscENvbHVtbkRpc3BsYXlGb3JtYXQob1Byb3BlcnR5QW5ub3RhdGlvbnMsIGJJc0Ryb3BEb3duTGlzdGUpLFxuXHRcdFx0XHRcdHRleHRDb2x1bW5OYW1lOiBvVGV4dEFubm90YXRpb24gJiYgb1RleHRBbm5vdGF0aW9uLiRQYXRoLFxuXHRcdFx0XHRcdGNvbHVtbk5hbWU6IG9QYXJhbWV0ZXIuVmFsdWVMaXN0UHJvcGVydHksXG5cdFx0XHRcdFx0aGFzSGlkZGVuQW5ub3RhdGlvbjogb1Byb3BlcnR5QW5ub3RhdGlvbnMgJiYgb1Byb3BlcnR5QW5ub3RhdGlvbnNbXCJAY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuSGlkZGVuXCJdID8gdHJ1ZSA6IGZhbHNlXG5cdFx0XHRcdH07XG5cdFx0XHR9IGVsc2UgaWYgKG9Qcm9wZXJ0eUFubm90YXRpb25zICYmIG9Qcm9wZXJ0eUFubm90YXRpb25zW1wiQGNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkhpZGRlblwiXSkge1xuXHRcdFx0XHRjb2x1bW5JbmZvID0ge1xuXHRcdFx0XHRcdGNvbHVtbk5hbWU6IG9QYXJhbWV0ZXIuVmFsdWVMaXN0UHJvcGVydHksXG5cdFx0XHRcdFx0aGFzSGlkZGVuQW5ub3RhdGlvbjogb1Byb3BlcnR5QW5ub3RhdGlvbnMgJiYgb1Byb3BlcnR5QW5ub3RhdGlvbnNbXCJAY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuSGlkZGVuXCJdID8gdHJ1ZSA6IGZhbHNlXG5cdFx0XHRcdH07XG5cdFx0XHR9XG5cdFx0XHRvQ29sdW1uSW5mb3MuY29sdW1uSW5mb3MucHVzaChjb2x1bW5JbmZvKTtcblx0XHR9KTtcblxuXHRcdHJldHVybiBvQ29sdW1uSW5mb3M7XG5cdH0sXG5cblx0Z2V0VGFibGVJdGVtc1BhcmFtZXRlcnM6IGZ1bmN0aW9uIChcblx0XHR0aGlzOiBDb250cm9sLFxuXHRcdHZhbHVlTGlzdEluZm86IEFubm90YXRpb25WYWx1ZUxpc3RUeXBlLFxuXHRcdHJlcXVlc3RHcm91cElkOiBzdHJpbmcsXG5cdFx0aXNTdWdnZXN0aW9uOiBib29sZWFuLFxuXHRcdGlzVmFsdWVIZWxwV2l0aEZpeGVkVmFsdWVzOiBib29sZWFuXG5cdCk6IHN0cmluZyB7XG5cdFx0Y29uc3QgaXRlbVBhcmFtZXRlcnMgPSBbYHBhdGg6ICcvJHt2YWx1ZUxpc3RJbmZvLkNvbGxlY3Rpb25QYXRofSdgXTtcblxuXHRcdC8vIGFkZCBzZWxlY3QgdG8gb0JpbmRpbmdJbmZvIChCQ1AgMjE4MDI1NTk1NiAvIDIxNzAxNjMwMTIpXG5cdFx0Y29uc3Qgc2VsZWN0U3RyaW5nID0gX2J1aWxkJFNlbGVjdFN0cmluZyh0aGlzKTtcblxuXHRcdC8vIHNpbmNlIHRoZXJlIGNvdWxkIGJlIHJlY29tbWVuZGF0aW9ucy9yZWNlbnRseSB1c2VkIHZhbHVlcyB0byBzaG93IGluIHRoZSBzdWdnZXN0aW9uIHBvcG92ZXJcblx0XHQvLyBoZW5jZSB3ZSBuZWVkIHRvIGNyZWF0ZSBzb21lIHRyYW5zaWVudCBjb250ZXh0cyBvbiB0aGUgdmFsdWVIZWxwIGxpc3QgYmluZGluZ1xuXHRcdC8vIHNvIHdlIHdpbGwgc2V0IHRoZSB1cGRhdGVHcm91cElkIG9mIHRoZSBsaXN0IGJpbmRpbmcgdG8gYXZvaWQgc2VuZGluZyBjYWxscyB0byB0aGUgYmFja2VuZFxuXHRcdC8vIHdlIG5lZWQgdG8gZXhwbGljaXRseSBzZXQgJCRzaGFyZWRSZXF1ZXN0IHRvIGZhbHNlIHRvIG1ha2Ugc3VyZSB3ZSBjYW4gY3JlYXRlIHRyYW5zaWVudCBjb250ZXh0cyBpbiBSQVBcblx0XHRpZiAocmVxdWVzdEdyb3VwSWQpIHtcblx0XHRcdGNvbnN0IHNlbGVjdFN0cmluZ1BhcnQgPSBzZWxlY3RTdHJpbmcgPyBgLCAnJHtzZWxlY3RTdHJpbmd9J2AgOiBcIlwiO1xuXG5cdFx0XHRpdGVtUGFyYW1ldGVycy5wdXNoKFxuXHRcdFx0XHRgcGFyYW1ldGVyczogeyQkc2hhcmVkUmVxdWVzdDogZmFsc2UsICQkdXBkYXRlR3JvdXBJZDogXCJkb25vdHN1Ym1pdFwiLCAkJGdyb3VwSWQ6ICcke3JlcXVlc3RHcm91cElkfScke3NlbGVjdFN0cmluZ1BhcnR9fWBcblx0XHRcdCk7XG5cdFx0fSBlbHNlIGlmIChzZWxlY3RTdHJpbmcpIHtcblx0XHRcdGl0ZW1QYXJhbWV0ZXJzLnB1c2goYHBhcmFtZXRlcnM6IHskJHNoYXJlZFJlcXVlc3Q6IGZhbHNlLCAkJHVwZGF0ZUdyb3VwSWQ6IFwiZG9ub3RzdWJtaXRcIiwgJHNlbGVjdDogJyR7c2VsZWN0U3RyaW5nfSd9YCk7XG5cdFx0fVxuXG5cdFx0Y29uc3QgaXNTdXNwZW5kZWQgPSB2YWx1ZUxpc3RJbmZvLlBhcmFtZXRlcnMuc29tZShmdW5jdGlvbiAob1BhcmFtZXRlcikge1xuXHRcdFx0cmV0dXJuIGlzU3VnZ2VzdGlvbiB8fCBvUGFyYW1ldGVyLiRUeXBlID09PSBDb21tb25Bbm5vdGF0aW9uVHlwZXMuVmFsdWVMaXN0UGFyYW1ldGVySW47XG5cdFx0fSk7XG5cdFx0aXRlbVBhcmFtZXRlcnMucHVzaChgc3VzcGVuZGVkOiAke2lzU3VzcGVuZGVkfWApO1xuXG5cdFx0aWYgKCFpc1ZhbHVlSGVscFdpdGhGaXhlZFZhbHVlcykge1xuXHRcdFx0aXRlbVBhcmFtZXRlcnMucHVzaChcImxlbmd0aDogMTBcIik7XG5cdFx0fVxuXG5cdFx0Y29uc3Qgc29ydENvbmRpdGlvbnNGcm9tUHJlc2VudGF0aW9uVmFyaWFudCA9IFZhbHVlTGlzdEhlbHBlci5nZXRTb3J0Q29uZGl0aW9uc0Zyb21QcmVzZW50YXRpb25WYXJpYW50KHZhbHVlTGlzdEluZm8sIGlzU3VnZ2VzdGlvbik7XG5cblx0XHRpZiAoc29ydENvbmRpdGlvbnNGcm9tUHJlc2VudGF0aW9uVmFyaWFudCkge1xuXHRcdFx0aXRlbVBhcmFtZXRlcnMucHVzaChzb3J0Q29uZGl0aW9uc0Zyb21QcmVzZW50YXRpb25WYXJpYW50KTtcblx0XHR9IGVsc2UgaWYgKGlzVmFsdWVIZWxwV2l0aEZpeGVkVmFsdWVzKSB7XG5cdFx0XHRjb25zdCBkZWZhdWx0U29ydFByb3BlcnR5TmFtZSA9IF9nZXREZWZhdWx0U29ydFByb3BlcnR5TmFtZSh2YWx1ZUxpc3RJbmZvKTtcblxuXHRcdFx0aWYgKGRlZmF1bHRTb3J0UHJvcGVydHlOYW1lKSB7XG5cdFx0XHRcdGl0ZW1QYXJhbWV0ZXJzLnB1c2goYHNvcnRlcjogW3twYXRoOiAnJHtkZWZhdWx0U29ydFByb3BlcnR5TmFtZX0nLCBhc2NlbmRpbmc6IHRydWV9XWApO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiBcIntcIiArIGl0ZW1QYXJhbWV0ZXJzLmpvaW4oXCIsIFwiKSArIFwifVwiO1xuXHR9LFxuXG5cdC8vIElzIG5lZWRlZCBmb3IgXCJleHRlcm5hbFwiIHJlcHJlc2VudGF0aW9uIGluIHF1bml0XG5cdGhhc0ltcG9ydGFuY2U6IGZ1bmN0aW9uIChvVmFsdWVMaXN0Q29udGV4dDogQ29udGV4dCk6IHN0cmluZyB7XG5cdFx0cmV0dXJuIF9oYXNJbXBvcnRhbmNlSGlnaChvVmFsdWVMaXN0Q29udGV4dC5nZXRPYmplY3QoKSkgPyBcIkltcG9ydGFuY2UvSGlnaFwiIDogXCJOb25lXCI7XG5cdH0sXG5cblx0Ly8gSXMgbmVlZGVkIGZvciBcImV4dGVybmFsXCIgcmVwcmVzZW50YXRpb24gaW4gcXVuaXRcblx0Z2V0TWluU2NyZWVuV2lkdGg6IGZ1bmN0aW9uIChvVmFsdWVMaXN0OiB7IFBhcmFtZXRlcnM6IEFubm90YXRpb25WYWx1ZUxpc3RQYXJhbWV0ZXJbXSB9KTogc3RyaW5nIHtcblx0XHRyZXR1cm4gX2hhc0ltcG9ydGFuY2VIaWdoKG9WYWx1ZUxpc3QpID8gXCJ7PSAke19WSFVJPi9taW5TY3JlZW5XaWR0aH19XCIgOiBcIjQxNnB4XCI7XG5cdH0sXG5cblx0LyoqXG5cdCAqIFJldHJpZXZlcyB0aGUgY29sdW1uIHdpZHRoIGZvciBhIGdpdmVuIHByb3BlcnR5LlxuXHQgKiBAcGFyYW0gcHJvcGVydHlQYXRoIFRoZSBwcm9wZXJ0eVBhdGhcblx0ICogQHBhcmFtIGlzVmFsdWVMaXN0V2l0aEZpeGVkVmFsdWVzIEFuIGluZGljYXRvciBzdGF0aW5nIGlmIHRoZSB2YWx1ZUhlbHAgaGFzIGZpeGVkIHZhbHVlc1xuXHQgKiBAcmV0dXJucyBUaGUgd2lkdGggYXMgYSBzdHJpbmcgb3IgdW5kZWZpbmVkLlxuXHQgKi9cblx0Z2V0Q29sdW1uV2lkdGg6IGZ1bmN0aW9uIChwcm9wZXJ0eVBhdGg6IERhdGFNb2RlbE9iamVjdFBhdGg8UHJvcGVydHk+LCBpc1ZhbHVlTGlzdFdpdGhGaXhlZFZhbHVlcyA9IGZhbHNlKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcblx0XHRpZiAoQ29tbW9uVXRpbHMuaXNTbWFsbERldmljZSgpIHx8ICFwcm9wZXJ0eVBhdGgudGFyZ2V0T2JqZWN0KSByZXR1cm47XG5cdFx0Y29uc3QgcHJvcGVydHkgPSBwcm9wZXJ0eVBhdGgudGFyZ2V0T2JqZWN0O1xuXHRcdGxldCByZWxhdGVkUHJvcGVydHk6IFByb3BlcnR5W10gPSBbcHJvcGVydHldO1xuXHRcdC8vIFRoZSBhZGRpdGlvbmFsIHByb3BlcnR5IGNvdWxkIHJlZmVyIHRvIHRoZSB0ZXh0LCBjdXJyZW5jeSwgdW5pdCBvciB0aW1lem9uZVxuXHRcdGNvbnN0IGFkZGl0aW9uYWxQcm9wZXJ0eSA9XG5cdFx0XHRcdGdldEFzc29jaWF0ZWRUZXh0UHJvcGVydHkocHJvcGVydHkpIHx8XG5cdFx0XHRcdGdldEFzc29jaWF0ZWRDdXJyZW5jeVByb3BlcnR5KHByb3BlcnR5KSB8fFxuXHRcdFx0XHRnZXRBc3NvY2lhdGVkVW5pdFByb3BlcnR5KHByb3BlcnR5KSB8fFxuXHRcdFx0XHRnZXRBc3NvY2lhdGVkVGltZXpvbmVQcm9wZXJ0eShwcm9wZXJ0eSksXG5cdFx0XHR0ZXh0QW5ub3RhdGlvbiA9IHByb3BlcnR5LmFubm90YXRpb25zPy5Db21tb24/LlRleHQsXG5cdFx0XHR0ZXh0QXJyYW5nZW1lbnQgPSB0ZXh0QW5ub3RhdGlvbj8uYW5ub3RhdGlvbnM/LlVJPy5UZXh0QXJyYW5nZW1lbnQ/LnRvU3RyaW5nKCksXG5cdFx0XHRsYWJlbCA9IHByb3BlcnR5LmFubm90YXRpb25zPy5Db21tb24/LkxhYmVsPy50b1N0cmluZygpO1xuXHRcdGxldCBkaXNwbGF5TW9kZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG5cdFx0Ly8gZGVmYXVsdCB0ZXh0YXJyYW5nZW1lbnQgaXMgb25seSB1c2VkIGZvciBWSCB3aXRoIGZpeGVkIHZhbHVlc1xuXHRcdGlmIChpc1ZhbHVlTGlzdFdpdGhGaXhlZFZhbHVlcyAmJiAhdGV4dEFycmFuZ2VtZW50KSB7XG5cdFx0XHQvL2Rpc3BsYXlNb2RlID0gYXMgYW5ub3RhdGVkIG9yIGRlZmF1bHRcblx0XHRcdGRpc3BsYXlNb2RlID0gZ2V0RGlzcGxheU1vZGUocHJvcGVydHlQYXRoKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Ly9kaXNwbGF5TW9kZSA9IGFzIGFubm90YXRlZCBvciB1bmRlZmluZWRcblx0XHRcdGRpc3BsYXlNb2RlID0gdGV4dEFycmFuZ2VtZW50ICYmIGdldERpc3BsYXlNb2RlKHByb3BlcnR5UGF0aCk7XG5cdFx0fVxuXG5cdFx0aWYgKGFkZGl0aW9uYWxQcm9wZXJ0eSkge1xuXHRcdFx0aWYgKGRpc3BsYXlNb2RlID09PSBcIkRlc2NyaXB0aW9uXCIpIHtcblx0XHRcdFx0cmVsYXRlZFByb3BlcnR5ID0gW2FkZGl0aW9uYWxQcm9wZXJ0eV07XG5cdFx0XHR9IGVsc2UgaWYgKCF0ZXh0QW5ub3RhdGlvbiB8fCAoZGlzcGxheU1vZGUgJiYgZGlzcGxheU1vZGUgIT09IFwiVmFsdWVcIikpIHtcblx0XHRcdFx0cmVsYXRlZFByb3BlcnR5LnB1c2goYWRkaXRpb25hbFByb3BlcnR5KTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRsZXQgc2l6ZSA9IDA7XG5cdFx0Y29uc3QgaW5zdGFuY2VzOiBPRGF0YVR5cGVbXSA9IFtdO1xuXG5cdFx0cmVsYXRlZFByb3BlcnR5LmZvckVhY2goKHByb3A6IFByb3BlcnR5KSA9PiB7XG5cdFx0XHRjb25zdCBwcm9wZXJ0eVR5cGVDb25maWcgPSBnZXRUeXBlQ29uZmlnKHByb3AsIHVuZGVmaW5lZCk7XG5cdFx0XHRjb25zdCBQcm9wZXJ0eU9EYXRhQ29uc3RydWN0b3IgPSBPYmplY3RQYXRoLmdldChwcm9wZXJ0eVR5cGVDb25maWcudHlwZSk7XG5cdFx0XHRpZiAoUHJvcGVydHlPRGF0YUNvbnN0cnVjdG9yKSB7XG5cdFx0XHRcdGluc3RhbmNlcy5wdXNoKG5ldyBQcm9wZXJ0eU9EYXRhQ29uc3RydWN0b3IocHJvcGVydHlUeXBlQ29uZmlnLmZvcm1hdE9wdGlvbnMsIHByb3BlcnR5VHlwZUNvbmZpZy5jb25zdHJhaW50cykpO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHRcdGNvbnN0IHNXaWR0aCA9IFV0aWwuY2FsY0NvbHVtbldpZHRoKGluc3RhbmNlcywgbGFiZWwpO1xuXHRcdHNpemUgPSBzV2lkdGggPyBwYXJzZUZsb2F0KHNXaWR0aC5yZXBsYWNlKFwicmVtXCIsIFwiXCIpKSA6IDA7XG5cblx0XHRpZiAoc2l6ZSA9PT0gMCkge1xuXHRcdFx0TG9nLmVycm9yKGBDYW5ub3QgY29tcHV0ZSB0aGUgY29sdW1uIHdpZHRoIGZvciBwcm9wZXJ0eTogJHtwcm9wZXJ0eS5uYW1lfWApO1xuXHRcdH1cblx0XHRyZXR1cm4gc2l6ZSA8PSAyMCA/IHNpemUudG9TdHJpbmcoKSArIFwicmVtXCIgOiBcIjIwcmVtXCI7XG5cdH0sXG5cblx0Z2V0T3V0UGFyYW1ldGVyUGF0aHM6IGZ1bmN0aW9uIChhUGFyYW1ldGVyczogQW5ub3RhdGlvblZhbHVlTGlzdFBhcmFtZXRlcltdKTogc3RyaW5nIHtcblx0XHRsZXQgc1BhdGggPSBcIlwiO1xuXHRcdGFQYXJhbWV0ZXJzLmZvckVhY2goZnVuY3Rpb24gKG9QYXJhbWV0ZXI6IEFubm90YXRpb25WYWx1ZUxpc3RQYXJhbWV0ZXIpIHtcblx0XHRcdGlmIChvUGFyYW1ldGVyLiRUeXBlLmVuZHNXaXRoKFwiT3V0XCIpKSB7XG5cdFx0XHRcdHNQYXRoICs9IGB7JHtvUGFyYW1ldGVyLlZhbHVlTGlzdFByb3BlcnR5fX1gO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHRcdHJldHVybiBzUGF0aDtcblx0fSxcblxuXHRlbnRpdHlJc1NlYXJjaGFibGU6IGZ1bmN0aW9uIChcblx0XHRwcm9wZXJ0eUFubm90YXRpb25zOiBBbm5vdGF0aW9uc0ZvclByb3BlcnR5LFxuXHRcdGNvbGxlY3Rpb25Bbm5vdGF0aW9uczogTWV0YU1vZGVsRW50aXR5U2V0QW5ub3RhdGlvblxuXHQpOiBib29sZWFuIHtcblx0XHRjb25zdCBzZWFyY2hTdXBwb3J0ZWQgPSBwcm9wZXJ0eUFubm90YXRpb25zW1wiQGNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5WYWx1ZUxpc3RcIl0/LlNlYXJjaFN1cHBvcnRlZCxcblx0XHRcdHNlYXJjaGFibGUgPSBjb2xsZWN0aW9uQW5ub3RhdGlvbnNbXCJAT3JnLk9EYXRhLkNhcGFiaWxpdGllcy5WMS5TZWFyY2hSZXN0cmljdGlvbnNcIl0/LlNlYXJjaGFibGU7XG5cblx0XHRpZiAoXG5cdFx0XHQoc2VhcmNoYWJsZSA9PT0gdW5kZWZpbmVkICYmIHNlYXJjaFN1cHBvcnRlZCA9PT0gZmFsc2UpIHx8XG5cdFx0XHQoc2VhcmNoYWJsZSA9PT0gdHJ1ZSAmJiBzZWFyY2hTdXBwb3J0ZWQgPT09IGZhbHNlKSB8fFxuXHRcdFx0c2VhcmNoYWJsZSA9PT0gZmFsc2Vcblx0XHQpIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cdFx0cmV0dXJuIHRydWU7XG5cdH0sXG5cblx0LyoqXG5cdCAqIFJldHVybnMgdGhlIGNvbmRpdGlvbiBwYXRoIHJlcXVpcmVkIGZvciB0aGUgY29uZGl0aW9uIG1vZGVsLlxuXHQgKiBGb3IgZS5nLiA8MTpOLVByb3BlcnR5TmFtZT4qXFwvPDE6MS1Qcm9wZXJ0eU5hbWU+LzxQcm9wZXJ0eU5hbWU+LlxuXHQgKiBAcGFyYW0gbWV0YU1vZGVsIFRoZSBtZXRhbW9kZWwgaW5zdGFuY2Vcblx0ICogQHBhcmFtIGVudGl0eVNldCBUaGUgZW50aXR5IHNldCBwYXRoXG5cdCAqIEBwYXJhbSBwcm9wZXJ0eVBhdGggVGhlIHByb3BlcnR5IHBhdGhcblx0ICogQHJldHVybnMgVGhlIGZvcm1hdHRlZCBjb25kaXRpb24gcGF0aFxuXHQgKiBAcHJpdmF0ZVxuXHQgKi9cblx0X2dldENvbmRpdGlvblBhdGg6IGZ1bmN0aW9uIChtZXRhTW9kZWw6IE9EYXRhTWV0YU1vZGVsLCBlbnRpdHlTZXQ6IHN0cmluZywgcHJvcGVydHlQYXRoOiBzdHJpbmcpOiBzdHJpbmcge1xuXHRcdC8vIChzZWUgYWxzbzogc2FwL2ZlL2NvcmUvY29udmVydGVycy9jb250cm9scy9MaXN0UmVwb3J0L0ZpbHRlckJhci50cylcblx0XHRjb25zdCBwYXJ0cyA9IHByb3BlcnR5UGF0aC5zcGxpdChcIi9cIik7XG5cdFx0bGV0IGNvbmRpdGlvblBhdGggPSBcIlwiLFxuXHRcdFx0cGFydGlhbFBhdGg6IHN0cmluZyB8IHVuZGVmaW5lZDtcblxuXHRcdHdoaWxlIChwYXJ0cy5sZW5ndGgpIHtcblx0XHRcdGxldCBwYXJ0ID0gcGFydHMuc2hpZnQoKSBhcyBzdHJpbmc7XG5cdFx0XHRwYXJ0aWFsUGF0aCA9IHBhcnRpYWxQYXRoID8gYCR7cGFydGlhbFBhdGh9LyR7cGFydH1gIDogcGFydDtcblx0XHRcdGNvbnN0IHByb3BlcnR5ID0gbWV0YU1vZGVsLmdldE9iamVjdChgJHtlbnRpdHlTZXR9LyR7cGFydGlhbFBhdGh9YCk7XG5cdFx0XHRpZiAocHJvcGVydHkgJiYgcHJvcGVydHkuJGtpbmQgPT09IFwiTmF2aWdhdGlvblByb3BlcnR5XCIgJiYgcHJvcGVydHkuJGlzQ29sbGVjdGlvbikge1xuXHRcdFx0XHRwYXJ0ICs9IFwiKlwiO1xuXHRcdFx0fVxuXHRcdFx0Y29uZGl0aW9uUGF0aCA9IGNvbmRpdGlvblBhdGggPyBgJHtjb25kaXRpb25QYXRofS8ke3BhcnR9YCA6IHBhcnQ7XG5cdFx0fVxuXHRcdHJldHVybiBjb25kaXRpb25QYXRoO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBSZXR1cm5zIGFycmF5IG9mIGNvbHVtbiBkZWZpbml0aW9ucyBjb3JyZXNwb25kaW5nIHRvIHByb3BlcnRpZXMgZGVmaW5lZCBhcyBTZWxlY3Rpb24gRmllbGRzIG9uIHRoZSBDb2xsZWN0aW9uUGF0aCBlbnRpdHkgc2V0IGluIGEgVmFsdWVIZWxwLlxuXHQgKiBAcGFyYW0gbWV0YU1vZGVsIFRoZSBtZXRhbW9kZWwgaW5zdGFuY2Vcblx0ICogQHBhcmFtIGVudGl0eVNldCBUaGUgZW50aXR5IHNldCBwYXRoXG5cdCAqIEByZXR1cm5zIEFycmF5IG9mIGNvbHVtbiBkZWZpbml0aW9uc1xuXHQgKiBAcHJpdmF0ZVxuXHQgKi9cblx0X2dldENvbHVtbkRlZmluaXRpb25Gcm9tU2VsZWN0aW9uRmllbGRzOiBmdW5jdGlvbiAobWV0YU1vZGVsOiBPRGF0YU1ldGFNb2RlbCwgZW50aXR5U2V0OiBzdHJpbmcpOiBDb2x1bW5EZWZbXSB7XG5cdFx0Y29uc3QgY29sdW1uRGVmczogQ29sdW1uRGVmW10gPSBbXSxcblx0XHRcdGVudGl0eVR5cGVBbm5vdGF0aW9ucyA9IG1ldGFNb2RlbC5nZXRPYmplY3QoYCR7ZW50aXR5U2V0fS9AYCkgYXMgQW5ub3RhdGlvbnNGb3JFbnRpdHlUeXBlLFxuXHRcdFx0c2VsZWN0aW9uRmllbGRzID0gZW50aXR5VHlwZUFubm90YXRpb25zW1wiQGNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLlNlbGVjdGlvbkZpZWxkc1wiXTtcblxuXHRcdGlmIChzZWxlY3Rpb25GaWVsZHMpIHtcblx0XHRcdHNlbGVjdGlvbkZpZWxkcy5mb3JFYWNoKGZ1bmN0aW9uIChzZWxlY3Rpb25GaWVsZDogQW5ub3RhdGlvblNlbGVjdGlvbkZpZWxkKSB7XG5cdFx0XHRcdGNvbnN0IHNlbGVjdGlvbkZpZWxkUGF0aCA9IGAke2VudGl0eVNldH0vJHtzZWxlY3Rpb25GaWVsZC4kUHJvcGVydHlQYXRofWAsXG5cdFx0XHRcdFx0Y29uZGl0aW9uUGF0aCA9IFZhbHVlTGlzdEhlbHBlci5fZ2V0Q29uZGl0aW9uUGF0aChtZXRhTW9kZWwsIGVudGl0eVNldCwgc2VsZWN0aW9uRmllbGQuJFByb3BlcnR5UGF0aCksXG5cdFx0XHRcdFx0cHJvcGVydHlBbm5vdGF0aW9ucyA9IG1ldGFNb2RlbC5nZXRPYmplY3QoYCR7c2VsZWN0aW9uRmllbGRQYXRofUBgKSBhcyBBbm5vdGF0aW9uc0ZvclByb3BlcnR5LFxuXHRcdFx0XHRcdGNvbHVtbkRlZiA9IHtcblx0XHRcdFx0XHRcdHBhdGg6IGNvbmRpdGlvblBhdGgsXG5cdFx0XHRcdFx0XHRsYWJlbDogcHJvcGVydHlBbm5vdGF0aW9ucz8uW0Fubm90YXRpb25MYWJlbF0gfHwgc2VsZWN0aW9uRmllbGRQYXRoLFxuXHRcdFx0XHRcdFx0c29ydGFibGU6IHRydWUsXG5cdFx0XHRcdFx0XHRmaWx0ZXJhYmxlOiBpc1Byb3BlcnR5RmlsdGVyYWJsZShtZXRhTW9kZWwsIGVudGl0eVNldCwgc2VsZWN0aW9uRmllbGQuJFByb3BlcnR5UGF0aCwgZmFsc2UpLFxuXHRcdFx0XHRcdFx0JFR5cGU6IG1ldGFNb2RlbC5nZXRPYmplY3Qoc2VsZWN0aW9uRmllbGRQYXRoKT8uJFR5cGVcblx0XHRcdFx0XHR9O1xuXHRcdFx0XHRjb2x1bW5EZWZzLnB1c2goY29sdW1uRGVmKTtcblx0XHRcdH0pO1xuXHRcdH1cblxuXHRcdHJldHVybiBjb2x1bW5EZWZzO1xuXHR9LFxuXG5cdF9tZXJnZUNvbHVtbkRlZmluaXRpb25zRnJvbVByb3BlcnRpZXM6IGZ1bmN0aW9uIChcblx0XHRjb2x1bW5EZWZzOiBDb2x1bW5EZWZbXSxcblx0XHR2YWx1ZUxpc3RJbmZvOiBBbm5vdGF0aW9uVmFsdWVMaXN0VHlwZSxcblx0XHR2YWx1ZUxpc3RQcm9wZXJ0eTogc3RyaW5nLFxuXHRcdHByb3BlcnR5OiBDb2x1bW5Qcm9wZXJ0eSxcblx0XHRwcm9wZXJ0eUFubm90YXRpb25zOiBBbm5vdGF0aW9uc0ZvclByb3BlcnR5XG5cdCk6IHZvaWQge1xuXHRcdGxldCBjb2x1bW5QYXRoID0gdmFsdWVMaXN0UHJvcGVydHksXG5cdFx0XHRjb2x1bW5Qcm9wZXJ0eVR5cGUgPSBwcm9wZXJ0eS4kVHlwZTtcblx0XHRjb25zdCBsYWJlbCA9IHByb3BlcnR5QW5ub3RhdGlvbnNbQW5ub3RhdGlvbkxhYmVsXSB8fCBjb2x1bW5QYXRoLFxuXHRcdFx0dGV4dEFubm90YXRpb24gPSBwcm9wZXJ0eUFubm90YXRpb25zW0Fubm90YXRpb25UZXh0XTtcblxuXHRcdGlmIChcblx0XHRcdHRleHRBbm5vdGF0aW9uICYmXG5cdFx0XHRwcm9wZXJ0eUFubm90YXRpb25zW0Fubm90YXRpb25UZXh0VUlUZXh0QXJyYW5nZW1lbnRdPy4kRW51bU1lbWJlciA9PT0gXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5UZXh0QXJyYW5nZW1lbnRUeXBlL1RleHRPbmx5XCJcblx0XHQpIHtcblx0XHRcdC8vIHRoZSBjb2x1bW4gcHJvcGVydHkgaXMgdGhlIG9uZSBjb21pbmcgZnJvbSB0aGUgdGV4dCBhbm5vdGF0aW9uXG5cdFx0XHRjb2x1bW5QYXRoID0gdGV4dEFubm90YXRpb24uJFBhdGg7XG5cdFx0XHRjb25zdCB0ZXh0UHJvcGVydHlQYXRoID0gYC8ke3ZhbHVlTGlzdEluZm8uQ29sbGVjdGlvblBhdGh9LyR7Y29sdW1uUGF0aH1gO1xuXHRcdFx0Y29sdW1uUHJvcGVydHlUeXBlID0gdmFsdWVMaXN0SW5mby4kbW9kZWwuZ2V0TWV0YU1vZGVsKCk/LmdldE9iamVjdCh0ZXh0UHJvcGVydHlQYXRoKT8uJFR5cGUgYXMgc3RyaW5nO1xuXHRcdH1cblxuXHRcdGlmIChjb2x1bW5Ob3RBbHJlYWR5RGVmaW5lZChjb2x1bW5EZWZzLCBjb2x1bW5QYXRoKSkge1xuXHRcdFx0Y29uc3QgY29sdW1uRGVmOiBDb2x1bW5EZWYgPSB7XG5cdFx0XHRcdHBhdGg6IGNvbHVtblBhdGgsXG5cdFx0XHRcdC8vIGVuc3VyZSB0aGUgdGV4dCBhc3NvY2lhdGVkIHdpdGggYSBjb2x1bW4gdGhhdCByZWZlcmVuY2VzIGEgbmF2aWdhdGlvbiBwcm9wZXJ0eSByZWZsZWN0cyB0aGUgc2FtZSBuYXZpZ2F0aW9uIHN0cnVjdHVyZSBhcyB0aGUgY29sdW1uXG5cdFx0XHRcdHRleHRQYXRoOlxuXHRcdFx0XHRcdHRleHRBbm5vdGF0aW9uPy4kUGF0aCAmJiB2YWx1ZUxpc3RQcm9wZXJ0eS5pbmNsdWRlcyhcIi9cIilcblx0XHRcdFx0XHRcdD8gdmFsdWVMaXN0UHJvcGVydHkuc3Vic3RyaW5nKDAsIHZhbHVlTGlzdFByb3BlcnR5Lmxhc3RJbmRleE9mKFwiL1wiKSkgKyBcIi9cIiArIHRleHRBbm5vdGF0aW9uLiRQYXRoXG5cdFx0XHRcdFx0XHQ6IHRleHRBbm5vdGF0aW9uPy4kUGF0aCxcblx0XHRcdFx0bGFiZWw6IGxhYmVsLFxuXHRcdFx0XHRzb3J0YWJsZTogdHJ1ZSxcblx0XHRcdFx0ZmlsdGVyYWJsZTogIXByb3BlcnR5QW5ub3RhdGlvbnNbXCJAY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuSGlkZGVuRmlsdGVyXCJdLFxuXHRcdFx0XHQkVHlwZTogY29sdW1uUHJvcGVydHlUeXBlXG5cdFx0XHR9O1xuXHRcdFx0Y29sdW1uRGVmcy5wdXNoKGNvbHVtbkRlZik7XG5cdFx0fVxuXHR9LFxuXG5cdGZpbHRlckluT3V0UGFyYW1ldGVyczogZnVuY3Rpb24gKHZoUGFyYW1ldGVyczogSW5PdXRQYXJhbWV0ZXJbXSwgdHlwZUZpbHRlcjogc3RyaW5nW10pOiBJbk91dFBhcmFtZXRlcltdIHtcblx0XHRyZXR1cm4gdmhQYXJhbWV0ZXJzLmZpbHRlcihmdW5jdGlvbiAocGFyYW1ldGVyKSB7XG5cdFx0XHRyZXR1cm4gdHlwZUZpbHRlci5pbmNsdWRlcyhwYXJhbWV0ZXIucGFybWV0ZXJUeXBlKTtcblx0XHR9KTtcblx0fSxcblxuXHRnZXRJblBhcmFtZXRlcnM6IGZ1bmN0aW9uICh2aFBhcmFtZXRlcnM6IEluT3V0UGFyYW1ldGVyW10pOiBJbk91dFBhcmFtZXRlcltdIHtcblx0XHRyZXR1cm4gVmFsdWVMaXN0SGVscGVyLmZpbHRlckluT3V0UGFyYW1ldGVycyh2aFBhcmFtZXRlcnMsIFtcblx0XHRcdEFubm90YXRpb25WYWx1ZUxpc3RQYXJhbWV0ZXJJbixcblx0XHRcdEFubm90YXRpb25WYWx1ZUxpc3RQYXJhbWV0ZXJDb25zdGFudCxcblx0XHRcdEFubm90YXRpb25WYWx1ZUxpc3RQYXJhbWV0ZXJJbk91dFxuXHRcdF0pO1xuXHR9LFxuXG5cdGdldE91dFBhcmFtZXRlcnM6IGZ1bmN0aW9uICh2aFBhcmFtZXRlcnM6IEluT3V0UGFyYW1ldGVyW10pOiBJbk91dFBhcmFtZXRlcltdIHtcblx0XHRyZXR1cm4gVmFsdWVMaXN0SGVscGVyLmZpbHRlckluT3V0UGFyYW1ldGVycyh2aFBhcmFtZXRlcnMsIFtBbm5vdGF0aW9uVmFsdWVMaXN0UGFyYW1ldGVyT3V0LCBBbm5vdGF0aW9uVmFsdWVMaXN0UGFyYW1ldGVySW5PdXRdKTtcblx0fSxcblxuXHRjcmVhdGVWSFVJTW9kZWw6IGZ1bmN0aW9uICh2YWx1ZUhlbHA6IFZhbHVlSGVscCwgcHJvcGVydHlQYXRoOiBzdHJpbmcsIG1ldGFNb2RlbDogT0RhdGFNZXRhTW9kZWwpOiBKU09OTW9kZWwge1xuXHRcdC8vIHNldHRpbmcgdGhlIF9WSFVJIG1vZGVsIGV2YWx1YXRlZCBpbiB0aGUgVmFsdWVMaXN0VGFibGUgZnJhZ21lbnRcblx0XHRjb25zdCB2aFVJTW9kZWwgPSBuZXcgSlNPTk1vZGVsKHt9KSxcblx0XHRcdHByb3BlcnR5QW5ub3RhdGlvbnMgPSBtZXRhTW9kZWwuZ2V0T2JqZWN0KGAke3Byb3BlcnR5UGF0aH1AYCkgYXMgQW5ub3RhdGlvbnNGb3JQcm9wZXJ0eTtcblxuXHRcdHZhbHVlSGVscC5zZXRNb2RlbCh2aFVJTW9kZWwsIFwiX1ZIVUlcIik7XG5cdFx0Ly8gSWRlbnRpZmllcyB0aGUgXCJDb250ZXh0RGVwZW5kZW50LVNjZW5hcmlvXCJcblx0XHR2aFVJTW9kZWwuc2V0UHJvcGVydHkoXCIvaGFzVmFsdWVMaXN0UmVsZXZhbnRRdWFsaWZpZXJzXCIsICEhcHJvcGVydHlBbm5vdGF0aW9uc1tBbm5vdGF0aW9uc1ZhbHVlTGlzdFJlbGV2YW50UXVhbGlmaWVyc10pO1xuXHRcdC8qIFByb3BlcnR5IGxhYmVsIGZvciBkaWFsb2cgdGl0bGUgKi9cblx0XHR2aFVJTW9kZWwuc2V0UHJvcGVydHkoXCIvcHJvcGVydHlMYWJlbFwiLCBwcm9wZXJ0eUFubm90YXRpb25zW0Fubm90YXRpb25MYWJlbF0pO1xuXG5cdFx0cmV0dXJuIHZoVUlNb2RlbDtcblx0fSxcblxuXHQvKipcblx0ICogUmV0dXJucyB0aGUgdGl0bGUgb2YgdGhlIHZhbHVlIGhlbHAgZGlhbG9nLlxuXHQgKiBCeSBkZWZhdWx0LCB0aGUgZGF0YSBmaWVsZCBsYWJlbCBpcyB1c2VkLCBvdGhlcndpc2UgZWl0aGVyIHRoZSBwcm9wZXJ0eSBsYWJlbCBvciB0aGUgdmFsdWUgbGlzdCBsYWJlbCBpcyB1c2VkIGFzIGEgZmFsbGJhY2suXG5cdCAqIEZvciBjb250ZXh0LWRlcGVuZGVudCB2YWx1ZSBoZWxwcywgYnkgZGVmYXVsdCB0aGUgdmFsdWUgbGlzdCBsYWJlbCBpcyB1c2VkLCBvdGhlcndpc2UgZWl0aGVyIHRoZSBwcm9wZXJ0eSBsYWJlbCBvciB0aGUgZGF0YSBmaWVsZCBsYWJlbCBpcyB1c2VkIGFzIGEgZmFsbGJhY2suXG5cdCAqIEBwYXJhbSB2YWx1ZUhlbHAgVGhlIHZhbHVlSGVscCBpbnN0YW5jZVxuXHQgKiBAcGFyYW0gdmFsdWVoZWxwTGFiZWwgVGhlIGxhYmVsIGluIHRoZSB2YWx1ZSBoZWxwIG1ldGFkYXRhXG5cdCAqIEByZXR1cm5zIFRoZSB0aXRsZSBmb3IgdGhlIHZhbHVlSGVscCBkaWFsb2dcblx0ICogQHByaXZhdGVcblx0ICovXG5cdF9nZXREaWFsb2dUaXRsZTogZnVuY3Rpb24gKHZhbHVlSGVscDogVmFsdWVIZWxwLCB2YWx1ZWhlbHBMYWJlbDogc3RyaW5nIHwgdW5kZWZpbmVkKTogc3RyaW5nIHtcblx0XHRjb25zdCBwcm9wZXJ0eUxhYmVsID0gKHZhbHVlSGVscC5nZXRNb2RlbChcIl9WSFVJXCIpIGFzIEpTT05Nb2RlbCkuZ2V0UHJvcGVydHkoXCIvcHJvcGVydHlMYWJlbFwiKTtcblx0XHRjb25zdCBkYXRhRmllbGRMYWJlbCA9IHZhbHVlSGVscC5nZXRDb250cm9sKCk/LmdldFByb3BlcnR5KFwibGFiZWxcIik7XG5cdFx0cmV0dXJuICh2YWx1ZUhlbHAuZ2V0TW9kZWwoXCJfVkhVSVwiKSBhcyBKU09OTW9kZWwpLmdldFByb3BlcnR5KFwiL2hhc1ZhbHVlTGlzdFJlbGV2YW50UXVhbGlmaWVyc1wiKVxuXHRcdFx0PyB2YWx1ZWhlbHBMYWJlbCB8fCBwcm9wZXJ0eUxhYmVsIHx8IGRhdGFGaWVsZExhYmVsXG5cdFx0XHQ6IGRhdGFGaWVsZExhYmVsIHx8IHByb3BlcnR5TGFiZWwgfHwgdmFsdWVoZWxwTGFiZWw7XG5cdH0sXG5cblx0ZGVzdHJveVZIQ29udGVudDogZnVuY3Rpb24gKHZhbHVlSGVscDogVmFsdWVIZWxwIHwgdW5kZWZpbmVkKTogdm9pZCB7XG5cdFx0aWYgKHZhbHVlSGVscCkge1xuXHRcdFx0dmFsdWVIZWxwLmdldERpYWxvZygpPy5kZXN0cm95Q29udGVudCgpO1xuXHRcdFx0dmFsdWVIZWxwLmdldFR5cGVhaGVhZCgpPy5kZXN0cm95Q29udGVudCgpO1xuXHRcdH1cblx0fSxcblxuXHRwdXREZWZhdWx0UXVhbGlmaWVyRmlyc3Q6IGZ1bmN0aW9uIChxdWFsaWZpZXJzOiBzdHJpbmdbXSk6IHN0cmluZ1tdIHtcblx0XHRjb25zdCBpbmRleERlZmF1bHRWSCA9IHF1YWxpZmllcnMuaW5kZXhPZihcIlwiKTtcblxuXHRcdC8vIGRlZmF1bHQgVmFsdWVIZWxwIHdpdGhvdXQgcXVhbGlmaWVyIHNob3VsZCBiZSB0aGUgZmlyc3Rcblx0XHRpZiAoaW5kZXhEZWZhdWx0VkggPiAwKSB7XG5cdFx0XHRxdWFsaWZpZXJzLnVuc2hpZnQocXVhbGlmaWVyc1tpbmRleERlZmF1bHRWSF0pO1xuXHRcdFx0cXVhbGlmaWVycy5zcGxpY2UoaW5kZXhEZWZhdWx0VkggKyAxLCAxKTtcblx0XHR9XG5cdFx0cmV0dXJuIHF1YWxpZmllcnM7XG5cdH0sXG5cblx0X2dldENvbnRleHRQcmVmaXg6IGZ1bmN0aW9uIChiaW5kaW5nQ29udGV4dDogQ29udGV4dCB8IHVuZGVmaW5lZCwgcHJvcGVydHlCaW5kaW5nUGFydHM6IHN0cmluZ1tdKTogc3RyaW5nIHtcblx0XHRpZiAoYmluZGluZ0NvbnRleHQgJiYgYmluZGluZ0NvbnRleHQuZ2V0UGF0aCgpKSB7XG5cdFx0XHRjb25zdCBiaW5kaWdDb250ZXh0UGFydHMgPSBiaW5kaW5nQ29udGV4dC5nZXRQYXRoKCkuc3BsaXQoXCIvXCIpO1xuXHRcdFx0aWYgKHByb3BlcnR5QmluZGluZ1BhcnRzLmxlbmd0aCAtIGJpbmRpZ0NvbnRleHRQYXJ0cy5sZW5ndGggPiAxKSB7XG5cdFx0XHRcdGNvbnN0IGNvbnRleHRQcmVmaXhQYXJ0cyA9IFtdO1xuXHRcdFx0XHRmb3IgKGxldCBpID0gYmluZGlnQ29udGV4dFBhcnRzLmxlbmd0aDsgaSA8IHByb3BlcnR5QmluZGluZ1BhcnRzLmxlbmd0aCAtIDE7IGkrKykge1xuXHRcdFx0XHRcdGNvbnRleHRQcmVmaXhQYXJ0cy5wdXNoKHByb3BlcnR5QmluZGluZ1BhcnRzW2ldKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gYCR7Y29udGV4dFByZWZpeFBhcnRzLmpvaW4oXCIvXCIpfS9gO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiBcIlwiO1xuXHR9LFxuXG5cdF9nZXRWaFBhcmFtZXRlcjogZnVuY3Rpb24gKFxuXHRcdGNvbmRpdGlvbk1vZGVsOiBzdHJpbmcgfCB1bmRlZmluZWQsXG5cdFx0dmFsdWVIZWxwOiBWYWx1ZUhlbHAgfCB1bmRlZmluZWQsXG5cdFx0Y29udGV4dFByZWZpeDogc3RyaW5nLFxuXHRcdHBhcmFtZXRlcjogQW5ub3RhdGlvblZhbHVlTGlzdFBhcmFtZXRlcixcblx0XHR2aE1ldGFNb2RlbDogT0RhdGFNZXRhTW9kZWwsXG5cdFx0bG9jYWxEYXRhUHJvcGVydHlQYXRoOiBzdHJpbmdcblx0KTogSW5PdXRQYXJhbWV0ZXIge1xuXHRcdGxldCB2YWx1ZVBhdGg6IHN0cmluZyB8IHVuZGVmaW5lZCA9IFwiXCI7XG5cdFx0Y29uc3QgYmluZGluZ0NvbnRleHQgPSB2YWx1ZUhlbHA/LmdldEJpbmRpbmdDb250ZXh0KCk7XG5cdFx0aWYgKGNvbmRpdGlvbk1vZGVsICYmIGNvbmRpdGlvbk1vZGVsLmxlbmd0aCA+IDApIHtcblx0XHRcdGlmIChcblx0XHRcdFx0dmFsdWVIZWxwPy5nZXRQYXJlbnQoKT8uaXNBKFwic2FwLnVpLm1kYy5UYWJsZVwiKSA9PT0gdHJ1ZSAmJlxuXHRcdFx0XHRiaW5kaW5nQ29udGV4dCAmJlxuXHRcdFx0XHRWYWx1ZUxpc3RIZWxwZXIuX3BhcmFtZXRlcklzQShwYXJhbWV0ZXIsIFtcblx0XHRcdFx0XHRDb21tb25Bbm5vdGF0aW9uVHlwZXMuVmFsdWVMaXN0UGFyYW1ldGVySW4sXG5cdFx0XHRcdFx0Q29tbW9uQW5ub3RhdGlvblR5cGVzLlZhbHVlTGlzdFBhcmFtZXRlckluT3V0XG5cdFx0XHRcdF0pXG5cdFx0XHQpIHtcblx0XHRcdFx0Ly8gU3BlY2lhbCBoYW5kbGluZyBmb3IgdmFsdWUgaGVscCB1c2VkIGluIGZpbHRlciBkaWFsb2dcblx0XHRcdFx0Y29uc3QgcGFydHMgPSBsb2NhbERhdGFQcm9wZXJ0eVBhdGguc3BsaXQoXCIvXCIpO1xuXHRcdFx0XHRpZiAocGFydHMubGVuZ3RoID4gMSkge1xuXHRcdFx0XHRcdGNvbnN0IGZpcnN0TmF2aWdhdGlvblByb3BlcnR5ID0gcGFydHNbMF07XG5cdFx0XHRcdFx0Y29uc3Qgb0JvdW5kRW50aXR5ID0gdmhNZXRhTW9kZWwuZ2V0TWV0YUNvbnRleHQoYmluZGluZ0NvbnRleHQuZ2V0UGF0aCgpKTtcblx0XHRcdFx0XHRjb25zdCBzUGF0aE9mVGFibGUgPSAodmFsdWVIZWxwLmdldFBhcmVudCgpIGFzIHVua25vd24gYXMgeyBnZXRSb3dCaW5kaW5nOiBGdW5jdGlvbiB9KS5nZXRSb3dCaW5kaW5nKCkuZ2V0UGF0aCgpOyAvL1RPRE9cblx0XHRcdFx0XHRpZiAob0JvdW5kRW50aXR5LmdldE9iamVjdChgJHtzUGF0aE9mVGFibGV9LyRQYXJ0bmVyYCkgPT09IGZpcnN0TmF2aWdhdGlvblByb3BlcnR5KSB7XG5cdFx0XHRcdFx0XHQvLyBVc2luZyB0aGUgY29uZGl0aW9uIG1vZGVsIGRvZXNuJ3QgbWFrZSBhbnkgc2Vuc2UgaW4gY2FzZSBhbiBpbi1wYXJhbWV0ZXIgdXNlcyBhIG5hdmlnYXRpb24gcHJvcGVydHlcblx0XHRcdFx0XHRcdC8vIHJlZmVycmluZyB0byB0aGUgcGFydG5lci4gVGhlcmVmb3JlIHVzaW5nIHRoZSBGVkggY29udGV4dCBpbnN0ZWFkIG9mIHRoZSBjb25kaXRpb24gbW9kZWwuXG5cdFx0XHRcdFx0XHR2YWx1ZVBhdGggPSBsb2NhbERhdGFQcm9wZXJ0eVBhdGg7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2UgaWYgKFxuXHRcdFx0XHR2YWx1ZUhlbHA/LmdldFBhcmVudCgpPy5nZXRQYXJlbnQoKT8uZ2V0UGFyZW50KCk/LmlzQTxGaWx0ZXJCYXJBUEk+KFwic2FwLmZlLm1hY3Jvcy5maWx0ZXJCYXIuRmlsdGVyQmFyQVBJXCIpID09PSB0cnVlICYmXG5cdFx0XHRcdGJpbmRpbmdDb250ZXh0ICYmXG5cdFx0XHRcdFZhbHVlTGlzdEhlbHBlci5fcGFyYW1ldGVySXNBKHBhcmFtZXRlciwgW1xuXHRcdFx0XHRcdENvbW1vbkFubm90YXRpb25UeXBlcy5WYWx1ZUxpc3RQYXJhbWV0ZXJJbixcblx0XHRcdFx0XHRDb21tb25Bbm5vdGF0aW9uVHlwZXMuVmFsdWVMaXN0UGFyYW1ldGVySW5PdXRcblx0XHRcdFx0XSlcblx0XHRcdCkge1xuXHRcdFx0XHQvLyBJbiBjYXNlIHdlIGFyZSBhIHZhbHVlIGhlbHAgb2YgYSBGaWx0ZXJCYXIsIHdlIGNhbiBnbyB1cCB0byB0aGUgQVBJIHRvIGNoZWNrIGlmIHdlIGFyZSBvbiBhIGZpbHRlcmJhciByZXByZXNlbnRpbmcgYSBuYXZpZ2F0aW9uIHByb3BlcnR5XG5cdFx0XHRcdGNvbnN0IGZpbHRlckJhckFQSSA9IHZhbHVlSGVscC5nZXRQYXJlbnQoKT8uZ2V0UGFyZW50KCk/LmdldFBhcmVudCgpIGFzIEZpbHRlckJhckFQSTtcblx0XHRcdFx0Y29uc3QgZmlsdGVyQmFyTWV0YVBhdGggPSBmaWx0ZXJCYXJBUEkubWV0YVBhdGg7XG5cdFx0XHRcdGNvbnN0IHZhbHVlSGVscENvbnRleHRQYXRoID0gdmhNZXRhTW9kZWwuZ2V0TWV0YVBhdGgoYmluZGluZ0NvbnRleHQuZ2V0UGF0aCgpKTtcblx0XHRcdFx0Y29uc3QgY29udGV4dE1ldGFQYXRoID0gbmV3IE1ldGFQYXRoKGNvbnZlcnRUeXBlcyh2aE1ldGFNb2RlbCksIHZhbHVlSGVscENvbnRleHRQYXRoLCB2YWx1ZUhlbHBDb250ZXh0UGF0aCk7XG5cdFx0XHRcdGNvbnN0IG1ldGFQYXRoID0gbmV3IE1ldGFQYXRoKGNvbnZlcnRUeXBlcyh2aE1ldGFNb2RlbCksIGZpbHRlckJhck1ldGFQYXRoLCB2YWx1ZUhlbHBDb250ZXh0UGF0aCk7XG5cdFx0XHRcdGNvbnN0IG5ld1BhdGggPSBtZXRhUGF0aC5nZXRNZXRhUGF0aEZvclBhdGg8UHJvcGVydHk+KGxvY2FsRGF0YVByb3BlcnR5UGF0aCk7XG5cdFx0XHRcdGlmIChuZXdQYXRoICYmIG5ld1BhdGguZ2V0VGFyZ2V0KCkpIHtcblx0XHRcdFx0XHRjb25zdCB0YXJnZXRFbnRpdHlTZXQgPSBuZXdQYXRoLmdldENsb3Nlc3RFbnRpdHlTZXQoKTtcblx0XHRcdFx0XHRpZiAodGFyZ2V0RW50aXR5U2V0ID09PSBjb250ZXh0TWV0YVBhdGguZ2V0Q2xvc2VzdEVudGl0eVNldCgpKSB7XG5cdFx0XHRcdFx0XHR2YWx1ZVBhdGggPSBjb250ZXh0TWV0YVBhdGguZ2V0TWV0YVBhdGhGb3JPYmplY3QobmV3UGF0aC5nZXRUYXJnZXQoKSk/LmdldFJlbGF0aXZlUGF0aCgpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0aWYgKCF2YWx1ZVBhdGgpIHtcblx0XHRcdFx0dmFsdWVQYXRoID0gY29uZGl0aW9uTW9kZWwgKyBcIj4vY29uZGl0aW9ucy9cIiArIGxvY2FsRGF0YVByb3BlcnR5UGF0aDtcblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0dmFsdWVQYXRoID0gY29udGV4dFByZWZpeCArIGxvY2FsRGF0YVByb3BlcnR5UGF0aDtcblx0XHR9XG5cblx0XHRyZXR1cm4ge1xuXHRcdFx0cGFybWV0ZXJUeXBlOiBwYXJhbWV0ZXIuJFR5cGUsXG5cdFx0XHRzb3VyY2U6IHZhbHVlUGF0aCxcblx0XHRcdGhlbHBQYXRoOiBwYXJhbWV0ZXIuVmFsdWVMaXN0UHJvcGVydHksXG5cdFx0XHRjb25zdGFudFZhbHVlOiBwYXJhbWV0ZXIuQ29uc3RhbnQsXG5cdFx0XHRpbml0aWFsVmFsdWVJc1NpZ25pZmljYW50OiBCb29sZWFuKHBhcmFtZXRlci5Jbml0aWFsVmFsdWVJc1NpZ25pZmljYW50KVxuXHRcdH07XG5cdH0sXG5cblx0X3BhcmFtZXRlcklzQShwYXJhbWV0ZXI6IEFubm90YXRpb25WYWx1ZUxpc3RQYXJhbWV0ZXIsIHBhcmFtZXRlclR5cGVzOiBDb21tb25Bbm5vdGF0aW9uVHlwZXNbXSk6IGJvb2xlYW4ge1xuXHRcdHJldHVybiBwYXJhbWV0ZXJUeXBlcy5pbmNsdWRlcyhwYXJhbWV0ZXIuJFR5cGUgYXMgQ29tbW9uQW5ub3RhdGlvblR5cGVzKTtcblx0fSxcblxuXHRfZW5yaWNoUGF0aDogZnVuY3Rpb24gKFxuXHRcdHBhdGg6IFBhdGgsXG5cdFx0cHJvcGVydHlQYXRoOiBzdHJpbmcsXG5cdFx0bG9jYWxEYXRhUHJvcGVydHlQYXRoOiBzdHJpbmcsXG5cdFx0cGFyYW1ldGVyOiBBbm5vdGF0aW9uVmFsdWVMaXN0UGFyYW1ldGVyLFxuXHRcdHByb3BlcnR5TmFtZTogc3RyaW5nIHwgdW5kZWZpbmVkLFxuXHRcdHByb3BlcnR5QW5ub3RhdGlvbnM6IEFubm90YXRpb25zRm9yUHJvcGVydHksXG5cdFx0ZXh0ZXJuYWxJZFBhdGg6IHN0cmluZyB8IHVuZGVmaW5lZFxuXHQpOiB2b2lkIHtcblx0XHRpZiAoXG5cdFx0XHQhcGF0aC5rZXkgJiZcblx0XHRcdFZhbHVlTGlzdEhlbHBlci5fcGFyYW1ldGVySXNBKHBhcmFtZXRlciwgW0NvbW1vbkFubm90YXRpb25UeXBlcy5WYWx1ZUxpc3RQYXJhbWV0ZXJJbk91dF0pICYmXG5cdFx0XHRsb2NhbERhdGFQcm9wZXJ0eVBhdGggPT09IHByb3BlcnR5TmFtZVxuXHRcdCkge1xuXHRcdFx0LyogRVhURVJOQUxJRCAqL1xuXHRcdFx0Y29uc3QgZXh0ZXJuYWxJZFByb3BlcnR5ID0gZXh0ZXJuYWxJZFBhdGg/LnNwbGl0KFwiL1wiKS5wb3AoKTtcblx0XHRcdHBhcmFtZXRlci5WYWx1ZUxpc3RQcm9wZXJ0eSA9IGV4dGVybmFsSWRQcm9wZXJ0eSA/IGV4dGVybmFsSWRQcm9wZXJ0eSA6IHBhcmFtZXRlci5WYWx1ZUxpc3RQcm9wZXJ0eTtcblx0XHRcdHBhdGguZmllbGRQcm9wZXJ0eVBhdGggPSBwcm9wZXJ0eVBhdGg7XG5cdFx0XHRwYXRoLmtleSA9IHBhcmFtZXRlci5WYWx1ZUxpc3RQcm9wZXJ0eTtcblxuXHRcdFx0Ly9Pbmx5IHRoZSB0ZXh0IGFubm90YXRpb24gb2YgdGhlIGtleSBjYW4gc3BlY2lmeSB0aGUgZGVzY3JpcHRpb25cblx0XHRcdHBhdGguZGVzY3JpcHRpb25QYXRoID0gcHJvcGVydHlBbm5vdGF0aW9uc1tBbm5vdGF0aW9uVGV4dF0/LiRQYXRoIHx8IFwiXCI7XG5cdFx0fVxuXHR9LFxuXG5cdF9lbnJpY2hLZXlzOiBmdW5jdGlvbiAodmhLZXlzOiBzdHJpbmdbXSwgcGFyYW1ldGVyOiBBbm5vdGF0aW9uVmFsdWVMaXN0UGFyYW1ldGVyKTogdm9pZCB7XG5cdFx0aWYgKFxuXHRcdFx0VmFsdWVMaXN0SGVscGVyLl9wYXJhbWV0ZXJJc0EocGFyYW1ldGVyLCBWYWx1ZUxpc3RIZWxwZXIuZ2V0SW5BbmRPdXRQYXJhbWV0ZXJzTGlzdCgpKSAmJlxuXHRcdFx0IXZoS2V5cy5pbmNsdWRlcyhwYXJhbWV0ZXIuVmFsdWVMaXN0UHJvcGVydHkpXG5cdFx0KSB7XG5cdFx0XHR2aEtleXMucHVzaChwYXJhbWV0ZXIuVmFsdWVMaXN0UHJvcGVydHkpO1xuXHRcdH1cblx0fSxcblxuXHRfZ2V0RW50aXR5VHlwZTogYXN5bmMgZnVuY3Rpb24gKG1ldGFNb2RlbFZIOiBPRGF0YU1ldGFNb2RlbCwgZW50aXR5U2V0UGF0aDogc3RyaW5nKTogUHJvbWlzZTxFbnRpdHlUeXBlPiB7XG5cdFx0cmV0dXJuIG1ldGFNb2RlbFZILmdldE9iamVjdChgJHtlbnRpdHlTZXRQYXRofS9gKSB8fCAoYXdhaXQgbWV0YU1vZGVsVkgucmVxdWVzdE9iamVjdChgJHtlbnRpdHlTZXRQYXRofS9gKSk7XG5cdH0sXG5cblx0LyoqXG5cdCAqIE1ldGhvZCB0byBwcmUtcHJvY2VzcyBhIHZhbHVlIGxpc3QgYW5ub3RhdGlvbiBiZWZvcmUgdXNpbmcgdGhlbSBpbiB0aGUgdGVtcGxhdGluZy5cblx0ICogQHBhcmFtIGFubm90YXRpb25WYWx1ZUxpc3RUeXBlXG5cdCAqIEBwYXJhbSBwcm9wZXJ0eU5hbWVcblx0ICogQHBhcmFtIGNvbmRpdGlvbk1vZGVsXG5cdCAqIEBwYXJhbSB2YWx1ZUhlbHBcblx0ICogQHBhcmFtIGNvbnRleHRQcmVmaXhcblx0ICogQHBhcmFtIG1ldGFNb2RlbFxuXHQgKiBAcGFyYW0gdmFsdWVIZWxwUXVhbGlmaWVyXG5cdCAqIEBwYXJhbSBwYXlsb2FkXG5cdCAqIEBwYXJhbSBlbnRpdHlUeXBlXG5cdCAqIEByZXR1cm5zIFRoZSBWYWx1ZUxpc3RJbmZvIHRvIGJlIHVzZWQgaW4gdGVtcGxhdGluZ1xuXHQgKi9cblx0X3Byb2Nlc3NQYXJhbWV0ZXJzOiBmdW5jdGlvbiAoXG5cdFx0YW5ub3RhdGlvblZhbHVlTGlzdFR5cGU6IEFubm90YXRpb25WYWx1ZUxpc3RUeXBlLFxuXHRcdHByb3BlcnR5TmFtZTogc3RyaW5nIHwgdW5kZWZpbmVkLFxuXHRcdGNvbmRpdGlvbk1vZGVsOiBzdHJpbmcgfCB1bmRlZmluZWQsXG5cdFx0dmFsdWVIZWxwOiBWYWx1ZUhlbHAgfCB1bmRlZmluZWQsXG5cdFx0Y29udGV4dFByZWZpeDogc3RyaW5nLFxuXHRcdG1ldGFNb2RlbDogT0RhdGFNZXRhTW9kZWwsXG5cdFx0dmFsdWVIZWxwUXVhbGlmaWVyOiBzdHJpbmcsXG5cdFx0cGF5bG9hZDogVmFsdWVIZWxwUGF5bG9hZCB8IHVuZGVmaW5lZCxcblx0XHRlbnRpdHlUeXBlOiBFbnRpdHlUeXBlIHwgdW5kZWZpbmVkXG5cdCk6IFZhbHVlTGlzdEluZm8gfCB1bmRlZmluZWQge1xuXHRcdGNvbnN0IGlzRm9yTXVsdGlWYWx1ZUZpZWxkID0gcGF5bG9hZD8udXNlTXVsdGlWYWx1ZUZpZWxkO1xuXHRcdGNvbnN0IG1ldGFNb2RlbFZIID0gYW5ub3RhdGlvblZhbHVlTGlzdFR5cGUuJG1vZGVsLmdldE1ldGFNb2RlbCgpLFxuXHRcdFx0ZW50aXR5U2V0UGF0aCA9IGAvJHthbm5vdGF0aW9uVmFsdWVMaXN0VHlwZS5Db2xsZWN0aW9uUGF0aH1gO1xuXHRcdGlmIChlbnRpdHlUeXBlID09PSB1bmRlZmluZWQpIHtcblx0XHRcdExvZy5lcnJvcihgSW5jb25zaXN0ZW50IHZhbHVlIGhlbHAgbWV0YWRhdGE6IEVudGl0eSAke2VudGl0eVNldFBhdGh9IGlzIG5vdCBkZWZpbmVkYCk7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHRcdGNvbnN0IGNvbHVtbkRlZnMgPSBWYWx1ZUxpc3RIZWxwZXIuX2dldENvbHVtbkRlZmluaXRpb25Gcm9tU2VsZWN0aW9uRmllbGRzKG1ldGFNb2RlbFZILCBlbnRpdHlTZXRQYXRoKSxcblx0XHRcdHZoUGFyYW1ldGVyczogSW5PdXRQYXJhbWV0ZXJbXSA9IFtdLFxuXHRcdFx0cGF0aDogUGF0aCA9IHtcblx0XHRcdFx0ZmllbGRQcm9wZXJ0eVBhdGg6IFwiXCIsXG5cdFx0XHRcdGRlc2NyaXB0aW9uUGF0aDogXCJcIixcblx0XHRcdFx0a2V5OiBcIlwiXG5cdFx0XHR9O1xuXHRcdGxldCB2aEtleXM6IHN0cmluZ1tdID0gW107XG5cblx0XHRpZiAoXCIkS2V5XCIgaW4gZW50aXR5VHlwZSAmJiBlbnRpdHlUeXBlLiRLZXkpIHtcblx0XHRcdHZoS2V5cyA9IFsuLi4oZW50aXR5VHlwZS4kS2V5IGFzIHN0cmluZ1tdKV07XG5cdFx0fVxuXHRcdGNvbnN0IGZpcnN0S2V5ID0gdmhLZXlzWzBdO1xuXG5cdFx0Zm9yIChjb25zdCBwYXJhbWV0ZXIgb2YgYW5ub3RhdGlvblZhbHVlTGlzdFR5cGUuUGFyYW1ldGVycykge1xuXHRcdFx0Ly9BbGwgU3RyaW5nIGZpZWxkcyBhcmUgYWxsb3dlZCBmb3IgZmlsdGVyXG5cdFx0XHRjb25zdCBwcm9wZXJ0eVBhdGggPSBgLyR7YW5ub3RhdGlvblZhbHVlTGlzdFR5cGUuQ29sbGVjdGlvblBhdGh9LyR7cGFyYW1ldGVyLlZhbHVlTGlzdFByb3BlcnR5fWAsXG5cdFx0XHRcdHByb3BlcnR5ID0gbWV0YU1vZGVsVkguZ2V0T2JqZWN0KHByb3BlcnR5UGF0aCksXG5cdFx0XHRcdHByb3BlcnR5QW5ub3RhdGlvbnMgPSBwYXlsb2FkPy5leHRlcm5hbElkUGF0aFxuXHRcdFx0XHRcdD8gKChtZXRhTW9kZWxWSC5nZXRPYmplY3QoYC8ke3BheWxvYWQ/LmV4dGVybmFsSWRQYXRofUBgKSB8fCB7fSkgYXMgQW5ub3RhdGlvbnNGb3JQcm9wZXJ0eSlcblx0XHRcdFx0XHQ6ICgobWV0YU1vZGVsVkguZ2V0T2JqZWN0KGAke3Byb3BlcnR5UGF0aH1AYCkgfHwge30pIGFzIEFubm90YXRpb25zRm9yUHJvcGVydHkpLFxuXHRcdFx0XHRsb2NhbERhdGFQcm9wZXJ0eVBhdGggPSBwYXJhbWV0ZXIuTG9jYWxEYXRhUHJvcGVydHk/LiRQcm9wZXJ0eVBhdGggfHwgXCJcIjtcblxuXHRcdFx0aWYgKHBheWxvYWQgJiYgcHJvcGVydHlBbm5vdGF0aW9uc1tBbm5vdGF0aW9uc1BlcnNvbmFsRGF0YVBvdGVudGlhbGx5U2Vuc2l0aXZlXSkge1xuXHRcdFx0XHRwYXlsb2FkLmlzUG90ZW50aWFsbHlTZW5zaXRpdmUgPSB0cnVlO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBJZiBwcm9wZXJ0eSBpcyB1bmRlZmluZWQsIHRoZW4gdGhlIHByb3BlcnR5IGNvbWluZyBmb3IgdGhlIGVudHJ5IGlzbid0IGRlZmluZWQgaW5cblx0XHRcdC8vIHRoZSBtZXRhbW9kZWwsIHRoZXJlZm9yZSB3ZSBkb24ndCBuZWVkIHRvIGFkZCBpdCBpbiB0aGUgaW4vb3V0IHBhcmFtZXRlcnNcblx0XHRcdGlmIChwcm9wZXJ0eSkge1xuXHRcdFx0XHQvLyBTZWFyY2ggZm9yIHRoZSAqb3V0IFBhcmFtZXRlciBtYXBwZWQgdG8gdGhlIGxvY2FsIHByb3BlcnR5XG5cdFx0XHRcdFZhbHVlTGlzdEhlbHBlci5fZW5yaWNoUGF0aChcblx0XHRcdFx0XHRwYXRoLFxuXHRcdFx0XHRcdHByb3BlcnR5UGF0aCxcblx0XHRcdFx0XHRsb2NhbERhdGFQcm9wZXJ0eVBhdGgsXG5cdFx0XHRcdFx0cGFyYW1ldGVyLFxuXHRcdFx0XHRcdHByb3BlcnR5TmFtZSxcblx0XHRcdFx0XHRwcm9wZXJ0eUFubm90YXRpb25zLFxuXHRcdFx0XHRcdHBheWxvYWQ/LmV4dGVybmFsSWRQYXRoXG5cdFx0XHRcdCk7XG5cblx0XHRcdFx0Y29uc3QgdmFsdWVMaXN0UHJvcGVydHkgPSBwYXJhbWV0ZXIuVmFsdWVMaXN0UHJvcGVydHk7XG5cdFx0XHRcdFZhbHVlTGlzdEhlbHBlci5fbWVyZ2VDb2x1bW5EZWZpbml0aW9uc0Zyb21Qcm9wZXJ0aWVzKFxuXHRcdFx0XHRcdGNvbHVtbkRlZnMsXG5cdFx0XHRcdFx0YW5ub3RhdGlvblZhbHVlTGlzdFR5cGUsXG5cdFx0XHRcdFx0dmFsdWVMaXN0UHJvcGVydHksXG5cdFx0XHRcdFx0cHJvcGVydHksXG5cdFx0XHRcdFx0cHJvcGVydHlBbm5vdGF0aW9uc1xuXHRcdFx0XHQpO1xuXHRcdFx0fVxuXG5cdFx0XHQvL0luIGFuZCBJbk91dCBhbmQgT3V0XG5cdFx0XHRpZiAoXG5cdFx0XHRcdChWYWx1ZUxpc3RIZWxwZXIuX3BhcmFtZXRlcklzQShwYXJhbWV0ZXIsIFtcblx0XHRcdFx0XHRDb21tb25Bbm5vdGF0aW9uVHlwZXMuVmFsdWVMaXN0UGFyYW1ldGVySW4sXG5cdFx0XHRcdFx0Q29tbW9uQW5ub3RhdGlvblR5cGVzLlZhbHVlTGlzdFBhcmFtZXRlck91dCxcblx0XHRcdFx0XHRDb21tb25Bbm5vdGF0aW9uVHlwZXMuVmFsdWVMaXN0UGFyYW1ldGVySW5PdXRcblx0XHRcdFx0XSkgJiZcblx0XHRcdFx0XHRsb2NhbERhdGFQcm9wZXJ0eVBhdGggIT09IHByb3BlcnR5TmFtZSkgfHxcblx0XHRcdFx0VmFsdWVMaXN0SGVscGVyLl9wYXJhbWV0ZXJJc0EocGFyYW1ldGVyLCBbQ29tbW9uQW5ub3RhdGlvblR5cGVzLlZhbHVlTGlzdFBhcmFtZXRlck91dF0pXG5cdFx0XHQpIHtcblx0XHRcdFx0Y29uc3QgdmhQYXJhbWV0ZXIgPSBWYWx1ZUxpc3RIZWxwZXIuX2dldFZoUGFyYW1ldGVyKFxuXHRcdFx0XHRcdGNvbmRpdGlvbk1vZGVsLFxuXHRcdFx0XHRcdHZhbHVlSGVscCxcblx0XHRcdFx0XHRjb250ZXh0UHJlZml4LFxuXHRcdFx0XHRcdHBhcmFtZXRlcixcblx0XHRcdFx0XHRtZXRhTW9kZWwsXG5cdFx0XHRcdFx0bG9jYWxEYXRhUHJvcGVydHlQYXRoXG5cdFx0XHRcdCk7XG5cdFx0XHRcdC8vIERlcml2ZSBjb25kaXRpb25QYXRoIGZyb20gaGVscFBhdGggZm9yIDE6biBuYXZpZ2F0aW9uIGRldGVjdGlvblxuXHRcdFx0XHR0cnkge1xuXHRcdFx0XHRcdGNvbnN0IGNvbmRpdGlvblBhdGggPSBWYWx1ZUxpc3RIZWxwZXIuX2dldENvbmRpdGlvblBhdGgobWV0YU1vZGVsVkgsIGVudGl0eVNldFBhdGgsIHBhcmFtZXRlci5WYWx1ZUxpc3RQcm9wZXJ0eSk7XG5cdFx0XHRcdFx0aWYgKGNvbmRpdGlvblBhdGggJiYgY29uZGl0aW9uUGF0aCAhPT0gcGFyYW1ldGVyLlZhbHVlTGlzdFByb3BlcnR5KSB7XG5cdFx0XHRcdFx0XHR2aFBhcmFtZXRlci5jb25kaXRpb25QYXRoID0gY29uZGl0aW9uUGF0aDtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0gY2F0Y2ggKGVycm9yKSB7XG5cdFx0XHRcdFx0VmFsdWVMaXN0SGVscGVyLl9sb2dFcnJvcihcIlZhbHVlTGlzdEhlbHBlclwiLCBlcnJvcik7XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKFxuXHRcdFx0XHRcdCFpc0Zvck11bHRpVmFsdWVGaWVsZCB8fFxuXHRcdFx0XHRcdChpc0Zvck11bHRpVmFsdWVGaWVsZCAmJiBWYWx1ZUxpc3RIZWxwZXIuX3BhcmFtZXRlcklzQShwYXJhbWV0ZXIsIFtDb21tb25Bbm5vdGF0aW9uVHlwZXMuVmFsdWVMaXN0UGFyYW1ldGVySW5dKSlcblx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0Ly8gaW4gY2FzZSBvZiBNdWx0aXZhbHVlIEZpZWxkIHdlIGRpc3JlZ2FyZCBWYWx1ZUxpc3RQYXJhbWV0ZXJJbk91dFxuXHRcdFx0XHRcdHZoUGFyYW1ldGVycy5wdXNoKHZoUGFyYW1ldGVyKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHQvL0NvbnN0YW50IGFzIEluUGFyYW10ZXIgZm9yIGZpbHRlcmluZ1xuXHRcdFx0aWYgKHBhcmFtZXRlci4kVHlwZSA9PT0gQW5ub3RhdGlvblZhbHVlTGlzdFBhcmFtZXRlckNvbnN0YW50KSB7XG5cdFx0XHRcdGNvbnN0IGNvbnN0YW50UGFyYW1ldGVyOiBJbk91dFBhcmFtZXRlciA9IHtcblx0XHRcdFx0XHRwYXJtZXRlclR5cGU6IHBhcmFtZXRlci4kVHlwZSxcblx0XHRcdFx0XHRzb3VyY2U6IHBhcmFtZXRlci5WYWx1ZUxpc3RQcm9wZXJ0eSxcblx0XHRcdFx0XHRoZWxwUGF0aDogcGFyYW1ldGVyLlZhbHVlTGlzdFByb3BlcnR5LFxuXHRcdFx0XHRcdGNvbnN0YW50VmFsdWU6IHBhcmFtZXRlci5Db25zdGFudCxcblx0XHRcdFx0XHRpbml0aWFsVmFsdWVJc1NpZ25pZmljYW50OiBCb29sZWFuKHBhcmFtZXRlci5Jbml0aWFsVmFsdWVJc1NpZ25pZmljYW50KVxuXHRcdFx0XHR9O1xuXG5cdFx0XHRcdC8vIERlcml2ZSBjb25kaXRpb25QYXRoIGZvciBjb25zdGFudCBwYXJhbWV0ZXJzIGFzIHdlbGxcblx0XHRcdFx0dHJ5IHtcblx0XHRcdFx0XHRjb25zdCBjb25kaXRpb25QYXRoID0gVmFsdWVMaXN0SGVscGVyLl9nZXRDb25kaXRpb25QYXRoKG1ldGFNb2RlbFZILCBlbnRpdHlTZXRQYXRoLCBwYXJhbWV0ZXIuVmFsdWVMaXN0UHJvcGVydHkpO1xuXHRcdFx0XHRcdGlmIChjb25kaXRpb25QYXRoICYmIGNvbmRpdGlvblBhdGggIT09IHBhcmFtZXRlci5WYWx1ZUxpc3RQcm9wZXJ0eSkge1xuXHRcdFx0XHRcdFx0Y29uc3RhbnRQYXJhbWV0ZXIuY29uZGl0aW9uUGF0aCA9IGNvbmRpdGlvblBhdGg7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9IGNhdGNoIChlcnJvcikge1xuXHRcdFx0XHRcdFZhbHVlTGlzdEhlbHBlci5fbG9nRXJyb3IoXCJWYWx1ZUxpc3RIZWxwZXJcIiwgZXJyb3IpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0dmhQYXJhbWV0ZXJzLnB1c2goY29uc3RhbnRQYXJhbWV0ZXIpO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBFbnJpY2gga2V5cyB3aXRoIG91dC1wYXJhbWV0ZXJzXG5cdFx0XHRWYWx1ZUxpc3RIZWxwZXIuX2VucmljaEtleXModmhLZXlzLCBwYXJhbWV0ZXIpO1xuXHRcdH1cblx0XHRpZiAoIXBhdGgua2V5KSB7XG5cdFx0XHRwYXRoLmtleSA9IGZpcnN0S2V5O1xuXHRcdFx0Y29uc3QgcHJvcGVydHlQYXRoID0gYC8ke2Fubm90YXRpb25WYWx1ZUxpc3RUeXBlLkNvbGxlY3Rpb25QYXRofS8ke2ZpcnN0S2V5fWA7XG5cdFx0XHRjb25zdCBwcm9wZXJ0eUFubm90YXRpb25zID0gKG1ldGFNb2RlbFZILmdldE9iamVjdChgJHtwcm9wZXJ0eVBhdGh9QGApIHx8IHt9KSBhcyBBbm5vdGF0aW9uc0ZvclByb3BlcnR5O1xuXHRcdFx0Ly8gV2UgdXBkYXRlIHBhdGguZGVzY3JpcHRpb25QYXRoIGZvciB0aGUga2V5IHByb3BlcnR5XG5cdFx0XHRwYXRoLmRlc2NyaXB0aW9uUGF0aCA9IHByb3BlcnR5QW5ub3RhdGlvbnNbQW5ub3RhdGlvblRleHRdPy4kUGF0aCB8fCBcIlwiO1xuXHRcdH1cblxuXHRcdC8qIEVuc3VyZSB0aGF0IHZoS2V5cyBhcmUgcGFydCBvZiB0aGUgY29sdW1uRGVmcywgb3RoZXJ3aXNlIGl0IGlzIG5vdCBjb25zaWRlcmVkIGluICRzZWxlY3QgKEJDUCAyMjcwMTQxMTU0KSAqL1xuXHRcdGZvciAoY29uc3QgdmhLZXkgb2YgdmhLZXlzKSB7XG5cdFx0XHRpZiAoY29sdW1uTm90QWxyZWFkeURlZmluZWQoY29sdW1uRGVmcywgdmhLZXkpKSB7XG5cdFx0XHRcdGNvbnN0IGNvbHVtbkRlZjogQ29sdW1uRGVmID0ge1xuXHRcdFx0XHRcdHBhdGg6IHZoS2V5LFxuXHRcdFx0XHRcdCRUeXBlOiBtZXRhTW9kZWxWSC5nZXRPYmplY3QoYC8ke2Fubm90YXRpb25WYWx1ZUxpc3RUeXBlLkNvbGxlY3Rpb25QYXRofS8ke3BhdGgua2V5fWApPy4kVHlwZSxcblx0XHRcdFx0XHRsYWJlbDogXCJcIixcblx0XHRcdFx0XHRzb3J0YWJsZTogZmFsc2UsXG5cdFx0XHRcdFx0ZmlsdGVyYWJsZTogdW5kZWZpbmVkXG5cdFx0XHRcdH07XG5cdFx0XHRcdGNvbHVtbkRlZnMucHVzaChjb2x1bW5EZWYpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGNvbnN0IHZhbHVlbGlzdEluZm86IFZhbHVlTGlzdEluZm8gPSB7XG5cdFx0XHRrZXlQYXRoOiBwYXRoLmtleSxcblx0XHRcdGRlc2NyaXB0aW9uUGF0aDogcGF0aC5kZXNjcmlwdGlvblBhdGgsXG5cdFx0XHRmaWVsZFByb3BlcnR5UGF0aDogcGF0aC5maWVsZFByb3BlcnR5UGF0aCxcblx0XHRcdHZoS2V5czogdmhLZXlzLFxuXHRcdFx0dmhQYXJhbWV0ZXJzOiB2aFBhcmFtZXRlcnMsXG5cdFx0XHR2YWx1ZUxpc3RJbmZvOiBhbm5vdGF0aW9uVmFsdWVMaXN0VHlwZSxcblx0XHRcdGNvbHVtbkRlZnM6IGNvbHVtbkRlZnMsXG5cdFx0XHR2YWx1ZUhlbHBRdWFsaWZpZXJcblx0XHR9O1xuXHRcdHJldHVybiB2YWx1ZWxpc3RJbmZvO1xuXHR9LFxuXG5cdF9sb2dFcnJvcjogZnVuY3Rpb24gKHByb3BlcnR5UGF0aDogc3RyaW5nLCBlcnJvcj86IHVua25vd24pOiB2b2lkIHtcblx0XHRjb25zdCBzdGF0dXMgPSBlcnJvciA/IChlcnJvciBhcyBYTUxIdHRwUmVxdWVzdCkuc3RhdHVzIDogdW5kZWZpbmVkO1xuXHRcdGNvbnN0IG1lc3NhZ2UgPSBlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6IFN0cmluZyhlcnJvcik7XG5cdFx0Y29uc3QgbXNnID0gc3RhdHVzID09PSA0MDQgPyBgTWV0YWRhdGEgbm90IGZvdW5kICgke3N0YXR1c30pIGZvciB2YWx1ZSBoZWxwIG9mIHByb3BlcnR5ICR7cHJvcGVydHlQYXRofWAgOiBtZXNzYWdlO1xuXG5cdFx0TG9nLmVycm9yKG1zZyk7XG5cdH0sXG5cdC8qKlxuXHQgKiBNZXRob2QgdG8gY29tcHV0ZSB0aGUgdmFsdWUgbGlzdCBpbmZvcyBiYXNlZCBvbiB0aGUgdmFsdWUgbGlzdCBhbm5vdGF0aW9ucyBiZWZvcmUgdXNpbmcgdGhlbSBhdCB0ZW1wbGF0aW5nLlxuXHQgKiBAcGFyYW0gdmFsdWVIZWxwXG5cdCAqIEBwYXJhbSBwcm9wZXJ0eVBhdGhcblx0ICogQHBhcmFtIHBheWxvYWRcblx0ICogQHBhcmFtIG1ldGFNb2RlbFxuXHQgKiBAcmV0dXJucyBUaGUgdmFsdWUgbGlzdCBpbmZvc1xuXHQgKi9cblx0Z2V0VmFsdWVMaXN0SW5mbzogYXN5bmMgZnVuY3Rpb24gKFxuXHRcdHZhbHVlSGVscDogVmFsdWVIZWxwIHwgdW5kZWZpbmVkLFxuXHRcdHByb3BlcnR5UGF0aDogc3RyaW5nLFxuXHRcdHBheWxvYWQ6IFZhbHVlSGVscFBheWxvYWQgfCB1bmRlZmluZWQsXG5cdFx0bWV0YU1vZGVsOiBPRGF0YU1ldGFNb2RlbFxuXHQpOiBQcm9taXNlPFZhbHVlTGlzdEluZm9bXT4ge1xuXHRcdGNvbnN0IGJpbmRpbmdDb250ZXh0ID0gdmFsdWVIZWxwPy5nZXRCaW5kaW5nQ29udGV4dCgpIGFzIENvbnRleHQgfCB1bmRlZmluZWQsXG5cdFx0XHRjb25kaXRpb25Nb2RlbCA9IHBheWxvYWQ/LmNvbmRpdGlvbk1vZGVsLFxuXHRcdFx0dmFsdWVMaXN0SW5mb3M6IFZhbHVlTGlzdEluZm9bXSA9IFtdLFxuXHRcdFx0cHJvcGVydHlQYXRoUGFydHMgPSBwcm9wZXJ0eVBhdGguc3BsaXQoXCIvXCIpO1xuXHRcdHRyeSB7XG5cdFx0XHRjb25zdCB2YWx1ZUxpc3RCeVF1YWxpZmllciA9IGF3YWl0IG1ldGFNb2RlbC5yZXF1ZXN0VmFsdWVMaXN0SW5mbyhwcm9wZXJ0eVBhdGgsIHRydWUsIGJpbmRpbmdDb250ZXh0KTtcblx0XHRcdGNvbnN0IHZhbHVlSGVscFF1YWxpZmllcnMgPSBWYWx1ZUxpc3RIZWxwZXIucHV0RGVmYXVsdFF1YWxpZmllckZpcnN0KE9iamVjdC5rZXlzKHZhbHVlTGlzdEJ5UXVhbGlmaWVyKSksXG5cdFx0XHRcdHByb3BlcnR5TmFtZSA9IHByb3BlcnR5UGF0aFBhcnRzLnBvcCgpO1xuXG5cdFx0XHRjb25zdCBjb250ZXh0UHJlZml4ID1cblx0XHRcdFx0cGF5bG9hZD8udXNlTXVsdGlWYWx1ZUZpZWxkID09PSB0cnVlID8gVmFsdWVMaXN0SGVscGVyLl9nZXRDb250ZXh0UHJlZml4KGJpbmRpbmdDb250ZXh0LCBwcm9wZXJ0eVBhdGhQYXJ0cykgOiBcIlwiO1xuXG5cdFx0XHRmb3IgKGNvbnN0IHZhbHVlSGVscFF1YWxpZmllciBvZiB2YWx1ZUhlbHBRdWFsaWZpZXJzKSB7XG5cdFx0XHRcdC8vIEFkZCBjb2x1bW4gZGVmaW5pdGlvbnMgZm9yIHByb3BlcnRpZXMgZGVmaW5lZCBhcyBTZWxlY3Rpb24gZmllbGRzIG9uIHRoZSBDb2xsZWN0aW9uUGF0aCBlbnRpdHkgc2V0LlxuXHRcdFx0XHRjb25zdCBhbm5vdGF0aW9uVmFsdWVMaXN0VHlwZSA9IHZhbHVlTGlzdEJ5UXVhbGlmaWVyW3ZhbHVlSGVscFF1YWxpZmllcl07XG5cdFx0XHRcdGNvbnN0IG1ldGFNb2RlbFZIID0gYW5ub3RhdGlvblZhbHVlTGlzdFR5cGUuJG1vZGVsLmdldE1ldGFNb2RlbCgpLFxuXHRcdFx0XHRcdGVudGl0eVNldFBhdGggPSBgLyR7YW5ub3RhdGlvblZhbHVlTGlzdFR5cGUuQ29sbGVjdGlvblBhdGh9YDtcblx0XHRcdFx0Y29uc3QgZW50aXR5VHlwZSA9IGF3YWl0IFZhbHVlTGlzdEhlbHBlci5fZ2V0RW50aXR5VHlwZShtZXRhTW9kZWxWSCwgZW50aXR5U2V0UGF0aCk7XG5cdFx0XHRcdGNvbnN0IHZhbHVlTGlzdEluZm8gPSBWYWx1ZUxpc3RIZWxwZXIuX3Byb2Nlc3NQYXJhbWV0ZXJzKFxuXHRcdFx0XHRcdGFubm90YXRpb25WYWx1ZUxpc3RUeXBlLFxuXHRcdFx0XHRcdHByb3BlcnR5TmFtZSxcblx0XHRcdFx0XHRjb25kaXRpb25Nb2RlbCxcblx0XHRcdFx0XHR2YWx1ZUhlbHAsXG5cdFx0XHRcdFx0Y29udGV4dFByZWZpeCxcblx0XHRcdFx0XHRtZXRhTW9kZWwsXG5cdFx0XHRcdFx0YW5ub3RhdGlvblZhbHVlTGlzdFR5cGUuJHF1YWxpZmllciA/PyB2YWx1ZUhlbHBRdWFsaWZpZXIsIC8vIGZvciBWYWx1ZUxpc3RXaXRoRml4ZWRWYWx1ZXMsIGdldCB0aGUgcXVhbGlmaWVyIGZyb20gJHF1YWxpZmllclxuXHRcdFx0XHRcdHBheWxvYWQsXG5cdFx0XHRcdFx0ZW50aXR5VHlwZVxuXHRcdFx0XHQpO1xuXHRcdFx0XHQvKiBPbmx5IGNvbnNpc3RlbnQgdmFsdWUgaGVscCBkZWZpbml0aW9ucyBzaGFsbCBiZSBwYXJ0IG9mIHRoZSB2YWx1ZSBoZWxwICovXG5cdFx0XHRcdGlmICh2YWx1ZUxpc3RJbmZvKSB7XG5cdFx0XHRcdFx0dmFsdWVMaXN0SW5mb3MucHVzaCh2YWx1ZUxpc3RJbmZvKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0gY2F0Y2ggKGVycikge1xuXHRcdFx0dGhpcy5fbG9nRXJyb3IocHJvcGVydHlQYXRoLCBlcnIpO1xuXG5cdFx0XHRWYWx1ZUxpc3RIZWxwZXIuZGVzdHJveVZIQ29udGVudCh2YWx1ZUhlbHApO1xuXHRcdH1cblx0XHRyZXR1cm4gdmFsdWVMaXN0SW5mb3M7XG5cdH0sXG5cblx0QUxMRlJBR01FTlRTOiBbXSBhcyB7XG5cdFx0cGF0aDogc3RyaW5nO1xuXHRcdGZyYWdtZW50TmFtZTogc3RyaW5nO1xuXHRcdGZyYWdtZW50OiB1bmtub3duO1xuXHR9W10sXG5cdGxvZ0ZyYWdtZW50OiB1bmRlZmluZWQgYXMgTG9nRnJhZ21lbnRNZXRob2QgfCB1bmRlZmluZWQsXG5cblx0X2xvZ1RlbXBsYXRlZEZyYWdtZW50czogZnVuY3Rpb24gKHByb3BlcnR5UGF0aDogc3RyaW5nLCBmcmFnbWVudE5hbWU6IHN0cmluZywgZnJhZ21lbnREZWZpbml0aW9uOiB1bmtub3duKTogdm9pZCB7XG5cdFx0Y29uc3QgbG9nSW5mbyA9IHtcblx0XHRcdHBhdGg6IHByb3BlcnR5UGF0aCxcblx0XHRcdGZyYWdtZW50TmFtZTogZnJhZ21lbnROYW1lLFxuXHRcdFx0ZnJhZ21lbnQ6IGZyYWdtZW50RGVmaW5pdGlvblxuXHRcdH07XG5cdFx0aWYgKExvZy5nZXRMZXZlbCgpID09PSBMb2cuTGV2ZWwuREVCVUcpIHtcblx0XHRcdC8vSW4gZGVidWcgbW9kZSB3ZSBsb2cgYWxsIGdlbmVyYXRlZCBmcmFnbWVudHNcblx0XHRcdFZhbHVlTGlzdEhlbHBlci5BTExGUkFHTUVOVFMgPSBWYWx1ZUxpc3RIZWxwZXIuQUxMRlJBR01FTlRTIHx8IFtdO1xuXHRcdFx0VmFsdWVMaXN0SGVscGVyLkFMTEZSQUdNRU5UUy5wdXNoKGxvZ0luZm8pO1xuXHRcdH1cblx0XHRpZiAoVmFsdWVMaXN0SGVscGVyLmxvZ0ZyYWdtZW50KSB7XG5cdFx0XHQvL09uZSBUb29sIFN1YnNjcmliZXIgYWxsb3dlZFxuXHRcdFx0c2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdFZhbHVlTGlzdEhlbHBlci5sb2dGcmFnbWVudD8uKGxvZ0luZm8pO1xuXHRcdFx0fSwgMCk7XG5cdFx0fVxuXHR9LFxuXG5cdF90ZW1wbGF0ZUZyYWdtZW50OiBhc3luYyBmdW5jdGlvbiA8VCBleHRlbmRzIFRhYmxlIHwgTWRjSW5uZXJUYWJsZSB8IE1kY0ZpbHRlckJhciB8IFZhbHVlSGVscD4oXG5cdFx0ZnJhZ21lbnROYW1lOiBzdHJpbmcsXG5cdFx0dmFsdWVMaXN0SW5mbzogVmFsdWVMaXN0SW5mbyxcblx0XHRzb3VyY2VNb2RlbDogSlNPTk1vZGVsLFxuXHRcdHByb3BlcnR5UGF0aDogc3RyaW5nLFxuXHRcdHZhbHVlSGVscDogVmFsdWVIZWxwXG5cdCk6IFByb21pc2U8VD4ge1xuXHRcdGNvbnN0IGNvbnRhaW5pbmdWaWV3ID0gQ29tbW9uVXRpbHMuZ2V0VGFyZ2V0Vmlldyh2YWx1ZUhlbHApO1xuXHRcdGNvbnN0IGFwcENvbXBvbmVudCA9IENvbW1vblV0aWxzLmdldEFwcENvbXBvbmVudChDb21tb25VdGlscy5nZXRUYXJnZXRWaWV3KHZhbHVlSGVscCkpO1xuXG5cdFx0Y29uc3QgbG9jYWxWYWx1ZUxpc3RJbmZvID0gdmFsdWVMaXN0SW5mby52YWx1ZUxpc3RJbmZvLFxuXHRcdFx0dmFsdWVMaXN0TW9kZWwgPSBuZXcgSlNPTk1vZGVsKGxvY2FsVmFsdWVMaXN0SW5mbyksXG5cdFx0XHR2YWx1ZUxpc3RTZXJ2aWNlTWV0YU1vZGVsID0gbG9jYWxWYWx1ZUxpc3RJbmZvLiRtb2RlbC5nZXRNZXRhTW9kZWwoKSxcblx0XHRcdHZpZXdEYXRhID0gbmV3IEpTT05Nb2RlbCh7XG5cdFx0XHRcdGNvbnZlcnRlclR5cGU6IFwiTGlzdFJlcG9ydFwiLFxuXHRcdFx0XHRjb2x1bW5zOiB2YWx1ZUxpc3RJbmZvLmNvbHVtbkRlZnMgfHwgbnVsbFxuXHRcdFx0fSk7XG5cblx0XHRjb25zdCBmcmFnbWVudERlZmluaXRpb24gPSBhd2FpdCBYTUxQcmVwcm9jZXNzb3IucHJvY2Vzcyhcblx0XHRcdFhNTFRlbXBsYXRlUHJvY2Vzc29yLmxvYWRUZW1wbGF0ZShmcmFnbWVudE5hbWUsIFwiZnJhZ21lbnRcIiksXG5cdFx0XHR7IG5hbWU6IGZyYWdtZW50TmFtZSB9LFxuXHRcdFx0e1xuXHRcdFx0XHRiaW5kaW5nQ29udGV4dHM6IHtcblx0XHRcdFx0XHR2YWx1ZUxpc3Q6IHZhbHVlTGlzdE1vZGVsLmNyZWF0ZUJpbmRpbmdDb250ZXh0KFwiL1wiKSxcblx0XHRcdFx0XHRjb250ZXh0UGF0aDogdmFsdWVMaXN0U2VydmljZU1ldGFNb2RlbC5jcmVhdGVCaW5kaW5nQ29udGV4dChgLyR7bG9jYWxWYWx1ZUxpc3RJbmZvLkNvbGxlY3Rpb25QYXRofS9gKSxcblx0XHRcdFx0XHRzb3VyY2U6IHNvdXJjZU1vZGVsLmNyZWF0ZUJpbmRpbmdDb250ZXh0KFwiL1wiKVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRtb2RlbHM6IHtcblx0XHRcdFx0XHR2YWx1ZUxpc3Q6IHZhbHVlTGlzdE1vZGVsLFxuXHRcdFx0XHRcdGNvbnRleHRQYXRoOiB2YWx1ZUxpc3RTZXJ2aWNlTWV0YU1vZGVsLFxuXHRcdFx0XHRcdHNvdXJjZTogc291cmNlTW9kZWwsXG5cdFx0XHRcdFx0bWV0YU1vZGVsOiB2YWx1ZUxpc3RTZXJ2aWNlTWV0YU1vZGVsLFxuXHRcdFx0XHRcdHZpZXdEYXRhOiB2aWV3RGF0YVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRhcHBDb21wb25lbnRcblx0XHRcdH1cblx0XHQpO1xuXHRcdFZhbHVlTGlzdEhlbHBlci5fbG9nVGVtcGxhdGVkRnJhZ21lbnRzKHByb3BlcnR5UGF0aCwgZnJhZ21lbnROYW1lLCBmcmFnbWVudERlZmluaXRpb24pO1xuXHRcdGNvbnN0IHRlbXBsYXRlQ29tcG9uZW50ID0gY29udGFpbmluZ1ZpZXcuZ2V0Q29udHJvbGxlcigpPy5nZXRPd25lckNvbXBvbmVudCgpO1xuXHRcdGlmICh0ZW1wbGF0ZUNvbXBvbmVudCkge1xuXHRcdFx0cmV0dXJuIHRlbXBsYXRlQ29tcG9uZW50LnJ1bkFzT3duZXIoYXN5bmMgKCkgPT4ge1xuXHRcdFx0XHRyZXR1cm4gKGF3YWl0IEZyYWdtZW50LmxvYWQoe1xuXHRcdFx0XHRcdGRlZmluaXRpb246IGZyYWdtZW50RGVmaW5pdGlvbixcblx0XHRcdFx0XHRjb250cm9sbGVyOiBjb250YWluaW5nVmlldy5nZXRDb250cm9sbGVyKClcblx0XHRcdFx0fSkpIGFzIFQ7XG5cdFx0XHR9KTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cmV0dXJuIChhd2FpdCBGcmFnbWVudC5sb2FkKHtcblx0XHRcdFx0ZGVmaW5pdGlvbjogZnJhZ21lbnREZWZpbml0aW9uLFxuXHRcdFx0XHRjb250cm9sbGVyOiBjb250YWluaW5nVmlldy5nZXRDb250cm9sbGVyKClcblx0XHRcdH0pKSBhcyBUO1xuXHRcdH1cblx0fSxcblxuXHRfZ2V0Q29udGVudElkOiBmdW5jdGlvbiAodmFsdWVIZWxwSWQ6IHN0cmluZywgdmFsdWVIZWxwUXVhbGlmaWVyOiBzdHJpbmcsIGlzVHlwZWFoZWFkOiBib29sZWFuKTogc3RyaW5nIHtcblx0XHRjb25zdCBjb250ZW50VHlwZSA9IGlzVHlwZWFoZWFkID8gXCJQb3BvdmVyXCIgOiBcIkRpYWxvZ1wiO1xuXG5cdFx0cmV0dXJuIGAke3ZhbHVlSGVscElkfTo6JHtjb250ZW50VHlwZX06OnF1YWxpZmllcjo6JHt2YWx1ZUhlbHBRdWFsaWZpZXJ9YDtcblx0fSxcblxuXHRfYWRkSW5PdXRQYXJhbWV0ZXJzVG9QYXlsb2FkOiBmdW5jdGlvbiAocGF5bG9hZDogVmFsdWVIZWxwUGF5bG9hZCwgdmFsdWVMaXN0SW5mbzogVmFsdWVMaXN0SW5mbyk6IHZvaWQge1xuXHRcdGNvbnN0IHZhbHVlSGVscFF1YWxpZmllciA9IHZhbHVlTGlzdEluZm8udmFsdWVIZWxwUXVhbGlmaWVyO1xuXG5cdFx0aWYgKCFwYXlsb2FkLnF1YWxpZmllcnMpIHtcblx0XHRcdHBheWxvYWQucXVhbGlmaWVycyA9IHt9O1xuXHRcdH1cblxuXHRcdGlmICghcGF5bG9hZC5xdWFsaWZpZXJzW3ZhbHVlSGVscFF1YWxpZmllcl0pIHtcblx0XHRcdGNvbnN0IHZoUHJvcGVydGllcyA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuXHRcdFx0dmFsdWVMaXN0SW5mby5jb2x1bW5EZWZzLmZvckVhY2goKGNvbHVtbikgPT4ge1xuXHRcdFx0XHRpZiAoIWNvbHVtbi5wYXRoLmluY2x1ZGVzKFwiKlwiKSkge1xuXHRcdFx0XHRcdC8vIEluIGNhc2Ugb2YgMS4ubiB0aGUgY29uZGl0aW9uIHBhdGggaW5jbHVkZXMgYSAqIHNvIHdlIGhhdmUgdG8gcmVtb3ZlIHRoaXNcblx0XHRcdFx0XHR2aFByb3BlcnRpZXMuYWRkKGNvbHVtbi5wYXRoKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAoY29sdW1uLnRleHRQYXRoKSB7XG5cdFx0XHRcdFx0dmhQcm9wZXJ0aWVzLmFkZChjb2x1bW4udGV4dFBhdGgpO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHRcdHBheWxvYWQucXVhbGlmaWVyc1t2YWx1ZUhlbHBRdWFsaWZpZXJdID0ge1xuXHRcdFx0XHR2aEtleXM6IHZhbHVlTGlzdEluZm8udmhLZXlzLFxuXHRcdFx0XHR2aFBhcmFtZXRlcnM6IHZhbHVlTGlzdEluZm8udmhQYXJhbWV0ZXJzLFxuXHRcdFx0XHR2aFByb3BlcnRpZXM6IEFycmF5LmZyb20odmhQcm9wZXJ0aWVzKVxuXHRcdFx0fTtcblx0XHR9XG5cdH0sXG5cblx0X2dldFZhbHVlSGVscENvbHVtbkRpc3BsYXlGb3JtYXQ6IGZ1bmN0aW9uIChcblx0XHRwcm9wZXJ0eUFubm90YXRpb25zOiBBbm5vdGF0aW9uc0ZvclByb3BlcnR5LFxuXHRcdGlzVmFsdWVIZWxwV2l0aEZpeGVkVmFsdWVzOiBib29sZWFuXG5cdCk6IERpc3BsYXlGb3JtYXQge1xuXHRcdGNvbnN0IGRpc3BsYXlNb2RlID0gQ29tbW9uVXRpbHMuY29tcHV0ZURpc3BsYXlNb2RlKHByb3BlcnR5QW5ub3RhdGlvbnMsIHVuZGVmaW5lZCksXG5cdFx0XHR0ZXh0QW5ub3RhdGlvbiA9IHByb3BlcnR5QW5ub3RhdGlvbnMgJiYgcHJvcGVydHlBbm5vdGF0aW9uc1tBbm5vdGF0aW9uVGV4dF0sXG5cdFx0XHR0ZXh0QXJyYW5nZW1lbnRBbm5vdGF0aW9uID0gdGV4dEFubm90YXRpb24gJiYgcHJvcGVydHlBbm5vdGF0aW9uc1tBbm5vdGF0aW9uVGV4dFVJVGV4dEFycmFuZ2VtZW50XTtcblxuXHRcdGlmIChpc1ZhbHVlSGVscFdpdGhGaXhlZFZhbHVlcykge1xuXHRcdFx0cmV0dXJuIHRleHRBbm5vdGF0aW9uICYmIHR5cGVvZiB0ZXh0QW5ub3RhdGlvbiAhPT0gXCJzdHJpbmdcIiAmJiB0ZXh0QW5ub3RhdGlvbi4kUGF0aCA/IGRpc3BsYXlNb2RlIDogXCJWYWx1ZVwiO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHQvLyBPbmx5IGV4cGxpY2l0IGRlZmluZWQgVGV4dEFycmFuZ2VtZW50cyBpbiBhIFZhbHVlIEhlbHAgd2l0aCBEaWFsb2cgYXJlIGNvbnNpZGVyZWRcblx0XHRcdHJldHVybiB0ZXh0QXJyYW5nZW1lbnRBbm5vdGF0aW9uID8gZGlzcGxheU1vZGUgOiBcIlZhbHVlXCI7XG5cdFx0fVxuXHR9LFxuXG5cdF9nZXRXaWR0aEluUmVtOiBmdW5jdGlvbiAoY29udHJvbDogQ29udHJvbCwgaXNVbml0VmFsdWVIZWxwOiBib29sZWFuKTogbnVtYmVyIHtcblx0XHRsZXQgd2lkdGggPSBjb250cm9sLiQoKS53aWR0aCgpOyAvLyBKUXVlcnlcblx0XHRpZiAoaXNVbml0VmFsdWVIZWxwICYmIHdpZHRoKSB7XG5cdFx0XHR3aWR0aCA9IDAuMyAqIHdpZHRoO1xuXHRcdH1cblx0XHRjb25zdCBmbG9hdFdpZHRoID0gd2lkdGggPyBwYXJzZUZsb2F0KFN0cmluZyhSZW0uZnJvbVB4KHdpZHRoKSkpIDogMDtcblxuXHRcdHJldHVybiBpc05hTihmbG9hdFdpZHRoKSA/IDAgOiBmbG9hdFdpZHRoO1xuXHR9LFxuXG5cdF9nZXRUYWJsZVdpZHRoOiBmdW5jdGlvbiAodGFibGU6IFRhYmxlLCBtaW5XaWR0aDogbnVtYmVyLCBpc011bHRpU2VsZWN0OiBib29sZWFuKTogc3RyaW5nIHtcblx0XHRsZXQgd2lkdGg6IHN0cmluZztcblx0XHRjb25zdCBjb2x1bW5zID0gdGFibGUuZ2V0Q29sdW1ucygpLFxuXHRcdFx0dmlzaWJsZUNvbHVtbnMgPVxuXHRcdFx0XHQoY29sdW1ucyAmJlxuXHRcdFx0XHRcdGNvbHVtbnMuZmlsdGVyKGZ1bmN0aW9uIChjb2x1bW4pIHtcblx0XHRcdFx0XHRcdHJldHVybiBjb2x1bW4gJiYgY29sdW1uLmdldFZpc2libGUgJiYgY29sdW1uLmdldFZpc2libGUoKTtcblx0XHRcdFx0XHR9KSkgfHxcblx0XHRcdFx0W10sXG5cdFx0XHQvLyB3ZSBhZGQgMWVtIGZvciBldmVyeSBjb2x1bW4gYW5kIDIuNWVtIGZvciBhIG11bHRpc2VsZWN0IGNoZWNrYm94XG5cdFx0XHRpbml0aWFsU3VtID0gdmlzaWJsZUNvbHVtbnMubGVuZ3RoICsgKGlzTXVsdGlTZWxlY3QgPyAyLjUgOiAwKSxcblx0XHRcdHN1bVdpZHRoID0gdmlzaWJsZUNvbHVtbnMucmVkdWNlKGZ1bmN0aW9uIChzdW0sIGNvbHVtbikge1xuXHRcdFx0XHR3aWR0aCA9IGNvbHVtbi5nZXRXaWR0aCgpO1xuXHRcdFx0XHRpZiAod2lkdGggJiYgd2lkdGguZW5kc1dpdGgoXCJweFwiKSkge1xuXHRcdFx0XHRcdHdpZHRoID0gU3RyaW5nKFJlbS5mcm9tUHgod2lkdGgpKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRjb25zdCBmbG9hdFdpZHRoID0gcGFyc2VGbG9hdCh3aWR0aCk7XG5cblx0XHRcdFx0cmV0dXJuIHN1bSArIChpc05hTihmbG9hdFdpZHRoKSA/IDkgOiBmbG9hdFdpZHRoKTtcblx0XHRcdH0sIGluaXRpYWxTdW0pO1xuXHRcdHJldHVybiBgJHtNYXRoLm1heChzdW1XaWR0aCwgbWluV2lkdGgpfWVtYDtcblx0fSxcblxuXHQvKipcblx0ICogQ29uc3RydWN0cyBKU09OIE1vZGVsIHdpdGggdGhlIHByb3BlcnRpZXMgZm9yIHRoZSB2YWx1ZSBoZWxwIGRpYWxvZyBmcmFnbWVudCB3aGVyZSBpdCBpcyB1c2VkIGFzIGEgc291cmNlIG9iamVjdC5cblx0ICogQHBhcmFtIHZhbHVlTGlzdEluZm8gVmFsdWUgbGlzdCBpbmZvXG5cdCAqIEBwYXJhbSBwcm9wZXJ0eVBhdGggVGhlIHByb3BlcnR5IHBhdGhcblx0ICogQHBhcmFtIGNvbnRlbnQgQ29udGVudCBmb3Igd2hpY2ggdGhpcyBmcmFnbWVudCB3aWxsIGJlIHNldFxuXHQgKiBAcGFyYW0gcGF5bG9hZCBWYWx1ZSBoZWxwIHBheWxvYWRcblx0ICogQHJldHVybnMgSlNPTk1vZGVsXG5cdCAqIEBwcml2YXRlXG5cdCAqL1xuXHRfZ2V0SlNPTk1vZGVsRm9yRGlhbG9nOiBmdW5jdGlvbiAoXG5cdFx0dmFsdWVMaXN0SW5mbzogVmFsdWVMaXN0SW5mbyxcblx0XHRwcm9wZXJ0eVBhdGg6IHN0cmluZyxcblx0XHRjb250ZW50OiBNRENUYWJsZSxcblx0XHRwYXlsb2FkOiBWYWx1ZUhlbHBQYXlsb2FkXG5cdCk6IEpTT05Nb2RlbCB7XG5cdFx0Y29uc3QgaXNEcm9wRG93bkxpc3RlID0gZmFsc2UsXG5cdFx0XHRpc0RpYWxvZ1RhYmxlID0gdHJ1ZSxcblx0XHRcdGNvbHVtbkluZm8gPSBWYWx1ZUxpc3RIZWxwZXIuZ2V0Q29sdW1uVmlzaWJpbGl0eUluZm8odmFsdWVMaXN0SW5mby52YWx1ZUxpc3RJbmZvLCBwcm9wZXJ0eVBhdGgsIGlzRHJvcERvd25MaXN0ZSwgaXNEaWFsb2dUYWJsZSk7XG5cblx0XHRyZXR1cm4gbmV3IEpTT05Nb2RlbCh7XG5cdFx0XHRpZDogY29udGVudC5nZXRJZCgpLFxuXHRcdFx0Z3JvdXBJZDogcGF5bG9hZC5yZXF1ZXN0R3JvdXBJZCxcblx0XHRcdGJTdWdnZXN0aW9uOiBmYWxzZSxcblx0XHRcdGNvbHVtbkluZm86IGNvbHVtbkluZm8sXG5cdFx0XHR2YWx1ZUhlbHBXaXRoRml4ZWRWYWx1ZXM6IGlzRHJvcERvd25MaXN0ZVxuXHRcdH0pO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBDb25zdHJ1Y3RzIEpTT04gTW9kZWwgd2l0aCB0aGUgcHJvcGVydGllcyBmb3IgdGhlIGRlZmluZSBjb25kaXRpb24gdmFsdWUgaGVscCBmcmFnbWVudCBpbiB0aGUgdmFsdWUgaGVscCBkaWFsb2cgd2hlcmUgaXQgaXMgdXNlZCBhcyBhIHNvdXJjZSBvYmplY3QuXG5cdCAqIEBwYXJhbSB2YWx1ZUxpc3RJbmZvIFZhbHVlIGxpc3QgaW5mb1xuXHQgKiBAcGFyYW0gcHJvcGVydHlQYXRoIFRoZSBwcm9wZXJ0eSBwYXRoXG5cdCAqIEBwYXJhbSBjb250ZW50IENvbnRlbnQgZm9yIHdoaWNoIHRoaXMgZnJhZ21lbnQgd2lsbCBiZSBzZXRcblx0ICogQHBhcmFtIHBheWxvYWQgVmFsdWUgaGVscCBwYXlsb2FkXG5cdCAqIEBwYXJhbSBjYXNlU2Vuc2l0aXZlXG5cdCAqIEByZXR1cm5zIEpTT05Nb2RlbFxuXHQgKiBAcHJpdmF0ZVxuXHQgKi9cblx0X2dldEpTT05Nb2RlbEZvckNvbmRpdGlvbjogZnVuY3Rpb24gKFxuXHRcdHZhbHVlTGlzdEluZm86IFZhbHVlTGlzdEluZm8sXG5cdFx0cHJvcGVydHlQYXRoOiBzdHJpbmcsXG5cdFx0Y29udGVudDogTURDVGFibGUsXG5cdFx0cGF5bG9hZDogVmFsdWVIZWxwUGF5bG9hZCxcblx0XHRjYXNlU2Vuc2l0aXZlOiBib29sZWFuXG5cdCk6IEpTT05Nb2RlbCB7XG5cdFx0Y29uc3QgaXNEcm9wRG93bkxpc3RlID0gZmFsc2UsXG5cdFx0XHRpc0RpYWxvZ1RhYmxlID0gZmFsc2UsXG5cdFx0XHRjb2x1bW5JbmZvID0gVmFsdWVMaXN0SGVscGVyLmdldENvbHVtblZpc2liaWxpdHlJbmZvKHZhbHVlTGlzdEluZm8udmFsdWVMaXN0SW5mbywgcHJvcGVydHlQYXRoLCBpc0Ryb3BEb3duTGlzdGUsIGlzRGlhbG9nVGFibGUpO1xuXG5cdFx0cmV0dXJuIG5ldyBKU09OTW9kZWwoe1xuXHRcdFx0aWQ6IGNvbnRlbnQuZ2V0SWQoKSxcblx0XHRcdGdyb3VwSWQ6IHBheWxvYWQucmVxdWVzdEdyb3VwSWQgfHwgdW5kZWZpbmVkLFxuXHRcdFx0YlN1Z2dlc3Rpb246IHRydWUsXG5cdFx0XHRjb2x1bW5JbmZvOiBjb2x1bW5JbmZvLFxuXHRcdFx0dmFsdWVIZWxwV2l0aEZpeGVkVmFsdWVzOiBpc0Ryb3BEb3duTGlzdGUsXG5cdFx0XHRkZXNjcmlwdGlvblBhdGg6IHZhbHVlTGlzdEluZm8uZGVzY3JpcHRpb25QYXRoLFxuXHRcdFx0a2V5UGF0aDogdmFsdWVMaXN0SW5mby5rZXlQYXRoLFxuXHRcdFx0cHJvcGVydHlQYXRoLFxuXHRcdFx0Y2FzZVNlbnNpdGl2ZVxuXHRcdH0pO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBDb25zdHJ1Y3RzIEpTT04gTW9kZWwgd2l0aCB0aGUgcHJvcGVydGllcyBmb3IgdGhlIHZhbHVlIGhlbHAgdHlwZWFoZWFkIGZyYWdtZW50IHdoZXJlIGl0IGlzIHVzZWQgYXMgYSBzb3VyY2Ugb2JqZWN0LlxuXHQgKiBAcGFyYW0gdmFsdWVMaXN0SW5mbyBWYWx1ZSBsaXN0IGluZm9cblx0ICogQHBhcmFtIHByb3BlcnR5UGF0aCBUaGUgcHJvcGVydHkgcGF0aFxuXHQgKiBAcGFyYW0gY29udGVudCBDb250ZW50IGZvciB3aGljaCB0aGlzIGZyYWdtZW50IHdpbGwgYmUgc2V0XG5cdCAqIEBwYXJhbSBwYXlsb2FkIFZhbHVlIGhlbHAgcGF5bG9hZFxuXHQgKiBAcGFyYW0gdmFsdWVIZWxwV2l0aEZpeGVkVmFsdWVzIFNwZWNpZnkgaXMgaXQgZHJvcGRvd25saXN0IG9yIG5vdFxuXHQgKiBAcmV0dXJucyBKU09OTW9kZWxcblx0ICogQHByaXZhdGVcblx0ICovXG5cdF9nZXRKU09OTW9kZWxGb3JUeXBlYWhlYWQ6IGZ1bmN0aW9uIChcblx0XHR2YWx1ZUxpc3RJbmZvOiBWYWx1ZUxpc3RJbmZvLFxuXHRcdHByb3BlcnR5UGF0aDogc3RyaW5nLFxuXHRcdGNvbnRlbnQ6IE1UYWJsZSxcblx0XHRwYXlsb2FkOiBWYWx1ZUhlbHBQYXlsb2FkLFxuXHRcdHZhbHVlSGVscFdpdGhGaXhlZFZhbHVlczogYm9vbGVhblxuXHQpOiBKU09OTW9kZWwge1xuXHRcdGNvbnN0IGlzRGlhbG9nVGFibGUgPSBmYWxzZSxcblx0XHRcdGNvbnRlbnRJZCA9IGNvbnRlbnQuZ2V0SWQoKSxcblx0XHRcdGNvbHVtbkluZm8gPSBWYWx1ZUxpc3RIZWxwZXIuZ2V0Q29sdW1uVmlzaWJpbGl0eUluZm8oXG5cdFx0XHRcdHZhbHVlTGlzdEluZm8udmFsdWVMaXN0SW5mbyxcblx0XHRcdFx0cHJvcGVydHlQYXRoLFxuXHRcdFx0XHR2YWx1ZUhlbHBXaXRoRml4ZWRWYWx1ZXMsXG5cdFx0XHRcdGlzRGlhbG9nVGFibGVcblx0XHRcdCk7XG5cblx0XHRyZXR1cm4gbmV3IEpTT05Nb2RlbCh7XG5cdFx0XHRpZDogY29udGVudElkLFxuXHRcdFx0Z3JvdXBJZDogcGF5bG9hZC5yZXF1ZXN0R3JvdXBJZCB8fCB1bmRlZmluZWQsXG5cdFx0XHRiU3VnZ2VzdGlvbjogdHJ1ZSxcblx0XHRcdHByb3BlcnR5UGF0aDogcHJvcGVydHlQYXRoLFxuXHRcdFx0Y29sdW1uSW5mbzogY29sdW1uSW5mbyxcblx0XHRcdHZhbHVlSGVscFdpdGhGaXhlZFZhbHVlczogdmFsdWVIZWxwV2l0aEZpeGVkVmFsdWVzXG5cdFx0fSk7XG5cdH0sXG5cblx0X2NyZWF0ZVZhbHVlSGVscFR5cGVhaGVhZDogYXN5bmMgZnVuY3Rpb24gKFxuXHRcdHByb3BlcnR5UGF0aDogc3RyaW5nLFxuXHRcdHZhbHVlSGVscDogVmFsdWVIZWxwLFxuXHRcdGNvbnRlbnQ6IE1UYWJsZSxcblx0XHR2YWx1ZUxpc3RJbmZvOiBWYWx1ZUxpc3RJbmZvLFxuXHRcdHBheWxvYWQ6IFZhbHVlSGVscFBheWxvYWQsXG5cdFx0bWV0YU1vZGVsOiBPRGF0YU1ldGFNb2RlbFxuXHQpOiBQcm9taXNlPHZvaWQ+IHtcblx0XHRjb25zdCBwcm9wZXJ0eUFubm90YXRpb25zID0gbWV0YU1vZGVsLmdldE9iamVjdChgJHtwcm9wZXJ0eVBhdGh9QGApIGFzIEFubm90YXRpb25zRm9yUHJvcGVydHksXG5cdFx0XHR2YWx1ZUhlbHBXaXRoRml4ZWRWYWx1ZXMgPSBwcm9wZXJ0eUFubm90YXRpb25zW0Fubm90YXRpb25WYWx1ZUxpc3RXaXRoRml4ZWRWYWx1ZXNdID8/IGZhbHNlLFxuXHRcdFx0c291cmNlTW9kZWwgPSB0aGlzLl9nZXRKU09OTW9kZWxGb3JUeXBlYWhlYWQodmFsdWVMaXN0SW5mbywgcHJvcGVydHlQYXRoLCBjb250ZW50LCBwYXlsb2FkLCB2YWx1ZUhlbHBXaXRoRml4ZWRWYWx1ZXMpO1xuXG5cdFx0Y29udGVudC5zZXRLZXlQYXRoKHZhbHVlTGlzdEluZm8ua2V5UGF0aCk7XG5cdFx0Y29udGVudC5zZXREZXNjcmlwdGlvblBhdGgodmFsdWVMaXN0SW5mby5kZXNjcmlwdGlvblBhdGgpO1xuXHRcdHBheWxvYWQuaXNWYWx1ZUxpc3RXaXRoRml4ZWRWYWx1ZXMgPSB2YWx1ZUhlbHBXaXRoRml4ZWRWYWx1ZXM7XG5cdFx0cGF5bG9hZC5pc1BvdGVudGlhbGx5U2Vuc2l0aXZlID0gcGF5bG9hZC5pc1BvdGVudGlhbGx5U2Vuc2l0aXZlID8/IHByb3BlcnR5QW5ub3RhdGlvbnNbQW5ub3RhdGlvbnNQZXJzb25hbERhdGFQb3RlbnRpYWxseVNlbnNpdGl2ZV07XG5cdFx0cGF5bG9hZC5oaXN0b3J5ID0ge1xuXHRcdFx0ZW5hYmxlZDogdGhpcy5jaGVja0hpc3RvcnlFbmFibGVkKHZhbHVlSGVscCwgcGF5bG9hZClcblx0XHR9O1xuXG5cdFx0Y29uc3QgY29sbGVjdGlvbkFubm90YXRpb25zID1cblx0XHRcdHZhbHVlTGlzdEluZm8udmFsdWVMaXN0SW5mby4kbW9kZWwuZ2V0TWV0YU1vZGVsKCkuZ2V0T2JqZWN0KGAvJHt2YWx1ZUxpc3RJbmZvLnZhbHVlTGlzdEluZm8uQ29sbGVjdGlvblBhdGh9QGApIHx8IHt9O1xuXG5cdFx0Y29udGVudC5kYXRhKFwic2VhcmNoU3VwcG9ydGVkXCIsIFZhbHVlTGlzdEhlbHBlci5lbnRpdHlJc1NlYXJjaGFibGUocHJvcGVydHlBbm5vdGF0aW9ucywgY29sbGVjdGlvbkFubm90YXRpb25zKSA/IHRydWUgOiBmYWxzZSk7XG5cblx0XHRjb25zdCB0YWJsZSA9IGF3YWl0IFZhbHVlTGlzdEhlbHBlci5fdGVtcGxhdGVGcmFnbWVudDxUYWJsZT4oXG5cdFx0XHRcInNhcC5mZS5tYWNyb3MuaW50ZXJuYWwudmFsdWVoZWxwLlZhbHVlTGlzdFRhYmxlXCIsXG5cdFx0XHR2YWx1ZUxpc3RJbmZvLFxuXHRcdFx0c291cmNlTW9kZWwsXG5cdFx0XHRwcm9wZXJ0eVBhdGgsXG5cdFx0XHR2YWx1ZUhlbHBcblx0XHQpO1xuXG5cdFx0dGFibGUuc2V0TW9kZWwodmFsdWVMaXN0SW5mby52YWx1ZUxpc3RJbmZvLiRtb2RlbCk7XG5cblx0XHRMb2cuaW5mbyhgVmFsdWUgTGlzdC0gc3VnZ2VzdCBUYWJsZSBYTUwgY29udGVudCBjcmVhdGVkIFske3Byb3BlcnR5UGF0aH1dYCwgdGFibGUuZ2V0TWV0YWRhdGEoKS5nZXROYW1lKCksIFwiTURDIFRlbXBsYXRpbmdcIik7XG5cblx0XHRjb250ZW50LnNldFRhYmxlKHRhYmxlKTtcblxuXHRcdGNvbnN0IGZpZWxkID0gdmFsdWVIZWxwLmdldENvbnRyb2woKTtcblxuXHRcdGlmIChcblx0XHRcdGZpZWxkICE9PSB1bmRlZmluZWQgJiZcblx0XHRcdChmaWVsZC5pc0E8RmlsdGVyRmllbGQ+KFwic2FwLnVpLm1kYy5GaWx0ZXJGaWVsZFwiKSB8fFxuXHRcdFx0XHRmaWVsZC5pc0E8RmllbGQ+KFwic2FwLnVpLm1kYy5GaWVsZFwiKSB8fFxuXHRcdFx0XHQoZmllbGQuaXNBPEZpZWxkPihcInNhcC51aS5tZGMuRmllbGRcIikgJiYgdmFsdWVIZWxwV2l0aEZpeGVkVmFsdWVzKSB8fFxuXHRcdFx0XHRmaWVsZC5pc0E8TXVsdGlWYWx1ZUZpZWxkPihcInNhcC51aS5tZGMuTXVsdGlWYWx1ZUZpZWxkXCIpKVxuXHRcdCkge1xuXHRcdFx0Ly9DYW4gdGhlIGZpbHRlcmZpZWxkIGJlIHNvbWV0aGluZyBlbHNlIHRoYXQgd2UgbmVlZCB0aGUgLmlzQSgpIGNoZWNrP1xuXHRcdFx0Y29uc3QgdGFibGVNb2RlID1cblx0XHRcdFx0dmFsdWVIZWxwV2l0aEZpeGVkVmFsdWVzICYmIChmaWVsZCBhcyBGaWVsZEJhc2UpLmdldE1heENvbmRpdGlvbnMoKSAhPT0gMSA/IFwiTXVsdGlTZWxlY3RcIiA6IFwiU2luZ2xlU2VsZWN0TWFzdGVyXCI7XG5cdFx0XHR0YWJsZS5zZXRNb2RlKHRhYmxlTW9kZSk7XG5cblx0XHRcdHRhYmxlLmFkZEV2ZW50RGVsZWdhdGUoe1xuXHRcdFx0XHRvbkFmdGVyUmVuZGVyaW5nOiBmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdFx0UmVzaXplSGFuZGxlci5yZWdpc3Rlcih0YWJsZSwgZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRcdFx0VmFsdWVMaXN0SGVscGVyLl9zZXRUYWJsZVdpZHRoKHRhYmxlLCBmaWVsZCwgdGFibGVNb2RlLCBwYXlsb2FkLmlzVW5pdFZhbHVlSGVscCk7XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdFx0dGhpcy5fc2V0VGFibGVXaWR0aCh0YWJsZSwgZmllbGQsIHRhYmxlTW9kZSwgcGF5bG9hZC5pc1VuaXRWYWx1ZUhlbHApO1xuXHRcdH1cblx0fSxcblxuXHRfc2V0VGFibGVXaWR0aCh0YWJsZTogVGFibGUsIGZpZWxkOiBDb250cm9sLCB0YWJsZU1vZGU6IHN0cmluZywgaXNVbml0VmFsdWVIZWxwPzogYm9vbGVhbik6IHZvaWQge1xuXHRcdGNvbnN0IHJlZHVjZVdpZHRoRm9yVW5pdFZhbHVlSGVscCA9IEJvb2xlYW4oaXNVbml0VmFsdWVIZWxwKTtcblx0XHRjb25zdCB0YWJsZVdpZHRoID0gVmFsdWVMaXN0SGVscGVyLl9nZXRUYWJsZVdpZHRoKFxuXHRcdFx0dGFibGUsXG5cdFx0XHRWYWx1ZUxpc3RIZWxwZXIuX2dldFdpZHRoSW5SZW0oZmllbGQsIHJlZHVjZVdpZHRoRm9yVW5pdFZhbHVlSGVscCksXG5cdFx0XHR0YWJsZU1vZGUgPT09IFwiTXVsdGlTZWxlY3RcIlxuXHRcdCk7XG5cblx0XHR0YWJsZS5zZXRXaWR0aCh0YWJsZVdpZHRoKTtcblx0fSxcblxuXHQvKipcblx0ICogQ2hlY2sgaWYgdGhlIGhpc3RvcnkgaXMgZW5hYmxlZCBmb3IgYSBjZXJ0YWluIGZpZWxkLlxuXHQgKiBAcGFyYW0gdmFsdWVIZWxwIFRoZSB2YWx1ZSBoZWxwIGluc3RhbmNlXG5cdCAqIEBwYXJhbSBwYXlsb2FkIFZhbHVlIGhlbHAgcGF5bG9hZFxuXHQgKiBAcmV0dXJucyBUcnVlIGlmIHRoZSBoaXN0b3J5IGlzIGVuYWJsZWQsIGZhbHNlIG90aGVyd2lzZVxuXHQgKi9cblx0Y2hlY2tIaXN0b3J5RW5hYmxlZDogZnVuY3Rpb24gKHZhbHVlSGVscDogVmFsdWVIZWxwLCBwYXlsb2FkOiBWYWx1ZUhlbHBQYXlsb2FkKTogYm9vbGVhbiB7XG5cdFx0Y29uc3QgYXBwQ29tcG9uZW50ID0gQ29tbW9uVXRpbHMuZ2V0QXBwQ29tcG9uZW50KENvbW1vblV0aWxzLmdldFRhcmdldFZpZXcodmFsdWVIZWxwKSk7XG5cdFx0Y29uc3QgaGlzdG9yeVNldHRpbmdzID0gYXBwQ29tcG9uZW50LmdldE1hbmlmZXN0RW50cnkoXCJzYXAuZmVcIik/Lmhpc3RvcnlTZXR0aW5ncztcblx0XHRyZXR1cm4gaGlzdG9yeVNldHRpbmdzPy5maWVsZHM/LltwYXlsb2FkLnByb3BlcnR5UGF0aF0/Lmhpc3RvcnlFbmFibGVkID8/IHRydWU7XG5cdH0sXG5cblx0aXNWYWx1ZUxpc3RTZWFyY2hhYmxlKHByb3BlcnR5UGF0aDogc3RyaW5nLCB2YWx1ZUxpc3Q6IFZhbHVlTGlzdEluZm8pOiBib29sZWFuIHtcblx0XHRjb25zdCB2YWx1ZUxpc3RNZXRhbW9kZWwgPSB2YWx1ZUxpc3QudmFsdWVMaXN0SW5mby4kbW9kZWwuZ2V0TWV0YU1vZGVsKCk7XG5cblx0XHRjb25zdCBwcm9wZXJ0eUFubm90YXRpb25zID0gdmFsdWVMaXN0TWV0YW1vZGVsLmdldE9iamVjdChgJHtwcm9wZXJ0eVBhdGh9QGApID8/IHt9O1xuXHRcdGNvbnN0IGNvbGxlY3Rpb25Bbm5vdGF0aW9ucyA9IHZhbHVlTGlzdE1ldGFtb2RlbC5nZXRPYmplY3QoYC8ke3ZhbHVlTGlzdC52YWx1ZUxpc3RJbmZvLkNvbGxlY3Rpb25QYXRofUBgKSA/PyB7fTtcblx0XHRyZXR1cm4gVmFsdWVMaXN0SGVscGVyLmVudGl0eUlzU2VhcmNoYWJsZShwcm9wZXJ0eUFubm90YXRpb25zLCBjb2xsZWN0aW9uQW5ub3RhdGlvbnMpO1xuXHR9LFxuXG5cdF9jcmVhdGVWYWx1ZUhlbHBEaWFsb2c6IGFzeW5jIGZ1bmN0aW9uIChcblx0XHRtZXRhTW9kZWw6IE9EYXRhTWV0YU1vZGVsLFxuXHRcdHByb3BlcnR5UGF0aDogc3RyaW5nLFxuXHRcdHZhbHVlSGVscDogVmFsdWVIZWxwLFxuXHRcdGNvbnRlbnQ6IE1EQ1RhYmxlLFxuXHRcdHZhbHVlTGlzdEluZm86IFZhbHVlTGlzdEluZm8sXG5cdFx0cGF5bG9hZDogVmFsdWVIZWxwUGF5bG9hZCxcblx0XHRjb25kaXRpb25Db250ZW50PzogQ29uZGl0aW9uc1xuXHQpOiBQcm9taXNlPHZvaWQ+IHtcblx0XHRjb25zdCBwcm9wZXJ0eUFubm90YXRpb25zID0gKHZhbHVlSGVscC5nZXRNb2RlbCgpIGFzIE9EYXRhTW9kZWwpXG5cdFx0XHRcdC5nZXRNZXRhTW9kZWwoKSFcblx0XHRcdFx0LmdldE9iamVjdChgJHtwcm9wZXJ0eVBhdGh9QGApIGFzIEFubm90YXRpb25zRm9yUHJvcGVydHksXG5cdFx0XHRzb3VyY2VNb2RlbERpYWxvZyA9IHRoaXMuX2dldEpTT05Nb2RlbEZvckRpYWxvZyh2YWx1ZUxpc3RJbmZvLCBwcm9wZXJ0eVBhdGgsIGNvbnRlbnQsIHBheWxvYWQpO1xuXG5cdFx0Y29udGVudC5zZXRLZXlQYXRoKHZhbHVlTGlzdEluZm8ua2V5UGF0aCk7XG5cdFx0Y29udGVudC5zZXREZXNjcmlwdGlvblBhdGgodmFsdWVMaXN0SW5mby5kZXNjcmlwdGlvblBhdGgpO1xuXHRcdGNvbnN0IGNvbGxlY3Rpb25Bbm5vdGF0aW9ucyA9XG5cdFx0XHR2YWx1ZUxpc3RJbmZvLnZhbHVlTGlzdEluZm8uJG1vZGVsLmdldE1ldGFNb2RlbCgpLmdldE9iamVjdChgLyR7dmFsdWVMaXN0SW5mby52YWx1ZUxpc3RJbmZvLkNvbGxlY3Rpb25QYXRofUBgKSB8fCB7fTtcblx0XHRjb250ZW50LmRhdGEoXCJzZWFyY2hTdXBwb3J0ZWRcIiwgVmFsdWVMaXN0SGVscGVyLmVudGl0eUlzU2VhcmNoYWJsZShwcm9wZXJ0eUFubm90YXRpb25zLCBjb2xsZWN0aW9uQW5ub3RhdGlvbnMpID8gdHJ1ZSA6IGZhbHNlKTtcblx0XHRwYXlsb2FkLmlzUG90ZW50aWFsbHlTZW5zaXRpdmUgPSBwYXlsb2FkLmlzUG90ZW50aWFsbHlTZW5zaXRpdmUgPz8gcHJvcGVydHlBbm5vdGF0aW9uc1tBbm5vdGF0aW9uc1BlcnNvbmFsRGF0YVBvdGVudGlhbGx5U2Vuc2l0aXZlXTtcblxuXHRcdGlmIChjb25kaXRpb25Db250ZW50KSB7XG5cdFx0XHRjb25zdCBmaXJzdFR5cGVBaGVhZENvbnRlbnQgPSB2YWx1ZUhlbHAuZ2V0VHlwZWFoZWFkKCkuZ2V0Q29udGVudCgpWzBdIGFzIE1UYWJsZSxcblx0XHRcdFx0Y2FzZVNlbnNpdGl2ZSA9IGZpcnN0VHlwZUFoZWFkQ29udGVudC5nZXRDYXNlU2Vuc2l0aXZlKCk7XG5cblx0XHRcdGNvbnN0IHNvdXJjZU1vZGVsQ29uZGl0aW9uID0gdGhpcy5fZ2V0SlNPTk1vZGVsRm9yQ29uZGl0aW9uKHZhbHVlTGlzdEluZm8sIHByb3BlcnR5UGF0aCwgY29udGVudCwgcGF5bG9hZCwgY2FzZVNlbnNpdGl2ZSk7XG5cblx0XHRcdGNvbnN0IGNvbmRpdGlvbiA9IGF3YWl0IFZhbHVlTGlzdEhlbHBlci5fdGVtcGxhdGVGcmFnbWVudDxWYWx1ZUhlbHA+KFxuXHRcdFx0XHRcInNhcC5mZS5tYWNyb3MuaW50ZXJuYWwudmFsdWVoZWxwLlZhbHVlTGlzdEZvckNvbmRpdGlvblwiLFxuXHRcdFx0XHR2YWx1ZUxpc3RJbmZvLFxuXHRcdFx0XHRzb3VyY2VNb2RlbENvbmRpdGlvbixcblx0XHRcdFx0cHJvcGVydHlQYXRoLFxuXHRcdFx0XHR2YWx1ZUhlbHBcblx0XHRcdCk7XG5cdFx0XHQvKiBBcyB0aGUgY29uZGl0aW9uIGlzIG5vdCBhZGRlZCB0byBhbiBhZ2dyZWdhdGlvbiwgYnV0IGp1c3QgYXNzb2NpYXRlZCwgd2UgbmVlZCB0byBleHBsaWNpdGx5IHNldCB0aGUgbW9kZWwgKi9cblx0XHRcdGNvbmRpdGlvbi5zZXRNb2RlbChtZXRhTW9kZWwpO1xuXG5cdFx0XHQvKiBBZGQgYXMgZGVwZW5kZW50LCBvdGhlcndpc2UgaXQgd2lsbCBub3QgYmUgcHJvcGVybHkgZGVzdHJveWVkIGR1cmluZyBsaWZlY3ljbGUgaGFuZGxpbmcgKi9cblx0XHRcdGNvbmRpdGlvbkNvbnRlbnQuYWRkRGVwZW5kZW50KGNvbmRpdGlvbik7XG5cdFx0XHRjb25kaXRpb25Db250ZW50LnNldFZhbHVlSGVscChjb25kaXRpb24uZ2V0SWQoKSk7XG5cblx0XHRcdGNvbnN0IGNvbmRpdGlvblRhYmxlID0gY29uZGl0aW9uXG5cdFx0XHRcdC5nZXRUeXBlYWhlYWQoKVxuXHRcdFx0XHQuZ2V0Q29udGVudCgpWzBdIC8vIHRoZXJlIGlzIG9ubHkgb25lIHRhYmxlXG5cdFx0XHRcdC5nZXRUYWJsZSgpO1xuXG5cdFx0XHRjb25zdCB0YWJsZVdpZHRoID0gVmFsdWVMaXN0SGVscGVyLl9nZXRUYWJsZVdpZHRoKGNvbmRpdGlvblRhYmxlLCAwLCBmYWxzZSk7XG5cdFx0XHRjb25kaXRpb25UYWJsZS5zZXRXaWR0aCh0YWJsZVdpZHRoKTtcblx0XHR9XG5cblx0XHRjb25zdCB0YWJsZVByb21pc2UgPSBWYWx1ZUxpc3RIZWxwZXIuX3RlbXBsYXRlRnJhZ21lbnQ8TWRjSW5uZXJUYWJsZT4oXG5cdFx0XHRcInNhcC5mZS5tYWNyb3MuaW50ZXJuYWwudmFsdWVoZWxwLlZhbHVlTGlzdERpYWxvZ1RhYmxlXCIsXG5cdFx0XHR2YWx1ZUxpc3RJbmZvLFxuXHRcdFx0c291cmNlTW9kZWxEaWFsb2csXG5cdFx0XHRwcm9wZXJ0eVBhdGgsXG5cdFx0XHR2YWx1ZUhlbHBcblx0XHQpO1xuXG5cdFx0Y29uc3QgZmlsdGVyQmFyUHJvbWlzZSA9IFZhbHVlTGlzdEhlbHBlci5fdGVtcGxhdGVGcmFnbWVudDxGaWx0ZXJCYXI+KFxuXHRcdFx0XCJzYXAuZmUubWFjcm9zLmludGVybmFsLnZhbHVlaGVscC5WYWx1ZUxpc3RGaWx0ZXJCYXJcIixcblx0XHRcdHZhbHVlTGlzdEluZm8sXG5cdFx0XHRzb3VyY2VNb2RlbERpYWxvZyxcblx0XHRcdHByb3BlcnR5UGF0aCxcblx0XHRcdHZhbHVlSGVscFxuXHRcdCk7XG5cblx0XHRjb25zdCBbdGFibGUsIGZpbHRlckJhcl0gPSBhd2FpdCBQcm9taXNlLmFsbChbdGFibGVQcm9taXNlLCBmaWx0ZXJCYXJQcm9taXNlXSk7XG5cblx0XHR0YWJsZS5zZXRNb2RlbCh2YWx1ZUxpc3RJbmZvLnZhbHVlTGlzdEluZm8uJG1vZGVsKTtcblx0XHRmaWx0ZXJCYXIuc2V0TW9kZWwodmFsdWVMaXN0SW5mby52YWx1ZUxpc3RJbmZvLiRtb2RlbCk7XG5cblx0XHRjb250ZW50LnNldEZpbHRlckJhcihmaWx0ZXJCYXIpO1xuXHRcdGNvbnRlbnQuc2V0VGFibGUodGFibGUpO1xuXG5cdFx0dGFibGUuc2V0RmlsdGVyKGZpbHRlckJhci5nZXRJZCgpKTtcblx0XHR0YWJsZS5pbml0aWFsaXplZCgpO1xuXG5cdFx0dGFibGUuc2V0V2lkdGgoXCIxMDAlXCIpO1xuXG5cdFx0VmFsdWVMaXN0SGVscGVyLnNldENvcHlQcm92aWRlclZpc2liaWxpdHkodGFibGUsIHZhbHVlSGVscCk7XG5cblx0XHQvL1RoaXMgaXMgYSB0ZW1wb3Jhcnkgd29ya2Fycm91bmQgLSBwcm92aWRlZCBieSBNREMgKHNlZSBGSU9SSVRFQ0hQMS0yNDAwMilcblx0XHRjb25zdCBtZGNUYWJsZSA9IHRhYmxlIGFzIHVua25vd24gYXMgeyBfc2V0U2hvd1AxM25CdXR0b246IEZ1bmN0aW9uIH07XG5cdFx0bWRjVGFibGUuX3NldFNob3dQMTNuQnV0dG9uKGZhbHNlKTtcblx0fSxcblxuXHQvKipcblx0ICogU2V0IHRoZSB2aXNpYmxlIGF0dHJpYnV0ZSBvZiB0aGUgQ29weVByb3ZpZGVyIGJhc2VkIG9uIHRoZSBNYXhDb25kaXRpb24gb2YgdGhlIGZpZWxkLlxuXHQgKiBJbiBjYXNlIG9mIGEgc2luZ2xlIHNlbGVjdGlvbiwgdGhlIGNvcHkgYnV0dG9uIGlzIGhpZGRlbi4gSW4gYW5vdGhlciBjYXNlLCBpdCBpcyB2aXNpYmxlLlxuXHQgKiBAcGFyYW0gdGFibGUgVGhlIE1EQyB0YWJsZSBvZiB0aGUgVmFsdWUgSGVscCBkaWFsb2dcblx0ICogQHBhcmFtIHZhbHVlSGVscCBUaGUgVmFsdWUgSGVscCBvYmplY3Rcblx0ICovXG5cdHNldENvcHlQcm92aWRlclZpc2liaWxpdHk6IGZ1bmN0aW9uICh0YWJsZTogTWRjSW5uZXJUYWJsZSwgdmFsdWVIZWxwOiBWYWx1ZUhlbHApOiB2b2lkIHtcblx0XHRpZiAodmFsdWVIZWxwLmdldENvbnRyb2woKT8uaXNBPEZpZWxkQmFzZT4oXCJzYXAudWkubWRjLmZpZWxkLkZpZWxkQmFzZVwiKSkge1xuXHRcdFx0dGFibGUuZ2V0Q29weVByb3ZpZGVyKCk/LnNldFZpc2libGUodHJ1ZSk7XG5cdFx0fVxuXHR9LFxuXG5cdF9nZXRDb250ZW50QnlJZDogZnVuY3Rpb24gPFQgZXh0ZW5kcyBNVGFibGUgfCBNRENUYWJsZT4oY29udGVudExpc3Q6IENvbnRlbnRbXSwgY29udGVudElkOiBzdHJpbmcpOiBUIHwgdW5kZWZpbmVkIHtcblx0XHRyZXR1cm4gY29udGVudExpc3QuZmluZChmdW5jdGlvbiAoaXRlbSkge1xuXHRcdFx0cmV0dXJuIGl0ZW0uZ2V0SWQoKSA9PT0gY29udGVudElkO1xuXHRcdH0pIGFzIFQgfCB1bmRlZmluZWQ7XG5cdH0sXG5cblx0X2NyZWF0ZVBvcG92ZXJDb250ZW50OiBmdW5jdGlvbiAoY29udGVudElkOiBzdHJpbmcsIGNhc2VTZW5zaXRpdmU6IGJvb2xlYW4sIHVzZUFzVmFsdWVIZWxwOiBib29sZWFuKTogTVRhYmxlIHtcblx0XHRyZXR1cm4gbmV3IE1UYWJsZSh7XG5cdFx0XHRpZDogY29udGVudElkLFxuXHRcdFx0Z3JvdXA6IFwiZ3JvdXAxXCIsXG5cdFx0XHRjYXNlU2Vuc2l0aXZlOiBjYXNlU2Vuc2l0aXZlLFxuXHRcdFx0dXNlQXNWYWx1ZUhlbHA6IHVzZUFzVmFsdWVIZWxwXG5cdFx0fSBhcyAkTVRhYmxlU2V0dGluZ3MpO1xuXHR9LFxuXG5cdF9jcmVhdGVEaWFsb2dDb250ZW50OiBmdW5jdGlvbiAoY29udGVudElkOiBzdHJpbmcsIGNhc2VTZW5zaXRpdmU6IGJvb2xlYW4sIGZvcmNlQmluZDogYm9vbGVhbik6IE1EQ1RhYmxlIHtcblx0XHRyZXR1cm4gbmV3IE1EQ1RhYmxlKHtcblx0XHRcdGlkOiBjb250ZW50SWQsXG5cdFx0XHRncm91cDogXCJncm91cDFcIixcblx0XHRcdGNhc2VTZW5zaXRpdmU6IGNhc2VTZW5zaXRpdmUsXG5cdFx0XHRmb3JjZUJpbmQ6IGZvcmNlQmluZFxuXHRcdH0gYXMgJE1EQ1RhYmxlU2V0dGluZ3MpO1xuXHR9LFxuXG5cdF9zaG93Q29uZGl0aW9uc0NvbnRlbnQ6IGZ1bmN0aW9uIChjb250ZW50TGlzdDogQ29udGVudFtdLCBjb250YWluZXI6IENvbnRhaW5lcik6IENvbmRpdGlvbnMgfCB1bmRlZmluZWQge1xuXHRcdGxldCBjb25kaXRpb25zQ29udGVudCA9XG5cdFx0XHRjb250ZW50TGlzdC5sZW5ndGggJiYgY29udGVudExpc3RbY29udGVudExpc3QubGVuZ3RoIC0gMV0uZ2V0TWV0YWRhdGEoKS5nZXROYW1lKCkgPT09IFwic2FwLnVpLm1kYy52YWx1ZWhlbHAuY29udGVudC5Db25kaXRpb25zXCJcblx0XHRcdFx0PyAoY29udGVudExpc3RbY29udGVudExpc3QubGVuZ3RoIC0gMV0gYXMgQ29uZGl0aW9ucylcblx0XHRcdFx0OiB1bmRlZmluZWQ7XG5cblx0XHRpZiAoY29uZGl0aW9uc0NvbnRlbnQpIHtcblx0XHRcdGNvbmRpdGlvbnNDb250ZW50LnNldFZpc2libGUodHJ1ZSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGNvbmRpdGlvbnNDb250ZW50ID0gbmV3IENvbmRpdGlvbnMoKTtcblx0XHRcdGNvbnRhaW5lci5hZGRDb250ZW50KGNvbmRpdGlvbnNDb250ZW50KTtcblx0XHR9XG5cblx0XHRyZXR1cm4gY29uZGl0aW9uc0NvbnRlbnQ7XG5cdH0sXG5cblx0X2FsaWduT3JDcmVhdGVDb250ZW50OiBmdW5jdGlvbiAoXG5cdFx0dmFsdWVMaXN0SW5mbzogVmFsdWVMaXN0SW5mbyxcblx0XHRjb250ZW50SWQ6IHN0cmluZyxcblx0XHRjYXNlU2Vuc2l0aXZlOiBib29sZWFuLFxuXHRcdHNob3dDb25kaXRpb25QYW5lbDogYm9vbGVhbixcblx0XHRjb250YWluZXI6IENvbnRhaW5lclxuXHQpOiBNRENUYWJsZSB7XG5cdFx0Y29uc3QgY29udGVudExpc3QgPSBjb250YWluZXIuZ2V0Q29udGVudCgpO1xuXHRcdGxldCBjb250ZW50ID0gVmFsdWVMaXN0SGVscGVyLl9nZXRDb250ZW50QnlJZDxNRENUYWJsZT4oY29udGVudExpc3QsIGNvbnRlbnRJZCk7XG5cblx0XHRpZiAoIWNvbnRlbnQpIHtcblx0XHRcdGNvbnN0IGZvcmNlQmluZCA9IHZhbHVlTGlzdEluZm8udmFsdWVMaXN0SW5mby5GZXRjaFZhbHVlcyA9PT0gMiA/IGZhbHNlIDogdHJ1ZTtcblxuXHRcdFx0Y29udGVudCA9IFZhbHVlTGlzdEhlbHBlci5fY3JlYXRlRGlhbG9nQ29udGVudChjb250ZW50SWQsIGNhc2VTZW5zaXRpdmUsIGZvcmNlQmluZCk7XG5cblx0XHRcdGlmICghc2hvd0NvbmRpdGlvblBhbmVsKSB7XG5cdFx0XHRcdGNvbnRhaW5lci5hZGRDb250ZW50KGNvbnRlbnQpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Y29udGFpbmVyLmluc2VydENvbnRlbnQoY29udGVudCwgY29udGVudExpc3QubGVuZ3RoIC0gMSk7IC8vIGluc2VydCBjb250ZW50IGJlZm9yZSBjb25kaXRpb25zIGNvbnRlbnRcblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gY29udGVudDtcblx0fSxcblxuXHRfcHJlcGFyZVZhbHVlSGVscFR5cGVBaGVhZDogZnVuY3Rpb24gKFxuXHRcdHZhbHVlSGVscDogVmFsdWVIZWxwLFxuXHRcdGNvbnRhaW5lcjogQ29udGFpbmVyLFxuXHRcdHZhbHVlTGlzdEluZm9zOiBWYWx1ZUxpc3RJbmZvW10sXG5cdFx0cGF5bG9hZDogVmFsdWVIZWxwUGF5bG9hZCxcblx0XHRjYXNlU2Vuc2l0aXZlOiBib29sZWFuLFxuXHRcdGZpcnN0VHlwZUFoZWFkQ29udGVudDogTVRhYmxlXG5cdCk6IHsgdmFsdWVMaXN0SW5mbzogVmFsdWVMaXN0SW5mbzsgY29udGVudDogTVRhYmxlIH0ge1xuXHRcdGNvbnN0IGNvbnRlbnRMaXN0ID0gY29udGFpbmVyLmdldENvbnRlbnQoKTtcblx0XHRsZXQgcXVhbGlmaWVyRm9yVHlwZWFoZWFkID0gdmFsdWVIZWxwLmRhdGEoXCJ2YWx1ZWxpc3RGb3JWYWxpZGF0aW9uXCIpIHx8IFwiXCI7IC8vIGNhbiBhbHNvIGJlIG51bGxcblx0XHRpZiAocXVhbGlmaWVyRm9yVHlwZWFoZWFkID09PSBcIiBcIikge1xuXHRcdFx0cXVhbGlmaWVyRm9yVHlwZWFoZWFkID0gXCJcIjtcblx0XHR9XG5cdFx0Y29uc3QgdmFsdWVMaXN0SW5mbyA9IHF1YWxpZmllckZvclR5cGVhaGVhZCAvLyBmYWxsYmFjayBpZiBxdWFsaWZpZXIgZm9yIFR5cGVhaGVhZCBub3QgZXhpc3RzXG5cdFx0XHQ/IHZhbHVlTGlzdEluZm9zLmZpbHRlcihmdW5jdGlvbiAoc3ViVmFsdWVMaXN0SW5mbykge1xuXHRcdFx0XHRcdHJldHVybiBzdWJWYWx1ZUxpc3RJbmZvLnZhbHVlSGVscFF1YWxpZmllciA9PT0gcXVhbGlmaWVyRm9yVHlwZWFoZWFkO1xuXHRcdFx0ICB9KVswXSB8fCB2YWx1ZUxpc3RJbmZvc1swXVxuXHRcdFx0OiB2YWx1ZUxpc3RJbmZvc1swXTtcblxuXHRcdFZhbHVlTGlzdEhlbHBlci5fYWRkSW5PdXRQYXJhbWV0ZXJzVG9QYXlsb2FkKHBheWxvYWQsIHZhbHVlTGlzdEluZm8pO1xuXG5cdFx0Y29uc3QgY29udGVudElkID0gVmFsdWVMaXN0SGVscGVyLl9nZXRDb250ZW50SWQodmFsdWVIZWxwLmdldElkKCksIHZhbHVlTGlzdEluZm8udmFsdWVIZWxwUXVhbGlmaWVyLCB0cnVlKTtcblx0XHRsZXQgY29udGVudCA9IFZhbHVlTGlzdEhlbHBlci5fZ2V0Q29udGVudEJ5SWQ8TVRhYmxlPihjb250ZW50TGlzdCwgY29udGVudElkKTtcblxuXHRcdGlmICghY29udGVudCkge1xuXHRcdFx0Y29uc3QgdXNlQXNWYWx1ZUhlbHAgPSBmaXJzdFR5cGVBaGVhZENvbnRlbnQuZ2V0VXNlQXNWYWx1ZUhlbHAoKTtcblx0XHRcdGNvbnRlbnQgPSBWYWx1ZUxpc3RIZWxwZXIuX2NyZWF0ZVBvcG92ZXJDb250ZW50KGNvbnRlbnRJZCwgY2FzZVNlbnNpdGl2ZSwgdXNlQXNWYWx1ZUhlbHApO1xuXG5cdFx0XHRjb250YWluZXIuaW5zZXJ0Q29udGVudChjb250ZW50LCAwKTsgLy8gaW5zZXJ0IGNvbnRlbnQgYXMgZmlyc3QgY29udGVudFxuXHRcdH0gZWxzZSBpZiAoY29udGVudElkICE9PSBjb250ZW50TGlzdFswXS5nZXRJZCgpKSB7XG5cdFx0XHQvLyBjb250ZW50IGFscmVhZHkgYXZhaWxhYmxlIGJ1dCBub3QgYXMgZmlyc3QgY29udGVudD9cblx0XHRcdGNvbnRhaW5lci5yZW1vdmVDb250ZW50KGNvbnRlbnQpO1xuXHRcdFx0Y29udGFpbmVyLmluc2VydENvbnRlbnQoY29udGVudCwgMCk7IC8vIG1vdmUgY29udGVudCB0byBmaXJzdCBwb3NpdGlvblxuXHRcdH1cblxuXHRcdHJldHVybiB7IHZhbHVlTGlzdEluZm8sIGNvbnRlbnQgfTtcblx0fSxcblxuXHRfcHJlcGFyZVZhbHVlSGVscERpYWxvZzogZnVuY3Rpb24gKFxuXHRcdHZhbHVlSGVscDogVmFsdWVIZWxwLFxuXHRcdGNvbnRhaW5lcjogQ29udGFpbmVyLFxuXHRcdHZhbHVlTGlzdEluZm9zOiBWYWx1ZUxpc3RJbmZvW10sXG5cdFx0cGF5bG9hZDogVmFsdWVIZWxwUGF5bG9hZCxcblx0XHRzZWxlY3RlZENvbnRlbnRJZDogc3RyaW5nLFxuXHRcdGNhc2VTZW5zaXRpdmU6IGJvb2xlYW5cblx0KToge1xuXHRcdHNlbGVjdGVkSW5mbzogVmFsdWVMaXN0SW5mbztcblx0XHRzZWxlY3RlZENvbnRlbnQ6IE1EQ1RhYmxlO1xuXHRcdGNvbmRpdGlvbkNvbnRlbnQ/OiBDb25kaXRpb25zO1xuXHR9IHtcblx0XHRjb25zdCBzaG93Q29uZGl0aW9uUGFuZWwgPSB2YWx1ZUhlbHAuZGF0YShcInNob3dDb25kaXRpb25QYW5lbFwiKSAmJiB2YWx1ZUhlbHAuZGF0YShcInNob3dDb25kaXRpb25QYW5lbFwiKSAhPT0gXCJmYWxzZVwiO1xuXHRcdGNvbnN0IGNvbnRlbnRMaXN0ID0gY29udGFpbmVyLmdldENvbnRlbnQoKTtcblxuXHRcdC8vIHNldCBhbGwgY29udGVudHMgdG8gaW52aXNpYmxlXG5cdFx0Zm9yIChjb25zdCBjb250ZW50TGlzdEl0ZW0gb2YgY29udGVudExpc3QpIHtcblx0XHRcdGNvbnRlbnRMaXN0SXRlbS5zZXRWaXNpYmxlKGZhbHNlKTtcblx0XHR9XG5cblx0XHRjb25zdCBjb25kaXRpb25Db250ZW50ID0gc2hvd0NvbmRpdGlvblBhbmVsID8gdGhpcy5fc2hvd0NvbmRpdGlvbnNDb250ZW50KGNvbnRlbnRMaXN0LCBjb250YWluZXIpIDogdW5kZWZpbmVkO1xuXHRcdGNvbnN0IGZpZWxkID0gdmFsdWVIZWxwLmdldENvbnRyb2woKTtcblxuXHRcdC8vIEZvciBhIEZpbHRlckZpZWxkIHdlIGNoZWNrIHRoZSBvcGVyYXRvcnMgaWYgdGhleSBhcmUgZGVmYXVsdCAoZW1wdHkgbGlzdD1hbGwpIG9yIGluY2x1ZGUgRVFcblx0XHRjb25zdCBoYXNPcGVyYXRvckVRID1cblx0XHRcdGZpZWxkICYmIGZpZWxkLmlzQTxGaWx0ZXJGaWVsZD4oXCJzYXAudWkubWRjLkZpbHRlckZpZWxkXCIpXG5cdFx0XHRcdD8gZmllbGQuZ2V0T3BlcmF0b3JzKCkubGVuZ3RoID09PSAwIHx8IGZpZWxkLmdldE9wZXJhdG9ycygpLmluY2x1ZGVzKFwiRVFcIilcblx0XHRcdFx0OiB0cnVlO1xuXG5cdFx0bGV0IHNlbGVjdGVkSW5mbzogVmFsdWVMaXN0SW5mbyB8IHVuZGVmaW5lZCwgc2VsZWN0ZWRDb250ZW50OiBNRENUYWJsZSB8IHVuZGVmaW5lZDtcblxuXHRcdC8vIENyZWF0ZSBvciByZXVzZSBjb250ZW50cyBmb3IgdGhlIGN1cnJlbnQgY29udGV4dFxuXHRcdGZvciAoY29uc3QgdmFsdWVMaXN0SW5mbyBvZiB2YWx1ZUxpc3RJbmZvcykge1xuXHRcdFx0Y29uc3QgdmFsdWVIZWxwUXVhbGlmaWVyID0gdmFsdWVMaXN0SW5mby52YWx1ZUhlbHBRdWFsaWZpZXI7XG5cblx0XHRcdFZhbHVlTGlzdEhlbHBlci5fYWRkSW5PdXRQYXJhbWV0ZXJzVG9QYXlsb2FkKHBheWxvYWQsIHZhbHVlTGlzdEluZm8pO1xuXG5cdFx0XHRjb25zdCBjb250ZW50SWQgPSBWYWx1ZUxpc3RIZWxwZXIuX2dldENvbnRlbnRJZCh2YWx1ZUhlbHAuZ2V0SWQoKSwgdmFsdWVIZWxwUXVhbGlmaWVyLCBmYWxzZSk7XG5cblx0XHRcdGNvbnN0IGNvbnRlbnQgPSB0aGlzLl9hbGlnbk9yQ3JlYXRlQ29udGVudCh2YWx1ZUxpc3RJbmZvLCBjb250ZW50SWQsIGNhc2VTZW5zaXRpdmUsIHNob3dDb25kaXRpb25QYW5lbCwgY29udGFpbmVyKTtcblx0XHRcdGNvbnRlbnQuc2V0VmlzaWJsZShoYXNPcGVyYXRvckVRKTsgLy8gRG8gbm90IHNob3cgYSB2YWx1ZSBoZWxwIHRhYmxlIGZvciBhIGZpbHRlciBmaWVsZCB3aXRob3V0IG9wZXJhdG9yICdFUSdcblxuXHRcdFx0aWYgKHZhbHVlTGlzdEluZm8udmFsdWVMaXN0SW5mby5MYWJlbCAmJiBmaWVsZCkge1xuXHRcdFx0XHRjb25zdCB0aXRsZSA9IENvbW1vblV0aWxzLmdldFRyYW5zbGF0ZWRUZXh0RnJvbUV4cEJpbmRpbmdTdHJpbmcodmFsdWVMaXN0SW5mby52YWx1ZUxpc3RJbmZvLkxhYmVsLCBmaWVsZCk7XG5cdFx0XHRcdGNvbnRlbnQuc2V0VGl0bGUodGl0bGUpO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoIXNlbGVjdGVkQ29udGVudCB8fCAoc2VsZWN0ZWRDb250ZW50SWQgJiYgc2VsZWN0ZWRDb250ZW50SWQgPT09IGNvbnRlbnRJZCkpIHtcblx0XHRcdFx0c2VsZWN0ZWRDb250ZW50ID0gY29udGVudDtcblx0XHRcdFx0c2VsZWN0ZWRJbmZvID0gdmFsdWVMaXN0SW5mbztcblx0XHRcdH1cblx0XHR9XG5cblx0XHRpZiAoIXNlbGVjdGVkSW5mbyB8fCAhc2VsZWN0ZWRDb250ZW50KSB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJzZWxlY3RlZEluZm8gb3Igc2VsZWN0ZWRDb250ZW50IHVuZGVmaW5lZFwiKTtcblx0XHR9XG5cblx0XHRyZXR1cm4geyBzZWxlY3RlZEluZm8sIHNlbGVjdGVkQ29udGVudCwgY29uZGl0aW9uQ29udGVudCB9O1xuXHR9LFxuXG5cdF9hZGREZXNjcmlwdGlvbkluZm9zVG9QYXlsb2FkOiBmdW5jdGlvbiAocGF5bG9hZDogVmFsdWVIZWxwUGF5bG9hZCwgdmFsdWVMaXN0SW5mbzogVmFsdWVMaXN0SW5mbywgbWV0YU1vZGVsOiBPRGF0YU1ldGFNb2RlbCk6IHZvaWQge1xuXHRcdGlmIChwYXlsb2FkLnZhbHVlSGVscERlc2NyaXB0aW9uUGF0aCAhPT0gdmFsdWVMaXN0SW5mby5kZXNjcmlwdGlvblBhdGggfHwgcGF5bG9hZC5leHRlcm5hbElkUGF0aCkge1xuXHRcdFx0Y29uc3QgY29udmVydGVkTWV0YWRhdGEgPSBjb252ZXJ0VHlwZXMobWV0YU1vZGVsKTtcblx0XHRcdGNvbnN0IHByb3BlcnR5RGVzY3JpcHRpb25QYXRoID0gKFxuXHRcdFx0XHRjb252ZXJ0ZWRNZXRhZGF0YS5yZXNvbHZlUGF0aDxQcm9wZXJ0eT4ocGF5bG9hZC5wcm9wZXJ0eVBhdGgpLnRhcmdldD8uYW5ub3RhdGlvbnM/LkNvbW1vblxuXHRcdFx0XHRcdD8uVGV4dCBhcyB1bmtub3duIGFzIFBhdGhBbm5vdGF0aW9uRXhwcmVzc2lvbjxzdHJpbmc+XG5cdFx0XHQpPy5wYXRoO1xuXG5cdFx0XHQvKiBFbnJpY2ggcGF5bG9hZCB3aXRoIFRleHQgUHJvcGVydHkgSW5mb3MgKi9cblx0XHRcdHBheWxvYWQudmFsdWVIZWxwRGVzY3JpcHRpb25QYXRoID0gdmFsdWVMaXN0SW5mby5kZXNjcmlwdGlvblBhdGg7XG5cdFx0XHRwYXlsb2FkLnZhbHVlSGVscEtleVBhdGggPSB2YWx1ZUxpc3RJbmZvLmtleVBhdGg7XG5cdFx0XHRpZiAocHJvcGVydHlEZXNjcmlwdGlvblBhdGgpIHtcblx0XHRcdFx0cGF5bG9hZC5tYXhMZW5ndGggPSBwYXlsb2FkLnZhbHVlSGVscERlc2NyaXB0aW9uUGF0aFxuXHRcdFx0XHRcdD8gY29udmVydGVkTWV0YWRhdGEucmVzb2x2ZVBhdGg8UHJvcGVydHk+KFxuXHRcdFx0XHRcdFx0XHRgLyR7dmFsdWVMaXN0SW5mby52YWx1ZUxpc3RJbmZvLkNvbGxlY3Rpb25QYXRofS8ke3BheWxvYWQudmFsdWVIZWxwRGVzY3JpcHRpb25QYXRofWBcblx0XHRcdFx0XHQgICk/LnRhcmdldD8ubWF4TGVuZ3RoXG5cdFx0XHRcdFx0OiB1bmRlZmluZWQ7XG5cdFx0XHRcdHBheWxvYWQucHJvcGVydHlEZXNjcmlwdGlvblBhdGggPSBwcm9wZXJ0eURlc2NyaXB0aW9uUGF0aDtcblx0XHRcdH1cblxuXHRcdFx0LyogRVhURVJOQUxJRCAqL1xuXHRcdFx0Ly8gQWRkIGRlc2NyaXB0aW9uUGF0aCB0byB0aGUgcGF5bG9hZCBhbmQgdmFsdWVMaXN0SW5mb1xuXHRcdFx0Y29uc3QgZXh0ZXJuYWxJZFBhdGggPSBwYXlsb2FkLmV4dGVybmFsSWRQYXRoO1xuXHRcdFx0aWYgKGV4dGVybmFsSWRQYXRoICYmICFwYXlsb2FkLnZhbHVlSGVscERlc2NyaXB0aW9uUGF0aCkge1xuXHRcdFx0XHRjb25zdCBwcm9wZXJ0eU5hbWUgPSBtZXRhTW9kZWwuZ2V0T2JqZWN0KGAke3BheWxvYWQucHJvcGVydHlQYXRofUBzYXB1aS5uYW1lYCk7XG5cdFx0XHRcdGNvbnN0IGV4dGVybmFsSWRGdWxsUGF0aCA9IHBheWxvYWQucHJvcGVydHlQYXRoLnJlcGxhY2UocHJvcGVydHlOYW1lLCBleHRlcm5hbElkUGF0aCk7XG5cdFx0XHRcdGNvbnN0IGRlc2NyaXB0aW9uUGF0aCA9IChcblx0XHRcdFx0XHRjb252ZXJ0ZWRNZXRhZGF0YS5yZXNvbHZlUGF0aDxQcm9wZXJ0eT4oZXh0ZXJuYWxJZEZ1bGxQYXRoKS50YXJnZXQ/LmFubm90YXRpb25zPy5Db21tb25cblx0XHRcdFx0XHRcdD8uVGV4dCBhcyB1bmtub3duIGFzIFBhdGhBbm5vdGF0aW9uRXhwcmVzc2lvbjxzdHJpbmc+XG5cdFx0XHRcdCk/LnBhdGg7XG5cdFx0XHRcdHZhbHVlTGlzdEluZm8uZGVzY3JpcHRpb25QYXRoID0gZGVzY3JpcHRpb25QYXRoO1xuXHRcdFx0XHRwYXlsb2FkLnZhbHVlSGVscERlc2NyaXB0aW9uUGF0aCA9IGRlc2NyaXB0aW9uUGF0aDtcblx0XHRcdH1cblx0XHR9XG5cdH0sXG5cblx0c2hvd1ZhbHVlTGlzdDogYXN5bmMgZnVuY3Rpb24gKHBheWxvYWQ6IFZhbHVlSGVscFBheWxvYWQsIGNvbnRhaW5lcjogQ29udGFpbmVyLCBzZWxlY3RlZENvbnRlbnRJZDogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0Y29uc3QgdmFsdWVIZWxwID0gY29udGFpbmVyLmdldFBhcmVudCgpIGFzIFZhbHVlSGVscCxcblx0XHRcdGlzVHlwZWFoZWFkID0gY29udGFpbmVyLmlzVHlwZWFoZWFkKCksXG5cdFx0XHRwcm9wZXJ0eVBhdGggPSBwYXlsb2FkLnByb3BlcnR5UGF0aCxcblx0XHRcdC8qIEluIGNhc2Ugb2YgUkFQIHRoZSB2YWx1ZUhlbHAgbW9kZWwgaXMgZGlmZmVyZW50IHRvIHRoZSBjb250cm9sIG1vZGVsICovXG5cdFx0XHRjb250cm9sID0gdmFsdWVIZWxwLmdldENvbnRyb2woKSxcblx0XHRcdG1ldGFNb2RlbCA9IGNvbnRyb2xcblx0XHRcdFx0PyAodmFsdWVIZWxwLmdldENvbnRyb2woKT8uZ2V0TW9kZWwoKSBhcyBPRGF0YU1vZGVsKS5nZXRNZXRhTW9kZWwoKVxuXHRcdFx0XHQ6ICh2YWx1ZUhlbHAuZ2V0TW9kZWwoKSBhcyBPRGF0YU1vZGVsKS5nZXRNZXRhTW9kZWwoKSxcblx0XHRcdHZoVUlNb2RlbCA9XG5cdFx0XHRcdHZhbHVlSGVscC5nZXRNb2RlbChcIl9WSFVJXCIpICE9PSB1bmRlZmluZWRcblx0XHRcdFx0XHQ/ICh2YWx1ZUhlbHAuZ2V0TW9kZWwoXCJfVkhVSVwiKSBhcyBKU09OTW9kZWwpXG5cdFx0XHRcdFx0OiBWYWx1ZUxpc3RIZWxwZXIuY3JlYXRlVkhVSU1vZGVsKHZhbHVlSGVscCwgcHJvcGVydHlQYXRoLCBtZXRhTW9kZWwpO1xuXHRcdC8qIEVYVEVSTkFMSUQgKi9cblx0XHRwYXlsb2FkLmV4dGVybmFsSWRQYXRoID0gbWV0YU1vZGVsPy5nZXRPYmplY3QoYCR7cGF5bG9hZC5wcm9wZXJ0eVBhdGh9QGNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5FeHRlcm5hbElEYCk/LiRQYXRoO1xuXG5cdFx0dmhVSU1vZGVsLnNldFByb3BlcnR5KFwiL2lzU3VnZ2VzdGlvblwiLCBpc1R5cGVhaGVhZCk7XG5cdFx0dmhVSU1vZGVsLnNldFByb3BlcnR5KFwiL21pblNjcmVlbldpZHRoXCIsICFpc1R5cGVhaGVhZCA/IFwiNDE4cHhcIiA6IHVuZGVmaW5lZCk7XG5cblx0XHR0cnkge1xuXHRcdFx0Y29uc3QgdmFsdWVMaXN0SW5mb3MgPSBhd2FpdCBWYWx1ZUxpc3RIZWxwZXIuZ2V0VmFsdWVMaXN0SW5mbyh2YWx1ZUhlbHAsIHByb3BlcnR5UGF0aCwgcGF5bG9hZCwgbWV0YU1vZGVsKTtcblx0XHRcdGNvbnN0IGZpcnN0VHlwZUFoZWFkQ29udGVudCA9IHZhbHVlSGVscC5nZXRUeXBlYWhlYWQoKS5nZXRDb250ZW50KClbMF0gYXMgTVRhYmxlLFxuXHRcdFx0XHRjYXNlU2Vuc2l0aXZlID0gZmlyc3RUeXBlQWhlYWRDb250ZW50LmdldENhc2VTZW5zaXRpdmUoKTsgLy8gdGFrZSBjYXNlU2Vuc2l0aXZlIGZyb20gZmlyc3QgVHlwZWFoZWFkIGNvbnRlbnRcblxuXHRcdFx0aWYgKGlzVHlwZWFoZWFkKSB7XG5cdFx0XHRcdGNvbnN0IHsgdmFsdWVMaXN0SW5mbywgY29udGVudCB9ID0gVmFsdWVMaXN0SGVscGVyLl9wcmVwYXJlVmFsdWVIZWxwVHlwZUFoZWFkKFxuXHRcdFx0XHRcdHZhbHVlSGVscCxcblx0XHRcdFx0XHRjb250YWluZXIsXG5cdFx0XHRcdFx0dmFsdWVMaXN0SW5mb3MsXG5cdFx0XHRcdFx0cGF5bG9hZCxcblx0XHRcdFx0XHRjYXNlU2Vuc2l0aXZlLFxuXHRcdFx0XHRcdGZpcnN0VHlwZUFoZWFkQ29udGVudFxuXHRcdFx0XHQpO1xuXG5cdFx0XHRcdHBheWxvYWQudmFsdWVIZWxwUXVhbGlmaWVyID0gdmFsdWVMaXN0SW5mby52YWx1ZUhlbHBRdWFsaWZpZXI7XG5cdFx0XHRcdHZoVUlNb2RlbC5zZXRQcm9wZXJ0eShcblx0XHRcdFx0XHRcIi9zZWxlY3RlZFByb3BlcnRpZXNcIixcblx0XHRcdFx0XHR2YWx1ZUxpc3RJbmZvLmNvbHVtbkRlZnMubWFwKChjb2wpID0+IGNvbC5wYXRoKVxuXHRcdFx0XHQpO1xuXHRcdFx0XHRWYWx1ZUxpc3RIZWxwZXIuX2FkZERlc2NyaXB0aW9uSW5mb3NUb1BheWxvYWQocGF5bG9hZCwgdmFsdWVMaXN0SW5mbywgbWV0YU1vZGVsKTtcblxuXHRcdFx0XHRpZiAoY29udGVudC5nZXRUYWJsZSgpID09PSB1bmRlZmluZWQgfHwgY29udGVudC5nZXRUYWJsZSgpID09PSBudWxsKSB7XG5cdFx0XHRcdFx0YXdhaXQgVmFsdWVMaXN0SGVscGVyLl9jcmVhdGVWYWx1ZUhlbHBUeXBlYWhlYWQocHJvcGVydHlQYXRoLCB2YWx1ZUhlbHAsIGNvbnRlbnQsIHZhbHVlTGlzdEluZm8sIHBheWxvYWQsIG1ldGFNb2RlbCk7XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGNvbnN0IHsgc2VsZWN0ZWRJbmZvLCBzZWxlY3RlZENvbnRlbnQsIGNvbmRpdGlvbkNvbnRlbnQgfSA9IFZhbHVlTGlzdEhlbHBlci5fcHJlcGFyZVZhbHVlSGVscERpYWxvZyhcblx0XHRcdFx0XHR2YWx1ZUhlbHAsXG5cdFx0XHRcdFx0Y29udGFpbmVyLFxuXHRcdFx0XHRcdHZhbHVlTGlzdEluZm9zLFxuXHRcdFx0XHRcdHBheWxvYWQsXG5cdFx0XHRcdFx0c2VsZWN0ZWRDb250ZW50SWQsXG5cdFx0XHRcdFx0Y2FzZVNlbnNpdGl2ZVxuXHRcdFx0XHQpO1xuXG5cdFx0XHRcdHBheWxvYWQudmFsdWVIZWxwUXVhbGlmaWVyID0gc2VsZWN0ZWRJbmZvLnZhbHVlSGVscFF1YWxpZmllcjtcblx0XHRcdFx0VmFsdWVMaXN0SGVscGVyLl9hZGREZXNjcmlwdGlvbkluZm9zVG9QYXlsb2FkKHBheWxvYWQsIHNlbGVjdGVkSW5mbywgbWV0YU1vZGVsKTtcblxuXHRcdFx0XHQvKiBGb3IgY29udGV4dCBkZXBlbnRlbnQgdmFsdWUgaGVscHMgdGhlIHZhbHVlIGxpc3QgbGFiZWwgaXMgdXNlZCBmb3IgdGhlIGRpYWxvZyB0aXRsZSAqL1xuXHRcdFx0XHRjb25zdCBmaWVsZCA9IHZhbHVlSGVscC5nZXRDb250cm9sKCk7XG5cdFx0XHRcdGlmIChmaWVsZCkge1xuXHRcdFx0XHRcdGNvbnN0IHRpdGxlID0gQ29tbW9uVXRpbHMuZ2V0VHJhbnNsYXRlZFRleHRGcm9tRXhwQmluZGluZ1N0cmluZyhcblx0XHRcdFx0XHRcdFZhbHVlTGlzdEhlbHBlci5fZ2V0RGlhbG9nVGl0bGUodmFsdWVIZWxwLCBzZWxlY3RlZEluZm8udmFsdWVMaXN0SW5mbz8uTGFiZWwpLFxuXHRcdFx0XHRcdFx0ZmllbGRcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdGNvbnRhaW5lci5zZXRUaXRsZSh0aXRsZSk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZiAoc2VsZWN0ZWRDb250ZW50LmdldFRhYmxlKCkgPT09IHVuZGVmaW5lZCB8fCBzZWxlY3RlZENvbnRlbnQuZ2V0VGFibGUoKSA9PT0gbnVsbCkge1xuXHRcdFx0XHRcdGF3YWl0IFZhbHVlTGlzdEhlbHBlci5fY3JlYXRlVmFsdWVIZWxwRGlhbG9nKFxuXHRcdFx0XHRcdFx0bWV0YU1vZGVsLFxuXHRcdFx0XHRcdFx0cHJvcGVydHlQYXRoLFxuXHRcdFx0XHRcdFx0dmFsdWVIZWxwLFxuXHRcdFx0XHRcdFx0c2VsZWN0ZWRDb250ZW50LFxuXHRcdFx0XHRcdFx0c2VsZWN0ZWRJbmZvLFxuXHRcdFx0XHRcdFx0cGF5bG9hZCxcblx0XHRcdFx0XHRcdGNvbmRpdGlvbkNvbnRlbnRcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSBjYXRjaCAoZXJyKSB7XG5cdFx0XHR0aGlzLl9sb2dFcnJvcihwcm9wZXJ0eVBhdGgsIGVycik7XG5cdFx0XHRWYWx1ZUxpc3RIZWxwZXIuZGVzdHJveVZIQ29udGVudCh2YWx1ZUhlbHApO1xuXHRcdH1cblx0fSxcblxuXHRnZXRJbkFuZE91dFBhcmFtZXRlcnNMaXN0KCk6IENvbW1vbkFubm90YXRpb25UeXBlc1tdIHtcblx0XHRyZXR1cm4gW1xuXHRcdFx0Q29tbW9uQW5ub3RhdGlvblR5cGVzLlZhbHVlTGlzdFBhcmFtZXRlck91dCxcblx0XHRcdENvbW1vbkFubm90YXRpb25UeXBlcy5WYWx1ZUxpc3RQYXJhbWV0ZXJJbixcblx0XHRcdENvbW1vbkFubm90YXRpb25UeXBlcy5WYWx1ZUxpc3RQYXJhbWV0ZXJJbk91dFxuXHRcdF07XG5cdH1cbn07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
|